{ "dist/client.js": "KCgpID0+IHsKICB2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogIHZhciBfX3JlcXVpcmUgPSAvKiBAX19QVVJFX18gKi8gKCh4MjEpID0+IHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIiA/IHJlcXVpcmUgOiB0eXBlb2YgUHJveHkgIT09ICJ1bmRlZmluZWQiID8gbmV3IFByb3h5KHgyMSwgewogICAgZ2V0OiAoYTQsIGIyNSkgPT4gKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIiA/IHJlcXVpcmUgOiBhNClbYjI1XQogIH0pIDogeDIxKShmdW5jdGlvbih4MjEpIHsKICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gInVuZGVmaW5lZCIpCiAgICAgIHJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJyArIHgyMSArICciIGlzIG5vdCBzdXBwb3J0ZWQnKTsKICB9KTsKICB2YXIgX19leHBvcnQgPSAodGFyZ2V0LCBhbGwpID0+IHsKICAgIGZvciAodmFyIG5hbWUgaW4gYWxsKQogICAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pOwogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L3NjaGVkdWxlckAwLjIwLjIvZGVuby9zY2hlZHVsZXIuanMKICB2YXIgeiA9IE9iamVjdC5jcmVhdGU7CiAgdmFyIE8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIEIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogIHZhciBHID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7CiAgdmFyIGVlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mOwogIHZhciBuZSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgdmFyIFYgPSAoZTUsIG44KSA9PiAoKSA9PiAobjggfHwgZTUoKG44ID0geyBleHBvcnRzOiB7fSB9KS5leHBvcnRzLCBuOCksIG44LmV4cG9ydHMpOwogIHZhciB0ZSA9IChlNSwgbjgsIHQ0LCBsNykgPT4gewogICAgaWYgKG44ICYmIHR5cGVvZiBuOCA9PSAib2JqZWN0IiB8fCB0eXBlb2YgbjggPT0gImZ1bmN0aW9uIikKICAgICAgZm9yIChsZXQgbzQgb2YgRyhuOCkpCiAgICAgICAgIW5lLmNhbGwoZTUsIG80KSAmJiBvNCAhPT0gdDQgJiYgTyhlNSwgbzQsIHsgZ2V0OiAoKSA9PiBuOFtvNF0sIGVudW1lcmFibGU6ICEobDcgPSBCKG44LCBvNCkpIHx8IGw3LmVudW1lcmFibGUgfSk7CiAgICByZXR1cm4gZTU7CiAgfTsKICB2YXIgcmUgPSAoZTUsIG44LCB0NCkgPT4gKHQ0ID0gZTUgIT0gbnVsbCA/IHooZWUoZTUpKSA6IHt9LCB0ZShuOCB8fCAhZTUgfHwgIWU1Ll9fZXNNb2R1bGUgPyBPKHQ0LCAiZGVmYXVsdCIsIHsgdmFsdWU6IGU1LCBlbnVtZXJhYmxlOiB0cnVlIH0pIDogdDQsIGU1KSk7CiAgdmFyIFggPSBWKChyMykgPT4gewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIHkxNywgaDEwLCBUMjksIHEyMDsKICAgIHR5cGVvZiBwZXJmb3JtYW5jZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09ICJmdW5jdGlvbiIgPyAoSDIzID0gcGVyZm9ybWFuY2UsIHIzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gSDIzLm5vdygpOwogICAgfSkgOiAoQzE3ID0gRGF0ZSwgSjE0ID0gQzE3Lm5vdygpLCByMy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIEMxNy5ub3coKSAtIEoxNDsKICAgIH0pOwogICAgdmFyIEgyMywgQzE3LCBKMTQ7CiAgICB0eXBlb2Ygd2luZG93ID4gInUiIHx8IHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPSAiZnVuY3Rpb24iID8gKHAxOCA9IG51bGwsIEwyMiA9IG51bGwsIE4xNyA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAocDE4ICE9PSBudWxsKQogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgZTUgPSByMy51bnN0YWJsZV9ub3coKTsKICAgICAgICAgIHAxOCh0cnVlLCBlNSksIHAxOCA9IG51bGw7CiAgICAgICAgfSBjYXRjaCAobjgpIHsKICAgICAgICAgIHRocm93IHNldFRpbWVvdXQoTjE3LCAwKSwgbjg7CiAgICAgICAgfQogICAgfSwgeTE3ID0gZnVuY3Rpb24oZTUpIHsKICAgICAgcDE4ICE9PSBudWxsID8gc2V0VGltZW91dCh5MTcsIDAsIGU1KSA6IChwMTggPSBlNSwgc2V0VGltZW91dChOMTcsIDApKTsKICAgIH0sIGgxMCA9IGZ1bmN0aW9uKGU1LCBuOCkgewogICAgICBMMjIgPSBzZXRUaW1lb3V0KGU1LCBuOCk7CiAgICB9LCBUMjkgPSBmdW5jdGlvbigpIHsKICAgICAgY2xlYXJUaW1lb3V0KEwyMik7CiAgICB9LCByMy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LCBxMjAgPSByMy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uKCkgewogICAgfSkgOiAoSzE5ID0gd2luZG93LnNldFRpbWVvdXQsIFExNyA9IHdpbmRvdy5jbGVhclRpbWVvdXQsIHR5cGVvZiBjb25zb2xlIDwgInUiICYmIChTMjEgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUsIHR5cGVvZiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9ICJmdW5jdGlvbiIgJiYgY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMiKSwgdHlwZW9mIFMyMSAhPSAiZnVuY3Rpb24iICYmIGNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMiKSksIG0yMyA9IGZhbHNlLCB3MjEgPSBudWxsLCBnMTIgPSAtMSwgajE5ID0gNSwgRTE1ID0gMCwgcjMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHIzLnVuc3RhYmxlX25vdygpID49IEUxNTsKICAgIH0sIHEyMCA9IGZ1bmN0aW9uKCkgewogICAgfSwgcjMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbihlNSkgewogICAgICAwID4gZTUgfHwgMTI1IDwgZTUgPyBjb25zb2xlLmVycm9yKCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQiKSA6IGoxOSA9IDAgPCBlNSA/IE1hdGguZmxvb3IoMWUzIC8gZTUpIDogNTsKICAgIH0sIEYyMiA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpLCBQMjcgPSBGMjIucG9ydDIsIEYyMi5wb3J0MS5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKHcyMSAhPT0gbnVsbCkgewogICAgICAgIHZhciBlNSA9IHIzLnVuc3RhYmxlX25vdygpOwogICAgICAgIEUxNSA9IGU1ICsgajE5OwogICAgICAgIHRyeSB7CiAgICAgICAgICB3MjEodHJ1ZSwgZTUpID8gUDI3LnBvc3RNZXNzYWdlKG51bGwpIDogKG0yMyA9IGZhbHNlLCB3MjEgPSBudWxsKTsKICAgICAgICB9IGNhdGNoIChuOCkgewogICAgICAgICAgdGhyb3cgUDI3LnBvc3RNZXNzYWdlKG51bGwpLCBuODsKICAgICAgICB9CiAgICAgIH0gZWxzZQogICAgICAgIG0yMyA9IGZhbHNlOwogICAgfSwgeTE3ID0gZnVuY3Rpb24oZTUpIHsKICAgICAgdzIxID0gZTUsIG0yMyB8fCAobTIzID0gdHJ1ZSwgUDI3LnBvc3RNZXNzYWdlKG51bGwpKTsKICAgIH0sIGgxMCA9IGZ1bmN0aW9uKGU1LCBuOCkgewogICAgICBnMTIgPSBLMTkoZnVuY3Rpb24oKSB7CiAgICAgICAgZTUocjMudW5zdGFibGVfbm93KCkpOwogICAgICB9LCBuOCk7CiAgICB9LCBUMjkgPSBmdW5jdGlvbigpIHsKICAgICAgUTE3KGcxMiksIGcxMiA9IC0xOwogICAgfSk7CiAgICB2YXIgcDE4LCBMMjIsIE4xNywgSzE5LCBRMTcsIFMyMSwgbTIzLCB3MjEsIGcxMiwgajE5LCBFMTUsIEYyMiwgUDI3OwogICAgZnVuY3Rpb24gUjI2KGU1LCBuOCkgewogICAgICB2YXIgdDQgPSBlNS5sZW5ndGg7CiAgICAgIGU1LnB1c2gobjgpOwogICAgICBlOgogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgdmFyIGw3ID0gdDQgLSAxID4+PiAxLCBvNCA9IGU1W2w3XTsKICAgICAgICAgIGlmIChvNCAhPT0gdm9pZCAwICYmIDAgPCB4MjEobzQsIG44KSkKICAgICAgICAgICAgZTVbbDddID0gbjgsIGU1W3Q0XSA9IG80LCB0NCA9IGw3OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhayBlOwogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGE0KGU1KSB7CiAgICAgIHJldHVybiBlNSA9IGU1WzBdLCBlNSA9PT0gdm9pZCAwID8gbnVsbCA6IGU1OwogICAgfQogICAgZnVuY3Rpb24gSTI3KGU1KSB7CiAgICAgIHZhciBuOCA9IGU1WzBdOwogICAgICBpZiAobjggIT09IHZvaWQgMCkgewogICAgICAgIHZhciB0NCA9IGU1LnBvcCgpOwogICAgICAgIGlmICh0NCAhPT0gbjgpIHsKICAgICAgICAgIGU1WzBdID0gdDQ7CiAgICAgICAgICBlOgogICAgICAgICAgICBmb3IgKHZhciBsNyA9IDAsIG80ID0gZTUubGVuZ3RoOyBsNyA8IG80OyApIHsKICAgICAgICAgICAgICB2YXIgZjExID0gMiAqIChsNyArIDEpIC0gMSwgYjI1ID0gZTVbZjExXSwgdjE1ID0gZjExICsgMSwgZDE1ID0gZTVbdjE1XTsKICAgICAgICAgICAgICBpZiAoYjI1ICE9PSB2b2lkIDAgJiYgMCA+IHgyMShiMjUsIHQ0KSkKICAgICAgICAgICAgICAgIGQxNSAhPT0gdm9pZCAwICYmIDAgPiB4MjEoZDE1LCBiMjUpID8gKGU1W2w3XSA9IGQxNSwgZTVbdjE1XSA9IHQ0LCBsNyA9IHYxNSkgOiAoZTVbbDddID0gYjI1LCBlNVtmMTFdID0gdDQsIGw3ID0gZjExKTsKICAgICAgICAgICAgICBlbHNlIGlmIChkMTUgIT09IHZvaWQgMCAmJiAwID4geDIxKGQxNSwgdDQpKQogICAgICAgICAgICAgICAgZTVbbDddID0gZDE1LCBlNVt2MTVdID0gdDQsIGw3ID0gdjE1OwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG44OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZnVuY3Rpb24geDIxKGU1LCBuOCkgewogICAgICB2YXIgdDQgPSBlNS5zb3J0SW5kZXggLSBuOC5zb3J0SW5kZXg7CiAgICAgIHJldHVybiB0NCAhPT0gMCA/IHQ0IDogZTUuaWQgLSBuOC5pZDsKICAgIH0KICAgIHZhciBzOCA9IFtdLCBjMTcgPSBbXSwgbGUxNSA9IDEsIHUxMSA9IG51bGwsIGk0ID0gMywgTTI1ID0gZmFsc2UsIF8yNSA9IGZhbHNlLCBrMTggPSBmYWxzZTsKICAgIGZ1bmN0aW9uIFkzMChlNSkgewogICAgICBmb3IgKHZhciBuOCA9IGE0KGMxNyk7IG44ICE9PSBudWxsOyApIHsKICAgICAgICBpZiAobjguY2FsbGJhY2sgPT09IG51bGwpCiAgICAgICAgICBJMjcoYzE3KTsKICAgICAgICBlbHNlIGlmIChuOC5zdGFydFRpbWUgPD0gZTUpCiAgICAgICAgICBJMjcoYzE3KSwgbjguc29ydEluZGV4ID0gbjguZXhwaXJhdGlvblRpbWUsIFIyNihzOCwgbjgpOwogICAgICAgIGVsc2UKICAgICAgICAgIGJyZWFrOwogICAgICAgIG44ID0gYTQoYzE3KTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gVTI5KGU1KSB7CiAgICAgIGlmIChrMTggPSBmYWxzZSwgWTMwKGU1KSwgIV8yNSkKICAgICAgICBpZiAoYTQoczgpICE9PSBudWxsKQogICAgICAgICAgXzI1ID0gdHJ1ZSwgeTE3KFcxOCk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgbjggPSBhNChjMTcpOwogICAgICAgICAgbjggIT09IG51bGwgJiYgaDEwKFUyOSwgbjguc3RhcnRUaW1lIC0gZTUpOwogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIFcxOChlNSwgbjgpIHsKICAgICAgXzI1ID0gZmFsc2UsIGsxOCAmJiAoazE4ID0gZmFsc2UsIFQyOSgpKSwgTTI1ID0gdHJ1ZTsKICAgICAgdmFyIHQ0ID0gaTQ7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yIChZMzAobjgpLCB1MTEgPSBhNChzOCk7IHUxMSAhPT0gbnVsbCAmJiAoISh1MTEuZXhwaXJhdGlvblRpbWUgPiBuOCkgfHwgZTUgJiYgIXIzLnVuc3RhYmxlX3Nob3VsZFlpZWxkKCkpOyApIHsKICAgICAgICAgIHZhciBsNyA9IHUxMS5jYWxsYmFjazsKICAgICAgICAgIGlmICh0eXBlb2YgbDcgPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB1MTEuY2FsbGJhY2sgPSBudWxsLCBpNCA9IHUxMS5wcmlvcml0eUxldmVsOwogICAgICAgICAgICB2YXIgbzQgPSBsNyh1MTEuZXhwaXJhdGlvblRpbWUgPD0gbjgpOwogICAgICAgICAgICBuOCA9IHIzLnVuc3RhYmxlX25vdygpLCB0eXBlb2YgbzQgPT0gImZ1bmN0aW9uIiA/IHUxMS5jYWxsYmFjayA9IG80IDogdTExID09PSBhNChzOCkgJiYgSTI3KHM4KSwgWTMwKG44KTsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICBJMjcoczgpOwogICAgICAgICAgdTExID0gYTQoczgpOwogICAgICAgIH0KICAgICAgICBpZiAodTExICE9PSBudWxsKQogICAgICAgICAgdmFyIGYxMSA9IHRydWU7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgYjI1ID0gYTQoYzE3KTsKICAgICAgICAgIGIyNSAhPT0gbnVsbCAmJiBoMTAoVTI5LCBiMjUuc3RhcnRUaW1lIC0gbjgpLCBmMTEgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGYxMTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB1MTEgPSBudWxsLCBpNCA9IHQ0LCBNMjUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgdmFyIG9lMTIgPSBxMjA7CiAgICByMy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSA1OwogICAgcjMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkgPSAxOwogICAgcjMudW5zdGFibGVfTG93UHJpb3JpdHkgPSA0OwogICAgcjMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHkgPSAzOwogICAgcjMudW5zdGFibGVfUHJvZmlsaW5nID0gbnVsbDsKICAgIHIzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gMjsKICAgIHIzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrID0gZnVuY3Rpb24oZTUpIHsKICAgICAgZTUuY2FsbGJhY2sgPSBudWxsOwogICAgfTsKICAgIHIzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgIF8yNSB8fCBNMjUgfHwgKF8yNSA9IHRydWUsIHkxNyhXMTgpKTsKICAgIH07CiAgICByMy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gaTQ7CiAgICB9OwogICAgcjMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGE0KHM4KTsKICAgIH07CiAgICByMy51bnN0YWJsZV9uZXh0ID0gZnVuY3Rpb24oZTUpIHsKICAgICAgc3dpdGNoIChpNCkgewogICAgICAgIGNhc2UgMToKICAgICAgICBjYXNlIDI6CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgdmFyIG44ID0gMzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBuOCA9IGk0OwogICAgICB9CiAgICAgIHZhciB0NCA9IGk0OwogICAgICBpNCA9IG44OwogICAgICB0cnkgewogICAgICAgIHJldHVybiBlNSgpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIGk0ID0gdDQ7CiAgICAgIH0KICAgIH07CiAgICByMy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbiA9IGZ1bmN0aW9uKCkgewogICAgfTsKICAgIHIzLnVuc3RhYmxlX3JlcXVlc3RQYWludCA9IG9lMTI7CiAgICByMy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkgPSBmdW5jdGlvbihlNSwgbjgpIHsKICAgICAgc3dpdGNoIChlNSkgewogICAgICAgIGNhc2UgMToKICAgICAgICBjYXNlIDI6CiAgICAgICAgY2FzZSAzOgogICAgICAgIGNhc2UgNDoKICAgICAgICBjYXNlIDU6CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgZTUgPSAzOwogICAgICB9CiAgICAgIHZhciB0NCA9IGk0OwogICAgICBpNCA9IGU1OwogICAgICB0cnkgewogICAgICAgIHJldHVybiBuOCgpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIGk0ID0gdDQ7CiAgICAgIH0KICAgIH07CiAgICByMy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrID0gZnVuY3Rpb24oZTUsIG44LCB0NCkgewogICAgICB2YXIgbDcgPSByMy51bnN0YWJsZV9ub3coKTsKICAgICAgc3dpdGNoICh0eXBlb2YgdDQgPT0gIm9iamVjdCIgJiYgdDQgIT09IG51bGwgPyAodDQgPSB0NC5kZWxheSwgdDQgPSB0eXBlb2YgdDQgPT0gIm51bWJlciIgJiYgMCA8IHQ0ID8gbDcgKyB0NCA6IGw3KSA6IHQ0ID0gbDcsIGU1KSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgdmFyIG80ID0gLTE7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBvNCA9IDI1MDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNToKICAgICAgICAgIG80ID0gMTA3Mzc0MTgyMzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIG80ID0gMWU0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIG80ID0gNWUzOwogICAgICB9CiAgICAgIHJldHVybiBvNCA9IHQ0ICsgbzQsIGU1ID0geyBpZDogbGUxNSsrLCBjYWxsYmFjazogbjgsIHByaW9yaXR5TGV2ZWw6IGU1LCBzdGFydFRpbWU6IHQ0LCBleHBpcmF0aW9uVGltZTogbzQsIHNvcnRJbmRleDogLTEgfSwgdDQgPiBsNyA/IChlNS5zb3J0SW5kZXggPSB0NCwgUjI2KGMxNywgZTUpLCBhNChzOCkgPT09IG51bGwgJiYgZTUgPT09IGE0KGMxNykgJiYgKGsxOCA/IFQyOSgpIDogazE4ID0gdHJ1ZSwgaDEwKFUyOSwgdDQgLSBsNykpKSA6IChlNS5zb3J0SW5kZXggPSBvNCwgUjI2KHM4LCBlNSksIF8yNSB8fCBNMjUgfHwgKF8yNSA9IHRydWUsIHkxNyhXMTgpKSksIGU1OwogICAgfTsKICAgIHIzLnVuc3RhYmxlX3dyYXBDYWxsYmFjayA9IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHZhciBuOCA9IGk0OwogICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHQ0ID0gaTQ7CiAgICAgICAgaTQgPSBuODsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGU1LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGk0ID0gdDQ7CiAgICAgICAgfQogICAgICB9OwogICAgfTsKICB9KTsKICB2YXIgJCA9IFYoKHNlMTksIFoyMikgPT4gewogICAgInVzZSBzdHJpY3QiOwogICAgWjIyLmV4cG9ydHMgPSBYKCk7CiAgfSk7CiAgdmFyIEQgPSByZSgkKCkpOwogIHZhciB7IHVuc3RhYmxlX25vdzogY2UsIHVuc3RhYmxlX3Nob3VsZFlpZWxkOiBmZSwgdW5zdGFibGVfSWRsZVByaW9yaXR5OiBiZSwgdW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk6IF9lLCB1bnN0YWJsZV9Mb3dQcmlvcml0eTogZGUsIHVuc3RhYmxlX05vcm1hbFByaW9yaXR5OiBwZSwgdW5zdGFibGVfUHJvZmlsaW5nOiB5ZSwgdW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk6IHZlLCB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjazogbWUsIHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uOiB3ZSwgdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw6IGhlLCB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZToga2UsIHVuc3RhYmxlX25leHQ6IGdlLCB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbjogUGUsIHVuc3RhYmxlX3JlcXVlc3RQYWludDogeGUsIHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTogVGUsIHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s6IEllLCB1bnN0YWJsZV93cmFwQ2FsbGJhY2s6IE1lIH0gPSBEOwogIHZhciB7IGRlZmF1bHQ6IEEsIC4uLmllIH0gPSBEOwogIHZhciBDZSA9IEEgIT09IHZvaWQgMCA/IEEgOiBpZTsKCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC9zdGFibGUvcmVhY3RAMTcuMC4yL2Rlbm8vcmVhY3QuanMKICB2YXIgX19vYmplY3RfYXNzaWduJCA9IE9iamVjdC5hc3NpZ247CiAgdmFyIFkgPSBPYmplY3QuY3JlYXRlOwogIHZhciAkMiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKICB2YXIgRzIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogIHZhciBKID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7CiAgdmFyIEsgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7CiAgdmFyIFEgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogIHZhciBYMiA9ICgoZTUpID0+IHR5cGVvZiBfX3JlcXVpcmUgPCAidSIgPyBfX3JlcXVpcmUgOiB0eXBlb2YgUHJveHkgPCAidSIgPyBuZXcgUHJveHkoZTUsIHsgZ2V0OiAodDQsIHIzKSA9PiAodHlwZW9mIF9fcmVxdWlyZSA8ICJ1IiA/IF9fcmVxdWlyZSA6IHQ0KVtyM10gfSkgOiBlNSkoZnVuY3Rpb24oZTUpIHsKICAgIGlmICh0eXBlb2YgX19yZXF1aXJlIDwgInUiKQogICAgICByZXR1cm4gX19yZXF1aXJlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJyArIGU1ICsgJyIgaXMgbm90IHN1cHBvcnRlZCcpOwogIH0pOwogIHZhciBnID0gKGU1LCB0NCkgPT4gKCkgPT4gKHQ0IHx8IGU1KCh0NCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgdDQpLCB0NC5leHBvcnRzKTsKICB2YXIgWiA9IChlNSwgdDQsIHIzLCB1MTEpID0+IHsKICAgIGlmICh0NCAmJiB0eXBlb2YgdDQgPT0gIm9iamVjdCIgfHwgdHlwZW9mIHQ0ID09ICJmdW5jdGlvbiIpCiAgICAgIGZvciAobGV0IG80IG9mIEoodDQpKQogICAgICAgICFRLmNhbGwoZTUsIG80KSAmJiBvNCAhPT0gcjMgJiYgJDIoZTUsIG80LCB7IGdldDogKCkgPT4gdDRbbzRdLCBlbnVtZXJhYmxlOiAhKHUxMSA9IEcyKHQ0LCBvNCkpIHx8IHUxMS5lbnVtZXJhYmxlIH0pOwogICAgcmV0dXJuIGU1OwogIH07CiAgdmFyIGIgPSAoZTUsIHQ0LCByMykgPT4gKHIzID0gZTUgIT0gbnVsbCA/IFkoSyhlNSkpIDoge30sIFoodDQgfHwgIWU1IHx8ICFlNS5fX2VzTW9kdWxlID8gJDIocjMsICJkZWZhdWx0IiwgeyB2YWx1ZTogZTUsIGVudW1lcmFibGU6IHRydWUgfSkgOiByMywgZTUpKTsKICB2YXIgVjIgPSBnKChuOCkgPT4gewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIEUxNSA9IF9fb2JqZWN0X2Fzc2lnbiQsIHkxNyA9IDYwMTAzLCBqMTkgPSA2MDEwNjsKICAgIG44LkZyYWdtZW50ID0gNjAxMDc7CiAgICBuOC5TdHJpY3RNb2RlID0gNjAxMDg7CiAgICBuOC5Qcm9maWxlciA9IDYwMTE0OwogICAgdmFyIHgyMSA9IDYwMTA5LCBJMjcgPSA2MDExMCwgdzIxID0gNjAxMTI7CiAgICBuOC5TdXNwZW5zZSA9IDYwMTEzOwogICAgdmFyIEEyMCA9IDYwMTE1LCBGMjIgPSA2MDExNjsKICAgIHR5cGVvZiBTeW1ib2wgPT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wuZm9yICYmIChsNyA9IFN5bWJvbC5mb3IsIHkxNyA9IGw3KCJyZWFjdC5lbGVtZW50IiksIGoxOSA9IGw3KCJyZWFjdC5wb3J0YWwiKSwgbjguRnJhZ21lbnQgPSBsNygicmVhY3QuZnJhZ21lbnQiKSwgbjguU3RyaWN0TW9kZSA9IGw3KCJyZWFjdC5zdHJpY3RfbW9kZSIpLCBuOC5Qcm9maWxlciA9IGw3KCJyZWFjdC5wcm9maWxlciIpLCB4MjEgPSBsNygicmVhY3QucHJvdmlkZXIiKSwgSTI3ID0gbDcoInJlYWN0LmNvbnRleHQiKSwgdzIxID0gbDcoInJlYWN0LmZvcndhcmRfcmVmIiksIG44LlN1c3BlbnNlID0gbDcoInJlYWN0LnN1c3BlbnNlIiksIEEyMCA9IGw3KCJyZWFjdC5tZW1vIiksIEYyMiA9IGw3KCJyZWFjdC5sYXp5IikpOwogICAgdmFyIGw3LCBPMTUgPSB0eXBlb2YgU3ltYm9sID09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLml0ZXJhdG9yOwogICAgZnVuY3Rpb24gZWUxOChlNSkgewogICAgICByZXR1cm4gZTUgPT09IG51bGwgfHwgdHlwZW9mIGU1ICE9ICJvYmplY3QiID8gbnVsbCA6IChlNSA9IE8xNSAmJiBlNVtPMTVdIHx8IGU1WyJAQGl0ZXJhdG9yIl0sIHR5cGVvZiBlNSA9PSAiZnVuY3Rpb24iID8gZTUgOiBudWxsKTsKICAgIH0KICAgIGZ1bmN0aW9uIF8yNShlNSkgewogICAgICBmb3IgKHZhciB0NCA9ICJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iICsgZTUsIHIzID0gMTsgcjMgPCBhcmd1bWVudHMubGVuZ3RoOyByMysrKQogICAgICAgIHQ0ICs9ICImYXJnc1tdPSIgKyBlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3IzXSk7CiAgICAgIHJldHVybiAiTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIgKyBlNSArICI7IHZpc2l0ICIgKyB0NCArICIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiI7CiAgICB9CiAgICB2YXIgTDIyID0geyBpc01vdW50ZWQ6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LCBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uKCkgewogICAgfSwgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICB9LCBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgfSB9LCBxMjAgPSB7fTsKICAgIGZ1bmN0aW9uIGQxNShlNSwgdDQsIHIzKSB7CiAgICAgIHRoaXMucHJvcHMgPSBlNSwgdGhpcy5jb250ZXh0ID0gdDQsIHRoaXMucmVmcyA9IHEyMCwgdGhpcy51cGRhdGVyID0gcjMgfHwgTDIyOwogICAgfQogICAgZDE1LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307CiAgICBkMTUucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24oZTUsIHQ0KSB7CiAgICAgIGlmICh0eXBlb2YgZTUgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGU1ICE9ICJmdW5jdGlvbiIgJiYgZTUgIT0gbnVsbCkKICAgICAgICB0aHJvdyBFcnJvcihfMjUoODUpKTsKICAgICAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBlNSwgdDQsICJzZXRTdGF0ZSIpOwogICAgfTsKICAgIGQxNS5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbihlNSkgewogICAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGU1LCAiZm9yY2VVcGRhdGUiKTsKICAgIH07CiAgICBmdW5jdGlvbiBEMjAoKSB7CiAgICB9CiAgICBEMjAucHJvdG90eXBlID0gZDE1LnByb3RvdHlwZTsKICAgIGZ1bmN0aW9uIFMyMShlNSwgdDQsIHIzKSB7CiAgICAgIHRoaXMucHJvcHMgPSBlNSwgdGhpcy5jb250ZXh0ID0gdDQsIHRoaXMucmVmcyA9IHEyMCwgdGhpcy51cGRhdGVyID0gcjMgfHwgTDIyOwogICAgfQogICAgdmFyIEMxNyA9IFMyMS5wcm90b3R5cGUgPSBuZXcgRDIwKCk7CiAgICBDMTcuY29uc3RydWN0b3IgPSBTMjE7CiAgICBFMTUoQzE3LCBkMTUucHJvdG90eXBlKTsKICAgIEMxNy5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7CiAgICB2YXIgUjI2ID0geyBjdXJyZW50OiBudWxsIH0sIE0yNSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksIE4xNyA9IHsga2V5OiB0cnVlLCByZWY6IHRydWUsIF9fc2VsZjogdHJ1ZSwgX19zb3VyY2U6IHRydWUgfTsKICAgIGZ1bmN0aW9uIFUyOShlNSwgdDQsIHIzKSB7CiAgICAgIHZhciB1MTEsIG80ID0ge30sIGYxMSA9IG51bGwsIHM4ID0gbnVsbDsKICAgICAgaWYgKHQ0ICE9IG51bGwpCiAgICAgICAgZm9yICh1MTEgaW4gdDQucmVmICE9PSB2b2lkIDAgJiYgKHM4ID0gdDQucmVmKSwgdDQua2V5ICE9PSB2b2lkIDAgJiYgKGYxMSA9ICIiICsgdDQua2V5KSwgdDQpCiAgICAgICAgICBNMjUuY2FsbCh0NCwgdTExKSAmJiAhTjE3Lmhhc093blByb3BlcnR5KHUxMSkgJiYgKG80W3UxMV0gPSB0NFt1MTFdKTsKICAgICAgdmFyIGMxNyA9IGFyZ3VtZW50cy5sZW5ndGggLSAyOwogICAgICBpZiAoYzE3ID09PSAxKQogICAgICAgIG80LmNoaWxkcmVuID0gcjM7CiAgICAgIGVsc2UgaWYgKDEgPCBjMTcpIHsKICAgICAgICBmb3IgKHZhciBpNCA9IEFycmF5KGMxNyksIHAxOCA9IDA7IHAxOCA8IGMxNzsgcDE4KyspCiAgICAgICAgICBpNFtwMThdID0gYXJndW1lbnRzW3AxOCArIDJdOwogICAgICAgIG80LmNoaWxkcmVuID0gaTQ7CiAgICAgIH0KICAgICAgaWYgKGU1ICYmIGU1LmRlZmF1bHRQcm9wcykKICAgICAgICBmb3IgKHUxMSBpbiBjMTcgPSBlNS5kZWZhdWx0UHJvcHMsIGMxNykKICAgICAgICAgIG80W3UxMV0gPT09IHZvaWQgMCAmJiAobzRbdTExXSA9IGMxN1t1MTFdKTsKICAgICAgcmV0dXJuIHsgJCR0eXBlb2Y6IHkxNywgdHlwZTogZTUsIGtleTogZjExLCByZWY6IHM4LCBwcm9wczogbzQsIF9vd25lcjogUjI2LmN1cnJlbnQgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHRlMTcoZTUsIHQ0KSB7CiAgICAgIHJldHVybiB7ICQkdHlwZW9mOiB5MTcsIHR5cGU6IGU1LnR5cGUsIGtleTogdDQsIHJlZjogZTUucmVmLCBwcm9wczogZTUucHJvcHMsIF9vd25lcjogZTUuX293bmVyIH07CiAgICB9CiAgICBmdW5jdGlvbiBrMTgoZTUpIHsKICAgICAgcmV0dXJuIHR5cGVvZiBlNSA9PSAib2JqZWN0IiAmJiBlNSAhPT0gbnVsbCAmJiBlNS4kJHR5cGVvZiA9PT0geTE3OwogICAgfQogICAgZnVuY3Rpb24gcmUyMChlNSkgewogICAgICB2YXIgdDQgPSB7ICI9IjogIj0wIiwgIjoiOiAiPTIiIH07CiAgICAgIHJldHVybiAiJCIgKyBlNS5yZXBsYWNlKC9bPTpdL2csIGZ1bmN0aW9uKHIzKSB7CiAgICAgICAgcmV0dXJuIHQ0W3IzXTsKICAgICAgfSk7CiAgICB9CiAgICB2YXIgUDI3ID0gL1wvKy9nOwogICAgZnVuY3Rpb24gaDEwKGU1LCB0NCkgewogICAgICByZXR1cm4gdHlwZW9mIGU1ID09ICJvYmplY3QiICYmIGU1ICE9PSBudWxsICYmIGU1LmtleSAhPSBudWxsID8gcmUyMCgiIiArIGU1LmtleSkgOiB0NC50b1N0cmluZygzNik7CiAgICB9CiAgICBmdW5jdGlvbiBtMjMoZTUsIHQ0LCByMywgdTExLCBvNCkgewogICAgICB2YXIgZjExID0gdHlwZW9mIGU1OwogICAgICAoZjExID09PSAidW5kZWZpbmVkIiB8fCBmMTEgPT09ICJib29sZWFuIikgJiYgKGU1ID0gbnVsbCk7CiAgICAgIHZhciBzOCA9IGZhbHNlOwogICAgICBpZiAoZTUgPT09IG51bGwpCiAgICAgICAgczggPSB0cnVlOwogICAgICBlbHNlCiAgICAgICAgc3dpdGNoIChmMTEpIHsKICAgICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICBjYXNlICJudW1iZXIiOgogICAgICAgICAgICBzOCA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAib2JqZWN0IjoKICAgICAgICAgICAgc3dpdGNoIChlNS4kJHR5cGVvZikgewogICAgICAgICAgICAgIGNhc2UgeTE3OgogICAgICAgICAgICAgIGNhc2UgajE5OgogICAgICAgICAgICAgICAgczggPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoczgpCiAgICAgICAgcmV0dXJuIHM4ID0gZTUsIG80ID0gbzQoczgpLCBlNSA9IHUxMSA9PT0gIiIgPyAiLiIgKyBoMTAoczgsIDApIDogdTExLCBBcnJheS5pc0FycmF5KG80KSA/IChyMyA9ICIiLCBlNSAhPSBudWxsICYmIChyMyA9IGU1LnJlcGxhY2UoUDI3LCAiJCYvIikgKyAiLyIpLCBtMjMobzQsIHQ0LCByMywgIiIsIGZ1bmN0aW9uKHAxOCkgewogICAgICAgICAgcmV0dXJuIHAxODsKICAgICAgICB9KSkgOiBvNCAhPSBudWxsICYmIChrMTgobzQpICYmIChvNCA9IHRlMTcobzQsIHIzICsgKCFvNC5rZXkgfHwgczggJiYgczgua2V5ID09PSBvNC5rZXkgPyAiIiA6ICgiIiArIG80LmtleSkucmVwbGFjZShQMjcsICIkJi8iKSArICIvIikgKyBlNSkpLCB0NC5wdXNoKG80KSksIDE7CiAgICAgIGlmIChzOCA9IDAsIHUxMSA9IHUxMSA9PT0gIiIgPyAiLiIgOiB1MTEgKyAiOiIsIEFycmF5LmlzQXJyYXkoZTUpKQogICAgICAgIGZvciAodmFyIGMxNyA9IDA7IGMxNyA8IGU1Lmxlbmd0aDsgYzE3KyspIHsKICAgICAgICAgIGYxMSA9IGU1W2MxN107CiAgICAgICAgICB2YXIgaTQgPSB1MTEgKyBoMTAoZjExLCBjMTcpOwogICAgICAgICAgczggKz0gbTIzKGYxMSwgdDQsIHIzLCBpNCwgbzQpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoaTQgPSBlZTE4KGU1KSwgdHlwZW9mIGk0ID09ICJmdW5jdGlvbiIpCiAgICAgICAgZm9yIChlNSA9IGk0LmNhbGwoZTUpLCBjMTcgPSAwOyAhKGYxMSA9IGU1Lm5leHQoKSkuZG9uZTsgKQogICAgICAgICAgZjExID0gZjExLnZhbHVlLCBpNCA9IHUxMSArIGgxMChmMTEsIGMxNysrKSwgczggKz0gbTIzKGYxMSwgdDQsIHIzLCBpNCwgbzQpOwogICAgICBlbHNlIGlmIChmMTEgPT09ICJvYmplY3QiKQogICAgICAgIHRocm93IHQ0ID0gIiIgKyBlNSwgRXJyb3IoXzI1KDMxLCB0NCA9PT0gIltvYmplY3QgT2JqZWN0XSIgPyAib2JqZWN0IHdpdGgga2V5cyB7IiArIE9iamVjdC5rZXlzKGU1KS5qb2luKCIsICIpICsgIn0iIDogdDQpKTsKICAgICAgcmV0dXJuIHM4OwogICAgfQogICAgZnVuY3Rpb24gdjE1KGU1LCB0NCwgcjMpIHsKICAgICAgaWYgKGU1ID09IG51bGwpCiAgICAgICAgcmV0dXJuIGU1OwogICAgICB2YXIgdTExID0gW10sIG80ID0gMDsKICAgICAgcmV0dXJuIG0yMyhlNSwgdTExLCAiIiwgIiIsIGZ1bmN0aW9uKGYxMSkgewogICAgICAgIHJldHVybiB0NC5jYWxsKHIzLCBmMTEsIG80KyspOwogICAgICB9KSwgdTExOwogICAgfQogICAgZnVuY3Rpb24gbmUxNShlNSkgewogICAgICBpZiAoZTUuX3N0YXR1cyA9PT0gLTEpIHsKICAgICAgICB2YXIgdDQgPSBlNS5fcmVzdWx0OwogICAgICAgIHQ0ID0gdDQoKSwgZTUuX3N0YXR1cyA9IDAsIGU1Ll9yZXN1bHQgPSB0NCwgdDQudGhlbihmdW5jdGlvbihyMykgewogICAgICAgICAgZTUuX3N0YXR1cyA9PT0gMCAmJiAocjMgPSByMy5kZWZhdWx0LCBlNS5fc3RhdHVzID0gMSwgZTUuX3Jlc3VsdCA9IHIzKTsKICAgICAgICB9LCBmdW5jdGlvbihyMykgewogICAgICAgICAgZTUuX3N0YXR1cyA9PT0gMCAmJiAoZTUuX3N0YXR1cyA9IDIsIGU1Ll9yZXN1bHQgPSByMyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGU1Ll9zdGF0dXMgPT09IDEpCiAgICAgICAgcmV0dXJuIGU1Ll9yZXN1bHQ7CiAgICAgIHRocm93IGU1Ll9yZXN1bHQ7CiAgICB9CiAgICB2YXIgVDI5ID0geyBjdXJyZW50OiBudWxsIH07CiAgICBmdW5jdGlvbiBhNCgpIHsKICAgICAgdmFyIGU1ID0gVDI5LmN1cnJlbnQ7CiAgICAgIGlmIChlNSA9PT0gbnVsbCkKICAgICAgICB0aHJvdyBFcnJvcihfMjUoMzIxKSk7CiAgICAgIHJldHVybiBlNTsKICAgIH0KICAgIHZhciBvZTEyID0geyBSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiBUMjksIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOiB7IHRyYW5zaXRpb246IDAgfSwgUmVhY3RDdXJyZW50T3duZXI6IFIyNiwgSXNTb21lUmVuZGVyZXJBY3Rpbmc6IHsgY3VycmVudDogZmFsc2UgfSwgYXNzaWduOiBFMTUgfTsKICAgIG44LkNoaWxkcmVuID0geyBtYXA6IHYxNSwgZm9yRWFjaDogZnVuY3Rpb24oZTUsIHQ0LCByMykgewogICAgICB2MTUoZTUsIGZ1bmN0aW9uKCkgewogICAgICAgIHQ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH0sIHIzKTsKICAgIH0sIGNvdW50OiBmdW5jdGlvbihlNSkgewogICAgICB2YXIgdDQgPSAwOwogICAgICByZXR1cm4gdjE1KGU1LCBmdW5jdGlvbigpIHsKICAgICAgICB0NCsrOwogICAgICB9KSwgdDQ7CiAgICB9LCB0b0FycmF5OiBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gdjE1KGU1LCBmdW5jdGlvbih0NCkgewogICAgICAgIHJldHVybiB0NDsKICAgICAgfSkgfHwgW107CiAgICB9LCBvbmx5OiBmdW5jdGlvbihlNSkgewogICAgICBpZiAoIWsxOChlNSkpCiAgICAgICAgdGhyb3cgRXJyb3IoXzI1KDE0MykpOwogICAgICByZXR1cm4gZTU7CiAgICB9IH07CiAgICBuOC5Db21wb25lbnQgPSBkMTU7CiAgICBuOC5QdXJlQ29tcG9uZW50ID0gUzIxOwogICAgbjguX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBvZTEyOwogICAgbjguY2xvbmVFbGVtZW50ID0gZnVuY3Rpb24oZTUsIHQ0LCByMykgewogICAgICBpZiAoZTUgPT0gbnVsbCkKICAgICAgICB0aHJvdyBFcnJvcihfMjUoMjY3LCBlNSkpOwogICAgICB2YXIgdTExID0gRTE1KHt9LCBlNS5wcm9wcyksIG80ID0gZTUua2V5LCBmMTEgPSBlNS5yZWYsIHM4ID0gZTUuX293bmVyOwogICAgICBpZiAodDQgIT0gbnVsbCkgewogICAgICAgIGlmICh0NC5yZWYgIT09IHZvaWQgMCAmJiAoZjExID0gdDQucmVmLCBzOCA9IFIyNi5jdXJyZW50KSwgdDQua2V5ICE9PSB2b2lkIDAgJiYgKG80ID0gIiIgKyB0NC5rZXkpLCBlNS50eXBlICYmIGU1LnR5cGUuZGVmYXVsdFByb3BzKQogICAgICAgICAgdmFyIGMxNyA9IGU1LnR5cGUuZGVmYXVsdFByb3BzOwogICAgICAgIGZvciAoaTQgaW4gdDQpCiAgICAgICAgICBNMjUuY2FsbCh0NCwgaTQpICYmICFOMTcuaGFzT3duUHJvcGVydHkoaTQpICYmICh1MTFbaTRdID0gdDRbaTRdID09PSB2b2lkIDAgJiYgYzE3ICE9PSB2b2lkIDAgPyBjMTdbaTRdIDogdDRbaTRdKTsKICAgICAgfQogICAgICB2YXIgaTQgPSBhcmd1bWVudHMubGVuZ3RoIC0gMjsKICAgICAgaWYgKGk0ID09PSAxKQogICAgICAgIHUxMS5jaGlsZHJlbiA9IHIzOwogICAgICBlbHNlIGlmICgxIDwgaTQpIHsKICAgICAgICBjMTcgPSBBcnJheShpNCk7CiAgICAgICAgZm9yICh2YXIgcDE4ID0gMDsgcDE4IDwgaTQ7IHAxOCsrKQogICAgICAgICAgYzE3W3AxOF0gPSBhcmd1bWVudHNbcDE4ICsgMl07CiAgICAgICAgdTExLmNoaWxkcmVuID0gYzE3OwogICAgICB9CiAgICAgIHJldHVybiB7ICQkdHlwZW9mOiB5MTcsIHR5cGU6IGU1LnR5cGUsIGtleTogbzQsIHJlZjogZjExLCBwcm9wczogdTExLCBfb3duZXI6IHM4IH07CiAgICB9OwogICAgbjguY3JlYXRlQ29udGV4dCA9IGZ1bmN0aW9uKGU1LCB0NCkgewogICAgICByZXR1cm4gdDQgPT09IHZvaWQgMCAmJiAodDQgPSBudWxsKSwgZTUgPSB7ICQkdHlwZW9mOiBJMjcsIF9jYWxjdWxhdGVDaGFuZ2VkQml0czogdDQsIF9jdXJyZW50VmFsdWU6IGU1LCBfY3VycmVudFZhbHVlMjogZTUsIF90aHJlYWRDb3VudDogMCwgUHJvdmlkZXI6IG51bGwsIENvbnN1bWVyOiBudWxsIH0sIGU1LlByb3ZpZGVyID0geyAkJHR5cGVvZjogeDIxLCBfY29udGV4dDogZTUgfSwgZTUuQ29uc3VtZXIgPSBlNTsKICAgIH07CiAgICBuOC5jcmVhdGVFbGVtZW50ID0gVTI5OwogICAgbjguY3JlYXRlRmFjdG9yeSA9IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHZhciB0NCA9IFUyOS5iaW5kKG51bGwsIGU1KTsKICAgICAgcmV0dXJuIHQ0LnR5cGUgPSBlNSwgdDQ7CiAgICB9OwogICAgbjguY3JlYXRlUmVmID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB7IGN1cnJlbnQ6IG51bGwgfTsKICAgIH07CiAgICBuOC5mb3J3YXJkUmVmID0gZnVuY3Rpb24oZTUpIHsKICAgICAgcmV0dXJuIHsgJCR0eXBlb2Y6IHcyMSwgcmVuZGVyOiBlNSB9OwogICAgfTsKICAgIG44LmlzVmFsaWRFbGVtZW50ID0gazE4OwogICAgbjgubGF6eSA9IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHJldHVybiB7ICQkdHlwZW9mOiBGMjIsIF9wYXlsb2FkOiB7IF9zdGF0dXM6IC0xLCBfcmVzdWx0OiBlNSB9LCBfaW5pdDogbmUxNSB9OwogICAgfTsKICAgIG44Lm1lbW8gPSBmdW5jdGlvbihlNSwgdDQpIHsKICAgICAgcmV0dXJuIHsgJCR0eXBlb2Y6IEEyMCwgdHlwZTogZTUsIGNvbXBhcmU6IHQ0ID09PSB2b2lkIDAgPyBudWxsIDogdDQgfTsKICAgIH07CiAgICBuOC51c2VDYWxsYmFjayA9IGZ1bmN0aW9uKGU1LCB0NCkgewogICAgICByZXR1cm4gYTQoKS51c2VDYWxsYmFjayhlNSwgdDQpOwogICAgfTsKICAgIG44LnVzZUNvbnRleHQgPSBmdW5jdGlvbihlNSwgdDQpIHsKICAgICAgcmV0dXJuIGE0KCkudXNlQ29udGV4dChlNSwgdDQpOwogICAgfTsKICAgIG44LnVzZURlYnVnVmFsdWUgPSBmdW5jdGlvbigpIHsKICAgIH07CiAgICBuOC51c2VFZmZlY3QgPSBmdW5jdGlvbihlNSwgdDQpIHsKICAgICAgcmV0dXJuIGE0KCkudXNlRWZmZWN0KGU1LCB0NCk7CiAgICB9OwogICAgbjgudXNlSW1wZXJhdGl2ZUhhbmRsZSA9IGZ1bmN0aW9uKGU1LCB0NCwgcjMpIHsKICAgICAgcmV0dXJuIGE0KCkudXNlSW1wZXJhdGl2ZUhhbmRsZShlNSwgdDQsIHIzKTsKICAgIH07CiAgICBuOC51c2VMYXlvdXRFZmZlY3QgPSBmdW5jdGlvbihlNSwgdDQpIHsKICAgICAgcmV0dXJuIGE0KCkudXNlTGF5b3V0RWZmZWN0KGU1LCB0NCk7CiAgICB9OwogICAgbjgudXNlTWVtbyA9IGZ1bmN0aW9uKGU1LCB0NCkgewogICAgICByZXR1cm4gYTQoKS51c2VNZW1vKGU1LCB0NCk7CiAgICB9OwogICAgbjgudXNlUmVkdWNlciA9IGZ1bmN0aW9uKGU1LCB0NCwgcjMpIHsKICAgICAgcmV0dXJuIGE0KCkudXNlUmVkdWNlcihlNSwgdDQsIHIzKTsKICAgIH07CiAgICBuOC51c2VSZWYgPSBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gYTQoKS51c2VSZWYoZTUpOwogICAgfTsKICAgIG44LnVzZVN0YXRlID0gZnVuY3Rpb24oZTUpIHsKICAgICAgcmV0dXJuIGE0KCkudXNlU3RhdGUoZTUpOwogICAgfTsKICAgIG44LnZlcnNpb24gPSAiMTcuMC4yIjsKICB9KTsKICB2YXIgejIgPSBnKChjZTE2LCBCMjQpID0+IHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIEIyNC5leHBvcnRzID0gVjIoKTsKICB9KTsKICB2YXIgVyA9IGIoejIoKSk7CiAgdmFyIHsgRnJhZ21lbnQ6IHNlLCBTdHJpY3RNb2RlOiBsZSwgUHJvZmlsZXI6IHBlMiwgU3VzcGVuc2U6IGFlLCBDaGlsZHJlbjogeWUyLCBDb21wb25lbnQ6IGRlMiwgUHVyZUNvbXBvbmVudDogX2UyLCBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDogdmUyLCBjbG9uZUVsZW1lbnQ6IG1lMiwgY3JlYXRlQ29udGV4dDogaGUyLCBjcmVhdGVFbGVtZW50OiBFZSwgY3JlYXRlRmFjdG9yeTogU2UsIGNyZWF0ZVJlZjogQ2UyLCBmb3J3YXJkUmVmOiBSZSwgaXNWYWxpZEVsZW1lbnQ6IGtlMiwgbGF6eTogJGUsIG1lbW86IGdlMiwgdXNlQ2FsbGJhY2s6IE9lLCB1c2VDb250ZXh0OiBQZTIsIHVzZURlYnVnVmFsdWU6IGplLCB1c2VFZmZlY3Q6IHhlMiwgdXNlSW1wZXJhdGl2ZUhhbmRsZTogSWUyLCB1c2VMYXlvdXRFZmZlY3Q6IHdlMiwgdXNlTWVtbzogQWUsIHVzZVJlZHVjZXI6IEZlLCB1c2VSZWY6IExlLCB1c2VTdGF0ZTogcWUsIHZlcnNpb246IERlIH0gPSBXOwogIHZhciB7IGRlZmF1bHQ6IEgsIC4uLnVlIH0gPSBXOwogIHZhciBNZTIgPSBIICE9PSB2b2lkIDAgPyBIIDogdWU7CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L3JlYWN0LWRvbUAxNy4wLjIvZGVuby9yZWFjdC1kb20uanMKICB2YXIgX19vYmplY3RfYXNzaWduJDIgPSBPYmplY3QuYXNzaWduOwogIHZhciBOcyA9IE9iamVjdC5jcmVhdGU7CiAgdmFyIE9pID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogIHZhciBQcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CiAgdmFyIFRzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7CiAgdmFyIExzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mOwogIHZhciB6cyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgdmFyIE9yID0gKChlNSkgPT4gdHlwZW9mIF9fcmVxdWlyZSA8ICJ1IiA/IF9fcmVxdWlyZSA6IHR5cGVvZiBQcm94eSA8ICJ1IiA/IG5ldyBQcm94eShlNSwgeyBnZXQ6IChuOCwgdDQpID0+ICh0eXBlb2YgX19yZXF1aXJlIDwgInUiID8gX19yZXF1aXJlIDogbjgpW3Q0XSB9KSA6IGU1KShmdW5jdGlvbihlNSkgewogICAgaWYgKHR5cGVvZiBfX3JlcXVpcmUgPCAidSIpCiAgICAgIHJldHVybiBfX3JlcXVpcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIHRocm93IG5ldyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInICsgZTUgKyAnIiBpcyBub3Qgc3VwcG9ydGVkJyk7CiAgfSk7CiAgdmFyIE1pID0gKGU1LCBuOCkgPT4gKCkgPT4gKG44IHx8IGU1KChuOCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbjgpLCBuOC5leHBvcnRzKTsKICB2YXIgT3MgPSAoZTUsIG44LCB0NCwgcjMpID0+IHsKICAgIGlmIChuOCAmJiB0eXBlb2YgbjggPT0gIm9iamVjdCIgfHwgdHlwZW9mIG44ID09ICJmdW5jdGlvbiIpCiAgICAgIGZvciAobGV0IGw3IG9mIFRzKG44KSkKICAgICAgICAhenMuY2FsbChlNSwgbDcpICYmIGw3ICE9PSB0NCAmJiBPaShlNSwgbDcsIHsgZ2V0OiAoKSA9PiBuOFtsN10sIGVudW1lcmFibGU6ICEocjMgPSBQcyhuOCwgbDcpKSB8fCByMy5lbnVtZXJhYmxlIH0pOwogICAgcmV0dXJuIGU1OwogIH07CiAgdmFyIE1zID0gKGU1LCBuOCwgdDQpID0+ICh0NCA9IGU1ICE9IG51bGwgPyBOcyhMcyhlNSkpIDoge30sIE9zKG44IHx8ICFlNSB8fCAhZTUuX19lc01vZHVsZSA/IE9pKHQ0LCAiZGVmYXVsdCIsIHsgdmFsdWU6IGU1LCBlbnVtZXJhYmxlOiB0cnVlIH0pIDogdDQsIGU1KSk7CiAgdmFyIHdzID0gTWkoKGllMTMpID0+IHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciB5cjMgPSBNZTIsIE0yNSA9IF9fb2JqZWN0X2Fzc2lnbiQyLCBVMjkgPSBDZTsKICAgIGZ1bmN0aW9uIHYxNShlNSkgewogICAgICBmb3IgKHZhciBuOCA9ICJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iICsgZTUsIHQ0ID0gMTsgdDQgPCBhcmd1bWVudHMubGVuZ3RoOyB0NCsrKQogICAgICAgIG44ICs9ICImYXJnc1tdPSIgKyBlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3Q0XSk7CiAgICAgIHJldHVybiAiTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIgKyBlNSArICI7IHZpc2l0ICIgKyBuOCArICIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiI7CiAgICB9CiAgICBpZiAoIXlyMykKICAgICAgdGhyb3cgRXJyb3IodjE1KDIyNykpOwogICAgdmFyIFlvID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgb3Q5ID0ge307CiAgICBmdW5jdGlvbiBKZTgoZTUsIG44KSB7CiAgICAgIGtuNShlNSwgbjgpLCBrbjUoZTUgKyAiQ2FwdHVyZSIsIG44KTsKICAgIH0KICAgIGZ1bmN0aW9uIGtuNShlNSwgbjgpIHsKICAgICAgZm9yIChvdDlbZTVdID0gbjgsIGU1ID0gMDsgZTUgPCBuOC5sZW5ndGg7IGU1KyspCiAgICAgICAgWW8uYWRkKG44W2U1XSk7CiAgICB9CiAgICB2YXIgd2UxMiA9ICEodHlwZW9mIHdpbmRvdyA+ICJ1IiB8fCB0eXBlb2Ygd2luZG93LmRvY3VtZW50ID4gInUiIHx8IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCA+ICJ1IiksIFJzMiA9IC9eWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRdWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRcLS4wLTlcdTAwQjdcdTAzMDAtXHUwMzZGXHUyMDNGLVx1MjA0MF0qJC8sIFJpMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksIERpMiA9IHt9LCBJaTMgPSB7fTsKICAgIGZ1bmN0aW9uIERzMihlNSkgewogICAgICByZXR1cm4gUmkyLmNhbGwoSWkzLCBlNSkgPyB0cnVlIDogUmkyLmNhbGwoRGkyLCBlNSkgPyBmYWxzZSA6IFJzMi50ZXN0KGU1KSA/IElpM1tlNV0gPSB0cnVlIDogKERpMltlNV0gPSB0cnVlLCBmYWxzZSk7CiAgICB9CiAgICBmdW5jdGlvbiBJczIoZTUsIG44LCB0NCwgcjMpIHsKICAgICAgaWYgKHQ0ICE9PSBudWxsICYmIHQ0LnR5cGUgPT09IDApCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBzd2l0Y2ggKHR5cGVvZiBuOCkgewogICAgICAgIGNhc2UgImZ1bmN0aW9uIjoKICAgICAgICBjYXNlICJzeW1ib2wiOgogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgY2FzZSAiYm9vbGVhbiI6CiAgICAgICAgICByZXR1cm4gcjMgPyBmYWxzZSA6IHQ0ICE9PSBudWxsID8gIXQ0LmFjY2VwdHNCb29sZWFucyA6IChlNSA9IGU1LnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSksIGU1ICE9PSAiZGF0YS0iICYmIGU1ICE9PSAiYXJpYS0iKTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBGczIoZTUsIG44LCB0NCwgcjMpIHsKICAgICAgaWYgKG44ID09PSBudWxsIHx8IHR5cGVvZiBuOCA+ICJ1IiB8fCBJczIoZTUsIG44LCB0NCwgcjMpKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAocjMpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAodDQgIT09IG51bGwpCiAgICAgICAgc3dpdGNoICh0NC50eXBlKSB7CiAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgIHJldHVybiAhbjg7CiAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIHJldHVybiBuOCA9PT0gZmFsc2U7CiAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgIHJldHVybiBpc05hTihuOCk7CiAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIHJldHVybiBpc05hTihuOCkgfHwgMSA+IG44OwogICAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gWDIzKGU1LCBuOCwgdDQsIHIzLCBsNywgaTQsIG80KSB7CiAgICAgIHRoaXMuYWNjZXB0c0Jvb2xlYW5zID0gbjggPT09IDIgfHwgbjggPT09IDMgfHwgbjggPT09IDQsIHRoaXMuYXR0cmlidXRlTmFtZSA9IHIzLCB0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZSA9IGw3LCB0aGlzLm11c3RVc2VQcm9wZXJ0eSA9IHQ0LCB0aGlzLnByb3BlcnR5TmFtZSA9IGU1LCB0aGlzLnR5cGUgPSBuOCwgdGhpcy5zYW5pdGl6ZVVSTCA9IGk0LCB0aGlzLnJlbW92ZUVtcHR5U3RyaW5nID0gbzQ7CiAgICB9CiAgICB2YXIgSDIzID0ge307CiAgICAiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZTUpIHsKICAgICAgSDIzW2U1XSA9IG5ldyBYMjMoZTUsIDAsIGZhbHNlLCBlNSwgbnVsbCwgZmFsc2UsIGZhbHNlKTsKICAgIH0pOwogICAgW1siYWNjZXB0Q2hhcnNldCIsICJhY2NlcHQtY2hhcnNldCJdLCBbImNsYXNzTmFtZSIsICJjbGFzcyJdLCBbImh0bWxGb3IiLCAiZm9yIl0sIFsiaHR0cEVxdWl2IiwgImh0dHAtZXF1aXYiXV0uZm9yRWFjaChmdW5jdGlvbihlNSkgewogICAgICB2YXIgbjggPSBlNVswXTsKICAgICAgSDIzW244XSA9IG5ldyBYMjMobjgsIDEsIGZhbHNlLCBlNVsxXSwgbnVsbCwgZmFsc2UsIGZhbHNlKTsKICAgIH0pOwogICAgWyJjb250ZW50RWRpdGFibGUiLCAiZHJhZ2dhYmxlIiwgInNwZWxsQ2hlY2siLCAidmFsdWUiXS5mb3JFYWNoKGZ1bmN0aW9uKGU1KSB7CiAgICAgIEgyM1tlNV0gPSBuZXcgWDIzKGU1LCAyLCBmYWxzZSwgZTUudG9Mb3dlckNhc2UoKSwgbnVsbCwgZmFsc2UsIGZhbHNlKTsKICAgIH0pOwogICAgWyJhdXRvUmV2ZXJzZSIsICJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIiwgImZvY3VzYWJsZSIsICJwcmVzZXJ2ZUFscGhhIl0uZm9yRWFjaChmdW5jdGlvbihlNSkgewogICAgICBIMjNbZTVdID0gbmV3IFgyMyhlNSwgMiwgZmFsc2UsIGU1LCBudWxsLCBmYWxzZSwgZmFsc2UpOwogICAgfSk7CiAgICAiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBmb3JtTm9WYWxpZGF0ZSBoaWRkZW4gbG9vcCBub01vZHVsZSBub1ZhbGlkYXRlIG9wZW4gcGxheXNJbmxpbmUgcmVhZE9ubHkgcmVxdWlyZWQgcmV2ZXJzZWQgc2NvcGVkIHNlYW1sZXNzIGl0ZW1TY29wZSIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGU1KSB7CiAgICAgIEgyM1tlNV0gPSBuZXcgWDIzKGU1LCAzLCBmYWxzZSwgZTUudG9Mb3dlckNhc2UoKSwgbnVsbCwgZmFsc2UsIGZhbHNlKTsKICAgIH0pOwogICAgWyJjaGVja2VkIiwgIm11bHRpcGxlIiwgIm11dGVkIiwgInNlbGVjdGVkIl0uZm9yRWFjaChmdW5jdGlvbihlNSkgewogICAgICBIMjNbZTVdID0gbmV3IFgyMyhlNSwgMywgdHJ1ZSwgZTUsIG51bGwsIGZhbHNlLCBmYWxzZSk7CiAgICB9KTsKICAgIFsiY2FwdHVyZSIsICJkb3dubG9hZCJdLmZvckVhY2goZnVuY3Rpb24oZTUpIHsKICAgICAgSDIzW2U1XSA9IG5ldyBYMjMoZTUsIDQsIGZhbHNlLCBlNSwgbnVsbCwgZmFsc2UsIGZhbHNlKTsKICAgIH0pOwogICAgWyJjb2xzIiwgInJvd3MiLCAic2l6ZSIsICJzcGFuIl0uZm9yRWFjaChmdW5jdGlvbihlNSkgewogICAgICBIMjNbZTVdID0gbmV3IFgyMyhlNSwgNiwgZmFsc2UsIGU1LCBudWxsLCBmYWxzZSwgZmFsc2UpOwogICAgfSk7CiAgICBbInJvd1NwYW4iLCAic3RhcnQiXS5mb3JFYWNoKGZ1bmN0aW9uKGU1KSB7CiAgICAgIEgyM1tlNV0gPSBuZXcgWDIzKGU1LCA1LCBmYWxzZSwgZTUudG9Mb3dlckNhc2UoKSwgbnVsbCwgZmFsc2UsIGZhbHNlKTsKICAgIH0pOwogICAgdmFyIEJsID0gL1tcLTpdKFthLXpdKS9nOwogICAgZnVuY3Rpb24gSGwoZTUpIHsKICAgICAgcmV0dXJuIGU1WzFdLnRvVXBwZXJDYXNlKCk7CiAgICB9CiAgICAiYWNjZW50LWhlaWdodCBhbGlnbm1lbnQtYmFzZWxpbmUgYXJhYmljLWZvcm0gYmFzZWxpbmUtc2hpZnQgY2FwLWhlaWdodCBjbGlwLXBhdGggY2xpcC1ydWxlIGNvbG9yLWludGVycG9sYXRpb24gY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIGNvbG9yLXByb2ZpbGUgY29sb3ItcmVuZGVyaW5nIGRvbWluYW50LWJhc2VsaW5lIGVuYWJsZS1iYWNrZ3JvdW5kIGZpbGwtb3BhY2l0eSBmaWxsLXJ1bGUgZmxvb2QtY29sb3IgZmxvb2Qtb3BhY2l0eSBmb250LWZhbWlseSBmb250LXNpemUgZm9udC1zaXplLWFkanVzdCBmb250LXN0cmV0Y2ggZm9udC1zdHlsZSBmb250LXZhcmlhbnQgZm9udC13ZWlnaHQgZ2x5cGgtbmFtZSBnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIGdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIGhvcml6LWFkdi14IGhvcml6LW9yaWdpbi14IGltYWdlLXJlbmRlcmluZyBsZXR0ZXItc3BhY2luZyBsaWdodGluZy1jb2xvciBtYXJrZXItZW5kIG1hcmtlci1taWQgbWFya2VyLXN0YXJ0IG92ZXJsaW5lLXBvc2l0aW9uIG92ZXJsaW5lLXRoaWNrbmVzcyBwYWludC1vcmRlciBwYW5vc2UtMSBwb2ludGVyLWV2ZW50cyByZW5kZXJpbmctaW50ZW50IHNoYXBlLXJlbmRlcmluZyBzdG9wLWNvbG9yIHN0b3Atb3BhY2l0eSBzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIHN0cm9rZS1kYXNoYXJyYXkgc3Ryb2tlLWRhc2hvZmZzZXQgc3Ryb2tlLWxpbmVjYXAgc3Ryb2tlLWxpbmVqb2luIHN0cm9rZS1taXRlcmxpbWl0IHN0cm9rZS1vcGFjaXR5IHN0cm9rZS13aWR0aCB0ZXh0LWFuY2hvciB0ZXh0LWRlY29yYXRpb24gdGV4dC1yZW5kZXJpbmcgdW5kZXJsaW5lLXBvc2l0aW9uIHVuZGVybGluZS10aGlja25lc3MgdW5pY29kZS1iaWRpIHVuaWNvZGUtcmFuZ2UgdW5pdHMtcGVyLWVtIHYtYWxwaGFiZXRpYyB2LWhhbmdpbmcgdi1pZGVvZ3JhcGhpYyB2LW1hdGhlbWF0aWNhbCB2ZWN0b3ItZWZmZWN0IHZlcnQtYWR2LXkgdmVydC1vcmlnaW4teCB2ZXJ0LW9yaWdpbi15IHdvcmQtc3BhY2luZyB3cml0aW5nLW1vZGUgeG1sbnM6eGxpbmsgeC1oZWlnaHQiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlNSkgewogICAgICB2YXIgbjggPSBlNS5yZXBsYWNlKEJsLCBIbCk7CiAgICAgIEgyM1tuOF0gPSBuZXcgWDIzKG44LCAxLCBmYWxzZSwgZTUsIG51bGwsIGZhbHNlLCBmYWxzZSk7CiAgICB9KTsKICAgICJ4bGluazphY3R1YXRlIHhsaW5rOmFyY3JvbGUgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlNSkgewogICAgICB2YXIgbjggPSBlNS5yZXBsYWNlKEJsLCBIbCk7CiAgICAgIEgyM1tuOF0gPSBuZXcgWDIzKG44LCAxLCBmYWxzZSwgZTUsICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwgZmFsc2UsIGZhbHNlKTsKICAgIH0pOwogICAgWyJ4bWw6YmFzZSIsICJ4bWw6bGFuZyIsICJ4bWw6c3BhY2UiXS5mb3JFYWNoKGZ1bmN0aW9uKGU1KSB7CiAgICAgIHZhciBuOCA9IGU1LnJlcGxhY2UoQmwsIEhsKTsKICAgICAgSDIzW244XSA9IG5ldyBYMjMobjgsIDEsIGZhbHNlLCBlNSwgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsIGZhbHNlLCBmYWxzZSk7CiAgICB9KTsKICAgIFsidGFiSW5kZXgiLCAiY3Jvc3NPcmlnaW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGU1KSB7CiAgICAgIEgyM1tlNV0gPSBuZXcgWDIzKGU1LCAxLCBmYWxzZSwgZTUudG9Mb3dlckNhc2UoKSwgbnVsbCwgZmFsc2UsIGZhbHNlKTsKICAgIH0pOwogICAgSDIzLnhsaW5rSHJlZiA9IG5ldyBYMjMoInhsaW5rSHJlZiIsIDEsIGZhbHNlLCAieGxpbms6aHJlZiIsICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwgdHJ1ZSwgZmFsc2UpOwogICAgWyJzcmMiLCAiaHJlZiIsICJhY3Rpb24iLCAiZm9ybUFjdGlvbiJdLmZvckVhY2goZnVuY3Rpb24oZTUpIHsKICAgICAgSDIzW2U1XSA9IG5ldyBYMjMoZTUsIDEsIGZhbHNlLCBlNS50b0xvd2VyQ2FzZSgpLCBudWxsLCB0cnVlLCB0cnVlKTsKICAgIH0pOwogICAgZnVuY3Rpb24gV2woZTUsIG44LCB0NCwgcjMpIHsKICAgICAgdmFyIGw3ID0gSDIzLmhhc093blByb3BlcnR5KG44KSA/IEgyM1tuOF0gOiBudWxsLCBpNCA9IGw3ICE9PSBudWxsID8gbDcudHlwZSA9PT0gMCA6IHIzID8gZmFsc2UgOiAhKCEoMiA8IG44Lmxlbmd0aCkgfHwgbjhbMF0gIT09ICJvIiAmJiBuOFswXSAhPT0gIk8iIHx8IG44WzFdICE9PSAibiIgJiYgbjhbMV0gIT09ICJOIik7CiAgICAgIGk0IHx8IChGczIobjgsIHQ0LCBsNywgcjMpICYmICh0NCA9IG51bGwpLCByMyB8fCBsNyA9PT0gbnVsbCA/IERzMihuOCkgJiYgKHQ0ID09PSBudWxsID8gZTUucmVtb3ZlQXR0cmlidXRlKG44KSA6IGU1LnNldEF0dHJpYnV0ZShuOCwgIiIgKyB0NCkpIDogbDcubXVzdFVzZVByb3BlcnR5ID8gZTVbbDcucHJvcGVydHlOYW1lXSA9IHQ0ID09PSBudWxsID8gbDcudHlwZSA9PT0gMyA/IGZhbHNlIDogIiIgOiB0NCA6IChuOCA9IGw3LmF0dHJpYnV0ZU5hbWUsIHIzID0gbDcuYXR0cmlidXRlTmFtZXNwYWNlLCB0NCA9PT0gbnVsbCA/IGU1LnJlbW92ZUF0dHJpYnV0ZShuOCkgOiAobDcgPSBsNy50eXBlLCB0NCA9IGw3ID09PSAzIHx8IGw3ID09PSA0ICYmIHQ0ID09PSB0cnVlID8gIiIgOiAiIiArIHQ0LCByMyA/IGU1LnNldEF0dHJpYnV0ZU5TKHIzLCBuOCwgdDQpIDogZTUuc2V0QXR0cmlidXRlKG44LCB0NCkpKSk7CiAgICB9CiAgICB2YXIgcWU4ID0geXIzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELCBBbjQgPSA2MDEwMywgV2UxMSA9IDYwMTA2LCBrZTE2ID0gNjAxMDcsIEFsID0gNjAxMDgsIEtuNCA9IDYwMTE0LCBRbCA9IDYwMTA5LCAkbCA9IDYwMTEwLCBncjMgPSA2MDExMiwgR241ID0gNjAxMTMsIEt0NiA9IDYwMTIwLCB3cjMgPSA2MDExNSwgWWwgPSA2MDExNiwgWGwgPSA2MDEyMSwgS2wgPSA2MDEyOCwgWG8gPSA2MDEyOSwgR2wgPSA2MDEzMCwgZWwgPSA2MDEzMTsKICAgIHR5cGVvZiBTeW1ib2wgPT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wuZm9yICYmIChGMjIgPSBTeW1ib2wuZm9yLCBBbjQgPSBGMjIoInJlYWN0LmVsZW1lbnQiKSwgV2UxMSA9IEYyMigicmVhY3QucG9ydGFsIiksIGtlMTYgPSBGMjIoInJlYWN0LmZyYWdtZW50IiksIEFsID0gRjIyKCJyZWFjdC5zdHJpY3RfbW9kZSIpLCBLbjQgPSBGMjIoInJlYWN0LnByb2ZpbGVyIiksIFFsID0gRjIyKCJyZWFjdC5wcm92aWRlciIpLCAkbCA9IEYyMigicmVhY3QuY29udGV4dCIpLCBncjMgPSBGMjIoInJlYWN0LmZvcndhcmRfcmVmIiksIEduNSA9IEYyMigicmVhY3Quc3VzcGVuc2UiKSwgS3Q2ID0gRjIyKCJyZWFjdC5zdXNwZW5zZV9saXN0IiksIHdyMyA9IEYyMigicmVhY3QubWVtbyIpLCBZbCA9IEYyMigicmVhY3QubGF6eSIpLCBYbCA9IEYyMigicmVhY3QuYmxvY2siKSwgRjIyKCJyZWFjdC5zY29wZSIpLCBLbCA9IEYyMigicmVhY3Qub3BhcXVlLmlkIiksIFhvID0gRjIyKCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlIiksIEdsID0gRjIyKCJyZWFjdC5vZmZzY3JlZW4iKSwgZWwgPSBGMjIoInJlYWN0LmxlZ2FjeV9oaWRkZW4iKSk7CiAgICB2YXIgRjIyLCBGaTIgPSB0eXBlb2YgU3ltYm9sID09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLml0ZXJhdG9yOwogICAgZnVuY3Rpb24gT240KGU1KSB7CiAgICAgIHJldHVybiBlNSA9PT0gbnVsbCB8fCB0eXBlb2YgZTUgIT0gIm9iamVjdCIgPyBudWxsIDogKGU1ID0gRmkyICYmIGU1W0ZpMl0gfHwgZTVbIkBAaXRlcmF0b3IiXSwgdHlwZW9mIGU1ID09ICJmdW5jdGlvbiIgPyBlNSA6IG51bGwpOwogICAgfQogICAgdmFyIE1yMzsKICAgIGZ1bmN0aW9uIFFuNChlNSkgewogICAgICBpZiAoTXIzID09PSB2b2lkIDApCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRocm93IEVycm9yKCk7CiAgICAgICAgfSBjYXRjaCAodDQpIHsKICAgICAgICAgIHZhciBuOCA9IHQ0LnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLyk7CiAgICAgICAgICBNcjMgPSBuOCAmJiBuOFsxXSB8fCAiIjsKICAgICAgICB9CiAgICAgIHJldHVybiBgCmAgKyBNcjMgKyBlNTsKICAgIH0KICAgIHZhciBScjMgPSBmYWxzZTsKICAgIGZ1bmN0aW9uIF90NChlNSwgbjgpIHsKICAgICAgaWYgKCFlNSB8fCBScjMpCiAgICAgICAgcmV0dXJuICIiOwogICAgICBScjMgPSB0cnVlOwogICAgICB2YXIgdDQgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsKICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB2b2lkIDA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG44KQogICAgICAgICAgaWYgKG44ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRocm93IEVycm9yKCk7CiAgICAgICAgICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkobjgucHJvdG90eXBlLCAicHJvcHMiLCB7IHNldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRocm93IEVycm9yKCk7CiAgICAgICAgICB9IH0pLCB0eXBlb2YgUmVmbGVjdCA9PSAib2JqZWN0IiAmJiBSZWZsZWN0LmNvbnN0cnVjdCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KG44LCBbXSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKHM4KSB7CiAgICAgICAgICAgICAgdmFyIHIzID0gczg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZTUsIFtdLCBuOCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIG44LmNhbGwoKTsKICAgICAgICAgICAgfSBjYXRjaCAoczgpIHsKICAgICAgICAgICAgICByMyA9IHM4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGU1LmNhbGwobjgucHJvdG90eXBlKTsKICAgICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRocm93IEVycm9yKCk7CiAgICAgICAgICB9IGNhdGNoIChzOCkgewogICAgICAgICAgICByMyA9IHM4OwogICAgICAgICAgfQogICAgICAgICAgZTUoKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKHM4KSB7CiAgICAgICAgaWYgKHM4ICYmIHIzICYmIHR5cGVvZiBzOC5zdGFjayA9PSAic3RyaW5nIikgewogICAgICAgICAgZm9yICh2YXIgbDcgPSBzOC5zdGFjay5zcGxpdChgCmApLCBpNCA9IHIzLnN0YWNrLnNwbGl0KGAKYCksIG80ID0gbDcubGVuZ3RoIC0gMSwgdTExID0gaTQubGVuZ3RoIC0gMTsgMSA8PSBvNCAmJiAwIDw9IHUxMSAmJiBsN1tvNF0gIT09IGk0W3UxMV07ICkKICAgICAgICAgICAgdTExLS07CiAgICAgICAgICBmb3IgKDsgMSA8PSBvNCAmJiAwIDw9IHUxMTsgbzQtLSwgdTExLS0pCiAgICAgICAgICAgIGlmIChsN1tvNF0gIT09IGk0W3UxMV0pIHsKICAgICAgICAgICAgICBpZiAobzQgIT09IDEgfHwgdTExICE9PSAxKQogICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgaWYgKG80LS0sIHUxMS0tLCAwID4gdTExIHx8IGw3W280XSAhPT0gaTRbdTExXSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYApgICsgbDdbbzRdLnJlcGxhY2UoIiBhdCBuZXcgIiwgIiBhdCAiKTsKICAgICAgICAgICAgICAgIHdoaWxlICgxIDw9IG80ICYmIDAgPD0gdTExKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBScjMgPSBmYWxzZSwgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB0NDsKICAgICAgfQogICAgICByZXR1cm4gKGU1ID0gZTUgPyBlNS5kaXNwbGF5TmFtZSB8fCBlNS5uYW1lIDogIiIpID8gUW40KGU1KSA6ICIiOwogICAgfQogICAgZnVuY3Rpb24ganMyKGU1KSB7CiAgICAgIHN3aXRjaCAoZTUudGFnKSB7CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgcmV0dXJuIFFuNChlNS50eXBlKTsKICAgICAgICBjYXNlIDE2OgogICAgICAgICAgcmV0dXJuIFFuNCgiTGF6eSIpOwogICAgICAgIGNhc2UgMTM6CiAgICAgICAgICByZXR1cm4gUW40KCJTdXNwZW5zZSIpOwogICAgICAgIGNhc2UgMTk6CiAgICAgICAgICByZXR1cm4gUW40KCJTdXNwZW5zZUxpc3QiKTsKICAgICAgICBjYXNlIDA6CiAgICAgICAgY2FzZSAyOgogICAgICAgIGNhc2UgMTU6CiAgICAgICAgICByZXR1cm4gZTUgPSBfdDQoZTUudHlwZSwgZmFsc2UpLCBlNTsKICAgICAgICBjYXNlIDExOgogICAgICAgICAgcmV0dXJuIGU1ID0gX3Q0KGU1LnR5cGUucmVuZGVyLCBmYWxzZSksIGU1OwogICAgICAgIGNhc2UgMjI6CiAgICAgICAgICByZXR1cm4gZTUgPSBfdDQoZTUudHlwZS5fcmVuZGVyLCBmYWxzZSksIGU1OwogICAgICAgIGNhc2UgMToKICAgICAgICAgIHJldHVybiBlNSA9IF90NChlNS50eXBlLCB0cnVlKSwgZTU7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gZG40KGU1KSB7CiAgICAgIGlmIChlNSA9PSBudWxsKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBpZiAodHlwZW9mIGU1ID09ICJmdW5jdGlvbiIpCiAgICAgICAgcmV0dXJuIGU1LmRpc3BsYXlOYW1lIHx8IGU1Lm5hbWUgfHwgbnVsbDsKICAgICAgaWYgKHR5cGVvZiBlNSA9PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gZTU7CiAgICAgIHN3aXRjaCAoZTUpIHsKICAgICAgICBjYXNlIGtlMTY6CiAgICAgICAgICByZXR1cm4gIkZyYWdtZW50IjsKICAgICAgICBjYXNlIFdlMTE6CiAgICAgICAgICByZXR1cm4gIlBvcnRhbCI7CiAgICAgICAgY2FzZSBLbjQ6CiAgICAgICAgICByZXR1cm4gIlByb2ZpbGVyIjsKICAgICAgICBjYXNlIEFsOgogICAgICAgICAgcmV0dXJuICJTdHJpY3RNb2RlIjsKICAgICAgICBjYXNlIEduNToKICAgICAgICAgIHJldHVybiAiU3VzcGVuc2UiOwogICAgICAgIGNhc2UgS3Q2OgogICAgICAgICAgcmV0dXJuICJTdXNwZW5zZUxpc3QiOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgZTUgPT0gIm9iamVjdCIpCiAgICAgICAgc3dpdGNoIChlNS4kJHR5cGVvZikgewogICAgICAgICAgY2FzZSAkbDoKICAgICAgICAgICAgcmV0dXJuIChlNS5kaXNwbGF5TmFtZSB8fCAiQ29udGV4dCIpICsgIi5Db25zdW1lciI7CiAgICAgICAgICBjYXNlIFFsOgogICAgICAgICAgICByZXR1cm4gKGU1Ll9jb250ZXh0LmRpc3BsYXlOYW1lIHx8ICJDb250ZXh0IikgKyAiLlByb3ZpZGVyIjsKICAgICAgICAgIGNhc2UgZ3IzOgogICAgICAgICAgICB2YXIgbjggPSBlNS5yZW5kZXI7CiAgICAgICAgICAgIHJldHVybiBuOCA9IG44LmRpc3BsYXlOYW1lIHx8IG44Lm5hbWUgfHwgIiIsIGU1LmRpc3BsYXlOYW1lIHx8IChuOCAhPT0gIiIgPyAiRm9yd2FyZFJlZigiICsgbjggKyAiKSIgOiAiRm9yd2FyZFJlZiIpOwogICAgICAgICAgY2FzZSB3cjM6CiAgICAgICAgICAgIHJldHVybiBkbjQoZTUudHlwZSk7CiAgICAgICAgICBjYXNlIFhsOgogICAgICAgICAgICByZXR1cm4gZG40KGU1Ll9yZW5kZXIpOwogICAgICAgICAgY2FzZSBZbDoKICAgICAgICAgICAgbjggPSBlNS5fcGF5bG9hZCwgZTUgPSBlNS5faW5pdDsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXR1cm4gZG40KGU1KG44KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIERlMTMoZTUpIHsKICAgICAgc3dpdGNoICh0eXBlb2YgZTUpIHsKICAgICAgICBjYXNlICJib29sZWFuIjoKICAgICAgICBjYXNlICJudW1iZXIiOgogICAgICAgIGNhc2UgIm9iamVjdCI6CiAgICAgICAgY2FzZSAic3RyaW5nIjoKICAgICAgICBjYXNlICJ1bmRlZmluZWQiOgogICAgICAgICAgcmV0dXJuIGU1OwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIEtvKGU1KSB7CiAgICAgIHZhciBuOCA9IGU1LnR5cGU7CiAgICAgIHJldHVybiAoZTUgPSBlNS5ub2RlTmFtZSkgJiYgZTUudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAobjggPT09ICJjaGVja2JveCIgfHwgbjggPT09ICJyYWRpbyIpOwogICAgfQogICAgZnVuY3Rpb24gVXMyKGU1KSB7CiAgICAgIHZhciBuOCA9IEtvKGU1KSA/ICJjaGVja2VkIiA6ICJ2YWx1ZSIsIHQ0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlNS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIG44KSwgcjMgPSAiIiArIGU1W244XTsKICAgICAgaWYgKCFlNS5oYXNPd25Qcm9wZXJ0eShuOCkgJiYgdHlwZW9mIHQ0IDwgInUiICYmIHR5cGVvZiB0NC5nZXQgPT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgdDQuc2V0ID09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YXIgbDcgPSB0NC5nZXQsIGk0ID0gdDQuc2V0OwogICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZTUsIG44LCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBsNy5jYWxsKHRoaXMpOwogICAgICAgIH0sIHNldDogZnVuY3Rpb24obzQpIHsKICAgICAgICAgIHIzID0gIiIgKyBvNCwgaTQuY2FsbCh0aGlzLCBvNCk7CiAgICAgICAgfSB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGU1LCBuOCwgeyBlbnVtZXJhYmxlOiB0NC5lbnVtZXJhYmxlIH0pLCB7IGdldFZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiByMzsKICAgICAgICB9LCBzZXRWYWx1ZTogZnVuY3Rpb24obzQpIHsKICAgICAgICAgIHIzID0gIiIgKyBvNDsKICAgICAgICB9LCBzdG9wVHJhY2tpbmc6IGZ1bmN0aW9uKCkgewogICAgICAgICAgZTUuX3ZhbHVlVHJhY2tlciA9IG51bGwsIGRlbGV0ZSBlNVtuOF07CiAgICAgICAgfSB9OwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBOdDgoZTUpIHsKICAgICAgZTUuX3ZhbHVlVHJhY2tlciB8fCAoZTUuX3ZhbHVlVHJhY2tlciA9IFVzMihlNSkpOwogICAgfQogICAgZnVuY3Rpb24gR28oZTUpIHsKICAgICAgaWYgKCFlNSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHZhciBuOCA9IGU1Ll92YWx1ZVRyYWNrZXI7CiAgICAgIGlmICghbjgpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIHZhciB0NCA9IG44LmdldFZhbHVlKCksIHIzID0gIiI7CiAgICAgIHJldHVybiBlNSAmJiAocjMgPSBLbyhlNSkgPyBlNS5jaGVja2VkID8gInRydWUiIDogImZhbHNlIiA6IGU1LnZhbHVlKSwgZTUgPSByMywgZTUgIT09IHQ0ID8gKG44LnNldFZhbHVlKGU1KSwgdHJ1ZSkgOiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIEd0NShlNSkgewogICAgICBpZiAoZTUgPSBlNSB8fCAodHlwZW9mIGRvY3VtZW50IDwgInUiID8gZG9jdW1lbnQgOiB2b2lkIDApLCB0eXBlb2YgZTUgPiAidSIpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIGU1LmFjdGl2ZUVsZW1lbnQgfHwgZTUuYm9keTsKICAgICAgfSBjYXRjaCB7CiAgICAgICAgcmV0dXJuIGU1LmJvZHk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIG5sKGU1LCBuOCkgewogICAgICB2YXIgdDQgPSBuOC5jaGVja2VkOwogICAgICByZXR1cm4gTTI1KHt9LCBuOCwgeyBkZWZhdWx0Q2hlY2tlZDogdm9pZCAwLCBkZWZhdWx0VmFsdWU6IHZvaWQgMCwgdmFsdWU6IHZvaWQgMCwgY2hlY2tlZDogdDQgPz8gZTUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGppMihlNSwgbjgpIHsKICAgICAgdmFyIHQ0ID0gbjguZGVmYXVsdFZhbHVlID09IG51bGwgPyAiIiA6IG44LmRlZmF1bHRWYWx1ZSwgcjMgPSBuOC5jaGVja2VkICE9IG51bGwgPyBuOC5jaGVja2VkIDogbjguZGVmYXVsdENoZWNrZWQ7CiAgICAgIHQ0ID0gRGUxMyhuOC52YWx1ZSAhPSBudWxsID8gbjgudmFsdWUgOiB0NCksIGU1Ll93cmFwcGVyU3RhdGUgPSB7IGluaXRpYWxDaGVja2VkOiByMywgaW5pdGlhbFZhbHVlOiB0NCwgY29udHJvbGxlZDogbjgudHlwZSA9PT0gImNoZWNrYm94IiB8fCBuOC50eXBlID09PSAicmFkaW8iID8gbjguY2hlY2tlZCAhPSBudWxsIDogbjgudmFsdWUgIT0gbnVsbCB9OwogICAgfQogICAgZnVuY3Rpb24gWm8oZTUsIG44KSB7CiAgICAgIG44ID0gbjguY2hlY2tlZCwgbjggIT0gbnVsbCAmJiBXbChlNSwgImNoZWNrZWQiLCBuOCwgZmFsc2UpOwogICAgfQogICAgZnVuY3Rpb24gdGwoZTUsIG44KSB7CiAgICAgIFpvKGU1LCBuOCk7CiAgICAgIHZhciB0NCA9IERlMTMobjgudmFsdWUpLCByMyA9IG44LnR5cGU7CiAgICAgIGlmICh0NCAhPSBudWxsKQogICAgICAgIHIzID09PSAibnVtYmVyIiA/ICh0NCA9PT0gMCAmJiBlNS52YWx1ZSA9PT0gIiIgfHwgZTUudmFsdWUgIT0gdDQpICYmIChlNS52YWx1ZSA9ICIiICsgdDQpIDogZTUudmFsdWUgIT09ICIiICsgdDQgJiYgKGU1LnZhbHVlID0gIiIgKyB0NCk7CiAgICAgIGVsc2UgaWYgKHIzID09PSAic3VibWl0IiB8fCByMyA9PT0gInJlc2V0IikgewogICAgICAgIGU1LnJlbW92ZUF0dHJpYnV0ZSgidmFsdWUiKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbjguaGFzT3duUHJvcGVydHkoInZhbHVlIikgPyBybChlNSwgbjgudHlwZSwgdDQpIDogbjguaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpICYmIHJsKGU1LCBuOC50eXBlLCBEZTEzKG44LmRlZmF1bHRWYWx1ZSkpLCBuOC5jaGVja2VkID09IG51bGwgJiYgbjguZGVmYXVsdENoZWNrZWQgIT0gbnVsbCAmJiAoZTUuZGVmYXVsdENoZWNrZWQgPSAhIW44LmRlZmF1bHRDaGVja2VkKTsKICAgIH0KICAgIGZ1bmN0aW9uIFVpMihlNSwgbjgsIHQ0KSB7CiAgICAgIGlmIChuOC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSB8fCBuOC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpIHsKICAgICAgICB2YXIgcjMgPSBuOC50eXBlOwogICAgICAgIGlmICghKHIzICE9PSAic3VibWl0IiAmJiByMyAhPT0gInJlc2V0IiB8fCBuOC52YWx1ZSAhPT0gdm9pZCAwICYmIG44LnZhbHVlICE9PSBudWxsKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBuOCA9ICIiICsgZTUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUsIHQ0IHx8IG44ID09PSBlNS52YWx1ZSB8fCAoZTUudmFsdWUgPSBuOCksIGU1LmRlZmF1bHRWYWx1ZSA9IG44OwogICAgICB9CiAgICAgIHQ0ID0gZTUubmFtZSwgdDQgIT09ICIiICYmIChlNS5uYW1lID0gIiIpLCBlNS5kZWZhdWx0Q2hlY2tlZCA9ICEhZTUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCwgdDQgIT09ICIiICYmIChlNS5uYW1lID0gdDQpOwogICAgfQogICAgZnVuY3Rpb24gcmwoZTUsIG44LCB0NCkgewogICAgICAobjggIT09ICJudW1iZXIiIHx8IEd0NShlNS5vd25lckRvY3VtZW50KSAhPT0gZTUpICYmICh0NCA9PSBudWxsID8gZTUuZGVmYXVsdFZhbHVlID0gIiIgKyBlNS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSA6IGU1LmRlZmF1bHRWYWx1ZSAhPT0gIiIgKyB0NCAmJiAoZTUuZGVmYXVsdFZhbHVlID0gIiIgKyB0NCkpOwogICAgfQogICAgZnVuY3Rpb24gVnMyKGU1KSB7CiAgICAgIHZhciBuOCA9ICIiOwogICAgICByZXR1cm4geXIzLkNoaWxkcmVuLmZvckVhY2goZTUsIGZ1bmN0aW9uKHQ0KSB7CiAgICAgICAgdDQgIT0gbnVsbCAmJiAobjggKz0gdDQpOwogICAgICB9KSwgbjg7CiAgICB9CiAgICBmdW5jdGlvbiBsbChlNSwgbjgpIHsKICAgICAgcmV0dXJuIGU1ID0gTTI1KHsgY2hpbGRyZW46IHZvaWQgMCB9LCBuOCksIChuOCA9IFZzMihuOC5jaGlsZHJlbikpICYmIChlNS5jaGlsZHJlbiA9IG44KSwgZTU7CiAgICB9CiAgICBmdW5jdGlvbiBwbjMoZTUsIG44LCB0NCwgcjMpIHsKICAgICAgaWYgKGU1ID0gZTUub3B0aW9ucywgbjgpIHsKICAgICAgICBuOCA9IHt9OwogICAgICAgIGZvciAodmFyIGw3ID0gMDsgbDcgPCB0NC5sZW5ndGg7IGw3KyspCiAgICAgICAgICBuOFsiJCIgKyB0NFtsN11dID0gdHJ1ZTsKICAgICAgICBmb3IgKHQ0ID0gMDsgdDQgPCBlNS5sZW5ndGg7IHQ0KyspCiAgICAgICAgICBsNyA9IG44Lmhhc093blByb3BlcnR5KCIkIiArIGU1W3Q0XS52YWx1ZSksIGU1W3Q0XS5zZWxlY3RlZCAhPT0gbDcgJiYgKGU1W3Q0XS5zZWxlY3RlZCA9IGw3KSwgbDcgJiYgcjMgJiYgKGU1W3Q0XS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKHQ0ID0gIiIgKyBEZTEzKHQ0KSwgbjggPSBudWxsLCBsNyA9IDA7IGw3IDwgZTUubGVuZ3RoOyBsNysrKSB7CiAgICAgICAgICBpZiAoZTVbbDddLnZhbHVlID09PSB0NCkgewogICAgICAgICAgICBlNVtsN10uc2VsZWN0ZWQgPSB0cnVlLCByMyAmJiAoZTVbbDddLmRlZmF1bHRTZWxlY3RlZCA9IHRydWUpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBuOCAhPT0gbnVsbCB8fCBlNVtsN10uZGlzYWJsZWQgfHwgKG44ID0gZTVbbDddKTsKICAgICAgICB9CiAgICAgICAgbjggIT09IG51bGwgJiYgKG44LnNlbGVjdGVkID0gdHJ1ZSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGlsKGU1LCBuOCkgewogICAgICBpZiAobjguZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkKICAgICAgICB0aHJvdyBFcnJvcih2MTUoOTEpKTsKICAgICAgcmV0dXJuIE0yNSh7fSwgbjgsIHsgdmFsdWU6IHZvaWQgMCwgZGVmYXVsdFZhbHVlOiB2b2lkIDAsIGNoaWxkcmVuOiAiIiArIGU1Ll93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlIH0pOwogICAgfQogICAgZnVuY3Rpb24gVmkyKGU1LCBuOCkgewogICAgICB2YXIgdDQgPSBuOC52YWx1ZTsKICAgICAgaWYgKHQ0ID09IG51bGwpIHsKICAgICAgICBpZiAodDQgPSBuOC5jaGlsZHJlbiwgbjggPSBuOC5kZWZhdWx0VmFsdWUsIHQ0ICE9IG51bGwpIHsKICAgICAgICAgIGlmIChuOCAhPSBudWxsKQogICAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoOTIpKTsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHQ0KSkgewogICAgICAgICAgICBpZiAoISgxID49IHQ0Lmxlbmd0aCkpCiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDkzKSk7CiAgICAgICAgICAgIHQ0ID0gdDRbMF07CiAgICAgICAgICB9CiAgICAgICAgICBuOCA9IHQ0OwogICAgICAgIH0KICAgICAgICBuOCA9PSBudWxsICYmIChuOCA9ICIiKSwgdDQgPSBuODsKICAgICAgfQogICAgICBlNS5fd3JhcHBlclN0YXRlID0geyBpbml0aWFsVmFsdWU6IERlMTModDQpIH07CiAgICB9CiAgICBmdW5jdGlvbiBKbyhlNSwgbjgpIHsKICAgICAgdmFyIHQ0ID0gRGUxMyhuOC52YWx1ZSksIHIzID0gRGUxMyhuOC5kZWZhdWx0VmFsdWUpOwogICAgICB0NCAhPSBudWxsICYmICh0NCA9ICIiICsgdDQsIHQ0ICE9PSBlNS52YWx1ZSAmJiAoZTUudmFsdWUgPSB0NCksIG44LmRlZmF1bHRWYWx1ZSA9PSBudWxsICYmIGU1LmRlZmF1bHRWYWx1ZSAhPT0gdDQgJiYgKGU1LmRlZmF1bHRWYWx1ZSA9IHQ0KSksIHIzICE9IG51bGwgJiYgKGU1LmRlZmF1bHRWYWx1ZSA9ICIiICsgcjMpOwogICAgfQogICAgZnVuY3Rpb24gQmkyKGU1KSB7CiAgICAgIHZhciBuOCA9IGU1LnRleHRDb250ZW50OwogICAgICBuOCA9PT0gZTUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUgJiYgbjggIT09ICIiICYmIG44ICE9PSBudWxsICYmIChlNS52YWx1ZSA9IG44KTsKICAgIH0KICAgIHZhciBvbCA9IHsgaHRtbDogImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCBtYXRobWw6ICJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIiwgc3ZnOiAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIH07CiAgICBmdW5jdGlvbiBxbyhlNSkgewogICAgICBzd2l0Y2ggKGU1KSB7CiAgICAgICAgY2FzZSAic3ZnIjoKICAgICAgICAgIHJldHVybiAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOwogICAgICAgIGNhc2UgIm1hdGgiOgogICAgICAgICAgcmV0dXJuICJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gdWwoZTUsIG44KSB7CiAgICAgIHJldHVybiBlNSA9PSBudWxsIHx8IGU1ID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgPyBxbyhuOCkgOiBlNSA9PT0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAmJiBuOCA9PT0gImZvcmVpZ25PYmplY3QiID8gImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIDogZTU7CiAgICB9CiAgICB2YXIgUHQxMywgYm8gPSBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gdHlwZW9mIE1TQXBwIDwgInUiICYmIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uID8gZnVuY3Rpb24objgsIHQ0LCByMywgbDcpIHsKICAgICAgICBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBlNShuOCwgdDQsIHIzLCBsNyk7CiAgICAgICAgfSk7CiAgICAgIH0gOiBlNTsKICAgIH0oZnVuY3Rpb24oZTUsIG44KSB7CiAgICAgIGlmIChlNS5uYW1lc3BhY2VVUkkgIT09IG9sLnN2ZyB8fCAiaW5uZXJIVE1MIiBpbiBlNSkKICAgICAgICBlNS5pbm5lckhUTUwgPSBuODsKICAgICAgZWxzZSB7CiAgICAgICAgZm9yIChQdDEzID0gUHQxMyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgUHQxMy5pbm5lckhUTUwgPSAiPHN2Zz4iICsgbjgudmFsdWVPZigpLnRvU3RyaW5nKCkgKyAiPC9zdmc+IiwgbjggPSBQdDEzLmZpcnN0Q2hpbGQ7IGU1LmZpcnN0Q2hpbGQ7ICkKICAgICAgICAgIGU1LnJlbW92ZUNoaWxkKGU1LmZpcnN0Q2hpbGQpOwogICAgICAgIGZvciAoOyBuOC5maXJzdENoaWxkOyApCiAgICAgICAgICBlNS5hcHBlbmRDaGlsZChuOC5maXJzdENoaWxkKTsKICAgICAgfQogICAgfSk7CiAgICBmdW5jdGlvbiB1dDEzKGU1LCBuOCkgewogICAgICBpZiAobjgpIHsKICAgICAgICB2YXIgdDQgPSBlNS5maXJzdENoaWxkOwogICAgICAgIGlmICh0NCAmJiB0NCA9PT0gZTUubGFzdENoaWxkICYmIHQ0Lm5vZGVUeXBlID09PSAzKSB7CiAgICAgICAgICB0NC5ub2RlVmFsdWUgPSBuODsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgZTUudGV4dENvbnRlbnQgPSBuODsKICAgIH0KICAgIHZhciBabjQgPSB7IGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB0cnVlLCBib3JkZXJJbWFnZU91dHNldDogdHJ1ZSwgYm9yZGVySW1hZ2VTbGljZTogdHJ1ZSwgYm9yZGVySW1hZ2VXaWR0aDogdHJ1ZSwgYm94RmxleDogdHJ1ZSwgYm94RmxleEdyb3VwOiB0cnVlLCBib3hPcmRpbmFsR3JvdXA6IHRydWUsIGNvbHVtbkNvdW50OiB0cnVlLCBjb2x1bW5zOiB0cnVlLCBmbGV4OiB0cnVlLCBmbGV4R3JvdzogdHJ1ZSwgZmxleFBvc2l0aXZlOiB0cnVlLCBmbGV4U2hyaW5rOiB0cnVlLCBmbGV4TmVnYXRpdmU6IHRydWUsIGZsZXhPcmRlcjogdHJ1ZSwgZ3JpZEFyZWE6IHRydWUsIGdyaWRSb3c6IHRydWUsIGdyaWRSb3dFbmQ6IHRydWUsIGdyaWRSb3dTcGFuOiB0cnVlLCBncmlkUm93U3RhcnQ6IHRydWUsIGdyaWRDb2x1bW46IHRydWUsIGdyaWRDb2x1bW5FbmQ6IHRydWUsIGdyaWRDb2x1bW5TcGFuOiB0cnVlLCBncmlkQ29sdW1uU3RhcnQ6IHRydWUsIGZvbnRXZWlnaHQ6IHRydWUsIGxpbmVDbGFtcDogdHJ1ZSwgbGluZUhlaWdodDogdHJ1ZSwgb3BhY2l0eTogdHJ1ZSwgb3JkZXI6IHRydWUsIG9ycGhhbnM6IHRydWUsIHRhYlNpemU6IHRydWUsIHdpZG93czogdHJ1ZSwgekluZGV4OiB0cnVlLCB6b29tOiB0cnVlLCBmaWxsT3BhY2l0eTogdHJ1ZSwgZmxvb2RPcGFjaXR5OiB0cnVlLCBzdG9wT3BhY2l0eTogdHJ1ZSwgc3Ryb2tlRGFzaGFycmF5OiB0cnVlLCBzdHJva2VEYXNob2Zmc2V0OiB0cnVlLCBzdHJva2VNaXRlcmxpbWl0OiB0cnVlLCBzdHJva2VPcGFjaXR5OiB0cnVlLCBzdHJva2VXaWR0aDogdHJ1ZSB9LCBCczIgPSBbIldlYmtpdCIsICJtcyIsICJNb3oiLCAiTyJdOwogICAgT2JqZWN0LmtleXMoWm40KS5mb3JFYWNoKGZ1bmN0aW9uKGU1KSB7CiAgICAgIEJzMi5mb3JFYWNoKGZ1bmN0aW9uKG44KSB7CiAgICAgICAgbjggPSBuOCArIGU1LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZTUuc3Vic3RyaW5nKDEpLCBabjRbbjhdID0gWm40W2U1XTsKICAgICAgfSk7CiAgICB9KTsKICAgIGZ1bmN0aW9uIGV1KGU1LCBuOCwgdDQpIHsKICAgICAgcmV0dXJuIG44ID09IG51bGwgfHwgdHlwZW9mIG44ID09ICJib29sZWFuIiB8fCBuOCA9PT0gIiIgPyAiIiA6IHQ0IHx8IHR5cGVvZiBuOCAhPSAibnVtYmVyIiB8fCBuOCA9PT0gMCB8fCBabjQuaGFzT3duUHJvcGVydHkoZTUpICYmIFpuNFtlNV0gPyAoIiIgKyBuOCkudHJpbSgpIDogbjggKyAicHgiOwogICAgfQogICAgZnVuY3Rpb24gbnUoZTUsIG44KSB7CiAgICAgIGU1ID0gZTUuc3R5bGU7CiAgICAgIGZvciAodmFyIHQ0IGluIG44KQogICAgICAgIGlmIChuOC5oYXNPd25Qcm9wZXJ0eSh0NCkpIHsKICAgICAgICAgIHZhciByMyA9IHQ0LmluZGV4T2YoIi0tIikgPT09IDAsIGw3ID0gZXUodDQsIG44W3Q0XSwgcjMpOwogICAgICAgICAgdDQgPT09ICJmbG9hdCIgJiYgKHQ0ID0gImNzc0Zsb2F0IiksIHIzID8gZTUuc2V0UHJvcGVydHkodDQsIGw3KSA6IGU1W3Q0XSA9IGw3OwogICAgICAgIH0KICAgIH0KICAgIHZhciBIczIgPSBNMjUoeyBtZW51aXRlbTogdHJ1ZSB9LCB7IGFyZWE6IHRydWUsIGJhc2U6IHRydWUsIGJyOiB0cnVlLCBjb2w6IHRydWUsIGVtYmVkOiB0cnVlLCBocjogdHJ1ZSwgaW1nOiB0cnVlLCBpbnB1dDogdHJ1ZSwga2V5Z2VuOiB0cnVlLCBsaW5rOiB0cnVlLCBtZXRhOiB0cnVlLCBwYXJhbTogdHJ1ZSwgc291cmNlOiB0cnVlLCB0cmFjazogdHJ1ZSwgd2JyOiB0cnVlIH0pOwogICAgZnVuY3Rpb24gc2woZTUsIG44KSB7CiAgICAgIGlmIChuOCkgewogICAgICAgIGlmIChIczJbZTVdICYmIChuOC5jaGlsZHJlbiAhPSBudWxsIHx8IG44LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9IG51bGwpKQogICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDEzNywgZTUpKTsKICAgICAgICBpZiAobjguZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkgewogICAgICAgICAgaWYgKG44LmNoaWxkcmVuICE9IG51bGwpCiAgICAgICAgICAgIHRocm93IEVycm9yKHYxNSg2MCkpOwogICAgICAgICAgaWYgKCEodHlwZW9mIG44LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09ICJvYmplY3QiICYmICJfX2h0bWwiIGluIG44LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSkKICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDYxKSk7CiAgICAgICAgfQogICAgICAgIGlmIChuOC5zdHlsZSAhPSBudWxsICYmIHR5cGVvZiBuOC5zdHlsZSAhPSAib2JqZWN0IikKICAgICAgICAgIHRocm93IEVycm9yKHYxNSg2MikpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBhbChlNSwgbjgpIHsKICAgICAgaWYgKGU1LmluZGV4T2YoIi0iKSA9PT0gLTEpCiAgICAgICAgcmV0dXJuIHR5cGVvZiBuOC5pcyA9PSAic3RyaW5nIjsKICAgICAgc3dpdGNoIChlNSkgewogICAgICAgIGNhc2UgImFubm90YXRpb24teG1sIjoKICAgICAgICBjYXNlICJjb2xvci1wcm9maWxlIjoKICAgICAgICBjYXNlICJmb250LWZhY2UiOgogICAgICAgIGNhc2UgImZvbnQtZmFjZS1zcmMiOgogICAgICAgIGNhc2UgImZvbnQtZmFjZS11cmkiOgogICAgICAgIGNhc2UgImZvbnQtZmFjZS1mb3JtYXQiOgogICAgICAgIGNhc2UgImZvbnQtZmFjZS1uYW1lIjoKICAgICAgICBjYXNlICJtaXNzaW5nLWdseXBoIjoKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIFpsKGU1KSB7CiAgICAgIHJldHVybiBlNSA9IGU1LnRhcmdldCB8fCBlNS5zcmNFbGVtZW50IHx8IHdpbmRvdywgZTUuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQgJiYgKGU1ID0gZTUuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpLCBlNS5ub2RlVHlwZSA9PT0gMyA/IGU1LnBhcmVudE5vZGUgOiBlNTsKICAgIH0KICAgIHZhciBmbCA9IG51bGwsIG1uMyA9IG51bGwsIGhuNSA9IG51bGw7CiAgICBmdW5jdGlvbiBIaTIoZTUpIHsKICAgICAgaWYgKGU1ID0gRXQxMChlNSkpIHsKICAgICAgICBpZiAodHlwZW9mIGZsICE9ICJmdW5jdGlvbiIpCiAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMjgwKSk7CiAgICAgICAgdmFyIG44ID0gZTUuc3RhdGVOb2RlOwogICAgICAgIG44ICYmIChuOCA9IF9yMihuOCksIGZsKGU1LnN0YXRlTm9kZSwgZTUudHlwZSwgbjgpKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gdHUoZTUpIHsKICAgICAgbW4zID8gaG41ID8gaG41LnB1c2goZTUpIDogaG41ID0gW2U1XSA6IG1uMyA9IGU1OwogICAgfQogICAgZnVuY3Rpb24gcnUoKSB7CiAgICAgIGlmIChtbjMpIHsKICAgICAgICB2YXIgZTUgPSBtbjMsIG44ID0gaG41OwogICAgICAgIGlmIChobjUgPSBtbjMgPSBudWxsLCBIaTIoZTUpLCBuOCkKICAgICAgICAgIGZvciAoZTUgPSAwOyBlNSA8IG44Lmxlbmd0aDsgZTUrKykKICAgICAgICAgICAgSGkyKG44W2U1XSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIEpsKGU1LCBuOCkgewogICAgICByZXR1cm4gZTUobjgpOwogICAgfQogICAgZnVuY3Rpb24gbHUoZTUsIG44LCB0NCwgcjMsIGw3KSB7CiAgICAgIHJldHVybiBlNShuOCwgdDQsIHIzLCBsNyk7CiAgICB9CiAgICBmdW5jdGlvbiBxbCgpIHsKICAgIH0KICAgIHZhciBpdSA9IEpsLCBBZTE4ID0gZmFsc2UsIERyMyA9IGZhbHNlOwogICAgZnVuY3Rpb24gYmwoKSB7CiAgICAgIChtbjMgIT09IG51bGwgfHwgaG41ICE9PSBudWxsKSAmJiAocWwoKSwgcnUoKSk7CiAgICB9CiAgICBmdW5jdGlvbiBXczIoZTUsIG44LCB0NCkgewogICAgICBpZiAoRHIzKQogICAgICAgIHJldHVybiBlNShuOCwgdDQpOwogICAgICBEcjMgPSB0cnVlOwogICAgICB0cnkgewogICAgICAgIHJldHVybiBpdShlNSwgbjgsIHQ0KTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBEcjMgPSBmYWxzZSwgYmwoKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gc3QxMShlNSwgbjgpIHsKICAgICAgdmFyIHQ0ID0gZTUuc3RhdGVOb2RlOwogICAgICBpZiAodDQgPT09IG51bGwpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHZhciByMyA9IF9yMih0NCk7CiAgICAgIGlmIChyMyA9PT0gbnVsbCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdDQgPSByM1tuOF07CiAgICAgIGU6CiAgICAgICAgc3dpdGNoIChuOCkgewogICAgICAgICAgY2FzZSAib25DbGljayI6CiAgICAgICAgICBjYXNlICJvbkNsaWNrQ2FwdHVyZSI6CiAgICAgICAgICBjYXNlICJvbkRvdWJsZUNsaWNrIjoKICAgICAgICAgIGNhc2UgIm9uRG91YmxlQ2xpY2tDYXB0dXJlIjoKICAgICAgICAgIGNhc2UgIm9uTW91c2VEb3duIjoKICAgICAgICAgIGNhc2UgIm9uTW91c2VEb3duQ2FwdHVyZSI6CiAgICAgICAgICBjYXNlICJvbk1vdXNlTW92ZSI6CiAgICAgICAgICBjYXNlICJvbk1vdXNlTW92ZUNhcHR1cmUiOgogICAgICAgICAgY2FzZSAib25Nb3VzZVVwIjoKICAgICAgICAgIGNhc2UgIm9uTW91c2VVcENhcHR1cmUiOgogICAgICAgICAgY2FzZSAib25Nb3VzZUVudGVyIjoKICAgICAgICAgICAgKHIzID0gIXIzLmRpc2FibGVkKSB8fCAoZTUgPSBlNS50eXBlLCByMyA9ICEoZTUgPT09ICJidXR0b24iIHx8IGU1ID09PSAiaW5wdXQiIHx8IGU1ID09PSAic2VsZWN0IiB8fCBlNSA9PT0gInRleHRhcmVhIikpLCBlNSA9ICFyMzsKICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGU1ID0gZmFsc2U7CiAgICAgICAgfQogICAgICBpZiAoZTUpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGlmICh0NCAmJiB0eXBlb2YgdDQgIT0gImZ1bmN0aW9uIikKICAgICAgICB0aHJvdyBFcnJvcih2MTUoMjMxLCBuOCwgdHlwZW9mIHQ0KSk7CiAgICAgIHJldHVybiB0NDsKICAgIH0KICAgIHZhciBjbCA9IGZhbHNlOwogICAgaWYgKHdlMTIpCiAgICAgIHRyeSB7CiAgICAgICAgbm42ID0ge30sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShubjYsICJwYXNzaXZlIiwgeyBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY2wgPSB0cnVlOwogICAgICAgIH0gfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0Iiwgbm42LCBubjYpLCB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsIG5uNiwgbm42KTsKICAgICAgfSBjYXRjaCB7CiAgICAgICAgY2wgPSBmYWxzZTsKICAgICAgfQogICAgdmFyIG5uNjsKICAgIGZ1bmN0aW9uIEFzMihlNSwgbjgsIHQ0LCByMywgbDcsIGk0LCBvNCwgdTExLCBzOCkgewogICAgICB2YXIgZDE1ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTsKICAgICAgdHJ5IHsKICAgICAgICBuOC5hcHBseSh0NCwgZDE1KTsKICAgICAgfSBjYXRjaCAoeTE3KSB7CiAgICAgICAgdGhpcy5vbkVycm9yKHkxNyk7CiAgICAgIH0KICAgIH0KICAgIHZhciBKbjQgPSBmYWxzZSwgWnQ2ID0gbnVsbCwgSnQ1ID0gZmFsc2UsIGRsID0gbnVsbCwgUXMyID0geyBvbkVycm9yOiBmdW5jdGlvbihlNSkgewogICAgICBKbjQgPSB0cnVlLCBadDYgPSBlNTsKICAgIH0gfTsKICAgIGZ1bmN0aW9uICRzMihlNSwgbjgsIHQ0LCByMywgbDcsIGk0LCBvNCwgdTExLCBzOCkgewogICAgICBKbjQgPSBmYWxzZSwgWnQ2ID0gbnVsbCwgQXMyLmFwcGx5KFFzMiwgYXJndW1lbnRzKTsKICAgIH0KICAgIGZ1bmN0aW9uIFlzMihlNSwgbjgsIHQ0LCByMywgbDcsIGk0LCBvNCwgdTExLCBzOCkgewogICAgICBpZiAoJHMyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIEpuNCkgewogICAgICAgIGlmIChKbjQpIHsKICAgICAgICAgIHZhciBkMTUgPSBadDY7CiAgICAgICAgICBKbjQgPSBmYWxzZSwgWnQ2ID0gbnVsbDsKICAgICAgICB9IGVsc2UKICAgICAgICAgIHRocm93IEVycm9yKHYxNSgxOTgpKTsKICAgICAgICBKdDUgfHwgKEp0NSA9IHRydWUsIGRsID0gZDE1KTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gYmUxNChlNSkgewogICAgICB2YXIgbjggPSBlNSwgdDQgPSBlNTsKICAgICAgaWYgKGU1LmFsdGVybmF0ZSkKICAgICAgICBmb3IgKDsgbjgucmV0dXJuOyApCiAgICAgICAgICBuOCA9IG44LnJldHVybjsKICAgICAgZWxzZSB7CiAgICAgICAgZTUgPSBuODsKICAgICAgICBkbwogICAgICAgICAgbjggPSBlNSwgKG44LmZsYWdzICYgMTAyNikgIT09IDAgJiYgKHQ0ID0gbjgucmV0dXJuKSwgZTUgPSBuOC5yZXR1cm47CiAgICAgICAgd2hpbGUgKGU1KTsKICAgICAgfQogICAgICByZXR1cm4gbjgudGFnID09PSAzID8gdDQgOiBudWxsOwogICAgfQogICAgZnVuY3Rpb24gb3UoZTUpIHsKICAgICAgaWYgKGU1LnRhZyA9PT0gMTMpIHsKICAgICAgICB2YXIgbjggPSBlNS5tZW1vaXplZFN0YXRlOwogICAgICAgIGlmIChuOCA9PT0gbnVsbCAmJiAoZTUgPSBlNS5hbHRlcm5hdGUsIGU1ICE9PSBudWxsICYmIChuOCA9IGU1Lm1lbW9pemVkU3RhdGUpKSwgbjggIT09IG51bGwpCiAgICAgICAgICByZXR1cm4gbjguZGVoeWRyYXRlZDsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIFdpMihlNSkgewogICAgICBpZiAoYmUxNChlNSkgIT09IGU1KQogICAgICAgIHRocm93IEVycm9yKHYxNSgxODgpKTsKICAgIH0KICAgIGZ1bmN0aW9uIFhzMihlNSkgewogICAgICB2YXIgbjggPSBlNS5hbHRlcm5hdGU7CiAgICAgIGlmICghbjgpIHsKICAgICAgICBpZiAobjggPSBiZTE0KGU1KSwgbjggPT09IG51bGwpCiAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMTg4KSk7CiAgICAgICAgcmV0dXJuIG44ICE9PSBlNSA/IG51bGwgOiBlNTsKICAgICAgfQogICAgICBmb3IgKHZhciB0NCA9IGU1LCByMyA9IG44OyA7ICkgewogICAgICAgIHZhciBsNyA9IHQ0LnJldHVybjsKICAgICAgICBpZiAobDcgPT09IG51bGwpCiAgICAgICAgICBicmVhazsKICAgICAgICB2YXIgaTQgPSBsNy5hbHRlcm5hdGU7CiAgICAgICAgaWYgKGk0ID09PSBudWxsKSB7CiAgICAgICAgICBpZiAocjMgPSBsNy5yZXR1cm4sIHIzICE9PSBudWxsKSB7CiAgICAgICAgICAgIHQ0ID0gcjM7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChsNy5jaGlsZCA9PT0gaTQuY2hpbGQpIHsKICAgICAgICAgIGZvciAoaTQgPSBsNy5jaGlsZDsgaTQ7ICkgewogICAgICAgICAgICBpZiAoaTQgPT09IHQ0KQogICAgICAgICAgICAgIHJldHVybiBXaTIobDcpLCBlNTsKICAgICAgICAgICAgaWYgKGk0ID09PSByMykKICAgICAgICAgICAgICByZXR1cm4gV2kyKGw3KSwgbjg7CiAgICAgICAgICAgIGk0ID0gaTQuc2libGluZzsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IEVycm9yKHYxNSgxODgpKTsKICAgICAgICB9CiAgICAgICAgaWYgKHQ0LnJldHVybiAhPT0gcjMucmV0dXJuKQogICAgICAgICAgdDQgPSBsNywgcjMgPSBpNDsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAodmFyIG80ID0gZmFsc2UsIHUxMSA9IGw3LmNoaWxkOyB1MTE7ICkgewogICAgICAgICAgICBpZiAodTExID09PSB0NCkgewogICAgICAgICAgICAgIG80ID0gdHJ1ZSwgdDQgPSBsNywgcjMgPSBpNDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodTExID09PSByMykgewogICAgICAgICAgICAgIG80ID0gdHJ1ZSwgcjMgPSBsNywgdDQgPSBpNDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICB1MTEgPSB1MTEuc2libGluZzsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghbzQpIHsKICAgICAgICAgICAgZm9yICh1MTEgPSBpNC5jaGlsZDsgdTExOyApIHsKICAgICAgICAgICAgICBpZiAodTExID09PSB0NCkgewogICAgICAgICAgICAgICAgbzQgPSB0cnVlLCB0NCA9IGk0LCByMyA9IGw3OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh1MTEgPT09IHIzKSB7CiAgICAgICAgICAgICAgICBvNCA9IHRydWUsIHIzID0gaTQsIHQ0ID0gbDc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdTExID0gdTExLnNpYmxpbmc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFvNCkKICAgICAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMTg5KSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0NC5hbHRlcm5hdGUgIT09IHIzKQogICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDE5MCkpOwogICAgICB9CiAgICAgIGlmICh0NC50YWcgIT09IDMpCiAgICAgICAgdGhyb3cgRXJyb3IodjE1KDE4OCkpOwogICAgICByZXR1cm4gdDQuc3RhdGVOb2RlLmN1cnJlbnQgPT09IHQ0ID8gZTUgOiBuODsKICAgIH0KICAgIGZ1bmN0aW9uIHV1KGU1KSB7CiAgICAgIGlmIChlNSA9IFhzMihlNSksICFlNSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgZm9yICh2YXIgbjggPSBlNTsgOyApIHsKICAgICAgICBpZiAobjgudGFnID09PSA1IHx8IG44LnRhZyA9PT0gNikKICAgICAgICAgIHJldHVybiBuODsKICAgICAgICBpZiAobjguY2hpbGQpCiAgICAgICAgICBuOC5jaGlsZC5yZXR1cm4gPSBuOCwgbjggPSBuOC5jaGlsZDsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmIChuOCA9PT0gZTUpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZm9yICg7ICFuOC5zaWJsaW5nOyApIHsKICAgICAgICAgICAgaWYgKCFuOC5yZXR1cm4gfHwgbjgucmV0dXJuID09PSBlNSkKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgbjggPSBuOC5yZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBuOC5zaWJsaW5nLnJldHVybiA9IG44LnJldHVybiwgbjggPSBuOC5zaWJsaW5nOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIEFpMyhlNSwgbjgpIHsKICAgICAgZm9yICh2YXIgdDQgPSBlNS5hbHRlcm5hdGU7IG44ICE9PSBudWxsOyApIHsKICAgICAgICBpZiAobjggPT09IGU1IHx8IG44ID09PSB0NCkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIG44ID0gbjgucmV0dXJuOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciBzdSwgZWkzLCBhdSwgZnUsIHBsID0gZmFsc2UsIHNlMTkgPSBbXSwgTmUxMSA9IG51bGwsIFBlMTUgPSBudWxsLCBUZTE2ID0gbnVsbCwgYXQ5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgZnQ4ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgTW40ID0gW10sIFFpMiA9ICJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQgc3VibWl0Ii5zcGxpdCgiICIpOwogICAgZnVuY3Rpb24gbWwoZTUsIG44LCB0NCwgcjMsIGw3KSB7CiAgICAgIHJldHVybiB7IGJsb2NrZWRPbjogZTUsIGRvbUV2ZW50TmFtZTogbjgsIGV2ZW50U3lzdGVtRmxhZ3M6IHQ0IHwgMTYsIG5hdGl2ZUV2ZW50OiBsNywgdGFyZ2V0Q29udGFpbmVyczogW3IzXSB9OwogICAgfQogICAgZnVuY3Rpb24gJGkyKGU1LCBuOCkgewogICAgICBzd2l0Y2ggKGU1KSB7CiAgICAgICAgY2FzZSAiZm9jdXNpbiI6CiAgICAgICAgY2FzZSAiZm9jdXNvdXQiOgogICAgICAgICAgTmUxMSA9IG51bGw7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJkcmFnZW50ZXIiOgogICAgICAgIGNhc2UgImRyYWdsZWF2ZSI6CiAgICAgICAgICBQZTE1ID0gbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm1vdXNlb3ZlciI6CiAgICAgICAgY2FzZSAibW91c2VvdXQiOgogICAgICAgICAgVGUxNiA9IG51bGw7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJwb2ludGVyb3ZlciI6CiAgICAgICAgY2FzZSAicG9pbnRlcm91dCI6CiAgICAgICAgICBhdDkuZGVsZXRlKG44LnBvaW50ZXJJZCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJnb3Rwb2ludGVyY2FwdHVyZSI6CiAgICAgICAgY2FzZSAibG9zdHBvaW50ZXJjYXB0dXJlIjoKICAgICAgICAgIGZ0OC5kZWxldGUobjgucG9pbnRlcklkKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gUm40KGU1LCBuOCwgdDQsIHIzLCBsNywgaTQpIHsKICAgICAgcmV0dXJuIGU1ID09PSBudWxsIHx8IGU1Lm5hdGl2ZUV2ZW50ICE9PSBpNCA/IChlNSA9IG1sKG44LCB0NCwgcjMsIGw3LCBpNCksIG44ICE9PSBudWxsICYmIChuOCA9IEV0MTAobjgpLCBuOCAhPT0gbnVsbCAmJiBlaTMobjgpKSwgZTUpIDogKGU1LmV2ZW50U3lzdGVtRmxhZ3MgfD0gcjMsIG44ID0gZTUudGFyZ2V0Q29udGFpbmVycywgbDcgIT09IG51bGwgJiYgbjguaW5kZXhPZihsNykgPT09IC0xICYmIG44LnB1c2gobDcpLCBlNSk7CiAgICB9CiAgICBmdW5jdGlvbiBLczIoZTUsIG44LCB0NCwgcjMsIGw3KSB7CiAgICAgIHN3aXRjaCAobjgpIHsKICAgICAgICBjYXNlICJmb2N1c2luIjoKICAgICAgICAgIHJldHVybiBOZTExID0gUm40KE5lMTEsIGU1LCBuOCwgdDQsIHIzLCBsNyksIHRydWU7CiAgICAgICAgY2FzZSAiZHJhZ2VudGVyIjoKICAgICAgICAgIHJldHVybiBQZTE1ID0gUm40KFBlMTUsIGU1LCBuOCwgdDQsIHIzLCBsNyksIHRydWU7CiAgICAgICAgY2FzZSAibW91c2VvdmVyIjoKICAgICAgICAgIHJldHVybiBUZTE2ID0gUm40KFRlMTYsIGU1LCBuOCwgdDQsIHIzLCBsNyksIHRydWU7CiAgICAgICAgY2FzZSAicG9pbnRlcm92ZXIiOgogICAgICAgICAgdmFyIGk0ID0gbDcucG9pbnRlcklkOwogICAgICAgICAgcmV0dXJuIGF0OS5zZXQoaTQsIFJuNChhdDkuZ2V0KGk0KSB8fCBudWxsLCBlNSwgbjgsIHQ0LCByMywgbDcpKSwgdHJ1ZTsKICAgICAgICBjYXNlICJnb3Rwb2ludGVyY2FwdHVyZSI6CiAgICAgICAgICByZXR1cm4gaTQgPSBsNy5wb2ludGVySWQsIGZ0OC5zZXQoaTQsIFJuNChmdDguZ2V0KGk0KSB8fCBudWxsLCBlNSwgbjgsIHQ0LCByMywgbDcpKSwgdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBHczIoZTUpIHsKICAgICAgdmFyIG44ID0gUWU2KGU1LnRhcmdldCk7CiAgICAgIGlmIChuOCAhPT0gbnVsbCkgewogICAgICAgIHZhciB0NCA9IGJlMTQobjgpOwogICAgICAgIGlmICh0NCAhPT0gbnVsbCkgewogICAgICAgICAgaWYgKG44ID0gdDQudGFnLCBuOCA9PT0gMTMpIHsKICAgICAgICAgICAgaWYgKG44ID0gb3UodDQpLCBuOCAhPT0gbnVsbCkgewogICAgICAgICAgICAgIGU1LmJsb2NrZWRPbiA9IG44LCBmdShlNS5sYW5lUHJpb3JpdHksIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgVTI5LnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShlNS5wcmlvcml0eSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgIGF1KHQ0KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChuOCA9PT0gMyAmJiB0NC5zdGF0ZU5vZGUuaHlkcmF0ZSkgewogICAgICAgICAgICBlNS5ibG9ja2VkT24gPSB0NC50YWcgPT09IDMgPyB0NC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA6IG51bGw7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZTUuYmxvY2tlZE9uID0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIFV0MTAoZTUpIHsKICAgICAgaWYgKGU1LmJsb2NrZWRPbiAhPT0gbnVsbCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAodmFyIG44ID0gZTUudGFyZ2V0Q29udGFpbmVyczsgMCA8IG44Lmxlbmd0aDsgKSB7CiAgICAgICAgdmFyIHQ0ID0gbGkzKGU1LmRvbUV2ZW50TmFtZSwgZTUuZXZlbnRTeXN0ZW1GbGFncywgbjhbMF0sIGU1Lm5hdGl2ZUV2ZW50KTsKICAgICAgICBpZiAodDQgIT09IG51bGwpCiAgICAgICAgICByZXR1cm4gbjggPSBFdDEwKHQ0KSwgbjggIT09IG51bGwgJiYgZWkzKG44KSwgZTUuYmxvY2tlZE9uID0gdDQsIGZhbHNlOwogICAgICAgIG44LnNoaWZ0KCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBZaTIoZTUsIG44LCB0NCkgewogICAgICBVdDEwKGU1KSAmJiB0NC5kZWxldGUobjgpOwogICAgfQogICAgZnVuY3Rpb24gWnMyKCkgewogICAgICBmb3IgKHBsID0gZmFsc2U7IDAgPCBzZTE5Lmxlbmd0aDsgKSB7CiAgICAgICAgdmFyIGU1ID0gc2UxOVswXTsKICAgICAgICBpZiAoZTUuYmxvY2tlZE9uICE9PSBudWxsKSB7CiAgICAgICAgICBlNSA9IEV0MTAoZTUuYmxvY2tlZE9uKSwgZTUgIT09IG51bGwgJiYgc3UoZTUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIG44ID0gZTUudGFyZ2V0Q29udGFpbmVyczsgMCA8IG44Lmxlbmd0aDsgKSB7CiAgICAgICAgICB2YXIgdDQgPSBsaTMoZTUuZG9tRXZlbnROYW1lLCBlNS5ldmVudFN5c3RlbUZsYWdzLCBuOFswXSwgZTUubmF0aXZlRXZlbnQpOwogICAgICAgICAgaWYgKHQ0ICE9PSBudWxsKSB7CiAgICAgICAgICAgIGU1LmJsb2NrZWRPbiA9IHQ0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIG44LnNoaWZ0KCk7CiAgICAgICAgfQogICAgICAgIGU1LmJsb2NrZWRPbiA9PT0gbnVsbCAmJiBzZTE5LnNoaWZ0KCk7CiAgICAgIH0KICAgICAgTmUxMSAhPT0gbnVsbCAmJiBVdDEwKE5lMTEpICYmIChOZTExID0gbnVsbCksIFBlMTUgIT09IG51bGwgJiYgVXQxMChQZTE1KSAmJiAoUGUxNSA9IG51bGwpLCBUZTE2ICE9PSBudWxsICYmIFV0MTAoVGUxNikgJiYgKFRlMTYgPSBudWxsKSwgYXQ5LmZvckVhY2goWWkyKSwgZnQ4LmZvckVhY2goWWkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIERuNChlNSwgbjgpIHsKICAgICAgZTUuYmxvY2tlZE9uID09PSBuOCAmJiAoZTUuYmxvY2tlZE9uID0gbnVsbCwgcGwgfHwgKHBsID0gdHJ1ZSwgVTI5LnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soVTI5LnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LCBaczIpKSk7CiAgICB9CiAgICBmdW5jdGlvbiBjdShlNSkgewogICAgICBmdW5jdGlvbiBuOChsNykgewogICAgICAgIHJldHVybiBEbjQobDcsIGU1KTsKICAgICAgfQogICAgICBpZiAoMCA8IHNlMTkubGVuZ3RoKSB7CiAgICAgICAgRG40KHNlMTlbMF0sIGU1KTsKICAgICAgICBmb3IgKHZhciB0NCA9IDE7IHQ0IDwgc2UxOS5sZW5ndGg7IHQ0KyspIHsKICAgICAgICAgIHZhciByMyA9IHNlMTlbdDRdOwogICAgICAgICAgcjMuYmxvY2tlZE9uID09PSBlNSAmJiAocjMuYmxvY2tlZE9uID0gbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoTmUxMSAhPT0gbnVsbCAmJiBEbjQoTmUxMSwgZTUpLCBQZTE1ICE9PSBudWxsICYmIERuNChQZTE1LCBlNSksIFRlMTYgIT09IG51bGwgJiYgRG40KFRlMTYsIGU1KSwgYXQ5LmZvckVhY2gobjgpLCBmdDguZm9yRWFjaChuOCksIHQ0ID0gMDsgdDQgPCBNbjQubGVuZ3RoOyB0NCsrKQogICAgICAgIHIzID0gTW40W3Q0XSwgcjMuYmxvY2tlZE9uID09PSBlNSAmJiAocjMuYmxvY2tlZE9uID0gbnVsbCk7CiAgICAgIGZvciAoOyAwIDwgTW40Lmxlbmd0aCAmJiAodDQgPSBNbjRbMF0sIHQ0LmJsb2NrZWRPbiA9PT0gbnVsbCk7ICkKICAgICAgICBHczIodDQpLCB0NC5ibG9ja2VkT24gPT09IG51bGwgJiYgTW40LnNoaWZ0KCk7CiAgICB9CiAgICBmdW5jdGlvbiBUdDExKGU1LCBuOCkgewogICAgICB2YXIgdDQgPSB7fTsKICAgICAgcmV0dXJuIHQ0W2U1LnRvTG93ZXJDYXNlKCldID0gbjgudG9Mb3dlckNhc2UoKSwgdDRbIldlYmtpdCIgKyBlNV0gPSAid2Via2l0IiArIG44LCB0NFsiTW96IiArIGU1XSA9ICJtb3oiICsgbjgsIHQ0OwogICAgfQogICAgdmFyIG9uNiA9IHsgYW5pbWF0aW9uZW5kOiBUdDExKCJBbmltYXRpb24iLCAiQW5pbWF0aW9uRW5kIiksIGFuaW1hdGlvbml0ZXJhdGlvbjogVHQxMSgiQW5pbWF0aW9uIiwgIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLCBhbmltYXRpb25zdGFydDogVHQxMSgiQW5pbWF0aW9uIiwgIkFuaW1hdGlvblN0YXJ0IiksIHRyYW5zaXRpb25lbmQ6IFR0MTEoIlRyYW5zaXRpb24iLCAiVHJhbnNpdGlvbkVuZCIpIH0sIElyMyA9IHt9LCBkdSA9IHt9OwogICAgd2UxMiAmJiAoZHUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSwgIkFuaW1hdGlvbkV2ZW50IiBpbiB3aW5kb3cgfHwgKGRlbGV0ZSBvbjYuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbiwgZGVsZXRlIG9uNi5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLCBkZWxldGUgb242LmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksICJUcmFuc2l0aW9uRXZlbnQiIGluIHdpbmRvdyB8fCBkZWxldGUgb242LnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7CiAgICBmdW5jdGlvbiBTcjMoZTUpIHsKICAgICAgaWYgKElyM1tlNV0pCiAgICAgICAgcmV0dXJuIElyM1tlNV07CiAgICAgIGlmICghb242W2U1XSkKICAgICAgICByZXR1cm4gZTU7CiAgICAgIHZhciBuOCA9IG9uNltlNV0sIHQ0OwogICAgICBmb3IgKHQ0IGluIG44KQogICAgICAgIGlmIChuOC5oYXNPd25Qcm9wZXJ0eSh0NCkgJiYgdDQgaW4gZHUpCiAgICAgICAgICByZXR1cm4gSXIzW2U1XSA9IG44W3Q0XTsKICAgICAgcmV0dXJuIGU1OwogICAgfQogICAgdmFyIHB1ID0gU3IzKCJhbmltYXRpb25lbmQiKSwgbXUgPSBTcjMoImFuaW1hdGlvbml0ZXJhdGlvbiIpLCBodSA9IFNyMygiYW5pbWF0aW9uc3RhcnQiKSwgdnUgPSBTcjMoInRyYW5zaXRpb25lbmQiKSwgeXUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBuaTMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBKczIgPSBbImFib3J0IiwgImFib3J0IiwgcHUsICJhbmltYXRpb25FbmQiLCBtdSwgImFuaW1hdGlvbkl0ZXJhdGlvbiIsIGh1LCAiYW5pbWF0aW9uU3RhcnQiLCAiY2FucGxheSIsICJjYW5QbGF5IiwgImNhbnBsYXl0aHJvdWdoIiwgImNhblBsYXlUaHJvdWdoIiwgImR1cmF0aW9uY2hhbmdlIiwgImR1cmF0aW9uQ2hhbmdlIiwgImVtcHRpZWQiLCAiZW1wdGllZCIsICJlbmNyeXB0ZWQiLCAiZW5jcnlwdGVkIiwgImVuZGVkIiwgImVuZGVkIiwgImVycm9yIiwgImVycm9yIiwgImdvdHBvaW50ZXJjYXB0dXJlIiwgImdvdFBvaW50ZXJDYXB0dXJlIiwgImxvYWQiLCAibG9hZCIsICJsb2FkZWRkYXRhIiwgImxvYWRlZERhdGEiLCAibG9hZGVkbWV0YWRhdGEiLCAibG9hZGVkTWV0YWRhdGEiLCAibG9hZHN0YXJ0IiwgImxvYWRTdGFydCIsICJsb3N0cG9pbnRlcmNhcHR1cmUiLCAibG9zdFBvaW50ZXJDYXB0dXJlIiwgInBsYXlpbmciLCAicGxheWluZyIsICJwcm9ncmVzcyIsICJwcm9ncmVzcyIsICJzZWVraW5nIiwgInNlZWtpbmciLCAic3RhbGxlZCIsICJzdGFsbGVkIiwgInN1c3BlbmQiLCAic3VzcGVuZCIsICJ0aW1ldXBkYXRlIiwgInRpbWVVcGRhdGUiLCB2dSwgInRyYW5zaXRpb25FbmQiLCAid2FpdGluZyIsICJ3YWl0aW5nIl07CiAgICBmdW5jdGlvbiB0aTMoZTUsIG44KSB7CiAgICAgIGZvciAodmFyIHQ0ID0gMDsgdDQgPCBlNS5sZW5ndGg7IHQ0ICs9IDIpIHsKICAgICAgICB2YXIgcjMgPSBlNVt0NF0sIGw3ID0gZTVbdDQgKyAxXTsKICAgICAgICBsNyA9ICJvbiIgKyAobDdbMF0udG9VcHBlckNhc2UoKSArIGw3LnNsaWNlKDEpKSwgbmkzLnNldChyMywgbjgpLCB5dS5zZXQocjMsIGw3KSwgSmU4KGw3LCBbcjNdKTsKICAgICAgfQogICAgfQogICAgdmFyIHFzMiA9IFUyOS51bnN0YWJsZV9ub3c7CiAgICBxczIoKTsKICAgIHZhciBMMjIgPSA4OwogICAgZnVuY3Rpb24gcm41KGU1KSB7CiAgICAgIGlmICgoMSAmIGU1KSAhPT0gMCkKICAgICAgICByZXR1cm4gTDIyID0gMTUsIDE7CiAgICAgIGlmICgoMiAmIGU1KSAhPT0gMCkKICAgICAgICByZXR1cm4gTDIyID0gMTQsIDI7CiAgICAgIGlmICgoNCAmIGU1KSAhPT0gMCkKICAgICAgICByZXR1cm4gTDIyID0gMTMsIDQ7CiAgICAgIHZhciBuOCA9IDI0ICYgZTU7CiAgICAgIHJldHVybiBuOCAhPT0gMCA/IChMMjIgPSAxMiwgbjgpIDogKGU1ICYgMzIpICE9PSAwID8gKEwyMiA9IDExLCAzMikgOiAobjggPSAxOTIgJiBlNSwgbjggIT09IDAgPyAoTDIyID0gMTAsIG44KSA6IChlNSAmIDI1NikgIT09IDAgPyAoTDIyID0gOSwgMjU2KSA6IChuOCA9IDM1ODQgJiBlNSwgbjggIT09IDAgPyAoTDIyID0gOCwgbjgpIDogKGU1ICYgNDA5NikgIT09IDAgPyAoTDIyID0gNywgNDA5NikgOiAobjggPSA0MTg2MTEyICYgZTUsIG44ICE9PSAwID8gKEwyMiA9IDYsIG44KSA6IChuOCA9IDYyOTE0NTYwICYgZTUsIG44ICE9PSAwID8gKEwyMiA9IDUsIG44KSA6IGU1ICYgNjcxMDg4NjQgPyAoTDIyID0gNCwgNjcxMDg4NjQpIDogKGU1ICYgMTM0MjE3NzI4KSAhPT0gMCA/IChMMjIgPSAzLCAxMzQyMTc3MjgpIDogKG44ID0gODA1MzA2MzY4ICYgZTUsIG44ICE9PSAwID8gKEwyMiA9IDIsIG44KSA6ICgxMDczNzQxODI0ICYgZTUpICE9PSAwID8gKEwyMiA9IDEsIDEwNzM3NDE4MjQpIDogKEwyMiA9IDgsIGU1KSkpKSkpOwogICAgfQogICAgZnVuY3Rpb24gYnMyKGU1KSB7CiAgICAgIHN3aXRjaCAoZTUpIHsKICAgICAgICBjYXNlIDk5OgogICAgICAgICAgcmV0dXJuIDE1OwogICAgICAgIGNhc2UgOTg6CiAgICAgICAgICByZXR1cm4gMTA7CiAgICAgICAgY2FzZSA5NzoKICAgICAgICBjYXNlIDk2OgogICAgICAgICAgcmV0dXJuIDg7CiAgICAgICAgY2FzZSA5NToKICAgICAgICAgIHJldHVybiAyOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gZWEyKGU1KSB7CiAgICAgIHN3aXRjaCAoZTUpIHsKICAgICAgICBjYXNlIDE1OgogICAgICAgIGNhc2UgMTQ6CiAgICAgICAgICByZXR1cm4gOTk7CiAgICAgICAgY2FzZSAxMzoKICAgICAgICBjYXNlIDEyOgogICAgICAgIGNhc2UgMTE6CiAgICAgICAgY2FzZSAxMDoKICAgICAgICAgIHJldHVybiA5ODsKICAgICAgICBjYXNlIDk6CiAgICAgICAgY2FzZSA4OgogICAgICAgIGNhc2UgNzoKICAgICAgICBjYXNlIDY6CiAgICAgICAgY2FzZSA0OgogICAgICAgIGNhc2UgNToKICAgICAgICAgIHJldHVybiA5NzsKICAgICAgICBjYXNlIDM6CiAgICAgICAgY2FzZSAyOgogICAgICAgIGNhc2UgMToKICAgICAgICAgIHJldHVybiA5NTsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICByZXR1cm4gOTA7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IEVycm9yKHYxNSgzNTgsIGU1KSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGN0MTIoZTUsIG44KSB7CiAgICAgIHZhciB0NCA9IGU1LnBlbmRpbmdMYW5lczsKICAgICAgaWYgKHQ0ID09PSAwKQogICAgICAgIHJldHVybiBMMjIgPSAwOwogICAgICB2YXIgcjMgPSAwLCBsNyA9IDAsIGk0ID0gZTUuZXhwaXJlZExhbmVzLCBvNCA9IGU1LnN1c3BlbmRlZExhbmVzLCB1MTEgPSBlNS5waW5nZWRMYW5lczsKICAgICAgaWYgKGk0ICE9PSAwKQogICAgICAgIHIzID0gaTQsIGw3ID0gTDIyID0gMTU7CiAgICAgIGVsc2UgaWYgKGk0ID0gdDQgJiAxMzQyMTc3MjcsIGk0ICE9PSAwKSB7CiAgICAgICAgdmFyIHM4ID0gaTQgJiB+bzQ7CiAgICAgICAgczggIT09IDAgPyAocjMgPSBybjUoczgpLCBsNyA9IEwyMikgOiAodTExICY9IGk0LCB1MTEgIT09IDAgJiYgKHIzID0gcm41KHUxMSksIGw3ID0gTDIyKSk7CiAgICAgIH0gZWxzZQogICAgICAgIGk0ID0gdDQgJiB+bzQsIGk0ICE9PSAwID8gKHIzID0gcm41KGk0KSwgbDcgPSBMMjIpIDogdTExICE9PSAwICYmIChyMyA9IHJuNSh1MTEpLCBsNyA9IEwyMik7CiAgICAgIGlmIChyMyA9PT0gMCkKICAgICAgICByZXR1cm4gMDsKICAgICAgaWYgKHIzID0gMzEgLSBJZTEwKHIzKSwgcjMgPSB0NCAmICgoMCA+IHIzID8gMCA6IDEgPDwgcjMpIDw8IDEpIC0gMSwgbjggIT09IDAgJiYgbjggIT09IHIzICYmIChuOCAmIG80KSA9PT0gMCkgewogICAgICAgIGlmIChybjUobjgpLCBsNyA8PSBMMjIpCiAgICAgICAgICByZXR1cm4gbjg7CiAgICAgICAgTDIyID0gbDc7CiAgICAgIH0KICAgICAgaWYgKG44ID0gZTUuZW50YW5nbGVkTGFuZXMsIG44ICE9PSAwKQogICAgICAgIGZvciAoZTUgPSBlNS5lbnRhbmdsZW1lbnRzLCBuOCAmPSByMzsgMCA8IG44OyApCiAgICAgICAgICB0NCA9IDMxIC0gSWUxMChuOCksIGw3ID0gMSA8PCB0NCwgcjMgfD0gZTVbdDRdLCBuOCAmPSB+bDc7CiAgICAgIHJldHVybiByMzsKICAgIH0KICAgIGZ1bmN0aW9uIGd1KGU1KSB7CiAgICAgIHJldHVybiBlNSA9IGU1LnBlbmRpbmdMYW5lcyAmIC0xMDczNzQxODI1LCBlNSAhPT0gMCA/IGU1IDogZTUgJiAxMDczNzQxODI0ID8gMTA3Mzc0MTgyNCA6IDA7CiAgICB9CiAgICBmdW5jdGlvbiBxdDYoZTUsIG44KSB7CiAgICAgIHN3aXRjaCAoZTUpIHsKICAgICAgICBjYXNlIDE1OgogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgY2FzZSAxNDoKICAgICAgICAgIHJldHVybiAyOwogICAgICAgIGNhc2UgMTI6CiAgICAgICAgICByZXR1cm4gZTUgPSBsbjMoMjQgJiB+bjgpLCBlNSA9PT0gMCA/IHF0NigxMCwgbjgpIDogZTU7CiAgICAgICAgY2FzZSAxMDoKICAgICAgICAgIHJldHVybiBlNSA9IGxuMygxOTIgJiB+bjgpLCBlNSA9PT0gMCA/IHF0Nig4LCBuOCkgOiBlNTsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gZTUgPSBsbjMoMzU4NCAmIH5uOCksIGU1ID09PSAwICYmIChlNSA9IGxuMyg0MTg2MTEyICYgfm44KSwgZTUgPT09IDAgJiYgKGU1ID0gNTEyKSksIGU1OwogICAgICAgIGNhc2UgMjoKICAgICAgICAgIHJldHVybiBuOCA9IGxuMyg4MDUzMDYzNjggJiB+bjgpLCBuOCA9PT0gMCAmJiAobjggPSAyNjg0MzU0NTYpLCBuODsKICAgICAgfQogICAgICB0aHJvdyBFcnJvcih2MTUoMzU4LCBlNSkpOwogICAgfQogICAgZnVuY3Rpb24gbG4zKGU1KSB7CiAgICAgIHJldHVybiBlNSAmIC1lNTsKICAgIH0KICAgIGZ1bmN0aW9uIEZyMyhlNSkgewogICAgICBmb3IgKHZhciBuOCA9IFtdLCB0NCA9IDA7IDMxID4gdDQ7IHQ0KyspCiAgICAgICAgbjgucHVzaChlNSk7CiAgICAgIHJldHVybiBuODsKICAgIH0KICAgIGZ1bmN0aW9uIEVyMyhlNSwgbjgsIHQ0KSB7CiAgICAgIGU1LnBlbmRpbmdMYW5lcyB8PSBuODsKICAgICAgdmFyIHIzID0gbjggLSAxOwogICAgICBlNS5zdXNwZW5kZWRMYW5lcyAmPSByMywgZTUucGluZ2VkTGFuZXMgJj0gcjMsIGU1ID0gZTUuZXZlbnRUaW1lcywgbjggPSAzMSAtIEllMTAobjgpLCBlNVtuOF0gPSB0NDsKICAgIH0KICAgIHZhciBJZTEwID0gTWF0aC5jbHozMiA/IE1hdGguY2x6MzIgOiByYTIsIG5hMiA9IE1hdGgubG9nLCB0YSA9IE1hdGguTE4yOwogICAgZnVuY3Rpb24gcmEyKGU1KSB7CiAgICAgIHJldHVybiBlNSA9PT0gMCA/IDMyIDogMzEgLSAobmEyKGU1KSAvIHRhIHwgMCkgfCAwOwogICAgfQogICAgdmFyIGxhMiA9IFUyOS51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSwgaWEyID0gVTI5LnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSwgVnQxMiA9IHRydWU7CiAgICBmdW5jdGlvbiBvYTIoZTUsIG44LCB0NCwgcjMpIHsKICAgICAgQWUxOCB8fCBxbCgpOwogICAgICB2YXIgbDcgPSByaTMsIGk0ID0gQWUxODsKICAgICAgQWUxOCA9IHRydWU7CiAgICAgIHRyeSB7CiAgICAgICAgbHUobDcsIGU1LCBuOCwgdDQsIHIzKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAoQWUxOCA9IGk0KSB8fCBibCgpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiB1YTIoZTUsIG44LCB0NCwgcjMpIHsKICAgICAgaWEyKGxhMiwgcmkzLmJpbmQobnVsbCwgZTUsIG44LCB0NCwgcjMpKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJpMyhlNSwgbjgsIHQ0LCByMykgewogICAgICBpZiAoVnQxMikgewogICAgICAgIHZhciBsNzsKICAgICAgICBpZiAoKGw3ID0gKG44ICYgNCkgPT09IDApICYmIDAgPCBzZTE5Lmxlbmd0aCAmJiAtMSA8IFFpMi5pbmRleE9mKGU1KSkKICAgICAgICAgIGU1ID0gbWwobnVsbCwgZTUsIG44LCB0NCwgcjMpLCBzZTE5LnB1c2goZTUpOwogICAgICAgIGVsc2UgewogICAgICAgICAgdmFyIGk0ID0gbGkzKGU1LCBuOCwgdDQsIHIzKTsKICAgICAgICAgIGlmIChpNCA9PT0gbnVsbCkKICAgICAgICAgICAgbDcgJiYgJGkyKGU1LCByMyk7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKGw3KSB7CiAgICAgICAgICAgICAgaWYgKC0xIDwgUWkyLmluZGV4T2YoZTUpKSB7CiAgICAgICAgICAgICAgICBlNSA9IG1sKGk0LCBlNSwgbjgsIHQ0LCByMyksIHNlMTkucHVzaChlNSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChLczIoaTQsIGU1LCBuOCwgdDQsIHIzKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAkaTIoZTUsIHIzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBPdShlNSwgbjgsIHIzLCBudWxsLCB0NCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBsaTMoZTUsIG44LCB0NCwgcjMpIHsKICAgICAgdmFyIGw3ID0gWmwocjMpOwogICAgICBpZiAobDcgPSBRZTYobDcpLCBsNyAhPT0gbnVsbCkgewogICAgICAgIHZhciBpNCA9IGJlMTQobDcpOwogICAgICAgIGlmIChpNCA9PT0gbnVsbCkKICAgICAgICAgIGw3ID0gbnVsbDsKICAgICAgICBlbHNlIHsKICAgICAgICAgIHZhciBvNCA9IGk0LnRhZzsKICAgICAgICAgIGlmIChvNCA9PT0gMTMpIHsKICAgICAgICAgICAgaWYgKGw3ID0gb3UoaTQpLCBsNyAhPT0gbnVsbCkKICAgICAgICAgICAgICByZXR1cm4gbDc7CiAgICAgICAgICAgIGw3ID0gbnVsbDsKICAgICAgICAgIH0gZWxzZSBpZiAobzQgPT09IDMpIHsKICAgICAgICAgICAgaWYgKGk0LnN0YXRlTm9kZS5oeWRyYXRlKQogICAgICAgICAgICAgIHJldHVybiBpNC50YWcgPT09IDMgPyBpNC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA6IG51bGw7CiAgICAgICAgICAgIGw3ID0gbnVsbDsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICBpNCAhPT0gbDcgJiYgKGw3ID0gbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBPdShlNSwgbjgsIHIzLCBsNywgdDQpLCBudWxsOwogICAgfQogICAgdmFyIHhlMTUgPSBudWxsLCBpaTMgPSBudWxsLCBCdDkgPSBudWxsOwogICAgZnVuY3Rpb24gd3UoKSB7CiAgICAgIGlmIChCdDkpCiAgICAgICAgcmV0dXJuIEJ0OTsKICAgICAgdmFyIGU1LCBuOCA9IGlpMywgdDQgPSBuOC5sZW5ndGgsIHIzLCBsNyA9ICJ2YWx1ZSIgaW4geGUxNSA/IHhlMTUudmFsdWUgOiB4ZTE1LnRleHRDb250ZW50LCBpNCA9IGw3Lmxlbmd0aDsKICAgICAgZm9yIChlNSA9IDA7IGU1IDwgdDQgJiYgbjhbZTVdID09PSBsN1tlNV07IGU1KyspCiAgICAgICAgOwogICAgICB2YXIgbzQgPSB0NCAtIGU1OwogICAgICBmb3IgKHIzID0gMTsgcjMgPD0gbzQgJiYgbjhbdDQgLSByM10gPT09IGw3W2k0IC0gcjNdOyByMysrKQogICAgICAgIDsKICAgICAgcmV0dXJuIEJ0OSA9IGw3LnNsaWNlKGU1LCAxIDwgcjMgPyAxIC0gcjMgOiB2b2lkIDApOwogICAgfQogICAgZnVuY3Rpb24gSHQxMChlNSkgewogICAgICB2YXIgbjggPSBlNS5rZXlDb2RlOwogICAgICByZXR1cm4gImNoYXJDb2RlIiBpbiBlNSA/IChlNSA9IGU1LmNoYXJDb2RlLCBlNSA9PT0gMCAmJiBuOCA9PT0gMTMgJiYgKGU1ID0gMTMpKSA6IGU1ID0gbjgsIGU1ID09PSAxMCAmJiAoZTUgPSAxMyksIDMyIDw9IGU1IHx8IGU1ID09PSAxMyA/IGU1IDogMDsKICAgIH0KICAgIGZ1bmN0aW9uIEx0MTIoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gWGkyKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBiMjUoZTUpIHsKICAgICAgZnVuY3Rpb24gbjgodDQsIHIzLCBsNywgaTQsIG80KSB7CiAgICAgICAgdGhpcy5fcmVhY3ROYW1lID0gdDQsIHRoaXMuX3RhcmdldEluc3QgPSBsNywgdGhpcy50eXBlID0gcjMsIHRoaXMubmF0aXZlRXZlbnQgPSBpNCwgdGhpcy50YXJnZXQgPSBvNCwgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDsKICAgICAgICBmb3IgKHZhciB1MTEgaW4gZTUpCiAgICAgICAgICBlNS5oYXNPd25Qcm9wZXJ0eSh1MTEpICYmICh0NCA9IGU1W3UxMV0sIHRoaXNbdTExXSA9IHQ0ID8gdDQoaTQpIDogaTRbdTExXSk7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKGk0LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IGk0LmRlZmF1bHRQcmV2ZW50ZWQgOiBpNC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UpID8gTHQxMiA6IFhpMiwgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IFhpMiwgdGhpczsKICAgICAgfQogICAgICByZXR1cm4gTTI1KG44LnByb3RvdHlwZSwgeyBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsKICAgICAgICB2YXIgdDQgPSB0aGlzLm5hdGl2ZUV2ZW50OwogICAgICAgIHQ0ICYmICh0NC5wcmV2ZW50RGVmYXVsdCA/IHQ0LnByZXZlbnREZWZhdWx0KCkgOiB0eXBlb2YgdDQucmV0dXJuVmFsdWUgIT0gInVua25vd24iICYmICh0NC5yZXR1cm5WYWx1ZSA9IGZhbHNlKSwgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBMdDEyKTsKICAgICAgfSwgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdDQgPSB0aGlzLm5hdGl2ZUV2ZW50OwogICAgICAgIHQ0ICYmICh0NC5zdG9wUHJvcGFnYXRpb24gPyB0NC5zdG9wUHJvcGFnYXRpb24oKSA6IHR5cGVvZiB0NC5jYW5jZWxCdWJibGUgIT0gInVua25vd24iICYmICh0NC5jYW5jZWxCdWJibGUgPSB0cnVlKSwgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IEx0MTIpOwogICAgICB9LCBwZXJzaXN0OiBmdW5jdGlvbigpIHsKICAgICAgfSwgaXNQZXJzaXN0ZW50OiBMdDEyIH0pLCBuODsKICAgIH0KICAgIHZhciBObjQgPSB7IGV2ZW50UGhhc2U6IDAsIGJ1YmJsZXM6IDAsIGNhbmNlbGFibGU6IDAsIHRpbWVTdGFtcDogZnVuY3Rpb24oZTUpIHsKICAgICAgcmV0dXJuIGU1LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpOwogICAgfSwgZGVmYXVsdFByZXZlbnRlZDogMCwgaXNUcnVzdGVkOiAwIH0sIG9pMyA9IGIyNShObjQpLCBTdDEwID0gTTI1KHt9LCBObjQsIHsgdmlldzogMCwgZGV0YWlsOiAwIH0pLCBzYTIgPSBiMjUoU3QxMCksIGpyMiwgVXIzLCBJbjQsIGtyMyA9IE0yNSh7fSwgU3QxMCwgeyBzY3JlZW5YOiAwLCBzY3JlZW5ZOiAwLCBjbGllbnRYOiAwLCBjbGllbnRZOiAwLCBwYWdlWDogMCwgcGFnZVk6IDAsIGN0cmxLZXk6IDAsIHNoaWZ0S2V5OiAwLCBhbHRLZXk6IDAsIG1ldGFLZXk6IDAsIGdldE1vZGlmaWVyU3RhdGU6IHVpMywgYnV0dG9uOiAwLCBidXR0b25zOiAwLCByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gZTUucmVsYXRlZFRhcmdldCA9PT0gdm9pZCAwID8gZTUuZnJvbUVsZW1lbnQgPT09IGU1LnNyY0VsZW1lbnQgPyBlNS50b0VsZW1lbnQgOiBlNS5mcm9tRWxlbWVudCA6IGU1LnJlbGF0ZWRUYXJnZXQ7CiAgICB9LCBtb3ZlbWVudFg6IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHJldHVybiAibW92ZW1lbnRYIiBpbiBlNSA/IGU1Lm1vdmVtZW50WCA6IChlNSAhPT0gSW40ICYmIChJbjQgJiYgZTUudHlwZSA9PT0gIm1vdXNlbW92ZSIgPyAoanIyID0gZTUuc2NyZWVuWCAtIEluNC5zY3JlZW5YLCBVcjMgPSBlNS5zY3JlZW5ZIC0gSW40LnNjcmVlblkpIDogVXIzID0ganIyID0gMCwgSW40ID0gZTUpLCBqcjIpOwogICAgfSwgbW92ZW1lbnRZOiBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gIm1vdmVtZW50WSIgaW4gZTUgPyBlNS5tb3ZlbWVudFkgOiBVcjM7CiAgICB9IH0pLCBLaTMgPSBiMjUoa3IzKSwgYWEyID0gTTI1KHt9LCBrcjMsIHsgZGF0YVRyYW5zZmVyOiAwIH0pLCBmYTIgPSBiMjUoYWEyKSwgY2EyID0gTTI1KHt9LCBTdDEwLCB7IHJlbGF0ZWRUYXJnZXQ6IDAgfSksIFZyMiA9IGIyNShjYTIpLCBkYTIgPSBNMjUoe30sIE5uNCwgeyBhbmltYXRpb25OYW1lOiAwLCBlbGFwc2VkVGltZTogMCwgcHNldWRvRWxlbWVudDogMCB9KSwgcGEyID0gYjI1KGRhMiksIG1hMiA9IE0yNSh7fSwgTm40LCB7IGNsaXBib2FyZERhdGE6IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHJldHVybiAiY2xpcGJvYXJkRGF0YSIgaW4gZTUgPyBlNS5jbGlwYm9hcmREYXRhIDogd2luZG93LmNsaXBib2FyZERhdGE7CiAgICB9IH0pLCBoYTIgPSBiMjUobWEyKSwgdmEyID0gTTI1KHt9LCBObjQsIHsgZGF0YTogMCB9KSwgR2kyID0gYjI1KHZhMiksIHlhMiA9IHsgRXNjOiAiRXNjYXBlIiwgU3BhY2ViYXI6ICIgIiwgTGVmdDogIkFycm93TGVmdCIsIFVwOiAiQXJyb3dVcCIsIFJpZ2h0OiAiQXJyb3dSaWdodCIsIERvd246ICJBcnJvd0Rvd24iLCBEZWw6ICJEZWxldGUiLCBXaW46ICJPUyIsIE1lbnU6ICJDb250ZXh0TWVudSIsIEFwcHM6ICJDb250ZXh0TWVudSIsIFNjcm9sbDogIlNjcm9sbExvY2siLCBNb3pQcmludGFibGVLZXk6ICJVbmlkZW50aWZpZWQiIH0sIGdhMiA9IHsgODogIkJhY2tzcGFjZSIsIDk6ICJUYWIiLCAxMjogIkNsZWFyIiwgMTM6ICJFbnRlciIsIDE2OiAiU2hpZnQiLCAxNzogIkNvbnRyb2wiLCAxODogIkFsdCIsIDE5OiAiUGF1c2UiLCAyMDogIkNhcHNMb2NrIiwgMjc6ICJFc2NhcGUiLCAzMjogIiAiLCAzMzogIlBhZ2VVcCIsIDM0OiAiUGFnZURvd24iLCAzNTogIkVuZCIsIDM2OiAiSG9tZSIsIDM3OiAiQXJyb3dMZWZ0IiwgMzg6ICJBcnJvd1VwIiwgMzk6ICJBcnJvd1JpZ2h0IiwgNDA6ICJBcnJvd0Rvd24iLCA0NTogIkluc2VydCIsIDQ2OiAiRGVsZXRlIiwgMTEyOiAiRjEiLCAxMTM6ICJGMiIsIDExNDogIkYzIiwgMTE1OiAiRjQiLCAxMTY6ICJGNSIsIDExNzogIkY2IiwgMTE4OiAiRjciLCAxMTk6ICJGOCIsIDEyMDogIkY5IiwgMTIxOiAiRjEwIiwgMTIyOiAiRjExIiwgMTIzOiAiRjEyIiwgMTQ0OiAiTnVtTG9jayIsIDE0NTogIlNjcm9sbExvY2siLCAyMjQ6ICJNZXRhIiB9LCB3YTIgPSB7IEFsdDogImFsdEtleSIsIENvbnRyb2w6ICJjdHJsS2V5IiwgTWV0YTogIm1ldGFLZXkiLCBTaGlmdDogInNoaWZ0S2V5IiB9OwogICAgZnVuY3Rpb24gU2EyKGU1KSB7CiAgICAgIHZhciBuOCA9IHRoaXMubmF0aXZlRXZlbnQ7CiAgICAgIHJldHVybiBuOC5nZXRNb2RpZmllclN0YXRlID8gbjguZ2V0TW9kaWZpZXJTdGF0ZShlNSkgOiAoZTUgPSB3YTJbZTVdKSA/ICEhbjhbZTVdIDogZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiB1aTMoKSB7CiAgICAgIHJldHVybiBTYTI7CiAgICB9CiAgICB2YXIgRWEyID0gTTI1KHt9LCBTdDEwLCB7IGtleTogZnVuY3Rpb24oZTUpIHsKICAgICAgaWYgKGU1LmtleSkgewogICAgICAgIHZhciBuOCA9IHlhMltlNS5rZXldIHx8IGU1LmtleTsKICAgICAgICBpZiAobjggIT09ICJVbmlkZW50aWZpZWQiKQogICAgICAgICAgcmV0dXJuIG44OwogICAgICB9CiAgICAgIHJldHVybiBlNS50eXBlID09PSAia2V5cHJlc3MiID8gKGU1ID0gSHQxMChlNSksIGU1ID09PSAxMyA/ICJFbnRlciIgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGU1KSkgOiBlNS50eXBlID09PSAia2V5ZG93biIgfHwgZTUudHlwZSA9PT0gImtleXVwIiA/IGdhMltlNS5rZXlDb2RlXSB8fCAiVW5pZGVudGlmaWVkIiA6ICIiOwogICAgfSwgY29kZTogMCwgbG9jYXRpb246IDAsIGN0cmxLZXk6IDAsIHNoaWZ0S2V5OiAwLCBhbHRLZXk6IDAsIG1ldGFLZXk6IDAsIHJlcGVhdDogMCwgbG9jYWxlOiAwLCBnZXRNb2RpZmllclN0YXRlOiB1aTMsIGNoYXJDb2RlOiBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gZTUudHlwZSA9PT0gImtleXByZXNzIiA/IEh0MTAoZTUpIDogMDsKICAgIH0sIGtleUNvZGU6IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHJldHVybiBlNS50eXBlID09PSAia2V5ZG93biIgfHwgZTUudHlwZSA9PT0gImtleXVwIiA/IGU1LmtleUNvZGUgOiAwOwogICAgfSwgd2hpY2g6IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHJldHVybiBlNS50eXBlID09PSAia2V5cHJlc3MiID8gSHQxMChlNSkgOiBlNS50eXBlID09PSAia2V5ZG93biIgfHwgZTUudHlwZSA9PT0gImtleXVwIiA/IGU1LmtleUNvZGUgOiAwOwogICAgfSB9KSwga2EyID0gYjI1KEVhMiksIHhhMiA9IE0yNSh7fSwga3IzLCB7IHBvaW50ZXJJZDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCwgcHJlc3N1cmU6IDAsIHRhbmdlbnRpYWxQcmVzc3VyZTogMCwgdGlsdFg6IDAsIHRpbHRZOiAwLCB0d2lzdDogMCwgcG9pbnRlclR5cGU6IDAsIGlzUHJpbWFyeTogMCB9KSwgWmkyID0gYjI1KHhhMiksIENhMiA9IE0yNSh7fSwgU3QxMCwgeyB0b3VjaGVzOiAwLCB0YXJnZXRUb3VjaGVzOiAwLCBjaGFuZ2VkVG91Y2hlczogMCwgYWx0S2V5OiAwLCBtZXRhS2V5OiAwLCBjdHJsS2V5OiAwLCBzaGlmdEtleTogMCwgZ2V0TW9kaWZpZXJTdGF0ZTogdWkzIH0pLCBfYTQgPSBiMjUoQ2EyKSwgTmEyID0gTTI1KHt9LCBObjQsIHsgcHJvcGVydHlOYW1lOiAwLCBlbGFwc2VkVGltZTogMCwgcHNldWRvRWxlbWVudDogMCB9KSwgUGEyID0gYjI1KE5hMiksIFRhMiA9IE0yNSh7fSwga3IzLCB7IGRlbHRhWDogZnVuY3Rpb24oZTUpIHsKICAgICAgcmV0dXJuICJkZWx0YVgiIGluIGU1ID8gZTUuZGVsdGFYIDogIndoZWVsRGVsdGFYIiBpbiBlNSA/IC1lNS53aGVlbERlbHRhWCA6IDA7CiAgICB9LCBkZWx0YVk6IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHJldHVybiAiZGVsdGFZIiBpbiBlNSA/IGU1LmRlbHRhWSA6ICJ3aGVlbERlbHRhWSIgaW4gZTUgPyAtZTUud2hlZWxEZWx0YVkgOiAid2hlZWxEZWx0YSIgaW4gZTUgPyAtZTUud2hlZWxEZWx0YSA6IDA7CiAgICB9LCBkZWx0YVo6IDAsIGRlbHRhTW9kZTogMCB9KSwgTGEyID0gYjI1KFRhMiksIHphMiA9IFs5LCAxMywgMjcsIDMyXSwgc2kzID0gd2UxMiAmJiAiQ29tcG9zaXRpb25FdmVudCIgaW4gd2luZG93LCBxbjQgPSBudWxsOwogICAgd2UxMiAmJiAiZG9jdW1lbnRNb2RlIiBpbiBkb2N1bWVudCAmJiAocW40ID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTsKICAgIHZhciBPYTIgPSB3ZTEyICYmICJUZXh0RXZlbnQiIGluIHdpbmRvdyAmJiAhcW40LCBTdSA9IHdlMTIgJiYgKCFzaTMgfHwgcW40ICYmIDggPCBxbjQgJiYgMTEgPj0gcW40KSwgSmkyID0gU3RyaW5nLmZyb21DaGFyQ29kZSgzMiksIHFpMiA9IGZhbHNlOwogICAgZnVuY3Rpb24gRXUoZTUsIG44KSB7CiAgICAgIHN3aXRjaCAoZTUpIHsKICAgICAgICBjYXNlICJrZXl1cCI6CiAgICAgICAgICByZXR1cm4gemEyLmluZGV4T2Yobjgua2V5Q29kZSkgIT09IC0xOwogICAgICAgIGNhc2UgImtleWRvd24iOgogICAgICAgICAgcmV0dXJuIG44LmtleUNvZGUgIT09IDIyOTsKICAgICAgICBjYXNlICJrZXlwcmVzcyI6CiAgICAgICAgY2FzZSAibW91c2Vkb3duIjoKICAgICAgICBjYXNlICJmb2N1c291dCI6CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBrdShlNSkgewogICAgICByZXR1cm4gZTUgPSBlNS5kZXRhaWwsIHR5cGVvZiBlNSA9PSAib2JqZWN0IiAmJiAiZGF0YSIgaW4gZTUgPyBlNS5kYXRhIDogbnVsbDsKICAgIH0KICAgIHZhciB1bjMgPSBmYWxzZTsKICAgIGZ1bmN0aW9uIE1hMihlNSwgbjgpIHsKICAgICAgc3dpdGNoIChlNSkgewogICAgICAgIGNhc2UgImNvbXBvc2l0aW9uZW5kIjoKICAgICAgICAgIHJldHVybiBrdShuOCk7CiAgICAgICAgY2FzZSAia2V5cHJlc3MiOgogICAgICAgICAgcmV0dXJuIG44LndoaWNoICE9PSAzMiA/IG51bGwgOiAocWkyID0gdHJ1ZSwgSmkyKTsKICAgICAgICBjYXNlICJ0ZXh0SW5wdXQiOgogICAgICAgICAgcmV0dXJuIGU1ID0gbjguZGF0YSwgZTUgPT09IEppMiAmJiBxaTIgPyBudWxsIDogZTU7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBSYTIoZTUsIG44KSB7CiAgICAgIGlmICh1bjMpCiAgICAgICAgcmV0dXJuIGU1ID09PSAiY29tcG9zaXRpb25lbmQiIHx8ICFzaTMgJiYgRXUoZTUsIG44KSA/IChlNSA9IHd1KCksIEJ0OSA9IGlpMyA9IHhlMTUgPSBudWxsLCB1bjMgPSBmYWxzZSwgZTUpIDogbnVsbDsKICAgICAgc3dpdGNoIChlNSkgewogICAgICAgIGNhc2UgInBhc3RlIjoKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIGNhc2UgImtleXByZXNzIjoKICAgICAgICAgIGlmICghKG44LmN0cmxLZXkgfHwgbjguYWx0S2V5IHx8IG44Lm1ldGFLZXkpIHx8IG44LmN0cmxLZXkgJiYgbjguYWx0S2V5KSB7CiAgICAgICAgICAgIGlmIChuOC5jaGFyICYmIDEgPCBuOC5jaGFyLmxlbmd0aCkKICAgICAgICAgICAgICByZXR1cm4gbjguY2hhcjsKICAgICAgICAgICAgaWYgKG44LndoaWNoKQogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG44LndoaWNoKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIGNhc2UgImNvbXBvc2l0aW9uZW5kIjoKICAgICAgICAgIHJldHVybiBTdSAmJiBuOC5sb2NhbGUgIT09ICJrbyIgPyBudWxsIDogbjguZGF0YTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHZhciBEYTIgPSB7IGNvbG9yOiB0cnVlLCBkYXRlOiB0cnVlLCBkYXRldGltZTogdHJ1ZSwgImRhdGV0aW1lLWxvY2FsIjogdHJ1ZSwgZW1haWw6IHRydWUsIG1vbnRoOiB0cnVlLCBudW1iZXI6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCByYW5nZTogdHJ1ZSwgc2VhcmNoOiB0cnVlLCB0ZWw6IHRydWUsIHRleHQ6IHRydWUsIHRpbWU6IHRydWUsIHVybDogdHJ1ZSwgd2VlazogdHJ1ZSB9OwogICAgZnVuY3Rpb24gYmkzKGU1KSB7CiAgICAgIHZhciBuOCA9IGU1ICYmIGU1Lm5vZGVOYW1lICYmIGU1Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiBuOCA9PT0gImlucHV0IiA/ICEhRGEyW2U1LnR5cGVdIDogbjggPT09ICJ0ZXh0YXJlYSI7CiAgICB9CiAgICBmdW5jdGlvbiB4dShlNSwgbjgsIHQ0LCByMykgewogICAgICB0dShyMyksIG44ID0gYnQ3KG44LCAib25DaGFuZ2UiKSwgMCA8IG44Lmxlbmd0aCAmJiAodDQgPSBuZXcgb2kzKCJvbkNoYW5nZSIsICJjaGFuZ2UiLCBudWxsLCB0NCwgcjMpLCBlNS5wdXNoKHsgZXZlbnQ6IHQ0LCBsaXN0ZW5lcnM6IG44IH0pKTsKICAgIH0KICAgIHZhciBibjQgPSBudWxsLCBkdDEwID0gbnVsbDsKICAgIGZ1bmN0aW9uIElhMihlNSkgewogICAgICBUdShlNSwgMCk7CiAgICB9CiAgICBmdW5jdGlvbiB4cjMoZTUpIHsKICAgICAgdmFyIG44ID0gYW40KGU1KTsKICAgICAgaWYgKEdvKG44KSkKICAgICAgICByZXR1cm4gZTU7CiAgICB9CiAgICBmdW5jdGlvbiBGYTIoZTUsIG44KSB7CiAgICAgIGlmIChlNSA9PT0gImNoYW5nZSIpCiAgICAgICAgcmV0dXJuIG44OwogICAgfQogICAgdmFyIEN1ID0gZmFsc2U7CiAgICB3ZTEyICYmICh3ZTEyID8gKE90MTIgPSAib25pbnB1dCIgaW4gZG9jdW1lbnQsIE90MTIgfHwgKEJyMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCBCcjMuc2V0QXR0cmlidXRlKCJvbmlucHV0IiwgInJldHVybjsiKSwgT3QxMiA9IHR5cGVvZiBCcjMub25pbnB1dCA9PSAiZnVuY3Rpb24iKSwgenQxMCA9IE90MTIpIDogenQxMCA9IGZhbHNlLCBDdSA9IHp0MTAgJiYgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgOSA8IGRvY3VtZW50LmRvY3VtZW50TW9kZSkpOwogICAgdmFyIHp0MTAsIE90MTIsIEJyMzsKICAgIGZ1bmN0aW9uIGVvMigpIHsKICAgICAgYm40ICYmIChibjQuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLCBfdSksIGR0MTAgPSBibjQgPSBudWxsKTsKICAgIH0KICAgIGZ1bmN0aW9uIF91KGU1KSB7CiAgICAgIGlmIChlNS5wcm9wZXJ0eU5hbWUgPT09ICJ2YWx1ZSIgJiYgeHIzKGR0MTApKSB7CiAgICAgICAgdmFyIG44ID0gW107CiAgICAgICAgaWYgKHh1KG44LCBkdDEwLCBlNSwgWmwoZTUpKSwgZTUgPSBJYTIsIEFlMTgpCiAgICAgICAgICBlNShuOCk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBBZTE4ID0gdHJ1ZTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIEpsKGU1LCBuOCk7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBBZTE4ID0gZmFsc2UsIGJsKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBqYTIoZTUsIG44LCB0NCkgewogICAgICBlNSA9PT0gImZvY3VzaW4iID8gKGVvMigpLCBibjQgPSBuOCwgZHQxMCA9IHQ0LCBibjQuYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLCBfdSkpIDogZTUgPT09ICJmb2N1c291dCIgJiYgZW8yKCk7CiAgICB9CiAgICBmdW5jdGlvbiBVYTIoZTUpIHsKICAgICAgaWYgKGU1ID09PSAic2VsZWN0aW9uY2hhbmdlIiB8fCBlNSA9PT0gImtleXVwIiB8fCBlNSA9PT0gImtleWRvd24iKQogICAgICAgIHJldHVybiB4cjMoZHQxMCk7CiAgICB9CiAgICBmdW5jdGlvbiBWYTIoZTUsIG44KSB7CiAgICAgIGlmIChlNSA9PT0gImNsaWNrIikKICAgICAgICByZXR1cm4geHIzKG44KTsKICAgIH0KICAgIGZ1bmN0aW9uIEJhMihlNSwgbjgpIHsKICAgICAgaWYgKGU1ID09PSAiaW5wdXQiIHx8IGU1ID09PSAiY2hhbmdlIikKICAgICAgICByZXR1cm4geHIzKG44KTsKICAgIH0KICAgIGZ1bmN0aW9uIEhhMihlNSwgbjgpIHsKICAgICAgcmV0dXJuIGU1ID09PSBuOCAmJiAoZTUgIT09IDAgfHwgMSAvIGU1ID09PSAxIC8gbjgpIHx8IGU1ICE9PSBlNSAmJiBuOCAhPT0gbjg7CiAgICB9CiAgICB2YXIgZWUxOCA9IHR5cGVvZiBPYmplY3QuaXMgPT0gImZ1bmN0aW9uIiA/IE9iamVjdC5pcyA6IEhhMiwgV2EyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKICAgIGZ1bmN0aW9uIHB0MTIoZTUsIG44KSB7CiAgICAgIGlmIChlZTE4KGU1LCBuOCkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGlmICh0eXBlb2YgZTUgIT0gIm9iamVjdCIgfHwgZTUgPT09IG51bGwgfHwgdHlwZW9mIG44ICE9ICJvYmplY3QiIHx8IG44ID09PSBudWxsKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgdmFyIHQ0ID0gT2JqZWN0LmtleXMoZTUpLCByMyA9IE9iamVjdC5rZXlzKG44KTsKICAgICAgaWYgKHQ0Lmxlbmd0aCAhPT0gcjMubGVuZ3RoKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChyMyA9IDA7IHIzIDwgdDQubGVuZ3RoOyByMysrKQogICAgICAgIGlmICghV2EyLmNhbGwobjgsIHQ0W3IzXSkgfHwgIWVlMTgoZTVbdDRbcjNdXSwgbjhbdDRbcjNdXSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gbm8yKGU1KSB7CiAgICAgIGZvciAoOyBlNSAmJiBlNS5maXJzdENoaWxkOyApCiAgICAgICAgZTUgPSBlNS5maXJzdENoaWxkOwogICAgICByZXR1cm4gZTU7CiAgICB9CiAgICBmdW5jdGlvbiB0byhlNSwgbjgpIHsKICAgICAgdmFyIHQ0ID0gbm8yKGU1KTsKICAgICAgZTUgPSAwOwogICAgICBmb3IgKHZhciByMzsgdDQ7ICkgewogICAgICAgIGlmICh0NC5ub2RlVHlwZSA9PT0gMykgewogICAgICAgICAgaWYgKHIzID0gZTUgKyB0NC50ZXh0Q29udGVudC5sZW5ndGgsIGU1IDw9IG44ICYmIHIzID49IG44KQogICAgICAgICAgICByZXR1cm4geyBub2RlOiB0NCwgb2Zmc2V0OiBuOCAtIGU1IH07CiAgICAgICAgICBlNSA9IHIzOwogICAgICAgIH0KICAgICAgICBlOiB7CiAgICAgICAgICBmb3IgKDsgdDQ7ICkgewogICAgICAgICAgICBpZiAodDQubmV4dFNpYmxpbmcpIHsKICAgICAgICAgICAgICB0NCA9IHQ0Lm5leHRTaWJsaW5nOwogICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdDQgPSB0NC5wYXJlbnROb2RlOwogICAgICAgICAgfQogICAgICAgICAgdDQgPSB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIHQ0ID0gbm8yKHQ0KTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gTnUoZTUsIG44KSB7CiAgICAgIHJldHVybiBlNSAmJiBuOCA/IGU1ID09PSBuOCA/IHRydWUgOiBlNSAmJiBlNS5ub2RlVHlwZSA9PT0gMyA/IGZhbHNlIDogbjggJiYgbjgubm9kZVR5cGUgPT09IDMgPyBOdShlNSwgbjgucGFyZW50Tm9kZSkgOiAiY29udGFpbnMiIGluIGU1ID8gZTUuY29udGFpbnMobjgpIDogZTUuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPyAhIShlNS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuOCkgJiAxNikgOiBmYWxzZSA6IGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gcm8oKSB7CiAgICAgIGZvciAodmFyIGU1ID0gd2luZG93LCBuOCA9IEd0NSgpOyBuOCBpbnN0YW5jZW9mIGU1LkhUTUxJRnJhbWVFbGVtZW50OyApIHsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIHQ0ID0gdHlwZW9mIG44LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9PSAic3RyaW5nIjsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIHQ0ID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICh0NCkKICAgICAgICAgIGU1ID0gbjguY29udGVudFdpbmRvdzsKICAgICAgICBlbHNlCiAgICAgICAgICBicmVhazsKICAgICAgICBuOCA9IEd0NShlNS5kb2N1bWVudCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG44OwogICAgfQogICAgZnVuY3Rpb24gaGwoZTUpIHsKICAgICAgdmFyIG44ID0gZTUgJiYgZTUubm9kZU5hbWUgJiYgZTUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgcmV0dXJuIG44ICYmIChuOCA9PT0gImlucHV0IiAmJiAoZTUudHlwZSA9PT0gInRleHQiIHx8IGU1LnR5cGUgPT09ICJzZWFyY2giIHx8IGU1LnR5cGUgPT09ICJ0ZWwiIHx8IGU1LnR5cGUgPT09ICJ1cmwiIHx8IGU1LnR5cGUgPT09ICJwYXNzd29yZCIpIHx8IG44ID09PSAidGV4dGFyZWEiIHx8IGU1LmNvbnRlbnRFZGl0YWJsZSA9PT0gInRydWUiKTsKICAgIH0KICAgIHZhciBBYTIgPSB3ZTEyICYmICJkb2N1bWVudE1vZGUiIGluIGRvY3VtZW50ICYmIDExID49IGRvY3VtZW50LmRvY3VtZW50TW9kZSwgc244ID0gbnVsbCwgdmwgPSBudWxsLCBldDEyID0gbnVsbCwgeWwgPSBmYWxzZTsKICAgIGZ1bmN0aW9uIGxvKGU1LCBuOCwgdDQpIHsKICAgICAgdmFyIHIzID0gdDQud2luZG93ID09PSB0NCA/IHQ0LmRvY3VtZW50IDogdDQubm9kZVR5cGUgPT09IDkgPyB0NCA6IHQ0Lm93bmVyRG9jdW1lbnQ7CiAgICAgIHlsIHx8IHNuOCA9PSBudWxsIHx8IHNuOCAhPT0gR3Q1KHIzKSB8fCAocjMgPSBzbjgsICJzZWxlY3Rpb25TdGFydCIgaW4gcjMgJiYgaGwocjMpID8gcjMgPSB7IHN0YXJ0OiByMy5zZWxlY3Rpb25TdGFydCwgZW5kOiByMy5zZWxlY3Rpb25FbmQgfSA6IChyMyA9IChyMy5vd25lckRvY3VtZW50ICYmIHIzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93KS5nZXRTZWxlY3Rpb24oKSwgcjMgPSB7IGFuY2hvck5vZGU6IHIzLmFuY2hvck5vZGUsIGFuY2hvck9mZnNldDogcjMuYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGU6IHIzLmZvY3VzTm9kZSwgZm9jdXNPZmZzZXQ6IHIzLmZvY3VzT2Zmc2V0IH0pLCBldDEyICYmIHB0MTIoZXQxMiwgcjMpIHx8IChldDEyID0gcjMsIHIzID0gYnQ3KHZsLCAib25TZWxlY3QiKSwgMCA8IHIzLmxlbmd0aCAmJiAobjggPSBuZXcgb2kzKCJvblNlbGVjdCIsICJzZWxlY3QiLCBudWxsLCBuOCwgdDQpLCBlNS5wdXNoKHsgZXZlbnQ6IG44LCBsaXN0ZW5lcnM6IHIzIH0pLCBuOC50YXJnZXQgPSBzbjgpKSk7CiAgICB9CiAgICB0aTMoImNhbmNlbCBjYW5jZWwgY2xpY2sgY2xpY2sgY2xvc2UgY2xvc2UgY29udGV4dG1lbnUgY29udGV4dE1lbnUgY29weSBjb3B5IGN1dCBjdXQgYXV4Y2xpY2sgYXV4Q2xpY2sgZGJsY2xpY2sgZG91YmxlQ2xpY2sgZHJhZ2VuZCBkcmFnRW5kIGRyYWdzdGFydCBkcmFnU3RhcnQgZHJvcCBkcm9wIGZvY3VzaW4gZm9jdXMgZm9jdXNvdXQgYmx1ciBpbnB1dCBpbnB1dCBpbnZhbGlkIGludmFsaWQga2V5ZG93biBrZXlEb3duIGtleXByZXNzIGtleVByZXNzIGtleXVwIGtleVVwIG1vdXNlZG93biBtb3VzZURvd24gbW91c2V1cCBtb3VzZVVwIHBhc3RlIHBhc3RlIHBhdXNlIHBhdXNlIHBsYXkgcGxheSBwb2ludGVyY2FuY2VsIHBvaW50ZXJDYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlckRvd24gcG9pbnRlcnVwIHBvaW50ZXJVcCByYXRlY2hhbmdlIHJhdGVDaGFuZ2UgcmVzZXQgcmVzZXQgc2Vla2VkIHNlZWtlZCBzdWJtaXQgc3VibWl0IHRvdWNoY2FuY2VsIHRvdWNoQ2FuY2VsIHRvdWNoZW5kIHRvdWNoRW5kIHRvdWNoc3RhcnQgdG91Y2hTdGFydCB2b2x1bWVjaGFuZ2Ugdm9sdW1lQ2hhbmdlIi5zcGxpdCgiICIpLCAwKTsKICAgIHRpMygiZHJhZyBkcmFnIGRyYWdlbnRlciBkcmFnRW50ZXIgZHJhZ2V4aXQgZHJhZ0V4aXQgZHJhZ2xlYXZlIGRyYWdMZWF2ZSBkcmFnb3ZlciBkcmFnT3ZlciBtb3VzZW1vdmUgbW91c2VNb3ZlIG1vdXNlb3V0IG1vdXNlT3V0IG1vdXNlb3ZlciBtb3VzZU92ZXIgcG9pbnRlcm1vdmUgcG9pbnRlck1vdmUgcG9pbnRlcm91dCBwb2ludGVyT3V0IHBvaW50ZXJvdmVyIHBvaW50ZXJPdmVyIHNjcm9sbCBzY3JvbGwgdG9nZ2xlIHRvZ2dsZSB0b3VjaG1vdmUgdG91Y2hNb3ZlIHdoZWVsIHdoZWVsIi5zcGxpdCgiICIpLCAxKTsKICAgIHRpMyhKczIsIDIpOwogICAgZm9yIChIcjIgPSAiY2hhbmdlIHNlbGVjdGlvbmNoYW5nZSB0ZXh0SW5wdXQgY29tcG9zaXRpb25zdGFydCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnVwZGF0ZSIuc3BsaXQoIiAiKSwgTXQ2ID0gMDsgTXQ2IDwgSHIyLmxlbmd0aDsgTXQ2KyspCiAgICAgIG5pMy5zZXQoSHIyW010Nl0sIDApOwogICAgdmFyIEhyMiwgTXQ2OwogICAga241KCJvbk1vdXNlRW50ZXIiLCBbIm1vdXNlb3V0IiwgIm1vdXNlb3ZlciJdKTsKICAgIGtuNSgib25Nb3VzZUxlYXZlIiwgWyJtb3VzZW91dCIsICJtb3VzZW92ZXIiXSk7CiAgICBrbjUoIm9uUG9pbnRlckVudGVyIiwgWyJwb2ludGVyb3V0IiwgInBvaW50ZXJvdmVyIl0pOwogICAga241KCJvblBvaW50ZXJMZWF2ZSIsIFsicG9pbnRlcm91dCIsICJwb2ludGVyb3ZlciJdKTsKICAgIEplOCgib25DaGFuZ2UiLCAiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIikpOwogICAgSmU4KCJvblNlbGVjdCIsICJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIikpOwogICAgSmU4KCJvbkJlZm9yZUlucHV0IiwgWyJjb21wb3NpdGlvbmVuZCIsICJrZXlwcmVzcyIsICJ0ZXh0SW5wdXQiLCAicGFzdGUiXSk7CiAgICBKZTgoIm9uQ29tcG9zaXRpb25FbmQiLCAiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpOwogICAgSmU4KCJvbkNvbXBvc2l0aW9uU3RhcnQiLCAiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7CiAgICBKZTgoIm9uQ29tcG9zaXRpb25VcGRhdGUiLCAiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpOwogICAgdmFyICRuNCA9ICJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nIi5zcGxpdCgiICIpLCBQdSA9IG5ldyBTZXQoImNhbmNlbCBjbG9zZSBpbnZhbGlkIGxvYWQgc2Nyb2xsIHRvZ2dsZSIuc3BsaXQoIiAiKS5jb25jYXQoJG40KSk7CiAgICBmdW5jdGlvbiBpbzIoZTUsIG44LCB0NCkgewogICAgICB2YXIgcjMgPSBlNS50eXBlIHx8ICJ1bmtub3duLWV2ZW50IjsKICAgICAgZTUuY3VycmVudFRhcmdldCA9IHQ0LCBZczIocjMsIG44LCB2b2lkIDAsIGU1KSwgZTUuY3VycmVudFRhcmdldCA9IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBUdShlNSwgbjgpIHsKICAgICAgbjggPSAobjggJiA0KSAhPT0gMDsKICAgICAgZm9yICh2YXIgdDQgPSAwOyB0NCA8IGU1Lmxlbmd0aDsgdDQrKykgewogICAgICAgIHZhciByMyA9IGU1W3Q0XSwgbDcgPSByMy5ldmVudDsKICAgICAgICByMyA9IHIzLmxpc3RlbmVyczsKICAgICAgICBlOiB7CiAgICAgICAgICB2YXIgaTQgPSB2b2lkIDA7CiAgICAgICAgICBpZiAobjgpCiAgICAgICAgICAgIGZvciAodmFyIG80ID0gcjMubGVuZ3RoIC0gMTsgMCA8PSBvNDsgbzQtLSkgewogICAgICAgICAgICAgIHZhciB1MTEgPSByM1tvNF0sIHM4ID0gdTExLmluc3RhbmNlLCBkMTUgPSB1MTEuY3VycmVudFRhcmdldDsKICAgICAgICAgICAgICBpZiAodTExID0gdTExLmxpc3RlbmVyLCBzOCAhPT0gaTQgJiYgbDcuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkKICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgaW8yKGw3LCB1MTEsIGQxNSksIGk0ID0gczg7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZm9yIChvNCA9IDA7IG80IDwgcjMubGVuZ3RoOyBvNCsrKSB7CiAgICAgICAgICAgICAgaWYgKHUxMSA9IHIzW280XSwgczggPSB1MTEuaW5zdGFuY2UsIGQxNSA9IHUxMS5jdXJyZW50VGFyZ2V0LCB1MTEgPSB1MTEubGlzdGVuZXIsIHM4ICE9PSBpNCAmJiBsNy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKQogICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICBpbzIobDcsIHUxMSwgZDE1KSwgaTQgPSBzODsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoSnQ1KQogICAgICAgIHRocm93IGU1ID0gZGwsIEp0NSA9IGZhbHNlLCBkbCA9IG51bGwsIGU1OwogICAgfQogICAgZnVuY3Rpb24gejI2KGU1LCBuOCkgewogICAgICB2YXIgdDQgPSBSdShuOCksIHIzID0gZTUgKyAiX19idWJibGUiOwogICAgICB0NC5oYXMocjMpIHx8ICh6dShuOCwgZTUsIDIsIGZhbHNlKSwgdDQuYWRkKHIzKSk7CiAgICB9CiAgICB2YXIgb28gPSAiX3JlYWN0TGlzdGVuaW5nIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpOwogICAgZnVuY3Rpb24gTHUoZTUpIHsKICAgICAgZTVbb29dIHx8IChlNVtvb10gPSB0cnVlLCBZby5mb3JFYWNoKGZ1bmN0aW9uKG44KSB7CiAgICAgICAgUHUuaGFzKG44KSB8fCB1bzIobjgsIGZhbHNlLCBlNSwgbnVsbCksIHVvMihuOCwgdHJ1ZSwgZTUsIG51bGwpOwogICAgICB9KSk7CiAgICB9CiAgICBmdW5jdGlvbiB1bzIoZTUsIG44LCB0NCwgcjMpIHsKICAgICAgdmFyIGw3ID0gNCA8IGFyZ3VtZW50cy5sZW5ndGggJiYgYXJndW1lbnRzWzRdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbNF0gOiAwLCBpNCA9IHQ0OwogICAgICBpZiAoZTUgPT09ICJzZWxlY3Rpb25jaGFuZ2UiICYmIHQ0Lm5vZGVUeXBlICE9PSA5ICYmIChpNCA9IHQ0Lm93bmVyRG9jdW1lbnQpLCByMyAhPT0gbnVsbCAmJiAhbjggJiYgUHUuaGFzKGU1KSkgewogICAgICAgIGlmIChlNSAhPT0gInNjcm9sbCIpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgbDcgfD0gMiwgaTQgPSByMzsKICAgICAgfQogICAgICB2YXIgbzQgPSBSdShpNCksIHUxMSA9IGU1ICsgIl9fIiArIChuOCA/ICJjYXB0dXJlIiA6ICJidWJibGUiKTsKICAgICAgbzQuaGFzKHUxMSkgfHwgKG44ICYmIChsNyB8PSA0KSwgenUoaTQsIGU1LCBsNywgbjgpLCBvNC5hZGQodTExKSk7CiAgICB9CiAgICBmdW5jdGlvbiB6dShlNSwgbjgsIHQ0LCByMykgewogICAgICB2YXIgbDcgPSBuaTMuZ2V0KG44KTsKICAgICAgc3dpdGNoIChsNyA9PT0gdm9pZCAwID8gMiA6IGw3KSB7CiAgICAgICAgY2FzZSAwOgogICAgICAgICAgbDcgPSBvYTI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBsNyA9IHVhMjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBsNyA9IHJpMzsKICAgICAgfQogICAgICB0NCA9IGw3LmJpbmQobnVsbCwgbjgsIHQ0LCBlNSksIGw3ID0gdm9pZCAwLCAhY2wgfHwgbjggIT09ICJ0b3VjaHN0YXJ0IiAmJiBuOCAhPT0gInRvdWNobW92ZSIgJiYgbjggIT09ICJ3aGVlbCIgfHwgKGw3ID0gdHJ1ZSksIHIzID8gbDcgIT09IHZvaWQgMCA/IGU1LmFkZEV2ZW50TGlzdGVuZXIobjgsIHQ0LCB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IGw3IH0pIDogZTUuYWRkRXZlbnRMaXN0ZW5lcihuOCwgdDQsIHRydWUpIDogbDcgIT09IHZvaWQgMCA/IGU1LmFkZEV2ZW50TGlzdGVuZXIobjgsIHQ0LCB7IHBhc3NpdmU6IGw3IH0pIDogZTUuYWRkRXZlbnRMaXN0ZW5lcihuOCwgdDQsIGZhbHNlKTsKICAgIH0KICAgIGZ1bmN0aW9uIE91KGU1LCBuOCwgdDQsIHIzLCBsNykgewogICAgICB2YXIgaTQgPSByMzsKICAgICAgaWYgKChuOCAmIDEpID09PSAwICYmIChuOCAmIDIpID09PSAwICYmIHIzICE9PSBudWxsKQogICAgICAgIGU6CiAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgaWYgKHIzID09PSBudWxsKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgdmFyIG80ID0gcjMudGFnOwogICAgICAgICAgICBpZiAobzQgPT09IDMgfHwgbzQgPT09IDQpIHsKICAgICAgICAgICAgICB2YXIgdTExID0gcjMuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87CiAgICAgICAgICAgICAgaWYgKHUxMSA9PT0gbDcgfHwgdTExLm5vZGVUeXBlID09PSA4ICYmIHUxMS5wYXJlbnROb2RlID09PSBsNykKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGlmIChvNCA9PT0gNCkKICAgICAgICAgICAgICAgIGZvciAobzQgPSByMy5yZXR1cm47IG80ICE9PSBudWxsOyApIHsKICAgICAgICAgICAgICAgICAgdmFyIHM4ID0gbzQudGFnOwogICAgICAgICAgICAgICAgICBpZiAoKHM4ID09PSAzIHx8IHM4ID09PSA0KSAmJiAoczggPSBvNC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbywgczggPT09IGw3IHx8IHM4Lm5vZGVUeXBlID09PSA4ICYmIHM4LnBhcmVudE5vZGUgPT09IGw3KSkKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgIG80ID0gbzQucmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvciAoOyB1MTEgIT09IG51bGw7ICkgewogICAgICAgICAgICAgICAgaWYgKG80ID0gUWU2KHUxMSksIG80ID09PSBudWxsKQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBpZiAoczggPSBvNC50YWcsIHM4ID09PSA1IHx8IHM4ID09PSA2KSB7CiAgICAgICAgICAgICAgICAgIHIzID0gaTQgPSBvNDsKICAgICAgICAgICAgICAgICAgY29udGludWUgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHUxMSA9IHUxMS5wYXJlbnROb2RlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByMyA9IHIzLnJldHVybjsKICAgICAgICAgIH0KICAgICAgV3MyKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkMTUgPSBpNCwgeTE3ID0gWmwodDQpLCBDMTcgPSBbXTsKICAgICAgICBlOiB7CiAgICAgICAgICB2YXIgaDEwID0geXUuZ2V0KGU1KTsKICAgICAgICAgIGlmIChoMTAgIT09IHZvaWQgMCkgewogICAgICAgICAgICB2YXIgUzIxID0gb2kzLCBrMTggPSBlNTsKICAgICAgICAgICAgc3dpdGNoIChlNSkgewogICAgICAgICAgICAgIGNhc2UgImtleXByZXNzIjoKICAgICAgICAgICAgICAgIGlmIChIdDEwKHQ0KSA9PT0gMCkKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICBjYXNlICJrZXlkb3duIjoKICAgICAgICAgICAgICBjYXNlICJrZXl1cCI6CiAgICAgICAgICAgICAgICBTMjEgPSBrYTI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJmb2N1c2luIjoKICAgICAgICAgICAgICAgIGsxOCA9ICJmb2N1cyIsIFMyMSA9IFZyMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImZvY3Vzb3V0IjoKICAgICAgICAgICAgICAgIGsxOCA9ICJibHVyIiwgUzIxID0gVnIyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiYmVmb3JlYmx1ciI6CiAgICAgICAgICAgICAgY2FzZSAiYWZ0ZXJibHVyIjoKICAgICAgICAgICAgICAgIFMyMSA9IFZyMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImNsaWNrIjoKICAgICAgICAgICAgICAgIGlmICh0NC5idXR0b24gPT09IDIpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgY2FzZSAiYXV4Y2xpY2siOgogICAgICAgICAgICAgIGNhc2UgImRibGNsaWNrIjoKICAgICAgICAgICAgICBjYXNlICJtb3VzZWRvd24iOgogICAgICAgICAgICAgIGNhc2UgIm1vdXNlbW92ZSI6CiAgICAgICAgICAgICAgY2FzZSAibW91c2V1cCI6CiAgICAgICAgICAgICAgY2FzZSAibW91c2VvdXQiOgogICAgICAgICAgICAgIGNhc2UgIm1vdXNlb3ZlciI6CiAgICAgICAgICAgICAgY2FzZSAiY29udGV4dG1lbnUiOgogICAgICAgICAgICAgICAgUzIxID0gS2kzOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiZHJhZyI6CiAgICAgICAgICAgICAgY2FzZSAiZHJhZ2VuZCI6CiAgICAgICAgICAgICAgY2FzZSAiZHJhZ2VudGVyIjoKICAgICAgICAgICAgICBjYXNlICJkcmFnZXhpdCI6CiAgICAgICAgICAgICAgY2FzZSAiZHJhZ2xlYXZlIjoKICAgICAgICAgICAgICBjYXNlICJkcmFnb3ZlciI6CiAgICAgICAgICAgICAgY2FzZSAiZHJhZ3N0YXJ0IjoKICAgICAgICAgICAgICBjYXNlICJkcm9wIjoKICAgICAgICAgICAgICAgIFMyMSA9IGZhMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgInRvdWNoY2FuY2VsIjoKICAgICAgICAgICAgICBjYXNlICJ0b3VjaGVuZCI6CiAgICAgICAgICAgICAgY2FzZSAidG91Y2htb3ZlIjoKICAgICAgICAgICAgICBjYXNlICJ0b3VjaHN0YXJ0IjoKICAgICAgICAgICAgICAgIFMyMSA9IF9hNDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgcHU6CiAgICAgICAgICAgICAgY2FzZSBtdToKICAgICAgICAgICAgICBjYXNlIGh1OgogICAgICAgICAgICAgICAgUzIxID0gcGEyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSB2dToKICAgICAgICAgICAgICAgIFMyMSA9IFBhMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgInNjcm9sbCI6CiAgICAgICAgICAgICAgICBTMjEgPSBzYTI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJ3aGVlbCI6CiAgICAgICAgICAgICAgICBTMjEgPSBMYTI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJjb3B5IjoKICAgICAgICAgICAgICBjYXNlICJjdXQiOgogICAgICAgICAgICAgIGNhc2UgInBhc3RlIjoKICAgICAgICAgICAgICAgIFMyMSA9IGhhMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImdvdHBvaW50ZXJjYXB0dXJlIjoKICAgICAgICAgICAgICBjYXNlICJsb3N0cG9pbnRlcmNhcHR1cmUiOgogICAgICAgICAgICAgIGNhc2UgInBvaW50ZXJjYW5jZWwiOgogICAgICAgICAgICAgIGNhc2UgInBvaW50ZXJkb3duIjoKICAgICAgICAgICAgICBjYXNlICJwb2ludGVybW92ZSI6CiAgICAgICAgICAgICAgY2FzZSAicG9pbnRlcm91dCI6CiAgICAgICAgICAgICAgY2FzZSAicG9pbnRlcm92ZXIiOgogICAgICAgICAgICAgIGNhc2UgInBvaW50ZXJ1cCI6CiAgICAgICAgICAgICAgICBTMjEgPSBaaTI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIEUxNSA9IChuOCAmIDQpICE9PSAwLCBjMTcgPSAhRTE1ICYmIGU1ID09PSAic2Nyb2xsIiwgYTQgPSBFMTUgPyBoMTAgIT09IG51bGwgPyBoMTAgKyAiQ2FwdHVyZSIgOiBudWxsIDogaDEwOwogICAgICAgICAgICBFMTUgPSBbXTsKICAgICAgICAgICAgZm9yICh2YXIgZjExID0gZDE1LCBwMTg7IGYxMSAhPT0gbnVsbDsgKSB7CiAgICAgICAgICAgICAgcDE4ID0gZjExOwogICAgICAgICAgICAgIHZhciBtMjMgPSBwMTguc3RhdGVOb2RlOwogICAgICAgICAgICAgIGlmIChwMTgudGFnID09PSA1ICYmIG0yMyAhPT0gbnVsbCAmJiAocDE4ID0gbTIzLCBhNCAhPT0gbnVsbCAmJiAobTIzID0gc3QxMShmMTEsIGE0KSwgbTIzICE9IG51bGwgJiYgRTE1LnB1c2gobXQxMChmMTEsIG0yMywgcDE4KSkpKSwgYzE3KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgZjExID0gZjExLnJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICAwIDwgRTE1Lmxlbmd0aCAmJiAoaDEwID0gbmV3IFMyMShoMTAsIGsxOCwgbnVsbCwgdDQsIHkxNyksIEMxNy5wdXNoKHsgZXZlbnQ6IGgxMCwgbGlzdGVuZXJzOiBFMTUgfSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoKG44ICYgNykgPT09IDApIHsKICAgICAgICAgIGU6IHsKICAgICAgICAgICAgaWYgKGgxMCA9IGU1ID09PSAibW91c2VvdmVyIiB8fCBlNSA9PT0gInBvaW50ZXJvdmVyIiwgUzIxID0gZTUgPT09ICJtb3VzZW91dCIgfHwgZTUgPT09ICJwb2ludGVyb3V0IiwgaDEwICYmIChuOCAmIDE2KSA9PT0gMCAmJiAoazE4ID0gdDQucmVsYXRlZFRhcmdldCB8fCB0NC5mcm9tRWxlbWVudCkgJiYgKFFlNihrMTgpIHx8IGsxOFtQbjNdKSkKICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICBpZiAoKFMyMSB8fCBoMTApICYmIChoMTAgPSB5MTcud2luZG93ID09PSB5MTcgPyB5MTcgOiAoaDEwID0geTE3Lm93bmVyRG9jdW1lbnQpID8gaDEwLmRlZmF1bHRWaWV3IHx8IGgxMC5wYXJlbnRXaW5kb3cgOiB3aW5kb3csIFMyMSA/IChrMTggPSB0NC5yZWxhdGVkVGFyZ2V0IHx8IHQ0LnRvRWxlbWVudCwgUzIxID0gZDE1LCBrMTggPSBrMTggPyBRZTYoazE4KSA6IG51bGwsIGsxOCAhPT0gbnVsbCAmJiAoYzE3ID0gYmUxNChrMTgpLCBrMTggIT09IGMxNyB8fCBrMTgudGFnICE9PSA1ICYmIGsxOC50YWcgIT09IDYpICYmIChrMTggPSBudWxsKSkgOiAoUzIxID0gbnVsbCwgazE4ID0gZDE1KSwgUzIxICE9PSBrMTgpKSB7CiAgICAgICAgICAgICAgaWYgKEUxNSA9IEtpMywgbTIzID0gIm9uTW91c2VMZWF2ZSIsIGE0ID0gIm9uTW91c2VFbnRlciIsIGYxMSA9ICJtb3VzZSIsIChlNSA9PT0gInBvaW50ZXJvdXQiIHx8IGU1ID09PSAicG9pbnRlcm92ZXIiKSAmJiAoRTE1ID0gWmkyLCBtMjMgPSAib25Qb2ludGVyTGVhdmUiLCBhNCA9ICJvblBvaW50ZXJFbnRlciIsIGYxMSA9ICJwb2ludGVyIiksIGMxNyA9IFMyMSA9PSBudWxsID8gaDEwIDogYW40KFMyMSksIHAxOCA9IGsxOCA9PSBudWxsID8gaDEwIDogYW40KGsxOCksIGgxMCA9IG5ldyBFMTUobTIzLCBmMTEgKyAibGVhdmUiLCBTMjEsIHQ0LCB5MTcpLCBoMTAudGFyZ2V0ID0gYzE3LCBoMTAucmVsYXRlZFRhcmdldCA9IHAxOCwgbTIzID0gbnVsbCwgUWU2KHkxNykgPT09IGQxNSAmJiAoRTE1ID0gbmV3IEUxNShhNCwgZjExICsgImVudGVyIiwgazE4LCB0NCwgeTE3KSwgRTE1LnRhcmdldCA9IHAxOCwgRTE1LnJlbGF0ZWRUYXJnZXQgPSBjMTcsIG0yMyA9IEUxNSksIGMxNyA9IG0yMywgUzIxICYmIGsxOCkKICAgICAgICAgICAgICAgIG46IHsKICAgICAgICAgICAgICAgICAgZm9yIChFMTUgPSBTMjEsIGE0ID0gazE4LCBmMTEgPSAwLCBwMTggPSBFMTU7IHAxODsgcDE4ID0gdG41KHAxOCkpCiAgICAgICAgICAgICAgICAgICAgZjExKys7CiAgICAgICAgICAgICAgICAgIGZvciAocDE4ID0gMCwgbTIzID0gYTQ7IG0yMzsgbTIzID0gdG41KG0yMykpCiAgICAgICAgICAgICAgICAgICAgcDE4Kys7CiAgICAgICAgICAgICAgICAgIGZvciAoOyAwIDwgZjExIC0gcDE4OyApCiAgICAgICAgICAgICAgICAgICAgRTE1ID0gdG41KEUxNSksIGYxMS0tOwogICAgICAgICAgICAgICAgICBmb3IgKDsgMCA8IHAxOCAtIGYxMTsgKQogICAgICAgICAgICAgICAgICAgIGE0ID0gdG41KGE0KSwgcDE4LS07CiAgICAgICAgICAgICAgICAgIGZvciAoOyBmMTEtLTsgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEUxNSA9PT0gYTQgfHwgYTQgIT09IG51bGwgJiYgRTE1ID09PSBhNC5hbHRlcm5hdGUpCiAgICAgICAgICAgICAgICAgICAgICBicmVhayBuOwogICAgICAgICAgICAgICAgICAgIEUxNSA9IHRuNShFMTUpLCBhNCA9IHRuNShhNCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgRTE1ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBFMTUgPSBudWxsOwogICAgICAgICAgICAgIFMyMSAhPT0gbnVsbCAmJiBzbzIoQzE3LCBoMTAsIFMyMSwgRTE1LCBmYWxzZSksIGsxOCAhPT0gbnVsbCAmJiBjMTcgIT09IG51bGwgJiYgc28yKEMxNywgYzE3LCBrMTgsIEUxNSwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGU6IHsKICAgICAgICAgICAgaWYgKGgxMCA9IGQxNSA/IGFuNChkMTUpIDogd2luZG93LCBTMjEgPSBoMTAubm9kZU5hbWUgJiYgaDEwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIFMyMSA9PT0gInNlbGVjdCIgfHwgUzIxID09PSAiaW5wdXQiICYmIGgxMC50eXBlID09PSAiZmlsZSIpCiAgICAgICAgICAgICAgdmFyIF8yNSA9IEZhMjsKICAgICAgICAgICAgZWxzZSBpZiAoYmkzKGgxMCkpCiAgICAgICAgICAgICAgaWYgKEN1KQogICAgICAgICAgICAgICAgXzI1ID0gQmEyOwogICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgXzI1ID0gVWEyOwogICAgICAgICAgICAgICAgdmFyIHcyMSA9IGphMjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAoUzIxID0gaDEwLm5vZGVOYW1lKSAmJiBTMjEudG9Mb3dlckNhc2UoKSA9PT0gImlucHV0IiAmJiAoaDEwLnR5cGUgPT09ICJjaGVja2JveCIgfHwgaDEwLnR5cGUgPT09ICJyYWRpbyIpICYmIChfMjUgPSBWYTIpOwogICAgICAgICAgICBpZiAoXzI1ICYmIChfMjUgPSBfMjUoZTUsIGQxNSkpKSB7CiAgICAgICAgICAgICAgeHUoQzE3LCBfMjUsIHQ0LCB5MTcpOwogICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdzIxICYmIHcyMShlNSwgaDEwLCBkMTUpLCBlNSA9PT0gImZvY3Vzb3V0IiAmJiAodzIxID0gaDEwLl93cmFwcGVyU3RhdGUpICYmIHcyMS5jb250cm9sbGVkICYmIGgxMC50eXBlID09PSAibnVtYmVyIiAmJiBybChoMTAsICJudW1iZXIiLCBoMTAudmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgc3dpdGNoICh3MjEgPSBkMTUgPyBhbjQoZDE1KSA6IHdpbmRvdywgZTUpIHsKICAgICAgICAgICAgY2FzZSAiZm9jdXNpbiI6CiAgICAgICAgICAgICAgKGJpMyh3MjEpIHx8IHcyMS5jb250ZW50RWRpdGFibGUgPT09ICJ0cnVlIikgJiYgKHNuOCA9IHcyMSwgdmwgPSBkMTUsIGV0MTIgPSBudWxsKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZm9jdXNvdXQiOgogICAgICAgICAgICAgIGV0MTIgPSB2bCA9IHNuOCA9IG51bGw7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm1vdXNlZG93biI6CiAgICAgICAgICAgICAgeWwgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJjb250ZXh0bWVudSI6CiAgICAgICAgICAgIGNhc2UgIm1vdXNldXAiOgogICAgICAgICAgICBjYXNlICJkcmFnZW5kIjoKICAgICAgICAgICAgICB5bCA9IGZhbHNlLCBsbyhDMTcsIHQ0LCB5MTcpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZWxlY3Rpb25jaGFuZ2UiOgogICAgICAgICAgICAgIGlmIChBYTIpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAia2V5ZG93biI6CiAgICAgICAgICAgIGNhc2UgImtleXVwIjoKICAgICAgICAgICAgICBsbyhDMTcsIHQ0LCB5MTcpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIE4xNzsKICAgICAgICAgIGlmIChzaTMpCiAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICBzd2l0Y2ggKGU1KSB7CiAgICAgICAgICAgICAgICBjYXNlICJjb21wb3NpdGlvbnN0YXJ0IjoKICAgICAgICAgICAgICAgICAgdmFyIFQyOSA9ICJvbkNvbXBvc2l0aW9uU3RhcnQiOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgY2FzZSAiY29tcG9zaXRpb25lbmQiOgogICAgICAgICAgICAgICAgICBUMjkgPSAib25Db21wb3NpdGlvbkVuZCI7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBjYXNlICJjb21wb3NpdGlvbnVwZGF0ZSI6CiAgICAgICAgICAgICAgICAgIFQyOSA9ICJvbkNvbXBvc2l0aW9uVXBkYXRlIjsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgVDI5ID0gdm9pZCAwOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHVuMyA/IEV1KGU1LCB0NCkgJiYgKFQyOSA9ICJvbkNvbXBvc2l0aW9uRW5kIikgOiBlNSA9PT0gImtleWRvd24iICYmIHQ0LmtleUNvZGUgPT09IDIyOSAmJiAoVDI5ID0gIm9uQ29tcG9zaXRpb25TdGFydCIpOwogICAgICAgICAgVDI5ICYmIChTdSAmJiB0NC5sb2NhbGUgIT09ICJrbyIgJiYgKHVuMyB8fCBUMjkgIT09ICJvbkNvbXBvc2l0aW9uU3RhcnQiID8gVDI5ID09PSAib25Db21wb3NpdGlvbkVuZCIgJiYgdW4zICYmIChOMTcgPSB3dSgpKSA6ICh4ZTE1ID0geTE3LCBpaTMgPSAidmFsdWUiIGluIHhlMTUgPyB4ZTE1LnZhbHVlIDogeGUxNS50ZXh0Q29udGVudCwgdW4zID0gdHJ1ZSkpLCB3MjEgPSBidDcoZDE1LCBUMjkpLCAwIDwgdzIxLmxlbmd0aCAmJiAoVDI5ID0gbmV3IEdpMihUMjksIGU1LCBudWxsLCB0NCwgeTE3KSwgQzE3LnB1c2goeyBldmVudDogVDI5LCBsaXN0ZW5lcnM6IHcyMSB9KSwgTjE3ID8gVDI5LmRhdGEgPSBOMTcgOiAoTjE3ID0ga3UodDQpLCBOMTcgIT09IG51bGwgJiYgKFQyOS5kYXRhID0gTjE3KSkpKSwgKE4xNyA9IE9hMiA/IE1hMihlNSwgdDQpIDogUmEyKGU1LCB0NCkpICYmIChkMTUgPSBidDcoZDE1LCAib25CZWZvcmVJbnB1dCIpLCAwIDwgZDE1Lmxlbmd0aCAmJiAoeTE3ID0gbmV3IEdpMigib25CZWZvcmVJbnB1dCIsICJiZWZvcmVpbnB1dCIsIG51bGwsIHQ0LCB5MTcpLCBDMTcucHVzaCh7IGV2ZW50OiB5MTcsIGxpc3RlbmVyczogZDE1IH0pLCB5MTcuZGF0YSA9IE4xNykpOwogICAgICAgIH0KICAgICAgICBUdShDMTcsIG44KTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBtdDEwKGU1LCBuOCwgdDQpIHsKICAgICAgcmV0dXJuIHsgaW5zdGFuY2U6IGU1LCBsaXN0ZW5lcjogbjgsIGN1cnJlbnRUYXJnZXQ6IHQ0IH07CiAgICB9CiAgICBmdW5jdGlvbiBidDcoZTUsIG44KSB7CiAgICAgIGZvciAodmFyIHQ0ID0gbjggKyAiQ2FwdHVyZSIsIHIzID0gW107IGU1ICE9PSBudWxsOyApIHsKICAgICAgICB2YXIgbDcgPSBlNSwgaTQgPSBsNy5zdGF0ZU5vZGU7CiAgICAgICAgbDcudGFnID09PSA1ICYmIGk0ICE9PSBudWxsICYmIChsNyA9IGk0LCBpNCA9IHN0MTEoZTUsIHQ0KSwgaTQgIT0gbnVsbCAmJiByMy51bnNoaWZ0KG10MTAoZTUsIGk0LCBsNykpLCBpNCA9IHN0MTEoZTUsIG44KSwgaTQgIT0gbnVsbCAmJiByMy5wdXNoKG10MTAoZTUsIGk0LCBsNykpKSwgZTUgPSBlNS5yZXR1cm47CiAgICAgIH0KICAgICAgcmV0dXJuIHIzOwogICAgfQogICAgZnVuY3Rpb24gdG41KGU1KSB7CiAgICAgIGlmIChlNSA9PT0gbnVsbCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgZG8KICAgICAgICBlNSA9IGU1LnJldHVybjsKICAgICAgd2hpbGUgKGU1ICYmIGU1LnRhZyAhPT0gNSk7CiAgICAgIHJldHVybiBlNSB8fCBudWxsOwogICAgfQogICAgZnVuY3Rpb24gc28yKGU1LCBuOCwgdDQsIHIzLCBsNykgewogICAgICBmb3IgKHZhciBpNCA9IG44Ll9yZWFjdE5hbWUsIG80ID0gW107IHQ0ICE9PSBudWxsICYmIHQ0ICE9PSByMzsgKSB7CiAgICAgICAgdmFyIHUxMSA9IHQ0LCBzOCA9IHUxMS5hbHRlcm5hdGUsIGQxNSA9IHUxMS5zdGF0ZU5vZGU7CiAgICAgICAgaWYgKHM4ICE9PSBudWxsICYmIHM4ID09PSByMykKICAgICAgICAgIGJyZWFrOwogICAgICAgIHUxMS50YWcgPT09IDUgJiYgZDE1ICE9PSBudWxsICYmICh1MTEgPSBkMTUsIGw3ID8gKHM4ID0gc3QxMSh0NCwgaTQpLCBzOCAhPSBudWxsICYmIG80LnVuc2hpZnQobXQxMCh0NCwgczgsIHUxMSkpKSA6IGw3IHx8IChzOCA9IHN0MTEodDQsIGk0KSwgczggIT0gbnVsbCAmJiBvNC5wdXNoKG10MTAodDQsIHM4LCB1MTEpKSkpLCB0NCA9IHQ0LnJldHVybjsKICAgICAgfQogICAgICBvNC5sZW5ndGggIT09IDAgJiYgZTUucHVzaCh7IGV2ZW50OiBuOCwgbGlzdGVuZXJzOiBvNCB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGVyMygpIHsKICAgIH0KICAgIHZhciBXcjIgPSBudWxsLCBBcjMgPSBudWxsOwogICAgZnVuY3Rpb24gTXUoZTUsIG44KSB7CiAgICAgIHN3aXRjaCAoZTUpIHsKICAgICAgICBjYXNlICJidXR0b24iOgogICAgICAgIGNhc2UgImlucHV0IjoKICAgICAgICBjYXNlICJzZWxlY3QiOgogICAgICAgIGNhc2UgInRleHRhcmVhIjoKICAgICAgICAgIHJldHVybiAhIW44LmF1dG9Gb2N1czsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBnbChlNSwgbjgpIHsKICAgICAgcmV0dXJuIGU1ID09PSAidGV4dGFyZWEiIHx8IGU1ID09PSAib3B0aW9uIiB8fCBlNSA9PT0gIm5vc2NyaXB0IiB8fCB0eXBlb2YgbjguY2hpbGRyZW4gPT0gInN0cmluZyIgfHwgdHlwZW9mIG44LmNoaWxkcmVuID09ICJudW1iZXIiIHx8IHR5cGVvZiBuOC5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSAib2JqZWN0IiAmJiBuOC5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPT0gbnVsbCAmJiBuOC5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgIT0gbnVsbDsKICAgIH0KICAgIHZhciBhbyA9IHR5cGVvZiBzZXRUaW1lb3V0ID09ICJmdW5jdGlvbiIgPyBzZXRUaW1lb3V0IDogdm9pZCAwLCBRYTIgPSB0eXBlb2YgY2xlYXJUaW1lb3V0ID09ICJmdW5jdGlvbiIgPyBjbGVhclRpbWVvdXQgOiB2b2lkIDA7CiAgICBmdW5jdGlvbiBhaTIoZTUpIHsKICAgICAgZTUubm9kZVR5cGUgPT09IDEgPyBlNS50ZXh0Q29udGVudCA9ICIiIDogZTUubm9kZVR5cGUgPT09IDkgJiYgKGU1ID0gZTUuYm9keSwgZTUgIT0gbnVsbCAmJiAoZTUudGV4dENvbnRlbnQgPSAiIikpOwogICAgfQogICAgZnVuY3Rpb24gdm40KGU1KSB7CiAgICAgIGZvciAoOyBlNSAhPSBudWxsOyBlNSA9IGU1Lm5leHRTaWJsaW5nKSB7CiAgICAgICAgdmFyIG44ID0gZTUubm9kZVR5cGU7CiAgICAgICAgaWYgKG44ID09PSAxIHx8IG44ID09PSAzKQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIGU1OwogICAgfQogICAgZnVuY3Rpb24gZm8oZTUpIHsKICAgICAgZTUgPSBlNS5wcmV2aW91c1NpYmxpbmc7CiAgICAgIGZvciAodmFyIG44ID0gMDsgZTU7ICkgewogICAgICAgIGlmIChlNS5ub2RlVHlwZSA9PT0gOCkgewogICAgICAgICAgdmFyIHQ0ID0gZTUuZGF0YTsKICAgICAgICAgIGlmICh0NCA9PT0gIiQiIHx8IHQ0ID09PSAiJCEiIHx8IHQ0ID09PSAiJD8iKSB7CiAgICAgICAgICAgIGlmIChuOCA9PT0gMCkKICAgICAgICAgICAgICByZXR1cm4gZTU7CiAgICAgICAgICAgIG44LS07CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgdDQgPT09ICIvJCIgJiYgbjgrKzsKICAgICAgICB9CiAgICAgICAgZTUgPSBlNS5wcmV2aW91c1NpYmxpbmc7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB2YXIgUXIyID0gMDsKICAgIGZ1bmN0aW9uICRhMihlNSkgewogICAgICByZXR1cm4geyAkJHR5cGVvZjogS2wsIHRvU3RyaW5nOiBlNSwgdmFsdWVPZjogZTUgfTsKICAgIH0KICAgIHZhciBDcjMgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSwgQ2UxOSA9ICJfX3JlYWN0RmliZXIkIiArIENyMywgbnIzID0gIl9fcmVhY3RQcm9wcyQiICsgQ3IzLCBQbjMgPSAiX19yZWFjdENvbnRhaW5lciQiICsgQ3IzLCBjbyA9ICJfX3JlYWN0RXZlbnRzJCIgKyBDcjM7CiAgICBmdW5jdGlvbiBRZTYoZTUpIHsKICAgICAgdmFyIG44ID0gZTVbQ2UxOV07CiAgICAgIGlmIChuOCkKICAgICAgICByZXR1cm4gbjg7CiAgICAgIGZvciAodmFyIHQ0ID0gZTUucGFyZW50Tm9kZTsgdDQ7ICkgewogICAgICAgIGlmIChuOCA9IHQ0W1BuM10gfHwgdDRbQ2UxOV0pIHsKICAgICAgICAgIGlmICh0NCA9IG44LmFsdGVybmF0ZSwgbjguY2hpbGQgIT09IG51bGwgfHwgdDQgIT09IG51bGwgJiYgdDQuY2hpbGQgIT09IG51bGwpCiAgICAgICAgICAgIGZvciAoZTUgPSBmbyhlNSk7IGU1ICE9PSBudWxsOyApIHsKICAgICAgICAgICAgICBpZiAodDQgPSBlNVtDZTE5XSkKICAgICAgICAgICAgICAgIHJldHVybiB0NDsKICAgICAgICAgICAgICBlNSA9IGZvKGU1KTsKICAgICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG44OwogICAgICAgIH0KICAgICAgICBlNSA9IHQ0LCB0NCA9IGU1LnBhcmVudE5vZGU7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBFdDEwKGU1KSB7CiAgICAgIHJldHVybiBlNSA9IGU1W0NlMTldIHx8IGU1W1BuM10sICFlNSB8fCBlNS50YWcgIT09IDUgJiYgZTUudGFnICE9PSA2ICYmIGU1LnRhZyAhPT0gMTMgJiYgZTUudGFnICE9PSAzID8gbnVsbCA6IGU1OwogICAgfQogICAgZnVuY3Rpb24gYW40KGU1KSB7CiAgICAgIGlmIChlNS50YWcgPT09IDUgfHwgZTUudGFnID09PSA2KQogICAgICAgIHJldHVybiBlNS5zdGF0ZU5vZGU7CiAgICAgIHRocm93IEVycm9yKHYxNSgzMykpOwogICAgfQogICAgZnVuY3Rpb24gX3IyKGU1KSB7CiAgICAgIHJldHVybiBlNVtucjNdIHx8IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBSdShlNSkgewogICAgICB2YXIgbjggPSBlNVtjb107CiAgICAgIHJldHVybiBuOCA9PT0gdm9pZCAwICYmIChuOCA9IGU1W2NvXSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpLCBuODsKICAgIH0KICAgIHZhciB3bCA9IFtdLCBmbjQgPSAtMTsKICAgIGZ1bmN0aW9uIFZlNyhlNSkgewogICAgICByZXR1cm4geyBjdXJyZW50OiBlNSB9OwogICAgfQogICAgZnVuY3Rpb24gTzE1KGU1KSB7CiAgICAgIDAgPiBmbjQgfHwgKGU1LmN1cnJlbnQgPSB3bFtmbjRdLCB3bFtmbjRdID0gbnVsbCwgZm40LS0pOwogICAgfQogICAgZnVuY3Rpb24gRDIwKGU1LCBuOCkgewogICAgICBmbjQrKywgd2xbZm40XSA9IGU1LmN1cnJlbnQsIGU1LmN1cnJlbnQgPSBuODsKICAgIH0KICAgIHZhciBGZTEzID0ge30sICQyMSA9IFZlNyhGZTEzKSwgWjIyID0gVmU3KGZhbHNlKSwgS2U2ID0gRmUxMzsKICAgIGZ1bmN0aW9uIHhuNChlNSwgbjgpIHsKICAgICAgdmFyIHQ0ID0gZTUudHlwZS5jb250ZXh0VHlwZXM7CiAgICAgIGlmICghdDQpCiAgICAgICAgcmV0dXJuIEZlMTM7CiAgICAgIHZhciByMyA9IGU1LnN0YXRlTm9kZTsKICAgICAgaWYgKHIzICYmIHIzLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IG44KQogICAgICAgIHJldHVybiByMy5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDsKICAgICAgdmFyIGw3ID0ge30sIGk0OwogICAgICBmb3IgKGk0IGluIHQ0KQogICAgICAgIGw3W2k0XSA9IG44W2k0XTsKICAgICAgcmV0dXJuIHIzICYmIChlNSA9IGU1LnN0YXRlTm9kZSwgZTUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9IG44LCBlNS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IGw3KSwgbDc7CiAgICB9CiAgICBmdW5jdGlvbiBKMTQoZTUpIHsKICAgICAgcmV0dXJuIGU1ID0gZTUuY2hpbGRDb250ZXh0VHlwZXMsIGU1ICE9IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiB0cjMoKSB7CiAgICAgIE8xNShaMjIpLCBPMTUoJDIxKTsKICAgIH0KICAgIGZ1bmN0aW9uIHBvKGU1LCBuOCwgdDQpIHsKICAgICAgaWYgKCQyMS5jdXJyZW50ICE9PSBGZTEzKQogICAgICAgIHRocm93IEVycm9yKHYxNSgxNjgpKTsKICAgICAgRDIwKCQyMSwgbjgpLCBEMjAoWjIyLCB0NCk7CiAgICB9CiAgICBmdW5jdGlvbiBEdShlNSwgbjgsIHQ0KSB7CiAgICAgIHZhciByMyA9IGU1LnN0YXRlTm9kZTsKICAgICAgaWYgKGU1ID0gbjguY2hpbGRDb250ZXh0VHlwZXMsIHR5cGVvZiByMy5nZXRDaGlsZENvbnRleHQgIT0gImZ1bmN0aW9uIikKICAgICAgICByZXR1cm4gdDQ7CiAgICAgIHIzID0gcjMuZ2V0Q2hpbGRDb250ZXh0KCk7CiAgICAgIGZvciAodmFyIGw3IGluIHIzKQogICAgICAgIGlmICghKGw3IGluIGU1KSkKICAgICAgICAgIHRocm93IEVycm9yKHYxNSgxMDgsIGRuNChuOCkgfHwgIlVua25vd24iLCBsNykpOwogICAgICByZXR1cm4gTTI1KHt9LCB0NCwgcjMpOwogICAgfQogICAgZnVuY3Rpb24gV3QxMyhlNSkgewogICAgICByZXR1cm4gZTUgPSAoZTUgPSBlNS5zdGF0ZU5vZGUpICYmIGU1Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0IHx8IEZlMTMsIEtlNiA9ICQyMS5jdXJyZW50LCBEMjAoJDIxLCBlNSksIEQyMChaMjIsIFoyMi5jdXJyZW50KSwgdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIG1vMihlNSwgbjgsIHQ0KSB7CiAgICAgIHZhciByMyA9IGU1LnN0YXRlTm9kZTsKICAgICAgaWYgKCFyMykKICAgICAgICB0aHJvdyBFcnJvcih2MTUoMTY5KSk7CiAgICAgIHQ0ID8gKGU1ID0gRHUoZTUsIG44LCBLZTYpLCByMy5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCA9IGU1LCBPMTUoWjIyKSwgTzE1KCQyMSksIEQyMCgkMjEsIGU1KSkgOiBPMTUoWjIyKSwgRDIwKFoyMiwgdDQpOwogICAgfQogICAgdmFyIGZpMiA9IG51bGwsIFhlNSA9IG51bGwsIFlhMiA9IFUyOS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksIGNpMiA9IFUyOS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLCBTbCA9IFUyOS51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaywgWGEyID0gVTI5LnVuc3RhYmxlX3Nob3VsZFlpZWxkLCBobyA9IFUyOS51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsIEVsID0gVTI5LnVuc3RhYmxlX25vdywgS2EyID0gVTI5LnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLCBOcjIgPSBVMjkudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksIEl1ID0gVTI5LnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LCBGdSA9IFUyOS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwganUgPSBVMjkudW5zdGFibGVfTG93UHJpb3JpdHksIFV1ID0gVTI5LnVuc3RhYmxlX0lkbGVQcmlvcml0eSwgJHIzID0ge30sIEdhMiA9IGhvICE9PSB2b2lkIDAgPyBobyA6IGZ1bmN0aW9uKCkgewogICAgfSwgbWUxOCA9IG51bGwsIEF0MTEgPSBudWxsLCBZcjMgPSBmYWxzZSwgdm8gPSBFbCgpLCBBMjAgPSAxZTQgPiB2byA/IEVsIDogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBFbCgpIC0gdm87CiAgICB9OwogICAgZnVuY3Rpb24gQ240KCkgewogICAgICBzd2l0Y2ggKEthMigpKSB7CiAgICAgICAgY2FzZSBOcjI6CiAgICAgICAgICByZXR1cm4gOTk7CiAgICAgICAgY2FzZSBJdToKICAgICAgICAgIHJldHVybiA5ODsKICAgICAgICBjYXNlIEZ1OgogICAgICAgICAgcmV0dXJuIDk3OwogICAgICAgIGNhc2UganU6CiAgICAgICAgICByZXR1cm4gOTY7CiAgICAgICAgY2FzZSBVdToKICAgICAgICAgIHJldHVybiA5NTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMzMikpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBWdShlNSkgewogICAgICBzd2l0Y2ggKGU1KSB7CiAgICAgICAgY2FzZSA5OToKICAgICAgICAgIHJldHVybiBOcjI7CiAgICAgICAgY2FzZSA5ODoKICAgICAgICAgIHJldHVybiBJdTsKICAgICAgICBjYXNlIDk3OgogICAgICAgICAgcmV0dXJuIEZ1OwogICAgICAgIGNhc2UgOTY6CiAgICAgICAgICByZXR1cm4ganU7CiAgICAgICAgY2FzZSA5NToKICAgICAgICAgIHJldHVybiBVdTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMzMikpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBHZTgoZTUsIG44KSB7CiAgICAgIHJldHVybiBlNSA9IFZ1KGU1KSwgWWEyKGU1LCBuOCk7CiAgICB9CiAgICBmdW5jdGlvbiBodDEzKGU1LCBuOCwgdDQpIHsKICAgICAgcmV0dXJuIGU1ID0gVnUoZTUpLCBjaTIoZTUsIG44LCB0NCk7CiAgICB9CiAgICBmdW5jdGlvbiBwZTEzKCkgewogICAgICBpZiAoQXQxMSAhPT0gbnVsbCkgewogICAgICAgIHZhciBlNSA9IEF0MTE7CiAgICAgICAgQXQxMSA9IG51bGwsIFNsKGU1KTsKICAgICAgfQogICAgICBCdSgpOwogICAgfQogICAgZnVuY3Rpb24gQnUoKSB7CiAgICAgIGlmICghWXIzICYmIG1lMTggIT09IG51bGwpIHsKICAgICAgICBZcjMgPSB0cnVlOwogICAgICAgIHZhciBlNSA9IDA7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciBuOCA9IG1lMTg7CiAgICAgICAgICBHZTgoOTksIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBmb3IgKDsgZTUgPCBuOC5sZW5ndGg7IGU1KyspIHsKICAgICAgICAgICAgICB2YXIgdDQgPSBuOFtlNV07CiAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgIHQ0ID0gdDQodHJ1ZSk7CiAgICAgICAgICAgICAgd2hpbGUgKHQ0ICE9PSBudWxsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSksIG1lMTggPSBudWxsOwogICAgICAgIH0gY2F0Y2ggKHQ0KSB7CiAgICAgICAgICB0aHJvdyBtZTE4ICE9PSBudWxsICYmIChtZTE4ID0gbWUxOC5zbGljZShlNSArIDEpKSwgY2kyKE5yMiwgcGUxMyksIHQ0OwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBZcjMgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHZhciBaYTIgPSBxZTguUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7CiAgICBmdW5jdGlvbiBvZTEyKGU1LCBuOCkgewogICAgICBpZiAoZTUgJiYgZTUuZGVmYXVsdFByb3BzKSB7CiAgICAgICAgbjggPSBNMjUoe30sIG44KSwgZTUgPSBlNS5kZWZhdWx0UHJvcHM7CiAgICAgICAgZm9yICh2YXIgdDQgaW4gZTUpCiAgICAgICAgICBuOFt0NF0gPT09IHZvaWQgMCAmJiAobjhbdDRdID0gZTVbdDRdKTsKICAgICAgICByZXR1cm4gbjg7CiAgICAgIH0KICAgICAgcmV0dXJuIG44OwogICAgfQogICAgdmFyIHJyMyA9IFZlNyhudWxsKSwgbHIzID0gbnVsbCwgY24zID0gbnVsbCwgaXIzID0gbnVsbDsKICAgIGZ1bmN0aW9uIGRpMygpIHsKICAgICAgaXIzID0gY24zID0gbHIzID0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIHBpMyhlNSkgewogICAgICB2YXIgbjggPSBycjMuY3VycmVudDsKICAgICAgTzE1KHJyMyksIGU1LnR5cGUuX2NvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG44OwogICAgfQogICAgZnVuY3Rpb24gSHUoZTUsIG44KSB7CiAgICAgIGZvciAoOyBlNSAhPT0gbnVsbDsgKSB7CiAgICAgICAgdmFyIHQ0ID0gZTUuYWx0ZXJuYXRlOwogICAgICAgIGlmICgoZTUuY2hpbGRMYW5lcyAmIG44KSA9PT0gbjgpIHsKICAgICAgICAgIGlmICh0NCA9PT0gbnVsbCB8fCAodDQuY2hpbGRMYW5lcyAmIG44KSA9PT0gbjgpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgdDQuY2hpbGRMYW5lcyB8PSBuODsKICAgICAgICB9IGVsc2UKICAgICAgICAgIGU1LmNoaWxkTGFuZXMgfD0gbjgsIHQ0ICE9PSBudWxsICYmICh0NC5jaGlsZExhbmVzIHw9IG44KTsKICAgICAgICBlNSA9IGU1LnJldHVybjsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24geW41KGU1LCBuOCkgewogICAgICBscjMgPSBlNSwgaXIzID0gY24zID0gbnVsbCwgZTUgPSBlNS5kZXBlbmRlbmNpZXMsIGU1ICE9PSBudWxsICYmIGU1LmZpcnN0Q29udGV4dCAhPT0gbnVsbCAmJiAoKGU1LmxhbmVzICYgbjgpICE9PSAwICYmICh1ZTE4ID0gdHJ1ZSksIGU1LmZpcnN0Q29udGV4dCA9IG51bGwpOwogICAgfQogICAgZnVuY3Rpb24gcmUyMChlNSwgbjgpIHsKICAgICAgaWYgKGlyMyAhPT0gZTUgJiYgbjggIT09IGZhbHNlICYmIG44ICE9PSAwKQogICAgICAgIGlmICgodHlwZW9mIG44ICE9ICJudW1iZXIiIHx8IG44ID09PSAxMDczNzQxODIzKSAmJiAoaXIzID0gZTUsIG44ID0gMTA3Mzc0MTgyMyksIG44ID0geyBjb250ZXh0OiBlNSwgb2JzZXJ2ZWRCaXRzOiBuOCwgbmV4dDogbnVsbCB9LCBjbjMgPT09IG51bGwpIHsKICAgICAgICAgIGlmIChscjMgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IEVycm9yKHYxNSgzMDgpKTsKICAgICAgICAgIGNuMyA9IG44LCBscjMuZGVwZW5kZW5jaWVzID0geyBsYW5lczogMCwgZmlyc3RDb250ZXh0OiBuOCwgcmVzcG9uZGVyczogbnVsbCB9OwogICAgICAgIH0gZWxzZQogICAgICAgICAgY24zID0gY24zLm5leHQgPSBuODsKICAgICAgcmV0dXJuIGU1Ll9jdXJyZW50VmFsdWU7CiAgICB9CiAgICB2YXIgRWUxMCA9IGZhbHNlOwogICAgZnVuY3Rpb24gbWkyKGU1KSB7CiAgICAgIGU1LnVwZGF0ZVF1ZXVlID0geyBiYXNlU3RhdGU6IGU1Lm1lbW9pemVkU3RhdGUsIGZpcnN0QmFzZVVwZGF0ZTogbnVsbCwgbGFzdEJhc2VVcGRhdGU6IG51bGwsIHNoYXJlZDogeyBwZW5kaW5nOiBudWxsIH0sIGVmZmVjdHM6IG51bGwgfTsKICAgIH0KICAgIGZ1bmN0aW9uIFd1KGU1LCBuOCkgewogICAgICBlNSA9IGU1LnVwZGF0ZVF1ZXVlLCBuOC51cGRhdGVRdWV1ZSA9PT0gZTUgJiYgKG44LnVwZGF0ZVF1ZXVlID0geyBiYXNlU3RhdGU6IGU1LmJhc2VTdGF0ZSwgZmlyc3RCYXNlVXBkYXRlOiBlNS5maXJzdEJhc2VVcGRhdGUsIGxhc3RCYXNlVXBkYXRlOiBlNS5sYXN0QmFzZVVwZGF0ZSwgc2hhcmVkOiBlNS5zaGFyZWQsIGVmZmVjdHM6IGU1LmVmZmVjdHMgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBMZTEwKGU1LCBuOCkgewogICAgICByZXR1cm4geyBldmVudFRpbWU6IGU1LCBsYW5lOiBuOCwgdGFnOiAwLCBwYXlsb2FkOiBudWxsLCBjYWxsYmFjazogbnVsbCwgbmV4dDogbnVsbCB9OwogICAgfQogICAgZnVuY3Rpb24gemU5KGU1LCBuOCkgewogICAgICBpZiAoZTUgPSBlNS51cGRhdGVRdWV1ZSwgZTUgIT09IG51bGwpIHsKICAgICAgICBlNSA9IGU1LnNoYXJlZDsKICAgICAgICB2YXIgdDQgPSBlNS5wZW5kaW5nOwogICAgICAgIHQ0ID09PSBudWxsID8gbjgubmV4dCA9IG44IDogKG44Lm5leHQgPSB0NC5uZXh0LCB0NC5uZXh0ID0gbjgpLCBlNS5wZW5kaW5nID0gbjg7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHlvMihlNSwgbjgpIHsKICAgICAgdmFyIHQ0ID0gZTUudXBkYXRlUXVldWUsIHIzID0gZTUuYWx0ZXJuYXRlOwogICAgICBpZiAocjMgIT09IG51bGwgJiYgKHIzID0gcjMudXBkYXRlUXVldWUsIHQ0ID09PSByMykpIHsKICAgICAgICB2YXIgbDcgPSBudWxsLCBpNCA9IG51bGw7CiAgICAgICAgaWYgKHQ0ID0gdDQuZmlyc3RCYXNlVXBkYXRlLCB0NCAhPT0gbnVsbCkgewogICAgICAgICAgZG8gewogICAgICAgICAgICB2YXIgbzQgPSB7IGV2ZW50VGltZTogdDQuZXZlbnRUaW1lLCBsYW5lOiB0NC5sYW5lLCB0YWc6IHQ0LnRhZywgcGF5bG9hZDogdDQucGF5bG9hZCwgY2FsbGJhY2s6IHQ0LmNhbGxiYWNrLCBuZXh0OiBudWxsIH07CiAgICAgICAgICAgIGk0ID09PSBudWxsID8gbDcgPSBpNCA9IG80IDogaTQgPSBpNC5uZXh0ID0gbzQsIHQ0ID0gdDQubmV4dDsKICAgICAgICAgIH0gd2hpbGUgKHQ0ICE9PSBudWxsKTsKICAgICAgICAgIGk0ID09PSBudWxsID8gbDcgPSBpNCA9IG44IDogaTQgPSBpNC5uZXh0ID0gbjg7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBsNyA9IGk0ID0gbjg7CiAgICAgICAgdDQgPSB7IGJhc2VTdGF0ZTogcjMuYmFzZVN0YXRlLCBmaXJzdEJhc2VVcGRhdGU6IGw3LCBsYXN0QmFzZVVwZGF0ZTogaTQsIHNoYXJlZDogcjMuc2hhcmVkLCBlZmZlY3RzOiByMy5lZmZlY3RzIH0sIGU1LnVwZGF0ZVF1ZXVlID0gdDQ7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGU1ID0gdDQubGFzdEJhc2VVcGRhdGUsIGU1ID09PSBudWxsID8gdDQuZmlyc3RCYXNlVXBkYXRlID0gbjggOiBlNS5uZXh0ID0gbjgsIHQ0Lmxhc3RCYXNlVXBkYXRlID0gbjg7CiAgICB9CiAgICBmdW5jdGlvbiB2dDEwKGU1LCBuOCwgdDQsIHIzKSB7CiAgICAgIHZhciBsNyA9IGU1LnVwZGF0ZVF1ZXVlOwogICAgICBFZTEwID0gZmFsc2U7CiAgICAgIHZhciBpNCA9IGw3LmZpcnN0QmFzZVVwZGF0ZSwgbzQgPSBsNy5sYXN0QmFzZVVwZGF0ZSwgdTExID0gbDcuc2hhcmVkLnBlbmRpbmc7CiAgICAgIGlmICh1MTEgIT09IG51bGwpIHsKICAgICAgICBsNy5zaGFyZWQucGVuZGluZyA9IG51bGw7CiAgICAgICAgdmFyIHM4ID0gdTExLCBkMTUgPSBzOC5uZXh0OwogICAgICAgIHM4Lm5leHQgPSBudWxsLCBvNCA9PT0gbnVsbCA/IGk0ID0gZDE1IDogbzQubmV4dCA9IGQxNSwgbzQgPSBzODsKICAgICAgICB2YXIgeTE3ID0gZTUuYWx0ZXJuYXRlOwogICAgICAgIGlmICh5MTcgIT09IG51bGwpIHsKICAgICAgICAgIHkxNyA9IHkxNy51cGRhdGVRdWV1ZTsKICAgICAgICAgIHZhciBDMTcgPSB5MTcubGFzdEJhc2VVcGRhdGU7CiAgICAgICAgICBDMTcgIT09IG80ICYmIChDMTcgPT09IG51bGwgPyB5MTcuZmlyc3RCYXNlVXBkYXRlID0gZDE1IDogQzE3Lm5leHQgPSBkMTUsIHkxNy5sYXN0QmFzZVVwZGF0ZSA9IHM4KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGk0ICE9PSBudWxsKSB7CiAgICAgICAgQzE3ID0gbDcuYmFzZVN0YXRlLCBvNCA9IDAsIHkxNyA9IGQxNSA9IHM4ID0gbnVsbDsKICAgICAgICBkbyB7CiAgICAgICAgICB1MTEgPSBpNC5sYW5lOwogICAgICAgICAgdmFyIGgxMCA9IGk0LmV2ZW50VGltZTsKICAgICAgICAgIGlmICgocjMgJiB1MTEpID09PSB1MTEpIHsKICAgICAgICAgICAgeTE3ICE9PSBudWxsICYmICh5MTcgPSB5MTcubmV4dCA9IHsgZXZlbnRUaW1lOiBoMTAsIGxhbmU6IDAsIHRhZzogaTQudGFnLCBwYXlsb2FkOiBpNC5wYXlsb2FkLCBjYWxsYmFjazogaTQuY2FsbGJhY2ssIG5leHQ6IG51bGwgfSk7CiAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICB2YXIgUzIxID0gZTUsIGsxOCA9IGk0OwogICAgICAgICAgICAgIHN3aXRjaCAodTExID0gbjgsIGgxMCA9IHQ0LCBrMTgudGFnKSB7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgIGlmIChTMjEgPSBrMTgucGF5bG9hZCwgdHlwZW9mIFMyMSA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICAgICAgQzE3ID0gUzIxLmNhbGwoaDEwLCBDMTcsIHUxMSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBDMTcgPSBTMjE7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgIFMyMS5mbGFncyA9IFMyMS5mbGFncyAmIC00MDk3IHwgNjQ7CiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgIGlmIChTMjEgPSBrMTgucGF5bG9hZCwgdTExID0gdHlwZW9mIFMyMSA9PSAiZnVuY3Rpb24iID8gUzIxLmNhbGwoaDEwLCBDMTcsIHUxMSkgOiBTMjEsIHUxMSA9PSBudWxsKQogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIEMxNyA9IE0yNSh7fSwgQzE3LCB1MTEpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICBFZTEwID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaTQuY2FsbGJhY2sgIT09IG51bGwgJiYgKGU1LmZsYWdzIHw9IDMyLCB1MTEgPSBsNy5lZmZlY3RzLCB1MTEgPT09IG51bGwgPyBsNy5lZmZlY3RzID0gW2k0XSA6IHUxMS5wdXNoKGk0KSk7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgaDEwID0geyBldmVudFRpbWU6IGgxMCwgbGFuZTogdTExLCB0YWc6IGk0LnRhZywgcGF5bG9hZDogaTQucGF5bG9hZCwgY2FsbGJhY2s6IGk0LmNhbGxiYWNrLCBuZXh0OiBudWxsIH0sIHkxNyA9PT0gbnVsbCA/IChkMTUgPSB5MTcgPSBoMTAsIHM4ID0gQzE3KSA6IHkxNyA9IHkxNy5uZXh0ID0gaDEwLCBvNCB8PSB1MTE7CiAgICAgICAgICBpZiAoaTQgPSBpNC5uZXh0LCBpNCA9PT0gbnVsbCkgewogICAgICAgICAgICBpZiAodTExID0gbDcuc2hhcmVkLnBlbmRpbmcsIHUxMSA9PT0gbnVsbCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgaTQgPSB1MTEubmV4dCwgdTExLm5leHQgPSBudWxsLCBsNy5sYXN0QmFzZVVwZGF0ZSA9IHUxMSwgbDcuc2hhcmVkLnBlbmRpbmcgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKDEpOwogICAgICAgIHkxNyA9PT0gbnVsbCAmJiAoczggPSBDMTcpLCBsNy5iYXNlU3RhdGUgPSBzOCwgbDcuZmlyc3RCYXNlVXBkYXRlID0gZDE1LCBsNy5sYXN0QmFzZVVwZGF0ZSA9IHkxNywgeHQxMyB8PSBvNCwgZTUubGFuZXMgPSBvNCwgZTUubWVtb2l6ZWRTdGF0ZSA9IEMxNzsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gZ28oZTUsIG44LCB0NCkgewogICAgICBpZiAoZTUgPSBuOC5lZmZlY3RzLCBuOC5lZmZlY3RzID0gbnVsbCwgZTUgIT09IG51bGwpCiAgICAgICAgZm9yIChuOCA9IDA7IG44IDwgZTUubGVuZ3RoOyBuOCsrKSB7CiAgICAgICAgICB2YXIgcjMgPSBlNVtuOF0sIGw3ID0gcjMuY2FsbGJhY2s7CiAgICAgICAgICBpZiAobDcgIT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKHIzLmNhbGxiYWNrID0gbnVsbCwgcjMgPSB0NCwgdHlwZW9mIGw3ICE9ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDE5MSwgbDcpKTsKICAgICAgICAgICAgbDcuY2FsbChyMyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgdmFyIEF1ID0gbmV3IHlyMy5Db21wb25lbnQoKS5yZWZzOwogICAgZnVuY3Rpb24gb3IyKGU1LCBuOCwgdDQsIHIzKSB7CiAgICAgIG44ID0gZTUubWVtb2l6ZWRTdGF0ZSwgdDQgPSB0NChyMywgbjgpLCB0NCA9IHQ0ID09IG51bGwgPyBuOCA6IE0yNSh7fSwgbjgsIHQ0KSwgZTUubWVtb2l6ZWRTdGF0ZSA9IHQ0LCBlNS5sYW5lcyA9PT0gMCAmJiAoZTUudXBkYXRlUXVldWUuYmFzZVN0YXRlID0gdDQpOwogICAgfQogICAgdmFyIFByMiA9IHsgaXNNb3VudGVkOiBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gKGU1ID0gZTUuX3JlYWN0SW50ZXJuYWxzKSA/IGJlMTQoZTUpID09PSBlNSA6IGZhbHNlOwogICAgfSwgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbihlNSwgbjgsIHQ0KSB7CiAgICAgIGU1ID0gZTUuX3JlYWN0SW50ZXJuYWxzOwogICAgICB2YXIgcjMgPSBxMjAoKSwgbDcgPSBPZTE0KGU1KSwgaTQgPSBMZTEwKHIzLCBsNyk7CiAgICAgIGk0LnBheWxvYWQgPSBuOCwgdDQgIT0gbnVsbCAmJiAoaTQuY2FsbGJhY2sgPSB0NCksIHplOShlNSwgaTQpLCBNZTEzKGU1LCBsNywgcjMpOwogICAgfSwgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24oZTUsIG44LCB0NCkgewogICAgICBlNSA9IGU1Ll9yZWFjdEludGVybmFsczsKICAgICAgdmFyIHIzID0gcTIwKCksIGw3ID0gT2UxNChlNSksIGk0ID0gTGUxMChyMywgbDcpOwogICAgICBpNC50YWcgPSAxLCBpNC5wYXlsb2FkID0gbjgsIHQ0ICE9IG51bGwgJiYgKGk0LmNhbGxiYWNrID0gdDQpLCB6ZTkoZTUsIGk0KSwgTWUxMyhlNSwgbDcsIHIzKTsKICAgIH0sIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24oZTUsIG44KSB7CiAgICAgIGU1ID0gZTUuX3JlYWN0SW50ZXJuYWxzOwogICAgICB2YXIgdDQgPSBxMjAoKSwgcjMgPSBPZTE0KGU1KSwgbDcgPSBMZTEwKHQ0LCByMyk7CiAgICAgIGw3LnRhZyA9IDIsIG44ICE9IG51bGwgJiYgKGw3LmNhbGxiYWNrID0gbjgpLCB6ZTkoZTUsIGw3KSwgTWUxMyhlNSwgcjMsIHQ0KTsKICAgIH0gfTsKICAgIGZ1bmN0aW9uIHdvMihlNSwgbjgsIHQ0LCByMywgbDcsIGk0LCBvNCkgewogICAgICByZXR1cm4gZTUgPSBlNS5zdGF0ZU5vZGUsIHR5cGVvZiBlNS5zaG91bGRDb21wb25lbnRVcGRhdGUgPT0gImZ1bmN0aW9uIiA/IGU1LnNob3VsZENvbXBvbmVudFVwZGF0ZShyMywgaTQsIG80KSA6IG44LnByb3RvdHlwZSAmJiBuOC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPyAhcHQxMih0NCwgcjMpIHx8ICFwdDEyKGw3LCBpNCkgOiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gUXUoZTUsIG44LCB0NCkgewogICAgICB2YXIgcjMgPSBmYWxzZSwgbDcgPSBGZTEzLCBpNCA9IG44LmNvbnRleHRUeXBlOwogICAgICByZXR1cm4gdHlwZW9mIGk0ID09ICJvYmplY3QiICYmIGk0ICE9PSBudWxsID8gaTQgPSByZTIwKGk0KSA6IChsNyA9IEoxNChuOCkgPyBLZTYgOiAkMjEuY3VycmVudCwgcjMgPSBuOC5jb250ZXh0VHlwZXMsIGk0ID0gKHIzID0gcjMgIT0gbnVsbCkgPyB4bjQoZTUsIGw3KSA6IEZlMTMpLCBuOCA9IG5ldyBuOCh0NCwgaTQpLCBlNS5tZW1vaXplZFN0YXRlID0gbjguc3RhdGUgIT09IG51bGwgJiYgbjguc3RhdGUgIT09IHZvaWQgMCA/IG44LnN0YXRlIDogbnVsbCwgbjgudXBkYXRlciA9IFByMiwgZTUuc3RhdGVOb2RlID0gbjgsIG44Ll9yZWFjdEludGVybmFscyA9IGU1LCByMyAmJiAoZTUgPSBlNS5zdGF0ZU5vZGUsIGU1Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPSBsNywgZTUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQgPSBpNCksIG44OwogICAgfQogICAgZnVuY3Rpb24gU28oZTUsIG44LCB0NCwgcjMpIHsKICAgICAgZTUgPSBuOC5zdGF0ZSwgdHlwZW9mIG44LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT0gImZ1bmN0aW9uIiAmJiBuOC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHQ0LCByMyksIHR5cGVvZiBuOC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PSAiZnVuY3Rpb24iICYmIG44LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHQ0LCByMyksIG44LnN0YXRlICE9PSBlNSAmJiBQcjIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShuOCwgbjguc3RhdGUsIG51bGwpOwogICAgfQogICAgZnVuY3Rpb24ga2woZTUsIG44LCB0NCwgcjMpIHsKICAgICAgdmFyIGw3ID0gZTUuc3RhdGVOb2RlOwogICAgICBsNy5wcm9wcyA9IHQ0LCBsNy5zdGF0ZSA9IGU1Lm1lbW9pemVkU3RhdGUsIGw3LnJlZnMgPSBBdSwgbWkyKGU1KTsKICAgICAgdmFyIGk0ID0gbjguY29udGV4dFR5cGU7CiAgICAgIHR5cGVvZiBpNCA9PSAib2JqZWN0IiAmJiBpNCAhPT0gbnVsbCA/IGw3LmNvbnRleHQgPSByZTIwKGk0KSA6IChpNCA9IEoxNChuOCkgPyBLZTYgOiAkMjEuY3VycmVudCwgbDcuY29udGV4dCA9IHhuNChlNSwgaTQpKSwgdnQxMChlNSwgdDQsIGw3LCByMyksIGw3LnN0YXRlID0gZTUubWVtb2l6ZWRTdGF0ZSwgaTQgPSBuOC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIHR5cGVvZiBpNCA9PSAiZnVuY3Rpb24iICYmIChvcjIoZTUsIG44LCBpNCwgdDQpLCBsNy5zdGF0ZSA9IGU1Lm1lbW9pemVkU3RhdGUpLCB0eXBlb2YgbjguZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09ICJmdW5jdGlvbiIgfHwgdHlwZW9mIGw3LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09ICJmdW5jdGlvbiIgfHwgdHlwZW9mIGw3LlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgIT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgbDcuY29tcG9uZW50V2lsbE1vdW50ICE9ICJmdW5jdGlvbiIgfHwgKG44ID0gbDcuc3RhdGUsIHR5cGVvZiBsNy5jb21wb25lbnRXaWxsTW91bnQgPT0gImZ1bmN0aW9uIiAmJiBsNy5jb21wb25lbnRXaWxsTW91bnQoKSwgdHlwZW9mIGw3LlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT0gImZ1bmN0aW9uIiAmJiBsNy5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksIG44ICE9PSBsNy5zdGF0ZSAmJiBQcjIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShsNywgbDcuc3RhdGUsIG51bGwpLCB2dDEwKGU1LCB0NCwgbDcsIHIzKSwgbDcuc3RhdGUgPSBlNS5tZW1vaXplZFN0YXRlKSwgdHlwZW9mIGw3LmNvbXBvbmVudERpZE1vdW50ID09ICJmdW5jdGlvbiIgJiYgKGU1LmZsYWdzIHw9IDQpOwogICAgfQogICAgdmFyIFJ0MTIgPSBBcnJheS5pc0FycmF5OwogICAgZnVuY3Rpb24gRm40KGU1LCBuOCwgdDQpIHsKICAgICAgaWYgKGU1ID0gdDQucmVmLCBlNSAhPT0gbnVsbCAmJiB0eXBlb2YgZTUgIT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgZTUgIT0gIm9iamVjdCIpIHsKICAgICAgICBpZiAodDQuX293bmVyKSB7CiAgICAgICAgICBpZiAodDQgPSB0NC5fb3duZXIsIHQ0KSB7CiAgICAgICAgICAgIGlmICh0NC50YWcgIT09IDEpCiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMwOSkpOwogICAgICAgICAgICB2YXIgcjMgPSB0NC5zdGF0ZU5vZGU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXIzKQogICAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMTQ3LCBlNSkpOwogICAgICAgICAgdmFyIGw3ID0gIiIgKyBlNTsKICAgICAgICAgIHJldHVybiBuOCAhPT0gbnVsbCAmJiBuOC5yZWYgIT09IG51bGwgJiYgdHlwZW9mIG44LnJlZiA9PSAiZnVuY3Rpb24iICYmIG44LnJlZi5fc3RyaW5nUmVmID09PSBsNyA/IG44LnJlZiA6IChuOCA9IGZ1bmN0aW9uKGk0KSB7CiAgICAgICAgICAgIHZhciBvNCA9IHIzLnJlZnM7CiAgICAgICAgICAgIG80ID09PSBBdSAmJiAobzQgPSByMy5yZWZzID0ge30pLCBpNCA9PT0gbnVsbCA/IGRlbGV0ZSBvNFtsN10gOiBvNFtsN10gPSBpNDsKICAgICAgICAgIH0sIG44Ll9zdHJpbmdSZWYgPSBsNywgbjgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGU1ICE9ICJzdHJpbmciKQogICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDI4NCkpOwogICAgICAgIGlmICghdDQuX293bmVyKQogICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDI5MCwgZTUpKTsKICAgICAgfQogICAgICByZXR1cm4gZTU7CiAgICB9CiAgICBmdW5jdGlvbiBEdDExKGU1LCBuOCkgewogICAgICBpZiAoZTUudHlwZSAhPT0gInRleHRhcmVhIikKICAgICAgICB0aHJvdyBFcnJvcih2MTUoMzEsIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuOCkgPT09ICJbb2JqZWN0IE9iamVjdF0iID8gIm9iamVjdCB3aXRoIGtleXMgeyIgKyBPYmplY3Qua2V5cyhuOCkuam9pbigiLCAiKSArICJ9IiA6IG44KSk7CiAgICB9CiAgICBmdW5jdGlvbiAkdShlNSkgewogICAgICBmdW5jdGlvbiBuOChjMTcsIGE0KSB7CiAgICAgICAgaWYgKGU1KSB7CiAgICAgICAgICB2YXIgZjExID0gYzE3Lmxhc3RFZmZlY3Q7CiAgICAgICAgICBmMTEgIT09IG51bGwgPyAoZjExLm5leHRFZmZlY3QgPSBhNCwgYzE3Lmxhc3RFZmZlY3QgPSBhNCkgOiBjMTcuZmlyc3RFZmZlY3QgPSBjMTcubGFzdEVmZmVjdCA9IGE0LCBhNC5uZXh0RWZmZWN0ID0gbnVsbCwgYTQuZmxhZ3MgPSA4OwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiB0NChjMTcsIGE0KSB7CiAgICAgICAgaWYgKCFlNSkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIGZvciAoOyBhNCAhPT0gbnVsbDsgKQogICAgICAgICAgbjgoYzE3LCBhNCksIGE0ID0gYTQuc2libGluZzsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBmdW5jdGlvbiByMyhjMTcsIGE0KSB7CiAgICAgICAgZm9yIChjMTcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOyBhNCAhPT0gbnVsbDsgKQogICAgICAgICAgYTQua2V5ICE9PSBudWxsID8gYzE3LnNldChhNC5rZXksIGE0KSA6IGMxNy5zZXQoYTQuaW5kZXgsIGE0KSwgYTQgPSBhNC5zaWJsaW5nOwogICAgICAgIHJldHVybiBjMTc7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbDcoYzE3LCBhNCkgewogICAgICAgIHJldHVybiBjMTcgPSBVZTkoYzE3LCBhNCksIGMxNy5pbmRleCA9IDAsIGMxNy5zaWJsaW5nID0gbnVsbCwgYzE3OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGk0KGMxNywgYTQsIGYxMSkgewogICAgICAgIHJldHVybiBjMTcuaW5kZXggPSBmMTEsIGU1ID8gKGYxMSA9IGMxNy5hbHRlcm5hdGUsIGYxMSAhPT0gbnVsbCA/IChmMTEgPSBmMTEuaW5kZXgsIGYxMSA8IGE0ID8gKGMxNy5mbGFncyA9IDIsIGE0KSA6IGYxMSkgOiAoYzE3LmZsYWdzID0gMiwgYTQpKSA6IGE0OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIG80KGMxNykgewogICAgICAgIHJldHVybiBlNSAmJiBjMTcuYWx0ZXJuYXRlID09PSBudWxsICYmIChjMTcuZmxhZ3MgPSAyKSwgYzE3OwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHUxMShjMTcsIGE0LCBmMTEsIHAxOCkgewogICAgICAgIHJldHVybiBhNCA9PT0gbnVsbCB8fCBhNC50YWcgIT09IDYgPyAoYTQgPSBKcjMoZjExLCBjMTcubW9kZSwgcDE4KSwgYTQucmV0dXJuID0gYzE3LCBhNCkgOiAoYTQgPSBsNyhhNCwgZjExKSwgYTQucmV0dXJuID0gYzE3LCBhNCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gczgoYzE3LCBhNCwgZjExLCBwMTgpIHsKICAgICAgICByZXR1cm4gYTQgIT09IG51bGwgJiYgYTQuZWxlbWVudFR5cGUgPT09IGYxMS50eXBlID8gKHAxOCA9IGw3KGE0LCBmMTEucHJvcHMpLCBwMTgucmVmID0gRm40KGMxNywgYTQsIGYxMSksIHAxOC5yZXR1cm4gPSBjMTcsIHAxOCkgOiAocDE4ID0gWHQ1KGYxMS50eXBlLCBmMTEua2V5LCBmMTEucHJvcHMsIG51bGwsIGMxNy5tb2RlLCBwMTgpLCBwMTgucmVmID0gRm40KGMxNywgYTQsIGYxMSksIHAxOC5yZXR1cm4gPSBjMTcsIHAxOCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZDE1KGMxNywgYTQsIGYxMSwgcDE4KSB7CiAgICAgICAgcmV0dXJuIGE0ID09PSBudWxsIHx8IGE0LnRhZyAhPT0gNCB8fCBhNC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gZjExLmNvbnRhaW5lckluZm8gfHwgYTQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uICE9PSBmMTEuaW1wbGVtZW50YXRpb24gPyAoYTQgPSBxcjMoZjExLCBjMTcubW9kZSwgcDE4KSwgYTQucmV0dXJuID0gYzE3LCBhNCkgOiAoYTQgPSBsNyhhNCwgZjExLmNoaWxkcmVuIHx8IFtdKSwgYTQucmV0dXJuID0gYzE3LCBhNCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24geTE3KGMxNywgYTQsIGYxMSwgcDE4LCBtMjMpIHsKICAgICAgICByZXR1cm4gYTQgPT09IG51bGwgfHwgYTQudGFnICE9PSA3ID8gKGE0ID0gRW40KGYxMSwgYzE3Lm1vZGUsIHAxOCwgbTIzKSwgYTQucmV0dXJuID0gYzE3LCBhNCkgOiAoYTQgPSBsNyhhNCwgZjExKSwgYTQucmV0dXJuID0gYzE3LCBhNCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gQzE3KGMxNywgYTQsIGYxMSkgewogICAgICAgIGlmICh0eXBlb2YgYTQgPT0gInN0cmluZyIgfHwgdHlwZW9mIGE0ID09ICJudW1iZXIiKQogICAgICAgICAgcmV0dXJuIGE0ID0gSnIzKCIiICsgYTQsIGMxNy5tb2RlLCBmMTEpLCBhNC5yZXR1cm4gPSBjMTcsIGE0OwogICAgICAgIGlmICh0eXBlb2YgYTQgPT0gIm9iamVjdCIgJiYgYTQgIT09IG51bGwpIHsKICAgICAgICAgIHN3aXRjaCAoYTQuJCR0eXBlb2YpIHsKICAgICAgICAgICAgY2FzZSBBbjQ6CiAgICAgICAgICAgICAgcmV0dXJuIGYxMSA9IFh0NShhNC50eXBlLCBhNC5rZXksIGE0LnByb3BzLCBudWxsLCBjMTcubW9kZSwgZjExKSwgZjExLnJlZiA9IEZuNChjMTcsIG51bGwsIGE0KSwgZjExLnJldHVybiA9IGMxNywgZjExOwogICAgICAgICAgICBjYXNlIFdlMTE6CiAgICAgICAgICAgICAgcmV0dXJuIGE0ID0gcXIzKGE0LCBjMTcubW9kZSwgZjExKSwgYTQucmV0dXJuID0gYzE3LCBhNDsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChSdDEyKGE0KSB8fCBPbjQoYTQpKQogICAgICAgICAgICByZXR1cm4gYTQgPSBFbjQoYTQsIGMxNy5tb2RlLCBmMTEsIG51bGwpLCBhNC5yZXR1cm4gPSBjMTcsIGE0OwogICAgICAgICAgRHQxMShjMTcsIGE0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaDEwKGMxNywgYTQsIGYxMSwgcDE4KSB7CiAgICAgICAgdmFyIG0yMyA9IGE0ICE9PSBudWxsID8gYTQua2V5IDogbnVsbDsKICAgICAgICBpZiAodHlwZW9mIGYxMSA9PSAic3RyaW5nIiB8fCB0eXBlb2YgZjExID09ICJudW1iZXIiKQogICAgICAgICAgcmV0dXJuIG0yMyAhPT0gbnVsbCA/IG51bGwgOiB1MTEoYzE3LCBhNCwgIiIgKyBmMTEsIHAxOCk7CiAgICAgICAgaWYgKHR5cGVvZiBmMTEgPT0gIm9iamVjdCIgJiYgZjExICE9PSBudWxsKSB7CiAgICAgICAgICBzd2l0Y2ggKGYxMS4kJHR5cGVvZikgewogICAgICAgICAgICBjYXNlIEFuNDoKICAgICAgICAgICAgICByZXR1cm4gZjExLmtleSA9PT0gbTIzID8gZjExLnR5cGUgPT09IGtlMTYgPyB5MTcoYzE3LCBhNCwgZjExLnByb3BzLmNoaWxkcmVuLCBwMTgsIG0yMykgOiBzOChjMTcsIGE0LCBmMTEsIHAxOCkgOiBudWxsOwogICAgICAgICAgICBjYXNlIFdlMTE6CiAgICAgICAgICAgICAgcmV0dXJuIGYxMS5rZXkgPT09IG0yMyA/IGQxNShjMTcsIGE0LCBmMTEsIHAxOCkgOiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgaWYgKFJ0MTIoZjExKSB8fCBPbjQoZjExKSkKICAgICAgICAgICAgcmV0dXJuIG0yMyAhPT0gbnVsbCA/IG51bGwgOiB5MTcoYzE3LCBhNCwgZjExLCBwMTgsIG51bGwpOwogICAgICAgICAgRHQxMShjMTcsIGYxMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIFMyMShjMTcsIGE0LCBmMTEsIHAxOCwgbTIzKSB7CiAgICAgICAgaWYgKHR5cGVvZiBwMTggPT0gInN0cmluZyIgfHwgdHlwZW9mIHAxOCA9PSAibnVtYmVyIikKICAgICAgICAgIHJldHVybiBjMTcgPSBjMTcuZ2V0KGYxMSkgfHwgbnVsbCwgdTExKGE0LCBjMTcsICIiICsgcDE4LCBtMjMpOwogICAgICAgIGlmICh0eXBlb2YgcDE4ID09ICJvYmplY3QiICYmIHAxOCAhPT0gbnVsbCkgewogICAgICAgICAgc3dpdGNoIChwMTguJCR0eXBlb2YpIHsKICAgICAgICAgICAgY2FzZSBBbjQ6CiAgICAgICAgICAgICAgcmV0dXJuIGMxNyA9IGMxNy5nZXQocDE4LmtleSA9PT0gbnVsbCA/IGYxMSA6IHAxOC5rZXkpIHx8IG51bGwsIHAxOC50eXBlID09PSBrZTE2ID8geTE3KGE0LCBjMTcsIHAxOC5wcm9wcy5jaGlsZHJlbiwgbTIzLCBwMTgua2V5KSA6IHM4KGE0LCBjMTcsIHAxOCwgbTIzKTsKICAgICAgICAgICAgY2FzZSBXZTExOgogICAgICAgICAgICAgIHJldHVybiBjMTcgPSBjMTcuZ2V0KHAxOC5rZXkgPT09IG51bGwgPyBmMTEgOiBwMTgua2V5KSB8fCBudWxsLCBkMTUoYTQsIGMxNywgcDE4LCBtMjMpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKFJ0MTIocDE4KSB8fCBPbjQocDE4KSkKICAgICAgICAgICAgcmV0dXJuIGMxNyA9IGMxNy5nZXQoZjExKSB8fCBudWxsLCB5MTcoYTQsIGMxNywgcDE4LCBtMjMsIG51bGwpOwogICAgICAgICAgRHQxMShhNCwgcDE4KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gazE4KGMxNywgYTQsIGYxMSwgcDE4KSB7CiAgICAgICAgZm9yICh2YXIgbTIzID0gbnVsbCwgXzI1ID0gbnVsbCwgdzIxID0gYTQsIE4xNyA9IGE0ID0gMCwgVDI5ID0gbnVsbDsgdzIxICE9PSBudWxsICYmIE4xNyA8IGYxMS5sZW5ndGg7IE4xNysrKSB7CiAgICAgICAgICB3MjEuaW5kZXggPiBOMTcgPyAoVDI5ID0gdzIxLCB3MjEgPSBudWxsKSA6IFQyOSA9IHcyMS5zaWJsaW5nOwogICAgICAgICAgdmFyIFAyNyA9IGgxMChjMTcsIHcyMSwgZjExW04xN10sIHAxOCk7CiAgICAgICAgICBpZiAoUDI3ID09PSBudWxsKSB7CiAgICAgICAgICAgIHcyMSA9PT0gbnVsbCAmJiAodzIxID0gVDI5KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBlNSAmJiB3MjEgJiYgUDI3LmFsdGVybmF0ZSA9PT0gbnVsbCAmJiBuOChjMTcsIHcyMSksIGE0ID0gaTQoUDI3LCBhNCwgTjE3KSwgXzI1ID09PSBudWxsID8gbTIzID0gUDI3IDogXzI1LnNpYmxpbmcgPSBQMjcsIF8yNSA9IFAyNywgdzIxID0gVDI5OwogICAgICAgIH0KICAgICAgICBpZiAoTjE3ID09PSBmMTEubGVuZ3RoKQogICAgICAgICAgcmV0dXJuIHQ0KGMxNywgdzIxKSwgbTIzOwogICAgICAgIGlmICh3MjEgPT09IG51bGwpIHsKICAgICAgICAgIGZvciAoOyBOMTcgPCBmMTEubGVuZ3RoOyBOMTcrKykKICAgICAgICAgICAgdzIxID0gQzE3KGMxNywgZjExW04xN10sIHAxOCksIHcyMSAhPT0gbnVsbCAmJiAoYTQgPSBpNCh3MjEsIGE0LCBOMTcpLCBfMjUgPT09IG51bGwgPyBtMjMgPSB3MjEgOiBfMjUuc2libGluZyA9IHcyMSwgXzI1ID0gdzIxKTsKICAgICAgICAgIHJldHVybiBtMjM7CiAgICAgICAgfQogICAgICAgIGZvciAodzIxID0gcjMoYzE3LCB3MjEpOyBOMTcgPCBmMTEubGVuZ3RoOyBOMTcrKykKICAgICAgICAgIFQyOSA9IFMyMSh3MjEsIGMxNywgTjE3LCBmMTFbTjE3XSwgcDE4KSwgVDI5ICE9PSBudWxsICYmIChlNSAmJiBUMjkuYWx0ZXJuYXRlICE9PSBudWxsICYmIHcyMS5kZWxldGUoVDI5LmtleSA9PT0gbnVsbCA/IE4xNyA6IFQyOS5rZXkpLCBhNCA9IGk0KFQyOSwgYTQsIE4xNyksIF8yNSA9PT0gbnVsbCA/IG0yMyA9IFQyOSA6IF8yNS5zaWJsaW5nID0gVDI5LCBfMjUgPSBUMjkpOwogICAgICAgIHJldHVybiBlNSAmJiB3MjEuZm9yRWFjaChmdW5jdGlvbihTZTE0KSB7CiAgICAgICAgICByZXR1cm4gbjgoYzE3LCBTZTE0KTsKICAgICAgICB9KSwgbTIzOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIEUxNShjMTcsIGE0LCBmMTEsIHAxOCkgewogICAgICAgIHZhciBtMjMgPSBPbjQoZjExKTsKICAgICAgICBpZiAodHlwZW9mIG0yMyAhPSAiZnVuY3Rpb24iKQogICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDE1MCkpOwogICAgICAgIGlmIChmMTEgPSBtMjMuY2FsbChmMTEpLCBmMTEgPT0gbnVsbCkKICAgICAgICAgIHRocm93IEVycm9yKHYxNSgxNTEpKTsKICAgICAgICBmb3IgKHZhciBfMjUgPSBtMjMgPSBudWxsLCB3MjEgPSBhNCwgTjE3ID0gYTQgPSAwLCBUMjkgPSBudWxsLCBQMjcgPSBmMTEubmV4dCgpOyB3MjEgIT09IG51bGwgJiYgIVAyNy5kb25lOyBOMTcrKywgUDI3ID0gZjExLm5leHQoKSkgewogICAgICAgICAgdzIxLmluZGV4ID4gTjE3ID8gKFQyOSA9IHcyMSwgdzIxID0gbnVsbCkgOiBUMjkgPSB3MjEuc2libGluZzsKICAgICAgICAgIHZhciBTZTE0ID0gaDEwKGMxNywgdzIxLCBQMjcudmFsdWUsIHAxOCk7CiAgICAgICAgICBpZiAoU2UxNCA9PT0gbnVsbCkgewogICAgICAgICAgICB3MjEgPT09IG51bGwgJiYgKHcyMSA9IFQyOSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgZTUgJiYgdzIxICYmIFNlMTQuYWx0ZXJuYXRlID09PSBudWxsICYmIG44KGMxNywgdzIxKSwgYTQgPSBpNChTZTE0LCBhNCwgTjE3KSwgXzI1ID09PSBudWxsID8gbTIzID0gU2UxNCA6IF8yNS5zaWJsaW5nID0gU2UxNCwgXzI1ID0gU2UxNCwgdzIxID0gVDI5OwogICAgICAgIH0KICAgICAgICBpZiAoUDI3LmRvbmUpCiAgICAgICAgICByZXR1cm4gdDQoYzE3LCB3MjEpLCBtMjM7CiAgICAgICAgaWYgKHcyMSA9PT0gbnVsbCkgewogICAgICAgICAgZm9yICg7ICFQMjcuZG9uZTsgTjE3KyssIFAyNyA9IGYxMS5uZXh0KCkpCiAgICAgICAgICAgIFAyNyA9IEMxNyhjMTcsIFAyNy52YWx1ZSwgcDE4KSwgUDI3ICE9PSBudWxsICYmIChhNCA9IGk0KFAyNywgYTQsIE4xNyksIF8yNSA9PT0gbnVsbCA/IG0yMyA9IFAyNyA6IF8yNS5zaWJsaW5nID0gUDI3LCBfMjUgPSBQMjcpOwogICAgICAgICAgcmV0dXJuIG0yMzsKICAgICAgICB9CiAgICAgICAgZm9yICh3MjEgPSByMyhjMTcsIHcyMSk7ICFQMjcuZG9uZTsgTjE3KyssIFAyNyA9IGYxMS5uZXh0KCkpCiAgICAgICAgICBQMjcgPSBTMjEodzIxLCBjMTcsIE4xNywgUDI3LnZhbHVlLCBwMTgpLCBQMjcgIT09IG51bGwgJiYgKGU1ICYmIFAyNy5hbHRlcm5hdGUgIT09IG51bGwgJiYgdzIxLmRlbGV0ZShQMjcua2V5ID09PSBudWxsID8gTjE3IDogUDI3LmtleSksIGE0ID0gaTQoUDI3LCBhNCwgTjE3KSwgXzI1ID09PSBudWxsID8gbTIzID0gUDI3IDogXzI1LnNpYmxpbmcgPSBQMjcsIF8yNSA9IFAyNyk7CiAgICAgICAgcmV0dXJuIGU1ICYmIHcyMS5mb3JFYWNoKGZ1bmN0aW9uKF9zMikgewogICAgICAgICAgcmV0dXJuIG44KGMxNywgX3MyKTsKICAgICAgICB9KSwgbTIzOwogICAgICB9CiAgICAgIHJldHVybiBmdW5jdGlvbihjMTcsIGE0LCBmMTEsIHAxOCkgewogICAgICAgIHZhciBtMjMgPSB0eXBlb2YgZjExID09ICJvYmplY3QiICYmIGYxMSAhPT0gbnVsbCAmJiBmMTEudHlwZSA9PT0ga2UxNiAmJiBmMTEua2V5ID09PSBudWxsOwogICAgICAgIG0yMyAmJiAoZjExID0gZjExLnByb3BzLmNoaWxkcmVuKTsKICAgICAgICB2YXIgXzI1ID0gdHlwZW9mIGYxMSA9PSAib2JqZWN0IiAmJiBmMTEgIT09IG51bGw7CiAgICAgICAgaWYgKF8yNSkKICAgICAgICAgIHN3aXRjaCAoZjExLiQkdHlwZW9mKSB7CiAgICAgICAgICAgIGNhc2UgQW40OgogICAgICAgICAgICAgIGU6IHsKICAgICAgICAgICAgICAgIGZvciAoXzI1ID0gZjExLmtleSwgbTIzID0gYTQ7IG0yMyAhPT0gbnVsbDsgKSB7CiAgICAgICAgICAgICAgICAgIGlmIChtMjMua2V5ID09PSBfMjUpIHsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG0yMy50YWcpIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYxMS50eXBlID09PSBrZTE2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdDQoYzE3LCBtMjMuc2libGluZyksIGE0ID0gbDcobTIzLCBmMTEucHJvcHMuY2hpbGRyZW4pLCBhNC5yZXR1cm4gPSBjMTcsIGMxNyA9IGE0OwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBpZiAobTIzLmVsZW1lbnRUeXBlID09PSBmMTEudHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHQ0KGMxNywgbTIzLnNpYmxpbmcpLCBhNCA9IGw3KG0yMywgZjExLnByb3BzKSwgYTQucmVmID0gRm40KGMxNywgbTIzLCBmMTEpLCBhNC5yZXR1cm4gPSBjMTcsIGMxNyA9IGE0OwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdDQoYzE3LCBtMjMpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICBuOChjMTcsIG0yMyk7CiAgICAgICAgICAgICAgICAgIG0yMyA9IG0yMy5zaWJsaW5nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZjExLnR5cGUgPT09IGtlMTYgPyAoYTQgPSBFbjQoZjExLnByb3BzLmNoaWxkcmVuLCBjMTcubW9kZSwgcDE4LCBmMTEua2V5KSwgYTQucmV0dXJuID0gYzE3LCBjMTcgPSBhNCkgOiAocDE4ID0gWHQ1KGYxMS50eXBlLCBmMTEua2V5LCBmMTEucHJvcHMsIG51bGwsIGMxNy5tb2RlLCBwMTgpLCBwMTgucmVmID0gRm40KGMxNywgYTQsIGYxMSksIHAxOC5yZXR1cm4gPSBjMTcsIGMxNyA9IHAxOCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBvNChjMTcpOwogICAgICAgICAgICBjYXNlIFdlMTE6CiAgICAgICAgICAgICAgZTogewogICAgICAgICAgICAgICAgZm9yIChtMjMgPSBmMTEua2V5OyBhNCAhPT0gbnVsbDsgKSB7CiAgICAgICAgICAgICAgICAgIGlmIChhNC5rZXkgPT09IG0yMykKICAgICAgICAgICAgICAgICAgICBpZiAoYTQudGFnID09PSA0ICYmIGE0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PSBmMTEuY29udGFpbmVySW5mbyAmJiBhNC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09IGYxMS5pbXBsZW1lbnRhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgdDQoYzE3LCBhNC5zaWJsaW5nKSwgYTQgPSBsNyhhNCwgZjExLmNoaWxkcmVuIHx8IFtdKSwgYTQucmV0dXJuID0gYzE3LCBjMTcgPSBhNDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIHQ0KGMxNywgYTQpOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgbjgoYzE3LCBhNCk7CiAgICAgICAgICAgICAgICAgIGE0ID0gYTQuc2libGluZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGE0ID0gcXIzKGYxMSwgYzE3Lm1vZGUsIHAxOCksIGE0LnJldHVybiA9IGMxNywgYzE3ID0gYTQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBvNChjMTcpOwogICAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZjExID09ICJzdHJpbmciIHx8IHR5cGVvZiBmMTEgPT0gIm51bWJlciIpCiAgICAgICAgICByZXR1cm4gZjExID0gIiIgKyBmMTEsIGE0ICE9PSBudWxsICYmIGE0LnRhZyA9PT0gNiA/ICh0NChjMTcsIGE0LnNpYmxpbmcpLCBhNCA9IGw3KGE0LCBmMTEpLCBhNC5yZXR1cm4gPSBjMTcsIGMxNyA9IGE0KSA6ICh0NChjMTcsIGE0KSwgYTQgPSBKcjMoZjExLCBjMTcubW9kZSwgcDE4KSwgYTQucmV0dXJuID0gYzE3LCBjMTcgPSBhNCksIG80KGMxNyk7CiAgICAgICAgaWYgKFJ0MTIoZjExKSkKICAgICAgICAgIHJldHVybiBrMTgoYzE3LCBhNCwgZjExLCBwMTgpOwogICAgICAgIGlmIChPbjQoZjExKSkKICAgICAgICAgIHJldHVybiBFMTUoYzE3LCBhNCwgZjExLCBwMTgpOwogICAgICAgIGlmIChfMjUgJiYgRHQxMShjMTcsIGYxMSksIHR5cGVvZiBmMTEgPiAidSIgJiYgIW0yMykKICAgICAgICAgIHN3aXRjaCAoYzE3LnRhZykgewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGNhc2UgMjI6CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMTUyLCBkbjQoYzE3LnR5cGUpIHx8ICJDb21wb25lbnQiKSk7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIHQ0KGMxNywgYTQpOwogICAgICB9OwogICAgfQogICAgdmFyIHVyMyA9ICR1KHRydWUpLCBZdSA9ICR1KGZhbHNlKSwga3Q4ID0ge30sIGNlMTYgPSBWZTcoa3Q4KSwgeXQ4ID0gVmU3KGt0OCksIGd0MTIgPSBWZTcoa3Q4KTsKICAgIGZ1bmN0aW9uICRlMTIoZTUpIHsKICAgICAgaWYgKGU1ID09PSBrdDgpCiAgICAgICAgdGhyb3cgRXJyb3IodjE1KDE3NCkpOwogICAgICByZXR1cm4gZTU7CiAgICB9CiAgICBmdW5jdGlvbiB4bChlNSwgbjgpIHsKICAgICAgc3dpdGNoIChEMjAoZ3QxMiwgbjgpLCBEMjAoeXQ4LCBlNSksIEQyMChjZTE2LCBrdDgpLCBlNSA9IG44Lm5vZGVUeXBlLCBlNSkgewogICAgICAgIGNhc2UgOToKICAgICAgICBjYXNlIDExOgogICAgICAgICAgbjggPSAobjggPSBuOC5kb2N1bWVudEVsZW1lbnQpID8gbjgubmFtZXNwYWNlVVJJIDogdWwobnVsbCwgIiIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGU1ID0gZTUgPT09IDggPyBuOC5wYXJlbnROb2RlIDogbjgsIG44ID0gZTUubmFtZXNwYWNlVVJJIHx8IG51bGwsIGU1ID0gZTUudGFnTmFtZSwgbjggPSB1bChuOCwgZTUpOwogICAgICB9CiAgICAgIE8xNShjZTE2KSwgRDIwKGNlMTYsIG44KTsKICAgIH0KICAgIGZ1bmN0aW9uIF9uNCgpIHsKICAgICAgTzE1KGNlMTYpLCBPMTUoeXQ4KSwgTzE1KGd0MTIpOwogICAgfQogICAgZnVuY3Rpb24gRW8oZTUpIHsKICAgICAgJGUxMihndDEyLmN1cnJlbnQpOwogICAgICB2YXIgbjggPSAkZTEyKGNlMTYuY3VycmVudCksIHQ0ID0gdWwobjgsIGU1LnR5cGUpOwogICAgICBuOCAhPT0gdDQgJiYgKEQyMCh5dDgsIGU1KSwgRDIwKGNlMTYsIHQ0KSk7CiAgICB9CiAgICBmdW5jdGlvbiBoaTMoZTUpIHsKICAgICAgeXQ4LmN1cnJlbnQgPT09IGU1ICYmIChPMTUoY2UxNiksIE8xNSh5dDgpKTsKICAgIH0KICAgIHZhciBSMjYgPSBWZTcoMCk7CiAgICBmdW5jdGlvbiBzcjIoZTUpIHsKICAgICAgZm9yICh2YXIgbjggPSBlNTsgbjggIT09IG51bGw7ICkgewogICAgICAgIGlmIChuOC50YWcgPT09IDEzKSB7CiAgICAgICAgICB2YXIgdDQgPSBuOC5tZW1vaXplZFN0YXRlOwogICAgICAgICAgaWYgKHQ0ICE9PSBudWxsICYmICh0NCA9IHQ0LmRlaHlkcmF0ZWQsIHQ0ID09PSBudWxsIHx8IHQ0LmRhdGEgPT09ICIkPyIgfHwgdDQuZGF0YSA9PT0gIiQhIikpCiAgICAgICAgICAgIHJldHVybiBuODsKICAgICAgICB9IGVsc2UgaWYgKG44LnRhZyA9PT0gMTkgJiYgbjgubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlciAhPT0gdm9pZCAwKSB7CiAgICAgICAgICBpZiAoKG44LmZsYWdzICYgNjQpICE9PSAwKQogICAgICAgICAgICByZXR1cm4gbjg7CiAgICAgICAgfSBlbHNlIGlmIChuOC5jaGlsZCAhPT0gbnVsbCkgewogICAgICAgICAgbjguY2hpbGQucmV0dXJuID0gbjgsIG44ID0gbjguY2hpbGQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKG44ID09PSBlNSkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGZvciAoOyBuOC5zaWJsaW5nID09PSBudWxsOyApIHsKICAgICAgICAgIGlmIChuOC5yZXR1cm4gPT09IG51bGwgfHwgbjgucmV0dXJuID09PSBlNSkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICBuOCA9IG44LnJldHVybjsKICAgICAgICB9CiAgICAgICAgbjguc2libGluZy5yZXR1cm4gPSBuOC5yZXR1cm4sIG44ID0gbjguc2libGluZzsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHZhciB2ZTEzID0gbnVsbCwgX2UxNSA9IG51bGwsIGRlMTMgPSBmYWxzZTsKICAgIGZ1bmN0aW9uIFh1KGU1LCBuOCkgewogICAgICB2YXIgdDQgPSBuZTE1KDUsIG51bGwsIG51bGwsIDApOwogICAgICB0NC5lbGVtZW50VHlwZSA9ICJERUxFVEVEIiwgdDQudHlwZSA9ICJERUxFVEVEIiwgdDQuc3RhdGVOb2RlID0gbjgsIHQ0LnJldHVybiA9IGU1LCB0NC5mbGFncyA9IDgsIGU1Lmxhc3RFZmZlY3QgIT09IG51bGwgPyAoZTUubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gdDQsIGU1Lmxhc3RFZmZlY3QgPSB0NCkgOiBlNS5maXJzdEVmZmVjdCA9IGU1Lmxhc3RFZmZlY3QgPSB0NDsKICAgIH0KICAgIGZ1bmN0aW9uIGtvKGU1LCBuOCkgewogICAgICBzd2l0Y2ggKGU1LnRhZykgewogICAgICAgIGNhc2UgNToKICAgICAgICAgIHZhciB0NCA9IGU1LnR5cGU7CiAgICAgICAgICByZXR1cm4gbjggPSBuOC5ub2RlVHlwZSAhPT0gMSB8fCB0NC50b0xvd2VyQ2FzZSgpICE9PSBuOC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID8gbnVsbCA6IG44LCBuOCAhPT0gbnVsbCA/IChlNS5zdGF0ZU5vZGUgPSBuOCwgdHJ1ZSkgOiBmYWxzZTsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICByZXR1cm4gbjggPSBlNS5wZW5kaW5nUHJvcHMgPT09ICIiIHx8IG44Lm5vZGVUeXBlICE9PSAzID8gbnVsbCA6IG44LCBuOCAhPT0gbnVsbCA/IChlNS5zdGF0ZU5vZGUgPSBuOCwgdHJ1ZSkgOiBmYWxzZTsKICAgICAgICBjYXNlIDEzOgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIENsKGU1KSB7CiAgICAgIGlmIChkZTEzKSB7CiAgICAgICAgdmFyIG44ID0gX2UxNTsKICAgICAgICBpZiAobjgpIHsKICAgICAgICAgIHZhciB0NCA9IG44OwogICAgICAgICAgaWYgKCFrbyhlNSwgbjgpKSB7CiAgICAgICAgICAgIGlmIChuOCA9IHZuNCh0NC5uZXh0U2libGluZyksICFuOCB8fCAha28oZTUsIG44KSkgewogICAgICAgICAgICAgIGU1LmZsYWdzID0gZTUuZmxhZ3MgJiAtMTAyNSB8IDIsIGRlMTMgPSBmYWxzZSwgdmUxMyA9IGU1OwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBYdSh2ZTEzLCB0NCk7CiAgICAgICAgICB9CiAgICAgICAgICB2ZTEzID0gZTUsIF9lMTUgPSB2bjQobjguZmlyc3RDaGlsZCk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBlNS5mbGFncyA9IGU1LmZsYWdzICYgLTEwMjUgfCAyLCBkZTEzID0gZmFsc2UsIHZlMTMgPSBlNTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24geG8oZTUpIHsKICAgICAgZm9yIChlNSA9IGU1LnJldHVybjsgZTUgIT09IG51bGwgJiYgZTUudGFnICE9PSA1ICYmIGU1LnRhZyAhPT0gMyAmJiBlNS50YWcgIT09IDEzOyApCiAgICAgICAgZTUgPSBlNS5yZXR1cm47CiAgICAgIHZlMTMgPSBlNTsKICAgIH0KICAgIGZ1bmN0aW9uIEl0MTEoZTUpIHsKICAgICAgaWYgKGU1ICE9PSB2ZTEzKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgaWYgKCFkZTEzKQogICAgICAgIHJldHVybiB4byhlNSksIGRlMTMgPSB0cnVlLCBmYWxzZTsKICAgICAgdmFyIG44ID0gZTUudHlwZTsKICAgICAgaWYgKGU1LnRhZyAhPT0gNSB8fCBuOCAhPT0gImhlYWQiICYmIG44ICE9PSAiYm9keSIgJiYgIWdsKG44LCBlNS5tZW1vaXplZFByb3BzKSkKICAgICAgICBmb3IgKG44ID0gX2UxNTsgbjg7ICkKICAgICAgICAgIFh1KGU1LCBuOCksIG44ID0gdm40KG44Lm5leHRTaWJsaW5nKTsKICAgICAgaWYgKHhvKGU1KSwgZTUudGFnID09PSAxMykgewogICAgICAgIGlmIChlNSA9IGU1Lm1lbW9pemVkU3RhdGUsIGU1ID0gZTUgIT09IG51bGwgPyBlNS5kZWh5ZHJhdGVkIDogbnVsbCwgIWU1KQogICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMxNykpOwogICAgICAgIGU6IHsKICAgICAgICAgIGZvciAoZTUgPSBlNS5uZXh0U2libGluZywgbjggPSAwOyBlNTsgKSB7CiAgICAgICAgICAgIGlmIChlNS5ub2RlVHlwZSA9PT0gOCkgewogICAgICAgICAgICAgIHZhciB0NCA9IGU1LmRhdGE7CiAgICAgICAgICAgICAgaWYgKHQ0ID09PSAiLyQiKSB7CiAgICAgICAgICAgICAgICBpZiAobjggPT09IDApIHsKICAgICAgICAgICAgICAgICAgX2UxNSA9IHZuNChlNS5uZXh0U2libGluZyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBuOC0tOwogICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgdDQgIT09ICIkIiAmJiB0NCAhPT0gIiQhIiAmJiB0NCAhPT0gIiQ/IiB8fCBuOCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGU1ID0gZTUubmV4dFNpYmxpbmc7CiAgICAgICAgICB9CiAgICAgICAgICBfZTE1ID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0gZWxzZQogICAgICAgIF9lMTUgPSB2ZTEzID8gdm40KGU1LnN0YXRlTm9kZS5uZXh0U2libGluZykgOiBudWxsOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIFhyMygpIHsKICAgICAgX2UxNSA9IHZlMTMgPSBudWxsLCBkZTEzID0gZmFsc2U7CiAgICB9CiAgICB2YXIgZ241ID0gW107CiAgICBmdW5jdGlvbiB2aTMoKSB7CiAgICAgIGZvciAodmFyIGU1ID0gMDsgZTUgPCBnbjUubGVuZ3RoOyBlNSsrKQogICAgICAgIGduNVtlNV0uX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSBudWxsOwogICAgICBnbjUubGVuZ3RoID0gMDsKICAgIH0KICAgIHZhciBudDE0ID0gcWU4LlJlYWN0Q3VycmVudERpc3BhdGNoZXIsIHRlMTcgPSBxZTguUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsIHd0OSA9IDAsIEkyNyA9IG51bGwsIFcxOCA9IG51bGwsIFYyMSA9IG51bGwsIGFyMyA9IGZhbHNlLCB0dDE3ID0gZmFsc2U7CiAgICBmdW5jdGlvbiBLMTkoKSB7CiAgICAgIHRocm93IEVycm9yKHYxNSgzMjEpKTsKICAgIH0KICAgIGZ1bmN0aW9uIHlpMyhlNSwgbjgpIHsKICAgICAgaWYgKG44ID09PSBudWxsKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZm9yICh2YXIgdDQgPSAwOyB0NCA8IG44Lmxlbmd0aCAmJiB0NCA8IGU1Lmxlbmd0aDsgdDQrKykKICAgICAgICBpZiAoIWVlMTgoZTVbdDRdLCBuOFt0NF0pKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGdpMihlNSwgbjgsIHQ0LCByMywgbDcsIGk0KSB7CiAgICAgIGlmICh3dDkgPSBpNCwgSTI3ID0gbjgsIG44Lm1lbW9pemVkU3RhdGUgPSBudWxsLCBuOC51cGRhdGVRdWV1ZSA9IG51bGwsIG44LmxhbmVzID0gMCwgbnQxNC5jdXJyZW50ID0gZTUgPT09IG51bGwgfHwgZTUubWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbCA/IHFhMiA6IGJhMiwgZTUgPSB0NChyMywgbDcpLCB0dDE3KSB7CiAgICAgICAgaTQgPSAwOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmICh0dDE3ID0gZmFsc2UsICEoMjUgPiBpNCkpCiAgICAgICAgICAgIHRocm93IEVycm9yKHYxNSgzMDEpKTsKICAgICAgICAgIGk0ICs9IDEsIFYyMSA9IFcxOCA9IG51bGwsIG44LnVwZGF0ZVF1ZXVlID0gbnVsbCwgbnQxNC5jdXJyZW50ID0gZWYsIGU1ID0gdDQocjMsIGw3KTsKICAgICAgICB9IHdoaWxlICh0dDE3KTsKICAgICAgfQogICAgICBpZiAobnQxNC5jdXJyZW50ID0gcHIzLCBuOCA9IFcxOCAhPT0gbnVsbCAmJiBXMTgubmV4dCAhPT0gbnVsbCwgd3Q5ID0gMCwgVjIxID0gVzE4ID0gSTI3ID0gbnVsbCwgYXIzID0gZmFsc2UsIG44KQogICAgICAgIHRocm93IEVycm9yKHYxNSgzMDApKTsKICAgICAgcmV0dXJuIGU1OwogICAgfQogICAgZnVuY3Rpb24gWWU5KCkgewogICAgICB2YXIgZTUgPSB7IG1lbW9pemVkU3RhdGU6IG51bGwsIGJhc2VTdGF0ZTogbnVsbCwgYmFzZVF1ZXVlOiBudWxsLCBxdWV1ZTogbnVsbCwgbmV4dDogbnVsbCB9OwogICAgICByZXR1cm4gVjIxID09PSBudWxsID8gSTI3Lm1lbW9pemVkU3RhdGUgPSBWMjEgPSBlNSA6IFYyMSA9IFYyMS5uZXh0ID0gZTUsIFYyMTsKICAgIH0KICAgIGZ1bmN0aW9uIGVuNSgpIHsKICAgICAgaWYgKFcxOCA9PT0gbnVsbCkgewogICAgICAgIHZhciBlNSA9IEkyNy5hbHRlcm5hdGU7CiAgICAgICAgZTUgPSBlNSAhPT0gbnVsbCA/IGU1Lm1lbW9pemVkU3RhdGUgOiBudWxsOwogICAgICB9IGVsc2UKICAgICAgICBlNSA9IFcxOC5uZXh0OwogICAgICB2YXIgbjggPSBWMjEgPT09IG51bGwgPyBJMjcubWVtb2l6ZWRTdGF0ZSA6IFYyMS5uZXh0OwogICAgICBpZiAobjggIT09IG51bGwpCiAgICAgICAgVjIxID0gbjgsIFcxOCA9IGU1OwogICAgICBlbHNlIHsKICAgICAgICBpZiAoZTUgPT09IG51bGwpCiAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMzEwKSk7CiAgICAgICAgVzE4ID0gZTUsIGU1ID0geyBtZW1vaXplZFN0YXRlOiBXMTgubWVtb2l6ZWRTdGF0ZSwgYmFzZVN0YXRlOiBXMTguYmFzZVN0YXRlLCBiYXNlUXVldWU6IFcxOC5iYXNlUXVldWUsIHF1ZXVlOiBXMTgucXVldWUsIG5leHQ6IG51bGwgfSwgVjIxID09PSBudWxsID8gSTI3Lm1lbW9pemVkU3RhdGUgPSBWMjEgPSBlNSA6IFYyMSA9IFYyMS5uZXh0ID0gZTU7CiAgICAgIH0KICAgICAgcmV0dXJuIFYyMTsKICAgIH0KICAgIGZ1bmN0aW9uIGFlMTcoZTUsIG44KSB7CiAgICAgIHJldHVybiB0eXBlb2YgbjggPT0gImZ1bmN0aW9uIiA/IG44KGU1KSA6IG44OwogICAgfQogICAgZnVuY3Rpb24gam40KGU1KSB7CiAgICAgIHZhciBuOCA9IGVuNSgpLCB0NCA9IG44LnF1ZXVlOwogICAgICBpZiAodDQgPT09IG51bGwpCiAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMxMSkpOwogICAgICB0NC5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gZTU7CiAgICAgIHZhciByMyA9IFcxOCwgbDcgPSByMy5iYXNlUXVldWUsIGk0ID0gdDQucGVuZGluZzsKICAgICAgaWYgKGk0ICE9PSBudWxsKSB7CiAgICAgICAgaWYgKGw3ICE9PSBudWxsKSB7CiAgICAgICAgICB2YXIgbzQgPSBsNy5uZXh0OwogICAgICAgICAgbDcubmV4dCA9IGk0Lm5leHQsIGk0Lm5leHQgPSBvNDsKICAgICAgICB9CiAgICAgICAgcjMuYmFzZVF1ZXVlID0gbDcgPSBpNCwgdDQucGVuZGluZyA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKGw3ICE9PSBudWxsKSB7CiAgICAgICAgbDcgPSBsNy5uZXh0LCByMyA9IHIzLmJhc2VTdGF0ZTsKICAgICAgICB2YXIgdTExID0gbzQgPSBpNCA9IG51bGwsIHM4ID0gbDc7CiAgICAgICAgZG8gewogICAgICAgICAgdmFyIGQxNSA9IHM4LmxhbmU7CiAgICAgICAgICBpZiAoKHd0OSAmIGQxNSkgPT09IGQxNSkKICAgICAgICAgICAgdTExICE9PSBudWxsICYmICh1MTEgPSB1MTEubmV4dCA9IHsgbGFuZTogMCwgYWN0aW9uOiBzOC5hY3Rpb24sIGVhZ2VyUmVkdWNlcjogczguZWFnZXJSZWR1Y2VyLCBlYWdlclN0YXRlOiBzOC5lYWdlclN0YXRlLCBuZXh0OiBudWxsIH0pLCByMyA9IHM4LmVhZ2VyUmVkdWNlciA9PT0gZTUgPyBzOC5lYWdlclN0YXRlIDogZTUocjMsIHM4LmFjdGlvbik7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIHkxNyA9IHsgbGFuZTogZDE1LCBhY3Rpb246IHM4LmFjdGlvbiwgZWFnZXJSZWR1Y2VyOiBzOC5lYWdlclJlZHVjZXIsIGVhZ2VyU3RhdGU6IHM4LmVhZ2VyU3RhdGUsIG5leHQ6IG51bGwgfTsKICAgICAgICAgICAgdTExID09PSBudWxsID8gKG80ID0gdTExID0geTE3LCBpNCA9IHIzKSA6IHUxMSA9IHUxMS5uZXh0ID0geTE3LCBJMjcubGFuZXMgfD0gZDE1LCB4dDEzIHw9IGQxNTsKICAgICAgICAgIH0KICAgICAgICAgIHM4ID0gczgubmV4dDsKICAgICAgICB9IHdoaWxlIChzOCAhPT0gbnVsbCAmJiBzOCAhPT0gbDcpOwogICAgICAgIHUxMSA9PT0gbnVsbCA/IGk0ID0gcjMgOiB1MTEubmV4dCA9IG80LCBlZTE4KHIzLCBuOC5tZW1vaXplZFN0YXRlKSB8fCAodWUxOCA9IHRydWUpLCBuOC5tZW1vaXplZFN0YXRlID0gcjMsIG44LmJhc2VTdGF0ZSA9IGk0LCBuOC5iYXNlUXVldWUgPSB1MTEsIHQ0Lmxhc3RSZW5kZXJlZFN0YXRlID0gcjM7CiAgICAgIH0KICAgICAgcmV0dXJuIFtuOC5tZW1vaXplZFN0YXRlLCB0NC5kaXNwYXRjaF07CiAgICB9CiAgICBmdW5jdGlvbiBVbjQoZTUpIHsKICAgICAgdmFyIG44ID0gZW41KCksIHQ0ID0gbjgucXVldWU7CiAgICAgIGlmICh0NCA9PT0gbnVsbCkKICAgICAgICB0aHJvdyBFcnJvcih2MTUoMzExKSk7CiAgICAgIHQ0Lmxhc3RSZW5kZXJlZFJlZHVjZXIgPSBlNTsKICAgICAgdmFyIHIzID0gdDQuZGlzcGF0Y2gsIGw3ID0gdDQucGVuZGluZywgaTQgPSBuOC5tZW1vaXplZFN0YXRlOwogICAgICBpZiAobDcgIT09IG51bGwpIHsKICAgICAgICB0NC5wZW5kaW5nID0gbnVsbDsKICAgICAgICB2YXIgbzQgPSBsNyA9IGw3Lm5leHQ7CiAgICAgICAgZG8KICAgICAgICAgIGk0ID0gZTUoaTQsIG80LmFjdGlvbiksIG80ID0gbzQubmV4dDsKICAgICAgICB3aGlsZSAobzQgIT09IGw3KTsKICAgICAgICBlZTE4KGk0LCBuOC5tZW1vaXplZFN0YXRlKSB8fCAodWUxOCA9IHRydWUpLCBuOC5tZW1vaXplZFN0YXRlID0gaTQsIG44LmJhc2VRdWV1ZSA9PT0gbnVsbCAmJiAobjguYmFzZVN0YXRlID0gaTQpLCB0NC5sYXN0UmVuZGVyZWRTdGF0ZSA9IGk0OwogICAgICB9CiAgICAgIHJldHVybiBbaTQsIHIzXTsKICAgIH0KICAgIGZ1bmN0aW9uIENvKGU1LCBuOCwgdDQpIHsKICAgICAgdmFyIHIzID0gbjguX2dldFZlcnNpb247CiAgICAgIHIzID0gcjMobjguX3NvdXJjZSk7CiAgICAgIHZhciBsNyA9IG44Ll93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5OwogICAgICBpZiAobDcgIT09IG51bGwgPyBlNSA9IGw3ID09PSByMyA6IChlNSA9IGU1Lm11dGFibGVSZWFkTGFuZXMsIChlNSA9ICh3dDkgJiBlNSkgPT09IGU1KSAmJiAobjguX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSByMywgZ241LnB1c2gobjgpKSksIGU1KQogICAgICAgIHJldHVybiB0NChuOC5fc291cmNlKTsKICAgICAgdGhyb3cgZ241LnB1c2gobjgpLCBFcnJvcih2MTUoMzUwKSk7CiAgICB9CiAgICBmdW5jdGlvbiBLdShlNSwgbjgsIHQ0LCByMykgewogICAgICB2YXIgbDcgPSBZMzA7CiAgICAgIGlmIChsNyA9PT0gbnVsbCkKICAgICAgICB0aHJvdyBFcnJvcih2MTUoMzQ5KSk7CiAgICAgIHZhciBpNCA9IG44Ll9nZXRWZXJzaW9uLCBvNCA9IGk0KG44Ll9zb3VyY2UpLCB1MTEgPSBudDE0LmN1cnJlbnQsIHM4ID0gdTExLnVzZVN0YXRlKGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBDbyhsNywgbjgsIHQ0KTsKICAgICAgfSksIGQxNSA9IHM4WzFdLCB5MTcgPSBzOFswXTsKICAgICAgczggPSBWMjE7CiAgICAgIHZhciBDMTcgPSBlNS5tZW1vaXplZFN0YXRlLCBoMTAgPSBDMTcucmVmcywgUzIxID0gaDEwLmdldFNuYXBzaG90LCBrMTggPSBDMTcuc291cmNlOwogICAgICBDMTcgPSBDMTcuc3Vic2NyaWJlOwogICAgICB2YXIgRTE1ID0gSTI3OwogICAgICByZXR1cm4gZTUubWVtb2l6ZWRTdGF0ZSA9IHsgcmVmczogaDEwLCBzb3VyY2U6IG44LCBzdWJzY3JpYmU6IHIzIH0sIHUxMS51c2VFZmZlY3QoZnVuY3Rpb24oKSB7CiAgICAgICAgaDEwLmdldFNuYXBzaG90ID0gdDQsIGgxMC5zZXRTbmFwc2hvdCA9IGQxNTsKICAgICAgICB2YXIgYzE3ID0gaTQobjguX3NvdXJjZSk7CiAgICAgICAgaWYgKCFlZTE4KG80LCBjMTcpKSB7CiAgICAgICAgICBjMTcgPSB0NChuOC5fc291cmNlKSwgZWUxOCh5MTcsIGMxNykgfHwgKGQxNShjMTcpLCBjMTcgPSBPZTE0KEUxNSksIGw3Lm11dGFibGVSZWFkTGFuZXMgfD0gYzE3ICYgbDcucGVuZGluZ0xhbmVzKSwgYzE3ID0gbDcubXV0YWJsZVJlYWRMYW5lcywgbDcuZW50YW5nbGVkTGFuZXMgfD0gYzE3OwogICAgICAgICAgZm9yICh2YXIgYTQgPSBsNy5lbnRhbmdsZW1lbnRzLCBmMTEgPSBjMTc7IDAgPCBmMTE7ICkgewogICAgICAgICAgICB2YXIgcDE4ID0gMzEgLSBJZTEwKGYxMSksIG0yMyA9IDEgPDwgcDE4OwogICAgICAgICAgICBhNFtwMThdIHw9IGMxNywgZjExICY9IH5tMjM7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LCBbdDQsIG44LCByM10pLCB1MTEudXNlRWZmZWN0KGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiByMyhuOC5fc291cmNlLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBjMTcgPSBoMTAuZ2V0U25hcHNob3QsIGE0ID0gaDEwLnNldFNuYXBzaG90OwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYTQoYzE3KG44Ll9zb3VyY2UpKTsKICAgICAgICAgICAgdmFyIGYxMSA9IE9lMTQoRTE1KTsKICAgICAgICAgICAgbDcubXV0YWJsZVJlYWRMYW5lcyB8PSBmMTEgJiBsNy5wZW5kaW5nTGFuZXM7CiAgICAgICAgICB9IGNhdGNoIChwMTgpIHsKICAgICAgICAgICAgYTQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgdGhyb3cgcDE4OwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSwgW244LCByM10pLCBlZTE4KFMyMSwgdDQpICYmIGVlMTgoazE4LCBuOCkgJiYgZWUxOChDMTcsIHIzKSB8fCAoZTUgPSB7IHBlbmRpbmc6IG51bGwsIGRpc3BhdGNoOiBudWxsLCBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBhZTE3LCBsYXN0UmVuZGVyZWRTdGF0ZTogeTE3IH0sIGU1LmRpc3BhdGNoID0gZDE1ID0gRWkzLmJpbmQobnVsbCwgSTI3LCBlNSksIHM4LnF1ZXVlID0gZTUsIHM4LmJhc2VRdWV1ZSA9IG51bGwsIHkxNyA9IENvKGw3LCBuOCwgdDQpLCBzOC5tZW1vaXplZFN0YXRlID0gczguYmFzZVN0YXRlID0geTE3KSwgeTE3OwogICAgfQogICAgZnVuY3Rpb24gR3UoZTUsIG44LCB0NCkgewogICAgICB2YXIgcjMgPSBlbjUoKTsKICAgICAgcmV0dXJuIEt1KHIzLCBlNSwgbjgsIHQ0KTsKICAgIH0KICAgIGZ1bmN0aW9uIFZuNChlNSkgewogICAgICB2YXIgbjggPSBZZTkoKTsKICAgICAgcmV0dXJuIHR5cGVvZiBlNSA9PSAiZnVuY3Rpb24iICYmIChlNSA9IGU1KCkpLCBuOC5tZW1vaXplZFN0YXRlID0gbjguYmFzZVN0YXRlID0gZTUsIGU1ID0gbjgucXVldWUgPSB7IHBlbmRpbmc6IG51bGwsIGRpc3BhdGNoOiBudWxsLCBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBhZTE3LCBsYXN0UmVuZGVyZWRTdGF0ZTogZTUgfSwgZTUgPSBlNS5kaXNwYXRjaCA9IEVpMy5iaW5kKG51bGwsIEkyNywgZTUpLCBbbjgubWVtb2l6ZWRTdGF0ZSwgZTVdOwogICAgfQogICAgZnVuY3Rpb24gZnIzKGU1LCBuOCwgdDQsIHIzKSB7CiAgICAgIHJldHVybiBlNSA9IHsgdGFnOiBlNSwgY3JlYXRlOiBuOCwgZGVzdHJveTogdDQsIGRlcHM6IHIzLCBuZXh0OiBudWxsIH0sIG44ID0gSTI3LnVwZGF0ZVF1ZXVlLCBuOCA9PT0gbnVsbCA/IChuOCA9IHsgbGFzdEVmZmVjdDogbnVsbCB9LCBJMjcudXBkYXRlUXVldWUgPSBuOCwgbjgubGFzdEVmZmVjdCA9IGU1Lm5leHQgPSBlNSkgOiAodDQgPSBuOC5sYXN0RWZmZWN0LCB0NCA9PT0gbnVsbCA/IG44Lmxhc3RFZmZlY3QgPSBlNS5uZXh0ID0gZTUgOiAocjMgPSB0NC5uZXh0LCB0NC5uZXh0ID0gZTUsIGU1Lm5leHQgPSByMywgbjgubGFzdEVmZmVjdCA9IGU1KSksIGU1OwogICAgfQogICAgZnVuY3Rpb24gX28oZTUpIHsKICAgICAgdmFyIG44ID0gWWU5KCk7CiAgICAgIHJldHVybiBlNSA9IHsgY3VycmVudDogZTUgfSwgbjgubWVtb2l6ZWRTdGF0ZSA9IGU1OwogICAgfQogICAgZnVuY3Rpb24gY3IzKCkgewogICAgICByZXR1cm4gZW41KCkubWVtb2l6ZWRTdGF0ZTsKICAgIH0KICAgIGZ1bmN0aW9uIF9sKGU1LCBuOCwgdDQsIHIzKSB7CiAgICAgIHZhciBsNyA9IFllOSgpOwogICAgICBJMjcuZmxhZ3MgfD0gZTUsIGw3Lm1lbW9pemVkU3RhdGUgPSBmcjMoMSB8IG44LCB0NCwgdm9pZCAwLCByMyA9PT0gdm9pZCAwID8gbnVsbCA6IHIzKTsKICAgIH0KICAgIGZ1bmN0aW9uIHdpMyhlNSwgbjgsIHQ0LCByMykgewogICAgICB2YXIgbDcgPSBlbjUoKTsKICAgICAgcjMgPSByMyA9PT0gdm9pZCAwID8gbnVsbCA6IHIzOwogICAgICB2YXIgaTQgPSB2b2lkIDA7CiAgICAgIGlmIChXMTggIT09IG51bGwpIHsKICAgICAgICB2YXIgbzQgPSBXMTgubWVtb2l6ZWRTdGF0ZTsKICAgICAgICBpZiAoaTQgPSBvNC5kZXN0cm95LCByMyAhPT0gbnVsbCAmJiB5aTMocjMsIG80LmRlcHMpKSB7CiAgICAgICAgICBmcjMobjgsIHQ0LCBpNCwgcjMpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBJMjcuZmxhZ3MgfD0gZTUsIGw3Lm1lbW9pemVkU3RhdGUgPSBmcjMoMSB8IG44LCB0NCwgaTQsIHIzKTsKICAgIH0KICAgIGZ1bmN0aW9uIE5vKGU1LCBuOCkgewogICAgICByZXR1cm4gX2woNTE2LCA0LCBlNSwgbjgpOwogICAgfQogICAgZnVuY3Rpb24gZHIzKGU1LCBuOCkgewogICAgICByZXR1cm4gd2kzKDUxNiwgNCwgZTUsIG44KTsKICAgIH0KICAgIGZ1bmN0aW9uIFp1KGU1LCBuOCkgewogICAgICByZXR1cm4gd2kzKDQsIDIsIGU1LCBuOCk7CiAgICB9CiAgICBmdW5jdGlvbiBKdShlNSwgbjgpIHsKICAgICAgaWYgKHR5cGVvZiBuOCA9PSAiZnVuY3Rpb24iKQogICAgICAgIHJldHVybiBlNSA9IGU1KCksIG44KGU1KSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBuOChudWxsKTsKICAgICAgICB9OwogICAgICBpZiAobjggIT0gbnVsbCkKICAgICAgICByZXR1cm4gZTUgPSBlNSgpLCBuOC5jdXJyZW50ID0gZTUsIGZ1bmN0aW9uKCkgewogICAgICAgICAgbjguY3VycmVudCA9IG51bGw7CiAgICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHF1KGU1LCBuOCwgdDQpIHsKICAgICAgcmV0dXJuIHQ0ID0gdDQgIT0gbnVsbCA/IHQ0LmNvbmNhdChbZTVdKSA6IG51bGwsIHdpMyg0LCAyLCBKdS5iaW5kKG51bGwsIG44LCBlNSksIHQ0KTsKICAgIH0KICAgIGZ1bmN0aW9uIFNpMygpIHsKICAgIH0KICAgIGZ1bmN0aW9uIGJ1KGU1LCBuOCkgewogICAgICB2YXIgdDQgPSBlbjUoKTsKICAgICAgbjggPSBuOCA9PT0gdm9pZCAwID8gbnVsbCA6IG44OwogICAgICB2YXIgcjMgPSB0NC5tZW1vaXplZFN0YXRlOwogICAgICByZXR1cm4gcjMgIT09IG51bGwgJiYgbjggIT09IG51bGwgJiYgeWkzKG44LCByM1sxXSkgPyByM1swXSA6ICh0NC5tZW1vaXplZFN0YXRlID0gW2U1LCBuOF0sIGU1KTsKICAgIH0KICAgIGZ1bmN0aW9uIGVzMihlNSwgbjgpIHsKICAgICAgdmFyIHQ0ID0gZW41KCk7CiAgICAgIG44ID0gbjggPT09IHZvaWQgMCA/IG51bGwgOiBuODsKICAgICAgdmFyIHIzID0gdDQubWVtb2l6ZWRTdGF0ZTsKICAgICAgcmV0dXJuIHIzICE9PSBudWxsICYmIG44ICE9PSBudWxsICYmIHlpMyhuOCwgcjNbMV0pID8gcjNbMF0gOiAoZTUgPSBlNSgpLCB0NC5tZW1vaXplZFN0YXRlID0gW2U1LCBuOF0sIGU1KTsKICAgIH0KICAgIGZ1bmN0aW9uIEphMihlNSwgbjgpIHsKICAgICAgdmFyIHQ0ID0gQ240KCk7CiAgICAgIEdlOCg5OCA+IHQ0ID8gOTggOiB0NCwgZnVuY3Rpb24oKSB7CiAgICAgICAgZTUodHJ1ZSk7CiAgICAgIH0pLCBHZTgoOTcgPCB0NCA/IDk3IDogdDQsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByMyA9IHRlMTcudHJhbnNpdGlvbjsKICAgICAgICB0ZTE3LnRyYW5zaXRpb24gPSAxOwogICAgICAgIHRyeSB7CiAgICAgICAgICBlNShmYWxzZSksIG44KCk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRlMTcudHJhbnNpdGlvbiA9IHIzOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBFaTMoZTUsIG44LCB0NCkgewogICAgICB2YXIgcjMgPSBxMjAoKSwgbDcgPSBPZTE0KGU1KSwgaTQgPSB7IGxhbmU6IGw3LCBhY3Rpb246IHQ0LCBlYWdlclJlZHVjZXI6IG51bGwsIGVhZ2VyU3RhdGU6IG51bGwsIG5leHQ6IG51bGwgfSwgbzQgPSBuOC5wZW5kaW5nOwogICAgICBpZiAobzQgPT09IG51bGwgPyBpNC5uZXh0ID0gaTQgOiAoaTQubmV4dCA9IG80Lm5leHQsIG80Lm5leHQgPSBpNCksIG44LnBlbmRpbmcgPSBpNCwgbzQgPSBlNS5hbHRlcm5hdGUsIGU1ID09PSBJMjcgfHwgbzQgIT09IG51bGwgJiYgbzQgPT09IEkyNykKICAgICAgICB0dDE3ID0gYXIzID0gdHJ1ZTsKICAgICAgZWxzZSB7CiAgICAgICAgaWYgKGU1LmxhbmVzID09PSAwICYmIChvNCA9PT0gbnVsbCB8fCBvNC5sYW5lcyA9PT0gMCkgJiYgKG80ID0gbjgubGFzdFJlbmRlcmVkUmVkdWNlciwgbzQgIT09IG51bGwpKQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdmFyIHUxMSA9IG44Lmxhc3RSZW5kZXJlZFN0YXRlLCBzOCA9IG80KHUxMSwgdDQpOwogICAgICAgICAgICBpZiAoaTQuZWFnZXJSZWR1Y2VyID0gbzQsIGk0LmVhZ2VyU3RhdGUgPSBzOCwgZWUxOChzOCwgdTExKSkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICB9CiAgICAgICAgTWUxMyhlNSwgbDcsIHIzKTsKICAgICAgfQogICAgfQogICAgdmFyIHByMyA9IHsgcmVhZENvbnRleHQ6IHJlMjAsIHVzZUNhbGxiYWNrOiBLMTksIHVzZUNvbnRleHQ6IEsxOSwgdXNlRWZmZWN0OiBLMTksIHVzZUltcGVyYXRpdmVIYW5kbGU6IEsxOSwgdXNlTGF5b3V0RWZmZWN0OiBLMTksIHVzZU1lbW86IEsxOSwgdXNlUmVkdWNlcjogSzE5LCB1c2VSZWY6IEsxOSwgdXNlU3RhdGU6IEsxOSwgdXNlRGVidWdWYWx1ZTogSzE5LCB1c2VEZWZlcnJlZFZhbHVlOiBLMTksIHVzZVRyYW5zaXRpb246IEsxOSwgdXNlTXV0YWJsZVNvdXJjZTogSzE5LCB1c2VPcGFxdWVJZGVudGlmaWVyOiBLMTksIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZmFsc2UgfSwgcWEyID0geyByZWFkQ29udGV4dDogcmUyMCwgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uKGU1LCBuOCkgewogICAgICByZXR1cm4gWWU5KCkubWVtb2l6ZWRTdGF0ZSA9IFtlNSwgbjggPT09IHZvaWQgMCA/IG51bGwgOiBuOF0sIGU1OwogICAgfSwgdXNlQ29udGV4dDogcmUyMCwgdXNlRWZmZWN0OiBObywgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24oZTUsIG44LCB0NCkgewogICAgICByZXR1cm4gdDQgPSB0NCAhPSBudWxsID8gdDQuY29uY2F0KFtlNV0pIDogbnVsbCwgX2woNCwgMiwgSnUuYmluZChudWxsLCBuOCwgZTUpLCB0NCk7CiAgICB9LCB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uKGU1LCBuOCkgewogICAgICByZXR1cm4gX2woNCwgMiwgZTUsIG44KTsKICAgIH0sIHVzZU1lbW86IGZ1bmN0aW9uKGU1LCBuOCkgewogICAgICB2YXIgdDQgPSBZZTkoKTsKICAgICAgcmV0dXJuIG44ID0gbjggPT09IHZvaWQgMCA/IG51bGwgOiBuOCwgZTUgPSBlNSgpLCB0NC5tZW1vaXplZFN0YXRlID0gW2U1LCBuOF0sIGU1OwogICAgfSwgdXNlUmVkdWNlcjogZnVuY3Rpb24oZTUsIG44LCB0NCkgewogICAgICB2YXIgcjMgPSBZZTkoKTsKICAgICAgcmV0dXJuIG44ID0gdDQgIT09IHZvaWQgMCA/IHQ0KG44KSA6IG44LCByMy5tZW1vaXplZFN0YXRlID0gcjMuYmFzZVN0YXRlID0gbjgsIGU1ID0gcjMucXVldWUgPSB7IHBlbmRpbmc6IG51bGwsIGRpc3BhdGNoOiBudWxsLCBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBlNSwgbGFzdFJlbmRlcmVkU3RhdGU6IG44IH0sIGU1ID0gZTUuZGlzcGF0Y2ggPSBFaTMuYmluZChudWxsLCBJMjcsIGU1KSwgW3IzLm1lbW9pemVkU3RhdGUsIGU1XTsKICAgIH0sIHVzZVJlZjogX28sIHVzZVN0YXRlOiBWbjQsIHVzZURlYnVnVmFsdWU6IFNpMywgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24oZTUpIHsKICAgICAgdmFyIG44ID0gVm40KGU1KSwgdDQgPSBuOFswXSwgcjMgPSBuOFsxXTsKICAgICAgcmV0dXJuIE5vKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBsNyA9IHRlMTcudHJhbnNpdGlvbjsKICAgICAgICB0ZTE3LnRyYW5zaXRpb24gPSAxOwogICAgICAgIHRyeSB7CiAgICAgICAgICByMyhlNSk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRlMTcudHJhbnNpdGlvbiA9IGw3OwogICAgICAgIH0KICAgICAgfSwgW2U1XSksIHQ0OwogICAgfSwgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBlNSA9IFZuNChmYWxzZSksIG44ID0gZTVbMF07CiAgICAgIHJldHVybiBlNSA9IEphMi5iaW5kKG51bGwsIGU1WzFdKSwgX28oZTUpLCBbZTUsIG44XTsKICAgIH0sIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uKGU1LCBuOCwgdDQpIHsKICAgICAgdmFyIHIzID0gWWU5KCk7CiAgICAgIHJldHVybiByMy5tZW1vaXplZFN0YXRlID0geyByZWZzOiB7IGdldFNuYXBzaG90OiBuOCwgc2V0U25hcHNob3Q6IG51bGwgfSwgc291cmNlOiBlNSwgc3Vic2NyaWJlOiB0NCB9LCBLdShyMywgZTUsIG44LCB0NCk7CiAgICB9LCB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRlMTMpIHsKICAgICAgICB2YXIgZTUgPSBmYWxzZSwgbjggPSAkYTIoZnVuY3Rpb24oKSB7CiAgICAgICAgICB0aHJvdyBlNSB8fCAoZTUgPSB0cnVlLCB0NCgicjoiICsgKFFyMisrKS50b1N0cmluZygzNikpKSwgRXJyb3IodjE1KDM1NSkpOwogICAgICAgIH0pLCB0NCA9IFZuNChuOClbMV07CiAgICAgICAgcmV0dXJuIChJMjcubW9kZSAmIDIpID09PSAwICYmIChJMjcuZmxhZ3MgfD0gNTE2LCBmcjMoNSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB0NCgicjoiICsgKFFyMisrKS50b1N0cmluZygzNikpOwogICAgICAgIH0sIHZvaWQgMCwgbnVsbCkpLCBuODsKICAgICAgfQogICAgICByZXR1cm4gbjggPSAicjoiICsgKFFyMisrKS50b1N0cmluZygzNiksIFZuNChuOCksIG44OwogICAgfSwgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBmYWxzZSB9LCBiYTIgPSB7IHJlYWRDb250ZXh0OiByZTIwLCB1c2VDYWxsYmFjazogYnUsIHVzZUNvbnRleHQ6IHJlMjAsIHVzZUVmZmVjdDogZHIzLCB1c2VJbXBlcmF0aXZlSGFuZGxlOiBxdSwgdXNlTGF5b3V0RWZmZWN0OiBadSwgdXNlTWVtbzogZXMyLCB1c2VSZWR1Y2VyOiBqbjQsIHVzZVJlZjogY3IzLCB1c2VTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBqbjQoYWUxNyk7CiAgICB9LCB1c2VEZWJ1Z1ZhbHVlOiBTaTMsIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHZhciBuOCA9IGpuNChhZTE3KSwgdDQgPSBuOFswXSwgcjMgPSBuOFsxXTsKICAgICAgcmV0dXJuIGRyMyhmdW5jdGlvbigpIHsKICAgICAgICB2YXIgbDcgPSB0ZTE3LnRyYW5zaXRpb247CiAgICAgICAgdGUxNy50cmFuc2l0aW9uID0gMTsKICAgICAgICB0cnkgewogICAgICAgICAgcjMoZTUpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICB0ZTE3LnRyYW5zaXRpb24gPSBsNzsKICAgICAgICB9CiAgICAgIH0sIFtlNV0pLCB0NDsKICAgIH0sIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uKCkgewogICAgICB2YXIgZTUgPSBqbjQoYWUxNylbMF07CiAgICAgIHJldHVybiBbY3IzKCkuY3VycmVudCwgZTVdOwogICAgfSwgdXNlTXV0YWJsZVNvdXJjZTogR3UsIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gam40KGFlMTcpWzBdOwogICAgfSwgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBmYWxzZSB9LCBlZiA9IHsgcmVhZENvbnRleHQ6IHJlMjAsIHVzZUNhbGxiYWNrOiBidSwgdXNlQ29udGV4dDogcmUyMCwgdXNlRWZmZWN0OiBkcjMsIHVzZUltcGVyYXRpdmVIYW5kbGU6IHF1LCB1c2VMYXlvdXRFZmZlY3Q6IFp1LCB1c2VNZW1vOiBlczIsIHVzZVJlZHVjZXI6IFVuNCwgdXNlUmVmOiBjcjMsIHVzZVN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIFVuNChhZTE3KTsKICAgIH0sIHVzZURlYnVnVmFsdWU6IFNpMywgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24oZTUpIHsKICAgICAgdmFyIG44ID0gVW40KGFlMTcpLCB0NCA9IG44WzBdLCByMyA9IG44WzFdOwogICAgICByZXR1cm4gZHIzKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBsNyA9IHRlMTcudHJhbnNpdGlvbjsKICAgICAgICB0ZTE3LnRyYW5zaXRpb24gPSAxOwogICAgICAgIHRyeSB7CiAgICAgICAgICByMyhlNSk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRlMTcudHJhbnNpdGlvbiA9IGw3OwogICAgICAgIH0KICAgICAgfSwgW2U1XSksIHQ0OwogICAgfSwgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBlNSA9IFVuNChhZTE3KVswXTsKICAgICAgcmV0dXJuIFtjcjMoKS5jdXJyZW50LCBlNV07CiAgICB9LCB1c2VNdXRhYmxlU291cmNlOiBHdSwgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBVbjQoYWUxNylbMF07CiAgICB9LCB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGZhbHNlIH0sIG5mID0gcWU4LlJlYWN0Q3VycmVudE93bmVyLCB1ZTE4ID0gZmFsc2U7CiAgICBmdW5jdGlvbiBHMjMoZTUsIG44LCB0NCwgcjMpIHsKICAgICAgbjguY2hpbGQgPSBlNSA9PT0gbnVsbCA/IFl1KG44LCBudWxsLCB0NCwgcjMpIDogdXIzKG44LCBlNS5jaGlsZCwgdDQsIHIzKTsKICAgIH0KICAgIGZ1bmN0aW9uIFBvKGU1LCBuOCwgdDQsIHIzLCBsNykgewogICAgICB0NCA9IHQ0LnJlbmRlcjsKICAgICAgdmFyIGk0ID0gbjgucmVmOwogICAgICByZXR1cm4geW41KG44LCBsNyksIHIzID0gZ2kyKGU1LCBuOCwgdDQsIHIzLCBpNCwgbDcpLCBlNSAhPT0gbnVsbCAmJiAhdWUxOCA/IChuOC51cGRhdGVRdWV1ZSA9IGU1LnVwZGF0ZVF1ZXVlLCBuOC5mbGFncyAmPSAtNTE3LCBlNS5sYW5lcyAmPSB+bDcsIHllMTUoZTUsIG44LCBsNykpIDogKG44LmZsYWdzIHw9IDEsIEcyMyhlNSwgbjgsIHIzLCBsNyksIG44LmNoaWxkKTsKICAgIH0KICAgIGZ1bmN0aW9uIFRvKGU1LCBuOCwgdDQsIHIzLCBsNywgaTQpIHsKICAgICAgaWYgKGU1ID09PSBudWxsKSB7CiAgICAgICAgdmFyIG80ID0gdDQudHlwZTsKICAgICAgICByZXR1cm4gdHlwZW9mIG80ID09ICJmdW5jdGlvbiIgJiYgIVBpMihvNCkgJiYgbzQuZGVmYXVsdFByb3BzID09PSB2b2lkIDAgJiYgdDQuY29tcGFyZSA9PT0gbnVsbCAmJiB0NC5kZWZhdWx0UHJvcHMgPT09IHZvaWQgMCA/IChuOC50YWcgPSAxNSwgbjgudHlwZSA9IG80LCBuczIoZTUsIG44LCBvNCwgcjMsIGw3LCBpNCkpIDogKGU1ID0gWHQ1KHQ0LnR5cGUsIG51bGwsIHIzLCBuOCwgbjgubW9kZSwgaTQpLCBlNS5yZWYgPSBuOC5yZWYsIGU1LnJldHVybiA9IG44LCBuOC5jaGlsZCA9IGU1KTsKICAgICAgfQogICAgICByZXR1cm4gbzQgPSBlNS5jaGlsZCwgKGw3ICYgaTQpID09PSAwICYmIChsNyA9IG80Lm1lbW9pemVkUHJvcHMsIHQ0ID0gdDQuY29tcGFyZSwgdDQgPSB0NCAhPT0gbnVsbCA/IHQ0IDogcHQxMiwgdDQobDcsIHIzKSAmJiBlNS5yZWYgPT09IG44LnJlZikgPyB5ZTE1KGU1LCBuOCwgaTQpIDogKG44LmZsYWdzIHw9IDEsIGU1ID0gVWU5KG80LCByMyksIGU1LnJlZiA9IG44LnJlZiwgZTUucmV0dXJuID0gbjgsIG44LmNoaWxkID0gZTUpOwogICAgfQogICAgZnVuY3Rpb24gbnMyKGU1LCBuOCwgdDQsIHIzLCBsNywgaTQpIHsKICAgICAgaWYgKGU1ICE9PSBudWxsICYmIHB0MTIoZTUubWVtb2l6ZWRQcm9wcywgcjMpICYmIGU1LnJlZiA9PT0gbjgucmVmKQogICAgICAgIGlmICh1ZTE4ID0gZmFsc2UsIChpNCAmIGw3KSAhPT0gMCkKICAgICAgICAgIChlNS5mbGFncyAmIDE2Mzg0KSAhPT0gMCAmJiAodWUxOCA9IHRydWUpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBuOC5sYW5lcyA9IGU1LmxhbmVzLCB5ZTE1KGU1LCBuOCwgaTQpOwogICAgICByZXR1cm4gTmwoZTUsIG44LCB0NCwgcjMsIGk0KTsKICAgIH0KICAgIGZ1bmN0aW9uIEtyMihlNSwgbjgsIHQ0KSB7CiAgICAgIHZhciByMyA9IG44LnBlbmRpbmdQcm9wcywgbDcgPSByMy5jaGlsZHJlbiwgaTQgPSBlNSAhPT0gbnVsbCA/IGU1Lm1lbW9pemVkU3RhdGUgOiBudWxsOwogICAgICBpZiAocjMubW9kZSA9PT0gImhpZGRlbiIgfHwgcjMubW9kZSA9PT0gInVuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nIikKICAgICAgICBpZiAoKG44Lm1vZGUgJiA0KSA9PT0gMCkKICAgICAgICAgIG44Lm1lbW9pemVkU3RhdGUgPSB7IGJhc2VMYW5lczogMCB9LCBqdDUobjgsIHQ0KTsKICAgICAgICBlbHNlIGlmICgodDQgJiAxMDczNzQxODI0KSAhPT0gMCkKICAgICAgICAgIG44Lm1lbW9pemVkU3RhdGUgPSB7IGJhc2VMYW5lczogMCB9LCBqdDUobjgsIGk0ICE9PSBudWxsID8gaTQuYmFzZUxhbmVzIDogdDQpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBlNSA9IGk0ICE9PSBudWxsID8gaTQuYmFzZUxhbmVzIHwgdDQgOiB0NCwgbjgubGFuZXMgPSBuOC5jaGlsZExhbmVzID0gMTA3Mzc0MTgyNCwgbjgubWVtb2l6ZWRTdGF0ZSA9IHsgYmFzZUxhbmVzOiBlNSB9LCBqdDUobjgsIGU1KSwgbnVsbDsKICAgICAgZWxzZQogICAgICAgIGk0ICE9PSBudWxsID8gKHIzID0gaTQuYmFzZUxhbmVzIHwgdDQsIG44Lm1lbW9pemVkU3RhdGUgPSBudWxsKSA6IHIzID0gdDQsIGp0NShuOCwgcjMpOwogICAgICByZXR1cm4gRzIzKGU1LCBuOCwgbDcsIHQ0KSwgbjguY2hpbGQ7CiAgICB9CiAgICBmdW5jdGlvbiB0czIoZTUsIG44KSB7CiAgICAgIHZhciB0NCA9IG44LnJlZjsKICAgICAgKGU1ID09PSBudWxsICYmIHQ0ICE9PSBudWxsIHx8IGU1ICE9PSBudWxsICYmIGU1LnJlZiAhPT0gdDQpICYmIChuOC5mbGFncyB8PSAxMjgpOwogICAgfQogICAgZnVuY3Rpb24gTmwoZTUsIG44LCB0NCwgcjMsIGw3KSB7CiAgICAgIHZhciBpNCA9IEoxNCh0NCkgPyBLZTYgOiAkMjEuY3VycmVudDsKICAgICAgcmV0dXJuIGk0ID0geG40KG44LCBpNCksIHluNShuOCwgbDcpLCB0NCA9IGdpMihlNSwgbjgsIHQ0LCByMywgaTQsIGw3KSwgZTUgIT09IG51bGwgJiYgIXVlMTggPyAobjgudXBkYXRlUXVldWUgPSBlNS51cGRhdGVRdWV1ZSwgbjguZmxhZ3MgJj0gLTUxNywgZTUubGFuZXMgJj0gfmw3LCB5ZTE1KGU1LCBuOCwgbDcpKSA6IChuOC5mbGFncyB8PSAxLCBHMjMoZTUsIG44LCB0NCwgbDcpLCBuOC5jaGlsZCk7CiAgICB9CiAgICBmdW5jdGlvbiBMbyhlNSwgbjgsIHQ0LCByMywgbDcpIHsKICAgICAgaWYgKEoxNCh0NCkpIHsKICAgICAgICB2YXIgaTQgPSB0cnVlOwogICAgICAgIFd0MTMobjgpOwogICAgICB9IGVsc2UKICAgICAgICBpNCA9IGZhbHNlOwogICAgICBpZiAoeW41KG44LCBsNyksIG44LnN0YXRlTm9kZSA9PT0gbnVsbCkKICAgICAgICBlNSAhPT0gbnVsbCAmJiAoZTUuYWx0ZXJuYXRlID0gbnVsbCwgbjguYWx0ZXJuYXRlID0gbnVsbCwgbjguZmxhZ3MgfD0gMiksIFF1KG44LCB0NCwgcjMpLCBrbChuOCwgdDQsIHIzLCBsNyksIHIzID0gdHJ1ZTsKICAgICAgZWxzZSBpZiAoZTUgPT09IG51bGwpIHsKICAgICAgICB2YXIgbzQgPSBuOC5zdGF0ZU5vZGUsIHUxMSA9IG44Lm1lbW9pemVkUHJvcHM7CiAgICAgICAgbzQucHJvcHMgPSB1MTE7CiAgICAgICAgdmFyIHM4ID0gbzQuY29udGV4dCwgZDE1ID0gdDQuY29udGV4dFR5cGU7CiAgICAgICAgdHlwZW9mIGQxNSA9PSAib2JqZWN0IiAmJiBkMTUgIT09IG51bGwgPyBkMTUgPSByZTIwKGQxNSkgOiAoZDE1ID0gSjE0KHQ0KSA/IEtlNiA6ICQyMS5jdXJyZW50LCBkMTUgPSB4bjQobjgsIGQxNSkpOwogICAgICAgIHZhciB5MTcgPSB0NC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIEMxNyA9IHR5cGVvZiB5MTcgPT0gImZ1bmN0aW9uIiB8fCB0eXBlb2YgbzQuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT0gImZ1bmN0aW9uIjsKICAgICAgICBDMTcgfHwgdHlwZW9mIG80LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICE9ICJmdW5jdGlvbiIgJiYgdHlwZW9mIG80LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgIT0gImZ1bmN0aW9uIiB8fCAodTExICE9PSByMyB8fCBzOCAhPT0gZDE1KSAmJiBTbyhuOCwgbzQsIHIzLCBkMTUpLCBFZTEwID0gZmFsc2U7CiAgICAgICAgdmFyIGgxMCA9IG44Lm1lbW9pemVkU3RhdGU7CiAgICAgICAgbzQuc3RhdGUgPSBoMTAsIHZ0MTAobjgsIHIzLCBvNCwgbDcpLCBzOCA9IG44Lm1lbW9pemVkU3RhdGUsIHUxMSAhPT0gcjMgfHwgaDEwICE9PSBzOCB8fCBaMjIuY3VycmVudCB8fCBFZTEwID8gKHR5cGVvZiB5MTcgPT0gImZ1bmN0aW9uIiAmJiAob3IyKG44LCB0NCwgeTE3LCByMyksIHM4ID0gbjgubWVtb2l6ZWRTdGF0ZSksICh1MTEgPSBFZTEwIHx8IHdvMihuOCwgdDQsIHUxMSwgcjMsIGgxMCwgczgsIGQxNSkpID8gKEMxNyB8fCB0eXBlb2YgbzQuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAhPSAiZnVuY3Rpb24iICYmIHR5cGVvZiBvNC5jb21wb25lbnRXaWxsTW91bnQgIT0gImZ1bmN0aW9uIiB8fCAodHlwZW9mIG80LmNvbXBvbmVudFdpbGxNb3VudCA9PSAiZnVuY3Rpb24iICYmIG80LmNvbXBvbmVudFdpbGxNb3VudCgpLCB0eXBlb2YgbzQuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PSAiZnVuY3Rpb24iICYmIG80LlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksIHR5cGVvZiBvNC5jb21wb25lbnREaWRNb3VudCA9PSAiZnVuY3Rpb24iICYmIChuOC5mbGFncyB8PSA0KSkgOiAodHlwZW9mIG80LmNvbXBvbmVudERpZE1vdW50ID09ICJmdW5jdGlvbiIgJiYgKG44LmZsYWdzIHw9IDQpLCBuOC5tZW1vaXplZFByb3BzID0gcjMsIG44Lm1lbW9pemVkU3RhdGUgPSBzOCksIG80LnByb3BzID0gcjMsIG80LnN0YXRlID0gczgsIG80LmNvbnRleHQgPSBkMTUsIHIzID0gdTExKSA6ICh0eXBlb2YgbzQuY29tcG9uZW50RGlkTW91bnQgPT0gImZ1bmN0aW9uIiAmJiAobjguZmxhZ3MgfD0gNCksIHIzID0gZmFsc2UpOwogICAgICB9IGVsc2UgewogICAgICAgIG80ID0gbjguc3RhdGVOb2RlLCBXdShlNSwgbjgpLCB1MTEgPSBuOC5tZW1vaXplZFByb3BzLCBkMTUgPSBuOC50eXBlID09PSBuOC5lbGVtZW50VHlwZSA/IHUxMSA6IG9lMTIobjgudHlwZSwgdTExKSwgbzQucHJvcHMgPSBkMTUsIEMxNyA9IG44LnBlbmRpbmdQcm9wcywgaDEwID0gbzQuY29udGV4dCwgczggPSB0NC5jb250ZXh0VHlwZSwgdHlwZW9mIHM4ID09ICJvYmplY3QiICYmIHM4ICE9PSBudWxsID8gczggPSByZTIwKHM4KSA6IChzOCA9IEoxNCh0NCkgPyBLZTYgOiAkMjEuY3VycmVudCwgczggPSB4bjQobjgsIHM4KSk7CiAgICAgICAgdmFyIFMyMSA9IHQ0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczsKICAgICAgICAoeTE3ID0gdHlwZW9mIFMyMSA9PSAiZnVuY3Rpb24iIHx8IHR5cGVvZiBvNC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PSAiZnVuY3Rpb24iKSB8fCB0eXBlb2YgbzQuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgIT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgbzQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAhPSAiZnVuY3Rpb24iIHx8ICh1MTEgIT09IEMxNyB8fCBoMTAgIT09IHM4KSAmJiBTbyhuOCwgbzQsIHIzLCBzOCksIEVlMTAgPSBmYWxzZSwgaDEwID0gbjgubWVtb2l6ZWRTdGF0ZSwgbzQuc3RhdGUgPSBoMTAsIHZ0MTAobjgsIHIzLCBvNCwgbDcpOwogICAgICAgIHZhciBrMTggPSBuOC5tZW1vaXplZFN0YXRlOwogICAgICAgIHUxMSAhPT0gQzE3IHx8IGgxMCAhPT0gazE4IHx8IFoyMi5jdXJyZW50IHx8IEVlMTAgPyAodHlwZW9mIFMyMSA9PSAiZnVuY3Rpb24iICYmIChvcjIobjgsIHQ0LCBTMjEsIHIzKSwgazE4ID0gbjgubWVtb2l6ZWRTdGF0ZSksIChkMTUgPSBFZTEwIHx8IHdvMihuOCwgdDQsIGQxNSwgcjMsIGgxMCwgazE4LCBzOCkpID8gKHkxNyB8fCB0eXBlb2YgbzQuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgIT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgbzQuY29tcG9uZW50V2lsbFVwZGF0ZSAhPSAiZnVuY3Rpb24iIHx8ICh0eXBlb2YgbzQuY29tcG9uZW50V2lsbFVwZGF0ZSA9PSAiZnVuY3Rpb24iICYmIG80LmNvbXBvbmVudFdpbGxVcGRhdGUocjMsIGsxOCwgczgpLCB0eXBlb2YgbzQuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT0gImZ1bmN0aW9uIiAmJiBvNC5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShyMywgazE4LCBzOCkpLCB0eXBlb2YgbzQuY29tcG9uZW50RGlkVXBkYXRlID09ICJmdW5jdGlvbiIgJiYgKG44LmZsYWdzIHw9IDQpLCB0eXBlb2YgbzQuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT0gImZ1bmN0aW9uIiAmJiAobjguZmxhZ3MgfD0gMjU2KSkgOiAodHlwZW9mIG80LmNvbXBvbmVudERpZFVwZGF0ZSAhPSAiZnVuY3Rpb24iIHx8IHUxMSA9PT0gZTUubWVtb2l6ZWRQcm9wcyAmJiBoMTAgPT09IGU1Lm1lbW9pemVkU3RhdGUgfHwgKG44LmZsYWdzIHw9IDQpLCB0eXBlb2YgbzQuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgIT0gImZ1bmN0aW9uIiB8fCB1MTEgPT09IGU1Lm1lbW9pemVkUHJvcHMgJiYgaDEwID09PSBlNS5tZW1vaXplZFN0YXRlIHx8IChuOC5mbGFncyB8PSAyNTYpLCBuOC5tZW1vaXplZFByb3BzID0gcjMsIG44Lm1lbW9pemVkU3RhdGUgPSBrMTgpLCBvNC5wcm9wcyA9IHIzLCBvNC5zdGF0ZSA9IGsxOCwgbzQuY29udGV4dCA9IHM4LCByMyA9IGQxNSkgOiAodHlwZW9mIG80LmNvbXBvbmVudERpZFVwZGF0ZSAhPSAiZnVuY3Rpb24iIHx8IHUxMSA9PT0gZTUubWVtb2l6ZWRQcm9wcyAmJiBoMTAgPT09IGU1Lm1lbW9pemVkU3RhdGUgfHwgKG44LmZsYWdzIHw9IDQpLCB0eXBlb2YgbzQuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgIT0gImZ1bmN0aW9uIiB8fCB1MTEgPT09IGU1Lm1lbW9pemVkUHJvcHMgJiYgaDEwID09PSBlNS5tZW1vaXplZFN0YXRlIHx8IChuOC5mbGFncyB8PSAyNTYpLCByMyA9IGZhbHNlKTsKICAgICAgfQogICAgICByZXR1cm4gUGwoZTUsIG44LCB0NCwgcjMsIGk0LCBsNyk7CiAgICB9CiAgICBmdW5jdGlvbiBQbChlNSwgbjgsIHQ0LCByMywgbDcsIGk0KSB7CiAgICAgIHRzMihlNSwgbjgpOwogICAgICB2YXIgbzQgPSAobjguZmxhZ3MgJiA2NCkgIT09IDA7CiAgICAgIGlmICghcjMgJiYgIW80KQogICAgICAgIHJldHVybiBsNyAmJiBtbzIobjgsIHQ0LCBmYWxzZSksIHllMTUoZTUsIG44LCBpNCk7CiAgICAgIHIzID0gbjguc3RhdGVOb2RlLCBuZi5jdXJyZW50ID0gbjg7CiAgICAgIHZhciB1MTEgPSBvNCAmJiB0eXBlb2YgdDQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9ICJmdW5jdGlvbiIgPyBudWxsIDogcjMucmVuZGVyKCk7CiAgICAgIHJldHVybiBuOC5mbGFncyB8PSAxLCBlNSAhPT0gbnVsbCAmJiBvNCA/IChuOC5jaGlsZCA9IHVyMyhuOCwgZTUuY2hpbGQsIG51bGwsIGk0KSwgbjguY2hpbGQgPSB1cjMobjgsIG51bGwsIHUxMSwgaTQpKSA6IEcyMyhlNSwgbjgsIHUxMSwgaTQpLCBuOC5tZW1vaXplZFN0YXRlID0gcjMuc3RhdGUsIGw3ICYmIG1vMihuOCwgdDQsIHRydWUpLCBuOC5jaGlsZDsKICAgIH0KICAgIGZ1bmN0aW9uIHpvKGU1KSB7CiAgICAgIHZhciBuOCA9IGU1LnN0YXRlTm9kZTsKICAgICAgbjgucGVuZGluZ0NvbnRleHQgPyBwbyhlNSwgbjgucGVuZGluZ0NvbnRleHQsIG44LnBlbmRpbmdDb250ZXh0ICE9PSBuOC5jb250ZXh0KSA6IG44LmNvbnRleHQgJiYgcG8oZTUsIG44LmNvbnRleHQsIGZhbHNlKSwgeGwoZTUsIG44LmNvbnRhaW5lckluZm8pOwogICAgfQogICAgdmFyIEZ0NiA9IHsgZGVoeWRyYXRlZDogbnVsbCwgcmV0cnlMYW5lOiAwIH07CiAgICBmdW5jdGlvbiBPbyhlNSwgbjgsIHQ0KSB7CiAgICAgIHZhciByMyA9IG44LnBlbmRpbmdQcm9wcywgbDcgPSBSMjYuY3VycmVudCwgaTQgPSBmYWxzZSwgbzQ7CiAgICAgIHJldHVybiAobzQgPSAobjguZmxhZ3MgJiA2NCkgIT09IDApIHx8IChvNCA9IGU1ICE9PSBudWxsICYmIGU1Lm1lbW9pemVkU3RhdGUgPT09IG51bGwgPyBmYWxzZSA6IChsNyAmIDIpICE9PSAwKSwgbzQgPyAoaTQgPSB0cnVlLCBuOC5mbGFncyAmPSAtNjUpIDogZTUgIT09IG51bGwgJiYgZTUubWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbCB8fCByMy5mYWxsYmFjayA9PT0gdm9pZCAwIHx8IHIzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrID09PSB0cnVlIHx8IChsNyB8PSAxKSwgRDIwKFIyNiwgbDcgJiAxKSwgZTUgPT09IG51bGwgPyAocjMuZmFsbGJhY2sgIT09IHZvaWQgMCAmJiBDbChuOCksIGU1ID0gcjMuY2hpbGRyZW4sIGw3ID0gcjMuZmFsbGJhY2ssIGk0ID8gKGU1ID0gTW8objgsIGU1LCBsNywgdDQpLCBuOC5jaGlsZC5tZW1vaXplZFN0YXRlID0geyBiYXNlTGFuZXM6IHQ0IH0sIG44Lm1lbW9pemVkU3RhdGUgPSBGdDYsIGU1KSA6IHR5cGVvZiByMy51bnN0YWJsZV9leHBlY3RlZExvYWRUaW1lID09ICJudW1iZXIiID8gKGU1ID0gTW8objgsIGU1LCBsNywgdDQpLCBuOC5jaGlsZC5tZW1vaXplZFN0YXRlID0geyBiYXNlTGFuZXM6IHQ0IH0sIG44Lm1lbW9pemVkU3RhdGUgPSBGdDYsIG44LmxhbmVzID0gMzM1NTQ0MzIsIGU1KSA6ICh0NCA9IFRpMyh7IG1vZGU6ICJ2aXNpYmxlIiwgY2hpbGRyZW46IGU1IH0sIG44Lm1vZGUsIHQ0LCBudWxsKSwgdDQucmV0dXJuID0gbjgsIG44LmNoaWxkID0gdDQpKSA6IGU1Lm1lbW9pemVkU3RhdGUgIT09IG51bGwgPyBpNCA/IChyMyA9IERvKGU1LCBuOCwgcjMuY2hpbGRyZW4sIHIzLmZhbGxiYWNrLCB0NCksIGk0ID0gbjguY2hpbGQsIGw3ID0gZTUuY2hpbGQubWVtb2l6ZWRTdGF0ZSwgaTQubWVtb2l6ZWRTdGF0ZSA9IGw3ID09PSBudWxsID8geyBiYXNlTGFuZXM6IHQ0IH0gOiB7IGJhc2VMYW5lczogbDcuYmFzZUxhbmVzIHwgdDQgfSwgaTQuY2hpbGRMYW5lcyA9IGU1LmNoaWxkTGFuZXMgJiB+dDQsIG44Lm1lbW9pemVkU3RhdGUgPSBGdDYsIHIzKSA6ICh0NCA9IFJvKGU1LCBuOCwgcjMuY2hpbGRyZW4sIHQ0KSwgbjgubWVtb2l6ZWRTdGF0ZSA9IG51bGwsIHQ0KSA6IGk0ID8gKHIzID0gRG8oZTUsIG44LCByMy5jaGlsZHJlbiwgcjMuZmFsbGJhY2ssIHQ0KSwgaTQgPSBuOC5jaGlsZCwgbDcgPSBlNS5jaGlsZC5tZW1vaXplZFN0YXRlLCBpNC5tZW1vaXplZFN0YXRlID0gbDcgPT09IG51bGwgPyB7IGJhc2VMYW5lczogdDQgfSA6IHsgYmFzZUxhbmVzOiBsNy5iYXNlTGFuZXMgfCB0NCB9LCBpNC5jaGlsZExhbmVzID0gZTUuY2hpbGRMYW5lcyAmIH50NCwgbjgubWVtb2l6ZWRTdGF0ZSA9IEZ0NiwgcjMpIDogKHQ0ID0gUm8oZTUsIG44LCByMy5jaGlsZHJlbiwgdDQpLCBuOC5tZW1vaXplZFN0YXRlID0gbnVsbCwgdDQpOwogICAgfQogICAgZnVuY3Rpb24gTW8oZTUsIG44LCB0NCwgcjMpIHsKICAgICAgdmFyIGw3ID0gZTUubW9kZSwgaTQgPSBlNS5jaGlsZDsKICAgICAgcmV0dXJuIG44ID0geyBtb2RlOiAiaGlkZGVuIiwgY2hpbGRyZW46IG44IH0sIChsNyAmIDIpID09PSAwICYmIGk0ICE9PSBudWxsID8gKGk0LmNoaWxkTGFuZXMgPSAwLCBpNC5wZW5kaW5nUHJvcHMgPSBuOCkgOiBpNCA9IFRpMyhuOCwgbDcsIDAsIG51bGwpLCB0NCA9IEVuNCh0NCwgbDcsIHIzLCBudWxsKSwgaTQucmV0dXJuID0gZTUsIHQ0LnJldHVybiA9IGU1LCBpNC5zaWJsaW5nID0gdDQsIGU1LmNoaWxkID0gaTQsIHQ0OwogICAgfQogICAgZnVuY3Rpb24gUm8oZTUsIG44LCB0NCwgcjMpIHsKICAgICAgdmFyIGw3ID0gZTUuY2hpbGQ7CiAgICAgIHJldHVybiBlNSA9IGw3LnNpYmxpbmcsIHQ0ID0gVWU5KGw3LCB7IG1vZGU6ICJ2aXNpYmxlIiwgY2hpbGRyZW46IHQ0IH0pLCAobjgubW9kZSAmIDIpID09PSAwICYmICh0NC5sYW5lcyA9IHIzKSwgdDQucmV0dXJuID0gbjgsIHQ0LnNpYmxpbmcgPSBudWxsLCBlNSAhPT0gbnVsbCAmJiAoZTUubmV4dEVmZmVjdCA9IG51bGwsIGU1LmZsYWdzID0gOCwgbjguZmlyc3RFZmZlY3QgPSBuOC5sYXN0RWZmZWN0ID0gZTUpLCBuOC5jaGlsZCA9IHQ0OwogICAgfQogICAgZnVuY3Rpb24gRG8oZTUsIG44LCB0NCwgcjMsIGw3KSB7CiAgICAgIHZhciBpNCA9IG44Lm1vZGUsIG80ID0gZTUuY2hpbGQ7CiAgICAgIGU1ID0gbzQuc2libGluZzsKICAgICAgdmFyIHUxMSA9IHsgbW9kZTogImhpZGRlbiIsIGNoaWxkcmVuOiB0NCB9OwogICAgICByZXR1cm4gKGk0ICYgMikgPT09IDAgJiYgbjguY2hpbGQgIT09IG80ID8gKHQ0ID0gbjguY2hpbGQsIHQ0LmNoaWxkTGFuZXMgPSAwLCB0NC5wZW5kaW5nUHJvcHMgPSB1MTEsIG80ID0gdDQubGFzdEVmZmVjdCwgbzQgIT09IG51bGwgPyAobjguZmlyc3RFZmZlY3QgPSB0NC5maXJzdEVmZmVjdCwgbjgubGFzdEVmZmVjdCA9IG80LCBvNC5uZXh0RWZmZWN0ID0gbnVsbCkgOiBuOC5maXJzdEVmZmVjdCA9IG44Lmxhc3RFZmZlY3QgPSBudWxsKSA6IHQ0ID0gVWU5KG80LCB1MTEpLCBlNSAhPT0gbnVsbCA/IHIzID0gVWU5KGU1LCByMykgOiAocjMgPSBFbjQocjMsIGk0LCBsNywgbnVsbCksIHIzLmZsYWdzIHw9IDIpLCByMy5yZXR1cm4gPSBuOCwgdDQucmV0dXJuID0gbjgsIHQ0LnNpYmxpbmcgPSByMywgbjguY2hpbGQgPSB0NCwgcjM7CiAgICB9CiAgICBmdW5jdGlvbiBJbyhlNSwgbjgpIHsKICAgICAgZTUubGFuZXMgfD0gbjg7CiAgICAgIHZhciB0NCA9IGU1LmFsdGVybmF0ZTsKICAgICAgdDQgIT09IG51bGwgJiYgKHQ0LmxhbmVzIHw9IG44KSwgSHUoZTUucmV0dXJuLCBuOCk7CiAgICB9CiAgICBmdW5jdGlvbiBHcjMoZTUsIG44LCB0NCwgcjMsIGw3LCBpNCkgewogICAgICB2YXIgbzQgPSBlNS5tZW1vaXplZFN0YXRlOwogICAgICBvNCA9PT0gbnVsbCA/IGU1Lm1lbW9pemVkU3RhdGUgPSB7IGlzQmFja3dhcmRzOiBuOCwgcmVuZGVyaW5nOiBudWxsLCByZW5kZXJpbmdTdGFydFRpbWU6IDAsIGxhc3Q6IHIzLCB0YWlsOiB0NCwgdGFpbE1vZGU6IGw3LCBsYXN0RWZmZWN0OiBpNCB9IDogKG80LmlzQmFja3dhcmRzID0gbjgsIG80LnJlbmRlcmluZyA9IG51bGwsIG80LnJlbmRlcmluZ1N0YXJ0VGltZSA9IDAsIG80Lmxhc3QgPSByMywgbzQudGFpbCA9IHQ0LCBvNC50YWlsTW9kZSA9IGw3LCBvNC5sYXN0RWZmZWN0ID0gaTQpOwogICAgfQogICAgZnVuY3Rpb24gRm8oZTUsIG44LCB0NCkgewogICAgICB2YXIgcjMgPSBuOC5wZW5kaW5nUHJvcHMsIGw3ID0gcjMucmV2ZWFsT3JkZXIsIGk0ID0gcjMudGFpbDsKICAgICAgaWYgKEcyMyhlNSwgbjgsIHIzLmNoaWxkcmVuLCB0NCksIHIzID0gUjI2LmN1cnJlbnQsIChyMyAmIDIpICE9PSAwKQogICAgICAgIHIzID0gcjMgJiAxIHwgMiwgbjguZmxhZ3MgfD0gNjQ7CiAgICAgIGVsc2UgewogICAgICAgIGlmIChlNSAhPT0gbnVsbCAmJiAoZTUuZmxhZ3MgJiA2NCkgIT09IDApCiAgICAgICAgICBlOgogICAgICAgICAgICBmb3IgKGU1ID0gbjguY2hpbGQ7IGU1ICE9PSBudWxsOyApIHsKICAgICAgICAgICAgICBpZiAoZTUudGFnID09PSAxMykKICAgICAgICAgICAgICAgIGU1Lm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgSW8oZTUsIHQ0KTsKICAgICAgICAgICAgICBlbHNlIGlmIChlNS50YWcgPT09IDE5KQogICAgICAgICAgICAgICAgSW8oZTUsIHQ0KTsKICAgICAgICAgICAgICBlbHNlIGlmIChlNS5jaGlsZCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgZTUuY2hpbGQucmV0dXJuID0gZTUsIGU1ID0gZTUuY2hpbGQ7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGU1ID09PSBuOCkKICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgZm9yICg7IGU1LnNpYmxpbmcgPT09IG51bGw7ICkgewogICAgICAgICAgICAgICAgaWYgKGU1LnJldHVybiA9PT0gbnVsbCB8fCBlNS5yZXR1cm4gPT09IG44KQogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgZTUgPSBlNS5yZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGU1LnNpYmxpbmcucmV0dXJuID0gZTUucmV0dXJuLCBlNSA9IGU1LnNpYmxpbmc7CiAgICAgICAgICAgIH0KICAgICAgICByMyAmPSAxOwogICAgICB9CiAgICAgIGlmIChEMjAoUjI2LCByMyksIChuOC5tb2RlICYgMikgPT09IDApCiAgICAgICAgbjgubWVtb2l6ZWRTdGF0ZSA9IG51bGw7CiAgICAgIGVsc2UKICAgICAgICBzd2l0Y2ggKGw3KSB7CiAgICAgICAgICBjYXNlICJmb3J3YXJkcyI6CiAgICAgICAgICAgIGZvciAodDQgPSBuOC5jaGlsZCwgbDcgPSBudWxsOyB0NCAhPT0gbnVsbDsgKQogICAgICAgICAgICAgIGU1ID0gdDQuYWx0ZXJuYXRlLCBlNSAhPT0gbnVsbCAmJiBzcjIoZTUpID09PSBudWxsICYmIChsNyA9IHQ0KSwgdDQgPSB0NC5zaWJsaW5nOwogICAgICAgICAgICB0NCA9IGw3LCB0NCA9PT0gbnVsbCA/IChsNyA9IG44LmNoaWxkLCBuOC5jaGlsZCA9IG51bGwpIDogKGw3ID0gdDQuc2libGluZywgdDQuc2libGluZyA9IG51bGwpLCBHcjMobjgsIGZhbHNlLCBsNywgdDQsIGk0LCBuOC5sYXN0RWZmZWN0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJiYWNrd2FyZHMiOgogICAgICAgICAgICBmb3IgKHQ0ID0gbnVsbCwgbDcgPSBuOC5jaGlsZCwgbjguY2hpbGQgPSBudWxsOyBsNyAhPT0gbnVsbDsgKSB7CiAgICAgICAgICAgICAgaWYgKGU1ID0gbDcuYWx0ZXJuYXRlLCBlNSAhPT0gbnVsbCAmJiBzcjIoZTUpID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBuOC5jaGlsZCA9IGw3OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGU1ID0gbDcuc2libGluZywgbDcuc2libGluZyA9IHQ0LCB0NCA9IGw3LCBsNyA9IGU1OwogICAgICAgICAgICB9CiAgICAgICAgICAgIEdyMyhuOCwgdHJ1ZSwgdDQsIG51bGwsIGk0LCBuOC5sYXN0RWZmZWN0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJ0b2dldGhlciI6CiAgICAgICAgICAgIEdyMyhuOCwgZmFsc2UsIG51bGwsIG51bGwsIHZvaWQgMCwgbjgubGFzdEVmZmVjdCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgbjgubWVtb2l6ZWRTdGF0ZSA9IG51bGw7CiAgICAgICAgfQogICAgICByZXR1cm4gbjguY2hpbGQ7CiAgICB9CiAgICBmdW5jdGlvbiB5ZTE1KGU1LCBuOCwgdDQpIHsKICAgICAgaWYgKGU1ICE9PSBudWxsICYmIChuOC5kZXBlbmRlbmNpZXMgPSBlNS5kZXBlbmRlbmNpZXMpLCB4dDEzIHw9IG44LmxhbmVzLCAodDQgJiBuOC5jaGlsZExhbmVzKSAhPT0gMCkgewogICAgICAgIGlmIChlNSAhPT0gbnVsbCAmJiBuOC5jaGlsZCAhPT0gZTUuY2hpbGQpCiAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMTUzKSk7CiAgICAgICAgaWYgKG44LmNoaWxkICE9PSBudWxsKSB7CiAgICAgICAgICBmb3IgKGU1ID0gbjguY2hpbGQsIHQ0ID0gVWU5KGU1LCBlNS5wZW5kaW5nUHJvcHMpLCBuOC5jaGlsZCA9IHQ0LCB0NC5yZXR1cm4gPSBuODsgZTUuc2libGluZyAhPT0gbnVsbDsgKQogICAgICAgICAgICBlNSA9IGU1LnNpYmxpbmcsIHQ0ID0gdDQuc2libGluZyA9IFVlOShlNSwgZTUucGVuZGluZ1Byb3BzKSwgdDQucmV0dXJuID0gbjg7CiAgICAgICAgICB0NC5zaWJsaW5nID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG44LmNoaWxkOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgdmFyIHJzMiwgVGwsIGxzLCBpczsKICAgIHJzMiA9IGZ1bmN0aW9uKGU1LCBuOCkgewogICAgICBmb3IgKHZhciB0NCA9IG44LmNoaWxkOyB0NCAhPT0gbnVsbDsgKSB7CiAgICAgICAgaWYgKHQ0LnRhZyA9PT0gNSB8fCB0NC50YWcgPT09IDYpCiAgICAgICAgICBlNS5hcHBlbmRDaGlsZCh0NC5zdGF0ZU5vZGUpOwogICAgICAgIGVsc2UgaWYgKHQ0LnRhZyAhPT0gNCAmJiB0NC5jaGlsZCAhPT0gbnVsbCkgewogICAgICAgICAgdDQuY2hpbGQucmV0dXJuID0gdDQsIHQ0ID0gdDQuY2hpbGQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHQ0ID09PSBuOCkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGZvciAoOyB0NC5zaWJsaW5nID09PSBudWxsOyApIHsKICAgICAgICAgIGlmICh0NC5yZXR1cm4gPT09IG51bGwgfHwgdDQucmV0dXJuID09PSBuOCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdDQgPSB0NC5yZXR1cm47CiAgICAgICAgfQogICAgICAgIHQ0LnNpYmxpbmcucmV0dXJuID0gdDQucmV0dXJuLCB0NCA9IHQ0LnNpYmxpbmc7CiAgICAgIH0KICAgIH07CiAgICBUbCA9IGZ1bmN0aW9uKCkgewogICAgfTsKICAgIGxzID0gZnVuY3Rpb24oZTUsIG44LCB0NCwgcjMpIHsKICAgICAgdmFyIGw3ID0gZTUubWVtb2l6ZWRQcm9wczsKICAgICAgaWYgKGw3ICE9PSByMykgewogICAgICAgIGU1ID0gbjguc3RhdGVOb2RlLCAkZTEyKGNlMTYuY3VycmVudCk7CiAgICAgICAgdmFyIGk0ID0gbnVsbDsKICAgICAgICBzd2l0Y2ggKHQ0KSB7CiAgICAgICAgICBjYXNlICJpbnB1dCI6CiAgICAgICAgICAgIGw3ID0gbmwoZTUsIGw3KSwgcjMgPSBubChlNSwgcjMpLCBpNCA9IFtdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIm9wdGlvbiI6CiAgICAgICAgICAgIGw3ID0gbGwoZTUsIGw3KSwgcjMgPSBsbChlNSwgcjMpLCBpNCA9IFtdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInNlbGVjdCI6CiAgICAgICAgICAgIGw3ID0gTTI1KHt9LCBsNywgeyB2YWx1ZTogdm9pZCAwIH0pLCByMyA9IE0yNSh7fSwgcjMsIHsgdmFsdWU6IHZvaWQgMCB9KSwgaTQgPSBbXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJ0ZXh0YXJlYSI6CiAgICAgICAgICAgIGw3ID0gaWwoZTUsIGw3KSwgcjMgPSBpbChlNSwgcjMpLCBpNCA9IFtdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHR5cGVvZiBsNy5vbkNsaWNrICE9ICJmdW5jdGlvbiIgJiYgdHlwZW9mIHIzLm9uQ2xpY2sgPT0gImZ1bmN0aW9uIiAmJiAoZTUub25jbGljayA9IGVyMyk7CiAgICAgICAgfQogICAgICAgIHNsKHQ0LCByMyk7CiAgICAgICAgdmFyIG80OwogICAgICAgIHQ0ID0gbnVsbDsKICAgICAgICBmb3IgKGQxNSBpbiBsNykKICAgICAgICAgIGlmICghcjMuaGFzT3duUHJvcGVydHkoZDE1KSAmJiBsNy5oYXNPd25Qcm9wZXJ0eShkMTUpICYmIGw3W2QxNV0gIT0gbnVsbCkKICAgICAgICAgICAgaWYgKGQxNSA9PT0gInN0eWxlIikgewogICAgICAgICAgICAgIHZhciB1MTEgPSBsN1tkMTVdOwogICAgICAgICAgICAgIGZvciAobzQgaW4gdTExKQogICAgICAgICAgICAgICAgdTExLmhhc093blByb3BlcnR5KG80KSAmJiAodDQgfHwgKHQ0ID0ge30pLCB0NFtvNF0gPSAiIik7CiAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgIGQxNSAhPT0gImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiAmJiBkMTUgIT09ICJjaGlsZHJlbiIgJiYgZDE1ICE9PSAic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiAmJiBkMTUgIT09ICJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciICYmIGQxNSAhPT0gImF1dG9Gb2N1cyIgJiYgKG90OS5oYXNPd25Qcm9wZXJ0eShkMTUpID8gaTQgfHwgKGk0ID0gW10pIDogKGk0ID0gaTQgfHwgW10pLnB1c2goZDE1LCBudWxsKSk7CiAgICAgICAgZm9yIChkMTUgaW4gcjMpIHsKICAgICAgICAgIHZhciBzOCA9IHIzW2QxNV07CiAgICAgICAgICBpZiAodTExID0gbDc/LltkMTVdLCByMy5oYXNPd25Qcm9wZXJ0eShkMTUpICYmIHM4ICE9PSB1MTEgJiYgKHM4ICE9IG51bGwgfHwgdTExICE9IG51bGwpKQogICAgICAgICAgICBpZiAoZDE1ID09PSAic3R5bGUiKQogICAgICAgICAgICAgIGlmICh1MTEpIHsKICAgICAgICAgICAgICAgIGZvciAobzQgaW4gdTExKQogICAgICAgICAgICAgICAgICAhdTExLmhhc093blByb3BlcnR5KG80KSB8fCBzOCAmJiBzOC5oYXNPd25Qcm9wZXJ0eShvNCkgfHwgKHQ0IHx8ICh0NCA9IHt9KSwgdDRbbzRdID0gIiIpOwogICAgICAgICAgICAgICAgZm9yIChvNCBpbiBzOCkKICAgICAgICAgICAgICAgICAgczguaGFzT3duUHJvcGVydHkobzQpICYmIHUxMVtvNF0gIT09IHM4W280XSAmJiAodDQgfHwgKHQ0ID0ge30pLCB0NFtvNF0gPSBzOFtvNF0pOwogICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgdDQgfHwgKGk0IHx8IChpNCA9IFtdKSwgaTQucHVzaChkMTUsIHQ0KSksIHQ0ID0gczg7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBkMTUgPT09ICJkYW5nZXJvdXNseVNldElubmVySFRNTCIgPyAoczggPSBzOCA/IHM4Ll9faHRtbCA6IHZvaWQgMCwgdTExID0gdTExID8gdTExLl9faHRtbCA6IHZvaWQgMCwgczggIT0gbnVsbCAmJiB1MTEgIT09IHM4ICYmIChpNCA9IGk0IHx8IFtdKS5wdXNoKGQxNSwgczgpKSA6IGQxNSA9PT0gImNoaWxkcmVuIiA/IHR5cGVvZiBzOCAhPSAic3RyaW5nIiAmJiB0eXBlb2YgczggIT0gIm51bWJlciIgfHwgKGk0ID0gaTQgfHwgW10pLnB1c2goZDE1LCAiIiArIHM4KSA6IGQxNSAhPT0gInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyIgJiYgZDE1ICE9PSAic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIiAmJiAob3Q5Lmhhc093blByb3BlcnR5KGQxNSkgPyAoczggIT0gbnVsbCAmJiBkMTUgPT09ICJvblNjcm9sbCIgJiYgejI2KCJzY3JvbGwiLCBlNSksIGk0IHx8IHUxMSA9PT0gczggfHwgKGk0ID0gW10pKSA6IHR5cGVvZiBzOCA9PSAib2JqZWN0IiAmJiBzOCAhPT0gbnVsbCAmJiBzOC4kJHR5cGVvZiA9PT0gS2wgPyBzOC50b1N0cmluZygpIDogKGk0ID0gaTQgfHwgW10pLnB1c2goZDE1LCBzOCkpOwogICAgICAgIH0KICAgICAgICB0NCAmJiAoaTQgPSBpNCB8fCBbXSkucHVzaCgic3R5bGUiLCB0NCk7CiAgICAgICAgdmFyIGQxNSA9IGk0OwogICAgICAgIChuOC51cGRhdGVRdWV1ZSA9IGQxNSkgJiYgKG44LmZsYWdzIHw9IDQpOwogICAgICB9CiAgICB9OwogICAgaXMgPSBmdW5jdGlvbihlNSwgbjgsIHQ0LCByMykgewogICAgICB0NCAhPT0gcjMgJiYgKG44LmZsYWdzIHw9IDQpOwogICAgfTsKICAgIGZ1bmN0aW9uIEJuNChlNSwgbjgpIHsKICAgICAgaWYgKCFkZTEzKQogICAgICAgIHN3aXRjaCAoZTUudGFpbE1vZGUpIHsKICAgICAgICAgIGNhc2UgImhpZGRlbiI6CiAgICAgICAgICAgIG44ID0gZTUudGFpbDsKICAgICAgICAgICAgZm9yICh2YXIgdDQgPSBudWxsOyBuOCAhPT0gbnVsbDsgKQogICAgICAgICAgICAgIG44LmFsdGVybmF0ZSAhPT0gbnVsbCAmJiAodDQgPSBuOCksIG44ID0gbjguc2libGluZzsKICAgICAgICAgICAgdDQgPT09IG51bGwgPyBlNS50YWlsID0gbnVsbCA6IHQ0LnNpYmxpbmcgPSBudWxsOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImNvbGxhcHNlZCI6CiAgICAgICAgICAgIHQ0ID0gZTUudGFpbDsKICAgICAgICAgICAgZm9yICh2YXIgcjMgPSBudWxsOyB0NCAhPT0gbnVsbDsgKQogICAgICAgICAgICAgIHQ0LmFsdGVybmF0ZSAhPT0gbnVsbCAmJiAocjMgPSB0NCksIHQ0ID0gdDQuc2libGluZzsKICAgICAgICAgICAgcjMgPT09IG51bGwgPyBuOCB8fCBlNS50YWlsID09PSBudWxsID8gZTUudGFpbCA9IG51bGwgOiBlNS50YWlsLnNpYmxpbmcgPSBudWxsIDogcjMuc2libGluZyA9IG51bGw7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gdGYoZTUsIG44LCB0NCkgewogICAgICB2YXIgcjMgPSBuOC5wZW5kaW5nUHJvcHM7CiAgICAgIHN3aXRjaCAobjgudGFnKSB7CiAgICAgICAgY2FzZSAyOgogICAgICAgIGNhc2UgMTY6CiAgICAgICAgY2FzZSAxNToKICAgICAgICBjYXNlIDA6CiAgICAgICAgY2FzZSAxMToKICAgICAgICBjYXNlIDc6CiAgICAgICAgY2FzZSA4OgogICAgICAgIGNhc2UgMTI6CiAgICAgICAgY2FzZSA5OgogICAgICAgIGNhc2UgMTQ6CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICByZXR1cm4gSjE0KG44LnR5cGUpICYmIHRyMygpLCBudWxsOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIHJldHVybiBfbjQoKSwgTzE1KFoyMiksIE8xNSgkMjEpLCB2aTMoKSwgcjMgPSBuOC5zdGF0ZU5vZGUsIHIzLnBlbmRpbmdDb250ZXh0ICYmIChyMy5jb250ZXh0ID0gcjMucGVuZGluZ0NvbnRleHQsIHIzLnBlbmRpbmdDb250ZXh0ID0gbnVsbCksIChlNSA9PT0gbnVsbCB8fCBlNS5jaGlsZCA9PT0gbnVsbCkgJiYgKEl0MTEobjgpID8gbjguZmxhZ3MgfD0gNCA6IHIzLmh5ZHJhdGUgfHwgKG44LmZsYWdzIHw9IDI1NikpLCBUbChuOCksIG51bGw7CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgaGkzKG44KTsKICAgICAgICAgIHZhciBsNyA9ICRlMTIoZ3QxMi5jdXJyZW50KTsKICAgICAgICAgIGlmICh0NCA9IG44LnR5cGUsIGU1ICE9PSBudWxsICYmIG44LnN0YXRlTm9kZSAhPSBudWxsKQogICAgICAgICAgICBscyhlNSwgbjgsIHQ0LCByMywgbDcpLCBlNS5yZWYgIT09IG44LnJlZiAmJiAobjguZmxhZ3MgfD0gMTI4KTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoIXIzKSB7CiAgICAgICAgICAgICAgaWYgKG44LnN0YXRlTm9kZSA9PT0gbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IEVycm9yKHYxNSgxNjYpKTsKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZTUgPSAkZTEyKGNlMTYuY3VycmVudCksIEl0MTEobjgpKSB7CiAgICAgICAgICAgICAgcjMgPSBuOC5zdGF0ZU5vZGUsIHQ0ID0gbjgudHlwZTsKICAgICAgICAgICAgICB2YXIgaTQgPSBuOC5tZW1vaXplZFByb3BzOwogICAgICAgICAgICAgIHN3aXRjaCAocjNbQ2UxOV0gPSBuOCwgcjNbbnIzXSA9IGk0LCB0NCkgewogICAgICAgICAgICAgICAgY2FzZSAiZGlhbG9nIjoKICAgICAgICAgICAgICAgICAgejI2KCJjYW5jZWwiLCByMyksIHoyNigiY2xvc2UiLCByMyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiaWZyYW1lIjoKICAgICAgICAgICAgICAgIGNhc2UgIm9iamVjdCI6CiAgICAgICAgICAgICAgICBjYXNlICJlbWJlZCI6CiAgICAgICAgICAgICAgICAgIHoyNigibG9hZCIsIHIzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ2aWRlbyI6CiAgICAgICAgICAgICAgICBjYXNlICJhdWRpbyI6CiAgICAgICAgICAgICAgICAgIGZvciAoZTUgPSAwOyBlNSA8ICRuNC5sZW5ndGg7IGU1KyspCiAgICAgICAgICAgICAgICAgICAgejI2KCRuNFtlNV0sIHIzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJzb3VyY2UiOgogICAgICAgICAgICAgICAgICB6MjYoImVycm9yIiwgcjMpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImltZyI6CiAgICAgICAgICAgICAgICBjYXNlICJpbWFnZSI6CiAgICAgICAgICAgICAgICBjYXNlICJsaW5rIjoKICAgICAgICAgICAgICAgICAgejI2KCJlcnJvciIsIHIzKSwgejI2KCJsb2FkIiwgcjMpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImRldGFpbHMiOgogICAgICAgICAgICAgICAgICB6MjYoInRvZ2dsZSIsIHIzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJpbnB1dCI6CiAgICAgICAgICAgICAgICAgIGppMihyMywgaTQpLCB6MjYoImludmFsaWQiLCByMyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAic2VsZWN0IjoKICAgICAgICAgICAgICAgICAgcjMuX3dyYXBwZXJTdGF0ZSA9IHsgd2FzTXVsdGlwbGU6ICEhaTQubXVsdGlwbGUgfSwgejI2KCJpbnZhbGlkIiwgcjMpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgInRleHRhcmVhIjoKICAgICAgICAgICAgICAgICAgVmkyKHIzLCBpNCksIHoyNigiaW52YWxpZCIsIHIzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc2wodDQsIGk0KSwgZTUgPSBudWxsOwogICAgICAgICAgICAgIGZvciAodmFyIG80IGluIGk0KQogICAgICAgICAgICAgICAgaTQuaGFzT3duUHJvcGVydHkobzQpICYmIChsNyA9IGk0W280XSwgbzQgPT09ICJjaGlsZHJlbiIgPyB0eXBlb2YgbDcgPT0gInN0cmluZyIgPyByMy50ZXh0Q29udGVudCAhPT0gbDcgJiYgKGU1ID0gWyJjaGlsZHJlbiIsIGw3XSkgOiB0eXBlb2YgbDcgPT0gIm51bWJlciIgJiYgcjMudGV4dENvbnRlbnQgIT09ICIiICsgbDcgJiYgKGU1ID0gWyJjaGlsZHJlbiIsICIiICsgbDddKSA6IG90OS5oYXNPd25Qcm9wZXJ0eShvNCkgJiYgbDcgIT0gbnVsbCAmJiBvNCA9PT0gIm9uU2Nyb2xsIiAmJiB6MjYoInNjcm9sbCIsIHIzKSk7CiAgICAgICAgICAgICAgc3dpdGNoICh0NCkgewogICAgICAgICAgICAgICAgY2FzZSAiaW5wdXQiOgogICAgICAgICAgICAgICAgICBOdDgocjMpLCBVaTIocjMsIGk0LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0YXJlYSI6CiAgICAgICAgICAgICAgICAgIE50OChyMyksIEJpMihyMyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAic2VsZWN0IjoKICAgICAgICAgICAgICAgIGNhc2UgIm9wdGlvbiI6CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgdHlwZW9mIGk0Lm9uQ2xpY2sgPT0gImZ1bmN0aW9uIiAmJiAocjMub25jbGljayA9IGVyMyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHIzID0gZTUsIG44LnVwZGF0ZVF1ZXVlID0gcjMsIHIzICE9PSBudWxsICYmIChuOC5mbGFncyB8PSA0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzd2l0Y2ggKG80ID0gbDcubm9kZVR5cGUgPT09IDkgPyBsNyA6IGw3Lm93bmVyRG9jdW1lbnQsIGU1ID09PSBvbC5odG1sICYmIChlNSA9IHFvKHQ0KSksIGU1ID09PSBvbC5odG1sID8gdDQgPT09ICJzY3JpcHQiID8gKGU1ID0gbzQuY3JlYXRlRWxlbWVudCgiZGl2IiksIGU1LmlubmVySFRNTCA9ICI8c2NyaXB0PjxcL3NjcmlwdD4iLCBlNSA9IGU1LnJlbW92ZUNoaWxkKGU1LmZpcnN0Q2hpbGQpKSA6IHR5cGVvZiByMy5pcyA9PSAic3RyaW5nIiA/IGU1ID0gbzQuY3JlYXRlRWxlbWVudCh0NCwgeyBpczogcjMuaXMgfSkgOiAoZTUgPSBvNC5jcmVhdGVFbGVtZW50KHQ0KSwgdDQgPT09ICJzZWxlY3QiICYmIChvNCA9IGU1LCByMy5tdWx0aXBsZSA/IG80Lm11bHRpcGxlID0gdHJ1ZSA6IHIzLnNpemUgJiYgKG80LnNpemUgPSByMy5zaXplKSkpIDogZTUgPSBvNC5jcmVhdGVFbGVtZW50TlMoZTUsIHQ0KSwgZTVbQ2UxOV0gPSBuOCwgZTVbbnIzXSA9IHIzLCByczIoZTUsIG44LCBmYWxzZSwgZmFsc2UpLCBuOC5zdGF0ZU5vZGUgPSBlNSwgbzQgPSBhbCh0NCwgcjMpLCB0NCkgewogICAgICAgICAgICAgICAgY2FzZSAiZGlhbG9nIjoKICAgICAgICAgICAgICAgICAgejI2KCJjYW5jZWwiLCBlNSksIHoyNigiY2xvc2UiLCBlNSksIGw3ID0gcjM7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiaWZyYW1lIjoKICAgICAgICAgICAgICAgIGNhc2UgIm9iamVjdCI6CiAgICAgICAgICAgICAgICBjYXNlICJlbWJlZCI6CiAgICAgICAgICAgICAgICAgIHoyNigibG9hZCIsIGU1KSwgbDcgPSByMzsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ2aWRlbyI6CiAgICAgICAgICAgICAgICBjYXNlICJhdWRpbyI6CiAgICAgICAgICAgICAgICAgIGZvciAobDcgPSAwOyBsNyA8ICRuNC5sZW5ndGg7IGw3KyspCiAgICAgICAgICAgICAgICAgICAgejI2KCRuNFtsN10sIGU1KTsKICAgICAgICAgICAgICAgICAgbDcgPSByMzsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJzb3VyY2UiOgogICAgICAgICAgICAgICAgICB6MjYoImVycm9yIiwgZTUpLCBsNyA9IHIzOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImltZyI6CiAgICAgICAgICAgICAgICBjYXNlICJpbWFnZSI6CiAgICAgICAgICAgICAgICBjYXNlICJsaW5rIjoKICAgICAgICAgICAgICAgICAgejI2KCJlcnJvciIsIGU1KSwgejI2KCJsb2FkIiwgZTUpLCBsNyA9IHIzOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImRldGFpbHMiOgogICAgICAgICAgICAgICAgICB6MjYoInRvZ2dsZSIsIGU1KSwgbDcgPSByMzsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJpbnB1dCI6CiAgICAgICAgICAgICAgICAgIGppMihlNSwgcjMpLCBsNyA9IG5sKGU1LCByMyksIHoyNigiaW52YWxpZCIsIGU1KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJvcHRpb24iOgogICAgICAgICAgICAgICAgICBsNyA9IGxsKGU1LCByMyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAic2VsZWN0IjoKICAgICAgICAgICAgICAgICAgZTUuX3dyYXBwZXJTdGF0ZSA9IHsgd2FzTXVsdGlwbGU6ICEhcjMubXVsdGlwbGUgfSwgbDcgPSBNMjUoe30sIHIzLCB7IHZhbHVlOiB2b2lkIDAgfSksIHoyNigiaW52YWxpZCIsIGU1KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0YXJlYSI6CiAgICAgICAgICAgICAgICAgIFZpMihlNSwgcjMpLCBsNyA9IGlsKGU1LCByMyksIHoyNigiaW52YWxpZCIsIGU1KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICBsNyA9IHIzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzbCh0NCwgbDcpOwogICAgICAgICAgICAgIHZhciB1MTEgPSBsNzsKICAgICAgICAgICAgICBmb3IgKGk0IGluIHUxMSkKICAgICAgICAgICAgICAgIGlmICh1MTEuaGFzT3duUHJvcGVydHkoaTQpKSB7CiAgICAgICAgICAgICAgICAgIHZhciBzOCA9IHUxMVtpNF07CiAgICAgICAgICAgICAgICAgIGk0ID09PSAic3R5bGUiID8gbnUoZTUsIHM4KSA6IGk0ID09PSAiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiID8gKHM4ID0gczggPyBzOC5fX2h0bWwgOiB2b2lkIDAsIHM4ICE9IG51bGwgJiYgYm8oZTUsIHM4KSkgOiBpNCA9PT0gImNoaWxkcmVuIiA/IHR5cGVvZiBzOCA9PSAic3RyaW5nIiA/ICh0NCAhPT0gInRleHRhcmVhIiB8fCBzOCAhPT0gIiIpICYmIHV0MTMoZTUsIHM4KSA6IHR5cGVvZiBzOCA9PSAibnVtYmVyIiAmJiB1dDEzKGU1LCAiIiArIHM4KSA6IGk0ICE9PSAic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiAmJiBpNCAhPT0gInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIgJiYgaTQgIT09ICJhdXRvRm9jdXMiICYmIChvdDkuaGFzT3duUHJvcGVydHkoaTQpID8gczggIT0gbnVsbCAmJiBpNCA9PT0gIm9uU2Nyb2xsIiAmJiB6MjYoInNjcm9sbCIsIGU1KSA6IHM4ICE9IG51bGwgJiYgV2woZTUsIGk0LCBzOCwgbzQpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzd2l0Y2ggKHQ0KSB7CiAgICAgICAgICAgICAgICBjYXNlICJpbnB1dCI6CiAgICAgICAgICAgICAgICAgIE50OChlNSksIFVpMihlNSwgcjMsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0YXJlYSI6CiAgICAgICAgICAgICAgICAgIE50OChlNSksIEJpMihlNSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAib3B0aW9uIjoKICAgICAgICAgICAgICAgICAgcjMudmFsdWUgIT0gbnVsbCAmJiBlNS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgIiIgKyBEZTEzKHIzLnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAic2VsZWN0IjoKICAgICAgICAgICAgICAgICAgZTUubXVsdGlwbGUgPSAhIXIzLm11bHRpcGxlLCBpNCA9IHIzLnZhbHVlLCBpNCAhPSBudWxsID8gcG4zKGU1LCAhIXIzLm11bHRpcGxlLCBpNCwgZmFsc2UpIDogcjMuZGVmYXVsdFZhbHVlICE9IG51bGwgJiYgcG4zKGU1LCAhIXIzLm11bHRpcGxlLCByMy5kZWZhdWx0VmFsdWUsIHRydWUpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgIHR5cGVvZiBsNy5vbkNsaWNrID09ICJmdW5jdGlvbiIgJiYgKGU1Lm9uY2xpY2sgPSBlcjMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBNdSh0NCwgcjMpICYmIChuOC5mbGFncyB8PSA0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBuOC5yZWYgIT09IG51bGwgJiYgKG44LmZsYWdzIHw9IDEyOCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICBpZiAoZTUgJiYgbjguc3RhdGVOb2RlICE9IG51bGwpCiAgICAgICAgICAgIGlzKGU1LCBuOCwgZTUubWVtb2l6ZWRQcm9wcywgcjMpOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcjMgIT0gInN0cmluZyIgJiYgbjguc3RhdGVOb2RlID09PSBudWxsKQogICAgICAgICAgICAgIHRocm93IEVycm9yKHYxNSgxNjYpKTsKICAgICAgICAgICAgdDQgPSAkZTEyKGd0MTIuY3VycmVudCksICRlMTIoY2UxNi5jdXJyZW50KSwgSXQxMShuOCkgPyAocjMgPSBuOC5zdGF0ZU5vZGUsIHQ0ID0gbjgubWVtb2l6ZWRQcm9wcywgcjNbQ2UxOV0gPSBuOCwgcjMubm9kZVZhbHVlICE9PSB0NCAmJiAobjguZmxhZ3MgfD0gNCkpIDogKHIzID0gKHQ0Lm5vZGVUeXBlID09PSA5ID8gdDQgOiB0NC5vd25lckRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShyMyksIHIzW0NlMTldID0gbjgsIG44LnN0YXRlTm9kZSA9IHIzKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIGNhc2UgMTM6CiAgICAgICAgICByZXR1cm4gTzE1KFIyNiksIHIzID0gbjgubWVtb2l6ZWRTdGF0ZSwgKG44LmZsYWdzICYgNjQpICE9PSAwID8gKG44LmxhbmVzID0gdDQsIG44KSA6IChyMyA9IHIzICE9PSBudWxsLCB0NCA9IGZhbHNlLCBlNSA9PT0gbnVsbCA/IG44Lm1lbW9pemVkUHJvcHMuZmFsbGJhY2sgIT09IHZvaWQgMCAmJiBJdDExKG44KSA6IHQ0ID0gZTUubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCwgcjMgJiYgIXQ0ICYmIChuOC5tb2RlICYgMikgIT09IDAgJiYgKGU1ID09PSBudWxsICYmIG44Lm1lbW9pemVkUHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUgfHwgKFIyNi5jdXJyZW50ICYgMSkgIT09IDAgPyBCMjQgPT09IDAgJiYgKEIyNCA9IDMpIDogKChCMjQgPT09IDAgfHwgQjI0ID09PSAzKSAmJiAoQjI0ID0gNCksIFkzMCA9PT0gbnVsbCB8fCAoeHQxMyAmIDEzNDIxNzcyNykgPT09IDAgJiYgKExuNCAmIDEzNDIxNzcyNykgPT09IDAgfHwgd241KFkzMCwgUTE3KSkpLCAocjMgfHwgdDQpICYmIChuOC5mbGFncyB8PSA0KSwgbnVsbCk7CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIF9uNCgpLCBUbChuOCksIGU1ID09PSBudWxsICYmIEx1KG44LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSwgbnVsbDsKICAgICAgICBjYXNlIDEwOgogICAgICAgICAgcmV0dXJuIHBpMyhuOCksIG51bGw7CiAgICAgICAgY2FzZSAxNzoKICAgICAgICAgIHJldHVybiBKMTQobjgudHlwZSkgJiYgdHIzKCksIG51bGw7CiAgICAgICAgY2FzZSAxOToKICAgICAgICAgIGlmIChPMTUoUjI2KSwgcjMgPSBuOC5tZW1vaXplZFN0YXRlLCByMyA9PT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICBpZiAoaTQgPSAobjguZmxhZ3MgJiA2NCkgIT09IDAsIG80ID0gcjMucmVuZGVyaW5nLCBvNCA9PT0gbnVsbCkKICAgICAgICAgICAgaWYgKGk0KQogICAgICAgICAgICAgIEJuNChyMywgZmFsc2UpOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBpZiAoQjI0ICE9PSAwIHx8IGU1ICE9PSBudWxsICYmIChlNS5mbGFncyAmIDY0KSAhPT0gMCkKICAgICAgICAgICAgICAgIGZvciAoZTUgPSBuOC5jaGlsZDsgZTUgIT09IG51bGw7ICkgewogICAgICAgICAgICAgICAgICBpZiAobzQgPSBzcjIoZTUpLCBvNCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGZvciAobjguZmxhZ3MgfD0gNjQsIEJuNChyMywgZmFsc2UpLCBpNCA9IG80LnVwZGF0ZVF1ZXVlLCBpNCAhPT0gbnVsbCAmJiAobjgudXBkYXRlUXVldWUgPSBpNCwgbjguZmxhZ3MgfD0gNCksIHIzLmxhc3RFZmZlY3QgPT09IG51bGwgJiYgKG44LmZpcnN0RWZmZWN0ID0gbnVsbCksIG44Lmxhc3RFZmZlY3QgPSByMy5sYXN0RWZmZWN0LCByMyA9IHQ0LCB0NCA9IG44LmNoaWxkOyB0NCAhPT0gbnVsbDsgKQogICAgICAgICAgICAgICAgICAgICAgaTQgPSB0NCwgZTUgPSByMywgaTQuZmxhZ3MgJj0gMiwgaTQubmV4dEVmZmVjdCA9IG51bGwsIGk0LmZpcnN0RWZmZWN0ID0gbnVsbCwgaTQubGFzdEVmZmVjdCA9IG51bGwsIG80ID0gaTQuYWx0ZXJuYXRlLCBvNCA9PT0gbnVsbCA/IChpNC5jaGlsZExhbmVzID0gMCwgaTQubGFuZXMgPSBlNSwgaTQuY2hpbGQgPSBudWxsLCBpNC5tZW1vaXplZFByb3BzID0gbnVsbCwgaTQubWVtb2l6ZWRTdGF0ZSA9IG51bGwsIGk0LnVwZGF0ZVF1ZXVlID0gbnVsbCwgaTQuZGVwZW5kZW5jaWVzID0gbnVsbCwgaTQuc3RhdGVOb2RlID0gbnVsbCkgOiAoaTQuY2hpbGRMYW5lcyA9IG80LmNoaWxkTGFuZXMsIGk0LmxhbmVzID0gbzQubGFuZXMsIGk0LmNoaWxkID0gbzQuY2hpbGQsIGk0Lm1lbW9pemVkUHJvcHMgPSBvNC5tZW1vaXplZFByb3BzLCBpNC5tZW1vaXplZFN0YXRlID0gbzQubWVtb2l6ZWRTdGF0ZSwgaTQudXBkYXRlUXVldWUgPSBvNC51cGRhdGVRdWV1ZSwgaTQudHlwZSA9IG80LnR5cGUsIGU1ID0gbzQuZGVwZW5kZW5jaWVzLCBpNC5kZXBlbmRlbmNpZXMgPSBlNSA9PT0gbnVsbCA/IG51bGwgOiB7IGxhbmVzOiBlNS5sYW5lcywgZmlyc3RDb250ZXh0OiBlNS5maXJzdENvbnRleHQgfSksIHQ0ID0gdDQuc2libGluZzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gRDIwKFIyNiwgUjI2LmN1cnJlbnQgJiAxIHwgMiksIG44LmNoaWxkOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGU1ID0gZTUuc2libGluZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByMy50YWlsICE9PSBudWxsICYmIEEyMCgpID4gRGwgJiYgKG44LmZsYWdzIHw9IDY0LCBpNCA9IHRydWUsIEJuNChyMywgZmFsc2UpLCBuOC5sYW5lcyA9IDMzNTU0NDMyKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICghaTQpCiAgICAgICAgICAgICAgaWYgKGU1ID0gc3IyKG80KSwgZTUgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIGlmIChuOC5mbGFncyB8PSA2NCwgaTQgPSB0cnVlLCB0NCA9IGU1LnVwZGF0ZVF1ZXVlLCB0NCAhPT0gbnVsbCAmJiAobjgudXBkYXRlUXVldWUgPSB0NCwgbjguZmxhZ3MgfD0gNCksIEJuNChyMywgdHJ1ZSksIHIzLnRhaWwgPT09IG51bGwgJiYgcjMudGFpbE1vZGUgPT09ICJoaWRkZW4iICYmICFvNC5hbHRlcm5hdGUgJiYgIWRlMTMpCiAgICAgICAgICAgICAgICAgIHJldHVybiBuOCA9IG44Lmxhc3RFZmZlY3QgPSByMy5sYXN0RWZmZWN0LCBuOCAhPT0gbnVsbCAmJiAobjgubmV4dEVmZmVjdCA9IG51bGwpLCBudWxsOwogICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgMiAqIEEyMCgpIC0gcjMucmVuZGVyaW5nU3RhcnRUaW1lID4gRGwgJiYgdDQgIT09IDEwNzM3NDE4MjQgJiYgKG44LmZsYWdzIHw9IDY0LCBpNCA9IHRydWUsIEJuNChyMywgZmFsc2UpLCBuOC5sYW5lcyA9IDMzNTU0NDMyKTsKICAgICAgICAgICAgcjMuaXNCYWNrd2FyZHMgPyAobzQuc2libGluZyA9IG44LmNoaWxkLCBuOC5jaGlsZCA9IG80KSA6ICh0NCA9IHIzLmxhc3QsIHQ0ICE9PSBudWxsID8gdDQuc2libGluZyA9IG80IDogbjguY2hpbGQgPSBvNCwgcjMubGFzdCA9IG80KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByMy50YWlsICE9PSBudWxsID8gKHQ0ID0gcjMudGFpbCwgcjMucmVuZGVyaW5nID0gdDQsIHIzLnRhaWwgPSB0NC5zaWJsaW5nLCByMy5sYXN0RWZmZWN0ID0gbjgubGFzdEVmZmVjdCwgcjMucmVuZGVyaW5nU3RhcnRUaW1lID0gQTIwKCksIHQ0LnNpYmxpbmcgPSBudWxsLCBuOCA9IFIyNi5jdXJyZW50LCBEMjAoUjI2LCBpNCA/IG44ICYgMSB8IDIgOiBuOCAmIDEpLCB0NCkgOiBudWxsOwogICAgICAgIGNhc2UgMjM6CiAgICAgICAgY2FzZSAyNDoKICAgICAgICAgIHJldHVybiBOaTIoKSwgZTUgIT09IG51bGwgJiYgZTUubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAhPSAobjgubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkgJiYgcjMubW9kZSAhPT0gInVuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nIiAmJiAobjguZmxhZ3MgfD0gNCksIG51bGw7CiAgICAgIH0KICAgICAgdGhyb3cgRXJyb3IodjE1KDE1NiwgbjgudGFnKSk7CiAgICB9CiAgICBmdW5jdGlvbiByZihlNSkgewogICAgICBzd2l0Y2ggKGU1LnRhZykgewogICAgICAgIGNhc2UgMToKICAgICAgICAgIEoxNChlNS50eXBlKSAmJiB0cjMoKTsKICAgICAgICAgIHZhciBuOCA9IGU1LmZsYWdzOwogICAgICAgICAgcmV0dXJuIG44ICYgNDA5NiA/IChlNS5mbGFncyA9IG44ICYgLTQwOTcgfCA2NCwgZTUpIDogbnVsbDsKICAgICAgICBjYXNlIDM6CiAgICAgICAgICBpZiAoX240KCksIE8xNShaMjIpLCBPMTUoJDIxKSwgdmkzKCksIG44ID0gZTUuZmxhZ3MsIChuOCAmIDY0KSAhPT0gMCkKICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDI4NSkpOwogICAgICAgICAgcmV0dXJuIGU1LmZsYWdzID0gbjggJiAtNDA5NyB8IDY0LCBlNTsKICAgICAgICBjYXNlIDU6CiAgICAgICAgICByZXR1cm4gaGkzKGU1KSwgbnVsbDsKICAgICAgICBjYXNlIDEzOgogICAgICAgICAgcmV0dXJuIE8xNShSMjYpLCBuOCA9IGU1LmZsYWdzLCBuOCAmIDQwOTYgPyAoZTUuZmxhZ3MgPSBuOCAmIC00MDk3IHwgNjQsIGU1KSA6IG51bGw7CiAgICAgICAgY2FzZSAxOToKICAgICAgICAgIHJldHVybiBPMTUoUjI2KSwgbnVsbDsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICByZXR1cm4gX240KCksIG51bGw7CiAgICAgICAgY2FzZSAxMDoKICAgICAgICAgIHJldHVybiBwaTMoZTUpLCBudWxsOwogICAgICAgIGNhc2UgMjM6CiAgICAgICAgY2FzZSAyNDoKICAgICAgICAgIHJldHVybiBOaTIoKSwgbnVsbDsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGtpMihlNSwgbjgpIHsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgdDQgPSAiIiwgcjMgPSBuODsKICAgICAgICBkbwogICAgICAgICAgdDQgKz0ganMyKHIzKSwgcjMgPSByMy5yZXR1cm47CiAgICAgICAgd2hpbGUgKHIzKTsKICAgICAgICB2YXIgbDcgPSB0NDsKICAgICAgfSBjYXRjaCAoaTQpIHsKICAgICAgICBsNyA9IGAKRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogYCArIGk0Lm1lc3NhZ2UgKyBgCmAgKyBpNC5zdGFjazsKICAgICAgfQogICAgICByZXR1cm4geyB2YWx1ZTogZTUsIHNvdXJjZTogbjgsIHN0YWNrOiBsNyB9OwogICAgfQogICAgZnVuY3Rpb24gTGwoZTUsIG44KSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc29sZS5lcnJvcihuOC52YWx1ZSk7CiAgICAgIH0gY2F0Y2ggKHQ0KSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgIHRocm93IHQ0OwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICB2YXIgbGYgPSB0eXBlb2YgV2Vha01hcCA9PSAiZnVuY3Rpb24iID8gV2Vha01hcCA6IE1hcDsKICAgIGZ1bmN0aW9uIG9zMyhlNSwgbjgsIHQ0KSB7CiAgICAgIHQ0ID0gTGUxMCgtMSwgdDQpLCB0NC50YWcgPSAzLCB0NC5wYXlsb2FkID0geyBlbGVtZW50OiBudWxsIH07CiAgICAgIHZhciByMyA9IG44LnZhbHVlOwogICAgICByZXR1cm4gdDQuY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICBocjMgfHwgKGhyMyA9IHRydWUsIElsID0gcjMpLCBMbChlNSwgbjgpOwogICAgICB9LCB0NDsKICAgIH0KICAgIGZ1bmN0aW9uIHVzMihlNSwgbjgsIHQ0KSB7CiAgICAgIHQ0ID0gTGUxMCgtMSwgdDQpLCB0NC50YWcgPSAzOwogICAgICB2YXIgcjMgPSBlNS50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjsKICAgICAgaWYgKHR5cGVvZiByMyA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdmFyIGw3ID0gbjgudmFsdWU7CiAgICAgICAgdDQucGF5bG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIExsKGU1LCBuOCksIHIzKGw3KTsKICAgICAgICB9OwogICAgICB9CiAgICAgIHZhciBpNCA9IGU1LnN0YXRlTm9kZTsKICAgICAgcmV0dXJuIGk0ICE9PSBudWxsICYmIHR5cGVvZiBpNC5jb21wb25lbnREaWRDYXRjaCA9PSAiZnVuY3Rpb24iICYmICh0NC5jYWxsYmFjayA9IGZ1bmN0aW9uKCkgewogICAgICAgIHR5cGVvZiByMyAhPSAiZnVuY3Rpb24iICYmIChmZTEyID09PSBudWxsID8gZmUxMiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFt0aGlzXSkgOiBmZTEyLmFkZCh0aGlzKSwgTGwoZTUsIG44KSk7CiAgICAgICAgdmFyIG80ID0gbjguc3RhY2s7CiAgICAgICAgdGhpcy5jb21wb25lbnREaWRDYXRjaChuOC52YWx1ZSwgeyBjb21wb25lbnRTdGFjazogbzQgIT09IG51bGwgPyBvNCA6ICIiIH0pOwogICAgICB9KSwgdDQ7CiAgICB9CiAgICB2YXIgb2YgPSB0eXBlb2YgV2Vha1NldCA9PSAiZnVuY3Rpb24iID8gV2Vha1NldCA6IFNldDsKICAgIGZ1bmN0aW9uIGpvKGU1KSB7CiAgICAgIHZhciBuOCA9IGU1LnJlZjsKICAgICAgaWYgKG44ICE9PSBudWxsKQogICAgICAgIGlmICh0eXBlb2YgbjggPT0gImZ1bmN0aW9uIikKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIG44KG51bGwpOwogICAgICAgICAgfSBjYXRjaCAodDQpIHsKICAgICAgICAgICAgUmUxNihlNSwgdDQpOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIG44LmN1cnJlbnQgPSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gdWYoZTUsIG44KSB7CiAgICAgIHN3aXRjaCAobjgudGFnKSB7CiAgICAgICAgY2FzZSAwOgogICAgICAgIGNhc2UgMTE6CiAgICAgICAgY2FzZSAxNToKICAgICAgICBjYXNlIDIyOgogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgMToKICAgICAgICAgIGlmIChuOC5mbGFncyAmIDI1NiAmJiBlNSAhPT0gbnVsbCkgewogICAgICAgICAgICB2YXIgdDQgPSBlNS5tZW1vaXplZFByb3BzLCByMyA9IGU1Lm1lbW9pemVkU3RhdGU7CiAgICAgICAgICAgIGU1ID0gbjguc3RhdGVOb2RlLCBuOCA9IGU1LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKG44LmVsZW1lbnRUeXBlID09PSBuOC50eXBlID8gdDQgOiBvZTEyKG44LnR5cGUsIHQ0KSwgcjMpLCBlNS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG44OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIG44LmZsYWdzICYgMjU2ICYmIGFpMihuOC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FzZSA1OgogICAgICAgIGNhc2UgNjoKICAgICAgICBjYXNlIDQ6CiAgICAgICAgY2FzZSAxNzoKICAgICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aHJvdyBFcnJvcih2MTUoMTYzKSk7CiAgICB9CiAgICBmdW5jdGlvbiBzZihlNSwgbjgsIHQ0KSB7CiAgICAgIHN3aXRjaCAodDQudGFnKSB7CiAgICAgICAgY2FzZSAwOgogICAgICAgIGNhc2UgMTE6CiAgICAgICAgY2FzZSAxNToKICAgICAgICBjYXNlIDIyOgogICAgICAgICAgaWYgKG44ID0gdDQudXBkYXRlUXVldWUsIG44ID0gbjggIT09IG51bGwgPyBuOC5sYXN0RWZmZWN0IDogbnVsbCwgbjggIT09IG51bGwpIHsKICAgICAgICAgICAgZTUgPSBuOCA9IG44Lm5leHQ7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBpZiAoKGU1LnRhZyAmIDMpID09PSAzKSB7CiAgICAgICAgICAgICAgICB2YXIgcjMgPSBlNS5jcmVhdGU7CiAgICAgICAgICAgICAgICBlNS5kZXN0cm95ID0gcjMoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZTUgPSBlNS5uZXh0OwogICAgICAgICAgICB9IHdoaWxlIChlNSAhPT0gbjgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG44ID0gdDQudXBkYXRlUXVldWUsIG44ID0gbjggIT09IG51bGwgPyBuOC5sYXN0RWZmZWN0IDogbnVsbCwgbjggIT09IG51bGwpIHsKICAgICAgICAgICAgZTUgPSBuOCA9IG44Lm5leHQ7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICB2YXIgbDcgPSBlNTsKICAgICAgICAgICAgICByMyA9IGw3Lm5leHQsIGw3ID0gbDcudGFnLCAobDcgJiA0KSAhPT0gMCAmJiAobDcgJiAxKSAhPT0gMCAmJiAodnMyKHQ0LCBlNSksIHZmKHQ0LCBlNSkpLCBlNSA9IHIzOwogICAgICAgICAgICB9IHdoaWxlIChlNSAhPT0gbjgpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgMToKICAgICAgICAgIGU1ID0gdDQuc3RhdGVOb2RlLCB0NC5mbGFncyAmIDQgJiYgKG44ID09PSBudWxsID8gZTUuY29tcG9uZW50RGlkTW91bnQoKSA6IChyMyA9IHQ0LmVsZW1lbnRUeXBlID09PSB0NC50eXBlID8gbjgubWVtb2l6ZWRQcm9wcyA6IG9lMTIodDQudHlwZSwgbjgubWVtb2l6ZWRQcm9wcyksIGU1LmNvbXBvbmVudERpZFVwZGF0ZShyMywgbjgubWVtb2l6ZWRTdGF0ZSwgZTUuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpKSksIG44ID0gdDQudXBkYXRlUXVldWUsIG44ICE9PSBudWxsICYmIGdvKHQ0LCBuOCwgZTUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIGlmIChuOCA9IHQ0LnVwZGF0ZVF1ZXVlLCBuOCAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAoZTUgPSBudWxsLCB0NC5jaGlsZCAhPT0gbnVsbCkKICAgICAgICAgICAgICBzd2l0Y2ggKHQ0LmNoaWxkLnRhZykgewogICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICBlNSA9IHQ0LmNoaWxkLnN0YXRlTm9kZTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgIGU1ID0gdDQuY2hpbGQuc3RhdGVOb2RlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZ28odDQsIG44LCBlNSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgZTUgPSB0NC5zdGF0ZU5vZGUsIG44ID09PSBudWxsICYmIHQ0LmZsYWdzICYgNCAmJiBNdSh0NC50eXBlLCB0NC5tZW1vaXplZFByb3BzKSAmJiBlNS5mb2N1cygpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgNjoKICAgICAgICAgIHJldHVybjsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FzZSAxMjoKICAgICAgICAgIHJldHVybjsKICAgICAgICBjYXNlIDEzOgogICAgICAgICAgdDQubWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbCAmJiAodDQgPSB0NC5hbHRlcm5hdGUsIHQ0ICE9PSBudWxsICYmICh0NCA9IHQ0Lm1lbW9pemVkU3RhdGUsIHQ0ICE9PSBudWxsICYmICh0NCA9IHQ0LmRlaHlkcmF0ZWQsIHQ0ICE9PSBudWxsICYmIGN1KHQ0KSkpKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICBjYXNlIDE5OgogICAgICAgIGNhc2UgMTc6CiAgICAgICAgY2FzZSAyMDoKICAgICAgICBjYXNlIDIxOgogICAgICAgIGNhc2UgMjM6CiAgICAgICAgY2FzZSAyNDoKICAgICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aHJvdyBFcnJvcih2MTUoMTYzKSk7CiAgICB9CiAgICBmdW5jdGlvbiBVbyhlNSwgbjgpIHsKICAgICAgZm9yICh2YXIgdDQgPSBlNTsgOyApIHsKICAgICAgICBpZiAodDQudGFnID09PSA1KSB7CiAgICAgICAgICB2YXIgcjMgPSB0NC5zdGF0ZU5vZGU7CiAgICAgICAgICBpZiAobjgpCiAgICAgICAgICAgIHIzID0gcjMuc3R5bGUsIHR5cGVvZiByMy5zZXRQcm9wZXJ0eSA9PSAiZnVuY3Rpb24iID8gcjMuc2V0UHJvcGVydHkoImRpc3BsYXkiLCAibm9uZSIsICJpbXBvcnRhbnQiKSA6IHIzLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcjMgPSB0NC5zdGF0ZU5vZGU7CiAgICAgICAgICAgIHZhciBsNyA9IHQ0Lm1lbW9pemVkUHJvcHMuc3R5bGU7CiAgICAgICAgICAgIGw3ID0gbDcgIT0gbnVsbCAmJiBsNy5oYXNPd25Qcm9wZXJ0eSgiZGlzcGxheSIpID8gbDcuZGlzcGxheSA6IG51bGwsIHIzLnN0eWxlLmRpc3BsYXkgPSBldSgiZGlzcGxheSIsIGw3KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHQ0LnRhZyA9PT0gNikKICAgICAgICAgIHQ0LnN0YXRlTm9kZS5ub2RlVmFsdWUgPSBuOCA/ICIiIDogdDQubWVtb2l6ZWRQcm9wczsKICAgICAgICBlbHNlIGlmICgodDQudGFnICE9PSAyMyAmJiB0NC50YWcgIT09IDI0IHx8IHQ0Lm1lbW9pemVkU3RhdGUgPT09IG51bGwgfHwgdDQgPT09IGU1KSAmJiB0NC5jaGlsZCAhPT0gbnVsbCkgewogICAgICAgICAgdDQuY2hpbGQucmV0dXJuID0gdDQsIHQ0ID0gdDQuY2hpbGQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHQ0ID09PSBlNSkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGZvciAoOyB0NC5zaWJsaW5nID09PSBudWxsOyApIHsKICAgICAgICAgIGlmICh0NC5yZXR1cm4gPT09IG51bGwgfHwgdDQucmV0dXJuID09PSBlNSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgdDQgPSB0NC5yZXR1cm47CiAgICAgICAgfQogICAgICAgIHQ0LnNpYmxpbmcucmV0dXJuID0gdDQucmV0dXJuLCB0NCA9IHQ0LnNpYmxpbmc7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIFZvKGU1LCBuOCkgewogICAgICBpZiAoWGU1ICYmIHR5cGVvZiBYZTUub25Db21taXRGaWJlclVubW91bnQgPT0gImZ1bmN0aW9uIikKICAgICAgICB0cnkgewogICAgICAgICAgWGU1Lm9uQ29tbWl0RmliZXJVbm1vdW50KGZpMiwgbjgpOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgIH0KICAgICAgc3dpdGNoIChuOC50YWcpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgY2FzZSAxMToKICAgICAgICBjYXNlIDE0OgogICAgICAgIGNhc2UgMTU6CiAgICAgICAgY2FzZSAyMjoKICAgICAgICAgIGlmIChlNSA9IG44LnVwZGF0ZVF1ZXVlLCBlNSAhPT0gbnVsbCAmJiAoZTUgPSBlNS5sYXN0RWZmZWN0LCBlNSAhPT0gbnVsbCkpIHsKICAgICAgICAgICAgdmFyIHQ0ID0gZTUgPSBlNS5uZXh0OwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgdmFyIHIzID0gdDQsIGw3ID0gcjMuZGVzdHJveTsKICAgICAgICAgICAgICBpZiAocjMgPSByMy50YWcsIGw3ICE9PSB2b2lkIDApCiAgICAgICAgICAgICAgICBpZiAoKHIzICYgNCkgIT09IDApCiAgICAgICAgICAgICAgICAgIHZzMihuOCwgdDQpOwogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIHIzID0gbjg7CiAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgbDcoKTsKICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoaTQpIHsKICAgICAgICAgICAgICAgICAgICBSZTE2KHIzLCBpNCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0NCA9IHQ0Lm5leHQ7CiAgICAgICAgICAgIH0gd2hpbGUgKHQ0ICE9PSBlNSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBpZiAoam8objgpLCBlNSA9IG44LnN0YXRlTm9kZSwgdHlwZW9mIGU1LmNvbXBvbmVudFdpbGxVbm1vdW50ID09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZTUucHJvcHMgPSBuOC5tZW1vaXplZFByb3BzLCBlNS5zdGF0ZSA9IG44Lm1lbW9pemVkU3RhdGUsIGU1LmNvbXBvbmVudFdpbGxVbm1vdW50KCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGk0KSB7CiAgICAgICAgICAgICAgUmUxNihuOCwgaTQpOwogICAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDU6CiAgICAgICAgICBqbyhuOCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICBzczIoZTUsIG44KTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gQm8oZTUpIHsKICAgICAgZTUuYWx0ZXJuYXRlID0gbnVsbCwgZTUuY2hpbGQgPSBudWxsLCBlNS5kZXBlbmRlbmNpZXMgPSBudWxsLCBlNS5maXJzdEVmZmVjdCA9IG51bGwsIGU1Lmxhc3RFZmZlY3QgPSBudWxsLCBlNS5tZW1vaXplZFByb3BzID0gbnVsbCwgZTUubWVtb2l6ZWRTdGF0ZSA9IG51bGwsIGU1LnBlbmRpbmdQcm9wcyA9IG51bGwsIGU1LnJldHVybiA9IG51bGwsIGU1LnVwZGF0ZVF1ZXVlID0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIEhvKGU1KSB7CiAgICAgIHJldHVybiBlNS50YWcgPT09IDUgfHwgZTUudGFnID09PSAzIHx8IGU1LnRhZyA9PT0gNDsKICAgIH0KICAgIGZ1bmN0aW9uIFdvKGU1KSB7CiAgICAgIGU6IHsKICAgICAgICBmb3IgKHZhciBuOCA9IGU1LnJldHVybjsgbjggIT09IG51bGw7ICkgewogICAgICAgICAgaWYgKEhvKG44KSkKICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgIG44ID0gbjgucmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aHJvdyBFcnJvcih2MTUoMTYwKSk7CiAgICAgIH0KICAgICAgdmFyIHQ0ID0gbjg7CiAgICAgIHN3aXRjaCAobjggPSB0NC5zdGF0ZU5vZGUsIHQ0LnRhZykgewogICAgICAgIGNhc2UgNToKICAgICAgICAgIHZhciByMyA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgbjggPSBuOC5jb250YWluZXJJbmZvLCByMyA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICBuOCA9IG44LmNvbnRhaW5lckluZm8sIHIzID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMTYxKSk7CiAgICAgIH0KICAgICAgdDQuZmxhZ3MgJiAxNiAmJiAodXQxMyhuOCwgIiIpLCB0NC5mbGFncyAmPSAtMTcpOwogICAgICBlOgogICAgICAgIG46CiAgICAgICAgICBmb3IgKHQ0ID0gZTU7IDsgKSB7CiAgICAgICAgICAgIGZvciAoOyB0NC5zaWJsaW5nID09PSBudWxsOyApIHsKICAgICAgICAgICAgICBpZiAodDQucmV0dXJuID09PSBudWxsIHx8IEhvKHQ0LnJldHVybikpIHsKICAgICAgICAgICAgICAgIHQ0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHQ0ID0gdDQucmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAodDQuc2libGluZy5yZXR1cm4gPSB0NC5yZXR1cm4sIHQ0ID0gdDQuc2libGluZzsgdDQudGFnICE9PSA1ICYmIHQ0LnRhZyAhPT0gNiAmJiB0NC50YWcgIT09IDE4OyApIHsKICAgICAgICAgICAgICBpZiAodDQuZmxhZ3MgJiAyIHx8IHQ0LmNoaWxkID09PSBudWxsIHx8IHQ0LnRhZyA9PT0gNCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlIG47CiAgICAgICAgICAgICAgdDQuY2hpbGQucmV0dXJuID0gdDQsIHQ0ID0gdDQuY2hpbGQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEodDQuZmxhZ3MgJiAyKSkgewogICAgICAgICAgICAgIHQ0ID0gdDQuc3RhdGVOb2RlOwogICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgcjMgPyB6bChlNSwgdDQsIG44KSA6IE9sKGU1LCB0NCwgbjgpOwogICAgfQogICAgZnVuY3Rpb24gemwoZTUsIG44LCB0NCkgewogICAgICB2YXIgcjMgPSBlNS50YWcsIGw3ID0gcjMgPT09IDUgfHwgcjMgPT09IDY7CiAgICAgIGlmIChsNykKICAgICAgICBlNSA9IGw3ID8gZTUuc3RhdGVOb2RlIDogZTUuc3RhdGVOb2RlLmluc3RhbmNlLCBuOCA/IHQ0Lm5vZGVUeXBlID09PSA4ID8gdDQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZTUsIG44KSA6IHQ0Lmluc2VydEJlZm9yZShlNSwgbjgpIDogKHQ0Lm5vZGVUeXBlID09PSA4ID8gKG44ID0gdDQucGFyZW50Tm9kZSwgbjguaW5zZXJ0QmVmb3JlKGU1LCB0NCkpIDogKG44ID0gdDQsIG44LmFwcGVuZENoaWxkKGU1KSksIHQ0ID0gdDQuX3JlYWN0Um9vdENvbnRhaW5lciwgdDQgIT0gbnVsbCB8fCBuOC5vbmNsaWNrICE9PSBudWxsIHx8IChuOC5vbmNsaWNrID0gZXIzKSk7CiAgICAgIGVsc2UgaWYgKHIzICE9PSA0ICYmIChlNSA9IGU1LmNoaWxkLCBlNSAhPT0gbnVsbCkpCiAgICAgICAgZm9yICh6bChlNSwgbjgsIHQ0KSwgZTUgPSBlNS5zaWJsaW5nOyBlNSAhPT0gbnVsbDsgKQogICAgICAgICAgemwoZTUsIG44LCB0NCksIGU1ID0gZTUuc2libGluZzsKICAgIH0KICAgIGZ1bmN0aW9uIE9sKGU1LCBuOCwgdDQpIHsKICAgICAgdmFyIHIzID0gZTUudGFnLCBsNyA9IHIzID09PSA1IHx8IHIzID09PSA2OwogICAgICBpZiAobDcpCiAgICAgICAgZTUgPSBsNyA/IGU1LnN0YXRlTm9kZSA6IGU1LnN0YXRlTm9kZS5pbnN0YW5jZSwgbjggPyB0NC5pbnNlcnRCZWZvcmUoZTUsIG44KSA6IHQ0LmFwcGVuZENoaWxkKGU1KTsKICAgICAgZWxzZSBpZiAocjMgIT09IDQgJiYgKGU1ID0gZTUuY2hpbGQsIGU1ICE9PSBudWxsKSkKICAgICAgICBmb3IgKE9sKGU1LCBuOCwgdDQpLCBlNSA9IGU1LnNpYmxpbmc7IGU1ICE9PSBudWxsOyApCiAgICAgICAgICBPbChlNSwgbjgsIHQ0KSwgZTUgPSBlNS5zaWJsaW5nOwogICAgfQogICAgZnVuY3Rpb24gc3MyKGU1LCBuOCkgewogICAgICBmb3IgKHZhciB0NCA9IG44LCByMyA9IGZhbHNlLCBsNywgaTQ7IDsgKSB7CiAgICAgICAgaWYgKCFyMykgewogICAgICAgICAgcjMgPSB0NC5yZXR1cm47CiAgICAgICAgICBlOgogICAgICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgICAgICBpZiAocjMgPT09IG51bGwpCiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMTYwKSk7CiAgICAgICAgICAgICAgc3dpdGNoIChsNyA9IHIzLnN0YXRlTm9kZSwgcjMudGFnKSB7CiAgICAgICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgICAgIGk0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgIGw3ID0gbDcuY29udGFpbmVySW5mbywgaTQgPSB0cnVlOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICBsNyA9IGw3LmNvbnRhaW5lckluZm8sIGk0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcjMgPSByMy5yZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIHIzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHQ0LnRhZyA9PT0gNSB8fCB0NC50YWcgPT09IDYpIHsKICAgICAgICAgIGU6CiAgICAgICAgICAgIGZvciAodmFyIG80ID0gZTUsIHUxMSA9IHQ0LCBzOCA9IHUxMTsgOyApCiAgICAgICAgICAgICAgaWYgKFZvKG80LCBzOCksIHM4LmNoaWxkICE9PSBudWxsICYmIHM4LnRhZyAhPT0gNCkKICAgICAgICAgICAgICAgIHM4LmNoaWxkLnJldHVybiA9IHM4LCBzOCA9IHM4LmNoaWxkOwogICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHM4ID09PSB1MTEpCiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICBmb3IgKDsgczguc2libGluZyA9PT0gbnVsbDsgKSB7CiAgICAgICAgICAgICAgICAgIGlmIChzOC5yZXR1cm4gPT09IG51bGwgfHwgczgucmV0dXJuID09PSB1MTEpCiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgczggPSBzOC5yZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzOC5zaWJsaW5nLnJldHVybiA9IHM4LnJldHVybiwgczggPSBzOC5zaWJsaW5nOwogICAgICAgICAgICAgIH0KICAgICAgICAgIGk0ID8gKG80ID0gbDcsIHUxMSA9IHQ0LnN0YXRlTm9kZSwgbzQubm9kZVR5cGUgPT09IDggPyBvNC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUxMSkgOiBvNC5yZW1vdmVDaGlsZCh1MTEpKSA6IGw3LnJlbW92ZUNoaWxkKHQ0LnN0YXRlTm9kZSk7CiAgICAgICAgfSBlbHNlIGlmICh0NC50YWcgPT09IDQpIHsKICAgICAgICAgIGlmICh0NC5jaGlsZCAhPT0gbnVsbCkgewogICAgICAgICAgICBsNyA9IHQ0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLCBpNCA9IHRydWUsIHQ0LmNoaWxkLnJldHVybiA9IHQ0LCB0NCA9IHQ0LmNoaWxkOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKFZvKGU1LCB0NCksIHQ0LmNoaWxkICE9PSBudWxsKSB7CiAgICAgICAgICB0NC5jaGlsZC5yZXR1cm4gPSB0NCwgdDQgPSB0NC5jaGlsZDsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAodDQgPT09IG44KQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZm9yICg7IHQ0LnNpYmxpbmcgPT09IG51bGw7ICkgewogICAgICAgICAgaWYgKHQ0LnJldHVybiA9PT0gbnVsbCB8fCB0NC5yZXR1cm4gPT09IG44KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0NCA9IHQ0LnJldHVybiwgdDQudGFnID09PSA0ICYmIChyMyA9IGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgdDQuc2libGluZy5yZXR1cm4gPSB0NC5yZXR1cm4sIHQ0ID0gdDQuc2libGluZzsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gWnIyKGU1LCBuOCkgewogICAgICBzd2l0Y2ggKG44LnRhZykgewogICAgICAgIGNhc2UgMDoKICAgICAgICBjYXNlIDExOgogICAgICAgIGNhc2UgMTQ6CiAgICAgICAgY2FzZSAxNToKICAgICAgICBjYXNlIDIyOgogICAgICAgICAgdmFyIHQ0ID0gbjgudXBkYXRlUXVldWU7CiAgICAgICAgICBpZiAodDQgPSB0NCAhPT0gbnVsbCA/IHQ0Lmxhc3RFZmZlY3QgOiBudWxsLCB0NCAhPT0gbnVsbCkgewogICAgICAgICAgICB2YXIgcjMgPSB0NCA9IHQ0Lm5leHQ7CiAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgKHIzLnRhZyAmIDMpID09PSAzICYmIChlNSA9IHIzLmRlc3Ryb3ksIHIzLmRlc3Ryb3kgPSB2b2lkIDAsIGU1ICE9PSB2b2lkIDAgJiYgZTUoKSksIHIzID0gcjMubmV4dDsKICAgICAgICAgICAgd2hpbGUgKHIzICE9PSB0NCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgNToKICAgICAgICAgIGlmICh0NCA9IG44LnN0YXRlTm9kZSwgdDQgIT0gbnVsbCkgewogICAgICAgICAgICByMyA9IG44Lm1lbW9pemVkUHJvcHM7CiAgICAgICAgICAgIHZhciBsNyA9IGU1ICE9PSBudWxsID8gZTUubWVtb2l6ZWRQcm9wcyA6IHIzOwogICAgICAgICAgICBlNSA9IG44LnR5cGU7CiAgICAgICAgICAgIHZhciBpNCA9IG44LnVwZGF0ZVF1ZXVlOwogICAgICAgICAgICBpZiAobjgudXBkYXRlUXVldWUgPSBudWxsLCBpNCAhPT0gbnVsbCkgewogICAgICAgICAgICAgIGZvciAodDRbbnIzXSA9IHIzLCBlNSA9PT0gImlucHV0IiAmJiByMy50eXBlID09PSAicmFkaW8iICYmIHIzLm5hbWUgIT0gbnVsbCAmJiBabyh0NCwgcjMpLCBhbChlNSwgbDcpLCBuOCA9IGFsKGU1LCByMyksIGw3ID0gMDsgbDcgPCBpNC5sZW5ndGg7IGw3ICs9IDIpIHsKICAgICAgICAgICAgICAgIHZhciBvNCA9IGk0W2w3XSwgdTExID0gaTRbbDcgKyAxXTsKICAgICAgICAgICAgICAgIG80ID09PSAic3R5bGUiID8gbnUodDQsIHUxMSkgOiBvNCA9PT0gImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiA/IGJvKHQ0LCB1MTEpIDogbzQgPT09ICJjaGlsZHJlbiIgPyB1dDEzKHQ0LCB1MTEpIDogV2wodDQsIG80LCB1MTEsIG44KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc3dpdGNoIChlNSkgewogICAgICAgICAgICAgICAgY2FzZSAiaW5wdXQiOgogICAgICAgICAgICAgICAgICB0bCh0NCwgcjMpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgInRleHRhcmVhIjoKICAgICAgICAgICAgICAgICAgSm8odDQsIHIzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJzZWxlY3QiOgogICAgICAgICAgICAgICAgICBlNSA9IHQ0Ll93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUsIHQ0Ll93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUgPSAhIXIzLm11bHRpcGxlLCBpNCA9IHIzLnZhbHVlLCBpNCAhPSBudWxsID8gcG4zKHQ0LCAhIXIzLm11bHRpcGxlLCBpNCwgZmFsc2UpIDogZTUgIT09ICEhcjMubXVsdGlwbGUgJiYgKHIzLmRlZmF1bHRWYWx1ZSAhPSBudWxsID8gcG4zKHQ0LCAhIXIzLm11bHRpcGxlLCByMy5kZWZhdWx0VmFsdWUsIHRydWUpIDogcG4zKHQ0LCAhIXIzLm11bHRpcGxlLCByMy5tdWx0aXBsZSA/IFtdIDogIiIsIGZhbHNlKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FzZSA2OgogICAgICAgICAgaWYgKG44LnN0YXRlTm9kZSA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDE2MikpOwogICAgICAgICAgbjguc3RhdGVOb2RlLm5vZGVWYWx1ZSA9IG44Lm1lbW9pemVkUHJvcHM7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgdDQgPSBuOC5zdGF0ZU5vZGUsIHQ0Lmh5ZHJhdGUgJiYgKHQ0Lmh5ZHJhdGUgPSBmYWxzZSwgY3UodDQuY29udGFpbmVySW5mbykpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgMTI6CiAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FzZSAxMzoKICAgICAgICAgIG44Lm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgKF9pMyA9IEEyMCgpLCBVbyhuOC5jaGlsZCwgdHJ1ZSkpLCBBbyhuOCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgY2FzZSAxOToKICAgICAgICAgIEFvKG44KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICBjYXNlIDE3OgogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgMjM6CiAgICAgICAgY2FzZSAyNDoKICAgICAgICAgIFVvKG44LCBuOC5tZW1vaXplZFN0YXRlICE9PSBudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aHJvdyBFcnJvcih2MTUoMTYzKSk7CiAgICB9CiAgICBmdW5jdGlvbiBBbyhlNSkgewogICAgICB2YXIgbjggPSBlNS51cGRhdGVRdWV1ZTsKICAgICAgaWYgKG44ICE9PSBudWxsKSB7CiAgICAgICAgZTUudXBkYXRlUXVldWUgPSBudWxsOwogICAgICAgIHZhciB0NCA9IGU1LnN0YXRlTm9kZTsKICAgICAgICB0NCA9PT0gbnVsbCAmJiAodDQgPSBlNS5zdGF0ZU5vZGUgPSBuZXcgb2YoKSksIG44LmZvckVhY2goZnVuY3Rpb24ocjMpIHsKICAgICAgICAgIHZhciBsNyA9IHdmLmJpbmQobnVsbCwgZTUsIHIzKTsKICAgICAgICAgIHQ0LmhhcyhyMykgfHwgKHQ0LmFkZChyMyksIHIzLnRoZW4obDcsIGw3KSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGFmKGU1LCBuOCkgewogICAgICByZXR1cm4gZTUgIT09IG51bGwgJiYgKGU1ID0gZTUubWVtb2l6ZWRTdGF0ZSwgZTUgPT09IG51bGwgfHwgZTUuZGVoeWRyYXRlZCAhPT0gbnVsbCkgPyAobjggPSBuOC5tZW1vaXplZFN0YXRlLCBuOCAhPT0gbnVsbCAmJiBuOC5kZWh5ZHJhdGVkID09PSBudWxsKSA6IGZhbHNlOwogICAgfQogICAgdmFyIGZmID0gTWF0aC5jZWlsLCBtcjMgPSBxZTguUmVhY3RDdXJyZW50RGlzcGF0Y2hlciwgeGkyID0gcWU4LlJlYWN0Q3VycmVudE93bmVyLCB4MjEgPSAwLCBZMzAgPSBudWxsLCBqMTkgPSBudWxsLCBRMTcgPSAwLCBaZTcgPSAwLCBNbCA9IFZlNygwKSwgQjI0ID0gMCwgVHIzID0gbnVsbCwgVG40ID0gMCwgeHQxMyA9IDAsIExuNCA9IDAsIENpMyA9IDAsIFJsID0gbnVsbCwgX2kzID0gMCwgRGwgPSAxIC8gMDsKICAgIGZ1bmN0aW9uIHpuNCgpIHsKICAgICAgRGwgPSBBMjAoKSArIDUwMDsKICAgIH0KICAgIHZhciBnMTIgPSBudWxsLCBocjMgPSBmYWxzZSwgSWwgPSBudWxsLCBmZTEyID0gbnVsbCwgamU3ID0gZmFsc2UsIHJ0MTQgPSBudWxsLCBZbjQgPSA5MCwgRmwgPSBbXSwgamwgPSBbXSwgZ2UxNCA9IG51bGwsIGx0MTAgPSAwLCBVbCA9IG51bGwsIFF0NyA9IC0xLCBoZTE0ID0gMCwgJHQ2ID0gMCwgaXQxNCA9IG51bGwsIFl0NiA9IGZhbHNlOwogICAgZnVuY3Rpb24gcTIwKCkgewogICAgICByZXR1cm4gKHgyMSAmIDQ4KSAhPT0gMCA/IEEyMCgpIDogUXQ3ICE9PSAtMSA/IFF0NyA6IFF0NyA9IEEyMCgpOwogICAgfQogICAgZnVuY3Rpb24gT2UxNChlNSkgewogICAgICBpZiAoZTUgPSBlNS5tb2RlLCAoZTUgJiAyKSA9PT0gMCkKICAgICAgICByZXR1cm4gMTsKICAgICAgaWYgKChlNSAmIDQpID09PSAwKQogICAgICAgIHJldHVybiBDbjQoKSA9PT0gOTkgPyAxIDogMjsKICAgICAgaWYgKGhlMTQgPT09IDAgJiYgKGhlMTQgPSBUbjQpLCBaYTIudHJhbnNpdGlvbiAhPT0gMCkgewogICAgICAgICR0NiAhPT0gMCAmJiAoJHQ2ID0gUmwgIT09IG51bGwgPyBSbC5wZW5kaW5nTGFuZXMgOiAwKSwgZTUgPSBoZTE0OwogICAgICAgIHZhciBuOCA9IDQxODYxMTIgJiB+JHQ2OwogICAgICAgIHJldHVybiBuOCAmPSAtbjgsIG44ID09PSAwICYmIChlNSA9IDQxODYxMTIgJiB+ZTUsIG44ID0gZTUgJiAtZTUsIG44ID09PSAwICYmIChuOCA9IDgxOTIpKSwgbjg7CiAgICAgIH0KICAgICAgcmV0dXJuIGU1ID0gQ240KCksICh4MjEgJiA0KSAhPT0gMCAmJiBlNSA9PT0gOTggPyBlNSA9IHF0NigxMiwgaGUxNCkgOiAoZTUgPSBiczIoZTUpLCBlNSA9IHF0NihlNSwgaGUxNCkpLCBlNTsKICAgIH0KICAgIGZ1bmN0aW9uIE1lMTMoZTUsIG44LCB0NCkgewogICAgICBpZiAoNTAgPCBsdDEwKQogICAgICAgIHRocm93IGx0MTAgPSAwLCBVbCA9IG51bGwsIEVycm9yKHYxNSgxODUpKTsKICAgICAgaWYgKGU1ID0gTHIzKGU1LCBuOCksIGU1ID09PSBudWxsKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBFcjMoZTUsIG44LCB0NCksIGU1ID09PSBZMzAgJiYgKExuNCB8PSBuOCwgQjI0ID09PSA0ICYmIHduNShlNSwgUTE3KSk7CiAgICAgIHZhciByMyA9IENuNCgpOwogICAgICBuOCA9PT0gMSA/ICh4MjEgJiA4KSAhPT0gMCAmJiAoeDIxICYgNDgpID09PSAwID8gVmwoZTUpIDogKGxlMTUoZTUsIHQ0KSwgeDIxID09PSAwICYmICh6bjQoKSwgcGUxMygpKSkgOiAoKHgyMSAmIDQpID09PSAwIHx8IHIzICE9PSA5OCAmJiByMyAhPT0gOTkgfHwgKGdlMTQgPT09IG51bGwgPyBnZTE0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW2U1XSkgOiBnZTE0LmFkZChlNSkpLCBsZTE1KGU1LCB0NCkpLCBSbCA9IGU1OwogICAgfQogICAgZnVuY3Rpb24gTHIzKGU1LCBuOCkgewogICAgICBlNS5sYW5lcyB8PSBuODsKICAgICAgdmFyIHQ0ID0gZTUuYWx0ZXJuYXRlOwogICAgICBmb3IgKHQ0ICE9PSBudWxsICYmICh0NC5sYW5lcyB8PSBuOCksIHQ0ID0gZTUsIGU1ID0gZTUucmV0dXJuOyBlNSAhPT0gbnVsbDsgKQogICAgICAgIGU1LmNoaWxkTGFuZXMgfD0gbjgsIHQ0ID0gZTUuYWx0ZXJuYXRlLCB0NCAhPT0gbnVsbCAmJiAodDQuY2hpbGRMYW5lcyB8PSBuOCksIHQ0ID0gZTUsIGU1ID0gZTUucmV0dXJuOwogICAgICByZXR1cm4gdDQudGFnID09PSAzID8gdDQuc3RhdGVOb2RlIDogbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGxlMTUoZTUsIG44KSB7CiAgICAgIGZvciAodmFyIHQ0ID0gZTUuY2FsbGJhY2tOb2RlLCByMyA9IGU1LnN1c3BlbmRlZExhbmVzLCBsNyA9IGU1LnBpbmdlZExhbmVzLCBpNCA9IGU1LmV4cGlyYXRpb25UaW1lcywgbzQgPSBlNS5wZW5kaW5nTGFuZXM7IDAgPCBvNDsgKSB7CiAgICAgICAgdmFyIHUxMSA9IDMxIC0gSWUxMChvNCksIHM4ID0gMSA8PCB1MTEsIGQxNSA9IGk0W3UxMV07CiAgICAgICAgaWYgKGQxNSA9PT0gLTEpIHsKICAgICAgICAgIGlmICgoczggJiByMykgPT09IDAgfHwgKHM4ICYgbDcpICE9PSAwKSB7CiAgICAgICAgICAgIGQxNSA9IG44LCBybjUoczgpOwogICAgICAgICAgICB2YXIgeTE3ID0gTDIyOwogICAgICAgICAgICBpNFt1MTFdID0gMTAgPD0geTE3ID8gZDE1ICsgMjUwIDogNiA8PSB5MTcgPyBkMTUgKyA1ZTMgOiAtMTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UKICAgICAgICAgIGQxNSA8PSBuOCAmJiAoZTUuZXhwaXJlZExhbmVzIHw9IHM4KTsKICAgICAgICBvNCAmPSB+czg7CiAgICAgIH0KICAgICAgaWYgKHIzID0gY3QxMihlNSwgZTUgPT09IFkzMCA/IFExNyA6IDApLCBuOCA9IEwyMiwgcjMgPT09IDApCiAgICAgICAgdDQgIT09IG51bGwgJiYgKHQ0ICE9PSAkcjMgJiYgU2wodDQpLCBlNS5jYWxsYmFja05vZGUgPSBudWxsLCBlNS5jYWxsYmFja1ByaW9yaXR5ID0gMCk7CiAgICAgIGVsc2UgewogICAgICAgIGlmICh0NCAhPT0gbnVsbCkgewogICAgICAgICAgaWYgKGU1LmNhbGxiYWNrUHJpb3JpdHkgPT09IG44KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0NCAhPT0gJHIzICYmIFNsKHQ0KTsKICAgICAgICB9CiAgICAgICAgbjggPT09IDE1ID8gKHQ0ID0gVmwuYmluZChudWxsLCBlNSksIG1lMTggPT09IG51bGwgPyAobWUxOCA9IFt0NF0sIEF0MTEgPSBjaTIoTnIyLCBCdSkpIDogbWUxOC5wdXNoKHQ0KSwgdDQgPSAkcjMpIDogbjggPT09IDE0ID8gdDQgPSBodDEzKDk5LCBWbC5iaW5kKG51bGwsIGU1KSkgOiAodDQgPSBlYTIobjgpLCB0NCA9IGh0MTModDQsIGFzLmJpbmQobnVsbCwgZTUpKSksIGU1LmNhbGxiYWNrUHJpb3JpdHkgPSBuOCwgZTUuY2FsbGJhY2tOb2RlID0gdDQ7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGFzKGU1KSB7CiAgICAgIGlmIChRdDcgPSAtMSwgJHQ2ID0gaGUxNCA9IDAsICh4MjEgJiA0OCkgIT09IDApCiAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMyNykpOwogICAgICB2YXIgbjggPSBlNS5jYWxsYmFja05vZGU7CiAgICAgIGlmIChCZTEyKCkgJiYgZTUuY2FsbGJhY2tOb2RlICE9PSBuOCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdmFyIHQ0ID0gY3QxMihlNSwgZTUgPT09IFkzMCA/IFExNyA6IDApOwogICAgICBpZiAodDQgPT09IDApCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHZhciByMyA9IHQ0LCBsNyA9IHgyMTsKICAgICAgeDIxIHw9IDE2OwogICAgICB2YXIgaTQgPSBwczIoKTsKICAgICAgKFkzMCAhPT0gZTUgfHwgUTE3ICE9PSByMykgJiYgKHpuNCgpLCBTbjQoZTUsIHIzKSk7CiAgICAgIGRvCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHBmKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGNhdGNoICh1MTEpIHsKICAgICAgICAgIGRzMihlNSwgdTExKTsKICAgICAgICB9CiAgICAgIHdoaWxlICgxKTsKICAgICAgaWYgKGRpMygpLCBtcjMuY3VycmVudCA9IGk0LCB4MjEgPSBsNywgajE5ICE9PSBudWxsID8gcjMgPSAwIDogKFkzMCA9IG51bGwsIFExNyA9IDAsIHIzID0gQjI0KSwgKFRuNCAmIExuNCkgIT09IDApCiAgICAgICAgU240KGU1LCAwKTsKICAgICAgZWxzZSBpZiAocjMgIT09IDApIHsKICAgICAgICBpZiAocjMgPT09IDIgJiYgKHgyMSB8PSA2NCwgZTUuaHlkcmF0ZSAmJiAoZTUuaHlkcmF0ZSA9IGZhbHNlLCBhaTIoZTUuY29udGFpbmVySW5mbykpLCB0NCA9IGd1KGU1KSwgdDQgIT09IDAgJiYgKHIzID0gWG40KGU1LCB0NCkpKSwgcjMgPT09IDEpCiAgICAgICAgICB0aHJvdyBuOCA9IFRyMywgU240KGU1LCAwKSwgd241KGU1LCB0NCksIGxlMTUoZTUsIEEyMCgpKSwgbjg7CiAgICAgICAgc3dpdGNoIChlNS5maW5pc2hlZFdvcmsgPSBlNS5jdXJyZW50LmFsdGVybmF0ZSwgZTUuZmluaXNoZWRMYW5lcyA9IHQ0LCByMykgewogICAgICAgICAgY2FzZSAwOgogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMzQ1KSk7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIEhlNyhlNSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBpZiAod241KGU1LCB0NCksICh0NCAmIDYyOTE0NTYwKSA9PT0gdDQgJiYgKHIzID0gX2kzICsgNTAwIC0gQTIwKCksIDEwIDwgcjMpKSB7CiAgICAgICAgICAgICAgaWYgKGN0MTIoZTUsIDApICE9PSAwKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgaWYgKGw3ID0gZTUuc3VzcGVuZGVkTGFuZXMsIChsNyAmIHQ0KSAhPT0gdDQpIHsKICAgICAgICAgICAgICAgIHEyMCgpLCBlNS5waW5nZWRMYW5lcyB8PSBlNS5zdXNwZW5kZWRMYW5lcyAmIGw3OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGU1LnRpbWVvdXRIYW5kbGUgPSBhbyhIZTcuYmluZChudWxsLCBlNSksIHIzKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBIZTcoZTUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgaWYgKHduNShlNSwgdDQpLCAodDQgJiA0MTg2MTEyKSA9PT0gdDQpCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGZvciAocjMgPSBlNS5ldmVudFRpbWVzLCBsNyA9IC0xOyAwIDwgdDQ7ICkgewogICAgICAgICAgICAgIHZhciBvNCA9IDMxIC0gSWUxMCh0NCk7CiAgICAgICAgICAgICAgaTQgPSAxIDw8IG80LCBvNCA9IHIzW280XSwgbzQgPiBsNyAmJiAobDcgPSBvNCksIHQ0ICY9IH5pNDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodDQgPSBsNywgdDQgPSBBMjAoKSAtIHQ0LCB0NCA9ICgxMjAgPiB0NCA/IDEyMCA6IDQ4MCA+IHQ0ID8gNDgwIDogMTA4MCA+IHQ0ID8gMTA4MCA6IDE5MjAgPiB0NCA/IDE5MjAgOiAzZTMgPiB0NCA/IDNlMyA6IDQzMjAgPiB0NCA/IDQzMjAgOiAxOTYwICogZmYodDQgLyAxOTYwKSkgLSB0NCwgMTAgPCB0NCkgewogICAgICAgICAgICAgIGU1LnRpbWVvdXRIYW5kbGUgPSBhbyhIZTcuYmluZChudWxsLCBlNSksIHQ0KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBIZTcoZTUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgSGU3KGU1KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMzI5KSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBsZTE1KGU1LCBBMjAoKSksIGU1LmNhbGxiYWNrTm9kZSA9PT0gbjggPyBhcy5iaW5kKG51bGwsIGU1KSA6IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiB3bjUoZTUsIG44KSB7CiAgICAgIGZvciAobjggJj0gfkNpMywgbjggJj0gfkxuNCwgZTUuc3VzcGVuZGVkTGFuZXMgfD0gbjgsIGU1LnBpbmdlZExhbmVzICY9IH5uOCwgZTUgPSBlNS5leHBpcmF0aW9uVGltZXM7IDAgPCBuODsgKSB7CiAgICAgICAgdmFyIHQ0ID0gMzEgLSBJZTEwKG44KSwgcjMgPSAxIDw8IHQ0OwogICAgICAgIGU1W3Q0XSA9IC0xLCBuOCAmPSB+cjM7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIFZsKGU1KSB7CiAgICAgIGlmICgoeDIxICYgNDgpICE9PSAwKQogICAgICAgIHRocm93IEVycm9yKHYxNSgzMjcpKTsKICAgICAgaWYgKEJlMTIoKSwgZTUgPT09IFkzMCAmJiAoZTUuZXhwaXJlZExhbmVzICYgUTE3KSAhPT0gMCkgewogICAgICAgIHZhciBuOCA9IFExNywgdDQgPSBYbjQoZTUsIG44KTsKICAgICAgICAoVG40ICYgTG40KSAhPT0gMCAmJiAobjggPSBjdDEyKGU1LCBuOCksIHQ0ID0gWG40KGU1LCBuOCkpOwogICAgICB9IGVsc2UKICAgICAgICBuOCA9IGN0MTIoZTUsIDApLCB0NCA9IFhuNChlNSwgbjgpOwogICAgICBpZiAoZTUudGFnICE9PSAwICYmIHQ0ID09PSAyICYmICh4MjEgfD0gNjQsIGU1Lmh5ZHJhdGUgJiYgKGU1Lmh5ZHJhdGUgPSBmYWxzZSwgYWkyKGU1LmNvbnRhaW5lckluZm8pKSwgbjggPSBndShlNSksIG44ICE9PSAwICYmICh0NCA9IFhuNChlNSwgbjgpKSksIHQ0ID09PSAxKQogICAgICAgIHRocm93IHQ0ID0gVHIzLCBTbjQoZTUsIDApLCB3bjUoZTUsIG44KSwgbGUxNShlNSwgQTIwKCkpLCB0NDsKICAgICAgcmV0dXJuIGU1LmZpbmlzaGVkV29yayA9IGU1LmN1cnJlbnQuYWx0ZXJuYXRlLCBlNS5maW5pc2hlZExhbmVzID0gbjgsIEhlNyhlNSksIGxlMTUoZTUsIEEyMCgpKSwgbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGNmKCkgewogICAgICBpZiAoZ2UxNCAhPT0gbnVsbCkgewogICAgICAgIHZhciBlNSA9IGdlMTQ7CiAgICAgICAgZ2UxNCA9IG51bGwsIGU1LmZvckVhY2goZnVuY3Rpb24objgpIHsKICAgICAgICAgIG44LmV4cGlyZWRMYW5lcyB8PSAyNCAmIG44LnBlbmRpbmdMYW5lcywgbGUxNShuOCwgQTIwKCkpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHBlMTMoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGZzMihlNSwgbjgpIHsKICAgICAgdmFyIHQ0ID0geDIxOwogICAgICB4MjEgfD0gMTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gZTUobjgpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHgyMSA9IHQ0LCB4MjEgPT09IDAgJiYgKHpuNCgpLCBwZTEzKCkpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBjcyhlNSwgbjgpIHsKICAgICAgdmFyIHQ0ID0geDIxOwogICAgICB4MjEgJj0gLTIsIHgyMSB8PSA4OwogICAgICB0cnkgewogICAgICAgIHJldHVybiBlNShuOCk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgeDIxID0gdDQsIHgyMSA9PT0gMCAmJiAoem40KCksIHBlMTMoKSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGp0NShlNSwgbjgpIHsKICAgICAgRDIwKE1sLCBaZTcpLCBaZTcgfD0gbjgsIFRuNCB8PSBuODsKICAgIH0KICAgIGZ1bmN0aW9uIE5pMigpIHsKICAgICAgWmU3ID0gTWwuY3VycmVudCwgTzE1KE1sKTsKICAgIH0KICAgIGZ1bmN0aW9uIFNuNChlNSwgbjgpIHsKICAgICAgZTUuZmluaXNoZWRXb3JrID0gbnVsbCwgZTUuZmluaXNoZWRMYW5lcyA9IDA7CiAgICAgIHZhciB0NCA9IGU1LnRpbWVvdXRIYW5kbGU7CiAgICAgIGlmICh0NCAhPT0gLTEgJiYgKGU1LnRpbWVvdXRIYW5kbGUgPSAtMSwgUWEyKHQ0KSksIGoxOSAhPT0gbnVsbCkKICAgICAgICBmb3IgKHQ0ID0gajE5LnJldHVybjsgdDQgIT09IG51bGw7ICkgewogICAgICAgICAgdmFyIHIzID0gdDQ7CiAgICAgICAgICBzd2l0Y2ggKHIzLnRhZykgewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgcjMgPSByMy50eXBlLmNoaWxkQ29udGV4dFR5cGVzLCByMyAhPSBudWxsICYmIHRyMygpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgX240KCksIE8xNShaMjIpLCBPMTUoJDIxKSwgdmkzKCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICBoaTMocjMpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgX240KCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgTzE1KFIyNik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTk6CiAgICAgICAgICAgICAgTzE1KFIyNik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgcGkzKHIzKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyMzoKICAgICAgICAgICAgY2FzZSAyNDoKICAgICAgICAgICAgICBOaTIoKTsKICAgICAgICAgIH0KICAgICAgICAgIHQ0ID0gdDQucmV0dXJuOwogICAgICAgIH0KICAgICAgWTMwID0gZTUsIGoxOSA9IFVlOShlNS5jdXJyZW50LCBudWxsKSwgUTE3ID0gWmU3ID0gVG40ID0gbjgsIEIyNCA9IDAsIFRyMyA9IG51bGwsIENpMyA9IExuNCA9IHh0MTMgPSAwOwogICAgfQogICAgZnVuY3Rpb24gZHMyKGU1LCBuOCkgewogICAgICBkbyB7CiAgICAgICAgdmFyIHQ0ID0gajE5OwogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoZGkzKCksIG50MTQuY3VycmVudCA9IHByMywgYXIzKSB7CiAgICAgICAgICAgIGZvciAodmFyIHIzID0gSTI3Lm1lbW9pemVkU3RhdGU7IHIzICE9PSBudWxsOyApIHsKICAgICAgICAgICAgICB2YXIgbDcgPSByMy5xdWV1ZTsKICAgICAgICAgICAgICBsNyAhPT0gbnVsbCAmJiAobDcucGVuZGluZyA9IG51bGwpLCByMyA9IHIzLm5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXIzID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAod3Q5ID0gMCwgVjIxID0gVzE4ID0gSTI3ID0gbnVsbCwgdHQxNyA9IGZhbHNlLCB4aTIuY3VycmVudCA9IG51bGwsIHQ0ID09PSBudWxsIHx8IHQ0LnJldHVybiA9PT0gbnVsbCkgewogICAgICAgICAgICBCMjQgPSAxLCBUcjMgPSBuOCwgajE5ID0gbnVsbDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBlOiB7CiAgICAgICAgICAgIHZhciBpNCA9IGU1LCBvNCA9IHQ0LnJldHVybiwgdTExID0gdDQsIHM4ID0gbjg7CiAgICAgICAgICAgIGlmIChuOCA9IFExNywgdTExLmZsYWdzIHw9IDIwNDgsIHUxMS5maXJzdEVmZmVjdCA9IHUxMS5sYXN0RWZmZWN0ID0gbnVsbCwgczggIT09IG51bGwgJiYgdHlwZW9mIHM4ID09ICJvYmplY3QiICYmIHR5cGVvZiBzOC50aGVuID09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICB2YXIgZDE1ID0gczg7CiAgICAgICAgICAgICAgaWYgKCh1MTEubW9kZSAmIDIpID09PSAwKSB7CiAgICAgICAgICAgICAgICB2YXIgeTE3ID0gdTExLmFsdGVybmF0ZTsKICAgICAgICAgICAgICAgIHkxNyA/ICh1MTEudXBkYXRlUXVldWUgPSB5MTcudXBkYXRlUXVldWUsIHUxMS5tZW1vaXplZFN0YXRlID0geTE3Lm1lbW9pemVkU3RhdGUsIHUxMS5sYW5lcyA9IHkxNy5sYW5lcykgOiAodTExLnVwZGF0ZVF1ZXVlID0gbnVsbCwgdTExLm1lbW9pemVkU3RhdGUgPSBudWxsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdmFyIEMxNyA9IChSMjYuY3VycmVudCAmIDEpICE9PSAwLCBoMTAgPSBvNDsKICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICB2YXIgUzIxOwogICAgICAgICAgICAgICAgaWYgKFMyMSA9IGgxMC50YWcgPT09IDEzKSB7CiAgICAgICAgICAgICAgICAgIHZhciBrMTggPSBoMTAubWVtb2l6ZWRTdGF0ZTsKICAgICAgICAgICAgICAgICAgaWYgKGsxOCAhPT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICBTMjEgPSBrMTguZGVoeWRyYXRlZCAhPT0gbnVsbDsKICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIEUxNSA9IGgxMC5tZW1vaXplZFByb3BzOwogICAgICAgICAgICAgICAgICAgIFMyMSA9IEUxNS5mYWxsYmFjayA9PT0gdm9pZCAwID8gZmFsc2UgOiBFMTUudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUgPyB0cnVlIDogIUMxNzsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKFMyMSkgewogICAgICAgICAgICAgICAgICB2YXIgYzE3ID0gaDEwLnVwZGF0ZVF1ZXVlOwogICAgICAgICAgICAgICAgICBpZiAoYzE3ID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGE0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgICAgICAgICAgICAgICBhNC5hZGQoZDE1KSwgaDEwLnVwZGF0ZVF1ZXVlID0gYTQ7CiAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgIGMxNy5hZGQoZDE1KTsKICAgICAgICAgICAgICAgICAgaWYgKChoMTAubW9kZSAmIDIpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGgxMC5mbGFncyB8PSA2NCwgdTExLmZsYWdzIHw9IDE2Mzg0LCB1MTEuZmxhZ3MgJj0gLTI5ODEsIHUxMS50YWcgPT09IDEpCiAgICAgICAgICAgICAgICAgICAgICBpZiAodTExLmFsdGVybmF0ZSA9PT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgdTExLnRhZyA9IDE3OwogICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmMTEgPSBMZTEwKC0xLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgZjExLnRhZyA9IDIsIHplOSh1MTEsIGYxMSk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdTExLmxhbmVzIHw9IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBzOCA9IHZvaWQgMCwgdTExID0gbjg7CiAgICAgICAgICAgICAgICAgIHZhciBwMTggPSBpNC5waW5nQ2FjaGU7CiAgICAgICAgICAgICAgICAgIGlmIChwMTggPT09IG51bGwgPyAocDE4ID0gaTQucGluZ0NhY2hlID0gbmV3IGxmKCksIHM4ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgcDE4LnNldChkMTUsIHM4KSkgOiAoczggPSBwMTguZ2V0KGQxNSksIHM4ID09PSB2b2lkIDAgJiYgKHM4ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgcDE4LnNldChkMTUsIHM4KSkpLCAhczguaGFzKHUxMSkpIHsKICAgICAgICAgICAgICAgICAgICBzOC5hZGQodTExKTsKICAgICAgICAgICAgICAgICAgICB2YXIgbTIzID0gZ2YuYmluZChudWxsLCBpNCwgZDE1LCB1MTEpOwogICAgICAgICAgICAgICAgICAgIGQxNS50aGVuKG0yMywgbTIzKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBoMTAuZmxhZ3MgfD0gNDA5NiwgaDEwLmxhbmVzID0gbjg7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBoMTAgPSBoMTAucmV0dXJuOwogICAgICAgICAgICAgIH0gd2hpbGUgKGgxMCAhPT0gbnVsbCk7CiAgICAgICAgICAgICAgczggPSBFcnJvcigoZG40KHUxMS50eXBlKSB8fCAiQSBSZWFjdCBjb21wb25lbnQiKSArIGAgc3VzcGVuZGVkIHdoaWxlIHJlbmRlcmluZywgYnV0IG5vIGZhbGxiYWNrIFVJIHdhcyBzcGVjaWZpZWQuCgpBZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvIHByb3ZpZGUgYSBsb2FkaW5nIGluZGljYXRvciBvciBwbGFjZWhvbGRlciB0byBkaXNwbGF5LmApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIEIyNCAhPT0gNSAmJiAoQjI0ID0gMiksIHM4ID0ga2kyKHM4LCB1MTEpLCBoMTAgPSBvNDsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgIHN3aXRjaCAoaDEwLnRhZykgewogICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICBpNCA9IHM4LCBoMTAuZmxhZ3MgfD0gNDA5NiwgbjggJj0gLW44LCBoMTAubGFuZXMgfD0gbjg7CiAgICAgICAgICAgICAgICAgIHZhciBfMjUgPSBvczMoaDEwLCBpNCwgbjgpOwogICAgICAgICAgICAgICAgICB5bzIoaDEwLCBfMjUpOwogICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICBpNCA9IHM4OwogICAgICAgICAgICAgICAgICB2YXIgdzIxID0gaDEwLnR5cGUsIE4xNyA9IGgxMC5zdGF0ZU5vZGU7CiAgICAgICAgICAgICAgICAgIGlmICgoaDEwLmZsYWdzICYgNjQpID09PSAwICYmICh0eXBlb2YgdzIxLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PSAiZnVuY3Rpb24iIHx8IE4xNyAhPT0gbnVsbCAmJiB0eXBlb2YgTjE3LmNvbXBvbmVudERpZENhdGNoID09ICJmdW5jdGlvbiIgJiYgKGZlMTIgPT09IG51bGwgfHwgIWZlMTIuaGFzKE4xNykpKSkgewogICAgICAgICAgICAgICAgICAgIGgxMC5mbGFncyB8PSA0MDk2LCBuOCAmPSAtbjgsIGgxMC5sYW5lcyB8PSBuODsKICAgICAgICAgICAgICAgICAgICB2YXIgVDI5ID0gdXMyKGgxMCwgaTQsIG44KTsKICAgICAgICAgICAgICAgICAgICB5bzIoaDEwLCBUMjkpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaDEwID0gaDEwLnJldHVybjsKICAgICAgICAgICAgfSB3aGlsZSAoaDEwICE9PSBudWxsKTsKICAgICAgICAgIH0KICAgICAgICAgIGhzKHQ0KTsKICAgICAgICB9IGNhdGNoIChQMjcpIHsKICAgICAgICAgIG44ID0gUDI3LCBqMTkgPT09IHQ0ICYmIHQ0ICE9PSBudWxsICYmIChqMTkgPSB0NCA9IHQ0LnJldHVybik7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0gd2hpbGUgKDEpOwogICAgfQogICAgZnVuY3Rpb24gcHMyKCkgewogICAgICB2YXIgZTUgPSBtcjMuY3VycmVudDsKICAgICAgcmV0dXJuIG1yMy5jdXJyZW50ID0gcHIzLCBlNSA9PT0gbnVsbCA/IHByMyA6IGU1OwogICAgfQogICAgZnVuY3Rpb24gWG40KGU1LCBuOCkgewogICAgICB2YXIgdDQgPSB4MjE7CiAgICAgIHgyMSB8PSAxNjsKICAgICAgdmFyIHIzID0gcHMyKCk7CiAgICAgIFkzMCA9PT0gZTUgJiYgUTE3ID09PSBuOCB8fCBTbjQoZTUsIG44KTsKICAgICAgZG8KICAgICAgICB0cnkgewogICAgICAgICAgZGYoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gY2F0Y2ggKGw3KSB7CiAgICAgICAgICBkczIoZTUsIGw3KTsKICAgICAgICB9CiAgICAgIHdoaWxlICgxKTsKICAgICAgaWYgKGRpMygpLCB4MjEgPSB0NCwgbXIzLmN1cnJlbnQgPSByMywgajE5ICE9PSBudWxsKQogICAgICAgIHRocm93IEVycm9yKHYxNSgyNjEpKTsKICAgICAgcmV0dXJuIFkzMCA9IG51bGwsIFExNyA9IDAsIEIyNDsKICAgIH0KICAgIGZ1bmN0aW9uIGRmKCkgewogICAgICBmb3IgKDsgajE5ICE9PSBudWxsOyApCiAgICAgICAgbXMyKGoxOSk7CiAgICB9CiAgICBmdW5jdGlvbiBwZigpIHsKICAgICAgZm9yICg7IGoxOSAhPT0gbnVsbCAmJiAhWGEyKCk7ICkKICAgICAgICBtczIoajE5KTsKICAgIH0KICAgIGZ1bmN0aW9uIG1zMihlNSkgewogICAgICB2YXIgbjggPSB5czIoZTUuYWx0ZXJuYXRlLCBlNSwgWmU3KTsKICAgICAgZTUubWVtb2l6ZWRQcm9wcyA9IGU1LnBlbmRpbmdQcm9wcywgbjggPT09IG51bGwgPyBocyhlNSkgOiBqMTkgPSBuOCwgeGkyLmN1cnJlbnQgPSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gaHMoZTUpIHsKICAgICAgdmFyIG44ID0gZTU7CiAgICAgIGRvIHsKICAgICAgICB2YXIgdDQgPSBuOC5hbHRlcm5hdGU7CiAgICAgICAgaWYgKGU1ID0gbjgucmV0dXJuLCAobjguZmxhZ3MgJiAyMDQ4KSA9PT0gMCkgewogICAgICAgICAgaWYgKHQ0ID0gdGYodDQsIG44LCBaZTcpLCB0NCAhPT0gbnVsbCkgewogICAgICAgICAgICBqMTkgPSB0NDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHQ0ID0gbjgsIHQ0LnRhZyAhPT0gMjQgJiYgdDQudGFnICE9PSAyMyB8fCB0NC5tZW1vaXplZFN0YXRlID09PSBudWxsIHx8IChaZTcgJiAxMDczNzQxODI0KSAhPT0gMCB8fCAodDQubW9kZSAmIDQpID09PSAwKSB7CiAgICAgICAgICAgIGZvciAodmFyIHIzID0gMCwgbDcgPSB0NC5jaGlsZDsgbDcgIT09IG51bGw7ICkKICAgICAgICAgICAgICByMyB8PSBsNy5sYW5lcyB8IGw3LmNoaWxkTGFuZXMsIGw3ID0gbDcuc2libGluZzsKICAgICAgICAgICAgdDQuY2hpbGRMYW5lcyA9IHIzOwogICAgICAgICAgfQogICAgICAgICAgZTUgIT09IG51bGwgJiYgKGU1LmZsYWdzICYgMjA0OCkgPT09IDAgJiYgKGU1LmZpcnN0RWZmZWN0ID09PSBudWxsICYmIChlNS5maXJzdEVmZmVjdCA9IG44LmZpcnN0RWZmZWN0KSwgbjgubGFzdEVmZmVjdCAhPT0gbnVsbCAmJiAoZTUubGFzdEVmZmVjdCAhPT0gbnVsbCAmJiAoZTUubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gbjguZmlyc3RFZmZlY3QpLCBlNS5sYXN0RWZmZWN0ID0gbjgubGFzdEVmZmVjdCksIDEgPCBuOC5mbGFncyAmJiAoZTUubGFzdEVmZmVjdCAhPT0gbnVsbCA/IGU1Lmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IG44IDogZTUuZmlyc3RFZmZlY3QgPSBuOCwgZTUubGFzdEVmZmVjdCA9IG44KSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh0NCA9IHJmKG44KSwgdDQgIT09IG51bGwpIHsKICAgICAgICAgICAgdDQuZmxhZ3MgJj0gMjA0NywgajE5ID0gdDQ7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGU1ICE9PSBudWxsICYmIChlNS5maXJzdEVmZmVjdCA9IGU1Lmxhc3RFZmZlY3QgPSBudWxsLCBlNS5mbGFncyB8PSAyMDQ4KTsKICAgICAgICB9CiAgICAgICAgaWYgKG44ID0gbjguc2libGluZywgbjggIT09IG51bGwpIHsKICAgICAgICAgIGoxOSA9IG44OwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBqMTkgPSBuOCA9IGU1OwogICAgICB9IHdoaWxlIChuOCAhPT0gbnVsbCk7CiAgICAgIEIyNCA9PT0gMCAmJiAoQjI0ID0gNSk7CiAgICB9CiAgICBmdW5jdGlvbiBIZTcoZTUpIHsKICAgICAgdmFyIG44ID0gQ240KCk7CiAgICAgIHJldHVybiBHZTgoOTksIG1mLmJpbmQobnVsbCwgZTUsIG44KSksIG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBtZihlNSwgbjgpIHsKICAgICAgZG8KICAgICAgICBCZTEyKCk7CiAgICAgIHdoaWxlIChydDE0ICE9PSBudWxsKTsKICAgICAgaWYgKCh4MjEgJiA0OCkgIT09IDApCiAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMyNykpOwogICAgICB2YXIgdDQgPSBlNS5maW5pc2hlZFdvcms7CiAgICAgIGlmICh0NCA9PT0gbnVsbCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgaWYgKGU1LmZpbmlzaGVkV29yayA9IG51bGwsIGU1LmZpbmlzaGVkTGFuZXMgPSAwLCB0NCA9PT0gZTUuY3VycmVudCkKICAgICAgICB0aHJvdyBFcnJvcih2MTUoMTc3KSk7CiAgICAgIGU1LmNhbGxiYWNrTm9kZSA9IG51bGw7CiAgICAgIHZhciByMyA9IHQ0LmxhbmVzIHwgdDQuY2hpbGRMYW5lcywgbDcgPSByMywgaTQgPSBlNS5wZW5kaW5nTGFuZXMgJiB+bDc7CiAgICAgIGU1LnBlbmRpbmdMYW5lcyA9IGw3LCBlNS5zdXNwZW5kZWRMYW5lcyA9IDAsIGU1LnBpbmdlZExhbmVzID0gMCwgZTUuZXhwaXJlZExhbmVzICY9IGw3LCBlNS5tdXRhYmxlUmVhZExhbmVzICY9IGw3LCBlNS5lbnRhbmdsZWRMYW5lcyAmPSBsNywgbDcgPSBlNS5lbnRhbmdsZW1lbnRzOwogICAgICBmb3IgKHZhciBvNCA9IGU1LmV2ZW50VGltZXMsIHUxMSA9IGU1LmV4cGlyYXRpb25UaW1lczsgMCA8IGk0OyApIHsKICAgICAgICB2YXIgczggPSAzMSAtIEllMTAoaTQpLCBkMTUgPSAxIDw8IHM4OwogICAgICAgIGw3W3M4XSA9IDAsIG80W3M4XSA9IC0xLCB1MTFbczhdID0gLTEsIGk0ICY9IH5kMTU7CiAgICAgIH0KICAgICAgaWYgKGdlMTQgIT09IG51bGwgJiYgKHIzICYgMjQpID09PSAwICYmIGdlMTQuaGFzKGU1KSAmJiBnZTE0LmRlbGV0ZShlNSksIGU1ID09PSBZMzAgJiYgKGoxOSA9IFkzMCA9IG51bGwsIFExNyA9IDApLCAxIDwgdDQuZmxhZ3MgPyB0NC5sYXN0RWZmZWN0ICE9PSBudWxsID8gKHQ0Lmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IHQ0LCByMyA9IHQ0LmZpcnN0RWZmZWN0KSA6IHIzID0gdDQgOiByMyA9IHQ0LmZpcnN0RWZmZWN0LCByMyAhPT0gbnVsbCkgewogICAgICAgIGlmIChsNyA9IHgyMSwgeDIxIHw9IDMyLCB4aTIuY3VycmVudCA9IG51bGwsIFdyMiA9IFZ0MTIsIG80ID0gcm8oKSwgaGwobzQpKSB7CiAgICAgICAgICBpZiAoInNlbGVjdGlvblN0YXJ0IiBpbiBvNCkKICAgICAgICAgICAgdTExID0geyBzdGFydDogbzQuc2VsZWN0aW9uU3RhcnQsIGVuZDogbzQuc2VsZWN0aW9uRW5kIH07CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGU6CiAgICAgICAgICAgICAgaWYgKHUxMSA9ICh1MTEgPSBvNC5vd25lckRvY3VtZW50KSAmJiB1MTEuZGVmYXVsdFZpZXcgfHwgd2luZG93LCAoZDE1ID0gdTExLmdldFNlbGVjdGlvbiAmJiB1MTEuZ2V0U2VsZWN0aW9uKCkpICYmIGQxNS5yYW5nZUNvdW50ICE9PSAwKSB7CiAgICAgICAgICAgICAgICB1MTEgPSBkMTUuYW5jaG9yTm9kZSwgaTQgPSBkMTUuYW5jaG9yT2Zmc2V0LCBzOCA9IGQxNS5mb2N1c05vZGUsIGQxNSA9IGQxNS5mb2N1c09mZnNldDsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgIHUxMS5ub2RlVHlwZSwgczgubm9kZVR5cGU7CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgICAgICAgdTExID0gbnVsbDsKICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciB5MTcgPSAwLCBDMTcgPSAtMSwgaDEwID0gLTEsIFMyMSA9IDAsIGsxOCA9IDAsIEUxNSA9IG80LCBjMTcgPSBudWxsOwogICAgICAgICAgICAgICAgbjoKICAgICAgICAgICAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYTQ7IEUxNSAhPT0gdTExIHx8IGk0ICE9PSAwICYmIEUxNS5ub2RlVHlwZSAhPT0gMyB8fCAoQzE3ID0geTE3ICsgaTQpLCBFMTUgIT09IHM4IHx8IGQxNSAhPT0gMCAmJiBFMTUubm9kZVR5cGUgIT09IDMgfHwgKGgxMCA9IHkxNyArIGQxNSksIEUxNS5ub2RlVHlwZSA9PT0gMyAmJiAoeTE3ICs9IEUxNS5ub2RlVmFsdWUubGVuZ3RoKSwgKGE0ID0gRTE1LmZpcnN0Q2hpbGQpICE9PSBudWxsOyApCiAgICAgICAgICAgICAgICAgICAgICBjMTcgPSBFMTUsIEUxNSA9IGE0OwogICAgICAgICAgICAgICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKEUxNSA9PT0gbzQpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgICAgICBpZiAoYzE3ID09PSB1MTEgJiYgKytTMjEgPT09IGk0ICYmIChDMTcgPSB5MTcpLCBjMTcgPT09IHM4ICYmICsrazE4ID09PSBkMTUgJiYgKGgxMCA9IHkxNyksIChhNCA9IEUxNS5uZXh0U2libGluZykgIT09IG51bGwpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgRTE1ID0gYzE3LCBjMTcgPSBFMTUucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgRTE1ID0gYTQ7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHUxMSA9IEMxNyA9PT0gLTEgfHwgaDEwID09PSAtMSA/IG51bGwgOiB7IHN0YXJ0OiBDMTcsIGVuZDogaDEwIH07CiAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICB1MTEgPSBudWxsOwogICAgICAgICAgdTExID0gdTExIHx8IHsgc3RhcnQ6IDAsIGVuZDogMCB9OwogICAgICAgIH0gZWxzZQogICAgICAgICAgdTExID0gbnVsbDsKICAgICAgICBBcjMgPSB7IGZvY3VzZWRFbGVtOiBvNCwgc2VsZWN0aW9uUmFuZ2U6IHUxMSB9LCBWdDEyID0gZmFsc2UsIGl0MTQgPSBudWxsLCBZdDYgPSBmYWxzZSwgZzEyID0gcjM7CiAgICAgICAgZG8KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGhmKCk7CiAgICAgICAgICB9IGNhdGNoIChQMjcpIHsKICAgICAgICAgICAgaWYgKGcxMiA9PT0gbnVsbCkKICAgICAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoMzMwKSk7CiAgICAgICAgICAgIFJlMTYoZzEyLCBQMjcpLCBnMTIgPSBnMTIubmV4dEVmZmVjdDsKICAgICAgICAgIH0KICAgICAgICB3aGlsZSAoZzEyICE9PSBudWxsKTsKICAgICAgICBpdDE0ID0gbnVsbCwgZzEyID0gcjM7CiAgICAgICAgZG8KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGZvciAobzQgPSBlNTsgZzEyICE9PSBudWxsOyApIHsKICAgICAgICAgICAgICB2YXIgZjExID0gZzEyLmZsYWdzOwogICAgICAgICAgICAgIGlmIChmMTEgJiAxNiAmJiB1dDEzKGcxMi5zdGF0ZU5vZGUsICIiKSwgZjExICYgMTI4KSB7CiAgICAgICAgICAgICAgICB2YXIgcDE4ID0gZzEyLmFsdGVybmF0ZTsKICAgICAgICAgICAgICAgIGlmIChwMTggIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgdmFyIG0yMyA9IHAxOC5yZWY7CiAgICAgICAgICAgICAgICAgIG0yMyAhPT0gbnVsbCAmJiAodHlwZW9mIG0yMyA9PSAiZnVuY3Rpb24iID8gbTIzKG51bGwpIDogbTIzLmN1cnJlbnQgPSBudWxsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc3dpdGNoIChmMTEgJiAxMDM4KSB7CiAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgIFdvKGcxMiksIGcxMi5mbGFncyAmPSAtMzsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgIFdvKGcxMiksIGcxMi5mbGFncyAmPSAtMywgWnIyKGcxMi5hbHRlcm5hdGUsIGcxMik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAxMDI0OgogICAgICAgICAgICAgICAgICBnMTIuZmxhZ3MgJj0gLTEwMjU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAxMDI4OgogICAgICAgICAgICAgICAgICBnMTIuZmxhZ3MgJj0gLTEwMjUsIFpyMihnMTIuYWx0ZXJuYXRlLCBnMTIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgWnIyKGcxMi5hbHRlcm5hdGUsIGcxMik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgICAgICB1MTEgPSBnMTIsIHNzMihvNCwgdTExKTsKICAgICAgICAgICAgICAgICAgdmFyIF8yNSA9IHUxMS5hbHRlcm5hdGU7CiAgICAgICAgICAgICAgICAgIEJvKHUxMSksIF8yNSAhPT0gbnVsbCAmJiBCbyhfMjUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBnMTIgPSBnMTIubmV4dEVmZmVjdDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoUDI3KSB7CiAgICAgICAgICAgIGlmIChnMTIgPT09IG51bGwpCiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMzMCkpOwogICAgICAgICAgICBSZTE2KGcxMiwgUDI3KSwgZzEyID0gZzEyLm5leHRFZmZlY3Q7CiAgICAgICAgICB9CiAgICAgICAgd2hpbGUgKGcxMiAhPT0gbnVsbCk7CiAgICAgICAgaWYgKG0yMyA9IEFyMywgcDE4ID0gcm8oKSwgZjExID0gbTIzLmZvY3VzZWRFbGVtLCBvNCA9IG0yMy5zZWxlY3Rpb25SYW5nZSwgcDE4ICE9PSBmMTEgJiYgZjExICYmIGYxMS5vd25lckRvY3VtZW50ICYmIE51KGYxMS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgZjExKSkgewogICAgICAgICAgZm9yIChvNCAhPT0gbnVsbCAmJiBobChmMTEpICYmIChwMTggPSBvNC5zdGFydCwgbTIzID0gbzQuZW5kLCBtMjMgPT09IHZvaWQgMCAmJiAobTIzID0gcDE4KSwgInNlbGVjdGlvblN0YXJ0IiBpbiBmMTEgPyAoZjExLnNlbGVjdGlvblN0YXJ0ID0gcDE4LCBmMTEuc2VsZWN0aW9uRW5kID0gTWF0aC5taW4obTIzLCBmMTEudmFsdWUubGVuZ3RoKSkgOiAobTIzID0gKHAxOCA9IGYxMS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50KSAmJiBwMTguZGVmYXVsdFZpZXcgfHwgd2luZG93LCBtMjMuZ2V0U2VsZWN0aW9uICYmIChtMjMgPSBtMjMuZ2V0U2VsZWN0aW9uKCksIHUxMSA9IGYxMS50ZXh0Q29udGVudC5sZW5ndGgsIF8yNSA9IE1hdGgubWluKG80LnN0YXJ0LCB1MTEpLCBvNCA9IG80LmVuZCA9PT0gdm9pZCAwID8gXzI1IDogTWF0aC5taW4obzQuZW5kLCB1MTEpLCAhbTIzLmV4dGVuZCAmJiBfMjUgPiBvNCAmJiAodTExID0gbzQsIG80ID0gXzI1LCBfMjUgPSB1MTEpLCB1MTEgPSB0byhmMTEsIF8yNSksIGk0ID0gdG8oZjExLCBvNCksIHUxMSAmJiBpNCAmJiAobTIzLnJhbmdlQ291bnQgIT09IDEgfHwgbTIzLmFuY2hvck5vZGUgIT09IHUxMS5ub2RlIHx8IG0yMy5hbmNob3JPZmZzZXQgIT09IHUxMS5vZmZzZXQgfHwgbTIzLmZvY3VzTm9kZSAhPT0gaTQubm9kZSB8fCBtMjMuZm9jdXNPZmZzZXQgIT09IGk0Lm9mZnNldCkgJiYgKHAxOCA9IHAxOC5jcmVhdGVSYW5nZSgpLCBwMTguc2V0U3RhcnQodTExLm5vZGUsIHUxMS5vZmZzZXQpLCBtMjMucmVtb3ZlQWxsUmFuZ2VzKCksIF8yNSA+IG80ID8gKG0yMy5hZGRSYW5nZShwMTgpLCBtMjMuZXh0ZW5kKGk0Lm5vZGUsIGk0Lm9mZnNldCkpIDogKHAxOC5zZXRFbmQoaTQubm9kZSwgaTQub2Zmc2V0KSwgbTIzLmFkZFJhbmdlKHAxOCkpKSkpKSwgcDE4ID0gW10sIG0yMyA9IGYxMTsgbTIzID0gbTIzLnBhcmVudE5vZGU7ICkKICAgICAgICAgICAgbTIzLm5vZGVUeXBlID09PSAxICYmIHAxOC5wdXNoKHsgZWxlbWVudDogbTIzLCBsZWZ0OiBtMjMuc2Nyb2xsTGVmdCwgdG9wOiBtMjMuc2Nyb2xsVG9wIH0pOwogICAgICAgICAgZm9yICh0eXBlb2YgZjExLmZvY3VzID09ICJmdW5jdGlvbiIgJiYgZjExLmZvY3VzKCksIGYxMSA9IDA7IGYxMSA8IHAxOC5sZW5ndGg7IGYxMSsrKQogICAgICAgICAgICBtMjMgPSBwMThbZjExXSwgbTIzLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IG0yMy5sZWZ0LCBtMjMuZWxlbWVudC5zY3JvbGxUb3AgPSBtMjMudG9wOwogICAgICAgIH0KICAgICAgICBWdDEyID0gISFXcjIsIEFyMyA9IFdyMiA9IG51bGwsIGU1LmN1cnJlbnQgPSB0NCwgZzEyID0gcjM7CiAgICAgICAgZG8KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGZvciAoZjExID0gZTU7IGcxMiAhPT0gbnVsbDsgKSB7CiAgICAgICAgICAgICAgdmFyIHcyMSA9IGcxMi5mbGFnczsKICAgICAgICAgICAgICBpZiAodzIxICYgMzYgJiYgc2YoZjExLCBnMTIuYWx0ZXJuYXRlLCBnMTIpLCB3MjEgJiAxMjgpIHsKICAgICAgICAgICAgICAgIHAxOCA9IHZvaWQgMDsKICAgICAgICAgICAgICAgIHZhciBOMTcgPSBnMTIucmVmOwogICAgICAgICAgICAgICAgaWYgKE4xNyAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICB2YXIgVDI5ID0gZzEyLnN0YXRlTm9kZTsKICAgICAgICAgICAgICAgICAgc3dpdGNoIChnMTIudGFnKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICAgICAgcDE4ID0gVDI5OwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgIHAxOCA9IFQyOTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB0eXBlb2YgTjE3ID09ICJmdW5jdGlvbiIgPyBOMTcocDE4KSA6IE4xNy5jdXJyZW50ID0gcDE4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBnMTIgPSBnMTIubmV4dEVmZmVjdDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoUDI3KSB7CiAgICAgICAgICAgIGlmIChnMTIgPT09IG51bGwpCiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMzMCkpOwogICAgICAgICAgICBSZTE2KGcxMiwgUDI3KSwgZzEyID0gZzEyLm5leHRFZmZlY3Q7CiAgICAgICAgICB9CiAgICAgICAgd2hpbGUgKGcxMiAhPT0gbnVsbCk7CiAgICAgICAgZzEyID0gbnVsbCwgR2EyKCksIHgyMSA9IGw3OwogICAgICB9IGVsc2UKICAgICAgICBlNS5jdXJyZW50ID0gdDQ7CiAgICAgIGlmIChqZTcpCiAgICAgICAgamU3ID0gZmFsc2UsIHJ0MTQgPSBlNSwgWW40ID0gbjg7CiAgICAgIGVsc2UKICAgICAgICBmb3IgKGcxMiA9IHIzOyBnMTIgIT09IG51bGw7ICkKICAgICAgICAgIG44ID0gZzEyLm5leHRFZmZlY3QsIGcxMi5uZXh0RWZmZWN0ID0gbnVsbCwgZzEyLmZsYWdzICYgOCAmJiAodzIxID0gZzEyLCB3MjEuc2libGluZyA9IG51bGwsIHcyMS5zdGF0ZU5vZGUgPSBudWxsKSwgZzEyID0gbjg7CiAgICAgIGlmIChyMyA9IGU1LnBlbmRpbmdMYW5lcywgcjMgPT09IDAgJiYgKGZlMTIgPSBudWxsKSwgcjMgPT09IDEgPyBlNSA9PT0gVWwgPyBsdDEwKysgOiAobHQxMCA9IDAsIFVsID0gZTUpIDogbHQxMCA9IDAsIHQ0ID0gdDQuc3RhdGVOb2RlLCBYZTUgJiYgdHlwZW9mIFhlNS5vbkNvbW1pdEZpYmVyUm9vdCA9PSAiZnVuY3Rpb24iKQogICAgICAgIHRyeSB7CiAgICAgICAgICBYZTUub25Db21taXRGaWJlclJvb3QoZmkyLCB0NCwgdm9pZCAwLCAodDQuY3VycmVudC5mbGFncyAmIDY0KSA9PT0gNjQpOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgIH0KICAgICAgaWYgKGxlMTUoZTUsIEEyMCgpKSwgaHIzKQogICAgICAgIHRocm93IGhyMyA9IGZhbHNlLCBlNSA9IElsLCBJbCA9IG51bGwsIGU1OwogICAgICByZXR1cm4gKHgyMSAmIDgpICE9PSAwIHx8IHBlMTMoKSwgbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGhmKCkgewogICAgICBmb3IgKDsgZzEyICE9PSBudWxsOyApIHsKICAgICAgICB2YXIgZTUgPSBnMTIuYWx0ZXJuYXRlOwogICAgICAgIFl0NiB8fCBpdDE0ID09PSBudWxsIHx8ICgoZzEyLmZsYWdzICYgOCkgIT09IDAgPyBBaTMoZzEyLCBpdDE0KSAmJiAoWXQ2ID0gdHJ1ZSkgOiBnMTIudGFnID09PSAxMyAmJiBhZihlNSwgZzEyKSAmJiBBaTMoZzEyLCBpdDE0KSAmJiAoWXQ2ID0gdHJ1ZSkpOwogICAgICAgIHZhciBuOCA9IGcxMi5mbGFnczsKICAgICAgICAobjggJiAyNTYpICE9PSAwICYmIHVmKGU1LCBnMTIpLCAobjggJiA1MTIpID09PSAwIHx8IGplNyB8fCAoamU3ID0gdHJ1ZSwgaHQxMyg5NywgZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gQmUxMigpLCBudWxsOwogICAgICAgIH0pKSwgZzEyID0gZzEyLm5leHRFZmZlY3Q7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIEJlMTIoKSB7CiAgICAgIGlmIChZbjQgIT09IDkwKSB7CiAgICAgICAgdmFyIGU1ID0gOTcgPCBZbjQgPyA5NyA6IFluNDsKICAgICAgICByZXR1cm4gWW40ID0gOTAsIEdlOChlNSwgeWYpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIHZmKGU1LCBuOCkgewogICAgICBGbC5wdXNoKG44LCBlNSksIGplNyB8fCAoamU3ID0gdHJ1ZSwgaHQxMyg5NywgZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIEJlMTIoKSwgbnVsbDsKICAgICAgfSkpOwogICAgfQogICAgZnVuY3Rpb24gdnMyKGU1LCBuOCkgewogICAgICBqbC5wdXNoKG44LCBlNSksIGplNyB8fCAoamU3ID0gdHJ1ZSwgaHQxMyg5NywgZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIEJlMTIoKSwgbnVsbDsKICAgICAgfSkpOwogICAgfQogICAgZnVuY3Rpb24geWYoKSB7CiAgICAgIGlmIChydDE0ID09PSBudWxsKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgdmFyIGU1ID0gcnQxNDsKICAgICAgaWYgKHJ0MTQgPSBudWxsLCAoeDIxICYgNDgpICE9PSAwKQogICAgICAgIHRocm93IEVycm9yKHYxNSgzMzEpKTsKICAgICAgdmFyIG44ID0geDIxOwogICAgICB4MjEgfD0gMzI7CiAgICAgIHZhciB0NCA9IGpsOwogICAgICBqbCA9IFtdOwogICAgICBmb3IgKHZhciByMyA9IDA7IHIzIDwgdDQubGVuZ3RoOyByMyArPSAyKSB7CiAgICAgICAgdmFyIGw3ID0gdDRbcjNdLCBpNCA9IHQ0W3IzICsgMV0sIG80ID0gbDcuZGVzdHJveTsKICAgICAgICBpZiAobDcuZGVzdHJveSA9IHZvaWQgMCwgdHlwZW9mIG80ID09ICJmdW5jdGlvbiIpCiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvNCgpOwogICAgICAgICAgfSBjYXRjaCAoczgpIHsKICAgICAgICAgICAgaWYgKGk0ID09PSBudWxsKQogICAgICAgICAgICAgIHRocm93IEVycm9yKHYxNSgzMzApKTsKICAgICAgICAgICAgUmUxNihpNCwgczgpOwogICAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAodDQgPSBGbCwgRmwgPSBbXSwgcjMgPSAwOyByMyA8IHQ0Lmxlbmd0aDsgcjMgKz0gMikgewogICAgICAgIGw3ID0gdDRbcjNdLCBpNCA9IHQ0W3IzICsgMV07CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciB1MTEgPSBsNy5jcmVhdGU7CiAgICAgICAgICBsNy5kZXN0cm95ID0gdTExKCk7CiAgICAgICAgfSBjYXRjaCAoczgpIHsKICAgICAgICAgIGlmIChpNCA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMzMCkpOwogICAgICAgICAgUmUxNihpNCwgczgpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKHUxMSA9IGU1LmN1cnJlbnQuZmlyc3RFZmZlY3Q7IHUxMSAhPT0gbnVsbDsgKQogICAgICAgIGU1ID0gdTExLm5leHRFZmZlY3QsIHUxMS5uZXh0RWZmZWN0ID0gbnVsbCwgdTExLmZsYWdzICYgOCAmJiAodTExLnNpYmxpbmcgPSBudWxsLCB1MTEuc3RhdGVOb2RlID0gbnVsbCksIHUxMSA9IGU1OwogICAgICByZXR1cm4geDIxID0gbjgsIHBlMTMoKSwgdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIFFvKGU1LCBuOCwgdDQpIHsKICAgICAgbjggPSBraTIodDQsIG44KSwgbjggPSBvczMoZTUsIG44LCAxKSwgemU5KGU1LCBuOCksIG44ID0gcTIwKCksIGU1ID0gTHIzKGU1LCAxKSwgZTUgIT09IG51bGwgJiYgKEVyMyhlNSwgMSwgbjgpLCBsZTE1KGU1LCBuOCkpOwogICAgfQogICAgZnVuY3Rpb24gUmUxNihlNSwgbjgpIHsKICAgICAgaWYgKGU1LnRhZyA9PT0gMykKICAgICAgICBRbyhlNSwgZTUsIG44KTsKICAgICAgZWxzZQogICAgICAgIGZvciAodmFyIHQ0ID0gZTUucmV0dXJuOyB0NCAhPT0gbnVsbDsgKSB7CiAgICAgICAgICBpZiAodDQudGFnID09PSAzKSB7CiAgICAgICAgICAgIFFvKHQ0LCBlNSwgbjgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0gZWxzZSBpZiAodDQudGFnID09PSAxKSB7CiAgICAgICAgICAgIHZhciByMyA9IHQ0LnN0YXRlTm9kZTsKICAgICAgICAgICAgaWYgKHR5cGVvZiB0NC50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PSAiZnVuY3Rpb24iIHx8IHR5cGVvZiByMy5jb21wb25lbnREaWRDYXRjaCA9PSAiZnVuY3Rpb24iICYmIChmZTEyID09PSBudWxsIHx8ICFmZTEyLmhhcyhyMykpKSB7CiAgICAgICAgICAgICAgZTUgPSBraTIobjgsIGU1KTsKICAgICAgICAgICAgICB2YXIgbDcgPSB1czIodDQsIGU1LCAxKTsKICAgICAgICAgICAgICBpZiAoemU5KHQ0LCBsNyksIGw3ID0gcTIwKCksIHQ0ID0gTHIzKHQ0LCAxKSwgdDQgIT09IG51bGwpCiAgICAgICAgICAgICAgICBFcjModDQsIDEsIGw3KSwgbGUxNSh0NCwgbDcpOwogICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiByMy5jb21wb25lbnREaWRDYXRjaCA9PSAiZnVuY3Rpb24iICYmIChmZTEyID09PSBudWxsIHx8ICFmZTEyLmhhcyhyMykpKQogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgcjMuY29tcG9uZW50RGlkQ2F0Y2gobjgsIGU1KTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0NCA9IHQ0LnJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBnZihlNSwgbjgsIHQ0KSB7CiAgICAgIHZhciByMyA9IGU1LnBpbmdDYWNoZTsKICAgICAgcjMgIT09IG51bGwgJiYgcjMuZGVsZXRlKG44KSwgbjggPSBxMjAoKSwgZTUucGluZ2VkTGFuZXMgfD0gZTUuc3VzcGVuZGVkTGFuZXMgJiB0NCwgWTMwID09PSBlNSAmJiAoUTE3ICYgdDQpID09PSB0NCAmJiAoQjI0ID09PSA0IHx8IEIyNCA9PT0gMyAmJiAoUTE3ICYgNjI5MTQ1NjApID09PSBRMTcgJiYgNTAwID4gQTIwKCkgLSBfaTMgPyBTbjQoZTUsIDApIDogQ2kzIHw9IHQ0KSwgbGUxNShlNSwgbjgpOwogICAgfQogICAgZnVuY3Rpb24gd2YoZTUsIG44KSB7CiAgICAgIHZhciB0NCA9IGU1LnN0YXRlTm9kZTsKICAgICAgdDQgIT09IG51bGwgJiYgdDQuZGVsZXRlKG44KSwgbjggPSAwLCBuOCA9PT0gMCAmJiAobjggPSBlNS5tb2RlLCAobjggJiAyKSA9PT0gMCA/IG44ID0gMSA6IChuOCAmIDQpID09PSAwID8gbjggPSBDbjQoKSA9PT0gOTkgPyAxIDogMiA6IChoZTE0ID09PSAwICYmIChoZTE0ID0gVG40KSwgbjggPSBsbjMoNjI5MTQ1NjAgJiB+aGUxNCksIG44ID09PSAwICYmIChuOCA9IDQxOTQzMDQpKSksIHQ0ID0gcTIwKCksIGU1ID0gTHIzKGU1LCBuOCksIGU1ICE9PSBudWxsICYmIChFcjMoZTUsIG44LCB0NCksIGxlMTUoZTUsIHQ0KSk7CiAgICB9CiAgICB2YXIgeXMyOwogICAgeXMyID0gZnVuY3Rpb24oZTUsIG44LCB0NCkgewogICAgICB2YXIgcjMgPSBuOC5sYW5lczsKICAgICAgaWYgKGU1ICE9PSBudWxsKQogICAgICAgIGlmIChlNS5tZW1vaXplZFByb3BzICE9PSBuOC5wZW5kaW5nUHJvcHMgfHwgWjIyLmN1cnJlbnQpCiAgICAgICAgICB1ZTE4ID0gdHJ1ZTsKICAgICAgICBlbHNlIGlmICgodDQgJiByMykgIT09IDApCiAgICAgICAgICB1ZTE4ID0gKGU1LmZsYWdzICYgMTYzODQpICE9PSAwOwogICAgICAgIGVsc2UgewogICAgICAgICAgc3dpdGNoICh1ZTE4ID0gZmFsc2UsIG44LnRhZykgewogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgem8objgpLCBYcjMoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgIEVvKG44KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIEoxNChuOC50eXBlKSAmJiBXdDEzKG44KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIHhsKG44LCBuOC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgcjMgPSBuOC5tZW1vaXplZFByb3BzLnZhbHVlOwogICAgICAgICAgICAgIHZhciBsNyA9IG44LnR5cGUuX2NvbnRleHQ7CiAgICAgICAgICAgICAgRDIwKHJyMywgbDcuX2N1cnJlbnRWYWx1ZSksIGw3Ll9jdXJyZW50VmFsdWUgPSByMzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgICBpZiAobjgubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCkKICAgICAgICAgICAgICAgIHJldHVybiAodDQgJiBuOC5jaGlsZC5jaGlsZExhbmVzKSAhPT0gMCA/IE9vKGU1LCBuOCwgdDQpIDogKEQyMChSMjYsIFIyNi5jdXJyZW50ICYgMSksIG44ID0geWUxNShlNSwgbjgsIHQ0KSwgbjggIT09IG51bGwgPyBuOC5zaWJsaW5nIDogbnVsbCk7CiAgICAgICAgICAgICAgRDIwKFIyNiwgUjI2LmN1cnJlbnQgJiAxKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxOToKICAgICAgICAgICAgICBpZiAocjMgPSAodDQgJiBuOC5jaGlsZExhbmVzKSAhPT0gMCwgKGU1LmZsYWdzICYgNjQpICE9PSAwKSB7CiAgICAgICAgICAgICAgICBpZiAocjMpCiAgICAgICAgICAgICAgICAgIHJldHVybiBGbyhlNSwgbjgsIHQ0KTsKICAgICAgICAgICAgICAgIG44LmZsYWdzIHw9IDY0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAobDcgPSBuOC5tZW1vaXplZFN0YXRlLCBsNyAhPT0gbnVsbCAmJiAobDcucmVuZGVyaW5nID0gbnVsbCwgbDcudGFpbCA9IG51bGwsIGw3Lmxhc3RFZmZlY3QgPSBudWxsKSwgRDIwKFIyNiwgUjI2LmN1cnJlbnQpLCByMykKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICBjYXNlIDIzOgogICAgICAgICAgICBjYXNlIDI0OgogICAgICAgICAgICAgIHJldHVybiBuOC5sYW5lcyA9IDAsIEtyMihlNSwgbjgsIHQ0KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB5ZTE1KGU1LCBuOCwgdDQpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHVlMTggPSBmYWxzZTsKICAgICAgc3dpdGNoIChuOC5sYW5lcyA9IDAsIG44LnRhZykgewogICAgICAgIGNhc2UgMjoKICAgICAgICAgIGlmIChyMyA9IG44LnR5cGUsIGU1ICE9PSBudWxsICYmIChlNS5hbHRlcm5hdGUgPSBudWxsLCBuOC5hbHRlcm5hdGUgPSBudWxsLCBuOC5mbGFncyB8PSAyKSwgZTUgPSBuOC5wZW5kaW5nUHJvcHMsIGw3ID0geG40KG44LCAkMjEuY3VycmVudCksIHluNShuOCwgdDQpLCBsNyA9IGdpMihudWxsLCBuOCwgcjMsIGU1LCBsNywgdDQpLCBuOC5mbGFncyB8PSAxLCB0eXBlb2YgbDcgPT0gIm9iamVjdCIgJiYgbDcgIT09IG51bGwgJiYgdHlwZW9mIGw3LnJlbmRlciA9PSAiZnVuY3Rpb24iICYmIGw3LiQkdHlwZW9mID09PSB2b2lkIDApIHsKICAgICAgICAgICAgaWYgKG44LnRhZyA9IDEsIG44Lm1lbW9pemVkU3RhdGUgPSBudWxsLCBuOC51cGRhdGVRdWV1ZSA9IG51bGwsIEoxNChyMykpIHsKICAgICAgICAgICAgICB2YXIgaTQgPSB0cnVlOwogICAgICAgICAgICAgIFd0MTMobjgpOwogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICBpNCA9IGZhbHNlOwogICAgICAgICAgICBuOC5tZW1vaXplZFN0YXRlID0gbDcuc3RhdGUgIT09IG51bGwgJiYgbDcuc3RhdGUgIT09IHZvaWQgMCA/IGw3LnN0YXRlIDogbnVsbCwgbWkyKG44KTsKICAgICAgICAgICAgdmFyIG80ID0gcjMuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOwogICAgICAgICAgICB0eXBlb2YgbzQgPT0gImZ1bmN0aW9uIiAmJiBvcjIobjgsIHIzLCBvNCwgZTUpLCBsNy51cGRhdGVyID0gUHIyLCBuOC5zdGF0ZU5vZGUgPSBsNywgbDcuX3JlYWN0SW50ZXJuYWxzID0gbjgsIGtsKG44LCByMywgZTUsIHQ0KSwgbjggPSBQbChudWxsLCBuOCwgcjMsIHRydWUsIGk0LCB0NCk7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgbjgudGFnID0gMCwgRzIzKG51bGwsIG44LCBsNywgdDQpLCBuOCA9IG44LmNoaWxkOwogICAgICAgICAgcmV0dXJuIG44OwogICAgICAgIGNhc2UgMTY6CiAgICAgICAgICBsNyA9IG44LmVsZW1lbnRUeXBlOwogICAgICAgICAgZTogewogICAgICAgICAgICBzd2l0Y2ggKGU1ICE9PSBudWxsICYmIChlNS5hbHRlcm5hdGUgPSBudWxsLCBuOC5hbHRlcm5hdGUgPSBudWxsLCBuOC5mbGFncyB8PSAyKSwgZTUgPSBuOC5wZW5kaW5nUHJvcHMsIGk0ID0gbDcuX2luaXQsIGw3ID0gaTQobDcuX3BheWxvYWQpLCBuOC50eXBlID0gbDcsIGk0ID0gbjgudGFnID0gRWYobDcpLCBlNSA9IG9lMTIobDcsIGU1KSwgaTQpIHsKICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBuOCA9IE5sKG51bGwsIG44LCBsNywgZTUsIHQ0KTsKICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgbjggPSBMbyhudWxsLCBuOCwgbDcsIGU1LCB0NCk7CiAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgICBuOCA9IFBvKG51bGwsIG44LCBsNywgZTUsIHQ0KTsKICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgY2FzZSAxNDoKICAgICAgICAgICAgICAgIG44ID0gVG8obnVsbCwgbjgsIGw3LCBvZTEyKGw3LnR5cGUsIGU1KSwgcjMsIHQ0KTsKICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDMwNiwgbDcsICIiKSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbjg7CiAgICAgICAgY2FzZSAwOgogICAgICAgICAgcmV0dXJuIHIzID0gbjgudHlwZSwgbDcgPSBuOC5wZW5kaW5nUHJvcHMsIGw3ID0gbjguZWxlbWVudFR5cGUgPT09IHIzID8gbDcgOiBvZTEyKHIzLCBsNyksIE5sKGU1LCBuOCwgcjMsIGw3LCB0NCk7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgcmV0dXJuIHIzID0gbjgudHlwZSwgbDcgPSBuOC5wZW5kaW5nUHJvcHMsIGw3ID0gbjguZWxlbWVudFR5cGUgPT09IHIzID8gbDcgOiBvZTEyKHIzLCBsNyksIExvKGU1LCBuOCwgcjMsIGw3LCB0NCk7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgaWYgKHpvKG44KSwgcjMgPSBuOC51cGRhdGVRdWV1ZSwgZTUgPT09IG51bGwgfHwgcjMgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IEVycm9yKHYxNSgyODIpKTsKICAgICAgICAgIGlmIChyMyA9IG44LnBlbmRpbmdQcm9wcywgbDcgPSBuOC5tZW1vaXplZFN0YXRlLCBsNyA9IGw3ICE9PSBudWxsID8gbDcuZWxlbWVudCA6IG51bGwsIFd1KGU1LCBuOCksIHZ0MTAobjgsIHIzLCBudWxsLCB0NCksIHIzID0gbjgubWVtb2l6ZWRTdGF0ZS5lbGVtZW50LCByMyA9PT0gbDcpCiAgICAgICAgICAgIFhyMygpLCBuOCA9IHllMTUoZTUsIG44LCB0NCk7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKGw3ID0gbjguc3RhdGVOb2RlLCAoaTQgPSBsNy5oeWRyYXRlKSAmJiAoX2UxNSA9IHZuNChuOC5zdGF0ZU5vZGUuY29udGFpbmVySW5mby5maXJzdENoaWxkKSwgdmUxMyA9IG44LCBpNCA9IGRlMTMgPSB0cnVlKSwgaTQpIHsKICAgICAgICAgICAgICBpZiAoZTUgPSBsNy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLCBlNSAhPSBudWxsKQogICAgICAgICAgICAgICAgZm9yIChsNyA9IDA7IGw3IDwgZTUubGVuZ3RoOyBsNyArPSAyKQogICAgICAgICAgICAgICAgICBpNCA9IGU1W2w3XSwgaTQuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSBlNVtsNyArIDFdLCBnbjUucHVzaChpNCk7CiAgICAgICAgICAgICAgZm9yICh0NCA9IFl1KG44LCBudWxsLCByMywgdDQpLCBuOC5jaGlsZCA9IHQ0OyB0NDsgKQogICAgICAgICAgICAgICAgdDQuZmxhZ3MgPSB0NC5mbGFncyAmIC0zIHwgMTAyNCwgdDQgPSB0NC5zaWJsaW5nOwogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICBHMjMoZTUsIG44LCByMywgdDQpLCBYcjMoKTsKICAgICAgICAgICAgbjggPSBuOC5jaGlsZDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBuODsKICAgICAgICBjYXNlIDU6CiAgICAgICAgICByZXR1cm4gRW8objgpLCBlNSA9PT0gbnVsbCAmJiBDbChuOCksIHIzID0gbjgudHlwZSwgbDcgPSBuOC5wZW5kaW5nUHJvcHMsIGk0ID0gZTUgIT09IG51bGwgPyBlNS5tZW1vaXplZFByb3BzIDogbnVsbCwgbzQgPSBsNy5jaGlsZHJlbiwgZ2wocjMsIGw3KSA/IG80ID0gbnVsbCA6IGk0ICE9PSBudWxsICYmIGdsKHIzLCBpNCkgJiYgKG44LmZsYWdzIHw9IDE2KSwgdHMyKGU1LCBuOCksIEcyMyhlNSwgbjgsIG80LCB0NCksIG44LmNoaWxkOwogICAgICAgIGNhc2UgNjoKICAgICAgICAgIHJldHVybiBlNSA9PT0gbnVsbCAmJiBDbChuOCksIG51bGw7CiAgICAgICAgY2FzZSAxMzoKICAgICAgICAgIHJldHVybiBPbyhlNSwgbjgsIHQ0KTsKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICByZXR1cm4geGwobjgsIG44LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSwgcjMgPSBuOC5wZW5kaW5nUHJvcHMsIGU1ID09PSBudWxsID8gbjguY2hpbGQgPSB1cjMobjgsIG51bGwsIHIzLCB0NCkgOiBHMjMoZTUsIG44LCByMywgdDQpLCBuOC5jaGlsZDsKICAgICAgICBjYXNlIDExOgogICAgICAgICAgcmV0dXJuIHIzID0gbjgudHlwZSwgbDcgPSBuOC5wZW5kaW5nUHJvcHMsIGw3ID0gbjguZWxlbWVudFR5cGUgPT09IHIzID8gbDcgOiBvZTEyKHIzLCBsNyksIFBvKGU1LCBuOCwgcjMsIGw3LCB0NCk7CiAgICAgICAgY2FzZSA3OgogICAgICAgICAgcmV0dXJuIEcyMyhlNSwgbjgsIG44LnBlbmRpbmdQcm9wcywgdDQpLCBuOC5jaGlsZDsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gRzIzKGU1LCBuOCwgbjgucGVuZGluZ1Byb3BzLmNoaWxkcmVuLCB0NCksIG44LmNoaWxkOwogICAgICAgIGNhc2UgMTI6CiAgICAgICAgICByZXR1cm4gRzIzKGU1LCBuOCwgbjgucGVuZGluZ1Byb3BzLmNoaWxkcmVuLCB0NCksIG44LmNoaWxkOwogICAgICAgIGNhc2UgMTA6CiAgICAgICAgICBlOiB7CiAgICAgICAgICAgIHIzID0gbjgudHlwZS5fY29udGV4dCwgbDcgPSBuOC5wZW5kaW5nUHJvcHMsIG80ID0gbjgubWVtb2l6ZWRQcm9wcywgaTQgPSBsNy52YWx1ZTsKICAgICAgICAgICAgdmFyIHUxMSA9IG44LnR5cGUuX2NvbnRleHQ7CiAgICAgICAgICAgIGlmIChEMjAocnIzLCB1MTEuX2N1cnJlbnRWYWx1ZSksIHUxMS5fY3VycmVudFZhbHVlID0gaTQsIG80ICE9PSBudWxsKQogICAgICAgICAgICAgIGlmICh1MTEgPSBvNC52YWx1ZSwgaTQgPSBlZTE4KHUxMSwgaTQpID8gMCA6ICh0eXBlb2YgcjMuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzID09ICJmdW5jdGlvbiIgPyByMy5fY2FsY3VsYXRlQ2hhbmdlZEJpdHModTExLCBpNCkgOiAxMDczNzQxODIzKSB8IDAsIGk0ID09PSAwKSB7CiAgICAgICAgICAgICAgICBpZiAobzQuY2hpbGRyZW4gPT09IGw3LmNoaWxkcmVuICYmICFaMjIuY3VycmVudCkgewogICAgICAgICAgICAgICAgICBuOCA9IHllMTUoZTUsIG44LCB0NCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBmb3IgKHUxMSA9IG44LmNoaWxkLCB1MTEgIT09IG51bGwgJiYgKHUxMS5yZXR1cm4gPSBuOCk7IHUxMSAhPT0gbnVsbDsgKSB7CiAgICAgICAgICAgICAgICAgIHZhciBzOCA9IHUxMS5kZXBlbmRlbmNpZXM7CiAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIG80ID0gdTExLmNoaWxkOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGQxNSA9IHM4LmZpcnN0Q29udGV4dDsgZDE1ICE9PSBudWxsOyApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChkMTUuY29udGV4dCA9PT0gcjMgJiYgKGQxNS5vYnNlcnZlZEJpdHMgJiBpNCkgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdTExLnRhZyA9PT0gMSAmJiAoZDE1ID0gTGUxMCgtMSwgdDQgJiAtdDQpLCBkMTUudGFnID0gMiwgemU5KHUxMSwgZDE1KSksIHUxMS5sYW5lcyB8PSB0NCwgZDE1ID0gdTExLmFsdGVybmF0ZSwgZDE1ICE9PSBudWxsICYmIChkMTUubGFuZXMgfD0gdDQpLCBIdSh1MTEucmV0dXJuLCB0NCksIHM4LmxhbmVzIHw9IHQ0OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGQxNSA9IGQxNS5uZXh0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgbzQgPSB1MTEudGFnID09PSAxMCAmJiB1MTEudHlwZSA9PT0gbjgudHlwZSA/IG51bGwgOiB1MTEuY2hpbGQ7CiAgICAgICAgICAgICAgICAgIGlmIChvNCAhPT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICBvNC5yZXR1cm4gPSB1MTE7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBmb3IgKG80ID0gdTExOyBvNCAhPT0gbnVsbDsgKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAobzQgPT09IG44KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG80ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBpZiAodTExID0gbzQuc2libGluZywgdTExICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHUxMS5yZXR1cm4gPSBvNC5yZXR1cm4sIG80ID0gdTExOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIG80ID0gbzQucmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgdTExID0gbzQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIEcyMyhlNSwgbjgsIGw3LmNoaWxkcmVuLCB0NCksIG44ID0gbjguY2hpbGQ7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbjg7CiAgICAgICAgY2FzZSA5OgogICAgICAgICAgcmV0dXJuIGw3ID0gbjgudHlwZSwgaTQgPSBuOC5wZW5kaW5nUHJvcHMsIHIzID0gaTQuY2hpbGRyZW4sIHluNShuOCwgdDQpLCBsNyA9IHJlMjAobDcsIGk0LnVuc3RhYmxlX29ic2VydmVkQml0cyksIHIzID0gcjMobDcpLCBuOC5mbGFncyB8PSAxLCBHMjMoZTUsIG44LCByMywgdDQpLCBuOC5jaGlsZDsKICAgICAgICBjYXNlIDE0OgogICAgICAgICAgcmV0dXJuIGw3ID0gbjgudHlwZSwgaTQgPSBvZTEyKGw3LCBuOC5wZW5kaW5nUHJvcHMpLCBpNCA9IG9lMTIobDcudHlwZSwgaTQpLCBUbyhlNSwgbjgsIGw3LCBpNCwgcjMsIHQ0KTsKICAgICAgICBjYXNlIDE1OgogICAgICAgICAgcmV0dXJuIG5zMihlNSwgbjgsIG44LnR5cGUsIG44LnBlbmRpbmdQcm9wcywgcjMsIHQ0KTsKICAgICAgICBjYXNlIDE3OgogICAgICAgICAgcmV0dXJuIHIzID0gbjgudHlwZSwgbDcgPSBuOC5wZW5kaW5nUHJvcHMsIGw3ID0gbjguZWxlbWVudFR5cGUgPT09IHIzID8gbDcgOiBvZTEyKHIzLCBsNyksIGU1ICE9PSBudWxsICYmIChlNS5hbHRlcm5hdGUgPSBudWxsLCBuOC5hbHRlcm5hdGUgPSBudWxsLCBuOC5mbGFncyB8PSAyKSwgbjgudGFnID0gMSwgSjE0KHIzKSA/IChlNSA9IHRydWUsIFd0MTMobjgpKSA6IGU1ID0gZmFsc2UsIHluNShuOCwgdDQpLCBRdShuOCwgcjMsIGw3KSwga2wobjgsIHIzLCBsNywgdDQpLCBQbChudWxsLCBuOCwgcjMsIHRydWUsIGU1LCB0NCk7CiAgICAgICAgY2FzZSAxOToKICAgICAgICAgIHJldHVybiBGbyhlNSwgbjgsIHQ0KTsKICAgICAgICBjYXNlIDIzOgogICAgICAgICAgcmV0dXJuIEtyMihlNSwgbjgsIHQ0KTsKICAgICAgICBjYXNlIDI0OgogICAgICAgICAgcmV0dXJuIEtyMihlNSwgbjgsIHQ0KTsKICAgICAgfQogICAgICB0aHJvdyBFcnJvcih2MTUoMTU2LCBuOC50YWcpKTsKICAgIH07CiAgICBmdW5jdGlvbiBTZihlNSwgbjgsIHQ0LCByMykgewogICAgICB0aGlzLnRhZyA9IGU1LCB0aGlzLmtleSA9IHQ0LCB0aGlzLnNpYmxpbmcgPSB0aGlzLmNoaWxkID0gdGhpcy5yZXR1cm4gPSB0aGlzLnN0YXRlTm9kZSA9IHRoaXMudHlwZSA9IHRoaXMuZWxlbWVudFR5cGUgPSBudWxsLCB0aGlzLmluZGV4ID0gMCwgdGhpcy5yZWYgPSBudWxsLCB0aGlzLnBlbmRpbmdQcm9wcyA9IG44LCB0aGlzLmRlcGVuZGVuY2llcyA9IHRoaXMubWVtb2l6ZWRTdGF0ZSA9IHRoaXMudXBkYXRlUXVldWUgPSB0aGlzLm1lbW9pemVkUHJvcHMgPSBudWxsLCB0aGlzLm1vZGUgPSByMywgdGhpcy5mbGFncyA9IDAsIHRoaXMubGFzdEVmZmVjdCA9IHRoaXMuZmlyc3RFZmZlY3QgPSB0aGlzLm5leHRFZmZlY3QgPSBudWxsLCB0aGlzLmNoaWxkTGFuZXMgPSB0aGlzLmxhbmVzID0gMCwgdGhpcy5hbHRlcm5hdGUgPSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gbmUxNShlNSwgbjgsIHQ0LCByMykgewogICAgICByZXR1cm4gbmV3IFNmKGU1LCBuOCwgdDQsIHIzKTsKICAgIH0KICAgIGZ1bmN0aW9uIFBpMihlNSkgewogICAgICByZXR1cm4gZTUgPSBlNS5wcm90b3R5cGUsICEoIWU1IHx8ICFlNS5pc1JlYWN0Q29tcG9uZW50KTsKICAgIH0KICAgIGZ1bmN0aW9uIEVmKGU1KSB7CiAgICAgIGlmICh0eXBlb2YgZTUgPT0gImZ1bmN0aW9uIikKICAgICAgICByZXR1cm4gUGkyKGU1KSA/IDEgOiAwOwogICAgICBpZiAoZTUgIT0gbnVsbCkgewogICAgICAgIGlmIChlNSA9IGU1LiQkdHlwZW9mLCBlNSA9PT0gZ3IzKQogICAgICAgICAgcmV0dXJuIDExOwogICAgICAgIGlmIChlNSA9PT0gd3IzKQogICAgICAgICAgcmV0dXJuIDE0OwogICAgICB9CiAgICAgIHJldHVybiAyOwogICAgfQogICAgZnVuY3Rpb24gVWU5KGU1LCBuOCkgewogICAgICB2YXIgdDQgPSBlNS5hbHRlcm5hdGU7CiAgICAgIHJldHVybiB0NCA9PT0gbnVsbCA/ICh0NCA9IG5lMTUoZTUudGFnLCBuOCwgZTUua2V5LCBlNS5tb2RlKSwgdDQuZWxlbWVudFR5cGUgPSBlNS5lbGVtZW50VHlwZSwgdDQudHlwZSA9IGU1LnR5cGUsIHQ0LnN0YXRlTm9kZSA9IGU1LnN0YXRlTm9kZSwgdDQuYWx0ZXJuYXRlID0gZTUsIGU1LmFsdGVybmF0ZSA9IHQ0KSA6ICh0NC5wZW5kaW5nUHJvcHMgPSBuOCwgdDQudHlwZSA9IGU1LnR5cGUsIHQ0LmZsYWdzID0gMCwgdDQubmV4dEVmZmVjdCA9IG51bGwsIHQ0LmZpcnN0RWZmZWN0ID0gbnVsbCwgdDQubGFzdEVmZmVjdCA9IG51bGwpLCB0NC5jaGlsZExhbmVzID0gZTUuY2hpbGRMYW5lcywgdDQubGFuZXMgPSBlNS5sYW5lcywgdDQuY2hpbGQgPSBlNS5jaGlsZCwgdDQubWVtb2l6ZWRQcm9wcyA9IGU1Lm1lbW9pemVkUHJvcHMsIHQ0Lm1lbW9pemVkU3RhdGUgPSBlNS5tZW1vaXplZFN0YXRlLCB0NC51cGRhdGVRdWV1ZSA9IGU1LnVwZGF0ZVF1ZXVlLCBuOCA9IGU1LmRlcGVuZGVuY2llcywgdDQuZGVwZW5kZW5jaWVzID0gbjggPT09IG51bGwgPyBudWxsIDogeyBsYW5lczogbjgubGFuZXMsIGZpcnN0Q29udGV4dDogbjguZmlyc3RDb250ZXh0IH0sIHQ0LnNpYmxpbmcgPSBlNS5zaWJsaW5nLCB0NC5pbmRleCA9IGU1LmluZGV4LCB0NC5yZWYgPSBlNS5yZWYsIHQ0OwogICAgfQogICAgZnVuY3Rpb24gWHQ1KGU1LCBuOCwgdDQsIHIzLCBsNywgaTQpIHsKICAgICAgdmFyIG80ID0gMjsKICAgICAgaWYgKHIzID0gZTUsIHR5cGVvZiBlNSA9PSAiZnVuY3Rpb24iKQogICAgICAgIFBpMihlNSkgJiYgKG80ID0gMSk7CiAgICAgIGVsc2UgaWYgKHR5cGVvZiBlNSA9PSAic3RyaW5nIikKICAgICAgICBvNCA9IDU7CiAgICAgIGVsc2UKICAgICAgICBlOgogICAgICAgICAgc3dpdGNoIChlNSkgewogICAgICAgICAgICBjYXNlIGtlMTY6CiAgICAgICAgICAgICAgcmV0dXJuIEVuNCh0NC5jaGlsZHJlbiwgbDcsIGk0LCBuOCk7CiAgICAgICAgICAgIGNhc2UgWG86CiAgICAgICAgICAgICAgbzQgPSA4LCBsNyB8PSAxNjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBBbDoKICAgICAgICAgICAgICBvNCA9IDgsIGw3IHw9IDE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgS240OgogICAgICAgICAgICAgIHJldHVybiBlNSA9IG5lMTUoMTIsIHQ0LCBuOCwgbDcgfCA4KSwgZTUuZWxlbWVudFR5cGUgPSBLbjQsIGU1LnR5cGUgPSBLbjQsIGU1LmxhbmVzID0gaTQsIGU1OwogICAgICAgICAgICBjYXNlIEduNToKICAgICAgICAgICAgICByZXR1cm4gZTUgPSBuZTE1KDEzLCB0NCwgbjgsIGw3KSwgZTUudHlwZSA9IEduNSwgZTUuZWxlbWVudFR5cGUgPSBHbjUsIGU1LmxhbmVzID0gaTQsIGU1OwogICAgICAgICAgICBjYXNlIEt0NjoKICAgICAgICAgICAgICByZXR1cm4gZTUgPSBuZTE1KDE5LCB0NCwgbjgsIGw3KSwgZTUuZWxlbWVudFR5cGUgPSBLdDYsIGU1LmxhbmVzID0gaTQsIGU1OwogICAgICAgICAgICBjYXNlIEdsOgogICAgICAgICAgICAgIHJldHVybiBUaTModDQsIGw3LCBpNCwgbjgpOwogICAgICAgICAgICBjYXNlIGVsOgogICAgICAgICAgICAgIHJldHVybiBlNSA9IG5lMTUoMjQsIHQ0LCBuOCwgbDcpLCBlNS5lbGVtZW50VHlwZSA9IGVsLCBlNS5sYW5lcyA9IGk0LCBlNTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpZiAodHlwZW9mIGU1ID09ICJvYmplY3QiICYmIGU1ICE9PSBudWxsKQogICAgICAgICAgICAgICAgc3dpdGNoIChlNS4kJHR5cGVvZikgewogICAgICAgICAgICAgICAgICBjYXNlIFFsOgogICAgICAgICAgICAgICAgICAgIG80ID0gMTA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgY2FzZSAkbDoKICAgICAgICAgICAgICAgICAgICBvNCA9IDk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWsgZTsKICAgICAgICAgICAgICAgICAgY2FzZSBncjM6CiAgICAgICAgICAgICAgICAgICAgbzQgPSAxMTsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgICBjYXNlIHdyMzoKICAgICAgICAgICAgICAgICAgICBvNCA9IDE0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGNhc2UgWWw6CiAgICAgICAgICAgICAgICAgICAgbzQgPSAxNiwgcjMgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgICAgICAgIGNhc2UgWGw6CiAgICAgICAgICAgICAgICAgICAgbzQgPSAyMjsKICAgICAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRocm93IEVycm9yKHYxNSgxMzAsIGU1ID09IG51bGwgPyBlNSA6IHR5cGVvZiBlNSwgIiIpKTsKICAgICAgICAgIH0KICAgICAgcmV0dXJuIG44ID0gbmUxNShvNCwgdDQsIG44LCBsNyksIG44LmVsZW1lbnRUeXBlID0gZTUsIG44LnR5cGUgPSByMywgbjgubGFuZXMgPSBpNCwgbjg7CiAgICB9CiAgICBmdW5jdGlvbiBFbjQoZTUsIG44LCB0NCwgcjMpIHsKICAgICAgcmV0dXJuIGU1ID0gbmUxNSg3LCBlNSwgcjMsIG44KSwgZTUubGFuZXMgPSB0NCwgZTU7CiAgICB9CiAgICBmdW5jdGlvbiBUaTMoZTUsIG44LCB0NCwgcjMpIHsKICAgICAgcmV0dXJuIGU1ID0gbmUxNSgyMywgZTUsIHIzLCBuOCksIGU1LmVsZW1lbnRUeXBlID0gR2wsIGU1LmxhbmVzID0gdDQsIGU1OwogICAgfQogICAgZnVuY3Rpb24gSnIzKGU1LCBuOCwgdDQpIHsKICAgICAgcmV0dXJuIGU1ID0gbmUxNSg2LCBlNSwgbnVsbCwgbjgpLCBlNS5sYW5lcyA9IHQ0LCBlNTsKICAgIH0KICAgIGZ1bmN0aW9uIHFyMyhlNSwgbjgsIHQ0KSB7CiAgICAgIHJldHVybiBuOCA9IG5lMTUoNCwgZTUuY2hpbGRyZW4gIT09IG51bGwgPyBlNS5jaGlsZHJlbiA6IFtdLCBlNS5rZXksIG44KSwgbjgubGFuZXMgPSB0NCwgbjguc3RhdGVOb2RlID0geyBjb250YWluZXJJbmZvOiBlNS5jb250YWluZXJJbmZvLCBwZW5kaW5nQ2hpbGRyZW46IG51bGwsIGltcGxlbWVudGF0aW9uOiBlNS5pbXBsZW1lbnRhdGlvbiB9LCBuODsKICAgIH0KICAgIGZ1bmN0aW9uIGtmKGU1LCBuOCwgdDQpIHsKICAgICAgdGhpcy50YWcgPSBuOCwgdGhpcy5jb250YWluZXJJbmZvID0gZTUsIHRoaXMuZmluaXNoZWRXb3JrID0gdGhpcy5waW5nQ2FjaGUgPSB0aGlzLmN1cnJlbnQgPSB0aGlzLnBlbmRpbmdDaGlsZHJlbiA9IG51bGwsIHRoaXMudGltZW91dEhhbmRsZSA9IC0xLCB0aGlzLnBlbmRpbmdDb250ZXh0ID0gdGhpcy5jb250ZXh0ID0gbnVsbCwgdGhpcy5oeWRyYXRlID0gdDQsIHRoaXMuY2FsbGJhY2tOb2RlID0gbnVsbCwgdGhpcy5jYWxsYmFja1ByaW9yaXR5ID0gMCwgdGhpcy5ldmVudFRpbWVzID0gRnIzKDApLCB0aGlzLmV4cGlyYXRpb25UaW1lcyA9IEZyMygtMSksIHRoaXMuZW50YW5nbGVkTGFuZXMgPSB0aGlzLmZpbmlzaGVkTGFuZXMgPSB0aGlzLm11dGFibGVSZWFkTGFuZXMgPSB0aGlzLmV4cGlyZWRMYW5lcyA9IHRoaXMucGluZ2VkTGFuZXMgPSB0aGlzLnN1c3BlbmRlZExhbmVzID0gdGhpcy5wZW5kaW5nTGFuZXMgPSAwLCB0aGlzLmVudGFuZ2xlbWVudHMgPSBGcjMoMCksIHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiB4ZihlNSwgbjgsIHQ0KSB7CiAgICAgIHZhciByMyA9IDMgPCBhcmd1bWVudHMubGVuZ3RoICYmIGFyZ3VtZW50c1szXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzNdIDogbnVsbDsKICAgICAgcmV0dXJuIHsgJCR0eXBlb2Y6IFdlMTEsIGtleTogcjMgPT0gbnVsbCA/IG51bGwgOiAiIiArIHIzLCBjaGlsZHJlbjogZTUsIGNvbnRhaW5lckluZm86IG44LCBpbXBsZW1lbnRhdGlvbjogdDQgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHZyMyhlNSwgbjgsIHQ0LCByMykgewogICAgICB2YXIgbDcgPSBuOC5jdXJyZW50LCBpNCA9IHEyMCgpLCBvNCA9IE9lMTQobDcpOwogICAgICBlOgogICAgICAgIGlmICh0NCkgewogICAgICAgICAgdDQgPSB0NC5fcmVhY3RJbnRlcm5hbHM7CiAgICAgICAgICBuOiB7CiAgICAgICAgICAgIGlmIChiZTE0KHQ0KSAhPT0gdDQgfHwgdDQudGFnICE9PSAxKQogICAgICAgICAgICAgIHRocm93IEVycm9yKHYxNSgxNzApKTsKICAgICAgICAgICAgdmFyIHUxMSA9IHQ0OwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgc3dpdGNoICh1MTEudGFnKSB7CiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgIHUxMSA9IHUxMS5zdGF0ZU5vZGUuY29udGV4dDsKICAgICAgICAgICAgICAgICAgYnJlYWsgbjsKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgaWYgKEoxNCh1MTEudHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICB1MTEgPSB1MTEuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrIG47CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdTExID0gdTExLnJldHVybjsKICAgICAgICAgICAgfSB3aGlsZSAodTExICE9PSBudWxsKTsKICAgICAgICAgICAgdGhyb3cgRXJyb3IodjE1KDE3MSkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHQ0LnRhZyA9PT0gMSkgewogICAgICAgICAgICB2YXIgczggPSB0NC50eXBlOwogICAgICAgICAgICBpZiAoSjE0KHM4KSkgewogICAgICAgICAgICAgIHQ0ID0gRHUodDQsIHM4LCB1MTEpOwogICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHQ0ID0gdTExOwogICAgICAgIH0gZWxzZQogICAgICAgICAgdDQgPSBGZTEzOwogICAgICByZXR1cm4gbjguY29udGV4dCA9PT0gbnVsbCA/IG44LmNvbnRleHQgPSB0NCA6IG44LnBlbmRpbmdDb250ZXh0ID0gdDQsIG44ID0gTGUxMChpNCwgbzQpLCBuOC5wYXlsb2FkID0geyBlbGVtZW50OiBlNSB9LCByMyA9IHIzID09PSB2b2lkIDAgPyBudWxsIDogcjMsIHIzICE9PSBudWxsICYmIChuOC5jYWxsYmFjayA9IHIzKSwgemU5KGw3LCBuOCksIE1lMTMobDcsIG80LCBpNCksIG80OwogICAgfQogICAgZnVuY3Rpb24gYnIzKGU1KSB7CiAgICAgIGlmIChlNSA9IGU1LmN1cnJlbnQsICFlNS5jaGlsZCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgc3dpdGNoIChlNS5jaGlsZC50YWcpIHsKICAgICAgICBjYXNlIDU6CiAgICAgICAgICByZXR1cm4gZTUuY2hpbGQuc3RhdGVOb2RlOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gZTUuY2hpbGQuc3RhdGVOb2RlOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiAkbyhlNSwgbjgpIHsKICAgICAgaWYgKGU1ID0gZTUubWVtb2l6ZWRTdGF0ZSwgZTUgIT09IG51bGwgJiYgZTUuZGVoeWRyYXRlZCAhPT0gbnVsbCkgewogICAgICAgIHZhciB0NCA9IGU1LnJldHJ5TGFuZTsKICAgICAgICBlNS5yZXRyeUxhbmUgPSB0NCAhPT0gMCAmJiB0NCA8IG44ID8gdDQgOiBuODsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gTGkyKGU1LCBuOCkgewogICAgICAkbyhlNSwgbjgpLCAoZTUgPSBlNS5hbHRlcm5hdGUpICYmICRvKGU1LCBuOCk7CiAgICB9CiAgICBmdW5jdGlvbiBDZigpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiB6aTIoZTUsIG44LCB0NCkgewogICAgICB2YXIgcjMgPSB0NCAhPSBudWxsICYmIHQ0Lmh5ZHJhdGlvbk9wdGlvbnMgIT0gbnVsbCAmJiB0NC5oeWRyYXRpb25PcHRpb25zLm11dGFibGVTb3VyY2VzIHx8IG51bGw7CiAgICAgIGlmICh0NCA9IG5ldyBrZihlNSwgbjgsIHQ0ICE9IG51bGwgJiYgdDQuaHlkcmF0ZSA9PT0gdHJ1ZSksIG44ID0gbmUxNSgzLCBudWxsLCBudWxsLCBuOCA9PT0gMiA/IDcgOiBuOCA9PT0gMSA/IDMgOiAwKSwgdDQuY3VycmVudCA9IG44LCBuOC5zdGF0ZU5vZGUgPSB0NCwgbWkyKG44KSwgZTVbUG4zXSA9IHQ0LmN1cnJlbnQsIEx1KGU1Lm5vZGVUeXBlID09PSA4ID8gZTUucGFyZW50Tm9kZSA6IGU1KSwgcjMpCiAgICAgICAgZm9yIChlNSA9IDA7IGU1IDwgcjMubGVuZ3RoOyBlNSsrKSB7CiAgICAgICAgICBuOCA9IHIzW2U1XTsKICAgICAgICAgIHZhciBsNyA9IG44Ll9nZXRWZXJzaW9uOwogICAgICAgICAgbDcgPSBsNyhuOC5fc291cmNlKSwgdDQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9PSBudWxsID8gdDQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IFtuOCwgbDddIDogdDQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG44LCBsNyk7CiAgICAgICAgfQogICAgICB0aGlzLl9pbnRlcm5hbFJvb3QgPSB0NDsKICAgIH0KICAgIHppMi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oZTUpIHsKICAgICAgdnIzKGU1LCB0aGlzLl9pbnRlcm5hbFJvb3QsIG51bGwsIG51bGwpOwogICAgfTsKICAgIHppMi5wcm90b3R5cGUudW5tb3VudCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgZTUgPSB0aGlzLl9pbnRlcm5hbFJvb3QsIG44ID0gZTUuY29udGFpbmVySW5mbzsKICAgICAgdnIzKG51bGwsIGU1LCBudWxsLCBmdW5jdGlvbigpIHsKICAgICAgICBuOFtQbjNdID0gbnVsbDsKICAgICAgfSk7CiAgICB9OwogICAgZnVuY3Rpb24gQ3QxMShlNSkgewogICAgICByZXR1cm4gISghZTUgfHwgZTUubm9kZVR5cGUgIT09IDEgJiYgZTUubm9kZVR5cGUgIT09IDkgJiYgZTUubm9kZVR5cGUgIT09IDExICYmIChlNS5ub2RlVHlwZSAhPT0gOCB8fCBlNS5ub2RlVmFsdWUgIT09ICIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgIikpOwogICAgfQogICAgZnVuY3Rpb24gX2YoZTUsIG44KSB7CiAgICAgIGlmIChuOCB8fCAobjggPSBlNSA/IGU1Lm5vZGVUeXBlID09PSA5ID8gZTUuZG9jdW1lbnRFbGVtZW50IDogZTUuZmlyc3RDaGlsZCA6IG51bGwsIG44ID0gISghbjggfHwgbjgubm9kZVR5cGUgIT09IDEgfHwgIW44Lmhhc0F0dHJpYnV0ZSgiZGF0YS1yZWFjdHJvb3QiKSkpLCAhbjgpCiAgICAgICAgZm9yICh2YXIgdDQ7IHQ0ID0gZTUubGFzdENoaWxkOyApCiAgICAgICAgICBlNS5yZW1vdmVDaGlsZCh0NCk7CiAgICAgIHJldHVybiBuZXcgemkyKGU1LCAwLCBuOCA/IHsgaHlkcmF0ZTogdHJ1ZSB9IDogdm9pZCAwKTsKICAgIH0KICAgIGZ1bmN0aW9uIHpyMyhlNSwgbjgsIHQ0LCByMywgbDcpIHsKICAgICAgdmFyIGk0ID0gdDQuX3JlYWN0Um9vdENvbnRhaW5lcjsKICAgICAgaWYgKGk0KSB7CiAgICAgICAgdmFyIG80ID0gaTQuX2ludGVybmFsUm9vdDsKICAgICAgICBpZiAodHlwZW9mIGw3ID09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHZhciB1MTEgPSBsNzsKICAgICAgICAgIGw3ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBkMTUgPSBicjMobzQpOwogICAgICAgICAgICB1MTEuY2FsbChkMTUpOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgdnIzKG44LCBvNCwgZTUsIGw3KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaTQgPSB0NC5fcmVhY3RSb290Q29udGFpbmVyID0gX2YodDQsIHIzKSwgbzQgPSBpNC5faW50ZXJuYWxSb290LCB0eXBlb2YgbDcgPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdmFyIHM4ID0gbDc7CiAgICAgICAgICBsNyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgZDE1ID0gYnIzKG80KTsKICAgICAgICAgICAgczguY2FsbChkMTUpOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgY3MoZnVuY3Rpb24oKSB7CiAgICAgICAgICB2cjMobjgsIG80LCBlNSwgbDcpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBicjMobzQpOwogICAgfQogICAgc3UgPSBmdW5jdGlvbihlNSkgewogICAgICBpZiAoZTUudGFnID09PSAxMykgewogICAgICAgIHZhciBuOCA9IHEyMCgpOwogICAgICAgIE1lMTMoZTUsIDQsIG44KSwgTGkyKGU1LCA0KTsKICAgICAgfQogICAgfTsKICAgIGVpMyA9IGZ1bmN0aW9uKGU1KSB7CiAgICAgIGlmIChlNS50YWcgPT09IDEzKSB7CiAgICAgICAgdmFyIG44ID0gcTIwKCk7CiAgICAgICAgTWUxMyhlNSwgNjcxMDg4NjQsIG44KSwgTGkyKGU1LCA2NzEwODg2NCk7CiAgICAgIH0KICAgIH07CiAgICBhdSA9IGZ1bmN0aW9uKGU1KSB7CiAgICAgIGlmIChlNS50YWcgPT09IDEzKSB7CiAgICAgICAgdmFyIG44ID0gcTIwKCksIHQ0ID0gT2UxNChlNSk7CiAgICAgICAgTWUxMyhlNSwgdDQsIG44KSwgTGkyKGU1LCB0NCk7CiAgICAgIH0KICAgIH07CiAgICBmdSA9IGZ1bmN0aW9uKGU1LCBuOCkgewogICAgICByZXR1cm4gbjgoKTsKICAgIH07CiAgICBmbCA9IGZ1bmN0aW9uKGU1LCBuOCwgdDQpIHsKICAgICAgc3dpdGNoIChuOCkgewogICAgICAgIGNhc2UgImlucHV0IjoKICAgICAgICAgIGlmICh0bChlNSwgdDQpLCBuOCA9IHQ0Lm5hbWUsIHQ0LnR5cGUgPT09ICJyYWRpbyIgJiYgbjggIT0gbnVsbCkgewogICAgICAgICAgICBmb3IgKHQ0ID0gZTU7IHQ0LnBhcmVudE5vZGU7ICkKICAgICAgICAgICAgICB0NCA9IHQ0LnBhcmVudE5vZGU7CiAgICAgICAgICAgIGZvciAodDQgPSB0NC5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSIgKyBKU09OLnN0cmluZ2lmeSgiIiArIG44KSArICddW3R5cGU9InJhZGlvIl0nKSwgbjggPSAwOyBuOCA8IHQ0Lmxlbmd0aDsgbjgrKykgewogICAgICAgICAgICAgIHZhciByMyA9IHQ0W244XTsKICAgICAgICAgICAgICBpZiAocjMgIT09IGU1ICYmIHIzLmZvcm0gPT09IGU1LmZvcm0pIHsKICAgICAgICAgICAgICAgIHZhciBsNyA9IF9yMihyMyk7CiAgICAgICAgICAgICAgICBpZiAoIWw3KQogICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcih2MTUoOTApKTsKICAgICAgICAgICAgICAgIEdvKHIzKSwgdGwocjMsIGw3KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInRleHRhcmVhIjoKICAgICAgICAgIEpvKGU1LCB0NCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzZWxlY3QiOgogICAgICAgICAgbjggPSB0NC52YWx1ZSwgbjggIT0gbnVsbCAmJiBwbjMoZTUsICEhdDQubXVsdGlwbGUsIG44LCBmYWxzZSk7CiAgICAgIH0KICAgIH07CiAgICBKbCA9IGZzMjsKICAgIGx1ID0gZnVuY3Rpb24oZTUsIG44LCB0NCwgcjMsIGw3KSB7CiAgICAgIHZhciBpNCA9IHgyMTsKICAgICAgeDIxIHw9IDQ7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIEdlOCg5OCwgZTUuYmluZChudWxsLCBuOCwgdDQsIHIzLCBsNykpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHgyMSA9IGk0LCB4MjEgPT09IDAgJiYgKHpuNCgpLCBwZTEzKCkpOwogICAgICB9CiAgICB9OwogICAgcWwgPSBmdW5jdGlvbigpIHsKICAgICAgKHgyMSAmIDQ5KSA9PT0gMCAmJiAoY2YoKSwgQmUxMigpKTsKICAgIH07CiAgICBpdSA9IGZ1bmN0aW9uKGU1LCBuOCkgewogICAgICB2YXIgdDQgPSB4MjE7CiAgICAgIHgyMSB8PSAyOwogICAgICB0cnkgewogICAgICAgIHJldHVybiBlNShuOCk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgeDIxID0gdDQsIHgyMSA9PT0gMCAmJiAoem40KCksIHBlMTMoKSk7CiAgICAgIH0KICAgIH07CiAgICBmdW5jdGlvbiBnczIoZTUsIG44KSB7CiAgICAgIHZhciB0NCA9IDIgPCBhcmd1bWVudHMubGVuZ3RoICYmIGFyZ3VtZW50c1syXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzJdIDogbnVsbDsKICAgICAgaWYgKCFDdDExKG44KSkKICAgICAgICB0aHJvdyBFcnJvcih2MTUoMjAwKSk7CiAgICAgIHJldHVybiB4ZihlNSwgbjgsIG51bGwsIHQ0KTsKICAgIH0KICAgIHZhciBOZiA9IHsgRXZlbnRzOiBbRXQxMCwgYW40LCBfcjIsIHR1LCBydSwgQmUxMiwgeyBjdXJyZW50OiBmYWxzZSB9XSB9LCBIbjQgPSB7IGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBRZTYsIGJ1bmRsZVR5cGU6IDAsIHZlcnNpb246ICIxNy4wLjIiLCByZW5kZXJlclBhY2thZ2VOYW1lOiAicmVhY3QtZG9tIiB9LCBQZiA9IHsgYnVuZGxlVHlwZTogSG40LmJ1bmRsZVR5cGUsIHZlcnNpb246IEhuNC52ZXJzaW9uLCByZW5kZXJlclBhY2thZ2VOYW1lOiBIbjQucmVuZGVyZXJQYWNrYWdlTmFtZSwgcmVuZGVyZXJDb25maWc6IEhuNC5yZW5kZXJlckNvbmZpZywgb3ZlcnJpZGVIb29rU3RhdGU6IG51bGwsIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDogbnVsbCwgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOiBudWxsLCBvdmVycmlkZVByb3BzOiBudWxsLCBvdmVycmlkZVByb3BzRGVsZXRlUGF0aDogbnVsbCwgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6IG51bGwsIHNldFN1c3BlbnNlSGFuZGxlcjogbnVsbCwgc2NoZWR1bGVVcGRhdGU6IG51bGwsIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBxZTguUmVhY3RDdXJyZW50RGlzcGF0Y2hlciwgZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHJldHVybiBlNSA9IHV1KGU1KSwgZTUgPT09IG51bGwgPyBudWxsIDogZTUuc3RhdGVOb2RlOwogICAgfSwgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IEhuNC5maW5kRmliZXJCeUhvc3RJbnN0YW5jZSB8fCBDZiwgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOiBudWxsLCBzY2hlZHVsZVJlZnJlc2g6IG51bGwsIHNjaGVkdWxlUm9vdDogbnVsbCwgc2V0UmVmcmVzaEhhbmRsZXI6IG51bGwsIGdldEN1cnJlbnRGaWJlcjogbnVsbCB9OwogICAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPCAidSIgJiYgKFduNCA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXywgIVduNC5pc0Rpc2FibGVkICYmIFduNC5zdXBwb3J0c0ZpYmVyKSkKICAgICAgdHJ5IHsKICAgICAgICBmaTIgPSBXbjQuaW5qZWN0KFBmKSwgWGU1ID0gV240OwogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgdmFyIFduNDsKICAgIGllMTMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBOZjsKICAgIGllMTMuY3JlYXRlUG9ydGFsID0gZ3MyOwogICAgaWUxMy5maW5kRE9NTm9kZSA9IGZ1bmN0aW9uKGU1KSB7CiAgICAgIGlmIChlNSA9PSBudWxsKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBpZiAoZTUubm9kZVR5cGUgPT09IDEpCiAgICAgICAgcmV0dXJuIGU1OwogICAgICB2YXIgbjggPSBlNS5fcmVhY3RJbnRlcm5hbHM7CiAgICAgIGlmIChuOCA9PT0gdm9pZCAwKQogICAgICAgIHRocm93IHR5cGVvZiBlNS5yZW5kZXIgPT0gImZ1bmN0aW9uIiA/IEVycm9yKHYxNSgxODgpKSA6IEVycm9yKHYxNSgyNjgsIE9iamVjdC5rZXlzKGU1KSkpOwogICAgICByZXR1cm4gZTUgPSB1dShuOCksIGU1ID0gZTUgPT09IG51bGwgPyBudWxsIDogZTUuc3RhdGVOb2RlLCBlNTsKICAgIH07CiAgICBpZTEzLmZsdXNoU3luYyA9IGZ1bmN0aW9uKGU1LCBuOCkgewogICAgICB2YXIgdDQgPSB4MjE7CiAgICAgIGlmICgodDQgJiA0OCkgIT09IDApCiAgICAgICAgcmV0dXJuIGU1KG44KTsKICAgICAgeDIxIHw9IDE7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKGU1KQogICAgICAgICAgcmV0dXJuIEdlOCg5OSwgZTUuYmluZChudWxsLCBuOCkpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHgyMSA9IHQ0LCBwZTEzKCk7CiAgICAgIH0KICAgIH07CiAgICBpZTEzLmh5ZHJhdGUgPSBmdW5jdGlvbihlNSwgbjgsIHQ0KSB7CiAgICAgIGlmICghQ3QxMShuOCkpCiAgICAgICAgdGhyb3cgRXJyb3IodjE1KDIwMCkpOwogICAgICByZXR1cm4genIzKG51bGwsIGU1LCBuOCwgdHJ1ZSwgdDQpOwogICAgfTsKICAgIGllMTMucmVuZGVyID0gZnVuY3Rpb24oZTUsIG44LCB0NCkgewogICAgICBpZiAoIUN0MTEobjgpKQogICAgICAgIHRocm93IEVycm9yKHYxNSgyMDApKTsKICAgICAgcmV0dXJuIHpyMyhudWxsLCBlNSwgbjgsIGZhbHNlLCB0NCk7CiAgICB9OwogICAgaWUxMy51bm1vdW50Q29tcG9uZW50QXROb2RlID0gZnVuY3Rpb24oZTUpIHsKICAgICAgaWYgKCFDdDExKGU1KSkKICAgICAgICB0aHJvdyBFcnJvcih2MTUoNDApKTsKICAgICAgcmV0dXJuIGU1Ll9yZWFjdFJvb3RDb250YWluZXIgPyAoY3MoZnVuY3Rpb24oKSB7CiAgICAgICAgenIzKG51bGwsIG51bGwsIGU1LCBmYWxzZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBlNS5fcmVhY3RSb290Q29udGFpbmVyID0gbnVsbCwgZTVbUG4zXSA9IG51bGw7CiAgICAgICAgfSk7CiAgICAgIH0pLCB0cnVlKSA6IGZhbHNlOwogICAgfTsKICAgIGllMTMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBmczI7CiAgICBpZTEzLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCA9IGZ1bmN0aW9uKGU1LCBuOCkgewogICAgICByZXR1cm4gZ3MyKGU1LCBuOCwgMiA8IGFyZ3VtZW50cy5sZW5ndGggJiYgYXJndW1lbnRzWzJdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMl0gOiBudWxsKTsKICAgIH07CiAgICBpZTEzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyID0gZnVuY3Rpb24oZTUsIG44LCB0NCwgcjMpIHsKICAgICAgaWYgKCFDdDExKHQ0KSkKICAgICAgICB0aHJvdyBFcnJvcih2MTUoMjAwKSk7CiAgICAgIGlmIChlNSA9PSBudWxsIHx8IGU1Ll9yZWFjdEludGVybmFscyA9PT0gdm9pZCAwKQogICAgICAgIHRocm93IEVycm9yKHYxNSgzOCkpOwogICAgICByZXR1cm4genIzKGU1LCBuOCwgdDQsIGZhbHNlLCByMyk7CiAgICB9OwogICAgaWUxMy52ZXJzaW9uID0gIjE3LjAuMiI7CiAgfSk7CiAgdmFyIGtzID0gTWkoKE9mLCBFczIpID0+IHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGZ1bmN0aW9uIFNzMigpIHsKICAgICAgaWYgKCEodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA+ICJ1IiB8fCB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9ICJmdW5jdGlvbiIpKQogICAgICAgIHRyeSB7CiAgICAgICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoU3MyKTsKICAgICAgICB9IGNhdGNoIChlNSkgewogICAgICAgICAgY29uc29sZS5lcnJvcihlNSk7CiAgICAgICAgfQogICAgfQogICAgU3MyKCksIEVzMi5leHBvcnRzID0gd3MoKTsKICB9KTsKICB2YXIgQ3MgPSBNcyhrcygpKTsKICB2YXIgeyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDogTWYsIGNyZWF0ZVBvcnRhbDogUmYsIGZpbmRET01Ob2RlOiBEZiwgZmx1c2hTeW5jOiBJZiwgaHlkcmF0ZTogRmYsIHJlbmRlcjogamYsIHVubW91bnRDb21wb25lbnRBdE5vZGU6IFVmLCB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczogVmYsIHVuc3RhYmxlX2NyZWF0ZVBvcnRhbDogQmYsIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOiBIZiwgdmVyc2lvbjogV2YgfSA9IENzOwogIHZhciB7IGRlZmF1bHQ6IHhzLCAuLi5UZiB9ID0gQ3M7CiAgdmFyIEFmID0geHMgIT09IHZvaWQgMCA/IHhzIDogVGY7CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL3N0YXRlQDYuMS4yL2Rlbm8vc3RhdGUuanMKICB2YXIgdiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgfQogICAgbGluZUF0KGU1KSB7CiAgICAgIGlmIChlNSA8IDAgfHwgZTUgPiB0aGlzLmxlbmd0aCkKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBwb3NpdGlvbiAke2U1fSBpbiBkb2N1bWVudCBvZiBsZW5ndGggJHt0aGlzLmxlbmd0aH1gKTsKICAgICAgcmV0dXJuIHRoaXMubGluZUlubmVyKGU1LCBmYWxzZSwgMSwgMCk7CiAgICB9CiAgICBsaW5lKGU1KSB7CiAgICAgIGlmIChlNSA8IDEgfHwgZTUgPiB0aGlzLmxpbmVzKQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIGxpbmUgbnVtYmVyICR7ZTV9IGluICR7dGhpcy5saW5lc30tbGluZSBkb2N1bWVudGApOwogICAgICByZXR1cm4gdGhpcy5saW5lSW5uZXIoZTUsIHRydWUsIDEsIDApOwogICAgfQogICAgcmVwbGFjZShlNSwgdDQsIG44KSB7CiAgICAgIGxldCBpNCA9IFtdOwogICAgICByZXR1cm4gdGhpcy5kZWNvbXBvc2UoMCwgZTUsIGk0LCAyKSwgbjgubGVuZ3RoICYmIG44LmRlY29tcG9zZSgwLCBuOC5sZW5ndGgsIGk0LCAzKSwgdGhpcy5kZWNvbXBvc2UodDQsIHRoaXMubGVuZ3RoLCBpNCwgMSksIGIyLmZyb20oaTQsIHRoaXMubGVuZ3RoIC0gKHQ0IC0gZTUpICsgbjgubGVuZ3RoKTsKICAgIH0KICAgIGFwcGVuZChlNSkgewogICAgICByZXR1cm4gdGhpcy5yZXBsYWNlKHRoaXMubGVuZ3RoLCB0aGlzLmxlbmd0aCwgZTUpOwogICAgfQogICAgc2xpY2UoZTUsIHQ0ID0gdGhpcy5sZW5ndGgpIHsKICAgICAgbGV0IG44ID0gW107CiAgICAgIHJldHVybiB0aGlzLmRlY29tcG9zZShlNSwgdDQsIG44LCAwKSwgYjIuZnJvbShuOCwgdDQgLSBlNSk7CiAgICB9CiAgICBlcShlNSkgewogICAgICBpZiAoZTUgPT0gdGhpcykKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGU1Lmxlbmd0aCAhPSB0aGlzLmxlbmd0aCB8fCBlNS5saW5lcyAhPSB0aGlzLmxpbmVzKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgbGV0IHQ0ID0gdGhpcy5zY2FuSWRlbnRpY2FsKGU1LCAxKSwgbjggPSB0aGlzLmxlbmd0aCAtIHRoaXMuc2NhbklkZW50aWNhbChlNSwgLTEpLCBpNCA9IG5ldyBWMyh0aGlzKSwgczggPSBuZXcgVjMoZTUpOwogICAgICBmb3IgKGxldCByMyA9IHQ0LCBoMTAgPSB0NDsgOyApIHsKICAgICAgICBpZiAoaTQubmV4dChyMyksIHM4Lm5leHQocjMpLCByMyA9IDAsIGk0LmxpbmVCcmVhayAhPSBzOC5saW5lQnJlYWsgfHwgaTQuZG9uZSAhPSBzOC5kb25lIHx8IGk0LnZhbHVlICE9IHM4LnZhbHVlKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChoMTAgKz0gaTQudmFsdWUubGVuZ3RoLCBpNC5kb25lIHx8IGgxMCA+PSBuOCkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBpdGVyKGU1ID0gMSkgewogICAgICByZXR1cm4gbmV3IFYzKHRoaXMsIGU1KTsKICAgIH0KICAgIGl0ZXJSYW5nZShlNSwgdDQgPSB0aGlzLmxlbmd0aCkgewogICAgICByZXR1cm4gbmV3IHRlMih0aGlzLCBlNSwgdDQpOwogICAgfQogICAgaXRlckxpbmVzKGU1LCB0NCkgewogICAgICBsZXQgbjg7CiAgICAgIGlmIChlNSA9PSBudWxsKQogICAgICAgIG44ID0gdGhpcy5pdGVyKCk7CiAgICAgIGVsc2UgewogICAgICAgIHQ0ID09IG51bGwgJiYgKHQ0ID0gdGhpcy5saW5lcyArIDEpOwogICAgICAgIGxldCBpNCA9IHRoaXMubGluZShlNSkuZnJvbTsKICAgICAgICBuOCA9IHRoaXMuaXRlclJhbmdlKGk0LCBNYXRoLm1heChpNCwgdDQgPT0gdGhpcy5saW5lcyArIDEgPyB0aGlzLmxlbmd0aCA6IHQ0IDw9IDEgPyAwIDogdGhpcy5saW5lKHQ0IC0gMSkudG8pKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IG5lMihuOCk7CiAgICB9CiAgICB0b1N0cmluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuc2xpY2VTdHJpbmcoMCk7CiAgICB9CiAgICB0b0pTT04oKSB7CiAgICAgIGxldCBlNSA9IFtdOwogICAgICByZXR1cm4gdGhpcy5mbGF0dGVuKGU1KSwgZTU7CiAgICB9CiAgICBzdGF0aWMgb2YoZTUpIHsKICAgICAgaWYgKGU1Lmxlbmd0aCA9PSAwKQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJBIGRvY3VtZW50IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgbGluZSIpOwogICAgICByZXR1cm4gZTUubGVuZ3RoID09IDEgJiYgIWU1WzBdID8gdi5lbXB0eSA6IGU1Lmxlbmd0aCA8PSAzMiA/IG5ldyBtKGU1KSA6IGIyLmZyb20obS5zcGxpdChlNSwgW10pKTsKICAgIH0KICB9OwogIHZhciBtID0gY2xhc3MgZXh0ZW5kcyB2IHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCA9IGplMihlNSkpIHsKICAgICAgc3VwZXIoKSwgdGhpcy50ZXh0ID0gZTUsIHRoaXMubGVuZ3RoID0gdDQ7CiAgICB9CiAgICBnZXQgbGluZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLnRleHQubGVuZ3RoOwogICAgfQogICAgZ2V0IGNoaWxkcmVuKCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxpbmVJbm5lcihlNSwgdDQsIG44LCBpNCkgewogICAgICBmb3IgKGxldCBzOCA9IDA7IDsgczgrKykgewogICAgICAgIGxldCByMyA9IHRoaXMudGV4dFtzOF0sIGgxMCA9IGk0ICsgcjMubGVuZ3RoOwogICAgICAgIGlmICgodDQgPyBuOCA6IGgxMCkgPj0gZTUpCiAgICAgICAgICByZXR1cm4gbmV3IGZlMihpNCwgaDEwLCBuOCwgcjMpOwogICAgICAgIGk0ID0gaDEwICsgMSwgbjgrKzsKICAgICAgfQogICAgfQogICAgZGVjb21wb3NlKGU1LCB0NCwgbjgsIGk0KSB7CiAgICAgIGxldCBzOCA9IGU1IDw9IDAgJiYgdDQgPj0gdGhpcy5sZW5ndGggPyB0aGlzIDogbmV3IG0oSWUzKHRoaXMudGV4dCwgZTUsIHQ0KSwgTWF0aC5taW4odDQsIHRoaXMubGVuZ3RoKSAtIE1hdGgubWF4KDAsIGU1KSk7CiAgICAgIGlmIChpNCAmIDEpIHsKICAgICAgICBsZXQgcjMgPSBuOC5wb3AoKSwgaDEwID0gZWUyKHM4LnRleHQsIHIzLnRleHQuc2xpY2UoKSwgMCwgczgubGVuZ3RoKTsKICAgICAgICBpZiAoaDEwLmxlbmd0aCA8PSAzMikKICAgICAgICAgIG44LnB1c2gobmV3IG0oaDEwLCByMy5sZW5ndGggKyBzOC5sZW5ndGgpKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGxldCBvNCA9IGgxMC5sZW5ndGggPj4gMTsKICAgICAgICAgIG44LnB1c2gobmV3IG0oaDEwLnNsaWNlKDAsIG80KSksIG5ldyBtKGgxMC5zbGljZShvNCkpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZQogICAgICAgIG44LnB1c2goczgpOwogICAgfQogICAgcmVwbGFjZShlNSwgdDQsIG44KSB7CiAgICAgIGlmICghKG44IGluc3RhbmNlb2YgbSkpCiAgICAgICAgcmV0dXJuIHN1cGVyLnJlcGxhY2UoZTUsIHQ0LCBuOCk7CiAgICAgIGxldCBpNCA9IGVlMih0aGlzLnRleHQsIGVlMihuOC50ZXh0LCBJZTModGhpcy50ZXh0LCAwLCBlNSkpLCB0NCksIHM4ID0gdGhpcy5sZW5ndGggKyBuOC5sZW5ndGggLSAodDQgLSBlNSk7CiAgICAgIHJldHVybiBpNC5sZW5ndGggPD0gMzIgPyBuZXcgbShpNCwgczgpIDogYjIuZnJvbShtLnNwbGl0KGk0LCBbXSksIHM4KTsKICAgIH0KICAgIHNsaWNlU3RyaW5nKGU1LCB0NCA9IHRoaXMubGVuZ3RoLCBuOCA9IGAKYCkgewogICAgICBsZXQgaTQgPSAiIjsKICAgICAgZm9yIChsZXQgczggPSAwLCByMyA9IDA7IHM4IDw9IHQ0ICYmIHIzIDwgdGhpcy50ZXh0Lmxlbmd0aDsgcjMrKykgewogICAgICAgIGxldCBoMTAgPSB0aGlzLnRleHRbcjNdLCBvNCA9IHM4ICsgaDEwLmxlbmd0aDsKICAgICAgICBzOCA+IGU1ICYmIHIzICYmIChpNCArPSBuOCksIGU1IDwgbzQgJiYgdDQgPiBzOCAmJiAoaTQgKz0gaDEwLnNsaWNlKE1hdGgubWF4KDAsIGU1IC0gczgpLCB0NCAtIHM4KSksIHM4ID0gbzQgKyAxOwogICAgICB9CiAgICAgIHJldHVybiBpNDsKICAgIH0KICAgIGZsYXR0ZW4oZTUpIHsKICAgICAgZm9yIChsZXQgdDQgb2YgdGhpcy50ZXh0KQogICAgICAgIGU1LnB1c2godDQpOwogICAgfQogICAgc2NhbklkZW50aWNhbCgpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBzdGF0aWMgc3BsaXQoZTUsIHQ0KSB7CiAgICAgIGxldCBuOCA9IFtdLCBpNCA9IC0xOwogICAgICBmb3IgKGxldCBzOCBvZiBlNSkKICAgICAgICBuOC5wdXNoKHM4KSwgaTQgKz0gczgubGVuZ3RoICsgMSwgbjgubGVuZ3RoID09IDMyICYmICh0NC5wdXNoKG5ldyBtKG44LCBpNCkpLCBuOCA9IFtdLCBpNCA9IC0xKTsKICAgICAgcmV0dXJuIGk0ID4gLTEgJiYgdDQucHVzaChuZXcgbShuOCwgaTQpKSwgdDQ7CiAgICB9CiAgfTsKICB2YXIgYjIgPSBjbGFzcyBleHRlbmRzIHYgewogICAgY29uc3RydWN0b3IoZTUsIHQ0KSB7CiAgICAgIHN1cGVyKCksIHRoaXMuY2hpbGRyZW4gPSBlNSwgdGhpcy5sZW5ndGggPSB0NCwgdGhpcy5saW5lcyA9IDA7CiAgICAgIGZvciAobGV0IG44IG9mIGU1KQogICAgICAgIHRoaXMubGluZXMgKz0gbjgubGluZXM7CiAgICB9CiAgICBsaW5lSW5uZXIoZTUsIHQ0LCBuOCwgaTQpIHsKICAgICAgZm9yIChsZXQgczggPSAwOyA7IHM4KyspIHsKICAgICAgICBsZXQgcjMgPSB0aGlzLmNoaWxkcmVuW3M4XSwgaDEwID0gaTQgKyByMy5sZW5ndGgsIG80ID0gbjggKyByMy5saW5lcyAtIDE7CiAgICAgICAgaWYgKCh0NCA/IG80IDogaDEwKSA+PSBlNSkKICAgICAgICAgIHJldHVybiByMy5saW5lSW5uZXIoZTUsIHQ0LCBuOCwgaTQpOwogICAgICAgIGk0ID0gaDEwICsgMSwgbjggPSBvNCArIDE7CiAgICAgIH0KICAgIH0KICAgIGRlY29tcG9zZShlNSwgdDQsIG44LCBpNCkgewogICAgICBmb3IgKGxldCBzOCA9IDAsIHIzID0gMDsgcjMgPD0gdDQgJiYgczggPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgczgrKykgewogICAgICAgIGxldCBoMTAgPSB0aGlzLmNoaWxkcmVuW3M4XSwgbzQgPSByMyArIGgxMC5sZW5ndGg7CiAgICAgICAgaWYgKGU1IDw9IG80ICYmIHQ0ID49IHIzKSB7CiAgICAgICAgICBsZXQgYTQgPSBpNCAmICgocjMgPD0gZTUgPyAxIDogMCkgfCAobzQgPj0gdDQgPyAyIDogMCkpOwogICAgICAgICAgcjMgPj0gZTUgJiYgbzQgPD0gdDQgJiYgIWE0ID8gbjgucHVzaChoMTApIDogaDEwLmRlY29tcG9zZShlNSAtIHIzLCB0NCAtIHIzLCBuOCwgYTQpOwogICAgICAgIH0KICAgICAgICByMyA9IG80ICsgMTsKICAgICAgfQogICAgfQogICAgcmVwbGFjZShlNSwgdDQsIG44KSB7CiAgICAgIGlmIChuOC5saW5lcyA8IHRoaXMubGluZXMpCiAgICAgICAgZm9yIChsZXQgaTQgPSAwLCBzOCA9IDA7IGk0IDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGk0KyspIHsKICAgICAgICAgIGxldCByMyA9IHRoaXMuY2hpbGRyZW5baTRdLCBoMTAgPSBzOCArIHIzLmxlbmd0aDsKICAgICAgICAgIGlmIChlNSA+PSBzOCAmJiB0NCA8PSBoMTApIHsKICAgICAgICAgICAgbGV0IG80ID0gcjMucmVwbGFjZShlNSAtIHM4LCB0NCAtIHM4LCBuOCksIGE0ID0gdGhpcy5saW5lcyAtIHIzLmxpbmVzICsgbzQubGluZXM7CiAgICAgICAgICAgIGlmIChvNC5saW5lcyA8IGE0ID4+IDUgLSAxICYmIG80LmxpbmVzID4gYTQgPj4gNSArIDEpIHsKICAgICAgICAgICAgICBsZXQgZjExID0gdGhpcy5jaGlsZHJlbi5zbGljZSgpOwogICAgICAgICAgICAgIHJldHVybiBmMTFbaTRdID0gbzQsIG5ldyBiMihmMTEsIHRoaXMubGVuZ3RoIC0gKHQ0IC0gZTUpICsgbjgubGVuZ3RoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gc3VwZXIucmVwbGFjZShzOCwgaDEwLCBvNCk7CiAgICAgICAgICB9CiAgICAgICAgICBzOCA9IGgxMCArIDE7CiAgICAgICAgfQogICAgICByZXR1cm4gc3VwZXIucmVwbGFjZShlNSwgdDQsIG44KTsKICAgIH0KICAgIHNsaWNlU3RyaW5nKGU1LCB0NCA9IHRoaXMubGVuZ3RoLCBuOCA9IGAKYCkgewogICAgICBsZXQgaTQgPSAiIjsKICAgICAgZm9yIChsZXQgczggPSAwLCByMyA9IDA7IHM4IDwgdGhpcy5jaGlsZHJlbi5sZW5ndGggJiYgcjMgPD0gdDQ7IHM4KyspIHsKICAgICAgICBsZXQgaDEwID0gdGhpcy5jaGlsZHJlbltzOF0sIG80ID0gcjMgKyBoMTAubGVuZ3RoOwogICAgICAgIHIzID4gZTUgJiYgczggJiYgKGk0ICs9IG44KSwgZTUgPCBvNCAmJiB0NCA+IHIzICYmIChpNCArPSBoMTAuc2xpY2VTdHJpbmcoZTUgLSByMywgdDQgLSByMywgbjgpKSwgcjMgPSBvNCArIDE7CiAgICAgIH0KICAgICAgcmV0dXJuIGk0OwogICAgfQogICAgZmxhdHRlbihlNSkgewogICAgICBmb3IgKGxldCB0NCBvZiB0aGlzLmNoaWxkcmVuKQogICAgICAgIHQ0LmZsYXR0ZW4oZTUpOwogICAgfQogICAgc2NhbklkZW50aWNhbChlNSwgdDQpIHsKICAgICAgaWYgKCEoZTUgaW5zdGFuY2VvZiBiMikpCiAgICAgICAgcmV0dXJuIDA7CiAgICAgIGxldCBuOCA9IDAsIFtpNCwgczgsIHIzLCBoMTBdID0gdDQgPiAwID8gWzAsIDAsIHRoaXMuY2hpbGRyZW4ubGVuZ3RoLCBlNS5jaGlsZHJlbi5sZW5ndGhdIDogW3RoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMSwgZTUuY2hpbGRyZW4ubGVuZ3RoIC0gMSwgLTEsIC0xXTsKICAgICAgZm9yICg7IDsgaTQgKz0gdDQsIHM4ICs9IHQ0KSB7CiAgICAgICAgaWYgKGk0ID09IHIzIHx8IHM4ID09IGgxMCkKICAgICAgICAgIHJldHVybiBuODsKICAgICAgICBsZXQgbzQgPSB0aGlzLmNoaWxkcmVuW2k0XSwgYTQgPSBlNS5jaGlsZHJlbltzOF07CiAgICAgICAgaWYgKG80ICE9IGE0KQogICAgICAgICAgcmV0dXJuIG44ICsgbzQuc2NhbklkZW50aWNhbChhNCwgdDQpOwogICAgICAgIG44ICs9IG80Lmxlbmd0aCArIDE7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyBmcm9tKGU1LCB0NCA9IGU1LnJlZHVjZSgobjgsIGk0KSA9PiBuOCArIGk0Lmxlbmd0aCArIDEsIC0xKSkgewogICAgICBsZXQgbjggPSAwOwogICAgICBmb3IgKGxldCBjMTcgb2YgZTUpCiAgICAgICAgbjggKz0gYzE3LmxpbmVzOwogICAgICBpZiAobjggPCAzMikgewogICAgICAgIGxldCBjMTcgPSBbXTsKICAgICAgICBmb3IgKGxldCBwMTggb2YgZTUpCiAgICAgICAgICBwMTguZmxhdHRlbihjMTcpOwogICAgICAgIHJldHVybiBuZXcgbShjMTcsIHQ0KTsKICAgICAgfQogICAgICBsZXQgaTQgPSBNYXRoLm1heCgzMiwgbjggPj4gNSksIHM4ID0gaTQgPDwgMSwgcjMgPSBpNCA+PiAxLCBoMTAgPSBbXSwgbzQgPSAwLCBhNCA9IC0xLCBmMTEgPSBbXTsKICAgICAgZnVuY3Rpb24gdTExKGMxNykgewogICAgICAgIGxldCBwMTg7CiAgICAgICAgaWYgKGMxNy5saW5lcyA+IHM4ICYmIGMxNyBpbnN0YW5jZW9mIGIyKQogICAgICAgICAgZm9yIChsZXQgRTE1IG9mIGMxNy5jaGlsZHJlbikKICAgICAgICAgICAgdTExKEUxNSk7CiAgICAgICAgZWxzZQogICAgICAgICAgYzE3LmxpbmVzID4gcjMgJiYgKG80ID4gcjMgfHwgIW80KSA/IChkMTUoKSwgaDEwLnB1c2goYzE3KSkgOiBjMTcgaW5zdGFuY2VvZiBtICYmIG80ICYmIChwMTggPSBmMTFbZjExLmxlbmd0aCAtIDFdKSBpbnN0YW5jZW9mIG0gJiYgYzE3LmxpbmVzICsgcDE4LmxpbmVzIDw9IDMyID8gKG80ICs9IGMxNy5saW5lcywgYTQgKz0gYzE3Lmxlbmd0aCArIDEsIGYxMVtmMTEubGVuZ3RoIC0gMV0gPSBuZXcgbShwMTgudGV4dC5jb25jYXQoYzE3LnRleHQpLCBwMTgubGVuZ3RoICsgMSArIGMxNy5sZW5ndGgpKSA6IChvNCArIGMxNy5saW5lcyA+IGk0ICYmIGQxNSgpLCBvNCArPSBjMTcubGluZXMsIGE0ICs9IGMxNy5sZW5ndGggKyAxLCBmMTEucHVzaChjMTcpKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkMTUoKSB7CiAgICAgICAgbzQgIT0gMCAmJiAoaDEwLnB1c2goZjExLmxlbmd0aCA9PSAxID8gZjExWzBdIDogYjIuZnJvbShmMTEsIGE0KSksIGE0ID0gLTEsIG80ID0gZjExLmxlbmd0aCA9IDApOwogICAgICB9CiAgICAgIGZvciAobGV0IGMxNyBvZiBlNSkKICAgICAgICB1MTEoYzE3KTsKICAgICAgcmV0dXJuIGQxNSgpLCBoMTAubGVuZ3RoID09IDEgPyBoMTBbMF0gOiBuZXcgYjIoaDEwLCB0NCk7CiAgICB9CiAgfTsKICB2LmVtcHR5ID0gbmV3IG0oWyIiXSwgMCk7CiAgZnVuY3Rpb24gamUyKGw3KSB7CiAgICBsZXQgZTUgPSAtMTsKICAgIGZvciAobGV0IHQ0IG9mIGw3KQogICAgICBlNSArPSB0NC5sZW5ndGggKyAxOwogICAgcmV0dXJuIGU1OwogIH0KICBmdW5jdGlvbiBlZTIobDcsIGU1LCB0NCA9IDAsIG44ID0gMWU5KSB7CiAgICBmb3IgKGxldCBpNCA9IDAsIHM4ID0gMCwgcjMgPSB0cnVlOyBzOCA8IGw3Lmxlbmd0aCAmJiBpNCA8PSBuODsgczgrKykgewogICAgICBsZXQgaDEwID0gbDdbczhdLCBvNCA9IGk0ICsgaDEwLmxlbmd0aDsKICAgICAgbzQgPj0gdDQgJiYgKG80ID4gbjggJiYgKGgxMCA9IGgxMC5zbGljZSgwLCBuOCAtIGk0KSksIGk0IDwgdDQgJiYgKGgxMCA9IGgxMC5zbGljZSh0NCAtIGk0KSksIHIzID8gKGU1W2U1Lmxlbmd0aCAtIDFdICs9IGgxMCwgcjMgPSBmYWxzZSkgOiBlNS5wdXNoKGgxMCkpLCBpNCA9IG80ICsgMTsKICAgIH0KICAgIHJldHVybiBlNTsKICB9CiAgZnVuY3Rpb24gSWUzKGw3LCBlNSwgdDQpIHsKICAgIHJldHVybiBlZTIobDcsIFsiIl0sIGU1LCB0NCk7CiAgfQogIHZhciBWMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCA9IDEpIHsKICAgICAgdGhpcy5kaXIgPSB0NCwgdGhpcy5kb25lID0gZmFsc2UsIHRoaXMubGluZUJyZWFrID0gZmFsc2UsIHRoaXMudmFsdWUgPSAiIiwgdGhpcy5ub2RlcyA9IFtlNV0sIHRoaXMub2Zmc2V0cyA9IFt0NCA+IDAgPyAxIDogKGU1IGluc3RhbmNlb2YgbSA/IGU1LnRleHQubGVuZ3RoIDogZTUuY2hpbGRyZW4ubGVuZ3RoKSA8PCAxXTsKICAgIH0KICAgIG5leHRJbm5lcihlNSwgdDQpIHsKICAgICAgZm9yICh0aGlzLmRvbmUgPSB0aGlzLmxpbmVCcmVhayA9IGZhbHNlOyA7ICkgewogICAgICAgIGxldCBuOCA9IHRoaXMubm9kZXMubGVuZ3RoIC0gMSwgaTQgPSB0aGlzLm5vZGVzW244XSwgczggPSB0aGlzLm9mZnNldHNbbjhdLCByMyA9IHM4ID4+IDEsIGgxMCA9IGk0IGluc3RhbmNlb2YgbSA/IGk0LnRleHQubGVuZ3RoIDogaTQuY2hpbGRyZW4ubGVuZ3RoOwogICAgICAgIGlmIChyMyA9PSAodDQgPiAwID8gaDEwIDogMCkpIHsKICAgICAgICAgIGlmIChuOCA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpcy5kb25lID0gdHJ1ZSwgdGhpcy52YWx1ZSA9ICIiLCB0aGlzOwogICAgICAgICAgdDQgPiAwICYmIHRoaXMub2Zmc2V0c1tuOCAtIDFdKyssIHRoaXMubm9kZXMucG9wKCksIHRoaXMub2Zmc2V0cy5wb3AoKTsKICAgICAgICB9IGVsc2UgaWYgKChzOCAmIDEpID09ICh0NCA+IDAgPyAwIDogMSkpIHsKICAgICAgICAgIGlmICh0aGlzLm9mZnNldHNbbjhdICs9IHQ0LCBlNSA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpcy5saW5lQnJlYWsgPSB0cnVlLCB0aGlzLnZhbHVlID0gYApgLCB0aGlzOwogICAgICAgICAgZTUtLTsKICAgICAgICB9IGVsc2UgaWYgKGk0IGluc3RhbmNlb2YgbSkgewogICAgICAgICAgbGV0IG80ID0gaTQudGV4dFtyMyArICh0NCA8IDAgPyAtMSA6IDApXTsKICAgICAgICAgIGlmICh0aGlzLm9mZnNldHNbbjhdICs9IHQ0LCBvNC5sZW5ndGggPiBNYXRoLm1heCgwLCBlNSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlID0gZTUgPT0gMCA/IG80IDogdDQgPiAwID8gbzQuc2xpY2UoZTUpIDogbzQuc2xpY2UoMCwgbzQubGVuZ3RoIC0gZTUpLCB0aGlzOwogICAgICAgICAgZTUgLT0gbzQubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgbzQgPSBpNC5jaGlsZHJlbltyMyArICh0NCA8IDAgPyAtMSA6IDApXTsKICAgICAgICAgIGU1ID4gbzQubGVuZ3RoID8gKGU1IC09IG80Lmxlbmd0aCwgdGhpcy5vZmZzZXRzW244XSArPSB0NCkgOiAodDQgPCAwICYmIHRoaXMub2Zmc2V0c1tuOF0tLSwgdGhpcy5ub2Rlcy5wdXNoKG80KSwgdGhpcy5vZmZzZXRzLnB1c2godDQgPiAwID8gMSA6IChvNCBpbnN0YW5jZW9mIG0gPyBvNC50ZXh0Lmxlbmd0aCA6IG80LmNoaWxkcmVuLmxlbmd0aCkgPDwgMSkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgbmV4dChlNSA9IDApIHsKICAgICAgcmV0dXJuIGU1IDwgMCAmJiAodGhpcy5uZXh0SW5uZXIoLWU1LCAtdGhpcy5kaXIpLCBlNSA9IHRoaXMudmFsdWUubGVuZ3RoKSwgdGhpcy5uZXh0SW5uZXIoZTUsIHRoaXMuZGlyKTsKICAgIH0KICB9OwogIHZhciB0ZTIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIG44KSB7CiAgICAgIHRoaXMudmFsdWUgPSAiIiwgdGhpcy5kb25lID0gZmFsc2UsIHRoaXMuY3Vyc29yID0gbmV3IFYzKGU1LCB0NCA+IG44ID8gLTEgOiAxKSwgdGhpcy5wb3MgPSB0NCA+IG44ID8gZTUubGVuZ3RoIDogMCwgdGhpcy5mcm9tID0gTWF0aC5taW4odDQsIG44KSwgdGhpcy50byA9IE1hdGgubWF4KHQ0LCBuOCk7CiAgICB9CiAgICBuZXh0SW5uZXIoZTUsIHQ0KSB7CiAgICAgIGlmICh0NCA8IDAgPyB0aGlzLnBvcyA8PSB0aGlzLmZyb20gOiB0aGlzLnBvcyA+PSB0aGlzLnRvKQogICAgICAgIHJldHVybiB0aGlzLnZhbHVlID0gIiIsIHRoaXMuZG9uZSA9IHRydWUsIHRoaXM7CiAgICAgIGU1ICs9IE1hdGgubWF4KDAsIHQ0IDwgMCA/IHRoaXMucG9zIC0gdGhpcy50byA6IHRoaXMuZnJvbSAtIHRoaXMucG9zKTsKICAgICAgbGV0IG44ID0gdDQgPCAwID8gdGhpcy5wb3MgLSB0aGlzLmZyb20gOiB0aGlzLnRvIC0gdGhpcy5wb3M7CiAgICAgIGU1ID4gbjggJiYgKGU1ID0gbjgpLCBuOCAtPSBlNTsKICAgICAgbGV0IHsgdmFsdWU6IGk0IH0gPSB0aGlzLmN1cnNvci5uZXh0KGU1KTsKICAgICAgcmV0dXJuIHRoaXMucG9zICs9IChpNC5sZW5ndGggKyBlNSkgKiB0NCwgdGhpcy52YWx1ZSA9IGk0Lmxlbmd0aCA8PSBuOCA/IGk0IDogdDQgPCAwID8gaTQuc2xpY2UoaTQubGVuZ3RoIC0gbjgpIDogaTQuc2xpY2UoMCwgbjgpLCB0aGlzLmRvbmUgPSAhdGhpcy52YWx1ZSwgdGhpczsKICAgIH0KICAgIG5leHQoZTUgPSAwKSB7CiAgICAgIHJldHVybiBlNSA8IDAgPyBlNSA9IE1hdGgubWF4KGU1LCB0aGlzLmZyb20gLSB0aGlzLnBvcykgOiBlNSA+IDAgJiYgKGU1ID0gTWF0aC5taW4oZTUsIHRoaXMudG8gLSB0aGlzLnBvcykpLCB0aGlzLm5leHRJbm5lcihlNSwgdGhpcy5jdXJzb3IuZGlyKTsKICAgIH0KICAgIGdldCBsaW5lQnJlYWsoKSB7CiAgICAgIHJldHVybiB0aGlzLmN1cnNvci5saW5lQnJlYWsgJiYgdGhpcy52YWx1ZSAhPSAiIjsKICAgIH0KICB9OwogIHZhciBuZTIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSkgewogICAgICB0aGlzLmlubmVyID0gZTUsIHRoaXMuYWZ0ZXJCcmVhayA9IHRydWUsIHRoaXMudmFsdWUgPSAiIiwgdGhpcy5kb25lID0gZmFsc2U7CiAgICB9CiAgICBuZXh0KGU1ID0gMCkgewogICAgICBsZXQgeyBkb25lOiB0NCwgbGluZUJyZWFrOiBuOCwgdmFsdWU6IGk0IH0gPSB0aGlzLmlubmVyLm5leHQoZTUpOwogICAgICByZXR1cm4gdDQgPyAodGhpcy5kb25lID0gdHJ1ZSwgdGhpcy52YWx1ZSA9ICIiKSA6IG44ID8gdGhpcy5hZnRlckJyZWFrID8gdGhpcy52YWx1ZSA9ICIiIDogKHRoaXMuYWZ0ZXJCcmVhayA9IHRydWUsIHRoaXMubmV4dCgpKSA6ICh0aGlzLnZhbHVlID0gaTQsIHRoaXMuYWZ0ZXJCcmVhayA9IGZhbHNlKSwgdGhpczsKICAgIH0KICAgIGdldCBsaW5lQnJlYWsoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9OwogIHR5cGVvZiBTeW1ib2wgPCAidSIgJiYgKHYucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLml0ZXIoKTsKICB9LCBWMy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IHRlMi5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IG5lMi5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSk7CiAgdmFyIGZlMiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgbjgsIGk0KSB7CiAgICAgIHRoaXMuZnJvbSA9IGU1LCB0aGlzLnRvID0gdDQsIHRoaXMubnVtYmVyID0gbjgsIHRoaXMudGV4dCA9IGk0OwogICAgfQogICAgZ2V0IGxlbmd0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMudG8gLSB0aGlzLmZyb207CiAgICB9CiAgfTsKICB2YXIgJDMgPSAibGMsMzQsN24sNyw3YiwxOSwsLCwyLCwyLCwsMjAsYiwxYyxsLGcsLDJ0LDcsMiw2LDIsMiwsNCx6LCx1LHIsMmosYiwxbSw5LDksLG8sNCwsOSwsMywsNSwxNywzLDNiLGYsLHcsMWosLCwsNCw4LDQsLDMsNyxhLDIsdCwsMW0sLCwsMiw0LDgsLDksLGEsMixxLCwyLDIsMWwsLDQsMiw0LDIsMiwzLDMsLHUsMiwzLCxiLDIsMWwsLDQsNSwsMiw0LCxrLDIsbSw2LCwsMW0sLCwyLCw0LDgsLDcsMyxhLDIsdSwsMW4sLCwsYywsOSwsMTQsLDMsLDFsLDMsNSwzLCw0LDcsMixiLDIsdCwsMW0sLDIsLDIsLDMsLDUsMiw3LDIsYiwyLHMsMiwxbCwyLCwsMiw0LDgsLDksLGEsMix0LCwyMCwsNCwsMiwzLCwsOCwsMjksLDIsNyxjLDgsMnEsLDIsOSxiLDYsMjIsMixyLCwsLCwsMWosZSwsNSwsMiw1LGIsLDEwLDksLDJ1LDQsLDYsLDIsMiwyLHAsMiw0LDMsZyw0LGQsLDIsMiw2LCxmLCxqaiwzLHFhLDMsdCwzLHQsMix1LDIsMXMsMiwsNyw4LCwyLGIsOSwsMTksMywzYiwyLHksLDNhLDMsNCwyLDksLDYsMyw2MywyLDIsLDFtLCwsNywsLCwsMiw4LDYsYSwyLCwxYyxoLDFyLDQsMWMsNywsLDUsLDE0LDksYywyLHcsNCwyLDIsLDMsMWssLCwyLDMsLCwzLDFtLDgsMiwyLDQ4LDMsLGQsLDcsNCwsNiwsMywyLDVpLDFtLCw1LGVrLCw1Zix4LDJkYSwzLDN4LCwybyx3LGZlLDYsMngsMixuOXcsNCwsYSx3LDIsMjgsMiw3aywsMywsNCwscCwyLDUsLDQ3LDIscSxpLGQsLDEyLDgscCxiLDFhLDMsMWMsLDIsNCwyLDIsMTMsLDF2LDYsMiwyLDIsMixjLCw4LCwxYiwsMWYsLCwzLDIsMiw1LDIsLCwxNiwyLDgsLDZtLCwyLCw0LCxmbjQsLGtoLGcsZyxnLGE2LDIsZ3QsLDZhLCw0NSw1LDFhZSwzLCwyLDUsNCwxNCwzLDQsLDRsLDIsZngsNCxhciwyLDQ5LGIsNHcsLDFpLGYsMWssMywxZCw0LDIsMiwxeCwzLDEwLDUsLDgsMXEsLGMsMiwxZyw5LGEsNCwyLCwybiwzLDIsLCwyLDYsLDRnLCwzLDgsbCwyLDFsLDIsLCwsLG0sLGUsNywzLDUsNWYsOCwyLDMsLCxuLCwyOSwsMiw2LCwsMiwsLDIsLDIsNmosLDIsNCw2LDIsLDIsciwyLDJkLDgsMiwsLDIsMnksLCwsMiw2LCwsMnQsMywyLDQsLDUsNzcsOSwsMiw2dCwsYSwyLCwsNCwsNDAsNCwyLDIsNCwsdyxhLDE0LDYsMiw0LDgsLDksNiwyLDMsMWEsZCwsMixiYSw3LCw2LCwsMmEsbSwyLDcsLDIsLDIsM2UsNiwzLCwsMiwsNywsLDIwLDIsMywsLCw5biwyLGYwYiw1LDFuLDcsdDQsLDFyLDQsMjksLGY1aywyLDQzcSwsLDMsNCw1LDgsOCwyLDcsdSw0LDQ0LDMsMWl6LDFqLDQsMWUsOCwsZSwsbSw1LCxmLDExcyw3LCxoLDIsNywsMiwsNSw3OSw3LGM1LDQsMTVzLDcsMzEsNywyNDAsNSxneDdrLDJvLDNrLDZvIi5zcGxpdCgiLCIpLm1hcCgobDcpID0+IGw3ID8gcGFyc2VJbnQobDcsIDM2KSA6IDEpOwogIGZvciAobGV0IGw3ID0gMTsgbDcgPCAkMy5sZW5ndGg7IGw3KyspCiAgICAkM1tsN10gKz0gJDNbbDcgLSAxXTsKICBmdW5jdGlvbiBaZShsNykgewogICAgZm9yIChsZXQgZTUgPSAxOyBlNSA8ICQzLmxlbmd0aDsgZTUgKz0gMikKICAgICAgaWYgKCQzW2U1XSA+IGw3KQogICAgICAgIHJldHVybiAkM1tlNSAtIDFdIDw9IGw3OwogICAgcmV0dXJuIGZhbHNlOwogIH0KICBmdW5jdGlvbiBBZTIobDcpIHsKICAgIHJldHVybiBsNyA+PSAxMjc0NjIgJiYgbDcgPD0gMTI3NDg3OwogIH0KICB2YXIgUGUzID0gODIwNTsKICBmdW5jdGlvbiBpZTIobDcsIGU1LCB0NCA9IHRydWUsIG44ID0gdHJ1ZSkgewogICAgcmV0dXJuICh0NCA/IEZlMiA6IEhlKShsNywgZTUsIG44KTsKICB9CiAgZnVuY3Rpb24gRmUyKGw3LCBlNSwgdDQpIHsKICAgIGlmIChlNSA9PSBsNy5sZW5ndGgpCiAgICAgIHJldHVybiBlNTsKICAgIGU1ICYmIEplKGw3LmNoYXJDb2RlQXQoZTUpKSAmJiBUZTIobDcuY2hhckNvZGVBdChlNSAtIDEpKSAmJiBlNS0tOwogICAgbGV0IG44ID0gb2UobDcsIGU1KTsKICAgIGZvciAoZTUgKz0gYmUyKG44KTsgZTUgPCBsNy5sZW5ndGg7ICkgewogICAgICBsZXQgaTQgPSBvZShsNywgZTUpOwogICAgICBpZiAobjggPT0gUGUzIHx8IGk0ID09IFBlMyB8fCB0NCAmJiBaZShpNCkpCiAgICAgICAgZTUgKz0gYmUyKGk0KSwgbjggPSBpNDsKICAgICAgZWxzZSBpZiAoQWUyKGk0KSkgewogICAgICAgIGxldCBzOCA9IDAsIHIzID0gZTUgLSAyOwogICAgICAgIGZvciAoOyByMyA+PSAwICYmIEFlMihvZShsNywgcjMpKTsgKQogICAgICAgICAgczgrKywgcjMgLT0gMjsKICAgICAgICBpZiAoczggJSAyID09IDApCiAgICAgICAgICBicmVhazsKICAgICAgICBlNSArPSAyOwogICAgICB9IGVsc2UKICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBlNTsKICB9CiAgZnVuY3Rpb24gSGUobDcsIGU1LCB0NCkgewogICAgZm9yICg7IGU1ID4gMDsgKSB7CiAgICAgIGxldCBuOCA9IEZlMihsNywgZTUgLSAyLCB0NCk7CiAgICAgIGlmIChuOCA8IGU1KQogICAgICAgIHJldHVybiBuODsKICAgICAgZTUtLTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KICBmdW5jdGlvbiBKZShsNykgewogICAgcmV0dXJuIGw3ID49IDU2MzIwICYmIGw3IDwgNTczNDQ7CiAgfQogIGZ1bmN0aW9uIFRlMihsNykgewogICAgcmV0dXJuIGw3ID49IDU1Mjk2ICYmIGw3IDwgNTYzMjA7CiAgfQogIGZ1bmN0aW9uIG9lKGw3LCBlNSkgewogICAgbGV0IHQ0ID0gbDcuY2hhckNvZGVBdChlNSk7CiAgICBpZiAoIVRlMih0NCkgfHwgZTUgKyAxID09IGw3Lmxlbmd0aCkKICAgICAgcmV0dXJuIHQ0OwogICAgbGV0IG44ID0gbDcuY2hhckNvZGVBdChlNSArIDEpOwogICAgcmV0dXJuIEplKG44KSA/ICh0NCAtIDU1Mjk2IDw8IDEwKSArIChuOCAtIDU2MzIwKSArIDY1NTM2IDogdDQ7CiAgfQogIGZ1bmN0aW9uIHJ0KGw3KSB7CiAgICByZXR1cm4gbDcgPD0gNjU1MzUgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGw3KSA6IChsNyAtPSA2NTUzNiwgU3RyaW5nLmZyb21DaGFyQ29kZSgobDcgPj4gMTApICsgNTUyOTYsIChsNyAmIDEwMjMpICsgNTYzMjApKTsKICB9CiAgZnVuY3Rpb24gYmUyKGw3KSB7CiAgICByZXR1cm4gbDcgPCA2NTUzNiA/IDEgOiAyOwogIH0KICB2YXIgdWUyID0gL1xyXG4/fFxuLzsKICB2YXIgTSA9IGZ1bmN0aW9uKGw3KSB7CiAgICByZXR1cm4gbDdbbDcuU2ltcGxlID0gMF0gPSAiU2ltcGxlIiwgbDdbbDcuVHJhY2tEZWwgPSAxXSA9ICJUcmFja0RlbCIsIGw3W2w3LlRyYWNrQmVmb3JlID0gMl0gPSAiVHJhY2tCZWZvcmUiLCBsN1tsNy5UcmFja0FmdGVyID0gM10gPSAiVHJhY2tBZnRlciIsIGw3OwogIH0oTSB8fCAoTSA9IHt9KSk7CiAgdmFyIE8yID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUpIHsKICAgICAgdGhpcy5zZWN0aW9ucyA9IGU1OwogICAgfQogICAgZ2V0IGxlbmd0aCgpIHsKICAgICAgbGV0IGU1ID0gMDsKICAgICAgZm9yIChsZXQgdDQgPSAwOyB0NCA8IHRoaXMuc2VjdGlvbnMubGVuZ3RoOyB0NCArPSAyKQogICAgICAgIGU1ICs9IHRoaXMuc2VjdGlvbnNbdDRdOwogICAgICByZXR1cm4gZTU7CiAgICB9CiAgICBnZXQgbmV3TGVuZ3RoKCkgewogICAgICBsZXQgZTUgPSAwOwogICAgICBmb3IgKGxldCB0NCA9IDA7IHQ0IDwgdGhpcy5zZWN0aW9ucy5sZW5ndGg7IHQ0ICs9IDIpIHsKICAgICAgICBsZXQgbjggPSB0aGlzLnNlY3Rpb25zW3Q0ICsgMV07CiAgICAgICAgZTUgKz0gbjggPCAwID8gdGhpcy5zZWN0aW9uc1t0NF0gOiBuODsKICAgICAgfQogICAgICByZXR1cm4gZTU7CiAgICB9CiAgICBnZXQgZW1wdHkoKSB7CiAgICAgIHJldHVybiB0aGlzLnNlY3Rpb25zLmxlbmd0aCA9PSAwIHx8IHRoaXMuc2VjdGlvbnMubGVuZ3RoID09IDIgJiYgdGhpcy5zZWN0aW9uc1sxXSA8IDA7CiAgICB9CiAgICBpdGVyR2FwcyhlNSkgewogICAgICBmb3IgKGxldCB0NCA9IDAsIG44ID0gMCwgaTQgPSAwOyB0NCA8IHRoaXMuc2VjdGlvbnMubGVuZ3RoOyApIHsKICAgICAgICBsZXQgczggPSB0aGlzLnNlY3Rpb25zW3Q0KytdLCByMyA9IHRoaXMuc2VjdGlvbnNbdDQrK107CiAgICAgICAgcjMgPCAwID8gKGU1KG44LCBpNCwgczgpLCBpNCArPSBzOCkgOiBpNCArPSByMywgbjggKz0gczg7CiAgICAgIH0KICAgIH0KICAgIGl0ZXJDaGFuZ2VkUmFuZ2VzKGU1LCB0NCA9IGZhbHNlKSB7CiAgICAgIGNlMih0aGlzLCBlNSwgdDQpOwogICAgfQogICAgZ2V0IGludmVydGVkRGVzYygpIHsKICAgICAgbGV0IGU1ID0gW107CiAgICAgIGZvciAobGV0IHQ0ID0gMDsgdDQgPCB0aGlzLnNlY3Rpb25zLmxlbmd0aDsgKSB7CiAgICAgICAgbGV0IG44ID0gdGhpcy5zZWN0aW9uc1t0NCsrXSwgaTQgPSB0aGlzLnNlY3Rpb25zW3Q0KytdOwogICAgICAgIGk0IDwgMCA/IGU1LnB1c2gobjgsIGk0KSA6IGU1LnB1c2goaTQsIG44KTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IE8yKGU1KTsKICAgIH0KICAgIGNvbXBvc2VEZXNjKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLmVtcHR5ID8gZTUgOiBlNS5lbXB0eSA/IHRoaXMgOiBDZTModGhpcywgZTUpOwogICAgfQogICAgbWFwRGVzYyhlNSwgdDQgPSBmYWxzZSkgewogICAgICByZXR1cm4gZTUuZW1wdHkgPyB0aGlzIDogZGUzKHRoaXMsIGU1LCB0NCk7CiAgICB9CiAgICBtYXBQb3MoZTUsIHQ0ID0gLTEsIG44ID0gTS5TaW1wbGUpIHsKICAgICAgbGV0IGk0ID0gMCwgczggPSAwOwogICAgICBmb3IgKGxldCByMyA9IDA7IHIzIDwgdGhpcy5zZWN0aW9ucy5sZW5ndGg7ICkgewogICAgICAgIGxldCBoMTAgPSB0aGlzLnNlY3Rpb25zW3IzKytdLCBvNCA9IHRoaXMuc2VjdGlvbnNbcjMrK10sIGE0ID0gaTQgKyBoMTA7CiAgICAgICAgaWYgKG80IDwgMCkgewogICAgICAgICAgaWYgKGE0ID4gZTUpCiAgICAgICAgICAgIHJldHVybiBzOCArIChlNSAtIGk0KTsKICAgICAgICAgIHM4ICs9IGgxMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKG44ICE9IE0uU2ltcGxlICYmIGE0ID49IGU1ICYmIChuOCA9PSBNLlRyYWNrRGVsICYmIGk0IDwgZTUgJiYgYTQgPiBlNSB8fCBuOCA9PSBNLlRyYWNrQmVmb3JlICYmIGk0IDwgZTUgfHwgbjggPT0gTS5UcmFja0FmdGVyICYmIGE0ID4gZTUpKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIGlmIChhNCA+IGU1IHx8IGE0ID09IGU1ICYmIHQ0IDwgMCAmJiAhaDEwKQogICAgICAgICAgICByZXR1cm4gZTUgPT0gaTQgfHwgdDQgPCAwID8gczggOiBzOCArIG80OwogICAgICAgICAgczggKz0gbzQ7CiAgICAgICAgfQogICAgICAgIGk0ID0gYTQ7CiAgICAgIH0KICAgICAgaWYgKGU1ID4gaTQpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBvc2l0aW9uICR7ZTV9IGlzIG91dCBvZiByYW5nZSBmb3IgY2hhbmdlc2V0IG9mIGxlbmd0aCAke2k0fWApOwogICAgICByZXR1cm4gczg7CiAgICB9CiAgICB0b3VjaGVzUmFuZ2UoZTUsIHQ0ID0gZTUpIHsKICAgICAgZm9yIChsZXQgbjggPSAwLCBpNCA9IDA7IG44IDwgdGhpcy5zZWN0aW9ucy5sZW5ndGggJiYgaTQgPD0gdDQ7ICkgewogICAgICAgIGxldCBzOCA9IHRoaXMuc2VjdGlvbnNbbjgrK10sIHIzID0gdGhpcy5zZWN0aW9uc1tuOCsrXSwgaDEwID0gaTQgKyBzODsKICAgICAgICBpZiAocjMgPj0gMCAmJiBpNCA8PSB0NCAmJiBoMTAgPj0gZTUpCiAgICAgICAgICByZXR1cm4gaTQgPCBlNSAmJiBoMTAgPiB0NCA/ICJjb3ZlciIgOiB0cnVlOwogICAgICAgIGk0ID0gaDEwOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHRvU3RyaW5nKCkgewogICAgICBsZXQgZTUgPSAiIjsKICAgICAgZm9yIChsZXQgdDQgPSAwOyB0NCA8IHRoaXMuc2VjdGlvbnMubGVuZ3RoOyApIHsKICAgICAgICBsZXQgbjggPSB0aGlzLnNlY3Rpb25zW3Q0KytdLCBpNCA9IHRoaXMuc2VjdGlvbnNbdDQrK107CiAgICAgICAgZTUgKz0gKGU1ID8gIiAiIDogIiIpICsgbjggKyAoaTQgPj0gMCA/ICI6IiArIGk0IDogIiIpOwogICAgICB9CiAgICAgIHJldHVybiBlNTsKICAgIH0KICAgIHRvSlNPTigpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbnM7CiAgICB9CiAgICBzdGF0aWMgZnJvbUpTT04oZTUpIHsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGU1KSB8fCBlNS5sZW5ndGggJSAyIHx8IGU1LnNvbWUoKHQ0KSA9PiB0eXBlb2YgdDQgIT0gIm51bWJlciIpKQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIEpTT04gcmVwcmVzZW50YXRpb24gb2YgQ2hhbmdlRGVzYyIpOwogICAgICByZXR1cm4gbmV3IE8yKGU1KTsKICAgIH0KICAgIHN0YXRpYyBjcmVhdGUoZTUpIHsKICAgICAgcmV0dXJuIG5ldyBPMihlNSk7CiAgICB9CiAgfTsKICB2YXIgeCA9IGNsYXNzIGV4dGVuZHMgTzIgewogICAgY29uc3RydWN0b3IoZTUsIHQ0KSB7CiAgICAgIHN1cGVyKGU1KSwgdGhpcy5pbnNlcnRlZCA9IHQ0OwogICAgfQogICAgYXBwbHkoZTUpIHsKICAgICAgaWYgKHRoaXMubGVuZ3RoICE9IGU1Lmxlbmd0aCkKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXBwbHlpbmcgY2hhbmdlIHNldCB0byBhIGRvY3VtZW50IHdpdGggdGhlIHdyb25nIGxlbmd0aCIpOwogICAgICByZXR1cm4gY2UyKHRoaXMsICh0NCwgbjgsIGk0LCBzOCwgcjMpID0+IGU1ID0gZTUucmVwbGFjZShpNCwgaTQgKyAobjggLSB0NCksIHIzKSwgZmFsc2UpLCBlNTsKICAgIH0KICAgIG1hcERlc2MoZTUsIHQ0ID0gZmFsc2UpIHsKICAgICAgcmV0dXJuIGRlMyh0aGlzLCBlNSwgdDQsIHRydWUpOwogICAgfQogICAgaW52ZXJ0KGU1KSB7CiAgICAgIGxldCB0NCA9IHRoaXMuc2VjdGlvbnMuc2xpY2UoKSwgbjggPSBbXTsKICAgICAgZm9yIChsZXQgaTQgPSAwLCBzOCA9IDA7IGk0IDwgdDQubGVuZ3RoOyBpNCArPSAyKSB7CiAgICAgICAgbGV0IHIzID0gdDRbaTRdLCBoMTAgPSB0NFtpNCArIDFdOwogICAgICAgIGlmIChoMTAgPj0gMCkgewogICAgICAgICAgdDRbaTRdID0gaDEwLCB0NFtpNCArIDFdID0gcjM7CiAgICAgICAgICBsZXQgbzQgPSBpNCA+PiAxOwogICAgICAgICAgZm9yICg7IG44Lmxlbmd0aCA8IG80OyApCiAgICAgICAgICAgIG44LnB1c2godi5lbXB0eSk7CiAgICAgICAgICBuOC5wdXNoKHIzID8gZTUuc2xpY2UoczgsIHM4ICsgcjMpIDogdi5lbXB0eSk7CiAgICAgICAgfQogICAgICAgIHM4ICs9IHIzOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgeCh0NCwgbjgpOwogICAgfQogICAgY29tcG9zZShlNSkgewogICAgICByZXR1cm4gdGhpcy5lbXB0eSA/IGU1IDogZTUuZW1wdHkgPyB0aGlzIDogQ2UzKHRoaXMsIGU1LCB0cnVlKTsKICAgIH0KICAgIG1hcChlNSwgdDQgPSBmYWxzZSkgewogICAgICByZXR1cm4gZTUuZW1wdHkgPyB0aGlzIDogZGUzKHRoaXMsIGU1LCB0NCwgdHJ1ZSk7CiAgICB9CiAgICBpdGVyQ2hhbmdlcyhlNSwgdDQgPSBmYWxzZSkgewogICAgICBjZTIodGhpcywgZTUsIHQ0KTsKICAgIH0KICAgIGdldCBkZXNjKCkgewogICAgICByZXR1cm4gTzIuY3JlYXRlKHRoaXMuc2VjdGlvbnMpOwogICAgfQogICAgZmlsdGVyKGU1KSB7CiAgICAgIGxldCB0NCA9IFtdLCBuOCA9IFtdLCBpNCA9IFtdLCBzOCA9IG5ldyBOKHRoaXMpOwogICAgICBlOgogICAgICAgIGZvciAobGV0IHIzID0gMCwgaDEwID0gMDsgOyApIHsKICAgICAgICAgIGxldCBvNCA9IHIzID09IGU1Lmxlbmd0aCA/IDFlOSA6IGU1W3IzKytdOwogICAgICAgICAgZm9yICg7IGgxMCA8IG80IHx8IGgxMCA9PSBvNCAmJiBzOC5sZW4gPT0gMDsgKSB7CiAgICAgICAgICAgIGlmIChzOC5kb25lKQogICAgICAgICAgICAgIGJyZWFrIGU7CiAgICAgICAgICAgIGxldCBmMTEgPSBNYXRoLm1pbihzOC5sZW4sIG80IC0gaDEwKTsKICAgICAgICAgICAgSShpNCwgZjExLCAtMSk7CiAgICAgICAgICAgIGxldCB1MTEgPSBzOC5pbnMgPT0gLTEgPyAtMSA6IHM4Lm9mZiA9PSAwID8gczguaW5zIDogMDsKICAgICAgICAgICAgSSh0NCwgZjExLCB1MTEpLCB1MTEgPiAwICYmIFIobjgsIHQ0LCBzOC50ZXh0KSwgczguZm9yd2FyZChmMTEpLCBoMTAgKz0gZjExOwogICAgICAgICAgfQogICAgICAgICAgbGV0IGE0ID0gZTVbcjMrK107CiAgICAgICAgICBmb3IgKDsgaDEwIDwgYTQ7ICkgewogICAgICAgICAgICBpZiAoczguZG9uZSkKICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICBsZXQgZjExID0gTWF0aC5taW4oczgubGVuLCBhNCAtIGgxMCk7CiAgICAgICAgICAgIEkodDQsIGYxMSwgLTEpLCBJKGk0LCBmMTEsIHM4LmlucyA9PSAtMSA/IC0xIDogczgub2ZmID09IDAgPyBzOC5pbnMgOiAwKSwgczguZm9yd2FyZChmMTEpLCBoMTAgKz0gZjExOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIHsgY2hhbmdlczogbmV3IHgodDQsIG44KSwgZmlsdGVyZWQ6IE8yLmNyZWF0ZShpNCkgfTsKICAgIH0KICAgIHRvSlNPTigpIHsKICAgICAgbGV0IGU1ID0gW107CiAgICAgIGZvciAobGV0IHQ0ID0gMDsgdDQgPCB0aGlzLnNlY3Rpb25zLmxlbmd0aDsgdDQgKz0gMikgewogICAgICAgIGxldCBuOCA9IHRoaXMuc2VjdGlvbnNbdDRdLCBpNCA9IHRoaXMuc2VjdGlvbnNbdDQgKyAxXTsKICAgICAgICBpNCA8IDAgPyBlNS5wdXNoKG44KSA6IGk0ID09IDAgPyBlNS5wdXNoKFtuOF0pIDogZTUucHVzaChbbjhdLmNvbmNhdCh0aGlzLmluc2VydGVkW3Q0ID4+IDFdLnRvSlNPTigpKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGU1OwogICAgfQogICAgc3RhdGljIG9mKGU1LCB0NCwgbjgpIHsKICAgICAgbGV0IGk0ID0gW10sIHM4ID0gW10sIHIzID0gMCwgaDEwID0gbnVsbDsKICAgICAgZnVuY3Rpb24gbzQoZjExID0gZmFsc2UpIHsKICAgICAgICBpZiAoIWYxMSAmJiAhaTQubGVuZ3RoKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHIzIDwgdDQgJiYgSShpNCwgdDQgLSByMywgLTEpOwogICAgICAgIGxldCB1MTEgPSBuZXcgeChpNCwgczgpOwogICAgICAgIGgxMCA9IGgxMCA/IGgxMC5jb21wb3NlKHUxMS5tYXAoaDEwKSkgOiB1MTEsIGk0ID0gW10sIHM4ID0gW10sIHIzID0gMDsKICAgICAgfQogICAgICBmdW5jdGlvbiBhNChmMTEpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmMTEpKQogICAgICAgICAgZm9yIChsZXQgdTExIG9mIGYxMSkKICAgICAgICAgICAgYTQodTExKTsKICAgICAgICBlbHNlIGlmIChmMTEgaW5zdGFuY2VvZiB4KSB7CiAgICAgICAgICBpZiAoZjExLmxlbmd0aCAhPSB0NCkKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE1pc21hdGNoZWQgY2hhbmdlIHNldCBsZW5ndGggKGdvdCAke2YxMS5sZW5ndGh9LCBleHBlY3RlZCAke3Q0fSlgKTsKICAgICAgICAgIG80KCksIGgxMCA9IGgxMCA/IGgxMC5jb21wb3NlKGYxMS5tYXAoaDEwKSkgOiBmMTE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxldCB7IGZyb206IHUxMSwgdG86IGQxNSA9IHUxMSwgaW5zZXJ0OiBjMTcgfSA9IGYxMTsKICAgICAgICAgIGlmICh1MTEgPiBkMTUgfHwgdTExIDwgMCB8fCBkMTUgPiB0NCkKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgY2hhbmdlIHJhbmdlICR7dTExfSB0byAke2QxNX0gKGluIGRvYyBvZiBsZW5ndGggJHt0NH0pYCk7CiAgICAgICAgICBsZXQgcDE4ID0gYzE3ID8gdHlwZW9mIGMxNyA9PSAic3RyaW5nIiA/IHYub2YoYzE3LnNwbGl0KG44IHx8IHVlMikpIDogYzE3IDogdi5lbXB0eSwgRTE1ID0gcDE4Lmxlbmd0aDsKICAgICAgICAgIGlmICh1MTEgPT0gZDE1ICYmIEUxNSA9PSAwKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB1MTEgPCByMyAmJiBvNCgpLCB1MTEgPiByMyAmJiBJKGk0LCB1MTEgLSByMywgLTEpLCBJKGk0LCBkMTUgLSB1MTEsIEUxNSksIFIoczgsIGk0LCBwMTgpLCByMyA9IGQxNTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGE0KGU1KSwgbzQoIWgxMCksIGgxMDsKICAgIH0KICAgIHN0YXRpYyBlbXB0eShlNSkgewogICAgICByZXR1cm4gbmV3IHgoZTUgPyBbZTUsIC0xXSA6IFtdLCBbXSk7CiAgICB9CiAgICBzdGF0aWMgZnJvbUpTT04oZTUpIHsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGU1KSkKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBKU09OIHJlcHJlc2VudGF0aW9uIG9mIENoYW5nZVNldCIpOwogICAgICBsZXQgdDQgPSBbXSwgbjggPSBbXTsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGU1Lmxlbmd0aDsgaTQrKykgewogICAgICAgIGxldCBzOCA9IGU1W2k0XTsKICAgICAgICBpZiAodHlwZW9mIHM4ID09ICJudW1iZXIiKQogICAgICAgICAgdDQucHVzaChzOCwgLTEpOwogICAgICAgIGVsc2UgewogICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHM4KSB8fCB0eXBlb2YgczhbMF0gIT0gIm51bWJlciIgfHwgczguc29tZSgocjMsIGgxMCkgPT4gaDEwICYmIHR5cGVvZiByMyAhPSAic3RyaW5nIikpCiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIEpTT04gcmVwcmVzZW50YXRpb24gb2YgQ2hhbmdlU2V0Iik7CiAgICAgICAgICBpZiAoczgubGVuZ3RoID09IDEpCiAgICAgICAgICAgIHQ0LnB1c2goczhbMF0sIDApOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZvciAoOyBuOC5sZW5ndGggPCBpNDsgKQogICAgICAgICAgICAgIG44LnB1c2godi5lbXB0eSk7CiAgICAgICAgICAgIG44W2k0XSA9IHYub2Yoczguc2xpY2UoMSkpLCB0NC5wdXNoKHM4WzBdLCBuOFtpNF0ubGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyB4KHQ0LCBuOCk7CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlU2V0KGU1LCB0NCkgewogICAgICByZXR1cm4gbmV3IHgoZTUsIHQ0KTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEkobDcsIGU1LCB0NCwgbjggPSBmYWxzZSkgewogICAgaWYgKGU1ID09IDAgJiYgdDQgPD0gMCkKICAgICAgcmV0dXJuOwogICAgbGV0IGk0ID0gbDcubGVuZ3RoIC0gMjsKICAgIGk0ID49IDAgJiYgdDQgPD0gMCAmJiB0NCA9PSBsN1tpNCArIDFdID8gbDdbaTRdICs9IGU1IDogZTUgPT0gMCAmJiBsN1tpNF0gPT0gMCA/IGw3W2k0ICsgMV0gKz0gdDQgOiBuOCA/IChsN1tpNF0gKz0gZTUsIGw3W2k0ICsgMV0gKz0gdDQpIDogbDcucHVzaChlNSwgdDQpOwogIH0KICBmdW5jdGlvbiBSKGw3LCBlNSwgdDQpIHsKICAgIGlmICh0NC5sZW5ndGggPT0gMCkKICAgICAgcmV0dXJuOwogICAgbGV0IG44ID0gZTUubGVuZ3RoIC0gMiA+PiAxOwogICAgaWYgKG44IDwgbDcubGVuZ3RoKQogICAgICBsN1tsNy5sZW5ndGggLSAxXSA9IGw3W2w3Lmxlbmd0aCAtIDFdLmFwcGVuZCh0NCk7CiAgICBlbHNlIHsKICAgICAgZm9yICg7IGw3Lmxlbmd0aCA8IG44OyApCiAgICAgICAgbDcucHVzaCh2LmVtcHR5KTsKICAgICAgbDcucHVzaCh0NCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGNlMihsNywgZTUsIHQ0KSB7CiAgICBsZXQgbjggPSBsNy5pbnNlcnRlZDsKICAgIGZvciAobGV0IGk0ID0gMCwgczggPSAwLCByMyA9IDA7IHIzIDwgbDcuc2VjdGlvbnMubGVuZ3RoOyApIHsKICAgICAgbGV0IGgxMCA9IGw3LnNlY3Rpb25zW3IzKytdLCBvNCA9IGw3LnNlY3Rpb25zW3IzKytdOwogICAgICBpZiAobzQgPCAwKQogICAgICAgIGk0ICs9IGgxMCwgczggKz0gaDEwOwogICAgICBlbHNlIHsKICAgICAgICBsZXQgYTQgPSBpNCwgZjExID0gczgsIHUxMSA9IHYuZW1wdHk7CiAgICAgICAgZm9yICg7IGE0ICs9IGgxMCwgZjExICs9IG80LCBvNCAmJiBuOCAmJiAodTExID0gdTExLmFwcGVuZChuOFtyMyAtIDIgPj4gMV0pKSwgISh0NCB8fCByMyA9PSBsNy5zZWN0aW9ucy5sZW5ndGggfHwgbDcuc2VjdGlvbnNbcjMgKyAxXSA8IDApOyApCiAgICAgICAgICBoMTAgPSBsNy5zZWN0aW9uc1tyMysrXSwgbzQgPSBsNy5zZWN0aW9uc1tyMysrXTsKICAgICAgICBlNShpNCwgYTQsIHM4LCBmMTEsIHUxMSksIGk0ID0gYTQsIHM4ID0gZjExOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGRlMyhsNywgZTUsIHQ0LCBuOCA9IGZhbHNlKSB7CiAgICBsZXQgaTQgPSBbXSwgczggPSBuOCA/IFtdIDogbnVsbCwgcjMgPSBuZXcgTihsNyksIGgxMCA9IG5ldyBOKGU1KTsKICAgIGZvciAobGV0IG80ID0gLTE7IDsgKQogICAgICBpZiAocjMuaW5zID09IC0xICYmIGgxMC5pbnMgPT0gLTEpIHsKICAgICAgICBsZXQgYTQgPSBNYXRoLm1pbihyMy5sZW4sIGgxMC5sZW4pOwogICAgICAgIEkoaTQsIGE0LCAtMSksIHIzLmZvcndhcmQoYTQpLCBoMTAuZm9yd2FyZChhNCk7CiAgICAgIH0gZWxzZSBpZiAoaDEwLmlucyA+PSAwICYmIChyMy5pbnMgPCAwIHx8IG80ID09IHIzLmkgfHwgcjMub2ZmID09IDAgJiYgKGgxMC5sZW4gPCByMy5sZW4gfHwgaDEwLmxlbiA9PSByMy5sZW4gJiYgIXQ0KSkpIHsKICAgICAgICBsZXQgYTQgPSBoMTAubGVuOwogICAgICAgIGZvciAoSShpNCwgaDEwLmlucywgLTEpOyBhNDsgKSB7CiAgICAgICAgICBsZXQgZjExID0gTWF0aC5taW4ocjMubGVuLCBhNCk7CiAgICAgICAgICByMy5pbnMgPj0gMCAmJiBvNCA8IHIzLmkgJiYgcjMubGVuIDw9IGYxMSAmJiAoSShpNCwgMCwgcjMuaW5zKSwgczggJiYgUihzOCwgaTQsIHIzLnRleHQpLCBvNCA9IHIzLmkpLCByMy5mb3J3YXJkKGYxMSksIGE0IC09IGYxMTsKICAgICAgICB9CiAgICAgICAgaDEwLm5leHQoKTsKICAgICAgfSBlbHNlIGlmIChyMy5pbnMgPj0gMCkgewogICAgICAgIGxldCBhNCA9IDAsIGYxMSA9IHIzLmxlbjsKICAgICAgICBmb3IgKDsgZjExOyApCiAgICAgICAgICBpZiAoaDEwLmlucyA9PSAtMSkgewogICAgICAgICAgICBsZXQgdTExID0gTWF0aC5taW4oZjExLCBoMTAubGVuKTsKICAgICAgICAgICAgYTQgKz0gdTExLCBmMTEgLT0gdTExLCBoMTAuZm9yd2FyZCh1MTEpOwogICAgICAgICAgfSBlbHNlIGlmIChoMTAuaW5zID09IDAgJiYgaDEwLmxlbiA8IGYxMSkKICAgICAgICAgICAgZjExIC09IGgxMC5sZW4sIGgxMC5uZXh0KCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIEkoaTQsIGE0LCBvNCA8IHIzLmkgPyByMy5pbnMgOiAwKSwgczggJiYgbzQgPCByMy5pICYmIFIoczgsIGk0LCByMy50ZXh0KSwgbzQgPSByMy5pLCByMy5mb3J3YXJkKHIzLmxlbiAtIGYxMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHIzLmRvbmUgJiYgaDEwLmRvbmUpCiAgICAgICAgICByZXR1cm4gczggPyB4LmNyZWF0ZVNldChpNCwgczgpIDogTzIuY3JlYXRlKGk0KTsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1pc21hdGNoZWQgY2hhbmdlIHNldCBsZW5ndGhzIik7CiAgICAgIH0KICB9CiAgZnVuY3Rpb24gQ2UzKGw3LCBlNSwgdDQgPSBmYWxzZSkgewogICAgbGV0IG44ID0gW10sIGk0ID0gdDQgPyBbXSA6IG51bGwsIHM4ID0gbmV3IE4obDcpLCByMyA9IG5ldyBOKGU1KTsKICAgIGZvciAobGV0IGgxMCA9IGZhbHNlOyA7ICkgewogICAgICBpZiAoczguZG9uZSAmJiByMy5kb25lKQogICAgICAgIHJldHVybiBpNCA/IHguY3JlYXRlU2V0KG44LCBpNCkgOiBPMi5jcmVhdGUobjgpOwogICAgICBpZiAoczguaW5zID09IDApCiAgICAgICAgSShuOCwgczgubGVuLCAwLCBoMTApLCBzOC5uZXh0KCk7CiAgICAgIGVsc2UgaWYgKHIzLmxlbiA9PSAwICYmICFyMy5kb25lKQogICAgICAgIEkobjgsIDAsIHIzLmlucywgaDEwKSwgaTQgJiYgUihpNCwgbjgsIHIzLnRleHQpLCByMy5uZXh0KCk7CiAgICAgIGVsc2UgewogICAgICAgIGlmIChzOC5kb25lIHx8IHIzLmRvbmUpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1pc21hdGNoZWQgY2hhbmdlIHNldCBsZW5ndGhzIik7CiAgICAgICAgewogICAgICAgICAgbGV0IG80ID0gTWF0aC5taW4oczgubGVuMiwgcjMubGVuKSwgYTQgPSBuOC5sZW5ndGg7CiAgICAgICAgICBpZiAoczguaW5zID09IC0xKSB7CiAgICAgICAgICAgIGxldCBmMTEgPSByMy5pbnMgPT0gLTEgPyAtMSA6IHIzLm9mZiA/IDAgOiByMy5pbnM7CiAgICAgICAgICAgIEkobjgsIG80LCBmMTEsIGgxMCksIGk0ICYmIGYxMSAmJiBSKGk0LCBuOCwgcjMudGV4dCk7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgcjMuaW5zID09IC0xID8gKEkobjgsIHM4Lm9mZiA/IDAgOiBzOC5sZW4sIG80LCBoMTApLCBpNCAmJiBSKGk0LCBuOCwgczgudGV4dEJpdChvNCkpKSA6IChJKG44LCBzOC5vZmYgPyAwIDogczgubGVuLCByMy5vZmYgPyAwIDogcjMuaW5zLCBoMTApLCBpNCAmJiAhcjMub2ZmICYmIFIoaTQsIG44LCByMy50ZXh0KSk7CiAgICAgICAgICBoMTAgPSAoczguaW5zID4gbzQgfHwgcjMuaW5zID49IDAgJiYgcjMubGVuID4gbzQpICYmIChoMTAgfHwgbjgubGVuZ3RoID4gYTQpLCBzOC5mb3J3YXJkMihvNCksIHIzLmZvcndhcmQobzQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICB2YXIgTiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1KSB7CiAgICAgIHRoaXMuc2V0ID0gZTUsIHRoaXMuaSA9IDAsIHRoaXMubmV4dCgpOwogICAgfQogICAgbmV4dCgpIHsKICAgICAgbGV0IHsgc2VjdGlvbnM6IGU1IH0gPSB0aGlzLnNldDsKICAgICAgdGhpcy5pIDwgZTUubGVuZ3RoID8gKHRoaXMubGVuID0gZTVbdGhpcy5pKytdLCB0aGlzLmlucyA9IGU1W3RoaXMuaSsrXSkgOiAodGhpcy5sZW4gPSAwLCB0aGlzLmlucyA9IC0yKSwgdGhpcy5vZmYgPSAwOwogICAgfQogICAgZ2V0IGRvbmUoKSB7CiAgICAgIHJldHVybiB0aGlzLmlucyA9PSAtMjsKICAgIH0KICAgIGdldCBsZW4yKCkgewogICAgICByZXR1cm4gdGhpcy5pbnMgPCAwID8gdGhpcy5sZW4gOiB0aGlzLmluczsKICAgIH0KICAgIGdldCB0ZXh0KCkgewogICAgICBsZXQgeyBpbnNlcnRlZDogZTUgfSA9IHRoaXMuc2V0LCB0NCA9IHRoaXMuaSAtIDIgPj4gMTsKICAgICAgcmV0dXJuIHQ0ID49IGU1Lmxlbmd0aCA/IHYuZW1wdHkgOiBlNVt0NF07CiAgICB9CiAgICB0ZXh0Qml0KGU1KSB7CiAgICAgIGxldCB7IGluc2VydGVkOiB0NCB9ID0gdGhpcy5zZXQsIG44ID0gdGhpcy5pIC0gMiA+PiAxOwogICAgICByZXR1cm4gbjggPj0gdDQubGVuZ3RoICYmICFlNSA/IHYuZW1wdHkgOiB0NFtuOF0uc2xpY2UodGhpcy5vZmYsIGU1ID09IG51bGwgPyB2b2lkIDAgOiB0aGlzLm9mZiArIGU1KTsKICAgIH0KICAgIGZvcndhcmQoZTUpIHsKICAgICAgZTUgPT0gdGhpcy5sZW4gPyB0aGlzLm5leHQoKSA6ICh0aGlzLmxlbiAtPSBlNSwgdGhpcy5vZmYgKz0gZTUpOwogICAgfQogICAgZm9yd2FyZDIoZTUpIHsKICAgICAgdGhpcy5pbnMgPT0gLTEgPyB0aGlzLmZvcndhcmQoZTUpIDogZTUgPT0gdGhpcy5pbnMgPyB0aGlzLm5leHQoKSA6ICh0aGlzLmlucyAtPSBlNSwgdGhpcy5vZmYgKz0gZTUpOwogICAgfQogIH07CiAgdmFyIEIyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCBuOCkgewogICAgICB0aGlzLmZyb20gPSBlNSwgdGhpcy50byA9IHQ0LCB0aGlzLmZsYWdzID0gbjg7CiAgICB9CiAgICBnZXQgYW5jaG9yKCkgewogICAgICByZXR1cm4gdGhpcy5mbGFncyAmIDE2ID8gdGhpcy50byA6IHRoaXMuZnJvbTsKICAgIH0KICAgIGdldCBoZWFkKCkgewogICAgICByZXR1cm4gdGhpcy5mbGFncyAmIDE2ID8gdGhpcy5mcm9tIDogdGhpcy50bzsKICAgIH0KICAgIGdldCBlbXB0eSgpIHsKICAgICAgcmV0dXJuIHRoaXMuZnJvbSA9PSB0aGlzLnRvOwogICAgfQogICAgZ2V0IGFzc29jKCkgewogICAgICByZXR1cm4gdGhpcy5mbGFncyAmIDQgPyAtMSA6IHRoaXMuZmxhZ3MgJiA4ID8gMSA6IDA7CiAgICB9CiAgICBnZXQgYmlkaUxldmVsKCkgewogICAgICBsZXQgZTUgPSB0aGlzLmZsYWdzICYgMzsKICAgICAgcmV0dXJuIGU1ID09IDMgPyBudWxsIDogZTU7CiAgICB9CiAgICBnZXQgZ29hbENvbHVtbigpIHsKICAgICAgbGV0IGU1ID0gdGhpcy5mbGFncyA+PiA1OwogICAgICByZXR1cm4gZTUgPT0gMzM1NTQ0MzEgPyB2b2lkIDAgOiBlNTsKICAgIH0KICAgIG1hcChlNSwgdDQgPSAtMSkgewogICAgICBsZXQgbjgsIGk0OwogICAgICByZXR1cm4gdGhpcy5lbXB0eSA/IG44ID0gaTQgPSBlNS5tYXBQb3ModGhpcy5mcm9tLCB0NCkgOiAobjggPSBlNS5tYXBQb3ModGhpcy5mcm9tLCAxKSwgaTQgPSBlNS5tYXBQb3ModGhpcy50bywgLTEpKSwgbjggPT0gdGhpcy5mcm9tICYmIGk0ID09IHRoaXMudG8gPyB0aGlzIDogbmV3IEIyKG44LCBpNCwgdGhpcy5mbGFncyk7CiAgICB9CiAgICBleHRlbmQoZTUsIHQ0ID0gZTUpIHsKICAgICAgaWYgKGU1IDw9IHRoaXMuYW5jaG9yICYmIHQ0ID49IHRoaXMuYW5jaG9yKQogICAgICAgIHJldHVybiBnMi5yYW5nZShlNSwgdDQpOwogICAgICBsZXQgbjggPSBNYXRoLmFicyhlNSAtIHRoaXMuYW5jaG9yKSA+IE1hdGguYWJzKHQ0IC0gdGhpcy5hbmNob3IpID8gZTUgOiB0NDsKICAgICAgcmV0dXJuIGcyLnJhbmdlKHRoaXMuYW5jaG9yLCBuOCk7CiAgICB9CiAgICBlcShlNSkgewogICAgICByZXR1cm4gdGhpcy5hbmNob3IgPT0gZTUuYW5jaG9yICYmIHRoaXMuaGVhZCA9PSBlNS5oZWFkOwogICAgfQogICAgdG9KU09OKCkgewogICAgICByZXR1cm4geyBhbmNob3I6IHRoaXMuYW5jaG9yLCBoZWFkOiB0aGlzLmhlYWQgfTsKICAgIH0KICAgIHN0YXRpYyBmcm9tSlNPTihlNSkgewogICAgICBpZiAoIWU1IHx8IHR5cGVvZiBlNS5hbmNob3IgIT0gIm51bWJlciIgfHwgdHlwZW9mIGU1LmhlYWQgIT0gIm51bWJlciIpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgU2VsZWN0aW9uUmFuZ2UiKTsKICAgICAgcmV0dXJuIGcyLnJhbmdlKGU1LmFuY2hvciwgZTUuaGVhZCk7CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlKGU1LCB0NCwgbjgpIHsKICAgICAgcmV0dXJuIG5ldyBCMihlNSwgdDQsIG44KTsKICAgIH0KICB9OwogIHZhciBnMiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCkgewogICAgICB0aGlzLnJhbmdlcyA9IGU1LCB0aGlzLm1haW5JbmRleCA9IHQ0OwogICAgfQogICAgbWFwKGU1LCB0NCA9IC0xKSB7CiAgICAgIHJldHVybiBlNS5lbXB0eSA/IHRoaXMgOiBnMi5jcmVhdGUodGhpcy5yYW5nZXMubWFwKChuOCkgPT4gbjgubWFwKGU1LCB0NCkpLCB0aGlzLm1haW5JbmRleCk7CiAgICB9CiAgICBlcShlNSkgewogICAgICBpZiAodGhpcy5yYW5nZXMubGVuZ3RoICE9IGU1LnJhbmdlcy5sZW5ndGggfHwgdGhpcy5tYWluSW5kZXggIT0gZTUubWFpbkluZGV4KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChsZXQgdDQgPSAwOyB0NCA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgdDQrKykKICAgICAgICBpZiAoIXRoaXMucmFuZ2VzW3Q0XS5lcShlNS5yYW5nZXNbdDRdKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBnZXQgbWFpbigpIHsKICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzW3RoaXMubWFpbkluZGV4XTsKICAgIH0KICAgIGFzU2luZ2xlKCkgewogICAgICByZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RoID09IDEgPyB0aGlzIDogbmV3IGcyKFt0aGlzLm1haW5dLCAwKTsKICAgIH0KICAgIGFkZFJhbmdlKGU1LCB0NCA9IHRydWUpIHsKICAgICAgcmV0dXJuIGcyLmNyZWF0ZShbZTVdLmNvbmNhdCh0aGlzLnJhbmdlcyksIHQ0ID8gMCA6IHRoaXMubWFpbkluZGV4ICsgMSk7CiAgICB9CiAgICByZXBsYWNlUmFuZ2UoZTUsIHQ0ID0gdGhpcy5tYWluSW5kZXgpIHsKICAgICAgbGV0IG44ID0gdGhpcy5yYW5nZXMuc2xpY2UoKTsKICAgICAgcmV0dXJuIG44W3Q0XSA9IGU1LCBnMi5jcmVhdGUobjgsIHRoaXMubWFpbkluZGV4KTsKICAgIH0KICAgIHRvSlNPTigpIHsKICAgICAgcmV0dXJuIHsgcmFuZ2VzOiB0aGlzLnJhbmdlcy5tYXAoKGU1KSA9PiBlNS50b0pTT04oKSksIG1haW46IHRoaXMubWFpbkluZGV4IH07CiAgICB9CiAgICBzdGF0aWMgZnJvbUpTT04oZTUpIHsKICAgICAgaWYgKCFlNSB8fCAhQXJyYXkuaXNBcnJheShlNS5yYW5nZXMpIHx8IHR5cGVvZiBlNS5tYWluICE9ICJudW1iZXIiIHx8IGU1Lm1haW4gPj0gZTUucmFuZ2VzLmxlbmd0aCkKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBFZGl0b3JTZWxlY3Rpb24iKTsKICAgICAgcmV0dXJuIG5ldyBnMihlNS5yYW5nZXMubWFwKCh0NCkgPT4gQjIuZnJvbUpTT04odDQpKSwgZTUubWFpbik7CiAgICB9CiAgICBzdGF0aWMgc2luZ2xlKGU1LCB0NCA9IGU1KSB7CiAgICAgIHJldHVybiBuZXcgZzIoW2cyLnJhbmdlKGU1LCB0NCldLCAwKTsKICAgIH0KICAgIHN0YXRpYyBjcmVhdGUoZTUsIHQ0ID0gMCkgewogICAgICBpZiAoZTUubGVuZ3RoID09IDApCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkEgc2VsZWN0aW9uIG5lZWRzIGF0IGxlYXN0IG9uZSByYW5nZSIpOwogICAgICBmb3IgKGxldCBuOCA9IDAsIGk0ID0gMDsgaTQgPCBlNS5sZW5ndGg7IGk0KyspIHsKICAgICAgICBsZXQgczggPSBlNVtpNF07CiAgICAgICAgaWYgKHM4LmVtcHR5ID8gczguZnJvbSA8PSBuOCA6IHM4LmZyb20gPCBuOCkKICAgICAgICAgIHJldHVybiBnMi5ub3JtYWxpemVkKGU1LnNsaWNlKCksIHQ0KTsKICAgICAgICBuOCA9IHM4LnRvOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgZzIoZTUsIHQ0KTsKICAgIH0KICAgIHN0YXRpYyBjdXJzb3IoZTUsIHQ0ID0gMCwgbjgsIGk0KSB7CiAgICAgIHJldHVybiBCMi5jcmVhdGUoZTUsIGU1LCAodDQgPT0gMCA/IDAgOiB0NCA8IDAgPyA0IDogOCkgfCAobjggPT0gbnVsbCA/IDMgOiBNYXRoLm1pbigyLCBuOCkpIHwgKGk0ID8/IDMzNTU0NDMxKSA8PCA1KTsKICAgIH0KICAgIHN0YXRpYyByYW5nZShlNSwgdDQsIG44KSB7CiAgICAgIGxldCBpNCA9IChuOCA/PyAzMzU1NDQzMSkgPDwgNTsKICAgICAgcmV0dXJuIHQ0IDwgZTUgPyBCMi5jcmVhdGUodDQsIGU1LCAxNiB8IGk0IHwgOCkgOiBCMi5jcmVhdGUoZTUsIHQ0LCBpNCB8ICh0NCA+IGU1ID8gNCA6IDApKTsKICAgIH0KICAgIHN0YXRpYyBub3JtYWxpemVkKGU1LCB0NCA9IDApIHsKICAgICAgbGV0IG44ID0gZTVbdDRdOwogICAgICBlNS5zb3J0KChpNCwgczgpID0+IGk0LmZyb20gLSBzOC5mcm9tKSwgdDQgPSBlNS5pbmRleE9mKG44KTsKICAgICAgZm9yIChsZXQgaTQgPSAxOyBpNCA8IGU1Lmxlbmd0aDsgaTQrKykgewogICAgICAgIGxldCBzOCA9IGU1W2k0XSwgcjMgPSBlNVtpNCAtIDFdOwogICAgICAgIGlmIChzOC5lbXB0eSA/IHM4LmZyb20gPD0gcjMudG8gOiBzOC5mcm9tIDwgcjMudG8pIHsKICAgICAgICAgIGxldCBoMTAgPSByMy5mcm9tLCBvNCA9IE1hdGgubWF4KHM4LnRvLCByMy50byk7CiAgICAgICAgICBpNCA8PSB0NCAmJiB0NC0tLCBlNS5zcGxpY2UoLS1pNCwgMiwgczguYW5jaG9yID4gczguaGVhZCA/IGcyLnJhbmdlKG80LCBoMTApIDogZzIucmFuZ2UoaDEwLCBvNCkpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbmV3IGcyKGU1LCB0NCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBWZShsNywgZTUpIHsKICAgIGZvciAobGV0IHQ0IG9mIGw3LnJhbmdlcykKICAgICAgaWYgKHQ0LnRvID4gZTUpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlNlbGVjdGlvbiBwb2ludHMgb3V0c2lkZSBvZiBkb2N1bWVudCIpOwogIH0KICB2YXIgeWUzID0gMDsKICB2YXIgQTIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIG44LCBpNCwgczgpIHsKICAgICAgdGhpcy5jb21iaW5lID0gZTUsIHRoaXMuY29tcGFyZUlucHV0ID0gdDQsIHRoaXMuY29tcGFyZSA9IG44LCB0aGlzLmlzU3RhdGljID0gaTQsIHRoaXMuaWQgPSB5ZTMrKywgdGhpcy5kZWZhdWx0ID0gZTUoW10pLCB0aGlzLmV4dGVuc2lvbnMgPSB0eXBlb2YgczggPT0gImZ1bmN0aW9uIiA/IHM4KHRoaXMpIDogczg7CiAgICB9CiAgICBzdGF0aWMgZGVmaW5lKGU1ID0ge30pIHsKICAgICAgcmV0dXJuIG5ldyBBMihlNS5jb21iaW5lIHx8ICgodDQpID0+IHQ0KSwgZTUuY29tcGFyZUlucHV0IHx8ICgodDQsIG44KSA9PiB0NCA9PT0gbjgpLCBlNS5jb21wYXJlIHx8IChlNS5jb21iaW5lID8gKHQ0LCBuOCkgPT4gdDQgPT09IG44IDogU2UyKSwgISFlNS5zdGF0aWMsIGU1LmVuYWJsZXMpOwogICAgfQogICAgb2YoZTUpIHsKICAgICAgcmV0dXJuIG5ldyB6MyhbXSwgdGhpcywgMCwgZTUpOwogICAgfQogICAgY29tcHV0ZShlNSwgdDQpIHsKICAgICAgaWYgKHRoaXMuaXNTdGF0aWMpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW4ndCBjb21wdXRlIGEgc3RhdGljIGZhY2V0Iik7CiAgICAgIHJldHVybiBuZXcgejMoZTUsIHRoaXMsIDEsIHQ0KTsKICAgIH0KICAgIGNvbXB1dGVOKGU1LCB0NCkgewogICAgICBpZiAodGhpcy5pc1N0YXRpYykKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbid0IGNvbXB1dGUgYSBzdGF0aWMgZmFjZXQiKTsKICAgICAgcmV0dXJuIG5ldyB6MyhlNSwgdGhpcywgMiwgdDQpOwogICAgfQogICAgZnJvbShlNSwgdDQpIHsKICAgICAgcmV0dXJuIHQ0IHx8ICh0NCA9IChuOCkgPT4gbjgpLCB0aGlzLmNvbXB1dGUoW2U1XSwgKG44KSA9PiB0NChuOC5maWVsZChlNSkpKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIFNlMihsNywgZTUpIHsKICAgIHJldHVybiBsNyA9PSBlNSB8fCBsNy5sZW5ndGggPT0gZTUubGVuZ3RoICYmIGw3LmV2ZXJ5KCh0NCwgbjgpID0+IHQ0ID09PSBlNVtuOF0pOwogIH0KICB2YXIgejMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIG44LCBpNCkgewogICAgICB0aGlzLmRlcGVuZGVuY2llcyA9IGU1LCB0aGlzLmZhY2V0ID0gdDQsIHRoaXMudHlwZSA9IG44LCB0aGlzLnZhbHVlID0gaTQsIHRoaXMuaWQgPSB5ZTMrKzsKICAgIH0KICAgIGR5bmFtaWNTbG90KGU1KSB7CiAgICAgIHZhciB0NDsKICAgICAgbGV0IG44ID0gdGhpcy52YWx1ZSwgaTQgPSB0aGlzLmZhY2V0LmNvbXBhcmVJbnB1dCwgczggPSB0aGlzLmlkLCByMyA9IGU1W3M4XSA+PiAxLCBoMTAgPSB0aGlzLnR5cGUgPT0gMiwgbzQgPSBmYWxzZSwgYTQgPSBmYWxzZSwgZjExID0gW107CiAgICAgIGZvciAobGV0IHUxMSBvZiB0aGlzLmRlcGVuZGVuY2llcykKICAgICAgICB1MTEgPT0gImRvYyIgPyBvNCA9IHRydWUgOiB1MTEgPT0gInNlbGVjdGlvbiIgPyBhNCA9IHRydWUgOiAoKCh0NCA9IGU1W3UxMS5pZF0pICE9PSBudWxsICYmIHQ0ICE9PSB2b2lkIDAgPyB0NCA6IDEpICYgMSkgPT0gMCAmJiBmMTEucHVzaChlNVt1MTEuaWRdKTsKICAgICAgcmV0dXJuIHsgY3JlYXRlKHUxMSkgewogICAgICAgIHJldHVybiB1MTEudmFsdWVzW3IzXSA9IG44KHUxMSksIDE7CiAgICAgIH0sIHVwZGF0ZSh1MTEsIGQxNSkgewogICAgICAgIGlmIChvNCAmJiBkMTUuZG9jQ2hhbmdlZCB8fCBhNCAmJiAoZDE1LmRvY0NoYW5nZWQgfHwgZDE1LnNlbGVjdGlvbikgfHwgZ2UzKHUxMSwgZjExKSkgewogICAgICAgICAgbGV0IGMxNyA9IG44KHUxMSk7CiAgICAgICAgICBpZiAoaDEwID8gIU9lMihjMTcsIHUxMS52YWx1ZXNbcjNdLCBpNCkgOiAhaTQoYzE3LCB1MTEudmFsdWVzW3IzXSkpCiAgICAgICAgICAgIHJldHVybiB1MTEudmFsdWVzW3IzXSA9IGMxNywgMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0sIHJlY29uZmlndXJlOiAodTExLCBkMTUpID0+IHsKICAgICAgICBsZXQgYzE3ID0gbjgodTExKSwgcDE4ID0gZDE1LmNvbmZpZy5hZGRyZXNzW3M4XTsKICAgICAgICBpZiAocDE4ICE9IG51bGwpIHsKICAgICAgICAgIGxldCBFMTUgPSByZTIoZDE1LCBwMTgpOwogICAgICAgICAgaWYgKHRoaXMuZGVwZW5kZW5jaWVzLmV2ZXJ5KChrMTgpID0+IGsxOCBpbnN0YW5jZW9mIEEyID8gZDE1LmZhY2V0KGsxOCkgPT09IHUxMS5mYWNldChrMTgpIDogazE4IGluc3RhbmNlb2YgSjIgPyBkMTUuZmllbGQoazE4LCBmYWxzZSkgPT0gdTExLmZpZWxkKGsxOCwgZmFsc2UpIDogdHJ1ZSkgfHwgKGgxMCA/IE9lMihjMTcsIEUxNSwgaTQpIDogaTQoYzE3LCBFMTUpKSkKICAgICAgICAgICAgcmV0dXJuIHUxMS52YWx1ZXNbcjNdID0gRTE1LCAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdTExLnZhbHVlc1tyM10gPSBjMTcsIDE7CiAgICAgIH0gfTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIE9lMihsNywgZTUsIHQ0KSB7CiAgICBpZiAobDcubGVuZ3RoICE9IGU1Lmxlbmd0aCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZm9yIChsZXQgbjggPSAwOyBuOCA8IGw3Lmxlbmd0aDsgbjgrKykKICAgICAgaWYgKCF0NChsN1tuOF0sIGU1W244XSkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGZ1bmN0aW9uIGdlMyhsNywgZTUpIHsKICAgIGxldCB0NCA9IGZhbHNlOwogICAgZm9yIChsZXQgbjggb2YgZTUpCiAgICAgIEsyKGw3LCBuOCkgJiAxICYmICh0NCA9IHRydWUpOwogICAgcmV0dXJuIHQ0OwogIH0KICBmdW5jdGlvbiBLZShsNywgZTUsIHQ0KSB7CiAgICBsZXQgbjggPSB0NC5tYXAoKG80KSA9PiBsN1tvNC5pZF0pLCBpNCA9IHQ0Lm1hcCgobzQpID0+IG80LnR5cGUpLCBzOCA9IG44LmZpbHRlcigobzQpID0+ICEobzQgJiAxKSksIHIzID0gbDdbZTUuaWRdID4+IDE7CiAgICBmdW5jdGlvbiBoMTAobzQpIHsKICAgICAgbGV0IGE0ID0gW107CiAgICAgIGZvciAobGV0IGYxMSA9IDA7IGYxMSA8IG44Lmxlbmd0aDsgZjExKyspIHsKICAgICAgICBsZXQgdTExID0gcmUyKG80LCBuOFtmMTFdKTsKICAgICAgICBpZiAoaTRbZjExXSA9PSAyKQogICAgICAgICAgZm9yIChsZXQgZDE1IG9mIHUxMSkKICAgICAgICAgICAgYTQucHVzaChkMTUpOwogICAgICAgIGVsc2UKICAgICAgICAgIGE0LnB1c2godTExKTsKICAgICAgfQogICAgICByZXR1cm4gZTUuY29tYmluZShhNCk7CiAgICB9CiAgICByZXR1cm4geyBjcmVhdGUobzQpIHsKICAgICAgZm9yIChsZXQgYTQgb2YgbjgpCiAgICAgICAgSzIobzQsIGE0KTsKICAgICAgcmV0dXJuIG80LnZhbHVlc1tyM10gPSBoMTAobzQpLCAxOwogICAgfSwgdXBkYXRlKG80LCBhNCkgewogICAgICBpZiAoIWdlMyhvNCwgczgpKQogICAgICAgIHJldHVybiAwOwogICAgICBsZXQgZjExID0gaDEwKG80KTsKICAgICAgcmV0dXJuIGU1LmNvbXBhcmUoZjExLCBvNC52YWx1ZXNbcjNdKSA/IDAgOiAobzQudmFsdWVzW3IzXSA9IGYxMSwgMSk7CiAgICB9LCByZWNvbmZpZ3VyZShvNCwgYTQpIHsKICAgICAgbGV0IGYxMSA9IGdlMyhvNCwgbjgpLCB1MTEgPSBhNC5jb25maWcuZmFjZXRzW2U1LmlkXSwgZDE1ID0gYTQuZmFjZXQoZTUpOwogICAgICBpZiAodTExICYmICFmMTEgJiYgU2UyKHQ0LCB1MTEpKQogICAgICAgIHJldHVybiBvNC52YWx1ZXNbcjNdID0gZDE1LCAwOwogICAgICBsZXQgYzE3ID0gaDEwKG80KTsKICAgICAgcmV0dXJuIGU1LmNvbXBhcmUoYzE3LCBkMTUpID8gKG80LnZhbHVlc1tyM10gPSBkMTUsIDApIDogKG80LnZhbHVlc1tyM10gPSBjMTcsIDEpOwogICAgfSB9OwogIH0KICB2YXIgRWUyID0gQTIuZGVmaW5lKHsgc3RhdGljOiB0cnVlIH0pOwogIHZhciBKMiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgbjgsIGk0LCBzOCkgewogICAgICB0aGlzLmlkID0gZTUsIHRoaXMuY3JlYXRlRiA9IHQ0LCB0aGlzLnVwZGF0ZUYgPSBuOCwgdGhpcy5jb21wYXJlRiA9IGk0LCB0aGlzLnNwZWMgPSBzOCwgdGhpcy5wcm92aWRlcyA9IHZvaWQgMDsKICAgIH0KICAgIHN0YXRpYyBkZWZpbmUoZTUpIHsKICAgICAgbGV0IHQ0ID0gbmV3IEoyKHllMysrLCBlNS5jcmVhdGUsIGU1LnVwZGF0ZSwgZTUuY29tcGFyZSB8fCAoKG44LCBpNCkgPT4gbjggPT09IGk0KSwgZTUpOwogICAgICByZXR1cm4gZTUucHJvdmlkZSAmJiAodDQucHJvdmlkZXMgPSBlNS5wcm92aWRlKHQ0KSksIHQ0OwogICAgfQogICAgY3JlYXRlKGU1KSB7CiAgICAgIGxldCB0NCA9IGU1LmZhY2V0KEVlMikuZmluZCgobjgpID0+IG44LmZpZWxkID09IHRoaXMpOwogICAgICByZXR1cm4gKHQ0Py5jcmVhdGUgfHwgdGhpcy5jcmVhdGVGKShlNSk7CiAgICB9CiAgICBzbG90KGU1KSB7CiAgICAgIGxldCB0NCA9IGU1W3RoaXMuaWRdID4+IDE7CiAgICAgIHJldHVybiB7IGNyZWF0ZTogKG44KSA9PiAobjgudmFsdWVzW3Q0XSA9IHRoaXMuY3JlYXRlKG44KSwgMSksIHVwZGF0ZTogKG44LCBpNCkgPT4gewogICAgICAgIGxldCBzOCA9IG44LnZhbHVlc1t0NF0sIHIzID0gdGhpcy51cGRhdGVGKHM4LCBpNCk7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZUYoczgsIHIzKSA/IDAgOiAobjgudmFsdWVzW3Q0XSA9IHIzLCAxKTsKICAgICAgfSwgcmVjb25maWd1cmU6IChuOCwgaTQpID0+IGk0LmNvbmZpZy5hZGRyZXNzW3RoaXMuaWRdICE9IG51bGwgPyAobjgudmFsdWVzW3Q0XSA9IGk0LmZpZWxkKHRoaXMpLCAwKSA6IChuOC52YWx1ZXNbdDRdID0gdGhpcy5jcmVhdGUobjgpLCAxKSB9OwogICAgfQogICAgaW5pdChlNSkgewogICAgICByZXR1cm4gW3RoaXMsIEVlMi5vZih7IGZpZWxkOiB0aGlzLCBjcmVhdGU6IGU1IH0pXTsKICAgIH0KICAgIGdldCBleHRlbnNpb24oKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogIH07CiAgdmFyIFQgPSB7IGxvd2VzdDogNCwgbG93OiAzLCBkZWZhdWx0OiAyLCBoaWdoOiAxLCBoaWdoZXN0OiAwIH07CiAgZnVuY3Rpb24gSDIobDcpIHsKICAgIHJldHVybiAoZTUpID0+IG5ldyBzZTIoZTUsIGw3KTsKICB9CiAgdmFyIGx0ID0geyBoaWdoZXN0OiBIMihULmhpZ2hlc3QpLCBoaWdoOiBIMihULmhpZ2gpLCBkZWZhdWx0OiBIMihULmRlZmF1bHQpLCBsb3c6IEgyKFQubG93KSwgbG93ZXN0OiBIMihULmxvd2VzdCkgfTsKICB2YXIgc2UyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0KSB7CiAgICAgIHRoaXMuaW5uZXIgPSBlNSwgdGhpcy5wcmVjID0gdDQ7CiAgICB9CiAgfTsKICB2YXIgVSA9IGNsYXNzIHsKICAgIG9mKGU1KSB7CiAgICAgIHJldHVybiBuZXcgUTIodGhpcywgZTUpOwogICAgfQogICAgcmVjb25maWd1cmUoZTUpIHsKICAgICAgcmV0dXJuIFUucmVjb25maWd1cmUub2YoeyBjb21wYXJ0bWVudDogdGhpcywgZXh0ZW5zaW9uOiBlNSB9KTsKICAgIH0KICAgIGdldChlNSkgewogICAgICByZXR1cm4gZTUuY29uZmlnLmNvbXBhcnRtZW50cy5nZXQodGhpcyk7CiAgICB9CiAgfTsKICB2YXIgUTIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQpIHsKICAgICAgdGhpcy5jb21wYXJ0bWVudCA9IGU1LCB0aGlzLmlubmVyID0gdDQ7CiAgICB9CiAgfTsKICB2YXIgRzMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIG44LCBpNCwgczgsIHIzKSB7CiAgICAgIGZvciAodGhpcy5iYXNlID0gZTUsIHRoaXMuY29tcGFydG1lbnRzID0gdDQsIHRoaXMuZHluYW1pY1Nsb3RzID0gbjgsIHRoaXMuYWRkcmVzcyA9IGk0LCB0aGlzLnN0YXRpY1ZhbHVlcyA9IHM4LCB0aGlzLmZhY2V0cyA9IHIzLCB0aGlzLnN0YXR1c1RlbXBsYXRlID0gW107IHRoaXMuc3RhdHVzVGVtcGxhdGUubGVuZ3RoIDwgbjgubGVuZ3RoOyApCiAgICAgICAgdGhpcy5zdGF0dXNUZW1wbGF0ZS5wdXNoKDApOwogICAgfQogICAgc3RhdGljRmFjZXQoZTUpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5hZGRyZXNzW2U1LmlkXTsKICAgICAgcmV0dXJuIHQ0ID09IG51bGwgPyBlNS5kZWZhdWx0IDogdGhpcy5zdGF0aWNWYWx1ZXNbdDQgPj4gMV07CiAgICB9CiAgICBzdGF0aWMgcmVzb2x2ZShlNSwgdDQsIG44KSB7CiAgICAgIGxldCBpNCA9IFtdLCBzOCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCByMyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIGZvciAobGV0IGQxNSBvZiBRZShlNSwgdDQsIHIzKSkKICAgICAgICBkMTUgaW5zdGFuY2VvZiBKMiA/IGk0LnB1c2goZDE1KSA6IChzOFtkMTUuZmFjZXQuaWRdIHx8IChzOFtkMTUuZmFjZXQuaWRdID0gW10pKS5wdXNoKGQxNSk7CiAgICAgIGxldCBoMTAgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgbzQgPSBbXSwgYTQgPSBbXTsKICAgICAgZm9yIChsZXQgZDE1IG9mIGk0KQogICAgICAgIGgxMFtkMTUuaWRdID0gYTQubGVuZ3RoIDw8IDEsIGE0LnB1c2goKGMxNykgPT4gZDE1LnNsb3QoYzE3KSk7CiAgICAgIGxldCBmMTEgPSBuOD8uY29uZmlnLmZhY2V0czsKICAgICAgZm9yIChsZXQgZDE1IGluIHM4KSB7CiAgICAgICAgbGV0IGMxNyA9IHM4W2QxNV0sIHAxOCA9IGMxN1swXS5mYWNldCwgRTE1ID0gZjExICYmIGYxMVtkMTVdIHx8IFtdOwogICAgICAgIGlmIChjMTcuZXZlcnkoKGsxOCkgPT4gazE4LnR5cGUgPT0gMCkpCiAgICAgICAgICBpZiAoaDEwW3AxOC5pZF0gPSBvNC5sZW5ndGggPDwgMSB8IDEsIFNlMihFMTUsIGMxNykpCiAgICAgICAgICAgIG80LnB1c2gobjguZmFjZXQocDE4KSk7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbGV0IGsxOCA9IHAxOC5jb21iaW5lKGMxNy5tYXAoKGhlMTQpID0+IGhlMTQudmFsdWUpKTsKICAgICAgICAgICAgbzQucHVzaChuOCAmJiBwMTguY29tcGFyZShrMTgsIG44LmZhY2V0KHAxOCkpID8gbjguZmFjZXQocDE4KSA6IGsxOCk7CiAgICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBmb3IgKGxldCBrMTggb2YgYzE3KQogICAgICAgICAgICBrMTgudHlwZSA9PSAwID8gKGgxMFtrMTguaWRdID0gbzQubGVuZ3RoIDw8IDEgfCAxLCBvNC5wdXNoKGsxOC52YWx1ZSkpIDogKGgxMFtrMTguaWRdID0gYTQubGVuZ3RoIDw8IDEsIGE0LnB1c2goKGhlMTQpID0+IGsxOC5keW5hbWljU2xvdChoZTE0KSkpOwogICAgICAgICAgaDEwW3AxOC5pZF0gPSBhNC5sZW5ndGggPDwgMSwgYTQucHVzaCgoazE4KSA9PiBLZShrMTgsIHAxOCwgYzE3KSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxldCB1MTEgPSBhNC5tYXAoKGQxNSkgPT4gZDE1KGgxMCkpOwogICAgICByZXR1cm4gbmV3IEczKGU1LCByMywgdTExLCBoMTAsIG80LCBzOCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBRZShsNywgZTUsIHQ0KSB7CiAgICBsZXQgbjggPSBbW10sIFtdLCBbXSwgW10sIFtdXSwgaTQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZnVuY3Rpb24gczgocjMsIGgxMCkgewogICAgICBsZXQgbzQgPSBpNC5nZXQocjMpOwogICAgICBpZiAobzQgIT0gbnVsbCkgewogICAgICAgIGlmIChvNCA8PSBoMTApCiAgICAgICAgICByZXR1cm47CiAgICAgICAgbGV0IGE0ID0gbjhbbzRdLmluZGV4T2YocjMpOwogICAgICAgIGE0ID4gLTEgJiYgbjhbbzRdLnNwbGljZShhNCwgMSksIHIzIGluc3RhbmNlb2YgUTIgJiYgdDQuZGVsZXRlKHIzLmNvbXBhcnRtZW50KTsKICAgICAgfQogICAgICBpZiAoaTQuc2V0KHIzLCBoMTApLCBBcnJheS5pc0FycmF5KHIzKSkKICAgICAgICBmb3IgKGxldCBhNCBvZiByMykKICAgICAgICAgIHM4KGE0LCBoMTApOwogICAgICBlbHNlIGlmIChyMyBpbnN0YW5jZW9mIFEyKSB7CiAgICAgICAgaWYgKHQ0LmhhcyhyMy5jb21wYXJ0bWVudCkpCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRHVwbGljYXRlIHVzZSBvZiBjb21wYXJ0bWVudCBpbiBleHRlbnNpb25zIik7CiAgICAgICAgbGV0IGE0ID0gZTUuZ2V0KHIzLmNvbXBhcnRtZW50KSB8fCByMy5pbm5lcjsKICAgICAgICB0NC5zZXQocjMuY29tcGFydG1lbnQsIGE0KSwgczgoYTQsIGgxMCk7CiAgICAgIH0gZWxzZSBpZiAocjMgaW5zdGFuY2VvZiBzZTIpCiAgICAgICAgczgocjMuaW5uZXIsIHIzLnByZWMpOwogICAgICBlbHNlIGlmIChyMyBpbnN0YW5jZW9mIEoyKQogICAgICAgIG44W2gxMF0ucHVzaChyMyksIHIzLnByb3ZpZGVzICYmIHM4KHIzLnByb3ZpZGVzLCBoMTApOwogICAgICBlbHNlIGlmIChyMyBpbnN0YW5jZW9mIHozKQogICAgICAgIG44W2gxMF0ucHVzaChyMyksIHIzLmZhY2V0LmV4dGVuc2lvbnMgJiYgczgocjMuZmFjZXQuZXh0ZW5zaW9ucywgVC5kZWZhdWx0KTsKICAgICAgZWxzZSB7CiAgICAgICAgbGV0IGE0ID0gcjMuZXh0ZW5zaW9uOwogICAgICAgIGlmICghYTQpCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBleHRlbnNpb24gdmFsdWUgaW4gZXh0ZW5zaW9uIHNldCAoJHtyM30pLiBUaGlzIHNvbWV0aW1lcyBoYXBwZW5zIGJlY2F1c2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIEBjb2RlbWlycm9yL3N0YXRlIGFyZSBsb2FkZWQsIGJyZWFraW5nIGluc3RhbmNlb2YgY2hlY2tzLmApOwogICAgICAgIHM4KGE0LCBoMTApOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gczgobDcsIFQuZGVmYXVsdCksIG44LnJlZHVjZSgocjMsIGgxMCkgPT4gcjMuY29uY2F0KGgxMCkpOwogIH0KICBmdW5jdGlvbiBLMihsNywgZTUpIHsKICAgIGlmIChlNSAmIDEpCiAgICAgIHJldHVybiAyOwogICAgbGV0IHQ0ID0gZTUgPj4gMSwgbjggPSBsNy5zdGF0dXNbdDRdOwogICAgaWYgKG44ID09IDQpCiAgICAgIHRocm93IG5ldyBFcnJvcigiQ3ljbGljIGRlcGVuZGVuY3kgYmV0d2VlbiBmaWVsZHMgYW5kL29yIGZhY2V0cyIpOwogICAgaWYgKG44ICYgMikKICAgICAgcmV0dXJuIG44OwogICAgbDcuc3RhdHVzW3Q0XSA9IDQ7CiAgICBsZXQgaTQgPSBsNy5jb21wdXRlU2xvdChsNywgbDcuY29uZmlnLmR5bmFtaWNTbG90c1t0NF0pOwogICAgcmV0dXJuIGw3LnN0YXR1c1t0NF0gPSAyIHwgaTQ7CiAgfQogIGZ1bmN0aW9uIHJlMihsNywgZTUpIHsKICAgIHJldHVybiBlNSAmIDEgPyBsNy5jb25maWcuc3RhdGljVmFsdWVzW2U1ID4+IDFdIDogbDcudmFsdWVzW2U1ID4+IDFdOwogIH0KICB2YXIgTmUgPSBBMi5kZWZpbmUoKTsKICB2YXIgRGUyID0gQTIuZGVmaW5lKHsgY29tYmluZTogKGw3KSA9PiBsNy5zb21lKChlNSkgPT4gZTUpLCBzdGF0aWM6IHRydWUgfSk7CiAgdmFyIHFlMiA9IEEyLmRlZmluZSh7IGNvbWJpbmU6IChsNykgPT4gbDcubGVuZ3RoID8gbDdbMF0gOiB2b2lkIDAsIHN0YXRpYzogdHJ1ZSB9KTsKICB2YXIgTGUyID0gQTIuZGVmaW5lKCk7CiAgdmFyICRlMiA9IEEyLmRlZmluZSgpOwogIHZhciB6ZSA9IEEyLmRlZmluZSgpOwogIHZhciBXZSA9IEEyLmRlZmluZSh7IGNvbWJpbmU6IChsNykgPT4gbDcubGVuZ3RoID8gbDdbMF0gOiBmYWxzZSB9KTsKICB2YXIgRDIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQpIHsKICAgICAgdGhpcy50eXBlID0gZTUsIHRoaXMudmFsdWUgPSB0NDsKICAgIH0KICAgIHN0YXRpYyBkZWZpbmUoKSB7CiAgICAgIHJldHVybiBuZXcgcGUzKCk7CiAgICB9CiAgfTsKICB2YXIgcGUzID0gY2xhc3MgewogICAgb2YoZTUpIHsKICAgICAgcmV0dXJuIG5ldyBEMih0aGlzLCBlNSk7CiAgICB9CiAgfTsKICB2YXIgbWUzID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUpIHsKICAgICAgdGhpcy5tYXAgPSBlNTsKICAgIH0KICAgIG9mKGU1KSB7CiAgICAgIHJldHVybiBuZXcgeSh0aGlzLCBlNSk7CiAgICB9CiAgfTsKICB2YXIgeSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCkgewogICAgICB0aGlzLnR5cGUgPSBlNSwgdGhpcy52YWx1ZSA9IHQ0OwogICAgfQogICAgbWFwKGU1KSB7CiAgICAgIGxldCB0NCA9IHRoaXMudHlwZS5tYXAodGhpcy52YWx1ZSwgZTUpOwogICAgICByZXR1cm4gdDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQ0ID09IHRoaXMudmFsdWUgPyB0aGlzIDogbmV3IHkodGhpcy50eXBlLCB0NCk7CiAgICB9CiAgICBpcyhlNSkgewogICAgICByZXR1cm4gdGhpcy50eXBlID09IGU1OwogICAgfQogICAgc3RhdGljIGRlZmluZShlNSA9IHt9KSB7CiAgICAgIHJldHVybiBuZXcgbWUzKGU1Lm1hcCB8fCAoKHQ0KSA9PiB0NCkpOwogICAgfQogICAgc3RhdGljIG1hcEVmZmVjdHMoZTUsIHQ0KSB7CiAgICAgIGlmICghZTUubGVuZ3RoKQogICAgICAgIHJldHVybiBlNTsKICAgICAgbGV0IG44ID0gW107CiAgICAgIGZvciAobGV0IGk0IG9mIGU1KSB7CiAgICAgICAgbGV0IHM4ID0gaTQubWFwKHQ0KTsKICAgICAgICBzOCAmJiBuOC5wdXNoKHM4KTsKICAgICAgfQogICAgICByZXR1cm4gbjg7CiAgICB9CiAgfTsKICB5LnJlY29uZmlndXJlID0geS5kZWZpbmUoKTsKICB5LmFwcGVuZENvbmZpZyA9IHkuZGVmaW5lKCk7CiAgdmFyIFMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIG44LCBpNCwgczgsIHIzKSB7CiAgICAgIHRoaXMuc3RhcnRTdGF0ZSA9IGU1LCB0aGlzLmNoYW5nZXMgPSB0NCwgdGhpcy5zZWxlY3Rpb24gPSBuOCwgdGhpcy5lZmZlY3RzID0gaTQsIHRoaXMuYW5ub3RhdGlvbnMgPSBzOCwgdGhpcy5zY3JvbGxJbnRvVmlldyA9IHIzLCB0aGlzLl9kb2MgPSBudWxsLCB0aGlzLl9zdGF0ZSA9IG51bGwsIG44ICYmIFZlKG44LCB0NC5uZXdMZW5ndGgpLCBzOC5zb21lKChoMTApID0+IGgxMC50eXBlID09IFMudGltZSkgfHwgKHRoaXMuYW5ub3RhdGlvbnMgPSBzOC5jb25jYXQoUy50aW1lLm9mKERhdGUubm93KCkpKSk7CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlKGU1LCB0NCwgbjgsIGk0LCBzOCwgcjMpIHsKICAgICAgcmV0dXJuIG5ldyBTKGU1LCB0NCwgbjgsIGk0LCBzOCwgcjMpOwogICAgfQogICAgZ2V0IG5ld0RvYygpIHsKICAgICAgcmV0dXJuIHRoaXMuX2RvYyB8fCAodGhpcy5fZG9jID0gdGhpcy5jaGFuZ2VzLmFwcGx5KHRoaXMuc3RhcnRTdGF0ZS5kb2MpKTsKICAgIH0KICAgIGdldCBuZXdTZWxlY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbiB8fCB0aGlzLnN0YXJ0U3RhdGUuc2VsZWN0aW9uLm1hcCh0aGlzLmNoYW5nZXMpOwogICAgfQogICAgZ2V0IHN0YXRlKCkgewogICAgICByZXR1cm4gdGhpcy5fc3RhdGUgfHwgdGhpcy5zdGFydFN0YXRlLmFwcGx5VHJhbnNhY3Rpb24odGhpcyksIHRoaXMuX3N0YXRlOwogICAgfQogICAgYW5ub3RhdGlvbihlNSkgewogICAgICBmb3IgKGxldCB0NCBvZiB0aGlzLmFubm90YXRpb25zKQogICAgICAgIGlmICh0NC50eXBlID09IGU1KQogICAgICAgICAgcmV0dXJuIHQ0LnZhbHVlOwogICAgfQogICAgZ2V0IGRvY0NoYW5nZWQoKSB7CiAgICAgIHJldHVybiAhdGhpcy5jaGFuZ2VzLmVtcHR5OwogICAgfQogICAgZ2V0IHJlY29uZmlndXJlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTdGF0ZS5jb25maWcgIT0gdGhpcy5zdGF0ZS5jb25maWc7CiAgICB9CiAgICBpc1VzZXJFdmVudChlNSkgewogICAgICBsZXQgdDQgPSB0aGlzLmFubm90YXRpb24oUy51c2VyRXZlbnQpOwogICAgICByZXR1cm4gISEodDQgJiYgKHQ0ID09IGU1IHx8IHQ0Lmxlbmd0aCA+IGU1Lmxlbmd0aCAmJiB0NC5zbGljZSgwLCBlNS5sZW5ndGgpID09IGU1ICYmIHQ0W2U1Lmxlbmd0aF0gPT0gIi4iKSk7CiAgICB9CiAgfTsKICBTLnRpbWUgPSBEMi5kZWZpbmUoKTsKICBTLnVzZXJFdmVudCA9IEQyLmRlZmluZSgpOwogIFMuYWRkVG9IaXN0b3J5ID0gRDIuZGVmaW5lKCk7CiAgUy5yZW1vdGUgPSBEMi5kZWZpbmUoKTsKICBmdW5jdGlvbiBYZShsNywgZTUpIHsKICAgIGxldCB0NCA9IFtdOwogICAgZm9yIChsZXQgbjggPSAwLCBpNCA9IDA7IDsgKSB7CiAgICAgIGxldCBzOCwgcjM7CiAgICAgIGlmIChuOCA8IGw3Lmxlbmd0aCAmJiAoaTQgPT0gZTUubGVuZ3RoIHx8IGU1W2k0XSA+PSBsN1tuOF0pKQogICAgICAgIHM4ID0gbDdbbjgrK10sIHIzID0gbDdbbjgrK107CiAgICAgIGVsc2UgaWYgKGk0IDwgZTUubGVuZ3RoKQogICAgICAgIHM4ID0gZTVbaTQrK10sIHIzID0gZTVbaTQrK107CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gdDQ7CiAgICAgICF0NC5sZW5ndGggfHwgdDRbdDQubGVuZ3RoIC0gMV0gPCBzOCA/IHQ0LnB1c2goczgsIHIzKSA6IHQ0W3Q0Lmxlbmd0aCAtIDFdIDwgcjMgJiYgKHQ0W3Q0Lmxlbmd0aCAtIDFdID0gcjMpOwogICAgfQogIH0KICBmdW5jdGlvbiBVZShsNywgZTUsIHQ0KSB7CiAgICB2YXIgbjg7CiAgICBsZXQgaTQsIHM4LCByMzsKICAgIHJldHVybiB0NCA/IChpNCA9IGU1LmNoYW5nZXMsIHM4ID0geC5lbXB0eShlNS5jaGFuZ2VzLmxlbmd0aCksIHIzID0gbDcuY2hhbmdlcy5jb21wb3NlKGU1LmNoYW5nZXMpKSA6IChpNCA9IGU1LmNoYW5nZXMubWFwKGw3LmNoYW5nZXMpLCBzOCA9IGw3LmNoYW5nZXMubWFwRGVzYyhlNS5jaGFuZ2VzLCB0cnVlKSwgcjMgPSBsNy5jaGFuZ2VzLmNvbXBvc2UoaTQpKSwgeyBjaGFuZ2VzOiByMywgc2VsZWN0aW9uOiBlNS5zZWxlY3Rpb24gPyBlNS5zZWxlY3Rpb24ubWFwKHM4KSA6IChuOCA9IGw3LnNlbGVjdGlvbikgPT09IG51bGwgfHwgbjggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG44Lm1hcChpNCksIGVmZmVjdHM6IHkubWFwRWZmZWN0cyhsNy5lZmZlY3RzLCBpNCkuY29uY2F0KHkubWFwRWZmZWN0cyhlNS5lZmZlY3RzLCBzOCkpLCBhbm5vdGF0aW9uczogbDcuYW5ub3RhdGlvbnMubGVuZ3RoID8gbDcuYW5ub3RhdGlvbnMuY29uY2F0KGU1LmFubm90YXRpb25zKSA6IGU1LmFubm90YXRpb25zLCBzY3JvbGxJbnRvVmlldzogbDcuc2Nyb2xsSW50b1ZpZXcgfHwgZTUuc2Nyb2xsSW50b1ZpZXcgfTsKICB9CiAgZnVuY3Rpb24gd2UzKGw3LCBlNSwgdDQpIHsKICAgIGxldCBuOCA9IGU1LnNlbGVjdGlvbiwgaTQgPSBXMihlNS5hbm5vdGF0aW9ucyk7CiAgICByZXR1cm4gZTUudXNlckV2ZW50ICYmIChpNCA9IGk0LmNvbmNhdChTLnVzZXJFdmVudC5vZihlNS51c2VyRXZlbnQpKSksIHsgY2hhbmdlczogZTUuY2hhbmdlcyBpbnN0YW5jZW9mIHggPyBlNS5jaGFuZ2VzIDogeC5vZihlNS5jaGFuZ2VzIHx8IFtdLCB0NCwgbDcuZmFjZXQocWUyKSksIHNlbGVjdGlvbjogbjggJiYgKG44IGluc3RhbmNlb2YgZzIgPyBuOCA6IGcyLnNpbmdsZShuOC5hbmNob3IsIG44LmhlYWQpKSwgZWZmZWN0czogVzIoZTUuZWZmZWN0cyksIGFubm90YXRpb25zOiBpNCwgc2Nyb2xsSW50b1ZpZXc6ICEhZTUuc2Nyb2xsSW50b1ZpZXcgfTsKICB9CiAgZnVuY3Rpb24gR2UobDcsIGU1LCB0NCkgewogICAgbGV0IG44ID0gd2UzKGw3LCBlNS5sZW5ndGggPyBlNVswXSA6IHt9LCBsNy5kb2MubGVuZ3RoKTsKICAgIGU1Lmxlbmd0aCAmJiBlNVswXS5maWx0ZXIgPT09IGZhbHNlICYmICh0NCA9IGZhbHNlKTsKICAgIGZvciAobGV0IHM4ID0gMTsgczggPCBlNS5sZW5ndGg7IHM4KyspIHsKICAgICAgZTVbczhdLmZpbHRlciA9PT0gZmFsc2UgJiYgKHQ0ID0gZmFsc2UpOwogICAgICBsZXQgcjMgPSAhIWU1W3M4XS5zZXF1ZW50aWFsOwogICAgICBuOCA9IFVlKG44LCB3ZTMobDcsIGU1W3M4XSwgcjMgPyBuOC5jaGFuZ2VzLm5ld0xlbmd0aCA6IGw3LmRvYy5sZW5ndGgpLCByMyk7CiAgICB9CiAgICBsZXQgaTQgPSBTLmNyZWF0ZShsNywgbjguY2hhbmdlcywgbjguc2VsZWN0aW9uLCBuOC5lZmZlY3RzLCBuOC5hbm5vdGF0aW9ucywgbjguc2Nyb2xsSW50b1ZpZXcpOwogICAgcmV0dXJuIF9lMyh0NCA/IFllKGk0KSA6IGk0KTsKICB9CiAgZnVuY3Rpb24gWWUobDcpIHsKICAgIGxldCBlNSA9IGw3LnN0YXJ0U3RhdGUsIHQ0ID0gdHJ1ZTsKICAgIGZvciAobGV0IGk0IG9mIGU1LmZhY2V0KExlMikpIHsKICAgICAgbGV0IHM4ID0gaTQobDcpOwogICAgICBpZiAoczggPT09IGZhbHNlKSB7CiAgICAgICAgdDQgPSBmYWxzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBBcnJheS5pc0FycmF5KHM4KSAmJiAodDQgPSB0NCA9PT0gdHJ1ZSA/IHM4IDogWGUodDQsIHM4KSk7CiAgICB9CiAgICBpZiAodDQgIT09IHRydWUpIHsKICAgICAgbGV0IGk0LCBzODsKICAgICAgaWYgKHQ0ID09PSBmYWxzZSkKICAgICAgICBzOCA9IGw3LmNoYW5nZXMuaW52ZXJ0ZWREZXNjLCBpNCA9IHguZW1wdHkoZTUuZG9jLmxlbmd0aCk7CiAgICAgIGVsc2UgewogICAgICAgIGxldCByMyA9IGw3LmNoYW5nZXMuZmlsdGVyKHQ0KTsKICAgICAgICBpNCA9IHIzLmNoYW5nZXMsIHM4ID0gcjMuZmlsdGVyZWQubWFwRGVzYyhyMy5jaGFuZ2VzKS5pbnZlcnRlZERlc2M7CiAgICAgIH0KICAgICAgbDcgPSBTLmNyZWF0ZShlNSwgaTQsIGw3LnNlbGVjdGlvbiAmJiBsNy5zZWxlY3Rpb24ubWFwKHM4KSwgeS5tYXBFZmZlY3RzKGw3LmVmZmVjdHMsIHM4KSwgbDcuYW5ub3RhdGlvbnMsIGw3LnNjcm9sbEludG9WaWV3KTsKICAgIH0KICAgIGxldCBuOCA9IGU1LmZhY2V0KCRlMik7CiAgICBmb3IgKGxldCBpNCA9IG44Lmxlbmd0aCAtIDE7IGk0ID49IDA7IGk0LS0pIHsKICAgICAgbGV0IHM4ID0gbjhbaTRdKGw3KTsKICAgICAgczggaW5zdGFuY2VvZiBTID8gbDcgPSBzOCA6IEFycmF5LmlzQXJyYXkoczgpICYmIHM4Lmxlbmd0aCA9PSAxICYmIHM4WzBdIGluc3RhbmNlb2YgUyA/IGw3ID0gczhbMF0gOiBsNyA9IEdlKGU1LCBXMihzOCksIGZhbHNlKTsKICAgIH0KICAgIHJldHVybiBsNzsKICB9CiAgZnVuY3Rpb24gX2UzKGw3KSB7CiAgICBsZXQgZTUgPSBsNy5zdGFydFN0YXRlLCB0NCA9IGU1LmZhY2V0KHplKSwgbjggPSBsNzsKICAgIGZvciAobGV0IGk0ID0gdDQubGVuZ3RoIC0gMTsgaTQgPj0gMDsgaTQtLSkgewogICAgICBsZXQgczggPSB0NFtpNF0obDcpOwogICAgICBzOCAmJiBPYmplY3Qua2V5cyhzOCkubGVuZ3RoICYmIChuOCA9IFVlKG44LCB3ZTMoZTUsIHM4LCBsNy5jaGFuZ2VzLm5ld0xlbmd0aCksIHRydWUpKTsKICAgIH0KICAgIHJldHVybiBuOCA9PSBsNyA/IGw3IDogUy5jcmVhdGUoZTUsIGw3LmNoYW5nZXMsIGw3LnNlbGVjdGlvbiwgbjguZWZmZWN0cywgbjguYW5ub3RhdGlvbnMsIG44LnNjcm9sbEludG9WaWV3KTsKICB9CiAgdmFyIGV0ID0gW107CiAgZnVuY3Rpb24gVzIobDcpIHsKICAgIHJldHVybiBsNyA9PSBudWxsID8gZXQgOiBBcnJheS5pc0FycmF5KGw3KSA/IGw3IDogW2w3XTsKICB9CiAgdmFyIEYgPSBmdW5jdGlvbihsNykgewogICAgcmV0dXJuIGw3W2w3LldvcmQgPSAwXSA9ICJXb3JkIiwgbDdbbDcuU3BhY2UgPSAxXSA9ICJTcGFjZSIsIGw3W2w3Lk90aGVyID0gMl0gPSAiT3RoZXIiLCBsNzsKICB9KEYgfHwgKEYgPSB7fSkpOwogIHZhciB0dCA9IC9bXHUwMGRmXHUwNTg3XHUwNTkwLVx1MDVmNFx1MDYwMC1cdTA2ZmZcdTMwNDAtXHUzMDlmXHUzMGEwLVx1MzBmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhYzAwLVx1ZDdhZl0vOwogIHZhciB2ZTM7CiAgdHJ5IHsKICAgIHZlMyA9IG5ldyBSZWdFeHAoIltcXHB7QWxwaGFiZXRpY31cXHB7TnVtYmVyfV9dIiwgInUiKTsKICB9IGNhdGNoIHsKICB9CiAgZnVuY3Rpb24gbnQobDcpIHsKICAgIGlmICh2ZTMpCiAgICAgIHJldHVybiB2ZTMudGVzdChsNyk7CiAgICBmb3IgKGxldCBlNSA9IDA7IGU1IDwgbDcubGVuZ3RoOyBlNSsrKSB7CiAgICAgIGxldCB0NCA9IGw3W2U1XTsKICAgICAgaWYgKC9cdy8udGVzdCh0NCkgfHwgdDQgPiAiXHg4MCIgJiYgKHQ0LnRvVXBwZXJDYXNlKCkgIT0gdDQudG9Mb3dlckNhc2UoKSB8fCB0dC50ZXN0KHQ0KSkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIGl0KGw3KSB7CiAgICByZXR1cm4gKGU1KSA9PiB7CiAgICAgIGlmICghL1xTLy50ZXN0KGU1KSkKICAgICAgICByZXR1cm4gRi5TcGFjZTsKICAgICAgaWYgKG50KGU1KSkKICAgICAgICByZXR1cm4gRi5Xb3JkOwogICAgICBmb3IgKGxldCB0NCA9IDA7IHQ0IDwgbDcubGVuZ3RoOyB0NCsrKQogICAgICAgIGlmIChlNS5pbmRleE9mKGw3W3Q0XSkgPiAtMSkKICAgICAgICAgIHJldHVybiBGLldvcmQ7CiAgICAgIHJldHVybiBGLk90aGVyOwogICAgfTsKICB9CiAgdmFyIHcgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIG44LCBpNCwgczgsIHIzKSB7CiAgICAgIHRoaXMuY29uZmlnID0gZTUsIHRoaXMuZG9jID0gdDQsIHRoaXMuc2VsZWN0aW9uID0gbjgsIHRoaXMudmFsdWVzID0gaTQsIHRoaXMuc3RhdHVzID0gZTUuc3RhdHVzVGVtcGxhdGUuc2xpY2UoKSwgdGhpcy5jb21wdXRlU2xvdCA9IHM4LCByMyAmJiAocjMuX3N0YXRlID0gdGhpcyk7CiAgICAgIGZvciAobGV0IGgxMCA9IDA7IGgxMCA8IHRoaXMuY29uZmlnLmR5bmFtaWNTbG90cy5sZW5ndGg7IGgxMCsrKQogICAgICAgIEsyKHRoaXMsIGgxMCA8PCAxKTsKICAgICAgdGhpcy5jb21wdXRlU2xvdCA9IG51bGw7CiAgICB9CiAgICBmaWVsZChlNSwgdDQgPSB0cnVlKSB7CiAgICAgIGxldCBuOCA9IHRoaXMuY29uZmlnLmFkZHJlc3NbZTUuaWRdOwogICAgICBpZiAobjggPT0gbnVsbCkgewogICAgICAgIGlmICh0NCkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJGaWVsZCBpcyBub3QgcHJlc2VudCBpbiB0aGlzIHN0YXRlIik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHJldHVybiBLMih0aGlzLCBuOCksIHJlMih0aGlzLCBuOCk7CiAgICB9CiAgICB1cGRhdGUoLi4uZTUpIHsKICAgICAgcmV0dXJuIEdlKHRoaXMsIGU1LCB0cnVlKTsKICAgIH0KICAgIGFwcGx5VHJhbnNhY3Rpb24oZTUpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5jb25maWcsIHsgYmFzZTogbjgsIGNvbXBhcnRtZW50czogaTQgfSA9IHQ0OwogICAgICBmb3IgKGxldCByMyBvZiBlNS5lZmZlY3RzKQogICAgICAgIHIzLmlzKFUucmVjb25maWd1cmUpID8gKHQ0ICYmIChpNCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHQ0LmNvbXBhcnRtZW50cy5mb3JFYWNoKChoMTAsIG80KSA9PiBpNC5zZXQobzQsIGgxMCkpLCB0NCA9IG51bGwpLCBpNC5zZXQocjMudmFsdWUuY29tcGFydG1lbnQsIHIzLnZhbHVlLmV4dGVuc2lvbikpIDogcjMuaXMoeS5yZWNvbmZpZ3VyZSkgPyAodDQgPSBudWxsLCBuOCA9IHIzLnZhbHVlKSA6IHIzLmlzKHkuYXBwZW5kQ29uZmlnKSAmJiAodDQgPSBudWxsLCBuOCA9IFcyKG44KS5jb25jYXQocjMudmFsdWUpKTsKICAgICAgbGV0IHM4OwogICAgICB0NCA/IHM4ID0gZTUuc3RhcnRTdGF0ZS52YWx1ZXMuc2xpY2UoKSA6ICh0NCA9IEczLnJlc29sdmUobjgsIGk0LCB0aGlzKSwgczggPSBuZXcgdyh0NCwgdGhpcy5kb2MsIHRoaXMuc2VsZWN0aW9uLCB0NC5keW5hbWljU2xvdHMubWFwKCgpID0+IG51bGwpLCAoaDEwLCBvNCkgPT4gbzQucmVjb25maWd1cmUoaDEwLCB0aGlzKSwgbnVsbCkudmFsdWVzKSwgbmV3IHcodDQsIGU1Lm5ld0RvYywgZTUubmV3U2VsZWN0aW9uLCBzOCwgKHIzLCBoMTApID0+IGgxMC51cGRhdGUocjMsIGU1KSwgZTUpOwogICAgfQogICAgcmVwbGFjZVNlbGVjdGlvbihlNSkgewogICAgICByZXR1cm4gdHlwZW9mIGU1ID09ICJzdHJpbmciICYmIChlNSA9IHRoaXMudG9UZXh0KGU1KSksIHRoaXMuY2hhbmdlQnlSYW5nZSgodDQpID0+ICh7IGNoYW5nZXM6IHsgZnJvbTogdDQuZnJvbSwgdG86IHQ0LnRvLCBpbnNlcnQ6IGU1IH0sIHJhbmdlOiBnMi5jdXJzb3IodDQuZnJvbSArIGU1Lmxlbmd0aCkgfSkpOwogICAgfQogICAgY2hhbmdlQnlSYW5nZShlNSkgewogICAgICBsZXQgdDQgPSB0aGlzLnNlbGVjdGlvbiwgbjggPSBlNSh0NC5yYW5nZXNbMF0pLCBpNCA9IHRoaXMuY2hhbmdlcyhuOC5jaGFuZ2VzKSwgczggPSBbbjgucmFuZ2VdLCByMyA9IFcyKG44LmVmZmVjdHMpOwogICAgICBmb3IgKGxldCBoMTAgPSAxOyBoMTAgPCB0NC5yYW5nZXMubGVuZ3RoOyBoMTArKykgewogICAgICAgIGxldCBvNCA9IGU1KHQ0LnJhbmdlc1toMTBdKSwgYTQgPSB0aGlzLmNoYW5nZXMobzQuY2hhbmdlcyksIGYxMSA9IGE0Lm1hcChpNCk7CiAgICAgICAgZm9yIChsZXQgZDE1ID0gMDsgZDE1IDwgaDEwOyBkMTUrKykKICAgICAgICAgIHM4W2QxNV0gPSBzOFtkMTVdLm1hcChmMTEpOwogICAgICAgIGxldCB1MTEgPSBpNC5tYXBEZXNjKGE0LCB0cnVlKTsKICAgICAgICBzOC5wdXNoKG80LnJhbmdlLm1hcCh1MTEpKSwgaTQgPSBpNC5jb21wb3NlKGYxMSksIHIzID0geS5tYXBFZmZlY3RzKHIzLCBmMTEpLmNvbmNhdCh5Lm1hcEVmZmVjdHMoVzIobzQuZWZmZWN0cyksIHUxMSkpOwogICAgICB9CiAgICAgIHJldHVybiB7IGNoYW5nZXM6IGk0LCBzZWxlY3Rpb246IGcyLmNyZWF0ZShzOCwgdDQubWFpbkluZGV4KSwgZWZmZWN0czogcjMgfTsKICAgIH0KICAgIGNoYW5nZXMoZTUgPSBbXSkgewogICAgICByZXR1cm4gZTUgaW5zdGFuY2VvZiB4ID8gZTUgOiB4Lm9mKGU1LCB0aGlzLmRvYy5sZW5ndGgsIHRoaXMuZmFjZXQody5saW5lU2VwYXJhdG9yKSk7CiAgICB9CiAgICB0b1RleHQoZTUpIHsKICAgICAgcmV0dXJuIHYub2YoZTUuc3BsaXQodGhpcy5mYWNldCh3LmxpbmVTZXBhcmF0b3IpIHx8IHVlMikpOwogICAgfQogICAgc2xpY2VEb2MoZTUgPSAwLCB0NCA9IHRoaXMuZG9jLmxlbmd0aCkgewogICAgICByZXR1cm4gdGhpcy5kb2Muc2xpY2VTdHJpbmcoZTUsIHQ0LCB0aGlzLmxpbmVCcmVhayk7CiAgICB9CiAgICBmYWNldChlNSkgewogICAgICBsZXQgdDQgPSB0aGlzLmNvbmZpZy5hZGRyZXNzW2U1LmlkXTsKICAgICAgcmV0dXJuIHQ0ID09IG51bGwgPyBlNS5kZWZhdWx0IDogKEsyKHRoaXMsIHQ0KSwgcmUyKHRoaXMsIHQ0KSk7CiAgICB9CiAgICB0b0pTT04oZTUpIHsKICAgICAgbGV0IHQ0ID0geyBkb2M6IHRoaXMuc2xpY2VEb2MoKSwgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvbi50b0pTT04oKSB9OwogICAgICBpZiAoZTUpCiAgICAgICAgZm9yIChsZXQgbjggaW4gZTUpIHsKICAgICAgICAgIGxldCBpNCA9IGU1W244XTsKICAgICAgICAgIGk0IGluc3RhbmNlb2YgSjIgJiYgdGhpcy5jb25maWcuYWRkcmVzc1tpNC5pZF0gIT0gbnVsbCAmJiAodDRbbjhdID0gaTQuc3BlYy50b0pTT04odGhpcy5maWVsZChlNVtuOF0pLCB0aGlzKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gdDQ7CiAgICB9CiAgICBzdGF0aWMgZnJvbUpTT04oZTUsIHQ0ID0ge30sIG44KSB7CiAgICAgIGlmICghZTUgfHwgdHlwZW9mIGU1LmRvYyAhPSAic3RyaW5nIikKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBKU09OIHJlcHJlc2VudGF0aW9uIGZvciBFZGl0b3JTdGF0ZSIpOwogICAgICBsZXQgaTQgPSBbXTsKICAgICAgaWYgKG44KSB7CiAgICAgICAgZm9yIChsZXQgczggaW4gbjgpCiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGU1LCBzOCkpIHsKICAgICAgICAgICAgbGV0IHIzID0gbjhbczhdLCBoMTAgPSBlNVtzOF07CiAgICAgICAgICAgIGk0LnB1c2gocjMuaW5pdCgobzQpID0+IHIzLnNwZWMuZnJvbUpTT04oaDEwLCBvNCkpKTsKICAgICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdy5jcmVhdGUoeyBkb2M6IGU1LmRvYywgc2VsZWN0aW9uOiBnMi5mcm9tSlNPTihlNS5zZWxlY3Rpb24pLCBleHRlbnNpb25zOiB0NC5leHRlbnNpb25zID8gaTQuY29uY2F0KFt0NC5leHRlbnNpb25zXSkgOiBpNCB9KTsKICAgIH0KICAgIHN0YXRpYyBjcmVhdGUoZTUgPSB7fSkgewogICAgICBsZXQgdDQgPSBHMy5yZXNvbHZlKGU1LmV4dGVuc2lvbnMgfHwgW10sIC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpLCBuOCA9IGU1LmRvYyBpbnN0YW5jZW9mIHYgPyBlNS5kb2MgOiB2Lm9mKChlNS5kb2MgfHwgIiIpLnNwbGl0KHQ0LnN0YXRpY0ZhY2V0KHcubGluZVNlcGFyYXRvcikgfHwgdWUyKSksIGk0ID0gZTUuc2VsZWN0aW9uID8gZTUuc2VsZWN0aW9uIGluc3RhbmNlb2YgZzIgPyBlNS5zZWxlY3Rpb24gOiBnMi5zaW5nbGUoZTUuc2VsZWN0aW9uLmFuY2hvciwgZTUuc2VsZWN0aW9uLmhlYWQpIDogZzIuc2luZ2xlKDApOwogICAgICByZXR1cm4gVmUoaTQsIG44Lmxlbmd0aCksIHQ0LnN0YXRpY0ZhY2V0KERlMikgfHwgKGk0ID0gaTQuYXNTaW5nbGUoKSksIG5ldyB3KHQ0LCBuOCwgaTQsIHQ0LmR5bmFtaWNTbG90cy5tYXAoKCkgPT4gbnVsbCksIChzOCwgcjMpID0+IHIzLmNyZWF0ZShzOCksIG51bGwpOwogICAgfQogICAgZ2V0IHRhYlNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLmZhY2V0KHcudGFiU2l6ZSk7CiAgICB9CiAgICBnZXQgbGluZUJyZWFrKCkgewogICAgICByZXR1cm4gdGhpcy5mYWNldCh3LmxpbmVTZXBhcmF0b3IpIHx8IGAKYDsKICAgIH0KICAgIGdldCByZWFkT25seSgpIHsKICAgICAgcmV0dXJuIHRoaXMuZmFjZXQoV2UpOwogICAgfQogICAgcGhyYXNlKGU1LCAuLi50NCkgewogICAgICBmb3IgKGxldCBuOCBvZiB0aGlzLmZhY2V0KHcucGhyYXNlcykpCiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuOCwgZTUpKSB7CiAgICAgICAgICBlNSA9IG44W2U1XTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgcmV0dXJuIHQ0Lmxlbmd0aCAmJiAoZTUgPSBlNS5yZXBsYWNlKC9cJChcJHxcZCopL2csIChuOCwgaTQpID0+IHsKICAgICAgICBpZiAoaTQgPT0gIiQiKQogICAgICAgICAgcmV0dXJuICIkIjsKICAgICAgICBsZXQgczggPSArKGk0IHx8IDEpOwogICAgICAgIHJldHVybiAhczggfHwgczggPiB0NC5sZW5ndGggPyBuOCA6IHQ0W3M4IC0gMV07CiAgICAgIH0pKSwgZTU7CiAgICB9CiAgICBsYW5ndWFnZURhdGFBdChlNSwgdDQsIG44ID0gLTEpIHsKICAgICAgbGV0IGk0ID0gW107CiAgICAgIGZvciAobGV0IHM4IG9mIHRoaXMuZmFjZXQoTmUpKQogICAgICAgIGZvciAobGV0IHIzIG9mIHM4KHRoaXMsIHQ0LCBuOCkpCiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocjMsIGU1KSAmJiBpNC5wdXNoKHIzW2U1XSk7CiAgICAgIHJldHVybiBpNDsKICAgIH0KICAgIGNoYXJDYXRlZ29yaXplcihlNSkgewogICAgICByZXR1cm4gaXQodGhpcy5sYW5ndWFnZURhdGFBdCgid29yZENoYXJzIiwgZTUpLmpvaW4oIiIpKTsKICAgIH0KICAgIHdvcmRBdChlNSkgewogICAgICBsZXQgeyB0ZXh0OiB0NCwgZnJvbTogbjgsIGxlbmd0aDogaTQgfSA9IHRoaXMuZG9jLmxpbmVBdChlNSksIHM4ID0gdGhpcy5jaGFyQ2F0ZWdvcml6ZXIoZTUpLCByMyA9IGU1IC0gbjgsIGgxMCA9IGU1IC0gbjg7CiAgICAgIGZvciAoOyByMyA+IDA7ICkgewogICAgICAgIGxldCBvNCA9IGllMih0NCwgcjMsIGZhbHNlKTsKICAgICAgICBpZiAoczgodDQuc2xpY2UobzQsIHIzKSkgIT0gRi5Xb3JkKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgcjMgPSBvNDsKICAgICAgfQogICAgICBmb3IgKDsgaDEwIDwgaTQ7ICkgewogICAgICAgIGxldCBvNCA9IGllMih0NCwgaDEwKTsKICAgICAgICBpZiAoczgodDQuc2xpY2UoaDEwLCBvNCkpICE9IEYuV29yZCkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGgxMCA9IG80OwogICAgICB9CiAgICAgIHJldHVybiByMyA9PSBoMTAgPyBudWxsIDogZzIucmFuZ2UocjMgKyBuOCwgaDEwICsgbjgpOwogICAgfQogIH07CiAgdy5hbGxvd011bHRpcGxlU2VsZWN0aW9ucyA9IERlMjsKICB3LnRhYlNpemUgPSBBMi5kZWZpbmUoeyBjb21iaW5lOiAobDcpID0+IGw3Lmxlbmd0aCA/IGw3WzBdIDogNCB9KTsKICB3LmxpbmVTZXBhcmF0b3IgPSBxZTI7CiAgdy5yZWFkT25seSA9IFdlOwogIHcucGhyYXNlcyA9IEEyLmRlZmluZSh7IGNvbXBhcmUobDcsIGU1KSB7CiAgICBsZXQgdDQgPSBPYmplY3Qua2V5cyhsNyksIG44ID0gT2JqZWN0LmtleXMoZTUpOwogICAgcmV0dXJuIHQ0Lmxlbmd0aCA9PSBuOC5sZW5ndGggJiYgdDQuZXZlcnkoKGk0KSA9PiBsN1tpNF0gPT0gZTVbaTRdKTsKICB9IH0pOwogIHcubGFuZ3VhZ2VEYXRhID0gTmU7CiAgdy5jaGFuZ2VGaWx0ZXIgPSBMZTI7CiAgdy50cmFuc2FjdGlvbkZpbHRlciA9ICRlMjsKICB3LnRyYW5zYWN0aW9uRXh0ZW5kZXIgPSB6ZTsKICBVLnJlY29uZmlndXJlID0geS5kZWZpbmUoKTsKICBmdW5jdGlvbiBodChsNywgZTUsIHQ0ID0ge30pIHsKICAgIGxldCBuOCA9IHt9OwogICAgZm9yIChsZXQgaTQgb2YgbDcpCiAgICAgIGZvciAobGV0IHM4IG9mIE9iamVjdC5rZXlzKGk0KSkgewogICAgICAgIGxldCByMyA9IGk0W3M4XSwgaDEwID0gbjhbczhdOwogICAgICAgIGlmIChoMTAgPT09IHZvaWQgMCkKICAgICAgICAgIG44W3M4XSA9IHIzOwogICAgICAgIGVsc2UgaWYgKCEoaDEwID09PSByMyB8fCByMyA9PT0gdm9pZCAwKSkKICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0NCwgczgpKQogICAgICAgICAgICBuOFtzOF0gPSB0NFtzOF0oaDEwLCByMyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ29uZmlnIG1lcmdlIGNvbmZsaWN0IGZvciBmaWVsZCAiICsgczgpOwogICAgICB9CiAgICBmb3IgKGxldCBpNCBpbiBlNSkKICAgICAgbjhbaTRdID09PSB2b2lkIDAgJiYgKG44W2k0XSA9IGU1W2k0XSk7CiAgICByZXR1cm4gbjg7CiAgfQogIHZhciBqID0gY2xhc3MgewogICAgZXEoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMgPT0gZTU7CiAgICB9CiAgICByYW5nZShlNSwgdDQgPSBlNSkgewogICAgICByZXR1cm4gcS5jcmVhdGUoZTUsIHQ0LCB0aGlzKTsKICAgIH0KICB9OwogIGoucHJvdG90eXBlLnN0YXJ0U2lkZSA9IGoucHJvdG90eXBlLmVuZFNpZGUgPSAwOwogIGoucHJvdG90eXBlLnBvaW50ID0gZmFsc2U7CiAgai5wcm90b3R5cGUubWFwTW9kZSA9IE0uVHJhY2tEZWw7CiAgdmFyIHEgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIG44KSB7CiAgICAgIHRoaXMuZnJvbSA9IGU1LCB0aGlzLnRvID0gdDQsIHRoaXMudmFsdWUgPSBuODsKICAgIH0KICAgIHN0YXRpYyBjcmVhdGUoZTUsIHQ0LCBuOCkgewogICAgICByZXR1cm4gbmV3IHEoZTUsIHQ0LCBuOCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBrZTMobDcsIGU1KSB7CiAgICByZXR1cm4gbDcuZnJvbSAtIGU1LmZyb20gfHwgbDcudmFsdWUuc3RhcnRTaWRlIC0gZTUudmFsdWUuc3RhcnRTaWRlOwogIH0KICB2YXIgWDMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIG44LCBpNCkgewogICAgICB0aGlzLmZyb20gPSBlNSwgdGhpcy50byA9IHQ0LCB0aGlzLnZhbHVlID0gbjgsIHRoaXMubWF4UG9pbnQgPSBpNDsKICAgIH0KICAgIGdldCBsZW5ndGgoKSB7CiAgICAgIHJldHVybiB0aGlzLnRvW3RoaXMudG8ubGVuZ3RoIC0gMV07CiAgICB9CiAgICBmaW5kSW5kZXgoZTUsIHQ0LCBuOCwgaTQgPSAwKSB7CiAgICAgIGxldCBzOCA9IG44ID8gdGhpcy50byA6IHRoaXMuZnJvbTsKICAgICAgZm9yIChsZXQgcjMgPSBpNCwgaDEwID0gczgubGVuZ3RoOyA7ICkgewogICAgICAgIGlmIChyMyA9PSBoMTApCiAgICAgICAgICByZXR1cm4gcjM7CiAgICAgICAgbGV0IG80ID0gcjMgKyBoMTAgPj4gMSwgYTQgPSBzOFtvNF0gLSBlNSB8fCAobjggPyB0aGlzLnZhbHVlW280XS5lbmRTaWRlIDogdGhpcy52YWx1ZVtvNF0uc3RhcnRTaWRlKSAtIHQ0OwogICAgICAgIGlmIChvNCA9PSByMykKICAgICAgICAgIHJldHVybiBhNCA+PSAwID8gcjMgOiBoMTA7CiAgICAgICAgYTQgPj0gMCA/IGgxMCA9IG80IDogcjMgPSBvNCArIDE7CiAgICAgIH0KICAgIH0KICAgIGJldHdlZW4oZTUsIHQ0LCBuOCwgaTQpIHsKICAgICAgZm9yIChsZXQgczggPSB0aGlzLmZpbmRJbmRleCh0NCwgLTFlOSwgdHJ1ZSksIHIzID0gdGhpcy5maW5kSW5kZXgobjgsIDFlOSwgZmFsc2UsIHM4KTsgczggPCByMzsgczgrKykKICAgICAgICBpZiAoaTQodGhpcy5mcm9tW3M4XSArIGU1LCB0aGlzLnRvW3M4XSArIGU1LCB0aGlzLnZhbHVlW3M4XSkgPT09IGZhbHNlKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgbWFwKGU1LCB0NCkgewogICAgICBsZXQgbjggPSBbXSwgaTQgPSBbXSwgczggPSBbXSwgcjMgPSAtMSwgaDEwID0gLTE7CiAgICAgIGZvciAobGV0IG80ID0gMDsgbzQgPCB0aGlzLnZhbHVlLmxlbmd0aDsgbzQrKykgewogICAgICAgIGxldCBhNCA9IHRoaXMudmFsdWVbbzRdLCBmMTEgPSB0aGlzLmZyb21bbzRdICsgZTUsIHUxMSA9IHRoaXMudG9bbzRdICsgZTUsIGQxNSwgYzE3OwogICAgICAgIGlmIChmMTEgPT0gdTExKSB7CiAgICAgICAgICBsZXQgcDE4ID0gdDQubWFwUG9zKGYxMSwgYTQuc3RhcnRTaWRlLCBhNC5tYXBNb2RlKTsKICAgICAgICAgIGlmIChwMTggPT0gbnVsbCB8fCAoZDE1ID0gYzE3ID0gcDE4LCBhNC5zdGFydFNpZGUgIT0gYTQuZW5kU2lkZSAmJiAoYzE3ID0gdDQubWFwUG9zKGYxMSwgYTQuZW5kU2lkZSksIGMxNyA8IGQxNSkpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9IGVsc2UgaWYgKGQxNSA9IHQ0Lm1hcFBvcyhmMTEsIGE0LnN0YXJ0U2lkZSksIGMxNyA9IHQ0Lm1hcFBvcyh1MTEsIGE0LmVuZFNpZGUpLCBkMTUgPiBjMTcgfHwgZDE1ID09IGMxNyAmJiBhNC5zdGFydFNpZGUgPiAwICYmIGE0LmVuZFNpZGUgPD0gMCkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIChjMTcgLSBkMTUgfHwgYTQuZW5kU2lkZSAtIGE0LnN0YXJ0U2lkZSkgPCAwIHx8IChyMyA8IDAgJiYgKHIzID0gZDE1KSwgYTQucG9pbnQgJiYgKGgxMCA9IE1hdGgubWF4KGgxMCwgYzE3IC0gZDE1KSksIG44LnB1c2goYTQpLCBpNC5wdXNoKGQxNSAtIHIzKSwgczgucHVzaChjMTcgLSByMykpOwogICAgICB9CiAgICAgIHJldHVybiB7IG1hcHBlZDogbjgubGVuZ3RoID8gbmV3IFgzKGk0LCBzOCwgbjgsIGgxMCkgOiBudWxsLCBwb3M6IHIzIH07CiAgICB9CiAgfTsKICB2YXIgUCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgbjgsIGk0KSB7CiAgICAgIHRoaXMuY2h1bmtQb3MgPSBlNSwgdGhpcy5jaHVuayA9IHQ0LCB0aGlzLm5leHRMYXllciA9IG44LCB0aGlzLm1heFBvaW50ID0gaTQ7CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlKGU1LCB0NCwgbjgsIGk0KSB7CiAgICAgIHJldHVybiBuZXcgUChlNSwgdDQsIG44LCBpNCk7CiAgICB9CiAgICBnZXQgbGVuZ3RoKCkgewogICAgICBsZXQgZTUgPSB0aGlzLmNodW5rLmxlbmd0aCAtIDE7CiAgICAgIHJldHVybiBlNSA8IDAgPyAwIDogTWF0aC5tYXgodGhpcy5jaHVua0VuZChlNSksIHRoaXMubmV4dExheWVyLmxlbmd0aCk7CiAgICB9CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgaWYgKHRoaXMuaXNFbXB0eSkKICAgICAgICByZXR1cm4gMDsKICAgICAgbGV0IGU1ID0gdGhpcy5uZXh0TGF5ZXIuc2l6ZTsKICAgICAgZm9yIChsZXQgdDQgb2YgdGhpcy5jaHVuaykKICAgICAgICBlNSArPSB0NC52YWx1ZS5sZW5ndGg7CiAgICAgIHJldHVybiBlNTsKICAgIH0KICAgIGNodW5rRW5kKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLmNodW5rUG9zW2U1XSArIHRoaXMuY2h1bmtbZTVdLmxlbmd0aDsKICAgIH0KICAgIHVwZGF0ZShlNSkgewogICAgICBsZXQgeyBhZGQ6IHQ0ID0gW10sIHNvcnQ6IG44ID0gZmFsc2UsIGZpbHRlckZyb206IGk0ID0gMCwgZmlsdGVyVG86IHM4ID0gdGhpcy5sZW5ndGggfSA9IGU1LCByMyA9IGU1LmZpbHRlcjsKICAgICAgaWYgKHQ0Lmxlbmd0aCA9PSAwICYmICFyMykKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgaWYgKG44ICYmICh0NCA9IHQ0LnNsaWNlKCkuc29ydChrZTMpKSwgdGhpcy5pc0VtcHR5KQogICAgICAgIHJldHVybiB0NC5sZW5ndGggPyBQLm9mKHQ0KSA6IHRoaXM7CiAgICAgIGxldCBoMTAgPSBuZXcgbGUyKHRoaXMsIG51bGwsIC0xKS5nb3RvKDApLCBvNCA9IDAsIGE0ID0gW10sIGYxMSA9IG5ldyBaMigpOwogICAgICBmb3IgKDsgaDEwLnZhbHVlIHx8IG80IDwgdDQubGVuZ3RoOyApCiAgICAgICAgaWYgKG80IDwgdDQubGVuZ3RoICYmIChoMTAuZnJvbSAtIHQ0W280XS5mcm9tIHx8IGgxMC5zdGFydFNpZGUgLSB0NFtvNF0udmFsdWUuc3RhcnRTaWRlKSA+PSAwKSB7CiAgICAgICAgICBsZXQgdTExID0gdDRbbzQrK107CiAgICAgICAgICBmMTEuYWRkSW5uZXIodTExLmZyb20sIHUxMS50bywgdTExLnZhbHVlKSB8fCBhNC5wdXNoKHUxMSk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBoMTAucmFuZ2VJbmRleCA9PSAxICYmIGgxMC5jaHVua0luZGV4IDwgdGhpcy5jaHVuay5sZW5ndGggJiYgKG80ID09IHQ0Lmxlbmd0aCB8fCB0aGlzLmNodW5rRW5kKGgxMC5jaHVua0luZGV4KSA8IHQ0W280XS5mcm9tKSAmJiAoIXIzIHx8IGk0ID4gdGhpcy5jaHVua0VuZChoMTAuY2h1bmtJbmRleCkgfHwgczggPCB0aGlzLmNodW5rUG9zW2gxMC5jaHVua0luZGV4XSkgJiYgZjExLmFkZENodW5rKHRoaXMuY2h1bmtQb3NbaDEwLmNodW5rSW5kZXhdLCB0aGlzLmNodW5rW2gxMC5jaHVua0luZGV4XSkgPyBoMTAubmV4dENodW5rKCkgOiAoKCFyMyB8fCBpNCA+IGgxMC50byB8fCBzOCA8IGgxMC5mcm9tIHx8IHIzKGgxMC5mcm9tLCBoMTAudG8sIGgxMC52YWx1ZSkpICYmIChmMTEuYWRkSW5uZXIoaDEwLmZyb20sIGgxMC50bywgaDEwLnZhbHVlKSB8fCBhNC5wdXNoKHEuY3JlYXRlKGgxMC5mcm9tLCBoMTAudG8sIGgxMC52YWx1ZSkpKSwgaDEwLm5leHQoKSk7CiAgICAgIHJldHVybiBmMTEuZmluaXNoSW5uZXIodGhpcy5uZXh0TGF5ZXIuaXNFbXB0eSAmJiAhYTQubGVuZ3RoID8gUC5lbXB0eSA6IHRoaXMubmV4dExheWVyLnVwZGF0ZSh7IGFkZDogYTQsIGZpbHRlcjogcjMsIGZpbHRlckZyb206IGk0LCBmaWx0ZXJUbzogczggfSkpOwogICAgfQogICAgbWFwKGU1KSB7CiAgICAgIGlmIChlNS5lbXB0eSB8fCB0aGlzLmlzRW1wdHkpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIGxldCB0NCA9IFtdLCBuOCA9IFtdLCBpNCA9IC0xOwogICAgICBmb3IgKGxldCByMyA9IDA7IHIzIDwgdGhpcy5jaHVuay5sZW5ndGg7IHIzKyspIHsKICAgICAgICBsZXQgaDEwID0gdGhpcy5jaHVua1Bvc1tyM10sIG80ID0gdGhpcy5jaHVua1tyM10sIGE0ID0gZTUudG91Y2hlc1JhbmdlKGgxMCwgaDEwICsgbzQubGVuZ3RoKTsKICAgICAgICBpZiAoYTQgPT09IGZhbHNlKQogICAgICAgICAgaTQgPSBNYXRoLm1heChpNCwgbzQubWF4UG9pbnQpLCB0NC5wdXNoKG80KSwgbjgucHVzaChlNS5tYXBQb3MoaDEwKSk7CiAgICAgICAgZWxzZSBpZiAoYTQgPT09IHRydWUpIHsKICAgICAgICAgIGxldCB7IG1hcHBlZDogZjExLCBwb3M6IHUxMSB9ID0gbzQubWFwKGgxMCwgZTUpOwogICAgICAgICAgZjExICYmIChpNCA9IE1hdGgubWF4KGk0LCBmMTEubWF4UG9pbnQpLCB0NC5wdXNoKGYxMSksIG44LnB1c2godTExKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxldCBzOCA9IHRoaXMubmV4dExheWVyLm1hcChlNSk7CiAgICAgIHJldHVybiB0NC5sZW5ndGggPT0gMCA/IHM4IDogbmV3IFAobjgsIHQ0LCBzOCB8fCBQLmVtcHR5LCBpNCk7CiAgICB9CiAgICBiZXR3ZWVuKGU1LCB0NCwgbjgpIHsKICAgICAgaWYgKCF0aGlzLmlzRW1wdHkpIHsKICAgICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgdGhpcy5jaHVuay5sZW5ndGg7IGk0KyspIHsKICAgICAgICAgIGxldCBzOCA9IHRoaXMuY2h1bmtQb3NbaTRdLCByMyA9IHRoaXMuY2h1bmtbaTRdOwogICAgICAgICAgaWYgKHQ0ID49IHM4ICYmIGU1IDw9IHM4ICsgcjMubGVuZ3RoICYmIHIzLmJldHdlZW4oczgsIGU1IC0gczgsIHQ0IC0gczgsIG44KSA9PT0gZmFsc2UpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5uZXh0TGF5ZXIuYmV0d2VlbihlNSwgdDQsIG44KTsKICAgICAgfQogICAgfQogICAgaXRlcihlNSA9IDApIHsKICAgICAgcmV0dXJuIEwuZnJvbShbdGhpc10pLmdvdG8oZTUpOwogICAgfQogICAgZ2V0IGlzRW1wdHkoKSB7CiAgICAgIHJldHVybiB0aGlzLm5leHRMYXllciA9PSB0aGlzOwogICAgfQogICAgc3RhdGljIGl0ZXIoZTUsIHQ0ID0gMCkgewogICAgICByZXR1cm4gTC5mcm9tKGU1KS5nb3RvKHQ0KTsKICAgIH0KICAgIHN0YXRpYyBjb21wYXJlKGU1LCB0NCwgbjgsIGk0LCBzOCA9IC0xKSB7CiAgICAgIGxldCByMyA9IGU1LmZpbHRlcigodTExKSA9PiB1MTEubWF4UG9pbnQgPiAwIHx8ICF1MTEuaXNFbXB0eSAmJiB1MTEubWF4UG9pbnQgPj0gczgpLCBoMTAgPSB0NC5maWx0ZXIoKHUxMSkgPT4gdTExLm1heFBvaW50ID4gMCB8fCAhdTExLmlzRW1wdHkgJiYgdTExLm1heFBvaW50ID49IHM4KSwgbzQgPSBCZShyMywgaDEwLCBuOCksIGE0ID0gbmV3IEMocjMsIG80LCBzOCksIGYxMSA9IG5ldyBDKGgxMCwgbzQsIHM4KTsKICAgICAgbjguaXRlckdhcHMoKHUxMSwgZDE1LCBjMTcpID0+IE1lMyhhNCwgdTExLCBmMTEsIGQxNSwgYzE3LCBpNCkpLCBuOC5lbXB0eSAmJiBuOC5sZW5ndGggPT0gMCAmJiBNZTMoYTQsIDAsIGYxMSwgMCwgMCwgaTQpOwogICAgfQogICAgc3RhdGljIGVxKGU1LCB0NCwgbjggPSAwLCBpNCkgewogICAgICBpNCA9PSBudWxsICYmIChpNCA9IDFlOSk7CiAgICAgIGxldCBzOCA9IGU1LmZpbHRlcigoZjExKSA9PiAhZjExLmlzRW1wdHkgJiYgdDQuaW5kZXhPZihmMTEpIDwgMCksIHIzID0gdDQuZmlsdGVyKChmMTEpID0+ICFmMTEuaXNFbXB0eSAmJiBlNS5pbmRleE9mKGYxMSkgPCAwKTsKICAgICAgaWYgKHM4Lmxlbmd0aCAhPSByMy5sZW5ndGgpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoIXM4Lmxlbmd0aCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgbGV0IGgxMCA9IEJlKHM4LCByMyksIG80ID0gbmV3IEMoczgsIGgxMCwgMCkuZ290byhuOCksIGE0ID0gbmV3IEMocjMsIGgxMCwgMCkuZ290byhuOCk7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGlmIChvNC50byAhPSBhNC50byB8fCAheGUzKG80LmFjdGl2ZSwgYTQuYWN0aXZlKSB8fCBvNC5wb2ludCAmJiAoIWE0LnBvaW50IHx8ICFvNC5wb2ludC5lcShhNC5wb2ludCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChvNC50byA+IGk0KQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgbzQubmV4dCgpLCBhNC5uZXh0KCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyBzcGFucyhlNSwgdDQsIG44LCBpNCwgczggPSAtMSkgewogICAgICBsZXQgcjMgPSBuZXcgQyhlNSwgbnVsbCwgczgpLmdvdG8odDQpLCBoMTAgPSB0NCwgbzQgPSByMy5vcGVuU3RhcnQ7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGxldCBhNCA9IE1hdGgubWluKHIzLnRvLCBuOCk7CiAgICAgICAgaWYgKHIzLnBvaW50ID8gKGk0LnBvaW50KGgxMCwgYTQsIHIzLnBvaW50LCByMy5hY3RpdmVGb3JQb2ludChyMy50byksIG80LCByMy5wb2ludFJhbmspLCBvNCA9IHIzLm9wZW5FbmQoYTQpICsgKHIzLnRvID4gYTQgPyAxIDogMCkpIDogYTQgPiBoMTAgJiYgKGk0LnNwYW4oaDEwLCBhNCwgcjMuYWN0aXZlLCBvNCksIG80ID0gcjMub3BlbkVuZChhNCkpLCByMy50byA+IG44KQogICAgICAgICAgYnJlYWs7CiAgICAgICAgaDEwID0gcjMudG8sIHIzLm5leHQoKTsKICAgICAgfQogICAgICByZXR1cm4gbzQ7CiAgICB9CiAgICBzdGF0aWMgb2YoZTUsIHQ0ID0gZmFsc2UpIHsKICAgICAgbGV0IG44ID0gbmV3IFoyKCk7CiAgICAgIGZvciAobGV0IGk0IG9mIGU1IGluc3RhbmNlb2YgcSA/IFtlNV0gOiB0NCA/IHN0KGU1KSA6IGU1KQogICAgICAgIG44LmFkZChpNC5mcm9tLCBpNC50bywgaTQudmFsdWUpOwogICAgICByZXR1cm4gbjguZmluaXNoKCk7CiAgICB9CiAgfTsKICBQLmVtcHR5ID0gbmV3IFAoW10sIFtdLCBudWxsLCAtMSk7CiAgZnVuY3Rpb24gc3QobDcpIHsKICAgIGlmIChsNy5sZW5ndGggPiAxKQogICAgICBmb3IgKGxldCBlNSA9IGw3WzBdLCB0NCA9IDE7IHQ0IDwgbDcubGVuZ3RoOyB0NCsrKSB7CiAgICAgICAgbGV0IG44ID0gbDdbdDRdOwogICAgICAgIGlmIChrZTMoZTUsIG44KSA+IDApCiAgICAgICAgICByZXR1cm4gbDcuc2xpY2UoKS5zb3J0KGtlMyk7CiAgICAgICAgZTUgPSBuODsKICAgICAgfQogICAgcmV0dXJuIGw3OwogIH0KICBQLmVtcHR5Lm5leHRMYXllciA9IFAuZW1wdHk7CiAgdmFyIFoyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHRoaXMuY2h1bmtzID0gW10sIHRoaXMuY2h1bmtQb3MgPSBbXSwgdGhpcy5jaHVua1N0YXJ0ID0gLTEsIHRoaXMubGFzdCA9IG51bGwsIHRoaXMubGFzdEZyb20gPSAtMWU5LCB0aGlzLmxhc3RUbyA9IC0xZTksIHRoaXMuZnJvbSA9IFtdLCB0aGlzLnRvID0gW10sIHRoaXMudmFsdWUgPSBbXSwgdGhpcy5tYXhQb2ludCA9IC0xLCB0aGlzLnNldE1heFBvaW50ID0gLTEsIHRoaXMubmV4dExheWVyID0gbnVsbDsKICAgIH0KICAgIGZpbmlzaENodW5rKGU1KSB7CiAgICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFgzKHRoaXMuZnJvbSwgdGhpcy50bywgdGhpcy52YWx1ZSwgdGhpcy5tYXhQb2ludCkpLCB0aGlzLmNodW5rUG9zLnB1c2godGhpcy5jaHVua1N0YXJ0KSwgdGhpcy5jaHVua1N0YXJ0ID0gLTEsIHRoaXMuc2V0TWF4UG9pbnQgPSBNYXRoLm1heCh0aGlzLnNldE1heFBvaW50LCB0aGlzLm1heFBvaW50KSwgdGhpcy5tYXhQb2ludCA9IC0xLCBlNSAmJiAodGhpcy5mcm9tID0gW10sIHRoaXMudG8gPSBbXSwgdGhpcy52YWx1ZSA9IFtdKTsKICAgIH0KICAgIGFkZChlNSwgdDQsIG44KSB7CiAgICAgIHRoaXMuYWRkSW5uZXIoZTUsIHQ0LCBuOCkgfHwgKHRoaXMubmV4dExheWVyIHx8ICh0aGlzLm5leHRMYXllciA9IG5ldyBaMigpKSkuYWRkKGU1LCB0NCwgbjgpOwogICAgfQogICAgYWRkSW5uZXIoZTUsIHQ0LCBuOCkgewogICAgICBsZXQgaTQgPSBlNSAtIHRoaXMubGFzdFRvIHx8IG44LnN0YXJ0U2lkZSAtIHRoaXMubGFzdC5lbmRTaWRlOwogICAgICBpZiAoaTQgPD0gMCAmJiAoZTUgLSB0aGlzLmxhc3RGcm9tIHx8IG44LnN0YXJ0U2lkZSAtIHRoaXMubGFzdC5zdGFydFNpZGUpIDwgMCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlJhbmdlcyBtdXN0IGJlIGFkZGVkIHNvcnRlZCBieSBgZnJvbWAgcG9zaXRpb24gYW5kIGBzdGFydFNpZGVgIik7CiAgICAgIHJldHVybiBpNCA8IDAgPyBmYWxzZSA6ICh0aGlzLmZyb20ubGVuZ3RoID09IDI1MCAmJiB0aGlzLmZpbmlzaENodW5rKHRydWUpLCB0aGlzLmNodW5rU3RhcnQgPCAwICYmICh0aGlzLmNodW5rU3RhcnQgPSBlNSksIHRoaXMuZnJvbS5wdXNoKGU1IC0gdGhpcy5jaHVua1N0YXJ0KSwgdGhpcy50by5wdXNoKHQ0IC0gdGhpcy5jaHVua1N0YXJ0KSwgdGhpcy5sYXN0ID0gbjgsIHRoaXMubGFzdEZyb20gPSBlNSwgdGhpcy5sYXN0VG8gPSB0NCwgdGhpcy52YWx1ZS5wdXNoKG44KSwgbjgucG9pbnQgJiYgKHRoaXMubWF4UG9pbnQgPSBNYXRoLm1heCh0aGlzLm1heFBvaW50LCB0NCAtIGU1KSksIHRydWUpOwogICAgfQogICAgYWRkQ2h1bmsoZTUsIHQ0KSB7CiAgICAgIGlmICgoZTUgLSB0aGlzLmxhc3RUbyB8fCB0NC52YWx1ZVswXS5zdGFydFNpZGUgLSB0aGlzLmxhc3QuZW5kU2lkZSkgPCAwKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgdGhpcy5mcm9tLmxlbmd0aCAmJiB0aGlzLmZpbmlzaENodW5rKHRydWUpLCB0aGlzLnNldE1heFBvaW50ID0gTWF0aC5tYXgodGhpcy5zZXRNYXhQb2ludCwgdDQubWF4UG9pbnQpLCB0aGlzLmNodW5rcy5wdXNoKHQ0KSwgdGhpcy5jaHVua1Bvcy5wdXNoKGU1KTsKICAgICAgbGV0IG44ID0gdDQudmFsdWUubGVuZ3RoIC0gMTsKICAgICAgcmV0dXJuIHRoaXMubGFzdCA9IHQ0LnZhbHVlW244XSwgdGhpcy5sYXN0RnJvbSA9IHQ0LmZyb21bbjhdICsgZTUsIHRoaXMubGFzdFRvID0gdDQudG9bbjhdICsgZTUsIHRydWU7CiAgICB9CiAgICBmaW5pc2goKSB7CiAgICAgIHJldHVybiB0aGlzLmZpbmlzaElubmVyKFAuZW1wdHkpOwogICAgfQogICAgZmluaXNoSW5uZXIoZTUpIHsKICAgICAgaWYgKHRoaXMuZnJvbS5sZW5ndGggJiYgdGhpcy5maW5pc2hDaHVuayhmYWxzZSksIHRoaXMuY2h1bmtzLmxlbmd0aCA9PSAwKQogICAgICAgIHJldHVybiBlNTsKICAgICAgbGV0IHQ0ID0gUC5jcmVhdGUodGhpcy5jaHVua1BvcywgdGhpcy5jaHVua3MsIHRoaXMubmV4dExheWVyID8gdGhpcy5uZXh0TGF5ZXIuZmluaXNoSW5uZXIoZTUpIDogZTUsIHRoaXMuc2V0TWF4UG9pbnQpOwogICAgICByZXR1cm4gdGhpcy5mcm9tID0gbnVsbCwgdDQ7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBCZShsNywgZTUsIHQ0KSB7CiAgICBsZXQgbjggPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZm9yIChsZXQgczggb2YgbDcpCiAgICAgIGZvciAobGV0IHIzID0gMDsgcjMgPCBzOC5jaHVuay5sZW5ndGg7IHIzKyspCiAgICAgICAgczguY2h1bmtbcjNdLm1heFBvaW50IDw9IDAgJiYgbjguc2V0KHM4LmNodW5rW3IzXSwgczguY2h1bmtQb3NbcjNdKTsKICAgIGxldCBpNCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICBmb3IgKGxldCBzOCBvZiBlNSkKICAgICAgZm9yIChsZXQgcjMgPSAwOyByMyA8IHM4LmNodW5rLmxlbmd0aDsgcjMrKykgewogICAgICAgIGxldCBoMTAgPSBuOC5nZXQoczguY2h1bmtbcjNdKTsKICAgICAgICBoMTAgIT0gbnVsbCAmJiAodDQgPyB0NC5tYXBQb3MoaDEwKSA6IGgxMCkgPT0gczguY2h1bmtQb3NbcjNdICYmICF0ND8udG91Y2hlc1JhbmdlKGgxMCwgaDEwICsgczguY2h1bmtbcjNdLmxlbmd0aCkgJiYgaTQuYWRkKHM4LmNodW5rW3IzXSk7CiAgICAgIH0KICAgIHJldHVybiBpNDsKICB9CiAgdmFyIGxlMiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgbjgsIGk0ID0gMCkgewogICAgICB0aGlzLmxheWVyID0gZTUsIHRoaXMuc2tpcCA9IHQ0LCB0aGlzLm1pblBvaW50ID0gbjgsIHRoaXMucmFuayA9IGk0OwogICAgfQogICAgZ2V0IHN0YXJ0U2lkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlLnN0YXJ0U2lkZSA6IDA7CiAgICB9CiAgICBnZXQgZW5kU2lkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlLmVuZFNpZGUgOiAwOwogICAgfQogICAgZ290byhlNSwgdDQgPSAtMWU5KSB7CiAgICAgIHJldHVybiB0aGlzLmNodW5rSW5kZXggPSB0aGlzLnJhbmdlSW5kZXggPSAwLCB0aGlzLmdvdG9Jbm5lcihlNSwgdDQsIGZhbHNlKSwgdGhpczsKICAgIH0KICAgIGdvdG9Jbm5lcihlNSwgdDQsIG44KSB7CiAgICAgIGZvciAoOyB0aGlzLmNodW5rSW5kZXggPCB0aGlzLmxheWVyLmNodW5rLmxlbmd0aDsgKSB7CiAgICAgICAgbGV0IGk0ID0gdGhpcy5sYXllci5jaHVua1t0aGlzLmNodW5rSW5kZXhdOwogICAgICAgIGlmICghKHRoaXMuc2tpcCAmJiB0aGlzLnNraXAuaGFzKGk0KSB8fCB0aGlzLmxheWVyLmNodW5rRW5kKHRoaXMuY2h1bmtJbmRleCkgPCBlNSB8fCBpNC5tYXhQb2ludCA8IHRoaXMubWluUG9pbnQpKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgdGhpcy5jaHVua0luZGV4KyssIG44ID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY2h1bmtJbmRleCA8IHRoaXMubGF5ZXIuY2h1bmsubGVuZ3RoKSB7CiAgICAgICAgbGV0IGk0ID0gdGhpcy5sYXllci5jaHVua1t0aGlzLmNodW5rSW5kZXhdLmZpbmRJbmRleChlNSAtIHRoaXMubGF5ZXIuY2h1bmtQb3NbdGhpcy5jaHVua0luZGV4XSwgdDQsIHRydWUpOwogICAgICAgICghbjggfHwgdGhpcy5yYW5nZUluZGV4IDwgaTQpICYmIHRoaXMuc2V0UmFuZ2VJbmRleChpNCk7CiAgICAgIH0KICAgICAgdGhpcy5uZXh0KCk7CiAgICB9CiAgICBmb3J3YXJkKGU1LCB0NCkgewogICAgICAodGhpcy50byAtIGU1IHx8IHRoaXMuZW5kU2lkZSAtIHQ0KSA8IDAgJiYgdGhpcy5nb3RvSW5uZXIoZTUsIHQ0LCB0cnVlKTsKICAgIH0KICAgIG5leHQoKSB7CiAgICAgIGZvciAoOyA7ICkKICAgICAgICBpZiAodGhpcy5jaHVua0luZGV4ID09IHRoaXMubGF5ZXIuY2h1bmsubGVuZ3RoKSB7CiAgICAgICAgICB0aGlzLmZyb20gPSB0aGlzLnRvID0gMWU5LCB0aGlzLnZhbHVlID0gbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgZTUgPSB0aGlzLmxheWVyLmNodW5rUG9zW3RoaXMuY2h1bmtJbmRleF0sIHQ0ID0gdGhpcy5sYXllci5jaHVua1t0aGlzLmNodW5rSW5kZXhdLCBuOCA9IGU1ICsgdDQuZnJvbVt0aGlzLnJhbmdlSW5kZXhdOwogICAgICAgICAgaWYgKHRoaXMuZnJvbSA9IG44LCB0aGlzLnRvID0gZTUgKyB0NC50b1t0aGlzLnJhbmdlSW5kZXhdLCB0aGlzLnZhbHVlID0gdDQudmFsdWVbdGhpcy5yYW5nZUluZGV4XSwgdGhpcy5zZXRSYW5nZUluZGV4KHRoaXMucmFuZ2VJbmRleCArIDEpLCB0aGlzLm1pblBvaW50IDwgMCB8fCB0aGlzLnZhbHVlLnBvaW50ICYmIHRoaXMudG8gLSB0aGlzLmZyb20gPj0gdGhpcy5taW5Qb2ludCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgc2V0UmFuZ2VJbmRleChlNSkgewogICAgICBpZiAoZTUgPT0gdGhpcy5sYXllci5jaHVua1t0aGlzLmNodW5rSW5kZXhdLnZhbHVlLmxlbmd0aCkgewogICAgICAgIGlmICh0aGlzLmNodW5rSW5kZXgrKywgdGhpcy5za2lwKQogICAgICAgICAgZm9yICg7IHRoaXMuY2h1bmtJbmRleCA8IHRoaXMubGF5ZXIuY2h1bmsubGVuZ3RoICYmIHRoaXMuc2tpcC5oYXModGhpcy5sYXllci5jaHVua1t0aGlzLmNodW5rSW5kZXhdKTsgKQogICAgICAgICAgICB0aGlzLmNodW5rSW5kZXgrKzsKICAgICAgICB0aGlzLnJhbmdlSW5kZXggPSAwOwogICAgICB9IGVsc2UKICAgICAgICB0aGlzLnJhbmdlSW5kZXggPSBlNTsKICAgIH0KICAgIG5leHRDaHVuaygpIHsKICAgICAgdGhpcy5jaHVua0luZGV4KyssIHRoaXMucmFuZ2VJbmRleCA9IDAsIHRoaXMubmV4dCgpOwogICAgfQogICAgY29tcGFyZShlNSkgewogICAgICByZXR1cm4gdGhpcy5mcm9tIC0gZTUuZnJvbSB8fCB0aGlzLnN0YXJ0U2lkZSAtIGU1LnN0YXJ0U2lkZSB8fCB0aGlzLnJhbmsgLSBlNS5yYW5rIHx8IHRoaXMudG8gLSBlNS50byB8fCB0aGlzLmVuZFNpZGUgLSBlNS5lbmRTaWRlOwogICAgfQogIH07CiAgdmFyIEwgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSkgewogICAgICB0aGlzLmhlYXAgPSBlNTsKICAgIH0KICAgIHN0YXRpYyBmcm9tKGU1LCB0NCA9IG51bGwsIG44ID0gLTEpIHsKICAgICAgbGV0IGk0ID0gW107CiAgICAgIGZvciAobGV0IHM4ID0gMDsgczggPCBlNS5sZW5ndGg7IHM4KyspCiAgICAgICAgZm9yIChsZXQgcjMgPSBlNVtzOF07ICFyMy5pc0VtcHR5OyByMyA9IHIzLm5leHRMYXllcikKICAgICAgICAgIHIzLm1heFBvaW50ID49IG44ICYmIGk0LnB1c2gobmV3IGxlMihyMywgdDQsIG44LCBzOCkpOwogICAgICByZXR1cm4gaTQubGVuZ3RoID09IDEgPyBpNFswXSA6IG5ldyBMKGk0KTsKICAgIH0KICAgIGdldCBzdGFydFNpZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZS5zdGFydFNpZGUgOiAwOwogICAgfQogICAgZ290byhlNSwgdDQgPSAtMWU5KSB7CiAgICAgIGZvciAobGV0IG44IG9mIHRoaXMuaGVhcCkKICAgICAgICBuOC5nb3RvKGU1LCB0NCk7CiAgICAgIGZvciAobGV0IG44ID0gdGhpcy5oZWFwLmxlbmd0aCA+PiAxOyBuOCA+PSAwOyBuOC0tKQogICAgICAgIGFlMih0aGlzLmhlYXAsIG44KTsKICAgICAgcmV0dXJuIHRoaXMubmV4dCgpLCB0aGlzOwogICAgfQogICAgZm9yd2FyZChlNSwgdDQpIHsKICAgICAgZm9yIChsZXQgbjggb2YgdGhpcy5oZWFwKQogICAgICAgIG44LmZvcndhcmQoZTUsIHQ0KTsKICAgICAgZm9yIChsZXQgbjggPSB0aGlzLmhlYXAubGVuZ3RoID4+IDE7IG44ID49IDA7IG44LS0pCiAgICAgICAgYWUyKHRoaXMuaGVhcCwgbjgpOwogICAgICAodGhpcy50byAtIGU1IHx8IHRoaXMudmFsdWUuZW5kU2lkZSAtIHQ0KSA8IDAgJiYgdGhpcy5uZXh0KCk7CiAgICB9CiAgICBuZXh0KCkgewogICAgICBpZiAodGhpcy5oZWFwLmxlbmd0aCA9PSAwKQogICAgICAgIHRoaXMuZnJvbSA9IHRoaXMudG8gPSAxZTksIHRoaXMudmFsdWUgPSBudWxsLCB0aGlzLnJhbmsgPSAtMTsKICAgICAgZWxzZSB7CiAgICAgICAgbGV0IGU1ID0gdGhpcy5oZWFwWzBdOwogICAgICAgIHRoaXMuZnJvbSA9IGU1LmZyb20sIHRoaXMudG8gPSBlNS50bywgdGhpcy52YWx1ZSA9IGU1LnZhbHVlLCB0aGlzLnJhbmsgPSBlNS5yYW5rLCBlNS52YWx1ZSAmJiBlNS5uZXh0KCksIGFlMih0aGlzLmhlYXAsIDApOwogICAgICB9CiAgICB9CiAgfTsKICBmdW5jdGlvbiBhZTIobDcsIGU1KSB7CiAgICBmb3IgKGxldCB0NCA9IGw3W2U1XTsgOyApIHsKICAgICAgbGV0IG44ID0gKGU1IDw8IDEpICsgMTsKICAgICAgaWYgKG44ID49IGw3Lmxlbmd0aCkKICAgICAgICBicmVhazsKICAgICAgbGV0IGk0ID0gbDdbbjhdOwogICAgICBpZiAobjggKyAxIDwgbDcubGVuZ3RoICYmIGk0LmNvbXBhcmUobDdbbjggKyAxXSkgPj0gMCAmJiAoaTQgPSBsN1tuOCArIDFdLCBuOCsrKSwgdDQuY29tcGFyZShpNCkgPCAwKQogICAgICAgIGJyZWFrOwogICAgICBsN1tuOF0gPSB0NCwgbDdbZTVdID0gaTQsIGU1ID0gbjg7CiAgICB9CiAgfQogIHZhciBDID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCBuOCkgewogICAgICB0aGlzLm1pblBvaW50ID0gbjgsIHRoaXMuYWN0aXZlID0gW10sIHRoaXMuYWN0aXZlVG8gPSBbXSwgdGhpcy5hY3RpdmVSYW5rID0gW10sIHRoaXMubWluQWN0aXZlID0gLTEsIHRoaXMucG9pbnQgPSBudWxsLCB0aGlzLnBvaW50RnJvbSA9IDAsIHRoaXMucG9pbnRSYW5rID0gMCwgdGhpcy50byA9IC0xZTksIHRoaXMuZW5kU2lkZSA9IDAsIHRoaXMub3BlblN0YXJ0ID0gLTEsIHRoaXMuY3Vyc29yID0gTC5mcm9tKGU1LCB0NCwgbjgpOwogICAgfQogICAgZ290byhlNSwgdDQgPSAtMWU5KSB7CiAgICAgIHJldHVybiB0aGlzLmN1cnNvci5nb3RvKGU1LCB0NCksIHRoaXMuYWN0aXZlLmxlbmd0aCA9IHRoaXMuYWN0aXZlVG8ubGVuZ3RoID0gdGhpcy5hY3RpdmVSYW5rLmxlbmd0aCA9IDAsIHRoaXMubWluQWN0aXZlID0gLTEsIHRoaXMudG8gPSBlNSwgdGhpcy5lbmRTaWRlID0gdDQsIHRoaXMub3BlblN0YXJ0ID0gLTEsIHRoaXMubmV4dCgpLCB0aGlzOwogICAgfQogICAgZm9yd2FyZChlNSwgdDQpIHsKICAgICAgZm9yICg7IHRoaXMubWluQWN0aXZlID4gLTEgJiYgKHRoaXMuYWN0aXZlVG9bdGhpcy5taW5BY3RpdmVdIC0gZTUgfHwgdGhpcy5hY3RpdmVbdGhpcy5taW5BY3RpdmVdLmVuZFNpZGUgLSB0NCkgPCAwOyApCiAgICAgICAgdGhpcy5yZW1vdmVBY3RpdmUodGhpcy5taW5BY3RpdmUpOwogICAgICB0aGlzLmN1cnNvci5mb3J3YXJkKGU1LCB0NCk7CiAgICB9CiAgICByZW1vdmVBY3RpdmUoZTUpIHsKICAgICAgWTIodGhpcy5hY3RpdmUsIGU1KSwgWTIodGhpcy5hY3RpdmVUbywgZTUpLCBZMih0aGlzLmFjdGl2ZVJhbmssIGU1KSwgdGhpcy5taW5BY3RpdmUgPSBSZTIodGhpcy5hY3RpdmUsIHRoaXMuYWN0aXZlVG8pOwogICAgfQogICAgYWRkQWN0aXZlKGU1KSB7CiAgICAgIGxldCB0NCA9IDAsIHsgdmFsdWU6IG44LCB0bzogaTQsIHJhbms6IHM4IH0gPSB0aGlzLmN1cnNvcjsKICAgICAgZm9yICg7IHQ0IDwgdGhpcy5hY3RpdmVSYW5rLmxlbmd0aCAmJiB0aGlzLmFjdGl2ZVJhbmtbdDRdIDw9IHM4OyApCiAgICAgICAgdDQrKzsKICAgICAgXyh0aGlzLmFjdGl2ZSwgdDQsIG44KSwgXyh0aGlzLmFjdGl2ZVRvLCB0NCwgaTQpLCBfKHRoaXMuYWN0aXZlUmFuaywgdDQsIHM4KSwgZTUgJiYgXyhlNSwgdDQsIHRoaXMuY3Vyc29yLmZyb20pLCB0aGlzLm1pbkFjdGl2ZSA9IFJlMih0aGlzLmFjdGl2ZSwgdGhpcy5hY3RpdmVUbyk7CiAgICB9CiAgICBuZXh0KCkgewogICAgICBsZXQgZTUgPSB0aGlzLnRvLCB0NCA9IHRoaXMucG9pbnQ7CiAgICAgIHRoaXMucG9pbnQgPSBudWxsOwogICAgICBsZXQgbjggPSB0aGlzLm9wZW5TdGFydCA8IDAgPyBbXSA6IG51bGwsIGk0ID0gMDsKICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgbGV0IHM4ID0gdGhpcy5taW5BY3RpdmU7CiAgICAgICAgaWYgKHM4ID4gLTEgJiYgKHRoaXMuYWN0aXZlVG9bczhdIC0gdGhpcy5jdXJzb3IuZnJvbSB8fCB0aGlzLmFjdGl2ZVtzOF0uZW5kU2lkZSAtIHRoaXMuY3Vyc29yLnN0YXJ0U2lkZSkgPCAwKSB7CiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVUb1tzOF0gPiBlNSkgewogICAgICAgICAgICB0aGlzLnRvID0gdGhpcy5hY3RpdmVUb1tzOF0sIHRoaXMuZW5kU2lkZSA9IHRoaXMuYWN0aXZlW3M4XS5lbmRTaWRlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMucmVtb3ZlQWN0aXZlKHM4KSwgbjggJiYgWTIobjgsIHM4KTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3Vyc29yLnZhbHVlKQogICAgICAgICAgaWYgKHRoaXMuY3Vyc29yLmZyb20gPiBlNSkgewogICAgICAgICAgICB0aGlzLnRvID0gdGhpcy5jdXJzb3IuZnJvbSwgdGhpcy5lbmRTaWRlID0gdGhpcy5jdXJzb3Iuc3RhcnRTaWRlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxldCByMyA9IHRoaXMuY3Vyc29yLnZhbHVlOwogICAgICAgICAgICBpZiAoIXIzLnBvaW50KQogICAgICAgICAgICAgIHRoaXMuYWRkQWN0aXZlKG44KSwgdGhpcy5jdXJzb3IuZnJvbSA8IGU1ICYmIHRoaXMuY3Vyc29yLnRvID4gZTUgJiYgaTQrKywgdGhpcy5jdXJzb3IubmV4dCgpOwogICAgICAgICAgICBlbHNlIGlmICh0NCAmJiB0aGlzLmN1cnNvci50byA9PSB0aGlzLnRvICYmIHRoaXMuY3Vyc29yLmZyb20gPCB0aGlzLmN1cnNvci50bykKICAgICAgICAgICAgICB0aGlzLmN1cnNvci5uZXh0KCk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHRoaXMucG9pbnQgPSByMywgdGhpcy5wb2ludEZyb20gPSB0aGlzLmN1cnNvci5mcm9tLCB0aGlzLnBvaW50UmFuayA9IHRoaXMuY3Vyc29yLnJhbmssIHRoaXMudG8gPSB0aGlzLmN1cnNvci50bywgdGhpcy5lbmRTaWRlID0gcjMuZW5kU2lkZSwgdGhpcy5jdXJzb3IuZnJvbSA8IGU1ICYmIChpNCA9IDEpLCB0aGlzLmN1cnNvci5uZXh0KCksIHRoaXMuZm9yd2FyZCh0aGlzLnRvLCB0aGlzLmVuZFNpZGUpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB0aGlzLnRvID0gdGhpcy5lbmRTaWRlID0gMWU5OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChuOCkgewogICAgICAgIGxldCBzOCA9IDA7CiAgICAgICAgZm9yICg7IHM4IDwgbjgubGVuZ3RoICYmIG44W3M4XSA8IGU1OyApCiAgICAgICAgICBzOCsrOwogICAgICAgIHRoaXMub3BlblN0YXJ0ID0gczggKyBpNDsKICAgICAgfQogICAgfQogICAgYWN0aXZlRm9yUG9pbnQoZTUpIHsKICAgICAgaWYgKCF0aGlzLmFjdGl2ZS5sZW5ndGgpCiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlOwogICAgICBsZXQgdDQgPSBbXTsKICAgICAgZm9yIChsZXQgbjggPSB0aGlzLmFjdGl2ZS5sZW5ndGggLSAxOyBuOCA+PSAwICYmICEodGhpcy5hY3RpdmVSYW5rW244XSA8IHRoaXMucG9pbnRSYW5rKTsgbjgtLSkKICAgICAgICAodGhpcy5hY3RpdmVUb1tuOF0gPiBlNSB8fCB0aGlzLmFjdGl2ZVRvW244XSA9PSBlNSAmJiB0aGlzLmFjdGl2ZVtuOF0uZW5kU2lkZSA+PSB0aGlzLnBvaW50LmVuZFNpZGUpICYmIHQ0LnB1c2godGhpcy5hY3RpdmVbbjhdKTsKICAgICAgcmV0dXJuIHQ0LnJldmVyc2UoKTsKICAgIH0KICAgIG9wZW5FbmQoZTUpIHsKICAgICAgbGV0IHQ0ID0gMDsKICAgICAgZm9yIChsZXQgbjggPSB0aGlzLmFjdGl2ZVRvLmxlbmd0aCAtIDE7IG44ID49IDAgJiYgdGhpcy5hY3RpdmVUb1tuOF0gPiBlNTsgbjgtLSkKICAgICAgICB0NCsrOwogICAgICByZXR1cm4gdDQ7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBNZTMobDcsIGU1LCB0NCwgbjgsIGk0LCBzOCkgewogICAgbDcuZ290byhlNSksIHQ0LmdvdG8objgpOwogICAgbGV0IHIzID0gbjggKyBpNCwgaDEwID0gbjgsIG80ID0gbjggLSBlNTsKICAgIGZvciAoOyA7ICkgewogICAgICBsZXQgYTQgPSBsNy50byArIG80IC0gdDQudG8gfHwgbDcuZW5kU2lkZSAtIHQ0LmVuZFNpZGUsIGYxMSA9IGE0IDwgMCA/IGw3LnRvICsgbzQgOiB0NC50bywgdTExID0gTWF0aC5taW4oZjExLCByMyk7CiAgICAgIGlmIChsNy5wb2ludCB8fCB0NC5wb2ludCA/IGw3LnBvaW50ICYmIHQ0LnBvaW50ICYmIChsNy5wb2ludCA9PSB0NC5wb2ludCB8fCBsNy5wb2ludC5lcSh0NC5wb2ludCkpICYmIHhlMyhsNy5hY3RpdmVGb3JQb2ludChsNy50byArIG80KSwgdDQuYWN0aXZlRm9yUG9pbnQodDQudG8pKSB8fCBzOC5jb21wYXJlUG9pbnQoaDEwLCB1MTEsIGw3LnBvaW50LCB0NC5wb2ludCkgOiB1MTEgPiBoMTAgJiYgIXhlMyhsNy5hY3RpdmUsIHQ0LmFjdGl2ZSkgJiYgczguY29tcGFyZVJhbmdlKGgxMCwgdTExLCBsNy5hY3RpdmUsIHQ0LmFjdGl2ZSksIGYxMSA+IHIzKQogICAgICAgIGJyZWFrOwogICAgICBoMTAgPSBmMTEsIGE0IDw9IDAgJiYgbDcubmV4dCgpLCBhNCA+PSAwICYmIHQ0Lm5leHQoKTsKICAgIH0KICB9CiAgZnVuY3Rpb24geGUzKGw3LCBlNSkgewogICAgaWYgKGw3Lmxlbmd0aCAhPSBlNS5sZW5ndGgpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGZvciAobGV0IHQ0ID0gMDsgdDQgPCBsNy5sZW5ndGg7IHQ0KyspCiAgICAgIGlmIChsN1t0NF0gIT0gZTVbdDRdICYmICFsN1t0NF0uZXEoZTVbdDRdKSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gWTIobDcsIGU1KSB7CiAgICBmb3IgKGxldCB0NCA9IGU1LCBuOCA9IGw3Lmxlbmd0aCAtIDE7IHQ0IDwgbjg7IHQ0KyspCiAgICAgIGw3W3Q0XSA9IGw3W3Q0ICsgMV07CiAgICBsNy5wb3AoKTsKICB9CiAgZnVuY3Rpb24gXyhsNywgZTUsIHQ0KSB7CiAgICBmb3IgKGxldCBuOCA9IGw3Lmxlbmd0aCAtIDE7IG44ID49IGU1OyBuOC0tKQogICAgICBsN1tuOCArIDFdID0gbDdbbjhdOwogICAgbDdbZTVdID0gdDQ7CiAgfQogIGZ1bmN0aW9uIFJlMihsNywgZTUpIHsKICAgIGxldCB0NCA9IC0xLCBuOCA9IDFlOTsKICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBlNS5sZW5ndGg7IGk0KyspCiAgICAgIChlNVtpNF0gLSBuOCB8fCBsN1tpNF0uZW5kU2lkZSAtIGw3W3Q0XS5lbmRTaWRlKSA8IDAgJiYgKHQ0ID0gaTQsIG44ID0gZTVbaTRdKTsKICAgIHJldHVybiB0NDsKICB9CiAgZnVuY3Rpb24gb3QobDcsIGU1LCB0NCA9IGw3Lmxlbmd0aCkgewogICAgbGV0IG44ID0gMDsKICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCB0NDsgKQogICAgICBsNy5jaGFyQ29kZUF0KGk0KSA9PSA5ID8gKG44ICs9IGU1IC0gbjggJSBlNSwgaTQrKykgOiAobjgrKywgaTQgPSBpZTIobDcsIGk0KSk7CiAgICByZXR1cm4gbjg7CiAgfQogIGZ1bmN0aW9uIGF0KGw3LCBlNSwgdDQsIG44KSB7CiAgICBmb3IgKGxldCBpNCA9IDAsIHM4ID0gMDsgOyApIHsKICAgICAgaWYgKHM4ID49IGU1KQogICAgICAgIHJldHVybiBpNDsKICAgICAgaWYgKGk0ID09IGw3Lmxlbmd0aCkKICAgICAgICBicmVhazsKICAgICAgczggKz0gbDcuY2hhckNvZGVBdChpNCkgPT0gOSA/IHQ0IC0gczggJSB0NCA6IDEsIGk0ID0gaWUyKGw3LCBpNCk7CiAgICB9CiAgICByZXR1cm4gbjggPT09IHRydWUgPyAtMSA6IGw3Lmxlbmd0aDsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L3N0eWxlLW1vZEA0LjAuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFiR1Y2WlhJdlkyOXRiVzl1L2Rlbm8vc3R5bGUtbW9kLmpzCiAgdmFyIFMyID0gIlx1MDM3QyI7CiAgdmFyIHcyID0gdHlwZW9mIFN5bWJvbCA+ICJ1IiA/ICJfXyIgKyBTMiA6IFN5bWJvbC5mb3IoUzIpOwogIHZhciBjID0gdHlwZW9mIFN5bWJvbCA+ICJ1IiA/ICJfX3N0eWxlU2V0IiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlOCkgOiBTeW1ib2woInN0eWxlU2V0Iik7CiAgdmFyIGIzID0gdHlwZW9mIGdsb2JhbFRoaXMgPCAidSIgPyBnbG9iYWxUaGlzIDogdHlwZW9mIGRvY3VtZW50IDwgInUiID8gd2luZG93IDoge307CiAgdmFyIFQyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIGw3KSB7CiAgICAgIHRoaXMucnVsZXMgPSBbXTsKICAgICAgbGV0IHsgZmluaXNoOiB1MTEgfSA9IGw3IHx8IHt9OwogICAgICBmdW5jdGlvbiBuOCh0NCkgewogICAgICAgIHJldHVybiAvXkAvLnRlc3QodDQpID8gW3Q0XSA6IHQ0LnNwbGl0KC8sXHMqLyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gczgodDQsIGk0LCBoMTAsIHgyMSkgewogICAgICAgIGxldCBkMTUgPSBbXSwgcjMgPSAvXkAoXHcrKVxiLy5leGVjKHQ0WzBdKSwgZzEyID0gcjMgJiYgcjNbMV0gPT0gImtleWZyYW1lcyI7CiAgICAgICAgaWYgKHIzICYmIGk0ID09IG51bGwpCiAgICAgICAgICByZXR1cm4gaDEwLnB1c2godDRbMF0gKyAiOyIpOwogICAgICAgIGZvciAobGV0IGE0IGluIGk0KSB7CiAgICAgICAgICBsZXQgbzQgPSBpNFthNF07CiAgICAgICAgICBpZiAoLyYvLnRlc3QoYTQpKQogICAgICAgICAgICBzOChhNC5zcGxpdCgvLFxzKi8pLm1hcCgoZjExKSA9PiB0NC5tYXAoKHkxNykgPT4gZjExLnJlcGxhY2UoLyYvLCB5MTcpKSkucmVkdWNlKChmMTEsIHkxNykgPT4gZjExLmNvbmNhdCh5MTcpKSwgbzQsIGgxMCk7CiAgICAgICAgICBlbHNlIGlmIChvNCAmJiB0eXBlb2YgbzQgPT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgaWYgKCFyMykKICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgKCIgKyBhNCArICIpIHNob3VsZCBiZSBhIHByaW1pdGl2ZSB2YWx1ZS4iKTsKICAgICAgICAgICAgczgobjgoYTQpLCBvNCwgZDE1LCBnMTIpOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIG80ICE9IG51bGwgJiYgZDE1LnB1c2goYTQucmVwbGFjZSgvXy4qLywgIiIpLnJlcGxhY2UoL1tBLVpdL2csIChmMTEpID0+ICItIiArIGYxMS50b0xvd2VyQ2FzZSgpKSArICI6ICIgKyBvNCArICI7Iik7CiAgICAgICAgfQogICAgICAgIChkMTUubGVuZ3RoIHx8IGcxMikgJiYgaDEwLnB1c2goKHUxMSAmJiAhcjMgJiYgIXgyMSA/IHQ0Lm1hcCh1MTEpIDogdDQpLmpvaW4oIiwgIikgKyAiIHsiICsgZDE1LmpvaW4oIiAiKSArICJ9Iik7CiAgICAgIH0KICAgICAgZm9yIChsZXQgdDQgaW4gZTUpCiAgICAgICAgczgobjgodDQpLCBlNVt0NF0sIHRoaXMucnVsZXMpOwogICAgfQogICAgZ2V0UnVsZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLnJ1bGVzLmpvaW4oYApgKTsKICAgIH0KICAgIHN0YXRpYyBuZXdOYW1lKCkgewogICAgICBsZXQgZTUgPSBiM1t3Ml0gfHwgMTsKICAgICAgcmV0dXJuIGIzW3cyXSA9IGU1ICsgMSwgUzIgKyBlNS50b1N0cmluZygzNik7CiAgICB9CiAgICBzdGF0aWMgbW91bnQoZTUsIGw3KSB7CiAgICAgIChlNVtjXSB8fCBuZXcgbTIoZTUpKS5tb3VudChBcnJheS5pc0FycmF5KGw3KSA/IGw3IDogW2w3XSk7CiAgICB9CiAgfTsKICB2YXIgcCA9IG51bGw7CiAgdmFyIG0yID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUpIHsKICAgICAgaWYgKCFlNS5oZWFkICYmIGU1LmFkb3B0ZWRTdHlsZVNoZWV0cyAmJiB0eXBlb2YgQ1NTU3R5bGVTaGVldCA8ICJ1IikgewogICAgICAgIGlmIChwKQogICAgICAgICAgcmV0dXJuIGU1LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IFtwLnNoZWV0XS5jb25jYXQoZTUuYWRvcHRlZFN0eWxlU2hlZXRzKSwgZTVbY10gPSBwOwogICAgICAgIHRoaXMuc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpLCBlNS5hZG9wdGVkU3R5bGVTaGVldHMgPSBbdGhpcy5zaGVldF0uY29uY2F0KGU1LmFkb3B0ZWRTdHlsZVNoZWV0cyksIHAgPSB0aGlzOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc3R5bGVUYWcgPSAoZTUub3duZXJEb2N1bWVudCB8fCBlNSkuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICBsZXQgbDcgPSBlNS5oZWFkIHx8IGU1OwogICAgICAgIGw3Lmluc2VydEJlZm9yZSh0aGlzLnN0eWxlVGFnLCBsNy5maXJzdENoaWxkKTsKICAgICAgfQogICAgICB0aGlzLm1vZHVsZXMgPSBbXSwgZTVbY10gPSB0aGlzOwogICAgfQogICAgbW91bnQoZTUpIHsKICAgICAgbGV0IGw3ID0gdGhpcy5zaGVldCwgdTExID0gMCwgbjggPSAwOwogICAgICBmb3IgKGxldCBzOCA9IDA7IHM4IDwgZTUubGVuZ3RoOyBzOCsrKSB7CiAgICAgICAgbGV0IHQ0ID0gZTVbczhdLCBpNCA9IHRoaXMubW9kdWxlcy5pbmRleE9mKHQ0KTsKICAgICAgICBpZiAoaTQgPCBuOCAmJiBpNCA+IC0xICYmICh0aGlzLm1vZHVsZXMuc3BsaWNlKGk0LCAxKSwgbjgtLSwgaTQgPSAtMSksIGk0ID09IC0xKSB7CiAgICAgICAgICBpZiAodGhpcy5tb2R1bGVzLnNwbGljZShuOCsrLCAwLCB0NCksIGw3KQogICAgICAgICAgICBmb3IgKGxldCBoMTAgPSAwOyBoMTAgPCB0NC5ydWxlcy5sZW5ndGg7IGgxMCsrKQogICAgICAgICAgICAgIGw3Lmluc2VydFJ1bGUodDQucnVsZXNbaDEwXSwgdTExKyspOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKDsgbjggPCBpNDsgKQogICAgICAgICAgICB1MTEgKz0gdGhpcy5tb2R1bGVzW244KytdLnJ1bGVzLmxlbmd0aDsKICAgICAgICAgIHUxMSArPSB0NC5ydWxlcy5sZW5ndGgsIG44Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghbDcpIHsKICAgICAgICBsZXQgczggPSAiIjsKICAgICAgICBmb3IgKGxldCB0NCA9IDA7IHQ0IDwgdGhpcy5tb2R1bGVzLmxlbmd0aDsgdDQrKykKICAgICAgICAgIHM4ICs9IHRoaXMubW9kdWxlc1t0NF0uZ2V0UnVsZXMoKSArIGAKYDsKICAgICAgICB0aGlzLnN0eWxlVGFnLnRleHRDb250ZW50ID0gczg7CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni93M2Mta2V5bmFtZUAyLjIuNi9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFiR1Y2WlhJdlkyOXRiVzl1L2Rlbm8vdzNjLWtleW5hbWUuanMKICB2YXIgdCA9IHsgODogIkJhY2tzcGFjZSIsIDk6ICJUYWIiLCAxMDogIkVudGVyIiwgMTI6ICJOdW1Mb2NrIiwgMTM6ICJFbnRlciIsIDE2OiAiU2hpZnQiLCAxNzogIkNvbnRyb2wiLCAxODogIkFsdCIsIDIwOiAiQ2Fwc0xvY2siLCAyNzogIkVzY2FwZSIsIDMyOiAiICIsIDMzOiAiUGFnZVVwIiwgMzQ6ICJQYWdlRG93biIsIDM1OiAiRW5kIiwgMzY6ICJIb21lIiwgMzc6ICJBcnJvd0xlZnQiLCAzODogIkFycm93VXAiLCAzOTogIkFycm93UmlnaHQiLCA0MDogIkFycm93RG93biIsIDQ0OiAiUHJpbnRTY3JlZW4iLCA0NTogIkluc2VydCIsIDQ2OiAiRGVsZXRlIiwgNTk6ICI7IiwgNjE6ICI9IiwgOTE6ICJNZXRhIiwgOTI6ICJNZXRhIiwgMTA2OiAiKiIsIDEwNzogIisiLCAxMDg6ICIsIiwgMTA5OiAiLSIsIDExMDogIi4iLCAxMTE6ICIvIiwgMTQ0OiAiTnVtTG9jayIsIDE0NTogIlNjcm9sbExvY2siLCAxNjA6ICJTaGlmdCIsIDE2MTogIlNoaWZ0IiwgMTYyOiAiQ29udHJvbCIsIDE2MzogIkNvbnRyb2wiLCAxNjQ6ICJBbHQiLCAxNjU6ICJBbHQiLCAxNzM6ICItIiwgMTg2OiAiOyIsIDE4NzogIj0iLCAxODg6ICIsIiwgMTg5OiAiLSIsIDE5MDogIi4iLCAxOTE6ICIvIiwgMTkyOiAiYCIsIDIxOTogIlsiLCAyMjA6ICJcXCIsIDIyMTogIl0iLCAyMjI6ICInIiB9OwogIHZhciBpID0geyA0ODogIikiLCA0OTogIiEiLCA1MDogIkAiLCA1MTogIiMiLCA1MjogIiQiLCA1MzogIiUiLCA1NDogIl4iLCA1NTogIiYiLCA1NjogIioiLCA1NzogIigiLCA1OTogIjoiLCA2MTogIisiLCAxNzM6ICJfIiwgMTg2OiAiOiIsIDE4NzogIisiLCAxODg6ICI8IiwgMTg5OiAiXyIsIDE5MDogIj4iLCAxOTE6ICI/IiwgMTkyOiAifiIsIDIxOTogInsiLCAyMjA6ICJ8IiwgMjIxOiAifSIsIDIyMjogJyInIH07CiAgdmFyIG4gPSB0eXBlb2YgbmF2aWdhdG9yIDwgInUiICYmIC9DaHJvbWVcLyhcZCspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBwMiA9IHR5cGVvZiBuYXZpZ2F0b3IgPCAidSIgJiYgL0dlY2tvXC9cZCsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgdmFyIGczID0gdHlwZW9mIG5hdmlnYXRvciA8ICJ1IiAmJiAvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7CiAgdmFyIGQgPSB0eXBlb2YgbmF2aWdhdG9yIDwgInUiICYmIC9NU0lFIFxkfFRyaWRlbnRcLyg/Ols3LTldfFxkezIsfSlcLi4qcnY6KFxkKykvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgdmFyIHkyID0gZzMgfHwgbiAmJiArblsxXSA8IDU3OwogIGZvciAociA9IDA7IHIgPCAxMDsgcisrKQogICAgdFs0OCArIHJdID0gdFs5NiArIHJdID0gU3RyaW5nKHIpOwogIHZhciByOwogIGZvciAociA9IDE7IHIgPD0gMjQ7IHIrKykKICAgIHRbciArIDExMV0gPSAiRiIgKyByOwogIHZhciByOwogIGZvciAociA9IDY1OyByIDw9IDkwOyByKyspCiAgICB0W3JdID0gU3RyaW5nLmZyb21DaGFyQ29kZShyICsgMzIpLCBpW3JdID0gU3RyaW5nLmZyb21DaGFyQ29kZShyKTsKICB2YXIgcjsKICBmb3IgKGEgaW4gdCkKICAgIGkuaGFzT3duUHJvcGVydHkoYSkgfHwgKGlbYV0gPSB0W2FdKTsKICB2YXIgYTsKICBmdW5jdGlvbiBzKG80KSB7CiAgICB2YXIgZjExID0geTIgJiYgKG80LmN0cmxLZXkgfHwgbzQuYWx0S2V5IHx8IG80Lm1ldGFLZXkpIHx8IGQgJiYgbzQuc2hpZnRLZXkgJiYgbzQua2V5ICYmIG80LmtleS5sZW5ndGggPT0gMSB8fCBvNC5rZXkgPT0gIlVuaWRlbnRpZmllZCIsIGU1ID0gIWYxMSAmJiBvNC5rZXkgfHwgKG80LnNoaWZ0S2V5ID8gaSA6IHQpW280LmtleUNvZGVdIHx8IG80LmtleSB8fCAiVW5pZGVudGlmaWVkIjsKICAgIHJldHVybiBlNSA9PSAiRXNjIiAmJiAoZTUgPSAiRXNjYXBlIiksIGU1ID09ICJEZWwiICYmIChlNSA9ICJEZWxldGUiKSwgZTUgPT0gIkxlZnQiICYmIChlNSA9ICJBcnJvd0xlZnQiKSwgZTUgPT0gIlVwIiAmJiAoZTUgPSAiQXJyb3dVcCIpLCBlNSA9PSAiUmlnaHQiICYmIChlNSA9ICJBcnJvd1JpZ2h0IiksIGU1ID09ICJEb3duIiAmJiAoZTUgPSAiQXJyb3dEb3duIiksIGU1OwogIH0KCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3Ivdmlld0A2LjMuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFiR1Y2WlhJdlkyOXRiVzl1L2Rlbm8vdmlldy5qcwogIGZ1bmN0aW9uIHNlMyhzOCkgewogICAgbGV0IHQ0OwogICAgcmV0dXJuIHM4Lm5vZGVUeXBlID09IDExID8gdDQgPSBzOC5nZXRTZWxlY3Rpb24gPyBzOCA6IHM4Lm93bmVyRG9jdW1lbnQgOiB0NCA9IHM4LCB0NC5nZXRTZWxlY3Rpb24oKTsKICB9CiAgZnVuY3Rpb24geXQoczgsIHQ0KSB7CiAgICByZXR1cm4gdDQgPyBzOCA9PSB0NCB8fCBzOC5jb250YWlucyh0NC5ub2RlVHlwZSAhPSAxID8gdDQucGFyZW50Tm9kZSA6IHQ0KSA6IGZhbHNlOwogIH0KICBmdW5jdGlvbiBnbihzOCkgewogICAgbGV0IHQ0ID0gczguYWN0aXZlRWxlbWVudDsKICAgIGZvciAoOyB0NCAmJiB0NC5zaGFkb3dSb290OyApCiAgICAgIHQ0ID0gdDQuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50OwogICAgcmV0dXJuIHQ0OwogIH0KICBmdW5jdGlvbiBadChzOCwgdDQpIHsKICAgIGlmICghdDQuYW5jaG9yTm9kZSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIHl0KHM4LCB0NC5hbmNob3JOb2RlKTsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIGZ1bmN0aW9uIFZ0KHM4KSB7CiAgICByZXR1cm4gczgubm9kZVR5cGUgPT0gMyA/IHd0KHM4LCAwLCBzOC5ub2RlVmFsdWUubGVuZ3RoKS5nZXRDbGllbnRSZWN0cygpIDogczgubm9kZVR5cGUgPT0gMSA/IHM4LmdldENsaWVudFJlY3RzKCkgOiBbXTsKICB9CiAgZnVuY3Rpb24gbmUzKHM4LCB0NCwgZTUsIGk0KSB7CiAgICByZXR1cm4gZTUgPyBTaShzOCwgdDQsIGU1LCBpNCwgLTEpIHx8IFNpKHM4LCB0NCwgZTUsIGk0LCAxKSA6IGZhbHNlOwogIH0KICBmdW5jdGlvbiByZTMoczgpIHsKICAgIGZvciAodmFyIHQ0ID0gMDsgOyB0NCsrKQogICAgICBpZiAoczggPSBzOC5wcmV2aW91c1NpYmxpbmcsICFzOCkKICAgICAgICByZXR1cm4gdDQ7CiAgfQogIGZ1bmN0aW9uIFNpKHM4LCB0NCwgZTUsIGk0LCBuOCkgewogICAgZm9yICg7IDsgKSB7CiAgICAgIGlmIChzOCA9PSBlNSAmJiB0NCA9PSBpNCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHQ0ID09IChuOCA8IDAgPyAwIDogV3QoczgpKSkgewogICAgICAgIGlmIChzOC5ub2RlTmFtZSA9PSAiRElWIikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBsZXQgcjMgPSBzOC5wYXJlbnROb2RlOwogICAgICAgIGlmICghcjMgfHwgcjMubm9kZVR5cGUgIT0gMSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB0NCA9IHJlMyhzOCkgKyAobjggPCAwID8gMCA6IDEpLCBzOCA9IHIzOwogICAgICB9IGVsc2UgaWYgKHM4Lm5vZGVUeXBlID09IDEpIHsKICAgICAgICBpZiAoczggPSBzOC5jaGlsZE5vZGVzW3Q0ICsgKG44IDwgMCA/IC0xIDogMCldLCBzOC5ub2RlVHlwZSA9PSAxICYmIHM4LmNvbnRlbnRFZGl0YWJsZSA9PSAiZmFsc2UiKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHQ0ID0gbjggPCAwID8gV3QoczgpIDogMDsKICAgICAgfSBlbHNlCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICBmdW5jdGlvbiBXdChzOCkgewogICAgcmV0dXJuIHM4Lm5vZGVUeXBlID09IDMgPyBzOC5ub2RlVmFsdWUubGVuZ3RoIDogczguY2hpbGROb2Rlcy5sZW5ndGg7CiAgfQogIHZhciBkcyA9IHsgbGVmdDogMCwgcmlnaHQ6IDAsIHRvcDogMCwgYm90dG9tOiAwIH07CiAgZnVuY3Rpb24geGU0KHM4LCB0NCkgewogICAgbGV0IGU1ID0gdDQgPyBzOC5sZWZ0IDogczgucmlnaHQ7CiAgICByZXR1cm4geyBsZWZ0OiBlNSwgcmlnaHQ6IGU1LCB0b3A6IHM4LnRvcCwgYm90dG9tOiBzOC5ib3R0b20gfTsKICB9CiAgZnVuY3Rpb24gYm4oczgpIHsKICAgIHJldHVybiB7IGxlZnQ6IDAsIHJpZ2h0OiBzOC5pbm5lcldpZHRoLCB0b3A6IDAsIGJvdHRvbTogczguaW5uZXJIZWlnaHQgfTsKICB9CiAgZnVuY3Rpb24geW4oczgsIHQ0LCBlNSwgaTQsIG44LCByMywgbzQsIGw3KSB7CiAgICBsZXQgaDEwID0gczgub3duZXJEb2N1bWVudCwgYTQgPSBoMTAuZGVmYXVsdFZpZXcgfHwgd2luZG93OwogICAgZm9yIChsZXQgYzE3ID0gczg7IGMxNzsgKQogICAgICBpZiAoYzE3Lm5vZGVUeXBlID09IDEpIHsKICAgICAgICBsZXQgZjExLCBkMTUgPSBjMTcgPT0gaDEwLmJvZHk7CiAgICAgICAgaWYgKGQxNSkKICAgICAgICAgIGYxMSA9IGJuKGE0KTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmIChjMTcuc2Nyb2xsSGVpZ2h0IDw9IGMxNy5jbGllbnRIZWlnaHQgJiYgYzE3LnNjcm9sbFdpZHRoIDw9IGMxNy5jbGllbnRXaWR0aCkgewogICAgICAgICAgICBjMTcgPSBjMTcuYXNzaWduZWRTbG90IHx8IGMxNy5wYXJlbnROb2RlOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGxldCBiMjUgPSBjMTcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICBmMTEgPSB7IGxlZnQ6IGIyNS5sZWZ0LCByaWdodDogYjI1LmxlZnQgKyBjMTcuY2xpZW50V2lkdGgsIHRvcDogYjI1LnRvcCwgYm90dG9tOiBiMjUudG9wICsgYzE3LmNsaWVudEhlaWdodCB9OwogICAgICAgIH0KICAgICAgICBsZXQgdTExID0gMCwgcDE4ID0gMDsKICAgICAgICBpZiAobjggPT0gIm5lYXJlc3QiKQogICAgICAgICAgdDQudG9wIDwgZjExLnRvcCA/IChwMTggPSAtKGYxMS50b3AgLSB0NC50b3AgKyBvNCksIGU1ID4gMCAmJiB0NC5ib3R0b20gPiBmMTEuYm90dG9tICsgcDE4ICYmIChwMTggPSB0NC5ib3R0b20gLSBmMTEuYm90dG9tICsgcDE4ICsgbzQpKSA6IHQ0LmJvdHRvbSA+IGYxMS5ib3R0b20gJiYgKHAxOCA9IHQ0LmJvdHRvbSAtIGYxMS5ib3R0b20gKyBvNCwgZTUgPCAwICYmIHQ0LnRvcCAtIHAxOCA8IGYxMS50b3AgJiYgKHAxOCA9IC0oZjExLnRvcCArIHAxOCAtIHQ0LnRvcCArIG80KSkpOwogICAgICAgIGVsc2UgewogICAgICAgICAgbGV0IGIyNSA9IHQ0LmJvdHRvbSAtIHQ0LnRvcCwgbTIzID0gZjExLmJvdHRvbSAtIGYxMS50b3A7CiAgICAgICAgICBwMTggPSAobjggPT0gImNlbnRlciIgJiYgYjI1IDw9IG0yMyA/IHQ0LnRvcCArIGIyNSAvIDIgLSBtMjMgLyAyIDogbjggPT0gInN0YXJ0IiB8fCBuOCA9PSAiY2VudGVyIiAmJiBlNSA8IDAgPyB0NC50b3AgLSBvNCA6IHQ0LmJvdHRvbSAtIG0yMyArIG80KSAtIGYxMS50b3A7CiAgICAgICAgfQogICAgICAgIGlmIChpNCA9PSAibmVhcmVzdCIgPyB0NC5sZWZ0IDwgZjExLmxlZnQgPyAodTExID0gLShmMTEubGVmdCAtIHQ0LmxlZnQgKyByMyksIGU1ID4gMCAmJiB0NC5yaWdodCA+IGYxMS5yaWdodCArIHUxMSAmJiAodTExID0gdDQucmlnaHQgLSBmMTEucmlnaHQgKyB1MTEgKyByMykpIDogdDQucmlnaHQgPiBmMTEucmlnaHQgJiYgKHUxMSA9IHQ0LnJpZ2h0IC0gZjExLnJpZ2h0ICsgcjMsIGU1IDwgMCAmJiB0NC5sZWZ0IDwgZjExLmxlZnQgKyB1MTEgJiYgKHUxMSA9IC0oZjExLmxlZnQgKyB1MTEgLSB0NC5sZWZ0ICsgcjMpKSkgOiB1MTEgPSAoaTQgPT0gImNlbnRlciIgPyB0NC5sZWZ0ICsgKHQ0LnJpZ2h0IC0gdDQubGVmdCkgLyAyIC0gKGYxMS5yaWdodCAtIGYxMS5sZWZ0KSAvIDIgOiBpNCA9PSAic3RhcnQiID09IGw3ID8gdDQubGVmdCAtIHIzIDogdDQucmlnaHQgLSAoZjExLnJpZ2h0IC0gZjExLmxlZnQpICsgcjMpIC0gZjExLmxlZnQsIHUxMSB8fCBwMTgpCiAgICAgICAgICBpZiAoZDE1KQogICAgICAgICAgICBhNC5zY3JvbGxCeSh1MTEsIHAxOCk7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbGV0IGIyNSA9IDAsIG0yMyA9IDA7CiAgICAgICAgICAgIGlmIChwMTgpIHsKICAgICAgICAgICAgICBsZXQgZzEyID0gYzE3LnNjcm9sbFRvcDsKICAgICAgICAgICAgICBjMTcuc2Nyb2xsVG9wICs9IHAxOCwgbTIzID0gYzE3LnNjcm9sbFRvcCAtIGcxMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodTExKSB7CiAgICAgICAgICAgICAgbGV0IGcxMiA9IGMxNy5zY3JvbGxMZWZ0OwogICAgICAgICAgICAgIGMxNy5zY3JvbGxMZWZ0ICs9IHUxMSwgYjI1ID0gYzE3LnNjcm9sbExlZnQgLSBnMTI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdDQgPSB7IGxlZnQ6IHQ0LmxlZnQgLSBiMjUsIHRvcDogdDQudG9wIC0gbTIzLCByaWdodDogdDQucmlnaHQgLSBiMjUsIGJvdHRvbTogdDQuYm90dG9tIC0gbTIzIH0sIGIyNSAmJiBNYXRoLmFicyhiMjUgLSB1MTEpIDwgMSAmJiAoaTQgPSAibmVhcmVzdCIpLCBtMjMgJiYgTWF0aC5hYnMobTIzIC0gcDE4KSA8IDEgJiYgKG44ID0gIm5lYXJlc3QiKTsKICAgICAgICAgIH0KICAgICAgICBpZiAoZDE1KQogICAgICAgICAgYnJlYWs7CiAgICAgICAgYzE3ID0gYzE3LmFzc2lnbmVkU2xvdCB8fCBjMTcucGFyZW50Tm9kZTsKICAgICAgfSBlbHNlIGlmIChjMTcubm9kZVR5cGUgPT0gMTEpCiAgICAgICAgYzE3ID0gYzE3Lmhvc3Q7CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICB9CiAgdmFyIEVlMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aGlzLmFuY2hvck5vZGUgPSBudWxsLCB0aGlzLmFuY2hvck9mZnNldCA9IDAsIHRoaXMuZm9jdXNOb2RlID0gbnVsbCwgdGhpcy5mb2N1c09mZnNldCA9IDA7CiAgICB9CiAgICBlcSh0NCkgewogICAgICByZXR1cm4gdGhpcy5hbmNob3JOb2RlID09IHQ0LmFuY2hvck5vZGUgJiYgdGhpcy5hbmNob3JPZmZzZXQgPT0gdDQuYW5jaG9yT2Zmc2V0ICYmIHRoaXMuZm9jdXNOb2RlID09IHQ0LmZvY3VzTm9kZSAmJiB0aGlzLmZvY3VzT2Zmc2V0ID09IHQ0LmZvY3VzT2Zmc2V0OwogICAgfQogICAgc2V0UmFuZ2UodDQpIHsKICAgICAgdGhpcy5zZXQodDQuYW5jaG9yTm9kZSwgdDQuYW5jaG9yT2Zmc2V0LCB0NC5mb2N1c05vZGUsIHQ0LmZvY3VzT2Zmc2V0KTsKICAgIH0KICAgIHNldCh0NCwgZTUsIGk0LCBuOCkgewogICAgICB0aGlzLmFuY2hvck5vZGUgPSB0NCwgdGhpcy5hbmNob3JPZmZzZXQgPSBlNSwgdGhpcy5mb2N1c05vZGUgPSBpNCwgdGhpcy5mb2N1c09mZnNldCA9IG44OwogICAgfQogIH07CiAgdmFyIGR0ID0gbnVsbDsKICBmdW5jdGlvbiB1cyhzOCkgewogICAgaWYgKHM4LnNldEFjdGl2ZSkKICAgICAgcmV0dXJuIHM4LnNldEFjdGl2ZSgpOwogICAgaWYgKGR0KQogICAgICByZXR1cm4gczguZm9jdXMoZHQpOwogICAgbGV0IHQ0ID0gW107CiAgICBmb3IgKGxldCBlNSA9IHM4OyBlNSAmJiAodDQucHVzaChlNSwgZTUuc2Nyb2xsVG9wLCBlNS5zY3JvbGxMZWZ0KSwgZTUgIT0gZTUub3duZXJEb2N1bWVudCk7IGU1ID0gZTUucGFyZW50Tm9kZSkKICAgICAgOwogICAgaWYgKHM4LmZvY3VzKGR0ID09IG51bGwgPyB7IGdldCBwcmV2ZW50U2Nyb2xsKCkgewogICAgICByZXR1cm4gZHQgPSB7IHByZXZlbnRTY3JvbGw6IHRydWUgfSwgdHJ1ZTsKICAgIH0gfSA6IHZvaWQgMCksICFkdCkgewogICAgICBkdCA9IGZhbHNlOwogICAgICBmb3IgKGxldCBlNSA9IDA7IGU1IDwgdDQubGVuZ3RoOyApIHsKICAgICAgICBsZXQgaTQgPSB0NFtlNSsrXSwgbjggPSB0NFtlNSsrXSwgcjMgPSB0NFtlNSsrXTsKICAgICAgICBpNC5zY3JvbGxUb3AgIT0gbjggJiYgKGk0LnNjcm9sbFRvcCA9IG44KSwgaTQuc2Nyb2xsTGVmdCAhPSByMyAmJiAoaTQuc2Nyb2xsTGVmdCA9IHIzKTsKICAgICAgfQogICAgfQogIH0KICB2YXIgQ2k7CiAgZnVuY3Rpb24gd3QoczgsIHQ0LCBlNSA9IHQ0KSB7CiAgICBsZXQgaTQgPSBDaSB8fCAoQ2kgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpKTsKICAgIHJldHVybiBpNC5zZXRFbmQoczgsIGU1KSwgaTQuc2V0U3RhcnQoczgsIHQ0KSwgaTQ7CiAgfQogIGZ1bmN0aW9uIEV0KHM4LCB0NCwgZTUpIHsKICAgIGxldCBpNCA9IHsga2V5OiB0NCwgY29kZTogdDQsIGtleUNvZGU6IGU1LCB3aGljaDogZTUsIGNhbmNlbGFibGU6IHRydWUgfSwgbjggPSBuZXcgS2V5Ym9hcmRFdmVudCgia2V5ZG93biIsIGk0KTsKICAgIG44LnN5bnRoZXRpYyA9IHRydWUsIHM4LmRpc3BhdGNoRXZlbnQobjgpOwogICAgbGV0IHIzID0gbmV3IEtleWJvYXJkRXZlbnQoImtleXVwIiwgaTQpOwogICAgcmV0dXJuIHIzLnN5bnRoZXRpYyA9IHRydWUsIHM4LmRpc3BhdGNoRXZlbnQocjMpLCBuOC5kZWZhdWx0UHJldmVudGVkIHx8IHIzLmRlZmF1bHRQcmV2ZW50ZWQ7CiAgfQogIGZ1bmN0aW9uIHduKHM4KSB7CiAgICBmb3IgKDsgczg7ICkgewogICAgICBpZiAoczggJiYgKHM4Lm5vZGVUeXBlID09IDkgfHwgczgubm9kZVR5cGUgPT0gMTEgJiYgczguaG9zdCkpCiAgICAgICAgcmV0dXJuIHM4OwogICAgICBzOCA9IHM4LmFzc2lnbmVkU2xvdCB8fCBzOC5wYXJlbnROb2RlOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIHBzKHM4KSB7CiAgICBmb3IgKDsgczguYXR0cmlidXRlcy5sZW5ndGg7ICkKICAgICAgczgucmVtb3ZlQXR0cmlidXRlTm9kZShzOC5hdHRyaWJ1dGVzWzBdKTsKICB9CiAgZnVuY3Rpb24gdm4oczgsIHQ0KSB7CiAgICBsZXQgZTUgPSB0NC5mb2N1c05vZGUsIGk0ID0gdDQuZm9jdXNPZmZzZXQ7CiAgICBpZiAoIWU1IHx8IHQ0LmFuY2hvck5vZGUgIT0gZTUgfHwgdDQuYW5jaG9yT2Zmc2V0ICE9IGk0KQogICAgICByZXR1cm4gZmFsc2U7CiAgICBmb3IgKDsgOyApCiAgICAgIGlmIChpNCkgewogICAgICAgIGlmIChlNS5ub2RlVHlwZSAhPSAxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGxldCBuOCA9IGU1LmNoaWxkTm9kZXNbaTQgLSAxXTsKICAgICAgICBuOC5jb250ZW50RWRpdGFibGUgPT0gImZhbHNlIiA/IGk0LS0gOiAoZTUgPSBuOCwgaTQgPSBXdChlNSkpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChlNSA9PSBzOCkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGk0ID0gcmUzKGU1KSwgZTUgPSBlNS5wYXJlbnROb2RlOwogICAgICB9CiAgfQogIHZhciBCMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgaTQgPSB0cnVlKSB7CiAgICAgIHRoaXMubm9kZSA9IHQ0LCB0aGlzLm9mZnNldCA9IGU1LCB0aGlzLnByZWNpc2UgPSBpNDsKICAgIH0KICAgIHN0YXRpYyBiZWZvcmUodDQsIGU1KSB7CiAgICAgIHJldHVybiBuZXcgQjModDQucGFyZW50Tm9kZSwgcmUzKHQ0KSwgZTUpOwogICAgfQogICAgc3RhdGljIGFmdGVyKHQ0LCBlNSkgewogICAgICByZXR1cm4gbmV3IEIzKHQ0LnBhcmVudE5vZGUsIHJlMyh0NCkgKyAxLCBlNSk7CiAgICB9CiAgfTsKICB2YXIgYmkgPSBbXTsKICB2YXIgQTMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgdGhpcy5wYXJlbnQgPSBudWxsLCB0aGlzLmRvbSA9IG51bGwsIHRoaXMuZGlydHkgPSAyOwogICAgfQogICAgZ2V0IGVkaXRvclZpZXcoKSB7CiAgICAgIGlmICghdGhpcy5wYXJlbnQpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBY2Nlc3NpbmcgdmlldyBpbiBvcnBoYW4gY29udGVudCB2aWV3Iik7CiAgICAgIHJldHVybiB0aGlzLnBhcmVudC5lZGl0b3JWaWV3OwogICAgfQogICAgZ2V0IG92ZXJyaWRlRE9NVGV4dCgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBnZXQgcG9zQXRTdGFydCgpIHsKICAgICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQucG9zQmVmb3JlKHRoaXMpIDogMDsKICAgIH0KICAgIGdldCBwb3NBdEVuZCgpIHsKICAgICAgcmV0dXJuIHRoaXMucG9zQXRTdGFydCArIHRoaXMubGVuZ3RoOwogICAgfQogICAgcG9zQmVmb3JlKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMucG9zQXRTdGFydDsKICAgICAgZm9yIChsZXQgaTQgb2YgdGhpcy5jaGlsZHJlbikgewogICAgICAgIGlmIChpNCA9PSB0NCkKICAgICAgICAgIHJldHVybiBlNTsKICAgICAgICBlNSArPSBpNC5sZW5ndGggKyBpNC5icmVha0FmdGVyOwogICAgICB9CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIGNoaWxkIGluIHBvc0JlZm9yZSIpOwogICAgfQogICAgcG9zQWZ0ZXIodDQpIHsKICAgICAgcmV0dXJuIHRoaXMucG9zQmVmb3JlKHQ0KSArIHQ0Lmxlbmd0aDsKICAgIH0KICAgIGNvb3Jkc0F0KHQ0LCBlNSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHN5bmModDQpIHsKICAgICAgaWYgKHRoaXMuZGlydHkgJiAyKSB7CiAgICAgICAgbGV0IGU1ID0gdGhpcy5kb20sIGk0ID0gbnVsbCwgbjg7CiAgICAgICAgZm9yIChsZXQgcjMgb2YgdGhpcy5jaGlsZHJlbikgewogICAgICAgICAgaWYgKHIzLmRpcnR5KSB7CiAgICAgICAgICAgIGlmICghcjMuZG9tICYmIChuOCA9IGk0ID8gaTQubmV4dFNpYmxpbmcgOiBlNS5maXJzdENoaWxkKSkgewogICAgICAgICAgICAgIGxldCBvNCA9IEEzLmdldChuOCk7CiAgICAgICAgICAgICAgKCFvNCB8fCAhbzQucGFyZW50ICYmIG80LmNhblJldXNlRE9NKHIzKSkgJiYgcjMucmV1c2VET00objgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHIzLnN5bmModDQpLCByMy5kaXJ0eSA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobjggPSBpNCA/IGk0Lm5leHRTaWJsaW5nIDogZTUuZmlyc3RDaGlsZCwgdDQgJiYgIXQ0LndyaXR0ZW4gJiYgdDQubm9kZSA9PSBlNSAmJiBuOCAhPSByMy5kb20gJiYgKHQ0LndyaXR0ZW4gPSB0cnVlKSwgcjMuZG9tLnBhcmVudE5vZGUgPT0gZTUpCiAgICAgICAgICAgIGZvciAoOyBuOCAmJiBuOCAhPSByMy5kb207ICkKICAgICAgICAgICAgICBuOCA9IE1pMihuOCk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGU1Lmluc2VydEJlZm9yZShyMy5kb20sIG44KTsKICAgICAgICAgIGk0ID0gcjMuZG9tOwogICAgICAgIH0KICAgICAgICBmb3IgKG44ID0gaTQgPyBpNC5uZXh0U2libGluZyA6IGU1LmZpcnN0Q2hpbGQsIG44ICYmIHQ0ICYmIHQ0Lm5vZGUgPT0gZTUgJiYgKHQ0LndyaXR0ZW4gPSB0cnVlKTsgbjg7ICkKICAgICAgICAgIG44ID0gTWkyKG44KTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmRpcnR5ICYgMSkKICAgICAgICBmb3IgKGxldCBlNSBvZiB0aGlzLmNoaWxkcmVuKQogICAgICAgICAgZTUuZGlydHkgJiYgKGU1LnN5bmModDQpLCBlNS5kaXJ0eSA9IDApOwogICAgfQogICAgcmV1c2VET00odDQpIHsKICAgIH0KICAgIGxvY2FsUG9zRnJvbURPTSh0NCwgZTUpIHsKICAgICAgbGV0IGk0OwogICAgICBpZiAodDQgPT0gdGhpcy5kb20pCiAgICAgICAgaTQgPSB0aGlzLmRvbS5jaGlsZE5vZGVzW2U1XTsKICAgICAgZWxzZSB7CiAgICAgICAgbGV0IG44ID0gV3QodDQpID09IDAgPyAwIDogZTUgPT0gMCA/IC0xIDogMTsKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGxldCByMyA9IHQ0LnBhcmVudE5vZGU7CiAgICAgICAgICBpZiAocjMgPT0gdGhpcy5kb20pCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgbjggPT0gMCAmJiByMy5maXJzdENoaWxkICE9IHIzLmxhc3RDaGlsZCAmJiAodDQgPT0gcjMuZmlyc3RDaGlsZCA/IG44ID0gLTEgOiBuOCA9IDEpLCB0NCA9IHIzOwogICAgICAgIH0KICAgICAgICBuOCA8IDAgPyBpNCA9IHQ0IDogaTQgPSB0NC5uZXh0U2libGluZzsKICAgICAgfQogICAgICBpZiAoaTQgPT0gdGhpcy5kb20uZmlyc3RDaGlsZCkKICAgICAgICByZXR1cm4gMDsKICAgICAgZm9yICg7IGk0ICYmICFBMy5nZXQoaTQpOyApCiAgICAgICAgaTQgPSBpNC5uZXh0U2libGluZzsKICAgICAgaWYgKCFpNCkKICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGg7CiAgICAgIGZvciAobGV0IG44ID0gMCwgcjMgPSAwOyA7IG44KyspIHsKICAgICAgICBsZXQgbzQgPSB0aGlzLmNoaWxkcmVuW244XTsKICAgICAgICBpZiAobzQuZG9tID09IGk0KQogICAgICAgICAgcmV0dXJuIHIzOwogICAgICAgIHIzICs9IG80Lmxlbmd0aCArIG80LmJyZWFrQWZ0ZXI7CiAgICAgIH0KICAgIH0KICAgIGRvbUJvdW5kc0Fyb3VuZCh0NCwgZTUsIGk0ID0gMCkgewogICAgICBsZXQgbjggPSAtMSwgcjMgPSAtMSwgbzQgPSAtMSwgbDcgPSAtMTsKICAgICAgZm9yIChsZXQgaDEwID0gMCwgYTQgPSBpNCwgYzE3ID0gaTQ7IGgxMCA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBoMTArKykgewogICAgICAgIGxldCBmMTEgPSB0aGlzLmNoaWxkcmVuW2gxMF0sIGQxNSA9IGE0ICsgZjExLmxlbmd0aDsKICAgICAgICBpZiAoYTQgPCB0NCAmJiBkMTUgPiBlNSkKICAgICAgICAgIHJldHVybiBmMTEuZG9tQm91bmRzQXJvdW5kKHQ0LCBlNSwgYTQpOwogICAgICAgIGlmIChkMTUgPj0gdDQgJiYgbjggPT0gLTEgJiYgKG44ID0gaDEwLCByMyA9IGE0KSwgYTQgPiBlNSAmJiBmMTEuZG9tLnBhcmVudE5vZGUgPT0gdGhpcy5kb20pIHsKICAgICAgICAgIG80ID0gaDEwLCBsNyA9IGMxNzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjMTcgPSBkMTUsIGE0ID0gZDE1ICsgZjExLmJyZWFrQWZ0ZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgZnJvbTogcjMsIHRvOiBsNyA8IDAgPyBpNCArIHRoaXMubGVuZ3RoIDogbDcsIHN0YXJ0RE9NOiAobjggPyB0aGlzLmNoaWxkcmVuW244IC0gMV0uZG9tLm5leHRTaWJsaW5nIDogbnVsbCkgfHwgdGhpcy5kb20uZmlyc3RDaGlsZCwgZW5kRE9NOiBvNCA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoICYmIG80ID49IDAgPyB0aGlzLmNoaWxkcmVuW280XS5kb20gOiBudWxsIH07CiAgICB9CiAgICBtYXJrRGlydHkodDQgPSBmYWxzZSkgewogICAgICB0aGlzLmRpcnR5IHw9IDIsIHRoaXMubWFya1BhcmVudHNEaXJ0eSh0NCk7CiAgICB9CiAgICBtYXJrUGFyZW50c0RpcnR5KHQ0KSB7CiAgICAgIGZvciAobGV0IGU1ID0gdGhpcy5wYXJlbnQ7IGU1OyBlNSA9IGU1LnBhcmVudCkgewogICAgICAgIGlmICh0NCAmJiAoZTUuZGlydHkgfD0gMiksIGU1LmRpcnR5ICYgMSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBlNS5kaXJ0eSB8PSAxLCB0NCA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBzZXRQYXJlbnQodDQpIHsKICAgICAgdGhpcy5wYXJlbnQgIT0gdDQgJiYgKHRoaXMucGFyZW50ID0gdDQsIHRoaXMuZGlydHkgJiYgdGhpcy5tYXJrUGFyZW50c0RpcnR5KHRydWUpKTsKICAgIH0KICAgIHNldERPTSh0NCkgewogICAgICB0aGlzLmRvbSAmJiAodGhpcy5kb20uY21WaWV3ID0gbnVsbCksIHRoaXMuZG9tID0gdDQsIHQ0LmNtVmlldyA9IHRoaXM7CiAgICB9CiAgICBnZXQgcm9vdFZpZXcoKSB7CiAgICAgIGZvciAobGV0IHQ0ID0gdGhpczsgOyApIHsKICAgICAgICBsZXQgZTUgPSB0NC5wYXJlbnQ7CiAgICAgICAgaWYgKCFlNSkKICAgICAgICAgIHJldHVybiB0NDsKICAgICAgICB0NCA9IGU1OwogICAgICB9CiAgICB9CiAgICByZXBsYWNlQ2hpbGRyZW4odDQsIGU1LCBpNCA9IGJpKSB7CiAgICAgIHRoaXMubWFya0RpcnR5KCk7CiAgICAgIGZvciAobGV0IG44ID0gdDQ7IG44IDwgZTU7IG44KyspIHsKICAgICAgICBsZXQgcjMgPSB0aGlzLmNoaWxkcmVuW244XTsKICAgICAgICByMy5wYXJlbnQgPT0gdGhpcyAmJiByMy5kZXN0cm95KCk7CiAgICAgIH0KICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UodDQsIGU1IC0gdDQsIC4uLmk0KTsKICAgICAgZm9yIChsZXQgbjggPSAwOyBuOCA8IGk0Lmxlbmd0aDsgbjgrKykKICAgICAgICBpNFtuOF0uc2V0UGFyZW50KHRoaXMpOwogICAgfQogICAgaWdub3JlTXV0YXRpb24odDQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWdub3JlRXZlbnQodDQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY2hpbGRDdXJzb3IodDQgPSB0aGlzLmxlbmd0aCkgewogICAgICByZXR1cm4gbmV3IG9lMih0aGlzLmNoaWxkcmVuLCB0NCwgdGhpcy5jaGlsZHJlbi5sZW5ndGgpOwogICAgfQogICAgY2hpbGRQb3ModDQsIGU1ID0gMSkgewogICAgICByZXR1cm4gdGhpcy5jaGlsZEN1cnNvcigpLmZpbmRQb3ModDQsIGU1KTsKICAgIH0KICAgIHRvU3RyaW5nKCkgewogICAgICBsZXQgdDQgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWUucmVwbGFjZSgiVmlldyIsICIiKTsKICAgICAgcmV0dXJuIHQ0ICsgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID8gIigiICsgdGhpcy5jaGlsZHJlbi5qb2luKCkgKyAiKSIgOiB0aGlzLmxlbmd0aCA/ICJbIiArICh0NCA9PSAiVGV4dCIgPyB0aGlzLnRleHQgOiB0aGlzLmxlbmd0aCkgKyAiXSIgOiAiIikgKyAodGhpcy5icmVha0FmdGVyID8gIiMiIDogIiIpOwogICAgfQogICAgc3RhdGljIGdldCh0NCkgewogICAgICByZXR1cm4gdDQuY21WaWV3OwogICAgfQogICAgZ2V0IGlzRWRpdGFibGUoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgbWVyZ2UodDQsIGU1LCBpNCwgbjgsIHIzLCBvNCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBiZWNvbWUodDQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY2FuUmV1c2VET00odDQpIHsKICAgICAgcmV0dXJuIHQ0LmNvbnN0cnVjdG9yID09IHRoaXMuY29uc3RydWN0b3I7CiAgICB9CiAgICBnZXRTaWRlKCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKICAgIH0KICB9OwogIEEzLnByb3RvdHlwZS5icmVha0FmdGVyID0gMDsKICBmdW5jdGlvbiBNaTIoczgpIHsKICAgIGxldCB0NCA9IHM4Lm5leHRTaWJsaW5nOwogICAgcmV0dXJuIHM4LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoczgpLCB0NDsKICB9CiAgdmFyIG9lMiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgaTQpIHsKICAgICAgdGhpcy5jaGlsZHJlbiA9IHQ0LCB0aGlzLnBvcyA9IGU1LCB0aGlzLmkgPSBpNCwgdGhpcy5vZmYgPSAwOwogICAgfQogICAgZmluZFBvcyh0NCwgZTUgPSAxKSB7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGlmICh0NCA+IHRoaXMucG9zIHx8IHQ0ID09IHRoaXMucG9zICYmIChlNSA+IDAgfHwgdGhpcy5pID09IDAgfHwgdGhpcy5jaGlsZHJlblt0aGlzLmkgLSAxXS5icmVha0FmdGVyKSkKICAgICAgICAgIHJldHVybiB0aGlzLm9mZiA9IHQ0IC0gdGhpcy5wb3MsIHRoaXM7CiAgICAgICAgbGV0IGk0ID0gdGhpcy5jaGlsZHJlblstLXRoaXMuaV07CiAgICAgICAgdGhpcy5wb3MgLT0gaTQubGVuZ3RoICsgaTQuYnJlYWtBZnRlcjsKICAgICAgfQogICAgfQogIH07CiAgZnVuY3Rpb24gbXMoczgsIHQ0LCBlNSwgaTQsIG44LCByMywgbzQsIGw3LCBoMTApIHsKICAgIGxldCB7IGNoaWxkcmVuOiBhNCB9ID0gczgsIGMxNyA9IGE0Lmxlbmd0aCA/IGE0W3Q0XSA6IG51bGwsIGYxMSA9IHIzLmxlbmd0aCA/IHIzW3IzLmxlbmd0aCAtIDFdIDogbnVsbCwgZDE1ID0gZjExID8gZjExLmJyZWFrQWZ0ZXIgOiBvNDsKICAgIGlmICghKHQ0ID09IGk0ICYmIGMxNyAmJiAhbzQgJiYgIWQxNSAmJiByMy5sZW5ndGggPCAyICYmIGMxNy5tZXJnZShlNSwgbjgsIHIzLmxlbmd0aCA/IGYxMSA6IG51bGwsIGU1ID09IDAsIGw3LCBoMTApKSkgewogICAgICBpZiAoaTQgPCBhNC5sZW5ndGgpIHsKICAgICAgICBsZXQgdTExID0gYTRbaTRdOwogICAgICAgIHUxMSAmJiBuOCA8IHUxMS5sZW5ndGggPyAodDQgPT0gaTQgJiYgKHUxMSA9IHUxMS5zcGxpdChuOCksIG44ID0gMCksICFkMTUgJiYgZjExICYmIHUxMS5tZXJnZSgwLCBuOCwgZjExLCB0cnVlLCAwLCBoMTApID8gcjNbcjMubGVuZ3RoIC0gMV0gPSB1MTEgOiAobjggJiYgdTExLm1lcmdlKDAsIG44LCBudWxsLCBmYWxzZSwgMCwgaDEwKSwgcjMucHVzaCh1MTEpKSkgOiB1MTE/LmJyZWFrQWZ0ZXIgJiYgKGYxMSA/IGYxMS5icmVha0FmdGVyID0gMSA6IG80ID0gMSksIGk0Kys7CiAgICAgIH0KICAgICAgZm9yIChjMTcgJiYgKGMxNy5icmVha0FmdGVyID0gbzQsIGU1ID4gMCAmJiAoIW80ICYmIHIzLmxlbmd0aCAmJiBjMTcubWVyZ2UoZTUsIGMxNy5sZW5ndGgsIHIzWzBdLCBmYWxzZSwgbDcsIDApID8gYzE3LmJyZWFrQWZ0ZXIgPSByMy5zaGlmdCgpLmJyZWFrQWZ0ZXIgOiAoZTUgPCBjMTcubGVuZ3RoIHx8IGMxNy5jaGlsZHJlbi5sZW5ndGggJiYgYzE3LmNoaWxkcmVuW2MxNy5jaGlsZHJlbi5sZW5ndGggLSAxXS5sZW5ndGggPT0gMCkgJiYgYzE3Lm1lcmdlKGU1LCBjMTcubGVuZ3RoLCBudWxsLCBmYWxzZSwgbDcsIDApLCB0NCsrKSk7IHQ0IDwgaTQgJiYgcjMubGVuZ3RoOyApCiAgICAgICAgaWYgKGE0W2k0IC0gMV0uYmVjb21lKHIzW3IzLmxlbmd0aCAtIDFdKSkKICAgICAgICAgIGk0LS0sIHIzLnBvcCgpLCBoMTAgPSByMy5sZW5ndGggPyAwIDogbDc7CiAgICAgICAgZWxzZSBpZiAoYTRbdDRdLmJlY29tZShyM1swXSkpCiAgICAgICAgICB0NCsrLCByMy5zaGlmdCgpLCBsNyA9IHIzLmxlbmd0aCA/IDAgOiBoMTA7CiAgICAgICAgZWxzZQogICAgICAgICAgYnJlYWs7CiAgICAgICFyMy5sZW5ndGggJiYgdDQgJiYgaTQgPCBhNC5sZW5ndGggJiYgIWE0W3Q0IC0gMV0uYnJlYWtBZnRlciAmJiBhNFtpNF0ubWVyZ2UoMCwgMCwgYTRbdDQgLSAxXSwgZmFsc2UsIGw3LCBoMTApICYmIHQ0LS0sICh0NCA8IGk0IHx8IHIzLmxlbmd0aCkgJiYgczgucmVwbGFjZUNoaWxkcmVuKHQ0LCBpNCwgcjMpOwogICAgfQogIH0KICBmdW5jdGlvbiBncyhzOCwgdDQsIGU1LCBpNCwgbjgsIHIzKSB7CiAgICBsZXQgbzQgPSBzOC5jaGlsZEN1cnNvcigpLCB7IGk6IGw3LCBvZmY6IGgxMCB9ID0gbzQuZmluZFBvcyhlNSwgMSksIHsgaTogYTQsIG9mZjogYzE3IH0gPSBvNC5maW5kUG9zKHQ0LCAtMSksIGYxMSA9IHQ0IC0gZTU7CiAgICBmb3IgKGxldCBkMTUgb2YgaTQpCiAgICAgIGYxMSArPSBkMTUubGVuZ3RoOwogICAgczgubGVuZ3RoICs9IGYxMSwgbXMoczgsIGE0LCBjMTcsIGw3LCBoMTAsIGk0LCAwLCBuOCwgcjMpOwogIH0KICB2YXIgejQgPSB0eXBlb2YgbmF2aWdhdG9yIDwgInUiID8gbmF2aWdhdG9yIDogeyB1c2VyQWdlbnQ6ICIiLCB2ZW5kb3I6ICIiLCBwbGF0Zm9ybTogIiIgfTsKICB2YXIgQmUyID0gdHlwZW9mIGRvY3VtZW50IDwgInUiID8gZG9jdW1lbnQgOiB7IGRvY3VtZW50RWxlbWVudDogeyBzdHlsZToge30gfSB9OwogIHZhciBQZTQgPSAvRWRnZVwvKFxkKykvLmV4ZWMoejQudXNlckFnZW50KTsKICB2YXIgYnMgPSAvTVNJRSBcZC8udGVzdCh6NC51c2VyQWdlbnQpOwogIHZhciBIZTIgPSAvVHJpZGVudFwvKD86WzctOV18XGR7Mix9KVwuLipydjooXGQrKS8uZXhlYyh6NC51c2VyQWdlbnQpOwogIHZhciBTZTMgPSAhIShicyB8fCBIZTIgfHwgUGU0KTsKICB2YXIga2kgPSAhU2UzICYmIC9nZWNrb1wvKFxkKykvaS50ZXN0KHo0LnVzZXJBZ2VudCk7CiAgdmFyIE1lNCA9ICFTZTMgJiYgL0Nocm9tZVwvKFxkKykvLmV4ZWMoejQudXNlckFnZW50KTsKICB2YXIgQWkgPSAid2Via2l0Rm9udFNtb290aGluZyIgaW4gQmUyLmRvY3VtZW50RWxlbWVudC5zdHlsZTsKICB2YXIgeXMgPSAhU2UzICYmIC9BcHBsZSBDb21wdXRlci8udGVzdCh6NC52ZW5kb3IpOwogIHZhciBEaSA9IHlzICYmICgvTW9iaWxlXC9cdysvLnRlc3QoejQudXNlckFnZW50KSB8fCB6NC5tYXhUb3VjaFBvaW50cyA+IDIpOwogIHZhciB5MyA9IHsgbWFjOiBEaSB8fCAvTWFjLy50ZXN0KHo0LnBsYXRmb3JtKSwgd2luZG93czogL1dpbi8udGVzdCh6NC5wbGF0Zm9ybSksIGxpbnV4OiAvTGludXh8WDExLy50ZXN0KHo0LnBsYXRmb3JtKSwgaWU6IFNlMywgaWVfdmVyc2lvbjogYnMgPyBCZTIuZG9jdW1lbnRNb2RlIHx8IDYgOiBIZTIgPyArSGUyWzFdIDogUGU0ID8gK1BlNFsxXSA6IDAsIGdlY2tvOiBraSwgZ2Vja29fdmVyc2lvbjoga2kgPyArKC9GaXJlZm94XC8oXGQrKS8uZXhlYyh6NC51c2VyQWdlbnQpIHx8IFswLCAwXSlbMV0gOiAwLCBjaHJvbWU6ICEhTWU0LCBjaHJvbWVfdmVyc2lvbjogTWU0ID8gK01lNFsxXSA6IDAsIGlvczogRGksIGFuZHJvaWQ6IC9BbmRyb2lkXGIvLnRlc3QoejQudXNlckFnZW50KSwgd2Via2l0OiBBaSwgc2FmYXJpOiB5cywgd2Via2l0X3ZlcnNpb246IEFpID8gKygvXGJBcHBsZVdlYktpdFwvKFxkKykvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgWzAsIDBdKVsxXSA6IDAsIHRhYlNpemU6IEJlMi5kb2N1bWVudEVsZW1lbnQuc3R5bGUudGFiU2l6ZSAhPSBudWxsID8gInRhYi1zaXplIiA6ICItbW96LXRhYi1zaXplIiB9OwogIHZhciB4biA9IDI1NjsKICB2YXIgJDQgPSBjbGFzcyBleHRlbmRzIEEzIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHN1cGVyKCksIHRoaXMudGV4dCA9IHQ0OwogICAgfQogICAgZ2V0IGxlbmd0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMudGV4dC5sZW5ndGg7CiAgICB9CiAgICBjcmVhdGVET00odDQpIHsKICAgICAgdGhpcy5zZXRET00odDQgfHwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy50ZXh0KSk7CiAgICB9CiAgICBzeW5jKHQ0KSB7CiAgICAgIHRoaXMuZG9tIHx8IHRoaXMuY3JlYXRlRE9NKCksIHRoaXMuZG9tLm5vZGVWYWx1ZSAhPSB0aGlzLnRleHQgJiYgKHQ0ICYmIHQ0Lm5vZGUgPT0gdGhpcy5kb20gJiYgKHQ0LndyaXR0ZW4gPSB0cnVlKSwgdGhpcy5kb20ubm9kZVZhbHVlID0gdGhpcy50ZXh0KTsKICAgIH0KICAgIHJldXNlRE9NKHQ0KSB7CiAgICAgIHQ0Lm5vZGVUeXBlID09IDMgJiYgdGhpcy5jcmVhdGVET00odDQpOwogICAgfQogICAgbWVyZ2UodDQsIGU1LCBpNCkgewogICAgICByZXR1cm4gaTQgJiYgKCEoaTQgaW5zdGFuY2VvZiAkNCkgfHwgdGhpcy5sZW5ndGggLSAoZTUgLSB0NCkgKyBpNC5sZW5ndGggPiB4bikgPyBmYWxzZSA6ICh0aGlzLnRleHQgPSB0aGlzLnRleHQuc2xpY2UoMCwgdDQpICsgKGk0ID8gaTQudGV4dCA6ICIiKSArIHRoaXMudGV4dC5zbGljZShlNSksIHRoaXMubWFya0RpcnR5KCksIHRydWUpOwogICAgfQogICAgc3BsaXQodDQpIHsKICAgICAgbGV0IGU1ID0gbmV3ICQ0KHRoaXMudGV4dC5zbGljZSh0NCkpOwogICAgICByZXR1cm4gdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnNsaWNlKDAsIHQ0KSwgdGhpcy5tYXJrRGlydHkoKSwgZTU7CiAgICB9CiAgICBsb2NhbFBvc0Zyb21ET00odDQsIGU1KSB7CiAgICAgIHJldHVybiB0NCA9PSB0aGlzLmRvbSA/IGU1IDogZTUgPyB0aGlzLnRleHQubGVuZ3RoIDogMDsKICAgIH0KICAgIGRvbUF0UG9zKHQ0KSB7CiAgICAgIHJldHVybiBuZXcgQjModGhpcy5kb20sIHQ0KTsKICAgIH0KICAgIGRvbUJvdW5kc0Fyb3VuZCh0NCwgZTUsIGk0KSB7CiAgICAgIHJldHVybiB7IGZyb206IGk0LCB0bzogaTQgKyB0aGlzLmxlbmd0aCwgc3RhcnRET006IHRoaXMuZG9tLCBlbmRET006IHRoaXMuZG9tLm5leHRTaWJsaW5nIH07CiAgICB9CiAgICBjb29yZHNBdCh0NCwgZTUpIHsKICAgICAgcmV0dXJuIE5lMih0aGlzLmRvbSwgdDQsIGU1KTsKICAgIH0KICB9OwogIHZhciBxMiA9IGNsYXNzIGV4dGVuZHMgQTMgewogICAgY29uc3RydWN0b3IodDQsIGU1ID0gW10sIGk0ID0gMCkgewogICAgICBzdXBlcigpLCB0aGlzLm1hcmsgPSB0NCwgdGhpcy5jaGlsZHJlbiA9IGU1LCB0aGlzLmxlbmd0aCA9IGk0OwogICAgICBmb3IgKGxldCBuOCBvZiBlNSkKICAgICAgICBuOC5zZXRQYXJlbnQodGhpcyk7CiAgICB9CiAgICBzZXRBdHRycyh0NCkgewogICAgICBpZiAocHModDQpLCB0aGlzLm1hcmsuY2xhc3MgJiYgKHQ0LmNsYXNzTmFtZSA9IHRoaXMubWFyay5jbGFzcyksIHRoaXMubWFyay5hdHRycykKICAgICAgICBmb3IgKGxldCBlNSBpbiB0aGlzLm1hcmsuYXR0cnMpCiAgICAgICAgICB0NC5zZXRBdHRyaWJ1dGUoZTUsIHRoaXMubWFyay5hdHRyc1tlNV0pOwogICAgICByZXR1cm4gdDQ7CiAgICB9CiAgICByZXVzZURPTSh0NCkgewogICAgICB0NC5ub2RlTmFtZSA9PSB0aGlzLm1hcmsudGFnTmFtZS50b1VwcGVyQ2FzZSgpICYmICh0aGlzLnNldERPTSh0NCksIHRoaXMuZGlydHkgfD0gNik7CiAgICB9CiAgICBzeW5jKHQ0KSB7CiAgICAgIHRoaXMuZG9tID8gdGhpcy5kaXJ0eSAmIDQgJiYgdGhpcy5zZXRBdHRycyh0aGlzLmRvbSkgOiB0aGlzLnNldERPTSh0aGlzLnNldEF0dHJzKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5tYXJrLnRhZ05hbWUpKSksIHN1cGVyLnN5bmModDQpOwogICAgfQogICAgbWVyZ2UodDQsIGU1LCBpNCwgbjgsIHIzLCBvNCkgewogICAgICByZXR1cm4gaTQgJiYgKCEoaTQgaW5zdGFuY2VvZiBxMiAmJiBpNC5tYXJrLmVxKHRoaXMubWFyaykpIHx8IHQ0ICYmIHIzIDw9IDAgfHwgZTUgPCB0aGlzLmxlbmd0aCAmJiBvNCA8PSAwKSA/IGZhbHNlIDogKGdzKHRoaXMsIHQ0LCBlNSwgaTQgPyBpNC5jaGlsZHJlbiA6IFtdLCByMyAtIDEsIG80IC0gMSksIHRoaXMubWFya0RpcnR5KCksIHRydWUpOwogICAgfQogICAgc3BsaXQodDQpIHsKICAgICAgbGV0IGU1ID0gW10sIGk0ID0gMCwgbjggPSAtMSwgcjMgPSAwOwogICAgICBmb3IgKGxldCBsNyBvZiB0aGlzLmNoaWxkcmVuKSB7CiAgICAgICAgbGV0IGgxMCA9IGk0ICsgbDcubGVuZ3RoOwogICAgICAgIGgxMCA+IHQ0ICYmIGU1LnB1c2goaTQgPCB0NCA/IGw3LnNwbGl0KHQ0IC0gaTQpIDogbDcpLCBuOCA8IDAgJiYgaTQgPj0gdDQgJiYgKG44ID0gcjMpLCBpNCA9IGgxMCwgcjMrKzsKICAgICAgfQogICAgICBsZXQgbzQgPSB0aGlzLmxlbmd0aCAtIHQ0OwogICAgICByZXR1cm4gdGhpcy5sZW5ndGggPSB0NCwgbjggPiAtMSAmJiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPSBuOCwgdGhpcy5tYXJrRGlydHkoKSksIG5ldyBxMih0aGlzLm1hcmssIGU1LCBvNCk7CiAgICB9CiAgICBkb21BdFBvcyh0NCkgewogICAgICByZXR1cm4gdnModGhpcywgdDQpOwogICAgfQogICAgY29vcmRzQXQodDQsIGU1KSB7CiAgICAgIHJldHVybiBTcyh0aGlzLCB0NCwgZTUpOwogICAgfQogIH07CiAgZnVuY3Rpb24gTmUyKHM4LCB0NCwgZTUpIHsKICAgIGxldCBpNCA9IHM4Lm5vZGVWYWx1ZS5sZW5ndGg7CiAgICB0NCA+IGk0ICYmICh0NCA9IGk0KTsKICAgIGxldCBuOCA9IHQ0LCByMyA9IHQ0LCBvNCA9IDA7CiAgICB0NCA9PSAwICYmIGU1IDwgMCB8fCB0NCA9PSBpNCAmJiBlNSA+PSAwID8geTMuY2hyb21lIHx8IHkzLmdlY2tvIHx8ICh0NCA/IChuOC0tLCBvNCA9IDEpIDogcjMgPCBpNCAmJiAocjMrKywgbzQgPSAtMSkpIDogZTUgPCAwID8gbjgtLSA6IHIzIDwgaTQgJiYgcjMrKzsKICAgIGxldCBsNyA9IHd0KHM4LCBuOCwgcjMpLmdldENsaWVudFJlY3RzKCk7CiAgICBpZiAoIWw3Lmxlbmd0aCkKICAgICAgcmV0dXJuIGRzOwogICAgbGV0IGgxMCA9IGw3WyhvNCA/IG80IDwgMCA6IGU1ID49IDApID8gMCA6IGw3Lmxlbmd0aCAtIDFdOwogICAgcmV0dXJuIHkzLnNhZmFyaSAmJiAhbzQgJiYgaDEwLndpZHRoID09IDAgJiYgKGgxMCA9IEFycmF5LnByb3RvdHlwZS5maW5kLmNhbGwobDcsIChhNCkgPT4gYTQud2lkdGgpIHx8IGgxMCksIG80ID8geGU0KGgxMCwgbzQgPCAwKSA6IGgxMCB8fCBudWxsOwogIH0KICB2YXIgajIgPSBjbGFzcyBleHRlbmRzIEEzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgaTQpIHsKICAgICAgc3VwZXIoKSwgdGhpcy53aWRnZXQgPSB0NCwgdGhpcy5sZW5ndGggPSBlNSwgdGhpcy5zaWRlID0gaTQsIHRoaXMucHJldldpZGdldCA9IG51bGw7CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlKHQ0LCBlNSwgaTQpIHsKICAgICAgcmV0dXJuIG5ldyAodDQuY3VzdG9tVmlldyB8fCBqMikodDQsIGU1LCBpNCk7CiAgICB9CiAgICBzcGxpdCh0NCkgewogICAgICBsZXQgZTUgPSBqMi5jcmVhdGUodGhpcy53aWRnZXQsIHRoaXMubGVuZ3RoIC0gdDQsIHRoaXMuc2lkZSk7CiAgICAgIHJldHVybiB0aGlzLmxlbmd0aCAtPSB0NCwgZTU7CiAgICB9CiAgICBzeW5jKCkgewogICAgICAoIXRoaXMuZG9tIHx8ICF0aGlzLndpZGdldC51cGRhdGVET00odGhpcy5kb20pKSAmJiAodGhpcy5kb20gJiYgdGhpcy5wcmV2V2lkZ2V0ICYmIHRoaXMucHJldldpZGdldC5kZXN0cm95KHRoaXMuZG9tKSwgdGhpcy5wcmV2V2lkZ2V0ID0gbnVsbCwgdGhpcy5zZXRET00odGhpcy53aWRnZXQudG9ET00odGhpcy5lZGl0b3JWaWV3KSksIHRoaXMuZG9tLmNvbnRlbnRFZGl0YWJsZSA9ICJmYWxzZSIpOwogICAgfQogICAgZ2V0U2lkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2lkZTsKICAgIH0KICAgIG1lcmdlKHQ0LCBlNSwgaTQsIG44LCByMywgbzQpIHsKICAgICAgcmV0dXJuIGk0ICYmICghKGk0IGluc3RhbmNlb2YgajIpIHx8ICF0aGlzLndpZGdldC5jb21wYXJlKGk0LndpZGdldCkgfHwgdDQgPiAwICYmIHIzIDw9IDAgfHwgZTUgPCB0aGlzLmxlbmd0aCAmJiBvNCA8PSAwKSA/IGZhbHNlIDogKHRoaXMubGVuZ3RoID0gdDQgKyAoaTQgPyBpNC5sZW5ndGggOiAwKSArICh0aGlzLmxlbmd0aCAtIGU1KSwgdHJ1ZSk7CiAgICB9CiAgICBiZWNvbWUodDQpIHsKICAgICAgcmV0dXJuIHQ0Lmxlbmd0aCA9PSB0aGlzLmxlbmd0aCAmJiB0NCBpbnN0YW5jZW9mIGoyICYmIHQ0LnNpZGUgPT0gdGhpcy5zaWRlICYmIHRoaXMud2lkZ2V0LmNvbnN0cnVjdG9yID09IHQ0LndpZGdldC5jb25zdHJ1Y3RvciA/ICh0aGlzLndpZGdldC5lcSh0NC53aWRnZXQpIHx8IHRoaXMubWFya0RpcnR5KHRydWUpLCB0aGlzLmRvbSAmJiAhdGhpcy5wcmV2V2lkZ2V0ICYmICh0aGlzLnByZXZXaWRnZXQgPSB0aGlzLndpZGdldCksIHRoaXMud2lkZ2V0ID0gdDQud2lkZ2V0LCB0cnVlKSA6IGZhbHNlOwogICAgfQogICAgaWdub3JlTXV0YXRpb24oKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWdub3JlRXZlbnQodDQpIHsKICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0Lmlnbm9yZUV2ZW50KHQ0KTsKICAgIH0KICAgIGdldCBvdmVycmlkZURPTVRleHQoKSB7CiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PSAwKQogICAgICAgIHJldHVybiB2LmVtcHR5OwogICAgICBsZXQgdDQgPSB0aGlzOwogICAgICBmb3IgKDsgdDQucGFyZW50OyApCiAgICAgICAgdDQgPSB0NC5wYXJlbnQ7CiAgICAgIGxldCBlNSA9IHQ0LmVkaXRvclZpZXcsIGk0ID0gZTUgJiYgZTUuc3RhdGUuZG9jLCBuOCA9IHRoaXMucG9zQXRTdGFydDsKICAgICAgcmV0dXJuIGk0ID8gaTQuc2xpY2UobjgsIG44ICsgdGhpcy5sZW5ndGgpIDogdi5lbXB0eTsKICAgIH0KICAgIGRvbUF0UG9zKHQ0KSB7CiAgICAgIHJldHVybiB0NCA9PSAwID8gQjMuYmVmb3JlKHRoaXMuZG9tKSA6IEIzLmFmdGVyKHRoaXMuZG9tLCB0NCA9PSB0aGlzLmxlbmd0aCk7CiAgICB9CiAgICBkb21Cb3VuZHNBcm91bmQoKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29vcmRzQXQodDQsIGU1KSB7CiAgICAgIGxldCBpNCA9IHRoaXMuZG9tLmdldENsaWVudFJlY3RzKCksIG44ID0gbnVsbDsKICAgICAgaWYgKCFpNC5sZW5ndGgpCiAgICAgICAgcmV0dXJuIGRzOwogICAgICBmb3IgKGxldCByMyA9IHQ0ID4gMCA/IGk0Lmxlbmd0aCAtIDEgOiAwOyBuOCA9IGk0W3IzXSwgISh0NCA+IDAgPyByMyA9PSAwIDogcjMgPT0gaTQubGVuZ3RoIC0gMSB8fCBuOC50b3AgPCBuOC5ib3R0b20pOyByMyArPSB0NCA+IDAgPyAtMSA6IDEpCiAgICAgICAgOwogICAgICByZXR1cm4gdDQgPT0gMCAmJiBlNSA+IDAgfHwgdDQgPT0gdGhpcy5sZW5ndGggJiYgZTUgPD0gMCA/IG44IDogeGU0KG44LCB0NCA9PSAwKTsKICAgIH0KICAgIGdldCBpc0VkaXRhYmxlKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBkZXN0cm95KCkgewogICAgICBzdXBlci5kZXN0cm95KCksIHRoaXMuZG9tICYmIHRoaXMud2lkZ2V0LmRlc3Ryb3kodGhpcy5kb20pOwogICAgfQogIH07CiAgdmFyIGxlMyA9IGNsYXNzIGV4dGVuZHMgajIgewogICAgZG9tQXRQb3ModDQpIHsKICAgICAgbGV0IHsgdG9wVmlldzogZTUsIHRleHQ6IGk0IH0gPSB0aGlzLndpZGdldDsKICAgICAgcmV0dXJuIGU1ID8gVmUyKHQ0LCAwLCBlNSwgaTQsIChuOCwgcjMpID0+IG44LmRvbUF0UG9zKHIzKSwgKG44KSA9PiBuZXcgQjMoaTQsIE1hdGgubWluKG44LCBpNC5ub2RlVmFsdWUubGVuZ3RoKSkpIDogbmV3IEIzKGk0LCBNYXRoLm1pbih0NCwgaTQubm9kZVZhbHVlLmxlbmd0aCkpOwogICAgfQogICAgc3luYygpIHsKICAgICAgdGhpcy5zZXRET00odGhpcy53aWRnZXQudG9ET00oKSk7CiAgICB9CiAgICBsb2NhbFBvc0Zyb21ET00odDQsIGU1KSB7CiAgICAgIGxldCB7IHRvcFZpZXc6IGk0LCB0ZXh0OiBuOCB9ID0gdGhpcy53aWRnZXQ7CiAgICAgIHJldHVybiBpNCA/IHdzMih0NCwgZTUsIGk0LCBuOCkgOiBNYXRoLm1pbihlNSwgdGhpcy5sZW5ndGgpOwogICAgfQogICAgaWdub3JlTXV0YXRpb24oKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGdldCBvdmVycmlkZURPTVRleHQoKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29vcmRzQXQodDQsIGU1KSB7CiAgICAgIGxldCB7IHRvcFZpZXc6IGk0LCB0ZXh0OiBuOCB9ID0gdGhpcy53aWRnZXQ7CiAgICAgIHJldHVybiBpNCA/IFZlMih0NCwgZTUsIGk0LCBuOCwgKHIzLCBvNCwgbDcpID0+IHIzLmNvb3Jkc0F0KG80LCBsNyksIChyMywgbzQpID0+IE5lMihuOCwgcjMsIG80KSkgOiBOZTIobjgsIHQ0LCBlNSk7CiAgICB9CiAgICBkZXN0cm95KCkgewogICAgICB2YXIgdDQ7CiAgICAgIHN1cGVyLmRlc3Ryb3koKSwgKHQ0ID0gdGhpcy53aWRnZXQudG9wVmlldykgPT09IG51bGwgfHwgdDQgPT09IHZvaWQgMCB8fCB0NC5kZXN0cm95KCk7CiAgICB9CiAgICBnZXQgaXNFZGl0YWJsZSgpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjYW5SZXVzZURPTSgpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBWZTIoczgsIHQ0LCBlNSwgaTQsIG44LCByMykgewogICAgaWYgKGU1IGluc3RhbmNlb2YgcTIpIHsKICAgICAgZm9yIChsZXQgbzQgPSBlNS5kb20uZmlyc3RDaGlsZDsgbzQ7IG80ID0gbzQubmV4dFNpYmxpbmcpIHsKICAgICAgICBsZXQgbDcgPSBBMy5nZXQobzQpOwogICAgICAgIGlmICghbDcpCiAgICAgICAgICByZXR1cm4gcjMoczgsIHQ0KTsKICAgICAgICBsZXQgaDEwID0geXQobzQsIGk0KSwgYTQgPSBsNy5sZW5ndGggKyAoaDEwID8gaTQubm9kZVZhbHVlLmxlbmd0aCA6IDApOwogICAgICAgIGlmIChzOCA8IGE0IHx8IHM4ID09IGE0ICYmIGw3LmdldFNpZGUoKSA8PSAwKQogICAgICAgICAgcmV0dXJuIGgxMCA/IFZlMihzOCwgdDQsIGw3LCBpNCwgbjgsIHIzKSA6IG44KGw3LCBzOCwgdDQpOwogICAgICAgIHM4IC09IGE0OwogICAgICB9CiAgICAgIHJldHVybiBuOChlNSwgZTUubGVuZ3RoLCAtMSk7CiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGU1LmRvbSA9PSBpNCA/IHIzKHM4LCB0NCkgOiBuOChlNSwgczgsIHQ0KTsKICB9CiAgZnVuY3Rpb24gd3MyKHM4LCB0NCwgZTUsIGk0KSB7CiAgICBpZiAoZTUgaW5zdGFuY2VvZiBxMikKICAgICAgZm9yIChsZXQgbjggb2YgZTUuY2hpbGRyZW4pIHsKICAgICAgICBsZXQgcjMgPSAwLCBvNCA9IHl0KG44LmRvbSwgaTQpOwogICAgICAgIGlmICh5dChuOC5kb20sIHM4KSkKICAgICAgICAgIHJldHVybiByMyArIChvNCA/IHdzMihzOCwgdDQsIG44LCBpNCkgOiBuOC5sb2NhbFBvc0Zyb21ET00oczgsIHQ0KSk7CiAgICAgICAgcjMgKz0gbzQgPyBpNC5ub2RlVmFsdWUubGVuZ3RoIDogbjgubGVuZ3RoOwogICAgICB9CiAgICBlbHNlIGlmIChlNS5kb20gPT0gaTQpCiAgICAgIHJldHVybiBNYXRoLm1pbih0NCwgaTQubm9kZVZhbHVlLmxlbmd0aCk7CiAgICByZXR1cm4gZTUubG9jYWxQb3NGcm9tRE9NKHM4LCB0NCk7CiAgfQogIHZhciBsdDIgPSBjbGFzcyBleHRlbmRzIEEzIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHN1cGVyKCksIHRoaXMuc2lkZSA9IHQ0OwogICAgfQogICAgZ2V0IGxlbmd0aCgpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBtZXJnZSgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgYmVjb21lKHQ0KSB7CiAgICAgIHJldHVybiB0NCBpbnN0YW5jZW9mIGx0MiAmJiB0NC5zaWRlID09IHRoaXMuc2lkZTsKICAgIH0KICAgIHNwbGl0KCkgewogICAgICByZXR1cm4gbmV3IGx0Mih0aGlzLnNpZGUpOwogICAgfQogICAgc3luYygpIHsKICAgICAgaWYgKCF0aGlzLmRvbSkgewogICAgICAgIGxldCB0NCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwogICAgICAgIHQ0LmNsYXNzTmFtZSA9ICJjbS13aWRnZXRCdWZmZXIiLCB0NC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwgInRydWUiKSwgdGhpcy5zZXRET00odDQpOwogICAgICB9CiAgICB9CiAgICBnZXRTaWRlKCkgewogICAgICByZXR1cm4gdGhpcy5zaWRlOwogICAgfQogICAgZG9tQXRQb3ModDQpIHsKICAgICAgcmV0dXJuIEIzLmJlZm9yZSh0aGlzLmRvbSk7CiAgICB9CiAgICBsb2NhbFBvc0Zyb21ET00oKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgZG9tQm91bmRzQXJvdW5kKCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvb3Jkc0F0KHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBpNCA9IFNuKHRoaXMsIHRoaXMuc2lkZSA+IDAgPyAtMSA6IDEpOwogICAgICByZXR1cm4gaTQgJiYgaTQudG9wIDwgZTUuYm90dG9tICYmIGk0LmJvdHRvbSA+IGU1LnRvcCA/IHsgbGVmdDogZTUubGVmdCwgcmlnaHQ6IGU1LnJpZ2h0LCB0b3A6IGk0LnRvcCwgYm90dG9tOiBpNC5ib3R0b20gfSA6IGU1OwogICAgfQogICAgZ2V0IG92ZXJyaWRlRE9NVGV4dCgpIHsKICAgICAgcmV0dXJuIHYuZW1wdHk7CiAgICB9CiAgfTsKICAkNC5wcm90b3R5cGUuY2hpbGRyZW4gPSBqMi5wcm90b3R5cGUuY2hpbGRyZW4gPSBsdDIucHJvdG90eXBlLmNoaWxkcmVuID0gYmk7CiAgZnVuY3Rpb24gU24oczgsIHQ0KSB7CiAgICBsZXQgZTUgPSBzOC5wYXJlbnQsIGk0ID0gZTUgPyBlNS5jaGlsZHJlbi5pbmRleE9mKHM4KSA6IC0xOwogICAgZm9yICg7IGU1ICYmIGk0ID49IDA7ICkKICAgICAgaWYgKHQ0IDwgMCA/IGk0ID4gMCA6IGk0IDwgZTUuY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgbGV0IG44ID0gZTUuY2hpbGRyZW5baTQgKyB0NF07CiAgICAgICAgaWYgKG44IGluc3RhbmNlb2YgJDQpIHsKICAgICAgICAgIGxldCByMyA9IG44LmNvb3Jkc0F0KHQ0IDwgMCA/IG44Lmxlbmd0aCA6IDAsIHQ0KTsKICAgICAgICAgIGlmIChyMykKICAgICAgICAgICAgcmV0dXJuIHIzOwogICAgICAgIH0KICAgICAgICBpNCArPSB0NDsKICAgICAgfSBlbHNlIGlmIChlNSBpbnN0YW5jZW9mIHEyICYmIGU1LnBhcmVudCkKICAgICAgICBpNCA9IGU1LnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKGU1KSArICh0NCA8IDAgPyAwIDogMSksIGU1ID0gZTUucGFyZW50OwogICAgICBlbHNlIHsKICAgICAgICBsZXQgbjggPSBlNS5kb20ubGFzdENoaWxkOwogICAgICAgIGlmIChuOCAmJiBuOC5ub2RlTmFtZSA9PSAiQlIiKQogICAgICAgICAgcmV0dXJuIG44LmdldENsaWVudFJlY3RzKClbMF07CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICB9CiAgZnVuY3Rpb24gdnMoczgsIHQ0KSB7CiAgICBsZXQgZTUgPSBzOC5kb20sIHsgY2hpbGRyZW46IGk0IH0gPSBzOCwgbjggPSAwOwogICAgZm9yIChsZXQgcjMgPSAwOyBuOCA8IGk0Lmxlbmd0aDsgbjgrKykgewogICAgICBsZXQgbzQgPSBpNFtuOF0sIGw3ID0gcjMgKyBvNC5sZW5ndGg7CiAgICAgIGlmICghKGw3ID09IHIzICYmIG80LmdldFNpZGUoKSA8PSAwKSkgewogICAgICAgIGlmICh0NCA+IHIzICYmIHQ0IDwgbDcgJiYgbzQuZG9tLnBhcmVudE5vZGUgPT0gZTUpCiAgICAgICAgICByZXR1cm4gbzQuZG9tQXRQb3ModDQgLSByMyk7CiAgICAgICAgaWYgKHQ0IDw9IHIzKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgcjMgPSBsNzsKICAgICAgfQogICAgfQogICAgZm9yIChsZXQgcjMgPSBuODsgcjMgPiAwOyByMy0tKSB7CiAgICAgIGxldCBvNCA9IGk0W3IzIC0gMV07CiAgICAgIGlmIChvNC5kb20ucGFyZW50Tm9kZSA9PSBlNSkKICAgICAgICByZXR1cm4gbzQuZG9tQXRQb3MobzQubGVuZ3RoKTsKICAgIH0KICAgIGZvciAobGV0IHIzID0gbjg7IHIzIDwgaTQubGVuZ3RoOyByMysrKSB7CiAgICAgIGxldCBvNCA9IGk0W3IzXTsKICAgICAgaWYgKG80LmRvbS5wYXJlbnROb2RlID09IGU1KQogICAgICAgIHJldHVybiBvNC5kb21BdFBvcygwKTsKICAgIH0KICAgIHJldHVybiBuZXcgQjMoZTUsIDApOwogIH0KICBmdW5jdGlvbiB4czIoczgsIHQ0LCBlNSkgewogICAgbGV0IGk0LCB7IGNoaWxkcmVuOiBuOCB9ID0gczg7CiAgICBlNSA+IDAgJiYgdDQgaW5zdGFuY2VvZiBxMiAmJiBuOC5sZW5ndGggJiYgKGk0ID0gbjhbbjgubGVuZ3RoIC0gMV0pIGluc3RhbmNlb2YgcTIgJiYgaTQubWFyay5lcSh0NC5tYXJrKSA/IHhzMihpNCwgdDQuY2hpbGRyZW5bMF0sIGU1IC0gMSkgOiAobjgucHVzaCh0NCksIHQ0LnNldFBhcmVudChzOCkpLCBzOC5sZW5ndGggKz0gdDQubGVuZ3RoOwogIH0KICBmdW5jdGlvbiBTcyhzOCwgdDQsIGU1KSB7CiAgICBmb3IgKGxldCByMyA9IDAsIG80ID0gMDsgbzQgPCBzOC5jaGlsZHJlbi5sZW5ndGg7IG80KyspIHsKICAgICAgbGV0IGw3ID0gczguY2hpbGRyZW5bbzRdLCBoMTAgPSByMyArIGw3Lmxlbmd0aCwgYTQ7CiAgICAgIGlmICgoZTUgPD0gMCB8fCBoMTAgPT0gczgubGVuZ3RoIHx8IGw3LmdldFNpZGUoKSA+IDAgPyBoMTAgPj0gdDQgOiBoMTAgPiB0NCkgJiYgKHQ0IDwgaDEwIHx8IG80ICsgMSA9PSBzOC5jaGlsZHJlbi5sZW5ndGggfHwgKGE0ID0gczguY2hpbGRyZW5bbzQgKyAxXSkubGVuZ3RoIHx8IGE0LmdldFNpZGUoKSA+IDApKSB7CiAgICAgICAgbGV0IGMxNyA9IDA7CiAgICAgICAgaWYgKGgxMCA9PSByMykgewogICAgICAgICAgaWYgKGw3LmdldFNpZGUoKSA8PSAwKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIGMxNyA9IGU1ID0gLWw3LmdldFNpZGUoKTsKICAgICAgICB9CiAgICAgICAgbGV0IGYxMSA9IGw3LmNvb3Jkc0F0KE1hdGgubWF4KDAsIHQ0IC0gcjMpLCBlNSk7CiAgICAgICAgcmV0dXJuIGMxNyAmJiBmMTEgPyB4ZTQoZjExLCBlNSA8IDApIDogZjExOwogICAgICB9CiAgICAgIHIzID0gaDEwOwogICAgfQogICAgbGV0IGk0ID0gczguZG9tLmxhc3RDaGlsZDsKICAgIGlmICghaTQpCiAgICAgIHJldHVybiBzOC5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBsZXQgbjggPSBWdChpNCk7CiAgICByZXR1cm4gbjhbbjgubGVuZ3RoIC0gMV0gfHwgbnVsbDsKICB9CiAgZnVuY3Rpb24gV2UyKHM4LCB0NCkgewogICAgZm9yIChsZXQgZTUgaW4gczgpCiAgICAgIGU1ID09ICJjbGFzcyIgJiYgdDQuY2xhc3MgPyB0NC5jbGFzcyArPSAiICIgKyBzOC5jbGFzcyA6IGU1ID09ICJzdHlsZSIgJiYgdDQuc3R5bGUgPyB0NC5zdHlsZSArPSAiOyIgKyBzOC5zdHlsZSA6IHQ0W2U1XSA9IHM4W2U1XTsKICAgIHJldHVybiB0NDsKICB9CiAgZnVuY3Rpb24geWkoczgsIHQ0KSB7CiAgICBpZiAoczggPT0gdDQpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCFzOCB8fCAhdDQpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBlNSA9IE9iamVjdC5rZXlzKHM4KSwgaTQgPSBPYmplY3Qua2V5cyh0NCk7CiAgICBpZiAoZTUubGVuZ3RoICE9IGk0Lmxlbmd0aCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZm9yIChsZXQgbjggb2YgZTUpCiAgICAgIGlmIChpNC5pbmRleE9mKG44KSA9PSAtMSB8fCBzOFtuOF0gIT09IHQ0W244XSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gRmUzKHM4LCB0NCwgZTUpIHsKICAgIGxldCBpNCA9IG51bGw7CiAgICBpZiAodDQpCiAgICAgIGZvciAobGV0IG44IGluIHQ0KQogICAgICAgIGU1ICYmIG44IGluIGU1IHx8IHM4LnJlbW92ZUF0dHJpYnV0ZShpNCA9IG44KTsKICAgIGlmIChlNSkKICAgICAgZm9yIChsZXQgbjggaW4gZTUpCiAgICAgICAgdDQgJiYgdDRbbjhdID09IGU1W244XSB8fCBzOC5zZXRBdHRyaWJ1dGUoaTQgPSBuOCwgZTVbbjhdKTsKICAgIHJldHVybiAhIWk0OwogIH0KICB2YXIgWDQgPSBjbGFzcyB7CiAgICBlcSh0NCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB1cGRhdGVET00odDQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgY29tcGFyZSh0NCkgewogICAgICByZXR1cm4gdGhpcyA9PSB0NCB8fCB0aGlzLmNvbnN0cnVjdG9yID09IHQ0LmNvbnN0cnVjdG9yICYmIHRoaXMuZXEodDQpOwogICAgfQogICAgZ2V0IGVzdGltYXRlZEhlaWdodCgpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgaWdub3JlRXZlbnQodDQpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBnZXQgY3VzdG9tVmlldygpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBkZXN0cm95KHQ0KSB7CiAgICB9CiAgfTsKICB2YXIgVDMgPSBmdW5jdGlvbihzOCkgewogICAgcmV0dXJuIHM4W3M4LlRleHQgPSAwXSA9ICJUZXh0IiwgczhbczguV2lkZ2V0QmVmb3JlID0gMV0gPSAiV2lkZ2V0QmVmb3JlIiwgczhbczguV2lkZ2V0QWZ0ZXIgPSAyXSA9ICJXaWRnZXRBZnRlciIsIHM4W3M4LldpZGdldFJhbmdlID0gM10gPSAiV2lkZ2V0UmFuZ2UiLCBzODsKICB9KFQzIHx8IChUMyA9IHt9KSk7CiAgdmFyIGsgPSBjbGFzcyBleHRlbmRzIGogewogICAgY29uc3RydWN0b3IodDQsIGU1LCBpNCwgbjgpIHsKICAgICAgc3VwZXIoKSwgdGhpcy5zdGFydFNpZGUgPSB0NCwgdGhpcy5lbmRTaWRlID0gZTUsIHRoaXMud2lkZ2V0ID0gaTQsIHRoaXMuc3BlYyA9IG44OwogICAgfQogICAgZ2V0IGhlaWdodFJlbGV2YW50KCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBzdGF0aWMgbWFyayh0NCkgewogICAgICByZXR1cm4gbmV3IHZ0KHQ0KTsKICAgIH0KICAgIHN0YXRpYyB3aWRnZXQodDQpIHsKICAgICAgbGV0IGU1ID0gdDQuc2lkZSB8fCAwLCBpNCA9ICEhdDQuYmxvY2s7CiAgICAgIHJldHVybiBlNSArPSBpNCA/IGU1ID4gMCA/IDNlOCA6IC00ZTggOiBlNSA+IDAgPyAxZTggOiAtMWU4LCBuZXcgVTIodDQsIGU1LCBlNSwgaTQsIHQ0LndpZGdldCB8fCBudWxsLCBmYWxzZSk7CiAgICB9CiAgICBzdGF0aWMgcmVwbGFjZSh0NCkgewogICAgICBsZXQgZTUgPSAhIXQ0LmJsb2NrLCBpNCwgbjg7CiAgICAgIGlmICh0NC5pc0Jsb2NrR2FwKQogICAgICAgIGk0ID0gLTVlOCwgbjggPSA0ZTg7CiAgICAgIGVsc2UgewogICAgICAgIGxldCB7IHN0YXJ0OiByMywgZW5kOiBvNCB9ID0gQ3MyKHQ0LCBlNSk7CiAgICAgICAgaTQgPSAocjMgPyBlNSA/IC0zZTggOiAtMSA6IDVlOCkgLSAxLCBuOCA9IChvNCA/IGU1ID8gMmU4IDogMSA6IC02ZTgpICsgMTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFUyKHQ0LCBpNCwgbjgsIGU1LCB0NC53aWRnZXQgfHwgbnVsbCwgdHJ1ZSk7CiAgICB9CiAgICBzdGF0aWMgbGluZSh0NCkgewogICAgICByZXR1cm4gbmV3IGN0KHQ0KTsKICAgIH0KICAgIHN0YXRpYyBzZXQodDQsIGU1ID0gZmFsc2UpIHsKICAgICAgcmV0dXJuIFAub2YodDQsIGU1KTsKICAgIH0KICAgIGhhc0hlaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0ID8gdGhpcy53aWRnZXQuZXN0aW1hdGVkSGVpZ2h0ID4gLTEgOiBmYWxzZTsKICAgIH0KICB9OwogIGsubm9uZSA9IFAuZW1wdHk7CiAgdmFyIHZ0ID0gY2xhc3MgZXh0ZW5kcyBrIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIGxldCB7IHN0YXJ0OiBlNSwgZW5kOiBpNCB9ID0gQ3MyKHQ0KTsKICAgICAgc3VwZXIoZTUgPyAtMSA6IDVlOCwgaTQgPyAxIDogLTZlOCwgbnVsbCwgdDQpLCB0aGlzLnRhZ05hbWUgPSB0NC50YWdOYW1lIHx8ICJzcGFuIiwgdGhpcy5jbGFzcyA9IHQ0LmNsYXNzIHx8ICIiLCB0aGlzLmF0dHJzID0gdDQuYXR0cmlidXRlcyB8fCBudWxsOwogICAgfQogICAgZXEodDQpIHsKICAgICAgcmV0dXJuIHRoaXMgPT0gdDQgfHwgdDQgaW5zdGFuY2VvZiB2dCAmJiB0aGlzLnRhZ05hbWUgPT0gdDQudGFnTmFtZSAmJiB0aGlzLmNsYXNzID09IHQ0LmNsYXNzICYmIHlpKHRoaXMuYXR0cnMsIHQ0LmF0dHJzKTsKICAgIH0KICAgIHJhbmdlKHQ0LCBlNSA9IHQ0KSB7CiAgICAgIGlmICh0NCA+PSBlNSkKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWFyayBkZWNvcmF0aW9ucyBtYXkgbm90IGJlIGVtcHR5Iik7CiAgICAgIHJldHVybiBzdXBlci5yYW5nZSh0NCwgZTUpOwogICAgfQogIH07CiAgdnQucHJvdG90eXBlLnBvaW50ID0gZmFsc2U7CiAgdmFyIGN0ID0gY2xhc3MgZXh0ZW5kcyBrIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHN1cGVyKC0yZTgsIC0yZTgsIG51bGwsIHQ0KTsKICAgIH0KICAgIGVxKHQ0KSB7CiAgICAgIHJldHVybiB0NCBpbnN0YW5jZW9mIGN0ICYmIHlpKHRoaXMuc3BlYy5hdHRyaWJ1dGVzLCB0NC5zcGVjLmF0dHJpYnV0ZXMpOwogICAgfQogICAgcmFuZ2UodDQsIGU1ID0gdDQpIHsKICAgICAgaWYgKGU1ICE9IHQ0KQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJMaW5lIGRlY29yYXRpb24gcmFuZ2VzIG11c3QgYmUgemVyby1sZW5ndGgiKTsKICAgICAgcmV0dXJuIHN1cGVyLnJhbmdlKHQ0LCBlNSk7CiAgICB9CiAgfTsKICBjdC5wcm90b3R5cGUubWFwTW9kZSA9IE0uVHJhY2tCZWZvcmU7CiAgY3QucHJvdG90eXBlLnBvaW50ID0gdHJ1ZTsKICB2YXIgVTIgPSBjbGFzcyBleHRlbmRzIGsgewogICAgY29uc3RydWN0b3IodDQsIGU1LCBpNCwgbjgsIHIzLCBvNCkgewogICAgICBzdXBlcihlNSwgaTQsIHIzLCB0NCksIHRoaXMuYmxvY2sgPSBuOCwgdGhpcy5pc1JlcGxhY2UgPSBvNCwgdGhpcy5tYXBNb2RlID0gbjggPyBlNSA8PSAwID8gTS5UcmFja0JlZm9yZSA6IE0uVHJhY2tBZnRlciA6IE0uVHJhY2tEZWw7CiAgICB9CiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuc3RhcnRTaWRlIDwgdGhpcy5lbmRTaWRlID8gVDMuV2lkZ2V0UmFuZ2UgOiB0aGlzLnN0YXJ0U2lkZSA8PSAwID8gVDMuV2lkZ2V0QmVmb3JlIDogVDMuV2lkZ2V0QWZ0ZXI7CiAgICB9CiAgICBnZXQgaGVpZ2h0UmVsZXZhbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLmJsb2NrIHx8ICEhdGhpcy53aWRnZXQgJiYgdGhpcy53aWRnZXQuZXN0aW1hdGVkSGVpZ2h0ID49IDU7CiAgICB9CiAgICBlcSh0NCkgewogICAgICByZXR1cm4gdDQgaW5zdGFuY2VvZiBVMiAmJiBDbih0aGlzLndpZGdldCwgdDQud2lkZ2V0KSAmJiB0aGlzLmJsb2NrID09IHQ0LmJsb2NrICYmIHRoaXMuc3RhcnRTaWRlID09IHQ0LnN0YXJ0U2lkZSAmJiB0aGlzLmVuZFNpZGUgPT0gdDQuZW5kU2lkZTsKICAgIH0KICAgIHJhbmdlKHQ0LCBlNSA9IHQ0KSB7CiAgICAgIGlmICh0aGlzLmlzUmVwbGFjZSAmJiAodDQgPiBlNSB8fCB0NCA9PSBlNSAmJiB0aGlzLnN0YXJ0U2lkZSA+IDAgJiYgdGhpcy5lbmRTaWRlIDw9IDApKQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHJhbmdlIGZvciByZXBsYWNlbWVudCBkZWNvcmF0aW9uIik7CiAgICAgIGlmICghdGhpcy5pc1JlcGxhY2UgJiYgZTUgIT0gdDQpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIldpZGdldCBkZWNvcmF0aW9ucyBjYW4gb25seSBoYXZlIHplcm8tbGVuZ3RoIHJhbmdlcyIpOwogICAgICByZXR1cm4gc3VwZXIucmFuZ2UodDQsIGU1KTsKICAgIH0KICB9OwogIFUyLnByb3RvdHlwZS5wb2ludCA9IHRydWU7CiAgZnVuY3Rpb24gQ3MyKHM4LCB0NCA9IGZhbHNlKSB7CiAgICBsZXQgeyBpbmNsdXNpdmVTdGFydDogZTUsIGluY2x1c2l2ZUVuZDogaTQgfSA9IHM4OwogICAgcmV0dXJuIGU1ID09IG51bGwgJiYgKGU1ID0gczguaW5jbHVzaXZlKSwgaTQgPT0gbnVsbCAmJiAoaTQgPSBzOC5pbmNsdXNpdmUpLCB7IHN0YXJ0OiBlNSA/PyB0NCwgZW5kOiBpNCA/PyB0NCB9OwogIH0KICBmdW5jdGlvbiBDbihzOCwgdDQpIHsKICAgIHJldHVybiBzOCA9PSB0NCB8fCAhIShzOCAmJiB0NCAmJiBzOC5jb21wYXJlKHQ0KSk7CiAgfQogIGZ1bmN0aW9uIHplMihzOCwgdDQsIGU1LCBpNCA9IDApIHsKICAgIGxldCBuOCA9IGU1Lmxlbmd0aCAtIDE7CiAgICBuOCA+PSAwICYmIGU1W244XSArIGk0ID49IHM4ID8gZTVbbjhdID0gTWF0aC5tYXgoZTVbbjhdLCB0NCkgOiBlNS5wdXNoKHM4LCB0NCk7CiAgfQogIHZhciBIMyA9IGNsYXNzIGV4dGVuZHMgQTMgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMuY2hpbGRyZW4gPSBbXSwgdGhpcy5sZW5ndGggPSAwLCB0aGlzLnByZXZBdHRycyA9IHZvaWQgMCwgdGhpcy5hdHRycyA9IG51bGwsIHRoaXMuYnJlYWtBZnRlciA9IDA7CiAgICB9CiAgICBtZXJnZSh0NCwgZTUsIGk0LCBuOCwgcjMsIG80KSB7CiAgICAgIGlmIChpNCkgewogICAgICAgIGlmICghKGk0IGluc3RhbmNlb2YgSDMpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHRoaXMuZG9tIHx8IGk0LnRyYW5zZmVyRE9NKHRoaXMpOwogICAgICB9CiAgICAgIHJldHVybiBuOCAmJiB0aGlzLnNldERlY28oaTQgPyBpNC5hdHRycyA6IG51bGwpLCBncyh0aGlzLCB0NCwgZTUsIGk0ID8gaTQuY2hpbGRyZW4gOiBbXSwgcjMsIG80KSwgdHJ1ZTsKICAgIH0KICAgIHNwbGl0KHQ0KSB7CiAgICAgIGxldCBlNSA9IG5ldyBIMygpOwogICAgICBpZiAoZTUuYnJlYWtBZnRlciA9IHRoaXMuYnJlYWtBZnRlciwgdGhpcy5sZW5ndGggPT0gMCkKICAgICAgICByZXR1cm4gZTU7CiAgICAgIGxldCB7IGk6IGk0LCBvZmY6IG44IH0gPSB0aGlzLmNoaWxkUG9zKHQ0KTsKICAgICAgbjggJiYgKGU1LmFwcGVuZCh0aGlzLmNoaWxkcmVuW2k0XS5zcGxpdChuOCksIDApLCB0aGlzLmNoaWxkcmVuW2k0XS5tZXJnZShuOCwgdGhpcy5jaGlsZHJlbltpNF0ubGVuZ3RoLCBudWxsLCBmYWxzZSwgMCwgMCksIGk0KyspOwogICAgICBmb3IgKGxldCByMyA9IGk0OyByMyA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyByMysrKQogICAgICAgIGU1LmFwcGVuZCh0aGlzLmNoaWxkcmVuW3IzXSwgMCk7CiAgICAgIGZvciAoOyBpNCA+IDAgJiYgdGhpcy5jaGlsZHJlbltpNCAtIDFdLmxlbmd0aCA9PSAwOyApCiAgICAgICAgdGhpcy5jaGlsZHJlblstLWk0XS5kZXN0cm95KCk7CiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9IGk0LCB0aGlzLm1hcmtEaXJ0eSgpLCB0aGlzLmxlbmd0aCA9IHQ0LCBlNTsKICAgIH0KICAgIHRyYW5zZmVyRE9NKHQ0KSB7CiAgICAgICF0aGlzLmRvbSB8fCAodGhpcy5tYXJrRGlydHkoKSwgdDQuc2V0RE9NKHRoaXMuZG9tKSwgdDQucHJldkF0dHJzID0gdGhpcy5wcmV2QXR0cnMgPT09IHZvaWQgMCA/IHRoaXMuYXR0cnMgOiB0aGlzLnByZXZBdHRycywgdGhpcy5wcmV2QXR0cnMgPSB2b2lkIDAsIHRoaXMuZG9tID0gbnVsbCk7CiAgICB9CiAgICBzZXREZWNvKHQ0KSB7CiAgICAgIHlpKHRoaXMuYXR0cnMsIHQ0KSB8fCAodGhpcy5kb20gJiYgKHRoaXMucHJldkF0dHJzID0gdGhpcy5hdHRycywgdGhpcy5tYXJrRGlydHkoKSksIHRoaXMuYXR0cnMgPSB0NCk7CiAgICB9CiAgICBhcHBlbmQodDQsIGU1KSB7CiAgICAgIHhzMih0aGlzLCB0NCwgZTUpOwogICAgfQogICAgYWRkTGluZURlY28odDQpIHsKICAgICAgbGV0IGU1ID0gdDQuc3BlYy5hdHRyaWJ1dGVzLCBpNCA9IHQ0LnNwZWMuY2xhc3M7CiAgICAgIGU1ICYmICh0aGlzLmF0dHJzID0gV2UyKGU1LCB0aGlzLmF0dHJzIHx8IHt9KSksIGk0ICYmICh0aGlzLmF0dHJzID0gV2UyKHsgY2xhc3M6IGk0IH0sIHRoaXMuYXR0cnMgfHwge30pKTsKICAgIH0KICAgIGRvbUF0UG9zKHQ0KSB7CiAgICAgIHJldHVybiB2cyh0aGlzLCB0NCk7CiAgICB9CiAgICByZXVzZURPTSh0NCkgewogICAgICB0NC5ub2RlTmFtZSA9PSAiRElWIiAmJiAodGhpcy5zZXRET00odDQpLCB0aGlzLmRpcnR5IHw9IDYpOwogICAgfQogICAgc3luYyh0NCkgewogICAgICB2YXIgZTU7CiAgICAgIHRoaXMuZG9tID8gdGhpcy5kaXJ0eSAmIDQgJiYgKHBzKHRoaXMuZG9tKSwgdGhpcy5kb20uY2xhc3NOYW1lID0gImNtLWxpbmUiLCB0aGlzLnByZXZBdHRycyA9IHRoaXMuYXR0cnMgPyBudWxsIDogdm9pZCAwKSA6ICh0aGlzLnNldERPTShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSksIHRoaXMuZG9tLmNsYXNzTmFtZSA9ICJjbS1saW5lIiwgdGhpcy5wcmV2QXR0cnMgPSB0aGlzLmF0dHJzID8gbnVsbCA6IHZvaWQgMCksIHRoaXMucHJldkF0dHJzICE9PSB2b2lkIDAgJiYgKEZlMyh0aGlzLmRvbSwgdGhpcy5wcmV2QXR0cnMsIHRoaXMuYXR0cnMpLCB0aGlzLmRvbS5jbGFzc0xpc3QuYWRkKCJjbS1saW5lIiksIHRoaXMucHJldkF0dHJzID0gdm9pZCAwKSwgc3VwZXIuc3luYyh0NCk7CiAgICAgIGxldCBpNCA9IHRoaXMuZG9tLmxhc3RDaGlsZDsKICAgICAgZm9yICg7IGk0ICYmIEEzLmdldChpNCkgaW5zdGFuY2VvZiBxMjsgKQogICAgICAgIGk0ID0gaTQubGFzdENoaWxkOwogICAgICBpZiAoIWk0IHx8ICF0aGlzLmxlbmd0aCB8fCBpNC5ub2RlTmFtZSAhPSAiQlIiICYmICgoZTUgPSBBMy5nZXQoaTQpKSA9PT0gbnVsbCB8fCBlNSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZTUuaXNFZGl0YWJsZSkgPT0gZmFsc2UgJiYgKCF5My5pb3MgfHwgIXRoaXMuY2hpbGRyZW4uc29tZSgobjgpID0+IG44IGluc3RhbmNlb2YgJDQpKSkgewogICAgICAgIGxldCBuOCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJSIik7CiAgICAgICAgbjguY21JZ25vcmUgPSB0cnVlLCB0aGlzLmRvbS5hcHBlbmRDaGlsZChuOCk7CiAgICAgIH0KICAgIH0KICAgIG1lYXN1cmVUZXh0U2l6ZSgpIHsKICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDAgfHwgdGhpcy5sZW5ndGggPiAyMCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgbGV0IHQ0ID0gMDsKICAgICAgZm9yIChsZXQgZTUgb2YgdGhpcy5jaGlsZHJlbikgewogICAgICAgIGlmICghKGU1IGluc3RhbmNlb2YgJDQpIHx8IC9bXiAtfl0vLnRlc3QoZTUudGV4dCkpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBsZXQgaTQgPSBWdChlNS5kb20pOwogICAgICAgIGlmIChpNC5sZW5ndGggIT0gMSkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHQ0ICs9IGk0WzBdLndpZHRoOwogICAgICB9CiAgICAgIHJldHVybiB0NCA/IHsgbGluZUhlaWdodDogdGhpcy5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LCBjaGFyV2lkdGg6IHQ0IC8gdGhpcy5sZW5ndGggfSA6IG51bGw7CiAgICB9CiAgICBjb29yZHNBdCh0NCwgZTUpIHsKICAgICAgcmV0dXJuIFNzKHRoaXMsIHQ0LCBlNSk7CiAgICB9CiAgICBiZWNvbWUodDQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiBUMy5UZXh0OwogICAgfQogICAgc3RhdGljIGZpbmQodDQsIGU1KSB7CiAgICAgIGZvciAobGV0IGk0ID0gMCwgbjggPSAwOyBpNCA8IHQ0LmNoaWxkcmVuLmxlbmd0aDsgaTQrKykgewogICAgICAgIGxldCByMyA9IHQ0LmNoaWxkcmVuW2k0XSwgbzQgPSBuOCArIHIzLmxlbmd0aDsKICAgICAgICBpZiAobzQgPj0gZTUpIHsKICAgICAgICAgIGlmIChyMyBpbnN0YW5jZW9mIEgzKQogICAgICAgICAgICByZXR1cm4gcjM7CiAgICAgICAgICBpZiAobzQgPiBlNSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIG44ID0gbzQgKyByMy5icmVha0FmdGVyOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH07CiAgdmFyIFkzID0gY2xhc3MgZXh0ZW5kcyBBMyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0KSB7CiAgICAgIHN1cGVyKCksIHRoaXMud2lkZ2V0ID0gdDQsIHRoaXMubGVuZ3RoID0gZTUsIHRoaXMudHlwZSA9IGk0LCB0aGlzLmJyZWFrQWZ0ZXIgPSAwLCB0aGlzLnByZXZXaWRnZXQgPSBudWxsOwogICAgfQogICAgbWVyZ2UodDQsIGU1LCBpNCwgbjgsIHIzLCBvNCkgewogICAgICByZXR1cm4gaTQgJiYgKCEoaTQgaW5zdGFuY2VvZiBZMykgfHwgIXRoaXMud2lkZ2V0LmNvbXBhcmUoaTQud2lkZ2V0KSB8fCB0NCA+IDAgJiYgcjMgPD0gMCB8fCBlNSA8IHRoaXMubGVuZ3RoICYmIG80IDw9IDApID8gZmFsc2UgOiAodGhpcy5sZW5ndGggPSB0NCArIChpNCA/IGk0Lmxlbmd0aCA6IDApICsgKHRoaXMubGVuZ3RoIC0gZTUpLCB0cnVlKTsKICAgIH0KICAgIGRvbUF0UG9zKHQ0KSB7CiAgICAgIHJldHVybiB0NCA9PSAwID8gQjMuYmVmb3JlKHRoaXMuZG9tKSA6IEIzLmFmdGVyKHRoaXMuZG9tLCB0NCA9PSB0aGlzLmxlbmd0aCk7CiAgICB9CiAgICBzcGxpdCh0NCkgewogICAgICBsZXQgZTUgPSB0aGlzLmxlbmd0aCAtIHQ0OwogICAgICB0aGlzLmxlbmd0aCA9IHQ0OwogICAgICBsZXQgaTQgPSBuZXcgWTModGhpcy53aWRnZXQsIGU1LCB0aGlzLnR5cGUpOwogICAgICByZXR1cm4gaTQuYnJlYWtBZnRlciA9IHRoaXMuYnJlYWtBZnRlciwgaTQ7CiAgICB9CiAgICBnZXQgY2hpbGRyZW4oKSB7CiAgICAgIHJldHVybiBiaTsKICAgIH0KICAgIHN5bmMoKSB7CiAgICAgICghdGhpcy5kb20gfHwgIXRoaXMud2lkZ2V0LnVwZGF0ZURPTSh0aGlzLmRvbSkpICYmICh0aGlzLmRvbSAmJiB0aGlzLnByZXZXaWRnZXQgJiYgdGhpcy5wcmV2V2lkZ2V0LmRlc3Ryb3kodGhpcy5kb20pLCB0aGlzLnByZXZXaWRnZXQgPSBudWxsLCB0aGlzLnNldERPTSh0aGlzLndpZGdldC50b0RPTSh0aGlzLmVkaXRvclZpZXcpKSwgdGhpcy5kb20uY29udGVudEVkaXRhYmxlID0gImZhbHNlIik7CiAgICB9CiAgICBnZXQgb3ZlcnJpZGVET01UZXh0KCkgewogICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC52aWV3LnN0YXRlLmRvYy5zbGljZSh0aGlzLnBvc0F0U3RhcnQsIHRoaXMucG9zQXRFbmQpIDogdi5lbXB0eTsKICAgIH0KICAgIGRvbUJvdW5kc0Fyb3VuZCgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBiZWNvbWUodDQpIHsKICAgICAgcmV0dXJuIHQ0IGluc3RhbmNlb2YgWTMgJiYgdDQudHlwZSA9PSB0aGlzLnR5cGUgJiYgdDQud2lkZ2V0LmNvbnN0cnVjdG9yID09IHRoaXMud2lkZ2V0LmNvbnN0cnVjdG9yID8gKHQ0LndpZGdldC5lcSh0aGlzLndpZGdldCkgfHwgdGhpcy5tYXJrRGlydHkodHJ1ZSksIHRoaXMuZG9tICYmICF0aGlzLnByZXZXaWRnZXQgJiYgKHRoaXMucHJldldpZGdldCA9IHRoaXMud2lkZ2V0KSwgdGhpcy53aWRnZXQgPSB0NC53aWRnZXQsIHRoaXMubGVuZ3RoID0gdDQubGVuZ3RoLCB0aGlzLmJyZWFrQWZ0ZXIgPSB0NC5icmVha0FmdGVyLCB0cnVlKSA6IGZhbHNlOwogICAgfQogICAgaWdub3JlTXV0YXRpb24oKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWdub3JlRXZlbnQodDQpIHsKICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0Lmlnbm9yZUV2ZW50KHQ0KTsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHN1cGVyLmRlc3Ryb3koKSwgdGhpcy5kb20gJiYgdGhpcy53aWRnZXQuZGVzdHJveSh0aGlzLmRvbSk7CiAgICB9CiAgfTsKICB2YXIgRnQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0LCBuOCkgewogICAgICB0aGlzLmRvYyA9IHQ0LCB0aGlzLnBvcyA9IGU1LCB0aGlzLmVuZCA9IGk0LCB0aGlzLmRpc2FsbG93QmxvY2tFZmZlY3RzRm9yID0gbjgsIHRoaXMuY29udGVudCA9IFtdLCB0aGlzLmN1ckxpbmUgPSBudWxsLCB0aGlzLmJyZWFrQXRTdGFydCA9IDAsIHRoaXMucGVuZGluZ0J1ZmZlciA9IDAsIHRoaXMuYXRDdXJzb3JQb3MgPSB0cnVlLCB0aGlzLm9wZW5TdGFydCA9IC0xLCB0aGlzLm9wZW5FbmQgPSAtMSwgdGhpcy50ZXh0ID0gIiIsIHRoaXMudGV4dE9mZiA9IDAsIHRoaXMuY3Vyc29yID0gdDQuaXRlcigpLCB0aGlzLnNraXAgPSBlNTsKICAgIH0KICAgIHBvc0NvdmVyZWQoKSB7CiAgICAgIGlmICh0aGlzLmNvbnRlbnQubGVuZ3RoID09IDApCiAgICAgICAgcmV0dXJuICF0aGlzLmJyZWFrQXRTdGFydCAmJiB0aGlzLmRvYy5saW5lQXQodGhpcy5wb3MpLmZyb20gIT0gdGhpcy5wb3M7CiAgICAgIGxldCB0NCA9IHRoaXMuY29udGVudFt0aGlzLmNvbnRlbnQubGVuZ3RoIC0gMV07CiAgICAgIHJldHVybiAhdDQuYnJlYWtBZnRlciAmJiAhKHQ0IGluc3RhbmNlb2YgWTMgJiYgdDQudHlwZSA9PSBUMy5XaWRnZXRCZWZvcmUpOwogICAgfQogICAgZ2V0TGluZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuY3VyTGluZSB8fCAodGhpcy5jb250ZW50LnB1c2godGhpcy5jdXJMaW5lID0gbmV3IEgzKCkpLCB0aGlzLmF0Q3Vyc29yUG9zID0gdHJ1ZSksIHRoaXMuY3VyTGluZTsKICAgIH0KICAgIGZsdXNoQnVmZmVyKHQ0KSB7CiAgICAgIHRoaXMucGVuZGluZ0J1ZmZlciAmJiAodGhpcy5jdXJMaW5lLmFwcGVuZChZdChuZXcgbHQyKC0xKSwgdDQpLCB0NC5sZW5ndGgpLCB0aGlzLnBlbmRpbmdCdWZmZXIgPSAwKTsKICAgIH0KICAgIGFkZEJsb2NrV2lkZ2V0KHQ0KSB7CiAgICAgIHRoaXMuZmx1c2hCdWZmZXIoW10pLCB0aGlzLmN1ckxpbmUgPSBudWxsLCB0aGlzLmNvbnRlbnQucHVzaCh0NCk7CiAgICB9CiAgICBmaW5pc2godDQpIHsKICAgICAgdDQgPyB0aGlzLnBlbmRpbmdCdWZmZXIgPSAwIDogdGhpcy5mbHVzaEJ1ZmZlcihbXSksIHRoaXMucG9zQ292ZXJlZCgpIHx8IHRoaXMuZ2V0TGluZSgpOwogICAgfQogICAgYnVpbGRUZXh0KHQ0LCBlNSwgaTQpIHsKICAgICAgZm9yICg7IHQ0ID4gMDsgKSB7CiAgICAgICAgaWYgKHRoaXMudGV4dE9mZiA9PSB0aGlzLnRleHQubGVuZ3RoKSB7CiAgICAgICAgICBsZXQgeyB2YWx1ZTogcjMsIGxpbmVCcmVhazogbzQsIGRvbmU6IGw3IH0gPSB0aGlzLmN1cnNvci5uZXh0KHRoaXMuc2tpcCk7CiAgICAgICAgICBpZiAodGhpcy5za2lwID0gMCwgbDcpCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiUmFuIG91dCBvZiB0ZXh0IGNvbnRlbnQgd2hlbiBkcmF3aW5nIGlubGluZSB2aWV3cyIpOwogICAgICAgICAgaWYgKG80KSB7CiAgICAgICAgICAgIHRoaXMucG9zQ292ZXJlZCgpIHx8IHRoaXMuZ2V0TGluZSgpLCB0aGlzLmNvbnRlbnQubGVuZ3RoID8gdGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGggLSAxXS5icmVha0FmdGVyID0gMSA6IHRoaXMuYnJlYWtBdFN0YXJ0ID0gMSwgdGhpcy5mbHVzaEJ1ZmZlcihbXSksIHRoaXMuY3VyTGluZSA9IG51bGwsIHQ0LS07CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIHRoaXMudGV4dCA9IHIzLCB0aGlzLnRleHRPZmYgPSAwOwogICAgICAgIH0KICAgICAgICBsZXQgbjggPSBNYXRoLm1pbih0aGlzLnRleHQubGVuZ3RoIC0gdGhpcy50ZXh0T2ZmLCB0NCwgNTEyKTsKICAgICAgICB0aGlzLmZsdXNoQnVmZmVyKGU1LnNsaWNlKDAsIGk0KSksIHRoaXMuZ2V0TGluZSgpLmFwcGVuZChZdChuZXcgJDQodGhpcy50ZXh0LnNsaWNlKHRoaXMudGV4dE9mZiwgdGhpcy50ZXh0T2ZmICsgbjgpKSwgZTUpLCBpNCksIHRoaXMuYXRDdXJzb3JQb3MgPSB0cnVlLCB0aGlzLnRleHRPZmYgKz0gbjgsIHQ0IC09IG44LCBpNCA9IDA7CiAgICAgIH0KICAgIH0KICAgIHNwYW4odDQsIGU1LCBpNCwgbjgpIHsKICAgICAgdGhpcy5idWlsZFRleHQoZTUgLSB0NCwgaTQsIG44KSwgdGhpcy5wb3MgPSBlNSwgdGhpcy5vcGVuU3RhcnQgPCAwICYmICh0aGlzLm9wZW5TdGFydCA9IG44KTsKICAgIH0KICAgIHBvaW50KHQ0LCBlNSwgaTQsIG44LCByMywgbzQpIHsKICAgICAgaWYgKHRoaXMuZGlzYWxsb3dCbG9ja0VmZmVjdHNGb3JbbzRdICYmIGk0IGluc3RhbmNlb2YgVTIpIHsKICAgICAgICBpZiAoaTQuYmxvY2spCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQmxvY2sgZGVjb3JhdGlvbnMgbWF5IG5vdCBiZSBzcGVjaWZpZWQgdmlhIHBsdWdpbnMiKTsKICAgICAgICBpZiAoZTUgPiB0aGlzLmRvYy5saW5lQXQodGhpcy5wb3MpLnRvKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRlY29yYXRpb25zIHRoYXQgcmVwbGFjZSBsaW5lIGJyZWFrcyBtYXkgbm90IGJlIHNwZWNpZmllZCB2aWEgcGx1Z2lucyIpOwogICAgICB9CiAgICAgIGxldCBsNyA9IGU1IC0gdDQ7CiAgICAgIGlmIChpNCBpbnN0YW5jZW9mIFUyKQogICAgICAgIGlmIChpNC5ibG9jaykgewogICAgICAgICAgbGV0IHsgdHlwZTogaDEwIH0gPSBpNDsKICAgICAgICAgIGgxMCA9PSBUMy5XaWRnZXRBZnRlciAmJiAhdGhpcy5wb3NDb3ZlcmVkKCkgJiYgdGhpcy5nZXRMaW5lKCksIHRoaXMuYWRkQmxvY2tXaWRnZXQobmV3IFkzKGk0LndpZGdldCB8fCBuZXcgaGUzKCJkaXYiKSwgbDcsIGgxMCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgaDEwID0gajIuY3JlYXRlKGk0LndpZGdldCB8fCBuZXcgaGUzKCJzcGFuIiksIGw3LCBpNC5zdGFydFNpZGUpLCBhNCA9IHRoaXMuYXRDdXJzb3JQb3MgJiYgIWgxMC5pc0VkaXRhYmxlICYmIHIzIDw9IG44Lmxlbmd0aCAmJiAodDQgPCBlNSB8fCBpNC5zdGFydFNpZGUgPiAwKSwgYzE3ID0gIWgxMC5pc0VkaXRhYmxlICYmICh0NCA8IGU1IHx8IGk0LnN0YXJ0U2lkZSA8PSAwKSwgZjExID0gdGhpcy5nZXRMaW5lKCk7CiAgICAgICAgICB0aGlzLnBlbmRpbmdCdWZmZXIgPT0gMiAmJiAhYTQgJiYgKHRoaXMucGVuZGluZ0J1ZmZlciA9IDApLCB0aGlzLmZsdXNoQnVmZmVyKG44KSwgYTQgJiYgKGYxMS5hcHBlbmQoWXQobmV3IGx0MigxKSwgbjgpLCByMyksIHIzID0gbjgubGVuZ3RoICsgTWF0aC5tYXgoMCwgcjMgLSBuOC5sZW5ndGgpKSwgZjExLmFwcGVuZChZdChoMTAsIG44KSwgcjMpLCB0aGlzLmF0Q3Vyc29yUG9zID0gYzE3LCB0aGlzLnBlbmRpbmdCdWZmZXIgPSBjMTcgPyB0NCA8IGU1ID8gMSA6IDIgOiAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMuZG9jLmxpbmVBdCh0aGlzLnBvcykuZnJvbSA9PSB0aGlzLnBvcyAmJiB0aGlzLmdldExpbmUoKS5hZGRMaW5lRGVjbyhpNCk7CiAgICAgIGw3ICYmICh0aGlzLnRleHRPZmYgKyBsNyA8PSB0aGlzLnRleHQubGVuZ3RoID8gdGhpcy50ZXh0T2ZmICs9IGw3IDogKHRoaXMuc2tpcCArPSBsNyAtICh0aGlzLnRleHQubGVuZ3RoIC0gdGhpcy50ZXh0T2ZmKSwgdGhpcy50ZXh0ID0gIiIsIHRoaXMudGV4dE9mZiA9IDApLCB0aGlzLnBvcyA9IGU1KSwgdGhpcy5vcGVuU3RhcnQgPCAwICYmICh0aGlzLm9wZW5TdGFydCA9IHIzKTsKICAgIH0KICAgIHN0YXRpYyBidWlsZCh0NCwgZTUsIGk0LCBuOCwgcjMpIHsKICAgICAgbGV0IG80ID0gbmV3IEZ0KHQ0LCBlNSwgaTQsIHIzKTsKICAgICAgcmV0dXJuIG80Lm9wZW5FbmQgPSBQLnNwYW5zKG44LCBlNSwgaTQsIG80KSwgbzQub3BlblN0YXJ0IDwgMCAmJiAobzQub3BlblN0YXJ0ID0gbzQub3BlbkVuZCksIG80LmZpbmlzaChvNC5vcGVuRW5kKSwgbzQ7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBZdChzOCwgdDQpIHsKICAgIGZvciAobGV0IGU1IG9mIHQ0KQogICAgICBzOCA9IG5ldyBxMihlNSwgW3M4XSwgczgubGVuZ3RoKTsKICAgIHJldHVybiBzODsKICB9CiAgdmFyIGhlMyA9IGNsYXNzIGV4dGVuZHMgWDQgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgc3VwZXIoKSwgdGhpcy50YWcgPSB0NDsKICAgIH0KICAgIGVxKHQ0KSB7CiAgICAgIHJldHVybiB0NC50YWcgPT0gdGhpcy50YWc7CiAgICB9CiAgICB0b0RPTSgpIHsKICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy50YWcpOwogICAgfQogICAgdXBkYXRlRE9NKHQ0KSB7CiAgICAgIHJldHVybiB0NC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09IHRoaXMudGFnOwogICAgfQogIH07CiAgdmFyIE1zMiA9IEEyLmRlZmluZSgpOwogIHZhciBrczIgPSBBMi5kZWZpbmUoKTsKICB2YXIgQXMgPSBBMi5kZWZpbmUoKTsKICB2YXIgRHMgPSBBMi5kZWZpbmUoKTsKICB2YXIgSWU0ID0gQTIuZGVmaW5lKCk7CiAgdmFyIFRzMiA9IEEyLmRlZmluZSgpOwogIHZhciBPczIgPSBBMi5kZWZpbmUoeyBjb21iaW5lOiAoczgpID0+IHM4LnNvbWUoKHQ0KSA9PiB0NCkgfSk7CiAgdmFyIHh0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1ID0gIm5lYXJlc3QiLCBpNCA9ICJuZWFyZXN0IiwgbjggPSA1LCByMyA9IDUpIHsKICAgICAgdGhpcy5yYW5nZSA9IHQ0LCB0aGlzLnkgPSBlNSwgdGhpcy54ID0gaTQsIHRoaXMueU1hcmdpbiA9IG44LCB0aGlzLnhNYXJnaW4gPSByMzsKICAgIH0KICAgIG1hcCh0NCkgewogICAgICByZXR1cm4gdDQuZW1wdHkgPyB0aGlzIDogbmV3IHh0KHRoaXMucmFuZ2UubWFwKHQ0KSwgdGhpcy55LCB0aGlzLngsIHRoaXMueU1hcmdpbiwgdGhpcy54TWFyZ2luKTsKICAgIH0KICB9OwogIHZhciBUaSA9IHkuZGVmaW5lKHsgbWFwOiAoczgsIHQ0KSA9PiBzOC5tYXAodDQpIH0pOwogIGZ1bmN0aW9uIG50MihzOCwgdDQsIGU1KSB7CiAgICBsZXQgaTQgPSBzOC5mYWNldChEcyk7CiAgICBpNC5sZW5ndGggPyBpNFswXSh0NCkgOiB3aW5kb3cub25lcnJvciA/IHdpbmRvdy5vbmVycm9yKFN0cmluZyh0NCksIGU1LCB2b2lkIDAsIHZvaWQgMCwgdDQpIDogZTUgPyBjb25zb2xlLmVycm9yKGU1ICsgIjoiLCB0NCkgOiBjb25zb2xlLmVycm9yKHQ0KTsKICB9CiAgdmFyIENlNCA9IEEyLmRlZmluZSh7IGNvbWJpbmU6IChzOCkgPT4gczgubGVuZ3RoID8gczhbMF0gOiB0cnVlIH0pOwogIHZhciBNbiA9IDA7CiAgdmFyIEF0ID0gQTIuZGVmaW5lKCk7CiAgdmFyIFY0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1LCBpNCwgbjgpIHsKICAgICAgdGhpcy5pZCA9IHQ0LCB0aGlzLmNyZWF0ZSA9IGU1LCB0aGlzLmRvbUV2ZW50SGFuZGxlcnMgPSBpNCwgdGhpcy5leHRlbnNpb24gPSBuOCh0aGlzKTsKICAgIH0KICAgIHN0YXRpYyBkZWZpbmUodDQsIGU1KSB7CiAgICAgIGxldCB7IGV2ZW50SGFuZGxlcnM6IGk0LCBwcm92aWRlOiBuOCwgZGVjb3JhdGlvbnM6IHIzIH0gPSBlNSB8fCB7fTsKICAgICAgcmV0dXJuIG5ldyBWNChNbisrLCB0NCwgaTQsIChvNCkgPT4gewogICAgICAgIGxldCBsNyA9IFtBdC5vZihvNCldOwogICAgICAgIHJldHVybiByMyAmJiBsNy5wdXNoKHp0Lm9mKChoMTApID0+IHsKICAgICAgICAgIGxldCBhNCA9IGgxMC5wbHVnaW4obzQpOwogICAgICAgICAgcmV0dXJuIGE0ID8gcjMoYTQpIDogay5ub25lOwogICAgICAgIH0pKSwgbjggJiYgbDcucHVzaChuOChvNCkpLCBsNzsKICAgICAgfSk7CiAgICB9CiAgICBzdGF0aWMgZnJvbUNsYXNzKHQ0LCBlNSkgewogICAgICByZXR1cm4gVjQuZGVmaW5lKChpNCkgPT4gbmV3IHQ0KGk0KSwgZTUpOwogICAgfQogIH07CiAgdmFyIEJ0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgdGhpcy5zcGVjID0gdDQsIHRoaXMubXVzdFVwZGF0ZSA9IG51bGwsIHRoaXMudmFsdWUgPSBudWxsOwogICAgfQogICAgdXBkYXRlKHQ0KSB7CiAgICAgIGlmICh0aGlzLnZhbHVlKSB7CiAgICAgICAgaWYgKHRoaXMubXVzdFVwZGF0ZSkgewogICAgICAgICAgbGV0IGU1ID0gdGhpcy5tdXN0VXBkYXRlOwogICAgICAgICAgaWYgKHRoaXMubXVzdFVwZGF0ZSA9IG51bGwsIHRoaXMudmFsdWUudXBkYXRlKQogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHRoaXMudmFsdWUudXBkYXRlKGU1KTsKICAgICAgICAgICAgfSBjYXRjaCAoaTQpIHsKICAgICAgICAgICAgICBpZiAobnQyKGU1LnN0YXRlLCBpNCwgIkNvZGVNaXJyb3IgcGx1Z2luIGNyYXNoZWQiKSwgdGhpcy52YWx1ZS5kZXN0cm95KQogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLnNwZWMpCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNwZWMuY3JlYXRlKHQ0KTsKICAgICAgICB9IGNhdGNoIChlNSkgewogICAgICAgICAgbnQyKHQ0LnN0YXRlLCBlNSwgIkNvZGVNaXJyb3IgcGx1Z2luIGNyYXNoZWQiKSwgdGhpcy5kZWFjdGl2YXRlKCk7CiAgICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGRlc3Ryb3kodDQpIHsKICAgICAgdmFyIGU1OwogICAgICBpZiAoISgoZTUgPSB0aGlzLnZhbHVlKSA9PT0gbnVsbCB8fCBlNSA9PT0gdm9pZCAwKSAmJiBlNS5kZXN0cm95KQogICAgICAgIHRyeSB7CiAgICAgICAgICB0aGlzLnZhbHVlLmRlc3Ryb3koKTsKICAgICAgICB9IGNhdGNoIChpNCkgewogICAgICAgICAgbnQyKHQ0LnN0YXRlLCBpNCwgIkNvZGVNaXJyb3IgcGx1Z2luIGNyYXNoZWQiKTsKICAgICAgICB9CiAgICB9CiAgICBkZWFjdGl2YXRlKCkgewogICAgICB0aGlzLnNwZWMgPSB0aGlzLnZhbHVlID0gbnVsbDsKICAgIH0KICB9OwogIHZhciBScyA9IEEyLmRlZmluZSgpOwogIHZhciB3aSA9IEEyLmRlZmluZSgpOwogIHZhciB6dCA9IEEyLmRlZmluZSgpOwogIHZhciBMczIgPSBBMi5kZWZpbmUoKTsKICB2YXIgRXMgPSBBMi5kZWZpbmUoKTsKICB2YXIgRHQgPSBBMi5kZWZpbmUoKTsKICB2YXIgSTIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0LCBuOCkgewogICAgICB0aGlzLmZyb21BID0gdDQsIHRoaXMudG9BID0gZTUsIHRoaXMuZnJvbUIgPSBpNCwgdGhpcy50b0IgPSBuODsKICAgIH0KICAgIGpvaW4odDQpIHsKICAgICAgcmV0dXJuIG5ldyBJMihNYXRoLm1pbih0aGlzLmZyb21BLCB0NC5mcm9tQSksIE1hdGgubWF4KHRoaXMudG9BLCB0NC50b0EpLCBNYXRoLm1pbih0aGlzLmZyb21CLCB0NC5mcm9tQiksIE1hdGgubWF4KHRoaXMudG9CLCB0NC50b0IpKTsKICAgIH0KICAgIGFkZFRvU2V0KHQ0KSB7CiAgICAgIGxldCBlNSA9IHQ0Lmxlbmd0aCwgaTQgPSB0aGlzOwogICAgICBmb3IgKDsgZTUgPiAwOyBlNS0tKSB7CiAgICAgICAgbGV0IG44ID0gdDRbZTUgLSAxXTsKICAgICAgICBpZiAoIShuOC5mcm9tQSA+IGk0LnRvQSkpIHsKICAgICAgICAgIGlmIChuOC50b0EgPCBpNC5mcm9tQSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBpNCA9IGk0LmpvaW4objgpLCB0NC5zcGxpY2UoZTUgLSAxLCAxKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHQ0LnNwbGljZShlNSwgMCwgaTQpLCB0NDsKICAgIH0KICAgIHN0YXRpYyBleHRlbmRXaXRoUmFuZ2VzKHQ0LCBlNSkgewogICAgICBpZiAoZTUubGVuZ3RoID09IDApCiAgICAgICAgcmV0dXJuIHQ0OwogICAgICBsZXQgaTQgPSBbXTsKICAgICAgZm9yIChsZXQgbjggPSAwLCByMyA9IDAsIG80ID0gMCwgbDcgPSAwOyA7IG44KyspIHsKICAgICAgICBsZXQgaDEwID0gbjggPT0gdDQubGVuZ3RoID8gbnVsbCA6IHQ0W244XSwgYTQgPSBvNCAtIGw3LCBjMTcgPSBoMTAgPyBoMTAuZnJvbUIgOiAxZTk7CiAgICAgICAgZm9yICg7IHIzIDwgZTUubGVuZ3RoICYmIGU1W3IzXSA8IGMxNzsgKSB7CiAgICAgICAgICBsZXQgZjExID0gZTVbcjNdLCBkMTUgPSBlNVtyMyArIDFdLCB1MTEgPSBNYXRoLm1heChsNywgZjExKSwgcDE4ID0gTWF0aC5taW4oYzE3LCBkMTUpOwogICAgICAgICAgaWYgKHUxMSA8PSBwMTggJiYgbmV3IEkyKHUxMSArIGE0LCBwMTggKyBhNCwgdTExLCBwMTgpLmFkZFRvU2V0KGk0KSwgZDE1ID4gYzE3KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIHIzICs9IDI7CiAgICAgICAgfQogICAgICAgIGlmICghaDEwKQogICAgICAgICAgcmV0dXJuIGk0OwogICAgICAgIG5ldyBJMihoMTAuZnJvbUEsIGgxMC50b0EsIGgxMC5mcm9tQiwgaDEwLnRvQikuYWRkVG9TZXQoaTQpLCBvNCA9IGgxMC50b0EsIGw3ID0gaDEwLnRvQjsKICAgICAgfQogICAgfQogIH07CiAgdmFyIFN0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1LCBpNCkgewogICAgICB0aGlzLnZpZXcgPSB0NCwgdGhpcy5zdGF0ZSA9IGU1LCB0aGlzLnRyYW5zYWN0aW9ucyA9IGk0LCB0aGlzLmZsYWdzID0gMCwgdGhpcy5zdGFydFN0YXRlID0gdDQuc3RhdGUsIHRoaXMuY2hhbmdlcyA9IHguZW1wdHkodGhpcy5zdGFydFN0YXRlLmRvYy5sZW5ndGgpOwogICAgICBmb3IgKGxldCBvNCBvZiBpNCkKICAgICAgICB0aGlzLmNoYW5nZXMgPSB0aGlzLmNoYW5nZXMuY29tcG9zZShvNC5jaGFuZ2VzKTsKICAgICAgbGV0IG44ID0gW107CiAgICAgIHRoaXMuY2hhbmdlcy5pdGVyQ2hhbmdlZFJhbmdlcygobzQsIGw3LCBoMTAsIGE0KSA9PiBuOC5wdXNoKG5ldyBJMihvNCwgbDcsIGgxMCwgYTQpKSksIHRoaXMuY2hhbmdlZFJhbmdlcyA9IG44OwogICAgICBsZXQgcjMgPSB0NC5oYXNGb2N1czsKICAgICAgcjMgIT0gdDQuaW5wdXRTdGF0ZS5ub3RpZmllZEZvY3VzZWQgJiYgKHQ0LmlucHV0U3RhdGUubm90aWZpZWRGb2N1c2VkID0gcjMsIHRoaXMuZmxhZ3MgfD0gMSk7CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlKHQ0LCBlNSwgaTQpIHsKICAgICAgcmV0dXJuIG5ldyBTdCh0NCwgZTUsIGk0KTsKICAgIH0KICAgIGdldCB2aWV3cG9ydENoYW5nZWQoKSB7CiAgICAgIHJldHVybiAodGhpcy5mbGFncyAmIDQpID4gMDsKICAgIH0KICAgIGdldCBoZWlnaHRDaGFuZ2VkKCkgewogICAgICByZXR1cm4gKHRoaXMuZmxhZ3MgJiAyKSA+IDA7CiAgICB9CiAgICBnZXQgZ2VvbWV0cnlDaGFuZ2VkKCkgewogICAgICByZXR1cm4gdGhpcy5kb2NDaGFuZ2VkIHx8ICh0aGlzLmZsYWdzICYgMTApID4gMDsKICAgIH0KICAgIGdldCBmb2N1c0NoYW5nZWQoKSB7CiAgICAgIHJldHVybiAodGhpcy5mbGFncyAmIDEpID4gMDsKICAgIH0KICAgIGdldCBkb2NDaGFuZ2VkKCkgewogICAgICByZXR1cm4gIXRoaXMuY2hhbmdlcy5lbXB0eTsKICAgIH0KICAgIGdldCBzZWxlY3Rpb25TZXQoKSB7CiAgICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9ucy5zb21lKCh0NCkgPT4gdDQuc2VsZWN0aW9uKTsKICAgIH0KICAgIGdldCBlbXB0eSgpIHsKICAgICAgcmV0dXJuIHRoaXMuZmxhZ3MgPT0gMCAmJiB0aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGggPT0gMDsKICAgIH0KICB9OwogIHZhciBSMiA9IGZ1bmN0aW9uKHM4KSB7CiAgICByZXR1cm4gczhbczguTFRSID0gMF0gPSAiTFRSIiwgczhbczguUlRMID0gMV0gPSAiUlRMIiwgczg7CiAgfShSMiB8fCAoUjIgPSB7fSkpOwogIHZhciBxZTMgPSBSMi5MVFI7CiAgdmFyIGtuID0gUjIuUlRMOwogIGZ1bmN0aW9uIEJzKHM4KSB7CiAgICBsZXQgdDQgPSBbXTsKICAgIGZvciAobGV0IGU1ID0gMDsgZTUgPCBzOC5sZW5ndGg7IGU1KyspCiAgICAgIHQ0LnB1c2goMSA8PCArczhbZTVdKTsKICAgIHJldHVybiB0NDsKICB9CiAgdmFyIEFuID0gQnMoIjg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4NjY2ODg4ODg4Nzg3ODMzMzMzMzMzMzM3ODg4ODg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODg4ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg3ODY2NjY4ODg4MDg4ODg4NjYzMzgwODg4MzA4ODg4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Iik7CiAgdmFyIERuID0gQnMoIjQ0NDQ0NDg4MjY2MjcyODg5OTk5OTk5OTk5OTIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ0NDQ0NDQ0NDQ2NDQyMjI4MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI5OTk5OTk5NDk5OTk5OTkyMjk5ODk5OTkyMjMzMzMzMzMzMzMiKTsKICB2YXIgS2UyID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgdmFyIEszID0gW107CiAgZm9yIChsZXQgczggb2YgWyIoKSIsICJbXSIsICJ7fSJdKSB7CiAgICBsZXQgdDQgPSBzOC5jaGFyQ29kZUF0KDApLCBlNSA9IHM4LmNoYXJDb2RlQXQoMSk7CiAgICBLZTJbdDRdID0gZTUsIEtlMltlNV0gPSAtdDQ7CiAgfQogIGZ1bmN0aW9uIFRuKHM4KSB7CiAgICByZXR1cm4gczggPD0gMjQ3ID8gQW5bczhdIDogMTQyNCA8PSBzOCAmJiBzOCA8PSAxNTI0ID8gMiA6IDE1MzYgPD0gczggJiYgczggPD0gMTc4NSA/IERuW3M4IC0gMTUzNl0gOiAxNzc0IDw9IHM4ICYmIHM4IDw9IDIyMjAgPyA0IDogODE5MiA8PSBzOCAmJiBzOCA8PSA4MjAzID8gMjU2IDogNjQzMzYgPD0gczggJiYgczggPD0gNjUwMjMgPyA0IDogczggPT0gODIwNCA/IDI1NiA6IDE7CiAgfQogIHZhciBPbiA9IC9bXHUwNTkwLVx1MDVmNFx1MDYwMC1cdTA2ZmZcdTA3MDAtXHUwOGFjXHVmYjUwLVx1ZmRmZl0vOwogIHZhciBydDIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0KSB7CiAgICAgIHRoaXMuZnJvbSA9IHQ0LCB0aGlzLnRvID0gZTUsIHRoaXMubGV2ZWwgPSBpNDsKICAgIH0KICAgIGdldCBkaXIoKSB7CiAgICAgIHJldHVybiB0aGlzLmxldmVsICUgMiA/IGtuIDogcWUzOwogICAgfQogICAgc2lkZSh0NCwgZTUpIHsKICAgICAgcmV0dXJuIHRoaXMuZGlyID09IGU1ID09IHQ0ID8gdGhpcy50byA6IHRoaXMuZnJvbTsKICAgIH0KICAgIHN0YXRpYyBmaW5kKHQ0LCBlNSwgaTQsIG44KSB7CiAgICAgIGxldCByMyA9IC0xOwogICAgICBmb3IgKGxldCBvNCA9IDA7IG80IDwgdDQubGVuZ3RoOyBvNCsrKSB7CiAgICAgICAgbGV0IGw3ID0gdDRbbzRdOwogICAgICAgIGlmIChsNy5mcm9tIDw9IGU1ICYmIGw3LnRvID49IGU1KSB7CiAgICAgICAgICBpZiAobDcubGV2ZWwgPT0gaTQpCiAgICAgICAgICAgIHJldHVybiBvNDsKICAgICAgICAgIChyMyA8IDAgfHwgKG44ICE9IDAgPyBuOCA8IDAgPyBsNy5mcm9tIDwgZTUgOiBsNy50byA+IGU1IDogdDRbcjNdLmxldmVsID4gbDcubGV2ZWwpKSAmJiAocjMgPSBvNCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChyMyA8IDApCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICByZXR1cm4gcjM7CiAgICB9CiAgfTsKICB2YXIgTzMgPSBbXTsKICBmdW5jdGlvbiBQczIoczgsIHQ0KSB7CiAgICBsZXQgZTUgPSBzOC5sZW5ndGgsIGk0ID0gdDQgPT0gcWUzID8gMSA6IDIsIG44ID0gdDQgPT0gcWUzID8gMiA6IDE7CiAgICBpZiAoIXM4IHx8IGk0ID09IDEgJiYgIU9uLnRlc3QoczgpKQogICAgICByZXR1cm4gSHMoZTUpOwogICAgZm9yIChsZXQgbzQgPSAwLCBsNyA9IGk0LCBoMTAgPSBpNDsgbzQgPCBlNTsgbzQrKykgewogICAgICBsZXQgYTQgPSBUbihzOC5jaGFyQ29kZUF0KG80KSk7CiAgICAgIGE0ID09IDUxMiA/IGE0ID0gbDcgOiBhNCA9PSA4ICYmIGgxMCA9PSA0ICYmIChhNCA9IDE2KSwgTzNbbzRdID0gYTQgPT0gNCA/IDIgOiBhNCwgYTQgJiA3ICYmIChoMTAgPSBhNCksIGw3ID0gYTQ7CiAgICB9CiAgICBmb3IgKGxldCBvNCA9IDAsIGw3ID0gaTQsIGgxMCA9IGk0OyBvNCA8IGU1OyBvNCsrKSB7CiAgICAgIGxldCBhNCA9IE8zW280XTsKICAgICAgaWYgKGE0ID09IDEyOCkKICAgICAgICBvNCA8IGU1IC0gMSAmJiBsNyA9PSBPM1tvNCArIDFdICYmIGw3ICYgMjQgPyBhNCA9IE8zW280XSA9IGw3IDogTzNbbzRdID0gMjU2OwogICAgICBlbHNlIGlmIChhNCA9PSA2NCkgewogICAgICAgIGxldCBjMTcgPSBvNCArIDE7CiAgICAgICAgZm9yICg7IGMxNyA8IGU1ICYmIE8zW2MxN10gPT0gNjQ7ICkKICAgICAgICAgIGMxNysrOwogICAgICAgIGxldCBmMTEgPSBvNCAmJiBsNyA9PSA4IHx8IGMxNyA8IGU1ICYmIE8zW2MxN10gPT0gOCA/IGgxMCA9PSAxID8gMSA6IDggOiAyNTY7CiAgICAgICAgZm9yIChsZXQgZDE1ID0gbzQ7IGQxNSA8IGMxNzsgZDE1KyspCiAgICAgICAgICBPM1tkMTVdID0gZjExOwogICAgICAgIG80ID0gYzE3IC0gMTsKICAgICAgfSBlbHNlCiAgICAgICAgYTQgPT0gOCAmJiBoMTAgPT0gMSAmJiAoTzNbbzRdID0gMSk7CiAgICAgIGw3ID0gYTQsIGE0ICYgNyAmJiAoaDEwID0gYTQpOwogICAgfQogICAgZm9yIChsZXQgbzQgPSAwLCBsNyA9IDAsIGgxMCA9IDAsIGE0LCBjMTcsIGYxMTsgbzQgPCBlNTsgbzQrKykKICAgICAgaWYgKGMxNyA9IEtlMlthNCA9IHM4LmNoYXJDb2RlQXQobzQpXSkKICAgICAgICBpZiAoYzE3IDwgMCkgewogICAgICAgICAgZm9yIChsZXQgZDE1ID0gbDcgLSAzOyBkMTUgPj0gMDsgZDE1IC09IDMpCiAgICAgICAgICAgIGlmIChLM1tkMTUgKyAxXSA9PSAtYzE3KSB7CiAgICAgICAgICAgICAgbGV0IHUxMSA9IEszW2QxNSArIDJdLCBwMTggPSB1MTEgJiAyID8gaTQgOiB1MTEgJiA0ID8gdTExICYgMSA/IG44IDogaTQgOiAwOwogICAgICAgICAgICAgIHAxOCAmJiAoTzNbbzRdID0gTzNbSzNbZDE1XV0gPSBwMTgpLCBsNyA9IGQxNTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoSzMubGVuZ3RoID09IDE4OSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBLM1tsNysrXSA9IG80LCBLM1tsNysrXSA9IGE0LCBLM1tsNysrXSA9IGgxMDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKChmMTEgPSBPM1tvNF0pID09IDIgfHwgZjExID09IDEpIHsKICAgICAgICBsZXQgZDE1ID0gZjExID09IGk0OwogICAgICAgIGgxMCA9IGQxNSA/IDAgOiAxOwogICAgICAgIGZvciAobGV0IHUxMSA9IGw3IC0gMzsgdTExID49IDA7IHUxMSAtPSAzKSB7CiAgICAgICAgICBsZXQgcDE4ID0gSzNbdTExICsgMl07CiAgICAgICAgICBpZiAocDE4ICYgMikKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBpZiAoZDE1KQogICAgICAgICAgICBLM1t1MTEgKyAyXSB8PSAyOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChwMTggJiA0KQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBLM1t1MTEgKyAyXSB8PSA0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgZm9yIChsZXQgbzQgPSAwOyBvNCA8IGU1OyBvNCsrKQogICAgICBpZiAoTzNbbzRdID09IDI1NikgewogICAgICAgIGxldCBsNyA9IG80ICsgMTsKICAgICAgICBmb3IgKDsgbDcgPCBlNSAmJiBPM1tsN10gPT0gMjU2OyApCiAgICAgICAgICBsNysrOwogICAgICAgIGxldCBoMTAgPSAobzQgPyBPM1tvNCAtIDFdIDogaTQpID09IDEsIGE0ID0gKGw3IDwgZTUgPyBPM1tsN10gOiBpNCkgPT0gMSwgYzE3ID0gaDEwID09IGE0ID8gaDEwID8gMSA6IDIgOiBpNDsKICAgICAgICBmb3IgKGxldCBmMTEgPSBvNDsgZjExIDwgbDc7IGYxMSsrKQogICAgICAgICAgTzNbZjExXSA9IGMxNzsKICAgICAgICBvNCA9IGw3IC0gMTsKICAgICAgfQogICAgbGV0IHIzID0gW107CiAgICBpZiAoaTQgPT0gMSkKICAgICAgZm9yIChsZXQgbzQgPSAwOyBvNCA8IGU1OyApIHsKICAgICAgICBsZXQgbDcgPSBvNCwgaDEwID0gTzNbbzQrK10gIT0gMTsKICAgICAgICBmb3IgKDsgbzQgPCBlNSAmJiBoMTAgPT0gKE8zW280XSAhPSAxKTsgKQogICAgICAgICAgbzQrKzsKICAgICAgICBpZiAoaDEwKQogICAgICAgICAgZm9yIChsZXQgYTQgPSBvNDsgYTQgPiBsNzsgKSB7CiAgICAgICAgICAgIGxldCBjMTcgPSBhNCwgZjExID0gTzNbLS1hNF0gIT0gMjsKICAgICAgICAgICAgZm9yICg7IGE0ID4gbDcgJiYgZjExID09IChPM1thNCAtIDFdICE9IDIpOyApCiAgICAgICAgICAgICAgYTQtLTsKICAgICAgICAgICAgcjMucHVzaChuZXcgcnQyKGE0LCBjMTcsIGYxMSA/IDIgOiAxKSk7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgcjMucHVzaChuZXcgcnQyKGw3LCBvNCwgMCkpOwogICAgICB9CiAgICBlbHNlCiAgICAgIGZvciAobGV0IG80ID0gMDsgbzQgPCBlNTsgKSB7CiAgICAgICAgbGV0IGw3ID0gbzQsIGgxMCA9IE8zW280KytdID09IDI7CiAgICAgICAgZm9yICg7IG80IDwgZTUgJiYgaDEwID09IChPM1tvNF0gPT0gMik7ICkKICAgICAgICAgIG80Kys7CiAgICAgICAgcjMucHVzaChuZXcgcnQyKGw3LCBvNCwgaDEwID8gMSA6IDIpKTsKICAgICAgfQogICAgcmV0dXJuIHIzOwogIH0KICBmdW5jdGlvbiBIcyhzOCkgewogICAgcmV0dXJuIFtuZXcgcnQyKDAsIHM4LCAwKV07CiAgfQogIHZhciBOczIgPSAiIjsKICBmdW5jdGlvbiBWcyhzOCwgdDQsIGU1LCBpNCwgbjgpIHsKICAgIHZhciByMzsKICAgIGxldCBvNCA9IGk0LmhlYWQgLSBzOC5mcm9tLCBsNyA9IC0xOwogICAgaWYgKG80ID09IDApIHsKICAgICAgaWYgKCFuOCB8fCAhczgubGVuZ3RoKQogICAgICAgIHJldHVybiBudWxsOwogICAgICB0NFswXS5sZXZlbCAhPSBlNSAmJiAobzQgPSB0NFswXS5zaWRlKGZhbHNlLCBlNSksIGw3ID0gMCk7CiAgICB9IGVsc2UgaWYgKG80ID09IHM4Lmxlbmd0aCkgewogICAgICBpZiAobjgpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGxldCBkMTUgPSB0NFt0NC5sZW5ndGggLSAxXTsKICAgICAgZDE1LmxldmVsICE9IGU1ICYmIChvNCA9IGQxNS5zaWRlKHRydWUsIGU1KSwgbDcgPSB0NC5sZW5ndGggLSAxKTsKICAgIH0KICAgIGw3IDwgMCAmJiAobDcgPSBydDIuZmluZCh0NCwgbzQsIChyMyA9IGk0LmJpZGlMZXZlbCkgIT09IG51bGwgJiYgcjMgIT09IHZvaWQgMCA/IHIzIDogLTEsIGk0LmFzc29jKSk7CiAgICBsZXQgaDEwID0gdDRbbDddOwogICAgbzQgPT0gaDEwLnNpZGUobjgsIGU1KSAmJiAoaDEwID0gdDRbbDcgKz0gbjggPyAxIDogLTFdLCBvNCA9IGgxMC5zaWRlKCFuOCwgZTUpKTsKICAgIGxldCBhNCA9IG44ID09IChoMTAuZGlyID09IGU1KSwgYzE3ID0gaWUyKHM4LnRleHQsIG80LCBhNCk7CiAgICBpZiAoTnMyID0gczgudGV4dC5zbGljZShNYXRoLm1pbihvNCwgYzE3KSwgTWF0aC5tYXgobzQsIGMxNykpLCBjMTcgIT0gaDEwLnNpZGUobjgsIGU1KSkKICAgICAgcmV0dXJuIGcyLmN1cnNvcihjMTcgKyBzOC5mcm9tLCBhNCA/IC0xIDogMSwgaDEwLmxldmVsKTsKICAgIGxldCBmMTEgPSBsNyA9PSAobjggPyB0NC5sZW5ndGggLSAxIDogMCkgPyBudWxsIDogdDRbbDcgKyAobjggPyAxIDogLTEpXTsKICAgIHJldHVybiAhZjExICYmIGgxMC5sZXZlbCAhPSBlNSA/IGcyLmN1cnNvcihuOCA/IHM4LnRvIDogczguZnJvbSwgbjggPyAtMSA6IDEsIGU1KSA6IGYxMSAmJiBmMTEubGV2ZWwgPCBoMTAubGV2ZWwgPyBnMi5jdXJzb3IoZjExLnNpZGUoIW44LCBlNSkgKyBzOC5mcm9tLCBuOCA/IDEgOiAtMSwgZjExLmxldmVsKSA6IGcyLmN1cnNvcihjMTcgKyBzOC5mcm9tLCBuOCA/IC0xIDogMSwgaDEwLmxldmVsKTsKICB9CiAgdmFyIHN0MiA9ICJcdUZGRkYiOwogIHZhciBhZTMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUpIHsKICAgICAgdGhpcy5wb2ludHMgPSB0NCwgdGhpcy50ZXh0ID0gIiIsIHRoaXMubGluZVNlcGFyYXRvciA9IGU1LmZhY2V0KHcubGluZVNlcGFyYXRvcik7CiAgICB9CiAgICBhcHBlbmQodDQpIHsKICAgICAgdGhpcy50ZXh0ICs9IHQ0OwogICAgfQogICAgbGluZUJyZWFrKCkgewogICAgICB0aGlzLnRleHQgKz0gc3QyOwogICAgfQogICAgcmVhZFJhbmdlKHQ0LCBlNSkgewogICAgICBpZiAoIXQ0KQogICAgICAgIHJldHVybiB0aGlzOwogICAgICBsZXQgaTQgPSB0NC5wYXJlbnROb2RlOwogICAgICBmb3IgKGxldCBuOCA9IHQ0OyA7ICkgewogICAgICAgIHRoaXMuZmluZFBvaW50QmVmb3JlKGk0LCBuOCksIHRoaXMucmVhZE5vZGUobjgpOwogICAgICAgIGxldCByMyA9IG44Lm5leHRTaWJsaW5nOwogICAgICAgIGlmIChyMyA9PSBlNSkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGxldCBvNCA9IEEzLmdldChuOCksIGw3ID0gQTMuZ2V0KHIzKTsKICAgICAgICAobzQgJiYgbDcgPyBvNC5icmVha0FmdGVyIDogKG80ID8gbzQuYnJlYWtBZnRlciA6IE9pMihuOCkpIHx8IE9pMihyMykgJiYgKG44Lm5vZGVOYW1lICE9ICJCUiIgfHwgbjguY21JZ25vcmUpKSAmJiB0aGlzLmxpbmVCcmVhaygpLCBuOCA9IHIzOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmZpbmRQb2ludEJlZm9yZShpNCwgZTUpLCB0aGlzOwogICAgfQogICAgcmVhZFRleHROb2RlKHQ0KSB7CiAgICAgIGxldCBlNSA9IHQ0Lm5vZGVWYWx1ZTsKICAgICAgZm9yIChsZXQgaTQgb2YgdGhpcy5wb2ludHMpCiAgICAgICAgaTQubm9kZSA9PSB0NCAmJiAoaTQucG9zID0gdGhpcy50ZXh0Lmxlbmd0aCArIE1hdGgubWluKGk0Lm9mZnNldCwgZTUubGVuZ3RoKSk7CiAgICAgIGZvciAobGV0IGk0ID0gMCwgbjggPSB0aGlzLmxpbmVTZXBhcmF0b3IgPyBudWxsIDogL1xyXG4/fFxuL2c7IDsgKSB7CiAgICAgICAgbGV0IHIzID0gLTEsIG80ID0gMSwgbDc7CiAgICAgICAgaWYgKHRoaXMubGluZVNlcGFyYXRvciA/IChyMyA9IGU1LmluZGV4T2YodGhpcy5saW5lU2VwYXJhdG9yLCBpNCksIG80ID0gdGhpcy5saW5lU2VwYXJhdG9yLmxlbmd0aCkgOiAobDcgPSBuOC5leGVjKGU1KSkgJiYgKHIzID0gbDcuaW5kZXgsIG80ID0gbDdbMF0ubGVuZ3RoKSwgdGhpcy5hcHBlbmQoZTUuc2xpY2UoaTQsIHIzIDwgMCA/IGU1Lmxlbmd0aCA6IHIzKSksIHIzIDwgMCkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGlmICh0aGlzLmxpbmVCcmVhaygpLCBvNCA+IDEpCiAgICAgICAgICBmb3IgKGxldCBoMTAgb2YgdGhpcy5wb2ludHMpCiAgICAgICAgICAgIGgxMC5ub2RlID09IHQ0ICYmIGgxMC5wb3MgPiB0aGlzLnRleHQubGVuZ3RoICYmIChoMTAucG9zIC09IG80IC0gMSk7CiAgICAgICAgaTQgPSByMyArIG80OwogICAgICB9CiAgICB9CiAgICByZWFkTm9kZSh0NCkgewogICAgICBpZiAodDQuY21JZ25vcmUpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgZTUgPSBBMy5nZXQodDQpLCBpNCA9IGU1ICYmIGU1Lm92ZXJyaWRlRE9NVGV4dDsKICAgICAgaWYgKGk0ICE9IG51bGwpIHsKICAgICAgICB0aGlzLmZpbmRQb2ludEluc2lkZSh0NCwgaTQubGVuZ3RoKTsKICAgICAgICBmb3IgKGxldCBuOCA9IGk0Lml0ZXIoKTsgIW44Lm5leHQoKS5kb25lOyApCiAgICAgICAgICBuOC5saW5lQnJlYWsgPyB0aGlzLmxpbmVCcmVhaygpIDogdGhpcy5hcHBlbmQobjgudmFsdWUpOwogICAgICB9IGVsc2UKICAgICAgICB0NC5ub2RlVHlwZSA9PSAzID8gdGhpcy5yZWFkVGV4dE5vZGUodDQpIDogdDQubm9kZU5hbWUgPT0gIkJSIiA/IHQ0Lm5leHRTaWJsaW5nICYmIHRoaXMubGluZUJyZWFrKCkgOiB0NC5ub2RlVHlwZSA9PSAxICYmIHRoaXMucmVhZFJhbmdlKHQ0LmZpcnN0Q2hpbGQsIG51bGwpOwogICAgfQogICAgZmluZFBvaW50QmVmb3JlKHQ0LCBlNSkgewogICAgICBmb3IgKGxldCBpNCBvZiB0aGlzLnBvaW50cykKICAgICAgICBpNC5ub2RlID09IHQ0ICYmIHQ0LmNoaWxkTm9kZXNbaTQub2Zmc2V0XSA9PSBlNSAmJiAoaTQucG9zID0gdGhpcy50ZXh0Lmxlbmd0aCk7CiAgICB9CiAgICBmaW5kUG9pbnRJbnNpZGUodDQsIGU1KSB7CiAgICAgIGZvciAobGV0IGk0IG9mIHRoaXMucG9pbnRzKQogICAgICAgICh0NC5ub2RlVHlwZSA9PSAzID8gaTQubm9kZSA9PSB0NCA6IHQ0LmNvbnRhaW5zKGk0Lm5vZGUpKSAmJiAoaTQucG9zID0gdGhpcy50ZXh0Lmxlbmd0aCArIE1hdGgubWluKGU1LCBpNC5vZmZzZXQpKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIE9pMihzOCkgewogICAgcmV0dXJuIHM4Lm5vZGVUeXBlID09IDEgJiYgL14oRElWfFB8TEl8VUx8T0x8QkxPQ0tRVU9URXxERHxEVHxIXGR8U0VDVElPTnxQUkUpJC8udGVzdChzOC5ub2RlTmFtZSk7CiAgfQogIHZhciBjZTMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUpIHsKICAgICAgdGhpcy5ub2RlID0gdDQsIHRoaXMub2Zmc2V0ID0gZTUsIHRoaXMucG9zID0gLTE7CiAgICB9CiAgfTsKICB2YXIgZmUzID0gY2xhc3MgZXh0ZW5kcyBBMyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICBzdXBlcigpLCB0aGlzLnZpZXcgPSB0NCwgdGhpcy5jb21wb3NpdGlvbkRlY28gPSBrLm5vbmUsIHRoaXMuZGVjb3JhdGlvbnMgPSBbXSwgdGhpcy5keW5hbWljRGVjb3JhdGlvbk1hcCA9IFtdLCB0aGlzLm1pbldpZHRoID0gMCwgdGhpcy5taW5XaWR0aEZyb20gPSAwLCB0aGlzLm1pbldpZHRoVG8gPSAwLCB0aGlzLmltcHJlY2lzZUFuY2hvciA9IG51bGwsIHRoaXMuaW1wcmVjaXNlSGVhZCA9IG51bGwsIHRoaXMuZm9yY2VTZWxlY3Rpb24gPSBmYWxzZSwgdGhpcy5sYXN0VXBkYXRlID0gRGF0ZS5ub3coKSwgdGhpcy5zZXRET00odDQuY29udGVudERPTSksIHRoaXMuY2hpbGRyZW4gPSBbbmV3IEgzKCldLCB0aGlzLmNoaWxkcmVuWzBdLnNldFBhcmVudCh0aGlzKSwgdGhpcy51cGRhdGVEZWNvKCksIHRoaXMudXBkYXRlSW5uZXIoW25ldyBJMigwLCAwLCAwLCB0NC5zdGF0ZS5kb2MubGVuZ3RoKV0sIDApOwogICAgfQogICAgZ2V0IGVkaXRvclZpZXcoKSB7CiAgICAgIHJldHVybiB0aGlzLnZpZXc7CiAgICB9CiAgICBnZXQgbGVuZ3RoKCkgewogICAgICByZXR1cm4gdGhpcy52aWV3LnN0YXRlLmRvYy5sZW5ndGg7CiAgICB9CiAgICB1cGRhdGUodDQpIHsKICAgICAgbGV0IGU1ID0gdDQuY2hhbmdlZFJhbmdlczsKICAgICAgdGhpcy5taW5XaWR0aCA+IDAgJiYgZTUubGVuZ3RoICYmIChlNS5ldmVyeSgoeyBmcm9tQTogbzQsIHRvQTogbDcgfSkgPT4gbDcgPCB0aGlzLm1pbldpZHRoRnJvbSB8fCBvNCA+IHRoaXMubWluV2lkdGhUbykgPyAodGhpcy5taW5XaWR0aEZyb20gPSB0NC5jaGFuZ2VzLm1hcFBvcyh0aGlzLm1pbldpZHRoRnJvbSwgMSksIHRoaXMubWluV2lkdGhUbyA9IHQ0LmNoYW5nZXMubWFwUG9zKHRoaXMubWluV2lkdGhUbywgMSkpIDogdGhpcy5taW5XaWR0aCA9IHRoaXMubWluV2lkdGhGcm9tID0gdGhpcy5taW5XaWR0aFRvID0gMCksIHRoaXMudmlldy5pbnB1dFN0YXRlLmNvbXBvc2luZyA8IDAgPyB0aGlzLmNvbXBvc2l0aW9uRGVjbyA9IGsubm9uZSA6ICh0NC50cmFuc2FjdGlvbnMubGVuZ3RoIHx8IHRoaXMuZGlydHkpICYmICh0aGlzLmNvbXBvc2l0aW9uRGVjbyA9IExuKHRoaXMudmlldywgdDQuY2hhbmdlcykpLCAoeTMuaWUgfHwgeTMuY2hyb21lKSAmJiAhdGhpcy5jb21wb3NpdGlvbkRlY28uc2l6ZSAmJiB0NCAmJiB0NC5zdGF0ZS5kb2MubGluZXMgIT0gdDQuc3RhcnRTdGF0ZS5kb2MubGluZXMgJiYgKHRoaXMuZm9yY2VTZWxlY3Rpb24gPSB0cnVlKTsKICAgICAgbGV0IGk0ID0gdGhpcy5kZWNvcmF0aW9ucywgbjggPSB0aGlzLnVwZGF0ZURlY28oKSwgcjMgPSBCbihpNCwgbjgsIHQ0LmNoYW5nZXMpOwogICAgICByZXR1cm4gZTUgPSBJMi5leHRlbmRXaXRoUmFuZ2VzKGU1LCByMyksIHRoaXMuZGlydHkgPT0gMCAmJiBlNS5sZW5ndGggPT0gMCA/IGZhbHNlIDogKHRoaXMudXBkYXRlSW5uZXIoZTUsIHQ0LnN0YXJ0U3RhdGUuZG9jLmxlbmd0aCksIHQ0LnRyYW5zYWN0aW9ucy5sZW5ndGggJiYgKHRoaXMubGFzdFVwZGF0ZSA9IERhdGUubm93KCkpLCB0cnVlKTsKICAgIH0KICAgIHVwZGF0ZUlubmVyKHQ0LCBlNSkgewogICAgICB0aGlzLnZpZXcudmlld1N0YXRlLm11c3RNZWFzdXJlQ29udGVudCA9IHRydWUsIHRoaXMudXBkYXRlQ2hpbGRyZW4odDQsIGU1KTsKICAgICAgbGV0IHsgb2JzZXJ2ZXI6IGk0IH0gPSB0aGlzLnZpZXc7CiAgICAgIGk0Lmlnbm9yZSgoKSA9PiB7CiAgICAgICAgdGhpcy5kb20uc3R5bGUuaGVpZ2h0ID0gdGhpcy52aWV3LnZpZXdTdGF0ZS5jb250ZW50SGVpZ2h0ICsgInB4IiwgdGhpcy5kb20uc3R5bGUuZmxleEJhc2lzID0gdGhpcy5taW5XaWR0aCA/IHRoaXMubWluV2lkdGggKyAicHgiIDogIiI7CiAgICAgICAgbGV0IHIzID0geTMuY2hyb21lIHx8IHkzLmlvcyA/IHsgbm9kZTogaTQuc2VsZWN0aW9uUmFuZ2UuZm9jdXNOb2RlLCB3cml0dGVuOiBmYWxzZSB9IDogdm9pZCAwOwogICAgICAgIHRoaXMuc3luYyhyMyksIHRoaXMuZGlydHkgPSAwLCByMyAmJiAocjMud3JpdHRlbiB8fCBpNC5zZWxlY3Rpb25SYW5nZS5mb2N1c05vZGUgIT0gcjMubm9kZSkgJiYgKHRoaXMuZm9yY2VTZWxlY3Rpb24gPSB0cnVlKSwgdGhpcy5kb20uc3R5bGUuaGVpZ2h0ID0gIiI7CiAgICAgIH0pOwogICAgICBsZXQgbjggPSBbXTsKICAgICAgaWYgKHRoaXMudmlldy52aWV3cG9ydC5mcm9tIHx8IHRoaXMudmlldy52aWV3cG9ydC50byA8IHRoaXMudmlldy5zdGF0ZS5kb2MubGVuZ3RoKQogICAgICAgIGZvciAobGV0IHIzIG9mIHRoaXMuY2hpbGRyZW4pCiAgICAgICAgICByMyBpbnN0YW5jZW9mIFkzICYmIHIzLndpZGdldCBpbnN0YW5jZW9mIGRlNCAmJiBuOC5wdXNoKHIzLmRvbSk7CiAgICAgIGk0LnVwZGF0ZUdhcHMobjgpOwogICAgfQogICAgdXBkYXRlQ2hpbGRyZW4odDQsIGU1KSB7CiAgICAgIGxldCBpNCA9IHRoaXMuY2hpbGRDdXJzb3IoZTUpOwogICAgICBmb3IgKGxldCBuOCA9IHQ0Lmxlbmd0aCAtIDE7IDsgbjgtLSkgewogICAgICAgIGxldCByMyA9IG44ID49IDAgPyB0NFtuOF0gOiBudWxsOwogICAgICAgIGlmICghcjMpCiAgICAgICAgICBicmVhazsKICAgICAgICBsZXQgeyBmcm9tQTogbzQsIHRvQTogbDcsIGZyb21COiBoMTAsIHRvQjogYTQgfSA9IHIzLCB7IGNvbnRlbnQ6IGMxNywgYnJlYWtBdFN0YXJ0OiBmMTEsIG9wZW5TdGFydDogZDE1LCBvcGVuRW5kOiB1MTEgfSA9IEZ0LmJ1aWxkKHRoaXMudmlldy5zdGF0ZS5kb2MsIGgxMCwgYTQsIHRoaXMuZGVjb3JhdGlvbnMsIHRoaXMuZHluYW1pY0RlY29yYXRpb25NYXApLCB7IGk6IHAxOCwgb2ZmOiBiMjUgfSA9IGk0LmZpbmRQb3MobDcsIDEpLCB7IGk6IG0yMywgb2ZmOiBnMTIgfSA9IGk0LmZpbmRQb3MobzQsIC0xKTsKICAgICAgICBtcyh0aGlzLCBtMjMsIGcxMiwgcDE4LCBiMjUsIGMxNywgZjExLCBkMTUsIHUxMSk7CiAgICAgIH0KICAgIH0KICAgIHVwZGF0ZVNlbGVjdGlvbih0NCA9IGZhbHNlLCBlNSA9IGZhbHNlKSB7CiAgICAgIGlmICgodDQgfHwgIXRoaXMudmlldy5vYnNlcnZlci5zZWxlY3Rpb25SYW5nZS5mb2N1c05vZGUpICYmIHRoaXMudmlldy5vYnNlcnZlci5yZWFkU2VsZWN0aW9uUmFuZ2UoKSwgIShlNSB8fCB0aGlzLm1heUNvbnRyb2xTZWxlY3Rpb24oKSkpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgaTQgPSB0aGlzLmZvcmNlU2VsZWN0aW9uOwogICAgICB0aGlzLmZvcmNlU2VsZWN0aW9uID0gZmFsc2U7CiAgICAgIGxldCBuOCA9IHRoaXMudmlldy5zdGF0ZS5zZWxlY3Rpb24ubWFpbiwgcjMgPSB0aGlzLmRvbUF0UG9zKG44LmFuY2hvciksIG80ID0gbjguZW1wdHkgPyByMyA6IHRoaXMuZG9tQXRQb3MobjguaGVhZCk7CiAgICAgIGlmICh5My5nZWNrbyAmJiBuOC5lbXB0eSAmJiBSbihyMykpIHsKICAgICAgICBsZXQgaDEwID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwogICAgICAgIHRoaXMudmlldy5vYnNlcnZlci5pZ25vcmUoKCkgPT4gcjMubm9kZS5pbnNlcnRCZWZvcmUoaDEwLCByMy5ub2RlLmNoaWxkTm9kZXNbcjMub2Zmc2V0XSB8fCBudWxsKSksIHIzID0gbzQgPSBuZXcgQjMoaDEwLCAwKSwgaTQgPSB0cnVlOwogICAgICB9CiAgICAgIGxldCBsNyA9IHRoaXMudmlldy5vYnNlcnZlci5zZWxlY3Rpb25SYW5nZTsKICAgICAgKGk0IHx8ICFsNy5mb2N1c05vZGUgfHwgIW5lMyhyMy5ub2RlLCByMy5vZmZzZXQsIGw3LmFuY2hvck5vZGUsIGw3LmFuY2hvck9mZnNldCkgfHwgIW5lMyhvNC5ub2RlLCBvNC5vZmZzZXQsIGw3LmZvY3VzTm9kZSwgbDcuZm9jdXNPZmZzZXQpKSAmJiAodGhpcy52aWV3Lm9ic2VydmVyLmlnbm9yZSgoKSA9PiB7CiAgICAgICAgeTMuYW5kcm9pZCAmJiB5My5jaHJvbWUgJiYgdGhpcy5kb20uY29udGFpbnMobDcuZm9jdXNOb2RlKSAmJiBQbihsNy5mb2N1c05vZGUsIHRoaXMuZG9tKSAmJiAodGhpcy5kb20uYmx1cigpLCB0aGlzLmRvbS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSkpOwogICAgICAgIGxldCBoMTAgPSBzZTModGhpcy52aWV3LnJvb3QpOwogICAgICAgIGlmIChoMTApCiAgICAgICAgICBpZiAobjguZW1wdHkpIHsKICAgICAgICAgICAgaWYgKHkzLmdlY2tvKSB7CiAgICAgICAgICAgICAgbGV0IGE0ID0gRW4ocjMubm9kZSwgcjMub2Zmc2V0KTsKICAgICAgICAgICAgICBpZiAoYTQgJiYgYTQgIT0gMykgewogICAgICAgICAgICAgICAgbGV0IGMxNyA9IEZzKHIzLm5vZGUsIHIzLm9mZnNldCwgYTQgPT0gMSA/IDEgOiAtMSk7CiAgICAgICAgICAgICAgICBjMTcgJiYgKHIzID0gbmV3IEIzKGMxNywgYTQgPT0gMSA/IDAgOiBjMTcubm9kZVZhbHVlLmxlbmd0aCkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBoMTAuY29sbGFwc2UocjMubm9kZSwgcjMub2Zmc2V0KSwgbjguYmlkaUxldmVsICE9IG51bGwgJiYgbDcuY3Vyc29yQmlkaUxldmVsICE9IG51bGwgJiYgKGw3LmN1cnNvckJpZGlMZXZlbCA9IG44LmJpZGlMZXZlbCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGgxMC5leHRlbmQpIHsKICAgICAgICAgICAgaDEwLmNvbGxhcHNlKHIzLm5vZGUsIHIzLm9mZnNldCk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgaDEwLmV4dGVuZChvNC5ub2RlLCBvNC5vZmZzZXQpOwogICAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGV0IGE0ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgbjguYW5jaG9yID4gbjguaGVhZCAmJiAoW3IzLCBvNF0gPSBbbzQsIHIzXSksIGE0LnNldEVuZChvNC5ub2RlLCBvNC5vZmZzZXQpLCBhNC5zZXRTdGFydChyMy5ub2RlLCByMy5vZmZzZXQpLCBoMTAucmVtb3ZlQWxsUmFuZ2VzKCksIGgxMC5hZGRSYW5nZShhNCk7CiAgICAgICAgICB9CiAgICAgIH0pLCB0aGlzLnZpZXcub2JzZXJ2ZXIuc2V0U2VsZWN0aW9uUmFuZ2UocjMsIG80KSksIHRoaXMuaW1wcmVjaXNlQW5jaG9yID0gcjMucHJlY2lzZSA/IG51bGwgOiBuZXcgQjMobDcuYW5jaG9yTm9kZSwgbDcuYW5jaG9yT2Zmc2V0KSwgdGhpcy5pbXByZWNpc2VIZWFkID0gbzQucHJlY2lzZSA/IG51bGwgOiBuZXcgQjMobDcuZm9jdXNOb2RlLCBsNy5mb2N1c09mZnNldCk7CiAgICB9CiAgICBlbmZvcmNlQ3Vyc29yQXNzb2MoKSB7CiAgICAgIGlmICh0aGlzLmNvbXBvc2l0aW9uRGVjby5zaXplKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IHQ0ID0gdGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbi5tYWluLCBlNSA9IHNlMyh0aGlzLnZpZXcucm9vdCk7CiAgICAgIGlmICghZTUgfHwgIXQ0LmVtcHR5IHx8ICF0NC5hc3NvYyB8fCAhZTUubW9kaWZ5KQogICAgICAgIHJldHVybjsKICAgICAgbGV0IGk0ID0gSDMuZmluZCh0aGlzLCB0NC5oZWFkKTsKICAgICAgaWYgKCFpNCkKICAgICAgICByZXR1cm47CiAgICAgIGxldCBuOCA9IGk0LnBvc0F0U3RhcnQ7CiAgICAgIGlmICh0NC5oZWFkID09IG44IHx8IHQ0LmhlYWQgPT0gbjggKyBpNC5sZW5ndGgpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgcjMgPSB0aGlzLmNvb3Jkc0F0KHQ0LmhlYWQsIC0xKSwgbzQgPSB0aGlzLmNvb3Jkc0F0KHQ0LmhlYWQsIDEpOwogICAgICBpZiAoIXIzIHx8ICFvNCB8fCByMy5ib3R0b20gPiBvNC50b3ApCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgbDcgPSB0aGlzLmRvbUF0UG9zKHQ0LmhlYWQgKyB0NC5hc3NvYyk7CiAgICAgIGU1LmNvbGxhcHNlKGw3Lm5vZGUsIGw3Lm9mZnNldCksIGU1Lm1vZGlmeSgibW92ZSIsIHQ0LmFzc29jIDwgMCA/ICJmb3J3YXJkIiA6ICJiYWNrd2FyZCIsICJsaW5lYm91bmRhcnkiKTsKICAgIH0KICAgIG1heUNvbnRyb2xTZWxlY3Rpb24oKSB7CiAgICAgIGxldCB0NCA9IHRoaXMudmlldy5yb290LmFjdGl2ZUVsZW1lbnQ7CiAgICAgIHJldHVybiB0NCA9PSB0aGlzLmRvbSB8fCBadCh0aGlzLmRvbSwgdGhpcy52aWV3Lm9ic2VydmVyLnNlbGVjdGlvblJhbmdlKSAmJiAhKHQ0ICYmIHRoaXMuZG9tLmNvbnRhaW5zKHQ0KSk7CiAgICB9CiAgICBuZWFyZXN0KHQ0KSB7CiAgICAgIGZvciAobGV0IGU1ID0gdDQ7IGU1OyApIHsKICAgICAgICBsZXQgaTQgPSBBMy5nZXQoZTUpOwogICAgICAgIGlmIChpNCAmJiBpNC5yb290VmlldyA9PSB0aGlzKQogICAgICAgICAgcmV0dXJuIGk0OwogICAgICAgIGU1ID0gZTUucGFyZW50Tm9kZTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHBvc0Zyb21ET00odDQsIGU1KSB7CiAgICAgIGxldCBpNCA9IHRoaXMubmVhcmVzdCh0NCk7CiAgICAgIGlmICghaTQpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBmaW5kIHBvc2l0aW9uIGZvciBhIERPTSBwb3NpdGlvbiBvdXRzaWRlIG9mIHRoZSBkb2N1bWVudCIpOwogICAgICByZXR1cm4gaTQubG9jYWxQb3NGcm9tRE9NKHQ0LCBlNSkgKyBpNC5wb3NBdFN0YXJ0OwogICAgfQogICAgZG9tQXRQb3ModDQpIHsKICAgICAgbGV0IHsgaTogZTUsIG9mZjogaTQgfSA9IHRoaXMuY2hpbGRDdXJzb3IoKS5maW5kUG9zKHQ0LCAtMSk7CiAgICAgIGZvciAoOyBlNSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgKSB7CiAgICAgICAgbGV0IG44ID0gdGhpcy5jaGlsZHJlbltlNV07CiAgICAgICAgaWYgKGk0IDwgbjgubGVuZ3RoIHx8IG44IGluc3RhbmNlb2YgSDMpCiAgICAgICAgICBicmVhazsKICAgICAgICBlNSsrLCBpNCA9IDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bZTVdLmRvbUF0UG9zKGk0KTsKICAgIH0KICAgIGNvb3Jkc0F0KHQ0LCBlNSkgewogICAgICBmb3IgKGxldCBpNCA9IHRoaXMubGVuZ3RoLCBuOCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgOyBuOC0tKSB7CiAgICAgICAgbGV0IHIzID0gdGhpcy5jaGlsZHJlbltuOF0sIG80ID0gaTQgLSByMy5icmVha0FmdGVyIC0gcjMubGVuZ3RoOwogICAgICAgIGlmICh0NCA+IG80IHx8IHQ0ID09IG80ICYmIHIzLnR5cGUgIT0gVDMuV2lkZ2V0QmVmb3JlICYmIHIzLnR5cGUgIT0gVDMuV2lkZ2V0QWZ0ZXIgJiYgKCFuOCB8fCBlNSA9PSAyIHx8IHRoaXMuY2hpbGRyZW5bbjggLSAxXS5icmVha0FmdGVyIHx8IHRoaXMuY2hpbGRyZW5bbjggLSAxXS50eXBlID09IFQzLldpZGdldEJlZm9yZSAmJiBlNSA+IC0yKSkKICAgICAgICAgIHJldHVybiByMy5jb29yZHNBdCh0NCAtIG80LCBlNSk7CiAgICAgICAgaTQgPSBvNDsKICAgICAgfQogICAgfQogICAgbWVhc3VyZVZpc2libGVMaW5lSGVpZ2h0cyh0NCkgewogICAgICBsZXQgZTUgPSBbXSwgeyBmcm9tOiBpNCwgdG86IG44IH0gPSB0NCwgcjMgPSB0aGlzLnZpZXcuY29udGVudERPTS5jbGllbnRXaWR0aCwgbzQgPSByMyA+IE1hdGgubWF4KHRoaXMudmlldy5zY3JvbGxET00uY2xpZW50V2lkdGgsIHRoaXMubWluV2lkdGgpICsgMSwgbDcgPSAtMSwgaDEwID0gdGhpcy52aWV3LnRleHREaXJlY3Rpb24gPT0gUjIuTFRSOwogICAgICBmb3IgKGxldCBhNCA9IDAsIGMxNyA9IDA7IGMxNyA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBjMTcrKykgewogICAgICAgIGxldCBmMTEgPSB0aGlzLmNoaWxkcmVuW2MxN10sIGQxNSA9IGE0ICsgZjExLmxlbmd0aDsKICAgICAgICBpZiAoZDE1ID4gbjgpCiAgICAgICAgICBicmVhazsKICAgICAgICBpZiAoYTQgPj0gaTQpIHsKICAgICAgICAgIGxldCB1MTEgPSBmMTEuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgaWYgKGU1LnB1c2godTExLmhlaWdodCksIG80KSB7CiAgICAgICAgICAgIGxldCBwMTggPSBmMTEuZG9tLmxhc3RDaGlsZCwgYjI1ID0gcDE4ID8gVnQocDE4KSA6IFtdOwogICAgICAgICAgICBpZiAoYjI1Lmxlbmd0aCkgewogICAgICAgICAgICAgIGxldCBtMjMgPSBiMjVbYjI1Lmxlbmd0aCAtIDFdLCBnMTIgPSBoMTAgPyBtMjMucmlnaHQgLSB1MTEubGVmdCA6IHUxMS5yaWdodCAtIG0yMy5sZWZ0OwogICAgICAgICAgICAgIGcxMiA+IGw3ICYmIChsNyA9IGcxMiwgdGhpcy5taW5XaWR0aCA9IHIzLCB0aGlzLm1pbldpZHRoRnJvbSA9IGE0LCB0aGlzLm1pbldpZHRoVG8gPSBkMTUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGE0ID0gZDE1ICsgZjExLmJyZWFrQWZ0ZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIGU1OwogICAgfQogICAgdGV4dERpcmVjdGlvbkF0KHQ0KSB7CiAgICAgIGxldCB7IGk6IGU1IH0gPSB0aGlzLmNoaWxkUG9zKHQ0LCAxKTsKICAgICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUodGhpcy5jaGlsZHJlbltlNV0uZG9tKS5kaXJlY3Rpb24gPT0gInJ0bCIgPyBSMi5SVEwgOiBSMi5MVFI7CiAgICB9CiAgICBtZWFzdXJlVGV4dFNpemUoKSB7CiAgICAgIGZvciAobGV0IG44IG9mIHRoaXMuY2hpbGRyZW4pCiAgICAgICAgaWYgKG44IGluc3RhbmNlb2YgSDMpIHsKICAgICAgICAgIGxldCByMyA9IG44Lm1lYXN1cmVUZXh0U2l6ZSgpOwogICAgICAgICAgaWYgKHIzKQogICAgICAgICAgICByZXR1cm4gcjM7CiAgICAgICAgfQogICAgICBsZXQgdDQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgZTUsIGk0OwogICAgICByZXR1cm4gdDQuY2xhc3NOYW1lID0gImNtLWxpbmUiLCB0NC5zdHlsZS53aWR0aCA9ICI5OTk5OXB4IiwgdDQudGV4dENvbnRlbnQgPSAiYWJjIGRlZiBnaGkgamtsIG1ubyBwcXIgc3R1IiwgdGhpcy52aWV3Lm9ic2VydmVyLmlnbm9yZSgoKSA9PiB7CiAgICAgICAgdGhpcy5kb20uYXBwZW5kQ2hpbGQodDQpOwogICAgICAgIGxldCBuOCA9IFZ0KHQ0LmZpcnN0Q2hpbGQpWzBdOwogICAgICAgIGU1ID0gdDQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LCBpNCA9IG44ID8gbjgud2lkdGggLyAyNyA6IDcsIHQ0LnJlbW92ZSgpOwogICAgICB9KSwgeyBsaW5lSGVpZ2h0OiBlNSwgY2hhcldpZHRoOiBpNCB9OwogICAgfQogICAgY2hpbGRDdXJzb3IodDQgPSB0aGlzLmxlbmd0aCkgewogICAgICBsZXQgZTUgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsKICAgICAgcmV0dXJuIGU1ICYmICh0NCAtPSB0aGlzLmNoaWxkcmVuWy0tZTVdLmxlbmd0aCksIG5ldyBvZTIodGhpcy5jaGlsZHJlbiwgdDQsIGU1KTsKICAgIH0KICAgIGNvbXB1dGVCbG9ja0dhcERlY28oKSB7CiAgICAgIGxldCB0NCA9IFtdLCBlNSA9IHRoaXMudmlldy52aWV3U3RhdGU7CiAgICAgIGZvciAobGV0IGk0ID0gMCwgbjggPSAwOyA7IG44KyspIHsKICAgICAgICBsZXQgcjMgPSBuOCA9PSBlNS52aWV3cG9ydHMubGVuZ3RoID8gbnVsbCA6IGU1LnZpZXdwb3J0c1tuOF0sIG80ID0gcjMgPyByMy5mcm9tIC0gMSA6IHRoaXMubGVuZ3RoOwogICAgICAgIGlmIChvNCA+IGk0KSB7CiAgICAgICAgICBsZXQgbDcgPSBlNS5saW5lQmxvY2tBdChvNCkuYm90dG9tIC0gZTUubGluZUJsb2NrQXQoaTQpLnRvcDsKICAgICAgICAgIHQ0LnB1c2goay5yZXBsYWNlKHsgd2lkZ2V0OiBuZXcgZGU0KGw3KSwgYmxvY2s6IHRydWUsIGluY2x1c2l2ZTogdHJ1ZSwgaXNCbG9ja0dhcDogdHJ1ZSB9KS5yYW5nZShpNCwgbzQpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFyMykKICAgICAgICAgIGJyZWFrOwogICAgICAgIGk0ID0gcjMudG8gKyAxOwogICAgICB9CiAgICAgIHJldHVybiBrLnNldCh0NCk7CiAgICB9CiAgICB1cGRhdGVEZWNvKCkgewogICAgICBsZXQgdDQgPSB0aGlzLnZpZXcuc3RhdGUuZmFjZXQoenQpLm1hcCgoZTUsIGk0KSA9PiAodGhpcy5keW5hbWljRGVjb3JhdGlvbk1hcFtpNF0gPSB0eXBlb2YgZTUgPT0gImZ1bmN0aW9uIikgPyBlNSh0aGlzLnZpZXcpIDogZTUpOwogICAgICBmb3IgKGxldCBlNSA9IHQ0Lmxlbmd0aDsgZTUgPCB0NC5sZW5ndGggKyAzOyBlNSsrKQogICAgICAgIHRoaXMuZHluYW1pY0RlY29yYXRpb25NYXBbZTVdID0gZmFsc2U7CiAgICAgIHJldHVybiB0aGlzLmRlY29yYXRpb25zID0gWy4uLnQ0LCB0aGlzLmNvbXBvc2l0aW9uRGVjbywgdGhpcy5jb21wdXRlQmxvY2tHYXBEZWNvKCksIHRoaXMudmlldy52aWV3U3RhdGUubGluZUdhcERlY29dOwogICAgfQogICAgc2Nyb2xsSW50b1ZpZXcodDQpIHsKICAgICAgbGV0IHsgcmFuZ2U6IGU1IH0gPSB0NCwgaTQgPSB0aGlzLmNvb3Jkc0F0KGU1LmhlYWQsIGU1LmVtcHR5ID8gZTUuYXNzb2MgOiBlNS5oZWFkID4gZTUuYW5jaG9yID8gLTEgOiAxKSwgbjg7CiAgICAgIGlmICghaTQpCiAgICAgICAgcmV0dXJuOwogICAgICAhZTUuZW1wdHkgJiYgKG44ID0gdGhpcy5jb29yZHNBdChlNS5hbmNob3IsIGU1LmFuY2hvciA+IGU1LmhlYWQgPyAtMSA6IDEpKSAmJiAoaTQgPSB7IGxlZnQ6IE1hdGgubWluKGk0LmxlZnQsIG44LmxlZnQpLCB0b3A6IE1hdGgubWluKGk0LnRvcCwgbjgudG9wKSwgcmlnaHQ6IE1hdGgubWF4KGk0LnJpZ2h0LCBuOC5yaWdodCksIGJvdHRvbTogTWF0aC5tYXgoaTQuYm90dG9tLCBuOC5ib3R0b20pIH0pOwogICAgICBsZXQgcjMgPSAwLCBvNCA9IDAsIGw3ID0gMCwgaDEwID0gMDsKICAgICAgZm9yIChsZXQgYzE3IG9mIHRoaXMudmlldy5zdGF0ZS5mYWNldChFcykubWFwKChmMTEpID0+IGYxMSh0aGlzLnZpZXcpKSkKICAgICAgICBpZiAoYzE3KSB7CiAgICAgICAgICBsZXQgeyBsZWZ0OiBmMTEsIHJpZ2h0OiBkMTUsIHRvcDogdTExLCBib3R0b206IHAxOCB9ID0gYzE3OwogICAgICAgICAgZjExICE9IG51bGwgJiYgKHIzID0gTWF0aC5tYXgocjMsIGYxMSkpLCBkMTUgIT0gbnVsbCAmJiAobzQgPSBNYXRoLm1heChvNCwgZDE1KSksIHUxMSAhPSBudWxsICYmIChsNyA9IE1hdGgubWF4KGw3LCB1MTEpKSwgcDE4ICE9IG51bGwgJiYgKGgxMCA9IE1hdGgubWF4KGgxMCwgcDE4KSk7CiAgICAgICAgfQogICAgICBsZXQgYTQgPSB7IGxlZnQ6IGk0LmxlZnQgLSByMywgdG9wOiBpNC50b3AgLSBsNywgcmlnaHQ6IGk0LnJpZ2h0ICsgbzQsIGJvdHRvbTogaTQuYm90dG9tICsgaDEwIH07CiAgICAgIHluKHRoaXMudmlldy5zY3JvbGxET00sIGE0LCBlNS5oZWFkIDwgZTUuYW5jaG9yID8gLTEgOiAxLCB0NC54LCB0NC55LCB0NC54TWFyZ2luLCB0NC55TWFyZ2luLCB0aGlzLnZpZXcudGV4dERpcmVjdGlvbiA9PSBSMi5MVFIpOwogICAgfQogIH07CiAgZnVuY3Rpb24gUm4oczgpIHsKICAgIHJldHVybiBzOC5ub2RlLm5vZGVUeXBlID09IDEgJiYgczgubm9kZS5maXJzdENoaWxkICYmIChzOC5vZmZzZXQgPT0gMCB8fCBzOC5ub2RlLmNoaWxkTm9kZXNbczgub2Zmc2V0IC0gMV0uY29udGVudEVkaXRhYmxlID09ICJmYWxzZSIpICYmIChzOC5vZmZzZXQgPT0gczgubm9kZS5jaGlsZE5vZGVzLmxlbmd0aCB8fCBzOC5ub2RlLmNoaWxkTm9kZXNbczgub2Zmc2V0XS5jb250ZW50RWRpdGFibGUgPT0gImZhbHNlIik7CiAgfQogIHZhciBkZTQgPSBjbGFzcyBleHRlbmRzIFg0IHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHN1cGVyKCksIHRoaXMuaGVpZ2h0ID0gdDQ7CiAgICB9CiAgICB0b0RPTSgpIHsKICAgICAgbGV0IHQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURPTSh0NCksIHQ0OwogICAgfQogICAgZXEodDQpIHsKICAgICAgcmV0dXJuIHQ0LmhlaWdodCA9PSB0aGlzLmhlaWdodDsKICAgIH0KICAgIHVwZGF0ZURPTSh0NCkgewogICAgICByZXR1cm4gdDQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyAicHgiLCB0cnVlOwogICAgfQogICAgZ2V0IGVzdGltYXRlZEhlaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0OwogICAgfQogIH07CiAgZnVuY3Rpb24gV3MoczgpIHsKICAgIGxldCB0NCA9IHM4Lm9ic2VydmVyLnNlbGVjdGlvblJhbmdlLCBlNSA9IHQ0LmZvY3VzTm9kZSAmJiBGcyh0NC5mb2N1c05vZGUsIHQ0LmZvY3VzT2Zmc2V0LCAwKTsKICAgIGlmICghZTUpCiAgICAgIHJldHVybiBudWxsOwogICAgbGV0IGk0ID0gczguZG9jVmlldy5uZWFyZXN0KGU1KTsKICAgIGlmICghaTQpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKGk0IGluc3RhbmNlb2YgSDMpIHsKICAgICAgbGV0IG44ID0gZTU7CiAgICAgIGZvciAoOyBuOC5wYXJlbnROb2RlICE9IGk0LmRvbTsgKQogICAgICAgIG44ID0gbjgucGFyZW50Tm9kZTsKICAgICAgbGV0IHIzID0gbjgucHJldmlvdXNTaWJsaW5nOwogICAgICBmb3IgKDsgcjMgJiYgIUEzLmdldChyMyk7ICkKICAgICAgICByMyA9IHIzLnByZXZpb3VzU2libGluZzsKICAgICAgbGV0IG80ID0gcjMgPyBBMy5nZXQocjMpLnBvc0F0RW5kIDogaTQucG9zQXRTdGFydDsKICAgICAgcmV0dXJuIHsgZnJvbTogbzQsIHRvOiBvNCwgbm9kZTogbjgsIHRleHQ6IGU1IH07CiAgICB9IGVsc2UgewogICAgICBmb3IgKDsgOyApIHsKICAgICAgICBsZXQgeyBwYXJlbnQ6IHIzIH0gPSBpNDsKICAgICAgICBpZiAoIXIzKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKHIzIGluc3RhbmNlb2YgSDMpCiAgICAgICAgICBicmVhazsKICAgICAgICBpNCA9IHIzOwogICAgICB9CiAgICAgIGxldCBuOCA9IGk0LnBvc0F0U3RhcnQ7CiAgICAgIHJldHVybiB7IGZyb206IG44LCB0bzogbjggKyBpNC5sZW5ndGgsIG5vZGU6IGk0LmRvbSwgdGV4dDogZTUgfTsKICAgIH0KICB9CiAgZnVuY3Rpb24gTG4oczgsIHQ0KSB7CiAgICBsZXQgZTUgPSBXcyhzOCk7CiAgICBpZiAoIWU1KQogICAgICByZXR1cm4gay5ub25lOwogICAgbGV0IHsgZnJvbTogaTQsIHRvOiBuOCwgbm9kZTogcjMsIHRleHQ6IG80IH0gPSBlNSwgbDcgPSB0NC5tYXBQb3MoaTQsIDEpLCBoMTAgPSBNYXRoLm1heChsNywgdDQubWFwUG9zKG44LCAtMSkpLCB7IHN0YXRlOiBhNCB9ID0gczgsIGMxNyA9IHIzLm5vZGVUeXBlID09IDMgPyByMy5ub2RlVmFsdWUgOiBuZXcgYWUzKFtdLCBhNCkucmVhZFJhbmdlKHIzLmZpcnN0Q2hpbGQsIG51bGwpLnRleHQ7CiAgICBpZiAoaDEwIC0gbDcgPCBjMTcubGVuZ3RoKQogICAgICBpZiAoYTQuZG9jLnNsaWNlU3RyaW5nKGw3LCBNYXRoLm1pbihhNC5kb2MubGVuZ3RoLCBsNyArIGMxNy5sZW5ndGgpLCBzdDIpID09IGMxNykKICAgICAgICBoMTAgPSBsNyArIGMxNy5sZW5ndGg7CiAgICAgIGVsc2UgaWYgKGE0LmRvYy5zbGljZVN0cmluZyhNYXRoLm1heCgwLCBoMTAgLSBjMTcubGVuZ3RoKSwgaDEwLCBzdDIpID09IGMxNykKICAgICAgICBsNyA9IGgxMCAtIGMxNy5sZW5ndGg7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gay5ub25lOwogICAgZWxzZSBpZiAoYTQuZG9jLnNsaWNlU3RyaW5nKGw3LCBoMTAsIHN0MikgIT0gYzE3KQogICAgICByZXR1cm4gay5ub25lOwogICAgbGV0IGYxMSA9IEEzLmdldChyMyk7CiAgICByZXR1cm4gZjExIGluc3RhbmNlb2YgbGUzID8gZjExID0gZjExLndpZGdldC50b3BWaWV3IDogZjExICYmIChmMTEucGFyZW50ID0gbnVsbCksIGsuc2V0KGsucmVwbGFjZSh7IHdpZGdldDogbmV3IGplMyhyMywgbzQsIGYxMSksIGluY2x1c2l2ZTogdHJ1ZSB9KS5yYW5nZShsNywgaDEwKSk7CiAgfQogIHZhciBqZTMgPSBjbGFzcyBleHRlbmRzIFg0IHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgaTQpIHsKICAgICAgc3VwZXIoKSwgdGhpcy50b3AgPSB0NCwgdGhpcy50ZXh0ID0gZTUsIHRoaXMudG9wVmlldyA9IGk0OwogICAgfQogICAgZXEodDQpIHsKICAgICAgcmV0dXJuIHRoaXMudG9wID09IHQ0LnRvcCAmJiB0aGlzLnRleHQgPT0gdDQudGV4dDsKICAgIH0KICAgIHRvRE9NKCkgewogICAgICByZXR1cm4gdGhpcy50b3A7CiAgICB9CiAgICBpZ25vcmVFdmVudCgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZ2V0IGN1c3RvbVZpZXcoKSB7CiAgICAgIHJldHVybiBsZTM7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBGcyhzOCwgdDQsIGU1KSB7CiAgICBmb3IgKDsgOyApIHsKICAgICAgaWYgKHM4Lm5vZGVUeXBlID09IDMpCiAgICAgICAgcmV0dXJuIHM4OwogICAgICBpZiAoczgubm9kZVR5cGUgPT0gMSAmJiB0NCA+IDAgJiYgZTUgPD0gMCkKICAgICAgICBzOCA9IHM4LmNoaWxkTm9kZXNbdDQgLSAxXSwgdDQgPSBXdChzOCk7CiAgICAgIGVsc2UgaWYgKHM4Lm5vZGVUeXBlID09IDEgJiYgdDQgPCBzOC5jaGlsZE5vZGVzLmxlbmd0aCAmJiBlNSA+PSAwKQogICAgICAgIHM4ID0gczguY2hpbGROb2Rlc1t0NF0sIHQ0ID0gMDsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KICBmdW5jdGlvbiBFbihzOCwgdDQpIHsKICAgIHJldHVybiBzOC5ub2RlVHlwZSAhPSAxID8gMCA6ICh0NCAmJiBzOC5jaGlsZE5vZGVzW3Q0IC0gMV0uY29udGVudEVkaXRhYmxlID09ICJmYWxzZSIgPyAxIDogMCkgfCAodDQgPCBzOC5jaGlsZE5vZGVzLmxlbmd0aCAmJiBzOC5jaGlsZE5vZGVzW3Q0XS5jb250ZW50RWRpdGFibGUgPT0gImZhbHNlIiA/IDIgOiAwKTsKICB9CiAgdmFyIF9lNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aGlzLmNoYW5nZXMgPSBbXTsKICAgIH0KICAgIGNvbXBhcmVSYW5nZSh0NCwgZTUpIHsKICAgICAgemUyKHQ0LCBlNSwgdGhpcy5jaGFuZ2VzKTsKICAgIH0KICAgIGNvbXBhcmVQb2ludCh0NCwgZTUpIHsKICAgICAgemUyKHQ0LCBlNSwgdGhpcy5jaGFuZ2VzKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEJuKHM4LCB0NCwgZTUpIHsKICAgIGxldCBpNCA9IG5ldyBfZTQoKTsKICAgIHJldHVybiBQLmNvbXBhcmUoczgsIHQ0LCBlNSwgaTQpLCBpNC5jaGFuZ2VzOwogIH0KICBmdW5jdGlvbiBQbihzOCwgdDQpIHsKICAgIGZvciAobGV0IGU1ID0gczg7IGU1ICYmIGU1ICE9IHQ0OyBlNSA9IGU1LmFzc2lnbmVkU2xvdCB8fCBlNS5wYXJlbnROb2RlKQogICAgICBpZiAoZTUubm9kZVR5cGUgPT0gMSAmJiBlNS5jb250ZW50RWRpdGFibGUgPT0gImZhbHNlIikKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gSG4oczgsIHQ0LCBlNSA9IDEpIHsKICAgIGxldCBpNCA9IHM4LmNoYXJDYXRlZ29yaXplcih0NCksIG44ID0gczguZG9jLmxpbmVBdCh0NCksIHIzID0gdDQgLSBuOC5mcm9tOwogICAgaWYgKG44Lmxlbmd0aCA9PSAwKQogICAgICByZXR1cm4gZzIuY3Vyc29yKHQ0KTsKICAgIHIzID09IDAgPyBlNSA9IDEgOiByMyA9PSBuOC5sZW5ndGggJiYgKGU1ID0gLTEpOwogICAgbGV0IG80ID0gcjMsIGw3ID0gcjM7CiAgICBlNSA8IDAgPyBvNCA9IGllMihuOC50ZXh0LCByMywgZmFsc2UpIDogbDcgPSBpZTIobjgudGV4dCwgcjMpOwogICAgbGV0IGgxMCA9IGk0KG44LnRleHQuc2xpY2UobzQsIGw3KSk7CiAgICBmb3IgKDsgbzQgPiAwOyApIHsKICAgICAgbGV0IGE0ID0gaWUyKG44LnRleHQsIG80LCBmYWxzZSk7CiAgICAgIGlmIChpNChuOC50ZXh0LnNsaWNlKGE0LCBvNCkpICE9IGgxMCkKICAgICAgICBicmVhazsKICAgICAgbzQgPSBhNDsKICAgIH0KICAgIGZvciAoOyBsNyA8IG44Lmxlbmd0aDsgKSB7CiAgICAgIGxldCBhNCA9IGllMihuOC50ZXh0LCBsNyk7CiAgICAgIGlmIChpNChuOC50ZXh0LnNsaWNlKGw3LCBhNCkpICE9IGgxMCkKICAgICAgICBicmVhazsKICAgICAgbDcgPSBhNDsKICAgIH0KICAgIHJldHVybiBnMi5yYW5nZShvNCArIG44LmZyb20sIGw3ICsgbjguZnJvbSk7CiAgfQogIGZ1bmN0aW9uIE5uKHM4LCB0NCkgewogICAgcmV0dXJuIHQ0LmxlZnQgPiBzOCA/IHQ0LmxlZnQgLSBzOCA6IE1hdGgubWF4KDAsIHM4IC0gdDQucmlnaHQpOwogIH0KICBmdW5jdGlvbiBWbihzOCwgdDQpIHsKICAgIHJldHVybiB0NC50b3AgPiBzOCA/IHQ0LnRvcCAtIHM4IDogTWF0aC5tYXgoMCwgczggLSB0NC5ib3R0b20pOwogIH0KICBmdW5jdGlvbiBrZTQoczgsIHQ0KSB7CiAgICByZXR1cm4gczgudG9wIDwgdDQuYm90dG9tIC0gMSAmJiBzOC5ib3R0b20gPiB0NC50b3AgKyAxOwogIH0KICBmdW5jdGlvbiBSaShzOCwgdDQpIHsKICAgIHJldHVybiB0NCA8IHM4LnRvcCA/IHsgdG9wOiB0NCwgbGVmdDogczgubGVmdCwgcmlnaHQ6IHM4LnJpZ2h0LCBib3R0b206IHM4LmJvdHRvbSB9IDogczg7CiAgfQogIGZ1bmN0aW9uIExpKHM4LCB0NCkgewogICAgcmV0dXJuIHQ0ID4gczguYm90dG9tID8geyB0b3A6IHM4LnRvcCwgbGVmdDogczgubGVmdCwgcmlnaHQ6IHM4LnJpZ2h0LCBib3R0b206IHQ0IH0gOiBzODsKICB9CiAgZnVuY3Rpb24gJGUzKHM4LCB0NCwgZTUpIHsKICAgIGxldCBpNCwgbjgsIHIzLCBvNCwgbDcgPSBmYWxzZSwgaDEwLCBhNCwgYzE3LCBmMTE7CiAgICBmb3IgKGxldCBwMTggPSBzOC5maXJzdENoaWxkOyBwMTg7IHAxOCA9IHAxOC5uZXh0U2libGluZykgewogICAgICBsZXQgYjI1ID0gVnQocDE4KTsKICAgICAgZm9yIChsZXQgbTIzID0gMDsgbTIzIDwgYjI1Lmxlbmd0aDsgbTIzKyspIHsKICAgICAgICBsZXQgZzEyID0gYjI1W20yM107CiAgICAgICAgbjggJiYga2U0KG44LCBnMTIpICYmIChnMTIgPSBSaShMaShnMTIsIG44LmJvdHRvbSksIG44LnRvcCkpOwogICAgICAgIGxldCBTMjEgPSBObih0NCwgZzEyKSwgdzIxID0gVm4oZTUsIGcxMik7CiAgICAgICAgaWYgKFMyMSA9PSAwICYmIHcyMSA9PSAwKQogICAgICAgICAgcmV0dXJuIHAxOC5ub2RlVHlwZSA9PSAzID8gRWkocDE4LCB0NCwgZTUpIDogJGUzKHAxOCwgdDQsIGU1KTsKICAgICAgICAoIWk0IHx8IG80ID4gdzIxIHx8IG80ID09IHcyMSAmJiByMyA+IFMyMSkgJiYgKGk0ID0gcDE4LCBuOCA9IGcxMiwgcjMgPSBTMjEsIG80ID0gdzIxLCBsNyA9ICFTMjEgfHwgKFMyMSA+IDAgPyBtMjMgPCBiMjUubGVuZ3RoIC0gMSA6IG0yMyA+IDApKSwgUzIxID09IDAgPyBlNSA+IGcxMi5ib3R0b20gJiYgKCFjMTcgfHwgYzE3LmJvdHRvbSA8IGcxMi5ib3R0b20pID8gKGgxMCA9IHAxOCwgYzE3ID0gZzEyKSA6IGU1IDwgZzEyLnRvcCAmJiAoIWYxMSB8fCBmMTEudG9wID4gZzEyLnRvcCkgJiYgKGE0ID0gcDE4LCBmMTEgPSBnMTIpIDogYzE3ICYmIGtlNChjMTcsIGcxMikgPyBjMTcgPSBMaShjMTcsIGcxMi5ib3R0b20pIDogZjExICYmIGtlNChmMTEsIGcxMikgJiYgKGYxMSA9IFJpKGYxMSwgZzEyLnRvcCkpOwogICAgICB9CiAgICB9CiAgICBpZiAoYzE3ICYmIGMxNy5ib3R0b20gPj0gZTUgPyAoaTQgPSBoMTAsIG44ID0gYzE3KSA6IGYxMSAmJiBmMTEudG9wIDw9IGU1ICYmIChpNCA9IGE0LCBuOCA9IGYxMSksICFpNCkKICAgICAgcmV0dXJuIHsgbm9kZTogczgsIG9mZnNldDogMCB9OwogICAgbGV0IGQxNSA9IE1hdGgubWF4KG44LmxlZnQsIE1hdGgubWluKG44LnJpZ2h0LCB0NCkpOwogICAgaWYgKGk0Lm5vZGVUeXBlID09IDMpCiAgICAgIHJldHVybiBFaShpNCwgZDE1LCBlNSk7CiAgICBpZiAobDcgJiYgaTQuY29udGVudEVkaXRhYmxlICE9ICJmYWxzZSIpCiAgICAgIHJldHVybiAkZTMoaTQsIGQxNSwgZTUpOwogICAgbGV0IHUxMSA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoczguY2hpbGROb2RlcywgaTQpICsgKHQ0ID49IChuOC5sZWZ0ICsgbjgucmlnaHQpIC8gMiA/IDEgOiAwKTsKICAgIHJldHVybiB7IG5vZGU6IHM4LCBvZmZzZXQ6IHUxMSB9OwogIH0KICBmdW5jdGlvbiBFaShzOCwgdDQsIGU1KSB7CiAgICBsZXQgaTQgPSBzOC5ub2RlVmFsdWUubGVuZ3RoLCBuOCA9IC0xLCByMyA9IDFlOSwgbzQgPSAwOwogICAgZm9yIChsZXQgbDcgPSAwOyBsNyA8IGk0OyBsNysrKSB7CiAgICAgIGxldCBoMTAgPSB3dChzOCwgbDcsIGw3ICsgMSkuZ2V0Q2xpZW50UmVjdHMoKTsKICAgICAgZm9yIChsZXQgYTQgPSAwOyBhNCA8IGgxMC5sZW5ndGg7IGE0KyspIHsKICAgICAgICBsZXQgYzE3ID0gaDEwW2E0XTsKICAgICAgICBpZiAoYzE3LnRvcCA9PSBjMTcuYm90dG9tKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgbzQgfHwgKG80ID0gdDQgLSBjMTcubGVmdCk7CiAgICAgICAgbGV0IGYxMSA9IChjMTcudG9wID4gZTUgPyBjMTcudG9wIC0gZTUgOiBlNSAtIGMxNy5ib3R0b20pIC0gMTsKICAgICAgICBpZiAoYzE3LmxlZnQgLSAxIDw9IHQ0ICYmIGMxNy5yaWdodCArIDEgPj0gdDQgJiYgZjExIDwgcjMpIHsKICAgICAgICAgIGxldCBkMTUgPSB0NCA+PSAoYzE3LmxlZnQgKyBjMTcucmlnaHQpIC8gMiwgdTExID0gZDE1OwogICAgICAgICAgaWYgKCh5My5jaHJvbWUgfHwgeTMuZ2Vja28pICYmIHd0KHM4LCBsNykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA9PSBjMTcucmlnaHQgJiYgKHUxMSA9ICFkMTUpLCBmMTEgPD0gMCkKICAgICAgICAgICAgcmV0dXJuIHsgbm9kZTogczgsIG9mZnNldDogbDcgKyAodTExID8gMSA6IDApIH07CiAgICAgICAgICBuOCA9IGw3ICsgKHUxMSA/IDEgOiAwKSwgcjMgPSBmMTE7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4geyBub2RlOiBzOCwgb2Zmc2V0OiBuOCA+IC0xID8gbjggOiBvNCA+IDAgPyBzOC5ub2RlVmFsdWUubGVuZ3RoIDogMCB9OwogIH0KICBmdW5jdGlvbiB6czIoczgsIHsgeDogdDQsIHk6IGU1IH0sIGk0LCBuOCA9IC0xKSB7CiAgICB2YXIgcjM7CiAgICBsZXQgbzQgPSBzOC5jb250ZW50RE9NLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsNyA9IG80LnRvcCArIHM4LnZpZXdTdGF0ZS5wYWRkaW5nVG9wLCBoMTAsIHsgZG9jSGVpZ2h0OiBhNCB9ID0gczgudmlld1N0YXRlLCBjMTcgPSBlNSAtIGw3OwogICAgaWYgKGMxNyA8IDApCiAgICAgIHJldHVybiAwOwogICAgaWYgKGMxNyA+IGE0KQogICAgICByZXR1cm4gczguc3RhdGUuZG9jLmxlbmd0aDsKICAgIGZvciAobGV0IGcxMiA9IHM4LmRlZmF1bHRMaW5lSGVpZ2h0IC8gMiwgUzIxID0gZmFsc2U7IGgxMCA9IHM4LmVsZW1lbnRBdEhlaWdodChjMTcpLCBoMTAudHlwZSAhPSBUMy5UZXh0OyApCiAgICAgIGZvciAoOyBjMTcgPSBuOCA+IDAgPyBoMTAuYm90dG9tICsgZzEyIDogaDEwLnRvcCAtIGcxMiwgIShjMTcgPj0gMCAmJiBjMTcgPD0gYTQpOyApIHsKICAgICAgICBpZiAoUzIxKQogICAgICAgICAgcmV0dXJuIGk0ID8gbnVsbCA6IDA7CiAgICAgICAgUzIxID0gdHJ1ZSwgbjggPSAtbjg7CiAgICAgIH0KICAgIGU1ID0gbDcgKyBjMTc7CiAgICBsZXQgZjExID0gaDEwLmZyb207CiAgICBpZiAoZjExIDwgczgudmlld3BvcnQuZnJvbSkKICAgICAgcmV0dXJuIHM4LnZpZXdwb3J0LmZyb20gPT0gMCA/IDAgOiBpNCA/IG51bGwgOiBCaShzOCwgbzQsIGgxMCwgdDQsIGU1KTsKICAgIGlmIChmMTEgPiBzOC52aWV3cG9ydC50bykKICAgICAgcmV0dXJuIHM4LnZpZXdwb3J0LnRvID09IHM4LnN0YXRlLmRvYy5sZW5ndGggPyBzOC5zdGF0ZS5kb2MubGVuZ3RoIDogaTQgPyBudWxsIDogQmkoczgsIG80LCBoMTAsIHQ0LCBlNSk7CiAgICBsZXQgZDE1ID0gczguZG9tLm93bmVyRG9jdW1lbnQsIHUxMSA9IHM4LnJvb3QuZWxlbWVudEZyb21Qb2ludCA/IHM4LnJvb3QgOiBkMTUsIHAxOCA9IHUxMS5lbGVtZW50RnJvbVBvaW50KHQ0LCBlNSk7CiAgICBwMTggJiYgIXM4LmNvbnRlbnRET00uY29udGFpbnMocDE4KSAmJiAocDE4ID0gbnVsbCksIHAxOCB8fCAodDQgPSBNYXRoLm1heChvNC5sZWZ0ICsgMSwgTWF0aC5taW4obzQucmlnaHQgLSAxLCB0NCkpLCBwMTggPSB1MTEuZWxlbWVudEZyb21Qb2ludCh0NCwgZTUpLCBwMTggJiYgIXM4LmNvbnRlbnRET00uY29udGFpbnMocDE4KSAmJiAocDE4ID0gbnVsbCkpOwogICAgbGV0IGIyNSwgbTIzID0gLTE7CiAgICBpZiAocDE4ICYmICgocjMgPSBzOC5kb2NWaWV3Lm5lYXJlc3QocDE4KSkgPT09IG51bGwgfHwgcjMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIzLmlzRWRpdGFibGUpICE9IGZhbHNlKSB7CiAgICAgIGlmIChkMTUuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCkgewogICAgICAgIGxldCBnMTIgPSBkMTUuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCh0NCwgZTUpOwogICAgICAgIGcxMiAmJiAoeyBvZmZzZXROb2RlOiBiMjUsIG9mZnNldDogbTIzIH0gPSBnMTIpOwogICAgICB9IGVsc2UgaWYgKGQxNS5jYXJldFJhbmdlRnJvbVBvaW50KSB7CiAgICAgICAgbGV0IGcxMiA9IGQxNS5jYXJldFJhbmdlRnJvbVBvaW50KHQ0LCBlNSk7CiAgICAgICAgZzEyICYmICh7IHN0YXJ0Q29udGFpbmVyOiBiMjUsIHN0YXJ0T2Zmc2V0OiBtMjMgfSA9IGcxMiwgKCFzOC5jb250ZW50RE9NLmNvbnRhaW5zKGIyNSkgfHwgeTMuc2FmYXJpICYmIFduKGIyNSwgbTIzLCB0NCkgfHwgeTMuY2hyb21lICYmIEZuKGIyNSwgbTIzLCB0NCkpICYmIChiMjUgPSB2b2lkIDApKTsKICAgICAgfQogICAgfQogICAgaWYgKCFiMjUgfHwgIXM4LmRvY1ZpZXcuZG9tLmNvbnRhaW5zKGIyNSkpIHsKICAgICAgbGV0IGcxMiA9IEgzLmZpbmQoczguZG9jVmlldywgZjExKTsKICAgICAgaWYgKCFnMTIpCiAgICAgICAgcmV0dXJuIGMxNyA+IGgxMC50b3AgKyBoMTAuaGVpZ2h0IC8gMiA/IGgxMC50byA6IGgxMC5mcm9tOwogICAgICAoeyBub2RlOiBiMjUsIG9mZnNldDogbTIzIH0gPSAkZTMoZzEyLmRvbSwgdDQsIGU1KSk7CiAgICB9CiAgICByZXR1cm4gczguZG9jVmlldy5wb3NGcm9tRE9NKGIyNSwgbTIzKTsKICB9CiAgZnVuY3Rpb24gQmkoczgsIHQ0LCBlNSwgaTQsIG44KSB7CiAgICBsZXQgcjMgPSBNYXRoLnJvdW5kKChpNCAtIHQ0LmxlZnQpICogczguZGVmYXVsdENoYXJhY3RlcldpZHRoKTsKICAgIHM4LmxpbmVXcmFwcGluZyAmJiBlNS5oZWlnaHQgPiBzOC5kZWZhdWx0TGluZUhlaWdodCAqIDEuNSAmJiAocjMgKz0gTWF0aC5mbG9vcigobjggLSBlNS50b3ApIC8gczguZGVmYXVsdExpbmVIZWlnaHQpICogczgudmlld1N0YXRlLmhlaWdodE9yYWNsZS5saW5lTGVuZ3RoKTsKICAgIGxldCBvNCA9IHM4LnN0YXRlLnNsaWNlRG9jKGU1LmZyb20sIGU1LnRvKTsKICAgIHJldHVybiBlNS5mcm9tICsgYXQobzQsIHIzLCBzOC5zdGF0ZS50YWJTaXplKTsKICB9CiAgZnVuY3Rpb24gV24oczgsIHQ0LCBlNSkgewogICAgbGV0IGk0OwogICAgaWYgKHM4Lm5vZGVUeXBlICE9IDMgfHwgdDQgIT0gKGk0ID0gczgubm9kZVZhbHVlLmxlbmd0aCkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGZvciAobGV0IG44ID0gczgubmV4dFNpYmxpbmc7IG44OyBuOCA9IG44Lm5leHRTaWJsaW5nKQogICAgICBpZiAobjgubm9kZVR5cGUgIT0gMSB8fCBuOC5ub2RlTmFtZSAhPSAiQlIiKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB3dChzOCwgaTQgLSAxLCBpNCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA+IGU1OwogIH0KICBmdW5jdGlvbiBGbihzOCwgdDQsIGU1KSB7CiAgICBpZiAodDQgIT0gMCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZm9yIChsZXQgbjggPSBzODsgOyApIHsKICAgICAgbGV0IHIzID0gbjgucGFyZW50Tm9kZTsKICAgICAgaWYgKCFyMyB8fCByMy5ub2RlVHlwZSAhPSAxIHx8IHIzLmZpcnN0Q2hpbGQgIT0gbjgpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAocjMuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbS1saW5lIikpCiAgICAgICAgYnJlYWs7CiAgICAgIG44ID0gcjM7CiAgICB9CiAgICBsZXQgaTQgPSBzOC5ub2RlVHlwZSA9PSAxID8gczguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiB3dChzOCwgMCwgTWF0aC5tYXgoczgubm9kZVZhbHVlLmxlbmd0aCwgMSkpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgcmV0dXJuIGU1IC0gaTQubGVmdCA+IDU7CiAgfQogIGZ1bmN0aW9uIHpuKHM4LCB0NCwgZTUsIGk0KSB7CiAgICBsZXQgbjggPSBzOC5zdGF0ZS5kb2MubGluZUF0KHQ0LmhlYWQpLCByMyA9ICFpNCB8fCAhczgubGluZVdyYXBwaW5nID8gbnVsbCA6IHM4LmNvb3Jkc0F0UG9zKHQ0LmFzc29jIDwgMCAmJiB0NC5oZWFkID4gbjguZnJvbSA/IHQ0LmhlYWQgLSAxIDogdDQuaGVhZCk7CiAgICBpZiAocjMpIHsKICAgICAgbGV0IGgxMCA9IHM4LmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgYTQgPSBzOC50ZXh0RGlyZWN0aW9uQXQobjguZnJvbSksIGMxNyA9IHM4LnBvc0F0Q29vcmRzKHsgeDogZTUgPT0gKGE0ID09IFIyLkxUUikgPyBoMTAucmlnaHQgLSAxIDogaDEwLmxlZnQgKyAxLCB5OiAocjMudG9wICsgcjMuYm90dG9tKSAvIDIgfSk7CiAgICAgIGlmIChjMTcgIT0gbnVsbCkKICAgICAgICByZXR1cm4gZzIuY3Vyc29yKGMxNywgZTUgPyAtMSA6IDEpOwogICAgfQogICAgbGV0IG80ID0gSDMuZmluZChzOC5kb2NWaWV3LCB0NC5oZWFkKSwgbDcgPSBvNCA/IGU1ID8gbzQucG9zQXRFbmQgOiBvNC5wb3NBdFN0YXJ0IDogZTUgPyBuOC50byA6IG44LmZyb207CiAgICByZXR1cm4gZzIuY3Vyc29yKGw3LCBlNSA/IC0xIDogMSk7CiAgfQogIGZ1bmN0aW9uIFBpKHM4LCB0NCwgZTUsIGk0KSB7CiAgICBsZXQgbjggPSBzOC5zdGF0ZS5kb2MubGluZUF0KHQ0LmhlYWQpLCByMyA9IHM4LmJpZGlTcGFucyhuOCksIG80ID0gczgudGV4dERpcmVjdGlvbkF0KG44LmZyb20pOwogICAgZm9yIChsZXQgbDcgPSB0NCwgaDEwID0gbnVsbDsgOyApIHsKICAgICAgbGV0IGE0ID0gVnMobjgsIHIzLCBvNCwgbDcsIGU1KSwgYzE3ID0gTnMyOwogICAgICBpZiAoIWE0KSB7CiAgICAgICAgaWYgKG44Lm51bWJlciA9PSAoZTUgPyBzOC5zdGF0ZS5kb2MubGluZXMgOiAxKSkKICAgICAgICAgIHJldHVybiBsNzsKICAgICAgICBjMTcgPSBgCmAsIG44ID0gczguc3RhdGUuZG9jLmxpbmUobjgubnVtYmVyICsgKGU1ID8gMSA6IC0xKSksIHIzID0gczguYmlkaVNwYW5zKG44KSwgYTQgPSBnMi5jdXJzb3IoZTUgPyBuOC5mcm9tIDogbjgudG8pOwogICAgICB9CiAgICAgIGlmIChoMTApIHsKICAgICAgICBpZiAoIWgxMChjMTcpKQogICAgICAgICAgcmV0dXJuIGw3OwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghaTQpCiAgICAgICAgICByZXR1cm4gYTQ7CiAgICAgICAgaDEwID0gaTQoYzE3KTsKICAgICAgfQogICAgICBsNyA9IGE0OwogICAgfQogIH0KICBmdW5jdGlvbiBJbihzOCwgdDQsIGU1KSB7CiAgICBsZXQgaTQgPSBzOC5zdGF0ZS5jaGFyQ2F0ZWdvcml6ZXIodDQpLCBuOCA9IGk0KGU1KTsKICAgIHJldHVybiAocjMpID0+IHsKICAgICAgbGV0IG80ID0gaTQocjMpOwogICAgICByZXR1cm4gbjggPT0gRi5TcGFjZSAmJiAobjggPSBvNCksIG44ID09IG80OwogICAgfTsKICB9CiAgZnVuY3Rpb24gcW4oczgsIHQ0LCBlNSwgaTQpIHsKICAgIGxldCBuOCA9IHQ0LmhlYWQsIHIzID0gZTUgPyAxIDogLTE7CiAgICBpZiAobjggPT0gKGU1ID8gczguc3RhdGUuZG9jLmxlbmd0aCA6IDApKQogICAgICByZXR1cm4gZzIuY3Vyc29yKG44LCB0NC5hc3NvYyk7CiAgICBsZXQgbzQgPSB0NC5nb2FsQ29sdW1uLCBsNywgaDEwID0gczguY29udGVudERPTS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgYTQgPSBzOC5jb29yZHNBdFBvcyhuOCksIGMxNyA9IHM4LmRvY3VtZW50VG9wOwogICAgaWYgKGE0KQogICAgICBvNCA9PSBudWxsICYmIChvNCA9IGE0LmxlZnQgLSBoMTAubGVmdCksIGw3ID0gcjMgPCAwID8gYTQudG9wIDogYTQuYm90dG9tOwogICAgZWxzZSB7CiAgICAgIGxldCB1MTEgPSBzOC52aWV3U3RhdGUubGluZUJsb2NrQXQobjgpOwogICAgICBvNCA9PSBudWxsICYmIChvNCA9IE1hdGgubWluKGgxMC5yaWdodCAtIGgxMC5sZWZ0LCBzOC5kZWZhdWx0Q2hhcmFjdGVyV2lkdGggKiAobjggLSB1MTEuZnJvbSkpKSwgbDcgPSAocjMgPCAwID8gdTExLnRvcCA6IHUxMS5ib3R0b20pICsgYzE3OwogICAgfQogICAgbGV0IGYxMSA9IGgxMC5sZWZ0ICsgbzQsIGQxNSA9IGk0ID8/IHM4LmRlZmF1bHRMaW5lSGVpZ2h0ID4+IDE7CiAgICBmb3IgKGxldCB1MTEgPSAwOyA7IHUxMSArPSAxMCkgewogICAgICBsZXQgcDE4ID0gbDcgKyAoZDE1ICsgdTExKSAqIHIzLCBiMjUgPSB6czIoczgsIHsgeDogZjExLCB5OiBwMTggfSwgZmFsc2UsIHIzKTsKICAgICAgaWYgKHAxOCA8IGgxMC50b3AgfHwgcDE4ID4gaDEwLmJvdHRvbSB8fCAocjMgPCAwID8gYjI1IDwgbjggOiBiMjUgPiBuOCkpCiAgICAgICAgcmV0dXJuIGcyLmN1cnNvcihiMjUsIHQ0LmFzc29jLCB2b2lkIDAsIG80KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gQWUzKHM4LCB0NCwgZTUpIHsKICAgIGxldCBpNCA9IHM4LnN0YXRlLmZhY2V0KExzMikubWFwKChuOCkgPT4gbjgoczgpKTsKICAgIGZvciAoOyA7ICkgewogICAgICBsZXQgbjggPSBmYWxzZTsKICAgICAgZm9yIChsZXQgcjMgb2YgaTQpCiAgICAgICAgcjMuYmV0d2VlbihlNS5mcm9tIC0gMSwgZTUuZnJvbSArIDEsIChvNCwgbDcsIGgxMCkgPT4gewogICAgICAgICAgZTUuZnJvbSA+IG80ICYmIGU1LmZyb20gPCBsNyAmJiAoZTUgPSB0NC5oZWFkID4gZTUuZnJvbSA/IGcyLmN1cnNvcihvNCwgMSkgOiBnMi5jdXJzb3IobDcsIC0xKSwgbjggPSB0cnVlKTsKICAgICAgICB9KTsKICAgICAgaWYgKCFuOCkKICAgICAgICByZXR1cm4gZTU7CiAgICB9CiAgfQogIHZhciBHZTIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICB0aGlzLmxhc3RLZXlDb2RlID0gMCwgdGhpcy5sYXN0S2V5VGltZSA9IDAsIHRoaXMubGFzdFRvdWNoVGltZSA9IDAsIHRoaXMubGFzdEZvY3VzVGltZSA9IDAsIHRoaXMubGFzdFNjcm9sbFRvcCA9IDAsIHRoaXMubGFzdFNjcm9sbExlZnQgPSAwLCB0aGlzLmNocm9tZVNjcm9sbEhhY2sgPSAtMSwgdGhpcy5wZW5kaW5nSU9TS2V5ID0gdm9pZCAwLCB0aGlzLmxhc3RTZWxlY3Rpb25PcmlnaW4gPSBudWxsLCB0aGlzLmxhc3RTZWxlY3Rpb25UaW1lID0gMCwgdGhpcy5sYXN0RXNjUHJlc3MgPSAwLCB0aGlzLmxhc3RDb250ZXh0TWVudSA9IDAsIHRoaXMuc2Nyb2xsSGFuZGxlcnMgPSBbXSwgdGhpcy5yZWdpc3RlcmVkRXZlbnRzID0gW10sIHRoaXMuY3VzdG9tSGFuZGxlcnMgPSBbXSwgdGhpcy5jb21wb3NpbmcgPSAtMSwgdGhpcy5jb21wb3NpdGlvbkZpcnN0Q2hhbmdlID0gbnVsbCwgdGhpcy5jb21wb3NpdGlvbkVuZGVkQXQgPSAwLCB0aGlzLm1vdXNlU2VsZWN0aW9uID0gbnVsbDsKICAgICAgZm9yIChsZXQgZTUgaW4gUDIpIHsKICAgICAgICBsZXQgaTQgPSBQMltlNV07CiAgICAgICAgdDQuY29udGVudERPTS5hZGRFdmVudExpc3RlbmVyKGU1LCAobjgpID0+IHsKICAgICAgICAgICFIaSh0NCwgbjgpIHx8IHRoaXMuaWdub3JlRHVyaW5nQ29tcG9zaXRpb24objgpIHx8IGU1ID09ICJrZXlkb3duIiAmJiB0aGlzLmtleWRvd24odDQsIG44KSB8fCAodGhpcy5tdXN0Rmx1c2hPYnNlcnZlcihuOCkgJiYgdDQub2JzZXJ2ZXIuZm9yY2VGbHVzaCgpLCB0aGlzLnJ1bkN1c3RvbUhhbmRsZXJzKGU1LCB0NCwgbjgpID8gbjgucHJldmVudERlZmF1bHQoKSA6IGk0KHQ0LCBuOCkpOwogICAgICAgIH0sIFhlMltlNV0pLCB0aGlzLnJlZ2lzdGVyZWRFdmVudHMucHVzaChlNSk7CiAgICAgIH0KICAgICAgeTMuY2hyb21lICYmIHkzLmNocm9tZV92ZXJzaW9uID09IDEwMiAmJiB0NC5zY3JvbGxET00uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLCAoKSA9PiB7CiAgICAgICAgdGhpcy5jaHJvbWVTY3JvbGxIYWNrIDwgMCA/IHQ0LmNvbnRlbnRET00uc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIiA6IHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5jaHJvbWVTY3JvbGxIYWNrKSwgdGhpcy5jaHJvbWVTY3JvbGxIYWNrID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aGlzLmNocm9tZVNjcm9sbEhhY2sgPSAtMSwgdDQuY29udGVudERPTS5zdHlsZS5wb2ludGVyRXZlbnRzID0gIiI7CiAgICAgICAgfSwgMTAwKTsKICAgICAgfSwgeyBwYXNzaXZlOiB0cnVlIH0pLCB0aGlzLm5vdGlmaWVkRm9jdXNlZCA9IHQ0Lmhhc0ZvY3VzLCB5My5zYWZhcmkgJiYgdDQuY29udGVudERPTS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsICgpID0+IG51bGwpOwogICAgfQogICAgc2V0U2VsZWN0aW9uT3JpZ2luKHQ0KSB7CiAgICAgIHRoaXMubGFzdFNlbGVjdGlvbk9yaWdpbiA9IHQ0LCB0aGlzLmxhc3RTZWxlY3Rpb25UaW1lID0gRGF0ZS5ub3coKTsKICAgIH0KICAgIGVuc3VyZUhhbmRsZXJzKHQ0LCBlNSkgewogICAgICB2YXIgaTQ7CiAgICAgIGxldCBuODsKICAgICAgdGhpcy5jdXN0b21IYW5kbGVycyA9IFtdOwogICAgICBmb3IgKGxldCByMyBvZiBlNSkKICAgICAgICBpZiAobjggPSAoaTQgPSByMy51cGRhdGUodDQpLnNwZWMpID09PSBudWxsIHx8IGk0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpNC5kb21FdmVudEhhbmRsZXJzKSB7CiAgICAgICAgICB0aGlzLmN1c3RvbUhhbmRsZXJzLnB1c2goeyBwbHVnaW46IHIzLnZhbHVlLCBoYW5kbGVyczogbjggfSk7CiAgICAgICAgICBmb3IgKGxldCBvNCBpbiBuOCkKICAgICAgICAgICAgdGhpcy5yZWdpc3RlcmVkRXZlbnRzLmluZGV4T2YobzQpIDwgMCAmJiBvNCAhPSAic2Nyb2xsIiAmJiAodGhpcy5yZWdpc3RlcmVkRXZlbnRzLnB1c2gobzQpLCB0NC5jb250ZW50RE9NLmFkZEV2ZW50TGlzdGVuZXIobzQsIChsNykgPT4gewogICAgICAgICAgICAgICFIaSh0NCwgbDcpIHx8IHRoaXMucnVuQ3VzdG9tSGFuZGxlcnMobzQsIHQ0LCBsNykgJiYgbDcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfSkpOwogICAgICAgIH0KICAgIH0KICAgIHJ1bkN1c3RvbUhhbmRsZXJzKHQ0LCBlNSwgaTQpIHsKICAgICAgZm9yIChsZXQgbjggb2YgdGhpcy5jdXN0b21IYW5kbGVycykgewogICAgICAgIGxldCByMyA9IG44LmhhbmRsZXJzW3Q0XTsKICAgICAgICBpZiAocjMpCiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAocjMuY2FsbChuOC5wbHVnaW4sIGk0LCBlNSkgfHwgaTQuZGVmYXVsdFByZXZlbnRlZCkKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0gY2F0Y2ggKG80KSB7CiAgICAgICAgICAgIG50MihlNS5zdGF0ZSwgbzQpOwogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJ1blNjcm9sbEhhbmRsZXJzKHQ0LCBlNSkgewogICAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSB0NC5zY3JvbGxET00uc2Nyb2xsVG9wLCB0aGlzLmxhc3RTY3JvbGxMZWZ0ID0gdDQuc2Nyb2xsRE9NLnNjcm9sbExlZnQ7CiAgICAgIGZvciAobGV0IGk0IG9mIHRoaXMuY3VzdG9tSGFuZGxlcnMpIHsKICAgICAgICBsZXQgbjggPSBpNC5oYW5kbGVycy5zY3JvbGw7CiAgICAgICAgaWYgKG44KQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbjguY2FsbChpNC5wbHVnaW4sIGU1LCB0NCk7CiAgICAgICAgICB9IGNhdGNoIChyMykgewogICAgICAgICAgICBudDIodDQuc3RhdGUsIHIzKTsKICAgICAgICAgIH0KICAgICAgfQogICAgfQogICAga2V5ZG93bih0NCwgZTUpIHsKICAgICAgaWYgKHRoaXMubGFzdEtleUNvZGUgPSBlNS5rZXlDb2RlLCB0aGlzLmxhc3RLZXlUaW1lID0gRGF0ZS5ub3coKSwgZTUua2V5Q29kZSA9PSA5ICYmIERhdGUubm93KCkgPCB0aGlzLmxhc3RFc2NQcmVzcyArIDJlMykKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHkzLmFuZHJvaWQgJiYgeTMuY2hyb21lICYmICFlNS5zeW50aGV0aWMgJiYgKGU1LmtleUNvZGUgPT0gMTMgfHwgZTUua2V5Q29kZSA9PSA4KSkKICAgICAgICByZXR1cm4gdDQub2JzZXJ2ZXIuZGVsYXlBbmRyb2lkS2V5KGU1LmtleSwgZTUua2V5Q29kZSksIHRydWU7CiAgICAgIGxldCBpNDsKICAgICAgcmV0dXJuIHkzLmlvcyAmJiAhZTUuc3ludGhldGljICYmICFlNS5hbHRLZXkgJiYgIWU1Lm1ldGFLZXkgJiYgKChpNCA9IElzLmZpbmQoKG44KSA9PiBuOC5rZXlDb2RlID09IGU1LmtleUNvZGUpKSAmJiAhZTUuY3RybEtleSB8fCBLbi5pbmRleE9mKGU1LmtleSkgPiAtMSAmJiBlNS5jdHJsS2V5ICYmICFlNS5zaGlmdEtleSkgPyAodGhpcy5wZW5kaW5nSU9TS2V5ID0gaTQgfHwgZTUsIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mbHVzaElPU0tleSh0NCksIDI1MCksIHRydWUpIDogZmFsc2U7CiAgICB9CiAgICBmbHVzaElPU0tleSh0NCkgewogICAgICBsZXQgZTUgPSB0aGlzLnBlbmRpbmdJT1NLZXk7CiAgICAgIHJldHVybiBlNSA/ICh0aGlzLnBlbmRpbmdJT1NLZXkgPSB2b2lkIDAsIEV0KHQ0LmNvbnRlbnRET00sIGU1LmtleSwgZTUua2V5Q29kZSkpIDogZmFsc2U7CiAgICB9CiAgICBpZ25vcmVEdXJpbmdDb21wb3NpdGlvbih0NCkgewogICAgICByZXR1cm4gL15rZXkvLnRlc3QodDQudHlwZSkgPyB0aGlzLmNvbXBvc2luZyA+IDAgPyB0cnVlIDogeTMuc2FmYXJpICYmICF5My5pb3MgJiYgRGF0ZS5ub3coKSAtIHRoaXMuY29tcG9zaXRpb25FbmRlZEF0IDwgMTAwID8gKHRoaXMuY29tcG9zaXRpb25FbmRlZEF0ID0gMCwgdHJ1ZSkgOiBmYWxzZSA6IGZhbHNlOwogICAgfQogICAgbXVzdEZsdXNoT2JzZXJ2ZXIodDQpIHsKICAgICAgcmV0dXJuIHQ0LnR5cGUgPT0gImtleWRvd24iICYmIHQ0LmtleUNvZGUgIT0gMjI5OwogICAgfQogICAgc3RhcnRNb3VzZVNlbGVjdGlvbih0NCkgewogICAgICB0aGlzLm1vdXNlU2VsZWN0aW9uICYmIHRoaXMubW91c2VTZWxlY3Rpb24uZGVzdHJveSgpLCB0aGlzLm1vdXNlU2VsZWN0aW9uID0gdDQ7CiAgICB9CiAgICB1cGRhdGUodDQpIHsKICAgICAgdGhpcy5tb3VzZVNlbGVjdGlvbiAmJiB0aGlzLm1vdXNlU2VsZWN0aW9uLnVwZGF0ZSh0NCksIHQ0LnRyYW5zYWN0aW9ucy5sZW5ndGggJiYgKHRoaXMubGFzdEtleUNvZGUgPSB0aGlzLmxhc3RTZWxlY3Rpb25UaW1lID0gMCk7CiAgICB9CiAgICBkZXN0cm95KCkgewogICAgICB0aGlzLm1vdXNlU2VsZWN0aW9uICYmIHRoaXMubW91c2VTZWxlY3Rpb24uZGVzdHJveSgpOwogICAgfQogIH07CiAgdmFyIElzID0gW3sga2V5OiAiQmFja3NwYWNlIiwga2V5Q29kZTogOCwgaW5wdXRUeXBlOiAiZGVsZXRlQ29udGVudEJhY2t3YXJkIiB9LCB7IGtleTogIkVudGVyIiwga2V5Q29kZTogMTMsIGlucHV0VHlwZTogImluc2VydFBhcmFncmFwaCIgfSwgeyBrZXk6ICJEZWxldGUiLCBrZXlDb2RlOiA0NiwgaW5wdXRUeXBlOiAiZGVsZXRlQ29udGVudEZvcndhcmQiIH1dOwogIHZhciBLbiA9ICJkdGhrbyI7CiAgdmFyIHFzID0gWzE2LCAxNywgMTgsIDIwLCA5MSwgOTIsIDIyNCwgMjI1XTsKICB2YXIgWWUyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1LCBpNCwgbjgpIHsKICAgICAgdGhpcy52aWV3ID0gdDQsIHRoaXMuc3R5bGUgPSBpNCwgdGhpcy5tdXN0U2VsZWN0ID0gbjgsIHRoaXMubGFzdEV2ZW50ID0gZTU7CiAgICAgIGxldCByMyA9IHQ0LmNvbnRlbnRET00ub3duZXJEb2N1bWVudDsKICAgICAgcjMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5tb3ZlID0gdGhpcy5tb3ZlLmJpbmQodGhpcykpLCByMy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy51cCA9IHRoaXMudXAuYmluZCh0aGlzKSksIHRoaXMuZXh0ZW5kID0gZTUuc2hpZnRLZXksIHRoaXMubXVsdGlwbGUgPSB0NC5zdGF0ZS5mYWNldCh3LmFsbG93TXVsdGlwbGVTZWxlY3Rpb25zKSAmJiBqbih0NCwgZTUpLCB0aGlzLmRyYWdNb3ZlID0gX24odDQsIGU1KSwgdGhpcy5kcmFnZ2luZyA9ICRuKHQ0LCBlNSkgJiYgJHMoZTUpID09IDEgPyBudWxsIDogZmFsc2UsIHRoaXMuZHJhZ2dpbmcgPT09IGZhbHNlICYmIChlNS5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLnNlbGVjdChlNSkpOwogICAgfQogICAgbW92ZSh0NCkgewogICAgICBpZiAodDQuYnV0dG9ucyA9PSAwKQogICAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3koKTsKICAgICAgdGhpcy5kcmFnZ2luZyA9PT0gZmFsc2UgJiYgdGhpcy5zZWxlY3QodGhpcy5sYXN0RXZlbnQgPSB0NCk7CiAgICB9CiAgICB1cCh0NCkgewogICAgICB0aGlzLmRyYWdnaW5nID09IG51bGwgJiYgdGhpcy5zZWxlY3QodGhpcy5sYXN0RXZlbnQpLCB0aGlzLmRyYWdnaW5nIHx8IHQ0LnByZXZlbnREZWZhdWx0KCksIHRoaXMuZGVzdHJveSgpOwogICAgfQogICAgZGVzdHJveSgpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy52aWV3LmNvbnRlbnRET00ub3duZXJEb2N1bWVudDsKICAgICAgdDQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5tb3ZlKSwgdDQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMudXApLCB0aGlzLnZpZXcuaW5wdXRTdGF0ZS5tb3VzZVNlbGVjdGlvbiA9IG51bGw7CiAgICB9CiAgICBzZWxlY3QodDQpIHsKICAgICAgbGV0IGU1ID0gdGhpcy5zdHlsZS5nZXQodDQsIHRoaXMuZXh0ZW5kLCB0aGlzLm11bHRpcGxlKTsKICAgICAgKHRoaXMubXVzdFNlbGVjdCB8fCAhZTUuZXEodGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbikgfHwgZTUubWFpbi5hc3NvYyAhPSB0aGlzLnZpZXcuc3RhdGUuc2VsZWN0aW9uLm1haW4uYXNzb2MpICYmIHRoaXMudmlldy5kaXNwYXRjaCh7IHNlbGVjdGlvbjogZTUsIHVzZXJFdmVudDogInNlbGVjdC5wb2ludGVyIiwgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSksIHRoaXMubXVzdFNlbGVjdCA9IGZhbHNlOwogICAgfQogICAgdXBkYXRlKHQ0KSB7CiAgICAgIHQ0LmRvY0NoYW5nZWQgJiYgdGhpcy5kcmFnZ2luZyAmJiAodGhpcy5kcmFnZ2luZyA9IHRoaXMuZHJhZ2dpbmcubWFwKHQ0LmNoYW5nZXMpKSwgdGhpcy5zdHlsZS51cGRhdGUodDQpICYmIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZWxlY3QodGhpcy5sYXN0RXZlbnQpLCAyMCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBqbihzOCwgdDQpIHsKICAgIGxldCBlNSA9IHM4LnN0YXRlLmZhY2V0KE1zMik7CiAgICByZXR1cm4gZTUubGVuZ3RoID8gZTVbMF0odDQpIDogeTMubWFjID8gdDQubWV0YUtleSA6IHQ0LmN0cmxLZXk7CiAgfQogIGZ1bmN0aW9uIF9uKHM4LCB0NCkgewogICAgbGV0IGU1ID0gczguc3RhdGUuZmFjZXQoa3MyKTsKICAgIHJldHVybiBlNS5sZW5ndGggPyBlNVswXSh0NCkgOiB5My5tYWMgPyAhdDQuYWx0S2V5IDogIXQ0LmN0cmxLZXk7CiAgfQogIGZ1bmN0aW9uICRuKHM4LCB0NCkgewogICAgbGV0IHsgbWFpbjogZTUgfSA9IHM4LnN0YXRlLnNlbGVjdGlvbjsKICAgIGlmIChlNS5lbXB0eSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IGk0ID0gc2UzKHM4LnJvb3QpOwogICAgaWYgKCFpNCB8fCBpNC5yYW5nZUNvdW50ID09IDApCiAgICAgIHJldHVybiB0cnVlOwogICAgbGV0IG44ID0gaTQuZ2V0UmFuZ2VBdCgwKS5nZXRDbGllbnRSZWN0cygpOwogICAgZm9yIChsZXQgcjMgPSAwOyByMyA8IG44Lmxlbmd0aDsgcjMrKykgewogICAgICBsZXQgbzQgPSBuOFtyM107CiAgICAgIGlmIChvNC5sZWZ0IDw9IHQ0LmNsaWVudFggJiYgbzQucmlnaHQgPj0gdDQuY2xpZW50WCAmJiBvNC50b3AgPD0gdDQuY2xpZW50WSAmJiBvNC5ib3R0b20gPj0gdDQuY2xpZW50WSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gSGkoczgsIHQ0KSB7CiAgICBpZiAoIXQ0LmJ1YmJsZXMpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHQ0LmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGZvciAobGV0IGU1ID0gdDQudGFyZ2V0LCBpNDsgZTUgIT0gczguY29udGVudERPTTsgZTUgPSBlNS5wYXJlbnROb2RlKQogICAgICBpZiAoIWU1IHx8IGU1Lm5vZGVUeXBlID09IDExIHx8IChpNCA9IEEzLmdldChlNSkpICYmIGk0Lmlnbm9yZUV2ZW50KHQ0KSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgdmFyIFAyID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgdmFyIFhlMiA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogIHZhciBLcyA9IHkzLmllICYmIHkzLmllX3ZlcnNpb24gPCAxNSB8fCB5My5pb3MgJiYgeTMud2Via2l0X3ZlcnNpb24gPCA2MDQ7CiAgZnVuY3Rpb24gR24oczgpIHsKICAgIGxldCB0NCA9IHM4LmRvbS5wYXJlbnROb2RlOwogICAgaWYgKCF0NCkKICAgICAgcmV0dXJuOwogICAgbGV0IGU1ID0gdDQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSk7CiAgICBlNS5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogLTEwMDAwcHg7IHRvcDogMTBweCIsIGU1LmZvY3VzKCksIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBzOC5mb2N1cygpLCBlNS5yZW1vdmUoKSwganMoczgsIGU1LnZhbHVlKTsKICAgIH0sIDUwKTsKICB9CiAgZnVuY3Rpb24ganMoczgsIHQ0KSB7CiAgICBsZXQgeyBzdGF0ZTogZTUgfSA9IHM4LCBpNCwgbjggPSAxLCByMyA9IGU1LnRvVGV4dCh0NCksIG80ID0gcjMubGluZXMgPT0gZTUuc2VsZWN0aW9uLnJhbmdlcy5sZW5ndGg7CiAgICBpZiAoVWUyICE9IG51bGwgJiYgZTUuc2VsZWN0aW9uLnJhbmdlcy5ldmVyeSgoaDEwKSA9PiBoMTAuZW1wdHkpICYmIFVlMiA9PSByMy50b1N0cmluZygpKSB7CiAgICAgIGxldCBoMTAgPSAtMTsKICAgICAgaTQgPSBlNS5jaGFuZ2VCeVJhbmdlKChhNCkgPT4gewogICAgICAgIGxldCBjMTcgPSBlNS5kb2MubGluZUF0KGE0LmZyb20pOwogICAgICAgIGlmIChjMTcuZnJvbSA9PSBoMTApCiAgICAgICAgICByZXR1cm4geyByYW5nZTogYTQgfTsKICAgICAgICBoMTAgPSBjMTcuZnJvbTsKICAgICAgICBsZXQgZjExID0gZTUudG9UZXh0KChvNCA/IHIzLmxpbmUobjgrKykudGV4dCA6IHQ0KSArIGU1LmxpbmVCcmVhayk7CiAgICAgICAgcmV0dXJuIHsgY2hhbmdlczogeyBmcm9tOiBjMTcuZnJvbSwgaW5zZXJ0OiBmMTEgfSwgcmFuZ2U6IGcyLmN1cnNvcihhNC5mcm9tICsgZjExLmxlbmd0aCkgfTsKICAgICAgfSk7CiAgICB9IGVsc2UKICAgICAgbzQgPyBpNCA9IGU1LmNoYW5nZUJ5UmFuZ2UoKGgxMCkgPT4gewogICAgICAgIGxldCBhNCA9IHIzLmxpbmUobjgrKyk7CiAgICAgICAgcmV0dXJuIHsgY2hhbmdlczogeyBmcm9tOiBoMTAuZnJvbSwgdG86IGgxMC50bywgaW5zZXJ0OiBhNC50ZXh0IH0sIHJhbmdlOiBnMi5jdXJzb3IoaDEwLmZyb20gKyBhNC5sZW5ndGgpIH07CiAgICAgIH0pIDogaTQgPSBlNS5yZXBsYWNlU2VsZWN0aW9uKHIzKTsKICAgIHM4LmRpc3BhdGNoKGk0LCB7IHVzZXJFdmVudDogImlucHV0LnBhc3RlIiwgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSk7CiAgfQogIFAyLmtleWRvd24gPSAoczgsIHQ0KSA9PiB7CiAgICBzOC5pbnB1dFN0YXRlLnNldFNlbGVjdGlvbk9yaWdpbigic2VsZWN0IiksIHQ0LmtleUNvZGUgPT0gMjcgPyBzOC5pbnB1dFN0YXRlLmxhc3RFc2NQcmVzcyA9IERhdGUubm93KCkgOiBxcy5pbmRleE9mKHQ0LmtleUNvZGUpIDwgMCAmJiAoczguaW5wdXRTdGF0ZS5sYXN0RXNjUHJlc3MgPSAwKTsKICB9OwogIFAyLnRvdWNoc3RhcnQgPSAoczgsIHQ0KSA9PiB7CiAgICBzOC5pbnB1dFN0YXRlLmxhc3RUb3VjaFRpbWUgPSBEYXRlLm5vdygpLCBzOC5pbnB1dFN0YXRlLnNldFNlbGVjdGlvbk9yaWdpbigic2VsZWN0LnBvaW50ZXIiKTsKICB9OwogIFAyLnRvdWNobW92ZSA9IChzOCkgPT4gewogICAgczguaW5wdXRTdGF0ZS5zZXRTZWxlY3Rpb25PcmlnaW4oInNlbGVjdC5wb2ludGVyIik7CiAgfTsKICBYZTIudG91Y2hzdGFydCA9IFhlMi50b3VjaG1vdmUgPSB7IHBhc3NpdmU6IHRydWUgfTsKICBQMi5tb3VzZWRvd24gPSAoczgsIHQ0KSA9PiB7CiAgICBpZiAoczgub2JzZXJ2ZXIuZmx1c2goKSwgczguaW5wdXRTdGF0ZS5sYXN0VG91Y2hUaW1lID4gRGF0ZS5ub3coKSAtIDJlMykKICAgICAgcmV0dXJuOwogICAgbGV0IGU1ID0gbnVsbDsKICAgIGZvciAobGV0IGk0IG9mIHM4LnN0YXRlLmZhY2V0KEFzKSkKICAgICAgaWYgKGU1ID0gaTQoczgsIHQ0KSwgZTUpCiAgICAgICAgYnJlYWs7CiAgICBpZiAoIWU1ICYmIHQ0LmJ1dHRvbiA9PSAwICYmIChlNSA9IFVuKHM4LCB0NCkpLCBlNSkgewogICAgICBsZXQgaTQgPSBzOC5yb290LmFjdGl2ZUVsZW1lbnQgIT0gczguY29udGVudERPTTsKICAgICAgaTQgJiYgczgub2JzZXJ2ZXIuaWdub3JlKCgpID0+IHVzKHM4LmNvbnRlbnRET00pKSwgczguaW5wdXRTdGF0ZS5zdGFydE1vdXNlU2VsZWN0aW9uKG5ldyBZZTIoczgsIHQ0LCBlNSwgaTQpKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIE5pKHM4LCB0NCwgZTUsIGk0KSB7CiAgICBpZiAoaTQgPT0gMSkKICAgICAgcmV0dXJuIGcyLmN1cnNvcih0NCwgZTUpOwogICAgaWYgKGk0ID09IDIpCiAgICAgIHJldHVybiBIbihzOC5zdGF0ZSwgdDQsIGU1KTsKICAgIHsKICAgICAgbGV0IG44ID0gSDMuZmluZChzOC5kb2NWaWV3LCB0NCksIHIzID0gczguc3RhdGUuZG9jLmxpbmVBdChuOCA/IG44LnBvc0F0RW5kIDogdDQpLCBvNCA9IG44ID8gbjgucG9zQXRTdGFydCA6IHIzLmZyb20sIGw3ID0gbjggPyBuOC5wb3NBdEVuZCA6IHIzLnRvOwogICAgICByZXR1cm4gbDcgPCBzOC5zdGF0ZS5kb2MubGVuZ3RoICYmIGw3ID09IHIzLnRvICYmIGw3KyssIGcyLnJhbmdlKG80LCBsNyk7CiAgICB9CiAgfQogIHZhciBfcyA9IChzOCwgdDQpID0+IHM4ID49IHQ0LnRvcCAmJiBzOCA8PSB0NC5ib3R0b207CiAgdmFyIFZpID0gKHM4LCB0NCwgZTUpID0+IF9zKHQ0LCBlNSkgJiYgczggPj0gZTUubGVmdCAmJiBzOCA8PSBlNS5yaWdodDsKICBmdW5jdGlvbiBZbihzOCwgdDQsIGU1LCBpNCkgewogICAgbGV0IG44ID0gSDMuZmluZChzOC5kb2NWaWV3LCB0NCk7CiAgICBpZiAoIW44KQogICAgICByZXR1cm4gMTsKICAgIGxldCByMyA9IHQ0IC0gbjgucG9zQXRTdGFydDsKICAgIGlmIChyMyA9PSAwKQogICAgICByZXR1cm4gMTsKICAgIGlmIChyMyA9PSBuOC5sZW5ndGgpCiAgICAgIHJldHVybiAtMTsKICAgIGxldCBvNCA9IG44LmNvb3Jkc0F0KHIzLCAtMSk7CiAgICBpZiAobzQgJiYgVmkoZTUsIGk0LCBvNCkpCiAgICAgIHJldHVybiAtMTsKICAgIGxldCBsNyA9IG44LmNvb3Jkc0F0KHIzLCAxKTsKICAgIHJldHVybiBsNyAmJiBWaShlNSwgaTQsIGw3KSA/IDEgOiBvNCAmJiBfcyhpNCwgbzQpID8gLTEgOiAxOwogIH0KICBmdW5jdGlvbiBXaShzOCwgdDQpIHsKICAgIGxldCBlNSA9IHM4LnBvc0F0Q29vcmRzKHsgeDogdDQuY2xpZW50WCwgeTogdDQuY2xpZW50WSB9LCBmYWxzZSk7CiAgICByZXR1cm4geyBwb3M6IGU1LCBiaWFzOiBZbihzOCwgZTUsIHQ0LmNsaWVudFgsIHQ0LmNsaWVudFkpIH07CiAgfQogIHZhciBYbiA9IHkzLmllICYmIHkzLmllX3ZlcnNpb24gPD0gMTE7CiAgdmFyIEZpID0gbnVsbDsKICB2YXIgemkgPSAwOwogIHZhciBJaSA9IDA7CiAgZnVuY3Rpb24gJHMoczgpIHsKICAgIGlmICghWG4pCiAgICAgIHJldHVybiBzOC5kZXRhaWw7CiAgICBsZXQgdDQgPSBGaSwgZTUgPSBJaTsKICAgIHJldHVybiBGaSA9IHM4LCBJaSA9IERhdGUubm93KCksIHppID0gIXQ0IHx8IGU1ID4gRGF0ZS5ub3coKSAtIDQwMCAmJiBNYXRoLmFicyh0NC5jbGllbnRYIC0gczguY2xpZW50WCkgPCAyICYmIE1hdGguYWJzKHQ0LmNsaWVudFkgLSBzOC5jbGllbnRZKSA8IDIgPyAoemkgKyAxKSAlIDMgOiAxOwogIH0KICBmdW5jdGlvbiBVbihzOCwgdDQpIHsKICAgIGxldCBlNSA9IFdpKHM4LCB0NCksIGk0ID0gJHModDQpLCBuOCA9IHM4LnN0YXRlLnNlbGVjdGlvbiwgcjMgPSBlNSwgbzQgPSB0NDsKICAgIHJldHVybiB7IHVwZGF0ZShsNykgewogICAgICBsNy5kb2NDaGFuZ2VkICYmIChlNS5wb3MgPSBsNy5jaGFuZ2VzLm1hcFBvcyhlNS5wb3MpLCBuOCA9IG44Lm1hcChsNy5jaGFuZ2VzKSwgbzQgPSBudWxsKTsKICAgIH0sIGdldChsNywgaDEwLCBhNCkgewogICAgICBsZXQgYzE3OwogICAgICBvNCAmJiBsNy5jbGllbnRYID09IG80LmNsaWVudFggJiYgbDcuY2xpZW50WSA9PSBvNC5jbGllbnRZID8gYzE3ID0gcjMgOiAoYzE3ID0gcjMgPSBXaShzOCwgbDcpLCBvNCA9IGw3KTsKICAgICAgbGV0IGYxMSA9IE5pKHM4LCBjMTcucG9zLCBjMTcuYmlhcywgaTQpOwogICAgICBpZiAoZTUucG9zICE9IGMxNy5wb3MgJiYgIWgxMCkgewogICAgICAgIGxldCBkMTUgPSBOaShzOCwgZTUucG9zLCBlNS5iaWFzLCBpNCksIHUxMSA9IE1hdGgubWluKGQxNS5mcm9tLCBmMTEuZnJvbSksIHAxOCA9IE1hdGgubWF4KGQxNS50bywgZjExLnRvKTsKICAgICAgICBmMTEgPSB1MTEgPCBmMTEuZnJvbSA/IGcyLnJhbmdlKHUxMSwgcDE4KSA6IGcyLnJhbmdlKHAxOCwgdTExKTsKICAgICAgfQogICAgICByZXR1cm4gaDEwID8gbjgucmVwbGFjZVJhbmdlKG44Lm1haW4uZXh0ZW5kKGYxMS5mcm9tLCBmMTEudG8pKSA6IGE0ICYmIG44LnJhbmdlcy5sZW5ndGggPiAxICYmIG44LnJhbmdlcy5zb21lKChkMTUpID0+IGQxNS5lcShmMTEpKSA/IEpuKG44LCBmMTEpIDogYTQgPyBuOC5hZGRSYW5nZShmMTEpIDogZzIuY3JlYXRlKFtmMTFdKTsKICAgIH0gfTsKICB9CiAgZnVuY3Rpb24gSm4oczgsIHQ0KSB7CiAgICBmb3IgKGxldCBlNSA9IDA7IDsgZTUrKykKICAgICAgaWYgKHM4LnJhbmdlc1tlNV0uZXEodDQpKQogICAgICAgIHJldHVybiBnMi5jcmVhdGUoczgucmFuZ2VzLnNsaWNlKDAsIGU1KS5jb25jYXQoczgucmFuZ2VzLnNsaWNlKGU1ICsgMSkpLCBzOC5tYWluSW5kZXggPT0gZTUgPyAwIDogczgubWFpbkluZGV4IC0gKHM4Lm1haW5JbmRleCA+IGU1ID8gMSA6IDApKTsKICB9CiAgUDIuZHJhZ3N0YXJ0ID0gKHM4LCB0NCkgPT4gewogICAgbGV0IHsgc2VsZWN0aW9uOiB7IG1haW46IGU1IH0gfSA9IHM4LnN0YXRlLCB7IG1vdXNlU2VsZWN0aW9uOiBpNCB9ID0gczguaW5wdXRTdGF0ZTsKICAgIGk0ICYmIChpNC5kcmFnZ2luZyA9IGU1KSwgdDQuZGF0YVRyYW5zZmVyICYmICh0NC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIHM4LnN0YXRlLnNsaWNlRG9jKGU1LmZyb20sIGU1LnRvKSksIHQ0LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gImNvcHlNb3ZlIik7CiAgfTsKICBmdW5jdGlvbiBxaShzOCwgdDQsIGU1LCBpNCkgewogICAgaWYgKCFlNSkKICAgICAgcmV0dXJuOwogICAgbGV0IG44ID0gczgucG9zQXRDb29yZHMoeyB4OiB0NC5jbGllbnRYLCB5OiB0NC5jbGllbnRZIH0sIGZhbHNlKTsKICAgIHQ0LnByZXZlbnREZWZhdWx0KCk7CiAgICBsZXQgeyBtb3VzZVNlbGVjdGlvbjogcjMgfSA9IHM4LmlucHV0U3RhdGUsIG80ID0gaTQgJiYgcjMgJiYgcjMuZHJhZ2dpbmcgJiYgcjMuZHJhZ01vdmUgPyB7IGZyb206IHIzLmRyYWdnaW5nLmZyb20sIHRvOiByMy5kcmFnZ2luZy50byB9IDogbnVsbCwgbDcgPSB7IGZyb206IG44LCBpbnNlcnQ6IGU1IH0sIGgxMCA9IHM4LnN0YXRlLmNoYW5nZXMobzQgPyBbbzQsIGw3XSA6IGw3KTsKICAgIHM4LmZvY3VzKCksIHM4LmRpc3BhdGNoKHsgY2hhbmdlczogaDEwLCBzZWxlY3Rpb246IHsgYW5jaG9yOiBoMTAubWFwUG9zKG44LCAtMSksIGhlYWQ6IGgxMC5tYXBQb3MobjgsIDEpIH0sIHVzZXJFdmVudDogbzQgPyAibW92ZS5kcm9wIiA6ICJpbnB1dC5kcm9wIiB9KTsKICB9CiAgUDIuZHJvcCA9IChzOCwgdDQpID0+IHsKICAgIGlmICghdDQuZGF0YVRyYW5zZmVyKQogICAgICByZXR1cm47CiAgICBpZiAoczguc3RhdGUucmVhZE9ubHkpCiAgICAgIHJldHVybiB0NC5wcmV2ZW50RGVmYXVsdCgpOwogICAgbGV0IGU1ID0gdDQuZGF0YVRyYW5zZmVyLmZpbGVzOwogICAgaWYgKGU1ICYmIGU1Lmxlbmd0aCkgewogICAgICB0NC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBsZXQgaTQgPSBBcnJheShlNS5sZW5ndGgpLCBuOCA9IDAsIHIzID0gKCkgPT4gewogICAgICAgICsrbjggPT0gZTUubGVuZ3RoICYmIHFpKHM4LCB0NCwgaTQuZmlsdGVyKChvNCkgPT4gbzQgIT0gbnVsbCkuam9pbihzOC5zdGF0ZS5saW5lQnJlYWspLCBmYWxzZSk7CiAgICAgIH07CiAgICAgIGZvciAobGV0IG80ID0gMDsgbzQgPCBlNS5sZW5ndGg7IG80KyspIHsKICAgICAgICBsZXQgbDcgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgIGw3Lm9uZXJyb3IgPSByMywgbDcub25sb2FkID0gKCkgPT4gewogICAgICAgICAgL1tceDAwLVx4MDhceDBlLVx4MWZdezJ9Ly50ZXN0KGw3LnJlc3VsdCkgfHwgKGk0W280XSA9IGw3LnJlc3VsdCksIHIzKCk7CiAgICAgICAgfSwgbDcucmVhZEFzVGV4dChlNVtvNF0pOwogICAgICB9CiAgICB9IGVsc2UKICAgICAgcWkoczgsIHQ0LCB0NC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgiVGV4dCIpLCB0cnVlKTsKICB9OwogIFAyLnBhc3RlID0gKHM4LCB0NCkgPT4gewogICAgaWYgKHM4LnN0YXRlLnJlYWRPbmx5KQogICAgICByZXR1cm4gdDQucHJldmVudERlZmF1bHQoKTsKICAgIHM4Lm9ic2VydmVyLmZsdXNoKCk7CiAgICBsZXQgZTUgPSBLcyA/IG51bGwgOiB0NC5jbGlwYm9hcmREYXRhOwogICAgZTUgPyAoanMoczgsIGU1LmdldERhdGEoInRleHQvcGxhaW4iKSksIHQ0LnByZXZlbnREZWZhdWx0KCkpIDogR24oczgpOwogIH07CiAgZnVuY3Rpb24gWm4oczgsIHQ0KSB7CiAgICBsZXQgZTUgPSBzOC5kb20ucGFyZW50Tm9kZTsKICAgIGlmICghZTUpCiAgICAgIHJldHVybjsKICAgIGxldCBpNCA9IGU1LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIikpOwogICAgaTQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IC0xMDAwMHB4OyB0b3A6IDEwcHgiLCBpNC52YWx1ZSA9IHQ0LCBpNC5mb2N1cygpLCBpNC5zZWxlY3Rpb25FbmQgPSB0NC5sZW5ndGgsIGk0LnNlbGVjdGlvblN0YXJ0ID0gMCwgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGk0LnJlbW92ZSgpLCBzOC5mb2N1cygpOwogICAgfSwgNTApOwogIH0KICBmdW5jdGlvbiBRbihzOCkgewogICAgbGV0IHQ0ID0gW10sIGU1ID0gW10sIGk0ID0gZmFsc2U7CiAgICBmb3IgKGxldCBuOCBvZiBzOC5zZWxlY3Rpb24ucmFuZ2VzKQogICAgICBuOC5lbXB0eSB8fCAodDQucHVzaChzOC5zbGljZURvYyhuOC5mcm9tLCBuOC50bykpLCBlNS5wdXNoKG44KSk7CiAgICBpZiAoIXQ0Lmxlbmd0aCkgewogICAgICBsZXQgbjggPSAtMTsKICAgICAgZm9yIChsZXQgeyBmcm9tOiByMyB9IG9mIHM4LnNlbGVjdGlvbi5yYW5nZXMpIHsKICAgICAgICBsZXQgbzQgPSBzOC5kb2MubGluZUF0KHIzKTsKICAgICAgICBvNC5udW1iZXIgPiBuOCAmJiAodDQucHVzaChvNC50ZXh0KSwgZTUucHVzaCh7IGZyb206IG80LmZyb20sIHRvOiBNYXRoLm1pbihzOC5kb2MubGVuZ3RoLCBvNC50byArIDEpIH0pKSwgbjggPSBvNC5udW1iZXI7CiAgICAgIH0KICAgICAgaTQgPSB0cnVlOwogICAgfQogICAgcmV0dXJuIHsgdGV4dDogdDQuam9pbihzOC5saW5lQnJlYWspLCByYW5nZXM6IGU1LCBsaW5ld2lzZTogaTQgfTsKICB9CiAgdmFyIFVlMiA9IG51bGw7CiAgUDIuY29weSA9IFAyLmN1dCA9IChzOCwgdDQpID0+IHsKICAgIGxldCB7IHRleHQ6IGU1LCByYW5nZXM6IGk0LCBsaW5ld2lzZTogbjggfSA9IFFuKHM4LnN0YXRlKTsKICAgIGlmICghZTUgJiYgIW44KQogICAgICByZXR1cm47CiAgICBVZTIgPSBuOCA/IGU1IDogbnVsbDsKICAgIGxldCByMyA9IEtzID8gbnVsbCA6IHQ0LmNsaXBib2FyZERhdGE7CiAgICByMyA/ICh0NC5wcmV2ZW50RGVmYXVsdCgpLCByMy5jbGVhckRhdGEoKSwgcjMuc2V0RGF0YSgidGV4dC9wbGFpbiIsIGU1KSkgOiBabihzOCwgZTUpLCB0NC50eXBlID09ICJjdXQiICYmICFzOC5zdGF0ZS5yZWFkT25seSAmJiBzOC5kaXNwYXRjaCh7IGNoYW5nZXM6IGk0LCBzY3JvbGxJbnRvVmlldzogdHJ1ZSwgdXNlckV2ZW50OiAiZGVsZXRlLmN1dCIgfSk7CiAgfTsKICBmdW5jdGlvbiBHcyhzOCkgewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHM4Lmhhc0ZvY3VzICE9IHM4LmlucHV0U3RhdGUubm90aWZpZWRGb2N1c2VkICYmIHM4LnVwZGF0ZShbXSk7CiAgICB9LCAxMCk7CiAgfQogIFAyLmZvY3VzID0gKHM4KSA9PiB7CiAgICBzOC5pbnB1dFN0YXRlLmxhc3RGb2N1c1RpbWUgPSBEYXRlLm5vdygpLCAhczguc2Nyb2xsRE9NLnNjcm9sbFRvcCAmJiAoczguaW5wdXRTdGF0ZS5sYXN0U2Nyb2xsVG9wIHx8IHM4LmlucHV0U3RhdGUubGFzdFNjcm9sbExlZnQpICYmIChzOC5zY3JvbGxET00uc2Nyb2xsVG9wID0gczguaW5wdXRTdGF0ZS5sYXN0U2Nyb2xsVG9wLCBzOC5zY3JvbGxET00uc2Nyb2xsTGVmdCA9IHM4LmlucHV0U3RhdGUubGFzdFNjcm9sbExlZnQpLCBHcyhzOCk7CiAgfTsKICBQMi5ibHVyID0gKHM4KSA9PiB7CiAgICBzOC5vYnNlcnZlci5jbGVhclNlbGVjdGlvblJhbmdlKCksIEdzKHM4KTsKICB9OwogIFAyLmNvbXBvc2l0aW9uc3RhcnQgPSBQMi5jb21wb3NpdGlvbnVwZGF0ZSA9IChzOCkgPT4gewogICAgczguaW5wdXRTdGF0ZS5jb21wb3NpdGlvbkZpcnN0Q2hhbmdlID09IG51bGwgJiYgKHM4LmlucHV0U3RhdGUuY29tcG9zaXRpb25GaXJzdENoYW5nZSA9IHRydWUpLCBzOC5pbnB1dFN0YXRlLmNvbXBvc2luZyA8IDAgJiYgKHM4LmlucHV0U3RhdGUuY29tcG9zaW5nID0gMCk7CiAgfTsKICBQMi5jb21wb3NpdGlvbmVuZCA9IChzOCkgPT4gewogICAgczguaW5wdXRTdGF0ZS5jb21wb3NpbmcgPSAtMSwgczguaW5wdXRTdGF0ZS5jb21wb3NpdGlvbkVuZGVkQXQgPSBEYXRlLm5vdygpLCBzOC5pbnB1dFN0YXRlLmNvbXBvc2l0aW9uRmlyc3RDaGFuZ2UgPSBudWxsLCB5My5jaHJvbWUgJiYgeTMuYW5kcm9pZCAmJiBzOC5vYnNlcnZlci5mbHVzaFNvb24oKSwgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHM4LmlucHV0U3RhdGUuY29tcG9zaW5nIDwgMCAmJiBzOC5kb2NWaWV3LmNvbXBvc2l0aW9uRGVjby5zaXplICYmIHM4LnVwZGF0ZShbXSk7CiAgICB9LCA1MCk7CiAgfTsKICBQMi5jb250ZXh0bWVudSA9IChzOCkgPT4gewogICAgczguaW5wdXRTdGF0ZS5sYXN0Q29udGV4dE1lbnUgPSBEYXRlLm5vdygpOwogIH07CiAgUDIuYmVmb3JlaW5wdXQgPSAoczgsIHQ0KSA9PiB7CiAgICB2YXIgZTU7CiAgICBsZXQgaTQ7CiAgICBpZiAoeTMuY2hyb21lICYmIHkzLmFuZHJvaWQgJiYgKGk0ID0gSXMuZmluZCgobjgpID0+IG44LmlucHV0VHlwZSA9PSB0NC5pbnB1dFR5cGUpKSAmJiAoczgub2JzZXJ2ZXIuZGVsYXlBbmRyb2lkS2V5KGk0LmtleSwgaTQua2V5Q29kZSksIGk0LmtleSA9PSAiQmFja3NwYWNlIiB8fCBpNC5rZXkgPT0gIkRlbGV0ZSIpKSB7CiAgICAgIGxldCBuOCA9ICgoZTUgPSB3aW5kb3cudmlzdWFsVmlld3BvcnQpID09PSBudWxsIHx8IGU1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlNS5oZWlnaHQpIHx8IDA7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHZhciByMzsKICAgICAgICAoKChyMyA9IHdpbmRvdy52aXN1YWxWaWV3cG9ydCkgPT09IG51bGwgfHwgcjMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIzLmhlaWdodCkgfHwgMCkgPiBuOCArIDEwICYmIHM4Lmhhc0ZvY3VzICYmIChzOC5jb250ZW50RE9NLmJsdXIoKSwgczguZm9jdXMoKSk7CiAgICAgIH0sIDEwMCk7CiAgICB9CiAgfTsKICB2YXIgS2kgPSBbInByZS13cmFwIiwgIm5vcm1hbCIsICJwcmUtbGluZSIsICJicmVhay1zcGFjZXMiXTsKICB2YXIgdWUzID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHRoaXMuZG9jID0gdi5lbXB0eSwgdGhpcy5saW5lV3JhcHBpbmcgPSBmYWxzZSwgdGhpcy5oZWlnaHRTYW1wbGVzID0ge30sIHRoaXMubGluZUhlaWdodCA9IDE0LCB0aGlzLmNoYXJXaWR0aCA9IDcsIHRoaXMubGluZUxlbmd0aCA9IDMwLCB0aGlzLmhlaWdodENoYW5nZWQgPSBmYWxzZTsKICAgIH0KICAgIGhlaWdodEZvckdhcCh0NCwgZTUpIHsKICAgICAgbGV0IGk0ID0gdGhpcy5kb2MubGluZUF0KGU1KS5udW1iZXIgLSB0aGlzLmRvYy5saW5lQXQodDQpLm51bWJlciArIDE7CiAgICAgIHJldHVybiB0aGlzLmxpbmVXcmFwcGluZyAmJiAoaTQgKz0gTWF0aC5jZWlsKChlNSAtIHQ0IC0gaTQgKiB0aGlzLmxpbmVMZW5ndGggKiAwLjUpIC8gdGhpcy5saW5lTGVuZ3RoKSksIHRoaXMubGluZUhlaWdodCAqIGk0OwogICAgfQogICAgaGVpZ2h0Rm9yTGluZSh0NCkgewogICAgICByZXR1cm4gdGhpcy5saW5lV3JhcHBpbmcgPyAoMSArIE1hdGgubWF4KDAsIE1hdGguY2VpbCgodDQgLSB0aGlzLmxpbmVMZW5ndGgpIC8gKHRoaXMubGluZUxlbmd0aCAtIDUpKSkpICogdGhpcy5saW5lSGVpZ2h0IDogdGhpcy5saW5lSGVpZ2h0OwogICAgfQogICAgc2V0RG9jKHQ0KSB7CiAgICAgIHJldHVybiB0aGlzLmRvYyA9IHQ0LCB0aGlzOwogICAgfQogICAgbXVzdFJlZnJlc2hGb3JXcmFwcGluZyh0NCkgewogICAgICByZXR1cm4gS2kuaW5kZXhPZih0NCkgPiAtMSAhPSB0aGlzLmxpbmVXcmFwcGluZzsKICAgIH0KICAgIG11c3RSZWZyZXNoRm9ySGVpZ2h0cyh0NCkgewogICAgICBsZXQgZTUgPSBmYWxzZTsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IHQ0Lmxlbmd0aDsgaTQrKykgewogICAgICAgIGxldCBuOCA9IHQ0W2k0XTsKICAgICAgICBuOCA8IDAgPyBpNCsrIDogdGhpcy5oZWlnaHRTYW1wbGVzW01hdGguZmxvb3IobjggKiAxMCldIHx8IChlNSA9IHRydWUsIHRoaXMuaGVpZ2h0U2FtcGxlc1tNYXRoLmZsb29yKG44ICogMTApXSA9IHRydWUpOwogICAgICB9CiAgICAgIHJldHVybiBlNTsKICAgIH0KICAgIHJlZnJlc2godDQsIGU1LCBpNCwgbjgsIHIzKSB7CiAgICAgIGxldCBvNCA9IEtpLmluZGV4T2YodDQpID4gLTEsIGw3ID0gTWF0aC5yb3VuZChlNSkgIT0gTWF0aC5yb3VuZCh0aGlzLmxpbmVIZWlnaHQpIHx8IHRoaXMubGluZVdyYXBwaW5nICE9IG80OwogICAgICBpZiAodGhpcy5saW5lV3JhcHBpbmcgPSBvNCwgdGhpcy5saW5lSGVpZ2h0ID0gZTUsIHRoaXMuY2hhcldpZHRoID0gaTQsIHRoaXMubGluZUxlbmd0aCA9IG44LCBsNykgewogICAgICAgIHRoaXMuaGVpZ2h0U2FtcGxlcyA9IHt9OwogICAgICAgIGZvciAobGV0IGgxMCA9IDA7IGgxMCA8IHIzLmxlbmd0aDsgaDEwKyspIHsKICAgICAgICAgIGxldCBhNCA9IHIzW2gxMF07CiAgICAgICAgICBhNCA8IDAgPyBoMTArKyA6IHRoaXMuaGVpZ2h0U2FtcGxlc1tNYXRoLmZsb29yKGE0ICogMTApXSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBsNzsKICAgIH0KICB9OwogIHZhciBwZTQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUpIHsKICAgICAgdGhpcy5mcm9tID0gdDQsIHRoaXMuaGVpZ2h0cyA9IGU1LCB0aGlzLmluZGV4ID0gMDsKICAgIH0KICAgIGdldCBtb3JlKCkgewogICAgICByZXR1cm4gdGhpcy5pbmRleCA8IHRoaXMuaGVpZ2h0cy5sZW5ndGg7CiAgICB9CiAgfTsKICB2YXIgXzIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0LCBuOCwgcjMpIHsKICAgICAgdGhpcy5mcm9tID0gdDQsIHRoaXMubGVuZ3RoID0gZTUsIHRoaXMudG9wID0gaTQsIHRoaXMuaGVpZ2h0ID0gbjgsIHRoaXMudHlwZSA9IHIzOwogICAgfQogICAgZ2V0IHRvKCkgewogICAgICByZXR1cm4gdGhpcy5mcm9tICsgdGhpcy5sZW5ndGg7CiAgICB9CiAgICBnZXQgYm90dG9tKCkgewogICAgICByZXR1cm4gdGhpcy50b3AgKyB0aGlzLmhlaWdodDsKICAgIH0KICAgIGpvaW4odDQpIHsKICAgICAgbGV0IGU1ID0gKEFycmF5LmlzQXJyYXkodGhpcy50eXBlKSA/IHRoaXMudHlwZSA6IFt0aGlzXSkuY29uY2F0KEFycmF5LmlzQXJyYXkodDQudHlwZSkgPyB0NC50eXBlIDogW3Q0XSk7CiAgICAgIHJldHVybiBuZXcgXzIodGhpcy5mcm9tLCB0aGlzLmxlbmd0aCArIHQ0Lmxlbmd0aCwgdGhpcy50b3AsIHRoaXMuaGVpZ2h0ICsgdDQuaGVpZ2h0LCBlNSk7CiAgICB9CiAgfTsKICB2YXIgRDMgPSBmdW5jdGlvbihzOCkgewogICAgcmV0dXJuIHM4W3M4LkJ5UG9zID0gMF0gPSAiQnlQb3MiLCBzOFtzOC5CeUhlaWdodCA9IDFdID0gIkJ5SGVpZ2h0IiwgczhbczguQnlQb3NOb0hlaWdodCA9IDJdID0gIkJ5UG9zTm9IZWlnaHQiLCBzODsKICB9KEQzIHx8IChEMyA9IHt9KSk7CiAgdmFyIFF0ID0gMWUtMzsKICB2YXIgTjIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0ID0gMikgewogICAgICB0aGlzLmxlbmd0aCA9IHQ0LCB0aGlzLmhlaWdodCA9IGU1LCB0aGlzLmZsYWdzID0gaTQ7CiAgICB9CiAgICBnZXQgb3V0ZGF0ZWQoKSB7CiAgICAgIHJldHVybiAodGhpcy5mbGFncyAmIDIpID4gMDsKICAgIH0KICAgIHNldCBvdXRkYXRlZCh0NCkgewogICAgICB0aGlzLmZsYWdzID0gKHQ0ID8gMiA6IDApIHwgdGhpcy5mbGFncyAmIC0zOwogICAgfQogICAgc2V0SGVpZ2h0KHQ0LCBlNSkgewogICAgICB0aGlzLmhlaWdodCAhPSBlNSAmJiAoTWF0aC5hYnModGhpcy5oZWlnaHQgLSBlNSkgPiBRdCAmJiAodDQuaGVpZ2h0Q2hhbmdlZCA9IHRydWUpLCB0aGlzLmhlaWdodCA9IGU1KTsKICAgIH0KICAgIHJlcGxhY2UodDQsIGU1LCBpNCkgewogICAgICByZXR1cm4gTjIub2YoaTQpOwogICAgfQogICAgZGVjb21wb3NlTGVmdCh0NCwgZTUpIHsKICAgICAgZTUucHVzaCh0aGlzKTsKICAgIH0KICAgIGRlY29tcG9zZVJpZ2h0KHQ0LCBlNSkgewogICAgICBlNS5wdXNoKHRoaXMpOwogICAgfQogICAgYXBwbHlDaGFuZ2VzKHQ0LCBlNSwgaTQsIG44KSB7CiAgICAgIGxldCByMyA9IHRoaXM7CiAgICAgIGZvciAobGV0IG80ID0gbjgubGVuZ3RoIC0gMTsgbzQgPj0gMDsgbzQtLSkgewogICAgICAgIGxldCB7IGZyb21BOiBsNywgdG9BOiBoMTAsIGZyb21COiBhNCwgdG9COiBjMTcgfSA9IG44W280XSwgZjExID0gcjMubGluZUF0KGw3LCBEMy5CeVBvc05vSGVpZ2h0LCBlNSwgMCwgMCksIGQxNSA9IGYxMS50byA+PSBoMTAgPyBmMTEgOiByMy5saW5lQXQoaDEwLCBEMy5CeVBvc05vSGVpZ2h0LCBlNSwgMCwgMCk7CiAgICAgICAgZm9yIChjMTcgKz0gZDE1LnRvIC0gaDEwLCBoMTAgPSBkMTUudG87IG80ID4gMCAmJiBmMTEuZnJvbSA8PSBuOFtvNCAtIDFdLnRvQTsgKQogICAgICAgICAgbDcgPSBuOFtvNCAtIDFdLmZyb21BLCBhNCA9IG44W280IC0gMV0uZnJvbUIsIG80LS0sIGw3IDwgZjExLmZyb20gJiYgKGYxMSA9IHIzLmxpbmVBdChsNywgRDMuQnlQb3NOb0hlaWdodCwgZTUsIDAsIDApKTsKICAgICAgICBhNCArPSBmMTEuZnJvbSAtIGw3LCBsNyA9IGYxMS5mcm9tOwogICAgICAgIGxldCB1MTEgPSBJdC5idWlsZChpNCwgdDQsIGE0LCBjMTcpOwogICAgICAgIHIzID0gcjMucmVwbGFjZShsNywgaDEwLCB1MTEpOwogICAgICB9CiAgICAgIHJldHVybiByMy51cGRhdGVIZWlnaHQoaTQsIDApOwogICAgfQogICAgc3RhdGljIGVtcHR5KCkgewogICAgICByZXR1cm4gbmV3IFczKDAsIDApOwogICAgfQogICAgc3RhdGljIG9mKHQ0KSB7CiAgICAgIGlmICh0NC5sZW5ndGggPT0gMSkKICAgICAgICByZXR1cm4gdDRbMF07CiAgICAgIGxldCBlNSA9IDAsIGk0ID0gdDQubGVuZ3RoLCBuOCA9IDAsIHIzID0gMDsKICAgICAgZm9yICg7IDsgKQogICAgICAgIGlmIChlNSA9PSBpNCkKICAgICAgICAgIGlmIChuOCA+IHIzICogMikgewogICAgICAgICAgICBsZXQgbDcgPSB0NFtlNSAtIDFdOwogICAgICAgICAgICBsNy5icmVhayA/IHQ0LnNwbGljZSgtLWU1LCAxLCBsNy5sZWZ0LCBudWxsLCBsNy5yaWdodCkgOiB0NC5zcGxpY2UoLS1lNSwgMSwgbDcubGVmdCwgbDcucmlnaHQpLCBpNCArPSAxICsgbDcuYnJlYWssIG44IC09IGw3LnNpemU7CiAgICAgICAgICB9IGVsc2UgaWYgKHIzID4gbjggKiAyKSB7CiAgICAgICAgICAgIGxldCBsNyA9IHQ0W2k0XTsKICAgICAgICAgICAgbDcuYnJlYWsgPyB0NC5zcGxpY2UoaTQsIDEsIGw3LmxlZnQsIG51bGwsIGw3LnJpZ2h0KSA6IHQ0LnNwbGljZShpNCwgMSwgbDcubGVmdCwgbDcucmlnaHQpLCBpNCArPSAyICsgbDcuYnJlYWssIHIzIC09IGw3LnNpemU7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZWxzZSBpZiAobjggPCByMykgewogICAgICAgICAgbGV0IGw3ID0gdDRbZTUrK107CiAgICAgICAgICBsNyAmJiAobjggKz0gbDcuc2l6ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxldCBsNyA9IHQ0Wy0taTRdOwogICAgICAgICAgbDcgJiYgKHIzICs9IGw3LnNpemUpOwogICAgICAgIH0KICAgICAgbGV0IG80ID0gMDsKICAgICAgcmV0dXJuIHQ0W2U1IC0gMV0gPT0gbnVsbCA/IChvNCA9IDEsIGU1LS0pIDogdDRbZTVdID09IG51bGwgJiYgKG80ID0gMSwgaTQrKyksIG5ldyBKZTIoTjIub2YodDQuc2xpY2UoMCwgZTUpKSwgbzQsIE4yLm9mKHQ0LnNsaWNlKGk0KSkpOwogICAgfQogIH07CiAgTjIucHJvdG90eXBlLnNpemUgPSAxOwogIHZhciBtZTQgPSBjbGFzcyBleHRlbmRzIE4yIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgaTQpIHsKICAgICAgc3VwZXIodDQsIGU1KSwgdGhpcy50eXBlID0gaTQ7CiAgICB9CiAgICBibG9ja0F0KHQ0LCBlNSwgaTQsIG44KSB7CiAgICAgIHJldHVybiBuZXcgXzIobjgsIHRoaXMubGVuZ3RoLCBpNCwgdGhpcy5oZWlnaHQsIHRoaXMudHlwZSk7CiAgICB9CiAgICBsaW5lQXQodDQsIGU1LCBpNCwgbjgsIHIzKSB7CiAgICAgIHJldHVybiB0aGlzLmJsb2NrQXQoMCwgaTQsIG44LCByMyk7CiAgICB9CiAgICBmb3JFYWNoTGluZSh0NCwgZTUsIGk0LCBuOCwgcjMsIG80KSB7CiAgICAgIHQ0IDw9IHIzICsgdGhpcy5sZW5ndGggJiYgZTUgPj0gcjMgJiYgbzQodGhpcy5ibG9ja0F0KDAsIGk0LCBuOCwgcjMpKTsKICAgIH0KICAgIHVwZGF0ZUhlaWdodCh0NCwgZTUgPSAwLCBpNCA9IGZhbHNlLCBuOCkgewogICAgICByZXR1cm4gbjggJiYgbjguZnJvbSA8PSBlNSAmJiBuOC5tb3JlICYmIHRoaXMuc2V0SGVpZ2h0KHQ0LCBuOC5oZWlnaHRzW244LmluZGV4KytdKSwgdGhpcy5vdXRkYXRlZCA9IGZhbHNlLCB0aGlzOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiBgYmxvY2soJHt0aGlzLmxlbmd0aH0pYDsKICAgIH0KICB9OwogIHZhciBXMyA9IGNsYXNzIGV4dGVuZHMgbWU0IHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSkgewogICAgICBzdXBlcih0NCwgZTUsIFQzLlRleHQpLCB0aGlzLmNvbGxhcHNlZCA9IDAsIHRoaXMud2lkZ2V0SGVpZ2h0ID0gMDsKICAgIH0KICAgIHJlcGxhY2UodDQsIGU1LCBpNCkgewogICAgICBsZXQgbjggPSBpNFswXTsKICAgICAgcmV0dXJuIGk0Lmxlbmd0aCA9PSAxICYmIChuOCBpbnN0YW5jZW9mIFczIHx8IG44IGluc3RhbmNlb2YgRSAmJiBuOC5mbGFncyAmIDQpICYmIE1hdGguYWJzKHRoaXMubGVuZ3RoIC0gbjgubGVuZ3RoKSA8IDEwID8gKG44IGluc3RhbmNlb2YgRSA/IG44ID0gbmV3IFczKG44Lmxlbmd0aCwgdGhpcy5oZWlnaHQpIDogbjguaGVpZ2h0ID0gdGhpcy5oZWlnaHQsIHRoaXMub3V0ZGF0ZWQgfHwgKG44Lm91dGRhdGVkID0gZmFsc2UpLCBuOCkgOiBOMi5vZihpNCk7CiAgICB9CiAgICB1cGRhdGVIZWlnaHQodDQsIGU1ID0gMCwgaTQgPSBmYWxzZSwgbjgpIHsKICAgICAgcmV0dXJuIG44ICYmIG44LmZyb20gPD0gZTUgJiYgbjgubW9yZSA/IHRoaXMuc2V0SGVpZ2h0KHQ0LCBuOC5oZWlnaHRzW244LmluZGV4KytdKSA6IChpNCB8fCB0aGlzLm91dGRhdGVkKSAmJiB0aGlzLnNldEhlaWdodCh0NCwgTWF0aC5tYXgodGhpcy53aWRnZXRIZWlnaHQsIHQ0LmhlaWdodEZvckxpbmUodGhpcy5sZW5ndGggLSB0aGlzLmNvbGxhcHNlZCkpKSwgdGhpcy5vdXRkYXRlZCA9IGZhbHNlLCB0aGlzOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiBgbGluZSgke3RoaXMubGVuZ3RofSR7dGhpcy5jb2xsYXBzZWQgPyAtdGhpcy5jb2xsYXBzZWQgOiAiIn0ke3RoaXMud2lkZ2V0SGVpZ2h0ID8gIjoiICsgdGhpcy53aWRnZXRIZWlnaHQgOiAiIn0pYDsKICAgIH0KICB9OwogIHZhciBFID0gY2xhc3MgZXh0ZW5kcyBOMiB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICBzdXBlcih0NCwgMCk7CiAgICB9CiAgICBsaW5lcyh0NCwgZTUpIHsKICAgICAgbGV0IGk0ID0gdDQubGluZUF0KGU1KS5udW1iZXIsIG44ID0gdDQubGluZUF0KGU1ICsgdGhpcy5sZW5ndGgpLm51bWJlcjsKICAgICAgcmV0dXJuIHsgZmlyc3RMaW5lOiBpNCwgbGFzdExpbmU6IG44LCBsaW5lSGVpZ2h0OiB0aGlzLmhlaWdodCAvIChuOCAtIGk0ICsgMSkgfTsKICAgIH0KICAgIGJsb2NrQXQodDQsIGU1LCBpNCwgbjgpIHsKICAgICAgbGV0IHsgZmlyc3RMaW5lOiByMywgbGFzdExpbmU6IG80LCBsaW5lSGVpZ2h0OiBsNyB9ID0gdGhpcy5saW5lcyhlNSwgbjgpLCBoMTAgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihvNCAtIHIzLCBNYXRoLmZsb29yKCh0NCAtIGk0KSAvIGw3KSkpLCB7IGZyb206IGE0LCBsZW5ndGg6IGMxNyB9ID0gZTUubGluZShyMyArIGgxMCk7CiAgICAgIHJldHVybiBuZXcgXzIoYTQsIGMxNywgaTQgKyBsNyAqIGgxMCwgbDcsIFQzLlRleHQpOwogICAgfQogICAgbGluZUF0KHQ0LCBlNSwgaTQsIG44LCByMykgewogICAgICBpZiAoZTUgPT0gRDMuQnlIZWlnaHQpCiAgICAgICAgcmV0dXJuIHRoaXMuYmxvY2tBdCh0NCwgaTQsIG44LCByMyk7CiAgICAgIGlmIChlNSA9PSBEMy5CeVBvc05vSGVpZ2h0KSB7CiAgICAgICAgbGV0IHsgZnJvbTogZjExLCB0bzogZDE1IH0gPSBpNC5saW5lQXQodDQpOwogICAgICAgIHJldHVybiBuZXcgXzIoZjExLCBkMTUgLSBmMTEsIDAsIDAsIFQzLlRleHQpOwogICAgICB9CiAgICAgIGxldCB7IGZpcnN0TGluZTogbzQsIGxpbmVIZWlnaHQ6IGw3IH0gPSB0aGlzLmxpbmVzKGk0LCByMyksIHsgZnJvbTogaDEwLCBsZW5ndGg6IGE0LCBudW1iZXI6IGMxNyB9ID0gaTQubGluZUF0KHQ0KTsKICAgICAgcmV0dXJuIG5ldyBfMihoMTAsIGE0LCBuOCArIGw3ICogKGMxNyAtIG80KSwgbDcsIFQzLlRleHQpOwogICAgfQogICAgZm9yRWFjaExpbmUodDQsIGU1LCBpNCwgbjgsIHIzLCBvNCkgewogICAgICBsZXQgeyBmaXJzdExpbmU6IGw3LCBsaW5lSGVpZ2h0OiBoMTAgfSA9IHRoaXMubGluZXMoaTQsIHIzKTsKICAgICAgZm9yIChsZXQgYTQgPSBNYXRoLm1heCh0NCwgcjMpLCBjMTcgPSBNYXRoLm1pbihyMyArIHRoaXMubGVuZ3RoLCBlNSk7IGE0IDw9IGMxNzsgKSB7CiAgICAgICAgbGV0IGYxMSA9IGk0LmxpbmVBdChhNCk7CiAgICAgICAgYTQgPT0gdDQgJiYgKG44ICs9IGgxMCAqIChmMTEubnVtYmVyIC0gbDcpKSwgbzQobmV3IF8yKGYxMS5mcm9tLCBmMTEubGVuZ3RoLCBuOCwgaDEwLCBUMy5UZXh0KSksIG44ICs9IGgxMCwgYTQgPSBmMTEudG8gKyAxOwogICAgICB9CiAgICB9CiAgICByZXBsYWNlKHQ0LCBlNSwgaTQpIHsKICAgICAgbGV0IG44ID0gdGhpcy5sZW5ndGggLSBlNTsKICAgICAgaWYgKG44ID4gMCkgewogICAgICAgIGxldCByMyA9IGk0W2k0Lmxlbmd0aCAtIDFdOwogICAgICAgIHIzIGluc3RhbmNlb2YgRSA/IGk0W2k0Lmxlbmd0aCAtIDFdID0gbmV3IEUocjMubGVuZ3RoICsgbjgpIDogaTQucHVzaChudWxsLCBuZXcgRShuOCAtIDEpKTsKICAgICAgfQogICAgICBpZiAodDQgPiAwKSB7CiAgICAgICAgbGV0IHIzID0gaTRbMF07CiAgICAgICAgcjMgaW5zdGFuY2VvZiBFID8gaTRbMF0gPSBuZXcgRSh0NCArIHIzLmxlbmd0aCkgOiBpNC51bnNoaWZ0KG5ldyBFKHQ0IC0gMSksIG51bGwpOwogICAgICB9CiAgICAgIHJldHVybiBOMi5vZihpNCk7CiAgICB9CiAgICBkZWNvbXBvc2VMZWZ0KHQ0LCBlNSkgewogICAgICBlNS5wdXNoKG5ldyBFKHQ0IC0gMSksIG51bGwpOwogICAgfQogICAgZGVjb21wb3NlUmlnaHQodDQsIGU1KSB7CiAgICAgIGU1LnB1c2gobnVsbCwgbmV3IEUodGhpcy5sZW5ndGggLSB0NCAtIDEpKTsKICAgIH0KICAgIHVwZGF0ZUhlaWdodCh0NCwgZTUgPSAwLCBpNCA9IGZhbHNlLCBuOCkgewogICAgICBsZXQgcjMgPSBlNSArIHRoaXMubGVuZ3RoOwogICAgICBpZiAobjggJiYgbjguZnJvbSA8PSBlNSArIHRoaXMubGVuZ3RoICYmIG44Lm1vcmUpIHsKICAgICAgICBsZXQgbzQgPSBbXSwgbDcgPSBNYXRoLm1heChlNSwgbjguZnJvbSksIGgxMCA9IC0xLCBhNCA9IHQ0LmhlaWdodENoYW5nZWQ7CiAgICAgICAgZm9yIChuOC5mcm9tID4gZTUgJiYgbzQucHVzaChuZXcgRShuOC5mcm9tIC0gZTUgLSAxKS51cGRhdGVIZWlnaHQodDQsIGU1KSk7IGw3IDw9IHIzICYmIG44Lm1vcmU7ICkgewogICAgICAgICAgbGV0IGYxMSA9IHQ0LmRvYy5saW5lQXQobDcpLmxlbmd0aDsKICAgICAgICAgIG80Lmxlbmd0aCAmJiBvNC5wdXNoKG51bGwpOwogICAgICAgICAgbGV0IGQxNSA9IG44LmhlaWdodHNbbjguaW5kZXgrK107CiAgICAgICAgICBoMTAgPT0gLTEgPyBoMTAgPSBkMTUgOiBNYXRoLmFicyhkMTUgLSBoMTApID49IFF0ICYmIChoMTAgPSAtMik7CiAgICAgICAgICBsZXQgdTExID0gbmV3IFczKGYxMSwgZDE1KTsKICAgICAgICAgIHUxMS5vdXRkYXRlZCA9IGZhbHNlLCBvNC5wdXNoKHUxMSksIGw3ICs9IGYxMSArIDE7CiAgICAgICAgfQogICAgICAgIGw3IDw9IHIzICYmIG80LnB1c2gobnVsbCwgbmV3IEUocjMgLSBsNykudXBkYXRlSGVpZ2h0KHQ0LCBsNykpOwogICAgICAgIGxldCBjMTcgPSBOMi5vZihvNCk7CiAgICAgICAgcmV0dXJuIHQ0LmhlaWdodENoYW5nZWQgPSBhNCB8fCBoMTAgPCAwIHx8IE1hdGguYWJzKGMxNy5oZWlnaHQgLSB0aGlzLmhlaWdodCkgPj0gUXQgfHwgTWF0aC5hYnMoaDEwIC0gdGhpcy5saW5lcyh0NC5kb2MsIGU1KS5saW5lSGVpZ2h0KSA+PSBRdCwgYzE3OwogICAgICB9IGVsc2UKICAgICAgICAoaTQgfHwgdGhpcy5vdXRkYXRlZCkgJiYgKHRoaXMuc2V0SGVpZ2h0KHQ0LCB0NC5oZWlnaHRGb3JHYXAoZTUsIGU1ICsgdGhpcy5sZW5ndGgpKSwgdGhpcy5vdXRkYXRlZCA9IGZhbHNlKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICB0b1N0cmluZygpIHsKICAgICAgcmV0dXJuIGBnYXAoJHt0aGlzLmxlbmd0aH0pYDsKICAgIH0KICB9OwogIHZhciBKZTIgPSBjbGFzcyBleHRlbmRzIE4yIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgaTQpIHsKICAgICAgc3VwZXIodDQubGVuZ3RoICsgZTUgKyBpNC5sZW5ndGgsIHQ0LmhlaWdodCArIGk0LmhlaWdodCwgZTUgfCAodDQub3V0ZGF0ZWQgfHwgaTQub3V0ZGF0ZWQgPyAyIDogMCkpLCB0aGlzLmxlZnQgPSB0NCwgdGhpcy5yaWdodCA9IGk0LCB0aGlzLnNpemUgPSB0NC5zaXplICsgaTQuc2l6ZTsKICAgIH0KICAgIGdldCBicmVhaygpIHsKICAgICAgcmV0dXJuIHRoaXMuZmxhZ3MgJiAxOwogICAgfQogICAgYmxvY2tBdCh0NCwgZTUsIGk0LCBuOCkgewogICAgICBsZXQgcjMgPSBpNCArIHRoaXMubGVmdC5oZWlnaHQ7CiAgICAgIHJldHVybiB0NCA8IHIzID8gdGhpcy5sZWZ0LmJsb2NrQXQodDQsIGU1LCBpNCwgbjgpIDogdGhpcy5yaWdodC5ibG9ja0F0KHQ0LCBlNSwgcjMsIG44ICsgdGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMuYnJlYWspOwogICAgfQogICAgbGluZUF0KHQ0LCBlNSwgaTQsIG44LCByMykgewogICAgICBsZXQgbzQgPSBuOCArIHRoaXMubGVmdC5oZWlnaHQsIGw3ID0gcjMgKyB0aGlzLmxlZnQubGVuZ3RoICsgdGhpcy5icmVhaywgaDEwID0gZTUgPT0gRDMuQnlIZWlnaHQgPyB0NCA8IG80IDogdDQgPCBsNywgYTQgPSBoMTAgPyB0aGlzLmxlZnQubGluZUF0KHQ0LCBlNSwgaTQsIG44LCByMykgOiB0aGlzLnJpZ2h0LmxpbmVBdCh0NCwgZTUsIGk0LCBvNCwgbDcpOwogICAgICBpZiAodGhpcy5icmVhayB8fCAoaDEwID8gYTQudG8gPCBsNyA6IGE0LmZyb20gPiBsNykpCiAgICAgICAgcmV0dXJuIGE0OwogICAgICBsZXQgYzE3ID0gZTUgPT0gRDMuQnlQb3NOb0hlaWdodCA/IEQzLkJ5UG9zTm9IZWlnaHQgOiBEMy5CeVBvczsKICAgICAgcmV0dXJuIGgxMCA/IGE0LmpvaW4odGhpcy5yaWdodC5saW5lQXQobDcsIGMxNywgaTQsIG80LCBsNykpIDogdGhpcy5sZWZ0LmxpbmVBdChsNywgYzE3LCBpNCwgbjgsIHIzKS5qb2luKGE0KTsKICAgIH0KICAgIGZvckVhY2hMaW5lKHQ0LCBlNSwgaTQsIG44LCByMywgbzQpIHsKICAgICAgbGV0IGw3ID0gbjggKyB0aGlzLmxlZnQuaGVpZ2h0LCBoMTAgPSByMyArIHRoaXMubGVmdC5sZW5ndGggKyB0aGlzLmJyZWFrOwogICAgICBpZiAodGhpcy5icmVhaykKICAgICAgICB0NCA8IGgxMCAmJiB0aGlzLmxlZnQuZm9yRWFjaExpbmUodDQsIGU1LCBpNCwgbjgsIHIzLCBvNCksIGU1ID49IGgxMCAmJiB0aGlzLnJpZ2h0LmZvckVhY2hMaW5lKHQ0LCBlNSwgaTQsIGw3LCBoMTAsIG80KTsKICAgICAgZWxzZSB7CiAgICAgICAgbGV0IGE0ID0gdGhpcy5saW5lQXQoaDEwLCBEMy5CeVBvcywgaTQsIG44LCByMyk7CiAgICAgICAgdDQgPCBhNC5mcm9tICYmIHRoaXMubGVmdC5mb3JFYWNoTGluZSh0NCwgYTQuZnJvbSAtIDEsIGk0LCBuOCwgcjMsIG80KSwgYTQudG8gPj0gdDQgJiYgYTQuZnJvbSA8PSBlNSAmJiBvNChhNCksIGU1ID4gYTQudG8gJiYgdGhpcy5yaWdodC5mb3JFYWNoTGluZShhNC50byArIDEsIGU1LCBpNCwgbDcsIGgxMCwgbzQpOwogICAgICB9CiAgICB9CiAgICByZXBsYWNlKHQ0LCBlNSwgaTQpIHsKICAgICAgbGV0IG44ID0gdGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMuYnJlYWs7CiAgICAgIGlmIChlNSA8IG44KQogICAgICAgIHJldHVybiB0aGlzLmJhbGFuY2VkKHRoaXMubGVmdC5yZXBsYWNlKHQ0LCBlNSwgaTQpLCB0aGlzLnJpZ2h0KTsKICAgICAgaWYgKHQ0ID4gdGhpcy5sZWZ0Lmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcy5iYWxhbmNlZCh0aGlzLmxlZnQsIHRoaXMucmlnaHQucmVwbGFjZSh0NCAtIG44LCBlNSAtIG44LCBpNCkpOwogICAgICBsZXQgcjMgPSBbXTsKICAgICAgdDQgPiAwICYmIHRoaXMuZGVjb21wb3NlTGVmdCh0NCwgcjMpOwogICAgICBsZXQgbzQgPSByMy5sZW5ndGg7CiAgICAgIGZvciAobGV0IGw3IG9mIGk0KQogICAgICAgIHIzLnB1c2gobDcpOwogICAgICBpZiAodDQgPiAwICYmIGppKHIzLCBvNCAtIDEpLCBlNSA8IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgbGV0IGw3ID0gcjMubGVuZ3RoOwogICAgICAgIHRoaXMuZGVjb21wb3NlUmlnaHQoZTUsIHIzKSwgamkocjMsIGw3KTsKICAgICAgfQogICAgICByZXR1cm4gTjIub2YocjMpOwogICAgfQogICAgZGVjb21wb3NlTGVmdCh0NCwgZTUpIHsKICAgICAgbGV0IGk0ID0gdGhpcy5sZWZ0Lmxlbmd0aDsKICAgICAgaWYgKHQ0IDw9IGk0KQogICAgICAgIHJldHVybiB0aGlzLmxlZnQuZGVjb21wb3NlTGVmdCh0NCwgZTUpOwogICAgICBlNS5wdXNoKHRoaXMubGVmdCksIHRoaXMuYnJlYWsgJiYgKGk0KyssIHQ0ID49IGk0ICYmIGU1LnB1c2gobnVsbCkpLCB0NCA+IGk0ICYmIHRoaXMucmlnaHQuZGVjb21wb3NlTGVmdCh0NCAtIGk0LCBlNSk7CiAgICB9CiAgICBkZWNvbXBvc2VSaWdodCh0NCwgZTUpIHsKICAgICAgbGV0IGk0ID0gdGhpcy5sZWZ0Lmxlbmd0aCwgbjggPSBpNCArIHRoaXMuYnJlYWs7CiAgICAgIGlmICh0NCA+PSBuOCkKICAgICAgICByZXR1cm4gdGhpcy5yaWdodC5kZWNvbXBvc2VSaWdodCh0NCAtIG44LCBlNSk7CiAgICAgIHQ0IDwgaTQgJiYgdGhpcy5sZWZ0LmRlY29tcG9zZVJpZ2h0KHQ0LCBlNSksIHRoaXMuYnJlYWsgJiYgdDQgPCBuOCAmJiBlNS5wdXNoKG51bGwpLCBlNS5wdXNoKHRoaXMucmlnaHQpOwogICAgfQogICAgYmFsYW5jZWQodDQsIGU1KSB7CiAgICAgIHJldHVybiB0NC5zaXplID4gMiAqIGU1LnNpemUgfHwgZTUuc2l6ZSA+IDIgKiB0NC5zaXplID8gTjIub2YodGhpcy5icmVhayA/IFt0NCwgbnVsbCwgZTVdIDogW3Q0LCBlNV0pIDogKHRoaXMubGVmdCA9IHQ0LCB0aGlzLnJpZ2h0ID0gZTUsIHRoaXMuaGVpZ2h0ID0gdDQuaGVpZ2h0ICsgZTUuaGVpZ2h0LCB0aGlzLm91dGRhdGVkID0gdDQub3V0ZGF0ZWQgfHwgZTUub3V0ZGF0ZWQsIHRoaXMuc2l6ZSA9IHQ0LnNpemUgKyBlNS5zaXplLCB0aGlzLmxlbmd0aCA9IHQ0Lmxlbmd0aCArIHRoaXMuYnJlYWsgKyBlNS5sZW5ndGgsIHRoaXMpOwogICAgfQogICAgdXBkYXRlSGVpZ2h0KHQ0LCBlNSA9IDAsIGk0ID0gZmFsc2UsIG44KSB7CiAgICAgIGxldCB7IGxlZnQ6IHIzLCByaWdodDogbzQgfSA9IHRoaXMsIGw3ID0gZTUgKyByMy5sZW5ndGggKyB0aGlzLmJyZWFrLCBoMTAgPSBudWxsOwogICAgICByZXR1cm4gbjggJiYgbjguZnJvbSA8PSBlNSArIHIzLmxlbmd0aCAmJiBuOC5tb3JlID8gaDEwID0gcjMgPSByMy51cGRhdGVIZWlnaHQodDQsIGU1LCBpNCwgbjgpIDogcjMudXBkYXRlSGVpZ2h0KHQ0LCBlNSwgaTQpLCBuOCAmJiBuOC5mcm9tIDw9IGw3ICsgbzQubGVuZ3RoICYmIG44Lm1vcmUgPyBoMTAgPSBvNCA9IG80LnVwZGF0ZUhlaWdodCh0NCwgbDcsIGk0LCBuOCkgOiBvNC51cGRhdGVIZWlnaHQodDQsIGw3LCBpNCksIGgxMCA/IHRoaXMuYmFsYW5jZWQocjMsIG80KSA6ICh0aGlzLmhlaWdodCA9IHRoaXMubGVmdC5oZWlnaHQgKyB0aGlzLnJpZ2h0LmhlaWdodCwgdGhpcy5vdXRkYXRlZCA9IGZhbHNlLCB0aGlzKTsKICAgIH0KICAgIHRvU3RyaW5nKCkgewogICAgICByZXR1cm4gdGhpcy5sZWZ0ICsgKHRoaXMuYnJlYWsgPyAiICIgOiAiLSIpICsgdGhpcy5yaWdodDsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGppKHM4LCB0NCkgewogICAgbGV0IGU1LCBpNDsKICAgIHM4W3Q0XSA9PSBudWxsICYmIChlNSA9IHM4W3Q0IC0gMV0pIGluc3RhbmNlb2YgRSAmJiAoaTQgPSBzOFt0NCArIDFdKSBpbnN0YW5jZW9mIEUgJiYgczguc3BsaWNlKHQ0IC0gMSwgMywgbmV3IEUoZTUubGVuZ3RoICsgMSArIGk0Lmxlbmd0aCkpOwogIH0KICB2YXIgdHIgPSA1OwogIHZhciBJdCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSkgewogICAgICB0aGlzLnBvcyA9IHQ0LCB0aGlzLm9yYWNsZSA9IGU1LCB0aGlzLm5vZGVzID0gW10sIHRoaXMubGluZVN0YXJ0ID0gLTEsIHRoaXMubGluZUVuZCA9IC0xLCB0aGlzLmNvdmVyaW5nID0gbnVsbCwgdGhpcy53cml0dGVuVG8gPSB0NDsKICAgIH0KICAgIGdldCBpc0NvdmVyZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLmNvdmVyaW5nICYmIHRoaXMubm9kZXNbdGhpcy5ub2Rlcy5sZW5ndGggLSAxXSA9PSB0aGlzLmNvdmVyaW5nOwogICAgfQogICAgc3Bhbih0NCwgZTUpIHsKICAgICAgaWYgKHRoaXMubGluZVN0YXJ0ID4gLTEpIHsKICAgICAgICBsZXQgaTQgPSBNYXRoLm1pbihlNSwgdGhpcy5saW5lRW5kKSwgbjggPSB0aGlzLm5vZGVzW3RoaXMubm9kZXMubGVuZ3RoIC0gMV07CiAgICAgICAgbjggaW5zdGFuY2VvZiBXMyA/IG44Lmxlbmd0aCArPSBpNCAtIHRoaXMucG9zIDogKGk0ID4gdGhpcy5wb3MgfHwgIXRoaXMuaXNDb3ZlcmVkKSAmJiB0aGlzLm5vZGVzLnB1c2gobmV3IFczKGk0IC0gdGhpcy5wb3MsIC0xKSksIHRoaXMud3JpdHRlblRvID0gaTQsIGU1ID4gaTQgJiYgKHRoaXMubm9kZXMucHVzaChudWxsKSwgdGhpcy53cml0dGVuVG8rKywgdGhpcy5saW5lU3RhcnQgPSAtMSk7CiAgICAgIH0KICAgICAgdGhpcy5wb3MgPSBlNTsKICAgIH0KICAgIHBvaW50KHQ0LCBlNSwgaTQpIHsKICAgICAgaWYgKHQ0IDwgZTUgfHwgaTQuaGVpZ2h0UmVsZXZhbnQpIHsKICAgICAgICBsZXQgbjggPSBpNC53aWRnZXQgPyBpNC53aWRnZXQuZXN0aW1hdGVkSGVpZ2h0IDogMDsKICAgICAgICBuOCA8IDAgJiYgKG44ID0gdGhpcy5vcmFjbGUubGluZUhlaWdodCk7CiAgICAgICAgbGV0IHIzID0gZTUgLSB0NDsKICAgICAgICBpNC5ibG9jayA/IHRoaXMuYWRkQmxvY2sobmV3IG1lNChyMywgbjgsIGk0LnR5cGUpKSA6IChyMyB8fCBuOCA+PSB0cikgJiYgdGhpcy5hZGRMaW5lRGVjbyhuOCwgcjMpOwogICAgICB9IGVsc2UKICAgICAgICBlNSA+IHQ0ICYmIHRoaXMuc3Bhbih0NCwgZTUpOwogICAgICB0aGlzLmxpbmVFbmQgPiAtMSAmJiB0aGlzLmxpbmVFbmQgPCB0aGlzLnBvcyAmJiAodGhpcy5saW5lRW5kID0gdGhpcy5vcmFjbGUuZG9jLmxpbmVBdCh0aGlzLnBvcykudG8pOwogICAgfQogICAgZW50ZXJMaW5lKCkgewogICAgICBpZiAodGhpcy5saW5lU3RhcnQgPiAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGxldCB7IGZyb206IHQ0LCB0bzogZTUgfSA9IHRoaXMub3JhY2xlLmRvYy5saW5lQXQodGhpcy5wb3MpOwogICAgICB0aGlzLmxpbmVTdGFydCA9IHQ0LCB0aGlzLmxpbmVFbmQgPSBlNSwgdGhpcy53cml0dGVuVG8gPCB0NCAmJiAoKHRoaXMud3JpdHRlblRvIDwgdDQgLSAxIHx8IHRoaXMubm9kZXNbdGhpcy5ub2Rlcy5sZW5ndGggLSAxXSA9PSBudWxsKSAmJiB0aGlzLm5vZGVzLnB1c2godGhpcy5ibGFua0NvbnRlbnQodGhpcy53cml0dGVuVG8sIHQ0IC0gMSkpLCB0aGlzLm5vZGVzLnB1c2gobnVsbCkpLCB0aGlzLnBvcyA+IHQ0ICYmIHRoaXMubm9kZXMucHVzaChuZXcgVzModGhpcy5wb3MgLSB0NCwgLTEpKSwgdGhpcy53cml0dGVuVG8gPSB0aGlzLnBvczsKICAgIH0KICAgIGJsYW5rQ29udGVudCh0NCwgZTUpIHsKICAgICAgbGV0IGk0ID0gbmV3IEUoZTUgLSB0NCk7CiAgICAgIHJldHVybiB0aGlzLm9yYWNsZS5kb2MubGluZUF0KHQ0KS50byA9PSBlNSAmJiAoaTQuZmxhZ3MgfD0gNCksIGk0OwogICAgfQogICAgZW5zdXJlTGluZSgpIHsKICAgICAgdGhpcy5lbnRlckxpbmUoKTsKICAgICAgbGV0IHQ0ID0gdGhpcy5ub2Rlcy5sZW5ndGggPyB0aGlzLm5vZGVzW3RoaXMubm9kZXMubGVuZ3RoIC0gMV0gOiBudWxsOwogICAgICBpZiAodDQgaW5zdGFuY2VvZiBXMykKICAgICAgICByZXR1cm4gdDQ7CiAgICAgIGxldCBlNSA9IG5ldyBXMygwLCAtMSk7CiAgICAgIHJldHVybiB0aGlzLm5vZGVzLnB1c2goZTUpLCBlNTsKICAgIH0KICAgIGFkZEJsb2NrKHQ0KSB7CiAgICAgIHRoaXMuZW50ZXJMaW5lKCksIHQ0LnR5cGUgPT0gVDMuV2lkZ2V0QWZ0ZXIgJiYgIXRoaXMuaXNDb3ZlcmVkICYmIHRoaXMuZW5zdXJlTGluZSgpLCB0aGlzLm5vZGVzLnB1c2godDQpLCB0aGlzLndyaXR0ZW5UbyA9IHRoaXMucG9zID0gdGhpcy5wb3MgKyB0NC5sZW5ndGgsIHQ0LnR5cGUgIT0gVDMuV2lkZ2V0QmVmb3JlICYmICh0aGlzLmNvdmVyaW5nID0gdDQpOwogICAgfQogICAgYWRkTGluZURlY28odDQsIGU1KSB7CiAgICAgIGxldCBpNCA9IHRoaXMuZW5zdXJlTGluZSgpOwogICAgICBpNC5sZW5ndGggKz0gZTUsIGk0LmNvbGxhcHNlZCArPSBlNSwgaTQud2lkZ2V0SGVpZ2h0ID0gTWF0aC5tYXgoaTQud2lkZ2V0SGVpZ2h0LCB0NCksIHRoaXMud3JpdHRlblRvID0gdGhpcy5wb3MgPSB0aGlzLnBvcyArIGU1OwogICAgfQogICAgZmluaXNoKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMubm9kZXMubGVuZ3RoID09IDAgPyBudWxsIDogdGhpcy5ub2Rlc1t0aGlzLm5vZGVzLmxlbmd0aCAtIDFdOwogICAgICB0aGlzLmxpbmVTdGFydCA+IC0xICYmICEoZTUgaW5zdGFuY2VvZiBXMykgJiYgIXRoaXMuaXNDb3ZlcmVkID8gdGhpcy5ub2Rlcy5wdXNoKG5ldyBXMygwLCAtMSkpIDogKHRoaXMud3JpdHRlblRvIDwgdGhpcy5wb3MgfHwgZTUgPT0gbnVsbCkgJiYgdGhpcy5ub2Rlcy5wdXNoKHRoaXMuYmxhbmtDb250ZW50KHRoaXMud3JpdHRlblRvLCB0aGlzLnBvcykpOwogICAgICBsZXQgaTQgPSB0NDsKICAgICAgZm9yIChsZXQgbjggb2YgdGhpcy5ub2RlcykKICAgICAgICBuOCBpbnN0YW5jZW9mIFczICYmIG44LnVwZGF0ZUhlaWdodCh0aGlzLm9yYWNsZSwgaTQpLCBpNCArPSBuOCA/IG44Lmxlbmd0aCA6IDE7CiAgICAgIHJldHVybiB0aGlzLm5vZGVzOwogICAgfQogICAgc3RhdGljIGJ1aWxkKHQ0LCBlNSwgaTQsIG44KSB7CiAgICAgIGxldCByMyA9IG5ldyBJdChpNCwgdDQpOwogICAgICByZXR1cm4gUC5zcGFucyhlNSwgaTQsIG44LCByMywgMCksIHIzLmZpbmlzaChpNCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBlcihzOCwgdDQsIGU1KSB7CiAgICBsZXQgaTQgPSBuZXcgWmUyKCk7CiAgICByZXR1cm4gUC5jb21wYXJlKHM4LCB0NCwgZTUsIGk0LCAwKSwgaTQuY2hhbmdlczsKICB9CiAgdmFyIFplMiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aGlzLmNoYW5nZXMgPSBbXTsKICAgIH0KICAgIGNvbXBhcmVSYW5nZSgpIHsKICAgIH0KICAgIGNvbXBhcmVQb2ludCh0NCwgZTUsIGk0LCBuOCkgewogICAgICAodDQgPCBlNSB8fCBpNCAmJiBpNC5oZWlnaHRSZWxldmFudCB8fCBuOCAmJiBuOC5oZWlnaHRSZWxldmFudCkgJiYgemUyKHQ0LCBlNSwgdGhpcy5jaGFuZ2VzLCA1KTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGlyKHM4LCB0NCkgewogICAgbGV0IGU1ID0gczguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGk0ID0gczgub3duZXJEb2N1bWVudCwgbjggPSBpNC5kZWZhdWx0VmlldyB8fCB3aW5kb3csIHIzID0gTWF0aC5tYXgoMCwgZTUubGVmdCksIG80ID0gTWF0aC5taW4objguaW5uZXJXaWR0aCwgZTUucmlnaHQpLCBsNyA9IE1hdGgubWF4KDAsIGU1LnRvcCksIGgxMCA9IE1hdGgubWluKG44LmlubmVySGVpZ2h0LCBlNS5ib3R0b20pOwogICAgZm9yIChsZXQgYTQgPSBzOC5wYXJlbnROb2RlOyBhNCAmJiBhNCAhPSBpNC5ib2R5OyApCiAgICAgIGlmIChhNC5ub2RlVHlwZSA9PSAxKSB7CiAgICAgICAgbGV0IGMxNyA9IGE0LCBmMTEgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjMTcpOwogICAgICAgIGlmICgoYzE3LnNjcm9sbEhlaWdodCA+IGMxNy5jbGllbnRIZWlnaHQgfHwgYzE3LnNjcm9sbFdpZHRoID4gYzE3LmNsaWVudFdpZHRoKSAmJiBmMTEub3ZlcmZsb3cgIT0gInZpc2libGUiKSB7CiAgICAgICAgICBsZXQgZDE1ID0gYzE3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgcjMgPSBNYXRoLm1heChyMywgZDE1LmxlZnQpLCBvNCA9IE1hdGgubWluKG80LCBkMTUucmlnaHQpLCBsNyA9IE1hdGgubWF4KGw3LCBkMTUudG9wKSwgaDEwID0gYTQgPT0gczgucGFyZW50Tm9kZSA/IGQxNS5ib3R0b20gOiBNYXRoLm1pbihoMTAsIGQxNS5ib3R0b20pOwogICAgICAgIH0KICAgICAgICBhNCA9IGYxMS5wb3NpdGlvbiA9PSAiYWJzb2x1dGUiIHx8IGYxMS5wb3NpdGlvbiA9PSAiZml4ZWQiID8gYzE3Lm9mZnNldFBhcmVudCA6IGMxNy5wYXJlbnROb2RlOwogICAgICB9IGVsc2UgaWYgKGE0Lm5vZGVUeXBlID09IDExKQogICAgICAgIGE0ID0gYTQuaG9zdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgcmV0dXJuIHsgbGVmdDogcjMgLSBlNS5sZWZ0LCByaWdodDogTWF0aC5tYXgocjMsIG80KSAtIGU1LmxlZnQsIHRvcDogbDcgLSAoZTUudG9wICsgdDQpLCBib3R0b206IE1hdGgubWF4KGw3LCBoMTApIC0gKGU1LnRvcCArIHQ0KSB9OwogIH0KICBmdW5jdGlvbiBzcihzOCwgdDQpIHsKICAgIGxldCBlNSA9IHM4LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgcmV0dXJuIHsgbGVmdDogMCwgcmlnaHQ6IGU1LnJpZ2h0IC0gZTUubGVmdCwgdG9wOiB0NCwgYm90dG9tOiBlNS5ib3R0b20gLSAoZTUudG9wICsgdDQpIH07CiAgfQogIHZhciBQdCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgaTQpIHsKICAgICAgdGhpcy5mcm9tID0gdDQsIHRoaXMudG8gPSBlNSwgdGhpcy5zaXplID0gaTQ7CiAgICB9CiAgICBzdGF0aWMgc2FtZSh0NCwgZTUpIHsKICAgICAgaWYgKHQ0Lmxlbmd0aCAhPSBlNS5sZW5ndGgpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgdDQubGVuZ3RoOyBpNCsrKSB7CiAgICAgICAgbGV0IG44ID0gdDRbaTRdLCByMyA9IGU1W2k0XTsKICAgICAgICBpZiAobjguZnJvbSAhPSByMy5mcm9tIHx8IG44LnRvICE9IHIzLnRvIHx8IG44LnNpemUgIT0gcjMuc2l6ZSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGRyYXcodDQpIHsKICAgICAgcmV0dXJuIGsucmVwbGFjZSh7IHdpZGdldDogbmV3IFFlMih0aGlzLnNpemUsIHQ0KSB9KS5yYW5nZSh0aGlzLmZyb20sIHRoaXMudG8pOwogICAgfQogIH07CiAgdmFyIFFlMiA9IGNsYXNzIGV4dGVuZHMgWDQgewogICAgY29uc3RydWN0b3IodDQsIGU1KSB7CiAgICAgIHN1cGVyKCksIHRoaXMuc2l6ZSA9IHQ0LCB0aGlzLnZlcnRpY2FsID0gZTU7CiAgICB9CiAgICBlcSh0NCkgewogICAgICByZXR1cm4gdDQuc2l6ZSA9PSB0aGlzLnNpemUgJiYgdDQudmVydGljYWwgPT0gdGhpcy52ZXJ0aWNhbDsKICAgIH0KICAgIHRvRE9NKCkgewogICAgICBsZXQgdDQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgcmV0dXJuIHRoaXMudmVydGljYWwgPyB0NC5zdHlsZS5oZWlnaHQgPSB0aGlzLnNpemUgKyAicHgiIDogKHQ0LnN0eWxlLndpZHRoID0gdGhpcy5zaXplICsgInB4IiwgdDQuc3R5bGUuaGVpZ2h0ID0gIjJweCIsIHQ0LnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIiksIHQ0OwogICAgfQogICAgZ2V0IGVzdGltYXRlZEhlaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMudmVydGljYWwgPyB0aGlzLnNpemUgOiAtMTsKICAgIH0KICB9OwogIHZhciBnZTQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICB0aGlzLnN0YXRlID0gdDQsIHRoaXMucGl4ZWxWaWV3cG9ydCA9IHsgbGVmdDogMCwgcmlnaHQ6IHdpbmRvdy5pbm5lcldpZHRoLCB0b3A6IDAsIGJvdHRvbTogMCB9LCB0aGlzLmluVmlldyA9IHRydWUsIHRoaXMucGFkZGluZ1RvcCA9IDAsIHRoaXMucGFkZGluZ0JvdHRvbSA9IDAsIHRoaXMuY29udGVudERPTVdpZHRoID0gMCwgdGhpcy5jb250ZW50RE9NSGVpZ2h0ID0gMCwgdGhpcy5lZGl0b3JIZWlnaHQgPSAwLCB0aGlzLmVkaXRvcldpZHRoID0gMCwgdGhpcy5oZWlnaHRPcmFjbGUgPSBuZXcgdWUzKCksIHRoaXMuc2NhbGVyID0gJGksIHRoaXMuc2Nyb2xsVGFyZ2V0ID0gbnVsbCwgdGhpcy5wcmludGluZyA9IGZhbHNlLCB0aGlzLm11c3RNZWFzdXJlQ29udGVudCA9IHRydWUsIHRoaXMuZGVmYXVsdFRleHREaXJlY3Rpb24gPSBSMi5SVEwsIHRoaXMudmlzaWJsZVJhbmdlcyA9IFtdLCB0aGlzLm11c3RFbmZvcmNlQ3Vyc29yQXNzb2MgPSBmYWxzZSwgdGhpcy5zdGF0ZURlY28gPSB0NC5mYWNldCh6dCkuZmlsdGVyKChlNSkgPT4gdHlwZW9mIGU1ICE9ICJmdW5jdGlvbiIpLCB0aGlzLmhlaWdodE1hcCA9IE4yLmVtcHR5KCkuYXBwbHlDaGFuZ2VzKHRoaXMuc3RhdGVEZWNvLCB2LmVtcHR5LCB0aGlzLmhlaWdodE9yYWNsZS5zZXREb2ModDQuZG9jKSwgW25ldyBJMigwLCAwLCAwLCB0NC5kb2MubGVuZ3RoKV0pLCB0aGlzLnZpZXdwb3J0ID0gdGhpcy5nZXRWaWV3cG9ydCgwLCBudWxsKSwgdGhpcy51cGRhdGVWaWV3cG9ydExpbmVzKCksIHRoaXMudXBkYXRlRm9yVmlld3BvcnQoKSwgdGhpcy5saW5lR2FwcyA9IHRoaXMuZW5zdXJlTGluZUdhcHMoW10pLCB0aGlzLmxpbmVHYXBEZWNvID0gay5zZXQodGhpcy5saW5lR2Fwcy5tYXAoKGU1KSA9PiBlNS5kcmF3KGZhbHNlKSkpLCB0aGlzLmNvbXB1dGVWaXNpYmxlUmFuZ2VzKCk7CiAgICB9CiAgICB1cGRhdGVGb3JWaWV3cG9ydCgpIHsKICAgICAgbGV0IHQ0ID0gW3RoaXMudmlld3BvcnRdLCB7IG1haW46IGU1IH0gPSB0aGlzLnN0YXRlLnNlbGVjdGlvbjsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8PSAxOyBpNCsrKSB7CiAgICAgICAgbGV0IG44ID0gaTQgPyBlNS5oZWFkIDogZTUuYW5jaG9yOwogICAgICAgIGlmICghdDQuc29tZSgoeyBmcm9tOiByMywgdG86IG80IH0pID0+IG44ID49IHIzICYmIG44IDw9IG80KSkgewogICAgICAgICAgbGV0IHsgZnJvbTogcjMsIHRvOiBvNCB9ID0gdGhpcy5saW5lQmxvY2tBdChuOCk7CiAgICAgICAgICB0NC5wdXNoKG5ldyB1dChyMywgbzQpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy52aWV3cG9ydHMgPSB0NC5zb3J0KChpNCwgbjgpID0+IGk0LmZyb20gLSBuOC5mcm9tKSwgdGhpcy5zY2FsZXIgPSB0aGlzLmhlaWdodE1hcC5oZWlnaHQgPD0gN2U2ID8gJGkgOiBuZXcgdGkodGhpcy5oZWlnaHRPcmFjbGUuZG9jLCB0aGlzLmhlaWdodE1hcCwgdGhpcy52aWV3cG9ydHMpOwogICAgfQogICAgdXBkYXRlVmlld3BvcnRMaW5lcygpIHsKICAgICAgdGhpcy52aWV3cG9ydExpbmVzID0gW10sIHRoaXMuaGVpZ2h0TWFwLmZvckVhY2hMaW5lKHRoaXMudmlld3BvcnQuZnJvbSwgdGhpcy52aWV3cG9ydC50bywgdGhpcy5zdGF0ZS5kb2MsIDAsIDAsICh0NCkgPT4gewogICAgICAgIHRoaXMudmlld3BvcnRMaW5lcy5wdXNoKHRoaXMuc2NhbGVyLnNjYWxlID09IDEgPyB0NCA6IFR0KHQ0LCB0aGlzLnNjYWxlcikpOwogICAgICB9KTsKICAgIH0KICAgIHVwZGF0ZSh0NCwgZTUgPSBudWxsKSB7CiAgICAgIHRoaXMuc3RhdGUgPSB0NC5zdGF0ZTsKICAgICAgbGV0IGk0ID0gdGhpcy5zdGF0ZURlY287CiAgICAgIHRoaXMuc3RhdGVEZWNvID0gdGhpcy5zdGF0ZS5mYWNldCh6dCkuZmlsdGVyKChhNCkgPT4gdHlwZW9mIGE0ICE9ICJmdW5jdGlvbiIpOwogICAgICBsZXQgbjggPSB0NC5jaGFuZ2VkUmFuZ2VzLCByMyA9IEkyLmV4dGVuZFdpdGhSYW5nZXMobjgsIGVyKGk0LCB0aGlzLnN0YXRlRGVjbywgdDQgPyB0NC5jaGFuZ2VzIDogeC5lbXB0eSh0aGlzLnN0YXRlLmRvYy5sZW5ndGgpKSksIG80ID0gdGhpcy5oZWlnaHRNYXAuaGVpZ2h0OwogICAgICB0aGlzLmhlaWdodE1hcCA9IHRoaXMuaGVpZ2h0TWFwLmFwcGx5Q2hhbmdlcyh0aGlzLnN0YXRlRGVjbywgdDQuc3RhcnRTdGF0ZS5kb2MsIHRoaXMuaGVpZ2h0T3JhY2xlLnNldERvYyh0aGlzLnN0YXRlLmRvYyksIHIzKSwgdGhpcy5oZWlnaHRNYXAuaGVpZ2h0ICE9IG80ICYmICh0NC5mbGFncyB8PSAyKTsKICAgICAgbGV0IGw3ID0gcjMubGVuZ3RoID8gdGhpcy5tYXBWaWV3cG9ydCh0aGlzLnZpZXdwb3J0LCB0NC5jaGFuZ2VzKSA6IHRoaXMudmlld3BvcnQ7CiAgICAgIChlNSAmJiAoZTUucmFuZ2UuaGVhZCA8IGw3LmZyb20gfHwgZTUucmFuZ2UuaGVhZCA+IGw3LnRvKSB8fCAhdGhpcy52aWV3cG9ydElzQXBwcm9wcmlhdGUobDcpKSAmJiAobDcgPSB0aGlzLmdldFZpZXdwb3J0KDAsIGU1KSk7CiAgICAgIGxldCBoMTAgPSAhdDQuY2hhbmdlcy5lbXB0eSB8fCB0NC5mbGFncyAmIDIgfHwgbDcuZnJvbSAhPSB0aGlzLnZpZXdwb3J0LmZyb20gfHwgbDcudG8gIT0gdGhpcy52aWV3cG9ydC50bzsKICAgICAgdGhpcy52aWV3cG9ydCA9IGw3LCB0aGlzLnVwZGF0ZUZvclZpZXdwb3J0KCksIGgxMCAmJiB0aGlzLnVwZGF0ZVZpZXdwb3J0TGluZXMoKSwgKHRoaXMubGluZUdhcHMubGVuZ3RoIHx8IHRoaXMudmlld3BvcnQudG8gLSB0aGlzLnZpZXdwb3J0LmZyb20gPiAyZTMgPDwgMSkgJiYgdGhpcy51cGRhdGVMaW5lR2Fwcyh0aGlzLmVuc3VyZUxpbmVHYXBzKHRoaXMubWFwTGluZUdhcHModGhpcy5saW5lR2FwcywgdDQuY2hhbmdlcykpKSwgdDQuZmxhZ3MgfD0gdGhpcy5jb21wdXRlVmlzaWJsZVJhbmdlcygpLCBlNSAmJiAodGhpcy5zY3JvbGxUYXJnZXQgPSBlNSksICF0aGlzLm11c3RFbmZvcmNlQ3Vyc29yQXNzb2MgJiYgdDQuc2VsZWN0aW9uU2V0ICYmIHQ0LnZpZXcubGluZVdyYXBwaW5nICYmIHQ0LnN0YXRlLnNlbGVjdGlvbi5tYWluLmVtcHR5ICYmIHQ0LnN0YXRlLnNlbGVjdGlvbi5tYWluLmFzc29jICYmICh0aGlzLm11c3RFbmZvcmNlQ3Vyc29yQXNzb2MgPSB0cnVlKTsKICAgIH0KICAgIG1lYXN1cmUodDQpIHsKICAgICAgbGV0IGU1ID0gdDQuY29udGVudERPTSwgaTQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlNSksIG44ID0gdGhpcy5oZWlnaHRPcmFjbGUsIHIzID0gaTQud2hpdGVTcGFjZTsKICAgICAgdGhpcy5kZWZhdWx0VGV4dERpcmVjdGlvbiA9IGk0LmRpcmVjdGlvbiA9PSAicnRsIiA/IFIyLlJUTCA6IFIyLkxUUjsKICAgICAgbGV0IG80ID0gdGhpcy5oZWlnaHRPcmFjbGUubXVzdFJlZnJlc2hGb3JXcmFwcGluZyhyMyksIGw3ID0gbzQgfHwgdGhpcy5tdXN0TWVhc3VyZUNvbnRlbnQgfHwgdGhpcy5jb250ZW50RE9NSGVpZ2h0ICE9IGU1LmNsaWVudEhlaWdodDsKICAgICAgdGhpcy5jb250ZW50RE9NSGVpZ2h0ID0gZTUuY2xpZW50SGVpZ2h0LCB0aGlzLm11c3RNZWFzdXJlQ29udGVudCA9IGZhbHNlOwogICAgICBsZXQgaDEwID0gMCwgYTQgPSAwLCBjMTcgPSBwYXJzZUludChpNC5wYWRkaW5nVG9wKSB8fCAwLCBmMTEgPSBwYXJzZUludChpNC5wYWRkaW5nQm90dG9tKSB8fCAwOwogICAgICAodGhpcy5wYWRkaW5nVG9wICE9IGMxNyB8fCB0aGlzLnBhZGRpbmdCb3R0b20gIT0gZjExKSAmJiAodGhpcy5wYWRkaW5nVG9wID0gYzE3LCB0aGlzLnBhZGRpbmdCb3R0b20gPSBmMTEsIGgxMCB8PSAxMCksIHRoaXMuZWRpdG9yV2lkdGggIT0gdDQuc2Nyb2xsRE9NLmNsaWVudFdpZHRoICYmIChuOC5saW5lV3JhcHBpbmcgJiYgKGw3ID0gdHJ1ZSksIHRoaXMuZWRpdG9yV2lkdGggPSB0NC5zY3JvbGxET00uY2xpZW50V2lkdGgsIGgxMCB8PSA4KTsKICAgICAgbGV0IGQxNSA9ICh0aGlzLnByaW50aW5nID8gc3IgOiBpcikoZTUsIHRoaXMucGFkZGluZ1RvcCksIHUxMSA9IGQxNS50b3AgLSB0aGlzLnBpeGVsVmlld3BvcnQudG9wLCBwMTggPSBkMTUuYm90dG9tIC0gdGhpcy5waXhlbFZpZXdwb3J0LmJvdHRvbTsKICAgICAgdGhpcy5waXhlbFZpZXdwb3J0ID0gZDE1OwogICAgICBsZXQgYjI1ID0gdGhpcy5waXhlbFZpZXdwb3J0LmJvdHRvbSA+IHRoaXMucGl4ZWxWaWV3cG9ydC50b3AgJiYgdGhpcy5waXhlbFZpZXdwb3J0LnJpZ2h0ID4gdGhpcy5waXhlbFZpZXdwb3J0LmxlZnQ7CiAgICAgIGlmIChiMjUgIT0gdGhpcy5pblZpZXcgJiYgKHRoaXMuaW5WaWV3ID0gYjI1LCBiMjUgJiYgKGw3ID0gdHJ1ZSkpLCAhdGhpcy5pblZpZXcgJiYgIXRoaXMuc2Nyb2xsVGFyZ2V0KQogICAgICAgIHJldHVybiAwOwogICAgICBsZXQgbTIzID0gZTUuY2xpZW50V2lkdGg7CiAgICAgIGlmICgodGhpcy5jb250ZW50RE9NV2lkdGggIT0gbTIzIHx8IHRoaXMuZWRpdG9ySGVpZ2h0ICE9IHQ0LnNjcm9sbERPTS5jbGllbnRIZWlnaHQpICYmICh0aGlzLmNvbnRlbnRET01XaWR0aCA9IG0yMywgdGhpcy5lZGl0b3JIZWlnaHQgPSB0NC5zY3JvbGxET00uY2xpZW50SGVpZ2h0LCBoMTAgfD0gOCksIGw3KSB7CiAgICAgICAgbGV0IFMyMSA9IHQ0LmRvY1ZpZXcubWVhc3VyZVZpc2libGVMaW5lSGVpZ2h0cyh0aGlzLnZpZXdwb3J0KTsKICAgICAgICBpZiAobjgubXVzdFJlZnJlc2hGb3JIZWlnaHRzKFMyMSkgJiYgKG80ID0gdHJ1ZSksIG80IHx8IG44LmxpbmVXcmFwcGluZyAmJiBNYXRoLmFicyhtMjMgLSB0aGlzLmNvbnRlbnRET01XaWR0aCkgPiBuOC5jaGFyV2lkdGgpIHsKICAgICAgICAgIGxldCB7IGxpbmVIZWlnaHQ6IHcyMSwgY2hhcldpZHRoOiB2MTUgfSA9IHQ0LmRvY1ZpZXcubWVhc3VyZVRleHRTaXplKCk7CiAgICAgICAgICBvNCA9IG44LnJlZnJlc2gocjMsIHcyMSwgdjE1LCBtMjMgLyB2MTUsIFMyMSksIG80ICYmICh0NC5kb2NWaWV3Lm1pbldpZHRoID0gMCwgaDEwIHw9IDgpOwogICAgICAgIH0KICAgICAgICB1MTEgPiAwICYmIHAxOCA+IDAgPyBhNCA9IE1hdGgubWF4KHUxMSwgcDE4KSA6IHUxMSA8IDAgJiYgcDE4IDwgMCAmJiAoYTQgPSBNYXRoLm1pbih1MTEsIHAxOCkpLCBuOC5oZWlnaHRDaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgZm9yIChsZXQgdzIxIG9mIHRoaXMudmlld3BvcnRzKSB7CiAgICAgICAgICBsZXQgdjE1ID0gdzIxLmZyb20gPT0gdGhpcy52aWV3cG9ydC5mcm9tID8gUzIxIDogdDQuZG9jVmlldy5tZWFzdXJlVmlzaWJsZUxpbmVIZWlnaHRzKHcyMSk7CiAgICAgICAgICB0aGlzLmhlaWdodE1hcCA9IHRoaXMuaGVpZ2h0TWFwLnVwZGF0ZUhlaWdodChuOCwgMCwgbzQsIG5ldyBwZTQodzIxLmZyb20sIHYxNSkpOwogICAgICAgIH0KICAgICAgICBuOC5oZWlnaHRDaGFuZ2VkICYmIChoMTAgfD0gMik7CiAgICAgIH0KICAgICAgbGV0IGcxMiA9ICF0aGlzLnZpZXdwb3J0SXNBcHByb3ByaWF0ZSh0aGlzLnZpZXdwb3J0LCBhNCkgfHwgdGhpcy5zY3JvbGxUYXJnZXQgJiYgKHRoaXMuc2Nyb2xsVGFyZ2V0LnJhbmdlLmhlYWQgPCB0aGlzLnZpZXdwb3J0LmZyb20gfHwgdGhpcy5zY3JvbGxUYXJnZXQucmFuZ2UuaGVhZCA+IHRoaXMudmlld3BvcnQudG8pOwogICAgICByZXR1cm4gZzEyICYmICh0aGlzLnZpZXdwb3J0ID0gdGhpcy5nZXRWaWV3cG9ydChhNCwgdGhpcy5zY3JvbGxUYXJnZXQpKSwgdGhpcy51cGRhdGVGb3JWaWV3cG9ydCgpLCAoaDEwICYgMiB8fCBnMTIpICYmIHRoaXMudXBkYXRlVmlld3BvcnRMaW5lcygpLCAodGhpcy5saW5lR2Fwcy5sZW5ndGggfHwgdGhpcy52aWV3cG9ydC50byAtIHRoaXMudmlld3BvcnQuZnJvbSA+IDJlMyA8PCAxKSAmJiB0aGlzLnVwZGF0ZUxpbmVHYXBzKHRoaXMuZW5zdXJlTGluZUdhcHMobzQgPyBbXSA6IHRoaXMubGluZUdhcHMsIHQ0KSksIGgxMCB8PSB0aGlzLmNvbXB1dGVWaXNpYmxlUmFuZ2VzKCksIHRoaXMubXVzdEVuZm9yY2VDdXJzb3JBc3NvYyAmJiAodGhpcy5tdXN0RW5mb3JjZUN1cnNvckFzc29jID0gZmFsc2UsIHQ0LmRvY1ZpZXcuZW5mb3JjZUN1cnNvckFzc29jKCkpLCBoMTA7CiAgICB9CiAgICBnZXQgdmlzaWJsZVRvcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2NhbGVyLmZyb21ET00odGhpcy5waXhlbFZpZXdwb3J0LnRvcCk7CiAgICB9CiAgICBnZXQgdmlzaWJsZUJvdHRvbSgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2NhbGVyLmZyb21ET00odGhpcy5waXhlbFZpZXdwb3J0LmJvdHRvbSk7CiAgICB9CiAgICBnZXRWaWV3cG9ydCh0NCwgZTUpIHsKICAgICAgbGV0IGk0ID0gMC41IC0gTWF0aC5tYXgoLTAuNSwgTWF0aC5taW4oMC41LCB0NCAvIDFlMyAvIDIpKSwgbjggPSB0aGlzLmhlaWdodE1hcCwgcjMgPSB0aGlzLnN0YXRlLmRvYywgeyB2aXNpYmxlVG9wOiBvNCwgdmlzaWJsZUJvdHRvbTogbDcgfSA9IHRoaXMsIGgxMCA9IG5ldyB1dChuOC5saW5lQXQobzQgLSBpNCAqIDFlMywgRDMuQnlIZWlnaHQsIHIzLCAwLCAwKS5mcm9tLCBuOC5saW5lQXQobDcgKyAoMSAtIGk0KSAqIDFlMywgRDMuQnlIZWlnaHQsIHIzLCAwLCAwKS50byk7CiAgICAgIGlmIChlNSkgewogICAgICAgIGxldCB7IGhlYWQ6IGE0IH0gPSBlNS5yYW5nZTsKICAgICAgICBpZiAoYTQgPCBoMTAuZnJvbSB8fCBhNCA+IGgxMC50bykgewogICAgICAgICAgbGV0IGMxNyA9IE1hdGgubWluKHRoaXMuZWRpdG9ySGVpZ2h0LCB0aGlzLnBpeGVsVmlld3BvcnQuYm90dG9tIC0gdGhpcy5waXhlbFZpZXdwb3J0LnRvcCksIGYxMSA9IG44LmxpbmVBdChhNCwgRDMuQnlQb3MsIHIzLCAwLCAwKSwgZDE1OwogICAgICAgICAgZTUueSA9PSAiY2VudGVyIiA/IGQxNSA9IChmMTEudG9wICsgZjExLmJvdHRvbSkgLyAyIC0gYzE3IC8gMiA6IGU1LnkgPT0gInN0YXJ0IiB8fCBlNS55ID09ICJuZWFyZXN0IiAmJiBhNCA8IGgxMC5mcm9tID8gZDE1ID0gZjExLnRvcCA6IGQxNSA9IGYxMS5ib3R0b20gLSBjMTcsIGgxMCA9IG5ldyB1dChuOC5saW5lQXQoZDE1IC0gMWUzIC8gMiwgRDMuQnlIZWlnaHQsIHIzLCAwLCAwKS5mcm9tLCBuOC5saW5lQXQoZDE1ICsgYzE3ICsgMWUzIC8gMiwgRDMuQnlIZWlnaHQsIHIzLCAwLCAwKS50byk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBoMTA7CiAgICB9CiAgICBtYXBWaWV3cG9ydCh0NCwgZTUpIHsKICAgICAgbGV0IGk0ID0gZTUubWFwUG9zKHQ0LmZyb20sIC0xKSwgbjggPSBlNS5tYXBQb3ModDQudG8sIDEpOwogICAgICByZXR1cm4gbmV3IHV0KHRoaXMuaGVpZ2h0TWFwLmxpbmVBdChpNCwgRDMuQnlQb3MsIHRoaXMuc3RhdGUuZG9jLCAwLCAwKS5mcm9tLCB0aGlzLmhlaWdodE1hcC5saW5lQXQobjgsIEQzLkJ5UG9zLCB0aGlzLnN0YXRlLmRvYywgMCwgMCkudG8pOwogICAgfQogICAgdmlld3BvcnRJc0FwcHJvcHJpYXRlKHsgZnJvbTogdDQsIHRvOiBlNSB9LCBpNCA9IDApIHsKICAgICAgaWYgKCF0aGlzLmluVmlldykKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgbGV0IHsgdG9wOiBuOCB9ID0gdGhpcy5oZWlnaHRNYXAubGluZUF0KHQ0LCBEMy5CeVBvcywgdGhpcy5zdGF0ZS5kb2MsIDAsIDApLCB7IGJvdHRvbTogcjMgfSA9IHRoaXMuaGVpZ2h0TWFwLmxpbmVBdChlNSwgRDMuQnlQb3MsIHRoaXMuc3RhdGUuZG9jLCAwLCAwKSwgeyB2aXNpYmxlVG9wOiBvNCwgdmlzaWJsZUJvdHRvbTogbDcgfSA9IHRoaXM7CiAgICAgIHJldHVybiAodDQgPT0gMCB8fCBuOCA8PSBvNCAtIE1hdGgubWF4KDEwLCBNYXRoLm1pbigtaTQsIDI1MCkpKSAmJiAoZTUgPT0gdGhpcy5zdGF0ZS5kb2MubGVuZ3RoIHx8IHIzID49IGw3ICsgTWF0aC5tYXgoMTAsIE1hdGgubWluKGk0LCAyNTApKSkgJiYgbjggPiBvNCAtIDIgKiAxZTMgJiYgcjMgPCBsNyArIDIgKiAxZTM7CiAgICB9CiAgICBtYXBMaW5lR2Fwcyh0NCwgZTUpIHsKICAgICAgaWYgKCF0NC5sZW5ndGggfHwgZTUuZW1wdHkpCiAgICAgICAgcmV0dXJuIHQ0OwogICAgICBsZXQgaTQgPSBbXTsKICAgICAgZm9yIChsZXQgbjggb2YgdDQpCiAgICAgICAgZTUudG91Y2hlc1JhbmdlKG44LmZyb20sIG44LnRvKSB8fCBpNC5wdXNoKG5ldyBQdChlNS5tYXBQb3MobjguZnJvbSksIGU1Lm1hcFBvcyhuOC50byksIG44LnNpemUpKTsKICAgICAgcmV0dXJuIGk0OwogICAgfQogICAgZW5zdXJlTGluZUdhcHModDQsIGU1KSB7CiAgICAgIGxldCBpNCA9IHRoaXMuaGVpZ2h0T3JhY2xlLmxpbmVXcmFwcGluZywgbjggPSBpNCA/IDFlNCA6IDJlMywgcjMgPSBuOCA+PiAxLCBvNCA9IG44IDw8IDE7CiAgICAgIGlmICh0aGlzLmRlZmF1bHRUZXh0RGlyZWN0aW9uICE9IFIyLkxUUiAmJiAhaTQpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICBsZXQgbDcgPSBbXSwgaDEwID0gKGE0LCBjMTcsIGYxMSwgZDE1KSA9PiB7CiAgICAgICAgaWYgKGMxNyAtIGE0IDwgcjMpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgbGV0IHUxMSA9IHRoaXMuc3RhdGUuc2VsZWN0aW9uLm1haW4sIHAxOCA9IFt1MTEuZnJvbV07CiAgICAgICAgdTExLmVtcHR5IHx8IHAxOC5wdXNoKHUxMS50byk7CiAgICAgICAgZm9yIChsZXQgbTIzIG9mIHAxOCkKICAgICAgICAgIGlmIChtMjMgPiBhNCAmJiBtMjMgPCBjMTcpIHsKICAgICAgICAgICAgaDEwKGE0LCBtMjMgLSAxMCwgZjExLCBkMTUpLCBoMTAobTIzICsgMTAsIGMxNywgZjExLCBkMTUpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgbGV0IGIyNSA9IHJyKHQ0LCAobTIzKSA9PiBtMjMuZnJvbSA+PSBmMTEuZnJvbSAmJiBtMjMudG8gPD0gZjExLnRvICYmIE1hdGguYWJzKG0yMy5mcm9tIC0gYTQpIDwgcjMgJiYgTWF0aC5hYnMobTIzLnRvIC0gYzE3KSA8IHIzICYmICFwMTguc29tZSgoZzEyKSA9PiBtMjMuZnJvbSA8IGcxMiAmJiBtMjMudG8gPiBnMTIpKTsKICAgICAgICBpZiAoIWIyNSkgewogICAgICAgICAgaWYgKGMxNyA8IGYxMS50byAmJiBlNSAmJiBpNCAmJiBlNS52aXNpYmxlUmFuZ2VzLnNvbWUoKG0yMykgPT4gbTIzLmZyb20gPD0gYzE3ICYmIG0yMy50byA+PSBjMTcpKSB7CiAgICAgICAgICAgIGxldCBtMjMgPSBlNS5tb3ZlVG9MaW5lQm91bmRhcnkoZzIuY3Vyc29yKGMxNyksIGZhbHNlLCB0cnVlKS5oZWFkOwogICAgICAgICAgICBtMjMgPiBhNCAmJiAoYzE3ID0gbTIzKTsKICAgICAgICAgIH0KICAgICAgICAgIGIyNSA9IG5ldyBQdChhNCwgYzE3LCB0aGlzLmdhcFNpemUoZjExLCBhNCwgYzE3LCBkMTUpKTsKICAgICAgICB9CiAgICAgICAgbDcucHVzaChiMjUpOwogICAgICB9OwogICAgICBmb3IgKGxldCBhNCBvZiB0aGlzLnZpZXdwb3J0TGluZXMpIHsKICAgICAgICBpZiAoYTQubGVuZ3RoIDwgbzQpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBsZXQgYzE3ID0gbnIoYTQuZnJvbSwgYTQudG8sIHRoaXMuc3RhdGVEZWNvKTsKICAgICAgICBpZiAoYzE3LnRvdGFsIDwgbzQpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBsZXQgZjExID0gdGhpcy5zY3JvbGxUYXJnZXQgPyB0aGlzLnNjcm9sbFRhcmdldC5yYW5nZS5oZWFkIDogbnVsbCwgZDE1LCB1MTE7CiAgICAgICAgaWYgKGk0KSB7CiAgICAgICAgICBsZXQgcDE4ID0gbjggLyB0aGlzLmhlaWdodE9yYWNsZS5saW5lTGVuZ3RoICogdGhpcy5oZWlnaHRPcmFjbGUubGluZUhlaWdodCwgYjI1LCBtMjM7CiAgICAgICAgICBmMTEgIT0gbnVsbCA/IChiMjUgPSBNYXRoLm1heChhNC5mcm9tLCBmMTEgLSBuOCksIG0yMyA9IE1hdGgubWluKGE0LnRvLCBmMTEgKyBuOCkpIDogKGIyNSA9ICh0aGlzLnZpc2libGVUb3AgLSBhNC50b3AgLSBwMTgpIC8gYTQuaGVpZ2h0LCBtMjMgPSAodGhpcy52aXNpYmxlQm90dG9tIC0gYTQudG9wICsgcDE4KSAvIGE0LmhlaWdodCksIGQxNSA9IFh0KGMxNywgYjI1KSwgdTExID0gWHQoYzE3LCBtMjMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgcDE4LCBiMjU7CiAgICAgICAgICBpZiAoZjExICE9IG51bGwpCiAgICAgICAgICAgIHAxOCA9IE1hdGgubWF4KGE0LmZyb20sIGYxMSAtIG80KSwgYjI1ID0gTWF0aC5taW4oYTQudG8sIGYxMSArIG80KTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBsZXQgbTIzID0gYzE3LnRvdGFsICogdGhpcy5oZWlnaHRPcmFjbGUuY2hhcldpZHRoLCBnMTIgPSBuOCAqIHRoaXMuaGVpZ2h0T3JhY2xlLmNoYXJXaWR0aDsKICAgICAgICAgICAgcDE4ID0gKHRoaXMucGl4ZWxWaWV3cG9ydC5sZWZ0IC0gZzEyKSAvIG0yMywgYjI1ID0gKHRoaXMucGl4ZWxWaWV3cG9ydC5yaWdodCArIGcxMikgLyBtMjM7CiAgICAgICAgICB9CiAgICAgICAgICBkMTUgPSBYdChjMTcsIHAxOCksIHUxMSA9IFh0KGMxNywgYjI1KTsKICAgICAgICB9CiAgICAgICAgZDE1ID4gYTQuZnJvbSAmJiBoMTAoYTQuZnJvbSwgZDE1LCBhNCwgYzE3KSwgdTExIDwgYTQudG8gJiYgaDEwKHUxMSwgYTQudG8sIGE0LCBjMTcpOwogICAgICB9CiAgICAgIHJldHVybiBsNzsKICAgIH0KICAgIGdhcFNpemUodDQsIGU1LCBpNCwgbjgpIHsKICAgICAgbGV0IHIzID0gX2kobjgsIGk0KSAtIF9pKG44LCBlNSk7CiAgICAgIHJldHVybiB0aGlzLmhlaWdodE9yYWNsZS5saW5lV3JhcHBpbmcgPyB0NC5oZWlnaHQgKiByMyA6IG44LnRvdGFsICogdGhpcy5oZWlnaHRPcmFjbGUuY2hhcldpZHRoICogcjM7CiAgICB9CiAgICB1cGRhdGVMaW5lR2Fwcyh0NCkgewogICAgICBQdC5zYW1lKHQ0LCB0aGlzLmxpbmVHYXBzKSB8fCAodGhpcy5saW5lR2FwcyA9IHQ0LCB0aGlzLmxpbmVHYXBEZWNvID0gay5zZXQodDQubWFwKChlNSkgPT4gZTUuZHJhdyh0aGlzLmhlaWdodE9yYWNsZS5saW5lV3JhcHBpbmcpKSkpOwogICAgfQogICAgY29tcHV0ZVZpc2libGVSYW5nZXMoKSB7CiAgICAgIGxldCB0NCA9IHRoaXMuc3RhdGVEZWNvOwogICAgICB0aGlzLmxpbmVHYXBzLmxlbmd0aCAmJiAodDQgPSB0NC5jb25jYXQodGhpcy5saW5lR2FwRGVjbykpOwogICAgICBsZXQgZTUgPSBbXTsKICAgICAgUC5zcGFucyh0NCwgdGhpcy52aWV3cG9ydC5mcm9tLCB0aGlzLnZpZXdwb3J0LnRvLCB7IHNwYW4objgsIHIzKSB7CiAgICAgICAgZTUucHVzaCh7IGZyb206IG44LCB0bzogcjMgfSk7CiAgICAgIH0sIHBvaW50KCkgewogICAgICB9IH0sIDIwKTsKICAgICAgbGV0IGk0ID0gZTUubGVuZ3RoICE9IHRoaXMudmlzaWJsZVJhbmdlcy5sZW5ndGggfHwgdGhpcy52aXNpYmxlUmFuZ2VzLnNvbWUoKG44LCByMykgPT4gbjguZnJvbSAhPSBlNVtyM10uZnJvbSB8fCBuOC50byAhPSBlNVtyM10udG8pOwogICAgICByZXR1cm4gdGhpcy52aXNpYmxlUmFuZ2VzID0gZTUsIGk0ID8gNCA6IDA7CiAgICB9CiAgICBsaW5lQmxvY2tBdCh0NCkgewogICAgICByZXR1cm4gdDQgPj0gdGhpcy52aWV3cG9ydC5mcm9tICYmIHQ0IDw9IHRoaXMudmlld3BvcnQudG8gJiYgdGhpcy52aWV3cG9ydExpbmVzLmZpbmQoKGU1KSA9PiBlNS5mcm9tIDw9IHQ0ICYmIGU1LnRvID49IHQ0KSB8fCBUdCh0aGlzLmhlaWdodE1hcC5saW5lQXQodDQsIEQzLkJ5UG9zLCB0aGlzLnN0YXRlLmRvYywgMCwgMCksIHRoaXMuc2NhbGVyKTsKICAgIH0KICAgIGxpbmVCbG9ja0F0SGVpZ2h0KHQ0KSB7CiAgICAgIHJldHVybiBUdCh0aGlzLmhlaWdodE1hcC5saW5lQXQodGhpcy5zY2FsZXIuZnJvbURPTSh0NCksIEQzLkJ5SGVpZ2h0LCB0aGlzLnN0YXRlLmRvYywgMCwgMCksIHRoaXMuc2NhbGVyKTsKICAgIH0KICAgIGVsZW1lbnRBdEhlaWdodCh0NCkgewogICAgICByZXR1cm4gVHQodGhpcy5oZWlnaHRNYXAuYmxvY2tBdCh0aGlzLnNjYWxlci5mcm9tRE9NKHQ0KSwgdGhpcy5zdGF0ZS5kb2MsIDAsIDApLCB0aGlzLnNjYWxlcik7CiAgICB9CiAgICBnZXQgZG9jSGVpZ2h0KCkgewogICAgICByZXR1cm4gdGhpcy5zY2FsZXIudG9ET00odGhpcy5oZWlnaHRNYXAuaGVpZ2h0KTsKICAgIH0KICAgIGdldCBjb250ZW50SGVpZ2h0KCkgewogICAgICByZXR1cm4gdGhpcy5kb2NIZWlnaHQgKyB0aGlzLnBhZGRpbmdUb3AgKyB0aGlzLnBhZGRpbmdCb3R0b207CiAgICB9CiAgfTsKICB2YXIgdXQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUpIHsKICAgICAgdGhpcy5mcm9tID0gdDQsIHRoaXMudG8gPSBlNTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIG5yKHM4LCB0NCwgZTUpIHsKICAgIGxldCBpNCA9IFtdLCBuOCA9IHM4LCByMyA9IDA7CiAgICByZXR1cm4gUC5zcGFucyhlNSwgczgsIHQ0LCB7IHNwYW4oKSB7CiAgICB9LCBwb2ludChvNCwgbDcpIHsKICAgICAgbzQgPiBuOCAmJiAoaTQucHVzaCh7IGZyb206IG44LCB0bzogbzQgfSksIHIzICs9IG80IC0gbjgpLCBuOCA9IGw3OwogICAgfSB9LCAyMCksIG44IDwgdDQgJiYgKGk0LnB1c2goeyBmcm9tOiBuOCwgdG86IHQ0IH0pLCByMyArPSB0NCAtIG44KSwgeyB0b3RhbDogcjMsIHJhbmdlczogaTQgfTsKICB9CiAgZnVuY3Rpb24gWHQoeyB0b3RhbDogczgsIHJhbmdlczogdDQgfSwgZTUpIHsKICAgIGlmIChlNSA8PSAwKQogICAgICByZXR1cm4gdDRbMF0uZnJvbTsKICAgIGlmIChlNSA+PSAxKQogICAgICByZXR1cm4gdDRbdDQubGVuZ3RoIC0gMV0udG87CiAgICBsZXQgaTQgPSBNYXRoLmZsb29yKHM4ICogZTUpOwogICAgZm9yIChsZXQgbjggPSAwOyA7IG44KyspIHsKICAgICAgbGV0IHsgZnJvbTogcjMsIHRvOiBvNCB9ID0gdDRbbjhdLCBsNyA9IG80IC0gcjM7CiAgICAgIGlmIChpNCA8PSBsNykKICAgICAgICByZXR1cm4gcjMgKyBpNDsKICAgICAgaTQgLT0gbDc7CiAgICB9CiAgfQogIGZ1bmN0aW9uIF9pKHM4LCB0NCkgewogICAgbGV0IGU1ID0gMDsKICAgIGZvciAobGV0IHsgZnJvbTogaTQsIHRvOiBuOCB9IG9mIHM4LnJhbmdlcykgewogICAgICBpZiAodDQgPD0gbjgpIHsKICAgICAgICBlNSArPSB0NCAtIGk0OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGU1ICs9IG44IC0gaTQ7CiAgICB9CiAgICByZXR1cm4gZTUgLyBzOC50b3RhbDsKICB9CiAgZnVuY3Rpb24gcnIoczgsIHQ0KSB7CiAgICBmb3IgKGxldCBlNSBvZiBzOCkKICAgICAgaWYgKHQ0KGU1KSkKICAgICAgICByZXR1cm4gZTU7CiAgfQogIHZhciAkaSA9IHsgdG9ET00oczgpIHsKICAgIHJldHVybiBzODsKICB9LCBmcm9tRE9NKHM4KSB7CiAgICByZXR1cm4gczg7CiAgfSwgc2NhbGU6IDEgfTsKICB2YXIgdGkgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0KSB7CiAgICAgIGxldCBuOCA9IDAsIHIzID0gMCwgbzQgPSAwOwogICAgICB0aGlzLnZpZXdwb3J0cyA9IGk0Lm1hcCgoeyBmcm9tOiBsNywgdG86IGgxMCB9KSA9PiB7CiAgICAgICAgbGV0IGE0ID0gZTUubGluZUF0KGw3LCBEMy5CeVBvcywgdDQsIDAsIDApLnRvcCwgYzE3ID0gZTUubGluZUF0KGgxMCwgRDMuQnlQb3MsIHQ0LCAwLCAwKS5ib3R0b207CiAgICAgICAgcmV0dXJuIG44ICs9IGMxNyAtIGE0LCB7IGZyb206IGw3LCB0bzogaDEwLCB0b3A6IGE0LCBib3R0b206IGMxNywgZG9tVG9wOiAwLCBkb21Cb3R0b206IDAgfTsKICAgICAgfSksIHRoaXMuc2NhbGUgPSAoN2U2IC0gbjgpIC8gKGU1LmhlaWdodCAtIG44KTsKICAgICAgZm9yIChsZXQgbDcgb2YgdGhpcy52aWV3cG9ydHMpCiAgICAgICAgbDcuZG9tVG9wID0gbzQgKyAobDcudG9wIC0gcjMpICogdGhpcy5zY2FsZSwgbzQgPSBsNy5kb21Cb3R0b20gPSBsNy5kb21Ub3AgKyAobDcuYm90dG9tIC0gbDcudG9wKSwgcjMgPSBsNy5ib3R0b207CiAgICB9CiAgICB0b0RPTSh0NCkgewogICAgICBmb3IgKGxldCBlNSA9IDAsIGk0ID0gMCwgbjggPSAwOyA7IGU1KyspIHsKICAgICAgICBsZXQgcjMgPSBlNSA8IHRoaXMudmlld3BvcnRzLmxlbmd0aCA/IHRoaXMudmlld3BvcnRzW2U1XSA6IG51bGw7CiAgICAgICAgaWYgKCFyMyB8fCB0NCA8IHIzLnRvcCkKICAgICAgICAgIHJldHVybiBuOCArICh0NCAtIGk0KSAqIHRoaXMuc2NhbGU7CiAgICAgICAgaWYgKHQ0IDw9IHIzLmJvdHRvbSkKICAgICAgICAgIHJldHVybiByMy5kb21Ub3AgKyAodDQgLSByMy50b3ApOwogICAgICAgIGk0ID0gcjMuYm90dG9tLCBuOCA9IHIzLmRvbUJvdHRvbTsKICAgICAgfQogICAgfQogICAgZnJvbURPTSh0NCkgewogICAgICBmb3IgKGxldCBlNSA9IDAsIGk0ID0gMCwgbjggPSAwOyA7IGU1KyspIHsKICAgICAgICBsZXQgcjMgPSBlNSA8IHRoaXMudmlld3BvcnRzLmxlbmd0aCA/IHRoaXMudmlld3BvcnRzW2U1XSA6IG51bGw7CiAgICAgICAgaWYgKCFyMyB8fCB0NCA8IHIzLmRvbVRvcCkKICAgICAgICAgIHJldHVybiBpNCArICh0NCAtIG44KSAvIHRoaXMuc2NhbGU7CiAgICAgICAgaWYgKHQ0IDw9IHIzLmRvbUJvdHRvbSkKICAgICAgICAgIHJldHVybiByMy50b3AgKyAodDQgLSByMy5kb21Ub3ApOwogICAgICAgIGk0ID0gcjMuYm90dG9tLCBuOCA9IHIzLmRvbUJvdHRvbTsKICAgICAgfQogICAgfQogIH07CiAgZnVuY3Rpb24gVHQoczgsIHQ0KSB7CiAgICBpZiAodDQuc2NhbGUgPT0gMSkKICAgICAgcmV0dXJuIHM4OwogICAgbGV0IGU1ID0gdDQudG9ET00oczgudG9wKSwgaTQgPSB0NC50b0RPTShzOC5ib3R0b20pOwogICAgcmV0dXJuIG5ldyBfMihzOC5mcm9tLCBzOC5sZW5ndGgsIGU1LCBpNCAtIGU1LCBBcnJheS5pc0FycmF5KHM4LnR5cGUpID8gczgudHlwZS5tYXAoKG44KSA9PiBUdChuOCwgdDQpKSA6IHM4LnR5cGUpOwogIH0KICB2YXIgVXQgPSBBMi5kZWZpbmUoeyBjb21iaW5lOiAoczgpID0+IHM4LmpvaW4oIiAiKSB9KTsKICB2YXIgZWkgPSBBMi5kZWZpbmUoeyBjb21iaW5lOiAoczgpID0+IHM4LmluZGV4T2YodHJ1ZSkgPiAtMSB9KTsKICB2YXIgaWkgPSBUMi5uZXdOYW1lKCk7CiAgdmFyIFlzID0gVDIubmV3TmFtZSgpOwogIHZhciBYcyA9IFQyLm5ld05hbWUoKTsKICB2YXIgVXMgPSB7ICImbGlnaHQiOiAiLiIgKyBZcywgIiZkYXJrIjogIi4iICsgWHMgfTsKICBmdW5jdGlvbiBzaShzOCwgdDQsIGU1KSB7CiAgICByZXR1cm4gbmV3IFQyKHQ0LCB7IGZpbmlzaChpNCkgewogICAgICByZXR1cm4gLyYvLnRlc3QoaTQpID8gaTQucmVwbGFjZSgvJlx3Ki8sIChuOCkgPT4gewogICAgICAgIGlmIChuOCA9PSAiJiIpCiAgICAgICAgICByZXR1cm4gczg7CiAgICAgICAgaWYgKCFlNSB8fCAhZTVbbjhdKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVuc3VwcG9ydGVkIHNlbGVjdG9yOiAke244fWApOwogICAgICAgIHJldHVybiBlNVtuOF07CiAgICAgIH0pIDogczggKyAiICIgKyBpNDsKICAgIH0gfSk7CiAgfQogIHZhciBvciA9IHNpKCIuIiArIGlpLCB7ICImLmNtLWVkaXRvciI6IHsgcG9zaXRpb246ICJyZWxhdGl2ZSAhaW1wb3J0YW50IiwgYm94U2l6aW5nOiAiYm9yZGVyLWJveCIsICImLmNtLWZvY3VzZWQiOiB7IG91dGxpbmU6ICIxcHggZG90dGVkICMyMTIxMjEiIH0sIGRpc3BsYXk6ICJmbGV4ICFpbXBvcnRhbnQiLCBmbGV4RGlyZWN0aW9uOiAiY29sdW1uIiB9LCAiLmNtLXNjcm9sbGVyIjogeyBkaXNwbGF5OiAiZmxleCAhaW1wb3J0YW50IiwgYWxpZ25JdGVtczogImZsZXgtc3RhcnQgIWltcG9ydGFudCIsIGZvbnRGYW1pbHk6ICJtb25vc3BhY2UiLCBsaW5lSGVpZ2h0OiAxLjQsIGhlaWdodDogIjEwMCUiLCBvdmVyZmxvd1g6ICJhdXRvIiwgcG9zaXRpb246ICJyZWxhdGl2ZSIsIHpJbmRleDogMCB9LCAiLmNtLWNvbnRlbnQiOiB7IG1hcmdpbjogMCwgZmxleEdyb3c6IDIsIGZsZXhTaHJpbms6IDAsIG1pbkhlaWdodDogIjEwMCUiLCBkaXNwbGF5OiAiYmxvY2siLCB3aGl0ZVNwYWNlOiAicHJlIiwgd29yZFdyYXA6ICJub3JtYWwiLCBib3hTaXppbmc6ICJib3JkZXItYm94IiwgcGFkZGluZzogIjRweCAwIiwgb3V0bGluZTogIm5vbmUiLCAiJltjb250ZW50ZWRpdGFibGU9dHJ1ZV0iOiB7IFdlYmtpdFVzZXJNb2RpZnk6ICJyZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5IiB9IH0sICIuY20tbGluZVdyYXBwaW5nIjogeyB3aGl0ZVNwYWNlX2ZhbGxiYWNrOiAicHJlLXdyYXAiLCB3aGl0ZVNwYWNlOiAiYnJlYWstc3BhY2VzIiwgd29yZEJyZWFrOiAiYnJlYWstd29yZCIsIG92ZXJmbG93V3JhcDogImFueXdoZXJlIiwgZmxleFNocmluazogMSB9LCAiJmxpZ2h0IC5jbS1jb250ZW50IjogeyBjYXJldENvbG9yOiAiYmxhY2siIH0sICImZGFyayAuY20tY29udGVudCI6IHsgY2FyZXRDb2xvcjogIndoaXRlIiB9LCAiLmNtLWxpbmUiOiB7IGRpc3BsYXk6ICJibG9jayIsIHBhZGRpbmc6ICIwIDJweCAwIDRweCIgfSwgIi5jbS1zZWxlY3Rpb25MYXllciI6IHsgekluZGV4OiAtMSwgY29udGFpbjogInNpemUgc3R5bGUiIH0sICIuY20tc2VsZWN0aW9uQmFja2dyb3VuZCI6IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIgfSwgIiZsaWdodCAuY20tc2VsZWN0aW9uQmFja2dyb3VuZCI6IHsgYmFja2dyb3VuZDogIiNkOWQ5ZDkiIH0sICImZGFyayAuY20tc2VsZWN0aW9uQmFja2dyb3VuZCI6IHsgYmFja2dyb3VuZDogIiMyMjIiIH0sICImbGlnaHQuY20tZm9jdXNlZCAuY20tc2VsZWN0aW9uQmFja2dyb3VuZCI6IHsgYmFja2dyb3VuZDogIiNkN2Q0ZjAiIH0sICImZGFyay5jbS1mb2N1c2VkIC5jbS1zZWxlY3Rpb25CYWNrZ3JvdW5kIjogeyBiYWNrZ3JvdW5kOiAiIzIzMyIgfSwgIi5jbS1jdXJzb3JMYXllciI6IHsgekluZGV4OiAxMDAsIGNvbnRhaW46ICJzaXplIHN0eWxlIiwgcG9pbnRlckV2ZW50czogIm5vbmUiIH0sICImLmNtLWZvY3VzZWQgLmNtLWN1cnNvckxheWVyIjogeyBhbmltYXRpb246ICJzdGVwcygxKSBjbS1ibGluayAxLjJzIGluZmluaXRlIiB9LCAiQGtleWZyYW1lcyBjbS1ibGluayI6IHsgIjAlIjoge30sICI1MCUiOiB7IG9wYWNpdHk6IDAgfSwgIjEwMCUiOiB7fSB9LCAiQGtleWZyYW1lcyBjbS1ibGluazIiOiB7ICIwJSI6IHt9LCAiNTAlIjogeyBvcGFjaXR5OiAwIH0sICIxMDAlIjoge30gfSwgIi5jbS1jdXJzb3IsIC5jbS1kcm9wQ3Vyc29yIjogeyBwb3NpdGlvbjogImFic29sdXRlIiwgYm9yZGVyTGVmdDogIjEuMnB4IHNvbGlkIGJsYWNrIiwgbWFyZ2luTGVmdDogIi0wLjZweCIsIHBvaW50ZXJFdmVudHM6ICJub25lIiB9LCAiLmNtLWN1cnNvciI6IHsgZGlzcGxheTogIm5vbmUiIH0sICImZGFyayAuY20tY3Vyc29yIjogeyBib3JkZXJMZWZ0Q29sb3I6ICIjNDQ0IiB9LCAiJi5jbS1mb2N1c2VkIC5jbS1jdXJzb3IiOiB7IGRpc3BsYXk6ICJibG9jayIgfSwgIiZsaWdodCAuY20tYWN0aXZlTGluZSI6IHsgYmFja2dyb3VuZENvbG9yOiAiI2NjZWVmZjQ0IiB9LCAiJmRhcmsgLmNtLWFjdGl2ZUxpbmUiOiB7IGJhY2tncm91bmRDb2xvcjogIiM5OWVlZmYzMyIgfSwgIiZsaWdodCAuY20tc3BlY2lhbENoYXIiOiB7IGNvbG9yOiAicmVkIiB9LCAiJmRhcmsgLmNtLXNwZWNpYWxDaGFyIjogeyBjb2xvcjogIiNmNzgiIH0sICIuY20tZ3V0dGVycyI6IHsgZmxleFNocmluazogMCwgZGlzcGxheTogImZsZXgiLCBoZWlnaHQ6ICIxMDAlIiwgYm94U2l6aW5nOiAiYm9yZGVyLWJveCIsIGxlZnQ6IDAsIHpJbmRleDogMjAwIH0sICImbGlnaHQgLmNtLWd1dHRlcnMiOiB7IGJhY2tncm91bmRDb2xvcjogIiNmNWY1ZjUiLCBjb2xvcjogIiM2YzZjNmMiLCBib3JkZXJSaWdodDogIjFweCBzb2xpZCAjZGRkIiB9LCAiJmRhcmsgLmNtLWd1dHRlcnMiOiB7IGJhY2tncm91bmRDb2xvcjogIiMzMzMzMzgiLCBjb2xvcjogIiNjY2MiIH0sICIuY20tZ3V0dGVyIjogeyBkaXNwbGF5OiAiZmxleCAhaW1wb3J0YW50IiwgZmxleERpcmVjdGlvbjogImNvbHVtbiIsIGZsZXhTaHJpbms6IDAsIGJveFNpemluZzogImJvcmRlci1ib3giLCBtaW5IZWlnaHQ6ICIxMDAlIiwgb3ZlcmZsb3c6ICJoaWRkZW4iIH0sICIuY20tZ3V0dGVyRWxlbWVudCI6IHsgYm94U2l6aW5nOiAiYm9yZGVyLWJveCIgfSwgIi5jbS1saW5lTnVtYmVycyAuY20tZ3V0dGVyRWxlbWVudCI6IHsgcGFkZGluZzogIjAgM3B4IDAgNXB4IiwgbWluV2lkdGg6ICIyMHB4IiwgdGV4dEFsaWduOiAicmlnaHQiLCB3aGl0ZVNwYWNlOiAibm93cmFwIiB9LCAiJmxpZ2h0IC5jbS1hY3RpdmVMaW5lR3V0dGVyIjogeyBiYWNrZ3JvdW5kQ29sb3I6ICIjZTJmMmZmIiB9LCAiJmRhcmsgLmNtLWFjdGl2ZUxpbmVHdXR0ZXIiOiB7IGJhY2tncm91bmRDb2xvcjogIiMyMjIyMjciIH0sICIuY20tcGFuZWxzIjogeyBib3hTaXppbmc6ICJib3JkZXItYm94IiwgcG9zaXRpb246ICJzdGlja3kiLCBsZWZ0OiAwLCByaWdodDogMCB9LCAiJmxpZ2h0IC5jbS1wYW5lbHMiOiB7IGJhY2tncm91bmRDb2xvcjogIiNmNWY1ZjUiLCBjb2xvcjogImJsYWNrIiB9LCAiJmxpZ2h0IC5jbS1wYW5lbHMtdG9wIjogeyBib3JkZXJCb3R0b206ICIxcHggc29saWQgI2RkZCIgfSwgIiZsaWdodCAuY20tcGFuZWxzLWJvdHRvbSI6IHsgYm9yZGVyVG9wOiAiMXB4IHNvbGlkICNkZGQiIH0sICImZGFyayAuY20tcGFuZWxzIjogeyBiYWNrZ3JvdW5kQ29sb3I6ICIjMzMzMzM4IiwgY29sb3I6ICJ3aGl0ZSIgfSwgIi5jbS10YWIiOiB7IGRpc3BsYXk6ICJpbmxpbmUtYmxvY2siLCBvdmVyZmxvdzogImhpZGRlbiIsIHZlcnRpY2FsQWxpZ246ICJib3R0b20iIH0sICIuY20td2lkZ2V0QnVmZmVyIjogeyB2ZXJ0aWNhbEFsaWduOiAidGV4dC10b3AiLCBoZWlnaHQ6ICIxZW0iLCB3aWR0aDogMCwgZGlzcGxheTogImlubGluZSIgfSwgIi5jbS1wbGFjZWhvbGRlciI6IHsgY29sb3I6ICIjODg4IiwgZGlzcGxheTogImlubGluZS1ibG9jayIsIHZlcnRpY2FsQWxpZ246ICJ0b3AiIH0sICIuY20tYnV0dG9uIjogeyB2ZXJ0aWNhbEFsaWduOiAibWlkZGxlIiwgY29sb3I6ICJpbmhlcml0IiwgZm9udFNpemU6ICI3MCUiLCBwYWRkaW5nOiAiLjJlbSAxZW0iLCBib3JkZXJSYWRpdXM6ICIxcHgiIH0sICImbGlnaHQgLmNtLWJ1dHRvbiI6IHsgYmFja2dyb3VuZEltYWdlOiAibGluZWFyLWdyYWRpZW50KCNlZmYxZjUsICNkOWQ5ZGYpIiwgYm9yZGVyOiAiMXB4IHNvbGlkICM4ODgiLCAiJjphY3RpdmUiOiB7IGJhY2tncm91bmRJbWFnZTogImxpbmVhci1ncmFkaWVudCgjYjRiNGI0LCAjZDBkM2Q2KSIgfSB9LCAiJmRhcmsgLmNtLWJ1dHRvbiI6IHsgYmFja2dyb3VuZEltYWdlOiAibGluZWFyLWdyYWRpZW50KCMzOTM5MzksICMxMTEpIiwgYm9yZGVyOiAiMXB4IHNvbGlkICM4ODgiLCAiJjphY3RpdmUiOiB7IGJhY2tncm91bmRJbWFnZTogImxpbmVhci1ncmFkaWVudCgjMTExLCAjMzMzKSIgfSB9LCAiLmNtLXRleHRmaWVsZCI6IHsgdmVydGljYWxBbGlnbjogIm1pZGRsZSIsIGNvbG9yOiAiaW5oZXJpdCIsIGZvbnRTaXplOiAiNzAlIiwgYm9yZGVyOiAiMXB4IHNvbGlkIHNpbHZlciIsIHBhZGRpbmc6ICIuMmVtIC41ZW0iIH0sICImbGlnaHQgLmNtLXRleHRmaWVsZCI6IHsgYmFja2dyb3VuZENvbG9yOiAid2hpdGUiIH0sICImZGFyayAuY20tdGV4dGZpZWxkIjogeyBib3JkZXI6ICIxcHggc29saWQgIzU1NSIsIGJhY2tncm91bmRDb2xvcjogImluaGVyaXQiIH0gfSwgVXMpOwogIHZhciBsciA9IHsgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhT2xkVmFsdWU6IHRydWUgfTsKICB2YXIgRGUzID0geTMuaWUgJiYgeTMuaWVfdmVyc2lvbiA8PSAxMTsKICB2YXIgbmkgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0KSB7CiAgICAgIHRoaXMudmlldyA9IHQ0LCB0aGlzLm9uQ2hhbmdlID0gZTUsIHRoaXMub25TY3JvbGxDaGFuZ2VkID0gaTQsIHRoaXMuYWN0aXZlID0gZmFsc2UsIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBuZXcgRWUzKCksIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlLCB0aGlzLmRlbGF5ZWRGbHVzaCA9IC0xLCB0aGlzLnJlc2l6ZVRpbWVvdXQgPSAtMSwgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLmRlbGF5ZWRBbmRyb2lkS2V5ID0gbnVsbCwgdGhpcy5sYXN0Q2hhbmdlID0gMCwgdGhpcy5zY3JvbGxUYXJnZXRzID0gW10sIHRoaXMuaW50ZXJzZWN0aW9uID0gbnVsbCwgdGhpcy5yZXNpemUgPSBudWxsLCB0aGlzLmludGVyc2VjdGluZyA9IGZhbHNlLCB0aGlzLmdhcEludGVyc2VjdGlvbiA9IG51bGwsIHRoaXMuZ2FwcyA9IFtdLCB0aGlzLnBhcmVudENoZWNrID0gLTEsIHRoaXMuZG9tID0gdDQuY29udGVudERPTSwgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChuOCkgPT4gewogICAgICAgIGZvciAobGV0IHIzIG9mIG44KQogICAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKHIzKTsKICAgICAgICAoeTMuaWUgJiYgeTMuaWVfdmVyc2lvbiA8PSAxMSB8fCB5My5pb3MgJiYgdDQuY29tcG9zaW5nKSAmJiBuOC5zb21lKChyMykgPT4gcjMudHlwZSA9PSAiY2hpbGRMaXN0IiAmJiByMy5yZW1vdmVkTm9kZXMubGVuZ3RoIHx8IHIzLnR5cGUgPT0gImNoYXJhY3RlckRhdGEiICYmIHIzLm9sZFZhbHVlLmxlbmd0aCA+IHIzLnRhcmdldC5ub2RlVmFsdWUubGVuZ3RoKSA/IHRoaXMuZmx1c2hTb29uKCkgOiB0aGlzLmZsdXNoKCk7CiAgICAgIH0pLCBEZTMgJiYgKHRoaXMub25DaGFyRGF0YSA9IChuOCkgPT4gewogICAgICAgIHRoaXMucXVldWUucHVzaCh7IHRhcmdldDogbjgudGFyZ2V0LCB0eXBlOiAiY2hhcmFjdGVyRGF0YSIsIG9sZFZhbHVlOiBuOC5wcmV2VmFsdWUgfSksIHRoaXMuZmx1c2hTb29uKCk7CiAgICAgIH0pLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlID0gdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpLCB0aGlzLm9uUmVzaXplID0gdGhpcy5vblJlc2l6ZS5iaW5kKHRoaXMpLCB0aGlzLm9uUHJpbnQgPSB0aGlzLm9uUHJpbnQuYmluZCh0aGlzKSwgdGhpcy5vblNjcm9sbCA9IHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSwgdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09ICJmdW5jdGlvbiIgJiYgKHRoaXMucmVzaXplID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICB0aGlzLnZpZXcuZG9jVmlldy5sYXN0VXBkYXRlIDwgRGF0ZS5ub3coKSAtIDc1ICYmIHRoaXMub25SZXNpemUoKTsKICAgICAgfSksIHRoaXMucmVzaXplLm9ic2VydmUodDQuc2Nyb2xsRE9NKSksIHRoaXMuYWRkV2luZG93TGlzdGVuZXJzKHRoaXMud2luID0gdDQud2luKSwgdGhpcy5zdGFydCgpLCB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT0gImZ1bmN0aW9uIiAmJiAodGhpcy5pbnRlcnNlY3Rpb24gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKG44KSA9PiB7CiAgICAgICAgdGhpcy5wYXJlbnRDaGVjayA8IDAgJiYgKHRoaXMucGFyZW50Q2hlY2sgPSBzZXRUaW1lb3V0KHRoaXMubGlzdGVuRm9yU2Nyb2xsLmJpbmQodGhpcyksIDFlMykpLCBuOC5sZW5ndGggPiAwICYmIG44W244Lmxlbmd0aCAtIDFdLmludGVyc2VjdGlvblJhdGlvID4gMCAhPSB0aGlzLmludGVyc2VjdGluZyAmJiAodGhpcy5pbnRlcnNlY3RpbmcgPSAhdGhpcy5pbnRlcnNlY3RpbmcsIHRoaXMuaW50ZXJzZWN0aW5nICE9IHRoaXMudmlldy5pblZpZXcgJiYgdGhpcy5vblNjcm9sbENoYW5nZWQoZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IikpKTsKICAgICAgfSwge30pLCB0aGlzLmludGVyc2VjdGlvbi5vYnNlcnZlKHRoaXMuZG9tKSwgdGhpcy5nYXBJbnRlcnNlY3Rpb24gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKG44KSA9PiB7CiAgICAgICAgbjgubGVuZ3RoID4gMCAmJiBuOFtuOC5sZW5ndGggLSAxXS5pbnRlcnNlY3Rpb25SYXRpbyA+IDAgJiYgdGhpcy5vblNjcm9sbENoYW5nZWQoZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IikpOwogICAgICB9LCB7fSkpLCB0aGlzLmxpc3RlbkZvclNjcm9sbCgpLCB0aGlzLnJlYWRTZWxlY3Rpb25SYW5nZSgpOwogICAgfQogICAgb25TY3JvbGwodDQpIHsKICAgICAgdGhpcy5pbnRlcnNlY3RpbmcgJiYgdGhpcy5mbHVzaChmYWxzZSksIHRoaXMub25TY3JvbGxDaGFuZ2VkKHQ0KTsKICAgIH0KICAgIG9uUmVzaXplKCkgewogICAgICB0aGlzLnJlc2l6ZVRpbWVvdXQgPCAwICYmICh0aGlzLnJlc2l6ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0aGlzLnJlc2l6ZVRpbWVvdXQgPSAtMSwgdGhpcy52aWV3LnJlcXVlc3RNZWFzdXJlKCk7CiAgICAgIH0sIDUwKSk7CiAgICB9CiAgICBvblByaW50KCkgewogICAgICB0aGlzLnZpZXcudmlld1N0YXRlLnByaW50aW5nID0gdHJ1ZSwgdGhpcy52aWV3Lm1lYXN1cmUoKSwgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy52aWV3LnZpZXdTdGF0ZS5wcmludGluZyA9IGZhbHNlLCB0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUoKTsKICAgICAgfSwgNTAwKTsKICAgIH0KICAgIHVwZGF0ZUdhcHModDQpIHsKICAgICAgaWYgKHRoaXMuZ2FwSW50ZXJzZWN0aW9uICYmICh0NC5sZW5ndGggIT0gdGhpcy5nYXBzLmxlbmd0aCB8fCB0aGlzLmdhcHMuc29tZSgoZTUsIGk0KSA9PiBlNSAhPSB0NFtpNF0pKSkgewogICAgICAgIHRoaXMuZ2FwSW50ZXJzZWN0aW9uLmRpc2Nvbm5lY3QoKTsKICAgICAgICBmb3IgKGxldCBlNSBvZiB0NCkKICAgICAgICAgIHRoaXMuZ2FwSW50ZXJzZWN0aW9uLm9ic2VydmUoZTUpOwogICAgICAgIHRoaXMuZ2FwcyA9IHQ0OwogICAgICB9CiAgICB9CiAgICBvblNlbGVjdGlvbkNoYW5nZSh0NCkgewogICAgICBsZXQgZTUgPSB0aGlzLnNlbGVjdGlvbkNoYW5nZWQ7CiAgICAgIGlmICghdGhpcy5yZWFkU2VsZWN0aW9uUmFuZ2UoKSB8fCB0aGlzLmRlbGF5ZWRBbmRyb2lkS2V5KQogICAgICAgIHJldHVybjsKICAgICAgbGV0IHsgdmlldzogaTQgfSA9IHRoaXMsIG44ID0gdGhpcy5zZWxlY3Rpb25SYW5nZTsKICAgICAgaWYgKGk0LnN0YXRlLmZhY2V0KENlNCkgPyBpNC5yb290LmFjdGl2ZUVsZW1lbnQgIT0gdGhpcy5kb20gOiAhWnQoaTQuZG9tLCBuOCkpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgcjMgPSBuOC5hbmNob3JOb2RlICYmIGk0LmRvY1ZpZXcubmVhcmVzdChuOC5hbmNob3JOb2RlKTsKICAgICAgaWYgKHIzICYmIHIzLmlnbm9yZUV2ZW50KHQ0KSkgewogICAgICAgIGU1IHx8ICh0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgICh5My5pZSAmJiB5My5pZV92ZXJzaW9uIDw9IDExIHx8IHkzLmFuZHJvaWQgJiYgeTMuY2hyb21lKSAmJiAhaTQuc3RhdGUuc2VsZWN0aW9uLm1haW4uZW1wdHkgJiYgbjguZm9jdXNOb2RlICYmIG5lMyhuOC5mb2N1c05vZGUsIG44LmZvY3VzT2Zmc2V0LCBuOC5hbmNob3JOb2RlLCBuOC5hbmNob3JPZmZzZXQpID8gdGhpcy5mbHVzaFNvb24oKSA6IHRoaXMuZmx1c2goZmFsc2UpOwogICAgfQogICAgcmVhZFNlbGVjdGlvblJhbmdlKCkgewogICAgICBsZXQgeyB2aWV3OiB0NCB9ID0gdGhpcywgZTUgPSB5My5zYWZhcmkgJiYgdDQucm9vdC5ub2RlVHlwZSA9PSAxMSAmJiBnbih0aGlzLmRvbS5vd25lckRvY3VtZW50KSA9PSB0aGlzLmRvbSAmJiBocih0aGlzLnZpZXcpIHx8IHNlMyh0NC5yb290KTsKICAgICAgaWYgKCFlNSB8fCB0aGlzLnNlbGVjdGlvblJhbmdlLmVxKGU1KSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGxldCBpNCA9IFp0KHRoaXMuZG9tLCBlNSk7CiAgICAgIHJldHVybiBpNCAmJiAhdGhpcy5zZWxlY3Rpb25DaGFuZ2VkICYmIHQ0LmlucHV0U3RhdGUubGFzdEZvY3VzVGltZSA+IERhdGUubm93KCkgLSAyMDAgJiYgdDQuaW5wdXRTdGF0ZS5sYXN0VG91Y2hUaW1lIDwgRGF0ZS5ub3coKSAtIDMwMCAmJiB2bih0aGlzLmRvbSwgZTUpID8gKHRoaXMudmlldy5pbnB1dFN0YXRlLmxhc3RGb2N1c1RpbWUgPSAwLCB0NC5kb2NWaWV3LnVwZGF0ZVNlbGVjdGlvbigpLCBmYWxzZSkgOiAodGhpcy5zZWxlY3Rpb25SYW5nZS5zZXRSYW5nZShlNSksIGk0ICYmICh0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlKSwgdHJ1ZSk7CiAgICB9CiAgICBzZXRTZWxlY3Rpb25SYW5nZSh0NCwgZTUpIHsKICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZS5zZXQodDQubm9kZSwgdDQub2Zmc2V0LCBlNS5ub2RlLCBlNS5vZmZzZXQpLCB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTsKICAgIH0KICAgIGNsZWFyU2VsZWN0aW9uUmFuZ2UoKSB7CiAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2Uuc2V0KG51bGwsIDAsIG51bGwsIDApOwogICAgfQogICAgbGlzdGVuRm9yU2Nyb2xsKCkgewogICAgICB0aGlzLnBhcmVudENoZWNrID0gLTE7CiAgICAgIGxldCB0NCA9IDAsIGU1ID0gbnVsbDsKICAgICAgZm9yIChsZXQgaTQgPSB0aGlzLmRvbTsgaTQ7ICkKICAgICAgICBpZiAoaTQubm9kZVR5cGUgPT0gMSkKICAgICAgICAgICFlNSAmJiB0NCA8IHRoaXMuc2Nyb2xsVGFyZ2V0cy5sZW5ndGggJiYgdGhpcy5zY3JvbGxUYXJnZXRzW3Q0XSA9PSBpNCA/IHQ0KysgOiBlNSB8fCAoZTUgPSB0aGlzLnNjcm9sbFRhcmdldHMuc2xpY2UoMCwgdDQpKSwgZTUgJiYgZTUucHVzaChpNCksIGk0ID0gaTQuYXNzaWduZWRTbG90IHx8IGk0LnBhcmVudE5vZGU7CiAgICAgICAgZWxzZSBpZiAoaTQubm9kZVR5cGUgPT0gMTEpCiAgICAgICAgICBpNCA9IGk0Lmhvc3Q7CiAgICAgICAgZWxzZQogICAgICAgICAgYnJlYWs7CiAgICAgIGlmICh0NCA8IHRoaXMuc2Nyb2xsVGFyZ2V0cy5sZW5ndGggJiYgIWU1ICYmIChlNSA9IHRoaXMuc2Nyb2xsVGFyZ2V0cy5zbGljZSgwLCB0NCkpLCBlNSkgewogICAgICAgIGZvciAobGV0IGk0IG9mIHRoaXMuc2Nyb2xsVGFyZ2V0cykKICAgICAgICAgIGk0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMub25TY3JvbGwpOwogICAgICAgIGZvciAobGV0IGk0IG9mIHRoaXMuc2Nyb2xsVGFyZ2V0cyA9IGU1KQogICAgICAgICAgaTQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5vblNjcm9sbCk7CiAgICAgIH0KICAgIH0KICAgIGlnbm9yZSh0NCkgewogICAgICBpZiAoIXRoaXMuYWN0aXZlKQogICAgICAgIHJldHVybiB0NCgpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB0aGlzLnN0b3AoKSwgdDQoKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0aGlzLnN0YXJ0KCksIHRoaXMuY2xlYXIoKTsKICAgICAgfQogICAgfQogICAgc3RhcnQoKSB7CiAgICAgIHRoaXMuYWN0aXZlIHx8ICh0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy5kb20sIGxyKSwgRGUzICYmIHRoaXMuZG9tLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZCIsIHRoaXMub25DaGFyRGF0YSksIHRoaXMuYWN0aXZlID0gdHJ1ZSk7CiAgICB9CiAgICBzdG9wKCkgewogICAgICAhdGhpcy5hY3RpdmUgfHwgKHRoaXMuYWN0aXZlID0gZmFsc2UsIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpLCBEZTMgJiYgdGhpcy5kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIiwgdGhpcy5vbkNoYXJEYXRhKSk7CiAgICB9CiAgICBjbGVhcigpIHsKICAgICAgdGhpcy5wcm9jZXNzUmVjb3JkcygpLCB0aGlzLnF1ZXVlLmxlbmd0aCA9IDAsIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlOwogICAgfQogICAgZGVsYXlBbmRyb2lkS2V5KHQ0LCBlNSkgewogICAgICB2YXIgaTQ7CiAgICAgIHRoaXMuZGVsYXllZEFuZHJvaWRLZXkgfHwgdGhpcy52aWV3Lndpbi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIGxldCBuOCA9IHRoaXMuZGVsYXllZEFuZHJvaWRLZXk7CiAgICAgICAgdGhpcy5kZWxheWVkQW5kcm9pZEtleSA9IG51bGwsIHRoaXMuZGVsYXllZEZsdXNoID0gLTEsICF0aGlzLmZsdXNoKCkgJiYgbjguZm9yY2UgJiYgRXQodGhpcy5kb20sIG44LmtleSwgbjgua2V5Q29kZSk7CiAgICAgIH0pLCAoIXRoaXMuZGVsYXllZEFuZHJvaWRLZXkgfHwgdDQgPT0gIkVudGVyIikgJiYgKHRoaXMuZGVsYXllZEFuZHJvaWRLZXkgPSB7IGtleTogdDQsIGtleUNvZGU6IGU1LCBmb3JjZTogdGhpcy5sYXN0Q2hhbmdlIDwgRGF0ZS5ub3coKSAtIDUwIHx8ICEhKCEoKGk0ID0gdGhpcy5kZWxheWVkQW5kcm9pZEtleSkgPT09IG51bGwgfHwgaTQgPT09IHZvaWQgMCkgJiYgaTQuZm9yY2UpIH0pOwogICAgfQogICAgZmx1c2hTb29uKCkgewogICAgICB0aGlzLmRlbGF5ZWRGbHVzaCA8IDAgJiYgKHRoaXMuZGVsYXllZEZsdXNoID0gdGhpcy52aWV3Lndpbi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIHRoaXMuZGVsYXllZEZsdXNoID0gLTEsIHRoaXMuZmx1c2goKTsKICAgICAgfSkpOwogICAgfQogICAgZm9yY2VGbHVzaCgpIHsKICAgICAgdGhpcy5kZWxheWVkRmx1c2ggPj0gMCAmJiAodGhpcy52aWV3Lndpbi5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmRlbGF5ZWRGbHVzaCksIHRoaXMuZGVsYXllZEZsdXNoID0gLTEpLCB0aGlzLmZsdXNoKCk7CiAgICB9CiAgICBwcm9jZXNzUmVjb3JkcygpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5xdWV1ZTsKICAgICAgZm9yIChsZXQgcjMgb2YgdGhpcy5vYnNlcnZlci50YWtlUmVjb3JkcygpKQogICAgICAgIHQ0LnB1c2gocjMpOwogICAgICB0NC5sZW5ndGggJiYgKHRoaXMucXVldWUgPSBbXSk7CiAgICAgIGxldCBlNSA9IC0xLCBpNCA9IC0xLCBuOCA9IGZhbHNlOwogICAgICBmb3IgKGxldCByMyBvZiB0NCkgewogICAgICAgIGxldCBvNCA9IHRoaXMucmVhZE11dGF0aW9uKHIzKTsKICAgICAgICAhbzQgfHwgKG80LnR5cGVPdmVyICYmIChuOCA9IHRydWUpLCBlNSA9PSAtMSA/IHsgZnJvbTogZTUsIHRvOiBpNCB9ID0gbzQgOiAoZTUgPSBNYXRoLm1pbihvNC5mcm9tLCBlNSksIGk0ID0gTWF0aC5tYXgobzQudG8sIGk0KSkpOwogICAgICB9CiAgICAgIHJldHVybiB7IGZyb206IGU1LCB0bzogaTQsIHR5cGVPdmVyOiBuOCB9OwogICAgfQogICAgZmx1c2godDQgPSB0cnVlKSB7CiAgICAgIGlmICh0aGlzLmRlbGF5ZWRGbHVzaCA+PSAwIHx8IHRoaXMuZGVsYXllZEFuZHJvaWRLZXkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB0NCAmJiB0aGlzLnJlYWRTZWxlY3Rpb25SYW5nZSgpOwogICAgICBsZXQgeyBmcm9tOiBlNSwgdG86IGk0LCB0eXBlT3ZlcjogbjggfSA9IHRoaXMucHJvY2Vzc1JlY29yZHMoKSwgcjMgPSB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgJiYgWnQodGhpcy5kb20sIHRoaXMuc2VsZWN0aW9uUmFuZ2UpOwogICAgICBpZiAoZTUgPCAwICYmICFyMykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGU1ID4gLTEgJiYgKHRoaXMubGFzdENoYW5nZSA9IERhdGUubm93KCkpLCB0aGlzLnZpZXcuaW5wdXRTdGF0ZS5sYXN0Rm9jdXNUaW1lID0gMCwgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkID0gZmFsc2U7CiAgICAgIGxldCBvNCA9IHRoaXMudmlldy5zdGF0ZSwgbDcgPSB0aGlzLm9uQ2hhbmdlKGU1LCBpNCwgbjgpOwogICAgICByZXR1cm4gdGhpcy52aWV3LnN0YXRlID09IG80ICYmIHRoaXMudmlldy51cGRhdGUoW10pLCBsNzsKICAgIH0KICAgIHJlYWRNdXRhdGlvbih0NCkgewogICAgICBsZXQgZTUgPSB0aGlzLnZpZXcuZG9jVmlldy5uZWFyZXN0KHQ0LnRhcmdldCk7CiAgICAgIGlmICghZTUgfHwgZTUuaWdub3JlTXV0YXRpb24odDQpKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBpZiAoZTUubWFya0RpcnR5KHQ0LnR5cGUgPT0gImF0dHJpYnV0ZXMiKSwgdDQudHlwZSA9PSAiYXR0cmlidXRlcyIgJiYgKGU1LmRpcnR5IHw9IDQpLCB0NC50eXBlID09ICJjaGlsZExpc3QiKSB7CiAgICAgICAgbGV0IGk0ID0gR2koZTUsIHQ0LnByZXZpb3VzU2libGluZyB8fCB0NC50YXJnZXQucHJldmlvdXNTaWJsaW5nLCAtMSksIG44ID0gR2koZTUsIHQ0Lm5leHRTaWJsaW5nIHx8IHQ0LnRhcmdldC5uZXh0U2libGluZywgMSk7CiAgICAgICAgcmV0dXJuIHsgZnJvbTogaTQgPyBlNS5wb3NBZnRlcihpNCkgOiBlNS5wb3NBdFN0YXJ0LCB0bzogbjggPyBlNS5wb3NCZWZvcmUobjgpIDogZTUucG9zQXRFbmQsIHR5cGVPdmVyOiBmYWxzZSB9OwogICAgICB9IGVsc2UKICAgICAgICByZXR1cm4gdDQudHlwZSA9PSAiY2hhcmFjdGVyRGF0YSIgPyB7IGZyb206IGU1LnBvc0F0U3RhcnQsIHRvOiBlNS5wb3NBdEVuZCwgdHlwZU92ZXI6IHQ0LnRhcmdldC5ub2RlVmFsdWUgPT0gdDQub2xkVmFsdWUgfSA6IG51bGw7CiAgICB9CiAgICBzZXRXaW5kb3codDQpIHsKICAgICAgdDQgIT0gdGhpcy53aW4gJiYgKHRoaXMucmVtb3ZlV2luZG93TGlzdGVuZXJzKHRoaXMud2luKSwgdGhpcy53aW4gPSB0NCwgdGhpcy5hZGRXaW5kb3dMaXN0ZW5lcnModGhpcy53aW4pKTsKICAgIH0KICAgIGFkZFdpbmRvd0xpc3RlbmVycyh0NCkgewogICAgICB0NC5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLm9uUmVzaXplKSwgdDQuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlcHJpbnQiLCB0aGlzLm9uUHJpbnQpLCB0NC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLm9uU2Nyb2xsKSwgdDQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSk7CiAgICB9CiAgICByZW1vdmVXaW5kb3dMaXN0ZW5lcnModDQpIHsKICAgICAgdDQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5vblNjcm9sbCksIHQ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMub25SZXNpemUpLCB0NC5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmVwcmludCIsIHRoaXMub25QcmludCksIHQ0LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UpOwogICAgfQogICAgZGVzdHJveSgpIHsKICAgICAgdmFyIHQ0LCBlNSwgaTQ7CiAgICAgIHRoaXMuc3RvcCgpLCAodDQgPSB0aGlzLmludGVyc2VjdGlvbikgPT09IG51bGwgfHwgdDQgPT09IHZvaWQgMCB8fCB0NC5kaXNjb25uZWN0KCksIChlNSA9IHRoaXMuZ2FwSW50ZXJzZWN0aW9uKSA9PT0gbnVsbCB8fCBlNSA9PT0gdm9pZCAwIHx8IGU1LmRpc2Nvbm5lY3QoKSwgKGk0ID0gdGhpcy5yZXNpemUpID09PSBudWxsIHx8IGk0ID09PSB2b2lkIDAgfHwgaTQuZGlzY29ubmVjdCgpOwogICAgICBmb3IgKGxldCBuOCBvZiB0aGlzLnNjcm9sbFRhcmdldHMpCiAgICAgICAgbjgucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5vblNjcm9sbCk7CiAgICAgIHRoaXMucmVtb3ZlV2luZG93TGlzdGVuZXJzKHRoaXMud2luKSwgY2xlYXJUaW1lb3V0KHRoaXMucGFyZW50Q2hlY2spLCBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEdpKHM4LCB0NCwgZTUpIHsKICAgIGZvciAoOyB0NDsgKSB7CiAgICAgIGxldCBpNCA9IEEzLmdldCh0NCk7CiAgICAgIGlmIChpNCAmJiBpNC5wYXJlbnQgPT0gczgpCiAgICAgICAgcmV0dXJuIGk0OwogICAgICBsZXQgbjggPSB0NC5wYXJlbnROb2RlOwogICAgICB0NCA9IG44ICE9IHM4LmRvbSA/IG44IDogZTUgPiAwID8gdDQubmV4dFNpYmxpbmcgOiB0NC5wcmV2aW91c1NpYmxpbmc7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gaHIoczgpIHsKICAgIGxldCB0NCA9IG51bGw7CiAgICBmdW5jdGlvbiBlNShoMTApIHsKICAgICAgaDEwLnByZXZlbnREZWZhdWx0KCksIGgxMC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwgdDQgPSBoMTAuZ2V0VGFyZ2V0UmFuZ2VzKClbMF07CiAgICB9CiAgICBpZiAoczguY29udGVudERPTS5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVpbnB1dCIsIGU1LCB0cnVlKSwgczguZG9tLm93bmVyRG9jdW1lbnQuZXhlY0NvbW1hbmQoImluZGVudCIpLCBzOC5jb250ZW50RE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJlZm9yZWlucHV0IiwgZTUsIHRydWUpLCAhdDQpCiAgICAgIHJldHVybiBudWxsOwogICAgbGV0IGk0ID0gdDQuc3RhcnRDb250YWluZXIsIG44ID0gdDQuc3RhcnRPZmZzZXQsIHIzID0gdDQuZW5kQ29udGFpbmVyLCBvNCA9IHQ0LmVuZE9mZnNldCwgbDcgPSBzOC5kb2NWaWV3LmRvbUF0UG9zKHM4LnN0YXRlLnNlbGVjdGlvbi5tYWluLmFuY2hvcik7CiAgICByZXR1cm4gbmUzKGw3Lm5vZGUsIGw3Lm9mZnNldCwgcjMsIG80KSAmJiAoW2k0LCBuOCwgcjMsIG80XSA9IFtyMywgbzQsIGk0LCBuOF0pLCB7IGFuY2hvck5vZGU6IGk0LCBhbmNob3JPZmZzZXQ6IG44LCBmb2N1c05vZGU6IHIzLCBmb2N1c09mZnNldDogbzQgfTsKICB9CiAgZnVuY3Rpb24gYXIoczgsIHQ0LCBlNSwgaTQpIHsKICAgIGxldCBuOCwgcjMsIG80ID0gczguc3RhdGUuc2VsZWN0aW9uLm1haW47CiAgICBpZiAodDQgPiAtMSkgewogICAgICBsZXQgbDcgPSBzOC5kb2NWaWV3LmRvbUJvdW5kc0Fyb3VuZCh0NCwgZTUsIDApOwogICAgICBpZiAoIWw3IHx8IHM4LnN0YXRlLnJlYWRPbmx5KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgbGV0IHsgZnJvbTogaDEwLCB0bzogYTQgfSA9IGw3LCBjMTcgPSBzOC5kb2NWaWV3LmltcHJlY2lzZUhlYWQgfHwgczguZG9jVmlldy5pbXByZWNpc2VBbmNob3IgPyBbXSA6IGZyKHM4KSwgZjExID0gbmV3IGFlMyhjMTcsIHM4LnN0YXRlKTsKICAgICAgZjExLnJlYWRSYW5nZShsNy5zdGFydERPTSwgbDcuZW5kRE9NKTsKICAgICAgbGV0IGQxNSA9IG80LmZyb20sIHUxMSA9IG51bGw7CiAgICAgIChzOC5pbnB1dFN0YXRlLmxhc3RLZXlDb2RlID09PSA4ICYmIHM4LmlucHV0U3RhdGUubGFzdEtleVRpbWUgPiBEYXRlLm5vdygpIC0gMTAwIHx8IHkzLmFuZHJvaWQgJiYgZjExLnRleHQubGVuZ3RoIDwgYTQgLSBoMTApICYmIChkMTUgPSBvNC50bywgdTExID0gImVuZCIpOwogICAgICBsZXQgcDE4ID0gY3Ioczguc3RhdGUuZG9jLnNsaWNlU3RyaW5nKGgxMCwgYTQsIHN0MiksIGYxMS50ZXh0LCBkMTUgLSBoMTAsIHUxMSk7CiAgICAgIHAxOCAmJiAoeTMuY2hyb21lICYmIHM4LmlucHV0U3RhdGUubGFzdEtleUNvZGUgPT0gMTMgJiYgcDE4LnRvQiA9PSBwMTguZnJvbSArIDIgJiYgZjExLnRleHQuc2xpY2UocDE4LmZyb20sIHAxOC50b0IpID09IHN0MiArIHN0MiAmJiBwMTgudG9CLS0sIG44ID0geyBmcm9tOiBoMTAgKyBwMTguZnJvbSwgdG86IGgxMCArIHAxOC50b0EsIGluc2VydDogdi5vZihmMTEudGV4dC5zbGljZShwMTguZnJvbSwgcDE4LnRvQikuc3BsaXQoc3QyKSkgfSksIHIzID0gZHIoYzE3LCBoMTApOwogICAgfSBlbHNlIGlmIChzOC5oYXNGb2N1cyB8fCAhczguc3RhdGUuZmFjZXQoQ2U0KSkgewogICAgICBsZXQgbDcgPSBzOC5vYnNlcnZlci5zZWxlY3Rpb25SYW5nZSwgeyBpbXByZWNpc2VIZWFkOiBoMTAsIGltcHJlY2lzZUFuY2hvcjogYTQgfSA9IHM4LmRvY1ZpZXcsIGMxNyA9IGgxMCAmJiBoMTAubm9kZSA9PSBsNy5mb2N1c05vZGUgJiYgaDEwLm9mZnNldCA9PSBsNy5mb2N1c09mZnNldCB8fCAheXQoczguY29udGVudERPTSwgbDcuZm9jdXNOb2RlKSA/IHM4LnN0YXRlLnNlbGVjdGlvbi5tYWluLmhlYWQgOiBzOC5kb2NWaWV3LnBvc0Zyb21ET00obDcuZm9jdXNOb2RlLCBsNy5mb2N1c09mZnNldCksIGYxMSA9IGE0ICYmIGE0Lm5vZGUgPT0gbDcuYW5jaG9yTm9kZSAmJiBhNC5vZmZzZXQgPT0gbDcuYW5jaG9yT2Zmc2V0IHx8ICF5dChzOC5jb250ZW50RE9NLCBsNy5hbmNob3JOb2RlKSA/IHM4LnN0YXRlLnNlbGVjdGlvbi5tYWluLmFuY2hvciA6IHM4LmRvY1ZpZXcucG9zRnJvbURPTShsNy5hbmNob3JOb2RlLCBsNy5hbmNob3JPZmZzZXQpOwogICAgICAoYzE3ICE9IG80LmhlYWQgfHwgZjExICE9IG80LmFuY2hvcikgJiYgKHIzID0gZzIuc2luZ2xlKGYxMSwgYzE3KSk7CiAgICB9CiAgICBpZiAoIW44ICYmICFyMykKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKCFuOCAmJiBpNCAmJiAhbzQuZW1wdHkgJiYgcjMgJiYgcjMubWFpbi5lbXB0eSA/IG44ID0geyBmcm9tOiBvNC5mcm9tLCB0bzogbzQudG8sIGluc2VydDogczguc3RhdGUuZG9jLnNsaWNlKG80LmZyb20sIG80LnRvKSB9IDogbjggJiYgbjguZnJvbSA+PSBvNC5mcm9tICYmIG44LnRvIDw9IG80LnRvICYmIChuOC5mcm9tICE9IG80LmZyb20gfHwgbjgudG8gIT0gbzQudG8pICYmIG80LnRvIC0gbzQuZnJvbSAtIChuOC50byAtIG44LmZyb20pIDw9IDQgPyBuOCA9IHsgZnJvbTogbzQuZnJvbSwgdG86IG80LnRvLCBpbnNlcnQ6IHM4LnN0YXRlLmRvYy5zbGljZShvNC5mcm9tLCBuOC5mcm9tKS5hcHBlbmQobjguaW5zZXJ0KS5hcHBlbmQoczguc3RhdGUuZG9jLnNsaWNlKG44LnRvLCBvNC50bykpIH0gOiAoeTMubWFjIHx8IHkzLmFuZHJvaWQpICYmIG44ICYmIG44LmZyb20gPT0gbjgudG8gJiYgbjguZnJvbSA9PSBvNC5oZWFkIC0gMSAmJiAvXlwuID8kLy50ZXN0KG44Lmluc2VydC50b1N0cmluZygpKSAmJiAocjMgJiYgbjguaW5zZXJ0Lmxlbmd0aCA9PSAyICYmIChyMyA9IGcyLnNpbmdsZShyMy5tYWluLmFuY2hvciAtIDEsIHIzLm1haW4uaGVhZCAtIDEpKSwgbjggPSB7IGZyb206IG80LmZyb20sIHRvOiBvNC50bywgaW5zZXJ0OiB2Lm9mKFsiICJdKSB9KSwgbjgpIHsKICAgICAgbGV0IGw3ID0gczguc3RhdGU7CiAgICAgIGlmICh5My5pb3MgJiYgczguaW5wdXRTdGF0ZS5mbHVzaElPU0tleShzOCkgfHwgeTMuYW5kcm9pZCAmJiAobjguZnJvbSA9PSBvNC5mcm9tICYmIG44LnRvID09IG80LnRvICYmIG44Lmluc2VydC5sZW5ndGggPT0gMSAmJiBuOC5pbnNlcnQubGluZXMgPT0gMiAmJiBFdChzOC5jb250ZW50RE9NLCAiRW50ZXIiLCAxMykgfHwgbjguZnJvbSA9PSBvNC5mcm9tIC0gMSAmJiBuOC50byA9PSBvNC50byAmJiBuOC5pbnNlcnQubGVuZ3RoID09IDAgJiYgRXQoczguY29udGVudERPTSwgIkJhY2tzcGFjZSIsIDgpIHx8IG44LmZyb20gPT0gbzQuZnJvbSAmJiBuOC50byA9PSBvNC50byArIDEgJiYgbjguaW5zZXJ0Lmxlbmd0aCA9PSAwICYmIEV0KHM4LmNvbnRlbnRET00sICJEZWxldGUiLCA0NikpKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBsZXQgaDEwID0gbjguaW5zZXJ0LnRvU3RyaW5nKCk7CiAgICAgIGlmIChzOC5zdGF0ZS5mYWNldChUczIpLnNvbWUoKGYxMSkgPT4gZjExKHM4LCBuOC5mcm9tLCBuOC50bywgaDEwKSkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIHM4LmlucHV0U3RhdGUuY29tcG9zaW5nID49IDAgJiYgczguaW5wdXRTdGF0ZS5jb21wb3NpbmcrKzsKICAgICAgbGV0IGE0OwogICAgICBpZiAobjguZnJvbSA+PSBvNC5mcm9tICYmIG44LnRvIDw9IG80LnRvICYmIG44LnRvIC0gbjguZnJvbSA+PSAobzQudG8gLSBvNC5mcm9tKSAvIDMgJiYgKCFyMyB8fCByMy5tYWluLmVtcHR5ICYmIHIzLm1haW4uZnJvbSA9PSBuOC5mcm9tICsgbjguaW5zZXJ0Lmxlbmd0aCkgJiYgczguaW5wdXRTdGF0ZS5jb21wb3NpbmcgPCAwKSB7CiAgICAgICAgbGV0IGYxMSA9IG80LmZyb20gPCBuOC5mcm9tID8gbDcuc2xpY2VEb2MobzQuZnJvbSwgbjguZnJvbSkgOiAiIiwgZDE1ID0gbzQudG8gPiBuOC50byA/IGw3LnNsaWNlRG9jKG44LnRvLCBvNC50bykgOiAiIjsKICAgICAgICBhNCA9IGw3LnJlcGxhY2VTZWxlY3Rpb24oczguc3RhdGUudG9UZXh0KGYxMSArIG44Lmluc2VydC5zbGljZVN0cmluZygwLCB2b2lkIDAsIHM4LnN0YXRlLmxpbmVCcmVhaykgKyBkMTUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZXQgZjExID0gbDcuY2hhbmdlcyhuOCksIGQxNSA9IHIzICYmICFsNy5zZWxlY3Rpb24ubWFpbi5lcShyMy5tYWluKSAmJiByMy5tYWluLnRvIDw9IGYxMS5uZXdMZW5ndGggPyByMy5tYWluIDogdm9pZCAwOwogICAgICAgIGlmIChsNy5zZWxlY3Rpb24ucmFuZ2VzLmxlbmd0aCA+IDEgJiYgczguaW5wdXRTdGF0ZS5jb21wb3NpbmcgPj0gMCAmJiBuOC50byA8PSBvNC50byAmJiBuOC50byA+PSBvNC50byAtIDEwKSB7CiAgICAgICAgICBsZXQgdTExID0gczguc3RhdGUuc2xpY2VEb2MobjguZnJvbSwgbjgudG8pLCBwMTggPSBXcyhzOCkgfHwgczguc3RhdGUuZG9jLmxpbmVBdChvNC5oZWFkKSwgYjI1ID0gbzQudG8gLSBuOC50bywgbTIzID0gbzQudG8gLSBvNC5mcm9tOwogICAgICAgICAgYTQgPSBsNy5jaGFuZ2VCeVJhbmdlKChnMTIpID0+IHsKICAgICAgICAgICAgaWYgKGcxMi5mcm9tID09IG80LmZyb20gJiYgZzEyLnRvID09IG80LnRvKQogICAgICAgICAgICAgIHJldHVybiB7IGNoYW5nZXM6IGYxMSwgcmFuZ2U6IGQxNSB8fCBnMTIubWFwKGYxMSkgfTsKICAgICAgICAgICAgbGV0IFMyMSA9IGcxMi50byAtIGIyNSwgdzIxID0gUzIxIC0gdTExLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGcxMi50byAtIGcxMi5mcm9tICE9IG0yMyB8fCBzOC5zdGF0ZS5zbGljZURvYyh3MjEsIFMyMSkgIT0gdTExIHx8IHAxOCAmJiBnMTIudG8gPj0gcDE4LmZyb20gJiYgZzEyLmZyb20gPD0gcDE4LnRvKQogICAgICAgICAgICAgIHJldHVybiB7IHJhbmdlOiBnMTIgfTsKICAgICAgICAgICAgbGV0IHYxNSA9IGw3LmNoYW5nZXMoeyBmcm9tOiB3MjEsIHRvOiBTMjEsIGluc2VydDogbjguaW5zZXJ0IH0pLCBMMjIgPSBnMTIudG8gLSBvNC50bzsKICAgICAgICAgICAgcmV0dXJuIHsgY2hhbmdlczogdjE1LCByYW5nZTogZDE1ID8gZzIucmFuZ2UoTWF0aC5tYXgoMCwgZDE1LmFuY2hvciArIEwyMiksIE1hdGgubWF4KDAsIGQxNS5oZWFkICsgTDIyKSkgOiBnMTIubWFwKHYxNSkgfTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZQogICAgICAgICAgYTQgPSB7IGNoYW5nZXM6IGYxMSwgc2VsZWN0aW9uOiBkMTUgJiYgbDcuc2VsZWN0aW9uLnJlcGxhY2VSYW5nZShkMTUpIH07CiAgICAgIH0KICAgICAgbGV0IGMxNyA9ICJpbnB1dC50eXBlIjsKICAgICAgcmV0dXJuIHM4LmNvbXBvc2luZyAmJiAoYzE3ICs9ICIuY29tcG9zZSIsIHM4LmlucHV0U3RhdGUuY29tcG9zaXRpb25GaXJzdENoYW5nZSAmJiAoYzE3ICs9ICIuc3RhcnQiLCBzOC5pbnB1dFN0YXRlLmNvbXBvc2l0aW9uRmlyc3RDaGFuZ2UgPSBmYWxzZSkpLCBzOC5kaXNwYXRjaChhNCwgeyBzY3JvbGxJbnRvVmlldzogdHJ1ZSwgdXNlckV2ZW50OiBjMTcgfSksIHRydWU7CiAgICB9IGVsc2UgaWYgKHIzICYmICFyMy5tYWluLmVxKG80KSkgewogICAgICBsZXQgbDcgPSBmYWxzZSwgaDEwID0gInNlbGVjdCI7CiAgICAgIHJldHVybiBzOC5pbnB1dFN0YXRlLmxhc3RTZWxlY3Rpb25UaW1lID4gRGF0ZS5ub3coKSAtIDUwICYmIChzOC5pbnB1dFN0YXRlLmxhc3RTZWxlY3Rpb25PcmlnaW4gPT0gInNlbGVjdCIgJiYgKGw3ID0gdHJ1ZSksIGgxMCA9IHM4LmlucHV0U3RhdGUubGFzdFNlbGVjdGlvbk9yaWdpbiksIHM4LmRpc3BhdGNoKHsgc2VsZWN0aW9uOiByMywgc2Nyb2xsSW50b1ZpZXc6IGw3LCB1c2VyRXZlbnQ6IGgxMCB9KSwgdHJ1ZTsKICAgIH0gZWxzZQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIGNyKHM4LCB0NCwgZTUsIGk0KSB7CiAgICBsZXQgbjggPSBNYXRoLm1pbihzOC5sZW5ndGgsIHQ0Lmxlbmd0aCksIHIzID0gMDsKICAgIGZvciAoOyByMyA8IG44ICYmIHM4LmNoYXJDb2RlQXQocjMpID09IHQ0LmNoYXJDb2RlQXQocjMpOyApCiAgICAgIHIzKys7CiAgICBpZiAocjMgPT0gbjggJiYgczgubGVuZ3RoID09IHQ0Lmxlbmd0aCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBsZXQgbzQgPSBzOC5sZW5ndGgsIGw3ID0gdDQubGVuZ3RoOwogICAgZm9yICg7IG80ID4gMCAmJiBsNyA+IDAgJiYgczguY2hhckNvZGVBdChvNCAtIDEpID09IHQ0LmNoYXJDb2RlQXQobDcgLSAxKTsgKQogICAgICBvNC0tLCBsNy0tOwogICAgaWYgKGk0ID09ICJlbmQiKSB7CiAgICAgIGxldCBoMTAgPSBNYXRoLm1heCgwLCByMyAtIE1hdGgubWluKG80LCBsNykpOwogICAgICBlNSAtPSBvNCArIGgxMCAtIHIzOwogICAgfQogICAgcmV0dXJuIG80IDwgcjMgJiYgczgubGVuZ3RoIDwgdDQubGVuZ3RoID8gKHIzIC09IGU1IDw9IHIzICYmIGU1ID49IG80ID8gcjMgLSBlNSA6IDAsIGw3ID0gcjMgKyAobDcgLSBvNCksIG80ID0gcjMpIDogbDcgPCByMyAmJiAocjMgLT0gZTUgPD0gcjMgJiYgZTUgPj0gbDcgPyByMyAtIGU1IDogMCwgbzQgPSByMyArIChvNCAtIGw3KSwgbDcgPSByMyksIHsgZnJvbTogcjMsIHRvQTogbzQsIHRvQjogbDcgfTsKICB9CiAgZnVuY3Rpb24gZnIoczgpIHsKICAgIGxldCB0NCA9IFtdOwogICAgaWYgKHM4LnJvb3QuYWN0aXZlRWxlbWVudCAhPSBzOC5jb250ZW50RE9NKQogICAgICByZXR1cm4gdDQ7CiAgICBsZXQgeyBhbmNob3JOb2RlOiBlNSwgYW5jaG9yT2Zmc2V0OiBpNCwgZm9jdXNOb2RlOiBuOCwgZm9jdXNPZmZzZXQ6IHIzIH0gPSBzOC5vYnNlcnZlci5zZWxlY3Rpb25SYW5nZTsKICAgIHJldHVybiBlNSAmJiAodDQucHVzaChuZXcgY2UzKGU1LCBpNCkpLCAobjggIT0gZTUgfHwgcjMgIT0gaTQpICYmIHQ0LnB1c2gobmV3IGNlMyhuOCwgcjMpKSksIHQ0OwogIH0KICBmdW5jdGlvbiBkcihzOCwgdDQpIHsKICAgIGlmIChzOC5sZW5ndGggPT0gMCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBsZXQgZTUgPSBzOFswXS5wb3MsIGk0ID0gczgubGVuZ3RoID09IDIgPyBzOFsxXS5wb3MgOiBlNTsKICAgIHJldHVybiBlNSA+IC0xICYmIGk0ID4gLTEgPyBnMi5zaW5nbGUoZTUgKyB0NCwgaTQgKyB0NCkgOiBudWxsOwogIH0KICB2YXIgTTIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCA9IHt9KSB7CiAgICAgIHRoaXMucGx1Z2lucyA9IFtdLCB0aGlzLnBsdWdpbk1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHRoaXMuZWRpdG9yQXR0cnMgPSB7fSwgdGhpcy5jb250ZW50QXR0cnMgPSB7fSwgdGhpcy5iaWRpQ2FjaGUgPSBbXSwgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZSwgdGhpcy51cGRhdGVTdGF0ZSA9IDIsIHRoaXMubWVhc3VyZVNjaGVkdWxlZCA9IC0xLCB0aGlzLm1lYXN1cmVSZXF1ZXN0cyA9IFtdLCB0aGlzLmNvbnRlbnRET00gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgdGhpcy5zY3JvbGxET00gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgdGhpcy5zY3JvbGxET00udGFiSW5kZXggPSAtMSwgdGhpcy5zY3JvbGxET00uY2xhc3NOYW1lID0gImNtLXNjcm9sbGVyIiwgdGhpcy5zY3JvbGxET00uYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50RE9NKSwgdGhpcy5hbm5vdW5jZURPTSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCB0aGlzLmFubm91bmNlRE9NLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDAwMHB4IiwgdGhpcy5hbm5vdW5jZURPTS5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsICJwb2xpdGUiKSwgdGhpcy5kb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgdGhpcy5kb20uYXBwZW5kQ2hpbGQodGhpcy5hbm5vdW5jZURPTSksIHRoaXMuZG9tLmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsRE9NKSwgdGhpcy5fZGlzcGF0Y2ggPSB0NC5kaXNwYXRjaCB8fCAoKGU1KSA9PiB0aGlzLnVwZGF0ZShbZTVdKSksIHRoaXMuZGlzcGF0Y2ggPSB0aGlzLmRpc3BhdGNoLmJpbmQodGhpcyksIHRoaXMuX3Jvb3QgPSB0NC5yb290IHx8IHduKHQ0LnBhcmVudCkgfHwgZG9jdW1lbnQsIHRoaXMudmlld1N0YXRlID0gbmV3IGdlNCh0NC5zdGF0ZSB8fCB3LmNyZWF0ZSh0NCkpLCB0aGlzLnBsdWdpbnMgPSB0aGlzLnN0YXRlLmZhY2V0KEF0KS5tYXAoKGU1KSA9PiBuZXcgQnQoZTUpKTsKICAgICAgZm9yIChsZXQgZTUgb2YgdGhpcy5wbHVnaW5zKQogICAgICAgIGU1LnVwZGF0ZSh0aGlzKTsKICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBuaSh0aGlzLCAoZTUsIGk0LCBuOCkgPT4gYXIodGhpcywgZTUsIGk0LCBuOCksIChlNSkgPT4gewogICAgICAgIHRoaXMuaW5wdXRTdGF0ZS5ydW5TY3JvbGxIYW5kbGVycyh0aGlzLCBlNSksIHRoaXMub2JzZXJ2ZXIuaW50ZXJzZWN0aW5nICYmIHRoaXMubWVhc3VyZSgpOwogICAgICB9KSwgdGhpcy5pbnB1dFN0YXRlID0gbmV3IEdlMih0aGlzKSwgdGhpcy5pbnB1dFN0YXRlLmVuc3VyZUhhbmRsZXJzKHRoaXMsIHRoaXMucGx1Z2lucyksIHRoaXMuZG9jVmlldyA9IG5ldyBmZTModGhpcyksIHRoaXMubW91bnRTdHlsZXMoKSwgdGhpcy51cGRhdGVBdHRycygpLCB0aGlzLnVwZGF0ZVN0YXRlID0gMCwgdGhpcy5yZXF1ZXN0TWVhc3VyZSgpLCB0NC5wYXJlbnQgJiYgdDQucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZG9tKTsKICAgIH0KICAgIGdldCBzdGF0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld1N0YXRlLnN0YXRlOwogICAgfQogICAgZ2V0IHZpZXdwb3J0KCkgewogICAgICByZXR1cm4gdGhpcy52aWV3U3RhdGUudmlld3BvcnQ7CiAgICB9CiAgICBnZXQgdmlzaWJsZVJhbmdlcygpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld1N0YXRlLnZpc2libGVSYW5nZXM7CiAgICB9CiAgICBnZXQgaW5WaWV3KCkgewogICAgICByZXR1cm4gdGhpcy52aWV3U3RhdGUuaW5WaWV3OwogICAgfQogICAgZ2V0IGNvbXBvc2luZygpIHsKICAgICAgcmV0dXJuIHRoaXMuaW5wdXRTdGF0ZS5jb21wb3NpbmcgPiAwOwogICAgfQogICAgZ2V0IGNvbXBvc2l0aW9uU3RhcnRlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuaW5wdXRTdGF0ZS5jb21wb3NpbmcgPj0gMDsKICAgIH0KICAgIGdldCByb290KCkgewogICAgICByZXR1cm4gdGhpcy5fcm9vdDsKICAgIH0KICAgIGdldCB3aW4oKSB7CiAgICAgIHJldHVybiB0aGlzLmRvbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdzsKICAgIH0KICAgIGRpc3BhdGNoKC4uLnQ0KSB7CiAgICAgIHRoaXMuX2Rpc3BhdGNoKHQ0Lmxlbmd0aCA9PSAxICYmIHQ0WzBdIGluc3RhbmNlb2YgUyA/IHQ0WzBdIDogdGhpcy5zdGF0ZS51cGRhdGUoLi4udDQpKTsKICAgIH0KICAgIHVwZGF0ZSh0NCkgewogICAgICBpZiAodGhpcy51cGRhdGVTdGF0ZSAhPSAwKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2FsbHMgdG8gRWRpdG9yVmlldy51cGRhdGUgYXJlIG5vdCBhbGxvd2VkIHdoaWxlIGFuIHVwZGF0ZSBpcyBpbiBwcm9ncmVzcyIpOwogICAgICBsZXQgZTUgPSBmYWxzZSwgaTQgPSBmYWxzZSwgbjgsIHIzID0gdGhpcy5zdGF0ZTsKICAgICAgZm9yIChsZXQgbDcgb2YgdDQpIHsKICAgICAgICBpZiAobDcuc3RhcnRTdGF0ZSAhPSByMykKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gdXBkYXRlIHN0YXRlIHdpdGggYSB0cmFuc2FjdGlvbiB0aGF0IGRvZXNuJ3Qgc3RhcnQgZnJvbSB0aGUgcHJldmlvdXMgc3RhdGUuIik7CiAgICAgICAgcjMgPSBsNy5zdGF0ZTsKICAgICAgfQogICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHsKICAgICAgICB0aGlzLnZpZXdTdGF0ZS5zdGF0ZSA9IHIzOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5vYnNlcnZlci5jbGVhcigpLCByMy5mYWNldCh3LnBocmFzZXMpICE9IHRoaXMuc3RhdGUuZmFjZXQody5waHJhc2VzKSkKICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZShyMyk7CiAgICAgIG44ID0gU3QuY3JlYXRlKHRoaXMsIHIzLCB0NCk7CiAgICAgIGxldCBvNCA9IHRoaXMudmlld1N0YXRlLnNjcm9sbFRhcmdldDsKICAgICAgdHJ5IHsKICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlID0gMjsKICAgICAgICBmb3IgKGxldCBsNyBvZiB0NCkgewogICAgICAgICAgaWYgKG80ICYmIChvNCA9IG80Lm1hcChsNy5jaGFuZ2VzKSksIGw3LnNjcm9sbEludG9WaWV3KSB7CiAgICAgICAgICAgIGxldCB7IG1haW46IGgxMCB9ID0gbDcuc3RhdGUuc2VsZWN0aW9uOwogICAgICAgICAgICBvNCA9IG5ldyB4dChoMTAuZW1wdHkgPyBoMTAgOiBnMi5jdXJzb3IoaDEwLmhlYWQsIGgxMC5oZWFkID4gaDEwLmFuY2hvciA/IC0xIDogMSkpOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChsZXQgaDEwIG9mIGw3LmVmZmVjdHMpCiAgICAgICAgICAgIGgxMC5pcyhUaSkgJiYgKG80ID0gaDEwLnZhbHVlKTsKICAgICAgICB9CiAgICAgICAgdGhpcy52aWV3U3RhdGUudXBkYXRlKG44LCBvNCksIHRoaXMuYmlkaUNhY2hlID0gQ3QudXBkYXRlKHRoaXMuYmlkaUNhY2hlLCBuOC5jaGFuZ2VzKSwgbjguZW1wdHkgfHwgKHRoaXMudXBkYXRlUGx1Z2lucyhuOCksIHRoaXMuaW5wdXRTdGF0ZS51cGRhdGUobjgpKSwgZTUgPSB0aGlzLmRvY1ZpZXcudXBkYXRlKG44KSwgdGhpcy5zdGF0ZS5mYWNldChEdCkgIT0gdGhpcy5zdHlsZU1vZHVsZXMgJiYgdGhpcy5tb3VudFN0eWxlcygpLCBpNCA9IHRoaXMudXBkYXRlQXR0cnMoKSwgdGhpcy5zaG93QW5ub3VuY2VtZW50cyh0NCksIHRoaXMuZG9jVmlldy51cGRhdGVTZWxlY3Rpb24oZTUsIHQ0LnNvbWUoKGw3KSA9PiBsNy5pc1VzZXJFdmVudCgic2VsZWN0LnBvaW50ZXIiKSkpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRoaXMudXBkYXRlU3RhdGUgPSAwOwogICAgICB9CiAgICAgIGlmIChuOC5zdGFydFN0YXRlLmZhY2V0KFV0KSAhPSBuOC5zdGF0ZS5mYWNldChVdCkgJiYgKHRoaXMudmlld1N0YXRlLm11c3RNZWFzdXJlQ29udGVudCA9IHRydWUpLCAoZTUgfHwgaTQgfHwgbzQgfHwgdGhpcy52aWV3U3RhdGUubXVzdEVuZm9yY2VDdXJzb3JBc3NvYyB8fCB0aGlzLnZpZXdTdGF0ZS5tdXN0TWVhc3VyZUNvbnRlbnQpICYmIHRoaXMucmVxdWVzdE1lYXN1cmUoKSwgIW44LmVtcHR5KQogICAgICAgIGZvciAobGV0IGw3IG9mIHRoaXMuc3RhdGUuZmFjZXQoSWU0KSkKICAgICAgICAgIGw3KG44KTsKICAgIH0KICAgIHNldFN0YXRlKHQ0KSB7CiAgICAgIGlmICh0aGlzLnVwZGF0ZVN0YXRlICE9IDApCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYWxscyB0byBFZGl0b3JWaWV3LnNldFN0YXRlIGFyZSBub3QgYWxsb3dlZCB3aGlsZSBhbiB1cGRhdGUgaXMgaW4gcHJvZ3Jlc3MiKTsKICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7CiAgICAgICAgdGhpcy52aWV3U3RhdGUuc3RhdGUgPSB0NDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVTdGF0ZSA9IDI7CiAgICAgIGxldCBlNSA9IHRoaXMuaGFzRm9jdXM7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yIChsZXQgaTQgb2YgdGhpcy5wbHVnaW5zKQogICAgICAgICAgaTQuZGVzdHJveSh0aGlzKTsKICAgICAgICB0aGlzLnZpZXdTdGF0ZSA9IG5ldyBnZTQodDQpLCB0aGlzLnBsdWdpbnMgPSB0NC5mYWNldChBdCkubWFwKChpNCkgPT4gbmV3IEJ0KGk0KSksIHRoaXMucGx1Z2luTWFwLmNsZWFyKCk7CiAgICAgICAgZm9yIChsZXQgaTQgb2YgdGhpcy5wbHVnaW5zKQogICAgICAgICAgaTQudXBkYXRlKHRoaXMpOwogICAgICAgIHRoaXMuZG9jVmlldyA9IG5ldyBmZTModGhpcyksIHRoaXMuaW5wdXRTdGF0ZS5lbnN1cmVIYW5kbGVycyh0aGlzLCB0aGlzLnBsdWdpbnMpLCB0aGlzLm1vdW50U3R5bGVzKCksIHRoaXMudXBkYXRlQXR0cnMoKSwgdGhpcy5iaWRpQ2FjaGUgPSBbXTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlID0gMDsKICAgICAgfQogICAgICBlNSAmJiB0aGlzLmZvY3VzKCksIHRoaXMucmVxdWVzdE1lYXN1cmUoKTsKICAgIH0KICAgIHVwZGF0ZVBsdWdpbnModDQpIHsKICAgICAgbGV0IGU1ID0gdDQuc3RhcnRTdGF0ZS5mYWNldChBdCksIGk0ID0gdDQuc3RhdGUuZmFjZXQoQXQpOwogICAgICBpZiAoZTUgIT0gaTQpIHsKICAgICAgICBsZXQgbjggPSBbXTsKICAgICAgICBmb3IgKGxldCByMyBvZiBpNCkgewogICAgICAgICAgbGV0IG80ID0gZTUuaW5kZXhPZihyMyk7CiAgICAgICAgICBpZiAobzQgPCAwKQogICAgICAgICAgICBuOC5wdXNoKG5ldyBCdChyMykpOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGxldCBsNyA9IHRoaXMucGx1Z2luc1tvNF07CiAgICAgICAgICAgIGw3Lm11c3RVcGRhdGUgPSB0NCwgbjgucHVzaChsNyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IHIzIG9mIHRoaXMucGx1Z2lucykKICAgICAgICAgIHIzLm11c3RVcGRhdGUgIT0gdDQgJiYgcjMuZGVzdHJveSh0aGlzKTsKICAgICAgICB0aGlzLnBsdWdpbnMgPSBuOCwgdGhpcy5wbHVnaW5NYXAuY2xlYXIoKSwgdGhpcy5pbnB1dFN0YXRlLmVuc3VyZUhhbmRsZXJzKHRoaXMsIHRoaXMucGx1Z2lucyk7CiAgICAgIH0gZWxzZQogICAgICAgIGZvciAobGV0IG44IG9mIHRoaXMucGx1Z2lucykKICAgICAgICAgIG44Lm11c3RVcGRhdGUgPSB0NDsKICAgICAgZm9yIChsZXQgbjggPSAwOyBuOCA8IHRoaXMucGx1Z2lucy5sZW5ndGg7IG44KyspCiAgICAgICAgdGhpcy5wbHVnaW5zW244XS51cGRhdGUodGhpcyk7CiAgICB9CiAgICBtZWFzdXJlKHQ0ID0gdHJ1ZSkgewogICAgICBpZiAodGhpcy5kZXN0cm95ZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLm1lYXN1cmVTY2hlZHVsZWQgPiAtMSAmJiBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLm1lYXN1cmVTY2hlZHVsZWQpLCB0aGlzLm1lYXN1cmVTY2hlZHVsZWQgPSAwLCB0NCAmJiB0aGlzLm9ic2VydmVyLmZvcmNlRmx1c2goKTsKICAgICAgbGV0IGU1ID0gbnVsbCwgeyBzY3JvbGxIZWlnaHQ6IGk0LCBzY3JvbGxUb3A6IG44LCBjbGllbnRIZWlnaHQ6IHIzIH0gPSB0aGlzLnNjcm9sbERPTSwgbzQgPSBuOCA+IGk0IC0gcjMgLSA0ID8gaTQgOiBuODsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKGxldCBsNyA9IDA7IDsgbDcrKykgewogICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSA9IDE7CiAgICAgICAgICBsZXQgaDEwID0gdGhpcy52aWV3cG9ydCwgYTQgPSB0aGlzLnZpZXdTdGF0ZS5saW5lQmxvY2tBdEhlaWdodChvNCksIGMxNyA9IHRoaXMudmlld1N0YXRlLm1lYXN1cmUodGhpcyk7CiAgICAgICAgICBpZiAoIWMxNyAmJiAhdGhpcy5tZWFzdXJlUmVxdWVzdHMubGVuZ3RoICYmIHRoaXMudmlld1N0YXRlLnNjcm9sbFRhcmdldCA9PSBudWxsKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGlmIChsNyA+IDUpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKHRoaXMubWVhc3VyZVJlcXVlc3RzLmxlbmd0aCA/ICJNZWFzdXJlIGxvb3AgcmVzdGFydGVkIG1vcmUgdGhhbiA1IHRpbWVzIiA6ICJWaWV3cG9ydCBmYWlsZWQgdG8gc3RhYmlsaXplIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgbGV0IGYxMSA9IFtdOwogICAgICAgICAgYzE3ICYgNCB8fCAoW3RoaXMubWVhc3VyZVJlcXVlc3RzLCBmMTFdID0gW2YxMSwgdGhpcy5tZWFzdXJlUmVxdWVzdHNdKTsKICAgICAgICAgIGxldCBkMTUgPSBmMTEubWFwKChtMjMpID0+IHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXR1cm4gbTIzLnJlYWQodGhpcyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGcxMikgewogICAgICAgICAgICAgIHJldHVybiBudDIodGhpcy5zdGF0ZSwgZzEyKSwgWWk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLCB1MTEgPSBTdC5jcmVhdGUodGhpcywgdGhpcy5zdGF0ZSwgW10pLCBwMTggPSBmYWxzZSwgYjI1ID0gZmFsc2U7CiAgICAgICAgICB1MTEuZmxhZ3MgfD0gYzE3LCBlNSA/IGU1LmZsYWdzIHw9IGMxNyA6IGU1ID0gdTExLCB0aGlzLnVwZGF0ZVN0YXRlID0gMiwgdTExLmVtcHR5IHx8ICh0aGlzLnVwZGF0ZVBsdWdpbnModTExKSwgdGhpcy5pbnB1dFN0YXRlLnVwZGF0ZSh1MTEpLCB0aGlzLnVwZGF0ZUF0dHJzKCksIHAxOCA9IHRoaXMuZG9jVmlldy51cGRhdGUodTExKSk7CiAgICAgICAgICBmb3IgKGxldCBtMjMgPSAwOyBtMjMgPCBmMTEubGVuZ3RoOyBtMjMrKykKICAgICAgICAgICAgaWYgKGQxNVttMjNdICE9IFlpKQogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBsZXQgZzEyID0gZjExW20yM107CiAgICAgICAgICAgICAgICBnMTIud3JpdGUgJiYgZzEyLndyaXRlKGQxNVttMjNdLCB0aGlzKTsKICAgICAgICAgICAgICB9IGNhdGNoIChnMTIpIHsKICAgICAgICAgICAgICAgIG50Mih0aGlzLnN0YXRlLCBnMTIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLnZpZXdTdGF0ZS5zY3JvbGxUYXJnZXQpCiAgICAgICAgICAgIHRoaXMuZG9jVmlldy5zY3JvbGxJbnRvVmlldyh0aGlzLnZpZXdTdGF0ZS5zY3JvbGxUYXJnZXQpLCB0aGlzLnZpZXdTdGF0ZS5zY3JvbGxUYXJnZXQgPSBudWxsLCBiMjUgPSB0cnVlOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGxldCBtMjMgPSB0aGlzLnZpZXdTdGF0ZS5saW5lQmxvY2tBdChhNC5mcm9tKS50b3AgLSBhNC50b3A7CiAgICAgICAgICAgIChtMjMgPiAxIHx8IG0yMyA8IC0xKSAmJiAodGhpcy5zY3JvbGxET00uc2Nyb2xsVG9wICs9IG0yMywgYjI1ID0gdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocDE4ICYmIHRoaXMuZG9jVmlldy51cGRhdGVTZWxlY3Rpb24odHJ1ZSksIHRoaXMudmlld3BvcnQuZnJvbSA9PSBoMTAuZnJvbSAmJiB0aGlzLnZpZXdwb3J0LnRvID09IGgxMC50byAmJiAhYjI1ICYmIHRoaXMubWVhc3VyZVJlcXVlc3RzLmxlbmd0aCA9PSAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSA9IDAsIHRoaXMubWVhc3VyZVNjaGVkdWxlZCA9IC0xOwogICAgICB9CiAgICAgIGlmIChlNSAmJiAhZTUuZW1wdHkpCiAgICAgICAgZm9yIChsZXQgbDcgb2YgdGhpcy5zdGF0ZS5mYWNldChJZTQpKQogICAgICAgICAgbDcoZTUpOwogICAgfQogICAgZ2V0IHRoZW1lQ2xhc3NlcygpIHsKICAgICAgcmV0dXJuIGlpICsgIiAiICsgKHRoaXMuc3RhdGUuZmFjZXQoZWkpID8gWHMgOiBZcykgKyAiICIgKyB0aGlzLnN0YXRlLmZhY2V0KFV0KTsKICAgIH0KICAgIHVwZGF0ZUF0dHJzKCkgewogICAgICBsZXQgdDQgPSBYaSh0aGlzLCBScywgeyBjbGFzczogImNtLWVkaXRvciIgKyAodGhpcy5oYXNGb2N1cyA/ICIgY20tZm9jdXNlZCAiIDogIiAiKSArIHRoaXMudGhlbWVDbGFzc2VzIH0pLCBlNSA9IHsgc3BlbGxjaGVjazogImZhbHNlIiwgYXV0b2NvcnJlY3Q6ICJvZmYiLCBhdXRvY2FwaXRhbGl6ZTogIm9mZiIsIHRyYW5zbGF0ZTogIm5vIiwgY29udGVudGVkaXRhYmxlOiB0aGlzLnN0YXRlLmZhY2V0KENlNCkgPyAidHJ1ZSIgOiAiZmFsc2UiLCBjbGFzczogImNtLWNvbnRlbnQiLCBzdHlsZTogYCR7eTMudGFiU2l6ZX06ICR7dGhpcy5zdGF0ZS50YWJTaXplfWAsIHJvbGU6ICJ0ZXh0Ym94IiwgImFyaWEtbXVsdGlsaW5lIjogInRydWUiIH07CiAgICAgIHRoaXMuc3RhdGUucmVhZE9ubHkgJiYgKGU1WyJhcmlhLXJlYWRvbmx5Il0gPSAidHJ1ZSIpLCBYaSh0aGlzLCB3aSwgZTUpOwogICAgICBsZXQgaTQgPSB0aGlzLm9ic2VydmVyLmlnbm9yZSgoKSA9PiB7CiAgICAgICAgbGV0IG44ID0gRmUzKHRoaXMuY29udGVudERPTSwgdGhpcy5jb250ZW50QXR0cnMsIGU1KSwgcjMgPSBGZTModGhpcy5kb20sIHRoaXMuZWRpdG9yQXR0cnMsIHQ0KTsKICAgICAgICByZXR1cm4gbjggfHwgcjM7CiAgICAgIH0pOwogICAgICByZXR1cm4gdGhpcy5lZGl0b3JBdHRycyA9IHQ0LCB0aGlzLmNvbnRlbnRBdHRycyA9IGU1LCBpNDsKICAgIH0KICAgIHNob3dBbm5vdW5jZW1lbnRzKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRydWU7CiAgICAgIGZvciAobGV0IGk0IG9mIHQ0KQogICAgICAgIGZvciAobGV0IG44IG9mIGk0LmVmZmVjdHMpCiAgICAgICAgICBpZiAobjguaXMoTTIuYW5ub3VuY2UpKSB7CiAgICAgICAgICAgIGU1ICYmICh0aGlzLmFubm91bmNlRE9NLnRleHRDb250ZW50ID0gIiIpLCBlNSA9IGZhbHNlOwogICAgICAgICAgICBsZXQgcjMgPSB0aGlzLmFubm91bmNlRE9NLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKICAgICAgICAgICAgcjMudGV4dENvbnRlbnQgPSBuOC52YWx1ZTsKICAgICAgICAgIH0KICAgIH0KICAgIG1vdW50U3R5bGVzKCkgewogICAgICB0aGlzLnN0eWxlTW9kdWxlcyA9IHRoaXMuc3RhdGUuZmFjZXQoRHQpLCBUMi5tb3VudCh0aGlzLnJvb3QsIHRoaXMuc3R5bGVNb2R1bGVzLmNvbmNhdChvcikucmV2ZXJzZSgpKTsKICAgIH0KICAgIHJlYWRNZWFzdXJlZCgpIHsKICAgICAgaWYgKHRoaXMudXBkYXRlU3RhdGUgPT0gMikKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlJlYWRpbmcgdGhlIGVkaXRvciBsYXlvdXQgaXNuJ3QgYWxsb3dlZCBkdXJpbmcgYW4gdXBkYXRlIik7CiAgICAgIHRoaXMudXBkYXRlU3RhdGUgPT0gMCAmJiB0aGlzLm1lYXN1cmVTY2hlZHVsZWQgPiAtMSAmJiB0aGlzLm1lYXN1cmUoZmFsc2UpOwogICAgfQogICAgcmVxdWVzdE1lYXN1cmUodDQpIHsKICAgICAgaWYgKHRoaXMubWVhc3VyZVNjaGVkdWxlZCA8IDAgJiYgKHRoaXMubWVhc3VyZVNjaGVkdWxlZCA9IHRoaXMud2luLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLm1lYXN1cmUoKSkpLCB0NCkgewogICAgICAgIGlmICh0NC5rZXkgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChsZXQgZTUgPSAwOyBlNSA8IHRoaXMubWVhc3VyZVJlcXVlc3RzLmxlbmd0aDsgZTUrKykKICAgICAgICAgICAgaWYgKHRoaXMubWVhc3VyZVJlcXVlc3RzW2U1XS5rZXkgPT09IHQ0LmtleSkgewogICAgICAgICAgICAgIHRoaXMubWVhc3VyZVJlcXVlc3RzW2U1XSA9IHQ0OwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLm1lYXN1cmVSZXF1ZXN0cy5wdXNoKHQ0KTsKICAgICAgfQogICAgfQogICAgcGx1Z2luKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMucGx1Z2luTWFwLmdldCh0NCk7CiAgICAgIHJldHVybiAoZTUgPT09IHZvaWQgMCB8fCBlNSAmJiBlNS5zcGVjICE9IHQ0KSAmJiB0aGlzLnBsdWdpbk1hcC5zZXQodDQsIGU1ID0gdGhpcy5wbHVnaW5zLmZpbmQoKGk0KSA9PiBpNC5zcGVjID09IHQ0KSB8fCBudWxsKSwgZTUgJiYgZTUudXBkYXRlKHRoaXMpLnZhbHVlOwogICAgfQogICAgZ2V0IGRvY3VtZW50VG9wKCkgewogICAgICByZXR1cm4gdGhpcy5jb250ZW50RE9NLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHRoaXMudmlld1N0YXRlLnBhZGRpbmdUb3A7CiAgICB9CiAgICBnZXQgZG9jdW1lbnRQYWRkaW5nKCkgewogICAgICByZXR1cm4geyB0b3A6IHRoaXMudmlld1N0YXRlLnBhZGRpbmdUb3AsIGJvdHRvbTogdGhpcy52aWV3U3RhdGUucGFkZGluZ0JvdHRvbSB9OwogICAgfQogICAgZWxlbWVudEF0SGVpZ2h0KHQ0KSB7CiAgICAgIHJldHVybiB0aGlzLnJlYWRNZWFzdXJlZCgpLCB0aGlzLnZpZXdTdGF0ZS5lbGVtZW50QXRIZWlnaHQodDQpOwogICAgfQogICAgbGluZUJsb2NrQXRIZWlnaHQodDQpIHsKICAgICAgcmV0dXJuIHRoaXMucmVhZE1lYXN1cmVkKCksIHRoaXMudmlld1N0YXRlLmxpbmVCbG9ja0F0SGVpZ2h0KHQ0KTsKICAgIH0KICAgIGdldCB2aWV3cG9ydExpbmVCbG9ja3MoKSB7CiAgICAgIHJldHVybiB0aGlzLnZpZXdTdGF0ZS52aWV3cG9ydExpbmVzOwogICAgfQogICAgbGluZUJsb2NrQXQodDQpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld1N0YXRlLmxpbmVCbG9ja0F0KHQ0KTsKICAgIH0KICAgIGdldCBjb250ZW50SGVpZ2h0KCkgewogICAgICByZXR1cm4gdGhpcy52aWV3U3RhdGUuY29udGVudEhlaWdodDsKICAgIH0KICAgIG1vdmVCeUNoYXIodDQsIGU1LCBpNCkgewogICAgICByZXR1cm4gQWUzKHRoaXMsIHQ0LCBQaSh0aGlzLCB0NCwgZTUsIGk0KSk7CiAgICB9CiAgICBtb3ZlQnlHcm91cCh0NCwgZTUpIHsKICAgICAgcmV0dXJuIEFlMyh0aGlzLCB0NCwgUGkodGhpcywgdDQsIGU1LCAoaTQpID0+IEluKHRoaXMsIHQ0LmhlYWQsIGk0KSkpOwogICAgfQogICAgbW92ZVRvTGluZUJvdW5kYXJ5KHQ0LCBlNSwgaTQgPSB0cnVlKSB7CiAgICAgIHJldHVybiB6bih0aGlzLCB0NCwgZTUsIGk0KTsKICAgIH0KICAgIG1vdmVWZXJ0aWNhbGx5KHQ0LCBlNSwgaTQpIHsKICAgICAgcmV0dXJuIEFlMyh0aGlzLCB0NCwgcW4odGhpcywgdDQsIGU1LCBpNCkpOwogICAgfQogICAgZG9tQXRQb3ModDQpIHsKICAgICAgcmV0dXJuIHRoaXMuZG9jVmlldy5kb21BdFBvcyh0NCk7CiAgICB9CiAgICBwb3NBdERPTSh0NCwgZTUgPSAwKSB7CiAgICAgIHJldHVybiB0aGlzLmRvY1ZpZXcucG9zRnJvbURPTSh0NCwgZTUpOwogICAgfQogICAgcG9zQXRDb29yZHModDQsIGU1ID0gdHJ1ZSkgewogICAgICByZXR1cm4gdGhpcy5yZWFkTWVhc3VyZWQoKSwgenMyKHRoaXMsIHQ0LCBlNSk7CiAgICB9CiAgICBjb29yZHNBdFBvcyh0NCwgZTUgPSAxKSB7CiAgICAgIHRoaXMucmVhZE1lYXN1cmVkKCk7CiAgICAgIGxldCBpNCA9IHRoaXMuZG9jVmlldy5jb29yZHNBdCh0NCwgZTUpOwogICAgICBpZiAoIWk0IHx8IGk0LmxlZnQgPT0gaTQucmlnaHQpCiAgICAgICAgcmV0dXJuIGk0OwogICAgICBsZXQgbjggPSB0aGlzLnN0YXRlLmRvYy5saW5lQXQodDQpLCByMyA9IHRoaXMuYmlkaVNwYW5zKG44KSwgbzQgPSByM1tydDIuZmluZChyMywgdDQgLSBuOC5mcm9tLCAtMSwgZTUpXTsKICAgICAgcmV0dXJuIHhlNChpNCwgbzQuZGlyID09IFIyLkxUUiA9PSBlNSA+IDApOwogICAgfQogICAgZ2V0IGRlZmF1bHRDaGFyYWN0ZXJXaWR0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld1N0YXRlLmhlaWdodE9yYWNsZS5jaGFyV2lkdGg7CiAgICB9CiAgICBnZXQgZGVmYXVsdExpbmVIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLnZpZXdTdGF0ZS5oZWlnaHRPcmFjbGUubGluZUhlaWdodDsKICAgIH0KICAgIGdldCB0ZXh0RGlyZWN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy52aWV3U3RhdGUuZGVmYXVsdFRleHREaXJlY3Rpb247CiAgICB9CiAgICB0ZXh0RGlyZWN0aW9uQXQodDQpIHsKICAgICAgcmV0dXJuICF0aGlzLnN0YXRlLmZhY2V0KE9zMikgfHwgdDQgPCB0aGlzLnZpZXdwb3J0LmZyb20gfHwgdDQgPiB0aGlzLnZpZXdwb3J0LnRvID8gdGhpcy50ZXh0RGlyZWN0aW9uIDogKHRoaXMucmVhZE1lYXN1cmVkKCksIHRoaXMuZG9jVmlldy50ZXh0RGlyZWN0aW9uQXQodDQpKTsKICAgIH0KICAgIGdldCBsaW5lV3JhcHBpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLnZpZXdTdGF0ZS5oZWlnaHRPcmFjbGUubGluZVdyYXBwaW5nOwogICAgfQogICAgYmlkaVNwYW5zKHQ0KSB7CiAgICAgIGlmICh0NC5sZW5ndGggPiB1cikKICAgICAgICByZXR1cm4gSHModDQubGVuZ3RoKTsKICAgICAgbGV0IGU1ID0gdGhpcy50ZXh0RGlyZWN0aW9uQXQodDQuZnJvbSk7CiAgICAgIGZvciAobGV0IG44IG9mIHRoaXMuYmlkaUNhY2hlKQogICAgICAgIGlmIChuOC5mcm9tID09IHQ0LmZyb20gJiYgbjguZGlyID09IGU1KQogICAgICAgICAgcmV0dXJuIG44Lm9yZGVyOwogICAgICBsZXQgaTQgPSBQczIodDQudGV4dCwgZTUpOwogICAgICByZXR1cm4gdGhpcy5iaWRpQ2FjaGUucHVzaChuZXcgQ3QodDQuZnJvbSwgdDQudG8sIGU1LCBpNCkpLCBpNDsKICAgIH0KICAgIGdldCBoYXNGb2N1cygpIHsKICAgICAgdmFyIHQ0OwogICAgICByZXR1cm4gKHRoaXMuZG9tLm93bmVyRG9jdW1lbnQuaGFzRm9jdXMoKSB8fCB5My5zYWZhcmkgJiYgKCh0NCA9IHRoaXMuaW5wdXRTdGF0ZSkgPT09IG51bGwgfHwgdDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQ0Lmxhc3RDb250ZXh0TWVudSkgPiBEYXRlLm5vdygpIC0gM2U0KSAmJiB0aGlzLnJvb3QuYWN0aXZlRWxlbWVudCA9PSB0aGlzLmNvbnRlbnRET007CiAgICB9CiAgICBmb2N1cygpIHsKICAgICAgdGhpcy5vYnNlcnZlci5pZ25vcmUoKCkgPT4gewogICAgICAgIHVzKHRoaXMuY29udGVudERPTSksIHRoaXMuZG9jVmlldy51cGRhdGVTZWxlY3Rpb24oKTsKICAgICAgfSk7CiAgICB9CiAgICBzZXRSb290KHQ0KSB7CiAgICAgIHRoaXMuX3Jvb3QgIT0gdDQgJiYgKHRoaXMuX3Jvb3QgPSB0NCwgdGhpcy5vYnNlcnZlci5zZXRXaW5kb3coKHQ0Lm5vZGVUeXBlID09IDkgPyB0NCA6IHQ0Lm93bmVyRG9jdW1lbnQpLmRlZmF1bHRWaWV3IHx8IHdpbmRvdyksIHRoaXMubW91bnRTdHlsZXMoKSk7CiAgICB9CiAgICBkZXN0cm95KCkgewogICAgICBmb3IgKGxldCB0NCBvZiB0aGlzLnBsdWdpbnMpCiAgICAgICAgdDQuZGVzdHJveSh0aGlzKTsKICAgICAgdGhpcy5wbHVnaW5zID0gW10sIHRoaXMuaW5wdXRTdGF0ZS5kZXN0cm95KCksIHRoaXMuZG9tLnJlbW92ZSgpLCB0aGlzLm9ic2VydmVyLmRlc3Ryb3koKSwgdGhpcy5tZWFzdXJlU2NoZWR1bGVkID4gLTEgJiYgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5tZWFzdXJlU2NoZWR1bGVkKSwgdGhpcy5kZXN0cm95ZWQgPSB0cnVlOwogICAgfQogICAgc3RhdGljIHNjcm9sbEludG9WaWV3KHQ0LCBlNSA9IHt9KSB7CiAgICAgIHJldHVybiBUaS5vZihuZXcgeHQodHlwZW9mIHQ0ID09ICJudW1iZXIiID8gZzIuY3Vyc29yKHQ0KSA6IHQ0LCBlNS55LCBlNS54LCBlNS55TWFyZ2luLCBlNS54TWFyZ2luKSk7CiAgICB9CiAgICBzdGF0aWMgZG9tRXZlbnRIYW5kbGVycyh0NCkgewogICAgICByZXR1cm4gVjQuZGVmaW5lKCgpID0+ICh7fSksIHsgZXZlbnRIYW5kbGVyczogdDQgfSk7CiAgICB9CiAgICBzdGF0aWMgdGhlbWUodDQsIGU1KSB7CiAgICAgIGxldCBpNCA9IFQyLm5ld05hbWUoKSwgbjggPSBbVXQub2YoaTQpLCBEdC5vZihzaShgLiR7aTR9YCwgdDQpKV07CiAgICAgIHJldHVybiBlNSAmJiBlNS5kYXJrICYmIG44LnB1c2goZWkub2YodHJ1ZSkpLCBuODsKICAgIH0KICAgIHN0YXRpYyBiYXNlVGhlbWUodDQpIHsKICAgICAgcmV0dXJuIGx0Lmxvd2VzdChEdC5vZihzaSgiLiIgKyBpaSwgdDQsIFVzKSkpOwogICAgfQogICAgc3RhdGljIGZpbmRGcm9tRE9NKHQ0KSB7CiAgICAgIHZhciBlNTsKICAgICAgbGV0IGk0ID0gdDQucXVlcnlTZWxlY3RvcigiLmNtLWNvbnRlbnQiKSwgbjggPSBpNCAmJiBBMy5nZXQoaTQpIHx8IEEzLmdldCh0NCk7CiAgICAgIHJldHVybiAoKGU1ID0gbjg/LnJvb3RWaWV3KSA9PT0gbnVsbCB8fCBlNSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZTUudmlldykgfHwgbnVsbDsKICAgIH0KICB9OwogIE0yLnN0eWxlTW9kdWxlID0gRHQ7CiAgTTIuaW5wdXRIYW5kbGVyID0gVHMyOwogIE0yLnBlckxpbmVUZXh0RGlyZWN0aW9uID0gT3MyOwogIE0yLmV4Y2VwdGlvblNpbmsgPSBEczsKICBNMi51cGRhdGVMaXN0ZW5lciA9IEllNDsKICBNMi5lZGl0YWJsZSA9IENlNDsKICBNMi5tb3VzZVNlbGVjdGlvblN0eWxlID0gQXM7CiAgTTIuZHJhZ01vdmVzU2VsZWN0aW9uID0ga3MyOwogIE0yLmNsaWNrQWRkc1NlbGVjdGlvblJhbmdlID0gTXMyOwogIE0yLmRlY29yYXRpb25zID0genQ7CiAgTTIuYXRvbWljUmFuZ2VzID0gTHMyOwogIE0yLnNjcm9sbE1hcmdpbnMgPSBFczsKICBNMi5kYXJrVGhlbWUgPSBlaTsKICBNMi5jb250ZW50QXR0cmlidXRlcyA9IHdpOwogIE0yLmVkaXRvckF0dHJpYnV0ZXMgPSBSczsKICBNMi5saW5lV3JhcHBpbmcgPSBNMi5jb250ZW50QXR0cmlidXRlcy5vZih7IGNsYXNzOiAiY20tbGluZVdyYXBwaW5nIiB9KTsKICBNMi5hbm5vdW5jZSA9IHkuZGVmaW5lKCk7CiAgdmFyIHVyID0gNDA5NjsKICB2YXIgWWkgPSB7fTsKICB2YXIgQ3QgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0LCBuOCkgewogICAgICB0aGlzLmZyb20gPSB0NCwgdGhpcy50byA9IGU1LCB0aGlzLmRpciA9IGk0LCB0aGlzLm9yZGVyID0gbjg7CiAgICB9CiAgICBzdGF0aWMgdXBkYXRlKHQ0LCBlNSkgewogICAgICBpZiAoZTUuZW1wdHkpCiAgICAgICAgcmV0dXJuIHQ0OwogICAgICBsZXQgaTQgPSBbXSwgbjggPSB0NC5sZW5ndGggPyB0NFt0NC5sZW5ndGggLSAxXS5kaXIgOiBSMi5MVFI7CiAgICAgIGZvciAobGV0IHIzID0gTWF0aC5tYXgoMCwgdDQubGVuZ3RoIC0gMTApOyByMyA8IHQ0Lmxlbmd0aDsgcjMrKykgewogICAgICAgIGxldCBvNCA9IHQ0W3IzXTsKICAgICAgICBvNC5kaXIgPT0gbjggJiYgIWU1LnRvdWNoZXNSYW5nZShvNC5mcm9tLCBvNC50bykgJiYgaTQucHVzaChuZXcgQ3QoZTUubWFwUG9zKG80LmZyb20sIDEpLCBlNS5tYXBQb3MobzQudG8sIC0xKSwgbzQuZGlyLCBvNC5vcmRlcikpOwogICAgICB9CiAgICAgIHJldHVybiBpNDsKICAgIH0KICB9OwogIGZ1bmN0aW9uIFhpKHM4LCB0NCwgZTUpIHsKICAgIGZvciAobGV0IGk0ID0gczguc3RhdGUuZmFjZXQodDQpLCBuOCA9IGk0Lmxlbmd0aCAtIDE7IG44ID49IDA7IG44LS0pIHsKICAgICAgbGV0IHIzID0gaTRbbjhdLCBvNCA9IHR5cGVvZiByMyA9PSAiZnVuY3Rpb24iID8gcjMoczgpIDogcjM7CiAgICAgIG80ICYmIFdlMihvNCwgZTUpOwogICAgfQogICAgcmV0dXJuIGU1OwogIH0KICB2YXIgcHIgPSB5My5tYWMgPyAibWFjIiA6IHkzLndpbmRvd3MgPyAid2luIiA6IHkzLmxpbnV4ID8gImxpbnV4IiA6ICJrZXkiOwogIGZ1bmN0aW9uIG1yKHM4LCB0NCkgewogICAgbGV0IGU1ID0gczguc3BsaXQoLy0oPyEkKS8pLCBpNCA9IGU1W2U1Lmxlbmd0aCAtIDFdOwogICAgaTQgPT0gIlNwYWNlIiAmJiAoaTQgPSAiICIpOwogICAgbGV0IG44LCByMywgbzQsIGw3OwogICAgZm9yIChsZXQgaDEwID0gMDsgaDEwIDwgZTUubGVuZ3RoIC0gMTsgKytoMTApIHsKICAgICAgbGV0IGE0ID0gZTVbaDEwXTsKICAgICAgaWYgKC9eKGNtZHxtZXRhfG0pJC9pLnRlc3QoYTQpKQogICAgICAgIGw3ID0gdHJ1ZTsKICAgICAgZWxzZSBpZiAoL15hKGx0KT8kL2kudGVzdChhNCkpCiAgICAgICAgbjggPSB0cnVlOwogICAgICBlbHNlIGlmICgvXihjfGN0cmx8Y29udHJvbCkkL2kudGVzdChhNCkpCiAgICAgICAgcjMgPSB0cnVlOwogICAgICBlbHNlIGlmICgvXnMoaGlmdCk/JC9pLnRlc3QoYTQpKQogICAgICAgIG80ID0gdHJ1ZTsKICAgICAgZWxzZSBpZiAoL15tb2QkL2kudGVzdChhNCkpCiAgICAgICAgdDQgPT0gIm1hYyIgPyBsNyA9IHRydWUgOiByMyA9IHRydWU7CiAgICAgIGVsc2UKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBtb2RpZmllciBuYW1lOiAiICsgYTQpOwogICAgfQogICAgcmV0dXJuIG44ICYmIChpNCA9ICJBbHQtIiArIGk0KSwgcjMgJiYgKGk0ID0gIkN0cmwtIiArIGk0KSwgbDcgJiYgKGk0ID0gIk1ldGEtIiArIGk0KSwgbzQgJiYgKGk0ID0gIlNoaWZ0LSIgKyBpNCksIGk0OwogIH0KICBmdW5jdGlvbiBKdChzOCwgdDQsIGU1KSB7CiAgICByZXR1cm4gdDQuYWx0S2V5ICYmIChzOCA9ICJBbHQtIiArIHM4KSwgdDQuY3RybEtleSAmJiAoczggPSAiQ3RybC0iICsgczgpLCB0NC5tZXRhS2V5ICYmIChzOCA9ICJNZXRhLSIgKyBzOCksIGU1ICE9PSBmYWxzZSAmJiB0NC5zaGlmdEtleSAmJiAoczggPSAiU2hpZnQtIiArIHM4KSwgczg7CiAgfQogIHZhciBnciA9IGx0LmRlZmF1bHQoTTIuZG9tRXZlbnRIYW5kbGVycyh7IGtleWRvd24oczgsIHQ0KSB7CiAgICByZXR1cm4gWnMoSnModDQuc3RhdGUpLCBzOCwgdDQsICJlZGl0b3IiKTsKICB9IH0pKTsKICB2YXIgYnIgPSBBMi5kZWZpbmUoeyBlbmFibGVzOiBnciB9KTsKICB2YXIgVWkgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICBmdW5jdGlvbiBKcyhzOCkgewogICAgbGV0IHQ0ID0gczguZmFjZXQoYnIpLCBlNSA9IFVpLmdldCh0NCk7CiAgICByZXR1cm4gZTUgfHwgVWkuc2V0KHQ0LCBlNSA9IHdyKHQ0LnJlZHVjZSgoaTQsIG44KSA9PiBpNC5jb25jYXQobjgpLCBbXSkpKSwgZTU7CiAgfQogIGZ1bmN0aW9uIGVvKHM4LCB0NCwgZTUpIHsKICAgIHJldHVybiBacyhKcyhzOC5zdGF0ZSksIHQ0LCBzOCwgZTUpOwogIH0KICB2YXIgaXQyID0gbnVsbDsKICB2YXIgeXIgPSA0ZTM7CiAgZnVuY3Rpb24gd3IoczgsIHQ0ID0gcHIpIHsKICAgIGxldCBlNSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCBpNCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCBuOCA9IChvNCwgbDcpID0+IHsKICAgICAgbGV0IGgxMCA9IGk0W280XTsKICAgICAgaWYgKGgxMCA9PSBudWxsKQogICAgICAgIGk0W280XSA9IGw3OwogICAgICBlbHNlIGlmIChoMTAgIT0gbDcpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJLZXkgYmluZGluZyAiICsgbzQgKyAiIGlzIHVzZWQgYm90aCBhcyBhIHJlZ3VsYXIgYmluZGluZyBhbmQgYXMgYSBtdWx0aS1zdHJva2UgcHJlZml4Iik7CiAgICB9LCByMyA9IChvNCwgbDcsIGgxMCwgYTQpID0+IHsKICAgICAgdmFyIGMxNywgZjExOwogICAgICBsZXQgZDE1ID0gZTVbbzRdIHx8IChlNVtvNF0gPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSksIHUxMSA9IGw3LnNwbGl0KC8gKD8hJCkvKS5tYXAoKG0yMykgPT4gbXIobTIzLCB0NCkpOwogICAgICBmb3IgKGxldCBtMjMgPSAxOyBtMjMgPCB1MTEubGVuZ3RoOyBtMjMrKykgewogICAgICAgIGxldCBnMTIgPSB1MTEuc2xpY2UoMCwgbTIzKS5qb2luKCIgIik7CiAgICAgICAgbjgoZzEyLCB0cnVlKSwgZDE1W2cxMl0gfHwgKGQxNVtnMTJdID0geyBwcmV2ZW50RGVmYXVsdDogdHJ1ZSwgcnVuOiBbKFMyMSkgPT4gewogICAgICAgICAgbGV0IHcyMSA9IGl0MiA9IHsgdmlldzogUzIxLCBwcmVmaXg6IGcxMiwgc2NvcGU6IG80IH07CiAgICAgICAgICByZXR1cm4gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGl0MiA9PSB3MjEgJiYgKGl0MiA9IG51bGwpOwogICAgICAgICAgfSwgeXIpLCB0cnVlOwogICAgICAgIH1dIH0pOwogICAgICB9CiAgICAgIGxldCBwMTggPSB1MTEuam9pbigiICIpOwogICAgICBuOChwMTgsIGZhbHNlKTsKICAgICAgbGV0IGIyNSA9IGQxNVtwMThdIHx8IChkMTVbcDE4XSA9IHsgcHJldmVudERlZmF1bHQ6IGZhbHNlLCBydW46ICgoZjExID0gKGMxNyA9IGQxNS5fYW55KSA9PT0gbnVsbCB8fCBjMTcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGMxNy5ydW4pID09PSBudWxsIHx8IGYxMSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZjExLnNsaWNlKCkpIHx8IFtdIH0pOwogICAgICBoMTAgJiYgYjI1LnJ1bi5wdXNoKGgxMCksIGE0ICYmIChiMjUucHJldmVudERlZmF1bHQgPSB0cnVlKTsKICAgIH07CiAgICBmb3IgKGxldCBvNCBvZiBzOCkgewogICAgICBsZXQgbDcgPSBvNC5zY29wZSA/IG80LnNjb3BlLnNwbGl0KCIgIikgOiBbImVkaXRvciJdOwogICAgICBpZiAobzQuYW55KQogICAgICAgIGZvciAobGV0IGE0IG9mIGw3KSB7CiAgICAgICAgICBsZXQgYzE3ID0gZTVbYTRdIHx8IChlNVthNF0gPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7CiAgICAgICAgICBjMTcuX2FueSB8fCAoYzE3Ll9hbnkgPSB7IHByZXZlbnREZWZhdWx0OiBmYWxzZSwgcnVuOiBbXSB9KTsKICAgICAgICAgIGZvciAobGV0IGYxMSBpbiBjMTcpCiAgICAgICAgICAgIGMxN1tmMTFdLnJ1bi5wdXNoKG80LmFueSk7CiAgICAgICAgfQogICAgICBsZXQgaDEwID0gbzRbdDRdIHx8IG80LmtleTsKICAgICAgaWYgKCEhaDEwKQogICAgICAgIGZvciAobGV0IGE0IG9mIGw3KQogICAgICAgICAgcjMoYTQsIGgxMCwgbzQucnVuLCBvNC5wcmV2ZW50RGVmYXVsdCksIG80LnNoaWZ0ICYmIHIzKGE0LCAiU2hpZnQtIiArIGgxMCwgbzQuc2hpZnQsIG80LnByZXZlbnREZWZhdWx0KTsKICAgIH0KICAgIHJldHVybiBlNTsKICB9CiAgZnVuY3Rpb24gWnMoczgsIHQ0LCBlNSwgaTQpIHsKICAgIGxldCBuOCA9IHModDQpLCByMyA9IG9lKG44LCAwKSwgbzQgPSBiZTIocjMpID09IG44Lmxlbmd0aCAmJiBuOCAhPSAiICIsIGw3ID0gIiIsIGgxMCA9IGZhbHNlOwogICAgaXQyICYmIGl0Mi52aWV3ID09IGU1ICYmIGl0Mi5zY29wZSA9PSBpNCAmJiAobDcgPSBpdDIucHJlZml4ICsgIiAiLCAoaDEwID0gcXMuaW5kZXhPZih0NC5rZXlDb2RlKSA8IDApICYmIChpdDIgPSBudWxsKSk7CiAgICBsZXQgYTQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCBjMTcgPSAocDE4KSA9PiB7CiAgICAgIGlmIChwMTgpIHsKICAgICAgICBmb3IgKGxldCBiMjUgb2YgcDE4LnJ1bikKICAgICAgICAgIGlmICghYTQuaGFzKGIyNSkgJiYgKGE0LmFkZChiMjUpLCBiMjUoZTUsIHQ0KSkpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIHAxOC5wcmV2ZW50RGVmYXVsdCAmJiAoaDEwID0gdHJ1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwgZjExID0gczhbaTRdLCBkMTUsIHUxMTsKICAgIGlmIChmMTEpIHsKICAgICAgaWYgKGMxNyhmMTFbbDcgKyBKdChuOCwgdDQsICFvNCldKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKG80ICYmICh0NC5zaGlmdEtleSB8fCB0NC5hbHRLZXkgfHwgdDQubWV0YUtleSB8fCByMyA+IDEyNykgJiYgKGQxNSA9IHRbdDQua2V5Q29kZV0pICYmIGQxNSAhPSBuOCkgewogICAgICAgIGlmIChjMTcoZjExW2w3ICsgSnQoZDE1LCB0NCwgdHJ1ZSldKSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICh0NC5zaGlmdEtleSAmJiAodTExID0gaVt0NC5rZXlDb2RlXSkgIT0gbjggJiYgdTExICE9IGQxNSAmJiBjMTcoZjExW2w3ICsgSnQodTExLCB0NCwgZmFsc2UpXSkpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChvNCAmJiB0NC5zaGlmdEtleSAmJiBjMTcoZjExW2w3ICsgSnQobjgsIHQ0LCB0cnVlKV0pKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoYzE3KGYxMS5fYW55KSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBoMTA7CiAgfQogIHZhciBRcyA9ICF5My5pb3M7CiAgdmFyIE90ID0gQTIuZGVmaW5lKHsgY29tYmluZShzOCkgewogICAgcmV0dXJuIGh0KHM4LCB7IGN1cnNvckJsaW5rUmF0ZTogMTIwMCwgZHJhd1JhbmdlQ3Vyc29yOiB0cnVlIH0sIHsgY3Vyc29yQmxpbmtSYXRlOiAodDQsIGU1KSA9PiBNYXRoLm1pbih0NCwgZTUpLCBkcmF3UmFuZ2VDdXJzb3I6ICh0NCwgZTUpID0+IHQ0IHx8IGU1IH0pOwogIH0gfSk7CiAgZnVuY3Rpb24gaW8oczggPSB7fSkgewogICAgcmV0dXJuIFtPdC5vZihzOCksIHZyLCB4cl07CiAgfQogIHZhciBiZTMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0LCBuOCwgcjMpIHsKICAgICAgdGhpcy5sZWZ0ID0gdDQsIHRoaXMudG9wID0gZTUsIHRoaXMud2lkdGggPSBpNCwgdGhpcy5oZWlnaHQgPSBuOCwgdGhpcy5jbGFzc05hbWUgPSByMzsKICAgIH0KICAgIGRyYXcoKSB7CiAgICAgIGxldCB0NCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICByZXR1cm4gdDQuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUsIHRoaXMuYWRqdXN0KHQ0KSwgdDQ7CiAgICB9CiAgICBhZGp1c3QodDQpIHsKICAgICAgdDQuc3R5bGUubGVmdCA9IHRoaXMubGVmdCArICJweCIsIHQ0LnN0eWxlLnRvcCA9IHRoaXMudG9wICsgInB4IiwgdGhpcy53aWR0aCA+PSAwICYmICh0NC5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggKyAicHgiKSwgdDQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyAicHgiOwogICAgfQogICAgZXEodDQpIHsKICAgICAgcmV0dXJuIHRoaXMubGVmdCA9PSB0NC5sZWZ0ICYmIHRoaXMudG9wID09IHQ0LnRvcCAmJiB0aGlzLndpZHRoID09IHQ0LndpZHRoICYmIHRoaXMuaGVpZ2h0ID09IHQ0LmhlaWdodCAmJiB0aGlzLmNsYXNzTmFtZSA9PSB0NC5jbGFzc05hbWU7CiAgICB9CiAgfTsKICB2YXIgdnIgPSBWNC5mcm9tQ2xhc3MoY2xhc3MgewogICAgY29uc3RydWN0b3IoczgpIHsKICAgICAgdGhpcy52aWV3ID0gczgsIHRoaXMucmFuZ2VQaWVjZXMgPSBbXSwgdGhpcy5jdXJzb3JzID0gW10sIHRoaXMubWVhc3VyZVJlcSA9IHsgcmVhZDogdGhpcy5yZWFkUG9zLmJpbmQodGhpcyksIHdyaXRlOiB0aGlzLmRyYXdTZWwuYmluZCh0aGlzKSB9LCB0aGlzLnNlbGVjdGlvbkxheWVyID0gczguc2Nyb2xsRE9NLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwgdGhpcy5zZWxlY3Rpb25MYXllci5jbGFzc05hbWUgPSAiY20tc2VsZWN0aW9uTGF5ZXIiLCB0aGlzLnNlbGVjdGlvbkxheWVyLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCAidHJ1ZSIpLCB0aGlzLmN1cnNvckxheWVyID0gczguc2Nyb2xsRE9NLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwgdGhpcy5jdXJzb3JMYXllci5jbGFzc05hbWUgPSAiY20tY3Vyc29yTGF5ZXIiLCB0aGlzLmN1cnNvckxheWVyLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCAidHJ1ZSIpLCBzOC5yZXF1ZXN0TWVhc3VyZSh0aGlzLm1lYXN1cmVSZXEpLCB0aGlzLnNldEJsaW5rUmF0ZSgpOwogICAgfQogICAgc2V0QmxpbmtSYXRlKCkgewogICAgICB0aGlzLmN1cnNvckxheWVyLnN0eWxlLmFuaW1hdGlvbkR1cmF0aW9uID0gdGhpcy52aWV3LnN0YXRlLmZhY2V0KE90KS5jdXJzb3JCbGlua1JhdGUgKyAibXMiOwogICAgfQogICAgdXBkYXRlKHM4KSB7CiAgICAgIGxldCB0NCA9IHM4LnN0YXJ0U3RhdGUuZmFjZXQoT3QpICE9IHM4LnN0YXRlLmZhY2V0KE90KTsKICAgICAgKHQ0IHx8IHM4LnNlbGVjdGlvblNldCB8fCBzOC5nZW9tZXRyeUNoYW5nZWQgfHwgczgudmlld3BvcnRDaGFuZ2VkKSAmJiB0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5tZWFzdXJlUmVxKSwgczgudHJhbnNhY3Rpb25zLnNvbWUoKGU1KSA9PiBlNS5zY3JvbGxJbnRvVmlldykgJiYgKHRoaXMuY3Vyc29yTGF5ZXIuc3R5bGUuYW5pbWF0aW9uTmFtZSA9IHRoaXMuY3Vyc29yTGF5ZXIuc3R5bGUuYW5pbWF0aW9uTmFtZSA9PSAiY20tYmxpbmsiID8gImNtLWJsaW5rMiIgOiAiY20tYmxpbmsiKSwgdDQgJiYgdGhpcy5zZXRCbGlua1JhdGUoKTsKICAgIH0KICAgIHJlYWRQb3MoKSB7CiAgICAgIGxldCB7IHN0YXRlOiBzOCB9ID0gdGhpcy52aWV3LCB0NCA9IHM4LmZhY2V0KE90KSwgZTUgPSBzOC5zZWxlY3Rpb24ucmFuZ2VzLm1hcCgobjgpID0+IG44LmVtcHR5ID8gW10gOiBTcih0aGlzLnZpZXcsIG44KSkucmVkdWNlKChuOCwgcjMpID0+IG44LmNvbmNhdChyMykpLCBpNCA9IFtdOwogICAgICBmb3IgKGxldCBuOCBvZiBzOC5zZWxlY3Rpb24ucmFuZ2VzKSB7CiAgICAgICAgbGV0IHIzID0gbjggPT0gczguc2VsZWN0aW9uLm1haW47CiAgICAgICAgaWYgKG44LmVtcHR5ID8gIXIzIHx8IFFzIDogdDQuZHJhd1JhbmdlQ3Vyc29yKSB7CiAgICAgICAgICBsZXQgbzQgPSBDcih0aGlzLnZpZXcsIG44LCByMyk7CiAgICAgICAgICBvNCAmJiBpNC5wdXNoKG80KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgcmFuZ2VQaWVjZXM6IGU1LCBjdXJzb3JzOiBpNCB9OwogICAgfQogICAgZHJhd1NlbCh7IHJhbmdlUGllY2VzOiBzOCwgY3Vyc29yczogdDQgfSkgewogICAgICBpZiAoczgubGVuZ3RoICE9IHRoaXMucmFuZ2VQaWVjZXMubGVuZ3RoIHx8IHM4LnNvbWUoKGU1LCBpNCkgPT4gIWU1LmVxKHRoaXMucmFuZ2VQaWVjZXNbaTRdKSkpIHsKICAgICAgICB0aGlzLnNlbGVjdGlvbkxheWVyLnRleHRDb250ZW50ID0gIiI7CiAgICAgICAgZm9yIChsZXQgZTUgb2YgczgpCiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkxheWVyLmFwcGVuZENoaWxkKGU1LmRyYXcoKSk7CiAgICAgICAgdGhpcy5yYW5nZVBpZWNlcyA9IHM4OwogICAgICB9CiAgICAgIGlmICh0NC5sZW5ndGggIT0gdGhpcy5jdXJzb3JzLmxlbmd0aCB8fCB0NC5zb21lKChlNSwgaTQpID0+ICFlNS5lcSh0aGlzLmN1cnNvcnNbaTRdKSkpIHsKICAgICAgICBsZXQgZTUgPSB0aGlzLmN1cnNvckxheWVyLmNoaWxkcmVuOwogICAgICAgIGlmIChlNS5sZW5ndGggIT09IHQ0Lmxlbmd0aCkgewogICAgICAgICAgdGhpcy5jdXJzb3JMYXllci50ZXh0Q29udGVudCA9ICIiOwogICAgICAgICAgZm9yIChsZXQgaTQgb2YgdDQpCiAgICAgICAgICAgIHRoaXMuY3Vyc29yTGF5ZXIuYXBwZW5kQ2hpbGQoaTQuZHJhdygpKTsKICAgICAgICB9IGVsc2UKICAgICAgICAgIHQ0LmZvckVhY2goKGk0LCBuOCkgPT4gaTQuYWRqdXN0KGU1W244XSkpOwogICAgICAgIHRoaXMuY3Vyc29ycyA9IHQ0OwogICAgICB9CiAgICB9CiAgICBkZXN0cm95KCkgewogICAgICB0aGlzLnNlbGVjdGlvbkxheWVyLnJlbW92ZSgpLCB0aGlzLmN1cnNvckxheWVyLnJlbW92ZSgpOwogICAgfQogIH0pOwogIHZhciB0biA9IHsgIi5jbS1saW5lIjogeyAiJiA6OnNlbGVjdGlvbiI6IHsgYmFja2dyb3VuZENvbG9yOiAidHJhbnNwYXJlbnQgIWltcG9ydGFudCIgfSwgIiY6OnNlbGVjdGlvbiI6IHsgYmFja2dyb3VuZENvbG9yOiAidHJhbnNwYXJlbnQgIWltcG9ydGFudCIgfSB9IH07CiAgUXMgJiYgKHRuWyIuY20tbGluZSJdLmNhcmV0Q29sb3IgPSAidHJhbnNwYXJlbnQgIWltcG9ydGFudCIpOwogIHZhciB4ciA9IGx0LmhpZ2hlc3QoTTIudGhlbWUodG4pKTsKICBmdW5jdGlvbiBlbihzOCkgewogICAgbGV0IHQ0ID0gczguc2Nyb2xsRE9NLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgcmV0dXJuIHsgbGVmdDogKHM4LnRleHREaXJlY3Rpb24gPT0gUjIuTFRSID8gdDQubGVmdCA6IHQ0LnJpZ2h0IC0gczguc2Nyb2xsRE9NLmNsaWVudFdpZHRoKSAtIHM4LnNjcm9sbERPTS5zY3JvbGxMZWZ0LCB0b3A6IHQ0LnRvcCAtIHM4LnNjcm9sbERPTS5zY3JvbGxUb3AgfTsKICB9CiAgZnVuY3Rpb24gSmkoczgsIHQ0LCBlNSkgewogICAgbGV0IGk0ID0gZzIuY3Vyc29yKHQ0KTsKICAgIHJldHVybiB7IGZyb206IE1hdGgubWF4KGU1LmZyb20sIHM4Lm1vdmVUb0xpbmVCb3VuZGFyeShpNCwgZmFsc2UsIHRydWUpLmZyb20pLCB0bzogTWF0aC5taW4oZTUudG8sIHM4Lm1vdmVUb0xpbmVCb3VuZGFyeShpNCwgdHJ1ZSwgdHJ1ZSkuZnJvbSksIHR5cGU6IFQzLlRleHQgfTsKICB9CiAgZnVuY3Rpb24gWmkoczgsIHQ0KSB7CiAgICBsZXQgZTUgPSBzOC5saW5lQmxvY2tBdCh0NCk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShlNS50eXBlKSkgewogICAgICBmb3IgKGxldCBpNCBvZiBlNS50eXBlKQogICAgICAgIGlmIChpNC50byA+IHQ0IHx8IGk0LnRvID09IHQ0ICYmIChpNC50byA9PSBlNS50byB8fCBpNC50eXBlID09IFQzLlRleHQpKQogICAgICAgICAgcmV0dXJuIGk0OwogICAgfQogICAgcmV0dXJuIGU1OwogIH0KICBmdW5jdGlvbiBTcihzOCwgdDQpIHsKICAgIGlmICh0NC50byA8PSBzOC52aWV3cG9ydC5mcm9tIHx8IHQ0LmZyb20gPj0gczgudmlld3BvcnQudG8pCiAgICAgIHJldHVybiBbXTsKICAgIGxldCBlNSA9IE1hdGgubWF4KHQ0LmZyb20sIHM4LnZpZXdwb3J0LmZyb20pLCBpNCA9IE1hdGgubWluKHQ0LnRvLCBzOC52aWV3cG9ydC50byksIG44ID0gczgudGV4dERpcmVjdGlvbiA9PSBSMi5MVFIsIHIzID0gczguY29udGVudERPTSwgbzQgPSByMy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbDcgPSBlbihzOCksIGgxMCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIzLmZpcnN0Q2hpbGQpLCBhNCA9IG80LmxlZnQgKyBwYXJzZUludChoMTAucGFkZGluZ0xlZnQpICsgTWF0aC5taW4oMCwgcGFyc2VJbnQoaDEwLnRleHRJbmRlbnQpKSwgYzE3ID0gbzQucmlnaHQgLSBwYXJzZUludChoMTAucGFkZGluZ1JpZ2h0KSwgZjExID0gWmkoczgsIGU1KSwgZDE1ID0gWmkoczgsIGk0KSwgdTExID0gZjExLnR5cGUgPT0gVDMuVGV4dCA/IGYxMSA6IG51bGwsIHAxOCA9IGQxNS50eXBlID09IFQzLlRleHQgPyBkMTUgOiBudWxsOwogICAgaWYgKHM4LmxpbmVXcmFwcGluZyAmJiAodTExICYmICh1MTEgPSBKaShzOCwgZTUsIHUxMSkpLCBwMTggJiYgKHAxOCA9IEppKHM4LCBpNCwgcDE4KSkpLCB1MTEgJiYgcDE4ICYmIHUxMS5mcm9tID09IHAxOC5mcm9tKQogICAgICByZXR1cm4gbTIzKGcxMih0NC5mcm9tLCB0NC50bywgdTExKSk7CiAgICB7CiAgICAgIGxldCB3MjEgPSB1MTEgPyBnMTIodDQuZnJvbSwgbnVsbCwgdTExKSA6IFMyMShmMTEsIGZhbHNlKSwgdjE1ID0gcDE4ID8gZzEyKG51bGwsIHQ0LnRvLCBwMTgpIDogUzIxKGQxNSwgdHJ1ZSksIEwyMiA9IFtdOwogICAgICByZXR1cm4gKHUxMSB8fCBmMTEpLnRvIDwgKHAxOCB8fCBkMTUpLmZyb20gLSAxID8gTDIyLnB1c2goYjI1KGE0LCB3MjEuYm90dG9tLCBjMTcsIHYxNS50b3ApKSA6IHcyMS5ib3R0b20gPCB2MTUudG9wICYmIHM4LmVsZW1lbnRBdEhlaWdodCgodzIxLmJvdHRvbSArIHYxNS50b3ApIC8gMikudHlwZSA9PSBUMy5UZXh0ICYmICh3MjEuYm90dG9tID0gdjE1LnRvcCA9ICh3MjEuYm90dG9tICsgdjE1LnRvcCkgLyAyKSwgbTIzKHcyMSkuY29uY2F0KEwyMikuY29uY2F0KG0yMyh2MTUpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGIyNSh3MjEsIHYxNSwgTDIyLCBKMTQpIHsKICAgICAgcmV0dXJuIG5ldyBiZTModzIxIC0gbDcubGVmdCwgdjE1IC0gbDcudG9wIC0gMC4wMSwgTDIyIC0gdzIxLCBKMTQgLSB2MTUgKyAwLjAxLCAiY20tc2VsZWN0aW9uQmFja2dyb3VuZCIpOwogICAgfQogICAgZnVuY3Rpb24gbTIzKHsgdG9wOiB3MjEsIGJvdHRvbTogdjE1LCBob3Jpem9udGFsOiBMMjIgfSkgewogICAgICBsZXQgSjE0ID0gW107CiAgICAgIGZvciAobGV0IFoyMiA9IDA7IFoyMiA8IEwyMi5sZW5ndGg7IFoyMiArPSAyKQogICAgICAgIEoxNC5wdXNoKGIyNShMMjJbWjIyXSwgdzIxLCBMMjJbWjIyICsgMV0sIHYxNSkpOwogICAgICByZXR1cm4gSjE0OwogICAgfQogICAgZnVuY3Rpb24gZzEyKHcyMSwgdjE1LCBMMjIpIHsKICAgICAgbGV0IEoxNCA9IDFlOSwgWjIyID0gLTFlOSwgX3Q0ID0gW107CiAgICAgIGZ1bmN0aW9uIHhpMihodDEzLCBRMTcsIGZ0OCwgYXQ5LCBNdDYpIHsKICAgICAgICBsZXQgdHQxNyA9IHM4LmNvb3Jkc0F0UG9zKGh0MTMsIGh0MTMgPT0gTDIyLnRvID8gLTIgOiAyKSwgZXQxMiA9IHM4LmNvb3Jkc0F0UG9zKGZ0OCwgZnQ4ID09IEwyMi5mcm9tID8gMiA6IC0yKTsKICAgICAgICBKMTQgPSBNYXRoLm1pbih0dDE3LnRvcCwgZXQxMi50b3AsIEoxNCksIFoyMiA9IE1hdGgubWF4KHR0MTcuYm90dG9tLCBldDEyLmJvdHRvbSwgWjIyKSwgTXQ2ID09IFIyLkxUUiA/IF90NC5wdXNoKG44ICYmIFExNyA/IGE0IDogdHQxNy5sZWZ0LCBuOCAmJiBhdDkgPyBjMTcgOiBldDEyLnJpZ2h0KSA6IF90NC5wdXNoKCFuOCAmJiBhdDkgPyBhNCA6IGV0MTIubGVmdCwgIW44ICYmIFExNyA/IGMxNyA6IHR0MTcucmlnaHQpOwogICAgICB9CiAgICAgIGxldCAkdDYgPSB3MjEgPz8gTDIyLmZyb20sIEd0NSA9IHYxNSA/PyBMMjIudG87CiAgICAgIGZvciAobGV0IGh0MTMgb2YgczgudmlzaWJsZVJhbmdlcykKICAgICAgICBpZiAoaHQxMy50byA+ICR0NiAmJiBodDEzLmZyb20gPCBHdDUpCiAgICAgICAgICBmb3IgKGxldCBRMTcgPSBNYXRoLm1heChodDEzLmZyb20sICR0NiksIGZ0OCA9IE1hdGgubWluKGh0MTMudG8sIEd0NSk7IDsgKSB7CiAgICAgICAgICAgIGxldCBhdDkgPSBzOC5zdGF0ZS5kb2MubGluZUF0KFExNyk7CiAgICAgICAgICAgIGZvciAobGV0IE10NiBvZiBzOC5iaWRpU3BhbnMoYXQ5KSkgewogICAgICAgICAgICAgIGxldCB0dDE3ID0gTXQ2LmZyb20gKyBhdDkuZnJvbSwgZXQxMiA9IE10Ni50byArIGF0OS5mcm9tOwogICAgICAgICAgICAgIGlmICh0dDE3ID49IGZ0OCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGV0MTIgPiBRMTcgJiYgeGkyKE1hdGgubWF4KHR0MTcsIFExNyksIHcyMSA9PSBudWxsICYmIHR0MTcgPD0gJHQ2LCBNYXRoLm1pbihldDEyLCBmdDgpLCB2MTUgPT0gbnVsbCAmJiBldDEyID49IEd0NSwgTXQ2LmRpcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKFExNyA9IGF0OS50byArIDEsIFExNyA+PSBmdDgpCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgIHJldHVybiBfdDQubGVuZ3RoID09IDAgJiYgeGkyKCR0NiwgdzIxID09IG51bGwsIEd0NSwgdjE1ID09IG51bGwsIHM4LnRleHREaXJlY3Rpb24pLCB7IHRvcDogSjE0LCBib3R0b206IFoyMiwgaG9yaXpvbnRhbDogX3Q0IH07CiAgICB9CiAgICBmdW5jdGlvbiBTMjEodzIxLCB2MTUpIHsKICAgICAgbGV0IEwyMiA9IG80LnRvcCArICh2MTUgPyB3MjEudG9wIDogdzIxLmJvdHRvbSk7CiAgICAgIHJldHVybiB7IHRvcDogTDIyLCBib3R0b206IEwyMiwgaG9yaXpvbnRhbDogW10gfTsKICAgIH0KICB9CiAgZnVuY3Rpb24gQ3IoczgsIHQ0LCBlNSkgewogICAgbGV0IGk0ID0gczguY29vcmRzQXRQb3ModDQuaGVhZCwgdDQuYXNzb2MgfHwgMSk7CiAgICBpZiAoIWk0KQogICAgICByZXR1cm4gbnVsbDsKICAgIGxldCBuOCA9IGVuKHM4KTsKICAgIHJldHVybiBuZXcgYmUzKGk0LmxlZnQgLSBuOC5sZWZ0LCBpNC50b3AgLSBuOC50b3AsIC0xLCBpNC5ib3R0b20gLSBpNC50b3AsIGU1ID8gImNtLWN1cnNvciBjbS1jdXJzb3ItcHJpbWFyeSIgOiAiY20tY3Vyc29yIGNtLWN1cnNvci1zZWNvbmRhcnkiKTsKICB9CiAgdmFyIHNuID0geS5kZWZpbmUoeyBtYXAoczgsIHQ0KSB7CiAgICByZXR1cm4gczggPT0gbnVsbCA/IG51bGwgOiB0NC5tYXBQb3MoczgpOwogIH0gfSk7CiAgdmFyIFJ0ID0gSjIuZGVmaW5lKHsgY3JlYXRlKCkgewogICAgcmV0dXJuIG51bGw7CiAgfSwgdXBkYXRlKHM4LCB0NCkgewogICAgcmV0dXJuIHM4ICE9IG51bGwgJiYgKHM4ID0gdDQuY2hhbmdlcy5tYXBQb3MoczgpKSwgdDQuZWZmZWN0cy5yZWR1Y2UoKGU1LCBpNCkgPT4gaTQuaXMoc24pID8gaTQudmFsdWUgOiBlNSwgczgpOwogIH0gfSk7CiAgdmFyIE1yID0gVjQuZnJvbUNsYXNzKGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHM4KSB7CiAgICAgIHRoaXMudmlldyA9IHM4LCB0aGlzLmN1cnNvciA9IG51bGwsIHRoaXMubWVhc3VyZVJlcSA9IHsgcmVhZDogdGhpcy5yZWFkUG9zLmJpbmQodGhpcyksIHdyaXRlOiB0aGlzLmRyYXdDdXJzb3IuYmluZCh0aGlzKSB9OwogICAgfQogICAgdXBkYXRlKHM4KSB7CiAgICAgIHZhciB0NDsKICAgICAgbGV0IGU1ID0gczguc3RhdGUuZmllbGQoUnQpOwogICAgICBlNSA9PSBudWxsID8gdGhpcy5jdXJzb3IgIT0gbnVsbCAmJiAoKHQ0ID0gdGhpcy5jdXJzb3IpID09PSBudWxsIHx8IHQ0ID09PSB2b2lkIDAgfHwgdDQucmVtb3ZlKCksIHRoaXMuY3Vyc29yID0gbnVsbCkgOiAodGhpcy5jdXJzb3IgfHwgKHRoaXMuY3Vyc29yID0gdGhpcy52aWV3LnNjcm9sbERPTS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSksIHRoaXMuY3Vyc29yLmNsYXNzTmFtZSA9ICJjbS1kcm9wQ3Vyc29yIiksIChzOC5zdGFydFN0YXRlLmZpZWxkKFJ0KSAhPSBlNSB8fCBzOC5kb2NDaGFuZ2VkIHx8IHM4Lmdlb21ldHJ5Q2hhbmdlZCkgJiYgdGhpcy52aWV3LnJlcXVlc3RNZWFzdXJlKHRoaXMubWVhc3VyZVJlcSkpOwogICAgfQogICAgcmVhZFBvcygpIHsKICAgICAgbGV0IHM4ID0gdGhpcy52aWV3LnN0YXRlLmZpZWxkKFJ0KSwgdDQgPSBzOCAhPSBudWxsICYmIHRoaXMudmlldy5jb29yZHNBdFBvcyhzOCk7CiAgICAgIGlmICghdDQpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGxldCBlNSA9IHRoaXMudmlldy5zY3JvbGxET00uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIHJldHVybiB7IGxlZnQ6IHQ0LmxlZnQgLSBlNS5sZWZ0ICsgdGhpcy52aWV3LnNjcm9sbERPTS5zY3JvbGxMZWZ0LCB0b3A6IHQ0LnRvcCAtIGU1LnRvcCArIHRoaXMudmlldy5zY3JvbGxET00uc2Nyb2xsVG9wLCBoZWlnaHQ6IHQ0LmJvdHRvbSAtIHQ0LnRvcCB9OwogICAgfQogICAgZHJhd0N1cnNvcihzOCkgewogICAgICB0aGlzLmN1cnNvciAmJiAoczggPyAodGhpcy5jdXJzb3Iuc3R5bGUubGVmdCA9IHM4LmxlZnQgKyAicHgiLCB0aGlzLmN1cnNvci5zdHlsZS50b3AgPSBzOC50b3AgKyAicHgiLCB0aGlzLmN1cnNvci5zdHlsZS5oZWlnaHQgPSBzOC5oZWlnaHQgKyAicHgiKSA6IHRoaXMuY3Vyc29yLnN0eWxlLmxlZnQgPSAiLTEwMDAwMHB4Iik7CiAgICB9CiAgICBkZXN0cm95KCkgewogICAgICB0aGlzLmN1cnNvciAmJiB0aGlzLmN1cnNvci5yZW1vdmUoKTsKICAgIH0KICAgIHNldERyb3BQb3MoczgpIHsKICAgICAgdGhpcy52aWV3LnN0YXRlLmZpZWxkKFJ0KSAhPSBzOCAmJiB0aGlzLnZpZXcuZGlzcGF0Y2goeyBlZmZlY3RzOiBzbi5vZihzOCkgfSk7CiAgICB9CiAgfSwgeyBldmVudEhhbmRsZXJzOiB7IGRyYWdvdmVyKHM4KSB7CiAgICB0aGlzLnNldERyb3BQb3ModGhpcy52aWV3LnBvc0F0Q29vcmRzKHsgeDogczguY2xpZW50WCwgeTogczguY2xpZW50WSB9KSk7CiAgfSwgZHJhZ2xlYXZlKHM4KSB7CiAgICAoczgudGFyZ2V0ID09IHRoaXMudmlldy5jb250ZW50RE9NIHx8ICF0aGlzLnZpZXcuY29udGVudERPTS5jb250YWlucyhzOC5yZWxhdGVkVGFyZ2V0KSkgJiYgdGhpcy5zZXREcm9wUG9zKG51bGwpOwogIH0sIGRyYWdlbmQoKSB7CiAgICB0aGlzLnNldERyb3BQb3MobnVsbCk7CiAgfSwgZHJvcCgpIHsKICAgIHRoaXMuc2V0RHJvcFBvcyhudWxsKTsKICB9IH0gfSk7CiAgZnVuY3Rpb24gc28oKSB7CiAgICByZXR1cm4gW1J0LCBNcl07CiAgfQogIGZ1bmN0aW9uIFFpKHM4LCB0NCwgZTUsIGk0LCBuOCkgewogICAgdDQubGFzdEluZGV4ID0gMDsKICAgIGZvciAobGV0IHIzID0gczguaXRlclJhbmdlKGU1LCBpNCksIG80ID0gZTUsIGw3OyAhcjMubmV4dCgpLmRvbmU7IG80ICs9IHIzLnZhbHVlLmxlbmd0aCkKICAgICAgaWYgKCFyMy5saW5lQnJlYWspCiAgICAgICAgZm9yICg7IGw3ID0gdDQuZXhlYyhyMy52YWx1ZSk7ICkKICAgICAgICAgIG44KG80ICsgbDcuaW5kZXgsIGw3KTsKICB9CiAgZnVuY3Rpb24ga3IoczgsIHQ0KSB7CiAgICBsZXQgZTUgPSBzOC52aXNpYmxlUmFuZ2VzOwogICAgaWYgKGU1Lmxlbmd0aCA9PSAxICYmIGU1WzBdLmZyb20gPT0gczgudmlld3BvcnQuZnJvbSAmJiBlNVswXS50byA9PSBzOC52aWV3cG9ydC50bykKICAgICAgcmV0dXJuIGU1OwogICAgbGV0IGk0ID0gW107CiAgICBmb3IgKGxldCB7IGZyb206IG44LCB0bzogcjMgfSBvZiBlNSkKICAgICAgbjggPSBNYXRoLm1heChzOC5zdGF0ZS5kb2MubGluZUF0KG44KS5mcm9tLCBuOCAtIHQ0KSwgcjMgPSBNYXRoLm1pbihzOC5zdGF0ZS5kb2MubGluZUF0KHIzKS50bywgcjMgKyB0NCksIGk0Lmxlbmd0aCAmJiBpNFtpNC5sZW5ndGggLSAxXS50byA+PSBuOCA/IGk0W2k0Lmxlbmd0aCAtIDFdLnRvID0gcjMgOiBpNC5wdXNoKHsgZnJvbTogbjgsIHRvOiByMyB9KTsKICAgIHJldHVybiBpNDsKICB9CiAgdmFyIHJpID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgbGV0IHsgcmVnZXhwOiBlNSwgZGVjb3JhdGlvbjogaTQsIGRlY29yYXRlOiBuOCwgYm91bmRhcnk6IHIzLCBtYXhMZW5ndGg6IG80ID0gMWUzIH0gPSB0NDsKICAgICAgaWYgKCFlNS5nbG9iYWwpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRoZSByZWd1bGFyIGV4cHJlc3Npb24gZ2l2ZW4gdG8gTWF0Y2hEZWNvcmF0b3Igc2hvdWxkIGhhdmUgaXRzICdnJyBmbGFnIHNldCIpOwogICAgICBpZiAodGhpcy5yZWdleHAgPSBlNSwgbjgpCiAgICAgICAgdGhpcy5hZGRNYXRjaCA9IChsNywgaDEwLCBhNCwgYzE3KSA9PiBuOChjMTcsIGE0LCBhNCArIGw3WzBdLmxlbmd0aCwgbDcsIGgxMCk7CiAgICAgIGVsc2UgaWYgKHR5cGVvZiBpNCA9PSAiZnVuY3Rpb24iKQogICAgICAgIHRoaXMuYWRkTWF0Y2ggPSAobDcsIGgxMCwgYTQsIGMxNykgPT4gewogICAgICAgICAgbGV0IGYxMSA9IGk0KGw3LCBoMTAsIGE0KTsKICAgICAgICAgIGYxMSAmJiBjMTcoYTQsIGE0ICsgbDdbMF0ubGVuZ3RoLCBmMTEpOwogICAgICAgIH07CiAgICAgIGVsc2UgaWYgKGk0KQogICAgICAgIHRoaXMuYWRkTWF0Y2ggPSAobDcsIGgxMCwgYTQsIGMxNykgPT4gYzE3KGE0LCBhNCArIGw3WzBdLmxlbmd0aCwgaTQpOwogICAgICBlbHNlCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkVpdGhlciAnZGVjb3JhdGUnIG9yICdkZWNvcmF0aW9uJyBzaG91bGQgYmUgcHJvdmlkZWQgdG8gTWF0Y2hEZWNvcmF0b3IiKTsKICAgICAgdGhpcy5ib3VuZGFyeSA9IHIzLCB0aGlzLm1heExlbmd0aCA9IG80OwogICAgfQogICAgY3JlYXRlRGVjbyh0NCkgewogICAgICBsZXQgZTUgPSBuZXcgWjIoKSwgaTQgPSBlNS5hZGQuYmluZChlNSk7CiAgICAgIGZvciAobGV0IHsgZnJvbTogbjgsIHRvOiByMyB9IG9mIGtyKHQ0LCB0aGlzLm1heExlbmd0aCkpCiAgICAgICAgUWkodDQuc3RhdGUuZG9jLCB0aGlzLnJlZ2V4cCwgbjgsIHIzLCAobzQsIGw3KSA9PiB0aGlzLmFkZE1hdGNoKGw3LCB0NCwgbzQsIGk0KSk7CiAgICAgIHJldHVybiBlNS5maW5pc2goKTsKICAgIH0KICAgIHVwZGF0ZURlY28odDQsIGU1KSB7CiAgICAgIGxldCBpNCA9IDFlOSwgbjggPSAtMTsKICAgICAgcmV0dXJuIHQ0LmRvY0NoYW5nZWQgJiYgdDQuY2hhbmdlcy5pdGVyQ2hhbmdlcygocjMsIG80LCBsNywgaDEwKSA9PiB7CiAgICAgICAgaDEwID4gdDQudmlldy52aWV3cG9ydC5mcm9tICYmIGw3IDwgdDQudmlldy52aWV3cG9ydC50byAmJiAoaTQgPSBNYXRoLm1pbihsNywgaTQpLCBuOCA9IE1hdGgubWF4KGgxMCwgbjgpKTsKICAgICAgfSksIHQ0LnZpZXdwb3J0Q2hhbmdlZCB8fCBuOCAtIGk0ID4gMWUzID8gdGhpcy5jcmVhdGVEZWNvKHQ0LnZpZXcpIDogbjggPiAtMSA/IHRoaXMudXBkYXRlUmFuZ2UodDQudmlldywgZTUubWFwKHQ0LmNoYW5nZXMpLCBpNCwgbjgpIDogZTU7CiAgICB9CiAgICB1cGRhdGVSYW5nZSh0NCwgZTUsIGk0LCBuOCkgewogICAgICBmb3IgKGxldCByMyBvZiB0NC52aXNpYmxlUmFuZ2VzKSB7CiAgICAgICAgbGV0IG80ID0gTWF0aC5tYXgocjMuZnJvbSwgaTQpLCBsNyA9IE1hdGgubWluKHIzLnRvLCBuOCk7CiAgICAgICAgaWYgKGw3ID4gbzQpIHsKICAgICAgICAgIGxldCBoMTAgPSB0NC5zdGF0ZS5kb2MubGluZUF0KG80KSwgYTQgPSBoMTAudG8gPCBsNyA/IHQ0LnN0YXRlLmRvYy5saW5lQXQobDcpIDogaDEwLCBjMTcgPSBNYXRoLm1heChyMy5mcm9tLCBoMTAuZnJvbSksIGYxMSA9IE1hdGgubWluKHIzLnRvLCBhNC50byk7CiAgICAgICAgICBpZiAodGhpcy5ib3VuZGFyeSkgewogICAgICAgICAgICBmb3IgKDsgbzQgPiBoMTAuZnJvbTsgbzQtLSkKICAgICAgICAgICAgICBpZiAodGhpcy5ib3VuZGFyeS50ZXN0KGgxMC50ZXh0W280IC0gMSAtIGgxMC5mcm9tXSkpIHsKICAgICAgICAgICAgICAgIGMxNyA9IG80OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKDsgbDcgPCBhNC50bzsgbDcrKykKICAgICAgICAgICAgICBpZiAodGhpcy5ib3VuZGFyeS50ZXN0KGE0LnRleHRbbDcgLSBhNC5mcm9tXSkpIHsKICAgICAgICAgICAgICAgIGYxMSA9IGw3OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgbGV0IGQxNSA9IFtdLCB1MTEsIHAxOCA9IChiMjUsIG0yMywgZzEyKSA9PiBkMTUucHVzaChnMTIucmFuZ2UoYjI1LCBtMjMpKTsKICAgICAgICAgIGlmIChoMTAgPT0gYTQpCiAgICAgICAgICAgIGZvciAodGhpcy5yZWdleHAubGFzdEluZGV4ID0gYzE3IC0gaDEwLmZyb207ICh1MTEgPSB0aGlzLnJlZ2V4cC5leGVjKGgxMC50ZXh0KSkgJiYgdTExLmluZGV4IDwgZjExIC0gaDEwLmZyb207ICkKICAgICAgICAgICAgICB0aGlzLmFkZE1hdGNoKHUxMSwgdDQsIHUxMS5pbmRleCArIGgxMC5mcm9tLCBwMTgpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBRaSh0NC5zdGF0ZS5kb2MsIHRoaXMucmVnZXhwLCBjMTcsIGYxMSwgKGIyNSwgbTIzKSA9PiB0aGlzLmFkZE1hdGNoKG0yMywgdDQsIGIyNSwgcDE4KSk7CiAgICAgICAgICBlNSA9IGU1LnVwZGF0ZSh7IGZpbHRlckZyb206IGMxNywgZmlsdGVyVG86IGYxMSwgZmlsdGVyOiAoYjI1LCBtMjMpID0+IGIyNSA8IGMxNyB8fCBtMjMgPiBmMTEsIGFkZDogZDE1IH0pOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZTU7CiAgICB9CiAgfTsKICB2YXIgb2kgPSAveC8udW5pY29kZSAhPSBudWxsID8gImd1IiA6ICJnIjsKICB2YXIgQXIgPSBuZXcgUmVnRXhwKGBbXDAtXGIKLR9ceDdGLVx4OUZceEFEXHUwNjFDXHUyMDBCXHUyMDBFXHUyMDBGXHUyMDI4XHUyMDI5XHUyMDJEXHUyMDJFXHUyMDY2XHUyMDY3XHUyMDY5XHVGRUZGXHVGRkY5LVx1RkZGQ11gLCBvaSk7CiAgdmFyIERyID0geyAwOiAibnVsbCIsIDc6ICJiZWxsIiwgODogImJhY2tzcGFjZSIsIDEwOiAibmV3bGluZSIsIDExOiAidmVydGljYWwgdGFiIiwgMTM6ICJjYXJyaWFnZSByZXR1cm4iLCAyNzogImVzY2FwZSIsIDgyMDM6ICJ6ZXJvIHdpZHRoIHNwYWNlIiwgODIwNDogInplcm8gd2lkdGggbm9uLWpvaW5lciIsIDgyMDU6ICJ6ZXJvIHdpZHRoIGpvaW5lciIsIDgyMDY6ICJsZWZ0LXRvLXJpZ2h0IG1hcmsiLCA4MjA3OiAicmlnaHQtdG8tbGVmdCBtYXJrIiwgODIzMjogImxpbmUgc2VwYXJhdG9yIiwgODIzNzogImxlZnQtdG8tcmlnaHQgb3ZlcnJpZGUiLCA4MjM4OiAicmlnaHQtdG8tbGVmdCBvdmVycmlkZSIsIDgyOTQ6ICJsZWZ0LXRvLXJpZ2h0IGlzb2xhdGUiLCA4Mjk1OiAicmlnaHQtdG8tbGVmdCBpc29sYXRlIiwgODI5NzogInBvcCBkaXJlY3Rpb25hbCBpc29sYXRlIiwgODIzMzogInBhcmFncmFwaCBzZXBhcmF0b3IiLCA2NTI3OTogInplcm8gd2lkdGggbm8tYnJlYWsgc3BhY2UiLCA2NTUzMjogIm9iamVjdCByZXBsYWNlbWVudCIgfTsKICB2YXIgVGUzID0gbnVsbDsKICBmdW5jdGlvbiBUcigpIHsKICAgIHZhciBzODsKICAgIGlmIChUZTMgPT0gbnVsbCAmJiB0eXBlb2YgZG9jdW1lbnQgPCAidSIgJiYgZG9jdW1lbnQuYm9keSkgewogICAgICBsZXQgdDQgPSBkb2N1bWVudC5ib2R5LnN0eWxlOwogICAgICBUZTMgPSAoKHM4ID0gdDQudGFiU2l6ZSkgIT09IG51bGwgJiYgczggIT09IHZvaWQgMCA/IHM4IDogdDQuTW96VGFiU2l6ZSkgIT0gbnVsbDsKICAgIH0KICAgIHJldHVybiBUZTMgfHwgZmFsc2U7CiAgfQogIHZhciB0ZTMgPSBBMi5kZWZpbmUoeyBjb21iaW5lKHM4KSB7CiAgICBsZXQgdDQgPSBodChzOCwgeyByZW5kZXI6IG51bGwsIHNwZWNpYWxDaGFyczogQXIsIGFkZFNwZWNpYWxDaGFyczogbnVsbCB9KTsKICAgIHJldHVybiAodDQucmVwbGFjZVRhYnMgPSAhVHIoKSkgJiYgKHQ0LnNwZWNpYWxDaGFycyA9IG5ldyBSZWdFeHAoIgl8IiArIHQ0LnNwZWNpYWxDaGFycy5zb3VyY2UsIG9pKSksIHQ0LmFkZFNwZWNpYWxDaGFycyAmJiAodDQuc3BlY2lhbENoYXJzID0gbmV3IFJlZ0V4cCh0NC5zcGVjaWFsQ2hhcnMuc291cmNlICsgInwiICsgdDQuYWRkU3BlY2lhbENoYXJzLnNvdXJjZSwgb2kpKSwgdDQ7CiAgfSB9KTsKICBmdW5jdGlvbiBubyhzOCA9IHt9KSB7CiAgICByZXR1cm4gW3RlMy5vZihzOCksIE9yMigpXTsKICB9CiAgdmFyIHRzID0gbnVsbDsKICBmdW5jdGlvbiBPcjIoKSB7CiAgICByZXR1cm4gdHMgfHwgKHRzID0gVjQuZnJvbUNsYXNzKGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoczgpIHsKICAgICAgICB0aGlzLnZpZXcgPSBzOCwgdGhpcy5kZWNvcmF0aW9ucyA9IGsubm9uZSwgdGhpcy5kZWNvcmF0aW9uQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgdGhpcy5kZWNvcmF0b3IgPSB0aGlzLm1ha2VEZWNvcmF0b3Ioczguc3RhdGUuZmFjZXQodGUzKSksIHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmRlY29yYXRvci5jcmVhdGVEZWNvKHM4KTsKICAgICAgfQogICAgICBtYWtlRGVjb3JhdG9yKHM4KSB7CiAgICAgICAgcmV0dXJuIG5ldyByaSh7IHJlZ2V4cDogczguc3BlY2lhbENoYXJzLCBkZWNvcmF0aW9uOiAodDQsIGU1LCBpNCkgPT4gewogICAgICAgICAgbGV0IHsgZG9jOiBuOCB9ID0gZTUuc3RhdGUsIHIzID0gb2UodDRbMF0sIDApOwogICAgICAgICAgaWYgKHIzID09IDkpIHsKICAgICAgICAgICAgbGV0IG80ID0gbjgubGluZUF0KGk0KSwgbDcgPSBlNS5zdGF0ZS50YWJTaXplLCBoMTAgPSBvdChvNC50ZXh0LCBsNywgaTQgLSBvNC5mcm9tKTsKICAgICAgICAgICAgcmV0dXJuIGsucmVwbGFjZSh7IHdpZGdldDogbmV3IGhpKChsNyAtIGgxMCAlIGw3KSAqIHRoaXMudmlldy5kZWZhdWx0Q2hhcmFjdGVyV2lkdGgpIH0pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMuZGVjb3JhdGlvbkNhY2hlW3IzXSB8fCAodGhpcy5kZWNvcmF0aW9uQ2FjaGVbcjNdID0gay5yZXBsYWNlKHsgd2lkZ2V0OiBuZXcgbGkoczgsIHIzKSB9KSk7CiAgICAgICAgfSwgYm91bmRhcnk6IHM4LnJlcGxhY2VUYWJzID8gdm9pZCAwIDogL1teXS8gfSk7CiAgICAgIH0KICAgICAgdXBkYXRlKHM4KSB7CiAgICAgICAgbGV0IHQ0ID0gczguc3RhdGUuZmFjZXQodGUzKTsKICAgICAgICBzOC5zdGFydFN0YXRlLmZhY2V0KHRlMykgIT0gdDQgPyAodGhpcy5kZWNvcmF0b3IgPSB0aGlzLm1ha2VEZWNvcmF0b3IodDQpLCB0aGlzLmRlY29yYXRpb25zID0gdGhpcy5kZWNvcmF0b3IuY3JlYXRlRGVjbyhzOC52aWV3KSkgOiB0aGlzLmRlY29yYXRpb25zID0gdGhpcy5kZWNvcmF0b3IudXBkYXRlRGVjbyhzOCwgdGhpcy5kZWNvcmF0aW9ucyk7CiAgICAgIH0KICAgIH0sIHsgZGVjb3JhdGlvbnM6IChzOCkgPT4gczguZGVjb3JhdGlvbnMgfSkpOwogIH0KICB2YXIgUnIgPSAiXHUyMDIyIjsKICBmdW5jdGlvbiBMcihzOCkgewogICAgcmV0dXJuIHM4ID49IDMyID8gUnIgOiBzOCA9PSAxMCA/ICJcdTI0MjQiIDogU3RyaW5nLmZyb21DaGFyQ29kZSg5MjE2ICsgczgpOwogIH0KICB2YXIgbGkgPSBjbGFzcyBleHRlbmRzIFg0IHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSkgewogICAgICBzdXBlcigpLCB0aGlzLm9wdGlvbnMgPSB0NCwgdGhpcy5jb2RlID0gZTU7CiAgICB9CiAgICBlcSh0NCkgewogICAgICByZXR1cm4gdDQuY29kZSA9PSB0aGlzLmNvZGU7CiAgICB9CiAgICB0b0RPTSh0NCkgewogICAgICBsZXQgZTUgPSBMcih0aGlzLmNvZGUpLCBpNCA9IHQ0LnN0YXRlLnBocmFzZSgiQ29udHJvbCBjaGFyYWN0ZXIiKSArICIgIiArIChEclt0aGlzLmNvZGVdIHx8ICIweCIgKyB0aGlzLmNvZGUudG9TdHJpbmcoMTYpKSwgbjggPSB0aGlzLm9wdGlvbnMucmVuZGVyICYmIHRoaXMub3B0aW9ucy5yZW5kZXIodGhpcy5jb2RlLCBpNCwgZTUpOwogICAgICBpZiAobjgpCiAgICAgICAgcmV0dXJuIG44OwogICAgICBsZXQgcjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgIHJldHVybiByMy50ZXh0Q29udGVudCA9IGU1LCByMy50aXRsZSA9IGk0LCByMy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCBpNCksIHIzLmNsYXNzTmFtZSA9ICJjbS1zcGVjaWFsQ2hhciIsIHIzOwogICAgfQogICAgaWdub3JlRXZlbnQoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9OwogIHZhciBoaSA9IGNsYXNzIGV4dGVuZHMgWDQgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgc3VwZXIoKSwgdGhpcy53aWR0aCA9IHQ0OwogICAgfQogICAgZXEodDQpIHsKICAgICAgcmV0dXJuIHQ0LndpZHRoID09IHRoaXMud2lkdGg7CiAgICB9CiAgICB0b0RPTSgpIHsKICAgICAgbGV0IHQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICByZXR1cm4gdDQudGV4dENvbnRlbnQgPSAiCSIsIHQ0LmNsYXNzTmFtZSA9ICJjbS10YWIiLCB0NC5zdHlsZS53aWR0aCA9IHRoaXMud2lkdGggKyAicHgiLCB0NDsKICAgIH0KICAgIGlnbm9yZUV2ZW50KCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfTsKICB2YXIgZXMgPSBWNC5mcm9tQ2xhc3MoY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHRoaXMuaGVpZ2h0ID0gMWUzLCB0aGlzLmF0dHJzID0geyBzdHlsZTogInBhZGRpbmctYm90dG9tOiAxMDAwcHgiIH07CiAgICB9CiAgICB1cGRhdGUoczgpIHsKICAgICAgbGV0IHQ0ID0gczgudmlldy52aWV3U3RhdGUuZWRpdG9ySGVpZ2h0IC0gczgudmlldy5kZWZhdWx0TGluZUhlaWdodDsKICAgICAgdDQgIT0gdGhpcy5oZWlnaHQgJiYgKHRoaXMuaGVpZ2h0ID0gdDQsIHRoaXMuYXR0cnMgPSB7IHN0eWxlOiBgcGFkZGluZy1ib3R0b206ICR7dDR9cHhgIH0pOwogICAgfQogIH0pOwogIHZhciBFciA9IGsubGluZSh7IGNsYXNzOiAiY20tYWN0aXZlTGluZSIgfSk7CiAgdmFyIEJyID0gVjQuZnJvbUNsYXNzKGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHM4KSB7CiAgICAgIHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmdldERlY28oczgpOwogICAgfQogICAgdXBkYXRlKHM4KSB7CiAgICAgIChzOC5kb2NDaGFuZ2VkIHx8IHM4LnNlbGVjdGlvblNldCkgJiYgKHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmdldERlY28oczgudmlldykpOwogICAgfQogICAgZ2V0RGVjbyhzOCkgewogICAgICBsZXQgdDQgPSAtMSwgZTUgPSBbXTsKICAgICAgZm9yIChsZXQgaTQgb2Ygczguc3RhdGUuc2VsZWN0aW9uLnJhbmdlcykgewogICAgICAgIGxldCBuOCA9IHM4LmxpbmVCbG9ja0F0KGk0LmhlYWQpOwogICAgICAgIG44LmZyb20gPiB0NCAmJiAoZTUucHVzaChFci5yYW5nZShuOC5mcm9tKSksIHQ0ID0gbjguZnJvbSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGsuc2V0KGU1KTsKICAgIH0KICB9LCB7IGRlY29yYXRpb25zOiAoczgpID0+IHM4LmRlY29yYXRpb25zIH0pOwogIHZhciBPZTMgPSAiLTEwMDAwcHgiOwogIHZhciB5ZTQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIGk0KSB7CiAgICAgIHRoaXMuZmFjZXQgPSBlNSwgdGhpcy5jcmVhdGVUb29sdGlwVmlldyA9IGk0LCB0aGlzLmlucHV0ID0gdDQuc3RhdGUuZmFjZXQoZTUpLCB0aGlzLnRvb2x0aXBzID0gdGhpcy5pbnB1dC5maWx0ZXIoKG44KSA9PiBuOCksIHRoaXMudG9vbHRpcFZpZXdzID0gdGhpcy50b29sdGlwcy5tYXAoaTQpOwogICAgfQogICAgdXBkYXRlKHQ0KSB7CiAgICAgIGxldCBlNSA9IHQ0LnN0YXRlLmZhY2V0KHRoaXMuZmFjZXQpLCBpNCA9IGU1LmZpbHRlcigocjMpID0+IHIzKTsKICAgICAgaWYgKGU1ID09PSB0aGlzLmlucHV0KSB7CiAgICAgICAgZm9yIChsZXQgcjMgb2YgdGhpcy50b29sdGlwVmlld3MpCiAgICAgICAgICByMy51cGRhdGUgJiYgcjMudXBkYXRlKHQ0KTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgbGV0IG44ID0gW107CiAgICAgIGZvciAobGV0IHIzID0gMDsgcjMgPCBpNC5sZW5ndGg7IHIzKyspIHsKICAgICAgICBsZXQgbzQgPSBpNFtyM10sIGw3ID0gLTE7CiAgICAgICAgaWYgKCEhbzQpIHsKICAgICAgICAgIGZvciAobGV0IGgxMCA9IDA7IGgxMCA8IHRoaXMudG9vbHRpcHMubGVuZ3RoOyBoMTArKykgewogICAgICAgICAgICBsZXQgYTQgPSB0aGlzLnRvb2x0aXBzW2gxMF07CiAgICAgICAgICAgIGE0ICYmIGE0LmNyZWF0ZSA9PSBvNC5jcmVhdGUgJiYgKGw3ID0gaDEwKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChsNyA8IDApCiAgICAgICAgICAgIG44W3IzXSA9IHRoaXMuY3JlYXRlVG9vbHRpcFZpZXcobzQpOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGxldCBoMTAgPSBuOFtyM10gPSB0aGlzLnRvb2x0aXBWaWV3c1tsN107CiAgICAgICAgICAgIGgxMC51cGRhdGUgJiYgaDEwLnVwZGF0ZSh0NCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAobGV0IHIzIG9mIHRoaXMudG9vbHRpcFZpZXdzKQogICAgICAgIG44LmluZGV4T2YocjMpIDwgMCAmJiByMy5kb20ucmVtb3ZlKCk7CiAgICAgIHJldHVybiB0aGlzLmlucHV0ID0gZTUsIHRoaXMudG9vbHRpcHMgPSBpNCwgdGhpcy50b29sdGlwVmlld3MgPSBuOCwgdHJ1ZTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEZyKHM4KSB7CiAgICBsZXQgeyB3aW46IHQ0IH0gPSBzODsKICAgIHJldHVybiB7IHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiB0NC5pbm5lckhlaWdodCwgcmlnaHQ6IHQ0LmlubmVyV2lkdGggfTsKICB9CiAgdmFyIGVlMyA9IEEyLmRlZmluZSh7IGNvbWJpbmU6IChzOCkgPT4gewogICAgdmFyIHQ0LCBlNSwgaTQ7CiAgICByZXR1cm4geyBwb3NpdGlvbjogeTMuaW9zID8gImFic29sdXRlIiA6ICgodDQgPSBzOC5maW5kKChuOCkgPT4gbjgucG9zaXRpb24pKSA9PT0gbnVsbCB8fCB0NCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdDQucG9zaXRpb24pIHx8ICJmaXhlZCIsIHBhcmVudDogKChlNSA9IHM4LmZpbmQoKG44KSA9PiBuOC5wYXJlbnQpKSA9PT0gbnVsbCB8fCBlNSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZTUucGFyZW50KSB8fCBudWxsLCB0b29sdGlwU3BhY2U6ICgoaTQgPSBzOC5maW5kKChuOCkgPT4gbjgudG9vbHRpcFNwYWNlKSkgPT09IG51bGwgfHwgaTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGk0LnRvb2x0aXBTcGFjZSkgfHwgRnIgfTsKICB9IH0pOwogIHZhciB2aSA9IFY0LmZyb21DbGFzcyhjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihzOCkgewogICAgICB0aGlzLnZpZXcgPSBzOCwgdGhpcy5pblZpZXcgPSB0cnVlLCB0aGlzLmxhc3RUcmFuc2FjdGlvbiA9IDAsIHRoaXMubWVhc3VyZVRpbWVvdXQgPSAtMTsKICAgICAgbGV0IHQ0ID0gczguc3RhdGUuZmFjZXQoZWUzKTsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHQ0LnBvc2l0aW9uLCB0aGlzLnBhcmVudCA9IHQ0LnBhcmVudCwgdGhpcy5jbGFzc2VzID0gczgudGhlbWVDbGFzc2VzLCB0aGlzLmNyZWF0ZUNvbnRhaW5lcigpLCB0aGlzLm1lYXN1cmVSZXEgPSB7IHJlYWQ6IHRoaXMucmVhZE1lYXN1cmUuYmluZCh0aGlzKSwgd3JpdGU6IHRoaXMud3JpdGVNZWFzdXJlLmJpbmQodGhpcyksIGtleTogdGhpcyB9LCB0aGlzLm1hbmFnZXIgPSBuZXcgeWU0KHM4LCBubiwgKGU1KSA9PiB0aGlzLmNyZWF0ZVRvb2x0aXAoZTUpKSwgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlciA9IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PSAiZnVuY3Rpb24iID8gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlNSkgPT4gewogICAgICAgIERhdGUubm93KCkgPiB0aGlzLmxhc3RUcmFuc2FjdGlvbiAtIDUwICYmIGU1Lmxlbmd0aCA+IDAgJiYgZTVbZTUubGVuZ3RoIC0gMV0uaW50ZXJzZWN0aW9uUmF0aW8gPCAxICYmIHRoaXMubWVhc3VyZVNvb24oKTsKICAgICAgfSwgeyB0aHJlc2hvbGQ6IFsxXSB9KSA6IG51bGwsIHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpLCBzOC53aW4uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5tZWFzdXJlU29vbiA9IHRoaXMubWVhc3VyZVNvb24uYmluZCh0aGlzKSksIHRoaXMubWF5YmVNZWFzdXJlKCk7CiAgICB9CiAgICBjcmVhdGVDb250YWluZXIoKSB7CiAgICAgIHRoaXMucGFyZW50ID8gKHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksIHRoaXMuY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIiwgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gdGhpcy52aWV3LnRoZW1lQ2xhc3NlcywgdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpKSA6IHRoaXMuY29udGFpbmVyID0gdGhpcy52aWV3LmRvbTsKICAgIH0KICAgIG9ic2VydmVJbnRlcnNlY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgZm9yIChsZXQgczggb2YgdGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3cykKICAgICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShzOC5kb20pOwogICAgICB9CiAgICB9CiAgICBtZWFzdXJlU29vbigpIHsKICAgICAgdGhpcy5tZWFzdXJlVGltZW91dCA8IDAgJiYgKHRoaXMubWVhc3VyZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0aGlzLm1lYXN1cmVUaW1lb3V0ID0gLTEsIHRoaXMubWF5YmVNZWFzdXJlKCk7CiAgICAgIH0sIDUwKSk7CiAgICB9CiAgICB1cGRhdGUoczgpIHsKICAgICAgczgudHJhbnNhY3Rpb25zLmxlbmd0aCAmJiAodGhpcy5sYXN0VHJhbnNhY3Rpb24gPSBEYXRlLm5vdygpKTsKICAgICAgbGV0IHQ0ID0gdGhpcy5tYW5hZ2VyLnVwZGF0ZShzOCk7CiAgICAgIHQ0ICYmIHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpOwogICAgICBsZXQgZTUgPSB0NCB8fCBzOC5nZW9tZXRyeUNoYW5nZWQsIGk0ID0gczguc3RhdGUuZmFjZXQoZWUzKTsKICAgICAgaWYgKGk0LnBvc2l0aW9uICE9IHRoaXMucG9zaXRpb24pIHsKICAgICAgICB0aGlzLnBvc2l0aW9uID0gaTQucG9zaXRpb247CiAgICAgICAgZm9yIChsZXQgbjggb2YgdGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3cykKICAgICAgICAgIG44LmRvbS5zdHlsZS5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb247CiAgICAgICAgZTUgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChpNC5wYXJlbnQgIT0gdGhpcy5wYXJlbnQpIHsKICAgICAgICB0aGlzLnBhcmVudCAmJiB0aGlzLmNvbnRhaW5lci5yZW1vdmUoKSwgdGhpcy5wYXJlbnQgPSBpNC5wYXJlbnQsIHRoaXMuY3JlYXRlQ29udGFpbmVyKCk7CiAgICAgICAgZm9yIChsZXQgbjggb2YgdGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3cykKICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG44LmRvbSk7CiAgICAgICAgZTUgPSB0cnVlOwogICAgICB9IGVsc2UKICAgICAgICB0aGlzLnBhcmVudCAmJiB0aGlzLnZpZXcudGhlbWVDbGFzc2VzICE9IHRoaXMuY2xhc3NlcyAmJiAodGhpcy5jbGFzc2VzID0gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gdGhpcy52aWV3LnRoZW1lQ2xhc3Nlcyk7CiAgICAgIGU1ICYmIHRoaXMubWF5YmVNZWFzdXJlKCk7CiAgICB9CiAgICBjcmVhdGVUb29sdGlwKHM4KSB7CiAgICAgIGxldCB0NCA9IHM4LmNyZWF0ZSh0aGlzLnZpZXcpOwogICAgICBpZiAodDQuZG9tLmNsYXNzTGlzdC5hZGQoImNtLXRvb2x0aXAiKSwgczguYXJyb3cgJiYgIXQ0LmRvbS5xdWVyeVNlbGVjdG9yKCIuY20tdG9vbHRpcCA+IC5jbS10b29sdGlwLWFycm93IikpIHsKICAgICAgICBsZXQgZTUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICBlNS5jbGFzc05hbWUgPSAiY20tdG9vbHRpcC1hcnJvdyIsIHQ0LmRvbS5hcHBlbmRDaGlsZChlNSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHQ0LmRvbS5zdHlsZS5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb24sIHQ0LmRvbS5zdHlsZS50b3AgPSBPZTMsIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHQ0LmRvbSksIHQ0Lm1vdW50ICYmIHQ0Lm1vdW50KHRoaXMudmlldyksIHQ0OwogICAgfQogICAgZGVzdHJveSgpIHsKICAgICAgdmFyIHM4OwogICAgICB0aGlzLnZpZXcud2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMubWVhc3VyZVNvb24pOwogICAgICBmb3IgKGxldCB7IGRvbTogdDQgfSBvZiB0aGlzLm1hbmFnZXIudG9vbHRpcFZpZXdzKQogICAgICAgIHQ0LnJlbW92ZSgpOwogICAgICAoczggPSB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKSA9PT0gbnVsbCB8fCBzOCA9PT0gdm9pZCAwIHx8IHM4LmRpc2Nvbm5lY3QoKSwgY2xlYXJUaW1lb3V0KHRoaXMubWVhc3VyZVRpbWVvdXQpOwogICAgfQogICAgcmVhZE1lYXN1cmUoKSB7CiAgICAgIGxldCBzOCA9IHRoaXMudmlldy5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIHJldHVybiB7IGVkaXRvcjogczgsIHBhcmVudDogdGhpcy5wYXJlbnQgPyB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHM4LCBwb3M6IHRoaXMubWFuYWdlci50b29sdGlwcy5tYXAoKHQ0LCBlNSkgPT4gewogICAgICAgIGxldCBpNCA9IHRoaXMubWFuYWdlci50b29sdGlwVmlld3NbZTVdOwogICAgICAgIHJldHVybiBpNC5nZXRDb29yZHMgPyBpNC5nZXRDb29yZHModDQucG9zKSA6IHRoaXMudmlldy5jb29yZHNBdFBvcyh0NC5wb3MpOwogICAgICB9KSwgc2l6ZTogdGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3cy5tYXAoKHsgZG9tOiB0NCB9KSA9PiB0NC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksIHNwYWNlOiB0aGlzLnZpZXcuc3RhdGUuZmFjZXQoZWUzKS50b29sdGlwU3BhY2UodGhpcy52aWV3KSB9OwogICAgfQogICAgd3JpdGVNZWFzdXJlKHM4KSB7CiAgICAgIGxldCB7IGVkaXRvcjogdDQsIHNwYWNlOiBlNSB9ID0gczgsIGk0ID0gW107CiAgICAgIGZvciAobGV0IG44ID0gMDsgbjggPCB0aGlzLm1hbmFnZXIudG9vbHRpcHMubGVuZ3RoOyBuOCsrKSB7CiAgICAgICAgbGV0IHIzID0gdGhpcy5tYW5hZ2VyLnRvb2x0aXBzW244XSwgbzQgPSB0aGlzLm1hbmFnZXIudG9vbHRpcFZpZXdzW244XSwgeyBkb206IGw3IH0gPSBvNCwgaDEwID0gczgucG9zW244XSwgYTQgPSBzOC5zaXplW244XTsKICAgICAgICBpZiAoIWgxMCB8fCBoMTAuYm90dG9tIDw9IE1hdGgubWF4KHQ0LnRvcCwgZTUudG9wKSB8fCBoMTAudG9wID49IE1hdGgubWluKHQ0LmJvdHRvbSwgZTUuYm90dG9tKSB8fCBoMTAucmlnaHQgPCBNYXRoLm1heCh0NC5sZWZ0LCBlNS5sZWZ0KSAtIDAuMSB8fCBoMTAubGVmdCA+IE1hdGgubWluKHQ0LnJpZ2h0LCBlNS5yaWdodCkgKyAwLjEpIHsKICAgICAgICAgIGw3LnN0eWxlLnRvcCA9IE9lMzsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBsZXQgYzE3ID0gcjMuYXJyb3cgPyBvNC5kb20ucXVlcnlTZWxlY3RvcigiLmNtLXRvb2x0aXAtYXJyb3ciKSA6IG51bGwsIGYxMSA9IGMxNyA/IDcgOiAwLCBkMTUgPSBhNC5yaWdodCAtIGE0LmxlZnQsIHUxMSA9IGE0LmJvdHRvbSAtIGE0LnRvcCwgcDE4ID0gbzQub2Zmc2V0IHx8IElyLCBiMjUgPSB0aGlzLnZpZXcudGV4dERpcmVjdGlvbiA9PSBSMi5MVFIsIG0yMyA9IGE0LndpZHRoID4gZTUucmlnaHQgLSBlNS5sZWZ0ID8gYjI1ID8gZTUubGVmdCA6IGU1LnJpZ2h0IC0gYTQud2lkdGggOiBiMjUgPyBNYXRoLm1pbihoMTAubGVmdCAtIChjMTcgPyAxNCA6IDApICsgcDE4LngsIGU1LnJpZ2h0IC0gZDE1KSA6IE1hdGgubWF4KGU1LmxlZnQsIGgxMC5sZWZ0IC0gZDE1ICsgKGMxNyA/IDE0IDogMCkgLSBwMTgueCksIGcxMiA9ICEhcjMuYWJvdmU7CiAgICAgICAgIXIzLnN0cmljdFNpZGUgJiYgKGcxMiA/IGgxMC50b3AgLSAoYTQuYm90dG9tIC0gYTQudG9wKSAtIHAxOC55IDwgZTUudG9wIDogaDEwLmJvdHRvbSArIChhNC5ib3R0b20gLSBhNC50b3ApICsgcDE4LnkgPiBlNS5ib3R0b20pICYmIGcxMiA9PSBlNS5ib3R0b20gLSBoMTAuYm90dG9tID4gaDEwLnRvcCAtIGU1LnRvcCAmJiAoZzEyID0gIWcxMik7CiAgICAgICAgbGV0IFMyMSA9IGcxMiA/IGgxMC50b3AgLSB1MTEgLSBmMTEgLSBwMTgueSA6IGgxMC5ib3R0b20gKyBmMTEgKyBwMTgueSwgdzIxID0gbTIzICsgZDE1OwogICAgICAgIGlmIChvNC5vdmVybGFwICE9PSB0cnVlKQogICAgICAgICAgZm9yIChsZXQgdjE1IG9mIGk0KQogICAgICAgICAgICB2MTUubGVmdCA8IHcyMSAmJiB2MTUucmlnaHQgPiBtMjMgJiYgdjE1LnRvcCA8IFMyMSArIHUxMSAmJiB2MTUuYm90dG9tID4gUzIxICYmIChTMjEgPSBnMTIgPyB2MTUudG9wIC0gdTExIC0gMiAtIGYxMSA6IHYxNS5ib3R0b20gKyBmMTEgKyAyKTsKICAgICAgICB0aGlzLnBvc2l0aW9uID09ICJhYnNvbHV0ZSIgPyAobDcuc3R5bGUudG9wID0gUzIxIC0gczgucGFyZW50LnRvcCArICJweCIsIGw3LnN0eWxlLmxlZnQgPSBtMjMgLSBzOC5wYXJlbnQubGVmdCArICJweCIpIDogKGw3LnN0eWxlLnRvcCA9IFMyMSArICJweCIsIGw3LnN0eWxlLmxlZnQgPSBtMjMgKyAicHgiKSwgYzE3ICYmIChjMTcuc3R5bGUubGVmdCA9IGAke2gxMC5sZWZ0ICsgKGIyNSA/IHAxOC54IDogLXAxOC54KSAtIChtMjMgKyAxNCAtIDcpfXB4YCksIG80Lm92ZXJsYXAgIT09IHRydWUgJiYgaTQucHVzaCh7IGxlZnQ6IG0yMywgdG9wOiBTMjEsIHJpZ2h0OiB3MjEsIGJvdHRvbTogUzIxICsgdTExIH0pLCBsNy5jbGFzc0xpc3QudG9nZ2xlKCJjbS10b29sdGlwLWFib3ZlIiwgZzEyKSwgbDcuY2xhc3NMaXN0LnRvZ2dsZSgiY20tdG9vbHRpcC1iZWxvdyIsICFnMTIpLCBvNC5wb3NpdGlvbmVkICYmIG80LnBvc2l0aW9uZWQoKTsKICAgICAgfQogICAgfQogICAgbWF5YmVNZWFzdXJlKCkgewogICAgICBpZiAodGhpcy5tYW5hZ2VyLnRvb2x0aXBzLmxlbmd0aCAmJiAodGhpcy52aWV3LmluVmlldyAmJiB0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5tZWFzdXJlUmVxKSwgdGhpcy5pblZpZXcgIT0gdGhpcy52aWV3LmluVmlldyAmJiAodGhpcy5pblZpZXcgPSB0aGlzLnZpZXcuaW5WaWV3LCAhdGhpcy5pblZpZXcpKSkKICAgICAgICBmb3IgKGxldCBzOCBvZiB0aGlzLm1hbmFnZXIudG9vbHRpcFZpZXdzKQogICAgICAgICAgczguZG9tLnN0eWxlLnRvcCA9IE9lMzsKICAgIH0KICB9LCB7IGV2ZW50SGFuZGxlcnM6IHsgc2Nyb2xsKCkgewogICAgdGhpcy5tYXliZU1lYXN1cmUoKTsKICB9IH0gfSk7CiAgdmFyIHpyID0gTTIuYmFzZVRoZW1lKHsgIi5jbS10b29sdGlwIjogeyB6SW5kZXg6IDEwMCB9LCAiJmxpZ2h0IC5jbS10b29sdGlwIjogeyBib3JkZXI6ICIxcHggc29saWQgI2JiYiIsIGJhY2tncm91bmRDb2xvcjogIiNmNWY1ZjUiIH0sICImbGlnaHQgLmNtLXRvb2x0aXAtc2VjdGlvbjpub3QoOmZpcnN0LWNoaWxkKSI6IHsgYm9yZGVyVG9wOiAiMXB4IHNvbGlkICNiYmIiIH0sICImZGFyayAuY20tdG9vbHRpcCI6IHsgYmFja2dyb3VuZENvbG9yOiAiIzMzMzMzOCIsIGNvbG9yOiAid2hpdGUiIH0sICIuY20tdG9vbHRpcC1hcnJvdyI6IHsgaGVpZ2h0OiBgJHs3fXB4YCwgd2lkdGg6IGAkezcgKiAyfXB4YCwgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHpJbmRleDogLTEsIG92ZXJmbG93OiAiaGlkZGVuIiwgIiY6YmVmb3JlLCAmOmFmdGVyIjogeyBjb250ZW50OiAiJyciLCBwb3NpdGlvbjogImFic29sdXRlIiwgd2lkdGg6IDAsIGhlaWdodDogMCwgYm9yZGVyTGVmdDogYCR7N31weCBzb2xpZCB0cmFuc3BhcmVudGAsIGJvcmRlclJpZ2h0OiBgJHs3fXB4IHNvbGlkIHRyYW5zcGFyZW50YCB9LCAiLmNtLXRvb2x0aXAtYWJvdmUgJiI6IHsgYm90dG9tOiBgLSR7N31weGAsICImOmJlZm9yZSI6IHsgYm9yZGVyVG9wOiBgJHs3fXB4IHNvbGlkICNiYmJgIH0sICImOmFmdGVyIjogeyBib3JkZXJUb3A6IGAkezd9cHggc29saWQgI2Y1ZjVmNWAsIGJvdHRvbTogIjFweCIgfSB9LCAiLmNtLXRvb2x0aXAtYmVsb3cgJiI6IHsgdG9wOiBgLSR7N31weGAsICImOmJlZm9yZSI6IHsgYm9yZGVyQm90dG9tOiBgJHs3fXB4IHNvbGlkICNiYmJgIH0sICImOmFmdGVyIjogeyBib3JkZXJCb3R0b206IGAkezd9cHggc29saWQgI2Y1ZjVmNWAsIHRvcDogIjFweCIgfSB9IH0sICImZGFyayAuY20tdG9vbHRpcCAuY20tdG9vbHRpcC1hcnJvdyI6IHsgIiY6YmVmb3JlIjogeyBib3JkZXJUb3BDb2xvcjogIiMzMzMzMzgiLCBib3JkZXJCb3R0b21Db2xvcjogIiMzMzMzMzgiIH0sICImOmFmdGVyIjogeyBib3JkZXJUb3BDb2xvcjogInRyYW5zcGFyZW50IiwgYm9yZGVyQm90dG9tQ29sb3I6ICJ0cmFuc3BhcmVudCIgfSB9IH0pOwogIHZhciBJciA9IHsgeDogMCwgeTogMCB9OwogIHZhciBubiA9IEEyLmRlZmluZSh7IGVuYWJsZXM6IFt2aSwgenJdIH0pOwogIHZhciBxdCA9IEEyLmRlZmluZSgpOwogIHZhciBLdCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHRoaXMudmlldyA9IHQ0LCB0aGlzLm1vdW50ZWQgPSBmYWxzZSwgdGhpcy5kb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgdGhpcy5kb20uY2xhc3NMaXN0LmFkZCgiY20tdG9vbHRpcC1ob3ZlciIpLCB0aGlzLm1hbmFnZXIgPSBuZXcgeWU0KHQ0LCBxdCwgKGU1KSA9PiB0aGlzLmNyZWF0ZUhvc3RlZFZpZXcoZTUpKTsKICAgIH0KICAgIHN0YXRpYyBjcmVhdGUodDQpIHsKICAgICAgcmV0dXJuIG5ldyBLdCh0NCk7CiAgICB9CiAgICBjcmVhdGVIb3N0ZWRWaWV3KHQ0KSB7CiAgICAgIGxldCBlNSA9IHQ0LmNyZWF0ZSh0aGlzLnZpZXcpOwogICAgICByZXR1cm4gZTUuZG9tLmNsYXNzTGlzdC5hZGQoImNtLXRvb2x0aXAtc2VjdGlvbiIpLCB0aGlzLmRvbS5hcHBlbmRDaGlsZChlNS5kb20pLCB0aGlzLm1vdW50ZWQgJiYgZTUubW91bnQgJiYgZTUubW91bnQodGhpcy52aWV3KSwgZTU7CiAgICB9CiAgICBtb3VudCh0NCkgewogICAgICBmb3IgKGxldCBlNSBvZiB0aGlzLm1hbmFnZXIudG9vbHRpcFZpZXdzKQogICAgICAgIGU1Lm1vdW50ICYmIGU1Lm1vdW50KHQ0KTsKICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTsKICAgIH0KICAgIHBvc2l0aW9uZWQoKSB7CiAgICAgIGZvciAobGV0IHQ0IG9mIHRoaXMubWFuYWdlci50b29sdGlwVmlld3MpCiAgICAgICAgdDQucG9zaXRpb25lZCAmJiB0NC5wb3NpdGlvbmVkKCk7CiAgICB9CiAgICB1cGRhdGUodDQpIHsKICAgICAgdGhpcy5tYW5hZ2VyLnVwZGF0ZSh0NCk7CiAgICB9CiAgfTsKICB2YXIgcXIgPSBubi5jb21wdXRlKFtxdF0sIChzOCkgPT4gewogICAgbGV0IHQ0ID0gczguZmFjZXQocXQpLmZpbHRlcigoZTUpID0+IGU1KTsKICAgIHJldHVybiB0NC5sZW5ndGggPT09IDAgPyBudWxsIDogeyBwb3M6IE1hdGgubWluKC4uLnQ0Lm1hcCgoZTUpID0+IGU1LnBvcykpLCBlbmQ6IE1hdGgubWF4KC4uLnQ0LmZpbHRlcigoZTUpID0+IGU1LmVuZCAhPSBudWxsKS5tYXAoKGU1KSA9PiBlNS5lbmQpKSwgY3JlYXRlOiBLdC5jcmVhdGUsIGFib3ZlOiB0NFswXS5hYm92ZSwgYXJyb3c6IHQ0LnNvbWUoKGU1KSA9PiBlNS5hcnJvdykgfTsKICB9KTsKICBmdW5jdGlvbiB1byhzOCwgdDQpIHsKICAgIGxldCBlNSA9IHM4LnBsdWdpbih2aSk7CiAgICBpZiAoIWU1KQogICAgICByZXR1cm4gbnVsbDsKICAgIGxldCBpNCA9IGU1Lm1hbmFnZXIudG9vbHRpcHMuaW5kZXhPZih0NCk7CiAgICByZXR1cm4gaTQgPCAwID8gbnVsbCA6IGU1Lm1hbmFnZXIudG9vbHRpcFZpZXdzW2k0XTsKICB9CiAgdmFyIHJuID0geS5kZWZpbmUoKTsKICB2YXIgbW8gPSBybi5vZihudWxsKTsKICB2YXIgZGkgPSBBMi5kZWZpbmUoeyBjb21iaW5lKHM4KSB7CiAgICBsZXQgdDQsIGU1OwogICAgZm9yIChsZXQgaTQgb2YgczgpCiAgICAgIHQ0ID0gdDQgfHwgaTQudG9wQ29udGFpbmVyLCBlNSA9IGU1IHx8IGk0LmJvdHRvbUNvbnRhaW5lcjsKICAgIHJldHVybiB7IHRvcENvbnRhaW5lcjogdDQsIGJvdHRvbUNvbnRhaW5lcjogZTUgfTsKICB9IH0pOwogIGZ1bmN0aW9uIHlvKHM4LCB0NCkgewogICAgbGV0IGU1ID0gczgucGx1Z2luKG9uKSwgaTQgPSBlNSA/IGU1LnNwZWNzLmluZGV4T2YodDQpIDogLTE7CiAgICByZXR1cm4gaTQgPiAtMSA/IGU1LnBhbmVsc1tpNF0gOiBudWxsOwogIH0KICB2YXIgb24gPSBWNC5mcm9tQ2xhc3MoY2xhc3MgewogICAgY29uc3RydWN0b3IoczgpIHsKICAgICAgdGhpcy5pbnB1dCA9IHM4LnN0YXRlLmZhY2V0KG5zKSwgdGhpcy5zcGVjcyA9IHRoaXMuaW5wdXQuZmlsdGVyKChlNSkgPT4gZTUpLCB0aGlzLnBhbmVscyA9IHRoaXMuc3BlY3MubWFwKChlNSkgPT4gZTUoczgpKTsKICAgICAgbGV0IHQ0ID0gczguc3RhdGUuZmFjZXQoZGkpOwogICAgICB0aGlzLnRvcCA9IG5ldyBwdChzOCwgdHJ1ZSwgdDQudG9wQ29udGFpbmVyKSwgdGhpcy5ib3R0b20gPSBuZXcgcHQoczgsIGZhbHNlLCB0NC5ib3R0b21Db250YWluZXIpLCB0aGlzLnRvcC5zeW5jKHRoaXMucGFuZWxzLmZpbHRlcigoZTUpID0+IGU1LnRvcCkpLCB0aGlzLmJvdHRvbS5zeW5jKHRoaXMucGFuZWxzLmZpbHRlcigoZTUpID0+ICFlNS50b3ApKTsKICAgICAgZm9yIChsZXQgZTUgb2YgdGhpcy5wYW5lbHMpCiAgICAgICAgZTUuZG9tLmNsYXNzTGlzdC5hZGQoImNtLXBhbmVsIiksIGU1Lm1vdW50ICYmIGU1Lm1vdW50KCk7CiAgICB9CiAgICB1cGRhdGUoczgpIHsKICAgICAgbGV0IHQ0ID0gczguc3RhdGUuZmFjZXQoZGkpOwogICAgICB0aGlzLnRvcC5jb250YWluZXIgIT0gdDQudG9wQ29udGFpbmVyICYmICh0aGlzLnRvcC5zeW5jKFtdKSwgdGhpcy50b3AgPSBuZXcgcHQoczgudmlldywgdHJ1ZSwgdDQudG9wQ29udGFpbmVyKSksIHRoaXMuYm90dG9tLmNvbnRhaW5lciAhPSB0NC5ib3R0b21Db250YWluZXIgJiYgKHRoaXMuYm90dG9tLnN5bmMoW10pLCB0aGlzLmJvdHRvbSA9IG5ldyBwdChzOC52aWV3LCBmYWxzZSwgdDQuYm90dG9tQ29udGFpbmVyKSksIHRoaXMudG9wLnN5bmNDbGFzc2VzKCksIHRoaXMuYm90dG9tLnN5bmNDbGFzc2VzKCk7CiAgICAgIGxldCBlNSA9IHM4LnN0YXRlLmZhY2V0KG5zKTsKICAgICAgaWYgKGU1ICE9IHRoaXMuaW5wdXQpIHsKICAgICAgICBsZXQgaTQgPSBlNS5maWx0ZXIoKGgxMCkgPT4gaDEwKSwgbjggPSBbXSwgcjMgPSBbXSwgbzQgPSBbXSwgbDcgPSBbXTsKICAgICAgICBmb3IgKGxldCBoMTAgb2YgaTQpIHsKICAgICAgICAgIGxldCBhNCA9IHRoaXMuc3BlY3MuaW5kZXhPZihoMTApLCBjMTc7CiAgICAgICAgICBhNCA8IDAgPyAoYzE3ID0gaDEwKHM4LnZpZXcpLCBsNy5wdXNoKGMxNykpIDogKGMxNyA9IHRoaXMucGFuZWxzW2E0XSwgYzE3LnVwZGF0ZSAmJiBjMTcudXBkYXRlKHM4KSksIG44LnB1c2goYzE3KSwgKGMxNy50b3AgPyByMyA6IG80KS5wdXNoKGMxNyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3BlY3MgPSBpNCwgdGhpcy5wYW5lbHMgPSBuOCwgdGhpcy50b3Auc3luYyhyMyksIHRoaXMuYm90dG9tLnN5bmMobzQpOwogICAgICAgIGZvciAobGV0IGgxMCBvZiBsNykKICAgICAgICAgIGgxMC5kb20uY2xhc3NMaXN0LmFkZCgiY20tcGFuZWwiKSwgaDEwLm1vdW50ICYmIGgxMC5tb3VudCgpOwogICAgICB9IGVsc2UKICAgICAgICBmb3IgKGxldCBpNCBvZiB0aGlzLnBhbmVscykKICAgICAgICAgIGk0LnVwZGF0ZSAmJiBpNC51cGRhdGUoczgpOwogICAgfQogICAgZGVzdHJveSgpIHsKICAgICAgdGhpcy50b3Auc3luYyhbXSksIHRoaXMuYm90dG9tLnN5bmMoW10pOwogICAgfQogIH0sIHsgcHJvdmlkZTogKHM4KSA9PiBNMi5zY3JvbGxNYXJnaW5zLm9mKCh0NCkgPT4gewogICAgbGV0IGU1ID0gdDQucGx1Z2luKHM4KTsKICAgIHJldHVybiBlNSAmJiB7IHRvcDogZTUudG9wLnNjcm9sbE1hcmdpbigpLCBib3R0b206IGU1LmJvdHRvbS5zY3JvbGxNYXJnaW4oKSB9OwogIH0pIH0pOwogIHZhciBwdCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgaTQpIHsKICAgICAgdGhpcy52aWV3ID0gdDQsIHRoaXMudG9wID0gZTUsIHRoaXMuY29udGFpbmVyID0gaTQsIHRoaXMuZG9tID0gdm9pZCAwLCB0aGlzLmNsYXNzZXMgPSAiIiwgdGhpcy5wYW5lbHMgPSBbXSwgdGhpcy5zeW5jQ2xhc3NlcygpOwogICAgfQogICAgc3luYyh0NCkgewogICAgICBmb3IgKGxldCBlNSBvZiB0aGlzLnBhbmVscykKICAgICAgICBlNS5kZXN0cm95ICYmIHQ0LmluZGV4T2YoZTUpIDwgMCAmJiBlNS5kZXN0cm95KCk7CiAgICAgIHRoaXMucGFuZWxzID0gdDQsIHRoaXMuc3luY0RPTSgpOwogICAgfQogICAgc3luY0RPTSgpIHsKICAgICAgaWYgKHRoaXMucGFuZWxzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgdGhpcy5kb20gJiYgKHRoaXMuZG9tLnJlbW92ZSgpLCB0aGlzLmRvbSA9IHZvaWQgMCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghdGhpcy5kb20pIHsKICAgICAgICB0aGlzLmRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCB0aGlzLmRvbS5jbGFzc05hbWUgPSB0aGlzLnRvcCA/ICJjbS1wYW5lbHMgY20tcGFuZWxzLXRvcCIgOiAiY20tcGFuZWxzIGNtLXBhbmVscy1ib3R0b20iLCB0aGlzLmRvbS5zdHlsZVt0aGlzLnRvcCA/ICJ0b3AiIDogImJvdHRvbSJdID0gIjAiOwogICAgICAgIGxldCBlNSA9IHRoaXMuY29udGFpbmVyIHx8IHRoaXMudmlldy5kb207CiAgICAgICAgZTUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tLCB0aGlzLnRvcCA/IGU1LmZpcnN0Q2hpbGQgOiBudWxsKTsKICAgICAgfQogICAgICBsZXQgdDQgPSB0aGlzLmRvbS5maXJzdENoaWxkOwogICAgICBmb3IgKGxldCBlNSBvZiB0aGlzLnBhbmVscykKICAgICAgICBpZiAoZTUuZG9tLnBhcmVudE5vZGUgPT0gdGhpcy5kb20pIHsKICAgICAgICAgIGZvciAoOyB0NCAhPSBlNS5kb207ICkKICAgICAgICAgICAgdDQgPSBzcyh0NCk7CiAgICAgICAgICB0NCA9IHQ0Lm5leHRTaWJsaW5nOwogICAgICAgIH0gZWxzZQogICAgICAgICAgdGhpcy5kb20uaW5zZXJ0QmVmb3JlKGU1LmRvbSwgdDQpOwogICAgICBmb3IgKDsgdDQ7ICkKICAgICAgICB0NCA9IHNzKHQ0KTsKICAgIH0KICAgIHNjcm9sbE1hcmdpbigpIHsKICAgICAgcmV0dXJuICF0aGlzLmRvbSB8fCB0aGlzLmNvbnRhaW5lciA/IDAgOiBNYXRoLm1heCgwLCB0aGlzLnRvcCA/IHRoaXMuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtIE1hdGgubWF4KDAsIHRoaXMudmlldy5zY3JvbGxET00uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSA6IE1hdGgubWluKGlubmVySGVpZ2h0LCB0aGlzLnZpZXcuc2Nyb2xsRE9NLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSkgLSB0aGlzLmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApOwogICAgfQogICAgc3luY0NsYXNzZXMoKSB7CiAgICAgIGlmICghKCF0aGlzLmNvbnRhaW5lciB8fCB0aGlzLmNsYXNzZXMgPT0gdGhpcy52aWV3LnRoZW1lQ2xhc3NlcykpIHsKICAgICAgICBmb3IgKGxldCB0NCBvZiB0aGlzLmNsYXNzZXMuc3BsaXQoIiAiKSkKICAgICAgICAgIHQ0ICYmIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUodDQpOwogICAgICAgIGZvciAobGV0IHQ0IG9mICh0aGlzLmNsYXNzZXMgPSB0aGlzLnZpZXcudGhlbWVDbGFzc2VzKS5zcGxpdCgiICIpKQogICAgICAgICAgdDQgJiYgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCh0NCk7CiAgICAgIH0KICAgIH0KICB9OwogIGZ1bmN0aW9uIHNzKHM4KSB7CiAgICBsZXQgdDQgPSBzOC5uZXh0U2libGluZzsKICAgIHJldHVybiBzOC5yZW1vdmUoKSwgdDQ7CiAgfQogIHZhciBucyA9IEEyLmRlZmluZSh7IGVuYWJsZXM6IG9uIH0pOwogIHZhciBHNCA9IGNsYXNzIGV4dGVuZHMgaiB7CiAgICBjb21wYXJlKHQ0KSB7CiAgICAgIHJldHVybiB0aGlzID09IHQ0IHx8IHRoaXMuY29uc3RydWN0b3IgPT0gdDQuY29uc3RydWN0b3IgJiYgdGhpcy5lcSh0NCk7CiAgICB9CiAgICBlcSh0NCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBkZXN0cm95KHQ0KSB7CiAgICB9CiAgfTsKICBHNC5wcm90b3R5cGUuZWxlbWVudENsYXNzID0gIiI7CiAgRzQucHJvdG90eXBlLnRvRE9NID0gdm9pZCAwOwogIEc0LnByb3RvdHlwZS5tYXBNb2RlID0gTS5UcmFja0JlZm9yZTsKICBHNC5wcm90b3R5cGUuc3RhcnRTaWRlID0gRzQucHJvdG90eXBlLmVuZFNpZGUgPSAtMTsKICBHNC5wcm90b3R5cGUucG9pbnQgPSB0cnVlOwogIHZhciBpZTMgPSBBMi5kZWZpbmUoKTsKICB2YXIgSHQgPSBBMi5kZWZpbmUoKTsKICB2YXIgdWkgPSBBMi5kZWZpbmUoeyBjb21iaW5lOiAoczgpID0+IHM4LnNvbWUoKHQ0KSA9PiB0NCkgfSk7CiAgdmFyICRyID0gVjQuZnJvbUNsYXNzKGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHM4KSB7CiAgICAgIHRoaXMudmlldyA9IHM4LCB0aGlzLnByZXZWaWV3cG9ydCA9IHM4LnZpZXdwb3J0LCB0aGlzLmRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCB0aGlzLmRvbS5jbGFzc05hbWUgPSAiY20tZ3V0dGVycyIsIHRoaXMuZG9tLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCAidHJ1ZSIpLCB0aGlzLmRvbS5zdHlsZS5taW5IZWlnaHQgPSB0aGlzLnZpZXcuY29udGVudEhlaWdodCArICJweCIsIHRoaXMuZ3V0dGVycyA9IHM4LnN0YXRlLmZhY2V0KEh0KS5tYXAoKHQ0KSA9PiBuZXcgd2U0KHM4LCB0NCkpOwogICAgICBmb3IgKGxldCB0NCBvZiB0aGlzLmd1dHRlcnMpCiAgICAgICAgdGhpcy5kb20uYXBwZW5kQ2hpbGQodDQuZG9tKTsKICAgICAgdGhpcy5maXhlZCA9ICFzOC5zdGF0ZS5mYWNldCh1aSksIHRoaXMuZml4ZWQgJiYgKHRoaXMuZG9tLnN0eWxlLnBvc2l0aW9uID0gInN0aWNreSIpLCB0aGlzLnN5bmNHdXR0ZXJzKGZhbHNlKSwgczguc2Nyb2xsRE9NLmluc2VydEJlZm9yZSh0aGlzLmRvbSwgczguY29udGVudERPTSk7CiAgICB9CiAgICB1cGRhdGUoczgpIHsKICAgICAgaWYgKHRoaXMudXBkYXRlR3V0dGVycyhzOCkpIHsKICAgICAgICBsZXQgdDQgPSB0aGlzLnByZXZWaWV3cG9ydCwgZTUgPSBzOC52aWV3LnZpZXdwb3J0LCBpNCA9IE1hdGgubWluKHQ0LnRvLCBlNS50bykgLSBNYXRoLm1heCh0NC5mcm9tLCBlNS5mcm9tKTsKICAgICAgICB0aGlzLnN5bmNHdXR0ZXJzKGk0IDwgKGU1LnRvIC0gZTUuZnJvbSkgKiAwLjgpOwogICAgICB9CiAgICAgIHM4Lmdlb21ldHJ5Q2hhbmdlZCAmJiAodGhpcy5kb20uc3R5bGUubWluSGVpZ2h0ID0gdGhpcy52aWV3LmNvbnRlbnRIZWlnaHQgKyAicHgiKSwgdGhpcy52aWV3LnN0YXRlLmZhY2V0KHVpKSAhPSAhdGhpcy5maXhlZCAmJiAodGhpcy5maXhlZCA9ICF0aGlzLmZpeGVkLCB0aGlzLmRvbS5zdHlsZS5wb3NpdGlvbiA9IHRoaXMuZml4ZWQgPyAic3RpY2t5IiA6ICIiKSwgdGhpcy5wcmV2Vmlld3BvcnQgPSBzOC52aWV3LnZpZXdwb3J0OwogICAgfQogICAgc3luY0d1dHRlcnMoczgpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5kb20ubmV4dFNpYmxpbmc7CiAgICAgIHM4ICYmIHRoaXMuZG9tLnJlbW92ZSgpOwogICAgICBsZXQgZTUgPSBQLml0ZXIodGhpcy52aWV3LnN0YXRlLmZhY2V0KGllMyksIHRoaXMudmlldy52aWV3cG9ydC5mcm9tKSwgaTQgPSBbXSwgbjggPSB0aGlzLmd1dHRlcnMubWFwKChyMykgPT4gbmV3IHBpKHIzLCB0aGlzLnZpZXcudmlld3BvcnQsIC10aGlzLnZpZXcuZG9jdW1lbnRQYWRkaW5nLnRvcCkpOwogICAgICBmb3IgKGxldCByMyBvZiB0aGlzLnZpZXcudmlld3BvcnRMaW5lQmxvY2tzKSB7CiAgICAgICAgbGV0IG80OwogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHIzLnR5cGUpKSB7CiAgICAgICAgICBmb3IgKGxldCBsNyBvZiByMy50eXBlKQogICAgICAgICAgICBpZiAobDcudHlwZSA9PSBUMy5UZXh0KSB7CiAgICAgICAgICAgICAgbzQgPSBsNzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZQogICAgICAgICAgbzQgPSByMy50eXBlID09IFQzLlRleHQgPyByMyA6IHZvaWQgMDsKICAgICAgICBpZiAoISFvNCkgewogICAgICAgICAgaTQubGVuZ3RoICYmIChpNCA9IFtdKSwgaG4oZTUsIGk0LCByMy5mcm9tKTsKICAgICAgICAgIGZvciAobGV0IGw3IG9mIG44KQogICAgICAgICAgICBsNy5saW5lKHRoaXMudmlldywgbzQsIGk0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChsZXQgcjMgb2YgbjgpCiAgICAgICAgcjMuZmluaXNoKCk7CiAgICAgIHM4ICYmIHRoaXMudmlldy5zY3JvbGxET00uaW5zZXJ0QmVmb3JlKHRoaXMuZG9tLCB0NCk7CiAgICB9CiAgICB1cGRhdGVHdXR0ZXJzKHM4KSB7CiAgICAgIGxldCB0NCA9IHM4LnN0YXJ0U3RhdGUuZmFjZXQoSHQpLCBlNSA9IHM4LnN0YXRlLmZhY2V0KEh0KSwgaTQgPSBzOC5kb2NDaGFuZ2VkIHx8IHM4LmhlaWdodENoYW5nZWQgfHwgczgudmlld3BvcnRDaGFuZ2VkIHx8ICFQLmVxKHM4LnN0YXJ0U3RhdGUuZmFjZXQoaWUzKSwgczguc3RhdGUuZmFjZXQoaWUzKSwgczgudmlldy52aWV3cG9ydC5mcm9tLCBzOC52aWV3LnZpZXdwb3J0LnRvKTsKICAgICAgaWYgKHQ0ID09IGU1KQogICAgICAgIGZvciAobGV0IG44IG9mIHRoaXMuZ3V0dGVycykKICAgICAgICAgIG44LnVwZGF0ZShzOCkgJiYgKGk0ID0gdHJ1ZSk7CiAgICAgIGVsc2UgewogICAgICAgIGk0ID0gdHJ1ZTsKICAgICAgICBsZXQgbjggPSBbXTsKICAgICAgICBmb3IgKGxldCByMyBvZiBlNSkgewogICAgICAgICAgbGV0IG80ID0gdDQuaW5kZXhPZihyMyk7CiAgICAgICAgICBvNCA8IDAgPyBuOC5wdXNoKG5ldyB3ZTQodGhpcy52aWV3LCByMykpIDogKHRoaXMuZ3V0dGVyc1tvNF0udXBkYXRlKHM4KSwgbjgucHVzaCh0aGlzLmd1dHRlcnNbbzRdKSk7CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IHIzIG9mIHRoaXMuZ3V0dGVycykKICAgICAgICAgIHIzLmRvbS5yZW1vdmUoKSwgbjguaW5kZXhPZihyMykgPCAwICYmIHIzLmRlc3Ryb3koKTsKICAgICAgICBmb3IgKGxldCByMyBvZiBuOCkKICAgICAgICAgIHRoaXMuZG9tLmFwcGVuZENoaWxkKHIzLmRvbSk7CiAgICAgICAgdGhpcy5ndXR0ZXJzID0gbjg7CiAgICAgIH0KICAgICAgcmV0dXJuIGk0OwogICAgfQogICAgZGVzdHJveSgpIHsKICAgICAgZm9yIChsZXQgczggb2YgdGhpcy5ndXR0ZXJzKQogICAgICAgIHM4LmRlc3Ryb3koKTsKICAgICAgdGhpcy5kb20ucmVtb3ZlKCk7CiAgICB9CiAgfSwgeyBwcm92aWRlOiAoczgpID0+IE0yLnNjcm9sbE1hcmdpbnMub2YoKHQ0KSA9PiB7CiAgICBsZXQgZTUgPSB0NC5wbHVnaW4oczgpOwogICAgcmV0dXJuICFlNSB8fCBlNS5ndXR0ZXJzLmxlbmd0aCA9PSAwIHx8ICFlNS5maXhlZCA/IG51bGwgOiB0NC50ZXh0RGlyZWN0aW9uID09IFIyLkxUUiA/IHsgbGVmdDogZTUuZG9tLm9mZnNldFdpZHRoIH0gOiB7IHJpZ2h0OiBlNS5kb20ub2Zmc2V0V2lkdGggfTsKICB9KSB9KTsKICBmdW5jdGlvbiBycyhzOCkgewogICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoczgpID8gczggOiBbczhdOwogIH0KICBmdW5jdGlvbiBobihzOCwgdDQsIGU1KSB7CiAgICBmb3IgKDsgczgudmFsdWUgJiYgczguZnJvbSA8PSBlNTsgKQogICAgICBzOC5mcm9tID09IGU1ICYmIHQ0LnB1c2goczgudmFsdWUpLCBzOC5uZXh0KCk7CiAgfQogIHZhciBwaSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgaTQpIHsKICAgICAgdGhpcy5ndXR0ZXIgPSB0NCwgdGhpcy5oZWlnaHQgPSBpNCwgdGhpcy5sb2NhbE1hcmtlcnMgPSBbXSwgdGhpcy5pID0gMCwgdGhpcy5jdXJzb3IgPSBQLml0ZXIodDQubWFya2VycywgZTUuZnJvbSk7CiAgICB9CiAgICBsaW5lKHQ0LCBlNSwgaTQpIHsKICAgICAgdGhpcy5sb2NhbE1hcmtlcnMubGVuZ3RoICYmICh0aGlzLmxvY2FsTWFya2VycyA9IFtdKSwgaG4odGhpcy5jdXJzb3IsIHRoaXMubG9jYWxNYXJrZXJzLCBlNS5mcm9tKTsKICAgICAgbGV0IG44ID0gaTQubGVuZ3RoID8gdGhpcy5sb2NhbE1hcmtlcnMuY29uY2F0KGk0KSA6IHRoaXMubG9jYWxNYXJrZXJzLCByMyA9IHRoaXMuZ3V0dGVyLmNvbmZpZy5saW5lTWFya2VyKHQ0LCBlNSwgbjgpOwogICAgICByMyAmJiBuOC51bnNoaWZ0KHIzKTsKICAgICAgbGV0IG80ID0gdGhpcy5ndXR0ZXI7CiAgICAgIGlmIChuOC5sZW5ndGggPT0gMCAmJiAhbzQuY29uZmlnLnJlbmRlckVtcHR5RWxlbWVudHMpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgbDcgPSBlNS50b3AgLSB0aGlzLmhlaWdodDsKICAgICAgaWYgKHRoaXMuaSA9PSBvNC5lbGVtZW50cy5sZW5ndGgpIHsKICAgICAgICBsZXQgaDEwID0gbmV3IHZlNCh0NCwgZTUuaGVpZ2h0LCBsNywgbjgpOwogICAgICAgIG80LmVsZW1lbnRzLnB1c2goaDEwKSwgbzQuZG9tLmFwcGVuZENoaWxkKGgxMC5kb20pOwogICAgICB9IGVsc2UKICAgICAgICBvNC5lbGVtZW50c1t0aGlzLmldLnVwZGF0ZSh0NCwgZTUuaGVpZ2h0LCBsNywgbjgpOwogICAgICB0aGlzLmhlaWdodCA9IGU1LmJvdHRvbSwgdGhpcy5pKys7CiAgICB9CiAgICBmaW5pc2goKSB7CiAgICAgIGxldCB0NCA9IHRoaXMuZ3V0dGVyOwogICAgICBmb3IgKDsgdDQuZWxlbWVudHMubGVuZ3RoID4gdGhpcy5pOyApIHsKICAgICAgICBsZXQgZTUgPSB0NC5lbGVtZW50cy5wb3AoKTsKICAgICAgICB0NC5kb20ucmVtb3ZlQ2hpbGQoZTUuZG9tKSwgZTUuZGVzdHJveSgpOwogICAgICB9CiAgICB9CiAgfTsKICB2YXIgd2U0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1KSB7CiAgICAgIHRoaXMudmlldyA9IHQ0LCB0aGlzLmNvbmZpZyA9IGU1LCB0aGlzLmVsZW1lbnRzID0gW10sIHRoaXMuc3BhY2VyID0gbnVsbCwgdGhpcy5kb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgdGhpcy5kb20uY2xhc3NOYW1lID0gImNtLWd1dHRlciIgKyAodGhpcy5jb25maWcuY2xhc3MgPyAiICIgKyB0aGlzLmNvbmZpZy5jbGFzcyA6ICIiKTsKICAgICAgZm9yIChsZXQgaTQgaW4gZTUuZG9tRXZlbnRIYW5kbGVycykKICAgICAgICB0aGlzLmRvbS5hZGRFdmVudExpc3RlbmVyKGk0LCAobjgpID0+IHsKICAgICAgICAgIGxldCByMyA9IHQ0LmxpbmVCbG9ja0F0SGVpZ2h0KG44LmNsaWVudFkgLSB0NC5kb2N1bWVudFRvcCk7CiAgICAgICAgICBlNS5kb21FdmVudEhhbmRsZXJzW2k0XSh0NCwgcjMsIG44KSAmJiBuOC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0pOwogICAgICB0aGlzLm1hcmtlcnMgPSBycyhlNS5tYXJrZXJzKHQ0KSksIGU1LmluaXRpYWxTcGFjZXIgJiYgKHRoaXMuc3BhY2VyID0gbmV3IHZlNCh0NCwgMCwgMCwgW2U1LmluaXRpYWxTcGFjZXIodDQpXSksIHRoaXMuZG9tLmFwcGVuZENoaWxkKHRoaXMuc3BhY2VyLmRvbSksIHRoaXMuc3BhY2VyLmRvbS5zdHlsZS5jc3NUZXh0ICs9ICJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvaW50ZXItZXZlbnRzOiBub25lIik7CiAgICB9CiAgICB1cGRhdGUodDQpIHsKICAgICAgbGV0IGU1ID0gdGhpcy5tYXJrZXJzOwogICAgICBpZiAodGhpcy5tYXJrZXJzID0gcnModGhpcy5jb25maWcubWFya2Vycyh0NC52aWV3KSksIHRoaXMuc3BhY2VyICYmIHRoaXMuY29uZmlnLnVwZGF0ZVNwYWNlcikgewogICAgICAgIGxldCBuOCA9IHRoaXMuY29uZmlnLnVwZGF0ZVNwYWNlcih0aGlzLnNwYWNlci5tYXJrZXJzWzBdLCB0NCk7CiAgICAgICAgbjggIT0gdGhpcy5zcGFjZXIubWFya2Vyc1swXSAmJiB0aGlzLnNwYWNlci51cGRhdGUodDQudmlldywgMCwgMCwgW244XSk7CiAgICAgIH0KICAgICAgbGV0IGk0ID0gdDQudmlldy52aWV3cG9ydDsKICAgICAgcmV0dXJuICFQLmVxKHRoaXMubWFya2VycywgZTUsIGk0LmZyb20sIGk0LnRvKSB8fCAodGhpcy5jb25maWcubGluZU1hcmtlckNoYW5nZSA/IHRoaXMuY29uZmlnLmxpbmVNYXJrZXJDaGFuZ2UodDQpIDogZmFsc2UpOwogICAgfQogICAgZGVzdHJveSgpIHsKICAgICAgZm9yIChsZXQgdDQgb2YgdGhpcy5lbGVtZW50cykKICAgICAgICB0NC5kZXN0cm95KCk7CiAgICB9CiAgfTsKICB2YXIgdmU0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1LCBpNCwgbjgpIHsKICAgICAgdGhpcy5oZWlnaHQgPSAtMSwgdGhpcy5hYm92ZSA9IDAsIHRoaXMubWFya2VycyA9IFtdLCB0aGlzLmRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCB0aGlzLmRvbS5jbGFzc05hbWUgPSAiY20tZ3V0dGVyRWxlbWVudCIsIHRoaXMudXBkYXRlKHQ0LCBlNSwgaTQsIG44KTsKICAgIH0KICAgIHVwZGF0ZSh0NCwgZTUsIGk0LCBuOCkgewogICAgICB0aGlzLmhlaWdodCAhPSBlNSAmJiAodGhpcy5kb20uc3R5bGUuaGVpZ2h0ID0gKHRoaXMuaGVpZ2h0ID0gZTUpICsgInB4IiksIHRoaXMuYWJvdmUgIT0gaTQgJiYgKHRoaXMuZG9tLnN0eWxlLm1hcmdpblRvcCA9ICh0aGlzLmFib3ZlID0gaTQpID8gaTQgKyAicHgiIDogIiIpLCBHcih0aGlzLm1hcmtlcnMsIG44KSB8fCB0aGlzLnNldE1hcmtlcnModDQsIG44KTsKICAgIH0KICAgIHNldE1hcmtlcnModDQsIGU1KSB7CiAgICAgIGxldCBpNCA9ICJjbS1ndXR0ZXJFbGVtZW50IiwgbjggPSB0aGlzLmRvbS5maXJzdENoaWxkOwogICAgICBmb3IgKGxldCByMyA9IDAsIG80ID0gMDsgOyApIHsKICAgICAgICBsZXQgbDcgPSBvNCwgaDEwID0gcjMgPCBlNS5sZW5ndGggPyBlNVtyMysrXSA6IG51bGwsIGE0ID0gZmFsc2U7CiAgICAgICAgaWYgKGgxMCkgewogICAgICAgICAgbGV0IGMxNyA9IGgxMC5lbGVtZW50Q2xhc3M7CiAgICAgICAgICBjMTcgJiYgKGk0ICs9ICIgIiArIGMxNyk7CiAgICAgICAgICBmb3IgKGxldCBmMTEgPSBvNDsgZjExIDwgdGhpcy5tYXJrZXJzLmxlbmd0aDsgZjExKyspCiAgICAgICAgICAgIGlmICh0aGlzLm1hcmtlcnNbZjExXS5jb21wYXJlKGgxMCkpIHsKICAgICAgICAgICAgICBsNyA9IGYxMSwgYTQgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBsNyA9IHRoaXMubWFya2Vycy5sZW5ndGg7CiAgICAgICAgZm9yICg7IG80IDwgbDc7ICkgewogICAgICAgICAgbGV0IGMxNyA9IHRoaXMubWFya2Vyc1tvNCsrXTsKICAgICAgICAgIGlmIChjMTcudG9ET00pIHsKICAgICAgICAgICAgYzE3LmRlc3Ryb3kobjgpOwogICAgICAgICAgICBsZXQgZjExID0gbjgubmV4dFNpYmxpbmc7CiAgICAgICAgICAgIG44LnJlbW92ZSgpLCBuOCA9IGYxMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFoMTApCiAgICAgICAgICBicmVhazsKICAgICAgICBoMTAudG9ET00gJiYgKGE0ID8gbjggPSBuOC5uZXh0U2libGluZyA6IHRoaXMuZG9tLmluc2VydEJlZm9yZShoMTAudG9ET00odDQpLCBuOCkpLCBhNCAmJiBvNCsrOwogICAgICB9CiAgICAgIHRoaXMuZG9tLmNsYXNzTmFtZSA9IGk0LCB0aGlzLm1hcmtlcnMgPSBlNTsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuc2V0TWFya2VycyhudWxsLCBbXSk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBHcihzOCwgdDQpIHsKICAgIGlmIChzOC5sZW5ndGggIT0gdDQubGVuZ3RoKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGxldCBlNSA9IDA7IGU1IDwgczgubGVuZ3RoOyBlNSsrKQogICAgICBpZiAoIXM4W2U1XS5jb21wYXJlKHQ0W2U1XSkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQogIHZhciBZciA9IEEyLmRlZmluZSgpOwogIHZhciBtdCA9IEEyLmRlZmluZSh7IGNvbWJpbmUoczgpIHsKICAgIHJldHVybiBodChzOCwgeyBmb3JtYXROdW1iZXI6IFN0cmluZywgZG9tRXZlbnRIYW5kbGVyczoge30gfSwgeyBkb21FdmVudEhhbmRsZXJzKHQ0LCBlNSkgewogICAgICBsZXQgaTQgPSBPYmplY3QuYXNzaWduKHt9LCB0NCk7CiAgICAgIGZvciAobGV0IG44IGluIGU1KSB7CiAgICAgICAgbGV0IHIzID0gaTRbbjhdLCBvNCA9IGU1W244XTsKICAgICAgICBpNFtuOF0gPSByMyA/IChsNywgaDEwLCBhNCkgPT4gcjMobDcsIGgxMCwgYTQpIHx8IG80KGw3LCBoMTAsIGE0KSA6IG80OwogICAgICB9CiAgICAgIHJldHVybiBpNDsKICAgIH0gfSk7CiAgfSB9KTsKICB2YXIgTnQgPSBjbGFzcyBleHRlbmRzIEc0IHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHN1cGVyKCksIHRoaXMubnVtYmVyID0gdDQ7CiAgICB9CiAgICBlcSh0NCkgewogICAgICByZXR1cm4gdGhpcy5udW1iZXIgPT0gdDQubnVtYmVyOwogICAgfQogICAgdG9ET00oKSB7CiAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLm51bWJlcik7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBSZTMoczgsIHQ0KSB7CiAgICByZXR1cm4gczguc3RhdGUuZmFjZXQobXQpLmZvcm1hdE51bWJlcih0NCwgczguc3RhdGUpOwogIH0KICB2YXIgWHIgPSBIdC5jb21wdXRlKFttdF0sIChzOCkgPT4gKHsgY2xhc3M6ICJjbS1saW5lTnVtYmVycyIsIHJlbmRlckVtcHR5RWxlbWVudHM6IGZhbHNlLCBtYXJrZXJzKHQ0KSB7CiAgICByZXR1cm4gdDQuc3RhdGUuZmFjZXQoWXIpOwogIH0sIGxpbmVNYXJrZXIodDQsIGU1LCBpNCkgewogICAgcmV0dXJuIGk0LnNvbWUoKG44KSA9PiBuOC50b0RPTSkgPyBudWxsIDogbmV3IE50KFJlMyh0NCwgdDQuc3RhdGUuZG9jLmxpbmVBdChlNS5mcm9tKS5udW1iZXIpKTsKICB9LCBsaW5lTWFya2VyQ2hhbmdlOiAodDQpID0+IHQ0LnN0YXJ0U3RhdGUuZmFjZXQobXQpICE9IHQ0LnN0YXRlLmZhY2V0KG10KSwgaW5pdGlhbFNwYWNlcih0NCkgewogICAgcmV0dXJuIG5ldyBOdChSZTModDQsIG9zKHQ0LnN0YXRlLmRvYy5saW5lcykpKTsKICB9LCB1cGRhdGVTcGFjZXIodDQsIGU1KSB7CiAgICBsZXQgaTQgPSBSZTMoZTUudmlldywgb3MoZTUudmlldy5zdGF0ZS5kb2MubGluZXMpKTsKICAgIHJldHVybiBpNCA9PSB0NC5udW1iZXIgPyB0NCA6IG5ldyBOdChpNCk7CiAgfSwgZG9tRXZlbnRIYW5kbGVyczogczguZmFjZXQobXQpLmRvbUV2ZW50SGFuZGxlcnMgfSkpOwogIGZ1bmN0aW9uIG9zKHM4KSB7CiAgICBsZXQgdDQgPSA5OwogICAgZm9yICg7IHQ0IDwgczg7ICkKICAgICAgdDQgPSB0NCAqIDEwICsgOTsKICAgIHJldHVybiB0NDsKICB9CiAgdmFyIFVyID0gbmV3IGNsYXNzIGV4dGVuZHMgRzQgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMuZWxlbWVudENsYXNzID0gImNtLWFjdGl2ZUxpbmVHdXR0ZXIiOwogICAgfQogIH0oKTsKICB2YXIgSnIgPSBpZTMuY29tcHV0ZShbInNlbGVjdGlvbiJdLCAoczgpID0+IHsKICAgIGxldCB0NCA9IFtdLCBlNSA9IC0xOwogICAgZm9yIChsZXQgaTQgb2Ygczguc2VsZWN0aW9uLnJhbmdlcykgewogICAgICBsZXQgbjggPSBzOC5kb2MubGluZUF0KGk0LmhlYWQpLmZyb207CiAgICAgIG44ID4gZTUgJiYgKGU1ID0gbjgsIHQ0LnB1c2goVXIucmFuZ2UobjgpKSk7CiAgICB9CiAgICByZXR1cm4gUC5vZih0NCk7CiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9jb21tb25AMS4wLjEvZGVuby9jb21tb24uanMKICB2YXIgSWU1ID0gMTAyNDsKICB2YXIgQ2U1ID0gMDsKICB2YXIgQjQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQpIHsKICAgICAgdGhpcy5mcm9tID0gZTUsIHRoaXMudG8gPSB0NDsKICAgIH0KICB9OwogIHZhciB3MyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1ID0ge30pIHsKICAgICAgdGhpcy5pZCA9IENlNSsrLCB0aGlzLnBlck5vZGUgPSAhIWU1LnBlck5vZGUsIHRoaXMuZGVzZXJpYWxpemUgPSBlNS5kZXNlcmlhbGl6ZSB8fCAoKCkgPT4gewogICAgICAgIHRocm93IG5ldyBFcnJvcigiVGhpcyBub2RlIHR5cGUgZG9lc24ndCBkZWZpbmUgYSBkZXNlcmlhbGl6ZSBmdW5jdGlvbiIpOwogICAgICB9KTsKICAgIH0KICAgIGFkZChlNSkgewogICAgICBpZiAodGhpcy5wZXJOb2RlKQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJDYW4ndCBhZGQgcGVyLW5vZGUgcHJvcHMgdG8gbm9kZSB0eXBlcyIpOwogICAgICByZXR1cm4gdHlwZW9mIGU1ICE9ICJmdW5jdGlvbiIgJiYgKGU1ID0gTjMubWF0Y2goZTUpKSwgKHQ0KSA9PiB7CiAgICAgICAgbGV0IHIzID0gZTUodDQpOwogICAgICAgIHJldHVybiByMyA9PT0gdm9pZCAwID8gbnVsbCA6IFt0aGlzLCByM107CiAgICAgIH07CiAgICB9CiAgfTsKICB3My5jbG9zZWRCeSA9IG5ldyB3Myh7IGRlc2VyaWFsaXplOiAoaDEwKSA9PiBoMTAuc3BsaXQoIiAiKSB9KTsKICB3My5vcGVuZWRCeSA9IG5ldyB3Myh7IGRlc2VyaWFsaXplOiAoaDEwKSA9PiBoMTAuc3BsaXQoIiAiKSB9KTsKICB3My5ncm91cCA9IG5ldyB3Myh7IGRlc2VyaWFsaXplOiAoaDEwKSA9PiBoMTAuc3BsaXQoIiAiKSB9KTsKICB3My5jb250ZXh0SGFzaCA9IG5ldyB3Myh7IHBlck5vZGU6IHRydWUgfSk7CiAgdzMubG9va0FoZWFkID0gbmV3IHczKHsgcGVyTm9kZTogdHJ1ZSB9KTsKICB3My5tb3VudGVkID0gbmV3IHczKHsgcGVyTm9kZTogdHJ1ZSB9KTsKICB2YXIgbmU0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCByMykgewogICAgICB0aGlzLnRyZWUgPSBlNSwgdGhpcy5vdmVybGF5ID0gdDQsIHRoaXMucGFyc2VyID0gcjM7CiAgICB9CiAgfTsKICB2YXIgX2U1ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgdmFyIE4zID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCByMywgaTQgPSAwKSB7CiAgICAgIHRoaXMubmFtZSA9IGU1LCB0aGlzLnByb3BzID0gdDQsIHRoaXMuaWQgPSByMywgdGhpcy5mbGFncyA9IGk0OwogICAgfQogICAgc3RhdGljIGRlZmluZShlNSkgewogICAgICBsZXQgdDQgPSBlNS5wcm9wcyAmJiBlNS5wcm9wcy5sZW5ndGggPyAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IF9lNSwgcjMgPSAoZTUudG9wID8gMSA6IDApIHwgKGU1LnNraXBwZWQgPyAyIDogMCkgfCAoZTUuZXJyb3IgPyA0IDogMCkgfCAoZTUubmFtZSA9PSBudWxsID8gOCA6IDApLCBpNCA9IG5ldyBOMyhlNS5uYW1lIHx8ICIiLCB0NCwgZTUuaWQsIHIzKTsKICAgICAgaWYgKGU1LnByb3BzKSB7CiAgICAgICAgZm9yIChsZXQgbjggb2YgZTUucHJvcHMpCiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuOCkgfHwgKG44ID0gbjgoaTQpKSwgbjgpIHsKICAgICAgICAgICAgaWYgKG44WzBdLnBlck5vZGUpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNhbid0IHN0b3JlIGEgcGVyLW5vZGUgcHJvcCBvbiBhIG5vZGUgdHlwZSIpOwogICAgICAgICAgICB0NFtuOFswXS5pZF0gPSBuOFsxXTsKICAgICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gaTQ7CiAgICB9CiAgICBwcm9wKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLnByb3BzW2U1LmlkXTsKICAgIH0KICAgIGdldCBpc1RvcCgpIHsKICAgICAgcmV0dXJuICh0aGlzLmZsYWdzICYgMSkgPiAwOwogICAgfQogICAgZ2V0IGlzU2tpcHBlZCgpIHsKICAgICAgcmV0dXJuICh0aGlzLmZsYWdzICYgMikgPiAwOwogICAgfQogICAgZ2V0IGlzRXJyb3IoKSB7CiAgICAgIHJldHVybiAodGhpcy5mbGFncyAmIDQpID4gMDsKICAgIH0KICAgIGdldCBpc0Fub255bW91cygpIHsKICAgICAgcmV0dXJuICh0aGlzLmZsYWdzICYgOCkgPiAwOwogICAgfQogICAgaXMoZTUpIHsKICAgICAgaWYgKHR5cGVvZiBlNSA9PSAic3RyaW5nIikgewogICAgICAgIGlmICh0aGlzLm5hbWUgPT0gZTUpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBsZXQgdDQgPSB0aGlzLnByb3AodzMuZ3JvdXApOwogICAgICAgIHJldHVybiB0NCA/IHQ0LmluZGV4T2YoZTUpID4gLTEgOiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5pZCA9PSBlNTsKICAgIH0KICAgIHN0YXRpYyBtYXRjaChlNSkgewogICAgICBsZXQgdDQgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgZm9yIChsZXQgcjMgaW4gZTUpCiAgICAgICAgZm9yIChsZXQgaTQgb2YgcjMuc3BsaXQoIiAiKSkKICAgICAgICAgIHQ0W2k0XSA9IGU1W3IzXTsKICAgICAgcmV0dXJuIChyMykgPT4gewogICAgICAgIGZvciAobGV0IGk0ID0gcjMucHJvcCh3My5ncm91cCksIG44ID0gLTE7IG44IDwgKGk0ID8gaTQubGVuZ3RoIDogMCk7IG44KyspIHsKICAgICAgICAgIGxldCBzOCA9IHQ0W244IDwgMCA/IHIzLm5hbWUgOiBpNFtuOF1dOwogICAgICAgICAgaWYgKHM4KQogICAgICAgICAgICByZXR1cm4gczg7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH07CiAgTjMubm9uZSA9IG5ldyBOMygiIiwgLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksIDAsIDgpOwogIHZhciBaMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1KSB7CiAgICAgIHRoaXMudHlwZXMgPSBlNTsKICAgICAgZm9yIChsZXQgdDQgPSAwOyB0NCA8IGU1Lmxlbmd0aDsgdDQrKykKICAgICAgICBpZiAoZTVbdDRdLmlkICE9IHQ0KQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vZGUgdHlwZSBpZHMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYXJyYXkgcG9zaXRpb25zIHdoZW4gY3JlYXRpbmcgYSBub2RlIHNldCIpOwogICAgfQogICAgZXh0ZW5kKC4uLmU1KSB7CiAgICAgIGxldCB0NCA9IFtdOwogICAgICBmb3IgKGxldCByMyBvZiB0aGlzLnR5cGVzKSB7CiAgICAgICAgbGV0IGk0ID0gbnVsbDsKICAgICAgICBmb3IgKGxldCBuOCBvZiBlNSkgewogICAgICAgICAgbGV0IHM4ID0gbjgocjMpOwogICAgICAgICAgczggJiYgKGk0IHx8IChpNCA9IE9iamVjdC5hc3NpZ24oe30sIHIzLnByb3BzKSksIGk0W3M4WzBdLmlkXSA9IHM4WzFdKTsKICAgICAgICB9CiAgICAgICAgdDQucHVzaChpNCA/IG5ldyBOMyhyMy5uYW1lLCBpNCwgcjMuaWQsIHIzLmZsYWdzKSA6IHIzKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFozKHQ0KTsKICAgIH0KICB9OwogIHZhciBYNSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogIHZhciBnZTUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICB2YXIgQTQ7CiAgKGZ1bmN0aW9uKGgxMCkgewogICAgaDEwW2gxMC5FeGNsdWRlQnVmZmVycyA9IDFdID0gIkV4Y2x1ZGVCdWZmZXJzIiwgaDEwW2gxMC5JbmNsdWRlQW5vbnltb3VzID0gMl0gPSAiSW5jbHVkZUFub255bW91cyIsIGgxMFtoMTAuSWdub3JlTW91bnRzID0gNF0gPSAiSWdub3JlTW91bnRzIiwgaDEwW2gxMC5JZ25vcmVPdmVybGF5cyA9IDhdID0gIklnbm9yZU92ZXJsYXlzIjsKICB9KShBNCB8fCAoQTQgPSB7fSkpOwogIHZhciBQMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgcjMsIGk0LCBuOCkgewogICAgICBpZiAodGhpcy50eXBlID0gZTUsIHRoaXMuY2hpbGRyZW4gPSB0NCwgdGhpcy5wb3NpdGlvbnMgPSByMywgdGhpcy5sZW5ndGggPSBpNCwgdGhpcy5wcm9wcyA9IG51bGwsIG44ICYmIG44Lmxlbmd0aCkgewogICAgICAgIHRoaXMucHJvcHMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgICBmb3IgKGxldCBbczgsIGw3XSBvZiBuOCkKICAgICAgICAgIHRoaXMucHJvcHNbdHlwZW9mIHM4ID09ICJudW1iZXIiID8gczggOiBzOC5pZF0gPSBsNzsKICAgICAgfQogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIGxldCBlNSA9IHRoaXMucHJvcCh3My5tb3VudGVkKTsKICAgICAgaWYgKGU1ICYmICFlNS5vdmVybGF5KQogICAgICAgIHJldHVybiBlNS50cmVlLnRvU3RyaW5nKCk7CiAgICAgIGxldCB0NCA9ICIiOwogICAgICBmb3IgKGxldCByMyBvZiB0aGlzLmNoaWxkcmVuKSB7CiAgICAgICAgbGV0IGk0ID0gcjMudG9TdHJpbmcoKTsKICAgICAgICBpNCAmJiAodDQgJiYgKHQ0ICs9ICIsIiksIHQ0ICs9IGk0KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy50eXBlLm5hbWUgPyAoL1xXLy50ZXN0KHRoaXMudHlwZS5uYW1lKSAmJiAhdGhpcy50eXBlLmlzRXJyb3IgPyBKU09OLnN0cmluZ2lmeSh0aGlzLnR5cGUubmFtZSkgOiB0aGlzLnR5cGUubmFtZSkgKyAodDQubGVuZ3RoID8gIigiICsgdDQgKyAiKSIgOiAiIikgOiB0NDsKICAgIH0KICAgIGN1cnNvcihlNSA9IDApIHsKICAgICAgcmV0dXJuIG5ldyBWNSh0aGlzLnRvcE5vZGUsIGU1KTsKICAgIH0KICAgIGN1cnNvckF0KGU1LCB0NCA9IDAsIHIzID0gMCkgewogICAgICBsZXQgaTQgPSBYNS5nZXQodGhpcykgfHwgdGhpcy50b3BOb2RlLCBuOCA9IG5ldyBWNShpNCk7CiAgICAgIHJldHVybiBuOC5tb3ZlVG8oZTUsIHQ0KSwgWDUuc2V0KHRoaXMsIG44Ll90cmVlKSwgbjg7CiAgICB9CiAgICBnZXQgdG9wTm9kZSgpIHsKICAgICAgcmV0dXJuIG5ldyBJMyh0aGlzLCAwLCAwLCBudWxsKTsKICAgIH0KICAgIHJlc29sdmUoZTUsIHQ0ID0gMCkgewogICAgICBsZXQgcjMgPSBxMyhYNS5nZXQodGhpcykgfHwgdGhpcy50b3BOb2RlLCBlNSwgdDQsIGZhbHNlKTsKICAgICAgcmV0dXJuIFg1LnNldCh0aGlzLCByMyksIHIzOwogICAgfQogICAgcmVzb2x2ZUlubmVyKGU1LCB0NCA9IDApIHsKICAgICAgbGV0IHIzID0gcTMoZ2U1LmdldCh0aGlzKSB8fCB0aGlzLnRvcE5vZGUsIGU1LCB0NCwgdHJ1ZSk7CiAgICAgIHJldHVybiBnZTUuc2V0KHRoaXMsIHIzKSwgcjM7CiAgICB9CiAgICBpdGVyYXRlKGU1KSB7CiAgICAgIGxldCB7IGVudGVyOiB0NCwgbGVhdmU6IHIzLCBmcm9tOiBpNCA9IDAsIHRvOiBuOCA9IHRoaXMubGVuZ3RoIH0gPSBlNTsKICAgICAgZm9yIChsZXQgczggPSB0aGlzLmN1cnNvcigoZTUubW9kZSB8fCAwKSB8IEE0LkluY2x1ZGVBbm9ueW1vdXMpOyA7ICkgewogICAgICAgIGxldCBsNyA9IGZhbHNlOwogICAgICAgIGlmIChzOC5mcm9tIDw9IG44ICYmIHM4LnRvID49IGk0ICYmIChzOC50eXBlLmlzQW5vbnltb3VzIHx8IHQ0KHM4KSAhPT0gZmFsc2UpKSB7CiAgICAgICAgICBpZiAoczguZmlyc3RDaGlsZCgpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIGw3ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZm9yICg7IGw3ICYmIHIzICYmICFzOC50eXBlLmlzQW5vbnltb3VzICYmIHIzKHM4KSwgIXM4Lm5leHRTaWJsaW5nKCk7ICkgewogICAgICAgICAgaWYgKCFzOC5wYXJlbnQoKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgbDcgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcHJvcChlNSkgewogICAgICByZXR1cm4gZTUucGVyTm9kZSA/IHRoaXMucHJvcHMgPyB0aGlzLnByb3BzW2U1LmlkXSA6IHZvaWQgMCA6IHRoaXMudHlwZS5wcm9wKGU1KTsKICAgIH0KICAgIGdldCBwcm9wVmFsdWVzKCkgewogICAgICBsZXQgZTUgPSBbXTsKICAgICAgaWYgKHRoaXMucHJvcHMpCiAgICAgICAgZm9yIChsZXQgdDQgaW4gdGhpcy5wcm9wcykKICAgICAgICAgIGU1LnB1c2goWyt0NCwgdGhpcy5wcm9wc1t0NF1dKTsKICAgICAgcmV0dXJuIGU1OwogICAgfQogICAgYmFsYW5jZShlNSA9IHt9KSB7CiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA8PSA4ID8gdGhpcyA6IHBlNShOMy5ub25lLCB0aGlzLmNoaWxkcmVuLCB0aGlzLnBvc2l0aW9ucywgMCwgdGhpcy5jaGlsZHJlbi5sZW5ndGgsIDAsIHRoaXMubGVuZ3RoLCAodDQsIHIzLCBpNCkgPT4gbmV3IFAzKHRoaXMudHlwZSwgdDQsIHIzLCBpNCwgdGhpcy5wcm9wVmFsdWVzKSwgZTUubWFrZVRyZWUgfHwgKCh0NCwgcjMsIGk0KSA9PiBuZXcgUDMoTjMubm9uZSwgdDQsIHIzLCBpNCkpKTsKICAgIH0KICAgIHN0YXRpYyBidWlsZChlNSkgewogICAgICByZXR1cm4gU2U0KGU1KTsKICAgIH0KICB9OwogIFAzLmVtcHR5ID0gbmV3IFAzKE4zLm5vbmUsIFtdLCBbXSwgMCk7CiAgdmFyIEs0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0KSB7CiAgICAgIHRoaXMuYnVmZmVyID0gZTUsIHRoaXMuaW5kZXggPSB0NDsKICAgIH0KICAgIGdldCBpZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXggLSA0XTsKICAgIH0KICAgIGdldCBzdGFydCgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXggLSAzXTsKICAgIH0KICAgIGdldCBlbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlclt0aGlzLmluZGV4IC0gMl07CiAgICB9CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXggLSAxXTsKICAgIH0KICAgIGdldCBwb3MoKSB7CiAgICAgIHJldHVybiB0aGlzLmluZGV4OwogICAgfQogICAgbmV4dCgpIHsKICAgICAgdGhpcy5pbmRleCAtPSA0OwogICAgfQogICAgZm9yaygpIHsKICAgICAgcmV0dXJuIG5ldyBLNCh0aGlzLmJ1ZmZlciwgdGhpcy5pbmRleCk7CiAgICB9CiAgfTsKICB2YXIgVDQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIHIzKSB7CiAgICAgIHRoaXMuYnVmZmVyID0gZTUsIHRoaXMubGVuZ3RoID0gdDQsIHRoaXMuc2V0ID0gcjM7CiAgICB9CiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIE4zLm5vbmU7CiAgICB9CiAgICB0b1N0cmluZygpIHsKICAgICAgbGV0IGU1ID0gW107CiAgICAgIGZvciAobGV0IHQ0ID0gMDsgdDQgPCB0aGlzLmJ1ZmZlci5sZW5ndGg7ICkKICAgICAgICBlNS5wdXNoKHRoaXMuY2hpbGRTdHJpbmcodDQpKSwgdDQgPSB0aGlzLmJ1ZmZlclt0NCArIDNdOwogICAgICByZXR1cm4gZTUuam9pbigiLCIpOwogICAgfQogICAgY2hpbGRTdHJpbmcoZTUpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5idWZmZXJbZTVdLCByMyA9IHRoaXMuYnVmZmVyW2U1ICsgM10sIGk0ID0gdGhpcy5zZXQudHlwZXNbdDRdLCBuOCA9IGk0Lm5hbWU7CiAgICAgIGlmICgvXFcvLnRlc3QobjgpICYmICFpNC5pc0Vycm9yICYmIChuOCA9IEpTT04uc3RyaW5naWZ5KG44KSksIGU1ICs9IDQsIHIzID09IGU1KQogICAgICAgIHJldHVybiBuODsKICAgICAgbGV0IHM4ID0gW107CiAgICAgIGZvciAoOyBlNSA8IHIzOyApCiAgICAgICAgczgucHVzaCh0aGlzLmNoaWxkU3RyaW5nKGU1KSksIGU1ID0gdGhpcy5idWZmZXJbZTUgKyAzXTsKICAgICAgcmV0dXJuIG44ICsgIigiICsgczguam9pbigiLCIpICsgIikiOwogICAgfQogICAgZmluZENoaWxkKGU1LCB0NCwgcjMsIGk0LCBuOCkgewogICAgICBsZXQgeyBidWZmZXI6IHM4IH0gPSB0aGlzLCBsNyA9IC0xOwogICAgICBmb3IgKGxldCBmMTEgPSBlNTsgZjExICE9IHQ0ICYmICEoa2U1KG44LCBpNCwgczhbZjExICsgMV0sIHM4W2YxMSArIDJdKSAmJiAobDcgPSBmMTEsIHIzID4gMCkpOyBmMTEgPSBzOFtmMTEgKyAzXSkKICAgICAgICA7CiAgICAgIHJldHVybiBsNzsKICAgIH0KICAgIHNsaWNlKGU1LCB0NCwgcjMsIGk0KSB7CiAgICAgIGxldCBuOCA9IHRoaXMuYnVmZmVyLCBzOCA9IG5ldyBVaW50MTZBcnJheSh0NCAtIGU1KTsKICAgICAgZm9yIChsZXQgbDcgPSBlNSwgZjExID0gMDsgbDcgPCB0NDsgKQogICAgICAgIHM4W2YxMSsrXSA9IG44W2w3KytdLCBzOFtmMTErK10gPSBuOFtsNysrXSAtIHIzLCBzOFtmMTErK10gPSBuOFtsNysrXSAtIHIzLCBzOFtmMTErK10gPSBuOFtsNysrXSAtIGU1OwogICAgICByZXR1cm4gbmV3IFQ0KHM4LCBpNCAtIHIzLCB0aGlzLnNldCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBrZTUoaDEwLCBlNSwgdDQsIHIzKSB7CiAgICBzd2l0Y2ggKGgxMCkgewogICAgICBjYXNlIC0yOgogICAgICAgIHJldHVybiB0NCA8IGU1OwogICAgICBjYXNlIC0xOgogICAgICAgIHJldHVybiByMyA+PSBlNSAmJiB0NCA8IGU1OwogICAgICBjYXNlIDA6CiAgICAgICAgcmV0dXJuIHQ0IDwgZTUgJiYgcjMgPiBlNTsKICAgICAgY2FzZSAxOgogICAgICAgIHJldHVybiB0NCA8PSBlNSAmJiByMyA+IGU1OwogICAgICBjYXNlIDI6CiAgICAgICAgcmV0dXJuIHIzID4gZTU7CiAgICAgIGNhc2UgNDoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgZnVuY3Rpb24gQWU0KGgxMCwgZTUpIHsKICAgIGxldCB0NCA9IGgxMC5jaGlsZEJlZm9yZShlNSk7CiAgICBmb3IgKDsgdDQ7ICkgewogICAgICBsZXQgcjMgPSB0NC5sYXN0Q2hpbGQ7CiAgICAgIGlmICghcjMgfHwgcjMudG8gIT0gdDQudG8pCiAgICAgICAgYnJlYWs7CiAgICAgIHIzLnR5cGUuaXNFcnJvciAmJiByMy5mcm9tID09IHIzLnRvID8gKGgxMCA9IHQ0LCB0NCA9IHIzLnByZXZTaWJsaW5nKSA6IHQ0ID0gcjM7CiAgICB9CiAgICByZXR1cm4gaDEwOwogIH0KICBmdW5jdGlvbiBxMyhoMTAsIGU1LCB0NCwgcjMpIHsKICAgIGZvciAodmFyIGk0OyBoMTAuZnJvbSA9PSBoMTAudG8gfHwgKHQ0IDwgMSA/IGgxMC5mcm9tID49IGU1IDogaDEwLmZyb20gPiBlNSkgfHwgKHQ0ID4gLTEgPyBoMTAudG8gPD0gZTUgOiBoMTAudG8gPCBlNSk7ICkgewogICAgICBsZXQgczggPSAhcjMgJiYgaDEwIGluc3RhbmNlb2YgSTMgJiYgaDEwLmluZGV4IDwgMCA/IG51bGwgOiBoMTAucGFyZW50OwogICAgICBpZiAoIXM4KQogICAgICAgIHJldHVybiBoMTA7CiAgICAgIGgxMCA9IHM4OwogICAgfQogICAgbGV0IG44ID0gcjMgPyAwIDogQTQuSWdub3JlT3ZlcmxheXM7CiAgICBpZiAocjMpCiAgICAgIGZvciAobGV0IHM4ID0gaDEwLCBsNyA9IHM4LnBhcmVudDsgbDc7IHM4ID0gbDcsIGw3ID0gczgucGFyZW50KQogICAgICAgIHM4IGluc3RhbmNlb2YgSTMgJiYgczguaW5kZXggPCAwICYmICgoaTQgPSBsNy5lbnRlcihlNSwgdDQsIG44KSkgPT09IG51bGwgfHwgaTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGk0LmZyb20pICE9IHM4LmZyb20gJiYgKGgxMCA9IGw3KTsKICAgIGZvciAoOyA7ICkgewogICAgICBsZXQgczggPSBoMTAuZW50ZXIoZTUsIHQ0LCBuOCk7CiAgICAgIGlmICghczgpCiAgICAgICAgcmV0dXJuIGgxMDsKICAgICAgaDEwID0gczg7CiAgICB9CiAgfQogIHZhciBJMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgcjMsIGk0KSB7CiAgICAgIHRoaXMuX3RyZWUgPSBlNSwgdGhpcy5mcm9tID0gdDQsIHRoaXMuaW5kZXggPSByMywgdGhpcy5fcGFyZW50ID0gaTQ7CiAgICB9CiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuX3RyZWUudHlwZTsKICAgIH0KICAgIGdldCBuYW1lKCkgewogICAgICByZXR1cm4gdGhpcy5fdHJlZS50eXBlLm5hbWU7CiAgICB9CiAgICBnZXQgdG8oKSB7CiAgICAgIHJldHVybiB0aGlzLmZyb20gKyB0aGlzLl90cmVlLmxlbmd0aDsKICAgIH0KICAgIG5leHRDaGlsZChlNSwgdDQsIHIzLCBpNCwgbjggPSAwKSB7CiAgICAgIGZvciAobGV0IHM4ID0gdGhpczsgOyApIHsKICAgICAgICBmb3IgKGxldCB7IGNoaWxkcmVuOiBsNywgcG9zaXRpb25zOiBmMTEgfSA9IHM4Ll90cmVlLCB1MTEgPSB0NCA+IDAgPyBsNy5sZW5ndGggOiAtMTsgZTUgIT0gdTExOyBlNSArPSB0NCkgewogICAgICAgICAgbGV0IG80ID0gbDdbZTVdLCBjMTcgPSBmMTFbZTVdICsgczguZnJvbTsKICAgICAgICAgIGlmICghIWtlNShpNCwgcjMsIGMxNywgYzE3ICsgbzQubGVuZ3RoKSkgewogICAgICAgICAgICBpZiAobzQgaW5zdGFuY2VvZiBUNCkgewogICAgICAgICAgICAgIGlmIChuOCAmIEE0LkV4Y2x1ZGVCdWZmZXJzKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgbGV0IGE0ID0gbzQuZmluZENoaWxkKDAsIG80LmJ1ZmZlci5sZW5ndGgsIHQ0LCByMyAtIGMxNywgaTQpOwogICAgICAgICAgICAgIGlmIChhNCA+IC0xKQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNMyhuZXcgc2U0KHM4LCBvNCwgZTUsIGMxNyksIG51bGwsIGE0KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChuOCAmIEE0LkluY2x1ZGVBbm9ueW1vdXMgfHwgIW80LnR5cGUuaXNBbm9ueW1vdXMgfHwgYWU0KG80KSkgewogICAgICAgICAgICAgIGxldCBhNDsKICAgICAgICAgICAgICBpZiAoIShuOCAmIEE0Lklnbm9yZU1vdW50cykgJiYgbzQucHJvcHMgJiYgKGE0ID0gbzQucHJvcCh3My5tb3VudGVkKSkgJiYgIWE0Lm92ZXJsYXkpCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEkzKGE0LnRyZWUsIGMxNywgZTUsIHM4KTsKICAgICAgICAgICAgICBsZXQgeTE3ID0gbmV3IEkzKG80LCBjMTcsIGU1LCBzOCk7CiAgICAgICAgICAgICAgcmV0dXJuIG44ICYgQTQuSW5jbHVkZUFub255bW91cyB8fCAheTE3LnR5cGUuaXNBbm9ueW1vdXMgPyB5MTcgOiB5MTcubmV4dENoaWxkKHQ0IDwgMCA/IG80LmNoaWxkcmVuLmxlbmd0aCAtIDEgOiAwLCB0NCwgcjMsIGk0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobjggJiBBNC5JbmNsdWRlQW5vbnltb3VzIHx8ICFzOC50eXBlLmlzQW5vbnltb3VzIHx8IChzOC5pbmRleCA+PSAwID8gZTUgPSBzOC5pbmRleCArIHQ0IDogZTUgPSB0NCA8IDAgPyAtMSA6IHM4Ll9wYXJlbnQuX3RyZWUuY2hpbGRyZW4ubGVuZ3RoLCBzOCA9IHM4Ll9wYXJlbnQsICFzOCkpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgZ2V0IGZpcnN0Q2hpbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLm5leHRDaGlsZCgwLCAxLCAwLCA0KTsKICAgIH0KICAgIGdldCBsYXN0Q2hpbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLm5leHRDaGlsZCh0aGlzLl90cmVlLmNoaWxkcmVuLmxlbmd0aCAtIDEsIC0xLCAwLCA0KTsKICAgIH0KICAgIGNoaWxkQWZ0ZXIoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMubmV4dENoaWxkKDAsIDEsIGU1LCAyKTsKICAgIH0KICAgIGNoaWxkQmVmb3JlKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLm5leHRDaGlsZCh0aGlzLl90cmVlLmNoaWxkcmVuLmxlbmd0aCAtIDEsIC0xLCBlNSwgLTIpOwogICAgfQogICAgZW50ZXIoZTUsIHQ0LCByMyA9IDApIHsKICAgICAgbGV0IGk0OwogICAgICBpZiAoIShyMyAmIEE0Lklnbm9yZU92ZXJsYXlzKSAmJiAoaTQgPSB0aGlzLl90cmVlLnByb3AodzMubW91bnRlZCkpICYmIGk0Lm92ZXJsYXkpIHsKICAgICAgICBsZXQgbjggPSBlNSAtIHRoaXMuZnJvbTsKICAgICAgICBmb3IgKGxldCB7IGZyb206IHM4LCB0bzogbDcgfSBvZiBpNC5vdmVybGF5KQogICAgICAgICAgaWYgKCh0NCA+IDAgPyBzOCA8PSBuOCA6IHM4IDwgbjgpICYmICh0NCA8IDAgPyBsNyA+PSBuOCA6IGw3ID4gbjgpKQogICAgICAgICAgICByZXR1cm4gbmV3IEkzKGk0LnRyZWUsIGk0Lm92ZXJsYXlbMF0uZnJvbSArIHRoaXMuZnJvbSwgLTEsIHRoaXMpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLm5leHRDaGlsZCgwLCAxLCBlNSwgdDQsIHIzKTsKICAgIH0KICAgIG5leHRTaWduaWZpY2FudFBhcmVudCgpIHsKICAgICAgbGV0IGU1ID0gdGhpczsKICAgICAgZm9yICg7IGU1LnR5cGUuaXNBbm9ueW1vdXMgJiYgZTUuX3BhcmVudDsgKQogICAgICAgIGU1ID0gZTUuX3BhcmVudDsKICAgICAgcmV0dXJuIGU1OwogICAgfQogICAgZ2V0IHBhcmVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKSA6IG51bGw7CiAgICB9CiAgICBnZXQgbmV4dFNpYmxpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQgJiYgdGhpcy5pbmRleCA+PSAwID8gdGhpcy5fcGFyZW50Lm5leHRDaGlsZCh0aGlzLmluZGV4ICsgMSwgMSwgMCwgNCkgOiBudWxsOwogICAgfQogICAgZ2V0IHByZXZTaWJsaW5nKCkgewogICAgICByZXR1cm4gdGhpcy5fcGFyZW50ICYmIHRoaXMuaW5kZXggPj0gMCA/IHRoaXMuX3BhcmVudC5uZXh0Q2hpbGQodGhpcy5pbmRleCAtIDEsIC0xLCAwLCA0KSA6IG51bGw7CiAgICB9CiAgICBjdXJzb3IoZTUgPSAwKSB7CiAgICAgIHJldHVybiBuZXcgVjUodGhpcywgZTUpOwogICAgfQogICAgZ2V0IHRyZWUoKSB7CiAgICAgIHJldHVybiB0aGlzLl90cmVlOwogICAgfQogICAgdG9UcmVlKCkgewogICAgICByZXR1cm4gdGhpcy5fdHJlZTsKICAgIH0KICAgIHJlc29sdmUoZTUsIHQ0ID0gMCkgewogICAgICByZXR1cm4gcTModGhpcywgZTUsIHQ0LCBmYWxzZSk7CiAgICB9CiAgICByZXNvbHZlSW5uZXIoZTUsIHQ0ID0gMCkgewogICAgICByZXR1cm4gcTModGhpcywgZTUsIHQ0LCB0cnVlKTsKICAgIH0KICAgIGVudGVyVW5maW5pc2hlZE5vZGVzQmVmb3JlKGU1KSB7CiAgICAgIHJldHVybiBBZTQodGhpcywgZTUpOwogICAgfQogICAgZ2V0Q2hpbGQoZTUsIHQ0ID0gbnVsbCwgcjMgPSBudWxsKSB7CiAgICAgIGxldCBpNCA9IGVlNCh0aGlzLCBlNSwgdDQsIHIzKTsKICAgICAgcmV0dXJuIGk0Lmxlbmd0aCA/IGk0WzBdIDogbnVsbDsKICAgIH0KICAgIGdldENoaWxkcmVuKGU1LCB0NCA9IG51bGwsIHIzID0gbnVsbCkgewogICAgICByZXR1cm4gZWU0KHRoaXMsIGU1LCB0NCwgcjMpOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLl90cmVlLnRvU3RyaW5nKCk7CiAgICB9CiAgICBnZXQgbm9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBtYXRjaENvbnRleHQoZTUpIHsKICAgICAgcmV0dXJuIHRlNCh0aGlzLCBlNSk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBlZTQoaDEwLCBlNSwgdDQsIHIzKSB7CiAgICBsZXQgaTQgPSBoMTAuY3Vyc29yKCksIG44ID0gW107CiAgICBpZiAoIWk0LmZpcnN0Q2hpbGQoKSkKICAgICAgcmV0dXJuIG44OwogICAgaWYgKHQ0ICE9IG51bGwpIHsKICAgICAgZm9yICg7ICFpNC50eXBlLmlzKHQ0KTsgKQogICAgICAgIGlmICghaTQubmV4dFNpYmxpbmcoKSkKICAgICAgICAgIHJldHVybiBuODsKICAgIH0KICAgIGZvciAoOyA7ICkgewogICAgICBpZiAocjMgIT0gbnVsbCAmJiBpNC50eXBlLmlzKHIzKSkKICAgICAgICByZXR1cm4gbjg7CiAgICAgIGlmIChpNC50eXBlLmlzKGU1KSAmJiBuOC5wdXNoKGk0Lm5vZGUpLCAhaTQubmV4dFNpYmxpbmcoKSkKICAgICAgICByZXR1cm4gcjMgPT0gbnVsbCA/IG44IDogW107CiAgICB9CiAgfQogIGZ1bmN0aW9uIHRlNChoMTAsIGU1LCB0NCA9IGU1Lmxlbmd0aCAtIDEpIHsKICAgIGZvciAobGV0IHIzID0gaDEwLnBhcmVudDsgdDQgPj0gMDsgcjMgPSByMy5wYXJlbnQpIHsKICAgICAgaWYgKCFyMykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmICghcjMudHlwZS5pc0Fub255bW91cykgewogICAgICAgIGlmIChlNVt0NF0gJiYgZTVbdDRdICE9IHIzLm5hbWUpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgdDQtLTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIHZhciBzZTQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIHIzLCBpNCkgewogICAgICB0aGlzLnBhcmVudCA9IGU1LCB0aGlzLmJ1ZmZlciA9IHQ0LCB0aGlzLmluZGV4ID0gcjMsIHRoaXMuc3RhcnQgPSBpNDsKICAgIH0KICB9OwogIHZhciBNMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgcjMpIHsKICAgICAgdGhpcy5jb250ZXh0ID0gZTUsIHRoaXMuX3BhcmVudCA9IHQ0LCB0aGlzLmluZGV4ID0gcjMsIHRoaXMudHlwZSA9IGU1LmJ1ZmZlci5zZXQudHlwZXNbZTUuYnVmZmVyLmJ1ZmZlcltyM11dOwogICAgfQogICAgZ2V0IG5hbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnR5cGUubmFtZTsKICAgIH0KICAgIGdldCBmcm9tKCkgewogICAgICByZXR1cm4gdGhpcy5jb250ZXh0LnN0YXJ0ICsgdGhpcy5jb250ZXh0LmJ1ZmZlci5idWZmZXJbdGhpcy5pbmRleCArIDFdOwogICAgfQogICAgZ2V0IHRvKCkgewogICAgICByZXR1cm4gdGhpcy5jb250ZXh0LnN0YXJ0ICsgdGhpcy5jb250ZXh0LmJ1ZmZlci5idWZmZXJbdGhpcy5pbmRleCArIDJdOwogICAgfQogICAgY2hpbGQoZTUsIHQ0LCByMykgewogICAgICBsZXQgeyBidWZmZXI6IGk0IH0gPSB0aGlzLmNvbnRleHQsIG44ID0gaTQuZmluZENoaWxkKHRoaXMuaW5kZXggKyA0LCBpNC5idWZmZXJbdGhpcy5pbmRleCArIDNdLCBlNSwgdDQgLSB0aGlzLmNvbnRleHQuc3RhcnQsIHIzKTsKICAgICAgcmV0dXJuIG44IDwgMCA/IG51bGwgOiBuZXcgTTModGhpcy5jb250ZXh0LCB0aGlzLCBuOCk7CiAgICB9CiAgICBnZXQgZmlyc3RDaGlsZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuY2hpbGQoMSwgMCwgNCk7CiAgICB9CiAgICBnZXQgbGFzdENoaWxkKCkgewogICAgICByZXR1cm4gdGhpcy5jaGlsZCgtMSwgMCwgNCk7CiAgICB9CiAgICBjaGlsZEFmdGVyKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLmNoaWxkKDEsIGU1LCAyKTsKICAgIH0KICAgIGNoaWxkQmVmb3JlKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLmNoaWxkKC0xLCBlNSwgLTIpOwogICAgfQogICAgZW50ZXIoZTUsIHQ0LCByMyA9IDApIHsKICAgICAgaWYgKHIzICYgQTQuRXhjbHVkZUJ1ZmZlcnMpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGxldCB7IGJ1ZmZlcjogaTQgfSA9IHRoaXMuY29udGV4dCwgbjggPSBpNC5maW5kQ2hpbGQodGhpcy5pbmRleCArIDQsIGk0LmJ1ZmZlclt0aGlzLmluZGV4ICsgM10sIHQ0ID4gMCA/IDEgOiAtMSwgZTUgLSB0aGlzLmNvbnRleHQuc3RhcnQsIHQ0KTsKICAgICAgcmV0dXJuIG44IDwgMCA/IG51bGwgOiBuZXcgTTModGhpcy5jb250ZXh0LCB0aGlzLCBuOCk7CiAgICB9CiAgICBnZXQgcGFyZW50KCkgewogICAgICByZXR1cm4gdGhpcy5fcGFyZW50IHx8IHRoaXMuY29udGV4dC5wYXJlbnQubmV4dFNpZ25pZmljYW50UGFyZW50KCk7CiAgICB9CiAgICBleHRlcm5hbFNpYmxpbmcoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IG51bGwgOiB0aGlzLmNvbnRleHQucGFyZW50Lm5leHRDaGlsZCh0aGlzLmNvbnRleHQuaW5kZXggKyBlNSwgZTUsIDAsIDQpOwogICAgfQogICAgZ2V0IG5leHRTaWJsaW5nKCkgewogICAgICBsZXQgeyBidWZmZXI6IGU1IH0gPSB0aGlzLmNvbnRleHQsIHQ0ID0gZTUuYnVmZmVyW3RoaXMuaW5kZXggKyAzXTsKICAgICAgcmV0dXJuIHQ0IDwgKHRoaXMuX3BhcmVudCA/IGU1LmJ1ZmZlclt0aGlzLl9wYXJlbnQuaW5kZXggKyAzXSA6IGU1LmJ1ZmZlci5sZW5ndGgpID8gbmV3IE0zKHRoaXMuY29udGV4dCwgdGhpcy5fcGFyZW50LCB0NCkgOiB0aGlzLmV4dGVybmFsU2libGluZygxKTsKICAgIH0KICAgIGdldCBwcmV2U2libGluZygpIHsKICAgICAgbGV0IHsgYnVmZmVyOiBlNSB9ID0gdGhpcy5jb250ZXh0LCB0NCA9IHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5pbmRleCArIDQgOiAwOwogICAgICByZXR1cm4gdGhpcy5pbmRleCA9PSB0NCA/IHRoaXMuZXh0ZXJuYWxTaWJsaW5nKC0xKSA6IG5ldyBNMyh0aGlzLmNvbnRleHQsIHRoaXMuX3BhcmVudCwgZTUuZmluZENoaWxkKHQ0LCB0aGlzLmluZGV4LCAtMSwgMCwgNCkpOwogICAgfQogICAgY3Vyc29yKGU1ID0gMCkgewogICAgICByZXR1cm4gbmV3IFY1KHRoaXMsIGU1KTsKICAgIH0KICAgIGdldCB0cmVlKCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHRvVHJlZSgpIHsKICAgICAgbGV0IGU1ID0gW10sIHQ0ID0gW10sIHsgYnVmZmVyOiByMyB9ID0gdGhpcy5jb250ZXh0LCBpNCA9IHRoaXMuaW5kZXggKyA0LCBuOCA9IHIzLmJ1ZmZlclt0aGlzLmluZGV4ICsgM107CiAgICAgIGlmIChuOCA+IGk0KSB7CiAgICAgICAgbGV0IHM4ID0gcjMuYnVmZmVyW3RoaXMuaW5kZXggKyAxXSwgbDcgPSByMy5idWZmZXJbdGhpcy5pbmRleCArIDJdOwogICAgICAgIGU1LnB1c2gocjMuc2xpY2UoaTQsIG44LCBzOCwgbDcpKSwgdDQucHVzaCgwKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFAzKHRoaXMudHlwZSwgZTUsIHQ0LCB0aGlzLnRvIC0gdGhpcy5mcm9tKTsKICAgIH0KICAgIHJlc29sdmUoZTUsIHQ0ID0gMCkgewogICAgICByZXR1cm4gcTModGhpcywgZTUsIHQ0LCBmYWxzZSk7CiAgICB9CiAgICByZXNvbHZlSW5uZXIoZTUsIHQ0ID0gMCkgewogICAgICByZXR1cm4gcTModGhpcywgZTUsIHQ0LCB0cnVlKTsKICAgIH0KICAgIGVudGVyVW5maW5pc2hlZE5vZGVzQmVmb3JlKGU1KSB7CiAgICAgIHJldHVybiBBZTQodGhpcywgZTUpOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuYnVmZmVyLmNoaWxkU3RyaW5nKHRoaXMuaW5kZXgpOwogICAgfQogICAgZ2V0Q2hpbGQoZTUsIHQ0ID0gbnVsbCwgcjMgPSBudWxsKSB7CiAgICAgIGxldCBpNCA9IGVlNCh0aGlzLCBlNSwgdDQsIHIzKTsKICAgICAgcmV0dXJuIGk0Lmxlbmd0aCA/IGk0WzBdIDogbnVsbDsKICAgIH0KICAgIGdldENoaWxkcmVuKGU1LCB0NCA9IG51bGwsIHIzID0gbnVsbCkgewogICAgICByZXR1cm4gZWU0KHRoaXMsIGU1LCB0NCwgcjMpOwogICAgfQogICAgZ2V0IG5vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgbWF0Y2hDb250ZXh0KGU1KSB7CiAgICAgIHJldHVybiB0ZTQodGhpcywgZTUpOwogICAgfQogIH07CiAgdmFyIFY1ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0ID0gMCkgewogICAgICBpZiAodGhpcy5tb2RlID0gdDQsIHRoaXMuYnVmZmVyID0gbnVsbCwgdGhpcy5zdGFjayA9IFtdLCB0aGlzLmluZGV4ID0gMCwgdGhpcy5idWZmZXJOb2RlID0gbnVsbCwgZTUgaW5zdGFuY2VvZiBJMykKICAgICAgICB0aGlzLnlpZWxkTm9kZShlNSk7CiAgICAgIGVsc2UgewogICAgICAgIHRoaXMuX3RyZWUgPSBlNS5jb250ZXh0LnBhcmVudCwgdGhpcy5idWZmZXIgPSBlNS5jb250ZXh0OwogICAgICAgIGZvciAobGV0IHIzID0gZTUuX3BhcmVudDsgcjM7IHIzID0gcjMuX3BhcmVudCkKICAgICAgICAgIHRoaXMuc3RhY2sudW5zaGlmdChyMy5pbmRleCk7CiAgICAgICAgdGhpcy5idWZmZXJOb2RlID0gZTUsIHRoaXMueWllbGRCdWYoZTUuaW5kZXgpOwogICAgICB9CiAgICB9CiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudHlwZS5uYW1lOwogICAgfQogICAgeWllbGROb2RlKGU1KSB7CiAgICAgIHJldHVybiBlNSA/ICh0aGlzLl90cmVlID0gZTUsIHRoaXMudHlwZSA9IGU1LnR5cGUsIHRoaXMuZnJvbSA9IGU1LmZyb20sIHRoaXMudG8gPSBlNS50bywgdHJ1ZSkgOiBmYWxzZTsKICAgIH0KICAgIHlpZWxkQnVmKGU1LCB0NCkgewogICAgICB0aGlzLmluZGV4ID0gZTU7CiAgICAgIGxldCB7IHN0YXJ0OiByMywgYnVmZmVyOiBpNCB9ID0gdGhpcy5idWZmZXI7CiAgICAgIHJldHVybiB0aGlzLnR5cGUgPSB0NCB8fCBpNC5zZXQudHlwZXNbaTQuYnVmZmVyW2U1XV0sIHRoaXMuZnJvbSA9IHIzICsgaTQuYnVmZmVyW2U1ICsgMV0sIHRoaXMudG8gPSByMyArIGk0LmJ1ZmZlcltlNSArIDJdLCB0cnVlOwogICAgfQogICAgeWllbGQoZTUpIHsKICAgICAgcmV0dXJuIGU1ID8gZTUgaW5zdGFuY2VvZiBJMyA/ICh0aGlzLmJ1ZmZlciA9IG51bGwsIHRoaXMueWllbGROb2RlKGU1KSkgOiAodGhpcy5idWZmZXIgPSBlNS5jb250ZXh0LCB0aGlzLnlpZWxkQnVmKGU1LmluZGV4LCBlNS50eXBlKSkgOiBmYWxzZTsKICAgIH0KICAgIHRvU3RyaW5nKCkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXIgPyB0aGlzLmJ1ZmZlci5idWZmZXIuY2hpbGRTdHJpbmcodGhpcy5pbmRleCkgOiB0aGlzLl90cmVlLnRvU3RyaW5nKCk7CiAgICB9CiAgICBlbnRlckNoaWxkKGU1LCB0NCwgcjMpIHsKICAgICAgaWYgKCF0aGlzLmJ1ZmZlcikKICAgICAgICByZXR1cm4gdGhpcy55aWVsZCh0aGlzLl90cmVlLm5leHRDaGlsZChlNSA8IDAgPyB0aGlzLl90cmVlLl90cmVlLmNoaWxkcmVuLmxlbmd0aCAtIDEgOiAwLCBlNSwgdDQsIHIzLCB0aGlzLm1vZGUpKTsKICAgICAgbGV0IHsgYnVmZmVyOiBpNCB9ID0gdGhpcy5idWZmZXIsIG44ID0gaTQuZmluZENoaWxkKHRoaXMuaW5kZXggKyA0LCBpNC5idWZmZXJbdGhpcy5pbmRleCArIDNdLCBlNSwgdDQgLSB0aGlzLmJ1ZmZlci5zdGFydCwgcjMpOwogICAgICByZXR1cm4gbjggPCAwID8gZmFsc2UgOiAodGhpcy5zdGFjay5wdXNoKHRoaXMuaW5kZXgpLCB0aGlzLnlpZWxkQnVmKG44KSk7CiAgICB9CiAgICBmaXJzdENoaWxkKCkgewogICAgICByZXR1cm4gdGhpcy5lbnRlckNoaWxkKDEsIDAsIDQpOwogICAgfQogICAgbGFzdENoaWxkKCkgewogICAgICByZXR1cm4gdGhpcy5lbnRlckNoaWxkKC0xLCAwLCA0KTsKICAgIH0KICAgIGNoaWxkQWZ0ZXIoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMuZW50ZXJDaGlsZCgxLCBlNSwgMik7CiAgICB9CiAgICBjaGlsZEJlZm9yZShlNSkgewogICAgICByZXR1cm4gdGhpcy5lbnRlckNoaWxkKC0xLCBlNSwgLTIpOwogICAgfQogICAgZW50ZXIoZTUsIHQ0LCByMyA9IHRoaXMubW9kZSkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXIgPyByMyAmIEE0LkV4Y2x1ZGVCdWZmZXJzID8gZmFsc2UgOiB0aGlzLmVudGVyQ2hpbGQoMSwgZTUsIHQ0KSA6IHRoaXMueWllbGQodGhpcy5fdHJlZS5lbnRlcihlNSwgdDQsIHIzKSk7CiAgICB9CiAgICBwYXJlbnQoKSB7CiAgICAgIGlmICghdGhpcy5idWZmZXIpCiAgICAgICAgcmV0dXJuIHRoaXMueWllbGROb2RlKHRoaXMubW9kZSAmIEE0LkluY2x1ZGVBbm9ueW1vdXMgPyB0aGlzLl90cmVlLl9wYXJlbnQgOiB0aGlzLl90cmVlLnBhcmVudCk7CiAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcy55aWVsZEJ1Zih0aGlzLnN0YWNrLnBvcCgpKTsKICAgICAgbGV0IGU1ID0gdGhpcy5tb2RlICYgQTQuSW5jbHVkZUFub255bW91cyA/IHRoaXMuYnVmZmVyLnBhcmVudCA6IHRoaXMuYnVmZmVyLnBhcmVudC5uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKTsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyID0gbnVsbCwgdGhpcy55aWVsZE5vZGUoZTUpOwogICAgfQogICAgc2libGluZyhlNSkgewogICAgICBpZiAoIXRoaXMuYnVmZmVyKQogICAgICAgIHJldHVybiB0aGlzLl90cmVlLl9wYXJlbnQgPyB0aGlzLnlpZWxkKHRoaXMuX3RyZWUuaW5kZXggPCAwID8gbnVsbCA6IHRoaXMuX3RyZWUuX3BhcmVudC5uZXh0Q2hpbGQodGhpcy5fdHJlZS5pbmRleCArIGU1LCBlNSwgMCwgNCwgdGhpcy5tb2RlKSkgOiBmYWxzZTsKICAgICAgbGV0IHsgYnVmZmVyOiB0NCB9ID0gdGhpcy5idWZmZXIsIHIzID0gdGhpcy5zdGFjay5sZW5ndGggLSAxOwogICAgICBpZiAoZTUgPCAwKSB7CiAgICAgICAgbGV0IGk0ID0gcjMgPCAwID8gMCA6IHRoaXMuc3RhY2tbcjNdICsgNDsKICAgICAgICBpZiAodGhpcy5pbmRleCAhPSBpNCkKICAgICAgICAgIHJldHVybiB0aGlzLnlpZWxkQnVmKHQ0LmZpbmRDaGlsZChpNCwgdGhpcy5pbmRleCwgLTEsIDAsIDQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZXQgaTQgPSB0NC5idWZmZXJbdGhpcy5pbmRleCArIDNdOwogICAgICAgIGlmIChpNCA8IChyMyA8IDAgPyB0NC5idWZmZXIubGVuZ3RoIDogdDQuYnVmZmVyW3RoaXMuc3RhY2tbcjNdICsgM10pKQogICAgICAgICAgcmV0dXJuIHRoaXMueWllbGRCdWYoaTQpOwogICAgICB9CiAgICAgIHJldHVybiByMyA8IDAgPyB0aGlzLnlpZWxkKHRoaXMuYnVmZmVyLnBhcmVudC5uZXh0Q2hpbGQodGhpcy5idWZmZXIuaW5kZXggKyBlNSwgZTUsIDAsIDQsIHRoaXMubW9kZSkpIDogZmFsc2U7CiAgICB9CiAgICBuZXh0U2libGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuc2libGluZygxKTsKICAgIH0KICAgIHByZXZTaWJsaW5nKCkgewogICAgICByZXR1cm4gdGhpcy5zaWJsaW5nKC0xKTsKICAgIH0KICAgIGF0TGFzdE5vZGUoZTUpIHsKICAgICAgbGV0IHQ0LCByMywgeyBidWZmZXI6IGk0IH0gPSB0aGlzOwogICAgICBpZiAoaTQpIHsKICAgICAgICBpZiAoZTUgPiAwKSB7CiAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IGk0LmJ1ZmZlci5idWZmZXIubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBmb3IgKGxldCBuOCA9IDA7IG44IDwgdGhpcy5pbmRleDsgbjgrKykKICAgICAgICAgICAgaWYgKGk0LmJ1ZmZlci5idWZmZXJbbjggKyAzXSA8IHRoaXMuaW5kZXgpCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICh7IGluZGV4OiB0NCwgcGFyZW50OiByMyB9ID0gaTQpOwogICAgICB9IGVsc2UKICAgICAgICAoeyBpbmRleDogdDQsIF9wYXJlbnQ6IHIzIH0gPSB0aGlzLl90cmVlKTsKICAgICAgZm9yICg7IHIzOyB7IGluZGV4OiB0NCwgX3BhcmVudDogcjMgfSA9IHIzKQogICAgICAgIGlmICh0NCA+IC0xKQogICAgICAgICAgZm9yIChsZXQgbjggPSB0NCArIGU1LCBzOCA9IGU1IDwgMCA/IC0xIDogcjMuX3RyZWUuY2hpbGRyZW4ubGVuZ3RoOyBuOCAhPSBzODsgbjggKz0gZTUpIHsKICAgICAgICAgICAgbGV0IGw3ID0gcjMuX3RyZWUuY2hpbGRyZW5bbjhdOwogICAgICAgICAgICBpZiAodGhpcy5tb2RlICYgQTQuSW5jbHVkZUFub255bW91cyB8fCBsNyBpbnN0YW5jZW9mIFQ0IHx8ICFsNy50eXBlLmlzQW5vbnltb3VzIHx8IGFlNChsNykpCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIG1vdmUoZTUsIHQ0KSB7CiAgICAgIGlmICh0NCAmJiB0aGlzLmVudGVyQ2hpbGQoZTUsIDAsIDQpKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBmb3IgKDsgOyApIHsKICAgICAgICBpZiAodGhpcy5zaWJsaW5nKGU1KSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICh0aGlzLmF0TGFzdE5vZGUoZTUpIHx8ICF0aGlzLnBhcmVudCgpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBuZXh0KGU1ID0gdHJ1ZSkgewogICAgICByZXR1cm4gdGhpcy5tb3ZlKDEsIGU1KTsKICAgIH0KICAgIHByZXYoZTUgPSB0cnVlKSB7CiAgICAgIHJldHVybiB0aGlzLm1vdmUoLTEsIGU1KTsKICAgIH0KICAgIG1vdmVUbyhlNSwgdDQgPSAwKSB7CiAgICAgIGZvciAoOyAodGhpcy5mcm9tID09IHRoaXMudG8gfHwgKHQ0IDwgMSA/IHRoaXMuZnJvbSA+PSBlNSA6IHRoaXMuZnJvbSA+IGU1KSB8fCAodDQgPiAtMSA/IHRoaXMudG8gPD0gZTUgOiB0aGlzLnRvIDwgZTUpKSAmJiB0aGlzLnBhcmVudCgpOyApCiAgICAgICAgOwogICAgICBmb3IgKDsgdGhpcy5lbnRlckNoaWxkKDEsIGU1LCB0NCk7ICkKICAgICAgICA7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgZ2V0IG5vZGUoKSB7CiAgICAgIGlmICghdGhpcy5idWZmZXIpCiAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWU7CiAgICAgIGxldCBlNSA9IHRoaXMuYnVmZmVyTm9kZSwgdDQgPSBudWxsLCByMyA9IDA7CiAgICAgIGlmIChlNSAmJiBlNS5jb250ZXh0ID09IHRoaXMuYnVmZmVyKSB7CiAgICAgICAgZToKICAgICAgICAgIGZvciAobGV0IGk0ID0gdGhpcy5pbmRleCwgbjggPSB0aGlzLnN0YWNrLmxlbmd0aDsgbjggPj0gMDsgKSB7CiAgICAgICAgICAgIGZvciAobGV0IHM4ID0gZTU7IHM4OyBzOCA9IHM4Ll9wYXJlbnQpCiAgICAgICAgICAgICAgaWYgKHM4LmluZGV4ID09IGk0KSB7CiAgICAgICAgICAgICAgICBpZiAoaTQgPT0gdGhpcy5pbmRleCkKICAgICAgICAgICAgICAgICAgcmV0dXJuIHM4OwogICAgICAgICAgICAgICAgdDQgPSBzOCwgcjMgPSBuOCArIDE7CiAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgaTQgPSB0aGlzLnN0YWNrWy0tbjhdOwogICAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAobGV0IGk0ID0gcjM7IGk0IDwgdGhpcy5zdGFjay5sZW5ndGg7IGk0KyspCiAgICAgICAgdDQgPSBuZXcgTTModGhpcy5idWZmZXIsIHQ0LCB0aGlzLnN0YWNrW2k0XSk7CiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlck5vZGUgPSBuZXcgTTModGhpcy5idWZmZXIsIHQ0LCB0aGlzLmluZGV4KTsKICAgIH0KICAgIGdldCB0cmVlKCkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXIgPyBudWxsIDogdGhpcy5fdHJlZS5fdHJlZTsKICAgIH0KICAgIGl0ZXJhdGUoZTUsIHQ0KSB7CiAgICAgIGZvciAobGV0IHIzID0gMDsgOyApIHsKICAgICAgICBsZXQgaTQgPSBmYWxzZTsKICAgICAgICBpZiAodGhpcy50eXBlLmlzQW5vbnltb3VzIHx8IGU1KHRoaXMpICE9PSBmYWxzZSkgewogICAgICAgICAgaWYgKHRoaXMuZmlyc3RDaGlsZCgpKSB7CiAgICAgICAgICAgIHIzKys7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy50eXBlLmlzQW5vbnltb3VzIHx8IChpNCA9IHRydWUpOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgaTQgJiYgdDQgJiYgdDQodGhpcyksIGk0ID0gdGhpcy50eXBlLmlzQW5vbnltb3VzLCAhdGhpcy5uZXh0U2libGluZygpOyApIHsKICAgICAgICAgIGlmICghcjMpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMucGFyZW50KCksIHIzLS0sIGk0ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIG1hdGNoQ29udGV4dChlNSkgewogICAgICBpZiAoIXRoaXMuYnVmZmVyKQogICAgICAgIHJldHVybiB0ZTQodGhpcy5ub2RlLCBlNSk7CiAgICAgIGxldCB7IGJ1ZmZlcjogdDQgfSA9IHRoaXMuYnVmZmVyLCB7IHR5cGVzOiByMyB9ID0gdDQuc2V0OwogICAgICBmb3IgKGxldCBpNCA9IGU1Lmxlbmd0aCAtIDEsIG44ID0gdGhpcy5zdGFjay5sZW5ndGggLSAxOyBpNCA+PSAwOyBuOC0tKSB7CiAgICAgICAgaWYgKG44IDwgMCkKICAgICAgICAgIHJldHVybiB0ZTQodGhpcy5ub2RlLCBlNSwgaTQpOwogICAgICAgIGxldCBzOCA9IHIzW3Q0LmJ1ZmZlclt0aGlzLnN0YWNrW244XV1dOwogICAgICAgIGlmICghczguaXNBbm9ueW1vdXMpIHsKICAgICAgICAgIGlmIChlNVtpNF0gJiYgZTVbaTRdICE9IHM4Lm5hbWUpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIGk0LS07CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH07CiAgZnVuY3Rpb24gYWU0KGgxMCkgewogICAgcmV0dXJuIGgxMC5jaGlsZHJlbi5zb21lKChlNSkgPT4gZTUgaW5zdGFuY2VvZiBUNCB8fCAhZTUudHlwZS5pc0Fub255bW91cyB8fCBhZTQoZTUpKTsKICB9CiAgZnVuY3Rpb24gU2U0KGgxMCkgewogICAgdmFyIGU1OwogICAgbGV0IHsgYnVmZmVyOiB0NCwgbm9kZVNldDogcjMsIG1heEJ1ZmZlckxlbmd0aDogaTQgPSAxMDI0LCByZXVzZWQ6IG44ID0gW10sIG1pblJlcGVhdFR5cGU6IHM4ID0gcjMudHlwZXMubGVuZ3RoIH0gPSBoMTAsIGw3ID0gQXJyYXkuaXNBcnJheSh0NCkgPyBuZXcgSzQodDQsIHQ0Lmxlbmd0aCkgOiB0NCwgZjExID0gcjMudHlwZXMsIHUxMSA9IDAsIG80ID0gMDsKICAgIGZ1bmN0aW9uIGMxNyh4MjEsIHYxNSwgcDE4LCBtMjMsIEMxNykgewogICAgICBsZXQgeyBpZDogYjI1LCBzdGFydDogZzEyLCBlbmQ6IGsxOCwgc2l6ZTogejI2IH0gPSBsNywgTzE1ID0gbzQ7CiAgICAgIGZvciAoOyB6MjYgPCAwOyApCiAgICAgICAgaWYgKGw3Lm5leHQoKSwgejI2ID09IC0xKSB7CiAgICAgICAgICBsZXQgVzE4ID0gbjhbYjI1XTsKICAgICAgICAgIHAxOC5wdXNoKFcxOCksIG0yMy5wdXNoKGcxMiAtIHgyMSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh6MjYgPT0gLTMpIHsKICAgICAgICAgIHUxMSA9IGIyNTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKHoyNiA9PSAtNCkgewogICAgICAgICAgbzQgPSBiMjU7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5yZWNvZ25pemVkIHJlY29yZCBzaXplOiAke3oyNn1gKTsKICAgICAgbGV0IEoxNCA9IGYxMVtiMjVdLCBVMjksIEwyMiwgY2UxNiA9IGcxMiAtIHgyMTsKICAgICAgaWYgKGsxOCAtIGcxMiA8PSBpNCAmJiAoTDIyID0gUzIxKGw3LnBvcyAtIHYxNSwgQzE3KSkpIHsKICAgICAgICBsZXQgVzE4ID0gbmV3IFVpbnQxNkFycmF5KEwyMi5zaXplIC0gTDIyLnNraXApLCBqMTkgPSBsNy5wb3MgLSBMMjIuc2l6ZSwgUjI2ID0gVzE4Lmxlbmd0aDsKICAgICAgICBmb3IgKDsgbDcucG9zID4gajE5OyApCiAgICAgICAgICBSMjYgPSBEMjAoTDIyLnN0YXJ0LCBXMTgsIFIyNik7CiAgICAgICAgVTI5ID0gbmV3IFQ0KFcxOCwgazE4IC0gTDIyLnN0YXJ0LCByMyksIGNlMTYgPSBMMjIuc3RhcnQgLSB4MjE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IFcxOCA9IGw3LnBvcyAtIHoyNjsKICAgICAgICBsNy5uZXh0KCk7CiAgICAgICAgbGV0IGoxOSA9IFtdLCBSMjYgPSBbXSwgSDIzID0gYjI1ID49IHM4ID8gYjI1IDogLTEsICQyMSA9IDAsIFExNyA9IGsxODsKICAgICAgICBmb3IgKDsgbDcucG9zID4gVzE4OyApCiAgICAgICAgICBIMjMgPj0gMCAmJiBsNy5pZCA9PSBIMjMgJiYgbDcuc2l6ZSA+PSAwID8gKGw3LmVuZCA8PSBRMTcgLSBpNCAmJiAoeTE3KGoxOSwgUjI2LCBnMTIsICQyMSwgbDcuZW5kLCBRMTcsIEgyMywgTzE1KSwgJDIxID0gajE5Lmxlbmd0aCwgUTE3ID0gbDcuZW5kKSwgbDcubmV4dCgpKSA6IGMxNyhnMTIsIFcxOCwgajE5LCBSMjYsIEgyMyk7CiAgICAgICAgaWYgKEgyMyA+PSAwICYmICQyMSA+IDAgJiYgJDIxIDwgajE5Lmxlbmd0aCAmJiB5MTcoajE5LCBSMjYsIGcxMiwgJDIxLCBnMTIsIFExNywgSDIzLCBPMTUpLCBqMTkucmV2ZXJzZSgpLCBSMjYucmV2ZXJzZSgpLCBIMjMgPiAtMSAmJiAkMjEgPiAwKSB7CiAgICAgICAgICBsZXQgZGUxMyA9IGE0KEoxNCk7CiAgICAgICAgICBVMjkgPSBwZTUoSjE0LCBqMTksIFIyNiwgMCwgajE5Lmxlbmd0aCwgMCwgazE4IC0gZzEyLCBkZTEzLCBkZTEzKTsKICAgICAgICB9IGVsc2UKICAgICAgICAgIFUyOSA9IGQxNShKMTQsIGoxOSwgUjI2LCBrMTggLSBnMTIsIE8xNSAtIGsxOCk7CiAgICAgIH0KICAgICAgcDE4LnB1c2goVTI5KSwgbTIzLnB1c2goY2UxNik7CiAgICB9CiAgICBmdW5jdGlvbiBhNCh4MjEpIHsKICAgICAgcmV0dXJuICh2MTUsIHAxOCwgbTIzKSA9PiB7CiAgICAgICAgbGV0IEMxNyA9IDAsIGIyNSA9IHYxNS5sZW5ndGggLSAxLCBnMTIsIGsxODsKICAgICAgICBpZiAoYjI1ID49IDAgJiYgKGcxMiA9IHYxNVtiMjVdKSBpbnN0YW5jZW9mIFAzKSB7CiAgICAgICAgICBpZiAoIWIyNSAmJiBnMTIudHlwZSA9PSB4MjEgJiYgZzEyLmxlbmd0aCA9PSBtMjMpCiAgICAgICAgICAgIHJldHVybiBnMTI7CiAgICAgICAgICAoazE4ID0gZzEyLnByb3AodzMubG9va0FoZWFkKSkgJiYgKEMxNyA9IHAxOFtiMjVdICsgZzEyLmxlbmd0aCArIGsxOCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkMTUoeDIxLCB2MTUsIHAxOCwgbTIzLCBDMTcpOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24geTE3KHgyMSwgdjE1LCBwMTgsIG0yMywgQzE3LCBiMjUsIGcxMiwgazE4KSB7CiAgICAgIGxldCB6MjYgPSBbXSwgTzE1ID0gW107CiAgICAgIGZvciAoOyB4MjEubGVuZ3RoID4gbTIzOyApCiAgICAgICAgejI2LnB1c2goeDIxLnBvcCgpKSwgTzE1LnB1c2godjE1LnBvcCgpICsgcDE4IC0gQzE3KTsKICAgICAgeDIxLnB1c2goZDE1KHIzLnR5cGVzW2cxMl0sIHoyNiwgTzE1LCBiMjUgLSBDMTcsIGsxOCAtIGIyNSkpLCB2MTUucHVzaChDMTcgLSBwMTgpOwogICAgfQogICAgZnVuY3Rpb24gZDE1KHgyMSwgdjE1LCBwMTgsIG0yMywgQzE3ID0gMCwgYjI1KSB7CiAgICAgIGlmICh1MTEpIHsKICAgICAgICBsZXQgZzEyID0gW3czLmNvbnRleHRIYXNoLCB1MTFdOwogICAgICAgIGIyNSA9IGIyNSA/IFtnMTJdLmNvbmNhdChiMjUpIDogW2cxMl07CiAgICAgIH0KICAgICAgaWYgKEMxNyA+IDI1KSB7CiAgICAgICAgbGV0IGcxMiA9IFt3My5sb29rQWhlYWQsIEMxN107CiAgICAgICAgYjI1ID0gYjI1ID8gW2cxMl0uY29uY2F0KGIyNSkgOiBbZzEyXTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFAzKHgyMSwgdjE1LCBwMTgsIG0yMywgYjI1KTsKICAgIH0KICAgIGZ1bmN0aW9uIFMyMSh4MjEsIHYxNSkgewogICAgICBsZXQgcDE4ID0gbDcuZm9yaygpLCBtMjMgPSAwLCBDMTcgPSAwLCBiMjUgPSAwLCBnMTIgPSBwMTguZW5kIC0gaTQsIGsxOCA9IHsgc2l6ZTogMCwgc3RhcnQ6IDAsIHNraXA6IDAgfTsKICAgICAgZToKICAgICAgICBmb3IgKGxldCB6MjYgPSBwMTgucG9zIC0geDIxOyBwMTgucG9zID4gejI2OyApIHsKICAgICAgICAgIGxldCBPMTUgPSBwMTguc2l6ZTsKICAgICAgICAgIGlmIChwMTguaWQgPT0gdjE1ICYmIE8xNSA+PSAwKSB7CiAgICAgICAgICAgIGsxOC5zaXplID0gbTIzLCBrMTguc3RhcnQgPSBDMTcsIGsxOC5za2lwID0gYjI1LCBiMjUgKz0gNCwgbTIzICs9IDQsIHAxOC5uZXh0KCk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgbGV0IEoxNCA9IHAxOC5wb3MgLSBPMTU7CiAgICAgICAgICBpZiAoTzE1IDwgMCB8fCBKMTQgPCB6MjYgfHwgcDE4LnN0YXJ0IDwgZzEyKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGxldCBVMjkgPSBwMTguaWQgPj0gczggPyA0IDogMCwgTDIyID0gcDE4LnN0YXJ0OwogICAgICAgICAgZm9yIChwMTgubmV4dCgpOyBwMTgucG9zID4gSjE0OyApIHsKICAgICAgICAgICAgaWYgKHAxOC5zaXplIDwgMCkKICAgICAgICAgICAgICBpZiAocDE4LnNpemUgPT0gLTMpCiAgICAgICAgICAgICAgICBVMjkgKz0gNDsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcDE4LmlkID49IHM4ICYmIChVMjkgKz0gNCk7CiAgICAgICAgICAgIHAxOC5uZXh0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBDMTcgPSBMMjIsIG0yMyArPSBPMTUsIGIyNSArPSBVMjk7CiAgICAgICAgfQogICAgICByZXR1cm4gKHYxNSA8IDAgfHwgbTIzID09IHgyMSkgJiYgKGsxOC5zaXplID0gbTIzLCBrMTguc3RhcnQgPSBDMTcsIGsxOC5za2lwID0gYjI1KSwgazE4LnNpemUgPiA0ID8gazE4IDogdm9pZCAwOwogICAgfQogICAgZnVuY3Rpb24gRDIwKHgyMSwgdjE1LCBwMTgpIHsKICAgICAgbGV0IHsgaWQ6IG0yMywgc3RhcnQ6IEMxNywgZW5kOiBiMjUsIHNpemU6IGcxMiB9ID0gbDc7CiAgICAgIGlmIChsNy5uZXh0KCksIGcxMiA+PSAwICYmIG0yMyA8IHM4KSB7CiAgICAgICAgbGV0IGsxOCA9IHAxODsKICAgICAgICBpZiAoZzEyID4gNCkgewogICAgICAgICAgbGV0IHoyNiA9IGw3LnBvcyAtIChnMTIgLSA0KTsKICAgICAgICAgIGZvciAoOyBsNy5wb3MgPiB6MjY7ICkKICAgICAgICAgICAgcDE4ID0gRDIwKHgyMSwgdjE1LCBwMTgpOwogICAgICAgIH0KICAgICAgICB2MTVbLS1wMThdID0gazE4LCB2MTVbLS1wMThdID0gYjI1IC0geDIxLCB2MTVbLS1wMThdID0gQzE3IC0geDIxLCB2MTVbLS1wMThdID0gbTIzOwogICAgICB9IGVsc2UKICAgICAgICBnMTIgPT0gLTMgPyB1MTEgPSBtMjMgOiBnMTIgPT0gLTQgJiYgKG80ID0gbTIzKTsKICAgICAgcmV0dXJuIHAxODsKICAgIH0KICAgIGxldCBFMTUgPSBbXSwgRjIyID0gW107CiAgICBmb3IgKDsgbDcucG9zID4gMDsgKQogICAgICBjMTcoaDEwLnN0YXJ0IHx8IDAsIGgxMC5idWZmZXJTdGFydCB8fCAwLCBFMTUsIEYyMiwgLTEpOwogICAgbGV0IF8yNSA9IChlNSA9IGgxMC5sZW5ndGgpICE9PSBudWxsICYmIGU1ICE9PSB2b2lkIDAgPyBlNSA6IEUxNS5sZW5ndGggPyBGMjJbMF0gKyBFMTVbMF0ubGVuZ3RoIDogMDsKICAgIHJldHVybiBuZXcgUDMoZjExW2gxMC50b3BJRF0sIEUxNS5yZXZlcnNlKCksIEYyMi5yZXZlcnNlKCksIF8yNSk7CiAgfQogIHZhciBtZTUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICBmdW5jdGlvbiBZNChoMTAsIGU1KSB7CiAgICBpZiAoIWgxMC5pc0Fub255bW91cyB8fCBlNSBpbnN0YW5jZW9mIFQ0IHx8IGU1LnR5cGUgIT0gaDEwKQogICAgICByZXR1cm4gMTsKICAgIGxldCB0NCA9IG1lNS5nZXQoZTUpOwogICAgaWYgKHQ0ID09IG51bGwpIHsKICAgICAgdDQgPSAxOwogICAgICBmb3IgKGxldCByMyBvZiBlNS5jaGlsZHJlbikgewogICAgICAgIGlmIChyMy50eXBlICE9IGgxMCB8fCAhKHIzIGluc3RhbmNlb2YgUDMpKSB7CiAgICAgICAgICB0NCA9IDE7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdDQgKz0gWTQoaDEwLCByMyk7CiAgICAgIH0KICAgICAgbWU1LnNldChlNSwgdDQpOwogICAgfQogICAgcmV0dXJuIHQ0OwogIH0KICBmdW5jdGlvbiBwZTUoaDEwLCBlNSwgdDQsIHIzLCBpNCwgbjgsIHM4LCBsNywgZjExKSB7CiAgICBsZXQgdTExID0gMDsKICAgIGZvciAobGV0IGQxNSA9IHIzOyBkMTUgPCBpNDsgZDE1KyspCiAgICAgIHUxMSArPSBZNChoMTAsIGU1W2QxNV0pOwogICAgbGV0IG80ID0gTWF0aC5jZWlsKHUxMSAqIDEuNSAvIDgpLCBjMTcgPSBbXSwgYTQgPSBbXTsKICAgIGZ1bmN0aW9uIHkxNyhkMTUsIFMyMSwgRDIwLCBFMTUsIEYyMikgewogICAgICBmb3IgKGxldCBfMjUgPSBEMjA7IF8yNSA8IEUxNTsgKSB7CiAgICAgICAgbGV0IHgyMSA9IF8yNSwgdjE1ID0gUzIxW18yNV0sIHAxOCA9IFk0KGgxMCwgZDE1W18yNV0pOwogICAgICAgIGZvciAoXzI1Kys7IF8yNSA8IEUxNTsgXzI1KyspIHsKICAgICAgICAgIGxldCBtMjMgPSBZNChoMTAsIGQxNVtfMjVdKTsKICAgICAgICAgIGlmIChwMTggKyBtMjMgPj0gbzQpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgcDE4ICs9IG0yMzsKICAgICAgICB9CiAgICAgICAgaWYgKF8yNSA9PSB4MjEgKyAxKSB7CiAgICAgICAgICBpZiAocDE4ID4gbzQpIHsKICAgICAgICAgICAgbGV0IG0yMyA9IGQxNVt4MjFdOwogICAgICAgICAgICB5MTcobTIzLmNoaWxkcmVuLCBtMjMucG9zaXRpb25zLCAwLCBtMjMuY2hpbGRyZW4ubGVuZ3RoLCBTMjFbeDIxXSArIEYyMik7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgYzE3LnB1c2goZDE1W3gyMV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgbTIzID0gUzIxW18yNSAtIDFdICsgZDE1W18yNSAtIDFdLmxlbmd0aCAtIHYxNTsKICAgICAgICAgIGMxNy5wdXNoKHBlNShoMTAsIGQxNSwgUzIxLCB4MjEsIF8yNSwgdjE1LCBtMjMsIG51bGwsIGYxMSkpOwogICAgICAgIH0KICAgICAgICBhNC5wdXNoKHYxNSArIEYyMiAtIG44KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHkxNyhlNSwgdDQsIHIzLCBpNCwgMCksIChsNyB8fCBmMTEpKGMxNywgYTQsIHM4KTsKICB9CiAgdmFyIGJlNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aGlzLm1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgfQogICAgc2V0QnVmZmVyKGU1LCB0NCwgcjMpIHsKICAgICAgbGV0IGk0ID0gdGhpcy5tYXAuZ2V0KGU1KTsKICAgICAgaTQgfHwgdGhpcy5tYXAuc2V0KGU1LCBpNCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpLCBpNC5zZXQodDQsIHIzKTsKICAgIH0KICAgIGdldEJ1ZmZlcihlNSwgdDQpIHsKICAgICAgbGV0IHIzID0gdGhpcy5tYXAuZ2V0KGU1KTsKICAgICAgcmV0dXJuIHIzICYmIHIzLmdldCh0NCk7CiAgICB9CiAgICBzZXQoZTUsIHQ0KSB7CiAgICAgIGU1IGluc3RhbmNlb2YgTTMgPyB0aGlzLnNldEJ1ZmZlcihlNS5jb250ZXh0LmJ1ZmZlciwgZTUuaW5kZXgsIHQ0KSA6IGU1IGluc3RhbmNlb2YgSTMgJiYgdGhpcy5tYXAuc2V0KGU1LnRyZWUsIHQ0KTsKICAgIH0KICAgIGdldChlNSkgewogICAgICByZXR1cm4gZTUgaW5zdGFuY2VvZiBNMyA/IHRoaXMuZ2V0QnVmZmVyKGU1LmNvbnRleHQuYnVmZmVyLCBlNS5pbmRleCkgOiBlNSBpbnN0YW5jZW9mIEkzID8gdGhpcy5tYXAuZ2V0KGU1LnRyZWUpIDogdm9pZCAwOwogICAgfQogICAgY3Vyc29yU2V0KGU1LCB0NCkgewogICAgICBlNS5idWZmZXIgPyB0aGlzLnNldEJ1ZmZlcihlNS5idWZmZXIuYnVmZmVyLCBlNS5pbmRleCwgdDQpIDogdGhpcy5tYXAuc2V0KGU1LnRyZWUsIHQ0KTsKICAgIH0KICAgIGN1cnNvckdldChlNSkgewogICAgICByZXR1cm4gZTUuYnVmZmVyID8gdGhpcy5nZXRCdWZmZXIoZTUuYnVmZmVyLmJ1ZmZlciwgZTUuaW5kZXgpIDogdGhpcy5tYXAuZ2V0KGU1LnRyZWUpOwogICAgfQogIH07CiAgdmFyIEc1ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCByMywgaTQsIG44ID0gZmFsc2UsIHM4ID0gZmFsc2UpIHsKICAgICAgdGhpcy5mcm9tID0gZTUsIHRoaXMudG8gPSB0NCwgdGhpcy50cmVlID0gcjMsIHRoaXMub2Zmc2V0ID0gaTQsIHRoaXMub3BlbiA9IChuOCA/IDEgOiAwKSB8IChzOCA/IDIgOiAwKTsKICAgIH0KICAgIGdldCBvcGVuU3RhcnQoKSB7CiAgICAgIHJldHVybiAodGhpcy5vcGVuICYgMSkgPiAwOwogICAgfQogICAgZ2V0IG9wZW5FbmQoKSB7CiAgICAgIHJldHVybiAodGhpcy5vcGVuICYgMikgPiAwOwogICAgfQogICAgc3RhdGljIGFkZFRyZWUoZTUsIHQ0ID0gW10sIHIzID0gZmFsc2UpIHsKICAgICAgbGV0IGk0ID0gW25ldyBHNSgwLCBlNS5sZW5ndGgsIGU1LCAwLCBmYWxzZSwgcjMpXTsKICAgICAgZm9yIChsZXQgbjggb2YgdDQpCiAgICAgICAgbjgudG8gPiBlNS5sZW5ndGggJiYgaTQucHVzaChuOCk7CiAgICAgIHJldHVybiBpNDsKICAgIH0KICAgIHN0YXRpYyBhcHBseUNoYW5nZXMoZTUsIHQ0LCByMyA9IDEyOCkgewogICAgICBpZiAoIXQ0Lmxlbmd0aCkKICAgICAgICByZXR1cm4gZTU7CiAgICAgIGxldCBpNCA9IFtdLCBuOCA9IDEsIHM4ID0gZTUubGVuZ3RoID8gZTVbMF0gOiBudWxsOwogICAgICBmb3IgKGxldCBsNyA9IDAsIGYxMSA9IDAsIHUxMSA9IDA7IDsgbDcrKykgewogICAgICAgIGxldCBvNCA9IGw3IDwgdDQubGVuZ3RoID8gdDRbbDddIDogbnVsbCwgYzE3ID0gbzQgPyBvNC5mcm9tQSA6IDFlOTsKICAgICAgICBpZiAoYzE3IC0gZjExID49IHIzKQogICAgICAgICAgZm9yICg7IHM4ICYmIHM4LmZyb20gPCBjMTc7ICkgewogICAgICAgICAgICBsZXQgYTQgPSBzODsKICAgICAgICAgICAgaWYgKGYxMSA+PSBhNC5mcm9tIHx8IGMxNyA8PSBhNC50byB8fCB1MTEpIHsKICAgICAgICAgICAgICBsZXQgeTE3ID0gTWF0aC5tYXgoYTQuZnJvbSwgZjExKSAtIHUxMSwgZDE1ID0gTWF0aC5taW4oYTQudG8sIGMxNykgLSB1MTE7CiAgICAgICAgICAgICAgYTQgPSB5MTcgPj0gZDE1ID8gbnVsbCA6IG5ldyBHNSh5MTcsIGQxNSwgYTQudHJlZSwgYTQub2Zmc2V0ICsgdTExLCBsNyA+IDAsICEhbzQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhNCAmJiBpNC5wdXNoKGE0KSwgczgudG8gPiBjMTcpCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHM4ID0gbjggPCBlNS5sZW5ndGggPyBlNVtuOCsrXSA6IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgaWYgKCFvNCkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGYxMSA9IG80LnRvQSwgdTExID0gbzQudG9BIC0gbzQudG9COwogICAgICB9CiAgICAgIHJldHVybiBpNDsKICAgIH0KICB9OwogIHZhciB5ZTUgPSBjbGFzcyB7CiAgICBzdGFydFBhcnNlKGU1LCB0NCwgcjMpIHsKICAgICAgcmV0dXJuIHR5cGVvZiBlNSA9PSAic3RyaW5nIiAmJiAoZTUgPSBuZXcgbGU0KGU1KSksIHIzID0gcjMgPyByMy5sZW5ndGggPyByMy5tYXAoKGk0KSA9PiBuZXcgQjQoaTQuZnJvbSwgaTQudG8pKSA6IFtuZXcgQjQoMCwgMCldIDogW25ldyBCNCgwLCBlNS5sZW5ndGgpXSwgdGhpcy5jcmVhdGVQYXJzZShlNSwgdDQgfHwgW10sIHIzKTsKICAgIH0KICAgIHBhcnNlKGU1LCB0NCwgcjMpIHsKICAgICAgbGV0IGk0ID0gdGhpcy5zdGFydFBhcnNlKGU1LCB0NCwgcjMpOwogICAgICBmb3IgKDsgOyApIHsKICAgICAgICBsZXQgbjggPSBpNC5hZHZhbmNlKCk7CiAgICAgICAgaWYgKG44KQogICAgICAgICAgcmV0dXJuIG44OwogICAgICB9CiAgICB9CiAgfTsKICB2YXIgbGU0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUpIHsKICAgICAgdGhpcy5zdHJpbmcgPSBlNTsKICAgIH0KICAgIGdldCBsZW5ndGgoKSB7CiAgICAgIHJldHVybiB0aGlzLnN0cmluZy5sZW5ndGg7CiAgICB9CiAgICBjaHVuayhlNSkgewogICAgICByZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UoZTUpOwogICAgfQogICAgZ2V0IGxpbmVDaHVua3MoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJlYWQoZTUsIHQ0KSB7CiAgICAgIHJldHVybiB0aGlzLnN0cmluZy5zbGljZShlNSwgdDQpOwogICAgfQogIH07CiAgZnVuY3Rpb24gTmUzKGgxMCkgewogICAgcmV0dXJuIChlNSwgdDQsIHIzLCBpNCkgPT4gbmV3IG9lMyhlNSwgaDEwLCB0NCwgcjMsIGk0KTsKICB9CiAgdmFyIHJlNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgcjMsIGk0LCBuOCkgewogICAgICB0aGlzLnBhcnNlciA9IGU1LCB0aGlzLnBhcnNlID0gdDQsIHRoaXMub3ZlcmxheSA9IHIzLCB0aGlzLnRhcmdldCA9IGk0LCB0aGlzLnJhbmdlcyA9IG44OwogICAgfQogIH07CiAgdmFyIGhlNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgcjMsIGk0LCBuOCwgczgsIGw3KSB7CiAgICAgIHRoaXMucGFyc2VyID0gZTUsIHRoaXMucHJlZGljYXRlID0gdDQsIHRoaXMubW91bnRzID0gcjMsIHRoaXMuaW5kZXggPSBpNCwgdGhpcy5zdGFydCA9IG44LCB0aGlzLnRhcmdldCA9IHM4LCB0aGlzLnByZXYgPSBsNywgdGhpcy5kZXB0aCA9IDAsIHRoaXMucmFuZ2VzID0gW107CiAgICB9CiAgfTsKICB2YXIgZmU0ID0gbmV3IHczKHsgcGVyTm9kZTogdHJ1ZSB9KTsKICB2YXIgb2UzID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCByMywgaTQsIG44KSB7CiAgICAgIHRoaXMubmVzdCA9IHQ0LCB0aGlzLmlucHV0ID0gcjMsIHRoaXMuZnJhZ21lbnRzID0gaTQsIHRoaXMucmFuZ2VzID0gbjgsIHRoaXMuaW5uZXIgPSBbXSwgdGhpcy5pbm5lckRvbmUgPSAwLCB0aGlzLmJhc2VUcmVlID0gbnVsbCwgdGhpcy5zdG9wcGVkQXQgPSBudWxsLCB0aGlzLmJhc2VQYXJzZSA9IGU1OwogICAgfQogICAgYWR2YW5jZSgpIHsKICAgICAgaWYgKHRoaXMuYmFzZVBhcnNlKSB7CiAgICAgICAgbGV0IHIzID0gdGhpcy5iYXNlUGFyc2UuYWR2YW5jZSgpOwogICAgICAgIGlmICghcjMpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBpZiAodGhpcy5iYXNlUGFyc2UgPSBudWxsLCB0aGlzLmJhc2VUcmVlID0gcjMsIHRoaXMuc3RhcnRJbm5lcigpLCB0aGlzLnN0b3BwZWRBdCAhPSBudWxsKQogICAgICAgICAgZm9yIChsZXQgaTQgb2YgdGhpcy5pbm5lcikKICAgICAgICAgICAgaTQucGFyc2Uuc3RvcEF0KHRoaXMuc3RvcHBlZEF0KTsKICAgICAgfQogICAgICBpZiAodGhpcy5pbm5lckRvbmUgPT0gdGhpcy5pbm5lci5sZW5ndGgpIHsKICAgICAgICBsZXQgcjMgPSB0aGlzLmJhc2VUcmVlOwogICAgICAgIHJldHVybiB0aGlzLnN0b3BwZWRBdCAhPSBudWxsICYmIChyMyA9IG5ldyBQMyhyMy50eXBlLCByMy5jaGlsZHJlbiwgcjMucG9zaXRpb25zLCByMy5sZW5ndGgsIHIzLnByb3BWYWx1ZXMuY29uY2F0KFtbZmU0LCB0aGlzLnN0b3BwZWRBdF1dKSkpLCByMzsKICAgICAgfQogICAgICBsZXQgZTUgPSB0aGlzLmlubmVyW3RoaXMuaW5uZXJEb25lXSwgdDQgPSBlNS5wYXJzZS5hZHZhbmNlKCk7CiAgICAgIGlmICh0NCkgewogICAgICAgIHRoaXMuaW5uZXJEb25lKys7CiAgICAgICAgbGV0IHIzID0gT2JqZWN0LmFzc2lnbigvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgZTUudGFyZ2V0LnByb3BzKTsKICAgICAgICByM1t3My5tb3VudGVkLmlkXSA9IG5ldyBuZTQodDQsIGU1Lm92ZXJsYXksIGU1LnBhcnNlciksIGU1LnRhcmdldC5wcm9wcyA9IHIzOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZ2V0IHBhcnNlZFBvcygpIHsKICAgICAgaWYgKHRoaXMuYmFzZVBhcnNlKQogICAgICAgIHJldHVybiAwOwogICAgICBsZXQgZTUgPSB0aGlzLmlucHV0Lmxlbmd0aDsKICAgICAgZm9yIChsZXQgdDQgPSB0aGlzLmlubmVyRG9uZTsgdDQgPCB0aGlzLmlubmVyLmxlbmd0aDsgdDQrKykKICAgICAgICB0aGlzLmlubmVyW3Q0XS5yYW5nZXNbMF0uZnJvbSA8IGU1ICYmIChlNSA9IE1hdGgubWluKGU1LCB0aGlzLmlubmVyW3Q0XS5wYXJzZS5wYXJzZWRQb3MpKTsKICAgICAgcmV0dXJuIGU1OwogICAgfQogICAgc3RvcEF0KGU1KSB7CiAgICAgIGlmICh0aGlzLnN0b3BwZWRBdCA9IGU1LCB0aGlzLmJhc2VQYXJzZSkKICAgICAgICB0aGlzLmJhc2VQYXJzZS5zdG9wQXQoZTUpOwogICAgICBlbHNlCiAgICAgICAgZm9yIChsZXQgdDQgPSB0aGlzLmlubmVyRG9uZTsgdDQgPCB0aGlzLmlubmVyLmxlbmd0aDsgdDQrKykKICAgICAgICAgIHRoaXMuaW5uZXJbdDRdLnBhcnNlLnN0b3BBdChlNSk7CiAgICB9CiAgICBzdGFydElubmVyKCkgewogICAgICBsZXQgZTUgPSBuZXcgdWU0KHRoaXMuZnJhZ21lbnRzKSwgdDQgPSBudWxsLCByMyA9IG51bGwsIGk0ID0gbmV3IFY1KG5ldyBJMyh0aGlzLmJhc2VUcmVlLCB0aGlzLnJhbmdlc1swXS5mcm9tLCAwLCBudWxsKSwgQTQuSW5jbHVkZUFub255bW91cyB8IEE0Lklnbm9yZU1vdW50cyk7CiAgICAgIGU6CiAgICAgICAgZm9yIChsZXQgbjgsIHM4OyB0aGlzLnN0b3BwZWRBdCA9PSBudWxsIHx8IGk0LmZyb20gPCB0aGlzLnN0b3BwZWRBdDsgKSB7CiAgICAgICAgICBsZXQgbDcgPSB0cnVlLCBmMTE7CiAgICAgICAgICBpZiAoZTUuaGFzTm9kZShpNCkpIHsKICAgICAgICAgICAgaWYgKHQ0KSB7CiAgICAgICAgICAgICAgbGV0IHUxMSA9IHQ0Lm1vdW50cy5maW5kKChvNCkgPT4gbzQuZnJhZy5mcm9tIDw9IGk0LmZyb20gJiYgbzQuZnJhZy50byA+PSBpNC50byAmJiBvNC5tb3VudC5vdmVybGF5KTsKICAgICAgICAgICAgICBpZiAodTExKQogICAgICAgICAgICAgICAgZm9yIChsZXQgbzQgb2YgdTExLm1vdW50Lm92ZXJsYXkpIHsKICAgICAgICAgICAgICAgICAgbGV0IGMxNyA9IG80LmZyb20gKyB1MTEucG9zLCBhNCA9IG80LnRvICsgdTExLnBvczsKICAgICAgICAgICAgICAgICAgYzE3ID49IGk0LmZyb20gJiYgYTQgPD0gaTQudG8gJiYgIXQ0LnJhbmdlcy5zb21lKCh5MTcpID0+IHkxNy5mcm9tIDwgYTQgJiYgeTE3LnRvID4gYzE3KSAmJiB0NC5yYW5nZXMucHVzaCh7IGZyb206IGMxNywgdG86IGE0IH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGw3ID0gZmFsc2U7CiAgICAgICAgICB9IGVsc2UgaWYgKHIzICYmIChzOCA9IFBlNShyMy5yYW5nZXMsIGk0LmZyb20sIGk0LnRvKSkpCiAgICAgICAgICAgIGw3ID0gczggIT0gMjsKICAgICAgICAgIGVsc2UgaWYgKCFpNC50eXBlLmlzQW5vbnltb3VzICYmIGk0LmZyb20gPCBpNC50byAmJiAobjggPSB0aGlzLm5lc3QoaTQsIHRoaXMuaW5wdXQpKSkgewogICAgICAgICAgICBpNC50cmVlIHx8IHplMyhpNCk7CiAgICAgICAgICAgIGxldCB1MTEgPSBlNS5maW5kTW91bnRzKGk0LmZyb20sIG44LnBhcnNlcik7CiAgICAgICAgICAgIGlmICh0eXBlb2Ygbjgub3ZlcmxheSA9PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgIHQ0ID0gbmV3IGhlNChuOC5wYXJzZXIsIG44Lm92ZXJsYXksIHUxMSwgdGhpcy5pbm5lci5sZW5ndGgsIGk0LmZyb20sIGk0LnRyZWUsIHQ0KTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgbGV0IG80ID0gd2U1KHRoaXMucmFuZ2VzLCBuOC5vdmVybGF5IHx8IFtuZXcgQjQoaTQuZnJvbSwgaTQudG8pXSk7CiAgICAgICAgICAgICAgbzQubGVuZ3RoICYmIHRoaXMuaW5uZXIucHVzaChuZXcgcmU0KG44LnBhcnNlciwgbjgucGFyc2VyLnN0YXJ0UGFyc2UodGhpcy5pbnB1dCwgdmU1KHUxMSwgbzQpLCBvNCksIG44Lm92ZXJsYXkgPyBuOC5vdmVybGF5Lm1hcCgoYzE3KSA9PiBuZXcgQjQoYzE3LmZyb20gLSBpNC5mcm9tLCBjMTcudG8gLSBpNC5mcm9tKSkgOiBudWxsLCBpNC50cmVlLCBvNCkpLCBuOC5vdmVybGF5ID8gbzQubGVuZ3RoICYmIChyMyA9IHsgcmFuZ2VzOiBvNCwgZGVwdGg6IDAsIHByZXY6IHIzIH0pIDogbDcgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIHQ0ICYmIChmMTEgPSB0NC5wcmVkaWNhdGUoaTQpKSAmJiAoZjExID09PSB0cnVlICYmIChmMTEgPSBuZXcgQjQoaTQuZnJvbSwgaTQudG8pKSwgZjExLmZyb20gPCBmMTEudG8gJiYgdDQucmFuZ2VzLnB1c2goZjExKSk7CiAgICAgICAgICBpZiAobDcgJiYgaTQuZmlyc3RDaGlsZCgpKQogICAgICAgICAgICB0NCAmJiB0NC5kZXB0aCsrLCByMyAmJiByMy5kZXB0aCsrOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBmb3IgKDsgIWk0Lm5leHRTaWJsaW5nKCk7ICkgewogICAgICAgICAgICAgIGlmICghaTQucGFyZW50KCkpCiAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgIGlmICh0NCAmJiAhLS10NC5kZXB0aCkgewogICAgICAgICAgICAgICAgbGV0IHUxMSA9IHdlNSh0aGlzLnJhbmdlcywgdDQucmFuZ2VzKTsKICAgICAgICAgICAgICAgIHUxMS5sZW5ndGggJiYgdGhpcy5pbm5lci5zcGxpY2UodDQuaW5kZXgsIDAsIG5ldyByZTQodDQucGFyc2VyLCB0NC5wYXJzZXIuc3RhcnRQYXJzZSh0aGlzLmlucHV0LCB2ZTUodDQubW91bnRzLCB1MTEpLCB1MTEpLCB0NC5yYW5nZXMubWFwKChvNCkgPT4gbmV3IEI0KG80LmZyb20gLSB0NC5zdGFydCwgbzQudG8gLSB0NC5zdGFydCkpLCB0NC50YXJnZXQsIHUxMSkpLCB0NCA9IHQ0LnByZXY7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHIzICYmICEtLXIzLmRlcHRoICYmIChyMyA9IHIzLnByZXYpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogIH07CiAgZnVuY3Rpb24gUGU1KGgxMCwgZTUsIHQ0KSB7CiAgICBmb3IgKGxldCByMyBvZiBoMTApIHsKICAgICAgaWYgKHIzLmZyb20gPj0gdDQpCiAgICAgICAgYnJlYWs7CiAgICAgIGlmIChyMy50byA+IGU1KQogICAgICAgIHJldHVybiByMy5mcm9tIDw9IGU1ICYmIHIzLnRvID49IHQ0ID8gMiA6IDE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CiAgZnVuY3Rpb24geGU1KGgxMCwgZTUsIHQ0LCByMywgaTQsIG44KSB7CiAgICBpZiAoZTUgPCB0NCkgewogICAgICBsZXQgczggPSBoMTAuYnVmZmVyW2U1ICsgMV0sIGw3ID0gaDEwLmJ1ZmZlclt0NCAtIDJdOwogICAgICByMy5wdXNoKGgxMC5zbGljZShlNSwgdDQsIHM4LCBsNykpLCBpNC5wdXNoKHM4IC0gbjgpOwogICAgfQogIH0KICBmdW5jdGlvbiB6ZTMoaDEwKSB7CiAgICBsZXQgeyBub2RlOiBlNSB9ID0gaDEwLCB0NCA9IDA7CiAgICBkbwogICAgICBoMTAucGFyZW50KCksIHQ0Kys7CiAgICB3aGlsZSAoIWgxMC50cmVlKTsKICAgIGxldCByMyA9IDAsIGk0ID0gaDEwLnRyZWUsIG44ID0gMDsKICAgIGZvciAoOyBuOCA9IGk0LnBvc2l0aW9uc1tyM10gKyBoMTAuZnJvbSwgIShuOCA8PSBlNS5mcm9tICYmIG44ICsgaTQuY2hpbGRyZW5bcjNdLmxlbmd0aCA+PSBlNS50byk7IHIzKyspCiAgICAgIDsKICAgIGxldCBzOCA9IGk0LmNoaWxkcmVuW3IzXSwgbDcgPSBzOC5idWZmZXI7CiAgICBmdW5jdGlvbiBmMTEodTExLCBvNCwgYzE3LCBhNCwgeTE3KSB7CiAgICAgIGxldCBkMTUgPSB1MTE7CiAgICAgIGZvciAoOyBsN1tkMTUgKyAyXSArIG44IDw9IGU1LmZyb207ICkKICAgICAgICBkMTUgPSBsN1tkMTUgKyAzXTsKICAgICAgbGV0IFMyMSA9IFtdLCBEMjAgPSBbXTsKICAgICAgeGU1KHM4LCB1MTEsIGQxNSwgUzIxLCBEMjAsIGE0KTsKICAgICAgbGV0IEUxNSA9IGw3W2QxNSArIDFdLCBGMjIgPSBsN1tkMTUgKyAyXSwgXzI1ID0gRTE1ICsgbjggPT0gZTUuZnJvbSAmJiBGMjIgKyBuOCA9PSBlNS50byAmJiBsN1tkMTVdID09IGU1LnR5cGUuaWQ7CiAgICAgIHJldHVybiBTMjEucHVzaChfMjUgPyBlNS50b1RyZWUoKSA6IGYxMShkMTUgKyA0LCBsN1tkMTUgKyAzXSwgczguc2V0LnR5cGVzW2w3W2QxNV1dLCBFMTUsIEYyMiAtIEUxNSkpLCBEMjAucHVzaChFMTUgLSBhNCksIHhlNShzOCwgbDdbZDE1ICsgM10sIG80LCBTMjEsIEQyMCwgYTQpLCBuZXcgUDMoYzE3LCBTMjEsIEQyMCwgeTE3KTsKICAgIH0KICAgIGk0LmNoaWxkcmVuW3IzXSA9IGYxMSgwLCBsNy5sZW5ndGgsIE4zLm5vbmUsIDAsIHM4Lmxlbmd0aCk7CiAgICBmb3IgKGxldCB1MTEgPSAwOyB1MTEgPD0gdDQ7IHUxMSsrKQogICAgICBoMTAuY2hpbGRBZnRlcihlNS5mcm9tKTsKICB9CiAgdmFyIGllNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCkgewogICAgICB0aGlzLm9mZnNldCA9IHQ0LCB0aGlzLmRvbmUgPSBmYWxzZSwgdGhpcy5jdXJzb3IgPSBlNS5jdXJzb3IoQTQuSW5jbHVkZUFub255bW91cyB8IEE0Lklnbm9yZU1vdW50cyk7CiAgICB9CiAgICBtb3ZlVG8oZTUpIHsKICAgICAgbGV0IHsgY3Vyc29yOiB0NCB9ID0gdGhpcywgcjMgPSBlNSAtIHRoaXMub2Zmc2V0OwogICAgICBmb3IgKDsgIXRoaXMuZG9uZSAmJiB0NC5mcm9tIDwgcjM7ICkKICAgICAgICB0NC50byA+PSBlNSAmJiB0NC5lbnRlcihyMywgMSwgQTQuSWdub3JlT3ZlcmxheXMgfCBBNC5FeGNsdWRlQnVmZmVycykgfHwgdDQubmV4dChmYWxzZSkgfHwgKHRoaXMuZG9uZSA9IHRydWUpOwogICAgfQogICAgaGFzTm9kZShlNSkgewogICAgICBpZiAodGhpcy5tb3ZlVG8oZTUuZnJvbSksICF0aGlzLmRvbmUgJiYgdGhpcy5jdXJzb3IuZnJvbSArIHRoaXMub2Zmc2V0ID09IGU1LmZyb20gJiYgdGhpcy5jdXJzb3IudHJlZSkKICAgICAgICBmb3IgKGxldCB0NCA9IHRoaXMuY3Vyc29yLnRyZWU7IDsgKSB7CiAgICAgICAgICBpZiAodDQgPT0gZTUudHJlZSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodDQuY2hpbGRyZW4ubGVuZ3RoICYmIHQ0LnBvc2l0aW9uc1swXSA9PSAwICYmIHQ0LmNoaWxkcmVuWzBdIGluc3RhbmNlb2YgUDMpCiAgICAgICAgICAgIHQ0ID0gdDQuY2hpbGRyZW5bMF07CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH07CiAgdmFyIHVlNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1KSB7CiAgICAgIHZhciB0NDsKICAgICAgaWYgKHRoaXMuZnJhZ21lbnRzID0gZTUsIHRoaXMuY3VyVG8gPSAwLCB0aGlzLmZyYWdJID0gMCwgZTUubGVuZ3RoKSB7CiAgICAgICAgbGV0IHIzID0gdGhpcy5jdXJGcmFnID0gZTVbMF07CiAgICAgICAgdGhpcy5jdXJUbyA9ICh0NCA9IHIzLnRyZWUucHJvcChmZTQpKSAhPT0gbnVsbCAmJiB0NCAhPT0gdm9pZCAwID8gdDQgOiByMy50bywgdGhpcy5pbm5lciA9IG5ldyBpZTQocjMudHJlZSwgLXIzLm9mZnNldCk7CiAgICAgIH0gZWxzZQogICAgICAgIHRoaXMuY3VyRnJhZyA9IHRoaXMuaW5uZXIgPSBudWxsOwogICAgfQogICAgaGFzTm9kZShlNSkgewogICAgICBmb3IgKDsgdGhpcy5jdXJGcmFnICYmIGU1LmZyb20gPj0gdGhpcy5jdXJUbzsgKQogICAgICAgIHRoaXMubmV4dEZyYWcoKTsKICAgICAgcmV0dXJuIHRoaXMuY3VyRnJhZyAmJiB0aGlzLmN1ckZyYWcuZnJvbSA8PSBlNS5mcm9tICYmIHRoaXMuY3VyVG8gPj0gZTUudG8gJiYgdGhpcy5pbm5lci5oYXNOb2RlKGU1KTsKICAgIH0KICAgIG5leHRGcmFnKCkgewogICAgICB2YXIgZTU7CiAgICAgIGlmICh0aGlzLmZyYWdJKyssIHRoaXMuZnJhZ0kgPT0gdGhpcy5mcmFnbWVudHMubGVuZ3RoKQogICAgICAgIHRoaXMuY3VyRnJhZyA9IHRoaXMuaW5uZXIgPSBudWxsOwogICAgICBlbHNlIHsKICAgICAgICBsZXQgdDQgPSB0aGlzLmN1ckZyYWcgPSB0aGlzLmZyYWdtZW50c1t0aGlzLmZyYWdJXTsKICAgICAgICB0aGlzLmN1clRvID0gKGU1ID0gdDQudHJlZS5wcm9wKGZlNCkpICE9PSBudWxsICYmIGU1ICE9PSB2b2lkIDAgPyBlNSA6IHQ0LnRvLCB0aGlzLmlubmVyID0gbmV3IGllNCh0NC50cmVlLCAtdDQub2Zmc2V0KTsKICAgICAgfQogICAgfQogICAgZmluZE1vdW50cyhlNSwgdDQpIHsKICAgICAgdmFyIHIzOwogICAgICBsZXQgaTQgPSBbXTsKICAgICAgaWYgKHRoaXMuaW5uZXIpIHsKICAgICAgICB0aGlzLmlubmVyLmN1cnNvci5tb3ZlVG8oZTUsIDEpOwogICAgICAgIGZvciAobGV0IG44ID0gdGhpcy5pbm5lci5jdXJzb3Iubm9kZTsgbjg7IG44ID0gbjgucGFyZW50KSB7CiAgICAgICAgICBsZXQgczggPSAocjMgPSBuOC50cmVlKSA9PT0gbnVsbCB8fCByMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcjMucHJvcCh3My5tb3VudGVkKTsKICAgICAgICAgIGlmIChzOCAmJiBzOC5wYXJzZXIgPT0gdDQpCiAgICAgICAgICAgIGZvciAobGV0IGw3ID0gdGhpcy5mcmFnSTsgbDcgPCB0aGlzLmZyYWdtZW50cy5sZW5ndGg7IGw3KyspIHsKICAgICAgICAgICAgICBsZXQgZjExID0gdGhpcy5mcmFnbWVudHNbbDddOwogICAgICAgICAgICAgIGlmIChmMTEuZnJvbSA+PSBuOC50bykKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGYxMS50cmVlID09IHRoaXMuY3VyRnJhZy50cmVlICYmIGk0LnB1c2goeyBmcmFnOiBmMTEsIHBvczogbjguZnJvbSAtIGYxMS5vZmZzZXQsIG1vdW50OiBzOCB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gaTQ7CiAgICB9CiAgfTsKICBmdW5jdGlvbiB3ZTUoaDEwLCBlNSkgewogICAgbGV0IHQ0ID0gbnVsbCwgcjMgPSBlNTsKICAgIGZvciAobGV0IGk0ID0gMSwgbjggPSAwOyBpNCA8IGgxMC5sZW5ndGg7IGk0KyspIHsKICAgICAgbGV0IHM4ID0gaDEwW2k0IC0gMV0udG8sIGw3ID0gaDEwW2k0XS5mcm9tOwogICAgICBmb3IgKDsgbjggPCByMy5sZW5ndGg7IG44KyspIHsKICAgICAgICBsZXQgZjExID0gcjNbbjhdOwogICAgICAgIGlmIChmMTEuZnJvbSA+PSBsNykKICAgICAgICAgIGJyZWFrOwogICAgICAgIGYxMS50byA8PSBzOCB8fCAodDQgfHwgKHIzID0gdDQgPSBlNS5zbGljZSgpKSwgZjExLmZyb20gPCBzOCA/ICh0NFtuOF0gPSBuZXcgQjQoZjExLmZyb20sIHM4KSwgZjExLnRvID4gbDcgJiYgdDQuc3BsaWNlKG44ICsgMSwgMCwgbmV3IEI0KGw3LCBmMTEudG8pKSkgOiBmMTEudG8gPiBsNyA/IHQ0W244LS1dID0gbmV3IEI0KGw3LCBmMTEudG8pIDogdDQuc3BsaWNlKG44LS0sIDEpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHIzOwogIH0KICBmdW5jdGlvbiBCZTMoaDEwLCBlNSwgdDQsIHIzKSB7CiAgICBsZXQgaTQgPSAwLCBuOCA9IDAsIHM4ID0gZmFsc2UsIGw3ID0gZmFsc2UsIGYxMSA9IC0xZTksIHUxMSA9IFtdOwogICAgZm9yICg7IDsgKSB7CiAgICAgIGxldCBvNCA9IGk0ID09IGgxMC5sZW5ndGggPyAxZTkgOiBzOCA/IGgxMFtpNF0udG8gOiBoMTBbaTRdLmZyb20sIGMxNyA9IG44ID09IGU1Lmxlbmd0aCA/IDFlOSA6IGw3ID8gZTVbbjhdLnRvIDogZTVbbjhdLmZyb207CiAgICAgIGlmIChzOCAhPSBsNykgewogICAgICAgIGxldCBhNCA9IE1hdGgubWF4KGYxMSwgdDQpLCB5MTcgPSBNYXRoLm1pbihvNCwgYzE3LCByMyk7CiAgICAgICAgYTQgPCB5MTcgJiYgdTExLnB1c2gobmV3IEI0KGE0LCB5MTcpKTsKICAgICAgfQogICAgICBpZiAoZjExID0gTWF0aC5taW4obzQsIGMxNyksIGYxMSA9PSAxZTkpCiAgICAgICAgYnJlYWs7CiAgICAgIG80ID09IGYxMSAmJiAoczggPyAoczggPSBmYWxzZSwgaTQrKykgOiBzOCA9IHRydWUpLCBjMTcgPT0gZjExICYmIChsNyA/IChsNyA9IGZhbHNlLCBuOCsrKSA6IGw3ID0gdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gdTExOwogIH0KICBmdW5jdGlvbiB2ZTUoaDEwLCBlNSkgewogICAgbGV0IHQ0ID0gW107CiAgICBmb3IgKGxldCB7IHBvczogcjMsIG1vdW50OiBpNCwgZnJhZzogbjggfSBvZiBoMTApIHsKICAgICAgbGV0IHM4ID0gcjMgKyAoaTQub3ZlcmxheSA/IGk0Lm92ZXJsYXlbMF0uZnJvbSA6IDApLCBsNyA9IHM4ICsgaTQudHJlZS5sZW5ndGgsIGYxMSA9IE1hdGgubWF4KG44LmZyb20sIHM4KSwgdTExID0gTWF0aC5taW4objgudG8sIGw3KTsKICAgICAgaWYgKGk0Lm92ZXJsYXkpIHsKICAgICAgICBsZXQgbzQgPSBpNC5vdmVybGF5Lm1hcCgoYTQpID0+IG5ldyBCNChhNC5mcm9tICsgcjMsIGE0LnRvICsgcjMpKSwgYzE3ID0gQmUzKGU1LCBvNCwgZjExLCB1MTEpOwogICAgICAgIGZvciAobGV0IGE0ID0gMCwgeTE3ID0gZjExOyA7IGE0KyspIHsKICAgICAgICAgIGxldCBkMTUgPSBhNCA9PSBjMTcubGVuZ3RoLCBTMjEgPSBkMTUgPyB1MTEgOiBjMTdbYTRdLmZyb207CiAgICAgICAgICBpZiAoUzIxID4geTE3ICYmIHQ0LnB1c2gobmV3IEc1KHkxNywgUzIxLCBpNC50cmVlLCAtczgsIG44LmZyb20gPj0geTE3IHx8IG44Lm9wZW5TdGFydCwgbjgudG8gPD0gUzIxIHx8IG44Lm9wZW5FbmQpKSwgZDE1KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIHkxNyA9IGMxN1thNF0udG87CiAgICAgICAgfQogICAgICB9IGVsc2UKICAgICAgICB0NC5wdXNoKG5ldyBHNShmMTEsIHUxMSwgaTQudHJlZSwgLXM4LCBuOC5mcm9tID49IHM4IHx8IG44Lm9wZW5TdGFydCwgbjgudG8gPD0gbDcgfHwgbjgub3BlbkVuZCkpOwogICAgfQogICAgcmV0dXJuIHQ0OwogIH0KCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvQGxlemVyL2hpZ2hsaWdodEAxLjEuMS9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFiR1Y2WlhJdlkyOXRiVzl1L2Rlbm8vaGlnaGxpZ2h0LmpzCiAgdmFyIEwyID0gMDsKICB2YXIgZiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBhNCwgaTQpIHsKICAgICAgdGhpcy5zZXQgPSB0NCwgdGhpcy5iYXNlID0gYTQsIHRoaXMubW9kaWZpZWQgPSBpNCwgdGhpcy5pZCA9IEwyKys7CiAgICB9CiAgICBzdGF0aWMgZGVmaW5lKHQ0KSB7CiAgICAgIGlmICh0ND8uYmFzZSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgZGVyaXZlIGZyb20gYSBtb2RpZmllZCB0YWciKTsKICAgICAgbGV0IGE0ID0gbmV3IGYoW10sIG51bGwsIFtdKTsKICAgICAgaWYgKGE0LnNldC5wdXNoKGE0KSwgdDQpCiAgICAgICAgZm9yIChsZXQgaTQgb2YgdDQuc2V0KQogICAgICAgICAgYTQuc2V0LnB1c2goaTQpOwogICAgICByZXR1cm4gYTQ7CiAgICB9CiAgICBzdGF0aWMgZGVmaW5lTW9kaWZpZXIoKSB7CiAgICAgIGxldCB0NCA9IG5ldyB2MigpOwogICAgICByZXR1cm4gKGE0KSA9PiBhNC5tb2RpZmllZC5pbmRleE9mKHQ0KSA+IC0xID8gYTQgOiB2Mi5nZXQoYTQuYmFzZSB8fCBhNCwgYTQubW9kaWZpZWQuY29uY2F0KHQ0KS5zb3J0KChpNCwgbDcpID0+IGk0LmlkIC0gbDcuaWQpKTsKICAgIH0KICB9OwogIHZhciBRMyA9IDA7CiAgdmFyIHYyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHRoaXMuaW5zdGFuY2VzID0gW10sIHRoaXMuaWQgPSBRMysrOwogICAgfQogICAgc3RhdGljIGdldCh0NCwgYTQpIHsKICAgICAgaWYgKCFhNC5sZW5ndGgpCiAgICAgICAgcmV0dXJuIHQ0OwogICAgICBsZXQgaTQgPSBhNFswXS5pbnN0YW5jZXMuZmluZCgobzQpID0+IG80LmJhc2UgPT0gdDQgJiYgVTMoYTQsIG80Lm1vZGlmaWVkKSk7CiAgICAgIGlmIChpNCkKICAgICAgICByZXR1cm4gaTQ7CiAgICAgIGxldCBsNyA9IFtdLCBzOCA9IG5ldyBmKGw3LCB0NCwgYTQpOwogICAgICBmb3IgKGxldCBvNCBvZiBhNCkKICAgICAgICBvNC5pbnN0YW5jZXMucHVzaChzOCk7CiAgICAgIGxldCBjMTcgPSBWNihhNCk7CiAgICAgIGZvciAobGV0IG80IG9mIHQ0LnNldCkKICAgICAgICBmb3IgKGxldCBkMTUgb2YgYzE3KQogICAgICAgICAgbDcucHVzaCh2Mi5nZXQobzQsIGQxNSkpOwogICAgICByZXR1cm4gczg7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBVMyhyMywgdDQpIHsKICAgIHJldHVybiByMy5sZW5ndGggPT0gdDQubGVuZ3RoICYmIHIzLmV2ZXJ5KChhNCwgaTQpID0+IGE0ID09IHQ0W2k0XSk7CiAgfQogIGZ1bmN0aW9uIFY2KHIzKSB7CiAgICBsZXQgdDQgPSBbcjNdOwogICAgZm9yIChsZXQgYTQgPSAwOyBhNCA8IHIzLmxlbmd0aDsgYTQrKykKICAgICAgZm9yIChsZXQgaTQgb2YgVjYocjMuc2xpY2UoMCwgYTQpLmNvbmNhdChyMy5zbGljZShhNCArIDEpKSkpCiAgICAgICAgdDQucHVzaChpNCk7CiAgICByZXR1cm4gdDQ7CiAgfQogIGZ1bmN0aW9uICQ1KHIzKSB7CiAgICBsZXQgdDQgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGZvciAobGV0IGE0IGluIHIzKSB7CiAgICAgIGxldCBpNCA9IHIzW2E0XTsKICAgICAgQXJyYXkuaXNBcnJheShpNCkgfHwgKGk0ID0gW2k0XSk7CiAgICAgIGZvciAobGV0IGw3IG9mIGE0LnNwbGl0KCIgIikpCiAgICAgICAgaWYgKGw3KSB7CiAgICAgICAgICBsZXQgczggPSBbXSwgYzE3ID0gMiwgbzQgPSBsNzsKICAgICAgICAgIGZvciAobGV0IHAxOCA9IDA7IDsgKSB7CiAgICAgICAgICAgIGlmIChvNCA9PSAiLi4uIiAmJiBwMTggPiAwICYmIHAxOCArIDMgPT0gbDcubGVuZ3RoKSB7CiAgICAgICAgICAgICAgYzE3ID0gMTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgaDEwID0gL14iKD86W14iXFxdfFxcLikqPyJ8W15cLyFdKy8uZXhlYyhvNCk7CiAgICAgICAgICAgIGlmICghaDEwKQogICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHBhdGg6ICIgKyBsNyk7CiAgICAgICAgICAgIGlmIChzOC5wdXNoKGgxMFswXSA9PSAiKiIgPyAiIiA6IGgxMFswXVswXSA9PSAnIicgPyBKU09OLnBhcnNlKGgxMFswXSkgOiBoMTBbMF0pLCBwMTggKz0gaDEwWzBdLmxlbmd0aCwgcDE4ID09IGw3Lmxlbmd0aCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgbGV0IE4xNyA9IGw3W3AxOCsrXTsKICAgICAgICAgICAgaWYgKHAxOCA9PSBsNy5sZW5ndGggJiYgTjE3ID09ICIhIikgewogICAgICAgICAgICAgIGMxNyA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKE4xNyAhPSAiLyIpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgcGF0aDogIiArIGw3KTsKICAgICAgICAgICAgbzQgPSBsNy5zbGljZShwMTgpOwogICAgICAgICAgfQogICAgICAgICAgbGV0IGQxNSA9IHM4Lmxlbmd0aCAtIDEsIGcxMiA9IHM4W2QxNV07CiAgICAgICAgICBpZiAoIWcxMikKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgcGF0aDogIiArIGw3KTsKICAgICAgICAgIGxldCBPMTUgPSBuZXcgTTQoaTQsIGMxNywgZDE1ID4gMCA/IHM4LnNsaWNlKDAsIGQxNSkgOiBudWxsKTsKICAgICAgICAgIHQ0W2cxMl0gPSBPMTUuc29ydCh0NFtnMTJdKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gejUuYWRkKHQ0KTsKICB9CiAgdmFyIHo1ID0gbmV3IHczKCk7CiAgdmFyIE00ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGE0LCBpNCwgbDcpIHsKICAgICAgdGhpcy50YWdzID0gdDQsIHRoaXMubW9kZSA9IGE0LCB0aGlzLmNvbnRleHQgPSBpNCwgdGhpcy5uZXh0ID0gbDc7CiAgICB9CiAgICBnZXQgb3BhcXVlKCkgewogICAgICByZXR1cm4gdGhpcy5tb2RlID09IDA7CiAgICB9CiAgICBnZXQgaW5oZXJpdCgpIHsKICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PSAxOwogICAgfQogICAgc29ydCh0NCkgewogICAgICByZXR1cm4gIXQ0IHx8IHQ0LmRlcHRoIDwgdGhpcy5kZXB0aCA/ICh0aGlzLm5leHQgPSB0NCwgdGhpcykgOiAodDQubmV4dCA9IHRoaXMuc29ydCh0NC5uZXh0KSwgdDQpOwogICAgfQogICAgZ2V0IGRlcHRoKCkgewogICAgICByZXR1cm4gdGhpcy5jb250ZXh0ID8gdGhpcy5jb250ZXh0Lmxlbmd0aCA6IDA7CiAgICB9CiAgfTsKICBNNC5lbXB0eSA9IG5ldyBNNChbXSwgMiwgbnVsbCk7CiAgZnVuY3Rpb24gVzQocjMsIHQ0KSB7CiAgICBsZXQgYTQgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGZvciAobGV0IHM4IG9mIHIzKQogICAgICBpZiAoIUFycmF5LmlzQXJyYXkoczgudGFnKSkKICAgICAgICBhNFtzOC50YWcuaWRdID0gczguY2xhc3M7CiAgICAgIGVsc2UKICAgICAgICBmb3IgKGxldCBjMTcgb2YgczgudGFnKQogICAgICAgICAgYTRbYzE3LmlkXSA9IHM4LmNsYXNzOwogICAgbGV0IHsgc2NvcGU6IGk0LCBhbGw6IGw3ID0gbnVsbCB9ID0gdDQgfHwge307CiAgICByZXR1cm4geyBzdHlsZTogKHM4KSA9PiB7CiAgICAgIGxldCBjMTcgPSBsNzsKICAgICAgZm9yIChsZXQgbzQgb2YgczgpCiAgICAgICAgZm9yIChsZXQgZDE1IG9mIG80LnNldCkgewogICAgICAgICAgbGV0IGcxMiA9IGE0W2QxNS5pZF07CiAgICAgICAgICBpZiAoZzEyKSB7CiAgICAgICAgICAgIGMxNyA9IGMxNyA/IGMxNyArICIgIiArIGcxMiA6IGcxMjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gYzE3OwogICAgfSwgc2NvcGU6IGk0IH07CiAgfQogIGZ1bmN0aW9uIFg2KHIzLCB0NCkgewogICAgbGV0IGE0ID0gbnVsbDsKICAgIGZvciAobGV0IGk0IG9mIHIzKSB7CiAgICAgIGxldCBsNyA9IGk0LnN0eWxlKHQ0KTsKICAgICAgbDcgJiYgKGE0ID0gYTQgPyBhNCArICIgIiArIGw3IDogbDcpOwogICAgfQogICAgcmV0dXJuIGE0OwogIH0KICBmdW5jdGlvbiBfMyhyMywgdDQsIGE0LCBpNCA9IDAsIGw3ID0gcjMubGVuZ3RoKSB7CiAgICBsZXQgczggPSBuZXcgUDQoaTQsIEFycmF5LmlzQXJyYXkodDQpID8gdDQgOiBbdDRdLCBhNCk7CiAgICBzOC5oaWdobGlnaHRSYW5nZShyMy5jdXJzb3IoKSwgaTQsIGw3LCAiIiwgczguaGlnaGxpZ2h0ZXJzKSwgczguZmx1c2gobDcpOwogIH0KICB2YXIgUDQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgYTQsIGk0KSB7CiAgICAgIHRoaXMuYXQgPSB0NCwgdGhpcy5oaWdobGlnaHRlcnMgPSBhNCwgdGhpcy5zcGFuID0gaTQsIHRoaXMuY2xhc3MgPSAiIjsKICAgIH0KICAgIHN0YXJ0U3Bhbih0NCwgYTQpIHsKICAgICAgYTQgIT0gdGhpcy5jbGFzcyAmJiAodGhpcy5mbHVzaCh0NCksIHQ0ID4gdGhpcy5hdCAmJiAodGhpcy5hdCA9IHQ0KSwgdGhpcy5jbGFzcyA9IGE0KTsKICAgIH0KICAgIGZsdXNoKHQ0KSB7CiAgICAgIHQ0ID4gdGhpcy5hdCAmJiB0aGlzLmNsYXNzICYmIHRoaXMuc3Bhbih0aGlzLmF0LCB0NCwgdGhpcy5jbGFzcyk7CiAgICB9CiAgICBoaWdobGlnaHRSYW5nZSh0NCwgYTQsIGk0LCBsNywgczgpIHsKICAgICAgbGV0IHsgdHlwZTogYzE3LCBmcm9tOiBvNCwgdG86IGQxNSB9ID0gdDQ7CiAgICAgIGlmIChvNCA+PSBpNCB8fCBkMTUgPD0gYTQpCiAgICAgICAgcmV0dXJuOwogICAgICBjMTcuaXNUb3AgJiYgKHM4ID0gdGhpcy5oaWdobGlnaHRlcnMuZmlsdGVyKChOMTcpID0+ICFOMTcuc2NvcGUgfHwgTjE3LnNjb3BlKGMxNykpKTsKICAgICAgbGV0IGcxMiA9IGw3LCBPMTUgPSBZNSh0NCkgfHwgTTQuZW1wdHksIHAxOCA9IFg2KHM4LCBPMTUudGFncyk7CiAgICAgIGlmIChwMTggJiYgKGcxMiAmJiAoZzEyICs9ICIgIiksIGcxMiArPSBwMTgsIE8xNS5tb2RlID09IDEgJiYgKGw3ICs9IChsNyA/ICIgIiA6ICIiKSArIHAxOCkpLCB0aGlzLnN0YXJ0U3Bhbih0NC5mcm9tLCBnMTIpLCBPMTUub3BhcXVlKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IGgxMCA9IHQ0LnRyZWUgJiYgdDQudHJlZS5wcm9wKHczLm1vdW50ZWQpOwogICAgICBpZiAoaDEwICYmIGgxMC5vdmVybGF5KSB7CiAgICAgICAgbGV0IE4xNyA9IHQ0Lm5vZGUuZW50ZXIoaDEwLm92ZXJsYXlbMF0uZnJvbSArIG80LCAxKSwgRzIzID0gdGhpcy5oaWdobGlnaHRlcnMuZmlsdGVyKCh4MjEpID0+ICF4MjEuc2NvcGUgfHwgeDIxLnNjb3BlKGgxMC50cmVlLnR5cGUpKSwgRDIwID0gdDQuZmlyc3RDaGlsZCgpOwogICAgICAgIGZvciAobGV0IHgyMSA9IDAsIFMyMSA9IG80OyA7IHgyMSsrKSB7CiAgICAgICAgICBsZXQgQTIwID0geDIxIDwgaDEwLm92ZXJsYXkubGVuZ3RoID8gaDEwLm92ZXJsYXlbeDIxXSA6IG51bGwsIHEyMCA9IEEyMCA/IEEyMC5mcm9tICsgbzQgOiBkMTUsIEgyMyA9IE1hdGgubWF4KGE0LCBTMjEpLCBFMTUgPSBNYXRoLm1pbihpNCwgcTIwKTsKICAgICAgICAgIGlmIChIMjMgPCBFMTUgJiYgRDIwKQogICAgICAgICAgICBmb3IgKDsgdDQuZnJvbSA8IEUxNSAmJiAodGhpcy5oaWdobGlnaHRSYW5nZSh0NCwgSDIzLCBFMTUsIGw3LCBzOCksIHRoaXMuc3RhcnRTcGFuKE1hdGgubWluKGk0LCB0NC50byksIGcxMiksICEodDQudG8gPj0gcTIwIHx8ICF0NC5uZXh0U2libGluZygpKSk7ICkKICAgICAgICAgICAgICA7CiAgICAgICAgICBpZiAoIUEyMCB8fCBxMjAgPiBpNCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBTMjEgPSBBMjAudG8gKyBvNCwgUzIxID4gYTQgJiYgKHRoaXMuaGlnaGxpZ2h0UmFuZ2UoTjE3LmN1cnNvcigpLCBNYXRoLm1heChhNCwgQTIwLmZyb20gKyBvNCksIE1hdGgubWluKGk0LCBTMjEpLCBsNywgRzIzKSwgdGhpcy5zdGFydFNwYW4oUzIxLCBnMTIpKTsKICAgICAgICB9CiAgICAgICAgRDIwICYmIHQ0LnBhcmVudCgpOwogICAgICB9IGVsc2UgaWYgKHQ0LmZpcnN0Q2hpbGQoKSkgewogICAgICAgIGRvCiAgICAgICAgICBpZiAoISh0NC50byA8PSBhNCkpIHsKICAgICAgICAgICAgaWYgKHQ0LmZyb20gPj0gaTQpCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0UmFuZ2UodDQsIGE0LCBpNCwgbDcsIHM4KSwgdGhpcy5zdGFydFNwYW4oTWF0aC5taW4oaTQsIHQ0LnRvKSwgZzEyKTsKICAgICAgICAgIH0KICAgICAgICB3aGlsZSAodDQubmV4dFNpYmxpbmcoKSk7CiAgICAgICAgdDQucGFyZW50KCk7CiAgICAgIH0KICAgIH0KICB9OwogIGZ1bmN0aW9uIFk1KHIzKSB7CiAgICBsZXQgdDQgPSByMy50eXBlLnByb3AoejUpOwogICAgZm9yICg7IHQ0ICYmIHQ0LmNvbnRleHQgJiYgIXIzLm1hdGNoQ29udGV4dCh0NC5jb250ZXh0KTsgKQogICAgICB0NCA9IHQ0Lm5leHQ7CiAgICByZXR1cm4gdDQgfHwgbnVsbDsKICB9CiAgdmFyIGUgPSBmLmRlZmluZTsKICB2YXIgSTQgPSBlKCk7CiAgdmFyIGI0ID0gZSgpOwogIHZhciBCNSA9IGUoYjQpOwogIHZhciBGMiA9IGUoYjQpOwogIHZhciB5NCA9IGUoKTsKICB2YXIgQzIgPSBlKHk0KTsKICB2YXIgSzUgPSBlKHk0KTsKICB2YXIgazIgPSBlKCk7CiAgdmFyIHc0ID0gZShrMik7CiAgdmFyIG0zID0gZSgpOwogIHZhciB1ID0gZSgpOwogIHZhciBqMyA9IGUoKTsKICB2YXIgUjMgPSBlKGozKTsKICB2YXIgVDUgPSBlKCk7CiAgdmFyIG4yID0geyBjb21tZW50OiBJNCwgbGluZUNvbW1lbnQ6IGUoSTQpLCBibG9ja0NvbW1lbnQ6IGUoSTQpLCBkb2NDb21tZW50OiBlKEk0KSwgbmFtZTogYjQsIHZhcmlhYmxlTmFtZTogZShiNCksIHR5cGVOYW1lOiBCNSwgdGFnTmFtZTogZShCNSksIHByb3BlcnR5TmFtZTogRjIsIGF0dHJpYnV0ZU5hbWU6IGUoRjIpLCBjbGFzc05hbWU6IGUoYjQpLCBsYWJlbE5hbWU6IGUoYjQpLCBuYW1lc3BhY2U6IGUoYjQpLCBtYWNyb05hbWU6IGUoYjQpLCBsaXRlcmFsOiB5NCwgc3RyaW5nOiBDMiwgZG9jU3RyaW5nOiBlKEMyKSwgY2hhcmFjdGVyOiBlKEMyKSwgYXR0cmlidXRlVmFsdWU6IGUoQzIpLCBudW1iZXI6IEs1LCBpbnRlZ2VyOiBlKEs1KSwgZmxvYXQ6IGUoSzUpLCBib29sOiBlKHk0KSwgcmVnZXhwOiBlKHk0KSwgZXNjYXBlOiBlKHk0KSwgY29sb3I6IGUoeTQpLCB1cmw6IGUoeTQpLCBrZXl3b3JkOiBtMywgc2VsZjogZShtMyksIG51bGw6IGUobTMpLCBhdG9tOiBlKG0zKSwgdW5pdDogZShtMyksIG1vZGlmaWVyOiBlKG0zKSwgb3BlcmF0b3JLZXl3b3JkOiBlKG0zKSwgY29udHJvbEtleXdvcmQ6IGUobTMpLCBkZWZpbml0aW9uS2V5d29yZDogZShtMyksIG1vZHVsZUtleXdvcmQ6IGUobTMpLCBvcGVyYXRvcjogdSwgZGVyZWZPcGVyYXRvcjogZSh1KSwgYXJpdGhtZXRpY09wZXJhdG9yOiBlKHUpLCBsb2dpY09wZXJhdG9yOiBlKHUpLCBiaXR3aXNlT3BlcmF0b3I6IGUodSksIGNvbXBhcmVPcGVyYXRvcjogZSh1KSwgdXBkYXRlT3BlcmF0b3I6IGUodSksIGRlZmluaXRpb25PcGVyYXRvcjogZSh1KSwgdHlwZU9wZXJhdG9yOiBlKHUpLCBjb250cm9sT3BlcmF0b3I6IGUodSksIHB1bmN0dWF0aW9uOiBqMywgc2VwYXJhdG9yOiBlKGozKSwgYnJhY2tldDogUjMsIGFuZ2xlQnJhY2tldDogZShSMyksIHNxdWFyZUJyYWNrZXQ6IGUoUjMpLCBwYXJlbjogZShSMyksIGJyYWNlOiBlKFIzKSwgY29udGVudDogazIsIGhlYWRpbmc6IHc0LCBoZWFkaW5nMTogZSh3NCksIGhlYWRpbmcyOiBlKHc0KSwgaGVhZGluZzM6IGUodzQpLCBoZWFkaW5nNDogZSh3NCksIGhlYWRpbmc1OiBlKHc0KSwgaGVhZGluZzY6IGUodzQpLCBjb250ZW50U2VwYXJhdG9yOiBlKGsyKSwgbGlzdDogZShrMiksIHF1b3RlOiBlKGsyKSwgZW1waGFzaXM6IGUoazIpLCBzdHJvbmc6IGUoazIpLCBsaW5rOiBlKGsyKSwgbW9ub3NwYWNlOiBlKGsyKSwgc3RyaWtldGhyb3VnaDogZShrMiksIGluc2VydGVkOiBlKCksIGRlbGV0ZWQ6IGUoKSwgY2hhbmdlZDogZSgpLCBpbnZhbGlkOiBlKCksIG1ldGE6IFQ1LCBkb2N1bWVudE1ldGE6IGUoVDUpLCBhbm5vdGF0aW9uOiBlKFQ1KSwgcHJvY2Vzc2luZ0luc3RydWN0aW9uOiBlKFQ1KSwgZGVmaW5pdGlvbjogZi5kZWZpbmVNb2RpZmllcigpLCBjb25zdGFudDogZi5kZWZpbmVNb2RpZmllcigpLCBmdW5jdGlvbjogZi5kZWZpbmVNb2RpZmllcigpLCBzdGFuZGFyZDogZi5kZWZpbmVNb2RpZmllcigpLCBsb2NhbDogZi5kZWZpbmVNb2RpZmllcigpLCBzcGVjaWFsOiBmLmRlZmluZU1vZGlmaWVyKCkgfTsKICB2YXIgdHQyID0gVzQoW3sgdGFnOiBuMi5saW5rLCBjbGFzczogInRvay1saW5rIiB9LCB7IHRhZzogbjIuaGVhZGluZywgY2xhc3M6ICJ0b2staGVhZGluZyIgfSwgeyB0YWc6IG4yLmVtcGhhc2lzLCBjbGFzczogInRvay1lbXBoYXNpcyIgfSwgeyB0YWc6IG4yLnN0cm9uZywgY2xhc3M6ICJ0b2stc3Ryb25nIiB9LCB7IHRhZzogbjIua2V5d29yZCwgY2xhc3M6ICJ0b2sta2V5d29yZCIgfSwgeyB0YWc6IG4yLmF0b20sIGNsYXNzOiAidG9rLWF0b20iIH0sIHsgdGFnOiBuMi5ib29sLCBjbGFzczogInRvay1ib29sIiB9LCB7IHRhZzogbjIudXJsLCBjbGFzczogInRvay11cmwiIH0sIHsgdGFnOiBuMi5sYWJlbE5hbWUsIGNsYXNzOiAidG9rLWxhYmVsTmFtZSIgfSwgeyB0YWc6IG4yLmluc2VydGVkLCBjbGFzczogInRvay1pbnNlcnRlZCIgfSwgeyB0YWc6IG4yLmRlbGV0ZWQsIGNsYXNzOiAidG9rLWRlbGV0ZWQiIH0sIHsgdGFnOiBuMi5saXRlcmFsLCBjbGFzczogInRvay1saXRlcmFsIiB9LCB7IHRhZzogbjIuc3RyaW5nLCBjbGFzczogInRvay1zdHJpbmciIH0sIHsgdGFnOiBuMi5udW1iZXIsIGNsYXNzOiAidG9rLW51bWJlciIgfSwgeyB0YWc6IFtuMi5yZWdleHAsIG4yLmVzY2FwZSwgbjIuc3BlY2lhbChuMi5zdHJpbmcpXSwgY2xhc3M6ICJ0b2stc3RyaW5nMiIgfSwgeyB0YWc6IG4yLnZhcmlhYmxlTmFtZSwgY2xhc3M6ICJ0b2stdmFyaWFibGVOYW1lIiB9LCB7IHRhZzogbjIubG9jYWwobjIudmFyaWFibGVOYW1lKSwgY2xhc3M6ICJ0b2stdmFyaWFibGVOYW1lIHRvay1sb2NhbCIgfSwgeyB0YWc6IG4yLmRlZmluaXRpb24objIudmFyaWFibGVOYW1lKSwgY2xhc3M6ICJ0b2stdmFyaWFibGVOYW1lIHRvay1kZWZpbml0aW9uIiB9LCB7IHRhZzogbjIuc3BlY2lhbChuMi52YXJpYWJsZU5hbWUpLCBjbGFzczogInRvay12YXJpYWJsZU5hbWUyIiB9LCB7IHRhZzogbjIuZGVmaW5pdGlvbihuMi5wcm9wZXJ0eU5hbWUpLCBjbGFzczogInRvay1wcm9wZXJ0eU5hbWUgdG9rLWRlZmluaXRpb24iIH0sIHsgdGFnOiBuMi50eXBlTmFtZSwgY2xhc3M6ICJ0b2stdHlwZU5hbWUiIH0sIHsgdGFnOiBuMi5uYW1lc3BhY2UsIGNsYXNzOiAidG9rLW5hbWVzcGFjZSIgfSwgeyB0YWc6IG4yLmNsYXNzTmFtZSwgY2xhc3M6ICJ0b2stY2xhc3NOYW1lIiB9LCB7IHRhZzogbjIubWFjcm9OYW1lLCBjbGFzczogInRvay1tYWNyb05hbWUiIH0sIHsgdGFnOiBuMi5wcm9wZXJ0eU5hbWUsIGNsYXNzOiAidG9rLXByb3BlcnR5TmFtZSIgfSwgeyB0YWc6IG4yLm9wZXJhdG9yLCBjbGFzczogInRvay1vcGVyYXRvciIgfSwgeyB0YWc6IG4yLmNvbW1lbnQsIGNsYXNzOiAidG9rLWNvbW1lbnQiIH0sIHsgdGFnOiBuMi5tZXRhLCBjbGFzczogInRvay1tZXRhIiB9LCB7IHRhZzogbjIuaW52YWxpZCwgY2xhc3M6ICJ0b2staW52YWxpZCIgfSwgeyB0YWc6IG4yLnB1bmN0dWF0aW9uLCBjbGFzczogInRvay1wdW5jdHVhdGlvbiIgfV0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AY29kZW1pcnJvci9sYW5ndWFnZUA2LjIuMS9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFiR1Y2WlhJdlkyOXRiVzl1L2Rlbm8vbGFuZ3VhZ2UuanMKICB2YXIgWTY7CiAgdmFyIFQ2ID0gbmV3IHczKCk7CiAgdmFyIGMyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1LCByMyA9IFtdKSB7CiAgICAgIHRoaXMuZGF0YSA9IHQ0LCB3LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgidHJlZSIpIHx8IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LnByb3RvdHlwZSwgInRyZWUiLCB7IGdldCgpIHsKICAgICAgICByZXR1cm4gbTQodGhpcyk7CiAgICAgIH0gfSksIHRoaXMucGFyc2VyID0gZTUsIHRoaXMuZXh0ZW5zaW9uID0gW1A1Lm9mKHRoaXMpLCB3Lmxhbmd1YWdlRGF0YS5vZigoaTQsIHM4LCBvNCkgPT4gaTQuZmFjZXQodXQyKGk0LCBzOCwgbzQpKSldLmNvbmNhdChyMyk7CiAgICB9CiAgICBpc0FjdGl2ZUF0KHQ0LCBlNSwgcjMgPSAtMSkgewogICAgICByZXR1cm4gdXQyKHQ0LCBlNSwgcjMpID09IHRoaXMuZGF0YTsKICAgIH0KICAgIGZpbmRSZWdpb25zKHQ0KSB7CiAgICAgIGxldCBlNSA9IHQ0LmZhY2V0KFA1KTsKICAgICAgaWYgKGU1Py5kYXRhID09IHRoaXMuZGF0YSkKICAgICAgICByZXR1cm4gW3sgZnJvbTogMCwgdG86IHQ0LmRvYy5sZW5ndGggfV07CiAgICAgIGlmICghZTUgfHwgIWU1LmFsbG93c05lc3RpbmcpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICBsZXQgcjMgPSBbXSwgaTQgPSAoczgsIG80KSA9PiB7CiAgICAgICAgaWYgKHM4LnByb3AoVDYpID09IHRoaXMuZGF0YSkgewogICAgICAgICAgcjMucHVzaCh7IGZyb206IG80LCB0bzogbzQgKyBzOC5sZW5ndGggfSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxldCBsNyA9IHM4LnByb3AodzMubW91bnRlZCk7CiAgICAgICAgaWYgKGw3KSB7CiAgICAgICAgICBpZiAobDcudHJlZS5wcm9wKFQ2KSA9PSB0aGlzLmRhdGEpIHsKICAgICAgICAgICAgaWYgKGw3Lm92ZXJsYXkpCiAgICAgICAgICAgICAgZm9yIChsZXQgYTQgb2YgbDcub3ZlcmxheSkKICAgICAgICAgICAgICAgIHIzLnB1c2goeyBmcm9tOiBhNC5mcm9tICsgbzQsIHRvOiBhNC50byArIG80IH0pOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcjMucHVzaCh7IGZyb206IG80LCB0bzogbzQgKyBzOC5sZW5ndGggfSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSBpZiAobDcub3ZlcmxheSkgewogICAgICAgICAgICBsZXQgYTQgPSByMy5sZW5ndGg7CiAgICAgICAgICAgIGlmIChpNChsNy50cmVlLCBsNy5vdmVybGF5WzBdLmZyb20gKyBvNCksIHIzLmxlbmd0aCA+IGE0KQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgYTQgPSAwOyBhNCA8IHM4LmNoaWxkcmVuLmxlbmd0aDsgYTQrKykgewogICAgICAgICAgbGV0IGgxMCA9IHM4LmNoaWxkcmVuW2E0XTsKICAgICAgICAgIGgxMCBpbnN0YW5jZW9mIFAzICYmIGk0KGgxMCwgczgucG9zaXRpb25zW2E0XSArIG80KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBpNChtNCh0NCksIDApLCByMzsKICAgIH0KICAgIGdldCBhbGxvd3NOZXN0aW5nKCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9OwogIGMyLnNldFN0YXRlID0geS5kZWZpbmUoKTsKICBmdW5jdGlvbiB1dDIobjgsIHQ0LCBlNSkgewogICAgbGV0IHIzID0gbjguZmFjZXQoUDUpOwogICAgaWYgKCFyMykKICAgICAgcmV0dXJuIG51bGw7CiAgICBsZXQgaTQgPSByMy5kYXRhOwogICAgaWYgKHIzLmFsbG93c05lc3RpbmcpCiAgICAgIGZvciAobGV0IHM4ID0gbTQobjgpLnRvcE5vZGU7IHM4OyBzOCA9IHM4LmVudGVyKHQ0LCBlNSwgQTQuRXhjbHVkZUJ1ZmZlcnMpKQogICAgICAgIGk0ID0gczgudHlwZS5wcm9wKFQ2KSB8fCBpNDsKICAgIHJldHVybiBpNDsKICB9CiAgZnVuY3Rpb24gbTQobjgpIHsKICAgIGxldCB0NCA9IG44LmZpZWxkKGMyLnN0YXRlLCBmYWxzZSk7CiAgICByZXR1cm4gdDQgPyB0NC50cmVlIDogUDMuZW1wdHk7CiAgfQogIHZhciBldDIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUgPSB0NC5sZW5ndGgpIHsKICAgICAgdGhpcy5kb2MgPSB0NCwgdGhpcy5sZW5ndGggPSBlNSwgdGhpcy5jdXJzb3JQb3MgPSAwLCB0aGlzLnN0cmluZyA9ICIiLCB0aGlzLmN1cnNvciA9IHQ0Lml0ZXIoKTsKICAgIH0KICAgIHN5bmNUbyh0NCkgewogICAgICByZXR1cm4gdGhpcy5zdHJpbmcgPSB0aGlzLmN1cnNvci5uZXh0KHQ0IC0gdGhpcy5jdXJzb3JQb3MpLnZhbHVlLCB0aGlzLmN1cnNvclBvcyA9IHQ0ICsgdGhpcy5zdHJpbmcubGVuZ3RoLCB0aGlzLmN1cnNvclBvcyAtIHRoaXMuc3RyaW5nLmxlbmd0aDsKICAgIH0KICAgIGNodW5rKHQ0KSB7CiAgICAgIHJldHVybiB0aGlzLnN5bmNUbyh0NCksIHRoaXMuc3RyaW5nOwogICAgfQogICAgZ2V0IGxpbmVDaHVua3MoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmVhZCh0NCwgZTUpIHsKICAgICAgbGV0IHIzID0gdGhpcy5jdXJzb3JQb3MgLSB0aGlzLnN0cmluZy5sZW5ndGg7CiAgICAgIHJldHVybiB0NCA8IHIzIHx8IGU1ID49IHRoaXMuY3Vyc29yUG9zID8gdGhpcy5kb2Muc2xpY2VTdHJpbmcodDQsIGU1KSA6IHRoaXMuc3RyaW5nLnNsaWNlKHQ0IC0gcjMsIGU1IC0gcjMpOwogICAgfQogIH07CiAgdmFyIEk1ID0gbnVsbDsKICB2YXIgeDIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIHIzID0gW10sIGk0LCBzOCwgbzQsIGw3LCBhNCkgewogICAgICB0aGlzLnBhcnNlciA9IHQ0LCB0aGlzLnN0YXRlID0gZTUsIHRoaXMuZnJhZ21lbnRzID0gcjMsIHRoaXMudHJlZSA9IGk0LCB0aGlzLnRyZWVMZW4gPSBzOCwgdGhpcy52aWV3cG9ydCA9IG80LCB0aGlzLnNraXBwZWQgPSBsNywgdGhpcy5zY2hlZHVsZU9uID0gYTQsIHRoaXMucGFyc2UgPSBudWxsLCB0aGlzLnRlbXBTa2lwcGVkID0gW107CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlKHQ0LCBlNSwgcjMpIHsKICAgICAgcmV0dXJuIG5ldyB4Mih0NCwgZTUsIFtdLCBQMy5lbXB0eSwgMCwgcjMsIFtdLCBudWxsKTsKICAgIH0KICAgIHN0YXJ0UGFyc2UoKSB7CiAgICAgIHJldHVybiB0aGlzLnBhcnNlci5zdGFydFBhcnNlKG5ldyBldDIodGhpcy5zdGF0ZS5kb2MpLCB0aGlzLmZyYWdtZW50cyk7CiAgICB9CiAgICB3b3JrKHQ0LCBlNSkgewogICAgICByZXR1cm4gZTUgIT0gbnVsbCAmJiBlNSA+PSB0aGlzLnN0YXRlLmRvYy5sZW5ndGggJiYgKGU1ID0gdm9pZCAwKSwgdGhpcy50cmVlICE9IFAzLmVtcHR5ICYmIHRoaXMuaXNEb25lKGU1ID8/IHRoaXMuc3RhdGUuZG9jLmxlbmd0aCkgPyAodGhpcy50YWtlVHJlZSgpLCB0cnVlKSA6IHRoaXMud2l0aENvbnRleHQoKCkgPT4gewogICAgICAgIHZhciByMzsKICAgICAgICBpZiAodHlwZW9mIHQ0ID09ICJudW1iZXIiKSB7CiAgICAgICAgICBsZXQgaTQgPSBEYXRlLm5vdygpICsgdDQ7CiAgICAgICAgICB0NCA9ICgpID0+IERhdGUubm93KCkgPiBpNDsKICAgICAgICB9CiAgICAgICAgZm9yICh0aGlzLnBhcnNlIHx8ICh0aGlzLnBhcnNlID0gdGhpcy5zdGFydFBhcnNlKCkpLCBlNSAhPSBudWxsICYmICh0aGlzLnBhcnNlLnN0b3BwZWRBdCA9PSBudWxsIHx8IHRoaXMucGFyc2Uuc3RvcHBlZEF0ID4gZTUpICYmIGU1IDwgdGhpcy5zdGF0ZS5kb2MubGVuZ3RoICYmIHRoaXMucGFyc2Uuc3RvcEF0KGU1KTsgOyApIHsKICAgICAgICAgIGxldCBpNCA9IHRoaXMucGFyc2UuYWR2YW5jZSgpOwogICAgICAgICAgaWYgKGk0KQogICAgICAgICAgICBpZiAodGhpcy5mcmFnbWVudHMgPSB0aGlzLndpdGhvdXRUZW1wU2tpcHBlZChHNS5hZGRUcmVlKGk0LCB0aGlzLmZyYWdtZW50cywgdGhpcy5wYXJzZS5zdG9wcGVkQXQgIT0gbnVsbCkpLCB0aGlzLnRyZWVMZW4gPSAocjMgPSB0aGlzLnBhcnNlLnN0b3BwZWRBdCkgIT09IG51bGwgJiYgcjMgIT09IHZvaWQgMCA/IHIzIDogdGhpcy5zdGF0ZS5kb2MubGVuZ3RoLCB0aGlzLnRyZWUgPSBpNCwgdGhpcy5wYXJzZSA9IG51bGwsIHRoaXMudHJlZUxlbiA8IChlNSA/PyB0aGlzLnN0YXRlLmRvYy5sZW5ndGgpKQogICAgICAgICAgICAgIHRoaXMucGFyc2UgPSB0aGlzLnN0YXJ0UGFyc2UoKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgaWYgKHQ0KCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGFrZVRyZWUoKSB7CiAgICAgIGxldCB0NCwgZTU7CiAgICAgIHRoaXMucGFyc2UgJiYgKHQ0ID0gdGhpcy5wYXJzZS5wYXJzZWRQb3MpID49IHRoaXMudHJlZUxlbiAmJiAoKHRoaXMucGFyc2Uuc3RvcHBlZEF0ID09IG51bGwgfHwgdGhpcy5wYXJzZS5zdG9wcGVkQXQgPiB0NCkgJiYgdGhpcy5wYXJzZS5zdG9wQXQodDQpLCB0aGlzLndpdGhDb250ZXh0KCgpID0+IHsKICAgICAgICBmb3IgKDsgIShlNSA9IHRoaXMucGFyc2UuYWR2YW5jZSgpKTsgKQogICAgICAgICAgOwogICAgICB9KSwgdGhpcy50cmVlTGVuID0gdDQsIHRoaXMudHJlZSA9IGU1LCB0aGlzLmZyYWdtZW50cyA9IHRoaXMud2l0aG91dFRlbXBTa2lwcGVkKEc1LmFkZFRyZWUodGhpcy50cmVlLCB0aGlzLmZyYWdtZW50cywgdHJ1ZSkpLCB0aGlzLnBhcnNlID0gbnVsbCk7CiAgICB9CiAgICB3aXRoQ29udGV4dCh0NCkgewogICAgICBsZXQgZTUgPSBJNTsKICAgICAgSTUgPSB0aGlzOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB0NCgpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIEk1ID0gZTU7CiAgICAgIH0KICAgIH0KICAgIHdpdGhvdXRUZW1wU2tpcHBlZCh0NCkgewogICAgICBmb3IgKGxldCBlNTsgZTUgPSB0aGlzLnRlbXBTa2lwcGVkLnBvcCgpOyApCiAgICAgICAgdDQgPSBjdDIodDQsIGU1LmZyb20sIGU1LnRvKTsKICAgICAgcmV0dXJuIHQ0OwogICAgfQogICAgY2hhbmdlcyh0NCwgZTUpIHsKICAgICAgbGV0IHsgZnJhZ21lbnRzOiByMywgdHJlZTogaTQsIHRyZWVMZW46IHM4LCB2aWV3cG9ydDogbzQsIHNraXBwZWQ6IGw3IH0gPSB0aGlzOwogICAgICBpZiAodGhpcy50YWtlVHJlZSgpLCAhdDQuZW1wdHkpIHsKICAgICAgICBsZXQgYTQgPSBbXTsKICAgICAgICBpZiAodDQuaXRlckNoYW5nZWRSYW5nZXMoKGgxMCwgdTExLCBkMTUsIGcxMikgPT4gYTQucHVzaCh7IGZyb21BOiBoMTAsIHRvQTogdTExLCBmcm9tQjogZDE1LCB0b0I6IGcxMiB9KSksIHIzID0gRzUuYXBwbHlDaGFuZ2VzKHIzLCBhNCksIGk0ID0gUDMuZW1wdHksIHM4ID0gMCwgbzQgPSB7IGZyb206IHQ0Lm1hcFBvcyhvNC5mcm9tLCAtMSksIHRvOiB0NC5tYXBQb3MobzQudG8sIDEpIH0sIHRoaXMuc2tpcHBlZC5sZW5ndGgpIHsKICAgICAgICAgIGw3ID0gW107CiAgICAgICAgICBmb3IgKGxldCBoMTAgb2YgdGhpcy5za2lwcGVkKSB7CiAgICAgICAgICAgIGxldCB1MTEgPSB0NC5tYXBQb3MoaDEwLmZyb20sIDEpLCBkMTUgPSB0NC5tYXBQb3MoaDEwLnRvLCAtMSk7CiAgICAgICAgICAgIHUxMSA8IGQxNSAmJiBsNy5wdXNoKHsgZnJvbTogdTExLCB0bzogZDE1IH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbmV3IHgyKHRoaXMucGFyc2VyLCBlNSwgcjMsIGk0LCBzOCwgbzQsIGw3LCB0aGlzLnNjaGVkdWxlT24pOwogICAgfQogICAgdXBkYXRlVmlld3BvcnQodDQpIHsKICAgICAgaWYgKHRoaXMudmlld3BvcnQuZnJvbSA9PSB0NC5mcm9tICYmIHRoaXMudmlld3BvcnQudG8gPT0gdDQudG8pCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB0aGlzLnZpZXdwb3J0ID0gdDQ7CiAgICAgIGxldCBlNSA9IHRoaXMuc2tpcHBlZC5sZW5ndGg7CiAgICAgIGZvciAobGV0IHIzID0gMDsgcjMgPCB0aGlzLnNraXBwZWQubGVuZ3RoOyByMysrKSB7CiAgICAgICAgbGV0IHsgZnJvbTogaTQsIHRvOiBzOCB9ID0gdGhpcy5za2lwcGVkW3IzXTsKICAgICAgICBpNCA8IHQ0LnRvICYmIHM4ID4gdDQuZnJvbSAmJiAodGhpcy5mcmFnbWVudHMgPSBjdDIodGhpcy5mcmFnbWVudHMsIGk0LCBzOCksIHRoaXMuc2tpcHBlZC5zcGxpY2UocjMtLSwgMSkpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnNraXBwZWQubGVuZ3RoID49IGU1ID8gZmFsc2UgOiAodGhpcy5yZXNldCgpLCB0cnVlKTsKICAgIH0KICAgIHJlc2V0KCkgewogICAgICB0aGlzLnBhcnNlICYmICh0aGlzLnRha2VUcmVlKCksIHRoaXMucGFyc2UgPSBudWxsKTsKICAgIH0KICAgIHNraXBVbnRpbEluVmlldyh0NCwgZTUpIHsKICAgICAgdGhpcy5za2lwcGVkLnB1c2goeyBmcm9tOiB0NCwgdG86IGU1IH0pOwogICAgfQogICAgc3RhdGljIGdldFNraXBwaW5nUGFyc2VyKHQ0KSB7CiAgICAgIHJldHVybiBuZXcgY2xhc3MgZXh0ZW5kcyB5ZTUgewogICAgICAgIGNyZWF0ZVBhcnNlKGU1LCByMywgaTQpIHsKICAgICAgICAgIGxldCBzOCA9IGk0WzBdLmZyb20sIG80ID0gaTRbaTQubGVuZ3RoIC0gMV0udG87CiAgICAgICAgICByZXR1cm4geyBwYXJzZWRQb3M6IHM4LCBhZHZhbmNlKCkgewogICAgICAgICAgICBsZXQgYTQgPSBJNTsKICAgICAgICAgICAgaWYgKGE0KSB7CiAgICAgICAgICAgICAgZm9yIChsZXQgaDEwIG9mIGk0KQogICAgICAgICAgICAgICAgYTQudGVtcFNraXBwZWQucHVzaChoMTApOwogICAgICAgICAgICAgIHQ0ICYmIChhNC5zY2hlZHVsZU9uID0gYTQuc2NoZWR1bGVPbiA/IFByb21pc2UuYWxsKFthNC5zY2hlZHVsZU9uLCB0NF0pIDogdDQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlZFBvcyA9IG80LCBuZXcgUDMoTjMubm9uZSwgW10sIFtdLCBvNCAtIHM4KTsKICAgICAgICAgIH0sIHN0b3BwZWRBdDogbnVsbCwgc3RvcEF0KCkgewogICAgICAgICAgfSB9OwogICAgICAgIH0KICAgICAgfSgpOwogICAgfQogICAgaXNEb25lKHQ0KSB7CiAgICAgIHQ0ID0gTWF0aC5taW4odDQsIHRoaXMuc3RhdGUuZG9jLmxlbmd0aCk7CiAgICAgIGxldCBlNSA9IHRoaXMuZnJhZ21lbnRzOwogICAgICByZXR1cm4gdGhpcy50cmVlTGVuID49IHQ0ICYmIGU1Lmxlbmd0aCAmJiBlNVswXS5mcm9tID09IDAgJiYgZTVbMF0udG8gPj0gdDQ7CiAgICB9CiAgICBzdGF0aWMgZ2V0KCkgewogICAgICByZXR1cm4gSTU7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBjdDIobjgsIHQ0LCBlNSkgewogICAgcmV0dXJuIEc1LmFwcGx5Q2hhbmdlcyhuOCwgW3sgZnJvbUE6IHQ0LCB0b0E6IGU1LCBmcm9tQjogdDQsIHRvQjogZTUgfV0pOwogIH0KICB2YXIgUzMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICB0aGlzLmNvbnRleHQgPSB0NCwgdGhpcy50cmVlID0gdDQudHJlZTsKICAgIH0KICAgIGFwcGx5KHQ0KSB7CiAgICAgIGlmICghdDQuZG9jQ2hhbmdlZCAmJiB0aGlzLnRyZWUgPT0gdGhpcy5jb250ZXh0LnRyZWUpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIGxldCBlNSA9IHRoaXMuY29udGV4dC5jaGFuZ2VzKHQ0LmNoYW5nZXMsIHQ0LnN0YXRlKSwgcjMgPSB0aGlzLmNvbnRleHQudHJlZUxlbiA9PSB0NC5zdGFydFN0YXRlLmRvYy5sZW5ndGggPyB2b2lkIDAgOiBNYXRoLm1heCh0NC5jaGFuZ2VzLm1hcFBvcyh0aGlzLmNvbnRleHQudHJlZUxlbiksIGU1LnZpZXdwb3J0LnRvKTsKICAgICAgcmV0dXJuIGU1LndvcmsoMjAsIHIzKSB8fCBlNS50YWtlVHJlZSgpLCBuZXcgUzMoZTUpOwogICAgfQogICAgc3RhdGljIGluaXQodDQpIHsKICAgICAgbGV0IGU1ID0gTWF0aC5taW4oM2UzLCB0NC5kb2MubGVuZ3RoKSwgcjMgPSB4Mi5jcmVhdGUodDQuZmFjZXQoUDUpLnBhcnNlciwgdDQsIHsgZnJvbTogMCwgdG86IGU1IH0pOwogICAgICByZXR1cm4gcjMud29yaygyMCwgZTUpIHx8IHIzLnRha2VUcmVlKCksIG5ldyBTMyhyMyk7CiAgICB9CiAgfTsKICBjMi5zdGF0ZSA9IEoyLmRlZmluZSh7IGNyZWF0ZTogUzMuaW5pdCwgdXBkYXRlKG44LCB0NCkgewogICAgZm9yIChsZXQgZTUgb2YgdDQuZWZmZWN0cykKICAgICAgaWYgKGU1LmlzKGMyLnNldFN0YXRlKSkKICAgICAgICByZXR1cm4gZTUudmFsdWU7CiAgICByZXR1cm4gdDQuc3RhcnRTdGF0ZS5mYWNldChQNSkgIT0gdDQuc3RhdGUuZmFjZXQoUDUpID8gUzMuaW5pdCh0NC5zdGF0ZSkgOiBuOC5hcHBseSh0NCk7CiAgfSB9KTsKICB2YXIgeHQyID0gKG44KSA9PiB7CiAgICBsZXQgdDQgPSBzZXRUaW1lb3V0KCgpID0+IG44KCksIDUwMCk7CiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHQ0KTsKICB9OwogIHR5cGVvZiByZXF1ZXN0SWRsZUNhbGxiYWNrIDwgInUiICYmICh4dDIgPSAobjgpID0+IHsKICAgIGxldCB0NCA9IC0xLCBlNSA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICB0NCA9IHJlcXVlc3RJZGxlQ2FsbGJhY2sobjgsIHsgdGltZW91dDogNTAwIC0gMTAwIH0pOwogICAgfSwgMTAwKTsKICAgIHJldHVybiAoKSA9PiB0NCA8IDAgPyBjbGVhclRpbWVvdXQoZTUpIDogY2FuY2VsSWRsZUNhbGxiYWNrKHQ0KTsKICB9KTsKICB2YXIgWjQgPSB0eXBlb2YgbmF2aWdhdG9yIDwgInUiICYmICgoWTYgPSBuYXZpZ2F0b3Iuc2NoZWR1bGluZykgPT09IG51bGwgfHwgWTYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IFk2LmlzSW5wdXRQZW5kaW5nKSA/ICgpID0+IG5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nKCkgOiBudWxsOwogIHZhciBTdDIgPSBWNC5mcm9tQ2xhc3MoY2xhc3MgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgdGhpcy52aWV3ID0gdDQsIHRoaXMud29ya2luZyA9IG51bGwsIHRoaXMud29ya1NjaGVkdWxlZCA9IDAsIHRoaXMuY2h1bmtFbmQgPSAtMSwgdGhpcy5jaHVua0J1ZGdldCA9IC0xLCB0aGlzLndvcmsgPSB0aGlzLndvcmsuYmluZCh0aGlzKSwgdGhpcy5zY2hlZHVsZVdvcmsoKTsKICAgIH0KICAgIHVwZGF0ZSh0NCkgewogICAgICBsZXQgZTUgPSB0aGlzLnZpZXcuc3RhdGUuZmllbGQoYzIuc3RhdGUpLmNvbnRleHQ7CiAgICAgIChlNS51cGRhdGVWaWV3cG9ydCh0NC52aWV3LnZpZXdwb3J0KSB8fCB0aGlzLnZpZXcudmlld3BvcnQudG8gPiBlNS50cmVlTGVuKSAmJiB0aGlzLnNjaGVkdWxlV29yaygpLCB0NC5kb2NDaGFuZ2VkICYmICh0aGlzLnZpZXcuaGFzRm9jdXMgJiYgKHRoaXMuY2h1bmtCdWRnZXQgKz0gNTApLCB0aGlzLnNjaGVkdWxlV29yaygpKSwgdGhpcy5jaGVja0FzeW5jU2NoZWR1bGUoZTUpOwogICAgfQogICAgc2NoZWR1bGVXb3JrKCkgewogICAgICBpZiAodGhpcy53b3JraW5nKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IHsgc3RhdGU6IHQ0IH0gPSB0aGlzLnZpZXcsIGU1ID0gdDQuZmllbGQoYzIuc3RhdGUpOwogICAgICAoZTUudHJlZSAhPSBlNS5jb250ZXh0LnRyZWUgfHwgIWU1LmNvbnRleHQuaXNEb25lKHQ0LmRvYy5sZW5ndGgpKSAmJiAodGhpcy53b3JraW5nID0geHQyKHRoaXMud29yaykpOwogICAgfQogICAgd29yayh0NCkgewogICAgICB0aGlzLndvcmtpbmcgPSBudWxsOwogICAgICBsZXQgZTUgPSBEYXRlLm5vdygpOwogICAgICBpZiAodGhpcy5jaHVua0VuZCA8IGU1ICYmICh0aGlzLmNodW5rRW5kIDwgMCB8fCB0aGlzLnZpZXcuaGFzRm9jdXMpICYmICh0aGlzLmNodW5rRW5kID0gZTUgKyAzZTQsIHRoaXMuY2h1bmtCdWRnZXQgPSAzZTMpLCB0aGlzLmNodW5rQnVkZ2V0IDw9IDApCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgeyBzdGF0ZTogcjMsIHZpZXdwb3J0OiB7IHRvOiBpNCB9IH0gPSB0aGlzLnZpZXcsIHM4ID0gcjMuZmllbGQoYzIuc3RhdGUpOwogICAgICBpZiAoczgudHJlZSA9PSBzOC5jb250ZXh0LnRyZWUgJiYgczguY29udGV4dC5pc0RvbmUoaTQgKyAxZTUpKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IG80ID0gRGF0ZS5ub3coKSArIE1hdGgubWluKHRoaXMuY2h1bmtCdWRnZXQsIDEwMCwgdDQgJiYgIVo0ID8gTWF0aC5tYXgoMjUsIHQ0LnRpbWVSZW1haW5pbmcoKSAtIDUpIDogMWU5KSwgbDcgPSBzOC5jb250ZXh0LnRyZWVMZW4gPCBpNCAmJiByMy5kb2MubGVuZ3RoID4gaTQgKyAxZTMsIGE0ID0gczguY29udGV4dC53b3JrKCgpID0+IFo0ICYmIFo0KCkgfHwgRGF0ZS5ub3coKSA+IG80LCBpNCArIChsNyA/IDAgOiAxZTUpKTsKICAgICAgdGhpcy5jaHVua0J1ZGdldCAtPSBEYXRlLm5vdygpIC0gZTUsIChhNCB8fCB0aGlzLmNodW5rQnVkZ2V0IDw9IDApICYmIChzOC5jb250ZXh0LnRha2VUcmVlKCksIHRoaXMudmlldy5kaXNwYXRjaCh7IGVmZmVjdHM6IGMyLnNldFN0YXRlLm9mKG5ldyBTMyhzOC5jb250ZXh0KSkgfSkpLCB0aGlzLmNodW5rQnVkZ2V0ID4gMCAmJiAhKGE0ICYmICFsNykgJiYgdGhpcy5zY2hlZHVsZVdvcmsoKSwgdGhpcy5jaGVja0FzeW5jU2NoZWR1bGUoczguY29udGV4dCk7CiAgICB9CiAgICBjaGVja0FzeW5jU2NoZWR1bGUodDQpIHsKICAgICAgdDQuc2NoZWR1bGVPbiAmJiAodGhpcy53b3JrU2NoZWR1bGVkKyssIHQ0LnNjaGVkdWxlT24udGhlbigoKSA9PiB0aGlzLnNjaGVkdWxlV29yaygpKS5jYXRjaCgoZTUpID0+IG50Mih0aGlzLnZpZXcuc3RhdGUsIGU1KSkudGhlbigoKSA9PiB0aGlzLndvcmtTY2hlZHVsZWQtLSksIHQ0LnNjaGVkdWxlT24gPSBudWxsKTsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMud29ya2luZyAmJiB0aGlzLndvcmtpbmcoKTsKICAgIH0KICAgIGlzV29ya2luZygpIHsKICAgICAgcmV0dXJuICEhKHRoaXMud29ya2luZyB8fCB0aGlzLndvcmtTY2hlZHVsZWQgPiAwKTsKICAgIH0KICB9LCB7IGV2ZW50SGFuZGxlcnM6IHsgZm9jdXMoKSB7CiAgICB0aGlzLnNjaGVkdWxlV29yaygpOwogIH0gfSB9KTsKICB2YXIgUDUgPSBBMi5kZWZpbmUoeyBjb21iaW5lKG44KSB7CiAgICByZXR1cm4gbjgubGVuZ3RoID8gbjhbMF0gOiBudWxsOwogIH0sIGVuYWJsZXM6IFtjMi5zdGF0ZSwgU3QyXSB9KTsKICB2YXIgUHQyID0gQTIuZGVmaW5lKCk7CiAgdmFyIEF0MiA9IEEyLmRlZmluZSh7IGNvbWJpbmU6IChuOCkgPT4gewogICAgaWYgKCFuOC5sZW5ndGgpCiAgICAgIHJldHVybiAiICAiOwogICAgaWYgKCEvXig/OiArfFx0KykkLy50ZXN0KG44WzBdKSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGluZGVudCB1bml0OiAiICsgSlNPTi5zdHJpbmdpZnkobjhbMF0pKTsKICAgIHJldHVybiBuOFswXTsKICB9IH0pOwogIHZhciByZTUgPSBuZXcgdzMoKTsKICB2YXIgdWU1ID0gQTIuZGVmaW5lKCk7CiAgdmFyIGNlNCA9IG5ldyB3MygpOwogIGZ1bmN0aW9uIE90MihuOCwgdDQpIHsKICAgIGxldCBlNSA9IHQ0Lm1hcFBvcyhuOC5mcm9tLCAxKSwgcjMgPSB0NC5tYXBQb3MobjgudG8sIC0xKTsKICAgIHJldHVybiBlNSA+PSByMyA/IHZvaWQgMCA6IHsgZnJvbTogZTUsIHRvOiByMyB9OwogIH0KICB2YXIgXzQgPSB5LmRlZmluZSh7IG1hcDogT3QyIH0pOwogIHZhciBSNCA9IHkuZGVmaW5lKHsgbWFwOiBPdDIgfSk7CiAgdmFyIEE1ID0gSjIuZGVmaW5lKHsgY3JlYXRlKCkgewogICAgcmV0dXJuIGsubm9uZTsKICB9LCB1cGRhdGUobjgsIHQ0KSB7CiAgICBuOCA9IG44Lm1hcCh0NC5jaGFuZ2VzKTsKICAgIGZvciAobGV0IGU1IG9mIHQ0LmVmZmVjdHMpCiAgICAgIGU1LmlzKF80KSAmJiAhbWU2KG44LCBlNS52YWx1ZS5mcm9tLCBlNS52YWx1ZS50bykgPyBuOCA9IG44LnVwZGF0ZSh7IGFkZDogW3B0Mi5yYW5nZShlNS52YWx1ZS5mcm9tLCBlNS52YWx1ZS50byldIH0pIDogZTUuaXMoUjQpICYmIChuOCA9IG44LnVwZGF0ZSh7IGZpbHRlcjogKHIzLCBpNCkgPT4gZTUudmFsdWUuZnJvbSAhPSByMyB8fCBlNS52YWx1ZS50byAhPSBpNCwgZmlsdGVyRnJvbTogZTUudmFsdWUuZnJvbSwgZmlsdGVyVG86IGU1LnZhbHVlLnRvIH0pKTsKICAgIGlmICh0NC5zZWxlY3Rpb24pIHsKICAgICAgbGV0IGU1ID0gZmFsc2UsIHsgaGVhZDogcjMgfSA9IHQ0LnNlbGVjdGlvbi5tYWluOwogICAgICBuOC5iZXR3ZWVuKHIzLCByMywgKGk0LCBzOCkgPT4gewogICAgICAgIGk0IDwgcjMgJiYgczggPiByMyAmJiAoZTUgPSB0cnVlKTsKICAgICAgfSksIGU1ICYmIChuOCA9IG44LnVwZGF0ZSh7IGZpbHRlckZyb206IHIzLCBmaWx0ZXJUbzogcjMsIGZpbHRlcjogKGk0LCBzOCkgPT4gczggPD0gcjMgfHwgaTQgPj0gcjMgfSkpOwogICAgfQogICAgcmV0dXJuIG44OwogIH0sIHByb3ZpZGU6IChuOCkgPT4gTTIuZGVjb3JhdGlvbnMuZnJvbShuOCksIHRvSlNPTihuOCwgdDQpIHsKICAgIGxldCBlNSA9IFtdOwogICAgcmV0dXJuIG44LmJldHdlZW4oMCwgdDQuZG9jLmxlbmd0aCwgKHIzLCBpNCkgPT4gewogICAgICBlNS5wdXNoKHIzLCBpNCk7CiAgICB9KSwgZTU7CiAgfSwgZnJvbUpTT04objgpIHsKICAgIGlmICghQXJyYXkuaXNBcnJheShuOCkgfHwgbjgubGVuZ3RoICUgMikKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgSlNPTiBmb3IgZm9sZCBzdGF0ZSIpOwogICAgbGV0IHQ0ID0gW107CiAgICBmb3IgKGxldCBlNSA9IDA7IGU1IDwgbjgubGVuZ3RoOyApIHsKICAgICAgbGV0IHIzID0gbjhbZTUrK10sIGk0ID0gbjhbZTUrK107CiAgICAgIGlmICh0eXBlb2YgcjMgIT0gIm51bWJlciIgfHwgdHlwZW9mIGk0ICE9ICJudW1iZXIiKQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIEpTT04gZm9yIGZvbGQgc3RhdGUiKTsKICAgICAgdDQucHVzaChwdDIucmFuZ2UocjMsIGk0KSk7CiAgICB9CiAgICByZXR1cm4gay5zZXQodDQsIHRydWUpOwogIH0gfSk7CiAgZnVuY3Rpb24gejYobjgsIHQ0LCBlNSkgewogICAgdmFyIHIzOwogICAgbGV0IGk0ID0gbnVsbDsKICAgIHJldHVybiAocjMgPSBuOC5maWVsZChBNSwgZmFsc2UpKSA9PT0gbnVsbCB8fCByMyA9PT0gdm9pZCAwIHx8IHIzLmJldHdlZW4odDQsIGU1LCAoczgsIG80KSA9PiB7CiAgICAgICghaTQgfHwgaTQuZnJvbSA+IHM4KSAmJiAoaTQgPSB7IGZyb206IHM4LCB0bzogbzQgfSk7CiAgICB9KSwgaTQ7CiAgfQogIGZ1bmN0aW9uIG1lNihuOCwgdDQsIGU1KSB7CiAgICBsZXQgcjMgPSBmYWxzZTsKICAgIHJldHVybiBuOC5iZXR3ZWVuKHQ0LCB0NCwgKGk0LCBzOCkgPT4gewogICAgICBpNCA9PSB0NCAmJiBzOCA9PSBlNSAmJiAocjMgPSB0cnVlKTsKICAgIH0pLCByMzsKICB9CiAgdmFyIHllNiA9IHsgcGxhY2Vob2xkZXJET006IG51bGwsIHBsYWNlaG9sZGVyVGV4dDogIlx1MjAyNiIgfTsKICB2YXIgRXQyID0gQTIuZGVmaW5lKHsgY29tYmluZShuOCkgewogICAgcmV0dXJuIGh0KG44LCB5ZTYpOwogIH0gfSk7CiAgdmFyIHB0MiA9IGsucmVwbGFjZSh7IHdpZGdldDogbmV3IGNsYXNzIGV4dGVuZHMgWDQgewogICAgdG9ET00objgpIHsKICAgICAgbGV0IHsgc3RhdGU6IHQ0IH0gPSBuOCwgZTUgPSB0NC5mYWNldChFdDIpLCByMyA9IChzOCkgPT4gewogICAgICAgIGxldCBvNCA9IG44LmxpbmVCbG9ja0F0KG44LnBvc0F0RE9NKHM4LnRhcmdldCkpLCBsNyA9IHo2KG44LnN0YXRlLCBvNC5mcm9tLCBvNC50byk7CiAgICAgICAgbDcgJiYgbjguZGlzcGF0Y2goeyBlZmZlY3RzOiBSNC5vZihsNykgfSksIHM4LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH07CiAgICAgIGlmIChlNS5wbGFjZWhvbGRlckRPTSkKICAgICAgICByZXR1cm4gZTUucGxhY2Vob2xkZXJET00objgsIHIzKTsKICAgICAgbGV0IGk0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICByZXR1cm4gaTQudGV4dENvbnRlbnQgPSBlNS5wbGFjZWhvbGRlclRleHQsIGk0LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIHQ0LnBocmFzZSgiZm9sZGVkIGNvZGUiKSksIGk0LnRpdGxlID0gdDQucGhyYXNlKCJ1bmZvbGQiKSwgaTQuY2xhc3NOYW1lID0gImNtLWZvbGRQbGFjZWhvbGRlciIsIGk0Lm9uY2xpY2sgPSByMywgaTQ7CiAgICB9CiAgfSgpIH0pOwogIHZhciB4ZTYgPSBNMi5iYXNlVGhlbWUoeyAiLmNtLWZvbGRQbGFjZWhvbGRlciI6IHsgYmFja2dyb3VuZENvbG9yOiAiI2VlZSIsIGJvcmRlcjogIjFweCBzb2xpZCAjZGRkIiwgY29sb3I6ICIjODg4IiwgYm9yZGVyUmFkaXVzOiAiLjJlbSIsIG1hcmdpbjogIjAgMXB4IiwgcGFkZGluZzogIjAgMXB4IiwgY3Vyc29yOiAicG9pbnRlciIgfSwgIi5jbS1mb2xkR3V0dGVyIHNwYW4iOiB7IHBhZGRpbmc6ICIwIDFweCIsIGN1cnNvcjogInBvaW50ZXIiIH0gfSk7CiAgdmFyIEQ0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1KSB7CiAgICAgIGxldCByMzsKICAgICAgZnVuY3Rpb24gaTQobDcpIHsKICAgICAgICBsZXQgYTQgPSBUMi5uZXdOYW1lKCk7CiAgICAgICAgcmV0dXJuIChyMyB8fCAocjMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSkpWyIuIiArIGE0XSA9IGw3LCBhNDsKICAgICAgfQogICAgICBsZXQgczggPSB0eXBlb2YgZTUuYWxsID09ICJzdHJpbmciID8gZTUuYWxsIDogZTUuYWxsID8gaTQoZTUuYWxsKSA6IHZvaWQgMCwgbzQgPSBlNS5zY29wZTsKICAgICAgdGhpcy5zY29wZSA9IG80IGluc3RhbmNlb2YgYzIgPyAobDcpID0+IGw3LnByb3AoVDYpID09IG80LmRhdGEgOiBvNCA/IChsNykgPT4gbDcgPT0gbzQgOiB2b2lkIDAsIHRoaXMuc3R5bGUgPSBXNCh0NC5tYXAoKGw3KSA9PiAoeyB0YWc6IGw3LnRhZywgY2xhc3M6IGw3LmNsYXNzIHx8IGk0KE9iamVjdC5hc3NpZ24oe30sIGw3LCB7IHRhZzogbnVsbCB9KSkgfSkpLCB7IGFsbDogczggfSkuc3R5bGUsIHRoaXMubW9kdWxlID0gcjMgPyBuZXcgVDIocjMpIDogbnVsbCwgdGhpcy50aGVtZVR5cGUgPSBlNS50aGVtZVR5cGU7CiAgICB9CiAgICBzdGF0aWMgZGVmaW5lKHQ0LCBlNSkgewogICAgICByZXR1cm4gbmV3IEQ0KHQ0LCBlNSB8fCB7fSk7CiAgICB9CiAgfTsKICB2YXIgbnQzID0gQTIuZGVmaW5lKCk7CiAgdmFyIFJ0MiA9IEEyLmRlZmluZSh7IGNvbWJpbmUobjgpIHsKICAgIHJldHVybiBuOC5sZW5ndGggPyBbbjhbMF1dIDogbnVsbDsKICB9IH0pOwogIGZ1bmN0aW9uIEwzKG44KSB7CiAgICBsZXQgdDQgPSBuOC5mYWNldChudDMpOwogICAgcmV0dXJuIHQ0Lmxlbmd0aCA/IHQ0IDogbjguZmFjZXQoUnQyKTsKICB9CiAgdmFyIHJ0MyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHRoaXMubWFya0NhY2hlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksIHRoaXMudHJlZSA9IG00KHQ0LnN0YXRlKSwgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuYnVpbGREZWNvKHQ0LCBMMyh0NC5zdGF0ZSkpOwogICAgfQogICAgdXBkYXRlKHQ0KSB7CiAgICAgIGxldCBlNSA9IG00KHQ0LnN0YXRlKSwgcjMgPSBMMyh0NC5zdGF0ZSksIGk0ID0gcjMgIT0gTDModDQuc3RhcnRTdGF0ZSk7CiAgICAgIGU1Lmxlbmd0aCA8IHQ0LnZpZXcudmlld3BvcnQudG8gJiYgIWk0ICYmIGU1LnR5cGUgPT0gdGhpcy50cmVlLnR5cGUgPyB0aGlzLmRlY29yYXRpb25zID0gdGhpcy5kZWNvcmF0aW9ucy5tYXAodDQuY2hhbmdlcykgOiAoZTUgIT0gdGhpcy50cmVlIHx8IHQ0LnZpZXdwb3J0Q2hhbmdlZCB8fCBpNCkgJiYgKHRoaXMudHJlZSA9IGU1LCB0aGlzLmRlY29yYXRpb25zID0gdGhpcy5idWlsZERlY28odDQudmlldywgcjMpKTsKICAgIH0KICAgIGJ1aWxkRGVjbyh0NCwgZTUpIHsKICAgICAgaWYgKCFlNSB8fCAhdGhpcy50cmVlLmxlbmd0aCkKICAgICAgICByZXR1cm4gay5ub25lOwogICAgICBsZXQgcjMgPSBuZXcgWjIoKTsKICAgICAgZm9yIChsZXQgeyBmcm9tOiBpNCwgdG86IHM4IH0gb2YgdDQudmlzaWJsZVJhbmdlcykKICAgICAgICBfMyh0aGlzLnRyZWUsIGU1LCAobzQsIGw3LCBhNCkgPT4gewogICAgICAgICAgcjMuYWRkKG80LCBsNywgdGhpcy5tYXJrQ2FjaGVbYTRdIHx8ICh0aGlzLm1hcmtDYWNoZVthNF0gPSBrLm1hcmsoeyBjbGFzczogYTQgfSkpKTsKICAgICAgICB9LCBpNCwgczgpOwogICAgICByZXR1cm4gcjMuZmluaXNoKCk7CiAgICB9CiAgfTsKICB2YXIgU2U1ID0gbHQuaGlnaChWNC5mcm9tQ2xhc3MocnQzLCB7IGRlY29yYXRpb25zOiAobjgpID0+IG44LmRlY29yYXRpb25zIH0pKTsKICB2YXIgc24yID0gRDQuZGVmaW5lKFt7IHRhZzogbjIubWV0YSwgY29sb3I6ICIjN2E3NTdhIiB9LCB7IHRhZzogbjIubGluaywgdGV4dERlY29yYXRpb246ICJ1bmRlcmxpbmUiIH0sIHsgdGFnOiBuMi5oZWFkaW5nLCB0ZXh0RGVjb3JhdGlvbjogInVuZGVybGluZSIsIGZvbnRXZWlnaHQ6ICJib2xkIiB9LCB7IHRhZzogbjIuZW1waGFzaXMsIGZvbnRTdHlsZTogIml0YWxpYyIgfSwgeyB0YWc6IG4yLnN0cm9uZywgZm9udFdlaWdodDogImJvbGQiIH0sIHsgdGFnOiBuMi5zdHJpa2V0aHJvdWdoLCB0ZXh0RGVjb3JhdGlvbjogImxpbmUtdGhyb3VnaCIgfSwgeyB0YWc6IG4yLmtleXdvcmQsIGNvbG9yOiAiIzcwOCIgfSwgeyB0YWc6IFtuMi5hdG9tLCBuMi5ib29sLCBuMi51cmwsIG4yLmNvbnRlbnRTZXBhcmF0b3IsIG4yLmxhYmVsTmFtZV0sIGNvbG9yOiAiIzIxOSIgfSwgeyB0YWc6IFtuMi5saXRlcmFsLCBuMi5pbnNlcnRlZF0sIGNvbG9yOiAiIzE2NCIgfSwgeyB0YWc6IFtuMi5zdHJpbmcsIG4yLmRlbGV0ZWRdLCBjb2xvcjogIiNhMTEiIH0sIHsgdGFnOiBbbjIucmVnZXhwLCBuMi5lc2NhcGUsIG4yLnNwZWNpYWwobjIuc3RyaW5nKV0sIGNvbG9yOiAiI2U0MCIgfSwgeyB0YWc6IG4yLmRlZmluaXRpb24objIudmFyaWFibGVOYW1lKSwgY29sb3I6ICIjMDBmIiB9LCB7IHRhZzogbjIubG9jYWwobjIudmFyaWFibGVOYW1lKSwgY29sb3I6ICIjMzBhIiB9LCB7IHRhZzogW24yLnR5cGVOYW1lLCBuMi5uYW1lc3BhY2VdLCBjb2xvcjogIiMwODUiIH0sIHsgdGFnOiBuMi5jbGFzc05hbWUsIGNvbG9yOiAiIzE2NyIgfSwgeyB0YWc6IFtuMi5zcGVjaWFsKG4yLnZhcmlhYmxlTmFtZSksIG4yLm1hY3JvTmFtZV0sIGNvbG9yOiAiIzI1NiIgfSwgeyB0YWc6IG4yLmRlZmluaXRpb24objIucHJvcGVydHlOYW1lKSwgY29sb3I6ICIjMDBjIiB9LCB7IHRhZzogbjIuY29tbWVudCwgY29sb3I6ICIjOTQwIiB9LCB7IHRhZzogbjIuaW52YWxpZCwgY29sb3I6ICIjZjAwIiB9XSk7CiAgdmFyIFBlNiA9IE0yLmJhc2VUaGVtZSh7ICImLmNtLWZvY3VzZWQgLmNtLW1hdGNoaW5nQnJhY2tldCI6IHsgYmFja2dyb3VuZENvbG9yOiAiIzMyOGM4MjUyIiB9LCAiJi5jbS1mb2N1c2VkIC5jbS1ub25tYXRjaGluZ0JyYWNrZXQiOiB7IGJhY2tncm91bmRDb2xvcjogIiNiYjU1NTU0NCIgfSB9KTsKICB2YXIgVXQyID0gMWU0OwogIHZhciBXdDIgPSAiKClbXXt9IjsKICB2YXIgTHQgPSBBMi5kZWZpbmUoeyBjb21iaW5lKG44KSB7CiAgICByZXR1cm4gaHQobjgsIHsgYWZ0ZXJDdXJzb3I6IHRydWUsIGJyYWNrZXRzOiBXdDIsIG1heFNjYW5EaXN0YW5jZTogVXQyLCByZW5kZXJNYXRjaDogVGU0IH0pOwogIH0gfSk7CiAgdmFyIEFlNSA9IGsubWFyayh7IGNsYXNzOiAiY20tbWF0Y2hpbmdCcmFja2V0IiB9KTsKICB2YXIgQ2U2ID0gay5tYXJrKHsgY2xhc3M6ICJjbS1ub25tYXRjaGluZ0JyYWNrZXQiIH0pOwogIGZ1bmN0aW9uIFRlNChuOCkgewogICAgbGV0IHQ0ID0gW10sIGU1ID0gbjgubWF0Y2hlZCA/IEFlNSA6IENlNjsKICAgIHJldHVybiB0NC5wdXNoKGU1LnJhbmdlKG44LnN0YXJ0LmZyb20sIG44LnN0YXJ0LnRvKSksIG44LmVuZCAmJiB0NC5wdXNoKGU1LnJhbmdlKG44LmVuZC5mcm9tLCBuOC5lbmQudG8pKSwgdDQ7CiAgfQogIHZhciBEZTQgPSBKMi5kZWZpbmUoeyBjcmVhdGUoKSB7CiAgICByZXR1cm4gay5ub25lOwogIH0sIHVwZGF0ZShuOCwgdDQpIHsKICAgIGlmICghdDQuZG9jQ2hhbmdlZCAmJiAhdDQuc2VsZWN0aW9uKQogICAgICByZXR1cm4gbjg7CiAgICBsZXQgZTUgPSBbXSwgcjMgPSB0NC5zdGF0ZS5mYWNldChMdCk7CiAgICBmb3IgKGxldCBpNCBvZiB0NC5zdGF0ZS5zZWxlY3Rpb24ucmFuZ2VzKSB7CiAgICAgIGlmICghaTQuZW1wdHkpCiAgICAgICAgY29udGludWU7CiAgICAgIGxldCBzOCA9IFU0KHQ0LnN0YXRlLCBpNC5oZWFkLCAtMSwgcjMpIHx8IGk0LmhlYWQgPiAwICYmIFU0KHQ0LnN0YXRlLCBpNC5oZWFkIC0gMSwgMSwgcjMpIHx8IHIzLmFmdGVyQ3Vyc29yICYmIChVNCh0NC5zdGF0ZSwgaTQuaGVhZCwgMSwgcjMpIHx8IGk0LmhlYWQgPCB0NC5zdGF0ZS5kb2MubGVuZ3RoICYmIFU0KHQ0LnN0YXRlLCBpNC5oZWFkICsgMSwgLTEsIHIzKSk7CiAgICAgIHM4ICYmIChlNSA9IGU1LmNvbmNhdChyMy5yZW5kZXJNYXRjaChzOCwgdDQuc3RhdGUpKSk7CiAgICB9CiAgICByZXR1cm4gay5zZXQoZTUsIHRydWUpOwogIH0sIHByb3ZpZGU6IChuOCkgPT4gTTIuZGVjb3JhdGlvbnMuZnJvbShuOCkgfSk7CiAgZnVuY3Rpb24gaXQzKG44LCB0NCwgZTUpIHsKICAgIGxldCByMyA9IG44LnByb3AodDQgPCAwID8gdzMub3BlbmVkQnkgOiB3My5jbG9zZWRCeSk7CiAgICBpZiAocjMpCiAgICAgIHJldHVybiByMzsKICAgIGlmIChuOC5uYW1lLmxlbmd0aCA9PSAxKSB7CiAgICAgIGxldCBpNCA9IGU1LmluZGV4T2YobjgubmFtZSk7CiAgICAgIGlmIChpNCA+IC0xICYmIGk0ICUgMiA9PSAodDQgPCAwID8gMSA6IDApKQogICAgICAgIHJldHVybiBbZTVbaTQgKyB0NF1dOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIFU0KG44LCB0NCwgZTUsIHIzID0ge30pIHsKICAgIGxldCBpNCA9IHIzLm1heFNjYW5EaXN0YW5jZSB8fCBVdDIsIHM4ID0gcjMuYnJhY2tldHMgfHwgV3QyLCBvNCA9IG00KG44KSwgbDcgPSBvNC5yZXNvbHZlSW5uZXIodDQsIGU1KTsKICAgIGZvciAobGV0IGE0ID0gbDc7IGE0OyBhNCA9IGE0LnBhcmVudCkgewogICAgICBsZXQgaDEwID0gaXQzKGE0LnR5cGUsIGU1LCBzOCk7CiAgICAgIGlmIChoMTAgJiYgYTQuZnJvbSA8IGE0LnRvKQogICAgICAgIHJldHVybiBPZTQobjgsIHQ0LCBlNSwgYTQsIGgxMCwgczgpOwogICAgfQogICAgcmV0dXJuIE5lNChuOCwgdDQsIGU1LCBvNCwgbDcudHlwZSwgaTQsIHM4KTsKICB9CiAgZnVuY3Rpb24gT2U0KG44LCB0NCwgZTUsIHIzLCBpNCwgczgpIHsKICAgIGxldCBvNCA9IHIzLnBhcmVudCwgbDcgPSB7IGZyb206IHIzLmZyb20sIHRvOiByMy50byB9LCBhNCA9IDAsIGgxMCA9IG80Py5jdXJzb3IoKTsKICAgIGlmIChoMTAgJiYgKGU1IDwgMCA/IGgxMC5jaGlsZEJlZm9yZShyMy5mcm9tKSA6IGgxMC5jaGlsZEFmdGVyKHIzLnRvKSkpCiAgICAgIGRvCiAgICAgICAgaWYgKGU1IDwgMCA/IGgxMC50byA8PSByMy5mcm9tIDogaDEwLmZyb20gPj0gcjMudG8pIHsKICAgICAgICAgIGlmIChhNCA9PSAwICYmIGk0LmluZGV4T2YoaDEwLnR5cGUubmFtZSkgPiAtMSAmJiBoMTAuZnJvbSA8IGgxMC50bykKICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IGw3LCBlbmQ6IHsgZnJvbTogaDEwLmZyb20sIHRvOiBoMTAudG8gfSwgbWF0Y2hlZDogdHJ1ZSB9OwogICAgICAgICAgaWYgKGl0MyhoMTAudHlwZSwgZTUsIHM4KSkKICAgICAgICAgICAgYTQrKzsKICAgICAgICAgIGVsc2UgaWYgKGl0MyhoMTAudHlwZSwgLWU1LCBzOCkpIHsKICAgICAgICAgICAgaWYgKGE0ID09IDApCiAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IGw3LCBlbmQ6IGgxMC5mcm9tID09IGgxMC50byA/IHZvaWQgMCA6IHsgZnJvbTogaDEwLmZyb20sIHRvOiBoMTAudG8gfSwgbWF0Y2hlZDogZmFsc2UgfTsKICAgICAgICAgICAgYTQtLTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHdoaWxlIChlNSA8IDAgPyBoMTAucHJldlNpYmxpbmcoKSA6IGgxMC5uZXh0U2libGluZygpKTsKICAgIHJldHVybiB7IHN0YXJ0OiBsNywgbWF0Y2hlZDogZmFsc2UgfTsKICB9CiAgZnVuY3Rpb24gTmU0KG44LCB0NCwgZTUsIHIzLCBpNCwgczgsIG80KSB7CiAgICBsZXQgbDcgPSBlNSA8IDAgPyBuOC5zbGljZURvYyh0NCAtIDEsIHQ0KSA6IG44LnNsaWNlRG9jKHQ0LCB0NCArIDEpLCBhNCA9IG80LmluZGV4T2YobDcpOwogICAgaWYgKGE0IDwgMCB8fCBhNCAlIDIgPT0gMCAhPSBlNSA+IDApCiAgICAgIHJldHVybiBudWxsOwogICAgbGV0IGgxMCA9IHsgZnJvbTogZTUgPCAwID8gdDQgLSAxIDogdDQsIHRvOiBlNSA+IDAgPyB0NCArIDEgOiB0NCB9LCB1MTEgPSBuOC5kb2MuaXRlclJhbmdlKHQ0LCBlNSA+IDAgPyBuOC5kb2MubGVuZ3RoIDogMCksIGQxNSA9IDA7CiAgICBmb3IgKGxldCBnMTIgPSAwOyAhdTExLm5leHQoKS5kb25lICYmIGcxMiA8PSBzODsgKSB7CiAgICAgIGxldCB3MjEgPSB1MTEudmFsdWU7CiAgICAgIGU1IDwgMCAmJiAoZzEyICs9IHcyMS5sZW5ndGgpOwogICAgICBsZXQgUTE3ID0gdDQgKyBnMTIgKiBlNTsKICAgICAgZm9yIChsZXQgQzE3ID0gZTUgPiAwID8gMCA6IHcyMS5sZW5ndGggLSAxLCBHdDUgPSBlNSA+IDAgPyB3MjEubGVuZ3RoIDogLTE7IEMxNyAhPSBHdDU7IEMxNyArPSBlNSkgewogICAgICAgIGxldCBYMjMgPSBvNC5pbmRleE9mKHcyMVtDMTddKTsKICAgICAgICBpZiAoIShYMjMgPCAwIHx8IHIzLnJlc29sdmVJbm5lcihRMTcgKyBDMTcsIDEpLnR5cGUgIT0gaTQpKQogICAgICAgICAgaWYgKFgyMyAlIDIgPT0gMCA9PSBlNSA+IDApCiAgICAgICAgICAgIGQxNSsrOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChkMTUgPT0gMSkKICAgICAgICAgICAgICByZXR1cm4geyBzdGFydDogaDEwLCBlbmQ6IHsgZnJvbTogUTE3ICsgQzE3LCB0bzogUTE3ICsgQzE3ICsgMSB9LCBtYXRjaGVkOiBYMjMgPj4gMSA9PSBhNCA+PiAxIH07CiAgICAgICAgICAgIGQxNS0tOwogICAgICAgICAgfQogICAgICB9CiAgICAgIGU1ID4gMCAmJiAoZzEyICs9IHcyMS5sZW5ndGgpOwogICAgfQogICAgcmV0dXJuIHUxMS5kb25lID8geyBzdGFydDogaDEwLCBtYXRjaGVkOiBmYWxzZSB9IDogbnVsbDsKICB9CiAgdmFyIGh0MiA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogIHZhciBGMyA9IFtOMy5ub25lXTsKICB2YXIgRmU0ID0gbmV3IFozKEYzKTsKICB2YXIgZ3QgPSBbXTsKICB2YXIgVnQyID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgZm9yIChsZXQgW244LCB0NF0gb2YgW1sidmFyaWFibGUiLCAidmFyaWFibGVOYW1lIl0sIFsidmFyaWFibGUtMiIsICJ2YXJpYWJsZU5hbWUuc3BlY2lhbCJdLCBbInN0cmluZy0yIiwgInN0cmluZy5zcGVjaWFsIl0sIFsiZGVmIiwgInZhcmlhYmxlTmFtZS5kZWZpbml0aW9uIl0sIFsidGFnIiwgInRhZ05hbWUiXSwgWyJhdHRyaWJ1dGUiLCAiYXR0cmlidXRlTmFtZSJdLCBbInR5cGUiLCAidHlwZU5hbWUiXSwgWyJidWlsdGluIiwgInZhcmlhYmxlTmFtZS5zdGFuZGFyZCJdLCBbInF1YWxpZmllciIsICJtb2RpZmllciJdLCBbImVycm9yIiwgImludmFsaWQiXSwgWyJoZWFkZXIiLCAiaGVhZGluZyJdLCBbInByb3BlcnR5IiwgInByb3BlcnR5TmFtZSJdXSkKICAgIFZ0MltuOF0gPSB6dDIoaHQyLCB0NCk7CiAgdmFyIEg0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgdGhpcy5leHRyYSA9IHQ0LCB0aGlzLnRhYmxlID0gT2JqZWN0LmFzc2lnbigvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgVnQyKTsKICAgIH0KICAgIHJlc29sdmUodDQpIHsKICAgICAgcmV0dXJuIHQ0ID8gdGhpcy50YWJsZVt0NF0gfHwgKHRoaXMudGFibGVbdDRdID0genQyKHRoaXMuZXh0cmEsIHQ0KSkgOiAwOwogICAgfQogIH07CiAgdmFyIFJlNCA9IG5ldyBINChodDIpOwogIGZ1bmN0aW9uIHR0MyhuOCwgdDQpIHsKICAgIGd0LmluZGV4T2YobjgpID4gLTEgfHwgKGd0LnB1c2gobjgpLCBjb25zb2xlLndhcm4odDQpKTsKICB9CiAgZnVuY3Rpb24genQyKG44LCB0NCkgewogICAgbGV0IGU1ID0gbnVsbDsKICAgIGZvciAobGV0IHM4IG9mIHQ0LnNwbGl0KCIuIikpIHsKICAgICAgbGV0IG80ID0gbjhbczhdIHx8IG4yW3M4XTsKICAgICAgbzQgPyB0eXBlb2YgbzQgPT0gImZ1bmN0aW9uIiA/IGU1ID8gZTUgPSBvNChlNSkgOiB0dDMoczgsIGBNb2RpZmllciAke3M4fSB1c2VkIGF0IHN0YXJ0IG9mIHRhZ2ApIDogZTUgPyB0dDMoczgsIGBUYWcgJHtzOH0gdXNlZCBhcyBtb2RpZmllcmApIDogZTUgPSBvNCA6IHR0MyhzOCwgYFVua25vd24gaGlnaGxpZ2h0aW5nIHRhZyAke3M4fWApOwogICAgfQogICAgaWYgKCFlNSkKICAgICAgcmV0dXJuIDA7CiAgICBsZXQgcjMgPSB0NC5yZXBsYWNlKC8gL2csICJfIiksIGk0ID0gTjMuZGVmaW5lKHsgaWQ6IEYzLmxlbmd0aCwgbmFtZTogcjMsIHByb3BzOiBbJDUoeyBbcjNdOiBlNSB9KV0gfSk7CiAgICByZXR1cm4gRjMucHVzaChpNCksIGk0LmlkOwogIH0KCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlQDYuMy4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QWJHVjZaWEl2WTI5dGJXOXUvZGVuby9hdXRvY29tcGxldGUuanMKICB2YXIgRjQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIGk0KSB7CiAgICAgIHRoaXMuc3RhdGUgPSBlNSwgdGhpcy5wb3MgPSB0NCwgdGhpcy5leHBsaWNpdCA9IGk0LCB0aGlzLmFib3J0TGlzdGVuZXJzID0gW107CiAgICB9CiAgICB0b2tlbkJlZm9yZShlNSkgewogICAgICBsZXQgdDQgPSBtNCh0aGlzLnN0YXRlKS5yZXNvbHZlSW5uZXIodGhpcy5wb3MsIC0xKTsKICAgICAgZm9yICg7IHQ0ICYmIGU1LmluZGV4T2YodDQubmFtZSkgPCAwOyApCiAgICAgICAgdDQgPSB0NC5wYXJlbnQ7CiAgICAgIHJldHVybiB0NCA/IHsgZnJvbTogdDQuZnJvbSwgdG86IHRoaXMucG9zLCB0ZXh0OiB0aGlzLnN0YXRlLnNsaWNlRG9jKHQ0LmZyb20sIHRoaXMucG9zKSwgdHlwZTogdDQudHlwZSB9IDogbnVsbDsKICAgIH0KICAgIG1hdGNoQmVmb3JlKGU1KSB7CiAgICAgIGxldCB0NCA9IHRoaXMuc3RhdGUuZG9jLmxpbmVBdCh0aGlzLnBvcyksIGk0ID0gTWF0aC5tYXgodDQuZnJvbSwgdGhpcy5wb3MgLSAyNTApLCBvNCA9IHQ0LnRleHQuc2xpY2UoaTQgLSB0NC5mcm9tLCB0aGlzLnBvcyAtIHQ0LmZyb20pLCBzOCA9IG80LnNlYXJjaChBZTYoZTUsIGZhbHNlKSk7CiAgICAgIHJldHVybiBzOCA8IDAgPyBudWxsIDogeyBmcm9tOiBpNCArIHM4LCB0bzogdGhpcy5wb3MsIHRleHQ6IG80LnNsaWNlKHM4KSB9OwogICAgfQogICAgZ2V0IGFib3J0ZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLmFib3J0TGlzdGVuZXJzID09IG51bGw7CiAgICB9CiAgICBhZGRFdmVudExpc3RlbmVyKGU1LCB0NCkgewogICAgICBlNSA9PSAiYWJvcnQiICYmIHRoaXMuYWJvcnRMaXN0ZW5lcnMgJiYgdGhpcy5hYm9ydExpc3RlbmVycy5wdXNoKHQ0KTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIHVlNihuOCkgewogICAgbGV0IGU1ID0gT2JqZWN0LmtleXMobjgpLmpvaW4oIiIpLCB0NCA9IC9cdy8udGVzdChlNSk7CiAgICByZXR1cm4gdDQgJiYgKGU1ID0gZTUucmVwbGFjZSgvXHcvZywgIiIpKSwgYFske3Q0ID8gIlxcdyIgOiAiIn0ke2U1LnJlcGxhY2UoL1teXHdcc10vZywgIlxcJCYiKX1dYDsKICB9CiAgZnVuY3Rpb24gWWUzKG44KSB7CiAgICBsZXQgZTUgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgdDQgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIGZvciAobGV0IHsgbGFiZWw6IG80IH0gb2YgbjgpIHsKICAgICAgZTVbbzRbMF1dID0gdHJ1ZTsKICAgICAgZm9yIChsZXQgczggPSAxOyBzOCA8IG80Lmxlbmd0aDsgczgrKykKICAgICAgICB0NFtvNFtzOF1dID0gdHJ1ZTsKICAgIH0KICAgIGxldCBpNCA9IHVlNihlNSkgKyB1ZTYodDQpICsgIiokIjsKICAgIHJldHVybiBbbmV3IFJlZ0V4cCgiXiIgKyBpNCksIG5ldyBSZWdFeHAoaTQpXTsKICB9CiAgZnVuY3Rpb24gR2UzKG44KSB7CiAgICBsZXQgZTUgPSBuOC5tYXAoKG80KSA9PiB0eXBlb2YgbzQgPT0gInN0cmluZyIgPyB7IGxhYmVsOiBvNCB9IDogbzQpLCBbdDQsIGk0XSA9IGU1LmV2ZXJ5KChvNCkgPT4gL15cdyskLy50ZXN0KG80LmxhYmVsKSkgPyBbL1x3KiQvLCAvXHcrJC9dIDogWWUzKGU1KTsKICAgIHJldHVybiAobzQpID0+IHsKICAgICAgbGV0IHM4ID0gbzQubWF0Y2hCZWZvcmUoaTQpOwogICAgICByZXR1cm4gczggfHwgbzQuZXhwbGljaXQgPyB7IGZyb206IHM4ID8gczguZnJvbSA6IG80LnBvcywgb3B0aW9uczogZTUsIHZhbGlkRm9yOiB0NCB9IDogbnVsbDsKICAgIH07CiAgfQogIHZhciBONCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgaTQpIHsKICAgICAgdGhpcy5jb21wbGV0aW9uID0gZTUsIHRoaXMuc291cmNlID0gdDQsIHRoaXMubWF0Y2ggPSBpNDsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEk2KG44KSB7CiAgICByZXR1cm4gbjguc2VsZWN0aW9uLm1haW4uaGVhZDsKICB9CiAgZnVuY3Rpb24gQWU2KG44LCBlNSkgewogICAgdmFyIHQ0OwogICAgbGV0IHsgc291cmNlOiBpNCB9ID0gbjgsIG80ID0gZTUgJiYgaTRbMF0gIT0gIl4iLCBzOCA9IGk0W2k0Lmxlbmd0aCAtIDFdICE9ICIkIjsKICAgIHJldHVybiAhbzQgJiYgIXM4ID8gbjggOiBuZXcgUmVnRXhwKGAke280ID8gIl4iIDogIiJ9KD86JHtpNH0pJHtzOCA/ICIkIiA6ICIifWAsICh0NCA9IG44LmZsYWdzKSAhPT0gbnVsbCAmJiB0NCAhPT0gdm9pZCAwID8gdDQgOiBuOC5pZ25vcmVDYXNlID8gImkiIDogIiIpOwogIH0KICB2YXIgSHQyID0gRDIuZGVmaW5lKCk7CiAgZnVuY3Rpb24gSmUzKG44LCBlNSwgdDQsIGk0KSB7CiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBuOC5jaGFuZ2VCeVJhbmdlKChvNCkgPT4gewogICAgICBpZiAobzQgPT0gbjguc2VsZWN0aW9uLm1haW4pCiAgICAgICAgcmV0dXJuIHsgY2hhbmdlczogeyBmcm9tOiB0NCwgdG86IGk0LCBpbnNlcnQ6IGU1IH0sIHJhbmdlOiBnMi5jdXJzb3IodDQgKyBlNS5sZW5ndGgpIH07CiAgICAgIGxldCBzOCA9IGk0IC0gdDQ7CiAgICAgIHJldHVybiAhbzQuZW1wdHkgfHwgczggJiYgbjguc2xpY2VEb2MobzQuZnJvbSAtIHM4LCBvNC5mcm9tKSAhPSBuOC5zbGljZURvYyh0NCwgaTQpID8geyByYW5nZTogbzQgfSA6IHsgY2hhbmdlczogeyBmcm9tOiBvNC5mcm9tIC0gczgsIHRvOiBvNC5mcm9tLCBpbnNlcnQ6IGU1IH0sIHJhbmdlOiBnMi5jdXJzb3IobzQuZnJvbSAtIHM4ICsgZTUubGVuZ3RoKSB9OwogICAgfSkpLCB7IHVzZXJFdmVudDogImlucHV0LmNvbXBsZXRlIiB9KTsKICB9CiAgZnVuY3Rpb24gVGU1KG44LCBlNSkgewogICAgbGV0IHQ0ID0gZTUuY29tcGxldGlvbi5hcHBseSB8fCBlNS5jb21wbGV0aW9uLmxhYmVsLCBpNCA9IGU1LnNvdXJjZTsKICAgIHR5cGVvZiB0NCA9PSAic3RyaW5nIiA/IG44LmRpc3BhdGNoKEplMyhuOC5zdGF0ZSwgdDQsIGk0LmZyb20sIGk0LnRvKSkgOiB0NChuOCwgZTUuY29tcGxldGlvbiwgaTQuZnJvbSwgaTQudG8pOwogIH0KICB2YXIgaGU1ID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgZnVuY3Rpb24gWmUzKG44KSB7CiAgICBpZiAoIUFycmF5LmlzQXJyYXkobjgpKQogICAgICByZXR1cm4gbjg7CiAgICBsZXQgZTUgPSBoZTUuZ2V0KG44KTsKICAgIHJldHVybiBlNSB8fCBoZTUuc2V0KG44LCBlNSA9IEdlMyhuOCkpLCBlNTsKICB9CiAgdmFyIF81ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUpIHsKICAgICAgdGhpcy5wYXR0ZXJuID0gZTUsIHRoaXMuY2hhcnMgPSBbXSwgdGhpcy5mb2xkZWQgPSBbXSwgdGhpcy5hbnkgPSBbXSwgdGhpcy5wcmVjaXNlID0gW10sIHRoaXMuYnlXb3JkID0gW107CiAgICAgIGZvciAobGV0IHQ0ID0gMDsgdDQgPCBlNS5sZW5ndGg7ICkgewogICAgICAgIGxldCBpNCA9IG9lKGU1LCB0NCksIG80ID0gYmUyKGk0KTsKICAgICAgICB0aGlzLmNoYXJzLnB1c2goaTQpOwogICAgICAgIGxldCBzOCA9IGU1LnNsaWNlKHQ0LCB0NCArIG80KSwgcjMgPSBzOC50b1VwcGVyQ2FzZSgpOwogICAgICAgIHRoaXMuZm9sZGVkLnB1c2gob2UocjMgPT0gczggPyBzOC50b0xvd2VyQ2FzZSgpIDogcjMsIDApKSwgdDQgKz0gbzQ7CiAgICAgIH0KICAgICAgdGhpcy5hc3RyYWwgPSBlNS5sZW5ndGggIT0gdGhpcy5jaGFycy5sZW5ndGg7CiAgICB9CiAgICBtYXRjaChlNSkgewogICAgICBpZiAodGhpcy5wYXR0ZXJuLmxlbmd0aCA9PSAwKQogICAgICAgIHJldHVybiBbMF07CiAgICAgIGlmIChlNS5sZW5ndGggPCB0aGlzLnBhdHRlcm4ubGVuZ3RoKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBsZXQgeyBjaGFyczogdDQsIGZvbGRlZDogaTQsIGFueTogbzQsIHByZWNpc2U6IHM4LCBieVdvcmQ6IHIzIH0gPSB0aGlzOwogICAgICBpZiAodDQubGVuZ3RoID09IDEpIHsKICAgICAgICBsZXQgaDEwID0gb2UoZTUsIDApOwogICAgICAgIHJldHVybiBoMTAgPT0gdDRbMF0gPyBbMCwgMCwgYmUyKGgxMCldIDogaDEwID09IGk0WzBdID8gWy0yMDAsIDAsIGJlMihoMTApXSA6IG51bGw7CiAgICAgIH0KICAgICAgbGV0IGw3ID0gZTUuaW5kZXhPZih0aGlzLnBhdHRlcm4pOwogICAgICBpZiAobDcgPT0gMCkKICAgICAgICByZXR1cm4gWzAsIDAsIHRoaXMucGF0dGVybi5sZW5ndGhdOwogICAgICBsZXQgYzE3ID0gdDQubGVuZ3RoLCBhNCA9IDA7CiAgICAgIGlmIChsNyA8IDApIHsKICAgICAgICBmb3IgKGxldCBoMTAgPSAwLCBRMTcgPSBNYXRoLm1pbihlNS5sZW5ndGgsIDIwMCk7IGgxMCA8IFExNyAmJiBhNCA8IGMxNzsgKSB7CiAgICAgICAgICBsZXQgVDI5ID0gb2UoZTUsIGgxMCk7CiAgICAgICAgICAoVDI5ID09IHQ0W2E0XSB8fCBUMjkgPT0gaTRbYTRdKSAmJiAobzRbYTQrK10gPSBoMTApLCBoMTAgKz0gYmUyKFQyOSk7CiAgICAgICAgfQogICAgICAgIGlmIChhNCA8IGMxNykKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGxldCBmMTEgPSAwLCB1MTEgPSAwLCBDMTcgPSBmYWxzZSwgYjI1ID0gMCwgQTIwID0gLTEsIEsxOSA9IC0xLCBqZTcgPSAvW2Etel0vLnRlc3QoZTUpLCB6MjYgPSB0cnVlOwogICAgICBmb3IgKGxldCBoMTAgPSAwLCBRMTcgPSBNYXRoLm1pbihlNS5sZW5ndGgsIDIwMCksIFQyOSA9IDA7IGgxMCA8IFExNyAmJiB1MTEgPCBjMTc7ICkgewogICAgICAgIGxldCBtMjMgPSBvZShlNSwgaDEwKTsKICAgICAgICBsNyA8IDAgJiYgKGYxMSA8IGMxNyAmJiBtMjMgPT0gdDRbZjExXSAmJiAoczhbZjExKytdID0gaDEwKSwgYjI1IDwgYzE3ICYmIChtMjMgPT0gdDRbYjI1XSB8fCBtMjMgPT0gaTRbYjI1XSA/IChiMjUgPT0gMCAmJiAoQTIwID0gaDEwKSwgSzE5ID0gaDEwICsgMSwgYjI1KyspIDogYjI1ID0gMCkpOwogICAgICAgIGxldCBqMTksIFgyMyA9IG0yMyA8IDI1NSA/IG0yMyA+PSA0OCAmJiBtMjMgPD0gNTcgfHwgbTIzID49IDk3ICYmIG0yMyA8PSAxMjIgPyAyIDogbTIzID49IDY1ICYmIG0yMyA8PSA5MCA/IDEgOiAwIDogKGoxOSA9IHJ0KG0yMykpICE9IGoxOS50b0xvd2VyQ2FzZSgpID8gMSA6IGoxOSAhPSBqMTkudG9VcHBlckNhc2UoKSA/IDIgOiAwOwogICAgICAgICghaDEwIHx8IFgyMyA9PSAxICYmIGplNyB8fCBUMjkgPT0gMCAmJiBYMjMgIT0gMCkgJiYgKHQ0W3UxMV0gPT0gbTIzIHx8IGk0W3UxMV0gPT0gbTIzICYmIChDMTcgPSB0cnVlKSA/IHIzW3UxMSsrXSA9IGgxMCA6IHIzLmxlbmd0aCAmJiAoejI2ID0gZmFsc2UpKSwgVDI5ID0gWDIzLCBoMTAgKz0gYmUyKG0yMyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHUxMSA9PSBjMTcgJiYgcjNbMF0gPT0gMCAmJiB6MjYgPyB0aGlzLnJlc3VsdCgtMTAwICsgKEMxNyA/IC0yMDAgOiAwKSwgcjMsIGU1KSA6IGIyNSA9PSBjMTcgJiYgQTIwID09IDAgPyBbLTIwMCAtIGU1Lmxlbmd0aCwgMCwgSzE5XSA6IGw3ID4gLTEgPyBbLTcwMCAtIGU1Lmxlbmd0aCwgbDcsIGw3ICsgdGhpcy5wYXR0ZXJuLmxlbmd0aF0gOiBiMjUgPT0gYzE3ID8gWy0yMDAgKyAtNzAwIC0gZTUubGVuZ3RoLCBBMjAsIEsxOV0gOiB1MTEgPT0gYzE3ID8gdGhpcy5yZXN1bHQoLTEwMCArIChDMTcgPyAtMjAwIDogMCkgKyAtNzAwICsgKHoyNiA/IDAgOiAtMTEwMCksIHIzLCBlNSkgOiB0NC5sZW5ndGggPT0gMiA/IG51bGwgOiB0aGlzLnJlc3VsdCgobzRbMF0gPyAtNzAwIDogMCkgKyAtMjAwICsgLTExMDAsIG80LCBlNSk7CiAgICB9CiAgICByZXN1bHQoZTUsIHQ0LCBpNCkgewogICAgICBsZXQgbzQgPSBbZTUgLSBpNC5sZW5ndGhdLCBzOCA9IDE7CiAgICAgIGZvciAobGV0IHIzIG9mIHQ0KSB7CiAgICAgICAgbGV0IGw3ID0gcjMgKyAodGhpcy5hc3RyYWwgPyBiZTIob2UoaTQsIHIzKSkgOiAxKTsKICAgICAgICBzOCA+IDEgJiYgbzRbczggLSAxXSA9PSByMyA/IG80W3M4IC0gMV0gPSBsNyA6IChvNFtzOCsrXSA9IHIzLCBvNFtzOCsrXSA9IGw3KTsKICAgICAgfQogICAgICByZXR1cm4gbzQ7CiAgICB9CiAgfTsKICB2YXIgeDMgPSBBMi5kZWZpbmUoeyBjb21iaW5lKG44KSB7CiAgICByZXR1cm4gaHQobjgsIHsgYWN0aXZhdGVPblR5cGluZzogdHJ1ZSwgc2VsZWN0T25PcGVuOiB0cnVlLCBvdmVycmlkZTogbnVsbCwgY2xvc2VPbkJsdXI6IHRydWUsIG1heFJlbmRlcmVkT3B0aW9uczogMTAwLCBkZWZhdWx0S2V5bWFwOiB0cnVlLCBvcHRpb25DbGFzczogKCkgPT4gIiIsIGFib3ZlQ3Vyc29yOiBmYWxzZSwgaWNvbnM6IHRydWUsIGFkZFRvT3B0aW9uczogW10sIGNvbXBhcmVDb21wbGV0aW9uczogKGU1LCB0NCkgPT4gZTUubGFiZWwubG9jYWxlQ29tcGFyZSh0NC5sYWJlbCksIGludGVyYWN0aW9uRGVsYXk6IDc1IH0sIHsgZGVmYXVsdEtleW1hcDogKGU1LCB0NCkgPT4gZTUgJiYgdDQsIGNsb3NlT25CbHVyOiAoZTUsIHQ0KSA9PiBlNSAmJiB0NCwgaWNvbnM6IChlNSwgdDQpID0+IGU1ICYmIHQ0LCBvcHRpb25DbGFzczogKGU1LCB0NCkgPT4gKGk0KSA9PiBfZTYoZTUoaTQpLCB0NChpNCkpLCBhZGRUb09wdGlvbnM6IChlNSwgdDQpID0+IGU1LmNvbmNhdCh0NCkgfSk7CiAgfSB9KTsKICBmdW5jdGlvbiBfZTYobjgsIGU1KSB7CiAgICByZXR1cm4gbjggPyBlNSA/IG44ICsgIiAiICsgZTUgOiBuOCA6IGU1OwogIH0KICBmdW5jdGlvbiBldDMobjgpIHsKICAgIGxldCBlNSA9IG44LmFkZFRvT3B0aW9ucy5zbGljZSgpOwogICAgcmV0dXJuIG44Lmljb25zICYmIGU1LnB1c2goeyByZW5kZXIodDQpIHsKICAgICAgbGV0IGk0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHJldHVybiBpNC5jbGFzc0xpc3QuYWRkKCJjbS1jb21wbGV0aW9uSWNvbiIpLCB0NC50eXBlICYmIGk0LmNsYXNzTGlzdC5hZGQoLi4udDQudHlwZS5zcGxpdCgvXHMrL2cpLm1hcCgobzQpID0+ICJjbS1jb21wbGV0aW9uSWNvbi0iICsgbzQpKSwgaTQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsICJ0cnVlIiksIGk0OwogICAgfSwgcG9zaXRpb246IDIwIH0pLCBlNS5wdXNoKHsgcmVuZGVyKHQ0LCBpNCwgbzQpIHsKICAgICAgbGV0IHM4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICBzOC5jbGFzc05hbWUgPSAiY20tY29tcGxldGlvbkxhYmVsIjsKICAgICAgbGV0IHsgbGFiZWw6IHIzIH0gPSB0NCwgbDcgPSAwOwogICAgICBmb3IgKGxldCBjMTcgPSAxOyBjMTcgPCBvNC5sZW5ndGg7ICkgewogICAgICAgIGxldCBhNCA9IG80W2MxNysrXSwgZjExID0gbzRbYzE3KytdOwogICAgICAgIGE0ID4gbDcgJiYgczguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocjMuc2xpY2UobDcsIGE0KSkpOwogICAgICAgIGxldCB1MTEgPSBzOC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikpOwogICAgICAgIHUxMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyMy5zbGljZShhNCwgZjExKSkpLCB1MTEuY2xhc3NOYW1lID0gImNtLWNvbXBsZXRpb25NYXRjaGVkVGV4dCIsIGw3ID0gZjExOwogICAgICB9CiAgICAgIHJldHVybiBsNyA8IHIzLmxlbmd0aCAmJiBzOC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyMy5zbGljZShsNykpKSwgczg7CiAgICB9LCBwb3NpdGlvbjogNTAgfSwgeyByZW5kZXIodDQpIHsKICAgICAgaWYgKCF0NC5kZXRhaWwpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGxldCBpNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgcmV0dXJuIGk0LmNsYXNzTmFtZSA9ICJjbS1jb21wbGV0aW9uRGV0YWlsIiwgaTQudGV4dENvbnRlbnQgPSB0NC5kZXRhaWwsIGk0OwogICAgfSwgcG9zaXRpb246IDgwIH0pLCBlNS5zb3J0KCh0NCwgaTQpID0+IHQ0LnBvc2l0aW9uIC0gaTQucG9zaXRpb24pLm1hcCgodDQpID0+IHQ0LnJlbmRlcik7CiAgfQogIGZ1bmN0aW9uIHBlNihuOCwgZTUsIHQ0KSB7CiAgICBpZiAobjggPD0gdDQpCiAgICAgIHJldHVybiB7IGZyb206IDAsIHRvOiBuOCB9OwogICAgaWYgKGU1IDwgMCAmJiAoZTUgPSAwKSwgZTUgPD0gbjggPj4gMSkgewogICAgICBsZXQgbzQgPSBNYXRoLmZsb29yKGU1IC8gdDQpOwogICAgICByZXR1cm4geyBmcm9tOiBvNCAqIHQ0LCB0bzogKG80ICsgMSkgKiB0NCB9OwogICAgfQogICAgbGV0IGk0ID0gTWF0aC5mbG9vcigobjggLSBlNSkgLyB0NCk7CiAgICByZXR1cm4geyBmcm9tOiBuOCAtIChpNCArIDEpICogdDQsIHRvOiBuOCAtIGk0ICogdDQgfTsKICB9CiAgdmFyIGVlNSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCkgewogICAgICB0aGlzLnZpZXcgPSBlNSwgdGhpcy5zdGF0ZUZpZWxkID0gdDQsIHRoaXMuaW5mbyA9IG51bGwsIHRoaXMucGxhY2VJbmZvID0geyByZWFkOiAoKSA9PiB0aGlzLm1lYXN1cmVJbmZvKCksIHdyaXRlOiAobDcpID0+IHRoaXMucG9zaXRpb25JbmZvKGw3KSwga2V5OiB0aGlzIH07CiAgICAgIGxldCBpNCA9IGU1LnN0YXRlLmZpZWxkKHQ0KSwgeyBvcHRpb25zOiBvNCwgc2VsZWN0ZWQ6IHM4IH0gPSBpNC5vcGVuLCByMyA9IGU1LnN0YXRlLmZhY2V0KHgzKTsKICAgICAgdGhpcy5vcHRpb25Db250ZW50ID0gZXQzKHIzKSwgdGhpcy5vcHRpb25DbGFzcyA9IHIzLm9wdGlvbkNsYXNzLCB0aGlzLnJhbmdlID0gcGU2KG80Lmxlbmd0aCwgczgsIHIzLm1heFJlbmRlcmVkT3B0aW9ucyksIHRoaXMuZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksIHRoaXMuZG9tLmNsYXNzTmFtZSA9ICJjbS10b29sdGlwLWF1dG9jb21wbGV0ZSIsIHRoaXMuZG9tLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIChsNykgPT4gewogICAgICAgIGZvciAobGV0IGMxNyA9IGw3LnRhcmdldCwgYTQ7IGMxNyAmJiBjMTcgIT0gdGhpcy5kb207IGMxNyA9IGMxNy5wYXJlbnROb2RlKQogICAgICAgICAgaWYgKGMxNy5ub2RlTmFtZSA9PSAiTEkiICYmIChhNCA9IC8tKFxkKykkLy5leGVjKGMxNy5pZCkpICYmICthNFsxXSA8IG80Lmxlbmd0aCkgewogICAgICAgICAgICBUZTUoZTUsIG80WythNFsxXV0pLCBsNy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgIH0pLCB0aGlzLmxpc3QgPSB0aGlzLmRvbS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUxpc3RCb3gobzQsIGk0LmlkLCB0aGlzLnJhbmdlKSksIHRoaXMubGlzdC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCAoKSA9PiB7CiAgICAgICAgdGhpcy5pbmZvICYmIHRoaXMudmlldy5yZXF1ZXN0TWVhc3VyZSh0aGlzLnBsYWNlSW5mbyk7CiAgICAgIH0pOwogICAgfQogICAgbW91bnQoKSB7CiAgICAgIHRoaXMudXBkYXRlU2VsKCk7CiAgICB9CiAgICB1cGRhdGUoZTUpIHsKICAgICAgZTUuc3RhdGUuZmllbGQodGhpcy5zdGF0ZUZpZWxkKSAhPSBlNS5zdGFydFN0YXRlLmZpZWxkKHRoaXMuc3RhdGVGaWVsZCkgJiYgdGhpcy51cGRhdGVTZWwoKTsKICAgIH0KICAgIHBvc2l0aW9uZWQoKSB7CiAgICAgIHRoaXMuaW5mbyAmJiB0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pOwogICAgfQogICAgdXBkYXRlU2VsKCkgewogICAgICBsZXQgZTUgPSB0aGlzLnZpZXcuc3RhdGUuZmllbGQodGhpcy5zdGF0ZUZpZWxkKSwgdDQgPSBlNS5vcGVuOwogICAgICBpZiAoKHQ0LnNlbGVjdGVkID4gLTEgJiYgdDQuc2VsZWN0ZWQgPCB0aGlzLnJhbmdlLmZyb20gfHwgdDQuc2VsZWN0ZWQgPj0gdGhpcy5yYW5nZS50bykgJiYgKHRoaXMucmFuZ2UgPSBwZTYodDQub3B0aW9ucy5sZW5ndGgsIHQ0LnNlbGVjdGVkLCB0aGlzLnZpZXcuc3RhdGUuZmFjZXQoeDMpLm1heFJlbmRlcmVkT3B0aW9ucyksIHRoaXMubGlzdC5yZW1vdmUoKSwgdGhpcy5saXN0ID0gdGhpcy5kb20uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVMaXN0Qm94KHQ0Lm9wdGlvbnMsIGU1LmlkLCB0aGlzLnJhbmdlKSksIHRoaXMubGlzdC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCAoKSA9PiB7CiAgICAgICAgdGhpcy5pbmZvICYmIHRoaXMudmlldy5yZXF1ZXN0TWVhc3VyZSh0aGlzLnBsYWNlSW5mbyk7CiAgICAgIH0pKSwgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbih0NC5zZWxlY3RlZCkpIHsKICAgICAgICB0aGlzLmluZm8gJiYgKHRoaXMuaW5mby5yZW1vdmUoKSwgdGhpcy5pbmZvID0gbnVsbCk7CiAgICAgICAgbGV0IHsgY29tcGxldGlvbjogaTQgfSA9IHQ0Lm9wdGlvbnNbdDQuc2VsZWN0ZWRdLCB7IGluZm86IG80IH0gPSBpNDsKICAgICAgICBpZiAoIW80KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGxldCBzOCA9IHR5cGVvZiBvNCA9PSAic3RyaW5nIiA/IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG80KSA6IG80KGk0KTsKICAgICAgICBpZiAoIXM4KQogICAgICAgICAgcmV0dXJuOwogICAgICAgICJ0aGVuIiBpbiBzOCA/IHM4LnRoZW4oKHIzKSA9PiB7CiAgICAgICAgICByMyAmJiB0aGlzLnZpZXcuc3RhdGUuZmllbGQodGhpcy5zdGF0ZUZpZWxkLCBmYWxzZSkgPT0gZTUgJiYgdGhpcy5hZGRJbmZvUGFuZShyMyk7CiAgICAgICAgfSkuY2F0Y2goKHIzKSA9PiBudDIodGhpcy52aWV3LnN0YXRlLCByMywgImNvbXBsZXRpb24gaW5mbyIpKSA6IHRoaXMuYWRkSW5mb1BhbmUoczgpOwogICAgICB9CiAgICB9CiAgICBhZGRJbmZvUGFuZShlNSkgewogICAgICBsZXQgdDQgPSB0aGlzLmluZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgdDQuY2xhc3NOYW1lID0gImNtLXRvb2x0aXAgY20tY29tcGxldGlvbkluZm8iLCB0NC5hcHBlbmRDaGlsZChlNSksIHRoaXMuZG9tLmFwcGVuZENoaWxkKHQ0KSwgdGhpcy52aWV3LnJlcXVlc3RNZWFzdXJlKHRoaXMucGxhY2VJbmZvKTsKICAgIH0KICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKGU1KSB7CiAgICAgIGxldCB0NCA9IG51bGw7CiAgICAgIGZvciAobGV0IGk0ID0gdGhpcy5saXN0LmZpcnN0Q2hpbGQsIG80ID0gdGhpcy5yYW5nZS5mcm9tOyBpNDsgaTQgPSBpNC5uZXh0U2libGluZywgbzQrKykKICAgICAgICBvNCA9PSBlNSA/IGk0Lmhhc0F0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIpIHx8IChpNC5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCAidHJ1ZSIpLCB0NCA9IGk0KSA6IGk0Lmhhc0F0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIpICYmIGk0LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIpOwogICAgICByZXR1cm4gdDQgJiYgbnQ0KHRoaXMubGlzdCwgdDQpLCB0NDsKICAgIH0KICAgIG1lYXN1cmVJbmZvKCkgewogICAgICBsZXQgZTUgPSB0aGlzLmRvbS5xdWVyeVNlbGVjdG9yKCJbYXJpYS1zZWxlY3RlZF0iKTsKICAgICAgaWYgKCFlNSB8fCAhdGhpcy5pbmZvKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBsZXQgdDQgPSB0aGlzLmRvbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdywgaTQgPSB0aGlzLmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbzQgPSB0aGlzLmluZm8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHM4ID0gZTUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGlmIChzOC50b3AgPiBNYXRoLm1pbih0NC5pbm5lckhlaWdodCwgaTQuYm90dG9tKSAtIDEwIHx8IHM4LmJvdHRvbSA8IE1hdGgubWF4KDAsIGk0LnRvcCkgKyAxMCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgbGV0IHIzID0gdGhpcy52aWV3LnRleHREaXJlY3Rpb24gPT0gUjIuUlRMLCBsNyA9IHIzLCBjMTcgPSBmYWxzZSwgYTQsIGYxMSA9ICIiLCB1MTEgPSAiIiwgQzE3ID0gaTQubGVmdCwgYjI1ID0gdDQuaW5uZXJXaWR0aCAtIGk0LnJpZ2h0OwogICAgICBpZiAobDcgJiYgQzE3IDwgTWF0aC5taW4obzQud2lkdGgsIGIyNSkgPyBsNyA9IGZhbHNlIDogIWw3ICYmIGIyNSA8IE1hdGgubWluKG80LndpZHRoLCBDMTcpICYmIChsNyA9IHRydWUpLCBvNC53aWR0aCA8PSAobDcgPyBDMTcgOiBiMjUpKQogICAgICAgIGYxMSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHM4LnRvcCwgdDQuaW5uZXJIZWlnaHQgLSBvNC5oZWlnaHQpKSAtIGk0LnRvcCArICJweCIsIGE0ID0gTWF0aC5taW4oNDAwLCBsNyA/IEMxNyA6IGIyNSkgKyAicHgiOwogICAgICBlbHNlIHsKICAgICAgICBjMTcgPSB0cnVlLCBhNCA9IE1hdGgubWluKDQwMCwgKHIzID8gaTQucmlnaHQgOiB0NC5pbm5lcldpZHRoIC0gaTQubGVmdCkgLSAzMCkgKyAicHgiOwogICAgICAgIGxldCBBMjAgPSB0NC5pbm5lckhlaWdodCAtIGk0LmJvdHRvbTsKICAgICAgICBBMjAgPj0gbzQuaGVpZ2h0IHx8IEEyMCA+IGk0LnRvcCA/IGYxMSA9IHM4LmJvdHRvbSAtIGk0LnRvcCArICJweCIgOiB1MTEgPSBpNC5ib3R0b20gLSBzOC50b3AgKyAicHgiOwogICAgICB9CiAgICAgIHJldHVybiB7IHRvcDogZjExLCBib3R0b206IHUxMSwgbWF4V2lkdGg6IGE0LCBjbGFzczogYzE3ID8gcjMgPyAibGVmdC1uYXJyb3ciIDogInJpZ2h0LW5hcnJvdyIgOiBsNyA/ICJsZWZ0IiA6ICJyaWdodCIgfTsKICAgIH0KICAgIHBvc2l0aW9uSW5mbyhlNSkgewogICAgICB0aGlzLmluZm8gJiYgKGU1ID8gKHRoaXMuaW5mby5zdHlsZS50b3AgPSBlNS50b3AsIHRoaXMuaW5mby5zdHlsZS5ib3R0b20gPSBlNS5ib3R0b20sIHRoaXMuaW5mby5zdHlsZS5tYXhXaWR0aCA9IGU1Lm1heFdpZHRoLCB0aGlzLmluZm8uY2xhc3NOYW1lID0gImNtLXRvb2x0aXAgY20tY29tcGxldGlvbkluZm8gY20tY29tcGxldGlvbkluZm8tIiArIGU1LmNsYXNzKSA6IHRoaXMuaW5mby5zdHlsZS50b3AgPSAiLTFlNnB4Iik7CiAgICB9CiAgICBjcmVhdGVMaXN0Qm94KGU1LCB0NCwgaTQpIHsKICAgICAgbGV0IG80ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidWwiKTsKICAgICAgbzQuaWQgPSB0NCwgbzQuc2V0QXR0cmlidXRlKCJyb2xlIiwgImxpc3Rib3giKSwgbzQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwgInRydWUiKSwgbzQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwgdGhpcy52aWV3LnN0YXRlLnBocmFzZSgiQ29tcGxldGlvbnMiKSk7CiAgICAgIGZvciAobGV0IHM4ID0gaTQuZnJvbTsgczggPCBpNC50bzsgczgrKykgewogICAgICAgIGxldCB7IGNvbXBsZXRpb246IHIzLCBtYXRjaDogbDcgfSA9IGU1W3M4XSwgYzE3ID0gbzQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKSk7CiAgICAgICAgYzE3LmlkID0gdDQgKyAiLSIgKyBzOCwgYzE3LnNldEF0dHJpYnV0ZSgicm9sZSIsICJvcHRpb24iKTsKICAgICAgICBsZXQgYTQgPSB0aGlzLm9wdGlvbkNsYXNzKHIzKTsKICAgICAgICBhNCAmJiAoYzE3LmNsYXNzTmFtZSA9IGE0KTsKICAgICAgICBmb3IgKGxldCBmMTEgb2YgdGhpcy5vcHRpb25Db250ZW50KSB7CiAgICAgICAgICBsZXQgdTExID0gZjExKHIzLCB0aGlzLnZpZXcuc3RhdGUsIGw3KTsKICAgICAgICAgIHUxMSAmJiBjMTcuYXBwZW5kQ2hpbGQodTExKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGk0LmZyb20gJiYgbzQuY2xhc3NMaXN0LmFkZCgiY20tY29tcGxldGlvbkxpc3RJbmNvbXBsZXRlVG9wIiksIGk0LnRvIDwgZTUubGVuZ3RoICYmIG80LmNsYXNzTGlzdC5hZGQoImNtLWNvbXBsZXRpb25MaXN0SW5jb21wbGV0ZUJvdHRvbSIpLCBvNDsKICAgIH0KICB9OwogIGZ1bmN0aW9uIHR0NChuOCkgewogICAgcmV0dXJuIChlNSkgPT4gbmV3IGVlNShlNSwgbjgpOwogIH0KICBmdW5jdGlvbiBudDQobjgsIGU1KSB7CiAgICBsZXQgdDQgPSBuOC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgaTQgPSBlNS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGk0LnRvcCA8IHQ0LnRvcCA/IG44LnNjcm9sbFRvcCAtPSB0NC50b3AgLSBpNC50b3AgOiBpNC5ib3R0b20gPiB0NC5ib3R0b20gJiYgKG44LnNjcm9sbFRvcCArPSBpNC5ib3R0b20gLSB0NC5ib3R0b20pOwogIH0KICBmdW5jdGlvbiBkZTUobjgpIHsKICAgIHJldHVybiAobjguYm9vc3QgfHwgMCkgKiAxMDAgKyAobjguYXBwbHkgPyAxMCA6IDApICsgKG44LmluZm8gPyA1IDogMCkgKyAobjgudHlwZSA/IDEgOiAwKTsKICB9CiAgZnVuY3Rpb24gaXQ0KG44LCBlNSkgewogICAgbGV0IHQ0ID0gW10sIGk0ID0gMDsKICAgIGZvciAobGV0IGw3IG9mIG44KQogICAgICBpZiAobDcuaGFzUmVzdWx0KCkpCiAgICAgICAgaWYgKGw3LnJlc3VsdC5maWx0ZXIgPT09IGZhbHNlKSB7CiAgICAgICAgICBsZXQgYzE3ID0gbDcucmVzdWx0LmdldE1hdGNoOwogICAgICAgICAgZm9yIChsZXQgYTQgb2YgbDcucmVzdWx0Lm9wdGlvbnMpIHsKICAgICAgICAgICAgbGV0IGYxMSA9IFsxZTkgLSBpNCsrXTsKICAgICAgICAgICAgaWYgKGMxNykKICAgICAgICAgICAgICBmb3IgKGxldCB1MTEgb2YgYzE3KGE0KSkKICAgICAgICAgICAgICAgIGYxMS5wdXNoKHUxMSk7CiAgICAgICAgICAgIHQ0LnB1c2gobmV3IE40KGE0LCBsNywgZjExKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxldCBjMTcgPSBuZXcgXzUoZTUuc2xpY2VEb2MobDcuZnJvbSwgbDcudG8pKSwgYTQ7CiAgICAgICAgICBmb3IgKGxldCBmMTEgb2YgbDcucmVzdWx0Lm9wdGlvbnMpCiAgICAgICAgICAgIChhNCA9IGMxNy5tYXRjaChmMTEubGFiZWwpKSAmJiAoZjExLmJvb3N0ICE9IG51bGwgJiYgKGE0WzBdICs9IGYxMS5ib29zdCksIHQ0LnB1c2gobmV3IE40KGYxMSwgbDcsIGE0KSkpOwogICAgICAgIH0KICAgIGxldCBvNCA9IFtdLCBzOCA9IG51bGwsIHIzID0gZTUuZmFjZXQoeDMpLmNvbXBhcmVDb21wbGV0aW9uczsKICAgIGZvciAobGV0IGw3IG9mIHQ0LnNvcnQoKGMxNywgYTQpID0+IGE0Lm1hdGNoWzBdIC0gYzE3Lm1hdGNoWzBdIHx8IHIzKGMxNy5jb21wbGV0aW9uLCBhNC5jb21wbGV0aW9uKSkpCiAgICAgICFzOCB8fCBzOC5sYWJlbCAhPSBsNy5jb21wbGV0aW9uLmxhYmVsIHx8IHM4LmRldGFpbCAhPSBsNy5jb21wbGV0aW9uLmRldGFpbCB8fCBzOC50eXBlICE9IG51bGwgJiYgbDcuY29tcGxldGlvbi50eXBlICE9IG51bGwgJiYgczgudHlwZSAhPSBsNy5jb21wbGV0aW9uLnR5cGUgfHwgczguYXBwbHkgIT0gbDcuY29tcGxldGlvbi5hcHBseSA/IG80LnB1c2gobDcpIDogZGU1KGw3LmNvbXBsZXRpb24pID4gZGU1KHM4KSAmJiAobzRbbzQubGVuZ3RoIC0gMV0gPSBsNyksIHM4ID0gbDcuY29tcGxldGlvbjsKICAgIHJldHVybiBvNDsKICB9CiAgdmFyIFA2ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCBpNCwgbzQsIHM4KSB7CiAgICAgIHRoaXMub3B0aW9ucyA9IGU1LCB0aGlzLmF0dHJzID0gdDQsIHRoaXMudG9vbHRpcCA9IGk0LCB0aGlzLnRpbWVzdGFtcCA9IG80LCB0aGlzLnNlbGVjdGVkID0gczg7CiAgICB9CiAgICBzZXRTZWxlY3RlZChlNSwgdDQpIHsKICAgICAgcmV0dXJuIGU1ID09IHRoaXMuc2VsZWN0ZWQgfHwgZTUgPj0gdGhpcy5vcHRpb25zLmxlbmd0aCA/IHRoaXMgOiBuZXcgUDYodGhpcy5vcHRpb25zLCBtZTcodDQsIGU1KSwgdGhpcy50b29sdGlwLCB0aGlzLnRpbWVzdGFtcCwgZTUpOwogICAgfQogICAgc3RhdGljIGJ1aWxkKGU1LCB0NCwgaTQsIG80LCBzOCkgewogICAgICBsZXQgcjMgPSBpdDQoZTUsIHQ0KTsKICAgICAgaWYgKCFyMy5sZW5ndGgpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGxldCBsNyA9IHQ0LmZhY2V0KHgzKS5zZWxlY3RPbk9wZW4gPyAwIDogLTE7CiAgICAgIGlmIChvNCAmJiBvNC5zZWxlY3RlZCAhPSBsNyAmJiBvNC5zZWxlY3RlZCAhPSAtMSkgewogICAgICAgIGxldCBjMTcgPSBvNC5vcHRpb25zW280LnNlbGVjdGVkXS5jb21wbGV0aW9uOwogICAgICAgIGZvciAobGV0IGE0ID0gMDsgYTQgPCByMy5sZW5ndGg7IGE0KyspCiAgICAgICAgICBpZiAocjNbYTRdLmNvbXBsZXRpb24gPT0gYzE3KSB7CiAgICAgICAgICAgIGw3ID0gYTQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBuZXcgUDYocjMsIG1lNyhpNCwgbDcpLCB7IHBvczogZTUucmVkdWNlKChjMTcsIGE0KSA9PiBhNC5oYXNSZXN1bHQoKSA/IE1hdGgubWluKGMxNywgYTQuZnJvbSkgOiBjMTcsIDFlOCksIGNyZWF0ZTogdHQ0KGQyKSwgYWJvdmU6IHM4LmFib3ZlQ3Vyc29yIH0sIG80ID8gbzQudGltZXN0YW1wIDogRGF0ZS5ub3coKSwgbDcpOwogICAgfQogICAgbWFwKGU1KSB7CiAgICAgIHJldHVybiBuZXcgUDYodGhpcy5vcHRpb25zLCB0aGlzLmF0dHJzLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMudG9vbHRpcCksIHsgcG9zOiBlNS5tYXBQb3ModGhpcy50b29sdGlwLnBvcykgfSksIHRoaXMudGltZXN0YW1wLCB0aGlzLnNlbGVjdGVkKTsKICAgIH0KICB9OwogIHZhciBNNSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgaTQpIHsKICAgICAgdGhpcy5hY3RpdmUgPSBlNSwgdGhpcy5pZCA9IHQ0LCB0aGlzLm9wZW4gPSBpNDsKICAgIH0KICAgIHN0YXRpYyBzdGFydCgpIHsKICAgICAgcmV0dXJuIG5ldyBNNShsdDMsICJjbS1hYy0iICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMmU2KS50b1N0cmluZygzNiksIG51bGwpOwogICAgfQogICAgdXBkYXRlKGU1KSB7CiAgICAgIGxldCB7IHN0YXRlOiB0NCB9ID0gZTUsIGk0ID0gdDQuZmFjZXQoeDMpLCBzOCA9IChpNC5vdmVycmlkZSB8fCB0NC5sYW5ndWFnZURhdGFBdCgiYXV0b2NvbXBsZXRlIiwgSTYodDQpKS5tYXAoWmUzKSkubWFwKChsNykgPT4gKHRoaXMuYWN0aXZlLmZpbmQoKGE0KSA9PiBhNC5zb3VyY2UgPT0gbDcpIHx8IG5ldyBwMyhsNywgdGhpcy5hY3RpdmUuc29tZSgoYTQpID0+IGE0LnN0YXRlICE9IDApID8gMSA6IDApKS51cGRhdGUoZTUsIGk0KSk7CiAgICAgIHM4Lmxlbmd0aCA9PSB0aGlzLmFjdGl2ZS5sZW5ndGggJiYgczguZXZlcnkoKGw3LCBjMTcpID0+IGw3ID09IHRoaXMuYWN0aXZlW2MxN10pICYmIChzOCA9IHRoaXMuYWN0aXZlKTsKICAgICAgbGV0IHIzID0gZTUuc2VsZWN0aW9uIHx8IHM4LnNvbWUoKGw3KSA9PiBsNy5oYXNSZXN1bHQoKSAmJiBlNS5jaGFuZ2VzLnRvdWNoZXNSYW5nZShsNy5mcm9tLCBsNy50bykpIHx8ICFvdDIoczgsIHRoaXMuYWN0aXZlKSA/IFA2LmJ1aWxkKHM4LCB0NCwgdGhpcy5pZCwgdGhpcy5vcGVuLCBpNCkgOiB0aGlzLm9wZW4gJiYgZTUuZG9jQ2hhbmdlZCA/IHRoaXMub3Blbi5tYXAoZTUuY2hhbmdlcykgOiB0aGlzLm9wZW47CiAgICAgICFyMyAmJiBzOC5ldmVyeSgobDcpID0+IGw3LnN0YXRlICE9IDEpICYmIHM4LnNvbWUoKGw3KSA9PiBsNy5oYXNSZXN1bHQoKSkgJiYgKHM4ID0gczgubWFwKChsNykgPT4gbDcuaGFzUmVzdWx0KCkgPyBuZXcgcDMobDcuc291cmNlLCAwKSA6IGw3KSk7CiAgICAgIGZvciAobGV0IGw3IG9mIGU1LmVmZmVjdHMpCiAgICAgICAgbDcuaXMobGU1KSAmJiAocjMgPSByMyAmJiByMy5zZXRTZWxlY3RlZChsNy52YWx1ZSwgdGhpcy5pZCkpOwogICAgICByZXR1cm4gczggPT0gdGhpcy5hY3RpdmUgJiYgcjMgPT0gdGhpcy5vcGVuID8gdGhpcyA6IG5ldyBNNShzOCwgdGhpcy5pZCwgcjMpOwogICAgfQogICAgZ2V0IHRvb2x0aXAoKSB7CiAgICAgIHJldHVybiB0aGlzLm9wZW4gPyB0aGlzLm9wZW4udG9vbHRpcCA6IG51bGw7CiAgICB9CiAgICBnZXQgYXR0cnMoKSB7CiAgICAgIHJldHVybiB0aGlzLm9wZW4gPyB0aGlzLm9wZW4uYXR0cnMgOiBzdDM7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBvdDIobjgsIGU1KSB7CiAgICBpZiAobjggPT0gZTUpCiAgICAgIHJldHVybiB0cnVlOwogICAgZm9yIChsZXQgdDQgPSAwLCBpNCA9IDA7IDsgKSB7CiAgICAgIGZvciAoOyB0NCA8IG44Lmxlbmd0aCAmJiAhbjhbdDRdLmhhc1Jlc3VsdDsgKQogICAgICAgIHQ0Kys7CiAgICAgIGZvciAoOyBpNCA8IGU1Lmxlbmd0aCAmJiAhZTVbaTRdLmhhc1Jlc3VsdDsgKQogICAgICAgIGk0Kys7CiAgICAgIGxldCBvNCA9IHQ0ID09IG44Lmxlbmd0aCwgczggPSBpNCA9PSBlNS5sZW5ndGg7CiAgICAgIGlmIChvNCB8fCBzOCkKICAgICAgICByZXR1cm4gbzQgPT0gczg7CiAgICAgIGlmIChuOFt0NCsrXS5yZXN1bHQgIT0gZTVbaTQrK10ucmVzdWx0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgdmFyIHN0MyA9IHsgImFyaWEtYXV0b2NvbXBsZXRlIjogImxpc3QiIH07CiAgZnVuY3Rpb24gbWU3KG44LCBlNSkgewogICAgbGV0IHQ0ID0geyAiYXJpYS1hdXRvY29tcGxldGUiOiAibGlzdCIsICJhcmlhLWhhc3BvcHVwIjogImxpc3Rib3giLCAiYXJpYS1jb250cm9scyI6IG44IH07CiAgICByZXR1cm4gZTUgPiAtMSAmJiAodDRbImFyaWEtYWN0aXZlZGVzY2VuZGFudCJdID0gbjggKyAiLSIgKyBlNSksIHQ0OwogIH0KICB2YXIgbHQzID0gW107CiAgZnVuY3Rpb24gdGU1KG44KSB7CiAgICByZXR1cm4gbjguaXNVc2VyRXZlbnQoImlucHV0LnR5cGUiKSA/ICJpbnB1dCIgOiBuOC5pc1VzZXJFdmVudCgiZGVsZXRlLmJhY2t3YXJkIikgPyAiZGVsZXRlIiA6IG51bGw7CiAgfQogIHZhciBwMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgaTQgPSAtMSkgewogICAgICB0aGlzLnNvdXJjZSA9IGU1LCB0aGlzLnN0YXRlID0gdDQsIHRoaXMuZXhwbGljaXRQb3MgPSBpNDsKICAgIH0KICAgIGhhc1Jlc3VsdCgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXBkYXRlKGU1LCB0NCkgewogICAgICBsZXQgaTQgPSB0ZTUoZTUpLCBvNCA9IHRoaXM7CiAgICAgIGk0ID8gbzQgPSBvNC5oYW5kbGVVc2VyRXZlbnQoZTUsIGk0LCB0NCkgOiBlNS5kb2NDaGFuZ2VkID8gbzQgPSBvNC5oYW5kbGVDaGFuZ2UoZTUpIDogZTUuc2VsZWN0aW9uICYmIG80LnN0YXRlICE9IDAgJiYgKG80ID0gbmV3IHAzKG80LnNvdXJjZSwgMCkpOwogICAgICBmb3IgKGxldCBzOCBvZiBlNS5lZmZlY3RzKQogICAgICAgIGlmIChzOC5pcyhzZTUpKQogICAgICAgICAgbzQgPSBuZXcgcDMobzQuc291cmNlLCAxLCBzOC52YWx1ZSA/IEk2KGU1LnN0YXRlKSA6IC0xKTsKICAgICAgICBlbHNlIGlmIChzOC5pcyhINSkpCiAgICAgICAgICBvNCA9IG5ldyBwMyhvNC5zb3VyY2UsIDApOwogICAgICAgIGVsc2UgaWYgKHM4LmlzKE1lNSkpCiAgICAgICAgICBmb3IgKGxldCByMyBvZiBzOC52YWx1ZSkKICAgICAgICAgICAgcjMuc291cmNlID09IG80LnNvdXJjZSAmJiAobzQgPSByMyk7CiAgICAgIHJldHVybiBvNDsKICAgIH0KICAgIGhhbmRsZVVzZXJFdmVudChlNSwgdDQsIGk0KSB7CiAgICAgIHJldHVybiB0NCA9PSAiZGVsZXRlIiB8fCAhaTQuYWN0aXZhdGVPblR5cGluZyA/IHRoaXMubWFwKGU1LmNoYW5nZXMpIDogbmV3IHAzKHRoaXMuc291cmNlLCAxKTsKICAgIH0KICAgIGhhbmRsZUNoYW5nZShlNSkgewogICAgICByZXR1cm4gZTUuY2hhbmdlcy50b3VjaGVzUmFuZ2UoSTYoZTUuc3RhcnRTdGF0ZSkpID8gbmV3IHAzKHRoaXMuc291cmNlLCAwKSA6IHRoaXMubWFwKGU1LmNoYW5nZXMpOwogICAgfQogICAgbWFwKGU1KSB7CiAgICAgIHJldHVybiBlNS5lbXB0eSB8fCB0aGlzLmV4cGxpY2l0UG9zIDwgMCA/IHRoaXMgOiBuZXcgcDModGhpcy5zb3VyY2UsIHRoaXMuc3RhdGUsIGU1Lm1hcFBvcyh0aGlzLmV4cGxpY2l0UG9zKSk7CiAgICB9CiAgfTsKICB2YXIgTzQgPSBjbGFzcyBleHRlbmRzIHAzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgaTQsIG80LCBzOCkgewogICAgICBzdXBlcihlNSwgMiwgdDQpLCB0aGlzLnJlc3VsdCA9IGk0LCB0aGlzLmZyb20gPSBvNCwgdGhpcy50byA9IHM4OwogICAgfQogICAgaGFzUmVzdWx0KCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGhhbmRsZVVzZXJFdmVudChlNSwgdDQsIGk0KSB7CiAgICAgIHZhciBvNDsKICAgICAgbGV0IHM4ID0gZTUuY2hhbmdlcy5tYXBQb3ModGhpcy5mcm9tKSwgcjMgPSBlNS5jaGFuZ2VzLm1hcFBvcyh0aGlzLnRvLCAxKSwgbDcgPSBJNihlNS5zdGF0ZSk7CiAgICAgIGlmICgodGhpcy5leHBsaWNpdFBvcyA8IDAgPyBsNyA8PSBzOCA6IGw3IDwgdGhpcy5mcm9tKSB8fCBsNyA+IHIzIHx8IHQ0ID09ICJkZWxldGUiICYmIEk2KGU1LnN0YXJ0U3RhdGUpID09IHRoaXMuZnJvbSkKICAgICAgICByZXR1cm4gbmV3IHAzKHRoaXMuc291cmNlLCB0NCA9PSAiaW5wdXQiICYmIGk0LmFjdGl2YXRlT25UeXBpbmcgPyAxIDogMCk7CiAgICAgIGxldCBjMTcgPSB0aGlzLmV4cGxpY2l0UG9zIDwgMCA/IC0xIDogZTUuY2hhbmdlcy5tYXBQb3ModGhpcy5leHBsaWNpdFBvcyksIGE0OwogICAgICByZXR1cm4gcnQ0KHRoaXMucmVzdWx0LnZhbGlkRm9yLCBlNS5zdGF0ZSwgczgsIHIzKSA/IG5ldyBPNCh0aGlzLnNvdXJjZSwgYzE3LCB0aGlzLnJlc3VsdCwgczgsIHIzKSA6IHRoaXMucmVzdWx0LnVwZGF0ZSAmJiAoYTQgPSB0aGlzLnJlc3VsdC51cGRhdGUodGhpcy5yZXN1bHQsIHM4LCByMywgbmV3IEY0KGU1LnN0YXRlLCBsNywgYzE3ID49IDApKSkgPyBuZXcgTzQodGhpcy5zb3VyY2UsIGMxNywgYTQsIGE0LmZyb20sIChvNCA9IGE0LnRvKSAhPT0gbnVsbCAmJiBvNCAhPT0gdm9pZCAwID8gbzQgOiBJNihlNS5zdGF0ZSkpIDogbmV3IHAzKHRoaXMuc291cmNlLCAxLCBjMTcpOwogICAgfQogICAgaGFuZGxlQ2hhbmdlKGU1KSB7CiAgICAgIHJldHVybiBlNS5jaGFuZ2VzLnRvdWNoZXNSYW5nZSh0aGlzLmZyb20sIHRoaXMudG8pID8gbmV3IHAzKHRoaXMuc291cmNlLCAwKSA6IHRoaXMubWFwKGU1LmNoYW5nZXMpOwogICAgfQogICAgbWFwKGU1KSB7CiAgICAgIHJldHVybiBlNS5lbXB0eSA/IHRoaXMgOiBuZXcgTzQodGhpcy5zb3VyY2UsIHRoaXMuZXhwbGljaXRQb3MgPCAwID8gLTEgOiBlNS5tYXBQb3ModGhpcy5leHBsaWNpdFBvcyksIHRoaXMucmVzdWx0LCBlNS5tYXBQb3ModGhpcy5mcm9tKSwgZTUubWFwUG9zKHRoaXMudG8sIDEpKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIHJ0NChuOCwgZTUsIHQ0LCBpNCkgewogICAgaWYgKCFuOCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IG80ID0gZTUuc2xpY2VEb2ModDQsIGk0KTsKICAgIHJldHVybiB0eXBlb2YgbjggPT0gImZ1bmN0aW9uIiA/IG44KG80LCB0NCwgaTQsIGU1KSA6IEFlNihuOCwgdHJ1ZSkudGVzdChvNCk7CiAgfQogIHZhciBzZTUgPSB5LmRlZmluZSgpOwogIHZhciBINSA9IHkuZGVmaW5lKCk7CiAgdmFyIE1lNSA9IHkuZGVmaW5lKHsgbWFwKG44LCBlNSkgewogICAgcmV0dXJuIG44Lm1hcCgodDQpID0+IHQ0Lm1hcChlNSkpOwogIH0gfSk7CiAgdmFyIGxlNSA9IHkuZGVmaW5lKCk7CiAgdmFyIGQyID0gSjIuZGVmaW5lKHsgY3JlYXRlKCkgewogICAgcmV0dXJuIE01LnN0YXJ0KCk7CiAgfSwgdXBkYXRlKG44LCBlNSkgewogICAgcmV0dXJuIG44LnVwZGF0ZShlNSk7CiAgfSwgcHJvdmlkZTogKG44KSA9PiBbbm4uZnJvbShuOCwgKGU1KSA9PiBlNS50b29sdGlwKSwgTTIuY29udGVudEF0dHJpYnV0ZXMuZnJvbShuOCwgKGU1KSA9PiBlNS5hdHRycyldIH0pOwogIGZ1bmN0aW9uIFU1KG44LCBlNSA9ICJvcHRpb24iKSB7CiAgICByZXR1cm4gKHQ0KSA9PiB7CiAgICAgIGxldCBpNCA9IHQ0LnN0YXRlLmZpZWxkKGQyLCBmYWxzZSk7CiAgICAgIGlmICghaTQgfHwgIWk0Lm9wZW4gfHwgRGF0ZS5ub3coKSAtIGk0Lm9wZW4udGltZXN0YW1wIDwgdDQuc3RhdGUuZmFjZXQoeDMpLmludGVyYWN0aW9uRGVsYXkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgbzQgPSAxLCBzODsKICAgICAgZTUgPT0gInBhZ2UiICYmIChzOCA9IHVvKHQ0LCBpNC5vcGVuLnRvb2x0aXApKSAmJiAobzQgPSBNYXRoLm1heCgyLCBNYXRoLmZsb29yKHM4LmRvbS5vZmZzZXRIZWlnaHQgLyBzOC5kb20ucXVlcnlTZWxlY3RvcigibGkiKS5vZmZzZXRIZWlnaHQpIC0gMSkpOwogICAgICBsZXQgeyBsZW5ndGg6IHIzIH0gPSBpNC5vcGVuLm9wdGlvbnMsIGw3ID0gaTQub3Blbi5zZWxlY3RlZCA+IC0xID8gaTQub3Blbi5zZWxlY3RlZCArIG80ICogKG44ID8gMSA6IC0xKSA6IG44ID8gMCA6IHIzIC0gMTsKICAgICAgcmV0dXJuIGw3IDwgMCA/IGw3ID0gZTUgPT0gInBhZ2UiID8gMCA6IHIzIC0gMSA6IGw3ID49IHIzICYmIChsNyA9IGU1ID09ICJwYWdlIiA/IHIzIC0gMSA6IDApLCB0NC5kaXNwYXRjaCh7IGVmZmVjdHM6IGxlNS5vZihsNykgfSksIHRydWU7CiAgICB9OwogIH0KICB2YXIgY3QzID0gKG44KSA9PiB7CiAgICBsZXQgZTUgPSBuOC5zdGF0ZS5maWVsZChkMiwgZmFsc2UpOwogICAgcmV0dXJuIG44LnN0YXRlLnJlYWRPbmx5IHx8ICFlNSB8fCAhZTUub3BlbiB8fCBlNS5vcGVuLnNlbGVjdGVkIDwgMCB8fCBEYXRlLm5vdygpIC0gZTUub3Blbi50aW1lc3RhbXAgPCBuOC5zdGF0ZS5mYWNldCh4MykuaW50ZXJhY3Rpb25EZWxheSA/IGZhbHNlIDogKFRlNShuOCwgZTUub3Blbi5vcHRpb25zW2U1Lm9wZW4uc2VsZWN0ZWRdKSwgdHJ1ZSk7CiAgfTsKICB2YXIgYXQyID0gKG44KSA9PiBuOC5zdGF0ZS5maWVsZChkMiwgZmFsc2UpID8gKG44LmRpc3BhdGNoKHsgZWZmZWN0czogc2U1Lm9mKHRydWUpIH0pLCB0cnVlKSA6IGZhbHNlOwogIHZhciBmdCA9IChuOCkgPT4gewogICAgbGV0IGU1ID0gbjguc3RhdGUuZmllbGQoZDIsIGZhbHNlKTsKICAgIHJldHVybiAhZTUgfHwgIWU1LmFjdGl2ZS5zb21lKCh0NCkgPT4gdDQuc3RhdGUgIT0gMCkgPyBmYWxzZSA6IChuOC5kaXNwYXRjaCh7IGVmZmVjdHM6IEg1Lm9mKG51bGwpIH0pLCB0cnVlKTsKICB9OwogIHZhciBuZTUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQpIHsKICAgICAgdGhpcy5hY3RpdmUgPSBlNSwgdGhpcy5jb250ZXh0ID0gdDQsIHRoaXMudGltZSA9IERhdGUubm93KCksIHRoaXMudXBkYXRlcyA9IFtdLCB0aGlzLmRvbmUgPSB2b2lkIDA7CiAgICB9CiAgfTsKICB2YXIgZ2U2ID0gNTA7CiAgdmFyIHV0MyA9IDUwOwogIHZhciBodDMgPSAxZTM7CiAgdmFyIHB0MyA9IFY0LmZyb21DbGFzcyhjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihuOCkgewogICAgICB0aGlzLnZpZXcgPSBuOCwgdGhpcy5kZWJvdW5jZVVwZGF0ZSA9IC0xLCB0aGlzLnJ1bm5pbmcgPSBbXSwgdGhpcy5kZWJvdW5jZUFjY2VwdCA9IC0xLCB0aGlzLmNvbXBvc2luZyA9IDA7CiAgICAgIGZvciAobGV0IGU1IG9mIG44LnN0YXRlLmZpZWxkKGQyKS5hY3RpdmUpCiAgICAgICAgZTUuc3RhdGUgPT0gMSAmJiB0aGlzLnN0YXJ0UXVlcnkoZTUpOwogICAgfQogICAgdXBkYXRlKG44KSB7CiAgICAgIGxldCBlNSA9IG44LnN0YXRlLmZpZWxkKGQyKTsKICAgICAgaWYgKCFuOC5zZWxlY3Rpb25TZXQgJiYgIW44LmRvY0NoYW5nZWQgJiYgbjguc3RhcnRTdGF0ZS5maWVsZChkMikgPT0gZTUpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgdDQgPSBuOC50cmFuc2FjdGlvbnMuc29tZSgoaTQpID0+IChpNC5zZWxlY3Rpb24gfHwgaTQuZG9jQ2hhbmdlZCkgJiYgIXRlNShpNCkpOwogICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgdGhpcy5ydW5uaW5nLmxlbmd0aDsgaTQrKykgewogICAgICAgIGxldCBvNCA9IHRoaXMucnVubmluZ1tpNF07CiAgICAgICAgaWYgKHQ0IHx8IG80LnVwZGF0ZXMubGVuZ3RoICsgbjgudHJhbnNhY3Rpb25zLmxlbmd0aCA+IHV0MyAmJiBEYXRlLm5vdygpIC0gbzQudGltZSA+IGh0MykgewogICAgICAgICAgZm9yIChsZXQgczggb2YgbzQuY29udGV4dC5hYm9ydExpc3RlbmVycykKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBzOCgpOwogICAgICAgICAgICB9IGNhdGNoIChyMykgewogICAgICAgICAgICAgIG50Mih0aGlzLnZpZXcuc3RhdGUsIHIzKTsKICAgICAgICAgICAgfQogICAgICAgICAgbzQuY29udGV4dC5hYm9ydExpc3RlbmVycyA9IG51bGwsIHRoaXMucnVubmluZy5zcGxpY2UoaTQtLSwgMSk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBvNC51cGRhdGVzLnB1c2goLi4ubjgudHJhbnNhY3Rpb25zKTsKICAgICAgfQogICAgICBpZiAodGhpcy5kZWJvdW5jZVVwZGF0ZSA+IC0xICYmIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVXBkYXRlKSwgdGhpcy5kZWJvdW5jZVVwZGF0ZSA9IGU1LmFjdGl2ZS5zb21lKChpNCkgPT4gaTQuc3RhdGUgPT0gMSAmJiAhdGhpcy5ydW5uaW5nLnNvbWUoKG80KSA9PiBvNC5hY3RpdmUuc291cmNlID09IGk0LnNvdXJjZSkpID8gc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0YXJ0VXBkYXRlKCksIGdlNikgOiAtMSwgdGhpcy5jb21wb3NpbmcgIT0gMCkKICAgICAgICBmb3IgKGxldCBpNCBvZiBuOC50cmFuc2FjdGlvbnMpCiAgICAgICAgICB0ZTUoaTQpID09ICJpbnB1dCIgPyB0aGlzLmNvbXBvc2luZyA9IDIgOiB0aGlzLmNvbXBvc2luZyA9PSAyICYmIGk0LnNlbGVjdGlvbiAmJiAodGhpcy5jb21wb3NpbmcgPSAzKTsKICAgIH0KICAgIHN0YXJ0VXBkYXRlKCkgewogICAgICB0aGlzLmRlYm91bmNlVXBkYXRlID0gLTE7CiAgICAgIGxldCB7IHN0YXRlOiBuOCB9ID0gdGhpcy52aWV3LCBlNSA9IG44LmZpZWxkKGQyKTsKICAgICAgZm9yIChsZXQgdDQgb2YgZTUuYWN0aXZlKQogICAgICAgIHQ0LnN0YXRlID09IDEgJiYgIXRoaXMucnVubmluZy5zb21lKChpNCkgPT4gaTQuYWN0aXZlLnNvdXJjZSA9PSB0NC5zb3VyY2UpICYmIHRoaXMuc3RhcnRRdWVyeSh0NCk7CiAgICB9CiAgICBzdGFydFF1ZXJ5KG44KSB7CiAgICAgIGxldCB7IHN0YXRlOiBlNSB9ID0gdGhpcy52aWV3LCB0NCA9IEk2KGU1KSwgaTQgPSBuZXcgRjQoZTUsIHQ0LCBuOC5leHBsaWNpdFBvcyA9PSB0NCksIG80ID0gbmV3IG5lNShuOCwgaTQpOwogICAgICB0aGlzLnJ1bm5pbmcucHVzaChvNCksIFByb21pc2UucmVzb2x2ZShuOC5zb3VyY2UoaTQpKS50aGVuKChzOCkgPT4gewogICAgICAgIG80LmNvbnRleHQuYWJvcnRlZCB8fCAobzQuZG9uZSA9IHM4IHx8IG51bGwsIHRoaXMuc2NoZWR1bGVBY2NlcHQoKSk7CiAgICAgIH0sIChzOCkgPT4gewogICAgICAgIHRoaXMudmlldy5kaXNwYXRjaCh7IGVmZmVjdHM6IEg1Lm9mKG51bGwpIH0pLCBudDIodGhpcy52aWV3LnN0YXRlLCBzOCk7CiAgICAgIH0pOwogICAgfQogICAgc2NoZWR1bGVBY2NlcHQoKSB7CiAgICAgIHRoaXMucnVubmluZy5ldmVyeSgobjgpID0+IG44LmRvbmUgIT09IHZvaWQgMCkgPyB0aGlzLmFjY2VwdCgpIDogdGhpcy5kZWJvdW5jZUFjY2VwdCA8IDAgJiYgKHRoaXMuZGVib3VuY2VBY2NlcHQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWNjZXB0KCksIGdlNikpOwogICAgfQogICAgYWNjZXB0KCkgewogICAgICB2YXIgbjg7CiAgICAgIHRoaXMuZGVib3VuY2VBY2NlcHQgPiAtMSAmJiBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZUFjY2VwdCksIHRoaXMuZGVib3VuY2VBY2NlcHQgPSAtMTsKICAgICAgbGV0IGU1ID0gW10sIHQ0ID0gdGhpcy52aWV3LnN0YXRlLmZhY2V0KHgzKTsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IHRoaXMucnVubmluZy5sZW5ndGg7IGk0KyspIHsKICAgICAgICBsZXQgbzQgPSB0aGlzLnJ1bm5pbmdbaTRdOwogICAgICAgIGlmIChvNC5kb25lID09PSB2b2lkIDApCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAodGhpcy5ydW5uaW5nLnNwbGljZShpNC0tLCAxKSwgbzQuZG9uZSkgewogICAgICAgICAgbGV0IHIzID0gbmV3IE80KG80LmFjdGl2ZS5zb3VyY2UsIG80LmFjdGl2ZS5leHBsaWNpdFBvcywgbzQuZG9uZSwgbzQuZG9uZS5mcm9tLCAobjggPSBvNC5kb25lLnRvKSAhPT0gbnVsbCAmJiBuOCAhPT0gdm9pZCAwID8gbjggOiBJNihvNC51cGRhdGVzLmxlbmd0aCA/IG80LnVwZGF0ZXNbMF0uc3RhcnRTdGF0ZSA6IHRoaXMudmlldy5zdGF0ZSkpOwogICAgICAgICAgZm9yIChsZXQgbDcgb2YgbzQudXBkYXRlcykKICAgICAgICAgICAgcjMgPSByMy51cGRhdGUobDcsIHQ0KTsKICAgICAgICAgIGlmIChyMy5oYXNSZXN1bHQoKSkgewogICAgICAgICAgICBlNS5wdXNoKHIzKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxldCBzOCA9IHRoaXMudmlldy5zdGF0ZS5maWVsZChkMikuYWN0aXZlLmZpbmQoKHIzKSA9PiByMy5zb3VyY2UgPT0gbzQuYWN0aXZlLnNvdXJjZSk7CiAgICAgICAgaWYgKHM4ICYmIHM4LnN0YXRlID09IDEpCiAgICAgICAgICBpZiAobzQuZG9uZSA9PSBudWxsKSB7CiAgICAgICAgICAgIGxldCByMyA9IG5ldyBwMyhvNC5hY3RpdmUuc291cmNlLCAwKTsKICAgICAgICAgICAgZm9yIChsZXQgbDcgb2YgbzQudXBkYXRlcykKICAgICAgICAgICAgICByMyA9IHIzLnVwZGF0ZShsNywgdDQpOwogICAgICAgICAgICByMy5zdGF0ZSAhPSAxICYmIGU1LnB1c2gocjMpOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIHRoaXMuc3RhcnRRdWVyeShzOCk7CiAgICAgIH0KICAgICAgZTUubGVuZ3RoICYmIHRoaXMudmlldy5kaXNwYXRjaCh7IGVmZmVjdHM6IE1lNS5vZihlNSkgfSk7CiAgICB9CiAgfSwgeyBldmVudEhhbmRsZXJzOiB7IGJsdXIoKSB7CiAgICBsZXQgbjggPSB0aGlzLnZpZXcuc3RhdGUuZmllbGQoZDIsIGZhbHNlKTsKICAgIG44ICYmIG44LnRvb2x0aXAgJiYgdGhpcy52aWV3LnN0YXRlLmZhY2V0KHgzKS5jbG9zZU9uQmx1ciAmJiB0aGlzLnZpZXcuZGlzcGF0Y2goeyBlZmZlY3RzOiBINS5vZihudWxsKSB9KTsKICB9LCBjb21wb3NpdGlvbnN0YXJ0KCkgewogICAgdGhpcy5jb21wb3NpbmcgPSAxOwogIH0sIGNvbXBvc2l0aW9uZW5kKCkgewogICAgdGhpcy5jb21wb3NpbmcgPT0gMyAmJiBzZXRUaW1lb3V0KCgpID0+IHRoaXMudmlldy5kaXNwYXRjaCh7IGVmZmVjdHM6IHNlNS5vZihmYWxzZSkgfSksIDIwKSwgdGhpcy5jb21wb3NpbmcgPSAwOwogIH0gfSB9KTsKICB2YXIgUmU1ID0gTTIuYmFzZVRoZW1lKHsgIi5jbS10b29sdGlwLmNtLXRvb2x0aXAtYXV0b2NvbXBsZXRlIjogeyAiJiA+IHVsIjogeyBmb250RmFtaWx5OiAibW9ub3NwYWNlIiwgd2hpdGVTcGFjZTogIm5vd3JhcCIsIG92ZXJmbG93OiAiaGlkZGVuIGF1dG8iLCBtYXhXaWR0aF9mYWxsYmFjazogIjcwMHB4IiwgbWF4V2lkdGg6ICJtaW4oNzAwcHgsIDk1dncpIiwgbWluV2lkdGg6ICIyNTBweCIsIG1heEhlaWdodDogIjEwZW0iLCBsaXN0U3R5bGU6ICJub25lIiwgbWFyZ2luOiAwLCBwYWRkaW5nOiAwLCAiJiA+IGxpIjogeyBvdmVyZmxvd1g6ICJoaWRkZW4iLCB0ZXh0T3ZlcmZsb3c6ICJlbGxpcHNpcyIsIGN1cnNvcjogInBvaW50ZXIiLCBwYWRkaW5nOiAiMXB4IDNweCIsIGxpbmVIZWlnaHQ6IDEuMiB9IH0gfSwgIiZsaWdodCAuY20tdG9vbHRpcC1hdXRvY29tcGxldGUgdWwgbGlbYXJpYS1zZWxlY3RlZF0iOiB7IGJhY2tncm91bmQ6ICIjMTdjIiwgY29sb3I6ICJ3aGl0ZSIgfSwgIiZkYXJrIC5jbS10b29sdGlwLWF1dG9jb21wbGV0ZSB1bCBsaVthcmlhLXNlbGVjdGVkXSI6IHsgYmFja2dyb3VuZDogIiMzNDciLCBjb2xvcjogIndoaXRlIiB9LCAiLmNtLWNvbXBsZXRpb25MaXN0SW5jb21wbGV0ZVRvcDpiZWZvcmUsIC5jbS1jb21wbGV0aW9uTGlzdEluY29tcGxldGVCb3R0b206YWZ0ZXIiOiB7IGNvbnRlbnQ6ICciXHhCN1x4QjdceEI3IicsIG9wYWNpdHk6IDAuNSwgZGlzcGxheTogImJsb2NrIiwgdGV4dEFsaWduOiAiY2VudGVyIiB9LCAiLmNtLXRvb2x0aXAuY20tY29tcGxldGlvbkluZm8iOiB7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCBwYWRkaW5nOiAiM3B4IDlweCIsIHdpZHRoOiAibWF4LWNvbnRlbnQiLCBtYXhXaWR0aDogYCR7NDAwfXB4YCwgYm94U2l6aW5nOiAiYm9yZGVyLWJveCIgfSwgIi5jbS1jb21wbGV0aW9uSW5mby5jbS1jb21wbGV0aW9uSW5mby1sZWZ0IjogeyByaWdodDogIjEwMCUiIH0sICIuY20tY29tcGxldGlvbkluZm8uY20tY29tcGxldGlvbkluZm8tcmlnaHQiOiB7IGxlZnQ6ICIxMDAlIiB9LCAiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLWxlZnQtbmFycm93IjogeyByaWdodDogYCR7MzB9cHhgIH0sICIuY20tY29tcGxldGlvbkluZm8uY20tY29tcGxldGlvbkluZm8tcmlnaHQtbmFycm93IjogeyBsZWZ0OiBgJHszMH1weGAgfSwgIiZsaWdodCAuY20tc25pcHBldEZpZWxkIjogeyBiYWNrZ3JvdW5kQ29sb3I6ICIjMDAwMDAwMjIiIH0sICImZGFyayAuY20tc25pcHBldEZpZWxkIjogeyBiYWNrZ3JvdW5kQ29sb3I6ICIjZmZmZmZmMjIiIH0sICIuY20tc25pcHBldEZpZWxkUG9zaXRpb24iOiB7IHZlcnRpY2FsQWxpZ246ICJ0ZXh0LXRvcCIsIHdpZHRoOiAwLCBoZWlnaHQ6ICIxLjE1ZW0iLCBkaXNwbGF5OiAiaW5saW5lLWJsb2NrIiwgbWFyZ2luOiAiMCAtMC43cHggLS43ZW0iLCBib3JkZXJMZWZ0OiAiMS40cHggZG90dGVkICM4ODgiIH0sICIuY20tY29tcGxldGlvbk1hdGNoZWRUZXh0IjogeyB0ZXh0RGVjb3JhdGlvbjogInVuZGVybGluZSIgfSwgIi5jbS1jb21wbGV0aW9uRGV0YWlsIjogeyBtYXJnaW5MZWZ0OiAiMC41ZW0iLCBmb250U3R5bGU6ICJpdGFsaWMiIH0sICIuY20tY29tcGxldGlvbkljb24iOiB7IGZvbnRTaXplOiAiOTAlIiwgd2lkdGg6ICIuOGVtIiwgZGlzcGxheTogImlubGluZS1ibG9jayIsIHRleHRBbGlnbjogImNlbnRlciIsIHBhZGRpbmdSaWdodDogIi42ZW0iLCBvcGFjaXR5OiAiMC42IiB9LCAiLmNtLWNvbXBsZXRpb25JY29uLWZ1bmN0aW9uLCAuY20tY29tcGxldGlvbkljb24tbWV0aG9kIjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidcdTAxOTInIiB9IH0sICIuY20tY29tcGxldGlvbkljb24tY2xhc3MiOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ1x1MjVDQiciIH0gfSwgIi5jbS1jb21wbGV0aW9uSWNvbi1pbnRlcmZhY2UiOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ1x1MjVDQyciIH0gfSwgIi5jbS1jb21wbGV0aW9uSWNvbi12YXJpYWJsZSI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInXHV7MUQ0NjV9JyIgfSB9LCAiLmNtLWNvbXBsZXRpb25JY29uLWNvbnN0YW50IjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidcdXsxRDQzNn0nIiB9IH0sICIuY20tY29tcGxldGlvbkljb24tdHlwZSI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInXHV7MUQ0NjF9JyIgfSB9LCAiLmNtLWNvbXBsZXRpb25JY29uLWVudW0iOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ1x1MjIyQSciIH0gfSwgIi5jbS1jb21wbGV0aW9uSWNvbi1wcm9wZXJ0eSI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInXHUyNUExJyIgfSB9LCAiLmNtLWNvbXBsZXRpb25JY29uLWtleXdvcmQiOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ1x1ezFGNTExfVx1RkUwRSciIH0gfSwgIi5jbS1jb21wbGV0aW9uSWNvbi1uYW1lc3BhY2UiOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ1x1MjVBMiciIH0gfSwgIi5jbS1jb21wbGV0aW9uSWNvbi10ZXh0IjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidhYmMnIiwgZm9udFNpemU6ICI1MCUiLCB2ZXJ0aWNhbEFsaWduOiAibWlkZGxlIiB9IH0gfSk7CiAgdmFyIGllNSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgaTQsIG80KSB7CiAgICAgIHRoaXMuZmllbGQgPSBlNSwgdGhpcy5saW5lID0gdDQsIHRoaXMuZnJvbSA9IGk0LCB0aGlzLnRvID0gbzQ7CiAgICB9CiAgfTsKICB2YXIgUjUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIGk0KSB7CiAgICAgIHRoaXMuZmllbGQgPSBlNSwgdGhpcy5mcm9tID0gdDQsIHRoaXMudG8gPSBpNDsKICAgIH0KICAgIG1hcChlNSkgewogICAgICBsZXQgdDQgPSBlNS5tYXBQb3ModGhpcy5mcm9tLCAtMSwgTS5UcmFja0RlbCksIGk0ID0gZTUubWFwUG9zKHRoaXMudG8sIDEsIE0uVHJhY2tEZWwpOwogICAgICByZXR1cm4gdDQgPT0gbnVsbCB8fCBpNCA9PSBudWxsID8gbnVsbCA6IG5ldyBSNSh0aGlzLmZpZWxkLCB0NCwgaTQpOwogICAgfQogIH07CiAgdmFyIEI2ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0KSB7CiAgICAgIHRoaXMubGluZXMgPSBlNSwgdGhpcy5maWVsZFBvc2l0aW9ucyA9IHQ0OwogICAgfQogICAgaW5zdGFudGlhdGUoZTUsIHQ0KSB7CiAgICAgIGxldCBpNCA9IFtdLCBvNCA9IFt0NF0sIHM4ID0gZTUuZG9jLmxpbmVBdCh0NCksIHIzID0gL15ccyovLmV4ZWMoczgudGV4dClbMF07CiAgICAgIGZvciAobGV0IGMxNyBvZiB0aGlzLmxpbmVzKSB7CiAgICAgICAgaWYgKGk0Lmxlbmd0aCkgewogICAgICAgICAgbGV0IGE0ID0gcjMsIGYxMSA9IC9eXHQqLy5leGVjKGMxNylbMF0ubGVuZ3RoOwogICAgICAgICAgZm9yIChsZXQgdTExID0gMDsgdTExIDwgZjExOyB1MTErKykKICAgICAgICAgICAgYTQgKz0gZTUuZmFjZXQoQXQyKTsKICAgICAgICAgIG80LnB1c2godDQgKyBhNC5sZW5ndGggLSBmMTEpLCBjMTcgPSBhNCArIGMxNy5zbGljZShmMTEpOwogICAgICAgIH0KICAgICAgICBpNC5wdXNoKGMxNyksIHQ0ICs9IGMxNy5sZW5ndGggKyAxOwogICAgICB9CiAgICAgIGxldCBsNyA9IHRoaXMuZmllbGRQb3NpdGlvbnMubWFwKChjMTcpID0+IG5ldyBSNShjMTcuZmllbGQsIG80W2MxNy5saW5lXSArIGMxNy5mcm9tLCBvNFtjMTcubGluZV0gKyBjMTcudG8pKTsKICAgICAgcmV0dXJuIHsgdGV4dDogaTQsIHJhbmdlczogbDcgfTsKICAgIH0KICAgIHN0YXRpYyBwYXJzZShlNSkgewogICAgICBsZXQgdDQgPSBbXSwgaTQgPSBbXSwgbzQgPSBbXSwgczg7CiAgICAgIGZvciAobGV0IHIzIG9mIGU1LnNwbGl0KC9cclxuP3xcbi8pKSB7CiAgICAgICAgZm9yICg7IHM4ID0gL1sjJF1ceyg/OihcZCspKD86OihbXn1dKikpP3woW159XSopKVx9Ly5leGVjKHIzKTsgKSB7CiAgICAgICAgICBsZXQgbDcgPSBzOFsxXSA/ICtzOFsxXSA6IG51bGwsIGMxNyA9IHM4WzJdIHx8IHM4WzNdIHx8ICIiLCBhNCA9IC0xOwogICAgICAgICAgZm9yIChsZXQgZjExID0gMDsgZjExIDwgdDQubGVuZ3RoOyBmMTErKykKICAgICAgICAgICAgKGw3ICE9IG51bGwgPyB0NFtmMTFdLnNlcSA9PSBsNyA6IGMxNyA/IHQ0W2YxMV0ubmFtZSA9PSBjMTcgOiBmYWxzZSkgJiYgKGE0ID0gZjExKTsKICAgICAgICAgIGlmIChhNCA8IDApIHsKICAgICAgICAgICAgbGV0IGYxMSA9IDA7CiAgICAgICAgICAgIGZvciAoOyBmMTEgPCB0NC5sZW5ndGggJiYgKGw3ID09IG51bGwgfHwgdDRbZjExXS5zZXEgIT0gbnVsbCAmJiB0NFtmMTFdLnNlcSA8IGw3KTsgKQogICAgICAgICAgICAgIGYxMSsrOwogICAgICAgICAgICB0NC5zcGxpY2UoZjExLCAwLCB7IHNlcTogbDcsIG5hbWU6IGMxNyB9KSwgYTQgPSBmMTE7CiAgICAgICAgICAgIGZvciAobGV0IHUxMSBvZiBvNCkKICAgICAgICAgICAgICB1MTEuZmllbGQgPj0gYTQgJiYgdTExLmZpZWxkKys7CiAgICAgICAgICB9CiAgICAgICAgICBvNC5wdXNoKG5ldyBpZTUoYTQsIGk0Lmxlbmd0aCwgczguaW5kZXgsIHM4LmluZGV4ICsgYzE3Lmxlbmd0aCkpLCByMyA9IHIzLnNsaWNlKDAsIHM4LmluZGV4KSArIGMxNyArIHIzLnNsaWNlKHM4LmluZGV4ICsgczhbMF0ubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgbDc7IGw3ID0gLyhbJCNdKVxcey8uZXhlYyhyMyk7ICkgewogICAgICAgICAgcjMgPSByMy5zbGljZSgwLCBsNy5pbmRleCkgKyBsN1sxXSArICJ7IiArIHIzLnNsaWNlKGw3LmluZGV4ICsgbDdbMF0ubGVuZ3RoKTsKICAgICAgICAgIGZvciAobGV0IGMxNyBvZiBvNCkKICAgICAgICAgICAgYzE3LmxpbmUgPT0gaTQubGVuZ3RoICYmIGMxNy5mcm9tID4gbDcuaW5kZXggJiYgKGMxNy5mcm9tLS0sIGMxNy50by0tKTsKICAgICAgICB9CiAgICAgICAgaTQucHVzaChyMyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBCNihpNCwgbzQpOwogICAgfQogIH07CiAgdmFyIGR0MiA9IGsud2lkZ2V0KHsgd2lkZ2V0OiBuZXcgY2xhc3MgZXh0ZW5kcyBYNCB7CiAgICB0b0RPTSgpIHsKICAgICAgbGV0IG44ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICByZXR1cm4gbjguY2xhc3NOYW1lID0gImNtLXNuaXBwZXRGaWVsZFBvc2l0aW9uIiwgbjg7CiAgICB9CiAgICBpZ25vcmVFdmVudCgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0oKSB9KTsKICB2YXIgbXQyID0gay5tYXJrKHsgY2xhc3M6ICJjbS1zbmlwcGV0RmllbGQiIH0pOwogIHZhciBTNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCkgewogICAgICB0aGlzLnJhbmdlcyA9IGU1LCB0aGlzLmFjdGl2ZSA9IHQ0LCB0aGlzLmRlY28gPSBrLnNldChlNS5tYXAoKGk0KSA9PiAoaTQuZnJvbSA9PSBpNC50byA/IGR0MiA6IG10MikucmFuZ2UoaTQuZnJvbSwgaTQudG8pKSk7CiAgICB9CiAgICBtYXAoZTUpIHsKICAgICAgbGV0IHQ0ID0gW107CiAgICAgIGZvciAobGV0IGk0IG9mIHRoaXMucmFuZ2VzKSB7CiAgICAgICAgbGV0IG80ID0gaTQubWFwKGU1KTsKICAgICAgICBpZiAoIW80KQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgdDQucHVzaChvNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBTNCh0NCwgdGhpcy5hY3RpdmUpOwogICAgfQogICAgc2VsZWN0aW9uSW5zaWRlRmllbGQoZTUpIHsKICAgICAgcmV0dXJuIGU1LnJhbmdlcy5ldmVyeSgodDQpID0+IHRoaXMucmFuZ2VzLnNvbWUoKGk0KSA9PiBpNC5maWVsZCA9PSB0aGlzLmFjdGl2ZSAmJiBpNC5mcm9tIDw9IHQ0LmZyb20gJiYgaTQudG8gPj0gdDQudG8pKTsKICAgIH0KICB9OwogIHZhciAkNiA9IHkuZGVmaW5lKHsgbWFwKG44LCBlNSkgewogICAgcmV0dXJuIG44ICYmIG44Lm1hcChlNSk7CiAgfSB9KTsKICB2YXIgZ3QyID0geS5kZWZpbmUoKTsKICB2YXIgRDUgPSBKMi5kZWZpbmUoeyBjcmVhdGUoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9LCB1cGRhdGUobjgsIGU1KSB7CiAgICBmb3IgKGxldCB0NCBvZiBlNS5lZmZlY3RzKSB7CiAgICAgIGlmICh0NC5pcygkNikpCiAgICAgICAgcmV0dXJuIHQ0LnZhbHVlOwogICAgICBpZiAodDQuaXMoZ3QyKSAmJiBuOCkKICAgICAgICByZXR1cm4gbmV3IFM0KG44LnJhbmdlcywgdDQudmFsdWUpOwogICAgfQogICAgcmV0dXJuIG44ICYmIGU1LmRvY0NoYW5nZWQgJiYgKG44ID0gbjgubWFwKGU1LmNoYW5nZXMpKSwgbjggJiYgZTUuc2VsZWN0aW9uICYmICFuOC5zZWxlY3Rpb25JbnNpZGVGaWVsZChlNS5zZWxlY3Rpb24pICYmIChuOCA9IG51bGwpLCBuODsKICB9LCBwcm92aWRlOiAobjgpID0+IE0yLmRlY29yYXRpb25zLmZyb20objgsIChlNSkgPT4gZTUgPyBlNS5kZWNvIDogay5ub25lKSB9KTsKICBmdW5jdGlvbiByZTYobjgsIGU1KSB7CiAgICByZXR1cm4gZzIuY3JlYXRlKG44LmZpbHRlcigodDQpID0+IHQ0LmZpZWxkID09IGU1KS5tYXAoKHQ0KSA9PiBnMi5yYW5nZSh0NC5mcm9tLCB0NC50bykpKTsKICB9CiAgZnVuY3Rpb24gYnQobjgpIHsKICAgIGxldCBlNSA9IEI2LnBhcnNlKG44KTsKICAgIHJldHVybiAodDQsIGk0LCBvNCwgczgpID0+IHsKICAgICAgbGV0IHsgdGV4dDogcjMsIHJhbmdlczogbDcgfSA9IGU1Lmluc3RhbnRpYXRlKHQ0LnN0YXRlLCBvNCksIGMxNyA9IHsgY2hhbmdlczogeyBmcm9tOiBvNCwgdG86IHM4LCBpbnNlcnQ6IHYub2YocjMpIH0sIHNjcm9sbEludG9WaWV3OiB0cnVlIH07CiAgICAgIGlmIChsNy5sZW5ndGggJiYgKGMxNy5zZWxlY3Rpb24gPSByZTYobDcsIDApKSwgbDcubGVuZ3RoID4gMSkgewogICAgICAgIGxldCBhNCA9IG5ldyBTNChsNywgMCksIGYxMSA9IGMxNy5lZmZlY3RzID0gWyQ2Lm9mKGE0KV07CiAgICAgICAgdDQuc3RhdGUuZmllbGQoRDUsIGZhbHNlKSA9PT0gdm9pZCAwICYmIGYxMS5wdXNoKHkuYXBwZW5kQ29uZmlnLm9mKFtENSwgQ3QyLCBJdDIsIFJlNV0pKTsKICAgICAgfQogICAgICB0NC5kaXNwYXRjaCh0NC5zdGF0ZS51cGRhdGUoYzE3KSk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBCZTQobjgpIHsKICAgIHJldHVybiAoeyBzdGF0ZTogZTUsIGRpc3BhdGNoOiB0NCB9KSA9PiB7CiAgICAgIGxldCBpNCA9IGU1LmZpZWxkKEQ1LCBmYWxzZSk7CiAgICAgIGlmICghaTQgfHwgbjggPCAwICYmIGk0LmFjdGl2ZSA9PSAwKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgbGV0IG80ID0gaTQuYWN0aXZlICsgbjgsIHM4ID0gbjggPiAwICYmICFpNC5yYW5nZXMuc29tZSgocjMpID0+IHIzLmZpZWxkID09IG80ICsgbjgpOwogICAgICByZXR1cm4gdDQoZTUudXBkYXRlKHsgc2VsZWN0aW9uOiByZTYoaTQucmFuZ2VzLCBvNCksIGVmZmVjdHM6ICQ2Lm9mKHM4ID8gbnVsbCA6IG5ldyBTNChpNC5yYW5nZXMsIG80KSkgfSkpLCB0cnVlOwogICAgfTsKICB9CiAgdmFyIHh0MyA9ICh7IHN0YXRlOiBuOCwgZGlzcGF0Y2g6IGU1IH0pID0+IG44LmZpZWxkKEQ1LCBmYWxzZSkgPyAoZTUobjgudXBkYXRlKHsgZWZmZWN0czogJDYub2YobnVsbCkgfSkpLCB0cnVlKSA6IGZhbHNlOwogIHZhciB5dDIgPSBCZTQoMSk7CiAgdmFyIHd0MiA9IEJlNCgtMSk7CiAgdmFyIHZ0MiA9IFt7IGtleTogIlRhYiIsIHJ1bjogeXQyLCBzaGlmdDogd3QyIH0sIHsga2V5OiAiRXNjYXBlIiwgcnVuOiB4dDMgfV07CiAgdmFyIGJlNSA9IEEyLmRlZmluZSh7IGNvbWJpbmUobjgpIHsKICAgIHJldHVybiBuOC5sZW5ndGggPyBuOFswXSA6IHZ0MjsKICB9IH0pOwogIHZhciBDdDIgPSBsdC5oaWdoZXN0KGJyLmNvbXB1dGUoW2JlNV0sIChuOCkgPT4gbjguZmFjZXQoYmU1KSkpOwogIGZ1bmN0aW9uIFZ0MyhuOCwgZTUpIHsKICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGU1KSwgeyBhcHBseTogYnQobjgpIH0pOwogIH0KICB2YXIgSXQyID0gTTIuZG9tRXZlbnRIYW5kbGVycyh7IG1vdXNlZG93bihuOCwgZTUpIHsKICAgIGxldCB0NCA9IGU1LnN0YXRlLmZpZWxkKEQ1LCBmYWxzZSksIGk0OwogICAgaWYgKCF0NCB8fCAoaTQgPSBlNS5wb3NBdENvb3Jkcyh7IHg6IG44LmNsaWVudFgsIHk6IG44LmNsaWVudFkgfSkpID09IG51bGwpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBvNCA9IHQ0LnJhbmdlcy5maW5kKChzOCkgPT4gczguZnJvbSA8PSBpNCAmJiBzOC50byA+PSBpNCk7CiAgICByZXR1cm4gIW80IHx8IG80LmZpZWxkID09IHQ0LmFjdGl2ZSA/IGZhbHNlIDogKGU1LmRpc3BhdGNoKHsgc2VsZWN0aW9uOiByZTYodDQucmFuZ2VzLCBvNC5maWVsZCksIGVmZmVjdHM6ICQ2Lm9mKHQ0LnJhbmdlcy5zb21lKChzOCkgPT4gczguZmllbGQgPiBvNC5maWVsZCkgPyBuZXcgUzQodDQucmFuZ2VzLCBvNC5maWVsZCkgOiBudWxsKSB9KSwgdHJ1ZSk7CiAgfSB9KTsKICB2YXIgTDQgPSB7IGJyYWNrZXRzOiBbIigiLCAiWyIsICJ7IiwgIiciLCAnIiddLCBiZWZvcmU6ICIpXX06Oz4iLCBzdHJpbmdQcmVmaXhlczogW10gfTsKICB2YXIgRTIgPSB5LmRlZmluZSh7IG1hcChuOCwgZTUpIHsKICAgIGxldCB0NCA9IGU1Lm1hcFBvcyhuOCwgLTEsIE0uVHJhY2tBZnRlcik7CiAgICByZXR1cm4gdDQgPz8gdm9pZCAwOwogIH0gfSk7CiAgdmFyIGNlNSA9IHkuZGVmaW5lKHsgbWFwKG44LCBlNSkgewogICAgcmV0dXJuIGU1Lm1hcFBvcyhuOCk7CiAgfSB9KTsKICB2YXIgYWU1ID0gbmV3IGNsYXNzIGV4dGVuZHMgaiB7CiAgfSgpOwogIGFlNS5zdGFydFNpZGUgPSAxOwogIGFlNS5lbmRTaWRlID0gLTE7CiAgdmFyIExlMyA9IEoyLmRlZmluZSh7IGNyZWF0ZSgpIHsKICAgIHJldHVybiBQLmVtcHR5OwogIH0sIHVwZGF0ZShuOCwgZTUpIHsKICAgIGlmIChlNS5zZWxlY3Rpb24pIHsKICAgICAgbGV0IHQ0ID0gZTUuc3RhdGUuZG9jLmxpbmVBdChlNS5zZWxlY3Rpb24ubWFpbi5oZWFkKS5mcm9tLCBpNCA9IGU1LnN0YXJ0U3RhdGUuZG9jLmxpbmVBdChlNS5zdGFydFN0YXRlLnNlbGVjdGlvbi5tYWluLmhlYWQpLmZyb207CiAgICAgIHQ0ICE9IGU1LmNoYW5nZXMubWFwUG9zKGk0LCAtMSkgJiYgKG44ID0gUC5lbXB0eSk7CiAgICB9CiAgICBuOCA9IG44Lm1hcChlNS5jaGFuZ2VzKTsKICAgIGZvciAobGV0IHQ0IG9mIGU1LmVmZmVjdHMpCiAgICAgIHQ0LmlzKEUyKSA/IG44ID0gbjgudXBkYXRlKHsgYWRkOiBbYWU1LnJhbmdlKHQ0LnZhbHVlLCB0NC52YWx1ZSArIDEpXSB9KSA6IHQ0LmlzKGNlNSkgJiYgKG44ID0gbjgudXBkYXRlKHsgZmlsdGVyOiAoaTQpID0+IGk0ICE9IHQ0LnZhbHVlIH0pKTsKICAgIHJldHVybiBuODsKICB9IH0pOwogIHZhciBZNyA9ICIoKVtde308PiI7CiAgZnVuY3Rpb24ga2U2KG44KSB7CiAgICBmb3IgKGxldCBlNSA9IDA7IGU1IDwgWTcubGVuZ3RoOyBlNSArPSAyKQogICAgICBpZiAoWTcuY2hhckNvZGVBdChlNSkgPT0gbjgpCiAgICAgICAgcmV0dXJuIFk3LmNoYXJBdChlNSArIDEpOwogICAgcmV0dXJuIHJ0KG44IDwgMTI4ID8gbjggOiBuOCArIDEpOwogIH0KICBmdW5jdGlvbiBXZTMobjgsIGU1KSB7CiAgICByZXR1cm4gbjgubGFuZ3VhZ2VEYXRhQXQoImNsb3NlQnJhY2tldHMiLCBlNSlbMF0gfHwgTDQ7CiAgfQogIHZhciBQdDMgPSB0eXBlb2YgbmF2aWdhdG9yID09ICJvYmplY3QiICYmIC9BbmRyb2lkXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgdmFyIE90MyA9IE0yLmlucHV0SGFuZGxlci5vZigobjgsIGU1LCB0NCwgaTQpID0+IHsKICAgIGlmICgoUHQzID8gbjguY29tcG9zaW5nIDogbjguY29tcG9zaXRpb25TdGFydGVkKSB8fCBuOC5zdGF0ZS5yZWFkT25seSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IG80ID0gbjguc3RhdGUuc2VsZWN0aW9uLm1haW47CiAgICBpZiAoaTQubGVuZ3RoID4gMiB8fCBpNC5sZW5ndGggPT0gMiAmJiBiZTIob2UoaTQsIDApKSA9PSAxIHx8IGU1ICE9IG80LmZyb20gfHwgdDQgIT0gbzQudG8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBzOCA9IFR0MihuOC5zdGF0ZSwgaTQpOwogICAgcmV0dXJuIHM4ID8gKG44LmRpc3BhdGNoKHM4KSwgdHJ1ZSkgOiBmYWxzZTsKICB9KTsKICBmdW5jdGlvbiBUdDIobjgsIGU1KSB7CiAgICBsZXQgdDQgPSBXZTMobjgsIG44LnNlbGVjdGlvbi5tYWluLmhlYWQpLCBpNCA9IHQ0LmJyYWNrZXRzIHx8IEw0LmJyYWNrZXRzOwogICAgZm9yIChsZXQgbzQgb2YgaTQpIHsKICAgICAgbGV0IHM4ID0ga2U2KG9lKG80LCAwKSk7CiAgICAgIGlmIChlNSA9PSBvNCkKICAgICAgICByZXR1cm4gczggPT0gbzQgPyBEdDIobjgsIG80LCBpNC5pbmRleE9mKG80ICsgbzQgKyBvNCkgPiAtMSwgdDQpIDogUnQzKG44LCBvNCwgczgsIHQ0LmJlZm9yZSB8fCBMNC5iZWZvcmUpOwogICAgICBpZiAoZTUgPT0gczggJiYgJGU0KG44LCBuOC5zZWxlY3Rpb24ubWFpbi5mcm9tKSkKICAgICAgICByZXR1cm4gQnQyKG44LCBvNCwgczgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uICRlNChuOCwgZTUpIHsKICAgIGxldCB0NCA9IGZhbHNlOwogICAgcmV0dXJuIG44LmZpZWxkKExlMykuYmV0d2VlbigwLCBuOC5kb2MubGVuZ3RoLCAoaTQpID0+IHsKICAgICAgaTQgPT0gZTUgJiYgKHQ0ID0gdHJ1ZSk7CiAgICB9KSwgdDQ7CiAgfQogIGZ1bmN0aW9uIHE0KG44LCBlNSkgewogICAgbGV0IHQ0ID0gbjguc2xpY2VTdHJpbmcoZTUsIGU1ICsgMik7CiAgICByZXR1cm4gdDQuc2xpY2UoMCwgYmUyKG9lKHQ0LCAwKSkpOwogIH0KICBmdW5jdGlvbiBSdDMobjgsIGU1LCB0NCwgaTQpIHsKICAgIGxldCBvNCA9IG51bGwsIHM4ID0gbjguY2hhbmdlQnlSYW5nZSgocjMpID0+IHsKICAgICAgaWYgKCFyMy5lbXB0eSkKICAgICAgICByZXR1cm4geyBjaGFuZ2VzOiBbeyBpbnNlcnQ6IGU1LCBmcm9tOiByMy5mcm9tIH0sIHsgaW5zZXJ0OiB0NCwgZnJvbTogcjMudG8gfV0sIGVmZmVjdHM6IEUyLm9mKHIzLnRvICsgZTUubGVuZ3RoKSwgcmFuZ2U6IGcyLnJhbmdlKHIzLmFuY2hvciArIGU1Lmxlbmd0aCwgcjMuaGVhZCArIGU1Lmxlbmd0aCkgfTsKICAgICAgbGV0IGw3ID0gcTQobjguZG9jLCByMy5oZWFkKTsKICAgICAgcmV0dXJuICFsNyB8fCAvXHMvLnRlc3QobDcpIHx8IGk0LmluZGV4T2YobDcpID4gLTEgPyB7IGNoYW5nZXM6IHsgaW5zZXJ0OiBlNSArIHQ0LCBmcm9tOiByMy5oZWFkIH0sIGVmZmVjdHM6IEUyLm9mKHIzLmhlYWQgKyBlNS5sZW5ndGgpLCByYW5nZTogZzIuY3Vyc29yKHIzLmhlYWQgKyBlNS5sZW5ndGgpIH0gOiB7IHJhbmdlOiBvNCA9IHIzIH07CiAgICB9KTsKICAgIHJldHVybiBvNCA/IG51bGwgOiBuOC51cGRhdGUoczgsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUsIHVzZXJFdmVudDogImlucHV0LnR5cGUiIH0pOwogIH0KICBmdW5jdGlvbiBCdDIobjgsIGU1LCB0NCkgewogICAgbGV0IGk0ID0gbnVsbCwgbzQgPSBuOC5zZWxlY3Rpb24ucmFuZ2VzLm1hcCgoczgpID0+IHM4LmVtcHR5ICYmIHE0KG44LmRvYywgczguaGVhZCkgPT0gdDQgPyBnMi5jdXJzb3IoczguaGVhZCArIHQ0Lmxlbmd0aCkgOiBpNCA9IHM4KTsKICAgIHJldHVybiBpNCA/IG51bGwgOiBuOC51cGRhdGUoeyBzZWxlY3Rpb246IGcyLmNyZWF0ZShvNCwgbjguc2VsZWN0aW9uLm1haW5JbmRleCksIHNjcm9sbEludG9WaWV3OiB0cnVlLCBlZmZlY3RzOiBuOC5zZWxlY3Rpb24ucmFuZ2VzLm1hcCgoeyBmcm9tOiBzOCB9KSA9PiBjZTUub2YoczgpKSB9KTsKICB9CiAgZnVuY3Rpb24gRHQyKG44LCBlNSwgdDQsIGk0KSB7CiAgICBsZXQgbzQgPSBpNC5zdHJpbmdQcmVmaXhlcyB8fCBMNC5zdHJpbmdQcmVmaXhlcywgczggPSBudWxsLCByMyA9IG44LmNoYW5nZUJ5UmFuZ2UoKGw3KSA9PiB7CiAgICAgIGlmICghbDcuZW1wdHkpCiAgICAgICAgcmV0dXJuIHsgY2hhbmdlczogW3sgaW5zZXJ0OiBlNSwgZnJvbTogbDcuZnJvbSB9LCB7IGluc2VydDogZTUsIGZyb206IGw3LnRvIH1dLCBlZmZlY3RzOiBFMi5vZihsNy50byArIGU1Lmxlbmd0aCksIHJhbmdlOiBnMi5yYW5nZShsNy5hbmNob3IgKyBlNS5sZW5ndGgsIGw3LmhlYWQgKyBlNS5sZW5ndGgpIH07CiAgICAgIGxldCBjMTcgPSBsNy5oZWFkLCBhNCA9IHE0KG44LmRvYywgYzE3KSwgZjExOwogICAgICBpZiAoYTQgPT0gZTUpIHsKICAgICAgICBpZiAodmU2KG44LCBjMTcpKQogICAgICAgICAgcmV0dXJuIHsgY2hhbmdlczogeyBpbnNlcnQ6IGU1ICsgZTUsIGZyb206IGMxNyB9LCBlZmZlY3RzOiBFMi5vZihjMTcgKyBlNS5sZW5ndGgpLCByYW5nZTogZzIuY3Vyc29yKGMxNyArIGU1Lmxlbmd0aCkgfTsKICAgICAgICBpZiAoJGU0KG44LCBjMTcpKSB7CiAgICAgICAgICBsZXQgdTExID0gdDQgJiYgbjguc2xpY2VEb2MoYzE3LCBjMTcgKyBlNS5sZW5ndGggKiAzKSA9PSBlNSArIGU1ICsgZTU7CiAgICAgICAgICByZXR1cm4geyByYW5nZTogZzIuY3Vyc29yKGMxNyArIGU1Lmxlbmd0aCAqICh1MTEgPyAzIDogMSkpLCBlZmZlY3RzOiBjZTUub2YoYzE3KSB9OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodDQgJiYgbjguc2xpY2VEb2MoYzE3IC0gMiAqIGU1Lmxlbmd0aCwgYzE3KSA9PSBlNSArIGU1ICYmIChmMTEgPSBDZTcobjgsIGMxNyAtIDIgKiBlNS5sZW5ndGgsIG80KSkgPiAtMSAmJiB2ZTYobjgsIGYxMSkpCiAgICAgICAgICByZXR1cm4geyBjaGFuZ2VzOiB7IGluc2VydDogZTUgKyBlNSArIGU1ICsgZTUsIGZyb206IGMxNyB9LCBlZmZlY3RzOiBFMi5vZihjMTcgKyBlNS5sZW5ndGgpLCByYW5nZTogZzIuY3Vyc29yKGMxNyArIGU1Lmxlbmd0aCkgfTsKICAgICAgICBpZiAobjguY2hhckNhdGVnb3JpemVyKGMxNykoYTQpICE9IEYuV29yZCAmJiBDZTcobjgsIGMxNywgbzQpID4gLTEgJiYgIUx0MihuOCwgYzE3LCBlNSwgbzQpKQogICAgICAgICAgcmV0dXJuIHsgY2hhbmdlczogeyBpbnNlcnQ6IGU1ICsgZTUsIGZyb206IGMxNyB9LCBlZmZlY3RzOiBFMi5vZihjMTcgKyBlNS5sZW5ndGgpLCByYW5nZTogZzIuY3Vyc29yKGMxNyArIGU1Lmxlbmd0aCkgfTsKICAgICAgfQogICAgICByZXR1cm4geyByYW5nZTogczggPSBsNyB9OwogICAgfSk7CiAgICByZXR1cm4gczggPyBudWxsIDogbjgudXBkYXRlKHIzLCB7IHNjcm9sbEludG9WaWV3OiB0cnVlLCB1c2VyRXZlbnQ6ICJpbnB1dC50eXBlIiB9KTsKICB9CiAgZnVuY3Rpb24gdmU2KG44LCBlNSkgewogICAgbGV0IHQ0ID0gbTQobjgpLnJlc29sdmVJbm5lcihlNSArIDEpOwogICAgcmV0dXJuIHQ0LnBhcmVudCAmJiB0NC5mcm9tID09IGU1OwogIH0KICBmdW5jdGlvbiBMdDIobjgsIGU1LCB0NCwgaTQpIHsKICAgIGxldCBvNCA9IG00KG44KS5yZXNvbHZlSW5uZXIoZTUsIC0xKSwgczggPSBpNC5yZWR1Y2UoKHIzLCBsNykgPT4gTWF0aC5tYXgocjMsIGw3Lmxlbmd0aCksIDApOwogICAgZm9yIChsZXQgcjMgPSAwOyByMyA8IDU7IHIzKyspIHsKICAgICAgbGV0IGw3ID0gbjguc2xpY2VEb2MobzQuZnJvbSwgTWF0aC5taW4obzQudG8sIG80LmZyb20gKyB0NC5sZW5ndGggKyBzOCkpLCBjMTcgPSBsNy5pbmRleE9mKHQ0KTsKICAgICAgaWYgKCFjMTcgfHwgYzE3ID4gLTEgJiYgaTQuaW5kZXhPZihsNy5zbGljZSgwLCBjMTcpKSA+IC0xKSB7CiAgICAgICAgbGV0IGYxMSA9IG80LmZpcnN0Q2hpbGQ7CiAgICAgICAgZm9yICg7IGYxMSAmJiBmMTEuZnJvbSA9PSBvNC5mcm9tICYmIGYxMS50byAtIGYxMS5mcm9tID4gdDQubGVuZ3RoICsgYzE3OyApIHsKICAgICAgICAgIGlmIChuOC5zbGljZURvYyhmMTEudG8gLSB0NC5sZW5ndGgsIGYxMS50bykgPT0gdDQpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIGYxMSA9IGYxMS5maXJzdENoaWxkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsZXQgYTQgPSBvNC50byA9PSBlNSAmJiBvNC5wYXJlbnQ7CiAgICAgIGlmICghYTQpCiAgICAgICAgYnJlYWs7CiAgICAgIG80ID0gYTQ7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIENlNyhuOCwgZTUsIHQ0KSB7CiAgICBsZXQgaTQgPSBuOC5jaGFyQ2F0ZWdvcml6ZXIoZTUpOwogICAgaWYgKGk0KG44LnNsaWNlRG9jKGU1IC0gMSwgZTUpKSAhPSBGLldvcmQpCiAgICAgIHJldHVybiBlNTsKICAgIGZvciAobGV0IG80IG9mIHQ0KSB7CiAgICAgIGxldCBzOCA9IGU1IC0gbzQubGVuZ3RoOwogICAgICBpZiAobjguc2xpY2VEb2MoczgsIGU1KSA9PSBvNCAmJiBpNChuOC5zbGljZURvYyhzOCAtIDEsIHM4KSkgIT0gRi5Xb3JkKQogICAgICAgIHJldHVybiBzODsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CiAgZnVuY3Rpb24gUXQyKG44ID0ge30pIHsKICAgIHJldHVybiBbZDIsIHgzLm9mKG44KSwgcHQzLCBXdDMsIFJlNV07CiAgfQogIHZhciBrdCA9IFt7IGtleTogIkN0cmwtU3BhY2UiLCBydW46IGF0MiB9LCB7IGtleTogIkVzY2FwZSIsIHJ1bjogZnQgfSwgeyBrZXk6ICJBcnJvd0Rvd24iLCBydW46IFU1KHRydWUpIH0sIHsga2V5OiAiQXJyb3dVcCIsIHJ1bjogVTUoZmFsc2UpIH0sIHsga2V5OiAiUGFnZURvd24iLCBydW46IFU1KHRydWUsICJwYWdlIikgfSwgeyBrZXk6ICJQYWdlVXAiLCBydW46IFU1KGZhbHNlLCAicGFnZSIpIH0sIHsga2V5OiAiRW50ZXIiLCBydW46IGN0MyB9XTsKICB2YXIgV3QzID0gbHQuaGlnaGVzdChici5jb21wdXRlTihbeDNdLCAobjgpID0+IG44LmZhY2V0KHgzKS5kZWZhdWx0S2V5bWFwID8gW2t0XSA6IFtdKSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcveWFtbC50cwogIHZhciB5YW1sX2V4cG9ydHMgPSB7fTsKICBfX2V4cG9ydCh5YW1sX2V4cG9ydHMsIHsKICAgIENPUkVfU0NIRU1BOiAoKSA9PiBjb3JlLAogICAgREVGQVVMVF9TQ0hFTUE6ICgpID0+IGRlZiwKICAgIEVYVEVOREVEX1NDSEVNQTogKCkgPT4gZXh0ZW5kZWQsCiAgICBGQUlMU0FGRV9TQ0hFTUE6ICgpID0+IGZhaWxzYWZlLAogICAgSlNPTl9TQ0hFTUE6ICgpID0+IGpzb24sCiAgICBUeXBlOiAoKSA9PiBUeXBlLAogICAgcGFyc2U6ICgpID0+IHBhcnNlLAogICAgcGFyc2VBbGw6ICgpID0+IHBhcnNlQWxsLAogICAgc3RyaW5naWZ5OiAoKSA9PiBzdHJpbmdpZnkKICB9KTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC9lcnJvci50cwogIHZhciBZQU1MRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAiKHVua25vd24gcmVhc29uKSIsIG1hcmsgPSAiIikgewogICAgICBzdXBlcihgJHttZXNzYWdlfSAke21hcmt9YCk7CiAgICAgIHRoaXMubWFyayA9IG1hcms7CiAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTsKICAgIH0KICAgIHRvU3RyaW5nKF9jb21wYWN0KSB7CiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9OiAke3RoaXMubWVzc2FnZX0gJHt0aGlzLm1hcmt9YDsKICAgIH0KICB9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3V0aWxzLnRzCiAgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7CiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAiYm9vbGVhbiIgfHwgdmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuOwogIH0KICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gIm9iamVjdCI7CiAgfQogIGZ1bmN0aW9uIHJlcGVhdChzdHIyLCBjb3VudCkgewogICAgbGV0IHJlc3VsdCA9ICIiOwogICAgZm9yIChsZXQgY3ljbGUgPSAwOyBjeWNsZSA8IGNvdW50OyBjeWNsZSsrKSB7CiAgICAgIHJlc3VsdCArPSBzdHIyOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gaXNOZWdhdGl2ZVplcm8oaTQpIHsKICAgIHJldHVybiBpNCA9PT0gMCAmJiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IDEgLyBpNDsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvbWFyay50cwogIHZhciBNYXJrID0gY2xhc3MgewogICAgY29uc3RydWN0b3IobmFtZSwgYnVmZmVyLCBwb3NpdGlvbiwgbGluZSwgY29sdW1uKSB7CiAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwogICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgIHRoaXMubGluZSA9IGxpbmU7CiAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgfQogICAgZ2V0U25pcHBldChpbmRlbnQgPSA0LCBtYXhMZW5ndGggPSA3NSkgewogICAgICBpZiAoIXRoaXMuYnVmZmVyKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBsZXQgaGVhZCA9ICIiOwogICAgICBsZXQgc3RhcnQgPSB0aGlzLnBvc2l0aW9uOwogICAgICB3aGlsZSAoc3RhcnQgPiAwICYmICJcMFxyXG5ceDg1XHUyMDI4XHUyMDI5Ii5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChzdGFydCAtIDEpKSA9PT0gLTEpIHsKICAgICAgICBzdGFydCAtPSAxOwogICAgICAgIGlmICh0aGlzLnBvc2l0aW9uIC0gc3RhcnQgPiBtYXhMZW5ndGggLyAyIC0gMSkgewogICAgICAgICAgaGVhZCA9ICIgLi4uICI7CiAgICAgICAgICBzdGFydCArPSA1OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxldCB0YWlsID0gIiI7CiAgICAgIGxldCBlbmQgPSB0aGlzLnBvc2l0aW9uOwogICAgICB3aGlsZSAoZW5kIDwgdGhpcy5idWZmZXIubGVuZ3RoICYmICJcMFxyXG5ceDg1XHUyMDI4XHUyMDI5Ii5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChlbmQpKSA9PT0gLTEpIHsKICAgICAgICBlbmQgKz0gMTsKICAgICAgICBpZiAoZW5kIC0gdGhpcy5wb3NpdGlvbiA+IG1heExlbmd0aCAvIDIgLSAxKSB7CiAgICAgICAgICB0YWlsID0gIiAuLi4gIjsKICAgICAgICAgIGVuZCAtPSA1OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHNuaXBwZXQgPSB0aGlzLmJ1ZmZlci5zbGljZShzdGFydCwgZW5kKTsKICAgICAgcmV0dXJuIGAke3JlcGVhdCgiICIsIGluZGVudCl9JHtoZWFkfSR7c25pcHBldH0ke3RhaWx9CiR7cmVwZWF0KAogICAgICAgICIgIiwKICAgICAgICBpbmRlbnQgKyB0aGlzLnBvc2l0aW9uIC0gc3RhcnQgKyBoZWFkLmxlbmd0aAogICAgICApfV5gOwogICAgfQogICAgdG9TdHJpbmcoY29tcGFjdCkgewogICAgICBsZXQgc25pcHBldCwgd2hlcmUgPSAiIjsKICAgICAgaWYgKHRoaXMubmFtZSkgewogICAgICAgIHdoZXJlICs9IGBpbiAiJHt0aGlzLm5hbWV9IiBgOwogICAgICB9CiAgICAgIHdoZXJlICs9IGBhdCBsaW5lICR7dGhpcy5saW5lICsgMX0sIGNvbHVtbiAke3RoaXMuY29sdW1uICsgMX1gOwogICAgICBpZiAoIWNvbXBhY3QpIHsKICAgICAgICBzbmlwcGV0ID0gdGhpcy5nZXRTbmlwcGV0KCk7CiAgICAgICAgaWYgKHNuaXBwZXQpIHsKICAgICAgICAgIHdoZXJlICs9IGA6CiR7c25pcHBldH1gOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gd2hlcmU7CiAgICB9CiAgfTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC9zY2hlbWEudHMKICBmdW5jdGlvbiBjb21waWxlTGlzdChzY2hlbWEsIG5hbWUsIHJlc3VsdCkgewogICAgY29uc3QgZXhjbHVkZSA9IFtdOwogICAgZm9yIChjb25zdCBpbmNsdWRlZFNjaGVtYSBvZiBzY2hlbWEuaW5jbHVkZSkgewogICAgICByZXN1bHQgPSBjb21waWxlTGlzdChpbmNsdWRlZFNjaGVtYSwgbmFtZSwgcmVzdWx0KTsKICAgIH0KICAgIGZvciAoY29uc3QgY3VycmVudFR5cGUgb2Ygc2NoZW1hW25hbWVdKSB7CiAgICAgIGZvciAobGV0IHByZXZpb3VzSW5kZXggPSAwOyBwcmV2aW91c0luZGV4IDwgcmVzdWx0Lmxlbmd0aDsgcHJldmlvdXNJbmRleCsrKSB7CiAgICAgICAgY29uc3QgcHJldmlvdXNUeXBlID0gcmVzdWx0W3ByZXZpb3VzSW5kZXhdOwogICAgICAgIGlmIChwcmV2aW91c1R5cGUudGFnID09PSBjdXJyZW50VHlwZS50YWcgJiYgcHJldmlvdXNUeXBlLmtpbmQgPT09IGN1cnJlbnRUeXBlLmtpbmQpIHsKICAgICAgICAgIGV4Y2x1ZGUucHVzaChwcmV2aW91c0luZGV4KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzdWx0LnB1c2goY3VycmVudFR5cGUpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdC5maWx0ZXIoKF90eXBlLCBpbmRleCkgPT4gIWV4Y2x1ZGUuaW5jbHVkZXMoaW5kZXgpKTsKICB9CiAgZnVuY3Rpb24gY29tcGlsZU1hcCguLi50eXBlc0xpc3QpIHsKICAgIGNvbnN0IHJlc3VsdCA9IHsKICAgICAgZmFsbGJhY2s6IHt9LAogICAgICBtYXBwaW5nOiB7fSwKICAgICAgc2NhbGFyOiB7fSwKICAgICAgc2VxdWVuY2U6IHt9CiAgICB9OwogICAgZm9yIChjb25zdCB0eXBlcyBvZiB0eXBlc0xpc3QpIHsKICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7CiAgICAgICAgaWYgKHR5cGUua2luZCAhPT0gbnVsbCkgewogICAgICAgICAgcmVzdWx0W3R5cGUua2luZF1bdHlwZS50YWddID0gcmVzdWx0WyJmYWxsYmFjayJdW3R5cGUudGFnXSA9IHR5cGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgU2NoZW1hID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZGVmaW5pdGlvbikgewogICAgICB0aGlzLmV4cGxpY2l0ID0gZGVmaW5pdGlvbi5leHBsaWNpdCB8fCBbXTsKICAgICAgdGhpcy5pbXBsaWNpdCA9IGRlZmluaXRpb24uaW1wbGljaXQgfHwgW107CiAgICAgIHRoaXMuaW5jbHVkZSA9IGRlZmluaXRpb24uaW5jbHVkZSB8fCBbXTsKICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHRoaXMuaW1wbGljaXQpIHsKICAgICAgICBpZiAodHlwZS5sb2FkS2luZCAmJiB0eXBlLmxvYWRLaW5kICE9PSAic2NhbGFyIikgewogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFcnJvcigKICAgICAgICAgICAgIlRoZXJlIGlzIGEgbm9uLXNjYWxhciB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBJbXBsaWNpdCByZXNvbHZpbmcgb2Ygc3VjaCB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkLiIKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuY29tcGlsZWRJbXBsaWNpdCA9IGNvbXBpbGVMaXN0KHRoaXMsICJpbXBsaWNpdCIsIFtdKTsKICAgICAgdGhpcy5jb21waWxlZEV4cGxpY2l0ID0gY29tcGlsZUxpc3QodGhpcywgImV4cGxpY2l0IiwgW10pOwogICAgICB0aGlzLmNvbXBpbGVkVHlwZU1hcCA9IGNvbXBpbGVNYXAoCiAgICAgICAgdGhpcy5jb21waWxlZEltcGxpY2l0LAogICAgICAgIHRoaXMuY29tcGlsZWRFeHBsaWNpdAogICAgICApOwogICAgfQogICAgZXh0ZW5kKGRlZmluaXRpb24pIHsKICAgICAgcmV0dXJuIG5ldyBTY2hlbWEoewogICAgICAgIGltcGxpY2l0OiBbCiAgICAgICAgICAuLi4vKiBAX19QVVJFX18gKi8gbmV3IFNldChbLi4udGhpcy5pbXBsaWNpdCwgLi4uZGVmaW5pdGlvbj8uaW1wbGljaXQgPz8gW11dKQogICAgICAgIF0sCiAgICAgICAgZXhwbGljaXQ6IFsKICAgICAgICAgIC4uLi8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi50aGlzLmV4cGxpY2l0LCAuLi5kZWZpbml0aW9uPy5leHBsaWNpdCA/PyBbXV0pCiAgICAgICAgXSwKICAgICAgICBpbmNsdWRlOiBbLi4uLyogQF9fUFVSRV9fICovIG5ldyBTZXQoWy4uLnRoaXMuaW5jbHVkZSwgLi4uZGVmaW5pdGlvbj8uaW5jbHVkZSA/PyBbXV0pXQogICAgICB9KTsKICAgIH0KICAgIHN0YXRpYyBjcmVhdGUoKSB7CiAgICB9CiAgfTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC90eXBlLnRzCiAgdmFyIERFRkFVTFRfUkVTT0xWRSA9ICgpID0+IHRydWU7CiAgdmFyIERFRkFVTFRfQ09OU1RSVUNUID0gKGRhdGEpID0+IGRhdGE7CiAgZnVuY3Rpb24gY2hlY2tUYWdGb3JtYXQodGFnKSB7CiAgICByZXR1cm4gdGFnOwogIH0KICB2YXIgVHlwZSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHRhZywgb3B0aW9ucykgewogICAgICB0aGlzLmtpbmQgPSBudWxsOwogICAgICB0aGlzLnJlc29sdmUgPSAoKSA9PiB0cnVlOwogICAgICB0aGlzLmNvbnN0cnVjdCA9IChkYXRhKSA9PiBkYXRhOwogICAgICB0aGlzLnRhZyA9IGNoZWNrVGFnRm9ybWF0KHRhZyk7CiAgICAgIGlmIChvcHRpb25zKSB7CiAgICAgICAgdGhpcy5raW5kID0gb3B0aW9ucy5raW5kOwogICAgICAgIHRoaXMucmVzb2x2ZSA9IG9wdGlvbnMucmVzb2x2ZSB8fCBERUZBVUxUX1JFU09MVkU7CiAgICAgICAgdGhpcy5jb25zdHJ1Y3QgPSBvcHRpb25zLmNvbnN0cnVjdCB8fCBERUZBVUxUX0NPTlNUUlVDVDsKICAgICAgICB0aGlzLmluc3RhbmNlT2YgPSBvcHRpb25zLmluc3RhbmNlT2Y7CiAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBvcHRpb25zLnByZWRpY2F0ZTsKICAgICAgICB0aGlzLnJlcHJlc2VudCA9IG9wdGlvbnMucmVwcmVzZW50OwogICAgICAgIHRoaXMuZGVmYXVsdFN0eWxlID0gb3B0aW9ucy5kZWZhdWx0U3R5bGU7CiAgICAgICAgdGhpcy5zdHlsZUFsaWFzZXMgPSBvcHRpb25zLnN0eWxlQWxpYXNlczsKICAgICAgfQogICAgfQogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvX3V0aWwvYXNzZXJ0LnRzCiAgdmFyIERlbm9TdGRJbnRlcm5hbEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7CiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7CiAgICAgIHN1cGVyKG1lc3NhZ2UpOwogICAgICB0aGlzLm5hbWUgPSAiRGVub1N0ZEludGVybmFsRXJyb3IiOwogICAgfQogIH07CiAgZnVuY3Rpb24gYXNzZXJ0KGV4cHIsIG1zZyA9ICIiKSB7CiAgICBpZiAoIWV4cHIpIHsKICAgICAgdGhyb3cgbmV3IERlbm9TdGRJbnRlcm5hbEVycm9yKG1zZyk7CiAgICB9CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2J5dGVzL21vZC50cwogIGZ1bmN0aW9uIGNvcHkoc3JjLCBkc3QsIG9mZiA9IDApIHsKICAgIG9mZiA9IE1hdGgubWF4KDAsIE1hdGgubWluKG9mZiwgZHN0LmJ5dGVMZW5ndGgpKTsKICAgIGNvbnN0IGRzdEJ5dGVzQXZhaWxhYmxlID0gZHN0LmJ5dGVMZW5ndGggLSBvZmY7CiAgICBpZiAoc3JjLmJ5dGVMZW5ndGggPiBkc3RCeXRlc0F2YWlsYWJsZSkgewogICAgICBzcmMgPSBzcmMuc3ViYXJyYXkoMCwgZHN0Qnl0ZXNBdmFpbGFibGUpOwogICAgfQogICAgZHN0LnNldChzcmMsIG9mZik7CiAgICByZXR1cm4gc3JjLmJ5dGVMZW5ndGg7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2lvL2J1ZmZlci50cwogIHZhciBNSU5fUkVBRCA9IDMyICogMTAyNDsKICB2YXIgTUFYX1NJWkUgPSAyICoqIDMyIC0gMjsKICB2YXIgQnVmZmVyMiA9IGNsYXNzIHsKICAgICNidWY7CiAgICAjb2ZmID0gMDsKICAgIGNvbnN0cnVjdG9yKGFiKSB7CiAgICAgIHRoaXMuI2J1ZiA9IGFiID09PSB2b2lkIDAgPyBuZXcgVWludDhBcnJheSgwKSA6IG5ldyBVaW50OEFycmF5KGFiKTsKICAgIH0KICAgIGJ5dGVzKG9wdGlvbnMgPSB7IGNvcHk6IHRydWUgfSkgewogICAgICBpZiAob3B0aW9ucy5jb3B5ID09PSBmYWxzZSkKICAgICAgICByZXR1cm4gdGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI29mZik7CiAgICAgIHJldHVybiB0aGlzLiNidWYuc2xpY2UodGhpcy4jb2ZmKTsKICAgIH0KICAgIGVtcHR5KCkgewogICAgICByZXR1cm4gdGhpcy4jYnVmLmJ5dGVMZW5ndGggPD0gdGhpcy4jb2ZmOwogICAgfQogICAgZ2V0IGxlbmd0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2J1Zi5ieXRlTGVuZ3RoIC0gdGhpcy4jb2ZmOwogICAgfQogICAgZ2V0IGNhcGFjaXR5KCkgewogICAgICByZXR1cm4gdGhpcy4jYnVmLmJ1ZmZlci5ieXRlTGVuZ3RoOwogICAgfQogICAgdHJ1bmNhdGUobjgpIHsKICAgICAgaWYgKG44ID09PSAwKSB7CiAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAobjggPCAwIHx8IG44ID4gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBFcnJvcigiYnl0ZXMuQnVmZmVyOiB0cnVuY2F0aW9uIG91dCBvZiByYW5nZSIpOwogICAgICB9CiAgICAgIHRoaXMuI3Jlc2xpY2UodGhpcy4jb2ZmICsgbjgpOwogICAgfQogICAgcmVzZXQoKSB7CiAgICAgIHRoaXMuI3Jlc2xpY2UoMCk7CiAgICAgIHRoaXMuI29mZiA9IDA7CiAgICB9CiAgICAjdHJ5R3Jvd0J5UmVzbGljZShuOCkgewogICAgICBjb25zdCBsNyA9IHRoaXMuI2J1Zi5ieXRlTGVuZ3RoOwogICAgICBpZiAobjggPD0gdGhpcy5jYXBhY2l0eSAtIGw3KSB7CiAgICAgICAgdGhpcy4jcmVzbGljZShsNyArIG44KTsKICAgICAgICByZXR1cm4gbDc7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgI3Jlc2xpY2UobGVuKSB7CiAgICAgIGFzc2VydChsZW4gPD0gdGhpcy4jYnVmLmJ1ZmZlci5ieXRlTGVuZ3RoKTsKICAgICAgdGhpcy4jYnVmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy4jYnVmLmJ1ZmZlciwgMCwgbGVuKTsKICAgIH0KICAgIHJlYWRTeW5jKHAxOCkgewogICAgICBpZiAodGhpcy5lbXB0eSgpKSB7CiAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgIGlmIChwMTguYnl0ZUxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IG5yZWFkID0gY29weSh0aGlzLiNidWYuc3ViYXJyYXkodGhpcy4jb2ZmKSwgcDE4KTsKICAgICAgdGhpcy4jb2ZmICs9IG5yZWFkOwogICAgICByZXR1cm4gbnJlYWQ7CiAgICB9CiAgICByZWFkKHAxOCkgewogICAgICBjb25zdCBycjMgPSB0aGlzLnJlYWRTeW5jKHAxOCk7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocnIzKTsKICAgIH0KICAgIHdyaXRlU3luYyhwMTgpIHsKICAgICAgY29uc3QgbTIzID0gdGhpcy4jZ3JvdyhwMTguYnl0ZUxlbmd0aCk7CiAgICAgIHJldHVybiBjb3B5KHAxOCwgdGhpcy4jYnVmLCBtMjMpOwogICAgfQogICAgd3JpdGUocDE4KSB7CiAgICAgIGNvbnN0IG44ID0gdGhpcy53cml0ZVN5bmMocDE4KTsKICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuOCk7CiAgICB9CiAgICAjZ3JvdyhuOCkgewogICAgICBjb25zdCBtMjMgPSB0aGlzLmxlbmd0aDsKICAgICAgaWYgKG0yMyA9PT0gMCAmJiB0aGlzLiNvZmYgIT09IDApIHsKICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgIH0KICAgICAgY29uc3QgaTQgPSB0aGlzLiN0cnlHcm93QnlSZXNsaWNlKG44KTsKICAgICAgaWYgKGk0ID49IDApIHsKICAgICAgICByZXR1cm4gaTQ7CiAgICAgIH0KICAgICAgY29uc3QgYzE3ID0gdGhpcy5jYXBhY2l0eTsKICAgICAgaWYgKG44IDw9IE1hdGguZmxvb3IoYzE3IC8gMikgLSBtMjMpIHsKICAgICAgICBjb3B5KHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNvZmYpLCB0aGlzLiNidWYpOwogICAgICB9IGVsc2UgaWYgKGMxNyArIG44ID4gTUFYX1NJWkUpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZSBidWZmZXIgY2Fubm90IGJlIGdyb3duIGJleW9uZCB0aGUgbWF4aW11bSBzaXplLiIpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KE1hdGgubWluKDIgKiBjMTcgKyBuOCwgTUFYX1NJWkUpKTsKICAgICAgICBjb3B5KHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNvZmYpLCBidWYpOwogICAgICAgIHRoaXMuI2J1ZiA9IGJ1ZjsKICAgICAgfQogICAgICB0aGlzLiNvZmYgPSAwOwogICAgICB0aGlzLiNyZXNsaWNlKE1hdGgubWluKG0yMyArIG44LCBNQVhfU0laRSkpOwogICAgICByZXR1cm4gbTIzOwogICAgfQogICAgZ3JvdyhuOCkgewogICAgICBpZiAobjggPCAwKSB7CiAgICAgICAgdGhyb3cgRXJyb3IoIkJ1ZmZlci5ncm93OiBuZWdhdGl2ZSBjb3VudCIpOwogICAgICB9CiAgICAgIGNvbnN0IG0yMyA9IHRoaXMuI2dyb3cobjgpOwogICAgICB0aGlzLiNyZXNsaWNlKG0yMyk7CiAgICB9CiAgICBhc3luYyByZWFkRnJvbShyMykgewogICAgICBsZXQgbjggPSAwOwogICAgICBjb25zdCB0bXAgPSBuZXcgVWludDhBcnJheShNSU5fUkVBRCk7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgY29uc3Qgc2hvdWxkR3JvdyA9IHRoaXMuY2FwYWNpdHkgLSB0aGlzLmxlbmd0aCA8IE1JTl9SRUFEOwogICAgICAgIGNvbnN0IGJ1ZiA9IHNob3VsZEdyb3cgPyB0bXAgOiBuZXcgVWludDhBcnJheSh0aGlzLiNidWYuYnVmZmVyLCB0aGlzLmxlbmd0aCk7CiAgICAgICAgY29uc3QgbnJlYWQgPSBhd2FpdCByMy5yZWFkKGJ1Zik7CiAgICAgICAgaWYgKG5yZWFkID09PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbjg7CiAgICAgICAgfQogICAgICAgIGlmIChzaG91bGRHcm93KQogICAgICAgICAgdGhpcy53cml0ZVN5bmMoYnVmLnN1YmFycmF5KDAsIG5yZWFkKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgdGhpcy4jcmVzbGljZSh0aGlzLmxlbmd0aCArIG5yZWFkKTsKICAgICAgICBuOCArPSBucmVhZDsKICAgICAgfQogICAgfQogICAgcmVhZEZyb21TeW5jKHIzKSB7CiAgICAgIGxldCBuOCA9IDA7CiAgICAgIGNvbnN0IHRtcCA9IG5ldyBVaW50OEFycmF5KE1JTl9SRUFEKTsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBjb25zdCBzaG91bGRHcm93ID0gdGhpcy5jYXBhY2l0eSAtIHRoaXMubGVuZ3RoIDwgTUlOX1JFQUQ7CiAgICAgICAgY29uc3QgYnVmID0gc2hvdWxkR3JvdyA/IHRtcCA6IG5ldyBVaW50OEFycmF5KHRoaXMuI2J1Zi5idWZmZXIsIHRoaXMubGVuZ3RoKTsKICAgICAgICBjb25zdCBucmVhZCA9IHIzLnJlYWRTeW5jKGJ1Zik7CiAgICAgICAgaWYgKG5yZWFkID09PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbjg7CiAgICAgICAgfQogICAgICAgIGlmIChzaG91bGRHcm93KQogICAgICAgICAgdGhpcy53cml0ZVN5bmMoYnVmLnN1YmFycmF5KDAsIG5yZWFkKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgdGhpcy4jcmVzbGljZSh0aGlzLmxlbmd0aCArIG5yZWFkKTsKICAgICAgICBuOCArPSBucmVhZDsKICAgICAgfQogICAgfQogIH07CiAgdmFyIENSID0gIlxyIi5jaGFyQ29kZUF0KDApOwogIHZhciBMRiA9ICJcbiIuY2hhckNvZGVBdCgwKTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC90eXBlL2JpbmFyeS50cwogIHZhciBCQVNFNjRfTUFQID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XG5cciI7CiAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxCaW5hcnkoZGF0YSkgewogICAgaWYgKGRhdGEgPT09IG51bGwpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBjb2RlOwogICAgbGV0IGJpdGxlbiA9IDA7CiAgICBjb25zdCBtYXggPSBkYXRhLmxlbmd0aDsKICAgIGNvbnN0IG1hcDIgPSBCQVNFNjRfTUFQOwogICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykgewogICAgICBjb2RlID0gbWFwMi5pbmRleE9mKGRhdGEuY2hhckF0KGlkeCkpOwogICAgICBpZiAoY29kZSA+IDY0KQogICAgICAgIGNvbnRpbnVlOwogICAgICBpZiAoY29kZSA8IDApCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBiaXRsZW4gKz0gNjsKICAgIH0KICAgIHJldHVybiBiaXRsZW4gJSA4ID09PSAwOwogIH0KICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQmluYXJ5KGRhdGEpIHsKICAgIGNvbnN0IGlucHV0ID0gZGF0YS5yZXBsYWNlKC9bXHJcbj1dL2csICIiKTsKICAgIGNvbnN0IG1heCA9IGlucHV0Lmxlbmd0aDsKICAgIGNvbnN0IG1hcDIgPSBCQVNFNjRfTUFQOwogICAgY29uc3QgcmVzdWx0ID0gW107CiAgICBsZXQgYml0cyA9IDA7CiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBtYXg7IGlkeCsrKSB7CiAgICAgIGlmIChpZHggJSA0ID09PSAwICYmIGlkeCkgewogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTYgJiAyNTUpOwogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gOCAmIDI1NSk7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7CiAgICAgIH0KICAgICAgYml0cyA9IGJpdHMgPDwgNiB8IG1hcDIuaW5kZXhPZihpbnB1dC5jaGFyQXQoaWR4KSk7CiAgICB9CiAgICBjb25zdCB0YWlsYml0cyA9IG1heCAlIDQgKiA2OwogICAgaWYgKHRhaWxiaXRzID09PSAwKSB7CiAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTYgJiAyNTUpOwogICAgICByZXN1bHQucHVzaChiaXRzID4+IDggJiAyNTUpOwogICAgICByZXN1bHQucHVzaChiaXRzICYgMjU1KTsKICAgIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDE4KSB7CiAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTAgJiAyNTUpOwogICAgICByZXN1bHQucHVzaChiaXRzID4+IDIgJiAyNTUpOwogICAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTIpIHsKICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiA0ICYgMjU1KTsKICAgIH0KICAgIHJldHVybiBuZXcgQnVmZmVyMihuZXcgVWludDhBcnJheShyZXN1bHQpKTsKICB9CiAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbEJpbmFyeShvYmplY3QpIHsKICAgIGNvbnN0IG1heCA9IG9iamVjdC5sZW5ndGg7CiAgICBjb25zdCBtYXAyID0gQkFTRTY0X01BUDsKICAgIGxldCByZXN1bHQgPSAiIjsKICAgIGxldCBiaXRzID0gMDsKICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHsKICAgICAgaWYgKGlkeCAlIDMgPT09IDAgJiYgaWR4KSB7CiAgICAgICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAxOCAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDEyICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPj4gNiAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwMltiaXRzICYgNjNdOwogICAgICB9CiAgICAgIGJpdHMgPSAoYml0cyA8PCA4KSArIG9iamVjdFtpZHhdOwogICAgfQogICAgY29uc3QgdGFpbCA9IG1heCAlIDM7CiAgICBpZiAodGFpbCA9PT0gMCkgewogICAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDE4ICYgNjNdOwogICAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDEyICYgNjNdOwogICAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDYgJiA2M107CiAgICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgJiA2M107CiAgICB9IGVsc2UgaWYgKHRhaWwgPT09IDIpIHsKICAgICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiAxMCAmIDYzXTsKICAgICAgcmVzdWx0ICs9IG1hcDJbYml0cyA+PiA0ICYgNjNdOwogICAgICByZXN1bHQgKz0gbWFwMltiaXRzIDw8IDIgJiA2M107CiAgICAgIHJlc3VsdCArPSBtYXAyWzY0XTsKICAgIH0gZWxzZSBpZiAodGFpbCA9PT0gMSkgewogICAgICByZXN1bHQgKz0gbWFwMltiaXRzID4+IDIgJiA2M107CiAgICAgIHJlc3VsdCArPSBtYXAyW2JpdHMgPDwgNCAmIDYzXTsKICAgICAgcmVzdWx0ICs9IG1hcDJbNjRdOwogICAgICByZXN1bHQgKz0gbWFwMls2NF07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICBmdW5jdGlvbiBpc0JpbmFyeShvYmopIHsKICAgIGNvbnN0IGJ1ZiA9IG5ldyBCdWZmZXIyKCk7CiAgICB0cnkgewogICAgICBpZiAoMCA+IGJ1Zi5yZWFkRnJvbVN5bmMob2JqKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZmluYWxseSB7CiAgICAgIGJ1Zi5yZXNldCgpOwogICAgfQogIH0KICB2YXIgYmluYXJ5ID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeSIsIHsKICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJpbmFyeSwKICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgcHJlZGljYXRlOiBpc0JpbmFyeSwKICAgIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEJpbmFyeSwKICAgIHJlc29sdmU6IHJlc29sdmVZYW1sQmluYXJ5CiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS9ib29sLnRzCiAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxCb29sZWFuKGRhdGEpIHsKICAgIGNvbnN0IG1heCA9IGRhdGEubGVuZ3RoOwogICAgcmV0dXJuIG1heCA9PT0gNCAmJiAoZGF0YSA9PT0gInRydWUiIHx8IGRhdGEgPT09ICJUcnVlIiB8fCBkYXRhID09PSAiVFJVRSIpIHx8IG1heCA9PT0gNSAmJiAoZGF0YSA9PT0gImZhbHNlIiB8fCBkYXRhID09PSAiRmFsc2UiIHx8IGRhdGEgPT09ICJGQUxTRSIpOwogIH0KICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQm9vbGVhbihkYXRhKSB7CiAgICByZXR1cm4gZGF0YSA9PT0gInRydWUiIHx8IGRhdGEgPT09ICJUcnVlIiB8fCBkYXRhID09PSAiVFJVRSI7CiAgfQogIHZhciBib29sID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOmJvb2wiLCB7CiAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxCb29sZWFuLAogICAgZGVmYXVsdFN0eWxlOiAibG93ZXJjYXNlIiwKICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgcHJlZGljYXRlOiBpc0Jvb2xlYW4sCiAgICByZXByZXNlbnQ6IHsKICAgICAgbG93ZXJjYXNlKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3QgPyAidHJ1ZSIgOiAiZmFsc2UiOwogICAgICB9LAogICAgICB1cHBlcmNhc2Uob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdCA/ICJUUlVFIiA6ICJGQUxTRSI7CiAgICAgIH0sCiAgICAgIGNhbWVsY2FzZShvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0ID8gIlRydWUiIDogIkZhbHNlIjsKICAgICAgfQogICAgfSwKICAgIHJlc29sdmU6IHJlc29sdmVZYW1sQm9vbGVhbgogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvZmxvYXQudHMKICB2YXIgWUFNTF9GTE9BVF9QQVRURVJOID0gbmV3IFJlZ0V4cCgKICAgICJeKD86Wy0rXT8oPzowfFsxLTldWzAtOV9dKikoPzpcXC5bMC05X10qKT8oPzpbZUVdWy0rXT9bMC05XSspP3xcXC5bMC05X10rKD86W2VFXVstK10/WzAtOV0rKT98Wy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pK1xcLlswLTlfXSp8Wy0rXT9cXC4oPzppbmZ8SW5mfElORil8XFwuKD86bmFufE5hTnxOQU4pKSQiCiAgKTsKICBmdW5jdGlvbiByZXNvbHZlWWFtbEZsb2F0KGRhdGEpIHsKICAgIGlmICghWUFNTF9GTE9BVF9QQVRURVJOLnRlc3QoZGF0YSkgfHwgZGF0YVtkYXRhLmxlbmd0aCAtIDFdID09PSAiXyIpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIGZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxGbG9hdChkYXRhKSB7CiAgICBsZXQgdmFsdWUgPSBkYXRhLnJlcGxhY2UoL18vZywgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICBjb25zdCBzaWduID0gdmFsdWVbMF0gPT09ICItIiA/IC0xIDogMTsKICAgIGNvbnN0IGRpZ2l0cyA9IFtdOwogICAgaWYgKCIrLSIuaW5kZXhPZih2YWx1ZVswXSkgPj0gMCkgewogICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpOwogICAgfQogICAgaWYgKHZhbHVlID09PSAiLmluZiIpIHsKICAgICAgcmV0dXJuIHNpZ24gPT09IDEgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7CiAgICB9CiAgICBpZiAodmFsdWUgPT09ICIubmFuIikgewogICAgICByZXR1cm4gTmFOOwogICAgfQogICAgaWYgKHZhbHVlLmluZGV4T2YoIjoiKSA+PSAwKSB7CiAgICAgIHZhbHVlLnNwbGl0KCI6IikuZm9yRWFjaCgodjE1KSA9PiB7CiAgICAgICAgZGlnaXRzLnVuc2hpZnQocGFyc2VGbG9hdCh2MTUpKTsKICAgICAgfSk7CiAgICAgIGxldCB2YWx1ZU5iID0gMDsKICAgICAgbGV0IGJhc2UgPSAxOwogICAgICBkaWdpdHMuZm9yRWFjaCgoZDE1KSA9PiB7CiAgICAgICAgdmFsdWVOYiArPSBkMTUgKiBiYXNlOwogICAgICAgIGJhc2UgKj0gNjA7CiAgICAgIH0pOwogICAgICByZXR1cm4gc2lnbiAqIHZhbHVlTmI7CiAgICB9CiAgICByZXR1cm4gc2lnbiAqIHBhcnNlRmxvYXQodmFsdWUpOwogIH0KICB2YXIgU0NJRU5USUZJQ19XSVRIT1VUX0RPVCA9IC9eWy0rXT9bMC05XStlLzsKICBmdW5jdGlvbiByZXByZXNlbnRZYW1sRmxvYXQob2JqZWN0LCBzdHlsZSkgewogICAgaWYgKGlzTmFOKG9iamVjdCkpIHsKICAgICAgc3dpdGNoIChzdHlsZSkgewogICAgICAgIGNhc2UgImxvd2VyY2FzZSI6CiAgICAgICAgICByZXR1cm4gIi5uYW4iOwogICAgICAgIGNhc2UgInVwcGVyY2FzZSI6CiAgICAgICAgICByZXR1cm4gIi5OQU4iOwogICAgICAgIGNhc2UgImNhbWVsY2FzZSI6CiAgICAgICAgICByZXR1cm4gIi5OYU4iOwogICAgICB9CiAgICB9IGVsc2UgaWYgKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7CiAgICAgIHN3aXRjaCAoc3R5bGUpIHsKICAgICAgICBjYXNlICJsb3dlcmNhc2UiOgogICAgICAgICAgcmV0dXJuICIuaW5mIjsKICAgICAgICBjYXNlICJ1cHBlcmNhc2UiOgogICAgICAgICAgcmV0dXJuICIuSU5GIjsKICAgICAgICBjYXNlICJjYW1lbGNhc2UiOgogICAgICAgICAgcmV0dXJuICIuSW5mIjsKICAgICAgfQogICAgfSBlbHNlIGlmIChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkgewogICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgY2FzZSAibG93ZXJjYXNlIjoKICAgICAgICAgIHJldHVybiAiLS5pbmYiOwogICAgICAgIGNhc2UgInVwcGVyY2FzZSI6CiAgICAgICAgICByZXR1cm4gIi0uSU5GIjsKICAgICAgICBjYXNlICJjYW1lbGNhc2UiOgogICAgICAgICAgcmV0dXJuICItLkluZiI7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSkgewogICAgICByZXR1cm4gIi0wLjAiOwogICAgfQogICAgY29uc3QgcmVzID0gb2JqZWN0LnRvU3RyaW5nKDEwKTsKICAgIHJldHVybiBTQ0lFTlRJRklDX1dJVEhPVVRfRE9ULnRlc3QocmVzKSA/IHJlcy5yZXBsYWNlKCJlIiwgIi5lIikgOiByZXM7CiAgfQogIGZ1bmN0aW9uIGlzRmxvYXQob2JqZWN0KSB7CiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICJbb2JqZWN0IE51bWJlcl0iICYmIChvYmplY3QgJSAxICE9PSAwIHx8IGlzTmVnYXRpdmVaZXJvKG9iamVjdCkpOwogIH0KICB2YXIgZmxvYXQgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQiLCB7CiAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxGbG9hdCwKICAgIGRlZmF1bHRTdHlsZTogImxvd2VyY2FzZSIsCiAgICBraW5kOiAic2NhbGFyIiwKICAgIHByZWRpY2F0ZTogaXNGbG9hdCwKICAgIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEZsb2F0LAogICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxGbG9hdAogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvZnVuY3Rpb24udHMKICBmdW5jdGlvbiByZWNvbnN0cnVjdEZ1bmN0aW9uKGNvZGUpIHsKICAgIGNvbnN0IGZ1bmMyID0gbmV3IEZ1bmN0aW9uKGByZXR1cm4gJHtjb2RlfWApKCk7CiAgICBpZiAoIShmdW5jMiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBmdW5jdGlvbiBidXQgZ290ICR7dHlwZW9mIGZ1bmMyfTogJHtjb2RlfWApOwogICAgfQogICAgcmV0dXJuIGZ1bmMyOwogIH0KICB2YXIgZnVuYyA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9mdW5jdGlvbiIsIHsKICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgcmVzb2x2ZShkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgcmVjb25zdHJ1Y3RGdW5jdGlvbihgJHtkYXRhfWApOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGNhdGNoIChfZXJyKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9LAogICAgY29uc3RydWN0KGRhdGEpIHsKICAgICAgcmV0dXJuIHJlY29uc3RydWN0RnVuY3Rpb24oZGF0YSk7CiAgICB9LAogICAgcHJlZGljYXRlKG9iamVjdCkgewogICAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgRnVuY3Rpb247CiAgICB9LAogICAgcmVwcmVzZW50KG9iamVjdCkgewogICAgICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7CiAgICB9CiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS9pbnQudHMKICBmdW5jdGlvbiBpc0hleENvZGUoYzE3KSB7CiAgICByZXR1cm4gNDggPD0gYzE3ICYmIGMxNyA8PSA1NyB8fCA2NSA8PSBjMTcgJiYgYzE3IDw9IDcwIHx8IDk3IDw9IGMxNyAmJiBjMTcgPD0gMTAyOwogIH0KICBmdW5jdGlvbiBpc09jdENvZGUoYzE3KSB7CiAgICByZXR1cm4gNDggPD0gYzE3ICYmIGMxNyA8PSA1NTsKICB9CiAgZnVuY3Rpb24gaXNEZWNDb2RlKGMxNykgewogICAgcmV0dXJuIDQ4IDw9IGMxNyAmJiBjMTcgPD0gNTc7CiAgfQogIGZ1bmN0aW9uIHJlc29sdmVZYW1sSW50ZWdlcihkYXRhKSB7CiAgICBjb25zdCBtYXggPSBkYXRhLmxlbmd0aDsKICAgIGxldCBpbmRleCA9IDA7CiAgICBsZXQgaGFzRGlnaXRzID0gZmFsc2U7CiAgICBpZiAoIW1heCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IGNoMiA9IGRhdGFbaW5kZXhdOwogICAgaWYgKGNoMiA9PT0gIi0iIHx8IGNoMiA9PT0gIisiKSB7CiAgICAgIGNoMiA9IGRhdGFbKytpbmRleF07CiAgICB9CiAgICBpZiAoY2gyID09PSAiMCIpIHsKICAgICAgaWYgKGluZGV4ICsgMSA9PT0gbWF4KQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBjaDIgPSBkYXRhWysraW5kZXhdOwogICAgICBpZiAoY2gyID09PSAiYiIpIHsKICAgICAgICBpbmRleCsrOwogICAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykgewogICAgICAgICAgY2gyID0gZGF0YVtpbmRleF07CiAgICAgICAgICBpZiAoY2gyID09PSAiXyIpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgaWYgKGNoMiAhPT0gIjAiICYmIGNoMiAhPT0gIjEiKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoMiAhPT0gIl8iOwogICAgICB9CiAgICAgIGlmIChjaDIgPT09ICJ4IikgewogICAgICAgIGluZGV4Kys7CiAgICAgICAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7CiAgICAgICAgICBjaDIgPSBkYXRhW2luZGV4XTsKICAgICAgICAgIGlmIChjaDIgPT09ICJfIikKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICBpZiAoIWlzSGV4Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaDIgIT09ICJfIjsKICAgICAgfQogICAgICBmb3IgKDsgaW5kZXggPCBtYXg7IGluZGV4KyspIHsKICAgICAgICBjaDIgPSBkYXRhW2luZGV4XTsKICAgICAgICBpZiAoY2gyID09PSAiXyIpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoIWlzT2N0Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2gyICE9PSAiXyI7CiAgICB9CiAgICBpZiAoY2gyID09PSAiXyIpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykgewogICAgICBjaDIgPSBkYXRhW2luZGV4XTsKICAgICAgaWYgKGNoMiA9PT0gIl8iKQogICAgICAgIGNvbnRpbnVlOwogICAgICBpZiAoY2gyID09PSAiOiIpCiAgICAgICAgYnJlYWs7CiAgICAgIGlmICghaXNEZWNDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleCkpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGhhc0RpZ2l0cyA9IHRydWU7CiAgICB9CiAgICBpZiAoIWhhc0RpZ2l0cyB8fCBjaDIgPT09ICJfIikKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKGNoMiAhPT0gIjoiKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiAvXig6WzAtNV0/WzAtOV0pKyQvLnRlc3QoZGF0YS5zbGljZShpbmRleCkpOwogIH0KICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sSW50ZWdlcihkYXRhKSB7CiAgICBsZXQgdmFsdWUgPSBkYXRhOwogICAgY29uc3QgZGlnaXRzID0gW107CiAgICBpZiAodmFsdWUuaW5kZXhPZigiXyIpICE9PSAtMSkgewogICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL18vZywgIiIpOwogICAgfQogICAgbGV0IHNpZ24gPSAxOwogICAgbGV0IGNoMiA9IHZhbHVlWzBdOwogICAgaWYgKGNoMiA9PT0gIi0iIHx8IGNoMiA9PT0gIisiKSB7CiAgICAgIGlmIChjaDIgPT09ICItIikKICAgICAgICBzaWduID0gLTE7CiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7CiAgICAgIGNoMiA9IHZhbHVlWzBdOwogICAgfQogICAgaWYgKHZhbHVlID09PSAiMCIpCiAgICAgIHJldHVybiAwOwogICAgaWYgKGNoMiA9PT0gIjAiKSB7CiAgICAgIGlmICh2YWx1ZVsxXSA9PT0gImIiKQogICAgICAgIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDIpOwogICAgICBpZiAodmFsdWVbMV0gPT09ICJ4IikKICAgICAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCAxNik7CiAgICAgIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUsIDgpOwogICAgfQogICAgaWYgKHZhbHVlLmluZGV4T2YoIjoiKSAhPT0gLTEpIHsKICAgICAgdmFsdWUuc3BsaXQoIjoiKS5mb3JFYWNoKCh2MTUpID0+IHsKICAgICAgICBkaWdpdHMudW5zaGlmdChwYXJzZUludCh2MTUsIDEwKSk7CiAgICAgIH0pOwogICAgICBsZXQgdmFsdWVJbnQgPSAwOwogICAgICBsZXQgYmFzZSA9IDE7CiAgICAgIGRpZ2l0cy5mb3JFYWNoKChkMTUpID0+IHsKICAgICAgICB2YWx1ZUludCArPSBkMTUgKiBiYXNlOwogICAgICAgIGJhc2UgKj0gNjA7CiAgICAgIH0pOwogICAgICByZXR1cm4gc2lnbiAqIHZhbHVlSW50OwogICAgfQogICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZSwgMTApOwogIH0KICBmdW5jdGlvbiBpc0ludGVnZXIob2JqZWN0KSB7CiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICJbb2JqZWN0IE51bWJlcl0iICYmIG9iamVjdCAlIDEgPT09IDAgJiYgIWlzTmVnYXRpdmVaZXJvKG9iamVjdCk7CiAgfQogIHZhciBpbnQgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6aW50IiwgewogICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sSW50ZWdlciwKICAgIGRlZmF1bHRTdHlsZTogImRlY2ltYWwiLAogICAga2luZDogInNjYWxhciIsCiAgICBwcmVkaWNhdGU6IGlzSW50ZWdlciwKICAgIHJlcHJlc2VudDogewogICAgICBiaW5hcnkob2JqKSB7CiAgICAgICAgcmV0dXJuIG9iaiA+PSAwID8gYDBiJHtvYmoudG9TdHJpbmcoMil9YCA6IGAtMGIke29iai50b1N0cmluZygyKS5zbGljZSgxKX1gOwogICAgICB9LAogICAgICBvY3RhbChvYmopIHsKICAgICAgICByZXR1cm4gb2JqID49IDAgPyBgMCR7b2JqLnRvU3RyaW5nKDgpfWAgOiBgLTAke29iai50b1N0cmluZyg4KS5zbGljZSgxKX1gOwogICAgICB9LAogICAgICBkZWNpbWFsKG9iaikgewogICAgICAgIHJldHVybiBvYmoudG9TdHJpbmcoMTApOwogICAgICB9LAogICAgICBoZXhhZGVjaW1hbChvYmopIHsKICAgICAgICByZXR1cm4gb2JqID49IDAgPyBgMHgke29iai50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1gIDogYC0weCR7b2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfWA7CiAgICAgIH0KICAgIH0sCiAgICByZXNvbHZlOiByZXNvbHZlWWFtbEludGVnZXIsCiAgICBzdHlsZUFsaWFzZXM6IHsKICAgICAgYmluYXJ5OiBbMiwgImJpbiJdLAogICAgICBkZWNpbWFsOiBbMTAsICJkZWMiXSwKICAgICAgaGV4YWRlY2ltYWw6IFsxNiwgImhleCJdLAogICAgICBvY3RhbDogWzgsICJvY3QiXQogICAgfQogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvbWFwLnRzCiAgdmFyIG1hcCA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjptYXAiLCB7CiAgICBjb25zdHJ1Y3QoZGF0YSkgewogICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTsKICAgIH0sCiAgICBraW5kOiAibWFwcGluZyIKICB9KTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC90eXBlL21lcmdlLnRzCiAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxNZXJnZShkYXRhKSB7CiAgICByZXR1cm4gZGF0YSA9PT0gIjw8IiB8fCBkYXRhID09PSBudWxsOwogIH0KICB2YXIgbWVyZ2UgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLCB7CiAgICBraW5kOiAic2NhbGFyIiwKICAgIHJlc29sdmU6IHJlc29sdmVZYW1sTWVyZ2UKICB9KTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC90eXBlL25pbC50cwogIGZ1bmN0aW9uIHJlc29sdmVZYW1sTnVsbChkYXRhKSB7CiAgICBjb25zdCBtYXggPSBkYXRhLmxlbmd0aDsKICAgIHJldHVybiBtYXggPT09IDEgJiYgZGF0YSA9PT0gIn4iIHx8IG1heCA9PT0gNCAmJiAoZGF0YSA9PT0gIm51bGwiIHx8IGRhdGEgPT09ICJOdWxsIiB8fCBkYXRhID09PSAiTlVMTCIpOwogIH0KICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sTnVsbCgpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBmdW5jdGlvbiBpc051bGwob2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0ID09PSBudWxsOwogIH0KICB2YXIgbmlsID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOm51bGwiLCB7CiAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxOdWxsLAogICAgZGVmYXVsdFN0eWxlOiAibG93ZXJjYXNlIiwKICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgcHJlZGljYXRlOiBpc051bGwsCiAgICByZXByZXNlbnQ6IHsKICAgICAgY2Fub25pY2FsKCkgewogICAgICAgIHJldHVybiAifiI7CiAgICAgIH0sCiAgICAgIGxvd2VyY2FzZSgpIHsKICAgICAgICByZXR1cm4gIm51bGwiOwogICAgICB9LAogICAgICB1cHBlcmNhc2UoKSB7CiAgICAgICAgcmV0dXJuICJOVUxMIjsKICAgICAgfSwKICAgICAgY2FtZWxjYXNlKCkgewogICAgICAgIHJldHVybiAiTnVsbCI7CiAgICAgIH0KICAgIH0sCiAgICByZXNvbHZlOiByZXNvbHZlWWFtbE51bGwKICB9KTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC90eXBlL29tYXAudHMKICB2YXIgeyBoYXNPd24gfSA9IE9iamVjdDsKICB2YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICBmdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YSkgewogICAgY29uc3Qgb2JqZWN0S2V5cyA9IFtdOwogICAgbGV0IHBhaXJLZXkgPSAiIjsKICAgIGxldCBwYWlySGFzS2V5ID0gZmFsc2U7CiAgICBmb3IgKGNvbnN0IHBhaXIgb2YgZGF0YSkgewogICAgICBwYWlySGFzS2V5ID0gZmFsc2U7CiAgICAgIGlmIChfdG9TdHJpbmcuY2FsbChwYWlyKSAhPT0gIltvYmplY3QgT2JqZWN0XSIpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKHBhaXJLZXkgaW4gcGFpcikgewogICAgICAgIGlmIChoYXNPd24ocGFpciwgcGFpcktleSkpIHsKICAgICAgICAgIGlmICghcGFpckhhc0tleSkKICAgICAgICAgICAgcGFpckhhc0tleSA9IHRydWU7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFwYWlySGFzS2V5KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgaWYgKG9iamVjdEtleXMuaW5kZXhPZihwYWlyS2V5KSA9PT0gLTEpCiAgICAgICAgb2JqZWN0S2V5cy5wdXNoKHBhaXJLZXkpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIGZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxPbWFwKGRhdGEpIHsKICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdOwogIH0KICB2YXIgb21hcCA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwIiwgewogICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sT21hcCwKICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAKICB9KTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC90eXBlL3BhaXJzLnRzCiAgdmFyIF90b1N0cmluZzIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogIGZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YSkgewogICAgY29uc3QgcmVzdWx0ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF0YS5sZW5ndGggfSk7CiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgY29uc3QgcGFpciA9IGRhdGFbaW5kZXhdOwogICAgICBpZiAoX3RvU3RyaW5nMi5jYWxsKHBhaXIpICE9PSAiW29iamVjdCBPYmplY3RdIikKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYWlyKTsKICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSAxKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmVzdWx0W2luZGV4XSA9IFtrZXlzWzBdLCBwYWlyW2tleXNbMF1dXTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sUGFpcnMoZGF0YSkgewogICAgaWYgKGRhdGEgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGNvbnN0IHJlc3VsdCA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGRhdGEubGVuZ3RoIH0pOwogICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGEubGVuZ3RoOyBpbmRleCArPSAxKSB7CiAgICAgIGNvbnN0IHBhaXIgPSBkYXRhW2luZGV4XTsKICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhaXIpOwogICAgICByZXN1bHRbaW5kZXhdID0gW2tleXNbMF0sIHBhaXJba2V5c1swXV1dOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdmFyIHBhaXJzID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOnBhaXJzIiwgewogICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sUGFpcnMsCiAgICBraW5kOiAic2VxdWVuY2UiLAogICAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxQYWlycwogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvcmVnZXhwLnRzCiAgdmFyIFJFR0VYUCA9IC9eXC8oPzxyZWdleHA+W1xzXFNdKylcLyg/PG1vZGlmaWVycz5bZ2lzbXV5XSopJC87CiAgdmFyIHJlZ2V4cCA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9yZWdleHAiLCB7CiAgICBraW5kOiAic2NhbGFyIiwKICAgIHJlc29sdmUoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCB8fCAhZGF0YS5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgY29uc3QgcmVnZXhwMiA9IGAke2RhdGF9YDsKICAgICAgaWYgKHJlZ2V4cDIuY2hhckF0KDApID09PSAiLyIpIHsKICAgICAgICBpZiAoIVJFR0VYUC50ZXN0KGRhdGEpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1vZGlmaWVycyA9IFsuLi5yZWdleHAyLm1hdGNoKFJFR0VYUCk/Lmdyb3Vwcz8ubW9kaWZpZXJzID8/ICIiXTsKICAgICAgICBpZiAobmV3IFNldChtb2RpZmllcnMpLnNpemUgPCBtb2RpZmllcnMubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSwKICAgIGNvbnN0cnVjdChkYXRhKSB7CiAgICAgIGNvbnN0IHsgcmVnZXhwOiByZWdleHAyID0gYCR7ZGF0YX1gLCBtb2RpZmllcnMgPSAiIiB9ID0gYCR7ZGF0YX1gLm1hdGNoKFJFR0VYUCk/Lmdyb3VwcyA/PyB7fTsKICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXhwMiwgbW9kaWZpZXJzKTsKICAgIH0sCiAgICBwcmVkaWNhdGUob2JqZWN0KSB7CiAgICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBSZWdFeHA7CiAgICB9LAogICAgcmVwcmVzZW50KG9iamVjdCkgewogICAgICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7CiAgICB9CiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS9zZXEudHMKICB2YXIgc2VxID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOnNlcSIsIHsKICAgIGNvbnN0cnVjdChkYXRhKSB7CiAgICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFtdOwogICAgfSwKICAgIGtpbmQ6ICJzZXF1ZW5jZSIKICB9KTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC90eXBlL3NldC50cwogIHZhciB7IGhhc093bjogaGFzT3duMiB9ID0gT2JqZWN0OwogIGZ1bmN0aW9uIHJlc29sdmVZYW1sU2V0KGRhdGEpIHsKICAgIGlmIChkYXRhID09PSBudWxsKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHsKICAgICAgaWYgKGhhc093bjIoZGF0YSwga2V5KSkgewogICAgICAgIGlmIChkYXRhW2tleV0gIT09IG51bGwpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sU2V0KGRhdGEpIHsKICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IHt9OwogIH0KICB2YXIgc2V0ID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOnNldCIsIHsKICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFNldCwKICAgIGtpbmQ6ICJtYXBwaW5nIiwKICAgIHJlc29sdmU6IHJlc29sdmVZYW1sU2V0CiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS9zdHIudHMKICB2YXIgc3RyID0gbmV3IFR5cGUoInRhZzp5YW1sLm9yZywyMDAyOnN0ciIsIHsKICAgIGNvbnN0cnVjdChkYXRhKSB7CiAgICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6ICIiOwogICAgfSwKICAgIGtpbmQ6ICJzY2FsYXIiCiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS90aW1lc3RhbXAudHMKICB2YXIgWUFNTF9EQVRFX1JFR0VYUCA9IG5ldyBSZWdFeHAoCiAgICAiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0pLShbMC05XVswLTldKSQiCiAgKTsKICB2YXIgWUFNTF9USU1FU1RBTVBfUkVHRVhQID0gbmV3IFJlZ0V4cCgKICAgICJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFx0XSspKFswLTldWzAtOV0/KTooWzAtOV1bMC05XSk6KFswLTldWzAtOV0pKD86XFwuKFswLTldKikpPyg/OlsgXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JCIKICApOwogIGZ1bmN0aW9uIHJlc29sdmVZYW1sVGltZXN0YW1wKGRhdGEpIHsKICAgIGlmIChkYXRhID09PSBudWxsKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChZQU1MX1RJTUVTVEFNUF9SRUdFWFAuZXhlYyhkYXRhKSAhPT0gbnVsbCkKICAgICAgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAoZGF0YSkgewogICAgbGV0IG1hdGNoID0gWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpOwogICAgaWYgKG1hdGNoID09PSBudWxsKQogICAgICBtYXRjaCA9IFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpOwogICAgaWYgKG1hdGNoID09PSBudWxsKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpOwogICAgY29uc3QgeWVhciA9ICttYXRjaFsxXTsKICAgIGNvbnN0IG1vbnRoID0gK21hdGNoWzJdIC0gMTsKICAgIGNvbnN0IGRheSA9ICttYXRjaFszXTsKICAgIGlmICghbWF0Y2hbNF0pIHsKICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCBkYXkpKTsKICAgIH0KICAgIGNvbnN0IGhvdXIgPSArbWF0Y2hbNF07CiAgICBjb25zdCBtaW51dGUgPSArbWF0Y2hbNV07CiAgICBjb25zdCBzZWNvbmQgPSArbWF0Y2hbNl07CiAgICBsZXQgZnJhY3Rpb24gPSAwOwogICAgaWYgKG1hdGNoWzddKSB7CiAgICAgIGxldCBwYXJ0RnJhY3Rpb24gPSBtYXRjaFs3XS5zbGljZSgwLCAzKTsKICAgICAgd2hpbGUgKHBhcnRGcmFjdGlvbi5sZW5ndGggPCAzKSB7CiAgICAgICAgcGFydEZyYWN0aW9uICs9ICIwIjsKICAgICAgfQogICAgICBmcmFjdGlvbiA9ICtwYXJ0RnJhY3Rpb247CiAgICB9CiAgICBsZXQgZGVsdGEgPSBudWxsOwogICAgaWYgKG1hdGNoWzldKSB7CiAgICAgIGNvbnN0IHR6SG91ciA9ICttYXRjaFsxMF07CiAgICAgIGNvbnN0IHR6TWludXRlID0gKyhtYXRjaFsxMV0gfHwgMCk7CiAgICAgIGRlbHRhID0gKHR6SG91ciAqIDYwICsgdHpNaW51dGUpICogNmU0OwogICAgICBpZiAobWF0Y2hbOV0gPT09ICItIikKICAgICAgICBkZWx0YSA9IC1kZWx0YTsKICAgIH0KICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgKICAgICAgRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZyYWN0aW9uKQogICAgKTsKICAgIGlmIChkZWx0YSkKICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpIC0gZGVsdGEpOwogICAgcmV0dXJuIGRhdGU7CiAgfQogIGZ1bmN0aW9uIHJlcHJlc2VudFlhbWxUaW1lc3RhbXAoZGF0ZSkgewogICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsKICB9CiAgdmFyIHRpbWVzdGFtcCA9IG5ldyBUeXBlKCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXAiLCB7CiAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAsCiAgICBpbnN0YW5jZU9mOiBEYXRlLAogICAga2luZDogInNjYWxhciIsCiAgICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxUaW1lc3RhbXAsCiAgICByZXNvbHZlOiByZXNvbHZlWWFtbFRpbWVzdGFtcAogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvdW5kZWZpbmVkLnRzCiAgdmFyIHVuZGVmaW5lZFR5cGUgPSBuZXcgVHlwZSgidGFnOnlhbWwub3JnLDIwMDI6anMvdW5kZWZpbmVkIiwgewogICAga2luZDogInNjYWxhciIsCiAgICByZXNvbHZlKCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCiAgICBjb25zdHJ1Y3QoKSB7CiAgICAgIHJldHVybiB2b2lkIDA7CiAgICB9LAogICAgcHJlZGljYXRlKG9iamVjdCkgewogICAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gInVuZGVmaW5lZCI7CiAgICB9LAogICAgcmVwcmVzZW50KCkgewogICAgICByZXR1cm4gIiI7CiAgICB9CiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvc2NoZW1hL2ZhaWxzYWZlLnRzCiAgdmFyIGZhaWxzYWZlID0gbmV3IFNjaGVtYSh7CiAgICBleHBsaWNpdDogW3N0ciwgc2VxLCBtYXBdCiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvc2NoZW1hL2pzb24udHMKICB2YXIganNvbiA9IG5ldyBTY2hlbWEoewogICAgaW1wbGljaXQ6IFtuaWwsIGJvb2wsIGludCwgZmxvYXRdLAogICAgaW5jbHVkZTogW2ZhaWxzYWZlXQogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3NjaGVtYS9jb3JlLnRzCiAgdmFyIGNvcmUgPSBuZXcgU2NoZW1hKHsKICAgIGluY2x1ZGU6IFtqc29uXQogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3NjaGVtYS9kZWZhdWx0LnRzCiAgdmFyIGRlZiA9IG5ldyBTY2hlbWEoewogICAgZXhwbGljaXQ6IFtiaW5hcnksIG9tYXAsIHBhaXJzLCBzZXRdLAogICAgaW1wbGljaXQ6IFt0aW1lc3RhbXAsIG1lcmdlXSwKICAgIGluY2x1ZGU6IFtjb3JlXQogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3NjaGVtYS9leHRlbmRlZC50cwogIHZhciBleHRlbmRlZCA9IG5ldyBTY2hlbWEoewogICAgZXhwbGljaXQ6IFtyZWdleHAsIHVuZGVmaW5lZFR5cGVdLAogICAgaW5jbHVkZTogW2RlZl0KICB9KTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC9zdGF0ZS50cwogIHZhciBTdGF0ZSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHNjaGVtYSA9IGRlZikgewogICAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTsKICAgIH0KICB9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL2xvYWRlci9sb2FkZXJfc3RhdGUudHMKICB2YXIgTG9hZGVyU3RhdGUgPSBjbGFzcyBleHRlbmRzIFN0YXRlIHsKICAgIGNvbnN0cnVjdG9yKGlucHV0LCB7CiAgICAgIGZpbGVuYW1lLAogICAgICBzY2hlbWEsCiAgICAgIG9uV2FybmluZywKICAgICAgbGVnYWN5ID0gZmFsc2UsCiAgICAgIGpzb246IGpzb24yID0gZmFsc2UsCiAgICAgIGxpc3RlbmVyID0gbnVsbAogICAgfSkgewogICAgICBzdXBlcihzY2hlbWEpOwogICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7CiAgICAgIHRoaXMuZG9jdW1lbnRzID0gW107CiAgICAgIHRoaXMubGluZUluZGVudCA9IDA7CiAgICAgIHRoaXMubGluZVN0YXJ0ID0gMDsKICAgICAgdGhpcy5wb3NpdGlvbiA9IDA7CiAgICAgIHRoaXMubGluZSA9IDA7CiAgICAgIHRoaXMucmVzdWx0ID0gIiI7CiAgICAgIHRoaXMuZmlsZW5hbWUgPSBmaWxlbmFtZTsKICAgICAgdGhpcy5vbldhcm5pbmcgPSBvbldhcm5pbmc7CiAgICAgIHRoaXMubGVnYWN5ID0gbGVnYWN5OwogICAgICB0aGlzLmpzb24gPSBqc29uMjsKICAgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOwogICAgICB0aGlzLmltcGxpY2l0VHlwZXMgPSB0aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0OwogICAgICB0aGlzLnR5cGVNYXAgPSB0aGlzLnNjaGVtYS5jb21waWxlZFR5cGVNYXA7CiAgICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVuZ3RoOwogICAgfQogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvbG9hZGVyL2xvYWRlci50cwogIHZhciB7IGhhc093bjogaGFzT3duMyB9ID0gT2JqZWN0OwogIHZhciBDT05URVhUX0ZMT1dfSU4gPSAxOwogIHZhciBDT05URVhUX0ZMT1dfT1VUID0gMjsKICB2YXIgQ09OVEVYVF9CTE9DS19JTiA9IDM7CiAgdmFyIENPTlRFWFRfQkxPQ0tfT1VUID0gNDsKICB2YXIgQ0hPTVBJTkdfQ0xJUCA9IDE7CiAgdmFyIENIT01QSU5HX1NUUklQID0gMjsKICB2YXIgQ0hPTVBJTkdfS0VFUCA9IDM7CiAgdmFyIFBBVFRFUk5fTk9OX1BSSU5UQUJMRSA9IC9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS87CiAgdmFyIFBBVFRFUk5fTk9OX0FTQ0lJX0xJTkVfQlJFQUtTID0gL1tceDg1XHUyMDI4XHUyMDI5XS87CiAgdmFyIFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTID0gL1ssXFtcXVx7XH1dLzsKICB2YXIgUEFUVEVSTl9UQUdfSEFORExFID0gL14oPzohfCEhfCFbYS16XC1dKyEpJC9pOwogIHZhciBQQVRURVJOX1RBR19VUkkgPSAvXig/OiF8W14sXFtcXVx7XH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XC0jO1wvXD86QCY9XCtcJCxfXC4hflwqJ1woXClcW1xdXSkqJC9pOwogIGZ1bmN0aW9uIF9jbGFzcyhvYmopIHsKICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTsKICB9CiAgZnVuY3Rpb24gaXNFT0woYzE3KSB7CiAgICByZXR1cm4gYzE3ID09PSAxMCB8fCBjMTcgPT09IDEzOwogIH0KICBmdW5jdGlvbiBpc1doaXRlU3BhY2UoYzE3KSB7CiAgICByZXR1cm4gYzE3ID09PSA5IHx8IGMxNyA9PT0gMzI7CiAgfQogIGZ1bmN0aW9uIGlzV3NPckVvbChjMTcpIHsKICAgIHJldHVybiBjMTcgPT09IDkgfHwgYzE3ID09PSAzMiB8fCBjMTcgPT09IDEwIHx8IGMxNyA9PT0gMTM7CiAgfQogIGZ1bmN0aW9uIGlzRmxvd0luZGljYXRvcihjMTcpIHsKICAgIHJldHVybiBjMTcgPT09IDQ0IHx8IGMxNyA9PT0gOTEgfHwgYzE3ID09PSA5MyB8fCBjMTcgPT09IDEyMyB8fCBjMTcgPT09IDEyNTsKICB9CiAgZnVuY3Rpb24gZnJvbUhleENvZGUoYzE3KSB7CiAgICBpZiAoNDggPD0gYzE3ICYmIGMxNyA8PSA1NykgewogICAgICByZXR1cm4gYzE3IC0gNDg7CiAgICB9CiAgICBjb25zdCBsYyA9IGMxNyB8IDMyOwogICAgaWYgKDk3IDw9IGxjICYmIGxjIDw9IDEwMikgewogICAgICByZXR1cm4gbGMgLSA5NyArIDEwOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KICBmdW5jdGlvbiBlc2NhcGVkSGV4TGVuKGMxNykgewogICAgaWYgKGMxNyA9PT0gMTIwKSB7CiAgICAgIHJldHVybiAyOwogICAgfQogICAgaWYgKGMxNyA9PT0gMTE3KSB7CiAgICAgIHJldHVybiA0OwogICAgfQogICAgaWYgKGMxNyA9PT0gODUpIHsKICAgICAgcmV0dXJuIDg7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CiAgZnVuY3Rpb24gZnJvbURlY2ltYWxDb2RlKGMxNykgewogICAgaWYgKDQ4IDw9IGMxNyAmJiBjMTcgPD0gNTcpIHsKICAgICAgcmV0dXJuIGMxNyAtIDQ4OwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KICBmdW5jdGlvbiBzaW1wbGVFc2NhcGVTZXF1ZW5jZShjMTcpIHsKICAgIHJldHVybiBjMTcgPT09IDQ4ID8gIlwwIiA6IGMxNyA9PT0gOTcgPyAiXHgwNyIgOiBjMTcgPT09IDk4ID8gIlxiIiA6IGMxNyA9PT0gMTE2ID8gIgkiIDogYzE3ID09PSA5ID8gIgkiIDogYzE3ID09PSAxMTAgPyAiXG4iIDogYzE3ID09PSAxMTggPyAiXHYiIDogYzE3ID09PSAxMDIgPyAiXGYiIDogYzE3ID09PSAxMTQgPyAiXHIiIDogYzE3ID09PSAxMDEgPyAiXHgxQiIgOiBjMTcgPT09IDMyID8gIiAiIDogYzE3ID09PSAzNCA/ICciJyA6IGMxNyA9PT0gNDcgPyAiLyIgOiBjMTcgPT09IDkyID8gIlxcIiA6IGMxNyA9PT0gNzggPyAiXHg4NSIgOiBjMTcgPT09IDk1ID8gIlx4QTAiIDogYzE3ID09PSA3NiA/ICJcdTIwMjgiIDogYzE3ID09PSA4MCA/ICJcdTIwMjkiIDogIiI7CiAgfQogIGZ1bmN0aW9uIGNoYXJGcm9tQ29kZXBvaW50KGMxNykgewogICAgaWYgKGMxNyA8PSA2NTUzNSkgewogICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjMTcpOwogICAgfQogICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoCiAgICAgIChjMTcgLSA2NTUzNiA+PiAxMCkgKyA1NTI5NiwKICAgICAgKGMxNyAtIDY1NTM2ICYgMTAyMykgKyA1NjMyMAogICAgKTsKICB9CiAgdmFyIHNpbXBsZUVzY2FwZUNoZWNrID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjU2IH0pOwogIHZhciBzaW1wbGVFc2NhcGVNYXAgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTYgfSk7CiAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IDI1NjsgaTQrKykgewogICAgc2ltcGxlRXNjYXBlQ2hlY2tbaTRdID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaTQpID8gMSA6IDA7CiAgICBzaW1wbGVFc2NhcGVNYXBbaTRdID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaTQpOwogIH0KICBmdW5jdGlvbiBnZW5lcmF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKSB7CiAgICByZXR1cm4gbmV3IFlBTUxFcnJvcigKICAgICAgbWVzc2FnZSwKICAgICAgbmV3IE1hcmsoCiAgICAgICAgc3RhdGUuZmlsZW5hbWUsCiAgICAgICAgc3RhdGUuaW5wdXQsCiAgICAgICAgc3RhdGUucG9zaXRpb24sCiAgICAgICAgc3RhdGUubGluZSwKICAgICAgICBzdGF0ZS5wb3NpdGlvbiAtIHN0YXRlLmxpbmVTdGFydAogICAgICApCiAgICApOwogIH0KICBmdW5jdGlvbiB0aHJvd0Vycm9yKHN0YXRlLCBtZXNzYWdlKSB7CiAgICB0aHJvdyBnZW5lcmF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKTsKICB9CiAgZnVuY3Rpb24gdGhyb3dXYXJuaW5nKHN0YXRlLCBtZXNzYWdlKSB7CiAgICBpZiAoc3RhdGUub25XYXJuaW5nKSB7CiAgICAgIHN0YXRlLm9uV2FybmluZy5jYWxsKG51bGwsIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpKTsKICAgIH0KICB9CiAgdmFyIGRpcmVjdGl2ZUhhbmRsZXJzID0gewogICAgWUFNTChzdGF0ZSwgX25hbWUsIC4uLmFyZ3MpIHsKICAgICAgaWYgKHN0YXRlLnZlcnNpb24gIT09IG51bGwpIHsKICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgImR1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZSIpOwogICAgICB9CiAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkgewogICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCAiWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCIpOwogICAgICB9CiAgICAgIGNvbnN0IG1hdGNoID0gL14oWzAtOV0rKVwuKFswLTldKykkLy5leGVjKGFyZ3NbMF0pOwogICAgICBpZiAobWF0Y2ggPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIik7CiAgICAgIH0KICAgICAgY29uc3QgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSwgMTApOwogICAgICBjb25zdCBtaW5vciA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7CiAgICAgIGlmIChtYWpvciAhPT0gMSkgewogICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCAidW5hY2NlcHRhYmxlIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQiKTsKICAgICAgfQogICAgICBzdGF0ZS52ZXJzaW9uID0gYXJnc1swXTsKICAgICAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gbWlub3IgPCAyOwogICAgICBpZiAobWlub3IgIT09IDEgJiYgbWlub3IgIT09IDIpIHsKICAgICAgICByZXR1cm4gdGhyb3dXYXJuaW5nKHN0YXRlLCAidW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpOwogICAgICB9CiAgICB9LAogICAgVEFHKHN0YXRlLCBfbmFtZSwgLi4uYXJncykgewogICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpIHsKICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHMiKTsKICAgICAgfQogICAgICBjb25zdCBoYW5kbGUgPSBhcmdzWzBdOwogICAgICBjb25zdCBwcmVmaXggPSBhcmdzWzFdOwogICAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZSkpIHsKICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigKICAgICAgICAgIHN0YXRlLAogICAgICAgICAgImlsbC1mb3JtZWQgdGFnIGhhbmRsZSAoZmlyc3QgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIgogICAgICAgICk7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLnRhZ01hcCAmJiBoYXNPd24zKHN0YXRlLnRhZ01hcCwgaGFuZGxlKSkgewogICAgICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICAgICAgc3RhdGUsCiAgICAgICAgICBgdGhlcmUgaXMgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHN1ZmZpeCBmb3IgIiR7aGFuZGxlfSIgdGFnIGhhbmRsZWAKICAgICAgICApOwogICAgICB9CiAgICAgIGlmICghUEFUVEVSTl9UQUdfVVJJLnRlc3QocHJlZml4KSkgewogICAgICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICAgICAgc3RhdGUsCiAgICAgICAgICAiaWxsLWZvcm1lZCB0YWcgcHJlZml4IChzZWNvbmQgYXJndW1lbnQpIG9mIHRoZSBUQUcgZGlyZWN0aXZlIgogICAgICAgICk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBzdGF0ZS50YWdNYXAgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgc3RhdGUudGFnTWFwID0ge307CiAgICAgIH0KICAgICAgc3RhdGUudGFnTWFwW2hhbmRsZV0gPSBwcmVmaXg7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBjYXB0dXJlU2VnbWVudChzdGF0ZSwgc3RhcnQsIGVuZCwgY2hlY2tKc29uKSB7CiAgICBsZXQgcmVzdWx0OwogICAgaWYgKHN0YXJ0IDwgZW5kKSB7CiAgICAgIHJlc3VsdCA9IHN0YXRlLmlucHV0LnNsaWNlKHN0YXJ0LCBlbmQpOwogICAgICBpZiAoY2hlY2tKc29uKSB7CiAgICAgICAgZm9yIChsZXQgcG9zaXRpb24gPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBwb3NpdGlvbiA8IGxlbmd0aDsgcG9zaXRpb24rKykgewogICAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gcmVzdWx0LmNoYXJDb2RlQXQocG9zaXRpb24pOwogICAgICAgICAgaWYgKCEoY2hhcmFjdGVyID09PSA5IHx8IDMyIDw9IGNoYXJhY3RlciAmJiBjaGFyYWN0ZXIgPD0gMTExNDExMSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsICJleHBlY3RlZCB2YWxpZCBKU09OIGNoYXJhY3RlciIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChQQVRURVJOX05PTl9QUklOVEFCTEUudGVzdChyZXN1bHQpKSB7CiAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsICJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyIpOwogICAgICB9CiAgICAgIHN0YXRlLnJlc3VsdCArPSByZXN1bHQ7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG1lcmdlTWFwcGluZ3Moc3RhdGUsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG92ZXJyaWRhYmxlS2V5cykgewogICAgaWYgKCFpc09iamVjdChzb3VyY2UpKSB7CiAgICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICAgIHN0YXRlLAogICAgICAgICJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZSIKICAgICAgKTsKICAgIH0KICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOwogICAgZm9yIChsZXQgaTQgPSAwLCBsZW4gPSBrZXlzLmxlbmd0aDsgaTQgPCBsZW47IGk0KyspIHsKICAgICAgY29uc3Qga2V5ID0ga2V5c1tpNF07CiAgICAgIGlmICghaGFzT3duMyhkZXN0aW5hdGlvbiwga2V5KSkgewogICAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBzb3VyY2Vba2V5XTsKICAgICAgICBvdmVycmlkYWJsZUtleXNba2V5XSA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gc3RvcmVNYXBwaW5nUGFpcihzdGF0ZSwgcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlLCBzdGFydExpbmUsIHN0YXJ0UG9zKSB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShrZXlOb2RlKSkgewogICAgICBrZXlOb2RlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoa2V5Tm9kZSk7CiAgICAgIGZvciAobGV0IGluZGV4ID0gMCwgcXVhbnRpdHkgPSBrZXlOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXgrKykgewogICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGVbaW5kZXhdKSkgewogICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsICJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzIik7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gIm9iamVjdCIgJiYgX2NsYXNzKGtleU5vZGVbaW5kZXhdKSA9PT0gIltvYmplY3QgT2JqZWN0XSIpIHsKICAgICAgICAgIGtleU5vZGVbaW5kZXhdID0gIltvYmplY3QgT2JqZWN0XSI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAodHlwZW9mIGtleU5vZGUgPT09ICJvYmplY3QiICYmIF9jbGFzcyhrZXlOb2RlKSA9PT0gIltvYmplY3QgT2JqZWN0XSIpIHsKICAgICAga2V5Tm9kZSA9ICJbb2JqZWN0IE9iamVjdF0iOwogICAgfQogICAga2V5Tm9kZSA9IFN0cmluZyhrZXlOb2RlKTsKICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHsKICAgICAgcmVzdWx0ID0ge307CiAgICB9CiAgICBpZiAoa2V5VGFnID09PSAidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiKSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlTm9kZSkpIHsKICAgICAgICBmb3IgKGxldCBpbmRleCA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXgrKykgewogICAgICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXhdLCBvdmVycmlkYWJsZUtleXMpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBtZXJnZU1hcHBpbmdzKHN0YXRlLCByZXN1bHQsIHZhbHVlTm9kZSwgb3ZlcnJpZGFibGVLZXlzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKCFzdGF0ZS5qc29uICYmICFoYXNPd24zKG92ZXJyaWRhYmxlS2V5cywga2V5Tm9kZSkgJiYgaGFzT3duMyhyZXN1bHQsIGtleU5vZGUpKSB7CiAgICAgICAgc3RhdGUubGluZSA9IHN0YXJ0TGluZSB8fCBzdGF0ZS5saW5lOwogICAgICAgIHN0YXRlLnBvc2l0aW9uID0gc3RhcnRQb3MgfHwgc3RhdGUucG9zaXRpb247CiAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsICJkdXBsaWNhdGVkIG1hcHBpbmcga2V5Iik7CiAgICAgIH0KICAgICAgcmVzdWx0W2tleU5vZGVdID0gdmFsdWVOb2RlOwogICAgICBkZWxldGUgb3ZlcnJpZGFibGVLZXlzW2tleU5vZGVdOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gcmVhZExpbmVCcmVhayhzdGF0ZSkgewogICAgY29uc3QgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICBpZiAoY2gyID09PSAxMCkgewogICAgICBzdGF0ZS5wb3NpdGlvbisrOwogICAgfSBlbHNlIGlmIChjaDIgPT09IDEzKSB7CiAgICAgIHN0YXRlLnBvc2l0aW9uKys7CiAgICAgIGlmIChzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSA9PT0gMTApIHsKICAgICAgICBzdGF0ZS5wb3NpdGlvbisrOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgImEgbGluZSBicmVhayBpcyBleHBlY3RlZCIpOwogICAgfQogICAgc3RhdGUubGluZSArPSAxOwogICAgc3RhdGUubGluZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247CiAgfQogIGZ1bmN0aW9uIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7CiAgICBsZXQgbGluZUJyZWFrcyA9IDAsIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgd2hpbGUgKGNoMiAhPT0gMCkgewogICAgICB3aGlsZSAoaXNXaGl0ZVNwYWNlKGNoMikpIHsKICAgICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICB9CiAgICAgIGlmIChhbGxvd0NvbW1lbnRzICYmIGNoMiA9PT0gMzUpIHsKICAgICAgICBkbyB7CiAgICAgICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICAgIH0gd2hpbGUgKGNoMiAhPT0gMTAgJiYgY2gyICE9PSAxMyAmJiBjaDIgIT09IDApOwogICAgICB9CiAgICAgIGlmIChpc0VPTChjaDIpKSB7CiAgICAgICAgcmVhZExpbmVCcmVhayhzdGF0ZSk7CiAgICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgbGluZUJyZWFrcysrOwogICAgICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwOwogICAgICAgIHdoaWxlIChjaDIgPT09IDMyKSB7CiAgICAgICAgICBzdGF0ZS5saW5lSW5kZW50Kys7CiAgICAgICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKGNoZWNrSW5kZW50ICE9PSAtMSAmJiBsaW5lQnJlYWtzICE9PSAwICYmIHN0YXRlLmxpbmVJbmRlbnQgPCBjaGVja0luZGVudCkgewogICAgICB0aHJvd1dhcm5pbmcoc3RhdGUsICJkZWZpY2llbnQgaW5kZW50YXRpb24iKTsKICAgIH0KICAgIHJldHVybiBsaW5lQnJlYWtzOwogIH0KICBmdW5jdGlvbiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUpIHsKICAgIGxldCBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjsKICAgIGxldCBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7CiAgICBpZiAoKGNoMiA9PT0gNDUgfHwgY2gyID09PSA0NikgJiYgY2gyID09PSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbiArIDEpICYmIGNoMiA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAyKSkgewogICAgICBfcG9zaXRpb24gKz0gMzsKICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pOwogICAgICBpZiAoY2gyID09PSAwIHx8IGlzV3NPckVvbChjaDIpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgY291bnQpIHsKICAgIGlmIChjb3VudCA9PT0gMSkgewogICAgICBzdGF0ZS5yZXN1bHQgKz0gIiAiOwogICAgfSBlbHNlIGlmIChjb3VudCA+IDEpIHsKICAgICAgc3RhdGUucmVzdWx0ICs9IHJlcGVhdCgiXG4iLCBjb3VudCAtIDEpOwogICAgfQogIH0KICBmdW5jdGlvbiByZWFkUGxhaW5TY2FsYXIoc3RhdGUsIG5vZGVJbmRlbnQsIHdpdGhpbkZsb3dDb2xsZWN0aW9uKSB7CiAgICBjb25zdCBraW5kID0gc3RhdGUua2luZDsKICAgIGNvbnN0IHJlc3VsdCA9IHN0YXRlLnJlc3VsdDsKICAgIGxldCBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgIGlmIChpc1dzT3JFb2woY2gyKSB8fCBpc0Zsb3dJbmRpY2F0b3IoY2gyKSB8fCBjaDIgPT09IDM1IHx8IGNoMiA9PT0gMzggfHwgY2gyID09PSA0MiB8fCBjaDIgPT09IDMzIHx8IGNoMiA9PT0gMTI0IHx8IGNoMiA9PT0gNjIgfHwgY2gyID09PSAzOSB8fCBjaDIgPT09IDM0IHx8IGNoMiA9PT0gMzcgfHwgY2gyID09PSA2NCB8fCBjaDIgPT09IDk2KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGxldCBmb2xsb3dpbmc7CiAgICBpZiAoY2gyID09PSA2MyB8fCBjaDIgPT09IDQ1KSB7CiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTsKICAgICAgaWYgKGlzV3NPckVvbChmb2xsb3dpbmcpIHx8IHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzRmxvd0luZGljYXRvcihmb2xsb3dpbmcpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBzdGF0ZS5raW5kID0gInNjYWxhciI7CiAgICBzdGF0ZS5yZXN1bHQgPSAiIjsKICAgIGxldCBjYXB0dXJlRW5kLCBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247CiAgICBsZXQgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTsKICAgIGxldCBsaW5lID0gMDsKICAgIHdoaWxlIChjaDIgIT09IDApIHsKICAgICAgaWYgKGNoMiA9PT0gNTgpIHsKICAgICAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7CiAgICAgICAgaWYgKGlzV3NPckVvbChmb2xsb3dpbmcpIHx8IHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzRmxvd0luZGljYXRvcihmb2xsb3dpbmcpKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY2gyID09PSAzNSkgewogICAgICAgIGNvbnN0IHByZWNlZGluZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gLSAxKTsKICAgICAgICBpZiAoaXNXc09yRW9sKHByZWNlZGluZykpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkgfHwgd2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNGbG93SW5kaWNhdG9yKGNoMikpIHsKICAgICAgICBicmVhazsKICAgICAgfSBlbHNlIGlmIChpc0VPTChjaDIpKSB7CiAgICAgICAgbGluZSA9IHN0YXRlLmxpbmU7CiAgICAgICAgY29uc3QgbGluZVN0YXJ0ID0gc3RhdGUubGluZVN0YXJ0OwogICAgICAgIGNvbnN0IGxpbmVJbmRlbnQgPSBzdGF0ZS5saW5lSW5kZW50OwogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCAtMSk7CiAgICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPj0gbm9kZUluZGVudCkgewogICAgICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUucG9zaXRpb24gPSBjYXB0dXJlRW5kOwogICAgICAgICAgc3RhdGUubGluZSA9IGxpbmU7CiAgICAgICAgICBzdGF0ZS5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7CiAgICAgICAgICBzdGF0ZS5saW5lSW5kZW50ID0gbGluZUluZGVudDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaGFzUGVuZGluZ0NvbnRlbnQpIHsKICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7CiAgICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc3RhdGUubGluZSAtIGxpbmUpOwogICAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjsKICAgICAgICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmICghaXNXaGl0ZVNwYWNlKGNoMikpIHsKICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb24gKyAxOwogICAgICB9CiAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICB9CiAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7CiAgICBpZiAoc3RhdGUucmVzdWx0KSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgc3RhdGUua2luZCA9IGtpbmQ7CiAgICBzdGF0ZS5yZXN1bHQgPSByZXN1bHQ7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHJlYWRTaW5nbGVRdW90ZWRTY2FsYXIoc3RhdGUsIG5vZGVJbmRlbnQpIHsKICAgIGxldCBjaDIsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZDsKICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgaWYgKGNoMiAhPT0gMzkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgc3RhdGUua2luZCA9ICJzY2FsYXIiOwogICAgc3RhdGUucmVzdWx0ID0gIiI7CiAgICBzdGF0ZS5wb3NpdGlvbisrOwogICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uOwogICAgd2hpbGUgKChjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkgIT09IDApIHsKICAgICAgaWYgKGNoMiA9PT0gMzkpIHsKICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7CiAgICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICBpZiAoY2gyID09PSAzOSkgewogICAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247CiAgICAgICAgICBzdGF0ZS5wb3NpdGlvbisrOwogICAgICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNFT0woY2gyKSkgewogICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpOwogICAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7CiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uOwogICAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkgewogICAgICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICAgICAgc3RhdGUsCiAgICAgICAgICAidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyIgogICAgICAgICk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGUucG9zaXRpb24rKzsKICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICBzdGF0ZSwKICAgICAgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiCiAgICApOwogIH0KICBmdW5jdGlvbiByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7CiAgICBsZXQgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICBpZiAoY2gyICE9PSAzNCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBzdGF0ZS5raW5kID0gInNjYWxhciI7CiAgICBzdGF0ZS5yZXN1bHQgPSAiIjsKICAgIHN0YXRlLnBvc2l0aW9uKys7CiAgICBsZXQgY2FwdHVyZUVuZCwgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uOwogICAgbGV0IHRtcDsKICAgIHdoaWxlICgoY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7CiAgICAgIGlmIChjaDIgPT09IDM0KSB7CiAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUsIGNhcHR1cmVTdGFydCwgc3RhdGUucG9zaXRpb24sIHRydWUpOwogICAgICAgIHN0YXRlLnBvc2l0aW9uKys7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKGNoMiA9PT0gOTIpIHsKICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7CiAgICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICBpZiAoaXNFT0woY2gyKSkgewogICAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpOwogICAgICAgIH0gZWxzZSBpZiAoY2gyIDwgMjU2ICYmIHNpbXBsZUVzY2FwZUNoZWNrW2NoMl0pIHsKICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSBzaW1wbGVFc2NhcGVNYXBbY2gyXTsKICAgICAgICAgIHN0YXRlLnBvc2l0aW9uKys7CiAgICAgICAgfSBlbHNlIGlmICgodG1wID0gZXNjYXBlZEhleExlbihjaDIpKSA+IDApIHsKICAgICAgICAgIGxldCBoZXhMZW5ndGggPSB0bXA7CiAgICAgICAgICBsZXQgaGV4UmVzdWx0ID0gMDsKICAgICAgICAgIGZvciAoOyBoZXhMZW5ndGggPiAwOyBoZXhMZW5ndGgtLSkgewogICAgICAgICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICAgICAgICBpZiAoKHRtcCA9IGZyb21IZXhDb2RlKGNoMikpID49IDApIHsKICAgICAgICAgICAgICBoZXhSZXN1bHQgPSAoaGV4UmVzdWx0IDw8IDQpICsgdG1wOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCAiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSBjaGFyRnJvbUNvZGVwb2ludChoZXhSZXN1bHQpOwogICAgICAgICAgc3RhdGUucG9zaXRpb24rKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsICJ1bmtub3duIGVzY2FwZSBzZXF1ZW5jZSIpOwogICAgICAgIH0KICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247CiAgICAgIH0gZWxzZSBpZiAoaXNFT0woY2gyKSkgewogICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpOwogICAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7CiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uOwogICAgICB9IGVsc2UgaWYgKHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKSkgewogICAgICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICAgICAgc3RhdGUsCiAgICAgICAgICAidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIgogICAgICAgICk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGUucG9zaXRpb24rKzsKICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICBzdGF0ZSwKICAgICAgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXIiCiAgICApOwogIH0KICBmdW5jdGlvbiByZWFkRmxvd0NvbGxlY3Rpb24oc3RhdGUsIG5vZGVJbmRlbnQpIHsKICAgIGxldCBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgIGxldCB0ZXJtaW5hdG9yOwogICAgbGV0IGlzTWFwcGluZyA9IHRydWU7CiAgICBsZXQgcmVzdWx0ID0ge307CiAgICBpZiAoY2gyID09PSA5MSkgewogICAgICB0ZXJtaW5hdG9yID0gOTM7CiAgICAgIGlzTWFwcGluZyA9IGZhbHNlOwogICAgICByZXN1bHQgPSBbXTsKICAgIH0gZWxzZSBpZiAoY2gyID09PSAxMjMpIHsKICAgICAgdGVybWluYXRvciA9IDEyNTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwgJiYgdHlwZW9mIHN0YXRlLmFuY2hvciAhPSAidW5kZWZpbmVkIiAmJiB0eXBlb2Ygc3RhdGUuYW5jaG9yTWFwICE9ICJ1bmRlZmluZWQiKSB7CiAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gcmVzdWx0OwogICAgfQogICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgIGNvbnN0IHRhZyA9IHN0YXRlLnRhZywgYW5jaG9yID0gc3RhdGUuYW5jaG9yOwogICAgbGV0IHJlYWROZXh0ID0gdHJ1ZTsKICAgIGxldCB2YWx1ZU5vZGUsIGtleU5vZGUsIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsLCBpc0V4cGxpY2l0UGFpciwgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSBmYWxzZTsKICAgIGxldCBmb2xsb3dpbmcgPSAwLCBsaW5lID0gMDsKICAgIGNvbnN0IG92ZXJyaWRhYmxlS2V5cyA9IHt9OwogICAgd2hpbGUgKGNoMiAhPT0gMCkgewogICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCBub2RlSW5kZW50KTsKICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICAgIGlmIChjaDIgPT09IHRlcm1pbmF0b3IpIHsKICAgICAgICBzdGF0ZS5wb3NpdGlvbisrOwogICAgICAgIHN0YXRlLnRhZyA9IHRhZzsKICAgICAgICBzdGF0ZS5hbmNob3IgPSBhbmNob3I7CiAgICAgICAgc3RhdGUua2luZCA9IGlzTWFwcGluZyA/ICJtYXBwaW5nIiA6ICJzZXF1ZW5jZSI7CiAgICAgICAgc3RhdGUucmVzdWx0ID0gcmVzdWx0OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmICghcmVhZE5leHQpIHsKICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgIm1pc3NlZCBjb21tYSBiZXR3ZWVuIGZsb3cgY29sbGVjdGlvbiBlbnRyaWVzIik7CiAgICAgIH0KICAgICAga2V5VGFnID0ga2V5Tm9kZSA9IHZhbHVlTm9kZSA9IG51bGw7CiAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gZmFsc2U7CiAgICAgIGlmIChjaDIgPT09IDYzKSB7CiAgICAgICAgZm9sbG93aW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpOwogICAgICAgIGlmIChpc1dzT3JFb2woZm9sbG93aW5nKSkgewogICAgICAgICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSB0cnVlOwogICAgICAgICAgc3RhdGUucG9zaXRpb24rKzsKICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpOwogICAgICAgIH0KICAgICAgfQogICAgICBsaW5lID0gc3RhdGUubGluZTsKICAgICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpOwogICAgICBrZXlUYWcgPSBzdGF0ZS50YWcgfHwgbnVsbDsKICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDsKICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICBpZiAoKGlzRXhwbGljaXRQYWlyIHx8IHN0YXRlLmxpbmUgPT09IGxpbmUpICYmIGNoMiA9PT0gNTgpIHsKICAgICAgICBpc1BhaXIgPSB0cnVlOwogICAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpOwogICAgICAgIHZhbHVlTm9kZSA9IHN0YXRlLnJlc3VsdDsKICAgICAgfQogICAgICBpZiAoaXNNYXBwaW5nKSB7CiAgICAgICAgc3RvcmVNYXBwaW5nUGFpcigKICAgICAgICAgIHN0YXRlLAogICAgICAgICAgcmVzdWx0LAogICAgICAgICAgb3ZlcnJpZGFibGVLZXlzLAogICAgICAgICAga2V5VGFnLAogICAgICAgICAga2V5Tm9kZSwKICAgICAgICAgIHZhbHVlTm9kZQogICAgICAgICk7CiAgICAgIH0gZWxzZSBpZiAoaXNQYWlyKSB7CiAgICAgICAgcmVzdWx0LnB1c2goCiAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgb3ZlcnJpZGFibGVLZXlzLAogICAgICAgICAgICBrZXlUYWcsCiAgICAgICAgICAgIGtleU5vZGUsCiAgICAgICAgICAgIHZhbHVlTm9kZQogICAgICAgICAgKQogICAgICAgICk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0LnB1c2goa2V5Tm9kZSk7CiAgICAgIH0KICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICBpZiAoY2gyID09PSA0NCkgewogICAgICAgIHJlYWROZXh0ID0gdHJ1ZTsKICAgICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlYWROZXh0ID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICBzdGF0ZSwKICAgICAgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZmxvdyBjb2xsZWN0aW9uIgogICAgKTsKICB9CiAgZnVuY3Rpb24gcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBub2RlSW5kZW50KSB7CiAgICBsZXQgY2hvbXBpbmcgPSBDSE9NUElOR19DTElQLCBkaWRSZWFkQ29udGVudCA9IGZhbHNlLCBkZXRlY3RlZEluZGVudCA9IGZhbHNlLCB0ZXh0SW5kZW50ID0gbm9kZUluZGVudCwgZW1wdHlMaW5lcyA9IDAsIGF0TW9yZUluZGVudGVkID0gZmFsc2U7CiAgICBsZXQgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICBsZXQgZm9sZGluZyA9IGZhbHNlOwogICAgaWYgKGNoMiA9PT0gMTI0KSB7CiAgICAgIGZvbGRpbmcgPSBmYWxzZTsKICAgIH0gZWxzZSBpZiAoY2gyID09PSA2MikgewogICAgICBmb2xkaW5nID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHN0YXRlLmtpbmQgPSAic2NhbGFyIjsKICAgIHN0YXRlLnJlc3VsdCA9ICIiOwogICAgbGV0IHRtcCA9IDA7CiAgICB3aGlsZSAoY2gyICE9PSAwKSB7CiAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgIGlmIChjaDIgPT09IDQzIHx8IGNoMiA9PT0gNDUpIHsKICAgICAgICBpZiAoQ0hPTVBJTkdfQ0xJUCA9PT0gY2hvbXBpbmcpIHsKICAgICAgICAgIGNob21waW5nID0gY2gyID09PSA0MyA/IENIT01QSU5HX0tFRVAgOiBDSE9NUElOR19TVFJJUDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsICJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXIiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoKHRtcCA9IGZyb21EZWNpbWFsQ29kZShjaDIpKSA+PSAwKSB7CiAgICAgICAgaWYgKHRtcCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoCiAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICAiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIKICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIGlmICghZGV0ZWN0ZWRJbmRlbnQpIHsKICAgICAgICAgIHRleHRJbmRlbnQgPSBub2RlSW5kZW50ICsgdG1wIC0gMTsKICAgICAgICAgIGRldGVjdGVkSW5kZW50ID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsICJyZXBlYXQgb2YgYW4gaW5kZW50YXRpb24gd2lkdGggaWRlbnRpZmllciIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKGlzV2hpdGVTcGFjZShjaDIpKSB7CiAgICAgIGRvIHsKICAgICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICB9IHdoaWxlIChpc1doaXRlU3BhY2UoY2gyKSk7CiAgICAgIGlmIChjaDIgPT09IDM1KSB7CiAgICAgICAgZG8gewogICAgICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICB9IHdoaWxlICghaXNFT0woY2gyKSAmJiBjaDIgIT09IDApOwogICAgICB9CiAgICB9CiAgICB3aGlsZSAoY2gyICE9PSAwKSB7CiAgICAgIHJlYWRMaW5lQnJlYWsoc3RhdGUpOwogICAgICBzdGF0ZS5saW5lSW5kZW50ID0gMDsKICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICAgIHdoaWxlICgoIWRldGVjdGVkSW5kZW50IHx8IHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSAmJiBjaDIgPT09IDMyKSB7CiAgICAgICAgc3RhdGUubGluZUluZGVudCsrOwogICAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgIH0KICAgICAgaWYgKCFkZXRlY3RlZEluZGVudCAmJiBzdGF0ZS5saW5lSW5kZW50ID4gdGV4dEluZGVudCkgewogICAgICAgIHRleHRJbmRlbnQgPSBzdGF0ZS5saW5lSW5kZW50OwogICAgICB9CiAgICAgIGlmIChpc0VPTChjaDIpKSB7CiAgICAgICAgZW1wdHlMaW5lcysrOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgdGV4dEluZGVudCkgewogICAgICAgIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfS0VFUCkgewogICAgICAgICAgc3RhdGUucmVzdWx0ICs9IHJlcGVhdCgKICAgICAgICAgICAgIlxuIiwKICAgICAgICAgICAgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMKICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfQ0xJUCkgewogICAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7CiAgICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSAiXG4iOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoZm9sZGluZykgewogICAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gyKSkgewogICAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlOwogICAgICAgICAgc3RhdGUucmVzdWx0ICs9IHJlcGVhdCgKICAgICAgICAgICAgIlxuIiwKICAgICAgICAgICAgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMKICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIGlmIChhdE1vcmVJbmRlbnRlZCkgewogICAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZTsKICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSByZXBlYXQoIlxuIiwgZW1wdHlMaW5lcyArIDEpOwogICAgICAgIH0gZWxzZSBpZiAoZW1wdHlMaW5lcyA9PT0gMCkgewogICAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7CiAgICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSAiICI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0YXRlLnJlc3VsdCArPSByZXBlYXQoIlxuIiwgZW1wdHlMaW5lcyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHN0YXRlLnJlc3VsdCArPSByZXBlYXQoCiAgICAgICAgICAiXG4iLAogICAgICAgICAgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMKICAgICAgICApOwogICAgICB9CiAgICAgIGRpZFJlYWRDb250ZW50ID0gdHJ1ZTsKICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlOwogICAgICBlbXB0eUxpbmVzID0gMDsKICAgICAgY29uc3QgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247CiAgICAgIHdoaWxlICghaXNFT0woY2gyKSAmJiBjaDIgIT09IDApIHsKICAgICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICB9CiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIG5vZGVJbmRlbnQpIHsKICAgIGxldCBsaW5lLCBmb2xsb3dpbmcsIGRldGVjdGVkID0gZmFsc2UsIGNoMjsKICAgIGNvbnN0IHRhZyA9IHN0YXRlLnRhZywgYW5jaG9yID0gc3RhdGUuYW5jaG9yLCByZXN1bHQgPSBbXTsKICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwgJiYgdHlwZW9mIHN0YXRlLmFuY2hvciAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIHN0YXRlLmFuY2hvck1hcCAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSByZXN1bHQ7CiAgICB9CiAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgIHdoaWxlIChjaDIgIT09IDApIHsKICAgICAgaWYgKGNoMiAhPT0gNDUpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7CiAgICAgIGlmICghaXNXc09yRW9sKGZvbGxvd2luZykpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBkZXRlY3RlZCA9IHRydWU7CiAgICAgIHN0YXRlLnBvc2l0aW9uKys7CiAgICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSkpIHsKICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA8PSBub2RlSW5kZW50KSB7CiAgICAgICAgICByZXN1bHQucHVzaChudWxsKTsKICAgICAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxpbmUgPSBzdGF0ZS5saW5lOwogICAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9CTE9DS19JTiwgZmFsc2UsIHRydWUpOwogICAgICByZXN1bHQucHVzaChzdGF0ZS5yZXN1bHQpOwogICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7CiAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICBpZiAoKHN0YXRlLmxpbmUgPT09IGxpbmUgfHwgc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQpICYmIGNoMiAhPT0gMCkgewogICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCAiYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnkiKTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoZGV0ZWN0ZWQpIHsKICAgICAgc3RhdGUudGFnID0gdGFnOwogICAgICBzdGF0ZS5hbmNob3IgPSBhbmNob3I7CiAgICAgIHN0YXRlLmtpbmQgPSAic2VxdWVuY2UiOwogICAgICBzdGF0ZS5yZXN1bHQgPSByZXN1bHQ7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICBmdW5jdGlvbiByZWFkQmxvY2tNYXBwaW5nKHN0YXRlLCBub2RlSW5kZW50LCBmbG93SW5kZW50KSB7CiAgICBjb25zdCB0YWcgPSBzdGF0ZS50YWcsIGFuY2hvciA9IHN0YXRlLmFuY2hvciwgcmVzdWx0ID0ge30sIG92ZXJyaWRhYmxlS2V5cyA9IHt9OwogICAgbGV0IGZvbGxvd2luZywgYWxsb3dDb21wYWN0ID0gZmFsc2UsIGxpbmUsIHBvcywga2V5VGFnID0gbnVsbCwga2V5Tm9kZSA9IG51bGwsIHZhbHVlTm9kZSA9IG51bGwsIGF0RXhwbGljaXRLZXkgPSBmYWxzZSwgZGV0ZWN0ZWQgPSBmYWxzZSwgY2gyOwogICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCAmJiB0eXBlb2Ygc3RhdGUuYW5jaG9yICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2Ygc3RhdGUuYW5jaG9yTWFwICE9PSAidW5kZWZpbmVkIikgewogICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHJlc3VsdDsKICAgIH0KICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgd2hpbGUgKGNoMiAhPT0gMCkgewogICAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7CiAgICAgIGxpbmUgPSBzdGF0ZS5saW5lOwogICAgICBwb3MgPSBzdGF0ZS5wb3NpdGlvbjsKICAgICAgaWYgKChjaDIgPT09IDYzIHx8IGNoMiA9PT0gNTgpICYmIGlzV3NPckVvbChmb2xsb3dpbmcpKSB7CiAgICAgICAgaWYgKGNoMiA9PT0gNjMpIHsKICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoCiAgICAgICAgICAgICAgc3RhdGUsCiAgICAgICAgICAgICAgcmVzdWx0LAogICAgICAgICAgICAgIG92ZXJyaWRhYmxlS2V5cywKICAgICAgICAgICAgICBrZXlUYWcsCiAgICAgICAgICAgICAga2V5Tm9kZSwKICAgICAgICAgICAgICBudWxsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlOwogICAgICAgICAgYXRFeHBsaWNpdEtleSA9IHRydWU7CiAgICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlOwogICAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoCiAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICAiaW5jb21wbGV0ZSBleHBsaWNpdCBtYXBwaW5nIHBhaXI7IGEga2V5IG5vZGUgaXMgbWlzc2VkOyBvciBmb2xsb3dlZCBieSBhIG5vbi10YWJ1bGF0ZWQgZW1wdHkgbGluZSIKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHN0YXRlLnBvc2l0aW9uICs9IDE7CiAgICAgICAgY2gyID0gZm9sbG93aW5nOwogICAgICB9IGVsc2UgaWYgKGNvbXBvc2VOb2RlKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfT1VULCBmYWxzZSwgdHJ1ZSkpIHsKICAgICAgICBpZiAoc3RhdGUubGluZSA9PT0gbGluZSkgewogICAgICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgICB3aGlsZSAoaXNXaGl0ZVNwYWNlKGNoMikpIHsKICAgICAgICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjaDIgPT09IDU4KSB7CiAgICAgICAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgICAgICAgIGlmICghaXNXc09yRW9sKGNoMikpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigKICAgICAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICAgICAgImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIKICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcigKICAgICAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICAgICAgcmVzdWx0LAogICAgICAgICAgICAgICAgb3ZlcnJpZGFibGVLZXlzLAogICAgICAgICAgICAgICAga2V5VGFnLAogICAgICAgICAgICAgICAga2V5Tm9kZSwKICAgICAgICAgICAgICAgIG51bGwKICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRldGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlOwogICAgICAgICAgICBhbGxvd0NvbXBhY3QgPSBmYWxzZTsKICAgICAgICAgICAga2V5VGFnID0gc3RhdGUudGFnOwogICAgICAgICAgICBrZXlOb2RlID0gc3RhdGUucmVzdWx0OwogICAgICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkgewogICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigKICAgICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgICAiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiCiAgICAgICAgICAgICk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZS50YWcgPSB0YWc7CiAgICAgICAgICAgIHN0YXRlLmFuY2hvciA9IGFuY2hvcjsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChkZXRlY3RlZCkgewogICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoCiAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICAiY2FuIG5vdCByZWFkIGEgYmxvY2sgbWFwcGluZyBlbnRyeTsgYSBtdWx0aWxpbmUga2V5IG1heSBub3QgYmUgYW4gaW1wbGljaXQga2V5IgogICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUudGFnID0gdGFnOwogICAgICAgICAgc3RhdGUuYW5jaG9yID0gYW5jaG9yOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5saW5lID09PSBsaW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSB7CiAgICAgICAgaWYgKGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX09VVCwgdHJ1ZSwgYWxsb3dDb21wYWN0KSkgewogICAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHsKICAgICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhbHVlTm9kZSA9IHN0YXRlLnJlc3VsdDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgcmVzdWx0LAogICAgICAgICAgICBvdmVycmlkYWJsZUtleXMsCiAgICAgICAgICAgIGtleVRhZywKICAgICAgICAgICAga2V5Tm9kZSwKICAgICAgICAgICAgdmFsdWVOb2RlLAogICAgICAgICAgICBsaW5lLAogICAgICAgICAgICBwb3MKICAgICAgICAgICk7CiAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpOwogICAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gbm9kZUluZGVudCAmJiBjaDIgIT09IDApIHsKICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnkiKTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICBzdG9yZU1hcHBpbmdQYWlyKAogICAgICAgIHN0YXRlLAogICAgICAgIHJlc3VsdCwKICAgICAgICBvdmVycmlkYWJsZUtleXMsCiAgICAgICAga2V5VGFnLAogICAgICAgIGtleU5vZGUsCiAgICAgICAgbnVsbAogICAgICApOwogICAgfQogICAgaWYgKGRldGVjdGVkKSB7CiAgICAgIHN0YXRlLnRhZyA9IHRhZzsKICAgICAgc3RhdGUuYW5jaG9yID0gYW5jaG9yOwogICAgICBzdGF0ZS5raW5kID0gIm1hcHBpbmciOwogICAgICBzdGF0ZS5yZXN1bHQgPSByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gZGV0ZWN0ZWQ7CiAgfQogIGZ1bmN0aW9uIHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkgewogICAgbGV0IHBvc2l0aW9uLCBpc1ZlcmJhdGltID0gZmFsc2UsIGlzTmFtZWQgPSBmYWxzZSwgdGFnSGFuZGxlID0gIiIsIHRhZ05hbWUsIGNoMjsKICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgaWYgKGNoMiAhPT0gMzMpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChzdGF0ZS50YWcgIT09IG51bGwpIHsKICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsICJkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eSIpOwogICAgfQogICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgIGlmIChjaDIgPT09IDYwKSB7CiAgICAgIGlzVmVyYmF0aW0gPSB0cnVlOwogICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgfSBlbHNlIGlmIChjaDIgPT09IDMzKSB7CiAgICAgIGlzTmFtZWQgPSB0cnVlOwogICAgICB0YWdIYW5kbGUgPSAiISEiOwogICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgdGFnSGFuZGxlID0gIiEiOwogICAgfQogICAgcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjsKICAgIGlmIChpc1ZlcmJhdGltKSB7CiAgICAgIGRvIHsKICAgICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICB9IHdoaWxlIChjaDIgIT09IDAgJiYgY2gyICE9PSA2Mik7CiAgICAgIGlmIChzdGF0ZS5wb3NpdGlvbiA8IHN0YXRlLmxlbmd0aCkgewogICAgICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShwb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pOwogICAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoCiAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZyIKICAgICAgICApOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB3aGlsZSAoY2gyICE9PSAwICYmICFpc1dzT3JFb2woY2gyKSkgewogICAgICAgIGlmIChjaDIgPT09IDMzKSB7CiAgICAgICAgICBpZiAoIWlzTmFtZWQpIHsKICAgICAgICAgICAgdGFnSGFuZGxlID0gc3RhdGUuaW5wdXQuc2xpY2UocG9zaXRpb24gLSAxLCBzdGF0ZS5wb3NpdGlvbiArIDEpOwogICAgICAgICAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KHRhZ0hhbmRsZSkpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigKICAgICAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICAgICAgIm5hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzIgogICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaXNOYW1lZCA9IHRydWU7CiAgICAgICAgICAgIHBvc2l0aW9uID0gc3RhdGUucG9zaXRpb24gKyAxOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoCiAgICAgICAgICAgICAgc3RhdGUsCiAgICAgICAgICAgICAgInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZXhjbGFtYXRpb24gbWFya3MiCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgIH0KICAgICAgdGFnTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKHBvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7CiAgICAgIGlmIChQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUy50ZXN0KHRhZ05hbWUpKSB7CiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoCiAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMiCiAgICAgICAgKTsKICAgICAgfQogICAgfQogICAgaWYgKHRhZ05hbWUgJiYgIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHRhZ05hbWUpKSB7CiAgICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICAgIHN0YXRlLAogICAgICAgIGB0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICR7dGFnTmFtZX1gCiAgICAgICk7CiAgICB9CiAgICBpZiAoaXNWZXJiYXRpbSkgewogICAgICBzdGF0ZS50YWcgPSB0YWdOYW1lOwogICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhdGUudGFnTWFwICE9PSAidW5kZWZpbmVkIiAmJiBoYXNPd24zKHN0YXRlLnRhZ01hcCwgdGFnSGFuZGxlKSkgewogICAgICBzdGF0ZS50YWcgPSBzdGF0ZS50YWdNYXBbdGFnSGFuZGxlXSArIHRhZ05hbWU7CiAgICB9IGVsc2UgaWYgKHRhZ0hhbmRsZSA9PT0gIiEiKSB7CiAgICAgIHN0YXRlLnRhZyA9IGAhJHt0YWdOYW1lfWA7CiAgICB9IGVsc2UgaWYgKHRhZ0hhbmRsZSA9PT0gIiEhIikgewogICAgICBzdGF0ZS50YWcgPSBgdGFnOnlhbWwub3JnLDIwMDI6JHt0YWdOYW1lfWA7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgYHVuZGVjbGFyZWQgdGFnIGhhbmRsZSAiJHt0YWdIYW5kbGV9ImApOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIGZ1bmN0aW9uIHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZSkgewogICAgbGV0IGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgaWYgKGNoMiAhPT0gMzgpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHsKICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsICJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHkiKTsKICAgIH0KICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICBjb25zdCBwb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uOwogICAgd2hpbGUgKGNoMiAhPT0gMCAmJiAhaXNXc09yRW9sKGNoMikgJiYgIWlzRmxvd0luZGljYXRvcihjaDIpKSB7CiAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICB9CiAgICBpZiAoc3RhdGUucG9zaXRpb24gPT09IHBvc2l0aW9uKSB7CiAgICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICAgIHN0YXRlLAogICAgICAgICJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIgogICAgICApOwogICAgfQogICAgc3RhdGUuYW5jaG9yID0gc3RhdGUuaW5wdXQuc2xpY2UocG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTsKICAgIHJldHVybiB0cnVlOwogIH0KICBmdW5jdGlvbiByZWFkQWxpYXMoc3RhdGUpIHsKICAgIGxldCBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTsKICAgIGlmIChjaDIgIT09IDQyKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgY29uc3QgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247CiAgICB3aGlsZSAoY2gyICE9PSAwICYmICFpc1dzT3JFb2woY2gyKSAmJiAhaXNGbG93SW5kaWNhdG9yKGNoMikpIHsKICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgIH0KICAgIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gX3Bvc2l0aW9uKSB7CiAgICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICAgIHN0YXRlLAogICAgICAgICJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIiCiAgICAgICk7CiAgICB9CiAgICBjb25zdCBhbGlhcyA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pOwogICAgaWYgKHR5cGVvZiBzdGF0ZS5hbmNob3JNYXAgIT09ICJ1bmRlZmluZWQiICYmICFoYXNPd24zKHN0YXRlLmFuY2hvck1hcCwgYWxpYXMpKSB7CiAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBgdW5pZGVudGlmaWVkIGFsaWFzICIke2FsaWFzfSJgKTsKICAgIH0KICAgIGlmICh0eXBlb2Ygc3RhdGUuYW5jaG9yTWFwICE9PSAidW5kZWZpbmVkIikgewogICAgICBzdGF0ZS5yZXN1bHQgPSBzdGF0ZS5hbmNob3JNYXBbYWxpYXNdOwogICAgfQogICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGZ1bmN0aW9uIGNvbXBvc2VOb2RlKHN0YXRlLCBwYXJlbnRJbmRlbnQsIG5vZGVDb250ZXh0LCBhbGxvd1RvU2VlaywgYWxsb3dDb21wYWN0KSB7CiAgICBsZXQgYWxsb3dCbG9ja1NjYWxhcnMsIGFsbG93QmxvY2tDb2xsZWN0aW9ucywgaW5kZW50U3RhdHVzID0gMSwgYXROZXdMaW5lID0gZmFsc2UsIGhhc0NvbnRlbnQgPSBmYWxzZSwgdHlwZSwgZmxvd0luZGVudCwgYmxvY2tJbmRlbnQ7CiAgICBpZiAoc3RhdGUubGlzdGVuZXIgJiYgc3RhdGUubGlzdGVuZXIgIT09IG51bGwpIHsKICAgICAgc3RhdGUubGlzdGVuZXIoIm9wZW4iLCBzdGF0ZSk7CiAgICB9CiAgICBzdGF0ZS50YWcgPSBudWxsOwogICAgc3RhdGUuYW5jaG9yID0gbnVsbDsKICAgIHN0YXRlLmtpbmQgPSBudWxsOwogICAgc3RhdGUucmVzdWx0ID0gbnVsbDsKICAgIGNvbnN0IGFsbG93QmxvY2tTdHlsZXMgPSBhbGxvd0Jsb2NrU2NhbGFycyA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCB8fCBDT05URVhUX0JMT0NLX0lOID09PSBub2RlQ29udGV4dDsKICAgIGlmIChhbGxvd1RvU2VlaykgewogICAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7CiAgICAgICAgYXROZXdMaW5lID0gdHJ1ZTsKICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkgewogICAgICAgICAgaW5kZW50U3RhdHVzID0gMTsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPT09IHBhcmVudEluZGVudCkgewogICAgICAgICAgaW5kZW50U3RhdHVzID0gMDsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgIGluZGVudFN0YXR1cyA9IC0xOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkgewogICAgICB3aGlsZSAocmVhZFRhZ1Byb3BlcnR5KHN0YXRlKSB8fCByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGUpKSB7CiAgICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkgewogICAgICAgICAgYXROZXdMaW5lID0gdHJ1ZTsKICAgICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGFsbG93QmxvY2tTdHlsZXM7CiAgICAgICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkgewogICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAxOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMDsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IHBhcmVudEluZGVudCkgewogICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zKSB7CiAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGF0TmV3TGluZSB8fCBhbGxvd0NvbXBhY3Q7CiAgICB9CiAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkgewogICAgICBjb25zdCBjb25kID0gQ09OVEVYVF9GTE9XX0lOID09PSBub2RlQ29udGV4dCB8fCBDT05URVhUX0ZMT1dfT1VUID09PSBub2RlQ29udGV4dDsKICAgICAgZmxvd0luZGVudCA9IGNvbmQgPyBwYXJlbnRJbmRlbnQgOiBwYXJlbnRJbmRlbnQgKyAxOwogICAgICBibG9ja0luZGVudCA9IHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0OwogICAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7CiAgICAgICAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiAocmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGUsIGJsb2NrSW5kZW50KSB8fCByZWFkQmxvY2tNYXBwaW5nKHN0YXRlLCBibG9ja0luZGVudCwgZmxvd0luZGVudCkpIHx8IHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZSwgZmxvd0luZGVudCkpIHsKICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoYWxsb3dCbG9ja1NjYWxhcnMgJiYgcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSB8fCByZWFkU2luZ2xlUXVvdGVkU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSB8fCByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSkgewogICAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSBpZiAocmVhZEFsaWFzKHN0YXRlKSkgewogICAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCB8fCBzdGF0ZS5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigKICAgICAgICAgICAgICAgIHN0YXRlLAogICAgICAgICAgICAgICAgImFsaWFzIG5vZGUgc2hvdWxkIG5vdCBoYXZlIEFueSBwcm9wZXJ0aWVzIgogICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAocmVhZFBsYWluU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0KSkgewogICAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHN0YXRlLnRhZyA9PT0gbnVsbCkgewogICAgICAgICAgICAgIHN0YXRlLnRhZyA9ICI/IjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0YXRlLmFuY2hvciAhPT0gbnVsbCAmJiB0eXBlb2Ygc3RhdGUuYW5jaG9yTWFwICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaW5kZW50U3RhdHVzID09PSAwKSB7CiAgICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpOwogICAgICB9CiAgICB9CiAgICBpZiAoc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gIiEiKSB7CiAgICAgIGlmIChzdGF0ZS50YWcgPT09ICI/IikgewogICAgICAgIGZvciAobGV0IHR5cGVJbmRleCA9IDAsIHR5cGVRdWFudGl0eSA9IHN0YXRlLmltcGxpY2l0VHlwZXMubGVuZ3RoOyB0eXBlSW5kZXggPCB0eXBlUXVhbnRpdHk7IHR5cGVJbmRleCsrKSB7CiAgICAgICAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1t0eXBlSW5kZXhdOwogICAgICAgICAgaWYgKHR5cGUucmVzb2x2ZShzdGF0ZS5yZXN1bHQpKSB7CiAgICAgICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUuY29uc3RydWN0KHN0YXRlLnJlc3VsdCk7CiAgICAgICAgICAgIHN0YXRlLnRhZyA9IHR5cGUudGFnOwogICAgICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsICYmIHR5cGVvZiBzdGF0ZS5hbmNob3JNYXAgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGhhc093bjMoc3RhdGUudHlwZU1hcFtzdGF0ZS5raW5kIHx8ICJmYWxsYmFjayJdLCBzdGF0ZS50YWcpKSB7CiAgICAgICAgdHlwZSA9IHN0YXRlLnR5cGVNYXBbc3RhdGUua2luZCB8fCAiZmFsbGJhY2siXVtzdGF0ZS50YWddOwogICAgICAgIGlmIChzdGF0ZS5yZXN1bHQgIT09IG51bGwgJiYgdHlwZS5raW5kICE9PSBzdGF0ZS5raW5kKSB7CiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigKICAgICAgICAgICAgc3RhdGUsCiAgICAgICAgICAgIGB1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPCR7c3RhdGUudGFnfT4gdGFnOyBpdCBzaG91bGQgYmUgIiR7dHlwZS5raW5kfSIsIG5vdCAiJHtzdGF0ZS5raW5kfSJgCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoIXR5cGUucmVzb2x2ZShzdGF0ZS5yZXN1bHQpKSB7CiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigKICAgICAgICAgICAgc3RhdGUsCiAgICAgICAgICAgIGBjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCR7c3RhdGUudGFnfT4gZXhwbGljaXQgdGFnYAogICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUucmVzdWx0ID0gdHlwZS5jb25zdHJ1Y3Qoc3RhdGUucmVzdWx0KTsKICAgICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwgJiYgdHlwZW9mIHN0YXRlLmFuY2hvck1hcCAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSBzdGF0ZS5yZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBgdW5rbm93biB0YWcgITwke3N0YXRlLnRhZ30+YCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChzdGF0ZS5saXN0ZW5lciAmJiBzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkgewogICAgICBzdGF0ZS5saXN0ZW5lcigiY2xvc2UiLCBzdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gc3RhdGUudGFnICE9PSBudWxsIHx8IHN0YXRlLmFuY2hvciAhPT0gbnVsbCB8fCBoYXNDb250ZW50OwogIH0KICBmdW5jdGlvbiByZWFkRG9jdW1lbnQoc3RhdGUpIHsKICAgIGNvbnN0IGRvY3VtZW50U3RhcnQgPSBzdGF0ZS5wb3NpdGlvbjsKICAgIGxldCBwb3NpdGlvbiwgZGlyZWN0aXZlTmFtZSwgZGlyZWN0aXZlQXJncywgaGFzRGlyZWN0aXZlcyA9IGZhbHNlLCBjaDI7CiAgICBzdGF0ZS52ZXJzaW9uID0gbnVsbDsKICAgIHN0YXRlLmNoZWNrTGluZUJyZWFrcyA9IHN0YXRlLmxlZ2FjeTsKICAgIHN0YXRlLnRhZ01hcCA9IHt9OwogICAgc3RhdGUuYW5jaG9yTWFwID0ge307CiAgICB3aGlsZSAoKGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkgewogICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7CiAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pOwogICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IDAgfHwgY2gyICE9PSAzNykgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlOwogICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICBwb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uOwogICAgICB3aGlsZSAoY2gyICE9PSAwICYmICFpc1dzT3JFb2woY2gyKSkgewogICAgICAgIGNoMiA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZGlyZWN0aXZlTmFtZSA9IHN0YXRlLmlucHV0LnNsaWNlKHBvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7CiAgICAgIGRpcmVjdGl2ZUFyZ3MgPSBbXTsKICAgICAgaWYgKGRpcmVjdGl2ZU5hbWUubGVuZ3RoIDwgMSkgewogICAgICAgIHJldHVybiB0aHJvd0Vycm9yKAogICAgICAgICAgc3RhdGUsCiAgICAgICAgICAiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoIgogICAgICAgICk7CiAgICAgIH0KICAgICAgd2hpbGUgKGNoMiAhPT0gMCkgewogICAgICAgIHdoaWxlIChpc1doaXRlU3BhY2UoY2gyKSkgewogICAgICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNoMiA9PT0gMzUpIHsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgY2gyID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTsKICAgICAgICAgIH0gd2hpbGUgKGNoMiAhPT0gMCAmJiAhaXNFT0woY2gyKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGlzRU9MKGNoMikpCiAgICAgICAgICBicmVhazsKICAgICAgICBwb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uOwogICAgICAgIHdoaWxlIChjaDIgIT09IDAgJiYgIWlzV3NPckVvbChjaDIpKSB7CiAgICAgICAgICBjaDIgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBkaXJlY3RpdmVBcmdzLnB1c2goc3RhdGUuaW5wdXQuc2xpY2UocG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKSk7CiAgICAgIH0KICAgICAgaWYgKGNoMiAhPT0gMCkKICAgICAgICByZWFkTGluZUJyZWFrKHN0YXRlKTsKICAgICAgaWYgKGhhc093bjMoZGlyZWN0aXZlSGFuZGxlcnMsIGRpcmVjdGl2ZU5hbWUpKSB7CiAgICAgICAgZGlyZWN0aXZlSGFuZGxlcnNbZGlyZWN0aXZlTmFtZV0oc3RhdGUsIGRpcmVjdGl2ZU5hbWUsIC4uLmRpcmVjdGl2ZUFyZ3MpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93V2FybmluZyhzdGF0ZSwgYHVua25vd24gZG9jdW1lbnQgZGlyZWN0aXZlICIke2RpcmVjdGl2ZU5hbWV9ImApOwogICAgICB9CiAgICB9CiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7CiAgICBpZiAoc3RhdGUubGluZUluZGVudCA9PT0gMCAmJiBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSA9PT0gNDUgJiYgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDEpID09PSA0NSAmJiBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMikgPT09IDQ1KSB7CiAgICAgIHN0YXRlLnBvc2l0aW9uICs9IDM7CiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTsKICAgIH0gZWxzZSBpZiAoaGFzRGlyZWN0aXZlcykgewogICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWQiKTsKICAgIH0KICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBzdGF0ZS5saW5lSW5kZW50IC0gMSwgQ09OVEVYVF9CTE9DS19PVVQsIGZhbHNlLCB0cnVlKTsKICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTsKICAgIGlmIChzdGF0ZS5jaGVja0xpbmVCcmVha3MgJiYgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MudGVzdCgKICAgICAgc3RhdGUuaW5wdXQuc2xpY2UoZG9jdW1lbnRTdGFydCwgc3RhdGUucG9zaXRpb24pCiAgICApKSB7CiAgICAgIHRocm93V2FybmluZyhzdGF0ZSwgIm5vbi1BU0NJSSBsaW5lIGJyZWFrcyBhcmUgaW50ZXJwcmV0ZWQgYXMgY29udGVudCIpOwogICAgfQogICAgc3RhdGUuZG9jdW1lbnRzLnB1c2goc3RhdGUucmVzdWx0KTsKICAgIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHsKICAgICAgaWYgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSA0NikgewogICAgICAgIHN0YXRlLnBvc2l0aW9uICs9IDM7CiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzdGF0ZS5wb3NpdGlvbiA8IHN0YXRlLmxlbmd0aCAtIDEpIHsKICAgICAgcmV0dXJuIHRocm93RXJyb3IoCiAgICAgICAgc3RhdGUsCiAgICAgICAgImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkIgogICAgICApOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQogIH0KICBmdW5jdGlvbiBsb2FkRG9jdW1lbnRzKGlucHV0LCBvcHRpb25zKSB7CiAgICBpbnB1dCA9IFN0cmluZyhpbnB1dCk7CiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgIGlmIChpbnB1dC5sZW5ndGggIT09IDApIHsKICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT09IDEwICYmIGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT09IDEzKSB7CiAgICAgICAgaW5wdXQgKz0gIlxuIjsKICAgICAgfQogICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdCgwKSA9PT0gNjUyNzkpIHsKICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpOwogICAgICB9CiAgICB9CiAgICBjb25zdCBzdGF0ZSA9IG5ldyBMb2FkZXJTdGF0ZShpbnB1dCwgb3B0aW9ucyk7CiAgICBzdGF0ZS5pbnB1dCArPSAiXDAiOwogICAgd2hpbGUgKHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pID09PSAzMikgewogICAgICBzdGF0ZS5saW5lSW5kZW50ICs9IDE7CiAgICAgIHN0YXRlLnBvc2l0aW9uICs9IDE7CiAgICB9CiAgICB3aGlsZSAoc3RhdGUucG9zaXRpb24gPCBzdGF0ZS5sZW5ndGggLSAxKSB7CiAgICAgIHJlYWREb2N1bWVudChzdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gc3RhdGUuZG9jdW1lbnRzOwogIH0KICBmdW5jdGlvbiBpc0NiRnVuY3Rpb24oZm40KSB7CiAgICByZXR1cm4gdHlwZW9mIGZuNCA9PT0gImZ1bmN0aW9uIjsKICB9CiAgZnVuY3Rpb24gbG9hZEFsbChpbnB1dCwgaXRlcmF0b3JPck9wdGlvbiwgb3B0aW9ucykgewogICAgaWYgKCFpc0NiRnVuY3Rpb24oaXRlcmF0b3JPck9wdGlvbikpIHsKICAgICAgcmV0dXJuIGxvYWREb2N1bWVudHMoaW5wdXQsIGl0ZXJhdG9yT3JPcHRpb24pOwogICAgfQogICAgY29uc3QgZG9jdW1lbnRzID0gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucyk7CiAgICBjb25zdCBpdGVyYXRvciA9IGl0ZXJhdG9yT3JPcHRpb247CiAgICBmb3IgKGxldCBpbmRleCA9IDAsIGxlbmd0aCA9IGRvY3VtZW50cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIGl0ZXJhdG9yKGRvY3VtZW50c1tpbmRleF0pOwogICAgfQogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gbG9hZChpbnB1dCwgb3B0aW9ucykgewogICAgY29uc3QgZG9jdW1lbnRzID0gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucyk7CiAgICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMSkgewogICAgICByZXR1cm4gZG9jdW1lbnRzWzBdOwogICAgfQogICAgdGhyb3cgbmV3IFlBTUxFcnJvcigKICAgICAgImV4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlIgogICAgKTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvcGFyc2UudHMKICBmdW5jdGlvbiBwYXJzZShjb250ZW50LCBvcHRpb25zKSB7CiAgICByZXR1cm4gbG9hZChjb250ZW50LCBvcHRpb25zKTsKICB9CiAgZnVuY3Rpb24gcGFyc2VBbGwoY29udGVudCwgaXRlcmF0b3IsIG9wdGlvbnMpIHsKICAgIHJldHVybiBsb2FkQWxsKGNvbnRlbnQsIGl0ZXJhdG9yLCBvcHRpb25zKTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvZHVtcGVyL2R1bXBlcl9zdGF0ZS50cwogIHZhciB7IGhhc093bjogaGFzT3duNCB9ID0gT2JqZWN0OwogIGZ1bmN0aW9uIGNvbXBpbGVTdHlsZU1hcChzY2hlbWEsIG1hcDIpIHsKICAgIGlmICh0eXBlb2YgbWFwMiA9PT0gInVuZGVmaW5lZCIgfHwgbWFwMiA9PT0gbnVsbCkKICAgICAgcmV0dXJuIHt9OwogICAgbGV0IHR5cGU7CiAgICBjb25zdCByZXN1bHQgPSB7fTsKICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhtYXAyKTsKICAgIGxldCB0YWcsIHN0eWxlOwogICAgZm9yIChsZXQgaW5kZXggPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHsKICAgICAgdGFnID0ga2V5c1tpbmRleF07CiAgICAgIHN0eWxlID0gU3RyaW5nKG1hcDJbdGFnXSk7CiAgICAgIGlmICh0YWcuc2xpY2UoMCwgMikgPT09ICIhISIpIHsKICAgICAgICB0YWcgPSBgdGFnOnlhbWwub3JnLDIwMDI6JHt0YWcuc2xpY2UoMil9YDsKICAgICAgfQogICAgICB0eXBlID0gc2NoZW1hLmNvbXBpbGVkVHlwZU1hcC5mYWxsYmFja1t0YWddOwogICAgICBpZiAodHlwZSAmJiB0eXBlb2YgdHlwZS5zdHlsZUFsaWFzZXMgIT09ICJ1bmRlZmluZWQiICYmIGhhc093bjQodHlwZS5zdHlsZUFsaWFzZXMsIHN0eWxlKSkgewogICAgICAgIHN0eWxlID0gdHlwZS5zdHlsZUFsaWFzZXNbc3R5bGVdOwogICAgICB9CiAgICAgIHJlc3VsdFt0YWddID0gc3R5bGU7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICB2YXIgRHVtcGVyU3RhdGUgPSBjbGFzcyBleHRlbmRzIFN0YXRlIHsKICAgIGNvbnN0cnVjdG9yKHsKICAgICAgc2NoZW1hLAogICAgICBpbmRlbnQgPSAyLAogICAgICBub0FycmF5SW5kZW50ID0gZmFsc2UsCiAgICAgIHNraXBJbnZhbGlkID0gZmFsc2UsCiAgICAgIGZsb3dMZXZlbCA9IC0xLAogICAgICBzdHlsZXMgPSBudWxsLAogICAgICBzb3J0S2V5cyA9IGZhbHNlLAogICAgICBsaW5lV2lkdGggPSA4MCwKICAgICAgbm9SZWZzID0gZmFsc2UsCiAgICAgIG5vQ29tcGF0TW9kZSA9IGZhbHNlLAogICAgICBjb25kZW5zZUZsb3cgPSBmYWxzZQogICAgfSkgewogICAgICBzdXBlcihzY2hlbWEpOwogICAgICB0aGlzLnRhZyA9IG51bGw7CiAgICAgIHRoaXMucmVzdWx0ID0gIiI7CiAgICAgIHRoaXMuZHVwbGljYXRlcyA9IFtdOwogICAgICB0aGlzLnVzZWREdXBsaWNhdGVzID0gW107CiAgICAgIHRoaXMuaW5kZW50ID0gTWF0aC5tYXgoMSwgaW5kZW50KTsKICAgICAgdGhpcy5ub0FycmF5SW5kZW50ID0gbm9BcnJheUluZGVudDsKICAgICAgdGhpcy5za2lwSW52YWxpZCA9IHNraXBJbnZhbGlkOwogICAgICB0aGlzLmZsb3dMZXZlbCA9IGZsb3dMZXZlbDsKICAgICAgdGhpcy5zdHlsZU1hcCA9IGNvbXBpbGVTdHlsZU1hcCh0aGlzLnNjaGVtYSwgc3R5bGVzKTsKICAgICAgdGhpcy5zb3J0S2V5cyA9IHNvcnRLZXlzOwogICAgICB0aGlzLmxpbmVXaWR0aCA9IGxpbmVXaWR0aDsKICAgICAgdGhpcy5ub1JlZnMgPSBub1JlZnM7CiAgICAgIHRoaXMubm9Db21wYXRNb2RlID0gbm9Db21wYXRNb2RlOwogICAgICB0aGlzLmNvbmRlbnNlRmxvdyA9IGNvbmRlbnNlRmxvdzsKICAgICAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDsKICAgICAgdGhpcy5leHBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRFeHBsaWNpdDsKICAgIH0KICB9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL2R1bXBlci9kdW1wZXIudHMKICB2YXIgX3RvU3RyaW5nMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgdmFyIHsgaGFzT3duOiBoYXNPd241IH0gPSBPYmplY3Q7CiAgdmFyIENIQVJfVEFCID0gOTsKICB2YXIgQ0hBUl9MSU5FX0ZFRUQgPSAxMDsKICB2YXIgQ0hBUl9TUEFDRSA9IDMyOwogIHZhciBDSEFSX0VYQ0xBTUFUSU9OID0gMzM7CiAgdmFyIENIQVJfRE9VQkxFX1FVT1RFID0gMzQ7CiAgdmFyIENIQVJfU0hBUlAgPSAzNTsKICB2YXIgQ0hBUl9QRVJDRU5UID0gMzc7CiAgdmFyIENIQVJfQU1QRVJTQU5EID0gMzg7CiAgdmFyIENIQVJfU0lOR0xFX1FVT1RFID0gMzk7CiAgdmFyIENIQVJfQVNURVJJU0sgPSA0MjsKICB2YXIgQ0hBUl9DT01NQSA9IDQ0OwogIHZhciBDSEFSX01JTlVTID0gNDU7CiAgdmFyIENIQVJfQ09MT04gPSA1ODsKICB2YXIgQ0hBUl9HUkVBVEVSX1RIQU4gPSA2MjsKICB2YXIgQ0hBUl9RVUVTVElPTiA9IDYzOwogIHZhciBDSEFSX0NPTU1FUkNJQUxfQVQgPSA2NDsKICB2YXIgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUID0gOTE7CiAgdmFyIENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgPSA5MzsKICB2YXIgQ0hBUl9HUkFWRV9BQ0NFTlQgPSA5NjsKICB2YXIgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgPSAxMjM7CiAgdmFyIENIQVJfVkVSVElDQUxfTElORSA9IDEyNDsKICB2YXIgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUID0gMTI1OwogIHZhciBFU0NBUEVfU0VRVUVOQ0VTID0ge307CiAgRVNDQVBFX1NFUVVFTkNFU1swXSA9ICJcXDAiOwogIEVTQ0FQRV9TRVFVRU5DRVNbN10gPSAiXFxhIjsKICBFU0NBUEVfU0VRVUVOQ0VTWzhdID0gIlxcYiI7CiAgRVNDQVBFX1NFUVVFTkNFU1s5XSA9ICJcXHQiOwogIEVTQ0FQRV9TRVFVRU5DRVNbMTBdID0gIlxcbiI7CiAgRVNDQVBFX1NFUVVFTkNFU1sxMV0gPSAiXFx2IjsKICBFU0NBUEVfU0VRVUVOQ0VTWzEyXSA9ICJcXGYiOwogIEVTQ0FQRV9TRVFVRU5DRVNbMTNdID0gIlxcciI7CiAgRVNDQVBFX1NFUVVFTkNFU1syN10gPSAiXFxlIjsKICBFU0NBUEVfU0VRVUVOQ0VTWzM0XSA9ICdcXCInOwogIEVTQ0FQRV9TRVFVRU5DRVNbOTJdID0gIlxcXFwiOwogIEVTQ0FQRV9TRVFVRU5DRVNbMTMzXSA9ICJcXE4iOwogIEVTQ0FQRV9TRVFVRU5DRVNbMTYwXSA9ICJcXF8iOwogIEVTQ0FQRV9TRVFVRU5DRVNbODIzMl0gPSAiXFxMIjsKICBFU0NBUEVfU0VRVUVOQ0VTWzgyMzNdID0gIlxcUCI7CiAgdmFyIERFUFJFQ0FURURfQk9PTEVBTlNfU1lOVEFYID0gWwogICAgInkiLAogICAgIlkiLAogICAgInllcyIsCiAgICAiWWVzIiwKICAgICJZRVMiLAogICAgIm9uIiwKICAgICJPbiIsCiAgICAiT04iLAogICAgIm4iLAogICAgIk4iLAogICAgIm5vIiwKICAgICJObyIsCiAgICAiTk8iLAogICAgIm9mZiIsCiAgICAiT2ZmIiwKICAgICJPRkYiCiAgXTsKICBmdW5jdGlvbiBlbmNvZGVIZXgoY2hhcmFjdGVyKSB7CiAgICBjb25zdCBzdHJpbmcgPSBjaGFyYWN0ZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgICBsZXQgaGFuZGxlOwogICAgbGV0IGxlbmd0aDsKICAgIGlmIChjaGFyYWN0ZXIgPD0gMjU1KSB7CiAgICAgIGhhbmRsZSA9ICJ4IjsKICAgICAgbGVuZ3RoID0gMjsKICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDY1NTM1KSB7CiAgICAgIGhhbmRsZSA9ICJ1IjsKICAgICAgbGVuZ3RoID0gNDsKICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyIDw9IDQyOTQ5NjcyOTUpIHsKICAgICAgaGFuZGxlID0gIlUiOwogICAgICBsZW5ndGggPSA4OwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFlBTUxFcnJvcigKICAgICAgICAiY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRiIKICAgICAgKTsKICAgIH0KICAgIHJldHVybiBgXFwke2hhbmRsZX0ke3JlcGVhdCgiMCIsIGxlbmd0aCAtIHN0cmluZy5sZW5ndGgpfSR7c3RyaW5nfWA7CiAgfQogIGZ1bmN0aW9uIGluZGVudFN0cmluZyhzdHJpbmcsIHNwYWNlcykgewogICAgY29uc3QgaW5kID0gcmVwZWF0KCIgIiwgc3BhY2VzKSwgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKICAgIGxldCBwb3NpdGlvbiA9IDAsIG5leHQgPSAtMSwgcmVzdWx0ID0gIiIsIGxpbmU7CiAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKICAgICAgbmV4dCA9IHN0cmluZy5pbmRleE9mKCJcbiIsIHBvc2l0aW9uKTsKICAgICAgaWYgKG5leHQgPT09IC0xKSB7CiAgICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbik7CiAgICAgICAgcG9zaXRpb24gPSBsZW5ndGg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbiwgbmV4dCArIDEpOwogICAgICAgIHBvc2l0aW9uID0gbmV4dCArIDE7CiAgICAgIH0KICAgICAgaWYgKGxpbmUubGVuZ3RoICYmIGxpbmUgIT09ICJcbiIpCiAgICAgICAgcmVzdWx0ICs9IGluZDsKICAgICAgcmVzdWx0ICs9IGxpbmU7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICBmdW5jdGlvbiBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCkgewogICAgcmV0dXJuIGAKJHtyZXBlYXQoIiAiLCBzdGF0ZS5pbmRlbnQgKiBsZXZlbCl9YDsKICB9CiAgZnVuY3Rpb24gdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBzdHIyKSB7CiAgICBsZXQgdHlwZTsKICAgIGZvciAobGV0IGluZGV4ID0gMCwgbGVuZ3RoID0gc3RhdGUuaW1wbGljaXRUeXBlcy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7CiAgICAgIHR5cGUgPSBzdGF0ZS5pbXBsaWNpdFR5cGVzW2luZGV4XTsKICAgICAgaWYgKHR5cGUucmVzb2x2ZShzdHIyKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjMTcpIHsKICAgIHJldHVybiBjMTcgPT09IENIQVJfU1BBQ0UgfHwgYzE3ID09PSBDSEFSX1RBQjsKICB9CiAgZnVuY3Rpb24gaXNQcmludGFibGUoYzE3KSB7CiAgICByZXR1cm4gMzIgPD0gYzE3ICYmIGMxNyA8PSAxMjYgfHwgMTYxIDw9IGMxNyAmJiBjMTcgPD0gNTUyOTUgJiYgYzE3ICE9PSA4MjMyICYmIGMxNyAhPT0gODIzMyB8fCA1NzM0NCA8PSBjMTcgJiYgYzE3IDw9IDY1NTMzICYmIGMxNyAhPT0gNjUyNzkgfHwgNjU1MzYgPD0gYzE3ICYmIGMxNyA8PSAxMTE0MTExOwogIH0KICBmdW5jdGlvbiBpc1BsYWluU2FmZShjMTcpIHsKICAgIHJldHVybiBpc1ByaW50YWJsZShjMTcpICYmIGMxNyAhPT0gNjUyNzkgJiYgYzE3ICE9PSBDSEFSX0NPTU1BICYmIGMxNyAhPT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUICYmIGMxNyAhPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAmJiBjMTcgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICYmIGMxNyAhPT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICYmIGMxNyAhPT0gQ0hBUl9DT0xPTiAmJiBjMTcgIT09IENIQVJfU0hBUlA7CiAgfQogIGZ1bmN0aW9uIGlzUGxhaW5TYWZlRmlyc3QoYzE3KSB7CiAgICByZXR1cm4gaXNQcmludGFibGUoYzE3KSAmJiBjMTcgIT09IDY1Mjc5ICYmICFpc1doaXRlc3BhY2UoYzE3KSAmJiBjMTcgIT09IENIQVJfTUlOVVMgJiYgYzE3ICE9PSBDSEFSX1FVRVNUSU9OICYmIGMxNyAhPT0gQ0hBUl9DT0xPTiAmJiBjMTcgIT09IENIQVJfQ09NTUEgJiYgYzE3ICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiYgYzE3ICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmIGMxNyAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgJiYgYzE3ICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgJiYgYzE3ICE9PSBDSEFSX1NIQVJQICYmIGMxNyAhPT0gQ0hBUl9BTVBFUlNBTkQgJiYgYzE3ICE9PSBDSEFSX0FTVEVSSVNLICYmIGMxNyAhPT0gQ0hBUl9FWENMQU1BVElPTiAmJiBjMTcgIT09IENIQVJfVkVSVElDQUxfTElORSAmJiBjMTcgIT09IENIQVJfR1JFQVRFUl9USEFOICYmIGMxNyAhPT0gQ0hBUl9TSU5HTEVfUVVPVEUgJiYgYzE3ICE9PSBDSEFSX0RPVUJMRV9RVU9URSAmJiBjMTcgIT09IENIQVJfUEVSQ0VOVCAmJiBjMTcgIT09IENIQVJfQ09NTUVSQ0lBTF9BVCAmJiBjMTcgIT09IENIQVJfR1JBVkVfQUNDRU5UOwogIH0KICBmdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykgewogICAgY29uc3QgbGVhZGluZ1NwYWNlUmUgPSAvXlxuKiAvOwogICAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nKTsKICB9CiAgdmFyIFNUWUxFX1BMQUlOID0gMTsKICB2YXIgU1RZTEVfU0lOR0xFID0gMjsKICB2YXIgU1RZTEVfTElURVJBTCA9IDM7CiAgdmFyIFNUWUxFX0ZPTERFRCA9IDQ7CiAgdmFyIFNUWUxFX0RPVUJMRSA9IDU7CiAgZnVuY3Rpb24gY2hvb3NlU2NhbGFyU3R5bGUoc3RyaW5nLCBzaW5nbGVMaW5lT25seSwgaW5kZW50UGVyTGV2ZWwsIGxpbmVXaWR0aCwgdGVzdEFtYmlndW91c1R5cGUpIHsKICAgIGNvbnN0IHNob3VsZFRyYWNrV2lkdGggPSBsaW5lV2lkdGggIT09IC0xOwogICAgbGV0IGhhc0xpbmVCcmVhayA9IGZhbHNlLCBoYXNGb2xkYWJsZUxpbmUgPSBmYWxzZSwgcHJldmlvdXNMaW5lQnJlYWsgPSAtMSwgcGxhaW4gPSBpc1BsYWluU2FmZUZpcnN0KHN0cmluZy5jaGFyQ29kZUF0KDApKSAmJiAhaXNXaGl0ZXNwYWNlKHN0cmluZy5jaGFyQ29kZUF0KHN0cmluZy5sZW5ndGggLSAxKSk7CiAgICBsZXQgY2hhciwgaTQ7CiAgICBpZiAoc2luZ2xlTGluZU9ubHkpIHsKICAgICAgZm9yIChpNCA9IDA7IGk0IDwgc3RyaW5nLmxlbmd0aDsgaTQrKykgewogICAgICAgIGNoYXIgPSBzdHJpbmcuY2hhckNvZGVBdChpNCk7CiAgICAgICAgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkgewogICAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTsKICAgICAgICB9CiAgICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChpNCA9IDA7IGk0IDwgc3RyaW5nLmxlbmd0aDsgaTQrKykgewogICAgICAgIGNoYXIgPSBzdHJpbmcuY2hhckNvZGVBdChpNCk7CiAgICAgICAgaWYgKGNoYXIgPT09IENIQVJfTElORV9GRUVEKSB7CiAgICAgICAgICBoYXNMaW5lQnJlYWsgPSB0cnVlOwogICAgICAgICAgaWYgKHNob3VsZFRyYWNrV2lkdGgpIHsKICAgICAgICAgICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8IGk0IC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmIHN0cmluZ1twcmV2aW91c0xpbmVCcmVhayArIDFdICE9PSAiICI7CiAgICAgICAgICAgIHByZXZpb3VzTGluZUJyZWFrID0gaTQ7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghaXNQcmludGFibGUoY2hhcikpIHsKICAgICAgICAgIHJldHVybiBTVFlMRV9ET1VCTEU7CiAgICAgICAgfQogICAgICAgIHBsYWluID0gcGxhaW4gJiYgaXNQbGFpblNhZmUoY2hhcik7CiAgICAgIH0KICAgICAgaGFzRm9sZGFibGVMaW5lID0gaGFzRm9sZGFibGVMaW5lIHx8IHNob3VsZFRyYWNrV2lkdGggJiYgaTQgLSBwcmV2aW91c0xpbmVCcmVhayAtIDEgPiBsaW5lV2lkdGggJiYgc3RyaW5nW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09ICIgIjsKICAgIH0KICAgIGlmICghaGFzTGluZUJyZWFrICYmICFoYXNGb2xkYWJsZUxpbmUpIHsKICAgICAgcmV0dXJuIHBsYWluICYmICF0ZXN0QW1iaWd1b3VzVHlwZShzdHJpbmcpID8gU1RZTEVfUExBSU4gOiBTVFlMRV9TSU5HTEU7CiAgICB9CiAgICBpZiAoaW5kZW50UGVyTGV2ZWwgPiA5ICYmIG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nKSkgewogICAgICByZXR1cm4gU1RZTEVfRE9VQkxFOwogICAgfQogICAgcmV0dXJuIGhhc0ZvbGRhYmxlTGluZSA/IFNUWUxFX0ZPTERFRCA6IFNUWUxFX0xJVEVSQUw7CiAgfQogIGZ1bmN0aW9uIGZvbGRMaW5lKGxpbmUsIHdpZHRoKSB7CiAgICBpZiAobGluZSA9PT0gIiIgfHwgbGluZVswXSA9PT0gIiAiKQogICAgICByZXR1cm4gbGluZTsKICAgIGNvbnN0IGJyZWFrUmUgPSAvIFteIF0vZzsKICAgIGxldCBtYXRjaDsKICAgIGxldCBzdGFydCA9IDAsIGVuZCwgY3VyciA9IDAsIG5leHQgPSAwOwogICAgbGV0IHJlc3VsdCA9ICIiOwogICAgd2hpbGUgKG1hdGNoID0gYnJlYWtSZS5leGVjKGxpbmUpKSB7CiAgICAgIG5leHQgPSBtYXRjaC5pbmRleDsKICAgICAgaWYgKG5leHQgLSBzdGFydCA+IHdpZHRoKSB7CiAgICAgICAgZW5kID0gY3VyciA+IHN0YXJ0ID8gY3VyciA6IG5leHQ7CiAgICAgICAgcmVzdWx0ICs9IGAKJHtsaW5lLnNsaWNlKHN0YXJ0LCBlbmQpfWA7CiAgICAgICAgc3RhcnQgPSBlbmQgKyAxOwogICAgICB9CiAgICAgIGN1cnIgPSBuZXh0OwogICAgfQogICAgcmVzdWx0ICs9ICJcbiI7CiAgICBpZiAobGluZS5sZW5ndGggLSBzdGFydCA+IHdpZHRoICYmIGN1cnIgPiBzdGFydCkgewogICAgICByZXN1bHQgKz0gYCR7bGluZS5zbGljZShzdGFydCwgY3Vycil9CiR7bGluZS5zbGljZShjdXJyICsgMSl9YDsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQuc2xpY2UoMSk7CiAgfQogIGZ1bmN0aW9uIGRyb3BFbmRpbmdOZXdsaW5lKHN0cmluZykgewogICAgcmV0dXJuIHN0cmluZ1tzdHJpbmcubGVuZ3RoIC0gMV0gPT09ICJcbiIgPyBzdHJpbmcuc2xpY2UoMCwgLTEpIDogc3RyaW5nOwogIH0KICBmdW5jdGlvbiBmb2xkU3RyaW5nKHN0cmluZywgd2lkdGgpIHsKICAgIGNvbnN0IGxpbmVSZSA9IC8oXG4rKShbXlxuXSopL2c7CiAgICBsZXQgcmVzdWx0ID0gKCgpID0+IHsKICAgICAgbGV0IG5leHRMRiA9IHN0cmluZy5pbmRleE9mKCJcbiIpOwogICAgICBuZXh0TEYgPSBuZXh0TEYgIT09IC0xID8gbmV4dExGIDogc3RyaW5nLmxlbmd0aDsKICAgICAgbGluZVJlLmxhc3RJbmRleCA9IG5leHRMRjsKICAgICAgcmV0dXJuIGZvbGRMaW5lKHN0cmluZy5zbGljZSgwLCBuZXh0TEYpLCB3aWR0aCk7CiAgICB9KSgpOwogICAgbGV0IHByZXZNb3JlSW5kZW50ZWQgPSBzdHJpbmdbMF0gPT09ICJcbiIgfHwgc3RyaW5nWzBdID09PSAiICI7CiAgICBsZXQgbW9yZUluZGVudGVkOwogICAgbGV0IG1hdGNoOwogICAgd2hpbGUgKG1hdGNoID0gbGluZVJlLmV4ZWMoc3RyaW5nKSkgewogICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXSwgbGluZSA9IG1hdGNoWzJdOwogICAgICBtb3JlSW5kZW50ZWQgPSBsaW5lWzBdID09PSAiICI7CiAgICAgIHJlc3VsdCArPSBwcmVmaXggKyAoIXByZXZNb3JlSW5kZW50ZWQgJiYgIW1vcmVJbmRlbnRlZCAmJiBsaW5lICE9PSAiIiA/ICJcbiIgOiAiIikgKyBmb2xkTGluZShsaW5lLCB3aWR0aCk7CiAgICAgIHByZXZNb3JlSW5kZW50ZWQgPSBtb3JlSW5kZW50ZWQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICBmdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyaW5nKSB7CiAgICBsZXQgcmVzdWx0ID0gIiI7CiAgICBsZXQgY2hhciwgbmV4dENoYXI7CiAgICBsZXQgZXNjYXBlU2VxOwogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IHN0cmluZy5sZW5ndGg7IGk0KyspIHsKICAgICAgY2hhciA9IHN0cmluZy5jaGFyQ29kZUF0KGk0KTsKICAgICAgaWYgKGNoYXIgPj0gNTUyOTYgJiYgY2hhciA8PSA1NjMxOSkgewogICAgICAgIG5leHRDaGFyID0gc3RyaW5nLmNoYXJDb2RlQXQoaTQgKyAxKTsKICAgICAgICBpZiAobmV4dENoYXIgPj0gNTYzMjAgJiYgbmV4dENoYXIgPD0gNTczNDMpIHsKICAgICAgICAgIHJlc3VsdCArPSBlbmNvZGVIZXgoCiAgICAgICAgICAgIChjaGFyIC0gNTUyOTYpICogMTAyNCArIG5leHRDaGFyIC0gNTYzMjAgKyA2NTUzNgogICAgICAgICAgKTsKICAgICAgICAgIGk0Kys7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZXNjYXBlU2VxID0gRVNDQVBFX1NFUVVFTkNFU1tjaGFyXTsKICAgICAgcmVzdWx0ICs9ICFlc2NhcGVTZXEgJiYgaXNQcmludGFibGUoY2hhcikgPyBzdHJpbmdbaTRdIDogZXNjYXBlU2VxIHx8IGVuY29kZUhleChjaGFyKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIGJsb2NrSGVhZGVyKHN0cmluZywgaW5kZW50UGVyTGV2ZWwpIHsKICAgIGNvbnN0IGluZGVudEluZGljYXRvciA9IG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nKSA/IFN0cmluZyhpbmRlbnRQZXJMZXZlbCkgOiAiIjsKICAgIGNvbnN0IGNsaXAgPSBzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDFdID09PSAiXG4iOwogICAgY29uc3Qga2VlcCA9IGNsaXAgJiYgKHN0cmluZ1tzdHJpbmcubGVuZ3RoIC0gMl0gPT09ICJcbiIgfHwgc3RyaW5nID09PSAiXG4iKTsKICAgIGNvbnN0IGNob21wID0ga2VlcCA/ICIrIiA6IGNsaXAgPyAiIiA6ICItIjsKICAgIHJldHVybiBgJHtpbmRlbnRJbmRpY2F0b3J9JHtjaG9tcH0KYDsKICB9CiAgZnVuY3Rpb24gd3JpdGVTY2FsYXIoc3RhdGUsIHN0cmluZywgbGV2ZWwsIGlza2V5KSB7CiAgICBzdGF0ZS5kdW1wID0gKCgpID0+IHsKICAgICAgaWYgKHN0cmluZy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gIicnIjsKICAgICAgfQogICAgICBpZiAoIXN0YXRlLm5vQ29tcGF0TW9kZSAmJiBERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWC5pbmRleE9mKHN0cmluZykgIT09IC0xKSB7CiAgICAgICAgcmV0dXJuIGAnJHtzdHJpbmd9J2A7CiAgICAgIH0KICAgICAgY29uc3QgaW5kZW50ID0gc3RhdGUuaW5kZW50ICogTWF0aC5tYXgoMSwgbGV2ZWwpOwogICAgICBjb25zdCBsaW5lV2lkdGggPSBzdGF0ZS5saW5lV2lkdGggPT09IC0xID8gLTEgOiBNYXRoLm1heChNYXRoLm1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKSwgc3RhdGUubGluZVdpZHRoIC0gaW5kZW50KTsKICAgICAgY29uc3Qgc2luZ2xlTGluZU9ubHkgPSBpc2tleSB8fCBzdGF0ZS5mbG93TGV2ZWwgPiAtMSAmJiBsZXZlbCA+PSBzdGF0ZS5mbG93TGV2ZWw7CiAgICAgIGZ1bmN0aW9uIHRlc3RBbWJpZ3VpdHkoc3RyMikgewogICAgICAgIHJldHVybiB0ZXN0SW1wbGljaXRSZXNvbHZpbmcoc3RhdGUsIHN0cjIpOwogICAgICB9CiAgICAgIHN3aXRjaCAoY2hvb3NlU2NhbGFyU3R5bGUoCiAgICAgICAgc3RyaW5nLAogICAgICAgIHNpbmdsZUxpbmVPbmx5LAogICAgICAgIHN0YXRlLmluZGVudCwKICAgICAgICBsaW5lV2lkdGgsCiAgICAgICAgdGVzdEFtYmlndWl0eQogICAgICApKSB7CiAgICAgICAgY2FzZSBTVFlMRV9QTEFJTjoKICAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgICAgY2FzZSBTVFlMRV9TSU5HTEU6CiAgICAgICAgICByZXR1cm4gYCcke3N0cmluZy5yZXBsYWNlKC8nL2csICInJyIpfSdgOwogICAgICAgIGNhc2UgU1RZTEVfTElURVJBTDoKICAgICAgICAgIHJldHVybiBgfCR7YmxvY2tIZWFkZXIoc3RyaW5nLCBzdGF0ZS5pbmRlbnQpfSR7ZHJvcEVuZGluZ05ld2xpbmUoCiAgICAgICAgICAgIGluZGVudFN0cmluZyhzdHJpbmcsIGluZGVudCkKICAgICAgICAgICl9YDsKICAgICAgICBjYXNlIFNUWUxFX0ZPTERFRDoKICAgICAgICAgIHJldHVybiBgPiR7YmxvY2tIZWFkZXIoc3RyaW5nLCBzdGF0ZS5pbmRlbnQpfSR7ZHJvcEVuZGluZ05ld2xpbmUoCiAgICAgICAgICAgIGluZGVudFN0cmluZyhmb2xkU3RyaW5nKHN0cmluZywgbGluZVdpZHRoKSwgaW5kZW50KQogICAgICAgICAgKX1gOwogICAgICAgIGNhc2UgU1RZTEVfRE9VQkxFOgogICAgICAgICAgcmV0dXJuIGAiJHtlc2NhcGVTdHJpbmcoc3RyaW5nKX0iYDsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFcnJvcigiaW1wb3NzaWJsZSBlcnJvcjogaW52YWxpZCBzY2FsYXIgc3R5bGUiKTsKICAgICAgfQogICAgfSkoKTsKICB9CiAgZnVuY3Rpb24gd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUsIGxldmVsLCBvYmplY3QpIHsKICAgIGxldCBfcmVzdWx0ID0gIiI7CiAgICBjb25zdCBfdGFnID0gc3RhdGUudGFnOwogICAgZm9yIChsZXQgaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkgewogICAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCwgb2JqZWN0W2luZGV4XSwgZmFsc2UsIGZhbHNlKSkgewogICAgICAgIGlmIChpbmRleCAhPT0gMCkKICAgICAgICAgIF9yZXN1bHQgKz0gYCwkeyFzdGF0ZS5jb25kZW5zZUZsb3cgPyAiICIgOiAiIn1gOwogICAgICAgIF9yZXN1bHQgKz0gc3RhdGUuZHVtcDsKICAgICAgfQogICAgfQogICAgc3RhdGUudGFnID0gX3RhZzsKICAgIHN0YXRlLmR1bXAgPSBgWyR7X3Jlc3VsdH1dYDsKICB9CiAgZnVuY3Rpb24gd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlLCBsZXZlbCwgb2JqZWN0LCBjb21wYWN0ID0gZmFsc2UpIHsKICAgIGxldCBfcmVzdWx0ID0gIiI7CiAgICBjb25zdCBfdGFnID0gc3RhdGUudGFnOwogICAgZm9yIChsZXQgaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkgewogICAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG9iamVjdFtpbmRleF0sIHRydWUsIHRydWUpKSB7CiAgICAgICAgaWYgKCFjb21wYWN0IHx8IGluZGV4ICE9PSAwKSB7CiAgICAgICAgICBfcmVzdWx0ICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkgewogICAgICAgICAgX3Jlc3VsdCArPSAiLSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9yZXN1bHQgKz0gIi0gIjsKICAgICAgICB9CiAgICAgICAgX3Jlc3VsdCArPSBzdGF0ZS5kdW1wOwogICAgICB9CiAgICB9CiAgICBzdGF0ZS50YWcgPSBfdGFnOwogICAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgIltdIjsKICB9CiAgZnVuY3Rpb24gd3JpdGVGbG93TWFwcGluZyhzdGF0ZSwgbGV2ZWwsIG9iamVjdCkgewogICAgbGV0IF9yZXN1bHQgPSAiIjsKICAgIGNvbnN0IF90YWcgPSBzdGF0ZS50YWcsIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpOwogICAgbGV0IHBhaXJCdWZmZXIsIG9iamVjdEtleSwgb2JqZWN0VmFsdWU7CiAgICBmb3IgKGxldCBpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkgewogICAgICBwYWlyQnVmZmVyID0gc3RhdGUuY29uZGVuc2VGbG93ID8gJyInIDogIiI7CiAgICAgIGlmIChpbmRleCAhPT0gMCkKICAgICAgICBwYWlyQnVmZmVyICs9ICIsICI7CiAgICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXhdOwogICAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldOwogICAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdEtleSwgZmFsc2UsIGZhbHNlKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5kdW1wLmxlbmd0aCA+IDEwMjQpCiAgICAgICAgcGFpckJ1ZmZlciArPSAiPyAiOwogICAgICBwYWlyQnVmZmVyICs9IGAke3N0YXRlLmR1bXB9JHtzdGF0ZS5jb25kZW5zZUZsb3cgPyAnIicgOiAiIn06JHtzdGF0ZS5jb25kZW5zZUZsb3cgPyAiIiA6ICIgIn1gOwogICAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdFZhbHVlLCBmYWxzZSwgZmFsc2UpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wOwogICAgICBfcmVzdWx0ICs9IHBhaXJCdWZmZXI7CiAgICB9CiAgICBzdGF0ZS50YWcgPSBfdGFnOwogICAgc3RhdGUuZHVtcCA9IGB7JHtfcmVzdWx0fX1gOwogIH0KICBmdW5jdGlvbiB3cml0ZUJsb2NrTWFwcGluZyhzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCA9IGZhbHNlKSB7CiAgICBjb25zdCBfdGFnID0gc3RhdGUudGFnLCBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KTsKICAgIGxldCBfcmVzdWx0ID0gIiI7CiAgICBpZiAoc3RhdGUuc29ydEtleXMgPT09IHRydWUpIHsKICAgICAgb2JqZWN0S2V5TGlzdC5zb3J0KCk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGF0ZS5zb3J0S2V5cyA9PT0gImZ1bmN0aW9uIikgewogICAgICBvYmplY3RLZXlMaXN0LnNvcnQoc3RhdGUuc29ydEtleXMpOwogICAgfSBlbHNlIGlmIChzdGF0ZS5zb3J0S2V5cykgewogICAgICB0aHJvdyBuZXcgWUFNTEVycm9yKCJzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uIik7CiAgICB9CiAgICBsZXQgcGFpckJ1ZmZlciA9ICIiLCBvYmplY3RLZXksIG9iamVjdFZhbHVlLCBleHBsaWNpdFBhaXI7CiAgICBmb3IgKGxldCBpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkgewogICAgICBwYWlyQnVmZmVyID0gIiI7CiAgICAgIGlmICghY29tcGFjdCB8fCBpbmRleCAhPT0gMCkgewogICAgICAgIHBhaXJCdWZmZXIgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpOwogICAgICB9CiAgICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXhdOwogICAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldOwogICAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwgKyAxLCBvYmplY3RLZXksIHRydWUsIHRydWUsIHRydWUpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZXhwbGljaXRQYWlyID0gc3RhdGUudGFnICE9PSBudWxsICYmIHN0YXRlLnRhZyAhPT0gIj8iIHx8IHN0YXRlLmR1bXAgJiYgc3RhdGUuZHVtcC5sZW5ndGggPiAxMDI0OwogICAgICBpZiAoZXhwbGljaXRQYWlyKSB7CiAgICAgICAgaWYgKHN0YXRlLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlLmR1bXAuY2hhckNvZGVBdCgwKSkgewogICAgICAgICAgcGFpckJ1ZmZlciArPSAiPyI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHBhaXJCdWZmZXIgKz0gIj8gIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcGFpckJ1ZmZlciArPSBzdGF0ZS5kdW1wOwogICAgICBpZiAoZXhwbGljaXRQYWlyKSB7CiAgICAgICAgcGFpckJ1ZmZlciArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7CiAgICAgIH0KICAgICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0VmFsdWUsIHRydWUsIGV4cGxpY2l0UGFpcikpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoc3RhdGUuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUuZHVtcC5jaGFyQ29kZUF0KDApKSB7CiAgICAgICAgcGFpckJ1ZmZlciArPSAiOiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFpckJ1ZmZlciArPSAiOiAiOwogICAgICB9CiAgICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDsKICAgICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyOwogICAgfQogICAgc3RhdGUudGFnID0gX3RhZzsKICAgIHN0YXRlLmR1bXAgPSBfcmVzdWx0IHx8ICJ7fSI7CiAgfQogIGZ1bmN0aW9uIGRldGVjdFR5cGUoc3RhdGUsIG9iamVjdCwgZXhwbGljaXQgPSBmYWxzZSkgewogICAgY29uc3QgdHlwZUxpc3QgPSBleHBsaWNpdCA/IHN0YXRlLmV4cGxpY2l0VHlwZXMgOiBzdGF0ZS5pbXBsaWNpdFR5cGVzOwogICAgbGV0IHR5cGU7CiAgICBsZXQgc3R5bGU7CiAgICBsZXQgX3Jlc3VsdDsKICAgIGZvciAobGV0IGluZGV4ID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkgewogICAgICB0eXBlID0gdHlwZUxpc3RbaW5kZXhdOwogICAgICBpZiAoKHR5cGUuaW5zdGFuY2VPZiB8fCB0eXBlLnByZWRpY2F0ZSkgJiYgKCF0eXBlLmluc3RhbmNlT2YgfHwgdHlwZW9mIG9iamVjdCA9PT0gIm9iamVjdCIgJiYgb2JqZWN0IGluc3RhbmNlb2YgdHlwZS5pbnN0YW5jZU9mKSAmJiAoIXR5cGUucHJlZGljYXRlIHx8IHR5cGUucHJlZGljYXRlKG9iamVjdCkpKSB7CiAgICAgICAgc3RhdGUudGFnID0gZXhwbGljaXQgPyB0eXBlLnRhZyA6ICI/IjsKICAgICAgICBpZiAodHlwZS5yZXByZXNlbnQpIHsKICAgICAgICAgIHN0eWxlID0gc3RhdGUuc3R5bGVNYXBbdHlwZS50YWddIHx8IHR5cGUuZGVmYXVsdFN0eWxlOwogICAgICAgICAgaWYgKF90b1N0cmluZzMuY2FsbCh0eXBlLnJlcHJlc2VudCkgPT09ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgX3Jlc3VsdCA9IHR5cGUucmVwcmVzZW50KG9iamVjdCwgc3R5bGUpOwogICAgICAgICAgfSBlbHNlIGlmIChoYXNPd241KHR5cGUucmVwcmVzZW50LCBzdHlsZSkpIHsKICAgICAgICAgICAgX3Jlc3VsdCA9IHR5cGUucmVwcmVzZW50W3N0eWxlXSgKICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgICAgc3R5bGUKICAgICAgICAgICAgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBZQU1MRXJyb3IoCiAgICAgICAgICAgICAgYCE8JHt0eXBlLnRhZ30+IHRhZyByZXNvbHZlciBhY2NlcHRzIG5vdCAiJHtzdHlsZX0iIHN0eWxlYAogICAgICAgICAgICApOwogICAgICAgICAgfQogICAgICAgICAgc3RhdGUuZHVtcCA9IF9yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdCwgYmxvY2ssIGNvbXBhY3QsIGlza2V5ID0gZmFsc2UpIHsKICAgIHN0YXRlLnRhZyA9IG51bGw7CiAgICBzdGF0ZS5kdW1wID0gb2JqZWN0OwogICAgaWYgKCFkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIGZhbHNlKSkgewogICAgICBkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIHRydWUpOwogICAgfQogICAgY29uc3QgdHlwZSA9IF90b1N0cmluZzMuY2FsbChzdGF0ZS5kdW1wKTsKICAgIGlmIChibG9jaykgewogICAgICBibG9jayA9IHN0YXRlLmZsb3dMZXZlbCA8IDAgfHwgc3RhdGUuZmxvd0xldmVsID4gbGV2ZWw7CiAgICB9CiAgICBjb25zdCBvYmplY3RPckFycmF5ID0gdHlwZSA9PT0gIltvYmplY3QgT2JqZWN0XSIgfHwgdHlwZSA9PT0gIltvYmplY3QgQXJyYXldIjsKICAgIGxldCBkdXBsaWNhdGVJbmRleCA9IC0xOwogICAgbGV0IGR1cGxpY2F0ZSA9IGZhbHNlOwogICAgaWYgKG9iamVjdE9yQXJyYXkpIHsKICAgICAgZHVwbGljYXRlSW5kZXggPSBzdGF0ZS5kdXBsaWNhdGVzLmluZGV4T2Yob2JqZWN0KTsKICAgICAgZHVwbGljYXRlID0gZHVwbGljYXRlSW5kZXggIT09IC0xOwogICAgfQogICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICI/IiB8fCBkdXBsaWNhdGUgfHwgc3RhdGUuaW5kZW50ICE9PSAyICYmIGxldmVsID4gMCkgewogICAgICBjb21wYWN0ID0gZmFsc2U7CiAgICB9CiAgICBpZiAoZHVwbGljYXRlICYmIHN0YXRlLnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSkgewogICAgICBzdGF0ZS5kdW1wID0gYCpyZWZfJHtkdXBsaWNhdGVJbmRleH1gOwogICAgfSBlbHNlIHsKICAgICAgaWYgKG9iamVjdE9yQXJyYXkgJiYgZHVwbGljYXRlICYmICFzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0pIHsKICAgICAgICBzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0gPSB0cnVlOwogICAgICB9CiAgICAgIGlmICh0eXBlID09PSAiW29iamVjdCBPYmplY3RdIikgewogICAgICAgIGlmIChibG9jayAmJiBPYmplY3Qua2V5cyhzdGF0ZS5kdW1wKS5sZW5ndGggIT09IDApIHsKICAgICAgICAgIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCwgY29tcGFjdCk7CiAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7CiAgICAgICAgICAgIHN0YXRlLmR1bXAgPSBgJnJlZl8ke2R1cGxpY2F0ZUluZGV4fSR7c3RhdGUuZHVtcH1gOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCk7CiAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7CiAgICAgICAgICAgIHN0YXRlLmR1bXAgPSBgJnJlZl8ke2R1cGxpY2F0ZUluZGV4fSAke3N0YXRlLmR1bXB9YDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gIltvYmplY3QgQXJyYXldIikgewogICAgICAgIGNvbnN0IGFycmF5TGV2ZWwgPSBzdGF0ZS5ub0FycmF5SW5kZW50ICYmIGxldmVsID4gMCA/IGxldmVsIC0gMSA6IGxldmVsOwogICAgICAgIGlmIChibG9jayAmJiBzdGF0ZS5kdW1wLmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgd3JpdGVCbG9ja1NlcXVlbmNlKHN0YXRlLCBhcnJheUxldmVsLCBzdGF0ZS5kdW1wLCBjb21wYWN0KTsKICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHsKICAgICAgICAgICAgc3RhdGUuZHVtcCA9IGAmcmVmXyR7ZHVwbGljYXRlSW5kZXh9JHtzdGF0ZS5kdW1wfWA7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlLCBhcnJheUxldmVsLCBzdGF0ZS5kdW1wKTsKICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHsKICAgICAgICAgICAgc3RhdGUuZHVtcCA9IGAmcmVmXyR7ZHVwbGljYXRlSW5kZXh9ICR7c3RhdGUuZHVtcH1gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAiW29iamVjdCBTdHJpbmddIikgewogICAgICAgIGlmIChzdGF0ZS50YWcgIT09ICI/IikgewogICAgICAgICAgd3JpdGVTY2FsYXIoc3RhdGUsIHN0YXRlLmR1bXAsIGxldmVsLCBpc2tleSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChzdGF0ZS5za2lwSW52YWxpZCkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB0aHJvdyBuZXcgWUFNTEVycm9yKGB1bmFjY2VwdGFibGUga2luZCBvZiBhbiBvYmplY3QgdG8gZHVtcCAke3R5cGV9YCk7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09ICI/IikgewogICAgICAgIHN0YXRlLmR1bXAgPSBgITwke3N0YXRlLnRhZ30+ICR7c3RhdGUuZHVtcH1gOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gaW5zcGVjdE5vZGUob2JqZWN0LCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcykgewogICAgaWYgKG9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAib2JqZWN0IikgewogICAgICBjb25zdCBpbmRleCA9IG9iamVjdHMuaW5kZXhPZihvYmplY3QpOwogICAgICBpZiAoaW5kZXggIT09IC0xKSB7CiAgICAgICAgaWYgKGR1cGxpY2F0ZXNJbmRleGVzLmluZGV4T2YoaW5kZXgpID09PSAtMSkgewogICAgICAgICAgZHVwbGljYXRlc0luZGV4ZXMucHVzaChpbmRleCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIG9iamVjdHMucHVzaChvYmplY3QpOwogICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHsKICAgICAgICAgIGZvciAobGV0IGlkeCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGlkeCA8IGxlbmd0aDsgaWR4ICs9IDEpIHsKICAgICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W2lkeF0sIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3Qgb2JqZWN0S2V5TGlzdCA9IE9iamVjdC5rZXlzKG9iamVjdCk7CiAgICAgICAgICBmb3IgKGxldCBpZHggPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHggKz0gMSkgewogICAgICAgICAgICBpbnNwZWN0Tm9kZShvYmplY3Rbb2JqZWN0S2V5TGlzdFtpZHhdXSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKG9iamVjdCwgc3RhdGUpIHsKICAgIGNvbnN0IG9iamVjdHMgPSBbXSwgZHVwbGljYXRlc0luZGV4ZXMgPSBbXTsKICAgIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpOwogICAgY29uc3QgbGVuZ3RoID0gZHVwbGljYXRlc0luZGV4ZXMubGVuZ3RoOwogICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkgewogICAgICBzdGF0ZS5kdXBsaWNhdGVzLnB1c2gob2JqZWN0c1tkdXBsaWNhdGVzSW5kZXhlc1tpbmRleF1dKTsKICAgIH0KICAgIHN0YXRlLnVzZWREdXBsaWNhdGVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aCB9KTsKICB9CiAgZnVuY3Rpb24gZHVtcChpbnB1dCwgb3B0aW9ucykgewogICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICBjb25zdCBzdGF0ZSA9IG5ldyBEdW1wZXJTdGF0ZShvcHRpb25zKTsKICAgIGlmICghc3RhdGUubm9SZWZzKQogICAgICBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKGlucHV0LCBzdGF0ZSk7CiAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCAwLCBpbnB1dCwgdHJ1ZSwgdHJ1ZSkpCiAgICAgIHJldHVybiBgJHtzdGF0ZS5kdW1wfQpgOwogICAgcmV0dXJuICIiOwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC9zdHJpbmdpZnkudHMKICBmdW5jdGlvbiBzdHJpbmdpZnkob2JqLCBvcHRpb25zKSB7CiAgICByZXR1cm4gZHVtcChvYmosIG9wdGlvbnMpOwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9fdXRpbC9vcy50cwogIHZhciBvc1R5cGUgPSAoKCkgPT4gewogICAgY29uc3QgeyBEZW5vOiBEZW5vMyB9ID0gZ2xvYmFsVGhpczsKICAgIGlmICh0eXBlb2YgRGVubzM/LmJ1aWxkPy5vcyA9PT0gInN0cmluZyIpIHsKICAgICAgcmV0dXJuIERlbm8zLmJ1aWxkLm9zOwogICAgfQogICAgY29uc3QgeyBuYXZpZ2F0b3I6IG5hdmlnYXRvcjIgfSA9IGdsb2JhbFRoaXM7CiAgICBpZiAobmF2aWdhdG9yMj8uYXBwVmVyc2lvbj8uaW5jbHVkZXM/LigiV2luIikpIHsKICAgICAgcmV0dXJuICJ3aW5kb3dzIjsKICAgIH0KICAgIHJldHVybiAibGludXgiOwogIH0pKCk7CiAgdmFyIGlzV2luZG93cyA9IG9zVHlwZSA9PT0gIndpbmRvd3MiOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL3BhdGgvd2luMzIudHMKICB2YXIgd2luMzJfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KHdpbjMyX2V4cG9ydHMsIHsKICAgIGJhc2VuYW1lOiAoKSA9PiBiYXNlbmFtZSwKICAgIGRlbGltaXRlcjogKCkgPT4gZGVsaW1pdGVyLAogICAgZGlybmFtZTogKCkgPT4gZGlybmFtZSwKICAgIGV4dG5hbWU6ICgpID0+IGV4dG5hbWUsCiAgICBmb3JtYXQ6ICgpID0+IGZvcm1hdCwKICAgIGZyb21GaWxlVXJsOiAoKSA9PiBmcm9tRmlsZVVybCwKICAgIGlzQWJzb2x1dGU6ICgpID0+IGlzQWJzb2x1dGUsCiAgICBqb2luOiAoKSA9PiBqb2luLAogICAgbm9ybWFsaXplOiAoKSA9PiBub3JtYWxpemUsCiAgICBwYXJzZTogKCkgPT4gcGFyc2UyLAogICAgcmVsYXRpdmU6ICgpID0+IHJlbGF0aXZlLAogICAgcmVzb2x2ZTogKCkgPT4gcmVzb2x2ZSwKICAgIHNlcDogKCkgPT4gc2VwLAogICAgdG9GaWxlVXJsOiAoKSA9PiB0b0ZpbGVVcmwsCiAgICB0b05hbWVzcGFjZWRQYXRoOiAoKSA9PiB0b05hbWVzcGFjZWRQYXRoCiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvcGF0aC9fY29uc3RhbnRzLnRzCiAgdmFyIENIQVJfVVBQRVJDQVNFX0EgPSA2NTsKICB2YXIgQ0hBUl9MT1dFUkNBU0VfQSA9IDk3OwogIHZhciBDSEFSX1VQUEVSQ0FTRV9aID0gOTA7CiAgdmFyIENIQVJfTE9XRVJDQVNFX1ogPSAxMjI7CiAgdmFyIENIQVJfRE9UID0gNDY7CiAgdmFyIENIQVJfRk9SV0FSRF9TTEFTSCA9IDQ3OwogIHZhciBDSEFSX0JBQ0tXQVJEX1NMQVNIID0gOTI7CiAgdmFyIENIQVJfQ09MT04yID0gNTg7CiAgdmFyIENIQVJfUVVFU1RJT05fTUFSSyA9IDYzOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL3BhdGgvX3V0aWwudHMKICBmdW5jdGlvbiBhc3NlcnRQYXRoKHBhdGg1KSB7CiAgICBpZiAodHlwZW9mIHBhdGg1ICE9PSAic3RyaW5nIikgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgIGBQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkocGF0aDUpfWAKICAgICAgKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gaXNQb3NpeFBhdGhTZXBhcmF0b3IoY29kZSkgewogICAgcmV0dXJuIGNvZGUgPT09IENIQVJfRk9SV0FSRF9TTEFTSDsKICB9CiAgZnVuY3Rpb24gaXNQYXRoU2VwYXJhdG9yKGNvZGUpIHsKICAgIHJldHVybiBpc1Bvc2l4UGF0aFNlcGFyYXRvcihjb2RlKSB8fCBjb2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIOwogIH0KICBmdW5jdGlvbiBpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpIHsKICAgIHJldHVybiBjb2RlID49IENIQVJfTE9XRVJDQVNFX0EgJiYgY29kZSA8PSBDSEFSX0xPV0VSQ0FTRV9aIHx8IGNvZGUgPj0gQ0hBUl9VUFBFUkNBU0VfQSAmJiBjb2RlIDw9IENIQVJfVVBQRVJDQVNFX1o7CiAgfQogIGZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZyhwYXRoNSwgYWxsb3dBYm92ZVJvb3QsIHNlcGFyYXRvciwgaXNQYXRoU2VwYXJhdG9yMykgewogICAgbGV0IHJlcyA9ICIiOwogICAgbGV0IGxhc3RTZWdtZW50TGVuZ3RoID0gMDsKICAgIGxldCBsYXN0U2xhc2ggPSAtMTsKICAgIGxldCBkb3RzID0gMDsKICAgIGxldCBjb2RlOwogICAgZm9yIChsZXQgaTQgPSAwLCBsZW4gPSBwYXRoNS5sZW5ndGg7IGk0IDw9IGxlbjsgKytpNCkgewogICAgICBpZiAoaTQgPCBsZW4pCiAgICAgICAgY29kZSA9IHBhdGg1LmNoYXJDb2RlQXQoaTQpOwogICAgICBlbHNlIGlmIChpc1BhdGhTZXBhcmF0b3IzKGNvZGUpKQogICAgICAgIGJyZWFrOwogICAgICBlbHNlCiAgICAgICAgY29kZSA9IENIQVJfRk9SV0FSRF9TTEFTSDsKICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjMoY29kZSkpIHsKICAgICAgICBpZiAobGFzdFNsYXNoID09PSBpNCAtIDEgfHwgZG90cyA9PT0gMSkgewogICAgICAgIH0gZWxzZSBpZiAobGFzdFNsYXNoICE9PSBpNCAtIDEgJiYgZG90cyA9PT0gMikgewogICAgICAgICAgaWYgKHJlcy5sZW5ndGggPCAyIHx8IGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8IHJlcy5jaGFyQ29kZUF0KHJlcy5sZW5ndGggLSAxKSAhPT0gQ0hBUl9ET1QgfHwgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDIpICE9PSBDSEFSX0RPVCkgewogICAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgICBjb25zdCBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZihzZXBhcmF0b3IpOwogICAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA9PT0gLTEpIHsKICAgICAgICAgICAgICAgIHJlcyA9ICIiOwogICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpOwogICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXMubGVuZ3RoIC0gMSAtIHJlcy5sYXN0SW5kZXhPZihzZXBhcmF0b3IpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpNDsKICAgICAgICAgICAgICBkb3RzID0gMDsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID09PSAyIHx8IHJlcy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICByZXMgPSAiIjsKICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7CiAgICAgICAgICAgICAgbGFzdFNsYXNoID0gaTQ7CiAgICAgICAgICAgICAgZG90cyA9IDA7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkgewogICAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApCiAgICAgICAgICAgICAgcmVzICs9IGAke3NlcGFyYXRvcn0uLmA7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICByZXMgPSAiLi4iOwogICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkKICAgICAgICAgICAgcmVzICs9IHNlcGFyYXRvciArIHBhdGg1LnNsaWNlKGxhc3RTbGFzaCArIDEsIGk0KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmVzID0gcGF0aDUuc2xpY2UobGFzdFNsYXNoICsgMSwgaTQpOwogICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSBpNCAtIGxhc3RTbGFzaCAtIDE7CiAgICAgICAgfQogICAgICAgIGxhc3RTbGFzaCA9IGk0OwogICAgICAgIGRvdHMgPSAwOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IENIQVJfRE9UICYmIGRvdHMgIT09IC0xKSB7CiAgICAgICAgKytkb3RzOwogICAgICB9IGVsc2UgewogICAgICAgIGRvdHMgPSAtMTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgZnVuY3Rpb24gX2Zvcm1hdChzZXA3LCBwYXRoT2JqZWN0KSB7CiAgICBjb25zdCBkaXIgPSBwYXRoT2JqZWN0LmRpciB8fCBwYXRoT2JqZWN0LnJvb3Q7CiAgICBjb25zdCBiYXNlID0gcGF0aE9iamVjdC5iYXNlIHx8IChwYXRoT2JqZWN0Lm5hbWUgfHwgIiIpICsgKHBhdGhPYmplY3QuZXh0IHx8ICIiKTsKICAgIGlmICghZGlyKQogICAgICByZXR1cm4gYmFzZTsKICAgIGlmIChkaXIgPT09IHBhdGhPYmplY3Qucm9vdCkKICAgICAgcmV0dXJuIGRpciArIGJhc2U7CiAgICByZXR1cm4gZGlyICsgc2VwNyArIGJhc2U7CiAgfQogIHZhciBXSElURVNQQUNFX0VOQ09ESU5HUyA9IHsKICAgICIJIjogIiUwOSIsCiAgICAiXG4iOiAiJTBBIiwKICAgICJcdiI6ICIlMEIiLAogICAgIlxmIjogIiUwQyIsCiAgICAiXHIiOiAiJTBEIiwKICAgICIgIjogIiUyMCIKICB9OwogIGZ1bmN0aW9uIGVuY29kZVdoaXRlc3BhY2Uoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2VBbGwoL1tcc10vZywgKGMxNykgPT4gewogICAgICByZXR1cm4gV0hJVEVTUEFDRV9FTkNPRElOR1NbYzE3XSA/PyBjMTc7CiAgICB9KTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvcGF0aC93aW4zMi50cwogIHZhciBzZXAgPSAiXFwiOwogIHZhciBkZWxpbWl0ZXIgPSAiOyI7CiAgZnVuY3Rpb24gcmVzb2x2ZSguLi5wYXRoU2VnbWVudHMpIHsKICAgIGxldCByZXNvbHZlZERldmljZSA9ICIiOwogICAgbGV0IHJlc29sdmVkVGFpbCA9ICIiOwogICAgbGV0IHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTsKICAgIGZvciAobGV0IGk0ID0gcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDE7IGk0ID49IC0xOyBpNC0tKSB7CiAgICAgIGxldCBwYXRoNTsKICAgICAgY29uc3QgeyBEZW5vOiBEZW5vMyB9ID0gZ2xvYmFsVGhpczsKICAgICAgaWYgKGk0ID49IDApIHsKICAgICAgICBwYXRoNSA9IHBhdGhTZWdtZW50c1tpNF07CiAgICAgIH0gZWxzZSBpZiAoIXJlc29sdmVkRGV2aWNlKSB7CiAgICAgICAgaWYgKHR5cGVvZiBEZW5vMz8uY3dkICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJSZXNvbHZlZCBhIGRyaXZlLWxldHRlci1sZXNzIHBhdGggd2l0aG91dCBhIENXRC4iKTsKICAgICAgICB9CiAgICAgICAgcGF0aDUgPSBEZW5vMy5jd2QoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAodHlwZW9mIERlbm8zPy5lbnY/LmdldCAhPT0gImZ1bmN0aW9uIiB8fCB0eXBlb2YgRGVubzM/LmN3ZCAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVzb2x2ZWQgYSByZWxhdGl2ZSBwYXRoIHdpdGhvdXQgYSBDV0QuIik7CiAgICAgICAgfQogICAgICAgIHBhdGg1ID0gRGVubzMuY3dkKCk7CiAgICAgICAgaWYgKHBhdGg1ID09PSB2b2lkIDAgfHwgcGF0aDUuc2xpY2UoMCwgMykudG9Mb3dlckNhc2UoKSAhPT0gYCR7cmVzb2x2ZWREZXZpY2UudG9Mb3dlckNhc2UoKX1cXGApIHsKICAgICAgICAgIHBhdGg1ID0gYCR7cmVzb2x2ZWREZXZpY2V9XFxgOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3NlcnRQYXRoKHBhdGg1KTsKICAgICAgY29uc3QgbGVuID0gcGF0aDUubGVuZ3RoOwogICAgICBpZiAobGVuID09PSAwKQogICAgICAgIGNvbnRpbnVlOwogICAgICBsZXQgcm9vdEVuZCA9IDA7CiAgICAgIGxldCBkZXZpY2UgPSAiIjsKICAgICAgbGV0IGlzQWJzb2x1dGU3ID0gZmFsc2U7CiAgICAgIGNvbnN0IGNvZGUgPSBwYXRoNS5jaGFyQ29kZUF0KDApOwogICAgICBpZiAobGVuID4gMSkgewogICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHsKICAgICAgICAgIGlzQWJzb2x1dGU3ID0gdHJ1ZTsKICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aDUuY2hhckNvZGVBdCgxKSkpIHsKICAgICAgICAgICAgbGV0IGoxOSA9IDI7CiAgICAgICAgICAgIGxldCBsYXN0ID0gajE5OwogICAgICAgICAgICBmb3IgKDsgajE5IDwgbGVuOyArK2oxOSkgewogICAgICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChqMTkgPCBsZW4gJiYgajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgY29uc3QgZmlyc3RQYXJ0ID0gcGF0aDUuc2xpY2UobGFzdCwgajE5KTsKICAgICAgICAgICAgICBsYXN0ID0gajE5OwogICAgICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcihwYXRoNS5jaGFyQ29kZUF0KGoxOSkpKQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGoxOSA8IGxlbiAmJiBqMTkgIT09IGxhc3QpIHsKICAgICAgICAgICAgICAgIGxhc3QgPSBqMTk7CiAgICAgICAgICAgICAgICBmb3IgKDsgajE5IDwgbGVuOyArK2oxOSkgewogICAgICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGg1LmNoYXJDb2RlQXQoajE5KSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoajE5ID09PSBsZW4pIHsKICAgICAgICAgICAgICAgICAgZGV2aWNlID0gYFxcXFwke2ZpcnN0UGFydH1cXCR7cGF0aDUuc2xpY2UobGFzdCl9YDsKICAgICAgICAgICAgICAgICAgcm9vdEVuZCA9IGoxOTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgICAgIGRldmljZSA9IGBcXFxcJHtmaXJzdFBhcnR9XFwke3BhdGg1LnNsaWNlKGxhc3QsIGoxOSl9YDsKICAgICAgICAgICAgICAgICAgcm9vdEVuZCA9IGoxOTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJvb3RFbmQgPSAxOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlKSkgewogICAgICAgICAgaWYgKHBhdGg1LmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04yKSB7CiAgICAgICAgICAgIGRldmljZSA9IHBhdGg1LnNsaWNlKDAsIDIpOwogICAgICAgICAgICByb290RW5kID0gMjsKICAgICAgICAgICAgaWYgKGxlbiA+IDIpIHsKICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGg1LmNoYXJDb2RlQXQoMikpKSB7CiAgICAgICAgICAgICAgICBpc0Fic29sdXRlNyA9IHRydWU7CiAgICAgICAgICAgICAgICByb290RW5kID0gMzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7CiAgICAgICAgcm9vdEVuZCA9IDE7CiAgICAgICAgaXNBYnNvbHV0ZTcgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChkZXZpY2UubGVuZ3RoID4gMCAmJiByZXNvbHZlZERldmljZS5sZW5ndGggPiAwICYmIGRldmljZS50b0xvd2VyQ2FzZSgpICE9PSByZXNvbHZlZERldmljZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKHJlc29sdmVkRGV2aWNlLmxlbmd0aCA9PT0gMCAmJiBkZXZpY2UubGVuZ3RoID4gMCkgewogICAgICAgIHJlc29sdmVkRGV2aWNlID0gZGV2aWNlOwogICAgICB9CiAgICAgIGlmICghcmVzb2x2ZWRBYnNvbHV0ZSkgewogICAgICAgIHJlc29sdmVkVGFpbCA9IGAke3BhdGg1LnNsaWNlKHJvb3RFbmQpfVxcJHtyZXNvbHZlZFRhaWx9YDsKICAgICAgICByZXNvbHZlZEFic29sdXRlID0gaXNBYnNvbHV0ZTc7CiAgICAgIH0KICAgICAgaWYgKHJlc29sdmVkQWJzb2x1dGUgJiYgcmVzb2x2ZWREZXZpY2UubGVuZ3RoID4gMCkKICAgICAgICBicmVhazsKICAgIH0KICAgIHJlc29sdmVkVGFpbCA9IG5vcm1hbGl6ZVN0cmluZygKICAgICAgcmVzb2x2ZWRUYWlsLAogICAgICAhcmVzb2x2ZWRBYnNvbHV0ZSwKICAgICAgIlxcIiwKICAgICAgaXNQYXRoU2VwYXJhdG9yCiAgICApOwogICAgcmV0dXJuIHJlc29sdmVkRGV2aWNlICsgKHJlc29sdmVkQWJzb2x1dGUgPyAiXFwiIDogIiIpICsgcmVzb2x2ZWRUYWlsIHx8ICIuIjsKICB9CiAgZnVuY3Rpb24gbm9ybWFsaXplKHBhdGg1KSB7CiAgICBhc3NlcnRQYXRoKHBhdGg1KTsKICAgIGNvbnN0IGxlbiA9IHBhdGg1Lmxlbmd0aDsKICAgIGlmIChsZW4gPT09IDApCiAgICAgIHJldHVybiAiLiI7CiAgICBsZXQgcm9vdEVuZCA9IDA7CiAgICBsZXQgZGV2aWNlOwogICAgbGV0IGlzQWJzb2x1dGU3ID0gZmFsc2U7CiAgICBjb25zdCBjb2RlID0gcGF0aDUuY2hhckNvZGVBdCgwKTsKICAgIGlmIChsZW4gPiAxKSB7CiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHsKICAgICAgICBpc0Fic29sdXRlNyA9IHRydWU7CiAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoNS5jaGFyQ29kZUF0KDEpKSkgewogICAgICAgICAgbGV0IGoxOSA9IDI7CiAgICAgICAgICBsZXQgbGFzdCA9IGoxOTsKICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChqMTkgPCBsZW4gJiYgajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgIGNvbnN0IGZpcnN0UGFydCA9IHBhdGg1LnNsaWNlKGxhc3QsIGoxOSk7CiAgICAgICAgICAgIGxhc3QgPSBqMTk7CiAgICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChqMTkgPCBsZW4gJiYgajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgbGFzdCA9IGoxOTsKICAgICAgICAgICAgICBmb3IgKDsgajE5IDwgbGVuOyArK2oxOSkgewogICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoNS5jaGFyQ29kZUF0KGoxOSkpKQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGoxOSA9PT0gbGVuKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYFxcXFwke2ZpcnN0UGFydH1cXCR7cGF0aDUuc2xpY2UobGFzdCl9XFxgOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXCR7Zmlyc3RQYXJ0fVxcJHtwYXRoNS5zbGljZShsYXN0LCBqMTkpfWA7CiAgICAgICAgICAgICAgICByb290RW5kID0gajE5OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByb290RW5kID0gMTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlKSkgewogICAgICAgIGlmIChwYXRoNS5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OMikgewogICAgICAgICAgZGV2aWNlID0gcGF0aDUuc2xpY2UoMCwgMik7CiAgICAgICAgICByb290RW5kID0gMjsKICAgICAgICAgIGlmIChsZW4gPiAyKSB7CiAgICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aDUuY2hhckNvZGVBdCgyKSkpIHsKICAgICAgICAgICAgICBpc0Fic29sdXRlNyA9IHRydWU7CiAgICAgICAgICAgICAgcm9vdEVuZCA9IDM7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7CiAgICAgIHJldHVybiAiXFwiOwogICAgfQogICAgbGV0IHRhaWw7CiAgICBpZiAocm9vdEVuZCA8IGxlbikgewogICAgICB0YWlsID0gbm9ybWFsaXplU3RyaW5nKAogICAgICAgIHBhdGg1LnNsaWNlKHJvb3RFbmQpLAogICAgICAgICFpc0Fic29sdXRlNywKICAgICAgICAiXFwiLAogICAgICAgIGlzUGF0aFNlcGFyYXRvcgogICAgICApOwogICAgfSBlbHNlIHsKICAgICAgdGFpbCA9ICIiOwogICAgfQogICAgaWYgKHRhaWwubGVuZ3RoID09PSAwICYmICFpc0Fic29sdXRlNykKICAgICAgdGFpbCA9ICIuIjsKICAgIGlmICh0YWlsLmxlbmd0aCA+IDAgJiYgaXNQYXRoU2VwYXJhdG9yKHBhdGg1LmNoYXJDb2RlQXQobGVuIC0gMSkpKSB7CiAgICAgIHRhaWwgKz0gIlxcIjsKICAgIH0KICAgIGlmIChkZXZpY2UgPT09IHZvaWQgMCkgewogICAgICBpZiAoaXNBYnNvbHV0ZTcpIHsKICAgICAgICBpZiAodGFpbC5sZW5ndGggPiAwKQogICAgICAgICAgcmV0dXJuIGBcXCR7dGFpbH1gOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiAiXFwiOwogICAgICB9IGVsc2UgaWYgKHRhaWwubGVuZ3RoID4gMCkgewogICAgICAgIHJldHVybiB0YWlsOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAiIjsKICAgICAgfQogICAgfSBlbHNlIGlmIChpc0Fic29sdXRlNykgewogICAgICBpZiAodGFpbC5sZW5ndGggPiAwKQogICAgICAgIHJldHVybiBgJHtkZXZpY2V9XFwke3RhaWx9YDsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBgJHtkZXZpY2V9XFxgOwogICAgfSBlbHNlIGlmICh0YWlsLmxlbmd0aCA+IDApIHsKICAgICAgcmV0dXJuIGRldmljZSArIHRhaWw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZGV2aWNlOwogICAgfQogIH0KICBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGg1KSB7CiAgICBhc3NlcnRQYXRoKHBhdGg1KTsKICAgIGNvbnN0IGxlbiA9IHBhdGg1Lmxlbmd0aDsKICAgIGlmIChsZW4gPT09IDApCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGNvZGUgPSBwYXRoNS5jaGFyQ29kZUF0KDApOwogICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlKSkgewogICAgICBpZiAobGVuID4gMiAmJiBwYXRoNS5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OMikgewogICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aDUuY2hhckNvZGVBdCgyKSkpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICBmdW5jdGlvbiBqb2luKC4uLnBhdGhzKSB7CiAgICBjb25zdCBwYXRoc0NvdW50ID0gcGF0aHMubGVuZ3RoOwogICAgaWYgKHBhdGhzQ291bnQgPT09IDApCiAgICAgIHJldHVybiAiLiI7CiAgICBsZXQgam9pbmVkOwogICAgbGV0IGZpcnN0UGFydCA9IG51bGw7CiAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgcGF0aHNDb3VudDsgKytpNCkgewogICAgICBjb25zdCBwYXRoNSA9IHBhdGhzW2k0XTsKICAgICAgYXNzZXJ0UGF0aChwYXRoNSk7CiAgICAgIGlmIChwYXRoNS5sZW5ndGggPiAwKSB7CiAgICAgICAgaWYgKGpvaW5lZCA9PT0gdm9pZCAwKQogICAgICAgICAgam9pbmVkID0gZmlyc3RQYXJ0ID0gcGF0aDU7CiAgICAgICAgZWxzZQogICAgICAgICAgam9pbmVkICs9IGBcXCR7cGF0aDV9YDsKICAgICAgfQogICAgfQogICAgaWYgKGpvaW5lZCA9PT0gdm9pZCAwKQogICAgICByZXR1cm4gIi4iOwogICAgbGV0IG5lZWRzUmVwbGFjZSA9IHRydWU7CiAgICBsZXQgc2xhc2hDb3VudCA9IDA7CiAgICBhc3NlcnQoZmlyc3RQYXJ0ICE9IG51bGwpOwogICAgaWYgKGlzUGF0aFNlcGFyYXRvcihmaXJzdFBhcnQuY2hhckNvZGVBdCgwKSkpIHsKICAgICAgKytzbGFzaENvdW50OwogICAgICBjb25zdCBmaXJzdExlbiA9IGZpcnN0UGFydC5sZW5ndGg7CiAgICAgIGlmIChmaXJzdExlbiA+IDEpIHsKICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGZpcnN0UGFydC5jaGFyQ29kZUF0KDEpKSkgewogICAgICAgICAgKytzbGFzaENvdW50OwogICAgICAgICAgaWYgKGZpcnN0TGVuID4gMikgewogICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGZpcnN0UGFydC5jaGFyQ29kZUF0KDIpKSkKICAgICAgICAgICAgICArK3NsYXNoQ291bnQ7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIG5lZWRzUmVwbGFjZSA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAobmVlZHNSZXBsYWNlKSB7CiAgICAgIGZvciAoOyBzbGFzaENvdW50IDwgam9pbmVkLmxlbmd0aDsgKytzbGFzaENvdW50KSB7CiAgICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3Ioam9pbmVkLmNoYXJDb2RlQXQoc2xhc2hDb3VudCkpKQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKHNsYXNoQ291bnQgPj0gMikKICAgICAgICBqb2luZWQgPSBgXFwke2pvaW5lZC5zbGljZShzbGFzaENvdW50KX1gOwogICAgfQogICAgcmV0dXJuIG5vcm1hbGl6ZShqb2luZWQpOwogIH0KICBmdW5jdGlvbiByZWxhdGl2ZShmcm9tMiwgdG8pIHsKICAgIGFzc2VydFBhdGgoZnJvbTIpOwogICAgYXNzZXJ0UGF0aCh0byk7CiAgICBpZiAoZnJvbTIgPT09IHRvKQogICAgICByZXR1cm4gIiI7CiAgICBjb25zdCBmcm9tT3JpZyA9IHJlc29sdmUoZnJvbTIpOwogICAgY29uc3QgdG9PcmlnID0gcmVzb2x2ZSh0byk7CiAgICBpZiAoZnJvbU9yaWcgPT09IHRvT3JpZykKICAgICAgcmV0dXJuICIiOwogICAgZnJvbTIgPSBmcm9tT3JpZy50b0xvd2VyQ2FzZSgpOwogICAgdG8gPSB0b09yaWcudG9Mb3dlckNhc2UoKTsKICAgIGlmIChmcm9tMiA9PT0gdG8pCiAgICAgIHJldHVybiAiIjsKICAgIGxldCBmcm9tU3RhcnQgPSAwOwogICAgbGV0IGZyb21FbmQgPSBmcm9tMi5sZW5ndGg7CiAgICBmb3IgKDsgZnJvbVN0YXJ0IDwgZnJvbUVuZDsgKytmcm9tU3RhcnQpIHsKICAgICAgaWYgKGZyb20yLmNoYXJDb2RlQXQoZnJvbVN0YXJ0KSAhPT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkKICAgICAgICBicmVhazsKICAgIH0KICAgIGZvciAoOyBmcm9tRW5kIC0gMSA+IGZyb21TdGFydDsgLS1mcm9tRW5kKSB7CiAgICAgIGlmIChmcm9tMi5jaGFyQ29kZUF0KGZyb21FbmQgLSAxKSAhPT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkKICAgICAgICBicmVhazsKICAgIH0KICAgIGNvbnN0IGZyb21MZW4gPSBmcm9tRW5kIC0gZnJvbVN0YXJ0OwogICAgbGV0IHRvU3RhcnQgPSAwOwogICAgbGV0IHRvRW5kID0gdG8ubGVuZ3RoOwogICAgZm9yICg7IHRvU3RhcnQgPCB0b0VuZDsgKyt0b1N0YXJ0KSB7CiAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKQogICAgICAgIGJyZWFrOwogICAgfQogICAgZm9yICg7IHRvRW5kIC0gMSA+IHRvU3RhcnQ7IC0tdG9FbmQpIHsKICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9FbmQgLSAxKSAhPT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkKICAgICAgICBicmVhazsKICAgIH0KICAgIGNvbnN0IHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0OwogICAgY29uc3QgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuOwogICAgbGV0IGxhc3RDb21tb25TZXAgPSAtMTsKICAgIGxldCBpNCA9IDA7CiAgICBmb3IgKDsgaTQgPD0gbGVuZ3RoOyArK2k0KSB7CiAgICAgIGlmIChpNCA9PT0gbGVuZ3RoKSB7CiAgICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7CiAgICAgICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaTQpID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7CiAgICAgICAgICAgIHJldHVybiB0b09yaWcuc2xpY2UodG9TdGFydCArIGk0ICsgMSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGk0ID09PSAyKSB7CiAgICAgICAgICAgIHJldHVybiB0b09yaWcuc2xpY2UodG9TdGFydCArIGk0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGZyb21MZW4gPiBsZW5ndGgpIHsKICAgICAgICAgIGlmIChmcm9tMi5jaGFyQ29kZUF0KGZyb21TdGFydCArIGk0KSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkgewogICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTQ7CiAgICAgICAgICB9IGVsc2UgaWYgKGk0ID09PSAyKSB7CiAgICAgICAgICAgIGxhc3RDb21tb25TZXAgPSAzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjb25zdCBmcm9tQ29kZSA9IGZyb20yLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaTQpOwogICAgICBjb25zdCB0b0NvZGUgPSB0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpNCk7CiAgICAgIGlmIChmcm9tQ29kZSAhPT0gdG9Db2RlKQogICAgICAgIGJyZWFrOwogICAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkKICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTQ7CiAgICB9CiAgICBpZiAoaTQgIT09IGxlbmd0aCAmJiBsYXN0Q29tbW9uU2VwID09PSAtMSkgewogICAgICByZXR1cm4gdG9PcmlnOwogICAgfQogICAgbGV0IG91dCA9ICIiOwogICAgaWYgKGxhc3RDb21tb25TZXAgPT09IC0xKQogICAgICBsYXN0Q29tbW9uU2VwID0gMDsKICAgIGZvciAoaTQgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaTQgPD0gZnJvbUVuZDsgKytpNCkgewogICAgICBpZiAoaTQgPT09IGZyb21FbmQgfHwgZnJvbTIuY2hhckNvZGVBdChpNCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHsKICAgICAgICBpZiAob3V0Lmxlbmd0aCA9PT0gMCkKICAgICAgICAgIG91dCArPSAiLi4iOwogICAgICAgIGVsc2UKICAgICAgICAgIG91dCArPSAiXFwuLiI7CiAgICAgIH0KICAgIH0KICAgIGlmIChvdXQubGVuZ3RoID4gMCkgewogICAgICByZXR1cm4gb3V0ICsgdG9PcmlnLnNsaWNlKHRvU3RhcnQgKyBsYXN0Q29tbW9uU2VwLCB0b0VuZCk7CiAgICB9IGVsc2UgewogICAgICB0b1N0YXJ0ICs9IGxhc3RDb21tb25TZXA7CiAgICAgIGlmICh0b09yaWcuY2hhckNvZGVBdCh0b1N0YXJ0KSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkKICAgICAgICArK3RvU3RhcnQ7CiAgICAgIHJldHVybiB0b09yaWcuc2xpY2UodG9TdGFydCwgdG9FbmQpOwogICAgfQogIH0KICBmdW5jdGlvbiB0b05hbWVzcGFjZWRQYXRoKHBhdGg1KSB7CiAgICBpZiAodHlwZW9mIHBhdGg1ICE9PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHBhdGg1OwogICAgaWYgKHBhdGg1Lmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShwYXRoNSk7CiAgICBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+PSAzKSB7CiAgICAgIGlmIChyZXNvbHZlZFBhdGguY2hhckNvZGVBdCgwKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkgewogICAgICAgIGlmIChyZXNvbHZlZFBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkgewogICAgICAgICAgY29uc3QgY29kZSA9IHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDIpOwogICAgICAgICAgaWYgKGNvZGUgIT09IENIQVJfUVVFU1RJT05fTUFSSyAmJiBjb2RlICE9PSBDSEFSX0RPVCkgewogICAgICAgICAgICByZXR1cm4gYFxcXFw/XFxVTkNcXCR7cmVzb2x2ZWRQYXRoLnNsaWNlKDIpfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlzV2luZG93c0RldmljZVJvb3QocmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMCkpKSB7CiAgICAgICAgaWYgKHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OMiAmJiByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgyKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkgewogICAgICAgICAgcmV0dXJuIGBcXFxcP1xcJHtyZXNvbHZlZFBhdGh9YDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwYXRoNTsKICB9CiAgZnVuY3Rpb24gZGlybmFtZShwYXRoNSkgewogICAgYXNzZXJ0UGF0aChwYXRoNSk7CiAgICBjb25zdCBsZW4gPSBwYXRoNS5sZW5ndGg7CiAgICBpZiAobGVuID09PSAwKQogICAgICByZXR1cm4gIi4iOwogICAgbGV0IHJvb3RFbmQgPSAtMTsKICAgIGxldCBlbmQgPSAtMTsKICAgIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgbGV0IG9mZnNldCA9IDA7CiAgICBjb25zdCBjb2RlID0gcGF0aDUuY2hhckNvZGVBdCgwKTsKICAgIGlmIChsZW4gPiAxKSB7CiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHsKICAgICAgICByb290RW5kID0gb2Zmc2V0ID0gMTsKICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGg1LmNoYXJDb2RlQXQoMSkpKSB7CiAgICAgICAgICBsZXQgajE5ID0gMjsKICAgICAgICAgIGxldCBsYXN0ID0gajE5OwogICAgICAgICAgZm9yICg7IGoxOSA8IGxlbjsgKytqMTkpIHsKICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoNS5jaGFyQ29kZUF0KGoxOSkpKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGoxOSA8IGxlbiAmJiBqMTkgIT09IGxhc3QpIHsKICAgICAgICAgICAgbGFzdCA9IGoxOTsKICAgICAgICAgICAgZm9yICg7IGoxOSA8IGxlbjsgKytqMTkpIHsKICAgICAgICAgICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcihwYXRoNS5jaGFyQ29kZUF0KGoxOSkpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGoxOSA8IGxlbiAmJiBqMTkgIT09IGxhc3QpIHsKICAgICAgICAgICAgICBsYXN0ID0gajE5OwogICAgICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGg1LmNoYXJDb2RlQXQoajE5KSkpCiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoajE5ID09PSBsZW4pIHsKICAgICAgICAgICAgICAgIHJldHVybiBwYXRoNTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGoxOSAhPT0gbGFzdCkgewogICAgICAgICAgICAgICAgcm9vdEVuZCA9IG9mZnNldCA9IGoxOSArIDE7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlzV2luZG93c0RldmljZVJvb3QoY29kZSkpIHsKICAgICAgICBpZiAocGF0aDUuY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTjIpIHsKICAgICAgICAgIHJvb3RFbmQgPSBvZmZzZXQgPSAyOwogICAgICAgICAgaWYgKGxlbiA+IDIpIHsKICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoNS5jaGFyQ29kZUF0KDIpKSkKICAgICAgICAgICAgICByb290RW5kID0gb2Zmc2V0ID0gMzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7CiAgICAgIHJldHVybiBwYXRoNTsKICAgIH0KICAgIGZvciAobGV0IGk0ID0gbGVuIC0gMTsgaTQgPj0gb2Zmc2V0OyAtLWk0KSB7CiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aDUuY2hhckNvZGVBdChpNCkpKSB7CiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgIGVuZCA9IGk0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoZW5kID09PSAtMSkgewogICAgICBpZiAocm9vdEVuZCA9PT0gLTEpCiAgICAgICAgcmV0dXJuICIuIjsKICAgICAgZWxzZQogICAgICAgIGVuZCA9IHJvb3RFbmQ7CiAgICB9CiAgICByZXR1cm4gcGF0aDUuc2xpY2UoMCwgZW5kKTsKICB9CiAgZnVuY3Rpb24gYmFzZW5hbWUocGF0aDUsIGV4dCA9ICIiKSB7CiAgICBpZiAoZXh0ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGV4dCAhPT0gInN0cmluZyIpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignImV4dCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpOwogICAgfQogICAgYXNzZXJ0UGF0aChwYXRoNSk7CiAgICBsZXQgc3RhcnQgPSAwOwogICAgbGV0IGVuZCA9IC0xOwogICAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7CiAgICBsZXQgaTQ7CiAgICBpZiAocGF0aDUubGVuZ3RoID49IDIpIHsKICAgICAgY29uc3QgZHJpdmUgPSBwYXRoNS5jaGFyQ29kZUF0KDApOwogICAgICBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChkcml2ZSkpIHsKICAgICAgICBpZiAocGF0aDUuY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTjIpCiAgICAgICAgICBzdGFydCA9IDI7CiAgICAgIH0KICAgIH0KICAgIGlmIChleHQgIT09IHZvaWQgMCAmJiBleHQubGVuZ3RoID4gMCAmJiBleHQubGVuZ3RoIDw9IHBhdGg1Lmxlbmd0aCkgewogICAgICBpZiAoZXh0Lmxlbmd0aCA9PT0gcGF0aDUubGVuZ3RoICYmIGV4dCA9PT0gcGF0aDUpCiAgICAgICAgcmV0dXJuICIiOwogICAgICBsZXQgZXh0SWR4ID0gZXh0Lmxlbmd0aCAtIDE7CiAgICAgIGxldCBmaXJzdE5vblNsYXNoRW5kID0gLTE7CiAgICAgIGZvciAoaTQgPSBwYXRoNS5sZW5ndGggLSAxOyBpNCA+PSBzdGFydDsgLS1pNCkgewogICAgICAgIGNvbnN0IGNvZGUgPSBwYXRoNS5jaGFyQ29kZUF0KGk0KTsKICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7CiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkgewogICAgICAgICAgICBzdGFydCA9IGk0ICsgMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChmaXJzdE5vblNsYXNoRW5kID09PSAtMSkgewogICAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTsKICAgICAgICAgICAgZmlyc3ROb25TbGFzaEVuZCA9IGk0ICsgMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChleHRJZHggPj0gMCkgewogICAgICAgICAgICBpZiAoY29kZSA9PT0gZXh0LmNoYXJDb2RlQXQoZXh0SWR4KSkgewogICAgICAgICAgICAgIGlmICgtLWV4dElkeCA9PT0gLTEpIHsKICAgICAgICAgICAgICAgIGVuZCA9IGk0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBleHRJZHggPSAtMTsKICAgICAgICAgICAgICBlbmQgPSBmaXJzdE5vblNsYXNoRW5kOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdGFydCA9PT0gZW5kKQogICAgICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7CiAgICAgIGVsc2UgaWYgKGVuZCA9PT0gLTEpCiAgICAgICAgZW5kID0gcGF0aDUubGVuZ3RoOwogICAgICByZXR1cm4gcGF0aDUuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGk0ID0gcGF0aDUubGVuZ3RoIC0gMTsgaTQgPj0gc3RhcnQ7IC0taTQpIHsKICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGg1LmNoYXJDb2RlQXQoaTQpKSkgewogICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgICAgc3RhcnQgPSBpNCArIDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZW5kID09PSAtMSkgewogICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7CiAgICAgICAgICBlbmQgPSBpNCArIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChlbmQgPT09IC0xKQogICAgICAgIHJldHVybiAiIjsKICAgICAgcmV0dXJuIHBhdGg1LnNsaWNlKHN0YXJ0LCBlbmQpOwogICAgfQogIH0KICBmdW5jdGlvbiBleHRuYW1lKHBhdGg1KSB7CiAgICBhc3NlcnRQYXRoKHBhdGg1KTsKICAgIGxldCBzdGFydCA9IDA7CiAgICBsZXQgc3RhcnREb3QgPSAtMTsKICAgIGxldCBzdGFydFBhcnQgPSAwOwogICAgbGV0IGVuZCA9IC0xOwogICAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7CiAgICBsZXQgcHJlRG90U3RhdGUgPSAwOwogICAgaWYgKHBhdGg1Lmxlbmd0aCA+PSAyICYmIHBhdGg1LmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04yICYmIGlzV2luZG93c0RldmljZVJvb3QocGF0aDUuY2hhckNvZGVBdCgwKSkpIHsKICAgICAgc3RhcnQgPSBzdGFydFBhcnQgPSAyOwogICAgfQogICAgZm9yIChsZXQgaTQgPSBwYXRoNS5sZW5ndGggLSAxOyBpNCA+PSBzdGFydDsgLS1pNCkgewogICAgICBjb25zdCBjb2RlID0gcGF0aDUuY2hhckNvZGVBdChpNCk7CiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHsKICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkgewogICAgICAgICAgc3RhcnRQYXJ0ID0gaTQgKyAxOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChlbmQgPT09IC0xKSB7CiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7CiAgICAgICAgZW5kID0gaTQgKyAxOwogICAgICB9CiAgICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkgewogICAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpCiAgICAgICAgICBzdGFydERvdCA9IGk0OwogICAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKQogICAgICAgICAgcHJlRG90U3RhdGUgPSAxOwogICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkgewogICAgICAgIHByZURvdFN0YXRlID0gLTE7CiAgICAgIH0KICAgIH0KICAgIGlmIChzdGFydERvdCA9PT0gLTEgfHwgZW5kID09PSAtMSB8fCBwcmVEb3RTdGF0ZSA9PT0gMCB8fCBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkgewogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICByZXR1cm4gcGF0aDUuc2xpY2Uoc3RhcnREb3QsIGVuZCk7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdChwYXRoT2JqZWN0KSB7CiAgICBpZiAocGF0aE9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcGF0aE9iamVjdCAhPT0gIm9iamVjdCIpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigKICAgICAgICBgVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIHBhdGhPYmplY3R9YAogICAgICApOwogICAgfQogICAgcmV0dXJuIF9mb3JtYXQoIlxcIiwgcGF0aE9iamVjdCk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlMihwYXRoNSkgewogICAgYXNzZXJ0UGF0aChwYXRoNSk7CiAgICBjb25zdCByZXQgPSB7IHJvb3Q6ICIiLCBkaXI6ICIiLCBiYXNlOiAiIiwgZXh0OiAiIiwgbmFtZTogIiIgfTsKICAgIGNvbnN0IGxlbiA9IHBhdGg1Lmxlbmd0aDsKICAgIGlmIChsZW4gPT09IDApCiAgICAgIHJldHVybiByZXQ7CiAgICBsZXQgcm9vdEVuZCA9IDA7CiAgICBsZXQgY29kZSA9IHBhdGg1LmNoYXJDb2RlQXQoMCk7CiAgICBpZiAobGVuID4gMSkgewogICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7CiAgICAgICAgcm9vdEVuZCA9IDE7CiAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoNS5jaGFyQ29kZUF0KDEpKSkgewogICAgICAgICAgbGV0IGoxOSA9IDI7CiAgICAgICAgICBsZXQgbGFzdCA9IGoxOTsKICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChqMTkgPCBsZW4gJiYgajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgIGxhc3QgPSBqMTk7CiAgICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChqMTkgPCBsZW4gJiYgajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgbGFzdCA9IGoxOTsKICAgICAgICAgICAgICBmb3IgKDsgajE5IDwgbGVuOyArK2oxOSkgewogICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoNS5jaGFyQ29kZUF0KGoxOSkpKQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGoxOSA9PT0gbGVuKSB7CiAgICAgICAgICAgICAgICByb290RW5kID0gajE5OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgICByb290RW5kID0gajE5ICsgMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlKSkgewogICAgICAgIGlmIChwYXRoNS5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OMikgewogICAgICAgICAgcm9vdEVuZCA9IDI7CiAgICAgICAgICBpZiAobGVuID4gMikgewogICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGg1LmNoYXJDb2RlQXQoMikpKSB7CiAgICAgICAgICAgICAgaWYgKGxlbiA9PT0gMykgewogICAgICAgICAgICAgICAgcmV0LnJvb3QgPSByZXQuZGlyID0gcGF0aDU7CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByb290RW5kID0gMzsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0LnJvb3QgPSByZXQuZGlyID0gcGF0aDU7CiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkgewogICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoNTsKICAgICAgcmV0dXJuIHJldDsKICAgIH0KICAgIGlmIChyb290RW5kID4gMCkKICAgICAgcmV0LnJvb3QgPSBwYXRoNS5zbGljZSgwLCByb290RW5kKTsKICAgIGxldCBzdGFydERvdCA9IC0xOwogICAgbGV0IHN0YXJ0UGFydCA9IHJvb3RFbmQ7CiAgICBsZXQgZW5kID0gLTE7CiAgICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTsKICAgIGxldCBpNCA9IHBhdGg1Lmxlbmd0aCAtIDE7CiAgICBsZXQgcHJlRG90U3RhdGUgPSAwOwogICAgZm9yICg7IGk0ID49IHJvb3RFbmQ7IC0taTQpIHsKICAgICAgY29kZSA9IHBhdGg1LmNoYXJDb2RlQXQoaTQpOwogICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7CiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgIHN0YXJ0UGFydCA9IGk0ICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoZW5kID09PSAtMSkgewogICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICAgIGVuZCA9IGk0ICsgMTsKICAgICAgfQogICAgICBpZiAoY29kZSA9PT0gQ0hBUl9ET1QpIHsKICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKQogICAgICAgICAgc3RhcnREb3QgPSBpNDsKICAgICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkKICAgICAgICAgIHByZURvdFN0YXRlID0gMTsKICAgICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHsKICAgICAgICBwcmVEb3RTdGF0ZSA9IC0xOwogICAgICB9CiAgICB9CiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHwgcHJlRG90U3RhdGUgPT09IDAgfHwgcHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHsKICAgICAgaWYgKGVuZCAhPT0gLTEpIHsKICAgICAgICByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aDUuc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXQubmFtZSA9IHBhdGg1LnNsaWNlKHN0YXJ0UGFydCwgc3RhcnREb3QpOwogICAgICByZXQuYmFzZSA9IHBhdGg1LnNsaWNlKHN0YXJ0UGFydCwgZW5kKTsKICAgICAgcmV0LmV4dCA9IHBhdGg1LnNsaWNlKHN0YXJ0RG90LCBlbmQpOwogICAgfQogICAgaWYgKHN0YXJ0UGFydCA+IDAgJiYgc3RhcnRQYXJ0ICE9PSByb290RW5kKSB7CiAgICAgIHJldC5kaXIgPSBwYXRoNS5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTsKICAgIH0gZWxzZQogICAgICByZXQuZGlyID0gcmV0LnJvb3Q7CiAgICByZXR1cm4gcmV0OwogIH0KICBmdW5jdGlvbiBmcm9tRmlsZVVybCh1cmwpIHsKICAgIHVybCA9IHVybCBpbnN0YW5jZW9mIFVSTCA/IHVybCA6IG5ldyBVUkwodXJsKTsKICAgIGlmICh1cmwucHJvdG9jb2wgIT0gImZpbGU6IikgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJNdXN0IGJlIGEgZmlsZSBVUkwuIik7CiAgICB9CiAgICBsZXQgcGF0aDUgPSBkZWNvZGVVUklDb21wb25lbnQoCiAgICAgIHVybC5wYXRobmFtZS5yZXBsYWNlKC9cLy9nLCAiXFwiKS5yZXBsYWNlKC8lKD8hWzAtOUEtRmEtZl17Mn0pL2csICIlMjUiKQogICAgKS5yZXBsYWNlKC9eXFwqKFtBLVphLXpdOikoXFx8JCkvLCAiJDFcXCIpOwogICAgaWYgKHVybC5ob3N0bmFtZSAhPSAiIikgewogICAgICBwYXRoNSA9IGBcXFxcJHt1cmwuaG9zdG5hbWV9JHtwYXRoNX1gOwogICAgfQogICAgcmV0dXJuIHBhdGg1OwogIH0KICBmdW5jdGlvbiB0b0ZpbGVVcmwocGF0aDUpIHsKICAgIGlmICghaXNBYnNvbHV0ZShwYXRoNSkpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiTXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIpOwogICAgfQogICAgY29uc3QgWywgaG9zdG5hbWUsIHBhdGhuYW1lXSA9IHBhdGg1Lm1hdGNoKAogICAgICAvXig/OlsvXFxdezJ9KFteL1xcXSspKD89Wy9cXF0oPzpbXi9cXF18JCkpKT8oLiopLwogICAgKTsKICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoImZpbGU6Ly8vIik7CiAgICB1cmwucGF0aG5hbWUgPSBlbmNvZGVXaGl0ZXNwYWNlKHBhdGhuYW1lLnJlcGxhY2UoLyUvZywgIiUyNSIpKTsKICAgIGlmIChob3N0bmFtZSAhPSBudWxsICYmIGhvc3RuYW1lICE9ICJsb2NhbGhvc3QiKSB7CiAgICAgIHVybC5ob3N0bmFtZSA9IGhvc3RuYW1lOwogICAgICBpZiAoIXVybC5ob3N0bmFtZSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaG9zdG5hbWUuIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB1cmw7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL3BhdGgvcG9zaXgudHMKICB2YXIgcG9zaXhfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KHBvc2l4X2V4cG9ydHMsIHsKICAgIGJhc2VuYW1lOiAoKSA9PiBiYXNlbmFtZTIsCiAgICBkZWxpbWl0ZXI6ICgpID0+IGRlbGltaXRlcjIsCiAgICBkaXJuYW1lOiAoKSA9PiBkaXJuYW1lMiwKICAgIGV4dG5hbWU6ICgpID0+IGV4dG5hbWUyLAogICAgZm9ybWF0OiAoKSA9PiBmb3JtYXQyLAogICAgZnJvbUZpbGVVcmw6ICgpID0+IGZyb21GaWxlVXJsMiwKICAgIGlzQWJzb2x1dGU6ICgpID0+IGlzQWJzb2x1dGUyLAogICAgam9pbjogKCkgPT4gam9pbjIsCiAgICBub3JtYWxpemU6ICgpID0+IG5vcm1hbGl6ZTIsCiAgICBwYXJzZTogKCkgPT4gcGFyc2UzLAogICAgcmVsYXRpdmU6ICgpID0+IHJlbGF0aXZlMiwKICAgIHJlc29sdmU6ICgpID0+IHJlc29sdmUyLAogICAgc2VwOiAoKSA9PiBzZXAyLAogICAgdG9GaWxlVXJsOiAoKSA9PiB0b0ZpbGVVcmwyLAogICAgdG9OYW1lc3BhY2VkUGF0aDogKCkgPT4gdG9OYW1lc3BhY2VkUGF0aDIKICB9KTsKICB2YXIgc2VwMiA9ICIvIjsKICB2YXIgZGVsaW1pdGVyMiA9ICI6IjsKICBmdW5jdGlvbiByZXNvbHZlMiguLi5wYXRoU2VnbWVudHMpIHsKICAgIGxldCByZXNvbHZlZFBhdGggPSAiIjsKICAgIGxldCByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7CiAgICBmb3IgKGxldCBpNCA9IHBhdGhTZWdtZW50cy5sZW5ndGggLSAxOyBpNCA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaTQtLSkgewogICAgICBsZXQgcGF0aDU7CiAgICAgIGlmIChpNCA+PSAwKQogICAgICAgIHBhdGg1ID0gcGF0aFNlZ21lbnRzW2k0XTsKICAgICAgZWxzZSB7CiAgICAgICAgY29uc3QgeyBEZW5vOiBEZW5vMyB9ID0gZ2xvYmFsVGhpczsKICAgICAgICBpZiAodHlwZW9mIERlbm8zPy5jd2QgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlJlc29sdmVkIGEgcmVsYXRpdmUgcGF0aCB3aXRob3V0IGEgQ1dELiIpOwogICAgICAgIH0KICAgICAgICBwYXRoNSA9IERlbm8zLmN3ZCgpOwogICAgICB9CiAgICAgIGFzc2VydFBhdGgocGF0aDUpOwogICAgICBpZiAocGF0aDUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgcmVzb2x2ZWRQYXRoID0gYCR7cGF0aDV9LyR7cmVzb2x2ZWRQYXRofWA7CiAgICAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoNS5jaGFyQ29kZUF0KDApID09PSBDSEFSX0ZPUldBUkRfU0xBU0g7CiAgICB9CiAgICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcoCiAgICAgIHJlc29sdmVkUGF0aCwKICAgICAgIXJlc29sdmVkQWJzb2x1dGUsCiAgICAgICIvIiwKICAgICAgaXNQb3NpeFBhdGhTZXBhcmF0b3IKICAgICk7CiAgICBpZiAocmVzb2x2ZWRBYnNvbHV0ZSkgewogICAgICBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDApCiAgICAgICAgcmV0dXJuIGAvJHtyZXNvbHZlZFBhdGh9YDsKICAgICAgZWxzZQogICAgICAgIHJldHVybiAiLyI7CiAgICB9IGVsc2UgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKQogICAgICByZXR1cm4gcmVzb2x2ZWRQYXRoOwogICAgZWxzZQogICAgICByZXR1cm4gIi4iOwogIH0KICBmdW5jdGlvbiBub3JtYWxpemUyKHBhdGg1KSB7CiAgICBhc3NlcnRQYXRoKHBhdGg1KTsKICAgIGlmIChwYXRoNS5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiAiLiI7CiAgICBjb25zdCBpc0Fic29sdXRlNyA9IHBhdGg1LmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDsKICAgIGNvbnN0IHRyYWlsaW5nU2VwYXJhdG9yID0gcGF0aDUuY2hhckNvZGVBdChwYXRoNS5sZW5ndGggLSAxKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIOwogICAgcGF0aDUgPSBub3JtYWxpemVTdHJpbmcocGF0aDUsICFpc0Fic29sdXRlNywgIi8iLCBpc1Bvc2l4UGF0aFNlcGFyYXRvcik7CiAgICBpZiAocGF0aDUubGVuZ3RoID09PSAwICYmICFpc0Fic29sdXRlNykKICAgICAgcGF0aDUgPSAiLiI7CiAgICBpZiAocGF0aDUubGVuZ3RoID4gMCAmJiB0cmFpbGluZ1NlcGFyYXRvcikKICAgICAgcGF0aDUgKz0gIi8iOwogICAgaWYgKGlzQWJzb2x1dGU3KQogICAgICByZXR1cm4gYC8ke3BhdGg1fWA7CiAgICByZXR1cm4gcGF0aDU7CiAgfQogIGZ1bmN0aW9uIGlzQWJzb2x1dGUyKHBhdGg1KSB7CiAgICBhc3NlcnRQYXRoKHBhdGg1KTsKICAgIHJldHVybiBwYXRoNS5sZW5ndGggPiAwICYmIHBhdGg1LmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDsKICB9CiAgZnVuY3Rpb24gam9pbjIoLi4ucGF0aHMpIHsKICAgIGlmIChwYXRocy5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiAiLiI7CiAgICBsZXQgam9pbmVkOwogICAgZm9yIChsZXQgaTQgPSAwLCBsZW4gPSBwYXRocy5sZW5ndGg7IGk0IDwgbGVuOyArK2k0KSB7CiAgICAgIGNvbnN0IHBhdGg1ID0gcGF0aHNbaTRdOwogICAgICBhc3NlcnRQYXRoKHBhdGg1KTsKICAgICAgaWYgKHBhdGg1Lmxlbmd0aCA+IDApIHsKICAgICAgICBpZiAoIWpvaW5lZCkKICAgICAgICAgIGpvaW5lZCA9IHBhdGg1OwogICAgICAgIGVsc2UKICAgICAgICAgIGpvaW5lZCArPSBgLyR7cGF0aDV9YDsKICAgICAgfQogICAgfQogICAgaWYgKCFqb2luZWQpCiAgICAgIHJldHVybiAiLiI7CiAgICByZXR1cm4gbm9ybWFsaXplMihqb2luZWQpOwogIH0KICBmdW5jdGlvbiByZWxhdGl2ZTIoZnJvbTIsIHRvKSB7CiAgICBhc3NlcnRQYXRoKGZyb20yKTsKICAgIGFzc2VydFBhdGgodG8pOwogICAgaWYgKGZyb20yID09PSB0bykKICAgICAgcmV0dXJuICIiOwogICAgZnJvbTIgPSByZXNvbHZlMihmcm9tMik7CiAgICB0byA9IHJlc29sdmUyKHRvKTsKICAgIGlmIChmcm9tMiA9PT0gdG8pCiAgICAgIHJldHVybiAiIjsKICAgIGxldCBmcm9tU3RhcnQgPSAxOwogICAgY29uc3QgZnJvbUVuZCA9IGZyb20yLmxlbmd0aDsKICAgIGZvciAoOyBmcm9tU3RhcnQgPCBmcm9tRW5kOyArK2Zyb21TdGFydCkgewogICAgICBpZiAoZnJvbTIuY2hhckNvZGVBdChmcm9tU3RhcnQpICE9PSBDSEFSX0ZPUldBUkRfU0xBU0gpCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBjb25zdCBmcm9tTGVuID0gZnJvbUVuZCAtIGZyb21TdGFydDsKICAgIGxldCB0b1N0YXJ0ID0gMTsKICAgIGNvbnN0IHRvRW5kID0gdG8ubGVuZ3RoOwogICAgZm9yICg7IHRvU3RhcnQgPCB0b0VuZDsgKyt0b1N0YXJ0KSB7CiAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQpICE9PSBDSEFSX0ZPUldBUkRfU0xBU0gpCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBjb25zdCB0b0xlbiA9IHRvRW5kIC0gdG9TdGFydDsKICAgIGNvbnN0IGxlbmd0aCA9IGZyb21MZW4gPCB0b0xlbiA/IGZyb21MZW4gOiB0b0xlbjsKICAgIGxldCBsYXN0Q29tbW9uU2VwID0gLTE7CiAgICBsZXQgaTQgPSAwOwogICAgZm9yICg7IGk0IDw9IGxlbmd0aDsgKytpNCkgewogICAgICBpZiAoaTQgPT09IGxlbmd0aCkgewogICAgICAgIGlmICh0b0xlbiA+IGxlbmd0aCkgewogICAgICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGk0KSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7CiAgICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaTQgKyAxKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaTQgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQgKyBpNCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChmcm9tTGVuID4gbGVuZ3RoKSB7CiAgICAgICAgICBpZiAoZnJvbTIuY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpNCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkgewogICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTQ7CiAgICAgICAgICB9IGVsc2UgaWYgKGk0ID09PSAwKSB7CiAgICAgICAgICAgIGxhc3RDb21tb25TZXAgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjb25zdCBmcm9tQ29kZSA9IGZyb20yLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaTQpOwogICAgICBjb25zdCB0b0NvZGUgPSB0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpNCk7CiAgICAgIGlmIChmcm9tQ29kZSAhPT0gdG9Db2RlKQogICAgICAgIGJyZWFrOwogICAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKQogICAgICAgIGxhc3RDb21tb25TZXAgPSBpNDsKICAgIH0KICAgIGxldCBvdXQgPSAiIjsKICAgIGZvciAoaTQgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaTQgPD0gZnJvbUVuZDsgKytpNCkgewogICAgICBpZiAoaTQgPT09IGZyb21FbmQgfHwgZnJvbTIuY2hhckNvZGVBdChpNCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkgewogICAgICAgIGlmIChvdXQubGVuZ3RoID09PSAwKQogICAgICAgICAgb3V0ICs9ICIuLiI7CiAgICAgICAgZWxzZQogICAgICAgICAgb3V0ICs9ICIvLi4iOwogICAgICB9CiAgICB9CiAgICBpZiAob3V0Lmxlbmd0aCA+IDApCiAgICAgIHJldHVybiBvdXQgKyB0by5zbGljZSh0b1N0YXJ0ICsgbGFzdENvbW1vblNlcCk7CiAgICBlbHNlIHsKICAgICAgdG9TdGFydCArPSBsYXN0Q29tbW9uU2VwOwogICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKQogICAgICAgICsrdG9TdGFydDsKICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQpOwogICAgfQogIH0KICBmdW5jdGlvbiB0b05hbWVzcGFjZWRQYXRoMihwYXRoNSkgewogICAgcmV0dXJuIHBhdGg1OwogIH0KICBmdW5jdGlvbiBkaXJuYW1lMihwYXRoNSkgewogICAgYXNzZXJ0UGF0aChwYXRoNSk7CiAgICBpZiAocGF0aDUubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gIi4iOwogICAgY29uc3QgaGFzUm9vdCA9IHBhdGg1LmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDsKICAgIGxldCBlbmQgPSAtMTsKICAgIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgZm9yIChsZXQgaTQgPSBwYXRoNS5sZW5ndGggLSAxOyBpNCA+PSAxOyAtLWk0KSB7CiAgICAgIGlmIChwYXRoNS5jaGFyQ29kZUF0KGk0KSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7CiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgIGVuZCA9IGk0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoZW5kID09PSAtMSkKICAgICAgcmV0dXJuIGhhc1Jvb3QgPyAiLyIgOiAiLiI7CiAgICBpZiAoaGFzUm9vdCAmJiBlbmQgPT09IDEpCiAgICAgIHJldHVybiAiLy8iOwogICAgcmV0dXJuIHBhdGg1LnNsaWNlKDAsIGVuZCk7CiAgfQogIGZ1bmN0aW9uIGJhc2VuYW1lMihwYXRoNSwgZXh0ID0gIiIpIHsKICAgIGlmIChleHQgIT09IHZvaWQgMCAmJiB0eXBlb2YgZXh0ICE9PSAic3RyaW5nIikgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCciZXh0IiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgICB9CiAgICBhc3NlcnRQYXRoKHBhdGg1KTsKICAgIGxldCBzdGFydCA9IDA7CiAgICBsZXQgZW5kID0gLTE7CiAgICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTsKICAgIGxldCBpNDsKICAgIGlmIChleHQgIT09IHZvaWQgMCAmJiBleHQubGVuZ3RoID4gMCAmJiBleHQubGVuZ3RoIDw9IHBhdGg1Lmxlbmd0aCkgewogICAgICBpZiAoZXh0Lmxlbmd0aCA9PT0gcGF0aDUubGVuZ3RoICYmIGV4dCA9PT0gcGF0aDUpCiAgICAgICAgcmV0dXJuICIiOwogICAgICBsZXQgZXh0SWR4ID0gZXh0Lmxlbmd0aCAtIDE7CiAgICAgIGxldCBmaXJzdE5vblNsYXNoRW5kID0gLTE7CiAgICAgIGZvciAoaTQgPSBwYXRoNS5sZW5ndGggLSAxOyBpNCA+PSAwOyAtLWk0KSB7CiAgICAgICAgY29uc3QgY29kZSA9IHBhdGg1LmNoYXJDb2RlQXQoaTQpOwogICAgICAgIGlmIChjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHsKICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7CiAgICAgICAgICAgIHN0YXJ0ID0gaTQgKyAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGZpcnN0Tm9uU2xhc2hFbmQgPT09IC0xKSB7CiAgICAgICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICAgICAgICBmaXJzdE5vblNsYXNoRW5kID0gaTQgKyAxOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGV4dElkeCA+PSAwKSB7CiAgICAgICAgICAgIGlmIChjb2RlID09PSBleHQuY2hhckNvZGVBdChleHRJZHgpKSB7CiAgICAgICAgICAgICAgaWYgKC0tZXh0SWR4ID09PSAtMSkgewogICAgICAgICAgICAgICAgZW5kID0gaTQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGV4dElkeCA9IC0xOwogICAgICAgICAgICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpCiAgICAgICAgZW5kID0gZmlyc3ROb25TbGFzaEVuZDsKICAgICAgZWxzZSBpZiAoZW5kID09PSAtMSkKICAgICAgICBlbmQgPSBwYXRoNS5sZW5ndGg7CiAgICAgIHJldHVybiBwYXRoNS5zbGljZShzdGFydCwgZW5kKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaTQgPSBwYXRoNS5sZW5ndGggLSAxOyBpNCA+PSAwOyAtLWk0KSB7CiAgICAgICAgaWYgKHBhdGg1LmNoYXJDb2RlQXQoaTQpID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHsKICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7CiAgICAgICAgICAgIHN0YXJ0ID0gaTQgKyAxOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGVuZCA9PT0gLTEpIHsKICAgICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICAgICAgZW5kID0gaTQgKyAxOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZW5kID09PSAtMSkKICAgICAgICByZXR1cm4gIiI7CiAgICAgIHJldHVybiBwYXRoNS5zbGljZShzdGFydCwgZW5kKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gZXh0bmFtZTIocGF0aDUpIHsKICAgIGFzc2VydFBhdGgocGF0aDUpOwogICAgbGV0IHN0YXJ0RG90ID0gLTE7CiAgICBsZXQgc3RhcnRQYXJ0ID0gMDsKICAgIGxldCBlbmQgPSAtMTsKICAgIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgbGV0IHByZURvdFN0YXRlID0gMDsKICAgIGZvciAobGV0IGk0ID0gcGF0aDUubGVuZ3RoIC0gMTsgaTQgPj0gMDsgLS1pNCkgewogICAgICBjb25zdCBjb2RlID0gcGF0aDUuY2hhckNvZGVBdChpNCk7CiAgICAgIGlmIChjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHsKICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkgewogICAgICAgICAgc3RhcnRQYXJ0ID0gaTQgKyAxOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChlbmQgPT09IC0xKSB7CiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7CiAgICAgICAgZW5kID0gaTQgKyAxOwogICAgICB9CiAgICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkgewogICAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpCiAgICAgICAgICBzdGFydERvdCA9IGk0OwogICAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKQogICAgICAgICAgcHJlRG90U3RhdGUgPSAxOwogICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkgewogICAgICAgIHByZURvdFN0YXRlID0gLTE7CiAgICAgIH0KICAgIH0KICAgIGlmIChzdGFydERvdCA9PT0gLTEgfHwgZW5kID09PSAtMSB8fCBwcmVEb3RTdGF0ZSA9PT0gMCB8fCBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkgewogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICByZXR1cm4gcGF0aDUuc2xpY2Uoc3RhcnREb3QsIGVuZCk7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdDIocGF0aE9iamVjdCkgewogICAgaWYgKHBhdGhPYmplY3QgPT09IG51bGwgfHwgdHlwZW9mIHBhdGhPYmplY3QgIT09ICJvYmplY3QiKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgYFRoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBwYXRoT2JqZWN0fWAKICAgICAgKTsKICAgIH0KICAgIHJldHVybiBfZm9ybWF0KCIvIiwgcGF0aE9iamVjdCk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlMyhwYXRoNSkgewogICAgYXNzZXJ0UGF0aChwYXRoNSk7CiAgICBjb25zdCByZXQgPSB7IHJvb3Q6ICIiLCBkaXI6ICIiLCBiYXNlOiAiIiwgZXh0OiAiIiwgbmFtZTogIiIgfTsKICAgIGlmIChwYXRoNS5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiByZXQ7CiAgICBjb25zdCBpc0Fic29sdXRlNyA9IHBhdGg1LmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDsKICAgIGxldCBzdGFydDsKICAgIGlmIChpc0Fic29sdXRlNykgewogICAgICByZXQucm9vdCA9ICIvIjsKICAgICAgc3RhcnQgPSAxOwogICAgfSBlbHNlIHsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgbGV0IHN0YXJ0RG90ID0gLTE7CiAgICBsZXQgc3RhcnRQYXJ0ID0gMDsKICAgIGxldCBlbmQgPSAtMTsKICAgIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgbGV0IGk0ID0gcGF0aDUubGVuZ3RoIC0gMTsKICAgIGxldCBwcmVEb3RTdGF0ZSA9IDA7CiAgICBmb3IgKDsgaTQgPj0gc3RhcnQ7IC0taTQpIHsKICAgICAgY29uc3QgY29kZSA9IHBhdGg1LmNoYXJDb2RlQXQoaTQpOwogICAgICBpZiAoY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7CiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgIHN0YXJ0UGFydCA9IGk0ICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoZW5kID09PSAtMSkgewogICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICAgIGVuZCA9IGk0ICsgMTsKICAgICAgfQogICAgICBpZiAoY29kZSA9PT0gQ0hBUl9ET1QpIHsKICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKQogICAgICAgICAgc3RhcnREb3QgPSBpNDsKICAgICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkKICAgICAgICAgIHByZURvdFN0YXRlID0gMTsKICAgICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHsKICAgICAgICBwcmVEb3RTdGF0ZSA9IC0xOwogICAgICB9CiAgICB9CiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHwgcHJlRG90U3RhdGUgPT09IDAgfHwgcHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHsKICAgICAgaWYgKGVuZCAhPT0gLTEpIHsKICAgICAgICBpZiAoc3RhcnRQYXJ0ID09PSAwICYmIGlzQWJzb2x1dGU3KSB7CiAgICAgICAgICByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aDUuc2xpY2UoMSwgZW5kKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGg1LnNsaWNlKHN0YXJ0UGFydCwgZW5kKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZTcpIHsKICAgICAgICByZXQubmFtZSA9IHBhdGg1LnNsaWNlKDEsIHN0YXJ0RG90KTsKICAgICAgICByZXQuYmFzZSA9IHBhdGg1LnNsaWNlKDEsIGVuZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0Lm5hbWUgPSBwYXRoNS5zbGljZShzdGFydFBhcnQsIHN0YXJ0RG90KTsKICAgICAgICByZXQuYmFzZSA9IHBhdGg1LnNsaWNlKHN0YXJ0UGFydCwgZW5kKTsKICAgICAgfQogICAgICByZXQuZXh0ID0gcGF0aDUuc2xpY2Uoc3RhcnREb3QsIGVuZCk7CiAgICB9CiAgICBpZiAoc3RhcnRQYXJ0ID4gMCkKICAgICAgcmV0LmRpciA9IHBhdGg1LnNsaWNlKDAsIHN0YXJ0UGFydCAtIDEpOwogICAgZWxzZSBpZiAoaXNBYnNvbHV0ZTcpCiAgICAgIHJldC5kaXIgPSAiLyI7CiAgICByZXR1cm4gcmV0OwogIH0KICBmdW5jdGlvbiBmcm9tRmlsZVVybDIodXJsKSB7CiAgICB1cmwgPSB1cmwgaW5zdGFuY2VvZiBVUkwgPyB1cmwgOiBuZXcgVVJMKHVybCk7CiAgICBpZiAodXJsLnByb3RvY29sICE9ICJmaWxlOiIpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiTXVzdCBiZSBhIGZpbGUgVVJMLiIpOwogICAgfQogICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCgKICAgICAgdXJsLnBhdGhuYW1lLnJlcGxhY2UoLyUoPyFbMC05QS1GYS1mXXsyfSkvZywgIiUyNSIpCiAgICApOwogIH0KICBmdW5jdGlvbiB0b0ZpbGVVcmwyKHBhdGg1KSB7CiAgICBpZiAoIWlzQWJzb2x1dGUyKHBhdGg1KSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJNdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIik7CiAgICB9CiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKCJmaWxlOi8vLyIpOwogICAgdXJsLnBhdGhuYW1lID0gZW5jb2RlV2hpdGVzcGFjZSgKICAgICAgcGF0aDUucmVwbGFjZSgvJS9nLCAiJTI1IikucmVwbGFjZSgvXFwvZywgIiU1QyIpCiAgICApOwogICAgcmV0dXJuIHVybDsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvcGF0aC9nbG9iLnRzCiAgdmFyIHBhdGggPSBpc1dpbmRvd3MgPyB3aW4zMl9leHBvcnRzIDogcG9zaXhfZXhwb3J0czsKICB2YXIgeyBqb2luOiBqb2luMywgbm9ybWFsaXplOiBub3JtYWxpemUzIH0gPSBwYXRoOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL3BhdGgvbW9kLnRzCiAgdmFyIHBhdGgyID0gaXNXaW5kb3dzID8gd2luMzJfZXhwb3J0cyA6IHBvc2l4X2V4cG9ydHM7CiAgdmFyIHsKICAgIGJhc2VuYW1lOiBiYXNlbmFtZTMsCiAgICBkZWxpbWl0ZXI6IGRlbGltaXRlcjMsCiAgICBkaXJuYW1lOiBkaXJuYW1lMywKICAgIGV4dG5hbWU6IGV4dG5hbWUzLAogICAgZm9ybWF0OiBmb3JtYXQzLAogICAgZnJvbUZpbGVVcmw6IGZyb21GaWxlVXJsMywKICAgIGlzQWJzb2x1dGU6IGlzQWJzb2x1dGUzLAogICAgam9pbjogam9pbjQsCiAgICBub3JtYWxpemU6IG5vcm1hbGl6ZTQsCiAgICBwYXJzZTogcGFyc2U0LAogICAgcmVsYXRpdmU6IHJlbGF0aXZlMywKICAgIHJlc29sdmU6IHJlc29sdmUzLAogICAgc2VwOiBzZXAzLAogICAgdG9GaWxlVXJsOiB0b0ZpbGVVcmwzLAogICAgdG9OYW1lc3BhY2VkUGF0aDogdG9OYW1lc3BhY2VkUGF0aDMKICB9ID0gcGF0aDI7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvc3RyZWFtcy9jb252ZXJzaW9uLnRzCiAgdmFyIERFRkFVTFRfQlVGRkVSX1NJWkUgPSAzMiAqIDEwMjQ7CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9jb21tb25AMS4wLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjMvZGVuby9jb21tb24uanMKICB2YXIgQ2U4ID0gMDsKICB2YXIgQjcgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQpIHsKICAgICAgdGhpcy5mcm9tID0gZTUsIHRoaXMudG8gPSB0NDsKICAgIH0KICB9OwogIHZhciB3NSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1ID0ge30pIHsKICAgICAgdGhpcy5pZCA9IENlOCsrLCB0aGlzLnBlck5vZGUgPSAhIWU1LnBlck5vZGUsIHRoaXMuZGVzZXJpYWxpemUgPSBlNS5kZXNlcmlhbGl6ZSB8fCAoKCkgPT4gewogICAgICAgIHRocm93IG5ldyBFcnJvcigiVGhpcyBub2RlIHR5cGUgZG9lc24ndCBkZWZpbmUgYSBkZXNlcmlhbGl6ZSBmdW5jdGlvbiIpOwogICAgICB9KTsKICAgIH0KICAgIGFkZChlNSkgewogICAgICBpZiAodGhpcy5wZXJOb2RlKQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJDYW4ndCBhZGQgcGVyLW5vZGUgcHJvcHMgdG8gbm9kZSB0eXBlcyIpOwogICAgICByZXR1cm4gdHlwZW9mIGU1ICE9ICJmdW5jdGlvbiIgJiYgKGU1ID0gTjUubWF0Y2goZTUpKSwgKHQ0KSA9PiB7CiAgICAgICAgbGV0IHIzID0gZTUodDQpOwogICAgICAgIHJldHVybiByMyA9PT0gdm9pZCAwID8gbnVsbCA6IFt0aGlzLCByM107CiAgICAgIH07CiAgICB9CiAgfTsKICB3NS5jbG9zZWRCeSA9IG5ldyB3NSh7IGRlc2VyaWFsaXplOiAoaDEwKSA9PiBoMTAuc3BsaXQoIiAiKSB9KTsKICB3NS5vcGVuZWRCeSA9IG5ldyB3NSh7IGRlc2VyaWFsaXplOiAoaDEwKSA9PiBoMTAuc3BsaXQoIiAiKSB9KTsKICB3NS5ncm91cCA9IG5ldyB3NSh7IGRlc2VyaWFsaXplOiAoaDEwKSA9PiBoMTAuc3BsaXQoIiAiKSB9KTsKICB3NS5jb250ZXh0SGFzaCA9IG5ldyB3NSh7IHBlck5vZGU6IHRydWUgfSk7CiAgdzUubG9va0FoZWFkID0gbmV3IHc1KHsgcGVyTm9kZTogdHJ1ZSB9KTsKICB3NS5tb3VudGVkID0gbmV3IHc1KHsgcGVyTm9kZTogdHJ1ZSB9KTsKICB2YXIgX2U3ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgdmFyIE41ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCByMywgaTQgPSAwKSB7CiAgICAgIHRoaXMubmFtZSA9IGU1LCB0aGlzLnByb3BzID0gdDQsIHRoaXMuaWQgPSByMywgdGhpcy5mbGFncyA9IGk0OwogICAgfQogICAgc3RhdGljIGRlZmluZShlNSkgewogICAgICBsZXQgdDQgPSBlNS5wcm9wcyAmJiBlNS5wcm9wcy5sZW5ndGggPyAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IF9lNywgcjMgPSAoZTUudG9wID8gMSA6IDApIHwgKGU1LnNraXBwZWQgPyAyIDogMCkgfCAoZTUuZXJyb3IgPyA0IDogMCkgfCAoZTUubmFtZSA9PSBudWxsID8gOCA6IDApLCBpNCA9IG5ldyBONShlNS5uYW1lIHx8ICIiLCB0NCwgZTUuaWQsIHIzKTsKICAgICAgaWYgKGU1LnByb3BzKSB7CiAgICAgICAgZm9yIChsZXQgbjggb2YgZTUucHJvcHMpCiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuOCkgfHwgKG44ID0gbjgoaTQpKSwgbjgpIHsKICAgICAgICAgICAgaWYgKG44WzBdLnBlck5vZGUpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNhbid0IHN0b3JlIGEgcGVyLW5vZGUgcHJvcCBvbiBhIG5vZGUgdHlwZSIpOwogICAgICAgICAgICB0NFtuOFswXS5pZF0gPSBuOFsxXTsKICAgICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gaTQ7CiAgICB9CiAgICBwcm9wKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLnByb3BzW2U1LmlkXTsKICAgIH0KICAgIGdldCBpc1RvcCgpIHsKICAgICAgcmV0dXJuICh0aGlzLmZsYWdzICYgMSkgPiAwOwogICAgfQogICAgZ2V0IGlzU2tpcHBlZCgpIHsKICAgICAgcmV0dXJuICh0aGlzLmZsYWdzICYgMikgPiAwOwogICAgfQogICAgZ2V0IGlzRXJyb3IoKSB7CiAgICAgIHJldHVybiAodGhpcy5mbGFncyAmIDQpID4gMDsKICAgIH0KICAgIGdldCBpc0Fub255bW91cygpIHsKICAgICAgcmV0dXJuICh0aGlzLmZsYWdzICYgOCkgPiAwOwogICAgfQogICAgaXMoZTUpIHsKICAgICAgaWYgKHR5cGVvZiBlNSA9PSAic3RyaW5nIikgewogICAgICAgIGlmICh0aGlzLm5hbWUgPT0gZTUpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBsZXQgdDQgPSB0aGlzLnByb3AodzUuZ3JvdXApOwogICAgICAgIHJldHVybiB0NCA/IHQ0LmluZGV4T2YoZTUpID4gLTEgOiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5pZCA9PSBlNTsKICAgIH0KICAgIHN0YXRpYyBtYXRjaChlNSkgewogICAgICBsZXQgdDQgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgZm9yIChsZXQgcjMgaW4gZTUpCiAgICAgICAgZm9yIChsZXQgaTQgb2YgcjMuc3BsaXQoIiAiKSkKICAgICAgICAgIHQ0W2k0XSA9IGU1W3IzXTsKICAgICAgcmV0dXJuIChyMykgPT4gewogICAgICAgIGZvciAobGV0IGk0ID0gcjMucHJvcCh3NS5ncm91cCksIG44ID0gLTE7IG44IDwgKGk0ID8gaTQubGVuZ3RoIDogMCk7IG44KyspIHsKICAgICAgICAgIGxldCBzOCA9IHQ0W244IDwgMCA/IHIzLm5hbWUgOiBpNFtuOF1dOwogICAgICAgICAgaWYgKHM4KQogICAgICAgICAgICByZXR1cm4gczg7CiAgICAgICAgfQogICAgICB9OwogICAgfQogIH07CiAgTjUubm9uZSA9IG5ldyBONSgiIiwgLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksIDAsIDgpOwogIHZhciBaNSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1KSB7CiAgICAgIHRoaXMudHlwZXMgPSBlNTsKICAgICAgZm9yIChsZXQgdDQgPSAwOyB0NCA8IGU1Lmxlbmd0aDsgdDQrKykKICAgICAgICBpZiAoZTVbdDRdLmlkICE9IHQ0KQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vZGUgdHlwZSBpZHMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYXJyYXkgcG9zaXRpb25zIHdoZW4gY3JlYXRpbmcgYSBub2RlIHNldCIpOwogICAgfQogICAgZXh0ZW5kKC4uLmU1KSB7CiAgICAgIGxldCB0NCA9IFtdOwogICAgICBmb3IgKGxldCByMyBvZiB0aGlzLnR5cGVzKSB7CiAgICAgICAgbGV0IGk0ID0gbnVsbDsKICAgICAgICBmb3IgKGxldCBuOCBvZiBlNSkgewogICAgICAgICAgbGV0IHM4ID0gbjgocjMpOwogICAgICAgICAgczggJiYgKGk0IHx8IChpNCA9IE9iamVjdC5hc3NpZ24oe30sIHIzLnByb3BzKSksIGk0W3M4WzBdLmlkXSA9IHM4WzFdKTsKICAgICAgICB9CiAgICAgICAgdDQucHVzaChpNCA/IG5ldyBONShyMy5uYW1lLCBpNCwgcjMuaWQsIHIzLmZsYWdzKSA6IHIzKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFo1KHQ0KTsKICAgIH0KICB9OwogIHZhciBYNyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogIHZhciBnZTcgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICB2YXIgQTY7CiAgKGZ1bmN0aW9uKGgxMCkgewogICAgaDEwW2gxMC5FeGNsdWRlQnVmZmVycyA9IDFdID0gIkV4Y2x1ZGVCdWZmZXJzIiwgaDEwW2gxMC5JbmNsdWRlQW5vbnltb3VzID0gMl0gPSAiSW5jbHVkZUFub255bW91cyIsIGgxMFtoMTAuSWdub3JlTW91bnRzID0gNF0gPSAiSWdub3JlTW91bnRzIiwgaDEwW2gxMC5JZ25vcmVPdmVybGF5cyA9IDhdID0gIklnbm9yZU92ZXJsYXlzIjsKICB9KShBNiB8fCAoQTYgPSB7fSkpOwogIHZhciBQNyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgcjMsIGk0LCBuOCkgewogICAgICBpZiAodGhpcy50eXBlID0gZTUsIHRoaXMuY2hpbGRyZW4gPSB0NCwgdGhpcy5wb3NpdGlvbnMgPSByMywgdGhpcy5sZW5ndGggPSBpNCwgdGhpcy5wcm9wcyA9IG51bGwsIG44ICYmIG44Lmxlbmd0aCkgewogICAgICAgIHRoaXMucHJvcHMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgICBmb3IgKGxldCBbczgsIGw3XSBvZiBuOCkKICAgICAgICAgIHRoaXMucHJvcHNbdHlwZW9mIHM4ID09ICJudW1iZXIiID8gczggOiBzOC5pZF0gPSBsNzsKICAgICAgfQogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIGxldCBlNSA9IHRoaXMucHJvcCh3NS5tb3VudGVkKTsKICAgICAgaWYgKGU1ICYmICFlNS5vdmVybGF5KQogICAgICAgIHJldHVybiBlNS50cmVlLnRvU3RyaW5nKCk7CiAgICAgIGxldCB0NCA9ICIiOwogICAgICBmb3IgKGxldCByMyBvZiB0aGlzLmNoaWxkcmVuKSB7CiAgICAgICAgbGV0IGk0ID0gcjMudG9TdHJpbmcoKTsKICAgICAgICBpNCAmJiAodDQgJiYgKHQ0ICs9ICIsIiksIHQ0ICs9IGk0KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy50eXBlLm5hbWUgPyAoL1xXLy50ZXN0KHRoaXMudHlwZS5uYW1lKSAmJiAhdGhpcy50eXBlLmlzRXJyb3IgPyBKU09OLnN0cmluZ2lmeSh0aGlzLnR5cGUubmFtZSkgOiB0aGlzLnR5cGUubmFtZSkgKyAodDQubGVuZ3RoID8gIigiICsgdDQgKyAiKSIgOiAiIikgOiB0NDsKICAgIH0KICAgIGN1cnNvcihlNSA9IDApIHsKICAgICAgcmV0dXJuIG5ldyBWNyh0aGlzLnRvcE5vZGUsIGU1KTsKICAgIH0KICAgIGN1cnNvckF0KGU1LCB0NCA9IDAsIHIzID0gMCkgewogICAgICBsZXQgaTQgPSBYNy5nZXQodGhpcykgfHwgdGhpcy50b3BOb2RlLCBuOCA9IG5ldyBWNyhpNCk7CiAgICAgIHJldHVybiBuOC5tb3ZlVG8oZTUsIHQ0KSwgWDcuc2V0KHRoaXMsIG44Ll90cmVlKSwgbjg7CiAgICB9CiAgICBnZXQgdG9wTm9kZSgpIHsKICAgICAgcmV0dXJuIG5ldyBJNyh0aGlzLCAwLCAwLCBudWxsKTsKICAgIH0KICAgIHJlc29sdmUoZTUsIHQ0ID0gMCkgewogICAgICBsZXQgcjMgPSBxNShYNy5nZXQodGhpcykgfHwgdGhpcy50b3BOb2RlLCBlNSwgdDQsIGZhbHNlKTsKICAgICAgcmV0dXJuIFg3LnNldCh0aGlzLCByMyksIHIzOwogICAgfQogICAgcmVzb2x2ZUlubmVyKGU1LCB0NCA9IDApIHsKICAgICAgbGV0IHIzID0gcTUoZ2U3LmdldCh0aGlzKSB8fCB0aGlzLnRvcE5vZGUsIGU1LCB0NCwgdHJ1ZSk7CiAgICAgIHJldHVybiBnZTcuc2V0KHRoaXMsIHIzKSwgcjM7CiAgICB9CiAgICBpdGVyYXRlKGU1KSB7CiAgICAgIGxldCB7IGVudGVyOiB0NCwgbGVhdmU6IHIzLCBmcm9tOiBpNCA9IDAsIHRvOiBuOCA9IHRoaXMubGVuZ3RoIH0gPSBlNTsKICAgICAgZm9yIChsZXQgczggPSB0aGlzLmN1cnNvcigoZTUubW9kZSB8fCAwKSB8IEE2LkluY2x1ZGVBbm9ueW1vdXMpOyA7ICkgewogICAgICAgIGxldCBsNyA9IGZhbHNlOwogICAgICAgIGlmIChzOC5mcm9tIDw9IG44ICYmIHM4LnRvID49IGk0ICYmIChzOC50eXBlLmlzQW5vbnltb3VzIHx8IHQ0KHM4KSAhPT0gZmFsc2UpKSB7CiAgICAgICAgICBpZiAoczguZmlyc3RDaGlsZCgpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIGw3ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZm9yICg7IGw3ICYmIHIzICYmICFzOC50eXBlLmlzQW5vbnltb3VzICYmIHIzKHM4KSwgIXM4Lm5leHRTaWJsaW5nKCk7ICkgewogICAgICAgICAgaWYgKCFzOC5wYXJlbnQoKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgbDcgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcHJvcChlNSkgewogICAgICByZXR1cm4gZTUucGVyTm9kZSA/IHRoaXMucHJvcHMgPyB0aGlzLnByb3BzW2U1LmlkXSA6IHZvaWQgMCA6IHRoaXMudHlwZS5wcm9wKGU1KTsKICAgIH0KICAgIGdldCBwcm9wVmFsdWVzKCkgewogICAgICBsZXQgZTUgPSBbXTsKICAgICAgaWYgKHRoaXMucHJvcHMpCiAgICAgICAgZm9yIChsZXQgdDQgaW4gdGhpcy5wcm9wcykKICAgICAgICAgIGU1LnB1c2goWyt0NCwgdGhpcy5wcm9wc1t0NF1dKTsKICAgICAgcmV0dXJuIGU1OwogICAgfQogICAgYmFsYW5jZShlNSA9IHt9KSB7CiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA8PSA4ID8gdGhpcyA6IHBlNyhONS5ub25lLCB0aGlzLmNoaWxkcmVuLCB0aGlzLnBvc2l0aW9ucywgMCwgdGhpcy5jaGlsZHJlbi5sZW5ndGgsIDAsIHRoaXMubGVuZ3RoLCAodDQsIHIzLCBpNCkgPT4gbmV3IFA3KHRoaXMudHlwZSwgdDQsIHIzLCBpNCwgdGhpcy5wcm9wVmFsdWVzKSwgZTUubWFrZVRyZWUgfHwgKCh0NCwgcjMsIGk0KSA9PiBuZXcgUDcoTjUubm9uZSwgdDQsIHIzLCBpNCkpKTsKICAgIH0KICAgIHN0YXRpYyBidWlsZChlNSkgewogICAgICByZXR1cm4gU2U2KGU1KTsKICAgIH0KICB9OwogIFA3LmVtcHR5ID0gbmV3IFA3KE41Lm5vbmUsIFtdLCBbXSwgMCk7CiAgdmFyIEs2ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0KSB7CiAgICAgIHRoaXMuYnVmZmVyID0gZTUsIHRoaXMuaW5kZXggPSB0NDsKICAgIH0KICAgIGdldCBpZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXggLSA0XTsKICAgIH0KICAgIGdldCBzdGFydCgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXggLSAzXTsKICAgIH0KICAgIGdldCBlbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlclt0aGlzLmluZGV4IC0gMl07CiAgICB9CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXggLSAxXTsKICAgIH0KICAgIGdldCBwb3MoKSB7CiAgICAgIHJldHVybiB0aGlzLmluZGV4OwogICAgfQogICAgbmV4dCgpIHsKICAgICAgdGhpcy5pbmRleCAtPSA0OwogICAgfQogICAgZm9yaygpIHsKICAgICAgcmV0dXJuIG5ldyBLNih0aGlzLmJ1ZmZlciwgdGhpcy5pbmRleCk7CiAgICB9CiAgfTsKICB2YXIgVDcgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIHIzKSB7CiAgICAgIHRoaXMuYnVmZmVyID0gZTUsIHRoaXMubGVuZ3RoID0gdDQsIHRoaXMuc2V0ID0gcjM7CiAgICB9CiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIE41Lm5vbmU7CiAgICB9CiAgICB0b1N0cmluZygpIHsKICAgICAgbGV0IGU1ID0gW107CiAgICAgIGZvciAobGV0IHQ0ID0gMDsgdDQgPCB0aGlzLmJ1ZmZlci5sZW5ndGg7ICkKICAgICAgICBlNS5wdXNoKHRoaXMuY2hpbGRTdHJpbmcodDQpKSwgdDQgPSB0aGlzLmJ1ZmZlclt0NCArIDNdOwogICAgICByZXR1cm4gZTUuam9pbigiLCIpOwogICAgfQogICAgY2hpbGRTdHJpbmcoZTUpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5idWZmZXJbZTVdLCByMyA9IHRoaXMuYnVmZmVyW2U1ICsgM10sIGk0ID0gdGhpcy5zZXQudHlwZXNbdDRdLCBuOCA9IGk0Lm5hbWU7CiAgICAgIGlmICgvXFcvLnRlc3QobjgpICYmICFpNC5pc0Vycm9yICYmIChuOCA9IEpTT04uc3RyaW5naWZ5KG44KSksIGU1ICs9IDQsIHIzID09IGU1KQogICAgICAgIHJldHVybiBuODsKICAgICAgbGV0IHM4ID0gW107CiAgICAgIGZvciAoOyBlNSA8IHIzOyApCiAgICAgICAgczgucHVzaCh0aGlzLmNoaWxkU3RyaW5nKGU1KSksIGU1ID0gdGhpcy5idWZmZXJbZTUgKyAzXTsKICAgICAgcmV0dXJuIG44ICsgIigiICsgczguam9pbigiLCIpICsgIikiOwogICAgfQogICAgZmluZENoaWxkKGU1LCB0NCwgcjMsIGk0LCBuOCkgewogICAgICBsZXQgeyBidWZmZXI6IHM4IH0gPSB0aGlzLCBsNyA9IC0xOwogICAgICBmb3IgKGxldCBmMTEgPSBlNTsgZjExICE9IHQ0ICYmICEoa2U3KG44LCBpNCwgczhbZjExICsgMV0sIHM4W2YxMSArIDJdKSAmJiAobDcgPSBmMTEsIHIzID4gMCkpOyBmMTEgPSBzOFtmMTEgKyAzXSkKICAgICAgICA7CiAgICAgIHJldHVybiBsNzsKICAgIH0KICAgIHNsaWNlKGU1LCB0NCwgcjMsIGk0KSB7CiAgICAgIGxldCBuOCA9IHRoaXMuYnVmZmVyLCBzOCA9IG5ldyBVaW50MTZBcnJheSh0NCAtIGU1KTsKICAgICAgZm9yIChsZXQgbDcgPSBlNSwgZjExID0gMDsgbDcgPCB0NDsgKQogICAgICAgIHM4W2YxMSsrXSA9IG44W2w3KytdLCBzOFtmMTErK10gPSBuOFtsNysrXSAtIHIzLCBzOFtmMTErK10gPSBuOFtsNysrXSAtIHIzLCBzOFtmMTErK10gPSBuOFtsNysrXSAtIGU1OwogICAgICByZXR1cm4gbmV3IFQ3KHM4LCBpNCAtIHIzLCB0aGlzLnNldCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBrZTcoaDEwLCBlNSwgdDQsIHIzKSB7CiAgICBzd2l0Y2ggKGgxMCkgewogICAgICBjYXNlIC0yOgogICAgICAgIHJldHVybiB0NCA8IGU1OwogICAgICBjYXNlIC0xOgogICAgICAgIHJldHVybiByMyA+PSBlNSAmJiB0NCA8IGU1OwogICAgICBjYXNlIDA6CiAgICAgICAgcmV0dXJuIHQ0IDwgZTUgJiYgcjMgPiBlNTsKICAgICAgY2FzZSAxOgogICAgICAgIHJldHVybiB0NCA8PSBlNSAmJiByMyA+IGU1OwogICAgICBjYXNlIDI6CiAgICAgICAgcmV0dXJuIHIzID4gZTU7CiAgICAgIGNhc2UgNDoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgZnVuY3Rpb24gQWU3KGgxMCwgZTUpIHsKICAgIGxldCB0NCA9IGgxMC5jaGlsZEJlZm9yZShlNSk7CiAgICBmb3IgKDsgdDQ7ICkgewogICAgICBsZXQgcjMgPSB0NC5sYXN0Q2hpbGQ7CiAgICAgIGlmICghcjMgfHwgcjMudG8gIT0gdDQudG8pCiAgICAgICAgYnJlYWs7CiAgICAgIHIzLnR5cGUuaXNFcnJvciAmJiByMy5mcm9tID09IHIzLnRvID8gKGgxMCA9IHQ0LCB0NCA9IHIzLnByZXZTaWJsaW5nKSA6IHQ0ID0gcjM7CiAgICB9CiAgICByZXR1cm4gaDEwOwogIH0KICBmdW5jdGlvbiBxNShoMTAsIGU1LCB0NCwgcjMpIHsKICAgIGZvciAodmFyIGk0OyBoMTAuZnJvbSA9PSBoMTAudG8gfHwgKHQ0IDwgMSA/IGgxMC5mcm9tID49IGU1IDogaDEwLmZyb20gPiBlNSkgfHwgKHQ0ID4gLTEgPyBoMTAudG8gPD0gZTUgOiBoMTAudG8gPCBlNSk7ICkgewogICAgICBsZXQgczggPSAhcjMgJiYgaDEwIGluc3RhbmNlb2YgSTcgJiYgaDEwLmluZGV4IDwgMCA/IG51bGwgOiBoMTAucGFyZW50OwogICAgICBpZiAoIXM4KQogICAgICAgIHJldHVybiBoMTA7CiAgICAgIGgxMCA9IHM4OwogICAgfQogICAgbGV0IG44ID0gcjMgPyAwIDogQTYuSWdub3JlT3ZlcmxheXM7CiAgICBpZiAocjMpCiAgICAgIGZvciAobGV0IHM4ID0gaDEwLCBsNyA9IHM4LnBhcmVudDsgbDc7IHM4ID0gbDcsIGw3ID0gczgucGFyZW50KQogICAgICAgIHM4IGluc3RhbmNlb2YgSTcgJiYgczguaW5kZXggPCAwICYmICgoaTQgPSBsNy5lbnRlcihlNSwgdDQsIG44KSkgPT09IG51bGwgfHwgaTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGk0LmZyb20pICE9IHM4LmZyb20gJiYgKGgxMCA9IGw3KTsKICAgIGZvciAoOyA7ICkgewogICAgICBsZXQgczggPSBoMTAuZW50ZXIoZTUsIHQ0LCBuOCk7CiAgICAgIGlmICghczgpCiAgICAgICAgcmV0dXJuIGgxMDsKICAgICAgaDEwID0gczg7CiAgICB9CiAgfQogIHZhciBJNyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgcjMsIGk0KSB7CiAgICAgIHRoaXMuX3RyZWUgPSBlNSwgdGhpcy5mcm9tID0gdDQsIHRoaXMuaW5kZXggPSByMywgdGhpcy5fcGFyZW50ID0gaTQ7CiAgICB9CiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuX3RyZWUudHlwZTsKICAgIH0KICAgIGdldCBuYW1lKCkgewogICAgICByZXR1cm4gdGhpcy5fdHJlZS50eXBlLm5hbWU7CiAgICB9CiAgICBnZXQgdG8oKSB7CiAgICAgIHJldHVybiB0aGlzLmZyb20gKyB0aGlzLl90cmVlLmxlbmd0aDsKICAgIH0KICAgIG5leHRDaGlsZChlNSwgdDQsIHIzLCBpNCwgbjggPSAwKSB7CiAgICAgIGZvciAobGV0IHM4ID0gdGhpczsgOyApIHsKICAgICAgICBmb3IgKGxldCB7IGNoaWxkcmVuOiBsNywgcG9zaXRpb25zOiBmMTEgfSA9IHM4Ll90cmVlLCB1MTEgPSB0NCA+IDAgPyBsNy5sZW5ndGggOiAtMTsgZTUgIT0gdTExOyBlNSArPSB0NCkgewogICAgICAgICAgbGV0IG80ID0gbDdbZTVdLCBjMTcgPSBmMTFbZTVdICsgczguZnJvbTsKICAgICAgICAgIGlmICghIWtlNyhpNCwgcjMsIGMxNywgYzE3ICsgbzQubGVuZ3RoKSkgewogICAgICAgICAgICBpZiAobzQgaW5zdGFuY2VvZiBUNykgewogICAgICAgICAgICAgIGlmIChuOCAmIEE2LkV4Y2x1ZGVCdWZmZXJzKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgbGV0IGE0ID0gbzQuZmluZENoaWxkKDAsIG80LmJ1ZmZlci5sZW5ndGgsIHQ0LCByMyAtIGMxNywgaTQpOwogICAgICAgICAgICAgIGlmIChhNCA+IC0xKQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNNihuZXcgc2U2KHM4LCBvNCwgZTUsIGMxNyksIG51bGwsIGE0KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChuOCAmIEE2LkluY2x1ZGVBbm9ueW1vdXMgfHwgIW80LnR5cGUuaXNBbm9ueW1vdXMgfHwgYWU2KG80KSkgewogICAgICAgICAgICAgIGxldCBhNDsKICAgICAgICAgICAgICBpZiAoIShuOCAmIEE2Lklnbm9yZU1vdW50cykgJiYgbzQucHJvcHMgJiYgKGE0ID0gbzQucHJvcCh3NS5tb3VudGVkKSkgJiYgIWE0Lm92ZXJsYXkpCiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEk3KGE0LnRyZWUsIGMxNywgZTUsIHM4KTsKICAgICAgICAgICAgICBsZXQgeTE3ID0gbmV3IEk3KG80LCBjMTcsIGU1LCBzOCk7CiAgICAgICAgICAgICAgcmV0dXJuIG44ICYgQTYuSW5jbHVkZUFub255bW91cyB8fCAheTE3LnR5cGUuaXNBbm9ueW1vdXMgPyB5MTcgOiB5MTcubmV4dENoaWxkKHQ0IDwgMCA/IG80LmNoaWxkcmVuLmxlbmd0aCAtIDEgOiAwLCB0NCwgcjMsIGk0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobjggJiBBNi5JbmNsdWRlQW5vbnltb3VzIHx8ICFzOC50eXBlLmlzQW5vbnltb3VzIHx8IChzOC5pbmRleCA+PSAwID8gZTUgPSBzOC5pbmRleCArIHQ0IDogZTUgPSB0NCA8IDAgPyAtMSA6IHM4Ll9wYXJlbnQuX3RyZWUuY2hpbGRyZW4ubGVuZ3RoLCBzOCA9IHM4Ll9wYXJlbnQsICFzOCkpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgZ2V0IGZpcnN0Q2hpbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLm5leHRDaGlsZCgwLCAxLCAwLCA0KTsKICAgIH0KICAgIGdldCBsYXN0Q2hpbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLm5leHRDaGlsZCh0aGlzLl90cmVlLmNoaWxkcmVuLmxlbmd0aCAtIDEsIC0xLCAwLCA0KTsKICAgIH0KICAgIGNoaWxkQWZ0ZXIoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMubmV4dENoaWxkKDAsIDEsIGU1LCAyKTsKICAgIH0KICAgIGNoaWxkQmVmb3JlKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLm5leHRDaGlsZCh0aGlzLl90cmVlLmNoaWxkcmVuLmxlbmd0aCAtIDEsIC0xLCBlNSwgLTIpOwogICAgfQogICAgZW50ZXIoZTUsIHQ0LCByMyA9IDApIHsKICAgICAgbGV0IGk0OwogICAgICBpZiAoIShyMyAmIEE2Lklnbm9yZU92ZXJsYXlzKSAmJiAoaTQgPSB0aGlzLl90cmVlLnByb3AodzUubW91bnRlZCkpICYmIGk0Lm92ZXJsYXkpIHsKICAgICAgICBsZXQgbjggPSBlNSAtIHRoaXMuZnJvbTsKICAgICAgICBmb3IgKGxldCB7IGZyb206IHM4LCB0bzogbDcgfSBvZiBpNC5vdmVybGF5KQogICAgICAgICAgaWYgKCh0NCA+IDAgPyBzOCA8PSBuOCA6IHM4IDwgbjgpICYmICh0NCA8IDAgPyBsNyA+PSBuOCA6IGw3ID4gbjgpKQogICAgICAgICAgICByZXR1cm4gbmV3IEk3KGk0LnRyZWUsIGk0Lm92ZXJsYXlbMF0uZnJvbSArIHRoaXMuZnJvbSwgLTEsIHRoaXMpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLm5leHRDaGlsZCgwLCAxLCBlNSwgdDQsIHIzKTsKICAgIH0KICAgIG5leHRTaWduaWZpY2FudFBhcmVudCgpIHsKICAgICAgbGV0IGU1ID0gdGhpczsKICAgICAgZm9yICg7IGU1LnR5cGUuaXNBbm9ueW1vdXMgJiYgZTUuX3BhcmVudDsgKQogICAgICAgIGU1ID0gZTUuX3BhcmVudDsKICAgICAgcmV0dXJuIGU1OwogICAgfQogICAgZ2V0IHBhcmVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKSA6IG51bGw7CiAgICB9CiAgICBnZXQgbmV4dFNpYmxpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQgJiYgdGhpcy5pbmRleCA+PSAwID8gdGhpcy5fcGFyZW50Lm5leHRDaGlsZCh0aGlzLmluZGV4ICsgMSwgMSwgMCwgNCkgOiBudWxsOwogICAgfQogICAgZ2V0IHByZXZTaWJsaW5nKCkgewogICAgICByZXR1cm4gdGhpcy5fcGFyZW50ICYmIHRoaXMuaW5kZXggPj0gMCA/IHRoaXMuX3BhcmVudC5uZXh0Q2hpbGQodGhpcy5pbmRleCAtIDEsIC0xLCAwLCA0KSA6IG51bGw7CiAgICB9CiAgICBjdXJzb3IoZTUgPSAwKSB7CiAgICAgIHJldHVybiBuZXcgVjcodGhpcywgZTUpOwogICAgfQogICAgZ2V0IHRyZWUoKSB7CiAgICAgIHJldHVybiB0aGlzLl90cmVlOwogICAgfQogICAgdG9UcmVlKCkgewogICAgICByZXR1cm4gdGhpcy5fdHJlZTsKICAgIH0KICAgIHJlc29sdmUoZTUsIHQ0ID0gMCkgewogICAgICByZXR1cm4gcTUodGhpcywgZTUsIHQ0LCBmYWxzZSk7CiAgICB9CiAgICByZXNvbHZlSW5uZXIoZTUsIHQ0ID0gMCkgewogICAgICByZXR1cm4gcTUodGhpcywgZTUsIHQ0LCB0cnVlKTsKICAgIH0KICAgIGVudGVyVW5maW5pc2hlZE5vZGVzQmVmb3JlKGU1KSB7CiAgICAgIHJldHVybiBBZTcodGhpcywgZTUpOwogICAgfQogICAgZ2V0Q2hpbGQoZTUsIHQ0ID0gbnVsbCwgcjMgPSBudWxsKSB7CiAgICAgIGxldCBpNCA9IGVlNih0aGlzLCBlNSwgdDQsIHIzKTsKICAgICAgcmV0dXJuIGk0Lmxlbmd0aCA/IGk0WzBdIDogbnVsbDsKICAgIH0KICAgIGdldENoaWxkcmVuKGU1LCB0NCA9IG51bGwsIHIzID0gbnVsbCkgewogICAgICByZXR1cm4gZWU2KHRoaXMsIGU1LCB0NCwgcjMpOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLl90cmVlLnRvU3RyaW5nKCk7CiAgICB9CiAgICBnZXQgbm9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBtYXRjaENvbnRleHQoZTUpIHsKICAgICAgcmV0dXJuIHRlNih0aGlzLCBlNSk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBlZTYoaDEwLCBlNSwgdDQsIHIzKSB7CiAgICBsZXQgaTQgPSBoMTAuY3Vyc29yKCksIG44ID0gW107CiAgICBpZiAoIWk0LmZpcnN0Q2hpbGQoKSkKICAgICAgcmV0dXJuIG44OwogICAgaWYgKHQ0ICE9IG51bGwpIHsKICAgICAgZm9yICg7ICFpNC50eXBlLmlzKHQ0KTsgKQogICAgICAgIGlmICghaTQubmV4dFNpYmxpbmcoKSkKICAgICAgICAgIHJldHVybiBuODsKICAgIH0KICAgIGZvciAoOyA7ICkgewogICAgICBpZiAocjMgIT0gbnVsbCAmJiBpNC50eXBlLmlzKHIzKSkKICAgICAgICByZXR1cm4gbjg7CiAgICAgIGlmIChpNC50eXBlLmlzKGU1KSAmJiBuOC5wdXNoKGk0Lm5vZGUpLCAhaTQubmV4dFNpYmxpbmcoKSkKICAgICAgICByZXR1cm4gcjMgPT0gbnVsbCA/IG44IDogW107CiAgICB9CiAgfQogIGZ1bmN0aW9uIHRlNihoMTAsIGU1LCB0NCA9IGU1Lmxlbmd0aCAtIDEpIHsKICAgIGZvciAobGV0IHIzID0gaDEwLnBhcmVudDsgdDQgPj0gMDsgcjMgPSByMy5wYXJlbnQpIHsKICAgICAgaWYgKCFyMykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGlmICghcjMudHlwZS5pc0Fub255bW91cykgewogICAgICAgIGlmIChlNVt0NF0gJiYgZTVbdDRdICE9IHIzLm5hbWUpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgdDQtLTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIHZhciBzZTYgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIHIzLCBpNCkgewogICAgICB0aGlzLnBhcmVudCA9IGU1LCB0aGlzLmJ1ZmZlciA9IHQ0LCB0aGlzLmluZGV4ID0gcjMsIHRoaXMuc3RhcnQgPSBpNDsKICAgIH0KICB9OwogIHZhciBNNiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgcjMpIHsKICAgICAgdGhpcy5jb250ZXh0ID0gZTUsIHRoaXMuX3BhcmVudCA9IHQ0LCB0aGlzLmluZGV4ID0gcjMsIHRoaXMudHlwZSA9IGU1LmJ1ZmZlci5zZXQudHlwZXNbZTUuYnVmZmVyLmJ1ZmZlcltyM11dOwogICAgfQogICAgZ2V0IG5hbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnR5cGUubmFtZTsKICAgIH0KICAgIGdldCBmcm9tKCkgewogICAgICByZXR1cm4gdGhpcy5jb250ZXh0LnN0YXJ0ICsgdGhpcy5jb250ZXh0LmJ1ZmZlci5idWZmZXJbdGhpcy5pbmRleCArIDFdOwogICAgfQogICAgZ2V0IHRvKCkgewogICAgICByZXR1cm4gdGhpcy5jb250ZXh0LnN0YXJ0ICsgdGhpcy5jb250ZXh0LmJ1ZmZlci5idWZmZXJbdGhpcy5pbmRleCArIDJdOwogICAgfQogICAgY2hpbGQoZTUsIHQ0LCByMykgewogICAgICBsZXQgeyBidWZmZXI6IGk0IH0gPSB0aGlzLmNvbnRleHQsIG44ID0gaTQuZmluZENoaWxkKHRoaXMuaW5kZXggKyA0LCBpNC5idWZmZXJbdGhpcy5pbmRleCArIDNdLCBlNSwgdDQgLSB0aGlzLmNvbnRleHQuc3RhcnQsIHIzKTsKICAgICAgcmV0dXJuIG44IDwgMCA/IG51bGwgOiBuZXcgTTYodGhpcy5jb250ZXh0LCB0aGlzLCBuOCk7CiAgICB9CiAgICBnZXQgZmlyc3RDaGlsZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuY2hpbGQoMSwgMCwgNCk7CiAgICB9CiAgICBnZXQgbGFzdENoaWxkKCkgewogICAgICByZXR1cm4gdGhpcy5jaGlsZCgtMSwgMCwgNCk7CiAgICB9CiAgICBjaGlsZEFmdGVyKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLmNoaWxkKDEsIGU1LCAyKTsKICAgIH0KICAgIGNoaWxkQmVmb3JlKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLmNoaWxkKC0xLCBlNSwgLTIpOwogICAgfQogICAgZW50ZXIoZTUsIHQ0LCByMyA9IDApIHsKICAgICAgaWYgKHIzICYgQTYuRXhjbHVkZUJ1ZmZlcnMpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGxldCB7IGJ1ZmZlcjogaTQgfSA9IHRoaXMuY29udGV4dCwgbjggPSBpNC5maW5kQ2hpbGQodGhpcy5pbmRleCArIDQsIGk0LmJ1ZmZlclt0aGlzLmluZGV4ICsgM10sIHQ0ID4gMCA/IDEgOiAtMSwgZTUgLSB0aGlzLmNvbnRleHQuc3RhcnQsIHQ0KTsKICAgICAgcmV0dXJuIG44IDwgMCA/IG51bGwgOiBuZXcgTTYodGhpcy5jb250ZXh0LCB0aGlzLCBuOCk7CiAgICB9CiAgICBnZXQgcGFyZW50KCkgewogICAgICByZXR1cm4gdGhpcy5fcGFyZW50IHx8IHRoaXMuY29udGV4dC5wYXJlbnQubmV4dFNpZ25pZmljYW50UGFyZW50KCk7CiAgICB9CiAgICBleHRlcm5hbFNpYmxpbmcoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IG51bGwgOiB0aGlzLmNvbnRleHQucGFyZW50Lm5leHRDaGlsZCh0aGlzLmNvbnRleHQuaW5kZXggKyBlNSwgZTUsIDAsIDQpOwogICAgfQogICAgZ2V0IG5leHRTaWJsaW5nKCkgewogICAgICBsZXQgeyBidWZmZXI6IGU1IH0gPSB0aGlzLmNvbnRleHQsIHQ0ID0gZTUuYnVmZmVyW3RoaXMuaW5kZXggKyAzXTsKICAgICAgcmV0dXJuIHQ0IDwgKHRoaXMuX3BhcmVudCA/IGU1LmJ1ZmZlclt0aGlzLl9wYXJlbnQuaW5kZXggKyAzXSA6IGU1LmJ1ZmZlci5sZW5ndGgpID8gbmV3IE02KHRoaXMuY29udGV4dCwgdGhpcy5fcGFyZW50LCB0NCkgOiB0aGlzLmV4dGVybmFsU2libGluZygxKTsKICAgIH0KICAgIGdldCBwcmV2U2libGluZygpIHsKICAgICAgbGV0IHsgYnVmZmVyOiBlNSB9ID0gdGhpcy5jb250ZXh0LCB0NCA9IHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5pbmRleCArIDQgOiAwOwogICAgICByZXR1cm4gdGhpcy5pbmRleCA9PSB0NCA/IHRoaXMuZXh0ZXJuYWxTaWJsaW5nKC0xKSA6IG5ldyBNNih0aGlzLmNvbnRleHQsIHRoaXMuX3BhcmVudCwgZTUuZmluZENoaWxkKHQ0LCB0aGlzLmluZGV4LCAtMSwgMCwgNCkpOwogICAgfQogICAgY3Vyc29yKGU1ID0gMCkgewogICAgICByZXR1cm4gbmV3IFY3KHRoaXMsIGU1KTsKICAgIH0KICAgIGdldCB0cmVlKCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHRvVHJlZSgpIHsKICAgICAgbGV0IGU1ID0gW10sIHQ0ID0gW10sIHsgYnVmZmVyOiByMyB9ID0gdGhpcy5jb250ZXh0LCBpNCA9IHRoaXMuaW5kZXggKyA0LCBuOCA9IHIzLmJ1ZmZlclt0aGlzLmluZGV4ICsgM107CiAgICAgIGlmIChuOCA+IGk0KSB7CiAgICAgICAgbGV0IHM4ID0gcjMuYnVmZmVyW3RoaXMuaW5kZXggKyAxXSwgbDcgPSByMy5idWZmZXJbdGhpcy5pbmRleCArIDJdOwogICAgICAgIGU1LnB1c2gocjMuc2xpY2UoaTQsIG44LCBzOCwgbDcpKSwgdDQucHVzaCgwKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFA3KHRoaXMudHlwZSwgZTUsIHQ0LCB0aGlzLnRvIC0gdGhpcy5mcm9tKTsKICAgIH0KICAgIHJlc29sdmUoZTUsIHQ0ID0gMCkgewogICAgICByZXR1cm4gcTUodGhpcywgZTUsIHQ0LCBmYWxzZSk7CiAgICB9CiAgICByZXNvbHZlSW5uZXIoZTUsIHQ0ID0gMCkgewogICAgICByZXR1cm4gcTUodGhpcywgZTUsIHQ0LCB0cnVlKTsKICAgIH0KICAgIGVudGVyVW5maW5pc2hlZE5vZGVzQmVmb3JlKGU1KSB7CiAgICAgIHJldHVybiBBZTcodGhpcywgZTUpOwogICAgfQogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuYnVmZmVyLmNoaWxkU3RyaW5nKHRoaXMuaW5kZXgpOwogICAgfQogICAgZ2V0Q2hpbGQoZTUsIHQ0ID0gbnVsbCwgcjMgPSBudWxsKSB7CiAgICAgIGxldCBpNCA9IGVlNih0aGlzLCBlNSwgdDQsIHIzKTsKICAgICAgcmV0dXJuIGk0Lmxlbmd0aCA/IGk0WzBdIDogbnVsbDsKICAgIH0KICAgIGdldENoaWxkcmVuKGU1LCB0NCA9IG51bGwsIHIzID0gbnVsbCkgewogICAgICByZXR1cm4gZWU2KHRoaXMsIGU1LCB0NCwgcjMpOwogICAgfQogICAgZ2V0IG5vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgbWF0Y2hDb250ZXh0KGU1KSB7CiAgICAgIHJldHVybiB0ZTYodGhpcywgZTUpOwogICAgfQogIH07CiAgdmFyIFY3ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0ID0gMCkgewogICAgICBpZiAodGhpcy5tb2RlID0gdDQsIHRoaXMuYnVmZmVyID0gbnVsbCwgdGhpcy5zdGFjayA9IFtdLCB0aGlzLmluZGV4ID0gMCwgdGhpcy5idWZmZXJOb2RlID0gbnVsbCwgZTUgaW5zdGFuY2VvZiBJNykKICAgICAgICB0aGlzLnlpZWxkTm9kZShlNSk7CiAgICAgIGVsc2UgewogICAgICAgIHRoaXMuX3RyZWUgPSBlNS5jb250ZXh0LnBhcmVudCwgdGhpcy5idWZmZXIgPSBlNS5jb250ZXh0OwogICAgICAgIGZvciAobGV0IHIzID0gZTUuX3BhcmVudDsgcjM7IHIzID0gcjMuX3BhcmVudCkKICAgICAgICAgIHRoaXMuc3RhY2sudW5zaGlmdChyMy5pbmRleCk7CiAgICAgICAgdGhpcy5idWZmZXJOb2RlID0gZTUsIHRoaXMueWllbGRCdWYoZTUuaW5kZXgpOwogICAgICB9CiAgICB9CiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudHlwZS5uYW1lOwogICAgfQogICAgeWllbGROb2RlKGU1KSB7CiAgICAgIHJldHVybiBlNSA/ICh0aGlzLl90cmVlID0gZTUsIHRoaXMudHlwZSA9IGU1LnR5cGUsIHRoaXMuZnJvbSA9IGU1LmZyb20sIHRoaXMudG8gPSBlNS50bywgdHJ1ZSkgOiBmYWxzZTsKICAgIH0KICAgIHlpZWxkQnVmKGU1LCB0NCkgewogICAgICB0aGlzLmluZGV4ID0gZTU7CiAgICAgIGxldCB7IHN0YXJ0OiByMywgYnVmZmVyOiBpNCB9ID0gdGhpcy5idWZmZXI7CiAgICAgIHJldHVybiB0aGlzLnR5cGUgPSB0NCB8fCBpNC5zZXQudHlwZXNbaTQuYnVmZmVyW2U1XV0sIHRoaXMuZnJvbSA9IHIzICsgaTQuYnVmZmVyW2U1ICsgMV0sIHRoaXMudG8gPSByMyArIGk0LmJ1ZmZlcltlNSArIDJdLCB0cnVlOwogICAgfQogICAgeWllbGQoZTUpIHsKICAgICAgcmV0dXJuIGU1ID8gZTUgaW5zdGFuY2VvZiBJNyA/ICh0aGlzLmJ1ZmZlciA9IG51bGwsIHRoaXMueWllbGROb2RlKGU1KSkgOiAodGhpcy5idWZmZXIgPSBlNS5jb250ZXh0LCB0aGlzLnlpZWxkQnVmKGU1LmluZGV4LCBlNS50eXBlKSkgOiBmYWxzZTsKICAgIH0KICAgIHRvU3RyaW5nKCkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXIgPyB0aGlzLmJ1ZmZlci5idWZmZXIuY2hpbGRTdHJpbmcodGhpcy5pbmRleCkgOiB0aGlzLl90cmVlLnRvU3RyaW5nKCk7CiAgICB9CiAgICBlbnRlckNoaWxkKGU1LCB0NCwgcjMpIHsKICAgICAgaWYgKCF0aGlzLmJ1ZmZlcikKICAgICAgICByZXR1cm4gdGhpcy55aWVsZCh0aGlzLl90cmVlLm5leHRDaGlsZChlNSA8IDAgPyB0aGlzLl90cmVlLl90cmVlLmNoaWxkcmVuLmxlbmd0aCAtIDEgOiAwLCBlNSwgdDQsIHIzLCB0aGlzLm1vZGUpKTsKICAgICAgbGV0IHsgYnVmZmVyOiBpNCB9ID0gdGhpcy5idWZmZXIsIG44ID0gaTQuZmluZENoaWxkKHRoaXMuaW5kZXggKyA0LCBpNC5idWZmZXJbdGhpcy5pbmRleCArIDNdLCBlNSwgdDQgLSB0aGlzLmJ1ZmZlci5zdGFydCwgcjMpOwogICAgICByZXR1cm4gbjggPCAwID8gZmFsc2UgOiAodGhpcy5zdGFjay5wdXNoKHRoaXMuaW5kZXgpLCB0aGlzLnlpZWxkQnVmKG44KSk7CiAgICB9CiAgICBmaXJzdENoaWxkKCkgewogICAgICByZXR1cm4gdGhpcy5lbnRlckNoaWxkKDEsIDAsIDQpOwogICAgfQogICAgbGFzdENoaWxkKCkgewogICAgICByZXR1cm4gdGhpcy5lbnRlckNoaWxkKC0xLCAwLCA0KTsKICAgIH0KICAgIGNoaWxkQWZ0ZXIoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMuZW50ZXJDaGlsZCgxLCBlNSwgMik7CiAgICB9CiAgICBjaGlsZEJlZm9yZShlNSkgewogICAgICByZXR1cm4gdGhpcy5lbnRlckNoaWxkKC0xLCBlNSwgLTIpOwogICAgfQogICAgZW50ZXIoZTUsIHQ0LCByMyA9IHRoaXMubW9kZSkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXIgPyByMyAmIEE2LkV4Y2x1ZGVCdWZmZXJzID8gZmFsc2UgOiB0aGlzLmVudGVyQ2hpbGQoMSwgZTUsIHQ0KSA6IHRoaXMueWllbGQodGhpcy5fdHJlZS5lbnRlcihlNSwgdDQsIHIzKSk7CiAgICB9CiAgICBwYXJlbnQoKSB7CiAgICAgIGlmICghdGhpcy5idWZmZXIpCiAgICAgICAgcmV0dXJuIHRoaXMueWllbGROb2RlKHRoaXMubW9kZSAmIEE2LkluY2x1ZGVBbm9ueW1vdXMgPyB0aGlzLl90cmVlLl9wYXJlbnQgOiB0aGlzLl90cmVlLnBhcmVudCk7CiAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcy55aWVsZEJ1Zih0aGlzLnN0YWNrLnBvcCgpKTsKICAgICAgbGV0IGU1ID0gdGhpcy5tb2RlICYgQTYuSW5jbHVkZUFub255bW91cyA/IHRoaXMuYnVmZmVyLnBhcmVudCA6IHRoaXMuYnVmZmVyLnBhcmVudC5uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKTsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyID0gbnVsbCwgdGhpcy55aWVsZE5vZGUoZTUpOwogICAgfQogICAgc2libGluZyhlNSkgewogICAgICBpZiAoIXRoaXMuYnVmZmVyKQogICAgICAgIHJldHVybiB0aGlzLl90cmVlLl9wYXJlbnQgPyB0aGlzLnlpZWxkKHRoaXMuX3RyZWUuaW5kZXggPCAwID8gbnVsbCA6IHRoaXMuX3RyZWUuX3BhcmVudC5uZXh0Q2hpbGQodGhpcy5fdHJlZS5pbmRleCArIGU1LCBlNSwgMCwgNCwgdGhpcy5tb2RlKSkgOiBmYWxzZTsKICAgICAgbGV0IHsgYnVmZmVyOiB0NCB9ID0gdGhpcy5idWZmZXIsIHIzID0gdGhpcy5zdGFjay5sZW5ndGggLSAxOwogICAgICBpZiAoZTUgPCAwKSB7CiAgICAgICAgbGV0IGk0ID0gcjMgPCAwID8gMCA6IHRoaXMuc3RhY2tbcjNdICsgNDsKICAgICAgICBpZiAodGhpcy5pbmRleCAhPSBpNCkKICAgICAgICAgIHJldHVybiB0aGlzLnlpZWxkQnVmKHQ0LmZpbmRDaGlsZChpNCwgdGhpcy5pbmRleCwgLTEsIDAsIDQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZXQgaTQgPSB0NC5idWZmZXJbdGhpcy5pbmRleCArIDNdOwogICAgICAgIGlmIChpNCA8IChyMyA8IDAgPyB0NC5idWZmZXIubGVuZ3RoIDogdDQuYnVmZmVyW3RoaXMuc3RhY2tbcjNdICsgM10pKQogICAgICAgICAgcmV0dXJuIHRoaXMueWllbGRCdWYoaTQpOwogICAgICB9CiAgICAgIHJldHVybiByMyA8IDAgPyB0aGlzLnlpZWxkKHRoaXMuYnVmZmVyLnBhcmVudC5uZXh0Q2hpbGQodGhpcy5idWZmZXIuaW5kZXggKyBlNSwgZTUsIDAsIDQsIHRoaXMubW9kZSkpIDogZmFsc2U7CiAgICB9CiAgICBuZXh0U2libGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuc2libGluZygxKTsKICAgIH0KICAgIHByZXZTaWJsaW5nKCkgewogICAgICByZXR1cm4gdGhpcy5zaWJsaW5nKC0xKTsKICAgIH0KICAgIGF0TGFzdE5vZGUoZTUpIHsKICAgICAgbGV0IHQ0LCByMywgeyBidWZmZXI6IGk0IH0gPSB0aGlzOwogICAgICBpZiAoaTQpIHsKICAgICAgICBpZiAoZTUgPiAwKSB7CiAgICAgICAgICBpZiAodGhpcy5pbmRleCA8IGk0LmJ1ZmZlci5idWZmZXIubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBmb3IgKGxldCBuOCA9IDA7IG44IDwgdGhpcy5pbmRleDsgbjgrKykKICAgICAgICAgICAgaWYgKGk0LmJ1ZmZlci5idWZmZXJbbjggKyAzXSA8IHRoaXMuaW5kZXgpCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICh7IGluZGV4OiB0NCwgcGFyZW50OiByMyB9ID0gaTQpOwogICAgICB9IGVsc2UKICAgICAgICAoeyBpbmRleDogdDQsIF9wYXJlbnQ6IHIzIH0gPSB0aGlzLl90cmVlKTsKICAgICAgZm9yICg7IHIzOyB7IGluZGV4OiB0NCwgX3BhcmVudDogcjMgfSA9IHIzKQogICAgICAgIGlmICh0NCA+IC0xKQogICAgICAgICAgZm9yIChsZXQgbjggPSB0NCArIGU1LCBzOCA9IGU1IDwgMCA/IC0xIDogcjMuX3RyZWUuY2hpbGRyZW4ubGVuZ3RoOyBuOCAhPSBzODsgbjggKz0gZTUpIHsKICAgICAgICAgICAgbGV0IGw3ID0gcjMuX3RyZWUuY2hpbGRyZW5bbjhdOwogICAgICAgICAgICBpZiAodGhpcy5tb2RlICYgQTYuSW5jbHVkZUFub255bW91cyB8fCBsNyBpbnN0YW5jZW9mIFQ3IHx8ICFsNy50eXBlLmlzQW5vbnltb3VzIHx8IGFlNihsNykpCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIG1vdmUoZTUsIHQ0KSB7CiAgICAgIGlmICh0NCAmJiB0aGlzLmVudGVyQ2hpbGQoZTUsIDAsIDQpKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBmb3IgKDsgOyApIHsKICAgICAgICBpZiAodGhpcy5zaWJsaW5nKGU1KSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICh0aGlzLmF0TGFzdE5vZGUoZTUpIHx8ICF0aGlzLnBhcmVudCgpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBuZXh0KGU1ID0gdHJ1ZSkgewogICAgICByZXR1cm4gdGhpcy5tb3ZlKDEsIGU1KTsKICAgIH0KICAgIHByZXYoZTUgPSB0cnVlKSB7CiAgICAgIHJldHVybiB0aGlzLm1vdmUoLTEsIGU1KTsKICAgIH0KICAgIG1vdmVUbyhlNSwgdDQgPSAwKSB7CiAgICAgIGZvciAoOyAodGhpcy5mcm9tID09IHRoaXMudG8gfHwgKHQ0IDwgMSA/IHRoaXMuZnJvbSA+PSBlNSA6IHRoaXMuZnJvbSA+IGU1KSB8fCAodDQgPiAtMSA/IHRoaXMudG8gPD0gZTUgOiB0aGlzLnRvIDwgZTUpKSAmJiB0aGlzLnBhcmVudCgpOyApCiAgICAgICAgOwogICAgICBmb3IgKDsgdGhpcy5lbnRlckNoaWxkKDEsIGU1LCB0NCk7ICkKICAgICAgICA7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgZ2V0IG5vZGUoKSB7CiAgICAgIGlmICghdGhpcy5idWZmZXIpCiAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWU7CiAgICAgIGxldCBlNSA9IHRoaXMuYnVmZmVyTm9kZSwgdDQgPSBudWxsLCByMyA9IDA7CiAgICAgIGlmIChlNSAmJiBlNS5jb250ZXh0ID09IHRoaXMuYnVmZmVyKSB7CiAgICAgICAgZToKICAgICAgICAgIGZvciAobGV0IGk0ID0gdGhpcy5pbmRleCwgbjggPSB0aGlzLnN0YWNrLmxlbmd0aDsgbjggPj0gMDsgKSB7CiAgICAgICAgICAgIGZvciAobGV0IHM4ID0gZTU7IHM4OyBzOCA9IHM4Ll9wYXJlbnQpCiAgICAgICAgICAgICAgaWYgKHM4LmluZGV4ID09IGk0KSB7CiAgICAgICAgICAgICAgICBpZiAoaTQgPT0gdGhpcy5pbmRleCkKICAgICAgICAgICAgICAgICAgcmV0dXJuIHM4OwogICAgICAgICAgICAgICAgdDQgPSBzOCwgcjMgPSBuOCArIDE7CiAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgaTQgPSB0aGlzLnN0YWNrWy0tbjhdOwogICAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAobGV0IGk0ID0gcjM7IGk0IDwgdGhpcy5zdGFjay5sZW5ndGg7IGk0KyspCiAgICAgICAgdDQgPSBuZXcgTTYodGhpcy5idWZmZXIsIHQ0LCB0aGlzLnN0YWNrW2k0XSk7CiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlck5vZGUgPSBuZXcgTTYodGhpcy5idWZmZXIsIHQ0LCB0aGlzLmluZGV4KTsKICAgIH0KICAgIGdldCB0cmVlKCkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXIgPyBudWxsIDogdGhpcy5fdHJlZS5fdHJlZTsKICAgIH0KICAgIGl0ZXJhdGUoZTUsIHQ0KSB7CiAgICAgIGZvciAobGV0IHIzID0gMDsgOyApIHsKICAgICAgICBsZXQgaTQgPSBmYWxzZTsKICAgICAgICBpZiAodGhpcy50eXBlLmlzQW5vbnltb3VzIHx8IGU1KHRoaXMpICE9PSBmYWxzZSkgewogICAgICAgICAgaWYgKHRoaXMuZmlyc3RDaGlsZCgpKSB7CiAgICAgICAgICAgIHIzKys7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy50eXBlLmlzQW5vbnltb3VzIHx8IChpNCA9IHRydWUpOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgaTQgJiYgdDQgJiYgdDQodGhpcyksIGk0ID0gdGhpcy50eXBlLmlzQW5vbnltb3VzLCAhdGhpcy5uZXh0U2libGluZygpOyApIHsKICAgICAgICAgIGlmICghcjMpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIHRoaXMucGFyZW50KCksIHIzLS0sIGk0ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIG1hdGNoQ29udGV4dChlNSkgewogICAgICBpZiAoIXRoaXMuYnVmZmVyKQogICAgICAgIHJldHVybiB0ZTYodGhpcy5ub2RlLCBlNSk7CiAgICAgIGxldCB7IGJ1ZmZlcjogdDQgfSA9IHRoaXMuYnVmZmVyLCB7IHR5cGVzOiByMyB9ID0gdDQuc2V0OwogICAgICBmb3IgKGxldCBpNCA9IGU1Lmxlbmd0aCAtIDEsIG44ID0gdGhpcy5zdGFjay5sZW5ndGggLSAxOyBpNCA+PSAwOyBuOC0tKSB7CiAgICAgICAgaWYgKG44IDwgMCkKICAgICAgICAgIHJldHVybiB0ZTYodGhpcy5ub2RlLCBlNSwgaTQpOwogICAgICAgIGxldCBzOCA9IHIzW3Q0LmJ1ZmZlclt0aGlzLnN0YWNrW244XV1dOwogICAgICAgIGlmICghczguaXNBbm9ueW1vdXMpIHsKICAgICAgICAgIGlmIChlNVtpNF0gJiYgZTVbaTRdICE9IHM4Lm5hbWUpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIGk0LS07CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH07CiAgZnVuY3Rpb24gYWU2KGgxMCkgewogICAgcmV0dXJuIGgxMC5jaGlsZHJlbi5zb21lKChlNSkgPT4gZTUgaW5zdGFuY2VvZiBUNyB8fCAhZTUudHlwZS5pc0Fub255bW91cyB8fCBhZTYoZTUpKTsKICB9CiAgZnVuY3Rpb24gU2U2KGgxMCkgewogICAgdmFyIGU1OwogICAgbGV0IHsgYnVmZmVyOiB0NCwgbm9kZVNldDogcjMsIG1heEJ1ZmZlckxlbmd0aDogaTQgPSAxMDI0LCByZXVzZWQ6IG44ID0gW10sIG1pblJlcGVhdFR5cGU6IHM4ID0gcjMudHlwZXMubGVuZ3RoIH0gPSBoMTAsIGw3ID0gQXJyYXkuaXNBcnJheSh0NCkgPyBuZXcgSzYodDQsIHQ0Lmxlbmd0aCkgOiB0NCwgZjExID0gcjMudHlwZXMsIHUxMSA9IDAsIG80ID0gMDsKICAgIGZ1bmN0aW9uIGMxNyh4MjEsIHYxNSwgcDE4LCBtMjMsIEMxNykgewogICAgICBsZXQgeyBpZDogYjI1LCBzdGFydDogZzEyLCBlbmQ6IGsxOCwgc2l6ZTogejI2IH0gPSBsNywgTzE1ID0gbzQ7CiAgICAgIGZvciAoOyB6MjYgPCAwOyApCiAgICAgICAgaWYgKGw3Lm5leHQoKSwgejI2ID09IC0xKSB7CiAgICAgICAgICBsZXQgVzE4ID0gbjhbYjI1XTsKICAgICAgICAgIHAxOC5wdXNoKFcxOCksIG0yMy5wdXNoKGcxMiAtIHgyMSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIGlmICh6MjYgPT0gLTMpIHsKICAgICAgICAgIHUxMSA9IGIyNTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKHoyNiA9PSAtNCkgewogICAgICAgICAgbzQgPSBiMjU7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5yZWNvZ25pemVkIHJlY29yZCBzaXplOiAke3oyNn1gKTsKICAgICAgbGV0IEoxNCA9IGYxMVtiMjVdLCBVMjksIEwyMiwgY2UxNiA9IGcxMiAtIHgyMTsKICAgICAgaWYgKGsxOCAtIGcxMiA8PSBpNCAmJiAoTDIyID0gUzIxKGw3LnBvcyAtIHYxNSwgQzE3KSkpIHsKICAgICAgICBsZXQgVzE4ID0gbmV3IFVpbnQxNkFycmF5KEwyMi5zaXplIC0gTDIyLnNraXApLCBqMTkgPSBsNy5wb3MgLSBMMjIuc2l6ZSwgUjI2ID0gVzE4Lmxlbmd0aDsKICAgICAgICBmb3IgKDsgbDcucG9zID4gajE5OyApCiAgICAgICAgICBSMjYgPSBEMjAoTDIyLnN0YXJ0LCBXMTgsIFIyNik7CiAgICAgICAgVTI5ID0gbmV3IFQ3KFcxOCwgazE4IC0gTDIyLnN0YXJ0LCByMyksIGNlMTYgPSBMMjIuc3RhcnQgLSB4MjE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IFcxOCA9IGw3LnBvcyAtIHoyNjsKICAgICAgICBsNy5uZXh0KCk7CiAgICAgICAgbGV0IGoxOSA9IFtdLCBSMjYgPSBbXSwgSDIzID0gYjI1ID49IHM4ID8gYjI1IDogLTEsICQyMSA9IDAsIFExNyA9IGsxODsKICAgICAgICBmb3IgKDsgbDcucG9zID4gVzE4OyApCiAgICAgICAgICBIMjMgPj0gMCAmJiBsNy5pZCA9PSBIMjMgJiYgbDcuc2l6ZSA+PSAwID8gKGw3LmVuZCA8PSBRMTcgLSBpNCAmJiAoeTE3KGoxOSwgUjI2LCBnMTIsICQyMSwgbDcuZW5kLCBRMTcsIEgyMywgTzE1KSwgJDIxID0gajE5Lmxlbmd0aCwgUTE3ID0gbDcuZW5kKSwgbDcubmV4dCgpKSA6IGMxNyhnMTIsIFcxOCwgajE5LCBSMjYsIEgyMyk7CiAgICAgICAgaWYgKEgyMyA+PSAwICYmICQyMSA+IDAgJiYgJDIxIDwgajE5Lmxlbmd0aCAmJiB5MTcoajE5LCBSMjYsIGcxMiwgJDIxLCBnMTIsIFExNywgSDIzLCBPMTUpLCBqMTkucmV2ZXJzZSgpLCBSMjYucmV2ZXJzZSgpLCBIMjMgPiAtMSAmJiAkMjEgPiAwKSB7CiAgICAgICAgICBsZXQgZGUxMyA9IGE0KEoxNCk7CiAgICAgICAgICBVMjkgPSBwZTcoSjE0LCBqMTksIFIyNiwgMCwgajE5Lmxlbmd0aCwgMCwgazE4IC0gZzEyLCBkZTEzLCBkZTEzKTsKICAgICAgICB9IGVsc2UKICAgICAgICAgIFUyOSA9IGQxNShKMTQsIGoxOSwgUjI2LCBrMTggLSBnMTIsIE8xNSAtIGsxOCk7CiAgICAgIH0KICAgICAgcDE4LnB1c2goVTI5KSwgbTIzLnB1c2goY2UxNik7CiAgICB9CiAgICBmdW5jdGlvbiBhNCh4MjEpIHsKICAgICAgcmV0dXJuICh2MTUsIHAxOCwgbTIzKSA9PiB7CiAgICAgICAgbGV0IEMxNyA9IDAsIGIyNSA9IHYxNS5sZW5ndGggLSAxLCBnMTIsIGsxODsKICAgICAgICBpZiAoYjI1ID49IDAgJiYgKGcxMiA9IHYxNVtiMjVdKSBpbnN0YW5jZW9mIFA3KSB7CiAgICAgICAgICBpZiAoIWIyNSAmJiBnMTIudHlwZSA9PSB4MjEgJiYgZzEyLmxlbmd0aCA9PSBtMjMpCiAgICAgICAgICAgIHJldHVybiBnMTI7CiAgICAgICAgICAoazE4ID0gZzEyLnByb3AodzUubG9va0FoZWFkKSkgJiYgKEMxNyA9IHAxOFtiMjVdICsgZzEyLmxlbmd0aCArIGsxOCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkMTUoeDIxLCB2MTUsIHAxOCwgbTIzLCBDMTcpOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24geTE3KHgyMSwgdjE1LCBwMTgsIG0yMywgQzE3LCBiMjUsIGcxMiwgazE4KSB7CiAgICAgIGxldCB6MjYgPSBbXSwgTzE1ID0gW107CiAgICAgIGZvciAoOyB4MjEubGVuZ3RoID4gbTIzOyApCiAgICAgICAgejI2LnB1c2goeDIxLnBvcCgpKSwgTzE1LnB1c2godjE1LnBvcCgpICsgcDE4IC0gQzE3KTsKICAgICAgeDIxLnB1c2goZDE1KHIzLnR5cGVzW2cxMl0sIHoyNiwgTzE1LCBiMjUgLSBDMTcsIGsxOCAtIGIyNSkpLCB2MTUucHVzaChDMTcgLSBwMTgpOwogICAgfQogICAgZnVuY3Rpb24gZDE1KHgyMSwgdjE1LCBwMTgsIG0yMywgQzE3ID0gMCwgYjI1KSB7CiAgICAgIGlmICh1MTEpIHsKICAgICAgICBsZXQgZzEyID0gW3c1LmNvbnRleHRIYXNoLCB1MTFdOwogICAgICAgIGIyNSA9IGIyNSA/IFtnMTJdLmNvbmNhdChiMjUpIDogW2cxMl07CiAgICAgIH0KICAgICAgaWYgKEMxNyA+IDI1KSB7CiAgICAgICAgbGV0IGcxMiA9IFt3NS5sb29rQWhlYWQsIEMxN107CiAgICAgICAgYjI1ID0gYjI1ID8gW2cxMl0uY29uY2F0KGIyNSkgOiBbZzEyXTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFA3KHgyMSwgdjE1LCBwMTgsIG0yMywgYjI1KTsKICAgIH0KICAgIGZ1bmN0aW9uIFMyMSh4MjEsIHYxNSkgewogICAgICBsZXQgcDE4ID0gbDcuZm9yaygpLCBtMjMgPSAwLCBDMTcgPSAwLCBiMjUgPSAwLCBnMTIgPSBwMTguZW5kIC0gaTQsIGsxOCA9IHsgc2l6ZTogMCwgc3RhcnQ6IDAsIHNraXA6IDAgfTsKICAgICAgZToKICAgICAgICBmb3IgKGxldCB6MjYgPSBwMTgucG9zIC0geDIxOyBwMTgucG9zID4gejI2OyApIHsKICAgICAgICAgIGxldCBPMTUgPSBwMTguc2l6ZTsKICAgICAgICAgIGlmIChwMTguaWQgPT0gdjE1ICYmIE8xNSA+PSAwKSB7CiAgICAgICAgICAgIGsxOC5zaXplID0gbTIzLCBrMTguc3RhcnQgPSBDMTcsIGsxOC5za2lwID0gYjI1LCBiMjUgKz0gNCwgbTIzICs9IDQsIHAxOC5uZXh0KCk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgbGV0IEoxNCA9IHAxOC5wb3MgLSBPMTU7CiAgICAgICAgICBpZiAoTzE1IDwgMCB8fCBKMTQgPCB6MjYgfHwgcDE4LnN0YXJ0IDwgZzEyKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGxldCBVMjkgPSBwMTguaWQgPj0gczggPyA0IDogMCwgTDIyID0gcDE4LnN0YXJ0OwogICAgICAgICAgZm9yIChwMTgubmV4dCgpOyBwMTgucG9zID4gSjE0OyApIHsKICAgICAgICAgICAgaWYgKHAxOC5zaXplIDwgMCkKICAgICAgICAgICAgICBpZiAocDE4LnNpemUgPT0gLTMpCiAgICAgICAgICAgICAgICBVMjkgKz0gNDsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhayBlOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcDE4LmlkID49IHM4ICYmIChVMjkgKz0gNCk7CiAgICAgICAgICAgIHAxOC5uZXh0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBDMTcgPSBMMjIsIG0yMyArPSBPMTUsIGIyNSArPSBVMjk7CiAgICAgICAgfQogICAgICByZXR1cm4gKHYxNSA8IDAgfHwgbTIzID09IHgyMSkgJiYgKGsxOC5zaXplID0gbTIzLCBrMTguc3RhcnQgPSBDMTcsIGsxOC5za2lwID0gYjI1KSwgazE4LnNpemUgPiA0ID8gazE4IDogdm9pZCAwOwogICAgfQogICAgZnVuY3Rpb24gRDIwKHgyMSwgdjE1LCBwMTgpIHsKICAgICAgbGV0IHsgaWQ6IG0yMywgc3RhcnQ6IEMxNywgZW5kOiBiMjUsIHNpemU6IGcxMiB9ID0gbDc7CiAgICAgIGlmIChsNy5uZXh0KCksIGcxMiA+PSAwICYmIG0yMyA8IHM4KSB7CiAgICAgICAgbGV0IGsxOCA9IHAxODsKICAgICAgICBpZiAoZzEyID4gNCkgewogICAgICAgICAgbGV0IHoyNiA9IGw3LnBvcyAtIChnMTIgLSA0KTsKICAgICAgICAgIGZvciAoOyBsNy5wb3MgPiB6MjY7ICkKICAgICAgICAgICAgcDE4ID0gRDIwKHgyMSwgdjE1LCBwMTgpOwogICAgICAgIH0KICAgICAgICB2MTVbLS1wMThdID0gazE4LCB2MTVbLS1wMThdID0gYjI1IC0geDIxLCB2MTVbLS1wMThdID0gQzE3IC0geDIxLCB2MTVbLS1wMThdID0gbTIzOwogICAgICB9IGVsc2UKICAgICAgICBnMTIgPT0gLTMgPyB1MTEgPSBtMjMgOiBnMTIgPT0gLTQgJiYgKG80ID0gbTIzKTsKICAgICAgcmV0dXJuIHAxODsKICAgIH0KICAgIGxldCBFMTUgPSBbXSwgRjIyID0gW107CiAgICBmb3IgKDsgbDcucG9zID4gMDsgKQogICAgICBjMTcoaDEwLnN0YXJ0IHx8IDAsIGgxMC5idWZmZXJTdGFydCB8fCAwLCBFMTUsIEYyMiwgLTEpOwogICAgbGV0IF8yNSA9IChlNSA9IGgxMC5sZW5ndGgpICE9PSBudWxsICYmIGU1ICE9PSB2b2lkIDAgPyBlNSA6IEUxNS5sZW5ndGggPyBGMjJbMF0gKyBFMTVbMF0ubGVuZ3RoIDogMDsKICAgIHJldHVybiBuZXcgUDcoZjExW2gxMC50b3BJRF0sIEUxNS5yZXZlcnNlKCksIEYyMi5yZXZlcnNlKCksIF8yNSk7CiAgfQogIHZhciBtZTggPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICBmdW5jdGlvbiBZOChoMTAsIGU1KSB7CiAgICBpZiAoIWgxMC5pc0Fub255bW91cyB8fCBlNSBpbnN0YW5jZW9mIFQ3IHx8IGU1LnR5cGUgIT0gaDEwKQogICAgICByZXR1cm4gMTsKICAgIGxldCB0NCA9IG1lOC5nZXQoZTUpOwogICAgaWYgKHQ0ID09IG51bGwpIHsKICAgICAgdDQgPSAxOwogICAgICBmb3IgKGxldCByMyBvZiBlNS5jaGlsZHJlbikgewogICAgICAgIGlmIChyMy50eXBlICE9IGgxMCB8fCAhKHIzIGluc3RhbmNlb2YgUDcpKSB7CiAgICAgICAgICB0NCA9IDE7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdDQgKz0gWTgoaDEwLCByMyk7CiAgICAgIH0KICAgICAgbWU4LnNldChlNSwgdDQpOwogICAgfQogICAgcmV0dXJuIHQ0OwogIH0KICBmdW5jdGlvbiBwZTcoaDEwLCBlNSwgdDQsIHIzLCBpNCwgbjgsIHM4LCBsNywgZjExKSB7CiAgICBsZXQgdTExID0gMDsKICAgIGZvciAobGV0IGQxNSA9IHIzOyBkMTUgPCBpNDsgZDE1KyspCiAgICAgIHUxMSArPSBZOChoMTAsIGU1W2QxNV0pOwogICAgbGV0IG80ID0gTWF0aC5jZWlsKHUxMSAqIDEuNSAvIDgpLCBjMTcgPSBbXSwgYTQgPSBbXTsKICAgIGZ1bmN0aW9uIHkxNyhkMTUsIFMyMSwgRDIwLCBFMTUsIEYyMikgewogICAgICBmb3IgKGxldCBfMjUgPSBEMjA7IF8yNSA8IEUxNTsgKSB7CiAgICAgICAgbGV0IHgyMSA9IF8yNSwgdjE1ID0gUzIxW18yNV0sIHAxOCA9IFk4KGgxMCwgZDE1W18yNV0pOwogICAgICAgIGZvciAoXzI1Kys7IF8yNSA8IEUxNTsgXzI1KyspIHsKICAgICAgICAgIGxldCBtMjMgPSBZOChoMTAsIGQxNVtfMjVdKTsKICAgICAgICAgIGlmIChwMTggKyBtMjMgPj0gbzQpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgcDE4ICs9IG0yMzsKICAgICAgICB9CiAgICAgICAgaWYgKF8yNSA9PSB4MjEgKyAxKSB7CiAgICAgICAgICBpZiAocDE4ID4gbzQpIHsKICAgICAgICAgICAgbGV0IG0yMyA9IGQxNVt4MjFdOwogICAgICAgICAgICB5MTcobTIzLmNoaWxkcmVuLCBtMjMucG9zaXRpb25zLCAwLCBtMjMuY2hpbGRyZW4ubGVuZ3RoLCBTMjFbeDIxXSArIEYyMik7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgYzE3LnB1c2goZDE1W3gyMV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgbTIzID0gUzIxW18yNSAtIDFdICsgZDE1W18yNSAtIDFdLmxlbmd0aCAtIHYxNTsKICAgICAgICAgIGMxNy5wdXNoKHBlNyhoMTAsIGQxNSwgUzIxLCB4MjEsIF8yNSwgdjE1LCBtMjMsIG51bGwsIGYxMSkpOwogICAgICAgIH0KICAgICAgICBhNC5wdXNoKHYxNSArIEYyMiAtIG44KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHkxNyhlNSwgdDQsIHIzLCBpNCwgMCksIChsNyB8fCBmMTEpKGMxNywgYTQsIHM4KTsKICB9CiAgdmFyIEc2ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCByMywgaTQsIG44ID0gZmFsc2UsIHM4ID0gZmFsc2UpIHsKICAgICAgdGhpcy5mcm9tID0gZTUsIHRoaXMudG8gPSB0NCwgdGhpcy50cmVlID0gcjMsIHRoaXMub2Zmc2V0ID0gaTQsIHRoaXMub3BlbiA9IChuOCA/IDEgOiAwKSB8IChzOCA/IDIgOiAwKTsKICAgIH0KICAgIGdldCBvcGVuU3RhcnQoKSB7CiAgICAgIHJldHVybiAodGhpcy5vcGVuICYgMSkgPiAwOwogICAgfQogICAgZ2V0IG9wZW5FbmQoKSB7CiAgICAgIHJldHVybiAodGhpcy5vcGVuICYgMikgPiAwOwogICAgfQogICAgc3RhdGljIGFkZFRyZWUoZTUsIHQ0ID0gW10sIHIzID0gZmFsc2UpIHsKICAgICAgbGV0IGk0ID0gW25ldyBHNigwLCBlNS5sZW5ndGgsIGU1LCAwLCBmYWxzZSwgcjMpXTsKICAgICAgZm9yIChsZXQgbjggb2YgdDQpCiAgICAgICAgbjgudG8gPiBlNS5sZW5ndGggJiYgaTQucHVzaChuOCk7CiAgICAgIHJldHVybiBpNDsKICAgIH0KICAgIHN0YXRpYyBhcHBseUNoYW5nZXMoZTUsIHQ0LCByMyA9IDEyOCkgewogICAgICBpZiAoIXQ0Lmxlbmd0aCkKICAgICAgICByZXR1cm4gZTU7CiAgICAgIGxldCBpNCA9IFtdLCBuOCA9IDEsIHM4ID0gZTUubGVuZ3RoID8gZTVbMF0gOiBudWxsOwogICAgICBmb3IgKGxldCBsNyA9IDAsIGYxMSA9IDAsIHUxMSA9IDA7IDsgbDcrKykgewogICAgICAgIGxldCBvNCA9IGw3IDwgdDQubGVuZ3RoID8gdDRbbDddIDogbnVsbCwgYzE3ID0gbzQgPyBvNC5mcm9tQSA6IDFlOTsKICAgICAgICBpZiAoYzE3IC0gZjExID49IHIzKQogICAgICAgICAgZm9yICg7IHM4ICYmIHM4LmZyb20gPCBjMTc7ICkgewogICAgICAgICAgICBsZXQgYTQgPSBzODsKICAgICAgICAgICAgaWYgKGYxMSA+PSBhNC5mcm9tIHx8IGMxNyA8PSBhNC50byB8fCB1MTEpIHsKICAgICAgICAgICAgICBsZXQgeTE3ID0gTWF0aC5tYXgoYTQuZnJvbSwgZjExKSAtIHUxMSwgZDE1ID0gTWF0aC5taW4oYTQudG8sIGMxNykgLSB1MTE7CiAgICAgICAgICAgICAgYTQgPSB5MTcgPj0gZDE1ID8gbnVsbCA6IG5ldyBHNih5MTcsIGQxNSwgYTQudHJlZSwgYTQub2Zmc2V0ICsgdTExLCBsNyA+IDAsICEhbzQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhNCAmJiBpNC5wdXNoKGE0KSwgczgudG8gPiBjMTcpCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHM4ID0gbjggPCBlNS5sZW5ndGggPyBlNVtuOCsrXSA6IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgaWYgKCFvNCkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGYxMSA9IG80LnRvQSwgdTExID0gbzQudG9BIC0gbzQudG9COwogICAgICB9CiAgICAgIHJldHVybiBpNDsKICAgIH0KICB9OwogIHZhciB5ZTcgPSBjbGFzcyB7CiAgICBzdGFydFBhcnNlKGU1LCB0NCwgcjMpIHsKICAgICAgcmV0dXJuIHR5cGVvZiBlNSA9PSAic3RyaW5nIiAmJiAoZTUgPSBuZXcgbGU2KGU1KSksIHIzID0gcjMgPyByMy5sZW5ndGggPyByMy5tYXAoKGk0KSA9PiBuZXcgQjcoaTQuZnJvbSwgaTQudG8pKSA6IFtuZXcgQjcoMCwgMCldIDogW25ldyBCNygwLCBlNS5sZW5ndGgpXSwgdGhpcy5jcmVhdGVQYXJzZShlNSwgdDQgfHwgW10sIHIzKTsKICAgIH0KICAgIHBhcnNlKGU1LCB0NCwgcjMpIHsKICAgICAgbGV0IGk0ID0gdGhpcy5zdGFydFBhcnNlKGU1LCB0NCwgcjMpOwogICAgICBmb3IgKDsgOyApIHsKICAgICAgICBsZXQgbjggPSBpNC5hZHZhbmNlKCk7CiAgICAgICAgaWYgKG44KQogICAgICAgICAgcmV0dXJuIG44OwogICAgICB9CiAgICB9CiAgfTsKICB2YXIgbGU2ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUpIHsKICAgICAgdGhpcy5zdHJpbmcgPSBlNTsKICAgIH0KICAgIGdldCBsZW5ndGgoKSB7CiAgICAgIHJldHVybiB0aGlzLnN0cmluZy5sZW5ndGg7CiAgICB9CiAgICBjaHVuayhlNSkgewogICAgICByZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UoZTUpOwogICAgfQogICAgZ2V0IGxpbmVDaHVua3MoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJlYWQoZTUsIHQ0KSB7CiAgICAgIHJldHVybiB0aGlzLnN0cmluZy5zbGljZShlNSwgdDQpOwogICAgfQogIH07CiAgdmFyIGZlNSA9IG5ldyB3NSh7IHBlck5vZGU6IHRydWUgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9oaWdobGlnaHRAMS4xLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjMvZGVuby9oaWdobGlnaHQuanMKICB2YXIgTDUgPSAwOwogIHZhciBmMiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBhNCwgaTQpIHsKICAgICAgdGhpcy5zZXQgPSB0NCwgdGhpcy5iYXNlID0gYTQsIHRoaXMubW9kaWZpZWQgPSBpNCwgdGhpcy5pZCA9IEw1Kys7CiAgICB9CiAgICBzdGF0aWMgZGVmaW5lKHQ0KSB7CiAgICAgIGlmICh0ND8uYmFzZSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgZGVyaXZlIGZyb20gYSBtb2RpZmllZCB0YWciKTsKICAgICAgbGV0IGE0ID0gbmV3IGYyKFtdLCBudWxsLCBbXSk7CiAgICAgIGlmIChhNC5zZXQucHVzaChhNCksIHQ0KQogICAgICAgIGZvciAobGV0IGk0IG9mIHQ0LnNldCkKICAgICAgICAgIGE0LnNldC5wdXNoKGk0KTsKICAgICAgcmV0dXJuIGE0OwogICAgfQogICAgc3RhdGljIGRlZmluZU1vZGlmaWVyKCkgewogICAgICBsZXQgdDQgPSBuZXcgdjMoKTsKICAgICAgcmV0dXJuIChhNCkgPT4gYTQubW9kaWZpZWQuaW5kZXhPZih0NCkgPiAtMSA/IGE0IDogdjMuZ2V0KGE0LmJhc2UgfHwgYTQsIGE0Lm1vZGlmaWVkLmNvbmNhdCh0NCkuc29ydCgoaTQsIGw3KSA9PiBpNC5pZCAtIGw3LmlkKSk7CiAgICB9CiAgfTsKICB2YXIgUTQgPSAwOwogIHZhciB2MyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aGlzLmluc3RhbmNlcyA9IFtdLCB0aGlzLmlkID0gUTQrKzsKICAgIH0KICAgIHN0YXRpYyBnZXQodDQsIGE0KSB7CiAgICAgIGlmICghYTQubGVuZ3RoKQogICAgICAgIHJldHVybiB0NDsKICAgICAgbGV0IGk0ID0gYTRbMF0uaW5zdGFuY2VzLmZpbmQoKG80KSA9PiBvNC5iYXNlID09IHQ0ICYmIFU2KGE0LCBvNC5tb2RpZmllZCkpOwogICAgICBpZiAoaTQpCiAgICAgICAgcmV0dXJuIGk0OwogICAgICBsZXQgbDcgPSBbXSwgczggPSBuZXcgZjIobDcsIHQ0LCBhNCk7CiAgICAgIGZvciAobGV0IG80IG9mIGE0KQogICAgICAgIG80Lmluc3RhbmNlcy5wdXNoKHM4KTsKICAgICAgbGV0IGMxNyA9IFY4KGE0KTsKICAgICAgZm9yIChsZXQgbzQgb2YgdDQuc2V0KQogICAgICAgIGZvciAobGV0IGQxNSBvZiBjMTcpCiAgICAgICAgICBsNy5wdXNoKHYzLmdldChvNCwgZDE1KSk7CiAgICAgIHJldHVybiBzODsKICAgIH0KICB9OwogIGZ1bmN0aW9uIFU2KHIzLCB0NCkgewogICAgcmV0dXJuIHIzLmxlbmd0aCA9PSB0NC5sZW5ndGggJiYgcjMuZXZlcnkoKGE0LCBpNCkgPT4gYTQgPT0gdDRbaTRdKTsKICB9CiAgZnVuY3Rpb24gVjgocjMpIHsKICAgIGxldCB0NCA9IFtyM107CiAgICBmb3IgKGxldCBhNCA9IDA7IGE0IDwgcjMubGVuZ3RoOyBhNCsrKQogICAgICBmb3IgKGxldCBpNCBvZiBWOChyMy5zbGljZSgwLCBhNCkuY29uY2F0KHIzLnNsaWNlKGE0ICsgMSkpKSkKICAgICAgICB0NC5wdXNoKGk0KTsKICAgIHJldHVybiB0NDsKICB9CiAgZnVuY3Rpb24gJDcocjMpIHsKICAgIGxldCB0NCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yIChsZXQgYTQgaW4gcjMpIHsKICAgICAgbGV0IGk0ID0gcjNbYTRdOwogICAgICBBcnJheS5pc0FycmF5KGk0KSB8fCAoaTQgPSBbaTRdKTsKICAgICAgZm9yIChsZXQgbDcgb2YgYTQuc3BsaXQoIiAiKSkKICAgICAgICBpZiAobDcpIHsKICAgICAgICAgIGxldCBzOCA9IFtdLCBjMTcgPSAyLCBvNCA9IGw3OwogICAgICAgICAgZm9yIChsZXQgcDE4ID0gMDsgOyApIHsKICAgICAgICAgICAgaWYgKG80ID09ICIuLi4iICYmIHAxOCA+IDAgJiYgcDE4ICsgMyA9PSBsNy5sZW5ndGgpIHsKICAgICAgICAgICAgICBjMTcgPSAxOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxldCBoMTAgPSAvXiIoPzpbXiJcXF18XFwuKSo/InxbXlwvIV0rLy5leGVjKG80KTsKICAgICAgICAgICAgaWYgKCFoMTApCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgcGF0aDogIiArIGw3KTsKICAgICAgICAgICAgaWYgKHM4LnB1c2goaDEwWzBdID09ICIqIiA/ICIiIDogaDEwWzBdWzBdID09ICciJyA/IEpTT04ucGFyc2UoaDEwWzBdKSA6IGgxMFswXSksIHAxOCArPSBoMTBbMF0ubGVuZ3RoLCBwMTggPT0gbDcubGVuZ3RoKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBsZXQgTjE3ID0gbDdbcDE4KytdOwogICAgICAgICAgICBpZiAocDE4ID09IGw3Lmxlbmd0aCAmJiBOMTcgPT0gIiEiKSB7CiAgICAgICAgICAgICAgYzE3ID0gMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoTjE3ICE9ICIvIikKICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBwYXRoOiAiICsgbDcpOwogICAgICAgICAgICBvNCA9IGw3LnNsaWNlKHAxOCk7CiAgICAgICAgICB9CiAgICAgICAgICBsZXQgZDE1ID0gczgubGVuZ3RoIC0gMSwgZzEyID0gczhbZDE1XTsKICAgICAgICAgIGlmICghZzEyKQogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBwYXRoOiAiICsgbDcpOwogICAgICAgICAgbGV0IE8xNSA9IG5ldyBNNyhpNCwgYzE3LCBkMTUgPiAwID8gczguc2xpY2UoMCwgZDE1KSA6IG51bGwpOwogICAgICAgICAgdDRbZzEyXSA9IE8xNS5zb3J0KHQ0W2cxMl0pOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB6Ny5hZGQodDQpOwogIH0KICB2YXIgejcgPSBuZXcgdzUoKTsKICB2YXIgTTcgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgYTQsIGk0LCBsNykgewogICAgICB0aGlzLnRhZ3MgPSB0NCwgdGhpcy5tb2RlID0gYTQsIHRoaXMuY29udGV4dCA9IGk0LCB0aGlzLm5leHQgPSBsNzsKICAgIH0KICAgIGdldCBvcGFxdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLm1vZGUgPT0gMDsKICAgIH0KICAgIGdldCBpbmhlcml0KCkgewogICAgICByZXR1cm4gdGhpcy5tb2RlID09IDE7CiAgICB9CiAgICBzb3J0KHQ0KSB7CiAgICAgIHJldHVybiAhdDQgfHwgdDQuZGVwdGggPCB0aGlzLmRlcHRoID8gKHRoaXMubmV4dCA9IHQ0LCB0aGlzKSA6ICh0NC5uZXh0ID0gdGhpcy5zb3J0KHQ0Lm5leHQpLCB0NCk7CiAgICB9CiAgICBnZXQgZGVwdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLmNvbnRleHQgPyB0aGlzLmNvbnRleHQubGVuZ3RoIDogMDsKICAgIH0KICB9OwogIE03LmVtcHR5ID0gbmV3IE03KFtdLCAyLCBudWxsKTsKICBmdW5jdGlvbiBXNShyMywgdDQpIHsKICAgIGxldCBhNCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yIChsZXQgczggb2YgcjMpCiAgICAgIGlmICghQXJyYXkuaXNBcnJheShzOC50YWcpKQogICAgICAgIGE0W3M4LnRhZy5pZF0gPSBzOC5jbGFzczsKICAgICAgZWxzZQogICAgICAgIGZvciAobGV0IGMxNyBvZiBzOC50YWcpCiAgICAgICAgICBhNFtjMTcuaWRdID0gczguY2xhc3M7CiAgICBsZXQgeyBzY29wZTogaTQsIGFsbDogbDcgPSBudWxsIH0gPSB0NCB8fCB7fTsKICAgIHJldHVybiB7IHN0eWxlOiAoczgpID0+IHsKICAgICAgbGV0IGMxNyA9IGw3OwogICAgICBmb3IgKGxldCBvNCBvZiBzOCkKICAgICAgICBmb3IgKGxldCBkMTUgb2YgbzQuc2V0KSB7CiAgICAgICAgICBsZXQgZzEyID0gYTRbZDE1LmlkXTsKICAgICAgICAgIGlmIChnMTIpIHsKICAgICAgICAgICAgYzE3ID0gYzE3ID8gYzE3ICsgIiAiICsgZzEyIDogZzEyOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBjMTc7CiAgICB9LCBzY29wZTogaTQgfTsKICB9CiAgZnVuY3Rpb24gWDgocjMsIHQ0KSB7CiAgICBsZXQgYTQgPSBudWxsOwogICAgZm9yIChsZXQgaTQgb2YgcjMpIHsKICAgICAgbGV0IGw3ID0gaTQuc3R5bGUodDQpOwogICAgICBsNyAmJiAoYTQgPSBhNCA/IGE0ICsgIiAiICsgbDcgOiBsNyk7CiAgICB9CiAgICByZXR1cm4gYTQ7CiAgfQogIGZ1bmN0aW9uIF82KHIzLCB0NCwgYTQsIGk0ID0gMCwgbDcgPSByMy5sZW5ndGgpIHsKICAgIGxldCBzOCA9IG5ldyBQOChpNCwgQXJyYXkuaXNBcnJheSh0NCkgPyB0NCA6IFt0NF0sIGE0KTsKICAgIHM4LmhpZ2hsaWdodFJhbmdlKHIzLmN1cnNvcigpLCBpNCwgbDcsICIiLCBzOC5oaWdobGlnaHRlcnMpLCBzOC5mbHVzaChsNyk7CiAgfQogIHZhciBQOCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBhNCwgaTQpIHsKICAgICAgdGhpcy5hdCA9IHQ0LCB0aGlzLmhpZ2hsaWdodGVycyA9IGE0LCB0aGlzLnNwYW4gPSBpNCwgdGhpcy5jbGFzcyA9ICIiOwogICAgfQogICAgc3RhcnRTcGFuKHQ0LCBhNCkgewogICAgICBhNCAhPSB0aGlzLmNsYXNzICYmICh0aGlzLmZsdXNoKHQ0KSwgdDQgPiB0aGlzLmF0ICYmICh0aGlzLmF0ID0gdDQpLCB0aGlzLmNsYXNzID0gYTQpOwogICAgfQogICAgZmx1c2godDQpIHsKICAgICAgdDQgPiB0aGlzLmF0ICYmIHRoaXMuY2xhc3MgJiYgdGhpcy5zcGFuKHRoaXMuYXQsIHQ0LCB0aGlzLmNsYXNzKTsKICAgIH0KICAgIGhpZ2hsaWdodFJhbmdlKHQ0LCBhNCwgaTQsIGw3LCBzOCkgewogICAgICBsZXQgeyB0eXBlOiBjMTcsIGZyb206IG80LCB0bzogZDE1IH0gPSB0NDsKICAgICAgaWYgKG80ID49IGk0IHx8IGQxNSA8PSBhNCkKICAgICAgICByZXR1cm47CiAgICAgIGMxNy5pc1RvcCAmJiAoczggPSB0aGlzLmhpZ2hsaWdodGVycy5maWx0ZXIoKE4xNykgPT4gIU4xNy5zY29wZSB8fCBOMTcuc2NvcGUoYzE3KSkpOwogICAgICBsZXQgZzEyID0gbDcsIE8xNSA9IFk5KHQ0KSB8fCBNNy5lbXB0eSwgcDE4ID0gWDgoczgsIE8xNS50YWdzKTsKICAgICAgaWYgKHAxOCAmJiAoZzEyICYmIChnMTIgKz0gIiAiKSwgZzEyICs9IHAxOCwgTzE1Lm1vZGUgPT0gMSAmJiAobDcgKz0gKGw3ID8gIiAiIDogIiIpICsgcDE4KSksIHRoaXMuc3RhcnRTcGFuKHQ0LmZyb20sIGcxMiksIE8xNS5vcGFxdWUpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgaDEwID0gdDQudHJlZSAmJiB0NC50cmVlLnByb3AodzUubW91bnRlZCk7CiAgICAgIGlmIChoMTAgJiYgaDEwLm92ZXJsYXkpIHsKICAgICAgICBsZXQgTjE3ID0gdDQubm9kZS5lbnRlcihoMTAub3ZlcmxheVswXS5mcm9tICsgbzQsIDEpLCBHMjMgPSB0aGlzLmhpZ2hsaWdodGVycy5maWx0ZXIoKHgyMSkgPT4gIXgyMS5zY29wZSB8fCB4MjEuc2NvcGUoaDEwLnRyZWUudHlwZSkpLCBEMjAgPSB0NC5maXJzdENoaWxkKCk7CiAgICAgICAgZm9yIChsZXQgeDIxID0gMCwgUzIxID0gbzQ7IDsgeDIxKyspIHsKICAgICAgICAgIGxldCBBMjAgPSB4MjEgPCBoMTAub3ZlcmxheS5sZW5ndGggPyBoMTAub3ZlcmxheVt4MjFdIDogbnVsbCwgcTIwID0gQTIwID8gQTIwLmZyb20gKyBvNCA6IGQxNSwgSDIzID0gTWF0aC5tYXgoYTQsIFMyMSksIEUxNSA9IE1hdGgubWluKGk0LCBxMjApOwogICAgICAgICAgaWYgKEgyMyA8IEUxNSAmJiBEMjApCiAgICAgICAgICAgIGZvciAoOyB0NC5mcm9tIDwgRTE1ICYmICh0aGlzLmhpZ2hsaWdodFJhbmdlKHQ0LCBIMjMsIEUxNSwgbDcsIHM4KSwgdGhpcy5zdGFydFNwYW4oTWF0aC5taW4oaTQsIHQ0LnRvKSwgZzEyKSwgISh0NC50byA+PSBxMjAgfHwgIXQ0Lm5leHRTaWJsaW5nKCkpKTsgKQogICAgICAgICAgICAgIDsKICAgICAgICAgIGlmICghQTIwIHx8IHEyMCA+IGk0KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIFMyMSA9IEEyMC50byArIG80LCBTMjEgPiBhNCAmJiAodGhpcy5oaWdobGlnaHRSYW5nZShOMTcuY3Vyc29yKCksIE1hdGgubWF4KGE0LCBBMjAuZnJvbSArIG80KSwgTWF0aC5taW4oaTQsIFMyMSksIGw3LCBHMjMpLCB0aGlzLnN0YXJ0U3BhbihTMjEsIGcxMikpOwogICAgICAgIH0KICAgICAgICBEMjAgJiYgdDQucGFyZW50KCk7CiAgICAgIH0gZWxzZSBpZiAodDQuZmlyc3RDaGlsZCgpKSB7CiAgICAgICAgZG8KICAgICAgICAgIGlmICghKHQ0LnRvIDw9IGE0KSkgewogICAgICAgICAgICBpZiAodDQuZnJvbSA+PSBpNCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRSYW5nZSh0NCwgYTQsIGk0LCBsNywgczgpLCB0aGlzLnN0YXJ0U3BhbihNYXRoLm1pbihpNCwgdDQudG8pLCBnMTIpOwogICAgICAgICAgfQogICAgICAgIHdoaWxlICh0NC5uZXh0U2libGluZygpKTsKICAgICAgICB0NC5wYXJlbnQoKTsKICAgICAgfQogICAgfQogIH07CiAgZnVuY3Rpb24gWTkocjMpIHsKICAgIGxldCB0NCA9IHIzLnR5cGUucHJvcCh6Nyk7CiAgICBmb3IgKDsgdDQgJiYgdDQuY29udGV4dCAmJiAhcjMubWF0Y2hDb250ZXh0KHQ0LmNvbnRleHQpOyApCiAgICAgIHQ0ID0gdDQubmV4dDsKICAgIHJldHVybiB0NCB8fCBudWxsOwogIH0KICB2YXIgZTIgPSBmMi5kZWZpbmU7CiAgdmFyIEk4ID0gZTIoKTsKICB2YXIgYjUgPSBlMigpOwogIHZhciBCOCA9IGUyKGI1KTsKICB2YXIgRjUgPSBlMihiNSk7CiAgdmFyIHk1ID0gZTIoKTsKICB2YXIgQzMgPSBlMih5NSk7CiAgdmFyIEs3ID0gZTIoeTUpOwogIHZhciBrMyA9IGUyKCk7CiAgdmFyIHc2ID0gZTIoazMpOwogIHZhciBtNSA9IGUyKCk7CiAgdmFyIHUyID0gZTIoKTsKICB2YXIgajQgPSBlMigpOwogIHZhciBSNiA9IGUyKGo0KTsKICB2YXIgVDggPSBlMigpOwogIHZhciBuMyA9IHsgY29tbWVudDogSTgsIGxpbmVDb21tZW50OiBlMihJOCksIGJsb2NrQ29tbWVudDogZTIoSTgpLCBkb2NDb21tZW50OiBlMihJOCksIG5hbWU6IGI1LCB2YXJpYWJsZU5hbWU6IGUyKGI1KSwgdHlwZU5hbWU6IEI4LCB0YWdOYW1lOiBlMihCOCksIHByb3BlcnR5TmFtZTogRjUsIGF0dHJpYnV0ZU5hbWU6IGUyKEY1KSwgY2xhc3NOYW1lOiBlMihiNSksIGxhYmVsTmFtZTogZTIoYjUpLCBuYW1lc3BhY2U6IGUyKGI1KSwgbWFjcm9OYW1lOiBlMihiNSksIGxpdGVyYWw6IHk1LCBzdHJpbmc6IEMzLCBkb2NTdHJpbmc6IGUyKEMzKSwgY2hhcmFjdGVyOiBlMihDMyksIGF0dHJpYnV0ZVZhbHVlOiBlMihDMyksIG51bWJlcjogSzcsIGludGVnZXI6IGUyKEs3KSwgZmxvYXQ6IGUyKEs3KSwgYm9vbDogZTIoeTUpLCByZWdleHA6IGUyKHk1KSwgZXNjYXBlOiBlMih5NSksIGNvbG9yOiBlMih5NSksIHVybDogZTIoeTUpLCBrZXl3b3JkOiBtNSwgc2VsZjogZTIobTUpLCBudWxsOiBlMihtNSksIGF0b206IGUyKG01KSwgdW5pdDogZTIobTUpLCBtb2RpZmllcjogZTIobTUpLCBvcGVyYXRvcktleXdvcmQ6IGUyKG01KSwgY29udHJvbEtleXdvcmQ6IGUyKG01KSwgZGVmaW5pdGlvbktleXdvcmQ6IGUyKG01KSwgbW9kdWxlS2V5d29yZDogZTIobTUpLCBvcGVyYXRvcjogdTIsIGRlcmVmT3BlcmF0b3I6IGUyKHUyKSwgYXJpdGhtZXRpY09wZXJhdG9yOiBlMih1MiksIGxvZ2ljT3BlcmF0b3I6IGUyKHUyKSwgYml0d2lzZU9wZXJhdG9yOiBlMih1MiksIGNvbXBhcmVPcGVyYXRvcjogZTIodTIpLCB1cGRhdGVPcGVyYXRvcjogZTIodTIpLCBkZWZpbml0aW9uT3BlcmF0b3I6IGUyKHUyKSwgdHlwZU9wZXJhdG9yOiBlMih1MiksIGNvbnRyb2xPcGVyYXRvcjogZTIodTIpLCBwdW5jdHVhdGlvbjogajQsIHNlcGFyYXRvcjogZTIoajQpLCBicmFja2V0OiBSNiwgYW5nbGVCcmFja2V0OiBlMihSNiksIHNxdWFyZUJyYWNrZXQ6IGUyKFI2KSwgcGFyZW46IGUyKFI2KSwgYnJhY2U6IGUyKFI2KSwgY29udGVudDogazMsIGhlYWRpbmc6IHc2LCBoZWFkaW5nMTogZTIodzYpLCBoZWFkaW5nMjogZTIodzYpLCBoZWFkaW5nMzogZTIodzYpLCBoZWFkaW5nNDogZTIodzYpLCBoZWFkaW5nNTogZTIodzYpLCBoZWFkaW5nNjogZTIodzYpLCBjb250ZW50U2VwYXJhdG9yOiBlMihrMyksIGxpc3Q6IGUyKGszKSwgcXVvdGU6IGUyKGszKSwgZW1waGFzaXM6IGUyKGszKSwgc3Ryb25nOiBlMihrMyksIGxpbms6IGUyKGszKSwgbW9ub3NwYWNlOiBlMihrMyksIHN0cmlrZXRocm91Z2g6IGUyKGszKSwgaW5zZXJ0ZWQ6IGUyKCksIGRlbGV0ZWQ6IGUyKCksIGNoYW5nZWQ6IGUyKCksIGludmFsaWQ6IGUyKCksIG1ldGE6IFQ4LCBkb2N1bWVudE1ldGE6IGUyKFQ4KSwgYW5ub3RhdGlvbjogZTIoVDgpLCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb246IGUyKFQ4KSwgZGVmaW5pdGlvbjogZjIuZGVmaW5lTW9kaWZpZXIoKSwgY29uc3RhbnQ6IGYyLmRlZmluZU1vZGlmaWVyKCksIGZ1bmN0aW9uOiBmMi5kZWZpbmVNb2RpZmllcigpLCBzdGFuZGFyZDogZjIuZGVmaW5lTW9kaWZpZXIoKSwgbG9jYWw6IGYyLmRlZmluZU1vZGlmaWVyKCksIHNwZWNpYWw6IGYyLmRlZmluZU1vZGlmaWVyKCkgfTsKICB2YXIgdHQ1ID0gVzUoW3sgdGFnOiBuMy5saW5rLCBjbGFzczogInRvay1saW5rIiB9LCB7IHRhZzogbjMuaGVhZGluZywgY2xhc3M6ICJ0b2staGVhZGluZyIgfSwgeyB0YWc6IG4zLmVtcGhhc2lzLCBjbGFzczogInRvay1lbXBoYXNpcyIgfSwgeyB0YWc6IG4zLnN0cm9uZywgY2xhc3M6ICJ0b2stc3Ryb25nIiB9LCB7IHRhZzogbjMua2V5d29yZCwgY2xhc3M6ICJ0b2sta2V5d29yZCIgfSwgeyB0YWc6IG4zLmF0b20sIGNsYXNzOiAidG9rLWF0b20iIH0sIHsgdGFnOiBuMy5ib29sLCBjbGFzczogInRvay1ib29sIiB9LCB7IHRhZzogbjMudXJsLCBjbGFzczogInRvay11cmwiIH0sIHsgdGFnOiBuMy5sYWJlbE5hbWUsIGNsYXNzOiAidG9rLWxhYmVsTmFtZSIgfSwgeyB0YWc6IG4zLmluc2VydGVkLCBjbGFzczogInRvay1pbnNlcnRlZCIgfSwgeyB0YWc6IG4zLmRlbGV0ZWQsIGNsYXNzOiAidG9rLWRlbGV0ZWQiIH0sIHsgdGFnOiBuMy5saXRlcmFsLCBjbGFzczogInRvay1saXRlcmFsIiB9LCB7IHRhZzogbjMuc3RyaW5nLCBjbGFzczogInRvay1zdHJpbmciIH0sIHsgdGFnOiBuMy5udW1iZXIsIGNsYXNzOiAidG9rLW51bWJlciIgfSwgeyB0YWc6IFtuMy5yZWdleHAsIG4zLmVzY2FwZSwgbjMuc3BlY2lhbChuMy5zdHJpbmcpXSwgY2xhc3M6ICJ0b2stc3RyaW5nMiIgfSwgeyB0YWc6IG4zLnZhcmlhYmxlTmFtZSwgY2xhc3M6ICJ0b2stdmFyaWFibGVOYW1lIiB9LCB7IHRhZzogbjMubG9jYWwobjMudmFyaWFibGVOYW1lKSwgY2xhc3M6ICJ0b2stdmFyaWFibGVOYW1lIHRvay1sb2NhbCIgfSwgeyB0YWc6IG4zLmRlZmluaXRpb24objMudmFyaWFibGVOYW1lKSwgY2xhc3M6ICJ0b2stdmFyaWFibGVOYW1lIHRvay1kZWZpbml0aW9uIiB9LCB7IHRhZzogbjMuc3BlY2lhbChuMy52YXJpYWJsZU5hbWUpLCBjbGFzczogInRvay12YXJpYWJsZU5hbWUyIiB9LCB7IHRhZzogbjMuZGVmaW5pdGlvbihuMy5wcm9wZXJ0eU5hbWUpLCBjbGFzczogInRvay1wcm9wZXJ0eU5hbWUgdG9rLWRlZmluaXRpb24iIH0sIHsgdGFnOiBuMy50eXBlTmFtZSwgY2xhc3M6ICJ0b2stdHlwZU5hbWUiIH0sIHsgdGFnOiBuMy5uYW1lc3BhY2UsIGNsYXNzOiAidG9rLW5hbWVzcGFjZSIgfSwgeyB0YWc6IG4zLmNsYXNzTmFtZSwgY2xhc3M6ICJ0b2stY2xhc3NOYW1lIiB9LCB7IHRhZzogbjMubWFjcm9OYW1lLCBjbGFzczogInRvay1tYWNyb05hbWUiIH0sIHsgdGFnOiBuMy5wcm9wZXJ0eU5hbWUsIGNsYXNzOiAidG9rLXByb3BlcnR5TmFtZSIgfSwgeyB0YWc6IG4zLm9wZXJhdG9yLCBjbGFzczogInRvay1vcGVyYXRvciIgfSwgeyB0YWc6IG4zLmNvbW1lbnQsIGNsYXNzOiAidG9rLWNvbW1lbnQiIH0sIHsgdGFnOiBuMy5tZXRhLCBjbGFzczogInRvay1tZXRhIiB9LCB7IHRhZzogbjMuaW52YWxpZCwgY2xhc3M6ICJ0b2staW52YWxpZCIgfSwgeyB0YWc6IG4zLnB1bmN0dWF0aW9uLCBjbGFzczogInRvay1wdW5jdHVhdGlvbiIgfV0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9zdHlsZS1tb2RANC4wLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjMvZGVuby9zdHlsZS1tb2QuanMKICB2YXIgUzUgPSAiXHUwMzdDIjsKICB2YXIgdzcgPSB0eXBlb2YgU3ltYm9sID4gInUiID8gIl9fIiArIFM1IDogU3ltYm9sLmZvcihTNSk7CiAgdmFyIGMzID0gdHlwZW9mIFN5bWJvbCA+ICJ1IiA/ICJfX3N0eWxlU2V0IiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlOCkgOiBTeW1ib2woInN0eWxlU2V0Iik7CiAgdmFyIGI2ID0gdHlwZW9mIGdsb2JhbFRoaXMgPCAidSIgPyBnbG9iYWxUaGlzIDogdHlwZW9mIGRvY3VtZW50IDwgInUiID8gd2luZG93IDoge307CiAgdmFyIFQ5ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIGw3KSB7CiAgICAgIHRoaXMucnVsZXMgPSBbXTsKICAgICAgbGV0IHsgZmluaXNoOiB1MTEgfSA9IGw3IHx8IHt9OwogICAgICBmdW5jdGlvbiBuOCh0NCkgewogICAgICAgIHJldHVybiAvXkAvLnRlc3QodDQpID8gW3Q0XSA6IHQ0LnNwbGl0KC8sXHMqLyk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gczgodDQsIGk0LCBoMTAsIHgyMSkgewogICAgICAgIGxldCBkMTUgPSBbXSwgcjMgPSAvXkAoXHcrKVxiLy5leGVjKHQ0WzBdKSwgZzEyID0gcjMgJiYgcjNbMV0gPT0gImtleWZyYW1lcyI7CiAgICAgICAgaWYgKHIzICYmIGk0ID09IG51bGwpCiAgICAgICAgICByZXR1cm4gaDEwLnB1c2godDRbMF0gKyAiOyIpOwogICAgICAgIGZvciAobGV0IGE0IGluIGk0KSB7CiAgICAgICAgICBsZXQgbzQgPSBpNFthNF07CiAgICAgICAgICBpZiAoLyYvLnRlc3QoYTQpKQogICAgICAgICAgICBzOChhNC5zcGxpdCgvLFxzKi8pLm1hcCgoZjExKSA9PiB0NC5tYXAoKHkxNykgPT4gZjExLnJlcGxhY2UoLyYvLCB5MTcpKSkucmVkdWNlKChmMTEsIHkxNykgPT4gZjExLmNvbmNhdCh5MTcpKSwgbzQsIGgxMCk7CiAgICAgICAgICBlbHNlIGlmIChvNCAmJiB0eXBlb2YgbzQgPT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgaWYgKCFyMykKICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgKCIgKyBhNCArICIpIHNob3VsZCBiZSBhIHByaW1pdGl2ZSB2YWx1ZS4iKTsKICAgICAgICAgICAgczgobjgoYTQpLCBvNCwgZDE1LCBnMTIpOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIG80ICE9IG51bGwgJiYgZDE1LnB1c2goYTQucmVwbGFjZSgvXy4qLywgIiIpLnJlcGxhY2UoL1tBLVpdL2csIChmMTEpID0+ICItIiArIGYxMS50b0xvd2VyQ2FzZSgpKSArICI6ICIgKyBvNCArICI7Iik7CiAgICAgICAgfQogICAgICAgIChkMTUubGVuZ3RoIHx8IGcxMikgJiYgaDEwLnB1c2goKHUxMSAmJiAhcjMgJiYgIXgyMSA/IHQ0Lm1hcCh1MTEpIDogdDQpLmpvaW4oIiwgIikgKyAiIHsiICsgZDE1LmpvaW4oIiAiKSArICJ9Iik7CiAgICAgIH0KICAgICAgZm9yIChsZXQgdDQgaW4gZTUpCiAgICAgICAgczgobjgodDQpLCBlNVt0NF0sIHRoaXMucnVsZXMpOwogICAgfQogICAgZ2V0UnVsZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLnJ1bGVzLmpvaW4oYApgKTsKICAgIH0KICAgIHN0YXRpYyBuZXdOYW1lKCkgewogICAgICBsZXQgZTUgPSBiNlt3N10gfHwgMTsKICAgICAgcmV0dXJuIGI2W3c3XSA9IGU1ICsgMSwgUzUgKyBlNS50b1N0cmluZygzNik7CiAgICB9CiAgICBzdGF0aWMgbW91bnQoZTUsIGw3KSB7CiAgICAgIChlNVtjM10gfHwgbmV3IG02KGU1KSkubW91bnQoQXJyYXkuaXNBcnJheShsNykgPyBsNyA6IFtsN10pOwogICAgfQogIH07CiAgdmFyIHA0ID0gbnVsbDsKICB2YXIgbTYgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSkgewogICAgICBpZiAoIWU1LmhlYWQgJiYgZTUuYWRvcHRlZFN0eWxlU2hlZXRzICYmIHR5cGVvZiBDU1NTdHlsZVNoZWV0IDwgInUiKSB7CiAgICAgICAgaWYgKHA0KQogICAgICAgICAgcmV0dXJuIGU1LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IFtwNC5zaGVldF0uY29uY2F0KGU1LmFkb3B0ZWRTdHlsZVNoZWV0cyksIGU1W2MzXSA9IHA0OwogICAgICAgIHRoaXMuc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpLCBlNS5hZG9wdGVkU3R5bGVTaGVldHMgPSBbdGhpcy5zaGVldF0uY29uY2F0KGU1LmFkb3B0ZWRTdHlsZVNoZWV0cyksIHA0ID0gdGhpczsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnN0eWxlVGFnID0gKGU1Lm93bmVyRG9jdW1lbnQgfHwgZTUpLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgbGV0IGw3ID0gZTUuaGVhZCB8fCBlNTsKICAgICAgICBsNy5pbnNlcnRCZWZvcmUodGhpcy5zdHlsZVRhZywgbDcuZmlyc3RDaGlsZCk7CiAgICAgIH0KICAgICAgdGhpcy5tb2R1bGVzID0gW10sIGU1W2MzXSA9IHRoaXM7CiAgICB9CiAgICBtb3VudChlNSkgewogICAgICBsZXQgbDcgPSB0aGlzLnNoZWV0LCB1MTEgPSAwLCBuOCA9IDA7CiAgICAgIGZvciAobGV0IHM4ID0gMDsgczggPCBlNS5sZW5ndGg7IHM4KyspIHsKICAgICAgICBsZXQgdDQgPSBlNVtzOF0sIGk0ID0gdGhpcy5tb2R1bGVzLmluZGV4T2YodDQpOwogICAgICAgIGlmIChpNCA8IG44ICYmIGk0ID4gLTEgJiYgKHRoaXMubW9kdWxlcy5zcGxpY2UoaTQsIDEpLCBuOC0tLCBpNCA9IC0xKSwgaTQgPT0gLTEpIHsKICAgICAgICAgIGlmICh0aGlzLm1vZHVsZXMuc3BsaWNlKG44KyssIDAsIHQ0KSwgbDcpCiAgICAgICAgICAgIGZvciAobGV0IGgxMCA9IDA7IGgxMCA8IHQ0LnJ1bGVzLmxlbmd0aDsgaDEwKyspCiAgICAgICAgICAgICAgbDcuaW5zZXJ0UnVsZSh0NC5ydWxlc1toMTBdLCB1MTErKyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAoOyBuOCA8IGk0OyApCiAgICAgICAgICAgIHUxMSArPSB0aGlzLm1vZHVsZXNbbjgrK10ucnVsZXMubGVuZ3RoOwogICAgICAgICAgdTExICs9IHQ0LnJ1bGVzLmxlbmd0aCwgbjgrKzsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFsNykgewogICAgICAgIGxldCBzOCA9ICIiOwogICAgICAgIGZvciAobGV0IHQ0ID0gMDsgdDQgPCB0aGlzLm1vZHVsZXMubGVuZ3RoOyB0NCsrKQogICAgICAgICAgczggKz0gdGhpcy5tb2R1bGVzW3Q0XS5nZXRSdWxlcygpICsgYApgOwogICAgICAgIHRoaXMuc3R5bGVUYWcudGV4dENvbnRlbnQgPSBzODsKICAgICAgfQogICAgfQogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2xhbmd1YWdlQDYuMi4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzL2Rlbm8vbGFuZ3VhZ2UuanMKICB2YXIgWTEwOwogIHZhciBUMTAgPSBuZXcgdzUoKTsKICB2YXIgYzQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIHIzID0gW10pIHsKICAgICAgdGhpcy5kYXRhID0gdDQsIHcucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJ0cmVlIikgfHwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHcucHJvdG90eXBlLCAidHJlZSIsIHsgZ2V0KCkgewogICAgICAgIHJldHVybiBtNyh0aGlzKTsKICAgICAgfSB9KSwgdGhpcy5wYXJzZXIgPSBlNSwgdGhpcy5leHRlbnNpb24gPSBbUDkub2YodGhpcyksIHcubGFuZ3VhZ2VEYXRhLm9mKChpNCwgczgsIG80KSA9PiBpNC5mYWNldCh1dDQoaTQsIHM4LCBvNCkpKV0uY29uY2F0KHIzKTsKICAgIH0KICAgIGlzQWN0aXZlQXQodDQsIGU1LCByMyA9IC0xKSB7CiAgICAgIHJldHVybiB1dDQodDQsIGU1LCByMykgPT0gdGhpcy5kYXRhOwogICAgfQogICAgZmluZFJlZ2lvbnModDQpIHsKICAgICAgbGV0IGU1ID0gdDQuZmFjZXQoUDkpOwogICAgICBpZiAoZTU/LmRhdGEgPT0gdGhpcy5kYXRhKQogICAgICAgIHJldHVybiBbeyBmcm9tOiAwLCB0bzogdDQuZG9jLmxlbmd0aCB9XTsKICAgICAgaWYgKCFlNSB8fCAhZTUuYWxsb3dzTmVzdGluZykKICAgICAgICByZXR1cm4gW107CiAgICAgIGxldCByMyA9IFtdLCBpNCA9IChzOCwgbzQpID0+IHsKICAgICAgICBpZiAoczgucHJvcChUMTApID09IHRoaXMuZGF0YSkgewogICAgICAgICAgcjMucHVzaCh7IGZyb206IG80LCB0bzogbzQgKyBzOC5sZW5ndGggfSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxldCBsNyA9IHM4LnByb3AodzUubW91bnRlZCk7CiAgICAgICAgaWYgKGw3KSB7CiAgICAgICAgICBpZiAobDcudHJlZS5wcm9wKFQxMCkgPT0gdGhpcy5kYXRhKSB7CiAgICAgICAgICAgIGlmIChsNy5vdmVybGF5KQogICAgICAgICAgICAgIGZvciAobGV0IGE0IG9mIGw3Lm92ZXJsYXkpCiAgICAgICAgICAgICAgICByMy5wdXNoKHsgZnJvbTogYTQuZnJvbSArIG80LCB0bzogYTQudG8gKyBvNCB9KTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHIzLnB1c2goeyBmcm9tOiBvNCwgdG86IG80ICsgczgubGVuZ3RoIH0pOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgaWYgKGw3Lm92ZXJsYXkpIHsKICAgICAgICAgICAgbGV0IGE0ID0gcjMubGVuZ3RoOwogICAgICAgICAgICBpZiAoaTQobDcudHJlZSwgbDcub3ZlcmxheVswXS5mcm9tICsgbzQpLCByMy5sZW5ndGggPiBhNCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAobGV0IGE0ID0gMDsgYTQgPCBzOC5jaGlsZHJlbi5sZW5ndGg7IGE0KyspIHsKICAgICAgICAgIGxldCBoMTAgPSBzOC5jaGlsZHJlblthNF07CiAgICAgICAgICBoMTAgaW5zdGFuY2VvZiBQNyAmJiBpNChoMTAsIHM4LnBvc2l0aW9uc1thNF0gKyBvNCk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gaTQobTcodDQpLCAwKSwgcjM7CiAgICB9CiAgICBnZXQgYWxsb3dzTmVzdGluZygpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfTsKICBjNC5zZXRTdGF0ZSA9IHkuZGVmaW5lKCk7CiAgZnVuY3Rpb24gdXQ0KG44LCB0NCwgZTUpIHsKICAgIGxldCByMyA9IG44LmZhY2V0KFA5KTsKICAgIGlmICghcjMpCiAgICAgIHJldHVybiBudWxsOwogICAgbGV0IGk0ID0gcjMuZGF0YTsKICAgIGlmIChyMy5hbGxvd3NOZXN0aW5nKQogICAgICBmb3IgKGxldCBzOCA9IG03KG44KS50b3BOb2RlOyBzODsgczggPSBzOC5lbnRlcih0NCwgZTUsIEE2LkV4Y2x1ZGVCdWZmZXJzKSkKICAgICAgICBpNCA9IHM4LnR5cGUucHJvcChUMTApIHx8IGk0OwogICAgcmV0dXJuIGk0OwogIH0KICBmdW5jdGlvbiBtNyhuOCkgewogICAgbGV0IHQ0ID0gbjguZmllbGQoYzQuc3RhdGUsIGZhbHNlKTsKICAgIHJldHVybiB0NCA/IHQ0LnRyZWUgOiBQNy5lbXB0eTsKICB9CiAgdmFyIGV0NCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSA9IHQ0Lmxlbmd0aCkgewogICAgICB0aGlzLmRvYyA9IHQ0LCB0aGlzLmxlbmd0aCA9IGU1LCB0aGlzLmN1cnNvclBvcyA9IDAsIHRoaXMuc3RyaW5nID0gIiIsIHRoaXMuY3Vyc29yID0gdDQuaXRlcigpOwogICAgfQogICAgc3luY1RvKHQ0KSB7CiAgICAgIHJldHVybiB0aGlzLnN0cmluZyA9IHRoaXMuY3Vyc29yLm5leHQodDQgLSB0aGlzLmN1cnNvclBvcykudmFsdWUsIHRoaXMuY3Vyc29yUG9zID0gdDQgKyB0aGlzLnN0cmluZy5sZW5ndGgsIHRoaXMuY3Vyc29yUG9zIC0gdGhpcy5zdHJpbmcubGVuZ3RoOwogICAgfQogICAgY2h1bmsodDQpIHsKICAgICAgcmV0dXJuIHRoaXMuc3luY1RvKHQ0KSwgdGhpcy5zdHJpbmc7CiAgICB9CiAgICBnZXQgbGluZUNodW5rcygpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZWFkKHQ0LCBlNSkgewogICAgICBsZXQgcjMgPSB0aGlzLmN1cnNvclBvcyAtIHRoaXMuc3RyaW5nLmxlbmd0aDsKICAgICAgcmV0dXJuIHQ0IDwgcjMgfHwgZTUgPj0gdGhpcy5jdXJzb3JQb3MgPyB0aGlzLmRvYy5zbGljZVN0cmluZyh0NCwgZTUpIDogdGhpcy5zdHJpbmcuc2xpY2UodDQgLSByMywgZTUgLSByMyk7CiAgICB9CiAgfTsKICB2YXIgSTkgPSBudWxsOwogIHZhciB4NCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgcjMgPSBbXSwgaTQsIHM4LCBvNCwgbDcsIGE0KSB7CiAgICAgIHRoaXMucGFyc2VyID0gdDQsIHRoaXMuc3RhdGUgPSBlNSwgdGhpcy5mcmFnbWVudHMgPSByMywgdGhpcy50cmVlID0gaTQsIHRoaXMudHJlZUxlbiA9IHM4LCB0aGlzLnZpZXdwb3J0ID0gbzQsIHRoaXMuc2tpcHBlZCA9IGw3LCB0aGlzLnNjaGVkdWxlT24gPSBhNCwgdGhpcy5wYXJzZSA9IG51bGwsIHRoaXMudGVtcFNraXBwZWQgPSBbXTsKICAgIH0KICAgIHN0YXRpYyBjcmVhdGUodDQsIGU1LCByMykgewogICAgICByZXR1cm4gbmV3IHg0KHQ0LCBlNSwgW10sIFA3LmVtcHR5LCAwLCByMywgW10sIG51bGwpOwogICAgfQogICAgc3RhcnRQYXJzZSgpIHsKICAgICAgcmV0dXJuIHRoaXMucGFyc2VyLnN0YXJ0UGFyc2UobmV3IGV0NCh0aGlzLnN0YXRlLmRvYyksIHRoaXMuZnJhZ21lbnRzKTsKICAgIH0KICAgIHdvcmsodDQsIGU1KSB7CiAgICAgIHJldHVybiBlNSAhPSBudWxsICYmIGU1ID49IHRoaXMuc3RhdGUuZG9jLmxlbmd0aCAmJiAoZTUgPSB2b2lkIDApLCB0aGlzLnRyZWUgIT0gUDcuZW1wdHkgJiYgdGhpcy5pc0RvbmUoZTUgPz8gdGhpcy5zdGF0ZS5kb2MubGVuZ3RoKSA/ICh0aGlzLnRha2VUcmVlKCksIHRydWUpIDogdGhpcy53aXRoQ29udGV4dCgoKSA9PiB7CiAgICAgICAgdmFyIHIzOwogICAgICAgIGlmICh0eXBlb2YgdDQgPT0gIm51bWJlciIpIHsKICAgICAgICAgIGxldCBpNCA9IERhdGUubm93KCkgKyB0NDsKICAgICAgICAgIHQ0ID0gKCkgPT4gRGF0ZS5ub3coKSA+IGk0OwogICAgICAgIH0KICAgICAgICBmb3IgKHRoaXMucGFyc2UgfHwgKHRoaXMucGFyc2UgPSB0aGlzLnN0YXJ0UGFyc2UoKSksIGU1ICE9IG51bGwgJiYgKHRoaXMucGFyc2Uuc3RvcHBlZEF0ID09IG51bGwgfHwgdGhpcy5wYXJzZS5zdG9wcGVkQXQgPiBlNSkgJiYgZTUgPCB0aGlzLnN0YXRlLmRvYy5sZW5ndGggJiYgdGhpcy5wYXJzZS5zdG9wQXQoZTUpOyA7ICkgewogICAgICAgICAgbGV0IGk0ID0gdGhpcy5wYXJzZS5hZHZhbmNlKCk7CiAgICAgICAgICBpZiAoaTQpCiAgICAgICAgICAgIGlmICh0aGlzLmZyYWdtZW50cyA9IHRoaXMud2l0aG91dFRlbXBTa2lwcGVkKEc2LmFkZFRyZWUoaTQsIHRoaXMuZnJhZ21lbnRzLCB0aGlzLnBhcnNlLnN0b3BwZWRBdCAhPSBudWxsKSksIHRoaXMudHJlZUxlbiA9IChyMyA9IHRoaXMucGFyc2Uuc3RvcHBlZEF0KSAhPT0gbnVsbCAmJiByMyAhPT0gdm9pZCAwID8gcjMgOiB0aGlzLnN0YXRlLmRvYy5sZW5ndGgsIHRoaXMudHJlZSA9IGk0LCB0aGlzLnBhcnNlID0gbnVsbCwgdGhpcy50cmVlTGVuIDwgKGU1ID8/IHRoaXMuc3RhdGUuZG9jLmxlbmd0aCkpCiAgICAgICAgICAgICAgdGhpcy5wYXJzZSA9IHRoaXMuc3RhcnRQYXJzZSgpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodDQoKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICB0YWtlVHJlZSgpIHsKICAgICAgbGV0IHQ0LCBlNTsKICAgICAgdGhpcy5wYXJzZSAmJiAodDQgPSB0aGlzLnBhcnNlLnBhcnNlZFBvcykgPj0gdGhpcy50cmVlTGVuICYmICgodGhpcy5wYXJzZS5zdG9wcGVkQXQgPT0gbnVsbCB8fCB0aGlzLnBhcnNlLnN0b3BwZWRBdCA+IHQ0KSAmJiB0aGlzLnBhcnNlLnN0b3BBdCh0NCksIHRoaXMud2l0aENvbnRleHQoKCkgPT4gewogICAgICAgIGZvciAoOyAhKGU1ID0gdGhpcy5wYXJzZS5hZHZhbmNlKCkpOyApCiAgICAgICAgICA7CiAgICAgIH0pLCB0aGlzLnRyZWVMZW4gPSB0NCwgdGhpcy50cmVlID0gZTUsIHRoaXMuZnJhZ21lbnRzID0gdGhpcy53aXRob3V0VGVtcFNraXBwZWQoRzYuYWRkVHJlZSh0aGlzLnRyZWUsIHRoaXMuZnJhZ21lbnRzLCB0cnVlKSksIHRoaXMucGFyc2UgPSBudWxsKTsKICAgIH0KICAgIHdpdGhDb250ZXh0KHQ0KSB7CiAgICAgIGxldCBlNSA9IEk5OwogICAgICBJOSA9IHRoaXM7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHQ0KCk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgSTkgPSBlNTsKICAgICAgfQogICAgfQogICAgd2l0aG91dFRlbXBTa2lwcGVkKHQ0KSB7CiAgICAgIGZvciAobGV0IGU1OyBlNSA9IHRoaXMudGVtcFNraXBwZWQucG9wKCk7ICkKICAgICAgICB0NCA9IGN0NCh0NCwgZTUuZnJvbSwgZTUudG8pOwogICAgICByZXR1cm4gdDQ7CiAgICB9CiAgICBjaGFuZ2VzKHQ0LCBlNSkgewogICAgICBsZXQgeyBmcmFnbWVudHM6IHIzLCB0cmVlOiBpNCwgdHJlZUxlbjogczgsIHZpZXdwb3J0OiBvNCwgc2tpcHBlZDogbDcgfSA9IHRoaXM7CiAgICAgIGlmICh0aGlzLnRha2VUcmVlKCksICF0NC5lbXB0eSkgewogICAgICAgIGxldCBhNCA9IFtdOwogICAgICAgIGlmICh0NC5pdGVyQ2hhbmdlZFJhbmdlcygoaDEwLCB1MTEsIGQxNSwgZzEyKSA9PiBhNC5wdXNoKHsgZnJvbUE6IGgxMCwgdG9BOiB1MTEsIGZyb21COiBkMTUsIHRvQjogZzEyIH0pKSwgcjMgPSBHNi5hcHBseUNoYW5nZXMocjMsIGE0KSwgaTQgPSBQNy5lbXB0eSwgczggPSAwLCBvNCA9IHsgZnJvbTogdDQubWFwUG9zKG80LmZyb20sIC0xKSwgdG86IHQ0Lm1hcFBvcyhvNC50bywgMSkgfSwgdGhpcy5za2lwcGVkLmxlbmd0aCkgewogICAgICAgICAgbDcgPSBbXTsKICAgICAgICAgIGZvciAobGV0IGgxMCBvZiB0aGlzLnNraXBwZWQpIHsKICAgICAgICAgICAgbGV0IHUxMSA9IHQ0Lm1hcFBvcyhoMTAuZnJvbSwgMSksIGQxNSA9IHQ0Lm1hcFBvcyhoMTAudG8sIC0xKTsKICAgICAgICAgICAgdTExIDwgZDE1ICYmIGw3LnB1c2goeyBmcm9tOiB1MTEsIHRvOiBkMTUgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBuZXcgeDQodGhpcy5wYXJzZXIsIGU1LCByMywgaTQsIHM4LCBvNCwgbDcsIHRoaXMuc2NoZWR1bGVPbik7CiAgICB9CiAgICB1cGRhdGVWaWV3cG9ydCh0NCkgewogICAgICBpZiAodGhpcy52aWV3cG9ydC5mcm9tID09IHQ0LmZyb20gJiYgdGhpcy52aWV3cG9ydC50byA9PSB0NC50bykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHRoaXMudmlld3BvcnQgPSB0NDsKICAgICAgbGV0IGU1ID0gdGhpcy5za2lwcGVkLmxlbmd0aDsKICAgICAgZm9yIChsZXQgcjMgPSAwOyByMyA8IHRoaXMuc2tpcHBlZC5sZW5ndGg7IHIzKyspIHsKICAgICAgICBsZXQgeyBmcm9tOiBpNCwgdG86IHM4IH0gPSB0aGlzLnNraXBwZWRbcjNdOwogICAgICAgIGk0IDwgdDQudG8gJiYgczggPiB0NC5mcm9tICYmICh0aGlzLmZyYWdtZW50cyA9IGN0NCh0aGlzLmZyYWdtZW50cywgaTQsIHM4KSwgdGhpcy5za2lwcGVkLnNwbGljZShyMy0tLCAxKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuc2tpcHBlZC5sZW5ndGggPj0gZTUgPyBmYWxzZSA6ICh0aGlzLnJlc2V0KCksIHRydWUpOwogICAgfQogICAgcmVzZXQoKSB7CiAgICAgIHRoaXMucGFyc2UgJiYgKHRoaXMudGFrZVRyZWUoKSwgdGhpcy5wYXJzZSA9IG51bGwpOwogICAgfQogICAgc2tpcFVudGlsSW5WaWV3KHQ0LCBlNSkgewogICAgICB0aGlzLnNraXBwZWQucHVzaCh7IGZyb206IHQ0LCB0bzogZTUgfSk7CiAgICB9CiAgICBzdGF0aWMgZ2V0U2tpcHBpbmdQYXJzZXIodDQpIHsKICAgICAgcmV0dXJuIG5ldyBjbGFzcyBleHRlbmRzIHllNyB7CiAgICAgICAgY3JlYXRlUGFyc2UoZTUsIHIzLCBpNCkgewogICAgICAgICAgbGV0IHM4ID0gaTRbMF0uZnJvbSwgbzQgPSBpNFtpNC5sZW5ndGggLSAxXS50bzsKICAgICAgICAgIHJldHVybiB7IHBhcnNlZFBvczogczgsIGFkdmFuY2UoKSB7CiAgICAgICAgICAgIGxldCBhNCA9IEk5OwogICAgICAgICAgICBpZiAoYTQpIHsKICAgICAgICAgICAgICBmb3IgKGxldCBoMTAgb2YgaTQpCiAgICAgICAgICAgICAgICBhNC50ZW1wU2tpcHBlZC5wdXNoKGgxMCk7CiAgICAgICAgICAgICAgdDQgJiYgKGE0LnNjaGVkdWxlT24gPSBhNC5zY2hlZHVsZU9uID8gUHJvbWlzZS5hbGwoW2E0LnNjaGVkdWxlT24sIHQ0XSkgOiB0NCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VkUG9zID0gbzQsIG5ldyBQNyhONS5ub25lLCBbXSwgW10sIG80IC0gczgpOwogICAgICAgICAgfSwgc3RvcHBlZEF0OiBudWxsLCBzdG9wQXQoKSB7CiAgICAgICAgICB9IH07CiAgICAgICAgfQogICAgICB9KCk7CiAgICB9CiAgICBpc0RvbmUodDQpIHsKICAgICAgdDQgPSBNYXRoLm1pbih0NCwgdGhpcy5zdGF0ZS5kb2MubGVuZ3RoKTsKICAgICAgbGV0IGU1ID0gdGhpcy5mcmFnbWVudHM7CiAgICAgIHJldHVybiB0aGlzLnRyZWVMZW4gPj0gdDQgJiYgZTUubGVuZ3RoICYmIGU1WzBdLmZyb20gPT0gMCAmJiBlNVswXS50byA+PSB0NDsKICAgIH0KICAgIHN0YXRpYyBnZXQoKSB7CiAgICAgIHJldHVybiBJOTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGN0NChuOCwgdDQsIGU1KSB7CiAgICByZXR1cm4gRzYuYXBwbHlDaGFuZ2VzKG44LCBbeyBmcm9tQTogdDQsIHRvQTogZTUsIGZyb21COiB0NCwgdG9COiBlNSB9XSk7CiAgfQogIHZhciBTNiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHRoaXMuY29udGV4dCA9IHQ0LCB0aGlzLnRyZWUgPSB0NC50cmVlOwogICAgfQogICAgYXBwbHkodDQpIHsKICAgICAgaWYgKCF0NC5kb2NDaGFuZ2VkICYmIHRoaXMudHJlZSA9PSB0aGlzLmNvbnRleHQudHJlZSkKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgbGV0IGU1ID0gdGhpcy5jb250ZXh0LmNoYW5nZXModDQuY2hhbmdlcywgdDQuc3RhdGUpLCByMyA9IHRoaXMuY29udGV4dC50cmVlTGVuID09IHQ0LnN0YXJ0U3RhdGUuZG9jLmxlbmd0aCA/IHZvaWQgMCA6IE1hdGgubWF4KHQ0LmNoYW5nZXMubWFwUG9zKHRoaXMuY29udGV4dC50cmVlTGVuKSwgZTUudmlld3BvcnQudG8pOwogICAgICByZXR1cm4gZTUud29yaygyMCwgcjMpIHx8IGU1LnRha2VUcmVlKCksIG5ldyBTNihlNSk7CiAgICB9CiAgICBzdGF0aWMgaW5pdCh0NCkgewogICAgICBsZXQgZTUgPSBNYXRoLm1pbigzZTMsIHQ0LmRvYy5sZW5ndGgpLCByMyA9IHg0LmNyZWF0ZSh0NC5mYWNldChQOSkucGFyc2VyLCB0NCwgeyBmcm9tOiAwLCB0bzogZTUgfSk7CiAgICAgIHJldHVybiByMy53b3JrKDIwLCBlNSkgfHwgcjMudGFrZVRyZWUoKSwgbmV3IFM2KHIzKTsKICAgIH0KICB9OwogIGM0LnN0YXRlID0gSjIuZGVmaW5lKHsgY3JlYXRlOiBTNi5pbml0LCB1cGRhdGUobjgsIHQ0KSB7CiAgICBmb3IgKGxldCBlNSBvZiB0NC5lZmZlY3RzKQogICAgICBpZiAoZTUuaXMoYzQuc2V0U3RhdGUpKQogICAgICAgIHJldHVybiBlNS52YWx1ZTsKICAgIHJldHVybiB0NC5zdGFydFN0YXRlLmZhY2V0KFA5KSAhPSB0NC5zdGF0ZS5mYWNldChQOSkgPyBTNi5pbml0KHQ0LnN0YXRlKSA6IG44LmFwcGx5KHQ0KTsKICB9IH0pOwogIHZhciB4dDQgPSAobjgpID0+IHsKICAgIGxldCB0NCA9IHNldFRpbWVvdXQoKCkgPT4gbjgoKSwgNTAwKTsKICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodDQpOwogIH07CiAgdHlwZW9mIHJlcXVlc3RJZGxlQ2FsbGJhY2sgPCAidSIgJiYgKHh0NCA9IChuOCkgPT4gewogICAgbGV0IHQ0ID0gLTEsIGU1ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHQ0ID0gcmVxdWVzdElkbGVDYWxsYmFjayhuOCwgeyB0aW1lb3V0OiA1MDAgLSAxMDAgfSk7CiAgICB9LCAxMDApOwogICAgcmV0dXJuICgpID0+IHQ0IDwgMCA/IGNsZWFyVGltZW91dChlNSkgOiBjYW5jZWxJZGxlQ2FsbGJhY2sodDQpOwogIH0pOwogIHZhciBaNiA9IHR5cGVvZiBuYXZpZ2F0b3IgPCAidSIgJiYgKChZMTAgPSBuYXZpZ2F0b3Iuc2NoZWR1bGluZykgPT09IG51bGwgfHwgWTEwID09PSB2b2lkIDAgPyB2b2lkIDAgOiBZMTAuaXNJbnB1dFBlbmRpbmcpID8gKCkgPT4gbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcoKSA6IG51bGw7CiAgdmFyIFN0MyA9IFY0LmZyb21DbGFzcyhjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICB0aGlzLnZpZXcgPSB0NCwgdGhpcy53b3JraW5nID0gbnVsbCwgdGhpcy53b3JrU2NoZWR1bGVkID0gMCwgdGhpcy5jaHVua0VuZCA9IC0xLCB0aGlzLmNodW5rQnVkZ2V0ID0gLTEsIHRoaXMud29yayA9IHRoaXMud29yay5iaW5kKHRoaXMpLCB0aGlzLnNjaGVkdWxlV29yaygpOwogICAgfQogICAgdXBkYXRlKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMudmlldy5zdGF0ZS5maWVsZChjNC5zdGF0ZSkuY29udGV4dDsKICAgICAgKGU1LnVwZGF0ZVZpZXdwb3J0KHQ0LnZpZXcudmlld3BvcnQpIHx8IHRoaXMudmlldy52aWV3cG9ydC50byA+IGU1LnRyZWVMZW4pICYmIHRoaXMuc2NoZWR1bGVXb3JrKCksIHQ0LmRvY0NoYW5nZWQgJiYgKHRoaXMudmlldy5oYXNGb2N1cyAmJiAodGhpcy5jaHVua0J1ZGdldCArPSA1MCksIHRoaXMuc2NoZWR1bGVXb3JrKCkpLCB0aGlzLmNoZWNrQXN5bmNTY2hlZHVsZShlNSk7CiAgICB9CiAgICBzY2hlZHVsZVdvcmsoKSB7CiAgICAgIGlmICh0aGlzLndvcmtpbmcpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgeyBzdGF0ZTogdDQgfSA9IHRoaXMudmlldywgZTUgPSB0NC5maWVsZChjNC5zdGF0ZSk7CiAgICAgIChlNS50cmVlICE9IGU1LmNvbnRleHQudHJlZSB8fCAhZTUuY29udGV4dC5pc0RvbmUodDQuZG9jLmxlbmd0aCkpICYmICh0aGlzLndvcmtpbmcgPSB4dDQodGhpcy53b3JrKSk7CiAgICB9CiAgICB3b3JrKHQ0KSB7CiAgICAgIHRoaXMud29ya2luZyA9IG51bGw7CiAgICAgIGxldCBlNSA9IERhdGUubm93KCk7CiAgICAgIGlmICh0aGlzLmNodW5rRW5kIDwgZTUgJiYgKHRoaXMuY2h1bmtFbmQgPCAwIHx8IHRoaXMudmlldy5oYXNGb2N1cykgJiYgKHRoaXMuY2h1bmtFbmQgPSBlNSArIDNlNCwgdGhpcy5jaHVua0J1ZGdldCA9IDNlMyksIHRoaXMuY2h1bmtCdWRnZXQgPD0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGxldCB7IHN0YXRlOiByMywgdmlld3BvcnQ6IHsgdG86IGk0IH0gfSA9IHRoaXMudmlldywgczggPSByMy5maWVsZChjNC5zdGF0ZSk7CiAgICAgIGlmIChzOC50cmVlID09IHM4LmNvbnRleHQudHJlZSAmJiBzOC5jb250ZXh0LmlzRG9uZShpNCArIDFlNSkpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgbzQgPSBEYXRlLm5vdygpICsgTWF0aC5taW4odGhpcy5jaHVua0J1ZGdldCwgMTAwLCB0NCAmJiAhWjYgPyBNYXRoLm1heCgyNSwgdDQudGltZVJlbWFpbmluZygpIC0gNSkgOiAxZTkpLCBsNyA9IHM4LmNvbnRleHQudHJlZUxlbiA8IGk0ICYmIHIzLmRvYy5sZW5ndGggPiBpNCArIDFlMywgYTQgPSBzOC5jb250ZXh0LndvcmsoKCkgPT4gWjYgJiYgWjYoKSB8fCBEYXRlLm5vdygpID4gbzQsIGk0ICsgKGw3ID8gMCA6IDFlNSkpOwogICAgICB0aGlzLmNodW5rQnVkZ2V0IC09IERhdGUubm93KCkgLSBlNSwgKGE0IHx8IHRoaXMuY2h1bmtCdWRnZXQgPD0gMCkgJiYgKHM4LmNvbnRleHQudGFrZVRyZWUoKSwgdGhpcy52aWV3LmRpc3BhdGNoKHsgZWZmZWN0czogYzQuc2V0U3RhdGUub2YobmV3IFM2KHM4LmNvbnRleHQpKSB9KSksIHRoaXMuY2h1bmtCdWRnZXQgPiAwICYmICEoYTQgJiYgIWw3KSAmJiB0aGlzLnNjaGVkdWxlV29yaygpLCB0aGlzLmNoZWNrQXN5bmNTY2hlZHVsZShzOC5jb250ZXh0KTsKICAgIH0KICAgIGNoZWNrQXN5bmNTY2hlZHVsZSh0NCkgewogICAgICB0NC5zY2hlZHVsZU9uICYmICh0aGlzLndvcmtTY2hlZHVsZWQrKywgdDQuc2NoZWR1bGVPbi50aGVuKCgpID0+IHRoaXMuc2NoZWR1bGVXb3JrKCkpLmNhdGNoKChlNSkgPT4gbnQyKHRoaXMudmlldy5zdGF0ZSwgZTUpKS50aGVuKCgpID0+IHRoaXMud29ya1NjaGVkdWxlZC0tKSwgdDQuc2NoZWR1bGVPbiA9IG51bGwpOwogICAgfQogICAgZGVzdHJveSgpIHsKICAgICAgdGhpcy53b3JraW5nICYmIHRoaXMud29ya2luZygpOwogICAgfQogICAgaXNXb3JraW5nKCkgewogICAgICByZXR1cm4gISEodGhpcy53b3JraW5nIHx8IHRoaXMud29ya1NjaGVkdWxlZCA+IDApOwogICAgfQogIH0sIHsgZXZlbnRIYW5kbGVyczogeyBmb2N1cygpIHsKICAgIHRoaXMuc2NoZWR1bGVXb3JrKCk7CiAgfSB9IH0pOwogIHZhciBQOSA9IEEyLmRlZmluZSh7IGNvbWJpbmUobjgpIHsKICAgIHJldHVybiBuOC5sZW5ndGggPyBuOFswXSA6IG51bGw7CiAgfSwgZW5hYmxlczogW2M0LnN0YXRlLCBTdDNdIH0pOwogIHZhciBQdDQgPSBBMi5kZWZpbmUoKTsKICB2YXIgQXQzID0gQTIuZGVmaW5lKHsgY29tYmluZTogKG44KSA9PiB7CiAgICBpZiAoIW44Lmxlbmd0aCkKICAgICAgcmV0dXJuICIgICI7CiAgICBpZiAoIS9eKD86ICt8XHQrKSQvLnRlc3QobjhbMF0pKQogICAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5kZW50IHVuaXQ6ICIgKyBKU09OLnN0cmluZ2lmeShuOFswXSkpOwogICAgcmV0dXJuIG44WzBdOwogIH0gfSk7CiAgZnVuY3Rpb24gJDgobjgpIHsKICAgIGxldCB0NCA9IG44LmZhY2V0KEF0Myk7CiAgICByZXR1cm4gdDQuY2hhckNvZGVBdCgwKSA9PSA5ID8gbjgudGFiU2l6ZSAqIHQ0Lmxlbmd0aCA6IHQ0Lmxlbmd0aDsKICB9CiAgZnVuY3Rpb24gQ3QzKG44LCB0NCkgewogICAgbGV0IGU1ID0gIiIsIHIzID0gbjgudGFiU2l6ZTsKICAgIGlmIChuOC5mYWNldChBdDMpLmNoYXJDb2RlQXQoMCkgPT0gOSkKICAgICAgZm9yICg7IHQ0ID49IHIzOyApCiAgICAgICAgZTUgKz0gIgkiLCB0NCAtPSByMzsKICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCB0NDsgaTQrKykKICAgICAgZTUgKz0gIiAiOwogICAgcmV0dXJuIGU1OwogIH0KICBmdW5jdGlvbiBUdDMobjgsIHQ0KSB7CiAgICBuOCBpbnN0YW5jZW9mIHcgJiYgKG44ID0gbmV3IE04KG44KSk7CiAgICBmb3IgKGxldCByMyBvZiBuOC5zdGF0ZS5mYWNldChQdDQpKSB7CiAgICAgIGxldCBpNCA9IHIzKG44LCB0NCk7CiAgICAgIGlmIChpNCAhPSBudWxsKQogICAgICAgIHJldHVybiBpNDsKICAgIH0KICAgIGxldCBlNSA9IG03KG44LnN0YXRlKTsKICAgIHJldHVybiBlNSA/IGllNihuOCwgZTUsIHQ0KSA6IG51bGw7CiAgfQogIHZhciBNOCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSA9IHt9KSB7CiAgICAgIHRoaXMuc3RhdGUgPSB0NCwgdGhpcy5vcHRpb25zID0gZTUsIHRoaXMudW5pdCA9ICQ4KHQ0KTsKICAgIH0KICAgIGxpbmVBdCh0NCwgZTUgPSAxKSB7CiAgICAgIGxldCByMyA9IHRoaXMuc3RhdGUuZG9jLmxpbmVBdCh0NCksIHsgc2ltdWxhdGVCcmVhazogaTQsIHNpbXVsYXRlRG91YmxlQnJlYWs6IHM4IH0gPSB0aGlzLm9wdGlvbnM7CiAgICAgIHJldHVybiBpNCAhPSBudWxsICYmIGk0ID49IHIzLmZyb20gJiYgaTQgPD0gcjMudG8gPyBzOCAmJiBpNCA9PSB0NCA/IHsgdGV4dDogIiIsIGZyb206IHQ0IH0gOiAoZTUgPCAwID8gaTQgPCB0NCA6IGk0IDw9IHQ0KSA/IHsgdGV4dDogcjMudGV4dC5zbGljZShpNCAtIHIzLmZyb20pLCBmcm9tOiBpNCB9IDogeyB0ZXh0OiByMy50ZXh0LnNsaWNlKDAsIGk0IC0gcjMuZnJvbSksIGZyb206IHIzLmZyb20gfSA6IHIzOwogICAgfQogICAgdGV4dEFmdGVyUG9zKHQ0LCBlNSA9IDEpIHsKICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaW11bGF0ZURvdWJsZUJyZWFrICYmIHQ0ID09IHRoaXMub3B0aW9ucy5zaW11bGF0ZUJyZWFrKQogICAgICAgIHJldHVybiAiIjsKICAgICAgbGV0IHsgdGV4dDogcjMsIGZyb206IGk0IH0gPSB0aGlzLmxpbmVBdCh0NCwgZTUpOwogICAgICByZXR1cm4gcjMuc2xpY2UodDQgLSBpNCwgTWF0aC5taW4ocjMubGVuZ3RoLCB0NCArIDEwMCAtIGk0KSk7CiAgICB9CiAgICBjb2x1bW4odDQsIGU1ID0gMSkgewogICAgICBsZXQgeyB0ZXh0OiByMywgZnJvbTogaTQgfSA9IHRoaXMubGluZUF0KHQ0LCBlNSksIHM4ID0gdGhpcy5jb3VudENvbHVtbihyMywgdDQgLSBpNCksIG80ID0gdGhpcy5vcHRpb25zLm92ZXJyaWRlSW5kZW50YXRpb24gPyB0aGlzLm9wdGlvbnMub3ZlcnJpZGVJbmRlbnRhdGlvbihpNCkgOiAtMTsKICAgICAgcmV0dXJuIG80ID4gLTEgJiYgKHM4ICs9IG80IC0gdGhpcy5jb3VudENvbHVtbihyMywgcjMuc2VhcmNoKC9cU3wkLykpKSwgczg7CiAgICB9CiAgICBjb3VudENvbHVtbih0NCwgZTUgPSB0NC5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG90KHQ0LCB0aGlzLnN0YXRlLnRhYlNpemUsIGU1KTsKICAgIH0KICAgIGxpbmVJbmRlbnQodDQsIGU1ID0gMSkgewogICAgICBsZXQgeyB0ZXh0OiByMywgZnJvbTogaTQgfSA9IHRoaXMubGluZUF0KHQ0LCBlNSksIHM4ID0gdGhpcy5vcHRpb25zLm92ZXJyaWRlSW5kZW50YXRpb247CiAgICAgIGlmIChzOCkgewogICAgICAgIGxldCBvNCA9IHM4KGk0KTsKICAgICAgICBpZiAobzQgPiAtMSkKICAgICAgICAgIHJldHVybiBvNDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5jb3VudENvbHVtbihyMywgcjMuc2VhcmNoKC9cU3wkLykpOwogICAgfQogICAgZ2V0IHNpbXVsYXRlZEJyZWFrKCkgewogICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNpbXVsYXRlQnJlYWsgfHwgbnVsbDsKICAgIH0KICB9OwogIHZhciByZTcgPSBuZXcgdzUoKTsKICBmdW5jdGlvbiBpZTYobjgsIHQ0LCBlNSkgewogICAgcmV0dXJuIER0Myh0NC5yZXNvbHZlSW5uZXIoZTUpLmVudGVyVW5maW5pc2hlZE5vZGVzQmVmb3JlKGU1KSwgZTUsIG44KTsKICB9CiAgZnVuY3Rpb24gc2U3KG44KSB7CiAgICByZXR1cm4gbjgucG9zID09IG44Lm9wdGlvbnMuc2ltdWxhdGVCcmVhayAmJiBuOC5vcHRpb25zLnNpbXVsYXRlRG91YmxlQnJlYWs7CiAgfQogIGZ1bmN0aW9uIG9lNChuOCkgewogICAgbGV0IHQ0ID0gbjgudHlwZS5wcm9wKHJlNyk7CiAgICBpZiAodDQpCiAgICAgIHJldHVybiB0NDsKICAgIGxldCBlNSA9IG44LmZpcnN0Q2hpbGQsIHIzOwogICAgaWYgKGU1ICYmIChyMyA9IGU1LnR5cGUucHJvcCh3NS5jbG9zZWRCeSkpKSB7CiAgICAgIGxldCBpNCA9IG44Lmxhc3RDaGlsZCwgczggPSBpNCAmJiByMy5pbmRleE9mKGk0Lm5hbWUpID4gLTE7CiAgICAgIHJldHVybiAobzQpID0+IEl0MyhvNCwgdHJ1ZSwgMSwgdm9pZCAwLCBzOCAmJiAhc2U3KG80KSA/IGk0LmZyb20gOiB2b2lkIDApOwogICAgfQogICAgcmV0dXJuIG44LnBhcmVudCA9PSBudWxsID8gbGU3IDogbnVsbDsKICB9CiAgZnVuY3Rpb24gRHQzKG44LCB0NCwgZTUpIHsKICAgIGZvciAoOyBuODsgbjggPSBuOC5wYXJlbnQpIHsKICAgICAgbGV0IHIzID0gb2U0KG44KTsKICAgICAgaWYgKHIzKQogICAgICAgIHJldHVybiByMyhFMy5jcmVhdGUoZTUsIHQ0LCBuOCkpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIGxlNygpIHsKICAgIHJldHVybiAwOwogIH0KICB2YXIgRTMgPSBjbGFzcyBleHRlbmRzIE04IHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgcjMpIHsKICAgICAgc3VwZXIodDQuc3RhdGUsIHQ0Lm9wdGlvbnMpLCB0aGlzLmJhc2UgPSB0NCwgdGhpcy5wb3MgPSBlNSwgdGhpcy5ub2RlID0gcjM7CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlKHQ0LCBlNSwgcjMpIHsKICAgICAgcmV0dXJuIG5ldyBFMyh0NCwgZTUsIHIzKTsKICAgIH0KICAgIGdldCB0ZXh0QWZ0ZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLnRleHRBZnRlclBvcyh0aGlzLnBvcyk7CiAgICB9CiAgICBnZXQgYmFzZUluZGVudCgpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5zdGF0ZS5kb2MubGluZUF0KHRoaXMubm9kZS5mcm9tKTsKICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgbGV0IGU1ID0gdGhpcy5ub2RlLnJlc29sdmUodDQuZnJvbSk7CiAgICAgICAgZm9yICg7IGU1LnBhcmVudCAmJiBlNS5wYXJlbnQuZnJvbSA9PSBlNS5mcm9tOyApCiAgICAgICAgICBlNSA9IGU1LnBhcmVudDsKICAgICAgICBpZiAoYWU3KGU1LCB0aGlzLm5vZGUpKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgdDQgPSB0aGlzLnN0YXRlLmRvYy5saW5lQXQoZTUuZnJvbSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMubGluZUluZGVudCh0NC5mcm9tKTsKICAgIH0KICAgIGNvbnRpbnVlKCkgewogICAgICBsZXQgdDQgPSB0aGlzLm5vZGUucGFyZW50OwogICAgICByZXR1cm4gdDQgPyBEdDModDQsIHRoaXMucG9zLCB0aGlzLmJhc2UpIDogMDsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGFlNyhuOCwgdDQpIHsKICAgIGZvciAobGV0IGU1ID0gdDQ7IGU1OyBlNSA9IGU1LnBhcmVudCkKICAgICAgaWYgKG44ID09IGU1KQogICAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICBmdW5jdGlvbiBoZTYobjgpIHsKICAgIGxldCB0NCA9IG44Lm5vZGUsIGU1ID0gdDQuY2hpbGRBZnRlcih0NC5mcm9tKSwgcjMgPSB0NC5sYXN0Q2hpbGQ7CiAgICBpZiAoIWU1KQogICAgICByZXR1cm4gbnVsbDsKICAgIGxldCBpNCA9IG44Lm9wdGlvbnMuc2ltdWxhdGVCcmVhaywgczggPSBuOC5zdGF0ZS5kb2MubGluZUF0KGU1LmZyb20pLCBvNCA9IGk0ID09IG51bGwgfHwgaTQgPD0gczguZnJvbSA/IHM4LnRvIDogTWF0aC5taW4oczgudG8sIGk0KTsKICAgIGZvciAobGV0IGw3ID0gZTUudG87IDsgKSB7CiAgICAgIGxldCBhNCA9IHQ0LmNoaWxkQWZ0ZXIobDcpOwogICAgICBpZiAoIWE0IHx8IGE0ID09IHIzKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBpZiAoIWE0LnR5cGUuaXNTa2lwcGVkKQogICAgICAgIHJldHVybiBhNC5mcm9tIDwgbzQgPyBlNSA6IG51bGw7CiAgICAgIGw3ID0gYTQudG87CiAgICB9CiAgfQogIGZ1bmN0aW9uIEl0MyhuOCwgdDQsIGU1LCByMywgaTQpIHsKICAgIGxldCBzOCA9IG44LnRleHRBZnRlciwgbzQgPSBzOC5tYXRjaCgvXlxzKi8pWzBdLmxlbmd0aCwgbDcgPSByMyAmJiBzOC5zbGljZShvNCwgbzQgKyByMy5sZW5ndGgpID09IHIzIHx8IGk0ID09IG44LnBvcyArIG80LCBhNCA9IHQ0ID8gaGU2KG44KSA6IG51bGw7CiAgICByZXR1cm4gYTQgPyBsNyA/IG44LmNvbHVtbihhNC5mcm9tKSA6IG44LmNvbHVtbihhNC50bykgOiBuOC5iYXNlSW5kZW50ICsgKGw3ID8gMCA6IG44LnVuaXQgKiBlNSk7CiAgfQogIHZhciB1ZTcgPSBBMi5kZWZpbmUoKTsKICB2YXIgY2U2ID0gbmV3IHc1KCk7CiAgZnVuY3Rpb24gT3Q0KG44LCB0NCkgewogICAgbGV0IGU1ID0gdDQubWFwUG9zKG44LmZyb20sIDEpLCByMyA9IHQ0Lm1hcFBvcyhuOC50bywgLTEpOwogICAgcmV0dXJuIGU1ID49IHIzID8gdm9pZCAwIDogeyBmcm9tOiBlNSwgdG86IHIzIH07CiAgfQogIHZhciBfNyA9IHkuZGVmaW5lKHsgbWFwOiBPdDQgfSk7CiAgdmFyIFI3ID0geS5kZWZpbmUoeyBtYXA6IE90NCB9KTsKICB2YXIgQTcgPSBKMi5kZWZpbmUoeyBjcmVhdGUoKSB7CiAgICByZXR1cm4gay5ub25lOwogIH0sIHVwZGF0ZShuOCwgdDQpIHsKICAgIG44ID0gbjgubWFwKHQ0LmNoYW5nZXMpOwogICAgZm9yIChsZXQgZTUgb2YgdDQuZWZmZWN0cykKICAgICAgZTUuaXMoXzcpICYmICFtZTkobjgsIGU1LnZhbHVlLmZyb20sIGU1LnZhbHVlLnRvKSA/IG44ID0gbjgudXBkYXRlKHsgYWRkOiBbcHQ0LnJhbmdlKGU1LnZhbHVlLmZyb20sIGU1LnZhbHVlLnRvKV0gfSkgOiBlNS5pcyhSNykgJiYgKG44ID0gbjgudXBkYXRlKHsgZmlsdGVyOiAocjMsIGk0KSA9PiBlNS52YWx1ZS5mcm9tICE9IHIzIHx8IGU1LnZhbHVlLnRvICE9IGk0LCBmaWx0ZXJGcm9tOiBlNS52YWx1ZS5mcm9tLCBmaWx0ZXJUbzogZTUudmFsdWUudG8gfSkpOwogICAgaWYgKHQ0LnNlbGVjdGlvbikgewogICAgICBsZXQgZTUgPSBmYWxzZSwgeyBoZWFkOiByMyB9ID0gdDQuc2VsZWN0aW9uLm1haW47CiAgICAgIG44LmJldHdlZW4ocjMsIHIzLCAoaTQsIHM4KSA9PiB7CiAgICAgICAgaTQgPCByMyAmJiBzOCA+IHIzICYmIChlNSA9IHRydWUpOwogICAgICB9KSwgZTUgJiYgKG44ID0gbjgudXBkYXRlKHsgZmlsdGVyRnJvbTogcjMsIGZpbHRlclRvOiByMywgZmlsdGVyOiAoaTQsIHM4KSA9PiBzOCA8PSByMyB8fCBpNCA+PSByMyB9KSk7CiAgICB9CiAgICByZXR1cm4gbjg7CiAgfSwgcHJvdmlkZTogKG44KSA9PiBNMi5kZWNvcmF0aW9ucy5mcm9tKG44KSwgdG9KU09OKG44LCB0NCkgewogICAgbGV0IGU1ID0gW107CiAgICByZXR1cm4gbjguYmV0d2VlbigwLCB0NC5kb2MubGVuZ3RoLCAocjMsIGk0KSA9PiB7CiAgICAgIGU1LnB1c2gocjMsIGk0KTsKICAgIH0pLCBlNTsKICB9LCBmcm9tSlNPTihuOCkgewogICAgaWYgKCFBcnJheS5pc0FycmF5KG44KSB8fCBuOC5sZW5ndGggJSAyKQogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBKU09OIGZvciBmb2xkIHN0YXRlIik7CiAgICBsZXQgdDQgPSBbXTsKICAgIGZvciAobGV0IGU1ID0gMDsgZTUgPCBuOC5sZW5ndGg7ICkgewogICAgICBsZXQgcjMgPSBuOFtlNSsrXSwgaTQgPSBuOFtlNSsrXTsKICAgICAgaWYgKHR5cGVvZiByMyAhPSAibnVtYmVyIiB8fCB0eXBlb2YgaTQgIT0gIm51bWJlciIpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgSlNPTiBmb3IgZm9sZCBzdGF0ZSIpOwogICAgICB0NC5wdXNoKHB0NC5yYW5nZShyMywgaTQpKTsKICAgIH0KICAgIHJldHVybiBrLnNldCh0NCwgdHJ1ZSk7CiAgfSB9KTsKICBmdW5jdGlvbiB6OChuOCwgdDQsIGU1KSB7CiAgICB2YXIgcjM7CiAgICBsZXQgaTQgPSBudWxsOwogICAgcmV0dXJuIChyMyA9IG44LmZpZWxkKEE3LCBmYWxzZSkpID09PSBudWxsIHx8IHIzID09PSB2b2lkIDAgfHwgcjMuYmV0d2Vlbih0NCwgZTUsIChzOCwgbzQpID0+IHsKICAgICAgKCFpNCB8fCBpNC5mcm9tID4gczgpICYmIChpNCA9IHsgZnJvbTogczgsIHRvOiBvNCB9KTsKICAgIH0pLCBpNDsKICB9CiAgZnVuY3Rpb24gbWU5KG44LCB0NCwgZTUpIHsKICAgIGxldCByMyA9IGZhbHNlOwogICAgcmV0dXJuIG44LmJldHdlZW4odDQsIHQ0LCAoaTQsIHM4KSA9PiB7CiAgICAgIGk0ID09IHQ0ICYmIHM4ID09IGU1ICYmIChyMyA9IHRydWUpOwogICAgfSksIHIzOwogIH0KICB2YXIgeWU4ID0geyBwbGFjZWhvbGRlckRPTTogbnVsbCwgcGxhY2Vob2xkZXJUZXh0OiAiXHUyMDI2IiB9OwogIHZhciBFdDMgPSBBMi5kZWZpbmUoeyBjb21iaW5lKG44KSB7CiAgICByZXR1cm4gaHQobjgsIHllOCk7CiAgfSB9KTsKICB2YXIgcHQ0ID0gay5yZXBsYWNlKHsgd2lkZ2V0OiBuZXcgY2xhc3MgZXh0ZW5kcyBYNCB7CiAgICB0b0RPTShuOCkgewogICAgICBsZXQgeyBzdGF0ZTogdDQgfSA9IG44LCBlNSA9IHQ0LmZhY2V0KEV0MyksIHIzID0gKHM4KSA9PiB7CiAgICAgICAgbGV0IG80ID0gbjgubGluZUJsb2NrQXQobjgucG9zQXRET00oczgudGFyZ2V0KSksIGw3ID0gejgobjguc3RhdGUsIG80LmZyb20sIG80LnRvKTsKICAgICAgICBsNyAmJiBuOC5kaXNwYXRjaCh7IGVmZmVjdHM6IFI3Lm9mKGw3KSB9KSwgczgucHJldmVudERlZmF1bHQoKTsKICAgICAgfTsKICAgICAgaWYgKGU1LnBsYWNlaG9sZGVyRE9NKQogICAgICAgIHJldHVybiBlNS5wbGFjZWhvbGRlckRPTShuOCwgcjMpOwogICAgICBsZXQgaTQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgIHJldHVybiBpNC50ZXh0Q29udGVudCA9IGU1LnBsYWNlaG9sZGVyVGV4dCwgaTQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwgdDQucGhyYXNlKCJmb2xkZWQgY29kZSIpKSwgaTQudGl0bGUgPSB0NC5waHJhc2UoInVuZm9sZCIpLCBpNC5jbGFzc05hbWUgPSAiY20tZm9sZFBsYWNlaG9sZGVyIiwgaTQub25jbGljayA9IHIzLCBpNDsKICAgIH0KICB9KCkgfSk7CiAgdmFyIHhlNyA9IE0yLmJhc2VUaGVtZSh7ICIuY20tZm9sZFBsYWNlaG9sZGVyIjogeyBiYWNrZ3JvdW5kQ29sb3I6ICIjZWVlIiwgYm9yZGVyOiAiMXB4IHNvbGlkICNkZGQiLCBjb2xvcjogIiM4ODgiLCBib3JkZXJSYWRpdXM6ICIuMmVtIiwgbWFyZ2luOiAiMCAxcHgiLCBwYWRkaW5nOiAiMCAxcHgiLCBjdXJzb3I6ICJwb2ludGVyIiB9LCAiLmNtLWZvbGRHdXR0ZXIgc3BhbiI6IHsgcGFkZGluZzogIjAgMXB4IiwgY3Vyc29yOiAicG9pbnRlciIgfSB9KTsKICB2YXIgRDYgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUpIHsKICAgICAgbGV0IHIzOwogICAgICBmdW5jdGlvbiBpNChsNykgewogICAgICAgIGxldCBhNCA9IFQ5Lm5ld05hbWUoKTsKICAgICAgICByZXR1cm4gKHIzIHx8IChyMyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpKSlbIi4iICsgYTRdID0gbDcsIGE0OwogICAgICB9CiAgICAgIGxldCBzOCA9IHR5cGVvZiBlNS5hbGwgPT0gInN0cmluZyIgPyBlNS5hbGwgOiBlNS5hbGwgPyBpNChlNS5hbGwpIDogdm9pZCAwLCBvNCA9IGU1LnNjb3BlOwogICAgICB0aGlzLnNjb3BlID0gbzQgaW5zdGFuY2VvZiBjNCA/IChsNykgPT4gbDcucHJvcChUMTApID09IG80LmRhdGEgOiBvNCA/IChsNykgPT4gbDcgPT0gbzQgOiB2b2lkIDAsIHRoaXMuc3R5bGUgPSBXNSh0NC5tYXAoKGw3KSA9PiAoeyB0YWc6IGw3LnRhZywgY2xhc3M6IGw3LmNsYXNzIHx8IGk0KE9iamVjdC5hc3NpZ24oe30sIGw3LCB7IHRhZzogbnVsbCB9KSkgfSkpLCB7IGFsbDogczggfSkuc3R5bGUsIHRoaXMubW9kdWxlID0gcjMgPyBuZXcgVDkocjMpIDogbnVsbCwgdGhpcy50aGVtZVR5cGUgPSBlNS50aGVtZVR5cGU7CiAgICB9CiAgICBzdGF0aWMgZGVmaW5lKHQ0LCBlNSkgewogICAgICByZXR1cm4gbmV3IEQ2KHQ0LCBlNSB8fCB7fSk7CiAgICB9CiAgfTsKICB2YXIgbnQ1ID0gQTIuZGVmaW5lKCk7CiAgdmFyIFJ0NCA9IEEyLmRlZmluZSh7IGNvbWJpbmUobjgpIHsKICAgIHJldHVybiBuOC5sZW5ndGggPyBbbjhbMF1dIDogbnVsbDsKICB9IH0pOwogIGZ1bmN0aW9uIEw2KG44KSB7CiAgICBsZXQgdDQgPSBuOC5mYWNldChudDUpOwogICAgcmV0dXJuIHQ0Lmxlbmd0aCA/IHQ0IDogbjguZmFjZXQoUnQ0KTsKICB9CiAgdmFyIHJ0NSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHRoaXMubWFya0NhY2hlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksIHRoaXMudHJlZSA9IG03KHQ0LnN0YXRlKSwgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuYnVpbGREZWNvKHQ0LCBMNih0NC5zdGF0ZSkpOwogICAgfQogICAgdXBkYXRlKHQ0KSB7CiAgICAgIGxldCBlNSA9IG03KHQ0LnN0YXRlKSwgcjMgPSBMNih0NC5zdGF0ZSksIGk0ID0gcjMgIT0gTDYodDQuc3RhcnRTdGF0ZSk7CiAgICAgIGU1Lmxlbmd0aCA8IHQ0LnZpZXcudmlld3BvcnQudG8gJiYgIWk0ICYmIGU1LnR5cGUgPT0gdGhpcy50cmVlLnR5cGUgPyB0aGlzLmRlY29yYXRpb25zID0gdGhpcy5kZWNvcmF0aW9ucy5tYXAodDQuY2hhbmdlcykgOiAoZTUgIT0gdGhpcy50cmVlIHx8IHQ0LnZpZXdwb3J0Q2hhbmdlZCB8fCBpNCkgJiYgKHRoaXMudHJlZSA9IGU1LCB0aGlzLmRlY29yYXRpb25zID0gdGhpcy5idWlsZERlY28odDQudmlldywgcjMpKTsKICAgIH0KICAgIGJ1aWxkRGVjbyh0NCwgZTUpIHsKICAgICAgaWYgKCFlNSB8fCAhdGhpcy50cmVlLmxlbmd0aCkKICAgICAgICByZXR1cm4gay5ub25lOwogICAgICBsZXQgcjMgPSBuZXcgWjIoKTsKICAgICAgZm9yIChsZXQgeyBmcm9tOiBpNCwgdG86IHM4IH0gb2YgdDQudmlzaWJsZVJhbmdlcykKICAgICAgICBfNih0aGlzLnRyZWUsIGU1LCAobzQsIGw3LCBhNCkgPT4gewogICAgICAgICAgcjMuYWRkKG80LCBsNywgdGhpcy5tYXJrQ2FjaGVbYTRdIHx8ICh0aGlzLm1hcmtDYWNoZVthNF0gPSBrLm1hcmsoeyBjbGFzczogYTQgfSkpKTsKICAgICAgICB9LCBpNCwgczgpOwogICAgICByZXR1cm4gcjMuZmluaXNoKCk7CiAgICB9CiAgfTsKICB2YXIgU2U3ID0gbHQuaGlnaChWNC5mcm9tQ2xhc3MocnQ1LCB7IGRlY29yYXRpb25zOiAobjgpID0+IG44LmRlY29yYXRpb25zIH0pKTsKICB2YXIgc24zID0gRDYuZGVmaW5lKFt7IHRhZzogbjMubWV0YSwgY29sb3I6ICIjN2E3NTdhIiB9LCB7IHRhZzogbjMubGluaywgdGV4dERlY29yYXRpb246ICJ1bmRlcmxpbmUiIH0sIHsgdGFnOiBuMy5oZWFkaW5nLCB0ZXh0RGVjb3JhdGlvbjogInVuZGVybGluZSIsIGZvbnRXZWlnaHQ6ICJib2xkIiB9LCB7IHRhZzogbjMuZW1waGFzaXMsIGZvbnRTdHlsZTogIml0YWxpYyIgfSwgeyB0YWc6IG4zLnN0cm9uZywgZm9udFdlaWdodDogImJvbGQiIH0sIHsgdGFnOiBuMy5zdHJpa2V0aHJvdWdoLCB0ZXh0RGVjb3JhdGlvbjogImxpbmUtdGhyb3VnaCIgfSwgeyB0YWc6IG4zLmtleXdvcmQsIGNvbG9yOiAiIzcwOCIgfSwgeyB0YWc6IFtuMy5hdG9tLCBuMy5ib29sLCBuMy51cmwsIG4zLmNvbnRlbnRTZXBhcmF0b3IsIG4zLmxhYmVsTmFtZV0sIGNvbG9yOiAiIzIxOSIgfSwgeyB0YWc6IFtuMy5saXRlcmFsLCBuMy5pbnNlcnRlZF0sIGNvbG9yOiAiIzE2NCIgfSwgeyB0YWc6IFtuMy5zdHJpbmcsIG4zLmRlbGV0ZWRdLCBjb2xvcjogIiNhMTEiIH0sIHsgdGFnOiBbbjMucmVnZXhwLCBuMy5lc2NhcGUsIG4zLnNwZWNpYWwobjMuc3RyaW5nKV0sIGNvbG9yOiAiI2U0MCIgfSwgeyB0YWc6IG4zLmRlZmluaXRpb24objMudmFyaWFibGVOYW1lKSwgY29sb3I6ICIjMDBmIiB9LCB7IHRhZzogbjMubG9jYWwobjMudmFyaWFibGVOYW1lKSwgY29sb3I6ICIjMzBhIiB9LCB7IHRhZzogW24zLnR5cGVOYW1lLCBuMy5uYW1lc3BhY2VdLCBjb2xvcjogIiMwODUiIH0sIHsgdGFnOiBuMy5jbGFzc05hbWUsIGNvbG9yOiAiIzE2NyIgfSwgeyB0YWc6IFtuMy5zcGVjaWFsKG4zLnZhcmlhYmxlTmFtZSksIG4zLm1hY3JvTmFtZV0sIGNvbG9yOiAiIzI1NiIgfSwgeyB0YWc6IG4zLmRlZmluaXRpb24objMucHJvcGVydHlOYW1lKSwgY29sb3I6ICIjMDBjIiB9LCB7IHRhZzogbjMuY29tbWVudCwgY29sb3I6ICIjOTQwIiB9LCB7IHRhZzogbjMuaW52YWxpZCwgY29sb3I6ICIjZjAwIiB9XSk7CiAgdmFyIFBlNyA9IE0yLmJhc2VUaGVtZSh7ICImLmNtLWZvY3VzZWQgLmNtLW1hdGNoaW5nQnJhY2tldCI6IHsgYmFja2dyb3VuZENvbG9yOiAiIzMyOGM4MjUyIiB9LCAiJi5jbS1mb2N1c2VkIC5jbS1ub25tYXRjaGluZ0JyYWNrZXQiOiB7IGJhY2tncm91bmRDb2xvcjogIiNiYjU1NTU0NCIgfSB9KTsKICB2YXIgVXQzID0gMWU0OwogIHZhciBXdDQgPSAiKClbXXt9IjsKICB2YXIgTHQzID0gQTIuZGVmaW5lKHsgY29tYmluZShuOCkgewogICAgcmV0dXJuIGh0KG44LCB7IGFmdGVyQ3Vyc29yOiB0cnVlLCBicmFja2V0czogV3Q0LCBtYXhTY2FuRGlzdGFuY2U6IFV0MywgcmVuZGVyTWF0Y2g6IFRlNiB9KTsKICB9IH0pOwogIHZhciBBZTggPSBrLm1hcmsoeyBjbGFzczogImNtLW1hdGNoaW5nQnJhY2tldCIgfSk7CiAgdmFyIENlOSA9IGsubWFyayh7IGNsYXNzOiAiY20tbm9ubWF0Y2hpbmdCcmFja2V0IiB9KTsKICBmdW5jdGlvbiBUZTYobjgpIHsKICAgIGxldCB0NCA9IFtdLCBlNSA9IG44Lm1hdGNoZWQgPyBBZTggOiBDZTk7CiAgICByZXR1cm4gdDQucHVzaChlNS5yYW5nZShuOC5zdGFydC5mcm9tLCBuOC5zdGFydC50bykpLCBuOC5lbmQgJiYgdDQucHVzaChlNS5yYW5nZShuOC5lbmQuZnJvbSwgbjguZW5kLnRvKSksIHQ0OwogIH0KICB2YXIgRGU1ID0gSjIuZGVmaW5lKHsgY3JlYXRlKCkgewogICAgcmV0dXJuIGsubm9uZTsKICB9LCB1cGRhdGUobjgsIHQ0KSB7CiAgICBpZiAoIXQ0LmRvY0NoYW5nZWQgJiYgIXQ0LnNlbGVjdGlvbikKICAgICAgcmV0dXJuIG44OwogICAgbGV0IGU1ID0gW10sIHIzID0gdDQuc3RhdGUuZmFjZXQoTHQzKTsKICAgIGZvciAobGV0IGk0IG9mIHQ0LnN0YXRlLnNlbGVjdGlvbi5yYW5nZXMpIHsKICAgICAgaWYgKCFpNC5lbXB0eSkKICAgICAgICBjb250aW51ZTsKICAgICAgbGV0IHM4ID0gVTcodDQuc3RhdGUsIGk0LmhlYWQsIC0xLCByMykgfHwgaTQuaGVhZCA+IDAgJiYgVTcodDQuc3RhdGUsIGk0LmhlYWQgLSAxLCAxLCByMykgfHwgcjMuYWZ0ZXJDdXJzb3IgJiYgKFU3KHQ0LnN0YXRlLCBpNC5oZWFkLCAxLCByMykgfHwgaTQuaGVhZCA8IHQ0LnN0YXRlLmRvYy5sZW5ndGggJiYgVTcodDQuc3RhdGUsIGk0LmhlYWQgKyAxLCAtMSwgcjMpKTsKICAgICAgczggJiYgKGU1ID0gZTUuY29uY2F0KHIzLnJlbmRlck1hdGNoKHM4LCB0NC5zdGF0ZSkpKTsKICAgIH0KICAgIHJldHVybiBrLnNldChlNSwgdHJ1ZSk7CiAgfSwgcHJvdmlkZTogKG44KSA9PiBNMi5kZWNvcmF0aW9ucy5mcm9tKG44KSB9KTsKICBmdW5jdGlvbiBpdDUobjgsIHQ0LCBlNSkgewogICAgbGV0IHIzID0gbjgucHJvcCh0NCA8IDAgPyB3NS5vcGVuZWRCeSA6IHc1LmNsb3NlZEJ5KTsKICAgIGlmIChyMykKICAgICAgcmV0dXJuIHIzOwogICAgaWYgKG44Lm5hbWUubGVuZ3RoID09IDEpIHsKICAgICAgbGV0IGk0ID0gZTUuaW5kZXhPZihuOC5uYW1lKTsKICAgICAgaWYgKGk0ID4gLTEgJiYgaTQgJSAyID09ICh0NCA8IDAgPyAxIDogMCkpCiAgICAgICAgcmV0dXJuIFtlNVtpNCArIHQ0XV07CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gVTcobjgsIHQ0LCBlNSwgcjMgPSB7fSkgewogICAgbGV0IGk0ID0gcjMubWF4U2NhbkRpc3RhbmNlIHx8IFV0MywgczggPSByMy5icmFja2V0cyB8fCBXdDQsIG80ID0gbTcobjgpLCBsNyA9IG80LnJlc29sdmVJbm5lcih0NCwgZTUpOwogICAgZm9yIChsZXQgYTQgPSBsNzsgYTQ7IGE0ID0gYTQucGFyZW50KSB7CiAgICAgIGxldCBoMTAgPSBpdDUoYTQudHlwZSwgZTUsIHM4KTsKICAgICAgaWYgKGgxMCAmJiBhNC5mcm9tIDwgYTQudG8pCiAgICAgICAgcmV0dXJuIE9lNShuOCwgdDQsIGU1LCBhNCwgaDEwLCBzOCk7CiAgICB9CiAgICByZXR1cm4gTmU1KG44LCB0NCwgZTUsIG80LCBsNy50eXBlLCBpNCwgczgpOwogIH0KICBmdW5jdGlvbiBPZTUobjgsIHQ0LCBlNSwgcjMsIGk0LCBzOCkgewogICAgbGV0IG80ID0gcjMucGFyZW50LCBsNyA9IHsgZnJvbTogcjMuZnJvbSwgdG86IHIzLnRvIH0sIGE0ID0gMCwgaDEwID0gbzQ/LmN1cnNvcigpOwogICAgaWYgKGgxMCAmJiAoZTUgPCAwID8gaDEwLmNoaWxkQmVmb3JlKHIzLmZyb20pIDogaDEwLmNoaWxkQWZ0ZXIocjMudG8pKSkKICAgICAgZG8KICAgICAgICBpZiAoZTUgPCAwID8gaDEwLnRvIDw9IHIzLmZyb20gOiBoMTAuZnJvbSA+PSByMy50bykgewogICAgICAgICAgaWYgKGE0ID09IDAgJiYgaTQuaW5kZXhPZihoMTAudHlwZS5uYW1lKSA+IC0xICYmIGgxMC5mcm9tIDwgaDEwLnRvKQogICAgICAgICAgICByZXR1cm4geyBzdGFydDogbDcsIGVuZDogeyBmcm9tOiBoMTAuZnJvbSwgdG86IGgxMC50byB9LCBtYXRjaGVkOiB0cnVlIH07CiAgICAgICAgICBpZiAoaXQ1KGgxMC50eXBlLCBlNSwgczgpKQogICAgICAgICAgICBhNCsrOwogICAgICAgICAgZWxzZSBpZiAoaXQ1KGgxMC50eXBlLCAtZTUsIHM4KSkgewogICAgICAgICAgICBpZiAoYTQgPT0gMCkKICAgICAgICAgICAgICByZXR1cm4geyBzdGFydDogbDcsIGVuZDogaDEwLmZyb20gPT0gaDEwLnRvID8gdm9pZCAwIDogeyBmcm9tOiBoMTAuZnJvbSwgdG86IGgxMC50byB9LCBtYXRjaGVkOiBmYWxzZSB9OwogICAgICAgICAgICBhNC0tOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgd2hpbGUgKGU1IDwgMCA/IGgxMC5wcmV2U2libGluZygpIDogaDEwLm5leHRTaWJsaW5nKCkpOwogICAgcmV0dXJuIHsgc3RhcnQ6IGw3LCBtYXRjaGVkOiBmYWxzZSB9OwogIH0KICBmdW5jdGlvbiBOZTUobjgsIHQ0LCBlNSwgcjMsIGk0LCBzOCwgbzQpIHsKICAgIGxldCBsNyA9IGU1IDwgMCA/IG44LnNsaWNlRG9jKHQ0IC0gMSwgdDQpIDogbjguc2xpY2VEb2ModDQsIHQ0ICsgMSksIGE0ID0gbzQuaW5kZXhPZihsNyk7CiAgICBpZiAoYTQgPCAwIHx8IGE0ICUgMiA9PSAwICE9IGU1ID4gMCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBsZXQgaDEwID0geyBmcm9tOiBlNSA8IDAgPyB0NCAtIDEgOiB0NCwgdG86IGU1ID4gMCA/IHQ0ICsgMSA6IHQ0IH0sIHUxMSA9IG44LmRvYy5pdGVyUmFuZ2UodDQsIGU1ID4gMCA/IG44LmRvYy5sZW5ndGggOiAwKSwgZDE1ID0gMDsKICAgIGZvciAobGV0IGcxMiA9IDA7ICF1MTEubmV4dCgpLmRvbmUgJiYgZzEyIDw9IHM4OyApIHsKICAgICAgbGV0IHcyMSA9IHUxMS52YWx1ZTsKICAgICAgZTUgPCAwICYmIChnMTIgKz0gdzIxLmxlbmd0aCk7CiAgICAgIGxldCBRMTcgPSB0NCArIGcxMiAqIGU1OwogICAgICBmb3IgKGxldCBDMTcgPSBlNSA+IDAgPyAwIDogdzIxLmxlbmd0aCAtIDEsIEd0NSA9IGU1ID4gMCA/IHcyMS5sZW5ndGggOiAtMTsgQzE3ICE9IEd0NTsgQzE3ICs9IGU1KSB7CiAgICAgICAgbGV0IFgyMyA9IG80LmluZGV4T2YodzIxW0MxN10pOwogICAgICAgIGlmICghKFgyMyA8IDAgfHwgcjMucmVzb2x2ZUlubmVyKFExNyArIEMxNywgMSkudHlwZSAhPSBpNCkpCiAgICAgICAgICBpZiAoWDIzICUgMiA9PSAwID09IGU1ID4gMCkKICAgICAgICAgICAgZDE1Kys7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKGQxNSA9PSAxKQogICAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBoMTAsIGVuZDogeyBmcm9tOiBRMTcgKyBDMTcsIHRvOiBRMTcgKyBDMTcgKyAxIH0sIG1hdGNoZWQ6IFgyMyA+PiAxID09IGE0ID4+IDEgfTsKICAgICAgICAgICAgZDE1LS07CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgZTUgPiAwICYmIChnMTIgKz0gdzIxLmxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gdTExLmRvbmUgPyB7IHN0YXJ0OiBoMTAsIG1hdGNoZWQ6IGZhbHNlIH0gOiBudWxsOwogIH0KICB2YXIgaHQ0ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgdmFyIEY2ID0gW041Lm5vbmVdOwogIHZhciBGZTUgPSBuZXcgWjUoRjYpOwogIHZhciBndDMgPSBbXTsKICB2YXIgVnQ0ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgZm9yIChsZXQgW244LCB0NF0gb2YgW1sidmFyaWFibGUiLCAidmFyaWFibGVOYW1lIl0sIFsidmFyaWFibGUtMiIsICJ2YXJpYWJsZU5hbWUuc3BlY2lhbCJdLCBbInN0cmluZy0yIiwgInN0cmluZy5zcGVjaWFsIl0sIFsiZGVmIiwgInZhcmlhYmxlTmFtZS5kZWZpbml0aW9uIl0sIFsidGFnIiwgInRhZ05hbWUiXSwgWyJhdHRyaWJ1dGUiLCAiYXR0cmlidXRlTmFtZSJdLCBbInR5cGUiLCAidHlwZU5hbWUiXSwgWyJidWlsdGluIiwgInZhcmlhYmxlTmFtZS5zdGFuZGFyZCJdLCBbInF1YWxpZmllciIsICJtb2RpZmllciJdLCBbImVycm9yIiwgImludmFsaWQiXSwgWyJoZWFkZXIiLCAiaGVhZGluZyJdLCBbInByb3BlcnR5IiwgInByb3BlcnR5TmFtZSJdXSkKICAgIFZ0NFtuOF0gPSB6dDMoaHQ0LCB0NCk7CiAgdmFyIEg2ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgdGhpcy5leHRyYSA9IHQ0LCB0aGlzLnRhYmxlID0gT2JqZWN0LmFzc2lnbigvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgVnQ0KTsKICAgIH0KICAgIHJlc29sdmUodDQpIHsKICAgICAgcmV0dXJuIHQ0ID8gdGhpcy50YWJsZVt0NF0gfHwgKHRoaXMudGFibGVbdDRdID0genQzKHRoaXMuZXh0cmEsIHQ0KSkgOiAwOwogICAgfQogIH07CiAgdmFyIFJlNiA9IG5ldyBINihodDQpOwogIGZ1bmN0aW9uIHR0NihuOCwgdDQpIHsKICAgIGd0My5pbmRleE9mKG44KSA+IC0xIHx8IChndDMucHVzaChuOCksIGNvbnNvbGUud2Fybih0NCkpOwogIH0KICBmdW5jdGlvbiB6dDMobjgsIHQ0KSB7CiAgICBsZXQgZTUgPSBudWxsOwogICAgZm9yIChsZXQgczggb2YgdDQuc3BsaXQoIi4iKSkgewogICAgICBsZXQgbzQgPSBuOFtzOF0gfHwgbjNbczhdOwogICAgICBvNCA/IHR5cGVvZiBvNCA9PSAiZnVuY3Rpb24iID8gZTUgPyBlNSA9IG80KGU1KSA6IHR0NihzOCwgYE1vZGlmaWVyICR7czh9IHVzZWQgYXQgc3RhcnQgb2YgdGFnYCkgOiBlNSA/IHR0NihzOCwgYFRhZyAke3M4fSB1c2VkIGFzIG1vZGlmaWVyYCkgOiBlNSA9IG80IDogdHQ2KHM4LCBgVW5rbm93biBoaWdobGlnaHRpbmcgdGFnICR7czh9YCk7CiAgICB9CiAgICBpZiAoIWU1KQogICAgICByZXR1cm4gMDsKICAgIGxldCByMyA9IHQ0LnJlcGxhY2UoLyAvZywgIl8iKSwgaTQgPSBONS5kZWZpbmUoeyBpZDogRjYubGVuZ3RoLCBuYW1lOiByMywgcHJvcHM6IFskNyh7IFtyM106IGU1IH0pXSB9KTsKICAgIHJldHVybiBGNi5wdXNoKGk0KSwgaTQuaWQ7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AY29kZW1pcnJvci9jb21tYW5kc0A2LjEuMS9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWMy9kZW5vL2NvbW1hbmRzLmpzCiAgdmFyIHR0NyA9IChlNSkgPT4gewogICAgbGV0IHQ0ID0gZWU3KGU1LnN0YXRlKTsKICAgIHJldHVybiB0NC5saW5lID8gbnQ2KGU1KSA6IHQ0LmJsb2NrID8gb3QzKGU1KSA6IGZhbHNlOwogIH07CiAgZnVuY3Rpb24gRDcoZTUsIHQ0KSB7CiAgICByZXR1cm4gKHsgc3RhdGU6IHIzLCBkaXNwYXRjaDogbjggfSkgPT4gewogICAgICBpZiAocjMucmVhZE9ubHkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgbDcgPSBlNSh0NCwgcjMpOwogICAgICByZXR1cm4gbDcgPyAobjgocjMudXBkYXRlKGw3KSksIHRydWUpIDogZmFsc2U7CiAgICB9OwogIH0KICB2YXIgbnQ2ID0gRDcodGU3LCAwKTsKICB2YXIgZm4gPSBENyh0ZTcsIDEpOwogIHZhciBhbiA9IEQ3KHRlNywgMik7CiAgdmFyIHJ0NiA9IEQ3KHc4LCAwKTsKICB2YXIgaG4yID0gRDcodzgsIDEpOwogIHZhciBkbiA9IEQ3KHc4LCAyKTsKICB2YXIgb3QzID0gRDcoKGU1LCB0NCkgPT4gdzgoZTUsIHQ0LCBjdDUodDQpKSwgMCk7CiAgZnVuY3Rpb24gZWU3KGU1LCB0NCA9IGU1LnNlbGVjdGlvbi5tYWluLmhlYWQpIHsKICAgIGxldCByMyA9IGU1Lmxhbmd1YWdlRGF0YUF0KCJjb21tZW50VG9rZW5zIiwgdDQpOwogICAgcmV0dXJuIHIzLmxlbmd0aCA/IHIzWzBdIDoge307CiAgfQogIHZhciBPNSA9IDUwOwogIGZ1bmN0aW9uIGx0NChlNSwgeyBvcGVuOiB0NCwgY2xvc2U6IHIzIH0sIG44LCBsNykgewogICAgbGV0IG80ID0gZTUuc2xpY2VEb2MobjggLSBPNSwgbjgpLCBjMTcgPSBlNS5zbGljZURvYyhsNywgbDcgKyBPNSksIHM4ID0gL1xzKiQvLmV4ZWMobzQpWzBdLmxlbmd0aCwgaTQgPSAvXlxzKi8uZXhlYyhjMTcpWzBdLmxlbmd0aCwgdTExID0gbzQubGVuZ3RoIC0gczg7CiAgICBpZiAobzQuc2xpY2UodTExIC0gdDQubGVuZ3RoLCB1MTEpID09IHQ0ICYmIGMxNy5zbGljZShpNCwgaTQgKyByMy5sZW5ndGgpID09IHIzKQogICAgICByZXR1cm4geyBvcGVuOiB7IHBvczogbjggLSBzOCwgbWFyZ2luOiBzOCAmJiAxIH0sIGNsb3NlOiB7IHBvczogbDcgKyBpNCwgbWFyZ2luOiBpNCAmJiAxIH0gfTsKICAgIGxldCBmMTEsIGE0OwogICAgbDcgLSBuOCA8PSAyICogTzUgPyBmMTEgPSBhNCA9IGU1LnNsaWNlRG9jKG44LCBsNykgOiAoZjExID0gZTUuc2xpY2VEb2MobjgsIG44ICsgTzUpLCBhNCA9IGU1LnNsaWNlRG9jKGw3IC0gTzUsIGw3KSk7CiAgICBsZXQgZDE1ID0gL15ccyovLmV4ZWMoZjExKVswXS5sZW5ndGgsIFMyMSA9IC9ccyokLy5leGVjKGE0KVswXS5sZW5ndGgsIE0yNSA9IGE0Lmxlbmd0aCAtIFMyMSAtIHIzLmxlbmd0aDsKICAgIHJldHVybiBmMTEuc2xpY2UoZDE1LCBkMTUgKyB0NC5sZW5ndGgpID09IHQ0ICYmIGE0LnNsaWNlKE0yNSwgTTI1ICsgcjMubGVuZ3RoKSA9PSByMyA/IHsgb3BlbjogeyBwb3M6IG44ICsgZDE1ICsgdDQubGVuZ3RoLCBtYXJnaW46IC9ccy8udGVzdChmMTEuY2hhckF0KGQxNSArIHQ0Lmxlbmd0aCkpID8gMSA6IDAgfSwgY2xvc2U6IHsgcG9zOiBsNyAtIFMyMSAtIHIzLmxlbmd0aCwgbWFyZ2luOiAvXHMvLnRlc3QoYTQuY2hhckF0KE0yNSAtIDEpKSA/IDEgOiAwIH0gfSA6IG51bGw7CiAgfQogIGZ1bmN0aW9uIGN0NShlNSkgewogICAgbGV0IHQ0ID0gW107CiAgICBmb3IgKGxldCByMyBvZiBlNS5zZWxlY3Rpb24ucmFuZ2VzKSB7CiAgICAgIGxldCBuOCA9IGU1LmRvYy5saW5lQXQocjMuZnJvbSksIGw3ID0gcjMudG8gPD0gbjgudG8gPyBuOCA6IGU1LmRvYy5saW5lQXQocjMudG8pLCBvNCA9IHQ0Lmxlbmd0aCAtIDE7CiAgICAgIG80ID49IDAgJiYgdDRbbzRdLnRvID4gbjguZnJvbSA/IHQ0W280XS50byA9IGw3LnRvIDogdDQucHVzaCh7IGZyb206IG44LmZyb20sIHRvOiBsNy50byB9KTsKICAgIH0KICAgIHJldHVybiB0NDsKICB9CiAgZnVuY3Rpb24gdzgoZTUsIHQ0LCByMyA9IHQ0LnNlbGVjdGlvbi5yYW5nZXMpIHsKICAgIGxldCBuOCA9IHIzLm1hcCgobzQpID0+IGVlNyh0NCwgbzQuZnJvbSkuYmxvY2spOwogICAgaWYgKCFuOC5ldmVyeSgobzQpID0+IG80KSkKICAgICAgcmV0dXJuIG51bGw7CiAgICBsZXQgbDcgPSByMy5tYXAoKG80LCBjMTcpID0+IGx0NCh0NCwgbjhbYzE3XSwgbzQuZnJvbSwgbzQudG8pKTsKICAgIGlmIChlNSAhPSAyICYmICFsNy5ldmVyeSgobzQpID0+IG80KSkKICAgICAgcmV0dXJuIHsgY2hhbmdlczogdDQuY2hhbmdlcyhyMy5tYXAoKG80LCBjMTcpID0+IGw3W2MxN10gPyBbXSA6IFt7IGZyb206IG80LmZyb20sIGluc2VydDogbjhbYzE3XS5vcGVuICsgIiAiIH0sIHsgZnJvbTogbzQudG8sIGluc2VydDogIiAiICsgbjhbYzE3XS5jbG9zZSB9XSkpIH07CiAgICBpZiAoZTUgIT0gMSAmJiBsNy5zb21lKChvNCkgPT4gbzQpKSB7CiAgICAgIGxldCBvNCA9IFtdOwogICAgICBmb3IgKGxldCBjMTcgPSAwLCBzODsgYzE3IDwgbDcubGVuZ3RoOyBjMTcrKykKICAgICAgICBpZiAoczggPSBsN1tjMTddKSB7CiAgICAgICAgICBsZXQgaTQgPSBuOFtjMTddLCB7IG9wZW46IHUxMSwgY2xvc2U6IGYxMSB9ID0gczg7CiAgICAgICAgICBvNC5wdXNoKHsgZnJvbTogdTExLnBvcyAtIGk0Lm9wZW4ubGVuZ3RoLCB0bzogdTExLnBvcyArIHUxMS5tYXJnaW4gfSwgeyBmcm9tOiBmMTEucG9zIC0gZjExLm1hcmdpbiwgdG86IGYxMS5wb3MgKyBpNC5jbG9zZS5sZW5ndGggfSk7CiAgICAgICAgfQogICAgICByZXR1cm4geyBjaGFuZ2VzOiBvNCB9OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIHRlNyhlNSwgdDQsIHIzID0gdDQuc2VsZWN0aW9uLnJhbmdlcykgewogICAgbGV0IG44ID0gW10sIGw3ID0gLTE7CiAgICBmb3IgKGxldCB7IGZyb206IG80LCB0bzogYzE3IH0gb2YgcjMpIHsKICAgICAgbGV0IHM4ID0gbjgubGVuZ3RoLCBpNCA9IDFlOTsKICAgICAgZm9yIChsZXQgdTExID0gbzQ7IHUxMSA8PSBjMTc7ICkgewogICAgICAgIGxldCBmMTEgPSB0NC5kb2MubGluZUF0KHUxMSk7CiAgICAgICAgaWYgKGYxMS5mcm9tID4gbDcgJiYgKG80ID09IGMxNyB8fCBjMTcgPiBmMTEuZnJvbSkpIHsKICAgICAgICAgIGw3ID0gZjExLmZyb207CiAgICAgICAgICBsZXQgYTQgPSBlZTcodDQsIHUxMSkubGluZTsKICAgICAgICAgIGlmICghYTQpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgbGV0IGQxNSA9IC9eXHMqLy5leGVjKGYxMS50ZXh0KVswXS5sZW5ndGgsIFMyMSA9IGQxNSA9PSBmMTEubGVuZ3RoLCBNMjUgPSBmMTEudGV4dC5zbGljZShkMTUsIGQxNSArIGE0Lmxlbmd0aCkgPT0gYTQgPyBkMTUgOiAtMTsKICAgICAgICAgIGQxNSA8IGYxMS50ZXh0Lmxlbmd0aCAmJiBkMTUgPCBpNCAmJiAoaTQgPSBkMTUpLCBuOC5wdXNoKHsgbGluZTogZjExLCBjb21tZW50OiBNMjUsIHRva2VuOiBhNCwgaW5kZW50OiBkMTUsIGVtcHR5OiBTMjEsIHNpbmdsZTogZmFsc2UgfSk7CiAgICAgICAgfQogICAgICAgIHUxMSA9IGYxMS50byArIDE7CiAgICAgIH0KICAgICAgaWYgKGk0IDwgMWU5KQogICAgICAgIGZvciAobGV0IHUxMSA9IHM4OyB1MTEgPCBuOC5sZW5ndGg7IHUxMSsrKQogICAgICAgICAgbjhbdTExXS5pbmRlbnQgPCBuOFt1MTFdLmxpbmUudGV4dC5sZW5ndGggJiYgKG44W3UxMV0uaW5kZW50ID0gaTQpOwogICAgICBuOC5sZW5ndGggPT0gczggKyAxICYmIChuOFtzOF0uc2luZ2xlID0gdHJ1ZSk7CiAgICB9CiAgICBpZiAoZTUgIT0gMiAmJiBuOC5zb21lKChvNCkgPT4gbzQuY29tbWVudCA8IDAgJiYgKCFvNC5lbXB0eSB8fCBvNC5zaW5nbGUpKSkgewogICAgICBsZXQgbzQgPSBbXTsKICAgICAgZm9yIChsZXQgeyBsaW5lOiBzOCwgdG9rZW46IGk0LCBpbmRlbnQ6IHUxMSwgZW1wdHk6IGYxMSwgc2luZ2xlOiBhNCB9IG9mIG44KQogICAgICAgIChhNCB8fCAhZjExKSAmJiBvNC5wdXNoKHsgZnJvbTogczguZnJvbSArIHUxMSwgaW5zZXJ0OiBpNCArICIgIiB9KTsKICAgICAgbGV0IGMxNyA9IHQ0LmNoYW5nZXMobzQpOwogICAgICByZXR1cm4geyBjaGFuZ2VzOiBjMTcsIHNlbGVjdGlvbjogdDQuc2VsZWN0aW9uLm1hcChjMTcsIDEpIH07CiAgICB9IGVsc2UgaWYgKGU1ICE9IDEgJiYgbjguc29tZSgobzQpID0+IG80LmNvbW1lbnQgPj0gMCkpIHsKICAgICAgbGV0IG80ID0gW107CiAgICAgIGZvciAobGV0IHsgbGluZTogYzE3LCBjb21tZW50OiBzOCwgdG9rZW46IGk0IH0gb2YgbjgpCiAgICAgICAgaWYgKHM4ID49IDApIHsKICAgICAgICAgIGxldCB1MTEgPSBjMTcuZnJvbSArIHM4LCBmMTEgPSB1MTEgKyBpNC5sZW5ndGg7CiAgICAgICAgICBjMTcudGV4dFtmMTEgLSBjMTcuZnJvbV0gPT0gIiAiICYmIGYxMSsrLCBvNC5wdXNoKHsgZnJvbTogdTExLCB0bzogZjExIH0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIHsgY2hhbmdlczogbzQgfTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICB2YXIgWDkgPSBEMi5kZWZpbmUoKTsKICB2YXIgc3Q0ID0gRDIuZGVmaW5lKCk7CiAgdmFyIGl0NiA9IEEyLmRlZmluZSgpOwogIHZhciB5ZTkgPSBBMi5kZWZpbmUoeyBjb21iaW5lKGU1KSB7CiAgICByZXR1cm4gaHQoZTUsIHsgbWluRGVwdGg6IDEwMCwgbmV3R3JvdXBEZWxheTogNTAwIH0sIHsgbWluRGVwdGg6IE1hdGgubWF4LCBuZXdHcm91cERlbGF5OiBNYXRoLm1pbiB9KTsKICB9IH0pOwogIGZ1bmN0aW9uIHV0NShlNSkgewogICAgbGV0IHQ0ID0gMDsKICAgIHJldHVybiBlNS5pdGVyQ2hhbmdlZFJhbmdlcygocjMsIG44KSA9PiB0NCA9IG44KSwgdDQ7CiAgfQogIHZhciBHNyA9IEoyLmRlZmluZSh7IGNyZWF0ZSgpIHsKICAgIHJldHVybiBrNC5lbXB0eTsKICB9LCB1cGRhdGUoZTUsIHQ0KSB7CiAgICBsZXQgcjMgPSB0NC5zdGF0ZS5mYWNldCh5ZTkpLCBuOCA9IHQ0LmFubm90YXRpb24oWDkpOwogICAgaWYgKG44KSB7CiAgICAgIGxldCBpNCA9IHQ0LmRvY0NoYW5nZWQgPyBnMi5zaW5nbGUodXQ1KHQ0LmNoYW5nZXMpKSA6IHZvaWQgMCwgdTExID0gbTguZnJvbVRyYW5zYWN0aW9uKHQ0LCBpNCksIGYxMSA9IG44LnNpZGUsIGE0ID0gZjExID09IDAgPyBlNS51bmRvbmUgOiBlNS5kb25lOwogICAgICByZXR1cm4gdTExID8gYTQgPSBONihhNCwgYTQubGVuZ3RoLCByMy5taW5EZXB0aCwgdTExKSA6IGE0ID0gU2U4KGE0LCB0NC5zdGFydFN0YXRlLnNlbGVjdGlvbiksIG5ldyBrNChmMTEgPT0gMCA/IG44LnJlc3QgOiBhNCwgZjExID09IDAgPyBhNCA6IG44LnJlc3QpOwogICAgfQogICAgbGV0IGw3ID0gdDQuYW5ub3RhdGlvbihzdDQpOwogICAgaWYgKChsNyA9PSAiZnVsbCIgfHwgbDcgPT0gImJlZm9yZSIpICYmIChlNSA9IGU1Lmlzb2xhdGUoKSksIHQ0LmFubm90YXRpb24oUy5hZGRUb0hpc3RvcnkpID09PSBmYWxzZSkKICAgICAgcmV0dXJuIHQ0LmNoYW5nZXMuZW1wdHkgPyBlNSA6IGU1LmFkZE1hcHBpbmcodDQuY2hhbmdlcy5kZXNjKTsKICAgIGxldCBvNCA9IG04LmZyb21UcmFuc2FjdGlvbih0NCksIGMxNyA9IHQ0LmFubm90YXRpb24oUy50aW1lKSwgczggPSB0NC5hbm5vdGF0aW9uKFMudXNlckV2ZW50KTsKICAgIHJldHVybiBvNCA/IGU1ID0gZTUuYWRkQ2hhbmdlcyhvNCwgYzE3LCBzOCwgcjMubmV3R3JvdXBEZWxheSwgcjMubWluRGVwdGgpIDogdDQuc2VsZWN0aW9uICYmIChlNSA9IGU1LmFkZFNlbGVjdGlvbih0NC5zdGFydFN0YXRlLnNlbGVjdGlvbiwgYzE3LCBzOCwgcjMubmV3R3JvdXBEZWxheSkpLCAobDcgPT0gImZ1bGwiIHx8IGw3ID09ICJhZnRlciIpICYmIChlNSA9IGU1Lmlzb2xhdGUoKSksIGU1OwogIH0sIHRvSlNPTihlNSkgewogICAgcmV0dXJuIHsgZG9uZTogZTUuZG9uZS5tYXAoKHQ0KSA9PiB0NC50b0pTT04oKSksIHVuZG9uZTogZTUudW5kb25lLm1hcCgodDQpID0+IHQ0LnRvSlNPTigpKSB9OwogIH0sIGZyb21KU09OKGU1KSB7CiAgICByZXR1cm4gbmV3IGs0KGU1LmRvbmUubWFwKG04LmZyb21KU09OKSwgZTUudW5kb25lLm1hcChtOC5mcm9tSlNPTikpOwogIH0gfSk7CiAgZnVuY3Rpb24gbW4oZTUgPSB7fSkgewogICAgcmV0dXJuIFtHNywgeWU5Lm9mKGU1KSwgTTIuZG9tRXZlbnRIYW5kbGVycyh7IGJlZm9yZWlucHV0KHQ0LCByMykgewogICAgICBsZXQgbjggPSB0NC5pbnB1dFR5cGUgPT0gImhpc3RvcnlVbmRvIiA/IGtlOCA6IHQ0LmlucHV0VHlwZSA9PSAiaGlzdG9yeVJlZG8iID8gWTExIDogbnVsbDsKICAgICAgcmV0dXJuIG44ID8gKHQ0LnByZXZlbnREZWZhdWx0KCksIG44KHIzKSkgOiBmYWxzZTsKICAgIH0gfSldOwogIH0KICBmdW5jdGlvbiBWOShlNSwgdDQpIHsKICAgIHJldHVybiBmdW5jdGlvbih7IHN0YXRlOiByMywgZGlzcGF0Y2g6IG44IH0pIHsKICAgICAgaWYgKCF0NCAmJiByMy5yZWFkT25seSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGxldCBsNyA9IHIzLmZpZWxkKEc3LCBmYWxzZSk7CiAgICAgIGlmICghbDcpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgbzQgPSBsNy5wb3AoZTUsIHIzLCB0NCk7CiAgICAgIHJldHVybiBvNCA/IChuOChvNCksIHRydWUpIDogZmFsc2U7CiAgICB9OwogIH0KICB2YXIga2U4ID0gVjkoMCwgZmFsc2UpOwogIHZhciBZMTEgPSBWOSgxLCBmYWxzZSk7CiAgdmFyIGZ0MiA9IFY5KDAsIHRydWUpOwogIHZhciBhdDMgPSBWOSgxLCB0cnVlKTsKICBmdW5jdGlvbiBBZTkoZTUpIHsKICAgIHJldHVybiBmdW5jdGlvbih0NCkgewogICAgICBsZXQgcjMgPSB0NC5maWVsZChHNywgZmFsc2UpOwogICAgICBpZiAoIXIzKQogICAgICAgIHJldHVybiAwOwogICAgICBsZXQgbjggPSBlNSA9PSAwID8gcjMuZG9uZSA6IHIzLnVuZG9uZTsKICAgICAgcmV0dXJuIG44Lmxlbmd0aCAtIChuOC5sZW5ndGggJiYgIW44WzBdLmNoYW5nZXMgPyAxIDogMCk7CiAgICB9OwogIH0KICB2YXIgZ24yID0gQWU5KDApOwogIHZhciB5bjIgPSBBZTkoMSk7CiAgdmFyIG04ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIHIzLCBuOCwgbDcsIG80KSB7CiAgICAgIHRoaXMuY2hhbmdlcyA9IHQ0LCB0aGlzLmVmZmVjdHMgPSByMywgdGhpcy5tYXBwZWQgPSBuOCwgdGhpcy5zdGFydFNlbGVjdGlvbiA9IGw3LCB0aGlzLnNlbGVjdGlvbnNBZnRlciA9IG80OwogICAgfQogICAgc2V0U2VsQWZ0ZXIodDQpIHsKICAgICAgcmV0dXJuIG5ldyBtOCh0aGlzLmNoYW5nZXMsIHRoaXMuZWZmZWN0cywgdGhpcy5tYXBwZWQsIHRoaXMuc3RhcnRTZWxlY3Rpb24sIHQ0KTsKICAgIH0KICAgIHRvSlNPTigpIHsKICAgICAgdmFyIHQ0LCByMywgbjg7CiAgICAgIHJldHVybiB7IGNoYW5nZXM6ICh0NCA9IHRoaXMuY2hhbmdlcykgPT09IG51bGwgfHwgdDQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQ0LnRvSlNPTigpLCBtYXBwZWQ6IChyMyA9IHRoaXMubWFwcGVkKSA9PT0gbnVsbCB8fCByMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcjMudG9KU09OKCksIHN0YXJ0U2VsZWN0aW9uOiAobjggPSB0aGlzLnN0YXJ0U2VsZWN0aW9uKSA9PT0gbnVsbCB8fCBuOCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbjgudG9KU09OKCksIHNlbGVjdGlvbnNBZnRlcjogdGhpcy5zZWxlY3Rpb25zQWZ0ZXIubWFwKChsNykgPT4gbDcudG9KU09OKCkpIH07CiAgICB9CiAgICBzdGF0aWMgZnJvbUpTT04odDQpIHsKICAgICAgcmV0dXJuIG5ldyBtOCh0NC5jaGFuZ2VzICYmIHguZnJvbUpTT04odDQuY2hhbmdlcyksIFtdLCB0NC5tYXBwZWQgJiYgTzIuZnJvbUpTT04odDQubWFwcGVkKSwgdDQuc3RhcnRTZWxlY3Rpb24gJiYgZzIuZnJvbUpTT04odDQuc3RhcnRTZWxlY3Rpb24pLCB0NC5zZWxlY3Rpb25zQWZ0ZXIubWFwKGcyLmZyb21KU09OKSk7CiAgICB9CiAgICBzdGF0aWMgZnJvbVRyYW5zYWN0aW9uKHQ0LCByMykgewogICAgICBsZXQgbjggPSB5NjsKICAgICAgZm9yIChsZXQgbDcgb2YgdDQuc3RhcnRTdGF0ZS5mYWNldChpdDYpKSB7CiAgICAgICAgbGV0IG80ID0gbDcodDQpOwogICAgICAgIG80Lmxlbmd0aCAmJiAobjggPSBuOC5jb25jYXQobzQpKTsKICAgICAgfQogICAgICByZXR1cm4gIW44Lmxlbmd0aCAmJiB0NC5jaGFuZ2VzLmVtcHR5ID8gbnVsbCA6IG5ldyBtOCh0NC5jaGFuZ2VzLmludmVydCh0NC5zdGFydFN0YXRlLmRvYyksIG44LCB2b2lkIDAsIHIzIHx8IHQ0LnN0YXJ0U3RhdGUuc2VsZWN0aW9uLCB5Nik7CiAgICB9CiAgICBzdGF0aWMgc2VsZWN0aW9uKHQ0KSB7CiAgICAgIHJldHVybiBuZXcgbTgodm9pZCAwLCB5Niwgdm9pZCAwLCB2b2lkIDAsIHQ0KTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIE42KGU1LCB0NCwgcjMsIG44KSB7CiAgICBsZXQgbDcgPSB0NCArIDEgPiByMyArIDIwID8gdDQgLSByMyAtIDEgOiAwLCBvNCA9IGU1LnNsaWNlKGw3LCB0NCk7CiAgICByZXR1cm4gbzQucHVzaChuOCksIG80OwogIH0KICBmdW5jdGlvbiBodDUoZTUsIHQ0KSB7CiAgICBsZXQgcjMgPSBbXSwgbjggPSBmYWxzZTsKICAgIHJldHVybiBlNS5pdGVyQ2hhbmdlZFJhbmdlcygobDcsIG80KSA9PiByMy5wdXNoKGw3LCBvNCkpLCB0NC5pdGVyQ2hhbmdlZFJhbmdlcygobDcsIG80LCBjMTcsIHM4KSA9PiB7CiAgICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCByMy5sZW5ndGg7ICkgewogICAgICAgIGxldCB1MTEgPSByM1tpNCsrXSwgZjExID0gcjNbaTQrK107CiAgICAgICAgczggPj0gdTExICYmIGMxNyA8PSBmMTEgJiYgKG44ID0gdHJ1ZSk7CiAgICAgIH0KICAgIH0pLCBuODsKICB9CiAgZnVuY3Rpb24gZHQzKGU1LCB0NCkgewogICAgcmV0dXJuIGU1LnJhbmdlcy5sZW5ndGggPT0gdDQucmFuZ2VzLmxlbmd0aCAmJiBlNS5yYW5nZXMuZmlsdGVyKChyMywgbjgpID0+IHIzLmVtcHR5ICE9IHQ0LnJhbmdlc1tuOF0uZW1wdHkpLmxlbmd0aCA9PT0gMDsKICB9CiAgZnVuY3Rpb24gQmU1KGU1LCB0NCkgewogICAgcmV0dXJuIGU1Lmxlbmd0aCA/IHQ0Lmxlbmd0aCA/IGU1LmNvbmNhdCh0NCkgOiBlNSA6IHQ0OwogIH0KICB2YXIgeTYgPSBbXTsKICB2YXIgbXQzID0gMjAwOwogIGZ1bmN0aW9uIFNlOChlNSwgdDQpIHsKICAgIGlmIChlNS5sZW5ndGgpIHsKICAgICAgbGV0IHIzID0gZTVbZTUubGVuZ3RoIC0gMV0sIG44ID0gcjMuc2VsZWN0aW9uc0FmdGVyLnNsaWNlKE1hdGgubWF4KDAsIHIzLnNlbGVjdGlvbnNBZnRlci5sZW5ndGggLSBtdDMpKTsKICAgICAgcmV0dXJuIG44Lmxlbmd0aCAmJiBuOFtuOC5sZW5ndGggLSAxXS5lcSh0NCkgPyBlNSA6IChuOC5wdXNoKHQ0KSwgTjYoZTUsIGU1Lmxlbmd0aCAtIDEsIDFlOSwgcjMuc2V0U2VsQWZ0ZXIobjgpKSk7CiAgICB9IGVsc2UKICAgICAgcmV0dXJuIFttOC5zZWxlY3Rpb24oW3Q0XSldOwogIH0KICBmdW5jdGlvbiBwdDUoZTUpIHsKICAgIGxldCB0NCA9IGU1W2U1Lmxlbmd0aCAtIDFdLCByMyA9IGU1LnNsaWNlKCk7CiAgICByZXR1cm4gcjNbZTUubGVuZ3RoIC0gMV0gPSB0NC5zZXRTZWxBZnRlcih0NC5zZWxlY3Rpb25zQWZ0ZXIuc2xpY2UoMCwgdDQuc2VsZWN0aW9uc0FmdGVyLmxlbmd0aCAtIDEpKSwgcjM7CiAgfQogIGZ1bmN0aW9uIFc2KGU1LCB0NCkgewogICAgaWYgKCFlNS5sZW5ndGgpCiAgICAgIHJldHVybiBlNTsKICAgIGxldCByMyA9IGU1Lmxlbmd0aCwgbjggPSB5NjsKICAgIGZvciAoOyByMzsgKSB7CiAgICAgIGxldCBsNyA9IGd0NChlNVtyMyAtIDFdLCB0NCwgbjgpOwogICAgICBpZiAobDcuY2hhbmdlcyAmJiAhbDcuY2hhbmdlcy5lbXB0eSB8fCBsNy5lZmZlY3RzLmxlbmd0aCkgewogICAgICAgIGxldCBvNCA9IGU1LnNsaWNlKDAsIHIzKTsKICAgICAgICByZXR1cm4gbzRbcjMgLSAxXSA9IGw3LCBvNDsKICAgICAgfSBlbHNlCiAgICAgICAgdDQgPSBsNy5tYXBwZWQsIHIzLS0sIG44ID0gbDcuc2VsZWN0aW9uc0FmdGVyOwogICAgfQogICAgcmV0dXJuIG44Lmxlbmd0aCA/IFttOC5zZWxlY3Rpb24objgpXSA6IHk2OwogIH0KICBmdW5jdGlvbiBndDQoZTUsIHQ0LCByMykgewogICAgbGV0IG44ID0gQmU1KGU1LnNlbGVjdGlvbnNBZnRlci5sZW5ndGggPyBlNS5zZWxlY3Rpb25zQWZ0ZXIubWFwKChzOCkgPT4gczgubWFwKHQ0KSkgOiB5NiwgcjMpOwogICAgaWYgKCFlNS5jaGFuZ2VzKQogICAgICByZXR1cm4gbTguc2VsZWN0aW9uKG44KTsKICAgIGxldCBsNyA9IGU1LmNoYW5nZXMubWFwKHQ0KSwgbzQgPSB0NC5tYXBEZXNjKGU1LmNoYW5nZXMsIHRydWUpLCBjMTcgPSBlNS5tYXBwZWQgPyBlNS5tYXBwZWQuY29tcG9zZURlc2MobzQpIDogbzQ7CiAgICByZXR1cm4gbmV3IG04KGw3LCB5Lm1hcEVmZmVjdHMoZTUuZWZmZWN0cywgdDQpLCBjMTcsIGU1LnN0YXJ0U2VsZWN0aW9uLm1hcChvNCksIG44KTsKICB9CiAgdmFyIHl0MyA9IC9eKGlucHV0XC50eXBlfGRlbGV0ZSkoJHxcLikvOwogIHZhciBrNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCByMywgbjggPSAwLCBsNyA9IHZvaWQgMCkgewogICAgICB0aGlzLmRvbmUgPSB0NCwgdGhpcy51bmRvbmUgPSByMywgdGhpcy5wcmV2VGltZSA9IG44LCB0aGlzLnByZXZVc2VyRXZlbnQgPSBsNzsKICAgIH0KICAgIGlzb2xhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLnByZXZUaW1lID8gbmV3IGs0KHRoaXMuZG9uZSwgdGhpcy51bmRvbmUpIDogdGhpczsKICAgIH0KICAgIGFkZENoYW5nZXModDQsIHIzLCBuOCwgbDcsIG80KSB7CiAgICAgIGxldCBjMTcgPSB0aGlzLmRvbmUsIHM4ID0gYzE3W2MxNy5sZW5ndGggLSAxXTsKICAgICAgcmV0dXJuIHM4ICYmIHM4LmNoYW5nZXMgJiYgIXM4LmNoYW5nZXMuZW1wdHkgJiYgdDQuY2hhbmdlcyAmJiAoIW44IHx8IHl0My50ZXN0KG44KSkgJiYgKCFzOC5zZWxlY3Rpb25zQWZ0ZXIubGVuZ3RoICYmIHIzIC0gdGhpcy5wcmV2VGltZSA8IGw3ICYmIGh0NShzOC5jaGFuZ2VzLCB0NC5jaGFuZ2VzKSB8fCBuOCA9PSAiaW5wdXQudHlwZS5jb21wb3NlIikgPyBjMTcgPSBONihjMTcsIGMxNy5sZW5ndGggLSAxLCBvNCwgbmV3IG04KHQ0LmNoYW5nZXMuY29tcG9zZShzOC5jaGFuZ2VzKSwgQmU1KHQ0LmVmZmVjdHMsIHM4LmVmZmVjdHMpLCBzOC5tYXBwZWQsIHM4LnN0YXJ0U2VsZWN0aW9uLCB5NikpIDogYzE3ID0gTjYoYzE3LCBjMTcubGVuZ3RoLCBvNCwgdDQpLCBuZXcgazQoYzE3LCB5NiwgcjMsIG44KTsKICAgIH0KICAgIGFkZFNlbGVjdGlvbih0NCwgcjMsIG44LCBsNykgewogICAgICBsZXQgbzQgPSB0aGlzLmRvbmUubGVuZ3RoID8gdGhpcy5kb25lW3RoaXMuZG9uZS5sZW5ndGggLSAxXS5zZWxlY3Rpb25zQWZ0ZXIgOiB5NjsKICAgICAgcmV0dXJuIG80Lmxlbmd0aCA+IDAgJiYgcjMgLSB0aGlzLnByZXZUaW1lIDwgbDcgJiYgbjggPT0gdGhpcy5wcmV2VXNlckV2ZW50ICYmIG44ICYmIC9ec2VsZWN0KCR8XC4pLy50ZXN0KG44KSAmJiBkdDMobzRbbzQubGVuZ3RoIC0gMV0sIHQ0KSA/IHRoaXMgOiBuZXcgazQoU2U4KHRoaXMuZG9uZSwgdDQpLCB0aGlzLnVuZG9uZSwgcjMsIG44KTsKICAgIH0KICAgIGFkZE1hcHBpbmcodDQpIHsKICAgICAgcmV0dXJuIG5ldyBrNChXNih0aGlzLmRvbmUsIHQ0KSwgVzYodGhpcy51bmRvbmUsIHQ0KSwgdGhpcy5wcmV2VGltZSwgdGhpcy5wcmV2VXNlckV2ZW50KTsKICAgIH0KICAgIHBvcCh0NCwgcjMsIG44KSB7CiAgICAgIGxldCBsNyA9IHQ0ID09IDAgPyB0aGlzLmRvbmUgOiB0aGlzLnVuZG9uZTsKICAgICAgaWYgKGw3Lmxlbmd0aCA9PSAwKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBsZXQgbzQgPSBsN1tsNy5sZW5ndGggLSAxXTsKICAgICAgaWYgKG44ICYmIG80LnNlbGVjdGlvbnNBZnRlci5sZW5ndGgpCiAgICAgICAgcmV0dXJuIHIzLnVwZGF0ZSh7IHNlbGVjdGlvbjogbzQuc2VsZWN0aW9uc0FmdGVyW280LnNlbGVjdGlvbnNBZnRlci5sZW5ndGggLSAxXSwgYW5ub3RhdGlvbnM6IFg5Lm9mKHsgc2lkZTogdDQsIHJlc3Q6IHB0NShsNykgfSksIHVzZXJFdmVudDogdDQgPT0gMCA/ICJzZWxlY3QudW5kbyIgOiAic2VsZWN0LnJlZG8iLCBzY3JvbGxJbnRvVmlldzogdHJ1ZSB9KTsKICAgICAgaWYgKG80LmNoYW5nZXMpIHsKICAgICAgICBsZXQgYzE3ID0gbDcubGVuZ3RoID09IDEgPyB5NiA6IGw3LnNsaWNlKDAsIGw3Lmxlbmd0aCAtIDEpOwogICAgICAgIHJldHVybiBvNC5tYXBwZWQgJiYgKGMxNyA9IFc2KGMxNywgbzQubWFwcGVkKSksIHIzLnVwZGF0ZSh7IGNoYW5nZXM6IG80LmNoYW5nZXMsIHNlbGVjdGlvbjogbzQuc3RhcnRTZWxlY3Rpb24sIGVmZmVjdHM6IG80LmVmZmVjdHMsIGFubm90YXRpb25zOiBYOS5vZih7IHNpZGU6IHQ0LCByZXN0OiBjMTcgfSksIGZpbHRlcjogZmFsc2UsIHVzZXJFdmVudDogdDQgPT0gMCA/ICJ1bmRvIiA6ICJyZWRvIiwgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSk7CiAgICAgIH0gZWxzZQogICAgICAgIHJldHVybiBudWxsOwogICAgfQogIH07CiAgazQuZW1wdHkgPSBuZXcgazQoeTYsIHk2KTsKICB2YXIga24yID0gW3sga2V5OiAiTW9kLXoiLCBydW46IGtlOCwgcHJldmVudERlZmF1bHQ6IHRydWUgfSwgeyBrZXk6ICJNb2QteSIsIG1hYzogIk1vZC1TaGlmdC16IiwgcnVuOiBZMTEsIHByZXZlbnREZWZhdWx0OiB0cnVlIH0sIHsgbGludXg6ICJDdHJsLVNoaWZ0LXoiLCBydW46IFkxMSwgcHJldmVudERlZmF1bHQ6IHRydWUgfSwgeyBrZXk6ICJNb2QtdSIsIHJ1bjogZnQyLCBwcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCB7IGtleTogIkFsdC11IiwgbWFjOiAiTW9kLVNoaWZ0LXUiLCBydW46IGF0MywgcHJldmVudERlZmF1bHQ6IHRydWUgfV07CiAgZnVuY3Rpb24geDUoZTUsIHQ0KSB7CiAgICByZXR1cm4gZzIuY3JlYXRlKGU1LnJhbmdlcy5tYXAodDQpLCBlNS5tYWluSW5kZXgpOwogIH0KICBmdW5jdGlvbiBCOShlNSwgdDQpIHsKICAgIHJldHVybiBlNS51cGRhdGUoeyBzZWxlY3Rpb246IHQ0LCBzY3JvbGxJbnRvVmlldzogdHJ1ZSwgdXNlckV2ZW50OiAic2VsZWN0IiB9KTsKICB9CiAgZnVuY3Rpb24gQTgoeyBzdGF0ZTogZTUsIGRpc3BhdGNoOiB0NCB9LCByMykgewogICAgbGV0IG44ID0geDUoZTUuc2VsZWN0aW9uLCByMyk7CiAgICByZXR1cm4gbjguZXEoZTUuc2VsZWN0aW9uKSA/IGZhbHNlIDogKHQ0KEI5KGU1LCBuOCkpLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gYjcoZTUsIHQ0KSB7CiAgICByZXR1cm4gZzIuY3Vyc29yKHQ0ID8gZTUudG8gOiBlNS5mcm9tKTsKICB9CiAgZnVuY3Rpb24gUDEwKGU1LCB0NCkgewogICAgcmV0dXJuIEE4KGU1LCAocjMpID0+IHIzLmVtcHR5ID8gZTUubW92ZUJ5Q2hhcihyMywgdDQpIDogYjcocjMsIHQ0KSk7CiAgfQogIGZ1bmN0aW9uIHA1KGU1KSB7CiAgICByZXR1cm4gZTUudGV4dERpcmVjdGlvbkF0KGU1LnN0YXRlLnNlbGVjdGlvbi5tYWluLmhlYWQpID09IFIyLkxUUjsKICB9CiAgdmFyIENlMTAgPSAoZTUpID0+IFAxMChlNSwgIXA1KGU1KSk7CiAgdmFyIERlNiA9IChlNSkgPT4gUDEwKGU1LCBwNShlNSkpOwogIGZ1bmN0aW9uIHY0KGU1LCB0NCkgewogICAgcmV0dXJuIEE4KGU1LCAocjMpID0+IHIzLmVtcHR5ID8gZTUubW92ZUJ5R3JvdXAocjMsIHQ0KSA6IGI3KHIzLCB0NCkpOwogIH0KICB2YXIga3QyID0gKGU1KSA9PiB2NChlNSwgIXA1KGU1KSk7CiAgdmFyIEF0NCA9IChlNSkgPT4gdjQoZTUsIHA1KGU1KSk7CiAgZnVuY3Rpb24gQnQzKGU1LCB0NCwgcjMpIHsKICAgIGlmICh0NC50eXBlLnByb3AocjMpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGxldCBuOCA9IHQ0LnRvIC0gdDQuZnJvbTsKICAgIHJldHVybiBuOCAmJiAobjggPiAyIHx8IC9bXlxzLC47Ol0vLnRlc3QoZTUuc2xpY2VEb2ModDQuZnJvbSwgdDQudG8pKSkgfHwgdDQuZmlyc3RDaGlsZDsKICB9CiAgZnVuY3Rpb24gSjMoZTUsIHQ0LCByMykgewogICAgbGV0IG44ID0gbTcoZTUpLnJlc29sdmVJbm5lcih0NC5oZWFkKSwgbDcgPSByMyA/IHc1LmNsb3NlZEJ5IDogdzUub3BlbmVkQnk7CiAgICBmb3IgKGxldCBpNCA9IHQ0LmhlYWQ7IDsgKSB7CiAgICAgIGxldCB1MTEgPSByMyA/IG44LmNoaWxkQWZ0ZXIoaTQpIDogbjguY2hpbGRCZWZvcmUoaTQpOwogICAgICBpZiAoIXUxMSkKICAgICAgICBicmVhazsKICAgICAgQnQzKGU1LCB1MTEsIGw3KSA/IG44ID0gdTExIDogaTQgPSByMyA/IHUxMS50byA6IHUxMS5mcm9tOwogICAgfQogICAgbGV0IG80ID0gbjgudHlwZS5wcm9wKGw3KSwgYzE3LCBzODsKICAgIHJldHVybiBvNCAmJiAoYzE3ID0gcjMgPyBVNyhlNSwgbjguZnJvbSwgMSkgOiBVNyhlNSwgbjgudG8sIC0xKSkgJiYgYzE3Lm1hdGNoZWQgPyBzOCA9IHIzID8gYzE3LmVuZC50byA6IGMxNy5lbmQuZnJvbSA6IHM4ID0gcjMgPyBuOC50byA6IG44LmZyb20sIGcyLmN1cnNvcihzOCwgcjMgPyAtMSA6IDEpOwogIH0KICB2YXIgU3Q0ID0gKGU1KSA9PiBBOChlNSwgKHQ0KSA9PiBKMyhlNS5zdGF0ZSwgdDQsICFwNShlNSkpKTsKICB2YXIgQ3Q0ID0gKGU1KSA9PiBBOChlNSwgKHQ0KSA9PiBKMyhlNS5zdGF0ZSwgdDQsIHA1KGU1KSkpOwogIGZ1bmN0aW9uIE1lNihlNSwgdDQpIHsKICAgIHJldHVybiBBOChlNSwgKHIzKSA9PiB7CiAgICAgIGlmICghcjMuZW1wdHkpCiAgICAgICAgcmV0dXJuIGI3KHIzLCB0NCk7CiAgICAgIGxldCBuOCA9IGU1Lm1vdmVWZXJ0aWNhbGx5KHIzLCB0NCk7CiAgICAgIHJldHVybiBuOC5oZWFkICE9IHIzLmhlYWQgPyBuOCA6IGU1Lm1vdmVUb0xpbmVCb3VuZGFyeShyMywgdDQpOwogICAgfSk7CiAgfQogIHZhciBPZTYgPSAoZTUpID0+IE1lNihlNSwgZmFsc2UpOwogIHZhciBFZTQgPSAoZTUpID0+IE1lNihlNSwgdHJ1ZSk7CiAgZnVuY3Rpb24gYmU2KGU1KSB7CiAgICByZXR1cm4gTWF0aC5tYXgoZTUuZGVmYXVsdExpbmVIZWlnaHQsIE1hdGgubWluKGU1LmRvbS5jbGllbnRIZWlnaHQsIGlubmVySGVpZ2h0KSAtIDUpOwogIH0KICBmdW5jdGlvbiBUZTcoZTUsIHQ0KSB7CiAgICBsZXQgeyBzdGF0ZTogcjMgfSA9IGU1LCBuOCA9IHg1KHIzLnNlbGVjdGlvbiwgKHM4KSA9PiBzOC5lbXB0eSA/IGU1Lm1vdmVWZXJ0aWNhbGx5KHM4LCB0NCwgYmU2KGU1KSkgOiBiNyhzOCwgdDQpKTsKICAgIGlmIChuOC5lcShyMy5zZWxlY3Rpb24pKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgbDcgPSBlNS5jb29yZHNBdFBvcyhyMy5zZWxlY3Rpb24ubWFpbi5oZWFkKSwgbzQgPSBlNS5zY3JvbGxET00uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGMxNzsKICAgIHJldHVybiBsNyAmJiBsNy50b3AgPiBvNC50b3AgJiYgbDcuYm90dG9tIDwgbzQuYm90dG9tICYmIGw3LnRvcCAtIG80LnRvcCA8PSBlNS5zY3JvbGxET00uc2Nyb2xsSGVpZ2h0IC0gZTUuc2Nyb2xsRE9NLnNjcm9sbFRvcCAtIGU1LnNjcm9sbERPTS5jbGllbnRIZWlnaHQgJiYgKGMxNyA9IE0yLnNjcm9sbEludG9WaWV3KG44Lm1haW4uaGVhZCwgeyB5OiAic3RhcnQiLCB5TWFyZ2luOiBsNy50b3AgLSBvNC50b3AgfSkpLCBlNS5kaXNwYXRjaChCOShyMywgbjgpLCB7IGVmZmVjdHM6IGMxNyB9KSwgdHJ1ZTsKICB9CiAgdmFyIG9lNSA9IChlNSkgPT4gVGU3KGU1LCBmYWxzZSk7CiAgdmFyIFo3ID0gKGU1KSA9PiBUZTcoZTUsIHRydWUpOwogIGZ1bmN0aW9uIEM0KGU1LCB0NCwgcjMpIHsKICAgIGxldCBuOCA9IGU1LmxpbmVCbG9ja0F0KHQ0LmhlYWQpLCBsNyA9IGU1Lm1vdmVUb0xpbmVCb3VuZGFyeSh0NCwgcjMpOwogICAgaWYgKGw3LmhlYWQgPT0gdDQuaGVhZCAmJiBsNy5oZWFkICE9IChyMyA/IG44LnRvIDogbjguZnJvbSkgJiYgKGw3ID0gZTUubW92ZVRvTGluZUJvdW5kYXJ5KHQ0LCByMywgZmFsc2UpKSwgIXIzICYmIGw3LmhlYWQgPT0gbjguZnJvbSAmJiBuOC5sZW5ndGgpIHsKICAgICAgbGV0IG80ID0gL15ccyovLmV4ZWMoZTUuc3RhdGUuc2xpY2VEb2MobjguZnJvbSwgTWF0aC5taW4objguZnJvbSArIDEwMCwgbjgudG8pKSlbMF0ubGVuZ3RoOwogICAgICBvNCAmJiB0NC5oZWFkICE9IG44LmZyb20gKyBvNCAmJiAobDcgPSBnMi5jdXJzb3IobjguZnJvbSArIG80KSk7CiAgICB9CiAgICByZXR1cm4gbDc7CiAgfQogIHZhciBEdDQgPSAoZTUpID0+IEE4KGU1LCAodDQpID0+IEM0KGU1LCB0NCwgdHJ1ZSkpOwogIHZhciBMdDQgPSAoZTUpID0+IEE4KGU1LCAodDQpID0+IEM0KGU1LCB0NCwgZmFsc2UpKTsKICB2YXIgeHQ1ID0gKGU1KSA9PiBBOChlNSwgKHQ0KSA9PiBDNChlNSwgdDQsICFwNShlNSkpKTsKICB2YXIgTXQgPSAoZTUpID0+IEE4KGU1LCAodDQpID0+IEM0KGU1LCB0NCwgcDUoZTUpKSk7CiAgdmFyIE90NSA9IChlNSkgPT4gQTgoZTUsICh0NCkgPT4gZzIuY3Vyc29yKGU1LmxpbmVCbG9ja0F0KHQ0LmhlYWQpLmZyb20sIDEpKTsKICB2YXIgRXQ0ID0gKGU1KSA9PiBBOChlNSwgKHQ0KSA9PiBnMi5jdXJzb3IoZTUubGluZUJsb2NrQXQodDQuaGVhZCkudG8sIC0xKSk7CiAgZnVuY3Rpb24gUmU3KGU1LCB0NCwgcjMpIHsKICAgIGxldCBuOCA9IGZhbHNlLCBsNyA9IHg1KGU1LnNlbGVjdGlvbiwgKG80KSA9PiB7CiAgICAgIGxldCBjMTcgPSBVNyhlNSwgbzQuaGVhZCwgLTEpIHx8IFU3KGU1LCBvNC5oZWFkLCAxKSB8fCBvNC5oZWFkID4gMCAmJiBVNyhlNSwgbzQuaGVhZCAtIDEsIDEpIHx8IG80LmhlYWQgPCBlNS5kb2MubGVuZ3RoICYmIFU3KGU1LCBvNC5oZWFkICsgMSwgLTEpOwogICAgICBpZiAoIWMxNyB8fCAhYzE3LmVuZCkKICAgICAgICByZXR1cm4gbzQ7CiAgICAgIG44ID0gdHJ1ZTsKICAgICAgbGV0IHM4ID0gYzE3LnN0YXJ0LmZyb20gPT0gbzQuaGVhZCA/IGMxNy5lbmQudG8gOiBjMTcuZW5kLmZyb207CiAgICAgIHJldHVybiByMyA/IGcyLnJhbmdlKG80LmFuY2hvciwgczgpIDogZzIuY3Vyc29yKHM4KTsKICAgIH0pOwogICAgcmV0dXJuIG44ID8gKHQ0KEI5KGU1LCBsNykpLCB0cnVlKSA6IGZhbHNlOwogIH0KICB2YXIgYnQyID0gKHsgc3RhdGU6IGU1LCBkaXNwYXRjaDogdDQgfSkgPT4gUmU3KGU1LCB0NCwgZmFsc2UpOwogIGZ1bmN0aW9uIGc0KGU1LCB0NCkgewogICAgbGV0IHIzID0geDUoZTUuc3RhdGUuc2VsZWN0aW9uLCAobjgpID0+IHsKICAgICAgbGV0IGw3ID0gdDQobjgpOwogICAgICByZXR1cm4gZzIucmFuZ2UobjguYW5jaG9yLCBsNy5oZWFkLCBsNy5nb2FsQ29sdW1uKTsKICAgIH0pOwogICAgcmV0dXJuIHIzLmVxKGU1LnN0YXRlLnNlbGVjdGlvbikgPyBmYWxzZSA6IChlNS5kaXNwYXRjaChCOShlNS5zdGF0ZSwgcjMpKSwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIEY3KGU1LCB0NCkgewogICAgcmV0dXJuIGc0KGU1LCAocjMpID0+IGU1Lm1vdmVCeUNoYXIocjMsIHQ0KSk7CiAgfQogIHZhciBJZTYgPSAoZTUpID0+IEY3KGU1LCAhcDUoZTUpKTsKICB2YXIgVWUzID0gKGU1KSA9PiBGNyhlNSwgcDUoZTUpKTsKICBmdW5jdGlvbiB6OShlNSwgdDQpIHsKICAgIHJldHVybiBnNChlNSwgKHIzKSA9PiBlNS5tb3ZlQnlHcm91cChyMywgdDQpKTsKICB9CiAgdmFyIFR0NCA9IChlNSkgPT4gejkoZTUsICFwNShlNSkpOwogIHZhciBSdDUgPSAoZTUpID0+IHo5KGU1LCBwNShlNSkpOwogIHZhciBJdDQgPSAoZTUpID0+IGc0KGU1LCAodDQpID0+IEozKGU1LnN0YXRlLCB0NCwgIXA1KGU1KSkpOwogIHZhciBVdDQgPSAoZTUpID0+IGc0KGU1LCAodDQpID0+IEozKGU1LnN0YXRlLCB0NCwgcDUoZTUpKSk7CiAgZnVuY3Rpb24gd2U2KGU1LCB0NCkgewogICAgcmV0dXJuIGc0KGU1LCAocjMpID0+IGU1Lm1vdmVWZXJ0aWNhbGx5KHIzLCB0NCkpOwogIH0KICB2YXIgR2U0ID0gKGU1KSA9PiB3ZTYoZTUsIGZhbHNlKTsKICB2YXIgVmUzID0gKGU1KSA9PiB3ZTYoZTUsIHRydWUpOwogIGZ1bmN0aW9uIFBlOChlNSwgdDQpIHsKICAgIHJldHVybiBnNChlNSwgKHIzKSA9PiBlNS5tb3ZlVmVydGljYWxseShyMywgdDQsIGJlNihlNSkpKTsKICB9CiAgdmFyIGxlOCA9IChlNSkgPT4gUGU4KGU1LCBmYWxzZSk7CiAgdmFyIGNlNyA9IChlNSkgPT4gUGU4KGU1LCB0cnVlKTsKICB2YXIgTnQyID0gKGU1KSA9PiBnNChlNSwgKHQ0KSA9PiBDNChlNSwgdDQsIHRydWUpKTsKICB2YXIgd3QzID0gKGU1KSA9PiBnNChlNSwgKHQ0KSA9PiBDNChlNSwgdDQsIGZhbHNlKSk7CiAgdmFyIEd0ID0gKGU1KSA9PiBnNChlNSwgKHQ0KSA9PiBDNChlNSwgdDQsICFwNShlNSkpKTsKICB2YXIgVnQ1ID0gKGU1KSA9PiBnNChlNSwgKHQ0KSA9PiBDNChlNSwgdDQsIHA1KGU1KSkpOwogIHZhciBQdDUgPSAoZTUpID0+IGc0KGU1LCAodDQpID0+IGcyLmN1cnNvcihlNS5saW5lQmxvY2tBdCh0NC5oZWFkKS5mcm9tKSk7CiAgdmFyIHZ0MyA9IChlNSkgPT4gZzQoZTUsICh0NCkgPT4gZzIuY3Vyc29yKGU1LmxpbmVCbG9ja0F0KHQ0LmhlYWQpLnRvKSk7CiAgdmFyIHNlOCA9ICh7IHN0YXRlOiBlNSwgZGlzcGF0Y2g6IHQ0IH0pID0+ICh0NChCOShlNSwgeyBhbmNob3I6IDAgfSkpLCB0cnVlKTsKICB2YXIgaWU3ID0gKHsgc3RhdGU6IGU1LCBkaXNwYXRjaDogdDQgfSkgPT4gKHQ0KEI5KGU1LCB7IGFuY2hvcjogZTUuZG9jLmxlbmd0aCB9KSksIHRydWUpOwogIHZhciB1ZTggPSAoeyBzdGF0ZTogZTUsIGRpc3BhdGNoOiB0NCB9KSA9PiAodDQoQjkoZTUsIHsgYW5jaG9yOiBlNS5zZWxlY3Rpb24ubWFpbi5hbmNob3IsIGhlYWQ6IDAgfSkpLCB0cnVlKTsKICB2YXIgZmU2ID0gKHsgc3RhdGU6IGU1LCBkaXNwYXRjaDogdDQgfSkgPT4gKHQ0KEI5KGU1LCB7IGFuY2hvcjogZTUuc2VsZWN0aW9uLm1haW4uYW5jaG9yLCBoZWFkOiBlNS5kb2MubGVuZ3RoIH0pKSwgdHJ1ZSk7CiAgdmFyIEp0MiA9ICh7IHN0YXRlOiBlNSwgZGlzcGF0Y2g6IHQ0IH0pID0+ICh0NChlNS51cGRhdGUoeyBzZWxlY3Rpb246IHsgYW5jaG9yOiAwLCBoZWFkOiBlNS5kb2MubGVuZ3RoIH0sIHVzZXJFdmVudDogInNlbGVjdCIgfSkpLCB0cnVlKTsKICB2YXIgRnQyID0gKHsgc3RhdGU6IGU1LCBkaXNwYXRjaDogdDQgfSkgPT4gewogICAgbGV0IHIzID0gJDkoZTUpLm1hcCgoeyBmcm9tOiBuOCwgdG86IGw3IH0pID0+IGcyLnJhbmdlKG44LCBNYXRoLm1pbihsNyArIDEsIGU1LmRvYy5sZW5ndGgpKSk7CiAgICByZXR1cm4gdDQoZTUudXBkYXRlKHsgc2VsZWN0aW9uOiBnMi5jcmVhdGUocjMpLCB1c2VyRXZlbnQ6ICJzZWxlY3QiIH0pKSwgdHJ1ZTsKICB9OwogIHZhciB6dDQgPSAoeyBzdGF0ZTogZTUsIGRpc3BhdGNoOiB0NCB9KSA9PiB7CiAgICBsZXQgcjMgPSB4NShlNS5zZWxlY3Rpb24sIChuOCkgPT4gewogICAgICB2YXIgbDc7CiAgICAgIGxldCBvNCA9IG03KGU1KS5yZXNvbHZlSW5uZXIobjguaGVhZCwgMSk7CiAgICAgIGZvciAoOyAhKG80LmZyb20gPCBuOC5mcm9tICYmIG80LnRvID49IG44LnRvIHx8IG80LnRvID4gbjgudG8gJiYgbzQuZnJvbSA8PSBuOC5mcm9tIHx8ICEoISgobDcgPSBvNC5wYXJlbnQpID09PSBudWxsIHx8IGw3ID09PSB2b2lkIDApICYmIGw3LnBhcmVudCkpOyApCiAgICAgICAgbzQgPSBvNC5wYXJlbnQ7CiAgICAgIHJldHVybiBnMi5yYW5nZShvNC50bywgbzQuZnJvbSk7CiAgICB9KTsKICAgIHJldHVybiB0NChCOShlNSwgcjMpKSwgdHJ1ZTsKICB9OwogIHZhciBxdDIgPSAoeyBzdGF0ZTogZTUsIGRpc3BhdGNoOiB0NCB9KSA9PiB7CiAgICBsZXQgcjMgPSBlNS5zZWxlY3Rpb24sIG44ID0gbnVsbDsKICAgIHJldHVybiByMy5yYW5nZXMubGVuZ3RoID4gMSA/IG44ID0gZzIuY3JlYXRlKFtyMy5tYWluXSkgOiByMy5tYWluLmVtcHR5IHx8IChuOCA9IGcyLmNyZWF0ZShbZzIuY3Vyc29yKHIzLm1haW4uaGVhZCldKSksIG44ID8gKHQ0KEI5KGU1LCBuOCkpLCB0cnVlKSA6IGZhbHNlOwogIH07CiAgZnVuY3Rpb24gcTYoZTUsIHQ0KSB7CiAgICBpZiAoZTUuc3RhdGUucmVhZE9ubHkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCByMyA9ICJkZWxldGUuc2VsZWN0aW9uIiwgeyBzdGF0ZTogbjggfSA9IGU1LCBsNyA9IG44LmNoYW5nZUJ5UmFuZ2UoKG80KSA9PiB7CiAgICAgIGxldCB7IGZyb206IGMxNywgdG86IHM4IH0gPSBvNDsKICAgICAgaWYgKGMxNyA9PSBzOCkgewogICAgICAgIGxldCBpNCA9IHQ0KGMxNyk7CiAgICAgICAgaTQgPCBjMTcgPyAocjMgPSAiZGVsZXRlLmJhY2t3YXJkIiwgaTQgPSBSOChlNSwgaTQsIGZhbHNlKSkgOiBpNCA+IGMxNyAmJiAocjMgPSAiZGVsZXRlLmZvcndhcmQiLCBpNCA9IFI4KGU1LCBpNCwgdHJ1ZSkpLCBjMTcgPSBNYXRoLm1pbihjMTcsIGk0KSwgczggPSBNYXRoLm1heChzOCwgaTQpOwogICAgICB9IGVsc2UKICAgICAgICBjMTcgPSBSOChlNSwgYzE3LCBmYWxzZSksIHM4ID0gUjgoZTUsIGMxNywgdHJ1ZSk7CiAgICAgIHJldHVybiBjMTcgPT0gczggPyB7IHJhbmdlOiBvNCB9IDogeyBjaGFuZ2VzOiB7IGZyb206IGMxNywgdG86IHM4IH0sIHJhbmdlOiBnMi5jdXJzb3IoYzE3KSB9OwogICAgfSk7CiAgICByZXR1cm4gbDcuY2hhbmdlcy5lbXB0eSA/IGZhbHNlIDogKGU1LmRpc3BhdGNoKG44LnVwZGF0ZShsNywgeyBzY3JvbGxJbnRvVmlldzogdHJ1ZSwgdXNlckV2ZW50OiByMywgZWZmZWN0czogcjMgPT0gImRlbGV0ZS5zZWxlY3Rpb24iID8gTTIuYW5ub3VuY2Uub2YobjgucGhyYXNlKCJTZWxlY3Rpb24gZGVsZXRlZCIpKSA6IHZvaWQgMCB9KSksIHRydWUpOwogIH0KICBmdW5jdGlvbiBSOChlNSwgdDQsIHIzKSB7CiAgICBpZiAoZTUgaW5zdGFuY2VvZiBNMikKICAgICAgZm9yIChsZXQgbjggb2YgZTUuc3RhdGUuZmFjZXQoTTIuYXRvbWljUmFuZ2VzKS5tYXAoKGw3KSA9PiBsNyhlNSkpKQogICAgICAgIG44LmJldHdlZW4odDQsIHQ0LCAobDcsIG80KSA9PiB7CiAgICAgICAgICBsNyA8IHQ0ICYmIG80ID4gdDQgJiYgKHQ0ID0gcjMgPyBvNCA6IGw3KTsKICAgICAgICB9KTsKICAgIHJldHVybiB0NDsKICB9CiAgdmFyIHZlNyA9IChlNSwgdDQpID0+IHE2KGU1LCAocjMpID0+IHsKICAgIGxldCB7IHN0YXRlOiBuOCB9ID0gZTUsIGw3ID0gbjguZG9jLmxpbmVBdChyMyksIG80LCBjMTc7CiAgICBpZiAoIXQ0ICYmIHIzID4gbDcuZnJvbSAmJiByMyA8IGw3LmZyb20gKyAyMDAgJiYgIS9bXiBcdF0vLnRlc3QobzQgPSBsNy50ZXh0LnNsaWNlKDAsIHIzIC0gbDcuZnJvbSkpKSB7CiAgICAgIGlmIChvNFtvNC5sZW5ndGggLSAxXSA9PSAiCSIpCiAgICAgICAgcmV0dXJuIHIzIC0gMTsKICAgICAgbGV0IHM4ID0gb3QobzQsIG44LnRhYlNpemUpLCBpNCA9IHM4ICUgJDgobjgpIHx8ICQ4KG44KTsKICAgICAgZm9yIChsZXQgdTExID0gMDsgdTExIDwgaTQgJiYgbzRbbzQubGVuZ3RoIC0gMSAtIHUxMV0gPT0gIiAiOyB1MTErKykKICAgICAgICByMy0tOwogICAgICBjMTcgPSByMzsKICAgIH0gZWxzZQogICAgICBjMTcgPSBpZTIobDcudGV4dCwgcjMgLSBsNy5mcm9tLCB0NCwgdDQpICsgbDcuZnJvbSwgYzE3ID09IHIzICYmIGw3Lm51bWJlciAhPSAodDQgPyBuOC5kb2MubGluZXMgOiAxKSAmJiAoYzE3ICs9IHQ0ID8gMSA6IC0xKTsKICAgIHJldHVybiBjMTc7CiAgfSk7CiAgdmFyIF84ID0gKGU1KSA9PiB2ZTcoZTUsIGZhbHNlKTsKICB2YXIgSmU0ID0gKGU1KSA9PiB2ZTcoZTUsIHRydWUpOwogIHZhciBGZTYgPSAoZTUsIHQ0KSA9PiBxNihlNSwgKHIzKSA9PiB7CiAgICBsZXQgbjggPSByMywgeyBzdGF0ZTogbDcgfSA9IGU1LCBvNCA9IGw3LmRvYy5saW5lQXQobjgpLCBjMTcgPSBsNy5jaGFyQ2F0ZWdvcml6ZXIobjgpOwogICAgZm9yIChsZXQgczggPSBudWxsOyA7ICkgewogICAgICBpZiAobjggPT0gKHQ0ID8gbzQudG8gOiBvNC5mcm9tKSkgewogICAgICAgIG44ID09IHIzICYmIG80Lm51bWJlciAhPSAodDQgPyBsNy5kb2MubGluZXMgOiAxKSAmJiAobjggKz0gdDQgPyAxIDogLTEpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGxldCBpNCA9IGllMihvNC50ZXh0LCBuOCAtIG80LmZyb20sIHQ0KSArIG80LmZyb20sIHUxMSA9IG80LnRleHQuc2xpY2UoTWF0aC5taW4objgsIGk0KSAtIG80LmZyb20sIE1hdGgubWF4KG44LCBpNCkgLSBvNC5mcm9tKSwgZjExID0gYzE3KHUxMSk7CiAgICAgIGlmIChzOCAhPSBudWxsICYmIGYxMSAhPSBzOCkKICAgICAgICBicmVhazsKICAgICAgKHUxMSAhPSAiICIgfHwgbjggIT0gcjMpICYmIChzOCA9IGYxMSksIG44ID0gaTQ7CiAgICB9CiAgICByZXR1cm4gbjg7CiAgfSk7CiAgdmFyIHplNCA9IChlNSkgPT4gRmU2KGU1LCBmYWxzZSk7CiAgdmFyICR0ID0gKGU1KSA9PiBGZTYoZTUsIHRydWUpOwogIHZhciBxZTQgPSAoZTUpID0+IHE2KGU1LCAodDQpID0+IHsKICAgIGxldCByMyA9IGU1LmxpbmVCbG9ja0F0KHQ0KS50bzsKICAgIHJldHVybiB0NCA8IHIzID8gcjMgOiBNYXRoLm1pbihlNS5zdGF0ZS5kb2MubGVuZ3RoLCB0NCArIDEpOwogIH0pOwogIHZhciBLdDIgPSAoZTUpID0+IHE2KGU1LCAodDQpID0+IHsKICAgIGxldCByMyA9IGU1LmxpbmVCbG9ja0F0KHQ0KS5mcm9tOwogICAgcmV0dXJuIHQ0ID4gcjMgPyByMyA6IE1hdGgubWF4KDAsIHQ0IC0gMSk7CiAgfSk7CiAgdmFyIFd0NSA9ICh7IHN0YXRlOiBlNSwgZGlzcGF0Y2g6IHQ0IH0pID0+IHsKICAgIGlmIChlNS5yZWFkT25seSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IHIzID0gZTUuY2hhbmdlQnlSYW5nZSgobjgpID0+ICh7IGNoYW5nZXM6IHsgZnJvbTogbjguZnJvbSwgdG86IG44LnRvLCBpbnNlcnQ6IHYub2YoWyIiLCAiIl0pIH0sIHJhbmdlOiBnMi5jdXJzb3IobjguZnJvbSkgfSkpOwogICAgcmV0dXJuIHQ0KGU1LnVwZGF0ZShyMywgeyBzY3JvbGxJbnRvVmlldzogdHJ1ZSwgdXNlckV2ZW50OiAiaW5wdXQiIH0pKSwgdHJ1ZTsKICB9OwogIHZhciBIdDMgPSAoeyBzdGF0ZTogZTUsIGRpc3BhdGNoOiB0NCB9KSA9PiB7CiAgICBpZiAoZTUucmVhZE9ubHkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCByMyA9IGU1LmNoYW5nZUJ5UmFuZ2UoKG44KSA9PiB7CiAgICAgIGlmICghbjguZW1wdHkgfHwgbjguZnJvbSA9PSAwIHx8IG44LmZyb20gPT0gZTUuZG9jLmxlbmd0aCkKICAgICAgICByZXR1cm4geyByYW5nZTogbjggfTsKICAgICAgbGV0IGw3ID0gbjguZnJvbSwgbzQgPSBlNS5kb2MubGluZUF0KGw3KSwgYzE3ID0gbDcgPT0gbzQuZnJvbSA/IGw3IC0gMSA6IGllMihvNC50ZXh0LCBsNyAtIG80LmZyb20sIGZhbHNlKSArIG80LmZyb20sIHM4ID0gbDcgPT0gbzQudG8gPyBsNyArIDEgOiBpZTIobzQudGV4dCwgbDcgLSBvNC5mcm9tLCB0cnVlKSArIG80LmZyb207CiAgICAgIHJldHVybiB7IGNoYW5nZXM6IHsgZnJvbTogYzE3LCB0bzogczgsIGluc2VydDogZTUuZG9jLnNsaWNlKGw3LCBzOCkuYXBwZW5kKGU1LmRvYy5zbGljZShjMTcsIGw3KSkgfSwgcmFuZ2U6IGcyLmN1cnNvcihzOCkgfTsKICAgIH0pOwogICAgcmV0dXJuIHIzLmNoYW5nZXMuZW1wdHkgPyBmYWxzZSA6ICh0NChlNS51cGRhdGUocjMsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUsIHVzZXJFdmVudDogIm1vdmUuY2hhcmFjdGVyIiB9KSksIHRydWUpOwogIH07CiAgZnVuY3Rpb24gJDkoZTUpIHsKICAgIGxldCB0NCA9IFtdLCByMyA9IC0xOwogICAgZm9yIChsZXQgbjggb2YgZTUuc2VsZWN0aW9uLnJhbmdlcykgewogICAgICBsZXQgbDcgPSBlNS5kb2MubGluZUF0KG44LmZyb20pLCBvNCA9IGU1LmRvYy5saW5lQXQobjgudG8pOwogICAgICBpZiAoIW44LmVtcHR5ICYmIG44LnRvID09IG80LmZyb20gJiYgKG80ID0gZTUuZG9jLmxpbmVBdChuOC50byAtIDEpKSwgcjMgPj0gbDcubnVtYmVyKSB7CiAgICAgICAgbGV0IGMxNyA9IHQ0W3Q0Lmxlbmd0aCAtIDFdOwogICAgICAgIGMxNy50byA9IG80LnRvLCBjMTcucmFuZ2VzLnB1c2gobjgpOwogICAgICB9IGVsc2UKICAgICAgICB0NC5wdXNoKHsgZnJvbTogbDcuZnJvbSwgdG86IG80LnRvLCByYW5nZXM6IFtuOF0gfSk7CiAgICAgIHIzID0gbzQubnVtYmVyICsgMTsKICAgIH0KICAgIHJldHVybiB0NDsKICB9CiAgZnVuY3Rpb24gJGU1KGU1LCB0NCwgcjMpIHsKICAgIGlmIChlNS5yZWFkT25seSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IG44ID0gW10sIGw3ID0gW107CiAgICBmb3IgKGxldCBvNCBvZiAkOShlNSkpIHsKICAgICAgaWYgKHIzID8gbzQudG8gPT0gZTUuZG9jLmxlbmd0aCA6IG80LmZyb20gPT0gMCkKICAgICAgICBjb250aW51ZTsKICAgICAgbGV0IGMxNyA9IGU1LmRvYy5saW5lQXQocjMgPyBvNC50byArIDEgOiBvNC5mcm9tIC0gMSksIHM4ID0gYzE3Lmxlbmd0aCArIDE7CiAgICAgIGlmIChyMykgewogICAgICAgIG44LnB1c2goeyBmcm9tOiBvNC50bywgdG86IGMxNy50byB9LCB7IGZyb206IG80LmZyb20sIGluc2VydDogYzE3LnRleHQgKyBlNS5saW5lQnJlYWsgfSk7CiAgICAgICAgZm9yIChsZXQgaTQgb2YgbzQucmFuZ2VzKQogICAgICAgICAgbDcucHVzaChnMi5yYW5nZShNYXRoLm1pbihlNS5kb2MubGVuZ3RoLCBpNC5hbmNob3IgKyBzOCksIE1hdGgubWluKGU1LmRvYy5sZW5ndGgsIGk0LmhlYWQgKyBzOCkpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuOC5wdXNoKHsgZnJvbTogYzE3LmZyb20sIHRvOiBvNC5mcm9tIH0sIHsgZnJvbTogbzQudG8sIGluc2VydDogZTUubGluZUJyZWFrICsgYzE3LnRleHQgfSk7CiAgICAgICAgZm9yIChsZXQgaTQgb2YgbzQucmFuZ2VzKQogICAgICAgICAgbDcucHVzaChnMi5yYW5nZShpNC5hbmNob3IgLSBzOCwgaTQuaGVhZCAtIHM4KSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuOC5sZW5ndGggPyAodDQoZTUudXBkYXRlKHsgY2hhbmdlczogbjgsIHNjcm9sbEludG9WaWV3OiB0cnVlLCBzZWxlY3Rpb246IGcyLmNyZWF0ZShsNywgZTUuc2VsZWN0aW9uLm1haW5JbmRleCksIHVzZXJFdmVudDogIm1vdmUubGluZSIgfSkpLCB0cnVlKSA6IGZhbHNlOwogIH0KICB2YXIgUXQzID0gKHsgc3RhdGU6IGU1LCBkaXNwYXRjaDogdDQgfSkgPT4gJGU1KGU1LCB0NCwgZmFsc2UpOwogIHZhciBYdDIgPSAoeyBzdGF0ZTogZTUsIGRpc3BhdGNoOiB0NCB9KSA9PiAkZTUoZTUsIHQ0LCB0cnVlKTsKICBmdW5jdGlvbiBLZTMoZTUsIHQ0LCByMykgewogICAgaWYgKGU1LnJlYWRPbmx5KQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgbjggPSBbXTsKICAgIGZvciAobGV0IGw3IG9mICQ5KGU1KSkKICAgICAgcjMgPyBuOC5wdXNoKHsgZnJvbTogbDcuZnJvbSwgaW5zZXJ0OiBlNS5kb2Muc2xpY2UobDcuZnJvbSwgbDcudG8pICsgZTUubGluZUJyZWFrIH0pIDogbjgucHVzaCh7IGZyb206IGw3LnRvLCBpbnNlcnQ6IGU1LmxpbmVCcmVhayArIGU1LmRvYy5zbGljZShsNy5mcm9tLCBsNy50bykgfSk7CiAgICByZXR1cm4gdDQoZTUudXBkYXRlKHsgY2hhbmdlczogbjgsIHNjcm9sbEludG9WaWV3OiB0cnVlLCB1c2VyRXZlbnQ6ICJpbnB1dC5jb3B5bGluZSIgfSkpLCB0cnVlOwogIH0KICB2YXIgWXQyID0gKHsgc3RhdGU6IGU1LCBkaXNwYXRjaDogdDQgfSkgPT4gS2UzKGU1LCB0NCwgZmFsc2UpOwogIHZhciBadDIgPSAoeyBzdGF0ZTogZTUsIGRpc3BhdGNoOiB0NCB9KSA9PiBLZTMoZTUsIHQ0LCB0cnVlKTsKICB2YXIgX3QgPSAoZTUpID0+IHsKICAgIGlmIChlNS5zdGF0ZS5yZWFkT25seSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IHsgc3RhdGU6IHQ0IH0gPSBlNSwgcjMgPSB0NC5jaGFuZ2VzKCQ5KHQ0KS5tYXAoKHsgZnJvbTogbDcsIHRvOiBvNCB9KSA9PiAobDcgPiAwID8gbDctLSA6IG80IDwgdDQuZG9jLmxlbmd0aCAmJiBvNCsrLCB7IGZyb206IGw3LCB0bzogbzQgfSkpKSwgbjggPSB4NSh0NC5zZWxlY3Rpb24sIChsNykgPT4gZTUubW92ZVZlcnRpY2FsbHkobDcsIHRydWUpKS5tYXAocjMpOwogICAgcmV0dXJuIGU1LmRpc3BhdGNoKHsgY2hhbmdlczogcjMsIHNlbGVjdGlvbjogbjgsIHNjcm9sbEludG9WaWV3OiB0cnVlLCB1c2VyRXZlbnQ6ICJkZWxldGUubGluZSIgfSksIHRydWU7CiAgfTsKICBmdW5jdGlvbiBqdChlNSwgdDQpIHsKICAgIGlmICgvXChcKXxcW1xdfFx7XH0vLnRlc3QoZTUuc2xpY2VEb2ModDQgLSAxLCB0NCArIDEpKSkKICAgICAgcmV0dXJuIHsgZnJvbTogdDQsIHRvOiB0NCB9OwogICAgbGV0IHIzID0gbTcoZTUpLnJlc29sdmVJbm5lcih0NCksIG44ID0gcjMuY2hpbGRCZWZvcmUodDQpLCBsNyA9IHIzLmNoaWxkQWZ0ZXIodDQpLCBvNDsKICAgIHJldHVybiBuOCAmJiBsNyAmJiBuOC50byA8PSB0NCAmJiBsNy5mcm9tID49IHQ0ICYmIChvNCA9IG44LnR5cGUucHJvcCh3NS5jbG9zZWRCeSkpICYmIG80LmluZGV4T2YobDcubmFtZSkgPiAtMSAmJiBlNS5kb2MubGluZUF0KG44LnRvKS5mcm9tID09IGU1LmRvYy5saW5lQXQobDcuZnJvbSkuZnJvbSA/IHsgZnJvbTogbjgudG8sIHRvOiBsNy5mcm9tIH0gOiBudWxsOwogIH0KICB2YXIgZW4yID0gV2U0KGZhbHNlKTsKICB2YXIgdG4yID0gV2U0KHRydWUpOwogIGZ1bmN0aW9uIFdlNChlNSkgewogICAgcmV0dXJuICh7IHN0YXRlOiB0NCwgZGlzcGF0Y2g6IHIzIH0pID0+IHsKICAgICAgaWYgKHQ0LnJlYWRPbmx5KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgbGV0IG44ID0gdDQuY2hhbmdlQnlSYW5nZSgobDcpID0+IHsKICAgICAgICBsZXQgeyBmcm9tOiBvNCwgdG86IGMxNyB9ID0gbDcsIHM4ID0gdDQuZG9jLmxpbmVBdChvNCksIGk0ID0gIWU1ICYmIG80ID09IGMxNyAmJiBqdCh0NCwgbzQpOwogICAgICAgIGU1ICYmIChvNCA9IGMxNyA9IChjMTcgPD0gczgudG8gPyBzOCA6IHQ0LmRvYy5saW5lQXQoYzE3KSkudG8pOwogICAgICAgIGxldCB1MTEgPSBuZXcgTTgodDQsIHsgc2ltdWxhdGVCcmVhazogbzQsIHNpbXVsYXRlRG91YmxlQnJlYWs6ICEhaTQgfSksIGYxMSA9IFR0Myh1MTEsIG80KTsKICAgICAgICBmb3IgKGYxMSA9PSBudWxsICYmIChmMTEgPSAvXlxzKi8uZXhlYyh0NC5kb2MubGluZUF0KG80KS50ZXh0KVswXS5sZW5ndGgpOyBjMTcgPCBzOC50byAmJiAvXHMvLnRlc3QoczgudGV4dFtjMTcgLSBzOC5mcm9tXSk7ICkKICAgICAgICAgIGMxNysrOwogICAgICAgIGk0ID8geyBmcm9tOiBvNCwgdG86IGMxNyB9ID0gaTQgOiBvNCA+IHM4LmZyb20gJiYgbzQgPCBzOC5mcm9tICsgMTAwICYmICEvXFMvLnRlc3QoczgudGV4dC5zbGljZSgwLCBvNCkpICYmIChvNCA9IHM4LmZyb20pOwogICAgICAgIGxldCBhNCA9IFsiIiwgQ3QzKHQ0LCBmMTEpXTsKICAgICAgICByZXR1cm4gaTQgJiYgYTQucHVzaChDdDModDQsIHUxMS5saW5lSW5kZW50KHM4LmZyb20sIC0xKSkpLCB7IGNoYW5nZXM6IHsgZnJvbTogbzQsIHRvOiBjMTcsIGluc2VydDogdi5vZihhNCkgfSwgcmFuZ2U6IGcyLmN1cnNvcihvNCArIDEgKyBhNFsxXS5sZW5ndGgpIH07CiAgICAgIH0pOwogICAgICByZXR1cm4gcjModDQudXBkYXRlKG44LCB7IHNjcm9sbEludG9WaWV3OiB0cnVlLCB1c2VyRXZlbnQ6ICJpbnB1dCIgfSkpLCB0cnVlOwogICAgfTsKICB9CiAgZnVuY3Rpb24gbmU2KGU1LCB0NCkgewogICAgbGV0IHIzID0gLTE7CiAgICByZXR1cm4gZTUuY2hhbmdlQnlSYW5nZSgobjgpID0+IHsKICAgICAgbGV0IGw3ID0gW107CiAgICAgIGZvciAobGV0IGMxNyA9IG44LmZyb207IGMxNyA8PSBuOC50bzsgKSB7CiAgICAgICAgbGV0IHM4ID0gZTUuZG9jLmxpbmVBdChjMTcpOwogICAgICAgIHM4Lm51bWJlciA+IHIzICYmIChuOC5lbXB0eSB8fCBuOC50byA+IHM4LmZyb20pICYmICh0NChzOCwgbDcsIG44KSwgcjMgPSBzOC5udW1iZXIpLCBjMTcgPSBzOC50byArIDE7CiAgICAgIH0KICAgICAgbGV0IG80ID0gZTUuY2hhbmdlcyhsNyk7CiAgICAgIHJldHVybiB7IGNoYW5nZXM6IGw3LCByYW5nZTogZzIucmFuZ2UobzQubWFwUG9zKG44LmFuY2hvciwgMSksIG80Lm1hcFBvcyhuOC5oZWFkLCAxKSkgfTsKICAgIH0pOwogIH0KICB2YXIgbm4yID0gKHsgc3RhdGU6IGU1LCBkaXNwYXRjaDogdDQgfSkgPT4gewogICAgaWYgKGU1LnJlYWRPbmx5KQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgcjMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgbjggPSBuZXcgTTgoZTUsIHsgb3ZlcnJpZGVJbmRlbnRhdGlvbjogKG80KSA9PiB7CiAgICAgIGxldCBjMTcgPSByM1tvNF07CiAgICAgIHJldHVybiBjMTcgPz8gLTE7CiAgICB9IH0pLCBsNyA9IG5lNihlNSwgKG80LCBjMTcsIHM4KSA9PiB7CiAgICAgIGxldCBpNCA9IFR0MyhuOCwgbzQuZnJvbSk7CiAgICAgIGlmIChpNCA9PSBudWxsKQogICAgICAgIHJldHVybjsKICAgICAgL1xTLy50ZXN0KG80LnRleHQpIHx8IChpNCA9IDApOwogICAgICBsZXQgdTExID0gL15ccyovLmV4ZWMobzQudGV4dClbMF0sIGYxMSA9IEN0MyhlNSwgaTQpOwogICAgICAodTExICE9IGYxMSB8fCBzOC5mcm9tIDwgbzQuZnJvbSArIHUxMS5sZW5ndGgpICYmIChyM1tvNC5mcm9tXSA9IGk0LCBjMTcucHVzaCh7IGZyb206IG80LmZyb20sIHRvOiBvNC5mcm9tICsgdTExLmxlbmd0aCwgaW5zZXJ0OiBmMTEgfSkpOwogICAgfSk7CiAgICByZXR1cm4gbDcuY2hhbmdlcy5lbXB0eSB8fCB0NChlNS51cGRhdGUobDcsIHsgdXNlckV2ZW50OiAiaW5kZW50IiB9KSksIHRydWU7CiAgfTsKICB2YXIgcmU4ID0gKHsgc3RhdGU6IGU1LCBkaXNwYXRjaDogdDQgfSkgPT4gZTUucmVhZE9ubHkgPyBmYWxzZSA6ICh0NChlNS51cGRhdGUobmU2KGU1LCAocjMsIG44KSA9PiB7CiAgICBuOC5wdXNoKHsgZnJvbTogcjMuZnJvbSwgaW5zZXJ0OiBlNS5mYWNldChBdDMpIH0pOwogIH0pLCB7IHVzZXJFdmVudDogImlucHV0LmluZGVudCIgfSkpLCB0cnVlKTsKICB2YXIgSGUzID0gKHsgc3RhdGU6IGU1LCBkaXNwYXRjaDogdDQgfSkgPT4gZTUucmVhZE9ubHkgPyBmYWxzZSA6ICh0NChlNS51cGRhdGUobmU2KGU1LCAocjMsIG44KSA9PiB7CiAgICBsZXQgbDcgPSAvXlxzKi8uZXhlYyhyMy50ZXh0KVswXTsKICAgIGlmICghbDcpCiAgICAgIHJldHVybjsKICAgIGxldCBvNCA9IG90KGw3LCBlNS50YWJTaXplKSwgYzE3ID0gMCwgczggPSBDdDMoZTUsIE1hdGgubWF4KDAsIG80IC0gJDgoZTUpKSk7CiAgICBmb3IgKDsgYzE3IDwgbDcubGVuZ3RoICYmIGMxNyA8IHM4Lmxlbmd0aCAmJiBsNy5jaGFyQ29kZUF0KGMxNykgPT0gczguY2hhckNvZGVBdChjMTcpOyApCiAgICAgIGMxNysrOwogICAgbjgucHVzaCh7IGZyb206IHIzLmZyb20gKyBjMTcsIHRvOiByMy5mcm9tICsgbDcubGVuZ3RoLCBpbnNlcnQ6IHM4LnNsaWNlKGMxNykgfSk7CiAgfSksIHsgdXNlckV2ZW50OiAiZGVsZXRlLmRlZGVudCIgfSkpLCB0cnVlKTsKICB2YXIgcm4yID0gW3sga2V5OiAiQ3RybC1iIiwgcnVuOiBDZTEwLCBzaGlmdDogSWU2LCBwcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCB7IGtleTogIkN0cmwtZiIsIHJ1bjogRGU2LCBzaGlmdDogVWUzIH0sIHsga2V5OiAiQ3RybC1wIiwgcnVuOiBPZTYsIHNoaWZ0OiBHZTQgfSwgeyBrZXk6ICJDdHJsLW4iLCBydW46IEVlNCwgc2hpZnQ6IFZlMyB9LCB7IGtleTogIkN0cmwtYSIsIHJ1bjogT3Q1LCBzaGlmdDogUHQ1IH0sIHsga2V5OiAiQ3RybC1lIiwgcnVuOiBFdDQsIHNoaWZ0OiB2dDMgfSwgeyBrZXk6ICJDdHJsLWQiLCBydW46IEplNCB9LCB7IGtleTogIkN0cmwtaCIsIHJ1bjogXzggfSwgeyBrZXk6ICJDdHJsLWsiLCBydW46IHFlNCB9LCB7IGtleTogIkN0cmwtQWx0LWgiLCBydW46IHplNCB9LCB7IGtleTogIkN0cmwtbyIsIHJ1bjogV3Q1IH0sIHsga2V5OiAiQ3RybC10IiwgcnVuOiBIdDMgfSwgeyBrZXk6ICJDdHJsLXYiLCBydW46IFo3IH1dOwogIHZhciBvbjIgPSBbeyBrZXk6ICJBcnJvd0xlZnQiLCBydW46IENlMTAsIHNoaWZ0OiBJZTYsIHByZXZlbnREZWZhdWx0OiB0cnVlIH0sIHsga2V5OiAiTW9kLUFycm93TGVmdCIsIG1hYzogIkFsdC1BcnJvd0xlZnQiLCBydW46IGt0Miwgc2hpZnQ6IFR0NCwgcHJldmVudERlZmF1bHQ6IHRydWUgfSwgeyBtYWM6ICJDbWQtQXJyb3dMZWZ0IiwgcnVuOiB4dDUsIHNoaWZ0OiBHdCwgcHJldmVudERlZmF1bHQ6IHRydWUgfSwgeyBrZXk6ICJBcnJvd1JpZ2h0IiwgcnVuOiBEZTYsIHNoaWZ0OiBVZTMsIHByZXZlbnREZWZhdWx0OiB0cnVlIH0sIHsga2V5OiAiTW9kLUFycm93UmlnaHQiLCBtYWM6ICJBbHQtQXJyb3dSaWdodCIsIHJ1bjogQXQ0LCBzaGlmdDogUnQ1LCBwcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCB7IG1hYzogIkNtZC1BcnJvd1JpZ2h0IiwgcnVuOiBNdCwgc2hpZnQ6IFZ0NSwgcHJldmVudERlZmF1bHQ6IHRydWUgfSwgeyBrZXk6ICJBcnJvd1VwIiwgcnVuOiBPZTYsIHNoaWZ0OiBHZTQsIHByZXZlbnREZWZhdWx0OiB0cnVlIH0sIHsgbWFjOiAiQ21kLUFycm93VXAiLCBydW46IHNlOCwgc2hpZnQ6IHVlOCB9LCB7IG1hYzogIkN0cmwtQXJyb3dVcCIsIHJ1bjogb2U1LCBzaGlmdDogbGU4IH0sIHsga2V5OiAiQXJyb3dEb3duIiwgcnVuOiBFZTQsIHNoaWZ0OiBWZTMsIHByZXZlbnREZWZhdWx0OiB0cnVlIH0sIHsgbWFjOiAiQ21kLUFycm93RG93biIsIHJ1bjogaWU3LCBzaGlmdDogZmU2IH0sIHsgbWFjOiAiQ3RybC1BcnJvd0Rvd24iLCBydW46IFo3LCBzaGlmdDogY2U3IH0sIHsga2V5OiAiUGFnZVVwIiwgcnVuOiBvZTUsIHNoaWZ0OiBsZTggfSwgeyBrZXk6ICJQYWdlRG93biIsIHJ1bjogWjcsIHNoaWZ0OiBjZTcgfSwgeyBrZXk6ICJIb21lIiwgcnVuOiBMdDQsIHNoaWZ0OiB3dDMsIHByZXZlbnREZWZhdWx0OiB0cnVlIH0sIHsga2V5OiAiTW9kLUhvbWUiLCBydW46IHNlOCwgc2hpZnQ6IHVlOCB9LCB7IGtleTogIkVuZCIsIHJ1bjogRHQ0LCBzaGlmdDogTnQyLCBwcmV2ZW50RGVmYXVsdDogdHJ1ZSB9LCB7IGtleTogIk1vZC1FbmQiLCBydW46IGllNywgc2hpZnQ6IGZlNiB9LCB7IGtleTogIkVudGVyIiwgcnVuOiBlbjIgfSwgeyBrZXk6ICJNb2QtYSIsIHJ1bjogSnQyIH0sIHsga2V5OiAiQmFja3NwYWNlIiwgcnVuOiBfOCwgc2hpZnQ6IF84IH0sIHsga2V5OiAiRGVsZXRlIiwgcnVuOiBKZTQgfSwgeyBrZXk6ICJNb2QtQmFja3NwYWNlIiwgbWFjOiAiQWx0LUJhY2tzcGFjZSIsIHJ1bjogemU0IH0sIHsga2V5OiAiTW9kLURlbGV0ZSIsIG1hYzogIkFsdC1EZWxldGUiLCBydW46ICR0IH0sIHsgbWFjOiAiTW9kLUJhY2tzcGFjZSIsIHJ1bjogS3QyIH0sIHsgbWFjOiAiTW9kLURlbGV0ZSIsIHJ1bjogcWU0IH1dLmNvbmNhdChybjIubWFwKChlNSkgPT4gKHsgbWFjOiBlNS5rZXksIHJ1bjogZTUucnVuLCBzaGlmdDogZTUuc2hpZnQgfSkpKTsKICB2YXIgd24yID0gW3sga2V5OiAiQWx0LUFycm93TGVmdCIsIG1hYzogIkN0cmwtQXJyb3dMZWZ0IiwgcnVuOiBTdDQsIHNoaWZ0OiBJdDQgfSwgeyBrZXk6ICJBbHQtQXJyb3dSaWdodCIsIG1hYzogIkN0cmwtQXJyb3dSaWdodCIsIHJ1bjogQ3Q0LCBzaGlmdDogVXQ0IH0sIHsga2V5OiAiQWx0LUFycm93VXAiLCBydW46IFF0MyB9LCB7IGtleTogIlNoaWZ0LUFsdC1BcnJvd1VwIiwgcnVuOiBZdDIgfSwgeyBrZXk6ICJBbHQtQXJyb3dEb3duIiwgcnVuOiBYdDIgfSwgeyBrZXk6ICJTaGlmdC1BbHQtQXJyb3dEb3duIiwgcnVuOiBadDIgfSwgeyBrZXk6ICJFc2NhcGUiLCBydW46IHF0MiB9LCB7IGtleTogIk1vZC1FbnRlciIsIHJ1bjogdG4yIH0sIHsga2V5OiAiQWx0LWwiLCBtYWM6ICJDdHJsLWwiLCBydW46IEZ0MiB9LCB7IGtleTogIk1vZC1pIiwgcnVuOiB6dDQsIHByZXZlbnREZWZhdWx0OiB0cnVlIH0sIHsga2V5OiAiTW9kLVsiLCBydW46IEhlMyB9LCB7IGtleTogIk1vZC1dIiwgcnVuOiByZTggfSwgeyBrZXk6ICJNb2QtQWx0LVxcIiwgcnVuOiBubjIgfSwgeyBrZXk6ICJTaGlmdC1Nb2QtayIsIHJ1bjogX3QgfSwgeyBrZXk6ICJTaGlmdC1Nb2QtXFwiLCBydW46IGJ0MiB9LCB7IGtleTogIk1vZC0vIiwgcnVuOiB0dDcgfSwgeyBrZXk6ICJBbHQtQSIsIHJ1bjogcnQ2IH1dLmNvbmNhdChvbjIpOwogIHZhciBHbjIgPSB7IGtleTogIlRhYiIsIHJ1bjogcmU4LCBzaGlmdDogSGUzIH07CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9oaWdobGlnaHRAMS4xLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5amIyMXRZVzVrY3l4QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzTEVCc1pYcGxjaTlqYjIxdGIyNC9kZW5vL2hpZ2hsaWdodC5qcwogIHZhciBMNyA9IDA7CiAgdmFyIGYzID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGE0LCBpNCkgewogICAgICB0aGlzLnNldCA9IHQ0LCB0aGlzLmJhc2UgPSBhNCwgdGhpcy5tb2RpZmllZCA9IGk0LCB0aGlzLmlkID0gTDcrKzsKICAgIH0KICAgIHN0YXRpYyBkZWZpbmUodDQpIHsKICAgICAgaWYgKHQ0Py5iYXNlKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCBkZXJpdmUgZnJvbSBhIG1vZGlmaWVkIHRhZyIpOwogICAgICBsZXQgYTQgPSBuZXcgZjMoW10sIG51bGwsIFtdKTsKICAgICAgaWYgKGE0LnNldC5wdXNoKGE0KSwgdDQpCiAgICAgICAgZm9yIChsZXQgaTQgb2YgdDQuc2V0KQogICAgICAgICAgYTQuc2V0LnB1c2goaTQpOwogICAgICByZXR1cm4gYTQ7CiAgICB9CiAgICBzdGF0aWMgZGVmaW5lTW9kaWZpZXIoKSB7CiAgICAgIGxldCB0NCA9IG5ldyB2NSgpOwogICAgICByZXR1cm4gKGE0KSA9PiBhNC5tb2RpZmllZC5pbmRleE9mKHQ0KSA+IC0xID8gYTQgOiB2NS5nZXQoYTQuYmFzZSB8fCBhNCwgYTQubW9kaWZpZWQuY29uY2F0KHQ0KS5zb3J0KChpNCwgbDcpID0+IGk0LmlkIC0gbDcuaWQpKTsKICAgIH0KICB9OwogIHZhciBRNSA9IDA7CiAgdmFyIHY1ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHRoaXMuaW5zdGFuY2VzID0gW10sIHRoaXMuaWQgPSBRNSsrOwogICAgfQogICAgc3RhdGljIGdldCh0NCwgYTQpIHsKICAgICAgaWYgKCFhNC5sZW5ndGgpCiAgICAgICAgcmV0dXJuIHQ0OwogICAgICBsZXQgaTQgPSBhNFswXS5pbnN0YW5jZXMuZmluZCgobzQpID0+IG80LmJhc2UgPT0gdDQgJiYgVTgoYTQsIG80Lm1vZGlmaWVkKSk7CiAgICAgIGlmIChpNCkKICAgICAgICByZXR1cm4gaTQ7CiAgICAgIGxldCBsNyA9IFtdLCBzOCA9IG5ldyBmMyhsNywgdDQsIGE0KTsKICAgICAgZm9yIChsZXQgbzQgb2YgYTQpCiAgICAgICAgbzQuaW5zdGFuY2VzLnB1c2goczgpOwogICAgICBsZXQgYzE3ID0gVjEwKGE0KTsKICAgICAgZm9yIChsZXQgbzQgb2YgdDQuc2V0KQogICAgICAgIGZvciAobGV0IGQxNSBvZiBjMTcpCiAgICAgICAgICBsNy5wdXNoKHY1LmdldChvNCwgZDE1KSk7CiAgICAgIHJldHVybiBzODsKICAgIH0KICB9OwogIGZ1bmN0aW9uIFU4KHIzLCB0NCkgewogICAgcmV0dXJuIHIzLmxlbmd0aCA9PSB0NC5sZW5ndGggJiYgcjMuZXZlcnkoKGE0LCBpNCkgPT4gYTQgPT0gdDRbaTRdKTsKICB9CiAgZnVuY3Rpb24gVjEwKHIzKSB7CiAgICBsZXQgdDQgPSBbcjNdOwogICAgZm9yIChsZXQgYTQgPSAwOyBhNCA8IHIzLmxlbmd0aDsgYTQrKykKICAgICAgZm9yIChsZXQgaTQgb2YgVjEwKHIzLnNsaWNlKDAsIGE0KS5jb25jYXQocjMuc2xpY2UoYTQgKyAxKSkpKQogICAgICAgIHQ0LnB1c2goaTQpOwogICAgcmV0dXJuIHQ0OwogIH0KICBmdW5jdGlvbiAkMTAocjMpIHsKICAgIGxldCB0NCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yIChsZXQgYTQgaW4gcjMpIHsKICAgICAgbGV0IGk0ID0gcjNbYTRdOwogICAgICBBcnJheS5pc0FycmF5KGk0KSB8fCAoaTQgPSBbaTRdKTsKICAgICAgZm9yIChsZXQgbDcgb2YgYTQuc3BsaXQoIiAiKSkKICAgICAgICBpZiAobDcpIHsKICAgICAgICAgIGxldCBzOCA9IFtdLCBjMTcgPSAyLCBvNCA9IGw3OwogICAgICAgICAgZm9yIChsZXQgcDE4ID0gMDsgOyApIHsKICAgICAgICAgICAgaWYgKG80ID09ICIuLi4iICYmIHAxOCA+IDAgJiYgcDE4ICsgMyA9PSBsNy5sZW5ndGgpIHsKICAgICAgICAgICAgICBjMTcgPSAxOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxldCBoMTAgPSAvXiIoPzpbXiJcXF18XFwuKSo/InxbXlwvIV0rLy5leGVjKG80KTsKICAgICAgICAgICAgaWYgKCFoMTApCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgcGF0aDogIiArIGw3KTsKICAgICAgICAgICAgaWYgKHM4LnB1c2goaDEwWzBdID09ICIqIiA/ICIiIDogaDEwWzBdWzBdID09ICciJyA/IEpTT04ucGFyc2UoaDEwWzBdKSA6IGgxMFswXSksIHAxOCArPSBoMTBbMF0ubGVuZ3RoLCBwMTggPT0gbDcubGVuZ3RoKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBsZXQgTjE3ID0gbDdbcDE4KytdOwogICAgICAgICAgICBpZiAocDE4ID09IGw3Lmxlbmd0aCAmJiBOMTcgPT0gIiEiKSB7CiAgICAgICAgICAgICAgYzE3ID0gMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoTjE3ICE9ICIvIikKICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBwYXRoOiAiICsgbDcpOwogICAgICAgICAgICBvNCA9IGw3LnNsaWNlKHAxOCk7CiAgICAgICAgICB9CiAgICAgICAgICBsZXQgZDE1ID0gczgubGVuZ3RoIC0gMSwgZzEyID0gczhbZDE1XTsKICAgICAgICAgIGlmICghZzEyKQogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBwYXRoOiAiICsgbDcpOwogICAgICAgICAgbGV0IE8xNSA9IG5ldyBNOShpNCwgYzE3LCBkMTUgPiAwID8gczguc2xpY2UoMCwgZDE1KSA6IG51bGwpOwogICAgICAgICAgdDRbZzEyXSA9IE8xNS5zb3J0KHQ0W2cxMl0pOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB6MTAuYWRkKHQ0KTsKICB9CiAgdmFyIHoxMCA9IG5ldyB3MygpOwogIHZhciBNOSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBhNCwgaTQsIGw3KSB7CiAgICAgIHRoaXMudGFncyA9IHQ0LCB0aGlzLm1vZGUgPSBhNCwgdGhpcy5jb250ZXh0ID0gaTQsIHRoaXMubmV4dCA9IGw3OwogICAgfQogICAgZ2V0IG9wYXF1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PSAwOwogICAgfQogICAgZ2V0IGluaGVyaXQoKSB7CiAgICAgIHJldHVybiB0aGlzLm1vZGUgPT0gMTsKICAgIH0KICAgIHNvcnQodDQpIHsKICAgICAgcmV0dXJuICF0NCB8fCB0NC5kZXB0aCA8IHRoaXMuZGVwdGggPyAodGhpcy5uZXh0ID0gdDQsIHRoaXMpIDogKHQ0Lm5leHQgPSB0aGlzLnNvcnQodDQubmV4dCksIHQ0KTsKICAgIH0KICAgIGdldCBkZXB0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuY29udGV4dCA/IHRoaXMuY29udGV4dC5sZW5ndGggOiAwOwogICAgfQogIH07CiAgTTkuZW1wdHkgPSBuZXcgTTkoW10sIDIsIG51bGwpOwogIGZ1bmN0aW9uIFc3KHIzLCB0NCkgewogICAgbGV0IGE0ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBmb3IgKGxldCBzOCBvZiByMykKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHM4LnRhZykpCiAgICAgICAgYTRbczgudGFnLmlkXSA9IHM4LmNsYXNzOwogICAgICBlbHNlCiAgICAgICAgZm9yIChsZXQgYzE3IG9mIHM4LnRhZykKICAgICAgICAgIGE0W2MxNy5pZF0gPSBzOC5jbGFzczsKICAgIGxldCB7IHNjb3BlOiBpNCwgYWxsOiBsNyA9IG51bGwgfSA9IHQ0IHx8IHt9OwogICAgcmV0dXJuIHsgc3R5bGU6IChzOCkgPT4gewogICAgICBsZXQgYzE3ID0gbDc7CiAgICAgIGZvciAobGV0IG80IG9mIHM4KQogICAgICAgIGZvciAobGV0IGQxNSBvZiBvNC5zZXQpIHsKICAgICAgICAgIGxldCBnMTIgPSBhNFtkMTUuaWRdOwogICAgICAgICAgaWYgKGcxMikgewogICAgICAgICAgICBjMTcgPSBjMTcgPyBjMTcgKyAiICIgKyBnMTIgOiBnMTI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIGMxNzsKICAgIH0sIHNjb3BlOiBpNCB9OwogIH0KICBmdW5jdGlvbiBYMTAocjMsIHQ0KSB7CiAgICBsZXQgYTQgPSBudWxsOwogICAgZm9yIChsZXQgaTQgb2YgcjMpIHsKICAgICAgbGV0IGw3ID0gaTQuc3R5bGUodDQpOwogICAgICBsNyAmJiAoYTQgPSBhNCA/IGE0ICsgIiAiICsgbDcgOiBsNyk7CiAgICB9CiAgICByZXR1cm4gYTQ7CiAgfQogIGZ1bmN0aW9uIF85KHIzLCB0NCwgYTQsIGk0ID0gMCwgbDcgPSByMy5sZW5ndGgpIHsKICAgIGxldCBzOCA9IG5ldyBQMTEoaTQsIEFycmF5LmlzQXJyYXkodDQpID8gdDQgOiBbdDRdLCBhNCk7CiAgICBzOC5oaWdobGlnaHRSYW5nZShyMy5jdXJzb3IoKSwgaTQsIGw3LCAiIiwgczguaGlnaGxpZ2h0ZXJzKSwgczguZmx1c2gobDcpOwogIH0KICB2YXIgUDExID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGE0LCBpNCkgewogICAgICB0aGlzLmF0ID0gdDQsIHRoaXMuaGlnaGxpZ2h0ZXJzID0gYTQsIHRoaXMuc3BhbiA9IGk0LCB0aGlzLmNsYXNzID0gIiI7CiAgICB9CiAgICBzdGFydFNwYW4odDQsIGE0KSB7CiAgICAgIGE0ICE9IHRoaXMuY2xhc3MgJiYgKHRoaXMuZmx1c2godDQpLCB0NCA+IHRoaXMuYXQgJiYgKHRoaXMuYXQgPSB0NCksIHRoaXMuY2xhc3MgPSBhNCk7CiAgICB9CiAgICBmbHVzaCh0NCkgewogICAgICB0NCA+IHRoaXMuYXQgJiYgdGhpcy5jbGFzcyAmJiB0aGlzLnNwYW4odGhpcy5hdCwgdDQsIHRoaXMuY2xhc3MpOwogICAgfQogICAgaGlnaGxpZ2h0UmFuZ2UodDQsIGE0LCBpNCwgbDcsIHM4KSB7CiAgICAgIGxldCB7IHR5cGU6IGMxNywgZnJvbTogbzQsIHRvOiBkMTUgfSA9IHQ0OwogICAgICBpZiAobzQgPj0gaTQgfHwgZDE1IDw9IGE0KQogICAgICAgIHJldHVybjsKICAgICAgYzE3LmlzVG9wICYmIChzOCA9IHRoaXMuaGlnaGxpZ2h0ZXJzLmZpbHRlcigoTjE3KSA9PiAhTjE3LnNjb3BlIHx8IE4xNy5zY29wZShjMTcpKSk7CiAgICAgIGxldCBnMTIgPSBsNywgTzE1ID0gWTEyKHQ0KSB8fCBNOS5lbXB0eSwgcDE4ID0gWDEwKHM4LCBPMTUudGFncyk7CiAgICAgIGlmIChwMTggJiYgKGcxMiAmJiAoZzEyICs9ICIgIiksIGcxMiArPSBwMTgsIE8xNS5tb2RlID09IDEgJiYgKGw3ICs9IChsNyA/ICIgIiA6ICIiKSArIHAxOCkpLCB0aGlzLnN0YXJ0U3Bhbih0NC5mcm9tLCBnMTIpLCBPMTUub3BhcXVlKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IGgxMCA9IHQ0LnRyZWUgJiYgdDQudHJlZS5wcm9wKHczLm1vdW50ZWQpOwogICAgICBpZiAoaDEwICYmIGgxMC5vdmVybGF5KSB7CiAgICAgICAgbGV0IE4xNyA9IHQ0Lm5vZGUuZW50ZXIoaDEwLm92ZXJsYXlbMF0uZnJvbSArIG80LCAxKSwgRzIzID0gdGhpcy5oaWdobGlnaHRlcnMuZmlsdGVyKCh4MjEpID0+ICF4MjEuc2NvcGUgfHwgeDIxLnNjb3BlKGgxMC50cmVlLnR5cGUpKSwgRDIwID0gdDQuZmlyc3RDaGlsZCgpOwogICAgICAgIGZvciAobGV0IHgyMSA9IDAsIFMyMSA9IG80OyA7IHgyMSsrKSB7CiAgICAgICAgICBsZXQgQTIwID0geDIxIDwgaDEwLm92ZXJsYXkubGVuZ3RoID8gaDEwLm92ZXJsYXlbeDIxXSA6IG51bGwsIHEyMCA9IEEyMCA/IEEyMC5mcm9tICsgbzQgOiBkMTUsIEgyMyA9IE1hdGgubWF4KGE0LCBTMjEpLCBFMTUgPSBNYXRoLm1pbihpNCwgcTIwKTsKICAgICAgICAgIGlmIChIMjMgPCBFMTUgJiYgRDIwKQogICAgICAgICAgICBmb3IgKDsgdDQuZnJvbSA8IEUxNSAmJiAodGhpcy5oaWdobGlnaHRSYW5nZSh0NCwgSDIzLCBFMTUsIGw3LCBzOCksIHRoaXMuc3RhcnRTcGFuKE1hdGgubWluKGk0LCB0NC50byksIGcxMiksICEodDQudG8gPj0gcTIwIHx8ICF0NC5uZXh0U2libGluZygpKSk7ICkKICAgICAgICAgICAgICA7CiAgICAgICAgICBpZiAoIUEyMCB8fCBxMjAgPiBpNCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBTMjEgPSBBMjAudG8gKyBvNCwgUzIxID4gYTQgJiYgKHRoaXMuaGlnaGxpZ2h0UmFuZ2UoTjE3LmN1cnNvcigpLCBNYXRoLm1heChhNCwgQTIwLmZyb20gKyBvNCksIE1hdGgubWluKGk0LCBTMjEpLCBsNywgRzIzKSwgdGhpcy5zdGFydFNwYW4oUzIxLCBnMTIpKTsKICAgICAgICB9CiAgICAgICAgRDIwICYmIHQ0LnBhcmVudCgpOwogICAgICB9IGVsc2UgaWYgKHQ0LmZpcnN0Q2hpbGQoKSkgewogICAgICAgIGRvCiAgICAgICAgICBpZiAoISh0NC50byA8PSBhNCkpIHsKICAgICAgICAgICAgaWYgKHQ0LmZyb20gPj0gaTQpCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0UmFuZ2UodDQsIGE0LCBpNCwgbDcsIHM4KSwgdGhpcy5zdGFydFNwYW4oTWF0aC5taW4oaTQsIHQ0LnRvKSwgZzEyKTsKICAgICAgICAgIH0KICAgICAgICB3aGlsZSAodDQubmV4dFNpYmxpbmcoKSk7CiAgICAgICAgdDQucGFyZW50KCk7CiAgICAgIH0KICAgIH0KICB9OwogIGZ1bmN0aW9uIFkxMihyMykgewogICAgbGV0IHQ0ID0gcjMudHlwZS5wcm9wKHoxMCk7CiAgICBmb3IgKDsgdDQgJiYgdDQuY29udGV4dCAmJiAhcjMubWF0Y2hDb250ZXh0KHQ0LmNvbnRleHQpOyApCiAgICAgIHQ0ID0gdDQubmV4dDsKICAgIHJldHVybiB0NCB8fCBudWxsOwogIH0KICB2YXIgZTMgPSBmMy5kZWZpbmU7CiAgdmFyIEkxMCA9IGUzKCk7CiAgdmFyIGI4ID0gZTMoKTsKICB2YXIgQjEwID0gZTMoYjgpOwogIHZhciBGOCA9IGUzKGI4KTsKICB2YXIgeTcgPSBlMygpOwogIHZhciBDNSA9IGUzKHk3KTsKICB2YXIgSzggPSBlMyh5Nyk7CiAgdmFyIGs1ID0gZTMoKTsKICB2YXIgdzkgPSBlMyhrNSk7CiAgdmFyIG05ID0gZTMoKTsKICB2YXIgdTMgPSBlMygpOwogIHZhciBqNSA9IGUzKCk7CiAgdmFyIFI5ID0gZTMoajUpOwogIHZhciBUMTEgPSBlMygpOwogIHZhciBuNCA9IHsgY29tbWVudDogSTEwLCBsaW5lQ29tbWVudDogZTMoSTEwKSwgYmxvY2tDb21tZW50OiBlMyhJMTApLCBkb2NDb21tZW50OiBlMyhJMTApLCBuYW1lOiBiOCwgdmFyaWFibGVOYW1lOiBlMyhiOCksIHR5cGVOYW1lOiBCMTAsIHRhZ05hbWU6IGUzKEIxMCksIHByb3BlcnR5TmFtZTogRjgsIGF0dHJpYnV0ZU5hbWU6IGUzKEY4KSwgY2xhc3NOYW1lOiBlMyhiOCksIGxhYmVsTmFtZTogZTMoYjgpLCBuYW1lc3BhY2U6IGUzKGI4KSwgbWFjcm9OYW1lOiBlMyhiOCksIGxpdGVyYWw6IHk3LCBzdHJpbmc6IEM1LCBkb2NTdHJpbmc6IGUzKEM1KSwgY2hhcmFjdGVyOiBlMyhDNSksIGF0dHJpYnV0ZVZhbHVlOiBlMyhDNSksIG51bWJlcjogSzgsIGludGVnZXI6IGUzKEs4KSwgZmxvYXQ6IGUzKEs4KSwgYm9vbDogZTMoeTcpLCByZWdleHA6IGUzKHk3KSwgZXNjYXBlOiBlMyh5NyksIGNvbG9yOiBlMyh5NyksIHVybDogZTMoeTcpLCBrZXl3b3JkOiBtOSwgc2VsZjogZTMobTkpLCBudWxsOiBlMyhtOSksIGF0b206IGUzKG05KSwgdW5pdDogZTMobTkpLCBtb2RpZmllcjogZTMobTkpLCBvcGVyYXRvcktleXdvcmQ6IGUzKG05KSwgY29udHJvbEtleXdvcmQ6IGUzKG05KSwgZGVmaW5pdGlvbktleXdvcmQ6IGUzKG05KSwgbW9kdWxlS2V5d29yZDogZTMobTkpLCBvcGVyYXRvcjogdTMsIGRlcmVmT3BlcmF0b3I6IGUzKHUzKSwgYXJpdGhtZXRpY09wZXJhdG9yOiBlMyh1MyksIGxvZ2ljT3BlcmF0b3I6IGUzKHUzKSwgYml0d2lzZU9wZXJhdG9yOiBlMyh1MyksIGNvbXBhcmVPcGVyYXRvcjogZTModTMpLCB1cGRhdGVPcGVyYXRvcjogZTModTMpLCBkZWZpbml0aW9uT3BlcmF0b3I6IGUzKHUzKSwgdHlwZU9wZXJhdG9yOiBlMyh1MyksIGNvbnRyb2xPcGVyYXRvcjogZTModTMpLCBwdW5jdHVhdGlvbjogajUsIHNlcGFyYXRvcjogZTMoajUpLCBicmFja2V0OiBSOSwgYW5nbGVCcmFja2V0OiBlMyhSOSksIHNxdWFyZUJyYWNrZXQ6IGUzKFI5KSwgcGFyZW46IGUzKFI5KSwgYnJhY2U6IGUzKFI5KSwgY29udGVudDogazUsIGhlYWRpbmc6IHc5LCBoZWFkaW5nMTogZTModzkpLCBoZWFkaW5nMjogZTModzkpLCBoZWFkaW5nMzogZTModzkpLCBoZWFkaW5nNDogZTModzkpLCBoZWFkaW5nNTogZTModzkpLCBoZWFkaW5nNjogZTModzkpLCBjb250ZW50U2VwYXJhdG9yOiBlMyhrNSksIGxpc3Q6IGUzKGs1KSwgcXVvdGU6IGUzKGs1KSwgZW1waGFzaXM6IGUzKGs1KSwgc3Ryb25nOiBlMyhrNSksIGxpbms6IGUzKGs1KSwgbW9ub3NwYWNlOiBlMyhrNSksIHN0cmlrZXRocm91Z2g6IGUzKGs1KSwgaW5zZXJ0ZWQ6IGUzKCksIGRlbGV0ZWQ6IGUzKCksIGNoYW5nZWQ6IGUzKCksIGludmFsaWQ6IGUzKCksIG1ldGE6IFQxMSwgZG9jdW1lbnRNZXRhOiBlMyhUMTEpLCBhbm5vdGF0aW9uOiBlMyhUMTEpLCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb246IGUzKFQxMSksIGRlZmluaXRpb246IGYzLmRlZmluZU1vZGlmaWVyKCksIGNvbnN0YW50OiBmMy5kZWZpbmVNb2RpZmllcigpLCBmdW5jdGlvbjogZjMuZGVmaW5lTW9kaWZpZXIoKSwgc3RhbmRhcmQ6IGYzLmRlZmluZU1vZGlmaWVyKCksIGxvY2FsOiBmMy5kZWZpbmVNb2RpZmllcigpLCBzcGVjaWFsOiBmMy5kZWZpbmVNb2RpZmllcigpIH07CiAgdmFyIHR0OCA9IFc3KFt7IHRhZzogbjQubGluaywgY2xhc3M6ICJ0b2stbGluayIgfSwgeyB0YWc6IG40LmhlYWRpbmcsIGNsYXNzOiAidG9rLWhlYWRpbmciIH0sIHsgdGFnOiBuNC5lbXBoYXNpcywgY2xhc3M6ICJ0b2stZW1waGFzaXMiIH0sIHsgdGFnOiBuNC5zdHJvbmcsIGNsYXNzOiAidG9rLXN0cm9uZyIgfSwgeyB0YWc6IG40LmtleXdvcmQsIGNsYXNzOiAidG9rLWtleXdvcmQiIH0sIHsgdGFnOiBuNC5hdG9tLCBjbGFzczogInRvay1hdG9tIiB9LCB7IHRhZzogbjQuYm9vbCwgY2xhc3M6ICJ0b2stYm9vbCIgfSwgeyB0YWc6IG40LnVybCwgY2xhc3M6ICJ0b2stdXJsIiB9LCB7IHRhZzogbjQubGFiZWxOYW1lLCBjbGFzczogInRvay1sYWJlbE5hbWUiIH0sIHsgdGFnOiBuNC5pbnNlcnRlZCwgY2xhc3M6ICJ0b2staW5zZXJ0ZWQiIH0sIHsgdGFnOiBuNC5kZWxldGVkLCBjbGFzczogInRvay1kZWxldGVkIiB9LCB7IHRhZzogbjQubGl0ZXJhbCwgY2xhc3M6ICJ0b2stbGl0ZXJhbCIgfSwgeyB0YWc6IG40LnN0cmluZywgY2xhc3M6ICJ0b2stc3RyaW5nIiB9LCB7IHRhZzogbjQubnVtYmVyLCBjbGFzczogInRvay1udW1iZXIiIH0sIHsgdGFnOiBbbjQucmVnZXhwLCBuNC5lc2NhcGUsIG40LnNwZWNpYWwobjQuc3RyaW5nKV0sIGNsYXNzOiAidG9rLXN0cmluZzIiIH0sIHsgdGFnOiBuNC52YXJpYWJsZU5hbWUsIGNsYXNzOiAidG9rLXZhcmlhYmxlTmFtZSIgfSwgeyB0YWc6IG40LmxvY2FsKG40LnZhcmlhYmxlTmFtZSksIGNsYXNzOiAidG9rLXZhcmlhYmxlTmFtZSB0b2stbG9jYWwiIH0sIHsgdGFnOiBuNC5kZWZpbml0aW9uKG40LnZhcmlhYmxlTmFtZSksIGNsYXNzOiAidG9rLXZhcmlhYmxlTmFtZSB0b2stZGVmaW5pdGlvbiIgfSwgeyB0YWc6IG40LnNwZWNpYWwobjQudmFyaWFibGVOYW1lKSwgY2xhc3M6ICJ0b2stdmFyaWFibGVOYW1lMiIgfSwgeyB0YWc6IG40LmRlZmluaXRpb24objQucHJvcGVydHlOYW1lKSwgY2xhc3M6ICJ0b2stcHJvcGVydHlOYW1lIHRvay1kZWZpbml0aW9uIiB9LCB7IHRhZzogbjQudHlwZU5hbWUsIGNsYXNzOiAidG9rLXR5cGVOYW1lIiB9LCB7IHRhZzogbjQubmFtZXNwYWNlLCBjbGFzczogInRvay1uYW1lc3BhY2UiIH0sIHsgdGFnOiBuNC5jbGFzc05hbWUsIGNsYXNzOiAidG9rLWNsYXNzTmFtZSIgfSwgeyB0YWc6IG40Lm1hY3JvTmFtZSwgY2xhc3M6ICJ0b2stbWFjcm9OYW1lIiB9LCB7IHRhZzogbjQucHJvcGVydHlOYW1lLCBjbGFzczogInRvay1wcm9wZXJ0eU5hbWUiIH0sIHsgdGFnOiBuNC5vcGVyYXRvciwgY2xhc3M6ICJ0b2stb3BlcmF0b3IiIH0sIHsgdGFnOiBuNC5jb21tZW50LCBjbGFzczogInRvay1jb21tZW50IiB9LCB7IHRhZzogbjQubWV0YSwgY2xhc3M6ICJ0b2stbWV0YSIgfSwgeyB0YWc6IG40LmludmFsaWQsIGNsYXNzOiAidG9rLWludmFsaWQiIH0sIHsgdGFnOiBuNC5wdW5jdHVhdGlvbiwgY2xhc3M6ICJ0b2stcHVuY3R1YXRpb24iIH1dKTsKCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvc3R5bGUtbW9kQDQuMC4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOWpiMjF0WVc1a2N5eEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjQvZGVuby9zdHlsZS1tb2QuanMKICB2YXIgUzcgPSAiXHUwMzdDIjsKICB2YXIgdzEwID0gdHlwZW9mIFN5bWJvbCA+ICJ1IiA/ICJfXyIgKyBTNyA6IFN5bWJvbC5mb3IoUzcpOwogIHZhciBjNSA9IHR5cGVvZiBTeW1ib2wgPiAidSIgPyAiX19zdHlsZVNldCIgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTgpIDogU3ltYm9sKCJzdHlsZVNldCIpOwogIHZhciBiOSA9IHR5cGVvZiBnbG9iYWxUaGlzIDwgInUiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBkb2N1bWVudCA8ICJ1IiA/IHdpbmRvdyA6IHt9OwogIHZhciBUMTIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgbDcpIHsKICAgICAgdGhpcy5ydWxlcyA9IFtdOwogICAgICBsZXQgeyBmaW5pc2g6IHUxMSB9ID0gbDcgfHwge307CiAgICAgIGZ1bmN0aW9uIG44KHQ0KSB7CiAgICAgICAgcmV0dXJuIC9eQC8udGVzdCh0NCkgPyBbdDRdIDogdDQuc3BsaXQoLyxccyovKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBzOCh0NCwgaTQsIGgxMCwgeDIxKSB7CiAgICAgICAgbGV0IGQxNSA9IFtdLCByMyA9IC9eQChcdyspXGIvLmV4ZWModDRbMF0pLCBnMTIgPSByMyAmJiByM1sxXSA9PSAia2V5ZnJhbWVzIjsKICAgICAgICBpZiAocjMgJiYgaTQgPT0gbnVsbCkKICAgICAgICAgIHJldHVybiBoMTAucHVzaCh0NFswXSArICI7Iik7CiAgICAgICAgZm9yIChsZXQgYTQgaW4gaTQpIHsKICAgICAgICAgIGxldCBvNCA9IGk0W2E0XTsKICAgICAgICAgIGlmICgvJi8udGVzdChhNCkpCiAgICAgICAgICAgIHM4KGE0LnNwbGl0KC8sXHMqLykubWFwKChmMTEpID0+IHQ0Lm1hcCgoeTE3KSA9PiBmMTEucmVwbGFjZSgvJi8sIHkxNykpKS5yZWR1Y2UoKGYxMSwgeTE3KSA9PiBmMTEuY29uY2F0KHkxNykpLCBvNCwgaDEwKTsKICAgICAgICAgIGVsc2UgaWYgKG80ICYmIHR5cGVvZiBvNCA9PSAib2JqZWN0IikgewogICAgICAgICAgICBpZiAoIXIzKQogICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJUaGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSAoIiArIGE0ICsgIikgc2hvdWxkIGJlIGEgcHJpbWl0aXZlIHZhbHVlLiIpOwogICAgICAgICAgICBzOChuOChhNCksIG80LCBkMTUsIGcxMik7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgbzQgIT0gbnVsbCAmJiBkMTUucHVzaChhNC5yZXBsYWNlKC9fLiovLCAiIikucmVwbGFjZSgvW0EtWl0vZywgKGYxMSkgPT4gIi0iICsgZjExLnRvTG93ZXJDYXNlKCkpICsgIjogIiArIG80ICsgIjsiKTsKICAgICAgICB9CiAgICAgICAgKGQxNS5sZW5ndGggfHwgZzEyKSAmJiBoMTAucHVzaCgodTExICYmICFyMyAmJiAheDIxID8gdDQubWFwKHUxMSkgOiB0NCkuam9pbigiLCAiKSArICIgeyIgKyBkMTUuam9pbigiICIpICsgIn0iKTsKICAgICAgfQogICAgICBmb3IgKGxldCB0NCBpbiBlNSkKICAgICAgICBzOChuOCh0NCksIGU1W3Q0XSwgdGhpcy5ydWxlcyk7CiAgICB9CiAgICBnZXRSdWxlcygpIHsKICAgICAgcmV0dXJuIHRoaXMucnVsZXMuam9pbihgCmApOwogICAgfQogICAgc3RhdGljIG5ld05hbWUoKSB7CiAgICAgIGxldCBlNSA9IGI5W3cxMF0gfHwgMTsKICAgICAgcmV0dXJuIGI5W3cxMF0gPSBlNSArIDEsIFM3ICsgZTUudG9TdHJpbmcoMzYpOwogICAgfQogICAgc3RhdGljIG1vdW50KGU1LCBsNykgewogICAgICAoZTVbYzVdIHx8IG5ldyBtMTAoZTUpKS5tb3VudChBcnJheS5pc0FycmF5KGw3KSA/IGw3IDogW2w3XSk7CiAgICB9CiAgfTsKICB2YXIgcDYgPSBudWxsOwogIHZhciBtMTAgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSkgewogICAgICBpZiAoIWU1LmhlYWQgJiYgZTUuYWRvcHRlZFN0eWxlU2hlZXRzICYmIHR5cGVvZiBDU1NTdHlsZVNoZWV0IDwgInUiKSB7CiAgICAgICAgaWYgKHA2KQogICAgICAgICAgcmV0dXJuIGU1LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IFtwNi5zaGVldF0uY29uY2F0KGU1LmFkb3B0ZWRTdHlsZVNoZWV0cyksIGU1W2M1XSA9IHA2OwogICAgICAgIHRoaXMuc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpLCBlNS5hZG9wdGVkU3R5bGVTaGVldHMgPSBbdGhpcy5zaGVldF0uY29uY2F0KGU1LmFkb3B0ZWRTdHlsZVNoZWV0cyksIHA2ID0gdGhpczsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnN0eWxlVGFnID0gKGU1Lm93bmVyRG9jdW1lbnQgfHwgZTUpLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgbGV0IGw3ID0gZTUuaGVhZCB8fCBlNTsKICAgICAgICBsNy5pbnNlcnRCZWZvcmUodGhpcy5zdHlsZVRhZywgbDcuZmlyc3RDaGlsZCk7CiAgICAgIH0KICAgICAgdGhpcy5tb2R1bGVzID0gW10sIGU1W2M1XSA9IHRoaXM7CiAgICB9CiAgICBtb3VudChlNSkgewogICAgICBsZXQgbDcgPSB0aGlzLnNoZWV0LCB1MTEgPSAwLCBuOCA9IDA7CiAgICAgIGZvciAobGV0IHM4ID0gMDsgczggPCBlNS5sZW5ndGg7IHM4KyspIHsKICAgICAgICBsZXQgdDQgPSBlNVtzOF0sIGk0ID0gdGhpcy5tb2R1bGVzLmluZGV4T2YodDQpOwogICAgICAgIGlmIChpNCA8IG44ICYmIGk0ID4gLTEgJiYgKHRoaXMubW9kdWxlcy5zcGxpY2UoaTQsIDEpLCBuOC0tLCBpNCA9IC0xKSwgaTQgPT0gLTEpIHsKICAgICAgICAgIGlmICh0aGlzLm1vZHVsZXMuc3BsaWNlKG44KyssIDAsIHQ0KSwgbDcpCiAgICAgICAgICAgIGZvciAobGV0IGgxMCA9IDA7IGgxMCA8IHQ0LnJ1bGVzLmxlbmd0aDsgaDEwKyspCiAgICAgICAgICAgICAgbDcuaW5zZXJ0UnVsZSh0NC5ydWxlc1toMTBdLCB1MTErKyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAoOyBuOCA8IGk0OyApCiAgICAgICAgICAgIHUxMSArPSB0aGlzLm1vZHVsZXNbbjgrK10ucnVsZXMubGVuZ3RoOwogICAgICAgICAgdTExICs9IHQ0LnJ1bGVzLmxlbmd0aCwgbjgrKzsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFsNykgewogICAgICAgIGxldCBzOCA9ICIiOwogICAgICAgIGZvciAobGV0IHQ0ID0gMDsgdDQgPCB0aGlzLm1vZHVsZXMubGVuZ3RoOyB0NCsrKQogICAgICAgICAgczggKz0gdGhpcy5tb2R1bGVzW3Q0XS5nZXRSdWxlcygpICsgYApgOwogICAgICAgIHRoaXMuc3R5bGVUYWcudGV4dENvbnRlbnQgPSBzODsKICAgICAgfQogICAgfQogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2xhbmd1YWdlQDYuMi4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOWpiMjF0WVc1a2N5eEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjQvZGVuby9sYW5ndWFnZS5qcwogIHZhciBZMTM7CiAgdmFyIFQxMyA9IG5ldyB3MygpOwogIHZhciBjNiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgcjMgPSBbXSkgewogICAgICB0aGlzLmRhdGEgPSB0NCwgdy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInRyZWUiKSB8fCBPYmplY3QuZGVmaW5lUHJvcGVydHkody5wcm90b3R5cGUsICJ0cmVlIiwgeyBnZXQoKSB7CiAgICAgICAgcmV0dXJuIG0xMSh0aGlzKTsKICAgICAgfSB9KSwgdGhpcy5wYXJzZXIgPSBlNSwgdGhpcy5leHRlbnNpb24gPSBbUDEyLm9mKHRoaXMpLCB3Lmxhbmd1YWdlRGF0YS5vZigoaTQsIHM4LCBvNCkgPT4gaTQuZmFjZXQodXQ2KGk0LCBzOCwgbzQpKSldLmNvbmNhdChyMyk7CiAgICB9CiAgICBpc0FjdGl2ZUF0KHQ0LCBlNSwgcjMgPSAtMSkgewogICAgICByZXR1cm4gdXQ2KHQ0LCBlNSwgcjMpID09IHRoaXMuZGF0YTsKICAgIH0KICAgIGZpbmRSZWdpb25zKHQ0KSB7CiAgICAgIGxldCBlNSA9IHQ0LmZhY2V0KFAxMik7CiAgICAgIGlmIChlNT8uZGF0YSA9PSB0aGlzLmRhdGEpCiAgICAgICAgcmV0dXJuIFt7IGZyb206IDAsIHRvOiB0NC5kb2MubGVuZ3RoIH1dOwogICAgICBpZiAoIWU1IHx8ICFlNS5hbGxvd3NOZXN0aW5nKQogICAgICAgIHJldHVybiBbXTsKICAgICAgbGV0IHIzID0gW10sIGk0ID0gKHM4LCBvNCkgPT4gewogICAgICAgIGlmIChzOC5wcm9wKFQxMykgPT0gdGhpcy5kYXRhKSB7CiAgICAgICAgICByMy5wdXNoKHsgZnJvbTogbzQsIHRvOiBvNCArIHM4Lmxlbmd0aCB9KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbGV0IGw3ID0gczgucHJvcCh3My5tb3VudGVkKTsKICAgICAgICBpZiAobDcpIHsKICAgICAgICAgIGlmIChsNy50cmVlLnByb3AoVDEzKSA9PSB0aGlzLmRhdGEpIHsKICAgICAgICAgICAgaWYgKGw3Lm92ZXJsYXkpCiAgICAgICAgICAgICAgZm9yIChsZXQgYTQgb2YgbDcub3ZlcmxheSkKICAgICAgICAgICAgICAgIHIzLnB1c2goeyBmcm9tOiBhNC5mcm9tICsgbzQsIHRvOiBhNC50byArIG80IH0pOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcjMucHVzaCh7IGZyb206IG80LCB0bzogbzQgKyBzOC5sZW5ndGggfSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSBpZiAobDcub3ZlcmxheSkgewogICAgICAgICAgICBsZXQgYTQgPSByMy5sZW5ndGg7CiAgICAgICAgICAgIGlmIChpNChsNy50cmVlLCBsNy5vdmVybGF5WzBdLmZyb20gKyBvNCksIHIzLmxlbmd0aCA+IGE0KQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChsZXQgYTQgPSAwOyBhNCA8IHM4LmNoaWxkcmVuLmxlbmd0aDsgYTQrKykgewogICAgICAgICAgbGV0IGgxMCA9IHM4LmNoaWxkcmVuW2E0XTsKICAgICAgICAgIGgxMCBpbnN0YW5jZW9mIFAzICYmIGk0KGgxMCwgczgucG9zaXRpb25zW2E0XSArIG80KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBpNChtMTEodDQpLCAwKSwgcjM7CiAgICB9CiAgICBnZXQgYWxsb3dzTmVzdGluZygpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfTsKICBjNi5zZXRTdGF0ZSA9IHkuZGVmaW5lKCk7CiAgZnVuY3Rpb24gdXQ2KG44LCB0NCwgZTUpIHsKICAgIGxldCByMyA9IG44LmZhY2V0KFAxMik7CiAgICBpZiAoIXIzKQogICAgICByZXR1cm4gbnVsbDsKICAgIGxldCBpNCA9IHIzLmRhdGE7CiAgICBpZiAocjMuYWxsb3dzTmVzdGluZykKICAgICAgZm9yIChsZXQgczggPSBtMTEobjgpLnRvcE5vZGU7IHM4OyBzOCA9IHM4LmVudGVyKHQ0LCBlNSwgQTQuRXhjbHVkZUJ1ZmZlcnMpKQogICAgICAgIGk0ID0gczgudHlwZS5wcm9wKFQxMykgfHwgaTQ7CiAgICByZXR1cm4gaTQ7CiAgfQogIGZ1bmN0aW9uIG0xMShuOCkgewogICAgbGV0IHQ0ID0gbjguZmllbGQoYzYuc3RhdGUsIGZhbHNlKTsKICAgIHJldHVybiB0NCA/IHQ0LnRyZWUgOiBQMy5lbXB0eTsKICB9CiAgdmFyIGV0NSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSA9IHQ0Lmxlbmd0aCkgewogICAgICB0aGlzLmRvYyA9IHQ0LCB0aGlzLmxlbmd0aCA9IGU1LCB0aGlzLmN1cnNvclBvcyA9IDAsIHRoaXMuc3RyaW5nID0gIiIsIHRoaXMuY3Vyc29yID0gdDQuaXRlcigpOwogICAgfQogICAgc3luY1RvKHQ0KSB7CiAgICAgIHJldHVybiB0aGlzLnN0cmluZyA9IHRoaXMuY3Vyc29yLm5leHQodDQgLSB0aGlzLmN1cnNvclBvcykudmFsdWUsIHRoaXMuY3Vyc29yUG9zID0gdDQgKyB0aGlzLnN0cmluZy5sZW5ndGgsIHRoaXMuY3Vyc29yUG9zIC0gdGhpcy5zdHJpbmcubGVuZ3RoOwogICAgfQogICAgY2h1bmsodDQpIHsKICAgICAgcmV0dXJuIHRoaXMuc3luY1RvKHQ0KSwgdGhpcy5zdHJpbmc7CiAgICB9CiAgICBnZXQgbGluZUNodW5rcygpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZWFkKHQ0LCBlNSkgewogICAgICBsZXQgcjMgPSB0aGlzLmN1cnNvclBvcyAtIHRoaXMuc3RyaW5nLmxlbmd0aDsKICAgICAgcmV0dXJuIHQ0IDwgcjMgfHwgZTUgPj0gdGhpcy5jdXJzb3JQb3MgPyB0aGlzLmRvYy5zbGljZVN0cmluZyh0NCwgZTUpIDogdGhpcy5zdHJpbmcuc2xpY2UodDQgLSByMywgZTUgLSByMyk7CiAgICB9CiAgfTsKICB2YXIgSTExID0gbnVsbDsKICB2YXIgeDYgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIHIzID0gW10sIGk0LCBzOCwgbzQsIGw3LCBhNCkgewogICAgICB0aGlzLnBhcnNlciA9IHQ0LCB0aGlzLnN0YXRlID0gZTUsIHRoaXMuZnJhZ21lbnRzID0gcjMsIHRoaXMudHJlZSA9IGk0LCB0aGlzLnRyZWVMZW4gPSBzOCwgdGhpcy52aWV3cG9ydCA9IG80LCB0aGlzLnNraXBwZWQgPSBsNywgdGhpcy5zY2hlZHVsZU9uID0gYTQsIHRoaXMucGFyc2UgPSBudWxsLCB0aGlzLnRlbXBTa2lwcGVkID0gW107CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlKHQ0LCBlNSwgcjMpIHsKICAgICAgcmV0dXJuIG5ldyB4Nih0NCwgZTUsIFtdLCBQMy5lbXB0eSwgMCwgcjMsIFtdLCBudWxsKTsKICAgIH0KICAgIHN0YXJ0UGFyc2UoKSB7CiAgICAgIHJldHVybiB0aGlzLnBhcnNlci5zdGFydFBhcnNlKG5ldyBldDUodGhpcy5zdGF0ZS5kb2MpLCB0aGlzLmZyYWdtZW50cyk7CiAgICB9CiAgICB3b3JrKHQ0LCBlNSkgewogICAgICByZXR1cm4gZTUgIT0gbnVsbCAmJiBlNSA+PSB0aGlzLnN0YXRlLmRvYy5sZW5ndGggJiYgKGU1ID0gdm9pZCAwKSwgdGhpcy50cmVlICE9IFAzLmVtcHR5ICYmIHRoaXMuaXNEb25lKGU1ID8/IHRoaXMuc3RhdGUuZG9jLmxlbmd0aCkgPyAodGhpcy50YWtlVHJlZSgpLCB0cnVlKSA6IHRoaXMud2l0aENvbnRleHQoKCkgPT4gewogICAgICAgIHZhciByMzsKICAgICAgICBpZiAodHlwZW9mIHQ0ID09ICJudW1iZXIiKSB7CiAgICAgICAgICBsZXQgaTQgPSBEYXRlLm5vdygpICsgdDQ7CiAgICAgICAgICB0NCA9ICgpID0+IERhdGUubm93KCkgPiBpNDsKICAgICAgICB9CiAgICAgICAgZm9yICh0aGlzLnBhcnNlIHx8ICh0aGlzLnBhcnNlID0gdGhpcy5zdGFydFBhcnNlKCkpLCBlNSAhPSBudWxsICYmICh0aGlzLnBhcnNlLnN0b3BwZWRBdCA9PSBudWxsIHx8IHRoaXMucGFyc2Uuc3RvcHBlZEF0ID4gZTUpICYmIGU1IDwgdGhpcy5zdGF0ZS5kb2MubGVuZ3RoICYmIHRoaXMucGFyc2Uuc3RvcEF0KGU1KTsgOyApIHsKICAgICAgICAgIGxldCBpNCA9IHRoaXMucGFyc2UuYWR2YW5jZSgpOwogICAgICAgICAgaWYgKGk0KQogICAgICAgICAgICBpZiAodGhpcy5mcmFnbWVudHMgPSB0aGlzLndpdGhvdXRUZW1wU2tpcHBlZChHNS5hZGRUcmVlKGk0LCB0aGlzLmZyYWdtZW50cywgdGhpcy5wYXJzZS5zdG9wcGVkQXQgIT0gbnVsbCkpLCB0aGlzLnRyZWVMZW4gPSAocjMgPSB0aGlzLnBhcnNlLnN0b3BwZWRBdCkgIT09IG51bGwgJiYgcjMgIT09IHZvaWQgMCA/IHIzIDogdGhpcy5zdGF0ZS5kb2MubGVuZ3RoLCB0aGlzLnRyZWUgPSBpNCwgdGhpcy5wYXJzZSA9IG51bGwsIHRoaXMudHJlZUxlbiA8IChlNSA/PyB0aGlzLnN0YXRlLmRvYy5sZW5ndGgpKQogICAgICAgICAgICAgIHRoaXMucGFyc2UgPSB0aGlzLnN0YXJ0UGFyc2UoKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgaWYgKHQ0KCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGFrZVRyZWUoKSB7CiAgICAgIGxldCB0NCwgZTU7CiAgICAgIHRoaXMucGFyc2UgJiYgKHQ0ID0gdGhpcy5wYXJzZS5wYXJzZWRQb3MpID49IHRoaXMudHJlZUxlbiAmJiAoKHRoaXMucGFyc2Uuc3RvcHBlZEF0ID09IG51bGwgfHwgdGhpcy5wYXJzZS5zdG9wcGVkQXQgPiB0NCkgJiYgdGhpcy5wYXJzZS5zdG9wQXQodDQpLCB0aGlzLndpdGhDb250ZXh0KCgpID0+IHsKICAgICAgICBmb3IgKDsgIShlNSA9IHRoaXMucGFyc2UuYWR2YW5jZSgpKTsgKQogICAgICAgICAgOwogICAgICB9KSwgdGhpcy50cmVlTGVuID0gdDQsIHRoaXMudHJlZSA9IGU1LCB0aGlzLmZyYWdtZW50cyA9IHRoaXMud2l0aG91dFRlbXBTa2lwcGVkKEc1LmFkZFRyZWUodGhpcy50cmVlLCB0aGlzLmZyYWdtZW50cywgdHJ1ZSkpLCB0aGlzLnBhcnNlID0gbnVsbCk7CiAgICB9CiAgICB3aXRoQ29udGV4dCh0NCkgewogICAgICBsZXQgZTUgPSBJMTE7CiAgICAgIEkxMSA9IHRoaXM7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHQ0KCk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgSTExID0gZTU7CiAgICAgIH0KICAgIH0KICAgIHdpdGhvdXRUZW1wU2tpcHBlZCh0NCkgewogICAgICBmb3IgKGxldCBlNTsgZTUgPSB0aGlzLnRlbXBTa2lwcGVkLnBvcCgpOyApCiAgICAgICAgdDQgPSBjdDYodDQsIGU1LmZyb20sIGU1LnRvKTsKICAgICAgcmV0dXJuIHQ0OwogICAgfQogICAgY2hhbmdlcyh0NCwgZTUpIHsKICAgICAgbGV0IHsgZnJhZ21lbnRzOiByMywgdHJlZTogaTQsIHRyZWVMZW46IHM4LCB2aWV3cG9ydDogbzQsIHNraXBwZWQ6IGw3IH0gPSB0aGlzOwogICAgICBpZiAodGhpcy50YWtlVHJlZSgpLCAhdDQuZW1wdHkpIHsKICAgICAgICBsZXQgYTQgPSBbXTsKICAgICAgICBpZiAodDQuaXRlckNoYW5nZWRSYW5nZXMoKGgxMCwgdTExLCBkMTUsIGcxMikgPT4gYTQucHVzaCh7IGZyb21BOiBoMTAsIHRvQTogdTExLCBmcm9tQjogZDE1LCB0b0I6IGcxMiB9KSksIHIzID0gRzUuYXBwbHlDaGFuZ2VzKHIzLCBhNCksIGk0ID0gUDMuZW1wdHksIHM4ID0gMCwgbzQgPSB7IGZyb206IHQ0Lm1hcFBvcyhvNC5mcm9tLCAtMSksIHRvOiB0NC5tYXBQb3MobzQudG8sIDEpIH0sIHRoaXMuc2tpcHBlZC5sZW5ndGgpIHsKICAgICAgICAgIGw3ID0gW107CiAgICAgICAgICBmb3IgKGxldCBoMTAgb2YgdGhpcy5za2lwcGVkKSB7CiAgICAgICAgICAgIGxldCB1MTEgPSB0NC5tYXBQb3MoaDEwLmZyb20sIDEpLCBkMTUgPSB0NC5tYXBQb3MoaDEwLnRvLCAtMSk7CiAgICAgICAgICAgIHUxMSA8IGQxNSAmJiBsNy5wdXNoKHsgZnJvbTogdTExLCB0bzogZDE1IH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbmV3IHg2KHRoaXMucGFyc2VyLCBlNSwgcjMsIGk0LCBzOCwgbzQsIGw3LCB0aGlzLnNjaGVkdWxlT24pOwogICAgfQogICAgdXBkYXRlVmlld3BvcnQodDQpIHsKICAgICAgaWYgKHRoaXMudmlld3BvcnQuZnJvbSA9PSB0NC5mcm9tICYmIHRoaXMudmlld3BvcnQudG8gPT0gdDQudG8pCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB0aGlzLnZpZXdwb3J0ID0gdDQ7CiAgICAgIGxldCBlNSA9IHRoaXMuc2tpcHBlZC5sZW5ndGg7CiAgICAgIGZvciAobGV0IHIzID0gMDsgcjMgPCB0aGlzLnNraXBwZWQubGVuZ3RoOyByMysrKSB7CiAgICAgICAgbGV0IHsgZnJvbTogaTQsIHRvOiBzOCB9ID0gdGhpcy5za2lwcGVkW3IzXTsKICAgICAgICBpNCA8IHQ0LnRvICYmIHM4ID4gdDQuZnJvbSAmJiAodGhpcy5mcmFnbWVudHMgPSBjdDYodGhpcy5mcmFnbWVudHMsIGk0LCBzOCksIHRoaXMuc2tpcHBlZC5zcGxpY2UocjMtLSwgMSkpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnNraXBwZWQubGVuZ3RoID49IGU1ID8gZmFsc2UgOiAodGhpcy5yZXNldCgpLCB0cnVlKTsKICAgIH0KICAgIHJlc2V0KCkgewogICAgICB0aGlzLnBhcnNlICYmICh0aGlzLnRha2VUcmVlKCksIHRoaXMucGFyc2UgPSBudWxsKTsKICAgIH0KICAgIHNraXBVbnRpbEluVmlldyh0NCwgZTUpIHsKICAgICAgdGhpcy5za2lwcGVkLnB1c2goeyBmcm9tOiB0NCwgdG86IGU1IH0pOwogICAgfQogICAgc3RhdGljIGdldFNraXBwaW5nUGFyc2VyKHQ0KSB7CiAgICAgIHJldHVybiBuZXcgY2xhc3MgZXh0ZW5kcyB5ZTUgewogICAgICAgIGNyZWF0ZVBhcnNlKGU1LCByMywgaTQpIHsKICAgICAgICAgIGxldCBzOCA9IGk0WzBdLmZyb20sIG80ID0gaTRbaTQubGVuZ3RoIC0gMV0udG87CiAgICAgICAgICByZXR1cm4geyBwYXJzZWRQb3M6IHM4LCBhZHZhbmNlKCkgewogICAgICAgICAgICBsZXQgYTQgPSBJMTE7CiAgICAgICAgICAgIGlmIChhNCkgewogICAgICAgICAgICAgIGZvciAobGV0IGgxMCBvZiBpNCkKICAgICAgICAgICAgICAgIGE0LnRlbXBTa2lwcGVkLnB1c2goaDEwKTsKICAgICAgICAgICAgICB0NCAmJiAoYTQuc2NoZWR1bGVPbiA9IGE0LnNjaGVkdWxlT24gPyBQcm9taXNlLmFsbChbYTQuc2NoZWR1bGVPbiwgdDRdKSA6IHQ0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZWRQb3MgPSBvNCwgbmV3IFAzKE4zLm5vbmUsIFtdLCBbXSwgbzQgLSBzOCk7CiAgICAgICAgICB9LCBzdG9wcGVkQXQ6IG51bGwsIHN0b3BBdCgpIHsKICAgICAgICAgIH0gfTsKICAgICAgICB9CiAgICAgIH0oKTsKICAgIH0KICAgIGlzRG9uZSh0NCkgewogICAgICB0NCA9IE1hdGgubWluKHQ0LCB0aGlzLnN0YXRlLmRvYy5sZW5ndGgpOwogICAgICBsZXQgZTUgPSB0aGlzLmZyYWdtZW50czsKICAgICAgcmV0dXJuIHRoaXMudHJlZUxlbiA+PSB0NCAmJiBlNS5sZW5ndGggJiYgZTVbMF0uZnJvbSA9PSAwICYmIGU1WzBdLnRvID49IHQ0OwogICAgfQogICAgc3RhdGljIGdldCgpIHsKICAgICAgcmV0dXJuIEkxMTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGN0NihuOCwgdDQsIGU1KSB7CiAgICByZXR1cm4gRzUuYXBwbHlDaGFuZ2VzKG44LCBbeyBmcm9tQTogdDQsIHRvQTogZTUsIGZyb21COiB0NCwgdG9COiBlNSB9XSk7CiAgfQogIHZhciBTOCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHRoaXMuY29udGV4dCA9IHQ0LCB0aGlzLnRyZWUgPSB0NC50cmVlOwogICAgfQogICAgYXBwbHkodDQpIHsKICAgICAgaWYgKCF0NC5kb2NDaGFuZ2VkICYmIHRoaXMudHJlZSA9PSB0aGlzLmNvbnRleHQudHJlZSkKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgbGV0IGU1ID0gdGhpcy5jb250ZXh0LmNoYW5nZXModDQuY2hhbmdlcywgdDQuc3RhdGUpLCByMyA9IHRoaXMuY29udGV4dC50cmVlTGVuID09IHQ0LnN0YXJ0U3RhdGUuZG9jLmxlbmd0aCA/IHZvaWQgMCA6IE1hdGgubWF4KHQ0LmNoYW5nZXMubWFwUG9zKHRoaXMuY29udGV4dC50cmVlTGVuKSwgZTUudmlld3BvcnQudG8pOwogICAgICByZXR1cm4gZTUud29yaygyMCwgcjMpIHx8IGU1LnRha2VUcmVlKCksIG5ldyBTOChlNSk7CiAgICB9CiAgICBzdGF0aWMgaW5pdCh0NCkgewogICAgICBsZXQgZTUgPSBNYXRoLm1pbigzZTMsIHQ0LmRvYy5sZW5ndGgpLCByMyA9IHg2LmNyZWF0ZSh0NC5mYWNldChQMTIpLnBhcnNlciwgdDQsIHsgZnJvbTogMCwgdG86IGU1IH0pOwogICAgICByZXR1cm4gcjMud29yaygyMCwgZTUpIHx8IHIzLnRha2VUcmVlKCksIG5ldyBTOChyMyk7CiAgICB9CiAgfTsKICBjNi5zdGF0ZSA9IEoyLmRlZmluZSh7IGNyZWF0ZTogUzguaW5pdCwgdXBkYXRlKG44LCB0NCkgewogICAgZm9yIChsZXQgZTUgb2YgdDQuZWZmZWN0cykKICAgICAgaWYgKGU1LmlzKGM2LnNldFN0YXRlKSkKICAgICAgICByZXR1cm4gZTUudmFsdWU7CiAgICByZXR1cm4gdDQuc3RhcnRTdGF0ZS5mYWNldChQMTIpICE9IHQ0LnN0YXRlLmZhY2V0KFAxMikgPyBTOC5pbml0KHQ0LnN0YXRlKSA6IG44LmFwcGx5KHQ0KTsKICB9IH0pOwogIHZhciB4dDYgPSAobjgpID0+IHsKICAgIGxldCB0NCA9IHNldFRpbWVvdXQoKCkgPT4gbjgoKSwgNTAwKTsKICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodDQpOwogIH07CiAgdHlwZW9mIHJlcXVlc3RJZGxlQ2FsbGJhY2sgPCAidSIgJiYgKHh0NiA9IChuOCkgPT4gewogICAgbGV0IHQ0ID0gLTEsIGU1ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHQ0ID0gcmVxdWVzdElkbGVDYWxsYmFjayhuOCwgeyB0aW1lb3V0OiA1MDAgLSAxMDAgfSk7CiAgICB9LCAxMDApOwogICAgcmV0dXJuICgpID0+IHQ0IDwgMCA/IGNsZWFyVGltZW91dChlNSkgOiBjYW5jZWxJZGxlQ2FsbGJhY2sodDQpOwogIH0pOwogIHZhciBaOCA9IHR5cGVvZiBuYXZpZ2F0b3IgPCAidSIgJiYgKChZMTMgPSBuYXZpZ2F0b3Iuc2NoZWR1bGluZykgPT09IG51bGwgfHwgWTEzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBZMTMuaXNJbnB1dFBlbmRpbmcpID8gKCkgPT4gbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcoKSA6IG51bGw7CiAgdmFyIFN0NSA9IFY0LmZyb21DbGFzcyhjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICB0aGlzLnZpZXcgPSB0NCwgdGhpcy53b3JraW5nID0gbnVsbCwgdGhpcy53b3JrU2NoZWR1bGVkID0gMCwgdGhpcy5jaHVua0VuZCA9IC0xLCB0aGlzLmNodW5rQnVkZ2V0ID0gLTEsIHRoaXMud29yayA9IHRoaXMud29yay5iaW5kKHRoaXMpLCB0aGlzLnNjaGVkdWxlV29yaygpOwogICAgfQogICAgdXBkYXRlKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMudmlldy5zdGF0ZS5maWVsZChjNi5zdGF0ZSkuY29udGV4dDsKICAgICAgKGU1LnVwZGF0ZVZpZXdwb3J0KHQ0LnZpZXcudmlld3BvcnQpIHx8IHRoaXMudmlldy52aWV3cG9ydC50byA+IGU1LnRyZWVMZW4pICYmIHRoaXMuc2NoZWR1bGVXb3JrKCksIHQ0LmRvY0NoYW5nZWQgJiYgKHRoaXMudmlldy5oYXNGb2N1cyAmJiAodGhpcy5jaHVua0J1ZGdldCArPSA1MCksIHRoaXMuc2NoZWR1bGVXb3JrKCkpLCB0aGlzLmNoZWNrQXN5bmNTY2hlZHVsZShlNSk7CiAgICB9CiAgICBzY2hlZHVsZVdvcmsoKSB7CiAgICAgIGlmICh0aGlzLndvcmtpbmcpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgeyBzdGF0ZTogdDQgfSA9IHRoaXMudmlldywgZTUgPSB0NC5maWVsZChjNi5zdGF0ZSk7CiAgICAgIChlNS50cmVlICE9IGU1LmNvbnRleHQudHJlZSB8fCAhZTUuY29udGV4dC5pc0RvbmUodDQuZG9jLmxlbmd0aCkpICYmICh0aGlzLndvcmtpbmcgPSB4dDYodGhpcy53b3JrKSk7CiAgICB9CiAgICB3b3JrKHQ0KSB7CiAgICAgIHRoaXMud29ya2luZyA9IG51bGw7CiAgICAgIGxldCBlNSA9IERhdGUubm93KCk7CiAgICAgIGlmICh0aGlzLmNodW5rRW5kIDwgZTUgJiYgKHRoaXMuY2h1bmtFbmQgPCAwIHx8IHRoaXMudmlldy5oYXNGb2N1cykgJiYgKHRoaXMuY2h1bmtFbmQgPSBlNSArIDNlNCwgdGhpcy5jaHVua0J1ZGdldCA9IDNlMyksIHRoaXMuY2h1bmtCdWRnZXQgPD0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGxldCB7IHN0YXRlOiByMywgdmlld3BvcnQ6IHsgdG86IGk0IH0gfSA9IHRoaXMudmlldywgczggPSByMy5maWVsZChjNi5zdGF0ZSk7CiAgICAgIGlmIChzOC50cmVlID09IHM4LmNvbnRleHQudHJlZSAmJiBzOC5jb250ZXh0LmlzRG9uZShpNCArIDFlNSkpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgbzQgPSBEYXRlLm5vdygpICsgTWF0aC5taW4odGhpcy5jaHVua0J1ZGdldCwgMTAwLCB0NCAmJiAhWjggPyBNYXRoLm1heCgyNSwgdDQudGltZVJlbWFpbmluZygpIC0gNSkgOiAxZTkpLCBsNyA9IHM4LmNvbnRleHQudHJlZUxlbiA8IGk0ICYmIHIzLmRvYy5sZW5ndGggPiBpNCArIDFlMywgYTQgPSBzOC5jb250ZXh0LndvcmsoKCkgPT4gWjggJiYgWjgoKSB8fCBEYXRlLm5vdygpID4gbzQsIGk0ICsgKGw3ID8gMCA6IDFlNSkpOwogICAgICB0aGlzLmNodW5rQnVkZ2V0IC09IERhdGUubm93KCkgLSBlNSwgKGE0IHx8IHRoaXMuY2h1bmtCdWRnZXQgPD0gMCkgJiYgKHM4LmNvbnRleHQudGFrZVRyZWUoKSwgdGhpcy52aWV3LmRpc3BhdGNoKHsgZWZmZWN0czogYzYuc2V0U3RhdGUub2YobmV3IFM4KHM4LmNvbnRleHQpKSB9KSksIHRoaXMuY2h1bmtCdWRnZXQgPiAwICYmICEoYTQgJiYgIWw3KSAmJiB0aGlzLnNjaGVkdWxlV29yaygpLCB0aGlzLmNoZWNrQXN5bmNTY2hlZHVsZShzOC5jb250ZXh0KTsKICAgIH0KICAgIGNoZWNrQXN5bmNTY2hlZHVsZSh0NCkgewogICAgICB0NC5zY2hlZHVsZU9uICYmICh0aGlzLndvcmtTY2hlZHVsZWQrKywgdDQuc2NoZWR1bGVPbi50aGVuKCgpID0+IHRoaXMuc2NoZWR1bGVXb3JrKCkpLmNhdGNoKChlNSkgPT4gbnQyKHRoaXMudmlldy5zdGF0ZSwgZTUpKS50aGVuKCgpID0+IHRoaXMud29ya1NjaGVkdWxlZC0tKSwgdDQuc2NoZWR1bGVPbiA9IG51bGwpOwogICAgfQogICAgZGVzdHJveSgpIHsKICAgICAgdGhpcy53b3JraW5nICYmIHRoaXMud29ya2luZygpOwogICAgfQogICAgaXNXb3JraW5nKCkgewogICAgICByZXR1cm4gISEodGhpcy53b3JraW5nIHx8IHRoaXMud29ya1NjaGVkdWxlZCA+IDApOwogICAgfQogIH0sIHsgZXZlbnRIYW5kbGVyczogeyBmb2N1cygpIHsKICAgIHRoaXMuc2NoZWR1bGVXb3JrKCk7CiAgfSB9IH0pOwogIHZhciBQMTIgPSBBMi5kZWZpbmUoeyBjb21iaW5lKG44KSB7CiAgICByZXR1cm4gbjgubGVuZ3RoID8gbjhbMF0gOiBudWxsOwogIH0sIGVuYWJsZXM6IFtjNi5zdGF0ZSwgU3Q1XSB9KTsKICB2YXIgUHQ2ID0gQTIuZGVmaW5lKCk7CiAgdmFyIEF0NSA9IEEyLmRlZmluZSh7IGNvbWJpbmU6IChuOCkgPT4gewogICAgaWYgKCFuOC5sZW5ndGgpCiAgICAgIHJldHVybiAiICAiOwogICAgaWYgKCEvXig/OiArfFx0KykkLy50ZXN0KG44WzBdKSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGluZGVudCB1bml0OiAiICsgSlNPTi5zdHJpbmdpZnkobjhbMF0pKTsKICAgIHJldHVybiBuOFswXTsKICB9IH0pOwogIHZhciByZTkgPSBuZXcgdzMoKTsKICB2YXIgdWU5ID0gQTIuZGVmaW5lKCk7CiAgdmFyIGNlOCA9IG5ldyB3MygpOwogIGZ1bmN0aW9uIE90NihuOCwgdDQpIHsKICAgIGxldCBlNSA9IHQ0Lm1hcFBvcyhuOC5mcm9tLCAxKSwgcjMgPSB0NC5tYXBQb3MobjgudG8sIC0xKTsKICAgIHJldHVybiBlNSA+PSByMyA/IHZvaWQgMCA6IHsgZnJvbTogZTUsIHRvOiByMyB9OwogIH0KICB2YXIgXzEwID0geS5kZWZpbmUoeyBtYXA6IE90NiB9KTsKICB2YXIgUjEwID0geS5kZWZpbmUoeyBtYXA6IE90NiB9KTsKICB2YXIgQTkgPSBKMi5kZWZpbmUoeyBjcmVhdGUoKSB7CiAgICByZXR1cm4gay5ub25lOwogIH0sIHVwZGF0ZShuOCwgdDQpIHsKICAgIG44ID0gbjgubWFwKHQ0LmNoYW5nZXMpOwogICAgZm9yIChsZXQgZTUgb2YgdDQuZWZmZWN0cykKICAgICAgZTUuaXMoXzEwKSAmJiAhbWUxMChuOCwgZTUudmFsdWUuZnJvbSwgZTUudmFsdWUudG8pID8gbjggPSBuOC51cGRhdGUoeyBhZGQ6IFtwdDYucmFuZ2UoZTUudmFsdWUuZnJvbSwgZTUudmFsdWUudG8pXSB9KSA6IGU1LmlzKFIxMCkgJiYgKG44ID0gbjgudXBkYXRlKHsgZmlsdGVyOiAocjMsIGk0KSA9PiBlNS52YWx1ZS5mcm9tICE9IHIzIHx8IGU1LnZhbHVlLnRvICE9IGk0LCBmaWx0ZXJGcm9tOiBlNS52YWx1ZS5mcm9tLCBmaWx0ZXJUbzogZTUudmFsdWUudG8gfSkpOwogICAgaWYgKHQ0LnNlbGVjdGlvbikgewogICAgICBsZXQgZTUgPSBmYWxzZSwgeyBoZWFkOiByMyB9ID0gdDQuc2VsZWN0aW9uLm1haW47CiAgICAgIG44LmJldHdlZW4ocjMsIHIzLCAoaTQsIHM4KSA9PiB7CiAgICAgICAgaTQgPCByMyAmJiBzOCA+IHIzICYmIChlNSA9IHRydWUpOwogICAgICB9KSwgZTUgJiYgKG44ID0gbjgudXBkYXRlKHsgZmlsdGVyRnJvbTogcjMsIGZpbHRlclRvOiByMywgZmlsdGVyOiAoaTQsIHM4KSA9PiBzOCA8PSByMyB8fCBpNCA+PSByMyB9KSk7CiAgICB9CiAgICByZXR1cm4gbjg7CiAgfSwgcHJvdmlkZTogKG44KSA9PiBNMi5kZWNvcmF0aW9ucy5mcm9tKG44KSwgdG9KU09OKG44LCB0NCkgewogICAgbGV0IGU1ID0gW107CiAgICByZXR1cm4gbjguYmV0d2VlbigwLCB0NC5kb2MubGVuZ3RoLCAocjMsIGk0KSA9PiB7CiAgICAgIGU1LnB1c2gocjMsIGk0KTsKICAgIH0pLCBlNTsKICB9LCBmcm9tSlNPTihuOCkgewogICAgaWYgKCFBcnJheS5pc0FycmF5KG44KSB8fCBuOC5sZW5ndGggJSAyKQogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBKU09OIGZvciBmb2xkIHN0YXRlIik7CiAgICBsZXQgdDQgPSBbXTsKICAgIGZvciAobGV0IGU1ID0gMDsgZTUgPCBuOC5sZW5ndGg7ICkgewogICAgICBsZXQgcjMgPSBuOFtlNSsrXSwgaTQgPSBuOFtlNSsrXTsKICAgICAgaWYgKHR5cGVvZiByMyAhPSAibnVtYmVyIiB8fCB0eXBlb2YgaTQgIT0gIm51bWJlciIpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgSlNPTiBmb3IgZm9sZCBzdGF0ZSIpOwogICAgICB0NC5wdXNoKHB0Ni5yYW5nZShyMywgaTQpKTsKICAgIH0KICAgIHJldHVybiBrLnNldCh0NCwgdHJ1ZSk7CiAgfSB9KTsKICBmdW5jdGlvbiB6MTEobjgsIHQ0LCBlNSkgewogICAgdmFyIHIzOwogICAgbGV0IGk0ID0gbnVsbDsKICAgIHJldHVybiAocjMgPSBuOC5maWVsZChBOSwgZmFsc2UpKSA9PT0gbnVsbCB8fCByMyA9PT0gdm9pZCAwIHx8IHIzLmJldHdlZW4odDQsIGU1LCAoczgsIG80KSA9PiB7CiAgICAgICghaTQgfHwgaTQuZnJvbSA+IHM4KSAmJiAoaTQgPSB7IGZyb206IHM4LCB0bzogbzQgfSk7CiAgICB9KSwgaTQ7CiAgfQogIGZ1bmN0aW9uIG1lMTAobjgsIHQ0LCBlNSkgewogICAgbGV0IHIzID0gZmFsc2U7CiAgICByZXR1cm4gbjguYmV0d2Vlbih0NCwgdDQsIChpNCwgczgpID0+IHsKICAgICAgaTQgPT0gdDQgJiYgczggPT0gZTUgJiYgKHIzID0gdHJ1ZSk7CiAgICB9KSwgcjM7CiAgfQogIHZhciB5ZTEwID0geyBwbGFjZWhvbGRlckRPTTogbnVsbCwgcGxhY2Vob2xkZXJUZXh0OiAiXHUyMDI2IiB9OwogIHZhciBFdDUgPSBBMi5kZWZpbmUoeyBjb21iaW5lKG44KSB7CiAgICByZXR1cm4gaHQobjgsIHllMTApOwogIH0gfSk7CiAgdmFyIHB0NiA9IGsucmVwbGFjZSh7IHdpZGdldDogbmV3IGNsYXNzIGV4dGVuZHMgWDQgewogICAgdG9ET00objgpIHsKICAgICAgbGV0IHsgc3RhdGU6IHQ0IH0gPSBuOCwgZTUgPSB0NC5mYWNldChFdDUpLCByMyA9IChzOCkgPT4gewogICAgICAgIGxldCBvNCA9IG44LmxpbmVCbG9ja0F0KG44LnBvc0F0RE9NKHM4LnRhcmdldCkpLCBsNyA9IHoxMShuOC5zdGF0ZSwgbzQuZnJvbSwgbzQudG8pOwogICAgICAgIGw3ICYmIG44LmRpc3BhdGNoKHsgZWZmZWN0czogUjEwLm9mKGw3KSB9KSwgczgucHJldmVudERlZmF1bHQoKTsKICAgICAgfTsKICAgICAgaWYgKGU1LnBsYWNlaG9sZGVyRE9NKQogICAgICAgIHJldHVybiBlNS5wbGFjZWhvbGRlckRPTShuOCwgcjMpOwogICAgICBsZXQgaTQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgIHJldHVybiBpNC50ZXh0Q29udGVudCA9IGU1LnBsYWNlaG9sZGVyVGV4dCwgaTQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwgdDQucGhyYXNlKCJmb2xkZWQgY29kZSIpKSwgaTQudGl0bGUgPSB0NC5waHJhc2UoInVuZm9sZCIpLCBpNC5jbGFzc05hbWUgPSAiY20tZm9sZFBsYWNlaG9sZGVyIiwgaTQub25jbGljayA9IHIzLCBpNDsKICAgIH0KICB9KCkgfSk7CiAgdmFyIHhlOCA9IE0yLmJhc2VUaGVtZSh7ICIuY20tZm9sZFBsYWNlaG9sZGVyIjogeyBiYWNrZ3JvdW5kQ29sb3I6ICIjZWVlIiwgYm9yZGVyOiAiMXB4IHNvbGlkICNkZGQiLCBjb2xvcjogIiM4ODgiLCBib3JkZXJSYWRpdXM6ICIuMmVtIiwgbWFyZ2luOiAiMCAxcHgiLCBwYWRkaW5nOiAiMCAxcHgiLCBjdXJzb3I6ICJwb2ludGVyIiB9LCAiLmNtLWZvbGRHdXR0ZXIgc3BhbiI6IHsgcGFkZGluZzogIjAgMXB4IiwgY3Vyc29yOiAicG9pbnRlciIgfSB9KTsKICB2YXIgRDggPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUpIHsKICAgICAgbGV0IHIzOwogICAgICBmdW5jdGlvbiBpNChsNykgewogICAgICAgIGxldCBhNCA9IFQxMi5uZXdOYW1lKCk7CiAgICAgICAgcmV0dXJuIChyMyB8fCAocjMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSkpWyIuIiArIGE0XSA9IGw3LCBhNDsKICAgICAgfQogICAgICBsZXQgczggPSB0eXBlb2YgZTUuYWxsID09ICJzdHJpbmciID8gZTUuYWxsIDogZTUuYWxsID8gaTQoZTUuYWxsKSA6IHZvaWQgMCwgbzQgPSBlNS5zY29wZTsKICAgICAgdGhpcy5zY29wZSA9IG80IGluc3RhbmNlb2YgYzYgPyAobDcpID0+IGw3LnByb3AoVDEzKSA9PSBvNC5kYXRhIDogbzQgPyAobDcpID0+IGw3ID09IG80IDogdm9pZCAwLCB0aGlzLnN0eWxlID0gVzcodDQubWFwKChsNykgPT4gKHsgdGFnOiBsNy50YWcsIGNsYXNzOiBsNy5jbGFzcyB8fCBpNChPYmplY3QuYXNzaWduKHt9LCBsNywgeyB0YWc6IG51bGwgfSkpIH0pKSwgeyBhbGw6IHM4IH0pLnN0eWxlLCB0aGlzLm1vZHVsZSA9IHIzID8gbmV3IFQxMihyMykgOiBudWxsLCB0aGlzLnRoZW1lVHlwZSA9IGU1LnRoZW1lVHlwZTsKICAgIH0KICAgIHN0YXRpYyBkZWZpbmUodDQsIGU1KSB7CiAgICAgIHJldHVybiBuZXcgRDgodDQsIGU1IHx8IHt9KTsKICAgIH0KICB9OwogIHZhciBudDcgPSBBMi5kZWZpbmUoKTsKICB2YXIgUnQ2ID0gQTIuZGVmaW5lKHsgY29tYmluZShuOCkgewogICAgcmV0dXJuIG44Lmxlbmd0aCA/IFtuOFswXV0gOiBudWxsOwogIH0gfSk7CiAgZnVuY3Rpb24gTDgobjgpIHsKICAgIGxldCB0NCA9IG44LmZhY2V0KG50Nyk7CiAgICByZXR1cm4gdDQubGVuZ3RoID8gdDQgOiBuOC5mYWNldChSdDYpOwogIH0KICB2YXIgcnQ3ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgdGhpcy5tYXJrQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgdGhpcy50cmVlID0gbTExKHQ0LnN0YXRlKSwgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuYnVpbGREZWNvKHQ0LCBMOCh0NC5zdGF0ZSkpOwogICAgfQogICAgdXBkYXRlKHQ0KSB7CiAgICAgIGxldCBlNSA9IG0xMSh0NC5zdGF0ZSksIHIzID0gTDgodDQuc3RhdGUpLCBpNCA9IHIzICE9IEw4KHQ0LnN0YXJ0U3RhdGUpOwogICAgICBlNS5sZW5ndGggPCB0NC52aWV3LnZpZXdwb3J0LnRvICYmICFpNCAmJiBlNS50eXBlID09IHRoaXMudHJlZS50eXBlID8gdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuZGVjb3JhdGlvbnMubWFwKHQ0LmNoYW5nZXMpIDogKGU1ICE9IHRoaXMudHJlZSB8fCB0NC52aWV3cG9ydENoYW5nZWQgfHwgaTQpICYmICh0aGlzLnRyZWUgPSBlNSwgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuYnVpbGREZWNvKHQ0LnZpZXcsIHIzKSk7CiAgICB9CiAgICBidWlsZERlY28odDQsIGU1KSB7CiAgICAgIGlmICghZTUgfHwgIXRoaXMudHJlZS5sZW5ndGgpCiAgICAgICAgcmV0dXJuIGsubm9uZTsKICAgICAgbGV0IHIzID0gbmV3IFoyKCk7CiAgICAgIGZvciAobGV0IHsgZnJvbTogaTQsIHRvOiBzOCB9IG9mIHQ0LnZpc2libGVSYW5nZXMpCiAgICAgICAgXzkodGhpcy50cmVlLCBlNSwgKG80LCBsNywgYTQpID0+IHsKICAgICAgICAgIHIzLmFkZChvNCwgbDcsIHRoaXMubWFya0NhY2hlW2E0XSB8fCAodGhpcy5tYXJrQ2FjaGVbYTRdID0gay5tYXJrKHsgY2xhc3M6IGE0IH0pKSk7CiAgICAgICAgfSwgaTQsIHM4KTsKICAgICAgcmV0dXJuIHIzLmZpbmlzaCgpOwogICAgfQogIH07CiAgdmFyIFNlOSA9IGx0LmhpZ2goVjQuZnJvbUNsYXNzKHJ0NywgeyBkZWNvcmF0aW9uczogKG44KSA9PiBuOC5kZWNvcmF0aW9ucyB9KSk7CiAgdmFyIHNuNCA9IEQ4LmRlZmluZShbeyB0YWc6IG40Lm1ldGEsIGNvbG9yOiAiIzdhNzU3YSIgfSwgeyB0YWc6IG40LmxpbmssIHRleHREZWNvcmF0aW9uOiAidW5kZXJsaW5lIiB9LCB7IHRhZzogbjQuaGVhZGluZywgdGV4dERlY29yYXRpb246ICJ1bmRlcmxpbmUiLCBmb250V2VpZ2h0OiAiYm9sZCIgfSwgeyB0YWc6IG40LmVtcGhhc2lzLCBmb250U3R5bGU6ICJpdGFsaWMiIH0sIHsgdGFnOiBuNC5zdHJvbmcsIGZvbnRXZWlnaHQ6ICJib2xkIiB9LCB7IHRhZzogbjQuc3RyaWtldGhyb3VnaCwgdGV4dERlY29yYXRpb246ICJsaW5lLXRocm91Z2giIH0sIHsgdGFnOiBuNC5rZXl3b3JkLCBjb2xvcjogIiM3MDgiIH0sIHsgdGFnOiBbbjQuYXRvbSwgbjQuYm9vbCwgbjQudXJsLCBuNC5jb250ZW50U2VwYXJhdG9yLCBuNC5sYWJlbE5hbWVdLCBjb2xvcjogIiMyMTkiIH0sIHsgdGFnOiBbbjQubGl0ZXJhbCwgbjQuaW5zZXJ0ZWRdLCBjb2xvcjogIiMxNjQiIH0sIHsgdGFnOiBbbjQuc3RyaW5nLCBuNC5kZWxldGVkXSwgY29sb3I6ICIjYTExIiB9LCB7IHRhZzogW240LnJlZ2V4cCwgbjQuZXNjYXBlLCBuNC5zcGVjaWFsKG40LnN0cmluZyldLCBjb2xvcjogIiNlNDAiIH0sIHsgdGFnOiBuNC5kZWZpbml0aW9uKG40LnZhcmlhYmxlTmFtZSksIGNvbG9yOiAiIzAwZiIgfSwgeyB0YWc6IG40LmxvY2FsKG40LnZhcmlhYmxlTmFtZSksIGNvbG9yOiAiIzMwYSIgfSwgeyB0YWc6IFtuNC50eXBlTmFtZSwgbjQubmFtZXNwYWNlXSwgY29sb3I6ICIjMDg1IiB9LCB7IHRhZzogbjQuY2xhc3NOYW1lLCBjb2xvcjogIiMxNjciIH0sIHsgdGFnOiBbbjQuc3BlY2lhbChuNC52YXJpYWJsZU5hbWUpLCBuNC5tYWNyb05hbWVdLCBjb2xvcjogIiMyNTYiIH0sIHsgdGFnOiBuNC5kZWZpbml0aW9uKG40LnByb3BlcnR5TmFtZSksIGNvbG9yOiAiIzAwYyIgfSwgeyB0YWc6IG40LmNvbW1lbnQsIGNvbG9yOiAiIzk0MCIgfSwgeyB0YWc6IG40LmludmFsaWQsIGNvbG9yOiAiI2YwMCIgfV0pOwogIHZhciBQZTkgPSBNMi5iYXNlVGhlbWUoeyAiJi5jbS1mb2N1c2VkIC5jbS1tYXRjaGluZ0JyYWNrZXQiOiB7IGJhY2tncm91bmRDb2xvcjogIiMzMjhjODI1MiIgfSwgIiYuY20tZm9jdXNlZCAuY20tbm9ubWF0Y2hpbmdCcmFja2V0IjogeyBiYWNrZ3JvdW5kQ29sb3I6ICIjYmI1NTU1NDQiIH0gfSk7CiAgdmFyIFV0NSA9IDFlNDsKICB2YXIgV3Q2ID0gIigpW117fSI7CiAgdmFyIEx0NSA9IEEyLmRlZmluZSh7IGNvbWJpbmUobjgpIHsKICAgIHJldHVybiBodChuOCwgeyBhZnRlckN1cnNvcjogdHJ1ZSwgYnJhY2tldHM6IFd0NiwgbWF4U2NhbkRpc3RhbmNlOiBVdDUsIHJlbmRlck1hdGNoOiBUZTggfSk7CiAgfSB9KTsKICB2YXIgQWUxMCA9IGsubWFyayh7IGNsYXNzOiAiY20tbWF0Y2hpbmdCcmFja2V0IiB9KTsKICB2YXIgQ2UxMSA9IGsubWFyayh7IGNsYXNzOiAiY20tbm9ubWF0Y2hpbmdCcmFja2V0IiB9KTsKICBmdW5jdGlvbiBUZTgobjgpIHsKICAgIGxldCB0NCA9IFtdLCBlNSA9IG44Lm1hdGNoZWQgPyBBZTEwIDogQ2UxMTsKICAgIHJldHVybiB0NC5wdXNoKGU1LnJhbmdlKG44LnN0YXJ0LmZyb20sIG44LnN0YXJ0LnRvKSksIG44LmVuZCAmJiB0NC5wdXNoKGU1LnJhbmdlKG44LmVuZC5mcm9tLCBuOC5lbmQudG8pKSwgdDQ7CiAgfQogIHZhciBEZTcgPSBKMi5kZWZpbmUoeyBjcmVhdGUoKSB7CiAgICByZXR1cm4gay5ub25lOwogIH0sIHVwZGF0ZShuOCwgdDQpIHsKICAgIGlmICghdDQuZG9jQ2hhbmdlZCAmJiAhdDQuc2VsZWN0aW9uKQogICAgICByZXR1cm4gbjg7CiAgICBsZXQgZTUgPSBbXSwgcjMgPSB0NC5zdGF0ZS5mYWNldChMdDUpOwogICAgZm9yIChsZXQgaTQgb2YgdDQuc3RhdGUuc2VsZWN0aW9uLnJhbmdlcykgewogICAgICBpZiAoIWk0LmVtcHR5KQogICAgICAgIGNvbnRpbnVlOwogICAgICBsZXQgczggPSBVOSh0NC5zdGF0ZSwgaTQuaGVhZCwgLTEsIHIzKSB8fCBpNC5oZWFkID4gMCAmJiBVOSh0NC5zdGF0ZSwgaTQuaGVhZCAtIDEsIDEsIHIzKSB8fCByMy5hZnRlckN1cnNvciAmJiAoVTkodDQuc3RhdGUsIGk0LmhlYWQsIDEsIHIzKSB8fCBpNC5oZWFkIDwgdDQuc3RhdGUuZG9jLmxlbmd0aCAmJiBVOSh0NC5zdGF0ZSwgaTQuaGVhZCArIDEsIC0xLCByMykpOwogICAgICBzOCAmJiAoZTUgPSBlNS5jb25jYXQocjMucmVuZGVyTWF0Y2goczgsIHQ0LnN0YXRlKSkpOwogICAgfQogICAgcmV0dXJuIGsuc2V0KGU1LCB0cnVlKTsKICB9LCBwcm92aWRlOiAobjgpID0+IE0yLmRlY29yYXRpb25zLmZyb20objgpIH0pOwogIGZ1bmN0aW9uIGl0NyhuOCwgdDQsIGU1KSB7CiAgICBsZXQgcjMgPSBuOC5wcm9wKHQ0IDwgMCA/IHczLm9wZW5lZEJ5IDogdzMuY2xvc2VkQnkpOwogICAgaWYgKHIzKQogICAgICByZXR1cm4gcjM7CiAgICBpZiAobjgubmFtZS5sZW5ndGggPT0gMSkgewogICAgICBsZXQgaTQgPSBlNS5pbmRleE9mKG44Lm5hbWUpOwogICAgICBpZiAoaTQgPiAtMSAmJiBpNCAlIDIgPT0gKHQ0IDwgMCA/IDEgOiAwKSkKICAgICAgICByZXR1cm4gW2U1W2k0ICsgdDRdXTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBmdW5jdGlvbiBVOShuOCwgdDQsIGU1LCByMyA9IHt9KSB7CiAgICBsZXQgaTQgPSByMy5tYXhTY2FuRGlzdGFuY2UgfHwgVXQ1LCBzOCA9IHIzLmJyYWNrZXRzIHx8IFd0NiwgbzQgPSBtMTEobjgpLCBsNyA9IG80LnJlc29sdmVJbm5lcih0NCwgZTUpOwogICAgZm9yIChsZXQgYTQgPSBsNzsgYTQ7IGE0ID0gYTQucGFyZW50KSB7CiAgICAgIGxldCBoMTAgPSBpdDcoYTQudHlwZSwgZTUsIHM4KTsKICAgICAgaWYgKGgxMCAmJiBhNC5mcm9tIDwgYTQudG8pCiAgICAgICAgcmV0dXJuIE9lNyhuOCwgdDQsIGU1LCBhNCwgaDEwLCBzOCk7CiAgICB9CiAgICByZXR1cm4gTmU2KG44LCB0NCwgZTUsIG80LCBsNy50eXBlLCBpNCwgczgpOwogIH0KICBmdW5jdGlvbiBPZTcobjgsIHQ0LCBlNSwgcjMsIGk0LCBzOCkgewogICAgbGV0IG80ID0gcjMucGFyZW50LCBsNyA9IHsgZnJvbTogcjMuZnJvbSwgdG86IHIzLnRvIH0sIGE0ID0gMCwgaDEwID0gbzQ/LmN1cnNvcigpOwogICAgaWYgKGgxMCAmJiAoZTUgPCAwID8gaDEwLmNoaWxkQmVmb3JlKHIzLmZyb20pIDogaDEwLmNoaWxkQWZ0ZXIocjMudG8pKSkKICAgICAgZG8KICAgICAgICBpZiAoZTUgPCAwID8gaDEwLnRvIDw9IHIzLmZyb20gOiBoMTAuZnJvbSA+PSByMy50bykgewogICAgICAgICAgaWYgKGE0ID09IDAgJiYgaTQuaW5kZXhPZihoMTAudHlwZS5uYW1lKSA+IC0xICYmIGgxMC5mcm9tIDwgaDEwLnRvKQogICAgICAgICAgICByZXR1cm4geyBzdGFydDogbDcsIGVuZDogeyBmcm9tOiBoMTAuZnJvbSwgdG86IGgxMC50byB9LCBtYXRjaGVkOiB0cnVlIH07CiAgICAgICAgICBpZiAoaXQ3KGgxMC50eXBlLCBlNSwgczgpKQogICAgICAgICAgICBhNCsrOwogICAgICAgICAgZWxzZSBpZiAoaXQ3KGgxMC50eXBlLCAtZTUsIHM4KSkgewogICAgICAgICAgICBpZiAoYTQgPT0gMCkKICAgICAgICAgICAgICByZXR1cm4geyBzdGFydDogbDcsIGVuZDogaDEwLmZyb20gPT0gaDEwLnRvID8gdm9pZCAwIDogeyBmcm9tOiBoMTAuZnJvbSwgdG86IGgxMC50byB9LCBtYXRjaGVkOiBmYWxzZSB9OwogICAgICAgICAgICBhNC0tOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgd2hpbGUgKGU1IDwgMCA/IGgxMC5wcmV2U2libGluZygpIDogaDEwLm5leHRTaWJsaW5nKCkpOwogICAgcmV0dXJuIHsgc3RhcnQ6IGw3LCBtYXRjaGVkOiBmYWxzZSB9OwogIH0KICBmdW5jdGlvbiBOZTYobjgsIHQ0LCBlNSwgcjMsIGk0LCBzOCwgbzQpIHsKICAgIGxldCBsNyA9IGU1IDwgMCA/IG44LnNsaWNlRG9jKHQ0IC0gMSwgdDQpIDogbjguc2xpY2VEb2ModDQsIHQ0ICsgMSksIGE0ID0gbzQuaW5kZXhPZihsNyk7CiAgICBpZiAoYTQgPCAwIHx8IGE0ICUgMiA9PSAwICE9IGU1ID4gMCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBsZXQgaDEwID0geyBmcm9tOiBlNSA8IDAgPyB0NCAtIDEgOiB0NCwgdG86IGU1ID4gMCA/IHQ0ICsgMSA6IHQ0IH0sIHUxMSA9IG44LmRvYy5pdGVyUmFuZ2UodDQsIGU1ID4gMCA/IG44LmRvYy5sZW5ndGggOiAwKSwgZDE1ID0gMDsKICAgIGZvciAobGV0IGcxMiA9IDA7ICF1MTEubmV4dCgpLmRvbmUgJiYgZzEyIDw9IHM4OyApIHsKICAgICAgbGV0IHcyMSA9IHUxMS52YWx1ZTsKICAgICAgZTUgPCAwICYmIChnMTIgKz0gdzIxLmxlbmd0aCk7CiAgICAgIGxldCBRMTcgPSB0NCArIGcxMiAqIGU1OwogICAgICBmb3IgKGxldCBDMTcgPSBlNSA+IDAgPyAwIDogdzIxLmxlbmd0aCAtIDEsIEd0NSA9IGU1ID4gMCA/IHcyMS5sZW5ndGggOiAtMTsgQzE3ICE9IEd0NTsgQzE3ICs9IGU1KSB7CiAgICAgICAgbGV0IFgyMyA9IG80LmluZGV4T2YodzIxW0MxN10pOwogICAgICAgIGlmICghKFgyMyA8IDAgfHwgcjMucmVzb2x2ZUlubmVyKFExNyArIEMxNywgMSkudHlwZSAhPSBpNCkpCiAgICAgICAgICBpZiAoWDIzICUgMiA9PSAwID09IGU1ID4gMCkKICAgICAgICAgICAgZDE1Kys7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKGQxNSA9PSAxKQogICAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBoMTAsIGVuZDogeyBmcm9tOiBRMTcgKyBDMTcsIHRvOiBRMTcgKyBDMTcgKyAxIH0sIG1hdGNoZWQ6IFgyMyA+PiAxID09IGE0ID4+IDEgfTsKICAgICAgICAgICAgZDE1LS07CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgZTUgPiAwICYmIChnMTIgKz0gdzIxLmxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gdTExLmRvbmUgPyB7IHN0YXJ0OiBoMTAsIG1hdGNoZWQ6IGZhbHNlIH0gOiBudWxsOwogIH0KICB2YXIgaHQ2ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgdmFyIEY5ID0gW04zLm5vbmVdOwogIHZhciBGZTcgPSBuZXcgWjMoRjkpOwogIHZhciBndDUgPSBbXTsKICB2YXIgVnQ2ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgZm9yIChsZXQgW244LCB0NF0gb2YgW1sidmFyaWFibGUiLCAidmFyaWFibGVOYW1lIl0sIFsidmFyaWFibGUtMiIsICJ2YXJpYWJsZU5hbWUuc3BlY2lhbCJdLCBbInN0cmluZy0yIiwgInN0cmluZy5zcGVjaWFsIl0sIFsiZGVmIiwgInZhcmlhYmxlTmFtZS5kZWZpbml0aW9uIl0sIFsidGFnIiwgInRhZ05hbWUiXSwgWyJhdHRyaWJ1dGUiLCAiYXR0cmlidXRlTmFtZSJdLCBbInR5cGUiLCAidHlwZU5hbWUiXSwgWyJidWlsdGluIiwgInZhcmlhYmxlTmFtZS5zdGFuZGFyZCJdLCBbInF1YWxpZmllciIsICJtb2RpZmllciJdLCBbImVycm9yIiwgImludmFsaWQiXSwgWyJoZWFkZXIiLCAiaGVhZGluZyJdLCBbInByb3BlcnR5IiwgInByb3BlcnR5TmFtZSJdXSkKICAgIFZ0NltuOF0gPSB6dDUoaHQ2LCB0NCk7CiAgdmFyIEg3ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgdGhpcy5leHRyYSA9IHQ0LCB0aGlzLnRhYmxlID0gT2JqZWN0LmFzc2lnbigvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgVnQ2KTsKICAgIH0KICAgIHJlc29sdmUodDQpIHsKICAgICAgcmV0dXJuIHQ0ID8gdGhpcy50YWJsZVt0NF0gfHwgKHRoaXMudGFibGVbdDRdID0genQ1KHRoaXMuZXh0cmEsIHQ0KSkgOiAwOwogICAgfQogIH07CiAgdmFyIFJlOCA9IG5ldyBINyhodDYpOwogIGZ1bmN0aW9uIHR0OShuOCwgdDQpIHsKICAgIGd0NS5pbmRleE9mKG44KSA+IC0xIHx8IChndDUucHVzaChuOCksIGNvbnNvbGUud2Fybih0NCkpOwogIH0KICBmdW5jdGlvbiB6dDUobjgsIHQ0KSB7CiAgICBsZXQgZTUgPSBudWxsOwogICAgZm9yIChsZXQgczggb2YgdDQuc3BsaXQoIi4iKSkgewogICAgICBsZXQgbzQgPSBuOFtzOF0gfHwgbjRbczhdOwogICAgICBvNCA/IHR5cGVvZiBvNCA9PSAiZnVuY3Rpb24iID8gZTUgPyBlNSA9IG80KGU1KSA6IHR0OShzOCwgYE1vZGlmaWVyICR7czh9IHVzZWQgYXQgc3RhcnQgb2YgdGFnYCkgOiBlNSA/IHR0OShzOCwgYFRhZyAke3M4fSB1c2VkIGFzIG1vZGlmaWVyYCkgOiBlNSA9IG80IDogdHQ5KHM4LCBgVW5rbm93biBoaWdobGlnaHRpbmcgdGFnICR7czh9YCk7CiAgICB9CiAgICBpZiAoIWU1KQogICAgICByZXR1cm4gMDsKICAgIGxldCByMyA9IHQ0LnJlcGxhY2UoLyAvZywgIl8iKSwgaTQgPSBOMy5kZWZpbmUoeyBpZDogRjkubGVuZ3RoLCBuYW1lOiByMywgcHJvcHM6IFskMTAoeyBbcjNdOiBlNSB9KV0gfSk7CiAgICByZXR1cm4gRjkucHVzaChpNCksIGk0LmlkOwogIH0KCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlQDYuMy4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOWpiMjF0WVc1a2N5eEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjQvZGVuby9hdXRvY29tcGxldGUuanMKICB2YXIgRjEwID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCBpNCkgewogICAgICB0aGlzLnN0YXRlID0gZTUsIHRoaXMucG9zID0gdDQsIHRoaXMuZXhwbGljaXQgPSBpNCwgdGhpcy5hYm9ydExpc3RlbmVycyA9IFtdOwogICAgfQogICAgdG9rZW5CZWZvcmUoZTUpIHsKICAgICAgbGV0IHQ0ID0gbTExKHRoaXMuc3RhdGUpLnJlc29sdmVJbm5lcih0aGlzLnBvcywgLTEpOwogICAgICBmb3IgKDsgdDQgJiYgZTUuaW5kZXhPZih0NC5uYW1lKSA8IDA7ICkKICAgICAgICB0NCA9IHQ0LnBhcmVudDsKICAgICAgcmV0dXJuIHQ0ID8geyBmcm9tOiB0NC5mcm9tLCB0bzogdGhpcy5wb3MsIHRleHQ6IHRoaXMuc3RhdGUuc2xpY2VEb2ModDQuZnJvbSwgdGhpcy5wb3MpLCB0eXBlOiB0NC50eXBlIH0gOiBudWxsOwogICAgfQogICAgbWF0Y2hCZWZvcmUoZTUpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5zdGF0ZS5kb2MubGluZUF0KHRoaXMucG9zKSwgaTQgPSBNYXRoLm1heCh0NC5mcm9tLCB0aGlzLnBvcyAtIDI1MCksIG80ID0gdDQudGV4dC5zbGljZShpNCAtIHQ0LmZyb20sIHRoaXMucG9zIC0gdDQuZnJvbSksIHM4ID0gbzQuc2VhcmNoKEFlMTEoZTUsIGZhbHNlKSk7CiAgICAgIHJldHVybiBzOCA8IDAgPyBudWxsIDogeyBmcm9tOiBpNCArIHM4LCB0bzogdGhpcy5wb3MsIHRleHQ6IG80LnNsaWNlKHM4KSB9OwogICAgfQogICAgZ2V0IGFib3J0ZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLmFib3J0TGlzdGVuZXJzID09IG51bGw7CiAgICB9CiAgICBhZGRFdmVudExpc3RlbmVyKGU1LCB0NCkgewogICAgICBlNSA9PSAiYWJvcnQiICYmIHRoaXMuYWJvcnRMaXN0ZW5lcnMgJiYgdGhpcy5hYm9ydExpc3RlbmVycy5wdXNoKHQ0KTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIHVlMTAobjgpIHsKICAgIGxldCBlNSA9IE9iamVjdC5rZXlzKG44KS5qb2luKCIiKSwgdDQgPSAvXHcvLnRlc3QoZTUpOwogICAgcmV0dXJuIHQ0ICYmIChlNSA9IGU1LnJlcGxhY2UoL1x3L2csICIiKSksIGBbJHt0NCA/ICJcXHciIDogIiJ9JHtlNS5yZXBsYWNlKC9bXlx3XHNdL2csICJcXCQmIil9XWA7CiAgfQogIGZ1bmN0aW9uIFllNChuOCkgewogICAgbGV0IGU1ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksIHQ0ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBmb3IgKGxldCB7IGxhYmVsOiBvNCB9IG9mIG44KSB7CiAgICAgIGU1W280WzBdXSA9IHRydWU7CiAgICAgIGZvciAobGV0IHM4ID0gMTsgczggPCBvNC5sZW5ndGg7IHM4KyspCiAgICAgICAgdDRbbzRbczhdXSA9IHRydWU7CiAgICB9CiAgICBsZXQgaTQgPSB1ZTEwKGU1KSArIHVlMTAodDQpICsgIiokIjsKICAgIHJldHVybiBbbmV3IFJlZ0V4cCgiXiIgKyBpNCksIG5ldyBSZWdFeHAoaTQpXTsKICB9CiAgZnVuY3Rpb24gR2U1KG44KSB7CiAgICBsZXQgZTUgPSBuOC5tYXAoKG80KSA9PiB0eXBlb2YgbzQgPT0gInN0cmluZyIgPyB7IGxhYmVsOiBvNCB9IDogbzQpLCBbdDQsIGk0XSA9IGU1LmV2ZXJ5KChvNCkgPT4gL15cdyskLy50ZXN0KG80LmxhYmVsKSkgPyBbL1x3KiQvLCAvXHcrJC9dIDogWWU0KGU1KTsKICAgIHJldHVybiAobzQpID0+IHsKICAgICAgbGV0IHM4ID0gbzQubWF0Y2hCZWZvcmUoaTQpOwogICAgICByZXR1cm4gczggfHwgbzQuZXhwbGljaXQgPyB7IGZyb206IHM4ID8gczguZnJvbSA6IG80LnBvcywgb3B0aW9uczogZTUsIHZhbGlkRm9yOiB0NCB9IDogbnVsbDsKICAgIH07CiAgfQogIHZhciBONyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgaTQpIHsKICAgICAgdGhpcy5jb21wbGV0aW9uID0gZTUsIHRoaXMuc291cmNlID0gdDQsIHRoaXMubWF0Y2ggPSBpNDsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEkxMihuOCkgewogICAgcmV0dXJuIG44LnNlbGVjdGlvbi5tYWluLmhlYWQ7CiAgfQogIGZ1bmN0aW9uIEFlMTEobjgsIGU1KSB7CiAgICB2YXIgdDQ7CiAgICBsZXQgeyBzb3VyY2U6IGk0IH0gPSBuOCwgbzQgPSBlNSAmJiBpNFswXSAhPSAiXiIsIHM4ID0gaTRbaTQubGVuZ3RoIC0gMV0gIT0gIiQiOwogICAgcmV0dXJuICFvNCAmJiAhczggPyBuOCA6IG5ldyBSZWdFeHAoYCR7bzQgPyAiXiIgOiAiIn0oPzoke2k0fSkke3M4ID8gIiQiIDogIiJ9YCwgKHQ0ID0gbjguZmxhZ3MpICE9PSBudWxsICYmIHQ0ICE9PSB2b2lkIDAgPyB0NCA6IG44Lmlnbm9yZUNhc2UgPyAiaSIgOiAiIik7CiAgfQogIHZhciBIdDQgPSBEMi5kZWZpbmUoKTsKICBmdW5jdGlvbiBKZTUobjgsIGU1LCB0NCwgaTQpIHsKICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG44LmNoYW5nZUJ5UmFuZ2UoKG80KSA9PiB7CiAgICAgIGlmIChvNCA9PSBuOC5zZWxlY3Rpb24ubWFpbikKICAgICAgICByZXR1cm4geyBjaGFuZ2VzOiB7IGZyb206IHQ0LCB0bzogaTQsIGluc2VydDogZTUgfSwgcmFuZ2U6IGcyLmN1cnNvcih0NCArIGU1Lmxlbmd0aCkgfTsKICAgICAgbGV0IHM4ID0gaTQgLSB0NDsKICAgICAgcmV0dXJuICFvNC5lbXB0eSB8fCBzOCAmJiBuOC5zbGljZURvYyhvNC5mcm9tIC0gczgsIG80LmZyb20pICE9IG44LnNsaWNlRG9jKHQ0LCBpNCkgPyB7IHJhbmdlOiBvNCB9IDogeyBjaGFuZ2VzOiB7IGZyb206IG80LmZyb20gLSBzOCwgdG86IG80LmZyb20sIGluc2VydDogZTUgfSwgcmFuZ2U6IGcyLmN1cnNvcihvNC5mcm9tIC0gczggKyBlNS5sZW5ndGgpIH07CiAgICB9KSksIHsgdXNlckV2ZW50OiAiaW5wdXQuY29tcGxldGUiIH0pOwogIH0KICBmdW5jdGlvbiBUZTkobjgsIGU1KSB7CiAgICBsZXQgdDQgPSBlNS5jb21wbGV0aW9uLmFwcGx5IHx8IGU1LmNvbXBsZXRpb24ubGFiZWwsIGk0ID0gZTUuc291cmNlOwogICAgdHlwZW9mIHQ0ID09ICJzdHJpbmciID8gbjguZGlzcGF0Y2goSmU1KG44LnN0YXRlLCB0NCwgaTQuZnJvbSwgaTQudG8pKSA6IHQ0KG44LCBlNS5jb21wbGV0aW9uLCBpNC5mcm9tLCBpNC50byk7CiAgfQogIHZhciBoZTcgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICBmdW5jdGlvbiBaZTQobjgpIHsKICAgIGlmICghQXJyYXkuaXNBcnJheShuOCkpCiAgICAgIHJldHVybiBuODsKICAgIGxldCBlNSA9IGhlNy5nZXQobjgpOwogICAgcmV0dXJuIGU1IHx8IGhlNy5zZXQobjgsIGU1ID0gR2U1KG44KSksIGU1OwogIH0KICB2YXIgXzExID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUpIHsKICAgICAgdGhpcy5wYXR0ZXJuID0gZTUsIHRoaXMuY2hhcnMgPSBbXSwgdGhpcy5mb2xkZWQgPSBbXSwgdGhpcy5hbnkgPSBbXSwgdGhpcy5wcmVjaXNlID0gW10sIHRoaXMuYnlXb3JkID0gW107CiAgICAgIGZvciAobGV0IHQ0ID0gMDsgdDQgPCBlNS5sZW5ndGg7ICkgewogICAgICAgIGxldCBpNCA9IG9lKGU1LCB0NCksIG80ID0gYmUyKGk0KTsKICAgICAgICB0aGlzLmNoYXJzLnB1c2goaTQpOwogICAgICAgIGxldCBzOCA9IGU1LnNsaWNlKHQ0LCB0NCArIG80KSwgcjMgPSBzOC50b1VwcGVyQ2FzZSgpOwogICAgICAgIHRoaXMuZm9sZGVkLnB1c2gob2UocjMgPT0gczggPyBzOC50b0xvd2VyQ2FzZSgpIDogcjMsIDApKSwgdDQgKz0gbzQ7CiAgICAgIH0KICAgICAgdGhpcy5hc3RyYWwgPSBlNS5sZW5ndGggIT0gdGhpcy5jaGFycy5sZW5ndGg7CiAgICB9CiAgICBtYXRjaChlNSkgewogICAgICBpZiAodGhpcy5wYXR0ZXJuLmxlbmd0aCA9PSAwKQogICAgICAgIHJldHVybiBbMF07CiAgICAgIGlmIChlNS5sZW5ndGggPCB0aGlzLnBhdHRlcm4ubGVuZ3RoKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBsZXQgeyBjaGFyczogdDQsIGZvbGRlZDogaTQsIGFueTogbzQsIHByZWNpc2U6IHM4LCBieVdvcmQ6IHIzIH0gPSB0aGlzOwogICAgICBpZiAodDQubGVuZ3RoID09IDEpIHsKICAgICAgICBsZXQgaDEwID0gb2UoZTUsIDApOwogICAgICAgIHJldHVybiBoMTAgPT0gdDRbMF0gPyBbMCwgMCwgYmUyKGgxMCldIDogaDEwID09IGk0WzBdID8gWy0yMDAsIDAsIGJlMihoMTApXSA6IG51bGw7CiAgICAgIH0KICAgICAgbGV0IGw3ID0gZTUuaW5kZXhPZih0aGlzLnBhdHRlcm4pOwogICAgICBpZiAobDcgPT0gMCkKICAgICAgICByZXR1cm4gWzAsIDAsIHRoaXMucGF0dGVybi5sZW5ndGhdOwogICAgICBsZXQgYzE3ID0gdDQubGVuZ3RoLCBhNCA9IDA7CiAgICAgIGlmIChsNyA8IDApIHsKICAgICAgICBmb3IgKGxldCBoMTAgPSAwLCBRMTcgPSBNYXRoLm1pbihlNS5sZW5ndGgsIDIwMCk7IGgxMCA8IFExNyAmJiBhNCA8IGMxNzsgKSB7CiAgICAgICAgICBsZXQgVDI5ID0gb2UoZTUsIGgxMCk7CiAgICAgICAgICAoVDI5ID09IHQ0W2E0XSB8fCBUMjkgPT0gaTRbYTRdKSAmJiAobzRbYTQrK10gPSBoMTApLCBoMTAgKz0gYmUyKFQyOSk7CiAgICAgICAgfQogICAgICAgIGlmIChhNCA8IGMxNykKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGxldCBmMTEgPSAwLCB1MTEgPSAwLCBDMTcgPSBmYWxzZSwgYjI1ID0gMCwgQTIwID0gLTEsIEsxOSA9IC0xLCBqZTcgPSAvW2Etel0vLnRlc3QoZTUpLCB6MjYgPSB0cnVlOwogICAgICBmb3IgKGxldCBoMTAgPSAwLCBRMTcgPSBNYXRoLm1pbihlNS5sZW5ndGgsIDIwMCksIFQyOSA9IDA7IGgxMCA8IFExNyAmJiB1MTEgPCBjMTc7ICkgewogICAgICAgIGxldCBtMjMgPSBvZShlNSwgaDEwKTsKICAgICAgICBsNyA8IDAgJiYgKGYxMSA8IGMxNyAmJiBtMjMgPT0gdDRbZjExXSAmJiAoczhbZjExKytdID0gaDEwKSwgYjI1IDwgYzE3ICYmIChtMjMgPT0gdDRbYjI1XSB8fCBtMjMgPT0gaTRbYjI1XSA/IChiMjUgPT0gMCAmJiAoQTIwID0gaDEwKSwgSzE5ID0gaDEwICsgMSwgYjI1KyspIDogYjI1ID0gMCkpOwogICAgICAgIGxldCBqMTksIFgyMyA9IG0yMyA8IDI1NSA/IG0yMyA+PSA0OCAmJiBtMjMgPD0gNTcgfHwgbTIzID49IDk3ICYmIG0yMyA8PSAxMjIgPyAyIDogbTIzID49IDY1ICYmIG0yMyA8PSA5MCA/IDEgOiAwIDogKGoxOSA9IHJ0KG0yMykpICE9IGoxOS50b0xvd2VyQ2FzZSgpID8gMSA6IGoxOSAhPSBqMTkudG9VcHBlckNhc2UoKSA/IDIgOiAwOwogICAgICAgICghaDEwIHx8IFgyMyA9PSAxICYmIGplNyB8fCBUMjkgPT0gMCAmJiBYMjMgIT0gMCkgJiYgKHQ0W3UxMV0gPT0gbTIzIHx8IGk0W3UxMV0gPT0gbTIzICYmIChDMTcgPSB0cnVlKSA/IHIzW3UxMSsrXSA9IGgxMCA6IHIzLmxlbmd0aCAmJiAoejI2ID0gZmFsc2UpKSwgVDI5ID0gWDIzLCBoMTAgKz0gYmUyKG0yMyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHUxMSA9PSBjMTcgJiYgcjNbMF0gPT0gMCAmJiB6MjYgPyB0aGlzLnJlc3VsdCgtMTAwICsgKEMxNyA/IC0yMDAgOiAwKSwgcjMsIGU1KSA6IGIyNSA9PSBjMTcgJiYgQTIwID09IDAgPyBbLTIwMCAtIGU1Lmxlbmd0aCwgMCwgSzE5XSA6IGw3ID4gLTEgPyBbLTcwMCAtIGU1Lmxlbmd0aCwgbDcsIGw3ICsgdGhpcy5wYXR0ZXJuLmxlbmd0aF0gOiBiMjUgPT0gYzE3ID8gWy0yMDAgKyAtNzAwIC0gZTUubGVuZ3RoLCBBMjAsIEsxOV0gOiB1MTEgPT0gYzE3ID8gdGhpcy5yZXN1bHQoLTEwMCArIChDMTcgPyAtMjAwIDogMCkgKyAtNzAwICsgKHoyNiA/IDAgOiAtMTEwMCksIHIzLCBlNSkgOiB0NC5sZW5ndGggPT0gMiA/IG51bGwgOiB0aGlzLnJlc3VsdCgobzRbMF0gPyAtNzAwIDogMCkgKyAtMjAwICsgLTExMDAsIG80LCBlNSk7CiAgICB9CiAgICByZXN1bHQoZTUsIHQ0LCBpNCkgewogICAgICBsZXQgbzQgPSBbZTUgLSBpNC5sZW5ndGhdLCBzOCA9IDE7CiAgICAgIGZvciAobGV0IHIzIG9mIHQ0KSB7CiAgICAgICAgbGV0IGw3ID0gcjMgKyAodGhpcy5hc3RyYWwgPyBiZTIob2UoaTQsIHIzKSkgOiAxKTsKICAgICAgICBzOCA+IDEgJiYgbzRbczggLSAxXSA9PSByMyA/IG80W3M4IC0gMV0gPSBsNyA6IChvNFtzOCsrXSA9IHIzLCBvNFtzOCsrXSA9IGw3KTsKICAgICAgfQogICAgICByZXR1cm4gbzQ7CiAgICB9CiAgfTsKICB2YXIgeDcgPSBBMi5kZWZpbmUoeyBjb21iaW5lKG44KSB7CiAgICByZXR1cm4gaHQobjgsIHsgYWN0aXZhdGVPblR5cGluZzogdHJ1ZSwgc2VsZWN0T25PcGVuOiB0cnVlLCBvdmVycmlkZTogbnVsbCwgY2xvc2VPbkJsdXI6IHRydWUsIG1heFJlbmRlcmVkT3B0aW9uczogMTAwLCBkZWZhdWx0S2V5bWFwOiB0cnVlLCBvcHRpb25DbGFzczogKCkgPT4gIiIsIGFib3ZlQ3Vyc29yOiBmYWxzZSwgaWNvbnM6IHRydWUsIGFkZFRvT3B0aW9uczogW10sIGNvbXBhcmVDb21wbGV0aW9uczogKGU1LCB0NCkgPT4gZTUubGFiZWwubG9jYWxlQ29tcGFyZSh0NC5sYWJlbCksIGludGVyYWN0aW9uRGVsYXk6IDc1IH0sIHsgZGVmYXVsdEtleW1hcDogKGU1LCB0NCkgPT4gZTUgJiYgdDQsIGNsb3NlT25CbHVyOiAoZTUsIHQ0KSA9PiBlNSAmJiB0NCwgaWNvbnM6IChlNSwgdDQpID0+IGU1ICYmIHQ0LCBvcHRpb25DbGFzczogKGU1LCB0NCkgPT4gKGk0KSA9PiBfZTgoZTUoaTQpLCB0NChpNCkpLCBhZGRUb09wdGlvbnM6IChlNSwgdDQpID0+IGU1LmNvbmNhdCh0NCkgfSk7CiAgfSB9KTsKICBmdW5jdGlvbiBfZTgobjgsIGU1KSB7CiAgICByZXR1cm4gbjggPyBlNSA/IG44ICsgIiAiICsgZTUgOiBuOCA6IGU1OwogIH0KICBmdW5jdGlvbiBldDYobjgpIHsKICAgIGxldCBlNSA9IG44LmFkZFRvT3B0aW9ucy5zbGljZSgpOwogICAgcmV0dXJuIG44Lmljb25zICYmIGU1LnB1c2goeyByZW5kZXIodDQpIHsKICAgICAgbGV0IGk0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHJldHVybiBpNC5jbGFzc0xpc3QuYWRkKCJjbS1jb21wbGV0aW9uSWNvbiIpLCB0NC50eXBlICYmIGk0LmNsYXNzTGlzdC5hZGQoLi4udDQudHlwZS5zcGxpdCgvXHMrL2cpLm1hcCgobzQpID0+ICJjbS1jb21wbGV0aW9uSWNvbi0iICsgbzQpKSwgaTQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsICJ0cnVlIiksIGk0OwogICAgfSwgcG9zaXRpb246IDIwIH0pLCBlNS5wdXNoKHsgcmVuZGVyKHQ0LCBpNCwgbzQpIHsKICAgICAgbGV0IHM4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICBzOC5jbGFzc05hbWUgPSAiY20tY29tcGxldGlvbkxhYmVsIjsKICAgICAgbGV0IHsgbGFiZWw6IHIzIH0gPSB0NCwgbDcgPSAwOwogICAgICBmb3IgKGxldCBjMTcgPSAxOyBjMTcgPCBvNC5sZW5ndGg7ICkgewogICAgICAgIGxldCBhNCA9IG80W2MxNysrXSwgZjExID0gbzRbYzE3KytdOwogICAgICAgIGE0ID4gbDcgJiYgczguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocjMuc2xpY2UobDcsIGE0KSkpOwogICAgICAgIGxldCB1MTEgPSBzOC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikpOwogICAgICAgIHUxMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyMy5zbGljZShhNCwgZjExKSkpLCB1MTEuY2xhc3NOYW1lID0gImNtLWNvbXBsZXRpb25NYXRjaGVkVGV4dCIsIGw3ID0gZjExOwogICAgICB9CiAgICAgIHJldHVybiBsNyA8IHIzLmxlbmd0aCAmJiBzOC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyMy5zbGljZShsNykpKSwgczg7CiAgICB9LCBwb3NpdGlvbjogNTAgfSwgeyByZW5kZXIodDQpIHsKICAgICAgaWYgKCF0NC5kZXRhaWwpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGxldCBpNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgcmV0dXJuIGk0LmNsYXNzTmFtZSA9ICJjbS1jb21wbGV0aW9uRGV0YWlsIiwgaTQudGV4dENvbnRlbnQgPSB0NC5kZXRhaWwsIGk0OwogICAgfSwgcG9zaXRpb246IDgwIH0pLCBlNS5zb3J0KCh0NCwgaTQpID0+IHQ0LnBvc2l0aW9uIC0gaTQucG9zaXRpb24pLm1hcCgodDQpID0+IHQ0LnJlbmRlcik7CiAgfQogIGZ1bmN0aW9uIHBlOChuOCwgZTUsIHQ0KSB7CiAgICBpZiAobjggPD0gdDQpCiAgICAgIHJldHVybiB7IGZyb206IDAsIHRvOiBuOCB9OwogICAgaWYgKGU1IDwgMCAmJiAoZTUgPSAwKSwgZTUgPD0gbjggPj4gMSkgewogICAgICBsZXQgbzQgPSBNYXRoLmZsb29yKGU1IC8gdDQpOwogICAgICByZXR1cm4geyBmcm9tOiBvNCAqIHQ0LCB0bzogKG80ICsgMSkgKiB0NCB9OwogICAgfQogICAgbGV0IGk0ID0gTWF0aC5mbG9vcigobjggLSBlNSkgLyB0NCk7CiAgICByZXR1cm4geyBmcm9tOiBuOCAtIChpNCArIDEpICogdDQsIHRvOiBuOCAtIGk0ICogdDQgfTsKICB9CiAgdmFyIGVlOCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCkgewogICAgICB0aGlzLnZpZXcgPSBlNSwgdGhpcy5zdGF0ZUZpZWxkID0gdDQsIHRoaXMuaW5mbyA9IG51bGwsIHRoaXMucGxhY2VJbmZvID0geyByZWFkOiAoKSA9PiB0aGlzLm1lYXN1cmVJbmZvKCksIHdyaXRlOiAobDcpID0+IHRoaXMucG9zaXRpb25JbmZvKGw3KSwga2V5OiB0aGlzIH07CiAgICAgIGxldCBpNCA9IGU1LnN0YXRlLmZpZWxkKHQ0KSwgeyBvcHRpb25zOiBvNCwgc2VsZWN0ZWQ6IHM4IH0gPSBpNC5vcGVuLCByMyA9IGU1LnN0YXRlLmZhY2V0KHg3KTsKICAgICAgdGhpcy5vcHRpb25Db250ZW50ID0gZXQ2KHIzKSwgdGhpcy5vcHRpb25DbGFzcyA9IHIzLm9wdGlvbkNsYXNzLCB0aGlzLnJhbmdlID0gcGU4KG80Lmxlbmd0aCwgczgsIHIzLm1heFJlbmRlcmVkT3B0aW9ucyksIHRoaXMuZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksIHRoaXMuZG9tLmNsYXNzTmFtZSA9ICJjbS10b29sdGlwLWF1dG9jb21wbGV0ZSIsIHRoaXMuZG9tLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIChsNykgPT4gewogICAgICAgIGZvciAobGV0IGMxNyA9IGw3LnRhcmdldCwgYTQ7IGMxNyAmJiBjMTcgIT0gdGhpcy5kb207IGMxNyA9IGMxNy5wYXJlbnROb2RlKQogICAgICAgICAgaWYgKGMxNy5ub2RlTmFtZSA9PSAiTEkiICYmIChhNCA9IC8tKFxkKykkLy5leGVjKGMxNy5pZCkpICYmICthNFsxXSA8IG80Lmxlbmd0aCkgewogICAgICAgICAgICBUZTkoZTUsIG80WythNFsxXV0pLCBsNy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgIH0pLCB0aGlzLmxpc3QgPSB0aGlzLmRvbS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUxpc3RCb3gobzQsIGk0LmlkLCB0aGlzLnJhbmdlKSksIHRoaXMubGlzdC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCAoKSA9PiB7CiAgICAgICAgdGhpcy5pbmZvICYmIHRoaXMudmlldy5yZXF1ZXN0TWVhc3VyZSh0aGlzLnBsYWNlSW5mbyk7CiAgICAgIH0pOwogICAgfQogICAgbW91bnQoKSB7CiAgICAgIHRoaXMudXBkYXRlU2VsKCk7CiAgICB9CiAgICB1cGRhdGUoZTUpIHsKICAgICAgZTUuc3RhdGUuZmllbGQodGhpcy5zdGF0ZUZpZWxkKSAhPSBlNS5zdGFydFN0YXRlLmZpZWxkKHRoaXMuc3RhdGVGaWVsZCkgJiYgdGhpcy51cGRhdGVTZWwoKTsKICAgIH0KICAgIHBvc2l0aW9uZWQoKSB7CiAgICAgIHRoaXMuaW5mbyAmJiB0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pOwogICAgfQogICAgdXBkYXRlU2VsKCkgewogICAgICBsZXQgZTUgPSB0aGlzLnZpZXcuc3RhdGUuZmllbGQodGhpcy5zdGF0ZUZpZWxkKSwgdDQgPSBlNS5vcGVuOwogICAgICBpZiAoKHQ0LnNlbGVjdGVkID4gLTEgJiYgdDQuc2VsZWN0ZWQgPCB0aGlzLnJhbmdlLmZyb20gfHwgdDQuc2VsZWN0ZWQgPj0gdGhpcy5yYW5nZS50bykgJiYgKHRoaXMucmFuZ2UgPSBwZTgodDQub3B0aW9ucy5sZW5ndGgsIHQ0LnNlbGVjdGVkLCB0aGlzLnZpZXcuc3RhdGUuZmFjZXQoeDcpLm1heFJlbmRlcmVkT3B0aW9ucyksIHRoaXMubGlzdC5yZW1vdmUoKSwgdGhpcy5saXN0ID0gdGhpcy5kb20uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVMaXN0Qm94KHQ0Lm9wdGlvbnMsIGU1LmlkLCB0aGlzLnJhbmdlKSksIHRoaXMubGlzdC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCAoKSA9PiB7CiAgICAgICAgdGhpcy5pbmZvICYmIHRoaXMudmlldy5yZXF1ZXN0TWVhc3VyZSh0aGlzLnBsYWNlSW5mbyk7CiAgICAgIH0pKSwgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbih0NC5zZWxlY3RlZCkpIHsKICAgICAgICB0aGlzLmluZm8gJiYgKHRoaXMuaW5mby5yZW1vdmUoKSwgdGhpcy5pbmZvID0gbnVsbCk7CiAgICAgICAgbGV0IHsgY29tcGxldGlvbjogaTQgfSA9IHQ0Lm9wdGlvbnNbdDQuc2VsZWN0ZWRdLCB7IGluZm86IG80IH0gPSBpNDsKICAgICAgICBpZiAoIW80KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGxldCBzOCA9IHR5cGVvZiBvNCA9PSAic3RyaW5nIiA/IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG80KSA6IG80KGk0KTsKICAgICAgICBpZiAoIXM4KQogICAgICAgICAgcmV0dXJuOwogICAgICAgICJ0aGVuIiBpbiBzOCA/IHM4LnRoZW4oKHIzKSA9PiB7CiAgICAgICAgICByMyAmJiB0aGlzLnZpZXcuc3RhdGUuZmllbGQodGhpcy5zdGF0ZUZpZWxkLCBmYWxzZSkgPT0gZTUgJiYgdGhpcy5hZGRJbmZvUGFuZShyMyk7CiAgICAgICAgfSkuY2F0Y2goKHIzKSA9PiBudDIodGhpcy52aWV3LnN0YXRlLCByMywgImNvbXBsZXRpb24gaW5mbyIpKSA6IHRoaXMuYWRkSW5mb1BhbmUoczgpOwogICAgICB9CiAgICB9CiAgICBhZGRJbmZvUGFuZShlNSkgewogICAgICBsZXQgdDQgPSB0aGlzLmluZm8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgdDQuY2xhc3NOYW1lID0gImNtLXRvb2x0aXAgY20tY29tcGxldGlvbkluZm8iLCB0NC5hcHBlbmRDaGlsZChlNSksIHRoaXMuZG9tLmFwcGVuZENoaWxkKHQ0KSwgdGhpcy52aWV3LnJlcXVlc3RNZWFzdXJlKHRoaXMucGxhY2VJbmZvKTsKICAgIH0KICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKGU1KSB7CiAgICAgIGxldCB0NCA9IG51bGw7CiAgICAgIGZvciAobGV0IGk0ID0gdGhpcy5saXN0LmZpcnN0Q2hpbGQsIG80ID0gdGhpcy5yYW5nZS5mcm9tOyBpNDsgaTQgPSBpNC5uZXh0U2libGluZywgbzQrKykKICAgICAgICBvNCA9PSBlNSA/IGk0Lmhhc0F0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIpIHx8IChpNC5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCAidHJ1ZSIpLCB0NCA9IGk0KSA6IGk0Lmhhc0F0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIpICYmIGk0LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIpOwogICAgICByZXR1cm4gdDQgJiYgbnQ4KHRoaXMubGlzdCwgdDQpLCB0NDsKICAgIH0KICAgIG1lYXN1cmVJbmZvKCkgewogICAgICBsZXQgZTUgPSB0aGlzLmRvbS5xdWVyeVNlbGVjdG9yKCJbYXJpYS1zZWxlY3RlZF0iKTsKICAgICAgaWYgKCFlNSB8fCAhdGhpcy5pbmZvKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBsZXQgdDQgPSB0aGlzLmRvbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdywgaTQgPSB0aGlzLmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbzQgPSB0aGlzLmluZm8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHM4ID0gZTUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGlmIChzOC50b3AgPiBNYXRoLm1pbih0NC5pbm5lckhlaWdodCwgaTQuYm90dG9tKSAtIDEwIHx8IHM4LmJvdHRvbSA8IE1hdGgubWF4KDAsIGk0LnRvcCkgKyAxMCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgbGV0IHIzID0gdGhpcy52aWV3LnRleHREaXJlY3Rpb24gPT0gUjIuUlRMLCBsNyA9IHIzLCBjMTcgPSBmYWxzZSwgYTQsIGYxMSA9ICIiLCB1MTEgPSAiIiwgQzE3ID0gaTQubGVmdCwgYjI1ID0gdDQuaW5uZXJXaWR0aCAtIGk0LnJpZ2h0OwogICAgICBpZiAobDcgJiYgQzE3IDwgTWF0aC5taW4obzQud2lkdGgsIGIyNSkgPyBsNyA9IGZhbHNlIDogIWw3ICYmIGIyNSA8IE1hdGgubWluKG80LndpZHRoLCBDMTcpICYmIChsNyA9IHRydWUpLCBvNC53aWR0aCA8PSAobDcgPyBDMTcgOiBiMjUpKQogICAgICAgIGYxMSA9IE1hdGgubWF4KDAsIE1hdGgubWluKHM4LnRvcCwgdDQuaW5uZXJIZWlnaHQgLSBvNC5oZWlnaHQpKSAtIGk0LnRvcCArICJweCIsIGE0ID0gTWF0aC5taW4oNDAwLCBsNyA/IEMxNyA6IGIyNSkgKyAicHgiOwogICAgICBlbHNlIHsKICAgICAgICBjMTcgPSB0cnVlLCBhNCA9IE1hdGgubWluKDQwMCwgKHIzID8gaTQucmlnaHQgOiB0NC5pbm5lcldpZHRoIC0gaTQubGVmdCkgLSAzMCkgKyAicHgiOwogICAgICAgIGxldCBBMjAgPSB0NC5pbm5lckhlaWdodCAtIGk0LmJvdHRvbTsKICAgICAgICBBMjAgPj0gbzQuaGVpZ2h0IHx8IEEyMCA+IGk0LnRvcCA/IGYxMSA9IHM4LmJvdHRvbSAtIGk0LnRvcCArICJweCIgOiB1MTEgPSBpNC5ib3R0b20gLSBzOC50b3AgKyAicHgiOwogICAgICB9CiAgICAgIHJldHVybiB7IHRvcDogZjExLCBib3R0b206IHUxMSwgbWF4V2lkdGg6IGE0LCBjbGFzczogYzE3ID8gcjMgPyAibGVmdC1uYXJyb3ciIDogInJpZ2h0LW5hcnJvdyIgOiBsNyA/ICJsZWZ0IiA6ICJyaWdodCIgfTsKICAgIH0KICAgIHBvc2l0aW9uSW5mbyhlNSkgewogICAgICB0aGlzLmluZm8gJiYgKGU1ID8gKHRoaXMuaW5mby5zdHlsZS50b3AgPSBlNS50b3AsIHRoaXMuaW5mby5zdHlsZS5ib3R0b20gPSBlNS5ib3R0b20sIHRoaXMuaW5mby5zdHlsZS5tYXhXaWR0aCA9IGU1Lm1heFdpZHRoLCB0aGlzLmluZm8uY2xhc3NOYW1lID0gImNtLXRvb2x0aXAgY20tY29tcGxldGlvbkluZm8gY20tY29tcGxldGlvbkluZm8tIiArIGU1LmNsYXNzKSA6IHRoaXMuaW5mby5zdHlsZS50b3AgPSAiLTFlNnB4Iik7CiAgICB9CiAgICBjcmVhdGVMaXN0Qm94KGU1LCB0NCwgaTQpIHsKICAgICAgbGV0IG80ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidWwiKTsKICAgICAgbzQuaWQgPSB0NCwgbzQuc2V0QXR0cmlidXRlKCJyb2xlIiwgImxpc3Rib3giKSwgbzQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwgInRydWUiKSwgbzQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwgdGhpcy52aWV3LnN0YXRlLnBocmFzZSgiQ29tcGxldGlvbnMiKSk7CiAgICAgIGZvciAobGV0IHM4ID0gaTQuZnJvbTsgczggPCBpNC50bzsgczgrKykgewogICAgICAgIGxldCB7IGNvbXBsZXRpb246IHIzLCBtYXRjaDogbDcgfSA9IGU1W3M4XSwgYzE3ID0gbzQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKSk7CiAgICAgICAgYzE3LmlkID0gdDQgKyAiLSIgKyBzOCwgYzE3LnNldEF0dHJpYnV0ZSgicm9sZSIsICJvcHRpb24iKTsKICAgICAgICBsZXQgYTQgPSB0aGlzLm9wdGlvbkNsYXNzKHIzKTsKICAgICAgICBhNCAmJiAoYzE3LmNsYXNzTmFtZSA9IGE0KTsKICAgICAgICBmb3IgKGxldCBmMTEgb2YgdGhpcy5vcHRpb25Db250ZW50KSB7CiAgICAgICAgICBsZXQgdTExID0gZjExKHIzLCB0aGlzLnZpZXcuc3RhdGUsIGw3KTsKICAgICAgICAgIHUxMSAmJiBjMTcuYXBwZW5kQ2hpbGQodTExKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGk0LmZyb20gJiYgbzQuY2xhc3NMaXN0LmFkZCgiY20tY29tcGxldGlvbkxpc3RJbmNvbXBsZXRlVG9wIiksIGk0LnRvIDwgZTUubGVuZ3RoICYmIG80LmNsYXNzTGlzdC5hZGQoImNtLWNvbXBsZXRpb25MaXN0SW5jb21wbGV0ZUJvdHRvbSIpLCBvNDsKICAgIH0KICB9OwogIGZ1bmN0aW9uIHR0MTAobjgpIHsKICAgIHJldHVybiAoZTUpID0+IG5ldyBlZTgoZTUsIG44KTsKICB9CiAgZnVuY3Rpb24gbnQ4KG44LCBlNSkgewogICAgbGV0IHQ0ID0gbjguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGk0ID0gZTUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBpNC50b3AgPCB0NC50b3AgPyBuOC5zY3JvbGxUb3AgLT0gdDQudG9wIC0gaTQudG9wIDogaTQuYm90dG9tID4gdDQuYm90dG9tICYmIChuOC5zY3JvbGxUb3AgKz0gaTQuYm90dG9tIC0gdDQuYm90dG9tKTsKICB9CiAgZnVuY3Rpb24gZGU2KG44KSB7CiAgICByZXR1cm4gKG44LmJvb3N0IHx8IDApICogMTAwICsgKG44LmFwcGx5ID8gMTAgOiAwKSArIChuOC5pbmZvID8gNSA6IDApICsgKG44LnR5cGUgPyAxIDogMCk7CiAgfQogIGZ1bmN0aW9uIGl0OChuOCwgZTUpIHsKICAgIGxldCB0NCA9IFtdLCBpNCA9IDA7CiAgICBmb3IgKGxldCBsNyBvZiBuOCkKICAgICAgaWYgKGw3Lmhhc1Jlc3VsdCgpKQogICAgICAgIGlmIChsNy5yZXN1bHQuZmlsdGVyID09PSBmYWxzZSkgewogICAgICAgICAgbGV0IGMxNyA9IGw3LnJlc3VsdC5nZXRNYXRjaDsKICAgICAgICAgIGZvciAobGV0IGE0IG9mIGw3LnJlc3VsdC5vcHRpb25zKSB7CiAgICAgICAgICAgIGxldCBmMTEgPSBbMWU5IC0gaTQrK107CiAgICAgICAgICAgIGlmIChjMTcpCiAgICAgICAgICAgICAgZm9yIChsZXQgdTExIG9mIGMxNyhhNCkpCiAgICAgICAgICAgICAgICBmMTEucHVzaCh1MTEpOwogICAgICAgICAgICB0NC5wdXNoKG5ldyBONyhhNCwgbDcsIGYxMSkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgYzE3ID0gbmV3IF8xMShlNS5zbGljZURvYyhsNy5mcm9tLCBsNy50bykpLCBhNDsKICAgICAgICAgIGZvciAobGV0IGYxMSBvZiBsNy5yZXN1bHQub3B0aW9ucykKICAgICAgICAgICAgKGE0ID0gYzE3Lm1hdGNoKGYxMS5sYWJlbCkpICYmIChmMTEuYm9vc3QgIT0gbnVsbCAmJiAoYTRbMF0gKz0gZjExLmJvb3N0KSwgdDQucHVzaChuZXcgTjcoZjExLCBsNywgYTQpKSk7CiAgICAgICAgfQogICAgbGV0IG80ID0gW10sIHM4ID0gbnVsbCwgcjMgPSBlNS5mYWNldCh4NykuY29tcGFyZUNvbXBsZXRpb25zOwogICAgZm9yIChsZXQgbDcgb2YgdDQuc29ydCgoYzE3LCBhNCkgPT4gYTQubWF0Y2hbMF0gLSBjMTcubWF0Y2hbMF0gfHwgcjMoYzE3LmNvbXBsZXRpb24sIGE0LmNvbXBsZXRpb24pKSkKICAgICAgIXM4IHx8IHM4LmxhYmVsICE9IGw3LmNvbXBsZXRpb24ubGFiZWwgfHwgczguZGV0YWlsICE9IGw3LmNvbXBsZXRpb24uZGV0YWlsIHx8IHM4LnR5cGUgIT0gbnVsbCAmJiBsNy5jb21wbGV0aW9uLnR5cGUgIT0gbnVsbCAmJiBzOC50eXBlICE9IGw3LmNvbXBsZXRpb24udHlwZSB8fCBzOC5hcHBseSAhPSBsNy5jb21wbGV0aW9uLmFwcGx5ID8gbzQucHVzaChsNykgOiBkZTYobDcuY29tcGxldGlvbikgPiBkZTYoczgpICYmIChvNFtvNC5sZW5ndGggLSAxXSA9IGw3KSwgczggPSBsNy5jb21wbGV0aW9uOwogICAgcmV0dXJuIG80OwogIH0KICB2YXIgUDEzID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCBpNCwgbzQsIHM4KSB7CiAgICAgIHRoaXMub3B0aW9ucyA9IGU1LCB0aGlzLmF0dHJzID0gdDQsIHRoaXMudG9vbHRpcCA9IGk0LCB0aGlzLnRpbWVzdGFtcCA9IG80LCB0aGlzLnNlbGVjdGVkID0gczg7CiAgICB9CiAgICBzZXRTZWxlY3RlZChlNSwgdDQpIHsKICAgICAgcmV0dXJuIGU1ID09IHRoaXMuc2VsZWN0ZWQgfHwgZTUgPj0gdGhpcy5vcHRpb25zLmxlbmd0aCA/IHRoaXMgOiBuZXcgUDEzKHRoaXMub3B0aW9ucywgbWUxMSh0NCwgZTUpLCB0aGlzLnRvb2x0aXAsIHRoaXMudGltZXN0YW1wLCBlNSk7CiAgICB9CiAgICBzdGF0aWMgYnVpbGQoZTUsIHQ0LCBpNCwgbzQsIHM4KSB7CiAgICAgIGxldCByMyA9IGl0OChlNSwgdDQpOwogICAgICBpZiAoIXIzLmxlbmd0aCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgbGV0IGw3ID0gdDQuZmFjZXQoeDcpLnNlbGVjdE9uT3BlbiA/IDAgOiAtMTsKICAgICAgaWYgKG80ICYmIG80LnNlbGVjdGVkICE9IGw3ICYmIG80LnNlbGVjdGVkICE9IC0xKSB7CiAgICAgICAgbGV0IGMxNyA9IG80Lm9wdGlvbnNbbzQuc2VsZWN0ZWRdLmNvbXBsZXRpb247CiAgICAgICAgZm9yIChsZXQgYTQgPSAwOyBhNCA8IHIzLmxlbmd0aDsgYTQrKykKICAgICAgICAgIGlmIChyM1thNF0uY29tcGxldGlvbiA9PSBjMTcpIHsKICAgICAgICAgICAgbDcgPSBhNDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBQMTMocjMsIG1lMTEoaTQsIGw3KSwgeyBwb3M6IGU1LnJlZHVjZSgoYzE3LCBhNCkgPT4gYTQuaGFzUmVzdWx0KCkgPyBNYXRoLm1pbihjMTcsIGE0LmZyb20pIDogYzE3LCAxZTgpLCBjcmVhdGU6IHR0MTAoZDMpLCBhYm92ZTogczguYWJvdmVDdXJzb3IgfSwgbzQgPyBvNC50aW1lc3RhbXAgOiBEYXRlLm5vdygpLCBsNyk7CiAgICB9CiAgICBtYXAoZTUpIHsKICAgICAgcmV0dXJuIG5ldyBQMTModGhpcy5vcHRpb25zLCB0aGlzLmF0dHJzLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMudG9vbHRpcCksIHsgcG9zOiBlNS5tYXBQb3ModGhpcy50b29sdGlwLnBvcykgfSksIHRoaXMudGltZXN0YW1wLCB0aGlzLnNlbGVjdGVkKTsKICAgIH0KICB9OwogIHZhciBNMTAgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIGk0KSB7CiAgICAgIHRoaXMuYWN0aXZlID0gZTUsIHRoaXMuaWQgPSB0NCwgdGhpcy5vcGVuID0gaTQ7CiAgICB9CiAgICBzdGF0aWMgc3RhcnQoKSB7CiAgICAgIHJldHVybiBuZXcgTTEwKGx0NSwgImNtLWFjLSIgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyZTYpLnRvU3RyaW5nKDM2KSwgbnVsbCk7CiAgICB9CiAgICB1cGRhdGUoZTUpIHsKICAgICAgbGV0IHsgc3RhdGU6IHQ0IH0gPSBlNSwgaTQgPSB0NC5mYWNldCh4NyksIHM4ID0gKGk0Lm92ZXJyaWRlIHx8IHQ0Lmxhbmd1YWdlRGF0YUF0KCJhdXRvY29tcGxldGUiLCBJMTIodDQpKS5tYXAoWmU0KSkubWFwKChsNykgPT4gKHRoaXMuYWN0aXZlLmZpbmQoKGE0KSA9PiBhNC5zb3VyY2UgPT0gbDcpIHx8IG5ldyBwNyhsNywgdGhpcy5hY3RpdmUuc29tZSgoYTQpID0+IGE0LnN0YXRlICE9IDApID8gMSA6IDApKS51cGRhdGUoZTUsIGk0KSk7CiAgICAgIHM4Lmxlbmd0aCA9PSB0aGlzLmFjdGl2ZS5sZW5ndGggJiYgczguZXZlcnkoKGw3LCBjMTcpID0+IGw3ID09IHRoaXMuYWN0aXZlW2MxN10pICYmIChzOCA9IHRoaXMuYWN0aXZlKTsKICAgICAgbGV0IHIzID0gZTUuc2VsZWN0aW9uIHx8IHM4LnNvbWUoKGw3KSA9PiBsNy5oYXNSZXN1bHQoKSAmJiBlNS5jaGFuZ2VzLnRvdWNoZXNSYW5nZShsNy5mcm9tLCBsNy50bykpIHx8ICFvdDQoczgsIHRoaXMuYWN0aXZlKSA/IFAxMy5idWlsZChzOCwgdDQsIHRoaXMuaWQsIHRoaXMub3BlbiwgaTQpIDogdGhpcy5vcGVuICYmIGU1LmRvY0NoYW5nZWQgPyB0aGlzLm9wZW4ubWFwKGU1LmNoYW5nZXMpIDogdGhpcy5vcGVuOwogICAgICAhcjMgJiYgczguZXZlcnkoKGw3KSA9PiBsNy5zdGF0ZSAhPSAxKSAmJiBzOC5zb21lKChsNykgPT4gbDcuaGFzUmVzdWx0KCkpICYmIChzOCA9IHM4Lm1hcCgobDcpID0+IGw3Lmhhc1Jlc3VsdCgpID8gbmV3IHA3KGw3LnNvdXJjZSwgMCkgOiBsNykpOwogICAgICBmb3IgKGxldCBsNyBvZiBlNS5lZmZlY3RzKQogICAgICAgIGw3LmlzKGxlOSkgJiYgKHIzID0gcjMgJiYgcjMuc2V0U2VsZWN0ZWQobDcudmFsdWUsIHRoaXMuaWQpKTsKICAgICAgcmV0dXJuIHM4ID09IHRoaXMuYWN0aXZlICYmIHIzID09IHRoaXMub3BlbiA/IHRoaXMgOiBuZXcgTTEwKHM4LCB0aGlzLmlkLCByMyk7CiAgICB9CiAgICBnZXQgdG9vbHRpcCgpIHsKICAgICAgcmV0dXJuIHRoaXMub3BlbiA/IHRoaXMub3Blbi50b29sdGlwIDogbnVsbDsKICAgIH0KICAgIGdldCBhdHRycygpIHsKICAgICAgcmV0dXJuIHRoaXMub3BlbiA/IHRoaXMub3Blbi5hdHRycyA6IHN0NTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIG90NChuOCwgZTUpIHsKICAgIGlmIChuOCA9PSBlNSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBmb3IgKGxldCB0NCA9IDAsIGk0ID0gMDsgOyApIHsKICAgICAgZm9yICg7IHQ0IDwgbjgubGVuZ3RoICYmICFuOFt0NF0uaGFzUmVzdWx0OyApCiAgICAgICAgdDQrKzsKICAgICAgZm9yICg7IGk0IDwgZTUubGVuZ3RoICYmICFlNVtpNF0uaGFzUmVzdWx0OyApCiAgICAgICAgaTQrKzsKICAgICAgbGV0IG80ID0gdDQgPT0gbjgubGVuZ3RoLCBzOCA9IGk0ID09IGU1Lmxlbmd0aDsKICAgICAgaWYgKG80IHx8IHM4KQogICAgICAgIHJldHVybiBvNCA9PSBzODsKICAgICAgaWYgKG44W3Q0KytdLnJlc3VsdCAhPSBlNVtpNCsrXS5yZXN1bHQpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICB2YXIgc3Q1ID0geyAiYXJpYS1hdXRvY29tcGxldGUiOiAibGlzdCIgfTsKICBmdW5jdGlvbiBtZTExKG44LCBlNSkgewogICAgbGV0IHQ0ID0geyAiYXJpYS1hdXRvY29tcGxldGUiOiAibGlzdCIsICJhcmlhLWhhc3BvcHVwIjogImxpc3Rib3giLCAiYXJpYS1jb250cm9scyI6IG44IH07CiAgICByZXR1cm4gZTUgPiAtMSAmJiAodDRbImFyaWEtYWN0aXZlZGVzY2VuZGFudCJdID0gbjggKyAiLSIgKyBlNSksIHQ0OwogIH0KICB2YXIgbHQ1ID0gW107CiAgZnVuY3Rpb24gdGU4KG44KSB7CiAgICByZXR1cm4gbjguaXNVc2VyRXZlbnQoImlucHV0LnR5cGUiKSA/ICJpbnB1dCIgOiBuOC5pc1VzZXJFdmVudCgiZGVsZXRlLmJhY2t3YXJkIikgPyAiZGVsZXRlIiA6IG51bGw7CiAgfQogIHZhciBwNyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgaTQgPSAtMSkgewogICAgICB0aGlzLnNvdXJjZSA9IGU1LCB0aGlzLnN0YXRlID0gdDQsIHRoaXMuZXhwbGljaXRQb3MgPSBpNDsKICAgIH0KICAgIGhhc1Jlc3VsdCgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdXBkYXRlKGU1LCB0NCkgewogICAgICBsZXQgaTQgPSB0ZTgoZTUpLCBvNCA9IHRoaXM7CiAgICAgIGk0ID8gbzQgPSBvNC5oYW5kbGVVc2VyRXZlbnQoZTUsIGk0LCB0NCkgOiBlNS5kb2NDaGFuZ2VkID8gbzQgPSBvNC5oYW5kbGVDaGFuZ2UoZTUpIDogZTUuc2VsZWN0aW9uICYmIG80LnN0YXRlICE9IDAgJiYgKG80ID0gbmV3IHA3KG80LnNvdXJjZSwgMCkpOwogICAgICBmb3IgKGxldCBzOCBvZiBlNS5lZmZlY3RzKQogICAgICAgIGlmIChzOC5pcyhzZTkpKQogICAgICAgICAgbzQgPSBuZXcgcDcobzQuc291cmNlLCAxLCBzOC52YWx1ZSA/IEkxMihlNS5zdGF0ZSkgOiAtMSk7CiAgICAgICAgZWxzZSBpZiAoczguaXMoSDgpKQogICAgICAgICAgbzQgPSBuZXcgcDcobzQuc291cmNlLCAwKTsKICAgICAgICBlbHNlIGlmIChzOC5pcyhNZTcpKQogICAgICAgICAgZm9yIChsZXQgcjMgb2YgczgudmFsdWUpCiAgICAgICAgICAgIHIzLnNvdXJjZSA9PSBvNC5zb3VyY2UgJiYgKG80ID0gcjMpOwogICAgICByZXR1cm4gbzQ7CiAgICB9CiAgICBoYW5kbGVVc2VyRXZlbnQoZTUsIHQ0LCBpNCkgewogICAgICByZXR1cm4gdDQgPT0gImRlbGV0ZSIgfHwgIWk0LmFjdGl2YXRlT25UeXBpbmcgPyB0aGlzLm1hcChlNS5jaGFuZ2VzKSA6IG5ldyBwNyh0aGlzLnNvdXJjZSwgMSk7CiAgICB9CiAgICBoYW5kbGVDaGFuZ2UoZTUpIHsKICAgICAgcmV0dXJuIGU1LmNoYW5nZXMudG91Y2hlc1JhbmdlKEkxMihlNS5zdGFydFN0YXRlKSkgPyBuZXcgcDcodGhpcy5zb3VyY2UsIDApIDogdGhpcy5tYXAoZTUuY2hhbmdlcyk7CiAgICB9CiAgICBtYXAoZTUpIHsKICAgICAgcmV0dXJuIGU1LmVtcHR5IHx8IHRoaXMuZXhwbGljaXRQb3MgPCAwID8gdGhpcyA6IG5ldyBwNyh0aGlzLnNvdXJjZSwgdGhpcy5zdGF0ZSwgZTUubWFwUG9zKHRoaXMuZXhwbGljaXRQb3MpKTsKICAgIH0KICB9OwogIHZhciBPNiA9IGNsYXNzIGV4dGVuZHMgcDcgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCBpNCwgbzQsIHM4KSB7CiAgICAgIHN1cGVyKGU1LCAyLCB0NCksIHRoaXMucmVzdWx0ID0gaTQsIHRoaXMuZnJvbSA9IG80LCB0aGlzLnRvID0gczg7CiAgICB9CiAgICBoYXNSZXN1bHQoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaGFuZGxlVXNlckV2ZW50KGU1LCB0NCwgaTQpIHsKICAgICAgdmFyIG80OwogICAgICBsZXQgczggPSBlNS5jaGFuZ2VzLm1hcFBvcyh0aGlzLmZyb20pLCByMyA9IGU1LmNoYW5nZXMubWFwUG9zKHRoaXMudG8sIDEpLCBsNyA9IEkxMihlNS5zdGF0ZSk7CiAgICAgIGlmICgodGhpcy5leHBsaWNpdFBvcyA8IDAgPyBsNyA8PSBzOCA6IGw3IDwgdGhpcy5mcm9tKSB8fCBsNyA+IHIzIHx8IHQ0ID09ICJkZWxldGUiICYmIEkxMihlNS5zdGFydFN0YXRlKSA9PSB0aGlzLmZyb20pCiAgICAgICAgcmV0dXJuIG5ldyBwNyh0aGlzLnNvdXJjZSwgdDQgPT0gImlucHV0IiAmJiBpNC5hY3RpdmF0ZU9uVHlwaW5nID8gMSA6IDApOwogICAgICBsZXQgYzE3ID0gdGhpcy5leHBsaWNpdFBvcyA8IDAgPyAtMSA6IGU1LmNoYW5nZXMubWFwUG9zKHRoaXMuZXhwbGljaXRQb3MpLCBhNDsKICAgICAgcmV0dXJuIHJ0OCh0aGlzLnJlc3VsdC52YWxpZEZvciwgZTUuc3RhdGUsIHM4LCByMykgPyBuZXcgTzYodGhpcy5zb3VyY2UsIGMxNywgdGhpcy5yZXN1bHQsIHM4LCByMykgOiB0aGlzLnJlc3VsdC51cGRhdGUgJiYgKGE0ID0gdGhpcy5yZXN1bHQudXBkYXRlKHRoaXMucmVzdWx0LCBzOCwgcjMsIG5ldyBGMTAoZTUuc3RhdGUsIGw3LCBjMTcgPj0gMCkpKSA/IG5ldyBPNih0aGlzLnNvdXJjZSwgYzE3LCBhNCwgYTQuZnJvbSwgKG80ID0gYTQudG8pICE9PSBudWxsICYmIG80ICE9PSB2b2lkIDAgPyBvNCA6IEkxMihlNS5zdGF0ZSkpIDogbmV3IHA3KHRoaXMuc291cmNlLCAxLCBjMTcpOwogICAgfQogICAgaGFuZGxlQ2hhbmdlKGU1KSB7CiAgICAgIHJldHVybiBlNS5jaGFuZ2VzLnRvdWNoZXNSYW5nZSh0aGlzLmZyb20sIHRoaXMudG8pID8gbmV3IHA3KHRoaXMuc291cmNlLCAwKSA6IHRoaXMubWFwKGU1LmNoYW5nZXMpOwogICAgfQogICAgbWFwKGU1KSB7CiAgICAgIHJldHVybiBlNS5lbXB0eSA/IHRoaXMgOiBuZXcgTzYodGhpcy5zb3VyY2UsIHRoaXMuZXhwbGljaXRQb3MgPCAwID8gLTEgOiBlNS5tYXBQb3ModGhpcy5leHBsaWNpdFBvcyksIHRoaXMucmVzdWx0LCBlNS5tYXBQb3ModGhpcy5mcm9tKSwgZTUubWFwUG9zKHRoaXMudG8sIDEpKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIHJ0OChuOCwgZTUsIHQ0LCBpNCkgewogICAgaWYgKCFuOCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IG80ID0gZTUuc2xpY2VEb2ModDQsIGk0KTsKICAgIHJldHVybiB0eXBlb2YgbjggPT0gImZ1bmN0aW9uIiA/IG44KG80LCB0NCwgaTQsIGU1KSA6IEFlMTEobjgsIHRydWUpLnRlc3QobzQpOwogIH0KICB2YXIgc2U5ID0geS5kZWZpbmUoKTsKICB2YXIgSDggPSB5LmRlZmluZSgpOwogIHZhciBNZTcgPSB5LmRlZmluZSh7IG1hcChuOCwgZTUpIHsKICAgIHJldHVybiBuOC5tYXAoKHQ0KSA9PiB0NC5tYXAoZTUpKTsKICB9IH0pOwogIHZhciBsZTkgPSB5LmRlZmluZSgpOwogIHZhciBkMyA9IEoyLmRlZmluZSh7IGNyZWF0ZSgpIHsKICAgIHJldHVybiBNMTAuc3RhcnQoKTsKICB9LCB1cGRhdGUobjgsIGU1KSB7CiAgICByZXR1cm4gbjgudXBkYXRlKGU1KTsKICB9LCBwcm92aWRlOiAobjgpID0+IFtubi5mcm9tKG44LCAoZTUpID0+IGU1LnRvb2x0aXApLCBNMi5jb250ZW50QXR0cmlidXRlcy5mcm9tKG44LCAoZTUpID0+IGU1LmF0dHJzKV0gfSk7CiAgZnVuY3Rpb24gVTEwKG44LCBlNSA9ICJvcHRpb24iKSB7CiAgICByZXR1cm4gKHQ0KSA9PiB7CiAgICAgIGxldCBpNCA9IHQ0LnN0YXRlLmZpZWxkKGQzLCBmYWxzZSk7CiAgICAgIGlmICghaTQgfHwgIWk0Lm9wZW4gfHwgRGF0ZS5ub3coKSAtIGk0Lm9wZW4udGltZXN0YW1wIDwgdDQuc3RhdGUuZmFjZXQoeDcpLmludGVyYWN0aW9uRGVsYXkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgbzQgPSAxLCBzODsKICAgICAgZTUgPT0gInBhZ2UiICYmIChzOCA9IHVvKHQ0LCBpNC5vcGVuLnRvb2x0aXApKSAmJiAobzQgPSBNYXRoLm1heCgyLCBNYXRoLmZsb29yKHM4LmRvbS5vZmZzZXRIZWlnaHQgLyBzOC5kb20ucXVlcnlTZWxlY3RvcigibGkiKS5vZmZzZXRIZWlnaHQpIC0gMSkpOwogICAgICBsZXQgeyBsZW5ndGg6IHIzIH0gPSBpNC5vcGVuLm9wdGlvbnMsIGw3ID0gaTQub3Blbi5zZWxlY3RlZCA+IC0xID8gaTQub3Blbi5zZWxlY3RlZCArIG80ICogKG44ID8gMSA6IC0xKSA6IG44ID8gMCA6IHIzIC0gMTsKICAgICAgcmV0dXJuIGw3IDwgMCA/IGw3ID0gZTUgPT0gInBhZ2UiID8gMCA6IHIzIC0gMSA6IGw3ID49IHIzICYmIChsNyA9IGU1ID09ICJwYWdlIiA/IHIzIC0gMSA6IDApLCB0NC5kaXNwYXRjaCh7IGVmZmVjdHM6IGxlOS5vZihsNykgfSksIHRydWU7CiAgICB9OwogIH0KICB2YXIgY3Q3ID0gKG44KSA9PiB7CiAgICBsZXQgZTUgPSBuOC5zdGF0ZS5maWVsZChkMywgZmFsc2UpOwogICAgcmV0dXJuIG44LnN0YXRlLnJlYWRPbmx5IHx8ICFlNSB8fCAhZTUub3BlbiB8fCBlNS5vcGVuLnNlbGVjdGVkIDwgMCB8fCBEYXRlLm5vdygpIC0gZTUub3Blbi50aW1lc3RhbXAgPCBuOC5zdGF0ZS5mYWNldCh4NykuaW50ZXJhY3Rpb25EZWxheSA/IGZhbHNlIDogKFRlOShuOCwgZTUub3Blbi5vcHRpb25zW2U1Lm9wZW4uc2VsZWN0ZWRdKSwgdHJ1ZSk7CiAgfTsKICB2YXIgYXQ0ID0gKG44KSA9PiBuOC5zdGF0ZS5maWVsZChkMywgZmFsc2UpID8gKG44LmRpc3BhdGNoKHsgZWZmZWN0czogc2U5Lm9mKHRydWUpIH0pLCB0cnVlKSA6IGZhbHNlOwogIHZhciBmdDMgPSAobjgpID0+IHsKICAgIGxldCBlNSA9IG44LnN0YXRlLmZpZWxkKGQzLCBmYWxzZSk7CiAgICByZXR1cm4gIWU1IHx8ICFlNS5hY3RpdmUuc29tZSgodDQpID0+IHQ0LnN0YXRlICE9IDApID8gZmFsc2UgOiAobjguZGlzcGF0Y2goeyBlZmZlY3RzOiBIOC5vZihudWxsKSB9KSwgdHJ1ZSk7CiAgfTsKICB2YXIgbmU3ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0KSB7CiAgICAgIHRoaXMuYWN0aXZlID0gZTUsIHRoaXMuY29udGV4dCA9IHQ0LCB0aGlzLnRpbWUgPSBEYXRlLm5vdygpLCB0aGlzLnVwZGF0ZXMgPSBbXSwgdGhpcy5kb25lID0gdm9pZCAwOwogICAgfQogIH07CiAgdmFyIGdlOCA9IDUwOwogIHZhciB1dDcgPSA1MDsKICB2YXIgaHQ3ID0gMWUzOwogIHZhciBwdDcgPSBWNC5mcm9tQ2xhc3MoY2xhc3MgewogICAgY29uc3RydWN0b3IobjgpIHsKICAgICAgdGhpcy52aWV3ID0gbjgsIHRoaXMuZGVib3VuY2VVcGRhdGUgPSAtMSwgdGhpcy5ydW5uaW5nID0gW10sIHRoaXMuZGVib3VuY2VBY2NlcHQgPSAtMSwgdGhpcy5jb21wb3NpbmcgPSAwOwogICAgICBmb3IgKGxldCBlNSBvZiBuOC5zdGF0ZS5maWVsZChkMykuYWN0aXZlKQogICAgICAgIGU1LnN0YXRlID09IDEgJiYgdGhpcy5zdGFydFF1ZXJ5KGU1KTsKICAgIH0KICAgIHVwZGF0ZShuOCkgewogICAgICBsZXQgZTUgPSBuOC5zdGF0ZS5maWVsZChkMyk7CiAgICAgIGlmICghbjguc2VsZWN0aW9uU2V0ICYmICFuOC5kb2NDaGFuZ2VkICYmIG44LnN0YXJ0U3RhdGUuZmllbGQoZDMpID09IGU1KQogICAgICAgIHJldHVybjsKICAgICAgbGV0IHQ0ID0gbjgudHJhbnNhY3Rpb25zLnNvbWUoKGk0KSA9PiAoaTQuc2VsZWN0aW9uIHx8IGk0LmRvY0NoYW5nZWQpICYmICF0ZTgoaTQpKTsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IHRoaXMucnVubmluZy5sZW5ndGg7IGk0KyspIHsKICAgICAgICBsZXQgbzQgPSB0aGlzLnJ1bm5pbmdbaTRdOwogICAgICAgIGlmICh0NCB8fCBvNC51cGRhdGVzLmxlbmd0aCArIG44LnRyYW5zYWN0aW9ucy5sZW5ndGggPiB1dDcgJiYgRGF0ZS5ub3coKSAtIG80LnRpbWUgPiBodDcpIHsKICAgICAgICAgIGZvciAobGV0IHM4IG9mIG80LmNvbnRleHQuYWJvcnRMaXN0ZW5lcnMpCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgczgoKTsKICAgICAgICAgICAgfSBjYXRjaCAocjMpIHsKICAgICAgICAgICAgICBudDIodGhpcy52aWV3LnN0YXRlLCByMyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIG80LmNvbnRleHQuYWJvcnRMaXN0ZW5lcnMgPSBudWxsLCB0aGlzLnJ1bm5pbmcuc3BsaWNlKGk0LS0sIDEpOwogICAgICAgIH0gZWxzZQogICAgICAgICAgbzQudXBkYXRlcy5wdXNoKC4uLm44LnRyYW5zYWN0aW9ucyk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuZGVib3VuY2VVcGRhdGUgPiAtMSAmJiBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVVwZGF0ZSksIHRoaXMuZGVib3VuY2VVcGRhdGUgPSBlNS5hY3RpdmUuc29tZSgoaTQpID0+IGk0LnN0YXRlID09IDEgJiYgIXRoaXMucnVubmluZy5zb21lKChvNCkgPT4gbzQuYWN0aXZlLnNvdXJjZSA9PSBpNC5zb3VyY2UpKSA/IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdGFydFVwZGF0ZSgpLCBnZTgpIDogLTEsIHRoaXMuY29tcG9zaW5nICE9IDApCiAgICAgICAgZm9yIChsZXQgaTQgb2YgbjgudHJhbnNhY3Rpb25zKQogICAgICAgICAgdGU4KGk0KSA9PSAiaW5wdXQiID8gdGhpcy5jb21wb3NpbmcgPSAyIDogdGhpcy5jb21wb3NpbmcgPT0gMiAmJiBpNC5zZWxlY3Rpb24gJiYgKHRoaXMuY29tcG9zaW5nID0gMyk7CiAgICB9CiAgICBzdGFydFVwZGF0ZSgpIHsKICAgICAgdGhpcy5kZWJvdW5jZVVwZGF0ZSA9IC0xOwogICAgICBsZXQgeyBzdGF0ZTogbjggfSA9IHRoaXMudmlldywgZTUgPSBuOC5maWVsZChkMyk7CiAgICAgIGZvciAobGV0IHQ0IG9mIGU1LmFjdGl2ZSkKICAgICAgICB0NC5zdGF0ZSA9PSAxICYmICF0aGlzLnJ1bm5pbmcuc29tZSgoaTQpID0+IGk0LmFjdGl2ZS5zb3VyY2UgPT0gdDQuc291cmNlKSAmJiB0aGlzLnN0YXJ0UXVlcnkodDQpOwogICAgfQogICAgc3RhcnRRdWVyeShuOCkgewogICAgICBsZXQgeyBzdGF0ZTogZTUgfSA9IHRoaXMudmlldywgdDQgPSBJMTIoZTUpLCBpNCA9IG5ldyBGMTAoZTUsIHQ0LCBuOC5leHBsaWNpdFBvcyA9PSB0NCksIG80ID0gbmV3IG5lNyhuOCwgaTQpOwogICAgICB0aGlzLnJ1bm5pbmcucHVzaChvNCksIFByb21pc2UucmVzb2x2ZShuOC5zb3VyY2UoaTQpKS50aGVuKChzOCkgPT4gewogICAgICAgIG80LmNvbnRleHQuYWJvcnRlZCB8fCAobzQuZG9uZSA9IHM4IHx8IG51bGwsIHRoaXMuc2NoZWR1bGVBY2NlcHQoKSk7CiAgICAgIH0sIChzOCkgPT4gewogICAgICAgIHRoaXMudmlldy5kaXNwYXRjaCh7IGVmZmVjdHM6IEg4Lm9mKG51bGwpIH0pLCBudDIodGhpcy52aWV3LnN0YXRlLCBzOCk7CiAgICAgIH0pOwogICAgfQogICAgc2NoZWR1bGVBY2NlcHQoKSB7CiAgICAgIHRoaXMucnVubmluZy5ldmVyeSgobjgpID0+IG44LmRvbmUgIT09IHZvaWQgMCkgPyB0aGlzLmFjY2VwdCgpIDogdGhpcy5kZWJvdW5jZUFjY2VwdCA8IDAgJiYgKHRoaXMuZGVib3VuY2VBY2NlcHQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWNjZXB0KCksIGdlOCkpOwogICAgfQogICAgYWNjZXB0KCkgewogICAgICB2YXIgbjg7CiAgICAgIHRoaXMuZGVib3VuY2VBY2NlcHQgPiAtMSAmJiBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZUFjY2VwdCksIHRoaXMuZGVib3VuY2VBY2NlcHQgPSAtMTsKICAgICAgbGV0IGU1ID0gW10sIHQ0ID0gdGhpcy52aWV3LnN0YXRlLmZhY2V0KHg3KTsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IHRoaXMucnVubmluZy5sZW5ndGg7IGk0KyspIHsKICAgICAgICBsZXQgbzQgPSB0aGlzLnJ1bm5pbmdbaTRdOwogICAgICAgIGlmIChvNC5kb25lID09PSB2b2lkIDApCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAodGhpcy5ydW5uaW5nLnNwbGljZShpNC0tLCAxKSwgbzQuZG9uZSkgewogICAgICAgICAgbGV0IHIzID0gbmV3IE82KG80LmFjdGl2ZS5zb3VyY2UsIG80LmFjdGl2ZS5leHBsaWNpdFBvcywgbzQuZG9uZSwgbzQuZG9uZS5mcm9tLCAobjggPSBvNC5kb25lLnRvKSAhPT0gbnVsbCAmJiBuOCAhPT0gdm9pZCAwID8gbjggOiBJMTIobzQudXBkYXRlcy5sZW5ndGggPyBvNC51cGRhdGVzWzBdLnN0YXJ0U3RhdGUgOiB0aGlzLnZpZXcuc3RhdGUpKTsKICAgICAgICAgIGZvciAobGV0IGw3IG9mIG80LnVwZGF0ZXMpCiAgICAgICAgICAgIHIzID0gcjMudXBkYXRlKGw3LCB0NCk7CiAgICAgICAgICBpZiAocjMuaGFzUmVzdWx0KCkpIHsKICAgICAgICAgICAgZTUucHVzaChyMyk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgczggPSB0aGlzLnZpZXcuc3RhdGUuZmllbGQoZDMpLmFjdGl2ZS5maW5kKChyMykgPT4gcjMuc291cmNlID09IG80LmFjdGl2ZS5zb3VyY2UpOwogICAgICAgIGlmIChzOCAmJiBzOC5zdGF0ZSA9PSAxKQogICAgICAgICAgaWYgKG80LmRvbmUgPT0gbnVsbCkgewogICAgICAgICAgICBsZXQgcjMgPSBuZXcgcDcobzQuYWN0aXZlLnNvdXJjZSwgMCk7CiAgICAgICAgICAgIGZvciAobGV0IGw3IG9mIG80LnVwZGF0ZXMpCiAgICAgICAgICAgICAgcjMgPSByMy51cGRhdGUobDcsIHQ0KTsKICAgICAgICAgICAgcjMuc3RhdGUgIT0gMSAmJiBlNS5wdXNoKHIzKTsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICB0aGlzLnN0YXJ0UXVlcnkoczgpOwogICAgICB9CiAgICAgIGU1Lmxlbmd0aCAmJiB0aGlzLnZpZXcuZGlzcGF0Y2goeyBlZmZlY3RzOiBNZTcub2YoZTUpIH0pOwogICAgfQogIH0sIHsgZXZlbnRIYW5kbGVyczogeyBibHVyKCkgewogICAgbGV0IG44ID0gdGhpcy52aWV3LnN0YXRlLmZpZWxkKGQzLCBmYWxzZSk7CiAgICBuOCAmJiBuOC50b29sdGlwICYmIHRoaXMudmlldy5zdGF0ZS5mYWNldCh4NykuY2xvc2VPbkJsdXIgJiYgdGhpcy52aWV3LmRpc3BhdGNoKHsgZWZmZWN0czogSDgub2YobnVsbCkgfSk7CiAgfSwgY29tcG9zaXRpb25zdGFydCgpIHsKICAgIHRoaXMuY29tcG9zaW5nID0gMTsKICB9LCBjb21wb3NpdGlvbmVuZCgpIHsKICAgIHRoaXMuY29tcG9zaW5nID09IDMgJiYgc2V0VGltZW91dCgoKSA9PiB0aGlzLnZpZXcuZGlzcGF0Y2goeyBlZmZlY3RzOiBzZTkub2YoZmFsc2UpIH0pLCAyMCksIHRoaXMuY29tcG9zaW5nID0gMDsKICB9IH0gfSk7CiAgdmFyIFJlOSA9IE0yLmJhc2VUaGVtZSh7ICIuY20tdG9vbHRpcC5jbS10b29sdGlwLWF1dG9jb21wbGV0ZSI6IHsgIiYgPiB1bCI6IHsgZm9udEZhbWlseTogIm1vbm9zcGFjZSIsIHdoaXRlU3BhY2U6ICJub3dyYXAiLCBvdmVyZmxvdzogImhpZGRlbiBhdXRvIiwgbWF4V2lkdGhfZmFsbGJhY2s6ICI3MDBweCIsIG1heFdpZHRoOiAibWluKDcwMHB4LCA5NXZ3KSIsIG1pbldpZHRoOiAiMjUwcHgiLCBtYXhIZWlnaHQ6ICIxMGVtIiwgbGlzdFN0eWxlOiAibm9uZSIsIG1hcmdpbjogMCwgcGFkZGluZzogMCwgIiYgPiBsaSI6IHsgb3ZlcmZsb3dYOiAiaGlkZGVuIiwgdGV4dE92ZXJmbG93OiAiZWxsaXBzaXMiLCBjdXJzb3I6ICJwb2ludGVyIiwgcGFkZGluZzogIjFweCAzcHgiLCBsaW5lSGVpZ2h0OiAxLjIgfSB9IH0sICImbGlnaHQgLmNtLXRvb2x0aXAtYXV0b2NvbXBsZXRlIHVsIGxpW2FyaWEtc2VsZWN0ZWRdIjogeyBiYWNrZ3JvdW5kOiAiIzE3YyIsIGNvbG9yOiAid2hpdGUiIH0sICImZGFyayAuY20tdG9vbHRpcC1hdXRvY29tcGxldGUgdWwgbGlbYXJpYS1zZWxlY3RlZF0iOiB7IGJhY2tncm91bmQ6ICIjMzQ3IiwgY29sb3I6ICJ3aGl0ZSIgfSwgIi5jbS1jb21wbGV0aW9uTGlzdEluY29tcGxldGVUb3A6YmVmb3JlLCAuY20tY29tcGxldGlvbkxpc3RJbmNvbXBsZXRlQm90dG9tOmFmdGVyIjogeyBjb250ZW50OiAnIlx4QjdceEI3XHhCNyInLCBvcGFjaXR5OiAwLjUsIGRpc3BsYXk6ICJibG9jayIsIHRleHRBbGlnbjogImNlbnRlciIgfSwgIi5jbS10b29sdGlwLmNtLWNvbXBsZXRpb25JbmZvIjogeyBwb3NpdGlvbjogImFic29sdXRlIiwgcGFkZGluZzogIjNweCA5cHgiLCB3aWR0aDogIm1heC1jb250ZW50IiwgbWF4V2lkdGg6IGAkezQwMH1weGAsIGJveFNpemluZzogImJvcmRlci1ib3giIH0sICIuY20tY29tcGxldGlvbkluZm8uY20tY29tcGxldGlvbkluZm8tbGVmdCI6IHsgcmlnaHQ6ICIxMDAlIiB9LCAiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLXJpZ2h0IjogeyBsZWZ0OiAiMTAwJSIgfSwgIi5jbS1jb21wbGV0aW9uSW5mby5jbS1jb21wbGV0aW9uSW5mby1sZWZ0LW5hcnJvdyI6IHsgcmlnaHQ6IGAkezMwfXB4YCB9LCAiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLXJpZ2h0LW5hcnJvdyI6IHsgbGVmdDogYCR7MzB9cHhgIH0sICImbGlnaHQgLmNtLXNuaXBwZXRGaWVsZCI6IHsgYmFja2dyb3VuZENvbG9yOiAiIzAwMDAwMDIyIiB9LCAiJmRhcmsgLmNtLXNuaXBwZXRGaWVsZCI6IHsgYmFja2dyb3VuZENvbG9yOiAiI2ZmZmZmZjIyIiB9LCAiLmNtLXNuaXBwZXRGaWVsZFBvc2l0aW9uIjogeyB2ZXJ0aWNhbEFsaWduOiAidGV4dC10b3AiLCB3aWR0aDogMCwgaGVpZ2h0OiAiMS4xNWVtIiwgZGlzcGxheTogImlubGluZS1ibG9jayIsIG1hcmdpbjogIjAgLTAuN3B4IC0uN2VtIiwgYm9yZGVyTGVmdDogIjEuNHB4IGRvdHRlZCAjODg4IiB9LCAiLmNtLWNvbXBsZXRpb25NYXRjaGVkVGV4dCI6IHsgdGV4dERlY29yYXRpb246ICJ1bmRlcmxpbmUiIH0sICIuY20tY29tcGxldGlvbkRldGFpbCI6IHsgbWFyZ2luTGVmdDogIjAuNWVtIiwgZm9udFN0eWxlOiAiaXRhbGljIiB9LCAiLmNtLWNvbXBsZXRpb25JY29uIjogeyBmb250U2l6ZTogIjkwJSIsIHdpZHRoOiAiLjhlbSIsIGRpc3BsYXk6ICJpbmxpbmUtYmxvY2siLCB0ZXh0QWxpZ246ICJjZW50ZXIiLCBwYWRkaW5nUmlnaHQ6ICIuNmVtIiwgb3BhY2l0eTogIjAuNiIgfSwgIi5jbS1jb21wbGV0aW9uSWNvbi1mdW5jdGlvbiwgLmNtLWNvbXBsZXRpb25JY29uLW1ldGhvZCI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInXHUwMTkyJyIgfSB9LCAiLmNtLWNvbXBsZXRpb25JY29uLWNsYXNzIjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidcdTI1Q0InIiB9IH0sICIuY20tY29tcGxldGlvbkljb24taW50ZXJmYWNlIjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidcdTI1Q0MnIiB9IH0sICIuY20tY29tcGxldGlvbkljb24tdmFyaWFibGUiOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ1x1ezFENDY1fSciIH0gfSwgIi5jbS1jb21wbGV0aW9uSWNvbi1jb25zdGFudCI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInXHV7MUQ0MzZ9JyIgfSB9LCAiLmNtLWNvbXBsZXRpb25JY29uLXR5cGUiOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ1x1ezFENDYxfSciIH0gfSwgIi5jbS1jb21wbGV0aW9uSWNvbi1lbnVtIjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidcdTIyMkEnIiB9IH0sICIuY20tY29tcGxldGlvbkljb24tcHJvcGVydHkiOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ1x1MjVBMSciIH0gfSwgIi5jbS1jb21wbGV0aW9uSWNvbi1rZXl3b3JkIjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidcdXsxRjUxMX1cdUZFMEUnIiB9IH0sICIuY20tY29tcGxldGlvbkljb24tbmFtZXNwYWNlIjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidcdTI1QTInIiB9IH0sICIuY20tY29tcGxldGlvbkljb24tdGV4dCI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInYWJjJyIsIGZvbnRTaXplOiAiNTAlIiwgdmVydGljYWxBbGlnbjogIm1pZGRsZSIgfSB9IH0pOwogIHZhciBkdDQgPSBrLndpZGdldCh7IHdpZGdldDogbmV3IGNsYXNzIGV4dGVuZHMgWDQgewogICAgdG9ET00oKSB7CiAgICAgIGxldCBuOCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgcmV0dXJuIG44LmNsYXNzTmFtZSA9ICJjbS1zbmlwcGV0RmllbGRQb3NpdGlvbiIsIG44OwogICAgfQogICAgaWdub3JlRXZlbnQoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9KCkgfSk7CiAgdmFyIG10NCA9IGsubWFyayh7IGNsYXNzOiAiY20tc25pcHBldEZpZWxkIiB9KTsKICB2YXIgUzkgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQpIHsKICAgICAgdGhpcy5yYW5nZXMgPSBlNSwgdGhpcy5hY3RpdmUgPSB0NCwgdGhpcy5kZWNvID0gay5zZXQoZTUubWFwKChpNCkgPT4gKGk0LmZyb20gPT0gaTQudG8gPyBkdDQgOiBtdDQpLnJhbmdlKGk0LmZyb20sIGk0LnRvKSkpOwogICAgfQogICAgbWFwKGU1KSB7CiAgICAgIGxldCB0NCA9IFtdOwogICAgICBmb3IgKGxldCBpNCBvZiB0aGlzLnJhbmdlcykgewogICAgICAgIGxldCBvNCA9IGk0Lm1hcChlNSk7CiAgICAgICAgaWYgKCFvNCkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHQ0LnB1c2gobzQpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgUzkodDQsIHRoaXMuYWN0aXZlKTsKICAgIH0KICAgIHNlbGVjdGlvbkluc2lkZUZpZWxkKGU1KSB7CiAgICAgIHJldHVybiBlNS5yYW5nZXMuZXZlcnkoKHQ0KSA9PiB0aGlzLnJhbmdlcy5zb21lKChpNCkgPT4gaTQuZmllbGQgPT0gdGhpcy5hY3RpdmUgJiYgaTQuZnJvbSA8PSB0NC5mcm9tICYmIGk0LnRvID49IHQ0LnRvKSk7CiAgICB9CiAgfTsKICB2YXIgJDExID0geS5kZWZpbmUoeyBtYXAobjgsIGU1KSB7CiAgICByZXR1cm4gbjggJiYgbjgubWFwKGU1KTsKICB9IH0pOwogIHZhciBndDYgPSB5LmRlZmluZSgpOwogIHZhciBEOSA9IEoyLmRlZmluZSh7IGNyZWF0ZSgpIHsKICAgIHJldHVybiBudWxsOwogIH0sIHVwZGF0ZShuOCwgZTUpIHsKICAgIGZvciAobGV0IHQ0IG9mIGU1LmVmZmVjdHMpIHsKICAgICAgaWYgKHQ0LmlzKCQxMSkpCiAgICAgICAgcmV0dXJuIHQ0LnZhbHVlOwogICAgICBpZiAodDQuaXMoZ3Q2KSAmJiBuOCkKICAgICAgICByZXR1cm4gbmV3IFM5KG44LnJhbmdlcywgdDQudmFsdWUpOwogICAgfQogICAgcmV0dXJuIG44ICYmIGU1LmRvY0NoYW5nZWQgJiYgKG44ID0gbjgubWFwKGU1LmNoYW5nZXMpKSwgbjggJiYgZTUuc2VsZWN0aW9uICYmICFuOC5zZWxlY3Rpb25JbnNpZGVGaWVsZChlNS5zZWxlY3Rpb24pICYmIChuOCA9IG51bGwpLCBuODsKICB9LCBwcm92aWRlOiAobjgpID0+IE0yLmRlY29yYXRpb25zLmZyb20objgsIChlNSkgPT4gZTUgPyBlNS5kZWNvIDogay5ub25lKSB9KTsKICBmdW5jdGlvbiByZTEwKG44LCBlNSkgewogICAgcmV0dXJuIGcyLmNyZWF0ZShuOC5maWx0ZXIoKHQ0KSA9PiB0NC5maWVsZCA9PSBlNSkubWFwKCh0NCkgPT4gZzIucmFuZ2UodDQuZnJvbSwgdDQudG8pKSk7CiAgfQogIGZ1bmN0aW9uIEJlNihuOCkgewogICAgcmV0dXJuICh7IHN0YXRlOiBlNSwgZGlzcGF0Y2g6IHQ0IH0pID0+IHsKICAgICAgbGV0IGk0ID0gZTUuZmllbGQoRDksIGZhbHNlKTsKICAgICAgaWYgKCFpNCB8fCBuOCA8IDAgJiYgaTQuYWN0aXZlID09IDApCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgbzQgPSBpNC5hY3RpdmUgKyBuOCwgczggPSBuOCA+IDAgJiYgIWk0LnJhbmdlcy5zb21lKChyMykgPT4gcjMuZmllbGQgPT0gbzQgKyBuOCk7CiAgICAgIHJldHVybiB0NChlNS51cGRhdGUoeyBzZWxlY3Rpb246IHJlMTAoaTQucmFuZ2VzLCBvNCksIGVmZmVjdHM6ICQxMS5vZihzOCA/IG51bGwgOiBuZXcgUzkoaTQucmFuZ2VzLCBvNCkpIH0pKSwgdHJ1ZTsKICAgIH07CiAgfQogIHZhciB4dDcgPSAoeyBzdGF0ZTogbjgsIGRpc3BhdGNoOiBlNSB9KSA9PiBuOC5maWVsZChEOSwgZmFsc2UpID8gKGU1KG44LnVwZGF0ZSh7IGVmZmVjdHM6ICQxMS5vZihudWxsKSB9KSksIHRydWUpIDogZmFsc2U7CiAgdmFyIHl0NCA9IEJlNigxKTsKICB2YXIgd3Q0ID0gQmU2KC0xKTsKICB2YXIgdnQ0ID0gW3sga2V5OiAiVGFiIiwgcnVuOiB5dDQsIHNoaWZ0OiB3dDQgfSwgeyBrZXk6ICJFc2NhcGUiLCBydW46IHh0NyB9XTsKICB2YXIgYmU3ID0gQTIuZGVmaW5lKHsgY29tYmluZShuOCkgewogICAgcmV0dXJuIG44Lmxlbmd0aCA/IG44WzBdIDogdnQ0OwogIH0gfSk7CiAgdmFyIEN0NSA9IGx0LmhpZ2hlc3QoYnIuY29tcHV0ZShbYmU3XSwgKG44KSA9PiBuOC5mYWNldChiZTcpKSk7CiAgdmFyIEl0NSA9IE0yLmRvbUV2ZW50SGFuZGxlcnMoeyBtb3VzZWRvd24objgsIGU1KSB7CiAgICBsZXQgdDQgPSBlNS5zdGF0ZS5maWVsZChEOSwgZmFsc2UpLCBpNDsKICAgIGlmICghdDQgfHwgKGk0ID0gZTUucG9zQXRDb29yZHMoeyB4OiBuOC5jbGllbnRYLCB5OiBuOC5jbGllbnRZIH0pKSA9PSBudWxsKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgbzQgPSB0NC5yYW5nZXMuZmluZCgoczgpID0+IHM4LmZyb20gPD0gaTQgJiYgczgudG8gPj0gaTQpOwogICAgcmV0dXJuICFvNCB8fCBvNC5maWVsZCA9PSB0NC5hY3RpdmUgPyBmYWxzZSA6IChlNS5kaXNwYXRjaCh7IHNlbGVjdGlvbjogcmUxMCh0NC5yYW5nZXMsIG80LmZpZWxkKSwgZWZmZWN0czogJDExLm9mKHQ0LnJhbmdlcy5zb21lKChzOCkgPT4gczguZmllbGQgPiBvNC5maWVsZCkgPyBuZXcgUzkodDQucmFuZ2VzLCBvNC5maWVsZCkgOiBudWxsKSB9KSwgdHJ1ZSk7CiAgfSB9KTsKICB2YXIgTDkgPSB7IGJyYWNrZXRzOiBbIigiLCAiWyIsICJ7IiwgIiciLCAnIiddLCBiZWZvcmU6ICIpXX06Oz4iLCBzdHJpbmdQcmVmaXhlczogW10gfTsKICB2YXIgRTQgPSB5LmRlZmluZSh7IG1hcChuOCwgZTUpIHsKICAgIGxldCB0NCA9IGU1Lm1hcFBvcyhuOCwgLTEsIE0uVHJhY2tBZnRlcik7CiAgICByZXR1cm4gdDQgPz8gdm9pZCAwOwogIH0gfSk7CiAgdmFyIGNlOSA9IHkuZGVmaW5lKHsgbWFwKG44LCBlNSkgewogICAgcmV0dXJuIGU1Lm1hcFBvcyhuOCk7CiAgfSB9KTsKICB2YXIgYWU4ID0gbmV3IGNsYXNzIGV4dGVuZHMgaiB7CiAgfSgpOwogIGFlOC5zdGFydFNpZGUgPSAxOwogIGFlOC5lbmRTaWRlID0gLTE7CiAgdmFyIExlNCA9IEoyLmRlZmluZSh7IGNyZWF0ZSgpIHsKICAgIHJldHVybiBQLmVtcHR5OwogIH0sIHVwZGF0ZShuOCwgZTUpIHsKICAgIGlmIChlNS5zZWxlY3Rpb24pIHsKICAgICAgbGV0IHQ0ID0gZTUuc3RhdGUuZG9jLmxpbmVBdChlNS5zZWxlY3Rpb24ubWFpbi5oZWFkKS5mcm9tLCBpNCA9IGU1LnN0YXJ0U3RhdGUuZG9jLmxpbmVBdChlNS5zdGFydFN0YXRlLnNlbGVjdGlvbi5tYWluLmhlYWQpLmZyb207CiAgICAgIHQ0ICE9IGU1LmNoYW5nZXMubWFwUG9zKGk0LCAtMSkgJiYgKG44ID0gUC5lbXB0eSk7CiAgICB9CiAgICBuOCA9IG44Lm1hcChlNS5jaGFuZ2VzKTsKICAgIGZvciAobGV0IHQ0IG9mIGU1LmVmZmVjdHMpCiAgICAgIHQ0LmlzKEU0KSA/IG44ID0gbjgudXBkYXRlKHsgYWRkOiBbYWU4LnJhbmdlKHQ0LnZhbHVlLCB0NC52YWx1ZSArIDEpXSB9KSA6IHQ0LmlzKGNlOSkgJiYgKG44ID0gbjgudXBkYXRlKHsgZmlsdGVyOiAoaTQpID0+IGk0ICE9IHQ0LnZhbHVlIH0pKTsKICAgIHJldHVybiBuODsKICB9IH0pOwogIGZ1bmN0aW9uIEt0MygpIHsKICAgIHJldHVybiBbT3Q3LCBMZTRdOwogIH0KICB2YXIgWTE0ID0gIigpW117fTw+IjsKICBmdW5jdGlvbiBrZTkobjgpIHsKICAgIGZvciAobGV0IGU1ID0gMDsgZTUgPCBZMTQubGVuZ3RoOyBlNSArPSAyKQogICAgICBpZiAoWTE0LmNoYXJDb2RlQXQoZTUpID09IG44KQogICAgICAgIHJldHVybiBZMTQuY2hhckF0KGU1ICsgMSk7CiAgICByZXR1cm4gcnQobjggPCAxMjggPyBuOCA6IG44ICsgMSk7CiAgfQogIGZ1bmN0aW9uIFdlNShuOCwgZTUpIHsKICAgIHJldHVybiBuOC5sYW5ndWFnZURhdGFBdCgiY2xvc2VCcmFja2V0cyIsIGU1KVswXSB8fCBMOTsKICB9CiAgdmFyIFB0NyA9IHR5cGVvZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCIgJiYgL0FuZHJvaWRcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICB2YXIgT3Q3ID0gTTIuaW5wdXRIYW5kbGVyLm9mKChuOCwgZTUsIHQ0LCBpNCkgPT4gewogICAgaWYgKChQdDcgPyBuOC5jb21wb3NpbmcgOiBuOC5jb21wb3NpdGlvblN0YXJ0ZWQpIHx8IG44LnN0YXRlLnJlYWRPbmx5KQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgbzQgPSBuOC5zdGF0ZS5zZWxlY3Rpb24ubWFpbjsKICAgIGlmIChpNC5sZW5ndGggPiAyIHx8IGk0Lmxlbmd0aCA9PSAyICYmIGJlMihvZShpNCwgMCkpID09IDEgfHwgZTUgIT0gbzQuZnJvbSB8fCB0NCAhPSBvNC50bykKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IHM4ID0gVHQ1KG44LnN0YXRlLCBpNCk7CiAgICByZXR1cm4gczggPyAobjguZGlzcGF0Y2goczgpLCB0cnVlKSA6IGZhbHNlOwogIH0pOwogIHZhciBBdDYgPSAoeyBzdGF0ZTogbjgsIGRpc3BhdGNoOiBlNSB9KSA9PiB7CiAgICBpZiAobjgucmVhZE9ubHkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBpNCA9IFdlNShuOCwgbjguc2VsZWN0aW9uLm1haW4uaGVhZCkuYnJhY2tldHMgfHwgTDkuYnJhY2tldHMsIG80ID0gbnVsbCwgczggPSBuOC5jaGFuZ2VCeVJhbmdlKChyMykgPT4gewogICAgICBpZiAocjMuZW1wdHkpIHsKICAgICAgICBsZXQgbDcgPSBNdDIobjguZG9jLCByMy5oZWFkKTsKICAgICAgICBmb3IgKGxldCBjMTcgb2YgaTQpCiAgICAgICAgICBpZiAoYzE3ID09IGw3ICYmIHE3KG44LmRvYywgcjMuaGVhZCkgPT0ga2U5KG9lKGMxNywgMCkpKQogICAgICAgICAgICByZXR1cm4geyBjaGFuZ2VzOiB7IGZyb206IHIzLmhlYWQgLSBjMTcubGVuZ3RoLCB0bzogcjMuaGVhZCArIGMxNy5sZW5ndGggfSwgcmFuZ2U6IGcyLmN1cnNvcihyMy5oZWFkIC0gYzE3Lmxlbmd0aCkgfTsKICAgICAgfQogICAgICByZXR1cm4geyByYW5nZTogbzQgPSByMyB9OwogICAgfSk7CiAgICByZXR1cm4gbzQgfHwgZTUobjgudXBkYXRlKHM4LCB7IHNjcm9sbEludG9WaWV3OiB0cnVlLCB1c2VyRXZlbnQ6ICJkZWxldGUuYmFja3dhcmQiIH0pKSwgIW80OwogIH07CiAgdmFyIHp0NiA9IFt7IGtleTogIkJhY2tzcGFjZSIsIHJ1bjogQXQ2IH1dOwogIGZ1bmN0aW9uIFR0NShuOCwgZTUpIHsKICAgIGxldCB0NCA9IFdlNShuOCwgbjguc2VsZWN0aW9uLm1haW4uaGVhZCksIGk0ID0gdDQuYnJhY2tldHMgfHwgTDkuYnJhY2tldHM7CiAgICBmb3IgKGxldCBvNCBvZiBpNCkgewogICAgICBsZXQgczggPSBrZTkob2UobzQsIDApKTsKICAgICAgaWYgKGU1ID09IG80KQogICAgICAgIHJldHVybiBzOCA9PSBvNCA/IER0NShuOCwgbzQsIGk0LmluZGV4T2YobzQgKyBvNCArIG80KSA+IC0xLCB0NCkgOiBSdDcobjgsIG80LCBzOCwgdDQuYmVmb3JlIHx8IEw5LmJlZm9yZSk7CiAgICAgIGlmIChlNSA9PSBzOCAmJiAkZTYobjgsIG44LnNlbGVjdGlvbi5tYWluLmZyb20pKQogICAgICAgIHJldHVybiBCdDQobjgsIG80LCBzOCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gJGU2KG44LCBlNSkgewogICAgbGV0IHQ0ID0gZmFsc2U7CiAgICByZXR1cm4gbjguZmllbGQoTGU0KS5iZXR3ZWVuKDAsIG44LmRvYy5sZW5ndGgsIChpNCkgPT4gewogICAgICBpNCA9PSBlNSAmJiAodDQgPSB0cnVlKTsKICAgIH0pLCB0NDsKICB9CiAgZnVuY3Rpb24gcTcobjgsIGU1KSB7CiAgICBsZXQgdDQgPSBuOC5zbGljZVN0cmluZyhlNSwgZTUgKyAyKTsKICAgIHJldHVybiB0NC5zbGljZSgwLCBiZTIob2UodDQsIDApKSk7CiAgfQogIGZ1bmN0aW9uIE10MihuOCwgZTUpIHsKICAgIGxldCB0NCA9IG44LnNsaWNlU3RyaW5nKGU1IC0gMiwgZTUpOwogICAgcmV0dXJuIGJlMihvZSh0NCwgMCkpID09IHQ0Lmxlbmd0aCA/IHQ0IDogdDQuc2xpY2UoMSk7CiAgfQogIGZ1bmN0aW9uIFJ0NyhuOCwgZTUsIHQ0LCBpNCkgewogICAgbGV0IG80ID0gbnVsbCwgczggPSBuOC5jaGFuZ2VCeVJhbmdlKChyMykgPT4gewogICAgICBpZiAoIXIzLmVtcHR5KQogICAgICAgIHJldHVybiB7IGNoYW5nZXM6IFt7IGluc2VydDogZTUsIGZyb206IHIzLmZyb20gfSwgeyBpbnNlcnQ6IHQ0LCBmcm9tOiByMy50byB9XSwgZWZmZWN0czogRTQub2YocjMudG8gKyBlNS5sZW5ndGgpLCByYW5nZTogZzIucmFuZ2UocjMuYW5jaG9yICsgZTUubGVuZ3RoLCByMy5oZWFkICsgZTUubGVuZ3RoKSB9OwogICAgICBsZXQgbDcgPSBxNyhuOC5kb2MsIHIzLmhlYWQpOwogICAgICByZXR1cm4gIWw3IHx8IC9ccy8udGVzdChsNykgfHwgaTQuaW5kZXhPZihsNykgPiAtMSA/IHsgY2hhbmdlczogeyBpbnNlcnQ6IGU1ICsgdDQsIGZyb206IHIzLmhlYWQgfSwgZWZmZWN0czogRTQub2YocjMuaGVhZCArIGU1Lmxlbmd0aCksIHJhbmdlOiBnMi5jdXJzb3IocjMuaGVhZCArIGU1Lmxlbmd0aCkgfSA6IHsgcmFuZ2U6IG80ID0gcjMgfTsKICAgIH0pOwogICAgcmV0dXJuIG80ID8gbnVsbCA6IG44LnVwZGF0ZShzOCwgeyBzY3JvbGxJbnRvVmlldzogdHJ1ZSwgdXNlckV2ZW50OiAiaW5wdXQudHlwZSIgfSk7CiAgfQogIGZ1bmN0aW9uIEJ0NChuOCwgZTUsIHQ0KSB7CiAgICBsZXQgaTQgPSBudWxsLCBvNCA9IG44LnNlbGVjdGlvbi5yYW5nZXMubWFwKChzOCkgPT4gczguZW1wdHkgJiYgcTcobjguZG9jLCBzOC5oZWFkKSA9PSB0NCA/IGcyLmN1cnNvcihzOC5oZWFkICsgdDQubGVuZ3RoKSA6IGk0ID0gczgpOwogICAgcmV0dXJuIGk0ID8gbnVsbCA6IG44LnVwZGF0ZSh7IHNlbGVjdGlvbjogZzIuY3JlYXRlKG80LCBuOC5zZWxlY3Rpb24ubWFpbkluZGV4KSwgc2Nyb2xsSW50b1ZpZXc6IHRydWUsIGVmZmVjdHM6IG44LnNlbGVjdGlvbi5yYW5nZXMubWFwKCh7IGZyb206IHM4IH0pID0+IGNlOS5vZihzOCkpIH0pOwogIH0KICBmdW5jdGlvbiBEdDUobjgsIGU1LCB0NCwgaTQpIHsKICAgIGxldCBvNCA9IGk0LnN0cmluZ1ByZWZpeGVzIHx8IEw5LnN0cmluZ1ByZWZpeGVzLCBzOCA9IG51bGwsIHIzID0gbjguY2hhbmdlQnlSYW5nZSgobDcpID0+IHsKICAgICAgaWYgKCFsNy5lbXB0eSkKICAgICAgICByZXR1cm4geyBjaGFuZ2VzOiBbeyBpbnNlcnQ6IGU1LCBmcm9tOiBsNy5mcm9tIH0sIHsgaW5zZXJ0OiBlNSwgZnJvbTogbDcudG8gfV0sIGVmZmVjdHM6IEU0Lm9mKGw3LnRvICsgZTUubGVuZ3RoKSwgcmFuZ2U6IGcyLnJhbmdlKGw3LmFuY2hvciArIGU1Lmxlbmd0aCwgbDcuaGVhZCArIGU1Lmxlbmd0aCkgfTsKICAgICAgbGV0IGMxNyA9IGw3LmhlYWQsIGE0ID0gcTcobjguZG9jLCBjMTcpLCBmMTE7CiAgICAgIGlmIChhNCA9PSBlNSkgewogICAgICAgIGlmICh2ZTgobjgsIGMxNykpCiAgICAgICAgICByZXR1cm4geyBjaGFuZ2VzOiB7IGluc2VydDogZTUgKyBlNSwgZnJvbTogYzE3IH0sIGVmZmVjdHM6IEU0Lm9mKGMxNyArIGU1Lmxlbmd0aCksIHJhbmdlOiBnMi5jdXJzb3IoYzE3ICsgZTUubGVuZ3RoKSB9OwogICAgICAgIGlmICgkZTYobjgsIGMxNykpIHsKICAgICAgICAgIGxldCB1MTEgPSB0NCAmJiBuOC5zbGljZURvYyhjMTcsIGMxNyArIGU1Lmxlbmd0aCAqIDMpID09IGU1ICsgZTUgKyBlNTsKICAgICAgICAgIHJldHVybiB7IHJhbmdlOiBnMi5jdXJzb3IoYzE3ICsgZTUubGVuZ3RoICogKHUxMSA/IDMgOiAxKSksIGVmZmVjdHM6IGNlOS5vZihjMTcpIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmICh0NCAmJiBuOC5zbGljZURvYyhjMTcgLSAyICogZTUubGVuZ3RoLCBjMTcpID09IGU1ICsgZTUgJiYgKGYxMSA9IENlMTIobjgsIGMxNyAtIDIgKiBlNS5sZW5ndGgsIG80KSkgPiAtMSAmJiB2ZTgobjgsIGYxMSkpCiAgICAgICAgICByZXR1cm4geyBjaGFuZ2VzOiB7IGluc2VydDogZTUgKyBlNSArIGU1ICsgZTUsIGZyb206IGMxNyB9LCBlZmZlY3RzOiBFNC5vZihjMTcgKyBlNS5sZW5ndGgpLCByYW5nZTogZzIuY3Vyc29yKGMxNyArIGU1Lmxlbmd0aCkgfTsKICAgICAgICBpZiAobjguY2hhckNhdGVnb3JpemVyKGMxNykoYTQpICE9IEYuV29yZCAmJiBDZTEyKG44LCBjMTcsIG80KSA+IC0xICYmICFMdDYobjgsIGMxNywgZTUsIG80KSkKICAgICAgICAgIHJldHVybiB7IGNoYW5nZXM6IHsgaW5zZXJ0OiBlNSArIGU1LCBmcm9tOiBjMTcgfSwgZWZmZWN0czogRTQub2YoYzE3ICsgZTUubGVuZ3RoKSwgcmFuZ2U6IGcyLmN1cnNvcihjMTcgKyBlNS5sZW5ndGgpIH07CiAgICAgIH0KICAgICAgcmV0dXJuIHsgcmFuZ2U6IHM4ID0gbDcgfTsKICAgIH0pOwogICAgcmV0dXJuIHM4ID8gbnVsbCA6IG44LnVwZGF0ZShyMywgeyBzY3JvbGxJbnRvVmlldzogdHJ1ZSwgdXNlckV2ZW50OiAiaW5wdXQudHlwZSIgfSk7CiAgfQogIGZ1bmN0aW9uIHZlOChuOCwgZTUpIHsKICAgIGxldCB0NCA9IG0xMShuOCkucmVzb2x2ZUlubmVyKGU1ICsgMSk7CiAgICByZXR1cm4gdDQucGFyZW50ICYmIHQ0LmZyb20gPT0gZTU7CiAgfQogIGZ1bmN0aW9uIEx0NihuOCwgZTUsIHQ0LCBpNCkgewogICAgbGV0IG80ID0gbTExKG44KS5yZXNvbHZlSW5uZXIoZTUsIC0xKSwgczggPSBpNC5yZWR1Y2UoKHIzLCBsNykgPT4gTWF0aC5tYXgocjMsIGw3Lmxlbmd0aCksIDApOwogICAgZm9yIChsZXQgcjMgPSAwOyByMyA8IDU7IHIzKyspIHsKICAgICAgbGV0IGw3ID0gbjguc2xpY2VEb2MobzQuZnJvbSwgTWF0aC5taW4obzQudG8sIG80LmZyb20gKyB0NC5sZW5ndGggKyBzOCkpLCBjMTcgPSBsNy5pbmRleE9mKHQ0KTsKICAgICAgaWYgKCFjMTcgfHwgYzE3ID4gLTEgJiYgaTQuaW5kZXhPZihsNy5zbGljZSgwLCBjMTcpKSA+IC0xKSB7CiAgICAgICAgbGV0IGYxMSA9IG80LmZpcnN0Q2hpbGQ7CiAgICAgICAgZm9yICg7IGYxMSAmJiBmMTEuZnJvbSA9PSBvNC5mcm9tICYmIGYxMS50byAtIGYxMS5mcm9tID4gdDQubGVuZ3RoICsgYzE3OyApIHsKICAgICAgICAgIGlmIChuOC5zbGljZURvYyhmMTEudG8gLSB0NC5sZW5ndGgsIGYxMS50bykgPT0gdDQpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIGYxMSA9IGYxMS5maXJzdENoaWxkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsZXQgYTQgPSBvNC50byA9PSBlNSAmJiBvNC5wYXJlbnQ7CiAgICAgIGlmICghYTQpCiAgICAgICAgYnJlYWs7CiAgICAgIG80ID0gYTQ7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIENlMTIobjgsIGU1LCB0NCkgewogICAgbGV0IGk0ID0gbjguY2hhckNhdGVnb3JpemVyKGU1KTsKICAgIGlmIChpNChuOC5zbGljZURvYyhlNSAtIDEsIGU1KSkgIT0gRi5Xb3JkKQogICAgICByZXR1cm4gZTU7CiAgICBmb3IgKGxldCBvNCBvZiB0NCkgewogICAgICBsZXQgczggPSBlNSAtIG80Lmxlbmd0aDsKICAgICAgaWYgKG44LnNsaWNlRG9jKHM4LCBlNSkgPT0gbzQgJiYgaTQobjguc2xpY2VEb2MoczggLSAxLCBzOCkpICE9IEYuV29yZCkKICAgICAgICByZXR1cm4gczg7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQogIHZhciBrdDMgPSBbeyBrZXk6ICJDdHJsLVNwYWNlIiwgcnVuOiBhdDQgfSwgeyBrZXk6ICJFc2NhcGUiLCBydW46IGZ0MyB9LCB7IGtleTogIkFycm93RG93biIsIHJ1bjogVTEwKHRydWUpIH0sIHsga2V5OiAiQXJyb3dVcCIsIHJ1bjogVTEwKGZhbHNlKSB9LCB7IGtleTogIlBhZ2VEb3duIiwgcnVuOiBVMTAodHJ1ZSwgInBhZ2UiKSB9LCB7IGtleTogIlBhZ2VVcCIsIHJ1bjogVTEwKGZhbHNlLCAicGFnZSIpIH0sIHsga2V5OiAiRW50ZXIiLCBydW46IGN0NyB9XTsKICB2YXIgV3Q3ID0gbHQuaGlnaGVzdChici5jb21wdXRlTihbeDddLCAobjgpID0+IG44LmZhY2V0KHg3KS5kZWZhdWx0S2V5bWFwID8gW2t0M10gOiBbXSkpOwoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AbGV6ZXIvaGlnaGxpZ2h0QDEuMS4xL1gtWlM5QWJHVjZaWEl2WTI5dGJXOXUvZGVuby9oaWdobGlnaHQuanMKICB2YXIgTDEwID0gMDsKICB2YXIgZjQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgYTQsIGk0KSB7CiAgICAgIHRoaXMuc2V0ID0gdDQsIHRoaXMuYmFzZSA9IGE0LCB0aGlzLm1vZGlmaWVkID0gaTQsIHRoaXMuaWQgPSBMMTArKzsKICAgIH0KICAgIHN0YXRpYyBkZWZpbmUodDQpIHsKICAgICAgaWYgKHQ0Py5iYXNlKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCBkZXJpdmUgZnJvbSBhIG1vZGlmaWVkIHRhZyIpOwogICAgICBsZXQgYTQgPSBuZXcgZjQoW10sIG51bGwsIFtdKTsKICAgICAgaWYgKGE0LnNldC5wdXNoKGE0KSwgdDQpCiAgICAgICAgZm9yIChsZXQgaTQgb2YgdDQuc2V0KQogICAgICAgICAgYTQuc2V0LnB1c2goaTQpOwogICAgICByZXR1cm4gYTQ7CiAgICB9CiAgICBzdGF0aWMgZGVmaW5lTW9kaWZpZXIoKSB7CiAgICAgIGxldCB0NCA9IG5ldyB2NigpOwogICAgICByZXR1cm4gKGE0KSA9PiBhNC5tb2RpZmllZC5pbmRleE9mKHQ0KSA+IC0xID8gYTQgOiB2Ni5nZXQoYTQuYmFzZSB8fCBhNCwgYTQubW9kaWZpZWQuY29uY2F0KHQ0KS5zb3J0KChpNCwgbDcpID0+IGk0LmlkIC0gbDcuaWQpKTsKICAgIH0KICB9OwogIHZhciBRNiA9IDA7CiAgdmFyIHY2ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHRoaXMuaW5zdGFuY2VzID0gW10sIHRoaXMuaWQgPSBRNisrOwogICAgfQogICAgc3RhdGljIGdldCh0NCwgYTQpIHsKICAgICAgaWYgKCFhNC5sZW5ndGgpCiAgICAgICAgcmV0dXJuIHQ0OwogICAgICBsZXQgaTQgPSBhNFswXS5pbnN0YW5jZXMuZmluZCgobzQpID0+IG80LmJhc2UgPT0gdDQgJiYgVTExKGE0LCBvNC5tb2RpZmllZCkpOwogICAgICBpZiAoaTQpCiAgICAgICAgcmV0dXJuIGk0OwogICAgICBsZXQgbDcgPSBbXSwgczggPSBuZXcgZjQobDcsIHQ0LCBhNCk7CiAgICAgIGZvciAobGV0IG80IG9mIGE0KQogICAgICAgIG80Lmluc3RhbmNlcy5wdXNoKHM4KTsKICAgICAgbGV0IGMxNyA9IFYxMShhNCk7CiAgICAgIGZvciAobGV0IG80IG9mIHQ0LnNldCkKICAgICAgICBmb3IgKGxldCBkMTUgb2YgYzE3KQogICAgICAgICAgbDcucHVzaCh2Ni5nZXQobzQsIGQxNSkpOwogICAgICByZXR1cm4gczg7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBVMTEocjMsIHQ0KSB7CiAgICByZXR1cm4gcjMubGVuZ3RoID09IHQ0Lmxlbmd0aCAmJiByMy5ldmVyeSgoYTQsIGk0KSA9PiBhNCA9PSB0NFtpNF0pOwogIH0KICBmdW5jdGlvbiBWMTEocjMpIHsKICAgIGxldCB0NCA9IFtyM107CiAgICBmb3IgKGxldCBhNCA9IDA7IGE0IDwgcjMubGVuZ3RoOyBhNCsrKQogICAgICBmb3IgKGxldCBpNCBvZiBWMTEocjMuc2xpY2UoMCwgYTQpLmNvbmNhdChyMy5zbGljZShhNCArIDEpKSkpCiAgICAgICAgdDQucHVzaChpNCk7CiAgICByZXR1cm4gdDQ7CiAgfQogIGZ1bmN0aW9uICQxMihyMykgewogICAgbGV0IHQ0ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBmb3IgKGxldCBhNCBpbiByMykgewogICAgICBsZXQgaTQgPSByM1thNF07CiAgICAgIEFycmF5LmlzQXJyYXkoaTQpIHx8IChpNCA9IFtpNF0pOwogICAgICBmb3IgKGxldCBsNyBvZiBhNC5zcGxpdCgiICIpKQogICAgICAgIGlmIChsNykgewogICAgICAgICAgbGV0IHM4ID0gW10sIGMxNyA9IDIsIG80ID0gbDc7CiAgICAgICAgICBmb3IgKGxldCBwMTggPSAwOyA7ICkgewogICAgICAgICAgICBpZiAobzQgPT0gIi4uLiIgJiYgcDE4ID4gMCAmJiBwMTggKyAzID09IGw3Lmxlbmd0aCkgewogICAgICAgICAgICAgIGMxNyA9IDE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGV0IGgxMCA9IC9eIig/OlteIlxcXXxcXC4pKj8ifFteXC8hXSsvLmV4ZWMobzQpOwogICAgICAgICAgICBpZiAoIWgxMCkKICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBwYXRoOiAiICsgbDcpOwogICAgICAgICAgICBpZiAoczgucHVzaChoMTBbMF0gPT0gIioiID8gIiIgOiBoMTBbMF1bMF0gPT0gJyInID8gSlNPTi5wYXJzZShoMTBbMF0pIDogaDEwWzBdKSwgcDE4ICs9IGgxMFswXS5sZW5ndGgsIHAxOCA9PSBsNy5sZW5ndGgpCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGxldCBOMTcgPSBsN1twMTgrK107CiAgICAgICAgICAgIGlmIChwMTggPT0gbDcubGVuZ3RoICYmIE4xNyA9PSAiISIpIHsKICAgICAgICAgICAgICBjMTcgPSAwOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChOMTcgIT0gIi8iKQogICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHBhdGg6ICIgKyBsNyk7CiAgICAgICAgICAgIG80ID0gbDcuc2xpY2UocDE4KTsKICAgICAgICAgIH0KICAgICAgICAgIGxldCBkMTUgPSBzOC5sZW5ndGggLSAxLCBnMTIgPSBzOFtkMTVdOwogICAgICAgICAgaWYgKCFnMTIpCiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHBhdGg6ICIgKyBsNyk7CiAgICAgICAgICBsZXQgTzE1ID0gbmV3IE0xMShpNCwgYzE3LCBkMTUgPiAwID8gczguc2xpY2UoMCwgZDE1KSA6IG51bGwpOwogICAgICAgICAgdDRbZzEyXSA9IE8xNS5zb3J0KHQ0W2cxMl0pOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB6MTIuYWRkKHQ0KTsKICB9CiAgdmFyIHoxMiA9IG5ldyB3MygpOwogIHZhciBNMTEgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgYTQsIGk0LCBsNykgewogICAgICB0aGlzLnRhZ3MgPSB0NCwgdGhpcy5tb2RlID0gYTQsIHRoaXMuY29udGV4dCA9IGk0LCB0aGlzLm5leHQgPSBsNzsKICAgIH0KICAgIGdldCBvcGFxdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLm1vZGUgPT0gMDsKICAgIH0KICAgIGdldCBpbmhlcml0KCkgewogICAgICByZXR1cm4gdGhpcy5tb2RlID09IDE7CiAgICB9CiAgICBzb3J0KHQ0KSB7CiAgICAgIHJldHVybiAhdDQgfHwgdDQuZGVwdGggPCB0aGlzLmRlcHRoID8gKHRoaXMubmV4dCA9IHQ0LCB0aGlzKSA6ICh0NC5uZXh0ID0gdGhpcy5zb3J0KHQ0Lm5leHQpLCB0NCk7CiAgICB9CiAgICBnZXQgZGVwdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLmNvbnRleHQgPyB0aGlzLmNvbnRleHQubGVuZ3RoIDogMDsKICAgIH0KICB9OwogIE0xMS5lbXB0eSA9IG5ldyBNMTEoW10sIDIsIG51bGwpOwogIGZ1bmN0aW9uIFc4KHIzLCB0NCkgewogICAgbGV0IGE0ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBmb3IgKGxldCBzOCBvZiByMykKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHM4LnRhZykpCiAgICAgICAgYTRbczgudGFnLmlkXSA9IHM4LmNsYXNzOwogICAgICBlbHNlCiAgICAgICAgZm9yIChsZXQgYzE3IG9mIHM4LnRhZykKICAgICAgICAgIGE0W2MxNy5pZF0gPSBzOC5jbGFzczsKICAgIGxldCB7IHNjb3BlOiBpNCwgYWxsOiBsNyA9IG51bGwgfSA9IHQ0IHx8IHt9OwogICAgcmV0dXJuIHsgc3R5bGU6IChzOCkgPT4gewogICAgICBsZXQgYzE3ID0gbDc7CiAgICAgIGZvciAobGV0IG80IG9mIHM4KQogICAgICAgIGZvciAobGV0IGQxNSBvZiBvNC5zZXQpIHsKICAgICAgICAgIGxldCBnMTIgPSBhNFtkMTUuaWRdOwogICAgICAgICAgaWYgKGcxMikgewogICAgICAgICAgICBjMTcgPSBjMTcgPyBjMTcgKyAiICIgKyBnMTIgOiBnMTI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIGMxNzsKICAgIH0sIHNjb3BlOiBpNCB9OwogIH0KICBmdW5jdGlvbiBYMTEocjMsIHQ0KSB7CiAgICBsZXQgYTQgPSBudWxsOwogICAgZm9yIChsZXQgaTQgb2YgcjMpIHsKICAgICAgbGV0IGw3ID0gaTQuc3R5bGUodDQpOwogICAgICBsNyAmJiAoYTQgPSBhNCA/IGE0ICsgIiAiICsgbDcgOiBsNyk7CiAgICB9CiAgICByZXR1cm4gYTQ7CiAgfQogIGZ1bmN0aW9uIF8xMihyMywgdDQsIGE0LCBpNCA9IDAsIGw3ID0gcjMubGVuZ3RoKSB7CiAgICBsZXQgczggPSBuZXcgUDE0KGk0LCBBcnJheS5pc0FycmF5KHQ0KSA/IHQ0IDogW3Q0XSwgYTQpOwogICAgczguaGlnaGxpZ2h0UmFuZ2UocjMuY3Vyc29yKCksIGk0LCBsNywgIiIsIHM4LmhpZ2hsaWdodGVycyksIHM4LmZsdXNoKGw3KTsKICB9CiAgdmFyIFAxNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBhNCwgaTQpIHsKICAgICAgdGhpcy5hdCA9IHQ0LCB0aGlzLmhpZ2hsaWdodGVycyA9IGE0LCB0aGlzLnNwYW4gPSBpNCwgdGhpcy5jbGFzcyA9ICIiOwogICAgfQogICAgc3RhcnRTcGFuKHQ0LCBhNCkgewogICAgICBhNCAhPSB0aGlzLmNsYXNzICYmICh0aGlzLmZsdXNoKHQ0KSwgdDQgPiB0aGlzLmF0ICYmICh0aGlzLmF0ID0gdDQpLCB0aGlzLmNsYXNzID0gYTQpOwogICAgfQogICAgZmx1c2godDQpIHsKICAgICAgdDQgPiB0aGlzLmF0ICYmIHRoaXMuY2xhc3MgJiYgdGhpcy5zcGFuKHRoaXMuYXQsIHQ0LCB0aGlzLmNsYXNzKTsKICAgIH0KICAgIGhpZ2hsaWdodFJhbmdlKHQ0LCBhNCwgaTQsIGw3LCBzOCkgewogICAgICBsZXQgeyB0eXBlOiBjMTcsIGZyb206IG80LCB0bzogZDE1IH0gPSB0NDsKICAgICAgaWYgKG80ID49IGk0IHx8IGQxNSA8PSBhNCkKICAgICAgICByZXR1cm47CiAgICAgIGMxNy5pc1RvcCAmJiAoczggPSB0aGlzLmhpZ2hsaWdodGVycy5maWx0ZXIoKE4xNykgPT4gIU4xNy5zY29wZSB8fCBOMTcuc2NvcGUoYzE3KSkpOwogICAgICBsZXQgZzEyID0gbDcsIE8xNSA9IFkxNSh0NCkgfHwgTTExLmVtcHR5LCBwMTggPSBYMTEoczgsIE8xNS50YWdzKTsKICAgICAgaWYgKHAxOCAmJiAoZzEyICYmIChnMTIgKz0gIiAiKSwgZzEyICs9IHAxOCwgTzE1Lm1vZGUgPT0gMSAmJiAobDcgKz0gKGw3ID8gIiAiIDogIiIpICsgcDE4KSksIHRoaXMuc3RhcnRTcGFuKHQ0LmZyb20sIGcxMiksIE8xNS5vcGFxdWUpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgaDEwID0gdDQudHJlZSAmJiB0NC50cmVlLnByb3AodzMubW91bnRlZCk7CiAgICAgIGlmIChoMTAgJiYgaDEwLm92ZXJsYXkpIHsKICAgICAgICBsZXQgTjE3ID0gdDQubm9kZS5lbnRlcihoMTAub3ZlcmxheVswXS5mcm9tICsgbzQsIDEpLCBHMjMgPSB0aGlzLmhpZ2hsaWdodGVycy5maWx0ZXIoKHgyMSkgPT4gIXgyMS5zY29wZSB8fCB4MjEuc2NvcGUoaDEwLnRyZWUudHlwZSkpLCBEMjAgPSB0NC5maXJzdENoaWxkKCk7CiAgICAgICAgZm9yIChsZXQgeDIxID0gMCwgUzIxID0gbzQ7IDsgeDIxKyspIHsKICAgICAgICAgIGxldCBBMjAgPSB4MjEgPCBoMTAub3ZlcmxheS5sZW5ndGggPyBoMTAub3ZlcmxheVt4MjFdIDogbnVsbCwgcTIwID0gQTIwID8gQTIwLmZyb20gKyBvNCA6IGQxNSwgSDIzID0gTWF0aC5tYXgoYTQsIFMyMSksIEUxNSA9IE1hdGgubWluKGk0LCBxMjApOwogICAgICAgICAgaWYgKEgyMyA8IEUxNSAmJiBEMjApCiAgICAgICAgICAgIGZvciAoOyB0NC5mcm9tIDwgRTE1ICYmICh0aGlzLmhpZ2hsaWdodFJhbmdlKHQ0LCBIMjMsIEUxNSwgbDcsIHM4KSwgdGhpcy5zdGFydFNwYW4oTWF0aC5taW4oaTQsIHQ0LnRvKSwgZzEyKSwgISh0NC50byA+PSBxMjAgfHwgIXQ0Lm5leHRTaWJsaW5nKCkpKTsgKQogICAgICAgICAgICAgIDsKICAgICAgICAgIGlmICghQTIwIHx8IHEyMCA+IGk0KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIFMyMSA9IEEyMC50byArIG80LCBTMjEgPiBhNCAmJiAodGhpcy5oaWdobGlnaHRSYW5nZShOMTcuY3Vyc29yKCksIE1hdGgubWF4KGE0LCBBMjAuZnJvbSArIG80KSwgTWF0aC5taW4oaTQsIFMyMSksIGw3LCBHMjMpLCB0aGlzLnN0YXJ0U3BhbihTMjEsIGcxMikpOwogICAgICAgIH0KICAgICAgICBEMjAgJiYgdDQucGFyZW50KCk7CiAgICAgIH0gZWxzZSBpZiAodDQuZmlyc3RDaGlsZCgpKSB7CiAgICAgICAgZG8KICAgICAgICAgIGlmICghKHQ0LnRvIDw9IGE0KSkgewogICAgICAgICAgICBpZiAodDQuZnJvbSA+PSBpNCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRSYW5nZSh0NCwgYTQsIGk0LCBsNywgczgpLCB0aGlzLnN0YXJ0U3BhbihNYXRoLm1pbihpNCwgdDQudG8pLCBnMTIpOwogICAgICAgICAgfQogICAgICAgIHdoaWxlICh0NC5uZXh0U2libGluZygpKTsKICAgICAgICB0NC5wYXJlbnQoKTsKICAgICAgfQogICAgfQogIH07CiAgZnVuY3Rpb24gWTE1KHIzKSB7CiAgICBsZXQgdDQgPSByMy50eXBlLnByb3AoejEyKTsKICAgIGZvciAoOyB0NCAmJiB0NC5jb250ZXh0ICYmICFyMy5tYXRjaENvbnRleHQodDQuY29udGV4dCk7ICkKICAgICAgdDQgPSB0NC5uZXh0OwogICAgcmV0dXJuIHQ0IHx8IG51bGw7CiAgfQogIHZhciBlNCA9IGY0LmRlZmluZTsKICB2YXIgSTEzID0gZTQoKTsKICB2YXIgYjEwID0gZTQoKTsKICB2YXIgQjExID0gZTQoYjEwKTsKICB2YXIgRjExID0gZTQoYjEwKTsKICB2YXIgeTggPSBlNCgpOwogIHZhciBDNiA9IGU0KHk4KTsKICB2YXIgSzkgPSBlNCh5OCk7CiAgdmFyIGs2ID0gZTQoKTsKICB2YXIgdzExID0gZTQoazYpOwogIHZhciBtMTIgPSBlNCgpOwogIHZhciB1NCA9IGU0KCk7CiAgdmFyIGo2ID0gZTQoKTsKICB2YXIgUjExID0gZTQoajYpOwogIHZhciBUMTQgPSBlNCgpOwogIHZhciBuNSA9IHsgY29tbWVudDogSTEzLCBsaW5lQ29tbWVudDogZTQoSTEzKSwgYmxvY2tDb21tZW50OiBlNChJMTMpLCBkb2NDb21tZW50OiBlNChJMTMpLCBuYW1lOiBiMTAsIHZhcmlhYmxlTmFtZTogZTQoYjEwKSwgdHlwZU5hbWU6IEIxMSwgdGFnTmFtZTogZTQoQjExKSwgcHJvcGVydHlOYW1lOiBGMTEsIGF0dHJpYnV0ZU5hbWU6IGU0KEYxMSksIGNsYXNzTmFtZTogZTQoYjEwKSwgbGFiZWxOYW1lOiBlNChiMTApLCBuYW1lc3BhY2U6IGU0KGIxMCksIG1hY3JvTmFtZTogZTQoYjEwKSwgbGl0ZXJhbDogeTgsIHN0cmluZzogQzYsIGRvY1N0cmluZzogZTQoQzYpLCBjaGFyYWN0ZXI6IGU0KEM2KSwgYXR0cmlidXRlVmFsdWU6IGU0KEM2KSwgbnVtYmVyOiBLOSwgaW50ZWdlcjogZTQoSzkpLCBmbG9hdDogZTQoSzkpLCBib29sOiBlNCh5OCksIHJlZ2V4cDogZTQoeTgpLCBlc2NhcGU6IGU0KHk4KSwgY29sb3I6IGU0KHk4KSwgdXJsOiBlNCh5OCksIGtleXdvcmQ6IG0xMiwgc2VsZjogZTQobTEyKSwgbnVsbDogZTQobTEyKSwgYXRvbTogZTQobTEyKSwgdW5pdDogZTQobTEyKSwgbW9kaWZpZXI6IGU0KG0xMiksIG9wZXJhdG9yS2V5d29yZDogZTQobTEyKSwgY29udHJvbEtleXdvcmQ6IGU0KG0xMiksIGRlZmluaXRpb25LZXl3b3JkOiBlNChtMTIpLCBtb2R1bGVLZXl3b3JkOiBlNChtMTIpLCBvcGVyYXRvcjogdTQsIGRlcmVmT3BlcmF0b3I6IGU0KHU0KSwgYXJpdGhtZXRpY09wZXJhdG9yOiBlNCh1NCksIGxvZ2ljT3BlcmF0b3I6IGU0KHU0KSwgYml0d2lzZU9wZXJhdG9yOiBlNCh1NCksIGNvbXBhcmVPcGVyYXRvcjogZTQodTQpLCB1cGRhdGVPcGVyYXRvcjogZTQodTQpLCBkZWZpbml0aW9uT3BlcmF0b3I6IGU0KHU0KSwgdHlwZU9wZXJhdG9yOiBlNCh1NCksIGNvbnRyb2xPcGVyYXRvcjogZTQodTQpLCBwdW5jdHVhdGlvbjogajYsIHNlcGFyYXRvcjogZTQoajYpLCBicmFja2V0OiBSMTEsIGFuZ2xlQnJhY2tldDogZTQoUjExKSwgc3F1YXJlQnJhY2tldDogZTQoUjExKSwgcGFyZW46IGU0KFIxMSksIGJyYWNlOiBlNChSMTEpLCBjb250ZW50OiBrNiwgaGVhZGluZzogdzExLCBoZWFkaW5nMTogZTQodzExKSwgaGVhZGluZzI6IGU0KHcxMSksIGhlYWRpbmczOiBlNCh3MTEpLCBoZWFkaW5nNDogZTQodzExKSwgaGVhZGluZzU6IGU0KHcxMSksIGhlYWRpbmc2OiBlNCh3MTEpLCBjb250ZW50U2VwYXJhdG9yOiBlNChrNiksIGxpc3Q6IGU0KGs2KSwgcXVvdGU6IGU0KGs2KSwgZW1waGFzaXM6IGU0KGs2KSwgc3Ryb25nOiBlNChrNiksIGxpbms6IGU0KGs2KSwgbW9ub3NwYWNlOiBlNChrNiksIHN0cmlrZXRocm91Z2g6IGU0KGs2KSwgaW5zZXJ0ZWQ6IGU0KCksIGRlbGV0ZWQ6IGU0KCksIGNoYW5nZWQ6IGU0KCksIGludmFsaWQ6IGU0KCksIG1ldGE6IFQxNCwgZG9jdW1lbnRNZXRhOiBlNChUMTQpLCBhbm5vdGF0aW9uOiBlNChUMTQpLCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb246IGU0KFQxNCksIGRlZmluaXRpb246IGY0LmRlZmluZU1vZGlmaWVyKCksIGNvbnN0YW50OiBmNC5kZWZpbmVNb2RpZmllcigpLCBmdW5jdGlvbjogZjQuZGVmaW5lTW9kaWZpZXIoKSwgc3RhbmRhcmQ6IGY0LmRlZmluZU1vZGlmaWVyKCksIGxvY2FsOiBmNC5kZWZpbmVNb2RpZmllcigpLCBzcGVjaWFsOiBmNC5kZWZpbmVNb2RpZmllcigpIH07CiAgdmFyIHR0MTEgPSBXOChbeyB0YWc6IG41LmxpbmssIGNsYXNzOiAidG9rLWxpbmsiIH0sIHsgdGFnOiBuNS5oZWFkaW5nLCBjbGFzczogInRvay1oZWFkaW5nIiB9LCB7IHRhZzogbjUuZW1waGFzaXMsIGNsYXNzOiAidG9rLWVtcGhhc2lzIiB9LCB7IHRhZzogbjUuc3Ryb25nLCBjbGFzczogInRvay1zdHJvbmciIH0sIHsgdGFnOiBuNS5rZXl3b3JkLCBjbGFzczogInRvay1rZXl3b3JkIiB9LCB7IHRhZzogbjUuYXRvbSwgY2xhc3M6ICJ0b2stYXRvbSIgfSwgeyB0YWc6IG41LmJvb2wsIGNsYXNzOiAidG9rLWJvb2wiIH0sIHsgdGFnOiBuNS51cmwsIGNsYXNzOiAidG9rLXVybCIgfSwgeyB0YWc6IG41LmxhYmVsTmFtZSwgY2xhc3M6ICJ0b2stbGFiZWxOYW1lIiB9LCB7IHRhZzogbjUuaW5zZXJ0ZWQsIGNsYXNzOiAidG9rLWluc2VydGVkIiB9LCB7IHRhZzogbjUuZGVsZXRlZCwgY2xhc3M6ICJ0b2stZGVsZXRlZCIgfSwgeyB0YWc6IG41LmxpdGVyYWwsIGNsYXNzOiAidG9rLWxpdGVyYWwiIH0sIHsgdGFnOiBuNS5zdHJpbmcsIGNsYXNzOiAidG9rLXN0cmluZyIgfSwgeyB0YWc6IG41Lm51bWJlciwgY2xhc3M6ICJ0b2stbnVtYmVyIiB9LCB7IHRhZzogW241LnJlZ2V4cCwgbjUuZXNjYXBlLCBuNS5zcGVjaWFsKG41LnN0cmluZyldLCBjbGFzczogInRvay1zdHJpbmcyIiB9LCB7IHRhZzogbjUudmFyaWFibGVOYW1lLCBjbGFzczogInRvay12YXJpYWJsZU5hbWUiIH0sIHsgdGFnOiBuNS5sb2NhbChuNS52YXJpYWJsZU5hbWUpLCBjbGFzczogInRvay12YXJpYWJsZU5hbWUgdG9rLWxvY2FsIiB9LCB7IHRhZzogbjUuZGVmaW5pdGlvbihuNS52YXJpYWJsZU5hbWUpLCBjbGFzczogInRvay12YXJpYWJsZU5hbWUgdG9rLWRlZmluaXRpb24iIH0sIHsgdGFnOiBuNS5zcGVjaWFsKG41LnZhcmlhYmxlTmFtZSksIGNsYXNzOiAidG9rLXZhcmlhYmxlTmFtZTIiIH0sIHsgdGFnOiBuNS5kZWZpbml0aW9uKG41LnByb3BlcnR5TmFtZSksIGNsYXNzOiAidG9rLXByb3BlcnR5TmFtZSB0b2stZGVmaW5pdGlvbiIgfSwgeyB0YWc6IG41LnR5cGVOYW1lLCBjbGFzczogInRvay10eXBlTmFtZSIgfSwgeyB0YWc6IG41Lm5hbWVzcGFjZSwgY2xhc3M6ICJ0b2stbmFtZXNwYWNlIiB9LCB7IHRhZzogbjUuY2xhc3NOYW1lLCBjbGFzczogInRvay1jbGFzc05hbWUiIH0sIHsgdGFnOiBuNS5tYWNyb05hbWUsIGNsYXNzOiAidG9rLW1hY3JvTmFtZSIgfSwgeyB0YWc6IG41LnByb3BlcnR5TmFtZSwgY2xhc3M6ICJ0b2stcHJvcGVydHlOYW1lIiB9LCB7IHRhZzogbjUub3BlcmF0b3IsIGNsYXNzOiAidG9rLW9wZXJhdG9yIiB9LCB7IHRhZzogbjUuY29tbWVudCwgY2xhc3M6ICJ0b2stY29tbWVudCIgfSwgeyB0YWc6IG41Lm1ldGEsIGNsYXNzOiAidG9rLW1ldGEiIH0sIHsgdGFnOiBuNS5pbnZhbGlkLCBjbGFzczogInRvay1pbnZhbGlkIiB9LCB7IHRhZzogbjUucHVuY3R1YXRpb24sIGNsYXNzOiAidG9rLXB1bmN0dWF0aW9uIiB9XSk7CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9tYXJrZG93bkAxLjAuMi9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBYkdWNlpYSXZZMjl0Ylc5dUxFQnNaWHBsY2k5b2FXZG9iR2xuYUhRL2Rlbm8vbWFya2Rvd24uanMKICB2YXIgRTUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgczgsIHIzLCBuOCwgaTQsIG80LCBhNCkgewogICAgICB0aGlzLnR5cGUgPSB0NCwgdGhpcy52YWx1ZSA9IHM4LCB0aGlzLmZyb20gPSByMywgdGhpcy5oYXNoID0gbjgsIHRoaXMuZW5kID0gaTQsIHRoaXMuY2hpbGRyZW4gPSBvNCwgdGhpcy5wb3NpdGlvbnMgPSBhNCwgdGhpcy5oYXNoUHJvcCA9IFtbdzMuY29udGV4dEhhc2gsIG44XV07CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlKHQ0LCBzOCwgcjMsIG44LCBpNCkgewogICAgICBsZXQgbzQgPSBuOCArIChuOCA8PCA4KSArIHQ0ICsgKHM4IDw8IDQpIHwgMDsKICAgICAgcmV0dXJuIG5ldyBFNSh0NCwgczgsIHIzLCBvNCwgaTQsIFtdLCBbXSk7CiAgICB9CiAgICBhZGRDaGlsZCh0NCwgczgpIHsKICAgICAgdDQucHJvcCh3My5jb250ZXh0SGFzaCkgIT0gdGhpcy5oYXNoICYmICh0NCA9IG5ldyBQMyh0NC50eXBlLCB0NC5jaGlsZHJlbiwgdDQucG9zaXRpb25zLCB0NC5sZW5ndGgsIHRoaXMuaGFzaFByb3ApKSwgdGhpcy5jaGlsZHJlbi5wdXNoKHQ0KSwgdGhpcy5wb3NpdGlvbnMucHVzaChzOCk7CiAgICB9CiAgICB0b1RyZWUodDQsIHM4ID0gdGhpcy5lbmQpIHsKICAgICAgbGV0IHIzID0gdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxOwogICAgICByZXR1cm4gcjMgPj0gMCAmJiAoczggPSBNYXRoLm1heChzOCwgdGhpcy5wb3NpdGlvbnNbcjNdICsgdGhpcy5jaGlsZHJlbltyM10ubGVuZ3RoICsgdGhpcy5mcm9tKSksIG5ldyBQMyh0NC50eXBlc1t0aGlzLnR5cGVdLCB0aGlzLmNoaWxkcmVuLCB0aGlzLnBvc2l0aW9ucywgczggLSB0aGlzLmZyb20pLmJhbGFuY2UoeyBtYWtlVHJlZTogKGk0LCBvNCwgYTQpID0+IG5ldyBQMyhOMy5ub25lLCBpNCwgbzQsIGE0LCB0aGlzLmhhc2hQcm9wKSB9KTsKICAgIH0KICB9OwogIHZhciBoOwogIChmdW5jdGlvbihlNSkgewogICAgZTVbZTUuRG9jdW1lbnQgPSAxXSA9ICJEb2N1bWVudCIsIGU1W2U1LkNvZGVCbG9jayA9IDJdID0gIkNvZGVCbG9jayIsIGU1W2U1LkZlbmNlZENvZGUgPSAzXSA9ICJGZW5jZWRDb2RlIiwgZTVbZTUuQmxvY2txdW90ZSA9IDRdID0gIkJsb2NrcXVvdGUiLCBlNVtlNS5Ib3Jpem9udGFsUnVsZSA9IDVdID0gIkhvcml6b250YWxSdWxlIiwgZTVbZTUuQnVsbGV0TGlzdCA9IDZdID0gIkJ1bGxldExpc3QiLCBlNVtlNS5PcmRlcmVkTGlzdCA9IDddID0gIk9yZGVyZWRMaXN0IiwgZTVbZTUuTGlzdEl0ZW0gPSA4XSA9ICJMaXN0SXRlbSIsIGU1W2U1LkFUWEhlYWRpbmcxID0gOV0gPSAiQVRYSGVhZGluZzEiLCBlNVtlNS5BVFhIZWFkaW5nMiA9IDEwXSA9ICJBVFhIZWFkaW5nMiIsIGU1W2U1LkFUWEhlYWRpbmczID0gMTFdID0gIkFUWEhlYWRpbmczIiwgZTVbZTUuQVRYSGVhZGluZzQgPSAxMl0gPSAiQVRYSGVhZGluZzQiLCBlNVtlNS5BVFhIZWFkaW5nNSA9IDEzXSA9ICJBVFhIZWFkaW5nNSIsIGU1W2U1LkFUWEhlYWRpbmc2ID0gMTRdID0gIkFUWEhlYWRpbmc2IiwgZTVbZTUuU2V0ZXh0SGVhZGluZzEgPSAxNV0gPSAiU2V0ZXh0SGVhZGluZzEiLCBlNVtlNS5TZXRleHRIZWFkaW5nMiA9IDE2XSA9ICJTZXRleHRIZWFkaW5nMiIsIGU1W2U1LkhUTUxCbG9jayA9IDE3XSA9ICJIVE1MQmxvY2siLCBlNVtlNS5MaW5rUmVmZXJlbmNlID0gMThdID0gIkxpbmtSZWZlcmVuY2UiLCBlNVtlNS5QYXJhZ3JhcGggPSAxOV0gPSAiUGFyYWdyYXBoIiwgZTVbZTUuQ29tbWVudEJsb2NrID0gMjBdID0gIkNvbW1lbnRCbG9jayIsIGU1W2U1LlByb2Nlc3NpbmdJbnN0cnVjdGlvbkJsb2NrID0gMjFdID0gIlByb2Nlc3NpbmdJbnN0cnVjdGlvbkJsb2NrIiwgZTVbZTUuRXNjYXBlID0gMjJdID0gIkVzY2FwZSIsIGU1W2U1LkVudGl0eSA9IDIzXSA9ICJFbnRpdHkiLCBlNVtlNS5IYXJkQnJlYWsgPSAyNF0gPSAiSGFyZEJyZWFrIiwgZTVbZTUuRW1waGFzaXMgPSAyNV0gPSAiRW1waGFzaXMiLCBlNVtlNS5TdHJvbmdFbXBoYXNpcyA9IDI2XSA9ICJTdHJvbmdFbXBoYXNpcyIsIGU1W2U1LkxpbmsgPSAyN10gPSAiTGluayIsIGU1W2U1LkltYWdlID0gMjhdID0gIkltYWdlIiwgZTVbZTUuSW5saW5lQ29kZSA9IDI5XSA9ICJJbmxpbmVDb2RlIiwgZTVbZTUuSFRNTFRhZyA9IDMwXSA9ICJIVE1MVGFnIiwgZTVbZTUuQ29tbWVudCA9IDMxXSA9ICJDb21tZW50IiwgZTVbZTUuUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gMzJdID0gIlByb2Nlc3NpbmdJbnN0cnVjdGlvbiIsIGU1W2U1LlVSTCA9IDMzXSA9ICJVUkwiLCBlNVtlNS5IZWFkZXJNYXJrID0gMzRdID0gIkhlYWRlck1hcmsiLCBlNVtlNS5RdW90ZU1hcmsgPSAzNV0gPSAiUXVvdGVNYXJrIiwgZTVbZTUuTGlzdE1hcmsgPSAzNl0gPSAiTGlzdE1hcmsiLCBlNVtlNS5MaW5rTWFyayA9IDM3XSA9ICJMaW5rTWFyayIsIGU1W2U1LkVtcGhhc2lzTWFyayA9IDM4XSA9ICJFbXBoYXNpc01hcmsiLCBlNVtlNS5Db2RlTWFyayA9IDM5XSA9ICJDb2RlTWFyayIsIGU1W2U1LkNvZGVUZXh0ID0gNDBdID0gIkNvZGVUZXh0IiwgZTVbZTUuQ29kZUluZm8gPSA0MV0gPSAiQ29kZUluZm8iLCBlNVtlNS5MaW5rVGl0bGUgPSA0Ml0gPSAiTGlua1RpdGxlIiwgZTVbZTUuTGlua0xhYmVsID0gNDNdID0gIkxpbmtMYWJlbCI7CiAgfSkoaCB8fCAoaCA9IHt9KSk7CiAgdmFyIHE4ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIHM4KSB7CiAgICAgIHRoaXMuc3RhcnQgPSB0NCwgdGhpcy5jb250ZW50ID0gczgsIHRoaXMubWFya3MgPSBbXSwgdGhpcy5wYXJzZXJzID0gW107CiAgICB9CiAgfTsKICB2YXIgUTcgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgdGhpcy50ZXh0ID0gIiIsIHRoaXMuYmFzZUluZGVudCA9IDAsIHRoaXMuYmFzZVBvcyA9IDAsIHRoaXMuZGVwdGggPSAwLCB0aGlzLm1hcmtlcnMgPSBbXSwgdGhpcy5wb3MgPSAwLCB0aGlzLmluZGVudCA9IDAsIHRoaXMubmV4dCA9IC0xOwogICAgfQogICAgZm9yd2FyZCgpIHsKICAgICAgdGhpcy5iYXNlUG9zID4gdGhpcy5wb3MgJiYgdGhpcy5mb3J3YXJkSW5uZXIoKTsKICAgIH0KICAgIGZvcndhcmRJbm5lcigpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5za2lwU3BhY2UodGhpcy5iYXNlUG9zKTsKICAgICAgdGhpcy5pbmRlbnQgPSB0aGlzLmNvdW50SW5kZW50KHQ0LCB0aGlzLnBvcywgdGhpcy5pbmRlbnQpLCB0aGlzLnBvcyA9IHQ0LCB0aGlzLm5leHQgPSB0NCA9PSB0aGlzLnRleHQubGVuZ3RoID8gLTEgOiB0aGlzLnRleHQuY2hhckNvZGVBdCh0NCk7CiAgICB9CiAgICBza2lwU3BhY2UodDQpIHsKICAgICAgcmV0dXJuIHg4KHRoaXMudGV4dCwgdDQpOwogICAgfQogICAgcmVzZXQodDQpIHsKICAgICAgZm9yICh0aGlzLnRleHQgPSB0NCwgdGhpcy5iYXNlSW5kZW50ID0gdGhpcy5iYXNlUG9zID0gdGhpcy5wb3MgPSB0aGlzLmluZGVudCA9IDAsIHRoaXMuZm9yd2FyZElubmVyKCksIHRoaXMuZGVwdGggPSAxOyB0aGlzLm1hcmtlcnMubGVuZ3RoOyApCiAgICAgICAgdGhpcy5tYXJrZXJzLnBvcCgpOwogICAgfQogICAgbW92ZUJhc2UodDQpIHsKICAgICAgdGhpcy5iYXNlUG9zID0gdDQsIHRoaXMuYmFzZUluZGVudCA9IHRoaXMuY291bnRJbmRlbnQodDQsIHRoaXMucG9zLCB0aGlzLmluZGVudCk7CiAgICB9CiAgICBtb3ZlQmFzZUNvbHVtbih0NCkgewogICAgICB0aGlzLmJhc2VJbmRlbnQgPSB0NCwgdGhpcy5iYXNlUG9zID0gdGhpcy5maW5kQ29sdW1uKHQ0KTsKICAgIH0KICAgIGFkZE1hcmtlcih0NCkgewogICAgICB0aGlzLm1hcmtlcnMucHVzaCh0NCk7CiAgICB9CiAgICBjb3VudEluZGVudCh0NCwgczggPSAwLCByMyA9IDApIHsKICAgICAgZm9yIChsZXQgbjggPSBzODsgbjggPCB0NDsgbjgrKykKICAgICAgICByMyArPSB0aGlzLnRleHQuY2hhckNvZGVBdChuOCkgPT0gOSA/IDQgLSByMyAlIDQgOiAxOwogICAgICByZXR1cm4gcjM7CiAgICB9CiAgICBmaW5kQ29sdW1uKHQ0KSB7CiAgICAgIGxldCBzOCA9IDA7CiAgICAgIGZvciAobGV0IHIzID0gMDsgczggPCB0aGlzLnRleHQubGVuZ3RoICYmIHIzIDwgdDQ7IHM4KyspCiAgICAgICAgcjMgKz0gdGhpcy50ZXh0LmNoYXJDb2RlQXQoczgpID09IDkgPyA0IC0gcjMgJSA0IDogMTsKICAgICAgcmV0dXJuIHM4OwogICAgfQogICAgc2NydWIoKSB7CiAgICAgIGlmICghdGhpcy5iYXNlSW5kZW50KQogICAgICAgIHJldHVybiB0aGlzLnRleHQ7CiAgICAgIGxldCB0NCA9ICIiOwogICAgICBmb3IgKGxldCBzOCA9IDA7IHM4IDwgdGhpcy5iYXNlUG9zOyBzOCsrKQogICAgICAgIHQ0ICs9ICIgIjsKICAgICAgcmV0dXJuIHQ0ICsgdGhpcy50ZXh0LnNsaWNlKHRoaXMuYmFzZVBvcyk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBvdDUoZTUsIHQ0LCBzOCkgewogICAgaWYgKHM4LnBvcyA9PSBzOC50ZXh0Lmxlbmd0aCB8fCBlNSAhPSB0NC5ibG9jayAmJiBzOC5pbmRlbnQgPj0gdDQuc3RhY2tbczguZGVwdGggKyAxXS52YWx1ZSArIHM4LmJhc2VJbmRlbnQpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHM4LmluZGVudCA+PSBzOC5iYXNlSW5kZW50ICsgNCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IHIzID0gKGU1LnR5cGUgPT0gaC5PcmRlcmVkTGlzdCA/IGl0OSA6IG50OSkoczgsIHQ0LCBmYWxzZSk7CiAgICByZXR1cm4gcjMgPiAwICYmIChlNS50eXBlICE9IGguQnVsbGV0TGlzdCB8fCBydDkoczgsIHQ0LCBmYWxzZSkgPCAwKSAmJiBzOC50ZXh0LmNoYXJDb2RlQXQoczgucG9zICsgcjMgLSAxKSA9PSBlNS52YWx1ZTsKICB9CiAgdmFyIGd0NyA9IHsgW2guQmxvY2txdW90ZV0oZTUsIHQ0LCBzOCkgewogICAgcmV0dXJuIHM4Lm5leHQgIT0gNjIgPyBmYWxzZSA6IChzOC5tYXJrZXJzLnB1c2goYzcoaC5RdW90ZU1hcmssIHQ0LmxpbmVTdGFydCArIHM4LnBvcywgdDQubGluZVN0YXJ0ICsgczgucG9zICsgMSkpLCBzOC5tb3ZlQmFzZShzOC5wb3MgKyAoUzEwKHM4LnRleHQuY2hhckNvZGVBdChzOC5wb3MgKyAxKSkgPyAyIDogMSkpLCBlNS5lbmQgPSB0NC5saW5lU3RhcnQgKyBzOC50ZXh0Lmxlbmd0aCwgdHJ1ZSk7CiAgfSwgW2guTGlzdEl0ZW1dKGU1LCB0NCwgczgpIHsKICAgIHJldHVybiBzOC5pbmRlbnQgPCBzOC5iYXNlSW5kZW50ICsgZTUudmFsdWUgJiYgczgubmV4dCA+IC0xID8gZmFsc2UgOiAoczgubW92ZUJhc2VDb2x1bW4oczguYmFzZUluZGVudCArIGU1LnZhbHVlKSwgdHJ1ZSk7CiAgfSwgW2guT3JkZXJlZExpc3RdOiBvdDUsIFtoLkJ1bGxldExpc3RdOiBvdDUsIFtoLkRvY3VtZW50XSgpIHsKICAgIHJldHVybiB0cnVlOwogIH0gfTsKICBmdW5jdGlvbiBTMTAoZTUpIHsKICAgIHJldHVybiBlNSA9PSAzMiB8fCBlNSA9PSA5IHx8IGU1ID09IDEwIHx8IGU1ID09IDEzOwogIH0KICBmdW5jdGlvbiB4OChlNSwgdDQgPSAwKSB7CiAgICBmb3IgKDsgdDQgPCBlNS5sZW5ndGggJiYgUzEwKGU1LmNoYXJDb2RlQXQodDQpKTsgKQogICAgICB0NCsrOwogICAgcmV0dXJuIHQ0OwogIH0KICBmdW5jdGlvbiBodDgoZTUsIHQ0LCBzOCkgewogICAgZm9yICg7IHQ0ID4gczggJiYgUzEwKGU1LmNoYXJDb2RlQXQodDQgLSAxKSk7ICkKICAgICAgdDQtLTsKICAgIHJldHVybiB0NDsKICB9CiAgZnVuY3Rpb24gbXQ1KGU1KSB7CiAgICBpZiAoZTUubmV4dCAhPSA5NiAmJiBlNS5uZXh0ICE9IDEyNikKICAgICAgcmV0dXJuIC0xOwogICAgbGV0IHQ0ID0gZTUucG9zICsgMTsKICAgIGZvciAoOyB0NCA8IGU1LnRleHQubGVuZ3RoICYmIGU1LnRleHQuY2hhckNvZGVBdCh0NCkgPT0gZTUubmV4dDsgKQogICAgICB0NCsrOwogICAgaWYgKHQ0IDwgZTUucG9zICsgMykKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKGU1Lm5leHQgPT0gOTYpIHsKICAgICAgZm9yIChsZXQgczggPSB0NDsgczggPCBlNS50ZXh0Lmxlbmd0aDsgczgrKykKICAgICAgICBpZiAoZTUudGV4dC5jaGFyQ29kZUF0KHM4KSA9PSA5NikKICAgICAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIHJldHVybiB0NDsKICB9CiAgZnVuY3Rpb24ga3Q0KGU1KSB7CiAgICByZXR1cm4gZTUubmV4dCAhPSA2MiA/IC0xIDogZTUudGV4dC5jaGFyQ29kZUF0KGU1LnBvcyArIDEpID09IDMyID8gMiA6IDE7CiAgfQogIGZ1bmN0aW9uIHJ0OShlNSwgdDQsIHM4KSB7CiAgICBpZiAoZTUubmV4dCAhPSA0MiAmJiBlNS5uZXh0ICE9IDQ1ICYmIGU1Lm5leHQgIT0gOTUpCiAgICAgIHJldHVybiAtMTsKICAgIGxldCByMyA9IDE7CiAgICBmb3IgKGxldCBuOCA9IGU1LnBvcyArIDE7IG44IDwgZTUudGV4dC5sZW5ndGg7IG44KyspIHsKICAgICAgbGV0IGk0ID0gZTUudGV4dC5jaGFyQ29kZUF0KG44KTsKICAgICAgaWYgKGk0ID09IGU1Lm5leHQpCiAgICAgICAgcjMrKzsKICAgICAgZWxzZSBpZiAoIVMxMChpNCkpCiAgICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgcmV0dXJuIHM4ICYmIGU1Lm5leHQgPT0gNDUgJiYgU3Q2KGU1KSA+IC0xICYmIGU1LmRlcHRoID09IHQ0LnN0YWNrLmxlbmd0aCB8fCByMyA8IDMgPyAtMSA6IDE7CiAgfQogIGZ1bmN0aW9uIEx0NyhlNSwgdDQpIHsKICAgIGZvciAobGV0IHM4ID0gZTUuc3RhY2subGVuZ3RoIC0gMTsgczggPj0gMDsgczgtLSkKICAgICAgaWYgKGU1LnN0YWNrW3M4XS50eXBlID09IHQ0KQogICAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICBmdW5jdGlvbiBudDkoZTUsIHQ0LCBzOCkgewogICAgcmV0dXJuIChlNS5uZXh0ID09IDQ1IHx8IGU1Lm5leHQgPT0gNDMgfHwgZTUubmV4dCA9PSA0MikgJiYgKGU1LnBvcyA9PSBlNS50ZXh0Lmxlbmd0aCAtIDEgfHwgUzEwKGU1LnRleHQuY2hhckNvZGVBdChlNS5wb3MgKyAxKSkpICYmICghczggfHwgTHQ3KHQ0LCBoLkJ1bGxldExpc3QpIHx8IGU1LnNraXBTcGFjZShlNS5wb3MgKyAyKSA8IGU1LnRleHQubGVuZ3RoKSA/IDEgOiAtMTsKICB9CiAgZnVuY3Rpb24gaXQ5KGU1LCB0NCwgczgpIHsKICAgIGxldCByMyA9IGU1LnBvcywgbjggPSBlNS5uZXh0OwogICAgZm9yICg7IG44ID49IDQ4ICYmIG44IDw9IDU3OyApIHsKICAgICAgcjMrKzsKICAgICAgaWYgKHIzID09IGU1LnRleHQubGVuZ3RoKQogICAgICAgIHJldHVybiAtMTsKICAgICAgbjggPSBlNS50ZXh0LmNoYXJDb2RlQXQocjMpOwogICAgfQogICAgcmV0dXJuIHIzID09IGU1LnBvcyB8fCByMyA+IGU1LnBvcyArIDkgfHwgbjggIT0gNDYgJiYgbjggIT0gNDEgfHwgcjMgPCBlNS50ZXh0Lmxlbmd0aCAtIDEgJiYgIVMxMChlNS50ZXh0LmNoYXJDb2RlQXQocjMgKyAxKSkgfHwgczggJiYgIUx0Nyh0NCwgaC5PcmRlcmVkTGlzdCkgJiYgKGU1LnNraXBTcGFjZShyMyArIDEpID09IGU1LnRleHQubGVuZ3RoIHx8IHIzID4gZTUucG9zICsgMSB8fCBlNS5uZXh0ICE9IDQ5KSA/IC0xIDogcjMgKyAxIC0gZTUucG9zOwogIH0KICBmdW5jdGlvbiBidDMoZTUpIHsKICAgIGlmIChlNS5uZXh0ICE9IDM1KQogICAgICByZXR1cm4gLTE7CiAgICBsZXQgdDQgPSBlNS5wb3MgKyAxOwogICAgZm9yICg7IHQ0IDwgZTUudGV4dC5sZW5ndGggJiYgZTUudGV4dC5jaGFyQ29kZUF0KHQ0KSA9PSAzNTsgKQogICAgICB0NCsrOwogICAgaWYgKHQ0IDwgZTUudGV4dC5sZW5ndGggJiYgZTUudGV4dC5jaGFyQ29kZUF0KHQ0KSAhPSAzMikKICAgICAgcmV0dXJuIC0xOwogICAgbGV0IHM4ID0gdDQgLSBlNS5wb3M7CiAgICByZXR1cm4gczggPiA2ID8gLTEgOiBzODsKICB9CiAgZnVuY3Rpb24gU3Q2KGU1KSB7CiAgICBpZiAoZTUubmV4dCAhPSA0NSAmJiBlNS5uZXh0ICE9IDYxIHx8IGU1LmluZGVudCA+PSBlNS5iYXNlSW5kZW50ICsgNCkKICAgICAgcmV0dXJuIC0xOwogICAgbGV0IHQ0ID0gZTUucG9zICsgMTsKICAgIGZvciAoOyB0NCA8IGU1LnRleHQubGVuZ3RoICYmIGU1LnRleHQuY2hhckNvZGVBdCh0NCkgPT0gZTUubmV4dDsgKQogICAgICB0NCsrOwogICAgbGV0IHM4ID0gdDQ7CiAgICBmb3IgKDsgdDQgPCBlNS50ZXh0Lmxlbmd0aCAmJiBTMTAoZTUudGV4dC5jaGFyQ29kZUF0KHQ0KSk7ICkKICAgICAgdDQrKzsKICAgIHJldHVybiB0NCA9PSBlNS50ZXh0Lmxlbmd0aCA/IHM4IDogLTE7CiAgfQogIHZhciBaOSA9IC9eWyBcdF0qJC87CiAgdmFyIEN0NiA9IC8tLT4vOwogIHZhciB3dDUgPSAvXD8+LzsKICB2YXIgRzggPSBbWy9ePCg/OnNjcmlwdHxwcmV8c3R5bGUpKD86XHN8PnwkKS9pLCAvPFwvKD86c2NyaXB0fHByZXxzdHlsZSk+L2ldLCBbL15ccyo8IS0tLywgQ3Q2XSwgWy9eXHMqPFw/Lywgd3Q1XSwgWy9eXHMqPCFbQS1aXS8sIC8+L10sIFsvXlxzKjwhXFtDREFUQVxbLywgL1xdXF0+L10sIFsvXlxzKjxcLz8oPzphZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsKSg/OlxzfFwvPz58JCkvaSwgWjldLCBbL15ccyooPzo8XC9bYS16XVtcdy1dKlxzKj58PFthLXpdW1x3LV0qKFxzK1thLXo6X11bXHctLl0qKD86XHMqPVxzKig/OlteXHMiJz08PmBdK3wnW14nXSonfCJbXiJdKiIpKT8pKlxzKj4pXHMqJC9pLCBaOV1dOwogIGZ1bmN0aW9uIEF0NyhlNSwgdDQsIHM4KSB7CiAgICBpZiAoZTUubmV4dCAhPSA2MCkKICAgICAgcmV0dXJuIC0xOwogICAgbGV0IHIzID0gZTUudGV4dC5zbGljZShlNS5wb3MpOwogICAgZm9yIChsZXQgbjggPSAwLCBpNCA9IEc4Lmxlbmd0aCAtIChzOCA/IDEgOiAwKTsgbjggPCBpNDsgbjgrKykKICAgICAgaWYgKEc4W244XVswXS50ZXN0KHIzKSkKICAgICAgICByZXR1cm4gbjg7CiAgICByZXR1cm4gLTE7CiAgfQogIGZ1bmN0aW9uIGx0NihlNSwgdDQpIHsKICAgIGxldCBzOCA9IGU1LmNvdW50SW5kZW50KHQ0LCBlNS5wb3MsIGU1LmluZGVudCksIHIzID0gZTUuY291bnRJbmRlbnQoZTUuc2tpcFNwYWNlKHQ0KSwgdDQsIHM4KTsKICAgIHJldHVybiByMyA+PSBzOCArIDUgPyBzOCArIDEgOiByMzsKICB9CiAgZnVuY3Rpb24gQzcoZTUsIHQ0LCBzOCkgewogICAgbGV0IHIzID0gZTUubGVuZ3RoIC0gMTsKICAgIHIzID49IDAgJiYgZTVbcjNdLnRvID09IHQ0ICYmIGU1W3IzXS50eXBlID09IGguQ29kZVRleHQgPyBlNVtyM10udG8gPSBzOCA6IGU1LnB1c2goYzcoaC5Db2RlVGV4dCwgdDQsIHM4KSk7CiAgfQogIHZhciBPNyA9IHsgTGlua1JlZmVyZW5jZTogdm9pZCAwLCBJbmRlbnRlZENvZGUoZTUsIHQ0KSB7CiAgICBsZXQgczggPSB0NC5iYXNlSW5kZW50ICsgNDsKICAgIGlmICh0NC5pbmRlbnQgPCBzOCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IHIzID0gdDQuZmluZENvbHVtbihzOCksIG44ID0gZTUubGluZVN0YXJ0ICsgcjMsIGk0ID0gZTUubGluZVN0YXJ0ICsgdDQudGV4dC5sZW5ndGgsIG80ID0gW10sIGE0ID0gW107CiAgICBmb3IgKEM3KG80LCBuOCwgaTQpOyBlNS5uZXh0TGluZSgpICYmIHQ0LmRlcHRoID49IGU1LnN0YWNrLmxlbmd0aDsgKQogICAgICBpZiAodDQucG9zID09IHQ0LnRleHQubGVuZ3RoKSB7CiAgICAgICAgQzcoYTQsIGU1LmxpbmVTdGFydCAtIDEsIGU1LmxpbmVTdGFydCk7CiAgICAgICAgZm9yIChsZXQgbDcgb2YgdDQubWFya2VycykKICAgICAgICAgIGE0LnB1c2gobDcpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICh0NC5pbmRlbnQgPCBzOCkKICAgICAgICAgIGJyZWFrOwogICAgICAgIHsKICAgICAgICAgIGlmIChhNC5sZW5ndGgpIHsKICAgICAgICAgICAgZm9yIChsZXQgZDE1IG9mIGE0KQogICAgICAgICAgICAgIGQxNS50eXBlID09IGguQ29kZVRleHQgPyBDNyhvNCwgZDE1LmZyb20sIGQxNS50bykgOiBvNC5wdXNoKGQxNSk7CiAgICAgICAgICAgIGE0ID0gW107CiAgICAgICAgICB9CiAgICAgICAgICBDNyhvNCwgZTUubGluZVN0YXJ0IC0gMSwgZTUubGluZVN0YXJ0KTsKICAgICAgICAgIGZvciAobGV0IGQxNSBvZiB0NC5tYXJrZXJzKQogICAgICAgICAgICBvNC5wdXNoKGQxNSk7CiAgICAgICAgICBpNCA9IGU1LmxpbmVTdGFydCArIHQ0LnRleHQubGVuZ3RoOwogICAgICAgICAgbGV0IGw3ID0gZTUubGluZVN0YXJ0ICsgdDQuZmluZENvbHVtbih0NC5iYXNlSW5kZW50ICsgNCk7CiAgICAgICAgICBsNyA8IGk0ICYmIEM3KG80LCBsNywgaTQpOwogICAgICAgIH0KICAgICAgfQogICAgcmV0dXJuIGE0Lmxlbmd0aCAmJiAoYTQgPSBhNC5maWx0ZXIoKGw3KSA9PiBsNy50eXBlICE9IGguQ29kZVRleHQpLCBhNC5sZW5ndGggJiYgKHQ0Lm1hcmtlcnMgPSBhNC5jb25jYXQodDQubWFya2VycykpKSwgZTUuYWRkTm9kZShlNS5idWZmZXIud3JpdGVFbGVtZW50cyhvNCwgLW44KS5maW5pc2goaC5Db2RlQmxvY2ssIGk0IC0gbjgpLCBuOCksIHRydWU7CiAgfSwgRmVuY2VkQ29kZShlNSwgdDQpIHsKICAgIGxldCBzOCA9IG10NSh0NCk7CiAgICBpZiAoczggPCAwKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgcjMgPSBlNS5saW5lU3RhcnQgKyB0NC5wb3MsIG44ID0gdDQubmV4dCwgaTQgPSBzOCAtIHQ0LnBvcywgbzQgPSB0NC5za2lwU3BhY2UoczgpLCBhNCA9IGh0OCh0NC50ZXh0LCB0NC50ZXh0Lmxlbmd0aCwgbzQpLCBsNyA9IFtjNyhoLkNvZGVNYXJrLCByMywgcjMgKyBpNCldOwogICAgbzQgPCBhNCAmJiBsNy5wdXNoKGM3KGguQ29kZUluZm8sIGU1LmxpbmVTdGFydCArIG80LCBlNS5saW5lU3RhcnQgKyBhNCkpOwogICAgZm9yIChsZXQgZDE1ID0gdHJ1ZTsgZTUubmV4dExpbmUoKSAmJiB0NC5kZXB0aCA+PSBlNS5zdGFjay5sZW5ndGg7IGQxNSA9IGZhbHNlKSB7CiAgICAgIGxldCB1MTEgPSB0NC5wb3M7CiAgICAgIGlmICh0NC5pbmRlbnQgLSB0NC5iYXNlSW5kZW50IDwgNCkKICAgICAgICBmb3IgKDsgdTExIDwgdDQudGV4dC5sZW5ndGggJiYgdDQudGV4dC5jaGFyQ29kZUF0KHUxMSkgPT0gbjg7ICkKICAgICAgICAgIHUxMSsrOwogICAgICBpZiAodTExIC0gdDQucG9zID49IGk0ICYmIHQ0LnNraXBTcGFjZSh1MTEpID09IHQ0LnRleHQubGVuZ3RoKSB7CiAgICAgICAgZm9yIChsZXQgZzEyIG9mIHQ0Lm1hcmtlcnMpCiAgICAgICAgICBsNy5wdXNoKGcxMik7CiAgICAgICAgbDcucHVzaChjNyhoLkNvZGVNYXJrLCBlNS5saW5lU3RhcnQgKyB0NC5wb3MsIGU1LmxpbmVTdGFydCArIHUxMSkpLCBlNS5uZXh0TGluZSgpOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIGQxNSB8fCBDNyhsNywgZTUubGluZVN0YXJ0IC0gMSwgZTUubGluZVN0YXJ0KTsKICAgICAgICBmb3IgKGxldCBtMjMgb2YgdDQubWFya2VycykKICAgICAgICAgIGw3LnB1c2gobTIzKTsKICAgICAgICBsZXQgZzEyID0gZTUubGluZVN0YXJ0ICsgdDQuYmFzZVBvcywgZjExID0gZTUubGluZVN0YXJ0ICsgdDQudGV4dC5sZW5ndGg7CiAgICAgICAgZzEyIDwgZjExICYmIEM3KGw3LCBnMTIsIGYxMSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBlNS5hZGROb2RlKGU1LmJ1ZmZlci53cml0ZUVsZW1lbnRzKGw3LCAtcjMpLmZpbmlzaChoLkZlbmNlZENvZGUsIGU1LnByZXZMaW5lRW5kKCkgLSByMyksIHIzKSwgdHJ1ZTsKICB9LCBCbG9ja3F1b3RlKGU1LCB0NCkgewogICAgbGV0IHM4ID0ga3Q0KHQ0KTsKICAgIHJldHVybiBzOCA8IDAgPyBmYWxzZSA6IChlNS5zdGFydENvbnRleHQoaC5CbG9ja3F1b3RlLCB0NC5wb3MpLCBlNS5hZGROb2RlKGguUXVvdGVNYXJrLCBlNS5saW5lU3RhcnQgKyB0NC5wb3MsIGU1LmxpbmVTdGFydCArIHQ0LnBvcyArIDEpLCB0NC5tb3ZlQmFzZSh0NC5wb3MgKyBzOCksIG51bGwpOwogIH0sIEhvcml6b250YWxSdWxlKGU1LCB0NCkgewogICAgaWYgKHJ0OSh0NCwgZTUsIGZhbHNlKSA8IDApCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBzOCA9IGU1LmxpbmVTdGFydCArIHQ0LnBvczsKICAgIHJldHVybiBlNS5uZXh0TGluZSgpLCBlNS5hZGROb2RlKGguSG9yaXpvbnRhbFJ1bGUsIHM4KSwgdHJ1ZTsKICB9LCBCdWxsZXRMaXN0KGU1LCB0NCkgewogICAgbGV0IHM4ID0gbnQ5KHQ0LCBlNSwgZmFsc2UpOwogICAgaWYgKHM4IDwgMCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZTUuYmxvY2sudHlwZSAhPSBoLkJ1bGxldExpc3QgJiYgZTUuc3RhcnRDb250ZXh0KGguQnVsbGV0TGlzdCwgdDQuYmFzZVBvcywgdDQubmV4dCk7CiAgICBsZXQgcjMgPSBsdDYodDQsIHQ0LnBvcyArIDEpOwogICAgcmV0dXJuIGU1LnN0YXJ0Q29udGV4dChoLkxpc3RJdGVtLCB0NC5iYXNlUG9zLCByMyAtIHQ0LmJhc2VJbmRlbnQpLCBlNS5hZGROb2RlKGguTGlzdE1hcmssIGU1LmxpbmVTdGFydCArIHQ0LnBvcywgZTUubGluZVN0YXJ0ICsgdDQucG9zICsgczgpLCB0NC5tb3ZlQmFzZUNvbHVtbihyMyksIG51bGw7CiAgfSwgT3JkZXJlZExpc3QoZTUsIHQ0KSB7CiAgICBsZXQgczggPSBpdDkodDQsIGU1LCBmYWxzZSk7CiAgICBpZiAoczggPCAwKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlNS5ibG9jay50eXBlICE9IGguT3JkZXJlZExpc3QgJiYgZTUuc3RhcnRDb250ZXh0KGguT3JkZXJlZExpc3QsIHQ0LmJhc2VQb3MsIHQ0LnRleHQuY2hhckNvZGVBdCh0NC5wb3MgKyBzOCAtIDEpKTsKICAgIGxldCByMyA9IGx0Nih0NCwgdDQucG9zICsgczgpOwogICAgcmV0dXJuIGU1LnN0YXJ0Q29udGV4dChoLkxpc3RJdGVtLCB0NC5iYXNlUG9zLCByMyAtIHQ0LmJhc2VJbmRlbnQpLCBlNS5hZGROb2RlKGguTGlzdE1hcmssIGU1LmxpbmVTdGFydCArIHQ0LnBvcywgZTUubGluZVN0YXJ0ICsgdDQucG9zICsgczgpLCB0NC5tb3ZlQmFzZUNvbHVtbihyMyksIG51bGw7CiAgfSwgQVRYSGVhZGluZyhlNSwgdDQpIHsKICAgIGxldCBzOCA9IGJ0Myh0NCk7CiAgICBpZiAoczggPCAwKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgcjMgPSB0NC5wb3MsIG44ID0gZTUubGluZVN0YXJ0ICsgcjMsIGk0ID0gaHQ4KHQ0LnRleHQsIHQ0LnRleHQubGVuZ3RoLCByMyksIG80ID0gaTQ7CiAgICBmb3IgKDsgbzQgPiByMyAmJiB0NC50ZXh0LmNoYXJDb2RlQXQobzQgLSAxKSA9PSB0NC5uZXh0OyApCiAgICAgIG80LS07CiAgICAobzQgPT0gaTQgfHwgbzQgPT0gcjMgfHwgIVMxMCh0NC50ZXh0LmNoYXJDb2RlQXQobzQgLSAxKSkpICYmIChvNCA9IHQ0LnRleHQubGVuZ3RoKTsKICAgIGxldCBhNCA9IGU1LmJ1ZmZlci53cml0ZShoLkhlYWRlck1hcmssIDAsIHM4KS53cml0ZUVsZW1lbnRzKGU1LnBhcnNlci5wYXJzZUlubGluZSh0NC50ZXh0LnNsaWNlKHIzICsgczggKyAxLCBvNCksIG44ICsgczggKyAxKSwgLW44KTsKICAgIG80IDwgdDQudGV4dC5sZW5ndGggJiYgYTQud3JpdGUoaC5IZWFkZXJNYXJrLCBvNCAtIHIzLCBpNCAtIHIzKTsKICAgIGxldCBsNyA9IGE0LmZpbmlzaChoLkFUWEhlYWRpbmcxIC0gMSArIHM4LCB0NC50ZXh0Lmxlbmd0aCAtIHIzKTsKICAgIHJldHVybiBlNS5uZXh0TGluZSgpLCBlNS5hZGROb2RlKGw3LCBuOCksIHRydWU7CiAgfSwgSFRNTEJsb2NrKGU1LCB0NCkgewogICAgbGV0IHM4ID0gQXQ3KHQ0LCBlNSwgZmFsc2UpOwogICAgaWYgKHM4IDwgMCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IHIzID0gZTUubGluZVN0YXJ0ICsgdDQucG9zLCBuOCA9IEc4W3M4XVsxXSwgaTQgPSBbXSwgbzQgPSBuOCAhPSBaOTsKICAgIGZvciAoOyAhbjgudGVzdCh0NC50ZXh0KSAmJiBlNS5uZXh0TGluZSgpOyApIHsKICAgICAgaWYgKHQ0LmRlcHRoIDwgZTUuc3RhY2subGVuZ3RoKSB7CiAgICAgICAgbzQgPSBmYWxzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBmb3IgKGxldCBkMTUgb2YgdDQubWFya2VycykKICAgICAgICBpNC5wdXNoKGQxNSk7CiAgICB9CiAgICBvNCAmJiBlNS5uZXh0TGluZSgpOwogICAgbGV0IGE0ID0gbjggPT0gQ3Q2ID8gaC5Db21tZW50QmxvY2sgOiBuOCA9PSB3dDUgPyBoLlByb2Nlc3NpbmdJbnN0cnVjdGlvbkJsb2NrIDogaC5IVE1MQmxvY2ssIGw3ID0gZTUucHJldkxpbmVFbmQoKTsKICAgIHJldHVybiBlNS5hZGROb2RlKGU1LmJ1ZmZlci53cml0ZUVsZW1lbnRzKGk0LCAtcjMpLmZpbmlzaChhNCwgbDcgLSByMyksIHIzKSwgdHJ1ZTsKICB9LCBTZXRleHRIZWFkaW5nOiB2b2lkIDAgfTsKICB2YXIgVjEyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgdGhpcy5zdGFnZSA9IDAsIHRoaXMuZWx0cyA9IFtdLCB0aGlzLnBvcyA9IDAsIHRoaXMuc3RhcnQgPSB0NC5zdGFydCwgdGhpcy5hZHZhbmNlKHQ0LmNvbnRlbnQpOwogICAgfQogICAgbmV4dExpbmUodDQsIHM4LCByMykgewogICAgICBpZiAodGhpcy5zdGFnZSA9PSAtMSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGxldCBuOCA9IHIzLmNvbnRlbnQgKyBgCmAgKyBzOC5zY3J1YigpLCBpNCA9IHRoaXMuYWR2YW5jZShuOCk7CiAgICAgIHJldHVybiBpNCA+IC0xICYmIGk0IDwgbjgubGVuZ3RoID8gdGhpcy5jb21wbGV0ZSh0NCwgcjMsIGk0KSA6IGZhbHNlOwogICAgfQogICAgZmluaXNoKHQ0LCBzOCkgewogICAgICByZXR1cm4gKHRoaXMuc3RhZ2UgPT0gMiB8fCB0aGlzLnN0YWdlID09IDMpICYmIHg4KHM4LmNvbnRlbnQsIHRoaXMucG9zKSA9PSBzOC5jb250ZW50Lmxlbmd0aCA/IHRoaXMuY29tcGxldGUodDQsIHM4LCBzOC5jb250ZW50Lmxlbmd0aCkgOiBmYWxzZTsKICAgIH0KICAgIGNvbXBsZXRlKHQ0LCBzOCwgcjMpIHsKICAgICAgcmV0dXJuIHQ0LmFkZExlYWZFbGVtZW50KHM4LCBjNyhoLkxpbmtSZWZlcmVuY2UsIHRoaXMuc3RhcnQsIHRoaXMuc3RhcnQgKyByMywgdGhpcy5lbHRzKSksIHRydWU7CiAgICB9CiAgICBuZXh0U3RhZ2UodDQpIHsKICAgICAgcmV0dXJuIHQ0ID8gKHRoaXMucG9zID0gdDQudG8gLSB0aGlzLnN0YXJ0LCB0aGlzLmVsdHMucHVzaCh0NCksIHRoaXMuc3RhZ2UrKywgdHJ1ZSkgOiAodDQgPT09IGZhbHNlICYmICh0aGlzLnN0YWdlID0gLTEpLCBmYWxzZSk7CiAgICB9CiAgICBhZHZhbmNlKHQ0KSB7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGlmICh0aGlzLnN0YWdlID09IC0xKQogICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIGlmICh0aGlzLnN0YWdlID09IDApIHsKICAgICAgICAgIGlmICghdGhpcy5uZXh0U3RhZ2UodnQ1KHQ0LCB0aGlzLnBvcywgdGhpcy5zdGFydCwgdHJ1ZSkpKQogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICBpZiAodDQuY2hhckNvZGVBdCh0aGlzLnBvcykgIT0gNTgpCiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YWdlID0gLTE7CiAgICAgICAgICB0aGlzLmVsdHMucHVzaChjNyhoLkxpbmtNYXJrLCB0aGlzLnBvcyArIHRoaXMuc3RhcnQsIHRoaXMucG9zICsgdGhpcy5zdGFydCArIDEpKSwgdGhpcy5wb3MrKzsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhZ2UgPT0gMSkgewogICAgICAgICAgaWYgKCF0aGlzLm5leHRTdGFnZShNdDModDQsIHg4KHQ0LCB0aGlzLnBvcyksIHRoaXMuc3RhcnQpKSkKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGFnZSA9PSAyKSB7CiAgICAgICAgICBsZXQgczggPSB4OCh0NCwgdGhpcy5wb3MpLCByMyA9IDA7CiAgICAgICAgICBpZiAoczggPiB0aGlzLnBvcykgewogICAgICAgICAgICBsZXQgbjggPSB4dDgodDQsIHM4LCB0aGlzLnN0YXJ0KTsKICAgICAgICAgICAgaWYgKG44KSB7CiAgICAgICAgICAgICAgbGV0IGk0ID0gXzEzKHQ0LCBuOC50byAtIHRoaXMuc3RhcnQpOwogICAgICAgICAgICAgIGk0ID4gMCAmJiAodGhpcy5uZXh0U3RhZ2UobjgpLCByMyA9IGk0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHIzIHx8IChyMyA9IF8xMyh0NCwgdGhpcy5wb3MpKSwgcjMgPiAwICYmIHIzIDwgdDQubGVuZ3RoID8gcjMgOiAtMTsKICAgICAgICB9IGVsc2UKICAgICAgICAgIHJldHVybiBfMTModDQsIHRoaXMucG9zKTsKICAgICAgfQogICAgfQogIH07CiAgZnVuY3Rpb24gXzEzKGU1LCB0NCkgewogICAgZm9yICg7IHQ0IDwgZTUubGVuZ3RoOyB0NCsrKSB7CiAgICAgIGxldCBzOCA9IGU1LmNoYXJDb2RlQXQodDQpOwogICAgICBpZiAoczggPT0gMTApCiAgICAgICAgYnJlYWs7CiAgICAgIGlmICghUzEwKHM4KSkKICAgICAgICByZXR1cm4gLTE7CiAgICB9CiAgICByZXR1cm4gdDQ7CiAgfQogIHZhciBKNCA9IGNsYXNzIHsKICAgIG5leHRMaW5lKHQ0LCBzOCwgcjMpIHsKICAgICAgbGV0IG44ID0gczguZGVwdGggPCB0NC5zdGFjay5sZW5ndGggPyAtMSA6IFN0NihzOCksIGk0ID0gczgubmV4dDsKICAgICAgaWYgKG44IDwgMCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGxldCBvNCA9IGM3KGguSGVhZGVyTWFyaywgdDQubGluZVN0YXJ0ICsgczgucG9zLCB0NC5saW5lU3RhcnQgKyBuOCk7CiAgICAgIHJldHVybiB0NC5uZXh0TGluZSgpLCB0NC5hZGRMZWFmRWxlbWVudChyMywgYzcoaTQgPT0gNjEgPyBoLlNldGV4dEhlYWRpbmcxIDogaC5TZXRleHRIZWFkaW5nMiwgcjMuc3RhcnQsIHQ0LnByZXZMaW5lRW5kKCksIFsuLi50NC5wYXJzZXIucGFyc2VJbmxpbmUocjMuY29udGVudCwgcjMuc3RhcnQpLCBvNF0pKSwgdHJ1ZTsKICAgIH0KICAgIGZpbmlzaCgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH07CiAgdmFyIFR0NiA9IHsgTGlua1JlZmVyZW5jZShlNSwgdDQpIHsKICAgIHJldHVybiB0NC5jb250ZW50LmNoYXJDb2RlQXQoMCkgPT0gOTEgPyBuZXcgVjEyKHQ0KSA6IG51bGw7CiAgfSwgU2V0ZXh0SGVhZGluZygpIHsKICAgIHJldHVybiBuZXcgSjQoKTsKICB9IH07CiAgdmFyIER0NiA9IFsoZTUsIHQ0KSA9PiBidDModDQpID49IDAsIChlNSwgdDQpID0+IG10NSh0NCkgPj0gMCwgKGU1LCB0NCkgPT4ga3Q0KHQ0KSA+PSAwLCAoZTUsIHQ0KSA9PiBudDkodDQsIGU1LCB0cnVlKSA+PSAwLCAoZTUsIHQ0KSA9PiBpdDkodDQsIGU1LCB0cnVlKSA+PSAwLCAoZTUsIHQ0KSA9PiBydDkodDQsIGU1LCB0cnVlKSA+PSAwLCAoZTUsIHQ0KSA9PiBBdDcodDQsIGU1LCB0cnVlKSA+PSAwXTsKICB2YXIgRnQzID0geyB0ZXh0OiAiIiwgZW5kOiAwIH07CiAgdmFyIEsxMCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBzOCwgcjMsIG44KSB7CiAgICAgIHRoaXMucGFyc2VyID0gdDQsIHRoaXMuaW5wdXQgPSBzOCwgdGhpcy5yYW5nZXMgPSBuOCwgdGhpcy5saW5lID0gbmV3IFE3KCksIHRoaXMuYXRFbmQgPSBmYWxzZSwgdGhpcy5kb250SW5qZWN0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5zdG9wcGVkQXQgPSBudWxsLCB0aGlzLnJhbmdlSSA9IDAsIHRoaXMudG8gPSBuOFtuOC5sZW5ndGggLSAxXS50bywgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmFic29sdXRlTGluZVN0YXJ0ID0gdGhpcy5hYnNvbHV0ZUxpbmVFbmQgPSBuOFswXS5mcm9tLCB0aGlzLmJsb2NrID0gRTUuY3JlYXRlKGguRG9jdW1lbnQsIDAsIHRoaXMubGluZVN0YXJ0LCAwLCAwKSwgdGhpcy5zdGFjayA9IFt0aGlzLmJsb2NrXSwgdGhpcy5mcmFnbWVudHMgPSByMy5sZW5ndGggPyBuZXcgZXQ3KHIzLCBzOCkgOiBudWxsLCB0aGlzLnJlYWRMaW5lKCk7CiAgICB9CiAgICBnZXQgcGFyc2VkUG9zKCkgewogICAgICByZXR1cm4gdGhpcy5hYnNvbHV0ZUxpbmVTdGFydDsKICAgIH0KICAgIGFkdmFuY2UoKSB7CiAgICAgIGlmICh0aGlzLnN0b3BwZWRBdCAhPSBudWxsICYmIHRoaXMuYWJzb2x1dGVMaW5lU3RhcnQgPiB0aGlzLnN0b3BwZWRBdCkKICAgICAgICByZXR1cm4gdGhpcy5maW5pc2goKTsKICAgICAgbGV0IHsgbGluZTogdDQgfSA9IHRoaXM7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGZvciAoOyB0NC5kZXB0aCA8IHRoaXMuc3RhY2subGVuZ3RoOyApCiAgICAgICAgICB0aGlzLmZpbmlzaENvbnRleHQoKTsKICAgICAgICBmb3IgKGxldCByMyBvZiB0NC5tYXJrZXJzKQogICAgICAgICAgdGhpcy5hZGROb2RlKHIzLnR5cGUsIHIzLmZyb20sIHIzLnRvKTsKICAgICAgICBpZiAodDQucG9zIDwgdDQudGV4dC5sZW5ndGgpCiAgICAgICAgICBicmVhazsKICAgICAgICBpZiAoIXRoaXMubmV4dExpbmUoKSkKICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaCgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmZyYWdtZW50cyAmJiB0aGlzLnJldXNlRnJhZ21lbnQodDQuYmFzZVBvcykpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHQ6CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBmb3IgKGxldCByMyBvZiB0aGlzLnBhcnNlci5ibG9ja1BhcnNlcnMpCiAgICAgICAgICAgIGlmIChyMykgewogICAgICAgICAgICAgIGxldCBuOCA9IHIzKHRoaXMsIHQ0KTsKICAgICAgICAgICAgICBpZiAobjggIT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGlmIChuOCA9PSB0cnVlKQogICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHQ0LmZvcndhcmQoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlIHQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGxldCBzOCA9IG5ldyBxOCh0aGlzLmxpbmVTdGFydCArIHQ0LnBvcywgdDQudGV4dC5zbGljZSh0NC5wb3MpKTsKICAgICAgZm9yIChsZXQgcjMgb2YgdGhpcy5wYXJzZXIubGVhZkJsb2NrUGFyc2VycykKICAgICAgICBpZiAocjMpIHsKICAgICAgICAgIGxldCBuOCA9IHIzKHRoaXMsIHM4KTsKICAgICAgICAgIG44ICYmIHM4LnBhcnNlcnMucHVzaChuOCk7CiAgICAgICAgfQogICAgICB0OgogICAgICAgIGZvciAoOyB0aGlzLm5leHRMaW5lKCkgJiYgdDQucG9zICE9IHQ0LnRleHQubGVuZ3RoOyApIHsKICAgICAgICAgIGlmICh0NC5pbmRlbnQgPCB0NC5iYXNlSW5kZW50ICsgNCkgewogICAgICAgICAgICBmb3IgKGxldCByMyBvZiB0aGlzLnBhcnNlci5lbmRMZWFmQmxvY2spCiAgICAgICAgICAgICAgaWYgKHIzKHRoaXMsIHQ0LCBzOCkpCiAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgfQogICAgICAgICAgZm9yIChsZXQgcjMgb2YgczgucGFyc2VycykKICAgICAgICAgICAgaWYgKHIzLm5leHRMaW5lKHRoaXMsIHQ0LCBzOCkpCiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICBzOC5jb250ZW50ICs9IGAKYCArIHQ0LnNjcnViKCk7CiAgICAgICAgICBmb3IgKGxldCByMyBvZiB0NC5tYXJrZXJzKQogICAgICAgICAgICBzOC5tYXJrcy5wdXNoKHIzKTsKICAgICAgICB9CiAgICAgIHJldHVybiB0aGlzLmZpbmlzaExlYWYoczgpLCBudWxsOwogICAgfQogICAgc3RvcEF0KHQ0KSB7CiAgICAgIGlmICh0aGlzLnN0b3BwZWRBdCAhPSBudWxsICYmIHRoaXMuc3RvcHBlZEF0IDwgdDQpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNhbid0IG1vdmUgc3RvcHBlZEF0IGZvcndhcmQiKTsKICAgICAgdGhpcy5zdG9wcGVkQXQgPSB0NDsKICAgIH0KICAgIHJldXNlRnJhZ21lbnQodDQpIHsKICAgICAgaWYgKCF0aGlzLmZyYWdtZW50cy5tb3ZlVG8odGhpcy5hYnNvbHV0ZUxpbmVTdGFydCArIHQ0LCB0aGlzLmFic29sdXRlTGluZVN0YXJ0KSB8fCAhdGhpcy5mcmFnbWVudHMubWF0Y2hlcyh0aGlzLmJsb2NrLmhhc2gpKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgbGV0IHM4ID0gdGhpcy5mcmFnbWVudHMudGFrZU5vZGVzKHRoaXMpOwogICAgICBpZiAoIXM4KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgbGV0IHIzID0gczgsIG44ID0gdGhpcy5hYnNvbHV0ZUxpbmVTdGFydCArIHM4OwogICAgICBmb3IgKGxldCBpNCA9IDE7IGk0IDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpNCsrKSB7CiAgICAgICAgbGV0IG80ID0gdGhpcy5yYW5nZXNbaTQgLSAxXS50bywgYTQgPSB0aGlzLnJhbmdlc1tpNF0uZnJvbTsKICAgICAgICBvNCA+PSB0aGlzLmxpbmVTdGFydCAmJiBhNCA8IG44ICYmIChyMyAtPSBhNCAtIG80KTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5saW5lU3RhcnQgKz0gcjMsIHRoaXMuYWJzb2x1dGVMaW5lU3RhcnQgKz0gczgsIHRoaXMubW92ZVJhbmdlSSgpLCB0aGlzLmFic29sdXRlTGluZVN0YXJ0IDwgdGhpcy50byA/ICh0aGlzLmxpbmVTdGFydCsrLCB0aGlzLmFic29sdXRlTGluZVN0YXJ0KyssIHRoaXMucmVhZExpbmUoKSkgOiAodGhpcy5hdEVuZCA9IHRydWUsIHRoaXMucmVhZExpbmUoKSksIHRydWU7CiAgICB9CiAgICBnZXQgZGVwdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLnN0YWNrLmxlbmd0aDsKICAgIH0KICAgIHBhcmVudFR5cGUodDQgPSB0aGlzLmRlcHRoIC0gMSkgewogICAgICByZXR1cm4gdGhpcy5wYXJzZXIubm9kZVNldC50eXBlc1t0aGlzLnN0YWNrW3Q0XS50eXBlXTsKICAgIH0KICAgIG5leHRMaW5lKCkgewogICAgICByZXR1cm4gdGhpcy5saW5lU3RhcnQgKz0gdGhpcy5saW5lLnRleHQubGVuZ3RoLCB0aGlzLmFic29sdXRlTGluZUVuZCA+PSB0aGlzLnRvID8gKHRoaXMuYWJzb2x1dGVMaW5lU3RhcnQgPSB0aGlzLmFic29sdXRlTGluZUVuZCwgdGhpcy5hdEVuZCA9IHRydWUsIHRoaXMucmVhZExpbmUoKSwgZmFsc2UpIDogKHRoaXMubGluZVN0YXJ0KyssIHRoaXMuYWJzb2x1dGVMaW5lU3RhcnQgPSB0aGlzLmFic29sdXRlTGluZUVuZCArIDEsIHRoaXMubW92ZVJhbmdlSSgpLCB0aGlzLnJlYWRMaW5lKCksIHRydWUpOwogICAgfQogICAgbW92ZVJhbmdlSSgpIHsKICAgICAgZm9yICg7IHRoaXMucmFuZ2VJIDwgdGhpcy5yYW5nZXMubGVuZ3RoIC0gMSAmJiB0aGlzLmFic29sdXRlTGluZVN0YXJ0ID49IHRoaXMucmFuZ2VzW3RoaXMucmFuZ2VJXS50bzsgKQogICAgICAgIHRoaXMucmFuZ2VJKyssIHRoaXMuYWJzb2x1dGVMaW5lU3RhcnQgPSBNYXRoLm1heCh0aGlzLmFic29sdXRlTGluZVN0YXJ0LCB0aGlzLnJhbmdlc1t0aGlzLnJhbmdlSV0uZnJvbSk7CiAgICB9CiAgICBzY2FuTGluZSh0NCkgewogICAgICBsZXQgczggPSBGdDM7CiAgICAgIGlmIChzOC5lbmQgPSB0NCwgdDQgPj0gdGhpcy50bykKICAgICAgICBzOC50ZXh0ID0gIiI7CiAgICAgIGVsc2UgaWYgKHM4LnRleHQgPSB0aGlzLmxpbmVDaHVua0F0KHQ0KSwgczguZW5kICs9IHM4LnRleHQubGVuZ3RoLCB0aGlzLnJhbmdlcy5sZW5ndGggPiAxKSB7CiAgICAgICAgbGV0IHIzID0gdGhpcy5hYnNvbHV0ZUxpbmVTdGFydCwgbjggPSB0aGlzLnJhbmdlSTsKICAgICAgICBmb3IgKDsgdGhpcy5yYW5nZXNbbjhdLnRvIDwgczguZW5kOyApIHsKICAgICAgICAgIG44Kys7CiAgICAgICAgICBsZXQgaTQgPSB0aGlzLnJhbmdlc1tuOF0uZnJvbSwgbzQgPSB0aGlzLmxpbmVDaHVua0F0KGk0KTsKICAgICAgICAgIHM4LmVuZCA9IGk0ICsgbzQubGVuZ3RoLCBzOC50ZXh0ID0gczgudGV4dC5zbGljZSgwLCB0aGlzLnJhbmdlc1tuOCAtIDFdLnRvIC0gcjMpICsgbzQsIHIzID0gczguZW5kIC0gczgudGV4dC5sZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzODsKICAgIH0KICAgIHJlYWRMaW5lKCkgewogICAgICBsZXQgeyBsaW5lOiB0NCB9ID0gdGhpcywgeyB0ZXh0OiBzOCwgZW5kOiByMyB9ID0gdGhpcy5zY2FuTGluZSh0aGlzLmFic29sdXRlTGluZVN0YXJ0KTsKICAgICAgZm9yICh0aGlzLmFic29sdXRlTGluZUVuZCA9IHIzLCB0NC5yZXNldChzOCk7IHQ0LmRlcHRoIDwgdGhpcy5zdGFjay5sZW5ndGg7IHQ0LmRlcHRoKyspIHsKICAgICAgICBsZXQgbjggPSB0aGlzLnN0YWNrW3Q0LmRlcHRoXSwgaTQgPSB0aGlzLnBhcnNlci5za2lwQ29udGV4dE1hcmt1cFtuOC50eXBlXTsKICAgICAgICBpZiAoIWk0KQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmhhbmRsZWQgYmxvY2sgY29udGV4dCAiICsgaFtuOC50eXBlXSk7CiAgICAgICAgaWYgKCFpNChuOCwgdGhpcywgdDQpKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgdDQuZm9yd2FyZCgpOwogICAgICB9CiAgICB9CiAgICBsaW5lQ2h1bmtBdCh0NCkgewogICAgICBsZXQgczggPSB0aGlzLmlucHV0LmNodW5rKHQ0KSwgcjM7CiAgICAgIGlmICh0aGlzLmlucHV0LmxpbmVDaHVua3MpCiAgICAgICAgcjMgPSBzOCA9PSBgCmAgPyAiIiA6IHM4OwogICAgICBlbHNlIHsKICAgICAgICBsZXQgbjggPSBzOC5pbmRleE9mKGAKYCk7CiAgICAgICAgcjMgPSBuOCA8IDAgPyBzOCA6IHM4LnNsaWNlKDAsIG44KTsKICAgICAgfQogICAgICByZXR1cm4gdDQgKyByMy5sZW5ndGggPiB0aGlzLnRvID8gcjMuc2xpY2UoMCwgdGhpcy50byAtIHQ0KSA6IHIzOwogICAgfQogICAgcHJldkxpbmVFbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLmF0RW5kID8gdGhpcy5saW5lU3RhcnQgOiB0aGlzLmxpbmVTdGFydCAtIDE7CiAgICB9CiAgICBzdGFydENvbnRleHQodDQsIHM4LCByMyA9IDApIHsKICAgICAgdGhpcy5ibG9jayA9IEU1LmNyZWF0ZSh0NCwgcjMsIHRoaXMubGluZVN0YXJ0ICsgczgsIHRoaXMuYmxvY2suaGFzaCwgdGhpcy5saW5lU3RhcnQgKyB0aGlzLmxpbmUudGV4dC5sZW5ndGgpLCB0aGlzLnN0YWNrLnB1c2godGhpcy5ibG9jayk7CiAgICB9CiAgICBzdGFydENvbXBvc2l0ZSh0NCwgczgsIHIzID0gMCkgewogICAgICB0aGlzLnN0YXJ0Q29udGV4dCh0aGlzLnBhcnNlci5nZXROb2RlVHlwZSh0NCksIHM4LCByMyk7CiAgICB9CiAgICBhZGROb2RlKHQ0LCBzOCwgcjMpIHsKICAgICAgdHlwZW9mIHQ0ID09ICJudW1iZXIiICYmICh0NCA9IG5ldyBQMyh0aGlzLnBhcnNlci5ub2RlU2V0LnR5cGVzW3Q0XSwgSTE0LCBJMTQsIChyMyA/PyB0aGlzLnByZXZMaW5lRW5kKCkpIC0gczgpKSwgdGhpcy5ibG9jay5hZGRDaGlsZCh0NCwgczggLSB0aGlzLmJsb2NrLmZyb20pOwogICAgfQogICAgYWRkRWxlbWVudCh0NCkgewogICAgICB0aGlzLmJsb2NrLmFkZENoaWxkKHQ0LnRvVHJlZSh0aGlzLnBhcnNlci5ub2RlU2V0KSwgdDQuZnJvbSAtIHRoaXMuYmxvY2suZnJvbSk7CiAgICB9CiAgICBhZGRMZWFmRWxlbWVudCh0NCwgczgpIHsKICAgICAgdGhpcy5hZGROb2RlKHRoaXMuYnVmZmVyLndyaXRlRWxlbWVudHModHQxMihzOC5jaGlsZHJlbiwgdDQubWFya3MpLCAtczguZnJvbSkuZmluaXNoKHM4LnR5cGUsIHM4LnRvIC0gczguZnJvbSksIHM4LmZyb20pOwogICAgfQogICAgZmluaXNoQ29udGV4dCgpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5zdGFjay5wb3AoKSwgczggPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICAgIHM4LmFkZENoaWxkKHQ0LnRvVHJlZSh0aGlzLnBhcnNlci5ub2RlU2V0KSwgdDQuZnJvbSAtIHM4LmZyb20pLCB0aGlzLmJsb2NrID0gczg7CiAgICB9CiAgICBmaW5pc2goKSB7CiAgICAgIGZvciAoOyB0aGlzLnN0YWNrLmxlbmd0aCA+IDE7ICkKICAgICAgICB0aGlzLmZpbmlzaENvbnRleHQoKTsKICAgICAgcmV0dXJuIHRoaXMuYWRkR2Fwcyh0aGlzLmJsb2NrLnRvVHJlZSh0aGlzLnBhcnNlci5ub2RlU2V0LCB0aGlzLmxpbmVTdGFydCkpOwogICAgfQogICAgYWRkR2Fwcyh0NCkgewogICAgICByZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RoID4gMSA/IEV0Nih0aGlzLnJhbmdlcywgMCwgdDQudG9wTm9kZSwgdGhpcy5yYW5nZXNbMF0uZnJvbSwgdGhpcy5kb250SW5qZWN0KSA6IHQ0OwogICAgfQogICAgZmluaXNoTGVhZih0NCkgewogICAgICBmb3IgKGxldCByMyBvZiB0NC5wYXJzZXJzKQogICAgICAgIGlmIChyMy5maW5pc2godGhpcywgdDQpKQogICAgICAgICAgcmV0dXJuOwogICAgICBsZXQgczggPSB0dDEyKHRoaXMucGFyc2VyLnBhcnNlSW5saW5lKHQ0LmNvbnRlbnQsIHQ0LnN0YXJ0KSwgdDQubWFya3MpOwogICAgICB0aGlzLmFkZE5vZGUodGhpcy5idWZmZXIud3JpdGVFbGVtZW50cyhzOCwgLXQ0LnN0YXJ0KS5maW5pc2goaC5QYXJhZ3JhcGgsIHQ0LmNvbnRlbnQubGVuZ3RoKSwgdDQuc3RhcnQpOwogICAgfQogICAgZWx0KHQ0LCBzOCwgcjMsIG44KSB7CiAgICAgIHJldHVybiB0eXBlb2YgdDQgPT0gInN0cmluZyIgPyBjNyh0aGlzLnBhcnNlci5nZXROb2RlVHlwZSh0NCksIHM4LCByMywgbjgpIDogbmV3IFgxMih0NCwgczgpOwogICAgfQogICAgZ2V0IGJ1ZmZlcigpIHsKICAgICAgcmV0dXJuIG5ldyB5OSh0aGlzLnBhcnNlci5ub2RlU2V0KTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEV0NihlNSwgdDQsIHM4LCByMywgbjgpIHsKICAgIGlmIChuOC5oYXMoczgudHJlZSkpCiAgICAgIHJldHVybiBzOC50cmVlOwogICAgbGV0IGk0ID0gZTVbdDRdLnRvLCBvNCA9IFtdLCBhNCA9IFtdLCBsNyA9IHM4LmZyb20gKyByMzsKICAgIGZ1bmN0aW9uIGQxNSh1MTEsIGcxMikgewogICAgICBmb3IgKDsgZzEyID8gdTExID49IGk0IDogdTExID4gaTQ7ICkgewogICAgICAgIGxldCBmMTEgPSBlNVt0NCArIDFdLmZyb20gLSBpNDsKICAgICAgICByMyArPSBmMTEsIHUxMSArPSBmMTEsIHQ0KyssIGk0ID0gZTVbdDRdLnRvOwogICAgICB9CiAgICB9CiAgICBmb3IgKGxldCB1MTEgPSBzOC5maXJzdENoaWxkOyB1MTE7IHUxMSA9IHUxMS5uZXh0U2libGluZykgewogICAgICBkMTUodTExLmZyb20gKyByMywgdHJ1ZSk7CiAgICAgIGxldCBnMTIgPSB1MTEuZnJvbSArIHIzLCBmMTE7CiAgICAgIHUxMS50byArIHIzID4gaTQgPyAoZjExID0gRXQ2KGU1LCB0NCwgdTExLCByMywgbjgpLCBkMTUodTExLnRvICsgcjMsIGZhbHNlKSkgOiBmMTEgPSB1MTEudG9UcmVlKCksIG80LnB1c2goZjExKSwgYTQucHVzaChnMTIgLSBsNyk7CiAgICB9CiAgICByZXR1cm4gZDE1KHM4LnRvICsgcjMsIGZhbHNlKSwgbmV3IFAzKHM4LnR5cGUsIG80LCBhNCwgczgudG8gKyByMyAtIGw3LCBzOC50cmVlID8gczgudHJlZS5wcm9wVmFsdWVzIDogdm9pZCAwKTsKICB9CiAgdmFyIE44ID0gY2xhc3MgZXh0ZW5kcyB5ZTUgewogICAgY29uc3RydWN0b3IodDQsIHM4LCByMywgbjgsIGk0LCBvNCwgYTQsIGw3LCBkMTUpIHsKICAgICAgc3VwZXIoKSwgdGhpcy5ub2RlU2V0ID0gdDQsIHRoaXMuYmxvY2tQYXJzZXJzID0gczgsIHRoaXMubGVhZkJsb2NrUGFyc2VycyA9IHIzLCB0aGlzLmJsb2NrTmFtZXMgPSBuOCwgdGhpcy5lbmRMZWFmQmxvY2sgPSBpNCwgdGhpcy5za2lwQ29udGV4dE1hcmt1cCA9IG80LCB0aGlzLmlubGluZVBhcnNlcnMgPSBhNCwgdGhpcy5pbmxpbmVOYW1lcyA9IGw3LCB0aGlzLndyYXBwZXJzID0gZDE1LCB0aGlzLm5vZGVUeXBlcyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICBmb3IgKGxldCB1MTEgb2YgdDQudHlwZXMpCiAgICAgICAgdGhpcy5ub2RlVHlwZXNbdTExLm5hbWVdID0gdTExLmlkOwogICAgfQogICAgY3JlYXRlUGFyc2UodDQsIHM4LCByMykgewogICAgICBsZXQgbjggPSBuZXcgSzEwKHRoaXMsIHQ0LCBzOCwgcjMpOwogICAgICBmb3IgKGxldCBpNCBvZiB0aGlzLndyYXBwZXJzKQogICAgICAgIG44ID0gaTQobjgsIHQ0LCBzOCwgcjMpOwogICAgICByZXR1cm4gbjg7CiAgICB9CiAgICBjb25maWd1cmUodDQpIHsKICAgICAgbGV0IHM4ID0gWTE2KHQ0KTsKICAgICAgaWYgKCFzOCkKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgbGV0IHsgbm9kZVNldDogcjMsIHNraXBDb250ZXh0TWFya3VwOiBuOCB9ID0gdGhpcywgaTQgPSB0aGlzLmJsb2NrUGFyc2Vycy5zbGljZSgpLCBvNCA9IHRoaXMubGVhZkJsb2NrUGFyc2Vycy5zbGljZSgpLCBhNCA9IHRoaXMuYmxvY2tOYW1lcy5zbGljZSgpLCBsNyA9IHRoaXMuaW5saW5lUGFyc2Vycy5zbGljZSgpLCBkMTUgPSB0aGlzLmlubGluZU5hbWVzLnNsaWNlKCksIHUxMSA9IHRoaXMuZW5kTGVhZkJsb2NrLnNsaWNlKCksIGcxMiA9IHRoaXMud3JhcHBlcnM7CiAgICAgIGlmIChIOShzOC5kZWZpbmVOb2RlcykpIHsKICAgICAgICBuOCA9IE9iamVjdC5hc3NpZ24oe30sIG44KTsKICAgICAgICBsZXQgZjExID0gcjMudHlwZXMuc2xpY2UoKSwgbTIzOwogICAgICAgIGZvciAobGV0IEwyMiBvZiBzOC5kZWZpbmVOb2RlcykgewogICAgICAgICAgbGV0IHsgbmFtZTogazE4LCBibG9jazogenQxMCwgY29tcG9zaXRlOiBEMjAsIHN0eWxlOiBCMjQgfSA9IHR5cGVvZiBMMjIgPT0gInN0cmluZyIgPyB7IG5hbWU6IEwyMiB9IDogTDIyOwogICAgICAgICAgaWYgKGYxMS5zb21lKCgkMjEpID0+ICQyMS5uYW1lID09IGsxOCkpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgRDIwICYmIChuOFtmMTEubGVuZ3RoXSA9ICgkMjEsIE90MTIsIFJ0MTIpID0+IEQyMChPdDEyLCBSdDEyLCAkMjEudmFsdWUpKTsKICAgICAgICAgIGxldCBGMjIgPSBmMTEubGVuZ3RoLCBhdDkgPSBEMjAgPyBbIkJsb2NrIiwgIkJsb2NrQ29udGV4dCJdIDogenQxMCA/IEYyMiA+PSBoLkFUWEhlYWRpbmcxICYmIEYyMiA8PSBoLlNldGV4dEhlYWRpbmcyID8gWyJCbG9jayIsICJMZWFmQmxvY2siLCAiSGVhZGluZyJdIDogWyJCbG9jayIsICJMZWFmQmxvY2siXSA6IHZvaWQgMDsKICAgICAgICAgIGYxMS5wdXNoKE4zLmRlZmluZSh7IGlkOiBGMjIsIG5hbWU6IGsxOCwgcHJvcHM6IGF0OSAmJiBbW3czLmdyb3VwLCBhdDldXSB9KSksIEIyNCAmJiAobTIzIHx8IChtMjMgPSB7fSksIEFycmF5LmlzQXJyYXkoQjI0KSB8fCBCMjQgaW5zdGFuY2VvZiBmNCA/IG0yM1trMThdID0gQjI0IDogT2JqZWN0LmFzc2lnbihtMjMsIEIyNCkpOwogICAgICAgIH0KICAgICAgICByMyA9IG5ldyBaMyhmMTEpLCBtMjMgJiYgKHIzID0gcjMuZXh0ZW5kKCQxMihtMjMpKSk7CiAgICAgIH0KICAgICAgaWYgKEg5KHM4LnByb3BzKSAmJiAocjMgPSByMy5leHRlbmQoLi4uczgucHJvcHMpKSwgSDkoczgucmVtb3ZlKSkKICAgICAgICBmb3IgKGxldCBmMTEgb2YgczgucmVtb3ZlKSB7CiAgICAgICAgICBsZXQgbTIzID0gdGhpcy5ibG9ja05hbWVzLmluZGV4T2YoZjExKSwgTDIyID0gdGhpcy5pbmxpbmVOYW1lcy5pbmRleE9mKGYxMSk7CiAgICAgICAgICBtMjMgPiAtMSAmJiAoaTRbbTIzXSA9IG80W20yM10gPSB2b2lkIDApLCBMMjIgPiAtMSAmJiAobDdbTDIyXSA9IHZvaWQgMCk7CiAgICAgICAgfQogICAgICBpZiAoSDkoczgucGFyc2VCbG9jaykpCiAgICAgICAgZm9yIChsZXQgZjExIG9mIHM4LnBhcnNlQmxvY2spIHsKICAgICAgICAgIGxldCBtMjMgPSBhNC5pbmRleE9mKGYxMS5uYW1lKTsKICAgICAgICAgIGlmIChtMjMgPiAtMSkKICAgICAgICAgICAgaTRbbTIzXSA9IGYxMS5wYXJzZSwgbzRbbTIzXSA9IGYxMS5sZWFmOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGxldCBMMjIgPSBmMTEuYmVmb3JlID8gUjEyKGE0LCBmMTEuYmVmb3JlKSA6IGYxMS5hZnRlciA/IFIxMihhNCwgZjExLmFmdGVyKSArIDEgOiBhNC5sZW5ndGggLSAxOwogICAgICAgICAgICBpNC5zcGxpY2UoTDIyLCAwLCBmMTEucGFyc2UpLCBvNC5zcGxpY2UoTDIyLCAwLCBmMTEubGVhZiksIGE0LnNwbGljZShMMjIsIDAsIGYxMS5uYW1lKTsKICAgICAgICAgIH0KICAgICAgICAgIGYxMS5lbmRMZWFmICYmIHUxMS5wdXNoKGYxMS5lbmRMZWFmKTsKICAgICAgICB9CiAgICAgIGlmIChIOShzOC5wYXJzZUlubGluZSkpCiAgICAgICAgZm9yIChsZXQgZjExIG9mIHM4LnBhcnNlSW5saW5lKSB7CiAgICAgICAgICBsZXQgbTIzID0gZDE1LmluZGV4T2YoZjExLm5hbWUpOwogICAgICAgICAgaWYgKG0yMyA+IC0xKQogICAgICAgICAgICBsN1ttMjNdID0gZjExLnBhcnNlOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGxldCBMMjIgPSBmMTEuYmVmb3JlID8gUjEyKGQxNSwgZjExLmJlZm9yZSkgOiBmMTEuYWZ0ZXIgPyBSMTIoZDE1LCBmMTEuYWZ0ZXIpICsgMSA6IGQxNS5sZW5ndGggLSAxOwogICAgICAgICAgICBsNy5zcGxpY2UoTDIyLCAwLCBmMTEucGFyc2UpLCBkMTUuc3BsaWNlKEwyMiwgMCwgZjExLm5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIHM4LndyYXAgJiYgKGcxMiA9IGcxMi5jb25jYXQoczgud3JhcCkpLCBuZXcgTjgocjMsIGk0LCBvNCwgYTQsIHUxMSwgbjgsIGw3LCBkMTUsIGcxMik7CiAgICB9CiAgICBnZXROb2RlVHlwZSh0NCkgewogICAgICBsZXQgczggPSB0aGlzLm5vZGVUeXBlc1t0NF07CiAgICAgIGlmIChzOCA9PSBudWxsKQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIG5vZGUgdHlwZSAnJHt0NH0nYCk7CiAgICAgIHJldHVybiBzODsKICAgIH0KICAgIHBhcnNlSW5saW5lKHQ0LCBzOCkgewogICAgICBsZXQgcjMgPSBuZXcgVzkodGhpcywgdDQsIHM4KTsKICAgICAgdDoKICAgICAgICBmb3IgKGxldCBuOCA9IHM4OyBuOCA8IHIzLmVuZDsgKSB7CiAgICAgICAgICBsZXQgaTQgPSByMy5jaGFyKG44KTsKICAgICAgICAgIGZvciAobGV0IG80IG9mIHRoaXMuaW5saW5lUGFyc2VycykKICAgICAgICAgICAgaWYgKG80KSB7CiAgICAgICAgICAgICAgbGV0IGE0ID0gbzQocjMsIGk0LCBuOCk7CiAgICAgICAgICAgICAgaWYgKGE0ID49IDApIHsKICAgICAgICAgICAgICAgIG44ID0gYTQ7CiAgICAgICAgICAgICAgICBjb250aW51ZSB0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgbjgrKzsKICAgICAgICB9CiAgICAgIHJldHVybiByMy5yZXNvbHZlTWFya2VycygwKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEg5KGU1KSB7CiAgICByZXR1cm4gZTUgIT0gbnVsbCAmJiBlNS5sZW5ndGggPiAwOwogIH0KICBmdW5jdGlvbiBZMTYoZTUpIHsKICAgIGlmICghQXJyYXkuaXNBcnJheShlNSkpCiAgICAgIHJldHVybiBlNTsKICAgIGlmIChlNS5sZW5ndGggPT0gMCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBsZXQgdDQgPSBZMTYoZTVbMF0pOwogICAgaWYgKGU1Lmxlbmd0aCA9PSAxKQogICAgICByZXR1cm4gdDQ7CiAgICBsZXQgczggPSBZMTYoZTUuc2xpY2UoMSkpOwogICAgaWYgKCFzOCB8fCAhdDQpCiAgICAgIHJldHVybiB0NCB8fCBzODsKICAgIGxldCByMyA9IChvNCwgYTQpID0+IChvNCB8fCBJMTQpLmNvbmNhdChhNCB8fCBJMTQpLCBuOCA9IHQ0LndyYXAsIGk0ID0gczgud3JhcDsKICAgIHJldHVybiB7IHByb3BzOiByMyh0NC5wcm9wcywgczgucHJvcHMpLCBkZWZpbmVOb2RlczogcjModDQuZGVmaW5lTm9kZXMsIHM4LmRlZmluZU5vZGVzKSwgcGFyc2VCbG9jazogcjModDQucGFyc2VCbG9jaywgczgucGFyc2VCbG9jayksIHBhcnNlSW5saW5lOiByMyh0NC5wYXJzZUlubGluZSwgczgucGFyc2VJbmxpbmUpLCByZW1vdmU6IHIzKHQ0LnJlbW92ZSwgczgucmVtb3ZlKSwgd3JhcDogbjggPyBpNCA/IChvNCwgYTQsIGw3LCBkMTUpID0+IG44KGk0KG80LCBhNCwgbDcsIGQxNSksIGE0LCBsNywgZDE1KSA6IG44IDogaTQgfTsKICB9CiAgZnVuY3Rpb24gUjEyKGU1LCB0NCkgewogICAgbGV0IHM4ID0gZTUuaW5kZXhPZih0NCk7CiAgICBpZiAoczggPCAwKQogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUG9zaXRpb24gc3BlY2lmaWVkIHJlbGF0aXZlIHRvIHVua25vd24gcGFyc2VyICR7dDR9YCk7CiAgICByZXR1cm4gczg7CiAgfQogIHZhciBJdDYgPSBbTjMubm9uZV07CiAgZm9yIChsZXQgZTUgPSAxLCB0NDsgdDQgPSBoW2U1XTsgZTUrKykKICAgIEl0NltlNV0gPSBOMy5kZWZpbmUoeyBpZDogZTUsIG5hbWU6IHQ0LCBwcm9wczogZTUgPj0gaC5Fc2NhcGUgPyBbXSA6IFtbdzMuZ3JvdXAsIGU1IGluIGd0NyA/IFsiQmxvY2siLCAiQmxvY2tDb250ZXh0Il0gOiBbIkJsb2NrIiwgIkxlYWZCbG9jayJdXV0gfSk7CiAgdmFyIEkxNCA9IFtdOwogIHZhciB5OSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHRoaXMubm9kZVNldCA9IHQ0LCB0aGlzLmNvbnRlbnQgPSBbXSwgdGhpcy5ub2RlcyA9IFtdOwogICAgfQogICAgd3JpdGUodDQsIHM4LCByMywgbjggPSAwKSB7CiAgICAgIHJldHVybiB0aGlzLmNvbnRlbnQucHVzaCh0NCwgczgsIHIzLCA0ICsgbjggKiA0KSwgdGhpczsKICAgIH0KICAgIHdyaXRlRWxlbWVudHModDQsIHM4ID0gMCkgewogICAgICBmb3IgKGxldCByMyBvZiB0NCkKICAgICAgICByMy53cml0ZVRvKHRoaXMsIHM4KTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBmaW5pc2godDQsIHM4KSB7CiAgICAgIHJldHVybiBQMy5idWlsZCh7IGJ1ZmZlcjogdGhpcy5jb250ZW50LCBub2RlU2V0OiB0aGlzLm5vZGVTZXQsIHJldXNlZDogdGhpcy5ub2RlcywgdG9wSUQ6IHQ0LCBsZW5ndGg6IHM4IH0pOwogICAgfQogIH07CiAgdmFyIHcxMiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBzOCwgcjMsIG44ID0gSTE0KSB7CiAgICAgIHRoaXMudHlwZSA9IHQ0LCB0aGlzLmZyb20gPSBzOCwgdGhpcy50byA9IHIzLCB0aGlzLmNoaWxkcmVuID0gbjg7CiAgICB9CiAgICB3cml0ZVRvKHQ0LCBzOCkgewogICAgICBsZXQgcjMgPSB0NC5jb250ZW50Lmxlbmd0aDsKICAgICAgdDQud3JpdGVFbGVtZW50cyh0aGlzLmNoaWxkcmVuLCBzOCksIHQ0LmNvbnRlbnQucHVzaCh0aGlzLnR5cGUsIHRoaXMuZnJvbSArIHM4LCB0aGlzLnRvICsgczgsIHQ0LmNvbnRlbnQubGVuZ3RoICsgNCAtIHIzKTsKICAgIH0KICAgIHRvVHJlZSh0NCkgewogICAgICByZXR1cm4gbmV3IHk5KHQ0KS53cml0ZUVsZW1lbnRzKHRoaXMuY2hpbGRyZW4sIC10aGlzLmZyb20pLmZpbmlzaCh0aGlzLnR5cGUsIHRoaXMudG8gLSB0aGlzLmZyb20pOwogICAgfQogIH07CiAgdmFyIFgxMiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBzOCkgewogICAgICB0aGlzLnRyZWUgPSB0NCwgdGhpcy5mcm9tID0gczg7CiAgICB9CiAgICBnZXQgdG8oKSB7CiAgICAgIHJldHVybiB0aGlzLmZyb20gKyB0aGlzLnRyZWUubGVuZ3RoOwogICAgfQogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLnRyZWUudHlwZS5pZDsKICAgIH0KICAgIGdldCBjaGlsZHJlbigpIHsKICAgICAgcmV0dXJuIEkxNDsKICAgIH0KICAgIHdyaXRlVG8odDQsIHM4KSB7CiAgICAgIHQ0Lm5vZGVzLnB1c2godGhpcy50cmVlKSwgdDQuY29udGVudC5wdXNoKHQ0Lm5vZGVzLmxlbmd0aCAtIDEsIHRoaXMuZnJvbSArIHM4LCB0aGlzLnRvICsgczgsIC0xKTsKICAgIH0KICAgIHRvVHJlZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudHJlZTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGM3KGU1LCB0NCwgczgsIHIzKSB7CiAgICByZXR1cm4gbmV3IHcxMihlNSwgdDQsIHM4LCByMyk7CiAgfQogIHZhciBCdDUgPSB7IHJlc29sdmU6ICJFbXBoYXNpcyIsIG1hcms6ICJFbXBoYXNpc01hcmsiIH07CiAgdmFyIEh0NSA9IHsgcmVzb2x2ZTogIkVtcGhhc2lzIiwgbWFyazogIkVtcGhhc2lzTWFyayIgfTsKICB2YXIgTTEyID0ge307CiAgdmFyIGZ0NCA9IHt9OwogIHZhciBiMTEgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgczgsIHIzLCBuOCkgewogICAgICB0aGlzLnR5cGUgPSB0NCwgdGhpcy5mcm9tID0gczgsIHRoaXMudG8gPSByMywgdGhpcy5zaWRlID0gbjg7CiAgICB9CiAgfTsKICB2YXIgZHQ1ID0gIiFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX4iOwogIHZhciB6MTMgPSAvWyEiIyQlJicoKSorLFwtLlwvOjs8PT4/QFxbXFxcXV5fYHt8fX5ceEExXHUyMDEwLVx1MjAyN10vOwogIHRyeSB7CiAgICB6MTMgPSBuZXcgUmVnRXhwKCJbXFxwe1BjfXxcXHB7UGR9fFxccHtQZX18XFxwe1BmfXxcXHB7UGl9fFxccHtQb318XFxwe1BzfV0iLCAidSIpOwogIH0gY2F0Y2ggewogIH0KICB2YXIgVTEyID0geyBFc2NhcGUoZTUsIHQ0LCBzOCkgewogICAgaWYgKHQ0ICE9IDkyIHx8IHM4ID09IGU1LmVuZCAtIDEpCiAgICAgIHJldHVybiAtMTsKICAgIGxldCByMyA9IGU1LmNoYXIoczggKyAxKTsKICAgIGZvciAobGV0IG44ID0gMDsgbjggPCBkdDUubGVuZ3RoOyBuOCsrKQogICAgICBpZiAoZHQ1LmNoYXJDb2RlQXQobjgpID09IHIzKQogICAgICAgIHJldHVybiBlNS5hcHBlbmQoYzcoaC5Fc2NhcGUsIHM4LCBzOCArIDIpKTsKICAgIHJldHVybiAtMTsKICB9LCBFbnRpdHkoZTUsIHQ0LCBzOCkgewogICAgaWYgKHQ0ICE9IDM4KQogICAgICByZXR1cm4gLTE7CiAgICBsZXQgcjMgPSAvXig/OiNcZCt8I3hbYS1mXGRdK3xcdyspOy9pLmV4ZWMoZTUuc2xpY2UoczggKyAxLCBzOCArIDMxKSk7CiAgICByZXR1cm4gcjMgPyBlNS5hcHBlbmQoYzcoaC5FbnRpdHksIHM4LCBzOCArIDEgKyByM1swXS5sZW5ndGgpKSA6IC0xOwogIH0sIElubGluZUNvZGUoZTUsIHQ0LCBzOCkgewogICAgaWYgKHQ0ICE9IDk2IHx8IHM4ICYmIGU1LmNoYXIoczggLSAxKSA9PSA5NikKICAgICAgcmV0dXJuIC0xOwogICAgbGV0IHIzID0gczggKyAxOwogICAgZm9yICg7IHIzIDwgZTUuZW5kICYmIGU1LmNoYXIocjMpID09IDk2OyApCiAgICAgIHIzKys7CiAgICBsZXQgbjggPSByMyAtIHM4LCBpNCA9IDA7CiAgICBmb3IgKDsgcjMgPCBlNS5lbmQ7IHIzKyspCiAgICAgIGlmIChlNS5jaGFyKHIzKSA9PSA5NikgewogICAgICAgIGlmIChpNCsrLCBpNCA9PSBuOCAmJiBlNS5jaGFyKHIzICsgMSkgIT0gOTYpCiAgICAgICAgICByZXR1cm4gZTUuYXBwZW5kKGM3KGguSW5saW5lQ29kZSwgczgsIHIzICsgMSwgW2M3KGguQ29kZU1hcmssIHM4LCBzOCArIG44KSwgYzcoaC5Db2RlTWFyaywgcjMgKyAxIC0gbjgsIHIzICsgMSldKSk7CiAgICAgIH0gZWxzZQogICAgICAgIGk0ID0gMDsKICAgIHJldHVybiAtMTsKICB9LCBIVE1MVGFnKGU1LCB0NCwgczgpIHsKICAgIGlmICh0NCAhPSA2MCB8fCBzOCA9PSBlNS5lbmQgLSAxKQogICAgICByZXR1cm4gLTE7CiAgICBsZXQgcjMgPSBlNS5zbGljZShzOCArIDEsIGU1LmVuZCksIG44ID0gL14oPzpbYS16XVstXHcrLl0rOlteXHM+XSt8W2EtelxkLiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16XGRdKD86W2EtelxkLV17MCw2MX1bYS16XGRdKT8oPzpcLlthLXpcZF0oPzpbYS16XGQtXXswLDYxfVthLXpcZF0pPykqKT4vaS5leGVjKHIzKTsKICAgIGlmIChuOCkKICAgICAgcmV0dXJuIGU1LmFwcGVuZChjNyhoLlVSTCwgczgsIHM4ICsgMSArIG44WzBdLmxlbmd0aCkpOwogICAgbGV0IGk0ID0gL14hLS1bXj5dKD86LVteLV18W14tXSkqPy0tPi9pLmV4ZWMocjMpOwogICAgaWYgKGk0KQogICAgICByZXR1cm4gZTUuYXBwZW5kKGM3KGguQ29tbWVudCwgczgsIHM4ICsgMSArIGk0WzBdLmxlbmd0aCkpOwogICAgbGV0IG80ID0gL15cP1teXSo/XD8+Ly5leGVjKHIzKTsKICAgIGlmIChvNCkKICAgICAgcmV0dXJuIGU1LmFwcGVuZChjNyhoLlByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgczgsIHM4ICsgMSArIG80WzBdLmxlbmd0aCkpOwogICAgbGV0IGE0ID0gL14oPzohW0EtWl1bXl0qPz58IVxbQ0RBVEFcW1teXSo/XF1cXT58XC9ccypbYS16QS1aXVtcdy1dKlxzKj58XHMqW2EtekEtWl1bXHctXSooXHMrW2EtekEtWjpfXVtcdy0uOl0qKD86XHMqPVxzKig/OlteXHMiJz08PmBdK3wnW14nXSonfCJbXiJdKiIpKT8pKlxzKihcL1xzKik/PikvLmV4ZWMocjMpOwogICAgcmV0dXJuIGE0ID8gZTUuYXBwZW5kKGM3KGguSFRNTFRhZywgczgsIHM4ICsgMSArIGE0WzBdLmxlbmd0aCkpIDogLTE7CiAgfSwgRW1waGFzaXMoZTUsIHQ0LCBzOCkgewogICAgaWYgKHQ0ICE9IDk1ICYmIHQ0ICE9IDQyKQogICAgICByZXR1cm4gLTE7CiAgICBsZXQgcjMgPSBzOCArIDE7CiAgICBmb3IgKDsgZTUuY2hhcihyMykgPT0gdDQ7ICkKICAgICAgcjMrKzsKICAgIGxldCBuOCA9IGU1LnNsaWNlKHM4IC0gMSwgczgpLCBpNCA9IGU1LnNsaWNlKHIzLCByMyArIDEpLCBvNCA9IHoxMy50ZXN0KG44KSwgYTQgPSB6MTMudGVzdChpNCksIGw3ID0gL1xzfF4kLy50ZXN0KG44KSwgZDE1ID0gL1xzfF4kLy50ZXN0KGk0KSwgdTExID0gIWQxNSAmJiAoIWE0IHx8IGw3IHx8IG80KSwgZzEyID0gIWw3ICYmICghbzQgfHwgZDE1IHx8IGE0KSwgZjExID0gdTExICYmICh0NCA9PSA0MiB8fCAhZzEyIHx8IG80KSwgbTIzID0gZzEyICYmICh0NCA9PSA0MiB8fCAhdTExIHx8IGE0KTsKICAgIHJldHVybiBlNS5hcHBlbmQobmV3IGIxMSh0NCA9PSA5NSA/IEJ0NSA6IEh0NSwgczgsIHIzLCAoZjExID8gMSA6IDApIHwgKG0yMyA/IDIgOiAwKSkpOwogIH0sIEhhcmRCcmVhayhlNSwgdDQsIHM4KSB7CiAgICBpZiAodDQgPT0gOTIgJiYgZTUuY2hhcihzOCArIDEpID09IDEwKQogICAgICByZXR1cm4gZTUuYXBwZW5kKGM3KGguSGFyZEJyZWFrLCBzOCwgczggKyAyKSk7CiAgICBpZiAodDQgPT0gMzIpIHsKICAgICAgbGV0IHIzID0gczggKyAxOwogICAgICBmb3IgKDsgZTUuY2hhcihyMykgPT0gMzI7ICkKICAgICAgICByMysrOwogICAgICBpZiAoZTUuY2hhcihyMykgPT0gMTAgJiYgcjMgPj0gczggKyAyKQogICAgICAgIHJldHVybiBlNS5hcHBlbmQoYzcoaC5IYXJkQnJlYWssIHM4LCByMyArIDEpKTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9LCBMaW5rKGU1LCB0NCwgczgpIHsKICAgIHJldHVybiB0NCA9PSA5MSA/IGU1LmFwcGVuZChuZXcgYjExKE0xMiwgczgsIHM4ICsgMSwgMSkpIDogLTE7CiAgfSwgSW1hZ2UoZTUsIHQ0LCBzOCkgewogICAgcmV0dXJuIHQ0ID09IDMzICYmIGU1LmNoYXIoczggKyAxKSA9PSA5MSA/IGU1LmFwcGVuZChuZXcgYjExKGZ0NCwgczgsIHM4ICsgMiwgMSkpIDogLTE7CiAgfSwgTGlua0VuZChlNSwgdDQsIHM4KSB7CiAgICBpZiAodDQgIT0gOTMpCiAgICAgIHJldHVybiAtMTsKICAgIGZvciAobGV0IHIzID0gZTUucGFydHMubGVuZ3RoIC0gMTsgcjMgPj0gMDsgcjMtLSkgewogICAgICBsZXQgbjggPSBlNS5wYXJ0c1tyM107CiAgICAgIGlmIChuOCBpbnN0YW5jZW9mIGIxMSAmJiAobjgudHlwZSA9PSBNMTIgfHwgbjgudHlwZSA9PSBmdDQpKSB7CiAgICAgICAgaWYgKCFuOC5zaWRlIHx8IGU1LnNraXBTcGFjZShuOC50bykgPT0gczggJiYgIS9bKFxbXS8udGVzdChlNS5zbGljZShzOCArIDEsIHM4ICsgMikpKQogICAgICAgICAgcmV0dXJuIGU1LnBhcnRzW3IzXSA9IG51bGwsIC0xOwogICAgICAgIGxldCBpNCA9IGU1LnRha2VDb250ZW50KHIzKSwgbzQgPSBlNS5wYXJ0c1tyM10gPSAkdDIoZTUsIGk0LCBuOC50eXBlID09IE0xMiA/IGguTGluayA6IGguSW1hZ2UsIG44LmZyb20sIHM4ICsgMSk7CiAgICAgICAgaWYgKG44LnR5cGUgPT0gTTEyKQogICAgICAgICAgZm9yIChsZXQgYTQgPSAwOyBhNCA8IHIzOyBhNCsrKSB7CiAgICAgICAgICAgIGxldCBsNyA9IGU1LnBhcnRzW2E0XTsKICAgICAgICAgICAgbDcgaW5zdGFuY2VvZiBiMTEgJiYgbDcudHlwZSA9PSBNMTIgJiYgKGw3LnNpZGUgPSAwKTsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gbzQudG87CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKICB9IH07CiAgZnVuY3Rpb24gJHQyKGU1LCB0NCwgczgsIHIzLCBuOCkgewogICAgbGV0IHsgdGV4dDogaTQgfSA9IGU1LCBvNCA9IGU1LmNoYXIobjgpLCBhNCA9IG44OwogICAgaWYgKHQ0LnVuc2hpZnQoYzcoaC5MaW5rTWFyaywgcjMsIHIzICsgKHM4ID09IGguSW1hZ2UgPyAyIDogMSkpKSwgdDQucHVzaChjNyhoLkxpbmtNYXJrLCBuOCAtIDEsIG44KSksIG80ID09IDQwKSB7CiAgICAgIGxldCBsNyA9IGU1LnNraXBTcGFjZShuOCArIDEpLCBkMTUgPSBNdDMoaTQsIGw3IC0gZTUub2Zmc2V0LCBlNS5vZmZzZXQpLCB1MTE7CiAgICAgIGQxNSAmJiAobDcgPSBlNS5za2lwU3BhY2UoZDE1LnRvKSwgdTExID0geHQ4KGk0LCBsNyAtIGU1Lm9mZnNldCwgZTUub2Zmc2V0KSwgdTExICYmIChsNyA9IGU1LnNraXBTcGFjZSh1MTEudG8pKSksIGU1LmNoYXIobDcpID09IDQxICYmICh0NC5wdXNoKGM3KGguTGlua01hcmssIG44LCBuOCArIDEpKSwgYTQgPSBsNyArIDEsIGQxNSAmJiB0NC5wdXNoKGQxNSksIHUxMSAmJiB0NC5wdXNoKHUxMSksIHQ0LnB1c2goYzcoaC5MaW5rTWFyaywgbDcsIGE0KSkpOwogICAgfSBlbHNlIGlmIChvNCA9PSA5MSkgewogICAgICBsZXQgbDcgPSB2dDUoaTQsIG44IC0gZTUub2Zmc2V0LCBlNS5vZmZzZXQsIGZhbHNlKTsKICAgICAgbDcgJiYgKHQ0LnB1c2gobDcpLCBhNCA9IGw3LnRvKTsKICAgIH0KICAgIHJldHVybiBjNyhzOCwgcjMsIGE0LCB0NCk7CiAgfQogIGZ1bmN0aW9uIE10MyhlNSwgdDQsIHM4KSB7CiAgICBpZiAoZTUuY2hhckNvZGVBdCh0NCkgPT0gNjApIHsKICAgICAgZm9yIChsZXQgbjggPSB0NCArIDE7IG44IDwgZTUubGVuZ3RoOyBuOCsrKSB7CiAgICAgICAgbGV0IGk0ID0gZTUuY2hhckNvZGVBdChuOCk7CiAgICAgICAgaWYgKGk0ID09IDYyKQogICAgICAgICAgcmV0dXJuIGM3KGguVVJMLCB0NCArIHM4LCBuOCArIDEgKyBzOCk7CiAgICAgICAgaWYgKGk0ID09IDYwIHx8IGk0ID09IDEwKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgbGV0IG44ID0gMCwgaTQgPSB0NDsKICAgICAgZm9yIChsZXQgbzQgPSBmYWxzZTsgaTQgPCBlNS5sZW5ndGg7IGk0KyspIHsKICAgICAgICBsZXQgYTQgPSBlNS5jaGFyQ29kZUF0KGk0KTsKICAgICAgICBpZiAoUzEwKGE0KSkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGlmIChvNCkKICAgICAgICAgIG80ID0gZmFsc2U7CiAgICAgICAgZWxzZSBpZiAoYTQgPT0gNDApCiAgICAgICAgICBuOCsrOwogICAgICAgIGVsc2UgaWYgKGE0ID09IDQxKSB7CiAgICAgICAgICBpZiAoIW44KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIG44LS07CiAgICAgICAgfSBlbHNlCiAgICAgICAgICBhNCA9PSA5MiAmJiAobzQgPSB0cnVlKTsKICAgICAgfQogICAgICByZXR1cm4gaTQgPiB0NCA/IGM3KGguVVJMLCB0NCArIHM4LCBpNCArIHM4KSA6IGk0ID09IGU1Lmxlbmd0aCA/IG51bGwgOiBmYWxzZTsKICAgIH0KICB9CiAgZnVuY3Rpb24geHQ4KGU1LCB0NCwgczgpIHsKICAgIGxldCByMyA9IGU1LmNoYXJDb2RlQXQodDQpOwogICAgaWYgKHIzICE9IDM5ICYmIHIzICE9IDM0ICYmIHIzICE9IDQwKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgbjggPSByMyA9PSA0MCA/IDQxIDogcjM7CiAgICBmb3IgKGxldCBpNCA9IHQ0ICsgMSwgbzQgPSBmYWxzZTsgaTQgPCBlNS5sZW5ndGg7IGk0KyspIHsKICAgICAgbGV0IGE0ID0gZTUuY2hhckNvZGVBdChpNCk7CiAgICAgIGlmIChvNCkKICAgICAgICBvNCA9IGZhbHNlOwogICAgICBlbHNlIHsKICAgICAgICBpZiAoYTQgPT0gbjgpCiAgICAgICAgICByZXR1cm4gYzcoaC5MaW5rVGl0bGUsIHQ0ICsgczgsIGk0ICsgMSArIHM4KTsKICAgICAgICBhNCA9PSA5MiAmJiAobzQgPSB0cnVlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIHZ0NShlNSwgdDQsIHM4LCByMykgewogICAgZm9yIChsZXQgbjggPSBmYWxzZSwgaTQgPSB0NCArIDEsIG80ID0gTWF0aC5taW4oZTUubGVuZ3RoLCBpNCArIDk5OSk7IGk0IDwgbzQ7IGk0KyspIHsKICAgICAgbGV0IGE0ID0gZTUuY2hhckNvZGVBdChpNCk7CiAgICAgIGlmIChuOCkKICAgICAgICBuOCA9IGZhbHNlOwogICAgICBlbHNlIHsKICAgICAgICBpZiAoYTQgPT0gOTMpCiAgICAgICAgICByZXR1cm4gcjMgPyBmYWxzZSA6IGM3KGguTGlua0xhYmVsLCB0NCArIHM4LCBpNCArIDEgKyBzOCk7CiAgICAgICAgaWYgKHIzICYmICFTMTAoYTQpICYmIChyMyA9IGZhbHNlKSwgYTQgPT0gOTEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgYTQgPT0gOTIgJiYgKG44ID0gdHJ1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICB2YXIgVzkgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgczgsIHIzKSB7CiAgICAgIHRoaXMucGFyc2VyID0gdDQsIHRoaXMudGV4dCA9IHM4LCB0aGlzLm9mZnNldCA9IHIzLCB0aGlzLnBhcnRzID0gW107CiAgICB9CiAgICBjaGFyKHQ0KSB7CiAgICAgIHJldHVybiB0NCA+PSB0aGlzLmVuZCA/IC0xIDogdGhpcy50ZXh0LmNoYXJDb2RlQXQodDQgLSB0aGlzLm9mZnNldCk7CiAgICB9CiAgICBnZXQgZW5kKCkgewogICAgICByZXR1cm4gdGhpcy5vZmZzZXQgKyB0aGlzLnRleHQubGVuZ3RoOwogICAgfQogICAgc2xpY2UodDQsIHM4KSB7CiAgICAgIHJldHVybiB0aGlzLnRleHQuc2xpY2UodDQgLSB0aGlzLm9mZnNldCwgczggLSB0aGlzLm9mZnNldCk7CiAgICB9CiAgICBhcHBlbmQodDQpIHsKICAgICAgcmV0dXJuIHRoaXMucGFydHMucHVzaCh0NCksIHQ0LnRvOwogICAgfQogICAgYWRkRGVsaW1pdGVyKHQ0LCBzOCwgcjMsIG44LCBpNCkgewogICAgICByZXR1cm4gdGhpcy5hcHBlbmQobmV3IGIxMSh0NCwgczgsIHIzLCAobjggPyAxIDogMCkgfCAoaTQgPyAyIDogMCkpKTsKICAgIH0KICAgIGFkZEVsZW1lbnQodDQpIHsKICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kKHQ0KTsKICAgIH0KICAgIHJlc29sdmVNYXJrZXJzKHQ0KSB7CiAgICAgIGZvciAobGV0IHIzID0gdDQ7IHIzIDwgdGhpcy5wYXJ0cy5sZW5ndGg7IHIzKyspIHsKICAgICAgICBsZXQgbjggPSB0aGlzLnBhcnRzW3IzXTsKICAgICAgICBpZiAoIShuOCBpbnN0YW5jZW9mIGIxMSAmJiBuOC50eXBlLnJlc29sdmUgJiYgbjguc2lkZSAmIDIpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgbGV0IGk0ID0gbjgudHlwZSA9PSBCdDUgfHwgbjgudHlwZSA9PSBIdDUsIG80ID0gbjgudG8gLSBuOC5mcm9tLCBhNCwgbDcgPSByMyAtIDE7CiAgICAgICAgZm9yICg7IGw3ID49IHQ0OyBsNy0tKSB7CiAgICAgICAgICBsZXQgazE4ID0gdGhpcy5wYXJ0c1tsN107CiAgICAgICAgICBpZiAoazE4IGluc3RhbmNlb2YgYjExICYmIGsxOC5zaWRlICYgMSAmJiBrMTgudHlwZSA9PSBuOC50eXBlICYmICEoaTQgJiYgKG44LnNpZGUgJiAxIHx8IGsxOC5zaWRlICYgMikgJiYgKGsxOC50byAtIGsxOC5mcm9tICsgbzQpICUgMyA9PSAwICYmICgoazE4LnRvIC0gazE4LmZyb20pICUgMyB8fCBvNCAlIDMpKSkgewogICAgICAgICAgICBhNCA9IGsxODsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghYTQpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBsZXQgZDE1ID0gbjgudHlwZS5yZXNvbHZlLCB1MTEgPSBbXSwgZzEyID0gYTQuZnJvbSwgZjExID0gbjgudG87CiAgICAgICAgaWYgKGk0KSB7CiAgICAgICAgICBsZXQgazE4ID0gTWF0aC5taW4oMiwgYTQudG8gLSBhNC5mcm9tLCBvNCk7CiAgICAgICAgICBnMTIgPSBhNC50byAtIGsxOCwgZjExID0gbjguZnJvbSArIGsxOCwgZDE1ID0gazE4ID09IDEgPyAiRW1waGFzaXMiIDogIlN0cm9uZ0VtcGhhc2lzIjsKICAgICAgICB9CiAgICAgICAgYTQudHlwZS5tYXJrICYmIHUxMS5wdXNoKHRoaXMuZWx0KGE0LnR5cGUubWFyaywgZzEyLCBhNC50bykpOwogICAgICAgIGZvciAobGV0IGsxOCA9IGw3ICsgMTsgazE4IDwgcjM7IGsxOCsrKQogICAgICAgICAgdGhpcy5wYXJ0c1trMThdIGluc3RhbmNlb2YgdzEyICYmIHUxMS5wdXNoKHRoaXMucGFydHNbazE4XSksIHRoaXMucGFydHNbazE4XSA9IG51bGw7CiAgICAgICAgbjgudHlwZS5tYXJrICYmIHUxMS5wdXNoKHRoaXMuZWx0KG44LnR5cGUubWFyaywgbjguZnJvbSwgZjExKSk7CiAgICAgICAgbGV0IG0yMyA9IHRoaXMuZWx0KGQxNSwgZzEyLCBmMTEsIHUxMSk7CiAgICAgICAgdGhpcy5wYXJ0c1tsN10gPSBpNCAmJiBhNC5mcm9tICE9IGcxMiA/IG5ldyBiMTEoYTQudHlwZSwgYTQuZnJvbSwgZzEyLCBhNC5zaWRlKSA6IG51bGwsICh0aGlzLnBhcnRzW3IzXSA9IGk0ICYmIG44LnRvICE9IGYxMSA/IG5ldyBiMTEobjgudHlwZSwgZjExLCBuOC50bywgbjguc2lkZSkgOiBudWxsKSA/IHRoaXMucGFydHMuc3BsaWNlKHIzLCAwLCBtMjMpIDogdGhpcy5wYXJ0c1tyM10gPSBtMjM7CiAgICAgIH0KICAgICAgbGV0IHM4ID0gW107CiAgICAgIGZvciAobGV0IHIzID0gdDQ7IHIzIDwgdGhpcy5wYXJ0cy5sZW5ndGg7IHIzKyspIHsKICAgICAgICBsZXQgbjggPSB0aGlzLnBhcnRzW3IzXTsKICAgICAgICBuOCBpbnN0YW5jZW9mIHcxMiAmJiBzOC5wdXNoKG44KTsKICAgICAgfQogICAgICByZXR1cm4gczg7CiAgICB9CiAgICBmaW5kT3BlbmluZ0RlbGltaXRlcih0NCkgewogICAgICBmb3IgKGxldCBzOCA9IHRoaXMucGFydHMubGVuZ3RoIC0gMTsgczggPj0gMDsgczgtLSkgewogICAgICAgIGxldCByMyA9IHRoaXMucGFydHNbczhdOwogICAgICAgIGlmIChyMyBpbnN0YW5jZW9mIGIxMSAmJiByMy50eXBlID09IHQ0KQogICAgICAgICAgcmV0dXJuIHM4OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgdGFrZUNvbnRlbnQodDQpIHsKICAgICAgbGV0IHM4ID0gdGhpcy5yZXNvbHZlTWFya2Vycyh0NCk7CiAgICAgIHJldHVybiB0aGlzLnBhcnRzLmxlbmd0aCA9IHQ0LCBzODsKICAgIH0KICAgIHNraXBTcGFjZSh0NCkgewogICAgICByZXR1cm4geDgodGhpcy50ZXh0LCB0NCAtIHRoaXMub2Zmc2V0KSArIHRoaXMub2Zmc2V0OwogICAgfQogICAgZWx0KHQ0LCBzOCwgcjMsIG44KSB7CiAgICAgIHJldHVybiB0eXBlb2YgdDQgPT0gInN0cmluZyIgPyBjNyh0aGlzLnBhcnNlci5nZXROb2RlVHlwZSh0NCksIHM4LCByMywgbjgpIDogbmV3IFgxMih0NCwgczgpOwogICAgfQogIH07CiAgZnVuY3Rpb24gdHQxMihlNSwgdDQpIHsKICAgIGlmICghdDQubGVuZ3RoKQogICAgICByZXR1cm4gZTU7CiAgICBpZiAoIWU1Lmxlbmd0aCkKICAgICAgcmV0dXJuIHQ0OwogICAgbGV0IHM4ID0gZTUuc2xpY2UoKSwgcjMgPSAwOwogICAgZm9yIChsZXQgbjggb2YgdDQpIHsKICAgICAgZm9yICg7IHIzIDwgczgubGVuZ3RoICYmIHM4W3IzXS50byA8IG44LnRvOyApCiAgICAgICAgcjMrKzsKICAgICAgaWYgKHIzIDwgczgubGVuZ3RoICYmIHM4W3IzXS5mcm9tIDwgbjguZnJvbSkgewogICAgICAgIGxldCBpNCA9IHM4W3IzXTsKICAgICAgICBpNCBpbnN0YW5jZW9mIHcxMiAmJiAoczhbcjNdID0gbmV3IHcxMihpNC50eXBlLCBpNC5mcm9tLCBpNC50bywgdHQxMihpNC5jaGlsZHJlbiwgW244XSkpKTsKICAgICAgfSBlbHNlCiAgICAgICAgczguc3BsaWNlKHIzKyssIDAsIG44KTsKICAgIH0KICAgIHJldHVybiBzODsKICB9CiAgdmFyIF90MiA9IFtoLkNvZGVCbG9jaywgaC5MaXN0SXRlbSwgaC5PcmRlcmVkTGlzdCwgaC5CdWxsZXRMaXN0XTsKICB2YXIgZXQ3ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIHM4KSB7CiAgICAgIHRoaXMuZnJhZ21lbnRzID0gdDQsIHRoaXMuaW5wdXQgPSBzOCwgdGhpcy5pID0gMCwgdGhpcy5mcmFnbWVudCA9IG51bGwsIHRoaXMuZnJhZ21lbnRFbmQgPSAtMSwgdGhpcy5jdXJzb3IgPSBudWxsLCB0NC5sZW5ndGggJiYgKHRoaXMuZnJhZ21lbnQgPSB0NFt0aGlzLmkrK10pOwogICAgfQogICAgbmV4dEZyYWdtZW50KCkgewogICAgICB0aGlzLmZyYWdtZW50ID0gdGhpcy5pIDwgdGhpcy5mcmFnbWVudHMubGVuZ3RoID8gdGhpcy5mcmFnbWVudHNbdGhpcy5pKytdIDogbnVsbCwgdGhpcy5jdXJzb3IgPSBudWxsLCB0aGlzLmZyYWdtZW50RW5kID0gLTE7CiAgICB9CiAgICBtb3ZlVG8odDQsIHM4KSB7CiAgICAgIGZvciAoOyB0aGlzLmZyYWdtZW50ICYmIHRoaXMuZnJhZ21lbnQudG8gPD0gdDQ7ICkKICAgICAgICB0aGlzLm5leHRGcmFnbWVudCgpOwogICAgICBpZiAoIXRoaXMuZnJhZ21lbnQgfHwgdGhpcy5mcmFnbWVudC5mcm9tID4gKHQ0ID8gdDQgLSAxIDogMCkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBpZiAodGhpcy5mcmFnbWVudEVuZCA8IDApIHsKICAgICAgICBsZXQgaTQgPSB0aGlzLmZyYWdtZW50LnRvOwogICAgICAgIGZvciAoOyBpNCA+IDAgJiYgdGhpcy5pbnB1dC5yZWFkKGk0IC0gMSwgaTQpICE9IGAKYDsgKQogICAgICAgICAgaTQtLTsKICAgICAgICB0aGlzLmZyYWdtZW50RW5kID0gaTQgPyBpNCAtIDEgOiAwOwogICAgICB9CiAgICAgIGxldCByMyA9IHRoaXMuY3Vyc29yOwogICAgICByMyB8fCAocjMgPSB0aGlzLmN1cnNvciA9IHRoaXMuZnJhZ21lbnQudHJlZS5jdXJzb3IoKSwgcjMuZmlyc3RDaGlsZCgpKTsKICAgICAgbGV0IG44ID0gdDQgKyB0aGlzLmZyYWdtZW50Lm9mZnNldDsKICAgICAgZm9yICg7IHIzLnRvIDw9IG44OyApCiAgICAgICAgaWYgKCFyMy5wYXJlbnQoKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgaWYgKHIzLmZyb20gPj0gbjgpCiAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudC5mcm9tIDw9IHM4OwogICAgICAgIGlmICghcjMuY2hpbGRBZnRlcihuOCkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIG1hdGNoZXModDQpIHsKICAgICAgbGV0IHM4ID0gdGhpcy5jdXJzb3IudHJlZTsKICAgICAgcmV0dXJuIHM4ICYmIHM4LnByb3AodzMuY29udGV4dEhhc2gpID09IHQ0OwogICAgfQogICAgdGFrZU5vZGVzKHQ0KSB7CiAgICAgIGxldCBzOCA9IHRoaXMuY3Vyc29yLCByMyA9IHRoaXMuZnJhZ21lbnQub2Zmc2V0LCBuOCA9IHRoaXMuZnJhZ21lbnRFbmQgLSAodGhpcy5mcmFnbWVudC5vcGVuRW5kID8gMSA6IDApLCBpNCA9IHQ0LmFic29sdXRlTGluZVN0YXJ0LCBvNCA9IGk0LCBhNCA9IHQ0LmJsb2NrLmNoaWxkcmVuLmxlbmd0aCwgbDcgPSBvNCwgZDE1ID0gYTQ7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGlmIChzOC50byAtIHIzID4gbjgpIHsKICAgICAgICAgIGlmIChzOC50eXBlLmlzQW5vbnltb3VzICYmIHM4LmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKHQ0LmRvbnRJbmplY3QuYWRkKHM4LnRyZWUpLCB0NC5hZGROb2RlKHM4LnRyZWUsIHM4LmZyb20gLSByMyksIHM4LnR5cGUuaXMoIkJsb2NrIikgJiYgKF90Mi5pbmRleE9mKHM4LnR5cGUuaWQpIDwgMCA/IChvNCA9IHM4LnRvIC0gcjMsIGE0ID0gdDQuYmxvY2suY2hpbGRyZW4ubGVuZ3RoKSA6IChvNCA9IGw3LCBhNCA9IGQxNSwgbDcgPSBzOC50byAtIHIzLCBkMTUgPSB0NC5ibG9jay5jaGlsZHJlbi5sZW5ndGgpKSwgIXM4Lm5leHRTaWJsaW5nKCkpCiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBmb3IgKDsgdDQuYmxvY2suY2hpbGRyZW4ubGVuZ3RoID4gYTQ7ICkKICAgICAgICB0NC5ibG9jay5jaGlsZHJlbi5wb3AoKSwgdDQuYmxvY2sucG9zaXRpb25zLnBvcCgpOwogICAgICByZXR1cm4gbzQgLSBpNDsKICAgIH0KICB9OwogIHZhciBVdDYgPSAkMTIoeyAiQmxvY2txdW90ZS8uLi4iOiBuNS5xdW90ZSwgSG9yaXpvbnRhbFJ1bGU6IG41LmNvbnRlbnRTZXBhcmF0b3IsICJBVFhIZWFkaW5nMS8uLi4gU2V0ZXh0SGVhZGluZzEvLi4uIjogbjUuaGVhZGluZzEsICJBVFhIZWFkaW5nMi8uLi4gU2V0ZXh0SGVhZGluZzIvLi4uIjogbjUuaGVhZGluZzIsICJBVFhIZWFkaW5nMy8uLi4iOiBuNS5oZWFkaW5nMywgIkFUWEhlYWRpbmc0Ly4uLiI6IG41LmhlYWRpbmc0LCAiQVRYSGVhZGluZzUvLi4uIjogbjUuaGVhZGluZzUsICJBVFhIZWFkaW5nNi8uLi4iOiBuNS5oZWFkaW5nNiwgIkNvbW1lbnQgQ29tbWVudEJsb2NrIjogbjUuY29tbWVudCwgRXNjYXBlOiBuNS5lc2NhcGUsIEVudGl0eTogbjUuY2hhcmFjdGVyLCAiRW1waGFzaXMvLi4uIjogbjUuZW1waGFzaXMsICJTdHJvbmdFbXBoYXNpcy8uLi4iOiBuNS5zdHJvbmcsICJMaW5rLy4uLiBJbWFnZS8uLi4iOiBuNS5saW5rLCAiT3JkZXJlZExpc3QvLi4uIEJ1bGxldExpc3QvLi4uIjogbjUubGlzdCwgIkJsb2NrUXVvdGUvLi4uIjogbjUucXVvdGUsICJJbmxpbmVDb2RlIENvZGVUZXh0IjogbjUubW9ub3NwYWNlLCBVUkw6IG41LnVybCwgIkhlYWRlck1hcmsgSGFyZEJyZWFrIFF1b3RlTWFyayBMaXN0TWFyayBMaW5rTWFyayBFbXBoYXNpc01hcmsgQ29kZU1hcmsiOiBuNS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sICJDb2RlSW5mbyBMaW5rTGFiZWwiOiBuNS5sYWJlbE5hbWUsIExpbmtUaXRsZTogbjUuc3RyaW5nLCBQYXJhZ3JhcGg6IG41LmNvbnRlbnQgfSk7CiAgdmFyIFl0MyA9IG5ldyBOOChuZXcgWjMoSXQ2KS5leHRlbmQoVXQ2KSwgT2JqZWN0LmtleXMoTzcpLm1hcCgoZTUpID0+IE83W2U1XSksIE9iamVjdC5rZXlzKE83KS5tYXAoKGU1KSA9PiBUdDZbZTVdKSwgT2JqZWN0LmtleXMoTzcpLCBEdDYsIGd0NywgT2JqZWN0LmtleXMoVTEyKS5tYXAoKGU1KSA9PiBVMTJbZTVdKSwgT2JqZWN0LmtleXMoVTEyKSwgW10pOwogIGZ1bmN0aW9uIHF0MyhlNSwgdDQsIHM4KSB7CiAgICBsZXQgcjMgPSBbXTsKICAgIGZvciAobGV0IG44ID0gZTUuZmlyc3RDaGlsZCwgaTQgPSB0NDsgOyBuOCA9IG44Lm5leHRTaWJsaW5nKSB7CiAgICAgIGxldCBvNCA9IG44ID8gbjguZnJvbSA6IHM4OwogICAgICBpZiAobzQgPiBpNCAmJiByMy5wdXNoKHsgZnJvbTogaTQsIHRvOiBvNCB9KSwgIW44KQogICAgICAgIGJyZWFrOwogICAgICBpNCA9IG44LnRvOwogICAgfQogICAgcmV0dXJuIHIzOwogIH0KICBmdW5jdGlvbiBXdDgoZTUpIHsKICAgIGxldCB7IGNvZGVQYXJzZXI6IHQ0LCBodG1sUGFyc2VyOiBzOCB9ID0gZTU7CiAgICByZXR1cm4geyB3cmFwOiBOZTMoKG44LCBpNCkgPT4gewogICAgICBsZXQgbzQgPSBuOC50eXBlLmlkOwogICAgICBpZiAodDQgJiYgKG80ID09IGguQ29kZUJsb2NrIHx8IG80ID09IGguRmVuY2VkQ29kZSkpIHsKICAgICAgICBsZXQgYTQgPSAiIjsKICAgICAgICBpZiAobzQgPT0gaC5GZW5jZWRDb2RlKSB7CiAgICAgICAgICBsZXQgZDE1ID0gbjgubm9kZS5nZXRDaGlsZChoLkNvZGVJbmZvKTsKICAgICAgICAgIGQxNSAmJiAoYTQgPSBpNC5yZWFkKGQxNS5mcm9tLCBkMTUudG8pKTsKICAgICAgICB9CiAgICAgICAgbGV0IGw3ID0gdDQoYTQpOwogICAgICAgIGlmIChsNykKICAgICAgICAgIHJldHVybiB7IHBhcnNlcjogbDcsIG92ZXJsYXk6IChkMTUpID0+IGQxNS50eXBlLmlkID09IGguQ29kZVRleHQgfTsKICAgICAgfSBlbHNlIGlmIChzOCAmJiAobzQgPT0gaC5IVE1MQmxvY2sgfHwgbzQgPT0gaC5IVE1MVGFnKSkKICAgICAgICByZXR1cm4geyBwYXJzZXI6IHM4LCBvdmVybGF5OiBxdDMobjgubm9kZSwgbjguZnJvbSwgbjgudG8pIH07CiAgICAgIHJldHVybiBudWxsOwogICAgfSkgfTsKICB9CiAgdmFyIFF0NCA9IHsgcmVzb2x2ZTogIlN0cmlrZXRocm91Z2giLCBtYXJrOiAiU3RyaWtldGhyb3VnaE1hcmsiIH07CiAgdmFyIFp0MyA9IHsgZGVmaW5lTm9kZXM6IFt7IG5hbWU6ICJTdHJpa2V0aHJvdWdoIiwgc3R5bGU6IHsgIlN0cmlrZXRocm91Z2gvLi4uIjogbjUuc3RyaWtldGhyb3VnaCB9IH0sIHsgbmFtZTogIlN0cmlrZXRocm91Z2hNYXJrIiwgc3R5bGU6IG41LnByb2Nlc3NpbmdJbnN0cnVjdGlvbiB9XSwgcGFyc2VJbmxpbmU6IFt7IG5hbWU6ICJTdHJpa2V0aHJvdWdoIiwgcGFyc2UoZTUsIHQ0LCBzOCkgewogICAgaWYgKHQ0ICE9IDEyNiB8fCBlNS5jaGFyKHM4ICsgMSkgIT0gMTI2IHx8IGU1LmNoYXIoczggKyAyKSA9PSAxMjYpCiAgICAgIHJldHVybiAtMTsKICAgIGxldCByMyA9IGU1LnNsaWNlKHM4IC0gMSwgczgpLCBuOCA9IGU1LnNsaWNlKHM4ICsgMiwgczggKyAzKSwgaTQgPSAvXHN8XiQvLnRlc3QocjMpLCBvNCA9IC9cc3xeJC8udGVzdChuOCksIGE0ID0gejEzLnRlc3QocjMpLCBsNyA9IHoxMy50ZXN0KG44KTsKICAgIHJldHVybiBlNS5hZGREZWxpbWl0ZXIoUXQ0LCBzOCwgczggKyAyLCAhbzQgJiYgKCFsNyB8fCBpNCB8fCBhNCksICFpNCAmJiAoIWE0IHx8IG80IHx8IGw3KSk7CiAgfSwgYWZ0ZXI6ICJFbXBoYXNpcyIgfV0gfTsKICBmdW5jdGlvbiB2NyhlNSwgdDQsIHM4ID0gMCwgcjMsIG44ID0gMCkgewogICAgbGV0IGk0ID0gMCwgbzQgPSB0cnVlLCBhNCA9IC0xLCBsNyA9IC0xLCBkMTUgPSBmYWxzZSwgdTExID0gKCkgPT4gewogICAgICByMy5wdXNoKGU1LmVsdCgiVGFibGVDZWxsIiwgbjggKyBhNCwgbjggKyBsNywgZTUucGFyc2VyLnBhcnNlSW5saW5lKHQ0LnNsaWNlKGE0LCBsNyksIG44ICsgYTQpKSk7CiAgICB9OwogICAgZm9yIChsZXQgZzEyID0gczg7IGcxMiA8IHQ0Lmxlbmd0aDsgZzEyKyspIHsKICAgICAgbGV0IGYxMSA9IHQ0LmNoYXJDb2RlQXQoZzEyKTsKICAgICAgZjExID09IDEyNCAmJiAhZDE1ID8gKCghbzQgfHwgYTQgPiAtMSkgJiYgaTQrKywgbzQgPSBmYWxzZSwgcjMgJiYgKGE0ID4gLTEgJiYgdTExKCksIHIzLnB1c2goZTUuZWx0KCJUYWJsZURlbGltaXRlciIsIGcxMiArIG44LCBnMTIgKyBuOCArIDEpKSksIGE0ID0gbDcgPSAtMSkgOiAoZDE1IHx8IGYxMSAhPSAzMiAmJiBmMTEgIT0gOSkgJiYgKGE0IDwgMCAmJiAoYTQgPSBnMTIpLCBsNyA9IGcxMiArIDEpLCBkMTUgPSAhZDE1ICYmIGYxMSA9PSA5MjsKICAgIH0KICAgIHJldHVybiBhNCA+IC0xICYmIChpNCsrLCByMyAmJiB1MTEoKSksIGk0OwogIH0KICBmdW5jdGlvbiB1dDgoZTUsIHQ0KSB7CiAgICBmb3IgKGxldCBzOCA9IHQ0OyBzOCA8IGU1Lmxlbmd0aDsgczgrKykgewogICAgICBsZXQgcjMgPSBlNS5jaGFyQ29kZUF0KHM4KTsKICAgICAgaWYgKHIzID09IDEyNCkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgcjMgPT0gOTIgJiYgczgrKzsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgdmFyIFB0OCA9IC9eXHw/KFxzKjo/LSs6P1xzKlx8KSsoXHMqOj8tKzo/XHMqKT8kLzsKICB2YXIgajcgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgdGhpcy5yb3dzID0gbnVsbDsKICAgIH0KICAgIG5leHRMaW5lKHQ0LCBzOCwgcjMpIHsKICAgICAgaWYgKHRoaXMucm93cyA9PSBudWxsKSB7CiAgICAgICAgdGhpcy5yb3dzID0gZmFsc2U7CiAgICAgICAgbGV0IG44OwogICAgICAgIGlmICgoczgubmV4dCA9PSA0NSB8fCBzOC5uZXh0ID09IDU4IHx8IHM4Lm5leHQgPT0gMTI0KSAmJiBQdDgudGVzdChuOCA9IHM4LnRleHQuc2xpY2UoczgucG9zKSkpIHsKICAgICAgICAgIGxldCBpNCA9IFtdOwogICAgICAgICAgdjcodDQsIHIzLmNvbnRlbnQsIDAsIGk0LCByMy5zdGFydCkgPT0gdjcodDQsIG44LCBzOC5wb3MpICYmICh0aGlzLnJvd3MgPSBbdDQuZWx0KCJUYWJsZUhlYWRlciIsIHIzLnN0YXJ0LCByMy5zdGFydCArIHIzLmNvbnRlbnQubGVuZ3RoLCBpNCksIHQ0LmVsdCgiVGFibGVEZWxpbWl0ZXIiLCB0NC5saW5lU3RhcnQgKyBzOC5wb3MsIHQ0LmxpbmVTdGFydCArIHM4LnRleHQubGVuZ3RoKV0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLnJvd3MpIHsKICAgICAgICBsZXQgbjggPSBbXTsKICAgICAgICB2Nyh0NCwgczgudGV4dCwgczgucG9zLCBuOCwgdDQubGluZVN0YXJ0KSwgdGhpcy5yb3dzLnB1c2godDQuZWx0KCJUYWJsZVJvdyIsIHQ0LmxpbmVTdGFydCArIHM4LnBvcywgdDQubGluZVN0YXJ0ICsgczgudGV4dC5sZW5ndGgsIG44KSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZmluaXNoKHQ0LCBzOCkgewogICAgICByZXR1cm4gdGhpcy5yb3dzID8gKHQ0LmFkZExlYWZFbGVtZW50KHM4LCB0NC5lbHQoIlRhYmxlIiwgczguc3RhcnQsIHM4LnN0YXJ0ICsgczguY29udGVudC5sZW5ndGgsIHRoaXMucm93cykpLCB0cnVlKSA6IGZhbHNlOwogICAgfQogIH07CiAgdmFyIEd0MiA9IHsgZGVmaW5lTm9kZXM6IFt7IG5hbWU6ICJUYWJsZSIsIGJsb2NrOiB0cnVlIH0sIHsgbmFtZTogIlRhYmxlSGVhZGVyIiwgc3R5bGU6IHsgIlRhYmxlSGVhZGVyLy4uLiI6IG41LmhlYWRpbmcgfSB9LCAiVGFibGVSb3ciLCB7IG5hbWU6ICJUYWJsZUNlbGwiLCBzdHlsZTogbjUuY29udGVudCB9LCB7IG5hbWU6ICJUYWJsZURlbGltaXRlciIsIHN0eWxlOiBuNS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gfV0sIHBhcnNlQmxvY2s6IFt7IG5hbWU6ICJUYWJsZSIsIGxlYWYoZTUsIHQ0KSB7CiAgICByZXR1cm4gdXQ4KHQ0LmNvbnRlbnQsIDApID8gbmV3IGo3KCkgOiBudWxsOwogIH0sIGVuZExlYWYoZTUsIHQ0LCBzOCkgewogICAgaWYgKHM4LnBhcnNlcnMuc29tZSgobjgpID0+IG44IGluc3RhbmNlb2YgajcpIHx8ICF1dDgodDQudGV4dCwgdDQuYmFzZVBvcykpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCByMyA9IGU1LnNjYW5MaW5lKGU1LmFic29sdXRlTGluZUVuZCArIDEpLnRleHQ7CiAgICByZXR1cm4gUHQ4LnRlc3QocjMpICYmIHY3KGU1LCB0NC50ZXh0LCB0NC5iYXNlUG9zKSA9PSB2NyhlNSwgcjMsIHQ0LmJhc2VQb3MpOwogIH0sIGJlZm9yZTogIlNldGV4dEhlYWRpbmciIH1dIH07CiAgdmFyIHN0NiA9IGNsYXNzIHsKICAgIG5leHRMaW5lKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmaW5pc2godDQsIHM4KSB7CiAgICAgIHJldHVybiB0NC5hZGRMZWFmRWxlbWVudChzOCwgdDQuZWx0KCJUYXNrIiwgczguc3RhcnQsIHM4LnN0YXJ0ICsgczguY29udGVudC5sZW5ndGgsIFt0NC5lbHQoIlRhc2tNYXJrZXIiLCBzOC5zdGFydCwgczguc3RhcnQgKyAzKSwgLi4udDQucGFyc2VyLnBhcnNlSW5saW5lKHM4LmNvbnRlbnQuc2xpY2UoMyksIHM4LnN0YXJ0ICsgMyldKSksIHRydWU7CiAgICB9CiAgfTsKICB2YXIgVnQ3ID0geyBkZWZpbmVOb2RlczogW3sgbmFtZTogIlRhc2siLCBibG9jazogdHJ1ZSwgc3R5bGU6IG41Lmxpc3QgfSwgeyBuYW1lOiAiVGFza01hcmtlciIsIHN0eWxlOiBuNS5hdG9tIH1dLCBwYXJzZUJsb2NrOiBbeyBuYW1lOiAiVGFza0xpc3QiLCBsZWFmKGU1LCB0NCkgewogICAgcmV0dXJuIC9eXFtbIHhYXVxdLy50ZXN0KHQ0LmNvbnRlbnQpICYmIGU1LnBhcmVudFR5cGUoKS5uYW1lID09ICJMaXN0SXRlbSIgPyBuZXcgc3Q2KCkgOiBudWxsOwogIH0sIGFmdGVyOiAiU2V0ZXh0SGVhZGluZyIgfV0gfTsKICB2YXIgdGU5ID0gW0d0MiwgVnQ3LCBadDNdOwogIGZ1bmN0aW9uIE50MyhlNSwgdDQsIHM4KSB7CiAgICByZXR1cm4gKHIzLCBuOCwgaTQpID0+IHsKICAgICAgaWYgKG44ICE9IGU1IHx8IHIzLmNoYXIoaTQgKyAxKSA9PSBlNSkKICAgICAgICByZXR1cm4gLTE7CiAgICAgIGxldCBvNCA9IFtyMy5lbHQoczgsIGk0LCBpNCArIDEpXTsKICAgICAgZm9yIChsZXQgYTQgPSBpNCArIDE7IGE0IDwgcjMuZW5kOyBhNCsrKSB7CiAgICAgICAgbGV0IGw3ID0gcjMuY2hhcihhNCk7CiAgICAgICAgaWYgKGw3ID09IGU1KQogICAgICAgICAgcmV0dXJuIHIzLmFkZEVsZW1lbnQocjMuZWx0KHQ0LCBpNCwgYTQgKyAxLCBvNC5jb25jYXQocjMuZWx0KHM4LCBhNCwgYTQgKyAxKSkpKTsKICAgICAgICBpZiAobDcgPT0gOTIgJiYgbzQucHVzaChyMy5lbHQoIkVzY2FwZSIsIGE0LCBhNCsrICsgMikpLCBTMTAobDcpKQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfTsKICB9CiAgdmFyIGVlOSA9IHsgZGVmaW5lTm9kZXM6IFt7IG5hbWU6ICJTdXBlcnNjcmlwdCIsIHN0eWxlOiBuNS5zcGVjaWFsKG41LmNvbnRlbnQpIH0sIHsgbmFtZTogIlN1cGVyc2NyaXB0TWFyayIsIHN0eWxlOiBuNS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gfV0sIHBhcnNlSW5saW5lOiBbeyBuYW1lOiAiU3VwZXJzY3JpcHQiLCBwYXJzZTogTnQzKDk0LCAiU3VwZXJzY3JpcHQiLCAiU3VwZXJzY3JpcHRNYXJrIikgfV0gfTsKICB2YXIgc2UxMCA9IHsgZGVmaW5lTm9kZXM6IFt7IG5hbWU6ICJTdWJzY3JpcHQiLCBzdHlsZTogbjUuc3BlY2lhbChuNS5jb250ZW50KSB9LCB7IG5hbWU6ICJTdWJzY3JpcHRNYXJrIiwgc3R5bGU6IG41LnByb2Nlc3NpbmdJbnN0cnVjdGlvbiB9XSwgcGFyc2VJbmxpbmU6IFt7IG5hbWU6ICJTdWJzY3JpcHQiLCBwYXJzZTogTnQzKDEyNiwgIlN1YnNjcmlwdCIsICJTdWJzY3JpcHRNYXJrIikgfV0gfTsKICB2YXIgcmUxMSA9IHsgZGVmaW5lTm9kZXM6IFt7IG5hbWU6ICJFbW9qaSIsIHN0eWxlOiBuNS5jaGFyYWN0ZXIgfV0sIHBhcnNlSW5saW5lOiBbeyBuYW1lOiAiRW1vamkiLCBwYXJzZShlNSwgdDQsIHM4KSB7CiAgICBsZXQgcjM7CiAgICByZXR1cm4gdDQgIT0gNTggfHwgIShyMyA9IC9eW2EtekEtWl8wLTldKzovLmV4ZWMoZTUuc2xpY2UoczggKyAxLCBlNS5lbmQpKSkgPyAtMSA6IGU1LmFkZEVsZW1lbnQoZTUuZWx0KCJFbW9qaSIsIHM4LCBzOCArIDEgKyByM1swXS5sZW5ndGgpKTsKICB9IH1dIH07CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L2NyZWx0QDEuMC41L1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzL2Rlbm8vY3JlbHQuanMKICBmdW5jdGlvbiBzMigpIHsKICAgIHZhciByMyA9IGFyZ3VtZW50c1swXTsKICAgIHR5cGVvZiByMyA9PSAic3RyaW5nIiAmJiAocjMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHIzKSk7CiAgICB2YXIgZTUgPSAxLCB0NCA9IGFyZ3VtZW50c1sxXTsKICAgIGlmICh0NCAmJiB0eXBlb2YgdDQgPT0gIm9iamVjdCIgJiYgdDQubm9kZVR5cGUgPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh0NCkpIHsKICAgICAgZm9yICh2YXIgbjggaW4gdDQpCiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0NCwgbjgpKSB7CiAgICAgICAgICB2YXIgbzQgPSB0NFtuOF07CiAgICAgICAgICB0eXBlb2YgbzQgPT0gInN0cmluZyIgPyByMy5zZXRBdHRyaWJ1dGUobjgsIG80KSA6IG80ICE9IG51bGwgJiYgKHIzW244XSA9IG80KTsKICAgICAgICB9CiAgICAgIGU1Kys7CiAgICB9CiAgICBmb3IgKDsgZTUgPCBhcmd1bWVudHMubGVuZ3RoOyBlNSsrKQogICAgICBmNShyMywgYXJndW1lbnRzW2U1XSk7CiAgICByZXR1cm4gcjM7CiAgfQogIGZ1bmN0aW9uIGY1KHIzLCBlNSkgewogICAgaWYgKHR5cGVvZiBlNSA9PSAic3RyaW5nIikKICAgICAgcjMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZTUpKTsKICAgIGVsc2UgaWYgKGU1ICE9IG51bGwpCiAgICAgIGlmIChlNS5ub2RlVHlwZSAhPSBudWxsKQogICAgICAgIHIzLmFwcGVuZENoaWxkKGU1KTsKICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlNSkpCiAgICAgICAgZm9yICh2YXIgdDQgPSAwOyB0NCA8IGU1Lmxlbmd0aDsgdDQrKykKICAgICAgICAgIGY1KHIzLCBlNVt0NF0pOwogICAgICBlbHNlCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlVuc3VwcG9ydGVkIGNoaWxkIG5vZGU6ICIgKyBlNSk7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AY29kZW1pcnJvci9zZWFyY2hANi4yLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjMvZGVuby9zZWFyY2guanMKICB2YXIgdGUxMCA9IHR5cGVvZiBTdHJpbmcucHJvdG90eXBlLm5vcm1hbGl6ZSA9PSAiZnVuY3Rpb24iID8gKG44KSA9PiBuOC5ub3JtYWxpemUoIk5GS0QiKSA6IChuOCkgPT4gbjg7CiAgdmFyIE0xMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgcjMgPSAwLCBpNCA9IGU1Lmxlbmd0aCwgczgsIGw3KSB7CiAgICAgIHRoaXMudGVzdCA9IGw3LCB0aGlzLnZhbHVlID0geyBmcm9tOiAwLCB0bzogMCB9LCB0aGlzLmRvbmUgPSBmYWxzZSwgdGhpcy5tYXRjaGVzID0gW10sIHRoaXMuYnVmZmVyID0gIiIsIHRoaXMuYnVmZmVyUG9zID0gMCwgdGhpcy5pdGVyID0gZTUuaXRlclJhbmdlKHIzLCBpNCksIHRoaXMuYnVmZmVyU3RhcnQgPSByMywgdGhpcy5ub3JtYWxpemUgPSBzOCA/IChvNCkgPT4gczgodGUxMChvNCkpIDogdGUxMCwgdGhpcy5xdWVyeSA9IHRoaXMubm9ybWFsaXplKHQ0KTsKICAgIH0KICAgIHBlZWsoKSB7CiAgICAgIGlmICh0aGlzLmJ1ZmZlclBvcyA9PSB0aGlzLmJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICBpZiAodGhpcy5idWZmZXJTdGFydCArPSB0aGlzLmJ1ZmZlci5sZW5ndGgsIHRoaXMuaXRlci5uZXh0KCksIHRoaXMuaXRlci5kb25lKQogICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIHRoaXMuYnVmZmVyUG9zID0gMCwgdGhpcy5idWZmZXIgPSB0aGlzLml0ZXIudmFsdWU7CiAgICAgIH0KICAgICAgcmV0dXJuIG9lKHRoaXMuYnVmZmVyLCB0aGlzLmJ1ZmZlclBvcyk7CiAgICB9CiAgICBuZXh0KCkgewogICAgICBmb3IgKDsgdGhpcy5tYXRjaGVzLmxlbmd0aDsgKQogICAgICAgIHRoaXMubWF0Y2hlcy5wb3AoKTsKICAgICAgcmV0dXJuIHRoaXMubmV4dE92ZXJsYXBwaW5nKCk7CiAgICB9CiAgICBuZXh0T3ZlcmxhcHBpbmcoKSB7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGxldCBlNSA9IHRoaXMucGVlaygpOwogICAgICAgIGlmIChlNSA8IDApCiAgICAgICAgICByZXR1cm4gdGhpcy5kb25lID0gdHJ1ZSwgdGhpczsKICAgICAgICBsZXQgdDQgPSBydChlNSksIHIzID0gdGhpcy5idWZmZXJTdGFydCArIHRoaXMuYnVmZmVyUG9zOwogICAgICAgIHRoaXMuYnVmZmVyUG9zICs9IGJlMihlNSk7CiAgICAgICAgbGV0IGk0ID0gdGhpcy5ub3JtYWxpemUodDQpOwogICAgICAgIGZvciAobGV0IHM4ID0gMCwgbDcgPSByMzsgOyBzOCsrKSB7CiAgICAgICAgICBsZXQgbzQgPSBpNC5jaGFyQ29kZUF0KHM4KSwgYzE3ID0gdGhpcy5tYXRjaChvNCwgbDcpOwogICAgICAgICAgaWYgKGMxNykKICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPSBjMTcsIHRoaXM7CiAgICAgICAgICBpZiAoczggPT0gaTQubGVuZ3RoIC0gMSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBsNyA9PSByMyAmJiBzOCA8IHQ0Lmxlbmd0aCAmJiB0NC5jaGFyQ29kZUF0KHM4KSA9PSBvNCAmJiBsNysrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgbWF0Y2goZTUsIHQ0KSB7CiAgICAgIGxldCByMyA9IG51bGw7CiAgICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCB0aGlzLm1hdGNoZXMubGVuZ3RoOyBpNCArPSAyKSB7CiAgICAgICAgbGV0IHM4ID0gdGhpcy5tYXRjaGVzW2k0XSwgbDcgPSBmYWxzZTsKICAgICAgICB0aGlzLnF1ZXJ5LmNoYXJDb2RlQXQoczgpID09IGU1ICYmIChzOCA9PSB0aGlzLnF1ZXJ5Lmxlbmd0aCAtIDEgPyByMyA9IHsgZnJvbTogdGhpcy5tYXRjaGVzW2k0ICsgMV0sIHRvOiB0NCArIDEgfSA6ICh0aGlzLm1hdGNoZXNbaTRdKyssIGw3ID0gdHJ1ZSkpLCBsNyB8fCAodGhpcy5tYXRjaGVzLnNwbGljZShpNCwgMiksIGk0IC09IDIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5LmNoYXJDb2RlQXQoMCkgPT0gZTUgJiYgKHRoaXMucXVlcnkubGVuZ3RoID09IDEgPyByMyA9IHsgZnJvbTogdDQsIHRvOiB0NCArIDEgfSA6IHRoaXMubWF0Y2hlcy5wdXNoKDEsIHQ0KSksIHIzICYmIHRoaXMudGVzdCAmJiAhdGhpcy50ZXN0KHIzLmZyb20sIHIzLnRvLCB0aGlzLmJ1ZmZlciwgdGhpcy5idWZmZXJQb3MpICYmIChyMyA9IG51bGwpLCByMzsKICAgIH0KICB9OwogIHR5cGVvZiBTeW1ib2wgPCAidSIgJiYgKE0xMy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSk7CiAgdmFyIHVlMTEgPSB7IGZyb206IC0xLCB0bzogLTEsIG1hdGNoOiAvLiovLmV4ZWMoIiIpIH07CiAgdmFyIFUxMyA9ICJnbSIgKyAoL3gvLnVuaWNvZGUgPT0gbnVsbCA/ICIiIDogInUiKTsKICB2YXIgRTYgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIHIzLCBpNCA9IDAsIHM4ID0gZTUubGVuZ3RoKSB7CiAgICAgIGlmICh0aGlzLnRleHQgPSBlNSwgdGhpcy50byA9IHM4LCB0aGlzLmN1ckxpbmUgPSAiIiwgdGhpcy5kb25lID0gZmFsc2UsIHRoaXMudmFsdWUgPSB1ZTExLCAvXFxbc1dEbnJdfFxufFxyfFxbXF4vLnRlc3QodDQpKQogICAgICAgIHJldHVybiBuZXcgUDE1KGU1LCB0NCwgcjMsIGk0LCBzOCk7CiAgICAgIHRoaXMucmUgPSBuZXcgUmVnRXhwKHQ0LCBVMTMgKyAocjM/Lmlnbm9yZUNhc2UgPyAiaSIgOiAiIikpLCB0aGlzLnRlc3QgPSByMz8udGVzdCwgdGhpcy5pdGVyID0gZTUuaXRlcigpOwogICAgICBsZXQgbDcgPSBlNS5saW5lQXQoaTQpOwogICAgICB0aGlzLmN1ckxpbmVTdGFydCA9IGw3LmZyb20sIHRoaXMubWF0Y2hQb3MgPSBxOShlNSwgaTQpLCB0aGlzLmdldExpbmUodGhpcy5jdXJMaW5lU3RhcnQpOwogICAgfQogICAgZ2V0TGluZShlNSkgewogICAgICB0aGlzLml0ZXIubmV4dChlNSksIHRoaXMuaXRlci5saW5lQnJlYWsgPyB0aGlzLmN1ckxpbmUgPSAiIiA6ICh0aGlzLmN1ckxpbmUgPSB0aGlzLml0ZXIudmFsdWUsIHRoaXMuY3VyTGluZVN0YXJ0ICsgdGhpcy5jdXJMaW5lLmxlbmd0aCA+IHRoaXMudG8gJiYgKHRoaXMuY3VyTGluZSA9IHRoaXMuY3VyTGluZS5zbGljZSgwLCB0aGlzLnRvIC0gdGhpcy5jdXJMaW5lU3RhcnQpKSwgdGhpcy5pdGVyLm5leHQoKSk7CiAgICB9CiAgICBuZXh0TGluZSgpIHsKICAgICAgdGhpcy5jdXJMaW5lU3RhcnQgPSB0aGlzLmN1ckxpbmVTdGFydCArIHRoaXMuY3VyTGluZS5sZW5ndGggKyAxLCB0aGlzLmN1ckxpbmVTdGFydCA+IHRoaXMudG8gPyB0aGlzLmN1ckxpbmUgPSAiIiA6IHRoaXMuZ2V0TGluZSgwKTsKICAgIH0KICAgIG5leHQoKSB7CiAgICAgIGZvciAobGV0IGU1ID0gdGhpcy5tYXRjaFBvcyAtIHRoaXMuY3VyTGluZVN0YXJ0OyA7ICkgewogICAgICAgIHRoaXMucmUubGFzdEluZGV4ID0gZTU7CiAgICAgICAgbGV0IHQ0ID0gdGhpcy5tYXRjaFBvcyA8PSB0aGlzLnRvICYmIHRoaXMucmUuZXhlYyh0aGlzLmN1ckxpbmUpOwogICAgICAgIGlmICh0NCkgewogICAgICAgICAgbGV0IHIzID0gdGhpcy5jdXJMaW5lU3RhcnQgKyB0NC5pbmRleCwgaTQgPSByMyArIHQ0WzBdLmxlbmd0aDsKICAgICAgICAgIGlmICh0aGlzLm1hdGNoUG9zID0gcTkodGhpcy50ZXh0LCBpNCArIChyMyA9PSBpNCA/IDEgOiAwKSksIHIzID09IHRoaXMuY3VyTGluZS5sZW5ndGggJiYgdGhpcy5uZXh0TGluZSgpLCAocjMgPCBpNCB8fCByMyA+IHRoaXMudmFsdWUudG8pICYmICghdGhpcy50ZXN0IHx8IHRoaXMudGVzdChyMywgaTQsIHQ0KSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlID0geyBmcm9tOiByMywgdG86IGk0LCBtYXRjaDogdDQgfSwgdGhpczsKICAgICAgICAgIGU1ID0gdGhpcy5tYXRjaFBvcyAtIHRoaXMuY3VyTGluZVN0YXJ0OwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJMaW5lU3RhcnQgKyB0aGlzLmN1ckxpbmUubGVuZ3RoIDwgdGhpcy50bykKICAgICAgICAgIHRoaXMubmV4dExpbmUoKSwgZTUgPSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLmRvbmUgPSB0cnVlLCB0aGlzOwogICAgICB9CiAgICB9CiAgfTsKICB2YXIgSDEwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgdmFyIHY4ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0KSB7CiAgICAgIHRoaXMuZnJvbSA9IGU1LCB0aGlzLnRleHQgPSB0NDsKICAgIH0KICAgIGdldCB0bygpIHsKICAgICAgcmV0dXJuIHRoaXMuZnJvbSArIHRoaXMudGV4dC5sZW5ndGg7CiAgICB9CiAgICBzdGF0aWMgZ2V0KGU1LCB0NCwgcjMpIHsKICAgICAgbGV0IGk0ID0gSDEwLmdldChlNSk7CiAgICAgIGlmICghaTQgfHwgaTQuZnJvbSA+PSByMyB8fCBpNC50byA8PSB0NCkgewogICAgICAgIGxldCBvNCA9IG5ldyB2OCh0NCwgZTUuc2xpY2VTdHJpbmcodDQsIHIzKSk7CiAgICAgICAgcmV0dXJuIEgxMC5zZXQoZTUsIG80KSwgbzQ7CiAgICAgIH0KICAgICAgaWYgKGk0LmZyb20gPT0gdDQgJiYgaTQudG8gPT0gcjMpCiAgICAgICAgcmV0dXJuIGk0OwogICAgICBsZXQgeyB0ZXh0OiBzOCwgZnJvbTogbDcgfSA9IGk0OwogICAgICByZXR1cm4gbDcgPiB0NCAmJiAoczggPSBlNS5zbGljZVN0cmluZyh0NCwgbDcpICsgczgsIGw3ID0gdDQpLCBpNC50byA8IHIzICYmIChzOCArPSBlNS5zbGljZVN0cmluZyhpNC50bywgcjMpKSwgSDEwLnNldChlNSwgbmV3IHY4KGw3LCBzOCkpLCBuZXcgdjgodDQsIHM4LnNsaWNlKHQ0IC0gbDcsIHIzIC0gbDcpKTsKICAgIH0KICB9OwogIHZhciBQMTUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIHIzLCBpNCwgczgpIHsKICAgICAgdGhpcy50ZXh0ID0gZTUsIHRoaXMudG8gPSBzOCwgdGhpcy5kb25lID0gZmFsc2UsIHRoaXMudmFsdWUgPSB1ZTExLCB0aGlzLm1hdGNoUG9zID0gcTkoZTUsIGk0KSwgdGhpcy5yZSA9IG5ldyBSZWdFeHAodDQsIFUxMyArIChyMz8uaWdub3JlQ2FzZSA/ICJpIiA6ICIiKSksIHRoaXMudGVzdCA9IHIzPy50ZXN0LCB0aGlzLmZsYXQgPSB2OC5nZXQoZTUsIGk0LCB0aGlzLmNodW5rRW5kKGk0ICsgNWUzKSk7CiAgICB9CiAgICBjaHVua0VuZChlNSkgewogICAgICByZXR1cm4gZTUgPj0gdGhpcy50byA/IHRoaXMudG8gOiB0aGlzLnRleHQubGluZUF0KGU1KS50bzsKICAgIH0KICAgIG5leHQoKSB7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGxldCBlNSA9IHRoaXMucmUubGFzdEluZGV4ID0gdGhpcy5tYXRjaFBvcyAtIHRoaXMuZmxhdC5mcm9tLCB0NCA9IHRoaXMucmUuZXhlYyh0aGlzLmZsYXQudGV4dCk7CiAgICAgICAgaWYgKHQ0ICYmICF0NFswXSAmJiB0NC5pbmRleCA9PSBlNSAmJiAodGhpcy5yZS5sYXN0SW5kZXggPSBlNSArIDEsIHQ0ID0gdGhpcy5yZS5leGVjKHRoaXMuZmxhdC50ZXh0KSksIHQ0KSB7CiAgICAgICAgICBsZXQgcjMgPSB0aGlzLmZsYXQuZnJvbSArIHQ0LmluZGV4LCBpNCA9IHIzICsgdDRbMF0ubGVuZ3RoOwogICAgICAgICAgaWYgKCh0aGlzLmZsYXQudG8gPj0gdGhpcy50byB8fCB0NC5pbmRleCArIHQ0WzBdLmxlbmd0aCA8PSB0aGlzLmZsYXQudGV4dC5sZW5ndGggLSAxMCkgJiYgKCF0aGlzLnRlc3QgfHwgdGhpcy50ZXN0KHIzLCBpNCwgdDQpKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPSB7IGZyb206IHIzLCB0bzogaTQsIG1hdGNoOiB0NCB9LCB0aGlzLm1hdGNoUG9zID0gcTkodGhpcy50ZXh0LCBpNCArIChyMyA9PSBpNCA/IDEgOiAwKSksIHRoaXM7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmZsYXQudG8gPT0gdGhpcy50bykKICAgICAgICAgIHJldHVybiB0aGlzLmRvbmUgPSB0cnVlLCB0aGlzOwogICAgICAgIHRoaXMuZmxhdCA9IHY4LmdldCh0aGlzLnRleHQsIHRoaXMuZmxhdC5mcm9tLCB0aGlzLmNodW5rRW5kKHRoaXMuZmxhdC5mcm9tICsgdGhpcy5mbGF0LnRleHQubGVuZ3RoICogMikpOwogICAgICB9CiAgICB9CiAgfTsKICB0eXBlb2YgU3ltYm9sIDwgInUiICYmIChFNi5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IFAxNS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSk7CiAgZnVuY3Rpb24gYmU4KG44KSB7CiAgICB0cnkgewogICAgICByZXR1cm4gbmV3IFJlZ0V4cChuOCwgVTEzKSwgdHJ1ZTsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHE5KG44LCBlNSkgewogICAgaWYgKGU1ID49IG44Lmxlbmd0aCkKICAgICAgcmV0dXJuIGU1OwogICAgbGV0IHQ0ID0gbjgubGluZUF0KGU1KSwgcjM7CiAgICBmb3IgKDsgZTUgPCB0NC50byAmJiAocjMgPSB0NC50ZXh0LmNoYXJDb2RlQXQoZTUgLSB0NC5mcm9tKSkgPj0gNTYzMjAgJiYgcjMgPCA1NzM0NDsgKQogICAgICBlNSsrOwogICAgcmV0dXJuIGU1OwogIH0KICBmdW5jdGlvbiBLMTEobjgpIHsKICAgIGxldCBlNSA9IHMyKCJpbnB1dCIsIHsgY2xhc3M6ICJjbS10ZXh0ZmllbGQiLCBuYW1lOiAibGluZSIgfSksIHQ0ID0gczIoImZvcm0iLCB7IGNsYXNzOiAiY20tZ290b0xpbmUiLCBvbmtleWRvd246IChpNCkgPT4gewogICAgICBpNC5rZXlDb2RlID09IDI3ID8gKGk0LnByZXZlbnREZWZhdWx0KCksIG44LmRpc3BhdGNoKHsgZWZmZWN0czogUjEzLm9mKGZhbHNlKSB9KSwgbjguZm9jdXMoKSkgOiBpNC5rZXlDb2RlID09IDEzICYmIChpNC5wcmV2ZW50RGVmYXVsdCgpLCByMygpKTsKICAgIH0sIG9uc3VibWl0OiAoaTQpID0+IHsKICAgICAgaTQucHJldmVudERlZmF1bHQoKSwgcjMoKTsKICAgIH0gfSwgczIoImxhYmVsIiwgbjguc3RhdGUucGhyYXNlKCJHbyB0byBsaW5lIiksICI6ICIsIGU1KSwgIiAiLCBzMigiYnV0dG9uIiwgeyBjbGFzczogImNtLWJ1dHRvbiIsIHR5cGU6ICJzdWJtaXQiIH0sIG44LnN0YXRlLnBocmFzZSgiZ28iKSkpOwogICAgZnVuY3Rpb24gcjMoKSB7CiAgICAgIGxldCBpNCA9IC9eKFsrLV0pPyhcZCspPyg6XGQrKT8oJSk/JC8uZXhlYyhlNS52YWx1ZSk7CiAgICAgIGlmICghaTQpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgeyBzdGF0ZTogczggfSA9IG44LCBsNyA9IHM4LmRvYy5saW5lQXQoczguc2VsZWN0aW9uLm1haW4uaGVhZCksIFssIG80LCBjMTcsIGQxNSwgaDEwXSA9IGk0LCBnMTIgPSBkMTUgPyArZDE1LnNsaWNlKDEpIDogMCwgeDIxID0gYzE3ID8gK2MxNyA6IGw3Lm51bWJlcjsKICAgICAgaWYgKGMxNyAmJiBoMTApIHsKICAgICAgICBsZXQgTjE3ID0geDIxIC8gMTAwOwogICAgICAgIG80ICYmIChOMTcgPSBOMTcgKiAobzQgPT0gIi0iID8gLTEgOiAxKSArIGw3Lm51bWJlciAvIHM4LmRvYy5saW5lcyksIHgyMSA9IE1hdGgucm91bmQoczguZG9jLmxpbmVzICogTjE3KTsKICAgICAgfSBlbHNlCiAgICAgICAgYzE3ICYmIG80ICYmICh4MjEgPSB4MjEgKiAobzQgPT0gIi0iID8gLTEgOiAxKSArIGw3Lm51bWJlcik7CiAgICAgIGxldCBlZTE4ID0gczguZG9jLmxpbmUoTWF0aC5tYXgoMSwgTWF0aC5taW4oczguZG9jLmxpbmVzLCB4MjEpKSk7CiAgICAgIG44LmRpc3BhdGNoKHsgZWZmZWN0czogUjEzLm9mKGZhbHNlKSwgc2VsZWN0aW9uOiBnMi5jdXJzb3IoZWUxOC5mcm9tICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oZzEyLCBlZTE4Lmxlbmd0aCkpKSwgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSksIG44LmZvY3VzKCk7CiAgICB9CiAgICByZXR1cm4geyBkb206IHQ0IH07CiAgfQogIHZhciBSMTMgPSB5LmRlZmluZSgpOwogIHZhciBuZTggPSBKMi5kZWZpbmUoeyBjcmVhdGUoKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9LCB1cGRhdGUobjgsIGU1KSB7CiAgICBmb3IgKGxldCB0NCBvZiBlNS5lZmZlY3RzKQogICAgICB0NC5pcyhSMTMpICYmIChuOCA9IHQ0LnZhbHVlKTsKICAgIHJldHVybiBuODsKICB9LCBwcm92aWRlOiAobjgpID0+IG5zLmZyb20objgsIChlNSkgPT4gZTUgPyBLMTEgOiBudWxsKSB9KTsKICB2YXIga2UxMCA9IChuOCkgPT4gewogICAgbGV0IGU1ID0geW8objgsIEsxMSk7CiAgICBpZiAoIWU1KSB7CiAgICAgIGxldCB0NCA9IFtSMTMub2YodHJ1ZSldOwogICAgICBuOC5zdGF0ZS5maWVsZChuZTgsIGZhbHNlKSA9PSBudWxsICYmIHQ0LnB1c2goeS5hcHBlbmRDb25maWcub2YoW25lOCwgQ2UxM10pKSwgbjguZGlzcGF0Y2goeyBlZmZlY3RzOiB0NCB9KSwgZTUgPSB5byhuOCwgSzExKTsKICAgIH0KICAgIHJldHVybiBlNSAmJiBlNS5kb20ucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpLCB0cnVlOwogIH07CiAgdmFyIENlMTMgPSBNMi5iYXNlVGhlbWUoeyAiLmNtLXBhbmVsLmNtLWdvdG9MaW5lIjogeyBwYWRkaW5nOiAiMnB4IDZweCA0cHgiLCAiJiBsYWJlbCI6IHsgZm9udFNpemU6ICI4MCUiIH0gfSB9KTsKICB2YXIgTGU1ID0geyBoaWdobGlnaHRXb3JkQXJvdW5kQ3Vyc29yOiBmYWxzZSwgbWluU2VsZWN0aW9uTGVuZ3RoOiAxLCBtYXhNYXRjaGVzOiAxMDAsIHdob2xlV29yZHM6IGZhbHNlIH07CiAgdmFyIGZlNyA9IEEyLmRlZmluZSh7IGNvbWJpbmUobjgpIHsKICAgIHJldHVybiBodChuOCwgTGU1LCB7IGhpZ2hsaWdodFdvcmRBcm91bmRDdXJzb3I6IChlNSwgdDQpID0+IGU1IHx8IHQ0LCBtaW5TZWxlY3Rpb25MZW5ndGg6IE1hdGgubWluLCBtYXhNYXRjaGVzOiBNYXRoLm1pbiB9KTsKICB9IH0pOwogIHZhciBXZTYgPSBrLm1hcmsoeyBjbGFzczogImNtLXNlbGVjdGlvbk1hdGNoIiB9KTsKICB2YXIgQWUxMiA9IGsubWFyayh7IGNsYXNzOiAiY20tc2VsZWN0aW9uTWF0Y2ggY20tc2VsZWN0aW9uTWF0Y2gtbWFpbiIgfSk7CiAgZnVuY3Rpb24gcmUxMihuOCwgZTUsIHQ0LCByMykgewogICAgcmV0dXJuICh0NCA9PSAwIHx8IG44KGU1LnNsaWNlRG9jKHQ0IC0gMSwgdDQpKSAhPSBGLldvcmQpICYmIChyMyA9PSBlNS5kb2MubGVuZ3RoIHx8IG44KGU1LnNsaWNlRG9jKHIzLCByMyArIDEpKSAhPSBGLldvcmQpOwogIH0KICBmdW5jdGlvbiBGZTgobjgsIGU1LCB0NCwgcjMpIHsKICAgIHJldHVybiBuOChlNS5zbGljZURvYyh0NCwgdDQgKyAxKSkgPT0gRi5Xb3JkICYmIG44KGU1LnNsaWNlRG9jKHIzIC0gMSwgcjMpKSA9PSBGLldvcmQ7CiAgfQogIHZhciB3ZTcgPSBWNC5mcm9tQ2xhc3MoY2xhc3MgewogICAgY29uc3RydWN0b3IobjgpIHsKICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuZ2V0RGVjbyhuOCk7CiAgICB9CiAgICB1cGRhdGUobjgpIHsKICAgICAgKG44LnNlbGVjdGlvblNldCB8fCBuOC5kb2NDaGFuZ2VkIHx8IG44LnZpZXdwb3J0Q2hhbmdlZCkgJiYgKHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmdldERlY28objgudmlldykpOwogICAgfQogICAgZ2V0RGVjbyhuOCkgewogICAgICBsZXQgZTUgPSBuOC5zdGF0ZS5mYWNldChmZTcpLCB7IHN0YXRlOiB0NCB9ID0gbjgsIHIzID0gdDQuc2VsZWN0aW9uOwogICAgICBpZiAocjMucmFuZ2VzLmxlbmd0aCA+IDEpCiAgICAgICAgcmV0dXJuIGsubm9uZTsKICAgICAgbGV0IGk0ID0gcjMubWFpbiwgczgsIGw3ID0gbnVsbDsKICAgICAgaWYgKGk0LmVtcHR5KSB7CiAgICAgICAgaWYgKCFlNS5oaWdobGlnaHRXb3JkQXJvdW5kQ3Vyc29yKQogICAgICAgICAgcmV0dXJuIGsubm9uZTsKICAgICAgICBsZXQgYzE3ID0gdDQud29yZEF0KGk0LmhlYWQpOwogICAgICAgIGlmICghYzE3KQogICAgICAgICAgcmV0dXJuIGsubm9uZTsKICAgICAgICBsNyA9IHQ0LmNoYXJDYXRlZ29yaXplcihpNC5oZWFkKSwgczggPSB0NC5zbGljZURvYyhjMTcuZnJvbSwgYzE3LnRvKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZXQgYzE3ID0gaTQudG8gLSBpNC5mcm9tOwogICAgICAgIGlmIChjMTcgPCBlNS5taW5TZWxlY3Rpb25MZW5ndGggfHwgYzE3ID4gMjAwKQogICAgICAgICAgcmV0dXJuIGsubm9uZTsKICAgICAgICBpZiAoZTUud2hvbGVXb3JkcykgewogICAgICAgICAgaWYgKHM4ID0gdDQuc2xpY2VEb2MoaTQuZnJvbSwgaTQudG8pLCBsNyA9IHQ0LmNoYXJDYXRlZ29yaXplcihpNC5oZWFkKSwgIShyZTEyKGw3LCB0NCwgaTQuZnJvbSwgaTQudG8pICYmIEZlOChsNywgdDQsIGk0LmZyb20sIGk0LnRvKSkpCiAgICAgICAgICAgIHJldHVybiBrLm5vbmU7CiAgICAgICAgfSBlbHNlIGlmIChzOCA9IHQ0LnNsaWNlRG9jKGk0LmZyb20sIGk0LnRvKS50cmltKCksICFzOCkKICAgICAgICAgIHJldHVybiBrLm5vbmU7CiAgICAgIH0KICAgICAgbGV0IG80ID0gW107CiAgICAgIGZvciAobGV0IGMxNyBvZiBuOC52aXNpYmxlUmFuZ2VzKSB7CiAgICAgICAgbGV0IGQxNSA9IG5ldyBNMTModDQuZG9jLCBzOCwgYzE3LmZyb20sIGMxNy50byk7CiAgICAgICAgZm9yICg7ICFkMTUubmV4dCgpLmRvbmU7ICkgewogICAgICAgICAgbGV0IHsgZnJvbTogaDEwLCB0bzogZzEyIH0gPSBkMTUudmFsdWU7CiAgICAgICAgICBpZiAoKCFsNyB8fCByZTEyKGw3LCB0NCwgaDEwLCBnMTIpKSAmJiAoaTQuZW1wdHkgJiYgaDEwIDw9IGk0LmZyb20gJiYgZzEyID49IGk0LnRvID8gbzQucHVzaChBZTEyLnJhbmdlKGgxMCwgZzEyKSkgOiAoaDEwID49IGk0LnRvIHx8IGcxMiA8PSBpNC5mcm9tKSAmJiBvNC5wdXNoKFdlNi5yYW5nZShoMTAsIGcxMikpLCBvNC5sZW5ndGggPiBlNS5tYXhNYXRjaGVzKSkKICAgICAgICAgICAgcmV0dXJuIGsubm9uZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGsuc2V0KG80KTsKICAgIH0KICB9LCB7IGRlY29yYXRpb25zOiAobjgpID0+IG44LmRlY29yYXRpb25zIH0pOwogIHZhciBEZTggPSBNMi5iYXNlVGhlbWUoeyAiLmNtLXNlbGVjdGlvbk1hdGNoIjogeyBiYWNrZ3JvdW5kQ29sb3I6ICIjOTlmZjc3ODAiIH0sICIuY20tc2VhcmNoTWF0Y2ggLmNtLXNlbGVjdGlvbk1hdGNoIjogeyBiYWNrZ3JvdW5kQ29sb3I6ICJ0cmFuc3BhcmVudCIgfSB9KTsKICB2YXIgRWU1ID0gKHsgc3RhdGU6IG44LCBkaXNwYXRjaDogZTUgfSkgPT4gewogICAgbGV0IHsgc2VsZWN0aW9uOiB0NCB9ID0gbjgsIHIzID0gZzIuY3JlYXRlKHQ0LnJhbmdlcy5tYXAoKGk0KSA9PiBuOC53b3JkQXQoaTQuaGVhZCkgfHwgZzIuY3Vyc29yKGk0LmhlYWQpKSwgdDQubWFpbkluZGV4KTsKICAgIHJldHVybiByMy5lcSh0NCkgPyBmYWxzZSA6IChlNShuOC51cGRhdGUoeyBzZWxlY3Rpb246IHIzIH0pKSwgdHJ1ZSk7CiAgfTsKICBmdW5jdGlvbiBQZTEwKG44LCBlNSkgewogICAgbGV0IHsgbWFpbjogdDQsIHJhbmdlczogcjMgfSA9IG44LnNlbGVjdGlvbiwgaTQgPSBuOC53b3JkQXQodDQuaGVhZCksIHM4ID0gaTQgJiYgaTQuZnJvbSA9PSB0NC5mcm9tICYmIGk0LnRvID09IHQ0LnRvOwogICAgZm9yIChsZXQgbDcgPSBmYWxzZSwgbzQgPSBuZXcgTTEzKG44LmRvYywgZTUsIHIzW3IzLmxlbmd0aCAtIDFdLnRvKTsgOyApCiAgICAgIGlmIChvNC5uZXh0KCksIG80LmRvbmUpIHsKICAgICAgICBpZiAobDcpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBvNCA9IG5ldyBNMTMobjguZG9jLCBlNSwgMCwgTWF0aC5tYXgoMCwgcjNbcjMubGVuZ3RoIC0gMV0uZnJvbSAtIDEpKSwgbDcgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChsNyAmJiByMy5zb21lKChjMTcpID0+IGMxNy5mcm9tID09IG80LnZhbHVlLmZyb20pKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgaWYgKHM4KSB7CiAgICAgICAgICBsZXQgYzE3ID0gbjgud29yZEF0KG80LnZhbHVlLmZyb20pOwogICAgICAgICAgaWYgKCFjMTcgfHwgYzE3LmZyb20gIT0gbzQudmFsdWUuZnJvbSB8fCBjMTcudG8gIT0gbzQudmFsdWUudG8pCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbzQudmFsdWU7CiAgICAgIH0KICB9CiAgdmFyIHFlNSA9ICh7IHN0YXRlOiBuOCwgZGlzcGF0Y2g6IGU1IH0pID0+IHsKICAgIGxldCB7IHJhbmdlczogdDQgfSA9IG44LnNlbGVjdGlvbjsKICAgIGlmICh0NC5zb21lKChzOCkgPT4gczguZnJvbSA9PT0gczgudG8pKQogICAgICByZXR1cm4gRWU1KHsgc3RhdGU6IG44LCBkaXNwYXRjaDogZTUgfSk7CiAgICBsZXQgcjMgPSBuOC5zbGljZURvYyh0NFswXS5mcm9tLCB0NFswXS50byk7CiAgICBpZiAobjguc2VsZWN0aW9uLnJhbmdlcy5zb21lKChzOCkgPT4gbjguc2xpY2VEb2MoczguZnJvbSwgczgudG8pICE9IHIzKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IGk0ID0gUGUxMChuOCwgcjMpOwogICAgcmV0dXJuIGk0ID8gKGU1KG44LnVwZGF0ZSh7IHNlbGVjdGlvbjogbjguc2VsZWN0aW9uLmFkZFJhbmdlKGcyLnJhbmdlKGk0LmZyb20sIGk0LnRvKSwgZmFsc2UpLCBlZmZlY3RzOiBNMi5zY3JvbGxJbnRvVmlldyhpNC50bykgfSkpLCB0cnVlKSA6IGZhbHNlOwogIH07CiAgdmFyIEIxMiA9IEEyLmRlZmluZSh7IGNvbWJpbmUobjgpIHsKICAgIHJldHVybiBodChuOCwgeyB0b3A6IGZhbHNlLCBjYXNlU2Vuc2l0aXZlOiBmYWxzZSwgbGl0ZXJhbDogZmFsc2UsIHdob2xlV29yZDogZmFsc2UsIGNyZWF0ZVBhbmVsOiAoZTUpID0+IG5ldyBqOChlNSkgfSk7CiAgfSB9KTsKICB2YXIgSTE1ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUpIHsKICAgICAgdGhpcy5zZWFyY2ggPSBlNS5zZWFyY2gsIHRoaXMuY2FzZVNlbnNpdGl2ZSA9ICEhZTUuY2FzZVNlbnNpdGl2ZSwgdGhpcy5saXRlcmFsID0gISFlNS5saXRlcmFsLCB0aGlzLnJlZ2V4cCA9ICEhZTUucmVnZXhwLCB0aGlzLnJlcGxhY2UgPSBlNS5yZXBsYWNlIHx8ICIiLCB0aGlzLnZhbGlkID0gISF0aGlzLnNlYXJjaCAmJiAoIXRoaXMucmVnZXhwIHx8IGJlOCh0aGlzLnNlYXJjaCkpLCB0aGlzLnVucXVvdGVkID0gdGhpcy5saXRlcmFsID8gdGhpcy5zZWFyY2ggOiB0aGlzLnNlYXJjaC5yZXBsYWNlKC9cXChbbnJ0XFxdKS9nLCAodDQsIHIzKSA9PiByMyA9PSAibiIgPyBgCmAgOiByMyA9PSAiciIgPyAiXHIiIDogcjMgPT0gInQiID8gIgkiIDogIlxcIiksIHRoaXMud2hvbGVXb3JkID0gISFlNS53aG9sZVdvcmQ7CiAgICB9CiAgICBlcShlNSkgewogICAgICByZXR1cm4gdGhpcy5zZWFyY2ggPT0gZTUuc2VhcmNoICYmIHRoaXMucmVwbGFjZSA9PSBlNS5yZXBsYWNlICYmIHRoaXMuY2FzZVNlbnNpdGl2ZSA9PSBlNS5jYXNlU2Vuc2l0aXZlICYmIHRoaXMucmVnZXhwID09IGU1LnJlZ2V4cCAmJiB0aGlzLndob2xlV29yZCA9PSBlNS53aG9sZVdvcmQ7CiAgICB9CiAgICBjcmVhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLnJlZ2V4cCA/IG5ldyBROCh0aGlzKSA6IG5ldyBHOSh0aGlzKTsKICAgIH0KICAgIGdldEN1cnNvcihlNSwgdDQgPSAwLCByMykgewogICAgICBsZXQgaTQgPSBlNS5kb2MgPyBlNSA6IHcuY3JlYXRlKHsgZG9jOiBlNSB9KTsKICAgICAgcmV0dXJuIHIzID09IG51bGwgJiYgKHIzID0gaTQuZG9jLmxlbmd0aCksIHRoaXMucmVnZXhwID8gazcodGhpcywgaTQsIHQ0LCByMykgOiBiMTIodGhpcywgaTQsIHQ0LCByMyk7CiAgICB9CiAgfTsKICB2YXIgTzggPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSkgewogICAgICB0aGlzLnNwZWMgPSBlNTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGIxMihuOCwgZTUsIHQ0LCByMykgewogICAgcmV0dXJuIG5ldyBNMTMoZTUuZG9jLCBuOC51bnF1b3RlZCwgdDQsIHIzLCBuOC5jYXNlU2Vuc2l0aXZlID8gdm9pZCAwIDogKGk0KSA9PiBpNC50b0xvd2VyQ2FzZSgpLCBuOC53aG9sZVdvcmQgPyBSZTEwKGU1LmRvYywgZTUuY2hhckNhdGVnb3JpemVyKGU1LnNlbGVjdGlvbi5tYWluLmhlYWQpKSA6IHZvaWQgMCk7CiAgfQogIGZ1bmN0aW9uIFJlMTAobjgsIGU1KSB7CiAgICByZXR1cm4gKHQ0LCByMywgaTQsIHM4KSA9PiAoKHM4ID4gdDQgfHwgczggKyBpNC5sZW5ndGggPCByMykgJiYgKHM4ID0gTWF0aC5tYXgoMCwgdDQgLSAyKSwgaTQgPSBuOC5zbGljZVN0cmluZyhzOCwgTWF0aC5taW4objgubGVuZ3RoLCByMyArIDIpKSksIChlNSgkMTMoaTQsIHQ0IC0gczgpKSAhPSBGLldvcmQgfHwgZTUoVDE1KGk0LCB0NCAtIHM4KSkgIT0gRi5Xb3JkKSAmJiAoZTUoVDE1KGk0LCByMyAtIHM4KSkgIT0gRi5Xb3JkIHx8IGU1KCQxMyhpNCwgcjMgLSBzOCkpICE9IEYuV29yZCkpOwogIH0KICB2YXIgRzkgPSBjbGFzcyBleHRlbmRzIE84IHsKICAgIGNvbnN0cnVjdG9yKGU1KSB7CiAgICAgIHN1cGVyKGU1KTsKICAgIH0KICAgIG5leHRNYXRjaChlNSwgdDQsIHIzKSB7CiAgICAgIGxldCBpNCA9IGIxMih0aGlzLnNwZWMsIGU1LCByMywgZTUuZG9jLmxlbmd0aCkubmV4dE92ZXJsYXBwaW5nKCk7CiAgICAgIHJldHVybiBpNC5kb25lICYmIChpNCA9IGIxMih0aGlzLnNwZWMsIGU1LCAwLCB0NCkubmV4dE92ZXJsYXBwaW5nKCkpLCBpNC5kb25lID8gbnVsbCA6IGk0LnZhbHVlOwogICAgfQogICAgcHJldk1hdGNoSW5SYW5nZShlNSwgdDQsIHIzKSB7CiAgICAgIGZvciAobGV0IGk0ID0gcjM7IDsgKSB7CiAgICAgICAgbGV0IHM4ID0gTWF0aC5tYXgodDQsIGk0IC0gMWU0IC0gdGhpcy5zcGVjLnVucXVvdGVkLmxlbmd0aCksIGw3ID0gYjEyKHRoaXMuc3BlYywgZTUsIHM4LCBpNCksIG80ID0gbnVsbDsKICAgICAgICBmb3IgKDsgIWw3Lm5leHRPdmVybGFwcGluZygpLmRvbmU7ICkKICAgICAgICAgIG80ID0gbDcudmFsdWU7CiAgICAgICAgaWYgKG80KQogICAgICAgICAgcmV0dXJuIG80OwogICAgICAgIGlmIChzOCA9PSB0NCkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIGk0IC09IDFlNDsKICAgICAgfQogICAgfQogICAgcHJldk1hdGNoKGU1LCB0NCwgcjMpIHsKICAgICAgcmV0dXJuIHRoaXMucHJldk1hdGNoSW5SYW5nZShlNSwgMCwgdDQpIHx8IHRoaXMucHJldk1hdGNoSW5SYW5nZShlNSwgcjMsIGU1LmRvYy5sZW5ndGgpOwogICAgfQogICAgZ2V0UmVwbGFjZW1lbnQoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMuc3BlYy5yZXBsYWNlOwogICAgfQogICAgbWF0Y2hBbGwoZTUsIHQ0KSB7CiAgICAgIGxldCByMyA9IGIxMih0aGlzLnNwZWMsIGU1LCAwLCBlNS5kb2MubGVuZ3RoKSwgaTQgPSBbXTsKICAgICAgZm9yICg7ICFyMy5uZXh0KCkuZG9uZTsgKSB7CiAgICAgICAgaWYgKGk0Lmxlbmd0aCA+PSB0NCkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIGk0LnB1c2gocjMudmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiBpNDsKICAgIH0KICAgIGhpZ2hsaWdodChlNSwgdDQsIHIzLCBpNCkgewogICAgICBsZXQgczggPSBiMTIodGhpcy5zcGVjLCBlNSwgTWF0aC5tYXgoMCwgdDQgLSB0aGlzLnNwZWMudW5xdW90ZWQubGVuZ3RoKSwgTWF0aC5taW4ocjMgKyB0aGlzLnNwZWMudW5xdW90ZWQubGVuZ3RoLCBlNS5kb2MubGVuZ3RoKSk7CiAgICAgIGZvciAoOyAhczgubmV4dCgpLmRvbmU7ICkKICAgICAgICBpNChzOC52YWx1ZS5mcm9tLCBzOC52YWx1ZS50byk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBrNyhuOCwgZTUsIHQ0LCByMykgewogICAgcmV0dXJuIG5ldyBFNihlNS5kb2MsIG44LnNlYXJjaCwgeyBpZ25vcmVDYXNlOiAhbjguY2FzZVNlbnNpdGl2ZSwgdGVzdDogbjgud2hvbGVXb3JkID8gSWU3KGU1LmNoYXJDYXRlZ29yaXplcihlNS5zZWxlY3Rpb24ubWFpbi5oZWFkKSkgOiB2b2lkIDAgfSwgdDQsIHIzKTsKICB9CiAgZnVuY3Rpb24gJDEzKG44LCBlNSkgewogICAgcmV0dXJuIG44LnNsaWNlKGllMihuOCwgZTUsIGZhbHNlKSwgZTUpOwogIH0KICBmdW5jdGlvbiBUMTUobjgsIGU1KSB7CiAgICByZXR1cm4gbjguc2xpY2UoZTUsIGllMihuOCwgZTUpKTsKICB9CiAgZnVuY3Rpb24gSWU3KG44KSB7CiAgICByZXR1cm4gKGU1LCB0NCwgcjMpID0+ICFyM1swXS5sZW5ndGggfHwgKG44KCQxMyhyMy5pbnB1dCwgcjMuaW5kZXgpKSAhPSBGLldvcmQgfHwgbjgoVDE1KHIzLmlucHV0LCByMy5pbmRleCkpICE9IEYuV29yZCkgJiYgKG44KFQxNShyMy5pbnB1dCwgcjMuaW5kZXggKyByM1swXS5sZW5ndGgpKSAhPSBGLldvcmQgfHwgbjgoJDEzKHIzLmlucHV0LCByMy5pbmRleCArIHIzWzBdLmxlbmd0aCkpICE9IEYuV29yZCk7CiAgfQogIHZhciBROCA9IGNsYXNzIGV4dGVuZHMgTzggewogICAgbmV4dE1hdGNoKGU1LCB0NCwgcjMpIHsKICAgICAgbGV0IGk0ID0gazcodGhpcy5zcGVjLCBlNSwgcjMsIGU1LmRvYy5sZW5ndGgpLm5leHQoKTsKICAgICAgcmV0dXJuIGk0LmRvbmUgJiYgKGk0ID0gazcodGhpcy5zcGVjLCBlNSwgMCwgdDQpLm5leHQoKSksIGk0LmRvbmUgPyBudWxsIDogaTQudmFsdWU7CiAgICB9CiAgICBwcmV2TWF0Y2hJblJhbmdlKGU1LCB0NCwgcjMpIHsKICAgICAgZm9yIChsZXQgaTQgPSAxOyA7IGk0KyspIHsKICAgICAgICBsZXQgczggPSBNYXRoLm1heCh0NCwgcjMgLSBpNCAqIDFlNCksIGw3ID0gazcodGhpcy5zcGVjLCBlNSwgczgsIHIzKSwgbzQgPSBudWxsOwogICAgICAgIGZvciAoOyAhbDcubmV4dCgpLmRvbmU7ICkKICAgICAgICAgIG80ID0gbDcudmFsdWU7CiAgICAgICAgaWYgKG80ICYmIChzOCA9PSB0NCB8fCBvNC5mcm9tID4gczggKyAxMCkpCiAgICAgICAgICByZXR1cm4gbzQ7CiAgICAgICAgaWYgKHM4ID09IHQ0KQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHByZXZNYXRjaChlNSwgdDQsIHIzKSB7CiAgICAgIHJldHVybiB0aGlzLnByZXZNYXRjaEluUmFuZ2UoZTUsIDAsIHQ0KSB8fCB0aGlzLnByZXZNYXRjaEluUmFuZ2UoZTUsIHIzLCBlNS5kb2MubGVuZ3RoKTsKICAgIH0KICAgIGdldFJlcGxhY2VtZW50KGU1KSB7CiAgICAgIHJldHVybiB0aGlzLnNwZWMucmVwbGFjZS5yZXBsYWNlKC9cJChbJCZcZCtdKS9nLCAodDQsIHIzKSA9PiByMyA9PSAiJCIgPyAiJCIgOiByMyA9PSAiJiIgPyBlNS5tYXRjaFswXSA6IHIzICE9ICIwIiAmJiArcjMgPCBlNS5tYXRjaC5sZW5ndGggPyBlNS5tYXRjaFtyM10gOiB0NCk7CiAgICB9CiAgICBtYXRjaEFsbChlNSwgdDQpIHsKICAgICAgbGV0IHIzID0gazcodGhpcy5zcGVjLCBlNSwgMCwgZTUuZG9jLmxlbmd0aCksIGk0ID0gW107CiAgICAgIGZvciAoOyAhcjMubmV4dCgpLmRvbmU7ICkgewogICAgICAgIGlmIChpNC5sZW5ndGggPj0gdDQpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBpNC5wdXNoKHIzLnZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gaTQ7CiAgICB9CiAgICBoaWdobGlnaHQoZTUsIHQ0LCByMywgaTQpIHsKICAgICAgbGV0IHM4ID0gazcodGhpcy5zcGVjLCBlNSwgTWF0aC5tYXgoMCwgdDQgLSAyNTApLCBNYXRoLm1pbihyMyArIDI1MCwgZTUuZG9jLmxlbmd0aCkpOwogICAgICBmb3IgKDsgIXM4Lm5leHQoKS5kb25lOyApCiAgICAgICAgaTQoczgudmFsdWUuZnJvbSwgczgudmFsdWUudG8pOwogICAgfQogIH07CiAgdmFyIEwxMSA9IHkuZGVmaW5lKCk7CiAgdmFyIFgxMyA9IHkuZGVmaW5lKCk7CiAgdmFyIHA4ID0gSjIuZGVmaW5lKHsgY3JlYXRlKG44KSB7CiAgICByZXR1cm4gbmV3IEM4KF8xNChuOCkuY3JlYXRlKCksIG51bGwpOwogIH0sIHVwZGF0ZShuOCwgZTUpIHsKICAgIGZvciAobGV0IHQ0IG9mIGU1LmVmZmVjdHMpCiAgICAgIHQ0LmlzKEwxMSkgPyBuOCA9IG5ldyBDOCh0NC52YWx1ZS5jcmVhdGUoKSwgbjgucGFuZWwpIDogdDQuaXMoWDEzKSAmJiAobjggPSBuZXcgQzgobjgucXVlcnksIHQ0LnZhbHVlID8gWTE3IDogbnVsbCkpOwogICAgcmV0dXJuIG44OwogIH0sIHByb3ZpZGU6IChuOCkgPT4gbnMuZnJvbShuOCwgKGU1KSA9PiBlNS5wYW5lbCkgfSk7CiAgdmFyIEM4ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0KSB7CiAgICAgIHRoaXMucXVlcnkgPSBlNSwgdGhpcy5wYW5lbCA9IHQ0OwogICAgfQogIH07CiAgdmFyIE9lOCA9IGsubWFyayh7IGNsYXNzOiAiY20tc2VhcmNoTWF0Y2giIH0pOwogIHZhciAkZTcgPSBrLm1hcmsoeyBjbGFzczogImNtLXNlYXJjaE1hdGNoIGNtLXNlYXJjaE1hdGNoLXNlbGVjdGVkIiB9KTsKICB2YXIgVGUxMCA9IFY0LmZyb21DbGFzcyhjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihuOCkgewogICAgICB0aGlzLnZpZXcgPSBuOCwgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuaGlnaGxpZ2h0KG44LnN0YXRlLmZpZWxkKHA4KSk7CiAgICB9CiAgICB1cGRhdGUobjgpIHsKICAgICAgbGV0IGU1ID0gbjguc3RhdGUuZmllbGQocDgpOwogICAgICAoZTUgIT0gbjguc3RhcnRTdGF0ZS5maWVsZChwOCkgfHwgbjguZG9jQ2hhbmdlZCB8fCBuOC5zZWxlY3Rpb25TZXQgfHwgbjgudmlld3BvcnRDaGFuZ2VkKSAmJiAodGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuaGlnaGxpZ2h0KGU1KSk7CiAgICB9CiAgICBoaWdobGlnaHQoeyBxdWVyeTogbjgsIHBhbmVsOiBlNSB9KSB7CiAgICAgIGlmICghZTUgfHwgIW44LnNwZWMudmFsaWQpCiAgICAgICAgcmV0dXJuIGsubm9uZTsKICAgICAgbGV0IHsgdmlldzogdDQgfSA9IHRoaXMsIHIzID0gbmV3IFoyKCk7CiAgICAgIGZvciAobGV0IGk0ID0gMCwgczggPSB0NC52aXNpYmxlUmFuZ2VzLCBsNyA9IHM4Lmxlbmd0aDsgaTQgPCBsNzsgaTQrKykgewogICAgICAgIGxldCB7IGZyb206IG80LCB0bzogYzE3IH0gPSBzOFtpNF07CiAgICAgICAgZm9yICg7IGk0IDwgbDcgLSAxICYmIGMxNyA+IHM4W2k0ICsgMV0uZnJvbSAtIDIgKiAyNTA7ICkKICAgICAgICAgIGMxNyA9IHM4WysraTRdLnRvOwogICAgICAgIG44LmhpZ2hsaWdodCh0NC5zdGF0ZSwgbzQsIGMxNywgKGQxNSwgaDEwKSA9PiB7CiAgICAgICAgICBsZXQgZzEyID0gdDQuc3RhdGUuc2VsZWN0aW9uLnJhbmdlcy5zb21lKCh4MjEpID0+IHgyMS5mcm9tID09IGQxNSAmJiB4MjEudG8gPT0gaDEwKTsKICAgICAgICAgIHIzLmFkZChkMTUsIGgxMCwgZzEyID8gJGU3IDogT2U4KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gcjMuZmluaXNoKCk7CiAgICB9CiAgfSwgeyBkZWNvcmF0aW9uczogKG44KSA9PiBuOC5kZWNvcmF0aW9ucyB9KTsKICBmdW5jdGlvbiBBMTAobjgpIHsKICAgIHJldHVybiAoZTUpID0+IHsKICAgICAgbGV0IHQ0ID0gZTUuc3RhdGUuZmllbGQocDgsIGZhbHNlKTsKICAgICAgcmV0dXJuIHQ0ICYmIHQ0LnF1ZXJ5LnNwZWMudmFsaWQgPyBuOChlNSwgdDQpIDogZGU3KGU1KTsKICAgIH07CiAgfQogIHZhciB6MTQgPSBBMTAoKG44LCB7IHF1ZXJ5OiBlNSB9KSA9PiB7CiAgICBsZXQgeyB0bzogdDQgfSA9IG44LnN0YXRlLnNlbGVjdGlvbi5tYWluLCByMyA9IGU1Lm5leHRNYXRjaChuOC5zdGF0ZSwgdDQsIHQ0KTsKICAgIHJldHVybiByMyA/IChuOC5kaXNwYXRjaCh7IHNlbGVjdGlvbjogeyBhbmNob3I6IHIzLmZyb20sIGhlYWQ6IHIzLnRvIH0sIHNjcm9sbEludG9WaWV3OiB0cnVlLCBlZmZlY3RzOiBaMTAobjgsIHIzKSwgdXNlckV2ZW50OiAic2VsZWN0LnNlYXJjaCIgfSksIHRydWUpIDogZmFsc2U7CiAgfSk7CiAgdmFyIFYxMyA9IEExMCgobjgsIHsgcXVlcnk6IGU1IH0pID0+IHsKICAgIGxldCB7IHN0YXRlOiB0NCB9ID0gbjgsIHsgZnJvbTogcjMgfSA9IHQ0LnNlbGVjdGlvbi5tYWluLCBpNCA9IGU1LnByZXZNYXRjaCh0NCwgcjMsIHIzKTsKICAgIHJldHVybiBpNCA/IChuOC5kaXNwYXRjaCh7IHNlbGVjdGlvbjogeyBhbmNob3I6IGk0LmZyb20sIGhlYWQ6IGk0LnRvIH0sIHNjcm9sbEludG9WaWV3OiB0cnVlLCBlZmZlY3RzOiBaMTAobjgsIGk0KSwgdXNlckV2ZW50OiAic2VsZWN0LnNlYXJjaCIgfSksIHRydWUpIDogZmFsc2U7CiAgfSk7CiAgdmFyIHplNSA9IEExMCgobjgsIHsgcXVlcnk6IGU1IH0pID0+IHsKICAgIGxldCB0NCA9IGU1Lm1hdGNoQWxsKG44LnN0YXRlLCAxZTMpOwogICAgcmV0dXJuICF0NCB8fCAhdDQubGVuZ3RoID8gZmFsc2UgOiAobjguZGlzcGF0Y2goeyBzZWxlY3Rpb246IGcyLmNyZWF0ZSh0NC5tYXAoKHIzKSA9PiBnMi5yYW5nZShyMy5mcm9tLCByMy50bykpKSwgdXNlckV2ZW50OiAic2VsZWN0LnNlYXJjaC5tYXRjaGVzIiB9KSwgdHJ1ZSk7CiAgfSk7CiAgdmFyIFZlNCA9ICh7IHN0YXRlOiBuOCwgZGlzcGF0Y2g6IGU1IH0pID0+IHsKICAgIGxldCB0NCA9IG44LnNlbGVjdGlvbjsKICAgIGlmICh0NC5yYW5nZXMubGVuZ3RoID4gMSB8fCB0NC5tYWluLmVtcHR5KQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgeyBmcm9tOiByMywgdG86IGk0IH0gPSB0NC5tYWluLCBzOCA9IFtdLCBsNyA9IDA7CiAgICBmb3IgKGxldCBvNCA9IG5ldyBNMTMobjguZG9jLCBuOC5zbGljZURvYyhyMywgaTQpKTsgIW80Lm5leHQoKS5kb25lOyApIHsKICAgICAgaWYgKHM4Lmxlbmd0aCA+IDFlMykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIG80LnZhbHVlLmZyb20gPT0gcjMgJiYgKGw3ID0gczgubGVuZ3RoKSwgczgucHVzaChnMi5yYW5nZShvNC52YWx1ZS5mcm9tLCBvNC52YWx1ZS50bykpOwogICAgfQogICAgcmV0dXJuIGU1KG44LnVwZGF0ZSh7IHNlbGVjdGlvbjogZzIuY3JlYXRlKHM4LCBsNyksIHVzZXJFdmVudDogInNlbGVjdC5zZWFyY2gubWF0Y2hlcyIgfSkpLCB0cnVlOwogIH07CiAgdmFyIGllOCA9IEExMCgobjgsIHsgcXVlcnk6IGU1IH0pID0+IHsKICAgIGxldCB7IHN0YXRlOiB0NCB9ID0gbjgsIHsgZnJvbTogcjMsIHRvOiBpNCB9ID0gdDQuc2VsZWN0aW9uLm1haW47CiAgICBpZiAodDQucmVhZE9ubHkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBzOCA9IGU1Lm5leHRNYXRjaCh0NCwgcjMsIHIzKTsKICAgIGlmICghczgpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBsNyA9IFtdLCBvNCwgYzE3LCBkMTUgPSBbXTsKICAgIGlmIChzOC5mcm9tID09IHIzICYmIHM4LnRvID09IGk0ICYmIChjMTcgPSB0NC50b1RleHQoZTUuZ2V0UmVwbGFjZW1lbnQoczgpKSwgbDcucHVzaCh7IGZyb206IHM4LmZyb20sIHRvOiBzOC50bywgaW5zZXJ0OiBjMTcgfSksIHM4ID0gZTUubmV4dE1hdGNoKHQ0LCBzOC5mcm9tLCBzOC50byksIGQxNS5wdXNoKE0yLmFubm91bmNlLm9mKHQ0LnBocmFzZSgicmVwbGFjZWQgbWF0Y2ggb24gbGluZSAkIiwgdDQuZG9jLmxpbmVBdChyMykubnVtYmVyKSArICIuIikpKSwgczgpIHsKICAgICAgbGV0IGgxMCA9IGw3Lmxlbmd0aCA9PSAwIHx8IGw3WzBdLmZyb20gPj0gczgudG8gPyAwIDogczgudG8gLSBzOC5mcm9tIC0gYzE3Lmxlbmd0aDsKICAgICAgbzQgPSB7IGFuY2hvcjogczguZnJvbSAtIGgxMCwgaGVhZDogczgudG8gLSBoMTAgfSwgZDE1LnB1c2goWjEwKG44LCBzOCkpOwogICAgfQogICAgcmV0dXJuIG44LmRpc3BhdGNoKHsgY2hhbmdlczogbDcsIHNlbGVjdGlvbjogbzQsIHNjcm9sbEludG9WaWV3OiAhIW80LCBlZmZlY3RzOiBkMTUsIHVzZXJFdmVudDogImlucHV0LnJlcGxhY2UiIH0pLCB0cnVlOwogIH0pOwogIHZhciBfZTkgPSBBMTAoKG44LCB7IHF1ZXJ5OiBlNSB9KSA9PiB7CiAgICBpZiAobjguc3RhdGUucmVhZE9ubHkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCB0NCA9IGU1Lm1hdGNoQWxsKG44LnN0YXRlLCAxZTkpLm1hcCgoaTQpID0+IHsKICAgICAgbGV0IHsgZnJvbTogczgsIHRvOiBsNyB9ID0gaTQ7CiAgICAgIHJldHVybiB7IGZyb206IHM4LCB0bzogbDcsIGluc2VydDogZTUuZ2V0UmVwbGFjZW1lbnQoaTQpIH07CiAgICB9KTsKICAgIGlmICghdDQubGVuZ3RoKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgcjMgPSBuOC5zdGF0ZS5waHJhc2UoInJlcGxhY2VkICQgbWF0Y2hlcyIsIHQ0Lmxlbmd0aCkgKyAiLiI7CiAgICByZXR1cm4gbjguZGlzcGF0Y2goeyBjaGFuZ2VzOiB0NCwgZWZmZWN0czogTTIuYW5ub3VuY2Uub2YocjMpLCB1c2VyRXZlbnQ6ICJpbnB1dC5yZXBsYWNlLmFsbCIgfSksIHRydWU7CiAgfSk7CiAgZnVuY3Rpb24gWTE3KG44KSB7CiAgICByZXR1cm4gbjguc3RhdGUuZmFjZXQoQjEyKS5jcmVhdGVQYW5lbChuOCk7CiAgfQogIGZ1bmN0aW9uIF8xNChuOCwgZTUpIHsKICAgIHZhciB0NCwgcjMsIGk0LCBzODsKICAgIGxldCBsNyA9IG44LnNlbGVjdGlvbi5tYWluLCBvNCA9IGw3LmVtcHR5IHx8IGw3LnRvID4gbDcuZnJvbSArIDEwMCA/ICIiIDogbjguc2xpY2VEb2MobDcuZnJvbSwgbDcudG8pOwogICAgaWYgKGU1ICYmICFvNCkKICAgICAgcmV0dXJuIGU1OwogICAgbGV0IGMxNyA9IG44LmZhY2V0KEIxMik7CiAgICByZXR1cm4gbmV3IEkxNSh7IHNlYXJjaDogKCh0NCA9IGU1Py5saXRlcmFsKSAhPT0gbnVsbCAmJiB0NCAhPT0gdm9pZCAwID8gdDQgOiBjMTcubGl0ZXJhbCkgPyBvNCA6IG80LnJlcGxhY2UoL1xuL2csICJcXG4iKSwgY2FzZVNlbnNpdGl2ZTogKHIzID0gZTU/LmNhc2VTZW5zaXRpdmUpICE9PSBudWxsICYmIHIzICE9PSB2b2lkIDAgPyByMyA6IGMxNy5jYXNlU2Vuc2l0aXZlLCBsaXRlcmFsOiAoaTQgPSBlNT8ubGl0ZXJhbCkgIT09IG51bGwgJiYgaTQgIT09IHZvaWQgMCA/IGk0IDogYzE3LmxpdGVyYWwsIHdob2xlV29yZDogKHM4ID0gZTU/Lndob2xlV29yZCkgIT09IG51bGwgJiYgczggIT09IHZvaWQgMCA/IHM4IDogYzE3Lndob2xlV29yZCB9KTsKICB9CiAgdmFyIGRlNyA9IChuOCkgPT4gewogICAgbGV0IGU1ID0gbjguc3RhdGUuZmllbGQocDgsIGZhbHNlKTsKICAgIGlmIChlNSAmJiBlNS5wYW5lbCkgewogICAgICBsZXQgdDQgPSB5byhuOCwgWTE3KTsKICAgICAgaWYgKCF0NCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGxldCByMyA9IHQ0LmRvbS5xdWVyeVNlbGVjdG9yKCJbbWFpbi1maWVsZF0iKTsKICAgICAgaWYgKHIzICYmIHIzICE9IG44LnJvb3QuYWN0aXZlRWxlbWVudCkgewogICAgICAgIGxldCBpNCA9IF8xNChuOC5zdGF0ZSwgZTUucXVlcnkuc3BlYyk7CiAgICAgICAgaTQudmFsaWQgJiYgbjguZGlzcGF0Y2goeyBlZmZlY3RzOiBMMTEub2YoaTQpIH0pLCByMy5mb2N1cygpLCByMy5zZWxlY3QoKTsKICAgICAgfQogICAgfSBlbHNlCiAgICAgIG44LmRpc3BhdGNoKHsgZWZmZWN0czogW1gxMy5vZih0cnVlKSwgZTUgPyBMMTEub2YoXzE0KG44LnN0YXRlLCBlNS5xdWVyeS5zcGVjKSkgOiB5LmFwcGVuZENvbmZpZy5vZihKNSldIH0pOwogICAgcmV0dXJuIHRydWU7CiAgfTsKICB2YXIgbWUxMiA9IChuOCkgPT4gewogICAgbGV0IGU1ID0gbjguc3RhdGUuZmllbGQocDgsIGZhbHNlKTsKICAgIGlmICghZTUgfHwgIWU1LnBhbmVsKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgdDQgPSB5byhuOCwgWTE3KTsKICAgIHJldHVybiB0NCAmJiB0NC5kb20uY29udGFpbnMobjgucm9vdC5hY3RpdmVFbGVtZW50KSAmJiBuOC5mb2N1cygpLCBuOC5kaXNwYXRjaCh7IGVmZmVjdHM6IFgxMy5vZihmYWxzZSkgfSksIHRydWU7CiAgfTsKICB2YXIgVWU0ID0gW3sga2V5OiAiTW9kLWYiLCBydW46IGRlNywgc2NvcGU6ICJlZGl0b3Igc2VhcmNoLXBhbmVsIiB9LCB7IGtleTogIkYzIiwgcnVuOiB6MTQsIHNoaWZ0OiBWMTMsIHNjb3BlOiAiZWRpdG9yIHNlYXJjaC1wYW5lbCIsIHByZXZlbnREZWZhdWx0OiB0cnVlIH0sIHsga2V5OiAiTW9kLWciLCBydW46IHoxNCwgc2hpZnQ6IFYxMywgc2NvcGU6ICJlZGl0b3Igc2VhcmNoLXBhbmVsIiwgcHJldmVudERlZmF1bHQ6IHRydWUgfSwgeyBrZXk6ICJFc2NhcGUiLCBydW46IG1lMTIsIHNjb3BlOiAiZWRpdG9yIHNlYXJjaC1wYW5lbCIgfSwgeyBrZXk6ICJNb2QtU2hpZnQtbCIsIHJ1bjogVmU0IH0sIHsga2V5OiAiQWx0LWciLCBydW46IGtlMTAgfSwgeyBrZXk6ICJNb2QtZCIsIHJ1bjogcWU1LCBwcmV2ZW50RGVmYXVsdDogdHJ1ZSB9XTsKICB2YXIgajggPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSkgewogICAgICB0aGlzLnZpZXcgPSBlNTsKICAgICAgbGV0IHQ0ID0gdGhpcy5xdWVyeSA9IGU1LnN0YXRlLmZpZWxkKHA4KS5xdWVyeS5zcGVjOwogICAgICB0aGlzLmNvbW1pdCA9IHRoaXMuY29tbWl0LmJpbmQodGhpcyksIHRoaXMuc2VhcmNoRmllbGQgPSBzMigiaW5wdXQiLCB7IHZhbHVlOiB0NC5zZWFyY2gsIHBsYWNlaG9sZGVyOiB1NShlNSwgIkZpbmQiKSwgImFyaWEtbGFiZWwiOiB1NShlNSwgIkZpbmQiKSwgY2xhc3M6ICJjbS10ZXh0ZmllbGQiLCBuYW1lOiAic2VhcmNoIiwgIm1haW4tZmllbGQiOiAidHJ1ZSIsIG9uY2hhbmdlOiB0aGlzLmNvbW1pdCwgb25rZXl1cDogdGhpcy5jb21taXQgfSksIHRoaXMucmVwbGFjZUZpZWxkID0gczIoImlucHV0IiwgeyB2YWx1ZTogdDQucmVwbGFjZSwgcGxhY2Vob2xkZXI6IHU1KGU1LCAiUmVwbGFjZSIpLCAiYXJpYS1sYWJlbCI6IHU1KGU1LCAiUmVwbGFjZSIpLCBjbGFzczogImNtLXRleHRmaWVsZCIsIG5hbWU6ICJyZXBsYWNlIiwgb25jaGFuZ2U6IHRoaXMuY29tbWl0LCBvbmtleXVwOiB0aGlzLmNvbW1pdCB9KSwgdGhpcy5jYXNlRmllbGQgPSBzMigiaW5wdXQiLCB7IHR5cGU6ICJjaGVja2JveCIsIG5hbWU6ICJjYXNlIiwgY2hlY2tlZDogdDQuY2FzZVNlbnNpdGl2ZSwgb25jaGFuZ2U6IHRoaXMuY29tbWl0IH0pLCB0aGlzLnJlRmllbGQgPSBzMigiaW5wdXQiLCB7IHR5cGU6ICJjaGVja2JveCIsIG5hbWU6ICJyZSIsIGNoZWNrZWQ6IHQ0LnJlZ2V4cCwgb25jaGFuZ2U6IHRoaXMuY29tbWl0IH0pLCB0aGlzLndvcmRGaWVsZCA9IHMyKCJpbnB1dCIsIHsgdHlwZTogImNoZWNrYm94IiwgbmFtZTogIndvcmQiLCBjaGVja2VkOiB0NC53aG9sZVdvcmQsIG9uY2hhbmdlOiB0aGlzLmNvbW1pdCB9KTsKICAgICAgZnVuY3Rpb24gcjMoaTQsIHM4LCBsNykgewogICAgICAgIHJldHVybiBzMigiYnV0dG9uIiwgeyBjbGFzczogImNtLWJ1dHRvbiIsIG5hbWU6IGk0LCBvbmNsaWNrOiBzOCwgdHlwZTogImJ1dHRvbiIgfSwgbDcpOwogICAgICB9CiAgICAgIHRoaXMuZG9tID0gczIoImRpdiIsIHsgb25rZXlkb3duOiAoaTQpID0+IHRoaXMua2V5ZG93bihpNCksIGNsYXNzOiAiY20tc2VhcmNoIiB9LCBbdGhpcy5zZWFyY2hGaWVsZCwgcjMoIm5leHQiLCAoKSA9PiB6MTQoZTUpLCBbdTUoZTUsICJuZXh0IildKSwgcjMoInByZXYiLCAoKSA9PiBWMTMoZTUpLCBbdTUoZTUsICJwcmV2aW91cyIpXSksIHIzKCJzZWxlY3QiLCAoKSA9PiB6ZTUoZTUpLCBbdTUoZTUsICJhbGwiKV0pLCBzMigibGFiZWwiLCBudWxsLCBbdGhpcy5jYXNlRmllbGQsIHU1KGU1LCAibWF0Y2ggY2FzZSIpXSksIHMyKCJsYWJlbCIsIG51bGwsIFt0aGlzLnJlRmllbGQsIHU1KGU1LCAicmVnZXhwIildKSwgczIoImxhYmVsIiwgbnVsbCwgW3RoaXMud29yZEZpZWxkLCB1NShlNSwgImJ5IHdvcmQiKV0pLCAuLi5lNS5zdGF0ZS5yZWFkT25seSA/IFtdIDogW3MyKCJiciIpLCB0aGlzLnJlcGxhY2VGaWVsZCwgcjMoInJlcGxhY2UiLCAoKSA9PiBpZTgoZTUpLCBbdTUoZTUsICJyZXBsYWNlIildKSwgcjMoInJlcGxhY2VBbGwiLCAoKSA9PiBfZTkoZTUpLCBbdTUoZTUsICJyZXBsYWNlIGFsbCIpXSksIHMyKCJidXR0b24iLCB7IG5hbWU6ICJjbG9zZSIsIG9uY2xpY2s6ICgpID0+IG1lMTIoZTUpLCAiYXJpYS1sYWJlbCI6IHU1KGU1LCAiY2xvc2UiKSwgdHlwZTogImJ1dHRvbiIgfSwgWyJceEQ3Il0pXV0pOwogICAgfQogICAgY29tbWl0KCkgewogICAgICBsZXQgZTUgPSBuZXcgSTE1KHsgc2VhcmNoOiB0aGlzLnNlYXJjaEZpZWxkLnZhbHVlLCBjYXNlU2Vuc2l0aXZlOiB0aGlzLmNhc2VGaWVsZC5jaGVja2VkLCByZWdleHA6IHRoaXMucmVGaWVsZC5jaGVja2VkLCB3aG9sZVdvcmQ6IHRoaXMud29yZEZpZWxkLmNoZWNrZWQsIHJlcGxhY2U6IHRoaXMucmVwbGFjZUZpZWxkLnZhbHVlIH0pOwogICAgICBlNS5lcSh0aGlzLnF1ZXJ5KSB8fCAodGhpcy5xdWVyeSA9IGU1LCB0aGlzLnZpZXcuZGlzcGF0Y2goeyBlZmZlY3RzOiBMMTEub2YoZTUpIH0pKTsKICAgIH0KICAgIGtleWRvd24oZTUpIHsKICAgICAgZW8odGhpcy52aWV3LCBlNSwgInNlYXJjaC1wYW5lbCIpID8gZTUucHJldmVudERlZmF1bHQoKSA6IGU1LmtleUNvZGUgPT0gMTMgJiYgZTUudGFyZ2V0ID09IHRoaXMuc2VhcmNoRmllbGQgPyAoZTUucHJldmVudERlZmF1bHQoKSwgKGU1LnNoaWZ0S2V5ID8gVjEzIDogejE0KSh0aGlzLnZpZXcpKSA6IGU1LmtleUNvZGUgPT0gMTMgJiYgZTUudGFyZ2V0ID09IHRoaXMucmVwbGFjZUZpZWxkICYmIChlNS5wcmV2ZW50RGVmYXVsdCgpLCBpZTgodGhpcy52aWV3KSk7CiAgICB9CiAgICB1cGRhdGUoZTUpIHsKICAgICAgZm9yIChsZXQgdDQgb2YgZTUudHJhbnNhY3Rpb25zKQogICAgICAgIGZvciAobGV0IHIzIG9mIHQ0LmVmZmVjdHMpCiAgICAgICAgICByMy5pcyhMMTEpICYmICFyMy52YWx1ZS5lcSh0aGlzLnF1ZXJ5KSAmJiB0aGlzLnNldFF1ZXJ5KHIzLnZhbHVlKTsKICAgIH0KICAgIHNldFF1ZXJ5KGU1KSB7CiAgICAgIHRoaXMucXVlcnkgPSBlNSwgdGhpcy5zZWFyY2hGaWVsZC52YWx1ZSA9IGU1LnNlYXJjaCwgdGhpcy5yZXBsYWNlRmllbGQudmFsdWUgPSBlNS5yZXBsYWNlLCB0aGlzLmNhc2VGaWVsZC5jaGVja2VkID0gZTUuY2FzZVNlbnNpdGl2ZSwgdGhpcy5yZUZpZWxkLmNoZWNrZWQgPSBlNS5yZWdleHAsIHRoaXMud29yZEZpZWxkLmNoZWNrZWQgPSBlNS53aG9sZVdvcmQ7CiAgICB9CiAgICBtb3VudCgpIHsKICAgICAgdGhpcy5zZWFyY2hGaWVsZC5zZWxlY3QoKTsKICAgIH0KICAgIGdldCBwb3MoKSB7CiAgICAgIHJldHVybiA4MDsKICAgIH0KICAgIGdldCB0b3AoKSB7CiAgICAgIHJldHVybiB0aGlzLnZpZXcuc3RhdGUuZmFjZXQoQjEyKS50b3A7CiAgICB9CiAgfTsKICBmdW5jdGlvbiB1NShuOCwgZTUpIHsKICAgIHJldHVybiBuOC5zdGF0ZS5waHJhc2UoZTUpOwogIH0KICB2YXIgRjEyID0gMzA7CiAgdmFyIHcxMyA9IC9bXHNcLiw6Oz8hXS87CiAgZnVuY3Rpb24gWjEwKG44LCB7IGZyb206IGU1LCB0bzogdDQgfSkgewogICAgbGV0IHIzID0gbjguc3RhdGUuZG9jLmxpbmVBdChlNSksIGk0ID0gbjguc3RhdGUuZG9jLmxpbmVBdCh0NCkudG8sIHM4ID0gTWF0aC5tYXgocjMuZnJvbSwgZTUgLSBGMTIpLCBsNyA9IE1hdGgubWluKGk0LCB0NCArIEYxMiksIG80ID0gbjguc3RhdGUuc2xpY2VEb2MoczgsIGw3KTsKICAgIGlmIChzOCAhPSByMy5mcm9tKSB7CiAgICAgIGZvciAobGV0IGMxNyA9IDA7IGMxNyA8IEYxMjsgYzE3KyspCiAgICAgICAgaWYgKCF3MTMudGVzdChvNFtjMTcgKyAxXSkgJiYgdzEzLnRlc3QobzRbYzE3XSkpIHsKICAgICAgICAgIG80ID0gbzQuc2xpY2UoYzE3KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGlmIChsNyAhPSBpNCkgewogICAgICBmb3IgKGxldCBjMTcgPSBvNC5sZW5ndGggLSAxOyBjMTcgPiBvNC5sZW5ndGggLSBGMTI7IGMxNy0tKQogICAgICAgIGlmICghdzEzLnRlc3QobzRbYzE3IC0gMV0pICYmIHcxMy50ZXN0KG80W2MxN10pKSB7CiAgICAgICAgICBvNCA9IG80LnNsaWNlKDAsIGMxNyk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gTTIuYW5ub3VuY2Uub2YoYCR7bjguc3RhdGUucGhyYXNlKCJjdXJyZW50IG1hdGNoIil9LiAke280fSAke244LnN0YXRlLnBocmFzZSgib24gbGluZSIpfSAke3IzLm51bWJlcn0uYCk7CiAgfQogIHZhciBCZTcgPSBNMi5iYXNlVGhlbWUoeyAiLmNtLXBhbmVsLmNtLXNlYXJjaCI6IHsgcGFkZGluZzogIjJweCA2cHggNHB4IiwgcG9zaXRpb246ICJyZWxhdGl2ZSIsICImIFtuYW1lPWNsb3NlXSI6IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHRvcDogIjAiLCByaWdodDogIjRweCIsIGJhY2tncm91bmRDb2xvcjogImluaGVyaXQiLCBib3JkZXI6ICJub25lIiwgZm9udDogImluaGVyaXQiLCBwYWRkaW5nOiAwLCBtYXJnaW46IDAgfSwgIiYgaW5wdXQsICYgYnV0dG9uLCAmIGxhYmVsIjogeyBtYXJnaW46ICIuMmVtIC42ZW0gLjJlbSAwIiB9LCAiJiBpbnB1dFt0eXBlPWNoZWNrYm94XSI6IHsgbWFyZ2luUmlnaHQ6ICIuMmVtIiB9LCAiJiBsYWJlbCI6IHsgZm9udFNpemU6ICI4MCUiLCB3aGl0ZVNwYWNlOiAicHJlIiB9IH0sICImbGlnaHQgLmNtLXNlYXJjaE1hdGNoIjogeyBiYWNrZ3JvdW5kQ29sb3I6ICIjZmZmZjAwNTQiIH0sICImZGFyayAuY20tc2VhcmNoTWF0Y2giOiB7IGJhY2tncm91bmRDb2xvcjogIiMwMGZmZmY4YSIgfSwgIiZsaWdodCAuY20tc2VhcmNoTWF0Y2gtc2VsZWN0ZWQiOiB7IGJhY2tncm91bmRDb2xvcjogIiNmZjZhMDA1NCIgfSwgIiZkYXJrIC5jbS1zZWFyY2hNYXRjaC1zZWxlY3RlZCI6IHsgYmFja2dyb3VuZENvbG9yOiAiI2ZmMDBmZjhhIiB9IH0pOwogIHZhciBKNSA9IFtwOCwgbHQubG93ZXN0KFRlMTApLCBCZTddOwoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9zdHlsZS1tb2RANC4wLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YkhJL2Rlbm8vc3R5bGUtbW9kLmpzCiAgdmFyIFMxMSA9ICJcdTAzN0MiOwogIHZhciB3MTQgPSB0eXBlb2YgU3ltYm9sID4gInUiID8gIl9fIiArIFMxMSA6IFN5bWJvbC5mb3IoUzExKTsKICB2YXIgYzggPSB0eXBlb2YgU3ltYm9sID4gInUiID8gIl9fc3R5bGVTZXQiICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWU4KSA6IFN5bWJvbCgic3R5bGVTZXQiKTsKICB2YXIgYjEzID0gdHlwZW9mIGdsb2JhbFRoaXMgPCAidSIgPyBnbG9iYWxUaGlzIDogdHlwZW9mIGRvY3VtZW50IDwgInUiID8gd2luZG93IDoge307CiAgdmFyIFQxNiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCBsNykgewogICAgICB0aGlzLnJ1bGVzID0gW107CiAgICAgIGxldCB7IGZpbmlzaDogdTExIH0gPSBsNyB8fCB7fTsKICAgICAgZnVuY3Rpb24gbjgodDQpIHsKICAgICAgICByZXR1cm4gL15ALy50ZXN0KHQ0KSA/IFt0NF0gOiB0NC5zcGxpdCgvLFxzKi8pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHM4KHQ0LCBpNCwgaDEwLCB4MjEpIHsKICAgICAgICBsZXQgZDE1ID0gW10sIHIzID0gL15AKFx3KylcYi8uZXhlYyh0NFswXSksIGcxMiA9IHIzICYmIHIzWzFdID09ICJrZXlmcmFtZXMiOwogICAgICAgIGlmIChyMyAmJiBpNCA9PSBudWxsKQogICAgICAgICAgcmV0dXJuIGgxMC5wdXNoKHQ0WzBdICsgIjsiKTsKICAgICAgICBmb3IgKGxldCBhNCBpbiBpNCkgewogICAgICAgICAgbGV0IG80ID0gaTRbYTRdOwogICAgICAgICAgaWYgKC8mLy50ZXN0KGE0KSkKICAgICAgICAgICAgczgoYTQuc3BsaXQoLyxccyovKS5tYXAoKGYxMSkgPT4gdDQubWFwKCh5MTcpID0+IGYxMS5yZXBsYWNlKC8mLywgeTE3KSkpLnJlZHVjZSgoZjExLCB5MTcpID0+IGYxMS5jb25jYXQoeTE3KSksIG80LCBoMTApOwogICAgICAgICAgZWxzZSBpZiAobzQgJiYgdHlwZW9mIG80ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIGlmICghcjMpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5ICgiICsgYTQgKyAiKSBzaG91bGQgYmUgYSBwcmltaXRpdmUgdmFsdWUuIik7CiAgICAgICAgICAgIHM4KG44KGE0KSwgbzQsIGQxNSwgZzEyKTsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICBvNCAhPSBudWxsICYmIGQxNS5wdXNoKGE0LnJlcGxhY2UoL18uKi8sICIiKS5yZXBsYWNlKC9bQS1aXS9nLCAoZjExKSA9PiAiLSIgKyBmMTEudG9Mb3dlckNhc2UoKSkgKyAiOiAiICsgbzQgKyAiOyIpOwogICAgICAgIH0KICAgICAgICAoZDE1Lmxlbmd0aCB8fCBnMTIpICYmIGgxMC5wdXNoKCh1MTEgJiYgIXIzICYmICF4MjEgPyB0NC5tYXAodTExKSA6IHQ0KS5qb2luKCIsICIpICsgIiB7IiArIGQxNS5qb2luKCIgIikgKyAifSIpOwogICAgICB9CiAgICAgIGZvciAobGV0IHQ0IGluIGU1KQogICAgICAgIHM4KG44KHQ0KSwgZTVbdDRdLCB0aGlzLnJ1bGVzKTsKICAgIH0KICAgIGdldFJ1bGVzKCkgewogICAgICByZXR1cm4gdGhpcy5ydWxlcy5qb2luKGAKYCk7CiAgICB9CiAgICBzdGF0aWMgbmV3TmFtZSgpIHsKICAgICAgbGV0IGU1ID0gYjEzW3cxNF0gfHwgMTsKICAgICAgcmV0dXJuIGIxM1t3MTRdID0gZTUgKyAxLCBTMTEgKyBlNS50b1N0cmluZygzNik7CiAgICB9CiAgICBzdGF0aWMgbW91bnQoZTUsIGw3KSB7CiAgICAgIChlNVtjOF0gfHwgbmV3IG0xMyhlNSkpLm1vdW50KEFycmF5LmlzQXJyYXkobDcpID8gbDcgOiBbbDddKTsKICAgIH0KICB9OwogIHZhciBwOSA9IG51bGw7CiAgdmFyIG0xMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1KSB7CiAgICAgIGlmICghZTUuaGVhZCAmJiBlNS5hZG9wdGVkU3R5bGVTaGVldHMgJiYgdHlwZW9mIENTU1N0eWxlU2hlZXQgPCAidSIpIHsKICAgICAgICBpZiAocDkpCiAgICAgICAgICByZXR1cm4gZTUuYWRvcHRlZFN0eWxlU2hlZXRzID0gW3A5LnNoZWV0XS5jb25jYXQoZTUuYWRvcHRlZFN0eWxlU2hlZXRzKSwgZTVbYzhdID0gcDk7CiAgICAgICAgdGhpcy5zaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCksIGU1LmFkb3B0ZWRTdHlsZVNoZWV0cyA9IFt0aGlzLnNoZWV0XS5jb25jYXQoZTUuYWRvcHRlZFN0eWxlU2hlZXRzKSwgcDkgPSB0aGlzOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc3R5bGVUYWcgPSAoZTUub3duZXJEb2N1bWVudCB8fCBlNSkuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICBsZXQgbDcgPSBlNS5oZWFkIHx8IGU1OwogICAgICAgIGw3Lmluc2VydEJlZm9yZSh0aGlzLnN0eWxlVGFnLCBsNy5maXJzdENoaWxkKTsKICAgICAgfQogICAgICB0aGlzLm1vZHVsZXMgPSBbXSwgZTVbYzhdID0gdGhpczsKICAgIH0KICAgIG1vdW50KGU1KSB7CiAgICAgIGxldCBsNyA9IHRoaXMuc2hlZXQsIHUxMSA9IDAsIG44ID0gMDsKICAgICAgZm9yIChsZXQgczggPSAwOyBzOCA8IGU1Lmxlbmd0aDsgczgrKykgewogICAgICAgIGxldCB0NCA9IGU1W3M4XSwgaTQgPSB0aGlzLm1vZHVsZXMuaW5kZXhPZih0NCk7CiAgICAgICAgaWYgKGk0IDwgbjggJiYgaTQgPiAtMSAmJiAodGhpcy5tb2R1bGVzLnNwbGljZShpNCwgMSksIG44LS0sIGk0ID0gLTEpLCBpNCA9PSAtMSkgewogICAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5zcGxpY2UobjgrKywgMCwgdDQpLCBsNykKICAgICAgICAgICAgZm9yIChsZXQgaDEwID0gMDsgaDEwIDwgdDQucnVsZXMubGVuZ3RoOyBoMTArKykKICAgICAgICAgICAgICBsNy5pbnNlcnRSdWxlKHQ0LnJ1bGVzW2gxMF0sIHUxMSsrKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yICg7IG44IDwgaTQ7ICkKICAgICAgICAgICAgdTExICs9IHRoaXMubW9kdWxlc1tuOCsrXS5ydWxlcy5sZW5ndGg7CiAgICAgICAgICB1MTEgKz0gdDQucnVsZXMubGVuZ3RoLCBuOCsrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWw3KSB7CiAgICAgICAgbGV0IHM4ID0gIiI7CiAgICAgICAgZm9yIChsZXQgdDQgPSAwOyB0NCA8IHRoaXMubW9kdWxlcy5sZW5ndGg7IHQ0KyspCiAgICAgICAgICBzOCArPSB0aGlzLm1vZHVsZXNbdDRdLmdldFJ1bGVzKCkgKyBgCmA7CiAgICAgICAgdGhpcy5zdHlsZVRhZy50ZXh0Q29udGVudCA9IHM4OwogICAgICB9CiAgICB9CiAgfTsKCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvbGFuZ3VhZ2VANi4yLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YkhJL2Rlbm8vbGFuZ3VhZ2UuanMKICB2YXIgWTE4OwogIHZhciBUMTcgPSBuZXcgdzMoKTsKICBmdW5jdGlvbiB2dDYobjgpIHsKICAgIHJldHVybiBBMi5kZWZpbmUoeyBjb21iaW5lOiBuOCA/ICh0NCkgPT4gdDQuY29uY2F0KG44KSA6IHZvaWQgMCB9KTsKICB9CiAgdmFyIGM5ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1LCByMyA9IFtdKSB7CiAgICAgIHRoaXMuZGF0YSA9IHQ0LCB3LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgidHJlZSIpIHx8IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LnByb3RvdHlwZSwgInRyZWUiLCB7IGdldCgpIHsKICAgICAgICByZXR1cm4gbTE0KHRoaXMpOwogICAgICB9IH0pLCB0aGlzLnBhcnNlciA9IGU1LCB0aGlzLmV4dGVuc2lvbiA9IFtQMTYub2YodGhpcyksIHcubGFuZ3VhZ2VEYXRhLm9mKChpNCwgczgsIG80KSA9PiBpNC5mYWNldCh1dDkoaTQsIHM4LCBvNCkpKV0uY29uY2F0KHIzKTsKICAgIH0KICAgIGlzQWN0aXZlQXQodDQsIGU1LCByMyA9IC0xKSB7CiAgICAgIHJldHVybiB1dDkodDQsIGU1LCByMykgPT0gdGhpcy5kYXRhOwogICAgfQogICAgZmluZFJlZ2lvbnModDQpIHsKICAgICAgbGV0IGU1ID0gdDQuZmFjZXQoUDE2KTsKICAgICAgaWYgKGU1Py5kYXRhID09IHRoaXMuZGF0YSkKICAgICAgICByZXR1cm4gW3sgZnJvbTogMCwgdG86IHQ0LmRvYy5sZW5ndGggfV07CiAgICAgIGlmICghZTUgfHwgIWU1LmFsbG93c05lc3RpbmcpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICBsZXQgcjMgPSBbXSwgaTQgPSAoczgsIG80KSA9PiB7CiAgICAgICAgaWYgKHM4LnByb3AoVDE3KSA9PSB0aGlzLmRhdGEpIHsKICAgICAgICAgIHIzLnB1c2goeyBmcm9tOiBvNCwgdG86IG80ICsgczgubGVuZ3RoIH0pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgbDcgPSBzOC5wcm9wKHczLm1vdW50ZWQpOwogICAgICAgIGlmIChsNykgewogICAgICAgICAgaWYgKGw3LnRyZWUucHJvcChUMTcpID09IHRoaXMuZGF0YSkgewogICAgICAgICAgICBpZiAobDcub3ZlcmxheSkKICAgICAgICAgICAgICBmb3IgKGxldCBhNCBvZiBsNy5vdmVybGF5KQogICAgICAgICAgICAgICAgcjMucHVzaCh7IGZyb206IGE0LmZyb20gKyBvNCwgdG86IGE0LnRvICsgbzQgfSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICByMy5wdXNoKHsgZnJvbTogbzQsIHRvOiBvNCArIHM4Lmxlbmd0aCB9KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIGlmIChsNy5vdmVybGF5KSB7CiAgICAgICAgICAgIGxldCBhNCA9IHIzLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGk0KGw3LnRyZWUsIGw3Lm92ZXJsYXlbMF0uZnJvbSArIG80KSwgcjMubGVuZ3RoID4gYTQpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBhNCA9IDA7IGE0IDwgczguY2hpbGRyZW4ubGVuZ3RoOyBhNCsrKSB7CiAgICAgICAgICBsZXQgaDEwID0gczguY2hpbGRyZW5bYTRdOwogICAgICAgICAgaDEwIGluc3RhbmNlb2YgUDMgJiYgaTQoaDEwLCBzOC5wb3NpdGlvbnNbYTRdICsgbzQpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIGk0KG0xNCh0NCksIDApLCByMzsKICAgIH0KICAgIGdldCBhbGxvd3NOZXN0aW5nKCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9OwogIGM5LnNldFN0YXRlID0geS5kZWZpbmUoKTsKICBmdW5jdGlvbiB1dDkobjgsIHQ0LCBlNSkgewogICAgbGV0IHIzID0gbjguZmFjZXQoUDE2KTsKICAgIGlmICghcjMpCiAgICAgIHJldHVybiBudWxsOwogICAgbGV0IGk0ID0gcjMuZGF0YTsKICAgIGlmIChyMy5hbGxvd3NOZXN0aW5nKQogICAgICBmb3IgKGxldCBzOCA9IG0xNChuOCkudG9wTm9kZTsgczg7IHM4ID0gczguZW50ZXIodDQsIGU1LCBBNC5FeGNsdWRlQnVmZmVycykpCiAgICAgICAgaTQgPSBzOC50eXBlLnByb3AoVDE3KSB8fCBpNDsKICAgIHJldHVybiBpNDsKICB9CiAgdmFyIEIxMyA9IGNsYXNzIGV4dGVuZHMgYzkgewogICAgY29uc3RydWN0b3IodDQsIGU1KSB7CiAgICAgIHN1cGVyKHQ0LCBlNSksIHRoaXMucGFyc2VyID0gZTU7CiAgICB9CiAgICBzdGF0aWMgZGVmaW5lKHQ0KSB7CiAgICAgIGxldCBlNSA9IHZ0Nih0NC5sYW5ndWFnZURhdGEpOwogICAgICByZXR1cm4gbmV3IEIxMyhlNSwgdDQucGFyc2VyLmNvbmZpZ3VyZSh7IHByb3BzOiBbVDE3LmFkZCgocjMpID0+IHIzLmlzVG9wID8gZTUgOiB2b2lkIDApXSB9KSk7CiAgICB9CiAgICBjb25maWd1cmUodDQpIHsKICAgICAgcmV0dXJuIG5ldyBCMTModGhpcy5kYXRhLCB0aGlzLnBhcnNlci5jb25maWd1cmUodDQpKTsKICAgIH0KICAgIGdldCBhbGxvd3NOZXN0aW5nKCkgewogICAgICByZXR1cm4gdGhpcy5wYXJzZXIuaGFzV3JhcHBlcnMoKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIG0xNChuOCkgewogICAgbGV0IHQ0ID0gbjguZmllbGQoYzkuc3RhdGUsIGZhbHNlKTsKICAgIHJldHVybiB0NCA/IHQ0LnRyZWUgOiBQMy5lbXB0eTsKICB9CiAgdmFyIGV0OCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSA9IHQ0Lmxlbmd0aCkgewogICAgICB0aGlzLmRvYyA9IHQ0LCB0aGlzLmxlbmd0aCA9IGU1LCB0aGlzLmN1cnNvclBvcyA9IDAsIHRoaXMuc3RyaW5nID0gIiIsIHRoaXMuY3Vyc29yID0gdDQuaXRlcigpOwogICAgfQogICAgc3luY1RvKHQ0KSB7CiAgICAgIHJldHVybiB0aGlzLnN0cmluZyA9IHRoaXMuY3Vyc29yLm5leHQodDQgLSB0aGlzLmN1cnNvclBvcykudmFsdWUsIHRoaXMuY3Vyc29yUG9zID0gdDQgKyB0aGlzLnN0cmluZy5sZW5ndGgsIHRoaXMuY3Vyc29yUG9zIC0gdGhpcy5zdHJpbmcubGVuZ3RoOwogICAgfQogICAgY2h1bmsodDQpIHsKICAgICAgcmV0dXJuIHRoaXMuc3luY1RvKHQ0KSwgdGhpcy5zdHJpbmc7CiAgICB9CiAgICBnZXQgbGluZUNodW5rcygpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZWFkKHQ0LCBlNSkgewogICAgICBsZXQgcjMgPSB0aGlzLmN1cnNvclBvcyAtIHRoaXMuc3RyaW5nLmxlbmd0aDsKICAgICAgcmV0dXJuIHQ0IDwgcjMgfHwgZTUgPj0gdGhpcy5jdXJzb3JQb3MgPyB0aGlzLmRvYy5zbGljZVN0cmluZyh0NCwgZTUpIDogdGhpcy5zdHJpbmcuc2xpY2UodDQgLSByMywgZTUgLSByMyk7CiAgICB9CiAgfTsKICB2YXIgSTE2ID0gbnVsbDsKICB2YXIgeDkgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIHIzID0gW10sIGk0LCBzOCwgbzQsIGw3LCBhNCkgewogICAgICB0aGlzLnBhcnNlciA9IHQ0LCB0aGlzLnN0YXRlID0gZTUsIHRoaXMuZnJhZ21lbnRzID0gcjMsIHRoaXMudHJlZSA9IGk0LCB0aGlzLnRyZWVMZW4gPSBzOCwgdGhpcy52aWV3cG9ydCA9IG80LCB0aGlzLnNraXBwZWQgPSBsNywgdGhpcy5zY2hlZHVsZU9uID0gYTQsIHRoaXMucGFyc2UgPSBudWxsLCB0aGlzLnRlbXBTa2lwcGVkID0gW107CiAgICB9CiAgICBzdGF0aWMgY3JlYXRlKHQ0LCBlNSwgcjMpIHsKICAgICAgcmV0dXJuIG5ldyB4OSh0NCwgZTUsIFtdLCBQMy5lbXB0eSwgMCwgcjMsIFtdLCBudWxsKTsKICAgIH0KICAgIHN0YXJ0UGFyc2UoKSB7CiAgICAgIHJldHVybiB0aGlzLnBhcnNlci5zdGFydFBhcnNlKG5ldyBldDgodGhpcy5zdGF0ZS5kb2MpLCB0aGlzLmZyYWdtZW50cyk7CiAgICB9CiAgICB3b3JrKHQ0LCBlNSkgewogICAgICByZXR1cm4gZTUgIT0gbnVsbCAmJiBlNSA+PSB0aGlzLnN0YXRlLmRvYy5sZW5ndGggJiYgKGU1ID0gdm9pZCAwKSwgdGhpcy50cmVlICE9IFAzLmVtcHR5ICYmIHRoaXMuaXNEb25lKGU1ID8/IHRoaXMuc3RhdGUuZG9jLmxlbmd0aCkgPyAodGhpcy50YWtlVHJlZSgpLCB0cnVlKSA6IHRoaXMud2l0aENvbnRleHQoKCkgPT4gewogICAgICAgIHZhciByMzsKICAgICAgICBpZiAodHlwZW9mIHQ0ID09ICJudW1iZXIiKSB7CiAgICAgICAgICBsZXQgaTQgPSBEYXRlLm5vdygpICsgdDQ7CiAgICAgICAgICB0NCA9ICgpID0+IERhdGUubm93KCkgPiBpNDsKICAgICAgICB9CiAgICAgICAgZm9yICh0aGlzLnBhcnNlIHx8ICh0aGlzLnBhcnNlID0gdGhpcy5zdGFydFBhcnNlKCkpLCBlNSAhPSBudWxsICYmICh0aGlzLnBhcnNlLnN0b3BwZWRBdCA9PSBudWxsIHx8IHRoaXMucGFyc2Uuc3RvcHBlZEF0ID4gZTUpICYmIGU1IDwgdGhpcy5zdGF0ZS5kb2MubGVuZ3RoICYmIHRoaXMucGFyc2Uuc3RvcEF0KGU1KTsgOyApIHsKICAgICAgICAgIGxldCBpNCA9IHRoaXMucGFyc2UuYWR2YW5jZSgpOwogICAgICAgICAgaWYgKGk0KQogICAgICAgICAgICBpZiAodGhpcy5mcmFnbWVudHMgPSB0aGlzLndpdGhvdXRUZW1wU2tpcHBlZChHNS5hZGRUcmVlKGk0LCB0aGlzLmZyYWdtZW50cywgdGhpcy5wYXJzZS5zdG9wcGVkQXQgIT0gbnVsbCkpLCB0aGlzLnRyZWVMZW4gPSAocjMgPSB0aGlzLnBhcnNlLnN0b3BwZWRBdCkgIT09IG51bGwgJiYgcjMgIT09IHZvaWQgMCA/IHIzIDogdGhpcy5zdGF0ZS5kb2MubGVuZ3RoLCB0aGlzLnRyZWUgPSBpNCwgdGhpcy5wYXJzZSA9IG51bGwsIHRoaXMudHJlZUxlbiA8IChlNSA/PyB0aGlzLnN0YXRlLmRvYy5sZW5ndGgpKQogICAgICAgICAgICAgIHRoaXMucGFyc2UgPSB0aGlzLnN0YXJ0UGFyc2UoKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgaWYgKHQ0KCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGFrZVRyZWUoKSB7CiAgICAgIGxldCB0NCwgZTU7CiAgICAgIHRoaXMucGFyc2UgJiYgKHQ0ID0gdGhpcy5wYXJzZS5wYXJzZWRQb3MpID49IHRoaXMudHJlZUxlbiAmJiAoKHRoaXMucGFyc2Uuc3RvcHBlZEF0ID09IG51bGwgfHwgdGhpcy5wYXJzZS5zdG9wcGVkQXQgPiB0NCkgJiYgdGhpcy5wYXJzZS5zdG9wQXQodDQpLCB0aGlzLndpdGhDb250ZXh0KCgpID0+IHsKICAgICAgICBmb3IgKDsgIShlNSA9IHRoaXMucGFyc2UuYWR2YW5jZSgpKTsgKQogICAgICAgICAgOwogICAgICB9KSwgdGhpcy50cmVlTGVuID0gdDQsIHRoaXMudHJlZSA9IGU1LCB0aGlzLmZyYWdtZW50cyA9IHRoaXMud2l0aG91dFRlbXBTa2lwcGVkKEc1LmFkZFRyZWUodGhpcy50cmVlLCB0aGlzLmZyYWdtZW50cywgdHJ1ZSkpLCB0aGlzLnBhcnNlID0gbnVsbCk7CiAgICB9CiAgICB3aXRoQ29udGV4dCh0NCkgewogICAgICBsZXQgZTUgPSBJMTY7CiAgICAgIEkxNiA9IHRoaXM7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHQ0KCk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgSTE2ID0gZTU7CiAgICAgIH0KICAgIH0KICAgIHdpdGhvdXRUZW1wU2tpcHBlZCh0NCkgewogICAgICBmb3IgKGxldCBlNTsgZTUgPSB0aGlzLnRlbXBTa2lwcGVkLnBvcCgpOyApCiAgICAgICAgdDQgPSBjdDgodDQsIGU1LmZyb20sIGU1LnRvKTsKICAgICAgcmV0dXJuIHQ0OwogICAgfQogICAgY2hhbmdlcyh0NCwgZTUpIHsKICAgICAgbGV0IHsgZnJhZ21lbnRzOiByMywgdHJlZTogaTQsIHRyZWVMZW46IHM4LCB2aWV3cG9ydDogbzQsIHNraXBwZWQ6IGw3IH0gPSB0aGlzOwogICAgICBpZiAodGhpcy50YWtlVHJlZSgpLCAhdDQuZW1wdHkpIHsKICAgICAgICBsZXQgYTQgPSBbXTsKICAgICAgICBpZiAodDQuaXRlckNoYW5nZWRSYW5nZXMoKGgxMCwgdTExLCBkMTUsIGcxMikgPT4gYTQucHVzaCh7IGZyb21BOiBoMTAsIHRvQTogdTExLCBmcm9tQjogZDE1LCB0b0I6IGcxMiB9KSksIHIzID0gRzUuYXBwbHlDaGFuZ2VzKHIzLCBhNCksIGk0ID0gUDMuZW1wdHksIHM4ID0gMCwgbzQgPSB7IGZyb206IHQ0Lm1hcFBvcyhvNC5mcm9tLCAtMSksIHRvOiB0NC5tYXBQb3MobzQudG8sIDEpIH0sIHRoaXMuc2tpcHBlZC5sZW5ndGgpIHsKICAgICAgICAgIGw3ID0gW107CiAgICAgICAgICBmb3IgKGxldCBoMTAgb2YgdGhpcy5za2lwcGVkKSB7CiAgICAgICAgICAgIGxldCB1MTEgPSB0NC5tYXBQb3MoaDEwLmZyb20sIDEpLCBkMTUgPSB0NC5tYXBQb3MoaDEwLnRvLCAtMSk7CiAgICAgICAgICAgIHUxMSA8IGQxNSAmJiBsNy5wdXNoKHsgZnJvbTogdTExLCB0bzogZDE1IH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbmV3IHg5KHRoaXMucGFyc2VyLCBlNSwgcjMsIGk0LCBzOCwgbzQsIGw3LCB0aGlzLnNjaGVkdWxlT24pOwogICAgfQogICAgdXBkYXRlVmlld3BvcnQodDQpIHsKICAgICAgaWYgKHRoaXMudmlld3BvcnQuZnJvbSA9PSB0NC5mcm9tICYmIHRoaXMudmlld3BvcnQudG8gPT0gdDQudG8pCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB0aGlzLnZpZXdwb3J0ID0gdDQ7CiAgICAgIGxldCBlNSA9IHRoaXMuc2tpcHBlZC5sZW5ndGg7CiAgICAgIGZvciAobGV0IHIzID0gMDsgcjMgPCB0aGlzLnNraXBwZWQubGVuZ3RoOyByMysrKSB7CiAgICAgICAgbGV0IHsgZnJvbTogaTQsIHRvOiBzOCB9ID0gdGhpcy5za2lwcGVkW3IzXTsKICAgICAgICBpNCA8IHQ0LnRvICYmIHM4ID4gdDQuZnJvbSAmJiAodGhpcy5mcmFnbWVudHMgPSBjdDgodGhpcy5mcmFnbWVudHMsIGk0LCBzOCksIHRoaXMuc2tpcHBlZC5zcGxpY2UocjMtLSwgMSkpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnNraXBwZWQubGVuZ3RoID49IGU1ID8gZmFsc2UgOiAodGhpcy5yZXNldCgpLCB0cnVlKTsKICAgIH0KICAgIHJlc2V0KCkgewogICAgICB0aGlzLnBhcnNlICYmICh0aGlzLnRha2VUcmVlKCksIHRoaXMucGFyc2UgPSBudWxsKTsKICAgIH0KICAgIHNraXBVbnRpbEluVmlldyh0NCwgZTUpIHsKICAgICAgdGhpcy5za2lwcGVkLnB1c2goeyBmcm9tOiB0NCwgdG86IGU1IH0pOwogICAgfQogICAgc3RhdGljIGdldFNraXBwaW5nUGFyc2VyKHQ0KSB7CiAgICAgIHJldHVybiBuZXcgY2xhc3MgZXh0ZW5kcyB5ZTUgewogICAgICAgIGNyZWF0ZVBhcnNlKGU1LCByMywgaTQpIHsKICAgICAgICAgIGxldCBzOCA9IGk0WzBdLmZyb20sIG80ID0gaTRbaTQubGVuZ3RoIC0gMV0udG87CiAgICAgICAgICByZXR1cm4geyBwYXJzZWRQb3M6IHM4LCBhZHZhbmNlKCkgewogICAgICAgICAgICBsZXQgYTQgPSBJMTY7CiAgICAgICAgICAgIGlmIChhNCkgewogICAgICAgICAgICAgIGZvciAobGV0IGgxMCBvZiBpNCkKICAgICAgICAgICAgICAgIGE0LnRlbXBTa2lwcGVkLnB1c2goaDEwKTsKICAgICAgICAgICAgICB0NCAmJiAoYTQuc2NoZWR1bGVPbiA9IGE0LnNjaGVkdWxlT24gPyBQcm9taXNlLmFsbChbYTQuc2NoZWR1bGVPbiwgdDRdKSA6IHQ0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZWRQb3MgPSBvNCwgbmV3IFAzKE4zLm5vbmUsIFtdLCBbXSwgbzQgLSBzOCk7CiAgICAgICAgICB9LCBzdG9wcGVkQXQ6IG51bGwsIHN0b3BBdCgpIHsKICAgICAgICAgIH0gfTsKICAgICAgICB9CiAgICAgIH0oKTsKICAgIH0KICAgIGlzRG9uZSh0NCkgewogICAgICB0NCA9IE1hdGgubWluKHQ0LCB0aGlzLnN0YXRlLmRvYy5sZW5ndGgpOwogICAgICBsZXQgZTUgPSB0aGlzLmZyYWdtZW50czsKICAgICAgcmV0dXJuIHRoaXMudHJlZUxlbiA+PSB0NCAmJiBlNS5sZW5ndGggJiYgZTVbMF0uZnJvbSA9PSAwICYmIGU1WzBdLnRvID49IHQ0OwogICAgfQogICAgc3RhdGljIGdldCgpIHsKICAgICAgcmV0dXJuIEkxNjsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGN0OChuOCwgdDQsIGU1KSB7CiAgICByZXR1cm4gRzUuYXBwbHlDaGFuZ2VzKG44LCBbeyBmcm9tQTogdDQsIHRvQTogZTUsIGZyb21COiB0NCwgdG9COiBlNSB9XSk7CiAgfQogIHZhciBTMTIgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICB0aGlzLmNvbnRleHQgPSB0NCwgdGhpcy50cmVlID0gdDQudHJlZTsKICAgIH0KICAgIGFwcGx5KHQ0KSB7CiAgICAgIGlmICghdDQuZG9jQ2hhbmdlZCAmJiB0aGlzLnRyZWUgPT0gdGhpcy5jb250ZXh0LnRyZWUpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIGxldCBlNSA9IHRoaXMuY29udGV4dC5jaGFuZ2VzKHQ0LmNoYW5nZXMsIHQ0LnN0YXRlKSwgcjMgPSB0aGlzLmNvbnRleHQudHJlZUxlbiA9PSB0NC5zdGFydFN0YXRlLmRvYy5sZW5ndGggPyB2b2lkIDAgOiBNYXRoLm1heCh0NC5jaGFuZ2VzLm1hcFBvcyh0aGlzLmNvbnRleHQudHJlZUxlbiksIGU1LnZpZXdwb3J0LnRvKTsKICAgICAgcmV0dXJuIGU1LndvcmsoMjAsIHIzKSB8fCBlNS50YWtlVHJlZSgpLCBuZXcgUzEyKGU1KTsKICAgIH0KICAgIHN0YXRpYyBpbml0KHQ0KSB7CiAgICAgIGxldCBlNSA9IE1hdGgubWluKDNlMywgdDQuZG9jLmxlbmd0aCksIHIzID0geDkuY3JlYXRlKHQ0LmZhY2V0KFAxNikucGFyc2VyLCB0NCwgeyBmcm9tOiAwLCB0bzogZTUgfSk7CiAgICAgIHJldHVybiByMy53b3JrKDIwLCBlNSkgfHwgcjMudGFrZVRyZWUoKSwgbmV3IFMxMihyMyk7CiAgICB9CiAgfTsKICBjOS5zdGF0ZSA9IEoyLmRlZmluZSh7IGNyZWF0ZTogUzEyLmluaXQsIHVwZGF0ZShuOCwgdDQpIHsKICAgIGZvciAobGV0IGU1IG9mIHQ0LmVmZmVjdHMpCiAgICAgIGlmIChlNS5pcyhjOS5zZXRTdGF0ZSkpCiAgICAgICAgcmV0dXJuIGU1LnZhbHVlOwogICAgcmV0dXJuIHQ0LnN0YXJ0U3RhdGUuZmFjZXQoUDE2KSAhPSB0NC5zdGF0ZS5mYWNldChQMTYpID8gUzEyLmluaXQodDQuc3RhdGUpIDogbjguYXBwbHkodDQpOwogIH0gfSk7CiAgdmFyIHh0OSA9IChuOCkgPT4gewogICAgbGV0IHQ0ID0gc2V0VGltZW91dCgoKSA9PiBuOCgpLCA1MDApOwogICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0NCk7CiAgfTsKICB0eXBlb2YgcmVxdWVzdElkbGVDYWxsYmFjayA8ICJ1IiAmJiAoeHQ5ID0gKG44KSA9PiB7CiAgICBsZXQgdDQgPSAtMSwgZTUgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgdDQgPSByZXF1ZXN0SWRsZUNhbGxiYWNrKG44LCB7IHRpbWVvdXQ6IDUwMCAtIDEwMCB9KTsKICAgIH0sIDEwMCk7CiAgICByZXR1cm4gKCkgPT4gdDQgPCAwID8gY2xlYXJUaW1lb3V0KGU1KSA6IGNhbmNlbElkbGVDYWxsYmFjayh0NCk7CiAgfSk7CiAgdmFyIFoxMSA9IHR5cGVvZiBuYXZpZ2F0b3IgPCAidSIgJiYgKChZMTggPSBuYXZpZ2F0b3Iuc2NoZWR1bGluZykgPT09IG51bGwgfHwgWTE4ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBZMTguaXNJbnB1dFBlbmRpbmcpID8gKCkgPT4gbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcoKSA6IG51bGw7CiAgdmFyIFN0NyA9IFY0LmZyb21DbGFzcyhjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICB0aGlzLnZpZXcgPSB0NCwgdGhpcy53b3JraW5nID0gbnVsbCwgdGhpcy53b3JrU2NoZWR1bGVkID0gMCwgdGhpcy5jaHVua0VuZCA9IC0xLCB0aGlzLmNodW5rQnVkZ2V0ID0gLTEsIHRoaXMud29yayA9IHRoaXMud29yay5iaW5kKHRoaXMpLCB0aGlzLnNjaGVkdWxlV29yaygpOwogICAgfQogICAgdXBkYXRlKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMudmlldy5zdGF0ZS5maWVsZChjOS5zdGF0ZSkuY29udGV4dDsKICAgICAgKGU1LnVwZGF0ZVZpZXdwb3J0KHQ0LnZpZXcudmlld3BvcnQpIHx8IHRoaXMudmlldy52aWV3cG9ydC50byA+IGU1LnRyZWVMZW4pICYmIHRoaXMuc2NoZWR1bGVXb3JrKCksIHQ0LmRvY0NoYW5nZWQgJiYgKHRoaXMudmlldy5oYXNGb2N1cyAmJiAodGhpcy5jaHVua0J1ZGdldCArPSA1MCksIHRoaXMuc2NoZWR1bGVXb3JrKCkpLCB0aGlzLmNoZWNrQXN5bmNTY2hlZHVsZShlNSk7CiAgICB9CiAgICBzY2hlZHVsZVdvcmsoKSB7CiAgICAgIGlmICh0aGlzLndvcmtpbmcpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgeyBzdGF0ZTogdDQgfSA9IHRoaXMudmlldywgZTUgPSB0NC5maWVsZChjOS5zdGF0ZSk7CiAgICAgIChlNS50cmVlICE9IGU1LmNvbnRleHQudHJlZSB8fCAhZTUuY29udGV4dC5pc0RvbmUodDQuZG9jLmxlbmd0aCkpICYmICh0aGlzLndvcmtpbmcgPSB4dDkodGhpcy53b3JrKSk7CiAgICB9CiAgICB3b3JrKHQ0KSB7CiAgICAgIHRoaXMud29ya2luZyA9IG51bGw7CiAgICAgIGxldCBlNSA9IERhdGUubm93KCk7CiAgICAgIGlmICh0aGlzLmNodW5rRW5kIDwgZTUgJiYgKHRoaXMuY2h1bmtFbmQgPCAwIHx8IHRoaXMudmlldy5oYXNGb2N1cykgJiYgKHRoaXMuY2h1bmtFbmQgPSBlNSArIDNlNCwgdGhpcy5jaHVua0J1ZGdldCA9IDNlMyksIHRoaXMuY2h1bmtCdWRnZXQgPD0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGxldCB7IHN0YXRlOiByMywgdmlld3BvcnQ6IHsgdG86IGk0IH0gfSA9IHRoaXMudmlldywgczggPSByMy5maWVsZChjOS5zdGF0ZSk7CiAgICAgIGlmIChzOC50cmVlID09IHM4LmNvbnRleHQudHJlZSAmJiBzOC5jb250ZXh0LmlzRG9uZShpNCArIDFlNSkpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgbzQgPSBEYXRlLm5vdygpICsgTWF0aC5taW4odGhpcy5jaHVua0J1ZGdldCwgMTAwLCB0NCAmJiAhWjExID8gTWF0aC5tYXgoMjUsIHQ0LnRpbWVSZW1haW5pbmcoKSAtIDUpIDogMWU5KSwgbDcgPSBzOC5jb250ZXh0LnRyZWVMZW4gPCBpNCAmJiByMy5kb2MubGVuZ3RoID4gaTQgKyAxZTMsIGE0ID0gczguY29udGV4dC53b3JrKCgpID0+IFoxMSAmJiBaMTEoKSB8fCBEYXRlLm5vdygpID4gbzQsIGk0ICsgKGw3ID8gMCA6IDFlNSkpOwogICAgICB0aGlzLmNodW5rQnVkZ2V0IC09IERhdGUubm93KCkgLSBlNSwgKGE0IHx8IHRoaXMuY2h1bmtCdWRnZXQgPD0gMCkgJiYgKHM4LmNvbnRleHQudGFrZVRyZWUoKSwgdGhpcy52aWV3LmRpc3BhdGNoKHsgZWZmZWN0czogYzkuc2V0U3RhdGUub2YobmV3IFMxMihzOC5jb250ZXh0KSkgfSkpLCB0aGlzLmNodW5rQnVkZ2V0ID4gMCAmJiAhKGE0ICYmICFsNykgJiYgdGhpcy5zY2hlZHVsZVdvcmsoKSwgdGhpcy5jaGVja0FzeW5jU2NoZWR1bGUoczguY29udGV4dCk7CiAgICB9CiAgICBjaGVja0FzeW5jU2NoZWR1bGUodDQpIHsKICAgICAgdDQuc2NoZWR1bGVPbiAmJiAodGhpcy53b3JrU2NoZWR1bGVkKyssIHQ0LnNjaGVkdWxlT24udGhlbigoKSA9PiB0aGlzLnNjaGVkdWxlV29yaygpKS5jYXRjaCgoZTUpID0+IG50Mih0aGlzLnZpZXcuc3RhdGUsIGU1KSkudGhlbigoKSA9PiB0aGlzLndvcmtTY2hlZHVsZWQtLSksIHQ0LnNjaGVkdWxlT24gPSBudWxsKTsKICAgIH0KICAgIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMud29ya2luZyAmJiB0aGlzLndvcmtpbmcoKTsKICAgIH0KICAgIGlzV29ya2luZygpIHsKICAgICAgcmV0dXJuICEhKHRoaXMud29ya2luZyB8fCB0aGlzLndvcmtTY2hlZHVsZWQgPiAwKTsKICAgIH0KICB9LCB7IGV2ZW50SGFuZGxlcnM6IHsgZm9jdXMoKSB7CiAgICB0aGlzLnNjaGVkdWxlV29yaygpOwogIH0gfSB9KTsKICB2YXIgUDE2ID0gQTIuZGVmaW5lKHsgY29tYmluZShuOCkgewogICAgcmV0dXJuIG44Lmxlbmd0aCA/IG44WzBdIDogbnVsbDsKICB9LCBlbmFibGVzOiBbYzkuc3RhdGUsIFN0N10gfSk7CiAgdmFyIGR0NiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSA9IFtdKSB7CiAgICAgIHRoaXMubGFuZ3VhZ2UgPSB0NCwgdGhpcy5zdXBwb3J0ID0gZTUsIHRoaXMuZXh0ZW5zaW9uID0gW3Q0LCBlNV07CiAgICB9CiAgfTsKICB2YXIgajkgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIHIzLCBpNCwgczgsIG80ID0gdm9pZCAwKSB7CiAgICAgIHRoaXMubmFtZSA9IHQ0LCB0aGlzLmFsaWFzID0gZTUsIHRoaXMuZXh0ZW5zaW9ucyA9IHIzLCB0aGlzLmZpbGVuYW1lID0gaTQsIHRoaXMubG9hZEZ1bmMgPSBzOCwgdGhpcy5zdXBwb3J0ID0gbzQsIHRoaXMubG9hZGluZyA9IG51bGw7CiAgICB9CiAgICBsb2FkKCkgewogICAgICByZXR1cm4gdGhpcy5sb2FkaW5nIHx8ICh0aGlzLmxvYWRpbmcgPSB0aGlzLmxvYWRGdW5jKCkudGhlbigodDQpID0+IHRoaXMuc3VwcG9ydCA9IHQ0LCAodDQpID0+IHsKICAgICAgICB0aHJvdyB0aGlzLmxvYWRpbmcgPSBudWxsLCB0NDsKICAgICAgfSkpOwogICAgfQogICAgc3RhdGljIG9mKHQ0KSB7CiAgICAgIGxldCB7IGxvYWQ6IGU1LCBzdXBwb3J0OiByMyB9ID0gdDQ7CiAgICAgIGlmICghZTUpIHsKICAgICAgICBpZiAoIXIzKQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk11c3QgcGFzcyBlaXRoZXIgJ2xvYWQnIG9yICdzdXBwb3J0JyB0byBMYW5ndWFnZURlc2NyaXB0aW9uLm9mIik7CiAgICAgICAgZTUgPSAoKSA9PiBQcm9taXNlLnJlc29sdmUocjMpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgajkodDQubmFtZSwgKHQ0LmFsaWFzIHx8IFtdKS5jb25jYXQodDQubmFtZSkubWFwKChpNCkgPT4gaTQudG9Mb3dlckNhc2UoKSksIHQ0LmV4dGVuc2lvbnMgfHwgW10sIHQ0LmZpbGVuYW1lLCBlNSwgcjMpOwogICAgfQogICAgc3RhdGljIG1hdGNoRmlsZW5hbWUodDQsIGU1KSB7CiAgICAgIGZvciAobGV0IGk0IG9mIHQ0KQogICAgICAgIGlmIChpNC5maWxlbmFtZSAmJiBpNC5maWxlbmFtZS50ZXN0KGU1KSkKICAgICAgICAgIHJldHVybiBpNDsKICAgICAgbGV0IHIzID0gL1wuKFteLl0rKSQvLmV4ZWMoZTUpOwogICAgICBpZiAocjMpIHsKICAgICAgICBmb3IgKGxldCBpNCBvZiB0NCkKICAgICAgICAgIGlmIChpNC5leHRlbnNpb25zLmluZGV4T2YocjNbMV0pID4gLTEpCiAgICAgICAgICAgIHJldHVybiBpNDsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHN0YXRpYyBtYXRjaExhbmd1YWdlTmFtZSh0NCwgZTUsIHIzID0gdHJ1ZSkgewogICAgICBlNSA9IGU1LnRvTG93ZXJDYXNlKCk7CiAgICAgIGZvciAobGV0IGk0IG9mIHQ0KQogICAgICAgIGlmIChpNC5hbGlhcy5zb21lKChzOCkgPT4gczggPT0gZTUpKQogICAgICAgICAgcmV0dXJuIGk0OwogICAgICBpZiAocjMpCiAgICAgICAgZm9yIChsZXQgaTQgb2YgdDQpCiAgICAgICAgICBmb3IgKGxldCBzOCBvZiBpNC5hbGlhcykgewogICAgICAgICAgICBsZXQgbzQgPSBlNS5pbmRleE9mKHM4KTsKICAgICAgICAgICAgaWYgKG80ID4gLTEgJiYgKHM4Lmxlbmd0aCA+IDIgfHwgIS9cdy8udGVzdChlNVtvNCAtIDFdKSAmJiAhL1x3Ly50ZXN0KGU1W280ICsgczgubGVuZ3RoXSkpKQogICAgICAgICAgICAgIHJldHVybiBpNDsKICAgICAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfTsKICB2YXIgUHQ5ID0gQTIuZGVmaW5lKCk7CiAgdmFyIEF0OCA9IEEyLmRlZmluZSh7IGNvbWJpbmU6IChuOCkgPT4gewogICAgaWYgKCFuOC5sZW5ndGgpCiAgICAgIHJldHVybiAiICAiOwogICAgaWYgKCEvXig/OiArfFx0KykkLy50ZXN0KG44WzBdKSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGluZGVudCB1bml0OiAiICsgSlNPTi5zdHJpbmdpZnkobjhbMF0pKTsKICAgIHJldHVybiBuOFswXTsKICB9IH0pOwogIGZ1bmN0aW9uICQxNChuOCkgewogICAgbGV0IHQ0ID0gbjguZmFjZXQoQXQ4KTsKICAgIHJldHVybiB0NC5jaGFyQ29kZUF0KDApID09IDkgPyBuOC50YWJTaXplICogdDQubGVuZ3RoIDogdDQubGVuZ3RoOwogIH0KICBmdW5jdGlvbiBDdDcobjgsIHQ0KSB7CiAgICBsZXQgZTUgPSAiIiwgcjMgPSBuOC50YWJTaXplOwogICAgaWYgKG44LmZhY2V0KEF0OCkuY2hhckNvZGVBdCgwKSA9PSA5KQogICAgICBmb3IgKDsgdDQgPj0gcjM7ICkKICAgICAgICBlNSArPSAiCSIsIHQ0IC09IHIzOwogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IHQ0OyBpNCsrKQogICAgICBlNSArPSAiICI7CiAgICByZXR1cm4gZTU7CiAgfQogIGZ1bmN0aW9uIFR0NyhuOCwgdDQpIHsKICAgIG44IGluc3RhbmNlb2YgdyAmJiAobjggPSBuZXcgTTE0KG44KSk7CiAgICBmb3IgKGxldCByMyBvZiBuOC5zdGF0ZS5mYWNldChQdDkpKSB7CiAgICAgIGxldCBpNCA9IHIzKG44LCB0NCk7CiAgICAgIGlmIChpNCAhPSBudWxsKQogICAgICAgIHJldHVybiBpNDsKICAgIH0KICAgIGxldCBlNSA9IG0xNChuOC5zdGF0ZSk7CiAgICByZXR1cm4gZTUgPyBpZTkobjgsIGU1LCB0NCkgOiBudWxsOwogIH0KICB2YXIgTTE0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1ID0ge30pIHsKICAgICAgdGhpcy5zdGF0ZSA9IHQ0LCB0aGlzLm9wdGlvbnMgPSBlNSwgdGhpcy51bml0ID0gJDE0KHQ0KTsKICAgIH0KICAgIGxpbmVBdCh0NCwgZTUgPSAxKSB7CiAgICAgIGxldCByMyA9IHRoaXMuc3RhdGUuZG9jLmxpbmVBdCh0NCksIHsgc2ltdWxhdGVCcmVhazogaTQsIHNpbXVsYXRlRG91YmxlQnJlYWs6IHM4IH0gPSB0aGlzLm9wdGlvbnM7CiAgICAgIHJldHVybiBpNCAhPSBudWxsICYmIGk0ID49IHIzLmZyb20gJiYgaTQgPD0gcjMudG8gPyBzOCAmJiBpNCA9PSB0NCA/IHsgdGV4dDogIiIsIGZyb206IHQ0IH0gOiAoZTUgPCAwID8gaTQgPCB0NCA6IGk0IDw9IHQ0KSA/IHsgdGV4dDogcjMudGV4dC5zbGljZShpNCAtIHIzLmZyb20pLCBmcm9tOiBpNCB9IDogeyB0ZXh0OiByMy50ZXh0LnNsaWNlKDAsIGk0IC0gcjMuZnJvbSksIGZyb206IHIzLmZyb20gfSA6IHIzOwogICAgfQogICAgdGV4dEFmdGVyUG9zKHQ0LCBlNSA9IDEpIHsKICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaW11bGF0ZURvdWJsZUJyZWFrICYmIHQ0ID09IHRoaXMub3B0aW9ucy5zaW11bGF0ZUJyZWFrKQogICAgICAgIHJldHVybiAiIjsKICAgICAgbGV0IHsgdGV4dDogcjMsIGZyb206IGk0IH0gPSB0aGlzLmxpbmVBdCh0NCwgZTUpOwogICAgICByZXR1cm4gcjMuc2xpY2UodDQgLSBpNCwgTWF0aC5taW4ocjMubGVuZ3RoLCB0NCArIDEwMCAtIGk0KSk7CiAgICB9CiAgICBjb2x1bW4odDQsIGU1ID0gMSkgewogICAgICBsZXQgeyB0ZXh0OiByMywgZnJvbTogaTQgfSA9IHRoaXMubGluZUF0KHQ0LCBlNSksIHM4ID0gdGhpcy5jb3VudENvbHVtbihyMywgdDQgLSBpNCksIG80ID0gdGhpcy5vcHRpb25zLm92ZXJyaWRlSW5kZW50YXRpb24gPyB0aGlzLm9wdGlvbnMub3ZlcnJpZGVJbmRlbnRhdGlvbihpNCkgOiAtMTsKICAgICAgcmV0dXJuIG80ID4gLTEgJiYgKHM4ICs9IG80IC0gdGhpcy5jb3VudENvbHVtbihyMywgcjMuc2VhcmNoKC9cU3wkLykpKSwgczg7CiAgICB9CiAgICBjb3VudENvbHVtbih0NCwgZTUgPSB0NC5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG90KHQ0LCB0aGlzLnN0YXRlLnRhYlNpemUsIGU1KTsKICAgIH0KICAgIGxpbmVJbmRlbnQodDQsIGU1ID0gMSkgewogICAgICBsZXQgeyB0ZXh0OiByMywgZnJvbTogaTQgfSA9IHRoaXMubGluZUF0KHQ0LCBlNSksIHM4ID0gdGhpcy5vcHRpb25zLm92ZXJyaWRlSW5kZW50YXRpb247CiAgICAgIGlmIChzOCkgewogICAgICAgIGxldCBvNCA9IHM4KGk0KTsKICAgICAgICBpZiAobzQgPiAtMSkKICAgICAgICAgIHJldHVybiBvNDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5jb3VudENvbHVtbihyMywgcjMuc2VhcmNoKC9cU3wkLykpOwogICAgfQogICAgZ2V0IHNpbXVsYXRlZEJyZWFrKCkgewogICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNpbXVsYXRlQnJlYWsgfHwgbnVsbDsKICAgIH0KICB9OwogIHZhciByZTEzID0gbmV3IHczKCk7CiAgZnVuY3Rpb24gaWU5KG44LCB0NCwgZTUpIHsKICAgIHJldHVybiBEdDcodDQucmVzb2x2ZUlubmVyKGU1KS5lbnRlclVuZmluaXNoZWROb2Rlc0JlZm9yZShlNSksIGU1LCBuOCk7CiAgfQogIGZ1bmN0aW9uIHNlMTEobjgpIHsKICAgIHJldHVybiBuOC5wb3MgPT0gbjgub3B0aW9ucy5zaW11bGF0ZUJyZWFrICYmIG44Lm9wdGlvbnMuc2ltdWxhdGVEb3VibGVCcmVhazsKICB9CiAgZnVuY3Rpb24gb2U2KG44KSB7CiAgICBsZXQgdDQgPSBuOC50eXBlLnByb3AocmUxMyk7CiAgICBpZiAodDQpCiAgICAgIHJldHVybiB0NDsKICAgIGxldCBlNSA9IG44LmZpcnN0Q2hpbGQsIHIzOwogICAgaWYgKGU1ICYmIChyMyA9IGU1LnR5cGUucHJvcCh3My5jbG9zZWRCeSkpKSB7CiAgICAgIGxldCBpNCA9IG44Lmxhc3RDaGlsZCwgczggPSBpNCAmJiByMy5pbmRleE9mKGk0Lm5hbWUpID4gLTE7CiAgICAgIHJldHVybiAobzQpID0+IEl0NyhvNCwgdHJ1ZSwgMSwgdm9pZCAwLCBzOCAmJiAhc2UxMShvNCkgPyBpNC5mcm9tIDogdm9pZCAwKTsKICAgIH0KICAgIHJldHVybiBuOC5wYXJlbnQgPT0gbnVsbCA/IGxlMTAgOiBudWxsOwogIH0KICBmdW5jdGlvbiBEdDcobjgsIHQ0LCBlNSkgewogICAgZm9yICg7IG44OyBuOCA9IG44LnBhcmVudCkgewogICAgICBsZXQgcjMgPSBvZTYobjgpOwogICAgICBpZiAocjMpCiAgICAgICAgcmV0dXJuIHIzKEU3LmNyZWF0ZShlNSwgdDQsIG44KSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gbGUxMCgpIHsKICAgIHJldHVybiAwOwogIH0KICB2YXIgRTcgPSBjbGFzcyBleHRlbmRzIE0xNCB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIHIzKSB7CiAgICAgIHN1cGVyKHQ0LnN0YXRlLCB0NC5vcHRpb25zKSwgdGhpcy5iYXNlID0gdDQsIHRoaXMucG9zID0gZTUsIHRoaXMubm9kZSA9IHIzOwogICAgfQogICAgc3RhdGljIGNyZWF0ZSh0NCwgZTUsIHIzKSB7CiAgICAgIHJldHVybiBuZXcgRTcodDQsIGU1LCByMyk7CiAgICB9CiAgICBnZXQgdGV4dEFmdGVyKCkgewogICAgICByZXR1cm4gdGhpcy50ZXh0QWZ0ZXJQb3ModGhpcy5wb3MpOwogICAgfQogICAgZ2V0IGJhc2VJbmRlbnQoKSB7CiAgICAgIGxldCB0NCA9IHRoaXMuc3RhdGUuZG9jLmxpbmVBdCh0aGlzLm5vZGUuZnJvbSk7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGxldCBlNSA9IHRoaXMubm9kZS5yZXNvbHZlKHQ0LmZyb20pOwogICAgICAgIGZvciAoOyBlNS5wYXJlbnQgJiYgZTUucGFyZW50LmZyb20gPT0gZTUuZnJvbTsgKQogICAgICAgICAgZTUgPSBlNS5wYXJlbnQ7CiAgICAgICAgaWYgKGFlOShlNSwgdGhpcy5ub2RlKSkKICAgICAgICAgIGJyZWFrOwogICAgICAgIHQ0ID0gdGhpcy5zdGF0ZS5kb2MubGluZUF0KGU1LmZyb20pOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmxpbmVJbmRlbnQodDQuZnJvbSk7CiAgICB9CiAgICBjb250aW51ZSgpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5ub2RlLnBhcmVudDsKICAgICAgcmV0dXJuIHQ0ID8gRHQ3KHQ0LCB0aGlzLnBvcywgdGhpcy5iYXNlKSA6IDA7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBhZTkobjgsIHQ0KSB7CiAgICBmb3IgKGxldCBlNSA9IHQ0OyBlNTsgZTUgPSBlNS5wYXJlbnQpCiAgICAgIGlmIChuOCA9PSBlNSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gaGU4KG44KSB7CiAgICBsZXQgdDQgPSBuOC5ub2RlLCBlNSA9IHQ0LmNoaWxkQWZ0ZXIodDQuZnJvbSksIHIzID0gdDQubGFzdENoaWxkOwogICAgaWYgKCFlNSkKICAgICAgcmV0dXJuIG51bGw7CiAgICBsZXQgaTQgPSBuOC5vcHRpb25zLnNpbXVsYXRlQnJlYWssIHM4ID0gbjguc3RhdGUuZG9jLmxpbmVBdChlNS5mcm9tKSwgbzQgPSBpNCA9PSBudWxsIHx8IGk0IDw9IHM4LmZyb20gPyBzOC50byA6IE1hdGgubWluKHM4LnRvLCBpNCk7CiAgICBmb3IgKGxldCBsNyA9IGU1LnRvOyA7ICkgewogICAgICBsZXQgYTQgPSB0NC5jaGlsZEFmdGVyKGw3KTsKICAgICAgaWYgKCFhNCB8fCBhNCA9PSByMykKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgaWYgKCFhNC50eXBlLmlzU2tpcHBlZCkKICAgICAgICByZXR1cm4gYTQuZnJvbSA8IG80ID8gZTUgOiBudWxsOwogICAgICBsNyA9IGE0LnRvOwogICAgfQogIH0KICBmdW5jdGlvbiBLZTQoeyBjbG9zaW5nOiBuOCwgYWxpZ246IHQ0ID0gdHJ1ZSwgdW5pdHM6IGU1ID0gMSB9KSB7CiAgICByZXR1cm4gKHIzKSA9PiBJdDcocjMsIHQ0LCBlNSwgbjgpOwogIH0KICBmdW5jdGlvbiBJdDcobjgsIHQ0LCBlNSwgcjMsIGk0KSB7CiAgICBsZXQgczggPSBuOC50ZXh0QWZ0ZXIsIG80ID0gczgubWF0Y2goL15ccyovKVswXS5sZW5ndGgsIGw3ID0gcjMgJiYgczguc2xpY2UobzQsIG80ICsgcjMubGVuZ3RoKSA9PSByMyB8fCBpNCA9PSBuOC5wb3MgKyBvNCwgYTQgPSB0NCA/IGhlOChuOCkgOiBudWxsOwogICAgcmV0dXJuIGE0ID8gbDcgPyBuOC5jb2x1bW4oYTQuZnJvbSkgOiBuOC5jb2x1bW4oYTQudG8pIDogbjguYmFzZUluZGVudCArIChsNyA/IDAgOiBuOC51bml0ICogZTUpOwogIH0KICB2YXIgX2UxMCA9IChuOCkgPT4gbjguYmFzZUluZGVudDsKICBmdW5jdGlvbiBRZTMoeyBleGNlcHQ6IG44LCB1bml0czogdDQgPSAxIH0gPSB7fSkgewogICAgcmV0dXJuIChlNSkgPT4gewogICAgICBsZXQgcjMgPSBuOCAmJiBuOC50ZXN0KGU1LnRleHRBZnRlcik7CiAgICAgIHJldHVybiBlNS5iYXNlSW5kZW50ICsgKHIzID8gMCA6IHQ0ICogZTUudW5pdCk7CiAgICB9OwogIH0KICB2YXIgZmU4ID0gMjAwOwogIGZ1bmN0aW9uIFhlMygpIHsKICAgIHJldHVybiB3LnRyYW5zYWN0aW9uRmlsdGVyLm9mKChuOCkgPT4gewogICAgICBpZiAoIW44LmRvY0NoYW5nZWQgfHwgIW44LmlzVXNlckV2ZW50KCJpbnB1dC50eXBlIikgJiYgIW44LmlzVXNlckV2ZW50KCJpbnB1dC5jb21wbGV0ZSIpKQogICAgICAgIHJldHVybiBuODsKICAgICAgbGV0IHQ0ID0gbjguc3RhcnRTdGF0ZS5sYW5ndWFnZURhdGFBdCgiaW5kZW50T25JbnB1dCIsIG44LnN0YXJ0U3RhdGUuc2VsZWN0aW9uLm1haW4uaGVhZCk7CiAgICAgIGlmICghdDQubGVuZ3RoKQogICAgICAgIHJldHVybiBuODsKICAgICAgbGV0IGU1ID0gbjgubmV3RG9jLCB7IGhlYWQ6IHIzIH0gPSBuOC5uZXdTZWxlY3Rpb24ubWFpbiwgaTQgPSBlNS5saW5lQXQocjMpOwogICAgICBpZiAocjMgPiBpNC5mcm9tICsgZmU4KQogICAgICAgIHJldHVybiBuODsKICAgICAgbGV0IHM4ID0gZTUuc2xpY2VTdHJpbmcoaTQuZnJvbSwgcjMpOwogICAgICBpZiAoIXQ0LnNvbWUoKGgxMCkgPT4gaDEwLnRlc3QoczgpKSkKICAgICAgICByZXR1cm4gbjg7CiAgICAgIGxldCB7IHN0YXRlOiBvNCB9ID0gbjgsIGw3ID0gLTEsIGE0ID0gW107CiAgICAgIGZvciAobGV0IHsgaGVhZDogaDEwIH0gb2YgbzQuc2VsZWN0aW9uLnJhbmdlcykgewogICAgICAgIGxldCB1MTEgPSBvNC5kb2MubGluZUF0KGgxMCk7CiAgICAgICAgaWYgKHUxMS5mcm9tID09IGw3KQogICAgICAgICAgY29udGludWU7CiAgICAgICAgbDcgPSB1MTEuZnJvbTsKICAgICAgICBsZXQgZDE1ID0gVHQ3KG80LCB1MTEuZnJvbSk7CiAgICAgICAgaWYgKGQxNSA9PSBudWxsKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgbGV0IGcxMiA9IC9eXHMqLy5leGVjKHUxMS50ZXh0KVswXSwgdzIxID0gQ3Q3KG80LCBkMTUpOwogICAgICAgIGcxMiAhPSB3MjEgJiYgYTQucHVzaCh7IGZyb206IHUxMS5mcm9tLCB0bzogdTExLmZyb20gKyBnMTIubGVuZ3RoLCBpbnNlcnQ6IHcyMSB9KTsKICAgICAgfQogICAgICByZXR1cm4gYTQubGVuZ3RoID8gW244LCB7IGNoYW5nZXM6IGE0LCBzZXF1ZW50aWFsOiB0cnVlIH1dIDogbjg7CiAgICB9KTsKICB9CiAgdmFyIHVlMTIgPSBBMi5kZWZpbmUoKTsKICB2YXIgY2UxMCA9IG5ldyB3MygpOwogIGZ1bmN0aW9uIFllNShuOCkgewogICAgbGV0IHQ0ID0gbjguZmlyc3RDaGlsZCwgZTUgPSBuOC5sYXN0Q2hpbGQ7CiAgICByZXR1cm4gdDQgJiYgdDQudG8gPCBlNS5mcm9tID8geyBmcm9tOiB0NC50bywgdG86IGU1LnR5cGUuaXNFcnJvciA/IG44LnRvIDogZTUuZnJvbSB9IDogbnVsbDsKICB9CiAgZnVuY3Rpb24gT3Q4KG44LCB0NCkgewogICAgbGV0IGU1ID0gdDQubWFwUG9zKG44LmZyb20sIDEpLCByMyA9IHQ0Lm1hcFBvcyhuOC50bywgLTEpOwogICAgcmV0dXJuIGU1ID49IHIzID8gdm9pZCAwIDogeyBmcm9tOiBlNSwgdG86IHIzIH07CiAgfQogIHZhciBfMTUgPSB5LmRlZmluZSh7IG1hcDogT3Q4IH0pOwogIHZhciBSMTQgPSB5LmRlZmluZSh7IG1hcDogT3Q4IH0pOwogIHZhciBBMTEgPSBKMi5kZWZpbmUoeyBjcmVhdGUoKSB7CiAgICByZXR1cm4gay5ub25lOwogIH0sIHVwZGF0ZShuOCwgdDQpIHsKICAgIG44ID0gbjgubWFwKHQ0LmNoYW5nZXMpOwogICAgZm9yIChsZXQgZTUgb2YgdDQuZWZmZWN0cykKICAgICAgZTUuaXMoXzE1KSAmJiAhbWUxMyhuOCwgZTUudmFsdWUuZnJvbSwgZTUudmFsdWUudG8pID8gbjggPSBuOC51cGRhdGUoeyBhZGQ6IFtwdDgucmFuZ2UoZTUudmFsdWUuZnJvbSwgZTUudmFsdWUudG8pXSB9KSA6IGU1LmlzKFIxNCkgJiYgKG44ID0gbjgudXBkYXRlKHsgZmlsdGVyOiAocjMsIGk0KSA9PiBlNS52YWx1ZS5mcm9tICE9IHIzIHx8IGU1LnZhbHVlLnRvICE9IGk0LCBmaWx0ZXJGcm9tOiBlNS52YWx1ZS5mcm9tLCBmaWx0ZXJUbzogZTUudmFsdWUudG8gfSkpOwogICAgaWYgKHQ0LnNlbGVjdGlvbikgewogICAgICBsZXQgZTUgPSBmYWxzZSwgeyBoZWFkOiByMyB9ID0gdDQuc2VsZWN0aW9uLm1haW47CiAgICAgIG44LmJldHdlZW4ocjMsIHIzLCAoaTQsIHM4KSA9PiB7CiAgICAgICAgaTQgPCByMyAmJiBzOCA+IHIzICYmIChlNSA9IHRydWUpOwogICAgICB9KSwgZTUgJiYgKG44ID0gbjgudXBkYXRlKHsgZmlsdGVyRnJvbTogcjMsIGZpbHRlclRvOiByMywgZmlsdGVyOiAoaTQsIHM4KSA9PiBzOCA8PSByMyB8fCBpNCA+PSByMyB9KSk7CiAgICB9CiAgICByZXR1cm4gbjg7CiAgfSwgcHJvdmlkZTogKG44KSA9PiBNMi5kZWNvcmF0aW9ucy5mcm9tKG44KSwgdG9KU09OKG44LCB0NCkgewogICAgbGV0IGU1ID0gW107CiAgICByZXR1cm4gbjguYmV0d2VlbigwLCB0NC5kb2MubGVuZ3RoLCAocjMsIGk0KSA9PiB7CiAgICAgIGU1LnB1c2gocjMsIGk0KTsKICAgIH0pLCBlNTsKICB9LCBmcm9tSlNPTihuOCkgewogICAgaWYgKCFBcnJheS5pc0FycmF5KG44KSB8fCBuOC5sZW5ndGggJSAyKQogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBKU09OIGZvciBmb2xkIHN0YXRlIik7CiAgICBsZXQgdDQgPSBbXTsKICAgIGZvciAobGV0IGU1ID0gMDsgZTUgPCBuOC5sZW5ndGg7ICkgewogICAgICBsZXQgcjMgPSBuOFtlNSsrXSwgaTQgPSBuOFtlNSsrXTsKICAgICAgaWYgKHR5cGVvZiByMyAhPSAibnVtYmVyIiB8fCB0eXBlb2YgaTQgIT0gIm51bWJlciIpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgSlNPTiBmb3IgZm9sZCBzdGF0ZSIpOwogICAgICB0NC5wdXNoKHB0OC5yYW5nZShyMywgaTQpKTsKICAgIH0KICAgIHJldHVybiBrLnNldCh0NCwgdHJ1ZSk7CiAgfSB9KTsKICBmdW5jdGlvbiB6MTUobjgsIHQ0LCBlNSkgewogICAgdmFyIHIzOwogICAgbGV0IGk0ID0gbnVsbDsKICAgIHJldHVybiAocjMgPSBuOC5maWVsZChBMTEsIGZhbHNlKSkgPT09IG51bGwgfHwgcjMgPT09IHZvaWQgMCB8fCByMy5iZXR3ZWVuKHQ0LCBlNSwgKHM4LCBvNCkgPT4gewogICAgICAoIWk0IHx8IGk0LmZyb20gPiBzOCkgJiYgKGk0ID0geyBmcm9tOiBzOCwgdG86IG80IH0pOwogICAgfSksIGk0OwogIH0KICBmdW5jdGlvbiBtZTEzKG44LCB0NCwgZTUpIHsKICAgIGxldCByMyA9IGZhbHNlOwogICAgcmV0dXJuIG44LmJldHdlZW4odDQsIHQ0LCAoaTQsIHM4KSA9PiB7CiAgICAgIGk0ID09IHQ0ICYmIHM4ID09IGU1ICYmIChyMyA9IHRydWUpOwogICAgfSksIHIzOwogIH0KICB2YXIgeWUxMSA9IHsgcGxhY2Vob2xkZXJET006IG51bGwsIHBsYWNlaG9sZGVyVGV4dDogIlx1MjAyNiIgfTsKICB2YXIgRXQ3ID0gQTIuZGVmaW5lKHsgY29tYmluZShuOCkgewogICAgcmV0dXJuIGh0KG44LCB5ZTExKTsKICB9IH0pOwogIHZhciBwdDggPSBrLnJlcGxhY2UoeyB3aWRnZXQ6IG5ldyBjbGFzcyBleHRlbmRzIFg0IHsKICAgIHRvRE9NKG44KSB7CiAgICAgIGxldCB7IHN0YXRlOiB0NCB9ID0gbjgsIGU1ID0gdDQuZmFjZXQoRXQ3KSwgcjMgPSAoczgpID0+IHsKICAgICAgICBsZXQgbzQgPSBuOC5saW5lQmxvY2tBdChuOC5wb3NBdERPTShzOC50YXJnZXQpKSwgbDcgPSB6MTUobjguc3RhdGUsIG80LmZyb20sIG80LnRvKTsKICAgICAgICBsNyAmJiBuOC5kaXNwYXRjaCh7IGVmZmVjdHM6IFIxNC5vZihsNykgfSksIHM4LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH07CiAgICAgIGlmIChlNS5wbGFjZWhvbGRlckRPTSkKICAgICAgICByZXR1cm4gZTUucGxhY2Vob2xkZXJET00objgsIHIzKTsKICAgICAgbGV0IGk0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICByZXR1cm4gaTQudGV4dENvbnRlbnQgPSBlNS5wbGFjZWhvbGRlclRleHQsIGk0LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIHQ0LnBocmFzZSgiZm9sZGVkIGNvZGUiKSksIGk0LnRpdGxlID0gdDQucGhyYXNlKCJ1bmZvbGQiKSwgaTQuY2xhc3NOYW1lID0gImNtLWZvbGRQbGFjZWhvbGRlciIsIGk0Lm9uY2xpY2sgPSByMywgaTQ7CiAgICB9CiAgfSgpIH0pOwogIHZhciB4ZTkgPSBNMi5iYXNlVGhlbWUoeyAiLmNtLWZvbGRQbGFjZWhvbGRlciI6IHsgYmFja2dyb3VuZENvbG9yOiAiI2VlZSIsIGJvcmRlcjogIjFweCBzb2xpZCAjZGRkIiwgY29sb3I6ICIjODg4IiwgYm9yZGVyUmFkaXVzOiAiLjJlbSIsIG1hcmdpbjogIjAgMXB4IiwgcGFkZGluZzogIjAgMXB4IiwgY3Vyc29yOiAicG9pbnRlciIgfSwgIi5jbS1mb2xkR3V0dGVyIHNwYW4iOiB7IHBhZGRpbmc6ICIwIDFweCIsIGN1cnNvcjogInBvaW50ZXIiIH0gfSk7CiAgdmFyIEQxMCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSkgewogICAgICBsZXQgcjM7CiAgICAgIGZ1bmN0aW9uIGk0KGw3KSB7CiAgICAgICAgbGV0IGE0ID0gVDE2Lm5ld05hbWUoKTsKICAgICAgICByZXR1cm4gKHIzIHx8IChyMyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpKSlbIi4iICsgYTRdID0gbDcsIGE0OwogICAgICB9CiAgICAgIGxldCBzOCA9IHR5cGVvZiBlNS5hbGwgPT0gInN0cmluZyIgPyBlNS5hbGwgOiBlNS5hbGwgPyBpNChlNS5hbGwpIDogdm9pZCAwLCBvNCA9IGU1LnNjb3BlOwogICAgICB0aGlzLnNjb3BlID0gbzQgaW5zdGFuY2VvZiBjOSA/IChsNykgPT4gbDcucHJvcChUMTcpID09IG80LmRhdGEgOiBvNCA/IChsNykgPT4gbDcgPT0gbzQgOiB2b2lkIDAsIHRoaXMuc3R5bGUgPSBXOCh0NC5tYXAoKGw3KSA9PiAoeyB0YWc6IGw3LnRhZywgY2xhc3M6IGw3LmNsYXNzIHx8IGk0KE9iamVjdC5hc3NpZ24oe30sIGw3LCB7IHRhZzogbnVsbCB9KSkgfSkpLCB7IGFsbDogczggfSkuc3R5bGUsIHRoaXMubW9kdWxlID0gcjMgPyBuZXcgVDE2KHIzKSA6IG51bGwsIHRoaXMudGhlbWVUeXBlID0gZTUudGhlbWVUeXBlOwogICAgfQogICAgc3RhdGljIGRlZmluZSh0NCwgZTUpIHsKICAgICAgcmV0dXJuIG5ldyBEMTAodDQsIGU1IHx8IHt9KTsKICAgIH0KICB9OwogIHZhciBudDEwID0gQTIuZGVmaW5lKCk7CiAgdmFyIFJ0OCA9IEEyLmRlZmluZSh7IGNvbWJpbmUobjgpIHsKICAgIHJldHVybiBuOC5sZW5ndGggPyBbbjhbMF1dIDogbnVsbDsKICB9IH0pOwogIGZ1bmN0aW9uIEwxMihuOCkgewogICAgbGV0IHQ0ID0gbjguZmFjZXQobnQxMCk7CiAgICByZXR1cm4gdDQubGVuZ3RoID8gdDQgOiBuOC5mYWNldChSdDgpOwogIH0KICBmdW5jdGlvbiBubjMobjgsIHQ0KSB7CiAgICBsZXQgZTUgPSBbU2UxMF0sIHIzOwogICAgcmV0dXJuIG44IGluc3RhbmNlb2YgRDEwICYmIChuOC5tb2R1bGUgJiYgZTUucHVzaChNMi5zdHlsZU1vZHVsZS5vZihuOC5tb2R1bGUpKSwgcjMgPSBuOC50aGVtZVR5cGUpLCB0ND8uZmFsbGJhY2sgPyBlNS5wdXNoKFJ0OC5vZihuOCkpIDogcjMgPyBlNS5wdXNoKG50MTAuY29tcHV0ZU4oW00yLmRhcmtUaGVtZV0sIChpNCkgPT4gaTQuZmFjZXQoTTIuZGFya1RoZW1lKSA9PSAocjMgPT0gImRhcmsiKSA/IFtuOF0gOiBbXSkpIDogZTUucHVzaChudDEwLm9mKG44KSksIGU1OwogIH0KICB2YXIgcnQxMCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHRoaXMubWFya0NhY2hlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksIHRoaXMudHJlZSA9IG0xNCh0NC5zdGF0ZSksIHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmJ1aWxkRGVjbyh0NCwgTDEyKHQ0LnN0YXRlKSk7CiAgICB9CiAgICB1cGRhdGUodDQpIHsKICAgICAgbGV0IGU1ID0gbTE0KHQ0LnN0YXRlKSwgcjMgPSBMMTIodDQuc3RhdGUpLCBpNCA9IHIzICE9IEwxMih0NC5zdGFydFN0YXRlKTsKICAgICAgZTUubGVuZ3RoIDwgdDQudmlldy52aWV3cG9ydC50byAmJiAhaTQgJiYgZTUudHlwZSA9PSB0aGlzLnRyZWUudHlwZSA/IHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmRlY29yYXRpb25zLm1hcCh0NC5jaGFuZ2VzKSA6IChlNSAhPSB0aGlzLnRyZWUgfHwgdDQudmlld3BvcnRDaGFuZ2VkIHx8IGk0KSAmJiAodGhpcy50cmVlID0gZTUsIHRoaXMuZGVjb3JhdGlvbnMgPSB0aGlzLmJ1aWxkRGVjbyh0NC52aWV3LCByMykpOwogICAgfQogICAgYnVpbGREZWNvKHQ0LCBlNSkgewogICAgICBpZiAoIWU1IHx8ICF0aGlzLnRyZWUubGVuZ3RoKQogICAgICAgIHJldHVybiBrLm5vbmU7CiAgICAgIGxldCByMyA9IG5ldyBaMigpOwogICAgICBmb3IgKGxldCB7IGZyb206IGk0LCB0bzogczggfSBvZiB0NC52aXNpYmxlUmFuZ2VzKQogICAgICAgIF8xMih0aGlzLnRyZWUsIGU1LCAobzQsIGw3LCBhNCkgPT4gewogICAgICAgICAgcjMuYWRkKG80LCBsNywgdGhpcy5tYXJrQ2FjaGVbYTRdIHx8ICh0aGlzLm1hcmtDYWNoZVthNF0gPSBrLm1hcmsoeyBjbGFzczogYTQgfSkpKTsKICAgICAgICB9LCBpNCwgczgpOwogICAgICByZXR1cm4gcjMuZmluaXNoKCk7CiAgICB9CiAgfTsKICB2YXIgU2UxMCA9IGx0LmhpZ2goVjQuZnJvbUNsYXNzKHJ0MTAsIHsgZGVjb3JhdGlvbnM6IChuOCkgPT4gbjguZGVjb3JhdGlvbnMgfSkpOwogIHZhciBzbjUgPSBEMTAuZGVmaW5lKFt7IHRhZzogbjUubWV0YSwgY29sb3I6ICIjN2E3NTdhIiB9LCB7IHRhZzogbjUubGluaywgdGV4dERlY29yYXRpb246ICJ1bmRlcmxpbmUiIH0sIHsgdGFnOiBuNS5oZWFkaW5nLCB0ZXh0RGVjb3JhdGlvbjogInVuZGVybGluZSIsIGZvbnRXZWlnaHQ6ICJib2xkIiB9LCB7IHRhZzogbjUuZW1waGFzaXMsIGZvbnRTdHlsZTogIml0YWxpYyIgfSwgeyB0YWc6IG41LnN0cm9uZywgZm9udFdlaWdodDogImJvbGQiIH0sIHsgdGFnOiBuNS5zdHJpa2V0aHJvdWdoLCB0ZXh0RGVjb3JhdGlvbjogImxpbmUtdGhyb3VnaCIgfSwgeyB0YWc6IG41LmtleXdvcmQsIGNvbG9yOiAiIzcwOCIgfSwgeyB0YWc6IFtuNS5hdG9tLCBuNS5ib29sLCBuNS51cmwsIG41LmNvbnRlbnRTZXBhcmF0b3IsIG41LmxhYmVsTmFtZV0sIGNvbG9yOiAiIzIxOSIgfSwgeyB0YWc6IFtuNS5saXRlcmFsLCBuNS5pbnNlcnRlZF0sIGNvbG9yOiAiIzE2NCIgfSwgeyB0YWc6IFtuNS5zdHJpbmcsIG41LmRlbGV0ZWRdLCBjb2xvcjogIiNhMTEiIH0sIHsgdGFnOiBbbjUucmVnZXhwLCBuNS5lc2NhcGUsIG41LnNwZWNpYWwobjUuc3RyaW5nKV0sIGNvbG9yOiAiI2U0MCIgfSwgeyB0YWc6IG41LmRlZmluaXRpb24objUudmFyaWFibGVOYW1lKSwgY29sb3I6ICIjMDBmIiB9LCB7IHRhZzogbjUubG9jYWwobjUudmFyaWFibGVOYW1lKSwgY29sb3I6ICIjMzBhIiB9LCB7IHRhZzogW241LnR5cGVOYW1lLCBuNS5uYW1lc3BhY2VdLCBjb2xvcjogIiMwODUiIH0sIHsgdGFnOiBuNS5jbGFzc05hbWUsIGNvbG9yOiAiIzE2NyIgfSwgeyB0YWc6IFtuNS5zcGVjaWFsKG41LnZhcmlhYmxlTmFtZSksIG41Lm1hY3JvTmFtZV0sIGNvbG9yOiAiIzI1NiIgfSwgeyB0YWc6IG41LmRlZmluaXRpb24objUucHJvcGVydHlOYW1lKSwgY29sb3I6ICIjMDBjIiB9LCB7IHRhZzogbjUuY29tbWVudCwgY29sb3I6ICIjOTQwIiB9LCB7IHRhZzogbjUuaW52YWxpZCwgY29sb3I6ICIjZjAwIiB9XSk7CiAgdmFyIFBlMTEgPSBNMi5iYXNlVGhlbWUoeyAiJi5jbS1mb2N1c2VkIC5jbS1tYXRjaGluZ0JyYWNrZXQiOiB7IGJhY2tncm91bmRDb2xvcjogIiMzMjhjODI1MiIgfSwgIiYuY20tZm9jdXNlZCAuY20tbm9ubWF0Y2hpbmdCcmFja2V0IjogeyBiYWNrZ3JvdW5kQ29sb3I6ICIjYmI1NTU1NDQiIH0gfSk7CiAgdmFyIFV0NyA9IDFlNDsKICB2YXIgV3Q5ID0gIigpW117fSI7CiAgdmFyIEx0OCA9IEEyLmRlZmluZSh7IGNvbWJpbmUobjgpIHsKICAgIHJldHVybiBodChuOCwgeyBhZnRlckN1cnNvcjogdHJ1ZSwgYnJhY2tldHM6IFd0OSwgbWF4U2NhbkRpc3RhbmNlOiBVdDcsIHJlbmRlck1hdGNoOiBUZTExIH0pOwogIH0gfSk7CiAgdmFyIEFlMTMgPSBrLm1hcmsoeyBjbGFzczogImNtLW1hdGNoaW5nQnJhY2tldCIgfSk7CiAgdmFyIENlMTQgPSBrLm1hcmsoeyBjbGFzczogImNtLW5vbm1hdGNoaW5nQnJhY2tldCIgfSk7CiAgZnVuY3Rpb24gVGUxMShuOCkgewogICAgbGV0IHQ0ID0gW10sIGU1ID0gbjgubWF0Y2hlZCA/IEFlMTMgOiBDZTE0OwogICAgcmV0dXJuIHQ0LnB1c2goZTUucmFuZ2Uobjguc3RhcnQuZnJvbSwgbjguc3RhcnQudG8pKSwgbjguZW5kICYmIHQ0LnB1c2goZTUucmFuZ2UobjguZW5kLmZyb20sIG44LmVuZC50bykpLCB0NDsKICB9CiAgdmFyIERlOSA9IEoyLmRlZmluZSh7IGNyZWF0ZSgpIHsKICAgIHJldHVybiBrLm5vbmU7CiAgfSwgdXBkYXRlKG44LCB0NCkgewogICAgaWYgKCF0NC5kb2NDaGFuZ2VkICYmICF0NC5zZWxlY3Rpb24pCiAgICAgIHJldHVybiBuODsKICAgIGxldCBlNSA9IFtdLCByMyA9IHQ0LnN0YXRlLmZhY2V0KEx0OCk7CiAgICBmb3IgKGxldCBpNCBvZiB0NC5zdGF0ZS5zZWxlY3Rpb24ucmFuZ2VzKSB7CiAgICAgIGlmICghaTQuZW1wdHkpCiAgICAgICAgY29udGludWU7CiAgICAgIGxldCBzOCA9IFUxNCh0NC5zdGF0ZSwgaTQuaGVhZCwgLTEsIHIzKSB8fCBpNC5oZWFkID4gMCAmJiBVMTQodDQuc3RhdGUsIGk0LmhlYWQgLSAxLCAxLCByMykgfHwgcjMuYWZ0ZXJDdXJzb3IgJiYgKFUxNCh0NC5zdGF0ZSwgaTQuaGVhZCwgMSwgcjMpIHx8IGk0LmhlYWQgPCB0NC5zdGF0ZS5kb2MubGVuZ3RoICYmIFUxNCh0NC5zdGF0ZSwgaTQuaGVhZCArIDEsIC0xLCByMykpOwogICAgICBzOCAmJiAoZTUgPSBlNS5jb25jYXQocjMucmVuZGVyTWF0Y2goczgsIHQ0LnN0YXRlKSkpOwogICAgfQogICAgcmV0dXJuIGsuc2V0KGU1LCB0cnVlKTsKICB9LCBwcm92aWRlOiAobjgpID0+IE0yLmRlY29yYXRpb25zLmZyb20objgpIH0pOwogIGZ1bmN0aW9uIGl0MTAobjgsIHQ0LCBlNSkgewogICAgbGV0IHIzID0gbjgucHJvcCh0NCA8IDAgPyB3My5vcGVuZWRCeSA6IHczLmNsb3NlZEJ5KTsKICAgIGlmIChyMykKICAgICAgcmV0dXJuIHIzOwogICAgaWYgKG44Lm5hbWUubGVuZ3RoID09IDEpIHsKICAgICAgbGV0IGk0ID0gZTUuaW5kZXhPZihuOC5uYW1lKTsKICAgICAgaWYgKGk0ID4gLTEgJiYgaTQgJSAyID09ICh0NCA8IDAgPyAxIDogMCkpCiAgICAgICAgcmV0dXJuIFtlNVtpNCArIHQ0XV07CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gVTE0KG44LCB0NCwgZTUsIHIzID0ge30pIHsKICAgIGxldCBpNCA9IHIzLm1heFNjYW5EaXN0YW5jZSB8fCBVdDcsIHM4ID0gcjMuYnJhY2tldHMgfHwgV3Q5LCBvNCA9IG0xNChuOCksIGw3ID0gbzQucmVzb2x2ZUlubmVyKHQ0LCBlNSk7CiAgICBmb3IgKGxldCBhNCA9IGw3OyBhNDsgYTQgPSBhNC5wYXJlbnQpIHsKICAgICAgbGV0IGgxMCA9IGl0MTAoYTQudHlwZSwgZTUsIHM4KTsKICAgICAgaWYgKGgxMCAmJiBhNC5mcm9tIDwgYTQudG8pCiAgICAgICAgcmV0dXJuIE9lOShuOCwgdDQsIGU1LCBhNCwgaDEwLCBzOCk7CiAgICB9CiAgICByZXR1cm4gTmU3KG44LCB0NCwgZTUsIG80LCBsNy50eXBlLCBpNCwgczgpOwogIH0KICBmdW5jdGlvbiBPZTkobjgsIHQ0LCBlNSwgcjMsIGk0LCBzOCkgewogICAgbGV0IG80ID0gcjMucGFyZW50LCBsNyA9IHsgZnJvbTogcjMuZnJvbSwgdG86IHIzLnRvIH0sIGE0ID0gMCwgaDEwID0gbzQ/LmN1cnNvcigpOwogICAgaWYgKGgxMCAmJiAoZTUgPCAwID8gaDEwLmNoaWxkQmVmb3JlKHIzLmZyb20pIDogaDEwLmNoaWxkQWZ0ZXIocjMudG8pKSkKICAgICAgZG8KICAgICAgICBpZiAoZTUgPCAwID8gaDEwLnRvIDw9IHIzLmZyb20gOiBoMTAuZnJvbSA+PSByMy50bykgewogICAgICAgICAgaWYgKGE0ID09IDAgJiYgaTQuaW5kZXhPZihoMTAudHlwZS5uYW1lKSA+IC0xICYmIGgxMC5mcm9tIDwgaDEwLnRvKQogICAgICAgICAgICByZXR1cm4geyBzdGFydDogbDcsIGVuZDogeyBmcm9tOiBoMTAuZnJvbSwgdG86IGgxMC50byB9LCBtYXRjaGVkOiB0cnVlIH07CiAgICAgICAgICBpZiAoaXQxMChoMTAudHlwZSwgZTUsIHM4KSkKICAgICAgICAgICAgYTQrKzsKICAgICAgICAgIGVsc2UgaWYgKGl0MTAoaDEwLnR5cGUsIC1lNSwgczgpKSB7CiAgICAgICAgICAgIGlmIChhNCA9PSAwKQogICAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBsNywgZW5kOiBoMTAuZnJvbSA9PSBoMTAudG8gPyB2b2lkIDAgOiB7IGZyb206IGgxMC5mcm9tLCB0bzogaDEwLnRvIH0sIG1hdGNoZWQ6IGZhbHNlIH07CiAgICAgICAgICAgIGE0LS07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB3aGlsZSAoZTUgPCAwID8gaDEwLnByZXZTaWJsaW5nKCkgOiBoMTAubmV4dFNpYmxpbmcoKSk7CiAgICByZXR1cm4geyBzdGFydDogbDcsIG1hdGNoZWQ6IGZhbHNlIH07CiAgfQogIGZ1bmN0aW9uIE5lNyhuOCwgdDQsIGU1LCByMywgaTQsIHM4LCBvNCkgewogICAgbGV0IGw3ID0gZTUgPCAwID8gbjguc2xpY2VEb2ModDQgLSAxLCB0NCkgOiBuOC5zbGljZURvYyh0NCwgdDQgKyAxKSwgYTQgPSBvNC5pbmRleE9mKGw3KTsKICAgIGlmIChhNCA8IDAgfHwgYTQgJSAyID09IDAgIT0gZTUgPiAwKQogICAgICByZXR1cm4gbnVsbDsKICAgIGxldCBoMTAgPSB7IGZyb206IGU1IDwgMCA/IHQ0IC0gMSA6IHQ0LCB0bzogZTUgPiAwID8gdDQgKyAxIDogdDQgfSwgdTExID0gbjguZG9jLml0ZXJSYW5nZSh0NCwgZTUgPiAwID8gbjguZG9jLmxlbmd0aCA6IDApLCBkMTUgPSAwOwogICAgZm9yIChsZXQgZzEyID0gMDsgIXUxMS5uZXh0KCkuZG9uZSAmJiBnMTIgPD0gczg7ICkgewogICAgICBsZXQgdzIxID0gdTExLnZhbHVlOwogICAgICBlNSA8IDAgJiYgKGcxMiArPSB3MjEubGVuZ3RoKTsKICAgICAgbGV0IFExNyA9IHQ0ICsgZzEyICogZTU7CiAgICAgIGZvciAobGV0IEMxNyA9IGU1ID4gMCA/IDAgOiB3MjEubGVuZ3RoIC0gMSwgR3Q1ID0gZTUgPiAwID8gdzIxLmxlbmd0aCA6IC0xOyBDMTcgIT0gR3Q1OyBDMTcgKz0gZTUpIHsKICAgICAgICBsZXQgWDIzID0gbzQuaW5kZXhPZih3MjFbQzE3XSk7CiAgICAgICAgaWYgKCEoWDIzIDwgMCB8fCByMy5yZXNvbHZlSW5uZXIoUTE3ICsgQzE3LCAxKS50eXBlICE9IGk0KSkKICAgICAgICAgIGlmIChYMjMgJSAyID09IDAgPT0gZTUgPiAwKQogICAgICAgICAgICBkMTUrKzsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoZDE1ID09IDEpCiAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IGgxMCwgZW5kOiB7IGZyb206IFExNyArIEMxNywgdG86IFExNyArIEMxNyArIDEgfSwgbWF0Y2hlZDogWDIzID4+IDEgPT0gYTQgPj4gMSB9OwogICAgICAgICAgICBkMTUtLTsKICAgICAgICAgIH0KICAgICAgfQogICAgICBlNSA+IDAgJiYgKGcxMiArPSB3MjEubGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiB1MTEuZG9uZSA/IHsgc3RhcnQ6IGgxMCwgbWF0Y2hlZDogZmFsc2UgfSA6IG51bGw7CiAgfQogIGZ1bmN0aW9uIG10NihuOCwgdDQsIGU1LCByMyA9IDAsIGk0ID0gMCkgewogICAgdDQgPT0gbnVsbCAmJiAodDQgPSBuOC5zZWFyY2goL1teXHNcdTAwYTBdLyksIHQ0ID09IC0xICYmICh0NCA9IG44Lmxlbmd0aCkpOwogICAgbGV0IHM4ID0gaTQ7CiAgICBmb3IgKGxldCBvNCA9IHIzOyBvNCA8IHQ0OyBvNCsrKQogICAgICBuOC5jaGFyQ29kZUF0KG80KSA9PSA5ID8gczggKz0gZTUgLSBzOCAlIGU1IDogczgrKzsKICAgIHJldHVybiBzODsKICB9CiAgdmFyIEcxMCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgcjMpIHsKICAgICAgdGhpcy5zdHJpbmcgPSB0NCwgdGhpcy50YWJTaXplID0gZTUsIHRoaXMuaW5kZW50VW5pdCA9IHIzLCB0aGlzLnBvcyA9IDAsIHRoaXMuc3RhcnQgPSAwLCB0aGlzLmxhc3RDb2x1bW5Qb3MgPSAwLCB0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IDA7CiAgICB9CiAgICBlb2woKSB7CiAgICAgIHJldHVybiB0aGlzLnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGg7CiAgICB9CiAgICBzb2woKSB7CiAgICAgIHJldHVybiB0aGlzLnBvcyA9PSAwOwogICAgfQogICAgcGVlaygpIHsKICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykgfHwgdm9pZCAwOwogICAgfQogICAgbmV4dCgpIHsKICAgICAgaWYgKHRoaXMucG9zIDwgdGhpcy5zdHJpbmcubGVuZ3RoKQogICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk7CiAgICB9CiAgICBlYXQodDQpIHsKICAgICAgbGV0IGU1ID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSwgcjM7CiAgICAgIGlmICh0eXBlb2YgdDQgPT0gInN0cmluZyIgPyByMyA9IGU1ID09IHQ0IDogcjMgPSBlNSAmJiAodDQgaW5zdGFuY2VvZiBSZWdFeHAgPyB0NC50ZXN0KGU1KSA6IHQ0KGU1KSksIHIzKQogICAgICAgIHJldHVybiArK3RoaXMucG9zLCBlNTsKICAgIH0KICAgIGVhdFdoaWxlKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMucG9zOwogICAgICBmb3IgKDsgdGhpcy5lYXQodDQpOyApCiAgICAgICAgOwogICAgICByZXR1cm4gdGhpcy5wb3MgPiBlNTsKICAgIH0KICAgIGVhdFNwYWNlKCkgewogICAgICBsZXQgdDQgPSB0aGlzLnBvczsKICAgICAgZm9yICg7IC9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOyApCiAgICAgICAgKyt0aGlzLnBvczsKICAgICAgcmV0dXJuIHRoaXMucG9zID4gdDQ7CiAgICB9CiAgICBza2lwVG9FbmQoKSB7CiAgICAgIHRoaXMucG9zID0gdGhpcy5zdHJpbmcubGVuZ3RoOwogICAgfQogICAgc2tpcFRvKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMuc3RyaW5nLmluZGV4T2YodDQsIHRoaXMucG9zKTsKICAgICAgaWYgKGU1ID4gLTEpCiAgICAgICAgcmV0dXJuIHRoaXMucG9zID0gZTUsIHRydWU7CiAgICB9CiAgICBiYWNrVXAodDQpIHsKICAgICAgdGhpcy5wb3MgLT0gdDQ7CiAgICB9CiAgICBjb2x1bW4oKSB7CiAgICAgIHJldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0ICYmICh0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IG10Nih0aGlzLnN0cmluZywgdGhpcy5zdGFydCwgdGhpcy50YWJTaXplLCB0aGlzLmxhc3RDb2x1bW5Qb3MsIHRoaXMubGFzdENvbHVtblZhbHVlKSwgdGhpcy5sYXN0Q29sdW1uUG9zID0gdGhpcy5zdGFydCksIHRoaXMubGFzdENvbHVtblZhbHVlOwogICAgfQogICAgaW5kZW50YXRpb24oKSB7CiAgICAgIHJldHVybiBtdDYodGhpcy5zdHJpbmcsIG51bGwsIHRoaXMudGFiU2l6ZSk7CiAgICB9CiAgICBtYXRjaCh0NCwgZTUsIHIzKSB7CiAgICAgIGlmICh0eXBlb2YgdDQgPT0gInN0cmluZyIpIHsKICAgICAgICBsZXQgaTQgPSAobzQpID0+IHIzID8gbzQudG9Mb3dlckNhc2UoKSA6IG80LCBzOCA9IHRoaXMuc3RyaW5nLnN1YnN0cih0aGlzLnBvcywgdDQubGVuZ3RoKTsKICAgICAgICByZXR1cm4gaTQoczgpID09IGk0KHQ0KSA/IChlNSAhPT0gZmFsc2UgJiYgKHRoaXMucG9zICs9IHQ0Lmxlbmd0aCksIHRydWUpIDogbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZXQgaTQgPSB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnBvcykubWF0Y2godDQpOwogICAgICAgIHJldHVybiBpNCAmJiBpNC5pbmRleCA+IDAgPyBudWxsIDogKGk0ICYmIGU1ICE9PSBmYWxzZSAmJiAodGhpcy5wb3MgKz0gaTRbMF0ubGVuZ3RoKSwgaTQpOwogICAgICB9CiAgICB9CiAgICBjdXJyZW50KCkgewogICAgICByZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5wb3MpOwogICAgfQogIH07CiAgZnVuY3Rpb24gQmU4KG44KSB7CiAgICByZXR1cm4geyB0b2tlbjogbjgudG9rZW4sIGJsYW5rTGluZTogbjguYmxhbmtMaW5lIHx8ICgoKSA9PiB7CiAgICB9KSwgc3RhcnRTdGF0ZTogbjguc3RhcnRTdGF0ZSB8fCAoKCkgPT4gdHJ1ZSksIGNvcHlTdGF0ZTogbjguY29weVN0YXRlIHx8IE1lOCwgaW5kZW50OiBuOC5pbmRlbnQgfHwgKCgpID0+IG51bGwpLCBsYW5ndWFnZURhdGE6IG44Lmxhbmd1YWdlRGF0YSB8fCB7fSwgdG9rZW5UYWJsZTogbjgudG9rZW5UYWJsZSB8fCBodDkgfTsKICB9CiAgZnVuY3Rpb24gTWU4KG44KSB7CiAgICBpZiAodHlwZW9mIG44ICE9ICJvYmplY3QiKQogICAgICByZXR1cm4gbjg7CiAgICBsZXQgdDQgPSB7fTsKICAgIGZvciAobGV0IGU1IGluIG44KSB7CiAgICAgIGxldCByMyA9IG44W2U1XTsKICAgICAgdDRbZTVdID0gcjMgaW5zdGFuY2VvZiBBcnJheSA/IHIzLnNsaWNlKCkgOiByMzsKICAgIH0KICAgIHJldHVybiB0NDsKICB9CiAgdmFyIHExMCA9IGNsYXNzIGV4dGVuZHMgYzkgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgbGV0IGU1ID0gdnQ2KHQ0Lmxhbmd1YWdlRGF0YSksIHIzID0gQmU4KHQ0KSwgaTQsIHM4ID0gbmV3IGNsYXNzIGV4dGVuZHMgeWU1IHsKICAgICAgICBjcmVhdGVQYXJzZShvNCwgbDcsIGE0KSB7CiAgICAgICAgICByZXR1cm4gbmV3IHN0NyhpNCwgbzQsIGw3LCBhNCk7CiAgICAgICAgfQogICAgICB9KCk7CiAgICAgIHN1cGVyKGU1LCBzOCwgW1B0OS5vZigobzQsIGw3KSA9PiB0aGlzLmdldEluZGVudChvNCwgbDcpKV0pLCB0aGlzLnRvcE5vZGUgPSBVZTUoZTUpLCBpNCA9IHRoaXMsIHRoaXMuc3RyZWFtUGFyc2VyID0gcjMsIHRoaXMuc3RhdGVBZnRlciA9IG5ldyB3Myh7IHBlck5vZGU6IHRydWUgfSksIHRoaXMudG9rZW5UYWJsZSA9IHQ0LnRva2VuVGFibGUgPyBuZXcgSDExKHIzLnRva2VuVGFibGUpIDogUmUxMTsKICAgIH0KICAgIHN0YXRpYyBkZWZpbmUodDQpIHsKICAgICAgcmV0dXJuIG5ldyBxMTAodDQpOwogICAgfQogICAgZ2V0SW5kZW50KHQ0LCBlNSkgewogICAgICBsZXQgcjMgPSBtMTQodDQuc3RhdGUpLCBpNCA9IHIzLnJlc29sdmUoZTUpOwogICAgICBmb3IgKDsgaTQgJiYgaTQudHlwZSAhPSB0aGlzLnRvcE5vZGU7ICkKICAgICAgICBpNCA9IGk0LnBhcmVudDsKICAgICAgaWYgKCFpNCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgbGV0IHM4ID0gYXQ1KHRoaXMsIHIzLCAwLCBpNC5mcm9tLCBlNSksIG80LCBsNzsKICAgICAgaWYgKHM4ID8gKGw3ID0gczguc3RhdGUsIG80ID0gczgucG9zICsgMSkgOiAobDcgPSB0aGlzLnN0cmVhbVBhcnNlci5zdGFydFN0YXRlKHQ0LnVuaXQpLCBvNCA9IDApLCBlNSAtIG80ID4gMWU0KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBmb3IgKDsgbzQgPCBlNTsgKSB7CiAgICAgICAgbGV0IGgxMCA9IHQ0LnN0YXRlLmRvYy5saW5lQXQobzQpLCB1MTEgPSBNYXRoLm1pbihlNSwgaDEwLnRvKTsKICAgICAgICBpZiAoaDEwLmxlbmd0aCkgewogICAgICAgICAgbGV0IGQxNSA9IG5ldyBHMTAoaDEwLnRleHQsIHQ0LnN0YXRlLnRhYlNpemUsIHQ0LnVuaXQpOwogICAgICAgICAgZm9yICg7IGQxNS5wb3MgPCB1MTEgLSBoMTAuZnJvbTsgKQogICAgICAgICAgICAkdDModGhpcy5zdHJlYW1QYXJzZXIudG9rZW4sIGQxNSwgbDcpOwogICAgICAgIH0gZWxzZQogICAgICAgICAgdGhpcy5zdHJlYW1QYXJzZXIuYmxhbmtMaW5lKGw3LCB0NC51bml0KTsKICAgICAgICBpZiAodTExID09IGU1KQogICAgICAgICAgYnJlYWs7CiAgICAgICAgbzQgPSBoMTAudG8gKyAxOwogICAgICB9CiAgICAgIGxldCB7IHRleHQ6IGE0IH0gPSB0NC5saW5lQXQoZTUpOwogICAgICByZXR1cm4gdGhpcy5zdHJlYW1QYXJzZXIuaW5kZW50KGw3LCAvXlxzKiguKikvLmV4ZWMoYTQpWzFdLCB0NCk7CiAgICB9CiAgICBnZXQgYWxsb3dzTmVzdGluZygpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH07CiAgZnVuY3Rpb24gYXQ1KG44LCB0NCwgZTUsIHIzLCBpNCkgewogICAgbGV0IHM4ID0gZTUgPj0gcjMgJiYgZTUgKyB0NC5sZW5ndGggPD0gaTQgJiYgdDQucHJvcChuOC5zdGF0ZUFmdGVyKTsKICAgIGlmIChzOCkKICAgICAgcmV0dXJuIHsgc3RhdGU6IG44LnN0cmVhbVBhcnNlci5jb3B5U3RhdGUoczgpLCBwb3M6IGU1ICsgdDQubGVuZ3RoIH07CiAgICBmb3IgKGxldCBvNCA9IHQ0LmNoaWxkcmVuLmxlbmd0aCAtIDE7IG80ID49IDA7IG80LS0pIHsKICAgICAgbGV0IGw3ID0gdDQuY2hpbGRyZW5bbzRdLCBhNCA9IGU1ICsgdDQucG9zaXRpb25zW280XSwgaDEwID0gbDcgaW5zdGFuY2VvZiBQMyAmJiBhNCA8IGk0ICYmIGF0NShuOCwgbDcsIGE0LCByMywgaTQpOwogICAgICBpZiAoaDEwKQogICAgICAgIHJldHVybiBoMTA7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24ganQyKG44LCB0NCwgZTUsIHIzLCBpNCkgewogICAgaWYgKGk0ICYmIGU1IDw9IDAgJiYgcjMgPj0gdDQubGVuZ3RoKQogICAgICByZXR1cm4gdDQ7CiAgICAhaTQgJiYgdDQudHlwZSA9PSBuOC50b3BOb2RlICYmIChpNCA9IHRydWUpOwogICAgZm9yIChsZXQgczggPSB0NC5jaGlsZHJlbi5sZW5ndGggLSAxOyBzOCA+PSAwOyBzOC0tKSB7CiAgICAgIGxldCBvNCA9IHQ0LnBvc2l0aW9uc1tzOF0sIGw3ID0gdDQuY2hpbGRyZW5bczhdLCBhNDsKICAgICAgaWYgKG80IDwgcjMgJiYgbDcgaW5zdGFuY2VvZiBQMykgewogICAgICAgIGlmICghKGE0ID0ganQyKG44LCBsNywgZTUgLSBvNCwgcjMgLSBvNCwgaTQpKSkKICAgICAgICAgIGJyZWFrOwogICAgICAgIHJldHVybiBpNCA/IG5ldyBQMyh0NC50eXBlLCB0NC5jaGlsZHJlbi5zbGljZSgwLCBzOCkuY29uY2F0KGE0KSwgdDQucG9zaXRpb25zLnNsaWNlKDAsIHM4ICsgMSksIG80ICsgYTQubGVuZ3RoKSA6IGE0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gRWU2KG44LCB0NCwgZTUsIHIzKSB7CiAgICBmb3IgKGxldCBpNCBvZiB0NCkgewogICAgICBsZXQgczggPSBpNC5mcm9tICsgKGk0Lm9wZW5TdGFydCA/IDI1IDogMCksIG80ID0gaTQudG8gLSAoaTQub3BlbkVuZCA/IDI1IDogMCksIGw3ID0gczggPD0gZTUgJiYgbzQgPiBlNSAmJiBhdDUobjgsIGk0LnRyZWUsIDAgLSBpNC5vZmZzZXQsIGU1LCBvNCksIGE0OwogICAgICBpZiAobDcgJiYgKGE0ID0ganQyKG44LCBpNC50cmVlLCBlNSArIGk0Lm9mZnNldCwgbDcucG9zICsgaTQub2Zmc2V0LCBmYWxzZSkpKQogICAgICAgIHJldHVybiB7IHN0YXRlOiBsNy5zdGF0ZSwgdHJlZTogYTQgfTsKICAgIH0KICAgIHJldHVybiB7IHN0YXRlOiBuOC5zdHJlYW1QYXJzZXIuc3RhcnRTdGF0ZShyMyA/ICQxNChyMykgOiA0KSwgdHJlZTogUDMuZW1wdHkgfTsKICB9CiAgdmFyIHN0NyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgcjMsIGk0KSB7CiAgICAgIHRoaXMubGFuZyA9IHQ0LCB0aGlzLmlucHV0ID0gZTUsIHRoaXMuZnJhZ21lbnRzID0gcjMsIHRoaXMucmFuZ2VzID0gaTQsIHRoaXMuc3RvcHBlZEF0ID0gbnVsbCwgdGhpcy5jaHVua3MgPSBbXSwgdGhpcy5jaHVua1BvcyA9IFtdLCB0aGlzLmNodW5rID0gW10sIHRoaXMuY2h1bmtSZXVzZWQgPSB2b2lkIDAsIHRoaXMucmFuZ2VJbmRleCA9IDAsIHRoaXMudG8gPSBpNFtpNC5sZW5ndGggLSAxXS50bzsKICAgICAgbGV0IHM4ID0geDkuZ2V0KCksIG80ID0gaTRbMF0uZnJvbSwgeyBzdGF0ZTogbDcsIHRyZWU6IGE0IH0gPSBFZTYodDQsIHIzLCBvNCwgczg/LnN0YXRlKTsKICAgICAgdGhpcy5zdGF0ZSA9IGw3LCB0aGlzLnBhcnNlZFBvcyA9IHRoaXMuY2h1bmtTdGFydCA9IG80ICsgYTQubGVuZ3RoOwogICAgICBmb3IgKGxldCBoMTAgPSAwOyBoMTAgPCBhNC5jaGlsZHJlbi5sZW5ndGg7IGgxMCsrKQogICAgICAgIHRoaXMuY2h1bmtzLnB1c2goYTQuY2hpbGRyZW5baDEwXSksIHRoaXMuY2h1bmtQb3MucHVzaChhNC5wb3NpdGlvbnNbaDEwXSk7CiAgICAgIHM4ICYmIHRoaXMucGFyc2VkUG9zIDwgczgudmlld3BvcnQuZnJvbSAtIDFlNSAmJiAodGhpcy5zdGF0ZSA9IHRoaXMubGFuZy5zdHJlYW1QYXJzZXIuc3RhcnRTdGF0ZSgkMTQoczguc3RhdGUpKSwgczguc2tpcFVudGlsSW5WaWV3KHRoaXMucGFyc2VkUG9zLCBzOC52aWV3cG9ydC5mcm9tKSwgdGhpcy5wYXJzZWRQb3MgPSBzOC52aWV3cG9ydC5mcm9tKSwgdGhpcy5tb3ZlUmFuZ2VJbmRleCgpOwogICAgfQogICAgYWR2YW5jZSgpIHsKICAgICAgbGV0IHQ0ID0geDkuZ2V0KCksIGU1ID0gdGhpcy5zdG9wcGVkQXQgPT0gbnVsbCA/IHRoaXMudG8gOiBNYXRoLm1pbih0aGlzLnRvLCB0aGlzLnN0b3BwZWRBdCksIHIzID0gTWF0aC5taW4oZTUsIHRoaXMuY2h1bmtTdGFydCArIDIwNDgpOwogICAgICBmb3IgKHQ0ICYmIChyMyA9IE1hdGgubWluKHIzLCB0NC52aWV3cG9ydC50bykpOyB0aGlzLnBhcnNlZFBvcyA8IHIzOyApCiAgICAgICAgdGhpcy5wYXJzZUxpbmUodDQpOwogICAgICByZXR1cm4gdGhpcy5jaHVua1N0YXJ0IDwgdGhpcy5wYXJzZWRQb3MgJiYgdGhpcy5maW5pc2hDaHVuaygpLCB0aGlzLnBhcnNlZFBvcyA+PSBlNSA/IHRoaXMuZmluaXNoKCkgOiB0NCAmJiB0aGlzLnBhcnNlZFBvcyA+PSB0NC52aWV3cG9ydC50byA/ICh0NC5za2lwVW50aWxJblZpZXcodGhpcy5wYXJzZWRQb3MsIGU1KSwgdGhpcy5maW5pc2goKSkgOiBudWxsOwogICAgfQogICAgc3RvcEF0KHQ0KSB7CiAgICAgIHRoaXMuc3RvcHBlZEF0ID0gdDQ7CiAgICB9CiAgICBsaW5lQWZ0ZXIodDQpIHsKICAgICAgbGV0IGU1ID0gdGhpcy5pbnB1dC5jaHVuayh0NCk7CiAgICAgIGlmICh0aGlzLmlucHV0LmxpbmVDaHVua3MpCiAgICAgICAgZTUgPT0gYApgICYmIChlNSA9ICIiKTsKICAgICAgZWxzZSB7CiAgICAgICAgbGV0IHIzID0gZTUuaW5kZXhPZihgCmApOwogICAgICAgIHIzID4gLTEgJiYgKGU1ID0gZTUuc2xpY2UoMCwgcjMpKTsKICAgICAgfQogICAgICByZXR1cm4gdDQgKyBlNS5sZW5ndGggPD0gdGhpcy50byA/IGU1IDogZTUuc2xpY2UoMCwgdGhpcy50byAtIHQ0KTsKICAgIH0KICAgIG5leHRMaW5lKCkgewogICAgICBsZXQgdDQgPSB0aGlzLnBhcnNlZFBvcywgZTUgPSB0aGlzLmxpbmVBZnRlcih0NCksIHIzID0gdDQgKyBlNS5sZW5ndGg7CiAgICAgIGZvciAobGV0IGk0ID0gdGhpcy5yYW5nZUluZGV4OyA7ICkgewogICAgICAgIGxldCBzOCA9IHRoaXMucmFuZ2VzW2k0XS50bzsKICAgICAgICBpZiAoczggPj0gcjMgfHwgKGU1ID0gZTUuc2xpY2UoMCwgczggLSAocjMgLSBlNS5sZW5ndGgpKSwgaTQrKywgaTQgPT0gdGhpcy5yYW5nZXMubGVuZ3RoKSkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGxldCBvNCA9IHRoaXMucmFuZ2VzW2k0XS5mcm9tLCBsNyA9IHRoaXMubGluZUFmdGVyKG80KTsKICAgICAgICBlNSArPSBsNywgcjMgPSBvNCArIGw3Lmxlbmd0aDsKICAgICAgfQogICAgICByZXR1cm4geyBsaW5lOiBlNSwgZW5kOiByMyB9OwogICAgfQogICAgc2tpcEdhcHNUbyh0NCwgZTUsIHIzKSB7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGxldCBpNCA9IHRoaXMucmFuZ2VzW3RoaXMucmFuZ2VJbmRleF0udG8sIHM4ID0gdDQgKyBlNTsKICAgICAgICBpZiAocjMgPiAwID8gaTQgPiBzOCA6IGk0ID49IHM4KQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZTUgKz0gdGhpcy5yYW5nZXNbKyt0aGlzLnJhbmdlSW5kZXhdLmZyb20gLSBpNDsKICAgICAgfQogICAgICByZXR1cm4gZTU7CiAgICB9CiAgICBtb3ZlUmFuZ2VJbmRleCgpIHsKICAgICAgZm9yICg7IHRoaXMucmFuZ2VzW3RoaXMucmFuZ2VJbmRleF0udG8gPCB0aGlzLnBhcnNlZFBvczsgKQogICAgICAgIHRoaXMucmFuZ2VJbmRleCsrOwogICAgfQogICAgZW1pdFRva2VuKHQ0LCBlNSwgcjMsIGk0LCBzOCkgewogICAgICBpZiAodGhpcy5yYW5nZXMubGVuZ3RoID4gMSkgewogICAgICAgIHM4ID0gdGhpcy5za2lwR2Fwc1RvKGU1LCBzOCwgMSksIGU1ICs9IHM4OwogICAgICAgIGxldCBvNCA9IHRoaXMuY2h1bmsubGVuZ3RoOwogICAgICAgIHM4ID0gdGhpcy5za2lwR2Fwc1RvKHIzLCBzOCwgLTEpLCByMyArPSBzOCwgaTQgKz0gdGhpcy5jaHVuay5sZW5ndGggLSBvNDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5jaHVuay5wdXNoKHQ0LCBlNSwgcjMsIGk0KSwgczg7CiAgICB9CiAgICBwYXJzZUxpbmUodDQpIHsKICAgICAgbGV0IHsgbGluZTogZTUsIGVuZDogcjMgfSA9IHRoaXMubmV4dExpbmUoKSwgaTQgPSAwLCB7IHN0cmVhbVBhcnNlcjogczggfSA9IHRoaXMubGFuZywgbzQgPSBuZXcgRzEwKGU1LCB0NCA/IHQ0LnN0YXRlLnRhYlNpemUgOiA0LCB0NCA/ICQxNCh0NC5zdGF0ZSkgOiAyKTsKICAgICAgaWYgKG80LmVvbCgpKQogICAgICAgIHM4LmJsYW5rTGluZSh0aGlzLnN0YXRlLCBvNC5pbmRlbnRVbml0KTsKICAgICAgZWxzZQogICAgICAgIGZvciAoOyAhbzQuZW9sKCk7ICkgewogICAgICAgICAgbGV0IGw3ID0gJHQzKHM4LnRva2VuLCBvNCwgdGhpcy5zdGF0ZSk7CiAgICAgICAgICBpZiAobDcgJiYgKGk0ID0gdGhpcy5lbWl0VG9rZW4odGhpcy5sYW5nLnRva2VuVGFibGUucmVzb2x2ZShsNyksIHRoaXMucGFyc2VkUG9zICsgbzQuc3RhcnQsIHRoaXMucGFyc2VkUG9zICsgbzQucG9zLCA0LCBpNCkpLCBvNC5zdGFydCA+IDFlNCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB0aGlzLnBhcnNlZFBvcyA9IHIzLCB0aGlzLm1vdmVSYW5nZUluZGV4KCksIHRoaXMucGFyc2VkUG9zIDwgdGhpcy50byAmJiB0aGlzLnBhcnNlZFBvcysrOwogICAgfQogICAgZmluaXNoQ2h1bmsoKSB7CiAgICAgIGxldCB0NCA9IFAzLmJ1aWxkKHsgYnVmZmVyOiB0aGlzLmNodW5rLCBzdGFydDogdGhpcy5jaHVua1N0YXJ0LCBsZW5ndGg6IHRoaXMucGFyc2VkUG9zIC0gdGhpcy5jaHVua1N0YXJ0LCBub2RlU2V0OiBGZTksIHRvcElEOiAwLCBtYXhCdWZmZXJMZW5ndGg6IDIwNDgsIHJldXNlZDogdGhpcy5jaHVua1JldXNlZCB9KTsKICAgICAgdDQgPSBuZXcgUDModDQudHlwZSwgdDQuY2hpbGRyZW4sIHQ0LnBvc2l0aW9ucywgdDQubGVuZ3RoLCBbW3RoaXMubGFuZy5zdGF0ZUFmdGVyLCB0aGlzLmxhbmcuc3RyZWFtUGFyc2VyLmNvcHlTdGF0ZSh0aGlzLnN0YXRlKV1dKSwgdGhpcy5jaHVua3MucHVzaCh0NCksIHRoaXMuY2h1bmtQb3MucHVzaCh0aGlzLmNodW5rU3RhcnQgLSB0aGlzLnJhbmdlc1swXS5mcm9tKSwgdGhpcy5jaHVuayA9IFtdLCB0aGlzLmNodW5rUmV1c2VkID0gdm9pZCAwLCB0aGlzLmNodW5rU3RhcnQgPSB0aGlzLnBhcnNlZFBvczsKICAgIH0KICAgIGZpbmlzaCgpIHsKICAgICAgcmV0dXJuIG5ldyBQMyh0aGlzLmxhbmcudG9wTm9kZSwgdGhpcy5jaHVua3MsIHRoaXMuY2h1bmtQb3MsIHRoaXMucGFyc2VkUG9zIC0gdGhpcy5yYW5nZXNbMF0uZnJvbSkuYmFsYW5jZSgpOwogICAgfQogIH07CiAgZnVuY3Rpb24gJHQzKG44LCB0NCwgZTUpIHsKICAgIHQ0LnN0YXJ0ID0gdDQucG9zOwogICAgZm9yIChsZXQgcjMgPSAwOyByMyA8IDEwOyByMysrKSB7CiAgICAgIGxldCBpNCA9IG44KHQ0LCBlNSk7CiAgICAgIGlmICh0NC5wb3MgPiB0NC5zdGFydCkKICAgICAgICByZXR1cm4gaTQ7CiAgICB9CiAgICB0aHJvdyBuZXcgRXJyb3IoIlN0cmVhbSBwYXJzZXIgZmFpbGVkIHRvIGFkdmFuY2Ugc3RyZWFtLiIpOwogIH0KICB2YXIgaHQ5ID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgdmFyIEYxMyA9IFtOMy5ub25lXTsKICB2YXIgRmU5ID0gbmV3IFozKEYxMyk7CiAgdmFyIGd0OCA9IFtdOwogIHZhciBWdDggPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICBmb3IgKGxldCBbbjgsIHQ0XSBvZiBbWyJ2YXJpYWJsZSIsICJ2YXJpYWJsZU5hbWUiXSwgWyJ2YXJpYWJsZS0yIiwgInZhcmlhYmxlTmFtZS5zcGVjaWFsIl0sIFsic3RyaW5nLTIiLCAic3RyaW5nLnNwZWNpYWwiXSwgWyJkZWYiLCAidmFyaWFibGVOYW1lLmRlZmluaXRpb24iXSwgWyJ0YWciLCAidGFnTmFtZSJdLCBbImF0dHJpYnV0ZSIsICJhdHRyaWJ1dGVOYW1lIl0sIFsidHlwZSIsICJ0eXBlTmFtZSJdLCBbImJ1aWx0aW4iLCAidmFyaWFibGVOYW1lLnN0YW5kYXJkIl0sIFsicXVhbGlmaWVyIiwgIm1vZGlmaWVyIl0sIFsiZXJyb3IiLCAiaW52YWxpZCJdLCBbImhlYWRlciIsICJoZWFkaW5nIl0sIFsicHJvcGVydHkiLCAicHJvcGVydHlOYW1lIl1dKQogICAgVnQ4W244XSA9IHp0NyhodDksIHQ0KTsKICB2YXIgSDExID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQpIHsKICAgICAgdGhpcy5leHRyYSA9IHQ0LCB0aGlzLnRhYmxlID0gT2JqZWN0LmFzc2lnbigvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSwgVnQ4KTsKICAgIH0KICAgIHJlc29sdmUodDQpIHsKICAgICAgcmV0dXJuIHQ0ID8gdGhpcy50YWJsZVt0NF0gfHwgKHRoaXMudGFibGVbdDRdID0genQ3KHRoaXMuZXh0cmEsIHQ0KSkgOiAwOwogICAgfQogIH07CiAgdmFyIFJlMTEgPSBuZXcgSDExKGh0OSk7CiAgZnVuY3Rpb24gdHQxMyhuOCwgdDQpIHsKICAgIGd0OC5pbmRleE9mKG44KSA+IC0xIHx8IChndDgucHVzaChuOCksIGNvbnNvbGUud2Fybih0NCkpOwogIH0KICBmdW5jdGlvbiB6dDcobjgsIHQ0KSB7CiAgICBsZXQgZTUgPSBudWxsOwogICAgZm9yIChsZXQgczggb2YgdDQuc3BsaXQoIi4iKSkgewogICAgICBsZXQgbzQgPSBuOFtzOF0gfHwgbjVbczhdOwogICAgICBvNCA/IHR5cGVvZiBvNCA9PSAiZnVuY3Rpb24iID8gZTUgPyBlNSA9IG80KGU1KSA6IHR0MTMoczgsIGBNb2RpZmllciAke3M4fSB1c2VkIGF0IHN0YXJ0IG9mIHRhZ2ApIDogZTUgPyB0dDEzKHM4LCBgVGFnICR7czh9IHVzZWQgYXMgbW9kaWZpZXJgKSA6IGU1ID0gbzQgOiB0dDEzKHM4LCBgVW5rbm93biBoaWdobGlnaHRpbmcgdGFnICR7czh9YCk7CiAgICB9CiAgICBpZiAoIWU1KQogICAgICByZXR1cm4gMDsKICAgIGxldCByMyA9IHQ0LnJlcGxhY2UoLyAvZywgIl8iKSwgaTQgPSBOMy5kZWZpbmUoeyBpZDogRjEzLmxlbmd0aCwgbmFtZTogcjMsIHByb3BzOiBbJDEyKHsgW3IzXTogZTUgfSldIH0pOwogICAgcmV0dXJuIEYxMy5wdXNoKGk0KSwgaTQuaWQ7CiAgfQogIGZ1bmN0aW9uIFVlNShuOCkgewogICAgbGV0IHQ0ID0gTjMuZGVmaW5lKHsgaWQ6IEYxMy5sZW5ndGgsIG5hbWU6ICJEb2N1bWVudCIsIHByb3BzOiBbVDE3LmFkZCgoKSA9PiBuOCldIH0pOwogICAgcmV0dXJuIEYxMy5wdXNoKHQ0KSwgdDQ7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL19kZW5vX3Vuc3RhYmxlLnRzCiAgZnVuY3Rpb24gYWRkU2lnbmFsTGlzdGVuZXIoLi4uYXJncykgewogICAgaWYgKHR5cGVvZiBEZW5vLmFkZFNpZ25hbExpc3RlbmVyID09ICJmdW5jdGlvbiIpIHsKICAgICAgcmV0dXJuIERlbm8uYWRkU2lnbmFsTGlzdGVuZXIoLi4uYXJncyk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJSZXF1aXJlcyAtLXVuc3RhYmxlIik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHJlbW92ZVNpZ25hbExpc3RlbmVyKC4uLmFyZ3MpIHsKICAgIGlmICh0eXBlb2YgRGVuby5yZW1vdmVTaWduYWxMaXN0ZW5lciA9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBEZW5vLnJlbW92ZVNpZ25hbExpc3RlbmVyKC4uLmFyZ3MpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVxdWlyZXMgLS11bnN0YWJsZSIpOwogICAgfQogIH0KICBmdW5jdGlvbiBzZXRSYXcoLi4uYXJncykgewogICAgaWYgKHR5cGVvZiBEZW5vLnNldFJhdyA9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBEZW5vLnNldFJhdyguLi5hcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlJlcXVpcmVzIC0tdW5zdGFibGUiKTsKICAgIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gY29ubmVjdChvcHRpb25zKSB7CiAgICByZXR1cm4gYXdhaXQgRGVuby5jb25uZWN0KG9wdGlvbnMpOwogIH0KICBmdW5jdGlvbiBsaXN0ZW4ob3B0aW9ucykgewogICAgcmV0dXJuIERlbm8ubGlzdGVuKG9wdGlvbnMpOwogIH0KICBmdW5jdGlvbiBsaXN0ZW5EYXRhZ3JhbShvcHRpb25zKSB7CiAgICByZXR1cm4gRGVuby5saXN0ZW5EYXRhZ3JhbShvcHRpb25zKTsKICB9CiAgZnVuY3Rpb24gTGlzdGVuZXJSZWYobGlzdGVuZXIsIC4uLmFyZ3MpIHsKICAgIGlmICh0eXBlb2YgbGlzdGVuZXIucmVmID09ICJmdW5jdGlvbiIpIHsKICAgICAgcmV0dXJuIGxpc3RlbmVyLnJlZiguLi5hcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlJlcXVpcmVzIC0tdW5zdGFibGUiKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gTGlzdGVuZXJVbnJlZihsaXN0ZW5lciwgLi4uYXJncykgewogICAgaWYgKHR5cGVvZiBsaXN0ZW5lci51bnJlZiA9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBsaXN0ZW5lci51bnJlZiguLi5hcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlJlcXVpcmVzIC0tdW5zdGFibGUiKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gdW5yZWZUaW1lciguLi5hcmdzKSB7CiAgICBpZiAodHlwZW9mIERlbm8udW5yZWZUaW1lciA9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBEZW5vLnVucmVmVGltZXIoLi4uYXJncyk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJSZXF1aXJlcyAtLXVuc3RhYmxlIik7CiAgICB9CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2FzeW5jL2RlZmVycmVkLnRzCiAgZnVuY3Rpb24gZGVmZXJyZWQoKSB7CiAgICBsZXQgbWV0aG9kczsKICAgIGxldCBzdGF0ZSA9ICJwZW5kaW5nIjsKICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTcsIHJlamVjdCkgPT4gewogICAgICBtZXRob2RzID0gewogICAgICAgIGFzeW5jIHJlc29sdmUodmFsdWUpIHsKICAgICAgICAgIGF3YWl0IHZhbHVlOwogICAgICAgICAgc3RhdGUgPSAiZnVsZmlsbGVkIjsKICAgICAgICAgIHJlc29sdmU3KHZhbHVlKTsKICAgICAgICB9LAogICAgICAgIHJlamVjdChyZWFzb24pIHsKICAgICAgICAgIHN0YXRlID0gInJlamVjdGVkIjsKICAgICAgICAgIHJlamVjdChyZWFzb24pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsICJzdGF0ZSIsIHsgZ2V0OiAoKSA9PiBzdGF0ZSB9KTsKICAgIHJldHVybiBPYmplY3QuYXNzaWduKHByb21pc2UsIG1ldGhvZHMpOwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9hc3luYy9kZWxheS50cwogIGZ1bmN0aW9uIGRlbGF5KG1zMiwgb3B0aW9ucyA9IHt9KSB7CiAgICBjb25zdCB7IHNpZ25hbCwgcGVyc2lzdGVudCB9ID0gb3B0aW9uczsKICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHsKICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oIkRlbGF5IHdhcyBhYm9ydGVkLiIsICJBYm9ydEVycm9yIikpOwogICAgfQogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlNywgcmVqZWN0KSA9PiB7CiAgICAgIGNvbnN0IGFib3J0ID0gKCkgPT4gewogICAgICAgIGNsZWFyVGltZW91dChpNCk7CiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oIkRlbGF5IHdhcyBhYm9ydGVkLiIsICJBYm9ydEVycm9yIikpOwogICAgICB9OwogICAgICBjb25zdCBkb25lID0gKCkgPT4gewogICAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBhYm9ydCk7CiAgICAgICAgcmVzb2x2ZTcoKTsKICAgICAgfTsKICAgICAgY29uc3QgaTQgPSBzZXRUaW1lb3V0KGRvbmUsIG1zMik7CiAgICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBhYm9ydCwgeyBvbmNlOiB0cnVlIH0pOwogICAgICBpZiAocGVyc2lzdGVudCA9PT0gZmFsc2UpIHsKICAgICAgICB1bnJlZlRpbWVyKGk0KTsKICAgICAgfQogICAgfSk7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2FzeW5jL211eF9hc3luY19pdGVyYXRvci50cwogIHZhciBNdXhBc3luY0l0ZXJhdG9yID0gY2xhc3MgewogICAgI2l0ZXJhdG9yQ291bnQgPSAwOwogICAgI3lpZWxkcyA9IFtdOwogICAgI3Rocm93cyA9IFtdOwogICAgI3NpZ25hbCA9IGRlZmVycmVkKCk7CiAgICBhZGQoaXRlcmFibGUpIHsKICAgICAgKyt0aGlzLiNpdGVyYXRvckNvdW50OwogICAgICB0aGlzLiNjYWxsSXRlcmF0b3JOZXh0KGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpKTsKICAgIH0KICAgIGFzeW5jICNjYWxsSXRlcmF0b3JOZXh0KGl0ZXJhdG9yKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpOwogICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICAtLXRoaXMuI2l0ZXJhdG9yQ291bnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuI3lpZWxkcy5wdXNoKHsgaXRlcmF0b3IsIHZhbHVlIH0pOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZTUpIHsKICAgICAgICB0aGlzLiN0aHJvd3MucHVzaChlNSk7CiAgICAgIH0KICAgICAgdGhpcy4jc2lnbmFsLnJlc29sdmUoKTsKICAgIH0KICAgIGFzeW5jICppdGVyYXRlKCkgewogICAgICB3aGlsZSAodGhpcy4jaXRlcmF0b3JDb3VudCA+IDApIHsKICAgICAgICBhd2FpdCB0aGlzLiNzaWduYWw7CiAgICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IHRoaXMuI3lpZWxkcy5sZW5ndGg7IGk0KyspIHsKICAgICAgICAgIGNvbnN0IHsgaXRlcmF0b3IsIHZhbHVlIH0gPSB0aGlzLiN5aWVsZHNbaTRdOwogICAgICAgICAgeWllbGQgdmFsdWU7CiAgICAgICAgICB0aGlzLiNjYWxsSXRlcmF0b3JOZXh0KGl0ZXJhdG9yKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuI3Rocm93cy5sZW5ndGgpIHsKICAgICAgICAgIGZvciAoY29uc3QgZTUgb2YgdGhpcy4jdGhyb3dzKSB7CiAgICAgICAgICAgIHRocm93IGU1OwogICAgICAgICAgfQogICAgICAgICAgdGhpcy4jdGhyb3dzLmxlbmd0aCA9IDA7CiAgICAgICAgfQogICAgICAgIHRoaXMuI3lpZWxkcy5sZW5ndGggPSAwOwogICAgICAgIHRoaXMuI3NpZ25hbCA9IGRlZmVycmVkKCk7CiAgICAgIH0KICAgIH0KICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7CiAgICAgIHJldHVybiB0aGlzLml0ZXJhdGUoKTsKICAgIH0KICB9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2ZtdC9jb2xvcnMudHMKICB2YXIgeyBEZW5vOiBEZW5vMiB9ID0gZ2xvYmFsVGhpczsKICB2YXIgbm9Db2xvciA9IHR5cGVvZiBEZW5vMj8ubm9Db2xvciA9PT0gImJvb2xlYW4iID8gRGVubzIubm9Db2xvciA6IHRydWU7CiAgdmFyIEFOU0lfUEFUVEVSTiA9IG5ldyBSZWdFeHAoCiAgICBbCiAgICAgICJbXFx1MDAxQlxcdTAwOUJdW1tcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxkXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcZF0rKD86O1stYS16QS1aXFxkXFwvIyYuOj0/JUB+X10qKSopP1xcdTAwMDcpIiwKICAgICAgIig/Oig/OlxcZHsxLDR9KD86O1xcZHswLDR9KSopP1tcXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkpIgogICAgXS5qb2luKCJ8IiksCiAgICAiZyIKICApOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL3Rlc3RpbmcvYXNzZXJ0cy50cwogIHZhciBBc3NlcnRpb25FcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogICAgY29uc3RydWN0b3IobWVzc2FnZSkgewogICAgICBzdXBlcihtZXNzYWdlKTsKICAgICAgdGhpcy5uYW1lID0gIkFzc2VydGlvbkVycm9yIjsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGFzc2VydDIoZXhwciwgbXNnID0gIiIpIHsKICAgIGlmICghZXhwcikgewogICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gdW5yZWFjaGFibGUoKSB7CiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoInVucmVhY2hhYmxlIik7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL191dGlsL2Fzc2VydC50cwogIHZhciBEZW5vU3RkSW50ZXJuYWxFcnJvcjIgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHsKICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgIHRoaXMubmFtZSA9ICJEZW5vU3RkSW50ZXJuYWxFcnJvciI7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBhc3NlcnQzKGV4cHIsIG1zZyA9ICIiKSB7CiAgICBpZiAoIWV4cHIpIHsKICAgICAgdGhyb3cgbmV3IERlbm9TdGRJbnRlcm5hbEVycm9yMihtc2cpOwogICAgfQogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ieXRlcy9tb2QudHMKICBmdW5jdGlvbiBpbmRleE9mTmVlZGxlKHNvdXJjZSwgbmVlZGxlLCBzdGFydCA9IDApIHsKICAgIGlmIChzdGFydCA+PSBzb3VyY2UubGVuZ3RoKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgc3RhcnQgPSBNYXRoLm1heCgwLCBzb3VyY2UubGVuZ3RoICsgc3RhcnQpOwogICAgfQogICAgY29uc3QgczggPSBuZWVkbGVbMF07CiAgICBmb3IgKGxldCBpNCA9IHN0YXJ0OyBpNCA8IHNvdXJjZS5sZW5ndGg7IGk0KyspIHsKICAgICAgaWYgKHNvdXJjZVtpNF0gIT09IHM4KQogICAgICAgIGNvbnRpbnVlOwogICAgICBjb25zdCBwaW4gPSBpNDsKICAgICAgbGV0IG1hdGNoZWQgPSAxOwogICAgICBsZXQgajE5ID0gaTQ7CiAgICAgIHdoaWxlIChtYXRjaGVkIDwgbmVlZGxlLmxlbmd0aCkgewogICAgICAgIGoxOSsrOwogICAgICAgIGlmIChzb3VyY2VbajE5XSAhPT0gbmVlZGxlW2oxOSAtIHBpbl0pIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBtYXRjaGVkKys7CiAgICAgIH0KICAgICAgaWYgKG1hdGNoZWQgPT09IG5lZWRsZS5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gcGluOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2lvL2J1ZmZlci50cwogIHZhciBNSU5fUkVBRDIgPSAzMiAqIDEwMjQ7CiAgdmFyIE1BWF9TSVpFMiA9IDIgKiogMzIgLSAyOwogIHZhciBDUjIgPSAiXHIiLmNoYXJDb2RlQXQoMCk7CiAgdmFyIExGMiA9ICJcbiIuY2hhckNvZGVBdCgwKTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9zdHJlYW1zL2NvbnZlcnNpb24udHMKICB2YXIgREVGQVVMVF9CVUZGRVJfU0laRTIgPSAzMiAqIDEwMjQ7CiAgYXN5bmMgZnVuY3Rpb24gd3JpdGVBbGwodzIxLCBhcnIpIHsKICAgIGxldCBud3JpdHRlbiA9IDA7CiAgICB3aGlsZSAobndyaXR0ZW4gPCBhcnIubGVuZ3RoKSB7CiAgICAgIG53cml0dGVuICs9IGF3YWl0IHcyMS53cml0ZShhcnIuc3ViYXJyYXkobndyaXR0ZW4pKTsKICAgIH0KICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9fdXRpbHMudHMKICBmdW5jdGlvbiBub3RJbXBsZW1lbnRlZChtc2cpIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSBtc2cgPyBgTm90IGltcGxlbWVudGVkOiAke21zZ31gIDogIk5vdCBpbXBsZW1lbnRlZCI7CiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7CiAgfQogIGZ1bmN0aW9uIHdhcm5Ob3RJbXBsZW1lbnRlZChtc2cpIHsKICAgIGNvbnN0IG1lc3NhZ2UgPSBtc2cgPyBgTm90IGltcGxlbWVudGVkOiAke21zZ31gIDogIk5vdCBpbXBsZW1lbnRlZCI7CiAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7CiAgfQogIGZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkgewogICAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKQogICAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTsKICAgIGxpc3QucG9wKCk7CiAgfQogIGZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykgewogICAgaWYgKGVuYyA9PSBudWxsIHx8IGVuYyA9PT0gInV0ZjgiIHx8IGVuYyA9PT0gInV0Zi04IikKICAgICAgcmV0dXJuICJ1dGY4IjsKICAgIHJldHVybiBzbG93Q2FzZXMoZW5jKTsKICB9CiAgZnVuY3Rpb24gc2xvd0Nhc2VzKGVuYykgewogICAgc3dpdGNoIChlbmMubGVuZ3RoKSB7CiAgICAgIGNhc2UgNDoKICAgICAgICBpZiAoZW5jID09PSAiVVRGOCIpCiAgICAgICAgICByZXR1cm4gInV0ZjgiOwogICAgICAgIGlmIChlbmMgPT09ICJ1Y3MyIiB8fCBlbmMgPT09ICJVQ1MyIikKICAgICAgICAgIHJldHVybiAidXRmMTZsZSI7CiAgICAgICAgZW5jID0gYCR7ZW5jfWAudG9Mb3dlckNhc2UoKTsKICAgICAgICBpZiAoZW5jID09PSAidXRmOCIpCiAgICAgICAgICByZXR1cm4gInV0ZjgiOwogICAgICAgIGlmIChlbmMgPT09ICJ1Y3MyIikKICAgICAgICAgIHJldHVybiAidXRmMTZsZSI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoZW5jID09PSAiaGV4IiB8fCBlbmMgPT09ICJIRVgiIHx8IGAke2VuY31gLnRvTG93ZXJDYXNlKCkgPT09ICJoZXgiKSB7CiAgICAgICAgICByZXR1cm4gImhleCI7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDU6CiAgICAgICAgaWYgKGVuYyA9PT0gImFzY2lpIikKICAgICAgICAgIHJldHVybiAiYXNjaWkiOwogICAgICAgIGlmIChlbmMgPT09ICJ1Y3MtMiIpCiAgICAgICAgICByZXR1cm4gInV0ZjE2bGUiOwogICAgICAgIGlmIChlbmMgPT09ICJVVEYtOCIpCiAgICAgICAgICByZXR1cm4gInV0ZjgiOwogICAgICAgIGlmIChlbmMgPT09ICJBU0NJSSIpCiAgICAgICAgICByZXR1cm4gImFzY2lpIjsKICAgICAgICBpZiAoZW5jID09PSAiVUNTLTIiKQogICAgICAgICAgcmV0dXJuICJ1dGYxNmxlIjsKICAgICAgICBlbmMgPSBgJHtlbmN9YC50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmIChlbmMgPT09ICJ1dGYtOCIpCiAgICAgICAgICByZXR1cm4gInV0ZjgiOwogICAgICAgIGlmIChlbmMgPT09ICJhc2NpaSIpCiAgICAgICAgICByZXR1cm4gImFzY2lpIjsKICAgICAgICBpZiAoZW5jID09PSAidWNzLTIiKQogICAgICAgICAgcmV0dXJuICJ1dGYxNmxlIjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA2OgogICAgICAgIGlmIChlbmMgPT09ICJiYXNlNjQiKQogICAgICAgICAgcmV0dXJuICJiYXNlNjQiOwogICAgICAgIGlmIChlbmMgPT09ICJsYXRpbjEiIHx8IGVuYyA9PT0gImJpbmFyeSIpCiAgICAgICAgICByZXR1cm4gImxhdGluMSI7CiAgICAgICAgaWYgKGVuYyA9PT0gIkJBU0U2NCIpCiAgICAgICAgICByZXR1cm4gImJhc2U2NCI7CiAgICAgICAgaWYgKGVuYyA9PT0gIkxBVElOMSIgfHwgZW5jID09PSAiQklOQVJZIikKICAgICAgICAgIHJldHVybiAibGF0aW4xIjsKICAgICAgICBlbmMgPSBgJHtlbmN9YC50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmIChlbmMgPT09ICJiYXNlNjQiKQogICAgICAgICAgcmV0dXJuICJiYXNlNjQiOwogICAgICAgIGlmIChlbmMgPT09ICJsYXRpbjEiIHx8IGVuYyA9PT0gImJpbmFyeSIpCiAgICAgICAgICByZXR1cm4gImxhdGluMSI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNzoKICAgICAgICBpZiAoZW5jID09PSAidXRmMTZsZSIgfHwgZW5jID09PSAiVVRGMTZMRSIgfHwgYCR7ZW5jfWAudG9Mb3dlckNhc2UoKSA9PT0gInV0ZjE2bGUiKSB7CiAgICAgICAgICByZXR1cm4gInV0ZjE2bGUiOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSA4OgogICAgICAgIGlmIChlbmMgPT09ICJ1dGYtMTZsZSIgfHwgZW5jID09PSAiVVRGLTE2TEUiIHx8IGAke2VuY31gLnRvTG93ZXJDYXNlKCkgPT09ICJ1dGYtMTZsZSIpIHsKICAgICAgICAgIHJldHVybiAidXRmMTZsZSI7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGlmIChlbmMgPT09ICIiKQogICAgICAgICAgcmV0dXJuICJ1dGY4IjsKICAgIH0KICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC91dGlsL3R5cGVzLnRzCiAgdmFyIHR5cGVzX2V4cG9ydHMyID0ge307CiAgX19leHBvcnQodHlwZXNfZXhwb3J0czIsIHsKICAgIGlzQW55QXJyYXlCdWZmZXI6ICgpID0+IGlzQW55QXJyYXlCdWZmZXIyLAogICAgaXNBcmd1bWVudHNPYmplY3Q6ICgpID0+IGlzQXJndW1lbnRzT2JqZWN0MiwKICAgIGlzQXJyYXlCdWZmZXI6ICgpID0+IGlzQXJyYXlCdWZmZXIyLAogICAgaXNBcnJheUJ1ZmZlclZpZXc6ICgpID0+IGlzQXJyYXlCdWZmZXJWaWV3LAogICAgaXNBc3luY0Z1bmN0aW9uOiAoKSA9PiBpc0FzeW5jRnVuY3Rpb24yLAogICAgaXNCaWdJbnQ2NEFycmF5OiAoKSA9PiBpc0JpZ0ludDY0QXJyYXksCiAgICBpc0JpZ0ludE9iamVjdDogKCkgPT4gaXNCaWdJbnRPYmplY3QyLAogICAgaXNCaWdVaW50NjRBcnJheTogKCkgPT4gaXNCaWdVaW50NjRBcnJheSwKICAgIGlzQm9vbGVhbk9iamVjdDogKCkgPT4gaXNCb29sZWFuT2JqZWN0MiwKICAgIGlzQm94ZWRQcmltaXRpdmU6ICgpID0+IGlzQm94ZWRQcmltaXRpdmUyLAogICAgaXNDcnlwdG9LZXk6ICgpID0+IGlzQ3J5cHRvS2V5LAogICAgaXNEYXRhVmlldzogKCkgPT4gaXNEYXRhVmlldzIsCiAgICBpc0RhdGU6ICgpID0+IGlzRGF0ZTIsCiAgICBpc0Zsb2F0MzJBcnJheTogKCkgPT4gaXNGbG9hdDMyQXJyYXksCiAgICBpc0Zsb2F0NjRBcnJheTogKCkgPT4gaXNGbG9hdDY0QXJyYXksCiAgICBpc0dlbmVyYXRvckZ1bmN0aW9uOiAoKSA9PiBpc0dlbmVyYXRvckZ1bmN0aW9uMiwKICAgIGlzR2VuZXJhdG9yT2JqZWN0OiAoKSA9PiBpc0dlbmVyYXRvck9iamVjdDIsCiAgICBpc0ludDE2QXJyYXk6ICgpID0+IGlzSW50MTZBcnJheSwKICAgIGlzSW50MzJBcnJheTogKCkgPT4gaXNJbnQzMkFycmF5LAogICAgaXNJbnQ4QXJyYXk6ICgpID0+IGlzSW50OEFycmF5LAogICAgaXNLZXlPYmplY3Q6ICgpID0+IGlzS2V5T2JqZWN0LAogICAgaXNNYXA6ICgpID0+IGlzTWFwMiwKICAgIGlzTWFwSXRlcmF0b3I6ICgpID0+IGlzTWFwSXRlcmF0b3IyLAogICAgaXNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6ICgpID0+IGlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0MiwKICAgIGlzTmF0aXZlRXJyb3I6ICgpID0+IGlzTmF0aXZlRXJyb3IyLAogICAgaXNOdW1iZXJPYmplY3Q6ICgpID0+IGlzTnVtYmVyT2JqZWN0MiwKICAgIGlzUHJvbWlzZTogKCkgPT4gaXNQcm9taXNlMiwKICAgIGlzUmVnRXhwOiAoKSA9PiBpc1JlZ0V4cDIsCiAgICBpc1NldDogKCkgPT4gaXNTZXQyLAogICAgaXNTZXRJdGVyYXRvcjogKCkgPT4gaXNTZXRJdGVyYXRvcjIsCiAgICBpc1NoYXJlZEFycmF5QnVmZmVyOiAoKSA9PiBpc1NoYXJlZEFycmF5QnVmZmVyMiwKICAgIGlzU3RyaW5nT2JqZWN0OiAoKSA9PiBpc1N0cmluZ09iamVjdDIsCiAgICBpc1N5bWJvbE9iamVjdDogKCkgPT4gaXNTeW1ib2xPYmplY3QyLAogICAgaXNUeXBlZEFycmF5OiAoKSA9PiBpc1R5cGVkQXJyYXksCiAgICBpc1VpbnQxNkFycmF5OiAoKSA9PiBpc1VpbnQxNkFycmF5LAogICAgaXNVaW50MzJBcnJheTogKCkgPT4gaXNVaW50MzJBcnJheSwKICAgIGlzVWludDhBcnJheTogKCkgPT4gaXNVaW50OEFycmF5LAogICAgaXNVaW50OENsYW1wZWRBcnJheTogKCkgPT4gaXNVaW50OENsYW1wZWRBcnJheSwKICAgIGlzV2Vha01hcDogKCkgPT4gaXNXZWFrTWFwMiwKICAgIGlzV2Vha1NldDogKCkgPT4gaXNXZWFrU2V0MgogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy90eXBlcy50cwogIHZhciB0eXBlc19leHBvcnRzID0ge307CiAgX19leHBvcnQodHlwZXNfZXhwb3J0cywgewogICAgZGVmYXVsdDogKCkgPT4gdHlwZXNfZGVmYXVsdCwKICAgIGlzQW55QXJyYXlCdWZmZXI6ICgpID0+IGlzQW55QXJyYXlCdWZmZXIsCiAgICBpc0FyZ3VtZW50c09iamVjdDogKCkgPT4gaXNBcmd1bWVudHNPYmplY3QsCiAgICBpc0FycmF5QnVmZmVyOiAoKSA9PiBpc0FycmF5QnVmZmVyLAogICAgaXNBc3luY0Z1bmN0aW9uOiAoKSA9PiBpc0FzeW5jRnVuY3Rpb24sCiAgICBpc0JpZ0ludE9iamVjdDogKCkgPT4gaXNCaWdJbnRPYmplY3QsCiAgICBpc0Jvb2xlYW5PYmplY3Q6ICgpID0+IGlzQm9vbGVhbk9iamVjdCwKICAgIGlzQm94ZWRQcmltaXRpdmU6ICgpID0+IGlzQm94ZWRQcmltaXRpdmUsCiAgICBpc0RhdGFWaWV3OiAoKSA9PiBpc0RhdGFWaWV3LAogICAgaXNEYXRlOiAoKSA9PiBpc0RhdGUsCiAgICBpc0dlbmVyYXRvckZ1bmN0aW9uOiAoKSA9PiBpc0dlbmVyYXRvckZ1bmN0aW9uLAogICAgaXNHZW5lcmF0b3JPYmplY3Q6ICgpID0+IGlzR2VuZXJhdG9yT2JqZWN0LAogICAgaXNNYXA6ICgpID0+IGlzTWFwLAogICAgaXNNYXBJdGVyYXRvcjogKCkgPT4gaXNNYXBJdGVyYXRvciwKICAgIGlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0OiAoKSA9PiBpc01vZHVsZU5hbWVzcGFjZU9iamVjdCwKICAgIGlzTmF0aXZlRXJyb3I6ICgpID0+IGlzTmF0aXZlRXJyb3IsCiAgICBpc051bWJlck9iamVjdDogKCkgPT4gaXNOdW1iZXJPYmplY3QsCiAgICBpc1Byb21pc2U6ICgpID0+IGlzUHJvbWlzZSwKICAgIGlzUmVnRXhwOiAoKSA9PiBpc1JlZ0V4cCwKICAgIGlzU2V0OiAoKSA9PiBpc1NldCwKICAgIGlzU2V0SXRlcmF0b3I6ICgpID0+IGlzU2V0SXRlcmF0b3IsCiAgICBpc1NoYXJlZEFycmF5QnVmZmVyOiAoKSA9PiBpc1NoYXJlZEFycmF5QnVmZmVyLAogICAgaXNTdHJpbmdPYmplY3Q6ICgpID0+IGlzU3RyaW5nT2JqZWN0LAogICAgaXNTeW1ib2xPYmplY3Q6ICgpID0+IGlzU3ltYm9sT2JqZWN0LAogICAgaXNXZWFrTWFwOiAoKSA9PiBpc1dlYWtNYXAsCiAgICBpc1dlYWtTZXQ6ICgpID0+IGlzV2Vha1NldAogIH0pOwogIHZhciBfdG9TdHJpbmc0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICB2YXIgX2lzT2JqZWN0TGlrZSA9ICh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAib2JqZWN0IjsKICB2YXIgX2lzRnVuY3Rpb25MaWtlID0gKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICJmdW5jdGlvbiI7CiAgZnVuY3Rpb24gaXNBbnlBcnJheUJ1ZmZlcih2YWx1ZSkgewogICAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIChfdG9TdHJpbmc0LmNhbGwodmFsdWUpID09PSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iIHx8IF90b1N0cmluZzQuY2FsbCh2YWx1ZSkgPT09ICJbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSIpOwogIH0KICBmdW5jdGlvbiBpc0FyZ3VtZW50c09iamVjdCh2YWx1ZSkgewogICAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZzQuY2FsbCh2YWx1ZSkgPT09ICJbb2JqZWN0IEFyZ3VtZW50c10iOwogIH0KICBmdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbHVlKSB7CiAgICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nNC5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3QgQXJyYXlCdWZmZXJdIjsKICB9CiAgZnVuY3Rpb24gaXNBc3luY0Z1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gX2lzRnVuY3Rpb25MaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmc0LmNhbGwodmFsdWUpID09PSAiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI7CiAgfQogIGZ1bmN0aW9uIGlzQm9vbGVhbk9iamVjdCh2YWx1ZSkgewogICAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZzQuY2FsbCh2YWx1ZSkgPT09ICJbb2JqZWN0IEJvb2xlYW5dIjsKICB9CiAgZnVuY3Rpb24gaXNCb3hlZFByaW1pdGl2ZSh2YWx1ZSkgewogICAgcmV0dXJuIGlzQm9vbGVhbk9iamVjdCh2YWx1ZSkgfHwgaXNTdHJpbmdPYmplY3QodmFsdWUpIHx8IGlzTnVtYmVyT2JqZWN0KHZhbHVlKSB8fCBpc1N5bWJvbE9iamVjdCh2YWx1ZSkgfHwgaXNCaWdJbnRPYmplY3QodmFsdWUpOwogIH0KICBmdW5jdGlvbiBpc0RhdGFWaWV3KHZhbHVlKSB7CiAgICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nNC5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3QgRGF0YVZpZXddIjsKICB9CiAgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7CiAgICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nNC5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3QgRGF0ZV0iOwogIH0KICBmdW5jdGlvbiBpc0dlbmVyYXRvckZ1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gX2lzRnVuY3Rpb25MaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmc0LmNhbGwodmFsdWUpID09PSAiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iOwogIH0KICBmdW5jdGlvbiBpc0dlbmVyYXRvck9iamVjdCh2YWx1ZSkgewogICAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZzQuY2FsbCh2YWx1ZSkgPT09ICJbb2JqZWN0IEdlbmVyYXRvcl0iOwogIH0KICBmdW5jdGlvbiBpc01hcCh2YWx1ZSkgewogICAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZzQuY2FsbCh2YWx1ZSkgPT09ICJbb2JqZWN0IE1hcF0iOwogIH0KICBmdW5jdGlvbiBpc01hcEl0ZXJhdG9yKHZhbHVlKSB7CiAgICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nNC5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3QgTWFwIEl0ZXJhdG9yXSI7CiAgfQogIGZ1bmN0aW9uIGlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0KHZhbHVlKSB7CiAgICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nNC5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3QgTW9kdWxlXSI7CiAgfQogIGZ1bmN0aW9uIGlzTmF0aXZlRXJyb3IodmFsdWUpIHsKICAgIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmc0LmNhbGwodmFsdWUpID09PSAiW29iamVjdCBFcnJvcl0iOwogIH0KICBmdW5jdGlvbiBpc051bWJlck9iamVjdCh2YWx1ZSkgewogICAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZzQuY2FsbCh2YWx1ZSkgPT09ICJbb2JqZWN0IE51bWJlcl0iOwogIH0KICBmdW5jdGlvbiBpc0JpZ0ludE9iamVjdCh2YWx1ZSkgewogICAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZzQuY2FsbCh2YWx1ZSkgPT09ICJbb2JqZWN0IEJpZ0ludF0iOwogIH0KICBmdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHsKICAgIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmc0LmNhbGwodmFsdWUpID09PSAiW29iamVjdCBQcm9taXNlXSI7CiAgfQogIGZ1bmN0aW9uIGlzUmVnRXhwKHZhbHVlKSB7CiAgICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nNC5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3QgUmVnRXhwXSI7CiAgfQogIGZ1bmN0aW9uIGlzU2V0KHZhbHVlKSB7CiAgICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nNC5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3QgU2V0XSI7CiAgfQogIGZ1bmN0aW9uIGlzU2V0SXRlcmF0b3IodmFsdWUpIHsKICAgIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmc0LmNhbGwodmFsdWUpID09PSAiW29iamVjdCBTZXQgSXRlcmF0b3JdIjsKICB9CiAgZnVuY3Rpb24gaXNTaGFyZWRBcnJheUJ1ZmZlcih2YWx1ZSkgewogICAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZzQuY2FsbCh2YWx1ZSkgPT09ICJbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSI7CiAgfQogIGZ1bmN0aW9uIGlzU3RyaW5nT2JqZWN0KHZhbHVlKSB7CiAgICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nNC5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3QgU3RyaW5nXSI7CiAgfQogIGZ1bmN0aW9uIGlzU3ltYm9sT2JqZWN0KHZhbHVlKSB7CiAgICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nNC5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3QgU3ltYm9sXSI7CiAgfQogIGZ1bmN0aW9uIGlzV2Vha01hcCh2YWx1ZSkgewogICAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZzQuY2FsbCh2YWx1ZSkgPT09ICJbb2JqZWN0IFdlYWtNYXBdIjsKICB9CiAgZnVuY3Rpb24gaXNXZWFrU2V0KHZhbHVlKSB7CiAgICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nNC5jYWxsKHZhbHVlKSA9PT0gIltvYmplY3QgV2Vha1NldF0iOwogIH0KICB2YXIgdHlwZXNfZGVmYXVsdCA9IHsKICAgIGlzQXN5bmNGdW5jdGlvbiwKICAgIGlzR2VuZXJhdG9yRnVuY3Rpb24sCiAgICBpc0FueUFycmF5QnVmZmVyLAogICAgaXNBcnJheUJ1ZmZlciwKICAgIGlzQXJndW1lbnRzT2JqZWN0LAogICAgaXNCb3hlZFByaW1pdGl2ZSwKICAgIGlzRGF0YVZpZXcsCiAgICBpc01hcCwKICAgIGlzTWFwSXRlcmF0b3IsCiAgICBpc01vZHVsZU5hbWVzcGFjZU9iamVjdCwKICAgIGlzTmF0aXZlRXJyb3IsCiAgICBpc1Byb21pc2UsCiAgICBpc1NldCwKICAgIGlzU2V0SXRlcmF0b3IsCiAgICBpc1dlYWtNYXAsCiAgICBpc1dlYWtTZXQsCiAgICBpc1JlZ0V4cCwKICAgIGlzRGF0ZSwKICAgIGlzU3RyaW5nT2JqZWN0LAogICAgaXNOdW1iZXJPYmplY3QsCiAgICBpc0Jvb2xlYW5PYmplY3QsCiAgICBpc0JpZ0ludE9iamVjdAogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9jcnlwdG8vY29uc3RhbnRzLnRzCiAgdmFyIGtIYW5kbGUgPSBTeW1ib2woImtIYW5kbGUiKTsKICB2YXIga0tleU9iamVjdCA9IFN5bWJvbCgia0tleU9iamVjdCIpOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvY3J5cHRvL19rZXlzLnRzCiAgdmFyIGtLZXlUeXBlID0gU3ltYm9sKCJrS2V5VHlwZSIpOwogIGZ1bmN0aW9uIGlzS2V5T2JqZWN0KG9iaikgewogICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIG9ialtrS2V5VHlwZV0gIT09IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gaXNDcnlwdG9LZXkob2JqKSB7CiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqW2tLZXlPYmplY3RdICE9PSB2b2lkIDA7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvdXRpbC90eXBlcy50cwogIHZhciBfZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihVaW50OEFycmF5KS5wcm90b3R5cGUsCiAgICBTeW1ib2wudG9TdHJpbmdUYWcKICApLmdldDsKICBmdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWx1ZSkgewogICAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSk7CiAgfQogIGZ1bmN0aW9uIGlzQmlnSW50NjRBcnJheSh2YWx1ZSkgewogICAgcmV0dXJuIF9nZXRUeXBlZEFycmF5VG9TdHJpbmdUYWcuY2FsbCh2YWx1ZSkgPT09ICJCaWdJbnQ2NEFycmF5IjsKICB9CiAgZnVuY3Rpb24gaXNCaWdVaW50NjRBcnJheSh2YWx1ZSkgewogICAgcmV0dXJuIF9nZXRUeXBlZEFycmF5VG9TdHJpbmdUYWcuY2FsbCh2YWx1ZSkgPT09ICJCaWdVaW50NjRBcnJheSI7CiAgfQogIGZ1bmN0aW9uIGlzRmxvYXQzMkFycmF5KHZhbHVlKSB7CiAgICByZXR1cm4gX2dldFR5cGVkQXJyYXlUb1N0cmluZ1RhZy5jYWxsKHZhbHVlKSA9PT0gIkZsb2F0MzJBcnJheSI7CiAgfQogIGZ1bmN0aW9uIGlzRmxvYXQ2NEFycmF5KHZhbHVlKSB7CiAgICByZXR1cm4gX2dldFR5cGVkQXJyYXlUb1N0cmluZ1RhZy5jYWxsKHZhbHVlKSA9PT0gIkZsb2F0NjRBcnJheSI7CiAgfQogIGZ1bmN0aW9uIGlzSW50OEFycmF5KHZhbHVlKSB7CiAgICByZXR1cm4gX2dldFR5cGVkQXJyYXlUb1N0cmluZ1RhZy5jYWxsKHZhbHVlKSA9PT0gIkludDhBcnJheSI7CiAgfQogIGZ1bmN0aW9uIGlzSW50MTZBcnJheSh2YWx1ZSkgewogICAgcmV0dXJuIF9nZXRUeXBlZEFycmF5VG9TdHJpbmdUYWcuY2FsbCh2YWx1ZSkgPT09ICJJbnQxNkFycmF5IjsKICB9CiAgZnVuY3Rpb24gaXNJbnQzMkFycmF5KHZhbHVlKSB7CiAgICByZXR1cm4gX2dldFR5cGVkQXJyYXlUb1N0cmluZ1RhZy5jYWxsKHZhbHVlKSA9PT0gIkludDMyQXJyYXkiOwogIH0KICBmdW5jdGlvbiBpc1R5cGVkQXJyYXkodmFsdWUpIHsKICAgIHJldHVybiBfZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLmNhbGwodmFsdWUpICE9PSB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZSkgewogICAgcmV0dXJuIF9nZXRUeXBlZEFycmF5VG9TdHJpbmdUYWcuY2FsbCh2YWx1ZSkgPT09ICJVaW50OEFycmF5IjsKICB9CiAgZnVuY3Rpb24gaXNVaW50OENsYW1wZWRBcnJheSh2YWx1ZSkgewogICAgcmV0dXJuIF9nZXRUeXBlZEFycmF5VG9TdHJpbmdUYWcuY2FsbCh2YWx1ZSkgPT09ICJVaW50OENsYW1wZWRBcnJheSI7CiAgfQogIGZ1bmN0aW9uIGlzVWludDE2QXJyYXkodmFsdWUpIHsKICAgIHJldHVybiBfZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLmNhbGwodmFsdWUpID09PSAiVWludDE2QXJyYXkiOwogIH0KICBmdW5jdGlvbiBpc1VpbnQzMkFycmF5KHZhbHVlKSB7CiAgICByZXR1cm4gX2dldFR5cGVkQXJyYXlUb1N0cmluZ1RhZy5jYWxsKHZhbHVlKSA9PT0gIlVpbnQzMkFycmF5IjsKICB9CiAgdmFyIHsKICAgIGlzRGF0ZTogaXNEYXRlMiwKICAgIGlzQXJndW1lbnRzT2JqZWN0OiBpc0FyZ3VtZW50c09iamVjdDIsCiAgICBpc0JpZ0ludE9iamVjdDogaXNCaWdJbnRPYmplY3QyLAogICAgaXNCb29sZWFuT2JqZWN0OiBpc0Jvb2xlYW5PYmplY3QyLAogICAgaXNOdW1iZXJPYmplY3Q6IGlzTnVtYmVyT2JqZWN0MiwKICAgIGlzU3RyaW5nT2JqZWN0OiBpc1N0cmluZ09iamVjdDIsCiAgICBpc1N5bWJvbE9iamVjdDogaXNTeW1ib2xPYmplY3QyLAogICAgaXNOYXRpdmVFcnJvcjogaXNOYXRpdmVFcnJvcjIsCiAgICBpc1JlZ0V4cDogaXNSZWdFeHAyLAogICAgaXNBc3luY0Z1bmN0aW9uOiBpc0FzeW5jRnVuY3Rpb24yLAogICAgaXNHZW5lcmF0b3JGdW5jdGlvbjogaXNHZW5lcmF0b3JGdW5jdGlvbjIsCiAgICBpc0dlbmVyYXRvck9iamVjdDogaXNHZW5lcmF0b3JPYmplY3QyLAogICAgaXNQcm9taXNlOiBpc1Byb21pc2UyLAogICAgaXNNYXA6IGlzTWFwMiwKICAgIGlzU2V0OiBpc1NldDIsCiAgICBpc01hcEl0ZXJhdG9yOiBpc01hcEl0ZXJhdG9yMiwKICAgIGlzU2V0SXRlcmF0b3I6IGlzU2V0SXRlcmF0b3IyLAogICAgaXNXZWFrTWFwOiBpc1dlYWtNYXAyLAogICAgaXNXZWFrU2V0OiBpc1dlYWtTZXQyLAogICAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcjIsCiAgICBpc0RhdGFWaWV3OiBpc0RhdGFWaWV3MiwKICAgIGlzU2hhcmVkQXJyYXlCdWZmZXI6IGlzU2hhcmVkQXJyYXlCdWZmZXIyLAogICAgaXNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6IGlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0MiwKICAgIGlzQW55QXJyYXlCdWZmZXI6IGlzQW55QXJyYXlCdWZmZXIyLAogICAgaXNCb3hlZFByaW1pdGl2ZTogaXNCb3hlZFByaW1pdGl2ZTIKICB9ID0gdHlwZXNfZXhwb3J0czsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL2Vycm9yX2NvZGVzLnRzCiAgdmFyIGNvZGVzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9oaWRlX3N0YWNrX2ZyYW1lcy50cwogIGZ1bmN0aW9uIGhpZGVTdGFja0ZyYW1lcyhmbjQpIHsKICAgIGNvbnN0IGhpZGRlbiA9ICJfX25vZGVfaW50ZXJuYWxfIiArIGZuNC5uYW1lOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuNCwgIm5hbWUiLCB7IHZhbHVlOiBoaWRkZW4gfSk7CiAgICByZXR1cm4gZm40OwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL25vcm1hbGl6ZV9lbmNvZGluZy5tanMKICBmdW5jdGlvbiBub3JtYWxpemVFbmNvZGluZzIoZW5jKSB7CiAgICBpZiAoZW5jID09IG51bGwgfHwgZW5jID09PSAidXRmOCIgfHwgZW5jID09PSAidXRmLTgiKQogICAgICByZXR1cm4gInV0ZjgiOwogICAgcmV0dXJuIHNsb3dDYXNlczIoZW5jKTsKICB9CiAgZnVuY3Rpb24gc2xvd0Nhc2VzMihlbmMpIHsKICAgIHN3aXRjaCAoZW5jLmxlbmd0aCkgewogICAgICBjYXNlIDQ6CiAgICAgICAgaWYgKGVuYyA9PT0gIlVURjgiKQogICAgICAgICAgcmV0dXJuICJ1dGY4IjsKICAgICAgICBpZiAoZW5jID09PSAidWNzMiIgfHwgZW5jID09PSAiVUNTMiIpCiAgICAgICAgICByZXR1cm4gInV0ZjE2bGUiOwogICAgICAgIGVuYyA9IGAke2VuY31gLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgaWYgKGVuYyA9PT0gInV0ZjgiKQogICAgICAgICAgcmV0dXJuICJ1dGY4IjsKICAgICAgICBpZiAoZW5jID09PSAidWNzMiIpCiAgICAgICAgICByZXR1cm4gInV0ZjE2bGUiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKGVuYyA9PT0gImhleCIgfHwgZW5jID09PSAiSEVYIiB8fCBgJHtlbmN9YC50b0xvd2VyQ2FzZSgpID09PSAiaGV4IikgewogICAgICAgICAgcmV0dXJuICJoZXgiOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSA1OgogICAgICAgIGlmIChlbmMgPT09ICJhc2NpaSIpCiAgICAgICAgICByZXR1cm4gImFzY2lpIjsKICAgICAgICBpZiAoZW5jID09PSAidWNzLTIiKQogICAgICAgICAgcmV0dXJuICJ1dGYxNmxlIjsKICAgICAgICBpZiAoZW5jID09PSAiVVRGLTgiKQogICAgICAgICAgcmV0dXJuICJ1dGY4IjsKICAgICAgICBpZiAoZW5jID09PSAiQVNDSUkiKQogICAgICAgICAgcmV0dXJuICJhc2NpaSI7CiAgICAgICAgaWYgKGVuYyA9PT0gIlVDUy0yIikKICAgICAgICAgIHJldHVybiAidXRmMTZsZSI7CiAgICAgICAgZW5jID0gYCR7ZW5jfWAudG9Mb3dlckNhc2UoKTsKICAgICAgICBpZiAoZW5jID09PSAidXRmLTgiKQogICAgICAgICAgcmV0dXJuICJ1dGY4IjsKICAgICAgICBpZiAoZW5jID09PSAiYXNjaWkiKQogICAgICAgICAgcmV0dXJuICJhc2NpaSI7CiAgICAgICAgaWYgKGVuYyA9PT0gInVjcy0yIikKICAgICAgICAgIHJldHVybiAidXRmMTZsZSI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNjoKICAgICAgICBpZiAoZW5jID09PSAiYmFzZTY0IikKICAgICAgICAgIHJldHVybiAiYmFzZTY0IjsKICAgICAgICBpZiAoZW5jID09PSAibGF0aW4xIiB8fCBlbmMgPT09ICJiaW5hcnkiKQogICAgICAgICAgcmV0dXJuICJsYXRpbjEiOwogICAgICAgIGlmIChlbmMgPT09ICJCQVNFNjQiKQogICAgICAgICAgcmV0dXJuICJiYXNlNjQiOwogICAgICAgIGlmIChlbmMgPT09ICJMQVRJTjEiIHx8IGVuYyA9PT0gIkJJTkFSWSIpCiAgICAgICAgICByZXR1cm4gImxhdGluMSI7CiAgICAgICAgZW5jID0gYCR7ZW5jfWAudG9Mb3dlckNhc2UoKTsKICAgICAgICBpZiAoZW5jID09PSAiYmFzZTY0IikKICAgICAgICAgIHJldHVybiAiYmFzZTY0IjsKICAgICAgICBpZiAoZW5jID09PSAibGF0aW4xIiB8fCBlbmMgPT09ICJiaW5hcnkiKQogICAgICAgICAgcmV0dXJuICJsYXRpbjEiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDc6CiAgICAgICAgaWYgKGVuYyA9PT0gInV0ZjE2bGUiIHx8IGVuYyA9PT0gIlVURjE2TEUiIHx8IGAke2VuY31gLnRvTG93ZXJDYXNlKCkgPT09ICJ1dGYxNmxlIikgewogICAgICAgICAgcmV0dXJuICJ1dGYxNmxlIjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgODoKICAgICAgICBpZiAoZW5jID09PSAidXRmLTE2bGUiIHx8IGVuYyA9PT0gIlVURi0xNkxFIiB8fCBgJHtlbmN9YC50b0xvd2VyQ2FzZSgpID09PSAidXRmLTE2bGUiKSB7CiAgICAgICAgICByZXR1cm4gInV0ZjE2bGUiOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSA5OgogICAgICAgIGlmIChlbmMgPT09ICJiYXNlNjR1cmwiIHx8IGVuYyA9PT0gIkJBU0U2NFVSTCIgfHwgYCR7ZW5jfWAudG9Mb3dlckNhc2UoKSA9PT0gImJhc2U2NHVybCIpIHsKICAgICAgICAgIHJldHVybiAiYmFzZTY0dXJsIjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgaWYgKGVuYyA9PT0gIiIpCiAgICAgICAgICByZXR1cm4gInV0ZjgiOwogICAgfQogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3ZhbGlkYXRvcnMubWpzCiAgZnVuY3Rpb24gaXNJbnQzMih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSAodmFsdWUgfCAwKTsKICB9CiAgZnVuY3Rpb24gaXNVaW50MzIodmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPj4+IDA7CiAgfQogIHZhciB2YWxpZGF0ZUJ1ZmZlciA9IGhpZGVTdGFja0ZyYW1lcygoYnVmZmVyLCBuYW1lID0gImJ1ZmZlciIpID0+IHsKICAgIGlmICghaXNBcnJheUJ1ZmZlclZpZXcoYnVmZmVyKSkgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoCiAgICAgICAgbmFtZSwKICAgICAgICBbIkJ1ZmZlciIsICJUeXBlZEFycmF5IiwgIkRhdGFWaWV3Il0sCiAgICAgICAgYnVmZmVyCiAgICAgICk7CiAgICB9CiAgfSk7CiAgdmFyIHZhbGlkYXRlSW50ZWdlciA9IGhpZGVTdGFja0ZyYW1lcygKICAgICh2YWx1ZSwgbmFtZSwgbWluMiA9IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLCBtYXggPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgPT4gewogICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAibnVtYmVyIikgewogICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAibnVtYmVyIiwgdmFsdWUpOwogICAgICB9CiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHsKICAgICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRShuYW1lLCAiYW4gaW50ZWdlciIsIHZhbHVlKTsKICAgICAgfQogICAgICBpZiAodmFsdWUgPCBtaW4yIHx8IHZhbHVlID4gbWF4KSB7CiAgICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgYD49ICR7bWluMn0gJiYgPD0gJHttYXh9YCwgdmFsdWUpOwogICAgICB9CiAgICB9CiAgKTsKICB2YXIgdmFsaWRhdGVPYmplY3QgPSBoaWRlU3RhY2tGcmFtZXMoKHZhbHVlLCBuYW1lLCBvcHRpb25zKSA9PiB7CiAgICBjb25zdCB1c2VEZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnMgPT0gbnVsbDsKICAgIGNvbnN0IGFsbG93QXJyYXkgPSB1c2VEZWZhdWx0T3B0aW9ucyA/IGZhbHNlIDogb3B0aW9ucy5hbGxvd0FycmF5OwogICAgY29uc3QgYWxsb3dGdW5jdGlvbiA9IHVzZURlZmF1bHRPcHRpb25zID8gZmFsc2UgOiBvcHRpb25zLmFsbG93RnVuY3Rpb247CiAgICBjb25zdCBudWxsYWJsZSA9IHVzZURlZmF1bHRPcHRpb25zID8gZmFsc2UgOiBvcHRpb25zLm51bGxhYmxlOwogICAgaWYgKCFudWxsYWJsZSAmJiB2YWx1ZSA9PT0gbnVsbCB8fCAhYWxsb3dBcnJheSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgIT09ICJvYmplY3QiICYmICghYWxsb3dGdW5jdGlvbiB8fCB0eXBlb2YgdmFsdWUgIT09ICJmdW5jdGlvbiIpKSB7CiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAiT2JqZWN0IiwgdmFsdWUpOwogICAgfQogIH0pOwogIHZhciB2YWxpZGF0ZUludDMyID0gaGlkZVN0YWNrRnJhbWVzKAogICAgKHZhbHVlLCBuYW1lLCBtaW4yID0gLTIxNDc0ODM2NDgsIG1heCA9IDIxNDc0ODM2NDcpID0+IHsKICAgICAgaWYgKCFpc0ludDMyKHZhbHVlKSkgewogICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgIm51bWJlciIsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkgewogICAgICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgImFuIGludGVnZXIiLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKG5hbWUsIGA+PSAke21pbjJ9ICYmIDw9ICR7bWF4fWAsIHZhbHVlKTsKICAgICAgfQogICAgICBpZiAodmFsdWUgPCBtaW4yIHx8IHZhbHVlID4gbWF4KSB7CiAgICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgYD49ICR7bWluMn0gJiYgPD0gJHttYXh9YCwgdmFsdWUpOwogICAgICB9CiAgICB9CiAgKTsKICB2YXIgdmFsaWRhdGVVaW50MzIgPSBoaWRlU3RhY2tGcmFtZXMoCiAgICAodmFsdWUsIG5hbWUsIHBvc2l0aXZlKSA9PiB7CiAgICAgIGlmICghaXNVaW50MzIodmFsdWUpKSB7CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gIm51bWJlciIpIHsKICAgICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAibnVtYmVyIiwgdmFsdWUpOwogICAgICAgIH0KICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRShuYW1lLCAiYW4gaW50ZWdlciIsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbWluMiA9IHBvc2l0aXZlID8gMSA6IDA7CiAgICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UoCiAgICAgICAgICBuYW1lLAogICAgICAgICAgYD49ICR7bWluMn0gJiYgPCA0Mjk0OTY3Mjk2YCwKICAgICAgICAgIHZhbHVlCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAocG9zaXRpdmUgJiYgdmFsdWUgPT09IDApIHsKICAgICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRShuYW1lLCAiPj0gMSAmJiA8IDQyOTQ5NjcyOTYiLCB2YWx1ZSk7CiAgICAgIH0KICAgIH0KICApOwogIGZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nKHZhbHVlLCBuYW1lKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIikgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgInN0cmluZyIsIHZhbHVlKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gdmFsaWRhdGVCb29sZWFuKHZhbHVlLCBuYW1lKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAiYm9vbGVhbiIpIHsKICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICJib29sZWFuIiwgdmFsdWUpOwogICAgfQogIH0KICB2YXIgdmFsaWRhdGVPbmVPZiA9IGhpZGVTdGFja0ZyYW1lcygKICAgICh2YWx1ZSwgbmFtZSwgb25lT2YpID0+IHsKICAgICAgaWYgKCFBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMuY2FsbChvbmVPZiwgdmFsdWUpKSB7CiAgICAgICAgY29uc3QgYWxsb3dlZCA9IEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoCiAgICAgICAgICBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoCiAgICAgICAgICAgIG9uZU9mLAogICAgICAgICAgICAodjE1KSA9PiB0eXBlb2YgdjE1ID09PSAic3RyaW5nIiA/IGAnJHt2MTV9J2AgOiBTdHJpbmcodjE1KQogICAgICAgICAgKSwKICAgICAgICAgICIsICIKICAgICAgICApOwogICAgICAgIGNvbnN0IHJlYXNvbiA9ICJtdXN0IGJlIG9uZSBvZjogIiArIGFsbG93ZWQ7CiAgICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19WQUxVRShuYW1lLCB2YWx1ZSwgcmVhc29uKTsKICAgICAgfQogICAgfQogICk7CiAgdmFyIHZhbGlkYXRlQ2FsbGJhY2sgPSBoaWRlU3RhY2tGcmFtZXMoKGNhbGxiYWNrKSA9PiB7CiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9DQUxMQkFDSyhjYWxsYmFjayk7CiAgICB9CiAgfSk7CiAgdmFyIHZhbGlkYXRlQWJvcnRTaWduYWwgPSBoaWRlU3RhY2tGcmFtZXMoCiAgICAoc2lnbmFsLCBuYW1lKSA9PiB7CiAgICAgIGlmIChzaWduYWwgIT09IHZvaWQgMCAmJiAoc2lnbmFsID09PSBudWxsIHx8IHR5cGVvZiBzaWduYWwgIT09ICJvYmplY3QiIHx8ICEoImFib3J0ZWQiIGluIHNpZ25hbCkpKSB7CiAgICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICJBYm9ydFNpZ25hbCIsIHNpZ25hbCk7CiAgICAgIH0KICAgIH0KICApOwogIHZhciB2YWxpZGF0ZUZ1bmN0aW9uID0gaGlkZVN0YWNrRnJhbWVzKAogICAgKHZhbHVlLCBuYW1lKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgIkZ1bmN0aW9uIiwgdmFsdWUpOwogICAgICB9CiAgICB9CiAgKTsKICB2YXIgdmFsaWRhdGVBcnJheSA9IGhpZGVTdGFja0ZyYW1lcygKICAgICh2YWx1ZSwgbmFtZSwgbWluTGVuZ3RoID0gMCkgPT4gewogICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7CiAgICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICJBcnJheSIsIHZhbHVlKTsKICAgICAgfQogICAgICBpZiAodmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7CiAgICAgICAgY29uc3QgcmVhc29uID0gYG11c3QgYmUgbG9uZ2VyIHRoYW4gJHttaW5MZW5ndGh9YDsKICAgICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIHZhbHVlLCByZWFzb24pOwogICAgICB9CiAgICB9CiAgKTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvdXRpbC50cwogIHZhciB1dGlsX2V4cG9ydHMgPSB7fTsKICBfX2V4cG9ydCh1dGlsX2V4cG9ydHMsIHsKICAgIEFMTF9QUk9QRVJUSUVTOiAoKSA9PiBBTExfUFJPUEVSVElFUywKICAgIE9OTFlfQ09ORklHVVJBQkxFOiAoKSA9PiBPTkxZX0NPTkZJR1VSQUJMRSwKICAgIE9OTFlfRU5VTUVSQUJMRTogKCkgPT4gT05MWV9FTlVNRVJBQkxFLAogICAgT05MWV9FTlVNX1dSSVRBQkxFOiAoKSA9PiBPTkxZX0VOVU1fV1JJVEFCTEUsCiAgICBPTkxZX1dSSVRBQkxFOiAoKSA9PiBPTkxZX1dSSVRBQkxFLAogICAgU0tJUF9TVFJJTkdTOiAoKSA9PiBTS0lQX1NUUklOR1MsCiAgICBTS0lQX1NZTUJPTFM6ICgpID0+IFNLSVBfU1lNQk9MUywKICAgIGdldE93bk5vbkluZGV4UHJvcGVydGllczogKCkgPT4gZ2V0T3duTm9uSW5kZXhQcm9wZXJ0aWVzLAogICAgZ3Vlc3NIYW5kbGVUeXBlOiAoKSA9PiBndWVzc0hhbmRsZVR5cGUsCiAgICBpc0FycmF5SW5kZXg6ICgpID0+IGlzQXJyYXlJbmRleAogIH0pOwogIGZ1bmN0aW9uIGd1ZXNzSGFuZGxlVHlwZShfZmQpIHsKICAgIG5vdEltcGxlbWVudGVkKCJ1dGlsLmd1ZXNzSGFuZGxlVHlwZSIpOwogIH0KICB2YXIgQUxMX1BST1BFUlRJRVMgPSAwOwogIHZhciBPTkxZX1dSSVRBQkxFID0gMTsKICB2YXIgT05MWV9FTlVNRVJBQkxFID0gMjsKICB2YXIgT05MWV9DT05GSUdVUkFCTEUgPSA0OwogIHZhciBPTkxZX0VOVU1fV1JJVEFCTEUgPSA2OwogIHZhciBTS0lQX1NUUklOR1MgPSA4OwogIHZhciBTS0lQX1NZTUJPTFMgPSAxNjsKICB2YXIgaXNOdW1lcmljTG9va3VwID0ge307CiAgZnVuY3Rpb24gaXNBcnJheUluZGV4KHZhbHVlKSB7CiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgewogICAgICBjYXNlICJudW1iZXIiOgogICAgICAgIHJldHVybiB2YWx1ZSA+PSAwICYmICh2YWx1ZSB8IDApID09PSB2YWx1ZTsKICAgICAgY2FzZSAic3RyaW5nIjogewogICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTnVtZXJpY0xvb2t1cFt2YWx1ZV07CiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBjb25zdCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIGlzTnVtZXJpY0xvb2t1cFt2YWx1ZV0gPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgbGV0IGNoMiA9IDA7CiAgICAgICAgbGV0IGk0ID0gMDsKICAgICAgICBmb3IgKDsgaTQgPCBsZW5ndGg7ICsraTQpIHsKICAgICAgICAgIGNoMiA9IHZhbHVlLmNoYXJDb2RlQXQoaTQpOwogICAgICAgICAgaWYgKGk0ID09PSAwICYmIGNoMiA9PT0gNDggJiYgbGVuZ3RoID4gMSB8fCBjaDIgPCA0OCB8fCBjaDIgPiA1NykgewogICAgICAgICAgICByZXR1cm4gaXNOdW1lcmljTG9va3VwW3ZhbHVlXSA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gaXNOdW1lcmljTG9va3VwW3ZhbHVlXSA9IHRydWU7CiAgICAgIH0KICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGdldE93bk5vbkluZGV4UHJvcGVydGllcyhvYmosIGZpbHRlcikgewogICAgbGV0IGFsbFByb3BlcnRpZXMgPSBbCiAgICAgIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaiksCiAgICAgIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKQogICAgXTsKICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHsKICAgICAgYWxsUHJvcGVydGllcyA9IGFsbFByb3BlcnRpZXMuZmlsdGVyKChrMTgpID0+ICFpc0FycmF5SW5kZXgoazE4KSk7CiAgICB9CiAgICBpZiAoZmlsdGVyID09PSBBTExfUFJPUEVSVElFUykgewogICAgICByZXR1cm4gYWxsUHJvcGVydGllczsKICAgIH0KICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgZm9yIChjb25zdCBrZXkgb2YgYWxsUHJvcGVydGllcykgewogICAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7CiAgICAgIGlmIChkZXNjID09PSB2b2lkIDApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoZmlsdGVyICYgT05MWV9XUklUQUJMRSAmJiAhZGVzYy53cml0YWJsZSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChmaWx0ZXIgJiBPTkxZX0VOVU1FUkFCTEUgJiYgIWRlc2MuZW51bWVyYWJsZSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChmaWx0ZXIgJiBPTkxZX0NPTkZJR1VSQUJMRSAmJiAhZGVzYy5jb25maWd1cmFibGUpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoZmlsdGVyICYgU0tJUF9TVFJJTkdTICYmIHR5cGVvZiBrZXkgPT09ICJzdHJpbmciKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGZpbHRlciAmIFNLSVBfU1lNQk9MUyAmJiB0eXBlb2Yga2V5ID09PSAic3ltYm9sIikgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHJlc3VsdC5wdXNoKGtleSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3V0aWwvaW5zcGVjdC5tanMKICB2YXIga09iamVjdFR5cGUgPSAwOwogIHZhciBrQXJyYXlUeXBlID0gMTsKICB2YXIga0FycmF5RXh0cmFzVHlwZSA9IDI7CiAgdmFyIGtNaW5MaW5lTGVuZ3RoID0gMTY7CiAgdmFyIGtXZWFrID0gMDsKICB2YXIga0l0ZXJhdG9yID0gMTsKICB2YXIga01hcEVudHJpZXMgPSAyOwogIHZhciBrUGVuZGluZyA9IDA7CiAgdmFyIGtSZWplY3RlZCA9IDI7CiAgdmFyIG1ldGEgPSBbCiAgICAiXFx4MDAiLAogICAgIlxceDAxIiwKICAgICJcXHgwMiIsCiAgICAiXFx4MDMiLAogICAgIlxceDA0IiwKICAgICJcXHgwNSIsCiAgICAiXFx4MDYiLAogICAgIlxceDA3IiwKICAgICJcXGIiLAogICAgIlxcdCIsCiAgICAiXFxuIiwKICAgICJcXHgwQiIsCiAgICAiXFxmIiwKICAgICJcXHIiLAogICAgIlxceDBFIiwKICAgICJcXHgwRiIsCiAgICAiXFx4MTAiLAogICAgIlxceDExIiwKICAgICJcXHgxMiIsCiAgICAiXFx4MTMiLAogICAgIlxceDE0IiwKICAgICJcXHgxNSIsCiAgICAiXFx4MTYiLAogICAgIlxceDE3IiwKICAgICJcXHgxOCIsCiAgICAiXFx4MTkiLAogICAgIlxceDFBIiwKICAgICJcXHgxQiIsCiAgICAiXFx4MUMiLAogICAgIlxceDFEIiwKICAgICJcXHgxRSIsCiAgICAiXFx4MUYiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiXFwnIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIlxcXFwiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiIiwKICAgICIiLAogICAgIiIsCiAgICAiXFx4N0YiLAogICAgIlxceDgwIiwKICAgICJcXHg4MSIsCiAgICAiXFx4ODIiLAogICAgIlxceDgzIiwKICAgICJcXHg4NCIsCiAgICAiXFx4ODUiLAogICAgIlxceDg2IiwKICAgICJcXHg4NyIsCiAgICAiXFx4ODgiLAogICAgIlxceDg5IiwKICAgICJcXHg4QSIsCiAgICAiXFx4OEIiLAogICAgIlxceDhDIiwKICAgICJcXHg4RCIsCiAgICAiXFx4OEUiLAogICAgIlxceDhGIiwKICAgICJcXHg5MCIsCiAgICAiXFx4OTEiLAogICAgIlxceDkyIiwKICAgICJcXHg5MyIsCiAgICAiXFx4OTQiLAogICAgIlxceDk1IiwKICAgICJcXHg5NiIsCiAgICAiXFx4OTciLAogICAgIlxceDk4IiwKICAgICJcXHg5OSIsCiAgICAiXFx4OUEiLAogICAgIlxceDlCIiwKICAgICJcXHg5QyIsCiAgICAiXFx4OUQiLAogICAgIlxceDlFIiwKICAgICJcXHg5RiIKICBdOwogIHZhciBpc1VuZGV0ZWN0YWJsZU9iamVjdCA9ICh2MTUpID0+IHR5cGVvZiB2MTUgPT09ICJ1bmRlZmluZWQiICYmIHYxNSAhPT0gdm9pZCAwOwogIHZhciBzdHJFc2NhcGVTZXF1ZW5jZXNSZWdFeHAgPSAvW1x4MDAtXHgxZlx4MjdceDVjXHg3Zi1ceDlmXS87CiAgdmFyIHN0ckVzY2FwZVNlcXVlbmNlc1JlcGxhY2VyID0gL1tceDAwLVx4MWZceDI3XHg1Y1x4N2YtXHg5Zl0vZzsKICB2YXIgc3RyRXNjYXBlU2VxdWVuY2VzUmVnRXhwU2luZ2xlID0gL1tceDAwLVx4MWZceDVjXHg3Zi1ceDlmXS87CiAgdmFyIHN0ckVzY2FwZVNlcXVlbmNlc1JlcGxhY2VyU2luZ2xlID0gL1tceDAwLVx4MWZceDVjXHg3Zi1ceDlmXS9nOwogIHZhciBrZXlTdHJSZWdFeHAgPSAvXlthLXpBLVpfXVthLXpBLVpfMC05XSokLzsKICB2YXIgbnVtYmVyUmVnRXhwID0gL14oMHxbMS05XVswLTldKikkLzsKICB2YXIgbm9kZU1vZHVsZXNSZWdFeHAgPSAvWy9cXF1ub2RlX21vZHVsZXNbL1xcXSguKz8pKD89Wy9cXF0pL2c7CiAgdmFyIGNsYXNzUmVnRXhwID0gL14oXHMrW14oXSo/KVxzKnsvOwogIHZhciBzdHJpcENvbW1lbnRzUmVnRXhwID0gLyhcL1wvLio/XG4pfChcL1wqKC58XG4pKj9cKlwvKS9nOwogIHZhciBpbnNwZWN0RGVmYXVsdE9wdGlvbnMgPSB7CiAgICBzaG93SGlkZGVuOiBmYWxzZSwKICAgIGRlcHRoOiAyLAogICAgY29sb3JzOiBmYWxzZSwKICAgIGN1c3RvbUluc3BlY3Q6IHRydWUsCiAgICBzaG93UHJveHk6IGZhbHNlLAogICAgbWF4QXJyYXlMZW5ndGg6IDEwMCwKICAgIG1heFN0cmluZ0xlbmd0aDogMWU0LAogICAgYnJlYWtMZW5ndGg6IDgwLAogICAgY29tcGFjdDogMywKICAgIHNvcnRlZDogZmFsc2UsCiAgICBnZXR0ZXJzOiBmYWxzZQogIH07CiAgZnVuY3Rpb24gZ2V0VXNlck9wdGlvbnMoY3R4LCBpc0Nyb3NzQ29udGV4dCkgewogICAgY29uc3QgcmV0ID0gewogICAgICBzdHlsaXplOiBjdHguc3R5bGl6ZSwKICAgICAgc2hvd0hpZGRlbjogY3R4LnNob3dIaWRkZW4sCiAgICAgIGRlcHRoOiBjdHguZGVwdGgsCiAgICAgIGNvbG9yczogY3R4LmNvbG9ycywKICAgICAgY3VzdG9tSW5zcGVjdDogY3R4LmN1c3RvbUluc3BlY3QsCiAgICAgIHNob3dQcm94eTogY3R4LnNob3dQcm94eSwKICAgICAgbWF4QXJyYXlMZW5ndGg6IGN0eC5tYXhBcnJheUxlbmd0aCwKICAgICAgbWF4U3RyaW5nTGVuZ3RoOiBjdHgubWF4U3RyaW5nTGVuZ3RoLAogICAgICBicmVha0xlbmd0aDogY3R4LmJyZWFrTGVuZ3RoLAogICAgICBjb21wYWN0OiBjdHguY29tcGFjdCwKICAgICAgc29ydGVkOiBjdHguc29ydGVkLAogICAgICBnZXR0ZXJzOiBjdHguZ2V0dGVycywKICAgICAgLi4uY3R4LnVzZXJPcHRpb25zCiAgICB9OwogICAgaWYgKGlzQ3Jvc3NDb250ZXh0KSB7CiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZXQsIG51bGwpOwogICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXQpKSB7CiAgICAgICAgaWYgKCh0eXBlb2YgcmV0W2tleV0gPT09ICJvYmplY3QiIHx8IHR5cGVvZiByZXRba2V5XSA9PT0gImZ1bmN0aW9uIikgJiYgcmV0W2tleV0gIT09IG51bGwpIHsKICAgICAgICAgIGRlbGV0ZSByZXRba2V5XTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0LnN0eWxpemUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoKHZhbHVlLCBmbGF2b3VyKSA9PiB7CiAgICAgICAgbGV0IHN0eWxpemVkOwogICAgICAgIHRyeSB7CiAgICAgICAgICBzdHlsaXplZCA9IGAke2N0eC5zdHlsaXplKHZhbHVlLCBmbGF2b3VyKX1gOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHN0eWxpemVkICE9PSAic3RyaW5nIikKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICByZXR1cm4gc3R5bGl6ZWQ7CiAgICAgIH0sIG51bGwpOwogICAgfQogICAgcmV0dXJuIHJldDsKICB9CiAgZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgb3B0cykgewogICAgY29uc3QgY3R4ID0gewogICAgICBidWRnZXQ6IHt9LAogICAgICBpbmRlbnRhdGlvbkx2bDogMCwKICAgICAgc2VlbjogW10sCiAgICAgIGN1cnJlbnREZXB0aDogMCwKICAgICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3IsCiAgICAgIHNob3dIaWRkZW46IGluc3BlY3REZWZhdWx0T3B0aW9ucy5zaG93SGlkZGVuLAogICAgICBkZXB0aDogaW5zcGVjdERlZmF1bHRPcHRpb25zLmRlcHRoLAogICAgICBjb2xvcnM6IGluc3BlY3REZWZhdWx0T3B0aW9ucy5jb2xvcnMsCiAgICAgIGN1c3RvbUluc3BlY3Q6IGluc3BlY3REZWZhdWx0T3B0aW9ucy5jdXN0b21JbnNwZWN0LAogICAgICBzaG93UHJveHk6IGluc3BlY3REZWZhdWx0T3B0aW9ucy5zaG93UHJveHksCiAgICAgIG1heEFycmF5TGVuZ3RoOiBpbnNwZWN0RGVmYXVsdE9wdGlvbnMubWF4QXJyYXlMZW5ndGgsCiAgICAgIG1heFN0cmluZ0xlbmd0aDogaW5zcGVjdERlZmF1bHRPcHRpb25zLm1heFN0cmluZ0xlbmd0aCwKICAgICAgYnJlYWtMZW5ndGg6IGluc3BlY3REZWZhdWx0T3B0aW9ucy5icmVha0xlbmd0aCwKICAgICAgY29tcGFjdDogaW5zcGVjdERlZmF1bHRPcHRpb25zLmNvbXBhY3QsCiAgICAgIHNvcnRlZDogaW5zcGVjdERlZmF1bHRPcHRpb25zLnNvcnRlZCwKICAgICAgZ2V0dGVyczogaW5zcGVjdERlZmF1bHRPcHRpb25zLmdldHRlcnMKICAgIH07CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50c1syXSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07CiAgICAgICAgfQogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHZvaWQgMCkgewogICAgICAgICAgY3R4LmNvbG9ycyA9IGFyZ3VtZW50c1szXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAiYm9vbGVhbiIpIHsKICAgICAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7CiAgICAgIH0gZWxzZSBpZiAob3B0cykgewogICAgICAgIGNvbnN0IG9wdEtleXMgPSBPYmplY3Qua2V5cyhvcHRzKTsKICAgICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgb3B0S2V5cy5sZW5ndGg7ICsraTQpIHsKICAgICAgICAgIGNvbnN0IGtleSA9IG9wdEtleXNbaTRdOwogICAgICAgICAgaWYgKGluc3BlY3REZWZhdWx0T3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IGtleSA9PT0gInN0eWxpemUiKSB7CiAgICAgICAgICAgIGN0eFtrZXldID0gb3B0c1trZXldOwogICAgICAgICAgfSBlbHNlIGlmIChjdHgudXNlck9wdGlvbnMgPT09IHZvaWQgMCkgewogICAgICAgICAgICBjdHgudXNlck9wdGlvbnMgPSBvcHRzOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGN0eC5jb2xvcnMpCiAgICAgIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjsKICAgIGlmIChjdHgubWF4QXJyYXlMZW5ndGggPT09IG51bGwpCiAgICAgIGN0eC5tYXhBcnJheUxlbmd0aCA9IEluZmluaXR5OwogICAgaWYgKGN0eC5tYXhTdHJpbmdMZW5ndGggPT09IG51bGwpCiAgICAgIGN0eC5tYXhTdHJpbmdMZW5ndGggPSBJbmZpbml0eTsKICAgIHJldHVybiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCAwKTsKICB9CiAgdmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPSBTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOwogIGluc3BlY3QuY3VzdG9tID0gY3VzdG9tSW5zcGVjdFN5bWJvbDsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zcGVjdCwgImRlZmF1bHRPcHRpb25zIiwgewogICAgZ2V0KCkgewogICAgICByZXR1cm4gaW5zcGVjdERlZmF1bHRPcHRpb25zOwogICAgfSwKICAgIHNldChvcHRpb25zKSB7CiAgICAgIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMsICJvcHRpb25zIik7CiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGluc3BlY3REZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7CiAgICB9CiAgfSk7CiAgdmFyIGRlZmF1bHRGRyA9IDM5OwogIHZhciBkZWZhdWx0QkcgPSA0OTsKICBpbnNwZWN0LmNvbG9ycyA9IE9iamVjdC5hc3NpZ24oLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCksIHsKICAgIHJlc2V0OiBbMCwgMF0sCiAgICBib2xkOiBbMSwgMjJdLAogICAgZGltOiBbMiwgMjJdLAogICAgaXRhbGljOiBbMywgMjNdLAogICAgdW5kZXJsaW5lOiBbNCwgMjRdLAogICAgYmxpbms6IFs1LCAyNV0sCiAgICBpbnZlcnNlOiBbNywgMjddLAogICAgaGlkZGVuOiBbOCwgMjhdLAogICAgc3RyaWtldGhyb3VnaDogWzksIDI5XSwKICAgIGRvdWJsZXVuZGVybGluZTogWzIxLCAyNF0sCiAgICBibGFjazogWzMwLCBkZWZhdWx0RkddLAogICAgcmVkOiBbMzEsIGRlZmF1bHRGR10sCiAgICBncmVlbjogWzMyLCBkZWZhdWx0RkddLAogICAgeWVsbG93OiBbMzMsIGRlZmF1bHRGR10sCiAgICBibHVlOiBbMzQsIGRlZmF1bHRGR10sCiAgICBtYWdlbnRhOiBbMzUsIGRlZmF1bHRGR10sCiAgICBjeWFuOiBbMzYsIGRlZmF1bHRGR10sCiAgICB3aGl0ZTogWzM3LCBkZWZhdWx0RkddLAogICAgYmdCbGFjazogWzQwLCBkZWZhdWx0QkddLAogICAgYmdSZWQ6IFs0MSwgZGVmYXVsdEJHXSwKICAgIGJnR3JlZW46IFs0MiwgZGVmYXVsdEJHXSwKICAgIGJnWWVsbG93OiBbNDMsIGRlZmF1bHRCR10sCiAgICBiZ0JsdWU6IFs0NCwgZGVmYXVsdEJHXSwKICAgIGJnTWFnZW50YTogWzQ1LCBkZWZhdWx0QkddLAogICAgYmdDeWFuOiBbNDYsIGRlZmF1bHRCR10sCiAgICBiZ1doaXRlOiBbNDcsIGRlZmF1bHRCR10sCiAgICBmcmFtZWQ6IFs1MSwgNTRdLAogICAgb3ZlcmxpbmVkOiBbNTMsIDU1XSwKICAgIGdyYXk6IFs5MCwgZGVmYXVsdEZHXSwKICAgIHJlZEJyaWdodDogWzkxLCBkZWZhdWx0RkddLAogICAgZ3JlZW5CcmlnaHQ6IFs5MiwgZGVmYXVsdEZHXSwKICAgIHllbGxvd0JyaWdodDogWzkzLCBkZWZhdWx0RkddLAogICAgYmx1ZUJyaWdodDogWzk0LCBkZWZhdWx0RkddLAogICAgbWFnZW50YUJyaWdodDogWzk1LCBkZWZhdWx0RkddLAogICAgY3lhbkJyaWdodDogWzk2LCBkZWZhdWx0RkddLAogICAgd2hpdGVCcmlnaHQ6IFs5NywgZGVmYXVsdEZHXSwKICAgIGJnR3JheTogWzEwMCwgZGVmYXVsdEJHXSwKICAgIGJnUmVkQnJpZ2h0OiBbMTAxLCBkZWZhdWx0QkddLAogICAgYmdHcmVlbkJyaWdodDogWzEwMiwgZGVmYXVsdEJHXSwKICAgIGJnWWVsbG93QnJpZ2h0OiBbMTAzLCBkZWZhdWx0QkddLAogICAgYmdCbHVlQnJpZ2h0OiBbMTA0LCBkZWZhdWx0QkddLAogICAgYmdNYWdlbnRhQnJpZ2h0OiBbMTA1LCBkZWZhdWx0QkddLAogICAgYmdDeWFuQnJpZ2h0OiBbMTA2LCBkZWZhdWx0QkddLAogICAgYmdXaGl0ZUJyaWdodDogWzEwNywgZGVmYXVsdEJHXQogIH0pOwogIGZ1bmN0aW9uIGRlZmluZUNvbG9yQWxpYXModGFyZ2V0LCBhbGlhcykgewogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3BlY3QuY29sb3JzLCBhbGlhcywgewogICAgICBnZXQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXNbdGFyZ2V0XTsKICAgICAgfSwKICAgICAgc2V0KHZhbHVlKSB7CiAgICAgICAgdGhpc1t0YXJnZXRdID0gdmFsdWU7CiAgICAgIH0sCiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgZW51bWVyYWJsZTogZmFsc2UKICAgIH0pOwogIH0KICBkZWZpbmVDb2xvckFsaWFzKCJncmF5IiwgImdyZXkiKTsKICBkZWZpbmVDb2xvckFsaWFzKCJncmF5IiwgImJsYWNrQnJpZ2h0Iik7CiAgZGVmaW5lQ29sb3JBbGlhcygiYmdHcmF5IiwgImJnR3JleSIpOwogIGRlZmluZUNvbG9yQWxpYXMoImJnR3JheSIsICJiZ0JsYWNrQnJpZ2h0Iik7CiAgZGVmaW5lQ29sb3JBbGlhcygiZGltIiwgImZhaW50Iik7CiAgZGVmaW5lQ29sb3JBbGlhcygic3RyaWtldGhyb3VnaCIsICJjcm9zc2Vkb3V0Iik7CiAgZGVmaW5lQ29sb3JBbGlhcygic3RyaWtldGhyb3VnaCIsICJzdHJpa2VUaHJvdWdoIik7CiAgZGVmaW5lQ29sb3JBbGlhcygic3RyaWtldGhyb3VnaCIsICJjcm9zc2VkT3V0Iik7CiAgZGVmaW5lQ29sb3JBbGlhcygiaGlkZGVuIiwgImNvbmNlYWwiKTsKICBkZWZpbmVDb2xvckFsaWFzKCJpbnZlcnNlIiwgInN3YXBDb2xvcnMiKTsKICBkZWZpbmVDb2xvckFsaWFzKCJpbnZlcnNlIiwgInN3YXBjb2xvcnMiKTsKICBkZWZpbmVDb2xvckFsaWFzKCJkb3VibGV1bmRlcmxpbmUiLCAiZG91YmxlVW5kZXJsaW5lIik7CiAgaW5zcGVjdC5zdHlsZXMgPSBPYmplY3QuYXNzaWduKC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCB7CiAgICBzcGVjaWFsOiAiY3lhbiIsCiAgICBudW1iZXI6ICJ5ZWxsb3ciLAogICAgYmlnaW50OiAieWVsbG93IiwKICAgIGJvb2xlYW46ICJ5ZWxsb3ciLAogICAgdW5kZWZpbmVkOiAiZ3JleSIsCiAgICBudWxsOiAiYm9sZCIsCiAgICBzdHJpbmc6ICJncmVlbiIsCiAgICBzeW1ib2w6ICJncmVlbiIsCiAgICBkYXRlOiAibWFnZW50YSIsCiAgICByZWdleHA6ICJyZWQiLAogICAgbW9kdWxlOiAidW5kZXJsaW5lIgogIH0pOwogIGZ1bmN0aW9uIGFkZFF1b3RlcyhzdHIyLCBxdW90ZXMpIHsKICAgIGlmIChxdW90ZXMgPT09IC0xKSB7CiAgICAgIHJldHVybiBgIiR7c3RyMn0iYDsKICAgIH0KICAgIGlmIChxdW90ZXMgPT09IC0yKSB7CiAgICAgIHJldHVybiBgXGAke3N0cjJ9XGBgOwogICAgfQogICAgcmV0dXJuIGAnJHtzdHIyfSdgOwogIH0KICB2YXIgZXNjYXBlRm4gPSAoc3RyMikgPT4gbWV0YVtzdHIyLmNoYXJDb2RlQXQoMCldOwogIGZ1bmN0aW9uIHN0ckVzY2FwZShzdHIyKSB7CiAgICBsZXQgZXNjYXBlVGVzdCA9IHN0ckVzY2FwZVNlcXVlbmNlc1JlZ0V4cDsKICAgIGxldCBlc2NhcGVSZXBsYWNlID0gc3RyRXNjYXBlU2VxdWVuY2VzUmVwbGFjZXI7CiAgICBsZXQgc2luZ2xlUXVvdGUgPSAzOTsKICAgIGlmIChzdHIyLmluY2x1ZGVzKCInIikpIHsKICAgICAgaWYgKCFzdHIyLmluY2x1ZGVzKCciJykpIHsKICAgICAgICBzaW5nbGVRdW90ZSA9IC0xOwogICAgICB9IGVsc2UgaWYgKCFzdHIyLmluY2x1ZGVzKCJgIikgJiYgIXN0cjIuaW5jbHVkZXMoIiR7IikpIHsKICAgICAgICBzaW5nbGVRdW90ZSA9IC0yOwogICAgICB9CiAgICAgIGlmIChzaW5nbGVRdW90ZSAhPT0gMzkpIHsKICAgICAgICBlc2NhcGVUZXN0ID0gc3RyRXNjYXBlU2VxdWVuY2VzUmVnRXhwU2luZ2xlOwogICAgICAgIGVzY2FwZVJlcGxhY2UgPSBzdHJFc2NhcGVTZXF1ZW5jZXNSZXBsYWNlclNpbmdsZTsKICAgICAgfQogICAgfQogICAgaWYgKHN0cjIubGVuZ3RoIDwgNWUzICYmICFlc2NhcGVUZXN0LnRlc3Qoc3RyMikpIHsKICAgICAgcmV0dXJuIGFkZFF1b3RlcyhzdHIyLCBzaW5nbGVRdW90ZSk7CiAgICB9CiAgICBpZiAoc3RyMi5sZW5ndGggPiAxMDApIHsKICAgICAgc3RyMiA9IHN0cjIucmVwbGFjZShlc2NhcGVSZXBsYWNlLCBlc2NhcGVGbik7CiAgICAgIHJldHVybiBhZGRRdW90ZXMoc3RyMiwgc2luZ2xlUXVvdGUpOwogICAgfQogICAgbGV0IHJlc3VsdCA9ICIiOwogICAgbGV0IGxhc3QgPSAwOwogICAgY29uc3QgbGFzdEluZGV4ID0gc3RyMi5sZW5ndGg7CiAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgbGFzdEluZGV4OyBpNCsrKSB7CiAgICAgIGNvbnN0IHBvaW50ID0gc3RyMi5jaGFyQ29kZUF0KGk0KTsKICAgICAgaWYgKHBvaW50ID09PSBzaW5nbGVRdW90ZSB8fCBwb2ludCA9PT0gOTIgfHwgcG9pbnQgPCAzMiB8fCBwb2ludCA+IDEyNiAmJiBwb2ludCA8IDE2MCkgewogICAgICAgIGlmIChsYXN0ID09PSBpNCkgewogICAgICAgICAgcmVzdWx0ICs9IG1ldGFbcG9pbnRdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgKz0gYCR7c3RyMi5zbGljZShsYXN0LCBpNCl9JHttZXRhW3BvaW50XX1gOwogICAgICAgIH0KICAgICAgICBsYXN0ID0gaTQgKyAxOwogICAgICB9CiAgICB9CiAgICBpZiAobGFzdCAhPT0gbGFzdEluZGV4KSB7CiAgICAgIHJlc3VsdCArPSBzdHIyLnNsaWNlKGxhc3QpOwogICAgfQogICAgcmV0dXJuIGFkZFF1b3RlcyhyZXN1bHQsIHNpbmdsZVF1b3RlKTsKICB9CiAgZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIyLCBzdHlsZVR5cGUpIHsKICAgIGNvbnN0IHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTsKICAgIGlmIChzdHlsZSAhPT0gdm9pZCAwKSB7CiAgICAgIGNvbnN0IGNvbG9yID0gaW5zcGVjdC5jb2xvcnNbc3R5bGVdOwogICAgICBpZiAoY29sb3IgIT09IHZvaWQgMCkgewogICAgICAgIHJldHVybiBgXHgxQlske2NvbG9yWzBdfW0ke3N0cjJ9XHgxQlske2NvbG9yWzFdfW1gOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3RyMjsKICB9CiAgZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyMikgewogICAgcmV0dXJuIHN0cjI7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdHlwZWRBcnJheSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHZhbHVlICE9PSAiZnVuY3Rpb24iICYmICFpc1VuZGV0ZWN0YWJsZU9iamVjdCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuIGZvcm1hdFByaW1pdGl2ZShjdHguc3R5bGl6ZSwgdmFsdWUsIGN0eCk7CiAgICB9CiAgICBpZiAodmFsdWUgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCJudWxsIiwgIm51bGwiKTsKICAgIH0KICAgIGNvbnN0IGNvbnRleHQgPSB2YWx1ZTsKICAgIGNvbnN0IHByb3h5ID0gdm9pZCAwOwogICAgaWYgKGN0eC5jdXN0b21JbnNwZWN0KSB7CiAgICAgIGNvbnN0IG1heWJlQ3VzdG9tID0gdmFsdWVbY3VzdG9tSW5zcGVjdFN5bWJvbF07CiAgICAgIGlmICh0eXBlb2YgbWF5YmVDdXN0b20gPT09ICJmdW5jdGlvbiIgJiYgbWF5YmVDdXN0b20gIT09IGluc3BlY3QgJiYgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkgewogICAgICAgIGNvbnN0IGRlcHRoID0gY3R4LmRlcHRoID09PSBudWxsID8gbnVsbCA6IGN0eC5kZXB0aCAtIHJlY3Vyc2VUaW1lczsKICAgICAgICBjb25zdCBpc0Nyb3NzQ29udGV4dCA9IHByb3h5ICE9PSB2b2lkIDAgfHwgIShjb250ZXh0IGluc3RhbmNlb2YgT2JqZWN0KTsKICAgICAgICBjb25zdCByZXQgPSBtYXliZUN1c3RvbS5jYWxsKAogICAgICAgICAgY29udGV4dCwKICAgICAgICAgIGRlcHRoLAogICAgICAgICAgZ2V0VXNlck9wdGlvbnMoY3R4LCBpc0Nyb3NzQ29udGV4dCkKICAgICAgICApOwogICAgICAgIGlmIChyZXQgIT09IGNvbnRleHQpIHsKICAgICAgICAgIGlmICh0eXBlb2YgcmV0ICE9PSAic3RyaW5nIikgewogICAgICAgICAgICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCByZXQsIHJlY3Vyc2VUaW1lcyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmV0LnJlcGxhY2UoL1xuL2csIGAKJHsiICIucmVwZWF0KGN0eC5pbmRlbnRhdGlvbkx2bCl9YCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoY3R4LnNlZW4uaW5jbHVkZXModmFsdWUpKSB7CiAgICAgIGxldCBpbmRleCA9IDE7CiAgICAgIGlmIChjdHguY2lyY3VsYXIgPT09IHZvaWQgMCkgewogICAgICAgIGN0eC5jaXJjdWxhciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgICAgY3R4LmNpcmN1bGFyLnNldCh2YWx1ZSwgaW5kZXgpOwogICAgICB9IGVsc2UgewogICAgICAgIGluZGV4ID0gY3R4LmNpcmN1bGFyLmdldCh2YWx1ZSk7CiAgICAgICAgaWYgKGluZGV4ID09PSB2b2lkIDApIHsKICAgICAgICAgIGluZGV4ID0gY3R4LmNpcmN1bGFyLnNpemUgKyAxOwogICAgICAgICAgY3R4LmNpcmN1bGFyLnNldCh2YWx1ZSwgaW5kZXgpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY3R4LnN0eWxpemUoYFtDaXJjdWxhciAqJHtpbmRleH1dYCwgInNwZWNpYWwiKTsKICAgIH0KICAgIHJldHVybiBmb3JtYXRSYXcoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB0eXBlZEFycmF5KTsKICB9CiAgZnVuY3Rpb24gZm9ybWF0UmF3KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdHlwZWRBcnJheSkgewogICAgbGV0IGtleXM7CiAgICBsZXQgcHJvdG9Qcm9wczsKICAgIGlmIChjdHguc2hvd0hpZGRlbiAmJiAocmVjdXJzZVRpbWVzIDw9IGN0eC5kZXB0aCB8fCBjdHguZGVwdGggPT09IG51bGwpKSB7CiAgICAgIHByb3RvUHJvcHMgPSBbXTsKICAgIH0KICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlLCBjdHgsIHJlY3Vyc2VUaW1lcywgcHJvdG9Qcm9wcyk7CiAgICBpZiAocHJvdG9Qcm9wcyAhPT0gdm9pZCAwICYmIHByb3RvUHJvcHMubGVuZ3RoID09PSAwKSB7CiAgICAgIHByb3RvUHJvcHMgPSB2b2lkIDA7CiAgICB9CiAgICBsZXQgdGFnID0gdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTsKICAgIGlmICh0eXBlb2YgdGFnICE9PSAic3RyaW5nIikgewogICAgICB0YWcgPSAiIjsKICAgIH0KICAgIGxldCBiYXNlID0gIiI7CiAgICBsZXQgZm9ybWF0dGVyID0gZ2V0RW1wdHlGb3JtYXRBcnJheTsKICAgIGxldCBicmFjZXM7CiAgICBsZXQgbm9JdGVyYXRvciA9IHRydWU7CiAgICBsZXQgaTQgPSAwOwogICAgY29uc3QgZmlsdGVyID0gY3R4LnNob3dIaWRkZW4gPyBBTExfUFJPUEVSVElFUyA6IE9OTFlfRU5VTUVSQUJMRTsKICAgIGxldCBleHRyYXNUeXBlID0ga09iamVjdFR5cGU7CiAgICBpZiAodmFsdWVbU3ltYm9sLml0ZXJhdG9yXSB8fCBjb25zdHJ1Y3RvciA9PT0gbnVsbCkgewogICAgICBub0l0ZXJhdG9yID0gZmFsc2U7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgewogICAgICAgIGNvbnN0IHByZWZpeCA9IGNvbnN0cnVjdG9yICE9PSAiQXJyYXkiIHx8IHRhZyAhPT0gIiIgPyBnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgIkFycmF5IiwgYCgke3ZhbHVlLmxlbmd0aH0pYCkgOiAiIjsKICAgICAgICBrZXlzID0gZ2V0T3duTm9uSW5kZXhQcm9wZXJ0aWVzKHZhbHVlLCBmaWx0ZXIpOwogICAgICAgIGJyYWNlcyA9IFtgJHtwcmVmaXh9W2AsICJdIl07CiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCAmJiBrZXlzLmxlbmd0aCA9PT0gMCAmJiBwcm90b1Byb3BzID09PSB2b2lkIDApIHsKICAgICAgICAgIHJldHVybiBgJHticmFjZXNbMF19XWA7CiAgICAgICAgfQogICAgICAgIGV4dHJhc1R5cGUgPSBrQXJyYXlFeHRyYXNUeXBlOwogICAgICAgIGZvcm1hdHRlciA9IGZvcm1hdEFycmF5OwogICAgICB9IGVsc2UgaWYgKGlzU2V0Mih2YWx1ZSkpIHsKICAgICAgICBjb25zdCBzaXplID0gdmFsdWUuc2l6ZTsKICAgICAgICBjb25zdCBwcmVmaXggPSBnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgIlNldCIsIGAoJHtzaXplfSlgKTsKICAgICAgICBrZXlzID0gZ2V0S2V5cyh2YWx1ZSwgY3R4LnNob3dIaWRkZW4pOwogICAgICAgIGZvcm1hdHRlciA9IGNvbnN0cnVjdG9yICE9PSBudWxsID8gZm9ybWF0U2V0LmJpbmQobnVsbCwgdmFsdWUpIDogZm9ybWF0U2V0LmJpbmQobnVsbCwgdmFsdWUudmFsdWVzKCkpOwogICAgICAgIGlmIChzaXplID09PSAwICYmIGtleXMubGVuZ3RoID09PSAwICYmIHByb3RvUHJvcHMgPT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIGAke3ByZWZpeH17fWA7CiAgICAgICAgfQogICAgICAgIGJyYWNlcyA9IFtgJHtwcmVmaXh9e2AsICJ9Il07CiAgICAgIH0gZWxzZSBpZiAoaXNNYXAyKHZhbHVlKSkgewogICAgICAgIGNvbnN0IHNpemUgPSB2YWx1ZS5zaXplOwogICAgICAgIGNvbnN0IHByZWZpeCA9IGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCAiTWFwIiwgYCgke3NpemV9KWApOwogICAgICAgIGtleXMgPSBnZXRLZXlzKHZhbHVlLCBjdHguc2hvd0hpZGRlbik7CiAgICAgICAgZm9ybWF0dGVyID0gY29uc3RydWN0b3IgIT09IG51bGwgPyBmb3JtYXRNYXAuYmluZChudWxsLCB2YWx1ZSkgOiBmb3JtYXRNYXAuYmluZChudWxsLCB2YWx1ZS5lbnRyaWVzKCkpOwogICAgICAgIGlmIChzaXplID09PSAwICYmIGtleXMubGVuZ3RoID09PSAwICYmIHByb3RvUHJvcHMgPT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIGAke3ByZWZpeH17fWA7CiAgICAgICAgfQogICAgICAgIGJyYWNlcyA9IFtgJHtwcmVmaXh9e2AsICJ9Il07CiAgICAgIH0gZWxzZSBpZiAoaXNUeXBlZEFycmF5KHZhbHVlKSkgewogICAgICAgIGtleXMgPSBnZXRPd25Ob25JbmRleFByb3BlcnRpZXModmFsdWUsIGZpbHRlcik7CiAgICAgICAgY29uc3QgYm91bmQgPSB2YWx1ZTsKICAgICAgICBjb25zdCBmYWxsYmFjayA9ICIiOwogICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gbnVsbCkgewogICAgICAgIH0KICAgICAgICBjb25zdCBzaXplID0gdmFsdWUubGVuZ3RoOwogICAgICAgIGNvbnN0IHByZWZpeCA9IGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBmYWxsYmFjaywgYCgke3NpemV9KWApOwogICAgICAgIGJyYWNlcyA9IFtgJHtwcmVmaXh9W2AsICJdIl07CiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCAmJiBrZXlzLmxlbmd0aCA9PT0gMCAmJiAhY3R4LnNob3dIaWRkZW4pIHsKICAgICAgICAgIHJldHVybiBgJHticmFjZXNbMF19XWA7CiAgICAgICAgfQogICAgICAgIGZvcm1hdHRlciA9IGZvcm1hdFR5cGVkQXJyYXkuYmluZChudWxsLCBib3VuZCwgc2l6ZSk7CiAgICAgICAgZXh0cmFzVHlwZSA9IGtBcnJheUV4dHJhc1R5cGU7CiAgICAgIH0gZWxzZSBpZiAoaXNNYXBJdGVyYXRvcjIodmFsdWUpKSB7CiAgICAgICAga2V5cyA9IGdldEtleXModmFsdWUsIGN0eC5zaG93SGlkZGVuKTsKICAgICAgICBicmFjZXMgPSBnZXRJdGVyYXRvckJyYWNlcygiTWFwIiwgdGFnKTsKICAgICAgICBmb3JtYXR0ZXIgPSBmb3JtYXRJdGVyYXRvci5iaW5kKG51bGwsIGJyYWNlcyk7CiAgICAgIH0gZWxzZSBpZiAoaXNTZXRJdGVyYXRvcjIodmFsdWUpKSB7CiAgICAgICAga2V5cyA9IGdldEtleXModmFsdWUsIGN0eC5zaG93SGlkZGVuKTsKICAgICAgICBicmFjZXMgPSBnZXRJdGVyYXRvckJyYWNlcygiU2V0IiwgdGFnKTsKICAgICAgICBmb3JtYXR0ZXIgPSBmb3JtYXRJdGVyYXRvci5iaW5kKG51bGwsIGJyYWNlcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbm9JdGVyYXRvciA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChub0l0ZXJhdG9yKSB7CiAgICAgIGtleXMgPSBnZXRLZXlzKHZhbHVlLCBjdHguc2hvd0hpZGRlbik7CiAgICAgIGJyYWNlcyA9IFsieyIsICJ9Il07CiAgICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gIk9iamVjdCIpIHsKICAgICAgICBpZiAoaXNBcmd1bWVudHNPYmplY3QyKHZhbHVlKSkgewogICAgICAgICAgYnJhY2VzWzBdID0gIltBcmd1bWVudHNdIHsiOwogICAgICAgIH0gZWxzZSBpZiAodGFnICE9PSAiIikgewogICAgICAgICAgYnJhY2VzWzBdID0gYCR7Z2V0UHJlZml4KGNvbnN0cnVjdG9yLCB0YWcsICJPYmplY3QiKX17YDsKICAgICAgICB9CiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmIHByb3RvUHJvcHMgPT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIGAke2JyYWNlc1swXX19YDsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgYmFzZSA9IGdldEZ1bmN0aW9uQmFzZSh2YWx1ZSwgY29uc3RydWN0b3IsIHRhZyk7CiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmIHByb3RvUHJvcHMgPT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKGJhc2UsICJzcGVjaWFsIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlzUmVnRXhwMih2YWx1ZSkpIHsKICAgICAgICBiYXNlID0gUmVnRXhwKGNvbnN0cnVjdG9yICE9PSBudWxsID8gdmFsdWUgOiBuZXcgUmVnRXhwKHZhbHVlKSkudG9TdHJpbmcoKTsKICAgICAgICBjb25zdCBwcmVmaXggPSBnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgIlJlZ0V4cCIpOwogICAgICAgIGlmIChwcmVmaXggIT09ICJSZWdFeHAgIikgewogICAgICAgICAgYmFzZSA9IGAke3ByZWZpeH0ke2Jhc2V9YDsKICAgICAgICB9CiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmIHByb3RvUHJvcHMgPT09IHZvaWQgMCB8fCByZWN1cnNlVGltZXMgPiBjdHguZGVwdGggJiYgY3R4LmRlcHRoICE9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gY3R4LnN0eWxpemUoYmFzZSwgInJlZ2V4cCIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpc0RhdGUyKHZhbHVlKSkgewogICAgICAgIGJhc2UgPSBOdW1iZXIuaXNOYU4odmFsdWUuZ2V0VGltZSgpKSA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZS50b0lTT1N0cmluZygpOwogICAgICAgIGNvbnN0IHByZWZpeCA9IGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCAiRGF0ZSIpOwogICAgICAgIGlmIChwcmVmaXggIT09ICJEYXRlICIpIHsKICAgICAgICAgIGJhc2UgPSBgJHtwcmVmaXh9JHtiYXNlfWA7CiAgICAgICAgfQogICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiBwcm90b1Byb3BzID09PSB2b2lkIDApIHsKICAgICAgICAgIHJldHVybiBjdHguc3R5bGl6ZShiYXNlLCAiZGF0ZSIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7CiAgICAgICAgYmFzZSA9IGZvcm1hdEVycm9yKHZhbHVlLCBjb25zdHJ1Y3RvciwgdGFnLCBjdHgsIGtleXMpOwogICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiBwcm90b1Byb3BzID09PSB2b2lkIDApIHsKICAgICAgICAgIHJldHVybiBiYXNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpc0FueUFycmF5QnVmZmVyMih2YWx1ZSkpIHsKICAgICAgICBjb25zdCBhcnJheVR5cGUgPSBpc0FycmF5QnVmZmVyMih2YWx1ZSkgPyAiQXJyYXlCdWZmZXIiIDogIlNoYXJlZEFycmF5QnVmZmVyIjsKICAgICAgICBjb25zdCBwcmVmaXggPSBnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgYXJyYXlUeXBlKTsKICAgICAgICBpZiAodHlwZWRBcnJheSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBmb3JtYXR0ZXIgPSBmb3JtYXRBcnJheUJ1ZmZlcjsKICAgICAgICB9IGVsc2UgaWYgKGtleXMubGVuZ3RoID09PSAwICYmIHByb3RvUHJvcHMgPT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIHByZWZpeCArIGB7IGJ5dGVMZW5ndGg6ICR7Zm9ybWF0TnVtYmVyKGN0eC5zdHlsaXplLCB2YWx1ZS5ieXRlTGVuZ3RoKX0gfWA7CiAgICAgICAgfQogICAgICAgIGJyYWNlc1swXSA9IGAke3ByZWZpeH17YDsKICAgICAgICBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKGtleXMsICJieXRlTGVuZ3RoIik7CiAgICAgIH0gZWxzZSBpZiAoaXNEYXRhVmlldzIodmFsdWUpKSB7CiAgICAgICAgYnJhY2VzWzBdID0gYCR7Z2V0UHJlZml4KGNvbnN0cnVjdG9yLCB0YWcsICJEYXRhVmlldyIpfXtgOwogICAgICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoa2V5cywgImJ5dGVMZW5ndGgiLCAiYnl0ZU9mZnNldCIsICJidWZmZXIiKTsKICAgICAgfSBlbHNlIGlmIChpc1Byb21pc2UyKHZhbHVlKSkgewogICAgICAgIGJyYWNlc1swXSA9IGAke2dldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCAiUHJvbWlzZSIpfXtgOwogICAgICAgIGZvcm1hdHRlciA9IGZvcm1hdFByb21pc2U7CiAgICAgIH0gZWxzZSBpZiAoaXNXZWFrU2V0Mih2YWx1ZSkpIHsKICAgICAgICBicmFjZXNbMF0gPSBgJHtnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgIldlYWtTZXQiKX17YDsKICAgICAgICBmb3JtYXR0ZXIgPSBjdHguc2hvd0hpZGRlbiA/IGZvcm1hdFdlYWtTZXQgOiBmb3JtYXRXZWFrQ29sbGVjdGlvbjsKICAgICAgfSBlbHNlIGlmIChpc1dlYWtNYXAyKHZhbHVlKSkgewogICAgICAgIGJyYWNlc1swXSA9IGAke2dldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCAiV2Vha01hcCIpfXtgOwogICAgICAgIGZvcm1hdHRlciA9IGN0eC5zaG93SGlkZGVuID8gZm9ybWF0V2Vha01hcCA6IGZvcm1hdFdlYWtDb2xsZWN0aW9uOwogICAgICB9IGVsc2UgaWYgKGlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0Mih2YWx1ZSkpIHsKICAgICAgICBicmFjZXNbMF0gPSBgJHtnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgIk1vZHVsZSIpfXtgOwogICAgICAgIGZvcm1hdHRlciA9IGZvcm1hdE5hbWVzcGFjZU9iamVjdC5iaW5kKG51bGwsIGtleXMpOwogICAgICB9IGVsc2UgaWYgKGlzQm94ZWRQcmltaXRpdmUyKHZhbHVlKSkgewogICAgICAgIGJhc2UgPSBnZXRCb3hlZEJhc2UodmFsdWUsIGN0eCwga2V5cywgY29uc3RydWN0b3IsIHRhZyk7CiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwICYmIHByb3RvUHJvcHMgPT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIGJhc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiBwcm90b1Byb3BzID09PSB2b2lkIDApIHsKICAgICAgICAgIHJldHVybiBgJHtnZXRDdHhTdHlsZSh2YWx1ZSwgY29uc3RydWN0b3IsIHRhZyl9e31gOwogICAgICAgIH0KICAgICAgICBicmFjZXNbMF0gPSBgJHtnZXRDdHhTdHlsZSh2YWx1ZSwgY29uc3RydWN0b3IsIHRhZyl9e2A7CiAgICAgIH0KICAgIH0KICAgIGlmIChyZWN1cnNlVGltZXMgPiBjdHguZGVwdGggJiYgY3R4LmRlcHRoICE9PSBudWxsKSB7CiAgICAgIGxldCBjb25zdHJ1Y3Rvck5hbWUgPSBnZXRDdHhTdHlsZSh2YWx1ZSwgY29uc3RydWN0b3IsIHRhZykuc2xpY2UoMCwgLTEpOwogICAgICBpZiAoY29uc3RydWN0b3IgIT09IG51bGwpIHsKICAgICAgICBjb25zdHJ1Y3Rvck5hbWUgPSBgWyR7Y29uc3RydWN0b3JOYW1lfV1gOwogICAgICB9CiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShjb25zdHJ1Y3Rvck5hbWUsICJzcGVjaWFsIik7CiAgICB9CiAgICByZWN1cnNlVGltZXMgKz0gMTsKICAgIGN0eC5zZWVuLnB1c2godmFsdWUpOwogICAgY3R4LmN1cnJlbnREZXB0aCA9IHJlY3Vyc2VUaW1lczsKICAgIGxldCBvdXRwdXQ7CiAgICBjb25zdCBpbmRlbnRhdGlvbkx2bCA9IGN0eC5pbmRlbnRhdGlvbkx2bDsKICAgIHRyeSB7CiAgICAgIG91dHB1dCA9IGZvcm1hdHRlcihjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpOwogICAgICBmb3IgKGk0ID0gMDsgaTQgPCBrZXlzLmxlbmd0aDsgaTQrKykgewogICAgICAgIG91dHB1dC5wdXNoKAogICAgICAgICAgZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCBrZXlzW2k0XSwgZXh0cmFzVHlwZSkKICAgICAgICApOwogICAgICB9CiAgICAgIGlmIChwcm90b1Byb3BzICE9PSB2b2lkIDApIHsKICAgICAgICBvdXRwdXQucHVzaCguLi5wcm90b1Byb3BzKTsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IGdldEN0eFN0eWxlKHZhbHVlLCBjb25zdHJ1Y3RvciwgdGFnKS5zbGljZSgwLCAtMSk7CiAgICAgIHJldHVybiBoYW5kbGVNYXhDYWxsU3RhY2tTaXplKGN0eCwgZXJyLCBjb25zdHJ1Y3Rvck5hbWUsIGluZGVudGF0aW9uTHZsKTsKICAgIH0KICAgIGlmIChjdHguY2lyY3VsYXIgIT09IHZvaWQgMCkgewogICAgICBjb25zdCBpbmRleCA9IGN0eC5jaXJjdWxhci5nZXQodmFsdWUpOwogICAgICBpZiAoaW5kZXggIT09IHZvaWQgMCkgewogICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IGN0eC5zdHlsaXplKGA8cmVmICoke2luZGV4fT5gLCAic3BlY2lhbCIpOwogICAgICAgIGlmIChjdHguY29tcGFjdCAhPT0gdHJ1ZSkgewogICAgICAgICAgYmFzZSA9IGJhc2UgPT09ICIiID8gcmVmZXJlbmNlIDogYCR7cmVmZXJlbmNlfSAke2Jhc2V9YDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJhY2VzWzBdID0gYCR7cmVmZXJlbmNlfSAke2JyYWNlc1swXX1gOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgY3R4LnNlZW4ucG9wKCk7CiAgICBpZiAoY3R4LnNvcnRlZCkgewogICAgICBjb25zdCBjb21wYXJhdG9yID0gY3R4LnNvcnRlZCA9PT0gdHJ1ZSA/IHZvaWQgMCA6IGN0eC5zb3J0ZWQ7CiAgICAgIGlmIChleHRyYXNUeXBlID09PSBrT2JqZWN0VHlwZSkgewogICAgICAgIG91dHB1dCA9IG91dHB1dC5zb3J0KGNvbXBhcmF0b3IpOwogICAgICB9IGVsc2UgaWYgKGtleXMubGVuZ3RoID4gMSkgewogICAgICAgIGNvbnN0IHNvcnRlZCA9IG91dHB1dC5zbGljZShvdXRwdXQubGVuZ3RoIC0ga2V5cy5sZW5ndGgpLnNvcnQoY29tcGFyYXRvcik7CiAgICAgICAgb3V0cHV0LnNwbGljZShvdXRwdXQubGVuZ3RoIC0ga2V5cy5sZW5ndGgsIGtleXMubGVuZ3RoLCAuLi5zb3J0ZWQpOwogICAgICB9CiAgICB9CiAgICBjb25zdCByZXMgPSByZWR1Y2VUb1NpbmdsZVN0cmluZygKICAgICAgY3R4LAogICAgICBvdXRwdXQsCiAgICAgIGJhc2UsCiAgICAgIGJyYWNlcywKICAgICAgZXh0cmFzVHlwZSwKICAgICAgcmVjdXJzZVRpbWVzLAogICAgICB2YWx1ZQogICAgKTsKICAgIGNvbnN0IGJ1ZGdldCA9IGN0eC5idWRnZXRbY3R4LmluZGVudGF0aW9uTHZsXSB8fCAwOwogICAgY29uc3QgbmV3TGVuZ3RoID0gYnVkZ2V0ICsgcmVzLmxlbmd0aDsKICAgIGN0eC5idWRnZXRbY3R4LmluZGVudGF0aW9uTHZsXSA9IG5ld0xlbmd0aDsKICAgIGlmIChuZXdMZW5ndGggPiAyICoqIDI3KSB7CiAgICAgIGN0eC5kZXB0aCA9IC0xOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CiAgdmFyIGJ1aWx0SW5PYmplY3RzID0gbmV3IFNldCgKICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGdsb2JhbFRoaXMpLmZpbHRlcigKICAgICAgKGU1KSA9PiAvXltBLVpdW2EtekEtWjAtOV0rJC8udGVzdChlNSkKICAgICkKICApOwogIGZ1bmN0aW9uIGFkZFByb3RvdHlwZVByb3BlcnRpZXMoY3R4LCBtYWluLCBvYmosIHJlY3Vyc2VUaW1lcywgb3V0cHV0KSB7CiAgICBsZXQgZGVwdGggPSAwOwogICAgbGV0IGtleXM7CiAgICBsZXQga2V5U2V0OwogICAgZG8gewogICAgICBpZiAoZGVwdGggIT09IDAgfHwgbWFpbiA9PT0gb2JqKSB7CiAgICAgICAgb2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7CiAgICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosICJjb25zdHJ1Y3RvciIpOwogICAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB2b2lkIDAgJiYgdHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09ICJmdW5jdGlvbiIgJiYgYnVpbHRJbk9iamVjdHMuaGFzKGRlc2NyaXB0b3IudmFsdWUubmFtZSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRlcHRoID09PSAwKSB7CiAgICAgICAga2V5U2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGtleXMsIChrZXkpID0+IGtleVNldC5hZGQoa2V5KSk7CiAgICAgIH0KICAgICAga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhvYmopOwogICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKGN0eC5zZWVuLCBtYWluKTsKICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykgewogICAgICAgIGlmIChrZXkgPT09ICJjb25zdHJ1Y3RvciIgfHwgbWFpbi5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IGRlcHRoICE9PSAwICYmIGtleVNldC5oYXMoa2V5KSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTsKICAgICAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdFByb3BlcnR5KAogICAgICAgICAgY3R4LAogICAgICAgICAgb2JqLAogICAgICAgICAgcmVjdXJzZVRpbWVzLAogICAgICAgICAga2V5LAogICAgICAgICAga09iamVjdFR5cGUsCiAgICAgICAgICBkZXNjLAogICAgICAgICAgbWFpbgogICAgICAgICk7CiAgICAgICAgaWYgKGN0eC5jb2xvcnMpIHsKICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwob3V0cHV0LCBgXHgxQlsybSR7dmFsdWV9XHgxQlsyMm1gKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChvdXRwdXQsIHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgQXJyYXkucHJvdG90eXBlLnBvcC5jYWxsKGN0eC5zZWVuKTsKICAgIH0gd2hpbGUgKCsrZGVwdGggIT09IDMpOwogIH0KICBmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUob2JqLCBjdHgsIHJlY3Vyc2VUaW1lcywgcHJvdG9Qcm9wcykgewogICAgbGV0IGZpcnN0UHJvdG87CiAgICBjb25zdCB0bXAgPSBvYmo7CiAgICB3aGlsZSAob2JqIHx8IGlzVW5kZXRlY3RhYmxlT2JqZWN0KG9iaikpIHsKICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCAiY29uc3RydWN0b3IiKTsKICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHZvaWQgMCAmJiB0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gImZ1bmN0aW9uIiAmJiBkZXNjcmlwdG9yLnZhbHVlLm5hbWUgIT09ICIiICYmIGlzSW5zdGFuY2VvZih0bXAsIGRlc2NyaXB0b3IudmFsdWUpKSB7CiAgICAgICAgaWYgKHByb3RvUHJvcHMgIT09IHZvaWQgMCAmJiAoZmlyc3RQcm90byAhPT0gb2JqIHx8ICFidWlsdEluT2JqZWN0cy5oYXMoZGVzY3JpcHRvci52YWx1ZS5uYW1lKSkpIHsKICAgICAgICAgIGFkZFByb3RvdHlwZVByb3BlcnRpZXMoCiAgICAgICAgICAgIGN0eCwKICAgICAgICAgICAgdG1wLAogICAgICAgICAgICBmaXJzdFByb3RvIHx8IHRtcCwKICAgICAgICAgICAgcmVjdXJzZVRpbWVzLAogICAgICAgICAgICBwcm90b1Byb3BzCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGVzY3JpcHRvci52YWx1ZS5uYW1lOwogICAgICB9CiAgICAgIG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopOwogICAgICBpZiAoZmlyc3RQcm90byA9PT0gdm9pZCAwKSB7CiAgICAgICAgZmlyc3RQcm90byA9IG9iajsKICAgICAgfQogICAgfQogICAgaWYgKGZpcnN0UHJvdG8gPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCByZXMgPSB2b2lkIDA7CiAgICBpZiAocmVjdXJzZVRpbWVzID4gY3R4LmRlcHRoICYmIGN0eC5kZXB0aCAhPT0gbnVsbCkgewogICAgICByZXR1cm4gYCR7cmVzfSA8Q29tcGxleCBwcm90b3R5cGU+YDsKICAgIH0KICAgIGNvbnN0IHByb3RvQ29uc3RyID0gZ2V0Q29uc3RydWN0b3JOYW1lKAogICAgICBmaXJzdFByb3RvLAogICAgICBjdHgsCiAgICAgIHJlY3Vyc2VUaW1lcyArIDEsCiAgICAgIHByb3RvUHJvcHMKICAgICk7CiAgICBpZiAocHJvdG9Db25zdHIgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIGAke3Jlc30gPCR7aW5zcGVjdChmaXJzdFByb3RvLCB7CiAgICAgICAgLi4uY3R4LAogICAgICAgIGN1c3RvbUluc3BlY3Q6IGZhbHNlLAogICAgICAgIGRlcHRoOiAtMQogICAgICB9KX0+YDsKICAgIH0KICAgIHJldHVybiBgJHtyZXN9IDwke3Byb3RvQ29uc3RyfT5gOwogIH0KICBmdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoZm40LCB2YWx1ZSwgY3R4KSB7CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgewogICAgICBsZXQgdHJhaWxlciA9ICIiOwogICAgICBpZiAodmFsdWUubGVuZ3RoID4gY3R4Lm1heFN0cmluZ0xlbmd0aCkgewogICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IHZhbHVlLmxlbmd0aCAtIGN0eC5tYXhTdHJpbmdMZW5ndGg7CiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBjdHgubWF4U3RyaW5nTGVuZ3RoKTsKICAgICAgICB0cmFpbGVyID0gYC4uLiAke3JlbWFpbmluZ30gbW9yZSBjaGFyYWN0ZXIke3JlbWFpbmluZyA+IDEgPyAicyIgOiAiIn1gOwogICAgICB9CiAgICAgIGlmIChjdHguY29tcGFjdCAhPT0gdHJ1ZSAmJiB2YWx1ZS5sZW5ndGggPiBrTWluTGluZUxlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBjdHguYnJlYWtMZW5ndGggLSBjdHguaW5kZW50YXRpb25MdmwgLSA0KSB7CiAgICAgICAgcmV0dXJuIHZhbHVlLnNwbGl0KC8oKS8pLm1hcCgobGluZSkgPT4gZm40KHN0ckVzY2FwZShsaW5lKSwgInN0cmluZyIpKS5qb2luKGAgKwokeyIgIi5yZXBlYXQoY3R4LmluZGVudGF0aW9uTHZsICsgMil9YCkgKyB0cmFpbGVyOwogICAgICB9CiAgICAgIHJldHVybiBmbjQoc3RyRXNjYXBlKHZhbHVlKSwgInN0cmluZyIpICsgdHJhaWxlcjsKICAgIH0KICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiKSB7CiAgICAgIHJldHVybiBmb3JtYXROdW1iZXIoZm40LCB2YWx1ZSk7CiAgICB9CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAiYmlnaW50IikgewogICAgICByZXR1cm4gZm9ybWF0QmlnSW50KGZuNCwgdmFsdWUpOwogICAgfQogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gImJvb2xlYW4iKSB7CiAgICAgIHJldHVybiBmbjQoYCR7dmFsdWV9YCwgImJvb2xlYW4iKTsKICAgIH0KICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIHJldHVybiBmbjQoInVuZGVmaW5lZCIsICJ1bmRlZmluZWQiKTsKICAgIH0KICAgIHJldHVybiBmbjQodmFsdWUudG9TdHJpbmcoKSwgInN5bWJvbCIpOwogIH0KICBmdW5jdGlvbiBnZXRFbXB0eUZvcm1hdEFycmF5KCkgewogICAgcmV0dXJuIFtdOwogIH0KICBmdW5jdGlvbiBpc0luc3RhbmNlb2Yob2JqZWN0LCBwcm90bykgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHByb3RvOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgZnVuY3Rpb24gZ2V0UHJlZml4KGNvbnN0cnVjdG9yLCB0YWcsIGZhbGxiYWNrLCBzaXplID0gIiIpIHsKICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gbnVsbCkgewogICAgICBpZiAodGFnICE9PSAiIiAmJiBmYWxsYmFjayAhPT0gdGFnKSB7CiAgICAgICAgcmV0dXJuIGBbJHtmYWxsYmFja30ke3NpemV9OiBudWxsIHByb3RvdHlwZV0gWyR7dGFnfV0gYDsKICAgICAgfQogICAgICByZXR1cm4gYFske2ZhbGxiYWNrfSR7c2l6ZX06IG51bGwgcHJvdG90eXBlXSBgOwogICAgfQogICAgaWYgKHRhZyAhPT0gIiIgJiYgY29uc3RydWN0b3IgIT09IHRhZykgewogICAgICByZXR1cm4gYCR7Y29uc3RydWN0b3J9JHtzaXplfSBbJHt0YWd9XSBgOwogICAgfQogICAgcmV0dXJuIGAke2NvbnN0cnVjdG9yfSR7c2l6ZX0gYDsKICB9CiAgZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7CiAgICBjb25zdCB2YWxMZW4gPSB2YWx1ZS5sZW5ndGg7CiAgICBjb25zdCBsZW4gPSBNYXRoLm1pbihNYXRoLm1heCgwLCBjdHgubWF4QXJyYXlMZW5ndGgpLCB2YWxMZW4pOwogICAgY29uc3QgcmVtYWluaW5nID0gdmFsTGVuIC0gbGVuOwogICAgY29uc3Qgb3V0cHV0ID0gW107CiAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgbGVuOyBpNCsrKSB7CiAgICAgIGlmICghdmFsdWUuaGFzT3duUHJvcGVydHkoaTQpKSB7CiAgICAgICAgcmV0dXJuIGZvcm1hdFNwZWNpYWxBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIGxlbiwgb3V0cHV0LCBpNCk7CiAgICAgIH0KICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCBpNCwga0FycmF5VHlwZSkpOwogICAgfQogICAgaWYgKHJlbWFpbmluZyA+IDApIHsKICAgICAgb3V0cHV0LnB1c2goYC4uLiAke3JlbWFpbmluZ30gbW9yZSBpdGVtJHtyZW1haW5pbmcgPiAxID8gInMiIDogIiJ9YCk7CiAgICB9CiAgICByZXR1cm4gb3V0cHV0OwogIH0KICBmdW5jdGlvbiBnZXRDdHhTdHlsZShfdmFsdWUsIGNvbnN0cnVjdG9yLCB0YWcpIHsKICAgIGxldCBmYWxsYmFjayA9ICIiOwogICAgaWYgKGNvbnN0cnVjdG9yID09PSBudWxsKSB7CiAgICAgIGlmIChmYWxsYmFjayA9PT0gdGFnKSB7CiAgICAgICAgZmFsbGJhY2sgPSAiT2JqZWN0IjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBmYWxsYmFjayk7CiAgfQogIGZ1bmN0aW9uIGdldEtleXModmFsdWUsIHNob3dIaWRkZW4pIHsKICAgIGxldCBrZXlzOwogICAgY29uc3Qgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModmFsdWUpOwogICAgaWYgKHNob3dIaWRkZW4pIHsKICAgICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTsKICAgICAgaWYgKHN5bWJvbHMubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRyeSB7CiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKICAgICAgfSBjYXRjaCAoX2VycikgewogICAgICAgIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7CiAgICAgIH0KICAgICAgaWYgKHN5bWJvbHMubGVuZ3RoICE9PSAwKSB7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBrZXlzOwogIH0KICBmdW5jdGlvbiBmb3JtYXRTZXQodmFsdWUsIGN0eCwgX2lnbm9yZWQsIHJlY3Vyc2VUaW1lcykgewogICAgY29uc3Qgb3V0cHV0ID0gW107CiAgICBjdHguaW5kZW50YXRpb25MdmwgKz0gMjsKICAgIGZvciAoY29uc3QgdjE1IG9mIHZhbHVlKSB7CiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwob3V0cHV0LCBmb3JtYXRWYWx1ZShjdHgsIHYxNSwgcmVjdXJzZVRpbWVzKSk7CiAgICB9CiAgICBjdHguaW5kZW50YXRpb25MdmwgLT0gMjsKICAgIHJldHVybiBvdXRwdXQ7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdE1hcCh2YWx1ZSwgY3R4LCBfZ25vcmVkLCByZWN1cnNlVGltZXMpIHsKICAgIGNvbnN0IG91dHB1dCA9IFtdOwogICAgY3R4LmluZGVudGF0aW9uTHZsICs9IDI7CiAgICBmb3IgKGNvbnN0IHsgMDogazE4LCAxOiB2MTUgfSBvZiB2YWx1ZSkgewogICAgICBvdXRwdXQucHVzaCgKICAgICAgICBgJHtmb3JtYXRWYWx1ZShjdHgsIGsxOCwgcmVjdXJzZVRpbWVzKX0gPT4gJHtmb3JtYXRWYWx1ZShjdHgsIHYxNSwgcmVjdXJzZVRpbWVzKX1gCiAgICAgICk7CiAgICB9CiAgICBjdHguaW5kZW50YXRpb25MdmwgLT0gMjsKICAgIHJldHVybiBvdXRwdXQ7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdFR5cGVkQXJyYXkodmFsdWUsIGxlbmd0aCwgY3R4LCBfaWdub3JlZCwgcmVjdXJzZVRpbWVzKSB7CiAgICBjb25zdCBtYXhMZW5ndGggPSBNYXRoLm1pbihNYXRoLm1heCgwLCBjdHgubWF4QXJyYXlMZW5ndGgpLCBsZW5ndGgpOwogICAgY29uc3QgcmVtYWluaW5nID0gdmFsdWUubGVuZ3RoIC0gbWF4TGVuZ3RoOwogICAgY29uc3Qgb3V0cHV0ID0gbmV3IEFycmF5KG1heExlbmd0aCk7CiAgICBjb25zdCBlbGVtZW50Rm9ybWF0dGVyID0gdmFsdWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICJudW1iZXIiID8gZm9ybWF0TnVtYmVyIDogZm9ybWF0QmlnSW50OwogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IG1heExlbmd0aDsgKytpNCkgewogICAgICBvdXRwdXRbaTRdID0gZWxlbWVudEZvcm1hdHRlcihjdHguc3R5bGl6ZSwgdmFsdWVbaTRdKTsKICAgIH0KICAgIGlmIChyZW1haW5pbmcgPiAwKSB7CiAgICAgIG91dHB1dFttYXhMZW5ndGhdID0gYC4uLiAke3JlbWFpbmluZ30gbW9yZSBpdGVtJHtyZW1haW5pbmcgPiAxID8gInMiIDogIiJ9YDsKICAgIH0KICAgIGlmIChjdHguc2hvd0hpZGRlbikgewogICAgICBjdHguaW5kZW50YXRpb25MdmwgKz0gMjsKICAgICAgZm9yIChjb25zdCBrZXkgb2YgWwogICAgICAgICJCWVRFU19QRVJfRUxFTUVOVCIsCiAgICAgICAgImxlbmd0aCIsCiAgICAgICAgImJ5dGVMZW5ndGgiLAogICAgICAgICJieXRlT2Zmc2V0IiwKICAgICAgICAiYnVmZmVyIgogICAgICBdKSB7CiAgICAgICAgY29uc3Qgc3RyMiA9IGZvcm1hdFZhbHVlKGN0eCwgdmFsdWVba2V5XSwgcmVjdXJzZVRpbWVzLCB0cnVlKTsKICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKG91dHB1dCwgYFske2tleX1dOiAke3N0cjJ9YCk7CiAgICAgIH0KICAgICAgY3R4LmluZGVudGF0aW9uTHZsIC09IDI7CiAgICB9CiAgICByZXR1cm4gb3V0cHV0OwogIH0KICBmdW5jdGlvbiBnZXRJdGVyYXRvckJyYWNlcyh0eXBlLCB0YWcpIHsKICAgIGlmICh0YWcgIT09IGAke3R5cGV9IEl0ZXJhdG9yYCkgewogICAgICBpZiAodGFnICE9PSAiIikgewogICAgICAgIHRhZyArPSAiXSBbIjsKICAgICAgfQogICAgICB0YWcgKz0gYCR7dHlwZX0gSXRlcmF0b3JgOwogICAgfQogICAgcmV0dXJuIFtgWyR7dGFnfV0ge2AsICJ9Il07CiAgfQogIGZ1bmN0aW9uIGZvcm1hdEl0ZXJhdG9yKGJyYWNlcywgY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7CiAgICBjb25zdCB7IDA6IGVudHJpZXMsIDE6IGlzS2V5VmFsdWUgfSA9IHZhbHVlOwogICAgaWYgKGlzS2V5VmFsdWUpIHsKICAgICAgYnJhY2VzWzBdID0gYnJhY2VzWzBdLnJlcGxhY2UoLyBJdGVyYXRvcl0geyQvLCAiIEVudHJpZXNdIHsiKTsKICAgICAgcmV0dXJuIGZvcm1hdE1hcEl0ZXJJbm5lcihjdHgsIHJlY3Vyc2VUaW1lcywgZW50cmllcywga01hcEVudHJpZXMpOwogICAgfQogICAgcmV0dXJuIGZvcm1hdFNldEl0ZXJJbm5lcihjdHgsIHJlY3Vyc2VUaW1lcywgZW50cmllcywga0l0ZXJhdG9yKTsKICB9CiAgZnVuY3Rpb24gZ2V0RnVuY3Rpb25CYXNlKHZhbHVlLCBjb25zdHJ1Y3RvciwgdGFnKSB7CiAgICBjb25zdCBzdHJpbmdpZmllZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTsKICAgIGlmIChzdHJpbmdpZmllZC5zbGljZSgwLCA1KSA9PT0gImNsYXNzIiAmJiBzdHJpbmdpZmllZC5lbmRzV2l0aCgifSIpKSB7CiAgICAgIGNvbnN0IHNsaWNlMiA9IHN0cmluZ2lmaWVkLnNsaWNlKDUsIC0xKTsKICAgICAgY29uc3QgYnJhY2tldEluZGV4ID0gc2xpY2UyLmluZGV4T2YoInsiKTsKICAgICAgaWYgKGJyYWNrZXRJbmRleCAhPT0gLTEgJiYgKCFzbGljZTIuc2xpY2UoMCwgYnJhY2tldEluZGV4KS5pbmNsdWRlcygiKCIpIHx8IGNsYXNzUmVnRXhwLnRlc3Qoc2xpY2UyLnJlcGxhY2Uoc3RyaXBDb21tZW50c1JlZ0V4cCkpKSkgewogICAgICAgIHJldHVybiBnZXRDbGFzc0Jhc2UodmFsdWUsIGNvbnN0cnVjdG9yLCB0YWcpOwogICAgICB9CiAgICB9CiAgICBsZXQgdHlwZSA9ICJGdW5jdGlvbiI7CiAgICBpZiAoaXNHZW5lcmF0b3JGdW5jdGlvbjIodmFsdWUpKSB7CiAgICAgIHR5cGUgPSBgR2VuZXJhdG9yJHt0eXBlfWA7CiAgICB9CiAgICBpZiAoaXNBc3luY0Z1bmN0aW9uMih2YWx1ZSkpIHsKICAgICAgdHlwZSA9IGBBc3luYyR7dHlwZX1gOwogICAgfQogICAgbGV0IGJhc2UgPSBgWyR7dHlwZX1gOwogICAgaWYgKGNvbnN0cnVjdG9yID09PSBudWxsKSB7CiAgICAgIGJhc2UgKz0gIiAobnVsbCBwcm90b3R5cGUpIjsKICAgIH0KICAgIGlmICh2YWx1ZS5uYW1lID09PSAiIikgewogICAgICBiYXNlICs9ICIgKGFub255bW91cykiOwogICAgfSBlbHNlIHsKICAgICAgYmFzZSArPSBgOiAke3ZhbHVlLm5hbWV9YDsKICAgIH0KICAgIGJhc2UgKz0gIl0iOwogICAgaWYgKGNvbnN0cnVjdG9yICE9PSB0eXBlICYmIGNvbnN0cnVjdG9yICE9PSBudWxsKSB7CiAgICAgIGJhc2UgKz0gYCAke2NvbnN0cnVjdG9yfWA7CiAgICB9CiAgICBpZiAodGFnICE9PSAiIiAmJiBjb25zdHJ1Y3RvciAhPT0gdGFnKSB7CiAgICAgIGJhc2UgKz0gYCBbJHt0YWd9XWA7CiAgICB9CiAgICByZXR1cm4gYmFzZTsKICB9CiAgZnVuY3Rpb24gZm9ybWF0RXJyb3IoZXJyLCBjb25zdHJ1Y3RvciwgdGFnLCBjdHgsIGtleXMpIHsKICAgIGNvbnN0IG5hbWUgPSBlcnIubmFtZSAhPSBudWxsID8gU3RyaW5nKGVyci5uYW1lKSA6ICJFcnJvciI7CiAgICBsZXQgbGVuID0gbmFtZS5sZW5ndGg7CiAgICBsZXQgc3RhY2sgPSBlcnIuc3RhY2sgPyBTdHJpbmcoZXJyLnN0YWNrKSA6IGVyci50b1N0cmluZygpOwogICAgaWYgKCFjdHguc2hvd0hpZGRlbiAmJiBrZXlzLmxlbmd0aCAhPT0gMCkgewogICAgICBmb3IgKGNvbnN0IG5hbWUyIG9mIFsibmFtZSIsICJtZXNzYWdlIiwgInN0YWNrIl0pIHsKICAgICAgICBjb25zdCBpbmRleCA9IGtleXMuaW5kZXhPZihuYW1lMik7CiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSAmJiBzdGFjay5pbmNsdWRlcyhlcnJbbmFtZTJdKSkgewogICAgICAgICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGNvbnN0cnVjdG9yID09PSBudWxsIHx8IG5hbWUuZW5kc1dpdGgoIkVycm9yIikgJiYgc3RhY2suc3RhcnRzV2l0aChuYW1lKSAmJiAoc3RhY2subGVuZ3RoID09PSBsZW4gfHwgc3RhY2tbbGVuXSA9PT0gIjoiIHx8IHN0YWNrW2xlbl0gPT09ICJcbiIpKSB7CiAgICAgIGxldCBmYWxsYmFjayA9ICJFcnJvciI7CiAgICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gbnVsbCkgewogICAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhY2subWF0Y2goL14oW0EtWl1bYS16XyBBLVowLTlbXF0oKS1dKykoPzo6fFxuIHs0fWF0KS8pIHx8IHN0YWNrLm1hdGNoKC9eKFthLXpfQS1aMC05LV0qRXJyb3IpJC8pOwogICAgICAgIGZhbGxiYWNrID0gc3RhcnQgJiYgc3RhcnRbMV0gfHwgIiI7CiAgICAgICAgbGVuID0gZmFsbGJhY2subGVuZ3RoOwogICAgICAgIGZhbGxiYWNrID0gZmFsbGJhY2sgfHwgIkVycm9yIjsKICAgICAgfQogICAgICBjb25zdCBwcmVmaXggPSBnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgZmFsbGJhY2spLnNsaWNlKDAsIC0xKTsKICAgICAgaWYgKG5hbWUgIT09IHByZWZpeCkgewogICAgICAgIGlmIChwcmVmaXguaW5jbHVkZXMobmFtZSkpIHsKICAgICAgICAgIGlmIChsZW4gPT09IDApIHsKICAgICAgICAgICAgc3RhY2sgPSBgJHtwcmVmaXh9OiAke3N0YWNrfWA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGFjayA9IGAke3ByZWZpeH0ke3N0YWNrLnNsaWNlKGxlbil9YDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhY2sgPSBgJHtwcmVmaXh9IFske25hbWV9XSR7c3RhY2suc2xpY2UobGVuKX1gOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgbGV0IHBvcyA9IGVyci5tZXNzYWdlICYmIHN0YWNrLmluZGV4T2YoZXJyLm1lc3NhZ2UpIHx8IC0xOwogICAgaWYgKHBvcyAhPT0gLTEpIHsKICAgICAgcG9zICs9IGVyci5tZXNzYWdlLmxlbmd0aDsKICAgIH0KICAgIGNvbnN0IHN0YWNrU3RhcnQgPSBzdGFjay5pbmRleE9mKCJcbiAgICBhdCIsIHBvcyk7CiAgICBpZiAoc3RhY2tTdGFydCA9PT0gLTEpIHsKICAgICAgc3RhY2sgPSBgWyR7c3RhY2t9XWA7CiAgICB9IGVsc2UgaWYgKGN0eC5jb2xvcnMpIHsKICAgICAgbGV0IG5ld1N0YWNrID0gc3RhY2suc2xpY2UoMCwgc3RhY2tTdGFydCk7CiAgICAgIGNvbnN0IGxpbmVzID0gc3RhY2suc2xpY2Uoc3RhY2tTdGFydCArIDEpLnNwbGl0KCJcbiIpOwogICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICBsZXQgbm9kZU1vZHVsZTsKICAgICAgICBuZXdTdGFjayArPSAiXG4iOwogICAgICAgIGxldCBwb3MyID0gMDsKICAgICAgICB3aGlsZSAobm9kZU1vZHVsZSA9IG5vZGVNb2R1bGVzUmVnRXhwLmV4ZWMobGluZSkpIHsKICAgICAgICAgIG5ld1N0YWNrICs9IGxpbmUuc2xpY2UocG9zMiwgbm9kZU1vZHVsZS5pbmRleCArIDE0KTsKICAgICAgICAgIG5ld1N0YWNrICs9IGN0eC5zdHlsaXplKG5vZGVNb2R1bGVbMV0sICJtb2R1bGUiKTsKICAgICAgICAgIHBvczIgPSBub2RlTW9kdWxlLmluZGV4ICsgbm9kZU1vZHVsZVswXS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIG5ld1N0YWNrICs9IHBvczIgPT09IDAgPyBsaW5lIDogbGluZS5zbGljZShwb3MyKTsKICAgICAgfQogICAgICBzdGFjayA9IG5ld1N0YWNrOwogICAgfQogICAgaWYgKGN0eC5pbmRlbnRhdGlvbkx2bCAhPT0gMCkgewogICAgICBjb25zdCBpbmRlbnRhdGlvbiA9ICIgIi5yZXBlYXQoY3R4LmluZGVudGF0aW9uTHZsKTsKICAgICAgc3RhY2sgPSBzdGFjay5yZXBsYWNlKC9cbi9nLCBgCiR7aW5kZW50YXRpb259YCk7CiAgICB9CiAgICByZXR1cm4gc3RhY2s7CiAgfQogIHZhciBoZXhTbGljZTsKICBmdW5jdGlvbiBmb3JtYXRBcnJheUJ1ZmZlcihjdHgsIHZhbHVlKSB7CiAgICBsZXQgYnVmZmVyOwogICAgdHJ5IHsKICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBbY3R4LnN0eWxpemUoIihkZXRhY2hlZCkiLCAic3BlY2lhbCIpXTsKICAgIH0KICAgIGxldCBzdHIyID0gaGV4U2xpY2UoYnVmZmVyLCAwLCBNYXRoLm1pbihjdHgubWF4QXJyYXlMZW5ndGgsIGJ1ZmZlci5sZW5ndGgpKS5yZXBsYWNlKC8oLnsyfSkvZywgIiQxICIpLnRyaW0oKTsKICAgIGNvbnN0IHJlbWFpbmluZyA9IGJ1ZmZlci5sZW5ndGggLSBjdHgubWF4QXJyYXlMZW5ndGg7CiAgICBpZiAocmVtYWluaW5nID4gMCkgewogICAgICBzdHIyICs9IGAgLi4uICR7cmVtYWluaW5nfSBtb3JlIGJ5dGUke3JlbWFpbmluZyA+IDEgPyAicyIgOiAiIn1gOwogICAgfQogICAgcmV0dXJuIFtgJHtjdHguc3R5bGl6ZSgiW1VpbnQ4Q29udGVudHNdIiwgInNwZWNpYWwiKX06IDwke3N0cjJ9PmBdOwogIH0KICBmdW5jdGlvbiBmb3JtYXROdW1iZXIoZm40LCB2YWx1ZSkgewogICAgcmV0dXJuIGZuNChPYmplY3QuaXModmFsdWUsIC0wKSA/ICItMCIgOiBgJHt2YWx1ZX1gLCAibnVtYmVyIik7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdFByb21pc2UoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7CiAgICBsZXQgb3V0cHV0OwogICAgY29uc3QgeyAwOiBzdGF0ZSwgMTogcmVzdWx0IH0gPSB2YWx1ZTsKICAgIGlmIChzdGF0ZSA9PT0ga1BlbmRpbmcpIHsKICAgICAgb3V0cHV0ID0gW2N0eC5zdHlsaXplKCI8cGVuZGluZz4iLCAic3BlY2lhbCIpXTsKICAgIH0gZWxzZSB7CiAgICAgIGN0eC5pbmRlbnRhdGlvbkx2bCArPSAyOwogICAgICBjb25zdCBzdHIyID0gZm9ybWF0VmFsdWUoY3R4LCByZXN1bHQsIHJlY3Vyc2VUaW1lcyk7CiAgICAgIGN0eC5pbmRlbnRhdGlvbkx2bCAtPSAyOwogICAgICBvdXRwdXQgPSBbCiAgICAgICAgc3RhdGUgPT09IGtSZWplY3RlZCA/IGAke2N0eC5zdHlsaXplKCI8cmVqZWN0ZWQ+IiwgInNwZWNpYWwiKX0gJHtzdHIyfWAgOiBzdHIyCiAgICAgIF07CiAgICB9CiAgICByZXR1cm4gb3V0cHV0OwogIH0KICBmdW5jdGlvbiBmb3JtYXRXZWFrQ29sbGVjdGlvbihjdHgpIHsKICAgIHJldHVybiBbY3R4LnN0eWxpemUoIjxpdGVtcyB1bmtub3duPiIsICJzcGVjaWFsIildOwogIH0KICBmdW5jdGlvbiBmb3JtYXRXZWFrU2V0KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykgewogICAgY29uc3QgZW50cmllcyA9IHZhbHVlOwogICAgcmV0dXJuIGZvcm1hdFNldEl0ZXJJbm5lcihjdHgsIHJlY3Vyc2VUaW1lcywgZW50cmllcywga1dlYWspOwogIH0KICBmdW5jdGlvbiBmb3JtYXRXZWFrTWFwKGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykgewogICAgY29uc3QgZW50cmllcyA9IHZhbHVlOwogICAgcmV0dXJuIGZvcm1hdE1hcEl0ZXJJbm5lcihjdHgsIHJlY3Vyc2VUaW1lcywgZW50cmllcywga1dlYWspOwogIH0KICBmdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIGtleSwgdHlwZSwgZGVzYywgb3JpZ2luYWwgPSB2YWx1ZSkgewogICAgbGV0IG5hbWUsIHN0cjI7CiAgICBsZXQgZXh0cmEgPSAiICI7CiAgICBkZXNjID0gZGVzYyB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0sIGVudW1lcmFibGU6IHRydWUgfTsKICAgIGlmIChkZXNjLnZhbHVlICE9PSB2b2lkIDApIHsKICAgICAgY29uc3QgZGlmZjIgPSBjdHguY29tcGFjdCAhPT0gdHJ1ZSB8fCB0eXBlICE9PSBrT2JqZWN0VHlwZSA/IDIgOiAzOwogICAgICBjdHguaW5kZW50YXRpb25MdmwgKz0gZGlmZjI7CiAgICAgIHN0cjIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyk7CiAgICAgIGlmIChkaWZmMiA9PT0gMyAmJiBjdHguYnJlYWtMZW5ndGggPCBnZXRTdHJpbmdXaWR0aChzdHIyLCBjdHguY29sb3JzKSkgewogICAgICAgIGV4dHJhID0gYAokeyIgIi5yZXBlYXQoY3R4LmluZGVudGF0aW9uTHZsKX1gOwogICAgICB9CiAgICAgIGN0eC5pbmRlbnRhdGlvbkx2bCAtPSBkaWZmMjsKICAgIH0gZWxzZSBpZiAoZGVzYy5nZXQgIT09IHZvaWQgMCkgewogICAgICBjb25zdCBsYWJlbCA9IGRlc2Muc2V0ICE9PSB2b2lkIDAgPyAiR2V0dGVyL1NldHRlciIgOiAiR2V0dGVyIjsKICAgICAgY29uc3QgczggPSBjdHguc3R5bGl6ZTsKICAgICAgY29uc3Qgc3AgPSAic3BlY2lhbCI7CiAgICAgIGlmIChjdHguZ2V0dGVycyAmJiAoY3R4LmdldHRlcnMgPT09IHRydWUgfHwgY3R4LmdldHRlcnMgPT09ICJnZXQiICYmIGRlc2Muc2V0ID09PSB2b2lkIDAgfHwgY3R4LmdldHRlcnMgPT09ICJzZXQiICYmIGRlc2Muc2V0ICE9PSB2b2lkIDApKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHRtcCA9IGRlc2MuZ2V0LmNhbGwob3JpZ2luYWwpOwogICAgICAgICAgY3R4LmluZGVudGF0aW9uTHZsICs9IDI7CiAgICAgICAgICBpZiAodG1wID09PSBudWxsKSB7CiAgICAgICAgICAgIHN0cjIgPSBgJHtzOChgWyR7bGFiZWx9OmAsIHNwKX0gJHtzOCgibnVsbCIsICJudWxsIil9JHtzOCgiXSIsIHNwKX1gOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdG1wID09PSAib2JqZWN0IikgewogICAgICAgICAgICBzdHIyID0gYCR7czgoYFske2xhYmVsfV1gLCBzcCl9ICR7Zm9ybWF0VmFsdWUoY3R4LCB0bXAsIHJlY3Vyc2VUaW1lcyl9YDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShzOCwgdG1wLCBjdHgpOwogICAgICAgICAgICBzdHIyID0gYCR7czgoYFske2xhYmVsfTpgLCBzcCl9ICR7cHJpbWl0aXZlfSR7czgoIl0iLCBzcCl9YDsKICAgICAgICAgIH0KICAgICAgICAgIGN0eC5pbmRlbnRhdGlvbkx2bCAtPSAyOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGA8SW5zcGVjdGlvbiB0aHJldyAoJHtlcnIubWVzc2FnZX0pPmA7CiAgICAgICAgICBzdHIyID0gYCR7czgoYFske2xhYmVsfTpgLCBzcCl9ICR7bWVzc2FnZX0ke3M4KCJdIiwgc3ApfWA7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHN0cjIgPSBjdHguc3R5bGl6ZShgWyR7bGFiZWx9XWAsIHNwKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChkZXNjLnNldCAhPT0gdm9pZCAwKSB7CiAgICAgIHN0cjIgPSBjdHguc3R5bGl6ZSgiW1NldHRlcl0iLCAic3BlY2lhbCIpOwogICAgfSBlbHNlIHsKICAgICAgc3RyMiA9IGN0eC5zdHlsaXplKCJ1bmRlZmluZWQiLCAidW5kZWZpbmVkIik7CiAgICB9CiAgICBpZiAodHlwZSA9PT0ga0FycmF5VHlwZSkgewogICAgICByZXR1cm4gc3RyMjsKICAgIH0KICAgIGlmICh0eXBlb2Yga2V5ID09PSAic3ltYm9sIikgewogICAgICBjb25zdCB0bXAgPSBrZXkudG9TdHJpbmcoKS5yZXBsYWNlKHN0ckVzY2FwZVNlcXVlbmNlc1JlcGxhY2VyLCBlc2NhcGVGbik7CiAgICAgIG5hbWUgPSBgWyR7Y3R4LnN0eWxpemUodG1wLCAic3ltYm9sIil9XWA7CiAgICB9IGVsc2UgaWYgKGtleSA9PT0gIl9fcHJvdG9fXyIpIHsKICAgICAgbmFtZSA9ICJbJ19fcHJvdG9fXyddIjsKICAgIH0gZWxzZSBpZiAoZGVzYy5lbnVtZXJhYmxlID09PSBmYWxzZSkgewogICAgICBjb25zdCB0bXAgPSBrZXkucmVwbGFjZShzdHJFc2NhcGVTZXF1ZW5jZXNSZXBsYWNlciwgZXNjYXBlRm4pOwogICAgICBuYW1lID0gYFske3RtcH1dYDsKICAgIH0gZWxzZSBpZiAoa2V5U3RyUmVnRXhwLnRlc3Qoa2V5KSkgewogICAgICBuYW1lID0gY3R4LnN0eWxpemUoa2V5LCAibmFtZSIpOwogICAgfSBlbHNlIHsKICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKHN0ckVzY2FwZShrZXkpLCAic3RyaW5nIik7CiAgICB9CiAgICByZXR1cm4gYCR7bmFtZX06JHtleHRyYX0ke3N0cjJ9YDsKICB9CiAgZnVuY3Rpb24gaGFuZGxlTWF4Q2FsbFN0YWNrU2l6ZShfY3R4LCBfZXJyLCBfY29uc3RydWN0b3JOYW1lLCBfaW5kZW50YXRpb25MdmwpIHsKICB9CiAgdmFyIGNvbG9yUmVnRXhwID0gL1x1MDAxYlxbXGRcZD9tL2c7CiAgZnVuY3Rpb24gcmVtb3ZlQ29sb3JzKHN0cjIpIHsKICAgIHJldHVybiBzdHIyLnJlcGxhY2UoY29sb3JSZWdFeHAsICIiKTsKICB9CiAgZnVuY3Rpb24gaXNCZWxvd0JyZWFrTGVuZ3RoKGN0eCwgb3V0cHV0LCBzdGFydCwgYmFzZSkgewogICAgbGV0IHRvdGFsTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aCArIHN0YXJ0OwogICAgaWYgKHRvdGFsTGVuZ3RoICsgb3V0cHV0Lmxlbmd0aCA+IGN0eC5icmVha0xlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgb3V0cHV0Lmxlbmd0aDsgaTQrKykgewogICAgICBpZiAoY3R4LmNvbG9ycykgewogICAgICAgIHRvdGFsTGVuZ3RoICs9IHJlbW92ZUNvbG9ycyhvdXRwdXRbaTRdKS5sZW5ndGg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG90YWxMZW5ndGggKz0gb3V0cHV0W2k0XS5sZW5ndGg7CiAgICAgIH0KICAgICAgaWYgKHRvdGFsTGVuZ3RoID4gY3R4LmJyZWFrTGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYmFzZSA9PT0gIiIgfHwgIWJhc2UuaW5jbHVkZXMoIlxuIik7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdEJpZ0ludChmbjQsIHZhbHVlKSB7CiAgICByZXR1cm4gZm40KGAke3ZhbHVlfW5gLCAiYmlnaW50Iik7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdE5hbWVzcGFjZU9iamVjdChrZXlzLCBjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHsKICAgIGNvbnN0IG91dHB1dCA9IG5ldyBBcnJheShrZXlzLmxlbmd0aCk7CiAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwga2V5cy5sZW5ndGg7IGk0KyspIHsKICAgICAgdHJ5IHsKICAgICAgICBvdXRwdXRbaTRdID0gZm9ybWF0UHJvcGVydHkoCiAgICAgICAgICBjdHgsCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIHJlY3Vyc2VUaW1lcywKICAgICAgICAgIGtleXNbaTRdLAogICAgICAgICAga09iamVjdFR5cGUKICAgICAgICApOwogICAgICB9IGNhdGNoIChfZXJyKSB7CiAgICAgICAgY29uc3QgdG1wID0geyBba2V5c1tpNF1dOiAiIiB9OwogICAgICAgIG91dHB1dFtpNF0gPSBmb3JtYXRQcm9wZXJ0eShjdHgsIHRtcCwgcmVjdXJzZVRpbWVzLCBrZXlzW2k0XSwga09iamVjdFR5cGUpOwogICAgICAgIGNvbnN0IHBvcyA9IG91dHB1dFtpNF0ubGFzdEluZGV4T2YoIiAiKTsKICAgICAgICBvdXRwdXRbaTRdID0gb3V0cHV0W2k0XS5zbGljZSgwLCBwb3MgKyAxKSArIGN0eC5zdHlsaXplKCI8dW5pbml0aWFsaXplZD4iLCAic3BlY2lhbCIpOwogICAgICB9CiAgICB9CiAgICBrZXlzLmxlbmd0aCA9IDA7CiAgICByZXR1cm4gb3V0cHV0OwogIH0KICBmdW5jdGlvbiBmb3JtYXRTcGVjaWFsQXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCBtYXhMZW5ndGgsIG91dHB1dCwgaTQpIHsKICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7CiAgICBsZXQgaW5kZXggPSBpNDsKICAgIGZvciAoOyBpNCA8IGtleXMubGVuZ3RoICYmIG91dHB1dC5sZW5ndGggPCBtYXhMZW5ndGg7IGk0KyspIHsKICAgICAgY29uc3Qga2V5ID0ga2V5c1tpNF07CiAgICAgIGNvbnN0IHRtcCA9ICtrZXk7CiAgICAgIGlmICh0bXAgPiAyICoqIDMyIC0gMikgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChgJHtpbmRleH1gICE9PSBrZXkpIHsKICAgICAgICBpZiAoIW51bWJlclJlZ0V4cC50ZXN0KGtleSkpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjb25zdCBlbXB0eUl0ZW1zID0gdG1wIC0gaW5kZXg7CiAgICAgICAgY29uc3QgZW5kaW5nID0gZW1wdHlJdGVtcyA+IDEgPyAicyIgOiAiIjsKICAgICAgICBjb25zdCBtZXNzYWdlID0gYDwke2VtcHR5SXRlbXN9IGVtcHR5IGl0ZW0ke2VuZGluZ30+YDsKICAgICAgICBvdXRwdXQucHVzaChjdHguc3R5bGl6ZShtZXNzYWdlLCAidW5kZWZpbmVkIikpOwogICAgICAgIGluZGV4ID0gdG1wOwogICAgICAgIGlmIChvdXRwdXQubGVuZ3RoID09PSBtYXhMZW5ndGgpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIGtleSwga0FycmF5VHlwZSkpOwogICAgICBpbmRleCsrOwogICAgfQogICAgY29uc3QgcmVtYWluaW5nID0gdmFsdWUubGVuZ3RoIC0gaW5kZXg7CiAgICBpZiAob3V0cHV0Lmxlbmd0aCAhPT0gbWF4TGVuZ3RoKSB7CiAgICAgIGlmIChyZW1haW5pbmcgPiAwKSB7CiAgICAgICAgY29uc3QgZW5kaW5nID0gcmVtYWluaW5nID4gMSA/ICJzIiA6ICIiOwogICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgPCR7cmVtYWluaW5nfSBlbXB0eSBpdGVtJHtlbmRpbmd9PmA7CiAgICAgICAgb3V0cHV0LnB1c2goY3R4LnN0eWxpemUobWVzc2FnZSwgInVuZGVmaW5lZCIpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChyZW1haW5pbmcgPiAwKSB7CiAgICAgIG91dHB1dC5wdXNoKGAuLi4gJHtyZW1haW5pbmd9IG1vcmUgaXRlbSR7cmVtYWluaW5nID4gMSA/ICJzIiA6ICIifWApOwogICAgfQogICAgcmV0dXJuIG91dHB1dDsKICB9CiAgZnVuY3Rpb24gZ2V0Qm94ZWRCYXNlKHZhbHVlLCBjdHgsIGtleXMsIGNvbnN0cnVjdG9yLCB0YWcpIHsKICAgIGxldCB0eXBlOwogICAgaWYgKGlzTnVtYmVyT2JqZWN0Mih2YWx1ZSkpIHsKICAgICAgdHlwZSA9ICJOdW1iZXIiOwogICAgfSBlbHNlIGlmIChpc1N0cmluZ09iamVjdDIodmFsdWUpKSB7CiAgICAgIHR5cGUgPSAiU3RyaW5nIjsKICAgICAga2V5cy5zcGxpY2UoMCwgdmFsdWUubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuT2JqZWN0Mih2YWx1ZSkpIHsKICAgICAgdHlwZSA9ICJCb29sZWFuIjsKICAgIH0gZWxzZSBpZiAoaXNCaWdJbnRPYmplY3QyKHZhbHVlKSkgewogICAgICB0eXBlID0gIkJpZ0ludCI7CiAgICB9IGVsc2UgewogICAgICB0eXBlID0gIlN5bWJvbCI7CiAgICB9CiAgICBsZXQgYmFzZSA9IGBbJHt0eXBlfWA7CiAgICBpZiAodHlwZSAhPT0gY29uc3RydWN0b3IpIHsKICAgICAgaWYgKGNvbnN0cnVjdG9yID09PSBudWxsKSB7CiAgICAgICAgYmFzZSArPSAiIChudWxsIHByb3RvdHlwZSkiOwogICAgICB9IGVsc2UgewogICAgICAgIGJhc2UgKz0gYCAoJHtjb25zdHJ1Y3Rvcn0pYDsKICAgICAgfQogICAgfQogICAgYmFzZSArPSBgOiAke2Zvcm1hdFByaW1pdGl2ZShzdHlsaXplTm9Db2xvciwgdmFsdWUudmFsdWVPZigpLCBjdHgpfV1gOwogICAgaWYgKHRhZyAhPT0gIiIgJiYgdGFnICE9PSBjb25zdHJ1Y3RvcikgewogICAgICBiYXNlICs9IGAgWyR7dGFnfV1gOwogICAgfQogICAgaWYgKGtleXMubGVuZ3RoICE9PSAwIHx8IGN0eC5zdHlsaXplID09PSBzdHlsaXplTm9Db2xvcikgewogICAgICByZXR1cm4gYmFzZTsKICAgIH0KICAgIHJldHVybiBjdHguc3R5bGl6ZShiYXNlLCB0eXBlLnRvTG93ZXJDYXNlKCkpOwogIH0KICBmdW5jdGlvbiBnZXRDbGFzc0Jhc2UodmFsdWUsIGNvbnN0cnVjdG9yLCB0YWcpIHsKICAgIGNvbnN0IGhhc05hbWUgPSB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgibmFtZSIpOwogICAgY29uc3QgbmFtZSA9IGhhc05hbWUgJiYgdmFsdWUubmFtZSB8fCAiKGFub255bW91cykiOwogICAgbGV0IGJhc2UgPSBgY2xhc3MgJHtuYW1lfWA7CiAgICBpZiAoY29uc3RydWN0b3IgIT09ICJGdW5jdGlvbiIgJiYgY29uc3RydWN0b3IgIT09IG51bGwpIHsKICAgICAgYmFzZSArPSBgIFske2NvbnN0cnVjdG9yfV1gOwogICAgfQogICAgaWYgKHRhZyAhPT0gIiIgJiYgY29uc3RydWN0b3IgIT09IHRhZykgewogICAgICBiYXNlICs9IGAgWyR7dGFnfV1gOwogICAgfQogICAgaWYgKGNvbnN0cnVjdG9yICE9PSBudWxsKSB7CiAgICAgIGNvbnN0IHN1cGVyTmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkubmFtZTsKICAgICAgaWYgKHN1cGVyTmFtZSkgewogICAgICAgIGJhc2UgKz0gYCBleHRlbmRzICR7c3VwZXJOYW1lfWA7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJhc2UgKz0gIiBleHRlbmRzIFtudWxsIHByb3RvdHlwZV0iOwogICAgfQogICAgcmV0dXJuIGBbJHtiYXNlfV1gOwogIH0KICBmdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhjdHgsIG91dHB1dCwgYmFzZSwgYnJhY2VzLCBleHRyYXNUeXBlLCByZWN1cnNlVGltZXMsIHZhbHVlKSB7CiAgICBpZiAoY3R4LmNvbXBhY3QgIT09IHRydWUpIHsKICAgICAgaWYgKHR5cGVvZiBjdHguY29tcGFjdCA9PT0gIm51bWJlciIgJiYgY3R4LmNvbXBhY3QgPj0gMSkgewogICAgICAgIGNvbnN0IGVudHJpZXMgPSBvdXRwdXQubGVuZ3RoOwogICAgICAgIGlmIChleHRyYXNUeXBlID09PSBrQXJyYXlFeHRyYXNUeXBlICYmIGVudHJpZXMgPiA2KSB7CiAgICAgICAgICBvdXRwdXQgPSBncm91cEFycmF5RWxlbWVudHMoY3R4LCBvdXRwdXQsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKGN0eC5jdXJyZW50RGVwdGggLSByZWN1cnNlVGltZXMgPCBjdHguY29tcGFjdCAmJiBlbnRyaWVzID09PSBvdXRwdXQubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBzdGFydCA9IG91dHB1dC5sZW5ndGggKyBjdHguaW5kZW50YXRpb25MdmwgKyBicmFjZXNbMF0ubGVuZ3RoICsgYmFzZS5sZW5ndGggKyAxMDsKICAgICAgICAgIGlmIChpc0JlbG93QnJlYWtMZW5ndGgoY3R4LCBvdXRwdXQsIHN0YXJ0LCBiYXNlKSkgewogICAgICAgICAgICByZXR1cm4gYCR7YmFzZSA/IGAke2Jhc2V9IGAgOiAiIn0ke2JyYWNlc1swXX0gJHtqb2luNShvdXRwdXQsICIsICIpfSAke2JyYWNlc1sxXX1gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBpbmRlbnRhdGlvbjIgPSBgCiR7IiAiLnJlcGVhdChjdHguaW5kZW50YXRpb25MdmwpfWA7CiAgICAgIHJldHVybiBgJHtiYXNlID8gYCR7YmFzZX0gYCA6ICIifSR7YnJhY2VzWzBdfSR7aW5kZW50YXRpb24yfSAgJHtqb2luNShvdXRwdXQsIGAsJHtpbmRlbnRhdGlvbjJ9ICBgKX0ke2luZGVudGF0aW9uMn0ke2JyYWNlc1sxXX1gOwogICAgfQogICAgaWYgKGlzQmVsb3dCcmVha0xlbmd0aChjdHgsIG91dHB1dCwgMCwgYmFzZSkpIHsKICAgICAgcmV0dXJuIGAke2JyYWNlc1swXX0ke2Jhc2UgPyBgICR7YmFzZX1gIDogIiJ9ICR7am9pbjUob3V0cHV0LCAiLCAiKX0gYCArIGJyYWNlc1sxXTsKICAgIH0KICAgIGNvbnN0IGluZGVudGF0aW9uID0gIiAiLnJlcGVhdChjdHguaW5kZW50YXRpb25MdmwpOwogICAgY29uc3QgbG4zID0gYmFzZSA9PT0gIiIgJiYgYnJhY2VzWzBdLmxlbmd0aCA9PT0gMSA/ICIgIiA6IGAke2Jhc2UgPyBgICR7YmFzZX1gIDogIiJ9CiR7aW5kZW50YXRpb259ICBgOwogICAgcmV0dXJuIGAke2JyYWNlc1swXX0ke2xuM30ke2pvaW41KG91dHB1dCwgYCwKJHtpbmRlbnRhdGlvbn0gIGApfSAke2JyYWNlc1sxXX1gOwogIH0KICBmdW5jdGlvbiBqb2luNShvdXRwdXQsIHNlcGFyYXRvcikgewogICAgbGV0IHN0cjIgPSAiIjsKICAgIGlmIChvdXRwdXQubGVuZ3RoICE9PSAwKSB7CiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IG91dHB1dC5sZW5ndGggLSAxOwogICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgbGFzdEluZGV4OyBpNCsrKSB7CiAgICAgICAgc3RyMiArPSBvdXRwdXRbaTRdOwogICAgICAgIHN0cjIgKz0gc2VwYXJhdG9yOwogICAgICB9CiAgICAgIHN0cjIgKz0gb3V0cHV0W2xhc3RJbmRleF07CiAgICB9CiAgICByZXR1cm4gc3RyMjsKICB9CiAgZnVuY3Rpb24gZ3JvdXBBcnJheUVsZW1lbnRzKGN0eCwgb3V0cHV0LCB2YWx1ZSkgewogICAgbGV0IHRvdGFsTGVuZ3RoID0gMDsKICAgIGxldCBtYXhMZW5ndGggPSAwOwogICAgbGV0IGk0ID0gMDsKICAgIGxldCBvdXRwdXRMZW5ndGggPSBvdXRwdXQubGVuZ3RoOwogICAgaWYgKGN0eC5tYXhBcnJheUxlbmd0aCA8IG91dHB1dC5sZW5ndGgpIHsKICAgICAgb3V0cHV0TGVuZ3RoLS07CiAgICB9CiAgICBjb25zdCBzZXBhcmF0b3JTcGFjZSA9IDI7CiAgICBjb25zdCBkYXRhTGVuID0gbmV3IEFycmF5KG91dHB1dExlbmd0aCk7CiAgICBmb3IgKDsgaTQgPCBvdXRwdXRMZW5ndGg7IGk0KyspIHsKICAgICAgY29uc3QgbGVuID0gZ2V0U3RyaW5nV2lkdGgob3V0cHV0W2k0XSwgY3R4LmNvbG9ycyk7CiAgICAgIGRhdGFMZW5baTRdID0gbGVuOwogICAgICB0b3RhbExlbmd0aCArPSBsZW4gKyBzZXBhcmF0b3JTcGFjZTsKICAgICAgaWYgKG1heExlbmd0aCA8IGxlbikgewogICAgICAgIG1heExlbmd0aCA9IGxlbjsKICAgICAgfQogICAgfQogICAgY29uc3QgYWN0dWFsTWF4ID0gbWF4TGVuZ3RoICsgc2VwYXJhdG9yU3BhY2U7CiAgICBpZiAoYWN0dWFsTWF4ICogMyArIGN0eC5pbmRlbnRhdGlvbkx2bCA8IGN0eC5icmVha0xlbmd0aCAmJiAodG90YWxMZW5ndGggLyBhY3R1YWxNYXggPiA1IHx8IG1heExlbmd0aCA8PSA2KSkgewogICAgICBjb25zdCBhcHByb3hDaGFySGVpZ2h0cyA9IDIuNTsKICAgICAgY29uc3QgYXZlcmFnZUJpYXMgPSBNYXRoLnNxcnQoYWN0dWFsTWF4IC0gdG90YWxMZW5ndGggLyBvdXRwdXQubGVuZ3RoKTsKICAgICAgY29uc3QgYmlhc2VkTWF4ID0gTWF0aC5tYXgoYWN0dWFsTWF4IC0gMyAtIGF2ZXJhZ2VCaWFzLCAxKTsKICAgICAgY29uc3QgY29sdW1ucyA9IE1hdGgubWluKAogICAgICAgIE1hdGgucm91bmQoCiAgICAgICAgICBNYXRoLnNxcnQoCiAgICAgICAgICAgIGFwcHJveENoYXJIZWlnaHRzICogYmlhc2VkTWF4ICogb3V0cHV0TGVuZ3RoCiAgICAgICAgICApIC8gYmlhc2VkTWF4CiAgICAgICAgKSwKICAgICAgICBNYXRoLmZsb29yKChjdHguYnJlYWtMZW5ndGggLSBjdHguaW5kZW50YXRpb25MdmwpIC8gYWN0dWFsTWF4KSwKICAgICAgICBjdHguY29tcGFjdCAqIDQsCiAgICAgICAgMTUKICAgICAgKTsKICAgICAgaWYgKGNvbHVtbnMgPD0gMSkgewogICAgICAgIHJldHVybiBvdXRwdXQ7CiAgICAgIH0KICAgICAgY29uc3QgdG1wID0gW107CiAgICAgIGNvbnN0IG1heExpbmVMZW5ndGggPSBbXTsKICAgICAgZm9yIChsZXQgaTUgPSAwOyBpNSA8IGNvbHVtbnM7IGk1KyspIHsKICAgICAgICBsZXQgbGluZU1heExlbmd0aCA9IDA7CiAgICAgICAgZm9yIChsZXQgajE5ID0gaTU7IGoxOSA8IG91dHB1dC5sZW5ndGg7IGoxOSArPSBjb2x1bW5zKSB7CiAgICAgICAgICBpZiAoZGF0YUxlbltqMTldID4gbGluZU1heExlbmd0aCkgewogICAgICAgICAgICBsaW5lTWF4TGVuZ3RoID0gZGF0YUxlbltqMTldOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsaW5lTWF4TGVuZ3RoICs9IHNlcGFyYXRvclNwYWNlOwogICAgICAgIG1heExpbmVMZW5ndGhbaTVdID0gbGluZU1heExlbmd0aDsKICAgICAgfQogICAgICBsZXQgb3JkZXIgPSBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0OwogICAgICBpZiAodmFsdWUgIT09IHZvaWQgMCkgewogICAgICAgIGZvciAobGV0IGk1ID0gMDsgaTUgPCBvdXRwdXQubGVuZ3RoOyBpNSsrKSB7CiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlW2k1XSAhPT0gIm51bWJlciIgJiYgdHlwZW9mIHZhbHVlW2k1XSAhPT0gImJpZ2ludCIpIHsKICAgICAgICAgICAgb3JkZXIgPSBTdHJpbmcucHJvdG90eXBlLnBhZEVuZDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAobGV0IGk1ID0gMDsgaTUgPCBvdXRwdXRMZW5ndGg7IGk1ICs9IGNvbHVtbnMpIHsKICAgICAgICBjb25zdCBtYXggPSBNYXRoLm1pbihpNSArIGNvbHVtbnMsIG91dHB1dExlbmd0aCk7CiAgICAgICAgbGV0IHN0cjIgPSAiIjsKICAgICAgICBsZXQgajE5ID0gaTU7CiAgICAgICAgZm9yICg7IGoxOSA8IG1heCAtIDE7IGoxOSsrKSB7CiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4TGluZUxlbmd0aFtqMTkgLSBpNV0gKyBvdXRwdXRbajE5XS5sZW5ndGggLSBkYXRhTGVuW2oxOV07CiAgICAgICAgICBzdHIyICs9IGAke291dHB1dFtqMTldfSwgYC5wYWRTdGFydChwYWRkaW5nLCAiICIpOwogICAgICAgIH0KICAgICAgICBpZiAob3JkZXIgPT09IFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpIHsKICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSBtYXhMaW5lTGVuZ3RoW2oxOSAtIGk1XSArIG91dHB1dFtqMTldLmxlbmd0aCAtIGRhdGFMZW5bajE5XSAtIHNlcGFyYXRvclNwYWNlOwogICAgICAgICAgc3RyMiArPSBvdXRwdXRbajE5XS5wYWRTdGFydChwYWRkaW5nLCAiICIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdHIyICs9IG91dHB1dFtqMTldOwogICAgICAgIH0KICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRtcCwgc3RyMik7CiAgICAgIH0KICAgICAgaWYgKGN0eC5tYXhBcnJheUxlbmd0aCA8IG91dHB1dC5sZW5ndGgpIHsKICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRtcCwgb3V0cHV0W291dHB1dExlbmd0aF0pOwogICAgICB9CiAgICAgIG91dHB1dCA9IHRtcDsKICAgIH0KICAgIHJldHVybiBvdXRwdXQ7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdE1hcEl0ZXJJbm5lcihjdHgsIHJlY3Vyc2VUaW1lcywgZW50cmllcywgc3RhdGUpIHsKICAgIGNvbnN0IG1heEFycmF5TGVuZ3RoID0gTWF0aC5tYXgoY3R4Lm1heEFycmF5TGVuZ3RoLCAwKTsKICAgIGNvbnN0IGxlbiA9IGVudHJpZXMubGVuZ3RoIC8gMjsKICAgIGNvbnN0IHJlbWFpbmluZyA9IGxlbiAtIG1heEFycmF5TGVuZ3RoOwogICAgY29uc3QgbWF4TGVuZ3RoID0gTWF0aC5taW4obWF4QXJyYXlMZW5ndGgsIGxlbik7CiAgICBsZXQgb3V0cHV0ID0gbmV3IEFycmF5KG1heExlbmd0aCk7CiAgICBsZXQgaTQgPSAwOwogICAgY3R4LmluZGVudGF0aW9uTHZsICs9IDI7CiAgICBpZiAoc3RhdGUgPT09IGtXZWFrKSB7CiAgICAgIGZvciAoOyBpNCA8IG1heExlbmd0aDsgaTQrKykgewogICAgICAgIGNvbnN0IHBvcyA9IGk0ICogMjsKICAgICAgICBvdXRwdXRbaTRdID0gYCR7Zm9ybWF0VmFsdWUoY3R4LCBlbnRyaWVzW3Bvc10sIHJlY3Vyc2VUaW1lcyl9ID0+ICR7Zm9ybWF0VmFsdWUoY3R4LCBlbnRyaWVzW3BvcyArIDFdLCByZWN1cnNlVGltZXMpfWA7CiAgICAgIH0KICAgICAgaWYgKCFjdHguc29ydGVkKSB7CiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnNvcnQoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yICg7IGk0IDwgbWF4TGVuZ3RoOyBpNCsrKSB7CiAgICAgICAgY29uc3QgcG9zID0gaTQgKiAyOwogICAgICAgIGNvbnN0IHJlcyA9IFsKICAgICAgICAgIGZvcm1hdFZhbHVlKGN0eCwgZW50cmllc1twb3NdLCByZWN1cnNlVGltZXMpLAogICAgICAgICAgZm9ybWF0VmFsdWUoY3R4LCBlbnRyaWVzW3BvcyArIDFdLCByZWN1cnNlVGltZXMpCiAgICAgICAgXTsKICAgICAgICBvdXRwdXRbaTRdID0gcmVkdWNlVG9TaW5nbGVTdHJpbmcoCiAgICAgICAgICBjdHgsCiAgICAgICAgICByZXMsCiAgICAgICAgICAiIiwKICAgICAgICAgIFsiWyIsICJdIl0sCiAgICAgICAgICBrQXJyYXlFeHRyYXNUeXBlLAogICAgICAgICAgcmVjdXJzZVRpbWVzCiAgICAgICAgKTsKICAgICAgfQogICAgfQogICAgY3R4LmluZGVudGF0aW9uTHZsIC09IDI7CiAgICBpZiAocmVtYWluaW5nID4gMCkgewogICAgICBvdXRwdXQucHVzaChgLi4uICR7cmVtYWluaW5nfSBtb3JlIGl0ZW0ke3JlbWFpbmluZyA+IDEgPyAicyIgOiAiIn1gKTsKICAgIH0KICAgIHJldHVybiBvdXRwdXQ7CiAgfQogIGZ1bmN0aW9uIGZvcm1hdFNldEl0ZXJJbm5lcihjdHgsIHJlY3Vyc2VUaW1lcywgZW50cmllcywgc3RhdGUpIHsKICAgIGNvbnN0IG1heEFycmF5TGVuZ3RoID0gTWF0aC5tYXgoY3R4Lm1heEFycmF5TGVuZ3RoLCAwKTsKICAgIGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWluKG1heEFycmF5TGVuZ3RoLCBlbnRyaWVzLmxlbmd0aCk7CiAgICBjb25zdCBvdXRwdXQgPSBuZXcgQXJyYXkobWF4TGVuZ3RoKTsKICAgIGN0eC5pbmRlbnRhdGlvbkx2bCArPSAyOwogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IG1heExlbmd0aDsgaTQrKykgewogICAgICBvdXRwdXRbaTRdID0gZm9ybWF0VmFsdWUoY3R4LCBlbnRyaWVzW2k0XSwgcmVjdXJzZVRpbWVzKTsKICAgIH0KICAgIGN0eC5pbmRlbnRhdGlvbkx2bCAtPSAyOwogICAgaWYgKHN0YXRlID09PSBrV2VhayAmJiAhY3R4LnNvcnRlZCkgewogICAgICBvdXRwdXQuc29ydCgpOwogICAgfQogICAgY29uc3QgcmVtYWluaW5nID0gZW50cmllcy5sZW5ndGggLSBtYXhMZW5ndGg7CiAgICBpZiAocmVtYWluaW5nID4gMCkgewogICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKAogICAgICAgIG91dHB1dCwKICAgICAgICBgLi4uICR7cmVtYWluaW5nfSBtb3JlIGl0ZW0ke3JlbWFpbmluZyA+IDEgPyAicyIgOiAiIn1gCiAgICAgICk7CiAgICB9CiAgICByZXR1cm4gb3V0cHV0OwogIH0KICB2YXIgYW5zaVBhdHRlcm4gPSAiW1xcdTAwMUJcXHUwMDlCXVtbXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcZFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXGRdKyg/OjtbLWEtekEtWlxcZFxcLyMmLjo9PyVAfl9dKikqKT9cXHUwMDA3KXwoPzooPzpcXGR7MSw0fSg/OjtcXGR7MCw0fSkqKT9bXFxkQS1QUi1UWmNmLW50cXJ5PT48fl0pKSI7CiAgdmFyIGFuc2kgPSBuZXcgUmVnRXhwKGFuc2lQYXR0ZXJuLCAiZyIpOwogIGZ1bmN0aW9uIGdldFN0cmluZ1dpZHRoKHN0cjIsIHJlbW92ZUNvbnRyb2xDaGFycyA9IHRydWUpIHsKICAgIGxldCB3aWR0aCA9IDA7CiAgICBpZiAocmVtb3ZlQ29udHJvbENoYXJzKSB7CiAgICAgIHN0cjIgPSBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMoc3RyMik7CiAgICB9CiAgICBzdHIyID0gc3RyMi5ub3JtYWxpemUoIk5GQyIpOwogICAgZm9yIChjb25zdCBjaGFyIG9mIHN0cjJbU3ltYm9sLml0ZXJhdG9yXSgpKSB7CiAgICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNvZGVQb2ludEF0KDApOwogICAgICBpZiAoaXNGdWxsV2lkdGhDb2RlUG9pbnQoY29kZSkpIHsKICAgICAgICB3aWR0aCArPSAyOwogICAgICB9IGVsc2UgaWYgKCFpc1plcm9XaWR0aENvZGVQb2ludChjb2RlKSkgewogICAgICAgIHdpZHRoKys7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB3aWR0aDsKICB9CiAgdmFyIGlzRnVsbFdpZHRoQ29kZVBvaW50ID0gKGNvZGUpID0+IHsKICAgIHJldHVybiBjb2RlID49IDQzNTIgJiYgKGNvZGUgPD0gNDQ0NyB8fCBjb2RlID09PSA5MDAxIHx8IGNvZGUgPT09IDkwMDIgfHwgY29kZSA+PSAxMTkwNCAmJiBjb2RlIDw9IDEyODcxICYmIGNvZGUgIT09IDEyMzUxIHx8IGNvZGUgPj0gMTI4ODAgJiYgY29kZSA8PSAxOTkwMyB8fCBjb2RlID49IDE5OTY4ICYmIGNvZGUgPD0gNDIxODIgfHwgY29kZSA+PSA0MzM2MCAmJiBjb2RlIDw9IDQzMzg4IHx8IGNvZGUgPj0gNDQwMzIgJiYgY29kZSA8PSA1NTIwMyB8fCBjb2RlID49IDYzNzQ0ICYmIGNvZGUgPD0gNjQyNTUgfHwgY29kZSA+PSA2NTA0MCAmJiBjb2RlIDw9IDY1MDQ5IHx8IGNvZGUgPj0gNjUwNzIgJiYgY29kZSA8PSA2NTEzMSB8fCBjb2RlID49IDY1MjgxICYmIGNvZGUgPD0gNjUzNzYgfHwgY29kZSA+PSA2NTUwNCAmJiBjb2RlIDw9IDY1NTEwIHx8IGNvZGUgPj0gMTEwNTkyICYmIGNvZGUgPD0gMTEwNTkzIHx8IGNvZGUgPj0gMTI3NDg4ICYmIGNvZGUgPD0gMTI3NTY5IHx8IGNvZGUgPj0gMTI3NzQ0ICYmIGNvZGUgPD0gMTI4NTkxIHx8IGNvZGUgPj0gMTMxMDcyICYmIGNvZGUgPD0gMjYyMTQxKTsKICB9OwogIHZhciBpc1plcm9XaWR0aENvZGVQb2ludCA9IChjb2RlKSA9PiB7CiAgICByZXR1cm4gY29kZSA8PSAzMSB8fCBjb2RlID49IDEyNyAmJiBjb2RlIDw9IDE1OSB8fCBjb2RlID49IDc2OCAmJiBjb2RlIDw9IDg3OSB8fCBjb2RlID49IDgyMDMgJiYgY29kZSA8PSA4MjA3IHx8IGNvZGUgPj0gODQwMCAmJiBjb2RlIDw9IDg0NDcgfHwgY29kZSA+PSA2NTAyNCAmJiBjb2RlIDw9IDY1MDM5IHx8IGNvZGUgPj0gNjUwNTYgJiYgY29kZSA8PSA2NTA3MSB8fCBjb2RlID49IDkxNzc2MCAmJiBjb2RlIDw9IDkxNzk5OTsKICB9OwogIGZ1bmN0aW9uIHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyhzdHIyKSB7CiAgICB2YWxpZGF0ZVN0cmluZyhzdHIyLCAic3RyIik7CiAgICByZXR1cm4gc3RyMi5yZXBsYWNlKGFuc2ksICIiKTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC91dGlsLm1qcwogIHZhciBjdXN0b21JbnNwZWN0U3ltYm9sMiA9IFN5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik7CiAgdmFyIGtFbnVtZXJhYmxlUHJvcGVydHkgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICBrRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlOwogIGZ1bmN0aW9uIG9uY2UoY2FsbGJhY2spIHsKICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7CiAgICAgIGlmIChjYWxsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBjYWxsZWQgPSB0cnVlOwogICAgICBSZWZsZWN0LmFwcGx5KGNhbGxiYWNrLCB0aGlzLCBhcmdzKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpIHsKICAgIGxldCByZXNvbHZlNzsKICAgIGxldCByZWplY3Q7CiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7CiAgICAgIHJlc29sdmU3ID0gcmVzOwogICAgICByZWplY3QgPSByZWo7CiAgICB9KTsKICAgIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlc29sdmU3LCByZWplY3QgfTsKICB9CiAgdmFyIGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCA9IFN5bWJvbC5mb3IoIm5vZGVqcy51dGlsLnByb21pc2lmeS5jdXN0b20iKTsKICB2YXIga0N1c3RvbVByb21pc2lmeUFyZ3NTeW1ib2wgPSBTeW1ib2wuZm9yKAogICAgIm5vZGVqcy51dGlsLnByb21pc2lmeS5jdXN0b21BcmdzIgogICk7CiAgZnVuY3Rpb24gcHJvbWlzaWZ5KG9yaWdpbmFsKSB7CiAgICB2YWxpZGF0ZUZ1bmN0aW9uKG9yaWdpbmFsLCAib3JpZ2luYWwiKTsKICAgIGlmIChvcmlnaW5hbFtrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2xdKSB7CiAgICAgIGNvbnN0IGZuNSA9IG9yaWdpbmFsW2tDdXN0b21Qcm9taXNpZmllZFN5bWJvbF07CiAgICAgIHZhbGlkYXRlRnVuY3Rpb24oZm41LCAidXRpbC5wcm9taXNpZnkuY3VzdG9tIik7CiAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm41LCBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2wsIHsKICAgICAgICB2YWx1ZTogZm41LAogICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICAgIHdyaXRhYmxlOiBmYWxzZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhcmd1bWVudE5hbWVzID0gb3JpZ2luYWxba0N1c3RvbVByb21pc2lmeUFyZ3NTeW1ib2xdOwogICAgZnVuY3Rpb24gZm40KC4uLmFyZ3MpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlNywgcmVqZWN0KSA9PiB7CiAgICAgICAgYXJncy5wdXNoKChlcnIsIC4uLnZhbHVlcykgPT4gewogICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYXJndW1lbnROYW1lcyAhPT0gdm9pZCAwICYmIHZhbHVlcy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9OwogICAgICAgICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgYXJndW1lbnROYW1lcy5sZW5ndGg7IGk0KyspIHsKICAgICAgICAgICAgICBvYmpbYXJndW1lbnROYW1lc1tpNF1dID0gdmFsdWVzW2k0XTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXNvbHZlNyhvYmopOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzb2x2ZTcodmFsdWVzWzBdKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsLCB0aGlzLCBhcmdzKTsKICAgICAgfSk7CiAgICB9CiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZm40LCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpKTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbjQsIGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCwgewogICAgICB2YWx1ZTogZm40LAogICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICBjb25maWd1cmFibGU6IHRydWUKICAgIH0pOwogICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKAogICAgICBmbjQsCiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9yaWdpbmFsKQogICAgKTsKICB9CiAgcHJvbWlzaWZ5LmN1c3RvbSA9IGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbDsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL19jb3JlLnRzCiAgdmFyIGNvcmUyOwogIGlmIChEZW5vPy5jb3JlKSB7CiAgICBjb3JlMiA9IERlbm8uY29yZTsKICB9IGVsc2UgewogICAgY29yZTIgPSB7CiAgICAgIHNldE5leHRUaWNrQ2FsbGJhY2s6IHZvaWQgMCwKICAgICAgZXZhbENvbnRleHQoX2NvZGUsIF9maWxlbmFtZSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICJEZW5vLmNvcmUuZXZhbENvbnRleHQgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGVudmlyb25tZW50IgogICAgICAgICk7CiAgICAgIH0sCiAgICAgIGVuY29kZShjaHVuaykgewogICAgICAgIHJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoY2h1bmspOwogICAgICB9LAogICAgICBldmVudExvb3BIYXNNb3JlV29yaygpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH07CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvX3Byb2Nlc3MvZXhpdGluZy50cwogIHZhciBfZXhpdGluZyA9IGZhbHNlOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvZml4ZWRfcXVldWUudHMKICB2YXIga1NpemUgPSAyMDQ4OwogIHZhciBrTWFzayA9IGtTaXplIC0gMTsKICB2YXIgRml4ZWRDaXJjdWxhckJ1ZmZlciA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aGlzLmJvdHRvbSA9IDA7CiAgICAgIHRoaXMudG9wID0gMDsKICAgICAgdGhpcy5saXN0ID0gbmV3IEFycmF5KGtTaXplKTsKICAgICAgdGhpcy5uZXh0ID0gbnVsbDsKICAgIH0KICAgIGlzRW1wdHkoKSB7CiAgICAgIHJldHVybiB0aGlzLnRvcCA9PT0gdGhpcy5ib3R0b207CiAgICB9CiAgICBpc0Z1bGwoKSB7CiAgICAgIHJldHVybiAodGhpcy50b3AgKyAxICYga01hc2spID09PSB0aGlzLmJvdHRvbTsKICAgIH0KICAgIHB1c2goZGF0YSkgewogICAgICB0aGlzLmxpc3RbdGhpcy50b3BdID0gZGF0YTsKICAgICAgdGhpcy50b3AgPSB0aGlzLnRvcCArIDEgJiBrTWFzazsKICAgIH0KICAgIHNoaWZ0KCkgewogICAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMubGlzdFt0aGlzLmJvdHRvbV07CiAgICAgIGlmIChuZXh0SXRlbSA9PT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5saXN0W3RoaXMuYm90dG9tXSA9IHZvaWQgMDsKICAgICAgdGhpcy5ib3R0b20gPSB0aGlzLmJvdHRvbSArIDEgJiBrTWFzazsKICAgICAgcmV0dXJuIG5leHRJdGVtOwogICAgfQogIH07CiAgdmFyIEZpeGVkUXVldWUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTsKICAgIH0KICAgIGlzRW1wdHkoKSB7CiAgICAgIHJldHVybiB0aGlzLmhlYWQuaXNFbXB0eSgpOwogICAgfQogICAgcHVzaChkYXRhKSB7CiAgICAgIGlmICh0aGlzLmhlYWQuaXNGdWxsKCkpIHsKICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7CiAgICAgIH0KICAgICAgdGhpcy5oZWFkLnB1c2goZGF0YSk7CiAgICB9CiAgICBzaGlmdCgpIHsKICAgICAgY29uc3QgdGFpbCA9IHRoaXMudGFpbDsKICAgICAgY29uc3QgbmV4dCA9IHRhaWwuc2hpZnQoKTsKICAgICAgaWYgKHRhaWwuaXNFbXB0eSgpICYmIHRhaWwubmV4dCAhPT0gbnVsbCkgewogICAgICAgIHRoaXMudGFpbCA9IHRhaWwubmV4dDsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvX25leHRfdGljay50cwogIHZhciBxdWV1ZSA9IG5ldyBGaXhlZFF1ZXVlKCk7CiAgdmFyIF9uZXh0VGljazsKICBmdW5jdGlvbiBwcm9jZXNzVGlja3NBbmRSZWplY3Rpb25zKCkgewogICAgbGV0IHRvY2s7CiAgICBkbyB7CiAgICAgIHdoaWxlICh0b2NrID0gcXVldWUuc2hpZnQoKSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRvY2suY2FsbGJhY2s7CiAgICAgICAgICBpZiAodG9jay5hcmdzID09PSB2b2lkIDApIHsKICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB0b2NrLmFyZ3M7CiAgICAgICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjYWxsYmFjayguLi5hcmdzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvcmUyLnJ1bk1pY3JvdGFza3MoKTsKICAgIH0gd2hpbGUgKCFxdWV1ZS5pc0VtcHR5KCkpOwogICAgY29yZTIuc2V0SGFzVGlja1NjaGVkdWxlZChmYWxzZSk7CiAgfQogIGlmICh0eXBlb2YgY29yZTIuc2V0TmV4dFRpY2tDYWxsYmFjayAhPT0gInVuZGVmaW5lZCIpIHsKICAgIGxldCBydW5OZXh0VGlja3MgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKCFjb3JlMi5oYXNUaWNrU2NoZWR1bGVkKCkpIHsKICAgICAgICBjb3JlMi5ydW5NaWNyb3Rhc2tzKCk7CiAgICAgIH0KICAgICAgaWYgKCFjb3JlMi5oYXNUaWNrU2NoZWR1bGVkKCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBwcm9jZXNzVGlja3NBbmRSZWplY3Rpb25zKCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSwgX19uZXh0VGlja05hdGl2ZSA9IGZ1bmN0aW9uKGNhbGxiYWNrLCAuLi5hcmdzKSB7CiAgICAgIHZhbGlkYXRlQ2FsbGJhY2soY2FsbGJhY2spOwogICAgICBpZiAoX2V4aXRpbmcpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGV0IGFyZ3NfOwogICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7CiAgICAgICAgY2FzZSAwOgogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgYXJnc18gPSBbYXJnc1swXV07CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBhcmdzXyA9IFthcmdzWzBdLCBhcmdzWzFdXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIGFyZ3NfID0gW2FyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl1dOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGFyZ3NfID0gbmV3IEFycmF5KGFyZ3MubGVuZ3RoKTsKICAgICAgICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBhcmdzLmxlbmd0aDsgaTQrKykgewogICAgICAgICAgICBhcmdzX1tpNF0gPSBhcmdzW2k0XTsKICAgICAgICAgIH0KICAgICAgfQogICAgICBpZiAocXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgY29yZTIuc2V0SGFzVGlja1NjaGVkdWxlZCh0cnVlKTsKICAgICAgfQogICAgICBjb25zdCB0aWNrT2JqZWN0ID0gewogICAgICAgIGNhbGxiYWNrLAogICAgICAgIGFyZ3M6IGFyZ3NfCiAgICAgIH07CiAgICAgIHF1ZXVlLnB1c2godGlja09iamVjdCk7CiAgICB9OwogICAgY29yZTIuc2V0TmV4dFRpY2tDYWxsYmFjayhwcm9jZXNzVGlja3NBbmRSZWplY3Rpb25zKTsKICAgIGNvcmUyLnNldE1hY3JvdGFza0NhbGxiYWNrKHJ1bk5leHRUaWNrcyk7CiAgICBfbmV4dFRpY2sgPSBfX25leHRUaWNrTmF0aXZlOwogIH0gZWxzZSB7CiAgICBsZXQgX19uZXh0VGlja1F1ZXVlTWljcm90YXNrID0gZnVuY3Rpb24oY2FsbGJhY2ssIC4uLmFyZ3MpIHsKICAgICAgaWYgKGFyZ3MpIHsKICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjay5jYWxsKHRoaXMsIC4uLmFyZ3MpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjayk7CiAgICAgIH0KICAgIH07CiAgICBfbmV4dFRpY2sgPSBfX25leHRUaWNrUXVldWVNaWNyb3Rhc2s7CiAgfQogIGZ1bmN0aW9uIG5leHRUaWNrMihjYWxsYmFjaywgLi4uYXJncykgewogICAgX25leHRUaWNrKGNhbGxiYWNrLCAuLi5hcmdzKTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvZm10L3ByaW50Zi50cwogIHZhciBGbGFncyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aGlzLndpZHRoID0gLTE7CiAgICAgIHRoaXMucHJlY2lzaW9uID0gLTE7CiAgICB9CiAgfTsKICB2YXIgbWluID0gTWF0aC5taW47CiAgdmFyIFVOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSID0gIlx1RkZGRCI7CiAgdmFyIERFRkFVTFRfUFJFQ0lTSU9OID0gNjsKICB2YXIgRkxPQVRfUkVHRVhQID0gLygtPykoXGQpXC4/KFxkKillKFsrLV0pKFxkKykvOwogIHZhciBQcmludGYgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcihmb3JtYXQ5LCAuLi5hcmdzKSB7CiAgICAgIHRoaXMuc3RhdGUgPSAwIC8qIFBBU1NUSFJPVUdIICovOwogICAgICB0aGlzLnZlcmIgPSAiIjsKICAgICAgdGhpcy5idWYgPSAiIjsKICAgICAgdGhpcy5hcmdOdW0gPSAwOwogICAgICB0aGlzLmZsYWdzID0gbmV3IEZsYWdzKCk7CiAgICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0OTsKICAgICAgdGhpcy5hcmdzID0gYXJnczsKICAgICAgdGhpcy5oYXZlU2VlbiA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGFyZ3MubGVuZ3RoIH0pOwogICAgICB0aGlzLmkgPSAwOwogICAgfQogICAgZG9QcmludGYoKSB7CiAgICAgIGZvciAoOyB0aGlzLmkgPCB0aGlzLmZvcm1hdC5sZW5ndGg7ICsrdGhpcy5pKSB7CiAgICAgICAgY29uc3QgYzE3ID0gdGhpcy5mb3JtYXRbdGhpcy5pXTsKICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHsKICAgICAgICAgIGNhc2UgMCAvKiBQQVNTVEhST1VHSCAqLzoKICAgICAgICAgICAgaWYgKGMxNyA9PT0gIiUiKSB7CiAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEgLyogUEVSQ0VOVCAqLzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLmJ1ZiArPSBjMTc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDEgLyogUEVSQ0VOVCAqLzoKICAgICAgICAgICAgaWYgKGMxNyA9PT0gIiUiKSB7CiAgICAgICAgICAgICAgdGhpcy5idWYgKz0gYzE3OwogICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAwIC8qIFBBU1NUSFJPVUdIICovOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuaGFuZGxlRm9ybWF0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBFcnJvcigiU2hvdWxkIGJlIHVucmVhY2hhYmxlLCBjZXJ0YWlubHkgYSBidWcgaW4gdGhlIGxpYi4iKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IGV4dHJhcyA9IGZhbHNlOwogICAgICBsZXQgZXJyID0gIiUhKEVYVFJBIjsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCAhPT0gdGhpcy5oYXZlU2Vlbi5sZW5ndGg7ICsraTQpIHsKICAgICAgICBpZiAoIXRoaXMuaGF2ZVNlZW5baTRdKSB7CiAgICAgICAgICBleHRyYXMgPSB0cnVlOwogICAgICAgICAgZXJyICs9IGAgJyR7RGVuby5pbnNwZWN0KHRoaXMuYXJnc1tpNF0pfSdgOwogICAgICAgIH0KICAgICAgfQogICAgICBlcnIgKz0gIikiOwogICAgICBpZiAoZXh0cmFzKSB7CiAgICAgICAgdGhpcy5idWYgKz0gZXJyOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmJ1ZjsKICAgIH0KICAgIGhhbmRsZUZvcm1hdCgpIHsKICAgICAgdGhpcy5mbGFncyA9IG5ldyBGbGFncygpOwogICAgICBjb25zdCBmbGFncyA9IHRoaXMuZmxhZ3M7CiAgICAgIGZvciAoOyB0aGlzLmkgPCB0aGlzLmZvcm1hdC5sZW5ndGg7ICsrdGhpcy5pKSB7CiAgICAgICAgY29uc3QgYzE3ID0gdGhpcy5mb3JtYXRbdGhpcy5pXTsKICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHsKICAgICAgICAgIGNhc2UgMSAvKiBQRVJDRU5UICovOgogICAgICAgICAgICBzd2l0Y2ggKGMxNykgewogICAgICAgICAgICAgIGNhc2UgIlsiOgogICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQb3NpdGlvbmFsKCk7CiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMiAvKiBQT1NJVElPTkFMICovOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiKyI6CiAgICAgICAgICAgICAgICBmbGFncy5wbHVzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgIjwiOgogICAgICAgICAgICAgICAgZmxhZ3MubGVzc3RoYW4gPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiLSI6CiAgICAgICAgICAgICAgICBmbGFncy5kYXNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGZsYWdzLnplcm8gPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgIiMiOgogICAgICAgICAgICAgICAgZmxhZ3Muc2hhcnAgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiICI6CiAgICAgICAgICAgICAgICBmbGFncy5zcGFjZSA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICIwIjoKICAgICAgICAgICAgICAgIGZsYWdzLnplcm8gPSAhZmxhZ3MuZGFzaDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBpZiAoIjEiIDw9IGMxNyAmJiBjMTcgPD0gIjkiIHx8IGMxNyA9PT0gIi4iIHx8IGMxNyA9PT0gIioiKSB7CiAgICAgICAgICAgICAgICAgIGlmIChjMTcgPT09ICIuIikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3MucHJlY2lzaW9uID0gMDsKICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMyAvKiBQUkVDSVNJT04gKi87CiAgICAgICAgICAgICAgICAgICAgdGhpcy5pKys7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQgLyogV0lEVEggKi87CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVXaWR0aEFuZFByZWNpc2lvbihmbGFncyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVZlcmIoKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAyIC8qIFBPU0lUSU9OQUwgKi86CiAgICAgICAgICAgIGlmIChjMTcgPT09ICIqIikgewogICAgICAgICAgICAgIGNvbnN0IHdvcnAgPSB0aGlzLmZsYWdzLnByZWNpc2lvbiA9PT0gLTEgPyAwIC8qIFdJRFRIICovIDogMSAvKiBQUkVDSVNJT04gKi87CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVXaWR0aE9yUHJlY2lzaW9uUmVmKHdvcnApOwogICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxIC8qIFBFUkNFTlQgKi87CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVWZXJiKCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNob3VsZCBub3QgYmUgaGVyZSAke3RoaXMuc3RhdGV9LCBsaWJyYXJ5IGJ1ZyFgKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVdpZHRoT3JQcmVjaXNpb25SZWYod09yUCkgewogICAgICBpZiAodGhpcy5hcmdOdW0gPj0gdGhpcy5hcmdzLmxlbmd0aCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBhcmcgPSB0aGlzLmFyZ3NbdGhpcy5hcmdOdW1dOwogICAgICB0aGlzLmhhdmVTZWVuW3RoaXMuYXJnTnVtXSA9IHRydWU7CiAgICAgIGlmICh0eXBlb2YgYXJnID09PSAibnVtYmVyIikgewogICAgICAgIHN3aXRjaCAod09yUCkgewogICAgICAgICAgY2FzZSAwIC8qIFdJRFRIICovOgogICAgICAgICAgICB0aGlzLmZsYWdzLndpZHRoID0gYXJnOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRoaXMuZmxhZ3MucHJlY2lzaW9uID0gYXJnOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCB0bXAgPSB3T3JQID09PSAwIC8qIFdJRFRIICovID8gIldJRFRIIiA6ICJQUkVDIjsKICAgICAgICB0aGlzLnRtcEVycm9yID0gYCUhKEJBRCAke3RtcH0gJyR7dGhpcy5hcmdzW3RoaXMuYXJnTnVtXX0nKWA7CiAgICAgIH0KICAgICAgdGhpcy5hcmdOdW0rKzsKICAgIH0KICAgIGhhbmRsZVdpZHRoQW5kUHJlY2lzaW9uKGZsYWdzKSB7CiAgICAgIGNvbnN0IGZtdCA9IHRoaXMuZm9ybWF0OwogICAgICBmb3IgKDsgdGhpcy5pICE9PSB0aGlzLmZvcm1hdC5sZW5ndGg7ICsrdGhpcy5pKSB7CiAgICAgICAgY29uc3QgYzE3ID0gZm10W3RoaXMuaV07CiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7CiAgICAgICAgICBjYXNlIDQgLyogV0lEVEggKi86CiAgICAgICAgICAgIHN3aXRjaCAoYzE3KSB7CiAgICAgICAgICAgICAgY2FzZSAiLiI6CiAgICAgICAgICAgICAgICB0aGlzLmZsYWdzLnByZWNpc2lvbiA9IDA7CiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMyAvKiBQUkVDSVNJT04gKi87CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICIqIjoKICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlV2lkdGhPclByZWNpc2lvblJlZigwIC8qIFdJRFRIICovKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlSW50KGMxNyk7CiAgICAgICAgICAgICAgICBpZiAoaXNOYU4odmFsKSkgewogICAgICAgICAgICAgICAgICB0aGlzLmktLTsKICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEgLyogUEVSQ0VOVCAqLzsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmxhZ3Mud2lkdGggPSBmbGFncy53aWR0aCA9PSAtMSA/IDAgOiBmbGFncy53aWR0aDsKICAgICAgICAgICAgICAgIGZsYWdzLndpZHRoICo9IDEwOwogICAgICAgICAgICAgICAgZmxhZ3Mud2lkdGggKz0gdmFsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMyAvKiBQUkVDSVNJT04gKi86IHsKICAgICAgICAgICAgaWYgKGMxNyA9PT0gIioiKSB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVXaWR0aE9yUHJlY2lzaW9uUmVmKDEgLyogUFJFQ0lTSU9OICovKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUludChjMTcpOwogICAgICAgICAgICBpZiAoaXNOYU4odmFsKSkgewogICAgICAgICAgICAgIHRoaXMuaS0tOwogICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxIC8qIFBFUkNFTlQgKi87CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZsYWdzLnByZWNpc2lvbiAqPSAxMDsKICAgICAgICAgICAgZmxhZ3MucHJlY2lzaW9uICs9IHZhbDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNhbid0IGJlIGhlcmUuIGJ1Zy4iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVBvc2l0aW9uYWwoKSB7CiAgICAgIGlmICh0aGlzLmZvcm1hdFt0aGlzLmldICE9PSAiWyIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbid0IGhhcHBlbj8gQnVnLiIpOwogICAgICB9CiAgICAgIGxldCBwb3NpdGlvbmFsID0gMDsKICAgICAgY29uc3QgZm9ybWF0OSA9IHRoaXMuZm9ybWF0OwogICAgICB0aGlzLmkrKzsKICAgICAgbGV0IGVyciA9IGZhbHNlOwogICAgICBmb3IgKDsgdGhpcy5pICE9PSB0aGlzLmZvcm1hdC5sZW5ndGg7ICsrdGhpcy5pKSB7CiAgICAgICAgaWYgKGZvcm1hdDlbdGhpcy5pXSA9PT0gIl0iKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcG9zaXRpb25hbCAqPSAxMDsKICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUludChmb3JtYXQ5W3RoaXMuaV0pOwogICAgICAgIGlmIChpc05hTih2YWwpKSB7CiAgICAgICAgICB0aGlzLnRtcEVycm9yID0gIiUhKEJBRCBJTkRFWCkiOwogICAgICAgICAgZXJyID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcG9zaXRpb25hbCArPSB2YWw7CiAgICAgIH0KICAgICAgaWYgKHBvc2l0aW9uYWwgLSAxID49IHRoaXMuYXJncy5sZW5ndGgpIHsKICAgICAgICB0aGlzLnRtcEVycm9yID0gIiUhKEJBRCBJTkRFWCkiOwogICAgICAgIGVyciA9IHRydWU7CiAgICAgIH0KICAgICAgdGhpcy5hcmdOdW0gPSBlcnIgPyB0aGlzLmFyZ051bSA6IHBvc2l0aW9uYWwgLSAxOwogICAgICByZXR1cm47CiAgICB9CiAgICBoYW5kbGVMZXNzVGhhbigpIHsKICAgICAgY29uc3QgYXJnID0gdGhpcy5hcmdzW3RoaXMuYXJnTnVtXTsKICAgICAgaWYgKChhcmcgfHwge30pLmNvbnN0cnVjdG9yLm5hbWUgIT09ICJBcnJheSIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGFyZyAke2FyZ30gaXMgbm90IGFuIGFycmF5LiBUb2RvIGJldHRlciBlcnJvciBoYW5kbGluZ2ApOwogICAgICB9CiAgICAgIGxldCBzdHIyID0gIlsgIjsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCAhPT0gYXJnLmxlbmd0aDsgKytpNCkgewogICAgICAgIGlmIChpNCAhPT0gMCkKICAgICAgICAgIHN0cjIgKz0gIiwgIjsKICAgICAgICBzdHIyICs9IHRoaXMuX2hhbmRsZVZlcmIoYXJnW2k0XSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0cjIgKyAiIF0iOwogICAgfQogICAgaGFuZGxlVmVyYigpIHsKICAgICAgY29uc3QgdmVyYiA9IHRoaXMuZm9ybWF0W3RoaXMuaV07CiAgICAgIHRoaXMudmVyYiA9IHZlcmI7CiAgICAgIGlmICh0aGlzLnRtcEVycm9yKSB7CiAgICAgICAgdGhpcy5idWYgKz0gdGhpcy50bXBFcnJvcjsKICAgICAgICB0aGlzLnRtcEVycm9yID0gdm9pZCAwOwogICAgICAgIGlmICh0aGlzLmFyZ051bSA8IHRoaXMuaGF2ZVNlZW4ubGVuZ3RoKSB7CiAgICAgICAgICB0aGlzLmhhdmVTZWVuW3RoaXMuYXJnTnVtXSA9IHRydWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMuYXJncy5sZW5ndGggPD0gdGhpcy5hcmdOdW0pIHsKICAgICAgICB0aGlzLmJ1ZiArPSBgJSEoTUlTU0lORyAnJHt2ZXJifScpYDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBhcmcgPSB0aGlzLmFyZ3NbdGhpcy5hcmdOdW1dOwogICAgICAgIHRoaXMuaGF2ZVNlZW5bdGhpcy5hcmdOdW1dID0gdHJ1ZTsKICAgICAgICBpZiAodGhpcy5mbGFncy5sZXNzdGhhbikgewogICAgICAgICAgdGhpcy5idWYgKz0gdGhpcy5oYW5kbGVMZXNzVGhhbigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmJ1ZiArPSB0aGlzLl9oYW5kbGVWZXJiKGFyZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuYXJnTnVtKys7CiAgICAgIHRoaXMuc3RhdGUgPSAwIC8qIFBBU1NUSFJPVUdIICovOwogICAgfQogICAgX2hhbmRsZVZlcmIoYXJnKSB7CiAgICAgIHN3aXRjaCAodGhpcy52ZXJiKSB7CiAgICAgICAgY2FzZSAidCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5wYWQoYXJnLnRvU3RyaW5nKCkpOwogICAgICAgIGNhc2UgImIiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZm10TnVtYmVyKGFyZywgMik7CiAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICByZXR1cm4gdGhpcy5mbXROdW1iZXJDb2RlUG9pbnQoYXJnKTsKICAgICAgICBjYXNlICJkIjoKICAgICAgICAgIHJldHVybiB0aGlzLmZtdE51bWJlcihhcmcsIDEwKTsKICAgICAgICBjYXNlICJvIjoKICAgICAgICAgIHJldHVybiB0aGlzLmZtdE51bWJlcihhcmcsIDgpOwogICAgICAgIGNhc2UgIngiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZm10SGV4KGFyZyk7CiAgICAgICAgY2FzZSAiWCI6CiAgICAgICAgICByZXR1cm4gdGhpcy5mbXRIZXgoYXJnLCB0cnVlKTsKICAgICAgICBjYXNlICJlIjoKICAgICAgICAgIHJldHVybiB0aGlzLmZtdEZsb2F0RShhcmcpOwogICAgICAgIGNhc2UgIkUiOgogICAgICAgICAgcmV0dXJuIHRoaXMuZm10RmxvYXRFKGFyZywgdHJ1ZSk7CiAgICAgICAgY2FzZSAiZiI6CiAgICAgICAgY2FzZSAiRiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5mbXRGbG9hdEYoYXJnKTsKICAgICAgICBjYXNlICJnIjoKICAgICAgICAgIHJldHVybiB0aGlzLmZtdEZsb2F0RyhhcmcpOwogICAgICAgIGNhc2UgIkciOgogICAgICAgICAgcmV0dXJuIHRoaXMuZm10RmxvYXRHKGFyZywgdHJ1ZSk7CiAgICAgICAgY2FzZSAicyI6CiAgICAgICAgICByZXR1cm4gdGhpcy5mbXRTdHJpbmcoYXJnKTsKICAgICAgICBjYXNlICJUIjoKICAgICAgICAgIHJldHVybiB0aGlzLmZtdFN0cmluZyh0eXBlb2YgYXJnKTsKICAgICAgICBjYXNlICJ2IjoKICAgICAgICAgIHJldHVybiB0aGlzLmZtdFYoYXJnKTsKICAgICAgICBjYXNlICJqIjoKICAgICAgICAgIHJldHVybiB0aGlzLmZtdEooYXJnKTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIGAlIShCQUQgVkVSQiAnJHt0aGlzLnZlcmJ9JylgOwogICAgICB9CiAgICB9CiAgICBwYWQoczgpIHsKICAgICAgY29uc3QgcGFkZGluZyA9IHRoaXMuZmxhZ3MuemVybyA/ICIwIiA6ICIgIjsKICAgICAgaWYgKHRoaXMuZmxhZ3MuZGFzaCkgewogICAgICAgIHJldHVybiBzOC5wYWRFbmQodGhpcy5mbGFncy53aWR0aCwgcGFkZGluZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHM4LnBhZFN0YXJ0KHRoaXMuZmxhZ3Mud2lkdGgsIHBhZGRpbmcpOwogICAgfQogICAgcGFkTnVtKG5TdHIsIG5lZykgewogICAgICBsZXQgc2lnbjsKICAgICAgaWYgKG5lZykgewogICAgICAgIHNpZ24gPSAiLSI7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5mbGFncy5wbHVzIHx8IHRoaXMuZmxhZ3Muc3BhY2UpIHsKICAgICAgICBzaWduID0gdGhpcy5mbGFncy5wbHVzID8gIisiIDogIiAiOwogICAgICB9IGVsc2UgewogICAgICAgIHNpZ24gPSAiIjsKICAgICAgfQogICAgICBjb25zdCB6ZXJvID0gdGhpcy5mbGFncy56ZXJvOwogICAgICBpZiAoIXplcm8pIHsKICAgICAgICBuU3RyID0gc2lnbiArIG5TdHI7CiAgICAgIH0KICAgICAgY29uc3QgcGFkID0gemVybyA/ICIwIiA6ICIgIjsKICAgICAgY29uc3QgbGVuID0gemVybyA/IHRoaXMuZmxhZ3Mud2lkdGggLSBzaWduLmxlbmd0aCA6IHRoaXMuZmxhZ3Mud2lkdGg7CiAgICAgIGlmICh0aGlzLmZsYWdzLmRhc2gpIHsKICAgICAgICBuU3RyID0gblN0ci5wYWRFbmQobGVuLCBwYWQpOwogICAgICB9IGVsc2UgewogICAgICAgIG5TdHIgPSBuU3RyLnBhZFN0YXJ0KGxlbiwgcGFkKTsKICAgICAgfQogICAgICBpZiAoemVybykgewogICAgICAgIG5TdHIgPSBzaWduICsgblN0cjsKICAgICAgfQogICAgICByZXR1cm4gblN0cjsKICAgIH0KICAgIGZtdE51bWJlcihuOCwgcmFkaXgsIHVwY2FzZSA9IGZhbHNlKSB7CiAgICAgIGxldCBudW0gPSBNYXRoLmFicyhuOCkudG9TdHJpbmcocmFkaXgpOwogICAgICBjb25zdCBwcmVjID0gdGhpcy5mbGFncy5wcmVjaXNpb247CiAgICAgIGlmIChwcmVjICE9PSAtMSkgewogICAgICAgIHRoaXMuZmxhZ3MuemVybyA9IGZhbHNlOwogICAgICAgIG51bSA9IG44ID09PSAwICYmIHByZWMgPT09IDAgPyAiIiA6IG51bTsKICAgICAgICB3aGlsZSAobnVtLmxlbmd0aCA8IHByZWMpIHsKICAgICAgICAgIG51bSA9ICIwIiArIG51bTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IHByZWZpeCA9ICIiOwogICAgICBpZiAodGhpcy5mbGFncy5zaGFycCkgewogICAgICAgIHN3aXRjaCAocmFkaXgpIHsKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgcHJlZml4ICs9ICIwYiI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICBwcmVmaXggKz0gbnVtLnN0YXJ0c1dpdGgoIjAiKSA/ICIiIDogIjAiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMTY6CiAgICAgICAgICAgIHByZWZpeCArPSAiMHgiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiY2Fubm90IGhhbmRsZSBiYXNlOiAiICsgcmFkaXgpOwogICAgICAgIH0KICAgICAgfQogICAgICBudW0gPSBudW0ubGVuZ3RoID09PSAwID8gbnVtIDogcHJlZml4ICsgbnVtOwogICAgICBpZiAodXBjYXNlKSB7CiAgICAgICAgbnVtID0gbnVtLnRvVXBwZXJDYXNlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMucGFkTnVtKG51bSwgbjggPCAwKTsKICAgIH0KICAgIGZtdE51bWJlckNvZGVQb2ludChuOCkgewogICAgICBsZXQgczggPSAiIjsKICAgICAgdHJ5IHsKICAgICAgICBzOCA9IFN0cmluZy5mcm9tQ29kZVBvaW50KG44KTsKICAgICAgfSBjYXRjaCB7CiAgICAgICAgczggPSBVTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUjsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5wYWQoczgpOwogICAgfQogICAgZm10RmxvYXRTcGVjaWFsKG44KSB7CiAgICAgIGlmIChpc05hTihuOCkpIHsKICAgICAgICB0aGlzLmZsYWdzLnplcm8gPSBmYWxzZTsKICAgICAgICByZXR1cm4gdGhpcy5wYWROdW0oIk5hTiIsIGZhbHNlKTsKICAgICAgfQogICAgICBpZiAobjggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgewogICAgICAgIHRoaXMuZmxhZ3MuemVybyA9IGZhbHNlOwogICAgICAgIHRoaXMuZmxhZ3MucGx1cyA9IHRydWU7CiAgICAgICAgcmV0dXJuIHRoaXMucGFkTnVtKCJJbmYiLCBmYWxzZSk7CiAgICAgIH0KICAgICAgaWYgKG44ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpIHsKICAgICAgICB0aGlzLmZsYWdzLnplcm8gPSBmYWxzZTsKICAgICAgICByZXR1cm4gdGhpcy5wYWROdW0oIkluZiIsIHRydWUpOwogICAgICB9CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIHJvdW5kRnJhY3Rpb25Ub1ByZWNpc2lvbihmcmFjdGlvbmFsLCBwcmVjaXNpb24pIHsKICAgICAgbGV0IHJvdW5kID0gZmFsc2U7CiAgICAgIGlmIChmcmFjdGlvbmFsLmxlbmd0aCA+IHByZWNpc2lvbikgewogICAgICAgIGZyYWN0aW9uYWwgPSAiMSIgKyBmcmFjdGlvbmFsOwogICAgICAgIGxldCB0bXAgPSBwYXJzZUludChmcmFjdGlvbmFsLnN1YnN0cigwLCBwcmVjaXNpb24gKyAyKSkgLyAxMDsKICAgICAgICB0bXAgPSBNYXRoLnJvdW5kKHRtcCk7CiAgICAgICAgZnJhY3Rpb25hbCA9IE1hdGguZmxvb3IodG1wKS50b1N0cmluZygpOwogICAgICAgIHJvdW5kID0gZnJhY3Rpb25hbFswXSA9PT0gIjIiOwogICAgICAgIGZyYWN0aW9uYWwgPSBmcmFjdGlvbmFsLnN1YnN0cigxKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3aGlsZSAoZnJhY3Rpb25hbC5sZW5ndGggPCBwcmVjaXNpb24pIHsKICAgICAgICAgIGZyYWN0aW9uYWwgKz0gIjAiOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gW2ZyYWN0aW9uYWwsIHJvdW5kXTsKICAgIH0KICAgIGZtdEZsb2F0RShuOCwgdXBjYXNlID0gZmFsc2UpIHsKICAgICAgY29uc3Qgc3BlY2lhbCA9IHRoaXMuZm10RmxvYXRTcGVjaWFsKG44KTsKICAgICAgaWYgKHNwZWNpYWwgIT09ICIiKSB7CiAgICAgICAgcmV0dXJuIHNwZWNpYWw7CiAgICAgIH0KICAgICAgY29uc3QgbTIzID0gbjgudG9FeHBvbmVudGlhbCgpLm1hdGNoKEZMT0FUX1JFR0VYUCk7CiAgICAgIGlmICghbTIzKSB7CiAgICAgICAgdGhyb3cgRXJyb3IoImNhbid0IGhhcHBlbiwgYnVnIik7CiAgICAgIH0KICAgICAgbGV0IGZyYWN0aW9uYWwgPSBtMjNbMyAvKiBmcmFjdGlvbmFsICovXTsKICAgICAgY29uc3QgcHJlY2lzaW9uID0gdGhpcy5mbGFncy5wcmVjaXNpb24gIT09IC0xID8gdGhpcy5mbGFncy5wcmVjaXNpb24gOiBERUZBVUxUX1BSRUNJU0lPTjsKICAgICAgbGV0IHJvdW5kaW5nID0gZmFsc2U7CiAgICAgIFtmcmFjdGlvbmFsLCByb3VuZGluZ10gPSB0aGlzLnJvdW5kRnJhY3Rpb25Ub1ByZWNpc2lvbigKICAgICAgICBmcmFjdGlvbmFsLAogICAgICAgIHByZWNpc2lvbgogICAgICApOwogICAgICBsZXQgZTUgPSBtMjNbNSAvKiBleHBvbmVudCAqL107CiAgICAgIGxldCBlc2lnbiA9IG0yM1s0IC8qIGVzaWduICovXTsKICAgICAgbGV0IG1hbnRpc3NhID0gcGFyc2VJbnQobTIzWzIgLyogbWFudGlzc2EgKi9dKTsKICAgICAgaWYgKHJvdW5kaW5nKSB7CiAgICAgICAgbWFudGlzc2EgKz0gMTsKICAgICAgICBpZiAoMTAgPD0gbWFudGlzc2EpIHsKICAgICAgICAgIG1hbnRpc3NhID0gMTsKICAgICAgICAgIGNvbnN0IHIzID0gcGFyc2VJbnQoZXNpZ24gKyBlNSkgKyAxOwogICAgICAgICAgZTUgPSByMy50b1N0cmluZygpOwogICAgICAgICAgZXNpZ24gPSByMyA8IDAgPyAiLSIgOiAiKyI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGU1ID0gZTUubGVuZ3RoID09IDEgPyAiMCIgKyBlNSA6IGU1OwogICAgICBjb25zdCB2YWwgPSBgJHttYW50aXNzYX0uJHtmcmFjdGlvbmFsfSR7dXBjYXNlID8gIkUiIDogImUifSR7ZXNpZ259JHtlNX1gOwogICAgICByZXR1cm4gdGhpcy5wYWROdW0odmFsLCBuOCA8IDApOwogICAgfQogICAgZm10RmxvYXRGKG44KSB7CiAgICAgIGNvbnN0IHNwZWNpYWwgPSB0aGlzLmZtdEZsb2F0U3BlY2lhbChuOCk7CiAgICAgIGlmIChzcGVjaWFsICE9PSAiIikgewogICAgICAgIHJldHVybiBzcGVjaWFsOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGV4cGFuZE51bWJlcihuOSkgewogICAgICAgIGlmIChOdW1iZXIuaXNTYWZlSW50ZWdlcihuOSkpIHsKICAgICAgICAgIHJldHVybiBuOS50b1N0cmluZygpICsgIi4iOwogICAgICAgIH0KICAgICAgICBjb25zdCB0NCA9IG45LnRvRXhwb25lbnRpYWwoKS5zcGxpdCgiZSIpOwogICAgICAgIGxldCBtMjMgPSB0NFswXS5yZXBsYWNlKCIuIiwgIiIpOwogICAgICAgIGNvbnN0IGU1ID0gcGFyc2VJbnQodDRbMV0pOwogICAgICAgIGlmIChlNSA8IDApIHsKICAgICAgICAgIGxldCBuU3RyID0gIjAuIjsKICAgICAgICAgIGZvciAobGV0IGk0ID0gMDsgaTQgIT09IE1hdGguYWJzKGU1KSAtIDE7ICsraTQpIHsKICAgICAgICAgICAgblN0ciArPSAiMCI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gblN0ciArPSBtMjM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHNwbElkeCA9IGU1ICsgMTsKICAgICAgICAgIHdoaWxlIChtMjMubGVuZ3RoIDwgc3BsSWR4KSB7CiAgICAgICAgICAgIG0yMyArPSAiMCI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbTIzLnN1YnN0cigwLCBzcGxJZHgpICsgIi4iICsgbTIzLnN1YnN0cihzcGxJZHgpOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCB2YWwgPSBleHBhbmROdW1iZXIoTWF0aC5hYnMobjgpKTsKICAgICAgY29uc3QgYXJyID0gdmFsLnNwbGl0KCIuIik7CiAgICAgIGxldCBkaWcgPSBhcnJbMF07CiAgICAgIGxldCBmcmFjdGlvbmFsID0gYXJyWzFdOwogICAgICBjb25zdCBwcmVjaXNpb24gPSB0aGlzLmZsYWdzLnByZWNpc2lvbiAhPT0gLTEgPyB0aGlzLmZsYWdzLnByZWNpc2lvbiA6IERFRkFVTFRfUFJFQ0lTSU9OOwogICAgICBsZXQgcm91bmQgPSBmYWxzZTsKICAgICAgW2ZyYWN0aW9uYWwsIHJvdW5kXSA9IHRoaXMucm91bmRGcmFjdGlvblRvUHJlY2lzaW9uKGZyYWN0aW9uYWwsIHByZWNpc2lvbik7CiAgICAgIGlmIChyb3VuZCkgewogICAgICAgIGRpZyA9IChwYXJzZUludChkaWcpICsgMSkudG9TdHJpbmcoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5wYWROdW0oYCR7ZGlnfS4ke2ZyYWN0aW9uYWx9YCwgbjggPCAwKTsKICAgIH0KICAgIGZtdEZsb2F0RyhuOCwgdXBjYXNlID0gZmFsc2UpIHsKICAgICAgY29uc3Qgc3BlY2lhbCA9IHRoaXMuZm10RmxvYXRTcGVjaWFsKG44KTsKICAgICAgaWYgKHNwZWNpYWwgIT09ICIiKSB7CiAgICAgICAgcmV0dXJuIHNwZWNpYWw7CiAgICAgIH0KICAgICAgbGV0IFAyNyA9IHRoaXMuZmxhZ3MucHJlY2lzaW9uICE9PSAtMSA/IHRoaXMuZmxhZ3MucHJlY2lzaW9uIDogREVGQVVMVF9QUkVDSVNJT047CiAgICAgIFAyNyA9IFAyNyA9PT0gMCA/IDEgOiBQMjc7CiAgICAgIGNvbnN0IG0yMyA9IG44LnRvRXhwb25lbnRpYWwoKS5tYXRjaChGTE9BVF9SRUdFWFApOwogICAgICBpZiAoIW0yMykgewogICAgICAgIHRocm93IEVycm9yKCJjYW4ndCBoYXBwZW4iKTsKICAgICAgfQogICAgICBjb25zdCBYMjMgPSBwYXJzZUludChtMjNbNSAvKiBleHBvbmVudCAqL10pICogKG0yM1s0IC8qIGVzaWduICovXSA9PT0gIi0iID8gLTEgOiAxKTsKICAgICAgbGV0IG5TdHIgPSAiIjsKICAgICAgaWYgKFAyNyA+IFgyMyAmJiBYMjMgPj0gLTQpIHsKICAgICAgICB0aGlzLmZsYWdzLnByZWNpc2lvbiA9IFAyNyAtIChYMjMgKyAxKTsKICAgICAgICBuU3RyID0gdGhpcy5mbXRGbG9hdEYobjgpOwogICAgICAgIGlmICghdGhpcy5mbGFncy5zaGFycCkgewogICAgICAgICAgblN0ciA9IG5TdHIucmVwbGFjZSgvXC4/MCokLywgIiIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmZsYWdzLnByZWNpc2lvbiA9IFAyNyAtIDE7CiAgICAgICAgblN0ciA9IHRoaXMuZm10RmxvYXRFKG44KTsKICAgICAgICBpZiAoIXRoaXMuZmxhZ3Muc2hhcnApIHsKICAgICAgICAgIG5TdHIgPSBuU3RyLnJlcGxhY2UoL1wuPzAqZS8sIHVwY2FzZSA/ICJFIiA6ICJlIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBuU3RyOwogICAgfQogICAgZm10U3RyaW5nKHM4KSB7CiAgICAgIGlmICh0aGlzLmZsYWdzLnByZWNpc2lvbiAhPT0gLTEpIHsKICAgICAgICBzOCA9IHM4LnN1YnN0cigwLCB0aGlzLmZsYWdzLnByZWNpc2lvbik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMucGFkKHM4KTsKICAgIH0KICAgIGZtdEhleCh2YWwsIHVwcGVyID0gZmFsc2UpIHsKICAgICAgc3dpdGNoICh0eXBlb2YgdmFsKSB7CiAgICAgICAgY2FzZSAibnVtYmVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLmZtdE51bWJlcih2YWwsIDE2LCB1cHBlcik7CiAgICAgICAgY2FzZSAic3RyaW5nIjogewogICAgICAgICAgY29uc3Qgc2hhcnAgPSB0aGlzLmZsYWdzLnNoYXJwICYmIHZhbC5sZW5ndGggIT09IDA7CiAgICAgICAgICBsZXQgaGV4ID0gc2hhcnAgPyAiMHgiIDogIiI7CiAgICAgICAgICBjb25zdCBwcmVjID0gdGhpcy5mbGFncy5wcmVjaXNpb247CiAgICAgICAgICBjb25zdCBlbmQgPSBwcmVjICE9PSAtMSA/IG1pbihwcmVjLCB2YWwubGVuZ3RoKSA6IHZhbC5sZW5ndGg7CiAgICAgICAgICBmb3IgKGxldCBpNCA9IDA7IGk0ICE9PSBlbmQ7ICsraTQpIHsKICAgICAgICAgICAgaWYgKGk0ICE9PSAwICYmIHRoaXMuZmxhZ3Muc3BhY2UpIHsKICAgICAgICAgICAgICBoZXggKz0gc2hhcnAgPyAiIDB4IiA6ICIgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBjMTcgPSAodmFsLmNoYXJDb2RlQXQoaTQpICYgMjU1KS50b1N0cmluZygxNik7CiAgICAgICAgICAgIGhleCArPSBjMTcubGVuZ3RoID09PSAxID8gYDAke2MxN31gIDogYzE3OwogICAgICAgICAgfQogICAgICAgICAgaWYgKHVwcGVyKSB7CiAgICAgICAgICAgIGhleCA9IGhleC50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMucGFkKGhleCk7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICJjdXJyZW50bHkgb25seSBudW1iZXIgYW5kIHN0cmluZyBhcmUgaW1wbGVtZW50ZWQgZm9yIGhleCIKICAgICAgICAgICk7CiAgICAgIH0KICAgIH0KICAgIGZtdFYodmFsKSB7CiAgICAgIGlmICh0aGlzLmZsYWdzLnNoYXJwKSB7CiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZmxhZ3MucHJlY2lzaW9uICE9PSAtMSA/IHsgZGVwdGg6IHRoaXMuZmxhZ3MucHJlY2lzaW9uIH0gOiB7fTsKICAgICAgICByZXR1cm4gdGhpcy5wYWQoRGVuby5pbnNwZWN0KHZhbCwgb3B0aW9ucykpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHAxOCA9IHRoaXMuZmxhZ3MucHJlY2lzaW9uOwogICAgICAgIHJldHVybiBwMTggPT09IC0xID8gdmFsLnRvU3RyaW5nKCkgOiB2YWwudG9TdHJpbmcoKS5zdWJzdHIoMCwgcDE4KTsKICAgICAgfQogICAgfQogICAgZm10Sih2YWwpIHsKICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBzcHJpbnRmKGZvcm1hdDksIC4uLmFyZ3MpIHsKICAgIGNvbnN0IHByaW50ZiA9IG5ldyBQcmludGYoZm9ybWF0OSwgLi4uYXJncyk7CiAgICByZXR1cm4gcHJpbnRmLmRvUHJpbnRmKCk7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvdXRpbC9kZWJ1Z2xvZy50cwogIHZhciBkZWJ1Z0ltcGxzOwogIHZhciB0ZXN0RW5hYmxlZDsKICBmdW5jdGlvbiBpbml0aWFsaXplRGVidWdFbnYoZGVidWdFbnYyKSB7CiAgICBkZWJ1Z0ltcGxzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBpZiAoZGVidWdFbnYyKSB7CiAgICAgIGRlYnVnRW52MiA9IGRlYnVnRW52Mi5yZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCAiXFwkJiIpLnJlcGxhY2VBbGwoIioiLCAiLioiKS5yZXBsYWNlQWxsKCIsIiwgIiR8XiIpOwogICAgICBjb25zdCBkZWJ1Z0VudlJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7ZGVidWdFbnYyfSRgLCAiaSIpOwogICAgICB0ZXN0RW5hYmxlZCA9IChzdHIyKSA9PiBkZWJ1Z0VudlJlZ2V4LmV4ZWMoc3RyMikgIT09IG51bGw7CiAgICB9IGVsc2UgewogICAgICB0ZXN0RW5hYmxlZCA9ICgpID0+IGZhbHNlOwogICAgfQogIH0KICBmdW5jdGlvbiBlbWl0V2FybmluZ0lmTmVlZGVkKHNldDIpIHsKICAgIGlmICgiSFRUUCIgPT09IHNldDIgfHwgIkhUVFAyIiA9PT0gc2V0MikgewogICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgIlNldHRpbmcgdGhlIE5PREVfREVCVUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gJyIgKyBzZXQyLnRvTG93ZXJDYXNlKCkgKyAiJyBjYW4gZXhwb3NlIHNlbnNpdGl2ZSBkYXRhIChzdWNoIGFzIHBhc3N3b3JkcywgdG9rZW5zIGFuZCBhdXRoZW50aWNhdGlvbiBoZWFkZXJzKSBpbiB0aGUgcmVzdWx0aW5nIGxvZy4iCiAgICAgICk7CiAgICB9CiAgfQogIHZhciBub29wID0gKCkgPT4gewogIH07CiAgZnVuY3Rpb24gZGVidWdsb2dJbXBsKGVuYWJsZWQsIHNldDIpIHsKICAgIGlmIChkZWJ1Z0ltcGxzW3NldDJdID09PSB2b2lkIDApIHsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBlbWl0V2FybmluZ0lmTmVlZGVkKHNldDIpOwogICAgICAgIGRlYnVnSW1wbHNbc2V0Ml0gPSBmdW5jdGlvbiBkZWJ1ZzIoLi4uYXJncykgewogICAgICAgICAgY29uc3QgbXNnID0gYXJncy5tYXAoKGFyZykgPT4gaW5zcGVjdChhcmcpKS5qb2luKCIgIik7CiAgICAgICAgICBjb25zb2xlLmVycm9yKHNwcmludGYoIiVzICVzOiAlcyIsIHNldDIsIFN0cmluZyhEZW5vLnBpZCksIG1zZykpOwogICAgICAgIH07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGVidWdJbXBsc1tzZXQyXSA9IG5vb3A7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkZWJ1Z0ltcGxzW3NldDJdOwogIH0KICBmdW5jdGlvbiBkZWJ1Z2xvZyhzZXQyLCBjYikgewogICAgZnVuY3Rpb24gaW5pdCgpIHsKICAgICAgc2V0MiA9IHNldDIudG9VcHBlckNhc2UoKTsKICAgICAgZW5hYmxlZCA9IHRlc3RFbmFibGVkKHNldDIpOwogICAgfQogICAgbGV0IGRlYnVnMiA9ICguLi5hcmdzKSA9PiB7CiAgICAgIGluaXQoKTsKICAgICAgZGVidWcyID0gZGVidWdsb2dJbXBsKGVuYWJsZWQsIHNldDIpOwogICAgICBpZiAodHlwZW9mIGNiID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgY2IoZGVidWcyKTsKICAgICAgfQogICAgICByZXR1cm4gZGVidWcyKC4uLmFyZ3MpOwogICAgfTsKICAgIGxldCBlbmFibGVkOwogICAgbGV0IHRlc3QgPSAoKSA9PiB7CiAgICAgIGluaXQoKTsKICAgICAgdGVzdCA9ICgpID0+IGVuYWJsZWQ7CiAgICAgIHJldHVybiBlbmFibGVkOwogICAgfTsKICAgIGNvbnN0IGxvZ2dlciA9ICguLi5hcmdzKSA9PiBkZWJ1ZzIoLi4uYXJncyk7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobG9nZ2VyLCAiZW5hYmxlZCIsIHsKICAgICAgZ2V0KCkgewogICAgICAgIHJldHVybiB0ZXN0KCk7CiAgICAgIH0sCiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgZW51bWVyYWJsZTogdHJ1ZQogICAgfSk7CiAgICByZXR1cm4gbG9nZ2VyOwogIH0KICB2YXIgZGVidWdFbnY7CiAgdHJ5IHsKICAgIGRlYnVnRW52ID0gRGVuby5lbnYuZ2V0KCJOT0RFX0RFQlVHIikgPz8gIiI7CiAgfSBjYXRjaCAoZXJyb3IpIHsKICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLlBlcm1pc3Npb25EZW5pZWQpIHsKICAgICAgZGVidWdFbnYgPSAiIjsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IGVycm9yOwogICAgfQogIH0KICBpbml0aWFsaXplRGVidWdFbnYoZGVidWdFbnYpOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy91di50cwogIHZhciB1dl9leHBvcnRzID0ge307CiAgX19leHBvcnQodXZfZXhwb3J0cywgewogICAgVVZfRUFJX01FTU9SWTogKCkgPT4gVVZfRUFJX01FTU9SWSwKICAgIFVWX0VCQURGOiAoKSA9PiBVVl9FQkFERiwKICAgIFVWX0VFWElTVDogKCkgPT4gVVZfRUVYSVNULAogICAgVVZfRUlOVkFMOiAoKSA9PiBVVl9FSU5WQUwsCiAgICBVVl9FTk9FTlQ6ICgpID0+IFVWX0VOT0VOVCwKICAgIFVWX0VOT1RTT0NLOiAoKSA9PiBVVl9FTk9UU09DSywKICAgIFVWX1VOS05PV046ICgpID0+IFVWX1VOS05PV04sCiAgICBjb2RlTWFwOiAoKSA9PiBjb2RlTWFwLAogICAgZXJyb3JNYXA6ICgpID0+IGVycm9yTWFwLAogICAgbWFwU3lzRXJybm9Ub1V2RXJybm86ICgpID0+IG1hcFN5c0Vycm5vVG9VdkVycm5vCiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvX3V0aWwvb3MudHMKICB2YXIgb3NUeXBlMiA9ICgoKSA9PiB7CiAgICBjb25zdCB7IERlbm86IERlbm8zIH0gPSBnbG9iYWxUaGlzOwogICAgaWYgKHR5cGVvZiBEZW5vMz8uYnVpbGQ/Lm9zID09PSAic3RyaW5nIikgewogICAgICByZXR1cm4gRGVubzMuYnVpbGQub3M7CiAgICB9CiAgICBjb25zdCB7IG5hdmlnYXRvcjogbmF2aWdhdG9yMiB9ID0gZ2xvYmFsVGhpczsKICAgIGlmIChuYXZpZ2F0b3IyPy5hcHBWZXJzaW9uPy5pbmNsdWRlcz8uKCJXaW4iKSkgewogICAgICByZXR1cm4gIndpbmRvd3MiOwogICAgfQogICAgcmV0dXJuICJsaW51eCI7CiAgfSkoKTsKICB2YXIgaXNXaW5kb3dzMiA9IG9zVHlwZTIgPT09ICJ3aW5kb3dzIjsKICB2YXIgaXNMaW51eCA9IG9zVHlwZTIgPT09ICJsaW51eCI7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL193aW5lcnJvci50cwogIHZhciBFUlJPUl9JTlZBTElEX0ZVTkNUSU9OID0gMTsKICB2YXIgRVJST1JfRklMRV9OT1RfRk9VTkQgPSAyOwogIHZhciBFUlJPUl9QQVRIX05PVF9GT1VORCA9IDM7CiAgdmFyIEVSUk9SX1RPT19NQU5ZX09QRU5fRklMRVMgPSA0OwogIHZhciBFUlJPUl9BQ0NFU1NfREVOSUVEID0gNTsKICB2YXIgRVJST1JfSU5WQUxJRF9IQU5ETEUgPSA2OwogIHZhciBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWSA9IDg7CiAgdmFyIEVSUk9SX0lOVkFMSURfREFUQSA9IDEzOwogIHZhciBFUlJPUl9PVVRPRk1FTU9SWSA9IDE0OwogIHZhciBFUlJPUl9JTlZBTElEX0RSSVZFID0gMTU7CiAgdmFyIEVSUk9SX05PVF9TQU1FX0RFVklDRSA9IDE3OwogIHZhciBFUlJPUl9XUklURV9QUk9URUNUID0gMTk7CiAgdmFyIEVSUk9SX0NSQyA9IDIzOwogIHZhciBFUlJPUl9HRU5fRkFJTFVSRSA9IDMxOwogIHZhciBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTiA9IDMyOwogIHZhciBFUlJPUl9MT0NLX1ZJT0xBVElPTiA9IDMzOwogIHZhciBFUlJPUl9IQU5ETEVfRElTS19GVUxMID0gMzk7CiAgdmFyIEVSUk9SX05PVF9TVVBQT1JURUQgPSA1MDsKICB2YXIgRVJST1JfTkVUTkFNRV9ERUxFVEVEID0gNjQ7CiAgdmFyIEVSUk9SX0ZJTEVfRVhJU1RTID0gODA7CiAgdmFyIEVSUk9SX0NBTk5PVF9NQUtFID0gODI7CiAgdmFyIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSID0gODc7CiAgdmFyIEVSUk9SX0JST0tFTl9QSVBFID0gMTA5OwogIHZhciBFUlJPUl9PUEVOX0ZBSUxFRCA9IDExMDsKICB2YXIgRVJST1JfQlVGRkVSX09WRVJGTE9XID0gMTExOwogIHZhciBFUlJPUl9ESVNLX0ZVTEwgPSAxMTI7CiAgdmFyIEVSUk9SX1NFTV9USU1FT1VUID0gMTIxOwogIHZhciBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSID0gMTIyOwogIHZhciBFUlJPUl9JTlZBTElEX05BTUUgPSAxMjM7CiAgdmFyIEVSUk9SX01PRF9OT1RfRk9VTkQgPSAxMjY7CiAgdmFyIEVSUk9SX0RJUl9OT1RfRU1QVFkgPSAxNDU7CiAgdmFyIEVSUk9SX1NJR05BTF9SRUZVU0VEID0gMTU2OwogIHZhciBFUlJPUl9CQURfUEFUSE5BTUUgPSAxNjE7CiAgdmFyIEVSUk9SX0FMUkVBRFlfRVhJU1RTID0gMTgzOwogIHZhciBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5EID0gMjAzOwogIHZhciBFUlJPUl9OT19TSUdOQUxfU0VOVCA9IDIwNTsKICB2YXIgRVJST1JfRklMRU5BTUVfRVhDRURfUkFOR0UgPSAyMDY7CiAgdmFyIEVSUk9SX01FVEFfRVhQQU5TSU9OX1RPT19MT05HID0gMjA4OwogIHZhciBFUlJPUl9CQURfUElQRSA9IDIzMDsKICB2YXIgRVJST1JfUElQRV9CVVNZID0gMjMxOwogIHZhciBFUlJPUl9OT19EQVRBID0gMjMyOwogIHZhciBFUlJPUl9QSVBFX05PVF9DT05ORUNURUQgPSAyMzM7CiAgdmFyIEVSUk9SX0RJUkVDVE9SWSA9IDI2NzsKICB2YXIgRVJST1JfRUFfVEFCTEVfRlVMTCA9IDI3NzsKICB2YXIgRVJST1JfT1BFUkFUSU9OX0FCT1JURUQgPSA5OTU7CiAgdmFyIEVSUk9SX05PQUNDRVNTID0gOTk4OwogIHZhciBFUlJPUl9JTlZBTElEX0ZMQUdTID0gMTAwNDsKICB2YXIgRVJST1JfRU5EX09GX01FRElBID0gMTEwMDsKICB2YXIgRVJST1JfRklMRU1BUktfREVURUNURUQgPSAxMTAxOwogIHZhciBFUlJPUl9CRUdJTk5JTkdfT0ZfTUVESUEgPSAxMTAyOwogIHZhciBFUlJPUl9TRVRNQVJLX0RFVEVDVEVEID0gMTEwMzsKICB2YXIgRVJST1JfTk9fREFUQV9ERVRFQ1RFRCA9IDExMDQ7CiAgdmFyIEVSUk9SX0lOVkFMSURfQkxPQ0tfTEVOR1RIID0gMTEwNjsKICB2YXIgRVJST1JfQlVTX1JFU0VUID0gMTExMTsKICB2YXIgRVJST1JfTk9fVU5JQ09ERV9UUkFOU0xBVElPTiA9IDExMTM7CiAgdmFyIEVSUk9SX0lPX0RFVklDRSA9IDExMTc7CiAgdmFyIEVSUk9SX0VPTV9PVkVSRkxPVyA9IDExMjk7CiAgdmFyIEVSUk9SX0RFVklDRV9SRVFVSVJFU19DTEVBTklORyA9IDExNjU7CiAgdmFyIEVSUk9SX0RFVklDRV9ET09SX09QRU4gPSAxMTY2OwogIHZhciBFUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQgPSAxMjI1OwogIHZhciBFUlJPUl9BRERSRVNTX0FMUkVBRFlfQVNTT0NJQVRFRCA9IDEyMjc7CiAgdmFyIEVSUk9SX05FVFdPUktfVU5SRUFDSEFCTEUgPSAxMjMxOwogIHZhciBFUlJPUl9IT1NUX1VOUkVBQ0hBQkxFID0gMTIzMjsKICB2YXIgRVJST1JfQ09OTkVDVElPTl9BQk9SVEVEID0gMTIzNjsKICB2YXIgRVJST1JfUFJJVklMRUdFX05PVF9IRUxEID0gMTMxNDsKICB2YXIgRVJST1JfRElTS19DT1JSVVBUID0gMTM5MzsKICB2YXIgRVJST1JfQ0FOVF9BQ0NFU1NfRklMRSA9IDE5MjA7CiAgdmFyIEVSUk9SX0NBTlRfUkVTT0xWRV9GSUxFTkFNRSA9IDE5MjE7CiAgdmFyIEVSUk9SX05PVF9DT05ORUNURUQgPSAyMjUwOwogIHZhciBFUlJPUl9JTlZBTElEX1JFUEFSU0VfREFUQSA9IDQzOTI7CiAgdmFyIFdTQUVJTlRSID0gMTAwMDQ7CiAgdmFyIFdTQUVBQ0NFUyA9IDEwMDEzOwogIHZhciBXU0FFRkFVTFQgPSAxMDAxNDsKICB2YXIgV1NBRUlOVkFMID0gMTAwMjI7CiAgdmFyIFdTQUVNRklMRSA9IDEwMDI0OwogIHZhciBXU0FFV09VTERCTE9DSyA9IDEwMDM1OwogIHZhciBXU0FFQUxSRUFEWSA9IDEwMDM3OwogIHZhciBXU0FFTk9UU09DSyA9IDEwMDM4OwogIHZhciBXU0FFTVNHU0laRSA9IDEwMDQwOwogIHZhciBXU0FFUFJPVE9OT1NVUFBPUlQgPSAxMDA0MzsKICB2YXIgV1NBRVNPQ0tUTk9TVVBQT1JUID0gMTAwNDQ7CiAgdmFyIFdTQUVQRk5PU1VQUE9SVCA9IDEwMDQ2OwogIHZhciBXU0FFQUZOT1NVUFBPUlQgPSAxMDA0NzsKICB2YXIgV1NBRUFERFJJTlVTRSA9IDEwMDQ4OwogIHZhciBXU0FFQUREUk5PVEFWQUlMID0gMTAwNDk7CiAgdmFyIFdTQUVORVRVTlJFQUNIID0gMTAwNTE7CiAgdmFyIFdTQUVDT05OQUJPUlRFRCA9IDEwMDUzOwogIHZhciBXU0FFQ09OTlJFU0VUID0gMTAwNTQ7CiAgdmFyIFdTQUVOT0JVRlMgPSAxMDA1NTsKICB2YXIgV1NBRUlTQ09OTiA9IDEwMDU2OwogIHZhciBXU0FFTk9UQ09OTiA9IDEwMDU3OwogIHZhciBXU0FFU0hVVERPV04gPSAxMDA1ODsKICB2YXIgV1NBRVRJTUVET1VUID0gMTAwNjA7CiAgdmFyIFdTQUVDT05OUkVGVVNFRCA9IDEwMDYxOwogIHZhciBXU0FFSE9TVFVOUkVBQ0ggPSAxMDA2NTsKICB2YXIgV1NBSE9TVF9OT1RfRk9VTkQgPSAxMTAwMTsKICB2YXIgV1NBTk9fREFUQSA9IDExMDA0OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9fbGlidXZfd2luZXJyb3IudHMKICBmdW5jdGlvbiB1dlRyYW5zbGF0ZVN5c0Vycm9yKHN5c0Vycm5vKSB7CiAgICBzd2l0Y2ggKHN5c0Vycm5vKSB7CiAgICAgIGNhc2UgRVJST1JfQUNDRVNTX0RFTklFRDoKICAgICAgICByZXR1cm4gIkVBQ0NFUyI7CiAgICAgIGNhc2UgRVJST1JfTk9BQ0NFU1M6CiAgICAgICAgcmV0dXJuICJFQUNDRVMiOwogICAgICBjYXNlIFdTQUVBQ0NFUzoKICAgICAgICByZXR1cm4gIkVBQ0NFUyI7CiAgICAgIGNhc2UgRVJST1JfQ0FOVF9BQ0NFU1NfRklMRToKICAgICAgICByZXR1cm4gIkVBQ0NFUyI7CiAgICAgIGNhc2UgRVJST1JfQUREUkVTU19BTFJFQURZX0FTU09DSUFURUQ6CiAgICAgICAgcmV0dXJuICJFQUREUklOVVNFIjsKICAgICAgY2FzZSBXU0FFQUREUklOVVNFOgogICAgICAgIHJldHVybiAiRUFERFJJTlVTRSI7CiAgICAgIGNhc2UgV1NBRUFERFJOT1RBVkFJTDoKICAgICAgICByZXR1cm4gIkVBRERSTk9UQVZBSUwiOwogICAgICBjYXNlIFdTQUVBRk5PU1VQUE9SVDoKICAgICAgICByZXR1cm4gIkVBRk5PU1VQUE9SVCI7CiAgICAgIGNhc2UgV1NBRVdPVUxEQkxPQ0s6CiAgICAgICAgcmV0dXJuICJFQUdBSU4iOwogICAgICBjYXNlIFdTQUVBTFJFQURZOgogICAgICAgIHJldHVybiAiRUFMUkVBRFkiOwogICAgICBjYXNlIEVSUk9SX0lOVkFMSURfRkxBR1M6CiAgICAgICAgcmV0dXJuICJFQkFERiI7CiAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9IQU5ETEU6CiAgICAgICAgcmV0dXJuICJFQkFERiI7CiAgICAgIGNhc2UgRVJST1JfTE9DS19WSU9MQVRJT046CiAgICAgICAgcmV0dXJuICJFQlVTWSI7CiAgICAgIGNhc2UgRVJST1JfUElQRV9CVVNZOgogICAgICAgIHJldHVybiAiRUJVU1kiOwogICAgICBjYXNlIEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OOgogICAgICAgIHJldHVybiAiRUJVU1kiOwogICAgICBjYXNlIEVSUk9SX09QRVJBVElPTl9BQk9SVEVEOgogICAgICAgIHJldHVybiAiRUNBTkNFTEVEIjsKICAgICAgY2FzZSBXU0FFSU5UUjoKICAgICAgICByZXR1cm4gIkVDQU5DRUxFRCI7CiAgICAgIGNhc2UgRVJST1JfTk9fVU5JQ09ERV9UUkFOU0xBVElPTjoKICAgICAgICByZXR1cm4gIkVDSEFSU0VUIjsKICAgICAgY2FzZSBFUlJPUl9DT05ORUNUSU9OX0FCT1JURUQ6CiAgICAgICAgcmV0dXJuICJFQ09OTkFCT1JURUQiOwogICAgICBjYXNlIFdTQUVDT05OQUJPUlRFRDoKICAgICAgICByZXR1cm4gIkVDT05OQUJPUlRFRCI7CiAgICAgIGNhc2UgRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEOgogICAgICAgIHJldHVybiAiRUNPTk5SRUZVU0VEIjsKICAgICAgY2FzZSBXU0FFQ09OTlJFRlVTRUQ6CiAgICAgICAgcmV0dXJuICJFQ09OTlJFRlVTRUQiOwogICAgICBjYXNlIEVSUk9SX05FVE5BTUVfREVMRVRFRDoKICAgICAgICByZXR1cm4gIkVDT05OUkVTRVQiOwogICAgICBjYXNlIFdTQUVDT05OUkVTRVQ6CiAgICAgICAgcmV0dXJuICJFQ09OTlJFU0VUIjsKICAgICAgY2FzZSBFUlJPUl9BTFJFQURZX0VYSVNUUzoKICAgICAgICByZXR1cm4gIkVFWElTVCI7CiAgICAgIGNhc2UgRVJST1JfRklMRV9FWElTVFM6CiAgICAgICAgcmV0dXJuICJFRVhJU1QiOwogICAgICBjYXNlIEVSUk9SX0JVRkZFUl9PVkVSRkxPVzoKICAgICAgICByZXR1cm4gIkVGQVVMVCI7CiAgICAgIGNhc2UgV1NBRUZBVUxUOgogICAgICAgIHJldHVybiAiRUZBVUxUIjsKICAgICAgY2FzZSBFUlJPUl9IT1NUX1VOUkVBQ0hBQkxFOgogICAgICAgIHJldHVybiAiRUhPU1RVTlJFQUNIIjsKICAgICAgY2FzZSBXU0FFSE9TVFVOUkVBQ0g6CiAgICAgICAgcmV0dXJuICJFSE9TVFVOUkVBQ0giOwogICAgICBjYXNlIEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVI6CiAgICAgICAgcmV0dXJuICJFSU5WQUwiOwogICAgICBjYXNlIEVSUk9SX0lOVkFMSURfREFUQToKICAgICAgICByZXR1cm4gIkVJTlZBTCI7CiAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9OQU1FOgogICAgICAgIHJldHVybiAiRUlOVkFMIjsKICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUjoKICAgICAgICByZXR1cm4gIkVJTlZBTCI7CiAgICAgIGNhc2UgV1NBRUlOVkFMOgogICAgICAgIHJldHVybiAiRUlOVkFMIjsKICAgICAgY2FzZSBXU0FFUEZOT1NVUFBPUlQ6CiAgICAgICAgcmV0dXJuICJFSU5WQUwiOwogICAgICBjYXNlIEVSUk9SX0JFR0lOTklOR19PRl9NRURJQToKICAgICAgICByZXR1cm4gIkVJTyI7CiAgICAgIGNhc2UgRVJST1JfQlVTX1JFU0VUOgogICAgICAgIHJldHVybiAiRUlPIjsKICAgICAgY2FzZSBFUlJPUl9DUkM6CiAgICAgICAgcmV0dXJuICJFSU8iOwogICAgICBjYXNlIEVSUk9SX0RFVklDRV9ET09SX09QRU46CiAgICAgICAgcmV0dXJuICJFSU8iOwogICAgICBjYXNlIEVSUk9SX0RFVklDRV9SRVFVSVJFU19DTEVBTklORzoKICAgICAgICByZXR1cm4gIkVJTyI7CiAgICAgIGNhc2UgRVJST1JfRElTS19DT1JSVVBUOgogICAgICAgIHJldHVybiAiRUlPIjsKICAgICAgY2FzZSBFUlJPUl9FT01fT1ZFUkZMT1c6CiAgICAgICAgcmV0dXJuICJFSU8iOwogICAgICBjYXNlIEVSUk9SX0ZJTEVNQVJLX0RFVEVDVEVEOgogICAgICAgIHJldHVybiAiRUlPIjsKICAgICAgY2FzZSBFUlJPUl9HRU5fRkFJTFVSRToKICAgICAgICByZXR1cm4gIkVJTyI7CiAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9CTE9DS19MRU5HVEg6CiAgICAgICAgcmV0dXJuICJFSU8iOwogICAgICBjYXNlIEVSUk9SX0lPX0RFVklDRToKICAgICAgICByZXR1cm4gIkVJTyI7CiAgICAgIGNhc2UgRVJST1JfTk9fREFUQV9ERVRFQ1RFRDoKICAgICAgICByZXR1cm4gIkVJTyI7CiAgICAgIGNhc2UgRVJST1JfTk9fU0lHTkFMX1NFTlQ6CiAgICAgICAgcmV0dXJuICJFSU8iOwogICAgICBjYXNlIEVSUk9SX09QRU5fRkFJTEVEOgogICAgICAgIHJldHVybiAiRUlPIjsKICAgICAgY2FzZSBFUlJPUl9TRVRNQVJLX0RFVEVDVEVEOgogICAgICAgIHJldHVybiAiRUlPIjsKICAgICAgY2FzZSBFUlJPUl9TSUdOQUxfUkVGVVNFRDoKICAgICAgICByZXR1cm4gIkVJTyI7CiAgICAgIGNhc2UgV1NBRUlTQ09OTjoKICAgICAgICByZXR1cm4gIkVJU0NPTk4iOwogICAgICBjYXNlIEVSUk9SX0NBTlRfUkVTT0xWRV9GSUxFTkFNRToKICAgICAgICByZXR1cm4gIkVMT09QIjsKICAgICAgY2FzZSBFUlJPUl9UT09fTUFOWV9PUEVOX0ZJTEVTOgogICAgICAgIHJldHVybiAiRU1GSUxFIjsKICAgICAgY2FzZSBXU0FFTUZJTEU6CiAgICAgICAgcmV0dXJuICJFTUZJTEUiOwogICAgICBjYXNlIFdTQUVNU0dTSVpFOgogICAgICAgIHJldHVybiAiRU1TR1NJWkUiOwogICAgICBjYXNlIEVSUk9SX0ZJTEVOQU1FX0VYQ0VEX1JBTkdFOgogICAgICAgIHJldHVybiAiRU5BTUVUT09MT05HIjsKICAgICAgY2FzZSBFUlJPUl9ORVRXT1JLX1VOUkVBQ0hBQkxFOgogICAgICAgIHJldHVybiAiRU5FVFVOUkVBQ0giOwogICAgICBjYXNlIFdTQUVORVRVTlJFQUNIOgogICAgICAgIHJldHVybiAiRU5FVFVOUkVBQ0giOwogICAgICBjYXNlIFdTQUVOT0JVRlM6CiAgICAgICAgcmV0dXJuICJFTk9CVUZTIjsKICAgICAgY2FzZSBFUlJPUl9CQURfUEFUSE5BTUU6CiAgICAgICAgcmV0dXJuICJFTk9FTlQiOwogICAgICBjYXNlIEVSUk9SX0RJUkVDVE9SWToKICAgICAgICByZXR1cm4gIkVOT1RESVIiOwogICAgICBjYXNlIEVSUk9SX0VOVlZBUl9OT1RfRk9VTkQ6CiAgICAgICAgcmV0dXJuICJFTk9FTlQiOwogICAgICBjYXNlIEVSUk9SX0ZJTEVfTk9UX0ZPVU5EOgogICAgICAgIHJldHVybiAiRU5PRU5UIjsKICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0RSSVZFOgogICAgICAgIHJldHVybiAiRU5PRU5UIjsKICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX1JFUEFSU0VfREFUQToKICAgICAgICByZXR1cm4gIkVOT0VOVCI7CiAgICAgIGNhc2UgRVJST1JfTU9EX05PVF9GT1VORDoKICAgICAgICByZXR1cm4gIkVOT0VOVCI7CiAgICAgIGNhc2UgRVJST1JfUEFUSF9OT1RfRk9VTkQ6CiAgICAgICAgcmV0dXJuICJFTk9FTlQiOwogICAgICBjYXNlIFdTQUhPU1RfTk9UX0ZPVU5EOgogICAgICAgIHJldHVybiAiRU5PRU5UIjsKICAgICAgY2FzZSBXU0FOT19EQVRBOgogICAgICAgIHJldHVybiAiRU5PRU5UIjsKICAgICAgY2FzZSBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWToKICAgICAgICByZXR1cm4gIkVOT01FTSI7CiAgICAgIGNhc2UgRVJST1JfT1VUT0ZNRU1PUlk6CiAgICAgICAgcmV0dXJuICJFTk9NRU0iOwogICAgICBjYXNlIEVSUk9SX0NBTk5PVF9NQUtFOgogICAgICAgIHJldHVybiAiRU5PU1BDIjsKICAgICAgY2FzZSBFUlJPUl9ESVNLX0ZVTEw6CiAgICAgICAgcmV0dXJuICJFTk9TUEMiOwogICAgICBjYXNlIEVSUk9SX0VBX1RBQkxFX0ZVTEw6CiAgICAgICAgcmV0dXJuICJFTk9TUEMiOwogICAgICBjYXNlIEVSUk9SX0VORF9PRl9NRURJQToKICAgICAgICByZXR1cm4gIkVOT1NQQyI7CiAgICAgIGNhc2UgRVJST1JfSEFORExFX0RJU0tfRlVMTDoKICAgICAgICByZXR1cm4gIkVOT1NQQyI7CiAgICAgIGNhc2UgRVJST1JfTk9UX0NPTk5FQ1RFRDoKICAgICAgICByZXR1cm4gIkVOT1RDT05OIjsKICAgICAgY2FzZSBXU0FFTk9UQ09OTjoKICAgICAgICByZXR1cm4gIkVOT1RDT05OIjsKICAgICAgY2FzZSBFUlJPUl9ESVJfTk9UX0VNUFRZOgogICAgICAgIHJldHVybiAiRU5PVEVNUFRZIjsKICAgICAgY2FzZSBXU0FFTk9UU09DSzoKICAgICAgICByZXR1cm4gIkVOT1RTT0NLIjsKICAgICAgY2FzZSBFUlJPUl9OT1RfU1VQUE9SVEVEOgogICAgICAgIHJldHVybiAiRU5PVFNVUCI7CiAgICAgIGNhc2UgRVJST1JfQlJPS0VOX1BJUEU6CiAgICAgICAgcmV0dXJuICJFT0YiOwogICAgICBjYXNlIEVSUk9SX1BSSVZJTEVHRV9OT1RfSEVMRDoKICAgICAgICByZXR1cm4gIkVQRVJNIjsKICAgICAgY2FzZSBFUlJPUl9CQURfUElQRToKICAgICAgICByZXR1cm4gIkVQSVBFIjsKICAgICAgY2FzZSBFUlJPUl9OT19EQVRBOgogICAgICAgIHJldHVybiAiRVBJUEUiOwogICAgICBjYXNlIEVSUk9SX1BJUEVfTk9UX0NPTk5FQ1RFRDoKICAgICAgICByZXR1cm4gIkVQSVBFIjsKICAgICAgY2FzZSBXU0FFU0hVVERPV046CiAgICAgICAgcmV0dXJuICJFUElQRSI7CiAgICAgIGNhc2UgV1NBRVBST1RPTk9TVVBQT1JUOgogICAgICAgIHJldHVybiAiRVBST1RPTk9TVVBQT1JUIjsKICAgICAgY2FzZSBFUlJPUl9XUklURV9QUk9URUNUOgogICAgICAgIHJldHVybiAiRVJPRlMiOwogICAgICBjYXNlIEVSUk9SX1NFTV9USU1FT1VUOgogICAgICAgIHJldHVybiAiRVRJTUVET1VUIjsKICAgICAgY2FzZSBXU0FFVElNRURPVVQ6CiAgICAgICAgcmV0dXJuICJFVElNRURPVVQiOwogICAgICBjYXNlIEVSUk9SX05PVF9TQU1FX0RFVklDRToKICAgICAgICByZXR1cm4gIkVYREVWIjsKICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0ZVTkNUSU9OOgogICAgICAgIHJldHVybiAiRUlTRElSIjsKICAgICAgY2FzZSBFUlJPUl9NRVRBX0VYUEFOU0lPTl9UT09fTE9ORzoKICAgICAgICByZXR1cm4gIkUyQklHIjsKICAgICAgY2FzZSBXU0FFU09DS1ROT1NVUFBPUlQ6CiAgICAgICAgcmV0dXJuICJFU09DS1ROT1NVUFBPUlQiOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiAiVU5LTk9XTiI7CiAgICB9CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9jb25zdGFudHMudHMKICB2YXIgY29uc3RhbnRzX2V4cG9ydHMgPSB7fTsKICBfX2V4cG9ydChjb25zdGFudHNfZXhwb3J0cywgewogICAgY3J5cHRvOiAoKSA9PiBjcnlwdG8yLAogICAgZnM6ICgpID0+IGZzLAogICAgb3M6ICgpID0+IG9zMiwKICAgIHRyYWNlOiAoKSA9PiB0cmFjZSwKICAgIHpsaWI6ICgpID0+IHpsaWIKICB9KTsKICB2YXIgb3MyID0gewogICAgVVZfVURQX0lQVjZPTkxZOiAxLAogICAgVVZfVURQX1BBUlRJQUw6IDIsCiAgICBVVl9VRFBfUkVVU0VBRERSOiA0LAogICAgVVZfVURQX01NU0dfQ0hVTks6IDgsCiAgICBVVl9VRFBfTU1TR19GUkVFOiAxNiwKICAgIFVWX1VEUF9MSU5VWF9SRUNWRVJSOiAzMiwKICAgIFVWX1VEUF9SRUNWTU1TRzogMjU2LAogICAgZGxvcGVuOiB7CiAgICAgIFJUTERfTEFaWTogMSwKICAgICAgUlRMRF9OT1c6IDIsCiAgICAgIFJUTERfR0xPQkFMOiA4LAogICAgICBSVExEX0xPQ0FMOiA0CiAgICB9LAogICAgZXJybm86IHsKICAgICAgRTJCSUc6IDcsCiAgICAgIEVBQ0NFUzogMTMsCiAgICAgIEVBRERSSU5VU0U6IDQ4LAogICAgICBFQUREUk5PVEFWQUlMOiA0OSwKICAgICAgRUFGTk9TVVBQT1JUOiA0NywKICAgICAgRUFHQUlOOiAzNSwKICAgICAgRUFMUkVBRFk6IDM3LAogICAgICBFQkFERjogOSwKICAgICAgRUJBRE1TRzogOTQsCiAgICAgIEVCVVNZOiAxNiwKICAgICAgRUNBTkNFTEVEOiA4OSwKICAgICAgRUNISUxEOiAxMCwKICAgICAgRUNPTk5BQk9SVEVEOiA1MywKICAgICAgRUNPTk5SRUZVU0VEOiA2MSwKICAgICAgRUNPTk5SRVNFVDogNTQsCiAgICAgIEVERUFETEs6IDExLAogICAgICBFREVTVEFERFJSRVE6IDM5LAogICAgICBFRE9NOiAzMywKICAgICAgRURRVU9UOiA2OSwKICAgICAgRUVYSVNUOiAxNywKICAgICAgRUZBVUxUOiAxNCwKICAgICAgRUZCSUc6IDI3LAogICAgICBFSE9TVFVOUkVBQ0g6IDY1LAogICAgICBFSURSTTogOTAsCiAgICAgIEVJTFNFUTogOTIsCiAgICAgIEVJTlBST0dSRVNTOiAzNiwKICAgICAgRUlOVFI6IDQsCiAgICAgIEVJTlZBTDogMjIsCiAgICAgIEVJTzogNSwKICAgICAgRUlTQ09OTjogNTYsCiAgICAgIEVJU0RJUjogMjEsCiAgICAgIEVMT09QOiA2MiwKICAgICAgRU1GSUxFOiAyNCwKICAgICAgRU1MSU5LOiAzMSwKICAgICAgRU1TR1NJWkU6IDQwLAogICAgICBFTVVMVElIT1A6IDk1LAogICAgICBFTkFNRVRPT0xPTkc6IDYzLAogICAgICBFTkVURE9XTjogNTAsCiAgICAgIEVORVRSRVNFVDogNTIsCiAgICAgIEVORVRVTlJFQUNIOiA1MSwKICAgICAgRU5GSUxFOiAyMywKICAgICAgRU5PQlVGUzogNTUsCiAgICAgIEVOT0RBVEE6IDk2LAogICAgICBFTk9ERVY6IDE5LAogICAgICBFTk9FTlQ6IDIsCiAgICAgIEVOT0VYRUM6IDgsCiAgICAgIEVOT0xDSzogNzcsCiAgICAgIEVOT0xJTks6IDk3LAogICAgICBFTk9NRU06IDEyLAogICAgICBFTk9NU0c6IDkxLAogICAgICBFTk9QUk9UT09QVDogNDIsCiAgICAgIEVOT1NQQzogMjgsCiAgICAgIEVOT1NSOiA5OCwKICAgICAgRU5PU1RSOiA5OSwKICAgICAgRU5PU1lTOiA3OCwKICAgICAgRU5PVENPTk46IDU3LAogICAgICBFTk9URElSOiAyMCwKICAgICAgRU5PVEVNUFRZOiA2NiwKICAgICAgRU5PVFNPQ0s6IDM4LAogICAgICBFTk9UU1VQOiA0NSwKICAgICAgRU5PVFRZOiAyNSwKICAgICAgRU5YSU86IDYsCiAgICAgIEVPUE5PVFNVUFA6IDEwMiwKICAgICAgRU9WRVJGTE9XOiA4NCwKICAgICAgRVBFUk06IDEsCiAgICAgIEVQSVBFOiAzMiwKICAgICAgRVBST1RPOiAxMDAsCiAgICAgIEVQUk9UT05PU1VQUE9SVDogNDMsCiAgICAgIEVQUk9UT1RZUEU6IDQxLAogICAgICBFUkFOR0U6IDM0LAogICAgICBFUk9GUzogMzAsCiAgICAgIEVTUElQRTogMjksCiAgICAgIEVTUkNIOiAzLAogICAgICBFU1RBTEU6IDcwLAogICAgICBFVElNRTogMTAxLAogICAgICBFVElNRURPVVQ6IDYwLAogICAgICBFVFhUQlNZOiAyNiwKICAgICAgRVdPVUxEQkxPQ0s6IDM1LAogICAgICBFWERFVjogMTgKICAgIH0sCiAgICBzaWduYWxzOiB7CiAgICAgIFNJR0hVUDogMSwKICAgICAgU0lHSU5UOiAyLAogICAgICBTSUdRVUlUOiAzLAogICAgICBTSUdJTEw6IDQsCiAgICAgIFNJR1RSQVA6IDUsCiAgICAgIFNJR0FCUlQ6IDYsCiAgICAgIFNJR0lPVDogNiwKICAgICAgU0lHQlVTOiAxMCwKICAgICAgU0lHRlBFOiA4LAogICAgICBTSUdLSUxMOiA5LAogICAgICBTSUdVU1IxOiAzMCwKICAgICAgU0lHU0VHVjogMTEsCiAgICAgIFNJR1VTUjI6IDMxLAogICAgICBTSUdQSVBFOiAxMywKICAgICAgU0lHQUxSTTogMTQsCiAgICAgIFNJR1RFUk06IDE1LAogICAgICBTSUdDSExEOiAyMCwKICAgICAgU0lHQ09OVDogMTksCiAgICAgIFNJR1NUT1A6IDE3LAogICAgICBTSUdUU1RQOiAxOCwKICAgICAgU0lHVFRJTjogMjEsCiAgICAgIFNJR0JSRUFLOiAyMSwKICAgICAgU0lHVFRPVTogMjIsCiAgICAgIFNJR1VSRzogMTYsCiAgICAgIFNJR1hDUFU6IDI0LAogICAgICBTSUdYRlNaOiAyNSwKICAgICAgU0lHVlRBTFJNOiAyNiwKICAgICAgU0lHUFJPRjogMjcsCiAgICAgIFNJR1dJTkNIOiAyOCwKICAgICAgU0lHSU86IDIzLAogICAgICBTSUdJTkZPOiAyOSwKICAgICAgU0lHU1lTOiAxMiwKICAgICAgU0lHRU1UOiA3LAogICAgICBTSUdQV1I6IDMwLAogICAgICBTSUdTVEtGTFQ6IDE2CiAgICB9LAogICAgcHJpb3JpdHk6IHsKICAgICAgUFJJT1JJVFlfTE9XOiAxOSwKICAgICAgUFJJT1JJVFlfQkVMT1dfTk9STUFMOiAxMCwKICAgICAgUFJJT1JJVFlfTk9STUFMOiAwLAogICAgICBQUklPUklUWV9BQk9WRV9OT1JNQUw6IC03LAogICAgICBQUklPUklUWV9ISUdIOiAtMTQsCiAgICAgIFBSSU9SSVRZX0hJR0hFU1Q6IC0yMAogICAgfQogIH07CiAgdmFyIGZzID0gewogICAgVVZfRlNfU1lNTElOS19ESVI6IDEsCiAgICBVVl9GU19TWU1MSU5LX0pVTkNUSU9OOiAyLAogICAgT19SRE9OTFk6IDAsCiAgICBPX1dST05MWTogMSwKICAgIE9fUkRXUjogMiwKICAgIFVWX0RJUkVOVF9VTktOT1dOOiAwLAogICAgVVZfRElSRU5UX0ZJTEU6IDEsCiAgICBVVl9ESVJFTlRfRElSOiAyLAogICAgVVZfRElSRU5UX0xJTks6IDMsCiAgICBVVl9ESVJFTlRfRklGTzogNCwKICAgIFVWX0RJUkVOVF9TT0NLRVQ6IDUsCiAgICBVVl9ESVJFTlRfQ0hBUjogNiwKICAgIFVWX0RJUkVOVF9CTE9DSzogNywKICAgIFNfSUZNVDogNjE0NDAsCiAgICBTX0lGUkVHOiAzMjc2OCwKICAgIFNfSUZESVI6IDE2Mzg0LAogICAgU19JRkNIUjogODE5MiwKICAgIFNfSUZCTEs6IDI0NTc2LAogICAgU19JRklGTzogNDA5NiwKICAgIFNfSUZMTks6IDQwOTYwLAogICAgU19JRlNPQ0s6IDQ5MTUyLAogICAgT19DUkVBVDogNTEyLAogICAgT19FWENMOiAyMDQ4LAogICAgVVZfRlNfT19GSUxFTUFQOiAwLAogICAgT19OT0NUVFk6IDEzMTA3MiwKICAgIE9fVFJVTkM6IDEwMjQsCiAgICBPX0FQUEVORDogOCwKICAgIE9fRElSRUNUT1JZOiAxMDQ4NTc2LAogICAgT19OT0ZPTExPVzogMjU2LAogICAgT19TWU5DOiAxMjgsCiAgICBPX0RTWU5DOiA0MTk0MzA0LAogICAgT19TWU1MSU5LOiAyMDk3MTUyLAogICAgT19OT05CTE9DSzogNCwKICAgIFNfSVJXWFU6IDQ0OCwKICAgIFNfSVJVU1I6IDI1NiwKICAgIFNfSVdVU1I6IDEyOCwKICAgIFNfSVhVU1I6IDY0LAogICAgU19JUldYRzogNTYsCiAgICBTX0lSR1JQOiAzMiwKICAgIFNfSVdHUlA6IDE2LAogICAgU19JWEdSUDogOCwKICAgIFNfSVJXWE86IDcsCiAgICBTX0lST1RIOiA0LAogICAgU19JV09USDogMiwKICAgIFNfSVhPVEg6IDEsCiAgICBGX09LOiAwLAogICAgUl9PSzogNCwKICAgIFdfT0s6IDIsCiAgICBYX09LOiAxLAogICAgVVZfRlNfQ09QWUZJTEVfRVhDTDogMSwKICAgIENPUFlGSUxFX0VYQ0w6IDEsCiAgICBVVl9GU19DT1BZRklMRV9GSUNMT05FOiAyLAogICAgQ09QWUZJTEVfRklDTE9ORTogMiwKICAgIFVWX0ZTX0NPUFlGSUxFX0ZJQ0xPTkVfRk9SQ0U6IDQsCiAgICBDT1BZRklMRV9GSUNMT05FX0ZPUkNFOiA0CiAgfTsKICB2YXIgY3J5cHRvMiA9IHsKICAgIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVI6IDI2OTQ4ODMxOSwKICAgIFNTTF9PUF9BTEw6IDIxNDc0ODU3ODAsCiAgICBTU0xfT1BfQUxMT1dfTk9fREhFX0tFWDogMTAyNCwKICAgIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT046IDI2MjE0NCwKICAgIFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0U6IDQxOTQzMDQsCiAgICBTU0xfT1BfQ0lTQ09fQU5ZQ09OTkVDVDogMzI3NjgsCiAgICBTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFOiA4MTkyLAogICAgU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHOiAyMTQ3NDgzNjQ4LAogICAgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUzogMjA0OCwKICAgIFNTTF9PUF9FUEhFTUVSQUxfUlNBOiAwLAogICAgU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVDogNCwKICAgIFNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUjogMCwKICAgIFNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUc6IDAsCiAgICBTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORzogMCwKICAgIFNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUc6IDAsCiAgICBTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRzogMCwKICAgIFNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHOiAwLAogICAgU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHOiAwLAogICAgU1NMX09QX05PX0NPTVBSRVNTSU9OOiAxMzEwNzIsCiAgICBTU0xfT1BfTk9fRU5DUllQVF9USEVOX01BQzogNTI0Mjg4LAogICAgU1NMX09QX05PX1FVRVJZX01UVTogNDA5NiwKICAgIFNTTF9PUF9OT19SRU5FR09USUFUSU9OOiAxMDczNzQxODI0LAogICAgU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OOiA2NTUzNiwKICAgIFNTTF9PUF9OT19TU0x2MjogMCwKICAgIFNTTF9PUF9OT19TU0x2MzogMzM1NTQ0MzIsCiAgICBTU0xfT1BfTk9fVElDS0VUOiAxNjM4NCwKICAgIFNTTF9PUF9OT19UTFN2MTogNjcxMDg4NjQsCiAgICBTU0xfT1BfTk9fVExTdjFfMTogMjY4NDM1NDU2LAogICAgU1NMX09QX05PX1RMU3YxXzI6IDEzNDIxNzcyOCwKICAgIFNTTF9PUF9OT19UTFN2MV8zOiA1MzY4NzA5MTIsCiAgICBTU0xfT1BfUEtDUzFfQ0hFQ0tfMTogMCwKICAgIFNTTF9PUF9QS0NTMV9DSEVDS18yOiAwLAogICAgU1NMX09QX1BSSU9SSVRJWkVfQ0hBQ0hBOiAyMDk3MTUyLAogICAgU1NMX09QX1NJTkdMRV9ESF9VU0U6IDAsCiAgICBTU0xfT1BfU0lOR0xFX0VDREhfVVNFOiAwLAogICAgU1NMX09QX1NTTEVBWV8wODBfQ0xJRU5UX0RIX0JVRzogMCwKICAgIFNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUc6IDAsCiAgICBTU0xfT1BfVExTX0JMT0NLX1BBRERJTkdfQlVHOiAwLAogICAgU1NMX09QX1RMU19ENV9CVUc6IDAsCiAgICBTU0xfT1BfVExTX1JPTExCQUNLX0JVRzogODM4ODYwOCwKICAgIEVOR0lORV9NRVRIT0RfUlNBOiAxLAogICAgRU5HSU5FX01FVEhPRF9EU0E6IDIsCiAgICBFTkdJTkVfTUVUSE9EX0RIOiA0LAogICAgRU5HSU5FX01FVEhPRF9SQU5EOiA4LAogICAgRU5HSU5FX01FVEhPRF9FQzogMjA0OCwKICAgIEVOR0lORV9NRVRIT0RfQ0lQSEVSUzogNjQsCiAgICBFTkdJTkVfTUVUSE9EX0RJR0VTVFM6IDEyOCwKICAgIEVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUzogNTEyLAogICAgRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFM6IDEwMjQsCiAgICBFTkdJTkVfTUVUSE9EX0FMTDogNjU1MzUsCiAgICBFTkdJTkVfTUVUSE9EX05PTkU6IDAsCiAgICBESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOiAyLAogICAgREhfQ0hFQ0tfUF9OT1RfUFJJTUU6IDEsCiAgICBESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOiA0LAogICAgREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjogOCwKICAgIEFMUE5fRU5BQkxFRDogMSwKICAgIFJTQV9QS0NTMV9QQURESU5HOiAxLAogICAgUlNBX1NTTFYyM19QQURESU5HOiAyLAogICAgUlNBX05PX1BBRERJTkc6IDMsCiAgICBSU0FfUEtDUzFfT0FFUF9QQURESU5HOiA0LAogICAgUlNBX1g5MzFfUEFERElORzogNSwKICAgIFJTQV9QS0NTMV9QU1NfUEFERElORzogNiwKICAgIFJTQV9QU1NfU0FMVExFTl9ESUdFU1Q6IC0xLAogICAgUlNBX1BTU19TQUxUTEVOX01BWF9TSUdOOiAtMiwKICAgIFJTQV9QU1NfU0FMVExFTl9BVVRPOiAtMiwKICAgIGRlZmF1bHRDb3JlQ2lwaGVyTGlzdDogIlRMU19BRVNfMjU2X0dDTV9TSEEzODQ6VExTX0NIQUNIQTIwX1BPTFkxMzA1X1NIQTI1NjpUTFNfQUVTXzEyOF9HQ01fU0hBMjU2OkVDREhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NjpFQ0RIRS1FQ0RTQS1BRVMxMjgtR0NNLVNIQTI1NjpFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQ6RUNESEUtRUNEU0EtQUVTMjU2LUdDTS1TSEEzODQ6REhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NjpFQ0RIRS1SU0EtQUVTMTI4LVNIQTI1NjpESEUtUlNBLUFFUzEyOC1TSEEyNTY6RUNESEUtUlNBLUFFUzI1Ni1TSEEzODQ6REhFLVJTQS1BRVMyNTYtU0hBMzg0OkVDREhFLVJTQS1BRVMyNTYtU0hBMjU2OkRIRS1SU0EtQUVTMjU2LVNIQTI1NjpISUdIOiFhTlVMTDohZU5VTEw6IUVYUE9SVDohREVTOiFSQzQ6IU1ENTohUFNLOiFTUlA6IUNBTUVMTElBIiwKICAgIFRMUzFfVkVSU0lPTjogNzY5LAogICAgVExTMV8xX1ZFUlNJT046IDc3MCwKICAgIFRMUzFfMl9WRVJTSU9OOiA3NzEsCiAgICBUTFMxXzNfVkVSU0lPTjogNzcyLAogICAgUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOiAyLAogICAgUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6IDQsCiAgICBQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDogNgogIH07CiAgdmFyIHpsaWIgPSB7CiAgICBaX05PX0ZMVVNIOiAwLAogICAgWl9QQVJUSUFMX0ZMVVNIOiAxLAogICAgWl9TWU5DX0ZMVVNIOiAyLAogICAgWl9GVUxMX0ZMVVNIOiAzLAogICAgWl9GSU5JU0g6IDQsCiAgICBaX0JMT0NLOiA1LAogICAgWl9PSzogMCwKICAgIFpfU1RSRUFNX0VORDogMSwKICAgIFpfTkVFRF9ESUNUOiAyLAogICAgWl9FUlJOTzogLTEsCiAgICBaX1NUUkVBTV9FUlJPUjogLTIsCiAgICBaX0RBVEFfRVJST1I6IC0zLAogICAgWl9NRU1fRVJST1I6IC00LAogICAgWl9CVUZfRVJST1I6IC01LAogICAgWl9WRVJTSU9OX0VSUk9SOiAtNiwKICAgIFpfTk9fQ09NUFJFU1NJT046IDAsCiAgICBaX0JFU1RfU1BFRUQ6IDEsCiAgICBaX0JFU1RfQ09NUFJFU1NJT046IDksCiAgICBaX0RFRkFVTFRfQ09NUFJFU1NJT046IC0xLAogICAgWl9GSUxURVJFRDogMSwKICAgIFpfSFVGRk1BTl9PTkxZOiAyLAogICAgWl9STEU6IDMsCiAgICBaX0ZJWEVEOiA0LAogICAgWl9ERUZBVUxUX1NUUkFURUdZOiAwLAogICAgWkxJQl9WRVJOVU06IDQ3ODQsCiAgICBERUZMQVRFOiAxLAogICAgSU5GTEFURTogMiwKICAgIEdaSVA6IDMsCiAgICBHVU5aSVA6IDQsCiAgICBERUZMQVRFUkFXOiA1LAogICAgSU5GTEFURVJBVzogNiwKICAgIFVOWklQOiA3LAogICAgQlJPVExJX0RFQ09ERTogOCwKICAgIEJST1RMSV9FTkNPREU6IDksCiAgICBaX01JTl9XSU5ET1dCSVRTOiA4LAogICAgWl9NQVhfV0lORE9XQklUUzogMTUsCiAgICBaX0RFRkFVTFRfV0lORE9XQklUUzogMTUsCiAgICBaX01JTl9DSFVOSzogNjQsCiAgICBaX01BWF9DSFVOSzogSW5maW5pdHksCiAgICBaX0RFRkFVTFRfQ0hVTks6IDE2Mzg0LAogICAgWl9NSU5fTUVNTEVWRUw6IDEsCiAgICBaX01BWF9NRU1MRVZFTDogOSwKICAgIFpfREVGQVVMVF9NRU1MRVZFTDogOCwKICAgIFpfTUlOX0xFVkVMOiAtMSwKICAgIFpfTUFYX0xFVkVMOiA5LAogICAgWl9ERUZBVUxUX0xFVkVMOiAtMSwKICAgIEJST1RMSV9PUEVSQVRJT05fUFJPQ0VTUzogMCwKICAgIEJST1RMSV9PUEVSQVRJT05fRkxVU0g6IDEsCiAgICBCUk9UTElfT1BFUkFUSU9OX0ZJTklTSDogMiwKICAgIEJST1RMSV9PUEVSQVRJT05fRU1JVF9NRVRBREFUQTogMywKICAgIEJST1RMSV9QQVJBTV9NT0RFOiAwLAogICAgQlJPVExJX01PREVfR0VORVJJQzogMCwKICAgIEJST1RMSV9NT0RFX1RFWFQ6IDEsCiAgICBCUk9UTElfTU9ERV9GT05UOiAyLAogICAgQlJPVExJX0RFRkFVTFRfTU9ERTogMCwKICAgIEJST1RMSV9QQVJBTV9RVUFMSVRZOiAxLAogICAgQlJPVExJX01JTl9RVUFMSVRZOiAwLAogICAgQlJPVExJX01BWF9RVUFMSVRZOiAxMSwKICAgIEJST1RMSV9ERUZBVUxUX1FVQUxJVFk6IDExLAogICAgQlJPVExJX1BBUkFNX0xHV0lOOiAyLAogICAgQlJPVExJX01JTl9XSU5ET1dfQklUUzogMTAsCiAgICBCUk9UTElfTUFYX1dJTkRPV19CSVRTOiAyNCwKICAgIEJST1RMSV9MQVJHRV9NQVhfV0lORE9XX0JJVFM6IDMwLAogICAgQlJPVExJX0RFRkFVTFRfV0lORE9XOiAyMiwKICAgIEJST1RMSV9QQVJBTV9MR0JMT0NLOiAzLAogICAgQlJPVExJX01JTl9JTlBVVF9CTE9DS19CSVRTOiAxNiwKICAgIEJST1RMSV9NQVhfSU5QVVRfQkxPQ0tfQklUUzogMjQsCiAgICBCUk9UTElfUEFSQU1fRElTQUJMRV9MSVRFUkFMX0NPTlRFWFRfTU9ERUxJTkc6IDQsCiAgICBCUk9UTElfUEFSQU1fU0laRV9ISU5UOiA1LAogICAgQlJPVExJX1BBUkFNX0xBUkdFX1dJTkRPVzogNiwKICAgIEJST1RMSV9QQVJBTV9OUE9TVEZJWDogNywKICAgIEJST1RMSV9QQVJBTV9ORElSRUNUOiA4LAogICAgQlJPVExJX0RFQ09ERVJfUkVTVUxUX0VSUk9SOiAwLAogICAgQlJPVExJX0RFQ09ERVJfUkVTVUxUX1NVQ0NFU1M6IDEsCiAgICBCUk9UTElfREVDT0RFUl9SRVNVTFRfTkVFRFNfTU9SRV9JTlBVVDogMiwKICAgIEJST1RMSV9ERUNPREVSX1JFU1VMVF9ORUVEU19NT1JFX09VVFBVVDogMywKICAgIEJST1RMSV9ERUNPREVSX1BBUkFNX0RJU0FCTEVfUklOR19CVUZGRVJfUkVBTExPQ0FUSU9OOiAwLAogICAgQlJPVExJX0RFQ09ERVJfUEFSQU1fTEFSR0VfV0lORE9XOiAxLAogICAgQlJPVExJX0RFQ09ERVJfTk9fRVJST1I6IDAsCiAgICBCUk9UTElfREVDT0RFUl9TVUNDRVNTOiAxLAogICAgQlJPVExJX0RFQ09ERVJfTkVFRFNfTU9SRV9JTlBVVDogMiwKICAgIEJST1RMSV9ERUNPREVSX05FRURTX01PUkVfT1VUUFVUOiAzLAogICAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0VYVUJFUkFOVF9OSUJCTEU6IC0xLAogICAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1JFU0VSVkVEOiAtMiwKICAgIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9FWFVCRVJBTlRfTUVUQV9OSUJCTEU6IC0zLAogICAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1NJTVBMRV9IVUZGTUFOX0FMUEhBQkVUOiAtNCwKICAgIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9TSU1QTEVfSFVGRk1BTl9TQU1FOiAtNSwKICAgIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9DTF9TUEFDRTogLTYsCiAgICBCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfSFVGRk1BTl9TUEFDRTogLTcsCiAgICBCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQ09OVEVYVF9NQVBfUkVQRUFUOiAtOCwKICAgIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9CTE9DS19MRU5HVEhfMTogLTksCiAgICBCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQkxPQ0tfTEVOR1RIXzI6IC0xMCwKICAgIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9UUkFOU0ZPUk06IC0xMSwKICAgIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9ESUNUSU9OQVJZOiAtMTIsCiAgICBCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfV0lORE9XX0JJVFM6IC0xMywKICAgIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9QQURESU5HXzE6IC0xNCwKICAgIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9QQURESU5HXzI6IC0xNSwKICAgIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9ESVNUQU5DRTogLTE2LAogICAgQlJPVExJX0RFQ09ERVJfRVJST1JfRElDVElPTkFSWV9OT1RfU0VUOiAtMTksCiAgICBCUk9UTElfREVDT0RFUl9FUlJPUl9JTlZBTElEX0FSR1VNRU5UUzogLTIwLAogICAgQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfQ09OVEVYVF9NT0RFUzogLTIxLAogICAgQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfVFJFRV9HUk9VUFM6IC0yMiwKICAgIEJST1RMSV9ERUNPREVSX0VSUk9SX0FMTE9DX0NPTlRFWFRfTUFQOiAtMjUsCiAgICBCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19SSU5HX0JVRkZFUl8xOiAtMjYsCiAgICBCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19SSU5HX0JVRkZFUl8yOiAtMjcsCiAgICBCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19CTE9DS19UWVBFX1RSRUVTOiAtMzAsCiAgICBCUk9UTElfREVDT0RFUl9FUlJPUl9VTlJFQUNIQUJMRTogLTMxCiAgfTsKICB2YXIgdHJhY2UgPSB7CiAgICBUUkFDRV9FVkVOVF9QSEFTRV9CRUdJTjogNjYsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9FTkQ6IDY5LAogICAgVFJBQ0VfRVZFTlRfUEhBU0VfQ09NUExFVEU6IDg4LAogICAgVFJBQ0VfRVZFTlRfUEhBU0VfSU5TVEFOVDogNzMsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9BU1lOQ19CRUdJTjogODMsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9BU1lOQ19TVEVQX0lOVE86IDg0LAogICAgVFJBQ0VfRVZFTlRfUEhBU0VfQVNZTkNfU1RFUF9QQVNUOiAxMTIsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9BU1lOQ19FTkQ6IDcwLAogICAgVFJBQ0VfRVZFTlRfUEhBU0VfTkVTVEFCTEVfQVNZTkNfQkVHSU46IDk4LAogICAgVFJBQ0VfRVZFTlRfUEhBU0VfTkVTVEFCTEVfQVNZTkNfRU5EOiAxMDEsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9ORVNUQUJMRV9BU1lOQ19JTlNUQU5UOiAxMTAsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9GTE9XX0JFR0lOOiAxMTUsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9GTE9XX1NURVA6IDExNiwKICAgIFRSQUNFX0VWRU5UX1BIQVNFX0ZMT1dfRU5EOiAxMDIsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9NRVRBREFUQTogNzcsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9DT1VOVEVSOiA2NywKICAgIFRSQUNFX0VWRU5UX1BIQVNFX1NBTVBMRTogODAsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9DUkVBVEVfT0JKRUNUOiA3OCwKICAgIFRSQUNFX0VWRU5UX1BIQVNFX1NOQVBTSE9UX09CSkVDVDogNzksCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9ERUxFVEVfT0JKRUNUOiA2OCwKICAgIFRSQUNFX0VWRU5UX1BIQVNFX01FTU9SWV9EVU1QOiAxMTgsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9NQVJLOiA4MiwKICAgIFRSQUNFX0VWRU5UX1BIQVNFX0NMT0NLX1NZTkM6IDk5LAogICAgVFJBQ0VfRVZFTlRfUEhBU0VfRU5URVJfQ09OVEVYVDogNDAsCiAgICBUUkFDRV9FVkVOVF9QSEFTRV9MRUFWRV9DT05URVhUOiA0MSwKICAgIFRSQUNFX0VWRU5UX1BIQVNFX0xJTktfSURTOiA2MQogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3V2LnRzCiAgdmFyIFVWX0VFWElTVCA9IG9zMi5lcnJuby5FRVhJU1Q7CiAgdmFyIFVWX0VOT0VOVCA9IG9zMi5lcnJuby5FTk9FTlQ7CiAgdmFyIGNvZGVUb0Vycm9yV2luZG93cyA9IFsKICAgIFstNDA5MywgWyJFMkJJRyIsICJhcmd1bWVudCBsaXN0IHRvbyBsb25nIl1dLAogICAgWy00MDkyLCBbIkVBQ0NFUyIsICJwZXJtaXNzaW9uIGRlbmllZCJdXSwKICAgIFstNDA5MSwgWyJFQUREUklOVVNFIiwgImFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiXV0sCiAgICBbLTQwOTAsIFsiRUFERFJOT1RBVkFJTCIsICJhZGRyZXNzIG5vdCBhdmFpbGFibGUiXV0sCiAgICBbLTQwODksIFsiRUFGTk9TVVBQT1JUIiwgImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiXV0sCiAgICBbLTQwODgsIFsiRUFHQUlOIiwgInJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIl1dLAogICAgWy0zZTMsIFsiRUFJX0FERFJGQU1JTFkiLCAiYWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCJdXSwKICAgIFstMzAwMSwgWyJFQUlfQUdBSU4iLCAidGVtcG9yYXJ5IGZhaWx1cmUiXV0sCiAgICBbLTMwMDIsIFsiRUFJX0JBREZMQUdTIiwgImJhZCBhaV9mbGFncyB2YWx1ZSJdXSwKICAgIFstMzAxMywgWyJFQUlfQkFESElOVFMiLCAiaW52YWxpZCB2YWx1ZSBmb3IgaGludHMiXV0sCiAgICBbLTMwMDMsIFsiRUFJX0NBTkNFTEVEIiwgInJlcXVlc3QgY2FuY2VsZWQiXV0sCiAgICBbLTMwMDQsIFsiRUFJX0ZBSUwiLCAicGVybWFuZW50IGZhaWx1cmUiXV0sCiAgICBbLTMwMDUsIFsiRUFJX0ZBTUlMWSIsICJhaV9mYW1pbHkgbm90IHN1cHBvcnRlZCJdXSwKICAgIFstMzAwNiwgWyJFQUlfTUVNT1JZIiwgIm91dCBvZiBtZW1vcnkiXV0sCiAgICBbLTMwMDcsIFsiRUFJX05PREFUQSIsICJubyBhZGRyZXNzIl1dLAogICAgWy0zMDA4LCBbIkVBSV9OT05BTUUiLCAidW5rbm93biBub2RlIG9yIHNlcnZpY2UiXV0sCiAgICBbLTMwMDksIFsiRUFJX09WRVJGTE9XIiwgImFyZ3VtZW50IGJ1ZmZlciBvdmVyZmxvdyJdXSwKICAgIFstMzAxNCwgWyJFQUlfUFJPVE9DT0wiLCAicmVzb2x2ZWQgcHJvdG9jb2wgaXMgdW5rbm93biJdXSwKICAgIFstMzAxMCwgWyJFQUlfU0VSVklDRSIsICJzZXJ2aWNlIG5vdCBhdmFpbGFibGUgZm9yIHNvY2tldCB0eXBlIl1dLAogICAgWy0zMDExLCBbIkVBSV9TT0NLVFlQRSIsICJzb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkIl1dLAogICAgWy00MDg0LCBbIkVBTFJFQURZIiwgImNvbm5lY3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyJdXSwKICAgIFstNDA4MywgWyJFQkFERiIsICJiYWQgZmlsZSBkZXNjcmlwdG9yIl1dLAogICAgWy00MDgyLCBbIkVCVVNZIiwgInJlc291cmNlIGJ1c3kgb3IgbG9ja2VkIl1dLAogICAgWy00MDgxLCBbIkVDQU5DRUxFRCIsICJvcGVyYXRpb24gY2FuY2VsZWQiXV0sCiAgICBbLTQwODAsIFsiRUNIQVJTRVQiLCAiaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlciJdXSwKICAgIFstNDA3OSwgWyJFQ09OTkFCT1JURUQiLCAic29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiXV0sCiAgICBbLTQwNzgsIFsiRUNPTk5SRUZVU0VEIiwgImNvbm5lY3Rpb24gcmVmdXNlZCJdXSwKICAgIFstNDA3NywgWyJFQ09OTlJFU0VUIiwgImNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciJdXSwKICAgIFstNDA3NiwgWyJFREVTVEFERFJSRVEiLCAiZGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCJdXSwKICAgIFstNDA3NSwgWyJFRVhJU1QiLCAiZmlsZSBhbHJlYWR5IGV4aXN0cyJdXSwKICAgIFstNDA3NCwgWyJFRkFVTFQiLCAiYmFkIGFkZHJlc3MgaW4gc3lzdGVtIGNhbGwgYXJndW1lbnQiXV0sCiAgICBbLTQwMzYsIFsiRUZCSUciLCAiZmlsZSB0b28gbGFyZ2UiXV0sCiAgICBbLTQwNzMsIFsiRUhPU1RVTlJFQUNIIiwgImhvc3QgaXMgdW5yZWFjaGFibGUiXV0sCiAgICBbLTQwNzIsIFsiRUlOVFIiLCAiaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwiXV0sCiAgICBbLTQwNzEsIFsiRUlOVkFMIiwgImludmFsaWQgYXJndW1lbnQiXV0sCiAgICBbLTQwNzAsIFsiRUlPIiwgImkvbyBlcnJvciJdXSwKICAgIFstNDA2OSwgWyJFSVNDT05OIiwgInNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZCJdXSwKICAgIFstNDA2OCwgWyJFSVNESVIiLCAiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnkiXV0sCiAgICBbLTQwNjcsIFsiRUxPT1AiLCAidG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQiXV0sCiAgICBbLTQwNjYsIFsiRU1GSUxFIiwgInRvbyBtYW55IG9wZW4gZmlsZXMiXV0sCiAgICBbLTQwNjUsIFsiRU1TR1NJWkUiLCAibWVzc2FnZSB0b28gbG9uZyJdXSwKICAgIFstNDA2NCwgWyJFTkFNRVRPT0xPTkciLCAibmFtZSB0b28gbG9uZyJdXSwKICAgIFstNDA2MywgWyJFTkVURE9XTiIsICJuZXR3b3JrIGlzIGRvd24iXV0sCiAgICBbLTQwNjIsIFsiRU5FVFVOUkVBQ0giLCAibmV0d29yayBpcyB1bnJlYWNoYWJsZSJdXSwKICAgIFstNDA2MSwgWyJFTkZJTEUiLCAiZmlsZSB0YWJsZSBvdmVyZmxvdyJdXSwKICAgIFstNDA2MCwgWyJFTk9CVUZTIiwgIm5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUiXV0sCiAgICBbLTQwNTksIFsiRU5PREVWIiwgIm5vIHN1Y2ggZGV2aWNlIl1dLAogICAgWy00MDU4LCBbIkVOT0VOVCIsICJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Il1dLAogICAgWy00MDU3LCBbIkVOT01FTSIsICJub3QgZW5vdWdoIG1lbW9yeSJdXSwKICAgIFstNDA1NiwgWyJFTk9ORVQiLCAibWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsiXV0sCiAgICBbLTQwMzUsIFsiRU5PUFJPVE9PUFQiLCAicHJvdG9jb2wgbm90IGF2YWlsYWJsZSJdXSwKICAgIFstNDA1NSwgWyJFTk9TUEMiLCAibm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UiXV0sCiAgICBbLTQwNTQsIFsiRU5PU1lTIiwgImZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCJdXSwKICAgIFstNDA1MywgWyJFTk9UQ09OTiIsICJzb2NrZXQgaXMgbm90IGNvbm5lY3RlZCJdXSwKICAgIFstNDA1MiwgWyJFTk9URElSIiwgIm5vdCBhIGRpcmVjdG9yeSJdXSwKICAgIFstNDA1MSwgWyJFTk9URU1QVFkiLCAiZGlyZWN0b3J5IG5vdCBlbXB0eSJdXSwKICAgIFstNDA1MCwgWyJFTk9UU09DSyIsICJzb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQiXV0sCiAgICBbLTQwNDksIFsiRU5PVFNVUCIsICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiBzb2NrZXQiXV0sCiAgICBbLTQwNDgsIFsiRVBFUk0iLCAib3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiXV0sCiAgICBbLTQwNDcsIFsiRVBJUEUiLCAiYnJva2VuIHBpcGUiXV0sCiAgICBbLTQwNDYsIFsiRVBST1RPIiwgInByb3RvY29sIGVycm9yIl1dLAogICAgWy00MDQ1LCBbIkVQUk9UT05PU1VQUE9SVCIsICJwcm90b2NvbCBub3Qgc3VwcG9ydGVkIl1dLAogICAgWy00MDQ0LCBbIkVQUk9UT1RZUEUiLCAicHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0Il1dLAogICAgWy00MDM0LCBbIkVSQU5HRSIsICJyZXN1bHQgdG9vIGxhcmdlIl1dLAogICAgWy00MDQzLCBbIkVST0ZTIiwgInJlYWQtb25seSBmaWxlIHN5c3RlbSJdXSwKICAgIFstNDA0MiwgWyJFU0hVVERPV04iLCAiY2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duIl1dLAogICAgWy00MDQxLCBbIkVTUElQRSIsICJpbnZhbGlkIHNlZWsiXV0sCiAgICBbLTQwNDAsIFsiRVNSQ0giLCAibm8gc3VjaCBwcm9jZXNzIl1dLAogICAgWy00MDM5LCBbIkVUSU1FRE9VVCIsICJjb25uZWN0aW9uIHRpbWVkIG91dCJdXSwKICAgIFstNDAzOCwgWyJFVFhUQlNZIiwgInRleHQgZmlsZSBpcyBidXN5Il1dLAogICAgWy00MDM3LCBbIkVYREVWIiwgImNyb3NzLWRldmljZSBsaW5rIG5vdCBwZXJtaXR0ZWQiXV0sCiAgICBbLTQwOTQsIFsiVU5LTk9XTiIsICJ1bmtub3duIGVycm9yIl1dLAogICAgWy00MDk1LCBbIkVPRiIsICJlbmQgb2YgZmlsZSJdXSwKICAgIFstNDAzMywgWyJFTlhJTyIsICJubyBzdWNoIGRldmljZSBvciBhZGRyZXNzIl1dLAogICAgWy00MDMyLCBbIkVNTElOSyIsICJ0b28gbWFueSBsaW5rcyJdXSwKICAgIFstNDAzMSwgWyJFSE9TVERPV04iLCAiaG9zdCBpcyBkb3duIl1dLAogICAgWy00MDMwLCBbIkVSRU1PVEVJTyIsICJyZW1vdGUgSS9PIGVycm9yIl1dLAogICAgWy00MDI5LCBbIkVOT1RUWSIsICJpbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2UiXV0sCiAgICBbLTQwMjgsIFsiRUZUWVBFIiwgImluYXBwcm9wcmlhdGUgZmlsZSB0eXBlIG9yIGZvcm1hdCJdXSwKICAgIFstNDAyNywgWyJFSUxTRVEiLCAiaWxsZWdhbCBieXRlIHNlcXVlbmNlIl1dCiAgXTsKICB2YXIgZXJyb3JUb0NvZGVXaW5kb3dzID0gY29kZVRvRXJyb3JXaW5kb3dzLm1hcCgoW3N0YXR1cywgW2Vycm9yXV0pID0+IFtlcnJvciwgc3RhdHVzXSk7CiAgdmFyIGNvZGVUb0Vycm9yRGFyd2luID0gWwogICAgWy03LCBbIkUyQklHIiwgImFyZ3VtZW50IGxpc3QgdG9vIGxvbmciXV0sCiAgICBbLTEzLCBbIkVBQ0NFUyIsICJwZXJtaXNzaW9uIGRlbmllZCJdXSwKICAgIFstNDgsIFsiRUFERFJJTlVTRSIsICJhZGRyZXNzIGFscmVhZHkgaW4gdXNlIl1dLAogICAgWy00OSwgWyJFQUREUk5PVEFWQUlMIiwgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSJdXSwKICAgIFstNDcsIFsiRUFGTk9TVVBQT1JUIiwgImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiXV0sCiAgICBbLTM1LCBbIkVBR0FJTiIsICJyZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSJdXSwKICAgIFstM2UzLCBbIkVBSV9BRERSRkFNSUxZIiwgImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiXV0sCiAgICBbLTMwMDEsIFsiRUFJX0FHQUlOIiwgInRlbXBvcmFyeSBmYWlsdXJlIl1dLAogICAgWy0zMDAyLCBbIkVBSV9CQURGTEFHUyIsICJiYWQgYWlfZmxhZ3MgdmFsdWUiXV0sCiAgICBbLTMwMTMsIFsiRUFJX0JBREhJTlRTIiwgImludmFsaWQgdmFsdWUgZm9yIGhpbnRzIl1dLAogICAgWy0zMDAzLCBbIkVBSV9DQU5DRUxFRCIsICJyZXF1ZXN0IGNhbmNlbGVkIl1dLAogICAgWy0zMDA0LCBbIkVBSV9GQUlMIiwgInBlcm1hbmVudCBmYWlsdXJlIl1dLAogICAgWy0zMDA1LCBbIkVBSV9GQU1JTFkiLCAiYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWQiXV0sCiAgICBbLTMwMDYsIFsiRUFJX01FTU9SWSIsICJvdXQgb2YgbWVtb3J5Il1dLAogICAgWy0zMDA3LCBbIkVBSV9OT0RBVEEiLCAibm8gYWRkcmVzcyJdXSwKICAgIFstMzAwOCwgWyJFQUlfTk9OQU1FIiwgInVua25vd24gbm9kZSBvciBzZXJ2aWNlIl1dLAogICAgWy0zMDA5LCBbIkVBSV9PVkVSRkxPVyIsICJhcmd1bWVudCBidWZmZXIgb3ZlcmZsb3ciXV0sCiAgICBbLTMwMTQsIFsiRUFJX1BST1RPQ09MIiwgInJlc29sdmVkIHByb3RvY29sIGlzIHVua25vd24iXV0sCiAgICBbLTMwMTAsIFsiRUFJX1NFUlZJQ0UiLCAic2VydmljZSBub3QgYXZhaWxhYmxlIGZvciBzb2NrZXQgdHlwZSJdXSwKICAgIFstMzAxMSwgWyJFQUlfU09DS1RZUEUiLCAic29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCJdXSwKICAgIFstMzcsIFsiRUFMUkVBRFkiLCAiY29ubmVjdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzIl1dLAogICAgWy05LCBbIkVCQURGIiwgImJhZCBmaWxlIGRlc2NyaXB0b3IiXV0sCiAgICBbLTE2LCBbIkVCVVNZIiwgInJlc291cmNlIGJ1c3kgb3IgbG9ja2VkIl1dLAogICAgWy04OSwgWyJFQ0FOQ0VMRUQiLCAib3BlcmF0aW9uIGNhbmNlbGVkIl1dLAogICAgWy00MDgwLCBbIkVDSEFSU0VUIiwgImludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXIiXV0sCiAgICBbLTUzLCBbIkVDT05OQUJPUlRFRCIsICJzb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCJdXSwKICAgIFstNjEsIFsiRUNPTk5SRUZVU0VEIiwgImNvbm5lY3Rpb24gcmVmdXNlZCJdXSwKICAgIFstNTQsIFsiRUNPTk5SRVNFVCIsICJjb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiXV0sCiAgICBbLTM5LCBbIkVERVNUQUREUlJFUSIsICJkZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkIl1dLAogICAgWy0xNywgWyJFRVhJU1QiLCAiZmlsZSBhbHJlYWR5IGV4aXN0cyJdXSwKICAgIFstMTQsIFsiRUZBVUxUIiwgImJhZCBhZGRyZXNzIGluIHN5c3RlbSBjYWxsIGFyZ3VtZW50Il1dLAogICAgWy0yNywgWyJFRkJJRyIsICJmaWxlIHRvbyBsYXJnZSJdXSwKICAgIFstNjUsIFsiRUhPU1RVTlJFQUNIIiwgImhvc3QgaXMgdW5yZWFjaGFibGUiXV0sCiAgICBbLTQsIFsiRUlOVFIiLCAiaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwiXV0sCiAgICBbLTIyLCBbIkVJTlZBTCIsICJpbnZhbGlkIGFyZ3VtZW50Il1dLAogICAgWy01LCBbIkVJTyIsICJpL28gZXJyb3IiXV0sCiAgICBbLTU2LCBbIkVJU0NPTk4iLCAic29ja2V0IGlzIGFscmVhZHkgY29ubmVjdGVkIl1dLAogICAgWy0yMSwgWyJFSVNESVIiLCAiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnkiXV0sCiAgICBbLTYyLCBbIkVMT09QIiwgInRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkIl1dLAogICAgWy0yNCwgWyJFTUZJTEUiLCAidG9vIG1hbnkgb3BlbiBmaWxlcyJdXSwKICAgIFstNDAsIFsiRU1TR1NJWkUiLCAibWVzc2FnZSB0b28gbG9uZyJdXSwKICAgIFstNjMsIFsiRU5BTUVUT09MT05HIiwgIm5hbWUgdG9vIGxvbmciXV0sCiAgICBbLTUwLCBbIkVORVRET1dOIiwgIm5ldHdvcmsgaXMgZG93biJdXSwKICAgIFstNTEsIFsiRU5FVFVOUkVBQ0giLCAibmV0d29yayBpcyB1bnJlYWNoYWJsZSJdXSwKICAgIFstMjMsIFsiRU5GSUxFIiwgImZpbGUgdGFibGUgb3ZlcmZsb3ciXV0sCiAgICBbLTU1LCBbIkVOT0JVRlMiLCAibm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSJdXSwKICAgIFstMTksIFsiRU5PREVWIiwgIm5vIHN1Y2ggZGV2aWNlIl1dLAogICAgWy0yLCBbIkVOT0VOVCIsICJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Il1dLAogICAgWy0xMiwgWyJFTk9NRU0iLCAibm90IGVub3VnaCBtZW1vcnkiXV0sCiAgICBbLTQwNTYsIFsiRU5PTkVUIiwgIm1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrIl1dLAogICAgWy00MiwgWyJFTk9QUk9UT09QVCIsICJwcm90b2NvbCBub3QgYXZhaWxhYmxlIl1dLAogICAgWy0yOCwgWyJFTk9TUEMiLCAibm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UiXV0sCiAgICBbLTc4LCBbIkVOT1NZUyIsICJmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQiXV0sCiAgICBbLTU3LCBbIkVOT1RDT05OIiwgInNvY2tldCBpcyBub3QgY29ubmVjdGVkIl1dLAogICAgWy0yMCwgWyJFTk9URElSIiwgIm5vdCBhIGRpcmVjdG9yeSJdXSwKICAgIFstNjYsIFsiRU5PVEVNUFRZIiwgImRpcmVjdG9yeSBub3QgZW1wdHkiXV0sCiAgICBbLTM4LCBbIkVOT1RTT0NLIiwgInNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCJdXSwKICAgIFstNDUsIFsiRU5PVFNVUCIsICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiBzb2NrZXQiXV0sCiAgICBbLTEsIFsiRVBFUk0iLCAib3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiXV0sCiAgICBbLTMyLCBbIkVQSVBFIiwgImJyb2tlbiBwaXBlIl1dLAogICAgWy0xMDAsIFsiRVBST1RPIiwgInByb3RvY29sIGVycm9yIl1dLAogICAgWy00MywgWyJFUFJPVE9OT1NVUFBPUlQiLCAicHJvdG9jb2wgbm90IHN1cHBvcnRlZCJdXSwKICAgIFstNDEsIFsiRVBST1RPVFlQRSIsICJwcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiXV0sCiAgICBbLTM0LCBbIkVSQU5HRSIsICJyZXN1bHQgdG9vIGxhcmdlIl1dLAogICAgWy0zMCwgWyJFUk9GUyIsICJyZWFkLW9ubHkgZmlsZSBzeXN0ZW0iXV0sCiAgICBbLTU4LCBbIkVTSFVURE9XTiIsICJjYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24iXV0sCiAgICBbLTI5LCBbIkVTUElQRSIsICJpbnZhbGlkIHNlZWsiXV0sCiAgICBbLTMsIFsiRVNSQ0giLCAibm8gc3VjaCBwcm9jZXNzIl1dLAogICAgWy02MCwgWyJFVElNRURPVVQiLCAiY29ubmVjdGlvbiB0aW1lZCBvdXQiXV0sCiAgICBbLTI2LCBbIkVUWFRCU1kiLCAidGV4dCBmaWxlIGlzIGJ1c3kiXV0sCiAgICBbLTE4LCBbIkVYREVWIiwgImNyb3NzLWRldmljZSBsaW5rIG5vdCBwZXJtaXR0ZWQiXV0sCiAgICBbLTQwOTQsIFsiVU5LTk9XTiIsICJ1bmtub3duIGVycm9yIl1dLAogICAgWy00MDk1LCBbIkVPRiIsICJlbmQgb2YgZmlsZSJdXSwKICAgIFstNiwgWyJFTlhJTyIsICJubyBzdWNoIGRldmljZSBvciBhZGRyZXNzIl1dLAogICAgWy0zMSwgWyJFTUxJTksiLCAidG9vIG1hbnkgbGlua3MiXV0sCiAgICBbLTY0LCBbIkVIT1NURE9XTiIsICJob3N0IGlzIGRvd24iXV0sCiAgICBbLTQwMzAsIFsiRVJFTU9URUlPIiwgInJlbW90ZSBJL08gZXJyb3IiXV0sCiAgICBbLTI1LCBbIkVOT1RUWSIsICJpbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2UiXV0sCiAgICBbLTc5LCBbIkVGVFlQRSIsICJpbmFwcHJvcHJpYXRlIGZpbGUgdHlwZSBvciBmb3JtYXQiXV0sCiAgICBbLTkyLCBbIkVJTFNFUSIsICJpbGxlZ2FsIGJ5dGUgc2VxdWVuY2UiXV0KICBdOwogIHZhciBlcnJvclRvQ29kZURhcndpbiA9IGNvZGVUb0Vycm9yRGFyd2luLm1hcCgoW3N0YXR1cywgW2NvZGVdXSkgPT4gW2NvZGUsIHN0YXR1c10pOwogIHZhciBjb2RlVG9FcnJvckxpbnV4ID0gWwogICAgWy03LCBbIkUyQklHIiwgImFyZ3VtZW50IGxpc3QgdG9vIGxvbmciXV0sCiAgICBbLTEzLCBbIkVBQ0NFUyIsICJwZXJtaXNzaW9uIGRlbmllZCJdXSwKICAgIFstOTgsIFsiRUFERFJJTlVTRSIsICJhZGRyZXNzIGFscmVhZHkgaW4gdXNlIl1dLAogICAgWy05OSwgWyJFQUREUk5PVEFWQUlMIiwgImFkZHJlc3Mgbm90IGF2YWlsYWJsZSJdXSwKICAgIFstOTcsIFsiRUFGTk9TVVBQT1JUIiwgImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiXV0sCiAgICBbLTExLCBbIkVBR0FJTiIsICJyZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZSJdXSwKICAgIFstM2UzLCBbIkVBSV9BRERSRkFNSUxZIiwgImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQiXV0sCiAgICBbLTMwMDEsIFsiRUFJX0FHQUlOIiwgInRlbXBvcmFyeSBmYWlsdXJlIl1dLAogICAgWy0zMDAyLCBbIkVBSV9CQURGTEFHUyIsICJiYWQgYWlfZmxhZ3MgdmFsdWUiXV0sCiAgICBbLTMwMTMsIFsiRUFJX0JBREhJTlRTIiwgImludmFsaWQgdmFsdWUgZm9yIGhpbnRzIl1dLAogICAgWy0zMDAzLCBbIkVBSV9DQU5DRUxFRCIsICJyZXF1ZXN0IGNhbmNlbGVkIl1dLAogICAgWy0zMDA0LCBbIkVBSV9GQUlMIiwgInBlcm1hbmVudCBmYWlsdXJlIl1dLAogICAgWy0zMDA1LCBbIkVBSV9GQU1JTFkiLCAiYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWQiXV0sCiAgICBbLTMwMDYsIFsiRUFJX01FTU9SWSIsICJvdXQgb2YgbWVtb3J5Il1dLAogICAgWy0zMDA3LCBbIkVBSV9OT0RBVEEiLCAibm8gYWRkcmVzcyJdXSwKICAgIFstMzAwOCwgWyJFQUlfTk9OQU1FIiwgInVua25vd24gbm9kZSBvciBzZXJ2aWNlIl1dLAogICAgWy0zMDA5LCBbIkVBSV9PVkVSRkxPVyIsICJhcmd1bWVudCBidWZmZXIgb3ZlcmZsb3ciXV0sCiAgICBbLTMwMTQsIFsiRUFJX1BST1RPQ09MIiwgInJlc29sdmVkIHByb3RvY29sIGlzIHVua25vd24iXV0sCiAgICBbLTMwMTAsIFsiRUFJX1NFUlZJQ0UiLCAic2VydmljZSBub3QgYXZhaWxhYmxlIGZvciBzb2NrZXQgdHlwZSJdXSwKICAgIFstMzAxMSwgWyJFQUlfU09DS1RZUEUiLCAic29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCJdXSwKICAgIFstMTE0LCBbIkVBTFJFQURZIiwgImNvbm5lY3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyJdXSwKICAgIFstOSwgWyJFQkFERiIsICJiYWQgZmlsZSBkZXNjcmlwdG9yIl1dLAogICAgWy0xNiwgWyJFQlVTWSIsICJyZXNvdXJjZSBidXN5IG9yIGxvY2tlZCJdXSwKICAgIFstMTI1LCBbIkVDQU5DRUxFRCIsICJvcGVyYXRpb24gY2FuY2VsZWQiXV0sCiAgICBbLTQwODAsIFsiRUNIQVJTRVQiLCAiaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlciJdXSwKICAgIFstMTAzLCBbIkVDT05OQUJPUlRFRCIsICJzb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCJdXSwKICAgIFstMTExLCBbIkVDT05OUkVGVVNFRCIsICJjb25uZWN0aW9uIHJlZnVzZWQiXV0sCiAgICBbLTEwNCwgWyJFQ09OTlJFU0VUIiwgImNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciJdXSwKICAgIFstODksIFsiRURFU1RBRERSUkVRIiwgImRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQiXV0sCiAgICBbLTE3LCBbIkVFWElTVCIsICJmaWxlIGFscmVhZHkgZXhpc3RzIl1dLAogICAgWy0xNCwgWyJFRkFVTFQiLCAiYmFkIGFkZHJlc3MgaW4gc3lzdGVtIGNhbGwgYXJndW1lbnQiXV0sCiAgICBbLTI3LCBbIkVGQklHIiwgImZpbGUgdG9vIGxhcmdlIl1dLAogICAgWy0xMTMsIFsiRUhPU1RVTlJFQUNIIiwgImhvc3QgaXMgdW5yZWFjaGFibGUiXV0sCiAgICBbLTQsIFsiRUlOVFIiLCAiaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwiXV0sCiAgICBbLTIyLCBbIkVJTlZBTCIsICJpbnZhbGlkIGFyZ3VtZW50Il1dLAogICAgWy01LCBbIkVJTyIsICJpL28gZXJyb3IiXV0sCiAgICBbLTEwNiwgWyJFSVNDT05OIiwgInNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZCJdXSwKICAgIFstMjEsIFsiRUlTRElSIiwgImlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5Il1dLAogICAgWy00MCwgWyJFTE9PUCIsICJ0b28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZCJdXSwKICAgIFstMjQsIFsiRU1GSUxFIiwgInRvbyBtYW55IG9wZW4gZmlsZXMiXV0sCiAgICBbLTkwLCBbIkVNU0dTSVpFIiwgIm1lc3NhZ2UgdG9vIGxvbmciXV0sCiAgICBbLTM2LCBbIkVOQU1FVE9PTE9ORyIsICJuYW1lIHRvbyBsb25nIl1dLAogICAgWy0xMDAsIFsiRU5FVERPV04iLCAibmV0d29yayBpcyBkb3duIl1dLAogICAgWy0xMDEsIFsiRU5FVFVOUkVBQ0giLCAibmV0d29yayBpcyB1bnJlYWNoYWJsZSJdXSwKICAgIFstMjMsIFsiRU5GSUxFIiwgImZpbGUgdGFibGUgb3ZlcmZsb3ciXV0sCiAgICBbLTEwNSwgWyJFTk9CVUZTIiwgIm5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUiXV0sCiAgICBbLTE5LCBbIkVOT0RFViIsICJubyBzdWNoIGRldmljZSJdXSwKICAgIFstMiwgWyJFTk9FTlQiLCAibm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSJdXSwKICAgIFstMTIsIFsiRU5PTUVNIiwgIm5vdCBlbm91Z2ggbWVtb3J5Il1dLAogICAgWy02NCwgWyJFTk9ORVQiLCAibWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsiXV0sCiAgICBbLTkyLCBbIkVOT1BST1RPT1BUIiwgInByb3RvY29sIG5vdCBhdmFpbGFibGUiXV0sCiAgICBbLTI4LCBbIkVOT1NQQyIsICJubyBzcGFjZSBsZWZ0IG9uIGRldmljZSJdXSwKICAgIFstMzgsIFsiRU5PU1lTIiwgImZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCJdXSwKICAgIFstMTA3LCBbIkVOT1RDT05OIiwgInNvY2tldCBpcyBub3QgY29ubmVjdGVkIl1dLAogICAgWy0yMCwgWyJFTk9URElSIiwgIm5vdCBhIGRpcmVjdG9yeSJdXSwKICAgIFstMzksIFsiRU5PVEVNUFRZIiwgImRpcmVjdG9yeSBub3QgZW1wdHkiXV0sCiAgICBbLTg4LCBbIkVOT1RTT0NLIiwgInNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCJdXSwKICAgIFstOTUsIFsiRU5PVFNVUCIsICJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiBzb2NrZXQiXV0sCiAgICBbLTEsIFsiRVBFUk0iLCAib3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQiXV0sCiAgICBbLTMyLCBbIkVQSVBFIiwgImJyb2tlbiBwaXBlIl1dLAogICAgWy03MSwgWyJFUFJPVE8iLCAicHJvdG9jb2wgZXJyb3IiXV0sCiAgICBbLTkzLCBbIkVQUk9UT05PU1VQUE9SVCIsICJwcm90b2NvbCBub3Qgc3VwcG9ydGVkIl1dLAogICAgWy05MSwgWyJFUFJPVE9UWVBFIiwgInByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCJdXSwKICAgIFstMzQsIFsiRVJBTkdFIiwgInJlc3VsdCB0b28gbGFyZ2UiXV0sCiAgICBbLTMwLCBbIkVST0ZTIiwgInJlYWQtb25seSBmaWxlIHN5c3RlbSJdXSwKICAgIFstMTA4LCBbIkVTSFVURE9XTiIsICJjYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24iXV0sCiAgICBbLTI5LCBbIkVTUElQRSIsICJpbnZhbGlkIHNlZWsiXV0sCiAgICBbLTMsIFsiRVNSQ0giLCAibm8gc3VjaCBwcm9jZXNzIl1dLAogICAgWy0xMTAsIFsiRVRJTUVET1VUIiwgImNvbm5lY3Rpb24gdGltZWQgb3V0Il1dLAogICAgWy0yNiwgWyJFVFhUQlNZIiwgInRleHQgZmlsZSBpcyBidXN5Il1dLAogICAgWy0xOCwgWyJFWERFViIsICJjcm9zcy1kZXZpY2UgbGluayBub3QgcGVybWl0dGVkIl1dLAogICAgWy00MDk0LCBbIlVOS05PV04iLCAidW5rbm93biBlcnJvciJdXSwKICAgIFstNDA5NSwgWyJFT0YiLCAiZW5kIG9mIGZpbGUiXV0sCiAgICBbLTYsIFsiRU5YSU8iLCAibm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyJdXSwKICAgIFstMzEsIFsiRU1MSU5LIiwgInRvbyBtYW55IGxpbmtzIl1dLAogICAgWy0xMTIsIFsiRUhPU1RET1dOIiwgImhvc3QgaXMgZG93biJdXSwKICAgIFstMTIxLCBbIkVSRU1PVEVJTyIsICJyZW1vdGUgSS9PIGVycm9yIl1dLAogICAgWy0yNSwgWyJFTk9UVFkiLCAiaW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlIl1dLAogICAgWy00MDI4LCBbIkVGVFlQRSIsICJpbmFwcHJvcHJpYXRlIGZpbGUgdHlwZSBvciBmb3JtYXQiXV0sCiAgICBbLTg0LCBbIkVJTFNFUSIsICJpbGxlZ2FsIGJ5dGUgc2VxdWVuY2UiXV0KICBdOwogIHZhciBlcnJvclRvQ29kZUxpbnV4ID0gY29kZVRvRXJyb3JMaW51eC5tYXAoKFtzdGF0dXMsIFtjb2RlXV0pID0+IFtjb2RlLCBzdGF0dXNdKTsKICB2YXIgZXJyb3JNYXAgPSBuZXcgTWFwKAogICAgb3NUeXBlMiA9PT0gIndpbmRvd3MiID8gY29kZVRvRXJyb3JXaW5kb3dzIDogb3NUeXBlMiA9PT0gImRhcndpbiIgPyBjb2RlVG9FcnJvckRhcndpbiA6IG9zVHlwZTIgPT09ICJsaW51eCIgPyBjb2RlVG9FcnJvckxpbnV4IDogdW5yZWFjaGFibGUoKQogICk7CiAgdmFyIGNvZGVNYXAgPSBuZXcgTWFwKAogICAgb3NUeXBlMiA9PT0gIndpbmRvd3MiID8gZXJyb3JUb0NvZGVXaW5kb3dzIDogb3NUeXBlMiA9PT0gImRhcndpbiIgPyBlcnJvclRvQ29kZURhcndpbiA6IG9zVHlwZTIgPT09ICJsaW51eCIgPyBlcnJvclRvQ29kZUxpbnV4IDogdW5yZWFjaGFibGUoKQogICk7CiAgZnVuY3Rpb24gbWFwU3lzRXJybm9Ub1V2RXJybm8oc3lzRXJybm8pIHsKICAgIGlmIChvc1R5cGUyID09PSAid2luZG93cyIpIHsKICAgICAgY29uc3QgY29kZSA9IHV2VHJhbnNsYXRlU3lzRXJyb3Ioc3lzRXJybm8pOwogICAgICByZXR1cm4gY29kZU1hcC5nZXQoY29kZSkgPz8gLXN5c0Vycm5vOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIC1zeXNFcnJubzsKICAgIH0KICB9CiAgdmFyIFVWX0VBSV9NRU1PUlkgPSBjb2RlTWFwLmdldCgiRUFJX01FTU9SWSIpOwogIHZhciBVVl9VTktOT1dOID0gY29kZU1hcC5nZXQoIlVOS05PV04iKTsKICB2YXIgVVZfRUJBREYgPSBjb2RlTWFwLmdldCgiRUJBREYiKTsKICB2YXIgVVZfRUlOVkFMID0gY29kZU1hcC5nZXQoIkVJTlZBTCIpOwogIHZhciBVVl9FTk9UU09DSyA9IGNvZGVNYXAuZ2V0KCJFTk9UU09DSyIpOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvdXRpbC90eXBlcy50cwogIHZhciB0eXBlc19kZWZhdWx0MiA9IHsgLi4udHlwZXNfZXhwb3J0czIgfTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvc3RyaW5nX2RlY29kZXIudHMKICB2YXIgc3RyaW5nX2RlY29kZXJfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KHN0cmluZ19kZWNvZGVyX2V4cG9ydHMsIHsKICAgIGRlZmF1bHQ6ICgpID0+IHN0cmluZ19kZWNvZGVyX2RlZmF1bHQsCiAgICBlbmNvZGluZ3M6ICgpID0+IGVuY29kaW5ncwogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9fbm9kZS50cwogIHZhciBFbmNvZGluZ3MgPSAvKiBAX19QVVJFX18gKi8gKChFbmNvZGluZ3MyKSA9PiB7CiAgICBFbmNvZGluZ3MyW0VuY29kaW5nczJbIkFTQ0lJIl0gPSAwXSA9ICJBU0NJSSI7CiAgICBFbmNvZGluZ3MyW0VuY29kaW5nczJbIlVURjgiXSA9IDFdID0gIlVURjgiOwogICAgRW5jb2RpbmdzMltFbmNvZGluZ3MyWyJCQVNFNjQiXSA9IDJdID0gIkJBU0U2NCI7CiAgICBFbmNvZGluZ3MyW0VuY29kaW5nczJbIlVDUzIiXSA9IDNdID0gIlVDUzIiOwogICAgRW5jb2RpbmdzMltFbmNvZGluZ3MyWyJCSU5BUlkiXSA9IDRdID0gIkJJTkFSWSI7CiAgICBFbmNvZGluZ3MyW0VuY29kaW5nczJbIkhFWCJdID0gNV0gPSAiSEVYIjsKICAgIEVuY29kaW5nczJbRW5jb2RpbmdzMlsiQlVGRkVSIl0gPSA2XSA9ICJCVUZGRVIiOwogICAgRW5jb2RpbmdzMltFbmNvZGluZ3MyWyJCQVNFNjRVUkwiXSA9IDddID0gIkJBU0U2NFVSTCI7CiAgICBFbmNvZGluZ3MyW0VuY29kaW5nczJbIkxBVElOMSJdID0gNF0gPSAiTEFUSU4xIjsKICAgIHJldHVybiBFbmNvZGluZ3MyOwogIH0pKEVuY29kaW5ncyB8fCB7fSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3N0cmluZ19kZWNvZGVyLnRzCiAgdmFyIGVuY29kaW5ncyA9IFtdOwogIGVuY29kaW5nc1swIC8qIEFTQ0lJICovXSA9ICJhc2NpaSI7CiAgZW5jb2RpbmdzWzIgLyogQkFTRTY0ICovXSA9ICJiYXNlNjQiOwogIGVuY29kaW5nc1s3IC8qIEJBU0U2NFVSTCAqL10gPSAiYmFzZTY0dXJsIjsKICBlbmNvZGluZ3NbNiAvKiBCVUZGRVIgKi9dID0gImJ1ZmZlciI7CiAgZW5jb2RpbmdzWzUgLyogSEVYICovXSA9ICJoZXgiOwogIGVuY29kaW5nc1s0IC8qIExBVElOMSAqL10gPSAibGF0aW4xIjsKICBlbmNvZGluZ3NbMyAvKiBVQ1MyICovXSA9ICJ1dGYxNmxlIjsKICBlbmNvZGluZ3NbMSAvKiBVVEY4ICovXSA9ICJ1dGY4IjsKICB2YXIgc3RyaW5nX2RlY29kZXJfZGVmYXVsdCA9IHsgZW5jb2RpbmdzIH07CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2J1ZmZlci50cwogIHZhciBidWZmZXJfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGJ1ZmZlcl9leHBvcnRzLCB7CiAgICBkZWZhdWx0OiAoKSA9PiBidWZmZXJfZGVmYXVsdCwKICAgIGluZGV4T2ZCdWZmZXI6ICgpID0+IGluZGV4T2ZCdWZmZXIsCiAgICBpbmRleE9mTnVtYmVyOiAoKSA9PiBpbmRleE9mTnVtYmVyLAogICAgbnVtYmVyVG9CeXRlczogKCkgPT4gbnVtYmVyVG9CeXRlcwogIH0pOwogIGZ1bmN0aW9uIG51bWJlclRvQnl0ZXMobjgpIHsKICAgIGlmIChuOCA9PT0gMCkKICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFswXSk7CiAgICBjb25zdCBieXRlcyA9IFtdOwogICAgYnl0ZXMudW5zaGlmdChuOCAmIDI1NSk7CiAgICB3aGlsZSAobjggPj0gMjU2KSB7CiAgICAgIG44ID0gbjggPj4+IDg7CiAgICAgIGJ5dGVzLnVuc2hpZnQobjggJiAyNTUpOwogICAgfQogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVzKTsKICB9CiAgZnVuY3Rpb24gZmluZExhc3RJbmRleCh0YXJnZXRCdWZmZXIsIGJ1ZmZlciwgb2Zmc2V0KSB7CiAgICBvZmZzZXQgPSBvZmZzZXQgPiB0YXJnZXRCdWZmZXIubGVuZ3RoID8gdGFyZ2V0QnVmZmVyLmxlbmd0aCA6IG9mZnNldDsKICAgIGNvbnN0IHNlYXJjaGFibGVCdWZmZXIgPSB0YXJnZXRCdWZmZXIuc2xpY2UoMCwgb2Zmc2V0ICsgYnVmZmVyLmxlbmd0aCk7CiAgICBjb25zdCBzZWFyY2hhYmxlQnVmZmVyTGFzdEluZGV4ID0gc2VhcmNoYWJsZUJ1ZmZlci5sZW5ndGggLSAxOwogICAgY29uc3QgYnVmZmVyTGFzdEluZGV4ID0gYnVmZmVyLmxlbmd0aCAtIDE7CiAgICBsZXQgbGFzdE1hdGNoSW5kZXggPSAtMTsKICAgIGxldCBtYXRjaGVzID0gMDsKICAgIGxldCBpbmRleCA9IC0xOwogICAgZm9yIChsZXQgeDIxID0gMDsgeDIxIDw9IHNlYXJjaGFibGVCdWZmZXJMYXN0SW5kZXg7IHgyMSsrKSB7CiAgICAgIGlmIChzZWFyY2hhYmxlQnVmZmVyW3NlYXJjaGFibGVCdWZmZXJMYXN0SW5kZXggLSB4MjFdID09PSBidWZmZXJbYnVmZmVyTGFzdEluZGV4IC0gbWF0Y2hlc10pIHsKICAgICAgICBpZiAobGFzdE1hdGNoSW5kZXggPT09IC0xKSB7CiAgICAgICAgICBsYXN0TWF0Y2hJbmRleCA9IHgyMTsKICAgICAgICB9CiAgICAgICAgbWF0Y2hlcysrOwogICAgICB9IGVsc2UgewogICAgICAgIG1hdGNoZXMgPSAwOwogICAgICAgIGlmIChsYXN0TWF0Y2hJbmRleCAhPT0gLTEpIHsKICAgICAgICAgIHgyMSA9IGxhc3RNYXRjaEluZGV4ICsgMTsKICAgICAgICAgIGxhc3RNYXRjaEluZGV4ID0gLTE7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChtYXRjaGVzID09PSBidWZmZXIubGVuZ3RoKSB7CiAgICAgICAgaW5kZXggPSB4MjE7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmIChpbmRleCA9PT0gLTEpCiAgICAgIHJldHVybiBpbmRleDsKICAgIHJldHVybiBzZWFyY2hhYmxlQnVmZmVyTGFzdEluZGV4IC0gaW5kZXg7CiAgfQogIGZ1bmN0aW9uIGluZGV4T2ZCdWZmZXIodGFyZ2V0QnVmZmVyLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmb3J3YXJkRGlyZWN0aW9uKSB7CiAgICBpZiAoIUVuY29kaW5nc1tlbmNvZGluZ10gPT09IHZvaWQgMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZW5jb2RpbmcgY29kZSAke2VuY29kaW5nfWApOwogICAgfQogICAgaWYgKCFmb3J3YXJkRGlyZWN0aW9uKSB7CiAgICAgIGlmIChieXRlT2Zmc2V0IDwgMCkgewogICAgICAgIGJ5dGVPZmZzZXQgPSB0YXJnZXRCdWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldDsKICAgICAgfQogICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBieXRlT2Zmc2V0IDw9IHRhcmdldEJ1ZmZlci5sZW5ndGggPyBieXRlT2Zmc2V0IDogdGFyZ2V0QnVmZmVyLmxlbmd0aDsKICAgICAgfQogICAgICByZXR1cm4gZmluZExhc3RJbmRleCh0YXJnZXRCdWZmZXIsIGJ1ZmZlciwgYnl0ZU9mZnNldCk7CiAgICB9CiAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gYnl0ZU9mZnNldCA8PSB0YXJnZXRCdWZmZXIubGVuZ3RoID8gYnl0ZU9mZnNldCA6IHRhcmdldEJ1ZmZlci5sZW5ndGg7CiAgICB9CiAgICByZXR1cm4gaW5kZXhPZk5lZWRsZSh0YXJnZXRCdWZmZXIsIGJ1ZmZlciwgYnl0ZU9mZnNldCk7CiAgfQogIGZ1bmN0aW9uIGluZGV4T2ZOdW1iZXIodGFyZ2V0QnVmZmVyLCBudW1iZXIsIGJ5dGVPZmZzZXQsIGZvcndhcmREaXJlY3Rpb24pIHsKICAgIGNvbnN0IGJ5dGVzID0gbnVtYmVyVG9CeXRlcyhudW1iZXIpOwogICAgaWYgKGJ5dGVzLmxlbmd0aCA+IDEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJNdWx0aSBieXRlIG51bWJlciBzZWFyY2ggaXMgbm90IHN1cHBvcnRlZCIpOwogICAgfQogICAgcmV0dXJuIGluZGV4T2ZCdWZmZXIoCiAgICAgIHRhcmdldEJ1ZmZlciwKICAgICAgbnVtYmVyVG9CeXRlcyhudW1iZXIpLAogICAgICBieXRlT2Zmc2V0LAogICAgICAxIC8qIFVURjggKi8sCiAgICAgIGZvcndhcmREaXJlY3Rpb24KICAgICk7CiAgfQogIHZhciBidWZmZXJfZGVmYXVsdCA9IHsgaW5kZXhPZkJ1ZmZlciwgaW5kZXhPZk51bWJlciB9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2VuY29kaW5nL2Jhc2U2NC50cwogIHZhciBiYXNlNjRhYmMgPSBbCiAgICAiQSIsCiAgICAiQiIsCiAgICAiQyIsCiAgICAiRCIsCiAgICAiRSIsCiAgICAiRiIsCiAgICAiRyIsCiAgICAiSCIsCiAgICAiSSIsCiAgICAiSiIsCiAgICAiSyIsCiAgICAiTCIsCiAgICAiTSIsCiAgICAiTiIsCiAgICAiTyIsCiAgICAiUCIsCiAgICAiUSIsCiAgICAiUiIsCiAgICAiUyIsCiAgICAiVCIsCiAgICAiVSIsCiAgICAiViIsCiAgICAiVyIsCiAgICAiWCIsCiAgICAiWSIsCiAgICAiWiIsCiAgICAiYSIsCiAgICAiYiIsCiAgICAiYyIsCiAgICAiZCIsCiAgICAiZSIsCiAgICAiZiIsCiAgICAiZyIsCiAgICAiaCIsCiAgICAiaSIsCiAgICAiaiIsCiAgICAiayIsCiAgICAibCIsCiAgICAibSIsCiAgICAibiIsCiAgICAibyIsCiAgICAicCIsCiAgICAicSIsCiAgICAiciIsCiAgICAicyIsCiAgICAidCIsCiAgICAidSIsCiAgICAidiIsCiAgICAidyIsCiAgICAieCIsCiAgICAieSIsCiAgICAieiIsCiAgICAiMCIsCiAgICAiMSIsCiAgICAiMiIsCiAgICAiMyIsCiAgICAiNCIsCiAgICAiNSIsCiAgICAiNiIsCiAgICAiNyIsCiAgICAiOCIsCiAgICAiOSIsCiAgICAiKyIsCiAgICAiLyIKICBdOwogIGZ1bmN0aW9uIGVuY29kZShkYXRhKSB7CiAgICBjb25zdCB1aW50OCA9IHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkYXRhKSA6IGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gZGF0YSA6IG5ldyBVaW50OEFycmF5KGRhdGEpOwogICAgbGV0IHJlc3VsdCA9ICIiLCBpNDsKICAgIGNvbnN0IGw3ID0gdWludDgubGVuZ3RoOwogICAgZm9yIChpNCA9IDI7IGk0IDwgbDc7IGk0ICs9IDMpIHsKICAgICAgcmVzdWx0ICs9IGJhc2U2NGFiY1t1aW50OFtpNCAtIDJdID4+IDJdOwogICAgICByZXN1bHQgKz0gYmFzZTY0YWJjWyh1aW50OFtpNCAtIDJdICYgMykgPDwgNCB8IHVpbnQ4W2k0IC0gMV0gPj4gNF07CiAgICAgIHJlc3VsdCArPSBiYXNlNjRhYmNbKHVpbnQ4W2k0IC0gMV0gJiAxNSkgPDwgMiB8IHVpbnQ4W2k0XSA+PiA2XTsKICAgICAgcmVzdWx0ICs9IGJhc2U2NGFiY1t1aW50OFtpNF0gJiA2M107CiAgICB9CiAgICBpZiAoaTQgPT09IGw3ICsgMSkgewogICAgICByZXN1bHQgKz0gYmFzZTY0YWJjW3VpbnQ4W2k0IC0gMl0gPj4gMl07CiAgICAgIHJlc3VsdCArPSBiYXNlNjRhYmNbKHVpbnQ4W2k0IC0gMl0gJiAzKSA8PCA0XTsKICAgICAgcmVzdWx0ICs9ICI9PSI7CiAgICB9CiAgICBpZiAoaTQgPT09IGw3KSB7CiAgICAgIHJlc3VsdCArPSBiYXNlNjRhYmNbdWludDhbaTQgLSAyXSA+PiAyXTsKICAgICAgcmVzdWx0ICs9IGJhc2U2NGFiY1sodWludDhbaTQgLSAyXSAmIDMpIDw8IDQgfCB1aW50OFtpNCAtIDFdID4+IDRdOwogICAgICByZXN1bHQgKz0gYmFzZTY0YWJjWyh1aW50OFtpNCAtIDFdICYgMTUpIDw8IDJdOwogICAgICByZXN1bHQgKz0gIj0iOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gZGVjb2RlKGI2NCkgewogICAgY29uc3QgYmluU3RyaW5nID0gYXRvYihiNjQpOwogICAgY29uc3Qgc2l6ZSA9IGJpblN0cmluZy5sZW5ndGg7CiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpOwogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IHNpemU7IGk0KyspIHsKICAgICAgYnl0ZXNbaTRdID0gYmluU3RyaW5nLmNoYXJDb2RlQXQoaTQpOwogICAgfQogICAgcmV0dXJuIGJ5dGVzOwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9lbmNvZGluZy9iYXNlNjR1cmwudHMKICBmdW5jdGlvbiBhZGRQYWRkaW5nVG9CYXNlNjR1cmwoYmFzZTY0dXJsKSB7CiAgICBpZiAoYmFzZTY0dXJsLmxlbmd0aCAlIDQgPT09IDIpCiAgICAgIHJldHVybiBiYXNlNjR1cmwgKyAiPT0iOwogICAgaWYgKGJhc2U2NHVybC5sZW5ndGggJSA0ID09PSAzKQogICAgICByZXR1cm4gYmFzZTY0dXJsICsgIj0iOwogICAgaWYgKGJhc2U2NHVybC5sZW5ndGggJSA0ID09PSAxKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyEiKTsKICAgIH0KICAgIHJldHVybiBiYXNlNjR1cmw7CiAgfQogIGZ1bmN0aW9uIGNvbnZlcnRCYXNlNjR1cmxUb0Jhc2U2NChiNjR1cmwpIHsKICAgIGlmICghL15bLV9BLVowLTldKj89ezAsMn0kL2kudGVzdChiNjR1cmwpKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkZhaWxlZCB0byBkZWNvZGUgYmFzZTY0dXJsOiBpbnZhbGlkIGNoYXJhY3RlciIpOwogICAgfQogICAgcmV0dXJuIGFkZFBhZGRpbmdUb0Jhc2U2NHVybChiNjR1cmwpLnJlcGxhY2UoL1wtL2csICIrIikucmVwbGFjZSgvXy9nLCAiLyIpOwogIH0KICBmdW5jdGlvbiBjb252ZXJ0QmFzZTY0VG9CYXNlNjR1cmwoYjY0KSB7CiAgICByZXR1cm4gYjY0LnJlcGxhY2UoLz0vZywgIiIpLnJlcGxhY2UoL1wrL2csICItIikucmVwbGFjZSgvXC8vZywgIl8iKTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlMihkYXRhKSB7CiAgICByZXR1cm4gY29udmVydEJhc2U2NFRvQmFzZTY0dXJsKGVuY29kZShkYXRhKSk7CiAgfQogIGZ1bmN0aW9uIGRlY29kZTIoYjY0dXJsKSB7CiAgICByZXR1cm4gZGVjb2RlKGNvbnZlcnRCYXNlNjR1cmxUb0Jhc2U2NChiNjR1cmwpKTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL191dGlscy50cwogIGZ1bmN0aW9uIGFzY2lpVG9CeXRlcyhzdHIyKSB7CiAgICBjb25zdCBieXRlQXJyYXkgPSBbXTsKICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBzdHIyLmxlbmd0aDsgKytpNCkgewogICAgICBieXRlQXJyYXkucHVzaChzdHIyLmNoYXJDb2RlQXQoaTQpICYgMjU1KTsKICAgIH0KICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlQXJyYXkpOwogIH0KICBmdW5jdGlvbiBiYXNlNjRUb0J5dGVzKHN0cjIpIHsKICAgIHN0cjIgPSBiYXNlNjRjbGVhbihzdHIyKTsKICAgIHN0cjIgPSBzdHIyLnJlcGxhY2VBbGwoIi0iLCAiKyIpLnJlcGxhY2VBbGwoIl8iLCAiLyIpOwogICAgcmV0dXJuIGRlY29kZShzdHIyKTsKICB9CiAgdmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZzsKICBmdW5jdGlvbiBiYXNlNjRjbGVhbihzdHIyKSB7CiAgICBzdHIyID0gc3RyMi5zcGxpdCgiPSIpWzBdOwogICAgc3RyMiA9IHN0cjIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICIiKTsKICAgIGlmIChzdHIyLmxlbmd0aCA8IDIpCiAgICAgIHJldHVybiAiIjsKICAgIHdoaWxlIChzdHIyLmxlbmd0aCAlIDQgIT09IDApIHsKICAgICAgc3RyMiA9IHN0cjIgKyAiPSI7CiAgICB9CiAgICByZXR1cm4gc3RyMjsKICB9CiAgZnVuY3Rpb24gYmFzZTY0VXJsVG9CeXRlcyhzdHIyKSB7CiAgICBzdHIyID0gYmFzZTY0Y2xlYW4oc3RyMik7CiAgICBzdHIyID0gc3RyMi5yZXBsYWNlQWxsKCIrIiwgIi0iKS5yZXBsYWNlQWxsKCIvIiwgIl8iKTsKICAgIHJldHVybiBkZWNvZGUyKHN0cjIpOwogIH0KICBmdW5jdGlvbiBoZXhUb0J5dGVzKHN0cjIpIHsKICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KE1hdGguZmxvb3IoKHN0cjIgfHwgIiIpLmxlbmd0aCAvIDIpKTsKICAgIGxldCBpNDsKICAgIGZvciAoaTQgPSAwOyBpNCA8IGJ5dGVBcnJheS5sZW5ndGg7IGk0KyspIHsKICAgICAgY29uc3QgYTQgPSBOdW1iZXIucGFyc2VJbnQoc3RyMltpNCAqIDJdLCAxNik7CiAgICAgIGNvbnN0IGIyNSA9IE51bWJlci5wYXJzZUludChzdHIyW2k0ICogMiArIDFdLCAxNik7CiAgICAgIGlmIChOdW1iZXIuaXNOYU4oYTQpICYmIE51bWJlci5pc05hTihiMjUpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgYnl0ZUFycmF5W2k0XSA9IGE0IDw8IDQgfCBiMjU7CiAgICB9CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoCiAgICAgIGk0ID09PSBieXRlQXJyYXkubGVuZ3RoID8gYnl0ZUFycmF5IDogYnl0ZUFycmF5LnNsaWNlKDAsIGk0KQogICAgKTsKICB9CiAgZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMoc3RyMiwgdW5pdHMpIHsKICAgIGxldCBjMTcsIGhpMywgbG87CiAgICBjb25zdCBieXRlQXJyYXkgPSBbXTsKICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBzdHIyLmxlbmd0aDsgKytpNCkgewogICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGMxNyA9IHN0cjIuY2hhckNvZGVBdChpNCk7CiAgICAgIGhpMyA9IGMxNyA+PiA4OwogICAgICBsbyA9IGMxNyAlIDI1NjsKICAgICAgYnl0ZUFycmF5LnB1c2gobG8pOwogICAgICBieXRlQXJyYXkucHVzaChoaTMpOwogICAgfQogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVBcnJheSk7CiAgfQogIGZ1bmN0aW9uIGJ5dGVzVG9Bc2NpaShieXRlcykgewogICAgbGV0IHJldCA9ICIiOwogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGJ5dGVzLmxlbmd0aDsgKytpNCkgewogICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpNF0gJiAxMjcpOwogICAgfQogICAgcmV0dXJuIHJldDsKICB9CiAgZnVuY3Rpb24gYnl0ZXNUb1V0ZjE2bGUoYnl0ZXMpIHsKICAgIGxldCByZXMgPSAiIjsKICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBieXRlcy5sZW5ndGggLSAxOyBpNCArPSAyKSB7CiAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2k0XSArIGJ5dGVzW2k0ICsgMV0gKiAyNTYpOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9idWZmZXIubWpzCiAgdmFyIHV0ZjhFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7CiAgdmFyIGZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7CiAgdmFyIHVJbnQ4RmxvYXQzMkFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoZmxvYXQzMkFycmF5LmJ1ZmZlcik7CiAgdmFyIGZsb2F0NjRBcnJheSA9IG5ldyBGbG9hdDY0QXJyYXkoMSk7CiAgdmFyIHVJbnQ4RmxvYXQ2NEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoZmxvYXQ2NEFycmF5LmJ1ZmZlcik7CiAgZmxvYXQzMkFycmF5WzBdID0gLTE7CiAgdmFyIGJpZ0VuZGlhbiA9IHVJbnQ4RmxvYXQzMkFycmF5WzNdID09PSAwOwogIGZ1bmN0aW9uIHJlYWRVSW50NDhMRShidWYsIG9mZnNldCA9IDApIHsKICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgY29uc3QgZmlyc3QgPSBidWZbb2Zmc2V0XTsKICAgIGNvbnN0IGxhc3QgPSBidWZbb2Zmc2V0ICsgNV07CiAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHsKICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gNik7CiAgICB9CiAgICByZXR1cm4gZmlyc3QgKyBidWZbKytvZmZzZXRdICogMiAqKiA4ICsgYnVmWysrb2Zmc2V0XSAqIDIgKiogMTYgKyBidWZbKytvZmZzZXRdICogMiAqKiAyNCArIChidWZbKytvZmZzZXRdICsgbGFzdCAqIDIgKiogOCkgKiAyICoqIDMyOwogIH0KICBmdW5jdGlvbiByZWFkVUludDQwTEUoYnVmLCBvZmZzZXQgPSAwKSB7CiAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgIGNvbnN0IGZpcnN0ID0gYnVmW29mZnNldF07CiAgICBjb25zdCBsYXN0ID0gYnVmW29mZnNldCArIDRdOwogICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDUpOwogICAgfQogICAgcmV0dXJuIGZpcnN0ICsgYnVmWysrb2Zmc2V0XSAqIDIgKiogOCArIGJ1ZlsrK29mZnNldF0gKiAyICoqIDE2ICsgYnVmWysrb2Zmc2V0XSAqIDIgKiogMjQgKyBsYXN0ICogMiAqKiAzMjsKICB9CiAgZnVuY3Rpb24gcmVhZFVJbnQyNExFKGJ1Ziwgb2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IGJ1ZltvZmZzZXRdOwogICAgY29uc3QgbGFzdCA9IGJ1ZltvZmZzZXQgKyAyXTsKICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSAzKTsKICAgIH0KICAgIHJldHVybiBmaXJzdCArIGJ1ZlsrK29mZnNldF0gKiAyICoqIDggKyBsYXN0ICogMiAqKiAxNjsKICB9CiAgZnVuY3Rpb24gcmVhZFVJbnQ0OEJFKGJ1Ziwgb2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IGJ1ZltvZmZzZXRdOwogICAgY29uc3QgbGFzdCA9IGJ1ZltvZmZzZXQgKyA1XTsKICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSA2KTsKICAgIH0KICAgIHJldHVybiAoZmlyc3QgKiAyICoqIDggKyBidWZbKytvZmZzZXRdKSAqIDIgKiogMzIgKyBidWZbKytvZmZzZXRdICogMiAqKiAyNCArIGJ1ZlsrK29mZnNldF0gKiAyICoqIDE2ICsgYnVmWysrb2Zmc2V0XSAqIDIgKiogOCArIGxhc3Q7CiAgfQogIGZ1bmN0aW9uIHJlYWRVSW50NDBCRShidWYsIG9mZnNldCA9IDApIHsKICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgY29uc3QgZmlyc3QgPSBidWZbb2Zmc2V0XTsKICAgIGNvbnN0IGxhc3QgPSBidWZbb2Zmc2V0ICsgNF07CiAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHsKICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gNSk7CiAgICB9CiAgICByZXR1cm4gZmlyc3QgKiAyICoqIDMyICsgYnVmWysrb2Zmc2V0XSAqIDIgKiogMjQgKyBidWZbKytvZmZzZXRdICogMiAqKiAxNiArIGJ1ZlsrK29mZnNldF0gKiAyICoqIDggKyBsYXN0OwogIH0KICBmdW5jdGlvbiByZWFkVUludDI0QkUoYnVmLCBvZmZzZXQgPSAwKSB7CiAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgIGNvbnN0IGZpcnN0ID0gYnVmW29mZnNldF07CiAgICBjb25zdCBsYXN0ID0gYnVmW29mZnNldCArIDJdOwogICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDMpOwogICAgfQogICAgcmV0dXJuIGZpcnN0ICogMiAqKiAxNiArIGJ1ZlsrK29mZnNldF0gKiAyICoqIDggKyBsYXN0OwogIH0KICBmdW5jdGlvbiByZWFkVUludDE2QkUob2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTsKICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDFdOwogICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSAyKTsKICAgIH0KICAgIHJldHVybiBmaXJzdCAqIDIgKiogOCArIGxhc3Q7CiAgfQogIGZ1bmN0aW9uIHJlYWRVSW50MzJCRShvZmZzZXQgPSAwKSB7CiAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgM107CiAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHsKICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDQpOwogICAgfQogICAgcmV0dXJuIGZpcnN0ICogMiAqKiAyNCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgbGFzdDsKICB9CiAgZnVuY3Rpb24gcmVhZERvdWJsZUJhY2t3YXJkcyhidWZmZXIsIG9mZnNldCA9IDApIHsKICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgY29uc3QgZmlyc3QgPSBidWZmZXJbb2Zmc2V0XTsKICAgIGNvbnN0IGxhc3QgPSBidWZmZXJbb2Zmc2V0ICsgN107CiAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHsKICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWZmZXIubGVuZ3RoIC0gOCk7CiAgICB9CiAgICB1SW50OEZsb2F0NjRBcnJheVs3XSA9IGZpcnN0OwogICAgdUludDhGbG9hdDY0QXJyYXlbNl0gPSBidWZmZXJbKytvZmZzZXRdOwogICAgdUludDhGbG9hdDY0QXJyYXlbNV0gPSBidWZmZXJbKytvZmZzZXRdOwogICAgdUludDhGbG9hdDY0QXJyYXlbNF0gPSBidWZmZXJbKytvZmZzZXRdOwogICAgdUludDhGbG9hdDY0QXJyYXlbM10gPSBidWZmZXJbKytvZmZzZXRdOwogICAgdUludDhGbG9hdDY0QXJyYXlbMl0gPSBidWZmZXJbKytvZmZzZXRdOwogICAgdUludDhGbG9hdDY0QXJyYXlbMV0gPSBidWZmZXJbKytvZmZzZXRdOwogICAgdUludDhGbG9hdDY0QXJyYXlbMF0gPSBsYXN0OwogICAgcmV0dXJuIGZsb2F0NjRBcnJheVswXTsKICB9CiAgZnVuY3Rpb24gcmVhZERvdWJsZUZvcndhcmRzKGJ1ZmZlciwgb2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IGJ1ZmZlcltvZmZzZXRdOwogICAgY29uc3QgbGFzdCA9IGJ1ZmZlcltvZmZzZXQgKyA3XTsKICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1ZmZlci5sZW5ndGggLSA4KTsKICAgIH0KICAgIHVJbnQ4RmxvYXQ2NEFycmF5WzBdID0gZmlyc3Q7CiAgICB1SW50OEZsb2F0NjRBcnJheVsxXSA9IGJ1ZmZlclsrK29mZnNldF07CiAgICB1SW50OEZsb2F0NjRBcnJheVsyXSA9IGJ1ZmZlclsrK29mZnNldF07CiAgICB1SW50OEZsb2F0NjRBcnJheVszXSA9IGJ1ZmZlclsrK29mZnNldF07CiAgICB1SW50OEZsb2F0NjRBcnJheVs0XSA9IGJ1ZmZlclsrK29mZnNldF07CiAgICB1SW50OEZsb2F0NjRBcnJheVs1XSA9IGJ1ZmZlclsrK29mZnNldF07CiAgICB1SW50OEZsb2F0NjRBcnJheVs2XSA9IGJ1ZmZlclsrK29mZnNldF07CiAgICB1SW50OEZsb2F0NjRBcnJheVs3XSA9IGxhc3Q7CiAgICByZXR1cm4gZmxvYXQ2NEFycmF5WzBdOwogIH0KICBmdW5jdGlvbiB3cml0ZURvdWJsZUZvcndhcmRzKGJ1ZmZlciwgdmFsLCBvZmZzZXQgPSAwKSB7CiAgICB2YWwgPSArdmFsOwogICAgY2hlY2tCb3VuZHMoYnVmZmVyLCBvZmZzZXQsIDcpOwogICAgZmxvYXQ2NEFycmF5WzBdID0gdmFsOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzBdOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzFdOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzJdOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzNdOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzRdOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzVdOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzZdOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzddOwogICAgcmV0dXJuIG9mZnNldDsKICB9CiAgZnVuY3Rpb24gd3JpdGVEb3VibGVCYWNrd2FyZHMoYnVmZmVyLCB2YWwsIG9mZnNldCA9IDApIHsKICAgIHZhbCA9ICt2YWw7CiAgICBjaGVja0JvdW5kcyhidWZmZXIsIG9mZnNldCwgNyk7CiAgICBmbG9hdDY0QXJyYXlbMF0gPSB2YWw7CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbN107CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbNl07CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbNV07CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbNF07CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbM107CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbMl07CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbMV07CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbMF07CiAgICByZXR1cm4gb2Zmc2V0OwogIH0KICBmdW5jdGlvbiByZWFkRmxvYXRCYWNrd2FyZHMoYnVmZmVyLCBvZmZzZXQgPSAwKSB7CiAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgIGNvbnN0IGZpcnN0ID0gYnVmZmVyW29mZnNldF07CiAgICBjb25zdCBsYXN0ID0gYnVmZmVyW29mZnNldCArIDNdOwogICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmZmVyLmxlbmd0aCAtIDQpOwogICAgfQogICAgdUludDhGbG9hdDMyQXJyYXlbM10gPSBmaXJzdDsKICAgIHVJbnQ4RmxvYXQzMkFycmF5WzJdID0gYnVmZmVyWysrb2Zmc2V0XTsKICAgIHVJbnQ4RmxvYXQzMkFycmF5WzFdID0gYnVmZmVyWysrb2Zmc2V0XTsKICAgIHVJbnQ4RmxvYXQzMkFycmF5WzBdID0gbGFzdDsKICAgIHJldHVybiBmbG9hdDMyQXJyYXlbMF07CiAgfQogIGZ1bmN0aW9uIHJlYWRGbG9hdEZvcndhcmRzKGJ1ZmZlciwgb2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IGJ1ZmZlcltvZmZzZXRdOwogICAgY29uc3QgbGFzdCA9IGJ1ZmZlcltvZmZzZXQgKyAzXTsKICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1ZmZlci5sZW5ndGggLSA0KTsKICAgIH0KICAgIHVJbnQ4RmxvYXQzMkFycmF5WzBdID0gZmlyc3Q7CiAgICB1SW50OEZsb2F0MzJBcnJheVsxXSA9IGJ1ZmZlclsrK29mZnNldF07CiAgICB1SW50OEZsb2F0MzJBcnJheVsyXSA9IGJ1ZmZlclsrK29mZnNldF07CiAgICB1SW50OEZsb2F0MzJBcnJheVszXSA9IGxhc3Q7CiAgICByZXR1cm4gZmxvYXQzMkFycmF5WzBdOwogIH0KICBmdW5jdGlvbiB3cml0ZUZsb2F0Rm9yd2FyZHMoYnVmZmVyLCB2YWwsIG9mZnNldCA9IDApIHsKICAgIHZhbCA9ICt2YWw7CiAgICBjaGVja0JvdW5kcyhidWZmZXIsIG9mZnNldCwgMyk7CiAgICBmbG9hdDMyQXJyYXlbMF0gPSB2YWw7CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDMyQXJyYXlbMF07CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDMyQXJyYXlbMV07CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDMyQXJyYXlbMl07CiAgICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDMyQXJyYXlbM107CiAgICByZXR1cm4gb2Zmc2V0OwogIH0KICBmdW5jdGlvbiB3cml0ZUZsb2F0QmFja3dhcmRzKGJ1ZmZlciwgdmFsLCBvZmZzZXQgPSAwKSB7CiAgICB2YWwgPSArdmFsOwogICAgY2hlY2tCb3VuZHMoYnVmZmVyLCBvZmZzZXQsIDMpOwogICAgZmxvYXQzMkFycmF5WzBdID0gdmFsOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQzMkFycmF5WzNdOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQzMkFycmF5WzJdOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQzMkFycmF5WzFdOwogICAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQzMkFycmF5WzBdOwogICAgcmV0dXJuIG9mZnNldDsKICB9CiAgZnVuY3Rpb24gcmVhZEludDI0TEUoYnVmLCBvZmZzZXQgPSAwKSB7CiAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgIGNvbnN0IGZpcnN0ID0gYnVmW29mZnNldF07CiAgICBjb25zdCBsYXN0ID0gYnVmW29mZnNldCArIDJdOwogICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDMpOwogICAgfQogICAgY29uc3QgdmFsID0gZmlyc3QgKyBidWZbKytvZmZzZXRdICogMiAqKiA4ICsgbGFzdCAqIDIgKiogMTY7CiAgICByZXR1cm4gdmFsIHwgKHZhbCAmIDIgKiogMjMpICogNTEwOwogIH0KICBmdW5jdGlvbiByZWFkSW50NDBMRShidWYsIG9mZnNldCA9IDApIHsKICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgY29uc3QgZmlyc3QgPSBidWZbb2Zmc2V0XTsKICAgIGNvbnN0IGxhc3QgPSBidWZbb2Zmc2V0ICsgNF07CiAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHsKICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gNSk7CiAgICB9CiAgICByZXR1cm4gKGxhc3QgfCAobGFzdCAmIDIgKiogNykgKiAzMzU1NDQzMCkgKiAyICoqIDMyICsgZmlyc3QgKyBidWZbKytvZmZzZXRdICogMiAqKiA4ICsgYnVmWysrb2Zmc2V0XSAqIDIgKiogMTYgKyBidWZbKytvZmZzZXRdICogMiAqKiAyNDsKICB9CiAgZnVuY3Rpb24gcmVhZEludDQ4TEUoYnVmLCBvZmZzZXQgPSAwKSB7CiAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgIGNvbnN0IGZpcnN0ID0gYnVmW29mZnNldF07CiAgICBjb25zdCBsYXN0ID0gYnVmW29mZnNldCArIDVdOwogICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDYpOwogICAgfQogICAgY29uc3QgdmFsID0gYnVmW29mZnNldCArIDRdICsgbGFzdCAqIDIgKiogODsKICAgIHJldHVybiAodmFsIHwgKHZhbCAmIDIgKiogMTUpICogMTMxMDcwKSAqIDIgKiogMzIgKyBmaXJzdCArIGJ1ZlsrK29mZnNldF0gKiAyICoqIDggKyBidWZbKytvZmZzZXRdICogMiAqKiAxNiArIGJ1ZlsrK29mZnNldF0gKiAyICoqIDI0OwogIH0KICBmdW5jdGlvbiByZWFkSW50MjRCRShidWYsIG9mZnNldCA9IDApIHsKICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgY29uc3QgZmlyc3QgPSBidWZbb2Zmc2V0XTsKICAgIGNvbnN0IGxhc3QgPSBidWZbb2Zmc2V0ICsgMl07CiAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHsKICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gMyk7CiAgICB9CiAgICBjb25zdCB2YWwgPSBmaXJzdCAqIDIgKiogMTYgKyBidWZbKytvZmZzZXRdICogMiAqKiA4ICsgbGFzdDsKICAgIHJldHVybiB2YWwgfCAodmFsICYgMiAqKiAyMykgKiA1MTA7CiAgfQogIGZ1bmN0aW9uIHJlYWRJbnQ0OEJFKGJ1Ziwgb2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IGJ1ZltvZmZzZXRdOwogICAgY29uc3QgbGFzdCA9IGJ1ZltvZmZzZXQgKyA1XTsKICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSA2KTsKICAgIH0KICAgIGNvbnN0IHZhbCA9IGJ1ZlsrK29mZnNldF0gKyBmaXJzdCAqIDIgKiogODsKICAgIHJldHVybiAodmFsIHwgKHZhbCAmIDIgKiogMTUpICogMTMxMDcwKSAqIDIgKiogMzIgKyBidWZbKytvZmZzZXRdICogMiAqKiAyNCArIGJ1ZlsrK29mZnNldF0gKiAyICoqIDE2ICsgYnVmWysrb2Zmc2V0XSAqIDIgKiogOCArIGxhc3Q7CiAgfQogIGZ1bmN0aW9uIHJlYWRJbnQ0MEJFKGJ1Ziwgb2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IGJ1ZltvZmZzZXRdOwogICAgY29uc3QgbGFzdCA9IGJ1ZltvZmZzZXQgKyA0XTsKICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSA1KTsKICAgIH0KICAgIHJldHVybiAoZmlyc3QgfCAoZmlyc3QgJiAyICoqIDcpICogMzM1NTQ0MzApICogMiAqKiAzMiArIGJ1ZlsrK29mZnNldF0gKiAyICoqIDI0ICsgYnVmWysrb2Zmc2V0XSAqIDIgKiogMTYgKyBidWZbKytvZmZzZXRdICogMiAqKiA4ICsgbGFzdDsKICB9CiAgZnVuY3Rpb24gYnl0ZUxlbmd0aFV0Zjgoc3RyMikgewogICAgcmV0dXJuIHV0ZjhFbmNvZGVyLmVuY29kZShzdHIyKS5sZW5ndGg7CiAgfQogIGZ1bmN0aW9uIGJhc2U2NEJ5dGVMZW5ndGgoc3RyMiwgYnl0ZXMpIHsKICAgIGlmIChzdHIyLmNoYXJDb2RlQXQoYnl0ZXMgLSAxKSA9PT0gNjEpIHsKICAgICAgYnl0ZXMtLTsKICAgIH0KICAgIGlmIChieXRlcyA+IDEgJiYgc3RyMi5jaGFyQ29kZUF0KGJ5dGVzIC0gMSkgPT09IDYxKSB7CiAgICAgIGJ5dGVzLS07CiAgICB9CiAgICByZXR1cm4gYnl0ZXMgKiAzID4+PiAyOwogIH0KICB2YXIgZW5jb2RpbmdzTWFwID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGVuY29kaW5ncy5sZW5ndGg7ICsraTQpIHsKICAgIGVuY29kaW5nc01hcFtlbmNvZGluZ3NbaTRdXSA9IGk0OwogIH0KICB2YXIgZW5jb2RpbmdPcHMgPSB7CiAgICBhc2NpaTogewogICAgICBieXRlTGVuZ3RoOiAoc3RyaW5nKSA9PiBzdHJpbmcubGVuZ3RoLAogICAgICBlbmNvZGluZzogImFzY2lpIiwKICAgICAgZW5jb2RpbmdWYWw6IGVuY29kaW5nc01hcC5hc2NpaSwKICAgICAgaW5kZXhPZjogKGJ1ZiwgdmFsLCBieXRlT2Zmc2V0LCBkaXIpID0+IGluZGV4T2ZCdWZmZXIoCiAgICAgICAgYnVmLAogICAgICAgIGFzY2lpVG9CeXRlcyh2YWwpLAogICAgICAgIGJ5dGVPZmZzZXQsCiAgICAgICAgZW5jb2RpbmdzTWFwLmFzY2lpLAogICAgICAgIGRpcgogICAgICApLAogICAgICBzbGljZTogKGJ1Ziwgc3RhcnQsIGVuZCkgPT4gYnVmLmFzY2lpU2xpY2Uoc3RhcnQsIGVuZCksCiAgICAgIHdyaXRlOiAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuKSA9PiBidWYuYXNjaWlXcml0ZShzdHJpbmcsIG9mZnNldCwgbGVuKQogICAgfSwKICAgIGJhc2U2NDogewogICAgICBieXRlTGVuZ3RoOiAoc3RyaW5nKSA9PiBiYXNlNjRCeXRlTGVuZ3RoKHN0cmluZywgc3RyaW5nLmxlbmd0aCksCiAgICAgIGVuY29kaW5nOiAiYmFzZTY0IiwKICAgICAgZW5jb2RpbmdWYWw6IGVuY29kaW5nc01hcC5iYXNlNjQsCiAgICAgIGluZGV4T2Y6IChidWYsIHZhbCwgYnl0ZU9mZnNldCwgZGlyKSA9PiBpbmRleE9mQnVmZmVyKAogICAgICAgIGJ1ZiwKICAgICAgICBiYXNlNjRUb0J5dGVzKHZhbCksCiAgICAgICAgYnl0ZU9mZnNldCwKICAgICAgICBlbmNvZGluZ3NNYXAuYmFzZTY0LAogICAgICAgIGRpcgogICAgICApLAogICAgICBzbGljZTogKGJ1Ziwgc3RhcnQsIGVuZCkgPT4gYnVmLmJhc2U2NFNsaWNlKHN0YXJ0LCBlbmQpLAogICAgICB3cml0ZTogKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbikgPT4gYnVmLmJhc2U2NFdyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW4pCiAgICB9LAogICAgYmFzZTY0dXJsOiB7CiAgICAgIGJ5dGVMZW5ndGg6IChzdHJpbmcpID0+IGJhc2U2NEJ5dGVMZW5ndGgoc3RyaW5nLCBzdHJpbmcubGVuZ3RoKSwKICAgICAgZW5jb2Rpbmc6ICJiYXNlNjR1cmwiLAogICAgICBlbmNvZGluZ1ZhbDogZW5jb2RpbmdzTWFwLmJhc2U2NHVybCwKICAgICAgaW5kZXhPZjogKGJ1ZiwgdmFsLCBieXRlT2Zmc2V0LCBkaXIpID0+IGluZGV4T2ZCdWZmZXIoCiAgICAgICAgYnVmLAogICAgICAgIGJhc2U2NFVybFRvQnl0ZXModmFsKSwKICAgICAgICBieXRlT2Zmc2V0LAogICAgICAgIGVuY29kaW5nc01hcC5iYXNlNjR1cmwsCiAgICAgICAgZGlyCiAgICAgICksCiAgICAgIHNsaWNlOiAoYnVmLCBzdGFydCwgZW5kKSA9PiBidWYuYmFzZTY0dXJsU2xpY2Uoc3RhcnQsIGVuZCksCiAgICAgIHdyaXRlOiAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuKSA9PiBidWYuYmFzZTY0dXJsV3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbikKICAgIH0sCiAgICBoZXg6IHsKICAgICAgYnl0ZUxlbmd0aDogKHN0cmluZykgPT4gc3RyaW5nLmxlbmd0aCA+Pj4gMSwKICAgICAgZW5jb2Rpbmc6ICJoZXgiLAogICAgICBlbmNvZGluZ1ZhbDogZW5jb2RpbmdzTWFwLmhleCwKICAgICAgaW5kZXhPZjogKGJ1ZiwgdmFsLCBieXRlT2Zmc2V0LCBkaXIpID0+IGluZGV4T2ZCdWZmZXIoCiAgICAgICAgYnVmLAogICAgICAgIGhleFRvQnl0ZXModmFsKSwKICAgICAgICBieXRlT2Zmc2V0LAogICAgICAgIGVuY29kaW5nc01hcC5oZXgsCiAgICAgICAgZGlyCiAgICAgICksCiAgICAgIHNsaWNlOiAoYnVmLCBzdGFydCwgZW5kKSA9PiBidWYuaGV4U2xpY2Uoc3RhcnQsIGVuZCksCiAgICAgIHdyaXRlOiAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuKSA9PiBidWYuaGV4V3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbikKICAgIH0sCiAgICBsYXRpbjE6IHsKICAgICAgYnl0ZUxlbmd0aDogKHN0cmluZykgPT4gc3RyaW5nLmxlbmd0aCwKICAgICAgZW5jb2Rpbmc6ICJsYXRpbjEiLAogICAgICBlbmNvZGluZ1ZhbDogZW5jb2RpbmdzTWFwLmxhdGluMSwKICAgICAgaW5kZXhPZjogKGJ1ZiwgdmFsLCBieXRlT2Zmc2V0LCBkaXIpID0+IGluZGV4T2ZCdWZmZXIoCiAgICAgICAgYnVmLAogICAgICAgIGFzY2lpVG9CeXRlcyh2YWwpLAogICAgICAgIGJ5dGVPZmZzZXQsCiAgICAgICAgZW5jb2RpbmdzTWFwLmxhdGluMSwKICAgICAgICBkaXIKICAgICAgKSwKICAgICAgc2xpY2U6IChidWYsIHN0YXJ0LCBlbmQpID0+IGJ1Zi5sYXRpbjFTbGljZShzdGFydCwgZW5kKSwKICAgICAgd3JpdGU6IChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW4pID0+IGJ1Zi5sYXRpbjFXcml0ZShzdHJpbmcsIG9mZnNldCwgbGVuKQogICAgfSwKICAgIHVjczI6IHsKICAgICAgYnl0ZUxlbmd0aDogKHN0cmluZykgPT4gc3RyaW5nLmxlbmd0aCAqIDIsCiAgICAgIGVuY29kaW5nOiAidWNzMiIsCiAgICAgIGVuY29kaW5nVmFsOiBlbmNvZGluZ3NNYXAudXRmMTZsZSwKICAgICAgaW5kZXhPZjogKGJ1ZiwgdmFsLCBieXRlT2Zmc2V0LCBkaXIpID0+IGluZGV4T2ZCdWZmZXIoCiAgICAgICAgYnVmLAogICAgICAgIHV0ZjE2bGVUb0J5dGVzKHZhbCksCiAgICAgICAgYnl0ZU9mZnNldCwKICAgICAgICBlbmNvZGluZ3NNYXAudXRmMTZsZSwKICAgICAgICBkaXIKICAgICAgKSwKICAgICAgc2xpY2U6IChidWYsIHN0YXJ0LCBlbmQpID0+IGJ1Zi51Y3MyU2xpY2Uoc3RhcnQsIGVuZCksCiAgICAgIHdyaXRlOiAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuKSA9PiBidWYudWNzMldyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW4pCiAgICB9LAogICAgdXRmODogewogICAgICBieXRlTGVuZ3RoOiBieXRlTGVuZ3RoVXRmOCwKICAgICAgZW5jb2Rpbmc6ICJ1dGY4IiwKICAgICAgZW5jb2RpbmdWYWw6IGVuY29kaW5nc01hcC51dGY4LAogICAgICBpbmRleE9mOiAoYnVmLCB2YWwsIGJ5dGVPZmZzZXQsIGRpcikgPT4gaW5kZXhPZkJ1ZmZlcigKICAgICAgICBidWYsCiAgICAgICAgdXRmOEVuY29kZXIuZW5jb2RlKHZhbCksCiAgICAgICAgYnl0ZU9mZnNldCwKICAgICAgICBlbmNvZGluZ3NNYXAudXRmOCwKICAgICAgICBkaXIKICAgICAgKSwKICAgICAgc2xpY2U6IChidWYsIHN0YXJ0LCBlbmQpID0+IGJ1Zi51dGY4U2xpY2Uoc3RhcnQsIGVuZCksCiAgICAgIHdyaXRlOiAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuKSA9PiBidWYudXRmOFdyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW4pCiAgICB9LAogICAgdXRmMTZsZTogewogICAgICBieXRlTGVuZ3RoOiAoc3RyaW5nKSA9PiBzdHJpbmcubGVuZ3RoICogMiwKICAgICAgZW5jb2Rpbmc6ICJ1dGYxNmxlIiwKICAgICAgZW5jb2RpbmdWYWw6IGVuY29kaW5nc01hcC51dGYxNmxlLAogICAgICBpbmRleE9mOiAoYnVmLCB2YWwsIGJ5dGVPZmZzZXQsIGRpcikgPT4gaW5kZXhPZkJ1ZmZlcigKICAgICAgICBidWYsCiAgICAgICAgdXRmMTZsZVRvQnl0ZXModmFsKSwKICAgICAgICBieXRlT2Zmc2V0LAogICAgICAgIGVuY29kaW5nc01hcC51dGYxNmxlLAogICAgICAgIGRpcgogICAgICApLAogICAgICBzbGljZTogKGJ1Ziwgc3RhcnQsIGVuZCkgPT4gYnVmLnVjczJTbGljZShzdGFydCwgZW5kKSwKICAgICAgd3JpdGU6IChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW4pID0+IGJ1Zi51Y3MyV3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbikKICAgIH0KICB9OwogIGZ1bmN0aW9uIGdldEVuY29kaW5nT3BzKGVuY29kaW5nKSB7CiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKTsKICAgIHN3aXRjaCAoZW5jb2RpbmcubGVuZ3RoKSB7CiAgICAgIGNhc2UgNDoKICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1dGY4IikKICAgICAgICAgIHJldHVybiBlbmNvZGluZ09wcy51dGY4OwogICAgICAgIGlmIChlbmNvZGluZyA9PT0gInVjczIiKQogICAgICAgICAgcmV0dXJuIGVuY29kaW5nT3BzLnVjczI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNToKICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1dGYtOCIpCiAgICAgICAgICByZXR1cm4gZW5jb2RpbmdPcHMudXRmODsKICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICJhc2NpaSIpCiAgICAgICAgICByZXR1cm4gZW5jb2RpbmdPcHMuYXNjaWk7CiAgICAgICAgaWYgKGVuY29kaW5nID09PSAidWNzLTIiKQogICAgICAgICAgcmV0dXJuIGVuY29kaW5nT3BzLnVjczI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNzoKICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICJ1dGYxNmxlIikgewogICAgICAgICAgcmV0dXJuIGVuY29kaW5nT3BzLnV0ZjE2bGU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDg6CiAgICAgICAgaWYgKGVuY29kaW5nID09PSAidXRmLTE2bGUiKSB7CiAgICAgICAgICByZXR1cm4gZW5jb2RpbmdPcHMudXRmMTZsZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNjoKICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICJsYXRpbjEiIHx8IGVuY29kaW5nID09PSAiYmluYXJ5IikgewogICAgICAgICAgcmV0dXJuIGVuY29kaW5nT3BzLmxhdGluMTsKICAgICAgICB9CiAgICAgICAgaWYgKGVuY29kaW5nID09PSAiYmFzZTY0IikKICAgICAgICAgIHJldHVybiBlbmNvZGluZ09wcy5iYXNlNjQ7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICJoZXgiKSB7CiAgICAgICAgICByZXR1cm4gZW5jb2RpbmdPcHMuaGV4OwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSA5OgogICAgICAgIGlmIChlbmNvZGluZyA9PT0gImJhc2U2NHVybCIpIHsKICAgICAgICAgIHJldHVybiBlbmNvZGluZ09wcy5iYXNlNjR1cmw7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgfQogIH0KICBmdW5jdGlvbiBfY29weUFjdHVhbChzb3VyY2UsIHRhcmdldCwgdGFyZ2V0U3RhcnQsIHNvdXJjZVN0YXJ0LCBzb3VyY2VFbmQpIHsKICAgIGlmIChzb3VyY2VFbmQgLSBzb3VyY2VTdGFydCA+IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCkgewogICAgICBzb3VyY2VFbmQgPSBzb3VyY2VTdGFydCArIHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydDsKICAgIH0KICAgIGxldCBuYiA9IHNvdXJjZUVuZCAtIHNvdXJjZVN0YXJ0OwogICAgY29uc3Qgc291cmNlTGVuID0gc291cmNlLmxlbmd0aCAtIHNvdXJjZVN0YXJ0OwogICAgaWYgKG5iID4gc291cmNlTGVuKSB7CiAgICAgIG5iID0gc291cmNlTGVuOwogICAgfQogICAgaWYgKHNvdXJjZVN0YXJ0ICE9PSAwIHx8IHNvdXJjZUVuZCA8IHNvdXJjZS5sZW5ndGgpIHsKICAgICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoc291cmNlLmJ1ZmZlciwgc291cmNlLmJ5dGVPZmZzZXQgKyBzb3VyY2VTdGFydCwgbmIpOwogICAgfQogICAgdGFyZ2V0LnNldChzb3VyY2UsIHRhcmdldFN0YXJ0KTsKICAgIHJldHVybiBuYjsKICB9CiAgZnVuY3Rpb24gYm91bmRzRXJyb3IodmFsdWUsIGxlbmd0aCwgdHlwZSkgewogICAgaWYgKE1hdGguZmxvb3IodmFsdWUpICE9PSB2YWx1ZSkgewogICAgICB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgdHlwZSk7CiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgIm9mZnNldCIsICJhbiBpbnRlZ2VyIiwgdmFsdWUpOwogICAgfQogICAgaWYgKGxlbmd0aCA8IDApIHsKICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUygpOwogICAgfQogICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UoCiAgICAgIHR5cGUgfHwgIm9mZnNldCIsCiAgICAgIGA+PSAke3R5cGUgPyAxIDogMH0gYW5kIDw9ICR7bGVuZ3RofWAsCiAgICAgIHZhbHVlCiAgICApOwogIH0KICBmdW5jdGlvbiB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgbmFtZSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gIm51bWJlciIpIHsKICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICJudW1iZXIiLCB2YWx1ZSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGNoZWNrQm91bmRzKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoMikgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBpZiAoYnVmW29mZnNldF0gPT09IHZvaWQgMCB8fCBidWZbb2Zmc2V0ICsgYnl0ZUxlbmd0aDJdID09PSB2b2lkIDApIHsKICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gKGJ5dGVMZW5ndGgyICsgMSkpOwogICAgfQogIH0KICBmdW5jdGlvbiBjaGVja0ludCh2YWx1ZSwgbWluMiwgbWF4LCBidWYsIG9mZnNldCwgYnl0ZUxlbmd0aDIpIHsKICAgIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbjIpIHsKICAgICAgY29uc3QgbjggPSB0eXBlb2YgbWluMiA9PT0gImJpZ2ludCIgPyAibiIgOiAiIjsKICAgICAgbGV0IHJhbmdlOwogICAgICBpZiAoYnl0ZUxlbmd0aDIgPiAzKSB7CiAgICAgICAgaWYgKG1pbjIgPT09IDAgfHwgbWluMiA9PT0gMG4pIHsKICAgICAgICAgIHJhbmdlID0gYD49IDAke244fSBhbmQgPCAyJHtuOH0gKiogJHsoYnl0ZUxlbmd0aDIgKyAxKSAqIDh9JHtuOH1gOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByYW5nZSA9IGA+PSAtKDIke244fSAqKiAkeyhieXRlTGVuZ3RoMiArIDEpICogOCAtIDF9JHtuOH0pIGFuZCA8IDIke244fSAqKiAkeyhieXRlTGVuZ3RoMiArIDEpICogOCAtIDF9JHtuOH1gOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByYW5nZSA9IGA+PSAke21pbjJ9JHtuOH0gYW5kIDw9ICR7bWF4fSR7bjh9YDsKICAgICAgfQogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLCByYW5nZSwgdmFsdWUpOwogICAgfQogICAgY2hlY2tCb3VuZHMoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKTsKICB9CiAgZnVuY3Rpb24gdG9JbnRlZ2VyKG44LCBkZWZhdWx0VmFsKSB7CiAgICBuOCA9ICtuODsKICAgIGlmICghTnVtYmVyLmlzTmFOKG44KSAmJiBuOCA+PSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiAmJiBuOCA8PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgewogICAgICByZXR1cm4gbjggJSAxID09PSAwID8gbjggOiBNYXRoLmZsb29yKG44KTsKICAgIH0KICAgIHJldHVybiBkZWZhdWx0VmFsOwogIH0KICBmdW5jdGlvbiB3cml0ZVVfSW50OChidWYsIHZhbHVlLCBvZmZzZXQsIG1pbjIsIG1heCkgewogICAgdmFsdWUgPSArdmFsdWU7CiAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbjIpIHsKICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIiwgYD49ICR7bWluMn0gYW5kIDw9ICR7bWF4fWAsIHZhbHVlKTsKICAgIH0KICAgIGlmIChidWZbb2Zmc2V0XSA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDEpOwogICAgfQogICAgYnVmW29mZnNldF0gPSB2YWx1ZTsKICAgIHJldHVybiBvZmZzZXQgKyAxOwogIH0KICBmdW5jdGlvbiB3cml0ZVVfSW50MTZCRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbjIsIG1heCkgewogICAgdmFsdWUgPSArdmFsdWU7CiAgICBjaGVja0ludCh2YWx1ZSwgbWluMiwgbWF4LCBidWYsIG9mZnNldCwgMSk7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7CiAgICByZXR1cm4gb2Zmc2V0OwogIH0KICBmdW5jdGlvbiBfd3JpdGVVSW50MzJMRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbjIsIG1heCkgewogICAgdmFsdWUgPSArdmFsdWU7CiAgICBjaGVja0ludCh2YWx1ZSwgbWluMiwgbWF4LCBidWYsIG9mZnNldCwgMyk7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7CiAgICB2YWx1ZSA9IHZhbHVlID4+PiA4OwogICAgYnVmW29mZnNldCsrXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTsKICAgIHZhbHVlID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7CiAgICByZXR1cm4gb2Zmc2V0OwogIH0KICBmdW5jdGlvbiB3cml0ZVVfSW50MTZMRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbjIsIG1heCkgewogICAgdmFsdWUgPSArdmFsdWU7CiAgICBjaGVja0ludCh2YWx1ZSwgbWluMiwgbWF4LCBidWYsIG9mZnNldCwgMSk7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWUgPj4+IDg7CiAgICByZXR1cm4gb2Zmc2V0OwogIH0KICBmdW5jdGlvbiBfd3JpdGVVSW50MzJCRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbjIsIG1heCkgewogICAgdmFsdWUgPSArdmFsdWU7CiAgICBjaGVja0ludCh2YWx1ZSwgbWluMiwgbWF4LCBidWYsIG9mZnNldCwgMyk7CiAgICBidWZbb2Zmc2V0ICsgM10gPSB2YWx1ZTsKICAgIHZhbHVlID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0ICsgMl0gPSB2YWx1ZTsKICAgIHZhbHVlID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0ICsgMV0gPSB2YWx1ZTsKICAgIHZhbHVlID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0XSA9IHZhbHVlOwogICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgfQogIGZ1bmN0aW9uIHdyaXRlVV9JbnQ0OEJFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluMiwgbWF4KSB7CiAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgIGNoZWNrSW50KHZhbHVlLCBtaW4yLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA1KTsKICAgIGNvbnN0IG5ld1ZhbCA9IE1hdGguZmxvb3IodmFsdWUgKiAyICoqIC0zMik7CiAgICBidWZbb2Zmc2V0KytdID0gbmV3VmFsID4+PiA4OwogICAgYnVmW29mZnNldCsrXSA9IG5ld1ZhbDsKICAgIGJ1ZltvZmZzZXQgKyAzXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXQgKyAyXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXQgKyAxXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXRdID0gdmFsdWU7CiAgICByZXR1cm4gb2Zmc2V0ICsgNDsKICB9CiAgZnVuY3Rpb24gd3JpdGVVX0ludDQwQkUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4yLCBtYXgpIHsKICAgIHZhbHVlID0gK3ZhbHVlOwogICAgY2hlY2tJbnQodmFsdWUsIG1pbjIsIG1heCwgYnVmLCBvZmZzZXQsIDQpOwogICAgYnVmW29mZnNldCsrXSA9IE1hdGguZmxvb3IodmFsdWUgKiAyICoqIC0zMik7CiAgICBidWZbb2Zmc2V0ICsgM10gPSB2YWx1ZTsKICAgIHZhbHVlID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0ICsgMl0gPSB2YWx1ZTsKICAgIHZhbHVlID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0ICsgMV0gPSB2YWx1ZTsKICAgIHZhbHVlID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0XSA9IHZhbHVlOwogICAgcmV0dXJuIG9mZnNldCArIDQ7CiAgfQogIGZ1bmN0aW9uIHdyaXRlVV9JbnQzMkJFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluMiwgbWF4KSB7CiAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgIGNoZWNrSW50KHZhbHVlLCBtaW4yLCBtYXgsIGJ1Ziwgb2Zmc2V0LCAzKTsKICAgIGJ1ZltvZmZzZXQgKyAzXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXQgKyAyXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXQgKyAxXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXRdID0gdmFsdWU7CiAgICByZXR1cm4gb2Zmc2V0ICsgNDsKICB9CiAgZnVuY3Rpb24gd3JpdGVVX0ludDI0QkUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4yLCBtYXgpIHsKICAgIHZhbHVlID0gK3ZhbHVlOwogICAgY2hlY2tJbnQodmFsdWUsIG1pbjIsIG1heCwgYnVmLCBvZmZzZXQsIDIpOwogICAgYnVmW29mZnNldCArIDJdID0gdmFsdWU7CiAgICB2YWx1ZSA9IHZhbHVlID4+PiA4OwogICAgYnVmW29mZnNldCArIDFdID0gdmFsdWU7CiAgICB2YWx1ZSA9IHZhbHVlID4+PiA4OwogICAgYnVmW29mZnNldF0gPSB2YWx1ZTsKICAgIHJldHVybiBvZmZzZXQgKyAzOwogIH0KICBmdW5jdGlvbiB2YWxpZGF0ZU9mZnNldCh2YWx1ZSwgbmFtZSwgbWluMiA9IDAsIG1heCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAibnVtYmVyIikgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgIm51bWJlciIsIHZhbHVlKTsKICAgIH0KICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHsKICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgImFuIGludGVnZXIiLCB2YWx1ZSk7CiAgICB9CiAgICBpZiAodmFsdWUgPCBtaW4yIHx8IHZhbHVlID4gbWF4KSB7CiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKG5hbWUsIGA+PSAke21pbjJ9ICYmIDw9ICR7bWF4fWAsIHZhbHVlKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gd3JpdGVVX0ludDQ4TEUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4yLCBtYXgpIHsKICAgIHZhbHVlID0gK3ZhbHVlOwogICAgY2hlY2tJbnQodmFsdWUsIG1pbjIsIG1heCwgYnVmLCBvZmZzZXQsIDUpOwogICAgY29uc3QgbmV3VmFsID0gTWF0aC5mbG9vcih2YWx1ZSAqIDIgKiogLTMyKTsKICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTsKICAgIHZhbHVlID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7CiAgICB2YWx1ZSA9IHZhbHVlID4+PiA4OwogICAgYnVmW29mZnNldCsrXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTsKICAgIGJ1ZltvZmZzZXQrK10gPSBuZXdWYWw7CiAgICBidWZbb2Zmc2V0KytdID0gbmV3VmFsID4+PiA4OwogICAgcmV0dXJuIG9mZnNldDsKICB9CiAgZnVuY3Rpb24gd3JpdGVVX0ludDQwTEUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4yLCBtYXgpIHsKICAgIHZhbHVlID0gK3ZhbHVlOwogICAgY2hlY2tJbnQodmFsdWUsIG1pbjIsIG1heCwgYnVmLCBvZmZzZXQsIDQpOwogICAgY29uc3QgbmV3VmFsID0gdmFsdWU7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7CiAgICB2YWx1ZSA9IHZhbHVlID4+PiA4OwogICAgYnVmW29mZnNldCsrXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTsKICAgIHZhbHVlID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7CiAgICBidWZbb2Zmc2V0KytdID0gTWF0aC5mbG9vcihuZXdWYWwgKiAyICoqIC0zMik7CiAgICByZXR1cm4gb2Zmc2V0OwogIH0KICBmdW5jdGlvbiB3cml0ZVVfSW50MzJMRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbjIsIG1heCkgewogICAgdmFsdWUgPSArdmFsdWU7CiAgICBjaGVja0ludCh2YWx1ZSwgbWluMiwgbWF4LCBidWYsIG9mZnNldCwgMyk7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7CiAgICB2YWx1ZSA9IHZhbHVlID4+PiA4OwogICAgYnVmW29mZnNldCsrXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTsKICAgIHZhbHVlID0gdmFsdWUgPj4+IDg7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7CiAgICByZXR1cm4gb2Zmc2V0OwogIH0KICBmdW5jdGlvbiB3cml0ZVVfSW50MjRMRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbjIsIG1heCkgewogICAgdmFsdWUgPSArdmFsdWU7CiAgICBjaGVja0ludCh2YWx1ZSwgbWluMiwgbWF4LCBidWYsIG9mZnNldCwgMik7CiAgICBidWZbb2Zmc2V0KytdID0gdmFsdWU7CiAgICB2YWx1ZSA9IHZhbHVlID4+PiA4OwogICAgYnVmW29mZnNldCsrXSA9IHZhbHVlOwogICAgdmFsdWUgPSB2YWx1ZSA+Pj4gODsKICAgIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTsKICAgIHJldHVybiBvZmZzZXQ7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvX2J1ZmZlci5tanMKICB2YXIga01heExlbmd0aCA9IDIxNDc0ODM2NDc7CiAgdmFyIE1BWF9VSU5UMzIgPSAyICoqIDMyOwogIHZhciBjdXN0b21JbnNwZWN0U3ltYm9sMyA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbFsiZm9yIl0gPT09ICJmdW5jdGlvbiIgPyBTeW1ib2xbImZvciJdKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpIDogbnVsbDsKICB2YXIgSU5TUEVDVF9NQVhfQllURVMgPSA1MDsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyNC5wcm90b3R5cGUsICJwYXJlbnQiLCB7CiAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgaWYgKCFCdWZmZXI0LmlzQnVmZmVyKHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5idWZmZXI7CiAgICB9CiAgfSk7CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlcjQucHJvdG90eXBlLCAib2Zmc2V0IiwgewogICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgIGlmICghQnVmZmVyNC5pc0J1ZmZlcih0aGlzKSkgewogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuYnl0ZU9mZnNldDsKICAgIH0KICB9KTsKICBmdW5jdGlvbiBjcmVhdGVCdWZmZXIobGVuZ3RoKSB7CiAgICBpZiAobGVuZ3RoID4ga01heExlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigKICAgICAgICAnVGhlIHZhbHVlICInICsgbGVuZ3RoICsgJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicKICAgICAgKTsKICAgIH0KICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7CiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXI0LnByb3RvdHlwZSk7CiAgICByZXR1cm4gYnVmOwogIH0KICBmdW5jdGlvbiBCdWZmZXI0KGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7CiAgICBpZiAodHlwZW9mIGFyZyA9PT0gIm51bWJlciIpIHsKICAgICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSgKICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICBhcmcKICAgICAgICApOwogICAgICB9CiAgICAgIHJldHVybiBfYWxsb2NVbnNhZmUoYXJnKTsKICAgIH0KICAgIHJldHVybiBfZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7CiAgfQogIEJ1ZmZlcjQucG9vbFNpemUgPSA4MTkyOwogIGZ1bmN0aW9uIF9mcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KTsKICAgIH0KICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJvYmplY3QiICYmIHZhbHVlICE9PSBudWxsKSB7CiAgICAgIGlmIChpc0FueUFycmF5QnVmZmVyMih2YWx1ZSkpIHsKICAgICAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpOwogICAgICB9CiAgICAgIGNvbnN0IHZhbHVlT2YgPSB2YWx1ZS52YWx1ZU9mICYmIHZhbHVlLnZhbHVlT2YoKTsKICAgICAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSAmJiAodHlwZW9mIHZhbHVlT2YgPT09ICJzdHJpbmciIHx8IHR5cGVvZiB2YWx1ZU9mID09PSAib2JqZWN0IikpIHsKICAgICAgICByZXR1cm4gX2Zyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgICBjb25zdCBiMjUgPSBmcm9tT2JqZWN0KHZhbHVlKTsKICAgICAgaWYgKGIyNSkgewogICAgICAgIHJldHVybiBiMjU7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgY29uc3QgcHJpbWl0aXZlID0gdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5nIik7CiAgICAgICAgaWYgKHR5cGVvZiBwcmltaXRpdmUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXR1cm4gZnJvbVN0cmluZyhwcmltaXRpdmUsIGVuY29kaW5nT3JPZmZzZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKAogICAgICAiZmlyc3QgYXJndW1lbnQiLAogICAgICBbInN0cmluZyIsICJCdWZmZXIiLCAiQXJyYXlCdWZmZXIiLCAiQXJyYXkiLCAiQXJyYXktbGlrZSBPYmplY3QiXSwKICAgICAgdmFsdWUKICAgICk7CiAgfQogIEJ1ZmZlcjQuZnJvbSA9IGZ1bmN0aW9uIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkgewogICAgcmV0dXJuIF9mcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpOwogIH07CiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlcjQucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSk7CiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlcjQsIFVpbnQ4QXJyYXkpOwogIGZ1bmN0aW9uIGFzc2VydFNpemUoc2l6ZSkgewogICAgdmFsaWRhdGVOdW1iZXIoc2l6ZSwgInNpemUiKTsKICAgIGlmICghKHNpemUgPj0gMCAmJiBzaXplIDw9IGtNYXhMZW5ndGgpKSB7CiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVkFMVUUuUmFuZ2VFcnJvcigic2l6ZSIsIHNpemUpOwogICAgfQogIH0KICBmdW5jdGlvbiBfYWxsb2Moc2l6ZSwgZmlsbDIsIGVuY29kaW5nKSB7CiAgICBhc3NlcnRTaXplKHNpemUpOwogICAgY29uc3QgYnVmZmVyID0gY3JlYXRlQnVmZmVyKHNpemUpOwogICAgaWYgKGZpbGwyICE9PSB2b2lkIDApIHsKICAgICAgaWYgKGVuY29kaW5nICE9PSB2b2lkIDAgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAic3RyaW5nIikgewogICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSgKICAgICAgICAgICJlbmNvZGluZyIsCiAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgIGVuY29kaW5nCiAgICAgICAgKTsKICAgICAgfQogICAgICByZXR1cm4gYnVmZmVyLmZpbGwoZmlsbDIsIGVuY29kaW5nKTsKICAgIH0KICAgIHJldHVybiBidWZmZXI7CiAgfQogIEJ1ZmZlcjQuYWxsb2MgPSBmdW5jdGlvbiBhbGxvYyhzaXplLCBmaWxsMiwgZW5jb2RpbmcpIHsKICAgIHJldHVybiBfYWxsb2Moc2l6ZSwgZmlsbDIsIGVuY29kaW5nKTsKICB9OwogIGZ1bmN0aW9uIF9hbGxvY1Vuc2FmZShzaXplKSB7CiAgICBhc3NlcnRTaXplKHNpemUpOwogICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMCk7CiAgfQogIEJ1ZmZlcjQuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiBhbGxvY1Vuc2FmZShzaXplKSB7CiAgICByZXR1cm4gX2FsbG9jVW5zYWZlKHNpemUpOwogIH07CiAgQnVmZmVyNC5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiBhbGxvY1Vuc2FmZVNsb3coc2l6ZSkgewogICAgcmV0dXJuIF9hbGxvY1Vuc2FmZShzaXplKTsKICB9OwogIGZ1bmN0aW9uIGZyb21TdHJpbmcoc3RyaW5nLCBlbmNvZGluZykgewogICAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gInN0cmluZyIgfHwgZW5jb2RpbmcgPT09ICIiKSB7CiAgICAgIGVuY29kaW5nID0gInV0ZjgiOwogICAgfQogICAgaWYgKCFCdWZmZXI0LmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7CiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfVU5LTk9XTl9FTkNPRElORyhlbmNvZGluZyk7CiAgICB9CiAgICBjb25zdCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMDsKICAgIGxldCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKTsKICAgIGNvbnN0IGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKTsKICAgIGlmIChhY3R1YWwgIT09IGxlbmd0aCkgewogICAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKTsKICAgIH0KICAgIHJldHVybiBidWY7CiAgfQogIGZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHsKICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMDsKICAgIGNvbnN0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpOwogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGxlbmd0aDsgaTQgKz0gMSkgewogICAgICBidWZbaTRdID0gYXJyYXlbaTRdICYgMjU1OwogICAgfQogICAgcmV0dXJuIGJ1ZjsKICB9CiAgZnVuY3Rpb24gZnJvbU9iamVjdChvYmopIHsKICAgIGlmIChvYmoubGVuZ3RoICE9PSB2b2lkIDAgfHwgaXNBbnlBcnJheUJ1ZmZlcjIob2JqLmJ1ZmZlcikpIHsKICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAibnVtYmVyIikgewogICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKTsKICAgIH0KICAgIGlmIChvYmoudHlwZSA9PT0gIkJ1ZmZlciIgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHsKICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpOwogICAgfQogIH0KICBmdW5jdGlvbiBjaGVja2VkKGxlbmd0aCkgewogICAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IiArIGtNYXhMZW5ndGgudG9TdHJpbmcoMTYpICsgIiBieXRlcyIKICAgICAgKTsKICAgIH0KICAgIHJldHVybiBsZW5ndGggfCAwOwogIH0KICBmdW5jdGlvbiBTbG93QnVmZmVyKGxlbmd0aCkgewogICAgYXNzZXJ0U2l6ZShsZW5ndGgpOwogICAgcmV0dXJuIEJ1ZmZlcjQuYWxsb2MoK2xlbmd0aCk7CiAgfQogIE9iamVjdC5zZXRQcm90b3R5cGVPZihTbG93QnVmZmVyLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpOwogIE9iamVjdC5zZXRQcm90b3R5cGVPZihTbG93QnVmZmVyLCBVaW50OEFycmF5KTsKICBCdWZmZXI0LmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIoYjI1KSB7CiAgICByZXR1cm4gYjI1ICE9IG51bGwgJiYgYjI1Ll9pc0J1ZmZlciA9PT0gdHJ1ZSAmJiBiMjUgIT09IEJ1ZmZlcjQucHJvdG90eXBlOwogIH07CiAgQnVmZmVyNC5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShhNCwgYjI1KSB7CiAgICBpZiAoaXNJbnN0YW5jZShhNCwgVWludDhBcnJheSkpIHsKICAgICAgYTQgPSBCdWZmZXI0LmZyb20oYTQsIGE0Lm9mZnNldCwgYTQuYnl0ZUxlbmd0aCk7CiAgICB9CiAgICBpZiAoaXNJbnN0YW5jZShiMjUsIFVpbnQ4QXJyYXkpKSB7CiAgICAgIGIyNSA9IEJ1ZmZlcjQuZnJvbShiMjUsIGIyNS5vZmZzZXQsIGIyNS5ieXRlTGVuZ3RoKTsKICAgIH0KICAgIGlmICghQnVmZmVyNC5pc0J1ZmZlcihhNCkgfHwgIUJ1ZmZlcjQuaXNCdWZmZXIoYjI1KSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknCiAgICAgICk7CiAgICB9CiAgICBpZiAoYTQgPT09IGIyNSkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGxldCB4MjEgPSBhNC5sZW5ndGg7CiAgICBsZXQgeTE3ID0gYjI1Lmxlbmd0aDsKICAgIGZvciAobGV0IGk0ID0gMCwgbGVuID0gTWF0aC5taW4oeDIxLCB5MTcpOyBpNCA8IGxlbjsgKytpNCkgewogICAgICBpZiAoYTRbaTRdICE9PSBiMjVbaTRdKSB7CiAgICAgICAgeDIxID0gYTRbaTRdOwogICAgICAgIHkxNyA9IGIyNVtpNF07CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICh4MjEgPCB5MTcpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgaWYgKHkxNyA8IHgyMSkgewogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH07CiAgQnVmZmVyNC5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyhlbmNvZGluZykgewogICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gInN0cmluZyIgJiYgZW5jb2RpbmcubGVuZ3RoICE9PSAwICYmIG5vcm1hbGl6ZUVuY29kaW5nMihlbmNvZGluZykgIT09IHZvaWQgMDsKICB9OwogIEJ1ZmZlcjQuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0MyhsaXN0LCBsZW5ndGgpIHsKICAgIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoImxpc3QiLCAiQXJyYXkiLCBsaXN0KTsKICAgIH0KICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gQnVmZmVyNC5hbGxvYygwKTsKICAgIH0KICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewogICAgICBsZW5ndGggPSAwOwogICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgbGlzdC5sZW5ndGg7IGk0KyspIHsKICAgICAgICBpZiAobGlzdFtpNF0ubGVuZ3RoKSB7CiAgICAgICAgICBsZW5ndGggKz0gbGlzdFtpNF0ubGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdmFsaWRhdGVPZmZzZXQobGVuZ3RoLCAibGVuZ3RoIik7CiAgICB9CiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXI0LmFsbG9jVW5zYWZlKGxlbmd0aCk7CiAgICBsZXQgcG9zID0gMDsKICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBsaXN0Lmxlbmd0aDsgaTQrKykgewogICAgICBjb25zdCBidWYgPSBsaXN0W2k0XTsKICAgICAgaWYgKCFpc1VpbnQ4QXJyYXkoYnVmKSkgewogICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSgKICAgICAgICAgIGBsaXN0WyR7aTR9XWAsCiAgICAgICAgICBbIkJ1ZmZlciIsICJVaW50OEFycmF5Il0sCiAgICAgICAgICBsaXN0W2k0XQogICAgICAgICk7CiAgICAgIH0KICAgICAgcG9zICs9IF9jb3B5QWN0dWFsKGJ1ZiwgYnVmZmVyLCBwb3MsIDAsIGJ1Zi5sZW5ndGgpOwogICAgfQogICAgaWYgKHBvcyA8IGxlbmd0aCkgewogICAgICBidWZmZXIuZmlsbCgwLCBwb3MsIGxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyOwogIH07CiAgZnVuY3Rpb24gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB7CiAgICBpZiAodHlwZW9mIHN0cmluZyAhPT0gInN0cmluZyIpIHsKICAgICAgaWYgKGlzQXJyYXlCdWZmZXJWaWV3KHN0cmluZykgfHwgaXNBbnlBcnJheUJ1ZmZlcjIoc3RyaW5nKSkgewogICAgICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aDsKICAgICAgfQogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgWyJzdHJpbmciLCAiQnVmZmVyIiwgIkFycmF5QnVmZmVyIl0sCiAgICAgICAgc3RyaW5nCiAgICAgICk7CiAgICB9CiAgICBjb25zdCBsZW4gPSBzdHJpbmcubGVuZ3RoOwogICAgY29uc3QgbXVzdE1hdGNoID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlOwogICAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgaWYgKCFlbmNvZGluZykgewogICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiBieXRlTGVuZ3RoVXRmOChzdHJpbmcpOwogICAgfQogICAgY29uc3Qgb3BzID0gZ2V0RW5jb2RpbmdPcHMoZW5jb2RpbmcpOwogICAgaWYgKG9wcyA9PT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBtdXN0TWF0Y2ggPyAtMSA6IGJ5dGVMZW5ndGhVdGY4KHN0cmluZyk7CiAgICB9CiAgICByZXR1cm4gb3BzLmJ5dGVMZW5ndGgoc3RyaW5nKTsKICB9CiAgQnVmZmVyNC5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDsKICBCdWZmZXI0LnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlOwogIGZ1bmN0aW9uIHN3YXAoYjI1LCBuOCwgbTIzKSB7CiAgICBjb25zdCBpNCA9IGIyNVtuOF07CiAgICBiMjVbbjhdID0gYjI1W20yM107CiAgICBiMjVbbTIzXSA9IGk0OwogIH0KICBCdWZmZXI0LnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYoKSB7CiAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW4gJSAyICE9PSAwKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpOwogICAgfQogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGxlbjsgaTQgKz0gMikgewogICAgICBzd2FwKHRoaXMsIGk0LCBpNCArIDEpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIoKSB7CiAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW4gJSA0ICE9PSAwKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpOwogICAgfQogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGxlbjsgaTQgKz0gNCkgewogICAgICBzd2FwKHRoaXMsIGk0LCBpNCArIDMpOwogICAgICBzd2FwKHRoaXMsIGk0ICsgMSwgaTQgKyAyKTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0KCkgewogICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuICUgOCAhPT0gMCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTsKICAgIH0KICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBsZW47IGk0ICs9IDgpIHsKICAgICAgc3dhcCh0aGlzLCBpNCwgaTQgKyA3KTsKICAgICAgc3dhcCh0aGlzLCBpNCArIDEsIGk0ICsgNik7CiAgICAgIHN3YXAodGhpcywgaTQgKyAyLCBpNCArIDUpOwogICAgICBzd2FwKHRoaXMsIGk0ICsgMywgaTQgKyA0KTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGluZywgc3RhcnQsIGVuZCkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHRoaXMudXRmOFNsaWNlKDAsIHRoaXMubGVuZ3RoKTsKICAgIH0KICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaWYgKHN0YXJ0IDw9IDApIHsKICAgICAgc3RhcnQgPSAwOwogICAgfSBlbHNlIGlmIChzdGFydCA+PSBsZW4pIHsKICAgICAgcmV0dXJuICIiOwogICAgfSBlbHNlIHsKICAgICAgc3RhcnQgfD0gMDsKICAgIH0KICAgIGlmIChlbmQgPT09IHZvaWQgMCB8fCBlbmQgPiBsZW4pIHsKICAgICAgZW5kID0gbGVuOwogICAgfSBlbHNlIHsKICAgICAgZW5kIHw9IDA7CiAgICB9CiAgICBpZiAoZW5kIDw9IHN0YXJ0KSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGlmIChlbmNvZGluZyA9PT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiB0aGlzLnV0ZjhTbGljZShzdGFydCwgZW5kKTsKICAgIH0KICAgIGNvbnN0IG9wcyA9IGdldEVuY29kaW5nT3BzKGVuY29kaW5nKTsKICAgIGlmIChvcHMgPT09IHZvaWQgMCkgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpOwogICAgfQogICAgcmV0dXJuIG9wcy5zbGljZSh0aGlzLCBzdGFydCwgZW5kKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gQnVmZmVyNC5wcm90b3R5cGUudG9TdHJpbmc7CiAgQnVmZmVyNC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzMyhiMjUpIHsKICAgIGlmICghaXNVaW50OEFycmF5KGIyNSkpIHsKICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKAogICAgICAgICJvdGhlckJ1ZmZlciIsCiAgICAgICAgWyJCdWZmZXIiLCAiVWludDhBcnJheSJdLAogICAgICAgIGIyNQogICAgICApOwogICAgfQogICAgaWYgKHRoaXMgPT09IGIyNSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBCdWZmZXI0LmNvbXBhcmUodGhpcywgYjI1KSA9PT0gMDsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0MigpIHsKICAgIGxldCBzdHIyID0gIiI7CiAgICBjb25zdCBtYXggPSBJTlNQRUNUX01BWF9CWVRFUzsKICAgIHN0cjIgPSB0aGlzLnRvU3RyaW5nKCJoZXgiLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAiJDEgIikudHJpbSgpOwogICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSB7CiAgICAgIHN0cjIgKz0gIiAuLi4gIjsKICAgIH0KICAgIHJldHVybiAiPEJ1ZmZlciAiICsgc3RyMiArICI+IjsKICB9OwogIGlmIChjdXN0b21JbnNwZWN0U3ltYm9sMykgewogICAgQnVmZmVyNC5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbDNdID0gQnVmZmVyNC5wcm90b3R5cGUuaW5zcGVjdDsKICB9CiAgQnVmZmVyNC5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUyKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7CiAgICBpZiAoaXNJbnN0YW5jZSh0YXJnZXQsIFVpbnQ4QXJyYXkpKSB7CiAgICAgIHRhcmdldCA9IEJ1ZmZlcjQuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKTsKICAgIH0KICAgIGlmICghQnVmZmVyNC5pc0J1ZmZlcih0YXJnZXQpKSB7CiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSgKICAgICAgICAidGFyZ2V0IiwKICAgICAgICBbIkJ1ZmZlciIsICJVaW50OEFycmF5Il0sCiAgICAgICAgdGFyZ2V0CiAgICAgICk7CiAgICB9CiAgICBpZiAoc3RhcnQgPT09IHZvaWQgMCkgewogICAgICBzdGFydCA9IDA7CiAgICB9IGVsc2UgewogICAgICB2YWxpZGF0ZU9mZnNldChzdGFydCwgInRhcmdldFN0YXJ0IiwgMCwga01heExlbmd0aCk7CiAgICB9CiAgICBpZiAoZW5kID09PSB2b2lkIDApIHsKICAgICAgZW5kID0gdGFyZ2V0Lmxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIHZhbGlkYXRlT2Zmc2V0KGVuZCwgInRhcmdldEVuZCIsIDAsIHRhcmdldC5sZW5ndGgpOwogICAgfQogICAgaWYgKHRoaXNTdGFydCA9PT0gdm9pZCAwKSB7CiAgICAgIHRoaXNTdGFydCA9IDA7CiAgICB9IGVsc2UgewogICAgICB2YWxpZGF0ZU9mZnNldChzdGFydCwgInNvdXJjZVN0YXJ0IiwgMCwga01heExlbmd0aCk7CiAgICB9CiAgICBpZiAodGhpc0VuZCA9PT0gdm9pZCAwKSB7CiAgICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aDsKICAgIH0gZWxzZSB7CiAgICAgIHZhbGlkYXRlT2Zmc2V0KGVuZCwgInNvdXJjZUVuZCIsIDAsIHRoaXMubGVuZ3RoKTsKICAgIH0KICAgIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRSgib3V0IG9mIHJhbmdlIGluZGV4IiwgInJhbmdlIik7CiAgICB9CiAgICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGlmIChzdGFydCA+PSBlbmQpIHsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBzdGFydCA+Pj49IDA7CiAgICBlbmQgPj4+PSAwOwogICAgdGhpc1N0YXJ0ID4+Pj0gMDsKICAgIHRoaXNFbmQgPj4+PSAwOwogICAgaWYgKHRoaXMgPT09IHRhcmdldCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGxldCB4MjEgPSB0aGlzRW5kIC0gdGhpc1N0YXJ0OwogICAgbGV0IHkxNyA9IGVuZCAtIHN0YXJ0OwogICAgY29uc3QgbGVuID0gTWF0aC5taW4oeDIxLCB5MTcpOwogICAgY29uc3QgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZCk7CiAgICBjb25zdCB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpOwogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGxlbjsgKytpNCkgewogICAgICBpZiAodGhpc0NvcHlbaTRdICE9PSB0YXJnZXRDb3B5W2k0XSkgewogICAgICAgIHgyMSA9IHRoaXNDb3B5W2k0XTsKICAgICAgICB5MTcgPSB0YXJnZXRDb3B5W2k0XTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKHgyMSA8IHkxNykgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBpZiAoeTE3IDwgeDIxKSB7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfTsKICBmdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikgewogICAgdmFsaWRhdGVCdWZmZXIoYnVmZmVyKTsKICAgIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gInN0cmluZyIpIHsKICAgICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0OwogICAgICBieXRlT2Zmc2V0ID0gdm9pZCAwOwogICAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMjE0NzQ4MzY0NykgewogICAgICBieXRlT2Zmc2V0ID0gMjE0NzQ4MzY0NzsKICAgIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0yMTQ3NDgzNjQ4KSB7CiAgICAgIGJ5dGVPZmZzZXQgPSAtMjE0NzQ4MzY0ODsKICAgIH0KICAgIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldDsKICAgIGlmIChOdW1iZXIuaXNOYU4oYnl0ZU9mZnNldCkpIHsKICAgICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiBidWZmZXIubGVuZ3RoIHx8IGJ1ZmZlci5ieXRlTGVuZ3RoOwogICAgfQogICAgZGlyID0gISFkaXI7CiAgICBpZiAodHlwZW9mIHZhbCA9PT0gIm51bWJlciIpIHsKICAgICAgcmV0dXJuIGluZGV4T2ZOdW1iZXIoYnVmZmVyLCB2YWwgPj4+IDAsIGJ5dGVPZmZzZXQsIGRpcik7CiAgICB9CiAgICBsZXQgb3BzOwogICAgaWYgKGVuY29kaW5nID09PSB2b2lkIDApIHsKICAgICAgb3BzID0gZW5jb2RpbmdPcHMudXRmODsKICAgIH0gZWxzZSB7CiAgICAgIG9wcyA9IGdldEVuY29kaW5nT3BzKGVuY29kaW5nKTsKICAgIH0KICAgIGlmICh0eXBlb2YgdmFsID09PSAic3RyaW5nIikgewogICAgICBpZiAob3BzID09PSB2b2lkIDApIHsKICAgICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpOwogICAgICB9CiAgICAgIHJldHVybiBvcHMuaW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZGlyKTsKICAgIH0KICAgIGlmIChpc1VpbnQ4QXJyYXkodmFsKSkgewogICAgICBjb25zdCBlbmNvZGluZ1ZhbCA9IG9wcyA9PT0gdm9pZCAwID8gZW5jb2RpbmdzTWFwLnV0ZjggOiBvcHMuZW5jb2RpbmdWYWw7CiAgICAgIHJldHVybiBpbmRleE9mQnVmZmVyKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZ1ZhbCwgZGlyKTsKICAgIH0KICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSgKICAgICAgInZhbHVlIiwKICAgICAgWyJudW1iZXIiLCAic3RyaW5nIiwgIkJ1ZmZlciIsICJVaW50OEFycmF5Il0sCiAgICAgIHZhbAogICAgKTsKICB9CiAgQnVmZmVyNC5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7CiAgICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHsKICAgIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgewogICAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLmFzY2lpU2xpY2UgPSBmdW5jdGlvbiBhc2NpaVNsaWNlKG9mZnNldCwgbGVuZ3RoKSB7CiAgICBpZiAob2Zmc2V0ID09PSAwICYmIGxlbmd0aCA9PT0gdGhpcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGJ5dGVzVG9Bc2NpaSh0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBieXRlc1RvQXNjaWkodGhpcy5zbGljZShvZmZzZXQsIGxlbmd0aCkpOwogICAgfQogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUuYXNjaWlXcml0ZSA9IGZ1bmN0aW9uIGFzY2lpV3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIHRoaXMsIG9mZnNldCwgbGVuZ3RoKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLmJhc2U2NFNsaWNlID0gZnVuY3Rpb24gYmFzZTY0U2xpY2Uob2Zmc2V0LCBsZW5ndGgpIHsKICAgIGlmIChvZmZzZXQgPT09IDAgJiYgbGVuZ3RoID09PSB0aGlzLmxlbmd0aCkgewogICAgICByZXR1cm4gZW5jb2RlKHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGVuY29kZSh0aGlzLnNsaWNlKG9mZnNldCwgbGVuZ3RoKSk7CiAgICB9CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS5iYXNlNjRXcml0ZSA9IGZ1bmN0aW9uIGJhc2U2NFdyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHsKICAgIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgdGhpcywgb2Zmc2V0LCBsZW5ndGgpOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUuYmFzZTY0dXJsU2xpY2UgPSBmdW5jdGlvbiBiYXNlNjR1cmxTbGljZShvZmZzZXQsIGxlbmd0aCkgewogICAgaWYgKG9mZnNldCA9PT0gMCAmJiBsZW5ndGggPT09IHRoaXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiBlbmNvZGUyKHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGVuY29kZTIodGhpcy5zbGljZShvZmZzZXQsIGxlbmd0aCkpOwogICAgfQogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUuYmFzZTY0dXJsV3JpdGUgPSBmdW5jdGlvbiBiYXNlNjR1cmxXcml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRVcmxUb0J5dGVzKHN0cmluZyksIHRoaXMsIG9mZnNldCwgbGVuZ3RoKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLmhleFdyaXRlID0gZnVuY3Rpb24gaGV4V3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgcmV0dXJuIGJsaXRCdWZmZXIoCiAgICAgIGhleFRvQnl0ZXMoc3RyaW5nLCB0aGlzLmxlbmd0aCAtIG9mZnNldCksCiAgICAgIHRoaXMsCiAgICAgIG9mZnNldCwKICAgICAgbGVuZ3RoCiAgICApOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUuaGV4U2xpY2UgPSBmdW5jdGlvbiBoZXhTbGljZTIoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgcmV0dXJuIF9oZXhTbGljZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLmxhdGluMVNsaWNlID0gZnVuY3Rpb24gbGF0aW4xU2xpY2Uoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgcmV0dXJuIF9sYXRpbjFTbGljZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLmxhdGluMVdyaXRlID0gZnVuY3Rpb24gbGF0aW4xV3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIHRoaXMsIG9mZnNldCwgbGVuZ3RoKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLnVjczJTbGljZSA9IGZ1bmN0aW9uIHVjczJTbGljZShvZmZzZXQsIGxlbmd0aCkgewogICAgaWYgKG9mZnNldCA9PT0gMCAmJiBsZW5ndGggPT09IHRoaXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiBieXRlc1RvVXRmMTZsZSh0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBieXRlc1RvVXRmMTZsZSh0aGlzLnNsaWNlKG9mZnNldCwgbGVuZ3RoKSk7CiAgICB9CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS51Y3MyV3JpdGUgPSBmdW5jdGlvbiB1Y3MyV3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkgewogICAgcmV0dXJuIGJsaXRCdWZmZXIoCiAgICAgIHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgdGhpcy5sZW5ndGggLSBvZmZzZXQpLAogICAgICB0aGlzLAogICAgICBvZmZzZXQsCiAgICAgIGxlbmd0aAogICAgKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLnV0ZjhTbGljZSA9IGZ1bmN0aW9uIHV0ZjhTbGljZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICByZXR1cm4gX3V0ZjhTbGljZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLnV0ZjhXcml0ZSA9IGZ1bmN0aW9uIHV0ZjhXcml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7CiAgICByZXR1cm4gYmxpdEJ1ZmZlcigKICAgICAgdXRmOFRvQnl0ZXMoc3RyaW5nLCB0aGlzLmxlbmd0aCAtIG9mZnNldCksCiAgICAgIHRoaXMsCiAgICAgIG9mZnNldCwKICAgICAgbGVuZ3RoCiAgICApOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykgewogICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiB0aGlzLnV0ZjhXcml0ZShzdHJpbmcsIDAsIHRoaXMubGVuZ3RoKTsKICAgIH0KICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAic3RyaW5nIikgewogICAgICBlbmNvZGluZyA9IG9mZnNldDsKICAgICAgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgIG9mZnNldCA9IDA7CiAgICB9IGVsc2UgewogICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQsICJvZmZzZXQiLCAwLCB0aGlzLmxlbmd0aCk7CiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0OwogICAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsKICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxlbmd0aCA9PT0gInN0cmluZyIpIHsKICAgICAgICBlbmNvZGluZyA9IGxlbmd0aDsKICAgICAgICBsZW5ndGggPSByZW1haW5pbmc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFsaWRhdGVPZmZzZXQobGVuZ3RoLCAibGVuZ3RoIiwgMCwgdGhpcy5sZW5ndGgpOwogICAgICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHsKICAgICAgICAgIGxlbmd0aCA9IHJlbWFpbmluZzsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICghZW5jb2RpbmcpIHsKICAgICAgcmV0dXJuIHRoaXMudXRmOFdyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogICAgfQogICAgY29uc3Qgb3BzID0gZ2V0RW5jb2RpbmdPcHMoZW5jb2RpbmcpOwogICAgaWYgKG9wcyA9PT0gdm9pZCAwKSB7CiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfVU5LTk9XTl9FTkNPRElORyhlbmNvZGluZyk7CiAgICB9CiAgICByZXR1cm4gb3BzLndyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogIkJ1ZmZlciIsCiAgICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKQogICAgfTsKICB9OwogIGZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlcihvYmosIGJ5dGVPZmZzZXQsIGxlbmd0aCkgewogICAgaWYgKGJ5dGVPZmZzZXQgPT09IHZvaWQgMCkgewogICAgICBieXRlT2Zmc2V0ID0gMDsKICAgIH0gZWxzZSB7CiAgICAgIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldDsKICAgICAgaWYgKE51bWJlci5pc05hTihieXRlT2Zmc2V0KSkgewogICAgICAgIGJ5dGVPZmZzZXQgPSAwOwogICAgICB9CiAgICB9CiAgICBjb25zdCBtYXhMZW5ndGggPSBvYmouYnl0ZUxlbmd0aCAtIGJ5dGVPZmZzZXQ7CiAgICBpZiAobWF4TGVuZ3RoIDwgMCkgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTKCJvZmZzZXQiKTsKICAgIH0KICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewogICAgICBsZW5ndGggPSBtYXhMZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBsZW5ndGggPSArbGVuZ3RoOwogICAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICAgIGlmIChsZW5ndGggPiBtYXhMZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFMoImxlbmd0aCIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBsZW5ndGggPSAwOwogICAgICB9CiAgICB9CiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShvYmosIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmZmVyLCBCdWZmZXI0LnByb3RvdHlwZSk7CiAgICByZXR1cm4gYnVmZmVyOwogIH0KICBmdW5jdGlvbiBfdXRmOFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkgewogICAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKTsKICAgIGNvbnN0IHJlcyA9IFtdOwogICAgbGV0IGk0ID0gc3RhcnQ7CiAgICB3aGlsZSAoaTQgPCBlbmQpIHsKICAgICAgY29uc3QgZmlyc3RCeXRlID0gYnVmW2k0XTsKICAgICAgbGV0IGNvZGVQb2ludCA9IG51bGw7CiAgICAgIGxldCBieXRlc1BlclNlcXVlbmNlID0gZmlyc3RCeXRlID4gMjM5ID8gNCA6IGZpcnN0Qnl0ZSA+IDIyMyA/IDMgOiBmaXJzdEJ5dGUgPiAxOTEgPyAyIDogMTsKICAgICAgaWYgKGk0ICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHsKICAgICAgICBsZXQgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50OwogICAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMTI4KSB7CiAgICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2k0ICsgMV07CiAgICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDE5MikgPT09IDEyOCkgewogICAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMzEpIDw8IDYgfCBzZWNvbmRCeXRlICYgNjM7CiAgICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAxMjcpIHsKICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2k0ICsgMV07CiAgICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpNCArIDJdOwogICAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjggJiYgKHRoaXJkQnl0ZSAmIDE5MikgPT09IDEyOCkgewogICAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMTUpIDw8IDEyIHwgKHNlY29uZEJ5dGUgJiA2MykgPDwgNiB8IHRoaXJkQnl0ZSAmIDYzOwogICAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMjA0NyAmJiAodGVtcENvZGVQb2ludCA8IDU1Mjk2IHx8IHRlbXBDb2RlUG9pbnQgPiA1NzM0MykpIHsKICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2k0ICsgMV07CiAgICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpNCArIDJdOwogICAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2k0ICsgM107CiAgICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDE5MikgPT09IDEyOCAmJiAodGhpcmRCeXRlICYgMTkyKSA9PT0gMTI4ICYmIChmb3VydGhCeXRlICYgMTkyKSA9PT0gMTI4KSB7CiAgICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAxNSkgPDwgMTggfCAoc2Vjb25kQnl0ZSAmIDYzKSA8PCAxMiB8ICh0aGlyZEJ5dGUgJiA2MykgPDwgNiB8IGZvdXJ0aEJ5dGUgJiA2MzsKICAgICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDY1NTM1ICYmIHRlbXBDb2RlUG9pbnQgPCAxMTE0MTEyKSB7CiAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7CiAgICAgICAgY29kZVBvaW50ID0gNjU1MzM7CiAgICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDE7CiAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gNjU1MzUpIHsKICAgICAgICBjb2RlUG9pbnQgLT0gNjU1MzY7CiAgICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDEwMjMgfCA1NTI5Nik7CiAgICAgICAgY29kZVBvaW50ID0gNTYzMjAgfCBjb2RlUG9pbnQgJiAxMDIzOwogICAgICB9CiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCk7CiAgICAgIGk0ICs9IGJ5dGVzUGVyU2VxdWVuY2U7CiAgICB9CiAgICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcyk7CiAgfQogIHZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDQwOTY7CiAgZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5KGNvZGVQb2ludHMpIHsKICAgIGNvbnN0IGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoOwogICAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkgewogICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpOwogICAgfQogICAgbGV0IHJlcyA9ICIiOwogICAgbGV0IGk0ID0gMDsKICAgIHdoaWxlIChpNCA8IGxlbikgewogICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSgKICAgICAgICBTdHJpbmcsCiAgICAgICAgY29kZVBvaW50cy5zbGljZShpNCwgaTQgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpCiAgICAgICk7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KICBmdW5jdGlvbiBfbGF0aW4xU2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICBsZXQgcmV0ID0gIiI7CiAgICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpOwogICAgZm9yIChsZXQgaTQgPSBzdGFydDsgaTQgPCBlbmQ7ICsraTQpIHsKICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2k0XSk7CiAgICB9CiAgICByZXR1cm4gcmV0OwogIH0KICBmdW5jdGlvbiBfaGV4U2xpY2UoYnVmLCBzdGFydCwgZW5kKSB7CiAgICBjb25zdCBsZW4gPSBidWYubGVuZ3RoOwogICAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIHsKICAgICAgZW5kID0gbGVuOwogICAgfQogICAgbGV0IG91dCA9ICIiOwogICAgZm9yIChsZXQgaTQgPSBzdGFydDsgaTQgPCBlbmQ7ICsraTQpIHsKICAgICAgb3V0ICs9IGhleFNsaWNlTG9va3VwVGFibGVbYnVmW2k0XV07CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KICBCdWZmZXI0LnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHsKICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoOwogICAgc3RhcnQgPSB+fnN0YXJ0OwogICAgZW5kID0gZW5kID09PSB2b2lkIDAgPyBsZW4gOiB+fmVuZDsKICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgc3RhcnQgKz0gbGVuOwogICAgICBpZiAoc3RhcnQgPCAwKSB7CiAgICAgICAgc3RhcnQgPSAwOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7CiAgICAgIHN0YXJ0ID0gbGVuOwogICAgfQogICAgaWYgKGVuZCA8IDApIHsKICAgICAgZW5kICs9IGxlbjsKICAgICAgaWYgKGVuZCA8IDApIHsKICAgICAgICBlbmQgPSAwOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVuZCA+IGxlbikgewogICAgICBlbmQgPSBsZW47CiAgICB9CiAgICBpZiAoZW5kIDwgc3RhcnQpIHsKICAgICAgZW5kID0gc3RhcnQ7CiAgICB9CiAgICBjb25zdCBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpOwogICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld0J1ZiwgQnVmZmVyNC5wcm90b3R5cGUpOwogICAgcmV0dXJuIG5ld0J1ZjsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLnJlYWRVaW50TEUgPSBCdWZmZXI0LnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRShvZmZzZXQsIGJ5dGVMZW5ndGgyKSB7CiAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsKICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKCJvZmZzZXQiLCAibnVtYmVyIiwgb2Zmc2V0KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNikgewogICAgICByZXR1cm4gcmVhZFVJbnQ0OExFKHRoaXMsIG9mZnNldCk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDUpIHsKICAgICAgcmV0dXJuIHJlYWRVSW50NDBMRSh0aGlzLCBvZmZzZXQpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSAzKSB7CiAgICAgIHJldHVybiByZWFkVUludDI0TEUodGhpcywgb2Zmc2V0KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNCkgewogICAgICByZXR1cm4gdGhpcy5yZWFkVUludDMyTEUob2Zmc2V0KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gMikgewogICAgICByZXR1cm4gdGhpcy5yZWFkVUludDE2TEUob2Zmc2V0KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gMSkgewogICAgICByZXR1cm4gdGhpcy5yZWFkVUludDgob2Zmc2V0KTsKICAgIH0KICAgIGJvdW5kc0Vycm9yKGJ5dGVMZW5ndGgyLCA2LCAiYnl0ZUxlbmd0aCIpOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUucmVhZFVpbnRCRSA9IEJ1ZmZlcjQucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFKG9mZnNldCwgYnl0ZUxlbmd0aDIpIHsKICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoIm9mZnNldCIsICJudW1iZXIiLCBvZmZzZXQpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSA2KSB7CiAgICAgIHJldHVybiByZWFkVUludDQ4QkUodGhpcywgb2Zmc2V0KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNSkgewogICAgICByZXR1cm4gcmVhZFVJbnQ0MEJFKHRoaXMsIG9mZnNldCk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDMpIHsKICAgICAgcmV0dXJuIHJlYWRVSW50MjRCRSh0aGlzLCBvZmZzZXQpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSA0KSB7CiAgICAgIHJldHVybiB0aGlzLnJlYWRVSW50MzJCRShvZmZzZXQpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSAyKSB7CiAgICAgIHJldHVybiB0aGlzLnJlYWRVSW50MTZCRShvZmZzZXQpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSAxKSB7CiAgICAgIHJldHVybiB0aGlzLnJlYWRVSW50OChvZmZzZXQpOwogICAgfQogICAgYm91bmRzRXJyb3IoYnl0ZUxlbmd0aDIsIDYsICJieXRlTGVuZ3RoIik7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS5yZWFkVWludDggPSBCdWZmZXI0LnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDgob2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCB2YWwgPSB0aGlzW29mZnNldF07CiAgICBpZiAodmFsID09PSB2b2lkIDApIHsKICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDEpOwogICAgfQogICAgcmV0dXJuIHZhbDsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9IEJ1ZmZlcjQucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IHJlYWRVSW50MTZCRTsKICBCdWZmZXI0LnByb3RvdHlwZS5yZWFkVWludDE2TEUgPSBCdWZmZXI0LnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUob2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTsKICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDFdOwogICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSAyKTsKICAgIH0KICAgIHJldHVybiBmaXJzdCArIGxhc3QgKiAyICoqIDg7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS5yZWFkVWludDMyTEUgPSBCdWZmZXI0LnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUob2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTsKICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDNdOwogICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA0KTsKICAgIH0KICAgIHJldHVybiBmaXJzdCArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgbGFzdCAqIDIgKiogMjQ7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS5yZWFkVWludDMyQkUgPSBCdWZmZXI0LnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSByZWFkVUludDMyQkU7CiAgQnVmZmVyNC5wcm90b3R5cGUucmVhZEJpZ1VpbnQ2NExFID0gQnVmZmVyNC5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKAogICAgZnVuY3Rpb24gcmVhZEJpZ1VJbnQ2NExFKG9mZnNldCkgewogICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTsKICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107CiAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KTsKICAgICAgfQogICAgICBjb25zdCBsbyA9IGZpcnN0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQ7CiAgICAgIGNvbnN0IGhpMyA9IHRoaXNbKytvZmZzZXRdICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyBsYXN0ICogMiAqKiAyNDsKICAgICAgcmV0dXJuIEJpZ0ludChsbykgKyAoQmlnSW50KGhpMykgPDwgQmlnSW50KDMyKSk7CiAgICB9CiAgKTsKICBCdWZmZXI0LnByb3RvdHlwZS5yZWFkQmlnVWludDY0QkUgPSBCdWZmZXI0LnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoCiAgICBmdW5jdGlvbiByZWFkQmlnVUludDY0QkUob2Zmc2V0KSB7CiAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDsKICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XTsKICAgICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpOwogICAgICB9CiAgICAgIGNvbnN0IGhpMyA9IGZpcnN0ICogMiAqKiAyNCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF07CiAgICAgIGNvbnN0IGxvID0gdGhpc1srK29mZnNldF0gKiAyICoqIDI0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyBsYXN0OwogICAgICByZXR1cm4gKEJpZ0ludChoaTMpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KGxvKTsKICAgIH0KICApOwogIEJ1ZmZlcjQucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRShvZmZzZXQsIGJ5dGVMZW5ndGgyKSB7CiAgICBpZiAob2Zmc2V0ID09PSB2b2lkIDApIHsKICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKCJvZmZzZXQiLCAibnVtYmVyIiwgb2Zmc2V0KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNikgewogICAgICByZXR1cm4gcmVhZEludDQ4TEUodGhpcywgb2Zmc2V0KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNSkgewogICAgICByZXR1cm4gcmVhZEludDQwTEUodGhpcywgb2Zmc2V0KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gMykgewogICAgICByZXR1cm4gcmVhZEludDI0TEUodGhpcywgb2Zmc2V0KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNCkgewogICAgICByZXR1cm4gdGhpcy5yZWFkSW50MzJMRShvZmZzZXQpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSAyKSB7CiAgICAgIHJldHVybiB0aGlzLnJlYWRJbnQxNkxFKG9mZnNldCk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDEpIHsKICAgICAgcmV0dXJuIHRoaXMucmVhZEludDgob2Zmc2V0KTsKICAgIH0KICAgIGJvdW5kc0Vycm9yKGJ5dGVMZW5ndGgyLCA2LCAiYnl0ZUxlbmd0aCIpOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFKG9mZnNldCwgYnl0ZUxlbmd0aDIpIHsKICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoIm9mZnNldCIsICJudW1iZXIiLCBvZmZzZXQpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSA2KSB7CiAgICAgIHJldHVybiByZWFkSW50NDhCRSh0aGlzLCBvZmZzZXQpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSA1KSB7CiAgICAgIHJldHVybiByZWFkSW50NDBCRSh0aGlzLCBvZmZzZXQpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSAzKSB7CiAgICAgIHJldHVybiByZWFkSW50MjRCRSh0aGlzLCBvZmZzZXQpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSA0KSB7CiAgICAgIHJldHVybiB0aGlzLnJlYWRJbnQzMkJFKG9mZnNldCk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDIpIHsKICAgICAgcmV0dXJuIHRoaXMucmVhZEludDE2QkUob2Zmc2V0KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gMSkgewogICAgICByZXR1cm4gdGhpcy5yZWFkSW50OChvZmZzZXQpOwogICAgfQogICAgYm91bmRzRXJyb3IoYnl0ZUxlbmd0aDIsIDYsICJieXRlTGVuZ3RoIik7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4KG9mZnNldCA9IDApIHsKICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXRdOwogICAgaWYgKHZhbCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSAxKTsKICAgIH0KICAgIHJldHVybiB2YWwgfCAodmFsICYgMiAqKiA3KSAqIDMzNTU0NDMwOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRShvZmZzZXQgPSAwKSB7CiAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdOwogICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgMV07CiAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHsKICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDIpOwogICAgfQogICAgY29uc3QgdmFsID0gZmlyc3QgKyBsYXN0ICogMiAqKiA4OwogICAgcmV0dXJuIHZhbCB8ICh2YWwgJiAyICoqIDE1KSAqIDEzMTA3MDsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUob2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTsKICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDFdOwogICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSAyKTsKICAgIH0KICAgIGNvbnN0IHZhbCA9IGZpcnN0ICogMiAqKiA4ICsgbGFzdDsKICAgIHJldHVybiB2YWwgfCAodmFsICYgMiAqKiAxNSkgKiAxMzEwNzA7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFKG9mZnNldCA9IDApIHsKICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07CiAgICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyAzXTsKICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gNCk7CiAgICB9CiAgICByZXR1cm4gZmlyc3QgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIChsYXN0IDw8IDI0KTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUob2Zmc2V0ID0gMCkgewogICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAib2Zmc2V0Iik7CiAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTsKICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDNdOwogICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7CiAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA0KTsKICAgIH0KICAgIHJldHVybiAoZmlyc3QgPDwgMjQpICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyBsYXN0OwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUucmVhZEJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoCiAgICBmdW5jdGlvbiByZWFkQmlnSW50NjRMRShvZmZzZXQpIHsKICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwOwogICAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07CiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddOwogICAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHsKICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7CiAgICAgIH0KICAgICAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXQgKyA0XSArIHRoaXNbb2Zmc2V0ICsgNV0gKiAyICoqIDggKyB0aGlzW29mZnNldCArIDZdICogMiAqKiAxNiArIChsYXN0IDw8IDI0KTsKICAgICAgcmV0dXJuIChCaWdJbnQodmFsKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludCgKICAgICAgICBmaXJzdCArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDI0CiAgICAgICk7CiAgICB9CiAgKTsKICBCdWZmZXI0LnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZCgKICAgIGZ1bmN0aW9uIHJlYWRCaWdJbnQ2NEJFKG9mZnNldCkgewogICAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDA7CiAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgIm9mZnNldCIpOwogICAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTsKICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107CiAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkgewogICAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KTsKICAgICAgfQogICAgICBjb25zdCB2YWwgPSAoZmlyc3QgPDwgMjQpICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XTsKICAgICAgcmV0dXJuIChCaWdJbnQodmFsKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludCgKICAgICAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIGxhc3QKICAgICAgKTsKICAgIH0KICApOwogIEJ1ZmZlcjQucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUob2Zmc2V0KSB7CiAgICByZXR1cm4gYmlnRW5kaWFuID8gcmVhZEZsb2F0QmFja3dhcmRzKHRoaXMsIG9mZnNldCkgOiByZWFkRmxvYXRGb3J3YXJkcyh0aGlzLCBvZmZzZXQpOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRShvZmZzZXQpIHsKICAgIHJldHVybiBiaWdFbmRpYW4gPyByZWFkRmxvYXRGb3J3YXJkcyh0aGlzLCBvZmZzZXQpIDogcmVhZEZsb2F0QmFja3dhcmRzKHRoaXMsIG9mZnNldCk7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUob2Zmc2V0KSB7CiAgICByZXR1cm4gYmlnRW5kaWFuID8gcmVhZERvdWJsZUJhY2t3YXJkcyh0aGlzLCBvZmZzZXQpIDogcmVhZERvdWJsZUZvcndhcmRzKHRoaXMsIG9mZnNldCk7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUob2Zmc2V0KSB7CiAgICByZXR1cm4gYmlnRW5kaWFuID8gcmVhZERvdWJsZUZvcndhcmRzKHRoaXMsIG9mZnNldCkgOiByZWFkRG91YmxlQmFja3dhcmRzKHRoaXMsIG9mZnNldCk7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS53cml0ZVVpbnRMRSA9IEJ1ZmZlcjQucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIpIHsKICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNikgewogICAgICByZXR1cm4gd3JpdGVVX0ludDQ4TEUodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMjgxNDc0OTc2NzEwNjU1KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNSkgewogICAgICByZXR1cm4gd3JpdGVVX0ludDQwTEUodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMTA5OTUxMTYyNzc3NSk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDMpIHsKICAgICAgcmV0dXJuIHdyaXRlVV9JbnQyNExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDE2Nzc3MjE1KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNCkgewogICAgICByZXR1cm4gd3JpdGVVX0ludDMyTEUodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgNDI5NDk2NzI5NSk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDIpIHsKICAgICAgcmV0dXJuIHdyaXRlVV9JbnQxNkxFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDY1NTM1KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gMSkgewogICAgICByZXR1cm4gd3JpdGVVX0ludDgodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMjU1KTsKICAgIH0KICAgIGJvdW5kc0Vycm9yKGJ5dGVMZW5ndGgyLCA2LCAiYnl0ZUxlbmd0aCIpOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUud3JpdGVVaW50QkUgPSBCdWZmZXI0LnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKSB7CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDYpIHsKICAgICAgcmV0dXJuIHdyaXRlVV9JbnQ0OEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDI4MTQ3NDk3NjcxMDY1NSk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDUpIHsKICAgICAgcmV0dXJuIHdyaXRlVV9JbnQ0MEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDEwOTk1MTE2Mjc3NzUpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSAzKSB7CiAgICAgIHJldHVybiB3cml0ZVVfSW50MjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAwLCAxNjc3NzIxNSk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDQpIHsKICAgICAgcmV0dXJuIHdyaXRlVV9JbnQzMkJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDQyOTQ5NjcyOTUpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSAyKSB7CiAgICAgIHJldHVybiB3cml0ZVVfSW50MTZCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAwLCA2NTUzNSk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDEpIHsKICAgICAgcmV0dXJuIHdyaXRlVV9JbnQ4KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDI1NSk7CiAgICB9CiAgICBib3VuZHNFcnJvcihieXRlTGVuZ3RoMiwgNiwgImJ5dGVMZW5ndGgiKTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLndyaXRlVWludDggPSBCdWZmZXI0LnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgcmV0dXJuIHdyaXRlVV9JbnQ4KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDI1NSk7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID0gQnVmZmVyNC5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUodmFsdWUsIG9mZnNldCA9IDApIHsKICAgIHJldHVybiB3cml0ZVVfSW50MTZMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAwLCA2NTUzNSk7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS53cml0ZVVpbnQxNkJFID0gQnVmZmVyNC5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUodmFsdWUsIG9mZnNldCA9IDApIHsKICAgIHJldHVybiB3cml0ZVVfSW50MTZCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAwLCA2NTUzNSk7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID0gQnVmZmVyNC5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUodmFsdWUsIG9mZnNldCA9IDApIHsKICAgIHJldHVybiBfd3JpdGVVSW50MzJMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAwLCA0Mjk0OTY3Mjk1KTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLndyaXRlVWludDMyQkUgPSBCdWZmZXI0LnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgcmV0dXJuIF93cml0ZVVJbnQzMkJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDQyOTQ5NjcyOTUpOwogIH07CiAgZnVuY3Rpb24gd3J0QmlnVUludDY0TEUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4yLCBtYXgpIHsKICAgIGNoZWNrSW50QkkodmFsdWUsIG1pbjIsIG1heCwgYnVmLCBvZmZzZXQsIDcpOwogICAgbGV0IGxvID0gTnVtYmVyKHZhbHVlICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgIGxvID0gbG8gPj4gODsKICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgIGxvID0gbG8gPj4gODsKICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgIGxvID0gbG8gPj4gODsKICAgIGJ1ZltvZmZzZXQrK10gPSBsbzsKICAgIGxldCBoaTMgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7CiAgICBidWZbb2Zmc2V0KytdID0gaGkzOwogICAgaGkzID0gaGkzID4+IDg7CiAgICBidWZbb2Zmc2V0KytdID0gaGkzOwogICAgaGkzID0gaGkzID4+IDg7CiAgICBidWZbb2Zmc2V0KytdID0gaGkzOwogICAgaGkzID0gaGkzID4+IDg7CiAgICBidWZbb2Zmc2V0KytdID0gaGkzOwogICAgcmV0dXJuIG9mZnNldDsKICB9CiAgZnVuY3Rpb24gd3J0QmlnVUludDY0QkUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4yLCBtYXgpIHsKICAgIGNoZWNrSW50QkkodmFsdWUsIG1pbjIsIG1heCwgYnVmLCBvZmZzZXQsIDcpOwogICAgbGV0IGxvID0gTnVtYmVyKHZhbHVlICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgIGJ1ZltvZmZzZXQgKyA3XSA9IGxvOwogICAgbG8gPSBsbyA+PiA4OwogICAgYnVmW29mZnNldCArIDZdID0gbG87CiAgICBsbyA9IGxvID4+IDg7CiAgICBidWZbb2Zmc2V0ICsgNV0gPSBsbzsKICAgIGxvID0gbG8gPj4gODsKICAgIGJ1ZltvZmZzZXQgKyA0XSA9IGxvOwogICAgbGV0IGhpMyA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDQyOTQ5NjcyOTUpKTsKICAgIGJ1ZltvZmZzZXQgKyAzXSA9IGhpMzsKICAgIGhpMyA9IGhpMyA+PiA4OwogICAgYnVmW29mZnNldCArIDJdID0gaGkzOwogICAgaGkzID0gaGkzID4+IDg7CiAgICBidWZbb2Zmc2V0ICsgMV0gPSBoaTM7CiAgICBoaTMgPSBoaTMgPj4gODsKICAgIGJ1ZltvZmZzZXRdID0gaGkzOwogICAgcmV0dXJuIG9mZnNldCArIDg7CiAgfQogIEJ1ZmZlcjQucHJvdG90eXBlLndyaXRlQmlnVWludDY0TEUgPSBCdWZmZXI0LnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKAogICAgZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICByZXR1cm4gd3J0QmlnVUludDY0TEUoCiAgICAgICAgdGhpcywKICAgICAgICB2YWx1ZSwKICAgICAgICBvZmZzZXQsCiAgICAgICAgQmlnSW50KDApLAogICAgICAgIEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikKICAgICAgKTsKICAgIH0KICApOwogIEJ1ZmZlcjQucHJvdG90eXBlLndyaXRlQmlnVWludDY0QkUgPSBCdWZmZXI0LnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKAogICAgZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRCRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICByZXR1cm4gd3J0QmlnVUludDY0QkUoCiAgICAgICAgdGhpcywKICAgICAgICB2YWx1ZSwKICAgICAgICBvZmZzZXQsCiAgICAgICAgQmlnSW50KDApLAogICAgICAgIEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikKICAgICAgKTsKICAgIH0KICApOwogIEJ1ZmZlcjQucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKSB7CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDYpIHsKICAgICAgcmV0dXJuIHdyaXRlVV9JbnQ0OExFKAogICAgICAgIHRoaXMsCiAgICAgICAgdmFsdWUsCiAgICAgICAgb2Zmc2V0LAogICAgICAgIC0xNDA3Mzc0ODgzNTUzMjgsCiAgICAgICAgMTQwNzM3NDg4MzU1MzI3CiAgICAgICk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDUpIHsKICAgICAgcmV0dXJuIHdyaXRlVV9JbnQ0MExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC01NDk3NTU4MTM4ODgsIDU0OTc1NTgxMzg4Nyk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDMpIHsKICAgICAgcmV0dXJuIHdyaXRlVV9JbnQyNExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC04Mzg4NjA4LCA4Mzg4NjA3KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNCkgewogICAgICByZXR1cm4gd3JpdGVVX0ludDMyTEUodGhpcywgdmFsdWUsIG9mZnNldCwgLTIxNDc0ODM2NDgsIDIxNDc0ODM2NDcpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSAyKSB7CiAgICAgIHJldHVybiB3cml0ZVVfSW50MTZMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMzI3NjgsIDMyNzY3KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gMSkgewogICAgICByZXR1cm4gd3JpdGVVX0ludDgodGhpcywgdmFsdWUsIG9mZnNldCwgLTEyOCwgMTI3KTsKICAgIH0KICAgIGJvdW5kc0Vycm9yKGJ5dGVMZW5ndGgyLCA2LCAiYnl0ZUxlbmd0aCIpOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aDIpIHsKICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNikgewogICAgICByZXR1cm4gd3JpdGVVX0ludDQ4QkUoCiAgICAgICAgdGhpcywKICAgICAgICB2YWx1ZSwKICAgICAgICBvZmZzZXQsCiAgICAgICAgLTE0MDczNzQ4ODM1NTMyOCwKICAgICAgICAxNDA3Mzc0ODgzNTUzMjcKICAgICAgKTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gNSkgewogICAgICByZXR1cm4gd3JpdGVVX0ludDQwQkUodGhpcywgdmFsdWUsIG9mZnNldCwgLTU0OTc1NTgxMzg4OCwgNTQ5NzU1ODEzODg3KTsKICAgIH0KICAgIGlmIChieXRlTGVuZ3RoMiA9PT0gMykgewogICAgICByZXR1cm4gd3JpdGVVX0ludDI0QkUodGhpcywgdmFsdWUsIG9mZnNldCwgLTgzODg2MDgsIDgzODg2MDcpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSA0KSB7CiAgICAgIHJldHVybiB3cml0ZVVfSW50MzJCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMjE0NzQ4MzY0OCwgMjE0NzQ4MzY0Nyk7CiAgICB9CiAgICBpZiAoYnl0ZUxlbmd0aDIgPT09IDIpIHsKICAgICAgcmV0dXJuIHdyaXRlVV9JbnQxNkJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC0zMjc2OCwgMzI3NjcpOwogICAgfQogICAgaWYgKGJ5dGVMZW5ndGgyID09PSAxKSB7CiAgICAgIHJldHVybiB3cml0ZVVfSW50OCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMTI4LCAxMjcpOwogICAgfQogICAgYm91bmRzRXJyb3IoYnl0ZUxlbmd0aDIsIDYsICJieXRlTGVuZ3RoIik7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDgodmFsdWUsIG9mZnNldCA9IDApIHsKICAgIHJldHVybiB3cml0ZVVfSW50OCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMTI4LCAxMjcpOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICByZXR1cm4gd3JpdGVVX0ludDE2TEUodGhpcywgdmFsdWUsIG9mZnNldCwgLTMyNzY4LCAzMjc2Nyk7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUodmFsdWUsIG9mZnNldCA9IDApIHsKICAgIHJldHVybiB3cml0ZVVfSW50MTZCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMzI3NjgsIDMyNzY3KTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgcmV0dXJuIHdyaXRlVV9JbnQzMkxFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC0yMTQ3NDgzNjQ4LCAyMTQ3NDgzNjQ3KTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgcmV0dXJuIHdyaXRlVV9JbnQzMkJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC0yMTQ3NDgzNjQ4LCAyMTQ3NDgzNjQ3KTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZCgKICAgIGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkgewogICAgICByZXR1cm4gd3J0QmlnVUludDY0TEUoCiAgICAgICAgdGhpcywKICAgICAgICB2YWx1ZSwKICAgICAgICBvZmZzZXQsCiAgICAgICAgLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksCiAgICAgICAgQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKQogICAgICApOwogICAgfQogICk7CiAgQnVmZmVyNC5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKAogICAgZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NEJFKHZhbHVlLCBvZmZzZXQgPSAwKSB7CiAgICAgIHJldHVybiB3cnRCaWdVSW50NjRCRSgKICAgICAgICB0aGlzLAogICAgICAgIHZhbHVlLAogICAgICAgIG9mZnNldCwKICAgICAgICAtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSwKICAgICAgICBCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpCiAgICAgICk7CiAgICB9CiAgKTsKICBCdWZmZXI0LnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUodmFsdWUsIG9mZnNldCkgewogICAgcmV0dXJuIGJpZ0VuZGlhbiA/IHdyaXRlRmxvYXRCYWNrd2FyZHModGhpcywgdmFsdWUsIG9mZnNldCkgOiB3cml0ZUZsb2F0Rm9yd2FyZHModGhpcywgdmFsdWUsIG9mZnNldCk7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS53cml0ZUZsb2F0QkUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0QkUodmFsdWUsIG9mZnNldCkgewogICAgcmV0dXJuIGJpZ0VuZGlhbiA/IHdyaXRlRmxvYXRGb3J3YXJkcyh0aGlzLCB2YWx1ZSwgb2Zmc2V0KSA6IHdyaXRlRmxvYXRCYWNrd2FyZHModGhpcywgdmFsdWUsIG9mZnNldCk7CiAgfTsKICBCdWZmZXI0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSh2YWx1ZSwgb2Zmc2V0KSB7CiAgICByZXR1cm4gYmlnRW5kaWFuID8gd3JpdGVEb3VibGVCYWNrd2FyZHModGhpcywgdmFsdWUsIG9mZnNldCkgOiB3cml0ZURvdWJsZUZvcndhcmRzKHRoaXMsIHZhbHVlLCBvZmZzZXQpOwogIH07CiAgQnVmZmVyNC5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUodmFsdWUsIG9mZnNldCkgewogICAgcmV0dXJuIGJpZ0VuZGlhbiA/IHdyaXRlRG91YmxlRm9yd2FyZHModGhpcywgdmFsdWUsIG9mZnNldCkgOiB3cml0ZURvdWJsZUJhY2t3YXJkcyh0aGlzLCB2YWx1ZSwgb2Zmc2V0KTsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5Myh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzb3VyY2VTdGFydCwgc291cmNlRW5kKSB7CiAgICBpZiAoIWlzVWludDhBcnJheSh0aGlzKSkgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoCiAgICAgICAgInNvdXJjZSIsCiAgICAgICAgWyJCdWZmZXIiLCAiVWludDhBcnJheSJdLAogICAgICAgIHRoaXMKICAgICAgKTsKICAgIH0KICAgIGlmICghaXNVaW50OEFycmF5KHRhcmdldCkpIHsKICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKAogICAgICAgICJ0YXJnZXQiLAogICAgICAgIFsiQnVmZmVyIiwgIlVpbnQ4QXJyYXkiXSwKICAgICAgICB0YXJnZXQKICAgICAgKTsKICAgIH0KICAgIGlmICh0YXJnZXRTdGFydCA9PT0gdm9pZCAwKSB7CiAgICAgIHRhcmdldFN0YXJ0ID0gMDsKICAgIH0gZWxzZSB7CiAgICAgIHRhcmdldFN0YXJ0ID0gdG9JbnRlZ2VyKHRhcmdldFN0YXJ0LCAwKTsKICAgICAgaWYgKHRhcmdldFN0YXJ0IDwgMCkgewogICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKCJ0YXJnZXRTdGFydCIsICI+PSAwIiwgdGFyZ2V0U3RhcnQpOwogICAgICB9CiAgICB9CiAgICBpZiAoc291cmNlU3RhcnQgPT09IHZvaWQgMCkgewogICAgICBzb3VyY2VTdGFydCA9IDA7CiAgICB9IGVsc2UgewogICAgICBzb3VyY2VTdGFydCA9IHRvSW50ZWdlcihzb3VyY2VTdGFydCwgMCk7CiAgICAgIGlmIChzb3VyY2VTdGFydCA8IDApIHsKICAgICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRSgic291cmNlU3RhcnQiLCAiPj0gMCIsIHNvdXJjZVN0YXJ0KTsKICAgICAgfQogICAgICBpZiAoc291cmNlU3RhcnQgPj0gTUFYX1VJTlQzMikgewogICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKAogICAgICAgICAgInNvdXJjZVN0YXJ0IiwKICAgICAgICAgIGA8ICR7TUFYX1VJTlQzMn1gLAogICAgICAgICAgc291cmNlU3RhcnQKICAgICAgICApOwogICAgICB9CiAgICB9CiAgICBpZiAoc291cmNlRW5kID09PSB2b2lkIDApIHsKICAgICAgc291cmNlRW5kID0gdGhpcy5sZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBzb3VyY2VFbmQgPSB0b0ludGVnZXIoc291cmNlRW5kLCAwKTsKICAgICAgaWYgKHNvdXJjZUVuZCA8IDApIHsKICAgICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRSgic291cmNlRW5kIiwgIj49IDAiLCBzb3VyY2VFbmQpOwogICAgICB9CiAgICAgIGlmIChzb3VyY2VFbmQgPj0gTUFYX1VJTlQzMikgewogICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKAogICAgICAgICAgInNvdXJjZUVuZCIsCiAgICAgICAgICBgPCAke01BWF9VSU5UMzJ9YCwKICAgICAgICAgIHNvdXJjZUVuZAogICAgICAgICk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgaWYgKHNvdXJjZUVuZCA+IDAgJiYgc291cmNlRW5kIDwgc291cmNlU3RhcnQpIHsKICAgICAgc291cmNlRW5kID0gc291cmNlU3RhcnQ7CiAgICB9CiAgICBpZiAoc291cmNlRW5kID09PSBzb3VyY2VTdGFydCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgaWYgKHNvdXJjZUVuZCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHNvdXJjZUVuZCA9IHRoaXMubGVuZ3RoOwogICAgfQogICAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IHNvdXJjZUVuZCAtIHNvdXJjZVN0YXJ0KSB7CiAgICAgIHNvdXJjZUVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHNvdXJjZVN0YXJ0OwogICAgfQogICAgY29uc3QgbGVuID0gc291cmNlRW5kIC0gc291cmNlU3RhcnQ7CiAgICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIHRoaXMuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc291cmNlU3RhcnQsIHNvdXJjZUVuZCk7CiAgICB9IGVsc2UgewogICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCgKICAgICAgICB0YXJnZXQsCiAgICAgICAgdGhpcy5zdWJhcnJheShzb3VyY2VTdGFydCwgc291cmNlRW5kKSwKICAgICAgICB0YXJnZXRTdGFydAogICAgICApOwogICAgfQogICAgcmV0dXJuIGxlbjsKICB9OwogIEJ1ZmZlcjQucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHsKICAgIGlmICh0eXBlb2YgdmFsID09PSAic3RyaW5nIikgewogICAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAic3RyaW5nIikgewogICAgICAgIGVuY29kaW5nID0gc3RhcnQ7CiAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIGVuZCA9IHRoaXMubGVuZ3RoOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgZW5jb2RpbmcgPSBlbmQ7CiAgICAgICAgZW5kID0gdGhpcy5sZW5ndGg7CiAgICAgIH0KICAgICAgaWYgKGVuY29kaW5nICE9PSB2b2lkIDAgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAic3RyaW5nIikgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAic3RyaW5nIiAmJiAhQnVmZmVyNC5pc0VuY29kaW5nKGVuY29kaW5nKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIgKyBlbmNvZGluZyk7CiAgICAgIH0KICAgICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHsKICAgICAgICBjb25zdCBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMCk7CiAgICAgICAgaWYgKGVuY29kaW5nID09PSAidXRmOCIgJiYgY29kZSA8IDEyOCB8fCBlbmNvZGluZyA9PT0gImxhdGluMSIpIHsKICAgICAgICAgIHZhbCA9IGNvZGU7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICJudW1iZXIiKSB7CiAgICAgIHZhbCA9IHZhbCAmIDI1NTsKICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gImJvb2xlYW4iKSB7CiAgICAgIHZhbCA9IE51bWJlcih2YWwpOwogICAgfQogICAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTsKICAgIH0KICAgIGlmIChlbmQgPD0gc3RhcnQpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBzdGFydCA9IHN0YXJ0ID4+PiAwOwogICAgZW5kID0gZW5kID09PSB2b2lkIDAgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMDsKICAgIGlmICghdmFsKSB7CiAgICAgIHZhbCA9IDA7CiAgICB9CiAgICBsZXQgaTQ7CiAgICBpZiAodHlwZW9mIHZhbCA9PT0gIm51bWJlciIpIHsKICAgICAgZm9yIChpNCA9IHN0YXJ0OyBpNCA8IGVuZDsgKytpNCkgewogICAgICAgIHRoaXNbaTRdID0gdmFsOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBieXRlcyA9IEJ1ZmZlcjQuaXNCdWZmZXIodmFsKSA/IHZhbCA6IEJ1ZmZlcjQuZnJvbSh2YWwsIGVuY29kaW5nKTsKICAgICAgY29uc3QgbGVuID0gYnl0ZXMubGVuZ3RoOwogICAgICBpZiAobGVuID09PSAwKSB7CiAgICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19WQUxVRSgKICAgICAgICAgICJ2YWx1ZSIsCiAgICAgICAgICB2YWwKICAgICAgICApOwogICAgICB9CiAgICAgIGZvciAoaTQgPSAwOyBpNCA8IGVuZCAtIHN0YXJ0OyArK2k0KSB7CiAgICAgICAgdGhpc1tpNCArIHN0YXJ0XSA9IGJ5dGVzW2k0ICUgbGVuXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfTsKICBmdW5jdGlvbiBjaGVja0JvdW5kczIoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKSB7CiAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICJvZmZzZXQiKTsKICAgIGlmIChidWZbb2Zmc2V0XSA9PT0gdm9pZCAwIHx8IGJ1ZltvZmZzZXQgKyBieXRlTGVuZ3RoMl0gPT09IHZvaWQgMCkgewogICAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSAoYnl0ZUxlbmd0aDIgKyAxKSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGNoZWNrSW50QkkodmFsdWUsIG1pbjIsIG1heCwgYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKSB7CiAgICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4yKSB7CiAgICAgIGNvbnN0IG44ID0gdHlwZW9mIG1pbjIgPT09ICJiaWdpbnQiID8gIm4iIDogIiI7CiAgICAgIGxldCByYW5nZTsKICAgICAgaWYgKGJ5dGVMZW5ndGgyID4gMykgewogICAgICAgIGlmIChtaW4yID09PSAwIHx8IG1pbjIgPT09IEJpZ0ludCgwKSkgewogICAgICAgICAgcmFuZ2UgPSBgPj0gMCR7bjh9IGFuZCA8IDIke244fSAqKiAkeyhieXRlTGVuZ3RoMiArIDEpICogOH0ke244fWA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJhbmdlID0gYD49IC0oMiR7bjh9ICoqICR7KGJ5dGVMZW5ndGgyICsgMSkgKiA4IC0gMX0ke244fSkgYW5kIDwgMiAqKiAkeyhieXRlTGVuZ3RoMiArIDEpICogOCAtIDF9JHtuOH1gOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByYW5nZSA9IGA+PSAke21pbjJ9JHtuOH0gYW5kIDw9ICR7bWF4fSR7bjh9YDsKICAgICAgfQogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLCByYW5nZSwgdmFsdWUpOwogICAgfQogICAgY2hlY2tCb3VuZHMyKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoMik7CiAgfQogIGZ1bmN0aW9uIHV0ZjhUb0J5dGVzKHN0cmluZywgdW5pdHMpIHsKICAgIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHk7CiAgICBsZXQgY29kZVBvaW50OwogICAgY29uc3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKICAgIGxldCBsZWFkU3Vycm9nYXRlID0gbnVsbDsKICAgIGNvbnN0IGJ5dGVzID0gW107CiAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgbGVuZ3RoOyArK2k0KSB7CiAgICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGk0KTsKICAgICAgaWYgKGNvZGVQb2ludCA+IDU1Mjk1ICYmIGNvZGVQb2ludCA8IDU3MzQ0KSB7CiAgICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7CiAgICAgICAgICBpZiAoY29kZVBvaW50ID4gNTYzMTkpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSB7CiAgICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gZWxzZSBpZiAoaTQgKyAxID09PSBsZW5ndGgpIHsKICAgICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSB7CiAgICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvZGVQb2ludCA8IDU2MzIwKSB7CiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIHsKICAgICAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTsKICAgICAgICAgIH0KICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSA1NTI5NiA8PCAxMCB8IGNvZGVQb2ludCAtIDU2MzIwKSArIDY1NTM2OwogICAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHsKICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIHsKICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsOwogICAgICBpZiAoY29kZVBvaW50IDwgMTI4KSB7CiAgICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCk7CiAgICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMjA0OCkgewogICAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQgPj4gNiB8IDE5MiwgY29kZVBvaW50ICYgNjMgfCAxMjgpOwogICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDY1NTM2KSB7CiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBieXRlcy5wdXNoKAogICAgICAgICAgY29kZVBvaW50ID4+IDEyIHwgMjI0LAogICAgICAgICAgY29kZVBvaW50ID4+IDYgJiA2MyB8IDEyOCwKICAgICAgICAgIGNvZGVQb2ludCAmIDYzIHwgMTI4CiAgICAgICAgKTsKICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAxMTE0MTEyKSB7CiAgICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBieXRlcy5wdXNoKAogICAgICAgICAgY29kZVBvaW50ID4+IDE4IHwgMjQwLAogICAgICAgICAgY29kZVBvaW50ID4+IDEyICYgNjMgfCAxMjgsCiAgICAgICAgICBjb2RlUG9pbnQgPj4gNiAmIDYzIHwgMTI4LAogICAgICAgICAgY29kZVBvaW50ICYgNjMgfCAxMjgKICAgICAgICApOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBieXRlczsKICB9CiAgZnVuY3Rpb24gYmxpdEJ1ZmZlcihzcmMsIGRzdCwgb2Zmc2V0LCBieXRlTGVuZ3RoMikgewogICAgbGV0IGk0OwogICAgY29uc3QgbGVuZ3RoID0gYnl0ZUxlbmd0aDIgPT09IHZvaWQgMCA/IHNyYy5sZW5ndGggOiBieXRlTGVuZ3RoMjsKICAgIGZvciAoaTQgPSAwOyBpNCA8IGxlbmd0aDsgKytpNCkgewogICAgICBpZiAoaTQgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCB8fCBpNCA+PSBzcmMubGVuZ3RoKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZHN0W2k0ICsgb2Zmc2V0XSA9IHNyY1tpNF07CiAgICB9CiAgICByZXR1cm4gaTQ7CiAgfQogIGZ1bmN0aW9uIGlzSW5zdGFuY2Uob2JqLCB0eXBlKSB7CiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fCBvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWU7CiAgfQogIHZhciBoZXhTbGljZUxvb2t1cFRhYmxlID0gZnVuY3Rpb24oKSB7CiAgICBjb25zdCBhbHBoYWJldCA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKICAgIGNvbnN0IHRhYmxlID0gbmV3IEFycmF5KDI1Nik7CiAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgMTY7ICsraTQpIHsKICAgICAgY29uc3QgaTE2ID0gaTQgKiAxNjsKICAgICAgZm9yIChsZXQgajE5ID0gMDsgajE5IDwgMTY7ICsrajE5KSB7CiAgICAgICAgdGFibGVbaTE2ICsgajE5XSA9IGFscGhhYmV0W2k0XSArIGFscGhhYmV0W2oxOV07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0YWJsZTsKICB9KCk7CiAgZnVuY3Rpb24gZGVmaW5lQmlnSW50TWV0aG9kKGZuNCkgewogICAgcmV0dXJuIHR5cGVvZiBCaWdJbnQgPT09ICJ1bmRlZmluZWQiID8gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCA6IGZuNDsKICB9CiAgZnVuY3Rpb24gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCgpIHsKICAgIHRocm93IG5ldyBFcnJvcigiQmlnSW50IG5vdCBzdXBwb3J0ZWQiKTsKICB9CiAgdmFyIGF0b2IyID0gZ2xvYmFsVGhpcy5hdG9iOwogIHZhciBCbG9iMiA9IGdsb2JhbFRoaXMuQmxvYjsKICB2YXIgYnRvYSA9IGdsb2JhbFRoaXMuYnRvYTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL3V0aWwudHMKICB2YXIgTnVtYmVySXNTYWZlSW50ZWdlciA9IE51bWJlci5pc1NhZmVJbnRlZ2VyOwogIGZ1bmN0aW9uIGdldFN5c3RlbUVycm9yTmFtZShjb2RlKSB7CiAgICBpZiAodHlwZW9mIGNvZGUgIT09ICJudW1iZXIiKSB7CiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSgiZXJyIiwgIm51bWJlciIsIGNvZGUpOwogICAgfQogICAgaWYgKGNvZGUgPj0gMCB8fCAhTnVtYmVySXNTYWZlSW50ZWdlcihjb2RlKSkgewogICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRSgiZXJyIiwgImEgbmVnYXRpdmUgaW50ZWdlciIsIGNvZGUpOwogICAgfQogICAgcmV0dXJuIGVycm9yTWFwLmdldChjb2RlKT8uWzBdOwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL2Vycm9ycy50cwogIHZhciB7CiAgICBlcnJubzogeyBFTk9URElSLCBFTk9FTlQgfQogIH0gPSBvczI7CiAgdmFyIGtJc05vZGVFcnJvciA9IFN5bWJvbCgia0lzTm9kZUVycm9yIik7CiAgdmFyIGNsYXNzUmVnRXhwMiA9IC9eKFtBLVpdW2EtejAtOV0qKSskLzsKICB2YXIga1R5cGVzID0gWwogICAgInN0cmluZyIsCiAgICAiZnVuY3Rpb24iLAogICAgIm51bWJlciIsCiAgICAib2JqZWN0IiwKICAgICJGdW5jdGlvbiIsCiAgICAiT2JqZWN0IiwKICAgICJib29sZWFuIiwKICAgICJiaWdpbnQiLAogICAgInN5bWJvbCIKICBdOwogIHZhciBBYm9ydEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoIlRoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQiKTsKICAgICAgdGhpcy5jb2RlID0gIkFCT1JUX0VSUiI7CiAgICAgIHRoaXMubmFtZSA9ICJBYm9ydEVycm9yIjsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGFkZE51bWVyaWNhbFNlcGFyYXRvcih2YWwpIHsKICAgIGxldCByZXMgPSAiIjsKICAgIGxldCBpNCA9IHZhbC5sZW5ndGg7CiAgICBjb25zdCBzdGFydCA9IHZhbFswXSA9PT0gIi0iID8gMSA6IDA7CiAgICBmb3IgKDsgaTQgPj0gc3RhcnQgKyA0OyBpNCAtPSAzKSB7CiAgICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaTQgLSAzLCBpNCl9JHtyZXN9YDsKICAgIH0KICAgIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaTQpfSR7cmVzfWA7CiAgfQogIHZhciBjYXB0dXJlTGFyZ2VyU3RhY2tUcmFjZSA9IGhpZGVTdGFja0ZyYW1lcygKICAgIGZ1bmN0aW9uIGNhcHR1cmVMYXJnZXJTdGFja1RyYWNlMihlcnIpIHsKICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyKTsKICAgICAgcmV0dXJuIGVycjsKICAgIH0KICApOwogIHZhciB1dkV4Y2VwdGlvbldpdGhIb3N0UG9ydCA9IGhpZGVTdGFja0ZyYW1lcygKICAgIGZ1bmN0aW9uIHV2RXhjZXB0aW9uV2l0aEhvc3RQb3J0MihlcnIsIHN5c2NhbGwsIGFkZHJlc3MsIHBvcnQpIHsKICAgICAgY29uc3QgeyAwOiBjb2RlLCAxOiB1dm1zZyB9ID0gdXZFcnJtYXBHZXQoZXJyKSB8fCB1dlVubWFwcGVkRXJyb3I7CiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtzeXNjYWxsfSAke2NvZGV9OiAke3V2bXNnfWA7CiAgICAgIGxldCBkZXRhaWxzID0gIiI7CiAgICAgIGlmIChwb3J0ICYmIHBvcnQgPiAwKSB7CiAgICAgICAgZGV0YWlscyA9IGAgJHthZGRyZXNzfToke3BvcnR9YDsKICAgICAgfSBlbHNlIGlmIChhZGRyZXNzKSB7CiAgICAgICAgZGV0YWlscyA9IGAgJHthZGRyZXNzfWA7CiAgICAgIH0KICAgICAgY29uc3QgZXggPSBuZXcgRXJyb3IoYCR7bWVzc2FnZX0ke2RldGFpbHN9YCk7CiAgICAgIGV4LmNvZGUgPSBjb2RlOwogICAgICBleC5lcnJubyA9IGVycjsKICAgICAgZXguc3lzY2FsbCA9IHN5c2NhbGw7CiAgICAgIGV4LmFkZHJlc3MgPSBhZGRyZXNzOwogICAgICBpZiAocG9ydCkgewogICAgICAgIGV4LnBvcnQgPSBwb3J0OwogICAgICB9CiAgICAgIHJldHVybiBjYXB0dXJlTGFyZ2VyU3RhY2tUcmFjZShleCk7CiAgICB9CiAgKTsKICB2YXIgZXJybm9FeGNlcHRpb24gPSBoaWRlU3RhY2tGcmFtZXMoZnVuY3Rpb24gZXJybm9FeGNlcHRpb24yKGVyciwgc3lzY2FsbCwgb3JpZ2luYWwpIHsKICAgIGNvbnN0IGNvZGUgPSBnZXRTeXN0ZW1FcnJvck5hbWUoZXJyKTsKICAgIGNvbnN0IG1lc3NhZ2UgPSBvcmlnaW5hbCA/IGAke3N5c2NhbGx9ICR7Y29kZX0gJHtvcmlnaW5hbH1gIDogYCR7c3lzY2FsbH0gJHtjb2RlfWA7CiAgICBjb25zdCBleCA9IG5ldyBFcnJvcihtZXNzYWdlKTsKICAgIGV4LmVycm5vID0gZXJyOwogICAgZXguY29kZSA9IGNvZGU7CiAgICBleC5zeXNjYWxsID0gc3lzY2FsbDsKICAgIHJldHVybiBjYXB0dXJlTGFyZ2VyU3RhY2tUcmFjZShleCk7CiAgfSk7CiAgZnVuY3Rpb24gdXZFcnJtYXBHZXQobmFtZSkgewogICAgcmV0dXJuIGVycm9yTWFwLmdldChuYW1lKTsKICB9CiAgdmFyIHV2VW5tYXBwZWRFcnJvciA9IFsiVU5LTk9XTiIsICJ1bmtub3duIGVycm9yIl07CiAgdmFyIHV2RXhjZXB0aW9uID0gaGlkZVN0YWNrRnJhbWVzKGZ1bmN0aW9uIHV2RXhjZXB0aW9uMihjdHgpIHsKICAgIGNvbnN0IHsgMDogY29kZSwgMTogdXZtc2cgfSA9IHV2RXJybWFwR2V0KGN0eC5lcnJubykgfHwgdXZVbm1hcHBlZEVycm9yOwogICAgbGV0IG1lc3NhZ2UgPSBgJHtjb2RlfTogJHtjdHgubWVzc2FnZSB8fCB1dm1zZ30sICR7Y3R4LnN5c2NhbGx9YDsKICAgIGxldCBwYXRoNTsKICAgIGxldCBkZXN0OwogICAgaWYgKGN0eC5wYXRoKSB7CiAgICAgIHBhdGg1ID0gY3R4LnBhdGgudG9TdHJpbmcoKTsKICAgICAgbWVzc2FnZSArPSBgICcke3BhdGg1fSdgOwogICAgfQogICAgaWYgKGN0eC5kZXN0KSB7CiAgICAgIGRlc3QgPSBjdHguZGVzdC50b1N0cmluZygpOwogICAgICBtZXNzYWdlICs9IGAgLT4gJyR7ZGVzdH0nYDsKICAgIH0KICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihtZXNzYWdlKTsKICAgIGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhjdHgpKSB7CiAgICAgIGlmIChwcm9wID09PSAibWVzc2FnZSIgfHwgcHJvcCA9PT0gInBhdGgiIHx8IHByb3AgPT09ICJkZXN0IikgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGVycltwcm9wXSA9IGN0eFtwcm9wXTsKICAgIH0KICAgIGVyci5jb2RlID0gY29kZTsKICAgIGlmIChwYXRoNSkgewogICAgICBlcnIucGF0aCA9IHBhdGg1OwogICAgfQogICAgaWYgKGRlc3QpIHsKICAgICAgZXJyLmRlc3QgPSBkZXN0OwogICAgfQogICAgcmV0dXJuIGNhcHR1cmVMYXJnZXJTdGFja1RyYWNlKGVycik7CiAgfSk7CiAgdmFyIGV4Y2VwdGlvbldpdGhIb3N0UG9ydCA9IGhpZGVTdGFja0ZyYW1lcygKICAgIGZ1bmN0aW9uIGV4Y2VwdGlvbldpdGhIb3N0UG9ydDIoZXJyLCBzeXNjYWxsLCBhZGRyZXNzLCBwb3J0LCBhZGRpdGlvbmFsKSB7CiAgICAgIGNvbnN0IGNvZGUgPSBnZXRTeXN0ZW1FcnJvck5hbWUoZXJyKTsKICAgICAgbGV0IGRldGFpbHMgPSAiIjsKICAgICAgaWYgKHBvcnQgJiYgcG9ydCA+IDApIHsKICAgICAgICBkZXRhaWxzID0gYCAke2FkZHJlc3N9OiR7cG9ydH1gOwogICAgICB9IGVsc2UgaWYgKGFkZHJlc3MpIHsKICAgICAgICBkZXRhaWxzID0gYCAke2FkZHJlc3N9YDsKICAgICAgfQogICAgICBpZiAoYWRkaXRpb25hbCkgewogICAgICAgIGRldGFpbHMgKz0gYCAtIExvY2FsICgke2FkZGl0aW9uYWx9KWA7CiAgICAgIH0KICAgICAgY29uc3QgZXggPSBuZXcgRXJyb3IoYCR7c3lzY2FsbH0gJHtjb2RlfSR7ZGV0YWlsc31gKTsKICAgICAgZXguZXJybm8gPSBlcnI7CiAgICAgIGV4LmNvZGUgPSBjb2RlOwogICAgICBleC5zeXNjYWxsID0gc3lzY2FsbDsKICAgICAgZXguYWRkcmVzcyA9IGFkZHJlc3M7CiAgICAgIGlmIChwb3J0KSB7CiAgICAgICAgZXgucG9ydCA9IHBvcnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNhcHR1cmVMYXJnZXJTdGFja1RyYWNlKGV4KTsKICAgIH0KICApOwogIHZhciBkbnNFeGNlcHRpb24gPSBoaWRlU3RhY2tGcmFtZXMoZnVuY3Rpb24oY29kZSwgc3lzY2FsbCwgaG9zdG5hbWUpIHsKICAgIGxldCBlcnJubzsKICAgIGlmICh0eXBlb2YgY29kZSA9PT0gIm51bWJlciIpIHsKICAgICAgZXJybm8gPSBjb2RlOwogICAgICBpZiAoY29kZSA9PT0gY29kZU1hcC5nZXQoIkVBSV9OT0RBVEEiKSB8fCBjb2RlID09PSBjb2RlTWFwLmdldCgiRUFJX05PTkFNRSIpKSB7CiAgICAgICAgY29kZSA9ICJFTk9URk9VTkQiOwogICAgICB9IGVsc2UgewogICAgICAgIGNvZGUgPSBnZXRTeXN0ZW1FcnJvck5hbWUoY29kZSk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtzeXNjYWxsfSAke2NvZGV9JHtob3N0bmFtZSA/IGAgJHtob3N0bmFtZX1gIDogIiJ9YDsKICAgIGNvbnN0IGV4ID0gbmV3IEVycm9yKG1lc3NhZ2UpOwogICAgZXguZXJybm8gPSBlcnJubzsKICAgIGV4LmNvZGUgPSBjb2RlOwogICAgZXguc3lzY2FsbCA9IHN5c2NhbGw7CiAgICBpZiAoaG9zdG5hbWUpIHsKICAgICAgZXguaG9zdG5hbWUgPSBob3N0bmFtZTsKICAgIH0KICAgIHJldHVybiBjYXB0dXJlTGFyZ2VyU3RhY2tUcmFjZShleCk7CiAgfSk7CiAgdmFyIE5vZGVFcnJvckFic3RyYWN0aW9uID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7CiAgICBjb25zdHJ1Y3RvcihuYW1lLCBjb2RlLCBtZXNzYWdlKSB7CiAgICAgIHN1cGVyKG1lc3NhZ2UpOwogICAgICB0aGlzLmNvZGUgPSBjb2RlOwogICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICB0aGlzLnN0YWNrID0gdGhpcy5zdGFjayAmJiBgJHtuYW1lfSBbJHt0aGlzLmNvZGV9XSR7dGhpcy5zdGFjay5zbGljZSgyMCl9YDsKICAgIH0KICAgIHRvU3RyaW5nKCkgewogICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHt0aGlzLmNvZGV9XTogJHt0aGlzLm1lc3NhZ2V9YDsKICAgIH0KICB9OwogIHZhciBOb2RlRXJyb3IgPSBjbGFzcyBleHRlbmRzIE5vZGVFcnJvckFic3RyYWN0aW9uIHsKICAgIGNvbnN0cnVjdG9yKGNvZGUsIG1lc3NhZ2UpIHsKICAgICAgc3VwZXIoRXJyb3IucHJvdG90eXBlLm5hbWUsIGNvZGUsIG1lc3NhZ2UpOwogICAgfQogIH07CiAgdmFyIE5vZGVSYW5nZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBOb2RlRXJyb3JBYnN0cmFjdGlvbiB7CiAgICBjb25zdHJ1Y3Rvcihjb2RlLCBtZXNzYWdlKSB7CiAgICAgIHN1cGVyKFJhbmdlRXJyb3IucHJvdG90eXBlLm5hbWUsIGNvZGUsIG1lc3NhZ2UpOwogICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgUmFuZ2VFcnJvci5wcm90b3R5cGUpOwogICAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7dGhpcy5jb2RlfV06ICR7dGhpcy5tZXNzYWdlfWA7CiAgICAgIH07CiAgICB9CiAgfTsKICB2YXIgTm9kZVR5cGVFcnJvciA9IGNsYXNzIGV4dGVuZHMgTm9kZUVycm9yQWJzdHJhY3Rpb24gewogICAgY29uc3RydWN0b3IoY29kZSwgbWVzc2FnZSkgewogICAgICBzdXBlcihUeXBlRXJyb3IucHJvdG90eXBlLm5hbWUsIGNvZGUsIG1lc3NhZ2UpOwogICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVHlwZUVycm9yLnByb3RvdHlwZSk7CiAgICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSBbJHt0aGlzLmNvZGV9XTogJHt0aGlzLm1lc3NhZ2V9YDsKICAgICAgfTsKICAgIH0KICB9OwogIHZhciBOb2RlU3lzdGVtRXJyb3IgPSBjbGFzcyBleHRlbmRzIE5vZGVFcnJvckFic3RyYWN0aW9uIHsKICAgIGNvbnN0cnVjdG9yKGtleSwgY29udGV4dCwgbXNnUHJlZml4KSB7CiAgICAgIGxldCBtZXNzYWdlID0gYCR7bXNnUHJlZml4fTogJHtjb250ZXh0LnN5c2NhbGx9IHJldHVybmVkICR7Y29udGV4dC5jb2RlfSAoJHtjb250ZXh0Lm1lc3NhZ2V9KWA7CiAgICAgIGlmIChjb250ZXh0LnBhdGggIT09IHZvaWQgMCkgewogICAgICAgIG1lc3NhZ2UgKz0gYCAke2NvbnRleHQucGF0aH1gOwogICAgICB9CiAgICAgIGlmIChjb250ZXh0LmRlc3QgIT09IHZvaWQgMCkgewogICAgICAgIG1lc3NhZ2UgKz0gYCA9PiAke2NvbnRleHQuZGVzdH1gOwogICAgICB9CiAgICAgIHN1cGVyKCJTeXN0ZW1FcnJvciIsIGtleSwgbWVzc2FnZSk7CiAgICAgIGNhcHR1cmVMYXJnZXJTdGFja1RyYWNlKHRoaXMpOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7CiAgICAgICAgW2tJc05vZGVFcnJvcl06IHsKICAgICAgICAgIHZhbHVlOiB0cnVlLAogICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsCiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICB9LAogICAgICAgIGluZm86IHsKICAgICAgICAgIHZhbHVlOiBjb250ZXh0LAogICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgZXJybm86IHsKICAgICAgICAgIGdldCgpIHsKICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJybm87CiAgICAgICAgICB9LAogICAgICAgICAgc2V0OiAodmFsdWUpID0+IHsKICAgICAgICAgICAgY29udGV4dC5lcnJubyA9IHZhbHVlOwogICAgICAgICAgfSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICB9LAogICAgICAgIHN5c2NhbGw6IHsKICAgICAgICAgIGdldCgpIHsKICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuc3lzY2FsbDsKICAgICAgICAgIH0sCiAgICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4gewogICAgICAgICAgICBjb250ZXh0LnN5c2NhbGwgPSB2YWx1ZTsKICAgICAgICAgIH0sCiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgfQogICAgICB9KTsKICAgICAgaWYgKGNvbnRleHQucGF0aCAhPT0gdm9pZCAwKSB7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJwYXRoIiwgewogICAgICAgICAgZ2V0KCkgewogICAgICAgICAgICByZXR1cm4gY29udGV4dC5wYXRoOwogICAgICAgICAgfSwKICAgICAgICAgIHNldDogKHZhbHVlKSA9PiB7CiAgICAgICAgICAgIGNvbnRleHQucGF0aCA9IHZhbHVlOwogICAgICAgICAgfSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoY29udGV4dC5kZXN0ICE9PSB2b2lkIDApIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgImRlc3QiLCB7CiAgICAgICAgICBnZXQoKSB7CiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmRlc3Q7CiAgICAgICAgICB9LAogICAgICAgICAgc2V0OiAodmFsdWUpID0+IHsKICAgICAgICAgICAgY29udGV4dC5kZXN0ID0gdmFsdWU7CiAgICAgICAgICB9LAogICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICB0b1N0cmluZygpIHsKICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7dGhpcy5jb2RlfV06ICR7dGhpcy5tZXNzYWdlfWA7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBtYWtlU3lzdGVtRXJyb3JXaXRoQ29kZShrZXksIG1zZ1ByZml4KSB7CiAgICByZXR1cm4gY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgTm9kZVN5c3RlbUVycm9yIHsKICAgICAgY29uc3RydWN0b3IoY3R4KSB7CiAgICAgICAgc3VwZXIoa2V5LCBjdHgsIG1zZ1ByZml4KTsKICAgICAgfQogICAgfTsKICB9CiAgdmFyIEVSUl9GU19FSVNESVIgPSBtYWtlU3lzdGVtRXJyb3JXaXRoQ29kZSgKICAgICJFUlJfRlNfRUlTRElSIiwKICAgICJQYXRoIGlzIGEgZGlyZWN0b3J5IgogICk7CiAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZEFyZ1R5cGUobmFtZSwgZXhwZWN0ZWQpIHsKICAgIGV4cGVjdGVkID0gQXJyYXkuaXNBcnJheShleHBlY3RlZCkgPyBleHBlY3RlZCA6IFtleHBlY3RlZF07CiAgICBsZXQgbXNnID0gIlRoZSAiOwogICAgaWYgKG5hbWUuZW5kc1dpdGgoIiBhcmd1bWVudCIpKSB7CiAgICAgIG1zZyArPSBgJHtuYW1lfSBgOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgdHlwZSA9IG5hbWUuaW5jbHVkZXMoIi4iKSA/ICJwcm9wZXJ0eSIgOiAiYXJndW1lbnQiOwogICAgICBtc2cgKz0gYCIke25hbWV9IiAke3R5cGV9IGA7CiAgICB9CiAgICBtc2cgKz0gIm11c3QgYmUgIjsKICAgIGNvbnN0IHR5cGVzID0gW107CiAgICBjb25zdCBpbnN0YW5jZXMgPSBbXTsKICAgIGNvbnN0IG90aGVyID0gW107CiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGV4cGVjdGVkKSB7CiAgICAgIGlmIChrVHlwZXMuaW5jbHVkZXModmFsdWUpKSB7CiAgICAgICAgdHlwZXMucHVzaCh2YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpKTsKICAgICAgfSBlbHNlIGlmIChjbGFzc1JlZ0V4cDIudGVzdCh2YWx1ZSkpIHsKICAgICAgICBpbnN0YW5jZXMucHVzaCh2YWx1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3RoZXIucHVzaCh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChpbnN0YW5jZXMubGVuZ3RoID4gMCkgewogICAgICBjb25zdCBwb3MgPSB0eXBlcy5pbmRleE9mKCJvYmplY3QiKTsKICAgICAgaWYgKHBvcyAhPT0gLTEpIHsKICAgICAgICB0eXBlcy5zcGxpY2UocG9zLCAxKTsKICAgICAgICBpbnN0YW5jZXMucHVzaCgiT2JqZWN0Iik7CiAgICAgIH0KICAgIH0KICAgIGlmICh0eXBlcy5sZW5ndGggPiAwKSB7CiAgICAgIGlmICh0eXBlcy5sZW5ndGggPiAyKSB7CiAgICAgICAgY29uc3QgbGFzdCA9IHR5cGVzLnBvcCgpOwogICAgICAgIG1zZyArPSBgb25lIG9mIHR5cGUgJHt0eXBlcy5qb2luKCIsICIpfSwgb3IgJHtsYXN0fWA7CiAgICAgIH0gZWxzZSBpZiAodHlwZXMubGVuZ3RoID09PSAyKSB7CiAgICAgICAgbXNnICs9IGBvbmUgb2YgdHlwZSAke3R5cGVzWzBdfSBvciAke3R5cGVzWzFdfWA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbXNnICs9IGBvZiB0eXBlICR7dHlwZXNbMF19YDsKICAgICAgfQogICAgICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDAgfHwgb3RoZXIubGVuZ3RoID4gMCkgewogICAgICAgIG1zZyArPSAiIG9yICI7CiAgICAgIH0KICAgIH0KICAgIGlmIChpbnN0YW5jZXMubGVuZ3RoID4gMCkgewogICAgICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDIpIHsKICAgICAgICBjb25zdCBsYXN0ID0gaW5zdGFuY2VzLnBvcCgpOwogICAgICAgIG1zZyArPSBgYW4gaW5zdGFuY2Ugb2YgJHtpbnN0YW5jZXMuam9pbigiLCAiKX0sIG9yICR7bGFzdH1gOwogICAgICB9IGVsc2UgewogICAgICAgIG1zZyArPSBgYW4gaW5zdGFuY2Ugb2YgJHtpbnN0YW5jZXNbMF19YDsKICAgICAgICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgbXNnICs9IGAgb3IgJHtpbnN0YW5jZXNbMV19YDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG90aGVyLmxlbmd0aCA+IDApIHsKICAgICAgICBtc2cgKz0gIiBvciAiOwogICAgICB9CiAgICB9CiAgICBpZiAob3RoZXIubGVuZ3RoID4gMCkgewogICAgICBpZiAob3RoZXIubGVuZ3RoID4gMikgewogICAgICAgIGNvbnN0IGxhc3QgPSBvdGhlci5wb3AoKTsKICAgICAgICBtc2cgKz0gYG9uZSBvZiAke290aGVyLmpvaW4oIiwgIil9LCBvciAke2xhc3R9YDsKICAgICAgfSBlbHNlIGlmIChvdGhlci5sZW5ndGggPT09IDIpIHsKICAgICAgICBtc2cgKz0gYG9uZSBvZiAke290aGVyWzBdfSBvciAke290aGVyWzFdfWA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG90aGVyWzBdLnRvTG93ZXJDYXNlKCkgIT09IG90aGVyWzBdKSB7CiAgICAgICAgICBtc2cgKz0gImFuICI7CiAgICAgICAgfQogICAgICAgIG1zZyArPSBgJHtvdGhlclswXX1gOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbXNnOwogIH0KICB2YXIgRVJSX0lOVkFMSURfQVJHX1RZUEVfUkFOR0UgPSBjbGFzcyBleHRlbmRzIE5vZGVSYW5nZUVycm9yIHsKICAgIGNvbnN0cnVjdG9yKG5hbWUsIGV4cGVjdGVkLCBhY3R1YWwpIHsKICAgICAgY29uc3QgbXNnID0gY3JlYXRlSW52YWxpZEFyZ1R5cGUobmFtZSwgZXhwZWN0ZWQpOwogICAgICBzdXBlcigiRVJSX0lOVkFMSURfQVJHX1RZUEUiLCBgJHttc2d9LiR7aW52YWxpZEFyZ1R5cGVIZWxwZXIoYWN0dWFsKX1gKTsKICAgIH0KICB9OwogIHZhciBFUlJfSU5WQUxJRF9BUkdfVFlQRSA9IGNsYXNzIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7CiAgICBjb25zdHJ1Y3RvcihuYW1lLCBleHBlY3RlZCwgYWN0dWFsKSB7CiAgICAgIGNvbnN0IG1zZyA9IGNyZWF0ZUludmFsaWRBcmdUeXBlKG5hbWUsIGV4cGVjdGVkKTsKICAgICAgc3VwZXIoIkVSUl9JTlZBTElEX0FSR19UWVBFIiwgYCR7bXNnfS4ke2ludmFsaWRBcmdUeXBlSGVscGVyKGFjdHVhbCl9YCk7CiAgICB9CiAgfTsKICBFUlJfSU5WQUxJRF9BUkdfVFlQRS5SYW5nZUVycm9yID0gRVJSX0lOVkFMSURfQVJHX1RZUEVfUkFOR0U7CiAgdmFyIEVSUl9JTlZBTElEX0FSR19WQUxVRV9SQU5HRSA9IGNsYXNzIGV4dGVuZHMgTm9kZVJhbmdlRXJyb3IgewogICAgY29uc3RydWN0b3IobmFtZSwgdmFsdWUsIHJlYXNvbiA9ICJpcyBpbnZhbGlkIikgewogICAgICBjb25zdCB0eXBlID0gbmFtZS5pbmNsdWRlcygiLiIpID8gInByb3BlcnR5IiA6ICJhcmd1bWVudCI7CiAgICAgIGNvbnN0IGluc3BlY3RlZCA9IGluc3BlY3QodmFsdWUpOwogICAgICBzdXBlcigKICAgICAgICAiRVJSX0lOVkFMSURfQVJHX1ZBTFVFIiwKICAgICAgICBgVGhlICR7dHlwZX0gJyR7bmFtZX0nICR7cmVhc29ufS4gUmVjZWl2ZWQgJHtpbnNwZWN0ZWR9YAogICAgICApOwogICAgfQogIH07CiAgdmFyIEVSUl9JTlZBTElEX0FSR19WQUxVRSA9IGNsYXNzIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7CiAgICBjb25zdHJ1Y3RvcihuYW1lLCB2YWx1ZSwgcmVhc29uID0gImlzIGludmFsaWQiKSB7CiAgICAgIGNvbnN0IHR5cGUgPSBuYW1lLmluY2x1ZGVzKCIuIikgPyAicHJvcGVydHkiIDogImFyZ3VtZW50IjsKICAgICAgY29uc3QgaW5zcGVjdGVkID0gaW5zcGVjdCh2YWx1ZSk7CiAgICAgIHN1cGVyKAogICAgICAgICJFUlJfSU5WQUxJRF9BUkdfVkFMVUUiLAogICAgICAgIGBUaGUgJHt0eXBlfSAnJHtuYW1lfScgJHtyZWFzb259LiBSZWNlaXZlZCAke2luc3BlY3RlZH1gCiAgICAgICk7CiAgICB9CiAgfTsKICBFUlJfSU5WQUxJRF9BUkdfVkFMVUUuUmFuZ2VFcnJvciA9IEVSUl9JTlZBTElEX0FSR19WQUxVRV9SQU5HRTsKICBmdW5jdGlvbiBpbnZhbGlkQXJnVHlwZUhlbHBlcihpbnB1dCkgewogICAgaWYgKGlucHV0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIGAgUmVjZWl2ZWQgJHtpbnB1dH1gOwogICAgfQogICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gImZ1bmN0aW9uIiAmJiBpbnB1dC5uYW1lKSB7CiAgICAgIHJldHVybiBgIFJlY2VpdmVkIGZ1bmN0aW9uICR7aW5wdXQubmFtZX1gOwogICAgfQogICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gIm9iamVjdCIpIHsKICAgICAgaWYgKGlucHV0LmNvbnN0cnVjdG9yICYmIGlucHV0LmNvbnN0cnVjdG9yLm5hbWUpIHsKICAgICAgICByZXR1cm4gYCBSZWNlaXZlZCBhbiBpbnN0YW5jZSBvZiAke2lucHV0LmNvbnN0cnVjdG9yLm5hbWV9YDsKICAgICAgfQogICAgICByZXR1cm4gYCBSZWNlaXZlZCAke2luc3BlY3QoaW5wdXQsIHsgZGVwdGg6IC0xIH0pfWA7CiAgICB9CiAgICBsZXQgaW5zcGVjdGVkID0gaW5zcGVjdChpbnB1dCwgeyBjb2xvcnM6IGZhbHNlIH0pOwogICAgaWYgKGluc3BlY3RlZC5sZW5ndGggPiAyNSkgewogICAgICBpbnNwZWN0ZWQgPSBgJHtpbnNwZWN0ZWQuc2xpY2UoMCwgMjUpfS4uLmA7CiAgICB9CiAgICByZXR1cm4gYCBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGlucHV0fSAoJHtpbnNwZWN0ZWR9KWA7CiAgfQogIHZhciBFUlJfT1VUX09GX1JBTkdFID0gY2xhc3MgZXh0ZW5kcyBSYW5nZUVycm9yIHsKICAgIGNvbnN0cnVjdG9yKHN0cjIsIHJhbmdlLCBpbnB1dCwgcmVwbGFjZURlZmF1bHRCb29sZWFuID0gZmFsc2UpIHsKICAgICAgYXNzZXJ0MyhyYW5nZSwgJ01pc3NpbmcgInJhbmdlIiBhcmd1bWVudCcpOwogICAgICBsZXQgbXNnID0gcmVwbGFjZURlZmF1bHRCb29sZWFuID8gc3RyMiA6IGBUaGUgdmFsdWUgb2YgIiR7c3RyMn0iIGlzIG91dCBvZiByYW5nZS5gOwogICAgICBsZXQgcmVjZWl2ZWQ7CiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGlucHV0KSAmJiBNYXRoLmFicyhpbnB1dCkgPiAyICoqIDMyKSB7CiAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IoU3RyaW5nKGlucHV0KSk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAiYmlnaW50IikgewogICAgICAgIHJlY2VpdmVkID0gU3RyaW5nKGlucHV0KTsKICAgICAgICBpZiAoaW5wdXQgPiAybiAqKiAzMm4gfHwgaW5wdXQgPCAtKDJuICoqIDMybikpIHsKICAgICAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHJlY2VpdmVkKTsKICAgICAgICB9CiAgICAgICAgcmVjZWl2ZWQgKz0gIm4iOwogICAgICB9IGVsc2UgewogICAgICAgIHJlY2VpdmVkID0gaW5zcGVjdChpbnB1dCk7CiAgICAgIH0KICAgICAgbXNnICs9IGAgSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gOwogICAgICBzdXBlcihtc2cpOwogICAgICB0aGlzLmNvZGUgPSAiRVJSX09VVF9PRl9SQU5HRSI7CiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gdGhpczsKICAgICAgdGhpcy5uYW1lID0gYCR7bmFtZX0gWyR7dGhpcy5jb2RlfV1gOwogICAgICB0aGlzLnN0YWNrOwogICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgfQogIH07CiAgdmFyIEVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyA9IGNsYXNzIGV4dGVuZHMgTm9kZVJhbmdlRXJyb3IgewogICAgY29uc3RydWN0b3IobmFtZSkgewogICAgICBzdXBlcigKICAgICAgICAiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTIiwKICAgICAgICBuYW1lID8gYCIke25hbWV9IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgIDogIkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiCiAgICAgICk7CiAgICB9CiAgfTsKICB2YXIgRVJSX0lOVkFMSURfQ0FMTEJBQ0sgPSBjbGFzcyBleHRlbmRzIE5vZGVUeXBlRXJyb3IgewogICAgY29uc3RydWN0b3Iob2JqZWN0KSB7CiAgICAgIHN1cGVyKAogICAgICAgICJFUlJfSU5WQUxJRF9DQUxMQkFDSyIsCiAgICAgICAgYENhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi4gUmVjZWl2ZWQgJHtpbnNwZWN0KG9iamVjdCl9YAogICAgICApOwogICAgfQogIH07CiAgdmFyIEVSUl9JTlZBTElEX0NVUlNPUl9QT1MgPSBjbGFzcyBleHRlbmRzIE5vZGVUeXBlRXJyb3IgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKAogICAgICAgICJFUlJfSU5WQUxJRF9DVVJTT1JfUE9TIiwKICAgICAgICBgQ2Fubm90IHNldCBjdXJzb3Igcm93IHdpdGhvdXQgc2V0dGluZyBpdHMgY29sdW1uYAogICAgICApOwogICAgfQogIH07CiAgdmFyIEVSUl9JUENfQ0hBTk5FTF9DTE9TRUQgPSBjbGFzcyBleHRlbmRzIE5vZGVFcnJvciB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoIkVSUl9JUENfQ0hBTk5FTF9DTE9TRUQiLCBgQ2hhbm5lbCBjbG9zZWRgKTsKICAgIH0KICB9OwogIHZhciBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCA9IGNsYXNzIGV4dGVuZHMgTm9kZUVycm9yIHsKICAgIGNvbnN0cnVjdG9yKHgyMSkgewogICAgICBzdXBlcigiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLCBgVGhlICR7eDIxfSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkYCk7CiAgICB9CiAgfTsKICB2YXIgRVJSX01JU1NJTkdfQVJHUyA9IGNsYXNzIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7CiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7CiAgICAgIGxldCBtc2cgPSAiVGhlICI7CiAgICAgIGNvbnN0IGxlbiA9IGFyZ3MubGVuZ3RoOwogICAgICBjb25zdCB3cmFwMiA9IChhNCkgPT4gYCIke2E0fSJgOwogICAgICBhcmdzID0gYXJncy5tYXAoCiAgICAgICAgKGE0KSA9PiBBcnJheS5pc0FycmF5KGE0KSA/IGE0Lm1hcCh3cmFwMikuam9pbigiIG9yICIpIDogd3JhcDIoYTQpCiAgICAgICk7CiAgICAgIHN3aXRjaCAobGVuKSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgbXNnICs9IGAke2FyZ3NbMF19IGFyZ3VtZW50YDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgIG1zZyArPSBgJHthcmdzWzBdfSBhbmQgJHthcmdzWzFdfSBhcmd1bWVudHNgOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIG1zZyArPSBhcmdzLnNsaWNlKDAsIGxlbiAtIDEpLmpvaW4oIiwgIik7CiAgICAgICAgICBtc2cgKz0gYCwgYW5kICR7YXJnc1tsZW4gLSAxXX0gYXJndW1lbnRzYDsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN1cGVyKCJFUlJfTUlTU0lOR19BUkdTIiwgYCR7bXNnfSBtdXN0IGJlIHNwZWNpZmllZGApOwogICAgfQogIH07CiAgdmFyIEVSUl9NVUxUSVBMRV9DQUxMQkFDSyA9IGNsYXNzIGV4dGVuZHMgTm9kZUVycm9yIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiRVJSX01VTFRJUExFX0NBTExCQUNLIiwgYENhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lc2ApOwogICAgfQogIH07CiAgdmFyIEVSUl9TT0NLRVRfQkFEX1BPUlQgPSBjbGFzcyBleHRlbmRzIE5vZGVSYW5nZUVycm9yIHsKICAgIGNvbnN0cnVjdG9yKG5hbWUsIHBvcnQsIGFsbG93WmVybyA9IHRydWUpIHsKICAgICAgYXNzZXJ0MygKICAgICAgICB0eXBlb2YgYWxsb3daZXJvID09PSAiYm9vbGVhbiIsCiAgICAgICAgIlRoZSAnYWxsb3daZXJvJyBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4iCiAgICAgICk7CiAgICAgIGNvbnN0IG9wZXJhdG9yID0gYWxsb3daZXJvID8gIj49IiA6ICI+IjsKICAgICAgc3VwZXIoCiAgICAgICAgIkVSUl9TT0NLRVRfQkFEX1BPUlQiLAogICAgICAgIGAke25hbWV9IHNob3VsZCBiZSAke29wZXJhdG9yfSAwIGFuZCA8IDY1NTM2LiBSZWNlaXZlZCAke3BvcnR9LmAKICAgICAgKTsKICAgIH0KICB9OwogIHZhciBFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRUQgPSBjbGFzcyBleHRlbmRzIE5vZGVFcnJvciB7CiAgICBjb25zdHJ1Y3Rvcih4MjEpIHsKICAgICAgc3VwZXIoCiAgICAgICAgIkVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRCIsCiAgICAgICAgYENhbm5vdCBjYWxsICR7eDIxfSBhZnRlciBhIHN0cmVhbSB3YXMgZmluaXNoZWRgCiAgICAgICk7CiAgICB9CiAgfTsKICB2YXIgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSA9IGNsYXNzIGV4dGVuZHMgTm9kZUVycm9yIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIGBDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlYCk7CiAgICB9CiAgfTsKICB2YXIgRVJSX1NUUkVBTV9ERVNUUk9ZRUQgPSBjbGFzcyBleHRlbmRzIE5vZGVFcnJvciB7CiAgICBjb25zdHJ1Y3Rvcih4MjEpIHsKICAgICAgc3VwZXIoCiAgICAgICAgIkVSUl9TVFJFQU1fREVTVFJPWUVEIiwKICAgICAgICBgQ2Fubm90IGNhbGwgJHt4MjF9IGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWRgCiAgICAgICk7CiAgICB9CiAgfTsKICB2YXIgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyA9IGNsYXNzIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMiLCBgTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW1gKTsKICAgIH0KICB9OwogIHZhciBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSA9IGNsYXNzIGV4dGVuZHMgTm9kZUVycm9yIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCBgUHJlbWF0dXJlIGNsb3NlYCk7CiAgICB9CiAgfTsKICB2YXIgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiA9IGNsYXNzIGV4dGVuZHMgTm9kZUVycm9yIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsIGBzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRmApOwogICAgfQogIH07CiAgdmFyIEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQgPSBjbGFzcyBleHRlbmRzIE5vZGVFcnJvciB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoCiAgICAgICAgIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLAogICAgICAgIGBzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudGAKICAgICAgKTsKICAgIH0KICB9OwogIHZhciBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCA9IGNsYXNzIGV4dGVuZHMgTm9kZUVycm9yIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCBgd3JpdGUgYWZ0ZXIgZW5kYCk7CiAgICB9CiAgfTsKICB2YXIgRVJSX1VOSEFORExFRF9FUlJPUiA9IGNsYXNzIGV4dGVuZHMgTm9kZUVycm9yIHsKICAgIGNvbnN0cnVjdG9yKHgyMSkgewogICAgICBzdXBlcigiRVJSX1VOSEFORExFRF9FUlJPUiIsIGBVbmhhbmRsZWQgZXJyb3IuICgke3gyMX0pYCk7CiAgICB9CiAgfTsKICB2YXIgRVJSX1VOS05PV05fRU5DT0RJTkcgPSBjbGFzcyBleHRlbmRzIE5vZGVUeXBlRXJyb3IgewogICAgY29uc3RydWN0b3IoeDIxKSB7CiAgICAgIHN1cGVyKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsIGBVbmtub3duIGVuY29kaW5nOiAke3gyMX1gKTsKICAgIH0KICB9OwogIHZhciBFUlJfVU5LTk9XTl9TSUdOQUwgPSBjbGFzcyBleHRlbmRzIE5vZGVUeXBlRXJyb3IgewogICAgY29uc3RydWN0b3IoeDIxKSB7CiAgICAgIHN1cGVyKCJFUlJfVU5LTk9XTl9TSUdOQUwiLCBgVW5rbm93biBzaWduYWw6ICR7eDIxfWApOwogICAgfQogIH07CiAgZnVuY3Rpb24gYnVpbGRSZXR1cm5Qcm9wZXJ0eVR5cGUodmFsdWUpIHsKICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7CiAgICAgIHJldHVybiBgaW5zdGFuY2Ugb2YgJHt2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lfWA7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gYHR5cGUgJHt0eXBlb2YgdmFsdWV9YDsKICAgIH0KICB9CiAgdmFyIEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSA9IGNsYXNzIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7CiAgICBjb25zdHJ1Y3RvcihpbnB1dCwgbmFtZSwgdmFsdWUpIHsKICAgICAgc3VwZXIoCiAgICAgICAgIkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSIsCiAgICAgICAgYEV4cGVjdGVkICR7aW5wdXR9IHRvIGJlIHJldHVybmVkIGZyb20gdGhlICIke25hbWV9IiBmdW5jdGlvbiBidXQgZ290ICR7YnVpbGRSZXR1cm5Qcm9wZXJ0eVR5cGUoCiAgICAgICAgICB2YWx1ZQogICAgICAgICl9LmAKICAgICAgKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGFnZ3JlZ2F0ZVR3b0Vycm9ycyhpbm5lckVycm9yLCBvdXRlckVycm9yKSB7CiAgICBpZiAoaW5uZXJFcnJvciAmJiBvdXRlckVycm9yICYmIGlubmVyRXJyb3IgIT09IG91dGVyRXJyb3IpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3V0ZXJFcnJvci5lcnJvcnMpKSB7CiAgICAgICAgb3V0ZXJFcnJvci5lcnJvcnMucHVzaChpbm5lckVycm9yKTsKICAgICAgICByZXR1cm4gb3V0ZXJFcnJvcjsKICAgICAgfQogICAgICBjb25zdCBlcnIgPSBuZXcgQWdncmVnYXRlRXJyb3IoCiAgICAgICAgWwogICAgICAgICAgb3V0ZXJFcnJvciwKICAgICAgICAgIGlubmVyRXJyb3IKICAgICAgICBdLAogICAgICAgIG91dGVyRXJyb3IubWVzc2FnZQogICAgICApOwogICAgICBlcnIuY29kZSA9IG91dGVyRXJyb3IuY29kZTsKICAgICAgcmV0dXJuIGVycjsKICAgIH0KICAgIHJldHVybiBpbm5lckVycm9yIHx8IG91dGVyRXJyb3I7CiAgfQogIGNvZGVzLkVSUl9JUENfQ0hBTk5FTF9DTE9TRUQgPSBFUlJfSVBDX0NIQU5ORUxfQ0xPU0VEOwogIGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFID0gRVJSX0lOVkFMSURfQVJHX1RZUEU7CiAgY29kZXMuRVJSX0lOVkFMSURfQVJHX1ZBTFVFID0gRVJSX0lOVkFMSURfQVJHX1ZBTFVFOwogIGNvZGVzLkVSUl9JTlZBTElEX0NBTExCQUNLID0gRVJSX0lOVkFMSURfQ0FMTEJBQ0s7CiAgY29kZXMuRVJSX09VVF9PRl9SQU5HRSA9IEVSUl9PVVRfT0ZfUkFOR0U7CiAgY29kZXMuRVJSX1NPQ0tFVF9CQURfUE9SVCA9IEVSUl9TT0NLRVRfQkFEX1BPUlQ7CiAgY29kZXMuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTID0gRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOwogIGNvZGVzLkVSUl9VTktOT1dOX0VOQ09ESU5HID0gRVJSX1VOS05PV05fRU5DT0RJTkc7CiAgdmFyIGdlbmVyaWNOb2RlRXJyb3IgPSBoaWRlU3RhY2tGcmFtZXMoCiAgICBmdW5jdGlvbiBnZW5lcmljTm9kZUVycm9yMihtZXNzYWdlLCBlcnJvclByb3BlcnRpZXMpIHsKICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKG1lc3NhZ2UpOwogICAgICBPYmplY3QuYXNzaWduKGVyciwgZXJyb3JQcm9wZXJ0aWVzKTsKICAgICAgcmV0dXJuIGVycjsKICAgIH0KICApOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvX2V2ZW50cy5tanMKICB2YXIga1JlamVjdGlvbiA9IFN5bWJvbC5mb3IoIm5vZGVqcy5yZWplY3Rpb24iKTsKICB2YXIga0NhcHR1cmUgPSBTeW1ib2woImtDYXB0dXJlIik7CiAgdmFyIGtFcnJvck1vbml0b3IgPSBTeW1ib2woImV2ZW50cy5lcnJvck1vbml0b3IiKTsKICB2YXIga01heEV2ZW50VGFyZ2V0TGlzdGVuZXJzID0gU3ltYm9sKCJldmVudHMubWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnMiKTsKICB2YXIga01heEV2ZW50VGFyZ2V0TGlzdGVuZXJzV2FybmVkID0gU3ltYm9sKAogICAgImV2ZW50cy5tYXhFdmVudFRhcmdldExpc3RlbmVyc1dhcm5lZCIKICApOwogIGZ1bmN0aW9uIEV2ZW50RW1pdHRlcihvcHRzKSB7CiAgICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMsIG9wdHMpOwogIH0KICB2YXIgZXZlbnRzX2RlZmF1bHQgPSBFdmVudEVtaXR0ZXI7CiAgRXZlbnRFbWl0dGVyLm9uID0gb24zOwogIEV2ZW50RW1pdHRlci5vbmNlID0gb25jZTM7CiAgRXZlbnRFbWl0dGVyLmdldEV2ZW50TGlzdGVuZXJzID0gZ2V0RXZlbnRMaXN0ZW5lcnM7CiAgRXZlbnRFbWl0dGVyLnNldE1heExpc3RlbmVycyA9IHNldE1heExpc3RlbmVyczsKICBFdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQyOwogIEV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7CiAgRXZlbnRFbWl0dGVyLnVzaW5nRG9tYWlucyA9IGZhbHNlOwogIEV2ZW50RW1pdHRlci5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sID0ga1JlamVjdGlvbjsKICB2YXIgY2FwdHVyZVJlamVjdGlvblN5bWJvbCA9IEV2ZW50RW1pdHRlci5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sOwogIHZhciBlcnJvck1vbml0b3IgPSBFdmVudEVtaXR0ZXIuZXJyb3JNb25pdG9yOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICJjYXB0dXJlUmVqZWN0aW9ucyIsIHsKICAgIGdldCgpIHsKICAgICAgcmV0dXJuIEV2ZW50RW1pdHRlci5wcm90b3R5cGVba0NhcHR1cmVdOwogICAgfSwKICAgIHNldCh2YWx1ZSkgewogICAgICB2YWxpZGF0ZUJvb2xlYW4odmFsdWUsICJFdmVudEVtaXR0ZXIuY2FwdHVyZVJlamVjdGlvbnMiKTsKICAgICAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZVtrQ2FwdHVyZV0gPSB2YWx1ZTsKICAgIH0sCiAgICBlbnVtZXJhYmxlOiB0cnVlCiAgfSk7CiAgRXZlbnRFbWl0dGVyLmVycm9yTW9uaXRvciA9IGtFcnJvck1vbml0b3I7CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlci5wcm90b3R5cGUsIGtDYXB0dXJlLCB7CiAgICB2YWx1ZTogZmFsc2UsCiAgICB3cml0YWJsZTogdHJ1ZSwKICAgIGVudW1lcmFibGU6IGZhbHNlCiAgfSk7CiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdm9pZCAwOwogIEV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDsKICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB2b2lkIDA7CiAgdmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDsKICBmdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7CiAgICB2YWxpZGF0ZUZ1bmN0aW9uKGxpc3RlbmVyLCAibGlzdGVuZXIiKTsKICB9CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCB7CiAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7CiAgICB9LAogICAgc2V0OiBmdW5jdGlvbihhcmcpIHsKICAgICAgaWYgKHR5cGVvZiBhcmcgIT09ICJudW1iZXIiIHx8IGFyZyA8IDAgfHwgTnVtYmVyLmlzTmFOKGFyZykpIHsKICAgICAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRSgKICAgICAgICAgICJkZWZhdWx0TWF4TGlzdGVuZXJzIiwKICAgICAgICAgICJhIG5vbi1uZWdhdGl2ZSBudW1iZXIiLAogICAgICAgICAgYXJnCiAgICAgICAgKTsKICAgICAgfQogICAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnOwogICAgfQogIH0pOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEV2ZW50RW1pdHRlciwgewogICAga01heEV2ZW50VGFyZ2V0TGlzdGVuZXJzOiB7CiAgICAgIHZhbHVlOiBrTWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnMsCiAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICBjb25maWd1cmFibGU6IGZhbHNlLAogICAgICB3cml0YWJsZTogZmFsc2UKICAgIH0sCiAgICBrTWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnNXYXJuZWQ6IHsKICAgICAgdmFsdWU6IGtNYXhFdmVudFRhcmdldExpc3RlbmVyc1dhcm5lZCwKICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCiAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgfQogIH0pOwogIGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuOCA9IGRlZmF1bHRNYXhMaXN0ZW5lcnMsIC4uLmV2ZW50VGFyZ2V0cykgewogICAgaWYgKHR5cGVvZiBuOCAhPT0gIm51bWJlciIgfHwgbjggPCAwIHx8IE51bWJlci5pc05hTihuOCkpIHsKICAgICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UoIm4iLCAiYSBub24tbmVnYXRpdmUgbnVtYmVyIiwgbjgpOwogICAgfQogICAgaWYgKGV2ZW50VGFyZ2V0cy5sZW5ndGggPT09IDApIHsKICAgICAgZGVmYXVsdE1heExpc3RlbmVycyA9IG44OwogICAgfSBlbHNlIHsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGV2ZW50VGFyZ2V0cy5sZW5ndGg7IGk0KyspIHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudFRhcmdldHNbaTRdOwogICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBFdmVudFRhcmdldCkgewogICAgICAgICAgdGFyZ2V0W2tNYXhFdmVudFRhcmdldExpc3RlbmVyc10gPSBuODsKICAgICAgICAgIHRhcmdldFtrTWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnNXYXJuZWRdID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGFyZ2V0LnNldE1heExpc3RlbmVycyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGFyZ2V0LnNldE1heExpc3RlbmVycyhuOCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgKICAgICAgICAgICAgImV2ZW50VGFyZ2V0cyIsCiAgICAgICAgICAgIFsiRXZlbnRFbWl0dGVyIiwgIkV2ZW50VGFyZ2V0Il0sCiAgICAgICAgICAgIHRhcmdldAogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbihvcHRzKSB7CiAgICBpZiAodGhpcy5fZXZlbnRzID09PSB2b2lkIDAgfHwgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykgewogICAgICB0aGlzLl9ldmVudHMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwOwogICAgfQogICAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHZvaWQgMDsKICAgIGlmIChvcHRzPy5jYXB0dXJlUmVqZWN0aW9ucykgewogICAgICB2YWxpZGF0ZUJvb2xlYW4ob3B0cy5jYXB0dXJlUmVqZWN0aW9ucywgIm9wdGlvbnMuY2FwdHVyZVJlamVjdGlvbnMiKTsKICAgICAgdGhpc1trQ2FwdHVyZV0gPSBCb29sZWFuKG9wdHMuY2FwdHVyZVJlamVjdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgdGhpc1trQ2FwdHVyZV0gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlW2tDYXB0dXJlXTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGFkZENhdGNoKHRoYXQsIHByb21pc2UsIHR5cGUsIGFyZ3MpIHsKICAgIGlmICghdGhhdFtrQ2FwdHVyZV0pIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdHJ5IHsKICAgICAgY29uc3QgdGhlbiA9IHByb21pc2UudGhlbjsKICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdGhlbi5jYWxsKHByb21pc2UsIHZvaWQgMCwgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXRVbmhhbmRsZWRSZWplY3Rpb25PckVyciwgdGhhdCwgZXJyLCB0eXBlLCBhcmdzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRoYXQuZW1pdCgiZXJyb3IiLCBlcnIpOwogICAgfQogIH0KICBmdW5jdGlvbiBlbWl0VW5oYW5kbGVkUmVqZWN0aW9uT3JFcnIoZWUxOCwgZXJyLCB0eXBlLCBhcmdzKSB7CiAgICBpZiAodHlwZW9mIGVlMThba1JlamVjdGlvbl0gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgZWUxOFtrUmVqZWN0aW9uXShlcnIsIHR5cGUsIC4uLmFyZ3MpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgcHJldiA9IGVlMThba0NhcHR1cmVdOwogICAgICB0cnkgewogICAgICAgIGVlMThba0NhcHR1cmVdID0gZmFsc2U7CiAgICAgICAgZWUxOC5lbWl0KCJlcnJvciIsIGVycik7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgZWUxOFtrQ2FwdHVyZV0gPSBwcmV2OwogICAgICB9CiAgICB9CiAgfQogIEV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzMihuOCkgewogICAgaWYgKHR5cGVvZiBuOCAhPT0gIm51bWJlciIgfHwgbjggPCAwIHx8IE51bWJlci5pc05hTihuOCkpIHsKICAgICAgdGhyb3cgbmV3IEVSUl9PVVRfT0ZfUkFOR0UoIm4iLCAiYSBub24tbmVnYXRpdmUgbnVtYmVyIiwgbjgpOwogICAgfQogICAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjg7CiAgICByZXR1cm4gdGhpczsKICB9OwogIGZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkgewogICAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVyczsKICAgIH0KICAgIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7CiAgfQogIEV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkgewogICAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7CiAgfTsKICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUsIC4uLmFyZ3MpIHsKICAgIGxldCBkb0Vycm9yID0gdHlwZSA9PT0gImVycm9yIjsKICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuX2V2ZW50czsKICAgIGlmIChldmVudHMgIT09IHZvaWQgMCkgewogICAgICBpZiAoZG9FcnJvciAmJiBldmVudHNba0Vycm9yTW9uaXRvcl0gIT09IHZvaWQgMCkgewogICAgICAgIHRoaXMuZW1pdChrRXJyb3JNb25pdG9yLCAuLi5hcmdzKTsKICAgICAgfQogICAgICBkb0Vycm9yID0gZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHZvaWQgMDsKICAgIH0gZWxzZSBpZiAoIWRvRXJyb3IpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKGRvRXJyb3IpIHsKICAgICAgbGV0IGVyMzsKICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkgewogICAgICAgIGVyMyA9IGFyZ3NbMF07CiAgICAgIH0KICAgICAgaWYgKGVyMyBpbnN0YW5jZW9mIEVycm9yKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGNhcHR1cmUgPSB7fTsKICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGNhcHR1cmUsIEV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCk7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgfQogICAgICAgIHRocm93IGVyMzsKICAgICAgfQogICAgICBsZXQgc3RyaW5naWZpZWRFcjsKICAgICAgdHJ5IHsKICAgICAgICBzdHJpbmdpZmllZEVyID0gaW5zcGVjdChlcjMpOwogICAgICB9IGNhdGNoIHsKICAgICAgICBzdHJpbmdpZmllZEVyID0gZXIzOwogICAgICB9CiAgICAgIGNvbnN0IGVyciA9IG5ldyBFUlJfVU5IQU5ETEVEX0VSUk9SKHN0cmluZ2lmaWVkRXIpOwogICAgICBlcnIuY29udGV4dCA9IGVyMzsKICAgICAgdGhyb3cgZXJyOwogICAgfQogICAgY29uc3QgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTsKICAgIGlmIChoYW5kbGVyID09PSB2b2lkIDApIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7CiAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCAmJiByZXN1bHQgIT09IG51bGwpIHsKICAgICAgICBhZGRDYXRjaCh0aGlzLCByZXN1bHQsIHR5cGUsIGFyZ3MpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBsZW4gPSBoYW5kbGVyLmxlbmd0aDsKICAgICAgY29uc3QgbGlzdGVuZXJzMiA9IGFycmF5Q2xvbmUoaGFuZGxlcik7CiAgICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBsZW47ICsraTQpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBsaXN0ZW5lcnMyW2k0XS5hcHBseSh0aGlzLCBhcmdzKTsKICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDAgJiYgcmVzdWx0ICE9PSBudWxsKSB7CiAgICAgICAgICBhZGRDYXRjaCh0aGlzLCByZXN1bHQsIHR5cGUsIGFyZ3MpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfTsKICBmdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkgewogICAgbGV0IG0yMzsKICAgIGxldCBldmVudHM7CiAgICBsZXQgZXhpc3Rpbmc7CiAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTsKICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzOwogICAgaWYgKGV2ZW50cyA9PT0gdm9pZCAwKSB7CiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGFyZ2V0LmVtaXQoIm5ld0xpc3RlbmVyIiwgdHlwZSwgbGlzdGVuZXIubGlzdGVuZXIgPz8gbGlzdGVuZXIpOwogICAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzOwogICAgICB9CiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdOwogICAgfQogICAgaWYgKGV4aXN0aW5nID09PSB2b2lkIDApIHsKICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7CiAgICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDsKICAgIH0gZWxzZSB7CiAgICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdOwogICAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHsKICAgICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTsKICAgICAgfQogICAgICBtMjMgPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7CiAgICAgIGlmIChtMjMgPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0yMyAmJiAhZXhpc3Rpbmcud2FybmVkKSB7CiAgICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTsKICAgICAgICBjb25zdCB3MjEgPSBuZXcgRXJyb3IoCiAgICAgICAgICBgUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAke2V4aXN0aW5nLmxlbmd0aH0gJHtTdHJpbmcodHlwZSl9IGxpc3RlbmVycyBhZGRlZCB0byAke2luc3BlY3QodGFyZ2V0LCB7IGRlcHRoOiAtMSB9KX0uIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0YAogICAgICAgICk7CiAgICAgICAgdzIxLm5hbWUgPSAiTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIjsKICAgICAgICB3MjEuZW1pdHRlciA9IHRhcmdldDsKICAgICAgICB3MjEudHlwZSA9IHR5cGU7CiAgICAgICAgdzIxLmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoOwogICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcodzIxKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7CiAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7CiAgfTsKICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjsKICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9IGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikgewogICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7CiAgfTsKICBmdW5jdGlvbiBvbmNlV3JhcHBlcigpIHsKICAgIGlmICghdGhpcy5maXJlZCkgewogICAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTsKICAgICAgdGhpcy5maXJlZCA9IHRydWU7CiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7CiAgICBjb25zdCBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHZvaWQgMCwgdGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciB9OwogICAgY29uc3Qgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpOwogICAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyOwogICAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDsKICAgIHJldHVybiB3cmFwcGVkOwogIH0KICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlMih0eXBlLCBsaXN0ZW5lcikgewogICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7CiAgICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpOwogICAgcmV0dXJuIHRoaXM7CiAgfTsKICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7CiAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTsKICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpOwogICAgcmV0dXJuIHRoaXM7CiAgfTsKICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHsKICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpOwogICAgY29uc3QgZXZlbnRzID0gdGhpcy5fZXZlbnRzOwogICAgaWYgKGV2ZW50cyA9PT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgY29uc3QgbGlzdCA9IGV2ZW50c1t0eXBlXTsKICAgIGlmIChsaXN0ID09PSB2b2lkIDApIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHsKICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHsKICAgICAgICB0aGlzLl9ldmVudHMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdOwogICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpIHsKICAgICAgICAgIHRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgbGV0IHBvc2l0aW9uID0gLTE7CiAgICAgIGZvciAobGV0IGk0ID0gbGlzdC5sZW5ndGggLSAxOyBpNCA+PSAwOyBpNC0tKSB7CiAgICAgICAgaWYgKGxpc3RbaTRdID09PSBsaXN0ZW5lciB8fCBsaXN0W2k0XS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHsKICAgICAgICAgIHBvc2l0aW9uID0gaTQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHBvc2l0aW9uIDwgMCkgewogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIGlmIChwb3NpdGlvbiA9PT0gMCkgewogICAgICAgIGxpc3Quc2hpZnQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pOwogICAgICB9CiAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkgewogICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07CiAgICAgIH0KICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsIHR5cGUsIGxpc3RlbmVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfTsKICBFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7CiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkgewogICAgY29uc3QgZXZlbnRzID0gdGhpcy5fZXZlbnRzOwogICAgaWYgKGV2ZW50cyA9PT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdm9pZCAwKSB7CiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy5fZXZlbnRzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwOwogICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdm9pZCAwKSB7CiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHsKICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7CiAgICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhldmVudHMpKSB7CiAgICAgICAgaWYgKGtleSA9PT0gInJlbW92ZUxpc3RlbmVyIikKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7CiAgICAgIH0KICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIik7CiAgICAgIHRoaXMuX2V2ZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgY29uc3QgbGlzdGVuZXJzMiA9IGV2ZW50c1t0eXBlXTsKICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzMiA9PT0gImZ1bmN0aW9uIikgewogICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyczIpOwogICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMyICE9PSB2b2lkIDApIHsKICAgICAgZm9yIChsZXQgaTQgPSBsaXN0ZW5lcnMyLmxlbmd0aCAtIDE7IGk0ID49IDA7IGk0LS0pIHsKICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyczJbaTRdKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfTsKICBmdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7CiAgICBjb25zdCBldmVudHMgPSB0YXJnZXQuX2V2ZW50czsKICAgIGlmIChldmVudHMgPT09IHZvaWQgMCkgewogICAgICByZXR1cm4gW107CiAgICB9CiAgICBjb25zdCBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdOwogICAgaWYgKGV2bGlzdGVuZXIgPT09IHZvaWQgMCkgewogICAgICByZXR1cm4gW107CiAgICB9CiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdOwogICAgfQogICAgcmV0dXJuIHVud3JhcCA/IHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lcik7CiAgfQogIEV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHsKICAgIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpOwogIH07CiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkgewogICAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpOwogIH07CiAgdmFyIF9saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7CiAgICBjb25zdCBldmVudHMgPSB0aGlzLl9ldmVudHM7CiAgICBpZiAoZXZlbnRzICE9PSB2b2lkIDApIHsKICAgICAgY29uc3QgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTsKICAgICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKICB9OwogIEV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IF9saXN0ZW5lckNvdW50OwogIGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQyKGVtaXR0ZXIsIHR5cGUpIHsKICAgIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7CiAgICB9CiAgICByZXR1cm4gX2xpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTsKICB9CiAgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHsKICAgIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKSA6IFtdOwogIH07CiAgZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIpIHsKICAgIHN3aXRjaCAoYXJyLmxlbmd0aCkgewogICAgICBjYXNlIDI6CiAgICAgICAgcmV0dXJuIFthcnJbMF0sIGFyclsxXV07CiAgICAgIGNhc2UgMzoKICAgICAgICByZXR1cm4gW2FyclswXSwgYXJyWzFdLCBhcnJbMl1dOwogICAgICBjYXNlIDQ6CiAgICAgICAgcmV0dXJuIFthcnJbMF0sIGFyclsxXSwgYXJyWzJdLCBhcnJbM11dOwogICAgICBjYXNlIDU6CiAgICAgICAgcmV0dXJuIFthcnJbMF0sIGFyclsxXSwgYXJyWzJdLCBhcnJbM10sIGFycls0XV07CiAgICAgIGNhc2UgNjoKICAgICAgICByZXR1cm4gW2FyclswXSwgYXJyWzFdLCBhcnJbMl0sIGFyclszXSwgYXJyWzRdLCBhcnJbNV1dOwogICAgfQogICAgcmV0dXJuIGFyci5zbGljZSgpOwogIH0KICBmdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7CiAgICBjb25zdCByZXQgPSBhcnJheUNsb25lKGFycik7CiAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgcmV0Lmxlbmd0aDsgKytpNCkgewogICAgICBjb25zdCBvcmlnID0gcmV0W2k0XS5saXN0ZW5lcjsKICAgICAgaWYgKHR5cGVvZiBvcmlnID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0W2k0XSA9IG9yaWc7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXQ7CiAgfQogIGZ1bmN0aW9uIGdldEV2ZW50TGlzdGVuZXJzKGVtaXR0ZXJPclRhcmdldCwgdHlwZSkgewogICAgaWYgKHR5cGVvZiBlbWl0dGVyT3JUYXJnZXQubGlzdGVuZXJzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBlbWl0dGVyT3JUYXJnZXQubGlzdGVuZXJzKHR5cGUpOwogICAgfQogICAgaWYgKGVtaXR0ZXJPclRhcmdldCBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0KSB7CiAgICAgIGNvbnN0IHJvb3QgPSBlbWl0dGVyT3JUYXJnZXRba0V2ZW50c10uZ2V0KHR5cGUpOwogICAgICBjb25zdCBsaXN0ZW5lcnMyID0gW107CiAgICAgIGxldCBoYW5kbGVyID0gcm9vdD8ubmV4dDsKICAgICAgd2hpbGUgKGhhbmRsZXI/Lmxpc3RlbmVyICE9PSB2b2lkIDApIHsKICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGhhbmRsZXIubGlzdGVuZXI/LmRlcmVmID8gaGFuZGxlci5saXN0ZW5lci5kZXJlZigpIDogaGFuZGxlci5saXN0ZW5lcjsKICAgICAgICBsaXN0ZW5lcnMyLnB1c2gobGlzdGVuZXIpOwogICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyLm5leHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGxpc3RlbmVyczI7CiAgICB9CiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoCiAgICAgICJlbWl0dGVyIiwKICAgICAgWyJFdmVudEVtaXR0ZXIiLCAiRXZlbnRUYXJnZXQiXSwKICAgICAgZW1pdHRlck9yVGFyZ2V0CiAgICApOwogIH0KICBhc3luYyBmdW5jdGlvbiBvbmNlMyhlbWl0dGVyLCBuYW1lLCBvcHRpb25zID0ge30pIHsKICAgIGNvbnN0IHNpZ25hbCA9IG9wdGlvbnM/LnNpZ25hbDsKICAgIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCAib3B0aW9ucy5zaWduYWwiKTsKICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHsKICAgICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKTsKICAgIH0KICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTcsIHJlamVjdCkgPT4gewogICAgICBjb25zdCBlcnJvckxpc3RlbmVyID0gKGVycikgPT4gewogICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpOwogICAgICAgIGlmIChzaWduYWwgIT0gbnVsbCkgewogICAgICAgICAgZXZlbnRUYXJnZXRBZ25vc3RpY1JlbW92ZUxpc3RlbmVyKHNpZ25hbCwgImFib3J0IiwgYWJvcnRMaXN0ZW5lcik7CiAgICAgICAgfQogICAgICAgIHJlamVjdChlcnIpOwogICAgICB9OwogICAgICBjb25zdCByZXNvbHZlciA9ICguLi5hcmdzKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsIGVycm9yTGlzdGVuZXIpOwogICAgICAgIH0KICAgICAgICBpZiAoc2lnbmFsICE9IG51bGwpIHsKICAgICAgICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNSZW1vdmVMaXN0ZW5lcihzaWduYWwsICJhYm9ydCIsIGFib3J0TGlzdGVuZXIpOwogICAgICAgIH0KICAgICAgICByZXNvbHZlNyhhcmdzKTsKICAgICAgfTsKICAgICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7CiAgICAgIGlmIChuYW1lICE9PSAiZXJyb3IiICYmIHR5cGVvZiBlbWl0dGVyLm9uY2UgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBlbWl0dGVyLm9uY2UoImVycm9yIiwgZXJyb3JMaXN0ZW5lcik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gYWJvcnRMaXN0ZW5lcigpIHsKICAgICAgICBldmVudFRhcmdldEFnbm9zdGljUmVtb3ZlTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIpOwogICAgICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNSZW1vdmVMaXN0ZW5lcihlbWl0dGVyLCAiZXJyb3IiLCBlcnJvckxpc3RlbmVyKTsKICAgICAgICByZWplY3QobmV3IEFib3J0RXJyb3IoKSk7CiAgICAgIH0KICAgICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7CiAgICAgICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKAogICAgICAgICAgc2lnbmFsLAogICAgICAgICAgImFib3J0IiwKICAgICAgICAgIGFib3J0TGlzdGVuZXIsCiAgICAgICAgICB7IG9uY2U6IHRydWUgfQogICAgICAgICk7CiAgICAgIH0KICAgIH0pOwogIH0KICB2YXIgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZigKICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihhc3luYyBmdW5jdGlvbiogKCkgewogICAgfSkucHJvdG90eXBlCiAgKTsKICBmdW5jdGlvbiBjcmVhdGVJdGVyUmVzdWx0KHZhbHVlLCBkb25lKSB7CiAgICByZXR1cm4geyB2YWx1ZSwgZG9uZSB9OwogIH0KICBmdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljUmVtb3ZlTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7CiAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lcik7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGxpc3RlbmVyLCBmbGFncyk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoImVtaXR0ZXIiLCAiRXZlbnRFbWl0dGVyIiwgZW1pdHRlcik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHsKICAgIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gImZ1bmN0aW9uIikgewogICAgICBpZiAoZmxhZ3M/Lm9uY2UpIHsKICAgICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIChhcmcpID0+IHsKICAgICAgICBsaXN0ZW5lcihhcmcpOwogICAgICB9LCBmbGFncyk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoImVtaXR0ZXIiLCAiRXZlbnRFbWl0dGVyIiwgZW1pdHRlcik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uMyhlbWl0dGVyLCBldmVudCwgb3B0aW9ucykgewogICAgY29uc3Qgc2lnbmFsID0gb3B0aW9ucz8uc2lnbmFsOwogICAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsICJvcHRpb25zLnNpZ25hbCIpOwogICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgewogICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpOwogICAgfQogICAgY29uc3QgdW5jb25zdW1lZEV2ZW50cyA9IFtdOwogICAgY29uc3QgdW5jb25zdW1lZFByb21pc2VzID0gW107CiAgICBsZXQgZXJyb3IgPSBudWxsOwogICAgbGV0IGZpbmlzaGVkMiA9IGZhbHNlOwogICAgY29uc3QgaXRlcmF0b3IgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoewogICAgICBuZXh0KCkgewogICAgICAgIGNvbnN0IHZhbHVlID0gdW5jb25zdW1lZEV2ZW50cy5zaGlmdCgpOwogICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHZhbHVlLCBmYWxzZSkpOwogICAgICAgIH0KICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIGNvbnN0IHAxOCA9IFByb21pc2UucmVqZWN0KGVycm9yKTsKICAgICAgICAgIGVycm9yID0gbnVsbDsKICAgICAgICAgIHJldHVybiBwMTg7CiAgICAgICAgfQogICAgICAgIGlmIChmaW5pc2hlZDIpIHsKICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh2b2lkIDAsIHRydWUpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmU3LCByZWplY3QpIHsKICAgICAgICAgIHVuY29uc3VtZWRQcm9taXNlcy5wdXNoKHsgcmVzb2x2ZTogcmVzb2x2ZTcsIHJlamVjdCB9KTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgcmV0dXJuKCkgewogICAgICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNSZW1vdmVMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZXZlbnRIYW5kbGVyKTsKICAgICAgICBldmVudFRhcmdldEFnbm9zdGljUmVtb3ZlTGlzdGVuZXIoZW1pdHRlciwgImVycm9yIiwgZXJyb3JIYW5kbGVyKTsKICAgICAgICBpZiAoc2lnbmFsKSB7CiAgICAgICAgICBldmVudFRhcmdldEFnbm9zdGljUmVtb3ZlTGlzdGVuZXIoCiAgICAgICAgICAgIHNpZ25hbCwKICAgICAgICAgICAgImFib3J0IiwKICAgICAgICAgICAgYWJvcnRMaXN0ZW5lciwKICAgICAgICAgICAgeyBvbmNlOiB0cnVlIH0KICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGZpbmlzaGVkMiA9IHRydWU7CiAgICAgICAgZm9yIChjb25zdCBwcm9taXNlIG9mIHVuY29uc3VtZWRQcm9taXNlcykgewogICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGNyZWF0ZUl0ZXJSZXN1bHQodm9pZCAwLCB0cnVlKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh2b2lkIDAsIHRydWUpKTsKICAgICAgfSwKICAgICAgdGhyb3coZXJyKSB7CiAgICAgICAgaWYgKCFlcnIgfHwgIShlcnIgaW5zdGFuY2VvZiBFcnJvcikpIHsKICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgKICAgICAgICAgICAgIkV2ZW50RW1pdHRlci5Bc3luY0l0ZXJhdG9yIiwKICAgICAgICAgICAgIkVycm9yIiwKICAgICAgICAgICAgZXJyCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlcnJvciA9IGVycjsKICAgICAgICBldmVudFRhcmdldEFnbm9zdGljUmVtb3ZlTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGV2ZW50SGFuZGxlcik7CiAgICAgICAgZXZlbnRUYXJnZXRBZ25vc3RpY1JlbW92ZUxpc3RlbmVyKGVtaXR0ZXIsICJlcnJvciIsIGVycm9ySGFuZGxlcik7CiAgICAgIH0sCiAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH0sIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUpOwogICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBldmVudEhhbmRsZXIpOwogICAgaWYgKGV2ZW50ICE9PSAiZXJyb3IiICYmIHR5cGVvZiBlbWl0dGVyLm9uID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGVtaXR0ZXIub24oImVycm9yIiwgZXJyb3JIYW5kbGVyKTsKICAgIH0KICAgIGlmIChzaWduYWwpIHsKICAgICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKAogICAgICAgIHNpZ25hbCwKICAgICAgICAiYWJvcnQiLAogICAgICAgIGFib3J0TGlzdGVuZXIsCiAgICAgICAgeyBvbmNlOiB0cnVlIH0KICAgICAgKTsKICAgIH0KICAgIHJldHVybiBpdGVyYXRvcjsKICAgIGZ1bmN0aW9uIGFib3J0TGlzdGVuZXIoKSB7CiAgICAgIGVycm9ySGFuZGxlcihuZXcgQWJvcnRFcnJvcigpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGV2ZW50SGFuZGxlciguLi5hcmdzKSB7CiAgICAgIGNvbnN0IHByb21pc2UgPSB1bmNvbnN1bWVkUHJvbWlzZXMuc2hpZnQoKTsKICAgICAgaWYgKHByb21pc2UpIHsKICAgICAgICBwcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdChhcmdzLCBmYWxzZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHVuY29uc3VtZWRFdmVudHMucHVzaChhcmdzKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gZXJyb3JIYW5kbGVyKGVycikgewogICAgICBmaW5pc2hlZDIgPSB0cnVlOwogICAgICBjb25zdCB0b0Vycm9yID0gdW5jb25zdW1lZFByb21pc2VzLnNoaWZ0KCk7CiAgICAgIGlmICh0b0Vycm9yKSB7CiAgICAgICAgdG9FcnJvci5yZWplY3QoZXJyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlcnJvciA9IGVycjsKICAgICAgfQogICAgICBpdGVyYXRvci5yZXR1cm4oKTsKICAgIH0KICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvZmxhZ3MvbW9kLnRzCiAgdmFyIHsgaGFzT3duOiBoYXNPd242IH0gPSBPYmplY3Q7CiAgZnVuY3Rpb24gZ2V0KG9iaiwga2V5KSB7CiAgICBpZiAoaGFzT3duNihvYmosIGtleSkpIHsKICAgICAgcmV0dXJuIG9ialtrZXldOwogICAgfQogIH0KICBmdW5jdGlvbiBnZXRGb3JjZShvYmosIGtleSkgewogICAgY29uc3QgdjE1ID0gZ2V0KG9iaiwga2V5KTsKICAgIGFzc2VydDModjE1ICE9IG51bGwpOwogICAgcmV0dXJuIHYxNTsKICB9CiAgZnVuY3Rpb24gaXNOdW1iZXIoeDIxKSB7CiAgICBpZiAodHlwZW9mIHgyMSA9PT0gIm51bWJlciIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKC9eMHhbMC05YS1mXSskL2kudGVzdChTdHJpbmcoeDIxKSkpCiAgICAgIHJldHVybiB0cnVlOwogICAgcmV0dXJuIC9eWy0rXT8oPzpcZCsoPzpcLlxkKik/fFwuXGQrKShlWy0rXT9cZCspPyQvLnRlc3QoU3RyaW5nKHgyMSkpOwogIH0KICBmdW5jdGlvbiBoYXNLZXkob2JqLCBrZXlzKSB7CiAgICBsZXQgbzQgPSBvYmo7CiAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKChrZXkyKSA9PiB7CiAgICAgIG80ID0gZ2V0KG80LCBrZXkyKSA/PyB7fTsKICAgIH0pOwogICAgY29uc3Qga2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdOwogICAgcmV0dXJuIGhhc093bjYobzQsIGtleSk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlNShhcmdzLCB7CiAgICAiLS0iOiBkb3VibGVEYXNoID0gZmFsc2UsCiAgICBhbGlhcyA9IHt9LAogICAgYm9vbGVhbiA9IGZhbHNlLAogICAgZGVmYXVsdDogZGVmYXVsdHMgPSB7fSwKICAgIHN0b3BFYXJseSA9IGZhbHNlLAogICAgc3RyaW5nID0gW10sCiAgICBjb2xsZWN0ID0gW10sCiAgICBuZWdhdGFibGUgPSBbXSwKICAgIHVua25vd24gPSAoaTQpID0+IGk0CiAgfSA9IHt9KSB7CiAgICBjb25zdCBmbGFncyA9IHsKICAgICAgYm9vbHM6IHt9LAogICAgICBzdHJpbmdzOiB7fSwKICAgICAgdW5rbm93bkZuOiB1bmtub3duLAogICAgICBhbGxCb29sczogZmFsc2UsCiAgICAgIGNvbGxlY3Q6IHt9LAogICAgICBuZWdhdGFibGU6IHt9CiAgICB9OwogICAgaWYgKGJvb2xlYW4gIT09IHZvaWQgMCkgewogICAgICBpZiAodHlwZW9mIGJvb2xlYW4gPT09ICJib29sZWFuIikgewogICAgICAgIGZsYWdzLmFsbEJvb2xzID0gISFib29sZWFuOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGJvb2xlYW5BcmdzID0gdHlwZW9mIGJvb2xlYW4gPT09ICJzdHJpbmciID8gW2Jvb2xlYW5dIDogYm9vbGVhbjsKICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBib29sZWFuQXJncy5maWx0ZXIoQm9vbGVhbikpIHsKICAgICAgICAgIGZsYWdzLmJvb2xzW2tleV0gPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgY29uc3QgYWxpYXNlcyA9IHt9OwogICAgaWYgKGFsaWFzICE9PSB2b2lkIDApIHsKICAgICAgZm9yIChjb25zdCBrZXkgaW4gYWxpYXMpIHsKICAgICAgICBjb25zdCB2YWwgPSBnZXRGb3JjZShhbGlhcywga2V5KTsKICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGFsaWFzZXNba2V5XSA9IFt2YWxdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhbGlhc2VzW2tleV0gPSB2YWw7CiAgICAgICAgfQogICAgICAgIGZvciAoY29uc3QgYWxpYXMyIG9mIGdldEZvcmNlKGFsaWFzZXMsIGtleSkpIHsKICAgICAgICAgIGFsaWFzZXNbYWxpYXMyXSA9IFtrZXldLmNvbmNhdChhbGlhc2VzW2tleV0uZmlsdGVyKCh5MTcpID0+IGFsaWFzMiAhPT0geTE3KSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoc3RyaW5nICE9PSB2b2lkIDApIHsKICAgICAgY29uc3Qgc3RyaW5nQXJncyA9IHR5cGVvZiBzdHJpbmcgPT09ICJzdHJpbmciID8gW3N0cmluZ10gOiBzdHJpbmc7CiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHN0cmluZ0FyZ3MuZmlsdGVyKEJvb2xlYW4pKSB7CiAgICAgICAgZmxhZ3Muc3RyaW5nc1trZXldID0gdHJ1ZTsKICAgICAgICBjb25zdCBhbGlhczIgPSBnZXQoYWxpYXNlcywga2V5KTsKICAgICAgICBpZiAoYWxpYXMyKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IGFsIG9mIGFsaWFzMikgewogICAgICAgICAgICBmbGFncy5zdHJpbmdzW2FsXSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoY29sbGVjdCAhPT0gdm9pZCAwKSB7CiAgICAgIGNvbnN0IGNvbGxlY3RBcmdzID0gdHlwZW9mIGNvbGxlY3QgPT09ICJzdHJpbmciID8gW2NvbGxlY3RdIDogY29sbGVjdDsKICAgICAgZm9yIChjb25zdCBrZXkgb2YgY29sbGVjdEFyZ3MuZmlsdGVyKEJvb2xlYW4pKSB7CiAgICAgICAgZmxhZ3MuY29sbGVjdFtrZXldID0gdHJ1ZTsKICAgICAgICBjb25zdCBhbGlhczIgPSBnZXQoYWxpYXNlcywga2V5KTsKICAgICAgICBpZiAoYWxpYXMyKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IGFsIG9mIGFsaWFzMikgewogICAgICAgICAgICBmbGFncy5jb2xsZWN0W2FsXSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAobmVnYXRhYmxlICE9PSB2b2lkIDApIHsKICAgICAgY29uc3QgbmVnYXRhYmxlQXJncyA9IHR5cGVvZiBuZWdhdGFibGUgPT09ICJzdHJpbmciID8gW25lZ2F0YWJsZV0gOiBuZWdhdGFibGU7CiAgICAgIGZvciAoY29uc3Qga2V5IG9mIG5lZ2F0YWJsZUFyZ3MuZmlsdGVyKEJvb2xlYW4pKSB7CiAgICAgICAgZmxhZ3MubmVnYXRhYmxlW2tleV0gPSB0cnVlOwogICAgICAgIGNvbnN0IGFsaWFzMiA9IGdldChhbGlhc2VzLCBrZXkpOwogICAgICAgIGlmIChhbGlhczIpIHsKICAgICAgICAgIGZvciAoY29uc3QgYWwgb2YgYWxpYXMyKSB7CiAgICAgICAgICAgIGZsYWdzLm5lZ2F0YWJsZVthbF0gPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgY29uc3QgYXJndjIgPSB7IF86IFtdIH07CiAgICBmdW5jdGlvbiBhcmdEZWZpbmVkKGtleSwgYXJnKSB7CiAgICAgIHJldHVybiBmbGFncy5hbGxCb29scyAmJiAvXi0tW149XSskLy50ZXN0KGFyZykgfHwgZ2V0KGZsYWdzLmJvb2xzLCBrZXkpIHx8ICEhZ2V0KGZsYWdzLnN0cmluZ3MsIGtleSkgfHwgISFnZXQoYWxpYXNlcywga2V5KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldEtleShvYmosIG5hbWUsIHZhbHVlLCBjb2xsZWN0MiA9IHRydWUpIHsKICAgICAgbGV0IG80ID0gb2JqOwogICAgICBjb25zdCBrZXlzID0gbmFtZS5zcGxpdCgiLiIpOwogICAgICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgICBpZiAoZ2V0KG80LCBrZXkyKSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvNFtrZXkyXSA9IHt9OwogICAgICAgIH0KICAgICAgICBvNCA9IGdldChvNCwga2V5Mik7CiAgICAgIH0pOwogICAgICBjb25zdCBrZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07CiAgICAgIGNvbnN0IGNvbGxlY3RhYmxlID0gY29sbGVjdDIgJiYgISFnZXQoZmxhZ3MuY29sbGVjdCwgbmFtZSk7CiAgICAgIGlmICghY29sbGVjdGFibGUpIHsKICAgICAgICBvNFtrZXldID0gdmFsdWU7CiAgICAgIH0gZWxzZSBpZiAoZ2V0KG80LCBrZXkpID09PSB2b2lkIDApIHsKICAgICAgICBvNFtrZXldID0gW3ZhbHVlXTsKICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGdldChvNCwga2V5KSkpIHsKICAgICAgICBvNFtrZXldLnB1c2godmFsdWUpOwogICAgICB9IGVsc2UgewogICAgICAgIG80W2tleV0gPSBbZ2V0KG80LCBrZXkpLCB2YWx1ZV07CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNldEFyZyhrZXksIHZhbCwgYXJnID0gdm9pZCAwLCBjb2xsZWN0MikgewogICAgICBpZiAoYXJnICYmIGZsYWdzLnVua25vd25GbiAmJiAhYXJnRGVmaW5lZChrZXksIGFyZykpIHsKICAgICAgICBpZiAoZmxhZ3MudW5rbm93bkZuKGFyZywga2V5LCB2YWwpID09PSBmYWxzZSkKICAgICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB2YWx1ZSA9ICFnZXQoZmxhZ3Muc3RyaW5ncywga2V5KSAmJiBpc051bWJlcih2YWwpID8gTnVtYmVyKHZhbCkgOiB2YWw7CiAgICAgIHNldEtleShhcmd2Miwga2V5LCB2YWx1ZSwgY29sbGVjdDIpOwogICAgICBjb25zdCBhbGlhczIgPSBnZXQoYWxpYXNlcywga2V5KTsKICAgICAgaWYgKGFsaWFzMikgewogICAgICAgIGZvciAoY29uc3QgeDIxIG9mIGFsaWFzMikgewogICAgICAgICAgc2V0S2V5KGFyZ3YyLCB4MjEsIHZhbHVlLCBjb2xsZWN0Mik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBhbGlhc0lzQm9vbGVhbihrZXkpIHsKICAgICAgcmV0dXJuIGdldEZvcmNlKGFsaWFzZXMsIGtleSkuc29tZSgKICAgICAgICAoeDIxKSA9PiB0eXBlb2YgZ2V0KGZsYWdzLmJvb2xzLCB4MjEpID09PSAiYm9vbGVhbiIKICAgICAgKTsKICAgIH0KICAgIGxldCBub3RGbGFncyA9IFtdOwogICAgaWYgKGFyZ3MuaW5jbHVkZXMoIi0tIikpIHsKICAgICAgbm90RmxhZ3MgPSBhcmdzLnNsaWNlKGFyZ3MuaW5kZXhPZigiLS0iKSArIDEpOwogICAgICBhcmdzID0gYXJncy5zbGljZSgwLCBhcmdzLmluZGV4T2YoIi0tIikpOwogICAgfQogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGFyZ3MubGVuZ3RoOyBpNCsrKSB7CiAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaTRdOwogICAgICBpZiAoL14tLS4rPS8udGVzdChhcmcpKSB7CiAgICAgICAgY29uc3QgbTIzID0gYXJnLm1hdGNoKC9eLS0oW149XSspPSguKikkL3MpOwogICAgICAgIGFzc2VydDMobTIzICE9IG51bGwpOwogICAgICAgIGNvbnN0IFssIGtleSwgdmFsdWVdID0gbTIzOwogICAgICAgIGlmIChmbGFncy5ib29sc1trZXldKSB7CiAgICAgICAgICBjb25zdCBib29sZWFuVmFsdWUgPSB2YWx1ZSAhPT0gImZhbHNlIjsKICAgICAgICAgIHNldEFyZyhrZXksIGJvb2xlYW5WYWx1ZSwgYXJnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2V0QXJnKGtleSwgdmFsdWUsIGFyZyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKC9eLS1uby0uKy8udGVzdChhcmcpICYmIGdldChmbGFncy5uZWdhdGFibGUsIGFyZy5yZXBsYWNlKC9eLS1uby0vLCAiIikpKSB7CiAgICAgICAgY29uc3QgbTIzID0gYXJnLm1hdGNoKC9eLS1uby0oLispLyk7CiAgICAgICAgYXNzZXJ0MyhtMjMgIT0gbnVsbCk7CiAgICAgICAgc2V0QXJnKG0yM1sxXSwgZmFsc2UsIGFyZywgZmFsc2UpOwogICAgICB9IGVsc2UgaWYgKC9eLS0uKy8udGVzdChhcmcpKSB7CiAgICAgICAgY29uc3QgbTIzID0gYXJnLm1hdGNoKC9eLS0oLispLyk7CiAgICAgICAgYXNzZXJ0MyhtMjMgIT0gbnVsbCk7CiAgICAgICAgY29uc3QgWywga2V5XSA9IG0yMzsKICAgICAgICBjb25zdCBuZXh0ID0gYXJnc1tpNCArIDFdOwogICAgICAgIGlmIChuZXh0ICE9PSB2b2lkIDAgJiYgIS9eLS8udGVzdChuZXh0KSAmJiAhZ2V0KGZsYWdzLmJvb2xzLCBrZXkpICYmICFmbGFncy5hbGxCb29scyAmJiAoZ2V0KGFsaWFzZXMsIGtleSkgPyAhYWxpYXNJc0Jvb2xlYW4oa2V5KSA6IHRydWUpKSB7CiAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0LCBhcmcpOwogICAgICAgICAgaTQrKzsKICAgICAgICB9IGVsc2UgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkgewogICAgICAgICAgc2V0QXJnKGtleSwgbmV4dCA9PT0gInRydWUiLCBhcmcpOwogICAgICAgICAgaTQrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2V0QXJnKGtleSwgZ2V0KGZsYWdzLnN0cmluZ3MsIGtleSkgPyAiIiA6IHRydWUsIGFyZyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKC9eLVteLV0rLy50ZXN0KGFyZykpIHsKICAgICAgICBjb25zdCBsZXR0ZXJzID0gYXJnLnNsaWNlKDEsIC0xKS5zcGxpdCgiIik7CiAgICAgICAgbGV0IGJyb2tlbiA9IGZhbHNlOwogICAgICAgIGZvciAobGV0IGoxOSA9IDA7IGoxOSA8IGxldHRlcnMubGVuZ3RoOyBqMTkrKykgewogICAgICAgICAgY29uc3QgbmV4dCA9IGFyZy5zbGljZShqMTkgKyAyKTsKICAgICAgICAgIGlmIChuZXh0ID09PSAiLSIpIHsKICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbajE5XSwgbmV4dCwgYXJnKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbajE5XSkgJiYgLz0vLnRlc3QobmV4dCkpIHsKICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbajE5XSwgbmV4dC5zcGxpdCgvPSguKykvKVsxXSwgYXJnKTsKICAgICAgICAgICAgYnJva2VuID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbajE5XSkgJiYgLy0/XGQrKFwuXGQqKT8oZS0/XGQrKT8kLy50ZXN0KG5leHQpKSB7CiAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2oxOV0sIG5leHQsIGFyZyk7CiAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGxldHRlcnNbajE5ICsgMV0gJiYgbGV0dGVyc1tqMTkgKyAxXS5tYXRjaCgvXFcvKSkgewogICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqMTldLCBhcmcuc2xpY2UoajE5ICsgMiksIGFyZyk7CiAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2V0QXJnKGxldHRlcnNbajE5XSwgZ2V0KGZsYWdzLnN0cmluZ3MsIGxldHRlcnNbajE5XSkgPyAiIiA6IHRydWUsIGFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IFtrZXldID0gYXJnLnNsaWNlKC0xKTsKICAgICAgICBpZiAoIWJyb2tlbiAmJiBrZXkgIT09ICItIikgewogICAgICAgICAgaWYgKGFyZ3NbaTQgKyAxXSAmJiAhL14oLXwtLSlbXi1dLy50ZXN0KGFyZ3NbaTQgKyAxXSkgJiYgIWdldChmbGFncy5ib29scywga2V5KSAmJiAoZ2V0KGFsaWFzZXMsIGtleSkgPyAhYWxpYXNJc0Jvb2xlYW4oa2V5KSA6IHRydWUpKSB7CiAgICAgICAgICAgIHNldEFyZyhrZXksIGFyZ3NbaTQgKyAxXSwgYXJnKTsKICAgICAgICAgICAgaTQrKzsKICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1tpNCArIDFdICYmIC9eKHRydWV8ZmFsc2UpJC8udGVzdChhcmdzW2k0ICsgMV0pKSB7CiAgICAgICAgICAgIHNldEFyZyhrZXksIGFyZ3NbaTQgKyAxXSA9PT0gInRydWUiLCBhcmcpOwogICAgICAgICAgICBpNCsrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2V0QXJnKGtleSwgZ2V0KGZsYWdzLnN0cmluZ3MsIGtleSkgPyAiIiA6IHRydWUsIGFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmICghZmxhZ3MudW5rbm93bkZuIHx8IGZsYWdzLnVua25vd25GbihhcmcpICE9PSBmYWxzZSkgewogICAgICAgICAgYXJndjIuXy5wdXNoKGZsYWdzLnN0cmluZ3NbIl8iXSA/PyAhaXNOdW1iZXIoYXJnKSA/IGFyZyA6IE51bWJlcihhcmcpKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0b3BFYXJseSkgewogICAgICAgICAgYXJndjIuXy5wdXNoKC4uLmFyZ3Muc2xpY2UoaTQgKyAxKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRzKSkgewogICAgICBpZiAoIWhhc0tleShhcmd2Miwga2V5LnNwbGl0KCIuIikpKSB7CiAgICAgICAgc2V0S2V5KGFyZ3YyLCBrZXksIHZhbHVlKTsKICAgICAgICBpZiAoYWxpYXNlc1trZXldKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IHgyMSBvZiBhbGlhc2VzW2tleV0pIHsKICAgICAgICAgICAgc2V0S2V5KGFyZ3YyLCB4MjEsIHZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZsYWdzLmJvb2xzKSkgewogICAgICBpZiAoIWhhc0tleShhcmd2Miwga2V5LnNwbGl0KCIuIikpKSB7CiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXQoZmxhZ3MuY29sbGVjdCwga2V5KSA/IFtdIDogZmFsc2U7CiAgICAgICAgc2V0S2V5KAogICAgICAgICAgYXJndjIsCiAgICAgICAgICBrZXksCiAgICAgICAgICB2YWx1ZSwKICAgICAgICAgIGZhbHNlCiAgICAgICAgKTsKICAgICAgfQogICAgfQogICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmxhZ3Muc3RyaW5ncykpIHsKICAgICAgaWYgKCFoYXNLZXkoYXJndjIsIGtleS5zcGxpdCgiLiIpKSAmJiBnZXQoZmxhZ3MuY29sbGVjdCwga2V5KSkgewogICAgICAgIHNldEtleSgKICAgICAgICAgIGFyZ3YyLAogICAgICAgICAga2V5LAogICAgICAgICAgW10sCiAgICAgICAgICBmYWxzZQogICAgICAgICk7CiAgICAgIH0KICAgIH0KICAgIGlmIChkb3VibGVEYXNoKSB7CiAgICAgIGFyZ3YyWyItLSJdID0gW107CiAgICAgIGZvciAoY29uc3Qga2V5IG9mIG5vdEZsYWdzKSB7CiAgICAgICAgYXJndjJbIi0tIl0ucHVzaChrZXkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGNvbnN0IGtleSBvZiBub3RGbGFncykgewogICAgICAgIGFyZ3YyLl8ucHVzaChrZXkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYXJndjI7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9ub2RlX29wdGlvbnMudHMKICBmdW5jdGlvbiBnZXRPcHRpb25zKCkgewogICAgY29uc3QgYXJncyA9IHBhcnNlNShEZW5vLmFyZ3MpOwogICAgY29uc3Qgb3B0aW9ucyA9IG5ldyBNYXAoCiAgICAgIE9iamVjdC5lbnRyaWVzKGFyZ3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCB7IHZhbHVlIH1dKQogICAgKTsKICAgIHJldHVybiB7IG9wdGlvbnMgfTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9vcHRpb25zLnRzCiAgdmFyIG9wdGlvbnNNYXA7CiAgZnVuY3Rpb24gZ2V0T3B0aW9uc0Zyb21CaW5kaW5nKCkgewogICAgaWYgKCFvcHRpb25zTWFwKSB7CiAgICAgICh7IG9wdGlvbnM6IG9wdGlvbnNNYXAgfSA9IGdldE9wdGlvbnMoKSk7CiAgICB9CiAgICByZXR1cm4gb3B0aW9uc01hcDsKICB9CiAgZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWUob3B0aW9uTmFtZSkgewogICAgY29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tQmluZGluZygpOwogICAgaWYgKG9wdGlvbk5hbWUuc3RhcnRzV2l0aCgiLS1uby0iKSkgewogICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmdldCgiLS0iICsgb3B0aW9uTmFtZS5zbGljZSg1KSk7CiAgICAgIHJldHVybiBvcHRpb24gJiYgIW9wdGlvbi52YWx1ZTsKICAgIH0KICAgIHJldHVybiBvcHRpb25zLmdldChvcHRpb25OYW1lKT8udmFsdWU7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL3BhdGgvd2luMzIudHMKICB2YXIgd2luMzJfZXhwb3J0czIgPSB7fTsKICBfX2V4cG9ydCh3aW4zMl9leHBvcnRzMiwgewogICAgYmFzZW5hbWU6ICgpID0+IGJhc2VuYW1lNCwKICAgIGRlbGltaXRlcjogKCkgPT4gZGVsaW1pdGVyNCwKICAgIGRpcm5hbWU6ICgpID0+IGRpcm5hbWU0LAogICAgZXh0bmFtZTogKCkgPT4gZXh0bmFtZTQsCiAgICBmb3JtYXQ6ICgpID0+IGZvcm1hdDYsCiAgICBmcm9tRmlsZVVybDogKCkgPT4gZnJvbUZpbGVVcmw0LAogICAgaXNBYnNvbHV0ZTogKCkgPT4gaXNBYnNvbHV0ZTQsCiAgICBqb2luOiAoKSA9PiBqb2luNiwKICAgIG5vcm1hbGl6ZTogKCkgPT4gbm9ybWFsaXplNSwKICAgIHBhcnNlOiAoKSA9PiBwYXJzZTYsCiAgICByZWxhdGl2ZTogKCkgPT4gcmVsYXRpdmU0LAogICAgcmVzb2x2ZTogKCkgPT4gcmVzb2x2ZTQsCiAgICBzZXA6ICgpID0+IHNlcDQsCiAgICB0b0ZpbGVVcmw6ICgpID0+IHRvRmlsZVVybDQsCiAgICB0b05hbWVzcGFjZWRQYXRoOiAoKSA9PiB0b05hbWVzcGFjZWRQYXRoNAogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL3BhdGgvX2NvbnN0YW50cy50cwogIHZhciBDSEFSX1VQUEVSQ0FTRV9BMiA9IDY1OwogIHZhciBDSEFSX0xPV0VSQ0FTRV9BMiA9IDk3OwogIHZhciBDSEFSX1VQUEVSQ0FTRV9aMiA9IDkwOwogIHZhciBDSEFSX0xPV0VSQ0FTRV9aMiA9IDEyMjsKICB2YXIgQ0hBUl9ET1QyID0gNDY7CiAgdmFyIENIQVJfRk9SV0FSRF9TTEFTSDIgPSA0NzsKICB2YXIgQ0hBUl9CQUNLV0FSRF9TTEFTSDIgPSA5MjsKICB2YXIgQ0hBUl9DT0xPTjMgPSA1ODsKICB2YXIgQ0hBUl9RVUVTVElPTl9NQVJLMiA9IDYzOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL3BhdGgvX3V0aWwudHMKICBmdW5jdGlvbiBhc3NlcnRQYXRoMihwYXRoNSkgewogICAgaWYgKHR5cGVvZiBwYXRoNSAhPT0gInN0cmluZyIpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigKICAgICAgICBgUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KHBhdGg1KX1gCiAgICAgICk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGlzUG9zaXhQYXRoU2VwYXJhdG9yMihjb2RlKSB7CiAgICByZXR1cm4gY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIMjsKICB9CiAgZnVuY3Rpb24gaXNQYXRoU2VwYXJhdG9yMihjb2RlKSB7CiAgICByZXR1cm4gaXNQb3NpeFBhdGhTZXBhcmF0b3IyKGNvZGUpIHx8IGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gyOwogIH0KICBmdW5jdGlvbiBpc1dpbmRvd3NEZXZpY2VSb290Mihjb2RlKSB7CiAgICByZXR1cm4gY29kZSA+PSBDSEFSX0xPV0VSQ0FTRV9BMiAmJiBjb2RlIDw9IENIQVJfTE9XRVJDQVNFX1oyIHx8IGNvZGUgPj0gQ0hBUl9VUFBFUkNBU0VfQTIgJiYgY29kZSA8PSBDSEFSX1VQUEVSQ0FTRV9aMjsKICB9CiAgZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nMihwYXRoNSwgYWxsb3dBYm92ZVJvb3QsIHNlcGFyYXRvciwgaXNQYXRoU2VwYXJhdG9yMykgewogICAgbGV0IHJlcyA9ICIiOwogICAgbGV0IGxhc3RTZWdtZW50TGVuZ3RoID0gMDsKICAgIGxldCBsYXN0U2xhc2ggPSAtMTsKICAgIGxldCBkb3RzID0gMDsKICAgIGxldCBjb2RlOwogICAgZm9yIChsZXQgaTQgPSAwLCBsZW4gPSBwYXRoNS5sZW5ndGg7IGk0IDw9IGxlbjsgKytpNCkgewogICAgICBpZiAoaTQgPCBsZW4pCiAgICAgICAgY29kZSA9IHBhdGg1LmNoYXJDb2RlQXQoaTQpOwogICAgICBlbHNlIGlmIChpc1BhdGhTZXBhcmF0b3IzKGNvZGUpKQogICAgICAgIGJyZWFrOwogICAgICBlbHNlCiAgICAgICAgY29kZSA9IENIQVJfRk9SV0FSRF9TTEFTSDI7CiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IzKGNvZGUpKSB7CiAgICAgICAgaWYgKGxhc3RTbGFzaCA9PT0gaTQgLSAxIHx8IGRvdHMgPT09IDEpIHsKICAgICAgICB9IGVsc2UgaWYgKGxhc3RTbGFzaCAhPT0gaTQgLSAxICYmIGRvdHMgPT09IDIpIHsKICAgICAgICAgIGlmIChyZXMubGVuZ3RoIDwgMiB8fCBsYXN0U2VnbWVudExlbmd0aCAhPT0gMiB8fCByZXMuY2hhckNvZGVBdChyZXMubGVuZ3RoIC0gMSkgIT09IENIQVJfRE9UMiB8fCByZXMuY2hhckNvZGVBdChyZXMubGVuZ3RoIC0gMikgIT09IENIQVJfRE9UMikgewogICAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgICBjb25zdCBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZihzZXBhcmF0b3IpOwogICAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA9PT0gLTEpIHsKICAgICAgICAgICAgICAgIHJlcyA9ICIiOwogICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpOwogICAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXMubGVuZ3RoIC0gMSAtIHJlcy5sYXN0SW5kZXhPZihzZXBhcmF0b3IpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpNDsKICAgICAgICAgICAgICBkb3RzID0gMDsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID09PSAyIHx8IHJlcy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICByZXMgPSAiIjsKICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7CiAgICAgICAgICAgICAgbGFzdFNsYXNoID0gaTQ7CiAgICAgICAgICAgICAgZG90cyA9IDA7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkgewogICAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApCiAgICAgICAgICAgICAgcmVzICs9IGAke3NlcGFyYXRvcn0uLmA7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICByZXMgPSAiLi4iOwogICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkKICAgICAgICAgICAgcmVzICs9IHNlcGFyYXRvciArIHBhdGg1LnNsaWNlKGxhc3RTbGFzaCArIDEsIGk0KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmVzID0gcGF0aDUuc2xpY2UobGFzdFNsYXNoICsgMSwgaTQpOwogICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSBpNCAtIGxhc3RTbGFzaCAtIDE7CiAgICAgICAgfQogICAgICAgIGxhc3RTbGFzaCA9IGk0OwogICAgICAgIGRvdHMgPSAwOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IENIQVJfRE9UMiAmJiBkb3RzICE9PSAtMSkgewogICAgICAgICsrZG90czsKICAgICAgfSBlbHNlIHsKICAgICAgICBkb3RzID0gLTE7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXM7CiAgfQogIGZ1bmN0aW9uIF9mb3JtYXQyKHNlcDcsIHBhdGhPYmplY3QpIHsKICAgIGNvbnN0IGRpciA9IHBhdGhPYmplY3QuZGlyIHx8IHBhdGhPYmplY3Qucm9vdDsKICAgIGNvbnN0IGJhc2UgPSBwYXRoT2JqZWN0LmJhc2UgfHwgKHBhdGhPYmplY3QubmFtZSB8fCAiIikgKyAocGF0aE9iamVjdC5leHQgfHwgIiIpOwogICAgaWYgKCFkaXIpCiAgICAgIHJldHVybiBiYXNlOwogICAgaWYgKGRpciA9PT0gcGF0aE9iamVjdC5yb290KQogICAgICByZXR1cm4gZGlyICsgYmFzZTsKICAgIHJldHVybiBkaXIgKyBzZXA3ICsgYmFzZTsKICB9CiAgdmFyIFdISVRFU1BBQ0VfRU5DT0RJTkdTMiA9IHsKICAgICIJIjogIiUwOSIsCiAgICAiXG4iOiAiJTBBIiwKICAgICJcdiI6ICIlMEIiLAogICAgIlxmIjogIiUwQyIsCiAgICAiXHIiOiAiJTBEIiwKICAgICIgIjogIiUyMCIKICB9OwogIGZ1bmN0aW9uIGVuY29kZVdoaXRlc3BhY2UyKHN0cmluZykgewogICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlQWxsKC9bXHNdL2csIChjMTcpID0+IHsKICAgICAgcmV0dXJuIFdISVRFU1BBQ0VfRU5DT0RJTkdTMltjMTddID8/IGMxNzsKICAgIH0pOwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9wYXRoL3dpbjMyLnRzCiAgdmFyIHNlcDQgPSAiXFwiOwogIHZhciBkZWxpbWl0ZXI0ID0gIjsiOwogIGZ1bmN0aW9uIHJlc29sdmU0KC4uLnBhdGhTZWdtZW50cykgewogICAgbGV0IHJlc29sdmVkRGV2aWNlID0gIiI7CiAgICBsZXQgcmVzb2x2ZWRUYWlsID0gIiI7CiAgICBsZXQgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlOwogICAgZm9yIChsZXQgaTQgPSBwYXRoU2VnbWVudHMubGVuZ3RoIC0gMTsgaTQgPj0gLTE7IGk0LS0pIHsKICAgICAgbGV0IHBhdGg1OwogICAgICBjb25zdCB7IERlbm86IERlbm8zIH0gPSBnbG9iYWxUaGlzOwogICAgICBpZiAoaTQgPj0gMCkgewogICAgICAgIHBhdGg1ID0gcGF0aFNlZ21lbnRzW2k0XTsKICAgICAgfSBlbHNlIGlmICghcmVzb2x2ZWREZXZpY2UpIHsKICAgICAgICBpZiAodHlwZW9mIERlbm8zPy5jd2QgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlJlc29sdmVkIGEgZHJpdmUtbGV0dGVyLWxlc3MgcGF0aCB3aXRob3V0IGEgQ1dELiIpOwogICAgICAgIH0KICAgICAgICBwYXRoNSA9IERlbm8zLmN3ZCgpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICh0eXBlb2YgRGVubzM/LmVudj8uZ2V0ICE9PSAiZnVuY3Rpb24iIHx8IHR5cGVvZiBEZW5vMz8uY3dkICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJSZXNvbHZlZCBhIHJlbGF0aXZlIHBhdGggd2l0aG91dCBhIENXRC4iKTsKICAgICAgICB9CiAgICAgICAgcGF0aDUgPSBEZW5vMy5jd2QoKTsKICAgICAgICBpZiAocGF0aDUgPT09IHZvaWQgMCB8fCBwYXRoNS5zbGljZSgwLCAzKS50b0xvd2VyQ2FzZSgpICE9PSBgJHtyZXNvbHZlZERldmljZS50b0xvd2VyQ2FzZSgpfVxcYCkgewogICAgICAgICAgcGF0aDUgPSBgJHtyZXNvbHZlZERldmljZX1cXGA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzc2VydFBhdGgyKHBhdGg1KTsKICAgICAgY29uc3QgbGVuID0gcGF0aDUubGVuZ3RoOwogICAgICBpZiAobGVuID09PSAwKQogICAgICAgIGNvbnRpbnVlOwogICAgICBsZXQgcm9vdEVuZCA9IDA7CiAgICAgIGxldCBkZXZpY2UgPSAiIjsKICAgICAgbGV0IGlzQWJzb2x1dGU3ID0gZmFsc2U7CiAgICAgIGNvbnN0IGNvZGUgPSBwYXRoNS5jaGFyQ29kZUF0KDApOwogICAgICBpZiAobGVuID4gMSkgewogICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKGNvZGUpKSB7CiAgICAgICAgICBpc0Fic29sdXRlNyA9IHRydWU7CiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yMihwYXRoNS5jaGFyQ29kZUF0KDEpKSkgewogICAgICAgICAgICBsZXQgajE5ID0gMjsKICAgICAgICAgICAgbGV0IGxhc3QgPSBqMTk7CiAgICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChqMTkgPCBsZW4gJiYgajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgY29uc3QgZmlyc3RQYXJ0ID0gcGF0aDUuc2xpY2UobGFzdCwgajE5KTsKICAgICAgICAgICAgICBsYXN0ID0gajE5OwogICAgICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChqMTkgPCBsZW4gJiYgajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgICBsYXN0ID0gajE5OwogICAgICAgICAgICAgICAgZm9yICg7IGoxOSA8IGxlbjsgKytqMTkpIHsKICAgICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChqMTkgPT09IGxlbikgewogICAgICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXCR7Zmlyc3RQYXJ0fVxcJHtwYXRoNS5zbGljZShsYXN0KX1gOwogICAgICAgICAgICAgICAgICByb290RW5kID0gajE5OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqMTkgIT09IGxhc3QpIHsKICAgICAgICAgICAgICAgICAgZGV2aWNlID0gYFxcXFwke2ZpcnN0UGFydH1cXCR7cGF0aDUuc2xpY2UobGFzdCwgajE5KX1gOwogICAgICAgICAgICAgICAgICByb290RW5kID0gajE5OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcm9vdEVuZCA9IDE7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290Mihjb2RlKSkgewogICAgICAgICAgaWYgKHBhdGg1LmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04zKSB7CiAgICAgICAgICAgIGRldmljZSA9IHBhdGg1LnNsaWNlKDAsIDIpOwogICAgICAgICAgICByb290RW5kID0gMjsKICAgICAgICAgICAgaWYgKGxlbiA+IDIpIHsKICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yMihwYXRoNS5jaGFyQ29kZUF0KDIpKSkgewogICAgICAgICAgICAgICAgaXNBYnNvbHV0ZTcgPSB0cnVlOwogICAgICAgICAgICAgICAgcm9vdEVuZCA9IDM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlzUGF0aFNlcGFyYXRvcjIoY29kZSkpIHsKICAgICAgICByb290RW5kID0gMTsKICAgICAgICBpc0Fic29sdXRlNyA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGRldmljZS5sZW5ndGggPiAwICYmIHJlc29sdmVkRGV2aWNlLmxlbmd0aCA+IDAgJiYgZGV2aWNlLnRvTG93ZXJDYXNlKCkgIT09IHJlc29sdmVkRGV2aWNlLnRvTG93ZXJDYXNlKCkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAocmVzb2x2ZWREZXZpY2UubGVuZ3RoID09PSAwICYmIGRldmljZS5sZW5ndGggPiAwKSB7CiAgICAgICAgcmVzb2x2ZWREZXZpY2UgPSBkZXZpY2U7CiAgICAgIH0KICAgICAgaWYgKCFyZXNvbHZlZEFic29sdXRlKSB7CiAgICAgICAgcmVzb2x2ZWRUYWlsID0gYCR7cGF0aDUuc2xpY2Uocm9vdEVuZCl9XFwke3Jlc29sdmVkVGFpbH1gOwogICAgICAgIHJlc29sdmVkQWJzb2x1dGUgPSBpc0Fic29sdXRlNzsKICAgICAgfQogICAgICBpZiAocmVzb2x2ZWRBYnNvbHV0ZSAmJiByZXNvbHZlZERldmljZS5sZW5ndGggPiAwKQogICAgICAgIGJyZWFrOwogICAgfQogICAgcmVzb2x2ZWRUYWlsID0gbm9ybWFsaXplU3RyaW5nMigKICAgICAgcmVzb2x2ZWRUYWlsLAogICAgICAhcmVzb2x2ZWRBYnNvbHV0ZSwKICAgICAgIlxcIiwKICAgICAgaXNQYXRoU2VwYXJhdG9yMgogICAgKTsKICAgIHJldHVybiByZXNvbHZlZERldmljZSArIChyZXNvbHZlZEFic29sdXRlID8gIlxcIiA6ICIiKSArIHJlc29sdmVkVGFpbCB8fCAiLiI7CiAgfQogIGZ1bmN0aW9uIG5vcm1hbGl6ZTUocGF0aDUpIHsKICAgIGFzc2VydFBhdGgyKHBhdGg1KTsKICAgIGNvbnN0IGxlbiA9IHBhdGg1Lmxlbmd0aDsKICAgIGlmIChsZW4gPT09IDApCiAgICAgIHJldHVybiAiLiI7CiAgICBsZXQgcm9vdEVuZCA9IDA7CiAgICBsZXQgZGV2aWNlOwogICAgbGV0IGlzQWJzb2x1dGU3ID0gZmFsc2U7CiAgICBjb25zdCBjb2RlID0gcGF0aDUuY2hhckNvZGVBdCgwKTsKICAgIGlmIChsZW4gPiAxKSB7CiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKGNvZGUpKSB7CiAgICAgICAgaXNBYnNvbHV0ZTcgPSB0cnVlOwogICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKHBhdGg1LmNoYXJDb2RlQXQoMSkpKSB7CiAgICAgICAgICBsZXQgajE5ID0gMjsKICAgICAgICAgIGxldCBsYXN0ID0gajE5OwogICAgICAgICAgZm9yICg7IGoxOSA8IGxlbjsgKytqMTkpIHsKICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChqMTkgPCBsZW4gJiYgajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgIGNvbnN0IGZpcnN0UGFydCA9IHBhdGg1LnNsaWNlKGxhc3QsIGoxOSk7CiAgICAgICAgICAgIGxhc3QgPSBqMTk7CiAgICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IyKHBhdGg1LmNoYXJDb2RlQXQoajE5KSkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoajE5IDwgbGVuICYmIGoxOSAhPT0gbGFzdCkgewogICAgICAgICAgICAgIGxhc3QgPSBqMTk7CiAgICAgICAgICAgICAgZm9yICg7IGoxOSA8IGxlbjsgKytqMTkpIHsKICAgICAgICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKHBhdGg1LmNoYXJDb2RlQXQoajE5KSkpCiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoajE5ID09PSBsZW4pIHsKICAgICAgICAgICAgICAgIHJldHVybiBgXFxcXCR7Zmlyc3RQYXJ0fVxcJHtwYXRoNS5zbGljZShsYXN0KX1cXGA7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChqMTkgIT09IGxhc3QpIHsKICAgICAgICAgICAgICAgIGRldmljZSA9IGBcXFxcJHtmaXJzdFBhcnR9XFwke3BhdGg1LnNsaWNlKGxhc3QsIGoxOSl9YDsKICAgICAgICAgICAgICAgIHJvb3RFbmQgPSBqMTk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJvb3RFbmQgPSAxOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290Mihjb2RlKSkgewogICAgICAgIGlmIChwYXRoNS5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OMykgewogICAgICAgICAgZGV2aWNlID0gcGF0aDUuc2xpY2UoMCwgMik7CiAgICAgICAgICByb290RW5kID0gMjsKICAgICAgICAgIGlmIChsZW4gPiAyKSB7CiAgICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKHBhdGg1LmNoYXJDb2RlQXQoMikpKSB7CiAgICAgICAgICAgICAgaXNBYnNvbHV0ZTcgPSB0cnVlOwogICAgICAgICAgICAgIHJvb3RFbmQgPSAzOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzUGF0aFNlcGFyYXRvcjIoY29kZSkpIHsKICAgICAgcmV0dXJuICJcXCI7CiAgICB9CiAgICBsZXQgdGFpbDsKICAgIGlmIChyb290RW5kIDwgbGVuKSB7CiAgICAgIHRhaWwgPSBub3JtYWxpemVTdHJpbmcyKAogICAgICAgIHBhdGg1LnNsaWNlKHJvb3RFbmQpLAogICAgICAgICFpc0Fic29sdXRlNywKICAgICAgICAiXFwiLAogICAgICAgIGlzUGF0aFNlcGFyYXRvcjIKICAgICAgKTsKICAgIH0gZWxzZSB7CiAgICAgIHRhaWwgPSAiIjsKICAgIH0KICAgIGlmICh0YWlsLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZTcpCiAgICAgIHRhaWwgPSAiLiI7CiAgICBpZiAodGFpbC5sZW5ndGggPiAwICYmIGlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdChsZW4gLSAxKSkpIHsKICAgICAgdGFpbCArPSAiXFwiOwogICAgfQogICAgaWYgKGRldmljZSA9PT0gdm9pZCAwKSB7CiAgICAgIGlmIChpc0Fic29sdXRlNykgewogICAgICAgIGlmICh0YWlsLmxlbmd0aCA+IDApCiAgICAgICAgICByZXR1cm4gYFxcJHt0YWlsfWA7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuICJcXCI7CiAgICAgIH0gZWxzZSBpZiAodGFpbC5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIHRhaWw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzQWJzb2x1dGU3KSB7CiAgICAgIGlmICh0YWlsLmxlbmd0aCA+IDApCiAgICAgICAgcmV0dXJuIGAke2RldmljZX1cXCR7dGFpbH1gOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGAke2RldmljZX1cXGA7CiAgICB9IGVsc2UgaWYgKHRhaWwubGVuZ3RoID4gMCkgewogICAgICByZXR1cm4gZGV2aWNlICsgdGFpbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBkZXZpY2U7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGlzQWJzb2x1dGU0KHBhdGg1KSB7CiAgICBhc3NlcnRQYXRoMihwYXRoNSk7CiAgICBjb25zdCBsZW4gPSBwYXRoNS5sZW5ndGg7CiAgICBpZiAobGVuID09PSAwKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBjb2RlID0gcGF0aDUuY2hhckNvZGVBdCgwKTsKICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKGNvZGUpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290Mihjb2RlKSkgewogICAgICBpZiAobGVuID4gMiAmJiBwYXRoNS5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OMykgewogICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKHBhdGg1LmNoYXJDb2RlQXQoMikpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gam9pbjYoLi4ucGF0aHMpIHsKICAgIGNvbnN0IHBhdGhzQ291bnQgPSBwYXRocy5sZW5ndGg7CiAgICBpZiAocGF0aHNDb3VudCA9PT0gMCkKICAgICAgcmV0dXJuICIuIjsKICAgIGxldCBqb2luZWQ7CiAgICBsZXQgZmlyc3RQYXJ0ID0gbnVsbDsKICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBwYXRoc0NvdW50OyArK2k0KSB7CiAgICAgIGNvbnN0IHBhdGg1ID0gcGF0aHNbaTRdOwogICAgICBhc3NlcnRQYXRoMihwYXRoNSk7CiAgICAgIGlmIChwYXRoNS5sZW5ndGggPiAwKSB7CiAgICAgICAgaWYgKGpvaW5lZCA9PT0gdm9pZCAwKQogICAgICAgICAgam9pbmVkID0gZmlyc3RQYXJ0ID0gcGF0aDU7CiAgICAgICAgZWxzZQogICAgICAgICAgam9pbmVkICs9IGBcXCR7cGF0aDV9YDsKICAgICAgfQogICAgfQogICAgaWYgKGpvaW5lZCA9PT0gdm9pZCAwKQogICAgICByZXR1cm4gIi4iOwogICAgbGV0IG5lZWRzUmVwbGFjZSA9IHRydWU7CiAgICBsZXQgc2xhc2hDb3VudCA9IDA7CiAgICBhc3NlcnQzKGZpcnN0UGFydCAhPSBudWxsKTsKICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKGZpcnN0UGFydC5jaGFyQ29kZUF0KDApKSkgewogICAgICArK3NsYXNoQ291bnQ7CiAgICAgIGNvbnN0IGZpcnN0TGVuID0gZmlyc3RQYXJ0Lmxlbmd0aDsKICAgICAgaWYgKGZpcnN0TGVuID4gMSkgewogICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKGZpcnN0UGFydC5jaGFyQ29kZUF0KDEpKSkgewogICAgICAgICAgKytzbGFzaENvdW50OwogICAgICAgICAgaWYgKGZpcnN0TGVuID4gMikgewogICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yMihmaXJzdFBhcnQuY2hhckNvZGVBdCgyKSkpCiAgICAgICAgICAgICAgKytzbGFzaENvdW50OwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBuZWVkc1JlcGxhY2UgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKG5lZWRzUmVwbGFjZSkgewogICAgICBmb3IgKDsgc2xhc2hDb3VudCA8IGpvaW5lZC5sZW5ndGg7ICsrc2xhc2hDb3VudCkgewogICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yMihqb2luZWQuY2hhckNvZGVBdChzbGFzaENvdW50KSkpCiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoc2xhc2hDb3VudCA+PSAyKQogICAgICAgIGpvaW5lZCA9IGBcXCR7am9pbmVkLnNsaWNlKHNsYXNoQ291bnQpfWA7CiAgICB9CiAgICByZXR1cm4gbm9ybWFsaXplNShqb2luZWQpOwogIH0KICBmdW5jdGlvbiByZWxhdGl2ZTQoZnJvbTIsIHRvKSB7CiAgICBhc3NlcnRQYXRoMihmcm9tMik7CiAgICBhc3NlcnRQYXRoMih0byk7CiAgICBpZiAoZnJvbTIgPT09IHRvKQogICAgICByZXR1cm4gIiI7CiAgICBjb25zdCBmcm9tT3JpZyA9IHJlc29sdmU0KGZyb20yKTsKICAgIGNvbnN0IHRvT3JpZyA9IHJlc29sdmU0KHRvKTsKICAgIGlmIChmcm9tT3JpZyA9PT0gdG9PcmlnKQogICAgICByZXR1cm4gIiI7CiAgICBmcm9tMiA9IGZyb21PcmlnLnRvTG93ZXJDYXNlKCk7CiAgICB0byA9IHRvT3JpZy50b0xvd2VyQ2FzZSgpOwogICAgaWYgKGZyb20yID09PSB0bykKICAgICAgcmV0dXJuICIiOwogICAgbGV0IGZyb21TdGFydCA9IDA7CiAgICBsZXQgZnJvbUVuZCA9IGZyb20yLmxlbmd0aDsKICAgIGZvciAoOyBmcm9tU3RhcnQgPCBmcm9tRW5kOyArK2Zyb21TdGFydCkgewogICAgICBpZiAoZnJvbTIuY2hhckNvZGVBdChmcm9tU3RhcnQpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIMikKICAgICAgICBicmVhazsKICAgIH0KICAgIGZvciAoOyBmcm9tRW5kIC0gMSA+IGZyb21TdGFydDsgLS1mcm9tRW5kKSB7CiAgICAgIGlmIChmcm9tMi5jaGFyQ29kZUF0KGZyb21FbmQgLSAxKSAhPT0gQ0hBUl9CQUNLV0FSRF9TTEFTSDIpCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBjb25zdCBmcm9tTGVuID0gZnJvbUVuZCAtIGZyb21TdGFydDsKICAgIGxldCB0b1N0YXJ0ID0gMDsKICAgIGxldCB0b0VuZCA9IHRvLmxlbmd0aDsKICAgIGZvciAoOyB0b1N0YXJ0IDwgdG9FbmQ7ICsrdG9TdGFydCkgewogICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSAhPT0gQ0hBUl9CQUNLV0FSRF9TTEFTSDIpCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBmb3IgKDsgdG9FbmQgLSAxID4gdG9TdGFydDsgLS10b0VuZCkgewogICAgICBpZiAodG8uY2hhckNvZGVBdCh0b0VuZCAtIDEpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIMikKICAgICAgICBicmVhazsKICAgIH0KICAgIGNvbnN0IHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0OwogICAgY29uc3QgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuOwogICAgbGV0IGxhc3RDb21tb25TZXAgPSAtMTsKICAgIGxldCBpNCA9IDA7CiAgICBmb3IgKDsgaTQgPD0gbGVuZ3RoOyArK2k0KSB7CiAgICAgIGlmIChpNCA9PT0gbGVuZ3RoKSB7CiAgICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7CiAgICAgICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaTQpID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIMikgewogICAgICAgICAgICByZXR1cm4gdG9PcmlnLnNsaWNlKHRvU3RhcnQgKyBpNCArIDEpOwogICAgICAgICAgfSBlbHNlIGlmIChpNCA9PT0gMikgewogICAgICAgICAgICByZXR1cm4gdG9PcmlnLnNsaWNlKHRvU3RhcnQgKyBpNCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChmcm9tTGVuID4gbGVuZ3RoKSB7CiAgICAgICAgICBpZiAoZnJvbTIuY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpNCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gyKSB7CiAgICAgICAgICAgIGxhc3RDb21tb25TZXAgPSBpNDsKICAgICAgICAgIH0gZWxzZSBpZiAoaTQgPT09IDIpIHsKICAgICAgICAgICAgbGFzdENvbW1vblNlcCA9IDM7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNvbnN0IGZyb21Db2RlID0gZnJvbTIuY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpNCk7CiAgICAgIGNvbnN0IHRvQ29kZSA9IHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGk0KTsKICAgICAgaWYgKGZyb21Db2RlICE9PSB0b0NvZGUpCiAgICAgICAgYnJlYWs7CiAgICAgIGVsc2UgaWYgKGZyb21Db2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIMikKICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTQ7CiAgICB9CiAgICBpZiAoaTQgIT09IGxlbmd0aCAmJiBsYXN0Q29tbW9uU2VwID09PSAtMSkgewogICAgICByZXR1cm4gdG9PcmlnOwogICAgfQogICAgbGV0IG91dCA9ICIiOwogICAgaWYgKGxhc3RDb21tb25TZXAgPT09IC0xKQogICAgICBsYXN0Q29tbW9uU2VwID0gMDsKICAgIGZvciAoaTQgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaTQgPD0gZnJvbUVuZDsgKytpNCkgewogICAgICBpZiAoaTQgPT09IGZyb21FbmQgfHwgZnJvbTIuY2hhckNvZGVBdChpNCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gyKSB7CiAgICAgICAgaWYgKG91dC5sZW5ndGggPT09IDApCiAgICAgICAgICBvdXQgKz0gIi4uIjsKICAgICAgICBlbHNlCiAgICAgICAgICBvdXQgKz0gIlxcLi4iOwogICAgICB9CiAgICB9CiAgICBpZiAob3V0Lmxlbmd0aCA+IDApIHsKICAgICAgcmV0dXJuIG91dCArIHRvT3JpZy5zbGljZSh0b1N0YXJ0ICsgbGFzdENvbW1vblNlcCwgdG9FbmQpOwogICAgfSBlbHNlIHsKICAgICAgdG9TdGFydCArPSBsYXN0Q29tbW9uU2VwOwogICAgICBpZiAodG9PcmlnLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gyKQogICAgICAgICsrdG9TdGFydDsKICAgICAgcmV0dXJuIHRvT3JpZy5zbGljZSh0b1N0YXJ0LCB0b0VuZCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHRvTmFtZXNwYWNlZFBhdGg0KHBhdGg1KSB7CiAgICBpZiAodHlwZW9mIHBhdGg1ICE9PSAic3RyaW5nIikKICAgICAgcmV0dXJuIHBhdGg1OwogICAgaWYgKHBhdGg1Lmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZTQocGF0aDUpOwogICAgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPj0gMykgewogICAgICBpZiAocmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gyKSB7CiAgICAgICAgaWYgKHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIMikgewogICAgICAgICAgY29uc3QgY29kZSA9IHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDIpOwogICAgICAgICAgaWYgKGNvZGUgIT09IENIQVJfUVVFU1RJT05fTUFSSzIgJiYgY29kZSAhPT0gQ0hBUl9ET1QyKSB7CiAgICAgICAgICAgIHJldHVybiBgXFxcXD9cXFVOQ1xcJHtyZXNvbHZlZFBhdGguc2xpY2UoMil9YDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdDIocmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMCkpKSB7CiAgICAgICAgaWYgKHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OMyAmJiByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgyKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSDIpIHsKICAgICAgICAgIHJldHVybiBgXFxcXD9cXCR7cmVzb2x2ZWRQYXRofWA7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGF0aDU7CiAgfQogIGZ1bmN0aW9uIGRpcm5hbWU0KHBhdGg1KSB7CiAgICBhc3NlcnRQYXRoMihwYXRoNSk7CiAgICBjb25zdCBsZW4gPSBwYXRoNS5sZW5ndGg7CiAgICBpZiAobGVuID09PSAwKQogICAgICByZXR1cm4gIi4iOwogICAgbGV0IHJvb3RFbmQgPSAtMTsKICAgIGxldCBlbmQgPSAtMTsKICAgIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgbGV0IG9mZnNldCA9IDA7CiAgICBjb25zdCBjb2RlID0gcGF0aDUuY2hhckNvZGVBdCgwKTsKICAgIGlmIChsZW4gPiAxKSB7CiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKGNvZGUpKSB7CiAgICAgICAgcm9vdEVuZCA9IG9mZnNldCA9IDE7CiAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdCgxKSkpIHsKICAgICAgICAgIGxldCBqMTkgPSAyOwogICAgICAgICAgbGV0IGxhc3QgPSBqMTk7CiAgICAgICAgICBmb3IgKDsgajE5IDwgbGVuOyArK2oxOSkgewogICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yMihwYXRoNS5jaGFyQ29kZUF0KGoxOSkpKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGoxOSA8IGxlbiAmJiBqMTkgIT09IGxhc3QpIHsKICAgICAgICAgICAgbGFzdCA9IGoxOTsKICAgICAgICAgICAgZm9yICg7IGoxOSA8IGxlbjsgKytqMTkpIHsKICAgICAgICAgICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChqMTkgPCBsZW4gJiYgajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgbGFzdCA9IGoxOTsKICAgICAgICAgICAgICBmb3IgKDsgajE5IDwgbGVuOyArK2oxOSkgewogICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdChqMTkpKSkKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChqMTkgPT09IGxlbikgewogICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg1OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgICByb290RW5kID0gb2Zmc2V0ID0gajE5ICsgMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdDIoY29kZSkpIHsKICAgICAgICBpZiAocGF0aDUuY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTjMpIHsKICAgICAgICAgIHJvb3RFbmQgPSBvZmZzZXQgPSAyOwogICAgICAgICAgaWYgKGxlbiA+IDIpIHsKICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdCgyKSkpCiAgICAgICAgICAgICAgcm9vdEVuZCA9IG9mZnNldCA9IDM7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzUGF0aFNlcGFyYXRvcjIoY29kZSkpIHsKICAgICAgcmV0dXJuIHBhdGg1OwogICAgfQogICAgZm9yIChsZXQgaTQgPSBsZW4gLSAxOyBpNCA+PSBvZmZzZXQ7IC0taTQpIHsKICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdChpNCkpKSB7CiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgIGVuZCA9IGk0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoZW5kID09PSAtMSkgewogICAgICBpZiAocm9vdEVuZCA9PT0gLTEpCiAgICAgICAgcmV0dXJuICIuIjsKICAgICAgZWxzZQogICAgICAgIGVuZCA9IHJvb3RFbmQ7CiAgICB9CiAgICByZXR1cm4gcGF0aDUuc2xpY2UoMCwgZW5kKTsKICB9CiAgZnVuY3Rpb24gYmFzZW5hbWU0KHBhdGg1LCBleHQgPSAiIikgewogICAgaWYgKGV4dCAhPT0gdm9pZCAwICYmIHR5cGVvZiBleHQgIT09ICJzdHJpbmciKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTsKICAgIH0KICAgIGFzc2VydFBhdGgyKHBhdGg1KTsKICAgIGxldCBzdGFydCA9IDA7CiAgICBsZXQgZW5kID0gLTE7CiAgICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTsKICAgIGxldCBpNDsKICAgIGlmIChwYXRoNS5sZW5ndGggPj0gMikgewogICAgICBjb25zdCBkcml2ZSA9IHBhdGg1LmNoYXJDb2RlQXQoMCk7CiAgICAgIGlmIChpc1dpbmRvd3NEZXZpY2VSb290Mihkcml2ZSkpIHsKICAgICAgICBpZiAocGF0aDUuY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTjMpCiAgICAgICAgICBzdGFydCA9IDI7CiAgICAgIH0KICAgIH0KICAgIGlmIChleHQgIT09IHZvaWQgMCAmJiBleHQubGVuZ3RoID4gMCAmJiBleHQubGVuZ3RoIDw9IHBhdGg1Lmxlbmd0aCkgewogICAgICBpZiAoZXh0Lmxlbmd0aCA9PT0gcGF0aDUubGVuZ3RoICYmIGV4dCA9PT0gcGF0aDUpCiAgICAgICAgcmV0dXJuICIiOwogICAgICBsZXQgZXh0SWR4ID0gZXh0Lmxlbmd0aCAtIDE7CiAgICAgIGxldCBmaXJzdE5vblNsYXNoRW5kID0gLTE7CiAgICAgIGZvciAoaTQgPSBwYXRoNS5sZW5ndGggLSAxOyBpNCA+PSBzdGFydDsgLS1pNCkgewogICAgICAgIGNvbnN0IGNvZGUgPSBwYXRoNS5jaGFyQ29kZUF0KGk0KTsKICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yMihjb2RlKSkgewogICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgICAgc3RhcnQgPSBpNCArIDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA9PT0gLTEpIHsKICAgICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7CiAgICAgICAgICAgIGZpcnN0Tm9uU2xhc2hFbmQgPSBpNCArIDE7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXh0SWR4ID49IDApIHsKICAgICAgICAgICAgaWYgKGNvZGUgPT09IGV4dC5jaGFyQ29kZUF0KGV4dElkeCkpIHsKICAgICAgICAgICAgICBpZiAoLS1leHRJZHggPT09IC0xKSB7CiAgICAgICAgICAgICAgICBlbmQgPSBpNDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZXh0SWR4ID0gLTE7CiAgICAgICAgICAgICAgZW5kID0gZmlyc3ROb25TbGFzaEVuZDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RhcnQgPT09IGVuZCkKICAgICAgICBlbmQgPSBmaXJzdE5vblNsYXNoRW5kOwogICAgICBlbHNlIGlmIChlbmQgPT09IC0xKQogICAgICAgIGVuZCA9IHBhdGg1Lmxlbmd0aDsKICAgICAgcmV0dXJuIHBhdGg1LnNsaWNlKHN0YXJ0LCBlbmQpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpNCA9IHBhdGg1Lmxlbmd0aCAtIDE7IGk0ID49IHN0YXJ0OyAtLWk0KSB7CiAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdChpNCkpKSB7CiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkgewogICAgICAgICAgICBzdGFydCA9IGk0ICsgMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChlbmQgPT09IC0xKSB7CiAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTsKICAgICAgICAgIGVuZCA9IGk0ICsgMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGVuZCA9PT0gLTEpCiAgICAgICAgcmV0dXJuICIiOwogICAgICByZXR1cm4gcGF0aDUuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGV4dG5hbWU0KHBhdGg1KSB7CiAgICBhc3NlcnRQYXRoMihwYXRoNSk7CiAgICBsZXQgc3RhcnQgPSAwOwogICAgbGV0IHN0YXJ0RG90ID0gLTE7CiAgICBsZXQgc3RhcnRQYXJ0ID0gMDsKICAgIGxldCBlbmQgPSAtMTsKICAgIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgbGV0IHByZURvdFN0YXRlID0gMDsKICAgIGlmIChwYXRoNS5sZW5ndGggPj0gMiAmJiBwYXRoNS5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OMyAmJiBpc1dpbmRvd3NEZXZpY2VSb290MihwYXRoNS5jaGFyQ29kZUF0KDApKSkgewogICAgICBzdGFydCA9IHN0YXJ0UGFydCA9IDI7CiAgICB9CiAgICBmb3IgKGxldCBpNCA9IHBhdGg1Lmxlbmd0aCAtIDE7IGk0ID49IHN0YXJ0OyAtLWk0KSB7CiAgICAgIGNvbnN0IGNvZGUgPSBwYXRoNS5jaGFyQ29kZUF0KGk0KTsKICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIoY29kZSkpIHsKICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkgewogICAgICAgICAgc3RhcnRQYXJ0ID0gaTQgKyAxOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChlbmQgPT09IC0xKSB7CiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7CiAgICAgICAgZW5kID0gaTQgKyAxOwogICAgICB9CiAgICAgIGlmIChjb2RlID09PSBDSEFSX0RPVDIpIHsKICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKQogICAgICAgICAgc3RhcnREb3QgPSBpNDsKICAgICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkKICAgICAgICAgIHByZURvdFN0YXRlID0gMTsKICAgICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHsKICAgICAgICBwcmVEb3RTdGF0ZSA9IC0xOwogICAgICB9CiAgICB9CiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHwgcHJlRG90U3RhdGUgPT09IDAgfHwgcHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogICAgcmV0dXJuIHBhdGg1LnNsaWNlKHN0YXJ0RG90LCBlbmQpOwogIH0KICBmdW5jdGlvbiBmb3JtYXQ2KHBhdGhPYmplY3QpIHsKICAgIGlmIChwYXRoT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiBwYXRoT2JqZWN0ICE9PSAib2JqZWN0IikgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgIGBUaGUgInBhdGhPYmplY3QiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgcGF0aE9iamVjdH1gCiAgICAgICk7CiAgICB9CiAgICByZXR1cm4gX2Zvcm1hdDIoIlxcIiwgcGF0aE9iamVjdCk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlNihwYXRoNSkgewogICAgYXNzZXJ0UGF0aDIocGF0aDUpOwogICAgY29uc3QgcmV0ID0geyByb290OiAiIiwgZGlyOiAiIiwgYmFzZTogIiIsIGV4dDogIiIsIG5hbWU6ICIiIH07CiAgICBjb25zdCBsZW4gPSBwYXRoNS5sZW5ndGg7CiAgICBpZiAobGVuID09PSAwKQogICAgICByZXR1cm4gcmV0OwogICAgbGV0IHJvb3RFbmQgPSAwOwogICAgbGV0IGNvZGUgPSBwYXRoNS5jaGFyQ29kZUF0KDApOwogICAgaWYgKGxlbiA+IDEpIHsKICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIoY29kZSkpIHsKICAgICAgICByb290RW5kID0gMTsKICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yMihwYXRoNS5jaGFyQ29kZUF0KDEpKSkgewogICAgICAgICAgbGV0IGoxOSA9IDI7CiAgICAgICAgICBsZXQgbGFzdCA9IGoxOTsKICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IyKHBhdGg1LmNoYXJDb2RlQXQoajE5KSkpCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoajE5IDwgbGVuICYmIGoxOSAhPT0gbGFzdCkgewogICAgICAgICAgICBsYXN0ID0gajE5OwogICAgICAgICAgICBmb3IgKDsgajE5IDwgbGVuOyArK2oxOSkgewogICAgICAgICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yMihwYXRoNS5jaGFyQ29kZUF0KGoxOSkpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGoxOSA8IGxlbiAmJiBqMTkgIT09IGxhc3QpIHsKICAgICAgICAgICAgICBsYXN0ID0gajE5OwogICAgICAgICAgICAgIGZvciAoOyBqMTkgPCBsZW47ICsrajE5KSB7CiAgICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yMihwYXRoNS5jaGFyQ29kZUF0KGoxOSkpKQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGoxOSA9PT0gbGVuKSB7CiAgICAgICAgICAgICAgICByb290RW5kID0gajE5OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoajE5ICE9PSBsYXN0KSB7CiAgICAgICAgICAgICAgICByb290RW5kID0gajE5ICsgMTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdDIoY29kZSkpIHsKICAgICAgICBpZiAocGF0aDUuY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTjMpIHsKICAgICAgICAgIHJvb3RFbmQgPSAyOwogICAgICAgICAgaWYgKGxlbiA+IDIpIHsKICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcjIocGF0aDUuY2hhckNvZGVBdCgyKSkpIHsKICAgICAgICAgICAgICBpZiAobGVuID09PSAzKSB7CiAgICAgICAgICAgICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoNTsKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJvb3RFbmQgPSAzOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoNTsKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yMihjb2RlKSkgewogICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoNTsKICAgICAgcmV0dXJuIHJldDsKICAgIH0KICAgIGlmIChyb290RW5kID4gMCkKICAgICAgcmV0LnJvb3QgPSBwYXRoNS5zbGljZSgwLCByb290RW5kKTsKICAgIGxldCBzdGFydERvdCA9IC0xOwogICAgbGV0IHN0YXJ0UGFydCA9IHJvb3RFbmQ7CiAgICBsZXQgZW5kID0gLTE7CiAgICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTsKICAgIGxldCBpNCA9IHBhdGg1Lmxlbmd0aCAtIDE7CiAgICBsZXQgcHJlRG90U3RhdGUgPSAwOwogICAgZm9yICg7IGk0ID49IHJvb3RFbmQ7IC0taTQpIHsKICAgICAgY29kZSA9IHBhdGg1LmNoYXJDb2RlQXQoaTQpOwogICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yMihjb2RlKSkgewogICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7CiAgICAgICAgICBzdGFydFBhcnQgPSBpNCArIDE7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGVuZCA9PT0gLTEpIHsKICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTsKICAgICAgICBlbmQgPSBpNCArIDE7CiAgICAgIH0KICAgICAgaWYgKGNvZGUgPT09IENIQVJfRE9UMikgewogICAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpCiAgICAgICAgICBzdGFydERvdCA9IGk0OwogICAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKQogICAgICAgICAgcHJlRG90U3RhdGUgPSAxOwogICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkgewogICAgICAgIHByZURvdFN0YXRlID0gLTE7CiAgICAgIH0KICAgIH0KICAgIGlmIChzdGFydERvdCA9PT0gLTEgfHwgZW5kID09PSAtMSB8fCBwcmVEb3RTdGF0ZSA9PT0gMCB8fCBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkgewogICAgICBpZiAoZW5kICE9PSAtMSkgewogICAgICAgIHJldC5iYXNlID0gcmV0Lm5hbWUgPSBwYXRoNS5zbGljZShzdGFydFBhcnQsIGVuZCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldC5uYW1lID0gcGF0aDUuc2xpY2Uoc3RhcnRQYXJ0LCBzdGFydERvdCk7CiAgICAgIHJldC5iYXNlID0gcGF0aDUuc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpOwogICAgICByZXQuZXh0ID0gcGF0aDUuc2xpY2Uoc3RhcnREb3QsIGVuZCk7CiAgICB9CiAgICBpZiAoc3RhcnRQYXJ0ID4gMCAmJiBzdGFydFBhcnQgIT09IHJvb3RFbmQpIHsKICAgICAgcmV0LmRpciA9IHBhdGg1LnNsaWNlKDAsIHN0YXJ0UGFydCAtIDEpOwogICAgfSBlbHNlCiAgICAgIHJldC5kaXIgPSByZXQucm9vdDsKICAgIHJldHVybiByZXQ7CiAgfQogIGZ1bmN0aW9uIGZyb21GaWxlVXJsNCh1cmwpIHsKICAgIHVybCA9IHVybCBpbnN0YW5jZW9mIFVSTCA/IHVybCA6IG5ldyBVUkwodXJsKTsKICAgIGlmICh1cmwucHJvdG9jb2wgIT0gImZpbGU6IikgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJNdXN0IGJlIGEgZmlsZSBVUkwuIik7CiAgICB9CiAgICBsZXQgcGF0aDUgPSBkZWNvZGVVUklDb21wb25lbnQoCiAgICAgIHVybC5wYXRobmFtZS5yZXBsYWNlKC9cLy9nLCAiXFwiKS5yZXBsYWNlKC8lKD8hWzAtOUEtRmEtZl17Mn0pL2csICIlMjUiKQogICAgKS5yZXBsYWNlKC9eXFwqKFtBLVphLXpdOikoXFx8JCkvLCAiJDFcXCIpOwogICAgaWYgKHVybC5ob3N0bmFtZSAhPSAiIikgewogICAgICBwYXRoNSA9IGBcXFxcJHt1cmwuaG9zdG5hbWV9JHtwYXRoNX1gOwogICAgfQogICAgcmV0dXJuIHBhdGg1OwogIH0KICBmdW5jdGlvbiB0b0ZpbGVVcmw0KHBhdGg1KSB7CiAgICBpZiAoIWlzQWJzb2x1dGU0KHBhdGg1KSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJNdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIik7CiAgICB9CiAgICBjb25zdCBbLCBob3N0bmFtZSwgcGF0aG5hbWVdID0gcGF0aDUubWF0Y2goCiAgICAgIC9eKD86Wy9cXF17Mn0oW14vXFxdKykoPz1bL1xcXSg/OlteL1xcXXwkKSkpPyguKikvCiAgICApOwogICAgY29uc3QgdXJsID0gbmV3IFVSTCgiZmlsZTovLy8iKTsKICAgIHVybC5wYXRobmFtZSA9IGVuY29kZVdoaXRlc3BhY2UyKHBhdGhuYW1lLnJlcGxhY2UoLyUvZywgIiUyNSIpKTsKICAgIGlmIChob3N0bmFtZSAhPSBudWxsICYmIGhvc3RuYW1lICE9ICJsb2NhbGhvc3QiKSB7CiAgICAgIHVybC5ob3N0bmFtZSA9IGhvc3RuYW1lOwogICAgICBpZiAoIXVybC5ob3N0bmFtZSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaG9zdG5hbWUuIik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB1cmw7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL3BhdGgvcG9zaXgudHMKICB2YXIgcG9zaXhfZXhwb3J0czIgPSB7fTsKICBfX2V4cG9ydChwb3NpeF9leHBvcnRzMiwgewogICAgYmFzZW5hbWU6ICgpID0+IGJhc2VuYW1lNSwKICAgIGRlbGltaXRlcjogKCkgPT4gZGVsaW1pdGVyNSwKICAgIGRpcm5hbWU6ICgpID0+IGRpcm5hbWU1LAogICAgZXh0bmFtZTogKCkgPT4gZXh0bmFtZTUsCiAgICBmb3JtYXQ6ICgpID0+IGZvcm1hdDcsCiAgICBmcm9tRmlsZVVybDogKCkgPT4gZnJvbUZpbGVVcmw1LAogICAgaXNBYnNvbHV0ZTogKCkgPT4gaXNBYnNvbHV0ZTUsCiAgICBqb2luOiAoKSA9PiBqb2luNywKICAgIG5vcm1hbGl6ZTogKCkgPT4gbm9ybWFsaXplNiwKICAgIHBhcnNlOiAoKSA9PiBwYXJzZTcsCiAgICByZWxhdGl2ZTogKCkgPT4gcmVsYXRpdmU1LAogICAgcmVzb2x2ZTogKCkgPT4gcmVzb2x2ZTUsCiAgICBzZXA6ICgpID0+IHNlcDUsCiAgICB0b0ZpbGVVcmw6ICgpID0+IHRvRmlsZVVybDUsCiAgICB0b05hbWVzcGFjZWRQYXRoOiAoKSA9PiB0b05hbWVzcGFjZWRQYXRoNQogIH0pOwogIHZhciBzZXA1ID0gIi8iOwogIHZhciBkZWxpbWl0ZXI1ID0gIjoiOwogIGZ1bmN0aW9uIHJlc29sdmU1KC4uLnBhdGhTZWdtZW50cykgewogICAgbGV0IHJlc29sdmVkUGF0aCA9ICIiOwogICAgbGV0IHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTsKICAgIGZvciAobGV0IGk0ID0gcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDE7IGk0ID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpNC0tKSB7CiAgICAgIGxldCBwYXRoNTsKICAgICAgaWYgKGk0ID49IDApCiAgICAgICAgcGF0aDUgPSBwYXRoU2VnbWVudHNbaTRdOwogICAgICBlbHNlIHsKICAgICAgICBjb25zdCB7IERlbm86IERlbm8zIH0gPSBnbG9iYWxUaGlzOwogICAgICAgIGlmICh0eXBlb2YgRGVubzM/LmN3ZCAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVzb2x2ZWQgYSByZWxhdGl2ZSBwYXRoIHdpdGhvdXQgYSBDV0QuIik7CiAgICAgICAgfQogICAgICAgIHBhdGg1ID0gRGVubzMuY3dkKCk7CiAgICAgIH0KICAgICAgYXNzZXJ0UGF0aDIocGF0aDUpOwogICAgICBpZiAocGF0aDUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgcmVzb2x2ZWRQYXRoID0gYCR7cGF0aDV9LyR7cmVzb2x2ZWRQYXRofWA7CiAgICAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoNS5jaGFyQ29kZUF0KDApID09PSBDSEFSX0ZPUldBUkRfU0xBU0gyOwogICAgfQogICAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplU3RyaW5nMigKICAgICAgcmVzb2x2ZWRQYXRoLAogICAgICAhcmVzb2x2ZWRBYnNvbHV0ZSwKICAgICAgIi8iLAogICAgICBpc1Bvc2l4UGF0aFNlcGFyYXRvcjIKICAgICk7CiAgICBpZiAocmVzb2x2ZWRBYnNvbHV0ZSkgewogICAgICBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDApCiAgICAgICAgcmV0dXJuIGAvJHtyZXNvbHZlZFBhdGh9YDsKICAgICAgZWxzZQogICAgICAgIHJldHVybiAiLyI7CiAgICB9IGVsc2UgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKQogICAgICByZXR1cm4gcmVzb2x2ZWRQYXRoOwogICAgZWxzZQogICAgICByZXR1cm4gIi4iOwogIH0KICBmdW5jdGlvbiBub3JtYWxpemU2KHBhdGg1KSB7CiAgICBhc3NlcnRQYXRoMihwYXRoNSk7CiAgICBpZiAocGF0aDUubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gIi4iOwogICAgY29uc3QgaXNBYnNvbHV0ZTcgPSBwYXRoNS5jaGFyQ29kZUF0KDApID09PSBDSEFSX0ZPUldBUkRfU0xBU0gyOwogICAgY29uc3QgdHJhaWxpbmdTZXBhcmF0b3IgPSBwYXRoNS5jaGFyQ29kZUF0KHBhdGg1Lmxlbmd0aCAtIDEpID09PSBDSEFSX0ZPUldBUkRfU0xBU0gyOwogICAgcGF0aDUgPSBub3JtYWxpemVTdHJpbmcyKHBhdGg1LCAhaXNBYnNvbHV0ZTcsICIvIiwgaXNQb3NpeFBhdGhTZXBhcmF0b3IyKTsKICAgIGlmIChwYXRoNS5sZW5ndGggPT09IDAgJiYgIWlzQWJzb2x1dGU3KQogICAgICBwYXRoNSA9ICIuIjsKICAgIGlmIChwYXRoNS5sZW5ndGggPiAwICYmIHRyYWlsaW5nU2VwYXJhdG9yKQogICAgICBwYXRoNSArPSAiLyI7CiAgICBpZiAoaXNBYnNvbHV0ZTcpCiAgICAgIHJldHVybiBgLyR7cGF0aDV9YDsKICAgIHJldHVybiBwYXRoNTsKICB9CiAgZnVuY3Rpb24gaXNBYnNvbHV0ZTUocGF0aDUpIHsKICAgIGFzc2VydFBhdGgyKHBhdGg1KTsKICAgIHJldHVybiBwYXRoNS5sZW5ndGggPiAwICYmIHBhdGg1LmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDI7CiAgfQogIGZ1bmN0aW9uIGpvaW43KC4uLnBhdGhzKSB7CiAgICBpZiAocGF0aHMubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gIi4iOwogICAgbGV0IGpvaW5lZDsKICAgIGZvciAobGV0IGk0ID0gMCwgbGVuID0gcGF0aHMubGVuZ3RoOyBpNCA8IGxlbjsgKytpNCkgewogICAgICBjb25zdCBwYXRoNSA9IHBhdGhzW2k0XTsKICAgICAgYXNzZXJ0UGF0aDIocGF0aDUpOwogICAgICBpZiAocGF0aDUubGVuZ3RoID4gMCkgewogICAgICAgIGlmICgham9pbmVkKQogICAgICAgICAgam9pbmVkID0gcGF0aDU7CiAgICAgICAgZWxzZQogICAgICAgICAgam9pbmVkICs9IGAvJHtwYXRoNX1gOwogICAgICB9CiAgICB9CiAgICBpZiAoIWpvaW5lZCkKICAgICAgcmV0dXJuICIuIjsKICAgIHJldHVybiBub3JtYWxpemU2KGpvaW5lZCk7CiAgfQogIGZ1bmN0aW9uIHJlbGF0aXZlNShmcm9tMiwgdG8pIHsKICAgIGFzc2VydFBhdGgyKGZyb20yKTsKICAgIGFzc2VydFBhdGgyKHRvKTsKICAgIGlmIChmcm9tMiA9PT0gdG8pCiAgICAgIHJldHVybiAiIjsKICAgIGZyb20yID0gcmVzb2x2ZTUoZnJvbTIpOwogICAgdG8gPSByZXNvbHZlNSh0byk7CiAgICBpZiAoZnJvbTIgPT09IHRvKQogICAgICByZXR1cm4gIiI7CiAgICBsZXQgZnJvbVN0YXJ0ID0gMTsKICAgIGNvbnN0IGZyb21FbmQgPSBmcm9tMi5sZW5ndGg7CiAgICBmb3IgKDsgZnJvbVN0YXJ0IDwgZnJvbUVuZDsgKytmcm9tU3RhcnQpIHsKICAgICAgaWYgKGZyb20yLmNoYXJDb2RlQXQoZnJvbVN0YXJ0KSAhPT0gQ0hBUl9GT1JXQVJEX1NMQVNIMikKICAgICAgICBicmVhazsKICAgIH0KICAgIGNvbnN0IGZyb21MZW4gPSBmcm9tRW5kIC0gZnJvbVN0YXJ0OwogICAgbGV0IHRvU3RhcnQgPSAxOwogICAgY29uc3QgdG9FbmQgPSB0by5sZW5ndGg7CiAgICBmb3IgKDsgdG9TdGFydCA8IHRvRW5kOyArK3RvU3RhcnQpIHsKICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgIT09IENIQVJfRk9SV0FSRF9TTEFTSDIpCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBjb25zdCB0b0xlbiA9IHRvRW5kIC0gdG9TdGFydDsKICAgIGNvbnN0IGxlbmd0aCA9IGZyb21MZW4gPCB0b0xlbiA/IGZyb21MZW4gOiB0b0xlbjsKICAgIGxldCBsYXN0Q29tbW9uU2VwID0gLTE7CiAgICBsZXQgaTQgPSAwOwogICAgZm9yICg7IGk0IDw9IGxlbmd0aDsgKytpNCkgewogICAgICBpZiAoaTQgPT09IGxlbmd0aCkgewogICAgICAgIGlmICh0b0xlbiA+IGxlbmd0aCkgewogICAgICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGk0KSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIMikgewogICAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGk0ICsgMSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGk0ID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaTQpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZnJvbUxlbiA+IGxlbmd0aCkgewogICAgICAgICAgaWYgKGZyb20yLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaTQpID09PSBDSEFSX0ZPUldBUkRfU0xBU0gyKSB7CiAgICAgICAgICAgIGxhc3RDb21tb25TZXAgPSBpNDsKICAgICAgICAgIH0gZWxzZSBpZiAoaTQgPT09IDApIHsKICAgICAgICAgICAgbGFzdENvbW1vblNlcCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNvbnN0IGZyb21Db2RlID0gZnJvbTIuY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpNCk7CiAgICAgIGNvbnN0IHRvQ29kZSA9IHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGk0KTsKICAgICAgaWYgKGZyb21Db2RlICE9PSB0b0NvZGUpCiAgICAgICAgYnJlYWs7CiAgICAgIGVsc2UgaWYgKGZyb21Db2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gyKQogICAgICAgIGxhc3RDb21tb25TZXAgPSBpNDsKICAgIH0KICAgIGxldCBvdXQgPSAiIjsKICAgIGZvciAoaTQgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaTQgPD0gZnJvbUVuZDsgKytpNCkgewogICAgICBpZiAoaTQgPT09IGZyb21FbmQgfHwgZnJvbTIuY2hhckNvZGVBdChpNCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDIpIHsKICAgICAgICBpZiAob3V0Lmxlbmd0aCA9PT0gMCkKICAgICAgICAgIG91dCArPSAiLi4iOwogICAgICAgIGVsc2UKICAgICAgICAgIG91dCArPSAiLy4uIjsKICAgICAgfQogICAgfQogICAgaWYgKG91dC5sZW5ndGggPiAwKQogICAgICByZXR1cm4gb3V0ICsgdG8uc2xpY2UodG9TdGFydCArIGxhc3RDb21tb25TZXApOwogICAgZWxzZSB7CiAgICAgIHRvU3RhcnQgKz0gbGFzdENvbW1vblNlcDsKICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDIpCiAgICAgICAgKyt0b1N0YXJ0OwogICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHRvTmFtZXNwYWNlZFBhdGg1KHBhdGg1KSB7CiAgICByZXR1cm4gcGF0aDU7CiAgfQogIGZ1bmN0aW9uIGRpcm5hbWU1KHBhdGg1KSB7CiAgICBhc3NlcnRQYXRoMihwYXRoNSk7CiAgICBpZiAocGF0aDUubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gIi4iOwogICAgY29uc3QgaGFzUm9vdCA9IHBhdGg1LmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDI7CiAgICBsZXQgZW5kID0gLTE7CiAgICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTsKICAgIGZvciAobGV0IGk0ID0gcGF0aDUubGVuZ3RoIC0gMTsgaTQgPj0gMTsgLS1pNCkgewogICAgICBpZiAocGF0aDUuY2hhckNvZGVBdChpNCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDIpIHsKICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkgewogICAgICAgICAgZW5kID0gaTQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmIChlbmQgPT09IC0xKQogICAgICByZXR1cm4gaGFzUm9vdCA/ICIvIiA6ICIuIjsKICAgIGlmIChoYXNSb290ICYmIGVuZCA9PT0gMSkKICAgICAgcmV0dXJuICIvLyI7CiAgICByZXR1cm4gcGF0aDUuc2xpY2UoMCwgZW5kKTsKICB9CiAgZnVuY3Rpb24gYmFzZW5hbWU1KHBhdGg1LCBleHQgPSAiIikgewogICAgaWYgKGV4dCAhPT0gdm9pZCAwICYmIHR5cGVvZiBleHQgIT09ICJzdHJpbmciKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTsKICAgIH0KICAgIGFzc2VydFBhdGgyKHBhdGg1KTsKICAgIGxldCBzdGFydCA9IDA7CiAgICBsZXQgZW5kID0gLTE7CiAgICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTsKICAgIGxldCBpNDsKICAgIGlmIChleHQgIT09IHZvaWQgMCAmJiBleHQubGVuZ3RoID4gMCAmJiBleHQubGVuZ3RoIDw9IHBhdGg1Lmxlbmd0aCkgewogICAgICBpZiAoZXh0Lmxlbmd0aCA9PT0gcGF0aDUubGVuZ3RoICYmIGV4dCA9PT0gcGF0aDUpCiAgICAgICAgcmV0dXJuICIiOwogICAgICBsZXQgZXh0SWR4ID0gZXh0Lmxlbmd0aCAtIDE7CiAgICAgIGxldCBmaXJzdE5vblNsYXNoRW5kID0gLTE7CiAgICAgIGZvciAoaTQgPSBwYXRoNS5sZW5ndGggLSAxOyBpNCA+PSAwOyAtLWk0KSB7CiAgICAgICAgY29uc3QgY29kZSA9IHBhdGg1LmNoYXJDb2RlQXQoaTQpOwogICAgICAgIGlmIChjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gyKSB7CiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkgewogICAgICAgICAgICBzdGFydCA9IGk0ICsgMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChmaXJzdE5vblNsYXNoRW5kID09PSAtMSkgewogICAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTsKICAgICAgICAgICAgZmlyc3ROb25TbGFzaEVuZCA9IGk0ICsgMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChleHRJZHggPj0gMCkgewogICAgICAgICAgICBpZiAoY29kZSA9PT0gZXh0LmNoYXJDb2RlQXQoZXh0SWR4KSkgewogICAgICAgICAgICAgIGlmICgtLWV4dElkeCA9PT0gLTEpIHsKICAgICAgICAgICAgICAgIGVuZCA9IGk0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBleHRJZHggPSAtMTsKICAgICAgICAgICAgICBlbmQgPSBmaXJzdE5vblNsYXNoRW5kOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdGFydCA9PT0gZW5kKQogICAgICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7CiAgICAgIGVsc2UgaWYgKGVuZCA9PT0gLTEpCiAgICAgICAgZW5kID0gcGF0aDUubGVuZ3RoOwogICAgICByZXR1cm4gcGF0aDUuc2xpY2Uoc3RhcnQsIGVuZCk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGk0ID0gcGF0aDUubGVuZ3RoIC0gMTsgaTQgPj0gMDsgLS1pNCkgewogICAgICAgIGlmIChwYXRoNS5jaGFyQ29kZUF0KGk0KSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIMikgewogICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgICAgc3RhcnQgPSBpNCArIDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZW5kID09PSAtMSkgewogICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7CiAgICAgICAgICBlbmQgPSBpNCArIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChlbmQgPT09IC0xKQogICAgICAgIHJldHVybiAiIjsKICAgICAgcmV0dXJuIHBhdGg1LnNsaWNlKHN0YXJ0LCBlbmQpOwogICAgfQogIH0KICBmdW5jdGlvbiBleHRuYW1lNShwYXRoNSkgewogICAgYXNzZXJ0UGF0aDIocGF0aDUpOwogICAgbGV0IHN0YXJ0RG90ID0gLTE7CiAgICBsZXQgc3RhcnRQYXJ0ID0gMDsKICAgIGxldCBlbmQgPSAtMTsKICAgIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgbGV0IHByZURvdFN0YXRlID0gMDsKICAgIGZvciAobGV0IGk0ID0gcGF0aDUubGVuZ3RoIC0gMTsgaTQgPj0gMDsgLS1pNCkgewogICAgICBjb25zdCBjb2RlID0gcGF0aDUuY2hhckNvZGVBdChpNCk7CiAgICAgIGlmIChjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gyKSB7CiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgIHN0YXJ0UGFydCA9IGk0ICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoZW5kID09PSAtMSkgewogICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICAgIGVuZCA9IGk0ICsgMTsKICAgICAgfQogICAgICBpZiAoY29kZSA9PT0gQ0hBUl9ET1QyKSB7CiAgICAgICAgaWYgKHN0YXJ0RG90ID09PSAtMSkKICAgICAgICAgIHN0YXJ0RG90ID0gaTQ7CiAgICAgICAgZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpCiAgICAgICAgICBwcmVEb3RTdGF0ZSA9IDE7CiAgICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7CiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTsKICAgICAgfQogICAgfQogICAgaWYgKHN0YXJ0RG90ID09PSAtMSB8fCBlbmQgPT09IC0xIHx8IHByZURvdFN0YXRlID09PSAwIHx8IHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIHJldHVybiBwYXRoNS5zbGljZShzdGFydERvdCwgZW5kKTsKICB9CiAgZnVuY3Rpb24gZm9ybWF0NyhwYXRoT2JqZWN0KSB7CiAgICBpZiAocGF0aE9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcGF0aE9iamVjdCAhPT0gIm9iamVjdCIpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigKICAgICAgICBgVGhlICJwYXRoT2JqZWN0IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIHBhdGhPYmplY3R9YAogICAgICApOwogICAgfQogICAgcmV0dXJuIF9mb3JtYXQyKCIvIiwgcGF0aE9iamVjdCk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlNyhwYXRoNSkgewogICAgYXNzZXJ0UGF0aDIocGF0aDUpOwogICAgY29uc3QgcmV0ID0geyByb290OiAiIiwgZGlyOiAiIiwgYmFzZTogIiIsIGV4dDogIiIsIG5hbWU6ICIiIH07CiAgICBpZiAocGF0aDUubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gcmV0OwogICAgY29uc3QgaXNBYnNvbHV0ZTcgPSBwYXRoNS5jaGFyQ29kZUF0KDApID09PSBDSEFSX0ZPUldBUkRfU0xBU0gyOwogICAgbGV0IHN0YXJ0OwogICAgaWYgKGlzQWJzb2x1dGU3KSB7CiAgICAgIHJldC5yb290ID0gIi8iOwogICAgICBzdGFydCA9IDE7CiAgICB9IGVsc2UgewogICAgICBzdGFydCA9IDA7CiAgICB9CiAgICBsZXQgc3RhcnREb3QgPSAtMTsKICAgIGxldCBzdGFydFBhcnQgPSAwOwogICAgbGV0IGVuZCA9IC0xOwogICAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7CiAgICBsZXQgaTQgPSBwYXRoNS5sZW5ndGggLSAxOwogICAgbGV0IHByZURvdFN0YXRlID0gMDsKICAgIGZvciAoOyBpNCA+PSBzdGFydDsgLS1pNCkgewogICAgICBjb25zdCBjb2RlID0gcGF0aDUuY2hhckNvZGVBdChpNCk7CiAgICAgIGlmIChjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gyKSB7CiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHsKICAgICAgICAgIHN0YXJ0UGFydCA9IGk0ICsgMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoZW5kID09PSAtMSkgewogICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlOwogICAgICAgIGVuZCA9IGk0ICsgMTsKICAgICAgfQogICAgICBpZiAoY29kZSA9PT0gQ0hBUl9ET1QyKSB7CiAgICAgICAgaWYgKHN0YXJ0RG90ID09PSAtMSkKICAgICAgICAgIHN0YXJ0RG90ID0gaTQ7CiAgICAgICAgZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpCiAgICAgICAgICBwcmVEb3RTdGF0ZSA9IDE7CiAgICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7CiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTsKICAgICAgfQogICAgfQogICAgaWYgKHN0YXJ0RG90ID09PSAtMSB8fCBlbmQgPT09IC0xIHx8IHByZURvdFN0YXRlID09PSAwIHx8IHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKSB7CiAgICAgIGlmIChlbmQgIT09IC0xKSB7CiAgICAgICAgaWYgKHN0YXJ0UGFydCA9PT0gMCAmJiBpc0Fic29sdXRlNykgewogICAgICAgICAgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGg1LnNsaWNlKDEsIGVuZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldC5iYXNlID0gcmV0Lm5hbWUgPSBwYXRoNS5zbGljZShzdGFydFBhcnQsIGVuZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoc3RhcnRQYXJ0ID09PSAwICYmIGlzQWJzb2x1dGU3KSB7CiAgICAgICAgcmV0Lm5hbWUgPSBwYXRoNS5zbGljZSgxLCBzdGFydERvdCk7CiAgICAgICAgcmV0LmJhc2UgPSBwYXRoNS5zbGljZSgxLCBlbmQpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldC5uYW1lID0gcGF0aDUuc2xpY2Uoc3RhcnRQYXJ0LCBzdGFydERvdCk7CiAgICAgICAgcmV0LmJhc2UgPSBwYXRoNS5zbGljZShzdGFydFBhcnQsIGVuZCk7CiAgICAgIH0KICAgICAgcmV0LmV4dCA9IHBhdGg1LnNsaWNlKHN0YXJ0RG90LCBlbmQpOwogICAgfQogICAgaWYgKHN0YXJ0UGFydCA+IDApCiAgICAgIHJldC5kaXIgPSBwYXRoNS5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTsKICAgIGVsc2UgaWYgKGlzQWJzb2x1dGU3KQogICAgICByZXQuZGlyID0gIi8iOwogICAgcmV0dXJuIHJldDsKICB9CiAgZnVuY3Rpb24gZnJvbUZpbGVVcmw1KHVybCkgewogICAgdXJsID0gdXJsIGluc3RhbmNlb2YgVVJMID8gdXJsIDogbmV3IFVSTCh1cmwpOwogICAgaWYgKHVybC5wcm90b2NvbCAhPSAiZmlsZToiKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk11c3QgYmUgYSBmaWxlIFVSTC4iKTsKICAgIH0KICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoCiAgICAgIHVybC5wYXRobmFtZS5yZXBsYWNlKC8lKD8hWzAtOUEtRmEtZl17Mn0pL2csICIlMjUiKQogICAgKTsKICB9CiAgZnVuY3Rpb24gdG9GaWxlVXJsNShwYXRoNSkgewogICAgaWYgKCFpc0Fic29sdXRlNShwYXRoNSkpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiTXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIpOwogICAgfQogICAgY29uc3QgdXJsID0gbmV3IFVSTCgiZmlsZTovLy8iKTsKICAgIHVybC5wYXRobmFtZSA9IGVuY29kZVdoaXRlc3BhY2UyKAogICAgICBwYXRoNS5yZXBsYWNlKC8lL2csICIlMjUiKS5yZXBsYWNlKC9cXC9nLCAiJTVDIikKICAgICk7CiAgICByZXR1cm4gdXJsOwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9wYXRoL2dsb2IudHMKICB2YXIgcGF0aDMgPSBpc1dpbmRvd3MyID8gd2luMzJfZXhwb3J0czIgOiBwb3NpeF9leHBvcnRzMjsKICB2YXIgeyBqb2luOiBqb2luOCwgbm9ybWFsaXplOiBub3JtYWxpemU3IH0gPSBwYXRoMzsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9wYXRoL21vZC50cwogIHZhciBwYXRoNCA9IGlzV2luZG93czIgPyB3aW4zMl9leHBvcnRzMiA6IHBvc2l4X2V4cG9ydHMyOwogIHZhciB7CiAgICBiYXNlbmFtZTogYmFzZW5hbWU2LAogICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXI2LAogICAgZGlybmFtZTogZGlybmFtZTYsCiAgICBleHRuYW1lOiBleHRuYW1lNiwKICAgIGZvcm1hdDogZm9ybWF0OCwKICAgIGZyb21GaWxlVXJsOiBmcm9tRmlsZVVybDYsCiAgICBpc0Fic29sdXRlOiBpc0Fic29sdXRlNiwKICAgIGpvaW46IGpvaW45LAogICAgbm9ybWFsaXplOiBub3JtYWxpemU4LAogICAgcGFyc2U6IHBhcnNlOCwKICAgIHJlbGF0aXZlOiByZWxhdGl2ZTYsCiAgICByZXNvbHZlOiByZXNvbHZlNiwKICAgIHNlcDogc2VwNiwKICAgIHRvRmlsZVVybDogdG9GaWxlVXJsNiwKICAgIHRvTmFtZXNwYWNlZFBhdGg6IHRvTmFtZXNwYWNlZFBhdGg2CiAgfSA9IHBhdGg0OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvX3Byb2Nlc3MvcHJvY2Vzcy50cwogIGZ1bmN0aW9uIF9hcmNoKCkgewogICAgaWYgKERlbm8uYnVpbGQuYXJjaCA9PSAieDg2XzY0IikgewogICAgICByZXR1cm4gIng2NCI7CiAgICB9IGVsc2UgaWYgKERlbm8uYnVpbGQuYXJjaCA9PSAiYWFyY2g2NCIpIHsKICAgICAgcmV0dXJuICJhcm02NCI7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBFcnJvcigidW5yZWFjaGFibGUiKTsKICAgIH0KICB9CiAgdmFyIGFyY2ggPSBfYXJjaCgpOwogIHZhciBjaGRpciA9IERlbm8uY2hkaXI7CiAgdmFyIGN3ZCA9IERlbm8uY3dkOwogIHZhciBuZXh0VGljazMgPSBuZXh0VGljazI7CiAgdmFyIE9CSkVDVF9QUk9UT19QUk9QX05BTUVTID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSk7CiAgdmFyIGVudiA9IG5ldyBQcm94eShPYmplY3QoKSwgewogICAgZ2V0OiAodGFyZ2V0LCBwcm9wKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gInN5bWJvbCIpIHsKICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdOwogICAgICB9CiAgICAgIGNvbnN0IGVudlZhbHVlID0gRGVuby5lbnYuZ2V0KHByb3ApOwogICAgICBpZiAoZW52VmFsdWUpIHsKICAgICAgICByZXR1cm4gZW52VmFsdWU7CiAgICAgIH0KICAgICAgaWYgKE9CSkVDVF9QUk9UT19QUk9QX05BTUVTLmluY2x1ZGVzKHByb3ApKSB7CiAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXTsKICAgICAgfQogICAgICByZXR1cm4gZW52VmFsdWU7CiAgICB9LAogICAgb3duS2V5czogKCkgPT4gUmVmbGVjdC5vd25LZXlzKERlbm8uZW52LnRvT2JqZWN0KCkpLAogICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAoX3RhcmdldCwgbmFtZSkgPT4gewogICAgICBjb25zdCBlNSA9IERlbm8uZW52LnRvT2JqZWN0KCk7CiAgICAgIGlmIChuYW1lIGluIERlbm8uZW52LnRvT2JqZWN0KCkpIHsKICAgICAgICBjb25zdCBvNCA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH07CiAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAic3RyaW5nIikgewogICAgICAgICAgbzQudmFsdWUgPSBlNVtuYW1lXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG80OwogICAgICB9CiAgICB9LAogICAgc2V0KF90YXJnZXQsIHByb3AsIHZhbHVlKSB7CiAgICAgIERlbm8uZW52LnNldChTdHJpbmcocHJvcCksIFN0cmluZyh2YWx1ZSkpOwogICAgICByZXR1cm4gdmFsdWU7CiAgICB9LAogICAgaGFzOiAoX3RhcmdldCwgcHJvcCkgPT4gUmVmbGVjdC5vd25LZXlzKERlbm8uZW52LnRvT2JqZWN0KCkpLmluY2x1ZGVzKHByb3ApCiAgfSk7CiAgdmFyIHBpZCA9IERlbm8ucGlkOwogIHZhciBwbGF0Zm9ybSA9IGlzV2luZG93czIgPyAid2luMzIiIDogRGVuby5idWlsZC5vczsKICB2YXIgdmVyc2lvbiA9ICJ2MTYuMTEuMSI7CiAgdmFyIHZlcnNpb25zID0gewogICAgbm9kZTogIjE2LjExLjEiLAogICAgdXY6ICIxLjQyLjAiLAogICAgemxpYjogIjEuMi4xMSIsCiAgICBicm90bGk6ICIxLjAuOSIsCiAgICBhcmVzOiAiMS4xNy4yIiwKICAgIG1vZHVsZXM6ICI5MyIsCiAgICBuZ2h0dHAyOiAiMS40NS4xIiwKICAgIG5hcGk6ICI4IiwKICAgIGxsaHR0cDogIjYuMC40IiwKICAgIG9wZW5zc2w6ICIxLjEuMWwiLAogICAgY2xkcjogIjM5LjAiLAogICAgaWN1OiAiNjkuMSIsCiAgICB0ejogIjIwMjFhIiwKICAgIHVuaWNvZGU6ICIxMy4wIiwKICAgIC4uLkRlbm8udmVyc2lvbgogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9yZWFkbGluZS91dGlscy5tanMKICB2YXIga0VzY2FwZSA9ICJceDFCIjsKICB2YXIga1N1YnN0cmluZ1NlYXJjaCA9IFN5bWJvbCgia1N1YnN0cmluZ1NlYXJjaCIpOwogIGZ1bmN0aW9uIENTSShzdHJpbmdzLCAuLi5hcmdzKSB7CiAgICBsZXQgcmV0ID0gYCR7a0VzY2FwZX1bYDsKICAgIGZvciAobGV0IG44ID0gMDsgbjggPCBzdHJpbmdzLmxlbmd0aDsgbjgrKykgewogICAgICByZXQgKz0gc3RyaW5nc1tuOF07CiAgICAgIGlmIChuOCA8IGFyZ3MubGVuZ3RoKSB7CiAgICAgICAgcmV0ICs9IGFyZ3NbbjhdOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmV0OwogIH0KICBDU0kua0VzY2FwZSA9IGtFc2NhcGU7CiAgQ1NJLmtDbGVhclRvTGluZUJlZ2lubmluZyA9IENTSWAxS2A7CiAgQ1NJLmtDbGVhclRvTGluZUVuZCA9IENTSWAwS2A7CiAgQ1NJLmtDbGVhckxpbmUgPSBDU0lgMktgOwogIENTSS5rQ2xlYXJTY3JlZW5Eb3duID0gQ1NJYDBKYDsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3JlYWRsaW5lL2NhbGxiYWNrcy5tanMKICB2YXIgewogICAga0NsZWFyTGluZSwKICAgIGtDbGVhclNjcmVlbkRvd24sCiAgICBrQ2xlYXJUb0xpbmVCZWdpbm5pbmcsCiAgICBrQ2xlYXJUb0xpbmVFbmQKICB9ID0gQ1NJOwogIGZ1bmN0aW9uIGN1cnNvclRvKHN0cmVhbSwgeDIxLCB5MTcsIGNhbGxiYWNrKSB7CiAgICBpZiAoY2FsbGJhY2sgIT09IHZvaWQgMCkgewogICAgICB2YWxpZGF0ZUNhbGxiYWNrKGNhbGxiYWNrKTsKICAgIH0KICAgIGlmICh0eXBlb2YgeTE3ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGNhbGxiYWNrID0geTE3OwogICAgICB5MTcgPSB2b2lkIDA7CiAgICB9CiAgICBpZiAoTnVtYmVyLmlzTmFOKHgyMSkpCiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoIngiLCB4MjEpOwogICAgaWYgKE51bWJlci5pc05hTih5MTcpKQogICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKCJ5IiwgeTE3KTsKICAgIGlmIChzdHJlYW0gPT0gbnVsbCB8fCB0eXBlb2YgeDIxICE9PSAibnVtYmVyIiAmJiB0eXBlb2YgeTE3ICE9PSAibnVtYmVyIikgewogICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAiZnVuY3Rpb24iKQogICAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG51bGwpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmICh0eXBlb2YgeDIxICE9PSAibnVtYmVyIikKICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0NVUlNPUl9QT1MoKTsKICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgeTE3ICE9PSAibnVtYmVyIiA/IENTSWAke3gyMSArIDF9R2AgOiBDU0lgJHt5MTcgKyAxfTske3gyMSArIDF9SGA7CiAgICByZXR1cm4gc3RyZWFtLndyaXRlKGRhdGEsIGNhbGxiYWNrKTsKICB9CiAgZnVuY3Rpb24gbW92ZUN1cnNvcihzdHJlYW0sIGR4LCBkeSwgY2FsbGJhY2spIHsKICAgIGlmIChjYWxsYmFjayAhPT0gdm9pZCAwKSB7CiAgICAgIHZhbGlkYXRlQ2FsbGJhY2soY2FsbGJhY2spOwogICAgfQogICAgaWYgKHN0cmVhbSA9PSBudWxsIHx8ICEoZHggfHwgZHkpKSB7CiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpCiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbnVsbCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgbGV0IGRhdGEgPSAiIjsKICAgIGlmIChkeCA8IDApIHsKICAgICAgZGF0YSArPSBDU0lgJHstZHh9RGA7CiAgICB9IGVsc2UgaWYgKGR4ID4gMCkgewogICAgICBkYXRhICs9IENTSWAke2R4fUNgOwogICAgfQogICAgaWYgKGR5IDwgMCkgewogICAgICBkYXRhICs9IENTSWAkey1keX1BYDsKICAgIH0gZWxzZSBpZiAoZHkgPiAwKSB7CiAgICAgIGRhdGEgKz0gQ1NJYCR7ZHl9QmA7CiAgICB9CiAgICByZXR1cm4gc3RyZWFtLndyaXRlKGRhdGEsIGNhbGxiYWNrKTsKICB9CiAgZnVuY3Rpb24gY2xlYXJMaW5lKHN0cmVhbSwgZGlyLCBjYWxsYmFjaykgewogICAgaWYgKGNhbGxiYWNrICE9PSB2b2lkIDApIHsKICAgICAgdmFsaWRhdGVDYWxsYmFjayhjYWxsYmFjayk7CiAgICB9CiAgICBpZiAoc3RyZWFtID09PSBudWxsIHx8IHN0cmVhbSA9PT0gdm9pZCAwKSB7CiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpCiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbnVsbCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgY29uc3QgdHlwZSA9IGRpciA8IDAgPyBrQ2xlYXJUb0xpbmVCZWdpbm5pbmcgOiBkaXIgPiAwID8ga0NsZWFyVG9MaW5lRW5kIDoga0NsZWFyTGluZTsKICAgIHJldHVybiBzdHJlYW0ud3JpdGUodHlwZSwgY2FsbGJhY2spOwogIH0KICBmdW5jdGlvbiBjbGVhclNjcmVlbkRvd24oc3RyZWFtLCBjYWxsYmFjaykgewogICAgaWYgKGNhbGxiYWNrICE9PSB2b2lkIDApIHsKICAgICAgdmFsaWRhdGVDYWxsYmFjayhjYWxsYmFjayk7CiAgICB9CiAgICBpZiAoc3RyZWFtID09PSBudWxsIHx8IHN0cmVhbSA9PT0gdm9pZCAwKSB7CiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpCiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbnVsbCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIHN0cmVhbS53cml0ZShrQ2xlYXJTY3JlZW5Eb3duLCBjYWxsYmFjayk7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvc3RyZWFtcy9fdXRpbHMudHMKICBmdW5jdGlvbiBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rKSB7CiAgICByZXR1cm4gQnVmZmVyNC5mcm9tKAogICAgICBjaHVuay5idWZmZXIsCiAgICAgIGNodW5rLmJ5dGVPZmZzZXQsCiAgICAgIGNodW5rLmJ5dGVMZW5ndGgKICAgICk7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLm1qcwogIGZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHsKICAgIHJldHVybiBzdHJlYW0uc2V0SGVhZGVyICYmIHR5cGVvZiBzdHJlYW0uYWJvcnQgPT09ICJmdW5jdGlvbiI7CiAgfQogIGZ1bmN0aW9uIGlzU2VydmVyUmVzcG9uc2Uoc3RyZWFtKSB7CiAgICByZXR1cm4gdHlwZW9mIHN0cmVhbS5fc2VudDEwMCA9PT0gImJvb2xlYW4iICYmIHR5cGVvZiBzdHJlYW0uX3JlbW92ZWRDb25uZWN0aW9uID09PSAiYm9vbGVhbiIgJiYgdHlwZW9mIHN0cmVhbS5fcmVtb3ZlZENvbnRMZW4gPT09ICJib29sZWFuIiAmJiB0eXBlb2Ygc3RyZWFtLl9yZW1vdmVkVEUgPT09ICJib29sZWFuIiAmJiB0eXBlb2Ygc3RyZWFtLl9jbG9zZWQgPT09ICJib29sZWFuIjsKICB9CiAgZnVuY3Rpb24gaXNSZWFkYWJsZShzdHJlYW0pIHsKICAgIHJldHVybiB0eXBlb2Ygc3RyZWFtLnJlYWRhYmxlID09PSAiYm9vbGVhbiIgfHwgdHlwZW9mIHN0cmVhbS5yZWFkYWJsZUVuZGVkID09PSAiYm9vbGVhbiIgfHwgISFzdHJlYW0uX3JlYWRhYmxlU3RhdGU7CiAgfQogIGZ1bmN0aW9uIGlzV3JpdGFibGUoc3RyZWFtKSB7CiAgICByZXR1cm4gdHlwZW9mIHN0cmVhbS53cml0YWJsZSA9PT0gImJvb2xlYW4iIHx8IHR5cGVvZiBzdHJlYW0ud3JpdGFibGVFbmRlZCA9PT0gImJvb2xlYW4iIHx8ICEhc3RyZWFtLl93cml0YWJsZVN0YXRlOwogIH0KICBmdW5jdGlvbiBpc1dyaXRhYmxlRmluaXNoZWQoc3RyZWFtKSB7CiAgICBpZiAoc3RyZWFtLndyaXRhYmxlRmluaXNoZWQpCiAgICAgIHJldHVybiB0cnVlOwogICAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlOwogICAgaWYgKCF3U3RhdGUgfHwgd1N0YXRlLmVycm9yZWQpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB3U3RhdGUuZmluaXNoZWQgfHwgd1N0YXRlLmVuZGVkICYmIHdTdGF0ZS5sZW5ndGggPT09IDA7CiAgfQogIHZhciBub3AgPSAoKSA9PiB7CiAgfTsKICBmdW5jdGlvbiBpc1JlYWRhYmxlRW5kZWQoc3RyZWFtKSB7CiAgICBpZiAoc3RyZWFtLnJlYWRhYmxlRW5kZWQpCiAgICAgIHJldHVybiB0cnVlOwogICAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlOwogICAgaWYgKCFyU3RhdGUgfHwgclN0YXRlLmVycm9yZWQpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiByU3RhdGUuZW5kRW1pdHRlZCB8fCByU3RhdGUuZW5kZWQgJiYgclN0YXRlLmxlbmd0aCA9PT0gMDsKICB9CiAgZnVuY3Rpb24gZW9zKHN0cmVhbSwgb3B0aW9ucywgY2FsbGJhY2spIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7CiAgICAgIGNhbGxiYWNrID0gb3B0aW9uczsKICAgICAgb3B0aW9ucyA9IHt9OwogICAgfSBlbHNlIGlmIChvcHRpb25zID09IG51bGwpIHsKICAgICAgb3B0aW9ucyA9IHt9OwogICAgfSBlbHNlIHsKICAgICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgIm9wdGlvbnMiKTsKICAgIH0KICAgIHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2ssICJjYWxsYmFjayIpOwogICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvcHRpb25zLnNpZ25hbCwgIm9wdGlvbnMuc2lnbmFsIik7CiAgICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spOwogICAgY29uc3QgcmVhZGFibGUgPSBvcHRpb25zLnJlYWRhYmxlIHx8IG9wdGlvbnMucmVhZGFibGUgIT09IGZhbHNlICYmIGlzUmVhZGFibGUoc3RyZWFtKTsKICAgIGNvbnN0IHdyaXRhYmxlID0gb3B0aW9ucy53cml0YWJsZSB8fCBvcHRpb25zLndyaXRhYmxlICE9PSBmYWxzZSAmJiBpc1dyaXRhYmxlKHN0cmVhbSk7CiAgICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7CiAgICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7CiAgICBjb25zdCBzdGF0ZSA9IHdTdGF0ZSB8fCByU3RhdGU7CiAgICBjb25zdCBvbmxlZ2FjeWZpbmlzaCA9ICgpID0+IHsKICAgICAgaWYgKCFzdHJlYW0ud3JpdGFibGUpCiAgICAgICAgb25maW5pc2goKTsKICAgIH07CiAgICBsZXQgd2lsbEVtaXRDbG9zZSA9IGlzU2VydmVyUmVzcG9uc2Uoc3RyZWFtKSB8fCBzdGF0ZSAmJiBzdGF0ZS5hdXRvRGVzdHJveSAmJiBzdGF0ZS5lbWl0Q2xvc2UgJiYgc3RhdGUuY2xvc2VkID09PSBmYWxzZSAmJiBpc1JlYWRhYmxlKHN0cmVhbSkgPT09IHJlYWRhYmxlICYmIGlzV3JpdGFibGUoc3RyZWFtKSA9PT0gd3JpdGFibGU7CiAgICBsZXQgd3JpdGFibGVGaW5pc2hlZCA9IHN0cmVhbS53cml0YWJsZUZpbmlzaGVkIHx8IHdTdGF0ZSAmJiB3U3RhdGUuZmluaXNoZWQ7CiAgICBjb25zdCBvbmZpbmlzaCA9ICgpID0+IHsKICAgICAgd3JpdGFibGVGaW5pc2hlZCA9IHRydWU7CiAgICAgIGlmIChzdHJlYW0uZGVzdHJveWVkKQogICAgICAgIHdpbGxFbWl0Q2xvc2UgPSBmYWxzZTsKICAgICAgaWYgKHdpbGxFbWl0Q2xvc2UgJiYgKCFzdHJlYW0ucmVhZGFibGUgfHwgcmVhZGFibGUpKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKCFyZWFkYWJsZSB8fCByZWFkYWJsZUVuZGVkKQogICAgICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtKTsKICAgIH07CiAgICBsZXQgcmVhZGFibGVFbmRlZCA9IHN0cmVhbS5yZWFkYWJsZUVuZGVkIHx8IHJTdGF0ZSAmJiByU3RhdGUuZW5kRW1pdHRlZDsKICAgIGNvbnN0IG9uZW5kID0gKCkgPT4gewogICAgICByZWFkYWJsZUVuZGVkID0gdHJ1ZTsKICAgICAgaWYgKHN0cmVhbS5kZXN0cm95ZWQpCiAgICAgICAgd2lsbEVtaXRDbG9zZSA9IGZhbHNlOwogICAgICBpZiAod2lsbEVtaXRDbG9zZSAmJiAoIXN0cmVhbS53cml0YWJsZSB8fCB3cml0YWJsZSkpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIXdyaXRhYmxlIHx8IHdyaXRhYmxlRmluaXNoZWQpCiAgICAgICAgY2FsbGJhY2suY2FsbChzdHJlYW0pOwogICAgfTsKICAgIGNvbnN0IG9uZXJyb3IgPSAoZXJyKSA9PiB7CiAgICAgIGNhbGxiYWNrLmNhbGwoc3RyZWFtLCBlcnIpOwogICAgfTsKICAgIGNvbnN0IG9uY2xvc2UgPSAoKSA9PiB7CiAgICAgIGlmIChyZWFkYWJsZSAmJiAhcmVhZGFibGVFbmRlZCkgewogICAgICAgIGlmICghaXNSZWFkYWJsZUVuZGVkKHN0cmVhbSkpIHsKICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFKCkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAod3JpdGFibGUgJiYgIXdyaXRhYmxlRmluaXNoZWQpIHsKICAgICAgICBpZiAoIWlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0pKSB7CiAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2FsbGJhY2suY2FsbChzdHJlYW0pOwogICAgfTsKICAgIGNvbnN0IG9ucmVxdWVzdCA9ICgpID0+IHsKICAgICAgc3RyZWFtLnJlcS5vbigiZmluaXNoIiwgb25maW5pc2gpOwogICAgfTsKICAgIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkgewogICAgICBzdHJlYW0ub24oImNvbXBsZXRlIiwgb25maW5pc2gpOwogICAgICBpZiAoIXdpbGxFbWl0Q2xvc2UpIHsKICAgICAgICBzdHJlYW0ub24oImFib3J0Iiwgb25jbG9zZSk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5yZXEpCiAgICAgICAgb25yZXF1ZXN0KCk7CiAgICAgIGVsc2UKICAgICAgICBzdHJlYW0ub24oInJlcXVlc3QiLCBvbnJlcXVlc3QpOwogICAgfSBlbHNlIGlmICh3cml0YWJsZSAmJiAhd1N0YXRlKSB7CiAgICAgIHN0cmVhbS5vbigiZW5kIiwgb25sZWdhY3lmaW5pc2gpOwogICAgICBzdHJlYW0ub24oImNsb3NlIiwgb25sZWdhY3lmaW5pc2gpOwogICAgfQogICAgaWYgKCF3aWxsRW1pdENsb3NlICYmIHR5cGVvZiBzdHJlYW0uYWJvcnRlZCA9PT0gImJvb2xlYW4iKSB7CiAgICAgIHN0cmVhbS5vbigiYWJvcnRlZCIsIG9uY2xvc2UpOwogICAgfQogICAgc3RyZWFtLm9uKCJlbmQiLCBvbmVuZCk7CiAgICBzdHJlYW0ub24oImZpbmlzaCIsIG9uZmluaXNoKTsKICAgIGlmIChvcHRpb25zLmVycm9yICE9PSBmYWxzZSkKICAgICAgc3RyZWFtLm9uKCJlcnJvciIsIG9uZXJyb3IpOwogICAgc3RyZWFtLm9uKCJjbG9zZSIsIG9uY2xvc2UpOwogICAgY29uc3QgY2xvc2VkID0gIXdTdGF0ZSAmJiAhclN0YXRlICYmIHN0cmVhbS5fY2xvc2VkID09PSB0cnVlIHx8ICh3U3RhdGUgJiYgd1N0YXRlLmNsb3NlZCB8fCByU3RhdGUgJiYgclN0YXRlLmNsb3NlZCB8fCB3U3RhdGUgJiYgd1N0YXRlLmVycm9yRW1pdHRlZCB8fCByU3RhdGUgJiYgclN0YXRlLmVycm9yRW1pdHRlZCB8fCByU3RhdGUgJiYgc3RyZWFtLnJlcSAmJiBzdHJlYW0uYWJvcnRlZCB8fCAoIXdTdGF0ZSB8fCAhd2lsbEVtaXRDbG9zZSB8fCB0eXBlb2Ygd1N0YXRlLmNsb3NlZCAhPT0gImJvb2xlYW4iKSAmJiAoIXJTdGF0ZSB8fCAhd2lsbEVtaXRDbG9zZSB8fCB0eXBlb2YgclN0YXRlLmNsb3NlZCAhPT0gImJvb2xlYW4iKSAmJiAoIXdyaXRhYmxlIHx8IHdTdGF0ZSAmJiB3U3RhdGUuZmluaXNoZWQpICYmICghcmVhZGFibGUgfHwgclN0YXRlICYmIHJTdGF0ZS5lbmRFbWl0dGVkKSk7CiAgICBpZiAoY2xvc2VkKSB7CiAgICAgIG5leHRUaWNrMygoKSA9PiB7CiAgICAgICAgY2FsbGJhY2soKTsKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4gewogICAgICBjYWxsYmFjayA9IG5vcDsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJhYm9ydGVkIiwgb25jbG9zZSk7CiAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLCBvbmZpbmlzaCk7CiAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiYWJvcnQiLCBvbmNsb3NlKTsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0Iiwgb25yZXF1ZXN0KTsKICAgICAgaWYgKHN0cmVhbS5yZXEpCiAgICAgICAgc3RyZWFtLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIiwgb25maW5pc2gpOwogICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImVuZCIsIG9ubGVnYWN5ZmluaXNoKTsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsIG9ubGVnYWN5ZmluaXNoKTsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLCBvbmZpbmlzaCk7CiAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiZW5kIiwgb25lbmQpOwogICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImVycm9yIiwgb25lcnJvcik7CiAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLCBvbmNsb3NlKTsKICAgIH07CiAgICBpZiAob3B0aW9ucy5zaWduYWwgJiYgIWNsb3NlZCkgewogICAgICBjb25zdCBhYm9ydCA9ICgpID0+IHsKICAgICAgICBjb25zdCBlbmRDYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICAgIGNsZWFudXAoKTsKICAgICAgICBlbmRDYWxsYmFjay5jYWxsKHN0cmVhbSwgbmV3IEFib3J0RXJyb3IoKSk7CiAgICAgIH07CiAgICAgIGlmIChvcHRpb25zLnNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgbmV4dFRpY2szKGFib3J0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgICAgY2FsbGJhY2sgPSBvbmNlKCguLi5hcmdzKSA9PiB7CiAgICAgICAgICBvcHRpb25zLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsIGFib3J0KTsKICAgICAgICAgIG9yaWdpbmFsQ2FsbGJhY2suYXBwbHkoc3RyZWFtLCBhcmdzKTsKICAgICAgICB9KTsKICAgICAgICBvcHRpb25zLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsIGFib3J0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNsZWFudXA7CiAgfQogIHZhciBlbmRfb2Zfc3RyZWFtX2RlZmF1bHQgPSBlb3M7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL2FkZC1hYm9ydC1zaWduYWwubWpzCiAgdmFyIHZhbGlkYXRlQWJvcnRTaWduYWwyID0gKHNpZ25hbCwgbmFtZSkgPT4gewogICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICJvYmplY3QiIHx8ICEoImFib3J0ZWQiIGluIHNpZ25hbCkpIHsKICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICJBYm9ydFNpZ25hbCIsIHNpZ25hbCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBpc1N0cmVhbShvYmopIHsKICAgIHJldHVybiAhIShvYmogJiYgdHlwZW9mIG9iai5waXBlID09PSAiZnVuY3Rpb24iKTsKICB9CiAgZnVuY3Rpb24gYWRkQWJvcnRTaWduYWwoc2lnbmFsLCBzdHJlYW0pIHsKICAgIHZhbGlkYXRlQWJvcnRTaWduYWwyKHNpZ25hbCwgInNpZ25hbCIpOwogICAgaWYgKCFpc1N0cmVhbShzdHJlYW0pKSB7CiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgic3RyZWFtIiwgInN0cmVhbS5TdHJlYW0iLCBzdHJlYW0pOwogICAgfQogICAgcmV0dXJuIGFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZShzaWduYWwsIHN0cmVhbSk7CiAgfQogIGZ1bmN0aW9uIGFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZShzaWduYWwsIHN0cmVhbSkgewogICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICJvYmplY3QiIHx8ICEoImFib3J0ZWQiIGluIHNpZ25hbCkpIHsKICAgICAgcmV0dXJuIHN0cmVhbTsKICAgIH0KICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7CiAgICAgIHN0cmVhbS5kZXN0cm95KG5ldyBBYm9ydEVycm9yKCkpOwogICAgfTsKICAgIGlmIChzaWduYWwuYWJvcnRlZCkgewogICAgICBvbkFib3J0KCk7CiAgICB9IGVsc2UgewogICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBvbkFib3J0KTsKICAgICAgZW5kX29mX3N0cmVhbV9kZWZhdWx0KHN0cmVhbSwgKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iiwgb25BYm9ydCkpOwogICAgfQogICAgcmV0dXJuIHN0cmVhbTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kubWpzCiAgdmFyIGtEZXN0cm95ID0gU3ltYm9sKCJrRGVzdHJveSIpOwogIHZhciBrQ29uc3RydWN0ID0gU3ltYm9sKCJrQ29uc3RydWN0Iik7CiAgZnVuY3Rpb24gY2hlY2tFcnJvcihlcnIsIHcyMSwgcjMpIHsKICAgIGlmIChlcnIpIHsKICAgICAgZXJyLnN0YWNrOwogICAgICBpZiAodzIxICYmICF3MjEuZXJyb3JlZCkgewogICAgICAgIHcyMS5lcnJvcmVkID0gZXJyOwogICAgICB9CiAgICAgIGlmIChyMyAmJiAhcjMuZXJyb3JlZCkgewogICAgICAgIHIzLmVycm9yZWQgPSBlcnI7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gZGVzdHJveTIoZXJyLCBjYikgewogICAgY29uc3QgcjMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlOwogICAgY29uc3QgdzIxID0gdGhpcy5fd3JpdGFibGVTdGF0ZTsKICAgIGNvbnN0IHM4ID0gdzIxIHx8IHIzOwogICAgaWYgKHcyMSAmJiB3MjEuZGVzdHJveWVkIHx8IHIzICYmIHIzLmRlc3Ryb3llZCkgewogICAgICBpZiAodHlwZW9mIGNiID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgY2IoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGNoZWNrRXJyb3IoZXJyLCB3MjEsIHIzKTsKICAgIGlmICh3MjEpIHsKICAgICAgdzIxLmRlc3Ryb3llZCA9IHRydWU7CiAgICB9CiAgICBpZiAocjMpIHsKICAgICAgcjMuZGVzdHJveWVkID0gdHJ1ZTsKICAgIH0KICAgIGlmICghczguY29uc3RydWN0ZWQpIHsKICAgICAgdGhpcy5vbmNlKGtEZXN0cm95LCBmdW5jdGlvbihlcjMpIHsKICAgICAgICBfZGVzdHJveSh0aGlzLCBhZ2dyZWdhdGVUd29FcnJvcnMoZXIzLCBlcnIpLCBjYik7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgX2Rlc3Ryb3kodGhpcywgZXJyLCBjYik7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CiAgZnVuY3Rpb24gX2Rlc3Ryb3koc2VsZjIsIGVyciwgY2IpIHsKICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKICAgIGZ1bmN0aW9uIG9uRGVzdHJveShlcnIyKSB7CiAgICAgIGlmIChjYWxsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY2FsbGVkID0gdHJ1ZTsKICAgICAgY29uc3QgcjMgPSBzZWxmMi5fcmVhZGFibGVTdGF0ZTsKICAgICAgY29uc3QgdzIxID0gc2VsZjIuX3dyaXRhYmxlU3RhdGU7CiAgICAgIGNoZWNrRXJyb3IoZXJyMiwgdzIxLCByMyk7CiAgICAgIGlmICh3MjEpIHsKICAgICAgICB3MjEuY2xvc2VkID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAocjMpIHsKICAgICAgICByMy5jbG9zZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgY2IgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjYihlcnIyKTsKICAgICAgfQogICAgICBpZiAoZXJyMikgewogICAgICAgIG5leHRUaWNrMyhlbWl0RXJyb3JDbG9zZU5ULCBzZWxmMiwgZXJyMik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV4dFRpY2szKGVtaXRDbG9zZU5ULCBzZWxmMik7CiAgICAgIH0KICAgIH0KICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGYyLl9kZXN0cm95KGVyciB8fCBudWxsLCBvbkRlc3Ryb3kpOwogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgICBjb25zdCB0aGVuID0gcmVzdWx0LnRoZW47CiAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aGVuLmNhbGwoCiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgbmV4dFRpY2szKG9uRGVzdHJveSwgbnVsbCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZ1bmN0aW9uKGVycjIpIHsKICAgICAgICAgICAgICBuZXh0VGljazMob25EZXN0cm95LCBlcnIyKTsKICAgICAgICAgICAgfQogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycjIpIHsKICAgICAgb25EZXN0cm95KGVycjIpOwogICAgfQogIH0KICBmdW5jdGlvbiBlbWl0RXJyb3JDbG9zZU5UKHNlbGYyLCBlcnIpIHsKICAgIGVtaXRFcnJvck5UKHNlbGYyLCBlcnIpOwogICAgZW1pdENsb3NlTlQoc2VsZjIpOwogIH0KICBmdW5jdGlvbiBlbWl0Q2xvc2VOVChzZWxmMikgewogICAgY29uc3QgcjMgPSBzZWxmMi5fcmVhZGFibGVTdGF0ZTsKICAgIGNvbnN0IHcyMSA9IHNlbGYyLl93cml0YWJsZVN0YXRlOwogICAgaWYgKHcyMSkgewogICAgICB3MjEuY2xvc2VFbWl0dGVkID0gdHJ1ZTsKICAgIH0KICAgIGlmIChyMykgewogICAgICByMy5jbG9zZUVtaXR0ZWQgPSB0cnVlOwogICAgfQogICAgaWYgKHcyMSAmJiB3MjEuZW1pdENsb3NlIHx8IHIzICYmIHIzLmVtaXRDbG9zZSkgewogICAgICBzZWxmMi5lbWl0KCJjbG9zZSIpOwogICAgfQogIH0KICBmdW5jdGlvbiBlbWl0RXJyb3JOVChzZWxmMiwgZXJyKSB7CiAgICBjb25zdCByMyA9IHNlbGYyLl9yZWFkYWJsZVN0YXRlOwogICAgY29uc3QgdzIxID0gc2VsZjIuX3dyaXRhYmxlU3RhdGU7CiAgICBpZiAodzIxICYmIHcyMS5lcnJvckVtaXR0ZWQgfHwgcjMgJiYgcjMuZXJyb3JFbWl0dGVkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh3MjEpIHsKICAgICAgdzIxLmVycm9yRW1pdHRlZCA9IHRydWU7CiAgICB9CiAgICBpZiAocjMpIHsKICAgICAgcjMuZXJyb3JFbWl0dGVkID0gdHJ1ZTsKICAgIH0KICAgIHNlbGYyLmVtaXQoImVycm9yIiwgZXJyKTsKICB9CiAgZnVuY3Rpb24gdW5kZXN0cm95KCkgewogICAgY29uc3QgcjMgPSB0aGlzLl9yZWFkYWJsZVN0YXRlOwogICAgY29uc3QgdzIxID0gdGhpcy5fd3JpdGFibGVTdGF0ZTsKICAgIGlmIChyMykgewogICAgICByMy5jb25zdHJ1Y3RlZCA9IHRydWU7CiAgICAgIHIzLmNsb3NlZCA9IGZhbHNlOwogICAgICByMy5jbG9zZUVtaXR0ZWQgPSBmYWxzZTsKICAgICAgcjMuZGVzdHJveWVkID0gZmFsc2U7CiAgICAgIHIzLmVycm9yZWQgPSBudWxsOwogICAgICByMy5lcnJvckVtaXR0ZWQgPSBmYWxzZTsKICAgICAgcjMucmVhZGluZyA9IGZhbHNlOwogICAgICByMy5lbmRlZCA9IGZhbHNlOwogICAgICByMy5lbmRFbWl0dGVkID0gZmFsc2U7CiAgICB9CiAgICBpZiAodzIxKSB7CiAgICAgIHcyMS5jb25zdHJ1Y3RlZCA9IHRydWU7CiAgICAgIHcyMS5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgdzIxLmNsb3NlZCA9IGZhbHNlOwogICAgICB3MjEuY2xvc2VFbWl0dGVkID0gZmFsc2U7CiAgICAgIHcyMS5lcnJvcmVkID0gbnVsbDsKICAgICAgdzIxLmVycm9yRW1pdHRlZCA9IGZhbHNlOwogICAgICB3MjEuZW5kZWQgPSBmYWxzZTsKICAgICAgdzIxLmVuZGluZyA9IGZhbHNlOwogICAgICB3MjEuZmluYWxDYWxsZWQgPSBmYWxzZTsKICAgICAgdzIxLnByZWZpbmlzaGVkID0gZmFsc2U7CiAgICAgIHcyMS5maW5pc2hlZCA9IGZhbHNlOwogICAgfQogIH0KICBmdW5jdGlvbiBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgc3luYykgewogICAgY29uc3QgcjMgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7CiAgICBjb25zdCB3MjEgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7CiAgICBpZiAodzIxICYmIHcyMS5kZXN0cm95ZWQgfHwgcjMgJiYgcjMuZGVzdHJveWVkKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgaWYgKHIzICYmIHIzLmF1dG9EZXN0cm95IHx8IHcyMSAmJiB3MjEuYXV0b0Rlc3Ryb3kpIHsKICAgICAgc3RyZWFtLmRlc3Ryb3koZXJyKTsKICAgIH0gZWxzZSBpZiAoZXJyKSB7CiAgICAgIGVyci5zdGFjazsKICAgICAgaWYgKHcyMSAmJiAhdzIxLmVycm9yZWQpIHsKICAgICAgICB3MjEuZXJyb3JlZCA9IGVycjsKICAgICAgfQogICAgICBpZiAocjMgJiYgIXIzLmVycm9yZWQpIHsKICAgICAgICByMy5lcnJvcmVkID0gZXJyOwogICAgICB9CiAgICAgIGlmIChzeW5jKSB7CiAgICAgICAgbmV4dFRpY2szKGVtaXRFcnJvck5ULCBzdHJlYW0sIGVycik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW1pdEVycm9yTlQoc3RyZWFtLCBlcnIpOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGNvbnN0cnVjdChzdHJlYW0sIGNiKSB7CiAgICBpZiAodHlwZW9mIHN0cmVhbS5fY29uc3RydWN0ICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHIzID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlOwogICAgY29uc3QgdzIxID0gc3RyZWFtLl93cml0YWJsZVN0YXRlOwogICAgaWYgKHIzKSB7CiAgICAgIHIzLmNvbnN0cnVjdGVkID0gZmFsc2U7CiAgICB9CiAgICBpZiAodzIxKSB7CiAgICAgIHcyMS5jb25zdHJ1Y3RlZCA9IGZhbHNlOwogICAgfQogICAgc3RyZWFtLm9uY2Uoa0NvbnN0cnVjdCwgY2IpOwogICAgaWYgKHN0cmVhbS5saXN0ZW5lckNvdW50KGtDb25zdHJ1Y3QpID4gMSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBuZXh0VGljazMoY29uc3RydWN0TlQsIHN0cmVhbSk7CiAgfQogIGZ1bmN0aW9uIGNvbnN0cnVjdE5UKHN0cmVhbSkgewogICAgbGV0IGNhbGxlZCA9IGZhbHNlOwogICAgZnVuY3Rpb24gb25Db25zdHJ1Y3QoZXJyKSB7CiAgICAgIGlmIChjYWxsZWQpIHsKICAgICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciA/PyBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjYWxsZWQgPSB0cnVlOwogICAgICBjb25zdCByMyA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTsKICAgICAgY29uc3QgdzIxID0gc3RyZWFtLl93cml0YWJsZVN0YXRlOwogICAgICBjb25zdCBzOCA9IHcyMSB8fCByMzsKICAgICAgaWYgKHIzKSB7CiAgICAgICAgcjMuY29uc3RydWN0ZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmICh3MjEpIHsKICAgICAgICB3MjEuY29uc3RydWN0ZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChzOC5kZXN0cm95ZWQpIHsKICAgICAgICBzdHJlYW0uZW1pdChrRGVzdHJveSwgZXJyKTsKICAgICAgfSBlbHNlIGlmIChlcnIpIHsKICAgICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgdHJ1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV4dFRpY2szKGVtaXRDb25zdHJ1Y3ROVCwgc3RyZWFtKTsKICAgICAgfQogICAgfQogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzdWx0ID0gc3RyZWFtLl9jb25zdHJ1Y3Qob25Db25zdHJ1Y3QpOwogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgICBjb25zdCB0aGVuID0gcmVzdWx0LnRoZW47CiAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aGVuLmNhbGwoCiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgbmV4dFRpY2szKG9uQ29uc3RydWN0LCBudWxsKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgbmV4dFRpY2szKG9uQ29uc3RydWN0LCBlcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIG9uQ29uc3RydWN0KGVycik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGVtaXRDb25zdHJ1Y3ROVChzdHJlYW0pIHsKICAgIHN0cmVhbS5lbWl0KGtDb25zdHJ1Y3QpOwogIH0KICBmdW5jdGlvbiBpc1JlcXVlc3QyKHN0cmVhbSkgewogICAgcmV0dXJuIHN0cmVhbSAmJiBzdHJlYW0uc2V0SGVhZGVyICYmIHR5cGVvZiBzdHJlYW0uYWJvcnQgPT09ICJmdW5jdGlvbiI7CiAgfQogIGZ1bmN0aW9uIGRlc3Ryb3llcihzdHJlYW0sIGVycikgewogICAgaWYgKCFzdHJlYW0pCiAgICAgIHJldHVybjsKICAgIGlmIChpc1JlcXVlc3QyKHN0cmVhbSkpCiAgICAgIHJldHVybiBzdHJlYW0uYWJvcnQoKTsKICAgIGlmIChpc1JlcXVlc3QyKHN0cmVhbS5yZXEpKQogICAgICByZXR1cm4gc3RyZWFtLnJlcS5hYm9ydCgpOwogICAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIHN0cmVhbS5kZXN0cm95KGVycik7CiAgICBpZiAodHlwZW9mIHN0cmVhbS5jbG9zZSA9PT0gImZ1bmN0aW9uIikKICAgICAgcmV0dXJuIHN0cmVhbS5jbG9zZSgpOwogIH0KICB2YXIgZGVzdHJveV9kZWZhdWx0ID0gewogICAgY29uc3RydWN0LAogICAgZGVzdHJveWVyLAogICAgZGVzdHJveTogZGVzdHJveTIsCiAgICB1bmRlc3Ryb3ksCiAgICBlcnJvck9yRGVzdHJveQogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL3V0aWxzLm1qcwogIHZhciBrSXNEaXN0dXJiZWQgPSBTeW1ib2woImtJc0Rpc3R1cmJlZCIpOwogIGZ1bmN0aW9uIGlzUmVhZGFibGVOb2RlU3RyZWFtKG9iaikgewogICAgcmV0dXJuICEhKG9iaiAmJiB0eXBlb2Ygb2JqLnBpcGUgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIG9iai5vbiA9PT0gImZ1bmN0aW9uIiAmJiAoIW9iai5fd3JpdGFibGVTdGF0ZSB8fCBvYmouX3JlYWRhYmxlU3RhdGU/LnJlYWRhYmxlICE9PSBmYWxzZSkgJiYgKCFvYmouX3dyaXRhYmxlU3RhdGUgfHwgb2JqLl9yZWFkYWJsZVN0YXRlKSk7CiAgfQogIGZ1bmN0aW9uIGlzV3JpdGFibGVOb2RlU3RyZWFtKG9iaikgewogICAgcmV0dXJuICEhKG9iaiAmJiB0eXBlb2Ygb2JqLndyaXRlID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBvYmoub24gPT09ICJmdW5jdGlvbiIgJiYgKCFvYmouX3JlYWRhYmxlU3RhdGUgfHwgb2JqLl93cml0YWJsZVN0YXRlPy53cml0YWJsZSAhPT0gZmFsc2UpKTsKICB9CiAgZnVuY3Rpb24gaXNEdXBsZXhOb2RlU3RyZWFtKG9iaikgewogICAgcmV0dXJuICEhKG9iaiAmJiAodHlwZW9mIG9iai5waXBlID09PSAiZnVuY3Rpb24iICYmIG9iai5fcmVhZGFibGVTdGF0ZSkgJiYgdHlwZW9mIG9iai5vbiA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2Ygb2JqLndyaXRlID09PSAiZnVuY3Rpb24iKTsKICB9CiAgZnVuY3Rpb24gaXNOb2RlU3RyZWFtKG9iaikgewogICAgcmV0dXJuIG9iaiAmJiAob2JqLl9yZWFkYWJsZVN0YXRlIHx8IG9iai5fd3JpdGFibGVTdGF0ZSB8fCB0eXBlb2Ygb2JqLndyaXRlID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBvYmoub24gPT09ICJmdW5jdGlvbiIgfHwgdHlwZW9mIG9iai5waXBlID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBvYmoub24gPT09ICJmdW5jdGlvbiIpOwogIH0KICBmdW5jdGlvbiBpc0l0ZXJhYmxlKG9iaiwgaXNBc3luYykgewogICAgaWYgKG9iaiA9PSBudWxsKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNBc3luYyA9PT0gdHJ1ZSkKICAgICAgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAiZnVuY3Rpb24iOwogICAgaWYgKGlzQXN5bmMgPT09IGZhbHNlKQogICAgICByZXR1cm4gdHlwZW9mIG9ialtTeW1ib2wuaXRlcmF0b3JdID09PSAiZnVuY3Rpb24iOwogICAgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAiZnVuY3Rpb24iIHx8IHR5cGVvZiBvYmpbU3ltYm9sLml0ZXJhdG9yXSA9PT0gImZ1bmN0aW9uIjsKICB9CiAgZnVuY3Rpb24gaXNEZXN0cm95ZWQoc3RyZWFtKSB7CiAgICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKQogICAgICByZXR1cm4gbnVsbDsKICAgIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTsKICAgIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTsKICAgIGNvbnN0IHN0YXRlID0gd1N0YXRlIHx8IHJTdGF0ZTsKICAgIHJldHVybiAhIShzdHJlYW0uZGVzdHJveWVkIHx8IHN0YXRlPy5kZXN0cm95ZWQpOwogIH0KICBmdW5jdGlvbiBpc1dyaXRhYmxlRW5kZWQoc3RyZWFtKSB7CiAgICBpZiAoIWlzV3JpdGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKHN0cmVhbS53cml0YWJsZUVuZGVkID09PSB0cnVlKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTsKICAgIGlmICh3U3RhdGU/LmVycm9yZWQpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlb2Ygd1N0YXRlPy5lbmRlZCAhPT0gImJvb2xlYW4iKQogICAgICByZXR1cm4gbnVsbDsKICAgIHJldHVybiB3U3RhdGUuZW5kZWQ7CiAgfQogIGZ1bmN0aW9uIGlzUmVhZGFibGVFbmRlZDIoc3RyZWFtKSB7CiAgICBpZiAoIWlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKHN0cmVhbS5yZWFkYWJsZUVuZGVkID09PSB0cnVlKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTsKICAgIGlmICghclN0YXRlIHx8IHJTdGF0ZS5lcnJvcmVkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZW9mIHJTdGF0ZT8uZW5kZWQgIT09ICJib29sZWFuIikKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gclN0YXRlLmVuZGVkOwogIH0KICBmdW5jdGlvbiBpc1JlYWRhYmxlRmluaXNoZWQoc3RyZWFtLCBzdHJpY3QpIHsKICAgIGlmICghaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7CiAgICBpZiAoclN0YXRlPy5lcnJvcmVkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZW9mIHJTdGF0ZT8uZW5kRW1pdHRlZCAhPT0gImJvb2xlYW4iKQogICAgICByZXR1cm4gbnVsbDsKICAgIHJldHVybiAhIShyU3RhdGUuZW5kRW1pdHRlZCB8fCBzdHJpY3QgPT09IGZhbHNlICYmIHJTdGF0ZS5lbmRlZCA9PT0gdHJ1ZSAmJiByU3RhdGUubGVuZ3RoID09PSAwKTsKICB9CiAgZnVuY3Rpb24gaXNEaXN0dXJiZWQoc3RyZWFtKSB7CiAgICByZXR1cm4gISEoc3RyZWFtICYmIChzdHJlYW0ucmVhZGFibGVEaWRSZWFkIHx8IHN0cmVhbS5yZWFkYWJsZUFib3J0ZWQgfHwgc3RyZWFtW2tJc0Rpc3R1cmJlZF0pKTsKICB9CiAgZnVuY3Rpb24gaXNSZWFkYWJsZTIoc3RyZWFtKSB7CiAgICBjb25zdCByMyA9IGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSk7CiAgICBpZiAocjMgPT09IG51bGwgfHwgdHlwZW9mIHN0cmVhbT8ucmVhZGFibGUgIT09ICJib29sZWFuIikKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAoaXNEZXN0cm95ZWQoc3RyZWFtKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHIzICYmIHN0cmVhbS5yZWFkYWJsZSAmJiAhaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSk7CiAgfQogIGZ1bmN0aW9uIGlzV3JpdGFibGUyKHN0cmVhbSkgewogICAgY29uc3QgcjMgPSBpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pOwogICAgaWYgKHIzID09PSBudWxsIHx8IHR5cGVvZiBzdHJlYW0/LndyaXRhYmxlICE9PSAiYm9vbGVhbiIpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKGlzRGVzdHJveWVkKHN0cmVhbSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiByMyAmJiBzdHJlYW0ud3JpdGFibGUgJiYgIWlzV3JpdGFibGVFbmRlZChzdHJlYW0pOwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL19wcm9jZXNzL3N0ZGlvLm1qcwogIHZhciBzdGRpbyA9IHt9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvYmxvYi5tanMKICBmdW5jdGlvbiBpc0Jsb2Iob2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgQmxvYjsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL2Zyb20ubWpzCiAgZnVuY3Rpb24gX2Zyb20yKFJlYWRhYmxlMiwgaXRlcmFibGUsIG9wdHMpIHsKICAgIGxldCBpdGVyYXRvcjsKICAgIGlmICh0eXBlb2YgaXRlcmFibGUgPT09ICJzdHJpbmciIHx8IGl0ZXJhYmxlIGluc3RhbmNlb2YgQnVmZmVyNCkgewogICAgICByZXR1cm4gbmV3IFJlYWRhYmxlMih7CiAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSwKICAgICAgICAuLi5vcHRzLAogICAgICAgIHJlYWQoKSB7CiAgICAgICAgICB0aGlzLnB1c2goaXRlcmFibGUpOwogICAgICAgICAgdGhpcy5wdXNoKG51bGwpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBsZXQgaXNBc3luYzsKICAgIGlmIChpdGVyYWJsZSAmJiBpdGVyYWJsZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHsKICAgICAgaXNBc3luYyA9IHRydWU7CiAgICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7CiAgICB9IGVsc2UgaWYgKGl0ZXJhYmxlICYmIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0pIHsKICAgICAgaXNBc3luYyA9IGZhbHNlOwogICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgiaXRlcmFibGUiLCBbIkl0ZXJhYmxlIl0sIGl0ZXJhYmxlKTsKICAgIH0KICAgIGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlMih7CiAgICAgIG9iamVjdE1vZGU6IHRydWUsCiAgICAgIGhpZ2hXYXRlck1hcms6IDEsCiAgICAgIC4uLm9wdHMKICAgIH0pOwogICAgbGV0IHJlYWRpbmcgPSBmYWxzZTsKICAgIHJlYWRhYmxlLl9yZWFkID0gZnVuY3Rpb24oKSB7CiAgICAgIGlmICghcmVhZGluZykgewogICAgICAgIHJlYWRpbmcgPSB0cnVlOwogICAgICAgIG5leHQoKTsKICAgICAgfQogICAgfTsKICAgIHJlYWRhYmxlLl9kZXN0cm95ID0gZnVuY3Rpb24oZXJyb3IsIGNiKSB7CiAgICAgIGNsb3NlKGVycm9yKS50aGVuKAogICAgICAgICgpID0+IG5leHRUaWNrMyhjYiwgZXJyb3IpLAogICAgICAgIChlNSkgPT4gbmV4dFRpY2szKGNiLCBlNSB8fCBlcnJvcikKICAgICAgKTsKICAgIH07CiAgICBhc3luYyBmdW5jdGlvbiBjbG9zZShlcnJvcikgewogICAgICBjb25zdCBoYWRFcnJvciA9IGVycm9yICE9PSB2b2lkIDAgJiYgZXJyb3IgIT09IG51bGw7CiAgICAgIGNvbnN0IGhhc1Rocm93ID0gdHlwZW9mIGl0ZXJhdG9yLnRocm93ID09PSAiZnVuY3Rpb24iOwogICAgICBpZiAoaGFkRXJyb3IgJiYgaGFzVGhyb3cpIHsKICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci50aHJvdyhlcnJvcik7CiAgICAgICAgYXdhaXQgdmFsdWU7CiAgICAgICAgaWYgKGRvbmUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvci5yZXR1cm4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKTsKICAgICAgICBhd2FpdCB2YWx1ZTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZnVuY3Rpb24gbmV4dCgpIHsKICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGlzQXN5bmMgPyBhd2FpdCBpdGVyYXRvci5uZXh0KCkgOiBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICBpZiAoZG9uZSkgewogICAgICAgICAgICByZWFkYWJsZS5wdXNoKG51bGwpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgcmVzID0gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICJmdW5jdGlvbiIgPyBhd2FpdCB2YWx1ZSA6IHZhbHVlOwogICAgICAgICAgICBpZiAocmVzID09PSBudWxsKSB7CiAgICAgICAgICAgICAgcmVhZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIHRocm93IG5ldyBFUlJfU1RSRUFNX05VTExfVkFMVUVTKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVhZGFibGUucHVzaChyZXMpKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmVhZGluZyA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICByZWFkYWJsZS5kZXN0cm95KGVycik7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVhZGFibGU7CiAgfQogIHZhciBmcm9tX2RlZmF1bHQgPSBfZnJvbTI7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlLm1qcwogIGZ1bmN0aW9uIGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpIHsKICAgIHJldHVybiBvcHRpb25zLmhpZ2hXYXRlck1hcmsgIT0gbnVsbCA/IG9wdGlvbnMuaGlnaFdhdGVyTWFyayA6IGlzRHVwbGV4ID8gb3B0aW9uc1tkdXBsZXhLZXldIDogbnVsbDsKICB9CiAgZnVuY3Rpb24gZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsob2JqZWN0TW9kZSkgewogICAgcmV0dXJuIG9iamVjdE1vZGUgPyAxNiA6IDE2ICogMTAyNDsKICB9CiAgZnVuY3Rpb24gZ2V0SGlnaFdhdGVyTWFyayhzdGF0ZSwgb3B0aW9ucywgZHVwbGV4S2V5LCBpc0R1cGxleCkgewogICAgY29uc3QgaHdtID0gaGlnaFdhdGVyTWFya0Zyb20ob3B0aW9ucywgaXNEdXBsZXgsIGR1cGxleEtleSk7CiAgICBpZiAoaHdtICE9IG51bGwpIHsKICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGh3bSkgfHwgaHdtIDwgMCkgewogICAgICAgIGNvbnN0IG5hbWUgPSBpc0R1cGxleCA/IGBvcHRpb25zLiR7ZHVwbGV4S2V5fWAgOiAib3B0aW9ucy5oaWdoV2F0ZXJNYXJrIjsKICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKG5hbWUsIGh3bSk7CiAgICAgIH0KICAgICAgcmV0dXJuIE1hdGguZmxvb3IoaHdtKTsKICAgIH0KICAgIHJldHVybiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhzdGF0ZS5vYmplY3RNb2RlKTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL2xlZ2FjeS5tanMKICBmdW5jdGlvbiBTdHJlYW0ob3B0cykgewogICAgZXZlbnRzX2RlZmF1bHQuY2FsbCh0aGlzLCBvcHRzKTsKICB9CiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFN0cmVhbS5wcm90b3R5cGUsIGV2ZW50c19kZWZhdWx0LnByb3RvdHlwZSk7CiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFN0cmVhbSwgZXZlbnRzX2RlZmF1bHQpOwogIFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIG9wdGlvbnMpIHsKICAgIGNvbnN0IHNvdXJjZSA9IHRoaXM7CiAgICBmdW5jdGlvbiBvbmRhdGEoY2h1bmspIHsKICAgICAgaWYgKGRlc3Qud3JpdGFibGUgJiYgZGVzdC53cml0ZShjaHVuaykgPT09IGZhbHNlICYmIHNvdXJjZS5wYXVzZSkgewogICAgICAgIHNvdXJjZS5wYXVzZSgpOwogICAgICB9CiAgICB9CiAgICBzb3VyY2Uub24oImRhdGEiLCBvbmRhdGEpOwogICAgZnVuY3Rpb24gb25kcmFpbigpIHsKICAgICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7CiAgICAgICAgc291cmNlLnJlc3VtZSgpOwogICAgICB9CiAgICB9CiAgICBkZXN0Lm9uKCJkcmFpbiIsIG9uZHJhaW4pOwogICAgaWYgKCFkZXN0Ll9pc1N0ZGlvICYmICghb3B0aW9ucyB8fCBvcHRpb25zLmVuZCAhPT0gZmFsc2UpKSB7CiAgICAgIHNvdXJjZS5vbigiZW5kIiwgb25lbmQpOwogICAgICBzb3VyY2Uub24oImNsb3NlIiwgb25jbG9zZSk7CiAgICB9CiAgICBsZXQgZGlkT25FbmQgPSBmYWxzZTsKICAgIGZ1bmN0aW9uIG9uZW5kKCkgewogICAgICBpZiAoZGlkT25FbmQpCiAgICAgICAgcmV0dXJuOwogICAgICBkaWRPbkVuZCA9IHRydWU7CiAgICAgIGRlc3QuZW5kKCk7CiAgICB9CiAgICBmdW5jdGlvbiBvbmNsb3NlKCkgewogICAgICBpZiAoZGlkT25FbmQpCiAgICAgICAgcmV0dXJuOwogICAgICBkaWRPbkVuZCA9IHRydWU7CiAgICAgIGlmICh0eXBlb2YgZGVzdC5kZXN0cm95ID09PSAiZnVuY3Rpb24iKQogICAgICAgIGRlc3QuZGVzdHJveSgpOwogICAgfQogICAgZnVuY3Rpb24gb25lcnJvcihlcjMpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBpZiAoZXZlbnRzX2RlZmF1bHQubGlzdGVuZXJDb3VudCh0aGlzLCAiZXJyb3IiKSA9PT0gMCkgewogICAgICAgIHRoaXMuZW1pdCgiZXJyb3IiLCBlcjMpOwogICAgICB9CiAgICB9CiAgICBwcmVwZW5kTGlzdGVuZXIyKHNvdXJjZSwgImVycm9yIiwgb25lcnJvcik7CiAgICBwcmVwZW5kTGlzdGVuZXIyKGRlc3QsICJlcnJvciIsIG9uZXJyb3IpOwogICAgZnVuY3Rpb24gY2xlYW51cCgpIHsKICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCJkYXRhIiwgb25kYXRhKTsKICAgICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLCBvbmRyYWluKTsKICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLCBvbmVuZCk7CiAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLCBvbmNsb3NlKTsKICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsIG9uZXJyb3IpOwogICAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsIG9uZXJyb3IpOwogICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoImVuZCIsIGNsZWFudXApOwogICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoImNsb3NlIiwgY2xlYW51cCk7CiAgICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoImNsb3NlIiwgY2xlYW51cCk7CiAgICB9CiAgICBzb3VyY2Uub24oImVuZCIsIGNsZWFudXApOwogICAgc291cmNlLm9uKCJjbG9zZSIsIGNsZWFudXApOwogICAgZGVzdC5vbigiY2xvc2UiLCBjbGVhbnVwKTsKICAgIGRlc3QuZW1pdCgicGlwZSIsIHNvdXJjZSk7CiAgICByZXR1cm4gZGVzdDsKICB9OwogIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcjIoZW1pdHRlciwgZXZlbnQsIGZuNCkgewogICAgaWYgKHR5cGVvZiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIikgewogICAgICByZXR1cm4gZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGZuNCk7CiAgICB9CiAgICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkgewogICAgICBlbWl0dGVyLm9uKGV2ZW50LCBmbjQpOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVtaXR0ZXIuX2V2ZW50c1tldmVudF0pKSB7CiAgICAgIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0udW5zaGlmdChmbjQpOwogICAgfSBlbHNlIHsKICAgICAgZW1pdHRlci5fZXZlbnRzW2V2ZW50XSA9IFtmbjQsIGVtaXR0ZXIuX2V2ZW50c1tldmVudF1dOwogICAgfQogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL3N0cmluZ19kZWNvZGVyLnRzCiAgdmFyIE5vdEltcGxlbWVudGVkID0gLyogQF9fUFVSRV9fICovICgoTm90SW1wbGVtZW50ZWQyKSA9PiB7CiAgICBOb3RJbXBsZW1lbnRlZDJbTm90SW1wbGVtZW50ZWQyWyJhc2NpaSJdID0gMF0gPSAiYXNjaWkiOwogICAgTm90SW1wbGVtZW50ZWQyW05vdEltcGxlbWVudGVkMlsibGF0aW4xIl0gPSAxXSA9ICJsYXRpbjEiOwogICAgTm90SW1wbGVtZW50ZWQyW05vdEltcGxlbWVudGVkMlsidXRmMTZsZSJdID0gMl0gPSAidXRmMTZsZSI7CiAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQyOwogIH0pKE5vdEltcGxlbWVudGVkIHx8IHt9KTsKICBmdW5jdGlvbiBub3JtYWxpemVFbmNvZGluZzMoZW5jKSB7CiAgICBjb25zdCBlbmNvZGluZyA9IG5vcm1hbGl6ZUVuY29kaW5nKGVuYyA/PyBudWxsKTsKICAgIGlmIChlbmNvZGluZyAmJiBlbmNvZGluZyBpbiBOb3RJbXBsZW1lbnRlZCkKICAgICAgbm90SW1wbGVtZW50ZWQoZW5jb2RpbmcpOwogICAgaWYgKCFlbmNvZGluZyAmJiB0eXBlb2YgZW5jID09PSAic3RyaW5nIiAmJiBlbmMudG9Mb3dlckNhc2UoKSAhPT0gInJhdyIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGVuY29kaW5nOiAke2VuY31gKTsKICAgIH0KICAgIHJldHVybiBTdHJpbmcoZW5jb2RpbmcpOwogIH0KICBmdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHsKICAgIGlmIChieXRlIDw9IDEyNykKICAgICAgcmV0dXJuIDA7CiAgICBlbHNlIGlmIChieXRlID4+IDUgPT09IDYpCiAgICAgIHJldHVybiAyOwogICAgZWxzZSBpZiAoYnl0ZSA+PiA0ID09PSAxNCkKICAgICAgcmV0dXJuIDM7CiAgICBlbHNlIGlmIChieXRlID4+IDMgPT09IDMwKQogICAgICByZXR1cm4gNDsKICAgIHJldHVybiBieXRlID4+IDYgPT09IDIgPyAtMSA6IC0yOwogIH0KICBmdW5jdGlvbiB1dGY4Q2hlY2tJbmNvbXBsZXRlKHNlbGYyLCBidWYsIGk0KSB7CiAgICBsZXQgajE5ID0gYnVmLmxlbmd0aCAtIDE7CiAgICBpZiAoajE5IDwgaTQpCiAgICAgIHJldHVybiAwOwogICAgbGV0IG5iID0gdXRmOENoZWNrQnl0ZShidWZbajE5XSk7CiAgICBpZiAobmIgPj0gMCkgewogICAgICBpZiAobmIgPiAwKQogICAgICAgIHNlbGYyLmxhc3ROZWVkID0gbmIgLSAxOwogICAgICByZXR1cm4gbmI7CiAgICB9CiAgICBpZiAoLS1qMTkgPCBpNCB8fCBuYiA9PT0gLTIpCiAgICAgIHJldHVybiAwOwogICAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqMTldKTsKICAgIGlmIChuYiA+PSAwKSB7CiAgICAgIGlmIChuYiA+IDApCiAgICAgICAgc2VsZjIubGFzdE5lZWQgPSBuYiAtIDI7CiAgICAgIHJldHVybiBuYjsKICAgIH0KICAgIGlmICgtLWoxOSA8IGk0IHx8IG5iID09PSAtMikKICAgICAgcmV0dXJuIDA7CiAgICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2oxOV0pOwogICAgaWYgKG5iID49IDApIHsKICAgICAgaWYgKG5iID4gMCkgewogICAgICAgIGlmIChuYiA9PT0gMikKICAgICAgICAgIG5iID0gMDsKICAgICAgICBlbHNlCiAgICAgICAgICBzZWxmMi5sYXN0TmVlZCA9IG5iIC0gMzsKICAgICAgfQogICAgICByZXR1cm4gbmI7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CiAgZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmMiwgYnVmKSB7CiAgICBpZiAoKGJ1ZlswXSAmIDE5MikgIT09IDEyOCkgewogICAgICBzZWxmMi5sYXN0TmVlZCA9IDA7CiAgICAgIHJldHVybiAiXHVGRkZEIjsKICAgIH0KICAgIGlmIChzZWxmMi5sYXN0TmVlZCA+IDEgJiYgYnVmLmxlbmd0aCA+IDEpIHsKICAgICAgaWYgKChidWZbMV0gJiAxOTIpICE9PSAxMjgpIHsKICAgICAgICBzZWxmMi5sYXN0TmVlZCA9IDE7CiAgICAgICAgcmV0dXJuICJcdUZGRkQiOwogICAgICB9CiAgICAgIGlmIChzZWxmMi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHsKICAgICAgICBpZiAoKGJ1ZlsyXSAmIDE5MikgIT09IDEyOCkgewogICAgICAgICAgc2VsZjIubGFzdE5lZWQgPSAyOwogICAgICAgICAgcmV0dXJuICJcdUZGRkQiOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiB1dGY4RmlsbExhc3RDb21wbGV0ZShidWYpIHsKICAgIGNvbnN0IHAxOCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDsKICAgIGNvbnN0IHIzID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYpOwogICAgaWYgKHIzICE9PSB2b2lkIDApCiAgICAgIHJldHVybiByMzsKICAgIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHsKICAgICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcDE4LCAwLCB0aGlzLmxhc3ROZWVkKTsKICAgICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpOwogICAgfQogICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcDE4LCAwLCBidWYubGVuZ3RoKTsKICAgIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDsKICB9CiAgZnVuY3Rpb24gdXRmOEZpbGxMYXN0SW5jb21wbGV0ZShidWYpIHsKICAgIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHsKICAgICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTsKICAgICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpOwogICAgfQogICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTsKICAgIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDsKICB9CiAgZnVuY3Rpb24gdXRmOFRleHQoYnVmLCBpNCkgewogICAgY29uc3QgdG90YWwgPSB1dGY4Q2hlY2tJbmNvbXBsZXRlKHRoaXMsIGJ1ZiwgaTQpOwogICAgaWYgKCF0aGlzLmxhc3ROZWVkKQogICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCJ1dGY4IiwgaTQpOwogICAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDsKICAgIGNvbnN0IGVuZCA9IGJ1Zi5sZW5ndGggLSAodG90YWwgLSB0aGlzLmxhc3ROZWVkKTsKICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIDAsIGVuZCk7CiAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCJ1dGY4IiwgaTQsIGVuZCk7CiAgfQogIGZ1bmN0aW9uIHV0ZjhFbmQoYnVmKSB7CiAgICBjb25zdCByMyA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogIiI7CiAgICBpZiAodGhpcy5sYXN0TmVlZCkKICAgICAgcmV0dXJuIHIzICsgIlx1RkZGRCI7CiAgICByZXR1cm4gcjM7CiAgfQogIGZ1bmN0aW9uIHV0ZjhXcml0ZTIoYnVmKSB7CiAgICBpZiAodHlwZW9mIGJ1ZiA9PT0gInN0cmluZyIpIHsKICAgICAgcmV0dXJuIGJ1ZjsKICAgIH0KICAgIGlmIChidWYubGVuZ3RoID09PSAwKQogICAgICByZXR1cm4gIiI7CiAgICBsZXQgcjM7CiAgICBsZXQgaTQ7CiAgICBpZiAodGhpcy5sYXN0TmVlZCkgewogICAgICByMyA9IHRoaXMuZmlsbExhc3QoYnVmKTsKICAgICAgaWYgKHIzID09PSB2b2lkIDApCiAgICAgICAgcmV0dXJuICIiOwogICAgICBpNCA9IHRoaXMubGFzdE5lZWQ7CiAgICAgIHRoaXMubGFzdE5lZWQgPSAwOwogICAgfSBlbHNlIHsKICAgICAgaTQgPSAwOwogICAgfQogICAgaWYgKGk0IDwgYnVmLmxlbmd0aCkKICAgICAgcmV0dXJuIHIzID8gcjMgKyB0aGlzLnRleHQoYnVmLCBpNCkgOiB0aGlzLnRleHQoYnVmLCBpNCk7CiAgICByZXR1cm4gcjMgfHwgIiI7CiAgfQogIGZ1bmN0aW9uIGJhc2U2NFRleHQoYnVmLCBpNCkgewogICAgY29uc3QgbjggPSAoYnVmLmxlbmd0aCAtIGk0KSAlIDM7CiAgICBpZiAobjggPT09IDApCiAgICAgIHJldHVybiBidWYudG9TdHJpbmcoImJhc2U2NCIsIGk0KTsKICAgIHRoaXMubGFzdE5lZWQgPSAzIC0gbjg7CiAgICB0aGlzLmxhc3RUb3RhbCA9IDM7CiAgICBpZiAobjggPT09IDEpIHsKICAgICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07CiAgICB9IGVsc2UgewogICAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTsKICAgICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07CiAgICB9CiAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCJiYXNlNjQiLCBpNCwgYnVmLmxlbmd0aCAtIG44KTsKICB9CiAgZnVuY3Rpb24gYmFzZTY0RW5kKGJ1ZikgewogICAgY29uc3QgcjMgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICIiOwogICAgaWYgKHRoaXMubGFzdE5lZWQpIHsKICAgICAgcmV0dXJuIHIzICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwgMCwgMyAtIHRoaXMubGFzdE5lZWQpOwogICAgfQogICAgcmV0dXJuIHIzOwogIH0KICBmdW5jdGlvbiBzaW1wbGVXcml0ZShidWYpIHsKICAgIGlmICh0eXBlb2YgYnVmID09PSAic3RyaW5nIikgewogICAgICByZXR1cm4gYnVmOwogICAgfQogICAgcmV0dXJuIGJ1Zi50b1N0cmluZyh0aGlzLmVuY29kaW5nKTsKICB9CiAgZnVuY3Rpb24gc2ltcGxlRW5kKGJ1ZikgewogICAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogIiI7CiAgfQogIHZhciBTdHJpbmdEZWNvZGVyQmFzZSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGVuY29kaW5nLCBuYikgewogICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2Rpbmc7CiAgICAgIHRoaXMubGFzdE5lZWQgPSAwOwogICAgICB0aGlzLmxhc3RUb3RhbCA9IDA7CiAgICAgIHRoaXMubGFzdENoYXIgPSBCdWZmZXI0LmFsbG9jVW5zYWZlKG5iKTsKICAgIH0KICB9OwogIHZhciBCYXNlNjREZWNvZGVyID0gY2xhc3MgZXh0ZW5kcyBTdHJpbmdEZWNvZGVyQmFzZSB7CiAgICBjb25zdHJ1Y3RvcihlbmNvZGluZykgewogICAgICBzdXBlcihub3JtYWxpemVFbmNvZGluZzMoZW5jb2RpbmcpLCAzKTsKICAgICAgdGhpcy5lbmQgPSBiYXNlNjRFbmQ7CiAgICAgIHRoaXMuZmlsbExhc3QgPSB1dGY4RmlsbExhc3RJbmNvbXBsZXRlOwogICAgICB0aGlzLnRleHQgPSBiYXNlNjRUZXh0OwogICAgICB0aGlzLndyaXRlID0gdXRmOFdyaXRlMjsKICAgIH0KICB9OwogIHZhciBHZW5lcmljRGVjb2RlciA9IGNsYXNzIGV4dGVuZHMgU3RyaW5nRGVjb2RlckJhc2UgewogICAgY29uc3RydWN0b3IoZW5jb2RpbmcpIHsKICAgICAgc3VwZXIobm9ybWFsaXplRW5jb2RpbmczKGVuY29kaW5nKSwgNCk7CiAgICAgIHRoaXMuZW5kID0gc2ltcGxlRW5kOwogICAgICB0aGlzLmZpbGxMYXN0ID0gdm9pZCAwOwogICAgICB0aGlzLnRleHQgPSB1dGY4VGV4dDsKICAgICAgdGhpcy53cml0ZSA9IHNpbXBsZVdyaXRlOwogICAgfQogIH07CiAgdmFyIFV0ZjhEZWNvZGVyID0gY2xhc3MgZXh0ZW5kcyBTdHJpbmdEZWNvZGVyQmFzZSB7CiAgICBjb25zdHJ1Y3RvcihlbmNvZGluZykgewogICAgICBzdXBlcihub3JtYWxpemVFbmNvZGluZzMoZW5jb2RpbmcpLCA0KTsKICAgICAgdGhpcy5lbmQgPSB1dGY4RW5kOwogICAgICB0aGlzLmZpbGxMYXN0ID0gdXRmOEZpbGxMYXN0Q29tcGxldGU7CiAgICAgIHRoaXMudGV4dCA9IHV0ZjhUZXh0OwogICAgICB0aGlzLndyaXRlID0gdXRmOFdyaXRlMjsKICAgIH0KICB9OwogIHZhciBTdHJpbmdEZWNvZGVyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZW5jb2RpbmcpIHsKICAgICAgbGV0IGRlY29kZXI7CiAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICBjYXNlICJ1dGY4IjoKICAgICAgICAgIGRlY29kZXIgPSBuZXcgVXRmOERlY29kZXIoZW5jb2RpbmcpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgIGRlY29kZXIgPSBuZXcgQmFzZTY0RGVjb2RlcihlbmNvZGluZyk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgZGVjb2RlciA9IG5ldyBHZW5lcmljRGVjb2RlcihlbmNvZGluZyk7CiAgICAgIH0KICAgICAgdGhpcy5lbmNvZGluZyA9IGRlY29kZXIuZW5jb2Rpbmc7CiAgICAgIHRoaXMuZW5kID0gZGVjb2Rlci5lbmQ7CiAgICAgIHRoaXMuZmlsbExhc3QgPSBkZWNvZGVyLmZpbGxMYXN0OwogICAgICB0aGlzLmxhc3RDaGFyID0gZGVjb2Rlci5sYXN0Q2hhcjsKICAgICAgdGhpcy5sYXN0TmVlZCA9IGRlY29kZXIubGFzdE5lZWQ7CiAgICAgIHRoaXMubGFzdFRvdGFsID0gZGVjb2Rlci5sYXN0VG90YWw7CiAgICAgIHRoaXMudGV4dCA9IGRlY29kZXIudGV4dDsKICAgICAgdGhpcy53cml0ZSA9IGRlY29kZXIud3JpdGU7CiAgICB9CiAgfTsKICB2YXIgUFN0cmluZ0RlY29kZXIgPSBuZXcgUHJveHkoU3RyaW5nRGVjb2RlciwgewogICAgYXBwbHkoX3RhcmdldCwgdGhpc0FyZywgYXJncykgewogICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0aGlzQXJnLCBuZXcgU3RyaW5nRGVjb2RlciguLi5hcmdzKSk7CiAgICB9CiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0Lm1qcwogIHZhciBCdWZmZXJMaXN0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHRoaXMuaGVhZCA9IG51bGw7CiAgICAgIHRoaXMudGFpbCA9IG51bGw7CiAgICAgIHRoaXMubGVuZ3RoID0gMDsKICAgIH0KICAgIHB1c2godjE1KSB7CiAgICAgIGNvbnN0IGVudHJ5ID0geyBkYXRhOiB2MTUsIG5leHQ6IG51bGwgfTsKICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7CiAgICAgIH0KICAgICAgdGhpcy50YWlsID0gZW50cnk7CiAgICAgICsrdGhpcy5sZW5ndGg7CiAgICB9CiAgICB1bnNoaWZ0KHYxNSkgewogICAgICBjb25zdCBlbnRyeSA9IHsgZGF0YTogdjE1LCBuZXh0OiB0aGlzLmhlYWQgfTsKICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy50YWlsID0gZW50cnk7CiAgICAgIH0KICAgICAgdGhpcy5oZWFkID0gZW50cnk7CiAgICAgICsrdGhpcy5sZW5ndGg7CiAgICB9CiAgICBzaGlmdCgpIHsKICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHJldCA9IHRoaXMuaGVhZC5kYXRhOwogICAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHsKICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0OwogICAgICB9CiAgICAgIC0tdGhpcy5sZW5ndGg7CiAgICAgIHJldHVybiByZXQ7CiAgICB9CiAgICBjbGVhcigpIHsKICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDsKICAgICAgdGhpcy5sZW5ndGggPSAwOwogICAgfQogICAgam9pbihzOCkgewogICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gIiI7CiAgICAgIH0KICAgICAgbGV0IHAxOCA9IHRoaXMuaGVhZDsKICAgICAgbGV0IHJldCA9ICIiICsgcDE4LmRhdGE7CiAgICAgIHdoaWxlIChwMTggPSBwMTgubmV4dCkgewogICAgICAgIHJldCArPSBzOCArIHAxOC5kYXRhOwogICAgICB9CiAgICAgIHJldHVybiByZXQ7CiAgICB9CiAgICBjb25jYXQobjgpIHsKICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgcmV0dXJuIEJ1ZmZlcjQuYWxsb2MoMCk7CiAgICAgIH0KICAgICAgY29uc3QgcmV0ID0gQnVmZmVyNC5hbGxvY1Vuc2FmZShuOCA+Pj4gMCk7CiAgICAgIGxldCBwMTggPSB0aGlzLmhlYWQ7CiAgICAgIGxldCBpNCA9IDA7CiAgICAgIHdoaWxlIChwMTgpIHsKICAgICAgICByZXQuc2V0KHAxOC5kYXRhLCBpNCk7CiAgICAgICAgaTQgKz0gcDE4LmRhdGEubGVuZ3RoOwogICAgICAgIHAxOCA9IHAxOC5uZXh0OwogICAgICB9CiAgICAgIHJldHVybiByZXQ7CiAgICB9CiAgICBjb25zdW1lKG44LCBoYXNTdHJpbmdzKSB7CiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhlYWQuZGF0YTsKICAgICAgaWYgKG44IDwgZGF0YS5sZW5ndGgpIHsKICAgICAgICBjb25zdCBzbGljZTIgPSBkYXRhLnNsaWNlKDAsIG44KTsKICAgICAgICB0aGlzLmhlYWQuZGF0YSA9IGRhdGEuc2xpY2UobjgpOwogICAgICAgIHJldHVybiBzbGljZTI7CiAgICAgIH0KICAgICAgaWYgKG44ID09PSBkYXRhLmxlbmd0aCkgewogICAgICAgIHJldHVybiB0aGlzLnNoaWZ0KCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGhhc1N0cmluZ3MgPyB0aGlzLl9nZXRTdHJpbmcobjgpIDogdGhpcy5fZ2V0QnVmZmVyKG44KTsKICAgIH0KICAgIGZpcnN0KCkgewogICAgICByZXR1cm4gdGhpcy5oZWFkLmRhdGE7CiAgICB9CiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7CiAgICAgIGZvciAobGV0IHAxOCA9IHRoaXMuaGVhZDsgcDE4OyBwMTggPSBwMTgubmV4dCkgewogICAgICAgIHlpZWxkIHAxOC5kYXRhOwogICAgICB9CiAgICB9CiAgICBfZ2V0U3RyaW5nKG44KSB7CiAgICAgIGxldCByZXQgPSAiIjsKICAgICAgbGV0IHAxOCA9IHRoaXMuaGVhZDsKICAgICAgbGV0IGMxNyA9IDA7CiAgICAgIGRvIHsKICAgICAgICBjb25zdCBzdHIyID0gcDE4LmRhdGE7CiAgICAgICAgaWYgKG44ID4gc3RyMi5sZW5ndGgpIHsKICAgICAgICAgIHJldCArPSBzdHIyOwogICAgICAgICAgbjggLT0gc3RyMi5sZW5ndGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChuOCA9PT0gc3RyMi5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0ICs9IHN0cjI7CiAgICAgICAgICAgICsrYzE3OwogICAgICAgICAgICBpZiAocDE4Lm5leHQpIHsKICAgICAgICAgICAgICB0aGlzLmhlYWQgPSBwMTgubmV4dDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXQgKz0gc3RyMi5zbGljZSgwLCBuOCk7CiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHAxODsKICAgICAgICAgICAgcDE4LmRhdGEgPSBzdHIyLnNsaWNlKG44KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICArK2MxNzsKICAgICAgfSB3aGlsZSAocDE4ID0gcDE4Lm5leHQpOwogICAgICB0aGlzLmxlbmd0aCAtPSBjMTc7CiAgICAgIHJldHVybiByZXQ7CiAgICB9CiAgICBfZ2V0QnVmZmVyKG44KSB7CiAgICAgIGNvbnN0IHJldCA9IEJ1ZmZlcjQuYWxsb2NVbnNhZmUobjgpOwogICAgICBjb25zdCByZXRMZW4gPSBuODsKICAgICAgbGV0IHAxOCA9IHRoaXMuaGVhZDsKICAgICAgbGV0IGMxNyA9IDA7CiAgICAgIGRvIHsKICAgICAgICBjb25zdCBidWYgPSBwMTguZGF0YTsKICAgICAgICBpZiAobjggPiBidWYubGVuZ3RoKSB7CiAgICAgICAgICByZXQuc2V0KGJ1ZiwgcmV0TGVuIC0gbjgpOwogICAgICAgICAgbjggLT0gYnVmLmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKG44ID09PSBidWYubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldC5zZXQoYnVmLCByZXRMZW4gLSBuOCk7CiAgICAgICAgICAgICsrYzE3OwogICAgICAgICAgICBpZiAocDE4Lm5leHQpIHsKICAgICAgICAgICAgICB0aGlzLmhlYWQgPSBwMTgubmV4dDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXQuc2V0KAogICAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBuOCksCiAgICAgICAgICAgICAgcmV0TGVuIC0gbjgKICAgICAgICAgICAgKTsKICAgICAgICAgICAgdGhpcy5oZWFkID0gcDE4OwogICAgICAgICAgICBwMTguZGF0YSA9IGJ1Zi5zbGljZShuOCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgKytjMTc7CiAgICAgIH0gd2hpbGUgKHAxOCA9IHAxOC5uZXh0KTsKICAgICAgdGhpcy5sZW5ndGggLT0gYzE3OwogICAgICByZXR1cm4gcmV0OwogICAgfQogICAgW2luc3BlY3QuY3VzdG9tXShfMjUsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIGluc3BlY3QodGhpcywgewogICAgICAgIC4uLm9wdGlvbnMsCiAgICAgICAgZGVwdGg6IDAsCiAgICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2UKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgYnVmZmVyX2xpc3RfZGVmYXVsdCA9IEJ1ZmZlckxpc3Q7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL3JlYWRhYmxlLm1qcwogIHZhciBkZWJ1ZyA9IGRlYnVnbG9nKCJzdHJlYW0iLCAoZm40KSA9PiB7CiAgICBkZWJ1ZyA9IGZuNDsKICB9KTsKICB2YXIga1BhdXNlZCA9IFN5bWJvbCgia1BhdXNlZCIpOwogIE9iamVjdC5zZXRQcm90b3R5cGVPZihSZWFkYWJsZS5wcm90b3R5cGUsIFN0cmVhbS5wcm90b3R5cGUpOwogIE9iamVjdC5zZXRQcm90b3R5cGVPZihSZWFkYWJsZSwgU3RyZWFtKTsKICB2YXIgbm9wMiA9ICgpID0+IHsKICB9OwogIHZhciB7IGVycm9yT3JEZXN0cm95OiBlcnJvck9yRGVzdHJveTIgfSA9IGRlc3Ryb3lfZGVmYXVsdDsKICBmdW5jdGlvbiBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHsKICAgIGlmICh0eXBlb2YgaXNEdXBsZXggIT09ICJib29sZWFuIikgewogICAgICBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIFN0cmVhbS5EdXBsZXg7CiAgICB9CiAgICB0aGlzLm9iamVjdE1vZGUgPSAhIShvcHRpb25zICYmIG9wdGlvbnMub2JqZWN0TW9kZSk7CiAgICBpZiAoaXNEdXBsZXgpIHsKICAgICAgdGhpcy5vYmplY3RNb2RlID0gdGhpcy5vYmplY3RNb2RlIHx8ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUpOwogICAgfQogICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gb3B0aW9ucyA/IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsIGlzRHVwbGV4KSA6IGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrKGZhbHNlKTsKICAgIHRoaXMuYnVmZmVyID0gbmV3IGJ1ZmZlcl9saXN0X2RlZmF1bHQoKTsKICAgIHRoaXMubGVuZ3RoID0gMDsKICAgIHRoaXMucGlwZXMgPSBbXTsKICAgIHRoaXMuZmxvd2luZyA9IG51bGw7CiAgICB0aGlzLmVuZGVkID0gZmFsc2U7CiAgICB0aGlzLmVuZEVtaXR0ZWQgPSBmYWxzZTsKICAgIHRoaXMucmVhZGluZyA9IGZhbHNlOwogICAgdGhpcy5jb25zdHJ1Y3RlZCA9IHRydWU7CiAgICB0aGlzLnN5bmMgPSB0cnVlOwogICAgdGhpcy5uZWVkUmVhZGFibGUgPSBmYWxzZTsKICAgIHRoaXMuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7CiAgICB0aGlzLnJlYWRhYmxlTGlzdGVuaW5nID0gZmFsc2U7CiAgICB0aGlzLnJlc3VtZVNjaGVkdWxlZCA9IGZhbHNlOwogICAgdGhpc1trUGF1c2VkXSA9IG51bGw7CiAgICB0aGlzLmVycm9yRW1pdHRlZCA9IGZhbHNlOwogICAgdGhpcy5lbWl0Q2xvc2UgPSAhb3B0aW9ucyB8fCBvcHRpb25zLmVtaXRDbG9zZSAhPT0gZmFsc2U7CiAgICB0aGlzLmF1dG9EZXN0cm95ID0gIW9wdGlvbnMgfHwgb3B0aW9ucy5hdXRvRGVzdHJveSAhPT0gZmFsc2U7CiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlOwogICAgdGhpcy5lcnJvcmVkID0gbnVsbDsKICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7CiAgICB0aGlzLmNsb3NlRW1pdHRlZCA9IGZhbHNlOwogICAgdGhpcy5kZWZhdWx0RW5jb2RpbmcgPSBvcHRpb25zICYmIG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nIHx8ICJ1dGY4IjsKICAgIHRoaXMuYXdhaXREcmFpbldyaXRlcnMgPSBudWxsOwogICAgdGhpcy5tdWx0aUF3YWl0RHJhaW4gPSBmYWxzZTsKICAgIHRoaXMucmVhZGluZ01vcmUgPSBmYWxzZTsKICAgIHRoaXMuZGF0YUVtaXR0ZWQgPSBmYWxzZTsKICAgIHRoaXMuZGVjb2RlciA9IG51bGw7CiAgICB0aGlzLmVuY29kaW5nID0gbnVsbDsKICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcpIHsKICAgICAgdGhpcy5kZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIob3B0aW9ucy5lbmNvZGluZyk7CiAgICAgIHRoaXMuZW5jb2RpbmcgPSBvcHRpb25zLmVuY29kaW5nOwogICAgfQogIH0KICBmdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZGFibGUpKSB7CiAgICAgIHJldHVybiBuZXcgUmVhZGFibGUob3B0aW9ucyk7CiAgICB9CiAgICBjb25zdCBpc0R1cGxleCA9IHRoaXMgaW5zdGFuY2VvZiBTdHJlYW0uRHVwbGV4OwogICAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KTsKICAgIGlmIChvcHRpb25zKSB7CiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdGhpcy5fcmVhZCA9IG9wdGlvbnMucmVhZDsKICAgICAgfQogICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGVzdHJveSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHRoaXMuX2NvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0OwogICAgICB9CiAgICAgIGlmIChvcHRpb25zLnNpZ25hbCAmJiAhaXNEdXBsZXgpIHsKICAgICAgICBhZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGUob3B0aW9ucy5zaWduYWwsIHRoaXMpOwogICAgICB9CiAgICB9CiAgICBTdHJlYW0uY2FsbCh0aGlzLCBvcHRpb25zKTsKICAgIGRlc3Ryb3lfZGVmYXVsdC5jb25zdHJ1Y3QodGhpcywgKCkgPT4gewogICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUpIHsKICAgICAgICBtYXliZVJlYWRNb3JlKHRoaXMsIHRoaXMuX3JlYWRhYmxlU3RhdGUpOwogICAgICB9CiAgICB9KTsKICB9CiAgUmVhZGFibGUucHJvdG90eXBlLmRlc3Ryb3kgPSBkZXN0cm95X2RlZmF1bHQuZGVzdHJveTsKICBSZWFkYWJsZS5wcm90b3R5cGUuX3VuZGVzdHJveSA9IGRlc3Ryb3lfZGVmYXVsdC51bmRlc3Ryb3k7CiAgUmVhZGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24oZXJyLCBjYikgewogICAgY2IoZXJyKTsKICB9OwogIFJlYWRhYmxlLnByb3RvdHlwZVtldmVudHNfZGVmYXVsdC5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXSA9IGZ1bmN0aW9uKGVycikgewogICAgdGhpcy5kZXN0cm95KGVycik7CiAgfTsKICBSZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZykgewogICAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIGVuY29kaW5nLCBmYWxzZSk7CiAgfTsKICBSZWFkYWJsZS5wcm90b3R5cGUudW5zaGlmdCA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZykgewogICAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIGVuY29kaW5nLCB0cnVlKTsKICB9OwogIGZ1bmN0aW9uIHJlYWRhYmxlQWRkQ2h1bmsoc3RyZWFtLCBjaHVuaywgZW5jb2RpbmcsIGFkZFRvRnJvbnQpIHsKICAgIGRlYnVnKCJyZWFkYWJsZUFkZENodW5rIiwgY2h1bmspOwogICAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7CiAgICBsZXQgZXJyOwogICAgaWYgKCFzdGF0ZS5vYmplY3RNb2RlKSB7CiAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICJzdHJpbmciKSB7CiAgICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZyB8fCBzdGF0ZS5kZWZhdWx0RW5jb2Rpbmc7CiAgICAgICAgaWYgKHN0YXRlLmVuY29kaW5nICE9PSBlbmNvZGluZykgewogICAgICAgICAgaWYgKGFkZFRvRnJvbnQgJiYgc3RhdGUuZW5jb2RpbmcpIHsKICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXI0LmZyb20oY2h1bmssIGVuY29kaW5nKS50b1N0cmluZyhzdGF0ZS5lbmNvZGluZyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjaHVuayA9IEJ1ZmZlcjQuZnJvbShjaHVuaywgZW5jb2RpbmcpOwogICAgICAgICAgICBlbmNvZGluZyA9ICIiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjaHVuayBpbnN0YW5jZW9mIEJ1ZmZlcjQpIHsKICAgICAgICBlbmNvZGluZyA9ICIiOwogICAgICB9IGVsc2UgaWYgKFN0cmVhbS5faXNVaW50OEFycmF5KGNodW5rKSkgewogICAgICAgIGNodW5rID0gU3RyZWFtLl91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspOwogICAgICAgIGVuY29kaW5nID0gIiI7CiAgICAgIH0gZWxzZSBpZiAoY2h1bmsgIT0gbnVsbCkgewogICAgICAgIGVyciA9IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgKICAgICAgICAgICJjaHVuayIsCiAgICAgICAgICBbInN0cmluZyIsICJCdWZmZXIiLCAiVWludDhBcnJheSJdLAogICAgICAgICAgY2h1bmsKICAgICAgICApOwogICAgICB9CiAgICB9CiAgICBpZiAoZXJyKSB7CiAgICAgIGVycm9yT3JEZXN0cm95MihzdHJlYW0sIGVycik7CiAgICB9IGVsc2UgaWYgKGNodW5rID09PSBudWxsKSB7CiAgICAgIHN0YXRlLnJlYWRpbmcgPSBmYWxzZTsKICAgICAgb25Fb2ZDaHVuayhzdHJlYW0sIHN0YXRlKTsKICAgIH0gZWxzZSBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCBjaHVuayAmJiBjaHVuay5sZW5ndGggPiAwKSB7CiAgICAgIGlmIChhZGRUb0Zyb250KSB7CiAgICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHsKICAgICAgICAgIGVycm9yT3JEZXN0cm95MihzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgdHJ1ZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7CiAgICAgICAgZXJyb3JPckRlc3Ryb3kyKHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YoKSk7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkIHx8IHN0YXRlLmVycm9yZWQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlOwogICAgICAgIGlmIChzdGF0ZS5kZWNvZGVyICYmICFlbmNvZGluZykgewogICAgICAgICAgY2h1bmsgPSBzdGF0ZS5kZWNvZGVyLndyaXRlKGNodW5rKTsKICAgICAgICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rLmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgZmFsc2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHsKICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlOwogICAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgcmV0dXJuICFzdGF0ZS5lbmRlZCAmJiAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApOwogIH0KICBmdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkgewogICAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmICFzdGF0ZS5zeW5jICYmIHN0cmVhbS5saXN0ZW5lckNvdW50KCJkYXRhIikgPiAwKSB7CiAgICAgIGlmIChzdGF0ZS5tdWx0aUF3YWl0RHJhaW4pIHsKICAgICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOwogICAgICB9IGVsc2UgewogICAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbDsKICAgICAgfQogICAgICBzdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWU7CiAgICAgIHN0cmVhbS5lbWl0KCJkYXRhIiwgY2h1bmspOwogICAgfSBlbHNlIHsKICAgICAgc3RhdGUubGVuZ3RoICs9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoOwogICAgICBpZiAoYWRkVG9Gcm9udCkgewogICAgICAgIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLm5lZWRSZWFkYWJsZSkgewogICAgICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pOwogICAgICB9CiAgICB9CiAgICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpOwogIH0KICBSZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbigpIHsKICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTsKICAgIHJldHVybiBzdGF0ZVtrUGF1c2VkXSA9PT0gdHJ1ZSB8fCBzdGF0ZS5mbG93aW5nID09PSBmYWxzZTsKICB9OwogIFJlYWRhYmxlLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKGVuYykgewogICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7CiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBkZWNvZGVyOwogICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZzsKICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyOwogICAgbGV0IGNvbnRlbnQgPSAiIjsKICAgIGZvciAoY29uc3QgZGF0YSBvZiBidWZmZXIpIHsKICAgICAgY29udGVudCArPSBkZWNvZGVyLndyaXRlKGRhdGEpOwogICAgfQogICAgYnVmZmVyLmNsZWFyKCk7CiAgICBpZiAoY29udGVudCAhPT0gIiIpIHsKICAgICAgYnVmZmVyLnB1c2goY29udGVudCk7CiAgICB9CiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aCA9IGNvbnRlbnQubGVuZ3RoOwogICAgcmV0dXJuIHRoaXM7CiAgfTsKICB2YXIgTUFYX0hXTSA9IDEwNzM3NDE4MjQ7CiAgZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobjgpIHsKICAgIGlmIChuOCA+PSBNQVhfSFdNKSB7CiAgICAgIG44ID0gTUFYX0hXTTsKICAgIH0gZWxzZSB7CiAgICAgIG44LS07CiAgICAgIG44IHw9IG44ID4+PiAxOwogICAgICBuOCB8PSBuOCA+Pj4gMjsKICAgICAgbjggfD0gbjggPj4+IDQ7CiAgICAgIG44IHw9IG44ID4+PiA4OwogICAgICBuOCB8PSBuOCA+Pj4gMTY7CiAgICAgIG44Kys7CiAgICB9CiAgICByZXR1cm4gbjg7CiAgfQogIGZ1bmN0aW9uIGhvd011Y2hUb1JlYWQobjgsIHN0YXRlKSB7CiAgICBpZiAobjggPD0gMCB8fCBzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAoc3RhdGUub2JqZWN0TW9kZSkgewogICAgICByZXR1cm4gMTsKICAgIH0KICAgIGlmIChOdW1iZXIuaXNOYU4objgpKSB7CiAgICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCkgewogICAgICAgIHJldHVybiBzdGF0ZS5idWZmZXIuZmlyc3QoKS5sZW5ndGg7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXRlLmxlbmd0aDsKICAgIH0KICAgIGlmIChuOCA8PSBzdGF0ZS5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG44OwogICAgfQogICAgcmV0dXJuIHN0YXRlLmVuZGVkID8gc3RhdGUubGVuZ3RoIDogMDsKICB9CiAgUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihuOCkgewogICAgZGVidWcoInJlYWQiLCBuOCk7CiAgICBpZiAobjggPT09IHZvaWQgMCkgewogICAgICBuOCA9IE5hTjsKICAgIH0gZWxzZSBpZiAoIU51bWJlci5pc0ludGVnZXIobjgpKSB7CiAgICAgIG44ID0gTnVtYmVyLnBhcnNlSW50KG44LCAxMCk7CiAgICB9CiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7CiAgICBjb25zdCBuT3JpZyA9IG44OwogICAgaWYgKG44ID4gc3RhdGUuaGlnaFdhdGVyTWFyaykgewogICAgICBzdGF0ZS5oaWdoV2F0ZXJNYXJrID0gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobjgpOwogICAgfQogICAgaWYgKG44ICE9PSAwKSB7CiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlOwogICAgfQogICAgaWYgKG44ID09PSAwICYmIHN0YXRlLm5lZWRSZWFkYWJsZSAmJiAoKHN0YXRlLmhpZ2hXYXRlck1hcmsgIT09IDAgPyBzdGF0ZS5sZW5ndGggPj0gc3RhdGUuaGlnaFdhdGVyTWFyayA6IHN0YXRlLmxlbmd0aCA+IDApIHx8IHN0YXRlLmVuZGVkKSkgewogICAgICBkZWJ1ZygicmVhZDogZW1pdFJlYWRhYmxlIiwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7CiAgICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpIHsKICAgICAgICBlbmRSZWFkYWJsZSh0aGlzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbWl0UmVhZGFibGUodGhpcyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBuOCA9IGhvd011Y2hUb1JlYWQobjgsIHN0YXRlKTsKICAgIGlmIChuOCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkgewogICAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgZW5kUmVhZGFibGUodGhpcyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlOwogICAgZGVidWcoIm5lZWQgcmVhZGFibGUiLCBkb1JlYWQpOwogICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCB8fCBzdGF0ZS5sZW5ndGggLSBuOCA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHsKICAgICAgZG9SZWFkID0gdHJ1ZTsKICAgICAgZGVidWcoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIiwgZG9SZWFkKTsKICAgIH0KICAgIGlmIChzdGF0ZS5lbmRlZCB8fCBzdGF0ZS5yZWFkaW5nIHx8IHN0YXRlLmRlc3Ryb3llZCB8fCBzdGF0ZS5lcnJvcmVkIHx8ICFzdGF0ZS5jb25zdHJ1Y3RlZCkgewogICAgICBkb1JlYWQgPSBmYWxzZTsKICAgICAgZGVidWcoInJlYWRpbmcsIGVuZGVkIG9yIGNvbnN0cnVjdGluZyIsIGRvUmVhZCk7CiAgICB9IGVsc2UgaWYgKGRvUmVhZCkgewogICAgICBkZWJ1ZygiZG8gcmVhZCIpOwogICAgICBzdGF0ZS5yZWFkaW5nID0gdHJ1ZTsKICAgICAgc3RhdGUuc3luYyA9IHRydWU7CiAgICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHsKICAgICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlOwogICAgICB9CiAgICAgIHRoaXMuX3JlYWQoc3RhdGUuaGlnaFdhdGVyTWFyayk7CiAgICAgIHN0YXRlLnN5bmMgPSBmYWxzZTsKICAgICAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7CiAgICAgICAgbjggPSBob3dNdWNoVG9SZWFkKG5PcmlnLCBzdGF0ZSk7CiAgICAgIH0KICAgIH0KICAgIGxldCByZXQ7CiAgICBpZiAobjggPiAwKSB7CiAgICAgIHJldCA9IGZyb21MaXN0KG44LCBzdGF0ZSk7CiAgICB9IGVsc2UgewogICAgICByZXQgPSBudWxsOwogICAgfQogICAgaWYgKHJldCA9PT0gbnVsbCkgewogICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFyazsKICAgICAgbjggPSAwOwogICAgfSBlbHNlIHsKICAgICAgc3RhdGUubGVuZ3RoIC09IG44OwogICAgICBpZiAoc3RhdGUubXVsdGlBd2FpdERyYWluKSB7CiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuY2xlYXIoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHsKICAgICAgaWYgKCFzdGF0ZS5lbmRlZCkgewogICAgICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKG5PcmlnICE9PSBuOCAmJiBzdGF0ZS5lbmRlZCkgewogICAgICAgIGVuZFJlYWRhYmxlKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAocmV0ICE9PSBudWxsKSB7CiAgICAgIHN0YXRlLmRhdGFFbWl0dGVkID0gdHJ1ZTsKICAgICAgdGhpcy5lbWl0KCJkYXRhIiwgcmV0KTsKICAgIH0KICAgIHJldHVybiByZXQ7CiAgfTsKICBmdW5jdGlvbiBvbkVvZkNodW5rKHN0cmVhbSwgc3RhdGUpIHsKICAgIGRlYnVnKCJvbkVvZkNodW5rIik7CiAgICBpZiAoc3RhdGUuZW5kZWQpCiAgICAgIHJldHVybjsKICAgIGlmIChzdGF0ZS5kZWNvZGVyKSB7CiAgICAgIGNvbnN0IGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTsKICAgICAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkgewogICAgICAgIHN0YXRlLmJ1ZmZlci5wdXNoKGNodW5rKTsKICAgICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7CiAgICAgIH0KICAgIH0KICAgIHN0YXRlLmVuZGVkID0gdHJ1ZTsKICAgIGlmIChzdGF0ZS5zeW5jKSB7CiAgICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pOwogICAgfSBlbHNlIHsKICAgICAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7CiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7CiAgICAgIGVtaXRSZWFkYWJsZV8oc3RyZWFtKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gZW1pdFJlYWRhYmxlKHN0cmVhbSkgewogICAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7CiAgICBkZWJ1ZygiZW1pdFJlYWRhYmxlIiwgc3RhdGUubmVlZFJlYWRhYmxlLCBzdGF0ZS5lbWl0dGVkUmVhZGFibGUpOwogICAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7CiAgICBpZiAoIXN0YXRlLmVtaXR0ZWRSZWFkYWJsZSkgewogICAgICBkZWJ1ZygiZW1pdFJlYWRhYmxlIiwgc3RhdGUuZmxvd2luZyk7CiAgICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7CiAgICAgIG5leHRUaWNrMihlbWl0UmVhZGFibGVfLCBzdHJlYW0pOwogICAgfQogIH0KICBmdW5jdGlvbiBlbWl0UmVhZGFibGVfKHN0cmVhbSkgewogICAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7CiAgICBkZWJ1ZygiZW1pdFJlYWRhYmxlXyIsIHN0YXRlLmRlc3Ryb3llZCwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7CiAgICBpZiAoIXN0YXRlLmRlc3Ryb3llZCAmJiAhc3RhdGUuZXJyb3JlZCAmJiAoc3RhdGUubGVuZ3RoIHx8IHN0YXRlLmVuZGVkKSkgewogICAgICBzdHJlYW0uZW1pdCgicmVhZGFibGUiKTsKICAgICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7CiAgICB9CiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSAhc3RhdGUuZmxvd2luZyAmJiAhc3RhdGUuZW5kZWQgJiYgc3RhdGUubGVuZ3RoIDw9IHN0YXRlLmhpZ2hXYXRlck1hcms7CiAgICBmbG93KHN0cmVhbSk7CiAgfQogIGZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKCFzdGF0ZS5yZWFkaW5nTW9yZSAmJiBzdGF0ZS5jb25zdHJ1Y3RlZCkgewogICAgICBzdGF0ZS5yZWFkaW5nTW9yZSA9IHRydWU7CiAgICAgIG5leHRUaWNrMihtYXliZVJlYWRNb3JlXywgc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG1heWJlUmVhZE1vcmVfKHN0cmVhbSwgc3RhdGUpIHsKICAgIHdoaWxlICghc3RhdGUucmVhZGluZyAmJiAhc3RhdGUuZW5kZWQgJiYgKHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDApKSB7CiAgICAgIGNvbnN0IGxlbiA9IHN0YXRlLmxlbmd0aDsKICAgICAgZGVidWcoIm1heWJlUmVhZE1vcmUgcmVhZCAwIik7CiAgICAgIHN0cmVhbS5yZWFkKDApOwogICAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgc3RhdGUucmVhZGluZ01vcmUgPSBmYWxzZTsKICB9CiAgUmVhZGFibGUucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24objgpIHsKICAgIHRocm93IG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgiX3JlYWQoKSIpOwogIH07CiAgUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBwaXBlT3B0cykgewogICAgY29uc3Qgc3JjID0gdGhpczsKICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTsKICAgIGlmIChzdGF0ZS5waXBlcy5sZW5ndGggPT09IDEpIHsKICAgICAgaWYgKCFzdGF0ZS5tdWx0aUF3YWl0RHJhaW4pIHsKICAgICAgICBzdGF0ZS5tdWx0aUF3YWl0RHJhaW4gPSB0cnVlOwogICAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbmV3IFNldCgKICAgICAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID8gW3N0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzXSA6IFtdCiAgICAgICAgKTsKICAgICAgfQogICAgfQogICAgc3RhdGUucGlwZXMucHVzaChkZXN0KTsKICAgIGRlYnVnKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLCBzdGF0ZS5waXBlcy5sZW5ndGgsIHBpcGVPcHRzKTsKICAgIGNvbnN0IGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJiBkZXN0ICE9PSBzdGRpby5zdGRvdXQgJiYgZGVzdCAhPT0gc3RkaW8uc3RkZXJyOwogICAgY29uc3QgZW5kRm4gPSBkb0VuZCA/IG9uZW5kIDogdW5waXBlOwogICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHsKICAgICAgbmV4dFRpY2syKGVuZEZuKTsKICAgIH0gZWxzZSB7CiAgICAgIHNyYy5vbmNlKCJlbmQiLCBlbmRGbik7CiAgICB9CiAgICBkZXN0Lm9uKCJ1bnBpcGUiLCBvbnVucGlwZSk7CiAgICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykgewogICAgICBkZWJ1Zygib251bnBpcGUiKTsKICAgICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHsKICAgICAgICBpZiAodW5waXBlSW5mbyAmJiB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPT09IGZhbHNlKSB7CiAgICAgICAgICB1bnBpcGVJbmZvLmhhc1VucGlwZWQgPSB0cnVlOwogICAgICAgICAgY2xlYW51cCgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gb25lbmQoKSB7CiAgICAgIGRlYnVnKCJvbmVuZCIpOwogICAgICBkZXN0LmVuZCgpOwogICAgfQogICAgbGV0IG9uZHJhaW47CiAgICBsZXQgY2xlYW5lZFVwID0gZmFsc2U7CiAgICBmdW5jdGlvbiBjbGVhbnVwKCkgewogICAgICBkZWJ1ZygiY2xlYW51cCIpOwogICAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsIG9uY2xvc2UpOwogICAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLCBvbmZpbmlzaCk7CiAgICAgIGlmIChvbmRyYWluKSB7CiAgICAgICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLCBvbmRyYWluKTsKICAgICAgfQogICAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsIG9uZXJyb3IpOwogICAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLCBvbnVucGlwZSk7CiAgICAgIHNyYy5yZW1vdmVMaXN0ZW5lcigiZW5kIiwgb25lbmQpOwogICAgICBzcmMucmVtb3ZlTGlzdGVuZXIoImVuZCIsIHVucGlwZSk7CiAgICAgIHNyYy5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsIG9uZGF0YSk7CiAgICAgIGNsZWFuZWRVcCA9IHRydWU7CiAgICAgIGlmIChvbmRyYWluICYmIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzICYmICghZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbikpIHsKICAgICAgICBvbmRyYWluKCk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHBhdXNlKCkgewogICAgICBpZiAoIWNsZWFuZWRVcCkgewogICAgICAgIGlmIChzdGF0ZS5waXBlcy5sZW5ndGggPT09IDEgJiYgc3RhdGUucGlwZXNbMF0gPT09IGRlc3QpIHsKICAgICAgICAgIGRlYnVnKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLCAwKTsKICAgICAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gZGVzdDsKICAgICAgICAgIHN0YXRlLm11bHRpQXdhaXREcmFpbiA9IGZhbHNlOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID4gMSAmJiBzdGF0ZS5waXBlcy5pbmNsdWRlcyhkZXN0KSkgewogICAgICAgICAgZGVidWcoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpOwogICAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuYWRkKGRlc3QpOwogICAgICAgIH0KICAgICAgICBzcmMucGF1c2UoKTsKICAgICAgfQogICAgICBpZiAoIW9uZHJhaW4pIHsKICAgICAgICBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjLCBkZXN0KTsKICAgICAgICBkZXN0Lm9uKCJkcmFpbiIsIG9uZHJhaW4pOwogICAgICB9CiAgICB9CiAgICBzcmMub24oImRhdGEiLCBvbmRhdGEpOwogICAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7CiAgICAgIGRlYnVnKCJvbmRhdGEiKTsKICAgICAgY29uc3QgcmV0ID0gZGVzdC53cml0ZShjaHVuayk7CiAgICAgIGRlYnVnKCJkZXN0LndyaXRlIiwgcmV0KTsKICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHsKICAgICAgICBwYXVzZSgpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBvbmVycm9yKGVyMykgewogICAgICBkZWJ1Zygib25lcnJvciIsIGVyMyk7CiAgICAgIHVucGlwZSgpOwogICAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsIG9uZXJyb3IpOwogICAgICBpZiAoZXZlbnRzX2RlZmF1bHQubGlzdGVuZXJDb3VudChkZXN0LCAiZXJyb3IiKSA9PT0gMCkgewogICAgICAgIGNvbnN0IHM4ID0gZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll9yZWFkYWJsZVN0YXRlOwogICAgICAgIGlmIChzOCAmJiAhczguZXJyb3JFbWl0dGVkKSB7CiAgICAgICAgICBlcnJvck9yRGVzdHJveTIoZGVzdCwgZXIzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGVzdC5lbWl0KCJlcnJvciIsIGVyMyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBwcmVwZW5kTGlzdGVuZXIyKGRlc3QsICJlcnJvciIsIG9uZXJyb3IpOwogICAgZnVuY3Rpb24gb25jbG9zZSgpIHsKICAgICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIiwgb25maW5pc2gpOwogICAgICB1bnBpcGUoKTsKICAgIH0KICAgIGRlc3Qub25jZSgiY2xvc2UiLCBvbmNsb3NlKTsKICAgIGZ1bmN0aW9uIG9uZmluaXNoKCkgewogICAgICBkZWJ1Zygib25maW5pc2giKTsKICAgICAgZGVzdC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLCBvbmNsb3NlKTsKICAgICAgdW5waXBlKCk7CiAgICB9CiAgICBkZXN0Lm9uY2UoImZpbmlzaCIsIG9uZmluaXNoKTsKICAgIGZ1bmN0aW9uIHVucGlwZSgpIHsKICAgICAgZGVidWcoInVucGlwZSIpOwogICAgICBzcmMudW5waXBlKGRlc3QpOwogICAgfQogICAgZGVzdC5lbWl0KCJwaXBlIiwgc3JjKTsKICAgIGlmIChkZXN0LndyaXRhYmxlTmVlZERyYWluID09PSB0cnVlKSB7CiAgICAgIGlmIChzdGF0ZS5mbG93aW5nKSB7CiAgICAgICAgcGF1c2UoKTsKICAgICAgfQogICAgfSBlbHNlIGlmICghc3RhdGUuZmxvd2luZykgewogICAgICBkZWJ1ZygicGlwZSByZXN1bWUiKTsKICAgICAgc3JjLnJlc3VtZSgpOwogICAgfQogICAgcmV0dXJuIGRlc3Q7CiAgfTsKICBmdW5jdGlvbiBwaXBlT25EcmFpbihzcmMsIGRlc3QpIHsKICAgIHJldHVybiBmdW5jdGlvbiBwaXBlT25EcmFpbkZ1bmN0aW9uUmVzdWx0KCkgewogICAgICBjb25zdCBzdGF0ZSA9IHNyYy5fcmVhZGFibGVTdGF0ZTsKICAgICAgaWYgKHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID09PSBkZXN0KSB7CiAgICAgICAgZGVidWcoInBpcGVPbkRyYWluIiwgMSk7CiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBudWxsOwogICAgICB9IGVsc2UgaWYgKHN0YXRlLm11bHRpQXdhaXREcmFpbikgewogICAgICAgIGRlYnVnKCJwaXBlT25EcmFpbiIsIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpOwogICAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmRlbGV0ZShkZXN0KTsKICAgICAgfQogICAgICBpZiAoKCFzdGF0ZS5hd2FpdERyYWluV3JpdGVycyB8fCBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5zaXplID09PSAwKSAmJiBldmVudHNfZGVmYXVsdC5saXN0ZW5lckNvdW50KHNyYywgImRhdGEiKSkgewogICAgICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlOwogICAgICAgIGZsb3coc3JjKTsKICAgICAgfQogICAgfTsKICB9CiAgUmVhZGFibGUucHJvdG90eXBlLnVucGlwZSA9IGZ1bmN0aW9uKGRlc3QpIHsKICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTsKICAgIGNvbnN0IHVucGlwZUluZm8gPSB7IGhhc1VucGlwZWQ6IGZhbHNlIH07CiAgICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgaWYgKCFkZXN0KSB7CiAgICAgIGNvbnN0IGRlc3RzID0gc3RhdGUucGlwZXM7CiAgICAgIHN0YXRlLnBpcGVzID0gW107CiAgICAgIHRoaXMucGF1c2UoKTsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGRlc3RzLmxlbmd0aDsgaTQrKykgewogICAgICAgIGRlc3RzW2k0XS5lbWl0KCJ1bnBpcGUiLCB0aGlzLCB7IGhhc1VucGlwZWQ6IGZhbHNlIH0pOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgY29uc3QgaW5kZXggPSBzdGF0ZS5waXBlcy5pbmRleE9mKGRlc3QpOwogICAgaWYgKGluZGV4ID09PSAtMSkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIHN0YXRlLnBpcGVzLnNwbGljZShpbmRleCwgMSk7CiAgICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHRoaXMucGF1c2UoKTsKICAgIH0KICAgIGRlc3QuZW1pdCgidW5waXBlIiwgdGhpcywgdW5waXBlSW5mbyk7CiAgICByZXR1cm4gdGhpczsKICB9OwogIFJlYWRhYmxlLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKGV2LCBmbjQpIHsKICAgIGNvbnN0IHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm40KTsKICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTsKICAgIGlmIChldiA9PT0gImRhdGEiKSB7CiAgICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gdGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpID4gMDsKICAgICAgaWYgKHN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB7CiAgICAgICAgdGhpcy5yZXN1bWUoKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChldiA9PT0gInJlYWRhYmxlIikgewogICAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7CiAgICAgICAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlOwogICAgICAgIHN0YXRlLmZsb3dpbmcgPSBmYWxzZTsKICAgICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTsKICAgICAgICBkZWJ1Zygib24gcmVhZGFibGUiLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLnJlYWRpbmcpOwogICAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHsKICAgICAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7CiAgICAgICAgICBuZXh0VGljazIoblJlYWRpbmdOZXh0VGljaywgdGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH07CiAgUmVhZGFibGUucHJvdG90eXBlLmFkZExpc3RlbmVyID0gUmVhZGFibGUucHJvdG90eXBlLm9uOwogIFJlYWRhYmxlLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2LCBmbjQpIHsKICAgIGNvbnN0IHJlcyA9IFN0cmVhbS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLCBldiwgZm40KTsKICAgIGlmIChldiA9PT0gInJlYWRhYmxlIikgewogICAgICBuZXh0VGljazIodXBkYXRlUmVhZGFibGVMaXN0ZW5pbmcsIHRoaXMpOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9OwogIFJlYWRhYmxlLnByb3RvdHlwZS5vZmYgPSBSZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7CiAgUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKGV2KSB7CiAgICBjb25zdCByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgaWYgKGV2ID09PSAicmVhZGFibGUiIHx8IGV2ID09PSB2b2lkIDApIHsKICAgICAgbmV4dFRpY2syKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKTsKICAgIH0KICAgIHJldHVybiByZXM7CiAgfTsKICBmdW5jdGlvbiB1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyhzZWxmMikgewogICAgY29uc3Qgc3RhdGUgPSBzZWxmMi5fcmVhZGFibGVTdGF0ZTsKICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gc2VsZjIubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKSA+IDA7CiAgICBpZiAoc3RhdGUucmVzdW1lU2NoZWR1bGVkICYmIHN0YXRlW2tQYXVzZWRdID09PSBmYWxzZSkgewogICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoc2VsZjIubGlzdGVuZXJDb3VudCgiZGF0YSIpID4gMCkgewogICAgICBzZWxmMi5yZXN1bWUoKTsKICAgIH0gZWxzZSBpZiAoIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7CiAgICAgIHN0YXRlLmZsb3dpbmcgPSBudWxsOwogICAgfQogIH0KICBmdW5jdGlvbiBuUmVhZGluZ05leHRUaWNrKHNlbGYyKSB7CiAgICBkZWJ1ZygicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIik7CiAgICBzZWxmMi5yZWFkKDApOwogIH0KICBSZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7CiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7CiAgICBpZiAoIXN0YXRlLmZsb3dpbmcpIHsKICAgICAgZGVidWcoInJlc3VtZSIpOwogICAgICBzdGF0ZS5mbG93aW5nID0gIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nOwogICAgICByZXN1bWUodGhpcywgc3RhdGUpOwogICAgfQogICAgc3RhdGVba1BhdXNlZF0gPSBmYWxzZTsKICAgIHJldHVybiB0aGlzOwogIH07CiAgZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmICghc3RhdGUucmVzdW1lU2NoZWR1bGVkKSB7CiAgICAgIHN0YXRlLnJlc3VtZVNjaGVkdWxlZCA9IHRydWU7CiAgICAgIG5leHRUaWNrMihyZXN1bWVfLCBzdHJlYW0sIHN0YXRlKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gcmVzdW1lXyhzdHJlYW0sIHN0YXRlKSB7CiAgICBkZWJ1ZygicmVzdW1lIiwgc3RhdGUucmVhZGluZyk7CiAgICBpZiAoIXN0YXRlLnJlYWRpbmcpIHsKICAgICAgc3RyZWFtLnJlYWQoMCk7CiAgICB9CiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTsKICAgIHN0cmVhbS5lbWl0KCJyZXN1bWUiKTsKICAgIGZsb3coc3RyZWFtKTsKICAgIGlmIChzdGF0ZS5mbG93aW5nICYmICFzdGF0ZS5yZWFkaW5nKSB7CiAgICAgIHN0cmVhbS5yZWFkKDApOwogICAgfQogIH0KICBSZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHsKICAgIGRlYnVnKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLCB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpOwogICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHsKICAgICAgZGVidWcoInBhdXNlIik7CiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyA9IGZhbHNlOwogICAgICB0aGlzLmVtaXQoInBhdXNlIik7CiAgICB9CiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlW2tQYXVzZWRdID0gdHJ1ZTsKICAgIHJldHVybiB0aGlzOwogIH07CiAgZnVuY3Rpb24gZmxvdyhzdHJlYW0pIHsKICAgIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlOwogICAgZGVidWcoImZsb3ciLCBzdGF0ZS5mbG93aW5nKTsKICAgIHdoaWxlIChzdGF0ZS5mbG93aW5nICYmIHN0cmVhbS5yZWFkKCkgIT09IG51bGwpCiAgICAgIDsKICB9CiAgUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbihzdHJlYW0pIHsKICAgIGxldCBwYXVzZWQgPSBmYWxzZTsKICAgIHN0cmVhbS5vbigiZGF0YSIsIChjaHVuaykgPT4gewogICAgICBpZiAoIXRoaXMucHVzaChjaHVuaykgJiYgc3RyZWFtLnBhdXNlKSB7CiAgICAgICAgcGF1c2VkID0gdHJ1ZTsKICAgICAgICBzdHJlYW0ucGF1c2UoKTsKICAgICAgfQogICAgfSk7CiAgICBzdHJlYW0ub24oImVuZCIsICgpID0+IHsKICAgICAgdGhpcy5wdXNoKG51bGwpOwogICAgfSk7CiAgICBzdHJlYW0ub24oImVycm9yIiwgKGVycikgPT4gewogICAgICBlcnJvck9yRGVzdHJveTIodGhpcywgZXJyKTsKICAgIH0pOwogICAgc3RyZWFtLm9uKCJjbG9zZSIsICgpID0+IHsKICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICB9KTsKICAgIHN0cmVhbS5vbigiZGVzdHJveSIsICgpID0+IHsKICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICB9KTsKICAgIHRoaXMuX3JlYWQgPSAoKSA9PiB7CiAgICAgIGlmIChwYXVzZWQgJiYgc3RyZWFtLnJlc3VtZSkgewogICAgICAgIHBhdXNlZCA9IGZhbHNlOwogICAgICAgIHN0cmVhbS5yZXN1bWUoKTsKICAgICAgfQogICAgfTsKICAgIGNvbnN0IHN0cmVhbUtleXMgPSBPYmplY3Qua2V5cyhzdHJlYW0pOwogICAgZm9yIChsZXQgajE5ID0gMTsgajE5IDwgc3RyZWFtS2V5cy5sZW5ndGg7IGoxOSsrKSB7CiAgICAgIGNvbnN0IGk0ID0gc3RyZWFtS2V5c1tqMTldOwogICAgICBpZiAodGhpc1tpNF0gPT09IHZvaWQgMCAmJiB0eXBlb2Ygc3RyZWFtW2k0XSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHRoaXNbaTRdID0gc3RyZWFtW2k0XS5iaW5kKHN0cmVhbSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzOwogIH07CiAgUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHN0cmVhbVRvQXN5bmNJdGVyYXRvcih0aGlzKTsKICB9OwogIFJlYWRhYmxlLnByb3RvdHlwZS5pdGVyYXRvciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIGlmIChvcHRpb25zICE9PSB2b2lkIDApIHsKICAgICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgIm9wdGlvbnMiKTsKICAgIH0KICAgIHJldHVybiBzdHJlYW1Ub0FzeW5jSXRlcmF0b3IodGhpcywgb3B0aW9ucyk7CiAgfTsKICBmdW5jdGlvbiBzdHJlYW1Ub0FzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKSB7CiAgICBpZiAodHlwZW9mIHN0cmVhbS5yZWFkICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHN0cmVhbSA9IFJlYWRhYmxlLndyYXAoc3RyZWFtLCB7IG9iamVjdE1vZGU6IHRydWUgfSk7CiAgICB9CiAgICBjb25zdCBpdGVyID0gY3JlYXRlQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpOwogICAgaXRlci5zdHJlYW0gPSBzdHJlYW07CiAgICByZXR1cm4gaXRlcjsKICB9CiAgYXN5bmMgZnVuY3Rpb24qIGNyZWF0ZUFzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKSB7CiAgICBsZXQgY2FsbGJhY2sgPSBub3AyOwogICAgY29uc3Qgb3B0cyA9IHsKICAgICAgZGVzdHJveU9uUmV0dXJuOiB0cnVlLAogICAgICBkZXN0cm95T25FcnJvcjogdHJ1ZSwKICAgICAgLi4ub3B0aW9ucwogICAgfTsKICAgIGZ1bmN0aW9uIG5leHQocmVzb2x2ZTcpIHsKICAgICAgaWYgKHRoaXMgPT09IHN0cmVhbSkgewogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgY2FsbGJhY2sgPSBub3AyOwogICAgICB9IGVsc2UgewogICAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZTc7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlOwogICAgbGV0IGVycm9yID0gc3RhdGUuZXJyb3JlZDsKICAgIGxldCBlcnJvckVtaXR0ZWQgPSBzdGF0ZS5lcnJvckVtaXR0ZWQ7CiAgICBsZXQgZW5kRW1pdHRlZCA9IHN0YXRlLmVuZEVtaXR0ZWQ7CiAgICBsZXQgY2xvc2VFbWl0dGVkID0gc3RhdGUuY2xvc2VFbWl0dGVkOwogICAgc3RyZWFtLm9uKCJyZWFkYWJsZSIsIG5leHQpLm9uKCJlcnJvciIsIGZ1bmN0aW9uKGVycikgewogICAgICBlcnJvciA9IGVycjsKICAgICAgZXJyb3JFbWl0dGVkID0gdHJ1ZTsKICAgICAgbmV4dC5jYWxsKHRoaXMpOwogICAgfSkub24oImVuZCIsIGZ1bmN0aW9uKCkgewogICAgICBlbmRFbWl0dGVkID0gdHJ1ZTsKICAgICAgbmV4dC5jYWxsKHRoaXMpOwogICAgfSkub24oImNsb3NlIiwgZnVuY3Rpb24oKSB7CiAgICAgIGNsb3NlRW1pdHRlZCA9IHRydWU7CiAgICAgIG5leHQuY2FsbCh0aGlzKTsKICAgIH0pOwogICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7CiAgICB0cnkgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGNvbnN0IGNodW5rID0gc3RyZWFtLmRlc3Ryb3llZCA/IG51bGwgOiBzdHJlYW0ucmVhZCgpOwogICAgICAgIGlmIChjaHVuayAhPT0gbnVsbCkgewogICAgICAgICAgeWllbGQgY2h1bms7CiAgICAgICAgfSBlbHNlIGlmIChlcnJvckVtaXR0ZWQpIHsKICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0gZWxzZSBpZiAoZW5kRW1pdHRlZCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIGlmIChjbG9zZUVtaXR0ZWQpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShuZXh0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAob3B0cy5kZXN0cm95T25FcnJvcikgewogICAgICAgIGRlc3Ryb3lfZGVmYXVsdC5kZXN0cm95ZXIoc3RyZWFtLCBlcnIpOwogICAgICB9CiAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKICAgICAgdGhyb3cgZXJyOwogICAgfSBmaW5hbGx5IHsKICAgICAgaWYgKCFlcnJvclRocm93biAmJiBvcHRzLmRlc3Ryb3lPblJldHVybikgewogICAgICAgIGlmIChzdGF0ZS5hdXRvRGVzdHJveSB8fCAhZW5kRW1pdHRlZCkgewogICAgICAgICAgZGVzdHJveV9kZWZhdWx0LmRlc3Ryb3llcihzdHJlYW0sIG51bGwpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZS5wcm90b3R5cGUsIHsKICAgIHJlYWRhYmxlOiB7CiAgICAgIGdldCgpIHsKICAgICAgICBjb25zdCByMyA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7CiAgICAgICAgcmV0dXJuICEhcjMgJiYgcjMucmVhZGFibGUgIT09IGZhbHNlICYmICFyMy5kZXN0cm95ZWQgJiYgIXIzLmVycm9yRW1pdHRlZCAmJiAhcjMuZW5kRW1pdHRlZDsKICAgICAgfSwKICAgICAgc2V0KHZhbCkgewogICAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7CiAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gISF2YWw7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgcmVhZGFibGVEaWRSZWFkOiB7CiAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkOwogICAgICB9CiAgICB9LAogICAgcmVhZGFibGVBYm9ydGVkOiB7CiAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAhISh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCB8fCB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQpICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ7CiAgICAgIH0KICAgIH0sCiAgICByZWFkYWJsZUhpZ2hXYXRlck1hcms6IHsKICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFyazsKICAgICAgfQogICAgfSwKICAgIHJlYWRhYmxlQnVmZmVyOiB7CiAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlICYmIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyOwogICAgICB9CiAgICB9LAogICAgcmVhZGFibGVGbG93aW5nOiB7CiAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc7CiAgICAgIH0sCiAgICAgIHNldDogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSkgewogICAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gc3RhdGU7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgcmVhZGFibGVMZW5ndGg6IHsKICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgIGdldCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg7CiAgICAgIH0KICAgIH0sCiAgICByZWFkYWJsZU9iamVjdE1vZGU6IHsKICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgIGdldCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSA/IHRoaXMuX3JlYWRhYmxlU3RhdGUub2JqZWN0TW9kZSA6IGZhbHNlOwogICAgICB9CiAgICB9LAogICAgcmVhZGFibGVFbmNvZGluZzogewogICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgZ2V0KCkgewogICAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA6IG51bGw7CiAgICAgIH0KICAgIH0sCiAgICBkZXN0cm95ZWQ6IHsKICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgIGdldCgpIHsKICAgICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZDsKICAgICAgfSwKICAgICAgc2V0KHZhbHVlKSB7CiAgICAgICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0YXRlKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7CiAgICAgIH0KICAgIH0sCiAgICByZWFkYWJsZUVuZGVkOiB7CiAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICBnZXQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgOiBmYWxzZTsKICAgICAgfQogICAgfQogIH0pOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlU3RhdGUucHJvdG90eXBlLCB7CiAgICBwaXBlc0NvdW50OiB7CiAgICAgIGdldCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5waXBlcy5sZW5ndGg7CiAgICAgIH0KICAgIH0sCiAgICBwYXVzZWQ6IHsKICAgICAgZ2V0KCkgewogICAgICAgIHJldHVybiB0aGlzW2tQYXVzZWRdICE9PSBmYWxzZTsKICAgICAgfSwKICAgICAgc2V0KHZhbHVlKSB7CiAgICAgICAgdGhpc1trUGF1c2VkXSA9ICEhdmFsdWU7CiAgICAgIH0KICAgIH0KICB9KTsKICBmdW5jdGlvbiBmcm9tTGlzdChuOCwgc3RhdGUpIHsKICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgcmV0OwogICAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHsKICAgICAgcmV0ID0gc3RhdGUuYnVmZmVyLnNoaWZ0KCk7CiAgICB9IGVsc2UgaWYgKCFuOCB8fCBuOCA+PSBzdGF0ZS5sZW5ndGgpIHsKICAgICAgaWYgKHN0YXRlLmRlY29kZXIpIHsKICAgICAgICByZXQgPSBzdGF0ZS5idWZmZXIuam9pbigiIik7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGUuYnVmZmVyLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHJldCA9IHN0YXRlLmJ1ZmZlci5maXJzdCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25jYXQoc3RhdGUubGVuZ3RoKTsKICAgICAgfQogICAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldCA9IHN0YXRlLmJ1ZmZlci5jb25zdW1lKG44LCBzdGF0ZS5kZWNvZGVyKTsKICAgIH0KICAgIHJldHVybiByZXQ7CiAgfQogIGZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkgewogICAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7CiAgICBkZWJ1ZygiZW5kUmVhZGFibGUiLCBzdGF0ZS5lbmRFbWl0dGVkKTsKICAgIGlmICghc3RhdGUuZW5kRW1pdHRlZCkgewogICAgICBzdGF0ZS5lbmRlZCA9IHRydWU7CiAgICAgIG5leHRUaWNrMihlbmRSZWFkYWJsZU5ULCBzdGF0ZSwgc3RyZWFtKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7CiAgICBkZWJ1ZygiZW5kUmVhZGFibGVOVCIsIHN0YXRlLmVuZEVtaXR0ZWQsIHN0YXRlLmxlbmd0aCk7CiAgICBpZiAoIXN0YXRlLmVycm9yRW1pdHRlZCAmJiAhc3RhdGUuY2xvc2VFbWl0dGVkICYmICFzdGF0ZS5lbmRFbWl0dGVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCkgewogICAgICBzdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTsKICAgICAgc3RyZWFtLmVtaXQoImVuZCIpOwogICAgICBpZiAoc3RyZWFtLndyaXRhYmxlICYmIHN0cmVhbS5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkgewogICAgICAgIG5leHRUaWNrMihlbmRXcml0YWJsZU5ULCBzdHJlYW0pOwogICAgICB9IGVsc2UgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7CiAgICAgICAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlOwogICAgICAgIGNvbnN0IGF1dG9EZXN0cm95ID0gIXdTdGF0ZSB8fCB3U3RhdGUuYXV0b0Rlc3Ryb3kgJiYgKHdTdGF0ZS5maW5pc2hlZCB8fCB3U3RhdGUud3JpdGFibGUgPT09IGZhbHNlKTsKICAgICAgICBpZiAoYXV0b0Rlc3Ryb3kpIHsKICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGVuZFdyaXRhYmxlTlQoc3RyZWFtKSB7CiAgICBjb25zdCB3cml0YWJsZSA9IHN0cmVhbS53cml0YWJsZSAmJiAhc3RyZWFtLndyaXRhYmxlRW5kZWQgJiYgIXN0cmVhbS5kZXN0cm95ZWQ7CiAgICBpZiAod3JpdGFibGUpIHsKICAgICAgc3RyZWFtLmVuZCgpOwogICAgfQogIH0KICBmdW5jdGlvbiByZWFkYWJsZUZyb20oaXRlcmFibGUsIG9wdHMpIHsKICAgIHJldHVybiBmcm9tX2RlZmF1bHQoUmVhZGFibGUsIGl0ZXJhYmxlLCBvcHRzKTsKICB9CiAgZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbShvYmplY3QpIHsKICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbTsKICB9CiAgdmFyIGZyb21XZWIgPSBSZWFkYWJsZS5mcm9tV2ViID0gZnVuY3Rpb24ocmVhZGFibGVTdHJlYW0sIG9wdGlvbnMgPSB7fSkgewogICAgaWYgKCFpc1JlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtKSkgewogICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoCiAgICAgICAgInJlYWRhYmxlU3RyZWFtIiwKICAgICAgICAiUmVhZGFibGVTdHJlYW0iLAogICAgICAgIHJlYWRhYmxlU3RyZWFtCiAgICAgICk7CiAgICB9CiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCAib3B0aW9ucyIpOwogICAgY29uc3QgewogICAgICBoaWdoV2F0ZXJNYXJrLAogICAgICBlbmNvZGluZywKICAgICAgb2JqZWN0TW9kZSA9IGZhbHNlLAogICAgICBzaWduYWwKICAgIH0gPSBvcHRpb25zOwogICAgaWYgKGVuY29kaW5nICE9PSB2b2lkIDAgJiYgIUJ1ZmZlcjQuaXNFbmNvZGluZyhlbmNvZGluZykpIHsKICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShlbmNvZGluZywgIm9wdGlvbnMuZW5jb2RpbmciKTsKICAgIH0KICAgIHZhbGlkYXRlQm9vbGVhbihvYmplY3RNb2RlLCAib3B0aW9ucy5vYmplY3RNb2RlIik7CiAgICBjb25zdCByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTsKICAgIGxldCBjbG9zZWQgPSBmYWxzZTsKICAgIGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKHsKICAgICAgb2JqZWN0TW9kZSwKICAgICAgaGlnaFdhdGVyTWFyaywKICAgICAgZW5jb2RpbmcsCiAgICAgIHNpZ25hbCwKICAgICAgcmVhZCgpIHsKICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4oCiAgICAgICAgICAoY2h1bmspID0+IHsKICAgICAgICAgICAgaWYgKGNodW5rLmRvbmUpIHsKICAgICAgICAgICAgICByZWFkYWJsZS5wdXNoKG51bGwpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJlYWRhYmxlLnB1c2goY2h1bmsudmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgKGVycm9yKSA9PiBkZXN0cm95LmNhbGwocmVhZGFibGUsIGVycm9yKQogICAgICAgICk7CiAgICAgIH0sCiAgICAgIGRlc3Ryb3koZXJyb3IsIGNhbGxiYWNrKSB7CiAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yMikgewogICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICB0aHJvdyBlcnJvcjI7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWNsb3NlZCkgewogICAgICAgICAgcmVhZGVyLmNhbmNlbChlcnJvcikudGhlbihkb25lLCBkb25lKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZG9uZSgpOwogICAgICB9CiAgICB9KTsKICAgIHJlYWRlci5jbG9zZWQudGhlbigKICAgICAgKCkgPT4gewogICAgICAgIGNsb3NlZCA9IHRydWU7CiAgICAgICAgaWYgKCFpc1JlYWRhYmxlRW5kZWQyKHJlYWRhYmxlKSkgewogICAgICAgICAgcmVhZGFibGUucHVzaChudWxsKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIChlcnJvcikgPT4gewogICAgICAgIGNsb3NlZCA9IHRydWU7CiAgICAgICAgZGVzdHJveS5jYWxsKHJlYWRhYmxlLCBlcnJvcik7CiAgICAgIH0KICAgICk7CiAgICByZXR1cm4gcmVhZGFibGU7CiAgfTsKICBmdW5jdGlvbiB3cmFwKHNyYywgb3B0aW9ucykgewogICAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7CiAgICAgIG9iamVjdE1vZGU6IHNyYy5yZWFkYWJsZU9iamVjdE1vZGUgPz8gc3JjLm9iamVjdE1vZGUgPz8gdHJ1ZSwKICAgICAgLi4ub3B0aW9ucywKICAgICAgZGVzdHJveShlcnIsIGNhbGxiYWNrKSB7CiAgICAgICAgZGVzdHJveV9kZWZhdWx0LmRlc3Ryb3llcihzcmMsIGVycik7CiAgICAgICAgY2FsbGJhY2soZXJyKTsKICAgICAgfQogICAgfSkud3JhcChzcmMpOwogIH0KICBSZWFkYWJsZS5fZnJvbUxpc3QgPSBmcm9tTGlzdDsKICBSZWFkYWJsZS5SZWFkYWJsZVN0YXRlID0gUmVhZGFibGVTdGF0ZTsKICBSZWFkYWJsZS5mcm9tID0gcmVhZGFibGVGcm9tOwogIFJlYWRhYmxlLndyYXAgPSB3cmFwOwogIHZhciByZWFkYWJsZV9kZWZhdWx0ID0gUmVhZGFibGU7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL3dyaXRhYmxlLm1qcwogIHZhciB7IGVycm9yT3JEZXN0cm95OiBlcnJvck9yRGVzdHJveTMgfSA9IGRlc3Ryb3lfZGVmYXVsdDsKICBmdW5jdGlvbiBpc0R1cGxleFN0cmVhbShtYXliZV9kdXBsZXgpIHsKICAgIGNvbnN0IGlzUmVhZGFibGUzID0gcmVhZGFibGVfZGVmYXVsdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihtYXliZV9kdXBsZXgpOwogICAgbGV0IHByb3RvdHlwZSA9IG1heWJlX2R1cGxleDsKICAgIGxldCBpc0R1cGxleCA9IGZhbHNlOwogICAgd2hpbGUgKHByb3RvdHlwZT8uY29uc3RydWN0b3IgJiYgcHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgIT09ICJPYmplY3QiKSB7CiAgICAgIGlmIChwcm90b3R5cGUuY29uc3RydWN0b3IubmFtZSA9PT0gIkR1cGxleCIpIHsKICAgICAgICBpc0R1cGxleCA9IHRydWU7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7CiAgICB9CiAgICByZXR1cm4gaXNSZWFkYWJsZTMgJiYgaXNEdXBsZXg7CiAgfQogIE9iamVjdC5zZXRQcm90b3R5cGVPZihXcml0YWJsZS5wcm90b3R5cGUsIFN0cmVhbS5wcm90b3R5cGUpOwogIE9iamVjdC5zZXRQcm90b3R5cGVPZihXcml0YWJsZSwgU3RyZWFtKTsKICBmdW5jdGlvbiBub3AzKCkgewogIH0KICB2YXIga09uRmluaXNoZWQgPSBTeW1ib2woImtPbkZpbmlzaGVkIik7CiAgZnVuY3Rpb24gV3JpdGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0sIGlzRHVwbGV4KSB7CiAgICBpZiAodHlwZW9mIGlzRHVwbGV4ICE9PSAiYm9vbGVhbiIpIHsKICAgICAgaXNEdXBsZXggPSBpc0R1cGxleFN0cmVhbShzdHJlYW0pOwogICAgfQogICAgdGhpcy5vYmplY3RNb2RlID0gISEob3B0aW9ucyAmJiBvcHRpb25zLm9iamVjdE1vZGUpOwogICAgaWYgKGlzRHVwbGV4KSB7CiAgICAgIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fCAhIShvcHRpb25zICYmIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlKTsKICAgIH0KICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IG9wdGlvbnMgPyBnZXRIaWdoV2F0ZXJNYXJrKHRoaXMsIG9wdGlvbnMsICJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLCBpc0R1cGxleCkgOiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhmYWxzZSk7CiAgICB0aGlzLmZpbmFsQ2FsbGVkID0gZmFsc2U7CiAgICB0aGlzLm5lZWREcmFpbiA9IGZhbHNlOwogICAgdGhpcy5lbmRpbmcgPSBmYWxzZTsKICAgIHRoaXMuZW5kZWQgPSBmYWxzZTsKICAgIHRoaXMuZmluaXNoZWQgPSBmYWxzZTsKICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7CiAgICBjb25zdCBub0RlY29kZSA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZSk7CiAgICB0aGlzLmRlY29kZVN0cmluZ3MgPSAhbm9EZWNvZGU7CiAgICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgInV0ZjgiOwogICAgdGhpcy5sZW5ndGggPSAwOwogICAgdGhpcy53cml0aW5nID0gZmFsc2U7CiAgICB0aGlzLmNvcmtlZCA9IDA7CiAgICB0aGlzLnN5bmMgPSB0cnVlOwogICAgdGhpcy5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7CiAgICB0aGlzLm9ud3JpdGUgPSBvbndyaXRlLmJpbmQodm9pZCAwLCBzdHJlYW0pOwogICAgdGhpcy53cml0ZWNiID0gbnVsbDsKICAgIHRoaXMud3JpdGVsZW4gPSAwOwogICAgdGhpcy5hZnRlcldyaXRlVGlja0luZm8gPSBudWxsOwogICAgcmVzZXRCdWZmZXIodGhpcyk7CiAgICB0aGlzLnBlbmRpbmdjYiA9IDA7CiAgICB0aGlzLmNvbnN0cnVjdGVkID0gdHJ1ZTsKICAgIHRoaXMucHJlZmluaXNoZWQgPSBmYWxzZTsKICAgIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2U7CiAgICB0aGlzLmVtaXRDbG9zZSA9ICFvcHRpb25zIHx8IG9wdGlvbnMuZW1pdENsb3NlICE9PSBmYWxzZTsKICAgIHRoaXMuYXV0b0Rlc3Ryb3kgPSAhb3B0aW9ucyB8fCBvcHRpb25zLmF1dG9EZXN0cm95ICE9PSBmYWxzZTsKICAgIHRoaXMuZXJyb3JlZCA9IG51bGw7CiAgICB0aGlzLmNsb3NlZCA9IGZhbHNlOwogICAgdGhpcy5jbG9zZUVtaXR0ZWQgPSBmYWxzZTsKICAgIHRoaXNba09uRmluaXNoZWRdID0gW107CiAgfQogIGZ1bmN0aW9uIHJlc2V0QnVmZmVyKHN0YXRlKSB7CiAgICBzdGF0ZS5idWZmZXJlZCA9IFtdOwogICAgc3RhdGUuYnVmZmVyZWRJbmRleCA9IDA7CiAgICBzdGF0ZS5hbGxCdWZmZXJzID0gdHJ1ZTsKICAgIHN0YXRlLmFsbE5vb3AgPSB0cnVlOwogIH0KICBXcml0YWJsZVN0YXRlLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbiBnZXRCdWZmZXIoKSB7CiAgICByZXR1cm4gdGhpcy5idWZmZXJlZC5zbGljZSh0aGlzLmJ1ZmZlcmVkSW5kZXgpOwogIH07CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RhdGUucHJvdG90eXBlLCAiYnVmZmVyZWRSZXF1ZXN0Q291bnQiLCB7CiAgICBnZXQoKSB7CiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlcmVkLmxlbmd0aCAtIHRoaXMuYnVmZmVyZWRJbmRleDsKICAgIH0KICB9KTsKICBmdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7CiAgICBjb25zdCBpc0R1cGxleCA9IGlzRHVwbGV4U3RyZWFtKHRoaXMpOwogICAgaWYgKCFpc0R1cGxleCAmJiAhRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0uY2FsbChXcml0YWJsZSwgdGhpcykpIHsKICAgICAgcmV0dXJuIG5ldyBXcml0YWJsZShvcHRpb25zKTsKICAgIH0KICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUgPSBuZXcgV3JpdGFibGVTdGF0ZShvcHRpb25zLCB0aGlzLCBpc0R1cGxleCk7CiAgICBpZiAob3B0aW9ucykgewogICAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aGlzLl93cml0ZSA9IG9wdGlvbnMud3JpdGU7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRldiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2OwogICAgICB9CiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmluYWwgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aGlzLl9maW5hbCA9IG9wdGlvbnMuZmluYWw7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHRoaXMuX2NvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0OwogICAgICB9CiAgICAgIGlmIChvcHRpb25zLnNpZ25hbCkgewogICAgICAgIGFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZShvcHRpb25zLnNpZ25hbCwgdGhpcyk7CiAgICAgIH0KICAgIH0KICAgIFN0cmVhbS5jYWxsKHRoaXMsIG9wdGlvbnMpOwogICAgZGVzdHJveV9kZWZhdWx0LmNvbnN0cnVjdCh0aGlzLCAoKSA9PiB7CiAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTsKICAgICAgaWYgKCFzdGF0ZS53cml0aW5nKSB7CiAgICAgICAgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpOwogICAgICB9CiAgICAgIGZpbmlzaE1heWJlKHRoaXMsIHN0YXRlKTsKICAgIH0pOwogIH0KICBPYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbC5oYXNJbnN0YW5jZSwgewogICAgdmFsdWU6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgICBpZiAoRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0uY2FsbCh0aGlzLCBvYmplY3QpKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAodGhpcyAhPT0gV3JpdGFibGUpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFdyaXRhYmxlU3RhdGU7CiAgICB9CiAgfSk7CiAgV3JpdGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHsKICAgIGVycm9yT3JEZXN0cm95Myh0aGlzLCBuZXcgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSgpKTsKICB9OwogIGZ1bmN0aW9uIF93cml0ZShzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgY2IpIHsKICAgIGNvbnN0IHN0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlOwogICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gImZ1bmN0aW9uIikgewogICAgICBjYiA9IGVuY29kaW5nOwogICAgICBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZzsKICAgIH0gZWxzZSB7CiAgICAgIGlmICghZW5jb2RpbmcpIHsKICAgICAgICBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZzsKICAgICAgfSBlbHNlIGlmIChlbmNvZGluZyAhPT0gImJ1ZmZlciIgJiYgIUJ1ZmZlcjQuaXNFbmNvZGluZyhlbmNvZGluZykpIHsKICAgICAgICB0aHJvdyBuZXcgRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgY2IgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBjYiA9IG5vcDM7CiAgICAgIH0KICAgIH0KICAgIGlmIChjaHVuayA9PT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUygpOwogICAgfSBlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSkgewogICAgICBpZiAodHlwZW9mIGNodW5rID09PSAic3RyaW5nIikgewogICAgICAgIGlmIChzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSkgewogICAgICAgICAgY2h1bmsgPSBCdWZmZXI0LmZyb20oY2h1bmssIGVuY29kaW5nKTsKICAgICAgICAgIGVuY29kaW5nID0gImJ1ZmZlciI7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNodW5rIGluc3RhbmNlb2YgQnVmZmVyNCkgewogICAgICAgIGVuY29kaW5nID0gImJ1ZmZlciI7CiAgICAgIH0gZWxzZSBpZiAoaXNVaW50OEFycmF5KGNodW5rKSkgewogICAgICAgIGNodW5rID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcihjaHVuayk7CiAgICAgICAgZW5jb2RpbmcgPSAiYnVmZmVyIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoCiAgICAgICAgICAiY2h1bmsiLAogICAgICAgICAgWyJzdHJpbmciLCAiQnVmZmVyIiwgIlVpbnQ4QXJyYXkiXSwKICAgICAgICAgIGNodW5rCiAgICAgICAgKTsKICAgICAgfQogICAgfQogICAgbGV0IGVycjsKICAgIGlmIChzdGF0ZS5lbmRpbmcpIHsKICAgICAgZXJyID0gbmV3IEVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EKCk7CiAgICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkgewogICAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoIndyaXRlIik7CiAgICB9CiAgICBpZiAoZXJyKSB7CiAgICAgIG5leHRUaWNrMyhjYiwgZXJyKTsKICAgICAgZXJyb3JPckRlc3Ryb3kzKHN0cmVhbSwgZXJyLCB0cnVlKTsKICAgICAgcmV0dXJuIGVycjsKICAgIH0KICAgIHN0YXRlLnBlbmRpbmdjYisrOwogICAgcmV0dXJuIHdyaXRlT3JCdWZmZXIoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGVuY29kaW5nLCBjYik7CiAgfQogIFdyaXRhYmxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2IpIHsKICAgIHJldHVybiBfd3JpdGUodGhpcywgY2h1bmssIGVuY29kaW5nLCBjYikgPT09IHRydWU7CiAgfTsKICBXcml0YWJsZS5wcm90b3R5cGUuY29yayA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrKzsKICB9OwogIFdyaXRhYmxlLnByb3RvdHlwZS51bmNvcmsgPSBmdW5jdGlvbigpIHsKICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTsKICAgIGlmIChzdGF0ZS5jb3JrZWQpIHsKICAgICAgc3RhdGUuY29ya2VkLS07CiAgICAgIGlmICghc3RhdGUud3JpdGluZykgewogICAgICAgIGNsZWFyQnVmZmVyKHRoaXMsIHN0YXRlKTsKICAgICAgfQogICAgfQogIH07CiAgV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykgewogICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gInN0cmluZyIpIHsKICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZy50b0xvd2VyQ2FzZSgpOwogICAgfQogICAgaWYgKCFCdWZmZXI0LmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7CiAgICAgIHRocm93IG5ldyBFUlJfVU5LTk9XTl9FTkNPRElORyhlbmNvZGluZyk7CiAgICB9CiAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nOwogICAgcmV0dXJuIHRoaXM7CiAgfTsKICBmdW5jdGlvbiB3cml0ZU9yQnVmZmVyKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHsKICAgIGNvbnN0IGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoOwogICAgc3RhdGUubGVuZ3RoICs9IGxlbjsKICAgIGNvbnN0IHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcms7CiAgICBpZiAoIXJldCkgewogICAgICBzdGF0ZS5uZWVkRHJhaW4gPSB0cnVlOwogICAgfQogICAgaWYgKHN0YXRlLndyaXRpbmcgfHwgc3RhdGUuY29ya2VkIHx8IHN0YXRlLmVycm9yZWQgfHwgIXN0YXRlLmNvbnN0cnVjdGVkKSB7CiAgICAgIHN0YXRlLmJ1ZmZlcmVkLnB1c2goeyBjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrIH0pOwogICAgICBpZiAoc3RhdGUuYWxsQnVmZmVycyAmJiBlbmNvZGluZyAhPT0gImJ1ZmZlciIpIHsKICAgICAgICBzdGF0ZS5hbGxCdWZmZXJzID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLmFsbE5vb3AgJiYgY2FsbGJhY2sgIT09IG5vcDMpIHsKICAgICAgICBzdGF0ZS5hbGxOb29wID0gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHN0YXRlLndyaXRlbGVuID0gbGVuOwogICAgICBzdGF0ZS53cml0ZWNiID0gY2FsbGJhY2s7CiAgICAgIHN0YXRlLndyaXRpbmcgPSB0cnVlOwogICAgICBzdGF0ZS5zeW5jID0gdHJ1ZTsKICAgICAgc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpOwogICAgICBzdGF0ZS5zeW5jID0gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gcmV0ICYmICFzdGF0ZS5lcnJvcmVkICYmICFzdGF0ZS5kZXN0cm95ZWQ7CiAgfQogIGZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHsKICAgIHN0YXRlLndyaXRlbGVuID0gbGVuOwogICAgc3RhdGUud3JpdGVjYiA9IGNiOwogICAgc3RhdGUud3JpdGluZyA9IHRydWU7CiAgICBzdGF0ZS5zeW5jID0gdHJ1ZTsKICAgIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHsKICAgICAgc3RhdGUub253cml0ZShuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoIndyaXRlIikpOwogICAgfSBlbHNlIGlmICh3cml0ZXYpIHsKICAgICAgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpOwogICAgfSBlbHNlIHsKICAgICAgc3RyZWFtLl93cml0ZShjaHVuaywgZW5jb2RpbmcsIHN0YXRlLm9ud3JpdGUpOwogICAgfQogICAgc3RhdGUuc3luYyA9IGZhbHNlOwogIH0KICBmdW5jdGlvbiBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgZXIzLCBjYikgewogICAgLS1zdGF0ZS5wZW5kaW5nY2I7CiAgICBjYihlcjMpOwogICAgZXJyb3JCdWZmZXIoc3RhdGUpOwogICAgZXJyb3JPckRlc3Ryb3kzKHN0cmVhbSwgZXIzKTsKICB9CiAgZnVuY3Rpb24gb253cml0ZShzdHJlYW0sIGVyMykgewogICAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7CiAgICBjb25zdCBzeW5jID0gc3RhdGUuc3luYzsKICAgIGNvbnN0IGNiID0gc3RhdGUud3JpdGVjYjsKICAgIGlmICh0eXBlb2YgY2IgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgZXJyb3JPckRlc3Ryb3kzKHN0cmVhbSwgbmV3IEVSUl9NVUxUSVBMRV9DQUxMQkFDSygpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3RhdGUud3JpdGluZyA9IGZhbHNlOwogICAgc3RhdGUud3JpdGVjYiA9IG51bGw7CiAgICBzdGF0ZS5sZW5ndGggLT0gc3RhdGUud3JpdGVsZW47CiAgICBzdGF0ZS53cml0ZWxlbiA9IDA7CiAgICBpZiAoZXIzKSB7CiAgICAgIGVyMy5zdGFjazsKICAgICAgaWYgKCFzdGF0ZS5lcnJvcmVkKSB7CiAgICAgICAgc3RhdGUuZXJyb3JlZCA9IGVyMzsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0YXRlICYmICFzdHJlYW0uX3JlYWRhYmxlU3RhdGUuZXJyb3JlZCkgewogICAgICAgIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkID0gZXIzOwogICAgICB9CiAgICAgIGlmIChzeW5jKSB7CiAgICAgICAgbmV4dFRpY2szKG9ud3JpdGVFcnJvciwgc3RyZWFtLCBzdGF0ZSwgZXIzLCBjYik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb253cml0ZUVycm9yKHN0cmVhbSwgc3RhdGUsIGVyMywgY2IpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoc3RhdGUuYnVmZmVyZWQubGVuZ3RoID4gc3RhdGUuYnVmZmVyZWRJbmRleCkgewogICAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpOwogICAgICB9CiAgICAgIGlmIChzeW5jKSB7CiAgICAgICAgaWYgKHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbyAhPT0gbnVsbCAmJiBzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8uY2IgPT09IGNiKSB7CiAgICAgICAgICBzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8uY291bnQrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvID0geyBjb3VudDogMSwgY2IsIHN0cmVhbSwgc3RhdGUgfTsKICAgICAgICAgIG5leHRUaWNrMyhhZnRlcldyaXRlVGljaywgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWZ0ZXJXcml0ZShzdHJlYW0sIHN0YXRlLCAxLCBjYik7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gYWZ0ZXJXcml0ZVRpY2soeyBzdHJlYW0sIHN0YXRlLCBjb3VudCwgY2IgfSkgewogICAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvID0gbnVsbDsKICAgIHJldHVybiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGNvdW50LCBjYik7CiAgfQogIGZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgY291bnQsIGNiKSB7CiAgICBjb25zdCBuZWVkRHJhaW4gPSAhc3RhdGUuZW5kaW5nICYmICFzdHJlYW0uZGVzdHJveWVkICYmIHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5uZWVkRHJhaW47CiAgICBpZiAobmVlZERyYWluKSB7CiAgICAgIHN0YXRlLm5lZWREcmFpbiA9IGZhbHNlOwogICAgICBzdHJlYW0uZW1pdCgiZHJhaW4iKTsKICAgIH0KICAgIHdoaWxlIChjb3VudC0tID4gMCkgewogICAgICBzdGF0ZS5wZW5kaW5nY2ItLTsKICAgICAgY2IoKTsKICAgIH0KICAgIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHsKICAgICAgZXJyb3JCdWZmZXIoc3RhdGUpOwogICAgfQogICAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7CiAgfQogIGZ1bmN0aW9uIGVycm9yQnVmZmVyKHN0YXRlKSB7CiAgICBpZiAoc3RhdGUud3JpdGluZykgewogICAgICByZXR1cm47CiAgICB9CiAgICBmb3IgKGxldCBuOCA9IHN0YXRlLmJ1ZmZlcmVkSW5kZXg7IG44IDwgc3RhdGUuYnVmZmVyZWQubGVuZ3RoOyArK244KSB7CiAgICAgIGNvbnN0IHsgY2h1bmssIGNhbGxiYWNrIH0gPSBzdGF0ZS5idWZmZXJlZFtuOF07CiAgICAgIGNvbnN0IGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoOwogICAgICBzdGF0ZS5sZW5ndGggLT0gbGVuOwogICAgICBjYWxsYmFjayhuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoIndyaXRlIikpOwogICAgfQogICAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApOwogICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IG9uZmluaXNoQ2FsbGJhY2tzLmxlbmd0aDsgaTQrKykgewogICAgICBvbmZpbmlzaENhbGxiYWNrc1tpNF0obmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCJlbmQiKSk7CiAgICB9CiAgICByZXNldEJ1ZmZlcihzdGF0ZSk7CiAgfQogIGZ1bmN0aW9uIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdGF0ZS5jb3JrZWQgfHwgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyB8fCBzdGF0ZS5kZXN0cm95ZWQgfHwgIXN0YXRlLmNvbnN0cnVjdGVkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsgYnVmZmVyZWQsIGJ1ZmZlcmVkSW5kZXgsIG9iamVjdE1vZGUgfSA9IHN0YXRlOwogICAgY29uc3QgYnVmZmVyZWRMZW5ndGggPSBidWZmZXJlZC5sZW5ndGggLSBidWZmZXJlZEluZGV4OwogICAgaWYgKCFidWZmZXJlZExlbmd0aCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBsZXQgaTQgPSBidWZmZXJlZEluZGV4OwogICAgc3RhdGUuYnVmZmVyUHJvY2Vzc2luZyA9IHRydWU7CiAgICBpZiAoYnVmZmVyZWRMZW5ndGggPiAxICYmIHN0cmVhbS5fd3JpdGV2KSB7CiAgICAgIHN0YXRlLnBlbmRpbmdjYiAtPSBidWZmZXJlZExlbmd0aCAtIDE7CiAgICAgIGNvbnN0IGNhbGxiYWNrID0gc3RhdGUuYWxsTm9vcCA/IG5vcDMgOiAoZXJyKSA9PiB7CiAgICAgICAgZm9yIChsZXQgbjggPSBpNDsgbjggPCBidWZmZXJlZC5sZW5ndGg7ICsrbjgpIHsKICAgICAgICAgIGJ1ZmZlcmVkW244XS5jYWxsYmFjayhlcnIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgY29uc3QgY2h1bmtzID0gc3RhdGUuYWxsTm9vcCAmJiBpNCA9PT0gMCA/IGJ1ZmZlcmVkIDogYnVmZmVyZWQuc2xpY2UoaTQpOwogICAgICBjaHVua3MuYWxsQnVmZmVycyA9IHN0YXRlLmFsbEJ1ZmZlcnM7CiAgICAgIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgdHJ1ZSwgc3RhdGUubGVuZ3RoLCBjaHVua3MsICIiLCBjYWxsYmFjayk7CiAgICAgIHJlc2V0QnVmZmVyKHN0YXRlKTsKICAgIH0gZWxzZSB7CiAgICAgIGRvIHsKICAgICAgICBjb25zdCB7IGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2sgfSA9IGJ1ZmZlcmVkW2k0XTsKICAgICAgICBidWZmZXJlZFtpNCsrXSA9IG51bGw7CiAgICAgICAgY29uc3QgbGVuID0gb2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7CiAgICAgICAgZG9Xcml0ZShzdHJlYW0sIHN0YXRlLCBmYWxzZSwgbGVuLCBjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKTsKICAgICAgfSB3aGlsZSAoaTQgPCBidWZmZXJlZC5sZW5ndGggJiYgIXN0YXRlLndyaXRpbmcpOwogICAgICBpZiAoaTQgPT09IGJ1ZmZlcmVkLmxlbmd0aCkgewogICAgICAgIHJlc2V0QnVmZmVyKHN0YXRlKTsKICAgICAgfSBlbHNlIGlmIChpNCA+IDI1NikgewogICAgICAgIGJ1ZmZlcmVkLnNwbGljZSgwLCBpNCk7CiAgICAgICAgc3RhdGUuYnVmZmVyZWRJbmRleCA9IDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGUuYnVmZmVyZWRJbmRleCA9IGk0OwogICAgICB9CiAgICB9CiAgICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7CiAgfQogIFdyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNiKSB7CiAgICBpZiAodGhpcy5fd3JpdGV2KSB7CiAgICAgIHRoaXMuX3dyaXRldihbeyBjaHVuaywgZW5jb2RpbmcgfV0sIGNiKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCgiX3dyaXRlKCkiKTsKICAgIH0KICB9OwogIFdyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGV2ID0gbnVsbDsKICBXcml0YWJsZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYikgewogICAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlOwogICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gImZ1bmN0aW9uIikgewogICAgICBjYiA9IGNodW5rOwogICAgICBjaHVuayA9IG51bGw7CiAgICAgIGVuY29kaW5nID0gbnVsbDsKICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGNiID0gZW5jb2Rpbmc7CiAgICAgIGVuY29kaW5nID0gbnVsbDsKICAgIH0KICAgIGxldCBlcnI7CiAgICBpZiAoY2h1bmsgIT09IG51bGwgJiYgY2h1bmsgIT09IHZvaWQgMCkgewogICAgICBjb25zdCByZXQgPSBfd3JpdGUodGhpcywgY2h1bmssIGVuY29kaW5nKTsKICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEVycm9yKSB7CiAgICAgICAgZXJyID0gcmV0OwogICAgICB9CiAgICB9CiAgICBpZiAoc3RhdGUuY29ya2VkKSB7CiAgICAgIHN0YXRlLmNvcmtlZCA9IDE7CiAgICAgIHRoaXMudW5jb3JrKCk7CiAgICB9CiAgICBpZiAoZXJyKSB7CiAgICB9IGVsc2UgaWYgKCFzdGF0ZS5lcnJvcmVkICYmICFzdGF0ZS5lbmRpbmcpIHsKICAgICAgc3RhdGUuZW5kaW5nID0gdHJ1ZTsKICAgICAgZmluaXNoTWF5YmUodGhpcywgc3RhdGUsIHRydWUpOwogICAgICBzdGF0ZS5lbmRlZCA9IHRydWU7CiAgICB9IGVsc2UgaWYgKHN0YXRlLmZpbmlzaGVkKSB7CiAgICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRUQoImVuZCIpOwogICAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHsKICAgICAgZXJyID0gbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCJlbmQiKTsKICAgIH0KICAgIGlmICh0eXBlb2YgY2IgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgaWYgKGVyciB8fCBzdGF0ZS5maW5pc2hlZCkgewogICAgICAgIG5leHRUaWNrMyhjYiwgZXJyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0ZVtrT25GaW5pc2hlZF0ucHVzaChjYik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzOwogIH07CiAgZnVuY3Rpb24gbmVlZEZpbmlzaChzdGF0ZSkgewogICAgcmV0dXJuIHN0YXRlLmVuZGluZyAmJiBzdGF0ZS5jb25zdHJ1Y3RlZCAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLmVycm9yZWQgJiYgc3RhdGUuYnVmZmVyZWQubGVuZ3RoID09PSAwICYmICFzdGF0ZS5maW5pc2hlZCAmJiAhc3RhdGUud3JpdGluZyAmJiAhc3RhdGUuZXJyb3JFbWl0dGVkICYmICFzdGF0ZS5jbG9zZUVtaXR0ZWQ7CiAgfQogIGZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7CiAgICBsZXQgY2FsbGVkID0gZmFsc2U7CiAgICBmdW5jdGlvbiBvbkZpbmlzaChlcnIpIHsKICAgICAgaWYgKGNhbGxlZCkgewogICAgICAgIGVycm9yT3JEZXN0cm95MyhzdHJlYW0sIGVyciA/PyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNhbGxlZCA9IHRydWU7CiAgICAgIHN0YXRlLnBlbmRpbmdjYi0tOwogICAgICBpZiAoZXJyKSB7CiAgICAgICAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApOwogICAgICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGk0KyspIHsKICAgICAgICAgIG9uZmluaXNoQ2FsbGJhY2tzW2k0XShlcnIpOwogICAgICAgIH0KICAgICAgICBlcnJvck9yRGVzdHJveTMoc3RyZWFtLCBlcnIsIHN0YXRlLnN5bmMpOwogICAgICB9IGVsc2UgaWYgKG5lZWRGaW5pc2goc3RhdGUpKSB7CiAgICAgICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlOwogICAgICAgIHN0cmVhbS5lbWl0KCJwcmVmaW5pc2giKTsKICAgICAgICBzdGF0ZS5wZW5kaW5nY2IrKzsKICAgICAgICBuZXh0VGljazMoZmluaXNoLCBzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgfQogICAgc3RhdGUuc3luYyA9IHRydWU7CiAgICBzdGF0ZS5wZW5kaW5nY2IrKzsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmVhbS5fZmluYWwob25GaW5pc2gpOwogICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgICBjb25zdCB0aGVuID0gcmVzdWx0LnRoZW47CiAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aGVuLmNhbGwoCiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgbmV4dFRpY2szKG9uRmluaXNoLCBudWxsKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgbmV4dFRpY2szKG9uRmluaXNoLCBlcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIG9uRmluaXNoKHN0cmVhbSwgc3RhdGUsIGVycik7CiAgICB9CiAgICBzdGF0ZS5zeW5jID0gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoIXN0YXRlLnByZWZpbmlzaGVkICYmICFzdGF0ZS5maW5hbENhbGxlZCkgewogICAgICBpZiAodHlwZW9mIHN0cmVhbS5fZmluYWwgPT09ICJmdW5jdGlvbiIgJiYgIXN0YXRlLmRlc3Ryb3llZCkgewogICAgICAgIHN0YXRlLmZpbmFsQ2FsbGVkID0gdHJ1ZTsKICAgICAgICBjYWxsRmluYWwoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlOwogICAgICAgIHN0cmVhbS5lbWl0KCJwcmVmaW5pc2giKTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlLCBzeW5jKSB7CiAgICBpZiAobmVlZEZpbmlzaChzdGF0ZSkpIHsKICAgICAgcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwICYmIG5lZWRGaW5pc2goc3RhdGUpKSB7CiAgICAgICAgc3RhdGUucGVuZGluZ2NiKys7CiAgICAgICAgaWYgKHN5bmMpIHsKICAgICAgICAgIG5leHRUaWNrMyhmaW5pc2gsIHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmaW5pc2goc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIGZpbmlzaChzdHJlYW0sIHN0YXRlKSB7CiAgICBzdGF0ZS5wZW5kaW5nY2ItLTsKICAgIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZTsKICAgIGNvbnN0IG9uZmluaXNoQ2FsbGJhY2tzID0gc3RhdGVba09uRmluaXNoZWRdLnNwbGljZSgwKTsKICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBvbmZpbmlzaENhbGxiYWNrcy5sZW5ndGg7IGk0KyspIHsKICAgICAgb25maW5pc2hDYWxsYmFja3NbaTRdKCk7CiAgICB9CiAgICBzdHJlYW0uZW1pdCgiZmluaXNoIik7CiAgICBpZiAoc3RhdGUuYXV0b0Rlc3Ryb3kpIHsKICAgICAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlOwogICAgICBjb25zdCBhdXRvRGVzdHJveSA9ICFyU3RhdGUgfHwgclN0YXRlLmF1dG9EZXN0cm95ICYmIChyU3RhdGUuZW5kRW1pdHRlZCB8fCByU3RhdGUucmVhZGFibGUgPT09IGZhbHNlKTsKICAgICAgaWYgKGF1dG9EZXN0cm95KSB7CiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogIH0KICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXcml0YWJsZS5wcm90b3R5cGUsIHsKICAgIGRlc3Ryb3llZDogewogICAgICBnZXQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA6IGZhbHNlOwogICAgICB9LAogICAgICBzZXQodmFsdWUpIHsKICAgICAgICBpZiAodGhpcy5fd3JpdGFibGVTdGF0ZSkgewogICAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICB3cml0YWJsZTogewogICAgICBnZXQoKSB7CiAgICAgICAgY29uc3QgdzIxID0gdGhpcy5fd3JpdGFibGVTdGF0ZTsKICAgICAgICByZXR1cm4gISF3MjEgJiYgdzIxLndyaXRhYmxlICE9PSBmYWxzZSAmJiAhdzIxLmRlc3Ryb3llZCAmJiAhdzIxLmVycm9yZWQgJiYgIXcyMS5lbmRpbmcgJiYgIXcyMS5lbmRlZDsKICAgICAgfSwKICAgICAgc2V0KHZhbCkgewogICAgICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7CiAgICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlID0gISF2YWw7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgd3JpdGFibGVGaW5pc2hlZDogewogICAgICBnZXQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkIDogZmFsc2U7CiAgICAgIH0KICAgIH0sCiAgICB3cml0YWJsZU9iamVjdE1vZGU6IHsKICAgICAgZ2V0KCkgewogICAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5vYmplY3RNb2RlIDogZmFsc2U7CiAgICAgIH0KICAgIH0sCiAgICB3cml0YWJsZUJ1ZmZlcjogewogICAgICBnZXQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKTsKICAgICAgfQogICAgfSwKICAgIHdyaXRhYmxlRW5kZWQ6IHsKICAgICAgZ2V0KCkgewogICAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgOiBmYWxzZTsKICAgICAgfQogICAgfSwKICAgIHdyaXRhYmxlTmVlZERyYWluOiB7CiAgICAgIGdldCgpIHsKICAgICAgICBjb25zdCB3U3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlOwogICAgICAgIGlmICghd1N0YXRlKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiAhd1N0YXRlLmRlc3Ryb3llZCAmJiAhd1N0YXRlLmVuZGluZyAmJiB3U3RhdGUubmVlZERyYWluOwogICAgICB9CiAgICB9LAogICAgd3JpdGFibGVIaWdoV2F0ZXJNYXJrOiB7CiAgICAgIGdldCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7CiAgICAgIH0KICAgIH0sCiAgICB3cml0YWJsZUNvcmtlZDogewogICAgICBnZXQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCA6IDA7CiAgICAgIH0KICAgIH0sCiAgICB3cml0YWJsZUxlbmd0aDogewogICAgICBnZXQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGg7CiAgICAgIH0KICAgIH0KICB9KTsKICB2YXIgZGVzdHJveTMgPSBkZXN0cm95X2RlZmF1bHQuZGVzdHJveTsKICBXcml0YWJsZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKGVyciwgY2IpIHsKICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fd3JpdGFibGVTdGF0ZTsKICAgIGlmICghc3RhdGUuZGVzdHJveWVkICYmIChzdGF0ZS5idWZmZXJlZEluZGV4IDwgc3RhdGUuYnVmZmVyZWQubGVuZ3RoIHx8IHN0YXRlW2tPbkZpbmlzaGVkXS5sZW5ndGgpKSB7CiAgICAgIG5leHRUaWNrMyhlcnJvckJ1ZmZlciwgc3RhdGUpOwogICAgfQogICAgZGVzdHJveTMuY2FsbCh0aGlzLCBlcnIsIGNiKTsKICAgIHJldHVybiB0aGlzOwogIH07CiAgV3JpdGFibGUucHJvdG90eXBlLl91bmRlc3Ryb3kgPSBkZXN0cm95X2RlZmF1bHQudW5kZXN0cm95OwogIFdyaXRhYmxlLnByb3RvdHlwZS5fZGVzdHJveSA9IGZ1bmN0aW9uKGVyciwgY2IpIHsKICAgIGNiKGVycik7CiAgfTsKICBXcml0YWJsZS5wcm90b3R5cGVbZXZlbnRzX2RlZmF1bHQuY2FwdHVyZVJlamVjdGlvblN5bWJvbF0gPSBmdW5jdGlvbihlcnIpIHsKICAgIHRoaXMuZGVzdHJveShlcnIpOwogIH07CiAgV3JpdGFibGUuV3JpdGFibGVTdGF0ZSA9IFdyaXRhYmxlU3RhdGU7CiAgZnVuY3Rpb24gaXNXcml0YWJsZVN0cmVhbShvYmplY3QpIHsKICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBXcml0YWJsZVN0cmVhbTsKICB9CiAgdmFyIGZyb21XZWIyID0gV3JpdGFibGUuZnJvbVdlYiA9IGZ1bmN0aW9uKHdyaXRhYmxlU3RyZWFtLCBvcHRpb25zID0ge30pIHsKICAgIGlmICghaXNXcml0YWJsZVN0cmVhbSh3cml0YWJsZVN0cmVhbSkpIHsKICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKAogICAgICAgICJ3cml0YWJsZVN0cmVhbSIsCiAgICAgICAgIldyaXRhYmxlU3RyZWFtIiwKICAgICAgICB3cml0YWJsZVN0cmVhbQogICAgICApOwogICAgfQogICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgIm9wdGlvbnMiKTsKICAgIGNvbnN0IHsKICAgICAgaGlnaFdhdGVyTWFyaywKICAgICAgZGVjb2RlU3RyaW5ncyA9IHRydWUsCiAgICAgIG9iamVjdE1vZGUgPSBmYWxzZSwKICAgICAgc2lnbmFsCiAgICB9ID0gb3B0aW9uczsKICAgIHZhbGlkYXRlQm9vbGVhbihvYmplY3RNb2RlLCAib3B0aW9ucy5vYmplY3RNb2RlIik7CiAgICB2YWxpZGF0ZUJvb2xlYW4oZGVjb2RlU3RyaW5ncywgIm9wdGlvbnMuZGVjb2RlU3RyaW5ncyIpOwogICAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGVTdHJlYW0uZ2V0V3JpdGVyKCk7CiAgICBsZXQgY2xvc2VkID0gZmFsc2U7CiAgICBjb25zdCB3cml0YWJsZSA9IG5ldyBXcml0YWJsZSh7CiAgICAgIGhpZ2hXYXRlck1hcmssCiAgICAgIG9iamVjdE1vZGUsCiAgICAgIGRlY29kZVN0cmluZ3MsCiAgICAgIHNpZ25hbCwKICAgICAgd3JpdGV2KGNodW5rcywgY2FsbGJhY2spIHsKICAgICAgICBmdW5jdGlvbiBkb25lKGVycm9yKSB7CiAgICAgICAgICBlcnJvciA9IGVycm9yLmZpbHRlcigoZTUpID0+IGU1KTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yLmxlbmd0aCA9PT0gMCA/IHZvaWQgMCA6IGVycm9yKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yMikgewogICAgICAgICAgICBuZXh0VGljazMoKCkgPT4gZGVzdHJveTMuY2FsbCh3cml0YWJsZSwgZXJyb3IyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHdyaXRlci5yZWFkeS50aGVuKAogICAgICAgICAgKCkgPT4gUHJvbWlzZS5BbGwoCiAgICAgICAgICAgIGNodW5rcy5tYXAoKGRhdGEpID0+IHdyaXRlci53cml0ZShkYXRhLmNodW5rKSkKICAgICAgICAgICkudGhlbihkb25lLCBkb25lKSwKICAgICAgICAgIGRvbmUKICAgICAgICApOwogICAgICB9LAogICAgICB3cml0ZShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7CiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gInN0cmluZyIgJiYgZGVjb2RlU3RyaW5ncyAmJiAhb2JqZWN0TW9kZSkgewogICAgICAgICAgY2h1bmsgPSBCdWZmZXI0LmZyb20oY2h1bmssIGVuY29kaW5nKTsKICAgICAgICAgIGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoCiAgICAgICAgICAgIGNodW5rLmJ1ZmZlciwKICAgICAgICAgICAgY2h1bmsuYnl0ZU9mZnNldCwKICAgICAgICAgICAgY2h1bmsuYnl0ZUxlbmd0aAogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnJvcikgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IyKSB7CiAgICAgICAgICAgIGRlc3Ryb3kzKHRoaXMsIGR1cGxleCwgZXJyb3IyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd3JpdGVyLnJlYWR5LnRoZW4oCiAgICAgICAgICAoKSA9PiB3cml0ZXIud3JpdGUoY2h1bmspLnRoZW4oZG9uZSwgZG9uZSksCiAgICAgICAgICBkb25lCiAgICAgICAgKTsKICAgICAgfSwKICAgICAgZGVzdHJveShlcnJvciwgY2FsbGJhY2spIHsKICAgICAgICBmdW5jdGlvbiBkb25lKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IyKSB7CiAgICAgICAgICAgIG5leHRUaWNrMygoKSA9PiB7CiAgICAgICAgICAgICAgdGhyb3cgZXJyb3IyOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFjbG9zZWQpIHsKICAgICAgICAgIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICAgICAgICAgIHdyaXRlci5hYm9ydChlcnJvcikudGhlbihkb25lLCBkb25lKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpLnRoZW4oZG9uZSwgZG9uZSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGRvbmUoKTsKICAgICAgfSwKICAgICAgZmluYWwoY2FsbGJhY2spIHsKICAgICAgICBmdW5jdGlvbiBkb25lKGVycm9yKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcjIpIHsKICAgICAgICAgICAgbmV4dFRpY2szKCgpID0+IGRlc3Ryb3kzLmNhbGwod3JpdGFibGUsIGVycm9yMikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWNsb3NlZCkgewogICAgICAgICAgd3JpdGVyLmNsb3NlKCkudGhlbihkb25lLCBkb25lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgd3JpdGVyLmNsb3NlZC50aGVuKAogICAgICAoKSA9PiB7CiAgICAgICAgY2xvc2VkID0gdHJ1ZTsKICAgICAgICBpZiAoIWlzV3JpdGFibGVFbmRlZCh3cml0YWJsZSkpIHsKICAgICAgICAgIGRlc3Ryb3kzLmNhbGwod3JpdGFibGUsIG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIChlcnJvcikgPT4gewogICAgICAgIGNsb3NlZCA9IHRydWU7CiAgICAgICAgZGVzdHJveTMuY2FsbCh3cml0YWJsZSwgZXJyb3IpOwogICAgICB9CiAgICApOwogICAgcmV0dXJuIHdyaXRhYmxlOwogIH07CiAgV3JpdGFibGUuV3JpdGFibGUgPSBXcml0YWJsZTsKICB2YXIgd3JpdGFibGVfZGVmYXVsdCA9IFdyaXRhYmxlOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvc3RyZWFtcy9kdXBsZXgubWpzCiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKER1cGxleC5wcm90b3R5cGUsIHJlYWRhYmxlX2RlZmF1bHQucHJvdG90eXBlKTsKICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRHVwbGV4LCByZWFkYWJsZV9kZWZhdWx0KTsKICB7CiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBPYmplY3Qua2V5cyh3cml0YWJsZV9kZWZhdWx0LnByb3RvdHlwZSkpIHsKICAgICAgaWYgKCFEdXBsZXgucHJvdG90eXBlW21ldGhvZF0pIHsKICAgICAgICBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSB3cml0YWJsZV9kZWZhdWx0LnByb3RvdHlwZVttZXRob2RdOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIER1cGxleChvcHRpb25zKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRHVwbGV4KSkgewogICAgICByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTsKICAgIH0KICAgIHJlYWRhYmxlX2RlZmF1bHQuY2FsbCh0aGlzLCBvcHRpb25zKTsKICAgIHdyaXRhYmxlX2RlZmF1bHQuY2FsbCh0aGlzLCBvcHRpb25zKTsKICAgIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWU7CiAgICBpZiAob3B0aW9ucykgewogICAgICBpZiAob3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHsKICAgICAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbnMud3JpdGFibGUgPT09IGZhbHNlKSB7CiAgICAgICAgdGhpcy53cml0YWJsZSA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zLmFsbG93SGFsZk9wZW4gPT09IGZhbHNlKSB7CiAgICAgICAgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICB9CiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHVwbGV4LnByb3RvdHlwZSwgewogICAgd3JpdGFibGU6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod3JpdGFibGVfZGVmYXVsdC5wcm90b3R5cGUsICJ3cml0YWJsZSIpLAogICAgd3JpdGFibGVIaWdoV2F0ZXJNYXJrOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgICB3cml0YWJsZV9kZWZhdWx0LnByb3RvdHlwZSwKICAgICAgIndyaXRhYmxlSGlnaFdhdGVyTWFyayIKICAgICksCiAgICB3cml0YWJsZU9iamVjdE1vZGU6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgIHdyaXRhYmxlX2RlZmF1bHQucHJvdG90eXBlLAogICAgICAid3JpdGFibGVPYmplY3RNb2RlIgogICAgKSwKICAgIHdyaXRhYmxlQnVmZmVyOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgICB3cml0YWJsZV9kZWZhdWx0LnByb3RvdHlwZSwKICAgICAgIndyaXRhYmxlQnVmZmVyIgogICAgKSwKICAgIHdyaXRhYmxlTGVuZ3RoOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgICB3cml0YWJsZV9kZWZhdWx0LnByb3RvdHlwZSwKICAgICAgIndyaXRhYmxlTGVuZ3RoIgogICAgKSwKICAgIHdyaXRhYmxlRmluaXNoZWQ6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgIHdyaXRhYmxlX2RlZmF1bHQucHJvdG90eXBlLAogICAgICAid3JpdGFibGVGaW5pc2hlZCIKICAgICksCiAgICB3cml0YWJsZUNvcmtlZDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICAgd3JpdGFibGVfZGVmYXVsdC5wcm90b3R5cGUsCiAgICAgICJ3cml0YWJsZUNvcmtlZCIKICAgICksCiAgICB3cml0YWJsZUVuZGVkOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAogICAgICB3cml0YWJsZV9kZWZhdWx0LnByb3RvdHlwZSwKICAgICAgIndyaXRhYmxlRW5kZWQiCiAgICApLAogICAgd3JpdGFibGVOZWVkRHJhaW46IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgIHdyaXRhYmxlX2RlZmF1bHQucHJvdG90eXBlLAogICAgICAid3JpdGFibGVOZWVkRHJhaW4iCiAgICApLAogICAgZGVzdHJveWVkOiB7CiAgICAgIGdldCgpIHsKICAgICAgICBpZiAodGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdm9pZCAwIHx8IHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7CiAgICAgIH0sCiAgICAgIHNldCh2YWx1ZSkgewogICAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUpIHsKICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkID0gdmFsdWU7CiAgICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0pOwogIGZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0yKG9iamVjdCkgewogICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtOwogIH0KICBmdW5jdGlvbiBpc1dyaXRhYmxlU3RyZWFtMihvYmplY3QpIHsKICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBXcml0YWJsZVN0cmVhbTsKICB9CiAgdmFyIGZyb21XZWIzID0gRHVwbGV4LmZyb21XZWIgPSBmdW5jdGlvbihwYWlyLCBvcHRpb25zKSB7CiAgICB2YWxpZGF0ZU9iamVjdChwYWlyLCAicGFpciIpOwogICAgY29uc3QgewogICAgICByZWFkYWJsZTogcmVhZGFibGVTdHJlYW0sCiAgICAgIHdyaXRhYmxlOiB3cml0YWJsZVN0cmVhbQogICAgfSA9IHBhaXI7CiAgICBpZiAoIWlzUmVhZGFibGVTdHJlYW0yKHJlYWRhYmxlU3RyZWFtKSkgewogICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoCiAgICAgICAgInBhaXIucmVhZGFibGUiLAogICAgICAgICJSZWFkYWJsZVN0cmVhbSIsCiAgICAgICAgcmVhZGFibGVTdHJlYW0KICAgICAgKTsKICAgIH0KICAgIGlmICghaXNXcml0YWJsZVN0cmVhbTIod3JpdGFibGVTdHJlYW0pKSB7CiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgKICAgICAgICAicGFpci53cml0YWJsZSIsCiAgICAgICAgIldyaXRhYmxlU3RyZWFtIiwKICAgICAgICB3cml0YWJsZVN0cmVhbQogICAgICApOwogICAgfQogICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgIm9wdGlvbnMiKTsKICAgIGNvbnN0IHsKICAgICAgYWxsb3dIYWxmT3BlbiA9IGZhbHNlLAogICAgICBvYmplY3RNb2RlID0gZmFsc2UsCiAgICAgIGVuY29kaW5nLAogICAgICBkZWNvZGVTdHJpbmdzID0gdHJ1ZSwKICAgICAgaGlnaFdhdGVyTWFyaywKICAgICAgc2lnbmFsCiAgICB9ID0gb3B0aW9uczsKICAgIHZhbGlkYXRlQm9vbGVhbihvYmplY3RNb2RlLCAib3B0aW9ucy5vYmplY3RNb2RlIik7CiAgICBpZiAoZW5jb2RpbmcgIT09IHZvaWQgMCAmJiAhQnVmZmVyNC5pc0VuY29kaW5nKGVuY29kaW5nKSkgewogICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKGVuY29kaW5nLCAib3B0aW9ucy5lbmNvZGluZyIpOwogICAgfQogICAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGVTdHJlYW0uZ2V0V3JpdGVyKCk7CiAgICBjb25zdCByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTsKICAgIGxldCB3cml0YWJsZUNsb3NlZCA9IGZhbHNlOwogICAgbGV0IHJlYWRhYmxlQ2xvc2VkID0gZmFsc2U7CiAgICBjb25zdCBkdXBsZXgyID0gbmV3IER1cGxleCh7CiAgICAgIGFsbG93SGFsZk9wZW4sCiAgICAgIGhpZ2hXYXRlck1hcmssCiAgICAgIG9iamVjdE1vZGUsCiAgICAgIGVuY29kaW5nLAogICAgICBkZWNvZGVTdHJpbmdzLAogICAgICBzaWduYWwsCiAgICAgIHdyaXRldihjaHVua3MsIGNhbGxiYWNrKSB7CiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnJvcikgewogICAgICAgICAgZXJyb3IgPSBlcnJvci5maWx0ZXIoKGU1KSA9PiBlNSk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjYWxsYmFjayhlcnJvci5sZW5ndGggPT09IDAgPyB2b2lkIDAgOiBlcnJvcik7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcjIpIHsKICAgICAgICAgICAgbmV4dFRpY2szKCgpID0+IGRlc3Ryb3koZHVwbGV4MiwgZXJyb3IyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHdyaXRlci5yZWFkeS50aGVuKAogICAgICAgICAgKCkgPT4gUHJvbWlzZS5BbGwoCiAgICAgICAgICAgIGNodW5rcy5tYXAoKGRhdGEpID0+IHdyaXRlci53cml0ZShkYXRhLmNodW5rKSkKICAgICAgICAgICkudGhlbihkb25lLCBkb25lKSwKICAgICAgICAgIGRvbmUKICAgICAgICApOwogICAgICB9LAogICAgICB3cml0ZShjaHVuaywgZW5jb2RpbmcyLCBjYWxsYmFjaykgewogICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICJzdHJpbmciICYmIGRlY29kZVN0cmluZ3MgJiYgIW9iamVjdE1vZGUpIHsKICAgICAgICAgIGNodW5rID0gQnVmZmVyNC5mcm9tKGNodW5rLCBlbmNvZGluZzIpOwogICAgICAgICAgY2h1bmsgPSBuZXcgVWludDhBcnJheSgKICAgICAgICAgICAgY2h1bmsuYnVmZmVyLAogICAgICAgICAgICBjaHVuay5ieXRlT2Zmc2V0LAogICAgICAgICAgICBjaHVuay5ieXRlTGVuZ3RoCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBkb25lKGVycm9yKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcjIpIHsKICAgICAgICAgICAgZGVzdHJveShkdXBsZXgyLCBlcnJvcjIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3cml0ZXIucmVhZHkudGhlbigKICAgICAgICAgICgpID0+IHdyaXRlci53cml0ZShjaHVuaykudGhlbihkb25lLCBkb25lKSwKICAgICAgICAgIGRvbmUKICAgICAgICApOwogICAgICB9LAogICAgICBmaW5hbChjYWxsYmFjaykgewogICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyb3IpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yMikgewogICAgICAgICAgICBuZXh0VGljazMoKCkgPT4gZGVzdHJveShkdXBsZXgyLCBlcnJvcjIpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCF3cml0YWJsZUNsb3NlZCkgewogICAgICAgICAgd3JpdGVyLmNsb3NlKCkudGhlbihkb25lLCBkb25lKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHJlYWQoKSB7CiAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKAogICAgICAgICAgKGNodW5rKSA9PiB7CiAgICAgICAgICAgIGlmIChjaHVuay5kb25lKSB7CiAgICAgICAgICAgICAgZHVwbGV4Mi5wdXNoKG51bGwpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGR1cGxleDIucHVzaChjaHVuay52YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAoZXJyb3IpID0+IGRlc3Ryb3koZHVwbGV4MiwgZXJyb3IpCiAgICAgICAgKTsKICAgICAgfSwKICAgICAgZGVzdHJveShlcnJvciwgY2FsbGJhY2spIHsKICAgICAgICBmdW5jdGlvbiBkb25lKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IyKSB7CiAgICAgICAgICAgIG5leHRUaWNrMygoKSA9PiB7CiAgICAgICAgICAgICAgdGhyb3cgZXJyb3IyOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXN5bmMgZnVuY3Rpb24gY2xvc2VXcml0ZXIoKSB7CiAgICAgICAgICBpZiAoIXdyaXRhYmxlQ2xvc2VkKSB7CiAgICAgICAgICAgIGF3YWl0IHdyaXRlci5hYm9ydChlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNsb3NlUmVhZGVyKCkgewogICAgICAgICAgaWYgKCFyZWFkYWJsZUNsb3NlZCkgewogICAgICAgICAgICBhd2FpdCByZWFkZXIuY2FuY2VsKGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCF3cml0YWJsZUNsb3NlZCB8fCAhcmVhZGFibGVDbG9zZWQpIHsKICAgICAgICAgIFByb21pc2UuQWxsKFsKICAgICAgICAgICAgY2xvc2VXcml0ZXIoKSwKICAgICAgICAgICAgY2xvc2VSZWFkZXIoKQogICAgICAgICAgXSkudGhlbihkb25lLCBkb25lKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZG9uZSgpOwogICAgICB9CiAgICB9KTsKICAgIHdyaXRlci5jbG9zZWQudGhlbigKICAgICAgKCkgPT4gewogICAgICAgIHdyaXRhYmxlQ2xvc2VkID0gdHJ1ZTsKICAgICAgICBpZiAoIWlzV3JpdGFibGVFbmRlZChkdXBsZXgyKSkgewogICAgICAgICAgZGVzdHJveShkdXBsZXgyLCBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAoZXJyb3IpID0+IHsKICAgICAgICB3cml0YWJsZUNsb3NlZCA9IHRydWU7CiAgICAgICAgcmVhZGFibGVDbG9zZWQgPSB0cnVlOwogICAgICAgIGRlc3Ryb3koZHVwbGV4MiwgZXJyb3IpOwogICAgICB9CiAgICApOwogICAgcmVhZGVyLmNsb3NlZC50aGVuKAogICAgICAoKSA9PiB7CiAgICAgICAgcmVhZGFibGVDbG9zZWQgPSB0cnVlOwogICAgICAgIGlmICghaXNSZWFkYWJsZUVuZGVkMihkdXBsZXgyKSkgewogICAgICAgICAgZHVwbGV4Mi5wdXNoKG51bGwpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgKGVycm9yKSA9PiB7CiAgICAgICAgd3JpdGFibGVDbG9zZWQgPSB0cnVlOwogICAgICAgIHJlYWRhYmxlQ2xvc2VkID0gdHJ1ZTsKICAgICAgICBkZXN0cm95KGR1cGxleDIsIGVycm9yKTsKICAgICAgfQogICAgKTsKICAgIHJldHVybiBkdXBsZXgyOwogIH07CiAgdmFyIER1cGxleGlmeSA9IGNsYXNzIGV4dGVuZHMgRHVwbGV4IHsKICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsKICAgICAgc3VwZXIob3B0aW9ucyk7CiAgICAgIGlmIChvcHRpb25zPy5yZWFkYWJsZSA9PT0gZmFsc2UpIHsKICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gZmFsc2U7CiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IHRydWU7CiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAob3B0aW9ucz8ud3JpdGFibGUgPT09IGZhbHNlKSB7CiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9IGZhbHNlOwogICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nID0gdHJ1ZTsKICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH07CiAgZnVuY3Rpb24gZHVwbGV4aWZ5KGJvZHksIG5hbWUpIHsKICAgIGlmIChpc0R1cGxleE5vZGVTdHJlYW0oYm9keSkpIHsKICAgICAgcmV0dXJuIGJvZHk7CiAgICB9CiAgICBpZiAoaXNSZWFkYWJsZU5vZGVTdHJlYW0oYm9keSkpIHsKICAgICAgcmV0dXJuIF9kdXBsZXhpZnkoeyByZWFkYWJsZTogYm9keSB9KTsKICAgIH0KICAgIGlmIChpc1dyaXRhYmxlTm9kZVN0cmVhbShib2R5KSkgewogICAgICByZXR1cm4gX2R1cGxleGlmeSh7IHdyaXRhYmxlOiBib2R5IH0pOwogICAgfQogICAgaWYgKGlzTm9kZVN0cmVhbShib2R5KSkgewogICAgICByZXR1cm4gX2R1cGxleGlmeSh7IHdyaXRhYmxlOiBmYWxzZSwgcmVhZGFibGU6IGZhbHNlIH0pOwogICAgfQogICAgaWYgKHR5cGVvZiBib2R5ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGNvbnN0IHsgdmFsdWUsIHdyaXRlOiB3cml0ZTIsIGZpbmFsOiBmaW5hbDIsIGRlc3Ryb3k6IGRlc3Ryb3k0IH0gPSBmcm9tQXN5bmNHZW4oYm9keSk7CiAgICAgIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkgewogICAgICAgIHJldHVybiBmcm9tX2RlZmF1bHQoRHVwbGV4aWZ5LCB2YWx1ZSwgewogICAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSwKICAgICAgICAgIHdyaXRlOiB3cml0ZTIsCiAgICAgICAgICBmaW5hbDogZmluYWwyLAogICAgICAgICAgZGVzdHJveTogZGVzdHJveTQKICAgICAgICB9KTsKICAgICAgfQogICAgICBjb25zdCB0aGVuMiA9IHZhbHVlPy50aGVuOwogICAgICBpZiAodHlwZW9mIHRoZW4yID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgbGV0IGQxNTsKICAgICAgICBjb25zdCBwcm9taXNlID0gdGhlbjIuY2FsbCgKICAgICAgICAgIHZhbHVlLAogICAgICAgICAgKHZhbCkgPT4gewogICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKCJudWxseSIsICJib2R5IiwgdmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIChlcnIpID0+IHsKICAgICAgICAgICAgZGVzdHJveWVyKGQxNSwgZXJyKTsKICAgICAgICAgIH0KICAgICAgICApOwogICAgICAgIHJldHVybiBkMTUgPSBuZXcgRHVwbGV4aWZ5KHsKICAgICAgICAgIG9iamVjdE1vZGU6IHRydWUsCiAgICAgICAgICByZWFkYWJsZTogZmFsc2UsCiAgICAgICAgICB3cml0ZTogd3JpdGUyLAogICAgICAgICAgZmluYWwoY2IpIHsKICAgICAgICAgICAgZmluYWwyKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgYXdhaXQgcHJvbWlzZTsKICAgICAgICAgICAgICAgIG5leHRUaWNrMyhjYiwgbnVsbCk7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICBuZXh0VGljazMoY2IsIGVycik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBkZXN0cm95OiBkZXN0cm95NAogICAgICAgIH0pOwogICAgICB9CiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoCiAgICAgICAgIkl0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb24iLAogICAgICAgIG5hbWUsCiAgICAgICAgdmFsdWUKICAgICAgKTsKICAgIH0KICAgIGlmIChpc0Jsb2IoYm9keSkpIHsKICAgICAgcmV0dXJuIGR1cGxleGlmeShib2R5LmFycmF5QnVmZmVyKCkpOwogICAgfQogICAgaWYgKGlzSXRlcmFibGUoYm9keSkpIHsKICAgICAgcmV0dXJuIGZyb21fZGVmYXVsdChEdXBsZXhpZnksIGJvZHksIHsKICAgICAgICBvYmplY3RNb2RlOiB0cnVlLAogICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICB9KTsKICAgIH0KICAgIGlmICh0eXBlb2YgYm9keT8ud3JpdGFibGUgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBib2R5Py5yZWFkYWJsZSA9PT0gIm9iamVjdCIpIHsKICAgICAgY29uc3QgcmVhZGFibGUgPSBib2R5Py5yZWFkYWJsZSA/IGlzUmVhZGFibGVOb2RlU3RyZWFtKGJvZHk/LnJlYWRhYmxlKSA/IGJvZHk/LnJlYWRhYmxlIDogZHVwbGV4aWZ5KGJvZHkucmVhZGFibGUpIDogdm9pZCAwOwogICAgICBjb25zdCB3cml0YWJsZSA9IGJvZHk/LndyaXRhYmxlID8gaXNXcml0YWJsZU5vZGVTdHJlYW0oYm9keT8ud3JpdGFibGUpID8gYm9keT8ud3JpdGFibGUgOiBkdXBsZXhpZnkoYm9keS53cml0YWJsZSkgOiB2b2lkIDA7CiAgICAgIHJldHVybiBfZHVwbGV4aWZ5KHsgcmVhZGFibGUsIHdyaXRhYmxlIH0pOwogICAgfQogICAgY29uc3QgdGhlbiA9IGJvZHk/LnRoZW47CiAgICBpZiAodHlwZW9mIHRoZW4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgbGV0IGQxNTsKICAgICAgdGhlbi5jYWxsKAogICAgICAgIGJvZHksCiAgICAgICAgKHZhbCkgPT4gewogICAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7CiAgICAgICAgICAgIGQxNS5wdXNoKHZhbCk7CiAgICAgICAgICB9CiAgICAgICAgICBkMTUucHVzaChudWxsKTsKICAgICAgICB9LAogICAgICAgIChlcnIpID0+IHsKICAgICAgICAgIGRlc3Ryb3llcihkMTUsIGVycik7CiAgICAgICAgfQogICAgICApOwogICAgICByZXR1cm4gZDE1ID0gbmV3IER1cGxleGlmeSh7CiAgICAgICAgb2JqZWN0TW9kZTogdHJ1ZSwKICAgICAgICB3cml0YWJsZTogZmFsc2UsCiAgICAgICAgcmVhZCgpIHsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKAogICAgICBuYW1lLAogICAgICBbCiAgICAgICAgIkJsb2IiLAogICAgICAgICJSZWFkYWJsZVN0cmVhbSIsCiAgICAgICAgIldyaXRhYmxlU3RyZWFtIiwKICAgICAgICAiU3RyZWFtIiwKICAgICAgICAiSXRlcmFibGUiLAogICAgICAgICJBc3luY0l0ZXJhYmxlIiwKICAgICAgICAiRnVuY3Rpb24iLAogICAgICAgICJ7IHJlYWRhYmxlLCB3cml0YWJsZSB9IHBhaXIiLAogICAgICAgICJQcm9taXNlIgogICAgICBdLAogICAgICBib2R5CiAgICApOwogIH0KICBmdW5jdGlvbiBmcm9tQXN5bmNHZW4oZm40KSB7CiAgICBsZXQgeyBwcm9taXNlLCByZXNvbHZlOiByZXNvbHZlNyB9ID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKCk7CiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgIGNvbnN0IHNpZ25hbCA9IGFjLnNpZ25hbDsKICAgIGNvbnN0IHZhbHVlID0gZm40KAogICAgICBhc3luYyBmdW5jdGlvbiogKCkgewogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBjb25zdCBfcHJvbWlzZSA9IHByb21pc2U7CiAgICAgICAgICBwcm9taXNlID0gbnVsbDsKICAgICAgICAgIGNvbnN0IHsgY2h1bmssIGRvbmUsIGNiIH0gPSBhd2FpdCBfcHJvbWlzZTsKICAgICAgICAgIG5leHRUaWNrMyhjYik7CiAgICAgICAgICBpZiAoZG9uZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpOwogICAgICAgICAgKHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzb2x2ZTcgfSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpKTsKICAgICAgICAgIHlpZWxkIGNodW5rOwogICAgICAgIH0KICAgICAgfSgpLAogICAgICB7IHNpZ25hbCB9CiAgICApOwogICAgcmV0dXJuIHsKICAgICAgdmFsdWUsCiAgICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHsKICAgICAgICBjb25zdCBfcmVzb2x2ZSA9IHJlc29sdmU3OwogICAgICAgIHJlc29sdmU3ID0gbnVsbDsKICAgICAgICBfcmVzb2x2ZSh7IGNodW5rLCBkb25lOiBmYWxzZSwgY2IgfSk7CiAgICAgIH0sCiAgICAgIGZpbmFsKGNiKSB7CiAgICAgICAgY29uc3QgX3Jlc29sdmUgPSByZXNvbHZlNzsKICAgICAgICByZXNvbHZlNyA9IG51bGw7CiAgICAgICAgX3Jlc29sdmUoeyBkb25lOiB0cnVlLCBjYiB9KTsKICAgICAgfSwKICAgICAgZGVzdHJveShlcnIsIGNiKSB7CiAgICAgICAgYWMuYWJvcnQoKTsKICAgICAgICBjYihlcnIpOwogICAgICB9CiAgICB9OwogIH0KICBmdW5jdGlvbiBfZHVwbGV4aWZ5KHBhaXIpIHsKICAgIGNvbnN0IHIzID0gcGFpci5yZWFkYWJsZSAmJiB0eXBlb2YgcGFpci5yZWFkYWJsZS5yZWFkICE9PSAiZnVuY3Rpb24iID8gcmVhZGFibGVfZGVmYXVsdC53cmFwKHBhaXIucmVhZGFibGUpIDogcGFpci5yZWFkYWJsZTsKICAgIGNvbnN0IHcyMSA9IHBhaXIud3JpdGFibGU7CiAgICBsZXQgcmVhZGFibGUgPSAhIWlzUmVhZGFibGUyKHIzKTsKICAgIGxldCB3cml0YWJsZSA9ICEhaXNXcml0YWJsZTIodzIxKTsKICAgIGxldCBvbmRyYWluOwogICAgbGV0IG9uZmluaXNoOwogICAgbGV0IG9ucmVhZGFibGU7CiAgICBsZXQgb25jbG9zZTsKICAgIGxldCBkMTU7CiAgICBmdW5jdGlvbiBvbmZpbmlzaGVkKGVycikgewogICAgICBjb25zdCBjYiA9IG9uY2xvc2U7CiAgICAgIG9uY2xvc2UgPSBudWxsOwogICAgICBpZiAoY2IpIHsKICAgICAgICBjYihlcnIpOwogICAgICB9IGVsc2UgaWYgKGVycikgewogICAgICAgIGQxNS5kZXN0cm95KGVycik7CiAgICAgIH0gZWxzZSBpZiAoIXJlYWRhYmxlICYmICF3cml0YWJsZSkgewogICAgICAgIGQxNS5kZXN0cm95KCk7CiAgICAgIH0KICAgIH0KICAgIGQxNSA9IG5ldyBEdXBsZXhpZnkoewogICAgICByZWFkYWJsZU9iamVjdE1vZGU6ICEhcjM/LnJlYWRhYmxlT2JqZWN0TW9kZSwKICAgICAgd3JpdGFibGVPYmplY3RNb2RlOiAhIXcyMT8ud3JpdGFibGVPYmplY3RNb2RlLAogICAgICByZWFkYWJsZSwKICAgICAgd3JpdGFibGUKICAgIH0pOwogICAgaWYgKHdyaXRhYmxlKSB7CiAgICAgIGVuZF9vZl9zdHJlYW1fZGVmYXVsdCh3MjEsIChlcnIpID0+IHsKICAgICAgICB3cml0YWJsZSA9IGZhbHNlOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgIGRlc3Ryb3llcihyMywgZXJyKTsKICAgICAgICB9CiAgICAgICAgb25maW5pc2hlZChlcnIpOwogICAgICB9KTsKICAgICAgZDE1Ll93cml0ZSA9IGZ1bmN0aW9uKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHsKICAgICAgICBpZiAodzIxLndyaXRlKGNodW5rLCBlbmNvZGluZykpIHsKICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9uZHJhaW4gPSBjYWxsYmFjazsKICAgICAgICB9CiAgICAgIH07CiAgICAgIGQxNS5fZmluYWwgPSBmdW5jdGlvbihjYWxsYmFjaykgewogICAgICAgIHcyMS5lbmQoKTsKICAgICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrOwogICAgICB9OwogICAgICB3MjEub24oImRyYWluIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKG9uZHJhaW4pIHsKICAgICAgICAgIGNvbnN0IGNiID0gb25kcmFpbjsKICAgICAgICAgIG9uZHJhaW4gPSBudWxsOwogICAgICAgICAgY2IoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB3MjEub24oImZpbmlzaCIsIGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChvbmZpbmlzaCkgewogICAgICAgICAgY29uc3QgY2IgPSBvbmZpbmlzaDsKICAgICAgICAgIG9uZmluaXNoID0gbnVsbDsKICAgICAgICAgIGNiKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGlmIChyZWFkYWJsZSkgewogICAgICBlbmRfb2Zfc3RyZWFtX2RlZmF1bHQocjMsIChlcnIpID0+IHsKICAgICAgICByZWFkYWJsZSA9IGZhbHNlOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgIGRlc3Ryb3llcihyMywgZXJyKTsKICAgICAgICB9CiAgICAgICAgb25maW5pc2hlZChlcnIpOwogICAgICB9KTsKICAgICAgcjMub24oInJlYWRhYmxlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKG9ucmVhZGFibGUpIHsKICAgICAgICAgIGNvbnN0IGNiID0gb25yZWFkYWJsZTsKICAgICAgICAgIG9ucmVhZGFibGUgPSBudWxsOwogICAgICAgICAgY2IoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByMy5vbigiZW5kIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgZDE1LnB1c2gobnVsbCk7CiAgICAgIH0pOwogICAgICBkMTUuX3JlYWQgPSBmdW5jdGlvbigpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgY29uc3QgYnVmID0gcjMucmVhZCgpOwogICAgICAgICAgaWYgKGJ1ZiA9PT0gbnVsbCkgewogICAgICAgICAgICBvbnJlYWRhYmxlID0gZDE1Ll9yZWFkOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIWQxNS5wdXNoKGJ1ZikpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgIH0KICAgIGQxNS5fZGVzdHJveSA9IGZ1bmN0aW9uKGVyciwgY2FsbGJhY2spIHsKICAgICAgaWYgKCFlcnIgJiYgb25jbG9zZSAhPT0gbnVsbCkgewogICAgICAgIGVyciA9IG5ldyBBYm9ydEVycm9yKCk7CiAgICAgIH0KICAgICAgb25yZWFkYWJsZSA9IG51bGw7CiAgICAgIG9uZHJhaW4gPSBudWxsOwogICAgICBvbmZpbmlzaCA9IG51bGw7CiAgICAgIGlmIChvbmNsb3NlID09PSBudWxsKSB7CiAgICAgICAgY2FsbGJhY2soZXJyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvbmNsb3NlID0gY2FsbGJhY2s7CiAgICAgICAgZGVzdHJveWVyKHcyMSwgZXJyKTsKICAgICAgICBkZXN0cm95ZXIocjMsIGVycik7CiAgICAgIH0KICAgIH07CiAgICByZXR1cm4gZDE1OwogIH0KICBmdW5jdGlvbiBkdXBsZXhGcm9tKGJvZHkpIHsKICAgIHJldHVybiBkdXBsZXhpZnkoYm9keSwgImJvZHkiKTsKICB9CiAgRHVwbGV4LmZyb20gPSBkdXBsZXhGcm9tOwogIER1cGxleC5kdXBsZXhpZnkgPSBkdXBsZXhpZnk7CiAgdmFyIGR1cGxleF9kZWZhdWx0ID0gRHVwbGV4OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvc3RyZWFtcy90cmFuc2Zvcm0ubWpzCiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFRyYW5zZm9ybS5wcm90b3R5cGUsIGR1cGxleF9kZWZhdWx0LnByb3RvdHlwZSk7CiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFRyYW5zZm9ybSwgZHVwbGV4X2RlZmF1bHQpOwogIHZhciBrQ2FsbGJhY2sgPSBTeW1ib2woImtDYWxsYmFjayIpOwogIGZ1bmN0aW9uIFRyYW5zZm9ybShvcHRpb25zKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkgewogICAgICByZXR1cm4gbmV3IFRyYW5zZm9ybShvcHRpb25zKTsKICAgIH0KICAgIGR1cGxleF9kZWZhdWx0LmNhbGwodGhpcywgb3B0aW9ucyk7CiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTsKICAgIHRoaXNba0NhbGxiYWNrXSA9IG51bGw7CiAgICBpZiAob3B0aW9ucykgewogICAgICBpZiAodHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdGhpcy5fdHJhbnNmb3JtID0gb3B0aW9ucy50cmFuc2Zvcm07CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmZsdXNoID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoOwogICAgICB9CiAgICB9CiAgICB0aGlzLm9uKCJwcmVmaW5pc2giLCBwcmVmaW5pc2gyKTsKICB9CiAgZnVuY3Rpb24gZmluYWwoY2IpIHsKICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKICAgIGlmICh0eXBlb2YgdGhpcy5fZmx1c2ggPT09ICJmdW5jdGlvbiIgJiYgIXRoaXMuZGVzdHJveWVkKSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2ZsdXNoKChlcjMsIGRhdGEpID0+IHsKICAgICAgICBjYWxsZWQgPSB0cnVlOwogICAgICAgIGlmIChlcjMpIHsKICAgICAgICAgIGlmIChjYikgewogICAgICAgICAgICBjYihlcjMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5kZXN0cm95KGVyMyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChkYXRhICE9IG51bGwpIHsKICAgICAgICAgIHRoaXMucHVzaChkYXRhKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5wdXNoKG51bGwpOwogICAgICAgIGlmIChjYikgewogICAgICAgICAgY2IoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDAgJiYgcmVzdWx0ICE9PSBudWxsKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHRoZW4gPSByZXN1bHQudGhlbjsKICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aGVuLmNhbGwoCiAgICAgICAgICAgICAgcmVzdWx0LAogICAgICAgICAgICAgIChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoY2FsbGVkKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChkYXRhICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoKGRhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5wdXNoKG51bGwpOwogICAgICAgICAgICAgICAgaWYgKGNiKSB7CiAgICAgICAgICAgICAgICAgIG5leHRUaWNrMyhjYik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoY2IpIHsKICAgICAgICAgICAgICAgICAgbmV4dFRpY2szKGNiLCBlcnIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgbmV4dFRpY2szKCgpID0+IHRoaXMuZGVzdHJveShlcnIpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBuZXh0VGljazMoKCkgPT4gdGhpcy5kZXN0cm95KGVycikpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhpcy5wdXNoKG51bGwpOwogICAgICBpZiAoY2IpIHsKICAgICAgICBjYigpOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIHByZWZpbmlzaDIoKSB7CiAgICBpZiAodGhpcy5fZmluYWwgIT09IGZpbmFsKSB7CiAgICAgIGZpbmFsLmNhbGwodGhpcyk7CiAgICB9CiAgfQogIFRyYW5zZm9ybS5wcm90b3R5cGUuX2ZpbmFsID0gZmluYWw7CiAgVHJhbnNmb3JtLnByb3RvdHlwZS5fdHJhbnNmb3JtID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykgewogICAgdGhyb3cgbmV3IEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEKCJfdHJhbnNmb3JtKCkiKTsKICB9OwogIFRyYW5zZm9ybS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24oY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykgewogICAgY29uc3QgclN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTsKICAgIGNvbnN0IHdTdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7CiAgICBjb25zdCBsZW5ndGggPSByU3RhdGUubGVuZ3RoOwogICAgbGV0IGNhbGxlZCA9IGZhbHNlOwogICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgKGVyciwgdmFsKSA9PiB7CiAgICAgIGNhbGxlZCA9IHRydWU7CiAgICAgIGlmIChlcnIpIHsKICAgICAgICBjYWxsYmFjayhlcnIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodmFsICE9IG51bGwpIHsKICAgICAgICB0aGlzLnB1c2godmFsKTsKICAgICAgfQogICAgICBpZiAod1N0YXRlLmVuZGVkIHx8IGxlbmd0aCA9PT0gclN0YXRlLmxlbmd0aCB8fCByU3RhdGUubGVuZ3RoIDwgclN0YXRlLmhpZ2hXYXRlck1hcmsgfHwgclN0YXRlLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpc1trQ2FsbGJhY2tdID0gY2FsbGJhY2s7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwICYmIHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgdGhlbiA9IHJlc3VsdC50aGVuOwogICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhlbi5jYWxsKAogICAgICAgICAgICByZXN1bHQsCiAgICAgICAgICAgICh2YWwpID0+IHsKICAgICAgICAgICAgICBpZiAoY2FsbGVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh2YWwgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhpcy5wdXNoKHZhbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh3U3RhdGUuZW5kZWQgfHwgbGVuZ3RoID09PSByU3RhdGUubGVuZ3RoIHx8IHJTdGF0ZS5sZW5ndGggPCByU3RhdGUuaGlnaFdhdGVyTWFyayB8fCByU3RhdGUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICBuZXh0VGljazMoY2FsbGJhY2spOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzW2tDYWxsYmFja10gPSBjYWxsYmFjazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIChlcnIpID0+IHsKICAgICAgICAgICAgICBuZXh0VGljazMoY2FsbGJhY2ssIGVycik7CiAgICAgICAgICAgIH0KICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBuZXh0VGljazMoY2FsbGJhY2ssIGVycik7CiAgICAgIH0KICAgIH0KICB9OwogIFRyYW5zZm9ybS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbigpIHsKICAgIGlmICh0aGlzW2tDYWxsYmFja10pIHsKICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzW2tDYWxsYmFja107CiAgICAgIHRoaXNba0NhbGxiYWNrXSA9IG51bGw7CiAgICAgIGNhbGxiYWNrKCk7CiAgICB9CiAgfTsKICB2YXIgdHJhbnNmb3JtX2RlZmF1bHQgPSBUcmFuc2Zvcm07CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL3Bhc3N0aHJvdWdoLm1qcwogIE9iamVjdC5zZXRQcm90b3R5cGVPZihQYXNzVGhyb3VnaC5wcm90b3R5cGUsIHRyYW5zZm9ybV9kZWZhdWx0LnByb3RvdHlwZSk7CiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKFBhc3NUaHJvdWdoLCB0cmFuc2Zvcm1fZGVmYXVsdCk7CiAgZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykgewogICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhc3NUaHJvdWdoKSkgewogICAgICByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKG9wdGlvbnMpOwogICAgfQogICAgdHJhbnNmb3JtX2RlZmF1bHQuY2FsbCh0aGlzLCBvcHRpb25zKTsKICB9CiAgUGFzc1Rocm91Z2gucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNiKSB7CiAgICBjYihudWxsLCBjaHVuayk7CiAgfTsKICB2YXIgcGFzc3Rocm91Z2hfZGVmYXVsdCA9IFBhc3NUaHJvdWdoOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5tanMKICBmdW5jdGlvbiBkZXN0cm95ZXIyKHN0cmVhbSwgcmVhZGluZywgd3JpdGluZywgY2FsbGJhY2spIHsKICAgIGNhbGxiYWNrID0gb25jZShjYWxsYmFjayk7CiAgICBsZXQgZmluaXNoZWQyID0gZmFsc2U7CiAgICBzdHJlYW0ub24oImNsb3NlIiwgKCkgPT4gewogICAgICBmaW5pc2hlZDIgPSB0cnVlOwogICAgfSk7CiAgICBlbmRfb2Zfc3RyZWFtX2RlZmF1bHQoc3RyZWFtLCB7IHJlYWRhYmxlOiByZWFkaW5nLCB3cml0YWJsZTogd3JpdGluZyB9LCAoZXJyKSA9PiB7CiAgICAgIGZpbmlzaGVkMiA9ICFlcnI7CiAgICAgIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTsKICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSA9PT0gIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiAmJiByZWFkaW5nICYmIChyU3RhdGUgJiYgclN0YXRlLmVuZGVkICYmICFyU3RhdGUuZXJyb3JlZCAmJiAhclN0YXRlLmVycm9yRW1pdHRlZCkpIHsKICAgICAgICBzdHJlYW0ub25jZSgiZW5kIiwgY2FsbGJhY2spLm9uY2UoImVycm9yIiwgY2FsbGJhY2spOwogICAgICB9IGVsc2UgewogICAgICAgIGNhbGxiYWNrKGVycik7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIChlcnIpID0+IHsKICAgICAgaWYgKGZpbmlzaGVkMikKICAgICAgICByZXR1cm47CiAgICAgIGZpbmlzaGVkMiA9IHRydWU7CiAgICAgIGRlc3Ryb3lfZGVmYXVsdC5kZXN0cm95ZXIoc3RyZWFtLCBlcnIpOwogICAgICBjYWxsYmFjayhlcnIgfHwgbmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKCJwaXBlIikpOwogICAgfTsKICB9CiAgZnVuY3Rpb24gcG9wQ2FsbGJhY2soc3RyZWFtcykgewogICAgdmFsaWRhdGVDYWxsYmFjayhzdHJlYW1zW3N0cmVhbXMubGVuZ3RoIC0gMV0pOwogICAgcmV0dXJuIHN0cmVhbXMucG9wKCk7CiAgfQogIGZ1bmN0aW9uIG1ha2VBc3luY0l0ZXJhYmxlKHZhbCkgewogICAgaWYgKGlzSXRlcmFibGUodmFsKSkgewogICAgICByZXR1cm4gdmFsOwogICAgfSBlbHNlIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbSh2YWwpKSB7CiAgICAgIHJldHVybiBmcm9tUmVhZGFibGUodmFsKTsKICAgIH0KICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgKICAgICAgInZhbCIsCiAgICAgIFsiUmVhZGFibGUiLCAiSXRlcmFibGUiLCAiQXN5bmNJdGVyYWJsZSJdLAogICAgICB2YWwKICAgICk7CiAgfQogIGFzeW5jIGZ1bmN0aW9uKiBmcm9tUmVhZGFibGUodmFsKSB7CiAgICB5aWVsZCogcmVhZGFibGVfZGVmYXVsdC5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLmNhbGwodmFsKTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gcHVtcChpdGVyYWJsZSwgd3JpdGFibGUsIGZpbmlzaDIpIHsKICAgIGxldCBlcnJvcjsKICAgIGxldCBvbnJlc29sdmUgPSBudWxsOwogICAgY29uc3QgcmVzdW1lMiA9IChlcnIpID0+IHsKICAgICAgaWYgKGVycikgewogICAgICAgIGVycm9yID0gZXJyOwogICAgICB9CiAgICAgIGlmIChvbnJlc29sdmUpIHsKICAgICAgICBjb25zdCBjYWxsYmFjayA9IG9ucmVzb2x2ZTsKICAgICAgICBvbnJlc29sdmUgPSBudWxsOwogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCB3YWl0ID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmU3LCByZWplY3QpID0+IHsKICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvbnJlc29sdmUgPSAoKSA9PiB7CiAgICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc29sdmU3KCk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfSk7CiAgICB3cml0YWJsZS5vbigiZHJhaW4iLCByZXN1bWUyKTsKICAgIGNvbnN0IGNsZWFudXAgPSBlbmRfb2Zfc3RyZWFtX2RlZmF1bHQod3JpdGFibGUsIHsgcmVhZGFibGU6IGZhbHNlIH0sIHJlc3VtZTIpOwogICAgdHJ5IHsKICAgICAgaWYgKHdyaXRhYmxlLndyaXRhYmxlTmVlZERyYWluKSB7CiAgICAgICAgYXdhaXQgd2FpdCgpOwogICAgICB9CiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXRlcmFibGUpIHsKICAgICAgICBpZiAoIXdyaXRhYmxlLndyaXRlKGNodW5rKSkgewogICAgICAgICAgYXdhaXQgd2FpdCgpOwogICAgICAgIH0KICAgICAgfQogICAgICB3cml0YWJsZS5lbmQoKTsKICAgICAgYXdhaXQgd2FpdCgpOwogICAgICBmaW5pc2gyKCk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgZmluaXNoMihlcnJvciAhPT0gZXJyID8gYWdncmVnYXRlVHdvRXJyb3JzKGVycm9yLCBlcnIpIDogZXJyKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGNsZWFudXAoKTsKICAgICAgd3JpdGFibGUub2ZmKCJkcmFpbiIsIHJlc3VtZTIpOwogICAgfQogIH0KICBmdW5jdGlvbiBwaXBlbGluZSguLi5zdHJlYW1zKSB7CiAgICBjb25zdCBjYWxsYmFjayA9IG9uY2UocG9wQ2FsbGJhY2soc3RyZWFtcykpOwogICAgaWYgKEFycmF5LmlzQXJyYXkoc3RyZWFtc1swXSkgJiYgc3RyZWFtcy5sZW5ndGggPT09IDEpIHsKICAgICAgc3RyZWFtcyA9IHN0cmVhbXNbMF07CiAgICB9CiAgICByZXR1cm4gcGlwZWxpbmVJbXBsKHN0cmVhbXMsIGNhbGxiYWNrKTsKICB9CiAgZnVuY3Rpb24gcGlwZWxpbmVJbXBsKHN0cmVhbXMsIGNhbGxiYWNrLCBvcHRzKSB7CiAgICBpZiAoc3RyZWFtcy5sZW5ndGggPCAyKSB7CiAgICAgIHRocm93IG5ldyBFUlJfTUlTU0lOR19BUkdTKCJzdHJlYW1zIik7CiAgICB9CiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgIGNvbnN0IHNpZ25hbCA9IGFjLnNpZ25hbDsKICAgIGNvbnN0IG91dGVyU2lnbmFsID0gb3B0cz8uc2lnbmFsOwogICAgdmFsaWRhdGVBYm9ydFNpZ25hbChvdXRlclNpZ25hbCwgIm9wdGlvbnMuc2lnbmFsIik7CiAgICBmdW5jdGlvbiBhYm9ydCgpIHsKICAgICAgZmluaXNoSW1wbChuZXcgQWJvcnRFcnJvcigpKTsKICAgIH0KICAgIG91dGVyU2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsIGFib3J0KTsKICAgIGxldCBlcnJvcjsKICAgIGxldCB2YWx1ZTsKICAgIGNvbnN0IGRlc3Ryb3lzID0gW107CiAgICBsZXQgZmluaXNoQ291bnQgPSAwOwogICAgZnVuY3Rpb24gZmluaXNoMihlcnIpIHsKICAgICAgZmluaXNoSW1wbChlcnIsIC0tZmluaXNoQ291bnQgPT09IDApOwogICAgfQogICAgZnVuY3Rpb24gZmluaXNoSW1wbChlcnIsIGZpbmFsMikgewogICAgICBpZiAoZXJyICYmICghZXJyb3IgfHwgZXJyb3IuY29kZSA9PT0gIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIikpIHsKICAgICAgICBlcnJvciA9IGVycjsKICAgICAgfQogICAgICBpZiAoIWVycm9yICYmICFmaW5hbDIpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgd2hpbGUgKGRlc3Ryb3lzLmxlbmd0aCkgewogICAgICAgIGRlc3Ryb3lzLnNoaWZ0KCkoZXJyb3IpOwogICAgICB9CiAgICAgIG91dGVyU2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsIGFib3J0KTsKICAgICAgYWMuYWJvcnQoKTsKICAgICAgaWYgKGZpbmFsMikgewogICAgICAgIGNhbGxiYWNrKGVycm9yLCB2YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIGxldCByZXQ7CiAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgc3RyZWFtcy5sZW5ndGg7IGk0KyspIHsKICAgICAgY29uc3Qgc3RyZWFtID0gc3RyZWFtc1tpNF07CiAgICAgIGNvbnN0IHJlYWRpbmcgPSBpNCA8IHN0cmVhbXMubGVuZ3RoIC0gMTsKICAgICAgY29uc3Qgd3JpdGluZyA9IGk0ID4gMDsKICAgICAgaWYgKGlzTm9kZVN0cmVhbShzdHJlYW0pKSB7CiAgICAgICAgZmluaXNoQ291bnQrKzsKICAgICAgICBkZXN0cm95cy5wdXNoKGRlc3Ryb3llcjIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nLCBmaW5pc2gyKSk7CiAgICAgIH0KICAgICAgaWYgKGk0ID09PSAwKSB7CiAgICAgICAgaWYgKHR5cGVvZiBzdHJlYW0gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHJldCA9IHN0cmVhbSh7IHNpZ25hbCB9KTsKICAgICAgICAgIGlmICghaXNJdGVyYWJsZShyZXQpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoCiAgICAgICAgICAgICAgIkl0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIFN0cmVhbSIsCiAgICAgICAgICAgICAgInNvdXJjZSIsCiAgICAgICAgICAgICAgcmV0CiAgICAgICAgICAgICk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpc0l0ZXJhYmxlKHN0cmVhbSkgfHwgaXNSZWFkYWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgewogICAgICAgICAgcmV0ID0gc3RyZWFtOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXQgPSBkdXBsZXhfZGVmYXVsdC5mcm9tKHN0cmVhbSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICByZXQgPSBtYWtlQXN5bmNJdGVyYWJsZShyZXQpOwogICAgICAgIHJldCA9IHN0cmVhbShyZXQsIHsgc2lnbmFsIH0pOwogICAgICAgIGlmIChyZWFkaW5nKSB7CiAgICAgICAgICBpZiAoIWlzSXRlcmFibGUocmV0LCB0cnVlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKAogICAgICAgICAgICAgICJBc3luY0l0ZXJhYmxlIiwKICAgICAgICAgICAgICBgdHJhbnNmb3JtWyR7aTQgLSAxfV1gLAogICAgICAgICAgICAgIHJldAogICAgICAgICAgICApOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBwdDEyID0gbmV3IHBhc3N0aHJvdWdoX2RlZmF1bHQoewogICAgICAgICAgICBvYmplY3RNb2RlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHRoZW4gPSByZXQ/LnRoZW47CiAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhlbi5jYWxsKHJldCwgKHZhbCkgPT4gewogICAgICAgICAgICAgIHZhbHVlID0gdmFsOwogICAgICAgICAgICAgIHB0MTIuZW5kKHZhbCk7CiAgICAgICAgICAgIH0sIChlcnIpID0+IHsKICAgICAgICAgICAgICBwdDEyLmRlc3Ryb3koZXJyKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGlzSXRlcmFibGUocmV0LCB0cnVlKSkgewogICAgICAgICAgICBmaW5pc2hDb3VudCsrOwogICAgICAgICAgICBwdW1wKHJldCwgcHQxMiwgZmluaXNoMik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKAogICAgICAgICAgICAgICJBc3luY0l0ZXJhYmxlIG9yIFByb21pc2UiLAogICAgICAgICAgICAgICJkZXN0aW5hdGlvbiIsCiAgICAgICAgICAgICAgcmV0CiAgICAgICAgICAgICk7CiAgICAgICAgICB9CiAgICAgICAgICByZXQgPSBwdDEyOwogICAgICAgICAgZmluaXNoQ291bnQrKzsKICAgICAgICAgIGRlc3Ryb3lzLnB1c2goZGVzdHJveWVyMihyZXQsIGZhbHNlLCB0cnVlLCBmaW5pc2gyKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlzTm9kZVN0cmVhbShzdHJlYW0pKSB7CiAgICAgICAgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKHJldCkpIHsKICAgICAgICAgIHJldC5waXBlKHN0cmVhbSk7CiAgICAgICAgICBpZiAoc3RyZWFtID09PSBzdGRpby5zdGRvdXQgfHwgc3RyZWFtID09PSBzdGRpby5zdGRlcnIpIHsKICAgICAgICAgICAgcmV0Lm9uKCJlbmQiLCAoKSA9PiBzdHJlYW0uZW5kKCkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXQgPSBtYWtlQXN5bmNJdGVyYWJsZShyZXQpOwogICAgICAgICAgZmluaXNoQ291bnQrKzsKICAgICAgICAgIHB1bXAocmV0LCBzdHJlYW0sIGZpbmlzaDIpOwogICAgICAgIH0KICAgICAgICByZXQgPSBzdHJlYW07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0ID0gZHVwbGV4X2RlZmF1bHQuZnJvbShzdHJlYW0pOwogICAgICB9CiAgICB9CiAgICBpZiAoc2lnbmFsPy5hYm9ydGVkIHx8IG91dGVyU2lnbmFsPy5hYm9ydGVkKSB7CiAgICAgIG5leHRUaWNrMyhhYm9ydCk7CiAgICB9CiAgICByZXR1cm4gcmV0OwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3N0cmVhbXMvY29tcG9zZS5tanMKICB2YXIgQ29tcG9zZUR1cGxleCA9IGNsYXNzIGV4dGVuZHMgZHVwbGV4X2RlZmF1bHQgewogICAgY29uc3RydWN0b3Iob3B0aW9ucykgewogICAgICBzdXBlcihvcHRpb25zKTsKICAgICAgaWYgKG9wdGlvbnM/LnJlYWRhYmxlID09PSBmYWxzZSkgewogICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSBmYWxzZTsKICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zPy53cml0YWJsZSA9PT0gZmFsc2UpIHsKICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlID0gZmFsc2U7CiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSB0cnVlOwogICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlOwogICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfTsKICBmdW5jdGlvbiBjb21wb3NlKC4uLnN0cmVhbXMpIHsKICAgIGlmIChzdHJlYW1zLmxlbmd0aCA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUygic3RyZWFtcyIpOwogICAgfQogICAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAxKSB7CiAgICAgIHJldHVybiBkdXBsZXhfZGVmYXVsdC5mcm9tKHN0cmVhbXNbMF0pOwogICAgfQogICAgY29uc3Qgb3JnU3RyZWFtcyA9IFsuLi5zdHJlYW1zXTsKICAgIGlmICh0eXBlb2Ygc3RyZWFtc1swXSA9PT0gImZ1bmN0aW9uIikgewogICAgICBzdHJlYW1zWzBdID0gZHVwbGV4X2RlZmF1bHQuZnJvbShzdHJlYW1zWzBdKTsKICAgIH0KICAgIGlmICh0eXBlb2Ygc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGNvbnN0IGlkeCA9IHN0cmVhbXMubGVuZ3RoIC0gMTsKICAgICAgc3RyZWFtc1tpZHhdID0gZHVwbGV4X2RlZmF1bHQuZnJvbShzdHJlYW1zW2lkeF0pOwogICAgfQogICAgZm9yIChsZXQgbjggPSAwOyBuOCA8IHN0cmVhbXMubGVuZ3RoOyArK244KSB7CiAgICAgIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbXNbbjhdKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChuOCA8IHN0cmVhbXMubGVuZ3RoIC0gMSAmJiAhaXNSZWFkYWJsZTIoc3RyZWFtc1tuOF0pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRSgKICAgICAgICAgIGBzdHJlYW1zWyR7bjh9XWAsCiAgICAgICAgICBvcmdTdHJlYW1zW244XSwKICAgICAgICAgICJtdXN0IGJlIHJlYWRhYmxlIgogICAgICAgICk7CiAgICAgIH0KICAgICAgaWYgKG44ID4gMCAmJiAhaXNXcml0YWJsZTIoc3RyZWFtc1tuOF0pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRSgKICAgICAgICAgIGBzdHJlYW1zWyR7bjh9XWAsCiAgICAgICAgICBvcmdTdHJlYW1zW244XSwKICAgICAgICAgICJtdXN0IGJlIHdyaXRhYmxlIgogICAgICAgICk7CiAgICAgIH0KICAgIH0KICAgIGxldCBvbmRyYWluOwogICAgbGV0IG9uZmluaXNoOwogICAgbGV0IG9ucmVhZGFibGU7CiAgICBsZXQgb25jbG9zZTsKICAgIGxldCBkMTU7CiAgICBmdW5jdGlvbiBvbmZpbmlzaGVkKGVycikgewogICAgICBjb25zdCBjYiA9IG9uY2xvc2U7CiAgICAgIG9uY2xvc2UgPSBudWxsOwogICAgICBpZiAoY2IpIHsKICAgICAgICBjYihlcnIpOwogICAgICB9IGVsc2UgaWYgKGVycikgewogICAgICAgIGQxNS5kZXN0cm95KGVycik7CiAgICAgIH0gZWxzZSBpZiAoIXJlYWRhYmxlICYmICF3cml0YWJsZSkgewogICAgICAgIGQxNS5kZXN0cm95KCk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0IGhlYWQgPSBzdHJlYW1zWzBdOwogICAgY29uc3QgdGFpbCA9IHBpcGVsaW5lKHN0cmVhbXMsIG9uZmluaXNoZWQpOwogICAgY29uc3Qgd3JpdGFibGUgPSAhIWlzV3JpdGFibGUyKGhlYWQpOwogICAgY29uc3QgcmVhZGFibGUgPSAhIWlzUmVhZGFibGUyKHRhaWwpOwogICAgZDE1ID0gbmV3IENvbXBvc2VEdXBsZXgoewogICAgICB3cml0YWJsZU9iamVjdE1vZGU6ICEhaGVhZD8ud3JpdGFibGVPYmplY3RNb2RlLAogICAgICByZWFkYWJsZU9iamVjdE1vZGU6ICEhdGFpbD8ud3JpdGFibGVPYmplY3RNb2RlLAogICAgICB3cml0YWJsZSwKICAgICAgcmVhZGFibGUKICAgIH0pOwogICAgaWYgKHdyaXRhYmxlKSB7CiAgICAgIGQxNS5fd3JpdGUgPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7CiAgICAgICAgaWYgKGhlYWQud3JpdGUoY2h1bmssIGVuY29kaW5nKSkgewogICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgb25kcmFpbiA9IGNhbGxiYWNrOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZDE1Ll9maW5hbCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICAgICAgaGVhZC5lbmQoKTsKICAgICAgICBvbmZpbmlzaCA9IGNhbGxiYWNrOwogICAgICB9OwogICAgICBoZWFkLm9uKCJkcmFpbiIsIGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChvbmRyYWluKSB7CiAgICAgICAgICBjb25zdCBjYiA9IG9uZHJhaW47CiAgICAgICAgICBvbmRyYWluID0gbnVsbDsKICAgICAgICAgIGNiKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGFpbC5vbigiZmluaXNoIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKG9uZmluaXNoKSB7CiAgICAgICAgICBjb25zdCBjYiA9IG9uZmluaXNoOwogICAgICAgICAgb25maW5pc2ggPSBudWxsOwogICAgICAgICAgY2IoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgaWYgKHJlYWRhYmxlKSB7CiAgICAgIHRhaWwub24oInJlYWRhYmxlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKG9ucmVhZGFibGUpIHsKICAgICAgICAgIGNvbnN0IGNiID0gb25yZWFkYWJsZTsKICAgICAgICAgIG9ucmVhZGFibGUgPSBudWxsOwogICAgICAgICAgY2IoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0YWlsLm9uKCJlbmQiLCBmdW5jdGlvbigpIHsKICAgICAgICBkMTUucHVzaChudWxsKTsKICAgICAgfSk7CiAgICAgIGQxNS5fcmVhZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBjb25zdCBidWYgPSB0YWlsLnJlYWQoKTsKICAgICAgICAgIGlmIChidWYgPT09IG51bGwpIHsKICAgICAgICAgICAgb25yZWFkYWJsZSA9IGQxNS5fcmVhZDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFkMTUucHVzaChidWYpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICB9CiAgICBkMTUuX2Rlc3Ryb3kgPSBmdW5jdGlvbihlcnIsIGNhbGxiYWNrKSB7CiAgICAgIGlmICghZXJyICYmIG9uY2xvc2UgIT09IG51bGwpIHsKICAgICAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpOwogICAgICB9CiAgICAgIG9ucmVhZGFibGUgPSBudWxsOwogICAgICBvbmRyYWluID0gbnVsbDsKICAgICAgb25maW5pc2ggPSBudWxsOwogICAgICBpZiAob25jbG9zZSA9PT0gbnVsbCkgewogICAgICAgIGNhbGxiYWNrKGVycik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb25jbG9zZSA9IGNhbGxiYWNrOwogICAgICAgIGRlc3Ryb3llcih0YWlsLCBlcnIpOwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIGQxNTsKICB9CiAgdmFyIGNvbXBvc2VfZGVmYXVsdCA9IGNvbXBvc2U7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9zdHJlYW0vcHJvbWlzZXMubWpzCiAgZnVuY3Rpb24gcGlwZWxpbmUyKC4uLnN0cmVhbXMpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTcsIHJlamVjdCkgPT4gewogICAgICBsZXQgc2lnbmFsOwogICAgICBsZXQgZW5kOwogICAgICBjb25zdCBsYXN0QXJnID0gc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdOwogICAgICBpZiAobGFzdEFyZyAmJiB0eXBlb2YgbGFzdEFyZyA9PT0gIm9iamVjdCIgJiYgIWlzTm9kZVN0cmVhbShsYXN0QXJnKSAmJiAhaXNJdGVyYWJsZShsYXN0QXJnKSkgewogICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzdHJlYW1zLnBvcCgpOwogICAgICAgIHNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsOwogICAgICAgIGVuZCA9IG9wdGlvbnMuZW5kOwogICAgICB9CiAgICAgIHBpcGVsaW5lSW1wbChzdHJlYW1zLCAoZXJyLCB2YWx1ZSkgPT4gewogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXNvbHZlNyh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9LCB7IHNpZ25hbCwgZW5kIH0pOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGZpbmlzaGVkKHN0cmVhbSwgb3B0cykgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlNywgcmVqZWN0KSA9PiB7CiAgICAgIGVuZF9vZl9zdHJlYW1fZGVmYXVsdChzdHJlYW0sIG9wdHMsIChlcnIpID0+IHsKICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzb2x2ZTcoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQogIHZhciBwcm9taXNlc19kZWZhdWx0ID0gewogICAgZmluaXNoZWQsCiAgICBwaXBlbGluZTogcGlwZWxpbmUyCiAgfTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL19zdHJlYW0ubWpzCiAgdmFyIHsgY3VzdG9tOiBjdXN0b21Qcm9taXNpZnkgfSA9IHByb21pc2lmeTsKICBTdHJlYW0uaXNEaXN0dXJiZWQgPSBpc0Rpc3R1cmJlZDsKICBTdHJlYW0uUmVhZGFibGUgPSByZWFkYWJsZV9kZWZhdWx0OwogIFN0cmVhbS5Xcml0YWJsZSA9IHdyaXRhYmxlX2RlZmF1bHQ7CiAgU3RyZWFtLkR1cGxleCA9IGR1cGxleF9kZWZhdWx0OwogIFN0cmVhbS5UcmFuc2Zvcm0gPSB0cmFuc2Zvcm1fZGVmYXVsdDsKICBTdHJlYW0uUGFzc1Rocm91Z2ggPSBwYXNzdGhyb3VnaF9kZWZhdWx0OwogIFN0cmVhbS5waXBlbGluZSA9IHBpcGVsaW5lOwogIFN0cmVhbS5hZGRBYm9ydFNpZ25hbCA9IGFkZEFib3J0U2lnbmFsOwogIFN0cmVhbS5maW5pc2hlZCA9IGVuZF9vZl9zdHJlYW1fZGVmYXVsdDsKICBTdHJlYW0uZGVzdHJveSA9IGRlc3Ryb3llcjsKICBTdHJlYW0uY29tcG9zZSA9IGNvbXBvc2VfZGVmYXVsdDsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RyZWFtLCAicHJvbWlzZXMiLCB7CiAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgZ2V0KCkgewogICAgICByZXR1cm4gcHJvbWlzZXNfZGVmYXVsdDsKICAgIH0KICB9KTsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGlwZWxpbmUsIGN1c3RvbVByb21pc2lmeSwgewogICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgIGdldCgpIHsKICAgICAgcmV0dXJuIHByb21pc2VzX2RlZmF1bHQucGlwZWxpbmU7CiAgICB9CiAgfSk7CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVuZF9vZl9zdHJlYW1fZGVmYXVsdCwgY3VzdG9tUHJvbWlzaWZ5LCB7CiAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgZ2V0KCkgewogICAgICByZXR1cm4gcHJvbWlzZXNfZGVmYXVsdC5maW5pc2hlZDsKICAgIH0KICB9KTsKICBTdHJlYW0uU3RyZWFtID0gU3RyZWFtOwogIFN0cmVhbS5faXNVaW50OEFycmF5ID0gaXNVaW50OEFycmF5OwogIFN0cmVhbS5fdWludDhBcnJheVRvQnVmZmVyID0gX3VpbnQ4QXJyYXlUb0J1ZmZlcjsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL19wcm9jZXNzL3N0cmVhbXMubWpzCiAgZnVuY3Rpb24gY3JlYXRlV3JpdGFibGVTdGRpb1N0cmVhbSh3cml0ZXIsIG5hbWUpIHsKICAgIGNvbnN0IHN0cmVhbSA9IG5ldyB3cml0YWJsZV9kZWZhdWx0KHsKICAgICAgd3JpdGUoYnVmLCBlbmMsIGNiKSB7CiAgICAgICAgaWYgKCF3cml0ZXIpIHsKICAgICAgICAgIHRoaXMuZGVzdHJveSgKICAgICAgICAgICAgbmV3IEVycm9yKGBEZW5vLiR7bmFtZX0gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50YCkKICAgICAgICAgICk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHdyaXRlci53cml0ZVN5bmMoYnVmIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGJ1ZiA6IEJ1ZmZlcjQuZnJvbShidWYsIGVuYykpOwogICAgICAgIGNiKCk7CiAgICAgIH0sCiAgICAgIGRlc3Ryb3koZXJyLCBjYikgewogICAgICAgIGNiKGVycik7CiAgICAgICAgdGhpcy5fdW5kZXN0cm95KCk7CiAgICAgICAgaWYgKCF0aGlzLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZSkgewogICAgICAgICAgbmV4dFRpY2soKCkgPT4gdGhpcy5lbWl0KCJjbG9zZSIpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgc3RyZWFtLmZkID0gd3JpdGVyPy5yaWQgPz8gLTE7CiAgICBzdHJlYW0uZGVzdHJveVNvb24gPSBzdHJlYW0uZGVzdHJveTsKICAgIHN0cmVhbS5faXNTdGRpbyA9IHRydWU7CiAgICBzdHJlYW0ub25jZSgiY2xvc2UiLCAoKSA9PiB3cml0ZXI/LmNsb3NlKCkpOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyZWFtLCB7CiAgICAgIGNvbHVtbnM6IHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICBnZXQ6ICgpID0+IERlbm8uaXNhdHR5Py4od3JpdGVyPy5yaWQpID8gRGVuby5jb25zb2xlU2l6ZT8uKHdyaXRlcj8ucmlkKS5jb2x1bW5zIDogdm9pZCAwCiAgICAgIH0sCiAgICAgIHJvd3M6IHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICBnZXQ6ICgpID0+IERlbm8uaXNhdHR5Py4od3JpdGVyPy5yaWQpID8gRGVuby5jb25zb2xlU2l6ZT8uKHdyaXRlcj8ucmlkKS5yb3dzIDogdm9pZCAwCiAgICAgIH0sCiAgICAgIGlzVFRZOiB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgZ2V0OiAoKSA9PiBEZW5vLmlzYXR0eT8uKHdyaXRlcj8ucmlkKQogICAgICB9LAogICAgICBnZXRXaW5kb3dTaXplOiB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgdmFsdWU6ICgpID0+IERlbm8uaXNhdHR5Py4od3JpdGVyPy5yaWQpID8gT2JqZWN0LnZhbHVlcyhEZW5vLmNvbnNvbGVTaXplPy4od3JpdGVyPy5yaWQpKSA6IHZvaWQgMAogICAgICB9CiAgICB9KTsKICAgIGlmIChEZW5vLmlzYXR0eT8uKHdyaXRlcj8ucmlkKSkgewogICAgICBzdHJlYW0uY3Vyc29yVG8gPSBmdW5jdGlvbih4MjEsIHkxNywgY2FsbGJhY2spIHsKICAgICAgICByZXR1cm4gY3Vyc29yVG8odGhpcywgeDIxLCB5MTcsIGNhbGxiYWNrKTsKICAgICAgfTsKICAgICAgc3RyZWFtLm1vdmVDdXJzb3IgPSBmdW5jdGlvbihkeCwgZHksIGNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG1vdmVDdXJzb3IodGhpcywgZHgsIGR5LCBjYWxsYmFjayk7CiAgICAgIH07CiAgICAgIHN0cmVhbS5jbGVhckxpbmUgPSBmdW5jdGlvbihkaXIsIGNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIGNsZWFyTGluZSh0aGlzLCBkaXIsIGNhbGxiYWNrKTsKICAgICAgfTsKICAgICAgc3RyZWFtLmNsZWFyU2NyZWVuRG93biA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIGNsZWFyU2NyZWVuRG93bih0aGlzLCBjYWxsYmFjayk7CiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gc3RyZWFtOwogIH0KICB2YXIgc3RkZXJyID0gc3RkaW8uc3RkZXJyID0gY3JlYXRlV3JpdGFibGVTdGRpb1N0cmVhbSgKICAgIERlbm8uc3RkZXJyLAogICAgInN0ZGVyciIKICApOwogIHZhciBzdGRvdXQgPSBzdGRpby5zdGRvdXQgPSBjcmVhdGVXcml0YWJsZVN0ZGlvU3RyZWFtKAogICAgRGVuby5zdGRvdXQsCiAgICAic3Rkb3V0IgogICk7CiAgdmFyIHN0ZGluID0gc3RkaW8uc3RkaW4gPSBuZXcgcmVhZGFibGVfZGVmYXVsdCh7CiAgICBoaWdoV2F0ZXJNYXJrOiAwLAogICAgZW1pdENsb3NlOiBmYWxzZSwKICAgIHJlYWQoc2l6ZSkgewogICAgICBjb25zdCBwMTggPSBCdWZmZXI0LmFsbG9jKHNpemUgfHwgMTYgKiAxMDI0KTsKICAgICAgaWYgKCFEZW5vLnN0ZGluKSB7CiAgICAgICAgdGhpcy5kZXN0cm95KAogICAgICAgICAgbmV3IEVycm9yKCJEZW5vLnN0ZGluIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIpCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgRGVuby5zdGRpbi5yZWFkKHAxOCkudGhlbigobGVuZ3RoKSA9PiB7CiAgICAgICAgdGhpcy5wdXNoKGxlbmd0aCA9PT0gbnVsbCA/IG51bGwgOiBwMTguc2xpY2UoMCwgbGVuZ3RoKSk7CiAgICAgIH0sIChlcnJvcikgPT4gewogICAgICAgIHRoaXMuZGVzdHJveShlcnJvcik7CiAgICAgIH0pOwogICAgfQogIH0pOwogIHN0ZGluLm9uKCJjbG9zZSIsICgpID0+IERlbm8uc3RkaW4/LmNsb3NlKCkpOwogIHN0ZGluLmZkID0gRGVuby5zdGRpbj8ucmlkID8/IC0xOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGRpbiwgImlzVFRZIiwgewogICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgIGdldCgpIHsKICAgICAgcmV0dXJuIERlbm8uaXNhdHR5Py4oRGVuby5zdGRpbi5yaWQpOwogICAgfQogIH0pOwogIHN0ZGluLl9pc1Jhd01vZGUgPSBmYWxzZTsKICBzdGRpbi5zZXRSYXdNb2RlID0gKGVuYWJsZSkgPT4gewogICAgc2V0UmF3Py4oRGVuby5zdGRpbj8ucmlkLCBlbmFibGUpOwogICAgc3RkaW4uX2lzUmF3TW9kZSA9IGVuYWJsZTsKICAgIHJldHVybiBzdGRpbjsKICB9OwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGRpbiwgImlzUmF3IiwgewogICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgIGdldCgpIHsKICAgICAgcmV0dXJuIHN0ZGluLl9pc1Jhd01vZGU7CiAgICB9CiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2FzeW5jX3dyYXAudHMKICB2YXIgYXN5bmNfd3JhcF9leHBvcnRzID0ge307CiAgX19leHBvcnQoYXN5bmNfd3JhcF9leHBvcnRzLCB7CiAgICBBc3luY1dyYXA6ICgpID0+IEFzeW5jV3JhcCwKICAgIFVpZEZpZWxkczogKCkgPT4gVWlkRmllbGRzLAogICAgYXN5bmNJZEZpZWxkczogKCkgPT4gYXN5bmNJZEZpZWxkcywKICAgIGFzeW5jX2hvb2tfZmllbGRzOiAoKSA9PiBhc3luY0hvb2tGaWVsZHMsCiAgICBjb25zdGFudHM6ICgpID0+IGNvbnN0YW50czIsCiAgICBuZXdBc3luY0lkOiAoKSA9PiBuZXdBc3luY0lkLAogICAgcHJvdmlkZXJUeXBlOiAoKSA9PiBwcm92aWRlclR5cGUsCiAgICByZWdpc3RlckRlc3Ryb3lIb29rOiAoKSA9PiByZWdpc3RlckRlc3Ryb3lIb29rCiAgfSk7CiAgZnVuY3Rpb24gcmVnaXN0ZXJEZXN0cm95SG9vayhfdGFyZ2V0LCBfYXN5bmNJZCwgX3Byb3ApIHsKICB9CiAgdmFyIGNvbnN0YW50czIgPSAvKiBAX19QVVJFX18gKi8gKChjb25zdGFudHM1KSA9PiB7CiAgICBjb25zdGFudHM1W2NvbnN0YW50czVbImtJbml0Il0gPSAwXSA9ICJrSW5pdCI7CiAgICBjb25zdGFudHM1W2NvbnN0YW50czVbImtCZWZvcmUiXSA9IDFdID0gImtCZWZvcmUiOwogICAgY29uc3RhbnRzNVtjb25zdGFudHM1WyJrQWZ0ZXIiXSA9IDJdID0gImtBZnRlciI7CiAgICBjb25zdGFudHM1W2NvbnN0YW50czVbImtEZXN0cm95Il0gPSAzXSA9ICJrRGVzdHJveSI7CiAgICBjb25zdGFudHM1W2NvbnN0YW50czVbImtQcm9taXNlUmVzb2x2ZSJdID0gNF0gPSAia1Byb21pc2VSZXNvbHZlIjsKICAgIGNvbnN0YW50czVbY29uc3RhbnRzNVsia1RvdGFscyJdID0gNV0gPSAia1RvdGFscyI7CiAgICBjb25zdGFudHM1W2NvbnN0YW50czVbImtDaGVjayJdID0gNl0gPSAia0NoZWNrIjsKICAgIGNvbnN0YW50czVbY29uc3RhbnRzNVsia0V4ZWN1dGlvbkFzeW5jSWQiXSA9IDddID0gImtFeGVjdXRpb25Bc3luY0lkIjsKICAgIGNvbnN0YW50czVbY29uc3RhbnRzNVsia1RyaWdnZXJBc3luY0lkIl0gPSA4XSA9ICJrVHJpZ2dlckFzeW5jSWQiOwogICAgY29uc3RhbnRzNVtjb25zdGFudHM1WyJrQXN5bmNJZENvdW50ZXIiXSA9IDldID0gImtBc3luY0lkQ291bnRlciI7CiAgICBjb25zdGFudHM1W2NvbnN0YW50czVbImtEZWZhdWx0VHJpZ2dlckFzeW5jSWQiXSA9IDEwXSA9ICJrRGVmYXVsdFRyaWdnZXJBc3luY0lkIjsKICAgIGNvbnN0YW50czVbY29uc3RhbnRzNVsia1VzZXNFeGVjdXRpb25Bc3luY1Jlc291cmNlIl0gPSAxMV0gPSAia1VzZXNFeGVjdXRpb25Bc3luY1Jlc291cmNlIjsKICAgIGNvbnN0YW50czVbY29uc3RhbnRzNVsia1N0YWNrTGVuZ3RoIl0gPSAxMl0gPSAia1N0YWNrTGVuZ3RoIjsKICAgIHJldHVybiBjb25zdGFudHM1OwogIH0pKGNvbnN0YW50czIgfHwge30pOwogIHZhciBhc3luY0hvb2tGaWVsZHMgPSBuZXcgVWludDMyQXJyYXkoT2JqZWN0LmtleXMoY29uc3RhbnRzMikubGVuZ3RoKTsKICBmdW5jdGlvbiBuZXdBc3luY0lkKCkgewogICAgcmV0dXJuICsrYXN5bmNJZEZpZWxkc1s5IC8qIGtBc3luY0lkQ291bnRlciAqL107CiAgfQogIHZhciBVaWRGaWVsZHMgPSAvKiBAX19QVVJFX18gKi8gKChVaWRGaWVsZHMyKSA9PiB7CiAgICBVaWRGaWVsZHMyW1VpZEZpZWxkczJbImtFeGVjdXRpb25Bc3luY0lkIl0gPSAwXSA9ICJrRXhlY3V0aW9uQXN5bmNJZCI7CiAgICBVaWRGaWVsZHMyW1VpZEZpZWxkczJbImtUcmlnZ2VyQXN5bmNJZCJdID0gMV0gPSAia1RyaWdnZXJBc3luY0lkIjsKICAgIFVpZEZpZWxkczJbVWlkRmllbGRzMlsia0FzeW5jSWRDb3VudGVyIl0gPSAyXSA9ICJrQXN5bmNJZENvdW50ZXIiOwogICAgVWlkRmllbGRzMltVaWRGaWVsZHMyWyJrRGVmYXVsdFRyaWdnZXJBc3luY0lkIl0gPSAzXSA9ICJrRGVmYXVsdFRyaWdnZXJBc3luY0lkIjsKICAgIFVpZEZpZWxkczJbVWlkRmllbGRzMlsia1VpZEZpZWxkc0NvdW50Il0gPSA0XSA9ICJrVWlkRmllbGRzQ291bnQiOwogICAgcmV0dXJuIFVpZEZpZWxkczI7CiAgfSkoVWlkRmllbGRzIHx8IHt9KTsKICB2YXIgYXN5bmNJZEZpZWxkcyA9IG5ldyBGbG9hdDY0QXJyYXkoT2JqZWN0LmtleXMoVWlkRmllbGRzKS5sZW5ndGgpOwogIGFzeW5jSWRGaWVsZHNbMiAvKiBrQXN5bmNJZENvdW50ZXIgKi9dID0gMTsKICBhc3luY0lkRmllbGRzWzMgLyoga0RlZmF1bHRUcmlnZ2VyQXN5bmNJZCAqL10gPSAtMTsKICB2YXIgcHJvdmlkZXJUeXBlID0gLyogQF9fUFVSRV9fICovICgocHJvdmlkZXJUeXBlMykgPT4gewogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJOT05FIl0gPSAwXSA9ICJOT05FIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siRElSSEFORExFIl0gPSAxXSA9ICJESVJIQU5ETEUiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJETlNDSEFOTkVMIl0gPSAyXSA9ICJETlNDSEFOTkVMIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siRUxESElTVE9HUkFNIl0gPSAzXSA9ICJFTERISVNUT0dSQU0iOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJGSUxFSEFORExFIl0gPSA0XSA9ICJGSUxFSEFORExFIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siRklMRUhBTkRMRUNMT1NFUkVRIl0gPSA1XSA9ICJGSUxFSEFORExFQ0xPU0VSRVEiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJGSVhFRFNJWkVCTE9CQ09QWSJdID0gNl0gPSAiRklYRURTSVpFQkxPQkNPUFkiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJGU0VWRU5UV1JBUCJdID0gN10gPSAiRlNFVkVOVFdSQVAiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJGU1JFUUNBTExCQUNLIl0gPSA4XSA9ICJGU1JFUUNBTExCQUNLIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siRlNSRVFQUk9NSVNFIl0gPSA5XSA9ICJGU1JFUVBST01JU0UiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJHRVRBRERSSU5GT1JFUVdSQVAiXSA9IDEwXSA9ICJHRVRBRERSSU5GT1JFUVdSQVAiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJHRVROQU1FSU5GT1JFUVdSQVAiXSA9IDExXSA9ICJHRVROQU1FSU5GT1JFUVdSQVAiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJIRUFQU05BUFNIT1QiXSA9IDEyXSA9ICJIRUFQU05BUFNIT1QiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJIVFRQMlNFU1NJT04iXSA9IDEzXSA9ICJIVFRQMlNFU1NJT04iOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJIVFRQMlNUUkVBTSJdID0gMTRdID0gIkhUVFAyU1RSRUFNIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siSFRUUDJQSU5HIl0gPSAxNV0gPSAiSFRUUDJQSU5HIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siSFRUUDJTRVRUSU5HUyJdID0gMTZdID0gIkhUVFAyU0VUVElOR1MiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJIVFRQSU5DT01JTkdNRVNTQUdFIl0gPSAxN10gPSAiSFRUUElOQ09NSU5HTUVTU0FHRSI7CiAgICBwcm92aWRlclR5cGUzW3Byb3ZpZGVyVHlwZTNbIkhUVFBDTElFTlRSRVFVRVNUIl0gPSAxOF0gPSAiSFRUUENMSUVOVFJFUVVFU1QiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJKU1NUUkVBTSJdID0gMTldID0gIkpTU1RSRUFNIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siSlNVRFBXUkFQIl0gPSAyMF0gPSAiSlNVRFBXUkFQIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siTUVTU0FHRVBPUlQiXSA9IDIxXSA9ICJNRVNTQUdFUE9SVCI7CiAgICBwcm92aWRlclR5cGUzW3Byb3ZpZGVyVHlwZTNbIlBJUEVDT05ORUNUV1JBUCJdID0gMjJdID0gIlBJUEVDT05ORUNUV1JBUCI7CiAgICBwcm92aWRlclR5cGUzW3Byb3ZpZGVyVHlwZTNbIlBJUEVTRVJWRVJXUkFQIl0gPSAyM10gPSAiUElQRVNFUlZFUldSQVAiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJQSVBFV1JBUCJdID0gMjRdID0gIlBJUEVXUkFQIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siUFJPQ0VTU1dSQVAiXSA9IDI1XSA9ICJQUk9DRVNTV1JBUCI7CiAgICBwcm92aWRlclR5cGUzW3Byb3ZpZGVyVHlwZTNbIlBST01JU0UiXSA9IDI2XSA9ICJQUk9NSVNFIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siUVVFUllXUkFQIl0gPSAyN10gPSAiUVVFUllXUkFQIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siU0hVVERPV05XUkFQIl0gPSAyOF0gPSAiU0hVVERPV05XUkFQIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siU0lHTkFMV1JBUCJdID0gMjldID0gIlNJR05BTFdSQVAiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJTVEFUV0FUQ0hFUiJdID0gMzBdID0gIlNUQVRXQVRDSEVSIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siU1RSRUFNUElQRSJdID0gMzFdID0gIlNUUkVBTVBJUEUiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJUQ1BDT05ORUNUV1JBUCJdID0gMzJdID0gIlRDUENPTk5FQ1RXUkFQIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siVENQU0VSVkVSV1JBUCJdID0gMzNdID0gIlRDUFNFUlZFUldSQVAiOwogICAgcHJvdmlkZXJUeXBlM1twcm92aWRlclR5cGUzWyJUQ1BXUkFQIl0gPSAzNF0gPSAiVENQV1JBUCI7CiAgICBwcm92aWRlclR5cGUzW3Byb3ZpZGVyVHlwZTNbIlRUWVdSQVAiXSA9IDM1XSA9ICJUVFlXUkFQIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siVURQU0VORFdSQVAiXSA9IDM2XSA9ICJVRFBTRU5EV1JBUCI7CiAgICBwcm92aWRlclR5cGUzW3Byb3ZpZGVyVHlwZTNbIlVEUFdSQVAiXSA9IDM3XSA9ICJVRFBXUkFQIjsKICAgIHByb3ZpZGVyVHlwZTNbcHJvdmlkZXJUeXBlM1siU0lHSU5UV0FUQ0hET0ciXSA9IDM4XSA9ICJTSUdJTlRXQVRDSERPRyI7CiAgICBwcm92aWRlclR5cGUzW3Byb3ZpZGVyVHlwZTNbIldPUktFUiJdID0gMzldID0gIldPUktFUiI7CiAgICBwcm92aWRlclR5cGUzW3Byb3ZpZGVyVHlwZTNbIldPUktFUkhFQVBTTkFQU0hPVCJdID0gNDBdID0gIldPUktFUkhFQVBTTkFQU0hPVCI7CiAgICBwcm92aWRlclR5cGUzW3Byb3ZpZGVyVHlwZTNbIldSSVRFV1JBUCJdID0gNDFdID0gIldSSVRFV1JBUCI7CiAgICBwcm92aWRlclR5cGUzW3Byb3ZpZGVyVHlwZTNbIlpMSUIiXSA9IDQyXSA9ICJaTElCIjsKICAgIHJldHVybiBwcm92aWRlclR5cGUzOwogIH0pKHByb3ZpZGVyVHlwZSB8fCB7fSk7CiAgdmFyIGtJbnZhbGlkQXN5bmNJZCA9IC0xOwogIHZhciBBc3luY1dyYXAgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcihwcm92aWRlcikgewogICAgICB0aGlzLnByb3ZpZGVyID0gMCAvKiBOT05FICovOwogICAgICB0aGlzLmFzeW5jSWQgPSBrSW52YWxpZEFzeW5jSWQ7CiAgICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjsKICAgICAgdGhpcy5nZXRBc3luY0lkKCk7CiAgICB9CiAgICBnZXRBc3luY0lkKCkgewogICAgICB0aGlzLmFzeW5jSWQgPSB0aGlzLmFzeW5jSWQgPT09IGtJbnZhbGlkQXN5bmNJZCA/IG5ld0FzeW5jSWQoKSA6IHRoaXMuYXN5bmNJZDsKICAgICAgcmV0dXJuIHRoaXMuYXN5bmNJZDsKICAgIH0KICAgIGdldFByb3ZpZGVyVHlwZSgpIHsKICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXI7CiAgICB9CiAgfTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvY29uZmlnLnRzCiAgdmFyIGNvbmZpZ19leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2NhcmVzX3dyYXAudHMKICB2YXIgY2FyZXNfd3JhcF9leHBvcnRzID0ge307CiAgX19leHBvcnQoY2FyZXNfd3JhcF9leHBvcnRzLCB7CiAgICBDaGFubmVsV3JhcDogKCkgPT4gQ2hhbm5lbFdyYXAsCiAgICBHZXRBZGRySW5mb1JlcVdyYXA6ICgpID0+IEdldEFkZHJJbmZvUmVxV3JhcCwKICAgIFF1ZXJ5UmVxV3JhcDogKCkgPT4gUXVlcnlSZXFXcmFwLAogICAgZ2V0YWRkcmluZm86ICgpID0+IGdldGFkZHJpbmZvLAogICAgc3RyZXJyb3I6ICgpID0+IHN0cmVycm9yCiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9uZXQudHMKICB2YXIgdjRTZWcgPSAiKD86WzAtOV18WzEtOV1bMC05XXwxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTVdKSI7CiAgdmFyIHY0U3RyID0gYCgke3Y0U2VnfVsuXSl7M30ke3Y0U2VnfWA7CiAgdmFyIElQdjRSZWcgPSBuZXcgUmVnRXhwKGBeJHt2NFN0cn0kYCk7CiAgdmFyIHY2U2VnID0gIig/OlswLTlhLWZBLUZdezEsNH0pIjsKICB2YXIgSVB2NlJlZyA9IG5ldyBSZWdFeHAoCiAgICBgXigoPzoke3Y2U2VnfTopezd9KD86JHt2NlNlZ318Oil8KD86JHt2NlNlZ306KXs2fSg/OiR7djRTdHJ9fDoke3Y2U2VnfXw6KXwoPzoke3Y2U2VnfTopezV9KD86OiR7djRTdHJ9fCg6JHt2NlNlZ30pezEsMn18Oil8KD86JHt2NlNlZ306KXs0fSg/Oig6JHt2NlNlZ30pezAsMX06JHt2NFN0cn18KDoke3Y2U2VnfSl7MSwzfXw6KXwoPzoke3Y2U2VnfTopezN9KD86KDoke3Y2U2VnfSl7MCwyfToke3Y0U3RyfXwoOiR7djZTZWd9KXsxLDR9fDopfCg/OiR7djZTZWd9Oil7Mn0oPzooOiR7djZTZWd9KXswLDN9OiR7djRTdHJ9fCg6JHt2NlNlZ30pezEsNX18Oil8KD86JHt2NlNlZ306KXsxfSg/Oig6JHt2NlNlZ30pezAsNH06JHt2NFN0cn18KDoke3Y2U2VnfSl7MSw2fXw6KXwoPzo6KCg/Ojoke3Y2U2VnfSl7MCw1fToke3Y0U3RyfXwoPzo6JHt2NlNlZ30pezEsN318OikpKSglWzAtOWEtekEtWi0uOl17MSx9KT8kYAogICk7CiAgZnVuY3Rpb24gaXNJUHY0KGlwKSB7CiAgICByZXR1cm4gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmNhbGwoSVB2NFJlZywgaXApOwogIH0KICBmdW5jdGlvbiBpc0lQdjYoaXApIHsKICAgIHJldHVybiBSZWdFeHAucHJvdG90eXBlLnRlc3QuY2FsbChJUHY2UmVnLCBpcCk7CiAgfQogIGZ1bmN0aW9uIGlzSVAoaXApIHsKICAgIGlmIChpc0lQdjQoaXApKSB7CiAgICAgIHJldHVybiA0OwogICAgfQogICAgaWYgKGlzSVB2NihpcCkpIHsKICAgICAgcmV0dXJuIDY7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CiAgdmFyIG5vcm1hbGl6ZWRBcmdzU3ltYm9sID0gU3ltYm9sKCJub3JtYWxpemVkQXJncyIpOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9hcmVzLnRzCiAgdmFyIEFSRVNfQUlfQ0FOT05OQU1FID0gMSA8PCAwOwogIHZhciBBUkVTX0FJX05VTUVSSUNIT1NUID0gMSA8PCAxOwogIHZhciBBUkVTX0FJX1BBU1NJVkUgPSAxIDw8IDI7CiAgdmFyIEFSRVNfQUlfTlVNRVJJQ1NFUlYgPSAxIDw8IDM7CiAgdmFyIEFJX1Y0TUFQUEVEID0gMSA8PCA0OwogIHZhciBBSV9BTEwgPSAxIDw8IDU7CiAgdmFyIEFJX0FERFJDT05GSUcgPSAxIDw8IDY7CiAgdmFyIEFSRVNfQUlfTk9TT1JUID0gMSA8PCA3OwogIHZhciBBUkVTX0FJX0VOVkhPU1RTID0gMSA8PCA4OwogIGZ1bmN0aW9uIGFyZXNfc3RyZXJyb3IoY29kZSkgewogICAgY29uc3QgZXJyb3JUZXh0ID0gWwogICAgICAiU3VjY2Vzc2Z1bCBjb21wbGV0aW9uIiwKICAgICAgIkROUyBzZXJ2ZXIgcmV0dXJuZWQgYW5zd2VyIHdpdGggbm8gZGF0YSIsCiAgICAgICJETlMgc2VydmVyIGNsYWltcyBxdWVyeSB3YXMgbWlzZm9ybWF0dGVkIiwKICAgICAgIkROUyBzZXJ2ZXIgcmV0dXJuZWQgZ2VuZXJhbCBmYWlsdXJlIiwKICAgICAgIkRvbWFpbiBuYW1lIG5vdCBmb3VuZCIsCiAgICAgICJETlMgc2VydmVyIGRvZXMgbm90IGltcGxlbWVudCByZXF1ZXN0ZWQgb3BlcmF0aW9uIiwKICAgICAgIkROUyBzZXJ2ZXIgcmVmdXNlZCBxdWVyeSIsCiAgICAgICJNaXNmb3JtYXR0ZWQgRE5TIHF1ZXJ5IiwKICAgICAgIk1pc2Zvcm1hdHRlZCBkb21haW4gbmFtZSIsCiAgICAgICJVbnN1cHBvcnRlZCBhZGRyZXNzIGZhbWlseSIsCiAgICAgICJNaXNmb3JtYXR0ZWQgRE5TIHJlcGx5IiwKICAgICAgIkNvdWxkIG5vdCBjb250YWN0IEROUyBzZXJ2ZXJzIiwKICAgICAgIlRpbWVvdXQgd2hpbGUgY29udGFjdGluZyBETlMgc2VydmVycyIsCiAgICAgICJFbmQgb2YgZmlsZSIsCiAgICAgICJFcnJvciByZWFkaW5nIGZpbGUiLAogICAgICAiT3V0IG9mIG1lbW9yeSIsCiAgICAgICJDaGFubmVsIGlzIGJlaW5nIGRlc3Ryb3llZCIsCiAgICAgICJNaXNmb3JtYXR0ZWQgc3RyaW5nIiwKICAgICAgIklsbGVnYWwgZmxhZ3Mgc3BlY2lmaWVkIiwKICAgICAgIkdpdmVuIGhvc3RuYW1lIGlzIG5vdCBudW1lcmljIiwKICAgICAgIklsbGVnYWwgaGludHMgZmxhZ3Mgc3BlY2lmaWVkIiwKICAgICAgImMtYXJlcyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIG5vdCB5ZXQgcGVyZm9ybWVkIiwKICAgICAgIkVycm9yIGxvYWRpbmcgaXBobHBhcGkuZGxsIiwKICAgICAgIkNvdWxkIG5vdCBmaW5kIEdldE5ldHdvcmtQYXJhbXMgZnVuY3Rpb24iLAogICAgICAiRE5TIHF1ZXJ5IGNhbmNlbGxlZCIKICAgIF07CiAgICBpZiAoY29kZSA+PSAwICYmIGNvZGUgPCBlcnJvclRleHQubGVuZ3RoKSB7CiAgICAgIHJldHVybiBlcnJvclRleHRbY29kZV07CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gInVua25vd24iOwogICAgfQogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvY2FyZXNfd3JhcC50cwogIHZhciBHZXRBZGRySW5mb1JlcVdyYXAgPSBjbGFzcyBleHRlbmRzIEFzeW5jV3JhcCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoMTAgLyogR0VUQUREUklORk9SRVFXUkFQICovKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGdldGFkZHJpbmZvKHJlcSwgaG9zdG5hbWUsIGZhbWlseSwgX2hpbnRzLCB2ZXJiYXRpbSkgewogICAgbGV0IGFkZHJlc3NlcyA9IFtdOwogICAgY29uc3QgcmVjb3JkVHlwZXMgPSBbXTsKICAgIGlmIChmYW1pbHkgPT09IDAgfHwgZmFtaWx5ID09PSA0KSB7CiAgICAgIHJlY29yZFR5cGVzLnB1c2goIkEiKTsKICAgIH0KICAgIGlmIChmYW1pbHkgPT09IDAgfHwgZmFtaWx5ID09PSA2KSB7CiAgICAgIHJlY29yZFR5cGVzLnB1c2goIkFBQUEiKTsKICAgIH0KICAgIChhc3luYyAoKSA9PiB7CiAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCgKICAgICAgICByZWNvcmRUeXBlcy5tYXAoCiAgICAgICAgICAocmVjb3JkVHlwZSkgPT4gRGVuby5yZXNvbHZlRG5zKGhvc3RuYW1lLCByZWNvcmRUeXBlKS50aGVuKChyZWNvcmRzKSA9PiB7CiAgICAgICAgICAgIHJlY29yZHMuZm9yRWFjaCgocmVjb3JkKSA9PiBhZGRyZXNzZXMucHVzaChyZWNvcmQpKTsKICAgICAgICAgIH0pCiAgICAgICAgKQogICAgICApOwogICAgICBjb25zdCBlcnJvciA9IGFkZHJlc3Nlcy5sZW5ndGggPyAwIDogY29kZU1hcC5nZXQoIkVBSV9OT0RBVEEiKTsKICAgICAgaWYgKCF2ZXJiYXRpbSkgewogICAgICAgIGFkZHJlc3Nlcy5zb3J0KChhNCwgYjI1KSA9PiB7CiAgICAgICAgICBpZiAoaXNJUHY0KGE0KSkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICB9IGVsc2UgaWYgKGlzSVB2NChiMjUpKSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGlzV2luZG93czIgJiYgaG9zdG5hbWUgPT09ICJsb2NhbGhvc3QiKSB7CiAgICAgICAgYWRkcmVzc2VzID0gYWRkcmVzc2VzLmZpbHRlcigoYWRkcmVzcykgPT4gaXNJUHY0KGFkZHJlc3MpKTsKICAgICAgfQogICAgICByZXEub25jb21wbGV0ZShlcnJvciwgYWRkcmVzc2VzKTsKICAgIH0pKCk7CiAgICByZXR1cm4gMDsKICB9CiAgdmFyIFF1ZXJ5UmVxV3JhcCA9IGNsYXNzIGV4dGVuZHMgQXN5bmNXcmFwIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigyNyAvKiBRVUVSWVdSQVAgKi8pOwogICAgfQogIH07CiAgZnVuY3Rpb24gZnFkblRvSG9zdG5hbWUoZnFkbikgewogICAgcmV0dXJuIGZxZG4ucmVwbGFjZSgvXC4kLywgIiIpOwogIH0KICBmdW5jdGlvbiBjb21wcmVzc0lQdjYoYWRkcmVzcykgewogICAgY29uc3QgZm9ybWF0dGVkID0gYWRkcmVzcy5yZXBsYWNlKC9cYig/OjArOil7Mix9LywgIjoiKTsKICAgIGNvbnN0IGZpbmFsQWRkcmVzcyA9IGZvcm1hdHRlZC5zcGxpdCgiOiIpLm1hcCgob2N0ZXQpID0+IHsKICAgICAgaWYgKG9jdGV0Lm1hdGNoKC9eXGQrXC5cZCtcLlxkK1wuXGQrJC8pKSB7CiAgICAgICAgcmV0dXJuIE51bWJlcihvY3RldC5yZXBsYWNlQWxsKCIuIiwgIiIpKS50b1N0cmluZygxNik7CiAgICAgIH0KICAgICAgcmV0dXJuIG9jdGV0LnJlcGxhY2UoL1xiMCsvZywgIiIpOwogICAgfSkuam9pbigiOiIpOwogICAgcmV0dXJuIGZpbmFsQWRkcmVzczsKICB9CiAgdmFyIENoYW5uZWxXcmFwID0gY2xhc3MgZXh0ZW5kcyBBc3luY1dyYXAgewogICAgI3NlcnZlcnMgPSBbXTsKICAgICN0aW1lb3V0OwogICAgI3RyaWVzOwogICAgY29uc3RydWN0b3IodGltZW91dCwgdHJpZXMpIHsKICAgICAgc3VwZXIoMiAvKiBETlNDSEFOTkVMICovKTsKICAgICAgdGhpcy4jdGltZW91dCA9IHRpbWVvdXQ7CiAgICAgIHRoaXMuI3RyaWVzID0gdHJpZXM7CiAgICB9CiAgICBhc3luYyAjcXVlcnkocXVlcnksIHJlY29yZFR5cGUpIHsKICAgICAgbGV0IGNvZGU7CiAgICAgIGxldCByZXQ7CiAgICAgIGlmICh0aGlzLiNzZXJ2ZXJzLmxlbmd0aCkgewogICAgICAgIGZvciAoY29uc3QgW2lwQWRkciwgcG9ydF0gb2YgdGhpcy4jc2VydmVycykgewogICAgICAgICAgY29uc3QgcmVzb2x2ZU9wdGlvbnMgPSB7CiAgICAgICAgICAgIG5hbWVTZXJ2ZXI6IHsKICAgICAgICAgICAgICBpcEFkZHIsCiAgICAgICAgICAgICAgcG9ydAogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgKHsgY29kZSwgcmV0IH0gPSBhd2FpdCB0aGlzLiNyZXNvbHZlKAogICAgICAgICAgICBxdWVyeSwKICAgICAgICAgICAgcmVjb3JkVHlwZSwKICAgICAgICAgICAgcmVzb2x2ZU9wdGlvbnMKICAgICAgICAgICkpOwogICAgICAgICAgaWYgKGNvZGUgPT09IDAgfHwgY29kZSA9PT0gY29kZU1hcC5nZXQoIkVBSV9OT0RBVEEiKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgKHsgY29kZSwgcmV0IH0gPSBhd2FpdCB0aGlzLiNyZXNvbHZlKHF1ZXJ5LCByZWNvcmRUeXBlKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgY29kZSwgcmV0IH07CiAgICB9CiAgICBhc3luYyAjcmVzb2x2ZShxdWVyeSwgcmVjb3JkVHlwZSwgcmVzb2x2ZU9wdGlvbnMpIHsKICAgICAgbGV0IHJldCA9IFtdOwogICAgICBsZXQgY29kZSA9IDA7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0ID0gYXdhaXQgRGVuby5yZXNvbHZlRG5zKHF1ZXJ5LCByZWNvcmRUeXBlLCByZXNvbHZlT3B0aW9ucyk7CiAgICAgIH0gY2F0Y2ggKGU1KSB7CiAgICAgICAgaWYgKGU1IGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQpIHsKICAgICAgICAgIGNvZGUgPSBjb2RlTWFwLmdldCgiRUFJX05PREFUQSIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb2RlID0gY29kZU1hcC5nZXQoIlVOS05PV04iKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgY29kZSwgcmV0IH07CiAgICB9CiAgICBxdWVyeUFueShyZXEsIG5hbWUpIHsKICAgICAgKGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCByZWNvcmRzID0gW107CiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFsKICAgICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsICJBIikudGhlbigoeyByZXQgfSkgPT4gewogICAgICAgICAgICByZXQuZm9yRWFjaCgocmVjb3JkKSA9PiByZWNvcmRzLnB1c2goeyB0eXBlOiAiQSIsIGFkZHJlc3M6IHJlY29yZCB9KSk7CiAgICAgICAgICB9KSwKICAgICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsICJBQUFBIikudGhlbigoeyByZXQgfSkgPT4gewogICAgICAgICAgICByZXQuZm9yRWFjaCgKICAgICAgICAgICAgICAocmVjb3JkKSA9PiByZWNvcmRzLnB1c2goeyB0eXBlOiAiQUFBQSIsIGFkZHJlc3M6IGNvbXByZXNzSVB2NihyZWNvcmQpIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgICB9KSwKICAgICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsICJDQUEiKS50aGVuKCh7IHJldCB9KSA9PiB7CiAgICAgICAgICAgIHJldC5mb3JFYWNoKAogICAgICAgICAgICAgICh7IGNyaXRpY2FsLCB0YWcsIHZhbHVlIH0pID0+IHJlY29yZHMucHVzaCh7CiAgICAgICAgICAgICAgICB0eXBlOiAiQ0FBIiwKICAgICAgICAgICAgICAgIFt0YWddOiB2YWx1ZSwKICAgICAgICAgICAgICAgIGNyaXRpY2FsOiArY3JpdGljYWwgJiYgMTI4CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgKTsKICAgICAgICAgIH0pLAogICAgICAgICAgdGhpcy4jcXVlcnkobmFtZSwgIkNOQU1FIikudGhlbigoeyByZXQgfSkgPT4gewogICAgICAgICAgICByZXQuZm9yRWFjaCgKICAgICAgICAgICAgICAocmVjb3JkKSA9PiByZWNvcmRzLnB1c2goeyB0eXBlOiAiQ05BTUUiLCB2YWx1ZTogcmVjb3JkIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgICB9KSwKICAgICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsICJNWCIpLnRoZW4oKHsgcmV0IH0pID0+IHsKICAgICAgICAgICAgcmV0LmZvckVhY2goCiAgICAgICAgICAgICAgKHsgcHJlZmVyZW5jZSwgZXhjaGFuZ2UgfSkgPT4gcmVjb3Jkcy5wdXNoKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJNWCIsCiAgICAgICAgICAgICAgICBwcmlvcml0eTogcHJlZmVyZW5jZSwKICAgICAgICAgICAgICAgIGV4Y2hhbmdlOiBmcWRuVG9Ib3N0bmFtZShleGNoYW5nZSkKICAgICAgICAgICAgICB9KQogICAgICAgICAgICApOwogICAgICAgICAgfSksCiAgICAgICAgICB0aGlzLiNxdWVyeShuYW1lLCAiTkFQVFIiKS50aGVuKCh7IHJldCB9KSA9PiB7CiAgICAgICAgICAgIHJldC5mb3JFYWNoKAogICAgICAgICAgICAgICh7IG9yZGVyLCBwcmVmZXJlbmNlLCBmbGFncywgc2VydmljZXMsIHJlZ2V4cDogcmVnZXhwMiwgcmVwbGFjZW1lbnQgfSkgPT4gcmVjb3Jkcy5wdXNoKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJOQVBUUiIsCiAgICAgICAgICAgICAgICBvcmRlciwKICAgICAgICAgICAgICAgIHByZWZlcmVuY2UsCiAgICAgICAgICAgICAgICBmbGFncywKICAgICAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2VzLAogICAgICAgICAgICAgICAgcmVnZXhwOiByZWdleHAyLAogICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQKICAgICAgICAgICAgICB9KQogICAgICAgICAgICApOwogICAgICAgICAgfSksCiAgICAgICAgICB0aGlzLiNxdWVyeShuYW1lLCAiTlMiKS50aGVuKCh7IHJldCB9KSA9PiB7CiAgICAgICAgICAgIHJldC5mb3JFYWNoKAogICAgICAgICAgICAgIChyZWNvcmQpID0+IHJlY29yZHMucHVzaCh7IHR5cGU6ICJOUyIsIHZhbHVlOiBmcWRuVG9Ib3N0bmFtZShyZWNvcmQpIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgICB9KSwKICAgICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsICJQVFIiKS50aGVuKCh7IHJldCB9KSA9PiB7CiAgICAgICAgICAgIHJldC5mb3JFYWNoKAogICAgICAgICAgICAgIChyZWNvcmQpID0+IHJlY29yZHMucHVzaCh7IHR5cGU6ICJQVFIiLCB2YWx1ZTogZnFkblRvSG9zdG5hbWUocmVjb3JkKSB9KQogICAgICAgICAgICApOwogICAgICAgICAgfSksCiAgICAgICAgICB0aGlzLiNxdWVyeShuYW1lLCAiU09BIikudGhlbigoeyByZXQgfSkgPT4gewogICAgICAgICAgICByZXQuZm9yRWFjaCgKICAgICAgICAgICAgICAoeyBtbmFtZSwgcm5hbWUsIHNlcmlhbCwgcmVmcmVzaCwgcmV0cnksIGV4cGlyZSwgbWluaW11bSB9KSA9PiByZWNvcmRzLnB1c2goewogICAgICAgICAgICAgICAgdHlwZTogIlNPQSIsCiAgICAgICAgICAgICAgICBuc25hbWU6IGZxZG5Ub0hvc3RuYW1lKG1uYW1lKSwKICAgICAgICAgICAgICAgIGhvc3RtYXN0ZXI6IGZxZG5Ub0hvc3RuYW1lKHJuYW1lKSwKICAgICAgICAgICAgICAgIHNlcmlhbCwKICAgICAgICAgICAgICAgIHJlZnJlc2gsCiAgICAgICAgICAgICAgICByZXRyeSwKICAgICAgICAgICAgICAgIGV4cGlyZSwKICAgICAgICAgICAgICAgIG1pbnR0bDogbWluaW11bQogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgICB9KSwKICAgICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsICJTUlYiKS50aGVuKCh7IHJldCB9KSA9PiB7CiAgICAgICAgICAgIHJldC5mb3JFYWNoKAogICAgICAgICAgICAgICh7IHByaW9yaXR5LCB3ZWlnaHQsIHBvcnQsIHRhcmdldCB9KSA9PiByZWNvcmRzLnB1c2goewogICAgICAgICAgICAgICAgdHlwZTogIlNSViIsCiAgICAgICAgICAgICAgICBwcmlvcml0eSwKICAgICAgICAgICAgICAgIHdlaWdodCwKICAgICAgICAgICAgICAgIHBvcnQsCiAgICAgICAgICAgICAgICBuYW1lOiB0YXJnZXQKICAgICAgICAgICAgICB9KQogICAgICAgICAgICApOwogICAgICAgICAgfSksCiAgICAgICAgICB0aGlzLiNxdWVyeShuYW1lLCAiVFhUIikudGhlbigoeyByZXQgfSkgPT4gewogICAgICAgICAgICByZXQuZm9yRWFjaCgKICAgICAgICAgICAgICAocmVjb3JkKSA9PiByZWNvcmRzLnB1c2goeyB0eXBlOiAiVFhUIiwgZW50cmllczogcmVjb3JkIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgICB9KQogICAgICAgIF0pOwogICAgICAgIGNvbnN0IGVyciA9IHJlY29yZHMubGVuZ3RoID8gMCA6IGNvZGVNYXAuZ2V0KCJFQUlfTk9EQVRBIik7CiAgICAgICAgcmVxLm9uY29tcGxldGUoZXJyLCByZWNvcmRzKTsKICAgICAgfSkoKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBxdWVyeUEocmVxLCBuYW1lKSB7CiAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsICJBIikudGhlbigoeyBjb2RlLCByZXQgfSkgPT4gewogICAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJldCk7CiAgICAgIH0pOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHF1ZXJ5QWFhYShyZXEsIG5hbWUpIHsKICAgICAgdGhpcy4jcXVlcnkobmFtZSwgIkFBQUEiKS50aGVuKCh7IGNvZGUsIHJldCB9KSA9PiB7CiAgICAgICAgY29uc3QgcmVjb3JkcyA9IHJldC5tYXAoKHJlY29yZCkgPT4gY29tcHJlc3NJUHY2KHJlY29yZCkpOwogICAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJlY29yZHMpOwogICAgICB9KTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBxdWVyeUNhYShyZXEsIG5hbWUpIHsKICAgICAgdGhpcy4jcXVlcnkobmFtZSwgIkNBQSIpLnRoZW4oKHsgY29kZSwgcmV0IH0pID0+IHsKICAgICAgICBjb25zdCByZWNvcmRzID0gcmV0Lm1hcCgKICAgICAgICAgICh7IGNyaXRpY2FsLCB0YWcsIHZhbHVlIH0pID0+ICh7CiAgICAgICAgICAgIFt0YWddOiB2YWx1ZSwKICAgICAgICAgICAgY3JpdGljYWw6ICtjcml0aWNhbCAmJiAxMjgKICAgICAgICAgIH0pCiAgICAgICAgKTsKICAgICAgICByZXEub25jb21wbGV0ZShjb2RlLCByZWNvcmRzKTsKICAgICAgfSk7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcXVlcnlDbmFtZShyZXEsIG5hbWUpIHsKICAgICAgdGhpcy4jcXVlcnkobmFtZSwgIkNOQU1FIikudGhlbigoeyBjb2RlLCByZXQgfSkgPT4gewogICAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJldCk7CiAgICAgIH0pOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHF1ZXJ5TXgocmVxLCBuYW1lKSB7CiAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsICJNWCIpLnRoZW4oKHsgY29kZSwgcmV0IH0pID0+IHsKICAgICAgICBjb25zdCByZWNvcmRzID0gcmV0Lm1hcCgKICAgICAgICAgICh7IHByZWZlcmVuY2UsIGV4Y2hhbmdlIH0pID0+ICh7CiAgICAgICAgICAgIHByaW9yaXR5OiBwcmVmZXJlbmNlLAogICAgICAgICAgICBleGNoYW5nZTogZnFkblRvSG9zdG5hbWUoZXhjaGFuZ2UpCiAgICAgICAgICB9KQogICAgICAgICk7CiAgICAgICAgcmVxLm9uY29tcGxldGUoY29kZSwgcmVjb3Jkcyk7CiAgICAgIH0pOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHF1ZXJ5TmFwdHIocmVxLCBuYW1lKSB7CiAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsICJOQVBUUiIpLnRoZW4oKHsgY29kZSwgcmV0IH0pID0+IHsKICAgICAgICBjb25zdCByZWNvcmRzID0gcmV0Lm1hcCgKICAgICAgICAgICh7IG9yZGVyLCBwcmVmZXJlbmNlLCBmbGFncywgc2VydmljZXMsIHJlZ2V4cDogcmVnZXhwMiwgcmVwbGFjZW1lbnQgfSkgPT4gKHsKICAgICAgICAgICAgZmxhZ3MsCiAgICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2VzLAogICAgICAgICAgICByZWdleHA6IHJlZ2V4cDIsCiAgICAgICAgICAgIHJlcGxhY2VtZW50LAogICAgICAgICAgICBvcmRlciwKICAgICAgICAgICAgcHJlZmVyZW5jZQogICAgICAgICAgfSkKICAgICAgICApOwogICAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJlY29yZHMpOwogICAgICB9KTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBxdWVyeU5zKHJlcSwgbmFtZSkgewogICAgICB0aGlzLiNxdWVyeShuYW1lLCAiTlMiKS50aGVuKCh7IGNvZGUsIHJldCB9KSA9PiB7CiAgICAgICAgY29uc3QgcmVjb3JkcyA9IHJldC5tYXAoKHJlY29yZCkgPT4gZnFkblRvSG9zdG5hbWUocmVjb3JkKSk7CiAgICAgICAgcmVxLm9uY29tcGxldGUoY29kZSwgcmVjb3Jkcyk7CiAgICAgIH0pOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHF1ZXJ5UHRyKHJlcSwgbmFtZSkgewogICAgICB0aGlzLiNxdWVyeShuYW1lLCAiUFRSIikudGhlbigoeyBjb2RlLCByZXQgfSkgPT4gewogICAgICAgIGNvbnN0IHJlY29yZHMgPSByZXQubWFwKChyZWNvcmQpID0+IGZxZG5Ub0hvc3RuYW1lKHJlY29yZCkpOwogICAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJlY29yZHMpOwogICAgICB9KTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBxdWVyeVNvYShyZXEsIG5hbWUpIHsKICAgICAgdGhpcy4jcXVlcnkobmFtZSwgIlNPQSIpLnRoZW4oKHsgY29kZSwgcmV0IH0pID0+IHsKICAgICAgICBsZXQgcmVjb3JkID0ge307CiAgICAgICAgaWYgKHJldC5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IHsgbW5hbWUsIHJuYW1lLCBzZXJpYWwsIHJlZnJlc2gsIHJldHJ5LCBleHBpcmUsIG1pbmltdW0gfSA9IHJldFswXTsKICAgICAgICAgIHJlY29yZCA9IHsKICAgICAgICAgICAgbnNuYW1lOiBmcWRuVG9Ib3N0bmFtZShtbmFtZSksCiAgICAgICAgICAgIGhvc3RtYXN0ZXI6IGZxZG5Ub0hvc3RuYW1lKHJuYW1lKSwKICAgICAgICAgICAgc2VyaWFsLAogICAgICAgICAgICByZWZyZXNoLAogICAgICAgICAgICByZXRyeSwKICAgICAgICAgICAgZXhwaXJlLAogICAgICAgICAgICBtaW50dGw6IG1pbmltdW0KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJlY29yZCk7CiAgICAgIH0pOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHF1ZXJ5U3J2KHJlcSwgbmFtZSkgewogICAgICB0aGlzLiNxdWVyeShuYW1lLCAiU1JWIikudGhlbigoeyBjb2RlLCByZXQgfSkgPT4gewogICAgICAgIGNvbnN0IHJlY29yZHMgPSByZXQubWFwKAogICAgICAgICAgKHsgcHJpb3JpdHksIHdlaWdodCwgcG9ydCwgdGFyZ2V0IH0pID0+ICh7CiAgICAgICAgICAgIHByaW9yaXR5LAogICAgICAgICAgICB3ZWlnaHQsCiAgICAgICAgICAgIHBvcnQsCiAgICAgICAgICAgIG5hbWU6IHRhcmdldAogICAgICAgICAgfSkKICAgICAgICApOwogICAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJlY29yZHMpOwogICAgICB9KTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBxdWVyeVR4dChyZXEsIG5hbWUpIHsKICAgICAgdGhpcy4jcXVlcnkobmFtZSwgIlRYVCIpLnRoZW4oKHsgY29kZSwgcmV0IH0pID0+IHsKICAgICAgICByZXEub25jb21wbGV0ZShjb2RlLCByZXQpOwogICAgICB9KTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBnZXRIb3N0QnlBZGRyKF9yZXEsIF9uYW1lKSB7CiAgICAgIG5vdEltcGxlbWVudGVkKCJjYXJlcy5DaGFubmVsV3JhcC5wcm90b3R5cGUuZ2V0SG9zdEJ5QWRkciIpOwogICAgfQogICAgZ2V0U2VydmVycygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlcnZlcnM7CiAgICB9CiAgICBzZXRTZXJ2ZXJzKHNlcnZlcnMpIHsKICAgICAgaWYgKHR5cGVvZiBzZXJ2ZXJzID09PSAic3RyaW5nIikgewogICAgICAgIGNvbnN0IHR1cGxlcyA9IFtdOwogICAgICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCBzZXJ2ZXJzLmxlbmd0aDsgaTQgKz0gMikgewogICAgICAgICAgdHVwbGVzLnB1c2goW3NlcnZlcnNbaTRdLCBwYXJzZUludChzZXJ2ZXJzW2k0ICsgMV0pXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuI3NlcnZlcnMgPSB0dXBsZXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4jc2VydmVycyA9IHNlcnZlcnMubWFwKChbX2lwVmVyc2lvbiwgaXAsIHBvcnRdKSA9PiBbaXAsIHBvcnRdKTsKICAgICAgfQogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHNldExvY2FsQWRkcmVzcyhfYWRkcjAsIF9hZGRyMSkgewogICAgICBub3RJbXBsZW1lbnRlZCgiY2FyZXMuQ2hhbm5lbFdyYXAucHJvdG90eXBlLnNldExvY2FsQWRkcmVzcyIpOwogICAgfQogICAgY2FuY2VsKCkgewogICAgICBub3RJbXBsZW1lbnRlZCgiY2FyZXMuQ2hhbm5lbFdyYXAucHJvdG90eXBlLmNhbmNlbCIpOwogICAgfQogIH07CiAgdmFyIEROU19FU0VUU1JWUEVORElORyA9IC0xZTM7CiAgdmFyIEVNU0dfRVNFVFNSVlBFTkRJTkcgPSAiVGhlcmUgYXJlIHBlbmRpbmcgcXVlcmllcy4iOwogIGZ1bmN0aW9uIHN0cmVycm9yKGNvZGUpIHsKICAgIHJldHVybiBjb2RlID09PSBETlNfRVNFVFNSVlBFTkRJTkcgPyBFTVNHX0VTRVRTUlZQRU5ESU5HIDogYXJlc19zdHJlcnJvcihjb2RlKTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2NvbnRleHRpZnkudHMKICB2YXIgY29udGV4dGlmeV9leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2NyeXB0by50cwogIHZhciBjcnlwdG9fZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KGNyeXB0b19leHBvcnRzLCB7CiAgICBnZXRGaXBzQ3J5cHRvOiAoKSA9PiBnZXRGaXBzQ3J5cHRvLAogICAgc2V0Rmlwc0NyeXB0bzogKCkgPT4gc2V0Rmlwc0NyeXB0bywKICAgIHRpbWluZ1NhZmVFcXVhbDogKCkgPT4gdGltaW5nU2FmZUVxdWFsMgogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2NyeXB0by90aW1pbmdfc2FmZV9lcXVhbC50cwogIGZ1bmN0aW9uIHRpbWluZ1NhZmVFcXVhbChhNCwgYjI1KSB7CiAgICBpZiAoYTQuYnl0ZUxlbmd0aCAhPT0gYjI1LmJ5dGVMZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKCEoYTQgaW5zdGFuY2VvZiBEYXRhVmlldykpIHsKICAgICAgYTQgPSBuZXcgRGF0YVZpZXcoQXJyYXlCdWZmZXIuaXNWaWV3KGE0KSA/IGE0LmJ1ZmZlciA6IGE0KTsKICAgIH0KICAgIGlmICghKGIyNSBpbnN0YW5jZW9mIERhdGFWaWV3KSkgewogICAgICBiMjUgPSBuZXcgRGF0YVZpZXcoQXJyYXlCdWZmZXIuaXNWaWV3KGIyNSkgPyBiMjUuYnVmZmVyIDogYjI1KTsKICAgIH0KICAgIGFzc2VydDIoYTQgaW5zdGFuY2VvZiBEYXRhVmlldyk7CiAgICBhc3NlcnQyKGIyNSBpbnN0YW5jZW9mIERhdGFWaWV3KTsKICAgIGNvbnN0IGxlbmd0aCA9IGE0LmJ5dGVMZW5ndGg7CiAgICBsZXQgb3V0ID0gMDsKICAgIGxldCBpNCA9IC0xOwogICAgd2hpbGUgKCsraTQgPCBsZW5ndGgpIHsKICAgICAgb3V0IHw9IGE0LmdldFVpbnQ4KGk0KSBeIGIyNS5nZXRVaW50OChpNCk7CiAgICB9CiAgICByZXR1cm4gb3V0ID09PSAwOwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvX3RpbWluZ1NhZmVFcXVhbC50cwogIHZhciB0aW1pbmdTYWZlRXF1YWwyID0gKGE0LCBiMjUpID0+IHsKICAgIGlmIChhNCBpbnN0YW5jZW9mIEJ1ZmZlcjQpCiAgICAgIGE0ID0gbmV3IERhdGFWaWV3KGE0LmJ1ZmZlcik7CiAgICBpZiAoYTQgaW5zdGFuY2VvZiBCdWZmZXI0KQogICAgICBiMjUgPSBuZXcgRGF0YVZpZXcoYTQuYnVmZmVyKTsKICAgIHJldHVybiB0aW1pbmdTYWZlRXF1YWwoYTQsIGIyNSk7CiAgfTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvY3J5cHRvLnRzCiAgZnVuY3Rpb24gZ2V0Rmlwc0NyeXB0bygpIHsKICAgIG5vdEltcGxlbWVudGVkKCJjcnlwdG8uZ2V0Rmlwc0NyeXB0byIpOwogIH0KICBmdW5jdGlvbiBzZXRGaXBzQ3J5cHRvKF9maXBzKSB7CiAgICBub3RJbXBsZW1lbnRlZCgiY3J5cHRvLnNldEZpcHNDcnlwdG8iKTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2NyZWRlbnRpYWxzLnRzCiAgdmFyIGNyZWRlbnRpYWxzX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvZXJyb3JzLnRzCiAgdmFyIGVycm9yc19leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2ZzLnRzCiAgdmFyIGZzX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvZnNfZGlyLnRzCiAgdmFyIGZzX2Rpcl9leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2ZzX2V2ZW50X3dyYXAudHMKICB2YXIgZnNfZXZlbnRfd3JhcF9leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2hlYXBfdXRpbHMudHMKICB2YXIgaGVhcF91dGlsc19leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2h0dHBfcGFyc2VyLnRzCiAgdmFyIGh0dHBfcGFyc2VyX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvaWN1LnRzCiAgdmFyIGljdV9leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2luc3BlY3Rvci50cwogIHZhciBpbnNwZWN0b3JfZXhwb3J0cyA9IHt9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9qc19zdHJlYW0udHMKICB2YXIganNfc3RyZWFtX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvbWVzc2FnaW5nLnRzCiAgdmFyIG1lc3NhZ2luZ19leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL21vZHVsZV93cmFwLnRzCiAgdmFyIG1vZHVsZV93cmFwX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvbmF0aXZlX21vZHVsZS50cwogIHZhciBuYXRpdmVfbW9kdWxlX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvbmF0aXZlcy50cwogIHZhciBuYXRpdmVzX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvb3B0aW9ucy50cwogIHZhciBvcHRpb25zX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvb3MudHMKICB2YXIgb3NfZXhwb3J0cyA9IHt9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9waXBlX3dyYXAudHMKICB2YXIgcGlwZV93cmFwX2V4cG9ydHMgPSB7fTsKICBfX2V4cG9ydChwaXBlX3dyYXBfZXhwb3J0cywgewogICAgUGlwZTogKCkgPT4gUGlwZSwKICAgIFBpcGVDb25uZWN0V3JhcDogKCkgPT4gUGlwZUNvbm5lY3RXcmFwLAogICAgY29uc3RhbnRzOiAoKSA9PiBjb25zdGFudHMzLAogICAgc29ja2V0VHlwZTogKCkgPT4gc29ja2V0VHlwZQogIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9zdHJlYW1fd3JhcC50cwogIHZhciBzdHJlYW1fd3JhcF9leHBvcnRzID0ge307CiAgX19leHBvcnQoc3RyZWFtX3dyYXBfZXhwb3J0cywgewogICAgTGlidXZTdHJlYW1XcmFwOiAoKSA9PiBMaWJ1dlN0cmVhbVdyYXAsCiAgICBTaHV0ZG93bldyYXA6ICgpID0+IFNodXRkb3duV3JhcCwKICAgIFdyaXRlV3JhcDogKCkgPT4gV3JpdGVXcmFwLAogICAga0FycmF5QnVmZmVyT2Zmc2V0OiAoKSA9PiBrQXJyYXlCdWZmZXJPZmZzZXQsCiAgICBrQnl0ZXNXcml0dGVuOiAoKSA9PiBrQnl0ZXNXcml0dGVuLAogICAga0xhc3RXcml0ZVdhc0FzeW5jOiAoKSA9PiBrTGFzdFdyaXRlV2FzQXN5bmMsCiAgICBrTnVtU3RyZWFtQmFzZVN0YXRlRmllbGRzOiAoKSA9PiBrTnVtU3RyZWFtQmFzZVN0YXRlRmllbGRzLAogICAga1JlYWRCeXRlc09yRXJyb3I6ICgpID0+IGtSZWFkQnl0ZXNPckVycm9yLAogICAga1N0cmVhbUJhc2VGaWVsZDogKCkgPT4ga1N0cmVhbUJhc2VGaWVsZCwKICAgIHN0cmVhbUJhc2VTdGF0ZTogKCkgPT4gc3RyZWFtQmFzZVN0YXRlCiAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2hhbmRsZV93cmFwLnRzCiAgdmFyIEhhbmRsZVdyYXAgPSBjbGFzcyBleHRlbmRzIEFzeW5jV3JhcCB7CiAgICBjb25zdHJ1Y3Rvcihwcm92aWRlcikgewogICAgICBzdXBlcihwcm92aWRlcik7CiAgICB9CiAgICBjbG9zZShjYiA9ICgpID0+IHsKICAgIH0pIHsKICAgICAgdGhpcy5fb25DbG9zZSgpOwogICAgICBjYigpOwogICAgfQogICAgcmVmKCkgewogICAgICB1bnJlYWNoYWJsZSgpOwogICAgfQogICAgdW5yZWYoKSB7CiAgICAgIHVucmVhY2hhYmxlKCk7CiAgICB9CiAgICBfb25DbG9zZSgpIHsKICAgIH0KICB9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9zdHJlYW1fd3JhcC50cwogIHZhciBrUmVhZEJ5dGVzT3JFcnJvciA9IDAgLyoga1JlYWRCeXRlc09yRXJyb3IgKi87CiAgdmFyIGtBcnJheUJ1ZmZlck9mZnNldCA9IDEgLyoga0FycmF5QnVmZmVyT2Zmc2V0ICovOwogIHZhciBrQnl0ZXNXcml0dGVuID0gMiAvKiBrQnl0ZXNXcml0dGVuICovOwogIHZhciBrTGFzdFdyaXRlV2FzQXN5bmMgPSAzIC8qIGtMYXN0V3JpdGVXYXNBc3luYyAqLzsKICB2YXIga051bVN0cmVhbUJhc2VTdGF0ZUZpZWxkcyA9IDQgLyoga051bVN0cmVhbUJhc2VTdGF0ZUZpZWxkcyAqLzsKICB2YXIgc3RyZWFtQmFzZVN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoNSk7CiAgc3RyZWFtQmFzZVN0YXRlW2tMYXN0V3JpdGVXYXNBc3luY10gPSAxOwogIHZhciBXcml0ZVdyYXAgPSBjbGFzcyBleHRlbmRzIEFzeW5jV3JhcCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoNDEgLyogV1JJVEVXUkFQICovKTsKICAgIH0KICB9OwogIHZhciBTaHV0ZG93bldyYXAgPSBjbGFzcyBleHRlbmRzIEFzeW5jV3JhcCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoMjggLyogU0hVVERPV05XUkFQICovKTsKICAgIH0KICB9OwogIHZhciBrU3RyZWFtQmFzZUZpZWxkID0gU3ltYm9sKCJrU3RyZWFtQmFzZUZpZWxkIik7CiAgdmFyIFNVR0dFU1RFRF9TSVpFID0gNjQgKiAxMDI0OwogIHZhciBMaWJ1dlN0cmVhbVdyYXAgPSBjbGFzcyBleHRlbmRzIEhhbmRsZVdyYXAgewogICAgY29uc3RydWN0b3IocHJvdmlkZXIsIHN0cmVhbSkgewogICAgICBzdXBlcihwcm92aWRlcik7CiAgICAgIHRoaXMuI3JlYWRpbmcgPSBmYWxzZTsKICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTsKICAgICAgdGhpcy53cml0ZVF1ZXVlU2l6ZSA9IDA7CiAgICAgIHRoaXMuYnl0ZXNSZWFkID0gMDsKICAgICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwOwogICAgICB0aGlzLiNhdHRhY2hUb09iamVjdChzdHJlYW0pOwogICAgfQogICAgI3JlYWRpbmc7CiAgICByZWFkU3RhcnQoKSB7CiAgICAgIGlmICghdGhpcy4jcmVhZGluZykgewogICAgICAgIHRoaXMuI3JlYWRpbmcgPSB0cnVlOwogICAgICAgIHRoaXMuI3JlYWQoKTsKICAgICAgfQogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJlYWRTdG9wKCkgewogICAgICB0aGlzLiNyZWFkaW5nID0gZmFsc2U7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgc2h1dGRvd24ocmVxKSB7CiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuX29uQ2xvc2UoKTsKICAgICAgdHJ5IHsKICAgICAgICByZXEub25jb21wbGV0ZShzdGF0dXMpOwogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHVzZVVzZXJCdWZmZXIoX3VzZXJCdWYpIHsKICAgICAgbm90SW1wbGVtZW50ZWQoIkxpYnV2U3RyZWFtV3JhcC5wcm90b3R5cGUudXNlVXNlckJ1ZmZlciIpOwogICAgfQogICAgd3JpdGVCdWZmZXIocmVxLCBkYXRhKSB7CiAgICAgIHRoaXMuI3dyaXRlKHJlcSwgZGF0YSk7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgd3JpdGV2KHJlcSwgY2h1bmtzLCBhbGxCdWZmZXJzKSB7CiAgICAgIGNvbnN0IGNvdW50ID0gYWxsQnVmZmVycyA/IGNodW5rcy5sZW5ndGggOiBjaHVua3MubGVuZ3RoID4+IDE7CiAgICAgIGNvbnN0IGJ1ZmZlcnMgPSBuZXcgQXJyYXkoY291bnQpOwogICAgICBpZiAoIWFsbEJ1ZmZlcnMpIHsKICAgICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgY291bnQ7IGk0KyspIHsKICAgICAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2k0ICogMl07CiAgICAgICAgICBpZiAoQnVmZmVyNC5pc0J1ZmZlcihjaHVuaykpIHsKICAgICAgICAgICAgYnVmZmVyc1tpNF0gPSBjaHVuazsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGVuY29kaW5nID0gY2h1bmtzW2k0ICogMiArIDFdOwogICAgICAgICAgYnVmZmVyc1tpNF0gPSBCdWZmZXI0LmZyb20oY2h1bmssIGVuY29kaW5nKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGNvdW50OyBpNCsrKSB7CiAgICAgICAgICBidWZmZXJzW2k0XSA9IGNodW5rc1tpNF07CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0aGlzLndyaXRlQnVmZmVyKHJlcSwgQnVmZmVyNC5jb25jYXQoYnVmZmVycykpOwogICAgfQogICAgd3JpdGVBc2NpaVN0cmluZyhyZXEsIGRhdGEpIHsKICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGRhdGEpOwogICAgICByZXR1cm4gdGhpcy53cml0ZUJ1ZmZlcihyZXEsIGJ1ZmZlcik7CiAgICB9CiAgICB3cml0ZVV0ZjhTdHJpbmcocmVxLCBkYXRhKSB7CiAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkYXRhKTsKICAgICAgcmV0dXJuIHRoaXMud3JpdGVCdWZmZXIocmVxLCBidWZmZXIpOwogICAgfQogICAgd3JpdGVVY3MyU3RyaW5nKF9yZXEsIF9kYXRhKSB7CiAgICAgIG5vdEltcGxlbWVudGVkKCJMaWJ1dlN0cmVhbVdyYXAucHJvdG90eXBlLndyaXRlVWNzMlN0cmluZyIpOwogICAgfQogICAgd3JpdGVMYXRpbjFTdHJpbmcocmVxLCBkYXRhKSB7CiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlcjQuZnJvbShkYXRhLCAibGF0aW4xIik7CiAgICAgIHJldHVybiB0aGlzLndyaXRlQnVmZmVyKHJlcSwgYnVmZmVyKTsKICAgIH0KICAgIF9vbkNsb3NlKCkgewogICAgICBsZXQgc3RhdHVzID0gMDsKICAgICAgdGhpcy4jcmVhZGluZyA9IGZhbHNlOwogICAgICB0cnkgewogICAgICAgIHRoaXNba1N0cmVhbUJhc2VGaWVsZF0/LmNsb3NlKCk7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHN0YXR1cyA9IGNvZGVNYXAuZ2V0KCJFTk9UQ09OTiIpOwogICAgICB9CiAgICAgIHJldHVybiBzdGF0dXM7CiAgICB9CiAgICAjYXR0YWNoVG9PYmplY3Qoc3RyZWFtKSB7CiAgICAgIHRoaXNba1N0cmVhbUJhc2VGaWVsZF0gPSBzdHJlYW07CiAgICB9CiAgICBhc3luYyAjcmVhZCgpIHsKICAgICAgbGV0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KFNVR0dFU1RFRF9TSVpFKTsKICAgICAgbGV0IG5yZWFkOwogICAgICB0cnkgewogICAgICAgIG5yZWFkID0gYXdhaXQgdGhpc1trU3RyZWFtQmFzZUZpZWxkXS5yZWFkKGJ1Zik7CiAgICAgIH0gY2F0Y2ggKGU1KSB7CiAgICAgICAgaWYgKGU1IGluc3RhbmNlb2YgRGVuby5lcnJvcnMuSW50ZXJydXB0ZWQgfHwgZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5CYWRSZXNvdXJjZSkgewogICAgICAgICAgbnJlYWQgPSBjb2RlTWFwLmdldCgiRU9GIik7CiAgICAgICAgfSBlbHNlIGlmIChlNSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkNvbm5lY3Rpb25SZXNldCB8fCBlNSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkNvbm5lY3Rpb25BYm9ydGVkKSB7CiAgICAgICAgICBucmVhZCA9IGNvZGVNYXAuZ2V0KCJFQ09OTlJFU0VUIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5yZWFkID0gY29kZU1hcC5nZXQoIlVOS05PV04iKTsKICAgICAgICB9CiAgICAgICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoMCk7CiAgICAgIH0KICAgICAgbnJlYWQgPz89IGNvZGVNYXAuZ2V0KCJFT0YiKTsKICAgICAgc3RyZWFtQmFzZVN0YXRlW2tSZWFkQnl0ZXNPckVycm9yXSA9IG5yZWFkOwogICAgICBpZiAobnJlYWQgPiAwKSB7CiAgICAgICAgdGhpcy5ieXRlc1JlYWQgKz0gbnJlYWQ7CiAgICAgIH0KICAgICAgYnVmID0gYnVmLnNsaWNlKDAsIG5yZWFkKTsKICAgICAgc3RyZWFtQmFzZVN0YXRlW2tBcnJheUJ1ZmZlck9mZnNldF0gPSAwOwogICAgICB0cnkgewogICAgICAgIHRoaXMub25yZWFkKGJ1ZiwgbnJlYWQpOwogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgICBpZiAobnJlYWQgPj0gMCAmJiB0aGlzLiNyZWFkaW5nKSB7CiAgICAgICAgdGhpcy4jcmVhZCgpOwogICAgICB9CiAgICB9CiAgICBhc3luYyAjd3JpdGUocmVxLCBkYXRhKSB7CiAgICAgIGNvbnN0IHsgYnl0ZUxlbmd0aDogYnl0ZUxlbmd0aDIgfSA9IGRhdGE7CiAgICAgIHRyeSB7CiAgICAgICAgYXdhaXQgd3JpdGVBbGwodGhpc1trU3RyZWFtQmFzZUZpZWxkXSwgZGF0YSk7CiAgICAgIH0gY2F0Y2ggKGU1KSB7CiAgICAgICAgbGV0IHN0YXR1czsKICAgICAgICBpZiAoZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5CYWRSZXNvdXJjZSB8fCBlNSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJyb2tlblBpcGUpIHsKICAgICAgICAgIHN0YXR1cyA9IGNvZGVNYXAuZ2V0KCJFQkFERiIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0dXMgPSBjb2RlTWFwLmdldCgiVU5LTk9XTiIpOwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgcmVxLm9uY29tcGxldGUoc3RhdHVzKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHN0cmVhbUJhc2VTdGF0ZVtrQnl0ZXNXcml0dGVuXSA9IGJ5dGVMZW5ndGgyOwogICAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBieXRlTGVuZ3RoMjsKICAgICAgdHJ5IHsKICAgICAgICByZXEub25jb21wbGV0ZSgwKTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogIH07CiAga1N0cmVhbUJhc2VGaWVsZDsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvY29ubmVjdGlvbl93cmFwLnRzCiAgdmFyIENvbm5lY3Rpb25XcmFwID0gY2xhc3MgZXh0ZW5kcyBMaWJ1dlN0cmVhbVdyYXAgewogICAgY29uc3RydWN0b3IocHJvdmlkZXIsIG9iamVjdCkgewogICAgICBzdXBlcihwcm92aWRlciwgb2JqZWN0KTsKICAgICAgdGhpcy5vbmNvbm5lY3Rpb24gPSBudWxsOwogICAgfQogICAgYWZ0ZXJDb25uZWN0KHJlcSwgc3RhdHVzKSB7CiAgICAgIGNvbnN0IGlzU3VjY2Vzc1N0YXR1cyA9ICFzdGF0dXM7CiAgICAgIGNvbnN0IHJlYWRhYmxlID0gaXNTdWNjZXNzU3RhdHVzOwogICAgICBjb25zdCB3cml0YWJsZSA9IGlzU3VjY2Vzc1N0YXR1czsKICAgICAgdHJ5IHsKICAgICAgICByZXEub25jb21wbGV0ZShzdGF0dXMsIHRoaXMsIHJlcSwgcmVhZGFibGUsIHdyaXRhYmxlKTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL19saXN0ZW4udHMKICBmdW5jdGlvbiBjZWlsUG93T2YyKG44KSB7CiAgICBjb25zdCByb3VuZFBvd09mMiA9IDEgPDwgMzEgLSBNYXRoLmNsejMyKG44KTsKICAgIHJldHVybiByb3VuZFBvd09mMiA8IG44ID8gcm91bmRQb3dPZjIgKiAyIDogcm91bmRQb3dPZjI7CiAgfQogIHZhciBJTklUSUFMX0FDQ0VQVF9CQUNLT0ZGX0RFTEFZID0gNTsKICB2YXIgTUFYX0FDQ0VQVF9CQUNLT0ZGX0RFTEFZID0gMWUzOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9waXBlX3dyYXAudHMKICB2YXIgc29ja2V0VHlwZSA9IC8qIEBfX1BVUkVfXyAqLyAoKHNvY2tldFR5cGUyKSA9PiB7CiAgICBzb2NrZXRUeXBlMltzb2NrZXRUeXBlMlsiU09DS0VUIl0gPSAwXSA9ICJTT0NLRVQiOwogICAgc29ja2V0VHlwZTJbc29ja2V0VHlwZTJbIlNFUlZFUiJdID0gMV0gPSAiU0VSVkVSIjsKICAgIHNvY2tldFR5cGUyW3NvY2tldFR5cGUyWyJJUEMiXSA9IDJdID0gIklQQyI7CiAgICByZXR1cm4gc29ja2V0VHlwZTI7CiAgfSkoc29ja2V0VHlwZSB8fCB7fSk7CiAgdmFyIFBpcGUgPSBjbGFzcyBleHRlbmRzIENvbm5lY3Rpb25XcmFwIHsKICAgIGNvbnN0cnVjdG9yKHR5cGUsIGNvbm4pIHsKICAgICAgbGV0IHByb3ZpZGVyOwogICAgICBsZXQgaXBjOwogICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICBjYXNlIDAgLyogU09DS0VUICovOiB7CiAgICAgICAgICBwcm92aWRlciA9IDI0IC8qIFBJUEVXUkFQICovOwogICAgICAgICAgaXBjID0gZmFsc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAxIC8qIFNFUlZFUiAqLzogewogICAgICAgICAgcHJvdmlkZXIgPSAyMyAvKiBQSVBFU0VSVkVSV1JBUCAqLzsKICAgICAgICAgIGlwYyA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgMiAvKiBJUEMgKi86IHsKICAgICAgICAgIHByb3ZpZGVyID0gMjQgLyogUElQRVdSQVAgKi87CiAgICAgICAgICBpcGMgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgIHVucmVhY2hhYmxlKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN1cGVyKHByb3ZpZGVyLCBjb25uKTsKICAgICAgdGhpcy5yZWFkaW5nID0gZmFsc2U7CiAgICAgIHRoaXMuI3BlbmRpbmdJbnN0YW5jZXMgPSA0OwogICAgICB0aGlzLiNjb25uZWN0aW9ucyA9IDA7CiAgICAgIHRoaXMuI2Nsb3NlZCA9IGZhbHNlOwogICAgICB0aGlzLmlwYyA9IGlwYzsKICAgICAgaWYgKGNvbm4gJiYgcHJvdmlkZXIgPT09IDI0IC8qIFBJUEVXUkFQICovKSB7CiAgICAgICAgY29uc3QgbG9jYWxBZGRyID0gY29ubi5sb2NhbEFkZHI7CiAgICAgICAgdGhpcy4jYWRkcmVzcyA9IGxvY2FsQWRkci5wYXRoOwogICAgICB9CiAgICB9CiAgICAjcGVuZGluZ0luc3RhbmNlczsKICAgICNhZGRyZXNzOwogICAgI2JhY2tsb2c7CiAgICAjbGlzdGVuZXI7CiAgICAjY29ubmVjdGlvbnM7CiAgICAjY2xvc2VkOwogICAgI2FjY2VwdEJhY2tvZmZEZWxheTsKICAgIG9wZW4oX2ZkKSB7CiAgICAgIG5vdEltcGxlbWVudGVkKCJQaXBlLnByb3RvdHlwZS5vcGVuIik7CiAgICB9CiAgICBiaW5kKG5hbWUpIHsKICAgICAgdGhpcy4jYWRkcmVzcyA9IG5hbWU7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgY29ubmVjdChyZXEsIGFkZHJlc3MpIHsKICAgICAgaWYgKGlzV2luZG93czIpIHsKICAgICAgICBub3RJbXBsZW1lbnRlZCgiUGlwZS5wcm90b3R5cGUuY29ubmVjdCAtIFdpbmRvd3MiKTsKICAgICAgfQogICAgICBjb25zdCBjb25uZWN0T3B0aW9ucyA9IHsKICAgICAgICBwYXRoOiBhZGRyZXNzLAogICAgICAgIHRyYW5zcG9ydDogInVuaXgiCiAgICAgIH07CiAgICAgIGNvbm5lY3QoY29ubmVjdE9wdGlvbnMpLnRoZW4oCiAgICAgICAgKGNvbm4pID0+IHsKICAgICAgICAgIGNvbnN0IGxvY2FsQWRkciA9IGNvbm4ubG9jYWxBZGRyOwogICAgICAgICAgdGhpcy4jYWRkcmVzcyA9IHJlcS5hZGRyZXNzID0gbG9jYWxBZGRyLnBhdGg7CiAgICAgICAgICB0aGlzW2tTdHJlYW1CYXNlRmllbGRdID0gY29ubjsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMuYWZ0ZXJDb25uZWN0KHJlcSwgMCk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIChlNSkgPT4gewogICAgICAgICAgbGV0IGNvZGU7CiAgICAgICAgICBpZiAoZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkgewogICAgICAgICAgICBjb2RlID0gY29kZU1hcC5nZXQoIkVOT0VOVCIpOwogICAgICAgICAgfSBlbHNlIGlmIChlNSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLlBlcm1pc3Npb25EZW5pZWQpIHsKICAgICAgICAgICAgY29kZSA9IGNvZGVNYXAuZ2V0KCJFQUNDRVMiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvZGUgPSBjb2RlTWFwLmdldCgiRUNPTk5SRUZVU0VEIik7CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLmFmdGVyQ29ubmVjdChyZXEsIGNvZGUpOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICApOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGxpc3RlbihiYWNrbG9nKSB7CiAgICAgIGlmIChpc1dpbmRvd3MyKSB7CiAgICAgICAgbm90SW1wbGVtZW50ZWQoIlBpcGUucHJvdG90eXBlLmxpc3RlbiAtIFdpbmRvd3MiKTsKICAgICAgfQogICAgICB0aGlzLiNiYWNrbG9nID0gaXNXaW5kb3dzMiA/IHRoaXMuI3BlbmRpbmdJbnN0YW5jZXMgOiBjZWlsUG93T2YyKGJhY2tsb2cgKyAxKTsKICAgICAgY29uc3QgbGlzdGVuT3B0aW9ucyA9IHsKICAgICAgICBwYXRoOiB0aGlzLiNhZGRyZXNzLAogICAgICAgIHRyYW5zcG9ydDogInVuaXgiCiAgICAgIH07CiAgICAgIGxldCBsaXN0ZW5lcjsKICAgICAgdHJ5IHsKICAgICAgICBsaXN0ZW5lciA9IGxpc3RlbihsaXN0ZW5PcHRpb25zKTsKICAgICAgfSBjYXRjaCAoZTUpIHsKICAgICAgICBpZiAoZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRySW5Vc2UpIHsKICAgICAgICAgIHJldHVybiBjb2RlTWFwLmdldCgiRUFERFJJTlVTRSIpOwogICAgICAgIH0gZWxzZSBpZiAoZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRyTm90QXZhaWxhYmxlKSB7CiAgICAgICAgICByZXR1cm4gY29kZU1hcC5nZXQoIkVBRERSTk9UQVZBSUwiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvZGVNYXAuZ2V0KCJVTktOT1dOIik7CiAgICAgIH0KICAgICAgY29uc3QgYWRkcmVzcyA9IGxpc3RlbmVyLmFkZHI7CiAgICAgIHRoaXMuI2FkZHJlc3MgPSBhZGRyZXNzLnBhdGg7CiAgICAgIHRoaXMuI2xpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgIHRoaXMuI2FjY2VwdCgpOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJlZigpIHsKICAgICAgaWYgKHRoaXMuI2xpc3RlbmVyKSB7CiAgICAgICAgTGlzdGVuZXJSZWYodGhpcy4jbGlzdGVuZXIpOwogICAgICB9CiAgICB9CiAgICB1bnJlZigpIHsKICAgICAgaWYgKHRoaXMuI2xpc3RlbmVyKSB7CiAgICAgICAgTGlzdGVuZXJVbnJlZih0aGlzLiNsaXN0ZW5lcik7CiAgICAgIH0KICAgIH0KICAgIHNldFBlbmRpbmdJbnN0YW5jZXMoaW5zdGFuY2VzKSB7CiAgICAgIHRoaXMuI3BlbmRpbmdJbnN0YW5jZXMgPSBpbnN0YW5jZXM7CiAgICB9CiAgICBmY2htb2QobW9kZSkgewogICAgICBpZiAobW9kZSAhPSBjb25zdGFudHMzLlVWX1JFQURBQkxFICYmIG1vZGUgIT0gY29uc3RhbnRzMy5VVl9XUklUQUJMRSAmJiBtb2RlICE9IChjb25zdGFudHMzLlVWX1dSSVRBQkxFIHwgY29uc3RhbnRzMy5VVl9SRUFEQUJMRSkpIHsKICAgICAgICByZXR1cm4gY29kZU1hcC5nZXQoIkVJTlZBTCIpOwogICAgICB9CiAgICAgIGxldCBkZXNpcmVkX21vZGUgPSAwOwogICAgICBpZiAobW9kZSAmIGNvbnN0YW50czMuVVZfUkVBREFCTEUpIHsKICAgICAgICBkZXNpcmVkX21vZGUgfD0gZnMuU19JUlVTUiB8IGZzLlNfSVJHUlAgfCBmcy5TX0lST1RIOwogICAgICB9CiAgICAgIGlmIChtb2RlICYgY29uc3RhbnRzMy5VVl9XUklUQUJMRSkgewogICAgICAgIGRlc2lyZWRfbW9kZSB8PSBmcy5TX0lXVVNSIHwgZnMuU19JV0dSUCB8IGZzLlNfSVdPVEg7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICBEZW5vLmNobW9kU3luYyh0aGlzLiNhZGRyZXNzLCBkZXNpcmVkX21vZGUpOwogICAgICB9IGNhdGNoIHsKICAgICAgICByZXR1cm4gY29kZU1hcC5nZXQoIlVOS05PV04iKTsKICAgICAgfQogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGFzeW5jICNhY2NlcHRCYWNrb2ZmKCkgewogICAgICBpZiAoIXRoaXMuI2FjY2VwdEJhY2tvZmZEZWxheSkgewogICAgICAgIHRoaXMuI2FjY2VwdEJhY2tvZmZEZWxheSA9IElOSVRJQUxfQUNDRVBUX0JBQ0tPRkZfREVMQVk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4jYWNjZXB0QmFja29mZkRlbGF5ICo9IDI7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuI2FjY2VwdEJhY2tvZmZEZWxheSA+PSBNQVhfQUNDRVBUX0JBQ0tPRkZfREVMQVkpIHsKICAgICAgICB0aGlzLiNhY2NlcHRCYWNrb2ZmRGVsYXkgPSBNQVhfQUNDRVBUX0JBQ0tPRkZfREVMQVk7CiAgICAgIH0KICAgICAgYXdhaXQgZGVsYXkodGhpcy4jYWNjZXB0QmFja29mZkRlbGF5KTsKICAgICAgdGhpcy4jYWNjZXB0KCk7CiAgICB9CiAgICBhc3luYyAjYWNjZXB0KCkgewogICAgICBpZiAodGhpcy4jY2xvc2VkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLiNjb25uZWN0aW9ucyA+IHRoaXMuI2JhY2tsb2cpIHsKICAgICAgICB0aGlzLiNhY2NlcHRCYWNrb2ZmKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGxldCBjb25uZWN0aW9uOwogICAgICB0cnkgewogICAgICAgIGNvbm5lY3Rpb24gPSBhd2FpdCB0aGlzLiNsaXN0ZW5lci5hY2NlcHQoKTsKICAgICAgfSBjYXRjaCAoZTUpIHsKICAgICAgICBpZiAoZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5CYWRSZXNvdXJjZSAmJiB0aGlzLiNjbG9zZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMub25jb25uZWN0aW9uKGNvZGVNYXAuZ2V0KCJVTktOT1dOIiksIHZvaWQgMCk7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgfQogICAgICAgIHRoaXMuI2FjY2VwdEJhY2tvZmYoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy4jYWNjZXB0QmFja29mZkRlbGF5ID0gdm9pZCAwOwogICAgICBjb25zdCBjb25uZWN0aW9uSGFuZGxlID0gbmV3IFBpcGUoMCAvKiBTT0NLRVQgKi8sIGNvbm5lY3Rpb24pOwogICAgICB0aGlzLiNjb25uZWN0aW9ucysrOwogICAgICB0cnkgewogICAgICAgIHRoaXMub25jb25uZWN0aW9uKDAsIGNvbm5lY3Rpb25IYW5kbGUpOwogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy4jYWNjZXB0KCk7CiAgICB9CiAgICBfb25DbG9zZSgpIHsKICAgICAgdGhpcy4jY2xvc2VkID0gdHJ1ZTsKICAgICAgdGhpcy5yZWFkaW5nID0gZmFsc2U7CiAgICAgIHRoaXMuI2FkZHJlc3MgPSB2b2lkIDA7CiAgICAgIHRoaXMuI2JhY2tsb2cgPSB2b2lkIDA7CiAgICAgIHRoaXMuI2Nvbm5lY3Rpb25zID0gMDsKICAgICAgdGhpcy4jYWNjZXB0QmFja29mZkRlbGF5ID0gdm9pZCAwOwogICAgICBpZiAodGhpcy5wcm92aWRlciA9PT0gMjMgLyogUElQRVNFUlZFUldSQVAgKi8pIHsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy4jbGlzdGVuZXIuY2xvc2UoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIExpYnV2U3RyZWFtV3JhcC5wcm90b3R5cGUuX29uQ2xvc2UuY2FsbCh0aGlzKTsKICAgIH0KICB9OwogIHZhciBQaXBlQ29ubmVjdFdyYXAgPSBjbGFzcyBleHRlbmRzIEFzeW5jV3JhcCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoMjIgLyogUElQRUNPTk5FQ1RXUkFQICovKTsKICAgIH0KICB9OwogIHZhciBjb25zdGFudHMzID0gLyogQF9fUFVSRV9fICovICgoY29uc3RhbnRzNSkgPT4gewogICAgY29uc3RhbnRzNVtjb25zdGFudHM1WyJTT0NLRVQiXSA9IDAgLyogU09DS0VUICovXSA9ICJTT0NLRVQiOwogICAgY29uc3RhbnRzNVtjb25zdGFudHM1WyJTRVJWRVIiXSA9IDEgLyogU0VSVkVSICovXSA9ICJTRVJWRVIiOwogICAgY29uc3RhbnRzNVtjb25zdGFudHM1WyJJUEMiXSA9IDIgLyogSVBDICovXSA9ICJJUEMiOwogICAgY29uc3RhbnRzNVtjb25zdGFudHM1WyJVVl9SRUFEQUJMRSJdID0gMV0gPSAiVVZfUkVBREFCTEUiOwogICAgY29uc3RhbnRzNVtjb25zdGFudHM1WyJVVl9XUklUQUJMRSJdID0gMl0gPSAiVVZfV1JJVEFCTEUiOwogICAgcmV0dXJuIGNvbnN0YW50czU7CiAgfSkoY29uc3RhbnRzMyB8fCB7fSk7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3BlcmZvcm1hbmNlLnRzCiAgdmFyIHBlcmZvcm1hbmNlX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvcHJvY2Vzc19tZXRob2RzLnRzCiAgdmFyIHByb2Nlc3NfbWV0aG9kc19leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3JlcG9ydC50cwogIHZhciByZXBvcnRfZXhwb3J0cyA9IHt9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9zZXJkZXMudHMKICB2YXIgc2VyZGVzX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvc2lnbmFsX3dyYXAudHMKICB2YXIgc2lnbmFsX3dyYXBfZXhwb3J0cyA9IHt9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9zcGF3bl9zeW5jLnRzCiAgdmFyIHNwYXduX3N5bmNfZXhwb3J0cyA9IHt9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9zeW1ib2xzLnRzCiAgdmFyIHN5bWJvbHNfZXhwb3J0cyA9IHt9OwogIF9fZXhwb3J0KHN5bWJvbHNfZXhwb3J0cywgewogICAgYXN5bmNJZFN5bWJvbDogKCkgPT4gYXN5bmNJZFN5bWJvbCwKICAgIG93bmVyU3ltYm9sOiAoKSA9PiBvd25lclN5bWJvbAogIH0pOwogIHZhciBhc3luY0lkU3ltYm9sID0gU3ltYm9sKCJhc3luY0lkU3ltYm9sIik7CiAgdmFyIG93bmVyU3ltYm9sID0gU3ltYm9sKCJvd25lclN5bWJvbCIpOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy90YXNrX3F1ZXVlLnRzCiAgdmFyIHRhc2tfcXVldWVfZXhwb3J0cyA9IHt9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy90Y3Bfd3JhcC50cwogIHZhciB0Y3Bfd3JhcF9leHBvcnRzID0ge307CiAgX19leHBvcnQodGNwX3dyYXBfZXhwb3J0cywgewogICAgVENQOiAoKSA9PiBUQ1AsCiAgICBUQ1BDb25uZWN0V3JhcDogKCkgPT4gVENQQ29ubmVjdFdyYXAsCiAgICBjb25zdGFudHM6ICgpID0+IGNvbnN0YW50czQKICB9KTsKICB2YXIgVENQQ29ubmVjdFdyYXAgPSBjbGFzcyBleHRlbmRzIEFzeW5jV3JhcCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoMzIgLyogVENQQ09OTkVDVFdSQVAgKi8pOwogICAgfQogIH07CiAgdmFyIGNvbnN0YW50czQgPSAvKiBAX19QVVJFX18gKi8gKChjb25zdGFudHM1KSA9PiB7CiAgICBjb25zdGFudHM1W2NvbnN0YW50czVbIlNPQ0tFVCJdID0gMCAvKiBTT0NLRVQgKi9dID0gIlNPQ0tFVCI7CiAgICBjb25zdGFudHM1W2NvbnN0YW50czVbIlNFUlZFUiJdID0gMSAvKiBTRVJWRVIgKi9dID0gIlNFUlZFUiI7CiAgICBjb25zdGFudHM1W2NvbnN0YW50czVbIlVWX1RDUF9JUFY2T05MWSJdID0gMl0gPSAiVVZfVENQX0lQVjZPTkxZIjsKICAgIHJldHVybiBjb25zdGFudHM1OwogIH0pKGNvbnN0YW50czQgfHwge30pOwogIHZhciBfYTsKICB2YXIgX1RDUCA9IGNsYXNzIGV4dGVuZHMgQ29ubmVjdGlvbldyYXAgewogICAgY29uc3RydWN0b3IodHlwZSwgY29ubikgewogICAgICBsZXQgcHJvdmlkZXI7CiAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgIGNhc2UgMCAvKiBTT0NLRVQgKi86IHsKICAgICAgICAgIHByb3ZpZGVyID0gMzQgLyogVENQV1JBUCAqLzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlIDEgLyogU0VSVkVSICovOiB7CiAgICAgICAgICBwcm92aWRlciA9IDMzIC8qIFRDUFNFUlZFUldSQVAgKi87CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgdW5yZWFjaGFibGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3VwZXIocHJvdmlkZXIsIGNvbm4pOwogICAgICB0aGlzW19hXSA9IG51bGw7CiAgICAgIHRoaXMucmVhZGluZyA9IGZhbHNlOwogICAgICB0aGlzLiNjb25uZWN0aW9ucyA9IDA7CiAgICAgIHRoaXMuI2Nsb3NlZCA9IGZhbHNlOwogICAgICBpZiAoY29ubiAmJiBwcm92aWRlciA9PT0gMzQgLyogVENQV1JBUCAqLykgewogICAgICAgIGNvbnN0IGxvY2FsQWRkciA9IGNvbm4ubG9jYWxBZGRyOwogICAgICAgIHRoaXMuI2FkZHJlc3MgPSBsb2NhbEFkZHIuaG9zdG5hbWU7CiAgICAgICAgdGhpcy4jcG9ydCA9IGxvY2FsQWRkci5wb3J0OwogICAgICAgIGNvbnN0IHJlbW90ZUFkZHIgPSBjb25uLnJlbW90ZUFkZHI7CiAgICAgICAgdGhpcy4jcmVtb3RlQWRkcmVzcyA9IHJlbW90ZUFkZHIuaG9zdG5hbWU7CiAgICAgICAgdGhpcy4jcmVtb3RlUG9ydCA9IHJlbW90ZUFkZHIucG9ydDsKICAgICAgICB0aGlzLiNyZW1vdGVGYW1pbHkgPSBpc0lQKHJlbW90ZUFkZHIuaG9zdG5hbWUpOwogICAgICB9CiAgICB9CiAgICAjYWRkcmVzczsKICAgICNwb3J0OwogICAgI3JlbW90ZUFkZHJlc3M7CiAgICAjcmVtb3RlRmFtaWx5OwogICAgI3JlbW90ZVBvcnQ7CiAgICAjYmFja2xvZzsKICAgICNsaXN0ZW5lcjsKICAgICNjb25uZWN0aW9uczsKICAgICNjbG9zZWQ7CiAgICAjYWNjZXB0QmFja29mZkRlbGF5OwogICAgb3BlbihfZmQpIHsKICAgICAgbm90SW1wbGVtZW50ZWQoIlRDUC5wcm90b3R5cGUub3BlbiIpOwogICAgfQogICAgYmluZChhZGRyZXNzLCBwb3J0KSB7CiAgICAgIHJldHVybiB0aGlzLiNiaW5kKGFkZHJlc3MsIHBvcnQsIDApOwogICAgfQogICAgYmluZDYoYWRkcmVzcywgcG9ydCwgZmxhZ3MpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JpbmQoYWRkcmVzcywgcG9ydCwgZmxhZ3MpOwogICAgfQogICAgY29ubmVjdChyZXEsIGFkZHJlc3MsIHBvcnQpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Nvbm5lY3QocmVxLCBhZGRyZXNzLCBwb3J0KTsKICAgIH0KICAgIGNvbm5lY3Q2KHJlcSwgYWRkcmVzcywgcG9ydCkgewogICAgICByZXR1cm4gdGhpcy4jY29ubmVjdChyZXEsIGFkZHJlc3MsIHBvcnQpOwogICAgfQogICAgbGlzdGVuKGJhY2tsb2cpIHsKICAgICAgdGhpcy4jYmFja2xvZyA9IGNlaWxQb3dPZjIoYmFja2xvZyArIDEpOwogICAgICBjb25zdCBsaXN0ZW5PcHRpb25zID0gewogICAgICAgIGhvc3RuYW1lOiB0aGlzLiNhZGRyZXNzLAogICAgICAgIHBvcnQ6IHRoaXMuI3BvcnQsCiAgICAgICAgdHJhbnNwb3J0OiAidGNwIgogICAgICB9OwogICAgICBsZXQgbGlzdGVuZXI7CiAgICAgIHRyeSB7CiAgICAgICAgbGlzdGVuZXIgPSBEZW5vLmxpc3RlbihsaXN0ZW5PcHRpb25zKTsKICAgICAgfSBjYXRjaCAoZTUpIHsKICAgICAgICBpZiAoZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRySW5Vc2UpIHsKICAgICAgICAgIHJldHVybiBjb2RlTWFwLmdldCgiRUFERFJJTlVTRSIpOwogICAgICAgIH0gZWxzZSBpZiAoZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRyTm90QXZhaWxhYmxlKSB7CiAgICAgICAgICByZXR1cm4gY29kZU1hcC5nZXQoIkVBRERSTk9UQVZBSUwiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvZGVNYXAuZ2V0KCJVTktOT1dOIik7CiAgICAgIH0KICAgICAgY29uc3QgYWRkcmVzcyA9IGxpc3RlbmVyLmFkZHI7CiAgICAgIHRoaXMuI2FkZHJlc3MgPSBhZGRyZXNzLmhvc3RuYW1lOwogICAgICB0aGlzLiNwb3J0ID0gYWRkcmVzcy5wb3J0OwogICAgICB0aGlzLiNsaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgICB0aGlzLiNhY2NlcHQoKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZWYoKSB7CiAgICAgIGlmICh0aGlzLiNsaXN0ZW5lcikgewogICAgICAgIExpc3RlbmVyUmVmKHRoaXMuI2xpc3RlbmVyKTsKICAgICAgfQogICAgfQogICAgdW5yZWYoKSB7CiAgICAgIGlmICh0aGlzLiNsaXN0ZW5lcikgewogICAgICAgIExpc3RlbmVyVW5yZWYodGhpcy4jbGlzdGVuZXIpOwogICAgICB9CiAgICB9CiAgICBnZXRzb2NrbmFtZShzb2NrbmFtZSkgewogICAgICBpZiAodHlwZW9mIHRoaXMuI2FkZHJlc3MgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0aGlzLiNwb3J0ID09PSAidW5kZWZpbmVkIikgewogICAgICAgIHJldHVybiBjb2RlTWFwLmdldCgiRUFERFJOT1RBVkFJTCIpOwogICAgICB9CiAgICAgIHNvY2tuYW1lLmFkZHJlc3MgPSB0aGlzLiNhZGRyZXNzOwogICAgICBzb2NrbmFtZS5wb3J0ID0gdGhpcy4jcG9ydDsKICAgICAgc29ja25hbWUuZmFtaWx5ID0gaXNJUCh0aGlzLiNhZGRyZXNzKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBnZXRwZWVybmFtZShwZWVybmFtZSkgewogICAgICBpZiAodHlwZW9mIHRoaXMuI3JlbW90ZUFkZHJlc3MgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGVvZiB0aGlzLiNyZW1vdGVQb3J0ID09PSAidW5kZWZpbmVkIikgewogICAgICAgIHJldHVybiBjb2RlTWFwLmdldCgiRUFERFJOT1RBVkFJTCIpOwogICAgICB9CiAgICAgIHBlZXJuYW1lLmFkZHJlc3MgPSB0aGlzLiNyZW1vdGVBZGRyZXNzOwogICAgICBwZWVybmFtZS5wb3J0ID0gdGhpcy4jcmVtb3RlUG9ydDsKICAgICAgcGVlcm5hbWUuZmFtaWx5ID0gdGhpcy4jcmVtb3RlRmFtaWx5OwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHNldE5vRGVsYXkoX25vRGVsYXkpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBzZXRLZWVwQWxpdmUoX2VuYWJsZSwgX2luaXRpYWxEZWxheSkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHNldFNpbXVsdGFuZW91c0FjY2VwdHMoX2VuYWJsZSkgewogICAgICBub3RJbXBsZW1lbnRlZCgiVENQLnByb3RvdHlwZS5zZXRTaW11bHRhbmVvdXNBY2NlcHRzIik7CiAgICB9CiAgICAjYmluZChhZGRyZXNzLCBwb3J0LCBfZmxhZ3MpIHsKICAgICAgdGhpcy4jYWRkcmVzcyA9IGFkZHJlc3M7CiAgICAgIHRoaXMuI3BvcnQgPSBwb3J0OwogICAgICByZXR1cm4gMDsKICAgIH0KICAgICNjb25uZWN0KHJlcSwgYWRkcmVzcywgcG9ydCkgewogICAgICB0aGlzLiNyZW1vdGVBZGRyZXNzID0gYWRkcmVzczsKICAgICAgdGhpcy4jcmVtb3RlUG9ydCA9IHBvcnQ7CiAgICAgIHRoaXMuI3JlbW90ZUZhbWlseSA9IGlzSVAoYWRkcmVzcyk7CiAgICAgIGNvbnN0IGNvbm5lY3RPcHRpb25zID0gewogICAgICAgIGhvc3RuYW1lOiBhZGRyZXNzLAogICAgICAgIHBvcnQsCiAgICAgICAgdHJhbnNwb3J0OiAidGNwIgogICAgICB9OwogICAgICBEZW5vLmNvbm5lY3QoY29ubmVjdE9wdGlvbnMpLnRoZW4oCiAgICAgICAgKGNvbm4pID0+IHsKICAgICAgICAgIGNvbnN0IGxvY2FsQWRkciA9IGNvbm4ubG9jYWxBZGRyOwogICAgICAgICAgdGhpcy4jYWRkcmVzcyA9IHJlcS5sb2NhbEFkZHJlc3MgPSBsb2NhbEFkZHIuaG9zdG5hbWU7CiAgICAgICAgICB0aGlzLiNwb3J0ID0gcmVxLmxvY2FsUG9ydCA9IGxvY2FsQWRkci5wb3J0OwogICAgICAgICAgdGhpc1trU3RyZWFtQmFzZUZpZWxkXSA9IGNvbm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLmFmdGVyQ29ubmVjdChyZXEsIDApOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAoKSA9PiB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLmFmdGVyQ29ubmVjdChyZXEsIGNvZGVNYXAuZ2V0KCJFQ09OTlJFRlVTRUQiKSk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICk7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgYXN5bmMgI2FjY2VwdEJhY2tvZmYoKSB7CiAgICAgIGlmICghdGhpcy4jYWNjZXB0QmFja29mZkRlbGF5KSB7CiAgICAgICAgdGhpcy4jYWNjZXB0QmFja29mZkRlbGF5ID0gSU5JVElBTF9BQ0NFUFRfQkFDS09GRl9ERUxBWTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiNhY2NlcHRCYWNrb2ZmRGVsYXkgKj0gMjsKICAgICAgfQogICAgICBpZiAodGhpcy4jYWNjZXB0QmFja29mZkRlbGF5ID49IE1BWF9BQ0NFUFRfQkFDS09GRl9ERUxBWSkgewogICAgICAgIHRoaXMuI2FjY2VwdEJhY2tvZmZEZWxheSA9IE1BWF9BQ0NFUFRfQkFDS09GRl9ERUxBWTsKICAgICAgfQogICAgICBhd2FpdCBkZWxheSh0aGlzLiNhY2NlcHRCYWNrb2ZmRGVsYXkpOwogICAgICB0aGlzLiNhY2NlcHQoKTsKICAgIH0KICAgIGFzeW5jICNhY2NlcHQoKSB7CiAgICAgIGlmICh0aGlzLiNjbG9zZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMuI2Nvbm5lY3Rpb25zID4gdGhpcy4jYmFja2xvZykgewogICAgICAgIHRoaXMuI2FjY2VwdEJhY2tvZmYoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgbGV0IGNvbm5lY3Rpb247CiAgICAgIHRyeSB7CiAgICAgICAgY29ubmVjdGlvbiA9IGF3YWl0IHRoaXMuI2xpc3RlbmVyLmFjY2VwdCgpOwogICAgICB9IGNhdGNoIChlNSkgewogICAgICAgIGlmIChlNSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlICYmIHRoaXMuI2Nsb3NlZCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy5vbmNvbm5lY3Rpb24oY29kZU1hcC5nZXQoIlVOS05PV04iKSwgdm9pZCAwKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgICAgdGhpcy4jYWNjZXB0QmFja29mZigpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLiNhY2NlcHRCYWNrb2ZmRGVsYXkgPSB2b2lkIDA7CiAgICAgIGNvbnN0IGNvbm5lY3Rpb25IYW5kbGUgPSBuZXcgX1RDUCgwIC8qIFNPQ0tFVCAqLywgY29ubmVjdGlvbik7CiAgICAgIHRoaXMuI2Nvbm5lY3Rpb25zKys7CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5vbmNvbm5lY3Rpb24oMCwgY29ubmVjdGlvbkhhbmRsZSk7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICAgIHJldHVybiB0aGlzLiNhY2NlcHQoKTsKICAgIH0KICAgIF9vbkNsb3NlKCkgewogICAgICB0aGlzLiNjbG9zZWQgPSB0cnVlOwogICAgICB0aGlzLnJlYWRpbmcgPSBmYWxzZTsKICAgICAgdGhpcy4jYWRkcmVzcyA9IHZvaWQgMDsKICAgICAgdGhpcy4jcG9ydCA9IHZvaWQgMDsKICAgICAgdGhpcy4jcmVtb3RlQWRkcmVzcyA9IHZvaWQgMDsKICAgICAgdGhpcy4jcmVtb3RlRmFtaWx5ID0gdm9pZCAwOwogICAgICB0aGlzLiNyZW1vdGVQb3J0ID0gdm9pZCAwOwogICAgICB0aGlzLiNiYWNrbG9nID0gdm9pZCAwOwogICAgICB0aGlzLiNjb25uZWN0aW9ucyA9IDA7CiAgICAgIHRoaXMuI2FjY2VwdEJhY2tvZmZEZWxheSA9IHZvaWQgMDsKICAgICAgaWYgKHRoaXMucHJvdmlkZXIgPT09IDMzIC8qIFRDUFNFUlZFUldSQVAgKi8pIHsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy4jbGlzdGVuZXIuY2xvc2UoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIExpYnV2U3RyZWFtV3JhcC5wcm90b3R5cGUuX29uQ2xvc2UuY2FsbCh0aGlzKTsKICAgIH0KICB9OwogIHZhciBUQ1AgPSBfVENQOwogIF9hID0gb3duZXJTeW1ib2w7CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3RpbWVycy50cwogIHZhciB0aW1lcnNfZXhwb3J0cyA9IHt9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy90bHNfd3JhcC50cwogIHZhciB0bHNfd3JhcF9leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3RyYWNlX2V2ZW50cy50cwogIHZhciB0cmFjZV9ldmVudHNfZXhwb3J0cyA9IHt9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy90dHlfd3JhcC50cwogIHZhciB0dHlfd3JhcF9leHBvcnRzID0ge307CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3VkcF93cmFwLnRzCiAgdmFyIHVkcF93cmFwX2V4cG9ydHMgPSB7fTsKICBfX2V4cG9ydCh1ZHBfd3JhcF9leHBvcnRzLCB7CiAgICBTZW5kV3JhcDogKCkgPT4gU2VuZFdyYXAsCiAgICBVRFA6ICgpID0+IFVEUAogIH0pOwogIHZhciBBRl9JTkVUID0gMjsKICB2YXIgQUZfSU5FVDYgPSAxMDsKICB2YXIgVURQX0RHUkFNX01BWFNJWkUgPSA2NCAqIDEwMjQ7CiAgdmFyIFNlbmRXcmFwID0gY2xhc3MgZXh0ZW5kcyBBc3luY1dyYXAgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKDM2IC8qIFVEUFNFTkRXUkFQICovKTsKICAgIH0KICB9OwogIHZhciBfYTI7CiAgdmFyIFVEUCA9IGNsYXNzIGV4dGVuZHMgSGFuZGxlV3JhcCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoMzcgLyogVURQV1JBUCAqLyk7CiAgICAgIHRoaXNbX2EyXSA9IG51bGw7CiAgICAgIHRoaXMuI3JlY2VpdmluZyA9IGZhbHNlOwogICAgICB0aGlzLiNyZWN2QnVmZmVyU2l6ZSA9IFVEUF9ER1JBTV9NQVhTSVpFOwogICAgICB0aGlzLiNzZW5kQnVmZmVyU2l6ZSA9IFVEUF9ER1JBTV9NQVhTSVpFOwogICAgfQogICAgI2FkZHJlc3M7CiAgICAjZmFtaWx5OwogICAgI3BvcnQ7CiAgICAjcmVtb3RlQWRkcmVzczsKICAgICNyZW1vdGVGYW1pbHk7CiAgICAjcmVtb3RlUG9ydDsKICAgICNsaXN0ZW5lcjsKICAgICNyZWNlaXZpbmc7CiAgICAjcmVjdkJ1ZmZlclNpemU7CiAgICAjc2VuZEJ1ZmZlclNpemU7CiAgICBhZGRNZW1iZXJzaGlwKF9tdWx0aWNhc3RBZGRyZXNzLCBfaW50ZXJmYWNlQWRkcmVzcykgewogICAgICBub3RJbXBsZW1lbnRlZCgidWRwLlVEUC5wcm90b3R5cGUuYWRkTWVtYmVyc2hpcCIpOwogICAgfQogICAgYWRkU291cmNlU3BlY2lmaWNNZW1iZXJzaGlwKF9zb3VyY2VBZGRyZXNzLCBfZ3JvdXBBZGRyZXNzLCBfaW50ZXJmYWNlQWRkcmVzcykgewogICAgICBub3RJbXBsZW1lbnRlZCgidWRwLlVEUC5wcm90b3R5cGUuYWRkU291cmNlU3BlY2lmaWNNZW1iZXJzaGlwIik7CiAgICB9CiAgICBiaW5kKGlwLCBwb3J0LCBmbGFncykgewogICAgICByZXR1cm4gdGhpcy4jZG9CaW5kKGlwLCBwb3J0LCBmbGFncywgQUZfSU5FVCk7CiAgICB9CiAgICBiaW5kNihpcCwgcG9ydCwgZmxhZ3MpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RvQmluZChpcCwgcG9ydCwgZmxhZ3MsIEFGX0lORVQ2KTsKICAgIH0KICAgIGJ1ZmZlclNpemUoc2l6ZSwgYnVmZmVyLCBjdHgpIHsKICAgICAgbGV0IGVycjsKICAgICAgaWYgKHNpemUgPiBVRFBfREdSQU1fTUFYU0laRSkgewogICAgICAgIGVyciA9ICJFSU5WQUwiOwogICAgICB9IGVsc2UgaWYgKCF0aGlzLiNhZGRyZXNzKSB7CiAgICAgICAgZXJyID0gaXNXaW5kb3dzMiA/ICJFTk9UU09DSyIgOiAiRUJBREYiOwogICAgICB9CiAgICAgIGlmIChlcnIpIHsKICAgICAgICBjdHguZXJybm8gPSBjb2RlTWFwLmdldChlcnIpOwogICAgICAgIGN0eC5jb2RlID0gZXJyOwogICAgICAgIGN0eC5tZXNzYWdlID0gZXJyb3JNYXAuZ2V0KGN0eC5lcnJubylbMV07CiAgICAgICAgY3R4LnN5c2NhbGwgPSBidWZmZXIgPyAidXZfcmVjdl9idWZmZXJfc2l6ZSIgOiAidXZfc2VuZF9idWZmZXJfc2l6ZSI7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChzaXplICE9PSAwKSB7CiAgICAgICAgc2l6ZSA9IGlzTGludXggPyBzaXplICogMiA6IHNpemU7CiAgICAgICAgaWYgKGJ1ZmZlcikgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3JlY3ZCdWZmZXJTaXplID0gc2l6ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuI3NlbmRCdWZmZXJTaXplID0gc2l6ZTsKICAgICAgfQogICAgICByZXR1cm4gYnVmZmVyID8gdGhpcy4jcmVjdkJ1ZmZlclNpemUgOiB0aGlzLiNzZW5kQnVmZmVyU2l6ZTsKICAgIH0KICAgIGNvbm5lY3QoaXAsIHBvcnQpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RvQ29ubmVjdChpcCwgcG9ydCwgQUZfSU5FVCk7CiAgICB9CiAgICBjb25uZWN0NihpcCwgcG9ydCkgewogICAgICByZXR1cm4gdGhpcy4jZG9Db25uZWN0KGlwLCBwb3J0LCBBRl9JTkVUNik7CiAgICB9CiAgICBkaXNjb25uZWN0KCkgewogICAgICB0aGlzLiNyZW1vdGVBZGRyZXNzID0gdm9pZCAwOwogICAgICB0aGlzLiNyZW1vdGVQb3J0ID0gdm9pZCAwOwogICAgICB0aGlzLiNyZW1vdGVGYW1pbHkgPSB2b2lkIDA7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgZHJvcE1lbWJlcnNoaXAoX211bHRpY2FzdEFkZHJlc3MsIF9pbnRlcmZhY2VBZGRyZXNzKSB7CiAgICAgIG5vdEltcGxlbWVudGVkKCJ1ZHAuVURQLnByb3RvdHlwZS5kcm9wTWVtYmVyc2hpcCIpOwogICAgfQogICAgZHJvcFNvdXJjZVNwZWNpZmljTWVtYmVyc2hpcChfc291cmNlQWRkcmVzcywgX2dyb3VwQWRkcmVzcywgX2ludGVyZmFjZUFkZHJlc3MpIHsKICAgICAgbm90SW1wbGVtZW50ZWQoInVkcC5VRFAucHJvdG90eXBlLmRyb3BTb3VyY2VTcGVjaWZpY01lbWJlcnNoaXAiKTsKICAgIH0KICAgIGdldHBlZXJuYW1lKHBlZXJuYW1lKSB7CiAgICAgIGlmICh0aGlzLiNyZW1vdGVBZGRyZXNzID09PSB2b2lkIDApIHsKICAgICAgICByZXR1cm4gY29kZU1hcC5nZXQoIkVCQURGIik7CiAgICAgIH0KICAgICAgcGVlcm5hbWUuYWRkcmVzcyA9IHRoaXMuI3JlbW90ZUFkZHJlc3M7CiAgICAgIHBlZXJuYW1lLnBvcnQgPSB0aGlzLiNyZW1vdGVQb3J0OwogICAgICBwZWVybmFtZS5mYW1pbHkgPSB0aGlzLiNyZW1vdGVGYW1pbHk7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgZ2V0c29ja25hbWUoc29ja25hbWUpIHsKICAgICAgaWYgKHRoaXMuI2FkZHJlc3MgPT09IHZvaWQgMCkgewogICAgICAgIHJldHVybiBjb2RlTWFwLmdldCgiRUJBREYiKTsKICAgICAgfQogICAgICBzb2NrbmFtZS5hZGRyZXNzID0gdGhpcy4jYWRkcmVzczsKICAgICAgc29ja25hbWUucG9ydCA9IHRoaXMuI3BvcnQ7CiAgICAgIHNvY2tuYW1lLmZhbWlseSA9IHRoaXMuI2ZhbWlseTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBvcGVuKF9mZCkgewogICAgICBub3RJbXBsZW1lbnRlZCgidWRwLlVEUC5wcm90b3R5cGUub3BlbiIpOwogICAgfQogICAgcmVjdlN0YXJ0KCkgewogICAgICBpZiAoIXRoaXMuI3JlY2VpdmluZykgewogICAgICAgIHRoaXMuI3JlY2VpdmluZyA9IHRydWU7CiAgICAgICAgdGhpcy4jcmVjZWl2ZSgpOwogICAgICB9CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmVjdlN0b3AoKSB7CiAgICAgIHRoaXMuI3JlY2VpdmluZyA9IGZhbHNlOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJlZigpIHsKICAgICAgbm90SW1wbGVtZW50ZWQoInVkcC5VRFAucHJvdG90eXBlLnJlZiIpOwogICAgfQogICAgc2VuZChyZXEsIGJ1ZnMsIGNvdW50LCAuLi5hcmdzKSB7CiAgICAgIHJldHVybiB0aGlzLiNkb1NlbmQocmVxLCBidWZzLCBjb3VudCwgYXJncywgQUZfSU5FVCk7CiAgICB9CiAgICBzZW5kNihyZXEsIGJ1ZnMsIGNvdW50LCAuLi5hcmdzKSB7CiAgICAgIHJldHVybiB0aGlzLiNkb1NlbmQocmVxLCBidWZzLCBjb3VudCwgYXJncywgQUZfSU5FVDYpOwogICAgfQogICAgc2V0QnJvYWRjYXN0KF9ib29sKSB7CiAgICAgIG5vdEltcGxlbWVudGVkKCJ1ZHAuVURQLnByb3RvdHlwZS5zZXRCcm9hZGNhc3QiKTsKICAgIH0KICAgIHNldE11bHRpY2FzdEludGVyZmFjZShfaW50ZXJmYWNlQWRkcmVzcykgewogICAgICBub3RJbXBsZW1lbnRlZCgidWRwLlVEUC5wcm90b3R5cGUuc2V0TXVsdGljYXN0SW50ZXJmYWNlIik7CiAgICB9CiAgICBzZXRNdWx0aWNhc3RMb29wYmFjayhfYm9vbCkgewogICAgICBub3RJbXBsZW1lbnRlZCgidWRwLlVEUC5wcm90b3R5cGUuc2V0TXVsdGljYXN0TG9vcGJhY2siKTsKICAgIH0KICAgIHNldE11bHRpY2FzdFRUTChfdHRsKSB7CiAgICAgIG5vdEltcGxlbWVudGVkKCJ1ZHAuVURQLnByb3RvdHlwZS5zZXRNdWx0aWNhc3RUVEwiKTsKICAgIH0KICAgIHNldFRUTChfdHRsKSB7CiAgICAgIG5vdEltcGxlbWVudGVkKCJ1ZHAuVURQLnByb3RvdHlwZS5zZXRUVEwiKTsKICAgIH0KICAgIHVucmVmKCkgewogICAgICBub3RJbXBsZW1lbnRlZCgidWRwLlVEUC5wcm90b3R5cGUudW5yZWYiKTsKICAgIH0KICAgICNkb0JpbmQoaXAsIHBvcnQsIF9mbGFncywgZmFtaWx5KSB7CiAgICAgIGNvbnN0IGxpc3Rlbk9wdGlvbnMgPSB7CiAgICAgICAgcG9ydCwKICAgICAgICBob3N0bmFtZTogaXAsCiAgICAgICAgdHJhbnNwb3J0OiAidWRwIgogICAgICB9OwogICAgICBsZXQgbGlzdGVuZXI7CiAgICAgIHRyeSB7CiAgICAgICAgbGlzdGVuZXIgPSBsaXN0ZW5EYXRhZ3JhbShsaXN0ZW5PcHRpb25zKTsKICAgICAgfSBjYXRjaCAoZTUpIHsKICAgICAgICBpZiAoZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRySW5Vc2UpIHsKICAgICAgICAgIHJldHVybiBjb2RlTWFwLmdldCgiRUFERFJJTlVTRSIpOwogICAgICAgIH0gZWxzZSBpZiAoZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRyTm90QXZhaWxhYmxlKSB7CiAgICAgICAgICByZXR1cm4gY29kZU1hcC5nZXQoIkVBRERSTk9UQVZBSUwiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvZGVNYXAuZ2V0KCJVTktOT1dOIik7CiAgICAgIH0KICAgICAgY29uc3QgYWRkcmVzcyA9IGxpc3RlbmVyLmFkZHI7CiAgICAgIHRoaXMuI2FkZHJlc3MgPSBhZGRyZXNzLmhvc3RuYW1lOwogICAgICB0aGlzLiNwb3J0ID0gYWRkcmVzcy5wb3J0OwogICAgICB0aGlzLiNmYW1pbHkgPSBmYW1pbHkgPT09IEFGX0lORVQ2ID8gIklQdjYiIDogIklQdjQiOwogICAgICB0aGlzLiNsaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgICNkb0Nvbm5lY3QoaXAsIHBvcnQsIGZhbWlseSkgewogICAgICB0aGlzLiNyZW1vdGVBZGRyZXNzID0gaXA7CiAgICAgIHRoaXMuI3JlbW90ZVBvcnQgPSBwb3J0OwogICAgICB0aGlzLiNyZW1vdGVGYW1pbHkgPSBmYW1pbHkgPT09IEFGX0lORVQ2ID8gIklQdjYiIDogIklQdjQiOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgICNkb1NlbmQocmVxLCBidWZzLCBfY291bnQsIGFyZ3MsIF9mYW1pbHkpIHsKICAgICAgbGV0IGhhc0NhbGxiYWNrOwogICAgICBpZiAoYXJncy5sZW5ndGggPT09IDMpIHsKICAgICAgICB0aGlzLiNyZW1vdGVQb3J0ID0gYXJnc1swXTsKICAgICAgICB0aGlzLiNyZW1vdGVBZGRyZXNzID0gYXJnc1sxXTsKICAgICAgICBoYXNDYWxsYmFjayA9IGFyZ3NbMl07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGFzQ2FsbGJhY2sgPSBhcmdzWzBdOwogICAgICB9CiAgICAgIGNvbnN0IGFkZHIgPSB7CiAgICAgICAgaG9zdG5hbWU6IHRoaXMuI3JlbW90ZUFkZHJlc3MsCiAgICAgICAgcG9ydDogdGhpcy4jcmVtb3RlUG9ydCwKICAgICAgICB0cmFuc3BvcnQ6ICJ1ZHAiCiAgICAgIH07CiAgICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgVWludDhBcnJheSgKICAgICAgICBCdWZmZXI0LmNvbmNhdCgKICAgICAgICAgIGJ1ZnMubWFwKChidWYpID0+IHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBidWYgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlcjQuZnJvbShidWYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBCdWZmZXI0LmZyb20oYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKTsKICAgICAgICAgIH0pCiAgICAgICAgKQogICAgICApOwogICAgICAoYXN5bmMgKCkgPT4gewogICAgICAgIGxldCBzZW50OwogICAgICAgIGxldCBlcnIgPSBudWxsOwogICAgICAgIHRyeSB7CiAgICAgICAgICBzZW50ID0gYXdhaXQgdGhpcy4jbGlzdGVuZXIuc2VuZChwYXlsb2FkLCBhZGRyKTsKICAgICAgICB9IGNhdGNoIChlNSkgewogICAgICAgICAgaWYgKGU1IGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQmFkUmVzb3VyY2UpIHsKICAgICAgICAgICAgZXJyID0gY29kZU1hcC5nZXQoIkVCQURGIik7CiAgICAgICAgICB9IGVsc2UgaWYgKGU1IGluc3RhbmNlb2YgRXJyb3IgJiYgZTUubWVzc2FnZS5tYXRjaCgvb3MgZXJyb3IgKDQwfDkwfDEwMDQwKS8pKSB7CiAgICAgICAgICAgIGVyciA9IGNvZGVNYXAuZ2V0KCJFTVNHU0laRSIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZXJyID0gY29kZU1hcC5nZXQoIlVOS05PV04iKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbnQgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoaGFzQ2FsbGJhY2spIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJlcS5vbmNvbXBsZXRlKGVyciwgc2VudCk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgYXN5bmMgI3JlY2VpdmUoKSB7CiAgICAgIGlmICghdGhpcy4jcmVjZWl2aW5nKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHAxOCA9IG5ldyBVaW50OEFycmF5KHRoaXMuI3JlY3ZCdWZmZXJTaXplKTsKICAgICAgbGV0IGJ1ZjsKICAgICAgbGV0IHJlbW90ZUFkZHI7CiAgICAgIGxldCBucmVhZDsKICAgICAgdHJ5IHsKICAgICAgICBbYnVmLCByZW1vdGVBZGRyXSA9IGF3YWl0IHRoaXMuI2xpc3RlbmVyLnJlY2VpdmUocDE4KTsKICAgICAgICBucmVhZCA9IGJ1Zi5sZW5ndGg7CiAgICAgIH0gY2F0Y2ggKGU1KSB7CiAgICAgICAgaWYgKGU1IGluc3RhbmNlb2YgRGVuby5lcnJvcnMuSW50ZXJydXB0ZWQgfHwgZTUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5CYWRSZXNvdXJjZSkgewogICAgICAgICAgbnJlYWQgPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBucmVhZCA9IGNvZGVNYXAuZ2V0KCJVTktOT1dOIik7CiAgICAgICAgfQogICAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KDApOwogICAgICAgIHJlbW90ZUFkZHIgPSBudWxsOwogICAgICB9CiAgICAgIG5yZWFkID8/PSAwOwogICAgICBjb25zdCByaW5mbyA9IHJlbW90ZUFkZHIgPyB7CiAgICAgICAgYWRkcmVzczogcmVtb3RlQWRkci5ob3N0bmFtZSwKICAgICAgICBwb3J0OiByZW1vdGVBZGRyLnBvcnQsCiAgICAgICAgZmFtaWx5OiBpc0lQKHJlbW90ZUFkZHIuaG9zdG5hbWUpID09PSA2ID8gIklQdjYiIDogIklQdjQiCiAgICAgIH0gOiB2b2lkIDA7CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5vbm1lc3NhZ2UobnJlYWQsIHRoaXMsIEJ1ZmZlcjQuZnJvbShidWYpLCByaW5mbyk7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICAgIHRoaXMuI3JlY2VpdmUoKTsKICAgIH0KICAgIF9vbkNsb3NlKCkgewogICAgICB0aGlzLiNyZWNlaXZpbmcgPSBmYWxzZTsKICAgICAgdGhpcy4jYWRkcmVzcyA9IHZvaWQgMDsKICAgICAgdGhpcy4jcG9ydCA9IHZvaWQgMDsKICAgICAgdGhpcy4jZmFtaWx5ID0gdm9pZCAwOwogICAgICB0cnkgewogICAgICAgIHRoaXMuI2xpc3RlbmVyLmNsb3NlKCk7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICAgIHRoaXMuI2xpc3RlbmVyID0gdm9pZCAwOwogICAgICByZXR1cm4gMDsKICAgIH0KICB9OwogIF9hMiA9IG93bmVyU3ltYm9sOwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy91cmwudHMKICB2YXIgdXJsX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvdjgudHMKICB2YXIgdjhfZXhwb3J0cyA9IHt9OwoKICAvLyBkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy93b3JrZXIudHMKICB2YXIgd29ya2VyX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvemxpYi50cwogIHZhciB6bGliX2V4cG9ydHMgPSB7fTsKCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvbW9kLnRzCiAgdmFyIG1vZHVsZXMgPSB7CiAgICAiYXN5bmNfd3JhcCI6IGFzeW5jX3dyYXBfZXhwb3J0cywKICAgIGJ1ZmZlcjogYnVmZmVyX2V4cG9ydHMsCiAgICAiY2FyZXNfd3JhcCI6IGNhcmVzX3dyYXBfZXhwb3J0cywKICAgIGNvbmZpZzogY29uZmlnX2V4cG9ydHMsCiAgICBjb25zdGFudHM6IGNvbnN0YW50c19leHBvcnRzLAogICAgY29udGV4dGlmeTogY29udGV4dGlmeV9leHBvcnRzLAogICAgY3JlZGVudGlhbHM6IGNyZWRlbnRpYWxzX2V4cG9ydHMsCiAgICBjcnlwdG86IGNyeXB0b19leHBvcnRzLAogICAgZXJyb3JzOiBlcnJvcnNfZXhwb3J0cywKICAgIGZzOiBmc19leHBvcnRzLAogICAgImZzX2RpciI6IGZzX2Rpcl9leHBvcnRzLAogICAgImZzX2V2ZW50X3dyYXAiOiBmc19ldmVudF93cmFwX2V4cG9ydHMsCiAgICAiaGVhcF91dGlscyI6IGhlYXBfdXRpbHNfZXhwb3J0cywKICAgICJodHRwX3BhcnNlciI6IGh0dHBfcGFyc2VyX2V4cG9ydHMsCiAgICBpY3U6IGljdV9leHBvcnRzLAogICAgaW5zcGVjdG9yOiBpbnNwZWN0b3JfZXhwb3J0cywKICAgICJqc19zdHJlYW0iOiBqc19zdHJlYW1fZXhwb3J0cywKICAgIG1lc3NhZ2luZzogbWVzc2FnaW5nX2V4cG9ydHMsCiAgICAibW9kdWxlX3dyYXAiOiBtb2R1bGVfd3JhcF9leHBvcnRzLAogICAgIm5hdGl2ZV9tb2R1bGUiOiBuYXRpdmVfbW9kdWxlX2V4cG9ydHMsCiAgICBuYXRpdmVzOiBuYXRpdmVzX2V4cG9ydHMsCiAgICBvcHRpb25zOiBvcHRpb25zX2V4cG9ydHMsCiAgICBvczogb3NfZXhwb3J0cywKICAgIHBlcmZvcm1hbmNlOiBwZXJmb3JtYW5jZV9leHBvcnRzLAogICAgInBpcGVfd3JhcCI6IHBpcGVfd3JhcF9leHBvcnRzLAogICAgInByb2Nlc3NfbWV0aG9kcyI6IHByb2Nlc3NfbWV0aG9kc19leHBvcnRzLAogICAgcmVwb3J0OiByZXBvcnRfZXhwb3J0cywKICAgIHNlcmRlczogc2VyZGVzX2V4cG9ydHMsCiAgICAic2lnbmFsX3dyYXAiOiBzaWduYWxfd3JhcF9leHBvcnRzLAogICAgInNwYXduX3N5bmMiOiBzcGF3bl9zeW5jX2V4cG9ydHMsCiAgICAic3RyZWFtX3dyYXAiOiBzdHJlYW1fd3JhcF9leHBvcnRzLAogICAgInN0cmluZ19kZWNvZGVyIjogc3RyaW5nX2RlY29kZXJfZXhwb3J0cywKICAgIHN5bWJvbHM6IHN5bWJvbHNfZXhwb3J0cywKICAgICJ0YXNrX3F1ZXVlIjogdGFza19xdWV1ZV9leHBvcnRzLAogICAgInRjcF93cmFwIjogdGNwX3dyYXBfZXhwb3J0cywKICAgIHRpbWVyczogdGltZXJzX2V4cG9ydHMsCiAgICAidGxzX3dyYXAiOiB0bHNfd3JhcF9leHBvcnRzLAogICAgInRyYWNlX2V2ZW50cyI6IHRyYWNlX2V2ZW50c19leHBvcnRzLAogICAgInR0eV93cmFwIjogdHR5X3dyYXBfZXhwb3J0cywKICAgIHR5cGVzOiB0eXBlc19leHBvcnRzLAogICAgInVkcF93cmFwIjogdWRwX3dyYXBfZXhwb3J0cywKICAgIHVybDogdXJsX2V4cG9ydHMsCiAgICB1dGlsOiB1dGlsX2V4cG9ydHMsCiAgICB1djogdXZfZXhwb3J0cywKICAgIHY4OiB2OF9leHBvcnRzLAogICAgd29ya2VyOiB3b3JrZXJfZXhwb3J0cywKICAgIHpsaWI6IHpsaWJfZXhwb3J0cwogIH07CiAgZnVuY3Rpb24gZ2V0QmluZGluZyhuYW1lKSB7CiAgICBjb25zdCBtb2QgPSBtb2R1bGVzW25hbWVdOwogICAgaWYgKCFtb2QpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIG1vZHVsZTogJHtuYW1lfWApOwogICAgfQogICAgcmV0dXJuIG1vZDsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9wcm9jZXNzL3Blcl90aHJlYWQubWpzCiAgdmFyIGtJbnRlcm5hbCA9IFN5bWJvbCgiaW50ZXJuYWwgcHJvcGVydGllcyIpOwogIHZhciByZXBsYWNlVW5kZXJzY29yZXNSZWdleCA9IC9fL2c7CiAgdmFyIGxlYWRpbmdEYXNoZXNSZWdleCA9IC9eLS0/LzsKICB2YXIgdHJhaWxpbmdWYWx1ZXNSZWdleCA9IC89LiokLzsKICBmdW5jdGlvbiBidWlsZEFsbG93ZWRGbGFncygpIHsKICAgIGNvbnN0IGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFncyA9IFsKICAgICAgIi0tdHJhY2staGVhcC1vYmplY3RzIiwKICAgICAgIi0tbm8tdHJhY2staGVhcC1vYmplY3RzIiwKICAgICAgIi0tbm9kZS1zbmFwc2hvdCIsCiAgICAgICItLW5vLW5vZGUtc25hcHNob3QiLAogICAgICAiLS1yZXF1aXJlIiwKICAgICAgIi0tbWF4LW9sZC1zcGFjZS1zaXplIiwKICAgICAgIi0tdHJhY2UtZXhpdCIsCiAgICAgICItLW5vLXRyYWNlLWV4aXQiLAogICAgICAiLS1kaXNhbGxvdy1jb2RlLWdlbmVyYXRpb24tZnJvbS1zdHJpbmdzIiwKICAgICAgIi0tZXhwZXJpbWVudGFsLWpzb24tbW9kdWxlcyIsCiAgICAgICItLW5vLWV4cGVyaW1lbnRhbC1qc29uLW1vZHVsZXMiLAogICAgICAiLS1pbnRlcnByZXRlZC1mcmFtZXMtbmF0aXZlLXN0YWNrIiwKICAgICAgIi0taW5zcGVjdC1icmsiLAogICAgICAiLS1uby1pbnNwZWN0LWJyayIsCiAgICAgICItLXRyYWNlLXRscyIsCiAgICAgICItLW5vLXRyYWNlLXRscyIsCiAgICAgICItLXN0YWNrLXRyYWNlLWxpbWl0IiwKICAgICAgIi0tZXhwZXJpbWVudGFsLXJlcGwtYXdhaXQiLAogICAgICAiLS1uby1leHBlcmltZW50YWwtcmVwbC1hd2FpdCIsCiAgICAgICItLXByZXNlcnZlLXN5bWxpbmtzIiwKICAgICAgIi0tbm8tcHJlc2VydmUtc3ltbGlua3MiLAogICAgICAiLS1yZXBvcnQtdW5jYXVnaHQtZXhjZXB0aW9uIiwKICAgICAgIi0tbm8tcmVwb3J0LXVuY2F1Z2h0LWV4Y2VwdGlvbiIsCiAgICAgICItLWV4cGVyaW1lbnRhbC1tb2R1bGVzIiwKICAgICAgIi0tbm8tZXhwZXJpbWVudGFsLW1vZHVsZXMiLAogICAgICAiLS1yZXBvcnQtc2lnbmFsIiwKICAgICAgIi0taml0bGVzcyIsCiAgICAgICItLWluc3BlY3QtcG9ydCIsCiAgICAgICItLWhlYXBzbmFwc2hvdC1uZWFyLWhlYXAtbGltaXQiLAogICAgICAiLS10bHMta2V5bG9nIiwKICAgICAgIi0tZm9yY2UtY29udGV4dC1hd2FyZSIsCiAgICAgICItLW5vLWZvcmNlLWNvbnRleHQtYXdhcmUiLAogICAgICAiLS1uYXBpLW1vZHVsZXMiLAogICAgICAiLS1hYm9ydC1vbi11bmNhdWdodC1leGNlcHRpb24iLAogICAgICAiLS1kaWFnbm9zdGljLWRpciIsCiAgICAgICItLXZlcmlmeS1iYXNlLW9iamVjdHMiLAogICAgICAiLS1uby12ZXJpZnktYmFzZS1vYmplY3RzIiwKICAgICAgIi0tdW5oYW5kbGVkLXJlamVjdGlvbnMiLAogICAgICAiLS1wZXJmLWJhc2ljLXByb2YiLAogICAgICAiLS10cmFjZS1hdG9taWNzLXdhaXQiLAogICAgICAiLS1uby10cmFjZS1hdG9taWNzLXdhaXQiLAogICAgICAiLS1kZXByZWNhdGlvbiIsCiAgICAgICItLW5vLWRlcHJlY2F0aW9uIiwKICAgICAgIi0tcGVyZi1iYXNpYy1wcm9mLW9ubHktZnVuY3Rpb25zIiwKICAgICAgIi0tcGVyZi1wcm9mIiwKICAgICAgIi0tbWF4LWh0dHAtaGVhZGVyLXNpemUiLAogICAgICAiLS1yZXBvcnQtb24tc2lnbmFsIiwKICAgICAgIi0tbm8tcmVwb3J0LW9uLXNpZ25hbCIsCiAgICAgICItLXRocm93LWRlcHJlY2F0aW9uIiwKICAgICAgIi0tbm8tdGhyb3ctZGVwcmVjYXRpb24iLAogICAgICAiLS13YXJuaW5ncyIsCiAgICAgICItLW5vLXdhcm5pbmdzIiwKICAgICAgIi0tZm9yY2UtZmlwcyIsCiAgICAgICItLW5vLWZvcmNlLWZpcHMiLAogICAgICAiLS1wZW5kaW5nLWRlcHJlY2F0aW9uIiwKICAgICAgIi0tbm8tcGVuZGluZy1kZXByZWNhdGlvbiIsCiAgICAgICItLWlucHV0LXR5cGUiLAogICAgICAiLS10bHMtbWF4LXYxLjMiLAogICAgICAiLS1uby10bHMtbWF4LXYxLjMiLAogICAgICAiLS10bHMtbWluLXYxLjIiLAogICAgICAiLS1uby10bHMtbWluLXYxLjIiLAogICAgICAiLS1pbnNwZWN0IiwKICAgICAgIi0tbm8taW5zcGVjdCIsCiAgICAgICItLWhlYXBzbmFwc2hvdC1zaWduYWwiLAogICAgICAiLS10cmFjZS13YXJuaW5ncyIsCiAgICAgICItLW5vLXRyYWNlLXdhcm5pbmdzIiwKICAgICAgIi0tdHJhY2UtZXZlbnQtY2F0ZWdvcmllcyIsCiAgICAgICItLWV4cGVyaW1lbnRhbC13b3JrZXIiLAogICAgICAiLS10bHMtbWF4LXYxLjIiLAogICAgICAiLS1uby10bHMtbWF4LXYxLjIiLAogICAgICAiLS1wZXJmLXByb2YtdW53aW5kaW5nLWluZm8iLAogICAgICAiLS1wcmVzZXJ2ZS1zeW1saW5rcy1tYWluIiwKICAgICAgIi0tbm8tcHJlc2VydmUtc3ltbGlua3MtbWFpbiIsCiAgICAgICItLXBvbGljeS1pbnRlZ3JpdHkiLAogICAgICAiLS1leHBlcmltZW50YWwtd2FzbS1tb2R1bGVzIiwKICAgICAgIi0tbm8tZXhwZXJpbWVudGFsLXdhc20tbW9kdWxlcyIsCiAgICAgICItLW5vZGUtbWVtb3J5LWRlYnVnIiwKICAgICAgIi0taW5zcGVjdC1wdWJsaXNoLXVpZCIsCiAgICAgICItLXRscy1taW4tdjEuMyIsCiAgICAgICItLW5vLXRscy1taW4tdjEuMyIsCiAgICAgICItLWV4cGVyaW1lbnRhbC1zcGVjaWZpZXItcmVzb2x1dGlvbiIsCiAgICAgICItLXNlY3VyZS1oZWFwIiwKICAgICAgIi0tdGxzLW1pbi12MS4wIiwKICAgICAgIi0tbm8tdGxzLW1pbi12MS4wIiwKICAgICAgIi0tcmVkaXJlY3Qtd2FybmluZ3MiLAogICAgICAiLS1leHBlcmltZW50YWwtcmVwb3J0IiwKICAgICAgIi0tdHJhY2UtZXZlbnQtZmlsZS1wYXR0ZXJuIiwKICAgICAgIi0tdHJhY2UtdW5jYXVnaHQiLAogICAgICAiLS1uby10cmFjZS11bmNhdWdodCIsCiAgICAgICItLWV4cGVyaW1lbnRhbC1sb2FkZXIiLAogICAgICAiLS1odHRwLXBhcnNlciIsCiAgICAgICItLWRucy1yZXN1bHQtb3JkZXIiLAogICAgICAiLS10cmFjZS1zaWdpbnQiLAogICAgICAiLS1uby10cmFjZS1zaWdpbnQiLAogICAgICAiLS1zZWN1cmUtaGVhcC1taW4iLAogICAgICAiLS1lbmFibGUtZmlwcyIsCiAgICAgICItLW5vLWVuYWJsZS1maXBzIiwKICAgICAgIi0tZW5hYmxlLXNvdXJjZS1tYXBzIiwKICAgICAgIi0tbm8tZW5hYmxlLXNvdXJjZS1tYXBzIiwKICAgICAgIi0taW5zZWN1cmUtaHR0cC1wYXJzZXIiLAogICAgICAiLS1uby1pbnNlY3VyZS1odHRwLXBhcnNlciIsCiAgICAgICItLXVzZS1vcGVuc3NsLWNhIiwKICAgICAgIi0tbm8tdXNlLW9wZW5zc2wtY2EiLAogICAgICAiLS10bHMtY2lwaGVyLWxpc3QiLAogICAgICAiLS1leHBlcmltZW50YWwtdG9wLWxldmVsLWF3YWl0IiwKICAgICAgIi0tbm8tZXhwZXJpbWVudGFsLXRvcC1sZXZlbC1hd2FpdCIsCiAgICAgICItLW9wZW5zc2wtY29uZmlnIiwKICAgICAgIi0taWN1LWRhdGEtZGlyIiwKICAgICAgIi0tdjgtcG9vbC1zaXplIiwKICAgICAgIi0tcmVwb3J0LW9uLWZhdGFsZXJyb3IiLAogICAgICAiLS1uby1yZXBvcnQtb24tZmF0YWxlcnJvciIsCiAgICAgICItLXRpdGxlIiwKICAgICAgIi0tdGxzLW1pbi12MS4xIiwKICAgICAgIi0tbm8tdGxzLW1pbi12MS4xIiwKICAgICAgIi0tcmVwb3J0LWZpbGVuYW1lIiwKICAgICAgIi0tdHJhY2UtZGVwcmVjYXRpb24iLAogICAgICAiLS1uby10cmFjZS1kZXByZWNhdGlvbiIsCiAgICAgICItLXJlcG9ydC1jb21wYWN0IiwKICAgICAgIi0tbm8tcmVwb3J0LWNvbXBhY3QiLAogICAgICAiLS1leHBlcmltZW50YWwtcG9saWN5IiwKICAgICAgIi0tZXhwZXJpbWVudGFsLWltcG9ydC1tZXRhLXJlc29sdmUiLAogICAgICAiLS1uby1leHBlcmltZW50YWwtaW1wb3J0LW1ldGEtcmVzb2x2ZSIsCiAgICAgICItLXplcm8tZmlsbC1idWZmZXJzIiwKICAgICAgIi0tbm8temVyby1maWxsLWJ1ZmZlcnMiLAogICAgICAiLS1yZXBvcnQtZGlyIiwKICAgICAgIi0tdXNlLWJ1bmRsZWQtY2EiLAogICAgICAiLS1uby11c2UtYnVuZGxlZC1jYSIsCiAgICAgICItLWV4cGVyaW1lbnRhbC12bS1tb2R1bGVzIiwKICAgICAgIi0tbm8tZXhwZXJpbWVudGFsLXZtLW1vZHVsZXMiLAogICAgICAiLS1mb3JjZS1hc3luYy1ob29rcy1jaGVja3MiLAogICAgICAiLS1uby1mb3JjZS1hc3luYy1ob29rcy1jaGVja3MiLAogICAgICAiLS1mcm96ZW4taW50cmluc2ljcyIsCiAgICAgICItLW5vLWZyb3plbi1pbnRyaW5zaWNzIiwKICAgICAgIi0taHVnZS1tYXgtb2xkLWdlbmVyYXRpb24tc2l6ZSIsCiAgICAgICItLWRpc2FibGUtcHJvdG8iLAogICAgICAiLS1kZWJ1Zy1hcnJheWJ1ZmZlci1hbGxvY2F0aW9ucyIsCiAgICAgICItLW5vLWRlYnVnLWFycmF5YnVmZmVyLWFsbG9jYXRpb25zIiwKICAgICAgIi0tY29uZGl0aW9ucyIsCiAgICAgICItLWV4cGVyaW1lbnRhbC13YXNpLXVuc3RhYmxlLXByZXZpZXcxIiwKICAgICAgIi0tbm8tZXhwZXJpbWVudGFsLXdhc2ktdW5zdGFibGUtcHJldmlldzEiLAogICAgICAiLS10cmFjZS1zeW5jLWlvIiwKICAgICAgIi0tbm8tdHJhY2Utc3luYy1pbyIsCiAgICAgICItLXVzZS1sYXJnZXBhZ2VzIiwKICAgICAgIi0tZXhwZXJpbWVudGFsLWFib3J0Y29udHJvbGxlciIsCiAgICAgICItLWRlYnVnLXBvcnQiLAogICAgICAiLS1lcy1tb2R1bGUtc3BlY2lmaWVyLXJlc29sdXRpb24iLAogICAgICAiLS1wcm9mLXByb2Nlc3MiLAogICAgICAiLUMiLAogICAgICAiLS1sb2FkZXIiLAogICAgICAiLS1yZXBvcnQtZGlyZWN0b3J5IiwKICAgICAgIi1yIiwKICAgICAgIi0tdHJhY2UtZXZlbnRzLWVuYWJsZWQiCiAgICBdOwogICAgY29uc3QgdHJpbUxlYWRpbmdEYXNoZXMgPSAoZmxhZykgPT4gZmxhZy5yZXBsYWNlKGxlYWRpbmdEYXNoZXNSZWdleCwgIiIpOwogICAgY29uc3Qgbm9kZUZsYWdzID0gYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzLm1hcCh0cmltTGVhZGluZ0Rhc2hlcyk7CiAgICBjbGFzcyBOb2RlRW52aXJvbm1lbnRGbGFnc1NldCBleHRlbmRzIFNldCB7CiAgICAgIGNvbnN0cnVjdG9yKGFycmF5KSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzW2tJbnRlcm5hbF0gPSB7IGFycmF5IH07CiAgICAgIH0KICAgICAgYWRkKCkgewogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIGRlbGV0ZSgpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgY2xlYXIoKSB7CiAgICAgIH0KICAgICAgaGFzKGtleSkgewogICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAic3RyaW5nIikgewogICAgICAgICAga2V5ID0ga2V5LnJlcGxhY2UocmVwbGFjZVVuZGVyc2NvcmVzUmVnZXgsICItIik7CiAgICAgICAgICBpZiAobGVhZGluZ0Rhc2hlc1JlZ2V4LnRlc3Qoa2V5KSkgewogICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSh0cmFpbGluZ1ZhbHVlc1JlZ2V4LCAiIik7CiAgICAgICAgICAgIHJldHVybiB0aGlzW2tJbnRlcm5hbF0uYXJyYXkuaW5jbHVkZXMoa2V5KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBub2RlRmxhZ3MuaW5jbHVkZXMoa2V5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGVudHJpZXMoKSB7CiAgICAgICAgdGhpc1trSW50ZXJuYWxdLnNldCA/Pz0gbmV3IFNldCh0aGlzW2tJbnRlcm5hbF0uYXJyYXkpOwogICAgICAgIHJldHVybiB0aGlzW2tJbnRlcm5hbF0uc2V0LmVudHJpZXMoKTsKICAgICAgfQogICAgICBmb3JFYWNoKGNhbGxiYWNrLCB0aGlzQXJnID0gdm9pZCAwKSB7CiAgICAgICAgdGhpc1trSW50ZXJuYWxdLmFycmF5LmZvckVhY2goCiAgICAgICAgICAodjE1KSA9PiBSZWZsZWN0LmFwcGx5KGNhbGxiYWNrLCB0aGlzQXJnLCBbdjE1LCB2MTUsIHRoaXNdKQogICAgICAgICk7CiAgICAgIH0KICAgICAgZ2V0IHNpemUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXNba0ludGVybmFsXS5hcnJheS5sZW5ndGg7CiAgICAgIH0KICAgICAgdmFsdWVzKCkgewogICAgICAgIHRoaXNba0ludGVybmFsXS5zZXQgPz89IG5ldyBTZXQodGhpc1trSW50ZXJuYWxdLmFycmF5KTsKICAgICAgICByZXR1cm4gdGhpc1trSW50ZXJuYWxdLnNldC52YWx1ZXMoKTsKICAgICAgfQogICAgfQogICAgTm9kZUVudmlyb25tZW50RmxhZ3NTZXQucHJvdG90eXBlLmtleXMgPSBOb2RlRW52aXJvbm1lbnRGbGFnc1NldC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IE5vZGVFbnZpcm9ubWVudEZsYWdzU2V0LnByb3RvdHlwZS52YWx1ZXM7CiAgICBPYmplY3QuZnJlZXplKE5vZGVFbnZpcm9ubWVudEZsYWdzU2V0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcik7CiAgICBPYmplY3QuZnJlZXplKE5vZGVFbnZpcm9ubWVudEZsYWdzU2V0LnByb3RvdHlwZSk7CiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSgKICAgICAgbmV3IE5vZGVFbnZpcm9ubWVudEZsYWdzU2V0KAogICAgICAgIGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFncwogICAgICApCiAgICApOwogIH0KCiAgLy8gZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL3Byb2Nlc3MudHMKICB2YXIgc3RkZXJyMiA9IHN0ZGVycjsKICB2YXIgc3RkaW4yID0gc3RkaW47CiAgdmFyIHN0ZG91dDIgPSBzdGRvdXQ7CiAgdmFyIG5vdEltcGxlbWVudGVkRXZlbnRzID0gWwogICAgImRpc2Nvbm5lY3QiLAogICAgIm1lc3NhZ2UiLAogICAgIm11bHRpcGxlUmVzb2x2ZXMiLAogICAgInJlamVjdGlvbkhhbmRsZWQiLAogICAgIndvcmtlciIKICBdOwogIHZhciBhcmd2ID0gWyIiLCAiIiwgLi4uRGVuby5hcmdzXTsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJndiwgIjAiLCB7IGdldDogRGVuby5leGVjUGF0aCB9KTsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJndiwgIjEiLCB7CiAgICBnZXQ6ICgpID0+IHsKICAgICAgaWYgKERlbm8ubWFpbk1vZHVsZS5zdGFydHNXaXRoKCJmaWxlOiIpKSB7CiAgICAgICAgcmV0dXJuIGZyb21GaWxlVXJsNihEZW5vLm1haW5Nb2R1bGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBqb2luOShEZW5vLmN3ZCgpLCAiJGRlbm8kbm9kZS5qcyIpOwogICAgICB9CiAgICB9CiAgfSk7CiAgdmFyIGV4aXQgPSAoY29kZSkgPT4gewogICAgaWYgKGNvZGUgfHwgY29kZSA9PT0gMCkgewogICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgY29uc3QgcGFyc2VkQ29kZSA9IHBhcnNlSW50KGNvZGUpOwogICAgICAgIHByb2Nlc3MyLmV4aXRDb2RlID0gaXNOYU4ocGFyc2VkQ29kZSkgPyB2b2lkIDAgOiBwYXJzZWRDb2RlOwogICAgICB9IGVsc2UgewogICAgICAgIHByb2Nlc3MyLmV4aXRDb2RlID0gY29kZTsKICAgICAgfQogICAgfQogICAgaWYgKCFwcm9jZXNzMi5fZXhpdGluZykgewogICAgICBwcm9jZXNzMi5fZXhpdGluZyA9IHRydWU7CiAgICAgIHByb2Nlc3MyLmVtaXQoImV4aXQiLCBwcm9jZXNzMi5leGl0Q29kZSB8fCAwKTsKICAgIH0KICAgIERlbm8uZXhpdChwcm9jZXNzMi5leGl0Q29kZSB8fCAwKTsKICB9OwogIGZ1bmN0aW9uIGFkZFJlYWRPbmx5UHJvY2Vzc0FsaWFzKG5hbWUsIG9wdGlvbiwgZW51bWVyYWJsZSA9IHRydWUpIHsKICAgIGNvbnN0IHZhbHVlID0gZ2V0T3B0aW9uVmFsdWUob3B0aW9uKTsKICAgIGlmICh2YWx1ZSkgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvY2VzczIsIG5hbWUsIHsKICAgICAgICB3cml0YWJsZTogZmFsc2UsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIGVudW1lcmFibGUsCiAgICAgICAgdmFsdWUKICAgICAgfSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGNyZWF0ZVdhcm5pbmdPYmplY3Qod2FybmluZywgdHlwZSwgY29kZSwgY3RvciwgZGV0YWlsKSB7CiAgICBhc3NlcnQzKHR5cGVvZiB3YXJuaW5nID09PSAic3RyaW5nIik7CiAgICBjb25zdCB3YXJuaW5nRXJyID0gbmV3IEVycm9yKHdhcm5pbmcpOwogICAgd2FybmluZ0Vyci5uYW1lID0gU3RyaW5nKHR5cGUgfHwgIldhcm5pbmciKTsKICAgIGlmIChjb2RlICE9PSB2b2lkIDApIHsKICAgICAgd2FybmluZ0Vyci5jb2RlID0gY29kZTsKICAgIH0KICAgIGlmIChkZXRhaWwgIT09IHZvaWQgMCkgewogICAgICB3YXJuaW5nRXJyLmRldGFpbCA9IGRldGFpbDsKICAgIH0KICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHdhcm5pbmdFcnIsIGN0b3IgfHwgcHJvY2VzczIuZW1pdFdhcm5pbmcpOwogICAgcmV0dXJuIHdhcm5pbmdFcnI7CiAgfQogIGZ1bmN0aW9uIGRvRW1pdFdhcm5pbmcod2FybmluZykgewogICAgcHJvY2VzczIuZW1pdCgid2FybmluZyIsIHdhcm5pbmcpOwogIH0KICBmdW5jdGlvbiBlbWl0V2FybmluZyh3YXJuaW5nLCB0eXBlLCBjb2RlLCBjdG9yKSB7CiAgICBsZXQgZGV0YWlsOwogICAgaWYgKHR5cGUgIT09IG51bGwgJiYgdHlwZW9mIHR5cGUgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KHR5cGUpKSB7CiAgICAgIGN0b3IgPSB0eXBlLmN0b3I7CiAgICAgIGNvZGUgPSB0eXBlLmNvZGU7CiAgICAgIGlmICh0eXBlb2YgdHlwZS5kZXRhaWwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgZGV0YWlsID0gdHlwZS5kZXRhaWw7CiAgICAgIH0KICAgICAgdHlwZSA9IHR5cGUudHlwZSB8fCAiV2FybmluZyI7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGN0b3IgPSB0eXBlOwogICAgICBjb2RlID0gdm9pZCAwOwogICAgICB0eXBlID0gIldhcm5pbmciOwogICAgfQogICAgaWYgKHR5cGUgIT09IHZvaWQgMCkgewogICAgICB2YWxpZGF0ZVN0cmluZyh0eXBlLCAidHlwZSIpOwogICAgfQogICAgaWYgKHR5cGVvZiBjb2RlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIGN0b3IgPSBjb2RlOwogICAgICBjb2RlID0gdm9pZCAwOwogICAgfSBlbHNlIGlmIChjb2RlICE9PSB2b2lkIDApIHsKICAgICAgdmFsaWRhdGVTdHJpbmcoY29kZSwgImNvZGUiKTsKICAgIH0KICAgIGlmICh0eXBlb2Ygd2FybmluZyA9PT0gInN0cmluZyIpIHsKICAgICAgd2FybmluZyA9IGNyZWF0ZVdhcm5pbmdPYmplY3Qod2FybmluZywgdHlwZSwgY29kZSwgY3RvciwgZGV0YWlsKTsKICAgIH0gZWxzZSBpZiAoISh3YXJuaW5nIGluc3RhbmNlb2YgRXJyb3IpKSB7CiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRSgid2FybmluZyIsIFsiRXJyb3IiLCAic3RyaW5nIl0sIHdhcm5pbmcpOwogICAgfQogICAgaWYgKHdhcm5pbmcubmFtZSA9PT0gIkRlcHJlY2F0aW9uV2FybmluZyIpIHsKICAgICAgaWYgKHByb2Nlc3MyLm5vRGVwcmVjYXRpb24pIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHByb2Nlc3MyLnRocm93RGVwcmVjYXRpb24pIHsKICAgICAgICByZXR1cm4gcHJvY2VzczIubmV4dFRpY2soKCkgPT4gewogICAgICAgICAgdGhyb3cgd2FybmluZzsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgcHJvY2VzczIubmV4dFRpY2soZG9FbWl0V2FybmluZywgd2FybmluZyk7CiAgfQogIGZ1bmN0aW9uIGhydGltZSh0aW1lKSB7CiAgICBjb25zdCBtaWxsaSA9IHBlcmZvcm1hbmNlLm5vdygpOwogICAgY29uc3Qgc2VjID0gTWF0aC5mbG9vcihtaWxsaSAvIDFlMyk7CiAgICBjb25zdCBuYW5vID0gTWF0aC5mbG9vcihtaWxsaSAqIDFlNiAtIHNlYyAqIDFlOSk7CiAgICBpZiAoIXRpbWUpIHsKICAgICAgcmV0dXJuIFtzZWMsIG5hbm9dOwogICAgfQogICAgY29uc3QgW3ByZXZTZWMsIHByZXZOYW5vXSA9IHRpbWU7CiAgICByZXR1cm4gW3NlYyAtIHByZXZTZWMsIG5hbm8gLSBwcmV2TmFub107CiAgfQogIGhydGltZS5iaWdpbnQgPSBmdW5jdGlvbigpIHsKICAgIGNvbnN0IFtzZWMsIG5hbm9dID0gaHJ0aW1lKCk7CiAgICByZXR1cm4gQmlnSW50KHNlYykgKiAxMDAwMDAwMDAwbiArIEJpZ0ludChuYW5vKTsKICB9OwogIGZ1bmN0aW9uIG1lbW9yeVVzYWdlKCkgewogICAgcmV0dXJuIHsKICAgICAgLi4uRGVuby5tZW1vcnlVc2FnZSgpLAogICAgICBhcnJheUJ1ZmZlcnM6IDAKICAgIH07CiAgfQogIG1lbW9yeVVzYWdlLnJzcyA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG1lbW9yeVVzYWdlKCkucnNzOwogIH07CiAgZnVuY3Rpb24ga2lsbChwaWQyLCBzaWcgPSAiU0lHVEVSTSIpIHsKICAgIGlmIChwaWQyICE9IChwaWQyIHwgMCkpIHsKICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKCJwaWQiLCAibnVtYmVyIiwgcGlkMik7CiAgICB9CiAgICBpZiAodHlwZW9mIHNpZyA9PT0gInN0cmluZyIpIHsKICAgICAgdHJ5IHsKICAgICAgICBEZW5vLmtpbGwocGlkMiwgc2lnKTsKICAgICAgfSBjYXRjaCAoZTUpIHsKICAgICAgICBpZiAoZTUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHsKICAgICAgICAgIHRocm93IG5ldyBFUlJfVU5LTk9XTl9TSUdOQUwoc2lnKTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgZTU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFUlJfVU5LTk9XTl9TSUdOQUwoc2lnLnRvU3RyaW5nKCkpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIGZ1bmN0aW9uIHVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcihlcnIsIG9yaWdpbikgewogICAgcHJvY2VzczIuZW1pdCgidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yIiwgZXJyLCBvcmlnaW4pOwogICAgcHJvY2VzczIuZW1pdCgidW5jYXVnaHRFeGNlcHRpb24iLCBlcnIsIG9yaWdpbik7CiAgfQogIHZhciBQcm9jZXNzID0gY2xhc3MgZXh0ZW5kcyBFdmVudEVtaXR0ZXIgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIHRoaXMuYXJjaCA9IGFyY2g7CiAgICAgIHRoaXMuYXJndiA9IGFyZ3Y7CiAgICAgIHRoaXMuY2hkaXIgPSBjaGRpcjsKICAgICAgdGhpcy5jb25maWcgPSB7CiAgICAgICAgdGFyZ2V0X2RlZmF1bHRzOiB7fSwKICAgICAgICB2YXJpYWJsZXM6IHt9CiAgICAgIH07CiAgICAgIHRoaXMuY3dkID0gY3dkOwogICAgICB0aGlzLmVudiA9IGVudjsKICAgICAgdGhpcy5leGVjQXJndiA9IFtdOwogICAgICB0aGlzLmV4aXQgPSBleGl0OwogICAgICB0aGlzLl9leGl0aW5nID0gX2V4aXRpbmc7CiAgICAgIHRoaXMuZXhpdENvZGUgPSB2b2lkIDA7CiAgICAgIHRoaXMubWFpbk1vZHVsZSA9IHZvaWQgMDsKICAgICAgdGhpcy5uZXh0VGljayA9IG5leHRUaWNrMzsKICAgICAgdGhpcy5waWQgPSBwaWQ7CiAgICAgIHRoaXMucGxhdGZvcm0gPSBwbGF0Zm9ybTsKICAgICAgdGhpcy5ocnRpbWUgPSBocnRpbWU7CiAgICAgIHRoaXMua2lsbCA9IGtpbGw7CiAgICAgIHRoaXMubWVtb3J5VXNhZ2UgPSBtZW1vcnlVc2FnZTsKICAgICAgdGhpcy5zdGRlcnIgPSBzdGRlcnIyOwogICAgICB0aGlzLnN0ZGluID0gc3RkaW4yOwogICAgICB0aGlzLnN0ZG91dCA9IHN0ZG91dDI7CiAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247CiAgICAgIHRoaXMudmVyc2lvbnMgPSB2ZXJzaW9uczsKICAgICAgdGhpcy5lbWl0V2FybmluZyA9IGVtaXRXYXJuaW5nOwogICAgICB0aGlzLl9ldmFsID0gdm9pZCAwOwogICAgICB0aGlzLiNzdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgICB0aGlzLiNhbGxvd2VkRmxhZ3MgPSBidWlsZEFsbG93ZWRGbGFncygpOwogICAgICB0aGlzLmZlYXR1cmVzID0geyBpbnNwZWN0b3I6IGZhbHNlIH07CiAgICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidW5oYW5kbGVkcmVqZWN0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgaWYgKHByb2Nlc3MyLmxpc3RlbmVyQ291bnQoInVuaGFuZGxlZFJlamVjdGlvbiIpID09PSAwKSB7CiAgICAgICAgICBpZiAocHJvY2VzczIubGlzdGVuZXJDb3VudCgidW5jYXVnaHRFeGNlcHRpb24iKSA9PT0gMCkgewogICAgICAgICAgICB0aHJvdyBldmVudC5yZWFzb247CiAgICAgICAgICB9CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKGV2ZW50LnJlYXNvbiwgInVuaGFuZGxlZFJlamVjdGlvbiIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHByb2Nlc3MyLmVtaXQoInVuaGFuZGxlZFJlamVjdGlvbiIsIGV2ZW50LnJlYXNvbiwgZXZlbnQucHJvbWlzZSk7CiAgICAgIH0pOwogICAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgKGV2ZW50KSA9PiB7CiAgICAgICAgaWYgKHByb2Nlc3MyLmxpc3RlbmVyQ291bnQoInVuY2F1Z2h0RXhjZXB0aW9uIikgPiAwKSB7CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgICB1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIoZXZlbnQuZXJyb3IsICJ1bmNhdWdodEV4Y2VwdGlvbiIpOwogICAgICB9KTsKICAgICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLCAoZTUpID0+IHsKICAgICAgICBzdXBlci5lbWl0KCJiZWZvcmVFeGl0IiwgcHJvY2VzczIuZXhpdENvZGUgfHwgMCk7CiAgICAgICAgcHJvY2Vzc1RpY2tzQW5kUmVqZWN0aW9ucygpOwogICAgICAgIGlmIChjb3JlMi5ldmVudExvb3BIYXNNb3JlV29yaygpKSB7CiAgICAgICAgICBlNS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIiwgKCkgPT4gewogICAgICAgIGlmICghcHJvY2VzczIuX2V4aXRpbmcpIHsKICAgICAgICAgIHByb2Nlc3MyLl9leGl0aW5nID0gdHJ1ZTsKICAgICAgICAgIHN1cGVyLmVtaXQoImV4aXQiLCBwcm9jZXNzMi5leGl0Q29kZSB8fCAwKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgb24oZXZlbnQsIGxpc3RlbmVyKSB7CiAgICAgIGlmIChub3RJbXBsZW1lbnRlZEV2ZW50cy5pbmNsdWRlcyhldmVudCkpIHsKICAgICAgICB3YXJuTm90SW1wbGVtZW50ZWQoYHByb2Nlc3Mub24oIiR7ZXZlbnR9IilgKTsKICAgICAgICBzdXBlci5vbihldmVudCwgbGlzdGVuZXIpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0c1dpdGgoIlNJRyIpKSB7CiAgICAgICAgaWYgKGV2ZW50ID09PSAiU0lHQlJFQUsiICYmIERlbm8uYnVpbGQub3MgIT09ICJ3aW5kb3dzIikgewogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhZGRTaWduYWxMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzdXBlci5vbihldmVudCwgbGlzdGVuZXIpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgb2ZmKGV2ZW50LCBsaXN0ZW5lcikgewogICAgICBpZiAobm90SW1wbGVtZW50ZWRFdmVudHMuaW5jbHVkZXMoZXZlbnQpKSB7CiAgICAgICAgd2Fybk5vdEltcGxlbWVudGVkKGBwcm9jZXNzLm9mZigiJHtldmVudH0iKWApOwogICAgICAgIHN1cGVyLm9mZihldmVudCwgbGlzdGVuZXIpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0c1dpdGgoIlNJRyIpKSB7CiAgICAgICAgaWYgKGV2ZW50ID09PSAiU0lHQlJFQUsiICYmIERlbm8uYnVpbGQub3MgIT09ICJ3aW5kb3dzIikgewogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZW1vdmVTaWduYWxMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzdXBlci5vZmYoZXZlbnQsIGxpc3RlbmVyKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHsKICAgICAgaWYgKGV2ZW50LnN0YXJ0c1dpdGgoIlNJRyIpKSB7CiAgICAgICAgaWYgKGV2ZW50ID09PSAiU0lHQlJFQUsiICYmIERlbm8uYnVpbGQub3MgIT09ICJ3aW5kb3dzIikgewogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBEZW5vLmtpbGwoRGVuby5waWQsIGV2ZW50KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHN1cGVyLmVtaXQoZXZlbnQsIC4uLmFyZ3MpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcHJlcGVuZExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcikgewogICAgICBpZiAobm90SW1wbGVtZW50ZWRFdmVudHMuaW5jbHVkZXMoZXZlbnQpKSB7CiAgICAgICAgd2Fybk5vdEltcGxlbWVudGVkKGBwcm9jZXNzLnByZXBlbmRMaXN0ZW5lcigiJHtldmVudH0iKWApOwogICAgICAgIHN1cGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0c1dpdGgoIlNJRyIpKSB7CiAgICAgICAgaWYgKGV2ZW50ID09PSAiU0lHQlJFQUsiICYmIERlbm8uYnVpbGQub3MgIT09ICJ3aW5kb3dzIikgewogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhZGRTaWduYWxMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzdXBlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGFkZExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcikgewogICAgICBpZiAobm90SW1wbGVtZW50ZWRFdmVudHMuaW5jbHVkZXMoZXZlbnQpKSB7CiAgICAgICAgd2Fybk5vdEltcGxlbWVudGVkKGBwcm9jZXNzLmFkZExpc3RlbmVyKCIke2V2ZW50fSIpYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIGxpc3RlbmVyKTsKICAgIH0KICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcikgewogICAgICBpZiAobm90SW1wbGVtZW50ZWRFdmVudHMuaW5jbHVkZXMoZXZlbnQpKSB7CiAgICAgICAgd2Fybk5vdEltcGxlbWVudGVkKGBwcm9jZXNzLnJlbW92ZUxpc3RlbmVyKCIke2V2ZW50fSIpYCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMub2ZmKGV2ZW50LCBsaXN0ZW5lcik7CiAgICB9CiAgICBiaW5kaW5nKG5hbWUpIHsKICAgICAgcmV0dXJuIGdldEJpbmRpbmcobmFtZSk7CiAgICB9CiAgICB1bWFzaygpIHsKICAgICAgcmV0dXJuIDE4OwogICAgfQogICAgZ2V0dWlkKCkgewogICAgICByZXR1cm4gTmFOOwogICAgfQogICAgZ2V0Z2lkKCkgewogICAgICByZXR1cm4gTmFOOwogICAgfQogICAgZ2V0IGV4ZWNQYXRoKCkgewogICAgICByZXR1cm4gYXJndlswXTsKICAgIH0KICAgICNzdGFydFRpbWU7CiAgICB1cHRpbWUoKSB7CiAgICAgIHJldHVybiAoRGF0ZS5ub3coKSAtIHRoaXMuI3N0YXJ0VGltZSkgLyAxZTM7CiAgICB9CiAgICAjYWxsb3dlZEZsYWdzOwogICAgZ2V0IGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFncygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FsbG93ZWRGbGFnczsKICAgIH0KICB9OwogIHZhciBwcm9jZXNzMiA9IG5ldyBQcm9jZXNzKCk7CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb2Nlc3MyLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsKICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgd3JpdGFibGU6IHRydWUsCiAgICBjb25maWd1cmFibGU6IGZhbHNlLAogICAgdmFsdWU6ICJwcm9jZXNzIgogIH0pOwogIGFkZFJlYWRPbmx5UHJvY2Vzc0FsaWFzKCJub0RlcHJlY2F0aW9uIiwgIi0tbm8tZGVwcmVjYXRpb24iKTsKICBhZGRSZWFkT25seVByb2Nlc3NBbGlhcygidGhyb3dEZXByZWNhdGlvbiIsICItLXRocm93LWRlcHJlY2F0aW9uIik7CiAgdmFyIHJlbW92ZUxpc3RlbmVyMiA9IHByb2Nlc3MyLnJlbW92ZUxpc3RlbmVyOwogIHZhciByZW1vdmVBbGxMaXN0ZW5lcnMyID0gcHJvY2VzczIucmVtb3ZlQWxsTGlzdGVuZXJzOwogIHZhciBwcm9jZXNzX2RlZmF1bHQgPSBwcm9jZXNzMjsKCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvQGxlemVyL2xyQDEuMi4zL1gtWlM5QVkyOWtaVzFwY25KdmNpOXNZVzVuZFdGblpTeEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjRzUUd4bGVtVnlMMmhwWjJoc2FXZG9kQ3hBYkdWNlpYSXZiV0Z5YTJSdmQyNC9kZW5vL2xyLmpzCiAgdmFyIGIxNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgczgsIGk0LCBoMTAsIHIzLCBuOCwgYTQsIGw3LCB1MTEgPSAwLCBmMTEpIHsKICAgICAgdGhpcy5wID0gdDQsIHRoaXMuc3RhY2sgPSBlNSwgdGhpcy5zdGF0ZSA9IHM4LCB0aGlzLnJlZHVjZVBvcyA9IGk0LCB0aGlzLnBvcyA9IGgxMCwgdGhpcy5zY29yZSA9IHIzLCB0aGlzLmJ1ZmZlciA9IG44LCB0aGlzLmJ1ZmZlckJhc2UgPSBhNCwgdGhpcy5jdXJDb250ZXh0ID0gbDcsIHRoaXMubG9va0FoZWFkID0gdTExLCB0aGlzLnBhcmVudCA9IGYxMTsKICAgIH0KICAgIHRvU3RyaW5nKCkgewogICAgICByZXR1cm4gYFske3RoaXMuc3RhY2suZmlsdGVyKCh0NCwgZTUpID0+IGU1ICUgMyA9PSAwKS5jb25jYXQodGhpcy5zdGF0ZSl9XUAke3RoaXMucG9zfSR7dGhpcy5zY29yZSA/ICIhIiArIHRoaXMuc2NvcmUgOiAiIn1gOwogICAgfQogICAgc3RhdGljIHN0YXJ0KHQ0LCBlNSwgczggPSAwKSB7CiAgICAgIGxldCBpNCA9IHQ0LnBhcnNlci5jb250ZXh0OwogICAgICByZXR1cm4gbmV3IGIxNCh0NCwgW10sIGU1LCBzOCwgczgsIDAsIFtdLCAwLCBpNCA/IG5ldyB3MTUoaTQsIGk0LnN0YXJ0KSA6IG51bGwsIDAsIG51bGwpOwogICAgfQogICAgZ2V0IGNvbnRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLmN1ckNvbnRleHQgPyB0aGlzLmN1ckNvbnRleHQuY29udGV4dCA6IG51bGw7CiAgICB9CiAgICBwdXNoU3RhdGUodDQsIGU1KSB7CiAgICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzLnN0YXRlLCBlNSwgdGhpcy5idWZmZXJCYXNlICsgdGhpcy5idWZmZXIubGVuZ3RoKSwgdGhpcy5zdGF0ZSA9IHQ0OwogICAgfQogICAgcmVkdWNlKHQ0KSB7CiAgICAgIGxldCBlNSA9IHQ0ID4+IDE5LCBzOCA9IHQ0ICYgNjU1MzUsIHsgcGFyc2VyOiBpNCB9ID0gdGhpcy5wLCBoMTAgPSBpNC5keW5hbWljUHJlY2VkZW5jZShzOCk7CiAgICAgIGlmIChoMTAgJiYgKHRoaXMuc2NvcmUgKz0gaDEwKSwgZTUgPT0gMCkgewogICAgICAgIHRoaXMucHVzaFN0YXRlKGk0LmdldEdvdG8odGhpcy5zdGF0ZSwgczgsIHRydWUpLCB0aGlzLnJlZHVjZVBvcyksIHM4IDwgaTQubWluUmVwZWF0VGVybSAmJiB0aGlzLnN0b3JlTm9kZShzOCwgdGhpcy5yZWR1Y2VQb3MsIHRoaXMucmVkdWNlUG9zLCA0LCB0cnVlKSwgdGhpcy5yZWR1Y2VDb250ZXh0KHM4LCB0aGlzLnJlZHVjZVBvcyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGxldCByMyA9IHRoaXMuc3RhY2subGVuZ3RoIC0gKGU1IC0gMSkgKiAzIC0gKHQ0ICYgMjYyMTQ0ID8gNiA6IDApLCBuOCA9IHRoaXMuc3RhY2tbcjMgLSAyXSwgYTQgPSB0aGlzLnN0YWNrW3IzIC0gMV0sIGw3ID0gdGhpcy5idWZmZXJCYXNlICsgdGhpcy5idWZmZXIubGVuZ3RoIC0gYTQ7CiAgICAgIGlmIChzOCA8IGk0Lm1pblJlcGVhdFRlcm0gfHwgdDQgJiAxMzEwNzIpIHsKICAgICAgICBsZXQgdTExID0gaTQuc3RhdGVGbGFnKHRoaXMuc3RhdGUsIDEpID8gdGhpcy5wb3MgOiB0aGlzLnJlZHVjZVBvczsKICAgICAgICB0aGlzLnN0b3JlTm9kZShzOCwgbjgsIHUxMSwgbDcgKyA0LCB0cnVlKTsKICAgICAgfQogICAgICBpZiAodDQgJiAyNjIxNDQpCiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhY2tbcjNdOwogICAgICBlbHNlIHsKICAgICAgICBsZXQgdTExID0gdGhpcy5zdGFja1tyMyAtIDNdOwogICAgICAgIHRoaXMuc3RhdGUgPSBpNC5nZXRHb3RvKHUxMSwgczgsIHRydWUpOwogICAgICB9CiAgICAgIGZvciAoOyB0aGlzLnN0YWNrLmxlbmd0aCA+IHIzOyApCiAgICAgICAgdGhpcy5zdGFjay5wb3AoKTsKICAgICAgdGhpcy5yZWR1Y2VDb250ZXh0KHM4LCBuOCk7CiAgICB9CiAgICBzdG9yZU5vZGUodDQsIGU1LCBzOCwgaTQgPSA0LCBoMTAgPSBmYWxzZSkgewogICAgICBpZiAodDQgPT0gMCAmJiAoIXRoaXMuc3RhY2subGVuZ3RoIHx8IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXSA8IHRoaXMuYnVmZmVyLmxlbmd0aCArIHRoaXMuYnVmZmVyQmFzZSkpIHsKICAgICAgICBsZXQgcjMgPSB0aGlzLCBuOCA9IHRoaXMuYnVmZmVyLmxlbmd0aDsKICAgICAgICBpZiAobjggPT0gMCAmJiByMy5wYXJlbnQgJiYgKG44ID0gcjMuYnVmZmVyQmFzZSAtIHIzLnBhcmVudC5idWZmZXJCYXNlLCByMyA9IHIzLnBhcmVudCksIG44ID4gMCAmJiByMy5idWZmZXJbbjggLSA0XSA9PSAwICYmIHIzLmJ1ZmZlcltuOCAtIDFdID4gLTEpIHsKICAgICAgICAgIGlmIChlNSA9PSBzOCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgaWYgKHIzLmJ1ZmZlcltuOCAtIDJdID49IGU1KSB7CiAgICAgICAgICAgIHIzLmJ1ZmZlcltuOCAtIDJdID0gczg7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFoMTAgfHwgdGhpcy5wb3MgPT0gczgpCiAgICAgICAgdGhpcy5idWZmZXIucHVzaCh0NCwgZTUsIHM4LCBpNCk7CiAgICAgIGVsc2UgewogICAgICAgIGxldCByMyA9IHRoaXMuYnVmZmVyLmxlbmd0aDsKICAgICAgICBpZiAocjMgPiAwICYmIHRoaXMuYnVmZmVyW3IzIC0gNF0gIT0gMCkKICAgICAgICAgIGZvciAoOyByMyA+IDAgJiYgdGhpcy5idWZmZXJbcjMgLSAyXSA+IHM4OyApCiAgICAgICAgICAgIHRoaXMuYnVmZmVyW3IzXSA9IHRoaXMuYnVmZmVyW3IzIC0gNF0sIHRoaXMuYnVmZmVyW3IzICsgMV0gPSB0aGlzLmJ1ZmZlcltyMyAtIDNdLCB0aGlzLmJ1ZmZlcltyMyArIDJdID0gdGhpcy5idWZmZXJbcjMgLSAyXSwgdGhpcy5idWZmZXJbcjMgKyAzXSA9IHRoaXMuYnVmZmVyW3IzIC0gMV0sIHIzIC09IDQsIGk0ID4gNCAmJiAoaTQgLT0gNCk7CiAgICAgICAgdGhpcy5idWZmZXJbcjNdID0gdDQsIHRoaXMuYnVmZmVyW3IzICsgMV0gPSBlNSwgdGhpcy5idWZmZXJbcjMgKyAyXSA9IHM4LCB0aGlzLmJ1ZmZlcltyMyArIDNdID0gaTQ7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0KHQ0LCBlNSwgczgpIHsKICAgICAgbGV0IGk0ID0gdGhpcy5wb3M7CiAgICAgIGlmICh0NCAmIDEzMTA3MikKICAgICAgICB0aGlzLnB1c2hTdGF0ZSh0NCAmIDY1NTM1LCB0aGlzLnBvcyk7CiAgICAgIGVsc2UgaWYgKCh0NCAmIDI2MjE0NCkgPT0gMCkgewogICAgICAgIGxldCBoMTAgPSB0NCwgeyBwYXJzZXI6IHIzIH0gPSB0aGlzLnA7CiAgICAgICAgKHM4ID4gdGhpcy5wb3MgfHwgZTUgPD0gcjMubWF4Tm9kZSkgJiYgKHRoaXMucG9zID0gczgsIHIzLnN0YXRlRmxhZyhoMTAsIDEpIHx8ICh0aGlzLnJlZHVjZVBvcyA9IHM4KSksIHRoaXMucHVzaFN0YXRlKGgxMCwgaTQpLCB0aGlzLnNoaWZ0Q29udGV4dChlNSwgaTQpLCBlNSA8PSByMy5tYXhOb2RlICYmIHRoaXMuYnVmZmVyLnB1c2goZTUsIGk0LCBzOCwgNCk7CiAgICAgIH0gZWxzZQogICAgICAgIHRoaXMucG9zID0gczgsIHRoaXMuc2hpZnRDb250ZXh0KGU1LCBpNCksIGU1IDw9IHRoaXMucC5wYXJzZXIubWF4Tm9kZSAmJiB0aGlzLmJ1ZmZlci5wdXNoKGU1LCBpNCwgczgsIDQpOwogICAgfQogICAgYXBwbHkodDQsIGU1LCBzOCkgewogICAgICB0NCAmIDY1NTM2ID8gdGhpcy5yZWR1Y2UodDQpIDogdGhpcy5zaGlmdCh0NCwgZTUsIHM4KTsKICAgIH0KICAgIHVzZU5vZGUodDQsIGU1KSB7CiAgICAgIGxldCBzOCA9IHRoaXMucC5yZXVzZWQubGVuZ3RoIC0gMTsKICAgICAgKHM4IDwgMCB8fCB0aGlzLnAucmV1c2VkW3M4XSAhPSB0NCkgJiYgKHRoaXMucC5yZXVzZWQucHVzaCh0NCksIHM4KyspOwogICAgICBsZXQgaTQgPSB0aGlzLnBvczsKICAgICAgdGhpcy5yZWR1Y2VQb3MgPSB0aGlzLnBvcyA9IGk0ICsgdDQubGVuZ3RoLCB0aGlzLnB1c2hTdGF0ZShlNSwgaTQpLCB0aGlzLmJ1ZmZlci5wdXNoKHM4LCBpNCwgdGhpcy5yZWR1Y2VQb3MsIC0xKSwgdGhpcy5jdXJDb250ZXh0ICYmIHRoaXMudXBkYXRlQ29udGV4dCh0aGlzLmN1ckNvbnRleHQudHJhY2tlci5yZXVzZSh0aGlzLmN1ckNvbnRleHQuY29udGV4dCwgdDQsIHRoaXMsIHRoaXMucC5zdHJlYW0ucmVzZXQodGhpcy5wb3MgLSB0NC5sZW5ndGgpKSk7CiAgICB9CiAgICBzcGxpdCgpIHsKICAgICAgbGV0IHQ0ID0gdGhpcywgZTUgPSB0NC5idWZmZXIubGVuZ3RoOwogICAgICBmb3IgKDsgZTUgPiAwICYmIHQ0LmJ1ZmZlcltlNSAtIDJdID4gdDQucmVkdWNlUG9zOyApCiAgICAgICAgZTUgLT0gNDsKICAgICAgbGV0IHM4ID0gdDQuYnVmZmVyLnNsaWNlKGU1KSwgaTQgPSB0NC5idWZmZXJCYXNlICsgZTU7CiAgICAgIGZvciAoOyB0NCAmJiBpNCA9PSB0NC5idWZmZXJCYXNlOyApCiAgICAgICAgdDQgPSB0NC5wYXJlbnQ7CiAgICAgIHJldHVybiBuZXcgYjE0KHRoaXMucCwgdGhpcy5zdGFjay5zbGljZSgpLCB0aGlzLnN0YXRlLCB0aGlzLnJlZHVjZVBvcywgdGhpcy5wb3MsIHRoaXMuc2NvcmUsIHM4LCBpNCwgdGhpcy5jdXJDb250ZXh0LCB0aGlzLmxvb2tBaGVhZCwgdDQpOwogICAgfQogICAgcmVjb3ZlckJ5RGVsZXRlKHQ0LCBlNSkgewogICAgICBsZXQgczggPSB0NCA8PSB0aGlzLnAucGFyc2VyLm1heE5vZGU7CiAgICAgIHM4ICYmIHRoaXMuc3RvcmVOb2RlKHQ0LCB0aGlzLnBvcywgZTUsIDQpLCB0aGlzLnN0b3JlTm9kZSgwLCB0aGlzLnBvcywgZTUsIHM4ID8gOCA6IDQpLCB0aGlzLnBvcyA9IHRoaXMucmVkdWNlUG9zID0gZTUsIHRoaXMuc2NvcmUgLT0gMTkwOwogICAgfQogICAgY2FuU2hpZnQodDQpIHsKICAgICAgZm9yIChsZXQgZTUgPSBuZXcgTjkodGhpcyk7IDsgKSB7CiAgICAgICAgbGV0IHM4ID0gdGhpcy5wLnBhcnNlci5zdGF0ZVNsb3QoZTUuc3RhdGUsIDQpIHx8IHRoaXMucC5wYXJzZXIuaGFzQWN0aW9uKGU1LnN0YXRlLCB0NCk7CiAgICAgICAgaWYgKChzOCAmIDY1NTM2KSA9PSAwKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHM4ID09IDApCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZTUucmVkdWNlKHM4KTsKICAgICAgfQogICAgfQogICAgcmVjb3ZlckJ5SW5zZXJ0KHQ0KSB7CiAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA+PSAzMDApCiAgICAgICAgcmV0dXJuIFtdOwogICAgICBsZXQgZTUgPSB0aGlzLnAucGFyc2VyLm5leHRTdGF0ZXModGhpcy5zdGF0ZSk7CiAgICAgIGlmIChlNS5sZW5ndGggPiA0IDw8IDEgfHwgdGhpcy5zdGFjay5sZW5ndGggPj0gMTIwKSB7CiAgICAgICAgbGV0IGk0ID0gW107CiAgICAgICAgZm9yIChsZXQgaDEwID0gMCwgcjM7IGgxMCA8IGU1Lmxlbmd0aDsgaDEwICs9IDIpCiAgICAgICAgICAocjMgPSBlNVtoMTAgKyAxXSkgIT0gdGhpcy5zdGF0ZSAmJiB0aGlzLnAucGFyc2VyLmhhc0FjdGlvbihyMywgdDQpICYmIGk0LnB1c2goZTVbaDEwXSwgcjMpOwogICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDEyMCkKICAgICAgICAgIGZvciAobGV0IGgxMCA9IDA7IGk0Lmxlbmd0aCA8IDQgPDwgMSAmJiBoMTAgPCBlNS5sZW5ndGg7IGgxMCArPSAyKSB7CiAgICAgICAgICAgIGxldCByMyA9IGU1W2gxMCArIDFdOwogICAgICAgICAgICBpNC5zb21lKChuOCwgYTQpID0+IGE0ICYgMSAmJiBuOCA9PSByMykgfHwgaTQucHVzaChlNVtoMTBdLCByMyk7CiAgICAgICAgICB9CiAgICAgICAgZTUgPSBpNDsKICAgICAgfQogICAgICBsZXQgczggPSBbXTsKICAgICAgZm9yIChsZXQgaTQgPSAwOyBpNCA8IGU1Lmxlbmd0aCAmJiBzOC5sZW5ndGggPCA0OyBpNCArPSAyKSB7CiAgICAgICAgbGV0IGgxMCA9IGU1W2k0ICsgMV07CiAgICAgICAgaWYgKGgxMCA9PSB0aGlzLnN0YXRlKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgbGV0IHIzID0gdGhpcy5zcGxpdCgpOwogICAgICAgIHIzLnB1c2hTdGF0ZShoMTAsIHRoaXMucG9zKSwgcjMuc3RvcmVOb2RlKDAsIHIzLnBvcywgcjMucG9zLCA0LCB0cnVlKSwgcjMuc2hpZnRDb250ZXh0KGU1W2k0XSwgdGhpcy5wb3MpLCByMy5zY29yZSAtPSAyMDAsIHM4LnB1c2gocjMpOwogICAgICB9CiAgICAgIHJldHVybiBzODsKICAgIH0KICAgIGZvcmNlUmVkdWNlKCkgewogICAgICBsZXQgdDQgPSB0aGlzLnAucGFyc2VyLnN0YXRlU2xvdCh0aGlzLnN0YXRlLCA1KTsKICAgICAgaWYgKCh0NCAmIDY1NTM2KSA9PSAwKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgbGV0IHsgcGFyc2VyOiBlNSB9ID0gdGhpcy5wOwogICAgICBpZiAoIWU1LnZhbGlkQWN0aW9uKHRoaXMuc3RhdGUsIHQ0KSkgewogICAgICAgIGxldCBzOCA9IHQ0ID4+IDE5LCBpNCA9IHQ0ICYgNjU1MzUsIGgxMCA9IHRoaXMuc3RhY2subGVuZ3RoIC0gczggKiAzOwogICAgICAgIGlmIChoMTAgPCAwIHx8IGU1LmdldEdvdG8odGhpcy5zdGFja1toMTBdLCBpNCwgZmFsc2UpIDwgMCkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB0aGlzLnN0b3JlTm9kZSgwLCB0aGlzLnJlZHVjZVBvcywgdGhpcy5yZWR1Y2VQb3MsIDQsIHRydWUpLCB0aGlzLnNjb3JlIC09IDEwMDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5yZWR1Y2VQb3MgPSB0aGlzLnBvcywgdGhpcy5yZWR1Y2UodDQpLCB0cnVlOwogICAgfQogICAgZm9yY2VBbGwoKSB7CiAgICAgIGZvciAoOyAhdGhpcy5wLnBhcnNlci5zdGF0ZUZsYWcodGhpcy5zdGF0ZSwgMik7ICkKICAgICAgICBpZiAoIXRoaXMuZm9yY2VSZWR1Y2UoKSkgewogICAgICAgICAgdGhpcy5zdG9yZU5vZGUoMCwgdGhpcy5wb3MsIHRoaXMucG9zLCA0LCB0cnVlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBnZXQgZGVhZEVuZCgpIHsKICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoICE9IDMpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgeyBwYXJzZXI6IHQ0IH0gPSB0aGlzLnA7CiAgICAgIHJldHVybiB0NC5kYXRhW3Q0LnN0YXRlU2xvdCh0aGlzLnN0YXRlLCAxKV0gPT0gNjU1MzUgJiYgIXQ0LnN0YXRlU2xvdCh0aGlzLnN0YXRlLCA0KTsKICAgIH0KICAgIHJlc3RhcnQoKSB7CiAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YWNrWzBdLCB0aGlzLnN0YWNrLmxlbmd0aCA9IDA7CiAgICB9CiAgICBzYW1lU3RhdGUodDQpIHsKICAgICAgaWYgKHRoaXMuc3RhdGUgIT0gdDQuc3RhdGUgfHwgdGhpcy5zdGFjay5sZW5ndGggIT0gdDQuc3RhY2subGVuZ3RoKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChsZXQgZTUgPSAwOyBlNSA8IHRoaXMuc3RhY2subGVuZ3RoOyBlNSArPSAzKQogICAgICAgIGlmICh0aGlzLnN0YWNrW2U1XSAhPSB0NC5zdGFja1tlNV0pCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZ2V0IHBhcnNlcigpIHsKICAgICAgcmV0dXJuIHRoaXMucC5wYXJzZXI7CiAgICB9CiAgICBkaWFsZWN0RW5hYmxlZCh0NCkgewogICAgICByZXR1cm4gdGhpcy5wLnBhcnNlci5kaWFsZWN0LmZsYWdzW3Q0XTsKICAgIH0KICAgIHNoaWZ0Q29udGV4dCh0NCwgZTUpIHsKICAgICAgdGhpcy5jdXJDb250ZXh0ICYmIHRoaXMudXBkYXRlQ29udGV4dCh0aGlzLmN1ckNvbnRleHQudHJhY2tlci5zaGlmdCh0aGlzLmN1ckNvbnRleHQuY29udGV4dCwgdDQsIHRoaXMsIHRoaXMucC5zdHJlYW0ucmVzZXQoZTUpKSk7CiAgICB9CiAgICByZWR1Y2VDb250ZXh0KHQ0LCBlNSkgewogICAgICB0aGlzLmN1ckNvbnRleHQgJiYgdGhpcy51cGRhdGVDb250ZXh0KHRoaXMuY3VyQ29udGV4dC50cmFja2VyLnJlZHVjZSh0aGlzLmN1ckNvbnRleHQuY29udGV4dCwgdDQsIHRoaXMsIHRoaXMucC5zdHJlYW0ucmVzZXQoZTUpKSk7CiAgICB9CiAgICBlbWl0Q29udGV4dCgpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5idWZmZXIubGVuZ3RoIC0gMTsKICAgICAgKHQ0IDwgMCB8fCB0aGlzLmJ1ZmZlclt0NF0gIT0gLTMpICYmIHRoaXMuYnVmZmVyLnB1c2godGhpcy5jdXJDb250ZXh0Lmhhc2gsIHRoaXMucmVkdWNlUG9zLCB0aGlzLnJlZHVjZVBvcywgLTMpOwogICAgfQogICAgZW1pdExvb2tBaGVhZCgpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5idWZmZXIubGVuZ3RoIC0gMTsKICAgICAgKHQ0IDwgMCB8fCB0aGlzLmJ1ZmZlclt0NF0gIT0gLTQpICYmIHRoaXMuYnVmZmVyLnB1c2godGhpcy5sb29rQWhlYWQsIHRoaXMucmVkdWNlUG9zLCB0aGlzLnJlZHVjZVBvcywgLTQpOwogICAgfQogICAgdXBkYXRlQ29udGV4dCh0NCkgewogICAgICBpZiAodDQgIT0gdGhpcy5jdXJDb250ZXh0LmNvbnRleHQpIHsKICAgICAgICBsZXQgZTUgPSBuZXcgdzE1KHRoaXMuY3VyQ29udGV4dC50cmFja2VyLCB0NCk7CiAgICAgICAgZTUuaGFzaCAhPSB0aGlzLmN1ckNvbnRleHQuaGFzaCAmJiB0aGlzLmVtaXRDb250ZXh0KCksIHRoaXMuY3VyQ29udGV4dCA9IGU1OwogICAgICB9CiAgICB9CiAgICBzZXRMb29rQWhlYWQodDQpIHsKICAgICAgdDQgPiB0aGlzLmxvb2tBaGVhZCAmJiAodGhpcy5lbWl0TG9va0FoZWFkKCksIHRoaXMubG9va0FoZWFkID0gdDQpOwogICAgfQogICAgY2xvc2UoKSB7CiAgICAgIHRoaXMuY3VyQ29udGV4dCAmJiB0aGlzLmN1ckNvbnRleHQudHJhY2tlci5zdHJpY3QgJiYgdGhpcy5lbWl0Q29udGV4dCgpLCB0aGlzLmxvb2tBaGVhZCA+IDAgJiYgdGhpcy5lbWl0TG9va0FoZWFkKCk7CiAgICB9CiAgfTsKICB2YXIgdzE1ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1KSB7CiAgICAgIHRoaXMudHJhY2tlciA9IHQ0LCB0aGlzLmNvbnRleHQgPSBlNSwgdGhpcy5oYXNoID0gdDQuc3RyaWN0ID8gdDQuaGFzaChlNSkgOiAwOwogICAgfQogIH07CiAgdmFyIEIxNDsKICAoZnVuY3Rpb24obzQpIHsKICAgIG80W280Lkluc2VydCA9IDIwMF0gPSAiSW5zZXJ0IiwgbzRbbzQuRGVsZXRlID0gMTkwXSA9ICJEZWxldGUiLCBvNFtvNC5SZWR1Y2UgPSAxMDBdID0gIlJlZHVjZSIsIG80W280Lk1heE5leHQgPSA0XSA9ICJNYXhOZXh0IiwgbzRbbzQuTWF4SW5zZXJ0U3RhY2tEZXB0aCA9IDMwMF0gPSAiTWF4SW5zZXJ0U3RhY2tEZXB0aCIsIG80W280LkRhbXBlbkluc2VydFN0YWNrRGVwdGggPSAxMjBdID0gIkRhbXBlbkluc2VydFN0YWNrRGVwdGgiOwogIH0pKEIxNCB8fCAoQjE0ID0ge30pKTsKICB2YXIgTjkgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICB0aGlzLnN0YXJ0ID0gdDQsIHRoaXMuc3RhdGUgPSB0NC5zdGF0ZSwgdGhpcy5zdGFjayA9IHQ0LnN0YWNrLCB0aGlzLmJhc2UgPSB0aGlzLnN0YWNrLmxlbmd0aDsKICAgIH0KICAgIHJlZHVjZSh0NCkgewogICAgICBsZXQgZTUgPSB0NCAmIDY1NTM1LCBzOCA9IHQ0ID4+IDE5OwogICAgICBzOCA9PSAwID8gKHRoaXMuc3RhY2sgPT0gdGhpcy5zdGFydC5zdGFjayAmJiAodGhpcy5zdGFjayA9IHRoaXMuc3RhY2suc2xpY2UoKSksIHRoaXMuc3RhY2sucHVzaCh0aGlzLnN0YXRlLCAwLCAwKSwgdGhpcy5iYXNlICs9IDMpIDogdGhpcy5iYXNlIC09IChzOCAtIDEpICogMzsKICAgICAgbGV0IGk0ID0gdGhpcy5zdGFydC5wLnBhcnNlci5nZXRHb3RvKHRoaXMuc3RhY2tbdGhpcy5iYXNlIC0gM10sIGU1LCB0cnVlKTsKICAgICAgdGhpcy5zdGF0ZSA9IGk0OwogICAgfQogIH07CiAgdmFyIFAxNyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgczgpIHsKICAgICAgdGhpcy5zdGFjayA9IHQ0LCB0aGlzLnBvcyA9IGU1LCB0aGlzLmluZGV4ID0gczgsIHRoaXMuYnVmZmVyID0gdDQuYnVmZmVyLCB0aGlzLmluZGV4ID09IDAgJiYgdGhpcy5tYXliZU5leHQoKTsKICAgIH0KICAgIHN0YXRpYyBjcmVhdGUodDQsIGU1ID0gdDQuYnVmZmVyQmFzZSArIHQ0LmJ1ZmZlci5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG5ldyBQMTcodDQsIGU1LCBlNSAtIHQ0LmJ1ZmZlckJhc2UpOwogICAgfQogICAgbWF5YmVOZXh0KCkgewogICAgICBsZXQgdDQgPSB0aGlzLnN0YWNrLnBhcmVudDsKICAgICAgdDQgIT0gbnVsbCAmJiAodGhpcy5pbmRleCA9IHRoaXMuc3RhY2suYnVmZmVyQmFzZSAtIHQ0LmJ1ZmZlckJhc2UsIHRoaXMuc3RhY2sgPSB0NCwgdGhpcy5idWZmZXIgPSB0NC5idWZmZXIpOwogICAgfQogICAgZ2V0IGlkKCkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleCAtIDRdOwogICAgfQogICAgZ2V0IHN0YXJ0KCkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleCAtIDNdOwogICAgfQogICAgZ2V0IGVuZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXggLSAyXTsKICAgIH0KICAgIGdldCBzaXplKCkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleCAtIDFdOwogICAgfQogICAgbmV4dCgpIHsKICAgICAgdGhpcy5pbmRleCAtPSA0LCB0aGlzLnBvcyAtPSA0LCB0aGlzLmluZGV4ID09IDAgJiYgdGhpcy5tYXliZU5leHQoKTsKICAgIH0KICAgIGZvcmsoKSB7CiAgICAgIHJldHVybiBuZXcgUDE3KHRoaXMuc3RhY2ssIHRoaXMucG9zLCB0aGlzLmluZGV4KTsKICAgIH0KICB9OwogIHZhciBtMTUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgdGhpcy5zdGFydCA9IC0xLCB0aGlzLnZhbHVlID0gLTEsIHRoaXMuZW5kID0gLTEsIHRoaXMuZXh0ZW5kZWQgPSAtMSwgdGhpcy5sb29rQWhlYWQgPSAwLCB0aGlzLm1hc2sgPSAwLCB0aGlzLmNvbnRleHQgPSAwOwogICAgfQogIH07CiAgdmFyIEYxNCA9IG5ldyBtMTUoKTsKICB2YXIgVDE4ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1KSB7CiAgICAgIHRoaXMuaW5wdXQgPSB0NCwgdGhpcy5yYW5nZXMgPSBlNSwgdGhpcy5jaHVuayA9ICIiLCB0aGlzLmNodW5rT2ZmID0gMCwgdGhpcy5jaHVuazIgPSAiIiwgdGhpcy5jaHVuazJQb3MgPSAwLCB0aGlzLm5leHQgPSAtMSwgdGhpcy50b2tlbiA9IEYxNCwgdGhpcy5yYW5nZUluZGV4ID0gMCwgdGhpcy5wb3MgPSB0aGlzLmNodW5rUG9zID0gZTVbMF0uZnJvbSwgdGhpcy5yYW5nZSA9IGU1WzBdLCB0aGlzLmVuZCA9IGU1W2U1Lmxlbmd0aCAtIDFdLnRvLCB0aGlzLnJlYWROZXh0KCk7CiAgICB9CiAgICByZXNvbHZlT2Zmc2V0KHQ0LCBlNSkgewogICAgICBsZXQgczggPSB0aGlzLnJhbmdlLCBpNCA9IHRoaXMucmFuZ2VJbmRleCwgaDEwID0gdGhpcy5wb3MgKyB0NDsKICAgICAgZm9yICg7IGgxMCA8IHM4LmZyb207ICkgewogICAgICAgIGlmICghaTQpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBsZXQgcjMgPSB0aGlzLnJhbmdlc1stLWk0XTsKICAgICAgICBoMTAgLT0gczguZnJvbSAtIHIzLnRvLCBzOCA9IHIzOwogICAgICB9CiAgICAgIGZvciAoOyBlNSA8IDAgPyBoMTAgPiBzOC50byA6IGgxMCA+PSBzOC50bzsgKSB7CiAgICAgICAgaWYgKGk0ID09IHRoaXMucmFuZ2VzLmxlbmd0aCAtIDEpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBsZXQgcjMgPSB0aGlzLnJhbmdlc1srK2k0XTsKICAgICAgICBoMTAgKz0gcjMuZnJvbSAtIHM4LnRvLCBzOCA9IHIzOwogICAgICB9CiAgICAgIHJldHVybiBoMTA7CiAgICB9CiAgICBjbGlwUG9zKHQ0KSB7CiAgICAgIGlmICh0NCA+PSB0aGlzLnJhbmdlLmZyb20gJiYgdDQgPCB0aGlzLnJhbmdlLnRvKQogICAgICAgIHJldHVybiB0NDsKICAgICAgZm9yIChsZXQgZTUgb2YgdGhpcy5yYW5nZXMpCiAgICAgICAgaWYgKGU1LnRvID4gdDQpCiAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodDQsIGU1LmZyb20pOwogICAgICByZXR1cm4gdGhpcy5lbmQ7CiAgICB9CiAgICBwZWVrKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMuY2h1bmtPZmYgKyB0NCwgczgsIGk0OwogICAgICBpZiAoZTUgPj0gMCAmJiBlNSA8IHRoaXMuY2h1bmsubGVuZ3RoKQogICAgICAgIHM4ID0gdGhpcy5wb3MgKyB0NCwgaTQgPSB0aGlzLmNodW5rLmNoYXJDb2RlQXQoZTUpOwogICAgICBlbHNlIHsKICAgICAgICBsZXQgaDEwID0gdGhpcy5yZXNvbHZlT2Zmc2V0KHQ0LCAxKTsKICAgICAgICBpZiAoaDEwID09IG51bGwpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHM4ID0gaDEwLCBzOCA+PSB0aGlzLmNodW5rMlBvcyAmJiBzOCA8IHRoaXMuY2h1bmsyUG9zICsgdGhpcy5jaHVuazIubGVuZ3RoKQogICAgICAgICAgaTQgPSB0aGlzLmNodW5rMi5jaGFyQ29kZUF0KHM4IC0gdGhpcy5jaHVuazJQb3MpOwogICAgICAgIGVsc2UgewogICAgICAgICAgbGV0IHIzID0gdGhpcy5yYW5nZUluZGV4LCBuOCA9IHRoaXMucmFuZ2U7CiAgICAgICAgICBmb3IgKDsgbjgudG8gPD0gczg7ICkKICAgICAgICAgICAgbjggPSB0aGlzLnJhbmdlc1srK3IzXTsKICAgICAgICAgIHRoaXMuY2h1bmsyID0gdGhpcy5pbnB1dC5jaHVuayh0aGlzLmNodW5rMlBvcyA9IHM4KSwgczggKyB0aGlzLmNodW5rMi5sZW5ndGggPiBuOC50byAmJiAodGhpcy5jaHVuazIgPSB0aGlzLmNodW5rMi5zbGljZSgwLCBuOC50byAtIHM4KSksIGk0ID0gdGhpcy5jaHVuazIuY2hhckNvZGVBdCgwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHM4ID49IHRoaXMudG9rZW4ubG9va0FoZWFkICYmICh0aGlzLnRva2VuLmxvb2tBaGVhZCA9IHM4ICsgMSksIGk0OwogICAgfQogICAgYWNjZXB0VG9rZW4odDQsIGU1ID0gMCkgewogICAgICBsZXQgczggPSBlNSA/IHRoaXMucmVzb2x2ZU9mZnNldChlNSwgLTEpIDogdGhpcy5wb3M7CiAgICAgIGlmIChzOCA9PSBudWxsIHx8IHM4IDwgdGhpcy50b2tlbi5zdGFydCkKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVG9rZW4gZW5kIG91dCBvZiBib3VuZHMiKTsKICAgICAgdGhpcy50b2tlbi52YWx1ZSA9IHQ0LCB0aGlzLnRva2VuLmVuZCA9IHM4OwogICAgfQogICAgZ2V0Q2h1bmsoKSB7CiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmNodW5rMlBvcyAmJiB0aGlzLnBvcyA8IHRoaXMuY2h1bmsyUG9zICsgdGhpcy5jaHVuazIubGVuZ3RoKSB7CiAgICAgICAgbGV0IHsgY2h1bms6IHQ0LCBjaHVua1BvczogZTUgfSA9IHRoaXM7CiAgICAgICAgdGhpcy5jaHVuayA9IHRoaXMuY2h1bmsyLCB0aGlzLmNodW5rUG9zID0gdGhpcy5jaHVuazJQb3MsIHRoaXMuY2h1bmsyID0gdDQsIHRoaXMuY2h1bmsyUG9zID0gZTUsIHRoaXMuY2h1bmtPZmYgPSB0aGlzLnBvcyAtIHRoaXMuY2h1bmtQb3M7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5jaHVuazIgPSB0aGlzLmNodW5rLCB0aGlzLmNodW5rMlBvcyA9IHRoaXMuY2h1bmtQb3M7CiAgICAgICAgbGV0IHQ0ID0gdGhpcy5pbnB1dC5jaHVuayh0aGlzLnBvcyksIGU1ID0gdGhpcy5wb3MgKyB0NC5sZW5ndGg7CiAgICAgICAgdGhpcy5jaHVuayA9IGU1ID4gdGhpcy5yYW5nZS50byA/IHQ0LnNsaWNlKDAsIHRoaXMucmFuZ2UudG8gLSB0aGlzLnBvcykgOiB0NCwgdGhpcy5jaHVua1BvcyA9IHRoaXMucG9zLCB0aGlzLmNodW5rT2ZmID0gMDsKICAgICAgfQogICAgfQogICAgcmVhZE5leHQoKSB7CiAgICAgIHJldHVybiB0aGlzLmNodW5rT2ZmID49IHRoaXMuY2h1bmsubGVuZ3RoICYmICh0aGlzLmdldENodW5rKCksIHRoaXMuY2h1bmtPZmYgPT0gdGhpcy5jaHVuay5sZW5ndGgpID8gdGhpcy5uZXh0ID0gLTEgOiB0aGlzLm5leHQgPSB0aGlzLmNodW5rLmNoYXJDb2RlQXQodGhpcy5jaHVua09mZik7CiAgICB9CiAgICBhZHZhbmNlKHQ0ID0gMSkgewogICAgICBmb3IgKHRoaXMuY2h1bmtPZmYgKz0gdDQ7IHRoaXMucG9zICsgdDQgPj0gdGhpcy5yYW5nZS50bzsgKSB7CiAgICAgICAgaWYgKHRoaXMucmFuZ2VJbmRleCA9PSB0aGlzLnJhbmdlcy5sZW5ndGggLSAxKQogICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RG9uZSgpOwogICAgICAgIHQ0IC09IHRoaXMucmFuZ2UudG8gLSB0aGlzLnBvcywgdGhpcy5yYW5nZSA9IHRoaXMucmFuZ2VzWysrdGhpcy5yYW5nZUluZGV4XSwgdGhpcy5wb3MgPSB0aGlzLnJhbmdlLmZyb207CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMucG9zICs9IHQ0LCB0aGlzLnBvcyA+PSB0aGlzLnRva2VuLmxvb2tBaGVhZCAmJiAodGhpcy50b2tlbi5sb29rQWhlYWQgPSB0aGlzLnBvcyArIDEpLCB0aGlzLnJlYWROZXh0KCk7CiAgICB9CiAgICBzZXREb25lKCkgewogICAgICByZXR1cm4gdGhpcy5wb3MgPSB0aGlzLmNodW5rUG9zID0gdGhpcy5lbmQsIHRoaXMucmFuZ2UgPSB0aGlzLnJhbmdlc1t0aGlzLnJhbmdlSW5kZXggPSB0aGlzLnJhbmdlcy5sZW5ndGggLSAxXSwgdGhpcy5jaHVuayA9ICIiLCB0aGlzLm5leHQgPSAtMTsKICAgIH0KICAgIHJlc2V0KHQ0LCBlNSkgewogICAgICBpZiAoZTUgPyAodGhpcy50b2tlbiA9IGU1LCBlNS5zdGFydCA9IHQ0LCBlNS5sb29rQWhlYWQgPSB0NCArIDEsIGU1LnZhbHVlID0gZTUuZXh0ZW5kZWQgPSAtMSkgOiB0aGlzLnRva2VuID0gRjE0LCB0aGlzLnBvcyAhPSB0NCkgewogICAgICAgIGlmICh0aGlzLnBvcyA9IHQ0LCB0NCA9PSB0aGlzLmVuZCkKICAgICAgICAgIHJldHVybiB0aGlzLnNldERvbmUoKSwgdGhpczsKICAgICAgICBmb3IgKDsgdDQgPCB0aGlzLnJhbmdlLmZyb207ICkKICAgICAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLnJhbmdlc1stLXRoaXMucmFuZ2VJbmRleF07CiAgICAgICAgZm9yICg7IHQ0ID49IHRoaXMucmFuZ2UudG87ICkKICAgICAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLnJhbmdlc1srK3RoaXMucmFuZ2VJbmRleF07CiAgICAgICAgdDQgPj0gdGhpcy5jaHVua1BvcyAmJiB0NCA8IHRoaXMuY2h1bmtQb3MgKyB0aGlzLmNodW5rLmxlbmd0aCA/IHRoaXMuY2h1bmtPZmYgPSB0NCAtIHRoaXMuY2h1bmtQb3MgOiAodGhpcy5jaHVuayA9ICIiLCB0aGlzLmNodW5rT2ZmID0gMCksIHRoaXMucmVhZE5leHQoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIHJlYWQodDQsIGU1KSB7CiAgICAgIGlmICh0NCA+PSB0aGlzLmNodW5rUG9zICYmIGU1IDw9IHRoaXMuY2h1bmtQb3MgKyB0aGlzLmNodW5rLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcy5jaHVuay5zbGljZSh0NCAtIHRoaXMuY2h1bmtQb3MsIGU1IC0gdGhpcy5jaHVua1Bvcyk7CiAgICAgIGlmICh0NCA+PSB0aGlzLmNodW5rMlBvcyAmJiBlNSA8PSB0aGlzLmNodW5rMlBvcyArIHRoaXMuY2h1bmsyLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcy5jaHVuazIuc2xpY2UodDQgLSB0aGlzLmNodW5rMlBvcywgZTUgLSB0aGlzLmNodW5rMlBvcyk7CiAgICAgIGlmICh0NCA+PSB0aGlzLnJhbmdlLmZyb20gJiYgZTUgPD0gdGhpcy5yYW5nZS50bykKICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5yZWFkKHQ0LCBlNSk7CiAgICAgIGxldCBzOCA9ICIiOwogICAgICBmb3IgKGxldCBpNCBvZiB0aGlzLnJhbmdlcykgewogICAgICAgIGlmIChpNC5mcm9tID49IGU1KQogICAgICAgICAgYnJlYWs7CiAgICAgICAgaTQudG8gPiB0NCAmJiAoczggKz0gdGhpcy5pbnB1dC5yZWFkKE1hdGgubWF4KGk0LmZyb20sIHQ0KSwgTWF0aC5taW4oaTQudG8sIGU1KSkpOwogICAgICB9CiAgICAgIHJldHVybiBzODsKICAgIH0KICB9OwogIHZhciB4MTAgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUpIHsKICAgICAgdGhpcy5kYXRhID0gdDQsIHRoaXMuaWQgPSBlNTsKICAgIH0KICAgIHRva2VuKHQ0LCBlNSkgewogICAgICBYMTQodGhpcy5kYXRhLCB0NCwgZTUsIHRoaXMuaWQpOwogICAgfQogIH07CiAgeDEwLnByb3RvdHlwZS5jb250ZXh0dWFsID0geDEwLnByb3RvdHlwZS5mYWxsYmFjayA9IHgxMC5wcm90b3R5cGUuZXh0ZW5kID0gZmFsc2U7CiAgdmFyIEwxMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSA9IHt9KSB7CiAgICAgIHRoaXMudG9rZW4gPSB0NCwgdGhpcy5jb250ZXh0dWFsID0gISFlNS5jb250ZXh0dWFsLCB0aGlzLmZhbGxiYWNrID0gISFlNS5mYWxsYmFjaywgdGhpcy5leHRlbmQgPSAhIWU1LmV4dGVuZDsKICAgIH0KICB9OwogIGZ1bmN0aW9uIFgxNChvNCwgdDQsIGU1LCBzOCkgewogICAgbGV0IGk0ID0gMCwgaDEwID0gMSA8PCBzOCwgeyBwYXJzZXI6IHIzIH0gPSBlNS5wLCB7IGRpYWxlY3Q6IG44IH0gPSByMzsKICAgIHQ6CiAgICAgIGZvciAoOyAoaDEwICYgbzRbaTRdKSAhPSAwOyApIHsKICAgICAgICBsZXQgYTQgPSBvNFtpNCArIDFdOwogICAgICAgIGZvciAobGV0IGMxNyA9IGk0ICsgMzsgYzE3IDwgYTQ7IGMxNyArPSAyKQogICAgICAgICAgaWYgKChvNFtjMTcgKyAxXSAmIGgxMCkgPiAwKSB7CiAgICAgICAgICAgIGxldCBwMTggPSBvNFtjMTddOwogICAgICAgICAgICBpZiAobjguYWxsb3dzKHAxOCkgJiYgKHQ0LnRva2VuLnZhbHVlID09IC0xIHx8IHQ0LnRva2VuLnZhbHVlID09IHAxOCB8fCByMy5vdmVycmlkZXMocDE4LCB0NC50b2tlbi52YWx1ZSkpKSB7CiAgICAgICAgICAgICAgdDQuYWNjZXB0VG9rZW4ocDE4KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGxldCBsNyA9IHQ0Lm5leHQsIHUxMSA9IDAsIGYxMSA9IG80W2k0ICsgMl07CiAgICAgICAgaWYgKHQ0Lm5leHQgPCAwICYmIGYxMSA+IHUxMSAmJiBvNFthNCArIGYxMSAqIDMgLSAzXSA9PSA2NTUzNSkgewogICAgICAgICAgaTQgPSBvNFthNCArIGYxMSAqIDMgLSAxXTsKICAgICAgICAgIGNvbnRpbnVlIHQ7CiAgICAgICAgfQogICAgICAgIGZvciAoOyB1MTEgPCBmMTE7ICkgewogICAgICAgICAgbGV0IGMxNyA9IHUxMSArIGYxMSA+PiAxLCBwMTggPSBhNCArIGMxNyArIChjMTcgPDwgMSksIGcxMiA9IG80W3AxOF0sIFcxOCA9IG80W3AxOCArIDFdOwogICAgICAgICAgaWYgKGw3IDwgZzEyKQogICAgICAgICAgICBmMTEgPSBjMTc7CiAgICAgICAgICBlbHNlIGlmIChsNyA+PSBXMTgpCiAgICAgICAgICAgIHUxMSA9IGMxNyArIDE7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaTQgPSBvNFtwMTggKyAyXSwgdDQuYWR2YW5jZSgpOwogICAgICAgICAgICBjb250aW51ZSB0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogIH0KICBmdW5jdGlvbiBBMTIobzQsIHQ0ID0gVWludDE2QXJyYXkpIHsKICAgIGlmICh0eXBlb2YgbzQgIT0gInN0cmluZyIpCiAgICAgIHJldHVybiBvNDsKICAgIGxldCBlNSA9IG51bGw7CiAgICBmb3IgKGxldCBzOCA9IDAsIGk0ID0gMDsgczggPCBvNC5sZW5ndGg7ICkgewogICAgICBsZXQgaDEwID0gMDsKICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgbGV0IHIzID0gbzQuY2hhckNvZGVBdChzOCsrKSwgbjggPSBmYWxzZTsKICAgICAgICBpZiAocjMgPT0gMTI2KSB7CiAgICAgICAgICBoMTAgPSA2NTUzNTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByMyA+PSA5MiAmJiByMy0tLCByMyA+PSAzNCAmJiByMy0tOwogICAgICAgIGxldCBhNCA9IHIzIC0gMzI7CiAgICAgICAgaWYgKGE0ID49IDQ2ICYmIChhNCAtPSA0NiwgbjggPSB0cnVlKSwgaDEwICs9IGE0LCBuOCkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGgxMCAqPSA0NjsKICAgICAgfQogICAgICBlNSA/IGU1W2k0KytdID0gaDEwIDogZTUgPSBuZXcgdDQoaDEwKTsKICAgIH0KICAgIHJldHVybiBlNTsKICB9CiAgdmFyIGQ0ID0gdHlwZW9mIHByb2Nlc3NfZGVmYXVsdCA8ICJ1IiAmJiBwcm9jZXNzX2RlZmF1bHQuZW52ICYmIC9cYnBhcnNlXGIvLnRlc3QocHJvY2Vzc19kZWZhdWx0LmVudi5MT0cpOwogIHZhciB5MTAgPSBudWxsOwogIHZhciAkMTU7CiAgKGZ1bmN0aW9uKG80KSB7CiAgICBvNFtvNC5NYXJnaW4gPSAyNV0gPSAiTWFyZ2luIjsKICB9KSgkMTUgfHwgKCQxNSA9IHt9KSk7CiAgZnVuY3Rpb24gajEwKG80LCB0NCwgZTUpIHsKICAgIGxldCBzOCA9IG80LmN1cnNvcihBNC5JbmNsdWRlQW5vbnltb3VzKTsKICAgIGZvciAoczgubW92ZVRvKHQ0KTsgOyApCiAgICAgIGlmICghKGU1IDwgMCA/IHM4LmNoaWxkQmVmb3JlKHQ0KSA6IHM4LmNoaWxkQWZ0ZXIodDQpKSkKICAgICAgICBmb3IgKDsgOyApIHsKICAgICAgICAgIGlmICgoZTUgPCAwID8gczgudG8gPCB0NCA6IHM4LmZyb20gPiB0NCkgJiYgIXM4LnR5cGUuaXNFcnJvcikKICAgICAgICAgICAgcmV0dXJuIGU1IDwgMCA/IE1hdGgubWF4KDAsIE1hdGgubWluKHM4LnRvIC0gMSwgdDQgLSAyNSkpIDogTWF0aC5taW4obzQubGVuZ3RoLCBNYXRoLm1heChzOC5mcm9tICsgMSwgdDQgKyAyNSkpOwogICAgICAgICAgaWYgKGU1IDwgMCA/IHM4LnByZXZTaWJsaW5nKCkgOiBzOC5uZXh0U2libGluZygpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGlmICghczgucGFyZW50KCkpCiAgICAgICAgICAgIHJldHVybiBlNSA8IDAgPyAwIDogbzQubGVuZ3RoOwogICAgICAgIH0KICB9CiAgdmFyIEQxMSA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSkgewogICAgICB0aGlzLmZyYWdtZW50cyA9IHQ0LCB0aGlzLm5vZGVTZXQgPSBlNSwgdGhpcy5pID0gMCwgdGhpcy5mcmFnbWVudCA9IG51bGwsIHRoaXMuc2FmZUZyb20gPSAtMSwgdGhpcy5zYWZlVG8gPSAtMSwgdGhpcy50cmVlcyA9IFtdLCB0aGlzLnN0YXJ0ID0gW10sIHRoaXMuaW5kZXggPSBbXSwgdGhpcy5uZXh0RnJhZ21lbnQoKTsKICAgIH0KICAgIG5leHRGcmFnbWVudCgpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5mcmFnbWVudCA9IHRoaXMuaSA9PSB0aGlzLmZyYWdtZW50cy5sZW5ndGggPyBudWxsIDogdGhpcy5mcmFnbWVudHNbdGhpcy5pKytdOwogICAgICBpZiAodDQpIHsKICAgICAgICBmb3IgKHRoaXMuc2FmZUZyb20gPSB0NC5vcGVuU3RhcnQgPyBqMTAodDQudHJlZSwgdDQuZnJvbSArIHQ0Lm9mZnNldCwgMSkgLSB0NC5vZmZzZXQgOiB0NC5mcm9tLCB0aGlzLnNhZmVUbyA9IHQ0Lm9wZW5FbmQgPyBqMTAodDQudHJlZSwgdDQudG8gKyB0NC5vZmZzZXQsIC0xKSAtIHQ0Lm9mZnNldCA6IHQ0LnRvOyB0aGlzLnRyZWVzLmxlbmd0aDsgKQogICAgICAgICAgdGhpcy50cmVlcy5wb3AoKSwgdGhpcy5zdGFydC5wb3AoKSwgdGhpcy5pbmRleC5wb3AoKTsKICAgICAgICB0aGlzLnRyZWVzLnB1c2godDQudHJlZSksIHRoaXMuc3RhcnQucHVzaCgtdDQub2Zmc2V0KSwgdGhpcy5pbmRleC5wdXNoKDApLCB0aGlzLm5leHRTdGFydCA9IHRoaXMuc2FmZUZyb207CiAgICAgIH0gZWxzZQogICAgICAgIHRoaXMubmV4dFN0YXJ0ID0gMWU5OwogICAgfQogICAgbm9kZUF0KHQ0KSB7CiAgICAgIGlmICh0NCA8IHRoaXMubmV4dFN0YXJ0KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBmb3IgKDsgdGhpcy5mcmFnbWVudCAmJiB0aGlzLnNhZmVUbyA8PSB0NDsgKQogICAgICAgIHRoaXMubmV4dEZyYWdtZW50KCk7CiAgICAgIGlmICghdGhpcy5mcmFnbWVudCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgbGV0IGU1ID0gdGhpcy50cmVlcy5sZW5ndGggLSAxOwogICAgICAgIGlmIChlNSA8IDApCiAgICAgICAgICByZXR1cm4gdGhpcy5uZXh0RnJhZ21lbnQoKSwgbnVsbDsKICAgICAgICBsZXQgczggPSB0aGlzLnRyZWVzW2U1XSwgaTQgPSB0aGlzLmluZGV4W2U1XTsKICAgICAgICBpZiAoaTQgPT0gczguY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgICB0aGlzLnRyZWVzLnBvcCgpLCB0aGlzLnN0YXJ0LnBvcCgpLCB0aGlzLmluZGV4LnBvcCgpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGxldCBoMTAgPSBzOC5jaGlsZHJlbltpNF0sIHIzID0gdGhpcy5zdGFydFtlNV0gKyBzOC5wb3NpdGlvbnNbaTRdOwogICAgICAgIGlmIChyMyA+IHQ0KQogICAgICAgICAgcmV0dXJuIHRoaXMubmV4dFN0YXJ0ID0gcjMsIG51bGw7CiAgICAgICAgaWYgKGgxMCBpbnN0YW5jZW9mIFAzKSB7CiAgICAgICAgICBpZiAocjMgPT0gdDQpIHsKICAgICAgICAgICAgaWYgKHIzIDwgdGhpcy5zYWZlRnJvbSkKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgbGV0IG44ID0gcjMgKyBoMTAubGVuZ3RoOwogICAgICAgICAgICBpZiAobjggPD0gdGhpcy5zYWZlVG8pIHsKICAgICAgICAgICAgICBsZXQgYTQgPSBoMTAucHJvcCh3My5sb29rQWhlYWQpOwogICAgICAgICAgICAgIGlmICghYTQgfHwgbjggKyBhNCA8IHRoaXMuZnJhZ21lbnQudG8pCiAgICAgICAgICAgICAgICByZXR1cm4gaDEwOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmluZGV4W2U1XSsrLCByMyArIGgxMC5sZW5ndGggPj0gTWF0aC5tYXgodGhpcy5zYWZlRnJvbSwgdDQpICYmICh0aGlzLnRyZWVzLnB1c2goaDEwKSwgdGhpcy5zdGFydC5wdXNoKHIzKSwgdGhpcy5pbmRleC5wdXNoKDApKTsKICAgICAgICB9IGVsc2UKICAgICAgICAgIHRoaXMuaW5kZXhbZTVdKyssIHRoaXMubmV4dFN0YXJ0ID0gcjMgKyBoMTAubGVuZ3RoOwogICAgICB9CiAgICB9CiAgfTsKICB2YXIgSTE3ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1KSB7CiAgICAgIHRoaXMuc3RyZWFtID0gZTUsIHRoaXMudG9rZW5zID0gW10sIHRoaXMubWFpblRva2VuID0gbnVsbCwgdGhpcy5hY3Rpb25zID0gW10sIHRoaXMudG9rZW5zID0gdDQudG9rZW5pemVycy5tYXAoKHM4KSA9PiBuZXcgbTE1KCkpOwogICAgfQogICAgZ2V0QWN0aW9ucyh0NCkgewogICAgICBsZXQgZTUgPSAwLCBzOCA9IG51bGwsIHsgcGFyc2VyOiBpNCB9ID0gdDQucCwgeyB0b2tlbml6ZXJzOiBoMTAgfSA9IGk0LCByMyA9IGk0LnN0YXRlU2xvdCh0NC5zdGF0ZSwgMyksIG44ID0gdDQuY3VyQ29udGV4dCA/IHQ0LmN1ckNvbnRleHQuaGFzaCA6IDAsIGE0ID0gMDsKICAgICAgZm9yIChsZXQgbDcgPSAwOyBsNyA8IGgxMC5sZW5ndGg7IGw3KyspIHsKICAgICAgICBpZiAoKDEgPDwgbDcgJiByMykgPT0gMCkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGxldCB1MTEgPSBoMTBbbDddLCBmMTEgPSB0aGlzLnRva2Vuc1tsN107CiAgICAgICAgaWYgKCEoczggJiYgIXUxMS5mYWxsYmFjaykgJiYgKCh1MTEuY29udGV4dHVhbCB8fCBmMTEuc3RhcnQgIT0gdDQucG9zIHx8IGYxMS5tYXNrICE9IHIzIHx8IGYxMS5jb250ZXh0ICE9IG44KSAmJiAodGhpcy51cGRhdGVDYWNoZWRUb2tlbihmMTEsIHUxMSwgdDQpLCBmMTEubWFzayA9IHIzLCBmMTEuY29udGV4dCA9IG44KSwgZjExLmxvb2tBaGVhZCA+IGYxMS5lbmQgKyAyNSAmJiAoYTQgPSBNYXRoLm1heChmMTEubG9va0FoZWFkLCBhNCkpLCBmMTEudmFsdWUgIT0gMCkpIHsKICAgICAgICAgIGxldCBjMTcgPSBlNTsKICAgICAgICAgIGlmIChmMTEuZXh0ZW5kZWQgPiAtMSAmJiAoZTUgPSB0aGlzLmFkZEFjdGlvbnModDQsIGYxMS5leHRlbmRlZCwgZjExLmVuZCwgZTUpKSwgZTUgPSB0aGlzLmFkZEFjdGlvbnModDQsIGYxMS52YWx1ZSwgZjExLmVuZCwgZTUpLCAhdTExLmV4dGVuZCAmJiAoczggPSBmMTEsIGU1ID4gYzE3KSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoOyB0aGlzLmFjdGlvbnMubGVuZ3RoID4gZTU7ICkKICAgICAgICB0aGlzLmFjdGlvbnMucG9wKCk7CiAgICAgIHJldHVybiBhNCAmJiB0NC5zZXRMb29rQWhlYWQoYTQpLCAhczggJiYgdDQucG9zID09IHRoaXMuc3RyZWFtLmVuZCAmJiAoczggPSBuZXcgbTE1KCksIHM4LnZhbHVlID0gdDQucC5wYXJzZXIuZW9mVGVybSwgczguc3RhcnQgPSBzOC5lbmQgPSB0NC5wb3MsIGU1ID0gdGhpcy5hZGRBY3Rpb25zKHQ0LCBzOC52YWx1ZSwgczguZW5kLCBlNSkpLCB0aGlzLm1haW5Ub2tlbiA9IHM4LCB0aGlzLmFjdGlvbnM7CiAgICB9CiAgICBnZXRNYWluVG9rZW4odDQpIHsKICAgICAgaWYgKHRoaXMubWFpblRva2VuKQogICAgICAgIHJldHVybiB0aGlzLm1haW5Ub2tlbjsKICAgICAgbGV0IGU1ID0gbmV3IG0xNSgpLCB7IHBvczogczgsIHA6IGk0IH0gPSB0NDsKICAgICAgcmV0dXJuIGU1LnN0YXJ0ID0gczgsIGU1LmVuZCA9IE1hdGgubWluKHM4ICsgMSwgaTQuc3RyZWFtLmVuZCksIGU1LnZhbHVlID0gczggPT0gaTQuc3RyZWFtLmVuZCA/IGk0LnBhcnNlci5lb2ZUZXJtIDogMCwgZTU7CiAgICB9CiAgICB1cGRhdGVDYWNoZWRUb2tlbih0NCwgZTUsIHM4KSB7CiAgICAgIGxldCBpNCA9IHRoaXMuc3RyZWFtLmNsaXBQb3MoczgucG9zKTsKICAgICAgaWYgKGU1LnRva2VuKHRoaXMuc3RyZWFtLnJlc2V0KGk0LCB0NCksIHM4KSwgdDQudmFsdWUgPiAtMSkgewogICAgICAgIGxldCB7IHBhcnNlcjogaDEwIH0gPSBzOC5wOwogICAgICAgIGZvciAobGV0IHIzID0gMDsgcjMgPCBoMTAuc3BlY2lhbGl6ZWQubGVuZ3RoOyByMysrKQogICAgICAgICAgaWYgKGgxMC5zcGVjaWFsaXplZFtyM10gPT0gdDQudmFsdWUpIHsKICAgICAgICAgICAgbGV0IG44ID0gaDEwLnNwZWNpYWxpemVyc1tyM10odGhpcy5zdHJlYW0ucmVhZCh0NC5zdGFydCwgdDQuZW5kKSwgczgpOwogICAgICAgICAgICBpZiAobjggPj0gMCAmJiBzOC5wLnBhcnNlci5kaWFsZWN0LmFsbG93cyhuOCA+PiAxKSkgewogICAgICAgICAgICAgIChuOCAmIDEpID09IDAgPyB0NC52YWx1ZSA9IG44ID4+IDEgOiB0NC5leHRlbmRlZCA9IG44ID4+IDE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfSBlbHNlCiAgICAgICAgdDQudmFsdWUgPSAwLCB0NC5lbmQgPSB0aGlzLnN0cmVhbS5jbGlwUG9zKGk0ICsgMSk7CiAgICB9CiAgICBwdXRBY3Rpb24odDQsIGU1LCBzOCwgaTQpIHsKICAgICAgZm9yIChsZXQgaDEwID0gMDsgaDEwIDwgaTQ7IGgxMCArPSAzKQogICAgICAgIGlmICh0aGlzLmFjdGlvbnNbaDEwXSA9PSB0NCkKICAgICAgICAgIHJldHVybiBpNDsKICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uc1tpNCsrXSA9IHQ0LCB0aGlzLmFjdGlvbnNbaTQrK10gPSBlNSwgdGhpcy5hY3Rpb25zW2k0KytdID0gczgsIGk0OwogICAgfQogICAgYWRkQWN0aW9ucyh0NCwgZTUsIHM4LCBpNCkgewogICAgICBsZXQgeyBzdGF0ZTogaDEwIH0gPSB0NCwgeyBwYXJzZXI6IHIzIH0gPSB0NC5wLCB7IGRhdGE6IG44IH0gPSByMzsKICAgICAgZm9yIChsZXQgYTQgPSAwOyBhNCA8IDI7IGE0KyspCiAgICAgICAgZm9yIChsZXQgbDcgPSByMy5zdGF0ZVNsb3QoaDEwLCBhNCA/IDIgOiAxKTsgOyBsNyArPSAzKSB7CiAgICAgICAgICBpZiAobjhbbDddID09IDY1NTM1KQogICAgICAgICAgICBpZiAobjhbbDcgKyAxXSA9PSAxKQogICAgICAgICAgICAgIGw3ID0gazgobjgsIGw3ICsgMik7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGk0ID09IDAgJiYgbjhbbDcgKyAxXSA9PSAyICYmIChpNCA9IHRoaXMucHV0QWN0aW9uKGs4KG44LCBsNyArIDIpLCBlNSwgczgsIGk0KSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIG44W2w3XSA9PSBlNSAmJiAoaTQgPSB0aGlzLnB1dEFjdGlvbihrOChuOCwgbDcgKyAxKSwgZTUsIHM4LCBpNCkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIGk0OwogICAgfQogIH07CiAgdmFyIFIxNTsKICAoZnVuY3Rpb24obzQpIHsKICAgIG80W280LkRpc3RhbmNlID0gNV0gPSAiRGlzdGFuY2UiLCBvNFtvNC5NYXhSZW1haW5pbmdQZXJTdGVwID0gM10gPSAiTWF4UmVtYWluaW5nUGVyU3RlcCIsIG80W280Lk1pbkJ1ZmZlckxlbmd0aFBydW5lID0gNTAwXSA9ICJNaW5CdWZmZXJMZW5ndGhQcnVuZSIsIG80W280LkZvcmNlUmVkdWNlTGltaXQgPSAxMF0gPSAiRm9yY2VSZWR1Y2VMaW1pdCIsIG80W280LkN1dERlcHRoID0gMTVlM10gPSAiQ3V0RGVwdGgiLCBvNFtvNC5DdXRUbyA9IDllM10gPSAiQ3V0VG8iOwogIH0pKFIxNSB8fCAoUjE1ID0ge30pKTsKICB2YXIgejE2ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1LCBzOCwgaTQpIHsKICAgICAgdGhpcy5wYXJzZXIgPSB0NCwgdGhpcy5pbnB1dCA9IGU1LCB0aGlzLnJhbmdlcyA9IGk0LCB0aGlzLnJlY292ZXJpbmcgPSAwLCB0aGlzLm5leHRTdGFja0lEID0gOTgxMiwgdGhpcy5taW5TdGFja1BvcyA9IDAsIHRoaXMucmV1c2VkID0gW10sIHRoaXMuc3RvcHBlZEF0ID0gbnVsbCwgdGhpcy5zdHJlYW0gPSBuZXcgVDE4KGU1LCBpNCksIHRoaXMudG9rZW5zID0gbmV3IEkxNyh0NCwgdGhpcy5zdHJlYW0pLCB0aGlzLnRvcFRlcm0gPSB0NC50b3BbMV07CiAgICAgIGxldCB7IGZyb206IGgxMCB9ID0gaTRbMF07CiAgICAgIHRoaXMuc3RhY2tzID0gW2IxNC5zdGFydCh0aGlzLCB0NC50b3BbMF0sIGgxMCldLCB0aGlzLmZyYWdtZW50cyA9IHM4Lmxlbmd0aCAmJiB0aGlzLnN0cmVhbS5lbmQgLSBoMTAgPiB0NC5idWZmZXJMZW5ndGggKiA0ID8gbmV3IEQxMShzOCwgdDQubm9kZVNldCkgOiBudWxsOwogICAgfQogICAgZ2V0IHBhcnNlZFBvcygpIHsKICAgICAgcmV0dXJuIHRoaXMubWluU3RhY2tQb3M7CiAgICB9CiAgICBhZHZhbmNlKCkgewogICAgICBsZXQgdDQgPSB0aGlzLnN0YWNrcywgZTUgPSB0aGlzLm1pblN0YWNrUG9zLCBzOCA9IHRoaXMuc3RhY2tzID0gW10sIGk0LCBoMTA7CiAgICAgIGZvciAobGV0IHIzID0gMDsgcjMgPCB0NC5sZW5ndGg7IHIzKyspIHsKICAgICAgICBsZXQgbjggPSB0NFtyM107CiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBpZiAodGhpcy50b2tlbnMubWFpblRva2VuID0gbnVsbCwgbjgucG9zID4gZTUpCiAgICAgICAgICAgIHM4LnB1c2gobjgpOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICh0aGlzLmFkdmFuY2VTdGFjayhuOCwgczgsIHQ0KSkKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgewogICAgICAgICAgICAgIGk0IHx8IChpNCA9IFtdLCBoMTAgPSBbXSksIGk0LnB1c2gobjgpOwogICAgICAgICAgICAgIGxldCBhNCA9IHRoaXMudG9rZW5zLmdldE1haW5Ub2tlbihuOCk7CiAgICAgICAgICAgICAgaDEwLnB1c2goYTQudmFsdWUsIGE0LmVuZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXM4Lmxlbmd0aCkgewogICAgICAgIGxldCByMyA9IGk0ICYmIFkxOShpNCk7CiAgICAgICAgaWYgKHIzKQogICAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2tUb1RyZWUocjMpOwogICAgICAgIGlmICh0aGlzLnBhcnNlci5zdHJpY3QpCiAgICAgICAgICB0aHJvdyBkNCAmJiBpNCAmJiBjb25zb2xlLmxvZygiU3R1Y2sgd2l0aCB0b2tlbiAiICsgKHRoaXMudG9rZW5zLm1haW5Ub2tlbiA/IHRoaXMucGFyc2VyLmdldE5hbWUodGhpcy50b2tlbnMubWFpblRva2VuLnZhbHVlKSA6ICJub25lIikpLCBuZXcgU3ludGF4RXJyb3IoIk5vIHBhcnNlIGF0ICIgKyBlNSk7CiAgICAgICAgdGhpcy5yZWNvdmVyaW5nIHx8ICh0aGlzLnJlY292ZXJpbmcgPSA1KTsKICAgICAgfQogICAgICBpZiAodGhpcy5yZWNvdmVyaW5nICYmIGk0KSB7CiAgICAgICAgbGV0IHIzID0gdGhpcy5zdG9wcGVkQXQgIT0gbnVsbCAmJiBpNFswXS5wb3MgPiB0aGlzLnN0b3BwZWRBdCA/IGk0WzBdIDogdGhpcy5ydW5SZWNvdmVyeShpNCwgaDEwLCBzOCk7CiAgICAgICAgaWYgKHIzKQogICAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2tUb1RyZWUocjMuZm9yY2VBbGwoKSk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMucmVjb3ZlcmluZykgewogICAgICAgIGxldCByMyA9IHRoaXMucmVjb3ZlcmluZyA9PSAxID8gMSA6IHRoaXMucmVjb3ZlcmluZyAqIDM7CiAgICAgICAgaWYgKHM4Lmxlbmd0aCA+IHIzKQogICAgICAgICAgZm9yIChzOC5zb3J0KChuOCwgYTQpID0+IGE0LnNjb3JlIC0gbjguc2NvcmUpOyBzOC5sZW5ndGggPiByMzsgKQogICAgICAgICAgICBzOC5wb3AoKTsKICAgICAgICBzOC5zb21lKChuOCkgPT4gbjgucmVkdWNlUG9zID4gZTUpICYmIHRoaXMucmVjb3ZlcmluZy0tOwogICAgICB9IGVsc2UgaWYgKHM4Lmxlbmd0aCA+IDEpIHsKICAgICAgICB0OgogICAgICAgICAgZm9yIChsZXQgcjMgPSAwOyByMyA8IHM4Lmxlbmd0aCAtIDE7IHIzKyspIHsKICAgICAgICAgICAgbGV0IG44ID0gczhbcjNdOwogICAgICAgICAgICBmb3IgKGxldCBhNCA9IHIzICsgMTsgYTQgPCBzOC5sZW5ndGg7IGE0KyspIHsKICAgICAgICAgICAgICBsZXQgbDcgPSBzOFthNF07CiAgICAgICAgICAgICAgaWYgKG44LnNhbWVTdGF0ZShsNykgfHwgbjguYnVmZmVyLmxlbmd0aCA+IDUwMCAmJiBsNy5idWZmZXIubGVuZ3RoID4gNTAwKQogICAgICAgICAgICAgICAgaWYgKChuOC5zY29yZSAtIGw3LnNjb3JlIHx8IG44LmJ1ZmZlci5sZW5ndGggLSBsNy5idWZmZXIubGVuZ3RoKSA+IDApCiAgICAgICAgICAgICAgICAgIHM4LnNwbGljZShhNC0tLCAxKTsKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBzOC5zcGxpY2UocjMtLSwgMSk7CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLm1pblN0YWNrUG9zID0gczhbMF0ucG9zOwogICAgICBmb3IgKGxldCByMyA9IDE7IHIzIDwgczgubGVuZ3RoOyByMysrKQogICAgICAgIHM4W3IzXS5wb3MgPCB0aGlzLm1pblN0YWNrUG9zICYmICh0aGlzLm1pblN0YWNrUG9zID0gczhbcjNdLnBvcyk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgc3RvcEF0KHQ0KSB7CiAgICAgIGlmICh0aGlzLnN0b3BwZWRBdCAhPSBudWxsICYmIHRoaXMuc3RvcHBlZEF0IDwgdDQpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNhbid0IG1vdmUgc3RvcHBlZEF0IGZvcndhcmQiKTsKICAgICAgdGhpcy5zdG9wcGVkQXQgPSB0NDsKICAgIH0KICAgIGFkdmFuY2VTdGFjayh0NCwgZTUsIHM4KSB7CiAgICAgIGxldCBpNCA9IHQ0LnBvcywgeyBwYXJzZXI6IGgxMCB9ID0gdGhpcywgcjMgPSBkNCA/IHRoaXMuc3RhY2tJRCh0NCkgKyAiIC0+ICIgOiAiIjsKICAgICAgaWYgKHRoaXMuc3RvcHBlZEF0ICE9IG51bGwgJiYgaTQgPiB0aGlzLnN0b3BwZWRBdCkKICAgICAgICByZXR1cm4gdDQuZm9yY2VSZWR1Y2UoKSA/IHQ0IDogbnVsbDsKICAgICAgaWYgKHRoaXMuZnJhZ21lbnRzKSB7CiAgICAgICAgbGV0IGw3ID0gdDQuY3VyQ29udGV4dCAmJiB0NC5jdXJDb250ZXh0LnRyYWNrZXIuc3RyaWN0LCB1MTEgPSBsNyA/IHQ0LmN1ckNvbnRleHQuaGFzaCA6IDA7CiAgICAgICAgZm9yIChsZXQgZjExID0gdGhpcy5mcmFnbWVudHMubm9kZUF0KGk0KTsgZjExOyApIHsKICAgICAgICAgIGxldCBjMTcgPSB0aGlzLnBhcnNlci5ub2RlU2V0LnR5cGVzW2YxMS50eXBlLmlkXSA9PSBmMTEudHlwZSA/IGgxMC5nZXRHb3RvKHQ0LnN0YXRlLCBmMTEudHlwZS5pZCkgOiAtMTsKICAgICAgICAgIGlmIChjMTcgPiAtMSAmJiBmMTEubGVuZ3RoICYmICghbDcgfHwgKGYxMS5wcm9wKHczLmNvbnRleHRIYXNoKSB8fCAwKSA9PSB1MTEpKQogICAgICAgICAgICByZXR1cm4gdDQudXNlTm9kZShmMTEsIGMxNyksIGQ0ICYmIGNvbnNvbGUubG9nKHIzICsgdGhpcy5zdGFja0lEKHQ0KSArIGAgKHZpYSByZXVzZSBvZiAke2gxMC5nZXROYW1lKGYxMS50eXBlLmlkKX0pYCksIHRydWU7CiAgICAgICAgICBpZiAoIShmMTEgaW5zdGFuY2VvZiBQMykgfHwgZjExLmNoaWxkcmVuLmxlbmd0aCA9PSAwIHx8IGYxMS5wb3NpdGlvbnNbMF0gPiAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGxldCBwMTggPSBmMTEuY2hpbGRyZW5bMF07CiAgICAgICAgICBpZiAocDE4IGluc3RhbmNlb2YgUDMgJiYgZjExLnBvc2l0aW9uc1swXSA9PSAwKQogICAgICAgICAgICBmMTEgPSBwMTg7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgbjggPSBoMTAuc3RhdGVTbG90KHQ0LnN0YXRlLCA0KTsKICAgICAgaWYgKG44ID4gMCkKICAgICAgICByZXR1cm4gdDQucmVkdWNlKG44KSwgZDQgJiYgY29uc29sZS5sb2cocjMgKyB0aGlzLnN0YWNrSUQodDQpICsgYCAodmlhIGFsd2F5cy1yZWR1Y2UgJHtoMTAuZ2V0TmFtZShuOCAmIDY1NTM1KX0pYCksIHRydWU7CiAgICAgIGlmICh0NC5zdGFjay5sZW5ndGggPj0gMTVlMykKICAgICAgICBmb3IgKDsgdDQuc3RhY2subGVuZ3RoID4gOWUzICYmIHQ0LmZvcmNlUmVkdWNlKCk7ICkKICAgICAgICAgIDsKICAgICAgbGV0IGE0ID0gdGhpcy50b2tlbnMuZ2V0QWN0aW9ucyh0NCk7CiAgICAgIGZvciAobGV0IGw3ID0gMDsgbDcgPCBhNC5sZW5ndGg7ICkgewogICAgICAgIGxldCB1MTEgPSBhNFtsNysrXSwgZjExID0gYTRbbDcrK10sIGMxNyA9IGE0W2w3KytdLCBwMTggPSBsNyA9PSBhNC5sZW5ndGggfHwgIXM4LCBnMTIgPSBwMTggPyB0NCA6IHQ0LnNwbGl0KCk7CiAgICAgICAgaWYgKGcxMi5hcHBseSh1MTEsIGYxMSwgYzE3KSwgZDQgJiYgY29uc29sZS5sb2cocjMgKyB0aGlzLnN0YWNrSUQoZzEyKSArIGAgKHZpYSAkeyh1MTEgJiA2NTUzNikgPT0gMCA/ICJzaGlmdCIgOiBgcmVkdWNlIG9mICR7aDEwLmdldE5hbWUodTExICYgNjU1MzUpfWB9IGZvciAke2gxMC5nZXROYW1lKGYxMSl9IEAgJHtpNH0ke2cxMiA9PSB0NCA/ICIiIDogIiwgc3BsaXQifSlgKSwgcDE4KQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgZzEyLnBvcyA+IGk0ID8gZTUucHVzaChnMTIpIDogczgucHVzaChnMTIpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGFkdmFuY2VGdWxseSh0NCwgZTUpIHsKICAgICAgbGV0IHM4ID0gdDQucG9zOwogICAgICBmb3IgKDsgOyApIHsKICAgICAgICBpZiAoIXRoaXMuYWR2YW5jZVN0YWNrKHQ0LCBudWxsLCBudWxsKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAodDQucG9zID4gczgpCiAgICAgICAgICByZXR1cm4gRzExKHQ0LCBlNSksIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJ1blJlY292ZXJ5KHQ0LCBlNSwgczgpIHsKICAgICAgbGV0IGk0ID0gbnVsbCwgaDEwID0gZmFsc2U7CiAgICAgIGZvciAobGV0IHIzID0gMDsgcjMgPCB0NC5sZW5ndGg7IHIzKyspIHsKICAgICAgICBsZXQgbjggPSB0NFtyM10sIGE0ID0gZTVbcjMgPDwgMV0sIGw3ID0gZTVbKHIzIDw8IDEpICsgMV0sIHUxMSA9IGQ0ID8gdGhpcy5zdGFja0lEKG44KSArICIgLT4gIiA6ICIiOwogICAgICAgIGlmIChuOC5kZWFkRW5kICYmIChoMTAgfHwgKGgxMCA9IHRydWUsIG44LnJlc3RhcnQoKSwgZDQgJiYgY29uc29sZS5sb2codTExICsgdGhpcy5zdGFja0lEKG44KSArICIgKHJlc3RhcnRlZCkiKSwgdGhpcy5hZHZhbmNlRnVsbHkobjgsIHM4KSkpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgbGV0IGYxMSA9IG44LnNwbGl0KCksIGMxNyA9IHUxMTsKICAgICAgICBmb3IgKGxldCBwMTggPSAwOyBmMTEuZm9yY2VSZWR1Y2UoKSAmJiBwMTggPCAxMCAmJiAoZDQgJiYgY29uc29sZS5sb2coYzE3ICsgdGhpcy5zdGFja0lEKGYxMSkgKyAiICh2aWEgZm9yY2UtcmVkdWNlKSIpLCAhdGhpcy5hZHZhbmNlRnVsbHkoZjExLCBzOCkpOyBwMTgrKykKICAgICAgICAgIGQ0ICYmIChjMTcgPSB0aGlzLnN0YWNrSUQoZjExKSArICIgLT4gIik7CiAgICAgICAgZm9yIChsZXQgcDE4IG9mIG44LnJlY292ZXJCeUluc2VydChhNCkpCiAgICAgICAgICBkNCAmJiBjb25zb2xlLmxvZyh1MTEgKyB0aGlzLnN0YWNrSUQocDE4KSArICIgKHZpYSByZWNvdmVyLWluc2VydCkiKSwgdGhpcy5hZHZhbmNlRnVsbHkocDE4LCBzOCk7CiAgICAgICAgdGhpcy5zdHJlYW0uZW5kID4gbjgucG9zID8gKGw3ID09IG44LnBvcyAmJiAobDcrKywgYTQgPSAwKSwgbjgucmVjb3ZlckJ5RGVsZXRlKGE0LCBsNyksIGQ0ICYmIGNvbnNvbGUubG9nKHUxMSArIHRoaXMuc3RhY2tJRChuOCkgKyBgICh2aWEgcmVjb3Zlci1kZWxldGUgJHt0aGlzLnBhcnNlci5nZXROYW1lKGE0KX0pYCksIEcxMShuOCwgczgpKSA6ICghaTQgfHwgaTQuc2NvcmUgPCBuOC5zY29yZSkgJiYgKGk0ID0gbjgpOwogICAgICB9CiAgICAgIHJldHVybiBpNDsKICAgIH0KICAgIHN0YWNrVG9UcmVlKHQ0KSB7CiAgICAgIHJldHVybiB0NC5jbG9zZSgpLCBQMy5idWlsZCh7IGJ1ZmZlcjogUDE3LmNyZWF0ZSh0NCksIG5vZGVTZXQ6IHRoaXMucGFyc2VyLm5vZGVTZXQsIHRvcElEOiB0aGlzLnRvcFRlcm0sIG1heEJ1ZmZlckxlbmd0aDogdGhpcy5wYXJzZXIuYnVmZmVyTGVuZ3RoLCByZXVzZWQ6IHRoaXMucmV1c2VkLCBzdGFydDogdGhpcy5yYW5nZXNbMF0uZnJvbSwgbGVuZ3RoOiB0NC5wb3MgLSB0aGlzLnJhbmdlc1swXS5mcm9tLCBtaW5SZXBlYXRUeXBlOiB0aGlzLnBhcnNlci5taW5SZXBlYXRUZXJtIH0pOwogICAgfQogICAgc3RhY2tJRCh0NCkgewogICAgICBsZXQgZTUgPSAoeTEwIHx8ICh5MTAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSkpLmdldCh0NCk7CiAgICAgIHJldHVybiBlNSB8fCB5MTAuc2V0KHQ0LCBlNSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMubmV4dFN0YWNrSUQrKykpLCBlNSArIHQ0OwogICAgfQogIH07CiAgZnVuY3Rpb24gRzExKG80LCB0NCkgewogICAgZm9yIChsZXQgZTUgPSAwOyBlNSA8IHQ0Lmxlbmd0aDsgZTUrKykgewogICAgICBsZXQgczggPSB0NFtlNV07CiAgICAgIGlmIChzOC5wb3MgPT0gbzQucG9zICYmIHM4LnNhbWVTdGF0ZShvNCkpIHsKICAgICAgICB0NFtlNV0uc2NvcmUgPCBvNC5zY29yZSAmJiAodDRbZTVdID0gbzQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgdDQucHVzaChvNCk7CiAgfQogIHZhciBNMTUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIHM4KSB7CiAgICAgIHRoaXMuc291cmNlID0gdDQsIHRoaXMuZmxhZ3MgPSBlNSwgdGhpcy5kaXNhYmxlZCA9IHM4OwogICAgfQogICAgYWxsb3dzKHQ0KSB7CiAgICAgIHJldHVybiAhdGhpcy5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkW3Q0XSA9PSAwOwogICAgfQogIH07CiAgdmFyIEM5ID0gKG80KSA9PiBvNDsKICB2YXIgRTggPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICB0aGlzLnN0YXJ0ID0gdDQuc3RhcnQsIHRoaXMuc2hpZnQgPSB0NC5zaGlmdCB8fCBDOSwgdGhpcy5yZWR1Y2UgPSB0NC5yZWR1Y2UgfHwgQzksIHRoaXMucmV1c2UgPSB0NC5yZXVzZSB8fCBDOSwgdGhpcy5oYXNoID0gdDQuaGFzaCB8fCAoKCkgPT4gMCksIHRoaXMuc3RyaWN0ID0gdDQuc3RyaWN0ICE9PSBmYWxzZTsKICAgIH0KICB9OwogIHZhciBTMTMgPSBjbGFzcyBleHRlbmRzIHllNSB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICBpZiAoc3VwZXIoKSwgdGhpcy53cmFwcGVycyA9IFtdLCB0NC52ZXJzaW9uICE9IDE0KQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBQYXJzZXIgdmVyc2lvbiAoJHt0NC52ZXJzaW9ufSkgZG9lc24ndCBtYXRjaCBydW50aW1lIHZlcnNpb24gKCR7MTR9KWApOwogICAgICBsZXQgZTUgPSB0NC5ub2RlTmFtZXMuc3BsaXQoIiAiKTsKICAgICAgdGhpcy5taW5SZXBlYXRUZXJtID0gZTUubGVuZ3RoOwogICAgICBmb3IgKGxldCBuOCA9IDA7IG44IDwgdDQucmVwZWF0Tm9kZUNvdW50OyBuOCsrKQogICAgICAgIGU1LnB1c2goIiIpOwogICAgICBsZXQgczggPSBPYmplY3Qua2V5cyh0NC50b3BSdWxlcykubWFwKChuOCkgPT4gdDQudG9wUnVsZXNbbjhdWzFdKSwgaTQgPSBbXTsKICAgICAgZm9yIChsZXQgbjggPSAwOyBuOCA8IGU1Lmxlbmd0aDsgbjgrKykKICAgICAgICBpNC5wdXNoKFtdKTsKICAgICAgZnVuY3Rpb24gaDEwKG44LCBhNCwgbDcpIHsKICAgICAgICBpNFtuOF0ucHVzaChbYTQsIGE0LmRlc2VyaWFsaXplKFN0cmluZyhsNykpXSk7CiAgICAgIH0KICAgICAgaWYgKHQ0Lm5vZGVQcm9wcykKICAgICAgICBmb3IgKGxldCBuOCBvZiB0NC5ub2RlUHJvcHMpIHsKICAgICAgICAgIGxldCBhNCA9IG44WzBdOwogICAgICAgICAgdHlwZW9mIGE0ID09ICJzdHJpbmciICYmIChhNCA9IHczW2E0XSk7CiAgICAgICAgICBmb3IgKGxldCBsNyA9IDE7IGw3IDwgbjgubGVuZ3RoOyApIHsKICAgICAgICAgICAgbGV0IHUxMSA9IG44W2w3KytdOwogICAgICAgICAgICBpZiAodTExID49IDApCiAgICAgICAgICAgICAgaDEwKHUxMSwgYTQsIG44W2w3KytdKTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgbGV0IGYxMSA9IG44W2w3ICsgLXUxMV07CiAgICAgICAgICAgICAgZm9yIChsZXQgYzE3ID0gLXUxMTsgYzE3ID4gMDsgYzE3LS0pCiAgICAgICAgICAgICAgICBoMTAobjhbbDcrK10sIGE0LCBmMTEpOwogICAgICAgICAgICAgIGw3Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHRoaXMubm9kZVNldCA9IG5ldyBaMyhlNS5tYXAoKG44LCBhNCkgPT4gTjMuZGVmaW5lKHsgbmFtZTogYTQgPj0gdGhpcy5taW5SZXBlYXRUZXJtID8gdm9pZCAwIDogbjgsIGlkOiBhNCwgcHJvcHM6IGk0W2E0XSwgdG9wOiBzOC5pbmRleE9mKGE0KSA+IC0xLCBlcnJvcjogYTQgPT0gMCwgc2tpcHBlZDogdDQuc2tpcHBlZE5vZGVzICYmIHQ0LnNraXBwZWROb2Rlcy5pbmRleE9mKGE0KSA+IC0xIH0pKSksIHQ0LnByb3BTb3VyY2VzICYmICh0aGlzLm5vZGVTZXQgPSB0aGlzLm5vZGVTZXQuZXh0ZW5kKC4uLnQ0LnByb3BTb3VyY2VzKSksIHRoaXMuc3RyaWN0ID0gZmFsc2UsIHRoaXMuYnVmZmVyTGVuZ3RoID0gSWU1OwogICAgICBsZXQgcjMgPSBBMTIodDQudG9rZW5EYXRhKTsKICAgICAgdGhpcy5jb250ZXh0ID0gdDQuY29udGV4dCwgdGhpcy5zcGVjaWFsaXplclNwZWNzID0gdDQuc3BlY2lhbGl6ZWQgfHwgW10sIHRoaXMuc3BlY2lhbGl6ZWQgPSBuZXcgVWludDE2QXJyYXkodGhpcy5zcGVjaWFsaXplclNwZWNzLmxlbmd0aCk7CiAgICAgIGZvciAobGV0IG44ID0gMDsgbjggPCB0aGlzLnNwZWNpYWxpemVyU3BlY3MubGVuZ3RoOyBuOCsrKQogICAgICAgIHRoaXMuc3BlY2lhbGl6ZWRbbjhdID0gdGhpcy5zcGVjaWFsaXplclNwZWNzW244XS50ZXJtOwogICAgICB0aGlzLnNwZWNpYWxpemVycyA9IHRoaXMuc3BlY2lhbGl6ZXJTcGVjcy5tYXAoSDEyKSwgdGhpcy5zdGF0ZXMgPSBBMTIodDQuc3RhdGVzLCBVaW50MzJBcnJheSksIHRoaXMuZGF0YSA9IEExMih0NC5zdGF0ZURhdGEpLCB0aGlzLmdvdG8gPSBBMTIodDQuZ290byksIHRoaXMubWF4VGVybSA9IHQ0Lm1heFRlcm0sIHRoaXMudG9rZW5pemVycyA9IHQ0LnRva2VuaXplcnMubWFwKChuOCkgPT4gdHlwZW9mIG44ID09ICJudW1iZXIiID8gbmV3IHgxMChyMywgbjgpIDogbjgpLCB0aGlzLnRvcFJ1bGVzID0gdDQudG9wUnVsZXMsIHRoaXMuZGlhbGVjdHMgPSB0NC5kaWFsZWN0cyB8fCB7fSwgdGhpcy5keW5hbWljUHJlY2VkZW5jZXMgPSB0NC5keW5hbWljUHJlY2VkZW5jZXMgfHwgbnVsbCwgdGhpcy50b2tlblByZWNUYWJsZSA9IHQ0LnRva2VuUHJlYywgdGhpcy50ZXJtTmFtZXMgPSB0NC50ZXJtTmFtZXMgfHwgbnVsbCwgdGhpcy5tYXhOb2RlID0gdGhpcy5ub2RlU2V0LnR5cGVzLmxlbmd0aCAtIDEsIHRoaXMuZGlhbGVjdCA9IHRoaXMucGFyc2VEaWFsZWN0KCksIHRoaXMudG9wID0gdGhpcy50b3BSdWxlc1tPYmplY3Qua2V5cyh0aGlzLnRvcFJ1bGVzKVswXV07CiAgICB9CiAgICBjcmVhdGVQYXJzZSh0NCwgZTUsIHM4KSB7CiAgICAgIGxldCBpNCA9IG5ldyB6MTYodGhpcywgdDQsIGU1LCBzOCk7CiAgICAgIGZvciAobGV0IGgxMCBvZiB0aGlzLndyYXBwZXJzKQogICAgICAgIGk0ID0gaDEwKGk0LCB0NCwgZTUsIHM4KTsKICAgICAgcmV0dXJuIGk0OwogICAgfQogICAgZ2V0R290byh0NCwgZTUsIHM4ID0gZmFsc2UpIHsKICAgICAgbGV0IGk0ID0gdGhpcy5nb3RvOwogICAgICBpZiAoZTUgPj0gaTRbMF0pCiAgICAgICAgcmV0dXJuIC0xOwogICAgICBmb3IgKGxldCBoMTAgPSBpNFtlNSArIDFdOyA7ICkgewogICAgICAgIGxldCByMyA9IGk0W2gxMCsrXSwgbjggPSByMyAmIDEsIGE0ID0gaTRbaDEwKytdOwogICAgICAgIGlmIChuOCAmJiBzOCkKICAgICAgICAgIHJldHVybiBhNDsKICAgICAgICBmb3IgKGxldCBsNyA9IGgxMCArIChyMyA+PiAxKTsgaDEwIDwgbDc7IGgxMCsrKQogICAgICAgICAgaWYgKGk0W2gxMF0gPT0gdDQpCiAgICAgICAgICAgIHJldHVybiBhNDsKICAgICAgICBpZiAobjgpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgIH0KICAgIGhhc0FjdGlvbih0NCwgZTUpIHsKICAgICAgbGV0IHM4ID0gdGhpcy5kYXRhOwogICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgMjsgaTQrKykKICAgICAgICBmb3IgKGxldCBoMTAgPSB0aGlzLnN0YXRlU2xvdCh0NCwgaTQgPyAyIDogMSksIHIzOyA7IGgxMCArPSAzKSB7CiAgICAgICAgICBpZiAoKHIzID0gczhbaDEwXSkgPT0gNjU1MzUpCiAgICAgICAgICAgIGlmIChzOFtoMTAgKyAxXSA9PSAxKQogICAgICAgICAgICAgIHIzID0gczhbaDEwID0gazgoczgsIGgxMCArIDIpXTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgaWYgKHM4W2gxMCArIDFdID09IDIpCiAgICAgICAgICAgICAgICByZXR1cm4gazgoczgsIGgxMCArIDIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAocjMgPT0gZTUgfHwgcjMgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIGs4KHM4LCBoMTAgKyAxKTsKICAgICAgICB9CiAgICAgIHJldHVybiAwOwogICAgfQogICAgc3RhdGVTbG90KHQ0LCBlNSkgewogICAgICByZXR1cm4gdGhpcy5zdGF0ZXNbdDQgKiA2ICsgZTVdOwogICAgfQogICAgc3RhdGVGbGFnKHQ0LCBlNSkgewogICAgICByZXR1cm4gKHRoaXMuc3RhdGVTbG90KHQ0LCAwKSAmIGU1KSA+IDA7CiAgICB9CiAgICB2YWxpZEFjdGlvbih0NCwgZTUpIHsKICAgICAgaWYgKGU1ID09IHRoaXMuc3RhdGVTbG90KHQ0LCA0KSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgZm9yIChsZXQgczggPSB0aGlzLnN0YXRlU2xvdCh0NCwgMSk7IDsgczggKz0gMykgewogICAgICAgIGlmICh0aGlzLmRhdGFbczhdID09IDY1NTM1KQogICAgICAgICAgaWYgKHRoaXMuZGF0YVtzOCArIDFdID09IDEpCiAgICAgICAgICAgIHM4ID0gazgodGhpcy5kYXRhLCBzOCArIDIpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKGU1ID09IGs4KHRoaXMuZGF0YSwgczggKyAxKSkKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBuZXh0U3RhdGVzKHQ0KSB7CiAgICAgIGxldCBlNSA9IFtdOwogICAgICBmb3IgKGxldCBzOCA9IHRoaXMuc3RhdGVTbG90KHQ0LCAxKTsgOyBzOCArPSAzKSB7CiAgICAgICAgaWYgKHRoaXMuZGF0YVtzOF0gPT0gNjU1MzUpCiAgICAgICAgICBpZiAodGhpcy5kYXRhW3M4ICsgMV0gPT0gMSkKICAgICAgICAgICAgczggPSBrOCh0aGlzLmRhdGEsIHM4ICsgMik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGlmICgodGhpcy5kYXRhW3M4ICsgMl0gJiAxKSA9PSAwKSB7CiAgICAgICAgICBsZXQgaTQgPSB0aGlzLmRhdGFbczggKyAxXTsKICAgICAgICAgIGU1LnNvbWUoKGgxMCwgcjMpID0+IHIzICYgMSAmJiBoMTAgPT0gaTQpIHx8IGU1LnB1c2godGhpcy5kYXRhW3M4XSwgaTQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZTU7CiAgICB9CiAgICBvdmVycmlkZXModDQsIGU1KSB7CiAgICAgIGxldCBzOCA9IFUxNSh0aGlzLmRhdGEsIHRoaXMudG9rZW5QcmVjVGFibGUsIGU1KTsKICAgICAgcmV0dXJuIHM4IDwgMCB8fCBVMTUodGhpcy5kYXRhLCB0aGlzLnRva2VuUHJlY1RhYmxlLCB0NCkgPCBzODsKICAgIH0KICAgIGNvbmZpZ3VyZSh0NCkgewogICAgICBsZXQgZTUgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoUzEzLnByb3RvdHlwZSksIHRoaXMpOwogICAgICBpZiAodDQucHJvcHMgJiYgKGU1Lm5vZGVTZXQgPSB0aGlzLm5vZGVTZXQuZXh0ZW5kKC4uLnQ0LnByb3BzKSksIHQ0LnRvcCkgewogICAgICAgIGxldCBzOCA9IHRoaXMudG9wUnVsZXNbdDQudG9wXTsKICAgICAgICBpZiAoIXM4KQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgdG9wIHJ1bGUgbmFtZSAke3Q0LnRvcH1gKTsKICAgICAgICBlNS50b3AgPSBzODsKICAgICAgfQogICAgICByZXR1cm4gdDQudG9rZW5pemVycyAmJiAoZTUudG9rZW5pemVycyA9IHRoaXMudG9rZW5pemVycy5tYXAoKHM4KSA9PiB7CiAgICAgICAgbGV0IGk0ID0gdDQudG9rZW5pemVycy5maW5kKChoMTApID0+IGgxMC5mcm9tID09IHM4KTsKICAgICAgICByZXR1cm4gaTQgPyBpNC50byA6IHM4OwogICAgICB9KSksIHQ0LnNwZWNpYWxpemVycyAmJiAoZTUuc3BlY2lhbGl6ZXJzID0gdGhpcy5zcGVjaWFsaXplcnMuc2xpY2UoKSwgZTUuc3BlY2lhbGl6ZXJTcGVjcyA9IHRoaXMuc3BlY2lhbGl6ZXJTcGVjcy5tYXAoKHM4LCBpNCkgPT4gewogICAgICAgIGxldCBoMTAgPSB0NC5zcGVjaWFsaXplcnMuZmluZCgobjgpID0+IG44LmZyb20gPT0gczguZXh0ZXJuYWwpOwogICAgICAgIGlmICghaDEwKQogICAgICAgICAgcmV0dXJuIHM4OwogICAgICAgIGxldCByMyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgczgpLCB7IGV4dGVybmFsOiBoMTAudG8gfSk7CiAgICAgICAgcmV0dXJuIGU1LnNwZWNpYWxpemVyc1tpNF0gPSBIMTIocjMpLCByMzsKICAgICAgfSkpLCB0NC5jb250ZXh0VHJhY2tlciAmJiAoZTUuY29udGV4dCA9IHQ0LmNvbnRleHRUcmFja2VyKSwgdDQuZGlhbGVjdCAmJiAoZTUuZGlhbGVjdCA9IHRoaXMucGFyc2VEaWFsZWN0KHQ0LmRpYWxlY3QpKSwgdDQuc3RyaWN0ICE9IG51bGwgJiYgKGU1LnN0cmljdCA9IHQ0LnN0cmljdCksIHQ0LndyYXAgJiYgKGU1LndyYXBwZXJzID0gZTUud3JhcHBlcnMuY29uY2F0KHQ0LndyYXApKSwgdDQuYnVmZmVyTGVuZ3RoICE9IG51bGwgJiYgKGU1LmJ1ZmZlckxlbmd0aCA9IHQ0LmJ1ZmZlckxlbmd0aCksIGU1OwogICAgfQogICAgaGFzV3JhcHBlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLndyYXBwZXJzLmxlbmd0aCA+IDA7CiAgICB9CiAgICBnZXROYW1lKHQ0KSB7CiAgICAgIHJldHVybiB0aGlzLnRlcm1OYW1lcyA/IHRoaXMudGVybU5hbWVzW3Q0XSA6IFN0cmluZyh0NCA8PSB0aGlzLm1heE5vZGUgJiYgdGhpcy5ub2RlU2V0LnR5cGVzW3Q0XS5uYW1lIHx8IHQ0KTsKICAgIH0KICAgIGdldCBlb2ZUZXJtKCkgewogICAgICByZXR1cm4gdGhpcy5tYXhOb2RlICsgMTsKICAgIH0KICAgIGdldCB0b3BOb2RlKCkgewogICAgICByZXR1cm4gdGhpcy5ub2RlU2V0LnR5cGVzW3RoaXMudG9wWzFdXTsKICAgIH0KICAgIGR5bmFtaWNQcmVjZWRlbmNlKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMuZHluYW1pY1ByZWNlZGVuY2VzOwogICAgICByZXR1cm4gZTUgPT0gbnVsbCA/IDAgOiBlNVt0NF0gfHwgMDsKICAgIH0KICAgIHBhcnNlRGlhbGVjdCh0NCkgewogICAgICBsZXQgZTUgPSBPYmplY3Qua2V5cyh0aGlzLmRpYWxlY3RzKSwgczggPSBlNS5tYXAoKCkgPT4gZmFsc2UpOwogICAgICBpZiAodDQpCiAgICAgICAgZm9yIChsZXQgaDEwIG9mIHQ0LnNwbGl0KCIgIikpIHsKICAgICAgICAgIGxldCByMyA9IGU1LmluZGV4T2YoaDEwKTsKICAgICAgICAgIHIzID49IDAgJiYgKHM4W3IzXSA9IHRydWUpOwogICAgICAgIH0KICAgICAgbGV0IGk0ID0gbnVsbDsKICAgICAgZm9yIChsZXQgaDEwID0gMDsgaDEwIDwgZTUubGVuZ3RoOyBoMTArKykKICAgICAgICBpZiAoIXM4W2gxMF0pCiAgICAgICAgICBmb3IgKGxldCByMyA9IHRoaXMuZGlhbGVjdHNbZTVbaDEwXV0sIG44OyAobjggPSB0aGlzLmRhdGFbcjMrK10pICE9IDY1NTM1OyApCiAgICAgICAgICAgIChpNCB8fCAoaTQgPSBuZXcgVWludDhBcnJheSh0aGlzLm1heFRlcm0gKyAxKSkpW244XSA9IDE7CiAgICAgIHJldHVybiBuZXcgTTE1KHQ0LCBzOCwgaTQpOwogICAgfQogICAgc3RhdGljIGRlc2VyaWFsaXplKHQ0KSB7CiAgICAgIHJldHVybiBuZXcgUzEzKHQ0KTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGs4KG80LCB0NCkgewogICAgcmV0dXJuIG80W3Q0XSB8IG80W3Q0ICsgMV0gPDwgMTY7CiAgfQogIGZ1bmN0aW9uIFUxNShvNCwgdDQsIGU1KSB7CiAgICBmb3IgKGxldCBzOCA9IHQ0LCBpNDsgKGk0ID0gbzRbczhdKSAhPSA2NTUzNTsgczgrKykKICAgICAgaWYgKGk0ID09IGU1KQogICAgICAgIHJldHVybiBzOCAtIHQ0OwogICAgcmV0dXJuIC0xOwogIH0KICBmdW5jdGlvbiBZMTkobzQpIHsKICAgIGxldCB0NCA9IG51bGw7CiAgICBmb3IgKGxldCBlNSBvZiBvNCkgewogICAgICBsZXQgczggPSBlNS5wLnN0b3BwZWRBdDsKICAgICAgKGU1LnBvcyA9PSBlNS5wLnN0cmVhbS5lbmQgfHwgczggIT0gbnVsbCAmJiBlNS5wb3MgPiBzOCkgJiYgZTUucC5wYXJzZXIuc3RhdGVGbGFnKGU1LnN0YXRlLCAyKSAmJiAoIXQ0IHx8IHQ0LnNjb3JlIDwgZTUuc2NvcmUpICYmICh0NCA9IGU1KTsKICAgIH0KICAgIHJldHVybiB0NDsKICB9CiAgZnVuY3Rpb24gSDEyKG80KSB7CiAgICBpZiAobzQuZXh0ZXJuYWwpIHsKICAgICAgbGV0IHQ0ID0gbzQuZXh0ZW5kID8gMSA6IDA7CiAgICAgIHJldHVybiAoZTUsIHM4KSA9PiBvNC5leHRlcm5hbChlNSwgczgpIDw8IDEgfCB0NDsKICAgIH0KICAgIHJldHVybiBvNC5nZXQ7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AbGV6ZXIvaHRtbEAxLjAuMS9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9odG1sLmpzCiAgdmFyIFoxMiA9IDUzOwogIHZhciBfMTYgPSAxOwogIHZhciB5MTEgPSA1NDsKICB2YXIgVjE0ID0gMjsKICB2YXIgRTkgPSA1NTsKICB2YXIgWTIwID0gMzsKICB2YXIgdTYgPSA0OwogIHZhciBkNSA9IDU7CiAgdmFyIFAxOCA9IDY7CiAgdmFyIFE5ID0gNzsKICB2YXIgdzE2ID0gODsKICB2YXIgRDEyID0gOTsKICB2YXIgRzEyID0gMTA7CiAgdmFyIGoxMSA9IDExOwogIHZhciBnNSA9IDU2OwogIHZhciBOMTAgPSAxMjsKICB2YXIgcDEwID0gNTc7CiAgdmFyIEwxNCA9IDE4OwogIHZhciBBMTMgPSAyNzsKICB2YXIgSTE4ID0gMzA7CiAgdmFyIFUxNiA9IDMzOwogIHZhciBNMTYgPSAzNTsKICB2YXIgejE3ID0gMDsKICB2YXIgSzEyID0geyBhcmVhOiB0cnVlLCBiYXNlOiB0cnVlLCBicjogdHJ1ZSwgY29sOiB0cnVlLCBjb21tYW5kOiB0cnVlLCBlbWJlZDogdHJ1ZSwgZnJhbWU6IHRydWUsIGhyOiB0cnVlLCBpbWc6IHRydWUsIGlucHV0OiB0cnVlLCBrZXlnZW46IHRydWUsIGxpbms6IHRydWUsIG1ldGE6IHRydWUsIHBhcmFtOiB0cnVlLCBzb3VyY2U6IHRydWUsIHRyYWNrOiB0cnVlLCB3YnI6IHRydWUsIG1lbnVpdGVtOiB0cnVlIH07CiAgdmFyIEYxNSA9IHsgZGQ6IHRydWUsIGxpOiB0cnVlLCBvcHRncm91cDogdHJ1ZSwgb3B0aW9uOiB0cnVlLCBwOiB0cnVlLCBycDogdHJ1ZSwgcnQ6IHRydWUsIHRib2R5OiB0cnVlLCB0ZDogdHJ1ZSwgdGZvb3Q6IHRydWUsIHRoOiB0cnVlLCB0cjogdHJ1ZSB9OwogIHZhciBjMTAgPSB7IGRkOiB7IGRkOiB0cnVlLCBkdDogdHJ1ZSB9LCBkdDogeyBkZDogdHJ1ZSwgZHQ6IHRydWUgfSwgbGk6IHsgbGk6IHRydWUgfSwgb3B0aW9uOiB7IG9wdGlvbjogdHJ1ZSwgb3B0Z3JvdXA6IHRydWUgfSwgb3B0Z3JvdXA6IHsgb3B0Z3JvdXA6IHRydWUgfSwgcDogeyBhZGRyZXNzOiB0cnVlLCBhcnRpY2xlOiB0cnVlLCBhc2lkZTogdHJ1ZSwgYmxvY2txdW90ZTogdHJ1ZSwgZGlyOiB0cnVlLCBkaXY6IHRydWUsIGRsOiB0cnVlLCBmaWVsZHNldDogdHJ1ZSwgZm9vdGVyOiB0cnVlLCBmb3JtOiB0cnVlLCBoMTogdHJ1ZSwgaDI6IHRydWUsIGgzOiB0cnVlLCBoNDogdHJ1ZSwgaDU6IHRydWUsIGg2OiB0cnVlLCBoZWFkZXI6IHRydWUsIGhncm91cDogdHJ1ZSwgaHI6IHRydWUsIG1lbnU6IHRydWUsIG5hdjogdHJ1ZSwgb2w6IHRydWUsIHA6IHRydWUsIHByZTogdHJ1ZSwgc2VjdGlvbjogdHJ1ZSwgdGFibGU6IHRydWUsIHVsOiB0cnVlIH0sIHJwOiB7IHJwOiB0cnVlLCBydDogdHJ1ZSB9LCBydDogeyBycDogdHJ1ZSwgcnQ6IHRydWUgfSwgdGJvZHk6IHsgdGJvZHk6IHRydWUsIHRmb290OiB0cnVlIH0sIHRkOiB7IHRkOiB0cnVlLCB0aDogdHJ1ZSB9LCB0Zm9vdDogeyB0Ym9keTogdHJ1ZSB9LCB0aDogeyB0ZDogdHJ1ZSwgdGg6IHRydWUgfSwgdGhlYWQ6IHsgdGJvZHk6IHRydWUsIHRmb290OiB0cnVlIH0sIHRyOiB7IHRyOiB0cnVlIH0gfTsKICBmdW5jdGlvbiBCMTUoZTUpIHsKICAgIHJldHVybiBlNSA9PSA0NSB8fCBlNSA9PSA0NiB8fCBlNSA9PSA1OCB8fCBlNSA+PSA2NSAmJiBlNSA8PSA5MCB8fCBlNSA9PSA5NSB8fCBlNSA+PSA5NyAmJiBlNSA8PSAxMjIgfHwgZTUgPj0gMTYxOwogIH0KICBmdW5jdGlvbiBYMTUoZTUpIHsKICAgIHJldHVybiBlNSA9PSA5IHx8IGU1ID09IDEwIHx8IGU1ID09IDEzIHx8IGU1ID09IDMyOwogIH0KICB2YXIgaTIgPSBudWxsOwogIHZhciBUMTkgPSBudWxsOwogIHZhciBiMTUgPSAwOwogIGZ1bmN0aW9uICQxNihlNSwgTzE1KSB7CiAgICBsZXQgczggPSBlNS5wb3MgKyBPMTU7CiAgICBpZiAoYjE1ID09IHM4ICYmIFQxOSA9PSBlNSkKICAgICAgcmV0dXJuIGkyOwogICAgbGV0IHIzID0gZTUucGVlayhPMTUpOwogICAgZm9yICg7IFgxNShyMyk7ICkKICAgICAgcjMgPSBlNS5wZWVrKCsrTzE1KTsKICAgIGxldCB0NCA9ICIiOwogICAgZm9yICg7IEIxNShyMyk7ICkKICAgICAgdDQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShyMyksIHIzID0gZTUucGVlaygrK08xNSk7CiAgICByZXR1cm4gVDE5ID0gZTUsIGIxNSA9IHM4LCBpMiA9IHQ0ID8gdDQudG9Mb3dlckNhc2UoKSA6IHIzID09IEo2IHx8IHIzID09IEgxMyA/IHZvaWQgMCA6IG51bGw7CiAgfQogIHZhciBxMTEgPSA2MDsKICB2YXIgdjkgPSA2MjsKICB2YXIgaDIgPSA0NzsKICB2YXIgSjYgPSA2MzsKICB2YXIgSDEzID0gMzM7CiAgdmFyIGVlMTAgPSA0NTsKICBmdW5jdGlvbiBmNihlNSwgTzE1KSB7CiAgICB0aGlzLm5hbWUgPSBlNSwgdGhpcy5wYXJlbnQgPSBPMTUsIHRoaXMuaGFzaCA9IE8xNSA/IE8xNS5oYXNoIDogMDsKICAgIGZvciAobGV0IHM4ID0gMDsgczggPCBlNS5sZW5ndGg7IHM4KyspCiAgICAgIHRoaXMuaGFzaCArPSAodGhpcy5oYXNoIDw8IDQpICsgZTUuY2hhckNvZGVBdChzOCkgKyAoZTUuY2hhckNvZGVBdChzOCkgPDwgOCk7CiAgfQogIHZhciB0ZTExID0gW3U2LCB3MTYsIGQ1LCBQMTgsIFE5XTsKICB2YXIgT2UxMCA9IG5ldyBFOCh7IHN0YXJ0OiBudWxsLCBzaGlmdChlNSwgTzE1LCBzOCwgcjMpIHsKICAgIHJldHVybiB0ZTExLmluZGV4T2YoTzE1KSA+IC0xID8gbmV3IGY2KCQxNihyMywgMSkgfHwgIiIsIGU1KSA6IGU1OwogIH0sIHJlZHVjZShlNSwgTzE1KSB7CiAgICByZXR1cm4gTzE1ID09IEwxNCAmJiBlNSA/IGU1LnBhcmVudCA6IGU1OwogIH0sIHJldXNlKGU1LCBPMTUsIHM4LCByMykgewogICAgbGV0IHQ0ID0gTzE1LnR5cGUuaWQ7CiAgICByZXR1cm4gdDQgPT0gdTYgfHwgdDQgPT0gTTE2ID8gbmV3IGY2KCQxNihyMywgMSkgfHwgIiIsIGU1KSA6IGU1OwogIH0sIGhhc2goZTUpIHsKICAgIHJldHVybiBlNSA/IGU1Lmhhc2ggOiAwOwogIH0sIHN0cmljdDogZmFsc2UgfSk7CiAgdmFyIHJlMTQgPSBuZXcgTDEzKChlNSwgTzE1KSA9PiB7CiAgICBpZiAoZTUubmV4dCAhPSBxMTEpIHsKICAgICAgZTUubmV4dCA8IDAgJiYgTzE1LmNvbnRleHQgJiYgZTUuYWNjZXB0VG9rZW4oZzUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBlNS5hZHZhbmNlKCk7CiAgICBsZXQgczggPSBlNS5uZXh0ID09IGgyOwogICAgczggJiYgZTUuYWR2YW5jZSgpOwogICAgbGV0IHIzID0gJDE2KGU1LCAwKTsKICAgIGlmIChyMyA9PT0gdm9pZCAwKQogICAgICByZXR1cm47CiAgICBpZiAoIXIzKQogICAgICByZXR1cm4gZTUuYWNjZXB0VG9rZW4oczggPyBOMTAgOiB1Nik7CiAgICBsZXQgdDQgPSBPMTUuY29udGV4dCA/IE8xNS5jb250ZXh0Lm5hbWUgOiBudWxsOwogICAgaWYgKHM4KSB7CiAgICAgIGlmIChyMyA9PSB0NCkKICAgICAgICByZXR1cm4gZTUuYWNjZXB0VG9rZW4oRDEyKTsKICAgICAgaWYgKHQ0ICYmIEYxNVt0NF0pCiAgICAgICAgcmV0dXJuIGU1LmFjY2VwdFRva2VuKGc1LCAtMik7CiAgICAgIGlmIChPMTUuZGlhbGVjdEVuYWJsZWQoejE3KSkKICAgICAgICByZXR1cm4gZTUuYWNjZXB0VG9rZW4oRzEyKTsKICAgICAgZm9yIChsZXQgYTQgPSBPMTUuY29udGV4dDsgYTQ7IGE0ID0gYTQucGFyZW50KQogICAgICAgIGlmIChhNC5uYW1lID09IHIzKQogICAgICAgICAgcmV0dXJuOwogICAgICBlNS5hY2NlcHRUb2tlbihqMTEpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKHIzID09ICJzY3JpcHQiKQogICAgICAgIHJldHVybiBlNS5hY2NlcHRUb2tlbihkNSk7CiAgICAgIGlmIChyMyA9PSAic3R5bGUiKQogICAgICAgIHJldHVybiBlNS5hY2NlcHRUb2tlbihQMTgpOwogICAgICBpZiAocjMgPT0gInRleHRhcmVhIikKICAgICAgICByZXR1cm4gZTUuYWNjZXB0VG9rZW4oUTkpOwogICAgICBpZiAoSzEyLmhhc093blByb3BlcnR5KHIzKSkKICAgICAgICByZXR1cm4gZTUuYWNjZXB0VG9rZW4odzE2KTsKICAgICAgdDQgJiYgYzEwW3Q0XSAmJiBjMTBbdDRdW3IzXSA/IGU1LmFjY2VwdFRva2VuKGc1LCAtMSkgOiBlNS5hY2NlcHRUb2tlbih1Nik7CiAgICB9CiAgfSwgeyBjb250ZXh0dWFsOiB0cnVlIH0pOwogIHZhciBhZTEwID0gbmV3IEwxMygoZTUpID0+IHsKICAgIGZvciAobGV0IE8xNSA9IDAsIHM4ID0gMDsgOyBzOCsrKSB7CiAgICAgIGlmIChlNS5uZXh0IDwgMCkgewogICAgICAgIHM4ICYmIGU1LmFjY2VwdFRva2VuKHAxMCk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGU1Lm5leHQgPT0gZWUxMCkKICAgICAgICBPMTUrKzsKICAgICAgZWxzZSBpZiAoZTUubmV4dCA9PSB2OSAmJiBPMTUgPj0gMikgewogICAgICAgIHM4ID4gMyAmJiBlNS5hY2NlcHRUb2tlbihwMTAsIC0yKTsKICAgICAgICBicmVhazsKICAgICAgfSBlbHNlCiAgICAgICAgTzE1ID0gMDsKICAgICAgZTUuYWR2YW5jZSgpOwogICAgfQogIH0pOwogIGZ1bmN0aW9uIHgxMShlNSwgTzE1LCBzOCkgewogICAgbGV0IHIzID0gMiArIGU1Lmxlbmd0aDsKICAgIHJldHVybiBuZXcgTDEzKCh0NCkgPT4gewogICAgICBmb3IgKGxldCBhNCA9IDAsIGsxOCA9IDAsIG44ID0gMDsgOyBuOCsrKSB7CiAgICAgICAgaWYgKHQ0Lm5leHQgPCAwKSB7CiAgICAgICAgICBuOCAmJiB0NC5hY2NlcHRUb2tlbihPMTUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChhNCA9PSAwICYmIHQ0Lm5leHQgPT0gcTExIHx8IGE0ID09IDEgJiYgdDQubmV4dCA9PSBoMiB8fCBhNCA+PSAyICYmIGE0IDwgcjMgJiYgdDQubmV4dCA9PSBlNS5jaGFyQ29kZUF0KGE0IC0gMikpCiAgICAgICAgICBhNCsrLCBrMTgrKzsKICAgICAgICBlbHNlIGlmICgoYTQgPT0gMiB8fCBhNCA9PSByMykgJiYgWDE1KHQ0Lm5leHQpKQogICAgICAgICAgazE4Kys7CiAgICAgICAgZWxzZSBpZiAoYTQgPT0gcjMgJiYgdDQubmV4dCA9PSB2OSkgewogICAgICAgICAgbjggPiBrMTggPyB0NC5hY2NlcHRUb2tlbihPMTUsIC1rMTgpIDogdDQuYWNjZXB0VG9rZW4oczgsIC0oazE4IC0gMikpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIGlmICgodDQubmV4dCA9PSAxMCB8fCB0NC5uZXh0ID09IDEzKSAmJiBuOCkgewogICAgICAgICAgdDQuYWNjZXB0VG9rZW4oTzE1LCAxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZQogICAgICAgICAgYTQgPSBrMTggPSAwOwogICAgICAgIHQ0LmFkdmFuY2UoKTsKICAgICAgfQogICAgfSk7CiAgfQogIHZhciBzZTEyID0geDExKCJzY3JpcHQiLCBaMTIsIF8xNik7CiAgdmFyIG9lNyA9IHgxMSgic3R5bGUiLCB5MTEsIFYxNCk7CiAgdmFyIGtlMTEgPSB4MTEoInRleHRhcmVhIiwgRTksIFkyMCk7CiAgdmFyIG5lOSA9ICQxMih7ICJUZXh0IFJhd1RleHQiOiBuNS5jb250ZW50LCAiU3RhcnRUYWcgU3RhcnRDbG9zZVRhZyBTZWxmQ2xvc2VyRW5kVGFnIEVuZFRhZyBTZWxmQ2xvc2VFbmRUYWciOiBuNS5hbmdsZUJyYWNrZXQsIFRhZ05hbWU6IG41LnRhZ05hbWUsICJNaXNtYXRjaGVkQ2xvc2VUYWcvVGFnTmFtZSI6IFtuNS50YWdOYW1lLCBuNS5pbnZhbGlkXSwgQXR0cmlidXRlTmFtZTogbjUuYXR0cmlidXRlTmFtZSwgIkF0dHJpYnV0ZVZhbHVlIFVucXVvdGVkQXR0cmlidXRlVmFsdWUiOiBuNS5hdHRyaWJ1dGVWYWx1ZSwgSXM6IG41LmRlZmluaXRpb25PcGVyYXRvciwgIkVudGl0eVJlZmVyZW5jZSBDaGFyYWN0ZXJSZWZlcmVuY2UiOiBuNS5jaGFyYWN0ZXIsIENvbW1lbnQ6IG41LmJsb2NrQ29tbWVudCwgUHJvY2Vzc2luZ0luc3Q6IG41LnByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgRG9jdHlwZURlY2w6IG41LmRvY3VtZW50TWV0YSB9KTsKICB2YXIgbGUxMSA9IFMxMy5kZXNlcmlhbGl6ZSh7IHZlcnNpb246IDE0LCBzdGF0ZXM6ICIseE9WT3hPT08hV1EhYk8nI0NvTyFdUSFiTycjQ3lPIWJRIWJPJyNDfE8hZ1EhYk8nI0RQTyFsUSFiTycjRFJPIXFPWE8nI0NuTyF8T1lPJyNDbk8jWE9bTycjQ25PJGVPeE8nI0NuT09PVycjQ24nI0NuTyRsTyFyTycjRFNPJHRRIWJPJyNEVU8keVEhYk8nI0RWT09PVycjRGonI0RqT09PVycjRFgnI0RYUVZPeE9PTyVPUSN0Tyw1OVpPJVdRI3RPLDU5ZU8lYFEjdE8sNTloTyVoUSN0Tyw1OWtPJXBRI3RPLDU5bU9PT1gnI0RdJyNEXU8leE9YTycjQ3dPJlRPWE8sNTlZT09PWScjRF4nI0ReTyZdT1lPJyNDek8maE9ZTyw1OVlPT09bJyNEXycjRF9PJnBPW08nI0N9TyZ7T1tPLDU5WU9PT1cnI0RgJyNEYE8nVE94Tyw1OVlPJ1tRIWJPJyNEUU9PT1csNTlZLDU5WU9PT2AnI0RhJyNEYU8nYU8hck8sNTluT09PVyw1OW4sNTluTydpUSFiTyw1OXBPJ25RIWJPLDU5cU9PT1ctRTdWLUU3Vk8nc1EjdE8nI0NxT09RTycjRFknI0RZTyhPUSN0TzFHLnVPT09YMUcudTFHLnVPKFdRI3RPMUcvUE9PT1kxRy9QMUcvUE8oYFEjdE8xRy9TT09PWzFHL1MxRy9TTyhoUSN0TzFHL1ZPT09XMUcvVjFHL1ZPKHBRI3RPMUcvWE9PT1cxRy9YMUcvWE9PT1gtRTdaLUU3Wk8oeFEhYk8nI0N4T09PVzFHLnQxRy50T09PWS1FN1stRTdbTyh9USFiTycjQ3tPT09bLUU3XS1FN11PKVNRIWJPJyNET09PT1ctRTdeLUU3Xk8pWFEhYk8sNTlsT09PYC1FN18tRTdfT09PVzFHL1kxRy9ZT09PVzFHL1sxRy9bT09PVzFHL10xRy9dTyleUSZqTyw1OV1PT1FPLUU3Vy1FN1dPT09YNyskYTcrJGFPT09ZNyskazcrJGtPT09bNyskbjcrJG5PT09XNyskcTcrJHFPT09XNyskczcrJHNPKWlRIWJPLDU5ZE8pblEhYk8sNTlnTylzUSFiTyw1OWpPT09XMUcvVzFHL1dPKXhPLFVPJyNDdE8qWk83W08nI0N0T09RTzFHLncxRy53T09PVzFHL08xRy9PT09PVzFHL1IxRy9ST09PVzFHL1UxRy9VT09PTycjRFonI0RaTypsTyxVTyw1OWBPT1FPLDU5YCw1OWBPT09PJyNEWycjRFtPKn1PN1tPLDU5YE9PT08tRTdYLUU3WE9PUU8xRy56MUcuek9PT08tRTdZLUU3WSIsIHN0YXRlRGF0YTogIitofk8hXU9Tfk9TU09UUE9VUU9WUk9XVE9ZXU9aW09bXk9eXk9fXk9gXk9hXk93Xk96X08hY1pPfk9kYU9+T2RiT35PZGNPfk9kZE9+T2RlT35PIVZmT1BrUCFZa1B+TyFXaU9RblAhWW5Qfk8hWGxPUnFQIVlxUH5PU1NPVFBPVVFPVlJPV1RPWHFPWV1PWltPW15PXl5PX15PYF5PYV5Pd15PIWNaT35PIVlyT35QI2RPIVpzTyFkdU9+T2R2T35PZHdPfk9meU9qfE9+T2Z5T2ohT09+T2Z5T2ohUU9+T2Z5T2ohU09+T2Z5T2ohVU9+TyFWZk9Qa1ghWWtYfk9QIVdPIVkhWE9+TyFXaU9RblghWW5Yfk9RIVpPIVkhWE9+TyFYbE9ScVghWXFYfk9SIV1PIVkhWE9+TyFZIVhPflAjZE9kIV9Pfk8hWnNPIWQhYU9+T2ohYk9+T2ohY09+T2chZE9mZVhqZVh+T2Z5T2ohZk9+T2Z5T2ohZ09+T2Z5T2ohaE9+T2Z5T2ohaU9+T2Z5T2ohak9+T2Qha09+T2QhbE9+T2QhbU9+T2ohbk9+T2khcU8hXyFvTyFhIXBPfk9qIXJPfk9qIXNPfk9qIXRPfk9fIXVPYCF1T2EhdU8hXyF3TyFgIXVPfk9fIXhPYCF4T2EheE8hYSF3TyFiIXhPfk9fIXVPYCF1T2EhdU8hXyF7TyFgIXVPfk9fIXhPYCF4T2EheE8hYSF7TyFiIXhPfk9gX2EhY3d6IWN+IiwgZ290bzogIiVvIV9QUFBQUFBQUFBQUFBQUFBQUFAhYCFmUCFsUFAheFBQIXsjTyNSI1gjWyNfI2UjaCNrI3EjdyFgUCFgIWBQI30kVCRrJHEkdyR9JVQlWiVhUFBQUFBQUFAlZ1heT1hgcFhVT1hgcGV6YWJjZGV7fSFQIVIhVFIhcSFkUmhVUiFYaFhWT1hgcFJrVlIhWGtYV09YYHBSbldSIVhuWFhPWGBwUXJYUiFYcFhZT1hgcFFgT1J4YFF7YVF9YlEhUGNRIVJkUSFUZVohZXt9IVAhUiFUUSF2IW9SIXohdlEheSFwUiF8IXlRZ1VSIVZnUWpWUiFZalFtV1IhW21RcFhSIV5wUXRaUiFgdFNfT2BUb1hwIiwgbm9kZU5hbWVzOiAiXHUyNkEwIFN0YXJ0Q2xvc2VUYWcgU3RhcnRDbG9zZVRhZyBTdGFydENsb3NlVGFnIFN0YXJ0VGFnIFN0YXJ0VGFnIFN0YXJ0VGFnIFN0YXJ0VGFnIFN0YXJ0VGFnIFN0YXJ0Q2xvc2VUYWcgU3RhcnRDbG9zZVRhZyBTdGFydENsb3NlVGFnIEluY29tcGxldGVDbG9zZVRhZyBEb2N1bWVudCBUZXh0IEVudGl0eVJlZmVyZW5jZSBDaGFyYWN0ZXJSZWZlcmVuY2UgSW52YWxpZEVudGl0eSBFbGVtZW50IE9wZW5UYWcgVGFnTmFtZSBBdHRyaWJ1dGUgQXR0cmlidXRlTmFtZSBJcyBBdHRyaWJ1dGVWYWx1ZSBVbnF1b3RlZEF0dHJpYnV0ZVZhbHVlIEVuZFRhZyBTY3JpcHRUZXh0IENsb3NlVGFnIE9wZW5UYWcgU3R5bGVUZXh0IENsb3NlVGFnIE9wZW5UYWcgVGV4dGFyZWFUZXh0IENsb3NlVGFnIE9wZW5UYWcgQ2xvc2VUYWcgU2VsZkNsb3NpbmdUYWcgQ29tbWVudCBQcm9jZXNzaW5nSW5zdCBNaXNtYXRjaGVkQ2xvc2VUYWcgQ2xvc2VUYWcgRG9jdHlwZURlY2wiLCBtYXhUZXJtOiA2NiwgY29udGV4dDogT2UxMCwgbm9kZVByb3BzOiBbWyJjbG9zZWRCeSIsIC0xMSwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAiRW5kVGFnIiwgLTQsIDE5LCAyOSwgMzIsIDM1LCAiQ2xvc2VUYWciXSwgWyJncm91cCIsIC05LCAxMiwgMTUsIDE2LCAxNywgMTgsIDM4LCAzOSwgNDAsIDQxLCAiRW50aXR5IiwgMTQsICJFbnRpdHkgVGV4dENvbnRlbnQiLCAtMywgMjcsIDMwLCAzMywgIlRleHRDb250ZW50IEVudGl0eSJdLCBbIm9wZW5lZEJ5IiwgMjYsICJTdGFydFRhZyBTdGFydENsb3NlVGFnIiwgLTQsIDI4LCAzMSwgMzQsIDM2LCAiT3BlblRhZyJdXSwgcHJvcFNvdXJjZXM6IFtuZTldLCBza2lwcGVkTm9kZXM6IFswXSwgcmVwZWF0Tm9kZUNvdW50OiA5LCB0b2tlbkRhdGE6ICIhI2IhYVIhV09YJGtYWSlzWVopc1pdJGtdXilzXnAka3BxKXNxciRrcnMqenN2JGt2dytkd3gyeXh9JGt9IU8zZiFPIVAkayFQIVE3XyFRIVskayFbIV04dSFdIV4kayFeIV8+YiFfIWAhIXAhYCFhOFQhYSFjJGshYyF9OHUhfSNSJGsjUiNTOHUjUyNUJGsjVCNvOHUjbyRmJGskZiRnJlIkZyVXJGslVyVvOHUlbyVwJGslcCZhOHUmYSZiJGsmYjFwOHUxcDRVJGs0VTRkOHU0ZDRlJGs0ZSRJUzh1JElTJElgJGskSWAkSWI4dSRJYiRLaCRrJEtoJSN0OHUlI3QmL3gkayYveCZFdDh1JkV0JkZWJGsmRlY7J1M4dTsnUzs6ajx0OzpqPyZyJGs/JnI/QWg4dT9BaD9CWSRrP0JZP01uOHU/TW5+JGshWiR2Y15QaVchYGAhYnBPWCRrWFomUlpdJGtdXiZSXnAka3BxJlJxciRrcnMmcXN2JGt2dylSd3gncnghUCRrIVAhUSZSIVEhXiRrIV4hXyhrIV8hYSZSIWEkZiRrJGYkZyZSJGd+JGshUiZbVl5QIWBgIWJwT3ImUnJzJnFzdiZSd3gncnghXiZSIV4hXyhrIV9+JlJxJnhUXlAhYnBPdiZxd3gnWHghXiZxIV4hXydnIV9+JnFQJ15SXlBPdidYdyFeJ1ghX34nWHAnbFEhYnBPdidneH4nZ2EneVVeUCFgYE9yJ3JycydYc3YncnchXidyIV4hXyhdIV9+J3JgKGJSIWBgT3IoXXN2KF13fihdIVEoclQhYGAhYnBPcihrcnMnZ3N2KGt3eChdeH4oa1cpV1hpV09YKVJaXSlSXnApUnFyKVJzdylSeCFQKVIhUSFeKVIhYSRmKVIkZ34pUiFhKk9eXlAhYGAhYnAhXV5PWCZSWFkpc1laKXNaXSZSXV4pc15wJlJwcSlzcXImUnJzJnFzdiZSd3gncnghXiZSIV4hXyhrIV9+JlIhWitUVCFfaF5QIWJwT3YmcXd4J1h4IV4mcSFeIV8nZyFffiZxIVora2JpV2EhUk9YLHNYWi5RWl0sc11eLlFecCxzcXIsc3JzLlFzdC9ddHcsc3d4LlF4IVAscyFQIVEuUSFRIV0scyFdIV4pUiFeIWEuUSFhJGYscyRmJGcuUSRnfixzIVoseGJpV09YLHNYWi5RWl0sc11eLlFecCxzcXIsc3JzLlFzdClSdHcsc3d4LlF4IVAscyFQIVEuUSFRIV0scyFdIV4uaSFeIWEuUSFhJGYscyRmJGcuUSRnfixzIVIuVFRPcC5RcXMuUXQhXS5RIV0hXi5kIV5+LlEhUi5pT18hUiFaLnBYaVdfIVJPWClSWl0pUl5wKVJxcilSc3cpUnghUClSIVEhXilSIWEkZilSJGd+KVIhWi9iYWlXT1gwZ1haMXFaXTBnXV4xcV5wMGdxcjBncnMxcXN3MGd3eDFxeCFQMGchUCFRMXEhUSFdMGchXSFeKVIhXiFhMXEhYSRmMGckZiRnMXEkZ34wZyFaMGxhaVdPWDBnWFoxcVpdMGddXjFxXnAwZ3FyMGdyczFxc3cwZ3d4MXF4IVAwZyFQIVExcSFRIV0wZyFdIV4yViFeIWExcSFhJGYwZyRmJGcxcSRnfjBnIVIxdFNPcDFxcSFdMXEhXSFeMlEhXn4xcSFSMlZPYCFSIVoyXlhpV2AhUk9YKVJaXSlSXnApUnFyKVJzdylSeCFQKVIhUSFeKVIhYSRmKVIkZ34pUiFaM1NVIWF4XlAhYGBPcidycnMnWHN2J3J3IV4nciFeIV8oXSFffidyIV0zcWVeUGlXIWBgIWJwT1gka1haJlJaXSRrXV4mUl5wJGtwcSZScXIka3JzJnFzdiRrdncpUnd4J3J4fSRrfSFPNVMhTyFQJGshUCFRJlIhUSFeJGshXiFfKGshXyFhJlIhYSRmJGskZiRnJlIkZ34kayFdNV9kXlBpVyFgYCFicE9YJGtYWiZSWl0ka11eJlJecCRrcHEmUnFyJGtycyZxc3Yka3Z3KVJ3eCdyeCFQJGshUCFRJlIhUSFeJGshXiFfKGshXyFgJlIhYCFhNm0hYSRmJGskZiRnJlIkZ34kayFUNnhWXlAhYGAhYnAhZFFPciZScnMmcXN2JlJ3eCdyeCFeJlIhXiFfKGshX34mUiFYN2hYXlAhYGAhYnBPciZScnMmcXN2JlJ3eCdyeCFeJlIhXiFfKGshXyFgJlIhYCFhOFQhYX4mUiFYOGBWalVeUCFgYCFicE9yJlJycyZxc3YmUnd4J3J4IV4mUiFeIV8oayFffiZSIWE5VSFZZlNkUV5QaVchYGAhYnBPWCRrWFomUlpdJGtdXiZSXnAka3BxJlJxciRrcnMmcXN2JGt2dylSd3gncnh9JGt9IU84dSFPIVA4dSFQIVEmUiFRIVs4dSFbIV04dSFdIV4kayFeIV8oayFfIWEmUiFhIWMkayFjIX04dSF9I1IkayNSI1M4dSNTI1QkayNUI284dSNvJGYkayRmJGcmUiRnJH0kayR9JU84dSVPJVckayVXJW84dSVvJXAkayVwJmE4dSZhJmIkayZiMXA4dTFwNFU4dTRVNGQ4dTRkNGUkazRlJElTOHUkSVMkSWAkayRJYCRJYjh1JEliJEplJGskSmUkSmc4dSRKZyRLaCRrJEtoJSN0OHUlI3QmL3gkayYveCZFdDh1JkV0JkZWJGsmRlY7J1M4dTsnUzs6ajx0OzpqPyZyJGs/JnI/QWg4dT9BaD9CWSRrP0JZP01uOHU/TW5+JGshYT1QZV5QaVchYGAhYnBPWCRrWFomUlpdJGtdXiZSXnAka3BxJlJxciRrcnMmcXN2JGt2dylSd3gncnghUCRrIVAhUSZSIVEhXiRrIV4hXyhrIV8hYSZSIWEkZiRrJGYkZyZSJGc7PWAkazs9YDwlbDh1PCVsfiRrIVI+aVchYGAhYnBPcShrcXI/UnJzJ2dzdihrd3goXXghYShrIWEhYktqIWJ+KGshUj9ZWiFgYCFicE9yKGtycydnc3Yoa3d4KF14fShrfSFPP3shTyFmKGshZiFnQVIhZyNXKGsjVyNYR3ojWH4oayFSQFNWIWBgIWJwT3Ioa3JzJ2dzdihrd3goXXh9KGt9IU9AaSFPfihrIVJAclQhYGAhYnAhY1BPcihrcnMnZ3N2KGt3eChdeH4oayFSQVlWIWBgIWJwT3Ioa3JzJ2dzdihrd3goXXghcShrIXEhckFvIXJ+KGshUkF2ViFgYCFicE9yKGtycydnc3Yoa3d4KF14IWUoayFlIWZCXSFmfihrIVJCZFYhYGAhYnBPcihrcnMnZ3N2KGt3eChdeCF2KGshdiF3Qnkhd34oayFSQ1FWIWBgIWJwT3Ioa3JzJ2dzdihrd3goXXgheyhrIXshfENnIXx+KGshUkNuViFgYCFicE9yKGtycydnc3Yoa3d4KF14IXIoayFyIXNEVCFzfihrIVJEW1YhYGAhYnBPcihrcnMnZ3N2KGt3eChdeCFnKGshZyFoRHEhaH4oayFSRHhXIWBgIWJwT3JEcXJzRWJzdkRxdndFdnd4RmZ4IWBEcSFgIWFHYiFhfkRxcUVnVCFicE92RWJ2eEV2eCFgRWIhYCFhRlghYX5FYlBFeVJPIWBFdiFgIWFGUyFhfkV2UEZYT3pQcUZgUSFicHpQT3YnZ3h+J2dhRmtWIWBgT3JGZnJzRXZzdkZmdndFdnchYEZmIWAhYUdRIWF+RmZhR1hSIWBgelBPcihdc3YoXXd+KF0hUkdrVCFgYCFicHpQT3Ioa3JzJ2dzdihrd3goXXh+KGshUkhSViFgYCFicE9yKGtycydnc3Yoa3d4KF14I2MoayNjI2RIaCNkfihrIVJIb1YhYGAhYnBPcihrcnMnZ3N2KGt3eChdeCNWKGsjViNXSVUjV34oayFSSV1WIWBgIWJwT3Ioa3JzJ2dzdihrd3goXXgjaChrI2gjaUlyI2l+KGshUkl5ViFgYCFicE9yKGtycydnc3Yoa3d4KF14I20oayNtI25KYCNufihrIVJKZ1YhYGAhYnBPcihrcnMnZ3N2KGt3eChdeCNkKGsjZCNlSnwjZX4oayFSS1RWIWBgIWJwT3Ioa3JzJ2dzdihrd3goXXgjWChrI1gjWURxI1l+KGshUktxVyFgYCFicE9yS2pyc0xac3ZLanZ3TG93eE5QeCFhS2ohYSFiISBnIWJ+S2pxTGBUIWJwT3ZMWnZ4TG94IWFMWiFhIWJNXiFifkxaUExyUk8hYUxvIWEhYkx7IWJ+TG9QTU9STyFgTG8hYCFhTVghYX5Mb1BNXk93UHFNY1QhYnBPdkxadnhMb3ghYExaIWAhYU1yIWF+TFpxTXlRIWJwd1BPdidneH4nZ2FOVVYhYGBPck5QcnNMb3N2TlB2d0xvdyFhTlAhYSFiTmshYn5OUGFOcFYhYGBPck5QcnNMb3N2TlB2d0xvdyFgTlAhYCFhISBWIWF+TlBhISBeUiFgYHdQT3IoXXN2KF13fihdIVIhIG5XIWBgIWJwT3JLanJzTFpzdktqdndMb3d4TlB4IWBLaiFgIWEhIVchYX5LaiFSISFhVCFgYCFicHdQT3Ioa3JzJ2dzdihrd3goXXh+KGshViEhe1ZnU15QIWBgIWJwT3ImUnJzJnFzdiZSd3gncnghXiZSIV4hXyhrIV9+JlIiLCB0b2tlbml6ZXJzOiBbc2UxMiwgb2U3LCBrZTExLCByZTE0LCBhZTEwLCAwLCAxLCAyLCAzLCA0LCA1XSwgdG9wUnVsZXM6IHsgRG9jdW1lbnQ6IFswLCAxM10gfSwgZGlhbGVjdHM6IHsgbm9NYXRjaDogMCB9LCB0b2tlblByZWM6IDQ3NiB9KTsKICBmdW5jdGlvbiB1ZTEzKGU1LCBPMTUpIHsKICAgIGxldCBzOCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yIChsZXQgcjMgb2YgZTUuZmlyc3RDaGlsZC5nZXRDaGlsZHJlbigiQXR0cmlidXRlIikpIHsKICAgICAgbGV0IHQ0ID0gcjMuZ2V0Q2hpbGQoIkF0dHJpYnV0ZU5hbWUiKSwgYTQgPSByMy5nZXRDaGlsZCgiQXR0cmlidXRlVmFsdWUiKSB8fCByMy5nZXRDaGlsZCgiVW5xdW90ZWRBdHRyaWJ1dGVWYWx1ZSIpOwogICAgICB0NCAmJiAoczhbTzE1LnJlYWQodDQuZnJvbSwgdDQudG8pXSA9IGE0ID8gYTQubmFtZSA9PSAiQXR0cmlidXRlVmFsdWUiID8gTzE1LnJlYWQoYTQuZnJvbSArIDEsIGE0LnRvIC0gMSkgOiBPMTUucmVhZChhNC5mcm9tLCBhNC50bykgOiAiIik7CiAgICB9CiAgICByZXR1cm4gczg7CiAgfQogIGZ1bmN0aW9uIFIxNihlNSwgTzE1LCBzOCkgewogICAgbGV0IHIzOwogICAgZm9yIChsZXQgdDQgb2YgczgpCiAgICAgIGlmICghdDQuYXR0cnMgfHwgdDQuYXR0cnMocjMgfHwgKHIzID0gdWUxMyhlNS5ub2RlLnBhcmVudCwgTzE1KSkpKQogICAgICAgIHJldHVybiB7IHBhcnNlcjogdDQucGFyc2VyIH07CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24geGUxMChlNSkgewogICAgbGV0IE8xNSA9IFtdLCBzOCA9IFtdLCByMyA9IFtdOwogICAgZm9yIChsZXQgdDQgb2YgZTUpIHsKICAgICAgbGV0IGE0ID0gdDQudGFnID09ICJzY3JpcHQiID8gTzE1IDogdDQudGFnID09ICJzdHlsZSIgPyBzOCA6IHQ0LnRhZyA9PSAidGV4dGFyZWEiID8gcjMgOiBudWxsOwogICAgICBpZiAoIWE0KQogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJPbmx5IHNjcmlwdCwgc3R5bGUsIGFuZCB0ZXh0YXJlYSB0YWdzIGNhbiBob3N0IG5lc3RlZCBwYXJzZXJzIik7CiAgICAgIGE0LnB1c2godDQpOwogICAgfQogICAgcmV0dXJuIE5lMygodDQsIGE0KSA9PiB7CiAgICAgIGxldCBrMTggPSB0NC50eXBlLmlkOwogICAgICByZXR1cm4gazE4ID09IEExMyA/IFIxNih0NCwgYTQsIE8xNSkgOiBrMTggPT0gSTE4ID8gUjE2KHQ0LCBhNCwgczgpIDogazE4ID09IFUxNiA/IFIxNih0NCwgYTQsIHIzKSA6IG51bGw7CiAgICB9KTsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9jc3NAMS4wLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5c1lXNW5kV0ZuWlN4QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzTEVCc1pYcGxjaTlqYjIxdGIyNHNRR3hsZW1WeUwyaHBaMmhzYVdkb2RDeEFiR1Y2WlhJdmJXRnlhMlJ2ZDI0L2Rlbm8vY3NzLmpzCiAgdmFyIGwgPSA5MzsKICB2YXIgejE4ID0gMTsKICB2YXIgUzE0ID0gOTQ7CiAgdmFyIHAxMSA9IDk1OwogIHZhciBuNiA9IDI7CiAgdmFyIHMzID0gWzksIDEwLCAxMSwgMTIsIDEzLCAzMiwgMTMzLCAxNjAsIDU3NjAsIDgxOTIsIDgxOTMsIDgxOTQsIDgxOTUsIDgxOTYsIDgxOTcsIDgxOTgsIDgxOTksIDgyMDAsIDgyMDEsIDgyMDIsIDgyMzIsIDgyMzMsIDgyMzksIDgyODcsIDEyMjg4XTsKICB2YXIgWDE2ID0gNTg7CiAgdmFyIGQ2ID0gNDA7CiAgdmFyIFcxMCA9IDk1OwogIHZhciBtMTYgPSA5MTsKICB2YXIgbyA9IDQ1OwogIHZhciBSMTcgPSA0NjsKICB2YXIgZjcgPSAzNTsKICB2YXIgZzYgPSAzNzsKICBmdW5jdGlvbiByMihRMTcpIHsKICAgIHJldHVybiBRMTcgPj0gNjUgJiYgUTE3IDw9IDkwIHx8IFExNyA+PSA5NyAmJiBRMTcgPD0gMTIyIHx8IFExNyA+PSAxNjE7CiAgfQogIGZ1bmN0aW9uIGIxNihRMTcpIHsKICAgIHJldHVybiBRMTcgPj0gNDggJiYgUTE3IDw9IDU3OwogIH0KICB2YXIgaDMgPSBuZXcgTDEzKChRMTcsIGU1KSA9PiB7CiAgICBmb3IgKGxldCB0NCA9IGZhbHNlLCBpNCA9IDAsICQyMSA9IDA7IDsgJDIxKyspIHsKICAgICAgbGV0IHsgbmV4dDogYTQgfSA9IFExNzsKICAgICAgaWYgKHIyKGE0KSB8fCBhNCA9PSBvIHx8IGE0ID09IFcxMCB8fCB0NCAmJiBiMTYoYTQpKQogICAgICAgICF0NCAmJiAoYTQgIT0gbyB8fCAkMjEgPiAwKSAmJiAodDQgPSB0cnVlKSwgaTQgPT09ICQyMSAmJiBhNCA9PSBvICYmIGk0KyssIFExNy5hZHZhbmNlKCk7CiAgICAgIGVsc2UgewogICAgICAgIHQ0ICYmIFExNy5hY2NlcHRUb2tlbihhNCA9PSBkNiA/IFMxNCA6IGk0ID09IDIgJiYgZTUuY2FuU2hpZnQobjYpID8gbjYgOiBwMTEpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfSk7CiAgdmFyIFQyMCA9IG5ldyBMMTMoKFExNykgPT4gewogICAgaWYgKHMzLmluY2x1ZGVzKFExNy5wZWVrKC0xKSkpIHsKICAgICAgbGV0IHsgbmV4dDogZTUgfSA9IFExNzsKICAgICAgKHIyKGU1KSB8fCBlNSA9PSBXMTAgfHwgZTUgPT0gZjcgfHwgZTUgPT0gUjE3IHx8IGU1ID09IG0xNiB8fCBlNSA9PSBYMTYgfHwgZTUgPT0gbykgJiYgUTE3LmFjY2VwdFRva2VuKGwpOwogICAgfQogIH0pOwogIHZhciBVMTcgPSBuZXcgTDEzKChRMTcpID0+IHsKICAgIGlmICghczMuaW5jbHVkZXMoUTE3LnBlZWsoLTEpKSkgewogICAgICBsZXQgeyBuZXh0OiBlNSB9ID0gUTE3OwogICAgICBpZiAoZTUgPT0gZzYgJiYgKFExNy5hZHZhbmNlKCksIFExNy5hY2NlcHRUb2tlbih6MTgpKSwgcjIoZTUpKSB7CiAgICAgICAgZG8KICAgICAgICAgIFExNy5hZHZhbmNlKCk7CiAgICAgICAgd2hpbGUgKHIyKFExNy5uZXh0KSk7CiAgICAgICAgUTE3LmFjY2VwdFRva2VuKHoxOCk7CiAgICAgIH0KICAgIH0KICB9KTsKICB2YXIgWjEzID0gJDEyKHsgImltcG9ydCBjaGFyc2V0IG5hbWVzcGFjZSBrZXlmcmFtZXMiOiBuNS5kZWZpbml0aW9uS2V5d29yZCwgIm1lZGlhIHN1cHBvcnRzIjogbjUuY29udHJvbEtleXdvcmQsICJmcm9tIHRvIHNlbGVjdG9yIjogbjUua2V5d29yZCwgTmFtZXNwYWNlTmFtZTogbjUubmFtZXNwYWNlLCBLZXlmcmFtZU5hbWU6IG41LmxhYmVsTmFtZSwgVGFnTmFtZTogbjUudGFnTmFtZSwgQ2xhc3NOYW1lOiBuNS5jbGFzc05hbWUsIFBzZXVkb0NsYXNzTmFtZTogbjUuY29uc3RhbnQobjUuY2xhc3NOYW1lKSwgSWROYW1lOiBuNS5sYWJlbE5hbWUsICJGZWF0dXJlTmFtZSBQcm9wZXJ0eU5hbWUiOiBuNS5wcm9wZXJ0eU5hbWUsIEF0dHJpYnV0ZU5hbWU6IG41LmF0dHJpYnV0ZU5hbWUsIE51bWJlckxpdGVyYWw6IG41Lm51bWJlciwgS2V5d29yZFF1ZXJ5OiBuNS5rZXl3b3JkLCBVbmFyeVF1ZXJ5T3A6IG41Lm9wZXJhdG9yS2V5d29yZCwgIkNhbGxUYWcgVmFsdWVOYW1lIjogbjUuYXRvbSwgVmFyaWFibGVOYW1lOiBuNS52YXJpYWJsZU5hbWUsIENhbGxlZTogbjUub3BlcmF0b3JLZXl3b3JkLCBVbml0OiBuNS51bml0LCAiVW5pdmVyc2FsU2VsZWN0b3IgTmVzdGluZ1NlbGVjdG9yIjogbjUuZGVmaW5pdGlvbk9wZXJhdG9yLCBBdEtleXdvcmQ6IG41LmtleXdvcmQsIE1hdGNoT3A6IG41LmNvbXBhcmVPcGVyYXRvciwgIkNoaWxkT3AgU2libGluZ09wLCBMb2dpY09wIjogbjUubG9naWNPcGVyYXRvciwgQmluT3A6IG41LmFyaXRobWV0aWNPcGVyYXRvciwgSW1wb3J0YW50OiBuNS5tb2RpZmllciwgQ29tbWVudDogbjUuYmxvY2tDb21tZW50LCBQYXJlbnRoZXNpemVkQ29udGVudDogbjUuc3BlY2lhbChuNS5uYW1lKSwgQ29sb3JMaXRlcmFsOiBuNS5jb2xvciwgU3RyaW5nTGl0ZXJhbDogbjUuc3RyaW5nLCAiOiI6IG41LnB1bmN0dWF0aW9uLCAiUHNldWRvT3AgIyI6IG41LmRlcmVmT3BlcmF0b3IsICI7ICwiOiBuNS5zZXBhcmF0b3IsICIoICkiOiBuNS5wYXJlbiwgIlsgXSI6IG41LnNxdWFyZUJyYWNrZXQsICJ7IH0iOiBuNS5icmFjZSB9KTsKICB2YXIgXzE3ID0geyBfX3Byb3RvX186IG51bGwsIGxhbmc6IDMyLCAibnRoLWNoaWxkIjogMzIsICJudGgtbGFzdC1jaGlsZCI6IDMyLCAibnRoLW9mLXR5cGUiOiAzMiwgZGlyOiAzMiwgdXJsOiA2MCwgInVybC1wcmVmaXgiOiA2MCwgZG9tYWluOiA2MCwgcmVnZXhwOiA2MCwgc2VsZWN0b3I6IDEzNCB9OwogIHZhciBrOSA9IHsgX19wcm90b19fOiBudWxsLCAiQGltcG9ydCI6IDExNCwgIkBtZWRpYSI6IDEzOCwgIkBjaGFyc2V0IjogMTQyLCAiQG5hbWVzcGFjZSI6IDE0NiwgIkBrZXlmcmFtZXMiOiAxNTIsICJAc3VwcG9ydHMiOiAxNjQgfTsKICB2YXIgdTcgPSB7IF9fcHJvdG9fXzogbnVsbCwgbm90OiAxMjgsIG9ubHk6IDEyOCwgZnJvbTogMTU4LCB0bzogMTYwIH07CiAgdmFyIEcxMyA9IFMxMy5kZXNlcmlhbGl6ZSh7IHZlcnNpb246IDE0LCBzdGF0ZXM6ICI3V09ZUVtPT09PUVAnI0NkJyNDZE9PUVAnI0NjJyNDY08hWlFbTycjQ2ZPIX1RWE8nI0NhTyNVUVtPJyNDaE8jYVFbTycjRFBPI2ZRW08nI0RUT09RUCcjRWMnI0VjTyNrUWRPJyNEZU8kVlFbTycjRHJPI2tRZE8nI0R0TyRoUVtPJyNEdk8kc1FbTycjRHlPJHhRW08nI0VQTyVXUVtPJyNFUk9PUVMnI0ViJyNFYk9PUVMnI0VTJyNFU1FZUVtPT09PUVAnI0NnJyNDZ09PUVAsNTlRLDU5UU8hWlFbTyw1OVFPJV9RW08nI0VWTyV5UVdPLDU4e08mUlFbTyw1OVNPI2FRW08sNTlrTyNmUVtPLDU5b08lX1FbTyw1OXNPJV9RW08sNTl1TyVfUVtPLDU5dk8nYlFbTycjRGBPT1FTLDU4eyw1OHtPT1FQJyNDaycjQ2tPT1FPJyNDfScjQ31PT1FQLDU5Uyw1OVNPJ2lRV08sNTlTTyduUVdPLDU5U09PUVAnI0RSJyNEUk9PUVAsNTlrLDU5a09PUU8nI0RWJyNEVk8nc1FgTyw1OW9PT1FTJyNDcCcjQ3BPI2tRZE8nI0NxTyd7UXZPJyNDc08pVlF0Tyw1OlBPT1FPJyNDeCcjQ3hPJ2lRV08nI0N3TylrUVdPJyNDeU9PUVMnI0VmJyNFZk9PUU8nI0RoJyNEaE8pcFFbTycjRG9PKk9RV08nI0VpTyR4UVtPJyNEbU8qXlFXTycjRHBPT1FPJyNFaicjRWpPJXxRV08sNTpeTypjUXBPLDU6YE9PUVMnI0R4JyNEeE8qa1FXTyw1OmJPKnBRW08sNTpiT09RTycjRHsnI0R7Typ4UVdPLDU6ZU8qfVFXTyw1OmtPK1ZRV08sNTptT09RUy1FOFEtRThRT09RUDFHLmwxRy5sTyt5UVhPLDU6cU9PUU8tRThULUU4VE9PUVMxRy5nMUcuZ09PUVAxRy5uMUcubk8naVFXTzFHLm5PJ25RV08xRy5uT09RUDFHL1YxRy9WTyxXUWBPMUcvWk8scVFYTzFHL19PLVhRWE8xRy9hTy1vUVhPMUcvYk8uVlFYTycjQ2RPLnpRV08nI0RhT09RUyw1OXosNTl6Ty9QUVdPLDU5ek8vWFFbTyw1OXpPL2BRZE8nI0NvTy9nUVtPJyNET09PUVAxRy9aMUcvWk8ja1FkTzFHL1pPL25RcE8sNTldT09RUyw1OV8sNTlfTyNrUWRPLDU5YU8vdlFXTzFHL2tPT1FTLDU5Yyw1OWNPL3tRIWJPLDU5ZU8wVFFXTycjRGhPMGBRV08sNTpUTzBlUVdPLDU6Wk8keFFbTyw1OlZPJHhRW08nI0VZTzBtUVdPLDU7VE8weFFXTyw1OlhPJV9RW08sNTpbT09RUzFHL3gxRy94T09RUzFHL3oxRy96T09RUzFHL3wxRy98TzFaUVdPMUcvfE8xYFFkTycjRHxPT1FTMUcwUDFHMFBPT1FTMUcwVjFHMFZPT1FTMUcwWDFHMFhPT1FQNyskWTcrJFlPT1FQNyskdTcrJHVPI2tRZE83KyR1TyNrUWRPLDU5e08xblFbTycjRVhPMXhRV08xRy9mT09RUzFHL2YxRy9mTzF4UVdPMUcvZk8yUVF0TycjRVRPMnVRZE8nI0VlTzNQUVdPLDU5Wk8zVVFYTycjRWhPM11RV08sNTlqTzNiUXBPNyskdU9PUVMxRy53MUcud09PUVMxRy57MUcue09PUVM3KyVWNyslVk8zalFXTzFHL1BPI2tRZE8xRy9vT09RTzFHL3UxRy91T09RTzFHL3ExRy9xTzNvUVdPLDU6dE9PUU8tRThXLUU4V08zfVFYTzFHL3ZPT1FTNyslaDcrJWhPNFVRWU8nI0NzTyV8UVdPJyNFWk80XlFkTyw1OmhPT1FTLDU6aCw1OmhPNGxRcE88PEhhTzR0UXRPMUcvZ09PUU8sNTpzLDU6c081WFFbTyw1OnNPT1FPLUU4Vi1FOFZPT1FTNyslUTcrJVFPNWNRV083KyVRT09RUy1FOFItRThSTyNrUWRPJyNFVU81a1FXTyw1O1BPT1FUMUcudTFHLnVPNXNRV08sNTtTT09RUDFHL1UxRy9VT09RUDw8SGE8PEhhT09RUzcrJGs3KyRrTzV7UWRPNyslWk9PUU83KyViNyslYk9PUVMsNTp1LDU6dU9PUVMtRThYLUU4WE9PUVMxRzBTMUcwU09PUVBBTj17QU49e082U1F0TycjRVdPI2tRZE8nI0VXTzZ9UWRPNyslUk9PUU83KyVSNyslUk9PUU8xRzBfMUcwX09PUVM8PEhsPDxIbE83X1FkTyw1OnBPT1FPLUU4Uy1FOFNPT1FPPDxIdTw8SHVPN2lRdE8sNTpyT09RUy1FOFUtRThVT09RTzw8SG08PEhtIiwgc3RhdGVEYXRhOiAiOGp+TyNUT1NST1N+T1VXT1hXT11UT15UT3RVT3hWTyFZX08hWlhPIWdZTyFpWk8ha1tPIW5dTyF0Xk8jUlBPI1dST35PI1JjT35PXWhPXmhPcGZPdGlPeGpPfGtPIVBtTyNQbE8jV2VPfk8hUm5PflAhYE9gc08jUXFPI1JwT35PI1J1T35PI1J3T35PUSFRT2J6T2YhUU9oIVFPbiFQTyNRfU8jUnlPI1p7T35PYiFTTyFiIVVPIWUhVk8jUiFSTyFSI11Qfk9oIVtPbiFQTyNSIVpPfk8jUiFeT35PYiFTTyFiIVVPIWUhVk8jUiFST35PIVcjXVB+UCRWT1VXT1hXT11UT15UT3RVT3hWTyNSUE8jV1JPfk9wZk8hUm5Pfk9gIWhPI1FxTyNScE9+T1EhcE9VV09YV09dVE9eVE90VU94Vk8hWV9PIVpYTyFnWU8haVpPIWtbTyFuXU8hdF5PI1Ihb08jV1JPfk8hUSFxT35QJl5PYiF0T35PYiF1T35PdiF2T3ohd09+T1AheU9iZ1hqZ1ghV2dYIWJnWCFlZ1gjUmdYYWdYUWdYZmdYaGdYbmdYcGdYI1FnWCNaZ1h2Z1ghUWdYIVZnWH5PYiFTT2ohek8hYiFVTyFlIVZPI1IhUk8hVyNdUH5PYiF9T35PYiFTTyFiIVVPIWUhVk8jUiNPT35PcCNTTyFgI1JPIVIjXVghVyNdWH5PYiNWT35PaiF6TyFXI1hPfk8hVyNZT35PaCNaT24hUE9+TyFSI1tPfk8hUm5PIWAjUk9+TyFSbk8hVyNfT35PXWhPXmhPdGlPeGpPfGtPIVBtTyNQbE8jV2VPfk9wIXlhIVIheWFhIXlhflArX092I2FPeiNiT35PXWhPXmhPdGlPeGpPI1dlT35PcHtpfHtpIVB7aSFSe2kjUHtpYXtpflAsYE9wfWl8fWkhUH1pIVJ9aSNQfWlhfWl+UCxgT3AhT2l8IU9pIVAhT2khUiFPaSNQIU9pYSFPaX5QLGBPXVdYXSFVWF5XWHBXWHRXWHhXWHxXWCFQV1ghUldYI1BXWCNXV1h+T10jY09+TyFRI2ZPIVcjZE9+TyFRI2ZPflAmXk9hI1hQflAja09hI1tQflAlX09hI25PaiF6T35PIVcjcE9+T2gjcU9vI3FPfk9dIV5YYSFbWCFgIVtYfk9dI3JPfk9hI3NPIWAjUk9+T3AjU08hUiNdYSFXI11hfk8hYCNST3AhYWEhUiFhYSFXIWFhYSFhYX5PIVcjeE9+TyFRI3xPIXEjek8hciN6TyNaI3lPfk8hUSF7WCFXIXtYflAmXk8hUSRTTyFXI2RPfk9qIXpPUSF3WGEhd1hiIXdYZiF3WGghd1huIXdYcCF3WCNRIXdYI1Ihd1gjWiF3WH5PcCRWT2EjWFh+UCNrT2EkWE9+T2EjW1h+UCFgT2EkWk9+T2ohek92JFtPfk9hJF1Pfk8hYCNST3AhfGEhUiF8YSFXIXxhfk9hJF9PflArX09QIXlPIVJnWH5PIVEkYk8hcSN6TyFyI3pPI1ojeU9+T2ohek92JGNPfk9qIXpPcCRlTyFWJGdPIVEhVGkhVyFUaX5QI2tPIVEhe2EhVyF7YX5QJl5PIVEkaU8hVyNkT35PcCRWT2EjWGF+T3BmT2EjW2F+T2EkbE9+UCNrT2ohek9RIXpYYiF6WGYhelhoIXpYbiF6WHAhelghUSF6WCFWIXpYIVchelgjUSF6WCNSIXpYI1ohelh+T3AkZU8hViRvTyFRIVRxIVchVHF+UCNrT2EheGFwIXhhflAja09qIXpPUSF6YWIhemFmIXphaCF6YW4hemFwIXphIVEhemEhViF6YSFXIXphI1EhemEjUiF6YSNaIXphfk9vI1pqIVBqfiIsIGdvdG86ICIsTyNfUFBQUFAjYFAjaCN2UCNoJFUjaFBQJFtQUFAkYiRrJGtQJH1QJGtQJGslZSV3UFBQJmEmZyNoUCZtUCNoUCZzUCNoUCNoI2hQUFAmeSddJ2lQUCNgUFAnbydvJ3knb1Anb1AnbydvUCNgUCNgUCNgUCd8I2BQKFAoU1BQI2BQI2AoVihlKHMoeSlUKVopZSlrUFBQUFBQKXEpeVAqZSpoUCteK2Eral1gT2JuIXMjZCRRaVdPYmZrbG1uIXMhdSNWI2QkUWlRT2Jma2xtbiFzIXUjViNkJFFRZFJSIWNlUXJUUiFnaFEhZ3NRIXwhT1IjYCFocSFRWFp6IXQhdyF6I2IjYyNpI3IkTyRWJF4kZSRmJGpwIVFYWnohdCF3IXojYiNjI2kjciRPJFYkXiRlJGYkalQjeiNbI3txIU9YWnohdCF3IXojYiNjI2kjciRPJFYkXiRlJGYkanAhUVhaeiF0IXcheiNiI2MjaSNyJE8kViReJGUkZiRqUSFbW1IjWiFdUXRUUiFpaFEhZ3RSI2AhaVF2VVIhamlReFZSIWtqUW9TUSFmZ1EjVyFYUSNeIWBRI18hYVIkYCN6USFyblEjZyFzUSRQI2RSJGgkUVghcG4hcyNkJFFhIVdZXl98IVMhVSNSI1NSI1AhU1IhXVtSIV9dUiNdIV9RYk9VIWJiIXMkUVEhc25SJFEjZFEjaSF0VSRVI2kkXiRqUSReI3JSJGokVlEkVyNpUiRrJFdRZ1NTIWVnJFlSJFkja1EkZiRPUiRuJGZRI2UhclMkUiNlJFRSJFQjZ1EjVCFUUiN2I1RRI3sjW1IkYSN7XWFPYm4hcyNkJFFbU09ibiFzI2QkUVEhZGZRIWxrUSFtbFEhbm1RI2shdVIjdyNWUiNqIXRRfFhRIVlaUSF4elsjaCF0I2kjciRWJF4kalEjbSF3USNvIXpRI30jYlEkTyNjUyRkJE8kZlIkbSRlUiNsIXVRIVhZUSFhX1Ihe3xVIVRZX3xRIWBeUSNRIVNRI1UhVVEjdCNSUiN1I1MiLCBub2RlTmFtZXM6ICJcdTI2QTAgVW5pdCBWYXJpYWJsZU5hbWUgQ29tbWVudCBTdHlsZVNoZWV0IFJ1bGVTZXQgVW5pdmVyc2FsU2VsZWN0b3IgVGFnU2VsZWN0b3IgVGFnTmFtZSBOZXN0aW5nU2VsZWN0b3IgQ2xhc3NTZWxlY3RvciBDbGFzc05hbWUgUHNldWRvQ2xhc3NTZWxlY3RvciA6IDo6IFBzZXVkb0NsYXNzTmFtZSBQc2V1ZG9DbGFzc05hbWUgKSAoIEFyZ0xpc3QgVmFsdWVOYW1lIFBhcmVudGhlc2l6ZWRWYWx1ZSBDb2xvckxpdGVyYWwgTnVtYmVyTGl0ZXJhbCBTdHJpbmdMaXRlcmFsIEJpbmFyeUV4cHJlc3Npb24gQmluT3AgQ2FsbEV4cHJlc3Npb24gQ2FsbGVlIENhbGxMaXRlcmFsIENhbGxUYWcgUGFyZW50aGVzaXplZENvbnRlbnQgLCBQc2V1ZG9DbGFzc05hbWUgQXJnTGlzdCBJZFNlbGVjdG9yICMgSWROYW1lIF0gQXR0cmlidXRlU2VsZWN0b3IgWyBBdHRyaWJ1dGVOYW1lIE1hdGNoT3AgQ2hpbGRTZWxlY3RvciBDaGlsZE9wIERlc2NlbmRhbnRTZWxlY3RvciBTaWJsaW5nU2VsZWN0b3IgU2libGluZ09wIH0geyBCbG9jayBEZWNsYXJhdGlvbiBQcm9wZXJ0eU5hbWUgSW1wb3J0YW50IDsgSW1wb3J0U3RhdGVtZW50IEF0S2V5d29yZCBpbXBvcnQgS2V5d29yZFF1ZXJ5IEZlYXR1cmVRdWVyeSBGZWF0dXJlTmFtZSBCaW5hcnlRdWVyeSBMb2dpY09wIFVuYXJ5UXVlcnkgVW5hcnlRdWVyeU9wIFBhcmVudGhlc2l6ZWRRdWVyeSBTZWxlY3RvclF1ZXJ5IHNlbGVjdG9yIE1lZGlhU3RhdGVtZW50IG1lZGlhIENoYXJzZXRTdGF0ZW1lbnQgY2hhcnNldCBOYW1lc3BhY2VTdGF0ZW1lbnQgbmFtZXNwYWNlIE5hbWVzcGFjZU5hbWUgS2V5ZnJhbWVzU3RhdGVtZW50IGtleWZyYW1lcyBLZXlmcmFtZU5hbWUgS2V5ZnJhbWVMaXN0IGZyb20gdG8gU3VwcG9ydHNTdGF0ZW1lbnQgc3VwcG9ydHMgQXRSdWxlIiwgbWF4VGVybTogMTA2LCBub2RlUHJvcHM6IFtbIm9wZW5lZEJ5IiwgMTcsICIoIiwgNDgsICJ7Il0sIFsiY2xvc2VkQnkiLCAxOCwgIikiLCA0OSwgIn0iXV0sIHByb3BTb3VyY2VzOiBbWjEzXSwgc2tpcHBlZE5vZGVzOiBbMCwgM10sIHJlcGVhdE5vZGVDb3VudDogOCwgdG9rZW5EYXRhOiAiQXl+UiFbT1gkd1heJV1ecCR3cHElXXFyKGNycyt9c3Qsb3R1MlV1diR3dncycnd4Mn14eTNqeXozdXp7M3p7fDRffH04VX0hTzhhIU8hUDh4IVAhUTlaIVEhWztlIVshXTxZIV0hXjx4IV4hXyR3IV8hYD1UIWAhYT1gIWEhYiR3IWIhYz5PIWMhfSR3IX0jTz9bI08jUCR3I1AjUT9nI1EjUjJVI1IjVCR3I1QjVT9yI1UjYyR3I2MjZEBxI2QjbyR3I28jcEFRI3AjcTJVI3EjckFdI3Ijc0FoI3MjeSR3I3kjeiVdI3okZiR3JGYkZyVdJGcjQlkkdyNCWSNCWiVdI0JaJElTJHckSVMkSV8lXSRJXyRJfCR3JEl8JEpPJV0kSk8kSlQkdyRKVCRKVSVdJEpVJEtWJHckS1YkS1clXSRLVyZGVSR3JkZVJkZWJV0mRlZ+JHdXJHpRT3klUXp+JVFXJVZRb1dPeSVRen4lUX4lYmYjVH5PWCVRWF4mdl5wJVFwcSZ2cXklUXojeSVRI3kjeiZ2I3okZiVRJGYkZyZ2JGcjQlklUSNCWSNCWiZ2I0JaJElTJVEkSVMkSV8mdiRJXyRJfCVRJEl8JEpPJnYkSk8kSlQlUSRKVCRKVSZ2JEpVJEtWJVEkS1YkS1cmdiRLVyZGVSVRJkZVJkZWJnYmRlZ+JVF+Jn1mI1R+b1dPWCVRWF4mdl5wJVFwcSZ2cXklUXojeSVRI3kjeiZ2I3okZiVRJGYkZyZ2JGcjQlklUSNCWSNCWiZ2I0JaJElTJVEkSVMkSV8mdiRJXyRJfCVRJEl8JEpPJnYkSk8kSlQlUSRKVCRKVSZ2JEpVJEtWJVEkS1YkS1cmdiRLVyZGVSVRJkZVJkZWJnYmRlZ+JVFeKGZTT3klUXojXSVRI10jXihyI15+JVFeKHdTb1dPeSVReiNhJVEjYSNiKVQjYn4lUV4pWVNvV095JVF6I2QlUSNkI2UpZiNlfiVRXilrU29XT3klUXojYyVRI2MjZCl3I2R+JVFeKXxTb1dPeSVReiNmJVEjZiNnKlkjZ34lUV4qX1NvV095JVF6I2glUSNoI2kqayNpfiVRXipwU29XT3klUXojVCVRI1QjVSp8I1V+JVFeK1JTb1dPeSVReiNiJVEjYiNjK18jY34lUV4rZFNvV095JVF6I2glUSNoI2krcCNpfiVRXit3USFWVW9XT3klUXp+JVF+LFFVT1krfVpyK31ycyxkcyNPK30jTyNQLGkjUH4rfX4saU9ofn4sbFBPfit9Xyx0V3RQT3klUXohUSVRIVEhWy1eIVshYyVRIWMhaS1eIWkjVCVRI1QjWi1eI1p+JVFeLWNXb1dPeSVReiFRJVEhUSFbLXshWyFjJVEhYyFpLXshaSNUJVEjVCNaLXsjWn4lUV4uUVdvV095JVF6IVElUSFRIVsuaiFbIWMlUSFjIWkuaiFpI1QlUSNUI1ouaiNafiVRXi5xV2ZVb1dPeSVReiFRJVEhUSFbL1ohWyFjJVEhYyFpL1ohaSNUJVEjVCNaL1ojWn4lUV4vYldmVW9XT3klUXohUSVRIVEhWy96IVshYyVRIWMhaS96IWkjVCVRI1QjWi96I1p+JVFeMFBXb1dPeSVReiFRJVEhUSFbMGkhWyFjJVEhYyFpMGkhaSNUJVEjVCNaMGkjWn4lUV4wcFdmVW9XT3klUXohUSVRIVEhWzFZIVshYyVRIWMhaTFZIWkjVCVRI1QjWjFZI1p+JVFeMV9Xb1dPeSVReiFRJVEhUSFbMXchWyFjJVEhYyFpMXchaSNUJVEjVCNaMXcjWn4lUV4yT1FmVW9XT3klUXp+JVFZMlhTT3klUXohXyVRIV8hYDJlIWB+JVFZMmxRelFvV095JVF6fiVRWDJ3UVhQT3klUXp+JVF+M1FVT1kyfVp3Mn13eCxkeCNPMn0jTyNQM2QjUH4yfX4zZ1BPfjJ9XzNvUWJWT3klUXp+JVF+M3pPYX5fNFJTVVBqU095JVF6IV8lUSFfIWAyZSFgfiVRXzRmVWpTIVBQT3klUXohTyVRIU8hUDR4IVAhUSVRIVEhWzdfIVt+JVFeNH1Tb1dPeSVReiFRJVEhUSFbNVohW34lUV41YldvVyNaVU95JVF6IVElUSFRIVs1WiFbIWclUSFnIWg1eiFoI1glUSNYI1k1eiNZfiVRXjZQV29XT3klUXp7JVF7fDZpfH0lUX0hTzZpIU8hUSVRIVEhWzZ6IVt+JVFeNm5Tb1dPeSVReiFRJVEhUSFbNnohW34lUV43UlNvVyNaVU95JVF6IVElUSFRIVs2eiFbfiVRXjdmWW9XI1pVT3klUXohTyVRIU8hUDVaIVAhUSVRIVEhWzdfIVshZyVRIWchaDV6IWgjWCVRI1gjWTV6I1l+JVFfOFpRcFZPeSVRen4lUV44ZlVqU095JVF6IU8lUSFPIVA0eCFQIVElUSFRIVs3XyFbfiVRXzh9UyNXUE95JVF6IVElUSFRIVs1WiFbfiVRfjlgUmpTT3klUXp7OWl7fiVRfjluU29XT3k5aXl6OXp6ezpve345aX45fVJPejl6ens6V3t+OXp+OlpUT3o5enp7Old7IVA5eiFQIVE6aiFRfjl6fjpvT1J+fjp0VW9XT3k5aXl6OXp6ezpveyFQOWkhUCFRO1chUX45aX47X1FvV1J+T3klUXp+JVFeO2pZI1pVT3klUXohTyVRIU8hUDVaIVAhUSVRIVEhWzdfIVshZyVRIWchaDV6IWgjWCVRI1gjWTV6I1l+JVFYPF9TXVBPeSVReiFbJVEhWyFdPGshXX4lUVg8clFeUG9XT3klUXp+JVFfPH1RIVdWT3klUXp+JVFZPVlRelFPeSVRen4lUVg9ZVN8UE95JVF6IWAlUSFgIWE9cSFhfiVRWD14UXxQb1dPeSVRen4lUVg+UlVPeSVReiFjJVEhYyF9PmUhfSNUJVEjVCNvPmUjb34lUVg+bFkhWVBvV095JVF6fSVRfSFPPmUhTyFRJVEhUSFbPmUhWyFjJVEhYyF9PmUhfSNUJVEjVCNvPmUjb34lUVg/YVF4UE95JVF6fiVRXj9sUXZVT3klUXp+JVFYP3VTT3klUXojYiVRI2IjY0BSI2N+JVFYQFdTb1dPeSVReiNXJVEjVyNYQGQjWH4lUVhAa1EhYFBvV095JVF6fiVRWEB0U095JVF6I2YlUSNmI2dAZCNnfiVRWEFWUSFSUE95JVF6fiVRX0FiUSFRVk95JVF6fiVRWkFtUyFQUE95JVF6IV8lUSFfIWAyZSFgfiVRIiwgdG9rZW5pemVyczogW1QyMCwgVTE3LCBoMywgMCwgMSwgMiwgM10sIHRvcFJ1bGVzOiB7IFN0eWxlU2hlZXQ6IFswLCA0XSB9LCBzcGVjaWFsaXplZDogW3sgdGVybTogOTQsIGdldDogKFExNykgPT4gXzE3W1ExN10gfHwgLTEgfSwgeyB0ZXJtOiA1NiwgZ2V0OiAoUTE3KSA9PiBrOVtRMTddIHx8IC0xIH0sIHsgdGVybTogOTUsIGdldDogKFExNykgPT4gdTdbUTE3XSB8fCAtMSB9XSwgdG9rZW5QcmVjOiAxMDc4IH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AY29kZW1pcnJvci9sYW5nLWNzc0A2LjAuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9sYW5nLWNzcy5qcwogIHZhciBzNCA9IG51bGw7CiAgZnVuY3Rpb24gZDcoKSB7CiAgICBpZiAoIXM0ICYmIHR5cGVvZiBkb2N1bWVudCA9PSAib2JqZWN0IiAmJiBkb2N1bWVudC5ib2R5KSB7CiAgICAgIGxldCBlNSA9IFtdOwogICAgICBmb3IgKGxldCByMyBpbiBkb2N1bWVudC5ib2R5LnN0eWxlKQogICAgICAgIC9bQS1aXXxeLXxeKGl0ZW18bGVuZ3RoKSQvLnRlc3QocjMpIHx8IGU1LnB1c2gocjMpOwogICAgICBzNCA9IGU1LnNvcnQoKS5tYXAoKHIzKSA9PiAoeyB0eXBlOiAicHJvcGVydHkiLCBsYWJlbDogcjMgfSkpOwogICAgfQogICAgcmV0dXJuIHM0IHx8IFtdOwogIH0KICB2YXIgYzExID0gWyJhY3RpdmUiLCAiYWZ0ZXIiLCAiYmVmb3JlIiwgImNoZWNrZWQiLCAiZGVmYXVsdCIsICJkaXNhYmxlZCIsICJlbXB0eSIsICJlbmFibGVkIiwgImZpcnN0LWNoaWxkIiwgImZpcnN0LWxldHRlciIsICJmaXJzdC1saW5lIiwgImZpcnN0LW9mLXR5cGUiLCAiZm9jdXMiLCAiaG92ZXIiLCAiaW4tcmFuZ2UiLCAiaW5kZXRlcm1pbmF0ZSIsICJpbnZhbGlkIiwgImxhbmciLCAibGFzdC1jaGlsZCIsICJsYXN0LW9mLXR5cGUiLCAibGluayIsICJub3QiLCAibnRoLWNoaWxkIiwgIm50aC1sYXN0LWNoaWxkIiwgIm50aC1sYXN0LW9mLXR5cGUiLCAibnRoLW9mLXR5cGUiLCAib25seS1vZi10eXBlIiwgIm9ubHktY2hpbGQiLCAib3B0aW9uYWwiLCAib3V0LW9mLXJhbmdlIiwgInBsYWNlaG9sZGVyIiwgInJlYWQtb25seSIsICJyZWFkLXdyaXRlIiwgInJlcXVpcmVkIiwgInJvb3QiLCAic2VsZWN0aW9uIiwgInRhcmdldCIsICJ2YWxpZCIsICJ2aXNpdGVkIl0ubWFwKChlNSkgPT4gKHsgdHlwZTogImNsYXNzIiwgbGFiZWw6IGU1IH0pKTsKICB2YXIgdTggPSBbImFib3ZlIiwgImFic29sdXRlIiwgImFjdGl2ZWJvcmRlciIsICJhZGRpdGl2ZSIsICJhY3RpdmVjYXB0aW9uIiwgImFmdGVyLXdoaXRlLXNwYWNlIiwgImFoZWFkIiwgImFsaWFzIiwgImFsbCIsICJhbGwtc2Nyb2xsIiwgImFscGhhYmV0aWMiLCAiYWx0ZXJuYXRlIiwgImFsd2F5cyIsICJhbnRpYWxpYXNlZCIsICJhcHB3b3Jrc3BhY2UiLCAiYXN0ZXJpc2tzIiwgImF0dHIiLCAiYXV0byIsICJhdXRvLWZsb3ciLCAiYXZvaWQiLCAiYXZvaWQtY29sdW1uIiwgImF2b2lkLXBhZ2UiLCAiYXZvaWQtcmVnaW9uIiwgImF4aXMtcGFuIiwgImJhY2tncm91bmQiLCAiYmFja3dhcmRzIiwgImJhc2VsaW5lIiwgImJlbG93IiwgImJpZGktb3ZlcnJpZGUiLCAiYmxpbmsiLCAiYmxvY2siLCAiYmxvY2stYXhpcyIsICJib2xkIiwgImJvbGRlciIsICJib3JkZXIiLCAiYm9yZGVyLWJveCIsICJib3RoIiwgImJvdHRvbSIsICJicmVhayIsICJicmVhay1hbGwiLCAiYnJlYWstd29yZCIsICJidWxsZXRzIiwgImJ1dHRvbiIsICJidXR0b24tYmV2ZWwiLCAiYnV0dG9uZmFjZSIsICJidXR0b25oaWdobGlnaHQiLCAiYnV0dG9uc2hhZG93IiwgImJ1dHRvbnRleHQiLCAiY2FsYyIsICJjYXBpdGFsaXplIiwgImNhcHMtbG9jay1pbmRpY2F0b3IiLCAiY2FwdGlvbiIsICJjYXB0aW9udGV4dCIsICJjYXJldCIsICJjZWxsIiwgImNlbnRlciIsICJjaGVja2JveCIsICJjaXJjbGUiLCAiY2prLWRlY2ltYWwiLCAiY2xlYXIiLCAiY2xpcCIsICJjbG9zZS1xdW90ZSIsICJjb2wtcmVzaXplIiwgImNvbGxhcHNlIiwgImNvbG9yIiwgImNvbG9yLWJ1cm4iLCAiY29sb3ItZG9kZ2UiLCAiY29sdW1uIiwgImNvbHVtbi1yZXZlcnNlIiwgImNvbXBhY3QiLCAiY29uZGVuc2VkIiwgImNvbnRhaW4iLCAiY29udGVudCIsICJjb250ZW50cyIsICJjb250ZW50LWJveCIsICJjb250ZXh0LW1lbnUiLCAiY29udGludW91cyIsICJjb3B5IiwgImNvdW50ZXIiLCAiY291bnRlcnMiLCAiY292ZXIiLCAiY3JvcCIsICJjcm9zcyIsICJjcm9zc2hhaXIiLCAiY3VycmVudGNvbG9yIiwgImN1cnNpdmUiLCAiY3ljbGljIiwgImRhcmtlbiIsICJkYXNoZWQiLCAiZGVjaW1hbCIsICJkZWNpbWFsLWxlYWRpbmctemVybyIsICJkZWZhdWx0IiwgImRlZmF1bHQtYnV0dG9uIiwgImRlbnNlIiwgImRlc3RpbmF0aW9uLWF0b3AiLCAiZGVzdGluYXRpb24taW4iLCAiZGVzdGluYXRpb24tb3V0IiwgImRlc3RpbmF0aW9uLW92ZXIiLCAiZGlmZmVyZW5jZSIsICJkaXNjIiwgImRpc2NhcmQiLCAiZGlzY2xvc3VyZS1jbG9zZWQiLCAiZGlzY2xvc3VyZS1vcGVuIiwgImRvY3VtZW50IiwgImRvdC1kYXNoIiwgImRvdC1kb3QtZGFzaCIsICJkb3R0ZWQiLCAiZG91YmxlIiwgImRvd24iLCAiZS1yZXNpemUiLCAiZWFzZSIsICJlYXNlLWluIiwgImVhc2UtaW4tb3V0IiwgImVhc2Utb3V0IiwgImVsZW1lbnQiLCAiZWxsaXBzZSIsICJlbGxpcHNpcyIsICJlbWJlZCIsICJlbmQiLCAiZXRoaW9waWMtYWJlZ2VkZS1nZXoiLCAiZXRoaW9waWMtaGFsZWhhbWUtYWEtZXIiLCAiZXRoaW9waWMtaGFsZWhhbWUtZ2V6IiwgImV3LXJlc2l6ZSIsICJleGNsdXNpb24iLCAiZXhwYW5kZWQiLCAiZXh0ZW5kcyIsICJleHRyYS1jb25kZW5zZWQiLCAiZXh0cmEtZXhwYW5kZWQiLCAiZmFudGFzeSIsICJmYXN0IiwgImZpbGwiLCAiZmlsbC1ib3giLCAiZml4ZWQiLCAiZmxhdCIsICJmbGV4IiwgImZsZXgtZW5kIiwgImZsZXgtc3RhcnQiLCAiZm9vdG5vdGVzIiwgImZvcndhcmRzIiwgImZyb20iLCAiZ2VvbWV0cmljUHJlY2lzaW9uIiwgImdyYXl0ZXh0IiwgImdyaWQiLCAiZ3Jvb3ZlIiwgImhhbmQiLCAiaGFyZC1saWdodCIsICJoZWxwIiwgImhpZGRlbiIsICJoaWRlIiwgImhpZ2hlciIsICJoaWdobGlnaHQiLCAiaGlnaGxpZ2h0dGV4dCIsICJob3Jpem9udGFsIiwgImhzbCIsICJoc2xhIiwgImh1ZSIsICJpY29uIiwgImlnbm9yZSIsICJpbmFjdGl2ZWJvcmRlciIsICJpbmFjdGl2ZWNhcHRpb24iLCAiaW5hY3RpdmVjYXB0aW9udGV4dCIsICJpbmZpbml0ZSIsICJpbmZvYmFja2dyb3VuZCIsICJpbmZvdGV4dCIsICJpbmhlcml0IiwgImluaXRpYWwiLCAiaW5saW5lIiwgImlubGluZS1heGlzIiwgImlubGluZS1ibG9jayIsICJpbmxpbmUtZmxleCIsICJpbmxpbmUtZ3JpZCIsICJpbmxpbmUtdGFibGUiLCAiaW5zZXQiLCAiaW5zaWRlIiwgImludHJpbnNpYyIsICJpbnZlcnQiLCAiaXRhbGljIiwgImp1c3RpZnkiLCAia2VlcC1hbGwiLCAibGFuZHNjYXBlIiwgImxhcmdlIiwgImxhcmdlciIsICJsZWZ0IiwgImxldmVsIiwgImxpZ2h0ZXIiLCAibGlnaHRlbiIsICJsaW5lLXRocm91Z2giLCAibGluZWFyIiwgImxpbmVhci1ncmFkaWVudCIsICJsaW5lcyIsICJsaXN0LWl0ZW0iLCAibGlzdGJveCIsICJsaXN0aXRlbSIsICJsb2NhbCIsICJsb2dpY2FsIiwgImxvdWQiLCAibG93ZXIiLCAibG93ZXItaGV4YWRlY2ltYWwiLCAibG93ZXItbGF0aW4iLCAibG93ZXItbm9yd2VnaWFuIiwgImxvd2VyY2FzZSIsICJsdHIiLCAibHVtaW5vc2l0eSIsICJtYW5pcHVsYXRpb24iLCAibWF0Y2giLCAibWF0cml4IiwgIm1hdHJpeDNkIiwgIm1lZGl1bSIsICJtZW51IiwgIm1lbnV0ZXh0IiwgIm1lc3NhZ2UtYm94IiwgIm1pZGRsZSIsICJtaW4taW50cmluc2ljIiwgIm1peCIsICJtb25vc3BhY2UiLCAibW92ZSIsICJtdWx0aXBsZSIsICJtdWx0aXBsZV9tYXNrX2ltYWdlcyIsICJtdWx0aXBseSIsICJuLXJlc2l6ZSIsICJuYXJyb3dlciIsICJuZS1yZXNpemUiLCAibmVzdy1yZXNpemUiLCAibm8tY2xvc2UtcXVvdGUiLCAibm8tZHJvcCIsICJuby1vcGVuLXF1b3RlIiwgIm5vLXJlcGVhdCIsICJub25lIiwgIm5vcm1hbCIsICJub3QtYWxsb3dlZCIsICJub3dyYXAiLCAibnMtcmVzaXplIiwgIm51bWJlcnMiLCAibnVtZXJpYyIsICJudy1yZXNpemUiLCAibndzZS1yZXNpemUiLCAib2JsaXF1ZSIsICJvcGFjaXR5IiwgIm9wZW4tcXVvdGUiLCAib3B0aW1pemVMZWdpYmlsaXR5IiwgIm9wdGltaXplU3BlZWQiLCAib3V0c2V0IiwgIm91dHNpZGUiLCAib3V0c2lkZS1zaGFwZSIsICJvdmVybGF5IiwgIm92ZXJsaW5lIiwgInBhZGRpbmciLCAicGFkZGluZy1ib3giLCAicGFpbnRlZCIsICJwYWdlIiwgInBhdXNlZCIsICJwZXJzcGVjdGl2ZSIsICJwaW5jaC16b29tIiwgInBsdXMtZGFya2VyIiwgInBsdXMtbGlnaHRlciIsICJwb2ludGVyIiwgInBvbHlnb24iLCAicG9ydHJhaXQiLCAicHJlIiwgInByZS1saW5lIiwgInByZS13cmFwIiwgInByZXNlcnZlLTNkIiwgInByb2dyZXNzIiwgInB1c2gtYnV0dG9uIiwgInJhZGlhbC1ncmFkaWVudCIsICJyYWRpbyIsICJyZWFkLW9ubHkiLCAicmVhZC13cml0ZSIsICJyZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5IiwgInJlY3RhbmdsZSIsICJyZWdpb24iLCAicmVsYXRpdmUiLCAicmVwZWF0IiwgInJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiLCAicmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudCIsICJyZXBlYXQteCIsICJyZXBlYXQteSIsICJyZXNldCIsICJyZXZlcnNlIiwgInJnYiIsICJyZ2JhIiwgInJpZGdlIiwgInJpZ2h0IiwgInJvdGF0ZSIsICJyb3RhdGUzZCIsICJyb3RhdGVYIiwgInJvdGF0ZVkiLCAicm90YXRlWiIsICJyb3VuZCIsICJyb3ciLCAicm93LXJlc2l6ZSIsICJyb3ctcmV2ZXJzZSIsICJydGwiLCAicnVuLWluIiwgInJ1bm5pbmciLCAicy1yZXNpemUiLCAic2Fucy1zZXJpZiIsICJzYXR1cmF0aW9uIiwgInNjYWxlIiwgInNjYWxlM2QiLCAic2NhbGVYIiwgInNjYWxlWSIsICJzY2FsZVoiLCAic2NyZWVuIiwgInNjcm9sbCIsICJzY3JvbGxiYXIiLCAic2Nyb2xsLXBvc2l0aW9uIiwgInNlLXJlc2l6ZSIsICJzZWxmLXN0YXJ0IiwgInNlbGYtZW5kIiwgInNlbWktY29uZGVuc2VkIiwgInNlbWktZXhwYW5kZWQiLCAic2VwYXJhdGUiLCAic2VyaWYiLCAic2hvdyIsICJzaW5nbGUiLCAic2tldyIsICJza2V3WCIsICJza2V3WSIsICJza2lwLXdoaXRlLXNwYWNlIiwgInNsaWRlIiwgInNsaWRlci1ob3Jpem9udGFsIiwgInNsaWRlci12ZXJ0aWNhbCIsICJzbGlkZXJ0aHVtYi1ob3Jpem9udGFsIiwgInNsaWRlcnRodW1iLXZlcnRpY2FsIiwgInNsb3ciLCAic21hbGwiLCAic21hbGwtY2FwcyIsICJzbWFsbC1jYXB0aW9uIiwgInNtYWxsZXIiLCAic29mdC1saWdodCIsICJzb2xpZCIsICJzb3VyY2UtYXRvcCIsICJzb3VyY2UtaW4iLCAic291cmNlLW91dCIsICJzb3VyY2Utb3ZlciIsICJzcGFjZSIsICJzcGFjZS1hcm91bmQiLCAic3BhY2UtYmV0d2VlbiIsICJzcGFjZS1ldmVubHkiLCAic3BlbGwtb3V0IiwgInNxdWFyZSIsICJzdGFydCIsICJzdGF0aWMiLCAic3RhdHVzLWJhciIsICJzdHJldGNoIiwgInN0cm9rZSIsICJzdHJva2UtYm94IiwgInN1YiIsICJzdWJwaXhlbC1hbnRpYWxpYXNlZCIsICJzdmdfbWFza3MiLCAic3VwZXIiLCAic3ctcmVzaXplIiwgInN5bWJvbGljIiwgInN5bWJvbHMiLCAic3lzdGVtLXVpIiwgInRhYmxlIiwgInRhYmxlLWNhcHRpb24iLCAidGFibGUtY2VsbCIsICJ0YWJsZS1jb2x1bW4iLCAidGFibGUtY29sdW1uLWdyb3VwIiwgInRhYmxlLWZvb3Rlci1ncm91cCIsICJ0YWJsZS1oZWFkZXItZ3JvdXAiLCAidGFibGUtcm93IiwgInRhYmxlLXJvdy1ncm91cCIsICJ0ZXh0IiwgInRleHQtYm90dG9tIiwgInRleHQtdG9wIiwgInRleHRhcmVhIiwgInRleHRmaWVsZCIsICJ0aGljayIsICJ0aGluIiwgInRocmVlZGRhcmtzaGFkb3ciLCAidGhyZWVkZmFjZSIsICJ0aHJlZWRoaWdobGlnaHQiLCAidGhyZWVkbGlnaHRzaGFkb3ciLCAidGhyZWVkc2hhZG93IiwgInRvIiwgInRvcCIsICJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlIiwgInRyYW5zbGF0ZTNkIiwgInRyYW5zbGF0ZVgiLCAidHJhbnNsYXRlWSIsICJ0cmFuc2xhdGVaIiwgInRyYW5zcGFyZW50IiwgInVsdHJhLWNvbmRlbnNlZCIsICJ1bHRyYS1leHBhbmRlZCIsICJ1bmRlcmxpbmUiLCAidW5pZGlyZWN0aW9uYWwtcGFuIiwgInVuc2V0IiwgInVwIiwgInVwcGVyLWxhdGluIiwgInVwcGVyY2FzZSIsICJ1cmwiLCAidmFyIiwgInZlcnRpY2FsIiwgInZlcnRpY2FsLXRleHQiLCAidmlldy1ib3giLCAidmlzaWJsZSIsICJ2aXNpYmxlRmlsbCIsICJ2aXNpYmxlUGFpbnRlZCIsICJ2aXNpYmxlU3Ryb2tlIiwgInZpc3VhbCIsICJ3LXJlc2l6ZSIsICJ3YWl0IiwgIndhdmUiLCAid2lkZXIiLCAid2luZG93IiwgIndpbmRvd2ZyYW1lIiwgIndpbmRvd3RleHQiLCAid29yZHMiLCAid3JhcCIsICJ3cmFwLXJldmVyc2UiLCAieC1sYXJnZSIsICJ4LXNtYWxsIiwgInhvciIsICJ4eC1sYXJnZSIsICJ4eC1zbWFsbCJdLm1hcCgoZTUpID0+ICh7IHR5cGU6ICJrZXl3b3JkIiwgbGFiZWw6IGU1IH0pKS5jb25jYXQoWyJhbGljZWJsdWUiLCAiYW50aXF1ZXdoaXRlIiwgImFxdWEiLCAiYXF1YW1hcmluZSIsICJhenVyZSIsICJiZWlnZSIsICJiaXNxdWUiLCAiYmxhY2siLCAiYmxhbmNoZWRhbG1vbmQiLCAiYmx1ZSIsICJibHVldmlvbGV0IiwgImJyb3duIiwgImJ1cmx5d29vZCIsICJjYWRldGJsdWUiLCAiY2hhcnRyZXVzZSIsICJjaG9jb2xhdGUiLCAiY29yYWwiLCAiY29ybmZsb3dlcmJsdWUiLCAiY29ybnNpbGsiLCAiY3JpbXNvbiIsICJjeWFuIiwgImRhcmtibHVlIiwgImRhcmtjeWFuIiwgImRhcmtnb2xkZW5yb2QiLCAiZGFya2dyYXkiLCAiZGFya2dyZWVuIiwgImRhcmtraGFraSIsICJkYXJrbWFnZW50YSIsICJkYXJrb2xpdmVncmVlbiIsICJkYXJrb3JhbmdlIiwgImRhcmtvcmNoaWQiLCAiZGFya3JlZCIsICJkYXJrc2FsbW9uIiwgImRhcmtzZWFncmVlbiIsICJkYXJrc2xhdGVibHVlIiwgImRhcmtzbGF0ZWdyYXkiLCAiZGFya3R1cnF1b2lzZSIsICJkYXJrdmlvbGV0IiwgImRlZXBwaW5rIiwgImRlZXBza3libHVlIiwgImRpbWdyYXkiLCAiZG9kZ2VyYmx1ZSIsICJmaXJlYnJpY2siLCAiZmxvcmFsd2hpdGUiLCAiZm9yZXN0Z3JlZW4iLCAiZnVjaHNpYSIsICJnYWluc2Jvcm8iLCAiZ2hvc3R3aGl0ZSIsICJnb2xkIiwgImdvbGRlbnJvZCIsICJncmF5IiwgImdyZXkiLCAiZ3JlZW4iLCAiZ3JlZW55ZWxsb3ciLCAiaG9uZXlkZXciLCAiaG90cGluayIsICJpbmRpYW5yZWQiLCAiaW5kaWdvIiwgIml2b3J5IiwgImtoYWtpIiwgImxhdmVuZGVyIiwgImxhdmVuZGVyYmx1c2giLCAibGF3bmdyZWVuIiwgImxlbW9uY2hpZmZvbiIsICJsaWdodGJsdWUiLCAibGlnaHRjb3JhbCIsICJsaWdodGN5YW4iLCAibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCAibGlnaHRncmF5IiwgImxpZ2h0Z3JlZW4iLCAibGlnaHRwaW5rIiwgImxpZ2h0c2FsbW9uIiwgImxpZ2h0c2VhZ3JlZW4iLCAibGlnaHRza3libHVlIiwgImxpZ2h0c2xhdGVncmF5IiwgImxpZ2h0c3RlZWxibHVlIiwgImxpZ2h0eWVsbG93IiwgImxpbWUiLCAibGltZWdyZWVuIiwgImxpbmVuIiwgIm1hZ2VudGEiLCAibWFyb29uIiwgIm1lZGl1bWFxdWFtYXJpbmUiLCAibWVkaXVtYmx1ZSIsICJtZWRpdW1vcmNoaWQiLCAibWVkaXVtcHVycGxlIiwgIm1lZGl1bXNlYWdyZWVuIiwgIm1lZGl1bXNsYXRlYmx1ZSIsICJtZWRpdW1zcHJpbmdncmVlbiIsICJtZWRpdW10dXJxdW9pc2UiLCAibWVkaXVtdmlvbGV0cmVkIiwgIm1pZG5pZ2h0Ymx1ZSIsICJtaW50Y3JlYW0iLCAibWlzdHlyb3NlIiwgIm1vY2Nhc2luIiwgIm5hdmFqb3doaXRlIiwgIm5hdnkiLCAib2xkbGFjZSIsICJvbGl2ZSIsICJvbGl2ZWRyYWIiLCAib3JhbmdlIiwgIm9yYW5nZXJlZCIsICJvcmNoaWQiLCAicGFsZWdvbGRlbnJvZCIsICJwYWxlZ3JlZW4iLCAicGFsZXR1cnF1b2lzZSIsICJwYWxldmlvbGV0cmVkIiwgInBhcGF5YXdoaXAiLCAicGVhY2hwdWZmIiwgInBlcnUiLCAicGluayIsICJwbHVtIiwgInBvd2RlcmJsdWUiLCAicHVycGxlIiwgInJlYmVjY2FwdXJwbGUiLCAicmVkIiwgInJvc3licm93biIsICJyb3lhbGJsdWUiLCAic2FkZGxlYnJvd24iLCAic2FsbW9uIiwgInNhbmR5YnJvd24iLCAic2VhZ3JlZW4iLCAic2Vhc2hlbGwiLCAic2llbm5hIiwgInNpbHZlciIsICJza3libHVlIiwgInNsYXRlYmx1ZSIsICJzbGF0ZWdyYXkiLCAic25vdyIsICJzcHJpbmdncmVlbiIsICJzdGVlbGJsdWUiLCAidGFuIiwgInRlYWwiLCAidGhpc3RsZSIsICJ0b21hdG8iLCAidHVycXVvaXNlIiwgInZpb2xldCIsICJ3aGVhdCIsICJ3aGl0ZSIsICJ3aGl0ZXNtb2tlIiwgInllbGxvdyIsICJ5ZWxsb3dncmVlbiJdLm1hcCgoZTUpID0+ICh7IHR5cGU6ICJjb25zdGFudCIsIGxhYmVsOiBlNSB9KSkpOwogIHZhciBrMTAgPSBbImEiLCAiYWJiciIsICJhZGRyZXNzIiwgImFydGljbGUiLCAiYXNpZGUiLCAiYiIsICJiZGkiLCAiYmRvIiwgImJsb2NrcXVvdGUiLCAiYm9keSIsICJiciIsICJidXR0b24iLCAiY2FudmFzIiwgImNhcHRpb24iLCAiY2l0ZSIsICJjb2RlIiwgImNvbCIsICJjb2xncm91cCIsICJkZCIsICJkZWwiLCAiZGV0YWlscyIsICJkZm4iLCAiZGlhbG9nIiwgImRpdiIsICJkbCIsICJkdCIsICJlbSIsICJmaWdjYXB0aW9uIiwgImZpZ3VyZSIsICJmb290ZXIiLCAiZm9ybSIsICJoZWFkZXIiLCAiaGdyb3VwIiwgImgxIiwgImgyIiwgImgzIiwgImg0IiwgImg1IiwgImg2IiwgImhyIiwgImh0bWwiLCAiaSIsICJpZnJhbWUiLCAiaW1nIiwgImlucHV0IiwgImlucyIsICJrYmQiLCAibGFiZWwiLCAibGVnZW5kIiwgImxpIiwgIm1haW4iLCAibWV0ZXIiLCAibmF2IiwgIm9sIiwgIm91dHB1dCIsICJwIiwgInByZSIsICJydWJ5IiwgInNlY3Rpb24iLCAic2VsZWN0IiwgInNtYWxsIiwgInNvdXJjZSIsICJzcGFuIiwgInN0cm9uZyIsICJzdWIiLCAic3VtbWFyeSIsICJzdXAiLCAidGFibGUiLCAidGJvZHkiLCAidGQiLCAidGVtcGxhdGUiLCAidGV4dGFyZWEiLCAidGZvb3QiLCAidGgiLCAidGhlYWQiLCAidHIiLCAidSIsICJ1bCJdLm1hcCgoZTUpID0+ICh7IHR5cGU6ICJ0eXBlIiwgbGFiZWw6IGU1IH0pKTsKICB2YXIgYTIgPSAvXltcdy1dKi87CiAgdmFyIHgxMiA9IChlNSkgPT4gewogICAgbGV0IHsgc3RhdGU6IHIzLCBwb3M6IG80IH0gPSBlNSwgdDQgPSBtMTQocjMpLnJlc29sdmVJbm5lcihvNCwgLTEpOwogICAgaWYgKHQ0Lm5hbWUgPT0gIlByb3BlcnR5TmFtZSIpCiAgICAgIHJldHVybiB7IGZyb206IHQ0LmZyb20sIG9wdGlvbnM6IGQ3KCksIHZhbGlkRm9yOiBhMiB9OwogICAgaWYgKHQ0Lm5hbWUgPT0gIlZhbHVlTmFtZSIpCiAgICAgIHJldHVybiB7IGZyb206IHQ0LmZyb20sIG9wdGlvbnM6IHU4LCB2YWxpZEZvcjogYTIgfTsKICAgIGlmICh0NC5uYW1lID09ICJQc2V1ZG9DbGFzc05hbWUiKQogICAgICByZXR1cm4geyBmcm9tOiB0NC5mcm9tLCBvcHRpb25zOiBjMTEsIHZhbGlkRm9yOiBhMiB9OwogICAgaWYgKHQ0Lm5hbWUgPT0gIlRhZ05hbWUiKSB7CiAgICAgIGZvciAobGV0IHsgcGFyZW50OiBuOCB9ID0gdDQ7IG44OyBuOCA9IG44LnBhcmVudCkKICAgICAgICBpZiAobjgubmFtZSA9PSAiQmxvY2siKQogICAgICAgICAgcmV0dXJuIHsgZnJvbTogdDQuZnJvbSwgb3B0aW9uczogZDcoKSwgdmFsaWRGb3I6IGEyIH07CiAgICAgIHJldHVybiB7IGZyb206IHQ0LmZyb20sIG9wdGlvbnM6IGsxMCwgdmFsaWRGb3I6IGEyIH07CiAgICB9CiAgICBpZiAoIWU1LmV4cGxpY2l0KQogICAgICByZXR1cm4gbnVsbDsKICAgIGxldCBpNCA9IHQ0LnJlc29sdmUobzQpLCBsNyA9IGk0LmNoaWxkQmVmb3JlKG80KTsKICAgIHJldHVybiBsNyAmJiBsNy5uYW1lID09ICI6IiAmJiBpNC5uYW1lID09ICJQc2V1ZG9DbGFzc1NlbGVjdG9yIiA/IHsgZnJvbTogbzQsIG9wdGlvbnM6IGMxMSwgdmFsaWRGb3I6IGEyIH0gOiBsNyAmJiBsNy5uYW1lID09ICI6IiAmJiBpNC5uYW1lID09ICJEZWNsYXJhdGlvbiIgfHwgaTQubmFtZSA9PSAiQXJnTGlzdCIgPyB7IGZyb206IG80LCBvcHRpb25zOiB1OCwgdmFsaWRGb3I6IGEyIH0gOiBpNC5uYW1lID09ICJCbG9jayIgPyB7IGZyb206IG80LCBvcHRpb25zOiBkNygpLCB2YWxpZEZvcjogYTIgfSA6IG51bGw7CiAgfTsKICB2YXIgcDEyID0gQjEzLmRlZmluZSh7IHBhcnNlcjogRzEzLmNvbmZpZ3VyZSh7IHByb3BzOiBbcmUxMy5hZGQoeyBEZWNsYXJhdGlvbjogUWUzKCkgfSksIGNlMTAuYWRkKHsgQmxvY2s6IFllNSB9KV0gfSksIGxhbmd1YWdlRGF0YTogeyBjb21tZW50VG9rZW5zOiB7IGJsb2NrOiB7IG9wZW46ICIvKiIsIGNsb3NlOiAiKi8iIH0gfSwgaW5kZW50T25JbnB1dDogL15ccypcfSQvLCB3b3JkQ2hhcnM6ICItIiB9IH0pOwogIGZ1bmN0aW9uIEYxNigpIHsKICAgIHJldHVybiBuZXcgZHQ2KHAxMiwgcDEyLmRhdGEub2YoeyBhdXRvY29tcGxldGU6IHgxMiB9KSk7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AbGV6ZXIvamF2YXNjcmlwdEAxLjAuMi9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9qYXZhc2NyaXB0LmpzCiAgdmFyIFgxNyA9IDE7CiAgdmFyIFMxNSA9IDI4MTsKICB2YXIgUDE5ID0gMjsKICB2YXIgYzEyID0gMzsKICB2YXIgVDIxID0gMjgyOwogIHZhciBqMTIgPSA0OwogIHZhciBwMTMgPSAyODM7CiAgdmFyIHQyID0gMjg0OwogIHZhciBXMTEgPSAyODY7CiAgdmFyIGc3ID0gMjg3OwogIHZhciBkOCA9IDU7CiAgdmFyIHgxMyA9IDY7CiAgdmFyIGwyID0gMTsKICB2YXIgXzE4ID0gWzksIDEwLCAxMSwgMTIsIDEzLCAzMiwgMTMzLCAxNjAsIDU3NjAsIDgxOTIsIDgxOTMsIDgxOTQsIDgxOTUsIDgxOTYsIDgxOTcsIDgxOTgsIDgxOTksIDgyMDAsIDgyMDEsIDgyMDIsIDgyMzIsIDgyMzMsIDgyMzksIDgyODcsIDEyMjg4XTsKICB2YXIgWjE0ID0gMTI1OwogIHZhciBiMTcgPSAxMjM7CiAgdmFyIHM1ID0gNTk7CiAgdmFyIG8yID0gNDc7CiAgdmFyIHExMiA9IDQyOwogIHZhciBHMTQgPSA0MzsKICB2YXIgZjggPSA0NTsKICB2YXIgeTEyID0gMzY7CiAgdmFyIG0xNyA9IDk2OwogIHZhciB6MTkgPSA5MjsKICB2YXIgaDQgPSBuZXcgRTgoeyBzdGFydDogZmFsc2UsIHNoaWZ0KFExNywgaTQpIHsKICAgIHJldHVybiBpNCA9PSBkOCB8fCBpNCA9PSB4MTMgfHwgaTQgPT0gVzExID8gUTE3IDogaTQgPT0gZzc7CiAgfSwgc3RyaWN0OiBmYWxzZSB9KTsKICB2YXIgVTE4ID0gbmV3IEwxMygoUTE3LCBpNCkgPT4gewogICAgbGV0IHsgbmV4dDogJDIxIH0gPSBRMTc7CiAgICAoJDIxID09IFoxNCB8fCAkMjEgPT0gLTEgfHwgaTQuY29udGV4dCkgJiYgaTQuY2FuU2hpZnQodDIpICYmIFExNy5hY2NlcHRUb2tlbih0Mik7CiAgfSwgeyBjb250ZXh0dWFsOiB0cnVlLCBmYWxsYmFjazogdHJ1ZSB9KTsKICB2YXIgazExID0gbmV3IEwxMygoUTE3LCBpNCkgPT4gewogICAgbGV0IHsgbmV4dDogJDIxIH0gPSBRMTcsIGE0OwogICAgXzE4LmluZGV4T2YoJDIxKSA+IC0xIHx8ICQyMSA9PSBvMiAmJiAoKGE0ID0gUTE3LnBlZWsoMSkpID09IG8yIHx8IGE0ID09IHExMikgfHwgJDIxICE9IFoxNCAmJiAkMjEgIT0gczUgJiYgJDIxICE9IC0xICYmICFpNC5jb250ZXh0ICYmIGk0LmNhblNoaWZ0KFMxNSkgJiYgUTE3LmFjY2VwdFRva2VuKFMxNSk7CiAgfSwgeyBjb250ZXh0dWFsOiB0cnVlIH0pOwogIHZhciB1OSA9IG5ldyBMMTMoKFExNywgaTQpID0+IHsKICAgIGxldCB7IG5leHQ6ICQyMSB9ID0gUTE3OwogICAgaWYgKCgkMjEgPT0gRzE0IHx8ICQyMSA9PSBmOCkgJiYgKFExNy5hZHZhbmNlKCksICQyMSA9PSBRMTcubmV4dCkpIHsKICAgICAgUTE3LmFkdmFuY2UoKTsKICAgICAgbGV0IGE0ID0gIWk0LmNvbnRleHQgJiYgaTQuY2FuU2hpZnQoUDE5KTsKICAgICAgUTE3LmFjY2VwdFRva2VuKGE0ID8gUDE5IDogYzEyKTsKICAgIH0KICB9LCB7IGNvbnRleHR1YWw6IHRydWUgfSk7CiAgdmFyIHcxNyA9IG5ldyBMMTMoKFExNykgPT4gewogICAgZm9yIChsZXQgaTQgPSBmYWxzZSwgJDIxID0gMDsgOyAkMjErKykgewogICAgICBsZXQgeyBuZXh0OiBhNCB9ID0gUTE3OwogICAgICBpZiAoYTQgPCAwKSB7CiAgICAgICAgJDIxICYmIFExNy5hY2NlcHRUb2tlbihUMjEpOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgaWYgKGE0ID09IG0xNykgewogICAgICAgICQyMSA/IFExNy5hY2NlcHRUb2tlbihUMjEpIDogUTE3LmFjY2VwdFRva2VuKHAxMywgMSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSBpZiAoYTQgPT0gYjE3ICYmIGk0KSB7CiAgICAgICAgJDIxID09IDEgPyBRMTcuYWNjZXB0VG9rZW4oajEyLCAxKSA6IFExNy5hY2NlcHRUb2tlbihUMjEsIC0xKTsKICAgICAgICBicmVhazsKICAgICAgfSBlbHNlIGlmIChhNCA9PSAxMCAmJiAkMjEpIHsKICAgICAgICBRMTcuYWR2YW5jZSgpLCBRMTcuYWNjZXB0VG9rZW4oVDIxKTsKICAgICAgICBicmVhazsKICAgICAgfSBlbHNlCiAgICAgICAgYTQgPT0gejE5ICYmIFExNy5hZHZhbmNlKCk7CiAgICAgIGk0ID0gYTQgPT0geTEyLCBRMTcuYWR2YW5jZSgpOwogICAgfQogIH0pOwogIHZhciBZMjEgPSBuZXcgTDEzKChRMTcsIGk0KSA9PiB7CiAgICBpZiAoIShRMTcubmV4dCAhPSAxMDEgfHwgIWk0LmRpYWxlY3RFbmFibGVkKGwyKSkpIHsKICAgICAgUTE3LmFkdmFuY2UoKTsKICAgICAgZm9yIChsZXQgJDIxID0gMDsgJDIxIDwgNjsgJDIxKyspIHsKICAgICAgICBpZiAoUTE3Lm5leHQgIT0gInh0ZW5kcyIuY2hhckNvZGVBdCgkMjEpKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIFExNy5hZHZhbmNlKCk7CiAgICAgIH0KICAgICAgUTE3Lm5leHQgPj0gNTcgJiYgUTE3Lm5leHQgPD0gNjUgfHwgUTE3Lm5leHQgPj0gNDggJiYgUTE3Lm5leHQgPD0gOTAgfHwgUTE3Lm5leHQgPT0gOTUgfHwgUTE3Lm5leHQgPj0gOTcgJiYgUTE3Lm5leHQgPD0gMTIyIHx8IFExNy5uZXh0ID4gMTYwIHx8IFExNy5hY2NlcHRUb2tlbihYMTcpOwogICAgfQogIH0pOwogIHZhciB2MTAgPSAkMTIoeyAiZ2V0IHNldCBhc3luYyBzdGF0aWMiOiBuNS5tb2RpZmllciwgImZvciB3aGlsZSBkbyBpZiBlbHNlIHN3aXRjaCB0cnkgY2F0Y2ggZmluYWxseSByZXR1cm4gdGhyb3cgYnJlYWsgY29udGludWUgZGVmYXVsdCBjYXNlIjogbjUuY29udHJvbEtleXdvcmQsICJpbiBvZiBhd2FpdCB5aWVsZCB2b2lkIHR5cGVvZiBkZWxldGUgaW5zdGFuY2VvZiI6IG41Lm9wZXJhdG9yS2V5d29yZCwgImxldCB2YXIgY29uc3QgZnVuY3Rpb24gY2xhc3MgZXh0ZW5kcyI6IG41LmRlZmluaXRpb25LZXl3b3JkLCAiaW1wb3J0IGV4cG9ydCBmcm9tIjogbjUubW9kdWxlS2V5d29yZCwgIndpdGggZGVidWdnZXIgYXMgbmV3IjogbjUua2V5d29yZCwgVGVtcGxhdGVTdHJpbmc6IG41LnNwZWNpYWwobjUuc3RyaW5nKSwgc3VwZXI6IG41LmF0b20sIEJvb2xlYW5MaXRlcmFsOiBuNS5ib29sLCB0aGlzOiBuNS5zZWxmLCBudWxsOiBuNS5udWxsLCBTdGFyOiBuNS5tb2RpZmllciwgVmFyaWFibGVOYW1lOiBuNS52YXJpYWJsZU5hbWUsICJDYWxsRXhwcmVzc2lvbi9WYXJpYWJsZU5hbWUgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uL1ZhcmlhYmxlTmFtZSI6IG41LmZ1bmN0aW9uKG41LnZhcmlhYmxlTmFtZSksIFZhcmlhYmxlRGVmaW5pdGlvbjogbjUuZGVmaW5pdGlvbihuNS52YXJpYWJsZU5hbWUpLCBMYWJlbDogbjUubGFiZWxOYW1lLCBQcm9wZXJ0eU5hbWU6IG41LnByb3BlcnR5TmFtZSwgUHJpdmF0ZVByb3BlcnR5TmFtZTogbjUuc3BlY2lhbChuNS5wcm9wZXJ0eU5hbWUpLCAiQ2FsbEV4cHJlc3Npb24vTWVtYmVyRXhwcmVzc2lvbi9Qcm9wZXJ0eU5hbWUiOiBuNS5mdW5jdGlvbihuNS5wcm9wZXJ0eU5hbWUpLCAiRnVuY3Rpb25EZWNsYXJhdGlvbi9WYXJpYWJsZURlZmluaXRpb24iOiBuNS5mdW5jdGlvbihuNS5kZWZpbml0aW9uKG41LnZhcmlhYmxlTmFtZSkpLCAiQ2xhc3NEZWNsYXJhdGlvbi9WYXJpYWJsZURlZmluaXRpb24iOiBuNS5kZWZpbml0aW9uKG41LmNsYXNzTmFtZSksIFByb3BlcnR5RGVmaW5pdGlvbjogbjUuZGVmaW5pdGlvbihuNS5wcm9wZXJ0eU5hbWUpLCBQcml2YXRlUHJvcGVydHlEZWZpbml0aW9uOiBuNS5kZWZpbml0aW9uKG41LnNwZWNpYWwobjUucHJvcGVydHlOYW1lKSksIFVwZGF0ZU9wOiBuNS51cGRhdGVPcGVyYXRvciwgTGluZUNvbW1lbnQ6IG41LmxpbmVDb21tZW50LCBCbG9ja0NvbW1lbnQ6IG41LmJsb2NrQ29tbWVudCwgTnVtYmVyOiBuNS5udW1iZXIsIFN0cmluZzogbjUuc3RyaW5nLCBBcml0aE9wOiBuNS5hcml0aG1ldGljT3BlcmF0b3IsIExvZ2ljT3A6IG41LmxvZ2ljT3BlcmF0b3IsIEJpdE9wOiBuNS5iaXR3aXNlT3BlcmF0b3IsIENvbXBhcmVPcDogbjUuY29tcGFyZU9wZXJhdG9yLCBSZWdFeHA6IG41LnJlZ2V4cCwgRXF1YWxzOiBuNS5kZWZpbml0aW9uT3BlcmF0b3IsIEFycm93OiBuNS5mdW5jdGlvbihuNS5wdW5jdHVhdGlvbiksICI6IFNwcmVhZCI6IG41LnB1bmN0dWF0aW9uLCAiKCApIjogbjUucGFyZW4sICJbIF0iOiBuNS5zcXVhcmVCcmFja2V0LCAieyB9IjogbjUuYnJhY2UsICJJbnRlcnBvbGF0aW9uU3RhcnQgSW50ZXJwb2xhdGlvbkVuZCI6IG41LnNwZWNpYWwobjUuYnJhY2UpLCAiLiI6IG41LmRlcmVmT3BlcmF0b3IsICIsIDsiOiBuNS5zZXBhcmF0b3IsIFR5cGVOYW1lOiBuNS50eXBlTmFtZSwgVHlwZURlZmluaXRpb246IG41LmRlZmluaXRpb24objUudHlwZU5hbWUpLCAidHlwZSBlbnVtIGludGVyZmFjZSBpbXBsZW1lbnRzIG5hbWVzcGFjZSBtb2R1bGUgZGVjbGFyZSI6IG41LmRlZmluaXRpb25LZXl3b3JkLCAiYWJzdHJhY3QgZ2xvYmFsIFByaXZhY3kgcmVhZG9ubHkgb3ZlcnJpZGUiOiBuNS5tb2RpZmllciwgImlzIGtleW9mIHVuaXF1ZSBpbmZlciI6IG41Lm9wZXJhdG9yS2V5d29yZCwgSlNYQXR0cmlidXRlVmFsdWU6IG41LmF0dHJpYnV0ZVZhbHVlLCBKU1hUZXh0OiBuNS5jb250ZW50LCAiSlNYU3RhcnRUYWcgSlNYU3RhcnRDbG9zZVRhZyBKU1hTZWxmQ2xvc2VFbmRUYWcgSlNYRW5kVGFnIjogbjUuYW5nbGVCcmFja2V0LCAiSlNYSWRlbnRpZmllciBKU1hOYW1lU3BhY2VkTmFtZSI6IG41LnRhZ05hbWUsICJKU1hBdHRyaWJ1dGUvSlNYSWRlbnRpZmllciBKU1hBdHRyaWJ1dGUvSlNYTmFtZVNwYWNlZE5hbWUiOiBuNS5hdHRyaWJ1dGVOYW1lIH0pOwogIHZhciBDMTAgPSB7IF9fcHJvdG9fXzogbnVsbCwgZXhwb3J0OiAxOCwgYXM6IDIzLCBmcm9tOiAyOSwgZGVmYXVsdDogMzIsIGFzeW5jOiAzNywgZnVuY3Rpb246IDM4LCB0aGlzOiA0OCwgdHJ1ZTogNTYsIGZhbHNlOiA1Niwgdm9pZDogNjYsIHR5cGVvZjogNzAsIG51bGw6IDg2LCBzdXBlcjogODgsIG5ldzogMTIyLCBhd2FpdDogMTM5LCB5aWVsZDogMTQxLCBkZWxldGU6IDE0MiwgY2xhc3M6IDE1MiwgZXh0ZW5kczogMTU0LCBwdWJsaWM6IDE5NywgcHJpdmF0ZTogMTk3LCBwcm90ZWN0ZWQ6IDE5NywgcmVhZG9ubHk6IDE5OSwgaW5zdGFuY2VvZjogMjIwLCBpbjogMjIyLCBjb25zdDogMjI0LCBpbXBvcnQ6IDI1Niwga2V5b2Y6IDMwNywgdW5pcXVlOiAzMTEsIGluZmVyOiAzMTcsIGlzOiAzNTEsIGFic3RyYWN0OiAzNzEsIGltcGxlbWVudHM6IDM3MywgdHlwZTogMzc1LCBsZXQ6IDM3OCwgdmFyOiAzODAsIGludGVyZmFjZTogMzg3LCBlbnVtOiAzOTEsIG5hbWVzcGFjZTogMzk3LCBtb2R1bGU6IDM5OSwgZGVjbGFyZTogNDAzLCBnbG9iYWw6IDQwNywgZm9yOiA0MjgsIG9mOiA0MzcsIHdoaWxlOiA0NDAsIHdpdGg6IDQ0NCwgZG86IDQ0OCwgaWY6IDQ1MiwgZWxzZTogNDU0LCBzd2l0Y2g6IDQ1OCwgY2FzZTogNDY0LCB0cnk6IDQ3MCwgY2F0Y2g6IDQ3NCwgZmluYWxseTogNDc4LCByZXR1cm46IDQ4MiwgdGhyb3c6IDQ4NiwgYnJlYWs6IDQ5MCwgY29udGludWU6IDQ5NCwgZGVidWdnZXI6IDQ5OCB9OwogIHZhciBWMTUgPSB7IF9fcHJvdG9fXzogbnVsbCwgYXN5bmM6IDEwOSwgZ2V0OiAxMTEsIHNldDogMTEzLCBwdWJsaWM6IDE2MSwgcHJpdmF0ZTogMTYxLCBwcm90ZWN0ZWQ6IDE2MSwgc3RhdGljOiAxNjMsIGFic3RyYWN0OiAxNjUsIG92ZXJyaWRlOiAxNjcsIHJlYWRvbmx5OiAxNzMsIG5ldzogMzU1IH07CiAgdmFyIEkxOSA9IHsgX19wcm90b19fOiBudWxsLCAiPCI6IDEyOSB9OwogIHZhciBKNyA9IFMxMy5kZXNlcmlhbGl6ZSh7IHZlcnNpb246IDE0LCBzdGF0ZXM6ICIkOFNPYFFkT09PJ1FRKEN8TycjQ2hPJ1hPV08nI0RWTylkUWRPJyNEXU8pdFFkTycjRGhPKXtRZE8nI0RyTy14UWRPJyNEeE9PUU8nI0VdJyNFXU8uXVFgTycjRVtPLmJRYE8nI0VbT09RKENbJyNFZicjRWZPMGFRKEN8TycjSXRPMndRKEN8TycjSXVPM2VRYE8nI0V6TzNqUSFiTycjRmFPT1EoQ1snI0ZTJyNGU08zck8jdE8nI0ZTTzRRUSZqTycjRmhPNWJRYE8nI0ZnT09RKENbJyNJdScjSXVPT1EoQ1cnI0l0JyNJdE9PUVMnI0peJyNKXk81Z1FgTycjSHBPNWxRKENoTycjSHFPT1FTJyNJaCcjSWhPT1FTJyNIcicjSHJRYFFkT09PKXtRZE8nI0RqTzV0UWBPJyNHW081eVEmak8nI0NtTzZYUWBPJyNFWk82ZFFgTycjRWdPNmlRLFVPJyNGUk83VFFgTycjR1tPN1lRYE8nI0dgTzdlUWBPJyNHYE83c1FgTycjR2NPN3NRYE8nI0dkTzdzUWBPJyNHZk81dFFgTycjR2lPOGRRYE8nI0dsTzlyUWBPJyNDZE86U1FgTycjR3lPOltRYE8nI0hQTzpbUWBPJyNIUk9gUWRPJyNIVE86W1FgTycjSFZPOltRYE8nI0hZTzphUWBPJyNIYE86ZlEoQ2pPJyNIZk8pe1FkTycjSGhPOnFRKENqTycjSGpPOnxRKENqTycjSGxPNWxRKENoTycjSG5PKXtRZE8nI0RXT09PVycjSHQnI0h0TztYT1dPLDU5cU9PUShDWyw1OXEsNTlxTz1qUXRPJyNDaE89dFFkTycjSHVPPlhRYE8nI0l2T0BXUXRPJyNJdk8nZFFkTycjSXZPQF9RYE8sNTl3T0B1UTdbTycjRGJPQW5RYE8nI0VdT0F7UWBPJyNKUk9CV1FgTycjSlFPQldRYE8nI0pRT0JgUWBPLDU6eU9CZVFgTycjSlBPQmxRYU8nI0R5TzV5USZqTycjRVpPQnpRYE8nI0VaT0NWUXBPJyNGUk9PUShDWyw1OlMsNTpTT0NfUWRPLDU6U09FXVEoQ3xPLDU6Xk9FeVFgTyw1OmRPRmRRKENoTycjSk9PN1lRYE8nI0l9T0ZrUWBPJyNJfU9Gc1FgTyw1OnhPRnhRYE8nI0l9T0dXUWRPLDU6dk9JV1Emak8nI0VXT0plUWBPLDU6dk9Ld1Emak8nI0RsT0xPUWRPJyNEcU9MWVE3W08sNTtQTyl7UWRPLDU7UE9PUVMnI0VyJyNFck9PUVMnI0V0JyNFdE8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtST09RUycjRXgnI0V4T0xiUWRPLDU7Y09PUShDWyw1O2gsNTtoT09RKENbLDU7aSw1O2lPTmJRYE8sNTtpT09RKENbLDU7aiw1O2pPKXtRZE8nI0lQT05nUShDaE8sNTxUTyEgUlEmak8sNTtSTyl7UWRPLDU7Zk8hIGtRIWJPJyNKVk8hIFlRIWJPJyNKVk8hIHJRIWJPJyNKVk8hIVRRIWJPLDU7cU9PT08sNTt7LDU7e08hIWNRZE8nI0ZjT09PTycjSU8nI0lPTzNyTyN0Tyw1O25PISFqUSFiTycjRmVPT1EoQ1ssNTtuLDU7bk8hI1dRLFZPJyNDck9PUShDXScjQ3UnI0N1TyEja1FgTycjQ3VPISNwT1dPJyNDeU8hJF5RLFZPLDU8UU8hJGVRYE8sNTxTTyEldFEmak8nI0ZyTyEmUlFgTycjRnNPISZXUWBPJyNGc08hJl1RJmpPJyNGd08hJ1tRN1tPJyNGe08hJ31RLFZPJyNJcU9PUShDXScjSXEnI0lxTyEoWFFhTycjSXBPIShnUWBPJyNJb08hKG9RYE8nI0NxT09RKENdJyNDcycjQ3NPT1EoQ10nI0N8JyNDfE8hKHdRYE8nI0RPT0pqUSZqTycjRmpPSmpRJmpPJyNGbE8hKHxRYE8nI0ZuTyEpUlFgTycjRm9PISZXUWBPJyNGdU9KalEmak8nI0Z6TyEpV1FgTycjRV5PISlvUWBPLDU8Uk9gUWRPLDU+W09PUVMnI0lrJyNJa09PUVMsNT5dLDU+XU9PUVMtRTtwLUU7cE8hK2tRKEN8Tyw1OlVPT1EoQ1gnI0NwJyNDcE8hLFtRJmtPLDU8dk9PUU8nI0NmJyNDZk8hLG1RKENoTycjSWxPNWJRYE8nI0lsTzphUWBPLDU5WE8hLU9RIWJPLDU5WE8hLVdRJmpPLDU5WE81eVEmak8sNTlYTyEtY1FgTyw1OnZPIS1rUWBPJyNHeE8hLXlRYE8nI0piTyl7UWRPLDU7a08hLlJRN1tPLDU7bU8hLldRYE8sNT1jTyEuXVFgTyw1PWNPIS5iUWBPLDU9Y081bFEoQ2hPLDU9Y081dFFgTyw1PHZPIS5wUWBPJyNFX08hL1VRN1tPJyNFYE9PUShDVycjSlAnI0pQTyEvZ1EoQ2hPJyNKX081bFEoQ2hPLDU8ek83c1FgTyw1PVFPT1FQJyNDcicjQ3JPIS9yUSFiTyw1PH1PIS96USFjTyw1PU9PITBWUWBPLDU9UU8hMFtRcE8sNT1UTzphUWBPJyNHbk81dFFgTycjR3BPITBkUWBPJyNHcE81eVEmak8nI0dzTyEwaVFgTycjR3NPT1FTLDU9Vyw1PVdPITBuUWBPJyNHdE8hMHZRYE8nI0NtTyEwe1FgTyw1OU9PITFWUWBPLDU5T08hM1hRZE8sNTlPT09RUyw1OU8sNTlPTyEzZlEoQ2hPLDU5T08pe1FkTyw1OU9PITNxUWRPJyNHe09PUVMnI0d8JyNHfE9PUVMnI0d9JyNHfU9gUWRPLDU9ZU8hNFJRYE8sNT1lTyl7UWRPJyNEeE9gUWRPLDU9a09gUWRPLDU9bU8hNFdRYE8sNT1vT2BRZE8sNT1xTyE0XVFgTyw1PXRPITRiUWRPLDU9ek9PUVMsNT5RLDU+UU8pe1FkTyw1PlFPNWxRKENoTyw1PlNPT1FTLDU+VSw1PlVPIThjUWBPLDU+VU9PUVMsNT5XLDU+V08hOGNRYE8sNT5XT09RUyw1PlksNT5ZTyE4aFFwTyw1OXJPT09XLUU7ci1FO3JPT1EoQ1sxRy9dMUcvXU8hOG1RdE8sNT5hTydkUWRPLDU+YU9PUU8sNT5mLDU+Zk8hOHdRZE8nI0h1T09RTy1FO3MtRTtzTyE5VVFgTyw1P2JPITleUXRPLDU/Yk8hOWVRYE8sNT9sT09RKENbMUcvYzFHL2NPITltUSFiTycjRFRPT1FPJyNJeCcjSXhPKXtRZE8nI0l4TyE6W1EhYk8nI0l4TyE6eVEhYk8nI0RjTyE7W1E3W08nI0RjTyE9Z1FkTycjRGNPIT1uUWBPJyNJd08hPXZRYE8sNTl8TyE9e1FgTycjRWFPIT5aUWBPJyNKU08hPmNRYE8sNTp6TyE+eVE3W08nI0RjTyl7UWRPLDU/bU8hP1RRYE8nI0h6T09RTy1FO3gtRTt4TyE5ZVFgTyw1P2xPT1EoQ1cxRzBlMUcwZU8hQGFRN1tPJyNEfE9PUShDWyw1OmUsNTplTyl7UWRPLDU6ZU9JV1Emak8sNTplTyFAaFFhTyw1OmVPOmFRYE8sNTp1TyEtT1EhYk8sNTp1TyEtV1Emak8sNTp1TzV5USZqTyw1OnVPT1EoQ1sxRy9uMUcvbk9PUShDWzFHME8xRzBPT09RKENXJyNFVicjRVZPKXtRZE8sNT9qTyFAc1EoQ2hPLDU/ak8hQVVRKENoTyw1P2pPIUFdUWBPLDU/aU8hQWVRYE8nI0h8TyFBXVFgTyw1P2lPT1EoQ1cxRzBkMUcwZE83WVFgTyw1P2lPT1EoQ1sxRzBiMUcwYk8hQlBRKEN8TzFHMGJPIUNSUShDeU8sNTpyT09RKENdJyNGcScjRnFPIUNvUShDfU8nI0lxT0dXUWRPMUcwYk8hRXFRLFZPJyNJeU8hRXtRYE8sNTpXTyFGUVF0TycjSXpPKXtRZE8nI0l6TyFGW1FgTyw1Ol1PT1EoQ10nI0RUJyNEVE9PUShDWzFHMGsxRzBrTyFGYVFgTzFHMGtPIUhyUShDfE8xRzBtTyFIeVEoQ3xPMUcwbU8hS15RKEN8TzFHMG1PIUtlUShDfE8xRzBtTyFNbFEoQ3xPMUcwbU8hTlBRKEN8TzFHMG1PIyFwUShDfE8xRzBtTyMhd1EoQ3xPMUcwbU8jJVtRKEN8TzFHMG1PIyVjUShDfE8xRzBtTyMnV1EoQ3xPMUcwbU8jKlFRTWxPJyNDaE8jK3tRTWxPMUcwfU8jLXZRTWxPJyNJdU9PUShDWzFHMVQxRzFUTyMuWlEoQ3xPLDU+a09PUShDVy1FO30tRTt9TyMuelEoQ31PMUcwbU9PUShDWzFHMG0xRzBtTyMxUFEoQ3xPMUcxUU8jMXBRIWJPLDU7c08jMXVRIWJPLDU7dE8jMXpRIWJPJyNGW08jMmBRYE8nI0ZaT09RTycjSlcnI0pXT09RTycjSH0nI0h9TyMyZVEhYk8xRzFdT09RKENbMUcxXTFHMV1PT09PMUcxZjFHMWZPIzJzUU1sTycjSXRPIzJ9UWBPLDU7fU9MYlFkTyw1O31PT09PLUU7fC1FO3xPT1EoQ1sxRzFZMUcxWU9PUShDWyw1PFAsNTxQTyMzU1EhYk8sNTxQT09RKENdLDU5YSw1OWFPSVdRJmpPJyNDe09PT1cnI0hzJyNIc08jM1hPV08sNTllT09RKENdLDU5ZSw1OWVPKXtRZE8xRzFsTyEpUlFgTycjSVJPIzNkUWBPLDU8ZU9PUShDXSw1PGIsNTxiT09RTycjR1YnI0dWT0pqUSZqTyw1PHBPT1FPJyNHWCcjR1hPSmpRJmpPLDU8ck9JV1Emak8sNTx0T09RTzFHMW4xRzFuTyMzb1FxTycjQ3BPIzRTUXFPLDU8Xk8jNFpRYE8nI0paTzV0UWBPJyNKWk8jNGlRYE8sNTxgT0pqUSZqTyw1PF9PIzRuUWBPJyNGdE8jNHlRYE8sNTxfTyM1T1FxTycjRnFPIzVdUXFPJyNKW08jNWdRYE8nI0pbT0lXUSZqTycjSltPIzVsUWBPLDU8Y09PUShDVycjRGcnI0RnTyM1cVEhYk8nI0Z8TyEnVlE3W08nI0Z8TyEnVlE3W08nI0dPTyM2U1FgTycjR1BPISZXUWBPJyNHU08jNlhRKENoTycjSVRPIzZkUTdbTyw1PGdPT1EoQ10sNTxnLDU8Z08jNmtRN1tPJyNGfE8jNnlRN1tPJyNGfU8jN1JRN1tPJyNGfU9PUShDXSw1PHUsNTx1T0pqUSZqTyw1P1tPSmpRJmpPLDU/W08jN1dRYE8nI0lVTyM3Y1FgTyw1P1pPIzdrUWBPLDU5XU9PUShDXScjQ2gnI0NoTyM4W1EsVk8sNTlqT09RKENdLDU5aiw1OWpPIzh9USxWTyw1PFVPIzlwUSxWTyw1PFdPIzl6UWBPLDU8WU9PUShDXSw1PFosNTxaTyM6UFFgTyw1PGFPIzpVUSxWTyw1PGZPR1dRZE8xRzFtTyM6ZlFgTzFHMW1PT1FTMUczdjFHM3ZPT1EoQ1sxRy9wMUcvcE9OYlFgTzFHL3BPT1FTMUcyYjFHMmJPSVdRJmpPMUcyYk8pe1FkTzFHMmJPSVdRJmpPMUcyYk8jOmtRYU8xRzJiTyM8UVEmak8nI0VXT09RKENXLDU/Vyw1P1dPIzxbUShDaE8sNT9XT09RUzFHLnMxRy5zTzphUWBPMUcuc08hLU9RIWJPMUcuc08hLVdRJmpPMUcuc08jPG1RYE8xRzBiTyM8clFgTycjQ2hPIzx9UWBPJyNKY08jPVZRYE8sNT1kTyM9W1FgTycjSmNPIz1hUWBPJyNKY08jPWlRYE8nI0leTyM9d1FgTyw1P3xPIz5QUXRPMUcxVk9PUShDWzFHMVgxRzFYTzV0UWBPMUcyfU8jPldRYE8xRzJ9TyM+XVFgTzFHMn1PIz5iUWBPMUcyfU9PUVMxRzJ9MUcyfU8jPmdRJmtPMUcyYk83WVFgTycjSlFPN1lRYE8nI0VhTzdZUWBPJyNJV08jPnhRKENoTyw1P3lPT1FTMUcyZjFHMmZPITBWUWBPMUcybE9JV1Emak8xRzJpTyM/VFFgTzFHMmlPT1FTMUcyajFHMmpPSVdRJmpPMUcyak8jP1lRYU8xRzJqTyM/YlE3W08nI0doT09RUzFHMmwxRzJsTyEnVlE3W08nI0lZTyEwW1FwTzFHMm9PT1FTMUcybzFHMm9PT1FTLDU9WSw1PVlPIz9qUSZrTyw1PVtPNXRRYE8sNT1bTyM2U1FgTyw1PV9PNWJRYE8sNT1fTyEtT1EhYk8sNT1fTyEtV1Emak8sNT1fTzV5USZqTyw1PV9PIz97UWBPJyNKYU8jQFdRYE8sNT1gT09RUzFHLmoxRy5qTyNAXVEoQ2hPMUcuak8jQGhRYE8xRy5qTyNAbVFgTzFHLmpPNWxRKENoTzFHLmpPI0B1UXRPLDVAT08jQVBRYE8sNUBPTyNBW1FkTyw1PWdPI0FjUWBPLDU9Z083WVFgTyw1QE9PT1FTMUczUDFHM1BPYFFkTzFHM1BPT1FTMUczVjFHM1ZPT1FTMUczWDFHM1hPOltRYE8xRzNaTyNBaFFkTzFHM11PI0VjUWRPJyNIW09PUVMxRzNgMUczYE8jRXBRYE8nI0hiTzphUWBPJyNIZE9PUVMxRzNmMUczZk8jRXhRZE8xRzNmTzVsUShDaE8xRzNsT09RUzFHM24xRzNuT09RKENXJyNGeCcjRnhPNWxRKENoTzFHM3BPNWxRKENoTzFHM3JPT09XMUcvXjFHL15PI0l2UXBPLDU8VE8jSk9RdE8xRzN7T09RTzFHNFExRzRRTyl7UWRPLDU+YU8jSllRYE8xRzR8TyNKYlFgTzFHNVdPI0pqUWBPLDU/ZE9MYlFkTyw1OntPN1lRYE8sNTp7TzphUWBPLDU5fU9MYlFkTyw1OX1PIS1PUSFiTyw1OX1PI0pvUU1sTyw1OX1PT1FPLDU6eyw1OntPI0p5UTdbTycjSHZPI0thUWBPLDU/Y09PUShDWzFHL2gxRy9oTyNLaVE3W08nI0h7TyNLfVFgTyw1P25PT1EoQ1cxRzBmMUcwZk8hO1tRN1tPLDU5fU8jTFZRdE8xRzVYTzdZUWBPLDU+Zk9PUShDVycjRVMnI0VTTyNMYVEoRGpPJyNFVE8hQFhRN1tPJyNEfU9PUU8nI0h5JyNIeU8jTHtRN1tPLDU6aE9PUShDWyw1OmgsNTpoTyNNU1E3W08nI0R9TyNNZVE3W08nI0R9TyNNbFE3W08nI0VZTyNNb1E3W08nI0VUTyNNfFE3W08nI0VUTyFAWFE3W08nI0VUTyNOYVFgTzFHMFBPI05mUXFPMUcwUE9PUShDWzFHMFAxRzBQTyl7UWRPMUcwUE9JV1Emak8xRzBQT09RKENbMUcwYTFHMGFPOmFRYE8xRzBhTyEtT1EhYk8xRzBhTyEtV1Emak8xRzBhTyNObVEoQ3xPMUc1VU8pe1FkTzFHNVVPI059UShDaE8xRzVVTyQgYFFgTzFHNVRPN1lRYE8sNT5oT09RTyw1PmgsNT5oTyQgaFFgTyw1PmhPT1FPLUU7ei1FO3pPJCBgUWBPMUc1VE8kIHZRKEN9Tyw1OWpPJCN4UShDfU8sNTxVTyQlfVEoQ31PLDU8V08kKFNRKEN9Tyw1PGZPT1EoQ1s3KyV8NyslfE8kKl9RKEN8TzcrJXxPJCtPUSZqTycjSHdPJCtZUWBPLDU/ZU9PUShDXTFHL3IxRy9yTyQrYlFkTycjSHhPJCtvUWBPLDU/Zk8kK3dRdE8sNT9mT09RKENbMUcvdzFHL3dPT1EoQ1s3KyZWNysmVk8kLFJRTWxPLDU6Xk8pe1FkTzcrJmlPJCxdUU1sTyw1OlVPT1FPMUcxXzFHMV9PT1FPMUcxYDFHMWBPJCxqUSFMUU8sNTt2T0xiUWRPLDU7dU9PUU8tRTt7LUU7e09PUShDWzcrJnc3KyZ3T09PTzcrJ1E3KydRT09PTzFHMWkxRzFpTyQsdVFgTzFHMWlPT1EoQ1sxRzFrMUcxa08kLHpRcU8sNTlnT09PVy1FO3EtRTtxT09RKENdMUcvUDFHL1BPJC1SUShDfE83KydXT09RKENdLDU+bSw1Pm1PJC1yUWBPLDU+bU9PUShDXTFHMlAxRzJQUCQtd1FgTycjSVJQT1EoQ10tRTxQLUU8UE8kLmhRLFZPMUcyW08kL1pRLFZPMUcyXk8kL2VRcU8xRzJgT09RKENdMUcxeDFHMXhPJC9sUWBPJyNJUU8kL3pRYE8sNT91TyQvelFgTyw1P3VPJDBTUWBPLDU/dU8kMF9RYE8sNT91T09RTzFHMXoxRzF6TyQwbVEsVk8xRzF5T0pqUSZqTzFHMXlPJDB9USZqTycjSVNPJDFfUWBPLDU/dk9JV1Emak8sNT92TyQxZ1FxTyw1P3ZPT1EoQ10xRzF9MUcxfU9PUShDVyw1PGgsNTxoT09RKENXLDU8aSw1PGlPJDFxUWBPLDU8aU8jNX1RYE8sNTxpTyEtT1EhYk8sNTxoTyQxdlFgTyw1PGpPT1EoQ1csNTxrLDU8a08kMXFRYE8sNTxuT09RTyw1Pm8sNT5vT09RTy1FPFItRTxST09RKENdMUcyUjFHMlJPISdWUTdbTyw1PGhPJDJPUWBPLDU8aU8hJ1ZRN1tPLDU8ak8hJ1ZRN1tPLDU8aU8kMlpRLFZPMUc0dk8kMmVRLFZPMUc0dk9PUU8sNT5wLDU+cE9PUU8tRTxTLUU8U09PUVAxRy53MUcud08hLlJRN1tPLDU5bE8pe1FkTyw1OWxPJDJyUWBPMUcxdE9KalEmak8xRzF7TyQyd1EoQ3xPNysnWE9PUShDWzcrJ1g3KydYT0dXUWRPNysnWE9PUShDWzcrJVs3KyVbTyQzaFFxTycjSl1PI05hUWBPNysnfE8kM3JRYE83Kyd8TyQzelFxTzcrJ3xPT1FTNysnfDcrJ3xPSVdRJmpPNysnfE8pe1FkTzcrJ3xPSVdRJmpPNysnfE8kNFVRKEN5TycjQ2hPJDRpUShDeU8sNTxsTyQ1WlFgTyw1PGxPT1EoQ1cxRzRyMUc0ck9PUVM3KyRfNyskX086YVFgTzcrJF9PIS1PUSFiTzcrJF9PR1dRZE83KyV8TyQ1YFFgTycjSV1PJDVxUWBPLDU/fU9PUU8xRzNPMUczT081dFFgTyw1P31PJDVxUWBPLDU/fU8kNXlRYE8sNT99T09RTyw1PngsNT54T09RTy1FPFstRTxbT09RKENbNysmcTcrJnFPJDZPUWBPNysoaU81bFEoQ2hPNysoaU81dFFgTzcrKGlPJDZUUWBPNysoaU8kNllRYU83Kyd8T09RKENXLDU+ciw1PnJPT1EoQ1ctRTxVLUU8VU9PUVM3KyhXNysoV08kNmhRKEN5TzcrKFRPSVdRJmpPNysoVE8kNnJRcU83KyhVT09RUzcrKFU3KyhVT0lXUSZqTzcrKFVPJDZ5UWBPJyNKYE8kN1VRYE8sNT1TT09RTyw1PnQsNT50T09RTy1FPFctRTxXT09RUzcrKFo3KyhaTyQ4T1E3W08nI0dxT09RUzFHMnYxRzJ2T0lXUSZqTzFHMnZPKXtRZE8xRzJ2T0lXUSZqTzFHMnZPJDhWUWFPMUcydk8kOGVRJmtPMUcydk81bFEoQ2hPMUcyeU8jNlNRYE8xRzJ5TzViUWBPMUcyeU8hLU9RIWJPMUcyeU8hLVdRJmpPMUcyeU8kOHZRYE8nI0lbTyQ5UlFgTyw1P3tPJDlaUTdbTyw1P3tPT1EoQ1cxRzJ6MUcyek9PUVM3KyRVNyskVU8kOWNRYE83KyRVTzVsUShDaE83KyRVTyQ5aFFgTzcrJFVPKXtRZE8xRzVqTyl7UWRPMUc1a08kOW1RZE8xRzNSTyQ5dFFgTzFHM1JPJDl5UWRPMUczUk8kOlFRKENoTzFHNWpPT1FTNysoazcrKGtPNWxRKENoTzcrKHVPYFFkTzcrKHdPT1FTJyNKZicjSmZPT1FTJyNJXycjSV9PJDpbUWRPLDU9dk9PUVMsNT12LDU9dk8pe1FkTycjSF1PJDppUWBPJyNIX09PUVMsNT18LDU9fE83WVFgTyw1PXxPT1FTLDU+Tyw1Pk9PT1FTNyspUTcrKVFPT1FTNyspVzcrKVdPT1FTNyspWzcrKVtPT1FTNyspXjcrKV5PT1FPMUc1TzFHNU9PJDpuUU1sTzFHMGdPJDp4UWBPMUcwZ09PUU8xRy9pMUcvaU8kO1RRTWxPMUcvaU86YVFgTzFHL2lPTGJRZE8nI0RjT09RTyw1PmIsNT5iT09RTy1FO3QtRTt0T09RTyw1PmcsNT5nT09RTy1FO3ktRTt5TyEtT1EhYk8xRy9pTzphUWBPLDU6aU9PUU8sNTpvLDU6b08pe1FkTyw1Om9PJDtfUShDaE8sNTpvTyQ7alEoQ2hPLDU6b08hLU9RIWJPLDU6aU9PUU8tRTt3LUU7d09PUShDWzFHMFMxRzBTTyFAWFE3W08sNTppTyQ7eFE3W08sNTppTyQ8WlEoRGpPLDU6b08kPHVRN1tPLDU6aU8hQFhRN1tPLDU6b09PUU8sNTp0LDU6dE8kPHxRN1tPLDU6b08kPVpRKENoTyw1Om9PT1EoQ1s3KyVrNysla08jTmFRYE83KyVrTyNOZlFxTzcrJWtPT1EoQ1s3KyV7Nysle086YVFgTzcrJXtPIS1PUSFiTzcrJXtPJD1vUShDfE83KypwTyl7UWRPNysqcE9PUU8xRzRTMUc0U083WVFgTzFHNFNPJD5QUWBPNysqb08kPlhRKEN9TzFHMltPJEBeUShDfU8xRzJeTyRCY1EoQ31PMUcxeU8kRG5RLFZPLDU+Y09PUU8tRTt1LUU7dU8kRHhRdE8sNT5kTyl7UWRPLDU+ZE9PUU8tRTt2LUU7dk8kRVNRYE8xRzVRTyRFW1FNbE8xRzBiTyRHY1FNbE8xRzBtTyRHalFNbE8xRzBtTyRJa1FNbE8xRzBtTyRJclFNbE8xRzBtTyRLZ1FNbE8xRzBtTyRLelFNbE8xRzBtTyROWFFNbE8xRzBtTyROYFFNbE8xRzBtTyUhYVFNbE8xRzBtTyUhaFFNbE8xRzBtTyUkXVFNbE8xRzBtTyUkcFEoQ3xPPDxKVE8lJXJRTW1PMUcwbU8lJ3xRTW1PJyNJcU8lKWlRTWxPMUcxUU9MYlFkTycjRl5PT1FPJyNKWCcjSlhPT1FPMUcxYjFHMWJPJSl2UWBPMUcxYU8lKXtRTWxPLDU+a09PT083KydUNysnVE9PT1cxRy9SMUcvUk9PUShDXTFHNFgxRzRYT0pqUSZqTzcrJ3pPJSpWUWBPLDU+bE81dFFgTyw1PmxPT1FPLUU8Ty1FPE9PJSplUWBPMUc1YU8lKmVRYE8xRzVhTyUqbVFgTzFHNWFPJSp4USxWTzcrJ2VPJStZUXFPLDU+bk8lK2RRYE8sNT5uT0lXUSZqTyw1Pm5PT1FPLUU8US1FPFFPJStpUXFPMUc1Yk8lK3NRYE8xRzViT09RKENXMUcyVDFHMlRPJDFxUWBPMUcyVE9PUShDVzFHMlMxRzJTTyUre1FgTzFHMlVPSVdRJmpPMUcyVU9PUShDVzFHMlkxRzJZTyEtT1EhYk8xRzJTTyM1fVFgTzFHMlRPJSxRUWBPMUcyVU8lLFlRYE8xRzJUT0pqUSZqTzcrKmJPT1EoQ10xRy9XMUcvV08lLGVRYE8xRy9XT09RKENdNysnYDcrJ2BPJSxqUSxWTzcrJ2dPJSx6UShDfE88PEpzT09RKENbPDxKczw8SnNPSVdRJmpPJyNJVk8lLWtRYE8sNT93T09RUzw8S2g8PEtoT0lXUSZqTzw8S2hPI05hUWBPPDxLaE8lLXNRYE88PEtoTyUte1FxTzw8S2hPSVdRJmpPMUcyV09PUVM8PEd5PDxHeU86YVFgTzw8R3lPJS5WUShDfE88PEloT09RKENbPDxJaDw8SWhPT1FPLDU+dyw1PndPJS52UWBPLDU+d08lLntRYE8sNT53T09RTy1FPFotRTxaTyUvVFFgTzFHNWlPJS9UUWBPMUc1aU81dFFgTzFHNWlPJS9dUWBPPDxMVE9PUVM8PExUPDxMVE8lL2JRYE88PExUTzVsUShDaE88PExUTyl7UWRPPDxLaE9JV1Emak88PEtoT09RUzw8S288PEtvTyQ2aFEoQ3lPPDxLb09PUVM8PEtwPDxLcE8kNnJRcU88PEtwTyUvZ1E3W08nI0lYTyUvclFgTyw1P3pPTGJRZE8sNT96T09RUzFHMm4xRzJuTyNMYVEoRGpPJyNFVE8hQFhRN1tPJyNHck9PUU8nI0laJyNJWk8lL3pRN1tPLDU9XU9PUVMsNT1dLDU9XU8lMFJRN1tPJyNFVE8lMF5RN1tPJyNFVE8lMHVRN1tPJyNFVE8lMVBRN1tPJyNHck8lMWJRYE83KyhiTyUxZ1FgTzcrKGJPJTFvUXFPNysoYk9PUVM3KyhiNysoYk9JV1Emak83KyhiTyl7UWRPNysoYk9JV1Emak83KyhiTyUxeVFhTzcrKGJPT1FTNysoZTcrKGVPNWxRKENoTzcrKGVPIzZTUWBPNysoZU81YlFgTzcrKGVPIS1PUSFiTzcrKGVPJTJYUWBPLDU+dk9PUU8tRTxZLUU8WU9PUU8nI0d1JyNHdU8lMmRRYE8xRzVnTzVsUShDaE88PEdwT09RUzw8R3A8PEdwTyUybFFgTzw8R3BPJTJxUWBPNysrVU8lMnZRYE83KytWT09RUzcrKG03KyhtTyUye1FgTzcrKG1PJTNRUWRPNysobU8lM1hRYE83KyhtTyl7UWRPNysrVU8pe1FkTzcrK1ZPT1FTPDxMYTw8TGFPT1FTPDxMYzw8TGNPT1FTLUU8XS1FPF1PT1FTMUczYjFHM2JPJTNeUWBPLDU9d09PUVMsNT15LDU9eU8lM2NRYE8xRzNoT0xiUWRPNysmUk9PUU83KyVUNyslVE8lM2hRTWxPMUc1WE86YVFgTzcrJVRPT1FPMUcwVDFHMFRPJTNyUShDfE8xRzBaT09RTzFHMFoxRzBaTyl7UWRPMUcwWk8lM3xRKENoTzFHMFpPOmFRYE8xRzBUTyEtT1EhYk8xRzBUTyFAWFE3W08xRzBUTyU0WFEoQ2hPMUcwWk8lNGdRN1tPMUcwVE8lNHhRKENoTzFHMFpPJTVeUShEak8xRzBaTyU1aFE3W08xRzBUTyFAWFE3W08xRzBaT09RKENbPDxJVjw8SVZPT1EoQ1s8PElnPDxJZ086YVFgTzw8SWdPJTVvUShDfE88PE5bT09RTzcrKW43KyluTyU2UFEoQ31PNysnZU8lOFtRKEN9TzcrJ2dPJTpnUXRPMUc0T08lOnFRTWxPNyslfE8lO2dRTW1PLDU5ak8lPWhRTW1PLDU8VU8lP2xRTW1PLDU8V08lQVtRTW1PLDU8Zk8lQn1RTWxPNysnV08lQ1tRTWxPNysnWE8lQ2lRYE8sNTt4T09RTzcrJns3KyZ7TyVDblEsVk88PEtmT09RTzFHNFcxRzRXTyVDdVFgTzFHNFdPJURRUWBPMUc0V08lRGBRYE83Kyp7TyVEYFFgTzcrKntPSVdRJmpPMUc0WU8lRGhRcU8xRzRZTyVEclFgTzcrKnxPT1EoQ1c3KydvNysnb08kMXFRYE83KydwTyVEelFxTzcrJ3BPT1EoQ1c3KyduNysnbk8kMXFRYE83KydvTyVFUlFgTzcrJ3BPSVdRJmpPNysncE8jNX1RYE83KydvTyVFV1EsVk88PE18T09RKENdNyskcjcrJHJPJUViUXFPLDU+cU9PUU8tRTxULUU8VE8jTmFRYE9BTkFTT09RU0FOQVNBTkFTT0lXUSZqT0FOQVNPJUVsUShDeU83KydyT09RU0FOPWVBTj1lTzV0UWBPMUc0Y09PUU8xRzRjMUc0Y08lRXxRYE8xRzRjTyVGUlFgTzcrK1RPJUZSUWBPNysrVE81bFEoQ2hPQU5Bb08lRlpRYE9BTkFvT09RU0FOQW9BTkFvTyVGYFFgT0FOQVNPJUZoUXFPQU5BU09PUVNBTkFaQU5BWk9PUVNBTkFbQU5BW08lRnJRYE8sNT5zT09RTy1FPFYtRTxWTyVGfVFNbE8xRzVmTyM2U1FgTyw1PV5PNWJRYE8sNT1eTyEtT1EhYk8sNT1eT09RTy1FPFgtRTxYT09RUzFHMncxRzJ3TyQ8WlEoRGpPLDU6b08hQFhRN1tPLDU9Xk8lR1hRN1tPLDU9Xk8lR2pRN1tPLDU6b09PUVM8PEt8PDxLfE9JV1Emak88PEt8TyUxYlFgTzw8S3xPJUd0UWBPPDxLfE8lR3xRcU88PEt8Tyl7UWRPPDxLfE9JV1Emak88PEt8T09RUzw8TFA8PExQTzVsUShDaE88PExQTyM2U1FgTzw8TFBPNWJRYE88PExQTyVIV1E3W08xRzRiTyVIYFFgTzcrK1JPT1FTQU49W0FOPVtPNWxRKENoT0FOPVtPT1FTPDxOcDw8TnBPT1FTPDxOcTw8TnFPT1FTPDxMWDw8TFhPJUhoUWBPPDxMWE8lSG1RZE88PExYTyVIdFFgTzw8TnBPJUh5UWBPPDxOcU9PUVMxRzNjMUczY086YVFgTzcrKVNPJUlPUU1sTzw8SW1PT1FPPDxIbzw8SG9PT1FPNysldTcrJXVPJTNyUShDfE83KyV1Tyl7UWRPNysldU9PUU83KyVvNyslb086YVFgTzcrJW9PIS1PUSFiTzcrJW9PJUlZUShDaE83KyV1TyFAWFE3W083KyVvTyVJZVEoQ2hPNysldU8lSXNRN1tPNyslb08lSlVRKENoTzcrJXVPT1EoQ1tBTj9SQU4/Uk8lSmpRTWxPPDxKVE8lSndRTW1PMUcxeU8lTU9RTW1PMUcyW08mIFNRTW1PMUcyXk8mIXJRTWxPPDxKc08mI1BRTWxPPDxJaE9PUU8xRzFkMUcxZE9KalEmak9BTkFRT09RTzcrKXI3KylyTyYjXlFgTzcrKXJPJiNpUWBPPDxOZ08mI3FRcU83Kyl0T09RKENXPDxLWzw8S1tPJDFxUWBPPDxLW09PUShDVzw8S1o8PEtaTyYje1FxTzw8S1tPJDFxUWBPPDxLWk9PUVNHMjZuRzI2bk8jTmFRYE9HMjZuT09RTzcrKX03Kyl9TzV0UWBPNyspfU8mJFNRYE88PE5vT09RU0cyN1pHMjdaTzVsUShDaE9HMjdaT0lXUSZqT0cyNm5PTGJRZE8xRzRfTyYkW1FgTzcrK1FPNWxRKENoTzFHMnhPIzZTUWBPMUcyeE81YlFgTzFHMnhPIS1PUSFiTzFHMnhPIUBYUTdbTzFHMnhPJTVeUShEak8xRzBaTyYkZFE3W08xRzJ4TyUxYlFgT0FOQWhPT1FTQU5BaEFOQWhPSVdRJmpPQU5BaE8mJHVRYE9BTkFoTyYkfVFxT0FOQWhPT1FTQU5Ba0FOQWtPNWxRKENoT0FOQWtPIzZTUWBPQU5Ba09PUU8nI0d2JyNHdk9PUU83Kyl8NyspfE9PUVNHMjJ2RzIydk9PUVNBTkFzQU5Bc08mJVhRYE9BTkFzT09RU0FORFtBTkRbT09RU0FORF1BTkRdT09RUzw8TG48PExuT09RTzw8SWE8PElhTyUzclEoQ3xPPDxJYU9PUU88PElaPDxJWk86YVFgTzw8SVpPKXtRZE88PElhTyEtT1EhYk88PElaTyYlXlEoQ2hPPDxJYU8hQFhRN1tPPDxJWk8mJWlRKENoTzw8SWFPJiV3UU1tTzcrJ2VPJidqUU1tTzcrJ2dPJildUSxWT0cyNmxPT1FPPDxNXjw8TV5PT1EoQ1dBTkB2QU5Adk8kMXFRYE9BTkB2T09RKENXQU5AdUFOQHVPT1FTTEQsWUxELFlPT1FPPDxNaTw8TWlPT1FTTEQsdUxELHVPI05hUWBPTEQsWU8mKW1RTWxPNyspeU9PUU83KyhkNysoZE81bFEoQ2hPNysoZE8jNlNRYE83KyhkTzViUWBPNysoZE8hLU9RIWJPNysoZE8hQFhRN1tPNysoZE9PUVNHMjdTRzI3U08lMWJRYE9HMjdTT0lXUSZqT0cyN1NPT1FTRzI3VkcyN1ZPNWxRKENoT0cyN1ZPT1FTRzI3X0cyN19PT1FPQU4+e0FOPntPT1FPQU4+dUFOPnVPJTNyUShDfE9BTj57TzphUWBPQU4+dU8pe1FkT0FOPntPIS1PUSFiT0FOPnVPJil3UShDaE9BTj57TyYqU1EoQ31PRzI2bE9PUShDV0cyNmJHMjZiT09RUyEkKCB0ISQoIHRPT1FPPDxMTzw8TE9PNWxRKENoTzw8TE9PIzZTUWBPPDxMT081YlFgTzw8TE9PIS1PUSFiTzw8TE9PT1FTTEQsbkxELG5PJTFiUWBPTEQsbk9PUVNMRCxxTEQscU9PUU9HMjRnRzI0Z09PUU9HMjRhRzI0YU8lM3JRKEN8T0cyNGdPOmFRYE9HMjRhTyl7UWRPRzI0Z08mLHBRIUxSTyw1OnJPJi1nUSRJVE8nI0lxT09RT0FOQWpBTkFqTzVsUShDaE9BTkFqTyM2U1FgT0FOQWpPNWJRYE9BTkFqT09RUyEkKCFZISQoIVlPT1FPTEQqUkxEKlJPT1FPTEQpe0xEKXtPJTNyUShDfE9MRCpSTyYuWlFNbU9HMjZsTyYvfFEhTFJPLDU5ak8mMHBRIUxSTyw1PFVPJjFkUSFMUk8sNTxXTyYyV1EhTFJPLDU8Zk9PUU9HMjdVRzI3VU81bFEoQ2hPRzI3VU8jNlNRYE9HMjdVT09RTyEkJ01tISQnTW1PJjJ9USFMUk8xRzJbTyYzcVEhTFJPMUcyXk8mNGVRIUxSTzFHMXlPT1FPTEQscExELHBPNWxRKENoT0xELHBPJjVbUSFMUk83KydlTyY2UlEhTFJPNysnZ09PUU8hJCghWyEkKCFbTyY2eFEhTFJPRzI2bE9MYlFkTycjRHJPJjdvUXRPJyNJdE9MYlFkTycjRGpPJjd2UShDfE8nI0NoTyY4YVF0TycjQ2hPJjhxUWRPLDU6dk8mOnFRJmpPJyNFV09MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPJyNJUE8mPE9RYE8sNTxUTyY9ZVEmak8sNTtST0xiUWRPLDU7Zk8hKHdRYE8nI0RPTyEod1FgTycjRE9PISh3UWBPJyNET09JV1Emak8nI0ZqTyY6cVEmak8nI0ZqTyY8V1Emak8nI0ZqT0lXUSZqTycjRmxPJjpxUSZqTycjRmxPJjxXUSZqTycjRmxPSVdRJmpPJyNGek8mOnFRJmpPJyNGek8mPFdRJmpPJyNGek9MYlFkTyw1P21PJjhxUWRPMUcwYk8mPWxRTWxPJyNDaE9MYlFkTzFHMWxPSVdRJmpPLDU8cE8mOnFRJmpPLDU8cE8mPFdRJmpPLDU8cE9JV1Emak8sNTxyTyY6cVEmak8sNTxyTyY8V1Emak8sNTxyT0lXUSZqTyw1PF9PJjpxUSZqTyw1PF9PJjxXUSZqTyw1PF9PJjhxUWRPMUcxbU9MYlFkTzcrJmlPSVdRJmpPMUcxeU8mOnFRJmpPMUcxeU8mPFdRJmpPMUcxeU9JV1Emak8xRzF7TyY6cVEmak8xRzF7TyY8V1Emak8xRzF7TyY4cVFkTzcrJ1hPJjhxUWRPNyslfE8mPXZRYE83KydwT0lXUSZqT0FOQVFPJjpxUSZqT0FOQVFPJjxXUSZqT0FOQVFPJj12UWBPPDxLW08mPXZRYE9BTkB2TyY9e1FgTycjRVtPJj5RUWBPJyNFW08mPllRYE8nI0V6TyY+X1FgTycjRWdPJj5kUWBPJyNKUk8mPm9RYE8nI0pQTyY+elFgTyw1OnZPJj9QUSxWTyw1PFFPJj9XUWBPJyNGc08mP11RYE8nI0ZzTyY/YlFgTycjRnNPJj9nUWBPLDU8Uk8mP29RYE8sNTp2TyY/d1FNbE8xRzB9TyZAT1FgTyw1PF9PJkBUUWBPLDU8X08mQFlRYE8sNTxfTyZAX1FgTyw1PGFPJkBkUWBPLDU8YU8mQGlRYE8sNTxhTyZAblFgTzFHMW1PJkBzUWBPMUcwYk8mQHhRYE8xRzJVTyZAfVEsVk88PEtmTyZBVVEsVk88PEtmTyZBXVEsVk88PEtmTyZBZFFxTzcrJ3BPJkFrUWBPNysncE8mQXBRcU88PEtbTzRRUSZqTycjRmhPNWJRYE8nI0ZnT0J6UWBPJyNFWk9MYlFkTyw1O2NPISZXUWBPJyNGc08hJldRYE8nI0ZzTyEmV1FgTycjRnNPISZXUWBPJyNGdU8hJldRYE8nI0Z1TyEmV1FgTycjRnVPJkF3UWBPLDU8ak9KalEmak83Kyd6T0pqUSZqTzcrJ3pPSmpRJmpPNysnek9JV1Emak8xRzJVTyZCUFFgTzFHMlVPSVdRJmpPNysncE8hJ1ZRN1tPJyNHT08kL2VRcU8xRzJgTyQvZVFxTzFHMmBPJC9lUXFPMUcyYE8hJ1ZRN1tPLDU8ak9JV1Emak8sNTx0T0lXUSZqTyw1PHRPSVdRJmpPLDU8dCIsIHN0YXRlRGF0YTogIiZCfX5PJ1lPUydaT1NUT1NVT1N+T1FUT1JUT1h5T11jT19oT2JuT2NtT2hjT2pUT2tjT2xjT3FUT3NUT3hST3tjT3xjT31jTyFUU08hX2tPIWRVTyFnVE8haFRPIWlUTyFqVE8ha1RPIW5sTyNkc08jdHBPI3heTyVQcU8lUnRPJVRyTyVVck8lWHVPJVp2TyVed08lX3dPJWF4TyVuek8ldHtPJXZ8TyV4fU8leiFPTyV9IVBPJlQhUU8mWiFSTyZdIVNPJl8hVE8mYSFVTyZjIVZPJ11QTydmUU8nb1lPJ3xhT35PUVtYWltYX1tYaltYdVtYdltYeFtYIVJbWCFhW1ghYltYIWRbWCFqW1ghe1tYI1dkWCNbW1gjXVtYI15bWCNfW1gjYFtYI2FbWCNiW1gjY1tYI2VbWCNnW1gjaVtYI2pbWCNvW1gnV1tYJ2ZbWCdwW1gnd1tYJ3hbWH5PIV0kbFh+UCR6T1MhV08nVSFYTydWIVpPfk9RVE9SVE9dY09iIWtPYyFqT2hjT2pUT2tjT2xjT3FUT3NUT3hST3tjT3xjT31jTyFUIWJPIV9rTyFkVU8hZ1RPIWhUTyFpVE8halRPIWtUTyFuIWlPI3QhbE8jeF5PJ10hW08nZlFPJ29ZTyd8YU9+TyFRIWBPIVIhXU8hTydqUCFPJ3RQflAnZE8hUyFtT35QYE9RVE9SVE9dY09iIWtPYyFqT2hjT2pUT2tjT2xjT3FUT3NUT3hST3tjT3xjT31jTyFUIWJPIV9rTyFkVU8hZ1RPIWhUTyFpVE8halRPIWtUTyFuIWlPI3QhbE8jeF5PJ105YU8nZlFPJ29ZTyd8YU9+T1FUT1JUT11jT2Iha09jIWpPaGNPalRPa2NPbGNPcVRPc1RPeFJPe2NPfGNPfWNPIVQhYk8hX2tPIWRVTyFnVE8haFRPIWlUTyFqVE8ha1RPIW4haU8jdCFsTyN4Xk8nZlFPJ29ZTyd8YU9+TyFRIXJPI1UhdU8jViFyTyddOWJPIWMncVB+UCt7TyNXIXZPfk8hXSF3TyNXIXZPfk9RI15PWiNkT2ojUk91IXtPdiF7T3ghfE8hUiNiTyFhI1RPIWIheU8hZCF6TyFqI15PI1sjUE8jXSNRTyNeI1FPI18jUU8jYCNTTyNhI1RPI2IjVE8jYyNUTyNlI1VPI2cjV08jaSNZTyNqI1pPJ2ZRTydwI1tPJ3chfU8neCNPT35PXydoWCdXJ2hYIWMnaFghTydoWCFUJ2hYJVEnaFghXSdoWH5QLmpPIXsjZU8jbyNlT1EnaVhaJ2lYXydpWGonaVh1J2lYdidpWHgnaVghUidpWCFhJ2lYIWInaVghZCdpWCFqJ2lYI1snaVgjXSdpWCNeJ2lYI18naVgjYCdpWCNhJ2lYI2InaVgjZSdpWCNnJ2lYI2knaVgjaidpWCdmJ2lYJ3AnaVgndydpWCd4J2lYfk8jYydpWCdXJ2lYIU8naVghYydpWG4naVghVCdpWCVRJ2lYIV0naVh+UDB6TyF7I2VPfk8jeiNmTyRSI2pPfk8hVCNrTyN4Xk8kVSNsTyRXI25Pfk9dI3FPaCRRT2ojck9rI3FPbCNxT3EkUk9zJFNPeCN5TyFUI3pPIV8kWE8hZCN2TyNWJFlPI3QkVk8kXyRUTyRhJFVPJGQkV08nXSNwTydiJFBPJ2Yjc08nYSdjUH5PIWQkWk9+TyFdJF1Pfk9fJF5PJ1ckXk9+TyddJGJPfk8hZCRaTyddJGJPJ14kZE8nYiRQT35PYyRqTyFkJFpPJ10kYk9+TyNjI1RPfk9dJHNPdSRvTyFUJGxPIWQkbk8lUiRyTyddJGJPJ14kZE9eKFVQfk8hbiR0T35PeCR1TyFUJHZPJ10kYk9+T3gkdU8hVCR2TyVaJHpPJ10kYk9+TyddJHtPfk8jZHNPJVJ0TyVUck8lVXJPJVh1TyVadk8lXndPJV93T35PYiVVT2MlVE8hbiVSTyVQJVNPJWMlUU9+UDd4T2IlWE9jbU8hVCVXTyFubE8jZHNPJVBxTyVUck8lVXJPJVh1TyVadk8lXndPJV93TyVheE9+T2AlW08heyVfTyVSJVlPJ14kZE9+UDh3TyFkJWBPIWclZE9+TyFkJWVPfk8hVFNPfk9fJF5PJ1QlbU8nVyReT35PXyReTydUJXBPJ1ckXk9+T18kXk8nVCVyTydXJF5Pfk9TIVdPJ1UhWE8nViV2T35PUVtYWltYaltYdVtYdltYeFtYIVJbWCFSZFghYVtYIWJbWCFkW1ghaltYIXtbWCF7ZFgjV2RYI1tbWCNdW1gjXltYI19bWCNgW1gjYVtYI2JbWCNjW1gjZVtYI2dbWCNpW1gjaltYI29bWCdmW1gncFtYJ3dbWCd4W1h+TyFPW1ghT2RYflA7ZE8hUSV4TyFPJmlYIU8mblghUiZpWCFSJm5YflAnZE8hUiV6TyFPJ2pYfk9RI15PWiNkT2ojUk91IXtPdiF7T3ghfE8hUiV6TyFhI1RPIWIheU8hZCF6TyFqI15PI1sjUE8jXSNRTyNeI1FPI18jUU8jYCNTTyNhI1RPI2IjVE8jYyNUTyNlI1VPI2cjV08jaSNZTyNqI1pPJ2ZRTydwI1tPJ3chfU8neCNPT35PIU8nalh+UD5hTyFPJlBPfk94JlNPIVcmXk8hWCZWTyFZJlZPJ14kZE9+T10mVE9rJlRPIVEmV08nZyZRTyFTJ2tQIVMndlB+UEBkTyFPJ3NYIVInc1ghXSdzWCFjJ3NYJ3Anc1h+TyF7J3NYI1cjUFghUydzWH5QQV1PIXsmX08hTyd1WCFSJ3VYfk8hUiZgTyFPJ3RYfk8hTyZjT35PIXsjZU9+UEFdT1AmZ08hVCZkTyFvJmZPJ10kYk9+T2MmbE8hZCRaTyddJGJPfk91JG9PIWQkbk9+TyFTJm1PflBgT3Uhe092IXtPeCF8TyFiIXlPIWQhek8nZlFPUSFmYVohZmFqIWZhIVIhZmEhYSFmYSFqIWZhI1shZmEjXSFmYSNeIWZhI18hZmEjYCFmYSNhIWZhI2IhZmEjYyFmYSNlIWZhI2chZmEjaSFmYSNqIWZhJ3AhZmEndyFmYSd4IWZhfk9fIWZhJ1chZmEhTyFmYSFjIWZhbiFmYSFUIWZhJVEhZmEhXSFmYX5QQ2ZPIWMmbk9+TyFdIXdPIXsmcE8ncCZvTyFSJ3JYXydyWCdXJ3JYfk8hYydyWH5QRk9PIVImdE8hYydxWH5PIWMmdk9+T3gkdU8hVCR2TyNWJndPJ10kYk9+T1FUT1JUT11jT2Iha09jIWpPaGNPalRPa2NPbGNPcVRPc1RPeFJPe2NPfGNPfWNPIVRTTyFfa08hZFVPIWdUTyFoVE8haVRPIWpUTyFrVE8hbiFpTyN0IWxPI3heTyddOWFPJ2ZRTydvWU8nfGFPfk9dI3FPaCRRT2ojck9rI3FPbCNxT3EkUk9zOXRPeCN5TyFUI3pPIV87ZU8hZCN2TyNWOX1PI3QkVk8kXzl3TyRhOXpPJGQkV08nXSZ7TydiJFBPJ2Yjc09+TyNXJn1Pfk9dI3FPaCRRT2ojck9rI3FPbCNxT3EkUk9zJFNPeCN5TyFUI3pPIV8kWE8hZCN2TyNWJFlPI3QkVk8kXyRUTyRhJFVPJGQkV08nXSZ7TydiJFBPJ2Yjc09+TydhJ21QflBKak8hUSdSTyFjJ25QflApe08nZydUTydvWU9+T1E5Xk9SOV5PXWNPYjtgT2Mhak9oY09qOV5Pa2NPbGNPcTleT3M5Xk94Uk97Y098Y099Y08hVCFiTyFfOWBPIWRVTyFnOV5PIWg5Xk8haTleTyFqOV5PIWs5Xk8hbiFpTyN0IWxPI3heTyddJ2NPJ2ZRTydvWU8nfDteT35PIWQhek9+TyFSI2JPXyRdYSdXJF1hIWMkXWEhTyRdYSFUJF1hJVEkXWEhXSRdYX5PI2Qnak9+UElXTyFdJ2xPIVQneVgjdyd5WCN6J3lYJFIneVh+T3UnbU9+UCEgWU91J21PIVQneVgjdyd5WCN6J3lYJFIneVh+TyFUJ29PI3cnc08jeiduTyRSJ3RPfk8hUSd3T35QTGJPI3ojZk8kUid6T35PUCRlWHUkZVh4JGVYIWIkZVgndyRlWCd4JGVYfk9QZlghUmZYIXtmWCdhZlgnYSRlWH5QISFyT2snfE9+T1MnfU8nVShPTydWKFFPfk9QKFpPdShTT3goVE8ndyhWTyd4KFhPfk8nYShST35QISN7TydhKFtPfk9dI3FPaCRRT2ojck9rI3FPbCNxT3EkUk9zOXRPeCN5TyFUI3pPIV87ZU8hZCN2TyNWOX1PI3QkVk8kXzl3TyRhOXpPJGQkV08nYiRQTydmI3NPfk8hUShgTyddKF1PIWMnfVB+UCEkak8jVyhiT35PIWQoY09+TyFRKGhPJ10oZU8hTyhPUH5QISRqT2oodU94KG1PIVcoc08hWChsTyFZKGxPIWQoY08heCh0TyR3KG9PJ14kZE8nZyhqT35PIVMock9+UCEmak8hYiF5T1AnZVh1J2VYeCdlWCd3J2VYJ3gnZVghUidlWCF7J2VYfk8nYSdlWCNtJ2VYflAhJ2NPUCh4TyF7KHdPIVInZFgnYSdkWH5PIVIoeU8nYSdjWH5PJ10ke08nYSdjUH5PJ10ofE9+TyFkKVJPfk8nXSZ7T35PeCR1TyFRIXJPIVQkdk8jVSF1TyNWIXJPJ10kYk8hYydxUH5PIV0hd08jVylWT35PUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIWEjVE8hYiF5TyFkIXpPIWojXk8jWyNQTyNdI1FPI14jUU8jXyNRTyNgI1NPI2EjVE8jYiNUTyNjI1RPI2UjVU8jZyNXTyNpI1lPI2ojWk8nZlFPJ3AjW08ndyF9Tyd4I09Pfk9fIV5hIVIhXmEnVyFeYSFPIV5hIWMhXmFuIV5hIVQhXmElUSFeYSFdIV5hflAhKXdPUClfTyFUJmRPIW8pXk8lUSldTydiJFBPfk8hXSlhTyFUJ2BYXydgWCFSJ2BYJ1cnYFh+TyFkJFpPJ2IkUE9+TyFkJFpPJ10kYk8nYiRQT35PIV0hd08jVyZ9T35PXSlsTyVSKW1PJ10paU8hUyhWUH5PIVIpbk9eKFVYfk8nZydUT35PWilyT35PXilzT35PIVQkbE8nXSRiTydeJGRPXihVUH5PeCR1TyFRKXhPIVImYE8hVCR2TyddJGJPIU8ndFB+T10mWk9rJlpPIVEpeU8nZydUTyFTJ3ZQfk8hUil6T18oUlgnVyhSWH5PIXsqT08nYiRQT35PUCpSTyFUI3pPJ2IkUE9+TyFUKlRPfk91KlZPIVRTT35PIW4qW09+T2MqYU9+TyddKHxPIVMoVFB+T2Mkak9+TyVSdE8nXSR7T35QOHdPWipnT14qZk9+T1FUT1JUT11jT2JuT2NtT2hjT2pUT2tjT2xjT3FUT3NUT3hST3tjT3xjT31jTyFfa08hZFVPIWdUTyFoVE8haVRPIWpUTyFrVE8hbmxPI3heTyVQcU8nZlFPJ29ZTyd8YU9+TyFUIWJPI3QhbE8nXTlhT35QITFfT14qZk9fJF5PJ1ckXk9+T18qa08jZCptTyVUKm1PJVUqbU9+UCl7TyFkJWBPfk8ldCpyT35PIVQqdE9+TyZWKnZPJlgqd09RJlNhUiZTYVgmU2FdJlNhXyZTYWImU2FjJlNhaCZTYWomU2FrJlNhbCZTYXEmU2FzJlNheCZTYXsmU2F8JlNhfSZTYSFUJlNhIV8mU2EhZCZTYSFnJlNhIWgmU2EhaSZTYSFqJlNhIWsmU2EhbiZTYSNkJlNhI3QmU2EjeCZTYSVQJlNhJVImU2ElVCZTYSVVJlNhJVgmU2ElWiZTYSVeJlNhJV8mU2ElYSZTYSVuJlNhJXQmU2EldiZTYSV4JlNhJXomU2ElfSZTYSZUJlNhJlomU2EmXSZTYSZfJlNhJmEmU2EmYyZTYSdTJlNhJ10mU2EnZiZTYSdvJlNhJ3wmU2EhUyZTYSV7JlNhYCZTYSZRJlNhfk8nXSp8T35PbitQT35PIU8maWEhUiZpYX5QISl3TyFRK1RPIU8maVghUiZpWH5QKXtPIVIlek8hTydqYX5PIU8namF+UD5hTyFSJmBPIU8ndGF+TyFSd1ghUiFaWCFTd1ghUyFaWCFdd1ghXSFaWCFkIVpYIXt3WCdiIVpYfk8hXStZTyF7K1hPIVIjVFghUidsWCFTI1RYIVMnbFghXSdsWCFkJ2xYJ2InbFh+TyFdK1tPIWQkWk8nYiRQTyFSIVZYIVMhVlh+T10mUk9rJlJPeCZTTydnKGpPfk9ROV5PUjleT11jT2I7YE9jIWpPaGNPajleT2tjT2xjT3E5Xk9zOV5PeFJPe2NPfGNPfWNPIVQhYk8hXzlgTyFkVU8hZzleTyFoOV5PIWk5Xk8hajleTyFrOV5PIW4haU8jdCFsTyN4Xk8nZlFPJ29ZTyd8O15Pfk8nXTpTT35QITtqTyFSK2BPIVMna1h+TyFTK2JPfk8hXStZTyF7K1hPIVIjVFghUyNUWH5PIVIrY08hUyd2WH5PIVMrZU9+T10mUk9rJlJPeCZTTydeJGRPJ2coak9+TyFYK2ZPIVkrZk9+UCE+aE94JHVPIVEraE8hVCR2TyddJGJPIU8mblghUiZuWH5PXytsTyFXK29PIVgra08hWStrTyFyK3NPIXMrcU8hdCtyTyF1K3BPIXgrdE8nXiRkTydnKGpPJ28raU9+TyFTK25PflAhP2lPUCt5TyFUJmRPIW8reE9+TyF7LFBPIVIncmEhYydyYV8ncmEnVydyYX5PIV0hd09+UCFAc08hUiZ0TyFjJ3Fhfk94JHVPIVEsU08hVCR2TyNVLFVPI1YsU08nXSRiTyFSJnBYIWMmcFh+T18jT2khUiNPaSdXI09pIU8jT2khYyNPaW4jT2khVCNPaSVRI09pIV0jT2l+UCEpd09QO3RPdShTT3goVE8ndyhWTyd4KFhPfk8jVyF6YSFSIXphIWMhemEheyF6YSFUIXphXyF6YSdXIXphIU8hemF+UCFCcE8jVydlWFEnZVhaJ2VYXydlWGonZVh2J2VYIWEnZVghZCdlWCFqJ2VYI1snZVgjXSdlWCNeJ2VYI18nZVgjYCdlWCNhJ2VYI2InZVgjYydlWCNlJ2VYI2cnZVgjaSdlWCNqJ2VYJ1cnZVgnZidlWCdwJ2VYIWMnZVghTydlWCFUJ2VYbidlWCVRJ2VYIV0nZVh+UCEnY08hUixfTydhJ21YflAhI3tPJ2EsYU9+TyFSLGJPIWMnblh+UCEpd08hYyxlT35PIU8sZk9+T1EjXk91IXtPdiF7T3ghfE8hYiF5TyFkIXpPIWojXk8nZlFPWiNaaV8jWmlqI1ppIVIjWmkhYSNaaSNdI1ppI14jWmkjXyNaaSNgI1ppI2EjWmkjYiNaaSNjI1ppI2UjWmkjZyNaaSNpI1ppI2ojWmknVyNaaSdwI1ppJ3cjWmkneCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppfk8jWyNaaX5QIUZmTyNbI1BPflAhRmZPUSNeT3Uhe092IXtPeCF8TyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPJ2ZRT1ojWmlfI1ppIVIjWmkhYSNaaSNgI1ppI2EjWmkjYiNaaSNjI1ppI2UjWmkjZyNaaSNpI1ppI2ojWmknVyNaaSdwI1ppJ3cjWmkneCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppfk9qI1ppflAhSVFPaiNST35QIUlRT1EjXk9qI1JPdSF7T3Yhe094IXxPIWIheU8hZCF6TyFqI15PI1sjUE8jXSNRTyNeI1FPI18jUU8jYCNTTydmUU9fI1ppIVIjWmkjZSNaaSNnI1ppI2kjWmkjaiNaaSdXI1ppJ3AjWmkndyNaaSd4I1ppIU8jWmkhYyNaaW4jWmkhVCNaaSVRI1ppIV0jWml+T1ojWmkhYSNaaSNhI1ppI2IjWmkjYyNaaX5QIUtsT1ojZE8hYSNUTyNhI1RPI2IjVE8jYyNUT35QIUtsT1EjXk9aI2RPaiNST3Uhe092IXtPeCF8TyFhI1RPIWIheU8hZCF6TyFqI15PI1sjUE8jXSNRTyNeI1FPI18jUU8jYCNTTyNhI1RPI2IjVE8jYyNUTyNlI1VPJ2ZRT18jWmkhUiNaaSNnI1ppI2kjWmkjaiNaaSdXI1ppJ3AjWmkneCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppfk8ndyNaaX5QIU5kTyd3IX1PflAhTmRPUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIWEjVE8hYiF5TyFkIXpPIWojXk8jWyNQTyNdI1FPI14jUU8jXyNRTyNgI1NPI2EjVE8jYiNUTyNjI1RPI2UjVU8jZyNXTydmUU8ndyF9T18jWmkhUiNaaSNpI1ppI2ojWmknVyNaaSdwI1ppIU8jWmkhYyNaaW4jWmkhVCNaaSVRI1ppIV0jWml+Tyd4I1ppflAjI09PJ3gjT09+UCMjT09RI15PWiNkT2ojUk91IXtPdiF7T3ghfE8hYSNUTyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08jYSNUTyNiI1RPI2MjVE8jZSNVTyNnI1dPI2kjWU8nZlFPJ3chfU8neCNPT35PXyNaaSFSI1ppI2ojWmknVyNaaSdwI1ppIU8jWmkhYyNaaW4jWmkhVCNaaSVRI1ppIV0jWml+UCMlak9RW1haW1hqW1h1W1h2W1h4W1ghYVtYIWJbWCFkW1ghaltYIXtbWCNXZFgjW1tYI11bWCNeW1gjX1tYI2BbWCNhW1gjYltYI2NbWCNlW1gjZ1tYI2lbWCNqW1gjb1tYJ2ZbWCdwW1gnd1tYJ3hbWCFSW1ghU1tYfk8jbVtYflAjJ31PUSNeT1o5ck9qOWdPdSF7T3Yhe094IXxPIWE5aU8hYiF5TyFkIXpPIWojXk8jWzllTyNdOWZPI145Zk8jXzlmTyNgOWhPI2E5aU8jYjlpTyNjOWlPI2U5ak8jZzlsTyNpOW5PI2o5b08nZlFPJ3AjW08ndyF9Tyd4I09Pfk8jbSxoT35QIypYT1EnaVhaJ2lYaidpWHUnaVh2J2lYeCdpWCFhJ2lYIWInaVghZCdpWCFqJ2lYI1snaVgjXSdpWCNeJ2lYI18naVgjYCdpWCNhJ2lYI2InaVgjZSdpWCNnJ2lYI2knaVgjaidpWCdmJ2lYJ3AnaVgndydpWCd4J2lYIVInaVh+TyF7OXNPI285c08jYydpWCNtJ2lYIVMnaVh+UCMsU09fJnNhIVImc2EnVyZzYSFjJnNhbiZzYSFPJnNhIVQmc2ElUSZzYSFdJnNhflAhKXdPUSNaaVojWmlfI1ppaiNaaXYjWmkhUiNaaSFhI1ppIWIjWmkhZCNaaSFqI1ppI1sjWmkjXSNaaSNeI1ppI18jWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppJ1cjWmknZiNaaSdwI1ppIU8jWmkhYyNaaW4jWmkhVCNaaSVRI1ppIV0jWml+UCFCcE9fI25pIVIjbmknVyNuaSFPI25pIWMjbmluI25pIVQjbmklUSNuaSFdI25pflAhKXdPI3osak9+TyN6LGtPfk8hXSdsTyF7LGxPIVQkT1gjdyRPWCN6JE9YJFIkT1h+TyFRLG1Pfk8hVCdvTyN3LG9PI3onbk8kUixwT35PIVI5cE8hUydoWH5QIypYTyFTLHFPfk8kUixzT35PUyd9TydVKE9PJ1Ysdk9+T10seU9rLHlPIU8sek9+TyFSZFghXWRYIWNkWCFjJGVYJ3BkWH5QISFyTyFjLVFPflAhQnBPIVItUk8hXSF3TydwJm9PIWMnfVh+TyFjLVdPfk8hUShgTyddJGJPIWMnfVB+TyNXLVlPfk8hTyRlWCFSJGVYIV0kbFh+UCEhck8hUi1aTyFPKE9YflAhQnBPIV0tXU9+TyFPLV9Pfk9qLWNPIV0hd08hZCRaTydiJFBPJ3Amb09+TyFdKWFPfk9fJF5PIVItaE8nVyReT35PIVMtak9+UCEmak8hWC1rTyFZLWtPJ14kZE8nZyhqT35PeC1tTydnKGpPfk8heC1uT35PJ10ke08hUiZ4WCdhJnhYfk8hUih5TydhJ2Nhfk8nYS1zT35PdS10T3YtdE94LXVPUHJhJ3dyYSd4cmEhUnJhIXtyYX5PJ2FyYSNtcmF+UCM3cE91KFNPeChUT1AkXmEndyReYSd4JF5hIVIkXmEheyReYX5PJ2EkXmEjbSReYX5QIzhmT3UoU094KFRPUCRgYSd3JGBhJ3gkYGEhUiRgYSF7JGBhfk8nYSRgYSNtJGBhflAjOVhPXS12T35PI1ctd09+TydhJG5hIVIkbmEheyRuYSNtJG5hflAhI3tPI1ctek9+T1AuVE8hVCZkTyFvLlNPJVEuUk9+T10jcU9qI3JPayNxT2wjcU9xJFJPczl0T3gjeU8hVCN6TyFfO2VPIWQjdk8jVjl9TyN0JFZPJF85d08kYTl6TyRkJFdPJ2IkUE8nZiNzT35PaC5WTyddLlVPflAjOnlPIV0pYU8hVCdgYV8nYGEhUidgYSdXJ2Bhfk8jVy5dT35PWltYIVJkWCFTZFh+TyFSLl5PIVMoVlh+TyFTLmBPfk9aLmFPfk9dLmNPJ10paU9+TyFUJGxPJ10kYk9eJ1FYIVInUVh+TyFSKW5PXihVYX5PIWMuZk9+UCEpd09dLmhPfk9aLmlPfk9eLmpPfk9QLlRPIVQmZE8hby5TTyVRLlJPJ2IkUE9+TyFSKXpPXyhSYSdXKFJhfk8hey5wT35PUC5zTyFUI3pPfk8nZydUTyFTKFNQfk9QLn1PIVQueU8hby58TyVRLntPJ2IkUE9+T1ovWE8hUi9WTyFTKFRYfk8hUy9ZT35PXi9bT18kXk8nVyReT35PXS9dT35PXS9eTyddKHxPfk8jYy9fTyVyL2BPflAwek8heyNlTyNjL19PJXIvYE9+T18vYU9+UCl7T18vY09+TyV7L2dPUSV5aVIleWlYJXlpXSV5aV8leWliJXlpYyV5aWgleWlqJXlpayV5aWwleWlxJXlpcyV5aXgleWl7JXlpfCV5aX0leWkhVCV5aSFfJXlpIWQleWkhZyV5aSFoJXlpIWkleWkhaiV5aSFrJXlpIW4leWkjZCV5aSN0JXlpI3gleWklUCV5aSVSJXlpJVQleWklVSV5aSVYJXlpJVoleWklXiV5aSVfJXlpJWEleWklbiV5aSV0JXlpJXYleWkleCV5aSV6JXlpJX0leWkmVCV5aSZaJXlpJl0leWkmXyV5aSZhJXlpJmMleWknUyV5aSddJXlpJ2YleWknbyV5aSd8JXlpIVMleWlgJXlpJlEleWl+T2AvbU8hUy9rTyZRL2xPflBgTyFUU08hZC9vT35PJlgqd09RJlNpUiZTaVgmU2ldJlNpXyZTaWImU2ljJlNpaCZTaWomU2lrJlNpbCZTaXEmU2lzJlNpeCZTaXsmU2l8JlNpfSZTaSFUJlNpIV8mU2khZCZTaSFnJlNpIWgmU2khaSZTaSFqJlNpIWsmU2khbiZTaSNkJlNpI3QmU2kjeCZTaSVQJlNpJVImU2klVCZTaSVVJlNpJVgmU2klWiZTaSVeJlNpJV8mU2klYSZTaSVuJlNpJXQmU2kldiZTaSV4JlNpJXomU2klfSZTaSZUJlNpJlomU2kmXSZTaSZfJlNpJmEmU2kmYyZTaSdTJlNpJ10mU2knZiZTaSdvJlNpJ3wmU2khUyZTaSV7JlNpYCZTaSZRJlNpfk8hUiNiT24kXWF+TyFPJmlpIVImaWl+UCEpd08hUiV6TyFPJ2ppfk8hUiZgTyFPJ3Rpfk8hTy91T35PIVIhVmEhUyFWYX5QIypYT10mUk9rJlJPIVEve08nZyhqTyFSJmpYIVMmalh+UEBkTyFSK2BPIVMna2F+T10mWk9rJlpPIVEpeU8nZydUTyFSJm9YIVMmb1h+TyFSK2NPIVMndmF+TyFPJ3VpIVIndWl+UCEpd09fJF5PIV0hd08hZCRaTyFqMFZPIXswVE8nVyReTydiJFBPJ3Amb09+TyFTMFlPflAhP2lPIVgwWk8hWTBaTydeJGRPJ2coak8nbytpT35PIVcwW09+UCNNU08hVFNPIVcwW08hdTBeTyF4MF9PflAjTVNPIVcwW08hczBhTyF0MGFPIXUwXk8heDBfT35QI01TTyFUJmRPfk8hVCZkT35QIUJwTyFSJ3JpIWMncmlfJ3JpJ1cncml+UCEpd08hezBqTyFSJ3JpIWMncmlfJ3JpJ1cncml+TyFSJnRPIWMncWl+T3gkdU8hVCR2TyNWMGxPJ10kYk9+TyNXcmFRcmFacmFfcmFqcmEhYXJhIWJyYSFkcmEhanJhI1tyYSNdcmEjXnJhI19yYSNgcmEjYXJhI2JyYSNjcmEjZXJhI2dyYSNpcmEjanJhJ1dyYSdmcmEncHJhIWNyYSFPcmEhVHJhbnJhJVFyYSFdcmF+UCM3cE8jVyReYVEkXmFaJF5hXyReYWokXmF2JF5hIWEkXmEhYiReYSFkJF5hIWokXmEjWyReYSNdJF5hI14kXmEjXyReYSNgJF5hI2EkXmEjYiReYSNjJF5hI2UkXmEjZyReYSNpJF5hI2okXmEnVyReYSdmJF5hJ3AkXmEhYyReYSFPJF5hIVQkXmFuJF5hJVEkXmEhXSReYX5QIzhmTyNXJGBhUSRgYVokYGFfJGBhaiRgYXYkYGEhYSRgYSFiJGBhIWQkYGEhaiRgYSNbJGBhI10kYGEjXiRgYSNfJGBhI2AkYGEjYSRgYSNiJGBhI2MkYGEjZSRgYSNnJGBhI2kkYGEjaiRgYSdXJGBhJ2YkYGEncCRgYSFjJGBhIU8kYGEhVCRgYW4kYGElUSRgYSFdJGBhflAjOVhPI1ckbmFRJG5hWiRuYV8kbmFqJG5hdiRuYSFSJG5hIWEkbmEhYiRuYSFkJG5hIWokbmEjWyRuYSNdJG5hI14kbmEjXyRuYSNgJG5hI2EkbmEjYiRuYSNjJG5hI2UkbmEjZyRuYSNpJG5hI2okbmEnVyRuYSdmJG5hJ3AkbmEhYyRuYSFPJG5hIVQkbmEheyRuYW4kbmElUSRuYSFdJG5hflAhQnBPXyNPcSFSI09xJ1cjT3EhTyNPcSFjI09xbiNPcSFUI09xJVEjT3EhXSNPcX5QISl3TyFSJmtYJ2Ema1h+UEpqTyFSLF9PJ2EnbWF+TyFRMHRPIVImbFghYyZsWH5QKXtPIVIsYk8hYyduYX5PIVIsYk8hYyduYX5QISl3TyNtIWZhIVMhZmF+UENmTyNtIV5hIVIhXmEhUyFeYX5QIypYTyFUMVhPI3heTyRQMVlPfk8hUzFeT35PbjFfT35QIUJwT18kWXEhUiRZcSdXJFlxIU8kWXEhYyRZcW4kWXEhVCRZcSVRJFlxIV0kWXF+UCEpd08hTzFgT35PXSx5T2sseU9+T3UoU094KFRPJ3goWE9QJHhpJ3ckeGkhUiR4aSF7JHhpfk8nYSR4aSNtJHhpflAkLlBPdShTT3goVE9QJHppJ3ckemkneCR6aSFSJHppIXskeml+TydhJHppI20keml+UCQuck8ncCNbT35QIUJwTyFRMWNPJ10kYk8hUiZ0WCFjJnRYfk8hUi1STyFjJ31hfk8hUi1STyFdIXdPIWMnfWF+TyFSLVJPIV0hd08ncCZvTyFjJ31hfk8nYSRnaSFSJGdpIXskZ2kjbSRnaX5QISN7TyFRMWtPJ10oZU8hTyZ2WCFSJnZYflAhJGpPIVItWk8hTyhPYX5PIVItWk8hTyhPYX5QIUJwTyFdIXdPfk8hXSF3TyNjMXNPfk9qMXZPIV0hd08ncCZvT35PIVInZGknYSdkaX5QISN7TyF7MXlPIVInZGknYSdkaX5QISN7TyFjMXxPfk9fJFpxIVIkWnEnVyRacSFPJFpxIWMkWnFuJFpxIVQkWnElUSRacSFdJFpxflAhKXdPIVIyUU8hVChQWH5QIUJwTyFUJmRPJVEyVE9+TyFUJmRPJVEyVE9+UCFCcE8hVCRlWCR1W1hfJGVYIVIkZVgnVyRlWH5QISFyTyR1MlhPUGdYdWdYeGdYIVRnWCd3Z1gneGdYX2dYIVJnWCdXZ1h+TyR1MlhPfk9dMl9PJVIyYE8nXSlpTyFSJ1BYIVMnUFh+TyFSLl5PIVMoVmF+T1oyZE9+T14yZU9+T10yaE9+T1Ayak8hVCZkTyFvMmlPJVEyVE9+T18kXk8nVyReT35QIUJwTyFUI3pPflAhQnBPIVIyb08hezJxTyFTKFNYfk8hUzJyT35PeDtvTyFXMntPIVgydE8hWTJ0TyFyMnpPIXMyeU8hdDJ5TyF4MnhPJ14kZE8nZyhqTydvK2lPfk8hUzJ3T35QJDdaT1AzU08hVC55TyFvM1JPJVEzUU9+T1AzU08hVC55TyFvM1JPJVEzUU8nYiRQT35PJ10ofE8hUidPWCFTJ09Yfk8hUi9WTyFTKFRhfk9dM15PJ2czXU9+T10zX09+T14zYU9+TyFjM2RPflApe09fM2ZPfk9fM2ZPflApe08jYzNoTyVyM2lPflBGT09gL21PIVMzbU8mUS9sT35QYE8hXTNvT35PIVIjVGkhUyNUaX5QIypYTyF7M3FPIVIjVGkhUyNUaX5PIVIhVmkhUyFWaX5QIypYT18kXk8hezN4TydXJF5Pfk9fJF5PIV0hd08hezN4TydXJF5Pfk8hWDN8TyFZM3xPJ14kZE8nZyhqTydvK2lPfk9fJF5PIV0hd08hZCRaTyFqM31PIXszeE8nVyReTydiJFBPJ3Amb09+TyFXNE9PflAkO3hPIVc0T08hdTRSTyF4NFNPflAkO3hPXyReTyFdIXdPIWozfU8hezN4TydXJF5PJ3Amb09+TyFSJ3JxIWMncnFfJ3JxJ1cncnF+UCEpd08hUiZ0TyFjJ3Fxfk8jVyR4aVEkeGlaJHhpXyR4aWokeGl2JHhpIWEkeGkhYiR4aSFkJHhpIWokeGkjWyR4aSNdJHhpI14keGkjXyR4aSNgJHhpI2EkeGkjYiR4aSNjJHhpI2UkeGkjZyR4aSNpJHhpI2okeGknVyR4aSdmJHhpJ3AkeGkhYyR4aSFPJHhpIVQkeGluJHhpJVEkeGkhXSR4aX5QJC5QTyNXJHppUSR6aVokemlfJHppaiR6aXYkemkhYSR6aSFiJHppIWQkemkhaiR6aSNbJHppI10kemkjXiR6aSNfJHppI2AkemkjYSR6aSNiJHppI2MkemkjZSR6aSNnJHppI2kkemkjaiR6aSdXJHppJ2YkemkncCR6aSFjJHppIU8kemkhVCR6aW4kemklUSR6aSFdJHppflAkLnJPI1ckZ2lRJGdpWiRnaV8kZ2lqJGdpdiRnaSFSJGdpIWEkZ2khYiRnaSFkJGdpIWokZ2kjWyRnaSNdJGdpI14kZ2kjXyRnaSNgJGdpI2EkZ2kjYiRnaSNjJGdpI2UkZ2kjZyRnaSNpJGdpI2okZ2knVyRnaSdmJGdpJ3AkZ2khYyRnaSFPJGdpIVQkZ2kheyRnaW4kZ2klUSRnaSFdJGdpflAhQnBPIVIma2EnYSZrYX5QISN7TyFSJmxhIWMmbGF+UCEpd08hUixiTyFjJ25pfk8jbSNPaSFSI09pIVMjT2l+UCMqWE9RI15PdSF7T3Yhe094IXxPIWIheU8hZCF6TyFqI15PJ2ZRT1ojWmlqI1ppIWEjWmkjXSNaaSNeI1ppI18jWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppI20jWmkncCNaaSd3I1ppJ3gjWmkhUiNaaSFTI1ppfk8jWyNaaX5QJEVpTyNbOWVPflAkRWlPUSNeT3Uhe092IXtPeCF8TyFiIXlPIWQhek8haiNeTyNbOWVPI105Zk8jXjlmTyNfOWZPJ2ZRT1ojWmkhYSNaaSNgI1ppI2EjWmkjYiNaaSNjI1ppI2UjWmkjZyNaaSNpI1ppI2ojWmkjbSNaaSdwI1ppJ3cjWmkneCNaaSFSI1ppIVMjWml+T2ojWml+UCRHcU9qOWdPflAkR3FPUSNeT2o5Z091IXtPdiF7T3ghfE8hYiF5TyFkIXpPIWojXk8jWzllTyNdOWZPI145Zk8jXzlmTyNgOWhPJ2ZRTyNlI1ppI2cjWmkjaSNaaSNqI1ppI20jWmkncCNaaSd3I1ppJ3gjWmkhUiNaaSFTI1ppfk9aI1ppIWEjWmkjYSNaaSNiI1ppI2MjWml+UCRJeU9aOXJPIWE5aU8jYTlpTyNiOWlPI2M5aU9+UCRJeU9RI15PWjlyT2o5Z091IXtPdiF7T3ghfE8hYTlpTyFiIXlPIWQhek8haiNeTyNbOWVPI105Zk8jXjlmTyNfOWZPI2A5aE8jYTlpTyNiOWlPI2M5aU8jZTlqTydmUU8jZyNaaSNpI1ppI2ojWmkjbSNaaSdwI1ppJ3gjWmkhUiNaaSFTI1ppfk8ndyNaaX5QJExfTyd3IX1PflAkTF9PUSNeT1o5ck9qOWdPdSF7T3Yhe094IXxPIWE5aU8hYiF5TyFkIXpPIWojXk8jWzllTyNdOWZPI145Zk8jXzlmTyNgOWhPI2E5aU8jYjlpTyNjOWlPI2U5ak8jZzlsTydmUU8ndyF9TyNpI1ppI2ojWmkjbSNaaSdwI1ppIVIjWmkhUyNaaX5PJ3gjWml+UCROZ08neCNPT35QJE5nT1EjXk9aOXJPajlnT3Uhe092IXtPeCF8TyFhOWlPIWIheU8hZCF6TyFqI15PI1s5ZU8jXTlmTyNeOWZPI185Zk8jYDloTyNhOWlPI2I5aU8jYzlpTyNlOWpPI2c5bE8jaTluTydmUU8ndyF9Tyd4I09Pfk8jaiNaaSNtI1ppJ3AjWmkhUiNaaSFTI1ppflAlIW9PXyNreSFSI2t5J1cja3khTyNreSFjI2t5biNreSFUI2t5JVEja3khXSNreX5QISl3T1A7dk91KFNPeChUTyd3KFZPJ3goWE9+T1EjWmlaI1ppaiNaaXYjWmkhYSNaaSFiI1ppIWQjWmkhaiNaaSNbI1ppI10jWmkjXiNaaSNfI1ppI2AjWmkjYSNaaSNiI1ppI2MjWmkjZSNaaSNnI1ppI2kjWmkjaiNaaSNtI1ppJ2YjWmkncCNaaSFSI1ppIVMjWml+UCUlYU8hYiF5T1AnZVh1J2VYeCdlWCd3J2VYJ3gnZVghUydlWH5PUSdlWFonZVhqJ2VYdidlWCFhJ2VYIWQnZVghaidlWCNbJ2VYI10nZVgjXidlWCNfJ2VYI2AnZVgjYSdlWCNiJ2VYI2MnZVgjZSdlWCNnJ2VYI2knZVgjaidlWCNtJ2VYJ2YnZVgncCdlWCFSJ2VYflAlJ2VPI20jbmkhUiNuaSFTI25pflAjKlhPIVM0ZU9+TyFSJnNhIVMmc2F+UCMqWE8hXSF3TydwJm9PIVImdGEhYyZ0YX5PIVItUk8hYyd9aX5PIVItUk8hXSF3TyFjJ31pfk8nYSRncSFSJGdxIXskZ3EjbSRncX5QISN7TyFPJnZhIVImdmF+UCFCcE8hXTRsT35PIVItWk8hTyhPaX5QIUJwTyFSLVpPIU8oT2l+TyFPNHBPfk8hXSF3TyNjNHVPfk9qNHZPIV0hd08ncCZvT35PIU80eE9+TydhJGlxIVIkaXEheyRpcSNtJGlxflAhI3tPXyRaeSFSJFp5J1ckWnkhTyRaeSFjJFp5biRaeSFUJFp5JVEkWnkhXSRaeX5QISl3TyFSMlFPIVQoUGF+TyFUJmRPJVE0fU9+TyFUJmRPJVE0fU9+UCFCcE9fI095IVIjT3knVyNPeSFPI095IWMjT3luI095IVQjT3klUSNPeSFdI095flAhKXdPWjVRT35PXTVTTyddKWlPfk8hUi5eTyFTKFZpfk9dNVZPfk9eNVdPfk8nZydUTyFSJntYIVMme1h+TyFSMm9PIVMoU2F+TyFTNWVPflAkN1pPeDtzTydnKGpPJ28raU9+TyFXNWhPIVg1Z08hWTVnTyF4MF9PJ14kZE8nZyhqTydvK2lPfk8hczVpTyF0NWlPflAlMF5PIVg1Z08hWTVnTydeJGRPJ2coak8nbytpT35PIVQueU9+TyFULnlPJVE1a09+TyFULnlPJVE1a09+UCFCcE9QNXBPIVQueU8hbzVvTyVRNWtPfk9aNXVPIVInT2EhUydPYX5PIVIvVk8hUyhUaX5PXTV4T35PIWM1eU9+TyFjNXpPfk8hYzV7T35PIWM1e09+UCl7T181fU9+TyFdNlFPfk8hYzZST35PIVIndWkhUyd1aX5QIypYT18kXk8nVyReT35QISl3T18kXk8hezZXTydXJF5Pfk9fJF5PIV0hd08hezZXTydXJF5Pfk8hWDZdTyFZNl1PJ14kZE8nZyhqTydvK2lPfk9fJF5PIV0hd08hajZeTyF7NldPJ1ckXk8ncCZvT35PIWQkWk8nYiRQT35QJTR4TyFXNl9PflAlNGdPIVIncnkhYydyeV8ncnknVydyeX5QISl3TyNXJGdxUSRncVokZ3FfJGdxaiRncXYkZ3EhUiRncSFhJGdxIWIkZ3EhZCRncSFqJGdxI1skZ3EjXSRncSNeJGdxI18kZ3EjYCRncSNhJGdxI2IkZ3EjYyRncSNlJGdxI2ckZ3EjaSRncSNqJGdxJ1ckZ3EnZiRncSdwJGdxIWMkZ3EhTyRncSFUJGdxIXskZ3FuJGdxJVEkZ3EhXSRncX5QIUJwTyNXJGlxUSRpcVokaXFfJGlxaiRpcXYkaXEhUiRpcSFhJGlxIWIkaXEhZCRpcSFqJGlxI1skaXEjXSRpcSNeJGlxI18kaXEjYCRpcSNhJGlxI2IkaXEjYyRpcSNlJGlxI2ckaXEjaSRpcSNqJGlxJ1ckaXEnZiRpcSdwJGlxIWMkaXEhTyRpcSFUJGlxIXskaXFuJGlxJVEkaXEhXSRpcX5QIUJwTyFSJmxpIWMmbGl+UCEpd08jbSNPcSFSI09xIVMjT3F+UCMqWE91LXRPdi10T3gtdU9QcmEnd3JhJ3hyYSFTcmF+T1FyYVpyYWpyYSFhcmEhYnJhIWRyYSFqcmEjW3JhI11yYSNecmEjX3JhI2ByYSNhcmEjYnJhI2NyYSNlcmEjZ3JhI2lyYSNqcmEjbXJhJ2ZyYSdwcmEhUnJhflAlO09PdShTT3goVE9QJF5hJ3ckXmEneCReYSFTJF5hfk9RJF5hWiReYWokXmF2JF5hIWEkXmEhYiReYSFkJF5hIWokXmEjWyReYSNdJF5hI14kXmEjXyReYSNgJF5hI2EkXmEjYiReYSNjJF5hI2UkXmEjZyReYSNpJF5hI2okXmEjbSReYSdmJF5hJ3AkXmEhUiReYX5QJT1TT3UoU094KFRPUCRgYSd3JGBhJ3gkYGEhUyRgYX5PUSRgYVokYGFqJGBhdiRgYSFhJGBhIWIkYGEhZCRgYSFqJGBhI1skYGEjXSRgYSNeJGBhI18kYGEjYCRgYSNhJGBhI2IkYGEjYyRgYSNlJGBhI2ckYGEjaSRgYSNqJGBhI20kYGEnZiRgYSdwJGBhIVIkYGF+UCU/V09RJG5hWiRuYWokbmF2JG5hIWEkbmEhYiRuYSFkJG5hIWokbmEjWyRuYSNdJG5hI14kbmEjXyRuYSNgJG5hI2EkbmEjYiRuYSNjJG5hI2UkbmEjZyRuYSNpJG5hI2okbmEjbSRuYSdmJG5hJ3AkbmEhUiRuYSFTJG5hflAlJWFPI20kWXEhUiRZcSFTJFlxflAjKlhPI20kWnEhUiRacSFTJFpxflAjKlhPIVM2aE9+TyNtNmlPflAhI3tPIV0hd08hUiZ0aSFjJnRpfk8hXSF3TydwJm9PIVImdGkhYyZ0aX5PIVItUk8hYyd9cX5PIU8mdmkhUiZ2aX5QIUJwTyFSLVpPIU8oT3F+TyFPNm9PflAhQnBPIU82b09+TyFSJ2R5J2EnZHl+UCEje08hUiZ5YSFUJnlhflAhQnBPIVQkdHFfJHRxIVIkdHEnVyR0cX5QIUJwT1o2dk9+TyFSLl5PIVMoVnF+T102eU9+TyFUJmRPJVE2ek9+TyFUJmRPJVE2ek9+UCFCcE8hezZ7TyFSJnthIVMme2F+TyFSMm9PIVMoU2l+UCMqWE8hWDdSTyFZN1JPJ14kZE8nZyhqTydvK2lPfk8hVzdUTyF4NFNPflAlR1hPIVQueU8lUTdXT35PIVQueU8lUTdXT35QIUJwT103X08nZzdeT35PIVIvVk8hUyhUcX5PIWM3YU9+TyFjN2FPflApe08hYzdjT35PIWM3ZE9+TyFSI1R5IVMjVHl+UCMqWE9fJF5PIXs3ak8nVyReT35PXyReTyFdIXdPIXs3ak8nVyReT35PIVg3bU8hWTdtTydeJGRPJ2coak8nbytpT35PXyReTyFdIXdPIWo3bk8hezdqTydXJF5PJ3Amb09+TyNtI2t5IVIja3khUyNreX5QIypYT1EkZ2laJGdpaiRnaXYkZ2khYSRnaSFiJGdpIWQkZ2khaiRnaSNbJGdpI10kZ2kjXiRnaSNfJGdpI2AkZ2kjYSRnaSNiJGdpI2MkZ2kjZSRnaSNnJGdpI2kkZ2kjaiRnaSNtJGdpJ2YkZ2kncCRnaSFSJGdpIVMkZ2l+UCUlYU91KFNPeChUTyd4KFhPUCR4aSd3JHhpIVMkeGl+T1EkeGlaJHhpaiR4aXYkeGkhYSR4aSFiJHhpIWQkeGkhaiR4aSNbJHhpI10keGkjXiR4aSNfJHhpI2AkeGkjYSR4aSNiJHhpI2MkeGkjZSR4aSNnJHhpI2kkeGkjaiR4aSNtJHhpJ2YkeGkncCR4aSFSJHhpflAlTGpPdShTT3goVE9QJHppJ3ckemkneCR6aSFTJHppfk9RJHppWiR6aWokeml2JHppIWEkemkhYiR6aSFkJHppIWokemkjWyR6aSNdJHppI14kemkjXyR6aSNgJHppI2EkemkjYiR6aSNjJHppI2UkemkjZyR6aSNpJHppI2okemkjbSR6aSdmJHppJ3AkemkhUiR6aX5QJU5uTyNtJFp5IVIkWnkhUyRaeX5QIypYTyNtI095IVIjT3khUyNPeX5QIypYTyFdIXdPIVImdHEhYyZ0cX5PIVItUk8hYyd9eX5PIU8mdnEhUiZ2cX5QIUJwTyFPN3RPflAhQnBPIVIuXk8hUyhWeX5PIVIyb08hUyhTcX5PIVg4UU8hWThRTydeJGRPJ2coak8nbytpT35PIVQueU8lUThUT35PIVQueU8lUThUT35QIUJwTyFjOFdPfk9fJF5PIXs4XU8nVyReT35PXyReTyFdIXdPIXs4XU8nVyReT35PUSRncVokZ3FqJGdxdiRncSFhJGdxIWIkZ3EhZCRncSFqJGdxI1skZ3EjXSRncSNeJGdxI18kZ3EjYCRncSNhJGdxI2IkZ3EjYyRncSNlJGdxI2ckZ3EjaSRncSNqJGdxI20kZ3EnZiRncSdwJGdxIVIkZ3EhUyRncX5QJSVhT1EkaXFaJGlxaiRpcXYkaXEhYSRpcSFiJGlxIWQkaXEhaiRpcSNbJGlxI10kaXEjXiRpcSNfJGlxI2AkaXEjYSRpcSNiJGlxI2MkaXEjZSRpcSNnJGlxI2kkaXEjaiRpcSNtJGlxJ2YkaXEncCRpcSFSJGlxIVMkaXF+UCUlYU8nYSR8IVohUiR8IVoheyR8IVojbSR8IVp+UCEje08hUiZ7cSFTJntxflAjKlhPXyReTyF7OG9PJ1ckXk9+TyNXJHwhWlEkfCFaWiR8IVpfJHwhWmokfCFadiR8IVohUiR8IVohYSR8IVohYiR8IVohZCR8IVohaiR8IVojWyR8IVojXSR8IVojXiR8IVojXyR8IVojYCR8IVojYSR8IVojYiR8IVojYyR8IVojZSR8IVojZyR8IVojaSR8IVojaiR8IVonVyR8IVonZiR8IVoncCR8IVohYyR8IVohTyR8IVohVCR8IVoheyR8IVpuJHwhWiVRJHwhWiFdJHwhWn5QIUJwT1A7dU91KFNPeChUTyd3KFZPJ3goWE9+TyFTIXphIVchemEhWCF6YSFZIXphIXIhemEhcyF6YSF0IXphIXghemEnXiF6YSdnIXphJ28hemF+UCYsX08hVydlWCFYJ2VYIVknZVghcidlWCFzJ2VYIXQnZVgheCdlWCdeJ2VYJ2cnZVgnbydlWH5QJSdlT1EkfCFaWiR8IVpqJHwhWnYkfCFaIWEkfCFaIWIkfCFaIWQkfCFaIWokfCFaI1skfCFaI10kfCFaI14kfCFaI18kfCFaI2AkfCFaI2EkfCFaI2IkfCFaI2MkfCFaI2UkfCFaI2ckfCFaI2kkfCFaI2okfCFaI20kfCFaJ2YkfCFaJ3AkfCFaIVIkfCFaIVMkfCFaflAlJWFPIVdyYSFYcmEhWXJhIXJyYSFzcmEhdHJhIXhyYSdecmEnZ3JhJ29yYX5QJTtPTyFXJF5hIVgkXmEhWSReYSFyJF5hIXMkXmEhdCReYSF4JF5hJ14kXmEnZyReYSdvJF5hflAlPVNPIVckYGEhWCRgYSFZJGBhIXIkYGEhcyRgYSF0JGBhIXgkYGEnXiRgYSdnJGBhJ28kYGF+UCU/V08hUyRuYSFXJG5hIVgkbmEhWSRuYSFyJG5hIXMkbmEhdCRuYSF4JG5hJ14kbmEnZyRuYSdvJG5hflAmLF9PIVckeGkhWCR4aSFZJHhpIXIkeGkhcyR4aSF0JHhpIXgkeGknXiR4aSdnJHhpJ28keGl+UCVMak8hVyR6aSFYJHppIVkkemkhciR6aSFzJHppIXQkemkheCR6aSdeJHppJ2ckemknbyR6aX5QJU5uTyFTJGdpIVckZ2khWCRnaSFZJGdpIXIkZ2khcyRnaSF0JGdpIXgkZ2knXiRnaSdnJGdpJ28kZ2l+UCYsX08hUyRncSFXJGdxIVgkZ3EhWSRncSFyJGdxIXMkZ3EhdCRncSF4JGdxJ14kZ3EnZyRncSdvJGdxflAmLF9PIVMkaXEhVyRpcSFYJGlxIVkkaXEhciRpcSFzJGlxIXQkaXEheCRpcSdeJGlxJ2ckaXEnbyRpcX5QJixfTyFTJHwhWiFXJHwhWiFYJHwhWiFZJHwhWiFyJHwhWiFzJHwhWiF0JHwhWiF4JHwhWideJHwhWidnJHwhWidvJHwhWn5QJixfT24naFh+UC5qT25bWCFPW1ghY1tYJXJbWCFUW1glUVtYIV1bWH5QJHpPIV1kWCFjW1ghY2RYJ3BkWH5QO2RPUTleT1I5Xk9dY09iO2BPYyFqT2hjT2o5Xk9rY09sY09xOV5PczleT3hST3tjT3xjT31jTyFUU08hXzlgTyFkVU8hZzleTyFoOV5PIWk5Xk8hajleTyFrOV5PIW4haU8jdCFsTyN4Xk8nXSdjTydmUU8nb1lPJ3w7Xk9+T10jcU9oJFFPaiNyT2sjcU9sI3FPcSRST3M5dU94I3lPIVQjek8hXztmTyFkI3ZPI1Y6T08jdCRWTyRfOXhPJGE5e08kZCRXTyddJntPJ2IkUE8nZiNzT35PIVI5cE8hUyRdYX5PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPczl2T3gjeU8hVCN6TyFfO2dPIWQjdk8jVjpQTyN0JFZPJF85eU8kYTl8TyRkJFdPJ10me08nYiRQTydmI3NPfk8jZCdqT35QJjxXTyFTW1ghU2RYflA7ZE8hXTlkT35PI1c5Y09+TyFdIXdPI1c5Y09+TyF7OXNPfk8jYzlpT35PIXs6UU8hUid1WCFTJ3VYfk8hezlzTyFSJ3NYIVMnc1h+TyNXOlJPfk8nYTpUT35QISN7TyNXOltPfk8jVzpdT35PI1c6Xk9+TyFdIXdPI1c6X09+TyFdIXdPI1c6Uk9+TyNtOmBPflAjKlhPI1c6YU9+TyNXOmJPfk8jVzpjT35PI1c6ZE9+TyNXOmVPfk8jVzpmT35PI1c6Z09+TyNXOmhPfk8hTzppT35PI206ak9+UCEje08jbTprT35QISN7TyNtOmxPflAhI3tPIU86bU9+UCFCcE8hTzptT35PIU86bk9+UCFCcE8hXSF3TyNjO2xPfk8hXSF3TyNjO25Pfk8jeH4hYiFyIXQhdSNVI1YnfCRfJGEkZCR1JVAlUSVSJVglWiVeJV8lYSVjflVUI3gnfCNdfSdZJ1ojeidZJ10nZ34iLCBnb3RvOiAiI0trKFpQUFBQUFBQUChbUChsUCpgUFBQUC16UFAuYTNzN284U1A4U1BQUDhTUDpVOFNQOFNQOllQUDpgUDp0P1ZQUFBQP1pQUFBQP1pBe1BQUEJSRGRQP1pQRndQUFBQSHA/WlBQUFBQSmk/WlBQTWpOZ1BQUFBOayEhVFAhIV0hI15QTmc/Wj9aISZuISlpIS5bIS5bITFrUFBQITFyITRoP1pQUFBQUFBQUFBQITdfUCE4cFBQP1ohOX1QP1pQP1o/Wj9aP1pQP1ohO2RQUCE+XVAhQVEhQVkhQV4hQV5QIT5ZUCFBYiFBYlAhRFZQIURaP1o/WiFEYSFHVDhTUDhTUDhTOFNQIUhXOFM4UyFKZjhTIU1fOFMjIGc4UzhTIyFUIyRjIyRjIyRnIyRjIyRvUCMkY1A4UyMlazhTIydYOFM4Uy16UFBQIyh5UFAjKWMjKWNQIyljUCMpeCMpY1BQIypPUCMpdVAjKXUjKmIhIVgjKXUjK1AjK1YjK1koWyMrXShbUCMrZCMrZCMrZFAoW1AoW1AoW1AoW1BQKFtQIytqIyttUCMrbShbUCMrcVAjK3RQKFtQKFtQKFtQKFtQKFtQKFsoWyMreiMsVSMsWyMsYiMscCMsdiMsfCMtVyMtXiMtbSMtcyMuUiMuWCMuXyMubSMvUyMweiMxWSMxYCMxZiMxbCMxciMxfCMyUyMyWSMyZCMydiMyfFBQUFBQUFBQIzNTUFAjM3YjN09QUCM4ZiM4bSM4dVBQIz5hI0B0I0ZwI0ZzI0Z2I0dSI0dVUFAjR1gjR10jR3ojSHEjSHUjSVpQUCNJXyNJZSNJaVAjSWwjSXAjSXMjSmMjSnkjS08jS1IjS1UjS1sjS18jS2MjS2dtaE9Tan0hbiRdJWMlZiVnJWkqbyp0L2cvalEkaW1RJHBwUSVaeVMmViFiK2BRJmshalMobCN6KHFRKWckalEpdCRyUSpgJVRRK2YmXlMrayZkK21RK30mbFEtayhzUS9VKmFZMForbytwK3ErcitzUzJ0LnkydlUzfDBbMF4wYVU1ZzJ5Mnoye1M2XTRPNFJTN1I1aDVpUTdtNl9SOFE3VCRwW09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYyVlJWYlZyVpJW0leCV6JlMmXyZmJnAmfSdSKFIpVileKmsqbyp0K1QreCxQLGIsaC11LXouUy5dLnwvXy9gL2EvYy9nL2ovbDBUMGowdDJpM1IzZjNoM2kzeDVvNX02VzdqOF04byFqJ2UjXSNrJlcndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FRKH0kU1EpbCRsUSpiJVdRKmklYFEsWDl0US5XKWFRLmMpbVEvXipnUTJfLl5RM1ovVlE0Xjl2UTVTMmBSOHs5dXBlT1NqeX0hbiRdJVklYyVmJWclaSpvKnQvZy9qUipkJVsmV1ZPU1Rqa259IVMhVyFrIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2skXSRuJVslXyVgJWMlZSVmJWclaSVtJXomUyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLG0tdS16LlMuXS58L18vYC9hL2MvZy9qL2wvezBUMGowdDFYMmkycTNSM2YzaDNpM3EzeDVvNX02VzZ7N2o4XThvOV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDtgO2FbIWNSVSFdIWAleCZXUSRjbFEkaG1TJG1wJHJ2JHdycyFyIXUkWiR1JmAmdCZ3KXgpeSl6Km0rWStoLFMsVS9vMGxRJVB3USZoIWlRJmohalMoXyN2KGNTKWYkaSRqUSlqJGxRKXckdFEqWiVSUSpfJVRTK3wmayZsUS1WKGBRLlspZ1EuYiltUS5kKW5RLmcpclEvUCpbUy9UKmAqYVEwaCt9UTFiLVJRMl4uXlEyYi5hUTJnLmlRM1kvVVE0aTFjUTVSMmBRNVUyZFE2dTVRUjd3NnZ4I3hhIXkkVCRVJFkoVyhZKGIodyh4LF8tWS13MWExeTZpO147aTtqO2shWSRmbSFqJGgkaSRqJlUmaiZrJmwoaylmKWcrXStqK3wrfS1kLlswUTBXMF0waDF1M3s0UTZaN2s4XlEpYCRjUSpQJHxRKlMkfVEqXiVUUS5rKXdRL08qWlUvUypfKmAqYVEzVC9QUzNYL1QvVVE1YjJzUTV0M1lTN1A1YzVmUzhPN1E3U1E4ZjhQUTh1OGcjWztiIXcjZCN2I3kmZyd9KFooaCldKV8pYSpPKlIreS1aLV0uUi5ULnAucy57Ln0xazFzMlEyVDJYMmozUTNTNGw0dTR9NWs1cDZ6N1c4VDl3OXo5fTpVOlg6WzphOmQ6ajtsO247dDt1O3ZkO2M5ZDl4OXs6TzpWOlk6XTpiOmU6a2U7ZDlyOXk5fDpQOlc6WjpeOmM6ZjpsVyN9YSRQKHk7XlMkfHQlWVEkfXVRJU92Uil9JHolUCN8YSF3IXkjZCN2I3kkVCRVJFkmZyd9KFcoWShaKGIoaCh3KHgpXSlfKWEqTypSK3ksXy1ZLVotXS13LlIuVC5wLnMuey59MWExazFzMXkyUTJUMlgyajNRM1M0bDR1NH01azVwNmk2ejdXOFQ5ZDlyOXc5eDl5OXo5ezl8OX06TzpQOlU6VjpXOlg6WTpaOls6XTpeOmE6YjpjOmQ6ZTpmOmo6azpsO147aTtqO2s7bDtuO3Q7dTt2VChPI3MoUFgpTyRTOXQ5dTl2VSZaIWIkditjUSdVIXtRKXEkb1EudCpUUTF6LXRSNV4ybyZeY09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojXSNiI2UjayRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLG0tdS16LlMuXS58L18vYC9hL2MvZy9qL2wvezBUMGowdDFYMmkycTNSM2YzaDNpM3EzeDVvNX02VzZ7N2o4XThvOV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthJF0jYVohXyFvJGEldyV9JnknUSdXJ1gnWSdaJ1snXSdeJ18nYCdhJ2InZCdnJ2sndSlwK1IrXitnLE8sXixkLGcsaSx3LXgvdi95MGkwczB3MHgweTB6MHswfDB9MU8xUDFRMVIxUzFUMVcxXTJPMlszczN2NFc0WzRdNGI0YzVgNlM2VjZiNmY2ZzdnN3o4WjhtOHk5Xzp8VCFYUSFZJl9jT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNdI2IjZSNrJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZXJl8mZiZwJn0nUid3KFIpVileKmsqbyp0K1QrWCtbK3gsUCxiLGgsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FRJlghYlIvfCtgWSZSIWImViZeK2ArZlMoayN6KHFTK2omZCttUy1kKGwoc1EtZShtUS1sKHRRLnYqVlUwVytrK28rcFUwXStxK3Irc1MwYit0MnhRMXUta1Exdy1tUTF4LW5TMnMueTJ2VTN7MFowWzBeUTRQMF9RNFEwYVM1YzJ0MntTNWYyeTJ6VTZaM3w0TzRSUTZgNFNTN1E1ZzVoUTdTNWlTN2s2XTZfUzhQN1I3VFE4XjdtUThnOFFRO2g7b1I7bTtzbGhPU2p9IW4kXSVjJWYlZyVpKm8qdC9nL2pRJWshUVMmeCF2OWNRKWQkZ1EqWCVQUSpZJVFRK3omaVMsXSZ9OlJTLXkpVjpfUS5ZKWVRLngqV1Evbip2US9wKndRL3grWlEwYCtxUTBmK3tTMlAtejpnUTJZLlpTMl0uXTpoUTNyL3pRM3UwUlE0VTBnUTVQMlpRNlQzdFE2WDN6UTZhNFZRN2U2UlE3aDZZUThZN2lROGw4W1I4eDhuJFcjYFohXyFvJXclfSZ5J1EnVydYJ1knWidbJ10nXidfJ2AnYSdiJ2QnZydrJ3UpcCtSK14rZyxPLF4sZCxnLHcteC92L3kwaTBzMHcweDB5MHowezB8MH0xTzFQMVExUjFTMVQxVzFdMk8yWzNzM3Y0VzRbNF00YjRjNWA2UzZWNmI2ZjZnN2c3ejhaOG04eTlfOnxXKHYjeyZ8MVY4cVQpWiRhLGkkVyNfWiFfIW8ldyV9JnknUSdXJ1gnWSdaJ1snXSdeJ18nYCdhJ2InZCdnJ2sndSlwK1IrXitnLE8sXixkLGcsdy14L3YveTBpMHMwdzB4MHkwejB7MHwwfTFPMVAxUTFSMVMxVDFXMV0yTzJbM3MzdjRXNFs0XTRiNGM1YDZTNlY2YjZmNmc3Zzd6OFo4bTh5OV86fFEnZiNgUylZJGEsaVIteylaJl5jT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNdI2IjZSNrJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZXJl8mZiZwJn0nUid3KFIpVileKmsqbyp0K1QrWCtbK3gsUCxiLGgsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FRJWZ7USVnfFElaSFPUSVqIVBSL2YqclEmZSFpUSlbJGNRK3cmaFMuUSlgKXdTMGMrdSt2VzJTLX0uTy5QLmtTNFQwZDBlVTR8MlUyVjJXVTZzNHs1WTVaUTd2NnRSOGI3eVQrbCZkK21TK2omZCttVTBXK2srbytwVTBdK3ErcitzUzBiK3QyeFMycy55MnZVM3swWjBbMF5RNFAwX1E0UTBhUzVjMnQye1M1ZjJ5MnpVNlozfDRPNFJRNmA0U1M3UTVnNWhRN1M1aVM3azZdNl9TOFA3UjdUUTheN21SOGc4UVMrbCZkK21UMnUueTJ2UyZyIXEvZFEtVShfUS1iKGtTMFYrajJzUTFnLVZTMXAtYy1sVTN9MF0wYjVmUTRoMWJTNHMxdjF4VTZeNFA0UTdTUTZrNGlRNnI0dlI3bjZgUSF4WFMmcSFxL2RRKVckW1EpYiRlUSloJGtRLFEmclEtVChfUS1hKGtRLWYoblEuWCljUS9RKl1TMFUrajJzUzFmLVUtVlMxby1iLWxRMXItZVExdC1nUTNWL1JXM3kwVjBdMGI1ZlE0ZzFiUTRrMWdTNG8xcDF4UTR0MXdRNXIzV1c2WzN9NFA0UTdTUzZqNGg0aVM2bjRwOmlRNnA0c1E2fTVhUTdbNXNTN2w2XjZgUTdyNmtTN3M2bzptUTd1NnJRN3w3T1E4VjddUThfN25TOGE3dDpuUThkN31ROHM4ZVE5UTh0UTlYOVJROnU6cFE7VDp6UTtVOntRO1Y7aFI7WzttJHJXT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNiI2UkXSRuJVslXyVgJWMlZSVmJWclaSVtJXgleiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG9TIXhuIWshajpvI10jayZXJ3crWCtbLG0vezFYMnEzcTZ7OV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUjp1O2AkclhPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI2IjZSRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmXyZmJnAmfSdSKFIpVileKmsqbyp0K1QreCxQLGIsaC11LXouUy5dLnwvXy9gL2EvYy9nL2ovbDBUMGowdDJpM1IzZjNoM2kzeDVvNX02VzdqOF04b1EkW2IhWSRlbSFqJGgkaSRqJlUmaiZrJmwoaylmKWcrXStqK3wrfS1kLlswUTBXMF0waDF1M3s0UTZaN2s4XlMka24ha1EpYyRmUSpdJVRXL1IqXipfKmAqYVUzVy9TL1QvVVE1YTJzUzVzM1gzWVU3TzViNWM1ZlE3XTV0VTd9N1A3UTdTUzhlOE84UFM4dDhmOGdROVI4dSFqOnAjXSNrJlcndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FROno7X1I6eztgJGZdT1NUamt9IVMhVyFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNiI2UkXSRuJVslXyVjJWUlZiVnJWklbSV6JlMmXyZmJnAmfSdSKFIpVileKmsqbyp0K1QreCxQLGIsaC11LXouUy5dLnwvXy9gL2EvYy9nL2ovbDBUMGowdDJpM1IzZjNoM2kzeDVvNX02VzdqOF04b1khaFJVIV0hYCV4diR3cnMhciF1JFokdSZgJnQmdyl4KXkpeiptK1kraCxTLFUvbzBsUSpqJWAhaDpxI10jayd3K1grWyxtL3sxWDJxM3E2ezleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YVI6dCZXUyZbIWIkdlIwTytjJHBbT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNiI2UkXSRuJVslXyVjJWUlZiVnJWklbSV4JXomUyZfJmYmcCZ9J1IoUilWKV4qaypvKnQrVCt4LFAsYixoLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sMFQwajB0MmkzUjNmM2gzaTN4NW81fTZXN2o4XThvIWonZSNdI2smVyd3K1grWyxtL3sxWDJxM3E2ezleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YVIqaSVgJHJvT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNiI2UkXSRuJVslXyVgJWMlZSVmJWclaSVtJXgleiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG9RJ1UheyFrOnIjXSNrJlcndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2EhaCNWWiFfJGEldyV9JnknUSdfJ2AnYSdiJ2cnaylwK1IrZyxPLF4sZCx3LXgwaTBzMVQyTzJbM3Y0VzRbNlY3ZzhaOG04eTlfIVI5aydkJ3UrXixpL3YveTB3MVAxUTFSMVMxVzFdM3M0XTRiNGM1YDZTNmI2ZjZnN3o6fCFkI1haIV8kYSV3JX0meSdRJ2EnYidnJ2spcCtSK2csTyxeLGQsdy14MGkwczFUMk8yWzN2NFc0WzZWN2c4WjhtOHk5X305bSdkJ3UrXixpL3YveTB3MVIxUzFXMV0zczRdNGI0YzVgNlM2YjZmNmc3ejp8IWAjXVohXyRhJXclfSZ5J1EnZydrKXArUitnLE8sXixkLHcteDBpMHMxVDJPMlszdjRXNFs2VjdnOFo4bTh5OV9RMWEtUHg7YSdkJ3UrXixpL3YveTB3MVcxXTNzNF00YjRjNWA2UzZiNmY2Zzd6OnxRO2k7cFE7ajtxUjtrO3ImXmNPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2skXSRuJVslXyVgJWMlZSVmJWclaSVtJXgleiZTJlcmXyZmJnAmfSdSJ3coUilWKV4qaypvKnQrVCtYK1sreCxQLGIsaCxtLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sL3swVDBqMHQxWDJpMnEzUjNmM2gzaTNxM3g1bzV9Nlc2ezdqOF04bzleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YVMjbGAjbVIxWSxsJmVfT1JTVFVgamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojXSNiI2UjayNtJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZXJl8mZiZwJn0nUid3KFIpVileKmsqbyp0K1QrWCtbK3gsUCxiLGgsbCxtLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sL3swVDBqMHQxWDJpMnEzUjNmM2gzaTNxM3g1bzV9Nlc2ezdqOF04bzleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YVMjZ14jblQnbiNpJ3JUI2heI25UJ3AjaSdyJmVgT1JTVFVgamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojXSNiI2UjayNtJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZXJl8mZiZwJn0nUid3KFIpVileKmsqbyp0K1QrWCtbK3gsUCxiLGgsbCxtLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sL3swVDBqMHQxWDJpMnEzUjNmM2gzaTNxM3g1bzV9Nlc2ezdqOF04bzleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YVQjbGAjbVEjb2BSJ3kjbSRyYk9SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZfJmYmcCZ9J1IoUilWKV4qaypvKnQrVCt4LFAsYixoLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sMFQwajB0MmkzUjNmM2gzaTN4NW81fTZXN2o4XThvIWs7XyNdI2smVyd3K1grWyxtL3sxWDJxM3E2ezleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YSNSZE9TVWp9IVMhVyFuIXwjayRdJVslXyVgJWMlZSVmJWclaSVtJlMmZid3KV4qaypvKnQreCxtLXUuUy58L18vYC9hL2MvZy9qL2wxWDJpM1IzZjNoM2k1bzV9eCN7YSF5JFQkVSRZKFcoWShiKHcoeCxfLVktdzFhMXk2aTteO2k7ajtrI1smfCF3I2QjdiN5JmcnfShaKGgpXSlfKWEqTypSK3ktWi1dLlIuVC5wLnMuey59MWsxczJRMlQyWDJqM1EzUzRsNHU0fTVrNXA2ejdXOFQ5dzl6OX06VTpYOls6YTpkOmo7bDtuO3Q7dTt2USlTJFdRLHgoU2QxVjlyOXk5fDpQOlc6WjpeOmM6ZjpsZThxOWQ5eDl7Ok86VjpZOl06YjplOmt4I3dhIXkkVCRVJFkoVyhZKGIodyh4LF8tWS13MWExeTZpO147aTtqO2tRKGQjeFMobiN6KHFRKVQkWFEtZyhvI1s6dyF3I2QjdiN5JmcnfShaKGgpXSlfKWEqTypSK3ktWi1dLlIuVC5wLnMuey59MWsxczJRMlQyWDJqM1EzUzRsNHU0fTVrNXA2ejdXOFQ5dzl6OX06VTpYOls6YTpkOmo7bDtuO3Q7dTt2ZDp4OWQ5eDl7Ok86VjpZOl06YjplOmtkOnk5cjl5OXw6UDpXOlo6XjpjOmY6bFE6fTtiUTtPO2NRO1A7ZFE7UTtlUTtSO2ZSO1M7Z3gje2EheSRUJFUkWShXKFkoYih3KHgsXy1ZLXcxYTF5Nmk7XjtpO2o7ayNbJnwhdyNkI3YjeSZnJ30oWihoKV0pXylhKk8qUit5LVotXS5SLlQucC5zLnsufTFrMXMyUTJUMlgyajNRM1M0bDR1NH01azVwNno3VzhUOXc5ejl9OlU6WDpbOmE6ZDpqO2w7bjt0O3U7dmQxVjlyOXk5fDpQOlc6WjpeOmM6ZjpsZThxOWQ5eDl7Ok86VjpZOl06YjplOmtsZk9Tan0hbiRdJWMlZiVnJWkqbyp0L2cvalEoZyN5USp9JXBRK08lclIxai1aJU8jfGEhdyF5I2QjdiN5JFQkVSRZJmcnfShXKFkoWihiKGgodyh4KV0pXylhKk8qUit5LF8tWS1aLV0tdy5SLlQucC5zLnsufTFhMWsxczF5MlEyVDJYMmozUTNTNGw0dTR9NWs1cDZpNno3VzhUOWQ5cjl3OXg5eTl6OXs5fDl9Ok86UDpVOlY6VzpYOlk6WjpbOl06XjphOmI6YzpkOmU6ZjpqOms6bDteO2k7ajtrO2w7bjt0O3U7dlEqUSR9US5yKlNRMm0ucVI1XTJuVChwI3oocVMocCN6KHFUMnUueTJ2USliJGVRLWYoblEuWCljUS9RKl1RM1YvUlE1cjNXUTZ9NWFRN1s1c1E3fDdPUThWN11ROGQ3fVE4czhlUTlROHRSOVg5UnAoVyN0J08pVS1YLW8tcDBxMWgxfTRmNHc3cTp2O1c7WDtZIW46VSZ6J2koXihmK3YsWyx0LVAtXi18LlAuby5xMGUwcDFpMW0yVzJsMm4zTzRZNFo0bTRxNHk1TzVaNW42bTZxN1k4YDtaO107cDtxO3JbOlY4cDlPOVY5WTlaOV1dOlcxVTRhNmM3bzdwOHpyKFkjdCdPKVUsfS1YLW8tcDBxMWgxfTRmNHc3cTp2O1c7WDtZIXA6WCZ6J2koXihmK3YsWyx0LVAtXi18LlAuby5xMGUwbjBwMWkxbTJXMmwybjNPNFk0WjRtNHE0eTVPNVo1bjZtNnE3WThgO1o7XTtwO3E7cl46WThwOU85VDlWOVk5WjldXzpaMVU0YTZjNmQ3bzdwOHpwZU9Tanl9IW4kXSVZJWMlZiVnJWkqbyp0L2cvalElVnhSKmslYHBlT1NqeX0hbiRdJVklYyVmJWclaSpvKnQvZy9qUiVWeFEqVSVPUi5uKX1xZU9Tanl9IW4kXSVZJWMlZiVnJWkqbyp0L2cvalEueipaUzNQL08vUFc1ajJ8Mn0zTzNUVTdWNWw1bTVuVThSN1U3WDdZUThoOFNSOHY4aVElXnlSKmUlWVIzXi9YUjdfNXVTJG1wJHJSLmQpblElY3pSKm8lZFIqdSVqVC9oKnQvalIqeSVrUSp4JWtSL3EqeVFqT1EhblNUJGBqIW5RKFAjc1IsdShQUSFZUVIldSFZUSFeUlUleyFeJXwrVVElfCFfUitVJX1RK2EmWFIvfSthUSxgJ09SMHIsYFEsYydRUzB1LGMwdlIwdixkUSttJmRSMFgrbVMhZVIkdVUmYSFlJmIrVlEmYiFmUitWJk9RK2QmW1IwUCtkUSZ1IXNRLFImc1UsViZ1LFIwbVIwbSxXUSdyI2lSLG4nclEjbWBSJ3gjbVEjY1pVJ2gjYytROXFRK1E5X1I5cSd1US1TKF9XMWQtUzFlNGo2bFUxZS1ULVUtVlM0ajFmMWdSNmw0ayRrKFUjdCZ6J08naSheKGYpUClRKVUrdixZLFosWyx0LH0tTy1QLVgtXi1vLXAtfC5QLm8ucTBlMG4wbzBwMHExVTFoMWkxbTF9MlcybDJuM080WTRaNF80YDRhNGY0bTRxNHc0eTVPNVo1bjZjNmQ2ZTZtNnE3WTdvN3A3cThgOHA4ejh8OH05TzlUOVU5VjlZOVo5XTp2O1c7WDtZO1o7XTtwO3E7clEtWyhmVTFsLVsxbjRuUTFuLV5SNG4xbVEocSN6Ui1pKHFRKHokT1Itcih6UTJSLXxSNHoyUlEpeyR4Ui5tKXtRMnAudFM1XzJwNnxSNnw1YFEqVyVQUi53KldRMnYueVI1ZDJ2US9XKmJTM1svVzV2UjV2M15RLl8palcyYS5fMmM1VDZ3UTJjLmJRNVQyYlI2dzVVUSlvJG1SLmUpb1Evaip0UjNsL2pXaU9TaiFuUSVofVEpWCRdUSpuJWNRKnAlZlEqcSVnUSpzJWlRL2Uqb1MvaCp0L2pSM2svZ1EkX2dRJWwhUlElbyFUUSVxIVVRJXMhVlEpdiRzUSl8JHlRKmQlXlEqeyVuUS1oKHBTL1oqZSpoUS9yKnpRL3MqfVEvdCtPUzBTK2oyc1EyZi5oUTJrLm9RM1UvUVEzYC9dUTNqL2ZZM3cwVTBWMF0wYjVmUTVYMmhRNVsybFE1cTNWUTV3M19bNlUzdjN5M300UDRRN1NRNng1VlE3WjVyUTdgNXhXN2Y2VjZbNl42YFE3eDZ5UTd7Nn1ROFU3W1U4WDdnN2w3blE4Yzd8UThqOFZTOGs4WjhfUThyOGRROHc4bVE5UDhzUTlTOHlROVc5UVI5WzlYUSRnbVEmaSFqVSllJGgkaSRqUStaJlVVK3smaiZrJmxRLWAoa1MuWilmKWdRL3orXVEwUitqUzBnK3wrfVExcS1kUTJaLltRM3QwUVMzejBXMF1RNFYwaFE0cjF1UzZZM3s0UVE3aTZaUThbN2tSOG44XlMjdWE7XlIoeyRQVSRPYSRQO15SLXEoeVEjdGFTJnohdylhUSdPIXlRJ2kjZFEoXiN2UShmI3lRKVAkVFEpUSRVUSlVJFlRK3YmZ1EsWTl3USxaOXpRLFs5fVEsdCd9USx9KFdRLU8oWVEtUChaUS1YKGJRLV4oaFEtbyh3US1wKHhkLXwpXS5SLnsyVDNRNH01azZ6N1c4VFEuUClfUS5vKk9RLnEqUlEwZSt5UTBuOlVRMG86WFEwcDpbUTBxLF9RMVU5clExaC1ZUTFpLVpRMW0tXVExfS13UTJXLlRRMmwucFEybi5zUTNPLn1RNFk6YVE0WjpkUTRfOXlRNGA5fFE0YTpQUTRmMWFRNG0xa1E0cTFzUTR3MXlRNHkyUVE1TzJYUTVaMmpRNW4zU1E2YzpeUTZkOldRNmU6WlE2bTRsUTZxNHVRN1k1cFE3bzpjUTdwOmZRN3E2aVE4YDpqUThwOWRROHo6bFE4fDl4UTh9OXtROU86T1E5VDpWUTlVOllROVY6XVE5WTpiUTlaOmVROV06a1E6djteUTtXO2lRO1g7alE7WTtrUTtaO2xRO107blE7cDt0UTtxO3VSO3I7dmxnT1NqfSFuJF0lYyVmJWclaSpvKnQvZy9qUyFwVSVlUSVuIVNRJXQhV1EnViF8USd2I2tTKmglWyVfUSpsJWBRKnolbVErVyZTUSt1JmZRLHInd1EuTyleUS9iKmtRMGQreFExWyxtUTF7LXVRMlYuU1EyfS58UTNiL19RM2MvYFEzZS9hUTNnL2NRM24vbFE0ZDFYUTVZMmlRNW0zUlE1fDNmUTZPM2hRNlAzaVE3WDVvUjdiNX0hdlpPU1VqfSFTIW4hfCRdJVslXyVgJWMlZSVmJWclaSVtJlMmZileKmsqbyp0K3gtdS5TLnwvXy9gL2EvYy9nL2ovbDJpM1IzZjNoM2k1bzV9USFfUlEhb1RRJGFrUyV3IV0lelElfSFgUSZ5IXZRJ1EhelEnVyNQUSdYI1FRJ1kjUlEnWiNTUSdbI1RRJ10jVVEnXiNWUSdfI1dRJ2AjWFEnYSNZUSdiI1pRJ2QjXVEnZyNiUSdrI2VXJ3Ujayd3LG0xWFEpcCRuUytSJXgrVFMrXiZXL3tRK2cmX1EsTyZwUSxeJn1RLGQnUlEsZzleUSxpOWBRLHcoUlEteClWUS92K1hRL3krW1EwaSxQUTBzLGJRMHc5Y1EweDllUTB5OWZRMHo5Z1EwezloUTB8OWlRMH05alExTzlrUTFQOWxRMVE5bVExUjluUTFTOW9RMVQsaFExVzlzUTFdOXBRMk8telEyWy5dUTNzOlFRM3YwVFE0VzBqUTRbMHRRNF06UlE0YjpUUTRjOl9RNWAycVE2UzNxUTZWM3hRNmI6YFE2ZjpnUTZnOmhRN2c2V1E3ejZ7UThaN2pROG04XVE4eThvUTlfIVdSOnw7YVIhYVJSJlkhYlMmVSFiK2BTK10mViZeUjBRK2ZSJ1AheVInUyF6VCF0VSRaUyFzVSRaVSR4cnMqbVMmcyFyIXVRLFQmdFEsVyZ3US5sKXpTMGssUyxVUjRYMGxgIWRSIV0hYCR1JXgmYCl4K2hoIXFVcnMhciF1JFomdCZ3KXosUyxVMGxRL2QqbVEvdytZUTNwL29UOnMmVyl5VCFnUiR1UyFmUiR1UyV5IV0mYFMmTyFgKXhTK1MleCtoVCtfJlcpeVQmXSFiJHZRI2leUid7I25UJ3EjaSdyUjFaLGxUKGEjdihjUihpI3lRLX0pXVEyVS5SUTJ8LntRNHsyVFE1bDNRUTZ0NH1RN1U1a1E3eTZ6UThTN1dSOGk4VGxoT1NqfSFuJF0lYyVmJWclaSpvKnQvZy9qUSVdeVIqZCVZViR5cnMqbVIudSpUUipjJVdRJHFwUil1JHJSKWskbFQlYXolZFQlYnolZFQvaSp0L2oiLCBub2RlTmFtZXM6ICJcdTI2QTAgZXh0ZW5kcyBBcml0aE9wIEFyaXRoT3AgSW50ZXJwb2xhdGlvblN0YXJ0IExpbmVDb21tZW50IEJsb2NrQ29tbWVudCBTY3JpcHQgRXhwb3J0RGVjbGFyYXRpb24gZXhwb3J0IFN0YXIgYXMgVmFyaWFibGVOYW1lIFN0cmluZyBmcm9tIDsgZGVmYXVsdCBGdW5jdGlvbkRlY2xhcmF0aW9uIGFzeW5jIGZ1bmN0aW9uIFZhcmlhYmxlRGVmaW5pdGlvbiBUeXBlUGFyYW1MaXN0IFR5cGVEZWZpbml0aW9uIFRoaXNUeXBlIHRoaXMgTGl0ZXJhbFR5cGUgQXJpdGhPcCBOdW1iZXIgQm9vbGVhbkxpdGVyYWwgVGVtcGxhdGVUeXBlIEludGVycG9sYXRpb25FbmQgSW50ZXJwb2xhdGlvbiBWb2lkVHlwZSB2b2lkIFR5cGVvZlR5cGUgdHlwZW9mIE1lbWJlckV4cHJlc3Npb24gLiA/LiBQcm9wZXJ0eU5hbWUgWyBUZW1wbGF0ZVN0cmluZyBJbnRlcnBvbGF0aW9uIG51bGwgc3VwZXIgUmVnRXhwIF0gQXJyYXlFeHByZXNzaW9uIFNwcmVhZCAsIH0geyBPYmplY3RFeHByZXNzaW9uIFByb3BlcnR5IGFzeW5jIGdldCBzZXQgUHJvcGVydHlEZWZpbml0aW9uIEJsb2NrIDogTmV3RXhwcmVzc2lvbiBuZXcgVHlwZUFyZ0xpc3QgQ29tcGFyZU9wIDwgKSAoIEFyZ0xpc3QgVW5hcnlFeHByZXNzaW9uIGF3YWl0IHlpZWxkIGRlbGV0ZSBMb2dpY09wIEJpdE9wIFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIENsYXNzRXhwcmVzc2lvbiBjbGFzcyBleHRlbmRzIENsYXNzQm9keSBNZXRob2REZWNsYXJhdGlvbiBQcml2YWN5IHN0YXRpYyBhYnN0cmFjdCBvdmVycmlkZSBQcml2YXRlUHJvcGVydHlEZWZpbml0aW9uIFByb3BlcnR5RGVjbGFyYXRpb24gcmVhZG9ubHkgT3B0aW9uYWwgVHlwZUFubm90YXRpb24gRXF1YWxzIFN0YXRpY0Jsb2NrIEZ1bmN0aW9uRXhwcmVzc2lvbiBBcnJvd0Z1bmN0aW9uIFBhcmFtTGlzdCBQYXJhbUxpc3QgQXJyYXlQYXR0ZXJuIE9iamVjdFBhdHRlcm4gUGF0dGVyblByb3BlcnR5IFByaXZhY3kgcmVhZG9ubHkgQXJyb3cgTWVtYmVyRXhwcmVzc2lvbiBQcml2YXRlUHJvcGVydHlOYW1lIEJpbmFyeUV4cHJlc3Npb24gQXJpdGhPcCBBcml0aE9wIEFyaXRoT3AgQXJpdGhPcCBCaXRPcCBDb21wYXJlT3AgaW5zdGFuY2VvZiBpbiBjb25zdCBDb21wYXJlT3AgQml0T3AgQml0T3AgQml0T3AgTG9naWNPcCBMb2dpY09wIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBMb2dpY09wIExvZ2ljT3AgQXNzaWdubWVudEV4cHJlc3Npb24gVXBkYXRlT3AgUG9zdGZpeEV4cHJlc3Npb24gQ2FsbEV4cHJlc3Npb24gVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIER5bmFtaWNJbXBvcnQgaW1wb3J0IEltcG9ydE1ldGEgSlNYRWxlbWVudCBKU1hTZWxmQ2xvc2VFbmRUYWcgSlNYU3RhcnRUYWcgSlNYU2VsZkNsb3NpbmdUYWcgSlNYSWRlbnRpZmllciBKU1hOYW1lc3BhY2VkTmFtZSBKU1hNZW1iZXJFeHByZXNzaW9uIEpTWFNwcmVhZEF0dHJpYnV0ZSBKU1hBdHRyaWJ1dGUgSlNYQXR0cmlidXRlVmFsdWUgSlNYRXNjYXBlIEpTWEVuZFRhZyBKU1hPcGVuVGFnIEpTWEZyYWdtZW50VGFnIEpTWFRleHQgSlNYRXNjYXBlIEpTWFN0YXJ0Q2xvc2VUYWcgSlNYQ2xvc2VUYWcgUHJlZml4Q2FzdCBBcnJvd0Z1bmN0aW9uIFR5cGVQYXJhbUxpc3QgU2VxdWVuY2VFeHByZXNzaW9uIEtleW9mVHlwZSBrZXlvZiBVbmlxdWVUeXBlIHVuaXF1ZSBJbXBvcnRUeXBlIEluZmVycmVkVHlwZSBpbmZlciBUeXBlTmFtZSBQYXJlbnRoZXNpemVkVHlwZSBGdW5jdGlvblNpZ25hdHVyZSBQYXJhbUxpc3QgTmV3U2lnbmF0dXJlIEluZGV4ZWRUeXBlIFR1cGxlVHlwZSBMYWJlbCBBcnJheVR5cGUgUmVhZG9ubHlUeXBlIE9iamVjdFR5cGUgTWV0aG9kVHlwZSBQcm9wZXJ0eVR5cGUgSW5kZXhTaWduYXR1cmUgQ2FsbFNpZ25hdHVyZSBUeXBlUHJlZGljYXRlIGlzIE5ld1NpZ25hdHVyZSBuZXcgVW5pb25UeXBlIExvZ2ljT3AgSW50ZXJzZWN0aW9uVHlwZSBMb2dpY09wIENvbmRpdGlvbmFsVHlwZSBQYXJhbWV0ZXJpemVkVHlwZSBDbGFzc0RlY2xhcmF0aW9uIGFic3RyYWN0IGltcGxlbWVudHMgdHlwZSBWYXJpYWJsZURlY2xhcmF0aW9uIGxldCB2YXIgVHlwZUFsaWFzRGVjbGFyYXRpb24gSW50ZXJmYWNlRGVjbGFyYXRpb24gaW50ZXJmYWNlIEVudW1EZWNsYXJhdGlvbiBlbnVtIEVudW1Cb2R5IE5hbWVzcGFjZURlY2xhcmF0aW9uIG5hbWVzcGFjZSBtb2R1bGUgQW1iaWVudERlY2xhcmF0aW9uIGRlY2xhcmUgR2xvYmFsRGVjbGFyYXRpb24gZ2xvYmFsIENsYXNzRGVjbGFyYXRpb24gQ2xhc3NCb2R5IE1ldGhvZERlY2xhcmF0aW9uIEFtYmllbnRGdW5jdGlvbkRlY2xhcmF0aW9uIEV4cG9ydEdyb3VwIFZhcmlhYmxlTmFtZSBWYXJpYWJsZU5hbWUgSW1wb3J0RGVjbGFyYXRpb24gSW1wb3J0R3JvdXAgRm9yU3RhdGVtZW50IGZvciBGb3JTcGVjIEZvckluU3BlYyBGb3JPZlNwZWMgb2YgV2hpbGVTdGF0ZW1lbnQgd2hpbGUgV2l0aFN0YXRlbWVudCB3aXRoIERvU3RhdGVtZW50IGRvIElmU3RhdGVtZW50IGlmIGVsc2UgU3dpdGNoU3RhdGVtZW50IHN3aXRjaCBTd2l0Y2hCb2R5IENhc2VMYWJlbCBjYXNlIERlZmF1bHRMYWJlbCBUcnlTdGF0ZW1lbnQgdHJ5IENhdGNoQ2xhdXNlIGNhdGNoIEZpbmFsbHlDbGF1c2UgZmluYWxseSBSZXR1cm5TdGF0ZW1lbnQgcmV0dXJuIFRocm93U3RhdGVtZW50IHRocm93IEJyZWFrU3RhdGVtZW50IGJyZWFrIENvbnRpbnVlU3RhdGVtZW50IGNvbnRpbnVlIERlYnVnZ2VyU3RhdGVtZW50IGRlYnVnZ2VyIExhYmVsZWRTdGF0ZW1lbnQgRXhwcmVzc2lvblN0YXRlbWVudCIsIG1heFRlcm06IDMzMiwgY29udGV4dDogaDQsIG5vZGVQcm9wczogW1siY2xvc2VkQnkiLCA0LCAiSW50ZXJwb2xhdGlvbkVuZCIsIDQwLCAiXSIsIDUxLCAifSIsIDY2LCAiKSIsIDEzMiwgIkpTWFNlbGZDbG9zZUVuZFRhZyBKU1hFbmRUYWciLCAxNDYsICJKU1hFbmRUYWciXSwgWyJncm91cCIsIC0yNiwgOCwgMTUsIDE3LCA1OCwgMTg0LCAxODgsIDE5MSwgMTkyLCAxOTQsIDE5NywgMjAwLCAyMTEsIDIxMywgMjE5LCAyMjEsIDIyMywgMjI1LCAyMjgsIDIzNCwgMjQwLCAyNDIsIDI0NCwgMjQ2LCAyNDgsIDI1MCwgMjUxLCAiU3RhdGVtZW50IiwgLTMwLCAxMiwgMTMsIDI0LCAyNywgMjgsIDQxLCA0MywgNDQsIDQ1LCA0NywgNTIsIDYwLCA2OCwgNzQsIDc1LCA5MSwgOTIsIDEwMSwgMTAzLCAxMTksIDEyMiwgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjksIDEzMCwgMTQ4LCAxNDksIDE1MSwgIkV4cHJlc3Npb24iLCAtMjIsIDIzLCAyNSwgMjksIDMyLCAzNCwgMTUyLCAxNTQsIDE1NiwgMTU3LCAxNTksIDE2MCwgMTYxLCAxNjMsIDE2NCwgMTY1LCAxNjcsIDE2OCwgMTY5LCAxNzgsIDE4MCwgMTgyLCAxODMsICJUeXBlIiwgLTMsIDc5LCA4NSwgOTAsICJDbGFzc0l0ZW0iXSwgWyJvcGVuZWRCeSIsIDMwLCAiSW50ZXJwb2xhdGlvblN0YXJ0IiwgNDYsICJbIiwgNTAsICJ7IiwgNjUsICIoIiwgMTMxLCAiSlNYU3RhcnRUYWciLCAxNDEsICJKU1hTdGFydFRhZyBKU1hTdGFydENsb3NlVGFnIl1dLCBwcm9wU291cmNlczogW3YxMF0sIHNraXBwZWROb2RlczogWzAsIDUsIDZdLCByZXBlYXROb2RlQ291bnQ6IDI4LCB0b2tlbkRhdGE6ICIhQ31+UiFgT1glVFhZJWNZWidSWlslY1tdJVRdXidSXnAlVHBxJWNxcidjcnMoa3N0MGh0dTJgdXY0cHZ3NWV3eDZjeHk8eXl6PVp6ez1re3w+a3x9P099IU8+ayFPIVA/YCFQIVFDbCFRIVIhMFshUiFbITFxIVshXSE3cyFdIV4hOFYhXiFfIThnIV8hYCE5ZCFgIWEhOlshYSFiITxSIWIhYyVUIWMhfTJgIX0jTyE9ZCNPI1AlVCNQI1EhPXQjUSNSIT5VI1IjUzJgI1MjVCE+aSNUI28yYCNvI3AhPnkjcCNxIT9PI3EjciE/ZiNyI3MhP3gjcyRmJVQkZiRnJWMkZyNCWTJgI0JZI0JaIUBZI0JaJElTMmAkSVMkSV8hQFkkSV8kSXwyYCRJfCRJfSFCcSRJfSRKTyFCcSRKTyRKVDJgJEpUJEpVIUBZJEpVJEtWMmAkS1YkS1chQFkkS1cmRlUyYCZGVSZGViFAWSZGVj9IVDJgP0hUP0hVIUBZP0hVfjJgVyVZUiRVV08hXiVUIV8jbyVUI3B+JVQ3WiVqZyRVVydZN1JPWCVUWFklY1laJVRaWyVjW3AlVHBxJWNxIV4lVCFfI28lVCNwJGYlVCRmJGclYyRnI0JZJVQjQlkjQlolYyNCWiRJUyVUJElTJElfJWMkSV8kSlQlVCRKVCRKVSVjJEpVJEtWJVQkS1YkS1clYyRLVyZGVSVUJkZVJkZWJWMmRlY/SFQlVD9IVD9IVSVjP0hVfiVUN1onWVIkVVcnWjdSTyFeJVQhXyNvJVQjcH4lVCRUJ2pTJFVXIWoje08hXiVUIV8hYCd2IWAjbyVUI3B+JVQkTyd9UyNlI3YkVVdPIV4lVCFfIWAoWiFgI28lVCNwfiVUJE8oYlIjZSN2JFVXTyFeJVQhXyNvJVQjcH4lVClYKHJaJFVXXSNlT1koa1laKWVacihrcnMqcnMhXihrIV4hXytVIV8jTyhrI08jUC1iI1AjbyhrI28jcCtVI3B+KGsmcilqViRVV09yKWVycypQcyFeKWUhXiFfKmEhXyNvKWUjbyNwKmEjcH4pZSZyKldSJFAmaiRVV08hXiVUIV8jbyVUI3B+JVQmaipkUk9yKmFycyptc34qYSZqKnJPJFAmailYKntSJFAmaiRVV10jZU8hXiVUIV8jbyVUI3B+JVQpUCtaVl0jZU9ZK1VZWiphWnIrVXJzK3BzI08rVSNPI1ArdyNQfitVKVArd08kUCZqXSNlKVArelJPcitVcnMsVHN+K1UpUCxbVSRQJmpdI2VPWSxuWnIsbnJzLVZzI08sbiNPI1AtWyNQfixuI2Usc1VdI2VPWSxuWnIsbnJzLVZzI08sbiNPI1AtWyNQfixuI2UtW09dI2UjZS1fUE9+LG4pWC1nViRVV09yKGtycy18cyFeKGshXiFfK1UhXyNvKGsjbyNwK1UjcH4oaylYLlZaJFAmaiRVV10jZU9ZLnhZWiVUWnIueHJzL3JzIV4ueCFeIV8sbiFfI08ueCNPI1AwUyNQI28ueCNvI3AsbiNwfi54I20vUFokVVddI2VPWS54WVolVFpyLnhycy9ycyFeLnghXiFfLG4hXyNPLngjTyNQMFMjUCNvLngjbyNwLG4jcH4ueCNtL3lSJFVXXSNlTyFeJVQhXyNvJVQjcH4lVCNtMFhUJFVXTyFeLnghXiFfLG4hXyNvLngjbyNwLG4jcH4ueDNdMG1aJFVXT3QlVHR1MWB1IV4lVCFfIWMlVCFjIX0xYCF9I1IlVCNSI1MxYCNTI1QlVCNUI28xYCNwJGclVCRnfjFgM10xZ10kVVcnbzNUT3QlVHR1MWB1IVElVCFRIVsxYCFbIV4lVCFfIWMlVCFjIX0xYCF9I1IlVCNSI1MxYCNTI1QlVCNUI28xYCNwJGclVCRnfjFgN1oya18kVVcjelMnXSR5J2czU090JVR0dTJgdX0lVH0hTzNqIU8hUSVUIVEhWzJgIVshXiVUIV8hYyVUIWMhfTJgIX0jUiVUI1IjUzJgI1MjVCVUI1QjbzJgI3AkZyVUJGd+MmBbM3FfJFVXI3pTT3QlVHR1M2p1fSVUfSFPM2ohTyFRJVQhUSFbM2ohWyFeJVQhXyFjJVQhYyF9M2ohfSNSJVQjUiNTM2ojUyNUJVQjVCNvM2ojcCRnJVQkZ34zaiRPNHdTI14jdiRVV08hXiVUIV8hYDVUIWAjbyVUI3B+JVQkTzVbUiRVVyNvI3ZPIV4lVCFfI28lVCNwfiVUNWI1bFUneDVZJFVXT3YlVHZ3Nk93IV4lVCFfIWA1VCFgI28lVCNwfiVUJE82VlMkVVcjaSN2TyFeJVQhXyFgNVQhYCNvJVQjcH4lVClYNmpaJFVXXSNlT1k2Y1laN11adzZjd3gqcnghXjZjIV4hXzhUIV8jTzZjI08jUDpUI1AjbzZjI28jcDhUI3B+NmMmcjdiViRVV093N113eCpQeCFeN10hXiFfN3chXyNvN10jbyNwN3cjcH43XSZqN3pST3c3d3d4Km14fjd3KVA4WVZdI2VPWThUWVo3d1p3OFR3eCtweCNPOFQjTyNQOG8jUH44VClQOHJST3c4VHd4OHt4fjhUKVA5U1UkUCZqXSNlT1k5Zlp3OWZ3eC1WeCNPOWYjTyNQOX0jUH45ZiNlOWtVXSNlT1k5Zlp3OWZ3eC1WeCNPOWYjTyNQOX0jUH45ZiNlOlFQT345ZilYOllWJFVXT3c2Y3d4Om94IV42YyFeIV84VCFfI282YyNvI3A4VCNwfjZjKVg6eFokUCZqJFVXXSNlT1k7a1laJVRadztrd3gvcnghXjtrIV4hXzlmIV8jTztrI08jUDxlI1AjbztrI28jcDlmI3B+O2sjbTtyWiRVV10jZU9ZO2tZWiVUWnc7a3d4L3J4IV47ayFeIV85ZiFfI087ayNPI1A8ZSNQI287ayNvI3A5ZiNwfjtrI208alQkVVdPIV47ayFeIV85ZiFfI287ayNvI3A5ZiNwfjtrJmk9UVIhZCZhJFVXTyFeJVQhXyNvJVQjcH4lVGs9YlIhY2MkVVdPIV4lVCFfI28lVCNwfiVUN1Y9dFUnXjRWI18jdiRVV096JVR6ez5XeyFeJVQhXyFgNVQhYCNvJVQjcH4lVCRPPl9TI1sjdiRVV08hXiVUIV8hYDVUIWAjbyVUI3B+JVQldz5yU2olbyRVV08hXiVUIV8hYDVUIWAjbyVUI3B+JVQmaT9WUiFSJmEkVVdPIV4lVCFfI28lVCNwfiVUN1o/Z1Z1NV4kVVdPIU8lVCFPIVA/fCFQIVElVCFRIVtAciFbIV4lVCFfI28lVCNwfiVUIXtAUlQkVVdPIU8lVCFPIVBAYiFQIV4lVCFfI28lVCNwfiVUIXtAaVIhUSFzJFVXTyFeJVQhXyNvJVQjcH4lVCF7QHlaJFVXayFzTyFRJVQhUSFbQHIhWyFeJVQhXyFnJVQhZyFoQWwhaCNSJVQjUiNTQHIjUyNYJVQjWCNZQWwjWSNvJVQjcH4lVCF7QXFaJFVXT3slVHt8QmR8fSVUfSFPQmQhTyFRJVQhUSFbQ08hWyFeJVQhXyNSJVQjUiNTQ08jUyNvJVQjcH4lVCF7QmlWJFVXTyFRJVQhUSFbQ08hWyFeJVQhXyNSJVQjUiNTQ08jUyNvJVQjcH4lVCF7Q1ZWJFVXayFzTyFRJVQhUSFbQ08hWyFeJVQhXyNSJVQjUiNTQ08jUyNvJVQjcH4lVDdaQ3NgJFVXI10jdk9ZRHVZWiVUWnpEdXp7Smx7IVBEdSFQIVEhLWUhUSFeRHUhXiFfRnghXyFgIS5eIWAhYSEvXSFhIX1EdSF9I09IcSNPI1BKUSNQI29EdSNvI3BGeCNwfkR1WER8WyRVV31QT1lEdVlaJVRaIVBEdSFQIVFFciFRIV5EdSFeIV9GeCFfIX1EdSF9I09IcSNPI1BKUSNQI29EdSNvI3BGeCNwfkR1WEV5XyRVV31QTyFeJVQhXyNaJVQjWiNbRXIjWyNdJVQjXSNeRXIjXiNhJVQjYSNiRXIjYiNnJVQjZyNoRXIjaCNpJVQjaSNqRXIjaiNtJVQjbSNuRXIjbiNvJVQjcH4lVFBGfVZ9UE9ZRnhaIVBGeCFQIVFHZCFRIX1GeCF9I09HeyNPI1BIaCNQfkZ4UEdpVX1QI1ojW0dkI10jXkdkI2EjYkdkI2cjaEdkI2kjakdkI20jbkdkUEhPVE9ZR3taI09HeyNPI1BIXyNQI1FGeCNRfkd7UEhiUU9ZR3tafkd7UEhrUU9ZRnhafkZ4WEh2WSRVV09ZSHFZWiVUWiFeSHEhXiFfR3shXyNPSHEjTyNQSWYjUCNRRHUjUSNvSHEjbyNwR3sjcH5IcVhJa1YkVVdPWUhxWVolVFohXkhxIV4hX0d7IV8jb0hxI28jcEd7I3B+SHFYSlZWJFVXT1lEdVlaJVRaIV5EdSFeIV9GeCFfI29EdSNvI3BGeCNwfkR1N1pKc14kVVd9UE9ZSmxZWktvWnpKbHp7TlF7IVBKbCFQIVEhLFIhUSFeSmwhXiFfISFdIV8hfUpsIX0jTyEnfCNPI1AhK2EjUCNvSmwjbyNwISFdI3B+Smw3Wkt0ViRVV096S296e0xaeyFeS28hXiFfTV0hXyNvS28jbyNwTV0jcH5LbzdaTGBYJFVXT3pLb3p7TFp7IVBLbyFQIVFMeyFRIV5LbyFeIV9NXSFfI29LbyNvI3BNXSNwfktvN1pNU1IkVVdVN1JPIV4lVCFfI28lVCNwfiVUN1JNYFJPek1dentNaXt+TV03Uk1sVE96TV16e01peyFQTV0hUCFRTXshUX5NXTdSTlFPVTdSN1pOWF4kVVd9UE9ZSmxZWktvWnpKbHp7TlF7IVBKbCFQIVEhIFQhUSFeSmwhXiFfISFdIV8hfUpsIX0jTyEnfCNPI1AhK2EjUCNvSmwjbyNwISFdI3B+Smw3WiEgXl8kVVdVN1J9UE8hXiVUIV8jWiVUI1ojW0VyI1sjXSVUI10jXkVyI14jYSVUI2EjYkVyI2IjZyVUI2cjaEVyI2gjaSVUI2kjakVyI2ojbSVUI20jbkVyI24jbyVUI3B+JVQ3UiEhYll9UE9ZISFdWVpNXVp6ISFdenshI1F7IVAhIV0hUCFRISZ4IVEhfSEhXSF9I08hJGAjTyNQISZmI1B+ISFdN1IhI1ZZfVBPWSEhXVlaTV1aeiEhXXp7ISNReyFQISFdIVAhUSEjdSFRIX0hIV0hfSNPISRgI08jUCEmZiNQfiEhXTdSISN8VVU3Un1QI1ojW0dkI10jXkdkI2EjYkdkI2cjaEdkI2kjakdkI20jbkdkN1IhJGNXT1khJGBZWk1dWnohJGB6eyEke3sjTyEkYCNPI1AhJlMjUCNRISFdI1F+ISRgN1IhJU9ZT1khJGBZWk1dWnohJGB6eyEke3shUCEkYCFQIVEhJW4hUSNPISRgI08jUCEmUyNQI1EhIV0jUX4hJGA3UiElc1RVN1JPWUd7WiNPR3sjTyNQSF8jUCNRRngjUX5HezdSISZWVE9ZISRgWVpNXVp6ISRgenshJHt7fiEkYDdSISZpVE9ZISFdWVpNXVp6ISFdenshI1F7fiEhXTdSISZ9X31QT3pNXXp7TWl7I1pNXSNaI1shJngjWyNdTV0jXSNeISZ4I14jYU1dI2EjYiEmeCNiI2dNXSNnI2ghJngjaCNpTV0jaSNqISZ4I2ojbU1dI20jbiEmeCNufk1dN1ohKFJbJFVXT1khJ3xZWktvWnohJ3x6eyEod3shXiEnfCFeIV8hJGAhXyNPISd8I08jUCEqbyNQI1FKbCNRI28hJ3wjbyNwISRgI3B+ISd8N1ohKHxeJFVXT1khJ3xZWktvWnohJ3x6eyEod3shUCEnfCFQIVEhKXghUSFeISd8IV4hXyEkYCFfI08hJ3wjTyNQISpvI1AjUUpsI1EjbyEnfCNvI3AhJGAjcH4hJ3w3WiEqUFkkVVdVN1JPWUhxWVolVFohXkhxIV4hX0d7IV8jT0hxI08jUElmI1AjUUR1I1Ejb0hxI28jcEd7I3B+SHE3WiEqdFgkVVdPWSEnfFlaS29aeiEnfHp7ISh3eyFeISd8IV4hXyEkYCFfI28hJ3wjbyNwISRgI3B+ISd8N1ohK2ZYJFVXT1lKbFlaS29aekpsentOUXshXkpsIV4hXyEhXSFfI29KbCNvI3AhIV0jcH5KbDdaISxZYyRVV31QT3pLb3p7TFp7IV5LbyFeIV9NXSFfI1pLbyNaI1shLFIjWyNdS28jXSNeISxSI14jYUtvI2EjYiEsUiNiI2dLbyNnI2ghLFIjaCNpS28jaSNqISxSI2ojbUtvI20jbiEsUiNuI29LbyNvI3BNXSNwfktvN1ohLWxWJFVXVDdST1khLWVZWiVUWiFeIS1lIV4hXyEuUiFfI28hLWUjbyNwIS5SI3B+IS1lN1IhLldRVDdST1khLlJafiEuUiRQIS5nWyRVVyNvI3Z9UE9ZRHVZWiVUWiFQRHUhUCFRRXIhUSFeRHUhXiFfRnghXyF9RHUhfSNPSHEjTyNQSlEjUCNvRHUjbyNwRngjcH5EdV0hL2ZbI3dTJFVXfVBPWUR1WVolVFohUER1IVAhUUVyIVEhXkR1IV4hX0Z4IV8hfUR1IX0jT0hxI08jUEpRI1Ajb0R1I28jcEZ4I3B+RHUheyEwY2QkVVdrIXNPIU8lVCFPIVBAciFQIVElVCFRIVshMXEhWyFeJVQhXyFnJVQhZyFoQWwhaCNSJVQjUiNTITFxI1MjVSVUI1UjViEzWCNWI1glVCNYI1lBbCNZI2IlVCNiI2MhMncjYyNkITRtI2QjbCVUI2wjbSE1eyNtI28lVCNwfiVUIXshMXhfJFVXayFzTyFPJVQhTyFQQHIhUCFRJVQhUSFbITFxIVshXiVUIV8hZyVUIWchaEFsIWgjUiVUI1IjUyExcSNTI1glVCNYI1lBbCNZI2IlVCNiI2MhMncjYyNvJVQjcH4lVCF7ITNPUiRVV2shc08hXiVUIV8jbyVUI3B+JVQheyEzXlckVVdPIVElVCFRIVIhM3YhUiFTITN2IVMhXiVUIV8jUiVUI1IjUyEzdiNTI28lVCNwfiVUIXshM31ZJFVXayFzTyFRJVQhUSFSITN2IVIhUyEzdiFTIV4lVCFfI1IlVCNSI1MhM3YjUyNiJVQjYiNjITJ3I2MjbyVUI3B+JVQheyE0clYkVVdPIVElVCFRIVkhNVghWSFeJVQhXyNSJVQjUiNTITVYI1MjbyVUI3B+JVQheyE1YFgkVVdrIXNPIVElVCFRIVkhNVghWSFeJVQhXyNSJVQjUiNTITVYI1MjYiVUI2IjYyEydyNjI28lVCNwfiVUIXshNlFaJFVXTyFRJVQhUSFbITZzIVshXiVUIV8hYyVUIWMhaSE2cyFpI1IlVCNSI1MhNnMjUyNUJVQjVCNaITZzI1ojbyVUI3B+JVQheyE2el0kVVdrIXNPIVElVCFRIVshNnMhWyFeJVQhXyFjJVQhYyFpITZzIWkjUiVUI1IjUyE2cyNTI1QlVCNUI1ohNnMjWiNiJVQjYiNjITJ3I2MjbyVUI3B+JVQkdSE3fFIhXVYkVVcjbSRmTyFeJVQhXyNvJVQjcH4lVCFxITheUl8haSRVV08hXiVUIV8jbyVUI3B+JVQ1dyE4clInYmQhYS9uI3gmcyd8UCFQIVEhOHshXiFfITlRIV8hYCE5X1chOVFPJFdXI3YhOVZQI2AjdiFfIWAhOVkjdiE5X08jbyN2I3YhOWRPI2EjdiR1ITlrVCF7JG0kVVdPIV4lVCFfIWAndiFgIWEhOXohYSNvJVQjcH4lVCRQITpSUiNXI3ckVVdPIV4lVCFfI28lVCNwfiVUJVYhOmdUJ2EhUiNhI3YkUlMkVVdPIV4lVCFfIWAhOnYhYCFhITtXIWEjbyVUI3B+JVQkTyE6fVIjYSN2JFVXTyFeJVQhXyNvJVQjcH4lVCRPITtfVCNgI3YkVVdPIV4lVCFfIWA1VCFgIWEhO24hYSNvJVQjcH4lVCRPITt1UyNgI3YkVVdPIV4lVCFfIWA1VCFgI28lVCNwfiVUKmEhPFlWJ3AjeyRVV08hTyVUIU8hUCE8byFQIV4lVCFfIWElVCFhIWIhPVAhYiNvJVQjcH4lVCpbITx2UnYqUyRVV08hXiVUIV8jbyVUI3B+JVQkTyE9V1MkVVcjaiN2TyFeJVQhXyFgNVQhYCNvJVQjcH4lVDdWIT1rUng2fSRVV08hXiVUIV8jbyVUI3B+JVRrIT17UiFPYyRVV08hXiVUIV8jbyVUI3B+JVQkTyE+XVMjZyN2JFVXTyFeJVQhXyFgNVQhYCNvJVQjcH4lVCRhIT5wUiRVVydmJFhPIV4lVCFfI28lVCNwfiVUfiE/T08hVH41YiE/VlQndzVZJFVXTyFeJVQhXyFgNVQhYCNvJVQjcCNxIT1QI3F+JVQ2WCE/b1IhUzV9blEkVVdPIV4lVCFfI28lVCNwfiVUWCFAUFIha1AkVVdPIV4lVCFfI28lVCNwfiVUN1ohQGdyJFVXJ1k3UiN6UyddJHknZzNTT1glVFhZJWNZWiVUWlslY1twJVRwcSVjcXQlVHR1MmB1fSVUfSFPM2ohTyFRJVQhUSFbMmAhWyFeJVQhXyFjJVQhYyF9MmAhfSNSJVQjUiNTMmAjUyNUJVQjVCNvMmAjcCRmJVQkZiRnJWMkZyNCWTJgI0JZI0JaIUBZI0JaJElTMmAkSVMkSV8hQFkkSV8kSlQyYCRKVCRKVSFAWSRKVSRLVjJgJEtWJEtXIUBZJEtXJkZVMmAmRlUmRlYhQFkmRlY/SFQyYD9IVD9IVSFAWT9IVX4yYDdaIUNPXyRVVydaN1IjelMnXSR5J2czU090JVR0dTJgdX0lVH0hTzNqIU8hUSVUIVEhWzJgIVshXiVUIV8hYyVUIWMhfTJgIX0jUiVUI1IjUzJgI1MjVCVUI1QjbzJgI3AkZyVUJGd+MmAiLCB0b2tlbml6ZXJzOiBbWTIxLCBrMTEsIHU5LCB3MTcsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIFUxOF0sIHRvcFJ1bGVzOiB7IFNjcmlwdDogWzAsIDddIH0sIGRpYWxlY3RzOiB7IGpzeDogMTIxMDcsIHRzOiAxMjEwOSB9LCBkeW5hbWljUHJlY2VkZW5jZXM6IHsgMTQ5OiAxLCAxNzY6IDEgfSwgc3BlY2lhbGl6ZWQ6IFt7IHRlcm06IDI4OSwgZ2V0OiAoUTE3KSA9PiBDMTBbUTE3XSB8fCAtMSB9LCB7IHRlcm06IDI5OSwgZ2V0OiAoUTE3KSA9PiBWMTVbUTE3XSB8fCAtMSB9LCB7IHRlcm06IDYzLCBnZXQ6IChRMTcpID0+IEkxOVtRMTddIHx8IC0xIH1dLCB0b2tlblByZWM6IDEyMTMwIH0pOwoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AY29kZW1pcnJvci9hdXRvY29tcGxldGVANi4zLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5c1lXNW5kV0ZuWlN4QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzTEVCc1pYcGxjaTlqYjIxdGIyNHNRR3hsZW1WeUwyaHBaMmhzYVdkb2RDeEFiR1Y2WlhJdmJXRnlhMlJ2ZDI0L2Rlbm8vYXV0b2NvbXBsZXRlLmpzCiAgdmFyIEYxNyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgaTQpIHsKICAgICAgdGhpcy5zdGF0ZSA9IGU1LCB0aGlzLnBvcyA9IHQ0LCB0aGlzLmV4cGxpY2l0ID0gaTQsIHRoaXMuYWJvcnRMaXN0ZW5lcnMgPSBbXTsKICAgIH0KICAgIHRva2VuQmVmb3JlKGU1KSB7CiAgICAgIGxldCB0NCA9IG0xNCh0aGlzLnN0YXRlKS5yZXNvbHZlSW5uZXIodGhpcy5wb3MsIC0xKTsKICAgICAgZm9yICg7IHQ0ICYmIGU1LmluZGV4T2YodDQubmFtZSkgPCAwOyApCiAgICAgICAgdDQgPSB0NC5wYXJlbnQ7CiAgICAgIHJldHVybiB0NCA/IHsgZnJvbTogdDQuZnJvbSwgdG86IHRoaXMucG9zLCB0ZXh0OiB0aGlzLnN0YXRlLnNsaWNlRG9jKHQ0LmZyb20sIHRoaXMucG9zKSwgdHlwZTogdDQudHlwZSB9IDogbnVsbDsKICAgIH0KICAgIG1hdGNoQmVmb3JlKGU1KSB7CiAgICAgIGxldCB0NCA9IHRoaXMuc3RhdGUuZG9jLmxpbmVBdCh0aGlzLnBvcyksIGk0ID0gTWF0aC5tYXgodDQuZnJvbSwgdGhpcy5wb3MgLSAyNTApLCBvNCA9IHQ0LnRleHQuc2xpY2UoaTQgLSB0NC5mcm9tLCB0aGlzLnBvcyAtIHQ0LmZyb20pLCBzOCA9IG80LnNlYXJjaChBZTE0KGU1LCBmYWxzZSkpOwogICAgICByZXR1cm4gczggPCAwID8gbnVsbCA6IHsgZnJvbTogaTQgKyBzOCwgdG86IHRoaXMucG9zLCB0ZXh0OiBvNC5zbGljZShzOCkgfTsKICAgIH0KICAgIGdldCBhYm9ydGVkKCkgewogICAgICByZXR1cm4gdGhpcy5hYm9ydExpc3RlbmVycyA9PSBudWxsOwogICAgfQogICAgYWRkRXZlbnRMaXN0ZW5lcihlNSwgdDQpIHsKICAgICAgZTUgPT0gImFib3J0IiAmJiB0aGlzLmFib3J0TGlzdGVuZXJzICYmIHRoaXMuYWJvcnRMaXN0ZW5lcnMucHVzaCh0NCk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiB1ZTE0KG44KSB7CiAgICBsZXQgZTUgPSBPYmplY3Qua2V5cyhuOCkuam9pbigiIiksIHQ0ID0gL1x3Ly50ZXN0KGU1KTsKICAgIHJldHVybiB0NCAmJiAoZTUgPSBlNS5yZXBsYWNlKC9cdy9nLCAiIikpLCBgWyR7dDQgPyAiXFx3IiA6ICIifSR7ZTUucmVwbGFjZSgvW15cd1xzXS9nLCAiXFwkJiIpfV1gOwogIH0KICBmdW5jdGlvbiBZZTYobjgpIHsKICAgIGxldCBlNSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpLCB0NCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yIChsZXQgeyBsYWJlbDogbzQgfSBvZiBuOCkgewogICAgICBlNVtvNFswXV0gPSB0cnVlOwogICAgICBmb3IgKGxldCBzOCA9IDE7IHM4IDwgbzQubGVuZ3RoOyBzOCsrKQogICAgICAgIHQ0W280W3M4XV0gPSB0cnVlOwogICAgfQogICAgbGV0IGk0ID0gdWUxNChlNSkgKyB1ZTE0KHQ0KSArICIqJCI7CiAgICByZXR1cm4gW25ldyBSZWdFeHAoIl4iICsgaTQpLCBuZXcgUmVnRXhwKGk0KV07CiAgfQogIGZ1bmN0aW9uIEdlNihuOCkgewogICAgbGV0IGU1ID0gbjgubWFwKChvNCkgPT4gdHlwZW9mIG80ID09ICJzdHJpbmciID8geyBsYWJlbDogbzQgfSA6IG80KSwgW3Q0LCBpNF0gPSBlNS5ldmVyeSgobzQpID0+IC9eXHcrJC8udGVzdChvNC5sYWJlbCkpID8gWy9cdyokLywgL1x3KyQvXSA6IFllNihlNSk7CiAgICByZXR1cm4gKG80KSA9PiB7CiAgICAgIGxldCBzOCA9IG80Lm1hdGNoQmVmb3JlKGk0KTsKICAgICAgcmV0dXJuIHM4IHx8IG80LmV4cGxpY2l0ID8geyBmcm9tOiBzOCA/IHM4LmZyb20gOiBvNC5wb3MsIG9wdGlvbnM6IGU1LCB2YWxpZEZvcjogdDQgfSA6IG51bGw7CiAgICB9OwogIH0KICBmdW5jdGlvbiBOdDQobjgsIGU1KSB7CiAgICByZXR1cm4gKHQ0KSA9PiB7CiAgICAgIGZvciAobGV0IGk0ID0gbTE0KHQ0LnN0YXRlKS5yZXNvbHZlSW5uZXIodDQucG9zLCAtMSk7IGk0OyBpNCA9IGk0LnBhcmVudCkKICAgICAgICBpZiAobjguaW5kZXhPZihpNC5uYW1lKSA+IC0xKQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBlNSh0NCk7CiAgICB9OwogIH0KICB2YXIgTjExID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCBpNCkgewogICAgICB0aGlzLmNvbXBsZXRpb24gPSBlNSwgdGhpcy5zb3VyY2UgPSB0NCwgdGhpcy5tYXRjaCA9IGk0OwogICAgfQogIH07CiAgZnVuY3Rpb24gSTIwKG44KSB7CiAgICByZXR1cm4gbjguc2VsZWN0aW9uLm1haW4uaGVhZDsKICB9CiAgZnVuY3Rpb24gQWUxNChuOCwgZTUpIHsKICAgIHZhciB0NDsKICAgIGxldCB7IHNvdXJjZTogaTQgfSA9IG44LCBvNCA9IGU1ICYmIGk0WzBdICE9ICJeIiwgczggPSBpNFtpNC5sZW5ndGggLSAxXSAhPSAiJCI7CiAgICByZXR1cm4gIW80ICYmICFzOCA/IG44IDogbmV3IFJlZ0V4cChgJHtvNCA/ICJeIiA6ICIifSg/OiR7aTR9KSR7czggPyAiJCIgOiAiIn1gLCAodDQgPSBuOC5mbGFncykgIT09IG51bGwgJiYgdDQgIT09IHZvaWQgMCA/IHQ0IDogbjguaWdub3JlQ2FzZSA/ICJpIiA6ICIiKTsKICB9CiAgdmFyIEh0NiA9IEQyLmRlZmluZSgpOwogIGZ1bmN0aW9uIEplNihuOCwgZTUsIHQ0LCBpNCkgewogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbjguY2hhbmdlQnlSYW5nZSgobzQpID0+IHsKICAgICAgaWYgKG80ID09IG44LnNlbGVjdGlvbi5tYWluKQogICAgICAgIHJldHVybiB7IGNoYW5nZXM6IHsgZnJvbTogdDQsIHRvOiBpNCwgaW5zZXJ0OiBlNSB9LCByYW5nZTogZzIuY3Vyc29yKHQ0ICsgZTUubGVuZ3RoKSB9OwogICAgICBsZXQgczggPSBpNCAtIHQ0OwogICAgICByZXR1cm4gIW80LmVtcHR5IHx8IHM4ICYmIG44LnNsaWNlRG9jKG80LmZyb20gLSBzOCwgbzQuZnJvbSkgIT0gbjguc2xpY2VEb2ModDQsIGk0KSA/IHsgcmFuZ2U6IG80IH0gOiB7IGNoYW5nZXM6IHsgZnJvbTogbzQuZnJvbSAtIHM4LCB0bzogbzQuZnJvbSwgaW5zZXJ0OiBlNSB9LCByYW5nZTogZzIuY3Vyc29yKG80LmZyb20gLSBzOCArIGU1Lmxlbmd0aCkgfTsKICAgIH0pKSwgeyB1c2VyRXZlbnQ6ICJpbnB1dC5jb21wbGV0ZSIgfSk7CiAgfQogIGZ1bmN0aW9uIFRlMTIobjgsIGU1KSB7CiAgICBsZXQgdDQgPSBlNS5jb21wbGV0aW9uLmFwcGx5IHx8IGU1LmNvbXBsZXRpb24ubGFiZWwsIGk0ID0gZTUuc291cmNlOwogICAgdHlwZW9mIHQ0ID09ICJzdHJpbmciID8gbjguZGlzcGF0Y2goSmU2KG44LnN0YXRlLCB0NCwgaTQuZnJvbSwgaTQudG8pKSA6IHQ0KG44LCBlNS5jb21wbGV0aW9uLCBpNC5mcm9tLCBpNC50byk7CiAgfQogIHZhciBoZTkgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICBmdW5jdGlvbiBaZTUobjgpIHsKICAgIGlmICghQXJyYXkuaXNBcnJheShuOCkpCiAgICAgIHJldHVybiBuODsKICAgIGxldCBlNSA9IGhlOS5nZXQobjgpOwogICAgcmV0dXJuIGU1IHx8IGhlOS5zZXQobjgsIGU1ID0gR2U2KG44KSksIGU1OwogIH0KICB2YXIgXzE5ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUpIHsKICAgICAgdGhpcy5wYXR0ZXJuID0gZTUsIHRoaXMuY2hhcnMgPSBbXSwgdGhpcy5mb2xkZWQgPSBbXSwgdGhpcy5hbnkgPSBbXSwgdGhpcy5wcmVjaXNlID0gW10sIHRoaXMuYnlXb3JkID0gW107CiAgICAgIGZvciAobGV0IHQ0ID0gMDsgdDQgPCBlNS5sZW5ndGg7ICkgewogICAgICAgIGxldCBpNCA9IG9lKGU1LCB0NCksIG80ID0gYmUyKGk0KTsKICAgICAgICB0aGlzLmNoYXJzLnB1c2goaTQpOwogICAgICAgIGxldCBzOCA9IGU1LnNsaWNlKHQ0LCB0NCArIG80KSwgcjMgPSBzOC50b1VwcGVyQ2FzZSgpOwogICAgICAgIHRoaXMuZm9sZGVkLnB1c2gob2UocjMgPT0gczggPyBzOC50b0xvd2VyQ2FzZSgpIDogcjMsIDApKSwgdDQgKz0gbzQ7CiAgICAgIH0KICAgICAgdGhpcy5hc3RyYWwgPSBlNS5sZW5ndGggIT0gdGhpcy5jaGFycy5sZW5ndGg7CiAgICB9CiAgICBtYXRjaChlNSkgewogICAgICBpZiAodGhpcy5wYXR0ZXJuLmxlbmd0aCA9PSAwKQogICAgICAgIHJldHVybiBbMF07CiAgICAgIGlmIChlNS5sZW5ndGggPCB0aGlzLnBhdHRlcm4ubGVuZ3RoKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBsZXQgeyBjaGFyczogdDQsIGZvbGRlZDogaTQsIGFueTogbzQsIHByZWNpc2U6IHM4LCBieVdvcmQ6IHIzIH0gPSB0aGlzOwogICAgICBpZiAodDQubGVuZ3RoID09IDEpIHsKICAgICAgICBsZXQgaDEwID0gb2UoZTUsIDApOwogICAgICAgIHJldHVybiBoMTAgPT0gdDRbMF0gPyBbMCwgMCwgYmUyKGgxMCldIDogaDEwID09IGk0WzBdID8gWy0yMDAsIDAsIGJlMihoMTApXSA6IG51bGw7CiAgICAgIH0KICAgICAgbGV0IGw3ID0gZTUuaW5kZXhPZih0aGlzLnBhdHRlcm4pOwogICAgICBpZiAobDcgPT0gMCkKICAgICAgICByZXR1cm4gWzAsIDAsIHRoaXMucGF0dGVybi5sZW5ndGhdOwogICAgICBsZXQgYzE3ID0gdDQubGVuZ3RoLCBhNCA9IDA7CiAgICAgIGlmIChsNyA8IDApIHsKICAgICAgICBmb3IgKGxldCBoMTAgPSAwLCBRMTcgPSBNYXRoLm1pbihlNS5sZW5ndGgsIDIwMCk7IGgxMCA8IFExNyAmJiBhNCA8IGMxNzsgKSB7CiAgICAgICAgICBsZXQgVDI5ID0gb2UoZTUsIGgxMCk7CiAgICAgICAgICAoVDI5ID09IHQ0W2E0XSB8fCBUMjkgPT0gaTRbYTRdKSAmJiAobzRbYTQrK10gPSBoMTApLCBoMTAgKz0gYmUyKFQyOSk7CiAgICAgICAgfQogICAgICAgIGlmIChhNCA8IGMxNykKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGxldCBmMTEgPSAwLCB1MTEgPSAwLCBDMTcgPSBmYWxzZSwgYjI1ID0gMCwgQTIwID0gLTEsIEsxOSA9IC0xLCBqZTcgPSAvW2Etel0vLnRlc3QoZTUpLCB6MjYgPSB0cnVlOwogICAgICBmb3IgKGxldCBoMTAgPSAwLCBRMTcgPSBNYXRoLm1pbihlNS5sZW5ndGgsIDIwMCksIFQyOSA9IDA7IGgxMCA8IFExNyAmJiB1MTEgPCBjMTc7ICkgewogICAgICAgIGxldCBtMjMgPSBvZShlNSwgaDEwKTsKICAgICAgICBsNyA8IDAgJiYgKGYxMSA8IGMxNyAmJiBtMjMgPT0gdDRbZjExXSAmJiAoczhbZjExKytdID0gaDEwKSwgYjI1IDwgYzE3ICYmIChtMjMgPT0gdDRbYjI1XSB8fCBtMjMgPT0gaTRbYjI1XSA/IChiMjUgPT0gMCAmJiAoQTIwID0gaDEwKSwgSzE5ID0gaDEwICsgMSwgYjI1KyspIDogYjI1ID0gMCkpOwogICAgICAgIGxldCBqMTksIFgyMyA9IG0yMyA8IDI1NSA/IG0yMyA+PSA0OCAmJiBtMjMgPD0gNTcgfHwgbTIzID49IDk3ICYmIG0yMyA8PSAxMjIgPyAyIDogbTIzID49IDY1ICYmIG0yMyA8PSA5MCA/IDEgOiAwIDogKGoxOSA9IHJ0KG0yMykpICE9IGoxOS50b0xvd2VyQ2FzZSgpID8gMSA6IGoxOSAhPSBqMTkudG9VcHBlckNhc2UoKSA/IDIgOiAwOwogICAgICAgICghaDEwIHx8IFgyMyA9PSAxICYmIGplNyB8fCBUMjkgPT0gMCAmJiBYMjMgIT0gMCkgJiYgKHQ0W3UxMV0gPT0gbTIzIHx8IGk0W3UxMV0gPT0gbTIzICYmIChDMTcgPSB0cnVlKSA/IHIzW3UxMSsrXSA9IGgxMCA6IHIzLmxlbmd0aCAmJiAoejI2ID0gZmFsc2UpKSwgVDI5ID0gWDIzLCBoMTAgKz0gYmUyKG0yMyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHUxMSA9PSBjMTcgJiYgcjNbMF0gPT0gMCAmJiB6MjYgPyB0aGlzLnJlc3VsdCgtMTAwICsgKEMxNyA/IC0yMDAgOiAwKSwgcjMsIGU1KSA6IGIyNSA9PSBjMTcgJiYgQTIwID09IDAgPyBbLTIwMCAtIGU1Lmxlbmd0aCwgMCwgSzE5XSA6IGw3ID4gLTEgPyBbLTcwMCAtIGU1Lmxlbmd0aCwgbDcsIGw3ICsgdGhpcy5wYXR0ZXJuLmxlbmd0aF0gOiBiMjUgPT0gYzE3ID8gWy0yMDAgKyAtNzAwIC0gZTUubGVuZ3RoLCBBMjAsIEsxOV0gOiB1MTEgPT0gYzE3ID8gdGhpcy5yZXN1bHQoLTEwMCArIChDMTcgPyAtMjAwIDogMCkgKyAtNzAwICsgKHoyNiA/IDAgOiAtMTEwMCksIHIzLCBlNSkgOiB0NC5sZW5ndGggPT0gMiA/IG51bGwgOiB0aGlzLnJlc3VsdCgobzRbMF0gPyAtNzAwIDogMCkgKyAtMjAwICsgLTExMDAsIG80LCBlNSk7CiAgICB9CiAgICByZXN1bHQoZTUsIHQ0LCBpNCkgewogICAgICBsZXQgbzQgPSBbZTUgLSBpNC5sZW5ndGhdLCBzOCA9IDE7CiAgICAgIGZvciAobGV0IHIzIG9mIHQ0KSB7CiAgICAgICAgbGV0IGw3ID0gcjMgKyAodGhpcy5hc3RyYWwgPyBiZTIob2UoaTQsIHIzKSkgOiAxKTsKICAgICAgICBzOCA+IDEgJiYgbzRbczggLSAxXSA9PSByMyA/IG80W3M4IC0gMV0gPSBsNyA6IChvNFtzOCsrXSA9IHIzLCBvNFtzOCsrXSA9IGw3KTsKICAgICAgfQogICAgICByZXR1cm4gbzQ7CiAgICB9CiAgfTsKICB2YXIgeDE0ID0gQTIuZGVmaW5lKHsgY29tYmluZShuOCkgewogICAgcmV0dXJuIGh0KG44LCB7IGFjdGl2YXRlT25UeXBpbmc6IHRydWUsIHNlbGVjdE9uT3BlbjogdHJ1ZSwgb3ZlcnJpZGU6IG51bGwsIGNsb3NlT25CbHVyOiB0cnVlLCBtYXhSZW5kZXJlZE9wdGlvbnM6IDEwMCwgZGVmYXVsdEtleW1hcDogdHJ1ZSwgb3B0aW9uQ2xhc3M6ICgpID0+ICIiLCBhYm92ZUN1cnNvcjogZmFsc2UsIGljb25zOiB0cnVlLCBhZGRUb09wdGlvbnM6IFtdLCBjb21wYXJlQ29tcGxldGlvbnM6IChlNSwgdDQpID0+IGU1LmxhYmVsLmxvY2FsZUNvbXBhcmUodDQubGFiZWwpLCBpbnRlcmFjdGlvbkRlbGF5OiA3NSB9LCB7IGRlZmF1bHRLZXltYXA6IChlNSwgdDQpID0+IGU1ICYmIHQ0LCBjbG9zZU9uQmx1cjogKGU1LCB0NCkgPT4gZTUgJiYgdDQsIGljb25zOiAoZTUsIHQ0KSA9PiBlNSAmJiB0NCwgb3B0aW9uQ2xhc3M6IChlNSwgdDQpID0+IChpNCkgPT4gX2UxMShlNShpNCksIHQ0KGk0KSksIGFkZFRvT3B0aW9uczogKGU1LCB0NCkgPT4gZTUuY29uY2F0KHQ0KSB9KTsKICB9IH0pOwogIGZ1bmN0aW9uIF9lMTEobjgsIGU1KSB7CiAgICByZXR1cm4gbjggPyBlNSA/IG44ICsgIiAiICsgZTUgOiBuOCA6IGU1OwogIH0KICBmdW5jdGlvbiBldDkobjgpIHsKICAgIGxldCBlNSA9IG44LmFkZFRvT3B0aW9ucy5zbGljZSgpOwogICAgcmV0dXJuIG44Lmljb25zICYmIGU1LnB1c2goeyByZW5kZXIodDQpIHsKICAgICAgbGV0IGk0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHJldHVybiBpNC5jbGFzc0xpc3QuYWRkKCJjbS1jb21wbGV0aW9uSWNvbiIpLCB0NC50eXBlICYmIGk0LmNsYXNzTGlzdC5hZGQoLi4udDQudHlwZS5zcGxpdCgvXHMrL2cpLm1hcCgobzQpID0+ICJjbS1jb21wbGV0aW9uSWNvbi0iICsgbzQpKSwgaTQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsICJ0cnVlIiksIGk0OwogICAgfSwgcG9zaXRpb246IDIwIH0pLCBlNS5wdXNoKHsgcmVuZGVyKHQ0LCBpNCwgbzQpIHsKICAgICAgbGV0IHM4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICBzOC5jbGFzc05hbWUgPSAiY20tY29tcGxldGlvbkxhYmVsIjsKICAgICAgbGV0IHsgbGFiZWw6IHIzIH0gPSB0NCwgbDcgPSAwOwogICAgICBmb3IgKGxldCBjMTcgPSAxOyBjMTcgPCBvNC5sZW5ndGg7ICkgewogICAgICAgIGxldCBhNCA9IG80W2MxNysrXSwgZjExID0gbzRbYzE3KytdOwogICAgICAgIGE0ID4gbDcgJiYgczguYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocjMuc2xpY2UobDcsIGE0KSkpOwogICAgICAgIGxldCB1MTEgPSBzOC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikpOwogICAgICAgIHUxMS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyMy5zbGljZShhNCwgZjExKSkpLCB1MTEuY2xhc3NOYW1lID0gImNtLWNvbXBsZXRpb25NYXRjaGVkVGV4dCIsIGw3ID0gZjExOwogICAgICB9CiAgICAgIHJldHVybiBsNyA8IHIzLmxlbmd0aCAmJiBzOC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyMy5zbGljZShsNykpKSwgczg7CiAgICB9LCBwb3NpdGlvbjogNTAgfSwgeyByZW5kZXIodDQpIHsKICAgICAgaWYgKCF0NC5kZXRhaWwpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGxldCBpNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgcmV0dXJuIGk0LmNsYXNzTmFtZSA9ICJjbS1jb21wbGV0aW9uRGV0YWlsIiwgaTQudGV4dENvbnRlbnQgPSB0NC5kZXRhaWwsIGk0OwogICAgfSwgcG9zaXRpb246IDgwIH0pLCBlNS5zb3J0KCh0NCwgaTQpID0+IHQ0LnBvc2l0aW9uIC0gaTQucG9zaXRpb24pLm1hcCgodDQpID0+IHQ0LnJlbmRlcik7CiAgfQogIGZ1bmN0aW9uIHBlOShuOCwgZTUsIHQ0KSB7CiAgICBpZiAobjggPD0gdDQpCiAgICAgIHJldHVybiB7IGZyb206IDAsIHRvOiBuOCB9OwogICAgaWYgKGU1IDwgMCAmJiAoZTUgPSAwKSwgZTUgPD0gbjggPj4gMSkgewogICAgICBsZXQgbzQgPSBNYXRoLmZsb29yKGU1IC8gdDQpOwogICAgICByZXR1cm4geyBmcm9tOiBvNCAqIHQ0LCB0bzogKG80ICsgMSkgKiB0NCB9OwogICAgfQogICAgbGV0IGk0ID0gTWF0aC5mbG9vcigobjggLSBlNSkgLyB0NCk7CiAgICByZXR1cm4geyBmcm9tOiBuOCAtIChpNCArIDEpICogdDQsIHRvOiBuOCAtIGk0ICogdDQgfTsKICB9CiAgdmFyIGVlMTEgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQpIHsKICAgICAgdGhpcy52aWV3ID0gZTUsIHRoaXMuc3RhdGVGaWVsZCA9IHQ0LCB0aGlzLmluZm8gPSBudWxsLCB0aGlzLnBsYWNlSW5mbyA9IHsgcmVhZDogKCkgPT4gdGhpcy5tZWFzdXJlSW5mbygpLCB3cml0ZTogKGw3KSA9PiB0aGlzLnBvc2l0aW9uSW5mbyhsNyksIGtleTogdGhpcyB9OwogICAgICBsZXQgaTQgPSBlNS5zdGF0ZS5maWVsZCh0NCksIHsgb3B0aW9uczogbzQsIHNlbGVjdGVkOiBzOCB9ID0gaTQub3BlbiwgcjMgPSBlNS5zdGF0ZS5mYWNldCh4MTQpOwogICAgICB0aGlzLm9wdGlvbkNvbnRlbnQgPSBldDkocjMpLCB0aGlzLm9wdGlvbkNsYXNzID0gcjMub3B0aW9uQ2xhc3MsIHRoaXMucmFuZ2UgPSBwZTkobzQubGVuZ3RoLCBzOCwgcjMubWF4UmVuZGVyZWRPcHRpb25zKSwgdGhpcy5kb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgdGhpcy5kb20uY2xhc3NOYW1lID0gImNtLXRvb2x0aXAtYXV0b2NvbXBsZXRlIiwgdGhpcy5kb20uYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgKGw3KSA9PiB7CiAgICAgICAgZm9yIChsZXQgYzE3ID0gbDcudGFyZ2V0LCBhNDsgYzE3ICYmIGMxNyAhPSB0aGlzLmRvbTsgYzE3ID0gYzE3LnBhcmVudE5vZGUpCiAgICAgICAgICBpZiAoYzE3Lm5vZGVOYW1lID09ICJMSSIgJiYgKGE0ID0gLy0oXGQrKSQvLmV4ZWMoYzE3LmlkKSkgJiYgK2E0WzFdIDwgbzQubGVuZ3RoKSB7CiAgICAgICAgICAgIFRlMTIoZTUsIG80WythNFsxXV0pLCBsNy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgIH0pLCB0aGlzLmxpc3QgPSB0aGlzLmRvbS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUxpc3RCb3gobzQsIGk0LmlkLCB0aGlzLnJhbmdlKSksIHRoaXMubGlzdC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCAoKSA9PiB7CiAgICAgICAgdGhpcy5pbmZvICYmIHRoaXMudmlldy5yZXF1ZXN0TWVhc3VyZSh0aGlzLnBsYWNlSW5mbyk7CiAgICAgIH0pOwogICAgfQogICAgbW91bnQoKSB7CiAgICAgIHRoaXMudXBkYXRlU2VsKCk7CiAgICB9CiAgICB1cGRhdGUoZTUpIHsKICAgICAgZTUuc3RhdGUuZmllbGQodGhpcy5zdGF0ZUZpZWxkKSAhPSBlNS5zdGFydFN0YXRlLmZpZWxkKHRoaXMuc3RhdGVGaWVsZCkgJiYgdGhpcy51cGRhdGVTZWwoKTsKICAgIH0KICAgIHBvc2l0aW9uZWQoKSB7CiAgICAgIHRoaXMuaW5mbyAmJiB0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pOwogICAgfQogICAgdXBkYXRlU2VsKCkgewogICAgICBsZXQgZTUgPSB0aGlzLnZpZXcuc3RhdGUuZmllbGQodGhpcy5zdGF0ZUZpZWxkKSwgdDQgPSBlNS5vcGVuOwogICAgICBpZiAoKHQ0LnNlbGVjdGVkID4gLTEgJiYgdDQuc2VsZWN0ZWQgPCB0aGlzLnJhbmdlLmZyb20gfHwgdDQuc2VsZWN0ZWQgPj0gdGhpcy5yYW5nZS50bykgJiYgKHRoaXMucmFuZ2UgPSBwZTkodDQub3B0aW9ucy5sZW5ndGgsIHQ0LnNlbGVjdGVkLCB0aGlzLnZpZXcuc3RhdGUuZmFjZXQoeDE0KS5tYXhSZW5kZXJlZE9wdGlvbnMpLCB0aGlzLmxpc3QucmVtb3ZlKCksIHRoaXMubGlzdCA9IHRoaXMuZG9tLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlTGlzdEJveCh0NC5vcHRpb25zLCBlNS5pZCwgdGhpcy5yYW5nZSkpLCB0aGlzLmxpc3QuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgKCkgPT4gewogICAgICAgIHRoaXMuaW5mbyAmJiB0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pOwogICAgICB9KSksIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24odDQuc2VsZWN0ZWQpKSB7CiAgICAgICAgdGhpcy5pbmZvICYmICh0aGlzLmluZm8ucmVtb3ZlKCksIHRoaXMuaW5mbyA9IG51bGwpOwogICAgICAgIGxldCB7IGNvbXBsZXRpb246IGk0IH0gPSB0NC5vcHRpb25zW3Q0LnNlbGVjdGVkXSwgeyBpbmZvOiBvNCB9ID0gaTQ7CiAgICAgICAgaWYgKCFvNCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBsZXQgczggPSB0eXBlb2YgbzQgPT0gInN0cmluZyIgPyBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShvNCkgOiBvNChpNCk7CiAgICAgICAgaWYgKCFzOCkKICAgICAgICAgIHJldHVybjsKICAgICAgICAidGhlbiIgaW4gczggPyBzOC50aGVuKChyMykgPT4gewogICAgICAgICAgcjMgJiYgdGhpcy52aWV3LnN0YXRlLmZpZWxkKHRoaXMuc3RhdGVGaWVsZCwgZmFsc2UpID09IGU1ICYmIHRoaXMuYWRkSW5mb1BhbmUocjMpOwogICAgICAgIH0pLmNhdGNoKChyMykgPT4gbnQyKHRoaXMudmlldy5zdGF0ZSwgcjMsICJjb21wbGV0aW9uIGluZm8iKSkgOiB0aGlzLmFkZEluZm9QYW5lKHM4KTsKICAgICAgfQogICAgfQogICAgYWRkSW5mb1BhbmUoZTUpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5pbmZvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHQ0LmNsYXNzTmFtZSA9ICJjbS10b29sdGlwIGNtLWNvbXBsZXRpb25JbmZvIiwgdDQuYXBwZW5kQ2hpbGQoZTUpLCB0aGlzLmRvbS5hcHBlbmRDaGlsZCh0NCksIHRoaXMudmlldy5yZXF1ZXN0TWVhc3VyZSh0aGlzLnBsYWNlSW5mbyk7CiAgICB9CiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihlNSkgewogICAgICBsZXQgdDQgPSBudWxsOwogICAgICBmb3IgKGxldCBpNCA9IHRoaXMubGlzdC5maXJzdENoaWxkLCBvNCA9IHRoaXMucmFuZ2UuZnJvbTsgaTQ7IGk0ID0gaTQubmV4dFNpYmxpbmcsIG80KyspCiAgICAgICAgbzQgPT0gZTUgPyBpNC5oYXNBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiKSB8fCAoaTQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwgInRydWUiKSwgdDQgPSBpNCkgOiBpNC5oYXNBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiKSAmJiBpNC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiKTsKICAgICAgcmV0dXJuIHQ0ICYmIG50MTEodGhpcy5saXN0LCB0NCksIHQ0OwogICAgfQogICAgbWVhc3VyZUluZm8oKSB7CiAgICAgIGxldCBlNSA9IHRoaXMuZG9tLnF1ZXJ5U2VsZWN0b3IoIlthcmlhLXNlbGVjdGVkXSIpOwogICAgICBpZiAoIWU1IHx8ICF0aGlzLmluZm8pCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGxldCB0NCA9IHRoaXMuZG9tLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93LCBpNCA9IHRoaXMuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBvNCA9IHRoaXMuaW5mby5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgczggPSBlNS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgaWYgKHM4LnRvcCA+IE1hdGgubWluKHQ0LmlubmVySGVpZ2h0LCBpNC5ib3R0b20pIC0gMTAgfHwgczguYm90dG9tIDwgTWF0aC5tYXgoMCwgaTQudG9wKSArIDEwKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBsZXQgcjMgPSB0aGlzLnZpZXcudGV4dERpcmVjdGlvbiA9PSBSMi5SVEwsIGw3ID0gcjMsIGMxNyA9IGZhbHNlLCBhNCwgZjExID0gIiIsIHUxMSA9ICIiLCBDMTcgPSBpNC5sZWZ0LCBiMjUgPSB0NC5pbm5lcldpZHRoIC0gaTQucmlnaHQ7CiAgICAgIGlmIChsNyAmJiBDMTcgPCBNYXRoLm1pbihvNC53aWR0aCwgYjI1KSA/IGw3ID0gZmFsc2UgOiAhbDcgJiYgYjI1IDwgTWF0aC5taW4obzQud2lkdGgsIEMxNykgJiYgKGw3ID0gdHJ1ZSksIG80LndpZHRoIDw9IChsNyA/IEMxNyA6IGIyNSkpCiAgICAgICAgZjExID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oczgudG9wLCB0NC5pbm5lckhlaWdodCAtIG80LmhlaWdodCkpIC0gaTQudG9wICsgInB4IiwgYTQgPSBNYXRoLm1pbig0MDAsIGw3ID8gQzE3IDogYjI1KSArICJweCI7CiAgICAgIGVsc2UgewogICAgICAgIGMxNyA9IHRydWUsIGE0ID0gTWF0aC5taW4oNDAwLCAocjMgPyBpNC5yaWdodCA6IHQ0LmlubmVyV2lkdGggLSBpNC5sZWZ0KSAtIDMwKSArICJweCI7CiAgICAgICAgbGV0IEEyMCA9IHQ0LmlubmVySGVpZ2h0IC0gaTQuYm90dG9tOwogICAgICAgIEEyMCA+PSBvNC5oZWlnaHQgfHwgQTIwID4gaTQudG9wID8gZjExID0gczguYm90dG9tIC0gaTQudG9wICsgInB4IiA6IHUxMSA9IGk0LmJvdHRvbSAtIHM4LnRvcCArICJweCI7CiAgICAgIH0KICAgICAgcmV0dXJuIHsgdG9wOiBmMTEsIGJvdHRvbTogdTExLCBtYXhXaWR0aDogYTQsIGNsYXNzOiBjMTcgPyByMyA/ICJsZWZ0LW5hcnJvdyIgOiAicmlnaHQtbmFycm93IiA6IGw3ID8gImxlZnQiIDogInJpZ2h0IiB9OwogICAgfQogICAgcG9zaXRpb25JbmZvKGU1KSB7CiAgICAgIHRoaXMuaW5mbyAmJiAoZTUgPyAodGhpcy5pbmZvLnN0eWxlLnRvcCA9IGU1LnRvcCwgdGhpcy5pbmZvLnN0eWxlLmJvdHRvbSA9IGU1LmJvdHRvbSwgdGhpcy5pbmZvLnN0eWxlLm1heFdpZHRoID0gZTUubWF4V2lkdGgsIHRoaXMuaW5mby5jbGFzc05hbWUgPSAiY20tdG9vbHRpcCBjbS1jb21wbGV0aW9uSW5mbyBjbS1jb21wbGV0aW9uSW5mby0iICsgZTUuY2xhc3MpIDogdGhpcy5pbmZvLnN0eWxlLnRvcCA9ICItMWU2cHgiKTsKICAgIH0KICAgIGNyZWF0ZUxpc3RCb3goZTUsIHQ0LCBpNCkgewogICAgICBsZXQgbzQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ1bCIpOwogICAgICBvNC5pZCA9IHQ0LCBvNC5zZXRBdHRyaWJ1dGUoInJvbGUiLCAibGlzdGJveCIpLCBvNC5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLCAidHJ1ZSIpLCBvNC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCB0aGlzLnZpZXcuc3RhdGUucGhyYXNlKCJDb21wbGV0aW9ucyIpKTsKICAgICAgZm9yIChsZXQgczggPSBpNC5mcm9tOyBzOCA8IGk0LnRvOyBzOCsrKSB7CiAgICAgICAgbGV0IHsgY29tcGxldGlvbjogcjMsIG1hdGNoOiBsNyB9ID0gZTVbczhdLCBjMTcgPSBvNC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpKTsKICAgICAgICBjMTcuaWQgPSB0NCArICItIiArIHM4LCBjMTcuc2V0QXR0cmlidXRlKCJyb2xlIiwgIm9wdGlvbiIpOwogICAgICAgIGxldCBhNCA9IHRoaXMub3B0aW9uQ2xhc3MocjMpOwogICAgICAgIGE0ICYmIChjMTcuY2xhc3NOYW1lID0gYTQpOwogICAgICAgIGZvciAobGV0IGYxMSBvZiB0aGlzLm9wdGlvbkNvbnRlbnQpIHsKICAgICAgICAgIGxldCB1MTEgPSBmMTEocjMsIHRoaXMudmlldy5zdGF0ZSwgbDcpOwogICAgICAgICAgdTExICYmIGMxNy5hcHBlbmRDaGlsZCh1MTEpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gaTQuZnJvbSAmJiBvNC5jbGFzc0xpc3QuYWRkKCJjbS1jb21wbGV0aW9uTGlzdEluY29tcGxldGVUb3AiKSwgaTQudG8gPCBlNS5sZW5ndGggJiYgbzQuY2xhc3NMaXN0LmFkZCgiY20tY29tcGxldGlvbkxpc3RJbmNvbXBsZXRlQm90dG9tIiksIG80OwogICAgfQogIH07CiAgZnVuY3Rpb24gdHQxNChuOCkgewogICAgcmV0dXJuIChlNSkgPT4gbmV3IGVlMTEoZTUsIG44KTsKICB9CiAgZnVuY3Rpb24gbnQxMShuOCwgZTUpIHsKICAgIGxldCB0NCA9IG44LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBpNCA9IGU1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgaTQudG9wIDwgdDQudG9wID8gbjguc2Nyb2xsVG9wIC09IHQ0LnRvcCAtIGk0LnRvcCA6IGk0LmJvdHRvbSA+IHQ0LmJvdHRvbSAmJiAobjguc2Nyb2xsVG9wICs9IGk0LmJvdHRvbSAtIHQ0LmJvdHRvbSk7CiAgfQogIGZ1bmN0aW9uIGRlOChuOCkgewogICAgcmV0dXJuIChuOC5ib29zdCB8fCAwKSAqIDEwMCArIChuOC5hcHBseSA/IDEwIDogMCkgKyAobjguaW5mbyA/IDUgOiAwKSArIChuOC50eXBlID8gMSA6IDApOwogIH0KICBmdW5jdGlvbiBpdDExKG44LCBlNSkgewogICAgbGV0IHQ0ID0gW10sIGk0ID0gMDsKICAgIGZvciAobGV0IGw3IG9mIG44KQogICAgICBpZiAobDcuaGFzUmVzdWx0KCkpCiAgICAgICAgaWYgKGw3LnJlc3VsdC5maWx0ZXIgPT09IGZhbHNlKSB7CiAgICAgICAgICBsZXQgYzE3ID0gbDcucmVzdWx0LmdldE1hdGNoOwogICAgICAgICAgZm9yIChsZXQgYTQgb2YgbDcucmVzdWx0Lm9wdGlvbnMpIHsKICAgICAgICAgICAgbGV0IGYxMSA9IFsxZTkgLSBpNCsrXTsKICAgICAgICAgICAgaWYgKGMxNykKICAgICAgICAgICAgICBmb3IgKGxldCB1MTEgb2YgYzE3KGE0KSkKICAgICAgICAgICAgICAgIGYxMS5wdXNoKHUxMSk7CiAgICAgICAgICAgIHQ0LnB1c2gobmV3IE4xMShhNCwgbDcsIGYxMSkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgYzE3ID0gbmV3IF8xOShlNS5zbGljZURvYyhsNy5mcm9tLCBsNy50bykpLCBhNDsKICAgICAgICAgIGZvciAobGV0IGYxMSBvZiBsNy5yZXN1bHQub3B0aW9ucykKICAgICAgICAgICAgKGE0ID0gYzE3Lm1hdGNoKGYxMS5sYWJlbCkpICYmIChmMTEuYm9vc3QgIT0gbnVsbCAmJiAoYTRbMF0gKz0gZjExLmJvb3N0KSwgdDQucHVzaChuZXcgTjExKGYxMSwgbDcsIGE0KSkpOwogICAgICAgIH0KICAgIGxldCBvNCA9IFtdLCBzOCA9IG51bGwsIHIzID0gZTUuZmFjZXQoeDE0KS5jb21wYXJlQ29tcGxldGlvbnM7CiAgICBmb3IgKGxldCBsNyBvZiB0NC5zb3J0KChjMTcsIGE0KSA9PiBhNC5tYXRjaFswXSAtIGMxNy5tYXRjaFswXSB8fCByMyhjMTcuY29tcGxldGlvbiwgYTQuY29tcGxldGlvbikpKQogICAgICAhczggfHwgczgubGFiZWwgIT0gbDcuY29tcGxldGlvbi5sYWJlbCB8fCBzOC5kZXRhaWwgIT0gbDcuY29tcGxldGlvbi5kZXRhaWwgfHwgczgudHlwZSAhPSBudWxsICYmIGw3LmNvbXBsZXRpb24udHlwZSAhPSBudWxsICYmIHM4LnR5cGUgIT0gbDcuY29tcGxldGlvbi50eXBlIHx8IHM4LmFwcGx5ICE9IGw3LmNvbXBsZXRpb24uYXBwbHkgPyBvNC5wdXNoKGw3KSA6IGRlOChsNy5jb21wbGV0aW9uKSA+IGRlOChzOCkgJiYgKG80W280Lmxlbmd0aCAtIDFdID0gbDcpLCBzOCA9IGw3LmNvbXBsZXRpb247CiAgICByZXR1cm4gbzQ7CiAgfQogIHZhciBQMjAgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIGk0LCBvNCwgczgpIHsKICAgICAgdGhpcy5vcHRpb25zID0gZTUsIHRoaXMuYXR0cnMgPSB0NCwgdGhpcy50b29sdGlwID0gaTQsIHRoaXMudGltZXN0YW1wID0gbzQsIHRoaXMuc2VsZWN0ZWQgPSBzODsKICAgIH0KICAgIHNldFNlbGVjdGVkKGU1LCB0NCkgewogICAgICByZXR1cm4gZTUgPT0gdGhpcy5zZWxlY3RlZCB8fCBlNSA+PSB0aGlzLm9wdGlvbnMubGVuZ3RoID8gdGhpcyA6IG5ldyBQMjAodGhpcy5vcHRpb25zLCBtZTE0KHQ0LCBlNSksIHRoaXMudG9vbHRpcCwgdGhpcy50aW1lc3RhbXAsIGU1KTsKICAgIH0KICAgIHN0YXRpYyBidWlsZChlNSwgdDQsIGk0LCBvNCwgczgpIHsKICAgICAgbGV0IHIzID0gaXQxMShlNSwgdDQpOwogICAgICBpZiAoIXIzLmxlbmd0aCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgbGV0IGw3ID0gdDQuZmFjZXQoeDE0KS5zZWxlY3RPbk9wZW4gPyAwIDogLTE7CiAgICAgIGlmIChvNCAmJiBvNC5zZWxlY3RlZCAhPSBsNyAmJiBvNC5zZWxlY3RlZCAhPSAtMSkgewogICAgICAgIGxldCBjMTcgPSBvNC5vcHRpb25zW280LnNlbGVjdGVkXS5jb21wbGV0aW9uOwogICAgICAgIGZvciAobGV0IGE0ID0gMDsgYTQgPCByMy5sZW5ndGg7IGE0KyspCiAgICAgICAgICBpZiAocjNbYTRdLmNvbXBsZXRpb24gPT0gYzE3KSB7CiAgICAgICAgICAgIGw3ID0gYTQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBuZXcgUDIwKHIzLCBtZTE0KGk0LCBsNyksIHsgcG9zOiBlNS5yZWR1Y2UoKGMxNywgYTQpID0+IGE0Lmhhc1Jlc3VsdCgpID8gTWF0aC5taW4oYzE3LCBhNC5mcm9tKSA6IGMxNywgMWU4KSwgY3JlYXRlOiB0dDE0KGQ5KSwgYWJvdmU6IHM4LmFib3ZlQ3Vyc29yIH0sIG80ID8gbzQudGltZXN0YW1wIDogRGF0ZS5ub3coKSwgbDcpOwogICAgfQogICAgbWFwKGU1KSB7CiAgICAgIHJldHVybiBuZXcgUDIwKHRoaXMub3B0aW9ucywgdGhpcy5hdHRycywgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0aGlzLnRvb2x0aXApLCB7IHBvczogZTUubWFwUG9zKHRoaXMudG9vbHRpcC5wb3MpIH0pLCB0aGlzLnRpbWVzdGFtcCwgdGhpcy5zZWxlY3RlZCk7CiAgICB9CiAgfTsKICB2YXIgTTE3ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCBpNCkgewogICAgICB0aGlzLmFjdGl2ZSA9IGU1LCB0aGlzLmlkID0gdDQsIHRoaXMub3BlbiA9IGk0OwogICAgfQogICAgc3RhdGljIHN0YXJ0KCkgewogICAgICByZXR1cm4gbmV3IE0xNyhsdDcsICJjbS1hYy0iICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMmU2KS50b1N0cmluZygzNiksIG51bGwpOwogICAgfQogICAgdXBkYXRlKGU1KSB7CiAgICAgIGxldCB7IHN0YXRlOiB0NCB9ID0gZTUsIGk0ID0gdDQuZmFjZXQoeDE0KSwgczggPSAoaTQub3ZlcnJpZGUgfHwgdDQubGFuZ3VhZ2VEYXRhQXQoImF1dG9jb21wbGV0ZSIsIEkyMCh0NCkpLm1hcChaZTUpKS5tYXAoKGw3KSA9PiAodGhpcy5hY3RpdmUuZmluZCgoYTQpID0+IGE0LnNvdXJjZSA9PSBsNykgfHwgbmV3IHAxNChsNywgdGhpcy5hY3RpdmUuc29tZSgoYTQpID0+IGE0LnN0YXRlICE9IDApID8gMSA6IDApKS51cGRhdGUoZTUsIGk0KSk7CiAgICAgIHM4Lmxlbmd0aCA9PSB0aGlzLmFjdGl2ZS5sZW5ndGggJiYgczguZXZlcnkoKGw3LCBjMTcpID0+IGw3ID09IHRoaXMuYWN0aXZlW2MxN10pICYmIChzOCA9IHRoaXMuYWN0aXZlKTsKICAgICAgbGV0IHIzID0gZTUuc2VsZWN0aW9uIHx8IHM4LnNvbWUoKGw3KSA9PiBsNy5oYXNSZXN1bHQoKSAmJiBlNS5jaGFuZ2VzLnRvdWNoZXNSYW5nZShsNy5mcm9tLCBsNy50bykpIHx8ICFvdDYoczgsIHRoaXMuYWN0aXZlKSA/IFAyMC5idWlsZChzOCwgdDQsIHRoaXMuaWQsIHRoaXMub3BlbiwgaTQpIDogdGhpcy5vcGVuICYmIGU1LmRvY0NoYW5nZWQgPyB0aGlzLm9wZW4ubWFwKGU1LmNoYW5nZXMpIDogdGhpcy5vcGVuOwogICAgICAhcjMgJiYgczguZXZlcnkoKGw3KSA9PiBsNy5zdGF0ZSAhPSAxKSAmJiBzOC5zb21lKChsNykgPT4gbDcuaGFzUmVzdWx0KCkpICYmIChzOCA9IHM4Lm1hcCgobDcpID0+IGw3Lmhhc1Jlc3VsdCgpID8gbmV3IHAxNChsNy5zb3VyY2UsIDApIDogbDcpKTsKICAgICAgZm9yIChsZXQgbDcgb2YgZTUuZWZmZWN0cykKICAgICAgICBsNy5pcyhsZTEyKSAmJiAocjMgPSByMyAmJiByMy5zZXRTZWxlY3RlZChsNy52YWx1ZSwgdGhpcy5pZCkpOwogICAgICByZXR1cm4gczggPT0gdGhpcy5hY3RpdmUgJiYgcjMgPT0gdGhpcy5vcGVuID8gdGhpcyA6IG5ldyBNMTcoczgsIHRoaXMuaWQsIHIzKTsKICAgIH0KICAgIGdldCB0b29sdGlwKCkgewogICAgICByZXR1cm4gdGhpcy5vcGVuID8gdGhpcy5vcGVuLnRvb2x0aXAgOiBudWxsOwogICAgfQogICAgZ2V0IGF0dHJzKCkgewogICAgICByZXR1cm4gdGhpcy5vcGVuID8gdGhpcy5vcGVuLmF0dHJzIDogc3Q4OwogICAgfQogIH07CiAgZnVuY3Rpb24gb3Q2KG44LCBlNSkgewogICAgaWYgKG44ID09IGU1KQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGZvciAobGV0IHQ0ID0gMCwgaTQgPSAwOyA7ICkgewogICAgICBmb3IgKDsgdDQgPCBuOC5sZW5ndGggJiYgIW44W3Q0XS5oYXNSZXN1bHQ7ICkKICAgICAgICB0NCsrOwogICAgICBmb3IgKDsgaTQgPCBlNS5sZW5ndGggJiYgIWU1W2k0XS5oYXNSZXN1bHQ7ICkKICAgICAgICBpNCsrOwogICAgICBsZXQgbzQgPSB0NCA9PSBuOC5sZW5ndGgsIHM4ID0gaTQgPT0gZTUubGVuZ3RoOwogICAgICBpZiAobzQgfHwgczgpCiAgICAgICAgcmV0dXJuIG80ID09IHM4OwogICAgICBpZiAobjhbdDQrK10ucmVzdWx0ICE9IGU1W2k0KytdLnJlc3VsdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIHZhciBzdDggPSB7ICJhcmlhLWF1dG9jb21wbGV0ZSI6ICJsaXN0IiB9OwogIGZ1bmN0aW9uIG1lMTQobjgsIGU1KSB7CiAgICBsZXQgdDQgPSB7ICJhcmlhLWF1dG9jb21wbGV0ZSI6ICJsaXN0IiwgImFyaWEtaGFzcG9wdXAiOiAibGlzdGJveCIsICJhcmlhLWNvbnRyb2xzIjogbjggfTsKICAgIHJldHVybiBlNSA+IC0xICYmICh0NFsiYXJpYS1hY3RpdmVkZXNjZW5kYW50Il0gPSBuOCArICItIiArIGU1KSwgdDQ7CiAgfQogIHZhciBsdDcgPSBbXTsKICBmdW5jdGlvbiB0ZTEyKG44KSB7CiAgICByZXR1cm4gbjguaXNVc2VyRXZlbnQoImlucHV0LnR5cGUiKSA/ICJpbnB1dCIgOiBuOC5pc1VzZXJFdmVudCgiZGVsZXRlLmJhY2t3YXJkIikgPyAiZGVsZXRlIiA6IG51bGw7CiAgfQogIHZhciBwMTQgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIGk0ID0gLTEpIHsKICAgICAgdGhpcy5zb3VyY2UgPSBlNSwgdGhpcy5zdGF0ZSA9IHQ0LCB0aGlzLmV4cGxpY2l0UG9zID0gaTQ7CiAgICB9CiAgICBoYXNSZXN1bHQoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHVwZGF0ZShlNSwgdDQpIHsKICAgICAgbGV0IGk0ID0gdGUxMihlNSksIG80ID0gdGhpczsKICAgICAgaTQgPyBvNCA9IG80LmhhbmRsZVVzZXJFdmVudChlNSwgaTQsIHQ0KSA6IGU1LmRvY0NoYW5nZWQgPyBvNCA9IG80LmhhbmRsZUNoYW5nZShlNSkgOiBlNS5zZWxlY3Rpb24gJiYgbzQuc3RhdGUgIT0gMCAmJiAobzQgPSBuZXcgcDE0KG80LnNvdXJjZSwgMCkpOwogICAgICBmb3IgKGxldCBzOCBvZiBlNS5lZmZlY3RzKQogICAgICAgIGlmIChzOC5pcyhzZTEzKSkKICAgICAgICAgIG80ID0gbmV3IHAxNChvNC5zb3VyY2UsIDEsIHM4LnZhbHVlID8gSTIwKGU1LnN0YXRlKSA6IC0xKTsKICAgICAgICBlbHNlIGlmIChzOC5pcyhIMTQpKQogICAgICAgICAgbzQgPSBuZXcgcDE0KG80LnNvdXJjZSwgMCk7CiAgICAgICAgZWxzZSBpZiAoczguaXMoTWU5KSkKICAgICAgICAgIGZvciAobGV0IHIzIG9mIHM4LnZhbHVlKQogICAgICAgICAgICByMy5zb3VyY2UgPT0gbzQuc291cmNlICYmIChvNCA9IHIzKTsKICAgICAgcmV0dXJuIG80OwogICAgfQogICAgaGFuZGxlVXNlckV2ZW50KGU1LCB0NCwgaTQpIHsKICAgICAgcmV0dXJuIHQ0ID09ICJkZWxldGUiIHx8ICFpNC5hY3RpdmF0ZU9uVHlwaW5nID8gdGhpcy5tYXAoZTUuY2hhbmdlcykgOiBuZXcgcDE0KHRoaXMuc291cmNlLCAxKTsKICAgIH0KICAgIGhhbmRsZUNoYW5nZShlNSkgewogICAgICByZXR1cm4gZTUuY2hhbmdlcy50b3VjaGVzUmFuZ2UoSTIwKGU1LnN0YXJ0U3RhdGUpKSA/IG5ldyBwMTQodGhpcy5zb3VyY2UsIDApIDogdGhpcy5tYXAoZTUuY2hhbmdlcyk7CiAgICB9CiAgICBtYXAoZTUpIHsKICAgICAgcmV0dXJuIGU1LmVtcHR5IHx8IHRoaXMuZXhwbGljaXRQb3MgPCAwID8gdGhpcyA6IG5ldyBwMTQodGhpcy5zb3VyY2UsIHRoaXMuc3RhdGUsIGU1Lm1hcFBvcyh0aGlzLmV4cGxpY2l0UG9zKSk7CiAgICB9CiAgfTsKICB2YXIgTzkgPSBjbGFzcyBleHRlbmRzIHAxNCB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQsIGk0LCBvNCwgczgpIHsKICAgICAgc3VwZXIoZTUsIDIsIHQ0KSwgdGhpcy5yZXN1bHQgPSBpNCwgdGhpcy5mcm9tID0gbzQsIHRoaXMudG8gPSBzODsKICAgIH0KICAgIGhhc1Jlc3VsdCgpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBoYW5kbGVVc2VyRXZlbnQoZTUsIHQ0LCBpNCkgewogICAgICB2YXIgbzQ7CiAgICAgIGxldCBzOCA9IGU1LmNoYW5nZXMubWFwUG9zKHRoaXMuZnJvbSksIHIzID0gZTUuY2hhbmdlcy5tYXBQb3ModGhpcy50bywgMSksIGw3ID0gSTIwKGU1LnN0YXRlKTsKICAgICAgaWYgKCh0aGlzLmV4cGxpY2l0UG9zIDwgMCA/IGw3IDw9IHM4IDogbDcgPCB0aGlzLmZyb20pIHx8IGw3ID4gcjMgfHwgdDQgPT0gImRlbGV0ZSIgJiYgSTIwKGU1LnN0YXJ0U3RhdGUpID09IHRoaXMuZnJvbSkKICAgICAgICByZXR1cm4gbmV3IHAxNCh0aGlzLnNvdXJjZSwgdDQgPT0gImlucHV0IiAmJiBpNC5hY3RpdmF0ZU9uVHlwaW5nID8gMSA6IDApOwogICAgICBsZXQgYzE3ID0gdGhpcy5leHBsaWNpdFBvcyA8IDAgPyAtMSA6IGU1LmNoYW5nZXMubWFwUG9zKHRoaXMuZXhwbGljaXRQb3MpLCBhNDsKICAgICAgcmV0dXJuIHJ0MTEodGhpcy5yZXN1bHQudmFsaWRGb3IsIGU1LnN0YXRlLCBzOCwgcjMpID8gbmV3IE85KHRoaXMuc291cmNlLCBjMTcsIHRoaXMucmVzdWx0LCBzOCwgcjMpIDogdGhpcy5yZXN1bHQudXBkYXRlICYmIChhNCA9IHRoaXMucmVzdWx0LnVwZGF0ZSh0aGlzLnJlc3VsdCwgczgsIHIzLCBuZXcgRjE3KGU1LnN0YXRlLCBsNywgYzE3ID49IDApKSkgPyBuZXcgTzkodGhpcy5zb3VyY2UsIGMxNywgYTQsIGE0LmZyb20sIChvNCA9IGE0LnRvKSAhPT0gbnVsbCAmJiBvNCAhPT0gdm9pZCAwID8gbzQgOiBJMjAoZTUuc3RhdGUpKSA6IG5ldyBwMTQodGhpcy5zb3VyY2UsIDEsIGMxNyk7CiAgICB9CiAgICBoYW5kbGVDaGFuZ2UoZTUpIHsKICAgICAgcmV0dXJuIGU1LmNoYW5nZXMudG91Y2hlc1JhbmdlKHRoaXMuZnJvbSwgdGhpcy50bykgPyBuZXcgcDE0KHRoaXMuc291cmNlLCAwKSA6IHRoaXMubWFwKGU1LmNoYW5nZXMpOwogICAgfQogICAgbWFwKGU1KSB7CiAgICAgIHJldHVybiBlNS5lbXB0eSA/IHRoaXMgOiBuZXcgTzkodGhpcy5zb3VyY2UsIHRoaXMuZXhwbGljaXRQb3MgPCAwID8gLTEgOiBlNS5tYXBQb3ModGhpcy5leHBsaWNpdFBvcyksIHRoaXMucmVzdWx0LCBlNS5tYXBQb3ModGhpcy5mcm9tKSwgZTUubWFwUG9zKHRoaXMudG8sIDEpKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIHJ0MTEobjgsIGU1LCB0NCwgaTQpIHsKICAgIGlmICghbjgpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBvNCA9IGU1LnNsaWNlRG9jKHQ0LCBpNCk7CiAgICByZXR1cm4gdHlwZW9mIG44ID09ICJmdW5jdGlvbiIgPyBuOChvNCwgdDQsIGk0LCBlNSkgOiBBZTE0KG44LCB0cnVlKS50ZXN0KG80KTsKICB9CiAgdmFyIHNlMTMgPSB5LmRlZmluZSgpOwogIHZhciBIMTQgPSB5LmRlZmluZSgpOwogIHZhciBNZTkgPSB5LmRlZmluZSh7IG1hcChuOCwgZTUpIHsKICAgIHJldHVybiBuOC5tYXAoKHQ0KSA9PiB0NC5tYXAoZTUpKTsKICB9IH0pOwogIHZhciBsZTEyID0geS5kZWZpbmUoKTsKICB2YXIgZDkgPSBKMi5kZWZpbmUoeyBjcmVhdGUoKSB7CiAgICByZXR1cm4gTTE3LnN0YXJ0KCk7CiAgfSwgdXBkYXRlKG44LCBlNSkgewogICAgcmV0dXJuIG44LnVwZGF0ZShlNSk7CiAgfSwgcHJvdmlkZTogKG44KSA9PiBbbm4uZnJvbShuOCwgKGU1KSA9PiBlNS50b29sdGlwKSwgTTIuY29udGVudEF0dHJpYnV0ZXMuZnJvbShuOCwgKGU1KSA9PiBlNS5hdHRycyldIH0pOwogIGZ1bmN0aW9uIFUxOShuOCwgZTUgPSAib3B0aW9uIikgewogICAgcmV0dXJuICh0NCkgPT4gewogICAgICBsZXQgaTQgPSB0NC5zdGF0ZS5maWVsZChkOSwgZmFsc2UpOwogICAgICBpZiAoIWk0IHx8ICFpNC5vcGVuIHx8IERhdGUubm93KCkgLSBpNC5vcGVuLnRpbWVzdGFtcCA8IHQ0LnN0YXRlLmZhY2V0KHgxNCkuaW50ZXJhY3Rpb25EZWxheSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGxldCBvNCA9IDEsIHM4OwogICAgICBlNSA9PSAicGFnZSIgJiYgKHM4ID0gdW8odDQsIGk0Lm9wZW4udG9vbHRpcCkpICYmIChvNCA9IE1hdGgubWF4KDIsIE1hdGguZmxvb3IoczguZG9tLm9mZnNldEhlaWdodCAvIHM4LmRvbS5xdWVyeVNlbGVjdG9yKCJsaSIpLm9mZnNldEhlaWdodCkgLSAxKSk7CiAgICAgIGxldCB7IGxlbmd0aDogcjMgfSA9IGk0Lm9wZW4ub3B0aW9ucywgbDcgPSBpNC5vcGVuLnNlbGVjdGVkID4gLTEgPyBpNC5vcGVuLnNlbGVjdGVkICsgbzQgKiAobjggPyAxIDogLTEpIDogbjggPyAwIDogcjMgLSAxOwogICAgICByZXR1cm4gbDcgPCAwID8gbDcgPSBlNSA9PSAicGFnZSIgPyAwIDogcjMgLSAxIDogbDcgPj0gcjMgJiYgKGw3ID0gZTUgPT0gInBhZ2UiID8gcjMgLSAxIDogMCksIHQ0LmRpc3BhdGNoKHsgZWZmZWN0czogbGUxMi5vZihsNykgfSksIHRydWU7CiAgICB9OwogIH0KICB2YXIgY3Q5ID0gKG44KSA9PiB7CiAgICBsZXQgZTUgPSBuOC5zdGF0ZS5maWVsZChkOSwgZmFsc2UpOwogICAgcmV0dXJuIG44LnN0YXRlLnJlYWRPbmx5IHx8ICFlNSB8fCAhZTUub3BlbiB8fCBlNS5vcGVuLnNlbGVjdGVkIDwgMCB8fCBEYXRlLm5vdygpIC0gZTUub3Blbi50aW1lc3RhbXAgPCBuOC5zdGF0ZS5mYWNldCh4MTQpLmludGVyYWN0aW9uRGVsYXkgPyBmYWxzZSA6IChUZTEyKG44LCBlNS5vcGVuLm9wdGlvbnNbZTUub3Blbi5zZWxlY3RlZF0pLCB0cnVlKTsKICB9OwogIHZhciBhdDYgPSAobjgpID0+IG44LnN0YXRlLmZpZWxkKGQ5LCBmYWxzZSkgPyAobjguZGlzcGF0Y2goeyBlZmZlY3RzOiBzZTEzLm9mKHRydWUpIH0pLCB0cnVlKSA6IGZhbHNlOwogIHZhciBmdDUgPSAobjgpID0+IHsKICAgIGxldCBlNSA9IG44LnN0YXRlLmZpZWxkKGQ5LCBmYWxzZSk7CiAgICByZXR1cm4gIWU1IHx8ICFlNS5hY3RpdmUuc29tZSgodDQpID0+IHQ0LnN0YXRlICE9IDApID8gZmFsc2UgOiAobjguZGlzcGF0Y2goeyBlZmZlY3RzOiBIMTQub2YobnVsbCkgfSksIHRydWUpOwogIH07CiAgdmFyIG5lMTAgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQpIHsKICAgICAgdGhpcy5hY3RpdmUgPSBlNSwgdGhpcy5jb250ZXh0ID0gdDQsIHRoaXMudGltZSA9IERhdGUubm93KCksIHRoaXMudXBkYXRlcyA9IFtdLCB0aGlzLmRvbmUgPSB2b2lkIDA7CiAgICB9CiAgfTsKICB2YXIgZ2U5ID0gNTA7CiAgdmFyIHV0MTAgPSA1MDsKICB2YXIgaHQxMCA9IDFlMzsKICB2YXIgcHQ5ID0gVjQuZnJvbUNsYXNzKGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKG44KSB7CiAgICAgIHRoaXMudmlldyA9IG44LCB0aGlzLmRlYm91bmNlVXBkYXRlID0gLTEsIHRoaXMucnVubmluZyA9IFtdLCB0aGlzLmRlYm91bmNlQWNjZXB0ID0gLTEsIHRoaXMuY29tcG9zaW5nID0gMDsKICAgICAgZm9yIChsZXQgZTUgb2Ygbjguc3RhdGUuZmllbGQoZDkpLmFjdGl2ZSkKICAgICAgICBlNS5zdGF0ZSA9PSAxICYmIHRoaXMuc3RhcnRRdWVyeShlNSk7CiAgICB9CiAgICB1cGRhdGUobjgpIHsKICAgICAgbGV0IGU1ID0gbjguc3RhdGUuZmllbGQoZDkpOwogICAgICBpZiAoIW44LnNlbGVjdGlvblNldCAmJiAhbjguZG9jQ2hhbmdlZCAmJiBuOC5zdGFydFN0YXRlLmZpZWxkKGQ5KSA9PSBlNSkKICAgICAgICByZXR1cm47CiAgICAgIGxldCB0NCA9IG44LnRyYW5zYWN0aW9ucy5zb21lKChpNCkgPT4gKGk0LnNlbGVjdGlvbiB8fCBpNC5kb2NDaGFuZ2VkKSAmJiAhdGUxMihpNCkpOwogICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgdGhpcy5ydW5uaW5nLmxlbmd0aDsgaTQrKykgewogICAgICAgIGxldCBvNCA9IHRoaXMucnVubmluZ1tpNF07CiAgICAgICAgaWYgKHQ0IHx8IG80LnVwZGF0ZXMubGVuZ3RoICsgbjgudHJhbnNhY3Rpb25zLmxlbmd0aCA+IHV0MTAgJiYgRGF0ZS5ub3coKSAtIG80LnRpbWUgPiBodDEwKSB7CiAgICAgICAgICBmb3IgKGxldCBzOCBvZiBvNC5jb250ZXh0LmFib3J0TGlzdGVuZXJzKQogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHM4KCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKHIzKSB7CiAgICAgICAgICAgICAgbnQyKHRoaXMudmlldy5zdGF0ZSwgcjMpOwogICAgICAgICAgICB9CiAgICAgICAgICBvNC5jb250ZXh0LmFib3J0TGlzdGVuZXJzID0gbnVsbCwgdGhpcy5ydW5uaW5nLnNwbGljZShpNC0tLCAxKTsKICAgICAgICB9IGVsc2UKICAgICAgICAgIG80LnVwZGF0ZXMucHVzaCguLi5uOC50cmFuc2FjdGlvbnMpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmRlYm91bmNlVXBkYXRlID4gLTEgJiYgY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VVcGRhdGUpLCB0aGlzLmRlYm91bmNlVXBkYXRlID0gZTUuYWN0aXZlLnNvbWUoKGk0KSA9PiBpNC5zdGF0ZSA9PSAxICYmICF0aGlzLnJ1bm5pbmcuc29tZSgobzQpID0+IG80LmFjdGl2ZS5zb3VyY2UgPT0gaTQuc291cmNlKSkgPyBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RhcnRVcGRhdGUoKSwgZ2U5KSA6IC0xLCB0aGlzLmNvbXBvc2luZyAhPSAwKQogICAgICAgIGZvciAobGV0IGk0IG9mIG44LnRyYW5zYWN0aW9ucykKICAgICAgICAgIHRlMTIoaTQpID09ICJpbnB1dCIgPyB0aGlzLmNvbXBvc2luZyA9IDIgOiB0aGlzLmNvbXBvc2luZyA9PSAyICYmIGk0LnNlbGVjdGlvbiAmJiAodGhpcy5jb21wb3NpbmcgPSAzKTsKICAgIH0KICAgIHN0YXJ0VXBkYXRlKCkgewogICAgICB0aGlzLmRlYm91bmNlVXBkYXRlID0gLTE7CiAgICAgIGxldCB7IHN0YXRlOiBuOCB9ID0gdGhpcy52aWV3LCBlNSA9IG44LmZpZWxkKGQ5KTsKICAgICAgZm9yIChsZXQgdDQgb2YgZTUuYWN0aXZlKQogICAgICAgIHQ0LnN0YXRlID09IDEgJiYgIXRoaXMucnVubmluZy5zb21lKChpNCkgPT4gaTQuYWN0aXZlLnNvdXJjZSA9PSB0NC5zb3VyY2UpICYmIHRoaXMuc3RhcnRRdWVyeSh0NCk7CiAgICB9CiAgICBzdGFydFF1ZXJ5KG44KSB7CiAgICAgIGxldCB7IHN0YXRlOiBlNSB9ID0gdGhpcy52aWV3LCB0NCA9IEkyMChlNSksIGk0ID0gbmV3IEYxNyhlNSwgdDQsIG44LmV4cGxpY2l0UG9zID09IHQ0KSwgbzQgPSBuZXcgbmUxMChuOCwgaTQpOwogICAgICB0aGlzLnJ1bm5pbmcucHVzaChvNCksIFByb21pc2UucmVzb2x2ZShuOC5zb3VyY2UoaTQpKS50aGVuKChzOCkgPT4gewogICAgICAgIG80LmNvbnRleHQuYWJvcnRlZCB8fCAobzQuZG9uZSA9IHM4IHx8IG51bGwsIHRoaXMuc2NoZWR1bGVBY2NlcHQoKSk7CiAgICAgIH0sIChzOCkgPT4gewogICAgICAgIHRoaXMudmlldy5kaXNwYXRjaCh7IGVmZmVjdHM6IEgxNC5vZihudWxsKSB9KSwgbnQyKHRoaXMudmlldy5zdGF0ZSwgczgpOwogICAgICB9KTsKICAgIH0KICAgIHNjaGVkdWxlQWNjZXB0KCkgewogICAgICB0aGlzLnJ1bm5pbmcuZXZlcnkoKG44KSA9PiBuOC5kb25lICE9PSB2b2lkIDApID8gdGhpcy5hY2NlcHQoKSA6IHRoaXMuZGVib3VuY2VBY2NlcHQgPCAwICYmICh0aGlzLmRlYm91bmNlQWNjZXB0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmFjY2VwdCgpLCBnZTkpKTsKICAgIH0KICAgIGFjY2VwdCgpIHsKICAgICAgdmFyIG44OwogICAgICB0aGlzLmRlYm91bmNlQWNjZXB0ID4gLTEgJiYgY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VBY2NlcHQpLCB0aGlzLmRlYm91bmNlQWNjZXB0ID0gLTE7CiAgICAgIGxldCBlNSA9IFtdLCB0NCA9IHRoaXMudmlldy5zdGF0ZS5mYWNldCh4MTQpOwogICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgdGhpcy5ydW5uaW5nLmxlbmd0aDsgaTQrKykgewogICAgICAgIGxldCBvNCA9IHRoaXMucnVubmluZ1tpNF07CiAgICAgICAgaWYgKG80LmRvbmUgPT09IHZvaWQgMCkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGlmICh0aGlzLnJ1bm5pbmcuc3BsaWNlKGk0LS0sIDEpLCBvNC5kb25lKSB7CiAgICAgICAgICBsZXQgcjMgPSBuZXcgTzkobzQuYWN0aXZlLnNvdXJjZSwgbzQuYWN0aXZlLmV4cGxpY2l0UG9zLCBvNC5kb25lLCBvNC5kb25lLmZyb20sIChuOCA9IG80LmRvbmUudG8pICE9PSBudWxsICYmIG44ICE9PSB2b2lkIDAgPyBuOCA6IEkyMChvNC51cGRhdGVzLmxlbmd0aCA/IG80LnVwZGF0ZXNbMF0uc3RhcnRTdGF0ZSA6IHRoaXMudmlldy5zdGF0ZSkpOwogICAgICAgICAgZm9yIChsZXQgbDcgb2YgbzQudXBkYXRlcykKICAgICAgICAgICAgcjMgPSByMy51cGRhdGUobDcsIHQ0KTsKICAgICAgICAgIGlmIChyMy5oYXNSZXN1bHQoKSkgewogICAgICAgICAgICBlNS5wdXNoKHIzKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxldCBzOCA9IHRoaXMudmlldy5zdGF0ZS5maWVsZChkOSkuYWN0aXZlLmZpbmQoKHIzKSA9PiByMy5zb3VyY2UgPT0gbzQuYWN0aXZlLnNvdXJjZSk7CiAgICAgICAgaWYgKHM4ICYmIHM4LnN0YXRlID09IDEpCiAgICAgICAgICBpZiAobzQuZG9uZSA9PSBudWxsKSB7CiAgICAgICAgICAgIGxldCByMyA9IG5ldyBwMTQobzQuYWN0aXZlLnNvdXJjZSwgMCk7CiAgICAgICAgICAgIGZvciAobGV0IGw3IG9mIG80LnVwZGF0ZXMpCiAgICAgICAgICAgICAgcjMgPSByMy51cGRhdGUobDcsIHQ0KTsKICAgICAgICAgICAgcjMuc3RhdGUgIT0gMSAmJiBlNS5wdXNoKHIzKTsKICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICB0aGlzLnN0YXJ0UXVlcnkoczgpOwogICAgICB9CiAgICAgIGU1Lmxlbmd0aCAmJiB0aGlzLnZpZXcuZGlzcGF0Y2goeyBlZmZlY3RzOiBNZTkub2YoZTUpIH0pOwogICAgfQogIH0sIHsgZXZlbnRIYW5kbGVyczogeyBibHVyKCkgewogICAgbGV0IG44ID0gdGhpcy52aWV3LnN0YXRlLmZpZWxkKGQ5LCBmYWxzZSk7CiAgICBuOCAmJiBuOC50b29sdGlwICYmIHRoaXMudmlldy5zdGF0ZS5mYWNldCh4MTQpLmNsb3NlT25CbHVyICYmIHRoaXMudmlldy5kaXNwYXRjaCh7IGVmZmVjdHM6IEgxNC5vZihudWxsKSB9KTsKICB9LCBjb21wb3NpdGlvbnN0YXJ0KCkgewogICAgdGhpcy5jb21wb3NpbmcgPSAxOwogIH0sIGNvbXBvc2l0aW9uZW5kKCkgewogICAgdGhpcy5jb21wb3NpbmcgPT0gMyAmJiBzZXRUaW1lb3V0KCgpID0+IHRoaXMudmlldy5kaXNwYXRjaCh7IGVmZmVjdHM6IHNlMTMub2YoZmFsc2UpIH0pLCAyMCksIHRoaXMuY29tcG9zaW5nID0gMDsKICB9IH0gfSk7CiAgdmFyIFJlMTIgPSBNMi5iYXNlVGhlbWUoeyAiLmNtLXRvb2x0aXAuY20tdG9vbHRpcC1hdXRvY29tcGxldGUiOiB7ICImID4gdWwiOiB7IGZvbnRGYW1pbHk6ICJtb25vc3BhY2UiLCB3aGl0ZVNwYWNlOiAibm93cmFwIiwgb3ZlcmZsb3c6ICJoaWRkZW4gYXV0byIsIG1heFdpZHRoX2ZhbGxiYWNrOiAiNzAwcHgiLCBtYXhXaWR0aDogIm1pbig3MDBweCwgOTV2dykiLCBtaW5XaWR0aDogIjI1MHB4IiwgbWF4SGVpZ2h0OiAiMTBlbSIsIGxpc3RTdHlsZTogIm5vbmUiLCBtYXJnaW46IDAsIHBhZGRpbmc6IDAsICImID4gbGkiOiB7IG92ZXJmbG93WDogImhpZGRlbiIsIHRleHRPdmVyZmxvdzogImVsbGlwc2lzIiwgY3Vyc29yOiAicG9pbnRlciIsIHBhZGRpbmc6ICIxcHggM3B4IiwgbGluZUhlaWdodDogMS4yIH0gfSB9LCAiJmxpZ2h0IC5jbS10b29sdGlwLWF1dG9jb21wbGV0ZSB1bCBsaVthcmlhLXNlbGVjdGVkXSI6IHsgYmFja2dyb3VuZDogIiMxN2MiLCBjb2xvcjogIndoaXRlIiB9LCAiJmRhcmsgLmNtLXRvb2x0aXAtYXV0b2NvbXBsZXRlIHVsIGxpW2FyaWEtc2VsZWN0ZWRdIjogeyBiYWNrZ3JvdW5kOiAiIzM0NyIsIGNvbG9yOiAid2hpdGUiIH0sICIuY20tY29tcGxldGlvbkxpc3RJbmNvbXBsZXRlVG9wOmJlZm9yZSwgLmNtLWNvbXBsZXRpb25MaXN0SW5jb21wbGV0ZUJvdHRvbTphZnRlciI6IHsgY29udGVudDogJyJceEI3XHhCN1x4QjciJywgb3BhY2l0eTogMC41LCBkaXNwbGF5OiAiYmxvY2siLCB0ZXh0QWxpZ246ICJjZW50ZXIiIH0sICIuY20tdG9vbHRpcC5jbS1jb21wbGV0aW9uSW5mbyI6IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHBhZGRpbmc6ICIzcHggOXB4Iiwgd2lkdGg6ICJtYXgtY29udGVudCIsIG1heFdpZHRoOiBgJHs0MDB9cHhgLCBib3hTaXppbmc6ICJib3JkZXItYm94IiB9LCAiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLWxlZnQiOiB7IHJpZ2h0OiAiMTAwJSIgfSwgIi5jbS1jb21wbGV0aW9uSW5mby5jbS1jb21wbGV0aW9uSW5mby1yaWdodCI6IHsgbGVmdDogIjEwMCUiIH0sICIuY20tY29tcGxldGlvbkluZm8uY20tY29tcGxldGlvbkluZm8tbGVmdC1uYXJyb3ciOiB7IHJpZ2h0OiBgJHszMH1weGAgfSwgIi5jbS1jb21wbGV0aW9uSW5mby5jbS1jb21wbGV0aW9uSW5mby1yaWdodC1uYXJyb3ciOiB7IGxlZnQ6IGAkezMwfXB4YCB9LCAiJmxpZ2h0IC5jbS1zbmlwcGV0RmllbGQiOiB7IGJhY2tncm91bmRDb2xvcjogIiMwMDAwMDAyMiIgfSwgIiZkYXJrIC5jbS1zbmlwcGV0RmllbGQiOiB7IGJhY2tncm91bmRDb2xvcjogIiNmZmZmZmYyMiIgfSwgIi5jbS1zbmlwcGV0RmllbGRQb3NpdGlvbiI6IHsgdmVydGljYWxBbGlnbjogInRleHQtdG9wIiwgd2lkdGg6IDAsIGhlaWdodDogIjEuMTVlbSIsIGRpc3BsYXk6ICJpbmxpbmUtYmxvY2siLCBtYXJnaW46ICIwIC0wLjdweCAtLjdlbSIsIGJvcmRlckxlZnQ6ICIxLjRweCBkb3R0ZWQgIzg4OCIgfSwgIi5jbS1jb21wbGV0aW9uTWF0Y2hlZFRleHQiOiB7IHRleHREZWNvcmF0aW9uOiAidW5kZXJsaW5lIiB9LCAiLmNtLWNvbXBsZXRpb25EZXRhaWwiOiB7IG1hcmdpbkxlZnQ6ICIwLjVlbSIsIGZvbnRTdHlsZTogIml0YWxpYyIgfSwgIi5jbS1jb21wbGV0aW9uSWNvbiI6IHsgZm9udFNpemU6ICI5MCUiLCB3aWR0aDogIi44ZW0iLCBkaXNwbGF5OiAiaW5saW5lLWJsb2NrIiwgdGV4dEFsaWduOiAiY2VudGVyIiwgcGFkZGluZ1JpZ2h0OiAiLjZlbSIsIG9wYWNpdHk6ICIwLjYiIH0sICIuY20tY29tcGxldGlvbkljb24tZnVuY3Rpb24sIC5jbS1jb21wbGV0aW9uSWNvbi1tZXRob2QiOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ1x1MDE5MiciIH0gfSwgIi5jbS1jb21wbGV0aW9uSWNvbi1jbGFzcyI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInXHUyNUNCJyIgfSB9LCAiLmNtLWNvbXBsZXRpb25JY29uLWludGVyZmFjZSI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInXHUyNUNDJyIgfSB9LCAiLmNtLWNvbXBsZXRpb25JY29uLXZhcmlhYmxlIjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidcdXsxRDQ2NX0nIiB9IH0sICIuY20tY29tcGxldGlvbkljb24tY29uc3RhbnQiOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ1x1ezFENDM2fSciIH0gfSwgIi5jbS1jb21wbGV0aW9uSWNvbi10eXBlIjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidcdXsxRDQ2MX0nIiB9IH0sICIuY20tY29tcGxldGlvbkljb24tZW51bSI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInXHUyMjJBJyIgfSB9LCAiLmNtLWNvbXBsZXRpb25JY29uLXByb3BlcnR5IjogeyAiJjphZnRlciI6IHsgY29udGVudDogIidcdTI1QTEnIiB9IH0sICIuY20tY29tcGxldGlvbkljb24ta2V5d29yZCI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInXHV7MUY1MTF9XHVGRTBFJyIgfSB9LCAiLmNtLWNvbXBsZXRpb25JY29uLW5hbWVzcGFjZSI6IHsgIiY6YWZ0ZXIiOiB7IGNvbnRlbnQ6ICInXHUyNUEyJyIgfSB9LCAiLmNtLWNvbXBsZXRpb25JY29uLXRleHQiOiB7ICImOmFmdGVyIjogeyBjb250ZW50OiAiJ2FiYyciLCBmb250U2l6ZTogIjUwJSIsIHZlcnRpY2FsQWxpZ246ICJtaWRkbGUiIH0gfSB9KTsKICB2YXIgaWUxMCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGU1LCB0NCwgaTQsIG80KSB7CiAgICAgIHRoaXMuZmllbGQgPSBlNSwgdGhpcy5saW5lID0gdDQsIHRoaXMuZnJvbSA9IGk0LCB0aGlzLnRvID0gbzQ7CiAgICB9CiAgfTsKICB2YXIgUjE4ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0LCBpNCkgewogICAgICB0aGlzLmZpZWxkID0gZTUsIHRoaXMuZnJvbSA9IHQ0LCB0aGlzLnRvID0gaTQ7CiAgICB9CiAgICBtYXAoZTUpIHsKICAgICAgbGV0IHQ0ID0gZTUubWFwUG9zKHRoaXMuZnJvbSwgLTEsIE0uVHJhY2tEZWwpLCBpNCA9IGU1Lm1hcFBvcyh0aGlzLnRvLCAxLCBNLlRyYWNrRGVsKTsKICAgICAgcmV0dXJuIHQ0ID09IG51bGwgfHwgaTQgPT0gbnVsbCA/IG51bGwgOiBuZXcgUjE4KHRoaXMuZmllbGQsIHQ0LCBpNCk7CiAgICB9CiAgfTsKICB2YXIgQjE2ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIHQ0KSB7CiAgICAgIHRoaXMubGluZXMgPSBlNSwgdGhpcy5maWVsZFBvc2l0aW9ucyA9IHQ0OwogICAgfQogICAgaW5zdGFudGlhdGUoZTUsIHQ0KSB7CiAgICAgIGxldCBpNCA9IFtdLCBvNCA9IFt0NF0sIHM4ID0gZTUuZG9jLmxpbmVBdCh0NCksIHIzID0gL15ccyovLmV4ZWMoczgudGV4dClbMF07CiAgICAgIGZvciAobGV0IGMxNyBvZiB0aGlzLmxpbmVzKSB7CiAgICAgICAgaWYgKGk0Lmxlbmd0aCkgewogICAgICAgICAgbGV0IGE0ID0gcjMsIGYxMSA9IC9eXHQqLy5leGVjKGMxNylbMF0ubGVuZ3RoOwogICAgICAgICAgZm9yIChsZXQgdTExID0gMDsgdTExIDwgZjExOyB1MTErKykKICAgICAgICAgICAgYTQgKz0gZTUuZmFjZXQoQXQ4KTsKICAgICAgICAgIG80LnB1c2godDQgKyBhNC5sZW5ndGggLSBmMTEpLCBjMTcgPSBhNCArIGMxNy5zbGljZShmMTEpOwogICAgICAgIH0KICAgICAgICBpNC5wdXNoKGMxNyksIHQ0ICs9IGMxNy5sZW5ndGggKyAxOwogICAgICB9CiAgICAgIGxldCBsNyA9IHRoaXMuZmllbGRQb3NpdGlvbnMubWFwKChjMTcpID0+IG5ldyBSMTgoYzE3LmZpZWxkLCBvNFtjMTcubGluZV0gKyBjMTcuZnJvbSwgbzRbYzE3LmxpbmVdICsgYzE3LnRvKSk7CiAgICAgIHJldHVybiB7IHRleHQ6IGk0LCByYW5nZXM6IGw3IH07CiAgICB9CiAgICBzdGF0aWMgcGFyc2UoZTUpIHsKICAgICAgbGV0IHQ0ID0gW10sIGk0ID0gW10sIG80ID0gW10sIHM4OwogICAgICBmb3IgKGxldCByMyBvZiBlNS5zcGxpdCgvXHJcbj98XG4vKSkgewogICAgICAgIGZvciAoOyBzOCA9IC9bIyRdXHsoPzooXGQrKSg/OjooW159XSopKT98KFtefV0qKSlcfS8uZXhlYyhyMyk7ICkgewogICAgICAgICAgbGV0IGw3ID0gczhbMV0gPyArczhbMV0gOiBudWxsLCBjMTcgPSBzOFsyXSB8fCBzOFszXSB8fCAiIiwgYTQgPSAtMTsKICAgICAgICAgIGZvciAobGV0IGYxMSA9IDA7IGYxMSA8IHQ0Lmxlbmd0aDsgZjExKyspCiAgICAgICAgICAgIChsNyAhPSBudWxsID8gdDRbZjExXS5zZXEgPT0gbDcgOiBjMTcgPyB0NFtmMTFdLm5hbWUgPT0gYzE3IDogZmFsc2UpICYmIChhNCA9IGYxMSk7CiAgICAgICAgICBpZiAoYTQgPCAwKSB7CiAgICAgICAgICAgIGxldCBmMTEgPSAwOwogICAgICAgICAgICBmb3IgKDsgZjExIDwgdDQubGVuZ3RoICYmIChsNyA9PSBudWxsIHx8IHQ0W2YxMV0uc2VxICE9IG51bGwgJiYgdDRbZjExXS5zZXEgPCBsNyk7ICkKICAgICAgICAgICAgICBmMTErKzsKICAgICAgICAgICAgdDQuc3BsaWNlKGYxMSwgMCwgeyBzZXE6IGw3LCBuYW1lOiBjMTcgfSksIGE0ID0gZjExOwogICAgICAgICAgICBmb3IgKGxldCB1MTEgb2YgbzQpCiAgICAgICAgICAgICAgdTExLmZpZWxkID49IGE0ICYmIHUxMS5maWVsZCsrOwogICAgICAgICAgfQogICAgICAgICAgbzQucHVzaChuZXcgaWUxMChhNCwgaTQubGVuZ3RoLCBzOC5pbmRleCwgczguaW5kZXggKyBjMTcubGVuZ3RoKSksIHIzID0gcjMuc2xpY2UoMCwgczguaW5kZXgpICsgYzE3ICsgcjMuc2xpY2UoczguaW5kZXggKyBzOFswXS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBsNzsgbDcgPSAvKFskI10pXFx7Ly5leGVjKHIzKTsgKSB7CiAgICAgICAgICByMyA9IHIzLnNsaWNlKDAsIGw3LmluZGV4KSArIGw3WzFdICsgInsiICsgcjMuc2xpY2UobDcuaW5kZXggKyBsN1swXS5sZW5ndGgpOwogICAgICAgICAgZm9yIChsZXQgYzE3IG9mIG80KQogICAgICAgICAgICBjMTcubGluZSA9PSBpNC5sZW5ndGggJiYgYzE3LmZyb20gPiBsNy5pbmRleCAmJiAoYzE3LmZyb20tLSwgYzE3LnRvLS0pOwogICAgICAgIH0KICAgICAgICBpNC5wdXNoKHIzKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IEIxNihpNCwgbzQpOwogICAgfQogIH07CiAgdmFyIGR0NyA9IGsud2lkZ2V0KHsgd2lkZ2V0OiBuZXcgY2xhc3MgZXh0ZW5kcyBYNCB7CiAgICB0b0RPTSgpIHsKICAgICAgbGV0IG44ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICByZXR1cm4gbjguY2xhc3NOYW1lID0gImNtLXNuaXBwZXRGaWVsZFBvc2l0aW9uIiwgbjg7CiAgICB9CiAgICBpZ25vcmVFdmVudCgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0oKSB9KTsKICB2YXIgbXQ3ID0gay5tYXJrKHsgY2xhc3M6ICJjbS1zbmlwcGV0RmllbGQiIH0pOwogIHZhciBTMTYgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihlNSwgdDQpIHsKICAgICAgdGhpcy5yYW5nZXMgPSBlNSwgdGhpcy5hY3RpdmUgPSB0NCwgdGhpcy5kZWNvID0gay5zZXQoZTUubWFwKChpNCkgPT4gKGk0LmZyb20gPT0gaTQudG8gPyBkdDcgOiBtdDcpLnJhbmdlKGk0LmZyb20sIGk0LnRvKSkpOwogICAgfQogICAgbWFwKGU1KSB7CiAgICAgIGxldCB0NCA9IFtdOwogICAgICBmb3IgKGxldCBpNCBvZiB0aGlzLnJhbmdlcykgewogICAgICAgIGxldCBvNCA9IGk0Lm1hcChlNSk7CiAgICAgICAgaWYgKCFvNCkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHQ0LnB1c2gobzQpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgUzE2KHQ0LCB0aGlzLmFjdGl2ZSk7CiAgICB9CiAgICBzZWxlY3Rpb25JbnNpZGVGaWVsZChlNSkgewogICAgICByZXR1cm4gZTUucmFuZ2VzLmV2ZXJ5KCh0NCkgPT4gdGhpcy5yYW5nZXMuc29tZSgoaTQpID0+IGk0LmZpZWxkID09IHRoaXMuYWN0aXZlICYmIGk0LmZyb20gPD0gdDQuZnJvbSAmJiBpNC50byA+PSB0NC50bykpOwogICAgfQogIH07CiAgdmFyICQxNyA9IHkuZGVmaW5lKHsgbWFwKG44LCBlNSkgewogICAgcmV0dXJuIG44ICYmIG44Lm1hcChlNSk7CiAgfSB9KTsKICB2YXIgZ3Q5ID0geS5kZWZpbmUoKTsKICB2YXIgRDEzID0gSjIuZGVmaW5lKHsgY3JlYXRlKCkgewogICAgcmV0dXJuIG51bGw7CiAgfSwgdXBkYXRlKG44LCBlNSkgewogICAgZm9yIChsZXQgdDQgb2YgZTUuZWZmZWN0cykgewogICAgICBpZiAodDQuaXMoJDE3KSkKICAgICAgICByZXR1cm4gdDQudmFsdWU7CiAgICAgIGlmICh0NC5pcyhndDkpICYmIG44KQogICAgICAgIHJldHVybiBuZXcgUzE2KG44LnJhbmdlcywgdDQudmFsdWUpOwogICAgfQogICAgcmV0dXJuIG44ICYmIGU1LmRvY0NoYW5nZWQgJiYgKG44ID0gbjgubWFwKGU1LmNoYW5nZXMpKSwgbjggJiYgZTUuc2VsZWN0aW9uICYmICFuOC5zZWxlY3Rpb25JbnNpZGVGaWVsZChlNS5zZWxlY3Rpb24pICYmIChuOCA9IG51bGwpLCBuODsKICB9LCBwcm92aWRlOiAobjgpID0+IE0yLmRlY29yYXRpb25zLmZyb20objgsIChlNSkgPT4gZTUgPyBlNS5kZWNvIDogay5ub25lKSB9KTsKICBmdW5jdGlvbiByZTE1KG44LCBlNSkgewogICAgcmV0dXJuIGcyLmNyZWF0ZShuOC5maWx0ZXIoKHQ0KSA9PiB0NC5maWVsZCA9PSBlNSkubWFwKCh0NCkgPT4gZzIucmFuZ2UodDQuZnJvbSwgdDQudG8pKSk7CiAgfQogIGZ1bmN0aW9uIGJ0NChuOCkgewogICAgbGV0IGU1ID0gQjE2LnBhcnNlKG44KTsKICAgIHJldHVybiAodDQsIGk0LCBvNCwgczgpID0+IHsKICAgICAgbGV0IHsgdGV4dDogcjMsIHJhbmdlczogbDcgfSA9IGU1Lmluc3RhbnRpYXRlKHQ0LnN0YXRlLCBvNCksIGMxNyA9IHsgY2hhbmdlczogeyBmcm9tOiBvNCwgdG86IHM4LCBpbnNlcnQ6IHYub2YocjMpIH0sIHNjcm9sbEludG9WaWV3OiB0cnVlIH07CiAgICAgIGlmIChsNy5sZW5ndGggJiYgKGMxNy5zZWxlY3Rpb24gPSByZTE1KGw3LCAwKSksIGw3Lmxlbmd0aCA+IDEpIHsKICAgICAgICBsZXQgYTQgPSBuZXcgUzE2KGw3LCAwKSwgZjExID0gYzE3LmVmZmVjdHMgPSBbJDE3Lm9mKGE0KV07CiAgICAgICAgdDQuc3RhdGUuZmllbGQoRDEzLCBmYWxzZSkgPT09IHZvaWQgMCAmJiBmMTEucHVzaCh5LmFwcGVuZENvbmZpZy5vZihbRDEzLCBDdDgsIEl0OCwgUmUxMl0pKTsKICAgICAgfQogICAgICB0NC5kaXNwYXRjaCh0NC5zdGF0ZS51cGRhdGUoYzE3KSk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBCZTkobjgpIHsKICAgIHJldHVybiAoeyBzdGF0ZTogZTUsIGRpc3BhdGNoOiB0NCB9KSA9PiB7CiAgICAgIGxldCBpNCA9IGU1LmZpZWxkKEQxMywgZmFsc2UpOwogICAgICBpZiAoIWk0IHx8IG44IDwgMCAmJiBpNC5hY3RpdmUgPT0gMCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGxldCBvNCA9IGk0LmFjdGl2ZSArIG44LCBzOCA9IG44ID4gMCAmJiAhaTQucmFuZ2VzLnNvbWUoKHIzKSA9PiByMy5maWVsZCA9PSBvNCArIG44KTsKICAgICAgcmV0dXJuIHQ0KGU1LnVwZGF0ZSh7IHNlbGVjdGlvbjogcmUxNShpNC5yYW5nZXMsIG80KSwgZWZmZWN0czogJDE3Lm9mKHM4ID8gbnVsbCA6IG5ldyBTMTYoaTQucmFuZ2VzLCBvNCkpIH0pKSwgdHJ1ZTsKICAgIH07CiAgfQogIHZhciB4dDEwID0gKHsgc3RhdGU6IG44LCBkaXNwYXRjaDogZTUgfSkgPT4gbjguZmllbGQoRDEzLCBmYWxzZSkgPyAoZTUobjgudXBkYXRlKHsgZWZmZWN0czogJDE3Lm9mKG51bGwpIH0pKSwgdHJ1ZSkgOiBmYWxzZTsKICB2YXIgeXQ1ID0gQmU5KDEpOwogIHZhciB3dDYgPSBCZTkoLTEpOwogIHZhciB2dDcgPSBbeyBrZXk6ICJUYWIiLCBydW46IHl0NSwgc2hpZnQ6IHd0NiB9LCB7IGtleTogIkVzY2FwZSIsIHJ1bjogeHQxMCB9XTsKICB2YXIgYmU5ID0gQTIuZGVmaW5lKHsgY29tYmluZShuOCkgewogICAgcmV0dXJuIG44Lmxlbmd0aCA/IG44WzBdIDogdnQ3OwogIH0gfSk7CiAgdmFyIEN0OCA9IGx0LmhpZ2hlc3QoYnIuY29tcHV0ZShbYmU5XSwgKG44KSA9PiBuOC5mYWNldChiZTkpKSk7CiAgZnVuY3Rpb24gVnQ5KG44LCBlNSkgewogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZTUpLCB7IGFwcGx5OiBidDQobjgpIH0pOwogIH0KICB2YXIgSXQ4ID0gTTIuZG9tRXZlbnRIYW5kbGVycyh7IG1vdXNlZG93bihuOCwgZTUpIHsKICAgIGxldCB0NCA9IGU1LnN0YXRlLmZpZWxkKEQxMywgZmFsc2UpLCBpNDsKICAgIGlmICghdDQgfHwgKGk0ID0gZTUucG9zQXRDb29yZHMoeyB4OiBuOC5jbGllbnRYLCB5OiBuOC5jbGllbnRZIH0pKSA9PSBudWxsKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgbzQgPSB0NC5yYW5nZXMuZmluZCgoczgpID0+IHM4LmZyb20gPD0gaTQgJiYgczgudG8gPj0gaTQpOwogICAgcmV0dXJuICFvNCB8fCBvNC5maWVsZCA9PSB0NC5hY3RpdmUgPyBmYWxzZSA6IChlNS5kaXNwYXRjaCh7IHNlbGVjdGlvbjogcmUxNSh0NC5yYW5nZXMsIG80LmZpZWxkKSwgZWZmZWN0czogJDE3Lm9mKHQ0LnJhbmdlcy5zb21lKChzOCkgPT4gczguZmllbGQgPiBvNC5maWVsZCkgPyBuZXcgUzE2KHQ0LnJhbmdlcywgbzQuZmllbGQpIDogbnVsbCkgfSksIHRydWUpOwogIH0gfSk7CiAgdmFyIEwxNSA9IHsgYnJhY2tldHM6IFsiKCIsICJbIiwgInsiLCAiJyIsICciJ10sIGJlZm9yZTogIildfTo7PiIsIHN0cmluZ1ByZWZpeGVzOiBbXSB9OwogIHZhciBFMTAgPSB5LmRlZmluZSh7IG1hcChuOCwgZTUpIHsKICAgIGxldCB0NCA9IGU1Lm1hcFBvcyhuOCwgLTEsIE0uVHJhY2tBZnRlcik7CiAgICByZXR1cm4gdDQgPz8gdm9pZCAwOwogIH0gfSk7CiAgdmFyIGNlMTEgPSB5LmRlZmluZSh7IG1hcChuOCwgZTUpIHsKICAgIHJldHVybiBlNS5tYXBQb3MobjgpOwogIH0gfSk7CiAgdmFyIGFlMTEgPSBuZXcgY2xhc3MgZXh0ZW5kcyBqIHsKICB9KCk7CiAgYWUxMS5zdGFydFNpZGUgPSAxOwogIGFlMTEuZW5kU2lkZSA9IC0xOwogIHZhciBMZTYgPSBKMi5kZWZpbmUoeyBjcmVhdGUoKSB7CiAgICByZXR1cm4gUC5lbXB0eTsKICB9LCB1cGRhdGUobjgsIGU1KSB7CiAgICBpZiAoZTUuc2VsZWN0aW9uKSB7CiAgICAgIGxldCB0NCA9IGU1LnN0YXRlLmRvYy5saW5lQXQoZTUuc2VsZWN0aW9uLm1haW4uaGVhZCkuZnJvbSwgaTQgPSBlNS5zdGFydFN0YXRlLmRvYy5saW5lQXQoZTUuc3RhcnRTdGF0ZS5zZWxlY3Rpb24ubWFpbi5oZWFkKS5mcm9tOwogICAgICB0NCAhPSBlNS5jaGFuZ2VzLm1hcFBvcyhpNCwgLTEpICYmIChuOCA9IFAuZW1wdHkpOwogICAgfQogICAgbjggPSBuOC5tYXAoZTUuY2hhbmdlcyk7CiAgICBmb3IgKGxldCB0NCBvZiBlNS5lZmZlY3RzKQogICAgICB0NC5pcyhFMTApID8gbjggPSBuOC51cGRhdGUoeyBhZGQ6IFthZTExLnJhbmdlKHQ0LnZhbHVlLCB0NC52YWx1ZSArIDEpXSB9KSA6IHQ0LmlzKGNlMTEpICYmIChuOCA9IG44LnVwZGF0ZSh7IGZpbHRlcjogKGk0KSA9PiBpNCAhPSB0NC52YWx1ZSB9KSk7CiAgICByZXR1cm4gbjg7CiAgfSB9KTsKICB2YXIgWTIyID0gIigpW117fTw+IjsKICBmdW5jdGlvbiBrZTEyKG44KSB7CiAgICBmb3IgKGxldCBlNSA9IDA7IGU1IDwgWTIyLmxlbmd0aDsgZTUgKz0gMikKICAgICAgaWYgKFkyMi5jaGFyQ29kZUF0KGU1KSA9PSBuOCkKICAgICAgICByZXR1cm4gWTIyLmNoYXJBdChlNSArIDEpOwogICAgcmV0dXJuIHJ0KG44IDwgMTI4ID8gbjggOiBuOCArIDEpOwogIH0KICBmdW5jdGlvbiBXZTcobjgsIGU1KSB7CiAgICByZXR1cm4gbjgubGFuZ3VhZ2VEYXRhQXQoImNsb3NlQnJhY2tldHMiLCBlNSlbMF0gfHwgTDE1OwogIH0KICB2YXIgUHQxMCA9IHR5cGVvZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCIgJiYgL0FuZHJvaWRcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICB2YXIgT3Q5ID0gTTIuaW5wdXRIYW5kbGVyLm9mKChuOCwgZTUsIHQ0LCBpNCkgPT4gewogICAgaWYgKChQdDEwID8gbjguY29tcG9zaW5nIDogbjguY29tcG9zaXRpb25TdGFydGVkKSB8fCBuOC5zdGF0ZS5yZWFkT25seSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgbGV0IG80ID0gbjguc3RhdGUuc2VsZWN0aW9uLm1haW47CiAgICBpZiAoaTQubGVuZ3RoID4gMiB8fCBpNC5sZW5ndGggPT0gMiAmJiBiZTIob2UoaTQsIDApKSA9PSAxIHx8IGU1ICE9IG80LmZyb20gfHwgdDQgIT0gbzQudG8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBzOCA9IFR0OChuOC5zdGF0ZSwgaTQpOwogICAgcmV0dXJuIHM4ID8gKG44LmRpc3BhdGNoKHM4KSwgdHJ1ZSkgOiBmYWxzZTsKICB9KTsKICBmdW5jdGlvbiBUdDgobjgsIGU1KSB7CiAgICBsZXQgdDQgPSBXZTcobjgsIG44LnNlbGVjdGlvbi5tYWluLmhlYWQpLCBpNCA9IHQ0LmJyYWNrZXRzIHx8IEwxNS5icmFja2V0czsKICAgIGZvciAobGV0IG80IG9mIGk0KSB7CiAgICAgIGxldCBzOCA9IGtlMTIob2UobzQsIDApKTsKICAgICAgaWYgKGU1ID09IG80KQogICAgICAgIHJldHVybiBzOCA9PSBvNCA/IER0OChuOCwgbzQsIGk0LmluZGV4T2YobzQgKyBvNCArIG80KSA+IC0xLCB0NCkgOiBSdDkobjgsIG80LCBzOCwgdDQuYmVmb3JlIHx8IEwxNS5iZWZvcmUpOwogICAgICBpZiAoZTUgPT0gczggJiYgJGU4KG44LCBuOC5zZWxlY3Rpb24ubWFpbi5mcm9tKSkKICAgICAgICByZXR1cm4gQnQ2KG44LCBvNCwgczgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uICRlOChuOCwgZTUpIHsKICAgIGxldCB0NCA9IGZhbHNlOwogICAgcmV0dXJuIG44LmZpZWxkKExlNikuYmV0d2VlbigwLCBuOC5kb2MubGVuZ3RoLCAoaTQpID0+IHsKICAgICAgaTQgPT0gZTUgJiYgKHQ0ID0gdHJ1ZSk7CiAgICB9KSwgdDQ7CiAgfQogIGZ1bmN0aW9uIHExMyhuOCwgZTUpIHsKICAgIGxldCB0NCA9IG44LnNsaWNlU3RyaW5nKGU1LCBlNSArIDIpOwogICAgcmV0dXJuIHQ0LnNsaWNlKDAsIGJlMihvZSh0NCwgMCkpKTsKICB9CiAgZnVuY3Rpb24gUnQ5KG44LCBlNSwgdDQsIGk0KSB7CiAgICBsZXQgbzQgPSBudWxsLCBzOCA9IG44LmNoYW5nZUJ5UmFuZ2UoKHIzKSA9PiB7CiAgICAgIGlmICghcjMuZW1wdHkpCiAgICAgICAgcmV0dXJuIHsgY2hhbmdlczogW3sgaW5zZXJ0OiBlNSwgZnJvbTogcjMuZnJvbSB9LCB7IGluc2VydDogdDQsIGZyb206IHIzLnRvIH1dLCBlZmZlY3RzOiBFMTAub2YocjMudG8gKyBlNS5sZW5ndGgpLCByYW5nZTogZzIucmFuZ2UocjMuYW5jaG9yICsgZTUubGVuZ3RoLCByMy5oZWFkICsgZTUubGVuZ3RoKSB9OwogICAgICBsZXQgbDcgPSBxMTMobjguZG9jLCByMy5oZWFkKTsKICAgICAgcmV0dXJuICFsNyB8fCAvXHMvLnRlc3QobDcpIHx8IGk0LmluZGV4T2YobDcpID4gLTEgPyB7IGNoYW5nZXM6IHsgaW5zZXJ0OiBlNSArIHQ0LCBmcm9tOiByMy5oZWFkIH0sIGVmZmVjdHM6IEUxMC5vZihyMy5oZWFkICsgZTUubGVuZ3RoKSwgcmFuZ2U6IGcyLmN1cnNvcihyMy5oZWFkICsgZTUubGVuZ3RoKSB9IDogeyByYW5nZTogbzQgPSByMyB9OwogICAgfSk7CiAgICByZXR1cm4gbzQgPyBudWxsIDogbjgudXBkYXRlKHM4LCB7IHNjcm9sbEludG9WaWV3OiB0cnVlLCB1c2VyRXZlbnQ6ICJpbnB1dC50eXBlIiB9KTsKICB9CiAgZnVuY3Rpb24gQnQ2KG44LCBlNSwgdDQpIHsKICAgIGxldCBpNCA9IG51bGwsIG80ID0gbjguc2VsZWN0aW9uLnJhbmdlcy5tYXAoKHM4KSA9PiBzOC5lbXB0eSAmJiBxMTMobjguZG9jLCBzOC5oZWFkKSA9PSB0NCA/IGcyLmN1cnNvcihzOC5oZWFkICsgdDQubGVuZ3RoKSA6IGk0ID0gczgpOwogICAgcmV0dXJuIGk0ID8gbnVsbCA6IG44LnVwZGF0ZSh7IHNlbGVjdGlvbjogZzIuY3JlYXRlKG80LCBuOC5zZWxlY3Rpb24ubWFpbkluZGV4KSwgc2Nyb2xsSW50b1ZpZXc6IHRydWUsIGVmZmVjdHM6IG44LnNlbGVjdGlvbi5yYW5nZXMubWFwKCh7IGZyb206IHM4IH0pID0+IGNlMTEub2YoczgpKSB9KTsKICB9CiAgZnVuY3Rpb24gRHQ4KG44LCBlNSwgdDQsIGk0KSB7CiAgICBsZXQgbzQgPSBpNC5zdHJpbmdQcmVmaXhlcyB8fCBMMTUuc3RyaW5nUHJlZml4ZXMsIHM4ID0gbnVsbCwgcjMgPSBuOC5jaGFuZ2VCeVJhbmdlKChsNykgPT4gewogICAgICBpZiAoIWw3LmVtcHR5KQogICAgICAgIHJldHVybiB7IGNoYW5nZXM6IFt7IGluc2VydDogZTUsIGZyb206IGw3LmZyb20gfSwgeyBpbnNlcnQ6IGU1LCBmcm9tOiBsNy50byB9XSwgZWZmZWN0czogRTEwLm9mKGw3LnRvICsgZTUubGVuZ3RoKSwgcmFuZ2U6IGcyLnJhbmdlKGw3LmFuY2hvciArIGU1Lmxlbmd0aCwgbDcuaGVhZCArIGU1Lmxlbmd0aCkgfTsKICAgICAgbGV0IGMxNyA9IGw3LmhlYWQsIGE0ID0gcTEzKG44LmRvYywgYzE3KSwgZjExOwogICAgICBpZiAoYTQgPT0gZTUpIHsKICAgICAgICBpZiAodmU5KG44LCBjMTcpKQogICAgICAgICAgcmV0dXJuIHsgY2hhbmdlczogeyBpbnNlcnQ6IGU1ICsgZTUsIGZyb206IGMxNyB9LCBlZmZlY3RzOiBFMTAub2YoYzE3ICsgZTUubGVuZ3RoKSwgcmFuZ2U6IGcyLmN1cnNvcihjMTcgKyBlNS5sZW5ndGgpIH07CiAgICAgICAgaWYgKCRlOChuOCwgYzE3KSkgewogICAgICAgICAgbGV0IHUxMSA9IHQ0ICYmIG44LnNsaWNlRG9jKGMxNywgYzE3ICsgZTUubGVuZ3RoICogMykgPT0gZTUgKyBlNSArIGU1OwogICAgICAgICAgcmV0dXJuIHsgcmFuZ2U6IGcyLmN1cnNvcihjMTcgKyBlNS5sZW5ndGggKiAodTExID8gMyA6IDEpKSwgZWZmZWN0czogY2UxMS5vZihjMTcpIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmICh0NCAmJiBuOC5zbGljZURvYyhjMTcgLSAyICogZTUubGVuZ3RoLCBjMTcpID09IGU1ICsgZTUgJiYgKGYxMSA9IENlMTUobjgsIGMxNyAtIDIgKiBlNS5sZW5ndGgsIG80KSkgPiAtMSAmJiB2ZTkobjgsIGYxMSkpCiAgICAgICAgICByZXR1cm4geyBjaGFuZ2VzOiB7IGluc2VydDogZTUgKyBlNSArIGU1ICsgZTUsIGZyb206IGMxNyB9LCBlZmZlY3RzOiBFMTAub2YoYzE3ICsgZTUubGVuZ3RoKSwgcmFuZ2U6IGcyLmN1cnNvcihjMTcgKyBlNS5sZW5ndGgpIH07CiAgICAgICAgaWYgKG44LmNoYXJDYXRlZ29yaXplcihjMTcpKGE0KSAhPSBGLldvcmQgJiYgQ2UxNShuOCwgYzE3LCBvNCkgPiAtMSAmJiAhTHQ5KG44LCBjMTcsIGU1LCBvNCkpCiAgICAgICAgICByZXR1cm4geyBjaGFuZ2VzOiB7IGluc2VydDogZTUgKyBlNSwgZnJvbTogYzE3IH0sIGVmZmVjdHM6IEUxMC5vZihjMTcgKyBlNS5sZW5ndGgpLCByYW5nZTogZzIuY3Vyc29yKGMxNyArIGU1Lmxlbmd0aCkgfTsKICAgICAgfQogICAgICByZXR1cm4geyByYW5nZTogczggPSBsNyB9OwogICAgfSk7CiAgICByZXR1cm4gczggPyBudWxsIDogbjgudXBkYXRlKHIzLCB7IHNjcm9sbEludG9WaWV3OiB0cnVlLCB1c2VyRXZlbnQ6ICJpbnB1dC50eXBlIiB9KTsKICB9CiAgZnVuY3Rpb24gdmU5KG44LCBlNSkgewogICAgbGV0IHQ0ID0gbTE0KG44KS5yZXNvbHZlSW5uZXIoZTUgKyAxKTsKICAgIHJldHVybiB0NC5wYXJlbnQgJiYgdDQuZnJvbSA9PSBlNTsKICB9CiAgZnVuY3Rpb24gTHQ5KG44LCBlNSwgdDQsIGk0KSB7CiAgICBsZXQgbzQgPSBtMTQobjgpLnJlc29sdmVJbm5lcihlNSwgLTEpLCBzOCA9IGk0LnJlZHVjZSgocjMsIGw3KSA9PiBNYXRoLm1heChyMywgbDcubGVuZ3RoKSwgMCk7CiAgICBmb3IgKGxldCByMyA9IDA7IHIzIDwgNTsgcjMrKykgewogICAgICBsZXQgbDcgPSBuOC5zbGljZURvYyhvNC5mcm9tLCBNYXRoLm1pbihvNC50bywgbzQuZnJvbSArIHQ0Lmxlbmd0aCArIHM4KSksIGMxNyA9IGw3LmluZGV4T2YodDQpOwogICAgICBpZiAoIWMxNyB8fCBjMTcgPiAtMSAmJiBpNC5pbmRleE9mKGw3LnNsaWNlKDAsIGMxNykpID4gLTEpIHsKICAgICAgICBsZXQgZjExID0gbzQuZmlyc3RDaGlsZDsKICAgICAgICBmb3IgKDsgZjExICYmIGYxMS5mcm9tID09IG80LmZyb20gJiYgZjExLnRvIC0gZjExLmZyb20gPiB0NC5sZW5ndGggKyBjMTc7ICkgewogICAgICAgICAgaWYgKG44LnNsaWNlRG9jKGYxMS50byAtIHQ0Lmxlbmd0aCwgZjExLnRvKSA9PSB0NCkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgZjExID0gZjExLmZpcnN0Q2hpbGQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGxldCBhNCA9IG80LnRvID09IGU1ICYmIG80LnBhcmVudDsKICAgICAgaWYgKCFhNCkKICAgICAgICBicmVhazsKICAgICAgbzQgPSBhNDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgZnVuY3Rpb24gQ2UxNShuOCwgZTUsIHQ0KSB7CiAgICBsZXQgaTQgPSBuOC5jaGFyQ2F0ZWdvcml6ZXIoZTUpOwogICAgaWYgKGk0KG44LnNsaWNlRG9jKGU1IC0gMSwgZTUpKSAhPSBGLldvcmQpCiAgICAgIHJldHVybiBlNTsKICAgIGZvciAobGV0IG80IG9mIHQ0KSB7CiAgICAgIGxldCBzOCA9IGU1IC0gbzQubGVuZ3RoOwogICAgICBpZiAobjguc2xpY2VEb2MoczgsIGU1KSA9PSBvNCAmJiBpNChuOC5zbGljZURvYyhzOCAtIDEsIHM4KSkgIT0gRi5Xb3JkKQogICAgICAgIHJldHVybiBzODsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CiAgdmFyIGt0NSA9IFt7IGtleTogIkN0cmwtU3BhY2UiLCBydW46IGF0NiB9LCB7IGtleTogIkVzY2FwZSIsIHJ1bjogZnQ1IH0sIHsga2V5OiAiQXJyb3dEb3duIiwgcnVuOiBVMTkodHJ1ZSkgfSwgeyBrZXk6ICJBcnJvd1VwIiwgcnVuOiBVMTkoZmFsc2UpIH0sIHsga2V5OiAiUGFnZURvd24iLCBydW46IFUxOSh0cnVlLCAicGFnZSIpIH0sIHsga2V5OiAiUGFnZVVwIiwgcnVuOiBVMTkoZmFsc2UsICJwYWdlIikgfSwgeyBrZXk6ICJFbnRlciIsIHJ1bjogY3Q5IH1dOwogIHZhciBXdDEwID0gbHQuaGlnaGVzdChici5jb21wdXRlTihbeDE0XSwgKG44KSA9PiBuOC5mYWNldCh4MTQpLmRlZmF1bHRLZXltYXAgPyBba3Q1XSA6IFtdKSk7CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2xhbmctamF2YXNjcmlwdEA2LjEuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9sYW5nLWphdmFzY3JpcHQuanMKICB2YXIgUjE5ID0gW1Z0OSgiZnVuY3Rpb24gJHtuYW1lfSgke3BhcmFtc30pIHtcbgkke31cbn0iLCB7IGxhYmVsOiAiZnVuY3Rpb24iLCBkZXRhaWw6ICJkZWZpbml0aW9uIiwgdHlwZTogImtleXdvcmQiIH0pLCBWdDkoImZvciAobGV0ICR7aW5kZXh9ID0gMDsgJHtpbmRleH0gPCAke2JvdW5kfTsgJHtpbmRleH0rKykge1xuCSR7fVxufSIsIHsgbGFiZWw6ICJmb3IiLCBkZXRhaWw6ICJsb29wIiwgdHlwZTogImtleXdvcmQiIH0pLCBWdDkoImZvciAobGV0ICR7bmFtZX0gb2YgJHtjb2xsZWN0aW9ufSkge1xuCSR7fVxufSIsIHsgbGFiZWw6ICJmb3IiLCBkZXRhaWw6ICJvZiBsb29wIiwgdHlwZTogImtleXdvcmQiIH0pLCBWdDkoImRvIHtcbgkke31cbn0gd2hpbGUgKCR7fSkiLCB7IGxhYmVsOiAiZG8iLCBkZXRhaWw6ICJsb29wIiwgdHlwZTogImtleXdvcmQiIH0pLCBWdDkoIndoaWxlICgke30pIHtcbgkke31cbn0iLCB7IGxhYmVsOiAid2hpbGUiLCBkZXRhaWw6ICJsb29wIiwgdHlwZTogImtleXdvcmQiIH0pLCBWdDkoYHRyeSB7CglcJHt9Cn0gY2F0Y2ggKFwke2Vycm9yfSkgewoJXCR7fQp9YCwgeyBsYWJlbDogInRyeSIsIGRldGFpbDogIi8gY2F0Y2ggYmxvY2siLCB0eXBlOiAia2V5d29yZCIgfSksIFZ0OSgiaWYgKCR7fSkge1xuCSR7fVxufSIsIHsgbGFiZWw6ICJpZiIsIGRldGFpbDogImJsb2NrIiwgdHlwZTogImtleXdvcmQiIH0pLCBWdDkoYGlmIChcJHt9KSB7CglcJHt9Cn0gZWxzZSB7CglcJHt9Cn1gLCB7IGxhYmVsOiAiaWYiLCBkZXRhaWw6ICIvIGVsc2UgYmxvY2siLCB0eXBlOiAia2V5d29yZCIgfSksIFZ0OShgY2xhc3MgXCR7bmFtZX0gewoJY29uc3RydWN0b3IoXCR7cGFyYW1zfSkgewoJCVwke30KCX0KfWAsIHsgbGFiZWw6ICJjbGFzcyIsIGRldGFpbDogImRlZmluaXRpb24iLCB0eXBlOiAia2V5d29yZCIgfSksIFZ0OSgnaW1wb3J0IHske25hbWVzfX0gZnJvbSAiJHttb2R1bGV9IlxuJHt9JywgeyBsYWJlbDogImltcG9ydCIsIGRldGFpbDogIm5hbWVkIiwgdHlwZTogImtleXdvcmQiIH0pLCBWdDkoJ2ltcG9ydCAke25hbWV9IGZyb20gIiR7bW9kdWxlfSJcbiR7fScsIHsgbGFiZWw6ICJpbXBvcnQiLCBkZXRhaWw6ICJkZWZhdWx0IiwgdHlwZTogImtleXdvcmQiIH0pXTsKICB2YXIgSTIxID0gbmV3IGJlNCgpOwogIHZhciBUMjIgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbIlNjcmlwdCIsICJCbG9jayIsICJGdW5jdGlvbkV4cHJlc3Npb24iLCAiRnVuY3Rpb25EZWNsYXJhdGlvbiIsICJBcnJvd0Z1bmN0aW9uIiwgIk1ldGhvZERlY2xhcmF0aW9uIiwgIkZvclN0YXRlbWVudCJdKTsKICBmdW5jdGlvbiBkMTAoZTUpIHsKICAgIHJldHVybiAodDQsIHIzKSA9PiB7CiAgICAgIGxldCBuOCA9IHQ0Lm5vZGUuZ2V0Q2hpbGQoIlZhcmlhYmxlRGVmaW5pdGlvbiIpOwogICAgICByZXR1cm4gbjggJiYgcjMobjgsIGU1KSwgdHJ1ZTsKICAgIH07CiAgfQogIHZhciBXMTIgPSBbIkZ1bmN0aW9uRGVjbGFyYXRpb24iXTsKICB2YXIgSDE1ID0geyBGdW5jdGlvbkRlY2xhcmF0aW9uOiBkMTAoImZ1bmN0aW9uIiksIENsYXNzRGVjbGFyYXRpb246IGQxMCgiY2xhc3MiKSwgQ2xhc3NFeHByZXNzaW9uOiAoKSA9PiB0cnVlLCBFbnVtRGVjbGFyYXRpb246IGQxMCgiY29uc3RhbnQiKSwgVHlwZUFsaWFzRGVjbGFyYXRpb246IGQxMCgidHlwZSIpLCBOYW1lc3BhY2VEZWNsYXJhdGlvbjogZDEwKCJuYW1lc3BhY2UiKSwgVmFyaWFibGVEZWZpbml0aW9uKGU1LCB0NCkgewogICAgZTUubWF0Y2hDb250ZXh0KFcxMikgfHwgdDQoZTUsICJ2YXJpYWJsZSIpOwogIH0sIFR5cGVEZWZpbml0aW9uKGU1LCB0NCkgewogICAgdDQoZTUsICJ0eXBlIik7CiAgfSwgX19wcm90b19fOiBudWxsIH07CiAgZnVuY3Rpb24geDE1KGU1LCB0NCkgewogICAgbGV0IHIzID0gSTIxLmdldCh0NCk7CiAgICBpZiAocjMpCiAgICAgIHJldHVybiByMzsKICAgIGxldCBuOCA9IFtdLCBvNCA9IHRydWU7CiAgICBmdW5jdGlvbiBhNChsNywgaTQpIHsKICAgICAgbGV0IGMxNyA9IGU1LnNsaWNlU3RyaW5nKGw3LmZyb20sIGw3LnRvKTsKICAgICAgbjgucHVzaCh7IGxhYmVsOiBjMTcsIHR5cGU6IGk0IH0pOwogICAgfQogICAgcmV0dXJuIHQ0LmN1cnNvcihBNC5JbmNsdWRlQW5vbnltb3VzKS5pdGVyYXRlKChsNykgPT4gewogICAgICBpZiAobzQpCiAgICAgICAgbzQgPSBmYWxzZTsKICAgICAgZWxzZSBpZiAobDcubmFtZSkgewogICAgICAgIGxldCBpNCA9IEgxNVtsNy5uYW1lXTsKICAgICAgICBpZiAoaTQgJiYgaTQobDcsIGE0KSB8fCBUMjIuaGFzKGw3Lm5hbWUpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGVsc2UgaWYgKGw3LnRvIC0gbDcuZnJvbSA+IDgxOTIpIHsKICAgICAgICBmb3IgKGxldCBpNCBvZiB4MTUoZTUsIGw3Lm5vZGUpKQogICAgICAgICAgbjgucHVzaChpNCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9KSwgSTIxLnNldCh0NCwgbjgpLCBuODsKICB9CiAgdmFyIGIxOCA9IC9eW1x3JFx4YTEtXHVmZmZmXVtcdyRcZFx4YTEtXHVmZmZmXSokLzsKICB2YXIgazEyID0gWyJUZW1wbGF0ZVN0cmluZyIsICJTdHJpbmciLCAiUmVnRXhwIiwgIkxpbmVDb21tZW50IiwgIkJsb2NrQ29tbWVudCIsICJWYXJpYWJsZURlZmluaXRpb24iLCAiVHlwZURlZmluaXRpb24iLCAiTGFiZWwiLCAiUHJvcGVydHlEZWZpbml0aW9uIiwgIlByb3BlcnR5TmFtZSIsICJQcml2YXRlUHJvcGVydHlEZWZpbml0aW9uIiwgIlByaXZhdGVQcm9wZXJ0eU5hbWUiXTsKICBmdW5jdGlvbiBaMTUoZTUpIHsKICAgIGxldCB0NCA9IG0xNChlNS5zdGF0ZSkucmVzb2x2ZUlubmVyKGU1LnBvcywgLTEpOwogICAgaWYgKGsxMi5pbmRleE9mKHQ0Lm5hbWUpID4gLTEpCiAgICAgIHJldHVybiBudWxsOwogICAgbGV0IHIzID0gdDQubmFtZSA9PSAiVmFyaWFibGVOYW1lIiB8fCB0NC50byAtIHQ0LmZyb20gPCAyMCAmJiBiMTgudGVzdChlNS5zdGF0ZS5zbGljZURvYyh0NC5mcm9tLCB0NC50bykpOwogICAgaWYgKCFyMyAmJiAhZTUuZXhwbGljaXQpCiAgICAgIHJldHVybiBudWxsOwogICAgbGV0IG44ID0gW107CiAgICBmb3IgKGxldCBvNCA9IHQ0OyBvNDsgbzQgPSBvNC5wYXJlbnQpCiAgICAgIFQyMi5oYXMobzQubmFtZSkgJiYgKG44ID0gbjguY29uY2F0KHgxNShlNS5zdGF0ZS5kb2MsIG80KSkpOwogICAgcmV0dXJuIHsgb3B0aW9uczogbjgsIGZyb206IHIzID8gdDQuZnJvbSA6IGU1LnBvcywgdmFsaWRGb3I6IGIxOCB9OwogIH0KICB2YXIgcDE1ID0gQjEzLmRlZmluZSh7IHBhcnNlcjogSjcuY29uZmlndXJlKHsgcHJvcHM6IFtyZTEzLmFkZCh7IElmU3RhdGVtZW50OiBRZTMoeyBleGNlcHQ6IC9eXHMqKHt8ZWxzZVxiKS8gfSksIFRyeVN0YXRlbWVudDogUWUzKHsgZXhjZXB0OiAvXlxzKih7fGNhdGNoXGJ8ZmluYWxseVxiKS8gfSksIExhYmVsZWRTdGF0ZW1lbnQ6IF9lMTAsIFN3aXRjaEJvZHk6IChlNSkgPT4gewogICAgbGV0IHQ0ID0gZTUudGV4dEFmdGVyLCByMyA9IC9eXHMqXH0vLnRlc3QodDQpLCBuOCA9IC9eXHMqKGNhc2V8ZGVmYXVsdClcYi8udGVzdCh0NCk7CiAgICByZXR1cm4gZTUuYmFzZUluZGVudCArIChyMyA/IDAgOiBuOCA/IDEgOiAyKSAqIGU1LnVuaXQ7CiAgfSwgQmxvY2s6IEtlNCh7IGNsb3Npbmc6ICJ9IiB9KSwgQXJyb3dGdW5jdGlvbjogKGU1KSA9PiBlNS5iYXNlSW5kZW50ICsgZTUudW5pdCwgIlRlbXBsYXRlU3RyaW5nIEJsb2NrQ29tbWVudCI6ICgpID0+IG51bGwsICJTdGF0ZW1lbnQgUHJvcGVydHkiOiBRZTMoeyBleGNlcHQ6IC9eey8gfSksIEpTWEVsZW1lbnQoZTUpIHsKICAgIGxldCB0NCA9IC9eXHMqPFwvLy50ZXN0KGU1LnRleHRBZnRlcik7CiAgICByZXR1cm4gZTUubGluZUluZGVudChlNS5ub2RlLmZyb20pICsgKHQ0ID8gMCA6IGU1LnVuaXQpOwogIH0sIEpTWEVzY2FwZShlNSkgewogICAgbGV0IHQ0ID0gL1xzKlx9Ly50ZXN0KGU1LnRleHRBZnRlcik7CiAgICByZXR1cm4gZTUubGluZUluZGVudChlNS5ub2RlLmZyb20pICsgKHQ0ID8gMCA6IGU1LnVuaXQpOwogIH0sICJKU1hPcGVuVGFnIEpTWFNlbGZDbG9zaW5nVGFnIihlNSkgewogICAgcmV0dXJuIGU1LmNvbHVtbihlNS5ub2RlLmZyb20pICsgZTUudW5pdDsKICB9IH0pLCBjZTEwLmFkZCh7ICJCbG9jayBDbGFzc0JvZHkgU3dpdGNoQm9keSBFbnVtQm9keSBPYmplY3RFeHByZXNzaW9uIEFycmF5RXhwcmVzc2lvbiI6IFllNSwgQmxvY2tDb21tZW50KGU1KSB7CiAgICByZXR1cm4geyBmcm9tOiBlNS5mcm9tICsgMiwgdG86IGU1LnRvIC0gMiB9OwogIH0gfSldIH0pLCBsYW5ndWFnZURhdGE6IHsgY2xvc2VCcmFja2V0czogeyBicmFja2V0czogWyIoIiwgIlsiLCAieyIsICInIiwgJyInLCAiYCJdIH0sIGNvbW1lbnRUb2tlbnM6IHsgbGluZTogIi8vIiwgYmxvY2s6IHsgb3BlbjogIi8qIiwgY2xvc2U6ICIqLyIgfSB9LCBpbmRlbnRPbklucHV0OiAvXlxzKig/OmNhc2UgfGRlZmF1bHQ6fFx7fFx9fDxcLykkLywgd29yZENoYXJzOiAiJCIgfSB9KTsKICB2YXIgRzE1ID0gcDE1LmNvbmZpZ3VyZSh7IGRpYWxlY3Q6ICJ0cyIgfSk7CiAgdmFyIEsxMyA9IHAxNS5jb25maWd1cmUoeyBkaWFsZWN0OiAianN4IiB9KTsKICB2YXIgUTEwID0gcDE1LmNvbmZpZ3VyZSh7IGRpYWxlY3Q6ICJqc3ggdHMiIH0pOwogIHZhciBVMjAgPSAiYnJlYWsgY2FzZSBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRlbGV0ZSBleHBvcnQgZXh0ZW5kcyBmYWxzZSBmaW5hbGx5IGluIGluc3RhbmNlb2YgbGV0IG5ldyByZXR1cm4gc3RhdGljIHN1cGVyIHN3aXRjaCB0aGlzIHRocm93IHRydWUgdHlwZW9mIHZhciB5aWVsZCIuc3BsaXQoIiAiKS5tYXAoKGU1KSA9PiAoeyBsYWJlbDogZTUsIHR5cGU6ICJrZXl3b3JkIiB9KSk7CiAgZnVuY3Rpb24gZmU5KGU1ID0ge30pIHsKICAgIGxldCB0NCA9IGU1LmpzeCA/IGU1LnR5cGVzY3JpcHQgPyBRMTAgOiBLMTMgOiBlNS50eXBlc2NyaXB0ID8gRzE1IDogcDE1OwogICAgcmV0dXJuIG5ldyBkdDYodDQsIFtwMTUuZGF0YS5vZih7IGF1dG9jb21wbGV0ZTogTnQ0KGsxMiwgR2U2KFIxOS5jb25jYXQoVTIwKSkpIH0pLCBwMTUuZGF0YS5vZih7IGF1dG9jb21wbGV0ZTogWjE1IH0pLCBlNS5qc3ggPyBlZTEyIDogW11dKTsKICB9CiAgZnVuY3Rpb24gRDE0KGU1LCB0NCwgcjMgPSBlNS5sZW5ndGgpIHsKICAgIGlmICghdDQpCiAgICAgIHJldHVybiAiIjsKICAgIGxldCBuOCA9IHQ0LmdldENoaWxkKCJKU1hJZGVudGlmaWVyIik7CiAgICByZXR1cm4gbjggPyBlNS5zbGljZVN0cmluZyhuOC5mcm9tLCBNYXRoLm1pbihuOC50bywgcjMpKSA6ICIiOwogIH0KICB2YXIgWTIzID0gdHlwZW9mIG5hdmlnYXRvciA9PSAib2JqZWN0IiAmJiAvQW5kcm9pZFxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBlZTEyID0gTTIuaW5wdXRIYW5kbGVyLm9mKChlNSwgdDQsIHIzLCBuOCkgPT4gewogICAgaWYgKChZMjMgPyBlNS5jb21wb3NpbmcgOiBlNS5jb21wb3NpdGlvblN0YXJ0ZWQpIHx8IGU1LnN0YXRlLnJlYWRPbmx5IHx8IHQ0ICE9IHIzIHx8IG44ICE9ICI+IiAmJiBuOCAhPSAiLyIgfHwgIXAxNS5pc0FjdGl2ZUF0KGU1LnN0YXRlLCB0NCwgLTEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgeyBzdGF0ZTogbzQgfSA9IGU1LCBhNCA9IG80LmNoYW5nZUJ5UmFuZ2UoKGw3KSA9PiB7CiAgICAgIHZhciBpNCwgYzE3LCBtMjM7CiAgICAgIGxldCB7IGhlYWQ6IHM4IH0gPSBsNywgdTExID0gbTE0KG80KS5yZXNvbHZlSW5uZXIoczgsIC0xKSwgeTE3OwogICAgICBpZiAodTExLm5hbWUgPT0gIkpTWFN0YXJ0VGFnIiAmJiAodTExID0gdTExLnBhcmVudCksIG44ID09ICI+IiAmJiB1MTEubmFtZSA9PSAiSlNYRnJhZ21lbnRUYWciKQogICAgICAgIHJldHVybiB7IHJhbmdlOiBnMi5jdXJzb3IoczggKyAxKSwgY2hhbmdlczogeyBmcm9tOiBzOCwgaW5zZXJ0OiAiPjw+IiB9IH07CiAgICAgIGlmIChuOCA9PSAiPiIgJiYgdTExLm5hbWUgPT0gIkpTWElkZW50aWZpZXIiKSB7CiAgICAgICAgaWYgKCgoYzE3ID0gKGk0ID0gdTExLnBhcmVudCkgPT09IG51bGwgfHwgaTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGk0Lmxhc3RDaGlsZCkgPT09IG51bGwgfHwgYzE3ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjMTcubmFtZSkgIT0gIkpTWEVuZFRhZyIgJiYgKHkxNyA9IEQxNChvNC5kb2MsIHUxMS5wYXJlbnQsIHM4KSkpCiAgICAgICAgICByZXR1cm4geyByYW5nZTogZzIuY3Vyc29yKHM4ICsgMSksIGNoYW5nZXM6IHsgZnJvbTogczgsIGluc2VydDogYD48LyR7eTE3fT5gIH0gfTsKICAgICAgfSBlbHNlIGlmIChuOCA9PSAiLyIgJiYgdTExLm5hbWUgPT0gIkpTWEZyYWdtZW50VGFnIikgewogICAgICAgIGxldCBnMTIgPSB1MTEucGFyZW50LCBoMTAgPSBnMTI/LnBhcmVudDsKICAgICAgICBpZiAoZzEyLmZyb20gPT0gczggLSAxICYmICgobTIzID0gaDEwLmxhc3RDaGlsZCkgPT09IG51bGwgfHwgbTIzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtMjMubmFtZSkgIT0gIkpTWEVuZFRhZyIgJiYgKHkxNyA9IEQxNChvNC5kb2MsIGgxMD8uZmlyc3RDaGlsZCwgczgpKSkgewogICAgICAgICAgbGV0IEMxNyA9IGAvJHt5MTd9PmA7CiAgICAgICAgICByZXR1cm4geyByYW5nZTogZzIuY3Vyc29yKHM4ICsgQzE3Lmxlbmd0aCksIGNoYW5nZXM6IHsgZnJvbTogczgsIGluc2VydDogQzE3IH0gfTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgcmFuZ2U6IGw3IH07CiAgICB9KTsKICAgIHJldHVybiBhNC5jaGFuZ2VzLmVtcHR5ID8gZmFsc2UgOiAoZTUuZGlzcGF0Y2goYTQsIHsgdXNlckV2ZW50OiAiaW5wdXQudHlwZSIsIHNjcm9sbEludG9WaWV3OiB0cnVlIH0pLCB0cnVlKTsKICB9KTsKCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvbGFuZy1odG1sQDYuMS4yL1gtWlM5QVkyOWtaVzFwY25KdmNpOXNZVzVuZFdGblpTeEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjRzUUd4bGVtVnlMMmhwWjJoc2FXZG9kQ3hBYkdWNlpYSXZiV0Z5YTJSdmQyNC9kZW5vL2xhbmctaHRtbC5qcwogIHZhciB2MTEgPSBbIl9ibGFuayIsICJfc2VsZiIsICJfdG9wIiwgIl9wYXJlbnQiXTsKICB2YXIgVDIzID0gWyJhc2NpaSIsICJ1dGYtOCIsICJ1dGYtMTYiLCAibGF0aW4xIiwgImxhdGluMSJdOwogIHZhciBrMTMgPSBbImdldCIsICJwb3N0IiwgInB1dCIsICJkZWxldGUiXTsKICB2YXIgQzExID0gWyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsICJ0ZXh0L3BsYWluIl07CiAgdmFyIG0xOCA9IFsidHJ1ZSIsICJmYWxzZSJdOwogIHZhciBsMyA9IHt9OwogIHZhciBIMTYgPSB7IGE6IHsgYXR0cnM6IHsgaHJlZjogbnVsbCwgcGluZzogbnVsbCwgdHlwZTogbnVsbCwgbWVkaWE6IG51bGwsIHRhcmdldDogdjExLCBocmVmbGFuZzogbnVsbCB9IH0sIGFiYnI6IGwzLCBhY3JvbnltOiBsMywgYWRkcmVzczogbDMsIGFwcGxldDogbDMsIGFyZWE6IHsgYXR0cnM6IHsgYWx0OiBudWxsLCBjb29yZHM6IG51bGwsIGhyZWY6IG51bGwsIHRhcmdldDogbnVsbCwgcGluZzogbnVsbCwgbWVkaWE6IG51bGwsIGhyZWZsYW5nOiBudWxsLCB0eXBlOiBudWxsLCBzaGFwZTogWyJkZWZhdWx0IiwgInJlY3QiLCAiY2lyY2xlIiwgInBvbHkiXSB9IH0sIGFydGljbGU6IGwzLCBhc2lkZTogbDMsIGF1ZGlvOiB7IGF0dHJzOiB7IHNyYzogbnVsbCwgbWVkaWFncm91cDogbnVsbCwgY3Jvc3NvcmlnaW46IFsiYW5vbnltb3VzIiwgInVzZS1jcmVkZW50aWFscyJdLCBwcmVsb2FkOiBbIm5vbmUiLCAibWV0YWRhdGEiLCAiYXV0byJdLCBhdXRvcGxheTogWyJhdXRvcGxheSJdLCBsb29wOiBbImxvb3AiXSwgY29udHJvbHM6IFsiY29udHJvbHMiXSB9IH0sIGI6IGwzLCBiYXNlOiB7IGF0dHJzOiB7IGhyZWY6IG51bGwsIHRhcmdldDogdjExIH0gfSwgYmFzZWZvbnQ6IGwzLCBiZGk6IGwzLCBiZG86IGwzLCBiaWc6IGwzLCBibG9ja3F1b3RlOiB7IGF0dHJzOiB7IGNpdGU6IG51bGwgfSB9LCBib2R5OiBsMywgYnI6IGwzLCBidXR0b246IHsgYXR0cnM6IHsgZm9ybTogbnVsbCwgZm9ybWFjdGlvbjogbnVsbCwgbmFtZTogbnVsbCwgdmFsdWU6IG51bGwsIGF1dG9mb2N1czogWyJhdXRvZm9jdXMiXSwgZGlzYWJsZWQ6IFsiYXV0b2ZvY3VzIl0sIGZvcm1lbmN0eXBlOiBDMTEsIGZvcm1tZXRob2Q6IGsxMywgZm9ybW5vdmFsaWRhdGU6IFsibm92YWxpZGF0ZSJdLCBmb3JtdGFyZ2V0OiB2MTEsIHR5cGU6IFsic3VibWl0IiwgInJlc2V0IiwgImJ1dHRvbiJdIH0gfSwgY2FudmFzOiB7IGF0dHJzOiB7IHdpZHRoOiBudWxsLCBoZWlnaHQ6IG51bGwgfSB9LCBjYXB0aW9uOiBsMywgY2VudGVyOiBsMywgY2l0ZTogbDMsIGNvZGU6IGwzLCBjb2w6IHsgYXR0cnM6IHsgc3BhbjogbnVsbCB9IH0sIGNvbGdyb3VwOiB7IGF0dHJzOiB7IHNwYW46IG51bGwgfSB9LCBjb21tYW5kOiB7IGF0dHJzOiB7IHR5cGU6IFsiY29tbWFuZCIsICJjaGVja2JveCIsICJyYWRpbyJdLCBsYWJlbDogbnVsbCwgaWNvbjogbnVsbCwgcmFkaW9ncm91cDogbnVsbCwgY29tbWFuZDogbnVsbCwgdGl0bGU6IG51bGwsIGRpc2FibGVkOiBbImRpc2FibGVkIl0sIGNoZWNrZWQ6IFsiY2hlY2tlZCJdIH0gfSwgZGF0YTogeyBhdHRyczogeyB2YWx1ZTogbnVsbCB9IH0sIGRhdGFncmlkOiB7IGF0dHJzOiB7IGRpc2FibGVkOiBbImRpc2FibGVkIl0sIG11bHRpcGxlOiBbIm11bHRpcGxlIl0gfSB9LCBkYXRhbGlzdDogeyBhdHRyczogeyBkYXRhOiBudWxsIH0gfSwgZGQ6IGwzLCBkZWw6IHsgYXR0cnM6IHsgY2l0ZTogbnVsbCwgZGF0ZXRpbWU6IG51bGwgfSB9LCBkZXRhaWxzOiB7IGF0dHJzOiB7IG9wZW46IFsib3BlbiJdIH0gfSwgZGZuOiBsMywgZGlyOiBsMywgZGl2OiBsMywgZGw6IGwzLCBkdDogbDMsIGVtOiBsMywgZW1iZWQ6IHsgYXR0cnM6IHsgc3JjOiBudWxsLCB0eXBlOiBudWxsLCB3aWR0aDogbnVsbCwgaGVpZ2h0OiBudWxsIH0gfSwgZXZlbnRzb3VyY2U6IHsgYXR0cnM6IHsgc3JjOiBudWxsIH0gfSwgZmllbGRzZXQ6IHsgYXR0cnM6IHsgZGlzYWJsZWQ6IFsiZGlzYWJsZWQiXSwgZm9ybTogbnVsbCwgbmFtZTogbnVsbCB9IH0sIGZpZ2NhcHRpb246IGwzLCBmaWd1cmU6IGwzLCBmb250OiBsMywgZm9vdGVyOiBsMywgZm9ybTogeyBhdHRyczogeyBhY3Rpb246IG51bGwsIG5hbWU6IG51bGwsICJhY2NlcHQtY2hhcnNldCI6IFQyMywgYXV0b2NvbXBsZXRlOiBbIm9uIiwgIm9mZiJdLCBlbmN0eXBlOiBDMTEsIG1ldGhvZDogazEzLCBub3ZhbGlkYXRlOiBbIm5vdmFsaWRhdGUiXSwgdGFyZ2V0OiB2MTEgfSB9LCBmcmFtZTogbDMsIGZyYW1lc2V0OiBsMywgaDE6IGwzLCBoMjogbDMsIGgzOiBsMywgaDQ6IGwzLCBoNTogbDMsIGg2OiBsMywgaGVhZDogeyBjaGlsZHJlbjogWyJ0aXRsZSIsICJiYXNlIiwgImxpbmsiLCAic3R5bGUiLCAibWV0YSIsICJzY3JpcHQiLCAibm9zY3JpcHQiLCAiY29tbWFuZCJdIH0sIGhlYWRlcjogbDMsIGhncm91cDogbDMsIGhyOiBsMywgaHRtbDogeyBhdHRyczogeyBtYW5pZmVzdDogbnVsbCB9IH0sIGk6IGwzLCBpZnJhbWU6IHsgYXR0cnM6IHsgc3JjOiBudWxsLCBzcmNkb2M6IG51bGwsIG5hbWU6IG51bGwsIHdpZHRoOiBudWxsLCBoZWlnaHQ6IG51bGwsIHNhbmRib3g6IFsiYWxsb3ctdG9wLW5hdmlnYXRpb24iLCAiYWxsb3ctc2FtZS1vcmlnaW4iLCAiYWxsb3ctZm9ybXMiLCAiYWxsb3ctc2NyaXB0cyJdLCBzZWFtbGVzczogWyJzZWFtbGVzcyJdIH0gfSwgaW1nOiB7IGF0dHJzOiB7IGFsdDogbnVsbCwgc3JjOiBudWxsLCBpc21hcDogbnVsbCwgdXNlbWFwOiBudWxsLCB3aWR0aDogbnVsbCwgaGVpZ2h0OiBudWxsLCBjcm9zc29yaWdpbjogWyJhbm9ueW1vdXMiLCAidXNlLWNyZWRlbnRpYWxzIl0gfSB9LCBpbnB1dDogeyBhdHRyczogeyBhbHQ6IG51bGwsIGRpcm5hbWU6IG51bGwsIGZvcm06IG51bGwsIGZvcm1hY3Rpb246IG51bGwsIGhlaWdodDogbnVsbCwgbGlzdDogbnVsbCwgbWF4OiBudWxsLCBtYXhsZW5ndGg6IG51bGwsIG1pbjogbnVsbCwgbmFtZTogbnVsbCwgcGF0dGVybjogbnVsbCwgcGxhY2Vob2xkZXI6IG51bGwsIHNpemU6IG51bGwsIHNyYzogbnVsbCwgc3RlcDogbnVsbCwgdmFsdWU6IG51bGwsIHdpZHRoOiBudWxsLCBhY2NlcHQ6IFsiYXVkaW8vKiIsICJ2aWRlby8qIiwgImltYWdlLyoiXSwgYXV0b2NvbXBsZXRlOiBbIm9uIiwgIm9mZiJdLCBhdXRvZm9jdXM6IFsiYXV0b2ZvY3VzIl0sIGNoZWNrZWQ6IFsiY2hlY2tlZCJdLCBkaXNhYmxlZDogWyJkaXNhYmxlZCJdLCBmb3JtZW5jdHlwZTogQzExLCBmb3JtbWV0aG9kOiBrMTMsIGZvcm1ub3ZhbGlkYXRlOiBbIm5vdmFsaWRhdGUiXSwgZm9ybXRhcmdldDogdjExLCBtdWx0aXBsZTogWyJtdWx0aXBsZSJdLCByZWFkb25seTogWyJyZWFkb25seSJdLCByZXF1aXJlZDogWyJyZXF1aXJlZCJdLCB0eXBlOiBbImhpZGRlbiIsICJ0ZXh0IiwgInNlYXJjaCIsICJ0ZWwiLCAidXJsIiwgImVtYWlsIiwgInBhc3N3b3JkIiwgImRhdGV0aW1lIiwgImRhdGUiLCAibW9udGgiLCAid2VlayIsICJ0aW1lIiwgImRhdGV0aW1lLWxvY2FsIiwgIm51bWJlciIsICJyYW5nZSIsICJjb2xvciIsICJjaGVja2JveCIsICJyYWRpbyIsICJmaWxlIiwgInN1Ym1pdCIsICJpbWFnZSIsICJyZXNldCIsICJidXR0b24iXSB9IH0sIGluczogeyBhdHRyczogeyBjaXRlOiBudWxsLCBkYXRldGltZTogbnVsbCB9IH0sIGtiZDogbDMsIGtleWdlbjogeyBhdHRyczogeyBjaGFsbGVuZ2U6IG51bGwsIGZvcm06IG51bGwsIG5hbWU6IG51bGwsIGF1dG9mb2N1czogWyJhdXRvZm9jdXMiXSwgZGlzYWJsZWQ6IFsiZGlzYWJsZWQiXSwga2V5dHlwZTogWyJSU0EiXSB9IH0sIGxhYmVsOiB7IGF0dHJzOiB7IGZvcjogbnVsbCwgZm9ybTogbnVsbCB9IH0sIGxlZ2VuZDogbDMsIGxpOiB7IGF0dHJzOiB7IHZhbHVlOiBudWxsIH0gfSwgbGluazogeyBhdHRyczogeyBocmVmOiBudWxsLCB0eXBlOiBudWxsLCBocmVmbGFuZzogbnVsbCwgbWVkaWE6IG51bGwsIHNpemVzOiBbImFsbCIsICIxNngxNiIsICIxNngxNiAzMngzMiIsICIxNngxNiAzMngzMiA2NHg2NCJdIH0gfSwgbWFwOiB7IGF0dHJzOiB7IG5hbWU6IG51bGwgfSB9LCBtYXJrOiBsMywgbWVudTogeyBhdHRyczogeyBsYWJlbDogbnVsbCwgdHlwZTogWyJsaXN0IiwgImNvbnRleHQiLCAidG9vbGJhciJdIH0gfSwgbWV0YTogeyBhdHRyczogeyBjb250ZW50OiBudWxsLCBjaGFyc2V0OiBUMjMsIG5hbWU6IFsidmlld3BvcnQiLCAiYXBwbGljYXRpb24tbmFtZSIsICJhdXRob3IiLCAiZGVzY3JpcHRpb24iLCAiZ2VuZXJhdG9yIiwgImtleXdvcmRzIl0sICJodHRwLWVxdWl2IjogWyJjb250ZW50LWxhbmd1YWdlIiwgImNvbnRlbnQtdHlwZSIsICJkZWZhdWx0LXN0eWxlIiwgInJlZnJlc2giXSB9IH0sIG1ldGVyOiB7IGF0dHJzOiB7IHZhbHVlOiBudWxsLCBtaW46IG51bGwsIGxvdzogbnVsbCwgaGlnaDogbnVsbCwgbWF4OiBudWxsLCBvcHRpbXVtOiBudWxsIH0gfSwgbmF2OiBsMywgbm9mcmFtZXM6IGwzLCBub3NjcmlwdDogbDMsIG9iamVjdDogeyBhdHRyczogeyBkYXRhOiBudWxsLCB0eXBlOiBudWxsLCBuYW1lOiBudWxsLCB1c2VtYXA6IG51bGwsIGZvcm06IG51bGwsIHdpZHRoOiBudWxsLCBoZWlnaHQ6IG51bGwsIHR5cGVtdXN0bWF0Y2g6IFsidHlwZW11c3RtYXRjaCJdIH0gfSwgb2w6IHsgYXR0cnM6IHsgcmV2ZXJzZWQ6IFsicmV2ZXJzZWQiXSwgc3RhcnQ6IG51bGwsIHR5cGU6IFsiMSIsICJhIiwgIkEiLCAiaSIsICJJIl0gfSwgY2hpbGRyZW46IFsibGkiLCAic2NyaXB0IiwgInRlbXBsYXRlIiwgInVsIiwgIm9sIl0gfSwgb3B0Z3JvdXA6IHsgYXR0cnM6IHsgZGlzYWJsZWQ6IFsiZGlzYWJsZWQiXSwgbGFiZWw6IG51bGwgfSB9LCBvcHRpb246IHsgYXR0cnM6IHsgZGlzYWJsZWQ6IFsiZGlzYWJsZWQiXSwgbGFiZWw6IG51bGwsIHNlbGVjdGVkOiBbInNlbGVjdGVkIl0sIHZhbHVlOiBudWxsIH0gfSwgb3V0cHV0OiB7IGF0dHJzOiB7IGZvcjogbnVsbCwgZm9ybTogbnVsbCwgbmFtZTogbnVsbCB9IH0sIHA6IGwzLCBwYXJhbTogeyBhdHRyczogeyBuYW1lOiBudWxsLCB2YWx1ZTogbnVsbCB9IH0sIHByZTogbDMsIHByb2dyZXNzOiB7IGF0dHJzOiB7IHZhbHVlOiBudWxsLCBtYXg6IG51bGwgfSB9LCBxOiB7IGF0dHJzOiB7IGNpdGU6IG51bGwgfSB9LCBycDogbDMsIHJ0OiBsMywgcnVieTogbDMsIHM6IGwzLCBzYW1wOiBsMywgc2NyaXB0OiB7IGF0dHJzOiB7IHR5cGU6IFsidGV4dC9qYXZhc2NyaXB0Il0sIHNyYzogbnVsbCwgYXN5bmM6IFsiYXN5bmMiXSwgZGVmZXI6IFsiZGVmZXIiXSwgY2hhcnNldDogVDIzIH0gfSwgc2VjdGlvbjogbDMsIHNlbGVjdDogeyBhdHRyczogeyBmb3JtOiBudWxsLCBuYW1lOiBudWxsLCBzaXplOiBudWxsLCBhdXRvZm9jdXM6IFsiYXV0b2ZvY3VzIl0sIGRpc2FibGVkOiBbImRpc2FibGVkIl0sIG11bHRpcGxlOiBbIm11bHRpcGxlIl0gfSB9LCBzbG90OiB7IGF0dHJzOiB7IG5hbWU6IG51bGwgfSB9LCBzbWFsbDogbDMsIHNvdXJjZTogeyBhdHRyczogeyBzcmM6IG51bGwsIHR5cGU6IG51bGwsIG1lZGlhOiBudWxsIH0gfSwgc3BhbjogbDMsIHN0cmlrZTogbDMsIHN0cm9uZzogbDMsIHN0eWxlOiB7IGF0dHJzOiB7IHR5cGU6IFsidGV4dC9jc3MiXSwgbWVkaWE6IG51bGwsIHNjb3BlZDogbnVsbCB9IH0sIHN1YjogbDMsIHN1bW1hcnk6IGwzLCBzdXA6IGwzLCB0YWJsZTogbDMsIHRib2R5OiBsMywgdGQ6IHsgYXR0cnM6IHsgY29sc3BhbjogbnVsbCwgcm93c3BhbjogbnVsbCwgaGVhZGVyczogbnVsbCB9IH0sIHRlbXBsYXRlOiBsMywgdGV4dGFyZWE6IHsgYXR0cnM6IHsgZGlybmFtZTogbnVsbCwgZm9ybTogbnVsbCwgbWF4bGVuZ3RoOiBudWxsLCBuYW1lOiBudWxsLCBwbGFjZWhvbGRlcjogbnVsbCwgcm93czogbnVsbCwgY29sczogbnVsbCwgYXV0b2ZvY3VzOiBbImF1dG9mb2N1cyJdLCBkaXNhYmxlZDogWyJkaXNhYmxlZCJdLCByZWFkb25seTogWyJyZWFkb25seSJdLCByZXF1aXJlZDogWyJyZXF1aXJlZCJdLCB3cmFwOiBbInNvZnQiLCAiaGFyZCJdIH0gfSwgdGZvb3Q6IGwzLCB0aDogeyBhdHRyczogeyBjb2xzcGFuOiBudWxsLCByb3dzcGFuOiBudWxsLCBoZWFkZXJzOiBudWxsLCBzY29wZTogWyJyb3ciLCAiY29sIiwgInJvd2dyb3VwIiwgImNvbGdyb3VwIl0gfSB9LCB0aGVhZDogbDMsIHRpbWU6IHsgYXR0cnM6IHsgZGF0ZXRpbWU6IG51bGwgfSB9LCB0aXRsZTogbDMsIHRyOiBsMywgdHJhY2s6IHsgYXR0cnM6IHsgc3JjOiBudWxsLCBsYWJlbDogbnVsbCwgZGVmYXVsdDogbnVsbCwga2luZDogWyJzdWJ0aXRsZXMiLCAiY2FwdGlvbnMiLCAiZGVzY3JpcHRpb25zIiwgImNoYXB0ZXJzIiwgIm1ldGFkYXRhIl0sIHNyY2xhbmc6IG51bGwgfSB9LCB0dDogbDMsIHU6IGwzLCB1bDogeyBjaGlsZHJlbjogWyJsaSIsICJzY3JpcHQiLCAidGVtcGxhdGUiLCAidWwiLCAib2wiXSB9LCB2YXI6IGwzLCB2aWRlbzogeyBhdHRyczogeyBzcmM6IG51bGwsIHBvc3RlcjogbnVsbCwgd2lkdGg6IG51bGwsIGhlaWdodDogbnVsbCwgY3Jvc3NvcmlnaW46IFsiYW5vbnltb3VzIiwgInVzZS1jcmVkZW50aWFscyJdLCBwcmVsb2FkOiBbImF1dG8iLCAibWV0YWRhdGEiLCAibm9uZSJdLCBhdXRvcGxheTogWyJhdXRvcGxheSJdLCBtZWRpYWdyb3VwOiBbIm1vdmllIl0sIG11dGVkOiBbIm11dGVkIl0sIGNvbnRyb2xzOiBbImNvbnRyb2xzIl0gfSB9LCB3YnI6IGwzIH07CiAgdmFyIEo4ID0geyBhY2Nlc3NrZXk6IG51bGwsIGNsYXNzOiBudWxsLCBjb250ZW50ZWRpdGFibGU6IG0xOCwgY29udGV4dG1lbnU6IG51bGwsIGRpcjogWyJsdHIiLCAicnRsIiwgImF1dG8iXSwgZHJhZ2dhYmxlOiBbInRydWUiLCAiZmFsc2UiLCAiYXV0byJdLCBkcm9wem9uZTogWyJjb3B5IiwgIm1vdmUiLCAibGluayIsICJzdHJpbmc6IiwgImZpbGU6Il0sIGhpZGRlbjogWyJoaWRkZW4iXSwgaWQ6IG51bGwsIGluZXJ0OiBbImluZXJ0Il0sIGl0ZW1pZDogbnVsbCwgaXRlbXByb3A6IG51bGwsIGl0ZW1yZWY6IG51bGwsIGl0ZW1zY29wZTogWyJpdGVtc2NvcGUiXSwgaXRlbXR5cGU6IG51bGwsIGxhbmc6IFsiYXIiLCAiYm4iLCAiZGUiLCAiZW4tR0IiLCAiZW4tVVMiLCAiZXMiLCAiZnIiLCAiaGkiLCAiaWQiLCAiamEiLCAicGEiLCAicHQiLCAicnUiLCAidHIiLCAiemgiXSwgc3BlbGxjaGVjazogbTE4LCBhdXRvY29ycmVjdDogbTE4LCBhdXRvY2FwaXRhbGl6ZTogbTE4LCBzdHlsZTogbnVsbCwgdGFiaW5kZXg6IG51bGwsIHRpdGxlOiBudWxsLCB0cmFuc2xhdGU6IFsieWVzIiwgIm5vIl0sIG9uY2xpY2s6IG51bGwsIHJlbDogWyJzdHlsZXNoZWV0IiwgImFsdGVybmF0ZSIsICJhdXRob3IiLCAiYm9va21hcmsiLCAiaGVscCIsICJsaWNlbnNlIiwgIm5leHQiLCAibm9mb2xsb3ciLCAibm9yZWZlcnJlciIsICJwcmVmZXRjaCIsICJwcmV2IiwgInNlYXJjaCIsICJ0YWciXSwgcm9sZTogImFsZXJ0IGFwcGxpY2F0aW9uIGFydGljbGUgYmFubmVyIGJ1dHRvbiBjZWxsIGNoZWNrYm94IGNvbXBsZW1lbnRhcnkgY29udGVudGluZm8gZGlhbG9nIGRvY3VtZW50IGZlZWQgZmlndXJlIGZvcm0gZ3JpZCBncmlkY2VsbCBoZWFkaW5nIGltZyBsaXN0IGxpc3Rib3ggbGlzdGl0ZW0gbWFpbiBuYXZpZ2F0aW9uIHJlZ2lvbiByb3cgcm93Z3JvdXAgc2VhcmNoIHN3aXRjaCB0YWIgdGFibGUgdGFicGFuZWwgdGV4dGJveCB0aW1lciIuc3BsaXQoIiAiKSwgImFyaWEtYWN0aXZlZGVzY2VuZGFudCI6IG51bGwsICJhcmlhLWF0b21pYyI6IG0xOCwgImFyaWEtYXV0b2NvbXBsZXRlIjogWyJpbmxpbmUiLCAibGlzdCIsICJib3RoIiwgIm5vbmUiXSwgImFyaWEtYnVzeSI6IG0xOCwgImFyaWEtY2hlY2tlZCI6IFsidHJ1ZSIsICJmYWxzZSIsICJtaXhlZCIsICJ1bmRlZmluZWQiXSwgImFyaWEtY29udHJvbHMiOiBudWxsLCAiYXJpYS1kZXNjcmliZWRieSI6IG51bGwsICJhcmlhLWRpc2FibGVkIjogbTE4LCAiYXJpYS1kcm9wZWZmZWN0IjogbnVsbCwgImFyaWEtZXhwYW5kZWQiOiBbInRydWUiLCAiZmFsc2UiLCAidW5kZWZpbmVkIl0sICJhcmlhLWZsb3d0byI6IG51bGwsICJhcmlhLWdyYWJiZWQiOiBbInRydWUiLCAiZmFsc2UiLCAidW5kZWZpbmVkIl0sICJhcmlhLWhhc3BvcHVwIjogbTE4LCAiYXJpYS1oaWRkZW4iOiBtMTgsICJhcmlhLWludmFsaWQiOiBbInRydWUiLCAiZmFsc2UiLCAiZ3JhbW1hciIsICJzcGVsbGluZyJdLCAiYXJpYS1sYWJlbCI6IG51bGwsICJhcmlhLWxhYmVsbGVkYnkiOiBudWxsLCAiYXJpYS1sZXZlbCI6IG51bGwsICJhcmlhLWxpdmUiOiBbIm9mZiIsICJwb2xpdGUiLCAiYXNzZXJ0aXZlIl0sICJhcmlhLW11bHRpbGluZSI6IG0xOCwgImFyaWEtbXVsdGlzZWxlY3RhYmxlIjogbTE4LCAiYXJpYS1vd25zIjogbnVsbCwgImFyaWEtcG9zaW5zZXQiOiBudWxsLCAiYXJpYS1wcmVzc2VkIjogWyJ0cnVlIiwgImZhbHNlIiwgIm1peGVkIiwgInVuZGVmaW5lZCJdLCAiYXJpYS1yZWFkb25seSI6IG0xOCwgImFyaWEtcmVsZXZhbnQiOiBudWxsLCAiYXJpYS1yZXF1aXJlZCI6IG0xOCwgImFyaWEtc2VsZWN0ZWQiOiBbInRydWUiLCAiZmFsc2UiLCAidW5kZWZpbmVkIl0sICJhcmlhLXNldHNpemUiOiBudWxsLCAiYXJpYS1zb3J0IjogWyJhc2NlbmRpbmciLCAiZGVzY2VuZGluZyIsICJub25lIiwgIm90aGVyIl0sICJhcmlhLXZhbHVlbWF4IjogbnVsbCwgImFyaWEtdmFsdWVtaW4iOiBudWxsLCAiYXJpYS12YWx1ZW5vdyI6IG51bGwsICJhcmlhLXZhbHVldGV4dCI6IG51bGwgfTsKICB2YXIgaDUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihhNCwgbjgpIHsKICAgICAgdGhpcy50YWdzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBIMTYpLCBhNCksIHRoaXMuZ2xvYmFsQXR0cnMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIEo4KSwgbjgpLCB0aGlzLmFsbFRhZ3MgPSBPYmplY3Qua2V5cyh0aGlzLnRhZ3MpLCB0aGlzLmdsb2JhbEF0dHJOYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuZ2xvYmFsQXR0cnMpOwogICAgfQogIH07CiAgaDUuZGVmYXVsdCA9IG5ldyBoNSgpOwogIGZ1bmN0aW9uIHkxMyhlNSwgYTQsIG44ID0gZTUubGVuZ3RoKSB7CiAgICBpZiAoIWE0KQogICAgICByZXR1cm4gIiI7CiAgICBsZXQgdDQgPSBhNC5maXJzdENoaWxkLCBvNCA9IHQ0ICYmIHQ0LmdldENoaWxkKCJUYWdOYW1lIik7CiAgICByZXR1cm4gbzQgPyBlNS5zbGljZVN0cmluZyhvNC5mcm9tLCBNYXRoLm1pbihvNC50bywgbjgpKSA6ICIiOwogIH0KICBmdW5jdGlvbiB3MTgoZTUsIGE0ID0gZmFsc2UpIHsKICAgIGZvciAobGV0IG44ID0gZTUucGFyZW50OyBuODsgbjggPSBuOC5wYXJlbnQpCiAgICAgIGlmIChuOC5uYW1lID09ICJFbGVtZW50IikKICAgICAgICBpZiAoYTQpCiAgICAgICAgICBhNCA9IGZhbHNlOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBuODsKICAgIHJldHVybiBudWxsOwogIH0KICBmdW5jdGlvbiBxMTQoZTUsIGE0LCBuOCkgewogICAgbGV0IHQ0ID0gbjgudGFnc1t5MTMoZTUsIHcxOChhNCwgdHJ1ZSkpXTsKICAgIHJldHVybiB0ND8uY2hpbGRyZW4gfHwgbjguYWxsVGFnczsKICB9CiAgZnVuY3Rpb24gQTE0KGU1LCBhNCkgewogICAgbGV0IG44ID0gW107CiAgICBmb3IgKGxldCB0NCA9IGE0OyB0NCA9IHcxOCh0NCk7ICkgewogICAgICBsZXQgbzQgPSB5MTMoZTUsIHQ0KTsKICAgICAgaWYgKG80ICYmIHQ0Lmxhc3RDaGlsZC5uYW1lID09ICJDbG9zZVRhZyIpCiAgICAgICAgYnJlYWs7CiAgICAgIG80ICYmIG44LmluZGV4T2YobzQpIDwgMCAmJiAoYTQubmFtZSA9PSAiRW5kVGFnIiB8fCBhNC5mcm9tID49IHQ0LmZpcnN0Q2hpbGQudG8pICYmIG44LnB1c2gobzQpOwogICAgfQogICAgcmV0dXJuIG44OwogIH0KICB2YXIgSTIyID0gL15bOlwtXC5cd1x1MDBiNy1cdWZmZmZdKiQvOwogIGZ1bmN0aW9uIE8xMChlNSwgYTQsIG44LCB0NCwgbzQpIHsKICAgIGxldCByMyA9IC9ccyo+Ly50ZXN0KGU1LnNsaWNlRG9jKG80LCBvNCArIDUpKSA/ICIiIDogIj4iOwogICAgcmV0dXJuIHsgZnJvbTogdDQsIHRvOiBvNCwgb3B0aW9uczogcTE0KGU1LmRvYywgbjgsIGE0KS5tYXAoKHM4KSA9PiAoeyBsYWJlbDogczgsIHR5cGU6ICJ0eXBlIiB9KSkuY29uY2F0KEExNChlNS5kb2MsIG44KS5tYXAoKHM4LCBjMTcpID0+ICh7IGxhYmVsOiAiLyIgKyBzOCwgYXBwbHk6ICIvIiArIHM4ICsgcjMsIHR5cGU6ICJ0eXBlIiwgYm9vc3Q6IDk5IC0gYzE3IH0pKSksIHZhbGlkRm9yOiAvXlwvP1s6XC1cLlx3XHUwMGI3LVx1ZmZmZl0qJC8gfTsKICB9CiAgZnVuY3Rpb24gRTExKGU1LCBhNCwgbjgsIHQ0KSB7CiAgICBsZXQgbzQgPSAvXHMqPi8udGVzdChlNS5zbGljZURvYyh0NCwgdDQgKyA1KSkgPyAiIiA6ICI+IjsKICAgIHJldHVybiB7IGZyb206IG44LCB0bzogdDQsIG9wdGlvbnM6IEExNChlNS5kb2MsIGE0KS5tYXAoKHIzLCBzOCkgPT4gKHsgbGFiZWw6IHIzLCBhcHBseTogcjMgKyBvNCwgdHlwZTogInR5cGUiLCBib29zdDogOTkgLSBzOCB9KSksIHZhbGlkRm9yOiBJMjIgfTsKICB9CiAgZnVuY3Rpb24gSzE0KGU1LCBhNCwgbjgsIHQ0KSB7CiAgICBsZXQgbzQgPSBbXSwgcjMgPSAwOwogICAgZm9yIChsZXQgczggb2YgcTE0KGU1LmRvYywgbjgsIGE0KSkKICAgICAgbzQucHVzaCh7IGxhYmVsOiAiPCIgKyBzOCwgdHlwZTogInR5cGUiIH0pOwogICAgZm9yIChsZXQgczggb2YgQTE0KGU1LmRvYywgbjgpKQogICAgICBvNC5wdXNoKHsgbGFiZWw6ICI8LyIgKyBzOCArICI+IiwgdHlwZTogInR5cGUiLCBib29zdDogOTkgLSByMysrIH0pOwogICAgcmV0dXJuIHsgZnJvbTogdDQsIHRvOiB0NCwgb3B0aW9uczogbzQsIHZhbGlkRm9yOiAvXjxcLz9bOlwtXC5cd1x1MDBiNy1cdWZmZmZdKiQvIH07CiAgfQogIGZ1bmN0aW9uIFExMShlNSwgYTQsIG44LCB0NCwgbzQpIHsKICAgIGxldCByMyA9IHcxOChuOCksIHM4ID0gcjMgPyBhNC50YWdzW3kxMyhlNS5kb2MsIHIzKV0gOiBudWxsLCBjMTcgPSBzOCAmJiBzOC5hdHRycyA/IE9iamVjdC5rZXlzKHM4LmF0dHJzKS5jb25jYXQoYTQuZ2xvYmFsQXR0ck5hbWVzKSA6IGE0Lmdsb2JhbEF0dHJOYW1lczsKICAgIHJldHVybiB7IGZyb206IHQ0LCB0bzogbzQsIG9wdGlvbnM6IGMxNy5tYXAoKGQxNSkgPT4gKHsgbGFiZWw6IGQxNSwgdHlwZTogInByb3BlcnR5IiB9KSksIHZhbGlkRm9yOiBJMjIgfTsKICB9CiAgZnVuY3Rpb24gWDE4KGU1LCBhNCwgbjgsIHQ0LCBvNCkgewogICAgdmFyIHIzOwogICAgbGV0IHM4ID0gKHIzID0gbjgucGFyZW50KSA9PT0gbnVsbCB8fCByMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcjMuZ2V0Q2hpbGQoIkF0dHJpYnV0ZU5hbWUiKSwgYzE3ID0gW10sIGQxNTsKICAgIGlmIChzOCkgewogICAgICBsZXQgYjI1ID0gZTUuc2xpY2VEb2MoczguZnJvbSwgczgudG8pLCB1MTEgPSBhNC5nbG9iYWxBdHRyc1tiMjVdOwogICAgICBpZiAoIXUxMSkgewogICAgICAgIGxldCBpNCA9IHcxOChuOCksIHAxOCA9IGk0ID8gYTQudGFnc1t5MTMoZTUuZG9jLCBpNCldIDogbnVsbDsKICAgICAgICB1MTEgPSBwMTg/LmF0dHJzICYmIHAxOC5hdHRyc1tiMjVdOwogICAgICB9CiAgICAgIGlmICh1MTEpIHsKICAgICAgICBsZXQgaTQgPSBlNS5zbGljZURvYyh0NCwgbzQpLnRvTG93ZXJDYXNlKCksIHAxOCA9ICciJywgZjExID0gJyInOwogICAgICAgIC9eWyciXS8udGVzdChpNCkgPyAoZDE1ID0gaTRbMF0gPT0gJyInID8gL15bXiJdKiQvIDogL15bXiddKiQvLCBwMTggPSAiIiwgZjExID0gZTUuc2xpY2VEb2MobzQsIG80ICsgMSkgPT0gaTRbMF0gPyAiIiA6IGk0WzBdLCBpNCA9IGk0LnNsaWNlKDEpLCB0NCsrKSA6IGQxNSA9IC9eW15cczw+PSciXSokLzsKICAgICAgICBmb3IgKGxldCBnMTIgb2YgdTExKQogICAgICAgICAgYzE3LnB1c2goeyBsYWJlbDogZzEyLCBhcHBseTogcDE4ICsgZzEyICsgZjExLCB0eXBlOiAiY29uc3RhbnQiIH0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4geyBmcm9tOiB0NCwgdG86IG80LCBvcHRpb25zOiBjMTcsIHZhbGlkRm9yOiBkMTUgfTsKICB9CiAgZnVuY3Rpb24gXzIwKGU1LCBhNCkgewogICAgbGV0IHsgc3RhdGU6IG44LCBwb3M6IHQ0IH0gPSBhNCwgbzQgPSBtMTQobjgpLnJlc29sdmVJbm5lcih0NCksIHIzID0gbzQucmVzb2x2ZSh0NCwgLTEpOwogICAgZm9yIChsZXQgczggPSB0NCwgYzE3OyBvNCA9PSByMyAmJiAoYzE3ID0gcjMuY2hpbGRCZWZvcmUoczgpKTsgKSB7CiAgICAgIGxldCBkMTUgPSBjMTcubGFzdENoaWxkOwogICAgICBpZiAoIWQxNSB8fCAhZDE1LnR5cGUuaXNFcnJvciB8fCBkMTUuZnJvbSA8IGQxNS50bykKICAgICAgICBicmVhazsKICAgICAgbzQgPSByMyA9IGMxNywgczggPSBkMTUuZnJvbTsKICAgIH0KICAgIHJldHVybiByMy5uYW1lID09ICJUYWdOYW1lIiA/IHIzLnBhcmVudCAmJiAvQ2xvc2VUYWckLy50ZXN0KHIzLnBhcmVudC5uYW1lKSA/IEUxMShuOCwgcjMsIHIzLmZyb20sIHQ0KSA6IE8xMChuOCwgZTUsIHIzLCByMy5mcm9tLCB0NCkgOiByMy5uYW1lID09ICJTdGFydFRhZyIgPyBPMTAobjgsIGU1LCByMywgdDQsIHQ0KSA6IHIzLm5hbWUgPT0gIlN0YXJ0Q2xvc2VUYWciIHx8IHIzLm5hbWUgPT0gIkluY29tcGxldGVDbG9zZVRhZyIgPyBFMTEobjgsIHIzLCB0NCwgdDQpIDogYTQuZXhwbGljaXQgJiYgKHIzLm5hbWUgPT0gIk9wZW5UYWciIHx8IHIzLm5hbWUgPT0gIlNlbGZDbG9zaW5nVGFnIikgfHwgcjMubmFtZSA9PSAiQXR0cmlidXRlTmFtZSIgPyBRMTEobjgsIGU1LCByMywgcjMubmFtZSA9PSAiQXR0cmlidXRlTmFtZSIgPyByMy5mcm9tIDogdDQsIHQ0KSA6IHIzLm5hbWUgPT0gIklzIiB8fCByMy5uYW1lID09ICJBdHRyaWJ1dGVWYWx1ZSIgfHwgcjMubmFtZSA9PSAiVW5xdW90ZWRBdHRyaWJ1dGVWYWx1ZSIgPyBYMTgobjgsIGU1LCByMywgcjMubmFtZSA9PSAiSXMiID8gdDQgOiByMy5mcm9tLCB0NCkgOiBhNC5leHBsaWNpdCAmJiAobzQubmFtZSA9PSAiRWxlbWVudCIgfHwgbzQubmFtZSA9PSAiVGV4dCIgfHwgbzQubmFtZSA9PSAiRG9jdW1lbnQiKSA/IEsxNChuOCwgZTUsIHIzLCB0NCkgOiBudWxsOwogIH0KICBmdW5jdGlvbiBZMjQoZTUpIHsKICAgIGxldCB7IGV4dHJhVGFnczogYTQsIGV4dHJhR2xvYmFsQXR0cmlidXRlczogbjggfSA9IGU1LCB0NCA9IG44IHx8IGE0ID8gbmV3IGg1KGE0LCBuOCkgOiBoNS5kZWZhdWx0OwogICAgcmV0dXJuIChvNCkgPT4gXzIwKHQ0LCBvNCk7CiAgfQogIHZhciB4MTYgPSBCMTMuZGVmaW5lKHsgcGFyc2VyOiBsZTExLmNvbmZpZ3VyZSh7IHByb3BzOiBbcmUxMy5hZGQoeyBFbGVtZW50KGU1KSB7CiAgICBsZXQgYTQgPSAvXihccyopKDxcLyk/Ly5leGVjKGU1LnRleHRBZnRlcik7CiAgICByZXR1cm4gZTUubm9kZS50byA8PSBlNS5wb3MgKyBhNFswXS5sZW5ndGggPyBlNS5jb250aW51ZSgpIDogZTUubGluZUluZGVudChlNS5ub2RlLmZyb20pICsgKGE0WzJdID8gMCA6IGU1LnVuaXQpOwogIH0sICJPcGVuVGFnIENsb3NlVGFnIFNlbGZDbG9zaW5nVGFnIihlNSkgewogICAgcmV0dXJuIGU1LmNvbHVtbihlNS5ub2RlLmZyb20pICsgZTUudW5pdDsKICB9LCBEb2N1bWVudChlNSkgewogICAgaWYgKGU1LnBvcyArIC9ccyovLmV4ZWMoZTUudGV4dEFmdGVyKVswXS5sZW5ndGggPCBlNS5ub2RlLnRvKQogICAgICByZXR1cm4gZTUuY29udGludWUoKTsKICAgIGxldCBhNCA9IG51bGwsIG44OwogICAgZm9yIChsZXQgdDQgPSBlNS5ub2RlOyA7ICkgewogICAgICBsZXQgbzQgPSB0NC5sYXN0Q2hpbGQ7CiAgICAgIGlmICghbzQgfHwgbzQubmFtZSAhPSAiRWxlbWVudCIgfHwgbzQudG8gIT0gdDQudG8pCiAgICAgICAgYnJlYWs7CiAgICAgIGE0ID0gdDQgPSBvNDsKICAgIH0KICAgIHJldHVybiBhNCAmJiAhKChuOCA9IGE0Lmxhc3RDaGlsZCkgJiYgKG44Lm5hbWUgPT0gIkNsb3NlVGFnIiB8fCBuOC5uYW1lID09ICJTZWxmQ2xvc2luZ1RhZyIpKSA/IGU1LmxpbmVJbmRlbnQoYTQuZnJvbSkgKyBlNS51bml0IDogbnVsbDsKICB9IH0pLCBjZTEwLmFkZCh7IEVsZW1lbnQoZTUpIHsKICAgIGxldCBhNCA9IGU1LmZpcnN0Q2hpbGQsIG44ID0gZTUubGFzdENoaWxkOwogICAgcmV0dXJuICFhNCB8fCBhNC5uYW1lICE9ICJPcGVuVGFnIiA/IG51bGwgOiB7IGZyb206IGE0LnRvLCB0bzogbjgubmFtZSA9PSAiQ2xvc2VUYWciID8gbjguZnJvbSA6IGU1LnRvIH07CiAgfSB9KV0sIHdyYXA6IHhlMTAoW3sgdGFnOiAic2NyaXB0IiwgYXR0cnMoZTUpIHsKICAgIHJldHVybiAhZTUudHlwZSB8fCAvXig/OnRleHR8YXBwbGljYXRpb24pXC8oPzp4LSk/KD86amF2YXxlY21hKXNjcmlwdCR8Xm1vZHVsZSR8XiQvaS50ZXN0KGU1LnR5cGUpOwogIH0sIHBhcnNlcjogcDE1LnBhcnNlciB9LCB7IHRhZzogInN0eWxlIiwgYXR0cnMoZTUpIHsKICAgIHJldHVybiAoIWU1LmxhbmcgfHwgZTUubGFuZyA9PSAiY3NzIikgJiYgKCFlNS50eXBlIHx8IC9eKHRleHRcLyk/KHgtKT8oc3R5bGVzaGVldHxjc3MpJC9pLnRlc3QoZTUudHlwZSkpOwogIH0sIHBhcnNlcjogcDEyLnBhcnNlciB9XSkgfSksIGxhbmd1YWdlRGF0YTogeyBjb21tZW50VG9rZW5zOiB7IGJsb2NrOiB7IG9wZW46ICI8IS0tIiwgY2xvc2U6ICItLT4iIH0gfSwgaW5kZW50T25JbnB1dDogL15ccyo8XC9cdytcVyQvLCB3b3JkQ2hhcnM6ICItLl8iIH0gfSk7CiAgZnVuY3Rpb24gc2UxNChlNSA9IHt9KSB7CiAgICBsZXQgYTQgPSB4MTY7CiAgICByZXR1cm4gZTUubWF0Y2hDbG9zaW5nVGFncyA9PT0gZmFsc2UgJiYgKGE0ID0gYTQuY29uZmlndXJlKHsgZGlhbGVjdDogIm5vTWF0Y2giIH0pKSwgbmV3IGR0NihhNCwgW3gxNi5kYXRhLm9mKHsgYXV0b2NvbXBsZXRlOiBZMjQoZTUpIH0pLCBlNS5hdXRvQ2xvc2VUYWdzICE9PSBmYWxzZSA/IFoxNiA6IFtdLCBmZTkoKS5zdXBwb3J0LCBGMTYoKS5zdXBwb3J0XSk7CiAgfQogIHZhciBaMTYgPSBNMi5pbnB1dEhhbmRsZXIub2YoKGU1LCBhNCwgbjgsIHQ0KSA9PiB7CiAgICBpZiAoZTUuY29tcG9zaW5nIHx8IGU1LnN0YXRlLnJlYWRPbmx5IHx8IGE0ICE9IG44IHx8IHQ0ICE9ICI+IiAmJiB0NCAhPSAiLyIgfHwgIXgxNi5pc0FjdGl2ZUF0KGU1LnN0YXRlLCBhNCwgLTEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgeyBzdGF0ZTogbzQgfSA9IGU1LCByMyA9IG80LmNoYW5nZUJ5UmFuZ2UoKHM4KSA9PiB7CiAgICAgIHZhciBjMTcsIGQxNSwgYjI1OwogICAgICBsZXQgeyBoZWFkOiB1MTEgfSA9IHM4LCBpNCA9IG0xNChvNCkucmVzb2x2ZUlubmVyKHUxMSwgLTEpLCBwMTg7CiAgICAgIGlmICgoaTQubmFtZSA9PSAiVGFnTmFtZSIgfHwgaTQubmFtZSA9PSAiU3RhcnRUYWciKSAmJiAoaTQgPSBpNC5wYXJlbnQpLCB0NCA9PSAiPiIgJiYgaTQubmFtZSA9PSAiT3BlblRhZyIpIHsKICAgICAgICBpZiAoKChkMTUgPSAoYzE3ID0gaTQucGFyZW50KSA9PT0gbnVsbCB8fCBjMTcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGMxNy5sYXN0Q2hpbGQpID09PSBudWxsIHx8IGQxNSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZDE1Lm5hbWUpICE9ICJDbG9zZVRhZyIgJiYgKHAxOCA9IHkxMyhvNC5kb2MsIGk0LnBhcmVudCwgdTExKSkpIHsKICAgICAgICAgIGxldCBmMTEgPSBlNS5zdGF0ZS5kb2Muc2xpY2VTdHJpbmcodTExLCB1MTEgKyAxKSA9PT0gIj4iLCBnMTIgPSBgJHtmMTEgPyAiIiA6ICI+In08LyR7cDE4fT5gOwogICAgICAgICAgcmV0dXJuIHsgcmFuZ2U6IGcyLmN1cnNvcih1MTEgKyAxKSwgY2hhbmdlczogeyBmcm9tOiB1MTEgKyAoZjExID8gMSA6IDApLCBpbnNlcnQ6IGcxMiB9IH07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHQ0ID09ICIvIiAmJiBpNC5uYW1lID09ICJPcGVuVGFnIikgewogICAgICAgIGxldCBmMTEgPSBpNC5wYXJlbnQsIGcxMiA9IGYxMT8ucGFyZW50OwogICAgICAgIGlmIChmMTEuZnJvbSA9PSB1MTEgLSAxICYmICgoYjI1ID0gZzEyLmxhc3RDaGlsZCkgPT09IG51bGwgfHwgYjI1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBiMjUubmFtZSkgIT0gIkNsb3NlVGFnIiAmJiAocDE4ID0geTEzKG80LmRvYywgZzEyLCB1MTEpKSkgewogICAgICAgICAgbGV0IE4xNyA9IGU1LnN0YXRlLmRvYy5zbGljZVN0cmluZyh1MTEsIHUxMSArIDEpID09PSAiPiIsIFMyMSA9IGAvJHtwMTh9JHtOMTcgPyAiIiA6ICI+In1gLCBEMjAgPSB1MTEgKyBTMjEubGVuZ3RoICsgKE4xNyA/IDEgOiAwKTsKICAgICAgICAgIHJldHVybiB7IHJhbmdlOiBnMi5jdXJzb3IoRDIwKSwgY2hhbmdlczogeyBmcm9tOiB1MTEsIGluc2VydDogUzIxIH0gfTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgcmFuZ2U6IHM4IH07CiAgICB9KTsKICAgIHJldHVybiByMy5jaGFuZ2VzLmVtcHR5ID8gZmFsc2UgOiAoZTUuZGlzcGF0Y2gocjMsIHsgdXNlckV2ZW50OiAiaW5wdXQudHlwZSIsIHNjcm9sbEludG9WaWV3OiB0cnVlIH0pLCB0cnVlKTsKICB9KTsKCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvbGFuZy1tYXJrZG93bkA2LjAuMS9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9sYW5nLW1hcmtkb3duLmpzCiAgdmFyIEkyMyA9IHZ0Nih7IGJsb2NrOiB7IG9wZW46ICI8IS0tIiwgY2xvc2U6ICItLT4iIH0gfSk7CiAgdmFyIEQxNSA9IFl0My5jb25maWd1cmUoeyBwcm9wczogW2NlMTAuYWRkKCh0NCkgPT4gewogICAgaWYgKCEoIXQ0LmlzKCJCbG9jayIpIHx8IHQ0LmlzKCJEb2N1bWVudCIpKSkKICAgICAgcmV0dXJuIChzOCwgbzQpID0+ICh7IGZyb206IG80LmRvYy5saW5lQXQoczguZnJvbSkudG8sIHRvOiBzOC50byB9KTsKICB9KSwgcmUxMy5hZGQoeyBEb2N1bWVudDogKCkgPT4gbnVsbCB9KSwgVDE3LmFkZCh7IERvY3VtZW50OiBJMjMgfSldIH0pOwogIGZ1bmN0aW9uIEIxNyh0NCkgewogICAgcmV0dXJuIG5ldyBjOShJMjMsIHQ0KTsKICB9CiAgdmFyIFkyNSA9IEIxNyhEMTUpOwogIHZhciBaMTcgPSBEMTUuY29uZmlndXJlKFt0ZTksIHNlMTAsIGVlOSwgcmUxMV0pOwogIHZhciBFMTIgPSBCMTcoWjE3KTsKICBmdW5jdGlvbiBfMjEodDQsIHM4KSB7CiAgICByZXR1cm4gKG80KSA9PiB7CiAgICAgIGlmIChvNCAmJiB0NCkgewogICAgICAgIGxldCByMyA9IG51bGw7CiAgICAgICAgaWYgKG80ID0gL1xTKi8uZXhlYyhvNClbMF0sIHR5cGVvZiB0NCA9PSAiZnVuY3Rpb24iID8gcjMgPSB0NChvNCkgOiByMyA9IGo5Lm1hdGNoTGFuZ3VhZ2VOYW1lKHQ0LCBvNCwgdHJ1ZSksIHIzIGluc3RhbmNlb2YgajkpCiAgICAgICAgICByZXR1cm4gcjMuc3VwcG9ydCA/IHIzLnN1cHBvcnQubGFuZ3VhZ2UucGFyc2VyIDogeDkuZ2V0U2tpcHBpbmdQYXJzZXIocjMubG9hZCgpKTsKICAgICAgICBpZiAocjMpCiAgICAgICAgICByZXR1cm4gcjMucGFyc2VyOwogICAgICB9CiAgICAgIHJldHVybiBzOCA/IHM4LnBhcnNlciA6IG51bGw7CiAgICB9OwogIH0KICBmdW5jdGlvbiB2MTIodDQsIHM4KSB7CiAgICByZXR1cm4gczguc2xpY2VTdHJpbmcodDQuZnJvbSwgdDQuZnJvbSArIDUwKTsKICB9CiAgdmFyIHgxNyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHM4LCBvNCwgcjMsIGYxMSwgYTQsIGk0LCBsNykgewogICAgICB0aGlzLm5vZGUgPSBzOCwgdGhpcy5mcm9tID0gbzQsIHRoaXMudG8gPSByMywgdGhpcy5zcGFjZUJlZm9yZSA9IGYxMSwgdGhpcy5zcGFjZUFmdGVyID0gYTQsIHRoaXMudHlwZSA9IGk0LCB0aGlzLml0ZW0gPSBsNzsKICAgIH0KICAgIGJsYW5rKHM4ID0gdHJ1ZSkgewogICAgICBsZXQgbzQgPSB0aGlzLnNwYWNlQmVmb3JlOwogICAgICBpZiAodGhpcy5ub2RlLm5hbWUgPT0gIkJsb2NrcXVvdGUiKQogICAgICAgIG80ICs9ICI+IjsKICAgICAgZWxzZQogICAgICAgIGZvciAobGV0IHIzID0gdGhpcy50byAtIHRoaXMuZnJvbSAtIG80Lmxlbmd0aCAtIHRoaXMuc3BhY2VBZnRlci5sZW5ndGg7IHIzID4gMDsgcjMtLSkKICAgICAgICAgIG80ICs9ICIgIjsKICAgICAgcmV0dXJuIG80ICsgKHM4ID8gdGhpcy5zcGFjZUFmdGVyIDogIiIpOwogICAgfQogICAgbWFya2VyKHM4LCBvNCkgewogICAgICBsZXQgcjMgPSB0aGlzLm5vZGUubmFtZSA9PSAiT3JkZXJlZExpc3QiID8gU3RyaW5nKCtPMTEodGhpcy5pdGVtLCBzOClbMl0gKyBvNCkgOiAiIjsKICAgICAgcmV0dXJuIHRoaXMuc3BhY2VCZWZvcmUgKyByMyArIHRoaXMudHlwZSArIHRoaXMuc3BhY2VBZnRlcjsKICAgIH0KICB9OwogIGZ1bmN0aW9uIE4xMih0NCwgczgsIG80KSB7CiAgICBsZXQgcjMgPSBbXTsKICAgIGZvciAobGV0IGk0ID0gdDQ7IGk0ICYmIGk0Lm5hbWUgIT0gIkRvY3VtZW50IjsgaTQgPSBpNC5wYXJlbnQpCiAgICAgIChpNC5uYW1lID09ICJMaXN0SXRlbSIgfHwgaTQubmFtZSA9PSAiQmxvY2txdW90ZSIpICYmIHIzLnB1c2goaTQpOwogICAgbGV0IGYxMSA9IFtdLCBhNCA9IDA7CiAgICBmb3IgKGxldCBpNCA9IHIzLmxlbmd0aCAtIDE7IGk0ID49IDA7IGk0LS0pIHsKICAgICAgbGV0IGw3ID0gcjNbaTRdLCBlNSwgdTExID0gYTQ7CiAgICAgIGlmIChsNy5uYW1lID09ICJCbG9ja3F1b3RlIiAmJiAoZTUgPSAvXlsgXHRdKj4oID8pLy5leGVjKHM4LnNsaWNlKGE0KSkpKQogICAgICAgIGE0ICs9IGU1WzBdLmxlbmd0aCwgZjExLnB1c2gobmV3IHgxNyhsNywgdTExLCBhNCwgIiIsIGU1WzFdLCAiPiIsIG51bGwpKTsKICAgICAgZWxzZSBpZiAobDcubmFtZSA9PSAiTGlzdEl0ZW0iICYmIGw3LnBhcmVudC5uYW1lID09ICJPcmRlcmVkTGlzdCIgJiYgKGU1ID0gL14oWyBcdF0qKVxkKyhbLildKShbIFx0XSopLy5leGVjKHYxMihsNywgbzQpKSkpIHsKICAgICAgICBsZXQgbjggPSBlNVszXSwgcDE4ID0gZTVbMF0ubGVuZ3RoOwogICAgICAgIG44Lmxlbmd0aCA+PSA0ICYmIChuOCA9IG44LnNsaWNlKDAsIG44Lmxlbmd0aCAtIDQpLCBwMTggLT0gNCksIGE0ICs9IHAxOCwgZjExLnB1c2gobmV3IHgxNyhsNy5wYXJlbnQsIHUxMSwgYTQsIGU1WzFdLCBuOCwgZTVbMl0sIGw3KSk7CiAgICAgIH0gZWxzZSBpZiAobDcubmFtZSA9PSAiTGlzdEl0ZW0iICYmIGw3LnBhcmVudC5uYW1lID09ICJCdWxsZXRMaXN0IiAmJiAoZTUgPSAvXihbIFx0XSopKFstKypdKShbIFx0XXsxLDR9XFtbIHhYXVxdKT8oWyBcdF0rKS8uZXhlYyh2MTIobDcsIG80KSkpKSB7CiAgICAgICAgbGV0IG44ID0gZTVbNF0sIHAxOCA9IGU1WzBdLmxlbmd0aDsKICAgICAgICBuOC5sZW5ndGggPiA0ICYmIChuOCA9IG44LnNsaWNlKDAsIG44Lmxlbmd0aCAtIDQpLCBwMTggLT0gNCk7CiAgICAgICAgbGV0IGQxNSA9IGU1WzJdOwogICAgICAgIGU1WzNdICYmIChkMTUgKz0gZTVbM10ucmVwbGFjZSgvW3hYXS8sICIgIikpLCBhNCArPSBwMTgsIGYxMS5wdXNoKG5ldyB4MTcobDcucGFyZW50LCB1MTEsIGE0LCBlNVsxXSwgbjgsIGQxNSwgbDcpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGYxMTsKICB9CiAgZnVuY3Rpb24gTzExKHQ0LCBzOCkgewogICAgcmV0dXJuIC9eKFxzKikoXGQrKSg/PVsuKV0pLy5leGVjKHM4LnNsaWNlU3RyaW5nKHQ0LmZyb20sIHQ0LmZyb20gKyAxMCkpOwogIH0KICBmdW5jdGlvbiBBMTUodDQsIHM4LCBvNCwgcjMgPSAwKSB7CiAgICBmb3IgKGxldCBmMTEgPSAtMSwgYTQgPSB0NDsgOyApIHsKICAgICAgaWYgKGE0Lm5hbWUgPT0gIkxpc3RJdGVtIikgewogICAgICAgIGxldCBsNyA9IE8xMShhNCwgczgpLCBlNSA9ICtsN1syXTsKICAgICAgICBpZiAoZjExID49IDApIHsKICAgICAgICAgIGlmIChlNSAhPSBmMTEgKyAxKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBvNC5wdXNoKHsgZnJvbTogYTQuZnJvbSArIGw3WzFdLmxlbmd0aCwgdG86IGE0LmZyb20gKyBsN1swXS5sZW5ndGgsIGluc2VydDogU3RyaW5nKGYxMSArIDIgKyByMykgfSk7CiAgICAgICAgfQogICAgICAgIGYxMSA9IGU1OwogICAgICB9CiAgICAgIGxldCBpNCA9IGE0Lm5leHRTaWJsaW5nOwogICAgICBpZiAoIWk0KQogICAgICAgIGJyZWFrOwogICAgICBhNCA9IGk0OwogICAgfQogIH0KICB2YXIgZWUxMyA9ICh7IHN0YXRlOiB0NCwgZGlzcGF0Y2g6IHM4IH0pID0+IHsKICAgIGxldCBvNCA9IG0xNCh0NCksIHsgZG9jOiByMyB9ID0gdDQsIGYxMSA9IG51bGwsIGE0ID0gdDQuY2hhbmdlQnlSYW5nZSgoaTQpID0+IHsKICAgICAgaWYgKCFpNC5lbXB0eSB8fCAhRTEyLmlzQWN0aXZlQXQodDQsIGk0LmZyb20pKQogICAgICAgIHJldHVybiBmMTEgPSB7IHJhbmdlOiBpNCB9OwogICAgICBsZXQgbDcgPSBpNC5mcm9tLCBlNSA9IHIzLmxpbmVBdChsNyksIHUxMSA9IE4xMihvNC5yZXNvbHZlSW5uZXIobDcsIC0xKSwgZTUudGV4dCwgcjMpOwogICAgICBmb3IgKDsgdTExLmxlbmd0aCAmJiB1MTFbdTExLmxlbmd0aCAtIDFdLmZyb20gPiBsNyAtIGU1LmZyb207ICkKICAgICAgICB1MTEucG9wKCk7CiAgICAgIGlmICghdTExLmxlbmd0aCkKICAgICAgICByZXR1cm4gZjExID0geyByYW5nZTogaTQgfTsKICAgICAgbGV0IG44ID0gdTExW3UxMS5sZW5ndGggLSAxXTsKICAgICAgaWYgKG44LnRvIC0gbjguc3BhY2VBZnRlci5sZW5ndGggPiBsNyAtIGU1LmZyb20pCiAgICAgICAgcmV0dXJuIGYxMSA9IHsgcmFuZ2U6IGk0IH07CiAgICAgIGxldCBwMTggPSBsNyA+PSBuOC50byAtIG44LnNwYWNlQWZ0ZXIubGVuZ3RoICYmICEvXFMvLnRlc3QoZTUudGV4dC5zbGljZShuOC50bykpOwogICAgICBpZiAobjguaXRlbSAmJiBwMTgpCiAgICAgICAgaWYgKG44Lm5vZGUuZmlyc3RDaGlsZC50byA+PSBsNyB8fCBlNS5mcm9tID4gMCAmJiAhL1teXHM+XS8udGVzdChyMy5saW5lQXQoZTUuZnJvbSAtIDEpLnRleHQpKSB7CiAgICAgICAgICBsZXQgbTIzID0gdTExLmxlbmd0aCA+IDEgPyB1MTFbdTExLmxlbmd0aCAtIDJdIDogbnVsbCwgYzE3LCBoMTAgPSAiIjsKICAgICAgICAgIG0yMyAmJiBtMjMuaXRlbSA/IChjMTcgPSBlNS5mcm9tICsgbTIzLmZyb20sIGgxMCA9IG0yMy5tYXJrZXIocjMsIDEpKSA6IGMxNyA9IGU1LmZyb20gKyAobTIzID8gbTIzLnRvIDogMCk7CiAgICAgICAgICBsZXQgdzIxID0gW3sgZnJvbTogYzE3LCB0bzogbDcsIGluc2VydDogaDEwIH1dOwogICAgICAgICAgcmV0dXJuIG44Lm5vZGUubmFtZSA9PSAiT3JkZXJlZExpc3QiICYmIEExNShuOC5pdGVtLCByMywgdzIxLCAtMiksIG0yMyAmJiBtMjMubm9kZS5uYW1lID09ICJPcmRlcmVkTGlzdCIgJiYgQTE1KG0yMy5pdGVtLCByMywgdzIxKSwgeyByYW5nZTogZzIuY3Vyc29yKGMxNyArIGgxMC5sZW5ndGgpLCBjaGFuZ2VzOiB3MjEgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGV0IG0yMyA9ICIiOwogICAgICAgICAgZm9yIChsZXQgYzE3ID0gMCwgaDEwID0gdTExLmxlbmd0aCAtIDI7IGMxNyA8PSBoMTA7IGMxNysrKQogICAgICAgICAgICBtMjMgKz0gdTExW2MxN10uYmxhbmsoYzE3IDwgaDEwKTsKICAgICAgICAgIHJldHVybiBtMjMgKz0gdDQubGluZUJyZWFrLCB7IHJhbmdlOiBnMi5jdXJzb3IobDcgKyBtMjMubGVuZ3RoKSwgY2hhbmdlczogeyBmcm9tOiBlNS5mcm9tLCBpbnNlcnQ6IG0yMyB9IH07CiAgICAgICAgfQogICAgICBpZiAobjgubm9kZS5uYW1lID09ICJCbG9ja3F1b3RlIiAmJiBwMTggJiYgZTUuZnJvbSkgewogICAgICAgIGxldCBtMjMgPSByMy5saW5lQXQoZTUuZnJvbSAtIDEpLCBjMTcgPSAvPlxzKiQvLmV4ZWMobTIzLnRleHQpOwogICAgICAgIGlmIChjMTcgJiYgYzE3LmluZGV4ID09IG44LmZyb20pIHsKICAgICAgICAgIGxldCBoMTAgPSB0NC5jaGFuZ2VzKFt7IGZyb206IG0yMy5mcm9tICsgYzE3LmluZGV4LCB0bzogbTIzLnRvIH0sIHsgZnJvbTogZTUuZnJvbSArIG44LmZyb20sIHRvOiBlNS50byB9XSk7CiAgICAgICAgICByZXR1cm4geyByYW5nZTogaTQubWFwKGgxMCksIGNoYW5nZXM6IGgxMCB9OwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgZDE1ID0gW107CiAgICAgIG44Lm5vZGUubmFtZSA9PSAiT3JkZXJlZExpc3QiICYmIEExNShuOC5pdGVtLCByMywgZDE1KTsKICAgICAgbGV0IEwyMiA9IHQ0LmxpbmVCcmVhaywgYjI1ID0gbjguaXRlbSAmJiBuOC5pdGVtLmZyb20gPCBlNS5mcm9tOwogICAgICBpZiAoIWIyNSB8fCAvXltcc1xkLilcLSsqPl0qLy5leGVjKGU1LnRleHQpWzBdLmxlbmd0aCA+PSBuOC50bykKICAgICAgICBmb3IgKGxldCBtMjMgPSAwLCBjMTcgPSB1MTEubGVuZ3RoIC0gMTsgbTIzIDw9IGMxNzsgbTIzKyspCiAgICAgICAgICBMMjIgKz0gbTIzID09IGMxNyAmJiAhYjI1ID8gdTExW20yM10ubWFya2VyKHIzLCAxKSA6IHUxMVttMjNdLmJsYW5rKCk7CiAgICAgIGxldCBnMTIgPSBsNzsKICAgICAgZm9yICg7IGcxMiA+IGU1LmZyb20gJiYgL1xzLy50ZXN0KGU1LnRleHQuY2hhckF0KGcxMiAtIGU1LmZyb20gLSAxKSk7ICkKICAgICAgICBnMTItLTsKICAgICAgcmV0dXJuIGQxNS5wdXNoKHsgZnJvbTogZzEyLCB0bzogbDcsIGluc2VydDogTDIyIH0pLCB7IHJhbmdlOiBnMi5jdXJzb3IoZzEyICsgTDIyLmxlbmd0aCksIGNoYW5nZXM6IGQxNSB9OwogICAgfSk7CiAgICByZXR1cm4gZjExID8gZmFsc2UgOiAoczgodDQudXBkYXRlKGE0LCB7IHNjcm9sbEludG9WaWV3OiB0cnVlLCB1c2VyRXZlbnQ6ICJpbnB1dCIgfSkpLCB0cnVlKTsKICB9OwogIGZ1bmN0aW9uIFAyMSh0NCkgewogICAgcmV0dXJuIHQ0Lm5hbWUgPT0gIlF1b3RlTWFyayIgfHwgdDQubmFtZSA9PSAiTGlzdE1hcmsiOwogIH0KICBmdW5jdGlvbiB0ZTEzKHQ0LCBzOCkgewogICAgbGV0IG80ID0gdDQucmVzb2x2ZUlubmVyKHM4LCAtMSksIHIzID0gczg7CiAgICBQMjEobzQpICYmIChyMyA9IG80LmZyb20sIG80ID0gbzQucGFyZW50KTsKICAgIGZvciAobGV0IGYxMTsgZjExID0gbzQuY2hpbGRCZWZvcmUocjMpOyApCiAgICAgIGlmIChQMjEoZjExKSkKICAgICAgICByMyA9IGYxMS5mcm9tOwogICAgICBlbHNlIGlmIChmMTEubmFtZSA9PSAiT3JkZXJlZExpc3QiIHx8IGYxMS5uYW1lID09ICJCdWxsZXRMaXN0IikKICAgICAgICBvNCA9IGYxMS5sYXN0Q2hpbGQsIHIzID0gbzQudG87CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICAgIHJldHVybiBvNDsKICB9CiAgdmFyIHJlMTYgPSAoeyBzdGF0ZTogdDQsIGRpc3BhdGNoOiBzOCB9KSA9PiB7CiAgICBsZXQgbzQgPSBtMTQodDQpLCByMyA9IG51bGwsIGYxMSA9IHQ0LmNoYW5nZUJ5UmFuZ2UoKGE0KSA9PiB7CiAgICAgIGxldCBpNCA9IGE0LmZyb20sIHsgZG9jOiBsNyB9ID0gdDQ7CiAgICAgIGlmIChhNC5lbXB0eSAmJiBFMTIuaXNBY3RpdmVBdCh0NCwgYTQuZnJvbSkpIHsKICAgICAgICBsZXQgZTUgPSBsNy5saW5lQXQoaTQpLCB1MTEgPSBOMTIodGUxMyhvNCwgaTQpLCBlNS50ZXh0LCBsNyk7CiAgICAgICAgaWYgKHUxMS5sZW5ndGgpIHsKICAgICAgICAgIGxldCBuOCA9IHUxMVt1MTEubGVuZ3RoIC0gMV0sIHAxOCA9IG44LnRvIC0gbjguc3BhY2VBZnRlci5sZW5ndGggKyAobjguc3BhY2VBZnRlciA/IDEgOiAwKTsKICAgICAgICAgIGlmIChpNCAtIGU1LmZyb20gPiBwMTggJiYgIS9cUy8udGVzdChlNS50ZXh0LnNsaWNlKHAxOCwgaTQgLSBlNS5mcm9tKSkpCiAgICAgICAgICAgIHJldHVybiB7IHJhbmdlOiBnMi5jdXJzb3IoZTUuZnJvbSArIHAxOCksIGNoYW5nZXM6IHsgZnJvbTogZTUuZnJvbSArIHAxOCwgdG86IGk0IH0gfTsKICAgICAgICAgIGlmIChpNCAtIGU1LmZyb20gPT0gcDE4KSB7CiAgICAgICAgICAgIGxldCBkMTUgPSBlNS5mcm9tICsgbjguZnJvbTsKICAgICAgICAgICAgaWYgKG44Lml0ZW0gJiYgbjgubm9kZS5mcm9tIDwgbjguaXRlbS5mcm9tICYmIC9cUy8udGVzdChlNS50ZXh0LnNsaWNlKG44LmZyb20sIG44LnRvKSkpCiAgICAgICAgICAgICAgcmV0dXJuIHsgcmFuZ2U6IGE0LCBjaGFuZ2VzOiB7IGZyb206IGQxNSwgdG86IGU1LmZyb20gKyBuOC50bywgaW5zZXJ0OiBuOC5ibGFuaygpIH0gfTsKICAgICAgICAgICAgaWYgKGQxNSA8IGk0KQogICAgICAgICAgICAgIHJldHVybiB7IHJhbmdlOiBnMi5jdXJzb3IoZDE1KSwgY2hhbmdlczogeyBmcm9tOiBkMTUsIHRvOiBpNCB9IH07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByMyA9IHsgcmFuZ2U6IGE0IH07CiAgICB9KTsKICAgIHJldHVybiByMyA/IGZhbHNlIDogKHM4KHQ0LnVwZGF0ZShmMTEsIHsgc2Nyb2xsSW50b1ZpZXc6IHRydWUsIHVzZXJFdmVudDogImRlbGV0ZSIgfSkpLCB0cnVlKTsKICB9OwogIHZhciBuZTExID0gW3sga2V5OiAiRW50ZXIiLCBydW46IGVlMTMgfSwgeyBrZXk6ICJCYWNrc3BhY2UiLCBydW46IHJlMTYgfV07CiAgdmFyIEMxMiA9IHNlMTQoeyBtYXRjaENsb3NpbmdUYWdzOiBmYWxzZSB9KTsKICBmdW5jdGlvbiBhZTEyKHQ0ID0ge30pIHsKICAgIGxldCB7IGNvZGVMYW5ndWFnZXM6IHM4LCBkZWZhdWx0Q29kZUxhbmd1YWdlOiBvNCwgYWRkS2V5bWFwOiByMyA9IHRydWUsIGJhc2U6IHsgcGFyc2VyOiBmMTEgfSA9IFkyNSB9ID0gdDQ7CiAgICBpZiAoIShmMTEgaW5zdGFuY2VvZiBOOCkpCiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJCYXNlIHBhcnNlciBwcm92aWRlZCB0byBgbWFya2Rvd25gIHNob3VsZCBiZSBhIE1hcmtkb3duIHBhcnNlciIpOwogICAgbGV0IGE0ID0gdDQuZXh0ZW5zaW9ucyA/IFt0NC5leHRlbnNpb25zXSA6IFtdLCBpNCA9IFtDMTIuc3VwcG9ydF0sIGw3OwogICAgbzQgaW5zdGFuY2VvZiBkdDYgPyAoaTQucHVzaChvNC5zdXBwb3J0KSwgbDcgPSBvNC5sYW5ndWFnZSkgOiBvNCAmJiAobDcgPSBvNCk7CiAgICBsZXQgZTUgPSBzOCB8fCBsNyA/IF8yMShzOCwgbDcpIDogdm9pZCAwOwogICAgcmV0dXJuIGE0LnB1c2goV3Q4KHsgY29kZVBhcnNlcjogZTUsIGh0bWxQYXJzZXI6IEMxMi5sYW5ndWFnZS5wYXJzZXIgfSkpLCByMyAmJiBpNC5wdXNoKGx0LmhpZ2goYnIub2YobmUxMSkpKSwgbmV3IGR0NihCMTcoZjExLmNvbmZpZ3VyZShhNCkpLCBpNCk7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AY29kZW1pcnJvci9sZWdhY3ktbW9kZXNANi4xLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5c1lXNW5kV0ZuWlEvZGVuby9tb2RlL3lhbWwuanMKICB2YXIgbDQgPSBbInRydWUiLCAiZmFsc2UiLCAib24iLCAib2ZmIiwgInllcyIsICJubyJdOwogIHZhciBmOSA9IG5ldyBSZWdFeHAoIlxcYigoIiArIGw0LmpvaW4oIil8KCIpICsgIikpJCIsICJpIik7CiAgdmFyIGEzID0geyB0b2tlbjogZnVuY3Rpb24objgsIGk0KSB7CiAgICB2YXIgcjMgPSBuOC5wZWVrKCksIGU1ID0gaTQuZXNjYXBlZDsKICAgIGlmIChpNC5lc2NhcGVkID0gZmFsc2UsIHIzID09ICIjIiAmJiAobjgucG9zID09IDAgfHwgL1xzLy50ZXN0KG44LnN0cmluZy5jaGFyQXQobjgucG9zIC0gMSkpKSkKICAgICAgcmV0dXJuIG44LnNraXBUb0VuZCgpLCAiY29tbWVudCI7CiAgICBpZiAobjgubWF0Y2goL14oJyhbXiddfFxcLikqJz98IihbXiJdfFxcLikqIj8pLykpCiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIGlmIChpNC5saXRlcmFsICYmIG44LmluZGVudGF0aW9uKCkgPiBpNC5rZXlDb2wpCiAgICAgIHJldHVybiBuOC5za2lwVG9FbmQoKSwgInN0cmluZyI7CiAgICBpZiAoaTQubGl0ZXJhbCAmJiAoaTQubGl0ZXJhbCA9IGZhbHNlKSwgbjguc29sKCkpIHsKICAgICAgaWYgKGk0LmtleUNvbCA9IDAsIGk0LnBhaXIgPSBmYWxzZSwgaTQucGFpclN0YXJ0ID0gZmFsc2UsIG44Lm1hdGNoKCItLS0iKSB8fCBuOC5tYXRjaCgiLi4uIikpCiAgICAgICAgcmV0dXJuICJkZWYiOwogICAgICBpZiAobjgubWF0Y2goL15ccyotXHMrLykpCiAgICAgICAgcmV0dXJuICJtZXRhIjsKICAgIH0KICAgIGlmIChuOC5tYXRjaCgvXihce3xcfXxcW3xcXSkvKSkKICAgICAgcmV0dXJuIHIzID09ICJ7IiA/IGk0LmlubGluZVBhaXJzKysgOiByMyA9PSAifSIgPyBpNC5pbmxpbmVQYWlycy0tIDogcjMgPT0gIlsiID8gaTQuaW5saW5lTGlzdCsrIDogaTQuaW5saW5lTGlzdC0tLCAibWV0YSI7CiAgICBpZiAoaTQuaW5saW5lTGlzdCA+IDAgJiYgIWU1ICYmIHIzID09ICIsIikKICAgICAgcmV0dXJuIG44Lm5leHQoKSwgIm1ldGEiOwogICAgaWYgKGk0LmlubGluZVBhaXJzID4gMCAmJiAhZTUgJiYgcjMgPT0gIiwiKQogICAgICByZXR1cm4gaTQua2V5Q29sID0gMCwgaTQucGFpciA9IGZhbHNlLCBpNC5wYWlyU3RhcnQgPSBmYWxzZSwgbjgubmV4dCgpLCAibWV0YSI7CiAgICBpZiAoaTQucGFpclN0YXJ0KSB7CiAgICAgIGlmIChuOC5tYXRjaCgvXlxzKihcfHxcPilccyovKSkKICAgICAgICByZXR1cm4gaTQubGl0ZXJhbCA9IHRydWUsICJtZXRhIjsKICAgICAgaWYgKG44Lm1hdGNoKC9eXHMqKFwmfFwqKVthLXowLTlcLl8tXStcYi9pKSkKICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgICAgaWYgKGk0LmlubGluZVBhaXJzID09IDAgJiYgbjgubWF0Y2goL15ccyotP1swLTlcLlwsXStccz8kLykgfHwgaTQuaW5saW5lUGFpcnMgPiAwICYmIG44Lm1hdGNoKC9eXHMqLT9bMC05XC5cLF0rXHM/KD89KCx8fSkpLykpCiAgICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgICBpZiAobjgubWF0Y2goZjkpKQogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICB9CiAgICByZXR1cm4gIWk0LnBhaXIgJiYgbjgubWF0Y2goL15ccyooPzpbLFxbXF17fSYqIXw+JyIlQGBdW15ccyciOl18W14sXFtcXXt9IyYqIXw+JyIlQGBdKVteI10qPyg/PVxzKjooJHxccykpLykgPyAoaTQucGFpciA9IHRydWUsIGk0LmtleUNvbCA9IG44LmluZGVudGF0aW9uKCksICJhdG9tIikgOiBpNC5wYWlyICYmIG44Lm1hdGNoKC9eOlxzKi8pID8gKGk0LnBhaXJTdGFydCA9IHRydWUsICJtZXRhIikgOiAoaTQucGFpclN0YXJ0ID0gZmFsc2UsIGk0LmVzY2FwZWQgPSByMyA9PSAiXFwiLCBuOC5uZXh0KCksIG51bGwpOwogIH0sIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHsgcGFpcjogZmFsc2UsIHBhaXJTdGFydDogZmFsc2UsIGtleUNvbDogMCwgaW5saW5lUGFpcnM6IDAsIGlubGluZUxpc3Q6IDAsIGxpdGVyYWw6IGZhbHNlLCBlc2NhcGVkOiBmYWxzZSB9OwogIH0sIGxhbmd1YWdlRGF0YTogeyBjb21tZW50VG9rZW5zOiB7IGxpbmU6ICIjIiB9IH0gfTsKCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvQGxlemVyL2xyQDEuMi4zL1gtWlM5QVkyOWtaVzFwY25KdmNpOXNZVzVuZFdGblpTeEFiR1Y2WlhJdlkyOXRiVzl1TEVCc1pYcGxjaTlvYVdkb2JHbG5hSFEvZGVuby9sci5qcwogIHZhciBiMTkgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIHM4LCBpNCwgaDEwLCByMywgbjgsIGE0LCBsNywgdTExID0gMCwgZjExKSB7CiAgICAgIHRoaXMucCA9IHQ0LCB0aGlzLnN0YWNrID0gZTUsIHRoaXMuc3RhdGUgPSBzOCwgdGhpcy5yZWR1Y2VQb3MgPSBpNCwgdGhpcy5wb3MgPSBoMTAsIHRoaXMuc2NvcmUgPSByMywgdGhpcy5idWZmZXIgPSBuOCwgdGhpcy5idWZmZXJCYXNlID0gYTQsIHRoaXMuY3VyQ29udGV4dCA9IGw3LCB0aGlzLmxvb2tBaGVhZCA9IHUxMSwgdGhpcy5wYXJlbnQgPSBmMTE7CiAgICB9CiAgICB0b1N0cmluZygpIHsKICAgICAgcmV0dXJuIGBbJHt0aGlzLnN0YWNrLmZpbHRlcigodDQsIGU1KSA9PiBlNSAlIDMgPT0gMCkuY29uY2F0KHRoaXMuc3RhdGUpfV1AJHt0aGlzLnBvc30ke3RoaXMuc2NvcmUgPyAiISIgKyB0aGlzLnNjb3JlIDogIiJ9YDsKICAgIH0KICAgIHN0YXRpYyBzdGFydCh0NCwgZTUsIHM4ID0gMCkgewogICAgICBsZXQgaTQgPSB0NC5wYXJzZXIuY29udGV4dDsKICAgICAgcmV0dXJuIG5ldyBiMTkodDQsIFtdLCBlNSwgczgsIHM4LCAwLCBbXSwgMCwgaTQgPyBuZXcgdzE5KGk0LCBpNC5zdGFydCkgOiBudWxsLCAwLCBudWxsKTsKICAgIH0KICAgIGdldCBjb250ZXh0KCkgewogICAgICByZXR1cm4gdGhpcy5jdXJDb250ZXh0ID8gdGhpcy5jdXJDb250ZXh0LmNvbnRleHQgOiBudWxsOwogICAgfQogICAgcHVzaFN0YXRlKHQ0LCBlNSkgewogICAgICB0aGlzLnN0YWNrLnB1c2godGhpcy5zdGF0ZSwgZTUsIHRoaXMuYnVmZmVyQmFzZSArIHRoaXMuYnVmZmVyLmxlbmd0aCksIHRoaXMuc3RhdGUgPSB0NDsKICAgIH0KICAgIHJlZHVjZSh0NCkgewogICAgICBsZXQgZTUgPSB0NCA+PiAxOSwgczggPSB0NCAmIDY1NTM1LCB7IHBhcnNlcjogaTQgfSA9IHRoaXMucCwgaDEwID0gaTQuZHluYW1pY1ByZWNlZGVuY2UoczgpOwogICAgICBpZiAoaDEwICYmICh0aGlzLnNjb3JlICs9IGgxMCksIGU1ID09IDApIHsKICAgICAgICB0aGlzLnB1c2hTdGF0ZShpNC5nZXRHb3RvKHRoaXMuc3RhdGUsIHM4LCB0cnVlKSwgdGhpcy5yZWR1Y2VQb3MpLCBzOCA8IGk0Lm1pblJlcGVhdFRlcm0gJiYgdGhpcy5zdG9yZU5vZGUoczgsIHRoaXMucmVkdWNlUG9zLCB0aGlzLnJlZHVjZVBvcywgNCwgdHJ1ZSksIHRoaXMucmVkdWNlQ29udGV4dChzOCwgdGhpcy5yZWR1Y2VQb3MpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBsZXQgcjMgPSB0aGlzLnN0YWNrLmxlbmd0aCAtIChlNSAtIDEpICogMyAtICh0NCAmIDI2MjE0NCA/IDYgOiAwKSwgbjggPSB0aGlzLnN0YWNrW3IzIC0gMl0sIGE0ID0gdGhpcy5zdGFja1tyMyAtIDFdLCBsNyA9IHRoaXMuYnVmZmVyQmFzZSArIHRoaXMuYnVmZmVyLmxlbmd0aCAtIGE0OwogICAgICBpZiAoczggPCBpNC5taW5SZXBlYXRUZXJtIHx8IHQ0ICYgMTMxMDcyKSB7CiAgICAgICAgbGV0IHUxMSA9IGk0LnN0YXRlRmxhZyh0aGlzLnN0YXRlLCAxKSA/IHRoaXMucG9zIDogdGhpcy5yZWR1Y2VQb3M7CiAgICAgICAgdGhpcy5zdG9yZU5vZGUoczgsIG44LCB1MTEsIGw3ICsgNCwgdHJ1ZSk7CiAgICAgIH0KICAgICAgaWYgKHQ0ICYgMjYyMTQ0KQogICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YWNrW3IzXTsKICAgICAgZWxzZSB7CiAgICAgICAgbGV0IHUxMSA9IHRoaXMuc3RhY2tbcjMgLSAzXTsKICAgICAgICB0aGlzLnN0YXRlID0gaTQuZ2V0R290byh1MTEsIHM4LCB0cnVlKTsKICAgICAgfQogICAgICBmb3IgKDsgdGhpcy5zdGFjay5sZW5ndGggPiByMzsgKQogICAgICAgIHRoaXMuc3RhY2sucG9wKCk7CiAgICAgIHRoaXMucmVkdWNlQ29udGV4dChzOCwgbjgpOwogICAgfQogICAgc3RvcmVOb2RlKHQ0LCBlNSwgczgsIGk0ID0gNCwgaDEwID0gZmFsc2UpIHsKICAgICAgaWYgKHQ0ID09IDAgJiYgKCF0aGlzLnN0YWNrLmxlbmd0aCB8fCB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV0gPCB0aGlzLmJ1ZmZlci5sZW5ndGggKyB0aGlzLmJ1ZmZlckJhc2UpKSB7CiAgICAgICAgbGV0IHIzID0gdGhpcywgbjggPSB0aGlzLmJ1ZmZlci5sZW5ndGg7CiAgICAgICAgaWYgKG44ID09IDAgJiYgcjMucGFyZW50ICYmIChuOCA9IHIzLmJ1ZmZlckJhc2UgLSByMy5wYXJlbnQuYnVmZmVyQmFzZSwgcjMgPSByMy5wYXJlbnQpLCBuOCA+IDAgJiYgcjMuYnVmZmVyW244IC0gNF0gPT0gMCAmJiByMy5idWZmZXJbbjggLSAxXSA+IC0xKSB7CiAgICAgICAgICBpZiAoZTUgPT0gczgpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGlmIChyMy5idWZmZXJbbjggLSAyXSA+PSBlNSkgewogICAgICAgICAgICByMy5idWZmZXJbbjggLSAyXSA9IHM4OwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghaDEwIHx8IHRoaXMucG9zID09IHM4KQogICAgICAgIHRoaXMuYnVmZmVyLnB1c2godDQsIGU1LCBzOCwgaTQpOwogICAgICBlbHNlIHsKICAgICAgICBsZXQgcjMgPSB0aGlzLmJ1ZmZlci5sZW5ndGg7CiAgICAgICAgaWYgKHIzID4gMCAmJiB0aGlzLmJ1ZmZlcltyMyAtIDRdICE9IDApCiAgICAgICAgICBmb3IgKDsgcjMgPiAwICYmIHRoaXMuYnVmZmVyW3IzIC0gMl0gPiBzODsgKQogICAgICAgICAgICB0aGlzLmJ1ZmZlcltyM10gPSB0aGlzLmJ1ZmZlcltyMyAtIDRdLCB0aGlzLmJ1ZmZlcltyMyArIDFdID0gdGhpcy5idWZmZXJbcjMgLSAzXSwgdGhpcy5idWZmZXJbcjMgKyAyXSA9IHRoaXMuYnVmZmVyW3IzIC0gMl0sIHRoaXMuYnVmZmVyW3IzICsgM10gPSB0aGlzLmJ1ZmZlcltyMyAtIDFdLCByMyAtPSA0LCBpNCA+IDQgJiYgKGk0IC09IDQpOwogICAgICAgIHRoaXMuYnVmZmVyW3IzXSA9IHQ0LCB0aGlzLmJ1ZmZlcltyMyArIDFdID0gZTUsIHRoaXMuYnVmZmVyW3IzICsgMl0gPSBzOCwgdGhpcy5idWZmZXJbcjMgKyAzXSA9IGk0OwogICAgICB9CiAgICB9CiAgICBzaGlmdCh0NCwgZTUsIHM4KSB7CiAgICAgIGxldCBpNCA9IHRoaXMucG9zOwogICAgICBpZiAodDQgJiAxMzEwNzIpCiAgICAgICAgdGhpcy5wdXNoU3RhdGUodDQgJiA2NTUzNSwgdGhpcy5wb3MpOwogICAgICBlbHNlIGlmICgodDQgJiAyNjIxNDQpID09IDApIHsKICAgICAgICBsZXQgaDEwID0gdDQsIHsgcGFyc2VyOiByMyB9ID0gdGhpcy5wOwogICAgICAgIChzOCA+IHRoaXMucG9zIHx8IGU1IDw9IHIzLm1heE5vZGUpICYmICh0aGlzLnBvcyA9IHM4LCByMy5zdGF0ZUZsYWcoaDEwLCAxKSB8fCAodGhpcy5yZWR1Y2VQb3MgPSBzOCkpLCB0aGlzLnB1c2hTdGF0ZShoMTAsIGk0KSwgdGhpcy5zaGlmdENvbnRleHQoZTUsIGk0KSwgZTUgPD0gcjMubWF4Tm9kZSAmJiB0aGlzLmJ1ZmZlci5wdXNoKGU1LCBpNCwgczgsIDQpOwogICAgICB9IGVsc2UKICAgICAgICB0aGlzLnBvcyA9IHM4LCB0aGlzLnNoaWZ0Q29udGV4dChlNSwgaTQpLCBlNSA8PSB0aGlzLnAucGFyc2VyLm1heE5vZGUgJiYgdGhpcy5idWZmZXIucHVzaChlNSwgaTQsIHM4LCA0KTsKICAgIH0KICAgIGFwcGx5KHQ0LCBlNSwgczgpIHsKICAgICAgdDQgJiA2NTUzNiA/IHRoaXMucmVkdWNlKHQ0KSA6IHRoaXMuc2hpZnQodDQsIGU1LCBzOCk7CiAgICB9CiAgICB1c2VOb2RlKHQ0LCBlNSkgewogICAgICBsZXQgczggPSB0aGlzLnAucmV1c2VkLmxlbmd0aCAtIDE7CiAgICAgIChzOCA8IDAgfHwgdGhpcy5wLnJldXNlZFtzOF0gIT0gdDQpICYmICh0aGlzLnAucmV1c2VkLnB1c2godDQpLCBzOCsrKTsKICAgICAgbGV0IGk0ID0gdGhpcy5wb3M7CiAgICAgIHRoaXMucmVkdWNlUG9zID0gdGhpcy5wb3MgPSBpNCArIHQ0Lmxlbmd0aCwgdGhpcy5wdXNoU3RhdGUoZTUsIGk0KSwgdGhpcy5idWZmZXIucHVzaChzOCwgaTQsIHRoaXMucmVkdWNlUG9zLCAtMSksIHRoaXMuY3VyQ29udGV4dCAmJiB0aGlzLnVwZGF0ZUNvbnRleHQodGhpcy5jdXJDb250ZXh0LnRyYWNrZXIucmV1c2UodGhpcy5jdXJDb250ZXh0LmNvbnRleHQsIHQ0LCB0aGlzLCB0aGlzLnAuc3RyZWFtLnJlc2V0KHRoaXMucG9zIC0gdDQubGVuZ3RoKSkpOwogICAgfQogICAgc3BsaXQoKSB7CiAgICAgIGxldCB0NCA9IHRoaXMsIGU1ID0gdDQuYnVmZmVyLmxlbmd0aDsKICAgICAgZm9yICg7IGU1ID4gMCAmJiB0NC5idWZmZXJbZTUgLSAyXSA+IHQ0LnJlZHVjZVBvczsgKQogICAgICAgIGU1IC09IDQ7CiAgICAgIGxldCBzOCA9IHQ0LmJ1ZmZlci5zbGljZShlNSksIGk0ID0gdDQuYnVmZmVyQmFzZSArIGU1OwogICAgICBmb3IgKDsgdDQgJiYgaTQgPT0gdDQuYnVmZmVyQmFzZTsgKQogICAgICAgIHQ0ID0gdDQucGFyZW50OwogICAgICByZXR1cm4gbmV3IGIxOSh0aGlzLnAsIHRoaXMuc3RhY2suc2xpY2UoKSwgdGhpcy5zdGF0ZSwgdGhpcy5yZWR1Y2VQb3MsIHRoaXMucG9zLCB0aGlzLnNjb3JlLCBzOCwgaTQsIHRoaXMuY3VyQ29udGV4dCwgdGhpcy5sb29rQWhlYWQsIHQ0KTsKICAgIH0KICAgIHJlY292ZXJCeURlbGV0ZSh0NCwgZTUpIHsKICAgICAgbGV0IHM4ID0gdDQgPD0gdGhpcy5wLnBhcnNlci5tYXhOb2RlOwogICAgICBzOCAmJiB0aGlzLnN0b3JlTm9kZSh0NCwgdGhpcy5wb3MsIGU1LCA0KSwgdGhpcy5zdG9yZU5vZGUoMCwgdGhpcy5wb3MsIGU1LCBzOCA/IDggOiA0KSwgdGhpcy5wb3MgPSB0aGlzLnJlZHVjZVBvcyA9IGU1LCB0aGlzLnNjb3JlIC09IDE5MDsKICAgIH0KICAgIGNhblNoaWZ0KHQ0KSB7CiAgICAgIGZvciAobGV0IGU1ID0gbmV3IE4xMyh0aGlzKTsgOyApIHsKICAgICAgICBsZXQgczggPSB0aGlzLnAucGFyc2VyLnN0YXRlU2xvdChlNS5zdGF0ZSwgNCkgfHwgdGhpcy5wLnBhcnNlci5oYXNBY3Rpb24oZTUuc3RhdGUsIHQ0KTsKICAgICAgICBpZiAoKHM4ICYgNjU1MzYpID09IDApCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoczggPT0gMCkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlNS5yZWR1Y2UoczgpOwogICAgICB9CiAgICB9CiAgICByZWNvdmVyQnlJbnNlcnQodDQpIHsKICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID49IDMwMCkKICAgICAgICByZXR1cm4gW107CiAgICAgIGxldCBlNSA9IHRoaXMucC5wYXJzZXIubmV4dFN0YXRlcyh0aGlzLnN0YXRlKTsKICAgICAgaWYgKGU1Lmxlbmd0aCA+IDQgPDwgMSB8fCB0aGlzLnN0YWNrLmxlbmd0aCA+PSAxMjApIHsKICAgICAgICBsZXQgaTQgPSBbXTsKICAgICAgICBmb3IgKGxldCBoMTAgPSAwLCByMzsgaDEwIDwgZTUubGVuZ3RoOyBoMTAgKz0gMikKICAgICAgICAgIChyMyA9IGU1W2gxMCArIDFdKSAhPSB0aGlzLnN0YXRlICYmIHRoaXMucC5wYXJzZXIuaGFzQWN0aW9uKHIzLCB0NCkgJiYgaTQucHVzaChlNVtoMTBdLCByMyk7CiAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMTIwKQogICAgICAgICAgZm9yIChsZXQgaDEwID0gMDsgaTQubGVuZ3RoIDwgNCA8PCAxICYmIGgxMCA8IGU1Lmxlbmd0aDsgaDEwICs9IDIpIHsKICAgICAgICAgICAgbGV0IHIzID0gZTVbaDEwICsgMV07CiAgICAgICAgICAgIGk0LnNvbWUoKG44LCBhNCkgPT4gYTQgJiAxICYmIG44ID09IHIzKSB8fCBpNC5wdXNoKGU1W2gxMF0sIHIzKTsKICAgICAgICAgIH0KICAgICAgICBlNSA9IGk0OwogICAgICB9CiAgICAgIGxldCBzOCA9IFtdOwogICAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgZTUubGVuZ3RoICYmIHM4Lmxlbmd0aCA8IDQ7IGk0ICs9IDIpIHsKICAgICAgICBsZXQgaDEwID0gZTVbaTQgKyAxXTsKICAgICAgICBpZiAoaDEwID09IHRoaXMuc3RhdGUpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBsZXQgcjMgPSB0aGlzLnNwbGl0KCk7CiAgICAgICAgcjMucHVzaFN0YXRlKGgxMCwgdGhpcy5wb3MpLCByMy5zdG9yZU5vZGUoMCwgcjMucG9zLCByMy5wb3MsIDQsIHRydWUpLCByMy5zaGlmdENvbnRleHQoZTVbaTRdLCB0aGlzLnBvcyksIHIzLnNjb3JlIC09IDIwMCwgczgucHVzaChyMyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHM4OwogICAgfQogICAgZm9yY2VSZWR1Y2UoKSB7CiAgICAgIGxldCB0NCA9IHRoaXMucC5wYXJzZXIuc3RhdGVTbG90KHRoaXMuc3RhdGUsIDUpOwogICAgICBpZiAoKHQ0ICYgNjU1MzYpID09IDApCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgeyBwYXJzZXI6IGU1IH0gPSB0aGlzLnA7CiAgICAgIGlmICghZTUudmFsaWRBY3Rpb24odGhpcy5zdGF0ZSwgdDQpKSB7CiAgICAgICAgbGV0IHM4ID0gdDQgPj4gMTksIGk0ID0gdDQgJiA2NTUzNSwgaDEwID0gdGhpcy5zdGFjay5sZW5ndGggLSBzOCAqIDM7CiAgICAgICAgaWYgKGgxMCA8IDAgfHwgZTUuZ2V0R290byh0aGlzLnN0YWNrW2gxMF0sIGk0LCBmYWxzZSkgPCAwKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHRoaXMuc3RvcmVOb2RlKDAsIHRoaXMucmVkdWNlUG9zLCB0aGlzLnJlZHVjZVBvcywgNCwgdHJ1ZSksIHRoaXMuc2NvcmUgLT0gMTAwOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnJlZHVjZVBvcyA9IHRoaXMucG9zLCB0aGlzLnJlZHVjZSh0NCksIHRydWU7CiAgICB9CiAgICBmb3JjZUFsbCgpIHsKICAgICAgZm9yICg7ICF0aGlzLnAucGFyc2VyLnN0YXRlRmxhZyh0aGlzLnN0YXRlLCAyKTsgKQogICAgICAgIGlmICghdGhpcy5mb3JjZVJlZHVjZSgpKSB7CiAgICAgICAgICB0aGlzLnN0b3JlTm9kZSgwLCB0aGlzLnBvcywgdGhpcy5wb3MsIDQsIHRydWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGdldCBkZWFkRW5kKCkgewogICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggIT0gMykKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGxldCB7IHBhcnNlcjogdDQgfSA9IHRoaXMucDsKICAgICAgcmV0dXJuIHQ0LmRhdGFbdDQuc3RhdGVTbG90KHRoaXMuc3RhdGUsIDEpXSA9PSA2NTUzNSAmJiAhdDQuc3RhdGVTbG90KHRoaXMuc3RhdGUsIDQpOwogICAgfQogICAgcmVzdGFydCgpIHsKICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhY2tbMF0sIHRoaXMuc3RhY2subGVuZ3RoID0gMDsKICAgIH0KICAgIHNhbWVTdGF0ZSh0NCkgewogICAgICBpZiAodGhpcy5zdGF0ZSAhPSB0NC5zdGF0ZSB8fCB0aGlzLnN0YWNrLmxlbmd0aCAhPSB0NC5zdGFjay5sZW5ndGgpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKGxldCBlNSA9IDA7IGU1IDwgdGhpcy5zdGFjay5sZW5ndGg7IGU1ICs9IDMpCiAgICAgICAgaWYgKHRoaXMuc3RhY2tbZTVdICE9IHQ0LnN0YWNrW2U1XSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBnZXQgcGFyc2VyKCkgewogICAgICByZXR1cm4gdGhpcy5wLnBhcnNlcjsKICAgIH0KICAgIGRpYWxlY3RFbmFibGVkKHQ0KSB7CiAgICAgIHJldHVybiB0aGlzLnAucGFyc2VyLmRpYWxlY3QuZmxhZ3NbdDRdOwogICAgfQogICAgc2hpZnRDb250ZXh0KHQ0LCBlNSkgewogICAgICB0aGlzLmN1ckNvbnRleHQgJiYgdGhpcy51cGRhdGVDb250ZXh0KHRoaXMuY3VyQ29udGV4dC50cmFja2VyLnNoaWZ0KHRoaXMuY3VyQ29udGV4dC5jb250ZXh0LCB0NCwgdGhpcywgdGhpcy5wLnN0cmVhbS5yZXNldChlNSkpKTsKICAgIH0KICAgIHJlZHVjZUNvbnRleHQodDQsIGU1KSB7CiAgICAgIHRoaXMuY3VyQ29udGV4dCAmJiB0aGlzLnVwZGF0ZUNvbnRleHQodGhpcy5jdXJDb250ZXh0LnRyYWNrZXIucmVkdWNlKHRoaXMuY3VyQ29udGV4dC5jb250ZXh0LCB0NCwgdGhpcywgdGhpcy5wLnN0cmVhbS5yZXNldChlNSkpKTsKICAgIH0KICAgIGVtaXRDb250ZXh0KCkgewogICAgICBsZXQgdDQgPSB0aGlzLmJ1ZmZlci5sZW5ndGggLSAxOwogICAgICAodDQgPCAwIHx8IHRoaXMuYnVmZmVyW3Q0XSAhPSAtMykgJiYgdGhpcy5idWZmZXIucHVzaCh0aGlzLmN1ckNvbnRleHQuaGFzaCwgdGhpcy5yZWR1Y2VQb3MsIHRoaXMucmVkdWNlUG9zLCAtMyk7CiAgICB9CiAgICBlbWl0TG9va0FoZWFkKCkgewogICAgICBsZXQgdDQgPSB0aGlzLmJ1ZmZlci5sZW5ndGggLSAxOwogICAgICAodDQgPCAwIHx8IHRoaXMuYnVmZmVyW3Q0XSAhPSAtNCkgJiYgdGhpcy5idWZmZXIucHVzaCh0aGlzLmxvb2tBaGVhZCwgdGhpcy5yZWR1Y2VQb3MsIHRoaXMucmVkdWNlUG9zLCAtNCk7CiAgICB9CiAgICB1cGRhdGVDb250ZXh0KHQ0KSB7CiAgICAgIGlmICh0NCAhPSB0aGlzLmN1ckNvbnRleHQuY29udGV4dCkgewogICAgICAgIGxldCBlNSA9IG5ldyB3MTkodGhpcy5jdXJDb250ZXh0LnRyYWNrZXIsIHQ0KTsKICAgICAgICBlNS5oYXNoICE9IHRoaXMuY3VyQ29udGV4dC5oYXNoICYmIHRoaXMuZW1pdENvbnRleHQoKSwgdGhpcy5jdXJDb250ZXh0ID0gZTU7CiAgICAgIH0KICAgIH0KICAgIHNldExvb2tBaGVhZCh0NCkgewogICAgICB0NCA+IHRoaXMubG9va0FoZWFkICYmICh0aGlzLmVtaXRMb29rQWhlYWQoKSwgdGhpcy5sb29rQWhlYWQgPSB0NCk7CiAgICB9CiAgICBjbG9zZSgpIHsKICAgICAgdGhpcy5jdXJDb250ZXh0ICYmIHRoaXMuY3VyQ29udGV4dC50cmFja2VyLnN0cmljdCAmJiB0aGlzLmVtaXRDb250ZXh0KCksIHRoaXMubG9va0FoZWFkID4gMCAmJiB0aGlzLmVtaXRMb29rQWhlYWQoKTsKICAgIH0KICB9OwogIHZhciB3MTkgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUpIHsKICAgICAgdGhpcy50cmFja2VyID0gdDQsIHRoaXMuY29udGV4dCA9IGU1LCB0aGlzLmhhc2ggPSB0NC5zdHJpY3QgPyB0NC5oYXNoKGU1KSA6IDA7CiAgICB9CiAgfTsKICB2YXIgQjE4OwogIChmdW5jdGlvbihvNCkgewogICAgbzRbbzQuSW5zZXJ0ID0gMjAwXSA9ICJJbnNlcnQiLCBvNFtvNC5EZWxldGUgPSAxOTBdID0gIkRlbGV0ZSIsIG80W280LlJlZHVjZSA9IDEwMF0gPSAiUmVkdWNlIiwgbzRbbzQuTWF4TmV4dCA9IDRdID0gIk1heE5leHQiLCBvNFtvNC5NYXhJbnNlcnRTdGFja0RlcHRoID0gMzAwXSA9ICJNYXhJbnNlcnRTdGFja0RlcHRoIiwgbzRbbzQuRGFtcGVuSW5zZXJ0U3RhY2tEZXB0aCA9IDEyMF0gPSAiRGFtcGVuSW5zZXJ0U3RhY2tEZXB0aCI7CiAgfSkoQjE4IHx8IChCMTggPSB7fSkpOwogIHZhciBOMTMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCkgewogICAgICB0aGlzLnN0YXJ0ID0gdDQsIHRoaXMuc3RhdGUgPSB0NC5zdGF0ZSwgdGhpcy5zdGFjayA9IHQ0LnN0YWNrLCB0aGlzLmJhc2UgPSB0aGlzLnN0YWNrLmxlbmd0aDsKICAgIH0KICAgIHJlZHVjZSh0NCkgewogICAgICBsZXQgZTUgPSB0NCAmIDY1NTM1LCBzOCA9IHQ0ID4+IDE5OwogICAgICBzOCA9PSAwID8gKHRoaXMuc3RhY2sgPT0gdGhpcy5zdGFydC5zdGFjayAmJiAodGhpcy5zdGFjayA9IHRoaXMuc3RhY2suc2xpY2UoKSksIHRoaXMuc3RhY2sucHVzaCh0aGlzLnN0YXRlLCAwLCAwKSwgdGhpcy5iYXNlICs9IDMpIDogdGhpcy5iYXNlIC09IChzOCAtIDEpICogMzsKICAgICAgbGV0IGk0ID0gdGhpcy5zdGFydC5wLnBhcnNlci5nZXRHb3RvKHRoaXMuc3RhY2tbdGhpcy5iYXNlIC0gM10sIGU1LCB0cnVlKTsKICAgICAgdGhpcy5zdGF0ZSA9IGk0OwogICAgfQogIH07CiAgdmFyIFAyMiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgczgpIHsKICAgICAgdGhpcy5zdGFjayA9IHQ0LCB0aGlzLnBvcyA9IGU1LCB0aGlzLmluZGV4ID0gczgsIHRoaXMuYnVmZmVyID0gdDQuYnVmZmVyLCB0aGlzLmluZGV4ID09IDAgJiYgdGhpcy5tYXliZU5leHQoKTsKICAgIH0KICAgIHN0YXRpYyBjcmVhdGUodDQsIGU1ID0gdDQuYnVmZmVyQmFzZSArIHQ0LmJ1ZmZlci5sZW5ndGgpIHsKICAgICAgcmV0dXJuIG5ldyBQMjIodDQsIGU1LCBlNSAtIHQ0LmJ1ZmZlckJhc2UpOwogICAgfQogICAgbWF5YmVOZXh0KCkgewogICAgICBsZXQgdDQgPSB0aGlzLnN0YWNrLnBhcmVudDsKICAgICAgdDQgIT0gbnVsbCAmJiAodGhpcy5pbmRleCA9IHRoaXMuc3RhY2suYnVmZmVyQmFzZSAtIHQ0LmJ1ZmZlckJhc2UsIHRoaXMuc3RhY2sgPSB0NCwgdGhpcy5idWZmZXIgPSB0NC5idWZmZXIpOwogICAgfQogICAgZ2V0IGlkKCkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleCAtIDRdOwogICAgfQogICAgZ2V0IHN0YXJ0KCkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleCAtIDNdOwogICAgfQogICAgZ2V0IGVuZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXggLSAyXTsKICAgIH0KICAgIGdldCBzaXplKCkgewogICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleCAtIDFdOwogICAgfQogICAgbmV4dCgpIHsKICAgICAgdGhpcy5pbmRleCAtPSA0LCB0aGlzLnBvcyAtPSA0LCB0aGlzLmluZGV4ID09IDAgJiYgdGhpcy5tYXliZU5leHQoKTsKICAgIH0KICAgIGZvcmsoKSB7CiAgICAgIHJldHVybiBuZXcgUDIyKHRoaXMuc3RhY2ssIHRoaXMucG9zLCB0aGlzLmluZGV4KTsKICAgIH0KICB9OwogIHZhciBtMTkgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgdGhpcy5zdGFydCA9IC0xLCB0aGlzLnZhbHVlID0gLTEsIHRoaXMuZW5kID0gLTEsIHRoaXMuZXh0ZW5kZWQgPSAtMSwgdGhpcy5sb29rQWhlYWQgPSAwLCB0aGlzLm1hc2sgPSAwLCB0aGlzLmNvbnRleHQgPSAwOwogICAgfQogIH07CiAgdmFyIEYxOCA9IG5ldyBtMTkoKTsKICB2YXIgVDI0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodDQsIGU1KSB7CiAgICAgIHRoaXMuaW5wdXQgPSB0NCwgdGhpcy5yYW5nZXMgPSBlNSwgdGhpcy5jaHVuayA9ICIiLCB0aGlzLmNodW5rT2ZmID0gMCwgdGhpcy5jaHVuazIgPSAiIiwgdGhpcy5jaHVuazJQb3MgPSAwLCB0aGlzLm5leHQgPSAtMSwgdGhpcy50b2tlbiA9IEYxOCwgdGhpcy5yYW5nZUluZGV4ID0gMCwgdGhpcy5wb3MgPSB0aGlzLmNodW5rUG9zID0gZTVbMF0uZnJvbSwgdGhpcy5yYW5nZSA9IGU1WzBdLCB0aGlzLmVuZCA9IGU1W2U1Lmxlbmd0aCAtIDFdLnRvLCB0aGlzLnJlYWROZXh0KCk7CiAgICB9CiAgICByZXNvbHZlT2Zmc2V0KHQ0LCBlNSkgewogICAgICBsZXQgczggPSB0aGlzLnJhbmdlLCBpNCA9IHRoaXMucmFuZ2VJbmRleCwgaDEwID0gdGhpcy5wb3MgKyB0NDsKICAgICAgZm9yICg7IGgxMCA8IHM4LmZyb207ICkgewogICAgICAgIGlmICghaTQpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBsZXQgcjMgPSB0aGlzLnJhbmdlc1stLWk0XTsKICAgICAgICBoMTAgLT0gczguZnJvbSAtIHIzLnRvLCBzOCA9IHIzOwogICAgICB9CiAgICAgIGZvciAoOyBlNSA8IDAgPyBoMTAgPiBzOC50byA6IGgxMCA+PSBzOC50bzsgKSB7CiAgICAgICAgaWYgKGk0ID09IHRoaXMucmFuZ2VzLmxlbmd0aCAtIDEpCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBsZXQgcjMgPSB0aGlzLnJhbmdlc1srK2k0XTsKICAgICAgICBoMTAgKz0gcjMuZnJvbSAtIHM4LnRvLCBzOCA9IHIzOwogICAgICB9CiAgICAgIHJldHVybiBoMTA7CiAgICB9CiAgICBjbGlwUG9zKHQ0KSB7CiAgICAgIGlmICh0NCA+PSB0aGlzLnJhbmdlLmZyb20gJiYgdDQgPCB0aGlzLnJhbmdlLnRvKQogICAgICAgIHJldHVybiB0NDsKICAgICAgZm9yIChsZXQgZTUgb2YgdGhpcy5yYW5nZXMpCiAgICAgICAgaWYgKGU1LnRvID4gdDQpCiAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodDQsIGU1LmZyb20pOwogICAgICByZXR1cm4gdGhpcy5lbmQ7CiAgICB9CiAgICBwZWVrKHQ0KSB7CiAgICAgIGxldCBlNSA9IHRoaXMuY2h1bmtPZmYgKyB0NCwgczgsIGk0OwogICAgICBpZiAoZTUgPj0gMCAmJiBlNSA8IHRoaXMuY2h1bmsubGVuZ3RoKQogICAgICAgIHM4ID0gdGhpcy5wb3MgKyB0NCwgaTQgPSB0aGlzLmNodW5rLmNoYXJDb2RlQXQoZTUpOwogICAgICBlbHNlIHsKICAgICAgICBsZXQgaDEwID0gdGhpcy5yZXNvbHZlT2Zmc2V0KHQ0LCAxKTsKICAgICAgICBpZiAoaDEwID09IG51bGwpCiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgaWYgKHM4ID0gaDEwLCBzOCA+PSB0aGlzLmNodW5rMlBvcyAmJiBzOCA8IHRoaXMuY2h1bmsyUG9zICsgdGhpcy5jaHVuazIubGVuZ3RoKQogICAgICAgICAgaTQgPSB0aGlzLmNodW5rMi5jaGFyQ29kZUF0KHM4IC0gdGhpcy5jaHVuazJQb3MpOwogICAgICAgIGVsc2UgewogICAgICAgICAgbGV0IHIzID0gdGhpcy5yYW5nZUluZGV4LCBuOCA9IHRoaXMucmFuZ2U7CiAgICAgICAgICBmb3IgKDsgbjgudG8gPD0gczg7ICkKICAgICAgICAgICAgbjggPSB0aGlzLnJhbmdlc1srK3IzXTsKICAgICAgICAgIHRoaXMuY2h1bmsyID0gdGhpcy5pbnB1dC5jaHVuayh0aGlzLmNodW5rMlBvcyA9IHM4KSwgczggKyB0aGlzLmNodW5rMi5sZW5ndGggPiBuOC50byAmJiAodGhpcy5jaHVuazIgPSB0aGlzLmNodW5rMi5zbGljZSgwLCBuOC50byAtIHM4KSksIGk0ID0gdGhpcy5jaHVuazIuY2hhckNvZGVBdCgwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHM4ID49IHRoaXMudG9rZW4ubG9va0FoZWFkICYmICh0aGlzLnRva2VuLmxvb2tBaGVhZCA9IHM4ICsgMSksIGk0OwogICAgfQogICAgYWNjZXB0VG9rZW4odDQsIGU1ID0gMCkgewogICAgICBsZXQgczggPSBlNSA/IHRoaXMucmVzb2x2ZU9mZnNldChlNSwgLTEpIDogdGhpcy5wb3M7CiAgICAgIGlmIChzOCA9PSBudWxsIHx8IHM4IDwgdGhpcy50b2tlbi5zdGFydCkKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVG9rZW4gZW5kIG91dCBvZiBib3VuZHMiKTsKICAgICAgdGhpcy50b2tlbi52YWx1ZSA9IHQ0LCB0aGlzLnRva2VuLmVuZCA9IHM4OwogICAgfQogICAgZ2V0Q2h1bmsoKSB7CiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmNodW5rMlBvcyAmJiB0aGlzLnBvcyA8IHRoaXMuY2h1bmsyUG9zICsgdGhpcy5jaHVuazIubGVuZ3RoKSB7CiAgICAgICAgbGV0IHsgY2h1bms6IHQ0LCBjaHVua1BvczogZTUgfSA9IHRoaXM7CiAgICAgICAgdGhpcy5jaHVuayA9IHRoaXMuY2h1bmsyLCB0aGlzLmNodW5rUG9zID0gdGhpcy5jaHVuazJQb3MsIHRoaXMuY2h1bmsyID0gdDQsIHRoaXMuY2h1bmsyUG9zID0gZTUsIHRoaXMuY2h1bmtPZmYgPSB0aGlzLnBvcyAtIHRoaXMuY2h1bmtQb3M7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5jaHVuazIgPSB0aGlzLmNodW5rLCB0aGlzLmNodW5rMlBvcyA9IHRoaXMuY2h1bmtQb3M7CiAgICAgICAgbGV0IHQ0ID0gdGhpcy5pbnB1dC5jaHVuayh0aGlzLnBvcyksIGU1ID0gdGhpcy5wb3MgKyB0NC5sZW5ndGg7CiAgICAgICAgdGhpcy5jaHVuayA9IGU1ID4gdGhpcy5yYW5nZS50byA/IHQ0LnNsaWNlKDAsIHRoaXMucmFuZ2UudG8gLSB0aGlzLnBvcykgOiB0NCwgdGhpcy5jaHVua1BvcyA9IHRoaXMucG9zLCB0aGlzLmNodW5rT2ZmID0gMDsKICAgICAgfQogICAgfQogICAgcmVhZE5leHQoKSB7CiAgICAgIHJldHVybiB0aGlzLmNodW5rT2ZmID49IHRoaXMuY2h1bmsubGVuZ3RoICYmICh0aGlzLmdldENodW5rKCksIHRoaXMuY2h1bmtPZmYgPT0gdGhpcy5jaHVuay5sZW5ndGgpID8gdGhpcy5uZXh0ID0gLTEgOiB0aGlzLm5leHQgPSB0aGlzLmNodW5rLmNoYXJDb2RlQXQodGhpcy5jaHVua09mZik7CiAgICB9CiAgICBhZHZhbmNlKHQ0ID0gMSkgewogICAgICBmb3IgKHRoaXMuY2h1bmtPZmYgKz0gdDQ7IHRoaXMucG9zICsgdDQgPj0gdGhpcy5yYW5nZS50bzsgKSB7CiAgICAgICAgaWYgKHRoaXMucmFuZ2VJbmRleCA9PSB0aGlzLnJhbmdlcy5sZW5ndGggLSAxKQogICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RG9uZSgpOwogICAgICAgIHQ0IC09IHRoaXMucmFuZ2UudG8gLSB0aGlzLnBvcywgdGhpcy5yYW5nZSA9IHRoaXMucmFuZ2VzWysrdGhpcy5yYW5nZUluZGV4XSwgdGhpcy5wb3MgPSB0aGlzLnJhbmdlLmZyb207CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMucG9zICs9IHQ0LCB0aGlzLnBvcyA+PSB0aGlzLnRva2VuLmxvb2tBaGVhZCAmJiAodGhpcy50b2tlbi5sb29rQWhlYWQgPSB0aGlzLnBvcyArIDEpLCB0aGlzLnJlYWROZXh0KCk7CiAgICB9CiAgICBzZXREb25lKCkgewogICAgICByZXR1cm4gdGhpcy5wb3MgPSB0aGlzLmNodW5rUG9zID0gdGhpcy5lbmQsIHRoaXMucmFuZ2UgPSB0aGlzLnJhbmdlc1t0aGlzLnJhbmdlSW5kZXggPSB0aGlzLnJhbmdlcy5sZW5ndGggLSAxXSwgdGhpcy5jaHVuayA9ICIiLCB0aGlzLm5leHQgPSAtMTsKICAgIH0KICAgIHJlc2V0KHQ0LCBlNSkgewogICAgICBpZiAoZTUgPyAodGhpcy50b2tlbiA9IGU1LCBlNS5zdGFydCA9IHQ0LCBlNS5sb29rQWhlYWQgPSB0NCArIDEsIGU1LnZhbHVlID0gZTUuZXh0ZW5kZWQgPSAtMSkgOiB0aGlzLnRva2VuID0gRjE4LCB0aGlzLnBvcyAhPSB0NCkgewogICAgICAgIGlmICh0aGlzLnBvcyA9IHQ0LCB0NCA9PSB0aGlzLmVuZCkKICAgICAgICAgIHJldHVybiB0aGlzLnNldERvbmUoKSwgdGhpczsKICAgICAgICBmb3IgKDsgdDQgPCB0aGlzLnJhbmdlLmZyb207ICkKICAgICAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLnJhbmdlc1stLXRoaXMucmFuZ2VJbmRleF07CiAgICAgICAgZm9yICg7IHQ0ID49IHRoaXMucmFuZ2UudG87ICkKICAgICAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLnJhbmdlc1srK3RoaXMucmFuZ2VJbmRleF07CiAgICAgICAgdDQgPj0gdGhpcy5jaHVua1BvcyAmJiB0NCA8IHRoaXMuY2h1bmtQb3MgKyB0aGlzLmNodW5rLmxlbmd0aCA/IHRoaXMuY2h1bmtPZmYgPSB0NCAtIHRoaXMuY2h1bmtQb3MgOiAodGhpcy5jaHVuayA9ICIiLCB0aGlzLmNodW5rT2ZmID0gMCksIHRoaXMucmVhZE5leHQoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIHJlYWQodDQsIGU1KSB7CiAgICAgIGlmICh0NCA+PSB0aGlzLmNodW5rUG9zICYmIGU1IDw9IHRoaXMuY2h1bmtQb3MgKyB0aGlzLmNodW5rLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcy5jaHVuay5zbGljZSh0NCAtIHRoaXMuY2h1bmtQb3MsIGU1IC0gdGhpcy5jaHVua1Bvcyk7CiAgICAgIGlmICh0NCA+PSB0aGlzLmNodW5rMlBvcyAmJiBlNSA8PSB0aGlzLmNodW5rMlBvcyArIHRoaXMuY2h1bmsyLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcy5jaHVuazIuc2xpY2UodDQgLSB0aGlzLmNodW5rMlBvcywgZTUgLSB0aGlzLmNodW5rMlBvcyk7CiAgICAgIGlmICh0NCA+PSB0aGlzLnJhbmdlLmZyb20gJiYgZTUgPD0gdGhpcy5yYW5nZS50bykKICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5yZWFkKHQ0LCBlNSk7CiAgICAgIGxldCBzOCA9ICIiOwogICAgICBmb3IgKGxldCBpNCBvZiB0aGlzLnJhbmdlcykgewogICAgICAgIGlmIChpNC5mcm9tID49IGU1KQogICAgICAgICAgYnJlYWs7CiAgICAgICAgaTQudG8gPiB0NCAmJiAoczggKz0gdGhpcy5pbnB1dC5yZWFkKE1hdGgubWF4KGk0LmZyb20sIHQ0KSwgTWF0aC5taW4oaTQudG8sIGU1KSkpOwogICAgICB9CiAgICAgIHJldHVybiBzODsKICAgIH0KICB9OwogIHZhciB4MTggPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUpIHsKICAgICAgdGhpcy5kYXRhID0gdDQsIHRoaXMuaWQgPSBlNTsKICAgIH0KICAgIHRva2VuKHQ0LCBlNSkgewogICAgICBYMTkodGhpcy5kYXRhLCB0NCwgZTUsIHRoaXMuaWQpOwogICAgfQogIH07CiAgeDE4LnByb3RvdHlwZS5jb250ZXh0dWFsID0geDE4LnByb3RvdHlwZS5mYWxsYmFjayA9IHgxOC5wcm90b3R5cGUuZXh0ZW5kID0gZmFsc2U7CiAgdmFyIEwxNiA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSA9IHt9KSB7CiAgICAgIHRoaXMudG9rZW4gPSB0NCwgdGhpcy5jb250ZXh0dWFsID0gISFlNS5jb250ZXh0dWFsLCB0aGlzLmZhbGxiYWNrID0gISFlNS5mYWxsYmFjaywgdGhpcy5leHRlbmQgPSAhIWU1LmV4dGVuZDsKICAgIH0KICB9OwogIGZ1bmN0aW9uIFgxOShvNCwgdDQsIGU1LCBzOCkgewogICAgbGV0IGk0ID0gMCwgaDEwID0gMSA8PCBzOCwgeyBwYXJzZXI6IHIzIH0gPSBlNS5wLCB7IGRpYWxlY3Q6IG44IH0gPSByMzsKICAgIHQ6CiAgICAgIGZvciAoOyAoaDEwICYgbzRbaTRdKSAhPSAwOyApIHsKICAgICAgICBsZXQgYTQgPSBvNFtpNCArIDFdOwogICAgICAgIGZvciAobGV0IGMxNyA9IGk0ICsgMzsgYzE3IDwgYTQ7IGMxNyArPSAyKQogICAgICAgICAgaWYgKChvNFtjMTcgKyAxXSAmIGgxMCkgPiAwKSB7CiAgICAgICAgICAgIGxldCBwMTggPSBvNFtjMTddOwogICAgICAgICAgICBpZiAobjguYWxsb3dzKHAxOCkgJiYgKHQ0LnRva2VuLnZhbHVlID09IC0xIHx8IHQ0LnRva2VuLnZhbHVlID09IHAxOCB8fCByMy5vdmVycmlkZXMocDE4LCB0NC50b2tlbi52YWx1ZSkpKSB7CiAgICAgICAgICAgICAgdDQuYWNjZXB0VG9rZW4ocDE4KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGxldCBsNyA9IHQ0Lm5leHQsIHUxMSA9IDAsIGYxMSA9IG80W2k0ICsgMl07CiAgICAgICAgaWYgKHQ0Lm5leHQgPCAwICYmIGYxMSA+IHUxMSAmJiBvNFthNCArIGYxMSAqIDMgLSAzXSA9PSA2NTUzNSkgewogICAgICAgICAgaTQgPSBvNFthNCArIGYxMSAqIDMgLSAxXTsKICAgICAgICAgIGNvbnRpbnVlIHQ7CiAgICAgICAgfQogICAgICAgIGZvciAoOyB1MTEgPCBmMTE7ICkgewogICAgICAgICAgbGV0IGMxNyA9IHUxMSArIGYxMSA+PiAxLCBwMTggPSBhNCArIGMxNyArIChjMTcgPDwgMSksIGcxMiA9IG80W3AxOF0sIFcxOCA9IG80W3AxOCArIDFdOwogICAgICAgICAgaWYgKGw3IDwgZzEyKQogICAgICAgICAgICBmMTEgPSBjMTc7CiAgICAgICAgICBlbHNlIGlmIChsNyA+PSBXMTgpCiAgICAgICAgICAgIHUxMSA9IGMxNyArIDE7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaTQgPSBvNFtwMTggKyAyXSwgdDQuYWR2YW5jZSgpOwogICAgICAgICAgICBjb250aW51ZSB0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogIH0KICBmdW5jdGlvbiBBMTYobzQsIHQ0ID0gVWludDE2QXJyYXkpIHsKICAgIGlmICh0eXBlb2YgbzQgIT0gInN0cmluZyIpCiAgICAgIHJldHVybiBvNDsKICAgIGxldCBlNSA9IG51bGw7CiAgICBmb3IgKGxldCBzOCA9IDAsIGk0ID0gMDsgczggPCBvNC5sZW5ndGg7ICkgewogICAgICBsZXQgaDEwID0gMDsKICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgbGV0IHIzID0gbzQuY2hhckNvZGVBdChzOCsrKSwgbjggPSBmYWxzZTsKICAgICAgICBpZiAocjMgPT0gMTI2KSB7CiAgICAgICAgICBoMTAgPSA2NTUzNTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByMyA+PSA5MiAmJiByMy0tLCByMyA+PSAzNCAmJiByMy0tOwogICAgICAgIGxldCBhNCA9IHIzIC0gMzI7CiAgICAgICAgaWYgKGE0ID49IDQ2ICYmIChhNCAtPSA0NiwgbjggPSB0cnVlKSwgaDEwICs9IGE0LCBuOCkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGgxMCAqPSA0NjsKICAgICAgfQogICAgICBlNSA/IGU1W2k0KytdID0gaDEwIDogZTUgPSBuZXcgdDQoaDEwKTsKICAgIH0KICAgIHJldHVybiBlNTsKICB9CiAgdmFyIGQxMSA9IHR5cGVvZiBwcm9jZXNzX2RlZmF1bHQgPCAidSIgJiYgcHJvY2Vzc19kZWZhdWx0LmVudiAmJiAvXGJwYXJzZVxiLy50ZXN0KHByb2Nlc3NfZGVmYXVsdC5lbnYuTE9HKTsKICB2YXIgeTE0ID0gbnVsbDsKICB2YXIgJDE4OwogIChmdW5jdGlvbihvNCkgewogICAgbzRbbzQuTWFyZ2luID0gMjVdID0gIk1hcmdpbiI7CiAgfSkoJDE4IHx8ICgkMTggPSB7fSkpOwogIGZ1bmN0aW9uIGoxMyhvNCwgdDQsIGU1KSB7CiAgICBsZXQgczggPSBvNC5jdXJzb3IoQTQuSW5jbHVkZUFub255bW91cyk7CiAgICBmb3IgKHM4Lm1vdmVUbyh0NCk7IDsgKQogICAgICBpZiAoIShlNSA8IDAgPyBzOC5jaGlsZEJlZm9yZSh0NCkgOiBzOC5jaGlsZEFmdGVyKHQ0KSkpCiAgICAgICAgZm9yICg7IDsgKSB7CiAgICAgICAgICBpZiAoKGU1IDwgMCA/IHM4LnRvIDwgdDQgOiBzOC5mcm9tID4gdDQpICYmICFzOC50eXBlLmlzRXJyb3IpCiAgICAgICAgICAgIHJldHVybiBlNSA8IDAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbihzOC50byAtIDEsIHQ0IC0gMjUpKSA6IE1hdGgubWluKG80Lmxlbmd0aCwgTWF0aC5tYXgoczguZnJvbSArIDEsIHQ0ICsgMjUpKTsKICAgICAgICAgIGlmIChlNSA8IDAgPyBzOC5wcmV2U2libGluZygpIDogczgubmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBpZiAoIXM4LnBhcmVudCgpKQogICAgICAgICAgICByZXR1cm4gZTUgPCAwID8gMCA6IG80Lmxlbmd0aDsKICAgICAgICB9CiAgfQogIHZhciBEMTYgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUpIHsKICAgICAgdGhpcy5mcmFnbWVudHMgPSB0NCwgdGhpcy5ub2RlU2V0ID0gZTUsIHRoaXMuaSA9IDAsIHRoaXMuZnJhZ21lbnQgPSBudWxsLCB0aGlzLnNhZmVGcm9tID0gLTEsIHRoaXMuc2FmZVRvID0gLTEsIHRoaXMudHJlZXMgPSBbXSwgdGhpcy5zdGFydCA9IFtdLCB0aGlzLmluZGV4ID0gW10sIHRoaXMubmV4dEZyYWdtZW50KCk7CiAgICB9CiAgICBuZXh0RnJhZ21lbnQoKSB7CiAgICAgIGxldCB0NCA9IHRoaXMuZnJhZ21lbnQgPSB0aGlzLmkgPT0gdGhpcy5mcmFnbWVudHMubGVuZ3RoID8gbnVsbCA6IHRoaXMuZnJhZ21lbnRzW3RoaXMuaSsrXTsKICAgICAgaWYgKHQ0KSB7CiAgICAgICAgZm9yICh0aGlzLnNhZmVGcm9tID0gdDQub3BlblN0YXJ0ID8gajEzKHQ0LnRyZWUsIHQ0LmZyb20gKyB0NC5vZmZzZXQsIDEpIC0gdDQub2Zmc2V0IDogdDQuZnJvbSwgdGhpcy5zYWZlVG8gPSB0NC5vcGVuRW5kID8gajEzKHQ0LnRyZWUsIHQ0LnRvICsgdDQub2Zmc2V0LCAtMSkgLSB0NC5vZmZzZXQgOiB0NC50bzsgdGhpcy50cmVlcy5sZW5ndGg7ICkKICAgICAgICAgIHRoaXMudHJlZXMucG9wKCksIHRoaXMuc3RhcnQucG9wKCksIHRoaXMuaW5kZXgucG9wKCk7CiAgICAgICAgdGhpcy50cmVlcy5wdXNoKHQ0LnRyZWUpLCB0aGlzLnN0YXJ0LnB1c2goLXQ0Lm9mZnNldCksIHRoaXMuaW5kZXgucHVzaCgwKSwgdGhpcy5uZXh0U3RhcnQgPSB0aGlzLnNhZmVGcm9tOwogICAgICB9IGVsc2UKICAgICAgICB0aGlzLm5leHRTdGFydCA9IDFlOTsKICAgIH0KICAgIG5vZGVBdCh0NCkgewogICAgICBpZiAodDQgPCB0aGlzLm5leHRTdGFydCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgZm9yICg7IHRoaXMuZnJhZ21lbnQgJiYgdGhpcy5zYWZlVG8gPD0gdDQ7ICkKICAgICAgICB0aGlzLm5leHRGcmFnbWVudCgpOwogICAgICBpZiAoIXRoaXMuZnJhZ21lbnQpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGZvciAoOyA7ICkgewogICAgICAgIGxldCBlNSA9IHRoaXMudHJlZXMubGVuZ3RoIC0gMTsKICAgICAgICBpZiAoZTUgPCAwKQogICAgICAgICAgcmV0dXJuIHRoaXMubmV4dEZyYWdtZW50KCksIG51bGw7CiAgICAgICAgbGV0IHM4ID0gdGhpcy50cmVlc1tlNV0sIGk0ID0gdGhpcy5pbmRleFtlNV07CiAgICAgICAgaWYgKGk0ID09IHM4LmNoaWxkcmVuLmxlbmd0aCkgewogICAgICAgICAgdGhpcy50cmVlcy5wb3AoKSwgdGhpcy5zdGFydC5wb3AoKSwgdGhpcy5pbmRleC5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBsZXQgaDEwID0gczguY2hpbGRyZW5baTRdLCByMyA9IHRoaXMuc3RhcnRbZTVdICsgczgucG9zaXRpb25zW2k0XTsKICAgICAgICBpZiAocjMgPiB0NCkKICAgICAgICAgIHJldHVybiB0aGlzLm5leHRTdGFydCA9IHIzLCBudWxsOwogICAgICAgIGlmIChoMTAgaW5zdGFuY2VvZiBQMykgewogICAgICAgICAgaWYgKHIzID09IHQ0KSB7CiAgICAgICAgICAgIGlmIChyMyA8IHRoaXMuc2FmZUZyb20pCiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIGxldCBuOCA9IHIzICsgaDEwLmxlbmd0aDsKICAgICAgICAgICAgaWYgKG44IDw9IHRoaXMuc2FmZVRvKSB7CiAgICAgICAgICAgICAgbGV0IGE0ID0gaDEwLnByb3AodzMubG9va0FoZWFkKTsKICAgICAgICAgICAgICBpZiAoIWE0IHx8IG44ICsgYTQgPCB0aGlzLmZyYWdtZW50LnRvKQogICAgICAgICAgICAgICAgcmV0dXJuIGgxMDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5pbmRleFtlNV0rKywgcjMgKyBoMTAubGVuZ3RoID49IE1hdGgubWF4KHRoaXMuc2FmZUZyb20sIHQ0KSAmJiAodGhpcy50cmVlcy5wdXNoKGgxMCksIHRoaXMuc3RhcnQucHVzaChyMyksIHRoaXMuaW5kZXgucHVzaCgwKSk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICB0aGlzLmluZGV4W2U1XSsrLCB0aGlzLm5leHRTdGFydCA9IHIzICsgaDEwLmxlbmd0aDsKICAgICAgfQogICAgfQogIH07CiAgdmFyIEkyNCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSkgewogICAgICB0aGlzLnN0cmVhbSA9IGU1LCB0aGlzLnRva2VucyA9IFtdLCB0aGlzLm1haW5Ub2tlbiA9IG51bGwsIHRoaXMuYWN0aW9ucyA9IFtdLCB0aGlzLnRva2VucyA9IHQ0LnRva2VuaXplcnMubWFwKChzOCkgPT4gbmV3IG0xOSgpKTsKICAgIH0KICAgIGdldEFjdGlvbnModDQpIHsKICAgICAgbGV0IGU1ID0gMCwgczggPSBudWxsLCB7IHBhcnNlcjogaTQgfSA9IHQ0LnAsIHsgdG9rZW5pemVyczogaDEwIH0gPSBpNCwgcjMgPSBpNC5zdGF0ZVNsb3QodDQuc3RhdGUsIDMpLCBuOCA9IHQ0LmN1ckNvbnRleHQgPyB0NC5jdXJDb250ZXh0Lmhhc2ggOiAwLCBhNCA9IDA7CiAgICAgIGZvciAobGV0IGw3ID0gMDsgbDcgPCBoMTAubGVuZ3RoOyBsNysrKSB7CiAgICAgICAgaWYgKCgxIDw8IGw3ICYgcjMpID09IDApCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBsZXQgdTExID0gaDEwW2w3XSwgZjExID0gdGhpcy50b2tlbnNbbDddOwogICAgICAgIGlmICghKHM4ICYmICF1MTEuZmFsbGJhY2spICYmICgodTExLmNvbnRleHR1YWwgfHwgZjExLnN0YXJ0ICE9IHQ0LnBvcyB8fCBmMTEubWFzayAhPSByMyB8fCBmMTEuY29udGV4dCAhPSBuOCkgJiYgKHRoaXMudXBkYXRlQ2FjaGVkVG9rZW4oZjExLCB1MTEsIHQ0KSwgZjExLm1hc2sgPSByMywgZjExLmNvbnRleHQgPSBuOCksIGYxMS5sb29rQWhlYWQgPiBmMTEuZW5kICsgMjUgJiYgKGE0ID0gTWF0aC5tYXgoZjExLmxvb2tBaGVhZCwgYTQpKSwgZjExLnZhbHVlICE9IDApKSB7CiAgICAgICAgICBsZXQgYzE3ID0gZTU7CiAgICAgICAgICBpZiAoZjExLmV4dGVuZGVkID4gLTEgJiYgKGU1ID0gdGhpcy5hZGRBY3Rpb25zKHQ0LCBmMTEuZXh0ZW5kZWQsIGYxMS5lbmQsIGU1KSksIGU1ID0gdGhpcy5hZGRBY3Rpb25zKHQ0LCBmMTEudmFsdWUsIGYxMS5lbmQsIGU1KSwgIXUxMS5leHRlbmQgJiYgKHM4ID0gZjExLCBlNSA+IGMxNykpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKDsgdGhpcy5hY3Rpb25zLmxlbmd0aCA+IGU1OyApCiAgICAgICAgdGhpcy5hY3Rpb25zLnBvcCgpOwogICAgICByZXR1cm4gYTQgJiYgdDQuc2V0TG9va0FoZWFkKGE0KSwgIXM4ICYmIHQ0LnBvcyA9PSB0aGlzLnN0cmVhbS5lbmQgJiYgKHM4ID0gbmV3IG0xOSgpLCBzOC52YWx1ZSA9IHQ0LnAucGFyc2VyLmVvZlRlcm0sIHM4LnN0YXJ0ID0gczguZW5kID0gdDQucG9zLCBlNSA9IHRoaXMuYWRkQWN0aW9ucyh0NCwgczgudmFsdWUsIHM4LmVuZCwgZTUpKSwgdGhpcy5tYWluVG9rZW4gPSBzOCwgdGhpcy5hY3Rpb25zOwogICAgfQogICAgZ2V0TWFpblRva2VuKHQ0KSB7CiAgICAgIGlmICh0aGlzLm1haW5Ub2tlbikKICAgICAgICByZXR1cm4gdGhpcy5tYWluVG9rZW47CiAgICAgIGxldCBlNSA9IG5ldyBtMTkoKSwgeyBwb3M6IHM4LCBwOiBpNCB9ID0gdDQ7CiAgICAgIHJldHVybiBlNS5zdGFydCA9IHM4LCBlNS5lbmQgPSBNYXRoLm1pbihzOCArIDEsIGk0LnN0cmVhbS5lbmQpLCBlNS52YWx1ZSA9IHM4ID09IGk0LnN0cmVhbS5lbmQgPyBpNC5wYXJzZXIuZW9mVGVybSA6IDAsIGU1OwogICAgfQogICAgdXBkYXRlQ2FjaGVkVG9rZW4odDQsIGU1LCBzOCkgewogICAgICBsZXQgaTQgPSB0aGlzLnN0cmVhbS5jbGlwUG9zKHM4LnBvcyk7CiAgICAgIGlmIChlNS50b2tlbih0aGlzLnN0cmVhbS5yZXNldChpNCwgdDQpLCBzOCksIHQ0LnZhbHVlID4gLTEpIHsKICAgICAgICBsZXQgeyBwYXJzZXI6IGgxMCB9ID0gczgucDsKICAgICAgICBmb3IgKGxldCByMyA9IDA7IHIzIDwgaDEwLnNwZWNpYWxpemVkLmxlbmd0aDsgcjMrKykKICAgICAgICAgIGlmIChoMTAuc3BlY2lhbGl6ZWRbcjNdID09IHQ0LnZhbHVlKSB7CiAgICAgICAgICAgIGxldCBuOCA9IGgxMC5zcGVjaWFsaXplcnNbcjNdKHRoaXMuc3RyZWFtLnJlYWQodDQuc3RhcnQsIHQ0LmVuZCksIHM4KTsKICAgICAgICAgICAgaWYgKG44ID49IDAgJiYgczgucC5wYXJzZXIuZGlhbGVjdC5hbGxvd3MobjggPj4gMSkpIHsKICAgICAgICAgICAgICAobjggJiAxKSA9PSAwID8gdDQudmFsdWUgPSBuOCA+PiAxIDogdDQuZXh0ZW5kZWQgPSBuOCA+PiAxOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgIH0gZWxzZQogICAgICAgIHQ0LnZhbHVlID0gMCwgdDQuZW5kID0gdGhpcy5zdHJlYW0uY2xpcFBvcyhpNCArIDEpOwogICAgfQogICAgcHV0QWN0aW9uKHQ0LCBlNSwgczgsIGk0KSB7CiAgICAgIGZvciAobGV0IGgxMCA9IDA7IGgxMCA8IGk0OyBoMTAgKz0gMykKICAgICAgICBpZiAodGhpcy5hY3Rpb25zW2gxMF0gPT0gdDQpCiAgICAgICAgICByZXR1cm4gaTQ7CiAgICAgIHJldHVybiB0aGlzLmFjdGlvbnNbaTQrK10gPSB0NCwgdGhpcy5hY3Rpb25zW2k0KytdID0gZTUsIHRoaXMuYWN0aW9uc1tpNCsrXSA9IHM4LCBpNDsKICAgIH0KICAgIGFkZEFjdGlvbnModDQsIGU1LCBzOCwgaTQpIHsKICAgICAgbGV0IHsgc3RhdGU6IGgxMCB9ID0gdDQsIHsgcGFyc2VyOiByMyB9ID0gdDQucCwgeyBkYXRhOiBuOCB9ID0gcjM7CiAgICAgIGZvciAobGV0IGE0ID0gMDsgYTQgPCAyOyBhNCsrKQogICAgICAgIGZvciAobGV0IGw3ID0gcjMuc3RhdGVTbG90KGgxMCwgYTQgPyAyIDogMSk7IDsgbDcgKz0gMykgewogICAgICAgICAgaWYgKG44W2w3XSA9PSA2NTUzNSkKICAgICAgICAgICAgaWYgKG44W2w3ICsgMV0gPT0gMSkKICAgICAgICAgICAgICBsNyA9IGsxNChuOCwgbDcgKyAyKTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgaTQgPT0gMCAmJiBuOFtsNyArIDFdID09IDIgJiYgKGk0ID0gdGhpcy5wdXRBY3Rpb24oazE0KG44LCBsNyArIDIpLCBlNSwgczgsIGk0KSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIG44W2w3XSA9PSBlNSAmJiAoaTQgPSB0aGlzLnB1dEFjdGlvbihrMTQobjgsIGw3ICsgMSksIGU1LCBzOCwgaTQpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBpNDsKICAgIH0KICB9OwogIHZhciBSMjA7CiAgKGZ1bmN0aW9uKG80KSB7CiAgICBvNFtvNC5EaXN0YW5jZSA9IDVdID0gIkRpc3RhbmNlIiwgbzRbbzQuTWF4UmVtYWluaW5nUGVyU3RlcCA9IDNdID0gIk1heFJlbWFpbmluZ1BlclN0ZXAiLCBvNFtvNC5NaW5CdWZmZXJMZW5ndGhQcnVuZSA9IDUwMF0gPSAiTWluQnVmZmVyTGVuZ3RoUHJ1bmUiLCBvNFtvNC5Gb3JjZVJlZHVjZUxpbWl0ID0gMTBdID0gIkZvcmNlUmVkdWNlTGltaXQiLCBvNFtvNC5DdXREZXB0aCA9IDE1ZTNdID0gIkN1dERlcHRoIiwgbzRbbzQuQ3V0VG8gPSA5ZTNdID0gIkN1dFRvIjsKICB9KShSMjAgfHwgKFIyMCA9IHt9KSk7CiAgdmFyIHoyMCA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0LCBlNSwgczgsIGk0KSB7CiAgICAgIHRoaXMucGFyc2VyID0gdDQsIHRoaXMuaW5wdXQgPSBlNSwgdGhpcy5yYW5nZXMgPSBpNCwgdGhpcy5yZWNvdmVyaW5nID0gMCwgdGhpcy5uZXh0U3RhY2tJRCA9IDk4MTIsIHRoaXMubWluU3RhY2tQb3MgPSAwLCB0aGlzLnJldXNlZCA9IFtdLCB0aGlzLnN0b3BwZWRBdCA9IG51bGwsIHRoaXMuc3RyZWFtID0gbmV3IFQyNChlNSwgaTQpLCB0aGlzLnRva2VucyA9IG5ldyBJMjQodDQsIHRoaXMuc3RyZWFtKSwgdGhpcy50b3BUZXJtID0gdDQudG9wWzFdOwogICAgICBsZXQgeyBmcm9tOiBoMTAgfSA9IGk0WzBdOwogICAgICB0aGlzLnN0YWNrcyA9IFtiMTkuc3RhcnQodGhpcywgdDQudG9wWzBdLCBoMTApXSwgdGhpcy5mcmFnbWVudHMgPSBzOC5sZW5ndGggJiYgdGhpcy5zdHJlYW0uZW5kIC0gaDEwID4gdDQuYnVmZmVyTGVuZ3RoICogNCA/IG5ldyBEMTYoczgsIHQ0Lm5vZGVTZXQpIDogbnVsbDsKICAgIH0KICAgIGdldCBwYXJzZWRQb3MoKSB7CiAgICAgIHJldHVybiB0aGlzLm1pblN0YWNrUG9zOwogICAgfQogICAgYWR2YW5jZSgpIHsKICAgICAgbGV0IHQ0ID0gdGhpcy5zdGFja3MsIGU1ID0gdGhpcy5taW5TdGFja1BvcywgczggPSB0aGlzLnN0YWNrcyA9IFtdLCBpNCwgaDEwOwogICAgICBmb3IgKGxldCByMyA9IDA7IHIzIDwgdDQubGVuZ3RoOyByMysrKSB7CiAgICAgICAgbGV0IG44ID0gdDRbcjNdOwogICAgICAgIGZvciAoOyA7ICkgewogICAgICAgICAgaWYgKHRoaXMudG9rZW5zLm1haW5Ub2tlbiA9IG51bGwsIG44LnBvcyA+IGU1KQogICAgICAgICAgICBzOC5wdXNoKG44KTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAodGhpcy5hZHZhbmNlU3RhY2sobjgsIHM4LCB0NCkpCiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpNCB8fCAoaTQgPSBbXSwgaDEwID0gW10pLCBpNC5wdXNoKG44KTsKICAgICAgICAgICAgICBsZXQgYTQgPSB0aGlzLnRva2Vucy5nZXRNYWluVG9rZW4objgpOwogICAgICAgICAgICAgIGgxMC5wdXNoKGE0LnZhbHVlLCBhNC5lbmQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFzOC5sZW5ndGgpIHsKICAgICAgICBsZXQgcjMgPSBpNCAmJiBZMjYoaTQpOwogICAgICAgIGlmIChyMykKICAgICAgICAgIHJldHVybiB0aGlzLnN0YWNrVG9UcmVlKHIzKTsKICAgICAgICBpZiAodGhpcy5wYXJzZXIuc3RyaWN0KQogICAgICAgICAgdGhyb3cgZDExICYmIGk0ICYmIGNvbnNvbGUubG9nKCJTdHVjayB3aXRoIHRva2VuICIgKyAodGhpcy50b2tlbnMubWFpblRva2VuID8gdGhpcy5wYXJzZXIuZ2V0TmFtZSh0aGlzLnRva2Vucy5tYWluVG9rZW4udmFsdWUpIDogIm5vbmUiKSksIG5ldyBTeW50YXhFcnJvcigiTm8gcGFyc2UgYXQgIiArIGU1KTsKICAgICAgICB0aGlzLnJlY292ZXJpbmcgfHwgKHRoaXMucmVjb3ZlcmluZyA9IDUpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlY292ZXJpbmcgJiYgaTQpIHsKICAgICAgICBsZXQgcjMgPSB0aGlzLnN0b3BwZWRBdCAhPSBudWxsICYmIGk0WzBdLnBvcyA+IHRoaXMuc3RvcHBlZEF0ID8gaTRbMF0gOiB0aGlzLnJ1blJlY292ZXJ5KGk0LCBoMTAsIHM4KTsKICAgICAgICBpZiAocjMpCiAgICAgICAgICByZXR1cm4gdGhpcy5zdGFja1RvVHJlZShyMy5mb3JjZUFsbCgpKTsKICAgICAgfQogICAgICBpZiAodGhpcy5yZWNvdmVyaW5nKSB7CiAgICAgICAgbGV0IHIzID0gdGhpcy5yZWNvdmVyaW5nID09IDEgPyAxIDogdGhpcy5yZWNvdmVyaW5nICogMzsKICAgICAgICBpZiAoczgubGVuZ3RoID4gcjMpCiAgICAgICAgICBmb3IgKHM4LnNvcnQoKG44LCBhNCkgPT4gYTQuc2NvcmUgLSBuOC5zY29yZSk7IHM4Lmxlbmd0aCA+IHIzOyApCiAgICAgICAgICAgIHM4LnBvcCgpOwogICAgICAgIHM4LnNvbWUoKG44KSA9PiBuOC5yZWR1Y2VQb3MgPiBlNSkgJiYgdGhpcy5yZWNvdmVyaW5nLS07CiAgICAgIH0gZWxzZSBpZiAoczgubGVuZ3RoID4gMSkgewogICAgICAgIHQ6CiAgICAgICAgICBmb3IgKGxldCByMyA9IDA7IHIzIDwgczgubGVuZ3RoIC0gMTsgcjMrKykgewogICAgICAgICAgICBsZXQgbjggPSBzOFtyM107CiAgICAgICAgICAgIGZvciAobGV0IGE0ID0gcjMgKyAxOyBhNCA8IHM4Lmxlbmd0aDsgYTQrKykgewogICAgICAgICAgICAgIGxldCBsNyA9IHM4W2E0XTsKICAgICAgICAgICAgICBpZiAobjguc2FtZVN0YXRlKGw3KSB8fCBuOC5idWZmZXIubGVuZ3RoID4gNTAwICYmIGw3LmJ1ZmZlci5sZW5ndGggPiA1MDApCiAgICAgICAgICAgICAgICBpZiAoKG44LnNjb3JlIC0gbDcuc2NvcmUgfHwgbjguYnVmZmVyLmxlbmd0aCAtIGw3LmJ1ZmZlci5sZW5ndGgpID4gMCkKICAgICAgICAgICAgICAgICAgczguc3BsaWNlKGE0LS0sIDEpOwogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIHM4LnNwbGljZShyMy0tLCAxKTsKICAgICAgICAgICAgICAgICAgY29udGludWUgdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMubWluU3RhY2tQb3MgPSBzOFswXS5wb3M7CiAgICAgIGZvciAobGV0IHIzID0gMTsgcjMgPCBzOC5sZW5ndGg7IHIzKyspCiAgICAgICAgczhbcjNdLnBvcyA8IHRoaXMubWluU3RhY2tQb3MgJiYgKHRoaXMubWluU3RhY2tQb3MgPSBzOFtyM10ucG9zKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBzdG9wQXQodDQpIHsKICAgICAgaWYgKHRoaXMuc3RvcHBlZEF0ICE9IG51bGwgJiYgdGhpcy5zdG9wcGVkQXQgPCB0NCkKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2FuJ3QgbW92ZSBzdG9wcGVkQXQgZm9yd2FyZCIpOwogICAgICB0aGlzLnN0b3BwZWRBdCA9IHQ0OwogICAgfQogICAgYWR2YW5jZVN0YWNrKHQ0LCBlNSwgczgpIHsKICAgICAgbGV0IGk0ID0gdDQucG9zLCB7IHBhcnNlcjogaDEwIH0gPSB0aGlzLCByMyA9IGQxMSA/IHRoaXMuc3RhY2tJRCh0NCkgKyAiIC0+ICIgOiAiIjsKICAgICAgaWYgKHRoaXMuc3RvcHBlZEF0ICE9IG51bGwgJiYgaTQgPiB0aGlzLnN0b3BwZWRBdCkKICAgICAgICByZXR1cm4gdDQuZm9yY2VSZWR1Y2UoKSA/IHQ0IDogbnVsbDsKICAgICAgaWYgKHRoaXMuZnJhZ21lbnRzKSB7CiAgICAgICAgbGV0IGw3ID0gdDQuY3VyQ29udGV4dCAmJiB0NC5jdXJDb250ZXh0LnRyYWNrZXIuc3RyaWN0LCB1MTEgPSBsNyA/IHQ0LmN1ckNvbnRleHQuaGFzaCA6IDA7CiAgICAgICAgZm9yIChsZXQgZjExID0gdGhpcy5mcmFnbWVudHMubm9kZUF0KGk0KTsgZjExOyApIHsKICAgICAgICAgIGxldCBjMTcgPSB0aGlzLnBhcnNlci5ub2RlU2V0LnR5cGVzW2YxMS50eXBlLmlkXSA9PSBmMTEudHlwZSA/IGgxMC5nZXRHb3RvKHQ0LnN0YXRlLCBmMTEudHlwZS5pZCkgOiAtMTsKICAgICAgICAgIGlmIChjMTcgPiAtMSAmJiBmMTEubGVuZ3RoICYmICghbDcgfHwgKGYxMS5wcm9wKHczLmNvbnRleHRIYXNoKSB8fCAwKSA9PSB1MTEpKQogICAgICAgICAgICByZXR1cm4gdDQudXNlTm9kZShmMTEsIGMxNyksIGQxMSAmJiBjb25zb2xlLmxvZyhyMyArIHRoaXMuc3RhY2tJRCh0NCkgKyBgICh2aWEgcmV1c2Ugb2YgJHtoMTAuZ2V0TmFtZShmMTEudHlwZS5pZCl9KWApLCB0cnVlOwogICAgICAgICAgaWYgKCEoZjExIGluc3RhbmNlb2YgUDMpIHx8IGYxMS5jaGlsZHJlbi5sZW5ndGggPT0gMCB8fCBmMTEucG9zaXRpb25zWzBdID4gMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBsZXQgcDE4ID0gZjExLmNoaWxkcmVuWzBdOwogICAgICAgICAgaWYgKHAxOCBpbnN0YW5jZW9mIFAzICYmIGYxMS5wb3NpdGlvbnNbMF0gPT0gMCkKICAgICAgICAgICAgZjExID0gcDE4OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IG44ID0gaDEwLnN0YXRlU2xvdCh0NC5zdGF0ZSwgNCk7CiAgICAgIGlmIChuOCA+IDApCiAgICAgICAgcmV0dXJuIHQ0LnJlZHVjZShuOCksIGQxMSAmJiBjb25zb2xlLmxvZyhyMyArIHRoaXMuc3RhY2tJRCh0NCkgKyBgICh2aWEgYWx3YXlzLXJlZHVjZSAke2gxMC5nZXROYW1lKG44ICYgNjU1MzUpfSlgKSwgdHJ1ZTsKICAgICAgaWYgKHQ0LnN0YWNrLmxlbmd0aCA+PSAxNWUzKQogICAgICAgIGZvciAoOyB0NC5zdGFjay5sZW5ndGggPiA5ZTMgJiYgdDQuZm9yY2VSZWR1Y2UoKTsgKQogICAgICAgICAgOwogICAgICBsZXQgYTQgPSB0aGlzLnRva2Vucy5nZXRBY3Rpb25zKHQ0KTsKICAgICAgZm9yIChsZXQgbDcgPSAwOyBsNyA8IGE0Lmxlbmd0aDsgKSB7CiAgICAgICAgbGV0IHUxMSA9IGE0W2w3KytdLCBmMTEgPSBhNFtsNysrXSwgYzE3ID0gYTRbbDcrK10sIHAxOCA9IGw3ID09IGE0Lmxlbmd0aCB8fCAhczgsIGcxMiA9IHAxOCA/IHQ0IDogdDQuc3BsaXQoKTsKICAgICAgICBpZiAoZzEyLmFwcGx5KHUxMSwgZjExLCBjMTcpLCBkMTEgJiYgY29uc29sZS5sb2cocjMgKyB0aGlzLnN0YWNrSUQoZzEyKSArIGAgKHZpYSAkeyh1MTEgJiA2NTUzNikgPT0gMCA/ICJzaGlmdCIgOiBgcmVkdWNlIG9mICR7aDEwLmdldE5hbWUodTExICYgNjU1MzUpfWB9IGZvciAke2gxMC5nZXROYW1lKGYxMSl9IEAgJHtpNH0ke2cxMiA9PSB0NCA/ICIiIDogIiwgc3BsaXQifSlgKSwgcDE4KQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgZzEyLnBvcyA+IGk0ID8gZTUucHVzaChnMTIpIDogczgucHVzaChnMTIpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGFkdmFuY2VGdWxseSh0NCwgZTUpIHsKICAgICAgbGV0IHM4ID0gdDQucG9zOwogICAgICBmb3IgKDsgOyApIHsKICAgICAgICBpZiAoIXRoaXMuYWR2YW5jZVN0YWNrKHQ0LCBudWxsLCBudWxsKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAodDQucG9zID4gczgpCiAgICAgICAgICByZXR1cm4gRzE2KHQ0LCBlNSksIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJ1blJlY292ZXJ5KHQ0LCBlNSwgczgpIHsKICAgICAgbGV0IGk0ID0gbnVsbCwgaDEwID0gZmFsc2U7CiAgICAgIGZvciAobGV0IHIzID0gMDsgcjMgPCB0NC5sZW5ndGg7IHIzKyspIHsKICAgICAgICBsZXQgbjggPSB0NFtyM10sIGE0ID0gZTVbcjMgPDwgMV0sIGw3ID0gZTVbKHIzIDw8IDEpICsgMV0sIHUxMSA9IGQxMSA/IHRoaXMuc3RhY2tJRChuOCkgKyAiIC0+ICIgOiAiIjsKICAgICAgICBpZiAobjguZGVhZEVuZCAmJiAoaDEwIHx8IChoMTAgPSB0cnVlLCBuOC5yZXN0YXJ0KCksIGQxMSAmJiBjb25zb2xlLmxvZyh1MTEgKyB0aGlzLnN0YWNrSUQobjgpICsgIiAocmVzdGFydGVkKSIpLCB0aGlzLmFkdmFuY2VGdWxseShuOCwgczgpKSkpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBsZXQgZjExID0gbjguc3BsaXQoKSwgYzE3ID0gdTExOwogICAgICAgIGZvciAobGV0IHAxOCA9IDA7IGYxMS5mb3JjZVJlZHVjZSgpICYmIHAxOCA8IDEwICYmIChkMTEgJiYgY29uc29sZS5sb2coYzE3ICsgdGhpcy5zdGFja0lEKGYxMSkgKyAiICh2aWEgZm9yY2UtcmVkdWNlKSIpLCAhdGhpcy5hZHZhbmNlRnVsbHkoZjExLCBzOCkpOyBwMTgrKykKICAgICAgICAgIGQxMSAmJiAoYzE3ID0gdGhpcy5zdGFja0lEKGYxMSkgKyAiIC0+ICIpOwogICAgICAgIGZvciAobGV0IHAxOCBvZiBuOC5yZWNvdmVyQnlJbnNlcnQoYTQpKQogICAgICAgICAgZDExICYmIGNvbnNvbGUubG9nKHUxMSArIHRoaXMuc3RhY2tJRChwMTgpICsgIiAodmlhIHJlY292ZXItaW5zZXJ0KSIpLCB0aGlzLmFkdmFuY2VGdWxseShwMTgsIHM4KTsKICAgICAgICB0aGlzLnN0cmVhbS5lbmQgPiBuOC5wb3MgPyAobDcgPT0gbjgucG9zICYmIChsNysrLCBhNCA9IDApLCBuOC5yZWNvdmVyQnlEZWxldGUoYTQsIGw3KSwgZDExICYmIGNvbnNvbGUubG9nKHUxMSArIHRoaXMuc3RhY2tJRChuOCkgKyBgICh2aWEgcmVjb3Zlci1kZWxldGUgJHt0aGlzLnBhcnNlci5nZXROYW1lKGE0KX0pYCksIEcxNihuOCwgczgpKSA6ICghaTQgfHwgaTQuc2NvcmUgPCBuOC5zY29yZSkgJiYgKGk0ID0gbjgpOwogICAgICB9CiAgICAgIHJldHVybiBpNDsKICAgIH0KICAgIHN0YWNrVG9UcmVlKHQ0KSB7CiAgICAgIHJldHVybiB0NC5jbG9zZSgpLCBQMy5idWlsZCh7IGJ1ZmZlcjogUDIyLmNyZWF0ZSh0NCksIG5vZGVTZXQ6IHRoaXMucGFyc2VyLm5vZGVTZXQsIHRvcElEOiB0aGlzLnRvcFRlcm0sIG1heEJ1ZmZlckxlbmd0aDogdGhpcy5wYXJzZXIuYnVmZmVyTGVuZ3RoLCByZXVzZWQ6IHRoaXMucmV1c2VkLCBzdGFydDogdGhpcy5yYW5nZXNbMF0uZnJvbSwgbGVuZ3RoOiB0NC5wb3MgLSB0aGlzLnJhbmdlc1swXS5mcm9tLCBtaW5SZXBlYXRUeXBlOiB0aGlzLnBhcnNlci5taW5SZXBlYXRUZXJtIH0pOwogICAgfQogICAgc3RhY2tJRCh0NCkgewogICAgICBsZXQgZTUgPSAoeTE0IHx8ICh5MTQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSkpLmdldCh0NCk7CiAgICAgIHJldHVybiBlNSB8fCB5MTQuc2V0KHQ0LCBlNSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMubmV4dFN0YWNrSUQrKykpLCBlNSArIHQ0OwogICAgfQogIH07CiAgZnVuY3Rpb24gRzE2KG80LCB0NCkgewogICAgZm9yIChsZXQgZTUgPSAwOyBlNSA8IHQ0Lmxlbmd0aDsgZTUrKykgewogICAgICBsZXQgczggPSB0NFtlNV07CiAgICAgIGlmIChzOC5wb3MgPT0gbzQucG9zICYmIHM4LnNhbWVTdGF0ZShvNCkpIHsKICAgICAgICB0NFtlNV0uc2NvcmUgPCBvNC5zY29yZSAmJiAodDRbZTVdID0gbzQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgdDQucHVzaChvNCk7CiAgfQogIHZhciBNMTggPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcih0NCwgZTUsIHM4KSB7CiAgICAgIHRoaXMuc291cmNlID0gdDQsIHRoaXMuZmxhZ3MgPSBlNSwgdGhpcy5kaXNhYmxlZCA9IHM4OwogICAgfQogICAgYWxsb3dzKHQ0KSB7CiAgICAgIHJldHVybiAhdGhpcy5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkW3Q0XSA9PSAwOwogICAgfQogIH07CiAgdmFyIEMxMyA9IChvNCkgPT4gbzQ7CiAgdmFyIEUxMyA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIHRoaXMuc3RhcnQgPSB0NC5zdGFydCwgdGhpcy5zaGlmdCA9IHQ0LnNoaWZ0IHx8IEMxMywgdGhpcy5yZWR1Y2UgPSB0NC5yZWR1Y2UgfHwgQzEzLCB0aGlzLnJldXNlID0gdDQucmV1c2UgfHwgQzEzLCB0aGlzLmhhc2ggPSB0NC5oYXNoIHx8ICgoKSA9PiAwKSwgdGhpcy5zdHJpY3QgPSB0NC5zdHJpY3QgIT09IGZhbHNlOwogICAgfQogIH07CiAgdmFyIFMxNyA9IGNsYXNzIGV4dGVuZHMgeWU1IHsKICAgIGNvbnN0cnVjdG9yKHQ0KSB7CiAgICAgIGlmIChzdXBlcigpLCB0aGlzLndyYXBwZXJzID0gW10sIHQ0LnZlcnNpb24gIT0gMTQpCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBhcnNlciB2ZXJzaW9uICgke3Q0LnZlcnNpb259KSBkb2Vzbid0IG1hdGNoIHJ1bnRpbWUgdmVyc2lvbiAoJHsxNH0pYCk7CiAgICAgIGxldCBlNSA9IHQ0Lm5vZGVOYW1lcy5zcGxpdCgiICIpOwogICAgICB0aGlzLm1pblJlcGVhdFRlcm0gPSBlNS5sZW5ndGg7CiAgICAgIGZvciAobGV0IG44ID0gMDsgbjggPCB0NC5yZXBlYXROb2RlQ291bnQ7IG44KyspCiAgICAgICAgZTUucHVzaCgiIik7CiAgICAgIGxldCBzOCA9IE9iamVjdC5rZXlzKHQ0LnRvcFJ1bGVzKS5tYXAoKG44KSA9PiB0NC50b3BSdWxlc1tuOF1bMV0pLCBpNCA9IFtdOwogICAgICBmb3IgKGxldCBuOCA9IDA7IG44IDwgZTUubGVuZ3RoOyBuOCsrKQogICAgICAgIGk0LnB1c2goW10pOwogICAgICBmdW5jdGlvbiBoMTAobjgsIGE0LCBsNykgewogICAgICAgIGk0W244XS5wdXNoKFthNCwgYTQuZGVzZXJpYWxpemUoU3RyaW5nKGw3KSldKTsKICAgICAgfQogICAgICBpZiAodDQubm9kZVByb3BzKQogICAgICAgIGZvciAobGV0IG44IG9mIHQ0Lm5vZGVQcm9wcykgewogICAgICAgICAgbGV0IGE0ID0gbjhbMF07CiAgICAgICAgICB0eXBlb2YgYTQgPT0gInN0cmluZyIgJiYgKGE0ID0gdzNbYTRdKTsKICAgICAgICAgIGZvciAobGV0IGw3ID0gMTsgbDcgPCBuOC5sZW5ndGg7ICkgewogICAgICAgICAgICBsZXQgdTExID0gbjhbbDcrK107CiAgICAgICAgICAgIGlmICh1MTEgPj0gMCkKICAgICAgICAgICAgICBoMTAodTExLCBhNCwgbjhbbDcrK10pOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBsZXQgZjExID0gbjhbbDcgKyAtdTExXTsKICAgICAgICAgICAgICBmb3IgKGxldCBjMTcgPSAtdTExOyBjMTcgPiAwOyBjMTctLSkKICAgICAgICAgICAgICAgIGgxMChuOFtsNysrXSwgYTQsIGYxMSk7CiAgICAgICAgICAgICAgbDcrKzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgdGhpcy5ub2RlU2V0ID0gbmV3IFozKGU1Lm1hcCgobjgsIGE0KSA9PiBOMy5kZWZpbmUoeyBuYW1lOiBhNCA+PSB0aGlzLm1pblJlcGVhdFRlcm0gPyB2b2lkIDAgOiBuOCwgaWQ6IGE0LCBwcm9wczogaTRbYTRdLCB0b3A6IHM4LmluZGV4T2YoYTQpID4gLTEsIGVycm9yOiBhNCA9PSAwLCBza2lwcGVkOiB0NC5za2lwcGVkTm9kZXMgJiYgdDQuc2tpcHBlZE5vZGVzLmluZGV4T2YoYTQpID4gLTEgfSkpKSwgdDQucHJvcFNvdXJjZXMgJiYgKHRoaXMubm9kZVNldCA9IHRoaXMubm9kZVNldC5leHRlbmQoLi4udDQucHJvcFNvdXJjZXMpKSwgdGhpcy5zdHJpY3QgPSBmYWxzZSwgdGhpcy5idWZmZXJMZW5ndGggPSBJZTU7CiAgICAgIGxldCByMyA9IEExNih0NC50b2tlbkRhdGEpOwogICAgICB0aGlzLmNvbnRleHQgPSB0NC5jb250ZXh0LCB0aGlzLnNwZWNpYWxpemVyU3BlY3MgPSB0NC5zcGVjaWFsaXplZCB8fCBbXSwgdGhpcy5zcGVjaWFsaXplZCA9IG5ldyBVaW50MTZBcnJheSh0aGlzLnNwZWNpYWxpemVyU3BlY3MubGVuZ3RoKTsKICAgICAgZm9yIChsZXQgbjggPSAwOyBuOCA8IHRoaXMuc3BlY2lhbGl6ZXJTcGVjcy5sZW5ndGg7IG44KyspCiAgICAgICAgdGhpcy5zcGVjaWFsaXplZFtuOF0gPSB0aGlzLnNwZWNpYWxpemVyU3BlY3NbbjhdLnRlcm07CiAgICAgIHRoaXMuc3BlY2lhbGl6ZXJzID0gdGhpcy5zcGVjaWFsaXplclNwZWNzLm1hcChIMTcpLCB0aGlzLnN0YXRlcyA9IEExNih0NC5zdGF0ZXMsIFVpbnQzMkFycmF5KSwgdGhpcy5kYXRhID0gQTE2KHQ0LnN0YXRlRGF0YSksIHRoaXMuZ290byA9IEExNih0NC5nb3RvKSwgdGhpcy5tYXhUZXJtID0gdDQubWF4VGVybSwgdGhpcy50b2tlbml6ZXJzID0gdDQudG9rZW5pemVycy5tYXAoKG44KSA9PiB0eXBlb2YgbjggPT0gIm51bWJlciIgPyBuZXcgeDE4KHIzLCBuOCkgOiBuOCksIHRoaXMudG9wUnVsZXMgPSB0NC50b3BSdWxlcywgdGhpcy5kaWFsZWN0cyA9IHQ0LmRpYWxlY3RzIHx8IHt9LCB0aGlzLmR5bmFtaWNQcmVjZWRlbmNlcyA9IHQ0LmR5bmFtaWNQcmVjZWRlbmNlcyB8fCBudWxsLCB0aGlzLnRva2VuUHJlY1RhYmxlID0gdDQudG9rZW5QcmVjLCB0aGlzLnRlcm1OYW1lcyA9IHQ0LnRlcm1OYW1lcyB8fCBudWxsLCB0aGlzLm1heE5vZGUgPSB0aGlzLm5vZGVTZXQudHlwZXMubGVuZ3RoIC0gMSwgdGhpcy5kaWFsZWN0ID0gdGhpcy5wYXJzZURpYWxlY3QoKSwgdGhpcy50b3AgPSB0aGlzLnRvcFJ1bGVzW09iamVjdC5rZXlzKHRoaXMudG9wUnVsZXMpWzBdXTsKICAgIH0KICAgIGNyZWF0ZVBhcnNlKHQ0LCBlNSwgczgpIHsKICAgICAgbGV0IGk0ID0gbmV3IHoyMCh0aGlzLCB0NCwgZTUsIHM4KTsKICAgICAgZm9yIChsZXQgaDEwIG9mIHRoaXMud3JhcHBlcnMpCiAgICAgICAgaTQgPSBoMTAoaTQsIHQ0LCBlNSwgczgpOwogICAgICByZXR1cm4gaTQ7CiAgICB9CiAgICBnZXRHb3RvKHQ0LCBlNSwgczggPSBmYWxzZSkgewogICAgICBsZXQgaTQgPSB0aGlzLmdvdG87CiAgICAgIGlmIChlNSA+PSBpNFswXSkKICAgICAgICByZXR1cm4gLTE7CiAgICAgIGZvciAobGV0IGgxMCA9IGk0W2U1ICsgMV07IDsgKSB7CiAgICAgICAgbGV0IHIzID0gaTRbaDEwKytdLCBuOCA9IHIzICYgMSwgYTQgPSBpNFtoMTArK107CiAgICAgICAgaWYgKG44ICYmIHM4KQogICAgICAgICAgcmV0dXJuIGE0OwogICAgICAgIGZvciAobGV0IGw3ID0gaDEwICsgKHIzID4+IDEpOyBoMTAgPCBsNzsgaDEwKyspCiAgICAgICAgICBpZiAoaTRbaDEwXSA9PSB0NCkKICAgICAgICAgICAgcmV0dXJuIGE0OwogICAgICAgIGlmIChuOCkKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgfQogICAgaGFzQWN0aW9uKHQ0LCBlNSkgewogICAgICBsZXQgczggPSB0aGlzLmRhdGE7CiAgICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCAyOyBpNCsrKQogICAgICAgIGZvciAobGV0IGgxMCA9IHRoaXMuc3RhdGVTbG90KHQ0LCBpNCA/IDIgOiAxKSwgcjM7IDsgaDEwICs9IDMpIHsKICAgICAgICAgIGlmICgocjMgPSBzOFtoMTBdKSA9PSA2NTUzNSkKICAgICAgICAgICAgaWYgKHM4W2gxMCArIDFdID09IDEpCiAgICAgICAgICAgICAgcjMgPSBzOFtoMTAgPSBrMTQoczgsIGgxMCArIDIpXTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgaWYgKHM4W2gxMCArIDFdID09IDIpCiAgICAgICAgICAgICAgICByZXR1cm4gazE0KHM4LCBoMTAgKyAyKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKHIzID09IGU1IHx8IHIzID09IDApCiAgICAgICAgICAgIHJldHVybiBrMTQoczgsIGgxMCArIDEpOwogICAgICAgIH0KICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBzdGF0ZVNsb3QodDQsIGU1KSB7CiAgICAgIHJldHVybiB0aGlzLnN0YXRlc1t0NCAqIDYgKyBlNV07CiAgICB9CiAgICBzdGF0ZUZsYWcodDQsIGU1KSB7CiAgICAgIHJldHVybiAodGhpcy5zdGF0ZVNsb3QodDQsIDApICYgZTUpID4gMDsKICAgIH0KICAgIHZhbGlkQWN0aW9uKHQ0LCBlNSkgewogICAgICBpZiAoZTUgPT0gdGhpcy5zdGF0ZVNsb3QodDQsIDQpKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBmb3IgKGxldCBzOCA9IHRoaXMuc3RhdGVTbG90KHQ0LCAxKTsgOyBzOCArPSAzKSB7CiAgICAgICAgaWYgKHRoaXMuZGF0YVtzOF0gPT0gNjU1MzUpCiAgICAgICAgICBpZiAodGhpcy5kYXRhW3M4ICsgMV0gPT0gMSkKICAgICAgICAgICAgczggPSBrMTQodGhpcy5kYXRhLCBzOCArIDIpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKGU1ID09IGsxNCh0aGlzLmRhdGEsIHM4ICsgMSkpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgbmV4dFN0YXRlcyh0NCkgewogICAgICBsZXQgZTUgPSBbXTsKICAgICAgZm9yIChsZXQgczggPSB0aGlzLnN0YXRlU2xvdCh0NCwgMSk7IDsgczggKz0gMykgewogICAgICAgIGlmICh0aGlzLmRhdGFbczhdID09IDY1NTM1KQogICAgICAgICAgaWYgKHRoaXMuZGF0YVtzOCArIDFdID09IDEpCiAgICAgICAgICAgIHM4ID0gazE0KHRoaXMuZGF0YSwgczggKyAyKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaWYgKCh0aGlzLmRhdGFbczggKyAyXSAmIDEpID09IDApIHsKICAgICAgICAgIGxldCBpNCA9IHRoaXMuZGF0YVtzOCArIDFdOwogICAgICAgICAgZTUuc29tZSgoaDEwLCByMykgPT4gcjMgJiAxICYmIGgxMCA9PSBpNCkgfHwgZTUucHVzaCh0aGlzLmRhdGFbczhdLCBpNCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBlNTsKICAgIH0KICAgIG92ZXJyaWRlcyh0NCwgZTUpIHsKICAgICAgbGV0IHM4ID0gVTIxKHRoaXMuZGF0YSwgdGhpcy50b2tlblByZWNUYWJsZSwgZTUpOwogICAgICByZXR1cm4gczggPCAwIHx8IFUyMSh0aGlzLmRhdGEsIHRoaXMudG9rZW5QcmVjVGFibGUsIHQ0KSA8IHM4OwogICAgfQogICAgY29uZmlndXJlKHQ0KSB7CiAgICAgIGxldCBlNSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTMTcucHJvdG90eXBlKSwgdGhpcyk7CiAgICAgIGlmICh0NC5wcm9wcyAmJiAoZTUubm9kZVNldCA9IHRoaXMubm9kZVNldC5leHRlbmQoLi4udDQucHJvcHMpKSwgdDQudG9wKSB7CiAgICAgICAgbGV0IHM4ID0gdGhpcy50b3BSdWxlc1t0NC50b3BdOwogICAgICAgIGlmICghczgpCiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCB0b3AgcnVsZSBuYW1lICR7dDQudG9wfWApOwogICAgICAgIGU1LnRvcCA9IHM4OwogICAgICB9CiAgICAgIHJldHVybiB0NC50b2tlbml6ZXJzICYmIChlNS50b2tlbml6ZXJzID0gdGhpcy50b2tlbml6ZXJzLm1hcCgoczgpID0+IHsKICAgICAgICBsZXQgaTQgPSB0NC50b2tlbml6ZXJzLmZpbmQoKGgxMCkgPT4gaDEwLmZyb20gPT0gczgpOwogICAgICAgIHJldHVybiBpNCA/IGk0LnRvIDogczg7CiAgICAgIH0pKSwgdDQuc3BlY2lhbGl6ZXJzICYmIChlNS5zcGVjaWFsaXplcnMgPSB0aGlzLnNwZWNpYWxpemVycy5zbGljZSgpLCBlNS5zcGVjaWFsaXplclNwZWNzID0gdGhpcy5zcGVjaWFsaXplclNwZWNzLm1hcCgoczgsIGk0KSA9PiB7CiAgICAgICAgbGV0IGgxMCA9IHQ0LnNwZWNpYWxpemVycy5maW5kKChuOCkgPT4gbjguZnJvbSA9PSBzOC5leHRlcm5hbCk7CiAgICAgICAgaWYgKCFoMTApCiAgICAgICAgICByZXR1cm4gczg7CiAgICAgICAgbGV0IHIzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzOCksIHsgZXh0ZXJuYWw6IGgxMC50byB9KTsKICAgICAgICByZXR1cm4gZTUuc3BlY2lhbGl6ZXJzW2k0XSA9IEgxNyhyMyksIHIzOwogICAgICB9KSksIHQ0LmNvbnRleHRUcmFja2VyICYmIChlNS5jb250ZXh0ID0gdDQuY29udGV4dFRyYWNrZXIpLCB0NC5kaWFsZWN0ICYmIChlNS5kaWFsZWN0ID0gdGhpcy5wYXJzZURpYWxlY3QodDQuZGlhbGVjdCkpLCB0NC5zdHJpY3QgIT0gbnVsbCAmJiAoZTUuc3RyaWN0ID0gdDQuc3RyaWN0KSwgdDQud3JhcCAmJiAoZTUud3JhcHBlcnMgPSBlNS53cmFwcGVycy5jb25jYXQodDQud3JhcCkpLCB0NC5idWZmZXJMZW5ndGggIT0gbnVsbCAmJiAoZTUuYnVmZmVyTGVuZ3RoID0gdDQuYnVmZmVyTGVuZ3RoKSwgZTU7CiAgICB9CiAgICBoYXNXcmFwcGVycygpIHsKICAgICAgcmV0dXJuIHRoaXMud3JhcHBlcnMubGVuZ3RoID4gMDsKICAgIH0KICAgIGdldE5hbWUodDQpIHsKICAgICAgcmV0dXJuIHRoaXMudGVybU5hbWVzID8gdGhpcy50ZXJtTmFtZXNbdDRdIDogU3RyaW5nKHQ0IDw9IHRoaXMubWF4Tm9kZSAmJiB0aGlzLm5vZGVTZXQudHlwZXNbdDRdLm5hbWUgfHwgdDQpOwogICAgfQogICAgZ2V0IGVvZlRlcm0oKSB7CiAgICAgIHJldHVybiB0aGlzLm1heE5vZGUgKyAxOwogICAgfQogICAgZ2V0IHRvcE5vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLm5vZGVTZXQudHlwZXNbdGhpcy50b3BbMV1dOwogICAgfQogICAgZHluYW1pY1ByZWNlZGVuY2UodDQpIHsKICAgICAgbGV0IGU1ID0gdGhpcy5keW5hbWljUHJlY2VkZW5jZXM7CiAgICAgIHJldHVybiBlNSA9PSBudWxsID8gMCA6IGU1W3Q0XSB8fCAwOwogICAgfQogICAgcGFyc2VEaWFsZWN0KHQ0KSB7CiAgICAgIGxldCBlNSA9IE9iamVjdC5rZXlzKHRoaXMuZGlhbGVjdHMpLCBzOCA9IGU1Lm1hcCgoKSA9PiBmYWxzZSk7CiAgICAgIGlmICh0NCkKICAgICAgICBmb3IgKGxldCBoMTAgb2YgdDQuc3BsaXQoIiAiKSkgewogICAgICAgICAgbGV0IHIzID0gZTUuaW5kZXhPZihoMTApOwogICAgICAgICAgcjMgPj0gMCAmJiAoczhbcjNdID0gdHJ1ZSk7CiAgICAgICAgfQogICAgICBsZXQgaTQgPSBudWxsOwogICAgICBmb3IgKGxldCBoMTAgPSAwOyBoMTAgPCBlNS5sZW5ndGg7IGgxMCsrKQogICAgICAgIGlmICghczhbaDEwXSkKICAgICAgICAgIGZvciAobGV0IHIzID0gdGhpcy5kaWFsZWN0c1tlNVtoMTBdXSwgbjg7IChuOCA9IHRoaXMuZGF0YVtyMysrXSkgIT0gNjU1MzU7ICkKICAgICAgICAgICAgKGk0IHx8IChpNCA9IG5ldyBVaW50OEFycmF5KHRoaXMubWF4VGVybSArIDEpKSlbbjhdID0gMTsKICAgICAgcmV0dXJuIG5ldyBNMTgodDQsIHM4LCBpNCk7CiAgICB9CiAgICBzdGF0aWMgZGVzZXJpYWxpemUodDQpIHsKICAgICAgcmV0dXJuIG5ldyBTMTcodDQpOwogICAgfQogIH07CiAgZnVuY3Rpb24gazE0KG80LCB0NCkgewogICAgcmV0dXJuIG80W3Q0XSB8IG80W3Q0ICsgMV0gPDwgMTY7CiAgfQogIGZ1bmN0aW9uIFUyMShvNCwgdDQsIGU1KSB7CiAgICBmb3IgKGxldCBzOCA9IHQ0LCBpNDsgKGk0ID0gbzRbczhdKSAhPSA2NTUzNTsgczgrKykKICAgICAgaWYgKGk0ID09IGU1KQogICAgICAgIHJldHVybiBzOCAtIHQ0OwogICAgcmV0dXJuIC0xOwogIH0KICBmdW5jdGlvbiBZMjYobzQpIHsKICAgIGxldCB0NCA9IG51bGw7CiAgICBmb3IgKGxldCBlNSBvZiBvNCkgewogICAgICBsZXQgczggPSBlNS5wLnN0b3BwZWRBdDsKICAgICAgKGU1LnBvcyA9PSBlNS5wLnN0cmVhbS5lbmQgfHwgczggIT0gbnVsbCAmJiBlNS5wb3MgPiBzOCkgJiYgZTUucC5wYXJzZXIuc3RhdGVGbGFnKGU1LnN0YXRlLCAyKSAmJiAoIXQ0IHx8IHQ0LnNjb3JlIDwgZTUuc2NvcmUpICYmICh0NCA9IGU1KTsKICAgIH0KICAgIHJldHVybiB0NDsKICB9CiAgZnVuY3Rpb24gSDE3KG80KSB7CiAgICBpZiAobzQuZXh0ZXJuYWwpIHsKICAgICAgbGV0IHQ0ID0gbzQuZXh0ZW5kID8gMSA6IDA7CiAgICAgIHJldHVybiAoZTUsIHM4KSA9PiBvNC5leHRlcm5hbChlNSwgczgpIDw8IDEgfCB0NDsKICAgIH0KICAgIHJldHVybiBvNC5nZXQ7CiAgfQoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AbGV6ZXIvamF2YXNjcmlwdEAxLjAuMi9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBYkdWNlpYSXZZMjl0Ylc5dUxFQnNaWHBsY2k5b2FXZG9iR2xuYUhRL2Rlbm8vamF2YXNjcmlwdC5qcwogIHZhciBYMjAgPSAxOwogIHZhciBTMTggPSAyODE7CiAgdmFyIFAyMyA9IDI7CiAgdmFyIGMxMyA9IDM7CiAgdmFyIFQyNSA9IDI4MjsKICB2YXIgajE0ID0gNDsKICB2YXIgcDE2ID0gMjgzOwogIHZhciB0MyA9IDI4NDsKICB2YXIgVzEzID0gMjg2OwogIHZhciBnOCA9IDI4NzsKICB2YXIgZDEyID0gNTsKICB2YXIgeDE5ID0gNjsKICB2YXIgbDUgPSAxOwogIHZhciBfMjIgPSBbOSwgMTAsIDExLCAxMiwgMTMsIDMyLCAxMzMsIDE2MCwgNTc2MCwgODE5MiwgODE5MywgODE5NCwgODE5NSwgODE5NiwgODE5NywgODE5OCwgODE5OSwgODIwMCwgODIwMSwgODIwMiwgODIzMiwgODIzMywgODIzOSwgODI4NywgMTIyODhdOwogIHZhciBaMTggPSAxMjU7CiAgdmFyIGIyMCA9IDEyMzsKICB2YXIgczYgPSA1OTsKICB2YXIgbzMgPSA0NzsKICB2YXIgcTE1ID0gNDI7CiAgdmFyIEcxNyA9IDQzOwogIHZhciBmMTAgPSA0NTsKICB2YXIgeTE1ID0gMzY7CiAgdmFyIG0yMCA9IDk2OwogIHZhciB6MjEgPSA5MjsKICB2YXIgaDYgPSBuZXcgRTEzKHsgc3RhcnQ6IGZhbHNlLCBzaGlmdChRMTcsIGk0KSB7CiAgICByZXR1cm4gaTQgPT0gZDEyIHx8IGk0ID09IHgxOSB8fCBpNCA9PSBXMTMgPyBRMTcgOiBpNCA9PSBnODsKICB9LCBzdHJpY3Q6IGZhbHNlIH0pOwogIHZhciBVMjIgPSBuZXcgTDE2KChRMTcsIGk0KSA9PiB7CiAgICBsZXQgeyBuZXh0OiAkMjEgfSA9IFExNzsKICAgICgkMjEgPT0gWjE4IHx8ICQyMSA9PSAtMSB8fCBpNC5jb250ZXh0KSAmJiBpNC5jYW5TaGlmdCh0MykgJiYgUTE3LmFjY2VwdFRva2VuKHQzKTsKICB9LCB7IGNvbnRleHR1YWw6IHRydWUsIGZhbGxiYWNrOiB0cnVlIH0pOwogIHZhciBrMTUgPSBuZXcgTDE2KChRMTcsIGk0KSA9PiB7CiAgICBsZXQgeyBuZXh0OiAkMjEgfSA9IFExNywgYTQ7CiAgICBfMjIuaW5kZXhPZigkMjEpID4gLTEgfHwgJDIxID09IG8zICYmICgoYTQgPSBRMTcucGVlaygxKSkgPT0gbzMgfHwgYTQgPT0gcTE1KSB8fCAkMjEgIT0gWjE4ICYmICQyMSAhPSBzNiAmJiAkMjEgIT0gLTEgJiYgIWk0LmNvbnRleHQgJiYgaTQuY2FuU2hpZnQoUzE4KSAmJiBRMTcuYWNjZXB0VG9rZW4oUzE4KTsKICB9LCB7IGNvbnRleHR1YWw6IHRydWUgfSk7CiAgdmFyIHUxMCA9IG5ldyBMMTYoKFExNywgaTQpID0+IHsKICAgIGxldCB7IG5leHQ6ICQyMSB9ID0gUTE3OwogICAgaWYgKCgkMjEgPT0gRzE3IHx8ICQyMSA9PSBmMTApICYmIChRMTcuYWR2YW5jZSgpLCAkMjEgPT0gUTE3Lm5leHQpKSB7CiAgICAgIFExNy5hZHZhbmNlKCk7CiAgICAgIGxldCBhNCA9ICFpNC5jb250ZXh0ICYmIGk0LmNhblNoaWZ0KFAyMyk7CiAgICAgIFExNy5hY2NlcHRUb2tlbihhNCA/IFAyMyA6IGMxMyk7CiAgICB9CiAgfSwgeyBjb250ZXh0dWFsOiB0cnVlIH0pOwogIHZhciB3MjAgPSBuZXcgTDE2KChRMTcpID0+IHsKICAgIGZvciAobGV0IGk0ID0gZmFsc2UsICQyMSA9IDA7IDsgJDIxKyspIHsKICAgICAgbGV0IHsgbmV4dDogYTQgfSA9IFExNzsKICAgICAgaWYgKGE0IDwgMCkgewogICAgICAgICQyMSAmJiBRMTcuYWNjZXB0VG9rZW4oVDI1KTsKICAgICAgICBicmVhazsKICAgICAgfSBlbHNlIGlmIChhNCA9PSBtMjApIHsKICAgICAgICAkMjEgPyBRMTcuYWNjZXB0VG9rZW4oVDI1KSA6IFExNy5hY2NlcHRUb2tlbihwMTYsIDEpOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgaWYgKGE0ID09IGIyMCAmJiBpNCkgewogICAgICAgICQyMSA9PSAxID8gUTE3LmFjY2VwdFRva2VuKGoxNCwgMSkgOiBRMTcuYWNjZXB0VG9rZW4oVDI1LCAtMSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSBpZiAoYTQgPT0gMTAgJiYgJDIxKSB7CiAgICAgICAgUTE3LmFkdmFuY2UoKSwgUTE3LmFjY2VwdFRva2VuKFQyNSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZQogICAgICAgIGE0ID09IHoyMSAmJiBRMTcuYWR2YW5jZSgpOwogICAgICBpNCA9IGE0ID09IHkxNSwgUTE3LmFkdmFuY2UoKTsKICAgIH0KICB9KTsKICB2YXIgWTI3ID0gbmV3IEwxNigoUTE3LCBpNCkgPT4gewogICAgaWYgKCEoUTE3Lm5leHQgIT0gMTAxIHx8ICFpNC5kaWFsZWN0RW5hYmxlZChsNSkpKSB7CiAgICAgIFExNy5hZHZhbmNlKCk7CiAgICAgIGZvciAobGV0ICQyMSA9IDA7ICQyMSA8IDY7ICQyMSsrKSB7CiAgICAgICAgaWYgKFExNy5uZXh0ICE9ICJ4dGVuZHMiLmNoYXJDb2RlQXQoJDIxKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBRMTcuYWR2YW5jZSgpOwogICAgICB9CiAgICAgIFExNy5uZXh0ID49IDU3ICYmIFExNy5uZXh0IDw9IDY1IHx8IFExNy5uZXh0ID49IDQ4ICYmIFExNy5uZXh0IDw9IDkwIHx8IFExNy5uZXh0ID09IDk1IHx8IFExNy5uZXh0ID49IDk3ICYmIFExNy5uZXh0IDw9IDEyMiB8fCBRMTcubmV4dCA+IDE2MCB8fCBRMTcuYWNjZXB0VG9rZW4oWDIwKTsKICAgIH0KICB9KTsKICB2YXIgdjEzID0gJDEyKHsgImdldCBzZXQgYXN5bmMgc3RhdGljIjogbjUubW9kaWZpZXIsICJmb3Igd2hpbGUgZG8gaWYgZWxzZSBzd2l0Y2ggdHJ5IGNhdGNoIGZpbmFsbHkgcmV0dXJuIHRocm93IGJyZWFrIGNvbnRpbnVlIGRlZmF1bHQgY2FzZSI6IG41LmNvbnRyb2xLZXl3b3JkLCAiaW4gb2YgYXdhaXQgeWllbGQgdm9pZCB0eXBlb2YgZGVsZXRlIGluc3RhbmNlb2YiOiBuNS5vcGVyYXRvcktleXdvcmQsICJsZXQgdmFyIGNvbnN0IGZ1bmN0aW9uIGNsYXNzIGV4dGVuZHMiOiBuNS5kZWZpbml0aW9uS2V5d29yZCwgImltcG9ydCBleHBvcnQgZnJvbSI6IG41Lm1vZHVsZUtleXdvcmQsICJ3aXRoIGRlYnVnZ2VyIGFzIG5ldyI6IG41LmtleXdvcmQsIFRlbXBsYXRlU3RyaW5nOiBuNS5zcGVjaWFsKG41LnN0cmluZyksIHN1cGVyOiBuNS5hdG9tLCBCb29sZWFuTGl0ZXJhbDogbjUuYm9vbCwgdGhpczogbjUuc2VsZiwgbnVsbDogbjUubnVsbCwgU3RhcjogbjUubW9kaWZpZXIsIFZhcmlhYmxlTmFtZTogbjUudmFyaWFibGVOYW1lLCAiQ2FsbEV4cHJlc3Npb24vVmFyaWFibGVOYW1lIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbi9WYXJpYWJsZU5hbWUiOiBuNS5mdW5jdGlvbihuNS52YXJpYWJsZU5hbWUpLCBWYXJpYWJsZURlZmluaXRpb246IG41LmRlZmluaXRpb24objUudmFyaWFibGVOYW1lKSwgTGFiZWw6IG41LmxhYmVsTmFtZSwgUHJvcGVydHlOYW1lOiBuNS5wcm9wZXJ0eU5hbWUsIFByaXZhdGVQcm9wZXJ0eU5hbWU6IG41LnNwZWNpYWwobjUucHJvcGVydHlOYW1lKSwgIkNhbGxFeHByZXNzaW9uL01lbWJlckV4cHJlc3Npb24vUHJvcGVydHlOYW1lIjogbjUuZnVuY3Rpb24objUucHJvcGVydHlOYW1lKSwgIkZ1bmN0aW9uRGVjbGFyYXRpb24vVmFyaWFibGVEZWZpbml0aW9uIjogbjUuZnVuY3Rpb24objUuZGVmaW5pdGlvbihuNS52YXJpYWJsZU5hbWUpKSwgIkNsYXNzRGVjbGFyYXRpb24vVmFyaWFibGVEZWZpbml0aW9uIjogbjUuZGVmaW5pdGlvbihuNS5jbGFzc05hbWUpLCBQcm9wZXJ0eURlZmluaXRpb246IG41LmRlZmluaXRpb24objUucHJvcGVydHlOYW1lKSwgUHJpdmF0ZVByb3BlcnR5RGVmaW5pdGlvbjogbjUuZGVmaW5pdGlvbihuNS5zcGVjaWFsKG41LnByb3BlcnR5TmFtZSkpLCBVcGRhdGVPcDogbjUudXBkYXRlT3BlcmF0b3IsIExpbmVDb21tZW50OiBuNS5saW5lQ29tbWVudCwgQmxvY2tDb21tZW50OiBuNS5ibG9ja0NvbW1lbnQsIE51bWJlcjogbjUubnVtYmVyLCBTdHJpbmc6IG41LnN0cmluZywgQXJpdGhPcDogbjUuYXJpdGhtZXRpY09wZXJhdG9yLCBMb2dpY09wOiBuNS5sb2dpY09wZXJhdG9yLCBCaXRPcDogbjUuYml0d2lzZU9wZXJhdG9yLCBDb21wYXJlT3A6IG41LmNvbXBhcmVPcGVyYXRvciwgUmVnRXhwOiBuNS5yZWdleHAsIEVxdWFsczogbjUuZGVmaW5pdGlvbk9wZXJhdG9yLCBBcnJvdzogbjUuZnVuY3Rpb24objUucHVuY3R1YXRpb24pLCAiOiBTcHJlYWQiOiBuNS5wdW5jdHVhdGlvbiwgIiggKSI6IG41LnBhcmVuLCAiWyBdIjogbjUuc3F1YXJlQnJhY2tldCwgInsgfSI6IG41LmJyYWNlLCAiSW50ZXJwb2xhdGlvblN0YXJ0IEludGVycG9sYXRpb25FbmQiOiBuNS5zcGVjaWFsKG41LmJyYWNlKSwgIi4iOiBuNS5kZXJlZk9wZXJhdG9yLCAiLCA7IjogbjUuc2VwYXJhdG9yLCBUeXBlTmFtZTogbjUudHlwZU5hbWUsIFR5cGVEZWZpbml0aW9uOiBuNS5kZWZpbml0aW9uKG41LnR5cGVOYW1lKSwgInR5cGUgZW51bSBpbnRlcmZhY2UgaW1wbGVtZW50cyBuYW1lc3BhY2UgbW9kdWxlIGRlY2xhcmUiOiBuNS5kZWZpbml0aW9uS2V5d29yZCwgImFic3RyYWN0IGdsb2JhbCBQcml2YWN5IHJlYWRvbmx5IG92ZXJyaWRlIjogbjUubW9kaWZpZXIsICJpcyBrZXlvZiB1bmlxdWUgaW5mZXIiOiBuNS5vcGVyYXRvcktleXdvcmQsIEpTWEF0dHJpYnV0ZVZhbHVlOiBuNS5hdHRyaWJ1dGVWYWx1ZSwgSlNYVGV4dDogbjUuY29udGVudCwgIkpTWFN0YXJ0VGFnIEpTWFN0YXJ0Q2xvc2VUYWcgSlNYU2VsZkNsb3NlRW5kVGFnIEpTWEVuZFRhZyI6IG41LmFuZ2xlQnJhY2tldCwgIkpTWElkZW50aWZpZXIgSlNYTmFtZVNwYWNlZE5hbWUiOiBuNS50YWdOYW1lLCAiSlNYQXR0cmlidXRlL0pTWElkZW50aWZpZXIgSlNYQXR0cmlidXRlL0pTWE5hbWVTcGFjZWROYW1lIjogbjUuYXR0cmlidXRlTmFtZSB9KTsKICB2YXIgQzE0ID0geyBfX3Byb3RvX186IG51bGwsIGV4cG9ydDogMTgsIGFzOiAyMywgZnJvbTogMjksIGRlZmF1bHQ6IDMyLCBhc3luYzogMzcsIGZ1bmN0aW9uOiAzOCwgdGhpczogNDgsIHRydWU6IDU2LCBmYWxzZTogNTYsIHZvaWQ6IDY2LCB0eXBlb2Y6IDcwLCBudWxsOiA4Niwgc3VwZXI6IDg4LCBuZXc6IDEyMiwgYXdhaXQ6IDEzOSwgeWllbGQ6IDE0MSwgZGVsZXRlOiAxNDIsIGNsYXNzOiAxNTIsIGV4dGVuZHM6IDE1NCwgcHVibGljOiAxOTcsIHByaXZhdGU6IDE5NywgcHJvdGVjdGVkOiAxOTcsIHJlYWRvbmx5OiAxOTksIGluc3RhbmNlb2Y6IDIyMCwgaW46IDIyMiwgY29uc3Q6IDIyNCwgaW1wb3J0OiAyNTYsIGtleW9mOiAzMDcsIHVuaXF1ZTogMzExLCBpbmZlcjogMzE3LCBpczogMzUxLCBhYnN0cmFjdDogMzcxLCBpbXBsZW1lbnRzOiAzNzMsIHR5cGU6IDM3NSwgbGV0OiAzNzgsIHZhcjogMzgwLCBpbnRlcmZhY2U6IDM4NywgZW51bTogMzkxLCBuYW1lc3BhY2U6IDM5NywgbW9kdWxlOiAzOTksIGRlY2xhcmU6IDQwMywgZ2xvYmFsOiA0MDcsIGZvcjogNDI4LCBvZjogNDM3LCB3aGlsZTogNDQwLCB3aXRoOiA0NDQsIGRvOiA0NDgsIGlmOiA0NTIsIGVsc2U6IDQ1NCwgc3dpdGNoOiA0NTgsIGNhc2U6IDQ2NCwgdHJ5OiA0NzAsIGNhdGNoOiA0NzQsIGZpbmFsbHk6IDQ3OCwgcmV0dXJuOiA0ODIsIHRocm93OiA0ODYsIGJyZWFrOiA0OTAsIGNvbnRpbnVlOiA0OTQsIGRlYnVnZ2VyOiA0OTggfTsKICB2YXIgVjE2ID0geyBfX3Byb3RvX186IG51bGwsIGFzeW5jOiAxMDksIGdldDogMTExLCBzZXQ6IDExMywgcHVibGljOiAxNjEsIHByaXZhdGU6IDE2MSwgcHJvdGVjdGVkOiAxNjEsIHN0YXRpYzogMTYzLCBhYnN0cmFjdDogMTY1LCBvdmVycmlkZTogMTY3LCByZWFkb25seTogMTczLCBuZXc6IDM1NSB9OwogIHZhciBJMjUgPSB7IF9fcHJvdG9fXzogbnVsbCwgIjwiOiAxMjkgfTsKICB2YXIgSjkgPSBTMTcuZGVzZXJpYWxpemUoeyB2ZXJzaW9uOiAxNCwgc3RhdGVzOiAiJDhTT2BRZE9PTydRUShDfE8nI0NoTydYT1dPJyNEVk8pZFFkTycjRF1PKXRRZE8nI0RoTyl7UWRPJyNEck8teFFkTycjRHhPT1FPJyNFXScjRV1PLl1RYE8nI0VbTy5iUWBPJyNFW09PUShDWycjRWYnI0VmTzBhUShDfE8nI0l0TzJ3UShDfE8nI0l1TzNlUWBPJyNFek8zalEhYk8nI0ZhT09RKENbJyNGUycjRlNPM3JPI3RPJyNGU080UVEmak8nI0ZoTzViUWBPJyNGZ09PUShDWycjSXUnI0l1T09RKENXJyNJdCcjSXRPT1FTJyNKXicjSl5PNWdRYE8nI0hwTzVsUShDaE8nI0hxT09RUycjSWgnI0loT09RUycjSHInI0hyUWBRZE9PTyl7UWRPJyNEak81dFFgTycjR1tPNXlRJmpPJyNDbU82WFFgTycjRVpPNmRRYE8nI0VnTzZpUSxVTycjRlJPN1RRYE8nI0dbTzdZUWBPJyNHYE83ZVFgTycjR2BPN3NRYE8nI0djTzdzUWBPJyNHZE83c1FgTycjR2ZPNXRRYE8nI0dpTzhkUWBPJyNHbE85clFgTycjQ2RPOlNRYE8nI0d5TzpbUWBPJyNIUE86W1FgTycjSFJPYFFkTycjSFRPOltRYE8nI0hWTzpbUWBPJyNIWU86YVFgTycjSGBPOmZRKENqTycjSGZPKXtRZE8nI0hoTzpxUShDak8nI0hqTzp8UShDak8nI0hsTzVsUShDaE8nI0huTyl7UWRPJyNEV09PT1cnI0h0JyNIdE87WE9XTyw1OXFPT1EoQ1ssNTlxLDU5cU89alF0TycjQ2hPPXRRZE8nI0h1Tz5YUWBPJyNJdk9AV1F0TycjSXZPJ2RRZE8nI0l2T0BfUWBPLDU5d09AdVE3W08nI0RiT0FuUWBPJyNFXU9Be1FgTycjSlJPQldRYE8nI0pRT0JXUWBPJyNKUU9CYFFgTyw1OnlPQmVRYE8nI0pQT0JsUWFPJyNEeU81eVEmak8nI0VaT0J6UWBPJyNFWk9DVlFwTycjRlJPT1EoQ1ssNTpTLDU6U09DX1FkTyw1OlNPRV1RKEN8Tyw1Ol5PRXlRYE8sNTpkT0ZkUShDaE8nI0pPTzdZUWBPJyNJfU9Ga1FgTycjSX1PRnNRYE8sNTp4T0Z4UWBPJyNJfU9HV1FkTyw1OnZPSVdRJmpPJyNFV09KZVFgTyw1OnZPS3dRJmpPJyNEbE9MT1FkTycjRHFPTFlRN1tPLDU7UE8pe1FkTyw1O1BPT1FTJyNFcicjRXJPT1FTJyNFdCcjRXRPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk9PUVMnI0V4JyNFeE9MYlFkTyw1O2NPT1EoQ1ssNTtoLDU7aE9PUShDWyw1O2ksNTtpT05iUWBPLDU7aU9PUShDWyw1O2osNTtqTyl7UWRPJyNJUE9OZ1EoQ2hPLDU8VE8hIFJRJmpPLDU7Uk8pe1FkTyw1O2ZPISBrUSFiTycjSlZPISBZUSFiTycjSlZPISByUSFiTycjSlZPISFUUSFiTyw1O3FPT09PLDU7eyw1O3tPISFjUWRPJyNGY09PT08nI0lPJyNJT08zck8jdE8sNTtuTyEhalEhYk8nI0ZlT09RKENbLDU7biw1O25PISNXUSxWTycjQ3JPT1EoQ10nI0N1JyNDdU8hI2tRYE8nI0N1TyEjcE9XTycjQ3lPISReUSxWTyw1PFFPISRlUWBPLDU8U08hJXRRJmpPJyNGck8hJlJRYE8nI0ZzTyEmV1FgTycjRnNPISZdUSZqTycjRndPISdbUTdbTycjRntPISd9USxWTycjSXFPT1EoQ10nI0lxJyNJcU8hKFhRYU8nI0lwTyEoZ1FgTycjSW9PIShvUWBPJyNDcU9PUShDXScjQ3MnI0NzT09RKENdJyNDfCcjQ3xPISh3UWBPJyNET09KalEmak8nI0ZqT0pqUSZqTycjRmxPISh8UWBPJyNGbk8hKVJRYE8nI0ZvTyEmV1FgTycjRnVPSmpRJmpPJyNGek8hKVdRYE8nI0VeTyEpb1FgTyw1PFJPYFFkTyw1PltPT1FTJyNJaycjSWtPT1FTLDU+XSw1Pl1PT1FTLUU7cC1FO3BPIStrUShDfE8sNTpVT09RKENYJyNDcCcjQ3BPISxbUSZrTyw1PHZPT1FPJyNDZicjQ2ZPISxtUShDaE8nI0lsTzViUWBPJyNJbE86YVFgTyw1OVhPIS1PUSFiTyw1OVhPIS1XUSZqTyw1OVhPNXlRJmpPLDU5WE8hLWNRYE8sNTp2TyEta1FgTycjR3hPIS15UWBPJyNKYk8pe1FkTyw1O2tPIS5SUTdbTyw1O21PIS5XUWBPLDU9Y08hLl1RYE8sNT1jTyEuYlFgTyw1PWNPNWxRKENoTyw1PWNPNXRRYE8sNTx2TyEucFFgTycjRV9PIS9VUTdbTycjRWBPT1EoQ1cnI0pQJyNKUE8hL2dRKENoTycjSl9PNWxRKENoTyw1PHpPN3NRYE8sNT1RT09RUCcjQ3InI0NyTyEvclEhYk8sNTx9TyEvelEhY08sNT1PTyEwVlFgTyw1PVFPITBbUXBPLDU9VE86YVFgTycjR25PNXRRYE8nI0dwTyEwZFFgTycjR3BPNXlRJmpPJyNHc08hMGlRYE8nI0dzT09RUyw1PVcsNT1XTyEwblFgTycjR3RPITB2UWBPJyNDbU8hMHtRYE8sNTlPTyExVlFgTyw1OU9PITNYUWRPLDU5T09PUVMsNTlPLDU5T08hM2ZRKENoTyw1OU9PKXtRZE8sNTlPTyEzcVFkTycjR3tPT1FTJyNHfCcjR3xPT1FTJyNHfScjR31PYFFkTyw1PWVPITRSUWBPLDU9ZU8pe1FkTycjRHhPYFFkTyw1PWtPYFFkTyw1PW1PITRXUWBPLDU9b09gUWRPLDU9cU8hNF1RYE8sNT10TyE0YlFkTyw1PXpPT1FTLDU+USw1PlFPKXtRZE8sNT5RTzVsUShDaE8sNT5TT09RUyw1PlUsNT5VTyE4Y1FgTyw1PlVPT1FTLDU+Vyw1PldPIThjUWBPLDU+V09PUVMsNT5ZLDU+WU8hOGhRcE8sNTlyT09PVy1FO3ItRTtyT09RKENbMUcvXTFHL11PIThtUXRPLDU+YU8nZFFkTyw1PmFPT1FPLDU+Ziw1PmZPITh3UWRPJyNIdU9PUU8tRTtzLUU7c08hOVVRYE8sNT9iTyE5XlF0Tyw1P2JPITllUWBPLDU/bE9PUShDWzFHL2MxRy9jTyE5bVEhYk8nI0RUT09RTycjSXgnI0l4Tyl7UWRPJyNJeE8hOltRIWJPJyNJeE8hOnlRIWJPJyNEY08hO1tRN1tPJyNEY08hPWdRZE8nI0RjTyE9blFgTycjSXdPIT12UWBPLDU5fE8hPXtRYE8nI0VhTyE+WlFgTycjSlNPIT5jUWBPLDU6ek8hPnlRN1tPJyNEY08pe1FkTyw1P21PIT9UUWBPJyNIek9PUU8tRTt4LUU7eE8hOWVRYE8sNT9sT09RKENXMUcwZTFHMGVPIUBhUTdbTycjRHxPT1EoQ1ssNTplLDU6ZU8pe1FkTyw1OmVPSVdRJmpPLDU6ZU8hQGhRYU8sNTplTzphUWBPLDU6dU8hLU9RIWJPLDU6dU8hLVdRJmpPLDU6dU81eVEmak8sNTp1T09RKENbMUcvbjFHL25PT1EoQ1sxRzBPMUcwT09PUShDVycjRVYnI0VWTyl7UWRPLDU/ak8hQHNRKENoTyw1P2pPIUFVUShDaE8sNT9qTyFBXVFgTyw1P2lPIUFlUWBPJyNIfE8hQV1RYE8sNT9pT09RKENXMUcwZDFHMGRPN1lRYE8sNT9pT09RKENbMUcwYjFHMGJPIUJQUShDfE8xRzBiTyFDUlEoQ3lPLDU6ck9PUShDXScjRnEnI0ZxTyFDb1EoQ31PJyNJcU9HV1FkTzFHMGJPIUVxUSxWTycjSXlPIUV7UWBPLDU6V08hRlFRdE8nI0l6Tyl7UWRPJyNJek8hRltRYE8sNTpdT09RKENdJyNEVCcjRFRPT1EoQ1sxRzBrMUcwa08hRmFRYE8xRzBrTyFIclEoQ3xPMUcwbU8hSHlRKEN8TzFHMG1PIUteUShDfE8xRzBtTyFLZVEoQ3xPMUcwbU8hTWxRKEN8TzFHMG1PIU5QUShDfE8xRzBtTyMhcFEoQ3xPMUcwbU8jIXdRKEN8TzFHMG1PIyVbUShDfE8xRzBtTyMlY1EoQ3xPMUcwbU8jJ1dRKEN8TzFHMG1PIypRUU1sTycjQ2hPIyt7UU1sTzFHMH1PIy12UU1sTycjSXVPT1EoQ1sxRzFUMUcxVE8jLlpRKEN8Tyw1PmtPT1EoQ1ctRTt9LUU7fU8jLnpRKEN9TzFHMG1PT1EoQ1sxRzBtMUcwbU8jMVBRKEN8TzFHMVFPIzFwUSFiTyw1O3NPIzF1USFiTyw1O3RPIzF6USFiTycjRltPIzJgUWBPJyNGWk9PUU8nI0pXJyNKV09PUU8nI0h9JyNIfU8jMmVRIWJPMUcxXU9PUShDWzFHMV0xRzFdT09PTzFHMWYxRzFmTyMyc1FNbE8nI0l0TyMyfVFgTyw1O31PTGJRZE8sNTt9T09PTy1FO3wtRTt8T09RKENbMUcxWTFHMVlPT1EoQ1ssNTxQLDU8UE8jM1NRIWJPLDU8UE9PUShDXSw1OWEsNTlhT0lXUSZqTycjQ3tPT09XJyNIcycjSHNPIzNYT1dPLDU5ZU9PUShDXSw1OWUsNTllTyl7UWRPMUcxbE8hKVJRYE8nI0lSTyMzZFFgTyw1PGVPT1EoQ10sNTxiLDU8Yk9PUU8nI0dWJyNHVk9KalEmak8sNTxwT09RTycjR1gnI0dYT0pqUSZqTyw1PHJPSVdRJmpPLDU8dE9PUU8xRzFuMUcxbk8jM29RcU8nI0NwTyM0U1FxTyw1PF5PIzRaUWBPJyNKWk81dFFgTycjSlpPIzRpUWBPLDU8YE9KalEmak8sNTxfTyM0blFgTycjRnRPIzR5UWBPLDU8X08jNU9RcU8nI0ZxTyM1XVFxTycjSltPIzVnUWBPJyNKW09JV1Emak8nI0pbTyM1bFFgTyw1PGNPT1EoQ1cnI0RnJyNEZ08jNXFRIWJPJyNGfE8hJ1ZRN1tPJyNGfE8hJ1ZRN1tPJyNHT08jNlNRYE8nI0dQTyEmV1FgTycjR1NPIzZYUShDaE8nI0lUTyM2ZFE3W08sNTxnT09RKENdLDU8Zyw1PGdPIzZrUTdbTycjRnxPIzZ5UTdbTycjRn1PIzdSUTdbTycjRn1PT1EoQ10sNTx1LDU8dU9KalEmak8sNT9bT0pqUSZqTyw1P1tPIzdXUWBPJyNJVU8jN2NRYE8sNT9aTyM3a1FgTyw1OV1PT1EoQ10nI0NoJyNDaE8jOFtRLFZPLDU5ak9PUShDXSw1OWosNTlqTyM4fVEsVk8sNTxVTyM5cFEsVk8sNTxXTyM5elFgTyw1PFlPT1EoQ10sNTxaLDU8Wk8jOlBRYE8sNTxhTyM6VVEsVk8sNTxmT0dXUWRPMUcxbU8jOmZRYE8xRzFtT09RUzFHM3YxRzN2T09RKENbMUcvcDFHL3BPTmJRYE8xRy9wT09RUzFHMmIxRzJiT0lXUSZqTzFHMmJPKXtRZE8xRzJiT0lXUSZqTzFHMmJPIzprUWFPMUcyYk8jPFFRJmpPJyNFV09PUShDVyw1P1csNT9XTyM8W1EoQ2hPLDU/V09PUVMxRy5zMUcuc086YVFgTzFHLnNPIS1PUSFiTzFHLnNPIS1XUSZqTzFHLnNPIzxtUWBPMUcwYk8jPHJRYE8nI0NoTyM8fVFgTycjSmNPIz1WUWBPLDU9ZE8jPVtRYE8nI0pjTyM9YVFgTycjSmNPIz1pUWBPJyNJXk8jPXdRYE8sNT98TyM+UFF0TzFHMVZPT1EoQ1sxRzFYMUcxWE81dFFgTzFHMn1PIz5XUWBPMUcyfU8jPl1RYE8xRzJ9TyM+YlFgTzFHMn1PT1FTMUcyfTFHMn1PIz5nUSZrTzFHMmJPN1lRYE8nI0pRTzdZUWBPJyNFYU83WVFgTycjSVdPIz54UShDaE8sNT95T09RUzFHMmYxRzJmTyEwVlFgTzFHMmxPSVdRJmpPMUcyaU8jP1RRYE8xRzJpT09RUzFHMmoxRzJqT0lXUSZqTzFHMmpPIz9ZUWFPMUcyak8jP2JRN1tPJyNHaE9PUVMxRzJsMUcybE8hJ1ZRN1tPJyNJWU8hMFtRcE8xRzJvT09RUzFHMm8xRzJvT09RUyw1PVksNT1ZTyM/alEma08sNT1bTzV0UWBPLDU9W08jNlNRYE8sNT1fTzViUWBPLDU9X08hLU9RIWJPLDU9X08hLVdRJmpPLDU9X081eVEmak8sNT1fTyM/e1FgTycjSmFPI0BXUWBPLDU9YE9PUVMxRy5qMUcuak8jQF1RKENoTzFHLmpPI0BoUWBPMUcuak8jQG1RYE8xRy5qTzVsUShDaE8xRy5qTyNAdVF0Tyw1QE9PI0FQUWBPLDVAT08jQVtRZE8sNT1nTyNBY1FgTyw1PWdPN1lRYE8sNUBPT09RUzFHM1AxRzNQT2BRZE8xRzNQT09RUzFHM1YxRzNWT09RUzFHM1gxRzNYTzpbUWBPMUczWk8jQWhRZE8xRzNdTyNFY1FkTycjSFtPT1FTMUczYDFHM2BPI0VwUWBPJyNIYk86YVFgTycjSGRPT1FTMUczZjFHM2ZPI0V4UWRPMUczZk81bFEoQ2hPMUczbE9PUVMxRzNuMUczbk9PUShDVycjRngnI0Z4TzVsUShDaE8xRzNwTzVsUShDaE8xRzNyT09PVzFHL14xRy9eTyNJdlFwTyw1PFRPI0pPUXRPMUcze09PUU8xRzRRMUc0UU8pe1FkTyw1PmFPI0pZUWBPMUc0fE8jSmJRYE8xRzVXTyNKalFgTyw1P2RPTGJRZE8sNTp7TzdZUWBPLDU6e086YVFgTyw1OX1PTGJRZE8sNTl9TyEtT1EhYk8sNTl9TyNKb1FNbE8sNTl9T09RTyw1OnssNTp7TyNKeVE3W08nI0h2TyNLYVFgTyw1P2NPT1EoQ1sxRy9oMUcvaE8jS2lRN1tPJyNIe08jS31RYE8sNT9uT09RKENXMUcwZjFHMGZPITtbUTdbTyw1OX1PI0xWUXRPMUc1WE83WVFgTyw1PmZPT1EoQ1cnI0VTJyNFU08jTGFRKERqTycjRVRPIUBYUTdbTycjRH1PT1FPJyNIeScjSHlPI0x7UTdbTyw1OmhPT1EoQ1ssNTpoLDU6aE8jTVNRN1tPJyNEfU8jTWVRN1tPJyNEfU8jTWxRN1tPJyNFWU8jTW9RN1tPJyNFVE8jTXxRN1tPJyNFVE8hQFhRN1tPJyNFVE8jTmFRYE8xRzBQTyNOZlFxTzFHMFBPT1EoQ1sxRzBQMUcwUE8pe1FkTzFHMFBPSVdRJmpPMUcwUE9PUShDWzFHMGExRzBhTzphUWBPMUcwYU8hLU9RIWJPMUcwYU8hLVdRJmpPMUcwYU8jTm1RKEN8TzFHNVVPKXtRZE8xRzVVTyNOfVEoQ2hPMUc1VU8kIGBRYE8xRzVUTzdZUWBPLDU+aE9PUU8sNT5oLDU+aE8kIGhRYE8sNT5oT09RTy1FO3otRTt6TyQgYFFgTzFHNVRPJCB2UShDfU8sNTlqTyQjeFEoQ31PLDU8VU8kJX1RKEN9Tyw1PFdPJChTUShDfU8sNTxmT09RKENbNyslfDcrJXxPJCpfUShDfE83KyV8TyQrT1Emak8nI0h3TyQrWVFgTyw1P2VPT1EoQ10xRy9yMUcvck8kK2JRZE8nI0h4TyQrb1FgTyw1P2ZPJCt3UXRPLDU/Zk9PUShDWzFHL3cxRy93T09RKENbNysmVjcrJlZPJCxSUU1sTyw1Ol5PKXtRZE83KyZpTyQsXVFNbE8sNTpVT09RTzFHMV8xRzFfT09RTzFHMWAxRzFgTyQsalEhTFFPLDU7dk9MYlFkTyw1O3VPT1FPLUU7ey1FO3tPT1EoQ1s3KyZ3Nysmd09PT083KydRNysnUU9PT08xRzFpMUcxaU8kLHVRYE8xRzFpT09RKENbMUcxazFHMWtPJCx6UXFPLDU5Z09PT1ctRTtxLUU7cU9PUShDXTFHL1AxRy9QTyQtUlEoQ3xPNysnV09PUShDXSw1Pm0sNT5tTyQtclFgTyw1Pm1PT1EoQ10xRzJQMUcyUFAkLXdRYE8nI0lSUE9RKENdLUU8UC1FPFBPJC5oUSxWTzFHMltPJC9aUSxWTzFHMl5PJC9lUXFPMUcyYE9PUShDXTFHMXgxRzF4TyQvbFFgTycjSVFPJC96UWBPLDU/dU8kL3pRYE8sNT91TyQwU1FgTyw1P3VPJDBfUWBPLDU/dU9PUU8xRzF6MUcxek8kMG1RLFZPMUcxeU9KalEmak8xRzF5TyQwfVEmak8nI0lTTyQxX1FgTyw1P3ZPSVdRJmpPLDU/dk8kMWdRcU8sNT92T09RKENdMUcxfTFHMX1PT1EoQ1csNTxoLDU8aE9PUShDVyw1PGksNTxpTyQxcVFgTyw1PGlPIzV9UWBPLDU8aU8hLU9RIWJPLDU8aE8kMXZRYE8sNTxqT09RKENXLDU8ayw1PGtPJDFxUWBPLDU8bk9PUU8sNT5vLDU+b09PUU8tRTxSLUU8Uk9PUShDXTFHMlIxRzJSTyEnVlE3W08sNTxoTyQyT1FgTyw1PGlPISdWUTdbTyw1PGpPISdWUTdbTyw1PGlPJDJaUSxWTzFHNHZPJDJlUSxWTzFHNHZPT1FPLDU+cCw1PnBPT1FPLUU8Uy1FPFNPT1FQMUcudzFHLndPIS5SUTdbTyw1OWxPKXtRZE8sNTlsTyQyclFgTzFHMXRPSmpRJmpPMUcxe08kMndRKEN8TzcrJ1hPT1EoQ1s3KydYNysnWE9HV1FkTzcrJ1hPT1EoQ1s3KyVbNyslW08kM2hRcU8nI0pdTyNOYVFgTzcrJ3xPJDNyUWBPNysnfE8kM3pRcU83Kyd8T09RUzcrJ3w3Kyd8T0lXUSZqTzcrJ3xPKXtRZE83Kyd8T0lXUSZqTzcrJ3xPJDRVUShDeU8nI0NoTyQ0aVEoQ3lPLDU8bE8kNVpRYE8sNTxsT09RKENXMUc0cjFHNHJPT1FTNyskXzcrJF9POmFRYE83KyRfTyEtT1EhYk83KyRfT0dXUWRPNyslfE8kNWBRYE8nI0ldTyQ1cVFgTyw1P31PT1FPMUczTzFHM09PNXRRYE8sNT99TyQ1cVFgTyw1P31PJDV5UWBPLDU/fU9PUU8sNT54LDU+eE9PUU8tRTxbLUU8W09PUShDWzcrJnE3KyZxTyQ2T1FgTzcrKGlPNWxRKENoTzcrKGlPNXRRYE83KyhpTyQ2VFFgTzcrKGlPJDZZUWFPNysnfE9PUShDVyw1PnIsNT5yT09RKENXLUU8VS1FPFVPT1FTNysoVzcrKFdPJDZoUShDeU83KyhUT0lXUSZqTzcrKFRPJDZyUXFPNysoVU9PUVM3KyhVNysoVU9JV1Emak83KyhVTyQ2eVFgTycjSmBPJDdVUWBPLDU9U09PUU8sNT50LDU+dE9PUU8tRTxXLUU8V09PUVM3KyhaNysoWk8kOE9RN1tPJyNHcU9PUVMxRzJ2MUcydk9JV1Emak8xRzJ2Tyl7UWRPMUcydk9JV1Emak8xRzJ2TyQ4VlFhTzFHMnZPJDhlUSZrTzFHMnZPNWxRKENoTzFHMnlPIzZTUWBPMUcyeU81YlFgTzFHMnlPIS1PUSFiTzFHMnlPIS1XUSZqTzFHMnlPJDh2UWBPJyNJW08kOVJRYE8sNT97TyQ5WlE3W08sNT97T09RKENXMUcyejFHMnpPT1FTNyskVTcrJFVPJDljUWBPNyskVU81bFEoQ2hPNyskVU8kOWhRYE83KyRVTyl7UWRPMUc1ak8pe1FkTzFHNWtPJDltUWRPMUczUk8kOXRRYE8xRzNSTyQ5eVFkTzFHM1JPJDpRUShDaE8xRzVqT09RUzcrKGs3KyhrTzVsUShDaE83Kyh1T2BRZE83Kyh3T09RUycjSmYnI0pmT09RUycjSV8nI0lfTyQ6W1FkTyw1PXZPT1FTLDU9diw1PXZPKXtRZE8nI0hdTyQ6aVFgTycjSF9PT1FTLDU9fCw1PXxPN1lRYE8sNT18T09RUyw1Pk8sNT5PT09RUzcrKVE3KylRT09RUzcrKVc3KylXT09RUzcrKVs3KylbT09RUzcrKV43KyleT09RTzFHNU8xRzVPTyQ6blFNbE8xRzBnTyQ6eFFgTzFHMGdPT1FPMUcvaTFHL2lPJDtUUU1sTzFHL2lPOmFRYE8xRy9pT0xiUWRPJyNEY09PUU8sNT5iLDU+Yk9PUU8tRTt0LUU7dE9PUU8sNT5nLDU+Z09PUU8tRTt5LUU7eU8hLU9RIWJPMUcvaU86YVFgTyw1OmlPT1FPLDU6byw1Om9PKXtRZE8sNTpvTyQ7X1EoQ2hPLDU6b08kO2pRKENoTyw1Om9PIS1PUSFiTyw1OmlPT1FPLUU7dy1FO3dPT1EoQ1sxRzBTMUcwU08hQFhRN1tPLDU6aU8kO3hRN1tPLDU6aU8kPFpRKERqTyw1Om9PJDx1UTdbTyw1OmlPIUBYUTdbTyw1Om9PT1FPLDU6dCw1OnRPJDx8UTdbTyw1Om9PJD1aUShDaE8sNTpvT09RKENbNyslazcrJWtPI05hUWBPNysla08jTmZRcU83KyVrT09RKENbNyslezcrJXtPOmFRYE83KyV7TyEtT1EhYk83KyV7TyQ9b1EoQ3xPNysqcE8pe1FkTzcrKnBPT1FPMUc0UzFHNFNPN1lRYE8xRzRTTyQ+UFFgTzcrKm9PJD5YUShDfU8xRzJbTyRAXlEoQ31PMUcyXk8kQmNRKEN9TzFHMXlPJERuUSxWTyw1PmNPT1FPLUU7dS1FO3VPJER4UXRPLDU+ZE8pe1FkTyw1PmRPT1FPLUU7di1FO3ZPJEVTUWBPMUc1UU8kRVtRTWxPMUcwYk8kR2NRTWxPMUcwbU8kR2pRTWxPMUcwbU8kSWtRTWxPMUcwbU8kSXJRTWxPMUcwbU8kS2dRTWxPMUcwbU8kS3pRTWxPMUcwbU8kTlhRTWxPMUcwbU8kTmBRTWxPMUcwbU8lIWFRTWxPMUcwbU8lIWhRTWxPMUcwbU8lJF1RTWxPMUcwbU8lJHBRKEN8Tzw8SlRPJSVyUU1tTzFHMG1PJSd8UU1tTycjSXFPJSlpUU1sTzFHMVFPTGJRZE8nI0ZeT09RTycjSlgnI0pYT09RTzFHMWIxRzFiTyUpdlFgTzFHMWFPJSl7UU1sTyw1PmtPT09PNysnVDcrJ1RPT09XMUcvUjFHL1JPT1EoQ10xRzRYMUc0WE9KalEmak83Kyd6TyUqVlFgTyw1PmxPNXRRYE8sNT5sT09RTy1FPE8tRTxPTyUqZVFgTzFHNWFPJSplUWBPMUc1YU8lKm1RYE8xRzVhTyUqeFEsVk83KydlTyUrWVFxTyw1Pm5PJStkUWBPLDU+bk9JV1Emak8sNT5uT09RTy1FPFEtRTxRTyUraVFxTzFHNWJPJStzUWBPMUc1Yk9PUShDVzFHMlQxRzJUTyQxcVFgTzFHMlRPT1EoQ1cxRzJTMUcyU08lK3tRYE8xRzJVT0lXUSZqTzFHMlVPT1EoQ1cxRzJZMUcyWU8hLU9RIWJPMUcyU08jNX1RYE8xRzJUTyUsUVFgTzFHMlVPJSxZUWBPMUcyVE9KalEmak83KypiT09RKENdMUcvVzFHL1dPJSxlUWBPMUcvV09PUShDXTcrJ2A3KydgTyUsalEsVk83KydnTyUselEoQ3xPPDxKc09PUShDWzw8SnM8PEpzT0lXUSZqTycjSVZPJS1rUWBPLDU/d09PUVM8PEtoPDxLaE9JV1Emak88PEtoTyNOYVFgTzw8S2hPJS1zUWBPPDxLaE8lLXtRcU88PEtoT0lXUSZqTzFHMldPT1FTPDxHeTw8R3lPOmFRYE88PEd5TyUuVlEoQ3xPPDxJaE9PUShDWzw8SWg8PEloT09RTyw1PncsNT53TyUudlFgTyw1PndPJS57UWBPLDU+d09PUU8tRTxaLUU8Wk8lL1RRYE8xRzVpTyUvVFFgTzFHNWlPNXRRYE8xRzVpTyUvXVFgTzw8TFRPT1FTPDxMVDw8TFRPJS9iUWBPPDxMVE81bFEoQ2hPPDxMVE8pe1FkTzw8S2hPSVdRJmpPPDxLaE9PUVM8PEtvPDxLb08kNmhRKEN5Tzw8S29PT1FTPDxLcDw8S3BPJDZyUXFPPDxLcE8lL2dRN1tPJyNJWE8lL3JRYE8sNT96T0xiUWRPLDU/ek9PUVMxRzJuMUcybk8jTGFRKERqTycjRVRPIUBYUTdbTycjR3JPT1FPJyNJWicjSVpPJS96UTdbTyw1PV1PT1FTLDU9XSw1PV1PJTBSUTdbTycjRVRPJTBeUTdbTycjRVRPJTB1UTdbTycjRVRPJTFQUTdbTycjR3JPJTFiUWBPNysoYk8lMWdRYE83KyhiTyUxb1FxTzcrKGJPT1FTNysoYjcrKGJPSVdRJmpPNysoYk8pe1FkTzcrKGJPSVdRJmpPNysoYk8lMXlRYU83KyhiT09RUzcrKGU3KyhlTzVsUShDaE83KyhlTyM2U1FgTzcrKGVPNWJRYE83KyhlTyEtT1EhYk83KyhlTyUyWFFgTyw1PnZPT1FPLUU8WS1FPFlPT1FPJyNHdScjR3VPJTJkUWBPMUc1Z081bFEoQ2hPPDxHcE9PUVM8PEdwPDxHcE8lMmxRYE88PEdwTyUycVFgTzcrK1VPJTJ2UWBPNysrVk9PUVM3KyhtNysobU8lMntRYE83KyhtTyUzUVFkTzcrKG1PJTNYUWBPNysobU8pe1FkTzcrK1VPKXtRZE83KytWT09RUzw8TGE8PExhT09RUzw8TGM8PExjT09RUy1FPF0tRTxdT09RUzFHM2IxRzNiTyUzXlFgTyw1PXdPT1FTLDU9eSw1PXlPJTNjUWBPMUczaE9MYlFkTzcrJlJPT1FPNyslVDcrJVRPJTNoUU1sTzFHNVhPOmFRYE83KyVUT09RTzFHMFQxRzBUTyUzclEoQ3xPMUcwWk9PUU8xRzBaMUcwWk8pe1FkTzFHMFpPJTN8UShDaE8xRzBaTzphUWBPMUcwVE8hLU9RIWJPMUcwVE8hQFhRN1tPMUcwVE8lNFhRKENoTzFHMFpPJTRnUTdbTzFHMFRPJTR4UShDaE8xRzBaTyU1XlEoRGpPMUcwWk8lNWhRN1tPMUcwVE8hQFhRN1tPMUcwWk9PUShDWzw8SVY8PElWT09RKENbPDxJZzw8SWdPOmFRYE88PElnTyU1b1EoQ3xPPDxOW09PUU83KyluNyspbk8lNlBRKEN9TzcrJ2VPJThbUShDfU83KydnTyU6Z1F0TzFHNE9PJTpxUU1sTzcrJXxPJTtnUU1tTyw1OWpPJT1oUU1tTyw1PFVPJT9sUU1tTyw1PFdPJUFbUU1tTyw1PGZPJUJ9UU1sTzcrJ1dPJUNbUU1sTzcrJ1hPJUNpUWBPLDU7eE9PUU83KyZ7Nysme08lQ25RLFZPPDxLZk9PUU8xRzRXMUc0V08lQ3VRYE8xRzRXTyVEUVFgTzFHNFdPJURgUWBPNysqe08lRGBRYE83Kyp7T0lXUSZqTzFHNFlPJURoUXFPMUc0WU8lRHJRYE83Kyp8T09RKENXNysnbzcrJ29PJDFxUWBPNysncE8lRHpRcU83KydwT09RKENXNysnbjcrJ25PJDFxUWBPNysnb08lRVJRYE83KydwT0lXUSZqTzcrJ3BPIzV9UWBPNysnb08lRVdRLFZPPDxNfE9PUShDXTcrJHI3KyRyTyVFYlFxTyw1PnFPT1FPLUU8VC1FPFRPI05hUWBPQU5BU09PUVNBTkFTQU5BU09JV1Emak9BTkFTTyVFbFEoQ3lPNysnck9PUVNBTj1lQU49ZU81dFFgTzFHNGNPT1FPMUc0YzFHNGNPJUV8UWBPMUc0Y08lRlJRYE83KytUTyVGUlFgTzcrK1RPNWxRKENoT0FOQW9PJUZaUWBPQU5Bb09PUVNBTkFvQU5Bb08lRmBRYE9BTkFTTyVGaFFxT0FOQVNPT1FTQU5BWkFOQVpPT1FTQU5BW0FOQVtPJUZyUWBPLDU+c09PUU8tRTxWLUU8Vk8lRn1RTWxPMUc1Zk8jNlNRYE8sNT1eTzViUWBPLDU9Xk8hLU9RIWJPLDU9Xk9PUU8tRTxYLUU8WE9PUVMxRzJ3MUcyd08kPFpRKERqTyw1Om9PIUBYUTdbTyw1PV5PJUdYUTdbTyw1PV5PJUdqUTdbTyw1Om9PT1FTPDxLfDw8S3xPSVdRJmpPPDxLfE8lMWJRYE88PEt8TyVHdFFgTzw8S3xPJUd8UXFPPDxLfE8pe1FkTzw8S3xPSVdRJmpPPDxLfE9PUVM8PExQPDxMUE81bFEoQ2hPPDxMUE8jNlNRYE88PExQTzViUWBPPDxMUE8lSFdRN1tPMUc0Yk8lSGBRYE83KytST09RU0FOPVtBTj1bTzVsUShDaE9BTj1bT09RUzw8TnA8PE5wT09RUzw8TnE8PE5xT09RUzw8TFg8PExYTyVIaFFgTzw8TFhPJUhtUWRPPDxMWE8lSHRRYE88PE5wTyVIeVFgTzw8TnFPT1FTMUczYzFHM2NPOmFRYE83KylTTyVJT1FNbE88PEltT09RTzw8SG88PEhvT09RTzcrJXU3KyV1TyUzclEoQ3xPNysldU8pe1FkTzcrJXVPT1FPNyslbzcrJW9POmFRYE83KyVvTyEtT1EhYk83KyVvTyVJWVEoQ2hPNysldU8hQFhRN1tPNyslb08lSWVRKENoTzcrJXVPJUlzUTdbTzcrJW9PJUpVUShDaE83KyV1T09RKENbQU4/UkFOP1JPJUpqUU1sTzw8SlRPJUp3UU1tTzFHMXlPJU1PUU1tTzFHMltPJiBTUU1tTzFHMl5PJiFyUU1sTzw8SnNPJiNQUU1sTzw8SWhPT1FPMUcxZDFHMWRPSmpRJmpPQU5BUU9PUU83KylyNyspck8mI15RYE83KylyTyYjaVFgTzw8TmdPJiNxUXFPNyspdE9PUShDVzw8S1s8PEtbTyQxcVFgTzw8S1tPT1EoQ1c8PEtaPDxLWk8mI3tRcU88PEtbTyQxcVFgTzw8S1pPT1FTRzI2bkcyNm5PI05hUWBPRzI2bk9PUU83Kyl9NyspfU81dFFgTzcrKX1PJiRTUWBPPDxOb09PUVNHMjdaRzI3Wk81bFEoQ2hPRzI3Wk9JV1Emak9HMjZuT0xiUWRPMUc0X08mJFtRYE83KytRTzVsUShDaE8xRzJ4TyM2U1FgTzFHMnhPNWJRYE8xRzJ4TyEtT1EhYk8xRzJ4TyFAWFE3W08xRzJ4TyU1XlEoRGpPMUcwWk8mJGRRN1tPMUcyeE8lMWJRYE9BTkFoT09RU0FOQWhBTkFoT0lXUSZqT0FOQWhPJiR1UWBPQU5BaE8mJH1RcU9BTkFoT09RU0FOQWtBTkFrTzVsUShDaE9BTkFrTyM2U1FgT0FOQWtPT1FPJyNHdicjR3ZPT1FPNyspfDcrKXxPT1FTRzIydkcyMnZPT1FTQU5Bc0FOQXNPJiVYUWBPQU5Bc09PUVNBTkRbQU5EW09PUVNBTkRdQU5EXU9PUVM8PExuPDxMbk9PUU88PElhPDxJYU8lM3JRKEN8Tzw8SWFPT1FPPDxJWjw8SVpPOmFRYE88PElaTyl7UWRPPDxJYU8hLU9RIWJPPDxJWk8mJV5RKENoTzw8SWFPIUBYUTdbTzw8SVpPJiVpUShDaE88PElhTyYld1FNbU83KydlTyYnalFNbU83KydnTyYpXVEsVk9HMjZsT09RTzw8TV48PE1eT09RKENXQU5AdkFOQHZPJDFxUWBPQU5Adk9PUShDV0FOQHVBTkB1T09RU0xELFlMRCxZT09RTzw8TWk8PE1pT09RU0xELHVMRCx1TyNOYVFgT0xELFlPJiltUU1sTzcrKXlPT1FPNysoZDcrKGRPNWxRKENoTzcrKGRPIzZTUWBPNysoZE81YlFgTzcrKGRPIS1PUSFiTzcrKGRPIUBYUTdbTzcrKGRPT1FTRzI3U0cyN1NPJTFiUWBPRzI3U09JV1Emak9HMjdTT09RU0cyN1ZHMjdWTzVsUShDaE9HMjdWT09RU0cyN19HMjdfT09RT0FOPntBTj57T09RT0FOPnVBTj51TyUzclEoQ3xPQU4+e086YVFgT0FOPnVPKXtRZE9BTj57TyEtT1EhYk9BTj51TyYpd1EoQ2hPQU4+e08mKlNRKEN9T0cyNmxPT1EoQ1dHMjZiRzI2Yk9PUVMhJCggdCEkKCB0T09RTzw8TE88PExPTzVsUShDaE88PExPTyM2U1FgTzw8TE9PNWJRYE88PExPTyEtT1EhYk88PExPT09RU0xELG5MRCxuTyUxYlFgT0xELG5PT1FTTEQscUxELHFPT1FPRzI0Z0cyNGdPT1FPRzI0YUcyNGFPJTNyUShDfE9HMjRnTzphUWBPRzI0YU8pe1FkT0cyNGdPJixwUSFMUk8sNTpyTyYtZ1EkSVRPJyNJcU9PUU9BTkFqQU5Bak81bFEoQ2hPQU5Bak8jNlNRYE9BTkFqTzViUWBPQU5Bak9PUVMhJCghWSEkKCFZT09RT0xEKlJMRCpST09RT0xEKXtMRCl7TyUzclEoQ3xPTEQqUk8mLlpRTW1PRzI2bE8mL3xRIUxSTyw1OWpPJjBwUSFMUk8sNTxVTyYxZFEhTFJPLDU8V08mMldRIUxSTyw1PGZPT1FPRzI3VUcyN1VPNWxRKENoT0cyN1VPIzZTUWBPRzI3VU9PUU8hJCdNbSEkJ01tTyYyfVEhTFJPMUcyW08mM3FRIUxSTzFHMl5PJjRlUSFMUk8xRzF5T09RT0xELHBMRCxwTzVsUShDaE9MRCxwTyY1W1EhTFJPNysnZU8mNlJRIUxSTzcrJ2dPT1FPISQoIVshJCghW08mNnhRIUxST0cyNmxPTGJRZE8nI0RyTyY3b1F0TycjSXRPTGJRZE8nI0RqTyY3dlEoQ3xPJyNDaE8mOGFRdE8nI0NoTyY4cVFkTyw1OnZPJjpxUSZqTycjRVdPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTycjSVBPJjxPUWBPLDU8VE8mPWVRJmpPLDU7Uk9MYlFkTyw1O2ZPISh3UWBPJyNET08hKHdRYE8nI0RPTyEod1FgTycjRE9PSVdRJmpPJyNGak8mOnFRJmpPJyNGak8mPFdRJmpPJyNGak9JV1Emak8nI0ZsTyY6cVEmak8nI0ZsTyY8V1Emak8nI0ZsT0lXUSZqTycjRnpPJjpxUSZqTycjRnpPJjxXUSZqTycjRnpPTGJRZE8sNT9tTyY4cVFkTzFHMGJPJj1sUU1sTycjQ2hPTGJRZE8xRzFsT0lXUSZqTyw1PHBPJjpxUSZqTyw1PHBPJjxXUSZqTyw1PHBPSVdRJmpPLDU8ck8mOnFRJmpPLDU8ck8mPFdRJmpPLDU8ck9JV1Emak8sNTxfTyY6cVEmak8sNTxfTyY8V1Emak8sNTxfTyY4cVFkTzFHMW1PTGJRZE83KyZpT0lXUSZqTzFHMXlPJjpxUSZqTzFHMXlPJjxXUSZqTzFHMXlPSVdRJmpPMUcxe08mOnFRJmpPMUcxe08mPFdRJmpPMUcxe08mOHFRZE83KydYTyY4cVFkTzcrJXxPJj12UWBPNysncE9JV1Emak9BTkFRTyY6cVEmak9BTkFRTyY8V1Emak9BTkFRTyY9dlFgTzw8S1tPJj12UWBPQU5Adk8mPXtRYE8nI0VbTyY+UVFgTycjRVtPJj5ZUWBPJyNFek8mPl9RYE8nI0VnTyY+ZFFgTycjSlJPJj5vUWBPJyNKUE8mPnpRYE8sNTp2TyY/UFEsVk8sNTxRTyY/V1FgTycjRnNPJj9dUWBPJyNGc08mP2JRYE8nI0ZzTyY/Z1FgTyw1PFJPJj9vUWBPLDU6dk8mP3dRTWxPMUcwfU8mQE9RYE8sNTxfTyZAVFFgTyw1PF9PJkBZUWBPLDU8X08mQF9RYE8sNTxhTyZAZFFgTyw1PGFPJkBpUWBPLDU8YU8mQG5RYE8xRzFtTyZAc1FgTzFHMGJPJkB4UWBPMUcyVU8mQH1RLFZPPDxLZk8mQVVRLFZPPDxLZk8mQV1RLFZPPDxLZk8mQWRRcU83KydwTyZBa1FgTzcrJ3BPJkFwUXFPPDxLW080UVEmak8nI0ZoTzViUWBPJyNGZ09CelFgTycjRVpPTGJRZE8sNTtjTyEmV1FgTycjRnNPISZXUWBPJyNGc08hJldRYE8nI0ZzTyEmV1FgTycjRnVPISZXUWBPJyNGdU8hJldRYE8nI0Z1TyZBd1FgTyw1PGpPSmpRJmpPNysnek9KalEmak83Kyd6T0pqUSZqTzcrJ3pPSVdRJmpPMUcyVU8mQlBRYE8xRzJVT0lXUSZqTzcrJ3BPISdWUTdbTycjR09PJC9lUXFPMUcyYE8kL2VRcU8xRzJgTyQvZVFxTzFHMmBPISdWUTdbTyw1PGpPSVdRJmpPLDU8dE9JV1Emak8sNTx0T0lXUSZqTyw1PHQiLCBzdGF0ZURhdGE6ICImQn1+TydZT1MnWk9TVE9TVU9Tfk9RVE9SVE9YeU9dY09faE9ibk9jbU9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hVFNPIV9rTyFkVU8hZ1RPIWhUTyFpVE8halRPIWtUTyFubE8jZHNPI3RwTyN4Xk8lUHFPJVJ0TyVUck8lVXJPJVh1TyVadk8lXndPJV93TyVheE8lbnpPJXR7TyV2fE8leH1PJXohT08lfSFQTyZUIVFPJlohUk8mXSFTTyZfIVRPJmEhVU8mYyFWTyddUE8nZlFPJ29ZTyd8YU9+T1FbWFpbWF9bWGpbWHVbWHZbWHhbWCFSW1ghYVtYIWJbWCFkW1ghaltYIXtbWCNXZFgjW1tYI11bWCNeW1gjX1tYI2BbWCNhW1gjYltYI2NbWCNlW1gjZ1tYI2lbWCNqW1gjb1tYJ1dbWCdmW1gncFtYJ3dbWCd4W1h+TyFdJGxYflAkek9TIVdPJ1UhWE8nViFaT35PUVRPUlRPXWNPYiFrT2Mhak9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hVCFiTyFfa08hZFVPIWdUTyFoVE8haVRPIWpUTyFrVE8hbiFpTyN0IWxPI3heTyddIVtPJ2ZRTydvWU8nfGFPfk8hUSFgTyFSIV1PIU8nalAhTyd0UH5QJ2RPIVMhbU9+UGBPUVRPUlRPXWNPYiFrT2Mhak9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hVCFiTyFfa08hZFVPIWdUTyFoVE8haVRPIWpUTyFrVE8hbiFpTyN0IWxPI3heTyddOWFPJ2ZRTydvWU8nfGFPfk9RVE9SVE9dY09iIWtPYyFqT2hjT2pUT2tjT2xjT3FUT3NUT3hST3tjT3xjT31jTyFUIWJPIV9rTyFkVU8hZ1RPIWhUTyFpVE8halRPIWtUTyFuIWlPI3QhbE8jeF5PJ2ZRTydvWU8nfGFPfk8hUSFyTyNVIXVPI1Yhck8nXTliTyFjJ3FQflAre08jVyF2T35PIV0hd08jVyF2T35PUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIVIjYk8hYSNUTyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08jYSNUTyNiI1RPI2MjVE8jZSNVTyNnI1dPI2kjWU8jaiNaTydmUU8ncCNbTyd3IX1PJ3gjT09+T18naFgnVydoWCFjJ2hYIU8naFghVCdoWCVRJ2hYIV0naFh+UC5qTyF7I2VPI28jZU9RJ2lYWidpWF8naVhqJ2lYdSdpWHYnaVh4J2lYIVInaVghYSdpWCFiJ2lYIWQnaVghaidpWCNbJ2lYI10naVgjXidpWCNfJ2lYI2AnaVgjYSdpWCNiJ2lYI2UnaVgjZydpWCNpJ2lYI2onaVgnZidpWCdwJ2lYJ3cnaVgneCdpWH5PI2MnaVgnVydpWCFPJ2lYIWMnaVhuJ2lYIVQnaVglUSdpWCFdJ2lYflAwek8heyNlT35PI3ojZk8kUiNqT35PIVQja08jeF5PJFUjbE8kVyNuT35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPcyRTT3gjeU8hVCN6TyFfJFhPIWQjdk8jViRZTyN0JFZPJF8kVE8kYSRVTyRkJFdPJ10jcE8nYiRQTydmI3NPJ2EnY1B+TyFkJFpPfk8hXSRdT35PXyReTydXJF5Pfk8nXSRiT35PIWQkWk8nXSRiTydeJGRPJ2IkUE9+T2Mkak8hZCRaTyddJGJPfk8jYyNUT35PXSRzT3Ukb08hVCRsTyFkJG5PJVIkck8nXSRiTydeJGRPXihVUH5PIW4kdE9+T3gkdU8hVCR2TyddJGJPfk94JHVPIVQkdk8lWiR6TyddJGJPfk8nXSR7T35PI2RzTyVSdE8lVHJPJVVyTyVYdU8lWnZPJV53TyVfd09+T2IlVU9jJVRPIW4lUk8lUCVTTyVjJVFPflA3eE9iJVhPY21PIVQlV08hbmxPI2RzTyVQcU8lVHJPJVVyTyVYdU8lWnZPJV53TyVfd08lYXhPfk9gJVtPIXslX08lUiVZTydeJGRPflA4d08hZCVgTyFnJWRPfk8hZCVlT35PIVRTT35PXyReTydUJW1PJ1ckXk9+T18kXk8nVCVwTydXJF5Pfk9fJF5PJ1Qlck8nVyReT35PUyFXTydVIVhPJ1Yldk9+T1FbWFpbWGpbWHVbWHZbWHhbWCFSW1ghUmRYIWFbWCFiW1ghZFtYIWpbWCF7W1ghe2RYI1dkWCNbW1gjXVtYI15bWCNfW1gjYFtYI2FbWCNiW1gjY1tYI2VbWCNnW1gjaVtYI2pbWCNvW1gnZltYJ3BbWCd3W1gneFtYfk8hT1tYIU9kWH5QO2RPIVEleE8hTyZpWCFPJm5YIVImaVghUiZuWH5QJ2RPIVIlek8hTydqWH5PUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIVIlek8hYSNUTyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08jYSNUTyNiI1RPI2MjVE8jZSNVTyNnI1dPI2kjWU8jaiNaTydmUU8ncCNbTyd3IX1PJ3gjT09+TyFPJ2pYflA+YU8hTyZQT35PeCZTTyFXJl5PIVgmVk8hWSZWTydeJGRPfk9dJlRPayZUTyFRJldPJ2cmUU8hUydrUCFTJ3ZQflBAZE8hTydzWCFSJ3NYIV0nc1ghYydzWCdwJ3NYfk8heydzWCNXI1BYIVMnc1h+UEFdTyF7Jl9PIU8ndVghUid1WH5PIVImYE8hTyd0WH5PIU8mY09+TyF7I2VPflBBXU9QJmdPIVQmZE8hbyZmTyddJGJPfk9jJmxPIWQkWk8nXSRiT35PdSRvTyFkJG5Pfk8hUyZtT35QYE91IXtPdiF7T3ghfE8hYiF5TyFkIXpPJ2ZRT1EhZmFaIWZhaiFmYSFSIWZhIWEhZmEhaiFmYSNbIWZhI10hZmEjXiFmYSNfIWZhI2AhZmEjYSFmYSNiIWZhI2MhZmEjZSFmYSNnIWZhI2khZmEjaiFmYSdwIWZhJ3chZmEneCFmYX5PXyFmYSdXIWZhIU8hZmEhYyFmYW4hZmEhVCFmYSVRIWZhIV0hZmF+UENmTyFjJm5Pfk8hXSF3TyF7JnBPJ3Amb08hUidyWF8nclgnVydyWH5PIWMnclh+UEZPTyFSJnRPIWMncVh+TyFjJnZPfk94JHVPIVQkdk8jViZ3TyddJGJPfk9RVE9SVE9dY09iIWtPYyFqT2hjT2pUT2tjT2xjT3FUT3NUT3hST3tjT3xjT31jTyFUU08hX2tPIWRVTyFnVE8haFRPIWlUTyFqVE8ha1RPIW4haU8jdCFsTyN4Xk8nXTlhTydmUU8nb1lPJ3xhT35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPczl0T3gjeU8hVCN6TyFfO2VPIWQjdk8jVjl9TyN0JFZPJF85d08kYTl6TyRkJFdPJ10me08nYiRQTydmI3NPfk8jVyZ9T35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPcyRTT3gjeU8hVCN6TyFfJFhPIWQjdk8jViRZTyN0JFZPJF8kVE8kYSRVTyRkJFdPJ10me08nYiRQTydmI3NPfk8nYSdtUH5QSmpPIVEnUk8hYyduUH5QKXtPJ2cnVE8nb1lPfk9ROV5PUjleT11jT2I7YE9jIWpPaGNPajleT2tjT2xjT3E5Xk9zOV5PeFJPe2NPfGNPfWNPIVQhYk8hXzlgTyFkVU8hZzleTyFoOV5PIWk5Xk8hajleTyFrOV5PIW4haU8jdCFsTyN4Xk8nXSdjTydmUU8nb1lPJ3w7Xk9+TyFkIXpPfk8hUiNiT18kXWEnVyRdYSFjJF1hIU8kXWEhVCRdYSVRJF1hIV0kXWF+TyNkJ2pPflBJV08hXSdsTyFUJ3lYI3cneVgjeid5WCRSJ3lYfk91J21PflAhIFlPdSdtTyFUJ3lYI3cneVgjeid5WCRSJ3lYfk8hVCdvTyN3J3NPI3onbk8kUid0T35PIVEnd09+UExiTyN6I2ZPJFInek9+T1AkZVh1JGVYeCRlWCFiJGVYJ3ckZVgneCRlWH5PUGZYIVJmWCF7ZlgnYWZYJ2EkZVh+UCEhck9rJ3xPfk9TJ31PJ1UoT08nVihRT35PUChaT3UoU094KFRPJ3coVk8neChYT35PJ2EoUk9+UCEje08nYShbT35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPczl0T3gjeU8hVCN6TyFfO2VPIWQjdk8jVjl9TyN0JFZPJF85d08kYTl6TyRkJFdPJ2IkUE8nZiNzT35PIVEoYE8nXShdTyFjJ31QflAhJGpPI1coYk9+TyFkKGNPfk8hUShoTyddKGVPIU8oT1B+UCEkak9qKHVPeChtTyFXKHNPIVgobE8hWShsTyFkKGNPIXgodE8kdyhvTydeJGRPJ2coak9+TyFTKHJPflAhJmpPIWIheU9QJ2VYdSdlWHgnZVgndydlWCd4J2VYIVInZVgheydlWH5PJ2EnZVgjbSdlWH5QISdjT1AoeE8heyh3TyFSJ2RYJ2EnZFh+TyFSKHlPJ2EnY1h+TyddJHtPJ2EnY1B+TyddKHxPfk8hZClST35PJ10me09+T3gkdU8hUSFyTyFUJHZPI1UhdU8jViFyTyddJGJPIWMncVB+TyFdIXdPI1cpVk9+T1EjXk9aI2RPaiNST3Uhe092IXtPeCF8TyFhI1RPIWIheU8hZCF6TyFqI15PI1sjUE8jXSNRTyNeI1FPI18jUU8jYCNTTyNhI1RPI2IjVE8jYyNUTyNlI1VPI2cjV08jaSNZTyNqI1pPJ2ZRTydwI1tPJ3chfU8neCNPT35PXyFeYSFSIV5hJ1chXmEhTyFeYSFjIV5hbiFeYSFUIV5hJVEhXmEhXSFeYX5QISl3T1ApX08hVCZkTyFvKV5PJVEpXU8nYiRQT35PIV0pYU8hVCdgWF8nYFghUidgWCdXJ2BYfk8hZCRaTydiJFBPfk8hZCRaTyddJGJPJ2IkUE9+TyFdIXdPI1cmfU9+T10pbE8lUiltTyddKWlPIVMoVlB+TyFSKW5PXihVWH5PJ2cnVE9+T1opck9+T14pc09+TyFUJGxPJ10kYk8nXiRkT14oVVB+T3gkdU8hUSl4TyFSJmBPIVQkdk8nXSRiTyFPJ3RQfk9dJlpPayZaTyFRKXlPJ2cnVE8hUyd2UH5PIVIpek9fKFJYJ1coUlh+TyF7Kk9PJ2IkUE9+T1AqUk8hVCN6TydiJFBPfk8hVCpUT35PdSpWTyFUU09+TyFuKltPfk9jKmFPfk8nXSh8TyFTKFRQfk9jJGpPfk8lUnRPJ10ke09+UDh3T1oqZ09eKmZPfk9RVE9SVE9dY09ibk9jbU9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hX2tPIWRVTyFnVE8haFRPIWlUTyFqVE8ha1RPIW5sTyN4Xk8lUHFPJ2ZRTydvWU8nfGFPfk8hVCFiTyN0IWxPJ105YU9+UCExX09eKmZPXyReTydXJF5Pfk9fKmtPI2QqbU8lVCptTyVVKm1PflApe08hZCVgT35PJXQqck9+TyFUKnRPfk8mVip2TyZYKndPUSZTYVImU2FYJlNhXSZTYV8mU2FiJlNhYyZTYWgmU2FqJlNhayZTYWwmU2FxJlNhcyZTYXgmU2F7JlNhfCZTYX0mU2EhVCZTYSFfJlNhIWQmU2EhZyZTYSFoJlNhIWkmU2EhaiZTYSFrJlNhIW4mU2EjZCZTYSN0JlNhI3gmU2ElUCZTYSVSJlNhJVQmU2ElVSZTYSVYJlNhJVomU2ElXiZTYSVfJlNhJWEmU2ElbiZTYSV0JlNhJXYmU2EleCZTYSV6JlNhJX0mU2EmVCZTYSZaJlNhJl0mU2EmXyZTYSZhJlNhJmMmU2EnUyZTYSddJlNhJ2YmU2EnbyZTYSd8JlNhIVMmU2EleyZTYWAmU2EmUSZTYX5PJ10qfE9+T24rUE9+TyFPJmlhIVImaWF+UCEpd08hUStUTyFPJmlYIVImaVh+UCl7TyFSJXpPIU8namF+TyFPJ2phflA+YU8hUiZgTyFPJ3Rhfk8hUndYIVIhWlghU3dYIVMhWlghXXdYIV0hWlghZCFaWCF7d1gnYiFaWH5PIV0rWU8heytYTyFSI1RYIVInbFghUyNUWCFTJ2xYIV0nbFghZCdsWCdiJ2xYfk8hXStbTyFkJFpPJ2IkUE8hUiFWWCFTIVZYfk9dJlJPayZST3gmU08nZyhqT35PUTleT1I5Xk9dY09iO2BPYyFqT2hjT2o5Xk9rY09sY09xOV5PczleT3hST3tjT3xjT31jTyFUIWJPIV85YE8hZFVPIWc5Xk8haDleTyFpOV5PIWo5Xk8hazleTyFuIWlPI3QhbE8jeF5PJ2ZRTydvWU8nfDteT35PJ106U09+UCE7ak8hUitgTyFTJ2tYfk8hUytiT35PIV0rWU8heytYTyFSI1RYIVMjVFh+TyFSK2NPIVMndlh+TyFTK2VPfk9dJlJPayZST3gmU08nXiRkTydnKGpPfk8hWCtmTyFZK2ZPflAhPmhPeCR1TyFRK2hPIVQkdk8nXSRiTyFPJm5YIVImblh+T18rbE8hVytvTyFYK2tPIVkra08hcitzTyFzK3FPIXQrck8hdStwTyF4K3RPJ14kZE8nZyhqTydvK2lPfk8hUytuT35QIT9pT1AreU8hVCZkTyFvK3hPfk8heyxQTyFSJ3JhIWMncmFfJ3JhJ1cncmF+TyFdIXdPflAhQHNPIVImdE8hYydxYX5PeCR1TyFRLFNPIVQkdk8jVSxVTyNWLFNPJ10kYk8hUiZwWCFjJnBYfk9fI09pIVIjT2knVyNPaSFPI09pIWMjT2luI09pIVQjT2klUSNPaSFdI09pflAhKXdPUDt0T3UoU094KFRPJ3coVk8neChYT35PI1chemEhUiF6YSFjIXphIXshemEhVCF6YV8hemEnVyF6YSFPIXphflAhQnBPI1cnZVhRJ2VYWidlWF8nZVhqJ2VYdidlWCFhJ2VYIWQnZVghaidlWCNbJ2VYI10nZVgjXidlWCNfJ2VYI2AnZVgjYSdlWCNiJ2VYI2MnZVgjZSdlWCNnJ2VYI2knZVgjaidlWCdXJ2VYJ2YnZVgncCdlWCFjJ2VYIU8nZVghVCdlWG4nZVglUSdlWCFdJ2VYflAhJ2NPIVIsX08nYSdtWH5QISN7TydhLGFPfk8hUixiTyFjJ25YflAhKXdPIWMsZU9+TyFPLGZPfk9RI15PdSF7T3Yhe094IXxPIWIheU8hZCF6TyFqI15PJ2ZRT1ojWmlfI1ppaiNaaSFSI1ppIWEjWmkjXSNaaSNeI1ppI18jWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppJ1cjWmkncCNaaSd3I1ppJ3gjWmkhTyNaaSFjI1ppbiNaaSFUI1ppJVEjWmkhXSNaaX5PI1sjWml+UCFGZk8jWyNQT35QIUZmT1EjXk91IXtPdiF7T3ghfE8hYiF5TyFkIXpPIWojXk8jWyNQTyNdI1FPI14jUU8jXyNRTydmUU9aI1ppXyNaaSFSI1ppIWEjWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppJ1cjWmkncCNaaSd3I1ppJ3gjWmkhTyNaaSFjI1ppbiNaaSFUI1ppJVEjWmkhXSNaaX5PaiNaaX5QIUlRT2ojUk9+UCFJUU9RI15PaiNST3Uhe092IXtPeCF8TyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08nZlFPXyNaaSFSI1ppI2UjWmkjZyNaaSNpI1ppI2ojWmknVyNaaSdwI1ppJ3cjWmkneCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppfk9aI1ppIWEjWmkjYSNaaSNiI1ppI2MjWml+UCFLbE9aI2RPIWEjVE8jYSNUTyNiI1RPI2MjVE9+UCFLbE9RI15PWiNkT2ojUk91IXtPdiF7T3ghfE8hYSNUTyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08jYSNUTyNiI1RPI2MjVE8jZSNVTydmUU9fI1ppIVIjWmkjZyNaaSNpI1ppI2ojWmknVyNaaSdwI1ppJ3gjWmkhTyNaaSFjI1ppbiNaaSFUI1ppJVEjWmkhXSNaaX5PJ3cjWml+UCFOZE8ndyF9T35QIU5kT1EjXk9aI2RPaiNST3Uhe092IXtPeCF8TyFhI1RPIWIheU8hZCF6TyFqI15PI1sjUE8jXSNRTyNeI1FPI18jUU8jYCNTTyNhI1RPI2IjVE8jYyNUTyNlI1VPI2cjV08nZlFPJ3chfU9fI1ppIVIjWmkjaSNaaSNqI1ppJ1cjWmkncCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppfk8neCNaaX5QIyNPTyd4I09PflAjI09PUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIWEjVE8hYiF5TyFkIXpPIWojXk8jWyNQTyNdI1FPI14jUU8jXyNRTyNgI1NPI2EjVE8jYiNUTyNjI1RPI2UjVU8jZyNXTyNpI1lPJ2ZRTyd3IX1PJ3gjT09+T18jWmkhUiNaaSNqI1ppJ1cjWmkncCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppflAjJWpPUVtYWltYaltYdVtYdltYeFtYIWFbWCFiW1ghZFtYIWpbWCF7W1gjV2RYI1tbWCNdW1gjXltYI19bWCNgW1gjYVtYI2JbWCNjW1gjZVtYI2dbWCNpW1gjaltYI29bWCdmW1gncFtYJ3dbWCd4W1ghUltYIVNbWH5PI21bWH5QIyd9T1EjXk9aOXJPajlnT3Uhe092IXtPeCF8TyFhOWlPIWIheU8hZCF6TyFqI15PI1s5ZU8jXTlmTyNeOWZPI185Zk8jYDloTyNhOWlPI2I5aU8jYzlpTyNlOWpPI2c5bE8jaTluTyNqOW9PJ2ZRTydwI1tPJ3chfU8neCNPT35PI20saE9+UCMqWE9RJ2lYWidpWGonaVh1J2lYdidpWHgnaVghYSdpWCFiJ2lYIWQnaVghaidpWCNbJ2lYI10naVgjXidpWCNfJ2lYI2AnaVgjYSdpWCNiJ2lYI2UnaVgjZydpWCNpJ2lYI2onaVgnZidpWCdwJ2lYJ3cnaVgneCdpWCFSJ2lYfk8hezlzTyNvOXNPI2MnaVgjbSdpWCFTJ2lYflAjLFNPXyZzYSFSJnNhJ1cmc2EhYyZzYW4mc2EhTyZzYSFUJnNhJVEmc2EhXSZzYX5QISl3T1EjWmlaI1ppXyNaaWojWml2I1ppIVIjWmkhYSNaaSFiI1ppIWQjWmkhaiNaaSNbI1ppI10jWmkjXiNaaSNfI1ppI2AjWmkjYSNaaSNiI1ppI2MjWmkjZSNaaSNnI1ppI2kjWmkjaiNaaSdXI1ppJ2YjWmkncCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppflAhQnBPXyNuaSFSI25pJ1cjbmkhTyNuaSFjI25pbiNuaSFUI25pJVEjbmkhXSNuaX5QISl3TyN6LGpPfk8jeixrT35PIV0nbE8heyxsTyFUJE9YI3ckT1gjeiRPWCRSJE9Yfk8hUSxtT35PIVQnb08jdyxvTyN6J25PJFIscE9+TyFSOXBPIVMnaFh+UCMqWE8hUyxxT35PJFIsc09+T1MnfU8nVShPTydWLHZPfk9dLHlPayx5TyFPLHpPfk8hUmRYIV1kWCFjZFghYyRlWCdwZFh+UCEhck8hYy1RT35QIUJwTyFSLVJPIV0hd08ncCZvTyFjJ31Yfk8hYy1XT35PIVEoYE8nXSRiTyFjJ31Qfk8jVy1ZT35PIU8kZVghUiRlWCFdJGxYflAhIXJPIVItWk8hTyhPWH5QIUJwTyFdLV1Pfk8hTy1fT35Pai1jTyFdIXdPIWQkWk8nYiRQTydwJm9Pfk8hXSlhT35PXyReTyFSLWhPJ1ckXk9+TyFTLWpPflAhJmpPIVgta08hWS1rTydeJGRPJ2coak9+T3gtbU8nZyhqT35PIXgtbk9+TyddJHtPIVImeFgnYSZ4WH5PIVIoeU8nYSdjYX5PJ2Etc09+T3UtdE92LXRPeC11T1ByYSd3cmEneHJhIVJyYSF7cmF+TydhcmEjbXJhflAjN3BPdShTT3goVE9QJF5hJ3ckXmEneCReYSFSJF5hIXskXmF+TydhJF5hI20kXmF+UCM4Zk91KFNPeChUT1AkYGEndyRgYSd4JGBhIVIkYGEheyRgYX5PJ2EkYGEjbSRgYX5QIzlYT10tdk9+TyNXLXdPfk8nYSRuYSFSJG5hIXskbmEjbSRuYX5QISN7TyNXLXpPfk9QLlRPIVQmZE8hby5TTyVRLlJPfk9dI3FPaiNyT2sjcU9sI3FPcSRST3M5dE94I3lPIVQjek8hXztlTyFkI3ZPI1Y5fU8jdCRWTyRfOXdPJGE5ek8kZCRXTydiJFBPJ2Yjc09+T2guVk8nXS5VT35QIzp5TyFdKWFPIVQnYGFfJ2BhIVInYGEnVydgYX5PI1cuXU9+T1pbWCFSZFghU2RYfk8hUi5eTyFTKFZYfk8hUy5gT35PWi5hT35PXS5jTyddKWlPfk8hVCRsTyddJGJPXidRWCFSJ1FYfk8hUiluT14oVWF+TyFjLmZPflAhKXdPXS5oT35PWi5pT35PXi5qT35PUC5UTyFUJmRPIW8uU08lUS5STydiJFBPfk8hUil6T18oUmEnVyhSYX5PIXsucE9+T1Auc08hVCN6T35PJ2cnVE8hUyhTUH5PUC59TyFULnlPIW8ufE8lUS57TydiJFBPfk9aL1hPIVIvVk8hUyhUWH5PIVMvWU9+T14vW09fJF5PJ1ckXk9+T10vXU9+T10vXk8nXSh8T35PI2MvX08lci9gT35QMHpPIXsjZU8jYy9fTyVyL2BPfk9fL2FPflApe09fL2NPfk8ley9nT1EleWlSJXlpWCV5aV0leWlfJXlpYiV5aWMleWloJXlpaiV5aWsleWlsJXlpcSV5aXMleWl4JXlpeyV5aXwleWl9JXlpIVQleWkhXyV5aSFkJXlpIWcleWkhaCV5aSFpJXlpIWoleWkhayV5aSFuJXlpI2QleWkjdCV5aSN4JXlpJVAleWklUiV5aSVUJXlpJVUleWklWCV5aSVaJXlpJV4leWklXyV5aSVhJXlpJW4leWkldCV5aSV2JXlpJXgleWkleiV5aSV9JXlpJlQleWkmWiV5aSZdJXlpJl8leWkmYSV5aSZjJXlpJ1MleWknXSV5aSdmJXlpJ28leWknfCV5aSFTJXlpYCV5aSZRJXlpfk9gL21PIVMva08mUS9sT35QYE8hVFNPIWQvb09+TyZYKndPUSZTaVImU2lYJlNpXSZTaV8mU2liJlNpYyZTaWgmU2lqJlNpayZTaWwmU2lxJlNpcyZTaXgmU2l7JlNpfCZTaX0mU2khVCZTaSFfJlNpIWQmU2khZyZTaSFoJlNpIWkmU2khaiZTaSFrJlNpIW4mU2kjZCZTaSN0JlNpI3gmU2klUCZTaSVSJlNpJVQmU2klVSZTaSVYJlNpJVomU2klXiZTaSVfJlNpJWEmU2klbiZTaSV0JlNpJXYmU2kleCZTaSV6JlNpJX0mU2kmVCZTaSZaJlNpJl0mU2kmXyZTaSZhJlNpJmMmU2knUyZTaSddJlNpJ2YmU2knbyZTaSd8JlNpIVMmU2kleyZTaWAmU2kmUSZTaX5PIVIjYk9uJF1hfk8hTyZpaSFSJmlpflAhKXdPIVIlek8hTydqaX5PIVImYE8hTyd0aX5PIU8vdU9+TyFSIVZhIVMhVmF+UCMqWE9dJlJPayZSTyFRL3tPJ2coak8hUiZqWCFTJmpYflBAZE8hUitgTyFTJ2thfk9dJlpPayZaTyFRKXlPJ2cnVE8hUiZvWCFTJm9Yfk8hUitjTyFTJ3Zhfk8hTyd1aSFSJ3VpflAhKXdPXyReTyFdIXdPIWQkWk8hajBWTyF7MFRPJ1ckXk8nYiRQTydwJm9Pfk8hUzBZT35QIT9pTyFYMFpPIVkwWk8nXiRkTydnKGpPJ28raU9+TyFXMFtPflAjTVNPIVRTTyFXMFtPIXUwXk8heDBfT35QI01TTyFXMFtPIXMwYU8hdDBhTyF1MF5PIXgwX09+UCNNU08hVCZkT35PIVQmZE9+UCFCcE8hUidyaSFjJ3JpXydyaSdXJ3JpflAhKXdPIXswak8hUidyaSFjJ3JpXydyaSdXJ3Jpfk8hUiZ0TyFjJ3Fpfk94JHVPIVQkdk8jVjBsTyddJGJPfk8jV3JhUXJhWnJhX3JhanJhIWFyYSFicmEhZHJhIWpyYSNbcmEjXXJhI15yYSNfcmEjYHJhI2FyYSNicmEjY3JhI2VyYSNncmEjaXJhI2pyYSdXcmEnZnJhJ3ByYSFjcmEhT3JhIVRyYW5yYSVRcmEhXXJhflAjN3BPI1ckXmFRJF5hWiReYV8kXmFqJF5hdiReYSFhJF5hIWIkXmEhZCReYSFqJF5hI1skXmEjXSReYSNeJF5hI18kXmEjYCReYSNhJF5hI2IkXmEjYyReYSNlJF5hI2ckXmEjaSReYSNqJF5hJ1ckXmEnZiReYSdwJF5hIWMkXmEhTyReYSFUJF5hbiReYSVRJF5hIV0kXmF+UCM4Zk8jVyRgYVEkYGFaJGBhXyRgYWokYGF2JGBhIWEkYGEhYiRgYSFkJGBhIWokYGEjWyRgYSNdJGBhI14kYGEjXyRgYSNgJGBhI2EkYGEjYiRgYSNjJGBhI2UkYGEjZyRgYSNpJGBhI2okYGEnVyRgYSdmJGBhJ3AkYGEhYyRgYSFPJGBhIVQkYGFuJGBhJVEkYGEhXSRgYX5QIzlYTyNXJG5hUSRuYVokbmFfJG5haiRuYXYkbmEhUiRuYSFhJG5hIWIkbmEhZCRuYSFqJG5hI1skbmEjXSRuYSNeJG5hI18kbmEjYCRuYSNhJG5hI2IkbmEjYyRuYSNlJG5hI2ckbmEjaSRuYSNqJG5hJ1ckbmEnZiRuYSdwJG5hIWMkbmEhTyRuYSFUJG5hIXskbmFuJG5hJVEkbmEhXSRuYX5QIUJwT18jT3EhUiNPcSdXI09xIU8jT3EhYyNPcW4jT3EhVCNPcSVRI09xIV0jT3F+UCEpd08hUiZrWCdhJmtYflBKak8hUixfTydhJ21hfk8hUTB0TyFSJmxYIWMmbFh+UCl7TyFSLGJPIWMnbmF+TyFSLGJPIWMnbmF+UCEpd08jbSFmYSFTIWZhflBDZk8jbSFeYSFSIV5hIVMhXmF+UCMqWE8hVDFYTyN4Xk8kUDFZT35PIVMxXk9+T24xX09+UCFCcE9fJFlxIVIkWXEnVyRZcSFPJFlxIWMkWXFuJFlxIVQkWXElUSRZcSFdJFlxflAhKXdPIU8xYE9+T10seU9rLHlPfk91KFNPeChUTyd4KFhPUCR4aSd3JHhpIVIkeGkheyR4aX5PJ2EkeGkjbSR4aX5QJC5QT3UoU094KFRPUCR6aSd3JHppJ3gkemkhUiR6aSF7JHppfk8nYSR6aSNtJHppflAkLnJPJ3AjW09+UCFCcE8hUTFjTyddJGJPIVImdFghYyZ0WH5PIVItUk8hYyd9YX5PIVItUk8hXSF3TyFjJ31hfk8hUi1STyFdIXdPJ3Amb08hYyd9YX5PJ2EkZ2khUiRnaSF7JGdpI20kZ2l+UCEje08hUTFrTyddKGVPIU8mdlghUiZ2WH5QISRqTyFSLVpPIU8oT2F+TyFSLVpPIU8oT2F+UCFCcE8hXSF3T35PIV0hd08jYzFzT35PajF2TyFdIXdPJ3Amb09+TyFSJ2RpJ2EnZGl+UCEje08hezF5TyFSJ2RpJ2EnZGl+UCEje08hYzF8T35PXyRacSFSJFpxJ1ckWnEhTyRacSFjJFpxbiRacSFUJFpxJVEkWnEhXSRacX5QISl3TyFSMlFPIVQoUFh+UCFCcE8hVCZkTyVRMlRPfk8hVCZkTyVRMlRPflAhQnBPIVQkZVgkdVtYXyRlWCFSJGVYJ1ckZVh+UCEhck8kdTJYT1BnWHVnWHhnWCFUZ1gnd2dYJ3hnWF9nWCFSZ1gnV2dYfk8kdTJYT35PXTJfTyVSMmBPJ10paU8hUidQWCFTJ1BYfk8hUi5eTyFTKFZhfk9aMmRPfk9eMmVPfk9dMmhPfk9QMmpPIVQmZE8hbzJpTyVRMlRPfk9fJF5PJ1ckXk9+UCFCcE8hVCN6T35QIUJwTyFSMm9PIXsycU8hUyhTWH5PIVMyck9+T3g7b08hVzJ7TyFYMnRPIVkydE8hcjJ6TyFzMnlPIXQyeU8heDJ4TydeJGRPJ2coak8nbytpT35PIVMyd09+UCQ3Wk9QM1NPIVQueU8hbzNSTyVRM1FPfk9QM1NPIVQueU8hbzNSTyVRM1FPJ2IkUE9+TyddKHxPIVInT1ghUydPWH5PIVIvVk8hUyhUYX5PXTNeTydnM11Pfk9dM19Pfk9eM2FPfk8hYzNkT35QKXtPXzNmT35PXzNmT35QKXtPI2MzaE8lcjNpT35QRk9PYC9tTyFTM21PJlEvbE9+UGBPIV0zb09+TyFSI1RpIVMjVGl+UCMqWE8hezNxTyFSI1RpIVMjVGl+TyFSIVZpIVMhVml+UCMqWE9fJF5PIXszeE8nVyReT35PXyReTyFdIXdPIXszeE8nVyReT35PIVgzfE8hWTN8TydeJGRPJ2coak8nbytpT35PXyReTyFdIXdPIWQkWk8hajN9TyF7M3hPJ1ckXk8nYiRQTydwJm9Pfk8hVzRPT35QJDt4TyFXNE9PIXU0Uk8heDRTT35QJDt4T18kXk8hXSF3TyFqM31PIXszeE8nVyReTydwJm9Pfk8hUidycSFjJ3JxXydycSdXJ3JxflAhKXdPIVImdE8hYydxcX5PI1ckeGlRJHhpWiR4aV8keGlqJHhpdiR4aSFhJHhpIWIkeGkhZCR4aSFqJHhpI1skeGkjXSR4aSNeJHhpI18keGkjYCR4aSNhJHhpI2IkeGkjYyR4aSNlJHhpI2ckeGkjaSR4aSNqJHhpJ1ckeGknZiR4aSdwJHhpIWMkeGkhTyR4aSFUJHhpbiR4aSVRJHhpIV0keGl+UCQuUE8jVyR6aVEkemlaJHppXyR6aWokeml2JHppIWEkemkhYiR6aSFkJHppIWokemkjWyR6aSNdJHppI14kemkjXyR6aSNgJHppI2EkemkjYiR6aSNjJHppI2UkemkjZyR6aSNpJHppI2okemknVyR6aSdmJHppJ3AkemkhYyR6aSFPJHppIVQkemluJHppJVEkemkhXSR6aX5QJC5yTyNXJGdpUSRnaVokZ2lfJGdpaiRnaXYkZ2khUiRnaSFhJGdpIWIkZ2khZCRnaSFqJGdpI1skZ2kjXSRnaSNeJGdpI18kZ2kjYCRnaSNhJGdpI2IkZ2kjYyRnaSNlJGdpI2ckZ2kjaSRnaSNqJGdpJ1ckZ2knZiRnaSdwJGdpIWMkZ2khTyRnaSFUJGdpIXskZ2luJGdpJVEkZ2khXSRnaX5QIUJwTyFSJmthJ2Ema2F+UCEje08hUiZsYSFjJmxhflAhKXdPIVIsYk8hYyduaX5PI20jT2khUiNPaSFTI09pflAjKlhPUSNeT3Uhe092IXtPeCF8TyFiIXlPIWQhek8haiNeTydmUU9aI1ppaiNaaSFhI1ppI10jWmkjXiNaaSNfI1ppI2AjWmkjYSNaaSNiI1ppI2MjWmkjZSNaaSNnI1ppI2kjWmkjaiNaaSNtI1ppJ3AjWmkndyNaaSd4I1ppIVIjWmkhUyNaaX5PI1sjWml+UCRFaU8jWzllT35QJEVpT1EjXk91IXtPdiF7T3ghfE8hYiF5TyFkIXpPIWojXk8jWzllTyNdOWZPI145Zk8jXzlmTydmUU9aI1ppIWEjWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppI20jWmkncCNaaSd3I1ppJ3gjWmkhUiNaaSFTI1ppfk9qI1ppflAkR3FPajlnT35QJEdxT1EjXk9qOWdPdSF7T3Yhe094IXxPIWIheU8hZCF6TyFqI15PI1s5ZU8jXTlmTyNeOWZPI185Zk8jYDloTydmUU8jZSNaaSNnI1ppI2kjWmkjaiNaaSNtI1ppJ3AjWmkndyNaaSd4I1ppIVIjWmkhUyNaaX5PWiNaaSFhI1ppI2EjWmkjYiNaaSNjI1ppflAkSXlPWjlyTyFhOWlPI2E5aU8jYjlpTyNjOWlPflAkSXlPUSNeT1o5ck9qOWdPdSF7T3Yhe094IXxPIWE5aU8hYiF5TyFkIXpPIWojXk8jWzllTyNdOWZPI145Zk8jXzlmTyNgOWhPI2E5aU8jYjlpTyNjOWlPI2U5ak8nZlFPI2cjWmkjaSNaaSNqI1ppI20jWmkncCNaaSd4I1ppIVIjWmkhUyNaaX5PJ3cjWml+UCRMX08ndyF9T35QJExfT1EjXk9aOXJPajlnT3Uhe092IXtPeCF8TyFhOWlPIWIheU8hZCF6TyFqI15PI1s5ZU8jXTlmTyNeOWZPI185Zk8jYDloTyNhOWlPI2I5aU8jYzlpTyNlOWpPI2c5bE8nZlFPJ3chfU8jaSNaaSNqI1ppI20jWmkncCNaaSFSI1ppIVMjWml+Tyd4I1ppflAkTmdPJ3gjT09+UCROZ09RI15PWjlyT2o5Z091IXtPdiF7T3ghfE8hYTlpTyFiIXlPIWQhek8haiNeTyNbOWVPI105Zk8jXjlmTyNfOWZPI2A5aE8jYTlpTyNiOWlPI2M5aU8jZTlqTyNnOWxPI2k5bk8nZlFPJ3chfU8neCNPT35PI2ojWmkjbSNaaSdwI1ppIVIjWmkhUyNaaX5QJSFvT18ja3khUiNreSdXI2t5IU8ja3khYyNreW4ja3khVCNreSVRI2t5IV0ja3l+UCEpd09QO3ZPdShTT3goVE8ndyhWTyd4KFhPfk9RI1ppWiNaaWojWml2I1ppIWEjWmkhYiNaaSFkI1ppIWojWmkjWyNaaSNdI1ppI14jWmkjXyNaaSNgI1ppI2EjWmkjYiNaaSNjI1ppI2UjWmkjZyNaaSNpI1ppI2ojWmkjbSNaaSdmI1ppJ3AjWmkhUiNaaSFTI1ppflAlJWFPIWIheU9QJ2VYdSdlWHgnZVgndydlWCd4J2VYIVMnZVh+T1EnZVhaJ2VYaidlWHYnZVghYSdlWCFkJ2VYIWonZVgjWydlWCNdJ2VYI14nZVgjXydlWCNgJ2VYI2EnZVgjYidlWCNjJ2VYI2UnZVgjZydlWCNpJ2VYI2onZVgjbSdlWCdmJ2VYJ3AnZVghUidlWH5QJSdlTyNtI25pIVIjbmkhUyNuaX5QIypYTyFTNGVPfk8hUiZzYSFTJnNhflAjKlhPIV0hd08ncCZvTyFSJnRhIWMmdGF+TyFSLVJPIWMnfWl+TyFSLVJPIV0hd08hYyd9aX5PJ2EkZ3EhUiRncSF7JGdxI20kZ3F+UCEje08hTyZ2YSFSJnZhflAhQnBPIV00bE9+TyFSLVpPIU8oT2l+UCFCcE8hUi1aTyFPKE9pfk8hTzRwT35PIV0hd08jYzR1T35PajR2TyFdIXdPJ3Amb09+TyFPNHhPfk8nYSRpcSFSJGlxIXskaXEjbSRpcX5QISN7T18kWnkhUiRaeSdXJFp5IU8kWnkhYyRaeW4kWnkhVCRaeSVRJFp5IV0kWnl+UCEpd08hUjJRTyFUKFBhfk8hVCZkTyVRNH1Pfk8hVCZkTyVRNH1PflAhQnBPXyNPeSFSI095J1cjT3khTyNPeSFjI095biNPeSFUI095JVEjT3khXSNPeX5QISl3T1o1UU9+T101U08nXSlpT35PIVIuXk8hUyhWaX5PXTVWT35PXjVXT35PJ2cnVE8hUiZ7WCFTJntYfk8hUjJvTyFTKFNhfk8hUzVlT35QJDdaT3g7c08nZyhqTydvK2lPfk8hVzVoTyFYNWdPIVk1Z08heDBfTydeJGRPJ2coak8nbytpT35PIXM1aU8hdDVpT35QJTBeTyFYNWdPIVk1Z08nXiRkTydnKGpPJ28raU9+TyFULnlPfk8hVC55TyVRNWtPfk8hVC55TyVRNWtPflAhQnBPUDVwTyFULnlPIW81b08lUTVrT35PWjV1TyFSJ09hIVMnT2F+TyFSL1ZPIVMoVGl+T101eE9+TyFjNXlPfk8hYzV6T35PIWM1e09+TyFjNXtPflApe09fNX1Pfk8hXTZRT35PIWM2Uk9+TyFSJ3VpIVMndWl+UCMqWE9fJF5PJ1ckXk9+UCEpd09fJF5PIXs2V08nVyReT35PXyReTyFdIXdPIXs2V08nVyReT35PIVg2XU8hWTZdTydeJGRPJ2coak8nbytpT35PXyReTyFdIXdPIWo2Xk8hezZXTydXJF5PJ3Amb09+TyFkJFpPJ2IkUE9+UCU0eE8hVzZfT35QJTRnTyFSJ3J5IWMncnlfJ3J5J1cncnl+UCEpd08jVyRncVEkZ3FaJGdxXyRncWokZ3F2JGdxIVIkZ3EhYSRncSFiJGdxIWQkZ3EhaiRncSNbJGdxI10kZ3EjXiRncSNfJGdxI2AkZ3EjYSRncSNiJGdxI2MkZ3EjZSRncSNnJGdxI2kkZ3EjaiRncSdXJGdxJ2YkZ3EncCRncSFjJGdxIU8kZ3EhVCRncSF7JGdxbiRncSVRJGdxIV0kZ3F+UCFCcE8jVyRpcVEkaXFaJGlxXyRpcWokaXF2JGlxIVIkaXEhYSRpcSFiJGlxIWQkaXEhaiRpcSNbJGlxI10kaXEjXiRpcSNfJGlxI2AkaXEjYSRpcSNiJGlxI2MkaXEjZSRpcSNnJGlxI2kkaXEjaiRpcSdXJGlxJ2YkaXEncCRpcSFjJGlxIU8kaXEhVCRpcSF7JGlxbiRpcSVRJGlxIV0kaXF+UCFCcE8hUiZsaSFjJmxpflAhKXdPI20jT3EhUiNPcSFTI09xflAjKlhPdS10T3YtdE94LXVPUHJhJ3dyYSd4cmEhU3Jhfk9RcmFacmFqcmEhYXJhIWJyYSFkcmEhanJhI1tyYSNdcmEjXnJhI19yYSNgcmEjYXJhI2JyYSNjcmEjZXJhI2dyYSNpcmEjanJhI21yYSdmcmEncHJhIVJyYX5QJTtPT3UoU094KFRPUCReYSd3JF5hJ3gkXmEhUyReYX5PUSReYVokXmFqJF5hdiReYSFhJF5hIWIkXmEhZCReYSFqJF5hI1skXmEjXSReYSNeJF5hI18kXmEjYCReYSNhJF5hI2IkXmEjYyReYSNlJF5hI2ckXmEjaSReYSNqJF5hI20kXmEnZiReYSdwJF5hIVIkXmF+UCU9U091KFNPeChUT1AkYGEndyRgYSd4JGBhIVMkYGF+T1EkYGFaJGBhaiRgYXYkYGEhYSRgYSFiJGBhIWQkYGEhaiRgYSNbJGBhI10kYGEjXiRgYSNfJGBhI2AkYGEjYSRgYSNiJGBhI2MkYGEjZSRgYSNnJGBhI2kkYGEjaiRgYSNtJGBhJ2YkYGEncCRgYSFSJGBhflAlP1dPUSRuYVokbmFqJG5hdiRuYSFhJG5hIWIkbmEhZCRuYSFqJG5hI1skbmEjXSRuYSNeJG5hI18kbmEjYCRuYSNhJG5hI2IkbmEjYyRuYSNlJG5hI2ckbmEjaSRuYSNqJG5hI20kbmEnZiRuYSdwJG5hIVIkbmEhUyRuYX5QJSVhTyNtJFlxIVIkWXEhUyRZcX5QIypYTyNtJFpxIVIkWnEhUyRacX5QIypYTyFTNmhPfk8jbTZpT35QISN7TyFdIXdPIVImdGkhYyZ0aX5PIV0hd08ncCZvTyFSJnRpIWMmdGl+TyFSLVJPIWMnfXF+TyFPJnZpIVImdml+UCFCcE8hUi1aTyFPKE9xfk8hTzZvT35QIUJwTyFPNm9Pfk8hUidkeSdhJ2R5flAhI3tPIVImeWEhVCZ5YX5QIUJwTyFUJHRxXyR0cSFSJHRxJ1ckdHF+UCFCcE9aNnZPfk8hUi5eTyFTKFZxfk9dNnlPfk8hVCZkTyVRNnpPfk8hVCZkTyVRNnpPflAhQnBPIXs2e08hUiZ7YSFTJnthfk8hUjJvTyFTKFNpflAjKlhPIVg3Uk8hWTdSTydeJGRPJ2coak8nbytpT35PIVc3VE8heDRTT35QJUdYTyFULnlPJVE3V09+TyFULnlPJVE3V09+UCFCcE9dN19PJ2c3Xk9+TyFSL1ZPIVMoVHF+TyFjN2FPfk8hYzdhT35QKXtPIWM3Y09+TyFjN2RPfk8hUiNUeSFTI1R5flAjKlhPXyReTyF7N2pPJ1ckXk9+T18kXk8hXSF3TyF7N2pPJ1ckXk9+TyFYN21PIVk3bU8nXiRkTydnKGpPJ28raU9+T18kXk8hXSF3TyFqN25PIXs3ak8nVyReTydwJm9Pfk8jbSNreSFSI2t5IVMja3l+UCMqWE9RJGdpWiRnaWokZ2l2JGdpIWEkZ2khYiRnaSFkJGdpIWokZ2kjWyRnaSNdJGdpI14kZ2kjXyRnaSNgJGdpI2EkZ2kjYiRnaSNjJGdpI2UkZ2kjZyRnaSNpJGdpI2okZ2kjbSRnaSdmJGdpJ3AkZ2khUiRnaSFTJGdpflAlJWFPdShTT3goVE8neChYT1AkeGkndyR4aSFTJHhpfk9RJHhpWiR4aWokeGl2JHhpIWEkeGkhYiR4aSFkJHhpIWokeGkjWyR4aSNdJHhpI14keGkjXyR4aSNgJHhpI2EkeGkjYiR4aSNjJHhpI2UkeGkjZyR4aSNpJHhpI2okeGkjbSR4aSdmJHhpJ3AkeGkhUiR4aX5QJUxqT3UoU094KFRPUCR6aSd3JHppJ3gkemkhUyR6aX5PUSR6aVokemlqJHppdiR6aSFhJHppIWIkemkhZCR6aSFqJHppI1skemkjXSR6aSNeJHppI18kemkjYCR6aSNhJHppI2IkemkjYyR6aSNlJHppI2ckemkjaSR6aSNqJHppI20kemknZiR6aSdwJHppIVIkeml+UCVObk8jbSRaeSFSJFp5IVMkWnl+UCMqWE8jbSNPeSFSI095IVMjT3l+UCMqWE8hXSF3TyFSJnRxIWMmdHF+TyFSLVJPIWMnfXl+TyFPJnZxIVImdnF+UCFCcE8hTzd0T35QIUJwTyFSLl5PIVMoVnl+TyFSMm9PIVMoU3F+TyFYOFFPIVk4UU8nXiRkTydnKGpPJ28raU9+TyFULnlPJVE4VE9+TyFULnlPJVE4VE9+UCFCcE8hYzhXT35PXyReTyF7OF1PJ1ckXk9+T18kXk8hXSF3TyF7OF1PJ1ckXk9+T1EkZ3FaJGdxaiRncXYkZ3EhYSRncSFiJGdxIWQkZ3EhaiRncSNbJGdxI10kZ3EjXiRncSNfJGdxI2AkZ3EjYSRncSNiJGdxI2MkZ3EjZSRncSNnJGdxI2kkZ3EjaiRncSNtJGdxJ2YkZ3EncCRncSFSJGdxIVMkZ3F+UCUlYU9RJGlxWiRpcWokaXF2JGlxIWEkaXEhYiRpcSFkJGlxIWokaXEjWyRpcSNdJGlxI14kaXEjXyRpcSNgJGlxI2EkaXEjYiRpcSNjJGlxI2UkaXEjZyRpcSNpJGlxI2okaXEjbSRpcSdmJGlxJ3AkaXEhUiRpcSFTJGlxflAlJWFPJ2EkfCFaIVIkfCFaIXskfCFaI20kfCFaflAhI3tPIVIme3EhUyZ7cX5QIypYT18kXk8hezhvTydXJF5Pfk8jVyR8IVpRJHwhWlokfCFaXyR8IVpqJHwhWnYkfCFaIVIkfCFaIWEkfCFaIWIkfCFaIWQkfCFaIWokfCFaI1skfCFaI10kfCFaI14kfCFaI18kfCFaI2AkfCFaI2EkfCFaI2IkfCFaI2MkfCFaI2UkfCFaI2ckfCFaI2kkfCFaI2okfCFaJ1ckfCFaJ2YkfCFaJ3AkfCFaIWMkfCFaIU8kfCFaIVQkfCFaIXskfCFabiR8IVolUSR8IVohXSR8IVp+UCFCcE9QO3VPdShTT3goVE8ndyhWTyd4KFhPfk8hUyF6YSFXIXphIVghemEhWSF6YSFyIXphIXMhemEhdCF6YSF4IXphJ14hemEnZyF6YSdvIXphflAmLF9PIVcnZVghWCdlWCFZJ2VYIXInZVghcydlWCF0J2VYIXgnZVgnXidlWCdnJ2VYJ28nZVh+UCUnZU9RJHwhWlokfCFaaiR8IVp2JHwhWiFhJHwhWiFiJHwhWiFkJHwhWiFqJHwhWiNbJHwhWiNdJHwhWiNeJHwhWiNfJHwhWiNgJHwhWiNhJHwhWiNiJHwhWiNjJHwhWiNlJHwhWiNnJHwhWiNpJHwhWiNqJHwhWiNtJHwhWidmJHwhWidwJHwhWiFSJHwhWiFTJHwhWn5QJSVhTyFXcmEhWHJhIVlyYSFycmEhc3JhIXRyYSF4cmEnXnJhJ2dyYSdvcmF+UCU7T08hVyReYSFYJF5hIVkkXmEhciReYSFzJF5hIXQkXmEheCReYSdeJF5hJ2ckXmEnbyReYX5QJT1TTyFXJGBhIVgkYGEhWSRgYSFyJGBhIXMkYGEhdCRgYSF4JGBhJ14kYGEnZyRgYSdvJGBhflAlP1dPIVMkbmEhVyRuYSFYJG5hIVkkbmEhciRuYSFzJG5hIXQkbmEheCRuYSdeJG5hJ2ckbmEnbyRuYX5QJixfTyFXJHhpIVgkeGkhWSR4aSFyJHhpIXMkeGkhdCR4aSF4JHhpJ14keGknZyR4aSdvJHhpflAlTGpPIVckemkhWCR6aSFZJHppIXIkemkhcyR6aSF0JHppIXgkemknXiR6aSdnJHppJ28keml+UCVObk8hUyRnaSFXJGdpIVgkZ2khWSRnaSFyJGdpIXMkZ2khdCRnaSF4JGdpJ14kZ2knZyRnaSdvJGdpflAmLF9PIVMkZ3EhVyRncSFYJGdxIVkkZ3EhciRncSFzJGdxIXQkZ3EheCRncSdeJGdxJ2ckZ3EnbyRncX5QJixfTyFTJGlxIVckaXEhWCRpcSFZJGlxIXIkaXEhcyRpcSF0JGlxIXgkaXEnXiRpcSdnJGlxJ28kaXF+UCYsX08hUyR8IVohVyR8IVohWCR8IVohWSR8IVohciR8IVohcyR8IVohdCR8IVoheCR8IVonXiR8IVonZyR8IVonbyR8IVp+UCYsX09uJ2hYflAuak9uW1ghT1tYIWNbWCVyW1ghVFtYJVFbWCFdW1h+UCR6TyFdZFghY1tYIWNkWCdwZFh+UDtkT1E5Xk9SOV5PXWNPYjtgT2Mhak9oY09qOV5Pa2NPbGNPcTleT3M5Xk94Uk97Y098Y099Y08hVFNPIV85YE8hZFVPIWc5Xk8haDleTyFpOV5PIWo5Xk8hazleTyFuIWlPI3QhbE8jeF5PJ10nY08nZlFPJ29ZTyd8O15Pfk9dI3FPaCRRT2ojck9rI3FPbCNxT3EkUk9zOXVPeCN5TyFUI3pPIV87Zk8hZCN2TyNWOk9PI3QkVk8kXzl4TyRhOXtPJGQkV08nXSZ7TydiJFBPJ2Yjc09+TyFSOXBPIVMkXWF+T10jcU9oJFFPaiNyT2sjcU9sI3FPcSRST3M5dk94I3lPIVQjek8hXztnTyFkI3ZPI1Y6UE8jdCRWTyRfOXlPJGE5fE8kZCRXTyddJntPJ2IkUE8nZiNzT35PI2Qnak9+UCY8V08hU1tYIVNkWH5QO2RPIV05ZE9+TyNXOWNPfk8hXSF3TyNXOWNPfk8hezlzT35PI2M5aU9+TyF7OlFPIVIndVghUyd1WH5PIXs5c08hUidzWCFTJ3NYfk8jVzpST35PJ2E6VE9+UCEje08jVzpbT35PI1c6XU9+TyNXOl5Pfk8hXSF3TyNXOl9Pfk8hXSF3TyNXOlJPfk8jbTpgT35QIypYTyNXOmFPfk8jVzpiT35PI1c6Y09+TyNXOmRPfk8jVzplT35PI1c6Zk9+TyNXOmdPfk8jVzpoT35PIU86aU9+TyNtOmpPflAhI3tPI206a09+UCEje08jbTpsT35QISN7TyFPOm1PflAhQnBPIU86bU9+TyFPOm5PflAhQnBPIV0hd08jYztsT35PIV0hd08jYztuT35PI3h+IWIhciF0IXUjVSNWJ3wkXyRhJGQkdSVQJVElUiVYJVolXiVfJWElY35VVCN4J3wjXX0nWSdaI3onWSddJ2d+IiwgZ290bzogIiNLayhaUFBQUFBQUFAoW1AobFAqYFBQUFAtelBQLmEzczdvOFNQOFNQUFA4U1A6VThTUDhTUDpZUFA6YFA6dD9WUFBQUD9aUFBQUD9aQXtQUFBCUkRkUD9aUEZ3UFBQUEhwP1pQUFBQUEppP1pQUE1qTmdQUFBQTmshIVRQISFdISNeUE5nP1o/WiEmbiEpaSEuWyEuWyExa1BQUCExciE0aD9aUFBQUFBQUFBQUCE3X1AhOHBQUD9aITl9UD9aUD9aP1o/Wj9aUD9aITtkUFAhPl1QIUFRIUFZIUFeIUFeUCE+WVAhQWIhQWJQIURWUCFEWj9aP1ohRGEhR1Q4U1A4U1A4UzhTUCFIVzhTOFMhSmY4UyFNXzhTIyBnOFM4UyMhVCMkYyMkYyMkZyMkYyMkb1AjJGNQOFMjJWs4UyMnWDhTOFMtelBQUCMoeVBQIyljIyljUCMpY1AjKXgjKWNQUCMqT1AjKXVQIyl1IypiISFYIyl1IytQIytWIytZKFsjK10oW1AjK2QjK2QjK2RQKFtQKFtQKFtQKFtQUChbUCMraiMrbVAjK20oW1AjK3FQIyt0UChbUChbUChbUChbUChbUChbKFsjK3ojLFUjLFsjLGIjLHAjLHYjLHwjLVcjLV4jLW0jLXMjLlIjLlgjLl8jLm0jL1MjMHojMVkjMWAjMWYjMWwjMXIjMXwjMlMjMlkjMmQjMnYjMnxQUFBQUFBQUCMzU1BQIzN2IzdPUFAjOGYjOG0jOHVQUCM+YSNAdCNGcCNGcyNGdiNHUiNHVVBQI0dYI0ddI0d6I0hxI0h1I0laUFAjSV8jSWUjSWlQI0lsI0lwI0lzI0pjI0p5I0tPI0tSI0tVI0tbI0tfI0tjI0tnbWhPU2p9IW4kXSVjJWYlZyVpKm8qdC9nL2pRJGltUSRwcFElWnlTJlYhYitgUSZrIWpTKGwjeihxUSlnJGpRKXQkclEqYCVUUStmJl5TK2smZCttUSt9JmxRLWsoc1EvVSphWTBaK28rcCtxK3Irc1MydC55MnZVM3wwWzBeMGFVNWcyeTJ6MntTNl00TzRSUzdSNWg1aVE3bTZfUjhRN1QkcFtPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI2IjZSRdJG4lWyVfJWMlZSVmJWclaSVtJXgleiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG8haidlI10jayZXJ3crWCtbLG0vezFYMnEzcTZ7OV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUSh9JFNRKWwkbFEqYiVXUSppJWBRLFg5dFEuVylhUS5jKW1RL14qZ1EyXy5eUTNaL1ZRNF45dlE1UzJgUjh7OXVwZU9Tanl9IW4kXSVZJWMlZiVnJWkqbyp0L2cvalIqZCVbJldWT1NUamtufSFTIVchayFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNdI2IjZSNrJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV6JlMmXyZmJnAmfSdSJ3coUilWKV4qaypvKnQrVCtYK1sreCxQLGIsaCxtLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sL3swVDBqMHQxWDJpMnEzUjNmM2gzaTNxM3g1bzV9Nlc2ezdqOF04bzleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YDthWyFjUlUhXSFgJXgmV1EkY2xRJGhtUyRtcCRydiR3cnMhciF1JFokdSZgJnQmdyl4KXkpeiptK1kraCxTLFUvbzBsUSVQd1EmaCFpUSZqIWpTKF8jdihjUylmJGkkalEpaiRsUSl3JHRRKlolUlEqXyVUUyt8JmsmbFEtVihgUS5bKWdRLmIpbVEuZCluUS5nKXJRL1AqW1MvVCpgKmFRMGgrfVExYi1SUTJeLl5RMmIuYVEyZy5pUTNZL1VRNGkxY1E1UjJgUTVVMmRRNnU1UVI3dzZ2eCN4YSF5JFQkVSRZKFcoWShiKHcoeCxfLVktdzFhMXk2aTteO2k7ajtrIVkkZm0haiRoJGkkaiZVJmomayZsKGspZilnK10rait8K30tZC5bMFEwVzBdMGgxdTN7NFE2WjdrOF5RKWAkY1EqUCR8USpTJH1RKl4lVFEuayl3US9PKlpVL1MqXypgKmFRM1QvUFMzWC9UL1VRNWIyc1E1dDNZUzdQNWM1ZlM4TzdRN1NROGY4UFE4dThnI1s7YiF3I2QjdiN5JmcnfShaKGgpXSlfKWEqTypSK3ktWi1dLlIuVC5wLnMuey59MWsxczJRMlQyWDJqM1EzUzRsNHU0fTVrNXA2ejdXOFQ5dzl6OX06VTpYOls6YTpkOmo7bDtuO3Q7dTt2ZDtjOWQ5eDl7Ok86VjpZOl06YjplOmtlO2Q5cjl5OXw6UDpXOlo6XjpjOmY6bFcjfWEkUCh5O15TJHx0JVlRJH11USVPdlIpfSR6JVAjfGEhdyF5I2QjdiN5JFQkVSRZJmcnfShXKFkoWihiKGgodyh4KV0pXylhKk8qUit5LF8tWS1aLV0tdy5SLlQucC5zLnsufTFhMWsxczF5MlEyVDJYMmozUTNTNGw0dTR9NWs1cDZpNno3VzhUOWQ5cjl3OXg5eTl6OXs5fDl9Ok86UDpVOlY6VzpYOlk6WjpbOl06XjphOmI6YzpkOmU6ZjpqOms6bDteO2k7ajtrO2w7bjt0O3U7dlQoTyNzKFBYKU8kUzl0OXU5dlUmWiFiJHYrY1EnVSF7USlxJG9RLnQqVFExei10UjVeMm8mXmNPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2skXSRuJVslXyVgJWMlZSVmJWclaSVtJXgleiZTJlcmXyZmJnAmfSdSJ3coUilWKV4qaypvKnQrVCtYK1sreCxQLGIsaCxtLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sL3swVDBqMHQxWDJpMnEzUjNmM2gzaTNxM3g1bzV9Nlc2ezdqOF04bzleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YSRdI2FaIV8hbyRhJXclfSZ5J1EnVydYJ1knWidbJ10nXidfJ2AnYSdiJ2QnZydrJ3UpcCtSK14rZyxPLF4sZCxnLGksdy14L3YveTBpMHMwdzB4MHkwejB7MHwwfTFPMVAxUTFSMVMxVDFXMV0yTzJbM3MzdjRXNFs0XTRiNGM1YDZTNlY2YjZmNmc3Zzd6OFo4bTh5OV86fFQhWFEhWSZfY09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojXSNiI2UjayRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLG0tdS16LlMuXS58L18vYC9hL2MvZy9qL2wvezBUMGowdDFYMmkycTNSM2YzaDNpM3EzeDVvNX02VzZ7N2o4XThvOV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUSZYIWJSL3wrYFkmUiFiJlYmXitgK2ZTKGsjeihxUytqJmQrbVMtZChsKHNRLWUobVEtbCh0US52KlZVMFcraytvK3BVMF0rcStyK3NTMGIrdDJ4UTF1LWtRMXctbVExeC1uUzJzLnkydlUzezBaMFswXlE0UDBfUTRRMGFTNWMydDJ7UzVmMnkyelU2WjN8NE80UlE2YDRTUzdRNWc1aFE3UzVpUzdrNl02X1M4UDdSN1RROF43bVE4ZzhRUTtoO29SO207c2xoT1NqfSFuJF0lYyVmJWclaSpvKnQvZy9qUSVrIVFTJnghdjljUSlkJGdRKlglUFEqWSVRUSt6JmlTLF0mfTpSUy15KVY6X1EuWSllUS54KldRL24qdlEvcCp3US94K1pRMGArcVEwZit7UzJQLXo6Z1EyWS5aUzJdLl06aFEzci96UTN1MFJRNFUwZ1E1UDJaUTZUM3RRNlgzelE2YTRWUTdlNlJRN2g2WVE4WTdpUThsOFtSOHg4biRXI2BaIV8hbyV3JX0meSdRJ1cnWCdZJ1onWyddJ14nXydgJ2EnYidkJ2cnayd1KXArUiteK2csTyxeLGQsZyx3LXgvdi95MGkwczB3MHgweTB6MHswfDB9MU8xUDFRMVIxUzFUMVcxXTJPMlszczN2NFc0WzRdNGI0YzVgNlM2VjZiNmY2ZzdnN3o4WjhtOHk5Xzp8Vyh2I3smfDFWOHFUKVokYSxpJFcjX1ohXyFvJXclfSZ5J1EnVydYJ1knWidbJ10nXidfJ2AnYSdiJ2QnZydrJ3UpcCtSK14rZyxPLF4sZCxnLHcteC92L3kwaTBzMHcweDB5MHowezB8MH0xTzFQMVExUjFTMVQxVzFdMk8yWzNzM3Y0VzRbNF00YjRjNWA2UzZWNmI2ZjZnN2c3ejhaOG04eTlfOnxRJ2YjYFMpWSRhLGlSLXspWiZeY09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojXSNiI2UjayRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLG0tdS16LlMuXS58L18vYC9hL2MvZy9qL2wvezBUMGowdDFYMmkycTNSM2YzaDNpM3EzeDVvNX02VzZ7N2o4XThvOV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUSVme1ElZ3xRJWkhT1ElaiFQUi9mKnJRJmUhaVEpWyRjUSt3JmhTLlEpYCl3UzBjK3UrdlcyUy19Lk8uUC5rUzRUMGQwZVU0fDJVMlYyV1U2czR7NVk1WlE3djZ0UjhiN3lUK2wmZCttUytqJmQrbVUwVytrK28rcFUwXStxK3Irc1MwYit0MnhTMnMueTJ2VTN7MFowWzBeUTRQMF9RNFEwYVM1YzJ0MntTNWYyeTJ6VTZaM3w0TzRSUTZgNFNTN1E1ZzVoUTdTNWlTN2s2XTZfUzhQN1I3VFE4XjdtUjhnOFFTK2wmZCttVDJ1LnkydlMmciFxL2RRLVUoX1EtYihrUzBWK2oyc1ExZy1WUzFwLWMtbFUzfTBdMGI1ZlE0aDFiUzRzMXYxeFU2XjRQNFE3U1E2azRpUTZyNHZSN242YFEheFhTJnEhcS9kUSlXJFtRKWIkZVEpaCRrUSxRJnJRLVQoX1EtYShrUS1mKG5RLlgpY1EvUSpdUzBVK2oyc1MxZi1VLVZTMW8tYi1sUTFyLWVRMXQtZ1EzVi9SVzN5MFYwXTBiNWZRNGcxYlE0azFnUzRvMXAxeFE0dDF3UTVyM1dXNlszfTRQNFE3U1M2ajRoNGlTNm40cDppUTZwNHNRNn01YVE3WzVzUzdsNl42YFE3cjZrUzdzNm86bVE3dTZyUTd8N09ROFY3XVE4XzduUzhhN3Q6blE4ZDd9UThzOGVROVE4dFE5WDlSUTp1OnBRO1Q6elE7VTp7UTtWO2hSO1s7bSRyV09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZfJmYmcCZ9J1IoUilWKV4qaypvKnQrVCt4LFAsYixoLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sMFQwajB0MmkzUjNmM2gzaTN4NW81fTZXN2o4XThvUyF4biFrIWo6byNdI2smVyd3K1grWyxtL3sxWDJxM3E2ezleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YVI6dTtgJHJYT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNiI2UkXSRuJVslXyVgJWMlZSVmJWclaSVtJXgleiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG9RJFtiIVkkZW0haiRoJGkkaiZVJmomayZsKGspZilnK10rait8K30tZC5bMFEwVzBdMGgxdTN7NFE2WjdrOF5TJGtuIWtRKWMkZlEqXSVUVy9SKl4qXypgKmFVM1cvUy9UL1VRNWEyc1M1czNYM1lVN081YjVjNWZRN101dFU3fTdQN1E3U1M4ZThPOFBTOHQ4ZjhnUTlSOHUhajpwI10jayZXJ3crWCtbLG0vezFYMnEzcTZ7OV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUTp6O19SOns7YCRmXU9TVGprfSFTIVchbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYyVlJWYlZyVpJW0leiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG9ZIWhSVSFdIWAleHYkd3JzIXIhdSRaJHUmYCZ0JncpeCl5KXoqbStZK2gsUyxVL28wbFEqaiVgIWg6cSNdI2sndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FSOnQmV1MmWyFiJHZSME8rYyRwW09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYyVlJWYlZyVpJW0leCV6JlMmXyZmJnAmfSdSKFIpVileKmsqbyp0K1QreCxQLGIsaC11LXouUy5dLnwvXy9gL2EvYy9nL2ovbDBUMGowdDJpM1IzZjNoM2kzeDVvNX02VzdqOF04byFqJ2UjXSNrJlcndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FSKmklYCRyb09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZfJmYmcCZ9J1IoUilWKV4qaypvKnQrVCt4LFAsYixoLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sMFQwajB0MmkzUjNmM2gzaTN4NW81fTZXN2o4XThvUSdVIXshazpyI10jayZXJ3crWCtbLG0vezFYMnEzcTZ7OV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthIWgjVlohXyRhJXclfSZ5J1EnXydgJ2EnYidnJ2spcCtSK2csTyxeLGQsdy14MGkwczFUMk8yWzN2NFc0WzZWN2c4WjhtOHk5XyFSOWsnZCd1K14saS92L3kwdzFQMVExUjFTMVcxXTNzNF00YjRjNWA2UzZiNmY2Zzd6OnwhZCNYWiFfJGEldyV9JnknUSdhJ2InZydrKXArUitnLE8sXixkLHcteDBpMHMxVDJPMlszdjRXNFs2VjdnOFo4bTh5OV99OW0nZCd1K14saS92L3kwdzFSMVMxVzFdM3M0XTRiNGM1YDZTNmI2ZjZnN3o6fCFgI11aIV8kYSV3JX0meSdRJ2cnaylwK1IrZyxPLF4sZCx3LXgwaTBzMVQyTzJbM3Y0VzRbNlY3ZzhaOG04eTlfUTFhLVB4O2EnZCd1K14saS92L3kwdzFXMV0zczRdNGI0YzVgNlM2YjZmNmc3ejp8UTtpO3BRO2o7cVI7aztyJl5jT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNdI2IjZSNrJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZXJl8mZiZwJn0nUid3KFIpVileKmsqbyp0K1QrWCtbK3gsUCxiLGgsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FTI2xgI21SMVksbCZlX09SU1RVYGprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2sjbSRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLGwsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FTI2deI25UJ24jaSdyVCNoXiNuVCdwI2knciZlYE9SU1RVYGprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2sjbSRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLGwsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FUI2xgI21RI29gUid5I20kcmJPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI2IjZSRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmXyZmJnAmfSdSKFIpVileKmsqbyp0K1QreCxQLGIsaC11LXouUy5dLnwvXy9gL2EvYy9nL2ovbDBUMGowdDJpM1IzZjNoM2kzeDVvNX02VzdqOF04byFrO18jXSNrJlcndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2EjUmRPU1VqfSFTIVchbiF8I2skXSVbJV8lYCVjJWUlZiVnJWklbSZTJmYndyleKmsqbyp0K3gsbS11LlMufC9fL2AvYS9jL2cvai9sMVgyaTNSM2YzaDNpNW81fXgje2EheSRUJFUkWShXKFkoYih3KHgsXy1ZLXcxYTF5Nmk7XjtpO2o7ayNbJnwhdyNkI3YjeSZnJ30oWihoKV0pXylhKk8qUit5LVotXS5SLlQucC5zLnsufTFrMXMyUTJUMlgyajNRM1M0bDR1NH01azVwNno3VzhUOXc5ejl9OlU6WDpbOmE6ZDpqO2w7bjt0O3U7dlEpUyRXUSx4KFNkMVY5cjl5OXw6UDpXOlo6XjpjOmY6bGU4cTlkOXg5ezpPOlY6WTpdOmI6ZTpreCN3YSF5JFQkVSRZKFcoWShiKHcoeCxfLVktdzFhMXk2aTteO2k7ajtrUShkI3hTKG4jeihxUSlUJFhRLWcobyNbOnchdyNkI3YjeSZnJ30oWihoKV0pXylhKk8qUit5LVotXS5SLlQucC5zLnsufTFrMXMyUTJUMlgyajNRM1M0bDR1NH01azVwNno3VzhUOXc5ejl9OlU6WDpbOmE6ZDpqO2w7bjt0O3U7dmQ6eDlkOXg5ezpPOlY6WTpdOmI6ZTprZDp5OXI5eTl8OlA6VzpaOl46YzpmOmxROn07YlE7TztjUTtQO2RRO1E7ZVE7UjtmUjtTO2d4I3thIXkkVCRVJFkoVyhZKGIodyh4LF8tWS13MWExeTZpO147aTtqO2sjWyZ8IXcjZCN2I3kmZyd9KFooaCldKV8pYSpPKlIreS1aLV0uUi5ULnAucy57Ln0xazFzMlEyVDJYMmozUTNTNGw0dTR9NWs1cDZ6N1c4VDl3OXo5fTpVOlg6WzphOmQ6ajtsO247dDt1O3ZkMVY5cjl5OXw6UDpXOlo6XjpjOmY6bGU4cTlkOXg5ezpPOlY6WTpdOmI6ZTprbGZPU2p9IW4kXSVjJWYlZyVpKm8qdC9nL2pRKGcjeVEqfSVwUStPJXJSMWotWiVPI3xhIXcheSNkI3YjeSRUJFUkWSZnJ30oVyhZKFooYihoKHcoeCldKV8pYSpPKlIreSxfLVktWi1dLXcuUi5ULnAucy57Ln0xYTFrMXMxeTJRMlQyWDJqM1EzUzRsNHU0fTVrNXA2aTZ6N1c4VDlkOXI5dzl4OXk5ejl7OXw5fTpPOlA6VTpWOlc6WDpZOlo6WzpdOl46YTpiOmM6ZDplOmY6ajprOmw7XjtpO2o7aztsO247dDt1O3ZRKlEkfVEucipTUTJtLnFSNV0yblQocCN6KHFTKHAjeihxVDJ1LnkydlEpYiRlUS1mKG5RLlgpY1EvUSpdUTNWL1JRNXIzV1E2fTVhUTdbNXNRN3w3T1E4VjddUThkN31ROHM4ZVE5UTh0UjlYOVJwKFcjdCdPKVUtWC1vLXAwcTFoMX00ZjR3N3E6djtXO1g7WSFuOlUmeidpKF4oZit2LFssdC1QLV4tfC5QLm8ucTBlMHAxaTFtMlcybDJuM080WTRaNG00cTR5NU81WjVuNm02cTdZOGA7WjtdO3A7cTtyWzpWOHA5TzlWOVk5WjldXTpXMVU0YTZjN283cDh6cihZI3QnTylVLH0tWC1vLXAwcTFoMX00ZjR3N3E6djtXO1g7WSFwOlgmeidpKF4oZit2LFssdC1QLV4tfC5QLm8ucTBlMG4wcDFpMW0yVzJsMm4zTzRZNFo0bTRxNHk1TzVaNW42bTZxN1k4YDtaO107cDtxO3JeOlk4cDlPOVQ5VjlZOVo5XV86WjFVNGE2YzZkN283cDh6cGVPU2p5fSFuJF0lWSVjJWYlZyVpKm8qdC9nL2pRJVZ4UiprJWBwZU9Tanl9IW4kXSVZJWMlZiVnJWkqbyp0L2cvalIlVnhRKlUlT1Iubil9cWVPU2p5fSFuJF0lWSVjJWYlZyVpKm8qdC9nL2pRLnoqWlMzUC9PL1BXNWoyfDJ9M08zVFU3VjVsNW01blU4UjdVN1g3WVE4aDhTUjh2OGlRJV55UiplJVlSM14vWFI3XzV1UyRtcCRyUi5kKW5RJWN6UipvJWRSKnUlalQvaCp0L2pSKnkla1EqeCVrUi9xKnlRak9RIW5TVCRgaiFuUShQI3NSLHUoUFEhWVFSJXUhWVEhXlJVJXshXiV8K1VRJXwhX1IrVSV9USthJlhSL30rYVEsYCdPUjByLGBRLGMnUVMwdSxjMHZSMHYsZFErbSZkUjBYK21TIWVSJHVVJmEhZSZiK1ZRJmIhZlIrViZPUStkJltSMFArZFEmdSFzUSxSJnNVLFYmdSxSMG1SMG0sV1EnciNpUixuJ3JRI21gUid4I21RI2NaVSdoI2MrUTlxUStROV9SOXEndVEtUyhfVzFkLVMxZTRqNmxVMWUtVC1VLVZTNGoxZjFnUjZsNGskayhVI3QmeidPJ2koXihmKVApUSlVK3YsWSxaLFssdCx9LU8tUC1YLV4tby1wLXwuUC5vLnEwZTBuMG8wcDBxMVUxaDFpMW0xfTJXMmwybjNPNFk0WjRfNGA0YTRmNG00cTR3NHk1TzVaNW42YzZkNmU2bTZxN1k3bzdwN3E4YDhwOHo4fDh9OU85VDlVOVY5WTlaOV06djtXO1g7WTtaO107cDtxO3JRLVsoZlUxbC1bMW40blExbi1eUjRuMW1RKHEjelItaShxUSh6JE9SLXIoelEyUi18UjR6MlJRKXskeFIubSl7UTJwLnRTNV8ycDZ8UjZ8NWBRKlclUFIudypXUTJ2LnlSNWQydlEvVypiUzNbL1c1dlI1djNeUS5fKWpXMmEuXzJjNVQ2d1EyYy5iUTVUMmJSNnc1VVEpbyRtUi5lKW9RL2oqdFIzbC9qV2lPU2ohblElaH1RKVgkXVEqbiVjUSpwJWZRKnElZ1EqcyVpUS9lKm9TL2gqdC9qUjNrL2dRJF9nUSVsIVJRJW8hVFElcSFVUSVzIVZRKXYkc1EpfCR5USpkJV5RKnslblEtaChwUy9aKmUqaFEvcip6US9zKn1RL3QrT1MwUytqMnNRMmYuaFEyay5vUTNVL1FRM2AvXVEzai9mWTN3MFUwVjBdMGI1ZlE1WDJoUTVbMmxRNXEzVlE1dzNfWzZVM3YzeTN9NFA0UTdTUTZ4NVZRN1o1clE3YDV4VzdmNlY2WzZeNmBRN3g2eVE3ezZ9UThVN1tVOFg3ZzdsN25ROGM3fFE4ajhWUzhrOFo4X1E4cjhkUTh3OG1ROVA4c1E5Uzh5UTlXOVFSOVs5WFEkZ21RJmkhalUpZSRoJGkkalErWiZVVSt7JmomayZsUS1gKGtTLlopZilnUS96K11RMFIralMwZyt8K31RMXEtZFEyWi5bUTN0MFFTM3owVzBdUTRWMGhRNHIxdVM2WTN7NFFRN2k2WlE4WzdrUjhuOF5TI3VhO15SKHskUFUkT2EkUDteUi1xKHlRI3RhUyZ6IXcpYVEnTyF5USdpI2RRKF4jdlEoZiN5USlQJFRRKVEkVVEpVSRZUSt2JmdRLFk5d1EsWjl6USxbOX1RLHQnfVEsfShXUS1PKFlRLVAoWlEtWChiUS1eKGhRLW8od1EtcCh4ZC18KV0uUi57MlQzUTR9NWs2ejdXOFRRLlApX1EubypPUS5xKlJRMGUreVEwbjpVUTBvOlhRMHA6W1EwcSxfUTFVOXJRMWgtWVExaS1aUTFtLV1RMX0td1EyVy5UUTJsLnBRMm4uc1EzTy59UTRZOmFRNFo6ZFE0Xzl5UTRgOXxRNGE6UFE0ZjFhUTRtMWtRNHExc1E0dzF5UTR5MlFRNU8yWFE1WjJqUTVuM1NRNmM6XlE2ZDpXUTZlOlpRNm00bFE2cTR1UTdZNXBRN286Y1E3cDpmUTdxNmlROGA6alE4cDlkUTh6OmxROHw5eFE4fTl7UTlPOk9ROVQ6VlE5VTpZUTlWOl1ROVk6YlE5WjplUTldOmtROnY7XlE7VztpUTtYO2pRO1k7a1E7WjtsUTtdO25RO3A7dFE7cTt1UjtyO3ZsZ09Tan0hbiRdJWMlZiVnJWkqbyp0L2cvalMhcFUlZVElbiFTUSV0IVdRJ1YhfFEndiNrUypoJVslX1EqbCVgUSp6JW1RK1cmU1ErdSZmUSxyJ3dRLk8pXlEvYiprUTBkK3hRMVssbVExey11UTJWLlNRMn0ufFEzYi9fUTNjL2BRM2UvYVEzZy9jUTNuL2xRNGQxWFE1WTJpUTVtM1JRNXwzZlE2TzNoUTZQM2lRN1g1b1I3YjV9IXZaT1NVan0hUyFuIXwkXSVbJV8lYCVjJWUlZiVnJWklbSZTJmYpXiprKm8qdCt4LXUuUy58L18vYC9hL2MvZy9qL2wyaTNSM2YzaDNpNW81fVEhX1JRIW9UUSRha1MldyFdJXpRJX0hYFEmeSF2USdRIXpRJ1cjUFEnWCNRUSdZI1JRJ1ojU1EnWyNUUSddI1VRJ14jVlEnXyNXUSdgI1hRJ2EjWVEnYiNaUSdkI11RJ2cjYlEnayNlVyd1I2sndyxtMVhRKXAkblMrUiV4K1RTK14mVy97UStnJl9RLE8mcFEsXiZ9USxkJ1JRLGc5XlEsaTlgUSx3KFJRLXgpVlEvditYUS95K1tRMGksUFEwcyxiUTB3OWNRMHg5ZVEweTlmUTB6OWdRMHs5aFEwfDlpUTB9OWpRMU85a1ExUDlsUTFROW1RMVI5blExUzlvUTFULGhRMVc5c1ExXTlwUTJPLXpRMlsuXVEzczpRUTN2MFRRNFcwalE0WzB0UTRdOlJRNGI6VFE0YzpfUTVgMnFRNlMzcVE2VjN4UTZiOmBRNmY6Z1E2ZzpoUTdnNldRN3o2e1E4WjdqUThtOF1ROHk4b1E5XyFXUjp8O2FSIWFSUiZZIWJTJlUhYitgUytdJlYmXlIwUStmUidQIXlSJ1MhelQhdFUkWlMhc1UkWlUkeHJzKm1TJnMhciF1USxUJnRRLFcmd1EubCl6UzBrLFMsVVI0WDBsYCFkUiFdIWAkdSV4JmApeCtoaCFxVXJzIXIhdSRaJnQmdyl6LFMsVTBsUS9kKm1RL3crWVEzcC9vVDpzJlcpeVQhZ1IkdVMhZlIkdVMleSFdJmBTJk8hYCl4UytTJXgraFQrXyZXKXlUJl0hYiR2USNpXlIneyNuVCdxI2knclIxWixsVChhI3YoY1IoaSN5US19KV1RMlUuUlEyfC57UTR7MlRRNWwzUVE2dDR9UTdVNWtRN3k2elE4UzdXUjhpOFRsaE9Tan0hbiRdJWMlZiVnJWkqbyp0L2cvalElXXlSKmQlWVYkeXJzKm1SLnUqVFIqYyVXUSRxcFIpdSRyUilrJGxUJWF6JWRUJWJ6JWRUL2kqdC9qIiwgbm9kZU5hbWVzOiAiXHUyNkEwIGV4dGVuZHMgQXJpdGhPcCBBcml0aE9wIEludGVycG9sYXRpb25TdGFydCBMaW5lQ29tbWVudCBCbG9ja0NvbW1lbnQgU2NyaXB0IEV4cG9ydERlY2xhcmF0aW9uIGV4cG9ydCBTdGFyIGFzIFZhcmlhYmxlTmFtZSBTdHJpbmcgZnJvbSA7IGRlZmF1bHQgRnVuY3Rpb25EZWNsYXJhdGlvbiBhc3luYyBmdW5jdGlvbiBWYXJpYWJsZURlZmluaXRpb24gVHlwZVBhcmFtTGlzdCBUeXBlRGVmaW5pdGlvbiBUaGlzVHlwZSB0aGlzIExpdGVyYWxUeXBlIEFyaXRoT3AgTnVtYmVyIEJvb2xlYW5MaXRlcmFsIFRlbXBsYXRlVHlwZSBJbnRlcnBvbGF0aW9uRW5kIEludGVycG9sYXRpb24gVm9pZFR5cGUgdm9pZCBUeXBlb2ZUeXBlIHR5cGVvZiBNZW1iZXJFeHByZXNzaW9uIC4gPy4gUHJvcGVydHlOYW1lIFsgVGVtcGxhdGVTdHJpbmcgSW50ZXJwb2xhdGlvbiBudWxsIHN1cGVyIFJlZ0V4cCBdIEFycmF5RXhwcmVzc2lvbiBTcHJlYWQgLCB9IHsgT2JqZWN0RXhwcmVzc2lvbiBQcm9wZXJ0eSBhc3luYyBnZXQgc2V0IFByb3BlcnR5RGVmaW5pdGlvbiBCbG9jayA6IE5ld0V4cHJlc3Npb24gbmV3IFR5cGVBcmdMaXN0IENvbXBhcmVPcCA8ICkgKCBBcmdMaXN0IFVuYXJ5RXhwcmVzc2lvbiBhd2FpdCB5aWVsZCBkZWxldGUgTG9naWNPcCBCaXRPcCBQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiBDbGFzc0V4cHJlc3Npb24gY2xhc3MgZXh0ZW5kcyBDbGFzc0JvZHkgTWV0aG9kRGVjbGFyYXRpb24gUHJpdmFjeSBzdGF0aWMgYWJzdHJhY3Qgb3ZlcnJpZGUgUHJpdmF0ZVByb3BlcnR5RGVmaW5pdGlvbiBQcm9wZXJ0eURlY2xhcmF0aW9uIHJlYWRvbmx5IE9wdGlvbmFsIFR5cGVBbm5vdGF0aW9uIEVxdWFscyBTdGF0aWNCbG9jayBGdW5jdGlvbkV4cHJlc3Npb24gQXJyb3dGdW5jdGlvbiBQYXJhbUxpc3QgUGFyYW1MaXN0IEFycmF5UGF0dGVybiBPYmplY3RQYXR0ZXJuIFBhdHRlcm5Qcm9wZXJ0eSBQcml2YWN5IHJlYWRvbmx5IEFycm93IE1lbWJlckV4cHJlc3Npb24gUHJpdmF0ZVByb3BlcnR5TmFtZSBCaW5hcnlFeHByZXNzaW9uIEFyaXRoT3AgQXJpdGhPcCBBcml0aE9wIEFyaXRoT3AgQml0T3AgQ29tcGFyZU9wIGluc3RhbmNlb2YgaW4gY29uc3QgQ29tcGFyZU9wIEJpdE9wIEJpdE9wIEJpdE9wIExvZ2ljT3AgTG9naWNPcCBDb25kaXRpb25hbEV4cHJlc3Npb24gTG9naWNPcCBMb2dpY09wIEFzc2lnbm1lbnRFeHByZXNzaW9uIFVwZGF0ZU9wIFBvc3RmaXhFeHByZXNzaW9uIENhbGxFeHByZXNzaW9uIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiBEeW5hbWljSW1wb3J0IGltcG9ydCBJbXBvcnRNZXRhIEpTWEVsZW1lbnQgSlNYU2VsZkNsb3NlRW5kVGFnIEpTWFN0YXJ0VGFnIEpTWFNlbGZDbG9zaW5nVGFnIEpTWElkZW50aWZpZXIgSlNYTmFtZXNwYWNlZE5hbWUgSlNYTWVtYmVyRXhwcmVzc2lvbiBKU1hTcHJlYWRBdHRyaWJ1dGUgSlNYQXR0cmlidXRlIEpTWEF0dHJpYnV0ZVZhbHVlIEpTWEVzY2FwZSBKU1hFbmRUYWcgSlNYT3BlblRhZyBKU1hGcmFnbWVudFRhZyBKU1hUZXh0IEpTWEVzY2FwZSBKU1hTdGFydENsb3NlVGFnIEpTWENsb3NlVGFnIFByZWZpeENhc3QgQXJyb3dGdW5jdGlvbiBUeXBlUGFyYW1MaXN0IFNlcXVlbmNlRXhwcmVzc2lvbiBLZXlvZlR5cGUga2V5b2YgVW5pcXVlVHlwZSB1bmlxdWUgSW1wb3J0VHlwZSBJbmZlcnJlZFR5cGUgaW5mZXIgVHlwZU5hbWUgUGFyZW50aGVzaXplZFR5cGUgRnVuY3Rpb25TaWduYXR1cmUgUGFyYW1MaXN0IE5ld1NpZ25hdHVyZSBJbmRleGVkVHlwZSBUdXBsZVR5cGUgTGFiZWwgQXJyYXlUeXBlIFJlYWRvbmx5VHlwZSBPYmplY3RUeXBlIE1ldGhvZFR5cGUgUHJvcGVydHlUeXBlIEluZGV4U2lnbmF0dXJlIENhbGxTaWduYXR1cmUgVHlwZVByZWRpY2F0ZSBpcyBOZXdTaWduYXR1cmUgbmV3IFVuaW9uVHlwZSBMb2dpY09wIEludGVyc2VjdGlvblR5cGUgTG9naWNPcCBDb25kaXRpb25hbFR5cGUgUGFyYW1ldGVyaXplZFR5cGUgQ2xhc3NEZWNsYXJhdGlvbiBhYnN0cmFjdCBpbXBsZW1lbnRzIHR5cGUgVmFyaWFibGVEZWNsYXJhdGlvbiBsZXQgdmFyIFR5cGVBbGlhc0RlY2xhcmF0aW9uIEludGVyZmFjZURlY2xhcmF0aW9uIGludGVyZmFjZSBFbnVtRGVjbGFyYXRpb24gZW51bSBFbnVtQm9keSBOYW1lc3BhY2VEZWNsYXJhdGlvbiBuYW1lc3BhY2UgbW9kdWxlIEFtYmllbnREZWNsYXJhdGlvbiBkZWNsYXJlIEdsb2JhbERlY2xhcmF0aW9uIGdsb2JhbCBDbGFzc0RlY2xhcmF0aW9uIENsYXNzQm9keSBNZXRob2REZWNsYXJhdGlvbiBBbWJpZW50RnVuY3Rpb25EZWNsYXJhdGlvbiBFeHBvcnRHcm91cCBWYXJpYWJsZU5hbWUgVmFyaWFibGVOYW1lIEltcG9ydERlY2xhcmF0aW9uIEltcG9ydEdyb3VwIEZvclN0YXRlbWVudCBmb3IgRm9yU3BlYyBGb3JJblNwZWMgRm9yT2ZTcGVjIG9mIFdoaWxlU3RhdGVtZW50IHdoaWxlIFdpdGhTdGF0ZW1lbnQgd2l0aCBEb1N0YXRlbWVudCBkbyBJZlN0YXRlbWVudCBpZiBlbHNlIFN3aXRjaFN0YXRlbWVudCBzd2l0Y2ggU3dpdGNoQm9keSBDYXNlTGFiZWwgY2FzZSBEZWZhdWx0TGFiZWwgVHJ5U3RhdGVtZW50IHRyeSBDYXRjaENsYXVzZSBjYXRjaCBGaW5hbGx5Q2xhdXNlIGZpbmFsbHkgUmV0dXJuU3RhdGVtZW50IHJldHVybiBUaHJvd1N0YXRlbWVudCB0aHJvdyBCcmVha1N0YXRlbWVudCBicmVhayBDb250aW51ZVN0YXRlbWVudCBjb250aW51ZSBEZWJ1Z2dlclN0YXRlbWVudCBkZWJ1Z2dlciBMYWJlbGVkU3RhdGVtZW50IEV4cHJlc3Npb25TdGF0ZW1lbnQiLCBtYXhUZXJtOiAzMzIsIGNvbnRleHQ6IGg2LCBub2RlUHJvcHM6IFtbImNsb3NlZEJ5IiwgNCwgIkludGVycG9sYXRpb25FbmQiLCA0MCwgIl0iLCA1MSwgIn0iLCA2NiwgIikiLCAxMzIsICJKU1hTZWxmQ2xvc2VFbmRUYWcgSlNYRW5kVGFnIiwgMTQ2LCAiSlNYRW5kVGFnIl0sIFsiZ3JvdXAiLCAtMjYsIDgsIDE1LCAxNywgNTgsIDE4NCwgMTg4LCAxOTEsIDE5MiwgMTk0LCAxOTcsIDIwMCwgMjExLCAyMTMsIDIxOSwgMjIxLCAyMjMsIDIyNSwgMjI4LCAyMzQsIDI0MCwgMjQyLCAyNDQsIDI0NiwgMjQ4LCAyNTAsIDI1MSwgIlN0YXRlbWVudCIsIC0zMCwgMTIsIDEzLCAyNCwgMjcsIDI4LCA0MSwgNDMsIDQ0LCA0NSwgNDcsIDUyLCA2MCwgNjgsIDc0LCA3NSwgOTEsIDkyLCAxMDEsIDEwMywgMTE5LCAxMjIsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI5LCAxMzAsIDE0OCwgMTQ5LCAxNTEsICJFeHByZXNzaW9uIiwgLTIyLCAyMywgMjUsIDI5LCAzMiwgMzQsIDE1MiwgMTU0LCAxNTYsIDE1NywgMTU5LCAxNjAsIDE2MSwgMTYzLCAxNjQsIDE2NSwgMTY3LCAxNjgsIDE2OSwgMTc4LCAxODAsIDE4MiwgMTgzLCAiVHlwZSIsIC0zLCA3OSwgODUsIDkwLCAiQ2xhc3NJdGVtIl0sIFsib3BlbmVkQnkiLCAzMCwgIkludGVycG9sYXRpb25TdGFydCIsIDQ2LCAiWyIsIDUwLCAieyIsIDY1LCAiKCIsIDEzMSwgIkpTWFN0YXJ0VGFnIiwgMTQxLCAiSlNYU3RhcnRUYWcgSlNYU3RhcnRDbG9zZVRhZyJdXSwgcHJvcFNvdXJjZXM6IFt2MTNdLCBza2lwcGVkTm9kZXM6IFswLCA1LCA2XSwgcmVwZWF0Tm9kZUNvdW50OiAyOCwgdG9rZW5EYXRhOiAiIUN9flIhYE9YJVRYWSVjWVonUlpbJWNbXSVUXV4nUl5wJVRwcSVjcXInY3JzKGtzdDBodHUyYHV2NHB2dzVld3g2Y3h5PHl5ej1aens9a3t8Pmt8fT9PfSFPPmshTyFQP2AhUCFRQ2whUSFSITBbIVIhWyExcSFbIV0hN3MhXSFeIThWIV4hXyE4ZyFfIWAhOWQhYCFhITpbIWEhYiE8UiFiIWMlVCFjIX0yYCF9I08hPWQjTyNQJVQjUCNRIT10I1EjUiE+VSNSI1MyYCNTI1QhPmkjVCNvMmAjbyNwIT55I3AjcSE/TyNxI3IhP2YjciNzIT94I3MkZiVUJGYkZyVjJGcjQlkyYCNCWSNCWiFAWSNCWiRJUzJgJElTJElfIUBZJElfJEl8MmAkSXwkSX0hQnEkSX0kSk8hQnEkSk8kSlQyYCRKVCRKVSFAWSRKVSRLVjJgJEtWJEtXIUBZJEtXJkZVMmAmRlUmRlYhQFkmRlY/SFQyYD9IVD9IVSFAWT9IVX4yYFclWVIkVVdPIV4lVCFfI28lVCNwfiVUN1olamckVVcnWTdST1glVFhZJWNZWiVUWlslY1twJVRwcSVjcSFeJVQhXyNvJVQjcCRmJVQkZiRnJWMkZyNCWSVUI0JZI0JaJWMjQlokSVMlVCRJUyRJXyVjJElfJEpUJVQkSlQkSlUlYyRKVSRLViVUJEtWJEtXJWMkS1cmRlUlVCZGVSZGViVjJkZWP0hUJVQ/SFQ/SFUlYz9IVX4lVDdaJ1lSJFVXJ1o3Uk8hXiVUIV8jbyVUI3B+JVQkVCdqUyRVVyFqI3tPIV4lVCFfIWAndiFgI28lVCNwfiVUJE8nfVMjZSN2JFVXTyFeJVQhXyFgKFohYCNvJVQjcH4lVCRPKGJSI2UjdiRVV08hXiVUIV8jbyVUI3B+JVQpWChyWiRVV10jZU9ZKGtZWillWnIoa3JzKnJzIV4oayFeIV8rVSFfI08oayNPI1AtYiNQI28oayNvI3ArVSNwfihrJnIpalYkVVdPcillcnMqUHMhXillIV4hXyphIV8jbyllI28jcCphI3B+KWUmcipXUiRQJmokVVdPIV4lVCFfI28lVCNwfiVUJmoqZFJPciphcnMqbXN+KmEmaipyTyRQJmopWCp7UiRQJmokVVddI2VPIV4lVCFfI28lVCNwfiVUKVArWlZdI2VPWStVWVoqYVpyK1VycytwcyNPK1UjTyNQK3cjUH4rVSlQK3dPJFAmal0jZSlQK3pST3IrVXJzLFRzfitVKVAsW1UkUCZqXSNlT1ksblpyLG5ycy1WcyNPLG4jTyNQLVsjUH4sbiNlLHNVXSNlT1ksblpyLG5ycy1WcyNPLG4jTyNQLVsjUH4sbiNlLVtPXSNlI2UtX1BPfixuKVgtZ1YkVVdPcihrcnMtfHMhXihrIV4hXytVIV8jbyhrI28jcCtVI3B+KGspWC5WWiRQJmokVVddI2VPWS54WVolVFpyLnhycy9ycyFeLnghXiFfLG4hXyNPLngjTyNQMFMjUCNvLngjbyNwLG4jcH4ueCNtL1BaJFVXXSNlT1kueFlaJVRaci54cnMvcnMhXi54IV4hXyxuIV8jTy54I08jUDBTI1Ajby54I28jcCxuI3B+LngjbS95UiRVV10jZU8hXiVUIV8jbyVUI3B+JVQjbTBYVCRVV08hXi54IV4hXyxuIV8jby54I28jcCxuI3B+LngzXTBtWiRVV090JVR0dTFgdSFeJVQhXyFjJVQhYyF9MWAhfSNSJVQjUiNTMWAjUyNUJVQjVCNvMWAjcCRnJVQkZ34xYDNdMWddJFVXJ28zVE90JVR0dTFgdSFRJVQhUSFbMWAhWyFeJVQhXyFjJVQhYyF9MWAhfSNSJVQjUiNTMWAjUyNUJVQjVCNvMWAjcCRnJVQkZ34xYDdaMmtfJFVXI3pTJ10keSdnM1NPdCVUdHUyYHV9JVR9IU8zaiFPIVElVCFRIVsyYCFbIV4lVCFfIWMlVCFjIX0yYCF9I1IlVCNSI1MyYCNTI1QlVCNUI28yYCNwJGclVCRnfjJgWzNxXyRVVyN6U090JVR0dTNqdX0lVH0hTzNqIU8hUSVUIVEhWzNqIVshXiVUIV8hYyVUIWMhfTNqIX0jUiVUI1IjUzNqI1MjVCVUI1QjbzNqI3AkZyVUJGd+M2okTzR3UyNeI3YkVVdPIV4lVCFfIWA1VCFgI28lVCNwfiVUJE81W1IkVVcjbyN2TyFeJVQhXyNvJVQjcH4lVDViNWxVJ3g1WSRVV092JVR2dzZPdyFeJVQhXyFgNVQhYCNvJVQjcH4lVCRPNlZTJFVXI2kjdk8hXiVUIV8hYDVUIWAjbyVUI3B+JVQpWDZqWiRVV10jZU9ZNmNZWjddWnc2Y3d4KnJ4IV42YyFeIV84VCFfI082YyNPI1A6VCNQI282YyNvI3A4VCNwfjZjJnI3YlYkVVdPdzddd3gqUHghXjddIV4hXzd3IV8jbzddI28jcDd3I3B+N10majd6Uk93N3d3eCpteH43dylQOFlWXSNlT1k4VFlaN3dadzhUd3grcHgjTzhUI08jUDhvI1B+OFQpUDhyUk93OFR3eDh7eH44VClQOVNVJFAmal0jZU9ZOWZadzlmd3gtVngjTzlmI08jUDl9I1B+OWYjZTlrVV0jZU9ZOWZadzlmd3gtVngjTzlmI08jUDl9I1B+OWYjZTpRUE9+OWYpWDpZViRVV093NmN3eDpveCFeNmMhXiFfOFQhXyNvNmMjbyNwOFQjcH42YylYOnhaJFAmaiRVV10jZU9ZO2tZWiVUWnc7a3d4L3J4IV47ayFeIV85ZiFfI087ayNPI1A8ZSNQI287ayNvI3A5ZiNwfjtrI207clokVVddI2VPWTtrWVolVFp3O2t3eC9yeCFeO2shXiFfOWYhXyNPO2sjTyNQPGUjUCNvO2sjbyNwOWYjcH47ayNtPGpUJFVXTyFeO2shXiFfOWYhXyNvO2sjbyNwOWYjcH47ayZpPVFSIWQmYSRVV08hXiVUIV8jbyVUI3B+JVRrPWJSIWNjJFVXTyFeJVQhXyNvJVQjcH4lVDdWPXRVJ140ViNfI3YkVVdPeiVUens+V3shXiVUIV8hYDVUIWAjbyVUI3B+JVQkTz5fUyNbI3YkVVdPIV4lVCFfIWA1VCFgI28lVCNwfiVUJXc+clNqJW8kVVdPIV4lVCFfIWA1VCFgI28lVCNwfiVUJmk/VlIhUiZhJFVXTyFeJVQhXyNvJVQjcH4lVDdaP2dWdTVeJFVXTyFPJVQhTyFQP3whUCFRJVQhUSFbQHIhWyFeJVQhXyNvJVQjcH4lVCF7QFJUJFVXTyFPJVQhTyFQQGIhUCFeJVQhXyNvJVQjcH4lVCF7QGlSIVEhcyRVV08hXiVUIV8jbyVUI3B+JVQhe0B5WiRVV2shc08hUSVUIVEhW0ByIVshXiVUIV8hZyVUIWchaEFsIWgjUiVUI1IjU0ByI1MjWCVUI1gjWUFsI1kjbyVUI3B+JVQhe0FxWiRVV097JVR7fEJkfH0lVH0hT0JkIU8hUSVUIVEhW0NPIVshXiVUIV8jUiVUI1IjU0NPI1MjbyVUI3B+JVQhe0JpViRVV08hUSVUIVEhW0NPIVshXiVUIV8jUiVUI1IjU0NPI1MjbyVUI3B+JVQhe0NWViRVV2shc08hUSVUIVEhW0NPIVshXiVUIV8jUiVUI1IjU0NPI1MjbyVUI3B+JVQ3WkNzYCRVVyNdI3ZPWUR1WVolVFp6RHV6e0pseyFQRHUhUCFRIS1lIVEhXkR1IV4hX0Z4IV8hYCEuXiFgIWEhL10hYSF9RHUhfSNPSHEjTyNQSlEjUCNvRHUjbyNwRngjcH5EdVhEfFskVVd9UE9ZRHVZWiVUWiFQRHUhUCFRRXIhUSFeRHUhXiFfRnghXyF9RHUhfSNPSHEjTyNQSlEjUCNvRHUjbyNwRngjcH5EdVhFeV8kVVd9UE8hXiVUIV8jWiVUI1ojW0VyI1sjXSVUI10jXkVyI14jYSVUI2EjYkVyI2IjZyVUI2cjaEVyI2gjaSVUI2kjakVyI2ojbSVUI20jbkVyI24jbyVUI3B+JVRQRn1WfVBPWUZ4WiFQRnghUCFRR2QhUSF9RnghfSNPR3sjTyNQSGgjUH5GeFBHaVV9UCNaI1tHZCNdI15HZCNhI2JHZCNnI2hHZCNpI2pHZCNtI25HZFBIT1RPWUd7WiNPR3sjTyNQSF8jUCNRRngjUX5He1BIYlFPWUd7Wn5He1BIa1FPWUZ4Wn5GeFhIdlkkVVdPWUhxWVolVFohXkhxIV4hX0d7IV8jT0hxI08jUElmI1AjUUR1I1Ejb0hxI28jcEd7I3B+SHFYSWtWJFVXT1lIcVlaJVRaIV5IcSFeIV9HeyFfI29IcSNvI3BHeyNwfkhxWEpWViRVV09ZRHVZWiVUWiFeRHUhXiFfRnghXyNvRHUjbyNwRngjcH5EdTdaSnNeJFVXfVBPWUpsWVpLb1p6Smx6e05ReyFQSmwhUCFRISxSIVEhXkpsIV4hXyEhXSFfIX1KbCF9I08hJ3wjTyNQISthI1Ajb0psI28jcCEhXSNwfkpsN1pLdFYkVVdPektventMWnshXktvIV4hX01dIV8jb0tvI28jcE1dI3B+S283WkxgWCRVV096S296e0xaeyFQS28hUCFRTHshUSFeS28hXiFfTV0hXyNvS28jbyNwTV0jcH5LbzdaTVNSJFVXVTdSTyFeJVQhXyNvJVQjcH4lVDdSTWBST3pNXXp7TWl7fk1dN1JNbFRPek1dentNaXshUE1dIVAhUU17IVF+TV03Uk5RT1U3UjdaTlheJFVXfVBPWUpsWVpLb1p6Smx6e05ReyFQSmwhUCFRISBUIVEhXkpsIV4hXyEhXSFfIX1KbCF9I08hJ3wjTyNQISthI1Ajb0psI28jcCEhXSNwfkpsN1ohIF5fJFVXVTdSfVBPIV4lVCFfI1olVCNaI1tFciNbI10lVCNdI15FciNeI2ElVCNhI2JFciNiI2clVCNnI2hFciNoI2klVCNpI2pFciNqI20lVCNtI25FciNuI28lVCNwfiVUN1IhIWJZfVBPWSEhXVlaTV1aeiEhXXp7ISNReyFQISFdIVAhUSEmeCFRIX0hIV0hfSNPISRgI08jUCEmZiNQfiEhXTdSISNWWX1QT1khIV1ZWk1dWnohIV16eyEjUXshUCEhXSFQIVEhI3UhUSF9ISFdIX0jTyEkYCNPI1AhJmYjUH4hIV03UiEjfFVVN1J9UCNaI1tHZCNdI15HZCNhI2JHZCNnI2hHZCNpI2pHZCNtI25HZDdSISRjV09ZISRgWVpNXVp6ISRgenshJHt7I08hJGAjTyNQISZTI1AjUSEhXSNRfiEkYDdSISVPWU9ZISRgWVpNXVp6ISRgenshJHt7IVAhJGAhUCFRISVuIVEjTyEkYCNPI1AhJlMjUCNRISFdI1F+ISRgN1IhJXNUVTdST1lHe1ojT0d7I08jUEhfI1AjUUZ4I1F+R3s3UiEmVlRPWSEkYFlaTV1aeiEkYHp7ISR7e34hJGA3UiEmaVRPWSEhXVlaTV1aeiEhXXp7ISNRe34hIV03UiEmfV99UE96TV16e01peyNaTV0jWiNbISZ4I1sjXU1dI10jXiEmeCNeI2FNXSNhI2IhJngjYiNnTV0jZyNoISZ4I2gjaU1dI2kjaiEmeCNqI21NXSNtI24hJngjbn5NXTdaIShSWyRVV09ZISd8WVpLb1p6ISd8enshKHd7IV4hJ3whXiFfISRgIV8jTyEnfCNPI1AhKm8jUCNRSmwjUSNvISd8I28jcCEkYCNwfiEnfDdaISh8XiRVV09ZISd8WVpLb1p6ISd8enshKHd7IVAhJ3whUCFRISl4IVEhXiEnfCFeIV8hJGAhXyNPISd8I08jUCEqbyNQI1FKbCNRI28hJ3wjbyNwISRgI3B+ISd8N1ohKlBZJFVXVTdST1lIcVlaJVRaIV5IcSFeIV9HeyFfI09IcSNPI1BJZiNQI1FEdSNRI29IcSNvI3BHeyNwfkhxN1ohKnRYJFVXT1khJ3xZWktvWnohJ3x6eyEod3shXiEnfCFeIV8hJGAhXyNvISd8I28jcCEkYCNwfiEnfDdaIStmWCRVV09ZSmxZWktvWnpKbHp7TlF7IV5KbCFeIV8hIV0hXyNvSmwjbyNwISFdI3B+Smw3WiEsWWMkVVd9UE96S296e0xaeyFeS28hXiFfTV0hXyNaS28jWiNbISxSI1sjXUtvI10jXiEsUiNeI2FLbyNhI2IhLFIjYiNnS28jZyNoISxSI2gjaUtvI2kjaiEsUiNqI21LbyNtI24hLFIjbiNvS28jbyNwTV0jcH5LbzdaIS1sViRVV1Q3Uk9ZIS1lWVolVFohXiEtZSFeIV8hLlIhXyNvIS1lI28jcCEuUiNwfiEtZTdSIS5XUVQ3Uk9ZIS5SWn4hLlIkUCEuZ1skVVcjbyN2fVBPWUR1WVolVFohUER1IVAhUUVyIVEhXkR1IV4hX0Z4IV8hfUR1IX0jT0hxI08jUEpRI1Ajb0R1I28jcEZ4I3B+RHVdIS9mWyN3UyRVV31QT1lEdVlaJVRaIVBEdSFQIVFFciFRIV5EdSFeIV9GeCFfIX1EdSF9I09IcSNPI1BKUSNQI29EdSNvI3BGeCNwfkR1IXshMGNkJFVXayFzTyFPJVQhTyFQQHIhUCFRJVQhUSFbITFxIVshXiVUIV8hZyVUIWchaEFsIWgjUiVUI1IjUyExcSNTI1UlVCNVI1YhM1gjViNYJVQjWCNZQWwjWSNiJVQjYiNjITJ3I2MjZCE0bSNkI2wlVCNsI20hNXsjbSNvJVQjcH4lVCF7ITF4XyRVV2shc08hTyVUIU8hUEByIVAhUSVUIVEhWyExcSFbIV4lVCFfIWclVCFnIWhBbCFoI1IlVCNSI1MhMXEjUyNYJVQjWCNZQWwjWSNiJVQjYiNjITJ3I2MjbyVUI3B+JVQheyEzT1IkVVdrIXNPIV4lVCFfI28lVCNwfiVUIXshM15XJFVXTyFRJVQhUSFSITN2IVIhUyEzdiFTIV4lVCFfI1IlVCNSI1MhM3YjUyNvJVQjcH4lVCF7ITN9WSRVV2shc08hUSVUIVEhUiEzdiFSIVMhM3YhUyFeJVQhXyNSJVQjUiNTITN2I1MjYiVUI2IjYyEydyNjI28lVCNwfiVUIXshNHJWJFVXTyFRJVQhUSFZITVYIVkhXiVUIV8jUiVUI1IjUyE1WCNTI28lVCNwfiVUIXshNWBYJFVXayFzTyFRJVQhUSFZITVYIVkhXiVUIV8jUiVUI1IjUyE1WCNTI2IlVCNiI2MhMncjYyNvJVQjcH4lVCF7ITZRWiRVV08hUSVUIVEhWyE2cyFbIV4lVCFfIWMlVCFjIWkhNnMhaSNSJVQjUiNTITZzI1MjVCVUI1QjWiE2cyNaI28lVCNwfiVUIXshNnpdJFVXayFzTyFRJVQhUSFbITZzIVshXiVUIV8hYyVUIWMhaSE2cyFpI1IlVCNSI1MhNnMjUyNUJVQjVCNaITZzI1ojYiVUI2IjYyEydyNjI28lVCNwfiVUJHUhN3xSIV1WJFVXI20kZk8hXiVUIV8jbyVUI3B+JVQhcSE4XlJfIWkkVVdPIV4lVCFfI28lVCNwfiVUNXchOHJSJ2JkIWEvbiN4JnMnfFAhUCFRITh7IV4hXyE5USFfIWAhOV9XITlRTyRXVyN2ITlWUCNgI3YhXyFgITlZI3YhOV9PI28jdiN2ITlkTyNhI3YkdSE5a1QheyRtJFVXTyFeJVQhXyFgJ3YhYCFhITl6IWEjbyVUI3B+JVQkUCE6UlIjVyN3JFVXTyFeJVQhXyNvJVQjcH4lVCVWITpnVCdhIVIjYSN2JFJTJFVXTyFeJVQhXyFgITp2IWAhYSE7VyFhI28lVCNwfiVUJE8hOn1SI2EjdiRVV08hXiVUIV8jbyVUI3B+JVQkTyE7X1QjYCN2JFVXTyFeJVQhXyFgNVQhYCFhITtuIWEjbyVUI3B+JVQkTyE7dVMjYCN2JFVXTyFeJVQhXyFgNVQhYCNvJVQjcH4lVCphITxZVidwI3skVVdPIU8lVCFPIVAhPG8hUCFeJVQhXyFhJVQhYSFiIT1QIWIjbyVUI3B+JVQqWyE8dlJ2KlMkVVdPIV4lVCFfI28lVCNwfiVUJE8hPVdTJFVXI2ojdk8hXiVUIV8hYDVUIWAjbyVUI3B+JVQ3ViE9a1J4Nn0kVVdPIV4lVCFfI28lVCNwfiVUayE9e1IhT2MkVVdPIV4lVCFfI28lVCNwfiVUJE8hPl1TI2cjdiRVV08hXiVUIV8hYDVUIWAjbyVUI3B+JVQkYSE+cFIkVVcnZiRYTyFeJVQhXyNvJVQjcH4lVH4hP09PIVR+NWIhP1ZUJ3c1WSRVV08hXiVUIV8hYDVUIWAjbyVUI3AjcSE9UCNxfiVUNlghP29SIVM1fW5RJFVXTyFeJVQhXyNvJVQjcH4lVFghQFBSIWtQJFVXTyFeJVQhXyNvJVQjcH4lVDdaIUBnciRVVydZN1IjelMnXSR5J2czU09YJVRYWSVjWVolVFpbJWNbcCVUcHElY3F0JVR0dTJgdX0lVH0hTzNqIU8hUSVUIVEhWzJgIVshXiVUIV8hYyVUIWMhfTJgIX0jUiVUI1IjUzJgI1MjVCVUI1QjbzJgI3AkZiVUJGYkZyVjJGcjQlkyYCNCWSNCWiFAWSNCWiRJUzJgJElTJElfIUBZJElfJEpUMmAkSlQkSlUhQFkkSlUkS1YyYCRLViRLVyFAWSRLVyZGVTJgJkZVJkZWIUBZJkZWP0hUMmA/SFQ/SFUhQFk/SFV+MmA3WiFDT18kVVcnWjdSI3pTJ10keSdnM1NPdCVUdHUyYHV9JVR9IU8zaiFPIVElVCFRIVsyYCFbIV4lVCFfIWMlVCFjIX0yYCF9I1IlVCNSI1MyYCNTI1QlVCNUI28yYCNwJGclVCRnfjJgIiwgdG9rZW5pemVyczogW1kyNywgazE1LCB1MTAsIHcyMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgVTIyXSwgdG9wUnVsZXM6IHsgU2NyaXB0OiBbMCwgN10gfSwgZGlhbGVjdHM6IHsganN4OiAxMjEwNywgdHM6IDEyMTA5IH0sIGR5bmFtaWNQcmVjZWRlbmNlczogeyAxNDk6IDEsIDE3NjogMSB9LCBzcGVjaWFsaXplZDogW3sgdGVybTogMjg5LCBnZXQ6IChRMTcpID0+IEMxNFtRMTddIHx8IC0xIH0sIHsgdGVybTogMjk5LCBnZXQ6IChRMTcpID0+IFYxNltRMTddIHx8IC0xIH0sIHsgdGVybTogNjMsIGdldDogKFExNykgPT4gSTI1W1ExN10gfHwgLTEgfV0sIHRva2VuUHJlYzogMTIxMzAgfSk7CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2xhbmctamF2YXNjcmlwdEA2LjEuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTloZFhSdlkyOXRjR3hsZEdVc1FHTnZaR1Z0YVhKeWIzSXZZMjl0YldGdVpITXNRR052WkdWdGFYSnliM0l2YkdGdVozVmhaMlVzUUdOdlpHVnRhWEp5YjNJdmJHbHVkQ3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJwaGRtRnpZM0pwY0hRc1FHeGxlbVZ5TDJ4eS9kZW5vL2xhbmctamF2YXNjcmlwdC5qcwogIHZhciBSMjEgPSBbVnQzKCJmdW5jdGlvbiAke25hbWV9KCR7cGFyYW1zfSkge1xuCSR7fVxufSIsIHsgbGFiZWw6ICJmdW5jdGlvbiIsIGRldGFpbDogImRlZmluaXRpb24iLCB0eXBlOiAia2V5d29yZCIgfSksIFZ0MygiZm9yIChsZXQgJHtpbmRleH0gPSAwOyAke2luZGV4fSA8ICR7Ym91bmR9OyAke2luZGV4fSsrKSB7XG4JJHt9XG59IiwgeyBsYWJlbDogImZvciIsIGRldGFpbDogImxvb3AiLCB0eXBlOiAia2V5d29yZCIgfSksIFZ0MygiZm9yIChsZXQgJHtuYW1lfSBvZiAke2NvbGxlY3Rpb259KSB7XG4JJHt9XG59IiwgeyBsYWJlbDogImZvciIsIGRldGFpbDogIm9mIGxvb3AiLCB0eXBlOiAia2V5d29yZCIgfSksIFZ0MygiZG8ge1xuCSR7fVxufSB3aGlsZSAoJHt9KSIsIHsgbGFiZWw6ICJkbyIsIGRldGFpbDogImxvb3AiLCB0eXBlOiAia2V5d29yZCIgfSksIFZ0Mygid2hpbGUgKCR7fSkge1xuCSR7fVxufSIsIHsgbGFiZWw6ICJ3aGlsZSIsIGRldGFpbDogImxvb3AiLCB0eXBlOiAia2V5d29yZCIgfSksIFZ0MyhgdHJ5IHsKCVwke30KfSBjYXRjaCAoXCR7ZXJyb3J9KSB7CglcJHt9Cn1gLCB7IGxhYmVsOiAidHJ5IiwgZGV0YWlsOiAiLyBjYXRjaCBibG9jayIsIHR5cGU6ICJrZXl3b3JkIiB9KSwgVnQzKCJpZiAoJHt9KSB7XG4JJHt9XG59IiwgeyBsYWJlbDogImlmIiwgZGV0YWlsOiAiYmxvY2siLCB0eXBlOiAia2V5d29yZCIgfSksIFZ0MyhgaWYgKFwke30pIHsKCVwke30KfSBlbHNlIHsKCVwke30KfWAsIHsgbGFiZWw6ICJpZiIsIGRldGFpbDogIi8gZWxzZSBibG9jayIsIHR5cGU6ICJrZXl3b3JkIiB9KSwgVnQzKGBjbGFzcyBcJHtuYW1lfSB7Cgljb25zdHJ1Y3RvcihcJHtwYXJhbXN9KSB7CgkJXCR7fQoJfQp9YCwgeyBsYWJlbDogImNsYXNzIiwgZGV0YWlsOiAiZGVmaW5pdGlvbiIsIHR5cGU6ICJrZXl3b3JkIiB9KSwgVnQzKCdpbXBvcnQgeyR7bmFtZXN9fSBmcm9tICIke21vZHVsZX0iXG4ke30nLCB7IGxhYmVsOiAiaW1wb3J0IiwgZGV0YWlsOiAibmFtZWQiLCB0eXBlOiAia2V5d29yZCIgfSksIFZ0MygnaW1wb3J0ICR7bmFtZX0gZnJvbSAiJHttb2R1bGV9IlxuJHt9JywgeyBsYWJlbDogImltcG9ydCIsIGRldGFpbDogImRlZmF1bHQiLCB0eXBlOiAia2V5d29yZCIgfSldOwogIHZhciBJMjYgPSBuZXcgYmU0KCk7CiAgZnVuY3Rpb24gZDEzKGU1KSB7CiAgICByZXR1cm4gKHQ0LCByMykgPT4gewogICAgICBsZXQgbjggPSB0NC5ub2RlLmdldENoaWxkKCJWYXJpYWJsZURlZmluaXRpb24iKTsKICAgICAgcmV0dXJuIG44ICYmIHIzKG44LCBlNSksIHRydWU7CiAgICB9OwogIH0KICB2YXIgVzE0ID0gWyJGdW5jdGlvbkRlY2xhcmF0aW9uIl07CiAgdmFyIEgxOCA9IHsgRnVuY3Rpb25EZWNsYXJhdGlvbjogZDEzKCJmdW5jdGlvbiIpLCBDbGFzc0RlY2xhcmF0aW9uOiBkMTMoImNsYXNzIiksIENsYXNzRXhwcmVzc2lvbjogKCkgPT4gdHJ1ZSwgRW51bURlY2xhcmF0aW9uOiBkMTMoImNvbnN0YW50IiksIFR5cGVBbGlhc0RlY2xhcmF0aW9uOiBkMTMoInR5cGUiKSwgTmFtZXNwYWNlRGVjbGFyYXRpb246IGQxMygibmFtZXNwYWNlIiksIFZhcmlhYmxlRGVmaW5pdGlvbihlNSwgdDQpIHsKICAgIGU1Lm1hdGNoQ29udGV4dChXMTQpIHx8IHQ0KGU1LCAidmFyaWFibGUiKTsKICB9LCBUeXBlRGVmaW5pdGlvbihlNSwgdDQpIHsKICAgIHQ0KGU1LCAidHlwZSIpOwogIH0sIF9fcHJvdG9fXzogbnVsbCB9OwogIHZhciBwMTcgPSBCMTMuZGVmaW5lKHsgcGFyc2VyOiBKOS5jb25maWd1cmUoeyBwcm9wczogW3JlMTMuYWRkKHsgSWZTdGF0ZW1lbnQ6IFFlMyh7IGV4Y2VwdDogL15ccyooe3xlbHNlXGIpLyB9KSwgVHJ5U3RhdGVtZW50OiBRZTMoeyBleGNlcHQ6IC9eXHMqKHt8Y2F0Y2hcYnxmaW5hbGx5XGIpLyB9KSwgTGFiZWxlZFN0YXRlbWVudDogX2UxMCwgU3dpdGNoQm9keTogKGU1KSA9PiB7CiAgICBsZXQgdDQgPSBlNS50ZXh0QWZ0ZXIsIHIzID0gL15ccypcfS8udGVzdCh0NCksIG44ID0gL15ccyooY2FzZXxkZWZhdWx0KVxiLy50ZXN0KHQ0KTsKICAgIHJldHVybiBlNS5iYXNlSW5kZW50ICsgKHIzID8gMCA6IG44ID8gMSA6IDIpICogZTUudW5pdDsKICB9LCBCbG9jazogS2U0KHsgY2xvc2luZzogIn0iIH0pLCBBcnJvd0Z1bmN0aW9uOiAoZTUpID0+IGU1LmJhc2VJbmRlbnQgKyBlNS51bml0LCAiVGVtcGxhdGVTdHJpbmcgQmxvY2tDb21tZW50IjogKCkgPT4gbnVsbCwgIlN0YXRlbWVudCBQcm9wZXJ0eSI6IFFlMyh7IGV4Y2VwdDogL157LyB9KSwgSlNYRWxlbWVudChlNSkgewogICAgbGV0IHQ0ID0gL15ccyo8XC8vLnRlc3QoZTUudGV4dEFmdGVyKTsKICAgIHJldHVybiBlNS5saW5lSW5kZW50KGU1Lm5vZGUuZnJvbSkgKyAodDQgPyAwIDogZTUudW5pdCk7CiAgfSwgSlNYRXNjYXBlKGU1KSB7CiAgICBsZXQgdDQgPSAvXHMqXH0vLnRlc3QoZTUudGV4dEFmdGVyKTsKICAgIHJldHVybiBlNS5saW5lSW5kZW50KGU1Lm5vZGUuZnJvbSkgKyAodDQgPyAwIDogZTUudW5pdCk7CiAgfSwgIkpTWE9wZW5UYWcgSlNYU2VsZkNsb3NpbmdUYWciKGU1KSB7CiAgICByZXR1cm4gZTUuY29sdW1uKGU1Lm5vZGUuZnJvbSkgKyBlNS51bml0OwogIH0gfSksIGNlMTAuYWRkKHsgIkJsb2NrIENsYXNzQm9keSBTd2l0Y2hCb2R5IEVudW1Cb2R5IE9iamVjdEV4cHJlc3Npb24gQXJyYXlFeHByZXNzaW9uIjogWWU1LCBCbG9ja0NvbW1lbnQoZTUpIHsKICAgIHJldHVybiB7IGZyb206IGU1LmZyb20gKyAyLCB0bzogZTUudG8gLSAyIH07CiAgfSB9KV0gfSksIGxhbmd1YWdlRGF0YTogeyBjbG9zZUJyYWNrZXRzOiB7IGJyYWNrZXRzOiBbIigiLCAiWyIsICJ7IiwgIiciLCAnIicsICJgIl0gfSwgY29tbWVudFRva2VuczogeyBsaW5lOiAiLy8iLCBibG9jazogeyBvcGVuOiAiLyoiLCBjbG9zZTogIiovIiB9IH0sIGluZGVudE9uSW5wdXQ6IC9eXHMqKD86Y2FzZSB8ZGVmYXVsdDp8XHt8XH18PFwvKSQvLCB3b3JkQ2hhcnM6ICIkIiB9IH0pOwogIHZhciBHMTggPSBwMTcuY29uZmlndXJlKHsgZGlhbGVjdDogInRzIiB9KTsKICB2YXIgSzE1ID0gcDE3LmNvbmZpZ3VyZSh7IGRpYWxlY3Q6ICJqc3giIH0pOwogIHZhciBRMTIgPSBwMTcuY29uZmlndXJlKHsgZGlhbGVjdDogImpzeCB0cyIgfSk7CiAgdmFyIFUyMyA9ICJicmVhayBjYXNlIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgZGVsZXRlIGV4cG9ydCBleHRlbmRzIGZhbHNlIGZpbmFsbHkgaW4gaW5zdGFuY2VvZiBsZXQgbmV3IHJldHVybiBzdGF0aWMgc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0eXBlb2YgdmFyIHlpZWxkIi5zcGxpdCgiICIpLm1hcCgoZTUpID0+ICh7IGxhYmVsOiBlNSwgdHlwZTogImtleXdvcmQiIH0pKTsKICBmdW5jdGlvbiBEMTcoZTUsIHQ0LCByMyA9IGU1Lmxlbmd0aCkgewogICAgaWYgKCF0NCkKICAgICAgcmV0dXJuICIiOwogICAgbGV0IG44ID0gdDQuZ2V0Q2hpbGQoIkpTWElkZW50aWZpZXIiKTsKICAgIHJldHVybiBuOCA/IGU1LnNsaWNlU3RyaW5nKG44LmZyb20sIE1hdGgubWluKG44LnRvLCByMykpIDogIiI7CiAgfQogIHZhciBZMjggPSB0eXBlb2YgbmF2aWdhdG9yID09ICJvYmplY3QiICYmIC9BbmRyb2lkXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgdmFyIGVlMTQgPSBNMi5pbnB1dEhhbmRsZXIub2YoKGU1LCB0NCwgcjMsIG44KSA9PiB7CiAgICBpZiAoKFkyOCA/IGU1LmNvbXBvc2luZyA6IGU1LmNvbXBvc2l0aW9uU3RhcnRlZCkgfHwgZTUuc3RhdGUucmVhZE9ubHkgfHwgdDQgIT0gcjMgfHwgbjggIT0gIj4iICYmIG44ICE9ICIvIiB8fCAhcDE3LmlzQWN0aXZlQXQoZTUuc3RhdGUsIHQ0LCAtMSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCB7IHN0YXRlOiBvNCB9ID0gZTUsIGE0ID0gbzQuY2hhbmdlQnlSYW5nZSgobDcpID0+IHsKICAgICAgdmFyIGk0LCBjMTcsIG0yMzsKICAgICAgbGV0IHsgaGVhZDogczggfSA9IGw3LCB1MTEgPSBtMTQobzQpLnJlc29sdmVJbm5lcihzOCwgLTEpLCB5MTc7CiAgICAgIGlmICh1MTEubmFtZSA9PSAiSlNYU3RhcnRUYWciICYmICh1MTEgPSB1MTEucGFyZW50KSwgbjggPT0gIj4iICYmIHUxMS5uYW1lID09ICJKU1hGcmFnbWVudFRhZyIpCiAgICAgICAgcmV0dXJuIHsgcmFuZ2U6IGcyLmN1cnNvcihzOCArIDEpLCBjaGFuZ2VzOiB7IGZyb206IHM4LCBpbnNlcnQ6ICI+PD4iIH0gfTsKICAgICAgaWYgKG44ID09ICI+IiAmJiB1MTEubmFtZSA9PSAiSlNYSWRlbnRpZmllciIpIHsKICAgICAgICBpZiAoKChjMTcgPSAoaTQgPSB1MTEucGFyZW50KSA9PT0gbnVsbCB8fCBpNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaTQubGFzdENoaWxkKSA9PT0gbnVsbCB8fCBjMTcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGMxNy5uYW1lKSAhPSAiSlNYRW5kVGFnIiAmJiAoeTE3ID0gRDE3KG80LmRvYywgdTExLnBhcmVudCwgczgpKSkKICAgICAgICAgIHJldHVybiB7IHJhbmdlOiBnMi5jdXJzb3IoczggKyAxKSwgY2hhbmdlczogeyBmcm9tOiBzOCwgaW5zZXJ0OiBgPjwvJHt5MTd9PmAgfSB9OwogICAgICB9IGVsc2UgaWYgKG44ID09ICIvIiAmJiB1MTEubmFtZSA9PSAiSlNYRnJhZ21lbnRUYWciKSB7CiAgICAgICAgbGV0IGcxMiA9IHUxMS5wYXJlbnQsIGgxMCA9IGcxMj8ucGFyZW50OwogICAgICAgIGlmIChnMTIuZnJvbSA9PSBzOCAtIDEgJiYgKChtMjMgPSBoMTAubGFzdENoaWxkKSA9PT0gbnVsbCB8fCBtMjMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG0yMy5uYW1lKSAhPSAiSlNYRW5kVGFnIiAmJiAoeTE3ID0gRDE3KG80LmRvYywgaDEwPy5maXJzdENoaWxkLCBzOCkpKSB7CiAgICAgICAgICBsZXQgQzE3ID0gYC8ke3kxN30+YDsKICAgICAgICAgIHJldHVybiB7IHJhbmdlOiBnMi5jdXJzb3IoczggKyBDMTcubGVuZ3RoKSwgY2hhbmdlczogeyBmcm9tOiBzOCwgaW5zZXJ0OiBDMTcgfSB9OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4geyByYW5nZTogbDcgfTsKICAgIH0pOwogICAgcmV0dXJuIGE0LmNoYW5nZXMuZW1wdHkgPyBmYWxzZSA6IChlNS5kaXNwYXRjaChhNCwgeyB1c2VyRXZlbnQ6ICJpbnB1dC50eXBlIiwgc2Nyb2xsSW50b1ZpZXc6IHRydWUgfSksIHRydWUpOwogIH0pOwoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvY29tbW9uL21hcmtkb3duX2V4dC50cwogIGZ1bmN0aW9uIG1kRXh0ZW5zaW9uU3ludGF4Q29uZmlnKHsKICAgIHJlZ2V4LAogICAgZmlyc3RDaGFyQ29kZXMsCiAgICBub2RlVHlwZQogIH0pIHsKICAgIHJldHVybiB7CiAgICAgIGRlZmluZU5vZGVzOiBbbm9kZVR5cGVdLAogICAgICBwYXJzZUlubGluZTogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6IG5vZGVUeXBlLAogICAgICAgICAgcGFyc2UoY3gsIG5leHQsIHBvcykgewogICAgICAgICAgICBpZiAoIWZpcnN0Q2hhckNvZGVzLmluY2x1ZGVzKG5leHQpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxldCBtYXRjaCA9IHJlZ2V4LmV4ZWMoY3guc2xpY2UocG9zLCBjeC5lbmQpKTsKICAgICAgICAgICAgaWYgKCFtYXRjaCkgewogICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gY3guYWRkRWxlbWVudChjeC5lbHQobm9kZVR5cGUsIHBvcywgcG9zICsgbWF0Y2hbMF0ubGVuZ3RoKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdCiAgICB9OwogIH0KICBmdW5jdGlvbiBtZEV4dGVuc2lvblN0eWxlVGFncyh7IG5vZGVUeXBlLCB0YWcgfSkgewogICAgcmV0dXJuIHsKICAgICAgW25vZGVUeXBlXTogdGFnCiAgICB9OwogIH0KICBmdW5jdGlvbiBsb2FkTWFya2Rvd25FeHRlbnNpb25zKHN5c3RlbSkgewogICAgbGV0IG1kRXh0ZW5zaW9ucyA9IFtdOwogICAgZm9yIChsZXQgcGx1ZyBvZiBzeXN0ZW0ubG9hZGVkUGx1Z3MudmFsdWVzKCkpIHsKICAgICAgbGV0IG1hbmlmZXN0ID0gcGx1Zy5tYW5pZmVzdDsKICAgICAgaWYgKG1hbmlmZXN0LnN5bnRheCkgewogICAgICAgIGZvciAobGV0IFtub2RlVHlwZSwgZGVmMl0gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3Quc3ludGF4KSkgewogICAgICAgICAgbWRFeHRlbnNpb25zLnB1c2goewogICAgICAgICAgICBub2RlVHlwZSwKICAgICAgICAgICAgdGFnOiBmNC5kZWZpbmUoKSwKICAgICAgICAgICAgZmlyc3RDaGFyQ29kZXM6IGRlZjIuZmlyc3RDaGFyYWN0ZXJzLm1hcCgoY2gyKSA9PiBjaDIuY2hhckNvZGVBdCgwKSksCiAgICAgICAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKCJeIiArIGRlZjIucmVnZXgpLAogICAgICAgICAgICBzdHlsZXM6IGRlZjIuc3R5bGVzLAogICAgICAgICAgICBjbGFzc05hbWU6IGRlZjIuY2xhc3NOYW1lCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBtZEV4dGVuc2lvbnM7CiAgfQoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvY29tbW9uL2N1c3RvbXRhZ3MudHMKICB2YXIgV2lraUxpbmtUYWcgPSBmNC5kZWZpbmUoKTsKICB2YXIgV2lraUxpbmtQYWdlVGFnID0gZjQuZGVmaW5lKCk7CiAgdmFyIENvZGVJbmZvVGFnID0gZjQuZGVmaW5lKCk7CiAgdmFyIFRhc2tUYWcgPSBmNC5kZWZpbmUoKTsKICB2YXIgVGFza01hcmtlclRhZyA9IGY0LmRlZmluZSgpOwogIHZhciBDb21tZW50VGFnID0gZjQuZGVmaW5lKCk7CiAgdmFyIENvbW1lbnRNYXJrZXJUYWcgPSBmNC5kZWZpbmUoKTsKICB2YXIgQnVsbGV0TGlzdCA9IGY0LmRlZmluZSgpOwogIHZhciBPcmRlcmVkTGlzdCA9IGY0LmRlZmluZSgpOwogIHZhciBIaWdobGlnaHQgPSBmNC5kZWZpbmUoKTsKICB2YXIgSG9yaXpvbnRhbFJ1bGVUYWcgPSBmNC5kZWZpbmUoKTsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL2NvbW1vbi9wYXJzZXIudHMKICB2YXIgcGFnZUxpbmtSZWdleCA9IC9eXFtcWyhbXlxdXSspXF1cXS87CiAgdmFyIFdpa2lMaW5rID0gewogICAgZGVmaW5lTm9kZXM6IFsiV2lraUxpbmsiLCAiV2lraUxpbmtQYWdlIl0sCiAgICBwYXJzZUlubGluZTogWwogICAgICB7CiAgICAgICAgbmFtZTogIldpa2lMaW5rIiwKICAgICAgICBwYXJzZShjeCwgbmV4dCwgcG9zKSB7CiAgICAgICAgICBsZXQgbWF0Y2g7CiAgICAgICAgICBpZiAobmV4dCAhPSA5MSB8fCAhKG1hdGNoID0gcGFnZUxpbmtSZWdleC5leGVjKGN4LnNsaWNlKHBvcywgY3guZW5kKSkpKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBjeC5hZGRFbGVtZW50KAogICAgICAgICAgICBjeC5lbHQoIldpa2lMaW5rIiwgcG9zLCBwb3MgKyBtYXRjaFswXS5sZW5ndGgsIFsKICAgICAgICAgICAgICBjeC5lbHQoIldpa2lMaW5rUGFnZSIsIHBvcyArIDIsIHBvcyArIG1hdGNoWzBdLmxlbmd0aCAtIDIpCiAgICAgICAgICAgIF0pCiAgICAgICAgICApOwogICAgICAgIH0sCiAgICAgICAgYWZ0ZXI6ICJFbXBoYXNpcyIKICAgICAgfQogICAgXQogIH07CiAgdmFyIEhpZ2hsaWdodERlbGltID0geyByZXNvbHZlOiAiSGlnaGxpZ2h0IiwgbWFyazogIkhpZ2hsaWdodE1hcmsiIH07CiAgdmFyIFN0cmlrZXRocm91Z2ggPSB7CiAgICBkZWZpbmVOb2RlczogWwogICAgICB7CiAgICAgICAgbmFtZTogIkhpZ2hsaWdodCIsCiAgICAgICAgc3R5bGU6IHsgIkhpZ2hsaWdodC8uLi4iOiBIaWdobGlnaHQgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkhpZ2hsaWdodE1hcmsiLAogICAgICAgIHN0eWxlOiBuNS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KICAgICAgfQogICAgXSwKICAgIHBhcnNlSW5saW5lOiBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiSGlnaGxpZ2h0IiwKICAgICAgICBwYXJzZShjeCwgbmV4dCwgcG9zKSB7CiAgICAgICAgICBpZiAobmV4dCAhPSA2MSB8fCBjeC5jaGFyKHBvcyArIDEpICE9IDYxKQogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICByZXR1cm4gY3guYWRkRGVsaW1pdGVyKEhpZ2hsaWdodERlbGltLCBwb3MsIHBvcyArIDIsIHRydWUsIHRydWUpOwogICAgICAgIH0sCiAgICAgICAgYWZ0ZXI6ICJFbXBoYXNpcyIKICAgICAgfQogICAgXQogIH07CiAgdmFyIENvbW1lbnRQYXJzZXIgPSBjbGFzcyB7CiAgICBuZXh0TGluZSgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZmluaXNoKGN4LCBsZWFmKSB7CiAgICAgIGN4LmFkZExlYWZFbGVtZW50KAogICAgICAgIGxlYWYsCiAgICAgICAgY3guZWx0KCJDb21tZW50IiwgbGVhZi5zdGFydCwgbGVhZi5zdGFydCArIGxlYWYuY29udGVudC5sZW5ndGgsIFsKICAgICAgICAgIC4uLmN4LnBhcnNlci5wYXJzZUlubGluZShsZWFmLmNvbnRlbnQuc2xpY2UoMyksIGxlYWYuc3RhcnQgKyAzKQogICAgICAgIF0pCiAgICAgICk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH07CiAgdmFyIENvbW1lbnQgPSB7CiAgICBkZWZpbmVOb2RlczogW3sgbmFtZTogIkNvbW1lbnQiLCBibG9jazogdHJ1ZSB9XSwKICAgIHBhcnNlQmxvY2s6IFsKICAgICAgewogICAgICAgIG5hbWU6ICJDb21tZW50IiwKICAgICAgICBsZWFmKGN4LCBsZWFmKSB7CiAgICAgICAgICByZXR1cm4gL14lJVxzLy50ZXN0KGxlYWYuY29udGVudCkgPyBuZXcgQ29tbWVudFBhcnNlcigpIDogbnVsbDsKICAgICAgICB9LAogICAgICAgIGFmdGVyOiAiU2V0ZXh0SGVhZGluZyIKICAgICAgfQogICAgXQogIH07CiAgZnVuY3Rpb24gYnVpbGRNYXJrZG93bihtZEV4dGVuc2lvbnMpIHsKICAgIHJldHVybiBhZTEyKHsKICAgICAgZXh0ZW5zaW9uczogWwogICAgICAgIFdpa2lMaW5rLAogICAgICAgIFZ0NywKICAgICAgICBDb21tZW50LAogICAgICAgIFN0cmlrZXRocm91Z2gsCiAgICAgICAgR3QyLAogICAgICAgIC4uLm1kRXh0ZW5zaW9ucy5tYXAobWRFeHRlbnNpb25TeW50YXhDb25maWcpLAogICAgICAgIHsKICAgICAgICAgIHByb3BzOiBbCiAgICAgICAgICAgICQxMih7CiAgICAgICAgICAgICAgV2lraUxpbms6IFdpa2lMaW5rVGFnLAogICAgICAgICAgICAgIFdpa2lMaW5rUGFnZTogV2lraUxpbmtQYWdlVGFnLAogICAgICAgICAgICAgIFRhc2s6IFRhc2tUYWcsCiAgICAgICAgICAgICAgVGFza01hcmtlcjogVGFza01hcmtlclRhZywKICAgICAgICAgICAgICBDb21tZW50OiBDb21tZW50VGFnLAogICAgICAgICAgICAgICJUYWJsZURlbGltaXRlciBTdWJzY3JpcHRNYXJrIFN1cGVyc2NyaXB0TWFyayBTdHJpa2V0aHJvdWdoTWFyayI6IG41LnByb2Nlc3NpbmdJbnN0cnVjdGlvbiwKICAgICAgICAgICAgICAiVGFibGVIZWFkZXIvLi4uIjogbjUuaGVhZGluZywKICAgICAgICAgICAgICBUYWJsZUNlbGw6IG41LmNvbnRlbnQsCiAgICAgICAgICAgICAgQ29kZUluZm86IENvZGVJbmZvVGFnLAogICAgICAgICAgICAgIEhvcml6b250YWxSdWxlOiBIb3Jpem9udGFsUnVsZVRhZwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgLi4ubWRFeHRlbnNpb25zLm1hcCgKICAgICAgICAgICAgICAobWRFeHQpID0+ICQxMihtZEV4dGVuc2lvblN0eWxlVGFncyhtZEV4dCkpCiAgICAgICAgICAgICkKICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0pLmxhbmd1YWdlOwogIH0KCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL2NvbW1vbi9wYXJzZV90cmVlLnRzCiAgZnVuY3Rpb24gbGV6ZXJUb1BhcnNlVHJlZSh0ZXh0LCBuOCwgb2Zmc2V0ID0gMCkgewogICAgbGV0IGNoaWxkcmVuID0gW107CiAgICBsZXQgbm9kZVRleHQ7CiAgICBsZXQgY2hpbGQgPSBuOC5maXJzdENoaWxkOwogICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgIGNoaWxkcmVuLnB1c2gobGV6ZXJUb1BhcnNlVHJlZSh0ZXh0LCBjaGlsZCkpOwogICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nOwogICAgfQogICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgewogICAgICBjaGlsZHJlbiA9IFsKICAgICAgICB7CiAgICAgICAgICBmcm9tOiBuOC5mcm9tICsgb2Zmc2V0LAogICAgICAgICAgdG86IG44LnRvICsgb2Zmc2V0LAogICAgICAgICAgdGV4dDogdGV4dC5zdWJzdHJpbmcobjguZnJvbSwgbjgudG8pCiAgICAgICAgfQogICAgICBdOwogICAgfSBlbHNlIHsKICAgICAgbGV0IG5ld0NoaWxkcmVuID0gW107CiAgICAgIGxldCBpbmRleCA9IG44LmZyb207CiAgICAgIGZvciAobGV0IGNoaWxkMiBvZiBjaGlsZHJlbikgewogICAgICAgIGxldCBzOSA9IHRleHQuc3Vic3RyaW5nKGluZGV4LCBjaGlsZDIuZnJvbSk7CiAgICAgICAgaWYgKHM5KSB7CiAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKHsKICAgICAgICAgICAgZnJvbTogaW5kZXggKyBvZmZzZXQsCiAgICAgICAgICAgIHRvOiBjaGlsZDIuZnJvbSArIG9mZnNldCwKICAgICAgICAgICAgdGV4dDogczkKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKGNoaWxkMik7CiAgICAgICAgaW5kZXggPSBjaGlsZDIudG87CiAgICAgIH0KICAgICAgbGV0IHM4ID0gdGV4dC5zdWJzdHJpbmcoaW5kZXgsIG44LnRvKTsKICAgICAgaWYgKHM4KSB7CiAgICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh7IGZyb206IGluZGV4ICsgb2Zmc2V0LCB0bzogbjgudG8gKyBvZmZzZXQsIHRleHQ6IHM4IH0pOwogICAgICB9CiAgICAgIGNoaWxkcmVuID0gbmV3Q2hpbGRyZW47CiAgICB9CiAgICBsZXQgcmVzdWx0ID0gewogICAgICB0eXBlOiBuOC5uYW1lLAogICAgICBmcm9tOiBuOC5mcm9tICsgb2Zmc2V0LAogICAgICB0bzogbjgudG8gKyBvZmZzZXQKICAgIH07CiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkgewogICAgICByZXN1bHQuY2hpbGRyZW4gPSBjaGlsZHJlbjsKICAgIH0KICAgIGlmIChub2RlVGV4dCkgewogICAgICByZXN1bHQudGV4dCA9IG5vZGVUZXh0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gcGFyc2U5KGxhbmd1YWdlLCB0ZXh0KSB7CiAgICBsZXQgdHJlZSA9IGxlemVyVG9QYXJzZVRyZWUodGV4dCwgbGFuZ3VhZ2UucGFyc2VyLnBhcnNlKHRleHQpLnRvcE5vZGUpOwogICAgcmV0dXJuIHRyZWU7CiAgfQoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvY29tbW9uL3N5c2NhbGxzL21hcmtkb3duLnRzCiAgZnVuY3Rpb24gbWFya2Rvd25TeXNjYWxscyhsYW5nKSB7CiAgICByZXR1cm4gewogICAgICAibWFya2Rvd24ucGFyc2VNYXJrZG93biI6IChfY3R4LCB0ZXh0KSA9PiB7CiAgICAgICAgcmV0dXJuIHBhcnNlOShsYW5nLCB0ZXh0KTsKICAgICAgfQogICAgfTsKICB9CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy9jb21tb24vdXRpbC50cwogIGZ1bmN0aW9uIHNhZmVSdW4oZm40KSB7CiAgICBmbjQoKS5jYXRjaCgoZTUpID0+IHsKICAgICAgY29uc29sZS5lcnJvcihlNSk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaXNNYWNMaWtlKCkgewogICAgcmV0dXJuIC8oTWFjfGlQaG9uZXxpUG9kfGlQYWQpL2kudGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOwogIH0KICBmdW5jdGlvbiB0aHJvdHRsZShmdW5jMiwgbGltaXQpIHsKICAgIGxldCB0aW1lciA9IG51bGw7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIGlmICghdGltZXIpIHsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgZnVuYzIoKTsKICAgICAgICAgIHRpbWVyID0gbnVsbDsKICAgICAgICB9LCBsaW1pdCk7CiAgICAgIH0KICAgIH07CiAgfQogIHZhciB5YW1sU2V0dGluZ3NSZWdleCA9IC9gYGB5YW1sKFteYF0rKWBgYC87CiAgZnVuY3Rpb24gcGFyc2VZYW1sU2V0dGluZ3Moc2V0dGluZ3NNYXJrZG93bikgewogICAgY29uc3QgbWF0Y2ggPSB5YW1sU2V0dGluZ3NSZWdleC5leGVjKHNldHRpbmdzTWFya2Rvd24pOwogICAgaWYgKCFtYXRjaCkgewogICAgICByZXR1cm4ge307CiAgICB9CiAgICBjb25zdCB5YW1sID0gbWF0Y2hbMV07CiAgICByZXR1cm4geWFtbF9leHBvcnRzLnBhcnNlKHlhbWwpOwogIH0KCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy91dGlsLnRzCiAgZnVuY3Rpb24gc2FmZVJ1bjIoZm40KSB7CiAgICBmbjQoKS5jYXRjaCgoZTUpID0+IHsKICAgICAgY29uc29sZS5lcnJvcigiQ2F1Z2h0IGVycm9yIiwgZTUubWVzc2FnZSk7CiAgICB9KTsKICB9CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy9wbHVnb3Mvc2FuZGJveC50cwogIHZhciBTYW5kYm94ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IocGx1Zywgd29ya2VyKSB7CiAgICAgIHRoaXMucmVxSWQgPSAwOwogICAgICB0aGlzLm91dHN0YW5kaW5nSW5pdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICB0aGlzLm91dHN0YW5kaW5nRGVwZW5kZW5jeUluaXRzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgdGhpcy5vdXRzdGFuZGluZ0ludm9jYXRpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgdGhpcy5sb2FkZWRGdW5jdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICB0aGlzLmxvZ0J1ZmZlciA9IFtdOwogICAgICB0aGlzLm1heExvZ0J1ZmZlclNpemUgPSAxMDA7CiAgICAgIHdvcmtlci5vbk1lc3NhZ2UgPSB0aGlzLm9uTWVzc2FnZS5iaW5kKHRoaXMpOwogICAgICB0aGlzLndvcmtlciA9IHdvcmtlcjsKICAgICAgdGhpcy5wbHVnID0gcGx1ZzsKICAgIH0KICAgIGlzTG9hZGVkKG5hbWUpIHsKICAgICAgcmV0dXJuIHRoaXMubG9hZGVkRnVuY3Rpb25zLmhhcyhuYW1lKTsKICAgIH0KICAgIGFzeW5jIGxvYWQobmFtZSwgY29kZSkgewogICAgICBhd2FpdCB0aGlzLndvcmtlci5yZWFkeTsKICAgICAgbGV0IG91dHN0YW5kaW5nSW5pdCA9IHRoaXMub3V0c3RhbmRpbmdJbml0cy5nZXQobmFtZSk7CiAgICAgIGlmIChvdXRzdGFuZGluZ0luaXQpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU3KSA9PiB7CiAgICAgICAgICB0aGlzLm91dHN0YW5kaW5nSW5pdHMuc2V0KG5hbWUsICgpID0+IHsKICAgICAgICAgICAgb3V0c3RhbmRpbmdJbml0KCk7CiAgICAgICAgICAgIHJlc29sdmU3KCk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgdHlwZTogImxvYWQiLAogICAgICAgIG5hbWUsCiAgICAgICAgY29kZQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlNykgPT4gewogICAgICAgIHRoaXMub3V0c3RhbmRpbmdJbml0cy5zZXQobmFtZSwgKCkgPT4gewogICAgICAgICAgdGhpcy5sb2FkZWRGdW5jdGlvbnMuYWRkKG5hbWUpOwogICAgICAgICAgdGhpcy5vdXRzdGFuZGluZ0luaXRzLmRlbGV0ZShuYW1lKTsKICAgICAgICAgIHJlc29sdmU3KCk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogICAgbG9hZERlcGVuZGVuY3kobmFtZSwgY29kZSkgewogICAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgdHlwZTogImxvYWQtZGVwZW5kZW5jeSIsCiAgICAgICAgbmFtZSwKICAgICAgICBjb2RlCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU3KSA9PiB7CiAgICAgICAgdGhpcy5vdXRzdGFuZGluZ0RlcGVuZGVuY3lJbml0cy5zZXQobmFtZSwgKCkgPT4gewogICAgICAgICAgdGhpcy5vdXRzdGFuZGluZ0RlcGVuZGVuY3lJbml0cy5kZWxldGUobmFtZSk7CiAgICAgICAgICByZXNvbHZlNygpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIG9uTWVzc2FnZShkYXRhKSB7CiAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7CiAgICAgICAgY2FzZSAiaW5pdGVkIjoKICAgICAgICAgIGxldCBpbml0Q2IgPSB0aGlzLm91dHN0YW5kaW5nSW5pdHMuZ2V0KGRhdGEubmFtZSk7CiAgICAgICAgICBpbml0Q2IgJiYgaW5pdENiKCk7CiAgICAgICAgICB0aGlzLm91dHN0YW5kaW5nSW5pdHMuZGVsZXRlKGRhdGEubmFtZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJkZXBlbmRlbmN5LWluaXRlZCI6CiAgICAgICAgICBsZXQgZGVwSW5pdENiID0gdGhpcy5vdXRzdGFuZGluZ0RlcGVuZGVuY3lJbml0cy5nZXQoZGF0YS5uYW1lKTsKICAgICAgICAgIGRlcEluaXRDYiAmJiBkZXBJbml0Q2IoKTsKICAgICAgICAgIHRoaXMub3V0c3RhbmRpbmdEZXBlbmRlbmN5SW5pdHMuZGVsZXRlKGRhdGEubmFtZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzeXNjYWxsIjoKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLnBsdWcuc3lzY2FsbChkYXRhLm5hbWUsIGRhdGEuYXJncyk7CiAgICAgICAgICAgIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICB0eXBlOiAic3lzY2FsbC1yZXNwb25zZSIsCiAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgICAgcmVzdWx0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBjYXRjaCAoZTUpIHsKICAgICAgICAgICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgIHR5cGU6ICJzeXNjYWxsLXJlc3BvbnNlIiwKICAgICAgICAgICAgICBpZDogZGF0YS5pZCwKICAgICAgICAgICAgICBlcnJvcjogZTUubWVzc2FnZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInJlc3VsdCI6CiAgICAgICAgICBsZXQgcmVzdWx0Q2JzID0gdGhpcy5vdXRzdGFuZGluZ0ludm9jYXRpb25zLmdldChkYXRhLmlkKTsKICAgICAgICAgIHRoaXMub3V0c3RhbmRpbmdJbnZvY2F0aW9ucy5kZWxldGUoZGF0YS5pZCk7CiAgICAgICAgICBpZiAoZGF0YS5lcnJvcikgewogICAgICAgICAgICByZXN1bHRDYnMgJiYgcmVzdWx0Q2JzLnJlamVjdCgKICAgICAgICAgICAgICBuZXcgRXJyb3IoYCR7ZGF0YS5lcnJvcn0KU3RhY2sgdHJhY2U6ICR7ZGF0YS5zdGFja31gKQogICAgICAgICAgICApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0Q2JzICYmIHJlc3VsdENicy5yZXNvbHZlKGRhdGEucmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImxvZyI6CiAgICAgICAgICB0aGlzLmxvZ0J1ZmZlci5wdXNoKHsKICAgICAgICAgICAgbGV2ZWw6IGRhdGEubGV2ZWwsCiAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSwKICAgICAgICAgICAgZGF0ZTogRGF0ZS5ub3coKQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAodGhpcy5sb2dCdWZmZXIubGVuZ3RoID4gdGhpcy5tYXhMb2dCdWZmZXJTaXplKSB7CiAgICAgICAgICAgIHRoaXMubG9nQnVmZmVyLnNoaWZ0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zb2xlLmxvZyhgW1NhbmRib3ggJHtkYXRhLmxldmVsfV1gLCBkYXRhLm1lc3NhZ2UpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlVua25vd24gbWVzc2FnZSB0eXBlIiwgZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGludm9rZShuYW1lLCBhcmdzKSB7CiAgICAgIHRoaXMucmVxSWQrKzsKICAgICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2UoewogICAgICAgIHR5cGU6ICJpbnZva2UiLAogICAgICAgIGlkOiB0aGlzLnJlcUlkLAogICAgICAgIG5hbWUsCiAgICAgICAgYXJncwogICAgICB9KTsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlNywgcmVqZWN0KSA9PiB7CiAgICAgICAgdGhpcy5vdXRzdGFuZGluZ0ludm9jYXRpb25zLnNldCh0aGlzLnJlcUlkLCB7IHJlc29sdmU6IHJlc29sdmU3LCByZWplY3QgfSk7CiAgICAgIH0pOwogICAgfQogICAgc3RvcCgpIHsKICAgICAgdGhpcy53b3JrZXIudGVybWluYXRlKCk7CiAgICB9CiAgfTsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9lbnZpcm9ubWVudHMvd2Vid29ya2VyX3NhbmRib3gudHMKICB2YXIgaW1wb3J0X21ldGEgPSB7fTsKICB2YXIgV2ViV29ya2VyV3JhcHBlciA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKHdvcmtlcikgewogICAgICB0aGlzLndvcmtlciA9IHdvcmtlcjsKICAgICAgdGhpcy53b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIChldnQpID0+IHsKICAgICAgICBsZXQgZGF0YSA9IGV2dC5kYXRhOwogICAgICAgIGlmICghZGF0YSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBzYWZlUnVuMihhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCB0aGlzLm9uTWVzc2FnZShkYXRhKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIHRoaXMucmVhZHkgPSBQcm9taXNlLnJlc29sdmUoKTsKICAgIH0KICAgIHBvc3RNZXNzYWdlKG1lc3NhZ2UpIHsKICAgICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2UobWVzc2FnZSk7CiAgICB9CiAgICB0ZXJtaW5hdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLndvcmtlci50ZXJtaW5hdGUoKTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGNyZWF0ZVNhbmRib3gocGx1ZykgewogICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcigKICAgICAgaW1wb3J0X21ldGEudXJsID8gbmV3IFVSTCgic2FuZGJveF93b3JrZXIudHMiLCBpbXBvcnRfbWV0YS51cmwpIDogbmV3IFVSTCgid29ya2VyLmpzIiwgbG9jYXRpb24ub3JpZ2luKSwKICAgICAgewogICAgICAgIHR5cGU6ICJtb2R1bGUiCiAgICAgIH0KICAgICk7CiAgICByZXR1cm4gbmV3IFNhbmRib3gocGx1ZywgbmV3IFdlYldvcmtlcldyYXBwZXIod29ya2VyKSk7CiAgfQoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvcGx1Z29zL2hvb2tzL2V2ZW50LnRzCiAgdmFyIEV2ZW50SG9vayA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB0aGlzLmxvY2FsTGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIH0KICAgIGFkZExvY2FsTGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaykgewogICAgICBpZiAoIXRoaXMubG9jYWxMaXN0ZW5lcnMuaGFzKGV2ZW50TmFtZSkpIHsKICAgICAgICB0aGlzLmxvY2FsTGlzdGVuZXJzLnNldChldmVudE5hbWUsIFtdKTsKICAgICAgfQogICAgICB0aGlzLmxvY2FsTGlzdGVuZXJzLmdldChldmVudE5hbWUpLnB1c2goY2FsbGJhY2spOwogICAgfQogICAgbGlzdEV2ZW50cygpIHsKICAgICAgaWYgKCF0aGlzLnN5c3RlbSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiRXZlbnQgaG9vayBpcyBub3QgaW5pdGlhbGl6ZWQiKTsKICAgICAgfQogICAgICBsZXQgZXZlbnROYW1lczIgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICBmb3IgKGNvbnN0IHBsdWcgb2YgdGhpcy5zeXN0ZW0ubG9hZGVkUGx1Z3MudmFsdWVzKCkpIHsKICAgICAgICBmb3IgKGNvbnN0IGZ1bmN0aW9uRGVmIG9mIE9iamVjdC52YWx1ZXMocGx1Zy5tYW5pZmVzdC5mdW5jdGlvbnMpKSB7CiAgICAgICAgICBpZiAoZnVuY3Rpb25EZWYuZXZlbnRzKSB7CiAgICAgICAgICAgIGZvciAobGV0IGV2ZW50TmFtZSBvZiBmdW5jdGlvbkRlZi5ldmVudHMpIHsKICAgICAgICAgICAgICBldmVudE5hbWVzMi5hZGQoZXZlbnROYW1lKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKGxldCBldmVudE5hbWUgb2YgdGhpcy5sb2NhbExpc3RlbmVycy5rZXlzKCkpIHsKICAgICAgICBldmVudE5hbWVzMi5hZGQoZXZlbnROYW1lKTsKICAgICAgfQogICAgICByZXR1cm4gWy4uLmV2ZW50TmFtZXMyXTsKICAgIH0KICAgIGFzeW5jIGRpc3BhdGNoRXZlbnQoZXZlbnROYW1lLCBkYXRhKSB7CiAgICAgIGlmICghdGhpcy5zeXN0ZW0pIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV2ZW50IGhvb2sgaXMgbm90IGluaXRpYWxpemVkIik7CiAgICAgIH0KICAgICAgbGV0IHJlc3BvbnNlcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IHBsdWcgb2YgdGhpcy5zeXN0ZW0ubG9hZGVkUGx1Z3MudmFsdWVzKCkpIHsKICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBmdW5jdGlvbkRlZl0gb2YgT2JqZWN0LmVudHJpZXMoCiAgICAgICAgICBwbHVnLm1hbmlmZXN0LmZ1bmN0aW9ucwogICAgICAgICkpIHsKICAgICAgICAgIGlmIChmdW5jdGlvbkRlZi5ldmVudHMgJiYgZnVuY3Rpb25EZWYuZXZlbnRzLmluY2x1ZGVzKGV2ZW50TmFtZSkpIHsKICAgICAgICAgICAgaWYgKHBsdWcuY2FuSW52b2tlKG5hbWUpKSB7CiAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHBsdWcuaW52b2tlKG5hbWUsIFtkYXRhXSk7CiAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgICByZXNwb25zZXMucHVzaChyZXN1bHQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgbG9jYWxMaXN0ZW5lcnMgPSB0aGlzLmxvY2FsTGlzdGVuZXJzLmdldChldmVudE5hbWUpOwogICAgICBpZiAobG9jYWxMaXN0ZW5lcnMpIHsKICAgICAgICBmb3IgKGxldCBsb2NhbExpc3RlbmVyIG9mIGxvY2FsTGlzdGVuZXJzKSB7CiAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGxvY2FsTGlzdGVuZXIoZGF0YSkpOwogICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICByZXNwb25zZXMucHVzaChyZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2VzOwogICAgfQogICAgYXBwbHkoc3lzdGVtKSB7CiAgICAgIHRoaXMuc3lzdGVtID0gc3lzdGVtOwogICAgICB0aGlzLnN5c3RlbS5vbih7CiAgICAgICAgcGx1Z0xvYWRlZDogKHBsdWcpID0+IHsKICAgICAgICAgIHNhZmVSdW4yKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaEV2ZW50KCJwbHVnOmxvYWQiLCBwbHVnLm5hbWUpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHZhbGlkYXRlTWFuaWZlc3QobWFuaWZlc3QpIHsKICAgICAgbGV0IGVycm9ycyA9IFtdOwogICAgICBmb3IgKGNvbnN0IFtuYW1lLCBmdW5jdGlvbkRlZl0gb2YgT2JqZWN0LmVudHJpZXMoCiAgICAgICAgbWFuaWZlc3QuZnVuY3Rpb25zIHx8IHt9CiAgICAgICkpIHsKICAgICAgICBpZiAoZnVuY3Rpb25EZWYuZXZlbnRzICYmICFBcnJheS5pc0FycmF5KGZ1bmN0aW9uRGVmLmV2ZW50cykpIHsKICAgICAgICAgIGVycm9ycy5wdXNoKCInZXZlbnRzJyBrZXkgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBlcnJvcnM7CiAgICB9CiAgfTsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9zeXNjYWxscy9ldmVudC50cwogIGZ1bmN0aW9uIGV2ZW50U3lzY2FsbHMoZXZlbnRIb29rKSB7CiAgICByZXR1cm4gewogICAgICAiZXZlbnQuZGlzcGF0Y2giOiAoY3R4LCBldmVudE5hbWUsIGRhdGEpID0+IHsKICAgICAgICByZXR1cm4gZXZlbnRIb29rLmRpc3BhdGNoRXZlbnQoZXZlbnROYW1lLCBkYXRhKTsKICAgICAgfSwKICAgICAgImV2ZW50Lmxpc3QiOiAoKSA9PiB7CiAgICAgICAgcmV0dXJuIGV2ZW50SG9vay5saXN0RXZlbnRzKCk7CiAgICAgIH0KICAgIH07CiAgfQoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvcGx1Z29zL3N5c2NhbGxzL3NhbmRib3gudHMKICBmdW5jdGlvbiBzYW5kYm94U3lzY2FsbHMoc3lzdGVtKSB7CiAgICByZXR1cm4gewogICAgICAic2FuZGJveC5nZXRMb2dzIjogKCkgPT4gewogICAgICAgIGxldCBhbGxMb2dzID0gW107CiAgICAgICAgZm9yIChjb25zdCBwbHVnIG9mIHN5c3RlbS5sb2FkZWRQbHVncy52YWx1ZXMoKSkgewogICAgICAgICAgYWxsTG9ncyA9IGFsbExvZ3MuY29uY2F0KHBsdWcuc2FuZGJveC5sb2dCdWZmZXIpOwogICAgICAgIH0KICAgICAgICBhbGxMb2dzID0gYWxsTG9ncy5zb3J0KChhNCwgYjI1KSA9PiBhNC5kYXRlIC0gYjI1LmRhdGUpOwogICAgICAgIHJldHVybiBhbGxMb2dzOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9ldmVudC50cwogIHZhciBFdmVudEVtaXR0ZXIyID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTsKICAgIH0KICAgIG9uKGhhbmRsZXJzKSB7CiAgICAgIHRoaXMuaGFuZGxlcnMucHVzaChoYW5kbGVycyk7CiAgICB9CiAgICBvZmYoaGFuZGxlcnMpIHsKICAgICAgdGhpcy5oYW5kbGVycyA9IHRoaXMuaGFuZGxlcnMuZmlsdGVyKChoMTApID0+IGgxMCAhPT0gaGFuZGxlcnMpOwogICAgfQogICAgYXN5bmMgZW1pdChldmVudE5hbWUsIC4uLmFyZ3MpIHsKICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMuaGFuZGxlcnMpIHsKICAgICAgICBjb25zdCBmbjQgPSBoYW5kbGVyW2V2ZW50TmFtZV07CiAgICAgICAgaWYgKGZuNCkgewogICAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGZuNCguLi5hcmdzKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfTsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9wbHVnLnRzCiAgdmFyIFBsdWcgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihzeXN0ZW0sIG5hbWUsIHNhbmRib3hGYWN0b3J5KSB7CiAgICAgIHRoaXMuZ3JhbnRlZFBlcm1pc3Npb25zID0gW107CiAgICAgIHRoaXMuc3lzdGVtID0gc3lzdGVtOwogICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICB0aGlzLnNhbmRib3ggPSBzYW5kYm94RmFjdG9yeSh0aGlzKTsKICAgICAgdGhpcy5ydW50aW1lRW52ID0gc3lzdGVtLnJ1bnRpbWVFbnY7CiAgICAgIHRoaXMudmVyc2lvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgfQogICAgYXN5bmMgbG9hZChtYW5pZmVzdCkgewogICAgICB0aGlzLm1hbmlmZXN0ID0gbWFuaWZlc3Q7CiAgICAgIHRoaXMuZ3JhbnRlZFBlcm1pc3Npb25zID0gbWFuaWZlc3QucmVxdWlyZWRQZXJtaXNzaW9ucyB8fCBbXTsKICAgICAgZm9yIChjb25zdCBbZGVwLCBjb2RlXSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5kZXBlbmRlbmNpZXMgfHwge30pKSB7CiAgICAgICAgYXdhaXQgdGhpcy5zYW5kYm94LmxvYWREZXBlbmRlbmN5KGRlcCwgY29kZSk7CiAgICAgIH0KICAgIH0KICAgIHN5c2NhbGwobmFtZSwgYXJncykgewogICAgICByZXR1cm4gdGhpcy5zeXN0ZW0uc3lzY2FsbFdpdGhDb250ZXh0KHsgcGx1ZzogdGhpcyB9LCBuYW1lLCBhcmdzKTsKICAgIH0KICAgIGNhbkludm9rZShuYW1lKSB7CiAgICAgIGlmICghdGhpcy5tYW5pZmVzdCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBjb25zdCBmdW5EZWYgPSB0aGlzLm1hbmlmZXN0LmZ1bmN0aW9uc1tuYW1lXTsKICAgICAgaWYgKCFmdW5EZWYpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uICR7bmFtZX0gbm90IGZvdW5kIGluIG1hbmlmZXN0YCk7CiAgICAgIH0KICAgICAgcmV0dXJuICFmdW5EZWYuZW52IHx8IGZ1bkRlZi5lbnYgPT09IHRoaXMucnVudGltZUVudjsKICAgIH0KICAgIGFzeW5jIGludm9rZShuYW1lLCBhcmdzKSB7CiAgICAgIGlmICghdGhpcy5zYW5kYm94LmlzTG9hZGVkKG5hbWUpKSB7CiAgICAgICAgY29uc3QgZnVuRGVmID0gdGhpcy5tYW5pZmVzdC5mdW5jdGlvbnNbbmFtZV07CiAgICAgICAgaWYgKCFmdW5EZWYpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gJHtuYW1lfSBub3QgZm91bmQgaW4gbWFuaWZlc3RgKTsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLmNhbkludm9rZShuYW1lKSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICBgRnVuY3Rpb24gJHtuYW1lfSBpcyBub3QgYXZhaWxhYmxlIGluICR7dGhpcy5ydW50aW1lRW52fWAKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMuc2FuZGJveC5sb2FkKG5hbWUsIGZ1bkRlZi5jb2RlKTsKICAgICAgfQogICAgICByZXR1cm4gYXdhaXQgdGhpcy5zYW5kYm94Lmludm9rZShuYW1lLCBhcmdzKTsKICAgIH0KICAgIGFzeW5jIHN0b3AoKSB7CiAgICAgIHRoaXMuc2FuZGJveC5zdG9wKCk7CiAgICB9CiAgfTsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9zeXN0ZW0udHMKICB2YXIgU3lzdGVtID0gY2xhc3MgZXh0ZW5kcyBFdmVudEVtaXR0ZXIyIHsKICAgIGNvbnN0cnVjdG9yKGVudjIpIHsKICAgICAgc3VwZXIoKTsKICAgICAgdGhpcy5wbHVncyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIHRoaXMucmVnaXN0ZXJlZFN5c2NhbGxzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgdGhpcy5lbmFibGVkSG9va3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICB0aGlzLnJ1bnRpbWVFbnYgPSBlbnYyOwogICAgfQogICAgZ2V0IGxvYWRlZFBsdWdzKCkgewogICAgICByZXR1cm4gdGhpcy5wbHVnczsKICAgIH0KICAgIGFkZEhvb2soZmVhdHVyZSkgewogICAgICB0aGlzLmVuYWJsZWRIb29rcy5hZGQoZmVhdHVyZSk7CiAgICAgIGZlYXR1cmUuYXBwbHkodGhpcyk7CiAgICB9CiAgICByZWdpc3RlclN5c2NhbGxzKHJlcXVpcmVkQ2FwYWJpbGl0aWVzLCAuLi5yZWdpc3RyYXRpb25PYmplY3RzKSB7CiAgICAgIGZvciAoY29uc3QgcmVnaXN0cmF0aW9uT2JqZWN0IG9mIHJlZ2lzdHJhdGlvbk9iamVjdHMpIHsKICAgICAgICBmb3IgKGxldCBbbmFtZSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKHJlZ2lzdHJhdGlvbk9iamVjdCkpIHsKICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZFN5c2NhbGxzLnNldChuYW1lLCB7CiAgICAgICAgICAgIHJlcXVpcmVkUGVybWlzc2lvbnM6IHJlcXVpcmVkQ2FwYWJpbGl0aWVzLAogICAgICAgICAgICBjYWxsYmFjawogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzeXNjYWxsV2l0aENvbnRleHQoY3R4LCBuYW1lLCBhcmdzKSB7CiAgICAgIGNvbnN0IHN5c2NhbGwgPSB0aGlzLnJlZ2lzdGVyZWRTeXNjYWxscy5nZXQobmFtZSk7CiAgICAgIGlmICghc3lzY2FsbCkgewogICAgICAgIHRocm93IEVycm9yKGBVbnJlZ2lzdGVyZWQgc3lzY2FsbCAke25hbWV9YCk7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIHN5c2NhbGwucmVxdWlyZWRQZXJtaXNzaW9ucykgewogICAgICAgIGlmICghY3R4LnBsdWcpIHsKICAgICAgICAgIHRocm93IEVycm9yKGBTeXNjYWxsICR7bmFtZX0gcmVxdWlyZXMgcGVybWlzc2lvbiBhbmQgbm8gcGx1ZyBpcyBzZXRgKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFjdHgucGx1Zy5ncmFudGVkUGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvbikpIHsKICAgICAgICAgIHRocm93IEVycm9yKGBNaXNzaW5nIHBlcm1pc3Npb24gJyR7cGVybWlzc2lvbn0nIGZvciBzeXNjYWxsICR7bmFtZX1gKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzeXNjYWxsLmNhbGxiYWNrKGN0eCwgLi4uYXJncykpOwogICAgfQogICAgbG9jYWxTeXNjYWxsKGNvbnRleHRQbHVnTmFtZSwgc3lzY2FsbE5hbWUsIGFyZ3MpIHsKICAgICAgcmV0dXJuIHRoaXMuc3lzY2FsbFdpdGhDb250ZXh0KAogICAgICAgIHsgcGx1ZzogeyBuYW1lOiBjb250ZXh0UGx1Z05hbWUgfSB9LAogICAgICAgIHN5c2NhbGxOYW1lLAogICAgICAgIGFyZ3MKICAgICAgKTsKICAgIH0KICAgIGFzeW5jIGxvYWQobWFuaWZlc3QsIHNhbmRib3hGYWN0b3J5KSB7CiAgICAgIGNvbnN0IG5hbWUgPSBtYW5pZmVzdC5uYW1lOwogICAgICBpZiAodGhpcy5wbHVncy5oYXMobmFtZSkpIHsKICAgICAgICBhd2FpdCB0aGlzLnVubG9hZChuYW1lKTsKICAgICAgfQogICAgICBsZXQgZXJyb3JzID0gW107CiAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiB0aGlzLmVuYWJsZWRIb29rcykgewogICAgICAgIGVycm9ycyA9IFsuLi5lcnJvcnMsIC4uLmZlYXR1cmUudmFsaWRhdGVNYW5pZmVzdChtYW5pZmVzdCldOwogICAgICB9CiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtYW5pZmVzdDogJHtlcnJvcnMuam9pbigiLCAiKX1gKTsKICAgICAgfQogICAgICBjb25zdCBwbHVnID0gbmV3IFBsdWcodGhpcywgbmFtZSwgc2FuZGJveEZhY3RvcnkpOwogICAgICBjb25zb2xlLmxvZygiTG9hZGluZyIsIG5hbWUpOwogICAgICBhd2FpdCBwbHVnLmxvYWQobWFuaWZlc3QpOwogICAgICB0aGlzLnBsdWdzLnNldChuYW1lLCBwbHVnKTsKICAgICAgYXdhaXQgdGhpcy5lbWl0KCJwbHVnTG9hZGVkIiwgcGx1Zyk7CiAgICAgIHJldHVybiBwbHVnOwogICAgfQogICAgYXN5bmMgdW5sb2FkKG5hbWUpIHsKICAgICAgY29uc3QgcGx1ZyA9IHRoaXMucGx1Z3MuZ2V0KG5hbWUpOwogICAgICBpZiAoIXBsdWcpIHsKICAgICAgICB0aHJvdyBFcnJvcihgUGx1ZyAke25hbWV9IG5vdCBmb3VuZGApOwogICAgICB9CiAgICAgIGF3YWl0IHBsdWcuc3RvcCgpOwogICAgICB0aGlzLmVtaXQoInBsdWdVbmxvYWRlZCIsIG5hbWUpOwogICAgICB0aGlzLnBsdWdzLmRlbGV0ZShuYW1lKTsKICAgIH0KICAgIHRvSlNPTigpIHsKICAgICAgbGV0IHBsdWdKU09OID0gW107CiAgICAgIGZvciAobGV0IFtuYW1lLCBwbHVnXSBvZiB0aGlzLnBsdWdzKSB7CiAgICAgICAgaWYgKCFwbHVnLm1hbmlmZXN0KSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcGx1Z0pTT04ucHVzaChwbHVnLm1hbmlmZXN0KTsKICAgICAgfQogICAgICByZXR1cm4gcGx1Z0pTT047CiAgICB9CiAgICBhc3luYyByZXBsYWNlQWxsRnJvbUpTT04oanNvbjIsIHNhbmRib3hGYWN0b3J5KSB7CiAgICAgIGF3YWl0IHRoaXMudW5sb2FkQWxsKCk7CiAgICAgIGZvciAobGV0IG1hbmlmZXN0IG9mIGpzb24yKSB7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkKG1hbmlmZXN0LCBzYW5kYm94RmFjdG9yeSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVubG9hZEFsbCgpIHsKICAgICAgcmV0dXJuIFByb21pc2UuYWxsKAogICAgICAgIEFycmF5LmZyb20odGhpcy5wbHVncy5rZXlzKCkpLm1hcCh0aGlzLnVubG9hZC5iaW5kKHRoaXMpKQogICAgICApOwogICAgfQogIH07CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZUA2LjIuMC9kZW5vL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlLmpzCiAgZnVuY3Rpb24gYXQ3KG44LCB0NCkgewogICAgdmFyIGE0ID0gT2JqZWN0LmtleXMobjgpOwogICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsKICAgICAgdmFyIGU1ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuOCk7CiAgICAgIHQ0ICYmIChlNSA9IGU1LmZpbHRlcihmdW5jdGlvbihyMykgewogICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG44LCByMykuZW51bWVyYWJsZTsKICAgICAgfSkpLCBhNC5wdXNoLmFwcGx5KGE0LCBlNSk7CiAgICB9CiAgICByZXR1cm4gYTQ7CiAgfQogIGZ1bmN0aW9uIGMxNChuOCkgewogICAgZm9yICh2YXIgdDQgPSAxOyB0NCA8IGFyZ3VtZW50cy5sZW5ndGg7IHQ0KyspIHsKICAgICAgdmFyIGE0ID0gYXJndW1lbnRzW3Q0XSAhPSBudWxsID8gYXJndW1lbnRzW3Q0XSA6IHt9OwogICAgICB0NCAlIDIgPyBhdDcoT2JqZWN0KGE0KSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbihlNSkgewogICAgICAgIHkxNihuOCwgZTUsIGE0W2U1XSk7CiAgICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuOCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYTQpKSA6IGF0NyhPYmplY3QoYTQpKS5mb3JFYWNoKGZ1bmN0aW9uKGU1KSB7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG44LCBlNSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhNCwgZTUpKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gbjg7CiAgfQogIGZ1bmN0aW9uIGtuMyhuOCkgewogICAgcmV0dXJuIGtuMyA9IHR5cGVvZiBTeW1ib2wgPT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICJzeW1ib2wiID8gZnVuY3Rpb24odDQpIHsKICAgICAgcmV0dXJuIHR5cGVvZiB0NDsKICAgIH0gOiBmdW5jdGlvbih0NCkgewogICAgICByZXR1cm4gdDQgJiYgdHlwZW9mIFN5bWJvbCA9PSAiZnVuY3Rpb24iICYmIHQ0LmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgdDQgIT09IFN5bWJvbC5wcm90b3R5cGUgPyAic3ltYm9sIiA6IHR5cGVvZiB0NDsKICAgIH0sIGtuMyhuOCk7CiAgfQogIGZ1bmN0aW9uIGFhKG44LCB0NCkgewogICAgaWYgKCEobjggaW5zdGFuY2VvZiB0NCkpCiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOwogIH0KICBmdW5jdGlvbiBldDEwKG44LCB0NCkgewogICAgZm9yICh2YXIgYTQgPSAwOyBhNCA8IHQ0Lmxlbmd0aDsgYTQrKykgewogICAgICB2YXIgZTUgPSB0NFthNF07CiAgICAgIGU1LmVudW1lcmFibGUgPSBlNS5lbnVtZXJhYmxlIHx8IGZhbHNlLCBlNS5jb25maWd1cmFibGUgPSB0cnVlLCAidmFsdWUiIGluIGU1ICYmIChlNS53cml0YWJsZSA9IHRydWUpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkobjgsIGU1LmtleSwgZTUpOwogICAgfQogIH0KICBmdW5jdGlvbiBlYShuOCwgdDQsIGE0KSB7CiAgICByZXR1cm4gdDQgJiYgZXQxMChuOC5wcm90b3R5cGUsIHQ0KSwgYTQgJiYgZXQxMChuOCwgYTQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkobjgsICJwcm90b3R5cGUiLCB7IHdyaXRhYmxlOiBmYWxzZSB9KSwgbjg7CiAgfQogIGZ1bmN0aW9uIHkxNihuOCwgdDQsIGE0KSB7CiAgICByZXR1cm4gdDQgaW4gbjggPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobjgsIHQ0LCB7IHZhbHVlOiBhNCwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KSA6IG44W3Q0XSA9IGE0LCBuODsKICB9CiAgZnVuY3Rpb24gV24yKG44LCB0NCkgewogICAgcmV0dXJuIGlhKG44KSB8fCBzYShuOCwgdDQpIHx8IEN0OShuOCwgdDQpIHx8IGxhKCk7CiAgfQogIGZ1bmN0aW9uIG9uNChuOCkgewogICAgcmV0dXJuIHJhKG44KSB8fCBvYShuOCkgfHwgQ3Q5KG44KSB8fCBmYSgpOwogIH0KICBmdW5jdGlvbiByYShuOCkgewogICAgaWYgKEFycmF5LmlzQXJyYXkobjgpKQogICAgICByZXR1cm4gVG4yKG44KTsKICB9CiAgZnVuY3Rpb24gaWEobjgpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KG44KSkKICAgICAgcmV0dXJuIG44OwogIH0KICBmdW5jdGlvbiBvYShuOCkgewogICAgaWYgKHR5cGVvZiBTeW1ib2wgPCAidSIgJiYgbjhbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IG44WyJAQGl0ZXJhdG9yIl0gIT0gbnVsbCkKICAgICAgcmV0dXJuIEFycmF5LmZyb20objgpOwogIH0KICBmdW5jdGlvbiBzYShuOCwgdDQpIHsKICAgIHZhciBhNCA9IG44ID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCA8ICJ1IiAmJiBuOFtTeW1ib2wuaXRlcmF0b3JdIHx8IG44WyJAQGl0ZXJhdG9yIl07CiAgICBpZiAoYTQgIT0gbnVsbCkgewogICAgICB2YXIgZTUgPSBbXSwgcjMgPSB0cnVlLCBvNCA9IGZhbHNlLCBpNCwgczg7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yIChhNCA9IGE0LmNhbGwobjgpOyAhKHIzID0gKGk0ID0gYTQubmV4dCgpKS5kb25lKSAmJiAoZTUucHVzaChpNC52YWx1ZSksICEodDQgJiYgZTUubGVuZ3RoID09PSB0NCkpOyByMyA9IHRydWUpCiAgICAgICAgICA7CiAgICAgIH0gY2F0Y2ggKGYxMSkgewogICAgICAgIG80ID0gdHJ1ZSwgczggPSBmMTE7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICFyMyAmJiBhNC5yZXR1cm4gIT0gbnVsbCAmJiBhNC5yZXR1cm4oKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKG80KQogICAgICAgICAgICB0aHJvdyBzODsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGU1OwogICAgfQogIH0KICBmdW5jdGlvbiBDdDkobjgsIHQ0KSB7CiAgICBpZiAoISFuOCkgewogICAgICBpZiAodHlwZW9mIG44ID09ICJzdHJpbmciKQogICAgICAgIHJldHVybiBUbjIobjgsIHQ0KTsKICAgICAgdmFyIGE0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG44KS5zbGljZSg4LCAtMSk7CiAgICAgIGlmIChhNCA9PT0gIk9iamVjdCIgJiYgbjguY29uc3RydWN0b3IgJiYgKGE0ID0gbjguY29uc3RydWN0b3IubmFtZSksIGE0ID09PSAiTWFwIiB8fCBhNCA9PT0gIlNldCIpCiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20objgpOwogICAgICBpZiAoYTQgPT09ICJBcmd1bWVudHMiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGE0KSkKICAgICAgICByZXR1cm4gVG4yKG44LCB0NCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIFRuMihuOCwgdDQpIHsKICAgICh0NCA9PSBudWxsIHx8IHQ0ID4gbjgubGVuZ3RoKSAmJiAodDQgPSBuOC5sZW5ndGgpOwogICAgZm9yICh2YXIgYTQgPSAwLCBlNSA9IG5ldyBBcnJheSh0NCk7IGE0IDwgdDQ7IGE0KyspCiAgICAgIGU1W2E0XSA9IG44W2E0XTsKICAgIHJldHVybiBlNTsKICB9CiAgZnVuY3Rpb24gZmEoKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApOwogIH0KICBmdW5jdGlvbiBsYSgpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKTsKICB9CiAgdmFyIHJ0MTIgPSBmdW5jdGlvbigpIHsKICB9OwogIHZhciBIbjIgPSB7fTsKICB2YXIgSXQ5ID0ge307CiAgdmFyIE50NiA9IG51bGw7CiAgdmFyIF90MyA9IHsgbWFyazogcnQxMiwgbWVhc3VyZTogcnQxMiB9OwogIHRyeSB7CiAgICB0eXBlb2YgZG9jdW1lbnQgPCAidSIgJiYgKEhuMiA9IHdpbmRvdyksIHR5cGVvZiBkb2N1bWVudCA8ICJ1IiAmJiAoSXQ5ID0gZG9jdW1lbnQpLCB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciA8ICJ1IiAmJiAoTnQ2ID0gTXV0YXRpb25PYnNlcnZlciksIHR5cGVvZiBwZXJmb3JtYW5jZSA8ICJ1IiAmJiAoX3QzID0gcGVyZm9ybWFuY2UpOwogIH0gY2F0Y2ggewogIH0KICB2YXIgY2EgPSBIbjIubmF2aWdhdG9yIHx8IHt9OwogIHZhciBpdDEyID0gY2EudXNlckFnZW50OwogIHZhciBvdDcgPSBpdDEyID09PSB2b2lkIDAgPyAiIiA6IGl0MTI7CiAgdmFyIEQxOCA9IEhuMjsKICB2YXIgYjIxID0gSXQ5OwogIHZhciBzdDkgPSBOdDY7CiAgdmFyIGxuID0gX3QzOwogIHZhciBNZTEwID0gISFEMTguZG9jdW1lbnQ7CiAgdmFyIEwxNyA9ICEhYjIxLmRvY3VtZW50RWxlbWVudCAmJiAhIWIyMS5oZWFkICYmIHR5cGVvZiBiMjEuYWRkRXZlbnRMaXN0ZW5lciA9PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBiMjEuY3JlYXRlRWxlbWVudCA9PSAiZnVuY3Rpb24iOwogIHZhciBUdDkgPSB+b3Q3LmluZGV4T2YoIk1TSUUiKSB8fCB+b3Q3LmluZGV4T2YoIlRyaWRlbnQvIik7CiAgdmFyIGNuOwogIHZhciB1bjsKICB2YXIgbW4yOwogIHZhciBkbjI7CiAgdmFyIHZuMjsKICB2YXIgXzIzID0gIl9fX0ZPTlRfQVdFU09NRV9fXyI7CiAgdmFyIE1uMiA9IDE2OwogIHZhciBNdDQgPSAiZmEiOwogIHZhciBMdDEwID0gInN2Zy1pbmxpbmUtLWZhIjsKICB2YXIgSDE5ID0gImRhdGEtZmEtaTJzdmciOwogIHZhciBMbjIgPSAiZGF0YS1mYS1wc2V1ZG8tZWxlbWVudCI7CiAgdmFyIHVhID0gImRhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZyI7CiAgdmFyIEduMyA9ICJkYXRhLXByZWZpeCI7CiAgdmFyIFhuMiA9ICJkYXRhLWljb24iOwogIHZhciBmdDYgPSAiZm9udGF3ZXNvbWUtaTJzdmciOwogIHZhciBtYSA9ICJhc3luYyI7CiAgdmFyIGRhID0gWyJIVE1MIiwgIkhFQUQiLCAiU1RZTEUiLCAiU0NSSVBUIl07CiAgdmFyIFJ0MTAgPSBmdW5jdGlvbigpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9KCk7CiAgdmFyIGc5ID0gImNsYXNzaWMiOwogIHZhciBoNyA9ICJzaGFycCI7CiAgdmFyIEJuMiA9IFtnOSwgaDddOwogIGZ1bmN0aW9uIHNuNihuOCkgewogICAgcmV0dXJuIG5ldyBQcm94eShuOCwgeyBnZXQ6IGZ1bmN0aW9uKGE0LCBlNSkgewogICAgICByZXR1cm4gZTUgaW4gYTQgPyBhNFtlNV0gOiBhNFtnOV07CiAgICB9IH0pOwogIH0KICB2YXIgbm40ID0gc242KChjbiA9IHt9LCB5MTYoY24sIGc5LCB7IGZhOiAic29saWQiLCBmYXM6ICJzb2xpZCIsICJmYS1zb2xpZCI6ICJzb2xpZCIsIGZhcjogInJlZ3VsYXIiLCAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwgZmFsOiAibGlnaHQiLCAiZmEtbGlnaHQiOiAibGlnaHQiLCBmYXQ6ICJ0aGluIiwgImZhLXRoaW4iOiAidGhpbiIsIGZhZDogImR1b3RvbmUiLCAiZmEtZHVvdG9uZSI6ICJkdW90b25lIiwgZmFiOiAiYnJhbmRzIiwgImZhLWJyYW5kcyI6ICJicmFuZHMiLCBmYWs6ICJraXQiLCAiZmEta2l0IjogImtpdCIgfSksIHkxNihjbiwgaDcsIHsgZmE6ICJzb2xpZCIsIGZhc3M6ICJzb2xpZCIsICJmYS1zb2xpZCI6ICJzb2xpZCIgfSksIGNuKSk7CiAgdmFyIHRuMyA9IHNuNigodW4gPSB7fSwgeTE2KHVuLCBnOSwgeyBzb2xpZDogImZhcyIsIHJlZ3VsYXI6ICJmYXIiLCBsaWdodDogImZhbCIsIHRoaW46ICJmYXQiLCBkdW90b25lOiAiZmFkIiwgYnJhbmRzOiAiZmFiIiwga2l0OiAiZmFrIiB9KSwgeTE2KHVuLCBoNywgeyBzb2xpZDogImZhc3MiIH0pLCB1bikpOwogIHZhciBhbjIgPSBzbjYoKG1uMiA9IHt9LCB5MTYobW4yLCBnOSwgeyBmYWI6ICJmYS1icmFuZHMiLCBmYWQ6ICJmYS1kdW90b25lIiwgZmFrOiAiZmEta2l0IiwgZmFsOiAiZmEtbGlnaHQiLCBmYXI6ICJmYS1yZWd1bGFyIiwgZmFzOiAiZmEtc29saWQiLCBmYXQ6ICJmYS10aGluIiB9KSwgeTE2KG1uMiwgaDcsIHsgZmFzczogImZhLXNvbGlkIiB9KSwgbW4yKSk7CiAgdmFyIHZhID0gc242KChkbjIgPSB7fSwgeTE2KGRuMiwgZzksIHsgImZhLWJyYW5kcyI6ICJmYWIiLCAiZmEtZHVvdG9uZSI6ICJmYWQiLCAiZmEta2l0IjogImZhayIsICJmYS1saWdodCI6ICJmYWwiLCAiZmEtcmVndWxhciI6ICJmYXIiLCAiZmEtc29saWQiOiAiZmFzIiwgImZhLXRoaW4iOiAiZmF0IiB9KSwgeTE2KGRuMiwgaDcsIHsgImZhLXNvbGlkIjogImZhc3MiIH0pLCBkbjIpKTsKICB2YXIgcGEgPSAvZmEoc3xyfGx8dHxkfGJ8a3xzcyk/W1wtXCBdLzsKICB2YXIgRnQ0ID0gImZhLWxheWVycy10ZXh0IjsKICB2YXIgZ2EgPSAvRm9udCA/QXdlc29tZSA/KFs1NiBdKikoU29saWR8UmVndWxhcnxMaWdodHxUaGlufER1b3RvbmV8QnJhbmRzfEZyZWV8UHJvfFNoYXJwfEtpdCk/LiovaTsKICB2YXIgYmEgPSBzbjYoKHZuMiA9IHt9LCB5MTYodm4yLCBnOSwgeyA5MDA6ICJmYXMiLCA0MDA6ICJmYXIiLCBub3JtYWw6ICJmYXIiLCAzMDA6ICJmYWwiLCAxMDA6ICJmYXQiIH0pLCB5MTYodm4yLCBoNywgeyA5MDA6ICJmYXNzIiB9KSwgdm4yKSk7CiAgdmFyIER0OSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF07CiAgdmFyIGhhID0gRHQ5LmNvbmNhdChbMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjBdKTsKICB2YXIgeWEgPSBbImNsYXNzIiwgImRhdGEtcHJlZml4IiwgImRhdGEtaWNvbiIsICJkYXRhLWZhLXRyYW5zZm9ybSIsICJkYXRhLWZhLW1hc2siXTsKICB2YXIgVTI0ID0geyBHUk9VUDogImR1b3RvbmUtZ3JvdXAiLCBTV0FQX09QQUNJVFk6ICJzd2FwLW9wYWNpdHkiLCBQUklNQVJZOiAicHJpbWFyeSIsIFNFQ09OREFSWTogInNlY29uZGFyeSIgfTsKICB2YXIgZW4zID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBPYmplY3Qua2V5cyh0bjNbZzldKS5tYXAoZW4zLmFkZC5iaW5kKGVuMykpOwogIE9iamVjdC5rZXlzKHRuM1toN10pLm1hcChlbjMuYWRkLmJpbmQoZW4zKSk7CiAgdmFyIGthID0gW10uY29uY2F0KEJuMiwgb240KGVuMyksIFsiMnhzIiwgInhzIiwgInNtIiwgImxnIiwgInhsIiwgIjJ4bCIsICJiZWF0IiwgImJvcmRlciIsICJmYWRlIiwgImJlYXQtZmFkZSIsICJib3VuY2UiLCAiZmxpcC1ib3RoIiwgImZsaXAtaG9yaXpvbnRhbCIsICJmbGlwLXZlcnRpY2FsIiwgImZsaXAiLCAiZnciLCAiaW52ZXJzZSIsICJsYXllcnMtY291bnRlciIsICJsYXllcnMtdGV4dCIsICJsYXllcnMiLCAibGkiLCAicHVsbC1sZWZ0IiwgInB1bGwtcmlnaHQiLCAicHVsc2UiLCAicm90YXRlLTE4MCIsICJyb3RhdGUtMjcwIiwgInJvdGF0ZS05MCIsICJyb3RhdGUtYnkiLCAic2hha2UiLCAic3Bpbi1wdWxzZSIsICJzcGluLXJldmVyc2UiLCAic3BpbiIsICJzdGFjay0xeCIsICJzdGFjay0yeCIsICJzdGFjayIsICJ1bCIsIFUyNC5HUk9VUCwgVTI0LlNXQVBfT1BBQ0lUWSwgVTI0LlBSSU1BUlksIFUyNC5TRUNPTkRBUlldKS5jb25jYXQoRHQ5Lm1hcChmdW5jdGlvbihuOCkgewogICAgcmV0dXJuICIiLmNvbmNhdChuOCwgIngiKTsKICB9KSkuY29uY2F0KGhhLm1hcChmdW5jdGlvbihuOCkgewogICAgcmV0dXJuICJ3LSIuY29uY2F0KG44KTsKICB9KSk7CiAgdmFyIEoxMCA9IEQxOC5Gb250QXdlc29tZUNvbmZpZyB8fCB7fTsKICBmdW5jdGlvbiB3YShuOCkgewogICAgdmFyIHQ0ID0gYjIxLnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFsiICsgbjggKyAiXSIpOwogICAgaWYgKHQ0KQogICAgICByZXR1cm4gdDQuZ2V0QXR0cmlidXRlKG44KTsKICB9CiAgZnVuY3Rpb24geGEobjgpIHsKICAgIHJldHVybiBuOCA9PT0gIiIgPyB0cnVlIDogbjggPT09ICJmYWxzZSIgPyBmYWxzZSA6IG44ID09PSAidHJ1ZSIgPyB0cnVlIDogbjg7CiAgfQogIGIyMSAmJiB0eXBlb2YgYjIxLnF1ZXJ5U2VsZWN0b3IgPT0gImZ1bmN0aW9uIiAmJiAobHQ4ID0gW1siZGF0YS1mYW1pbHktcHJlZml4IiwgImZhbWlseVByZWZpeCJdLCBbImRhdGEtY3NzLXByZWZpeCIsICJjc3NQcmVmaXgiXSwgWyJkYXRhLWZhbWlseS1kZWZhdWx0IiwgImZhbWlseURlZmF1bHQiXSwgWyJkYXRhLXN0eWxlLWRlZmF1bHQiLCAic3R5bGVEZWZhdWx0Il0sIFsiZGF0YS1yZXBsYWNlbWVudC1jbGFzcyIsICJyZXBsYWNlbWVudENsYXNzIl0sIFsiZGF0YS1hdXRvLXJlcGxhY2Utc3ZnIiwgImF1dG9SZXBsYWNlU3ZnIl0sIFsiZGF0YS1hdXRvLWFkZC1jc3MiLCAiYXV0b0FkZENzcyJdLCBbImRhdGEtYXV0by1hMTF5IiwgImF1dG9BMTF5Il0sIFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzIiwgInNlYXJjaFBzZXVkb0VsZW1lbnRzIl0sIFsiZGF0YS1vYnNlcnZlLW11dGF0aW9ucyIsICJvYnNlcnZlTXV0YXRpb25zIl0sIFsiZGF0YS1tdXRhdGUtYXBwcm9hY2giLCAibXV0YXRlQXBwcm9hY2giXSwgWyJkYXRhLWtlZXAtb3JpZ2luYWwtc291cmNlIiwgImtlZXBPcmlnaW5hbFNvdXJjZSJdLCBbImRhdGEtbWVhc3VyZS1wZXJmb3JtYW5jZSIsICJtZWFzdXJlUGVyZm9ybWFuY2UiXSwgWyJkYXRhLXNob3ctbWlzc2luZy1pY29ucyIsICJzaG93TWlzc2luZ0ljb25zIl1dLCBsdDguZm9yRWFjaChmdW5jdGlvbihuOCkgewogICAgdmFyIHQ0ID0gV24yKG44LCAyKSwgYTQgPSB0NFswXSwgZTUgPSB0NFsxXSwgcjMgPSB4YSh3YShhNCkpOwogICAgcjMgIT0gbnVsbCAmJiAoSjEwW2U1XSA9IHIzKTsKICB9KSk7CiAgdmFyIGx0ODsKICB2YXIgenQ4ID0geyBzdHlsZURlZmF1bHQ6ICJzb2xpZCIsIGZhbWlseURlZmF1bHQ6ICJjbGFzc2ljIiwgY3NzUHJlZml4OiBNdDQsIHJlcGxhY2VtZW50Q2xhc3M6IEx0MTAsIGF1dG9SZXBsYWNlU3ZnOiB0cnVlLCBhdXRvQWRkQ3NzOiB0cnVlLCBhdXRvQTExeTogdHJ1ZSwgc2VhcmNoUHNldWRvRWxlbWVudHM6IGZhbHNlLCBvYnNlcnZlTXV0YXRpb25zOiB0cnVlLCBtdXRhdGVBcHByb2FjaDogImFzeW5jIiwga2VlcE9yaWdpbmFsU291cmNlOiB0cnVlLCBtZWFzdXJlUGVyZm9ybWFuY2U6IGZhbHNlLCBzaG93TWlzc2luZ0ljb25zOiB0cnVlIH07CiAgSjEwLmZhbWlseVByZWZpeCAmJiAoSjEwLmNzc1ByZWZpeCA9IEoxMC5mYW1pbHlQcmVmaXgpOwogIHZhciBxMTYgPSBjMTQoYzE0KHt9LCB6dDgpLCBKMTApOwogIHExNi5hdXRvUmVwbGFjZVN2ZyB8fCAocTE2Lm9ic2VydmVNdXRhdGlvbnMgPSBmYWxzZSk7CiAgdmFyIG0yMSA9IHt9OwogIE9iamVjdC5rZXlzKHp0OCkuZm9yRWFjaChmdW5jdGlvbihuOCkgewogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG0yMSwgbjgsIHsgZW51bWVyYWJsZTogdHJ1ZSwgc2V0OiBmdW5jdGlvbihhNCkgewogICAgICBxMTZbbjhdID0gYTQsIFoxOS5mb3JFYWNoKGZ1bmN0aW9uKGU1KSB7CiAgICAgICAgcmV0dXJuIGU1KG0yMSk7CiAgICAgIH0pOwogICAgfSwgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHExNltuOF07CiAgICB9IH0pOwogIH0pOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtMjEsICJmYW1pbHlQcmVmaXgiLCB7IGVudW1lcmFibGU6IHRydWUsIHNldDogZnVuY3Rpb24odDQpIHsKICAgIHExNi5jc3NQcmVmaXggPSB0NCwgWjE5LmZvckVhY2goZnVuY3Rpb24oYTQpIHsKICAgICAgcmV0dXJuIGE0KG0yMSk7CiAgICB9KTsKICB9LCBnZXQ6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHExNi5jc3NQcmVmaXg7CiAgfSB9KTsKICBEMTguRm9udEF3ZXNvbWVDb25maWcgPSBtMjE7CiAgdmFyIFoxOSA9IFtdOwogIGZ1bmN0aW9uIEFhKG44KSB7CiAgICByZXR1cm4gWjE5LnB1c2gobjgpLCBmdW5jdGlvbigpIHsKICAgICAgWjE5LnNwbGljZShaMTkuaW5kZXhPZihuOCksIDEpOwogICAgfTsKICB9CiAgdmFyIEYxOSA9IE1uMjsKICB2YXIgTjE0ID0geyBzaXplOiAxNiwgeDogMCwgeTogMCwgcm90YXRlOiAwLCBmbGlwWDogZmFsc2UsIGZsaXBZOiBmYWxzZSB9OwogIGZ1bmN0aW9uIFNhKG44KSB7CiAgICBpZiAoISghbjggfHwgIUwxNykpIHsKICAgICAgdmFyIHQ0ID0gYjIxLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgIHQ0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L2NzcyIpLCB0NC5pbm5lckhUTUwgPSBuODsKICAgICAgZm9yICh2YXIgYTQgPSBiMjEuaGVhZC5jaGlsZE5vZGVzLCBlNSA9IG51bGwsIHIzID0gYTQubGVuZ3RoIC0gMTsgcjMgPiAtMTsgcjMtLSkgewogICAgICAgIHZhciBvNCA9IGE0W3IzXSwgaTQgPSAobzQudGFnTmFtZSB8fCAiIikudG9VcHBlckNhc2UoKTsKICAgICAgICBbIlNUWUxFIiwgIkxJTksiXS5pbmRleE9mKGk0KSA+IC0xICYmIChlNSA9IG80KTsKICAgICAgfQogICAgICByZXR1cm4gYjIxLmhlYWQuaW5zZXJ0QmVmb3JlKHQ0LCBlNSksIG44OwogICAgfQogIH0KICB2YXIgRWEgPSAiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOwogIGZ1bmN0aW9uIHJuMygpIHsKICAgIGZvciAodmFyIG44ID0gMTIsIHQ0ID0gIiI7IG44LS0gPiAwOyApCiAgICAgIHQ0ICs9IEVhW01hdGgucmFuZG9tKCkgKiA2MiB8IDBdOwogICAgcmV0dXJuIHQ0OwogIH0KICBmdW5jdGlvbiBLMTYobjgpIHsKICAgIGZvciAodmFyIHQ0ID0gW10sIGE0ID0gKG44IHx8IFtdKS5sZW5ndGggPj4+IDA7IGE0LS07ICkKICAgICAgdDRbYTRdID0gbjhbYTRdOwogICAgcmV0dXJuIHQ0OwogIH0KICBmdW5jdGlvbiBWbjIobjgpIHsKICAgIHJldHVybiBuOC5jbGFzc0xpc3QgPyBLMTYobjguY2xhc3NMaXN0KSA6IChuOC5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIpLnNwbGl0KCIgIikuZmlsdGVyKGZ1bmN0aW9uKHQ0KSB7CiAgICAgIHJldHVybiB0NDsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBqdDMobjgpIHsKICAgIHJldHVybiAiIi5jb25jYXQobjgpLnJlcGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvIi9nLCAiJnF1b3Q7IikucmVwbGFjZSgvJy9nLCAiJiMzOTsiKS5yZXBsYWNlKC88L2csICImbHQ7IikucmVwbGFjZSgvPi9nLCAiJmd0OyIpOwogIH0KICBmdW5jdGlvbiBPYShuOCkgewogICAgcmV0dXJuIE9iamVjdC5rZXlzKG44IHx8IHt9KS5yZWR1Y2UoZnVuY3Rpb24odDQsIGE0KSB7CiAgICAgIHJldHVybiB0NCArICIiLmNvbmNhdChhNCwgJz0iJykuY29uY2F0KGp0MyhuOFthNF0pLCAnIiAnKTsKICAgIH0sICIiKS50cmltKCk7CiAgfQogIGZ1bmN0aW9uIEFuMihuOCkgewogICAgcmV0dXJuIE9iamVjdC5rZXlzKG44IHx8IHt9KS5yZWR1Y2UoZnVuY3Rpb24odDQsIGE0KSB7CiAgICAgIHJldHVybiB0NCArICIiLmNvbmNhdChhNCwgIjogIikuY29uY2F0KG44W2E0XS50cmltKCksICI7Iik7CiAgICB9LCAiIik7CiAgfQogIGZ1bmN0aW9uIHFuMihuOCkgewogICAgcmV0dXJuIG44LnNpemUgIT09IE4xNC5zaXplIHx8IG44LnggIT09IE4xNC54IHx8IG44LnkgIT09IE4xNC55IHx8IG44LnJvdGF0ZSAhPT0gTjE0LnJvdGF0ZSB8fCBuOC5mbGlwWCB8fCBuOC5mbGlwWTsKICB9CiAgZnVuY3Rpb24gUGEobjgpIHsKICAgIHZhciB0NCA9IG44LnRyYW5zZm9ybSwgYTQgPSBuOC5jb250YWluZXJXaWR0aCwgZTUgPSBuOC5pY29uV2lkdGgsIHIzID0geyB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQoYTQgLyAyLCAiIDI1NikiKSB9LCBvNCA9ICJ0cmFuc2xhdGUoIi5jb25jYXQodDQueCAqIDMyLCAiLCAiKS5jb25jYXQodDQueSAqIDMyLCAiKSAiKSwgaTQgPSAic2NhbGUoIi5jb25jYXQodDQuc2l6ZSAvIDE2ICogKHQ0LmZsaXBYID8gLTEgOiAxKSwgIiwgIikuY29uY2F0KHQ0LnNpemUgLyAxNiAqICh0NC5mbGlwWSA/IC0xIDogMSksICIpICIpLCBzOCA9ICJyb3RhdGUoIi5jb25jYXQodDQucm90YXRlLCAiIDAgMCkiKSwgZjExID0geyB0cmFuc2Zvcm06ICIiLmNvbmNhdChvNCwgIiAiKS5jb25jYXQoaTQsICIgIikuY29uY2F0KHM4KSB9LCB1MTEgPSB7IHRyYW5zZm9ybTogInRyYW5zbGF0ZSgiLmNvbmNhdChlNSAvIDIgKiAtMSwgIiAtMjU2KSIpIH07CiAgICByZXR1cm4geyBvdXRlcjogcjMsIGlubmVyOiBmMTEsIHBhdGg6IHUxMSB9OwogIH0KICBmdW5jdGlvbiBDYShuOCkgewogICAgdmFyIHQ0ID0gbjgudHJhbnNmb3JtLCBhNCA9IG44LndpZHRoLCBlNSA9IGE0ID09PSB2b2lkIDAgPyBNbjIgOiBhNCwgcjMgPSBuOC5oZWlnaHQsIG80ID0gcjMgPT09IHZvaWQgMCA/IE1uMiA6IHIzLCBpNCA9IG44LnN0YXJ0Q2VudGVyZWQsIHM4ID0gaTQgPT09IHZvaWQgMCA/IGZhbHNlIDogaTQsIGYxMSA9ICIiOwogICAgcmV0dXJuIHM4ICYmIFR0OSA/IGYxMSArPSAidHJhbnNsYXRlKCIuY29uY2F0KHQ0LnggLyBGMTkgLSBlNSAvIDIsICJlbSwgIikuY29uY2F0KHQ0LnkgLyBGMTkgLSBvNCAvIDIsICJlbSkgIikgOiBzOCA/IGYxMSArPSAidHJhbnNsYXRlKGNhbGMoLTUwJSArICIuY29uY2F0KHQ0LnggLyBGMTksICJlbSksIGNhbGMoLTUwJSArICIpLmNvbmNhdCh0NC55IC8gRjE5LCAiZW0pKSAiKSA6IGYxMSArPSAidHJhbnNsYXRlKCIuY29uY2F0KHQ0LnggLyBGMTksICJlbSwgIikuY29uY2F0KHQ0LnkgLyBGMTksICJlbSkgIiksIGYxMSArPSAic2NhbGUoIi5jb25jYXQodDQuc2l6ZSAvIEYxOSAqICh0NC5mbGlwWCA/IC0xIDogMSksICIsICIpLmNvbmNhdCh0NC5zaXplIC8gRjE5ICogKHQ0LmZsaXBZID8gLTEgOiAxKSwgIikgIiksIGYxMSArPSAicm90YXRlKCIuY29uY2F0KHQ0LnJvdGF0ZSwgImRlZykgIiksIGYxMTsKICB9CiAgdmFyIElhID0gYDpyb290LCA6aG9zdCB7CiAgLS1mYS1mb250LXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNiBTb2xpZCI7CiAgLS1mYS1mb250LXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA2IFJlZ3VsYXIiOwogIC0tZmEtZm9udC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDYgTGlnaHQiOwogIC0tZmEtZm9udC10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNiBUaGluIjsKICAtLWZhLWZvbnQtZHVvdG9uZTogbm9ybWFsIDkwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDYgRHVvdG9uZSI7CiAgLS1mYS1mb250LXNoYXJwLXNvbGlkOiBub3JtYWwgOTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNiBTaGFycCI7CiAgLS1mYS1mb250LWJyYW5kczogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDYgQnJhbmRzIjsKfQoKc3ZnOm5vdCg6cm9vdCkuc3ZnLWlubGluZS0tZmEsIHN2Zzpub3QoOmhvc3QpLnN2Zy1pbmxpbmUtLWZhIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKfQoKLnN2Zy1pbmxpbmUtLWZhIHsKICBkaXNwbGF5OiB2YXIoLS1mYS1kaXNwbGF5LCBpbmxpbmUtYmxvY2spOwogIGhlaWdodDogMWVtOwogIG92ZXJmbG93OiB2aXNpYmxlOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtMnhzIHsKICB2ZXJ0aWNhbC1hbGlnbjogMC4xZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXhzIHsKICB2ZXJ0aWNhbC1hbGlnbjogMGVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1zbSB7CiAgdmVydGljYWwtYWxpZ246IC0wLjA3MTQyODU3MDVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtbGcgewogIHZlcnRpY2FsLWFsaWduOiAtMC4yZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXhsIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtMnhsIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMzEyNWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS1wdWxsLWxlZnQgewogIG1hcmdpbi1yaWdodDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTsKICB3aWR0aDogYXV0bzsKfQouc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1yaWdodCB7CiAgbWFyZ2luLWxlZnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7CiAgd2lkdGg6IGF1dG87Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgdG9wOiAwLjI1ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWZ3IHsKICB3aWR0aDogdmFyKC0tZmEtZnctd2lkdGgsIDEuMjVlbSk7Cn0KCi5mYS1sYXllcnMgc3ZnLnN2Zy1pbmxpbmUtLWZhIHsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICBtYXJnaW46IGF1dG87CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAwOwogIHRvcDogMDsKfQoKLmZhLWxheWVycy1jb3VudGVyLCAuZmEtbGF5ZXJzLXRleHQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouZmEtbGF5ZXJzIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAxZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07CiAgd2lkdGg6IDFlbTsKfQouZmEtbGF5ZXJzIHN2Zy5zdmctaW5saW5lLS1mYSB7CiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKfQoKLmZhLWxheWVycy10ZXh0IHsKICBsZWZ0OiA1MCU7CiAgdG9wOiA1MCU7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7Cn0KCi5mYS1sYXllcnMtY291bnRlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmEtY291bnRlci1iYWNrZ3JvdW5kLWNvbG9yLCAjZmYyNTNhKTsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1jb3VudGVyLWJvcmRlci1yYWRpdXMsIDFlbSk7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7CiAgbGluZS1oZWlnaHQ6IHZhcigtLWZhLWNvdW50ZXItbGluZS1oZWlnaHQsIDEpOwogIG1heC13aWR0aDogdmFyKC0tZmEtY291bnRlci1tYXgtd2lkdGgsIDVlbSk7CiAgbWluLXdpZHRoOiB2YXIoLS1mYS1jb3VudGVyLW1pbi13aWR0aCwgMS41ZW0pOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogdmFyKC0tZmEtY291bnRlci1wYWRkaW5nLCAwLjI1ZW0gMC41ZW0pOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1jb3VudGVyLXNjYWxlLCAwLjI1KSk7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTsKICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKfQoKLmZhLWxheWVycy1ib3R0b20tcmlnaHQgewogIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRvcDogYXV0bzsKICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIHJpZ2h0OwogICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLWJvdHRvbS1sZWZ0IHsKICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7CiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7CiAgcmlnaHQ6IGF1dG87CiAgdG9wOiBhdXRvOwogIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDsKICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSBsZWZ0Owp9CgouZmEtbGF5ZXJzLXRvcC1yaWdodCB7CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIHJpZ2h0OiB2YXIoLS1mYS1yaWdodCwgMCk7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKfQoKLmZhLWxheWVycy10b3AtbGVmdCB7CiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7CiAgcmlnaHQ6IGF1dG87CiAgdG9wOiB2YXIoLS1mYS10b3AsIDApOwogIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0Owp9CgouZmEtMXggewogIGZvbnQtc2l6ZTogMWVtOwp9CgouZmEtMnggewogIGZvbnQtc2l6ZTogMmVtOwp9CgouZmEtM3ggewogIGZvbnQtc2l6ZTogM2VtOwp9CgouZmEtNHggewogIGZvbnQtc2l6ZTogNGVtOwp9CgouZmEtNXggewogIGZvbnQtc2l6ZTogNWVtOwp9CgouZmEtNnggewogIGZvbnQtc2l6ZTogNmVtOwp9CgouZmEtN3ggewogIGZvbnQtc2l6ZTogN2VtOwp9CgouZmEtOHggewogIGZvbnQtc2l6ZTogOGVtOwp9CgouZmEtOXggewogIGZvbnQtc2l6ZTogOWVtOwp9CgouZmEtMTB4IHsKICBmb250LXNpemU6IDEwZW07Cn0KCi5mYS0yeHMgewogIGZvbnQtc2l6ZTogMC42MjVlbTsKICBsaW5lLWhlaWdodDogMC4xZW07CiAgdmVydGljYWwtYWxpZ246IDAuMjI1ZW07Cn0KCi5mYS14cyB7CiAgZm9udC1zaXplOiAwLjc1ZW07CiAgbGluZS1oZWlnaHQ6IDAuMDgzMzMzMzMzN2VtOwogIHZlcnRpY2FsLWFsaWduOiAwLjEyNWVtOwp9CgouZmEtc20gewogIGZvbnQtc2l6ZTogMC44NzVlbTsKICBsaW5lLWhlaWdodDogMC4wNzE0Mjg1NzE4ZW07CiAgdmVydGljYWwtYWxpZ246IDAuMDUzNTcxNDI5NWVtOwp9CgouZmEtbGcgewogIGZvbnQtc2l6ZTogMS4yNWVtOwogIGxpbmUtaGVpZ2h0OiAwLjA1ZW07CiAgdmVydGljYWwtYWxpZ246IC0wLjA3NWVtOwp9CgouZmEteGwgewogIGZvbnQtc2l6ZTogMS41ZW07CiAgbGluZS1oZWlnaHQ6IDAuMDQxNjY2NjY4MmVtOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKfQoKLmZhLTJ4bCB7CiAgZm9udC1zaXplOiAyZW07CiAgbGluZS1oZWlnaHQ6IDAuMDMxMjVlbTsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTg3NWVtOwp9CgouZmEtZncgewogIHRleHQtYWxpZ246IGNlbnRlcjsKICB3aWR0aDogMS4yNWVtOwp9CgouZmEtdWwgewogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICBtYXJnaW4tbGVmdDogdmFyKC0tZmEtbGktbWFyZ2luLCAyLjVlbSk7CiAgcGFkZGluZy1sZWZ0OiAwOwp9Ci5mYS11bCA+IGxpIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5mYS1saSB7CiAgbGVmdDogY2FsYyh2YXIoLS1mYS1saS13aWR0aCwgMmVtKSAqIC0xKTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTsKICBsaW5lLWhlaWdodDogaW5oZXJpdDsKfQoKLmZhLWJvcmRlciB7CiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1mYS1ib3JkZXItY29sb3IsICNlZWUpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWZhLWJvcmRlci1yYWRpdXMsIDAuMWVtKTsKICBib3JkZXItc3R5bGU6IHZhcigtLWZhLWJvcmRlci1zdHlsZSwgc29saWQpOwogIGJvcmRlci13aWR0aDogdmFyKC0tZmEtYm9yZGVyLXdpZHRoLCAwLjA4ZW0pOwogIHBhZGRpbmc6IHZhcigtLWZhLWJvcmRlci1wYWRkaW5nLCAwLjJlbSAwLjI1ZW0gMC4xNWVtKTsKfQoKLmZhLXB1bGwtbGVmdCB7CiAgZmxvYXQ6IGxlZnQ7CiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9CgouZmEtcHVsbC1yaWdodCB7CiAgZmxvYXQ6IHJpZ2h0OwogIG1hcmdpbi1sZWZ0OiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9CgouZmEtYmVhdCB7CiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtYmVhdDsKICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0OwogIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtYm91bmNlIHsKICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1ib3VuY2U7CiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtYm91bmNlOwogIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuMjgsIDAuODQsIDAuNDIsIDEpKTsKICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjI4LCAwLjg0LCAwLjQyLCAxKSk7Cn0KCi5mYS1mYWRlIHsKICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1mYWRlOwogICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhLWZhZGU7CiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpKTsKICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpOwp9CgouZmEtYmVhdC1mYWRlIHsKICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0LWZhZGU7CiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtYmVhdC1mYWRlOwogIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7CiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpKTsKfQoKLmZhLWZsaXAgewogIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7CiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtZmxpcDsKICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICAgICAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKfQoKLmZhLXNoYWtlIHsKICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTsKICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTsKICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICAgICAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7CiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpOwp9CgouZmEtc3BpbiB7CiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluOwogIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAycyk7CiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMnMpOwogIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7Cn0KCi5mYS1zcGluLXJldmVyc2UgewogIC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTsKfQoKLmZhLXB1bHNlLAouZmEtc3Bpbi1wdWxzZSB7CiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtc3BpbjsKICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluOwogIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICAgICAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTsKICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIHN0ZXBzKDgpKTsKfQoKQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAuZmEtYmVhdCwKLmZhLWJvdW5jZSwKLmZhLWZhZGUsCi5mYS1iZWF0LWZhZGUsCi5mYS1mbGlwLAouZmEtcHVsc2UsCi5mYS1zaGFrZSwKLmZhLXNwaW4sCi5mYS1zcGluLXB1bHNlIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAtMW1zOwogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0xbXM7CiAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMW1zOwogICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDFtczsKICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzOwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMHM7CiAgfQp9CkAtd2Via2l0LWtleWZyYW1lcyBmYS1iZWF0IHsKICAwJSwgOTAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9CiAgNDUlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1zY2FsZSwgMS4yNSkpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJlYXQgewogIDAlLCA5MCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KICA0NSUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtc2NhbGUsIDEuMjUpKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSk7CiAgfQp9CkAtd2Via2l0LWtleWZyYW1lcyBmYS1ib3VuY2UgewogIDAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDEwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXgsIDEuMSksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjkpKSB0cmFuc2xhdGVZKDApOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS14LCAxLjEpLCB2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteSwgMC45KSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgMzAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS14LCAwLjkpLCB2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS15LCAxLjEpKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1oZWlnaHQsIC0wLjVlbSkpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXgsIDAuOSksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMSkpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLWhlaWdodCwgLTAuNWVtKSk7CiAgfQogIDUwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteCwgMS4wNSksIHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXksIDAuOTUpKSB0cmFuc2xhdGVZKDApOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDUpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjk1KSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgNTclIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLXJlYm91bmQsIC0wLjEyNWVtKSk7CiAgfQogIDY0JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KICAxMDAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtYm91bmNlIHsKICAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KICAxMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS14LCAxLjEpLCB2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteSwgMC45KSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4xKSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOSkpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDMwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45KSwgdmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteSwgMS4xKSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAtMC41ZW0pKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS14LCAwLjkpLCB2YXIoLS1mYS1ib3VuY2UtanVtcC1zY2FsZS15LCAxLjEpKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1oZWlnaHQsIC0wLjVlbSkpOwogIH0KICA1MCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDUpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjk1KSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS14LCAxLjA1KSwgdmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteSwgMC45NSkpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDU3JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtcmVib3VuZCwgLTAuMTI1ZW0pKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpOwogIH0KICA2NCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgMTAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KfQpALXdlYmtpdC1rZXlmcmFtZXMgZmEtZmFkZSB7CiAgNTAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mYWRlIHsKICA1MCUgewogICAgb3BhY2l0eTogdmFyKC0tZmEtZmFkZS1vcGFjaXR5LCAwLjQpOwogIH0KfQpALXdlYmtpdC1rZXlmcmFtZXMgZmEtYmVhdC1mYWRlIHsKICAwJSwgMTAwJSB7CiAgICBvcGFjaXR5OiB2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9CiAgNTAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1mYWRlLXNjYWxlLCAxLjEyNSkpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4xMjUpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1iZWF0LWZhZGUgewogIDAlLCAxMDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpOwogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KICA1MCUgewogICAgb3BhY2l0eTogMTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMTI1KSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1mYWRlLXNjYWxlLCAxLjEyNSkpOwogIH0KfQpALXdlYmtpdC1rZXlmcmFtZXMgZmEtZmxpcCB7CiAgNTAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgdmFyKC0tZmEtZmxpcC1hbmdsZSwgLTE4MGRlZykpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWZsaXAgewogIDUwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgdmFyKC0tZmEtZmxpcC1hbmdsZSwgLTE4MGRlZykpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIHZhcigtLWZhLWZsaXAtYW5nbGUsIC0xODBkZWcpKTsKICB9Cn0KQC13ZWJraXQta2V5ZnJhbWVzIGZhLXNoYWtlIHsKICAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xNWRlZyk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xNWRlZyk7CiAgfQogIDQlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTVkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNWRlZyk7CiAgfQogIDglLCAyNCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMThkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMThkZWcpOwogIH0KICAxMiUsIDI4JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE4ZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMThkZWcpOwogIH0KICAxNiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpOwogIH0KICAyMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgyMmRlZyk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTsKICB9CiAgMzIlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEyZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTEyZGVnKTsKICB9CiAgMzYlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTJkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMmRlZyk7CiAgfQogIDQwJSwgMTAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1zaGFrZSB7CiAgMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpOwogIH0KICA0JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTVkZWcpOwogIH0KICA4JSwgMjQlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTE4ZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTE4ZGVnKTsKICB9CiAgMTIlLCAyOCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxOGRlZyk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4ZGVnKTsKICB9CiAgMTYlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTsKICB9CiAgMjAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMjJkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyMmRlZyk7CiAgfQogIDMyJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7CiAgfQogIDM2JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTJkZWcpOwogIH0KICA0MCUsIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQp9CkAtd2Via2l0LWtleWZyYW1lcyBmYS1zcGluIHsKICAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc3BpbiB7CiAgMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQouZmEtcm90YXRlLTkwIHsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQoKLmZhLXJvdGF0ZS0xODAgewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMjcwIHsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwp9CgouZmEtZmxpcC1ob3Jpem9udGFsIHsKICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoLTEsIDEpOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7Cn0KCi5mYS1mbGlwLXZlcnRpY2FsIHsKICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgLTEpOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAtMSk7Cn0KCi5mYS1mbGlwLWJvdGgsCi5mYS1mbGlwLWhvcml6b250YWwuZmEtZmxpcC12ZXJ0aWNhbCB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAtMSk7Cn0KCi5mYS1yb3RhdGUtYnkgewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCBub25lKSk7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSh2YXIoLS1mYS1yb3RhdGUtYW5nbGUsIG5vbmUpKTsKfQoKLmZhLXN0YWNrIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICBoZWlnaHQ6IDJlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgd2lkdGg6IDIuNWVtOwp9CgouZmEtc3RhY2stMXgsCi5mYS1zdGFjay0yeCB7CiAgYm90dG9tOiAwOwogIGxlZnQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogMDsKICB0b3A6IDA7CiAgei1pbmRleDogdmFyKC0tZmEtc3RhY2stei1pbmRleCwgYXV0byk7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0xeCB7CiAgaGVpZ2h0OiAxZW07CiAgd2lkdGg6IDEuMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMnggewogIGhlaWdodDogMmVtOwogIHdpZHRoOiAyLjVlbTsKfQoKLmZhLWludmVyc2UgewogIGNvbG9yOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTsKfQoKLnNyLW9ubHksCi5mYS1zci1vbmx5IHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDFweDsKICBoZWlnaHQ6IDFweDsKICBwYWRkaW5nOiAwOwogIG1hcmdpbjogLTFweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBib3JkZXItd2lkdGg6IDA7Cn0KCi5zci1vbmx5LWZvY3VzYWJsZTpub3QoOmZvY3VzKSwKLmZhLXNyLW9ubHktZm9jdXNhYmxlOm5vdCg6Zm9jdXMpIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDFweDsKICBoZWlnaHQ6IDFweDsKICBwYWRkaW5nOiAwOwogIG1hcmdpbjogLTFweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBib3JkZXItd2lkdGg6IDA7Cn0KCi5zdmctaW5saW5lLS1mYSAuZmEtcHJpbWFyeSB7CiAgZmlsbDogdmFyKC0tZmEtcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXNlY29uZGFyeSB7CiAgZmlsbDogdmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpOwogIG9wYWNpdHk6IHZhcigtLWZhLXNlY29uZGFyeS1vcGFjaXR5LCAwLjQpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3dhcC1vcGFjaXR5IC5mYS1wcmltYXJ5IHsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtc2Vjb25kYXJ5IHsKICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpOwp9Cgouc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtcHJpbWFyeSwKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeSB7CiAgZmlsbDogYmxhY2s7Cn0KCi5mYWQuZmEtaW52ZXJzZSwKLmZhLWR1b3RvbmUuZmEtaW52ZXJzZSB7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwp9YDsKICBmdW5jdGlvbiBZdDQoKSB7CiAgICB2YXIgbjggPSBNdDQsIHQ0ID0gTHQxMCwgYTQgPSBtMjEuY3NzUHJlZml4LCBlNSA9IG0yMS5yZXBsYWNlbWVudENsYXNzLCByMyA9IElhOwogICAgaWYgKGE0ICE9PSBuOCB8fCBlNSAhPT0gdDQpIHsKICAgICAgdmFyIG80ID0gbmV3IFJlZ0V4cCgiXFwuIi5jb25jYXQobjgsICJcXC0iKSwgImciKSwgaTQgPSBuZXcgUmVnRXhwKCJcXC0tIi5jb25jYXQobjgsICJcXC0iKSwgImciKSwgczggPSBuZXcgUmVnRXhwKCJcXC4iLmNvbmNhdCh0NCksICJnIik7CiAgICAgIHIzID0gcjMucmVwbGFjZShvNCwgIi4iLmNvbmNhdChhNCwgIi0iKSkucmVwbGFjZShpNCwgIi0tIi5jb25jYXQoYTQsICItIikpLnJlcGxhY2UoczgsICIuIi5jb25jYXQoZTUpKTsKICAgIH0KICAgIHJldHVybiByMzsKICB9CiAgdmFyIGN0MTAgPSBmYWxzZTsKICBmdW5jdGlvbiBDbjIoKSB7CiAgICBtMjEuYXV0b0FkZENzcyAmJiAhY3QxMCAmJiAoU2EoWXQ0KCkpLCBjdDEwID0gdHJ1ZSk7CiAgfQogIHZhciBOYSA9IHsgbWl4b3V0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB7IGRvbTogeyBjc3M6IFl0NCwgaW5zZXJ0Q3NzOiBDbjIgfSB9OwogIH0sIGhvb2tzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB7IGJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgIENuMigpOwogICAgfSwgYmVmb3JlSTJzdmc6IGZ1bmN0aW9uKCkgewogICAgICBDbjIoKTsKICAgIH0gfTsKICB9IH07CiAgdmFyIFQyNiA9IEQxOCB8fCB7fTsKICBUMjZbXzIzXSB8fCAoVDI2W18yM10gPSB7fSk7CiAgVDI2W18yM10uc3R5bGVzIHx8IChUMjZbXzIzXS5zdHlsZXMgPSB7fSk7CiAgVDI2W18yM10uaG9va3MgfHwgKFQyNltfMjNdLmhvb2tzID0ge30pOwogIFQyNltfMjNdLnNoaW1zIHx8IChUMjZbXzIzXS5zaGltcyA9IFtdKTsKICB2YXIgUDI0ID0gVDI2W18yM107CiAgdmFyICR0NCA9IFtdOwogIHZhciBfYTMgPSBmdW5jdGlvbiBuNygpIHsKICAgIGIyMS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgbjcpLCB3bjMgPSAxLCAkdDQubWFwKGZ1bmN0aW9uKHQ0KSB7CiAgICAgIHJldHVybiB0NCgpOwogICAgfSk7CiAgfTsKICB2YXIgd24zID0gZmFsc2U7CiAgTDE3ICYmICh3bjMgPSAoYjIxLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCA/IC9ebG9hZGVkfF5jLyA6IC9ebG9hZGVkfF5pfF5jLykudGVzdChiMjEucmVhZHlTdGF0ZSksIHduMyB8fCBiMjEuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIF9hMykpOwogIGZ1bmN0aW9uIFRhKG44KSB7CiAgICAhTDE3IHx8ICh3bjMgPyBzZXRUaW1lb3V0KG44LCAwKSA6ICR0NC5wdXNoKG44KSk7CiAgfQogIGZ1bmN0aW9uIGZuMihuOCkgewogICAgdmFyIHQ0ID0gbjgudGFnLCBhNCA9IG44LmF0dHJpYnV0ZXMsIGU1ID0gYTQgPT09IHZvaWQgMCA/IHt9IDogYTQsIHIzID0gbjguY2hpbGRyZW4sIG80ID0gcjMgPT09IHZvaWQgMCA/IFtdIDogcjM7CiAgICByZXR1cm4gdHlwZW9mIG44ID09ICJzdHJpbmciID8ganQzKG44KSA6ICI8Ii5jb25jYXQodDQsICIgIikuY29uY2F0KE9hKGU1KSwgIj4iKS5jb25jYXQobzQubWFwKGZuMikuam9pbigiIiksICI8LyIpLmNvbmNhdCh0NCwgIj4iKTsKICB9CiAgZnVuY3Rpb24gdXQxMShuOCwgdDQsIGE0KSB7CiAgICBpZiAobjggJiYgbjhbdDRdICYmIG44W3Q0XVthNF0pCiAgICAgIHJldHVybiB7IHByZWZpeDogdDQsIGljb25OYW1lOiBhNCwgaWNvbjogbjhbdDRdW2E0XSB9OwogIH0KICB2YXIgTWEgPSBmdW5jdGlvbih0NCwgYTQpIHsKICAgIHJldHVybiBmdW5jdGlvbihlNSwgcjMsIG80LCBpNCkgewogICAgICByZXR1cm4gdDQuY2FsbChhNCwgZTUsIHIzLCBvNCwgaTQpOwogICAgfTsKICB9OwogIHZhciBJbjIgPSBmdW5jdGlvbih0NCwgYTQsIGU1LCByMykgewogICAgdmFyIG80ID0gT2JqZWN0LmtleXModDQpLCBpNCA9IG80Lmxlbmd0aCwgczggPSByMyAhPT0gdm9pZCAwID8gTWEoYTQsIHIzKSA6IGE0LCBmMTEsIHUxMSwgbDc7CiAgICBmb3IgKGU1ID09PSB2b2lkIDAgPyAoZjExID0gMSwgbDcgPSB0NFtvNFswXV0pIDogKGYxMSA9IDAsIGw3ID0gZTUpOyBmMTEgPCBpNDsgZjExKyspCiAgICAgIHUxMSA9IG80W2YxMV0sIGw3ID0gczgobDcsIHQ0W3UxMV0sIHUxMSwgdDQpOwogICAgcmV0dXJuIGw3OwogIH07CiAgZnVuY3Rpb24gTGEobjgpIHsKICAgIGZvciAodmFyIHQ0ID0gW10sIGE0ID0gMCwgZTUgPSBuOC5sZW5ndGg7IGE0IDwgZTU7ICkgewogICAgICB2YXIgcjMgPSBuOC5jaGFyQ29kZUF0KGE0KyspOwogICAgICBpZiAocjMgPj0gNTUyOTYgJiYgcjMgPD0gNTYzMTkgJiYgYTQgPCBlNSkgewogICAgICAgIHZhciBvNCA9IG44LmNoYXJDb2RlQXQoYTQrKyk7CiAgICAgICAgKG80ICYgNjQ1MTIpID09IDU2MzIwID8gdDQucHVzaCgoKHIzICYgMTAyMykgPDwgMTApICsgKG80ICYgMTAyMykgKyA2NTUzNikgOiAodDQucHVzaChyMyksIGE0LS0pOwogICAgICB9IGVsc2UKICAgICAgICB0NC5wdXNoKHIzKTsKICAgIH0KICAgIHJldHVybiB0NDsKICB9CiAgZnVuY3Rpb24gUm4yKG44KSB7CiAgICB2YXIgdDQgPSBMYShuOCk7CiAgICByZXR1cm4gdDQubGVuZ3RoID09PSAxID8gdDRbMF0udG9TdHJpbmcoMTYpIDogbnVsbDsKICB9CiAgZnVuY3Rpb24gUmEobjgsIHQ0KSB7CiAgICB2YXIgYTQgPSBuOC5sZW5ndGgsIGU1ID0gbjguY2hhckNvZGVBdCh0NCksIHIzOwogICAgcmV0dXJuIGU1ID49IDU1Mjk2ICYmIGU1IDw9IDU2MzE5ICYmIGE0ID4gdDQgKyAxICYmIChyMyA9IG44LmNoYXJDb2RlQXQodDQgKyAxKSwgcjMgPj0gNTYzMjAgJiYgcjMgPD0gNTczNDMpID8gKGU1IC0gNTUyOTYpICogMTAyNCArIHIzIC0gNTYzMjAgKyA2NTUzNiA6IGU1OwogIH0KICBmdW5jdGlvbiBtdDgobjgpIHsKICAgIHJldHVybiBPYmplY3Qua2V5cyhuOCkucmVkdWNlKGZ1bmN0aW9uKHQ0LCBhNCkgewogICAgICB2YXIgZTUgPSBuOFthNF0sIHIzID0gISFlNS5pY29uOwogICAgICByZXR1cm4gcjMgPyB0NFtlNS5pY29uTmFtZV0gPSBlNS5pY29uIDogdDRbYTRdID0gZTUsIHQ0OwogICAgfSwge30pOwogIH0KICBmdW5jdGlvbiBGbjIobjgsIHQ0KSB7CiAgICB2YXIgYTQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1syXSA6IHt9LCBlNSA9IGE0LnNraXBIb29rcywgcjMgPSBlNSA9PT0gdm9pZCAwID8gZmFsc2UgOiBlNSwgbzQgPSBtdDgodDQpOwogICAgdHlwZW9mIFAyNC5ob29rcy5hZGRQYWNrID09ICJmdW5jdGlvbiIgJiYgIXIzID8gUDI0Lmhvb2tzLmFkZFBhY2sobjgsIG10OCh0NCkpIDogUDI0LnN0eWxlc1tuOF0gPSBjMTQoYzE0KHt9LCBQMjQuc3R5bGVzW244XSB8fCB7fSksIG80KSwgbjggPT09ICJmYXMiICYmIEZuMigiZmEiLCB0NCk7CiAgfQogIHZhciBwbjsKICB2YXIgZ24zOwogIHZhciBibjI7CiAgdmFyIFgyMSA9IFAyNC5zdHlsZXM7CiAgdmFyIEZhID0gUDI0LnNoaW1zOwogIHZhciBEYSA9IChwbiA9IHt9LCB5MTYocG4sIGc5LCBPYmplY3QudmFsdWVzKGFuMltnOV0pKSwgeTE2KHBuLCBoNywgT2JqZWN0LnZhbHVlcyhhbjJbaDddKSksIHBuKTsKICB2YXIgS24yID0gbnVsbDsKICB2YXIgVXQ4ID0ge307CiAgdmFyIFd0MTEgPSB7fTsKICB2YXIgSHQ3ID0ge307CiAgdmFyIEd0MyA9IHt9OwogIHZhciBYdDMgPSB7fTsKICB2YXIgemEgPSAoZ24zID0ge30sIHkxNihnbjMsIGc5LCBPYmplY3Qua2V5cyhubjRbZzldKSksIHkxNihnbjMsIGg3LCBPYmplY3Qua2V5cyhubjRbaDddKSksIGduMyk7CiAgZnVuY3Rpb24gamEobjgpIHsKICAgIHJldHVybiB+a2EuaW5kZXhPZihuOCk7CiAgfQogIGZ1bmN0aW9uIFlhKG44LCB0NCkgewogICAgdmFyIGE0ID0gdDQuc3BsaXQoIi0iKSwgZTUgPSBhNFswXSwgcjMgPSBhNC5zbGljZSgxKS5qb2luKCItIik7CiAgICByZXR1cm4gZTUgPT09IG44ICYmIHIzICE9PSAiIiAmJiAhamEocjMpID8gcjMgOiBudWxsOwogIH0KICB2YXIgQnQ3ID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgdDQgPSBmdW5jdGlvbihvNCkgewogICAgICByZXR1cm4gSW4yKFgyMSwgZnVuY3Rpb24oaTQsIHM4LCBmMTEpIHsKICAgICAgICByZXR1cm4gaTRbZjExXSA9IEluMihzOCwgbzQsIHt9KSwgaTQ7CiAgICAgIH0sIHt9KTsKICAgIH07CiAgICBVdDggPSB0NChmdW5jdGlvbihyMywgbzQsIGk0KSB7CiAgICAgIGlmIChvNFszXSAmJiAocjNbbzRbM11dID0gaTQpLCBvNFsyXSkgewogICAgICAgIHZhciBzOCA9IG80WzJdLmZpbHRlcihmdW5jdGlvbihmMTEpIHsKICAgICAgICAgIHJldHVybiB0eXBlb2YgZjExID09ICJudW1iZXIiOwogICAgICAgIH0pOwogICAgICAgIHM4LmZvckVhY2goZnVuY3Rpb24oZjExKSB7CiAgICAgICAgICByM1tmMTEudG9TdHJpbmcoMTYpXSA9IGk0OwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiByMzsKICAgIH0pLCBXdDExID0gdDQoZnVuY3Rpb24ocjMsIG80LCBpNCkgewogICAgICBpZiAocjNbaTRdID0gaTQsIG80WzJdKSB7CiAgICAgICAgdmFyIHM4ID0gbzRbMl0uZmlsdGVyKGZ1bmN0aW9uKGYxMSkgewogICAgICAgICAgcmV0dXJuIHR5cGVvZiBmMTEgPT0gInN0cmluZyI7CiAgICAgICAgfSk7CiAgICAgICAgczguZm9yRWFjaChmdW5jdGlvbihmMTEpIHsKICAgICAgICAgIHIzW2YxMV0gPSBpNDsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gcjM7CiAgICB9KSwgWHQzID0gdDQoZnVuY3Rpb24ocjMsIG80LCBpNCkgewogICAgICB2YXIgczggPSBvNFsyXTsKICAgICAgcmV0dXJuIHIzW2k0XSA9IGk0LCBzOC5mb3JFYWNoKGZ1bmN0aW9uKGYxMSkgewogICAgICAgIHIzW2YxMV0gPSBpNDsKICAgICAgfSksIHIzOwogICAgfSk7CiAgICB2YXIgYTQgPSAiZmFyIiBpbiBYMjEgfHwgbTIxLmF1dG9GZXRjaFN2ZywgZTUgPSBJbjIoRmEsIGZ1bmN0aW9uKHIzLCBvNCkgewogICAgICB2YXIgaTQgPSBvNFswXSwgczggPSBvNFsxXSwgZjExID0gbzRbMl07CiAgICAgIHJldHVybiBzOCA9PT0gImZhciIgJiYgIWE0ICYmIChzOCA9ICJmYXMiKSwgdHlwZW9mIGk0ID09ICJzdHJpbmciICYmIChyMy5uYW1lc1tpNF0gPSB7IHByZWZpeDogczgsIGljb25OYW1lOiBmMTEgfSksIHR5cGVvZiBpNCA9PSAibnVtYmVyIiAmJiAocjMudW5pY29kZXNbaTQudG9TdHJpbmcoMTYpXSA9IHsgcHJlZml4OiBzOCwgaWNvbk5hbWU6IGYxMSB9KSwgcjM7CiAgICB9LCB7IG5hbWVzOiB7fSwgdW5pY29kZXM6IHt9IH0pOwogICAgSHQ3ID0gZTUubmFtZXMsIEd0MyA9IGU1LnVuaWNvZGVzLCBLbjIgPSBTbjIobTIxLnN0eWxlRGVmYXVsdCwgeyBmYW1pbHk6IG0yMS5mYW1pbHlEZWZhdWx0IH0pOwogIH07CiAgQWEoZnVuY3Rpb24objgpIHsKICAgIEtuMiA9IFNuMihuOC5zdHlsZURlZmF1bHQsIHsgZmFtaWx5OiBtMjEuZmFtaWx5RGVmYXVsdCB9KTsKICB9KTsKICBCdDcoKTsKICBmdW5jdGlvbiBRbjIobjgsIHQ0KSB7CiAgICByZXR1cm4gKFV0OFtuOF0gfHwge30pW3Q0XTsKICB9CiAgZnVuY3Rpb24gJGEobjgsIHQ0KSB7CiAgICByZXR1cm4gKFd0MTFbbjhdIHx8IHt9KVt0NF07CiAgfQogIGZ1bmN0aW9uIFcxNShuOCwgdDQpIHsKICAgIHJldHVybiAoWHQzW244XSB8fCB7fSlbdDRdOwogIH0KICBmdW5jdGlvbiBWdDEwKG44KSB7CiAgICByZXR1cm4gSHQ3W244XSB8fCB7IHByZWZpeDogbnVsbCwgaWNvbk5hbWU6IG51bGwgfTsKICB9CiAgZnVuY3Rpb24gVWEobjgpIHsKICAgIHZhciB0NCA9IEd0M1tuOF0sIGE0ID0gUW4yKCJmYXMiLCBuOCk7CiAgICByZXR1cm4gdDQgfHwgKGE0ID8geyBwcmVmaXg6ICJmYXMiLCBpY29uTmFtZTogYTQgfSA6IG51bGwpIHx8IHsgcHJlZml4OiBudWxsLCBpY29uTmFtZTogbnVsbCB9OwogIH0KICBmdW5jdGlvbiB6MjIoKSB7CiAgICByZXR1cm4gS24yOwogIH0KICB2YXIgSm4yID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4geyBwcmVmaXg6IG51bGwsIGljb25OYW1lOiBudWxsLCByZXN0OiBbXSB9OwogIH07CiAgZnVuY3Rpb24gU24yKG44KSB7CiAgICB2YXIgdDQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCBhNCA9IHQ0LmZhbWlseSwgZTUgPSBhNCA9PT0gdm9pZCAwID8gZzkgOiBhNCwgcjMgPSBubjRbZTVdW244XSwgbzQgPSB0bjNbZTVdW244XSB8fCB0bjNbZTVdW3IzXSwgaTQgPSBuOCBpbiBQMjQuc3R5bGVzID8gbjggOiBudWxsOwogICAgcmV0dXJuIG80IHx8IGk0IHx8IG51bGw7CiAgfQogIHZhciBkdDggPSAoYm4yID0ge30sIHkxNihibjIsIGc5LCBPYmplY3Qua2V5cyhhbjJbZzldKSksIHkxNihibjIsIGg3LCBPYmplY3Qua2V5cyhhbjJbaDddKSksIGJuMik7CiAgZnVuY3Rpb24gRW4yKG44KSB7CiAgICB2YXIgdDQsIGE0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fSwgZTUgPSBhNC5za2lwTG9va3VwcywgcjMgPSBlNSA9PT0gdm9pZCAwID8gZmFsc2UgOiBlNSwgbzQgPSAodDQgPSB7fSwgeTE2KHQ0LCBnOSwgIiIuY29uY2F0KG0yMS5jc3NQcmVmaXgsICItIikuY29uY2F0KGc5KSksIHkxNih0NCwgaDcsICIiLmNvbmNhdChtMjEuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChoNykpLCB0NCksIGk0ID0gbnVsbCwgczggPSBnOTsKICAgIChuOC5pbmNsdWRlcyhvNFtnOV0pIHx8IG44LnNvbWUoZnVuY3Rpb24odTExKSB7CiAgICAgIHJldHVybiBkdDhbZzldLmluY2x1ZGVzKHUxMSk7CiAgICB9KSkgJiYgKHM4ID0gZzkpLCAobjguaW5jbHVkZXMobzRbaDddKSB8fCBuOC5zb21lKGZ1bmN0aW9uKHUxMSkgewogICAgICByZXR1cm4gZHQ4W2g3XS5pbmNsdWRlcyh1MTEpOwogICAgfSkpICYmIChzOCA9IGg3KTsKICAgIHZhciBmMTEgPSBuOC5yZWR1Y2UoZnVuY3Rpb24odTExLCBsNykgewogICAgICB2YXIgZDE1ID0gWWEobTIxLmNzc1ByZWZpeCwgbDcpOwogICAgICBpZiAoWDIxW2w3XSA/IChsNyA9IERhW3M4XS5pbmNsdWRlcyhsNykgPyB2YVtzOF1bbDddIDogbDcsIGk0ID0gbDcsIHUxMS5wcmVmaXggPSBsNykgOiB6YVtzOF0uaW5kZXhPZihsNykgPiAtMSA/IChpNCA9IGw3LCB1MTEucHJlZml4ID0gU24yKGw3LCB7IGZhbWlseTogczggfSkpIDogZDE1ID8gdTExLmljb25OYW1lID0gZDE1IDogbDcgIT09IG0yMS5yZXBsYWNlbWVudENsYXNzICYmIGw3ICE9PSBvNFtnOV0gJiYgbDcgIT09IG80W2g3XSAmJiB1MTEucmVzdC5wdXNoKGw3KSwgIXIzICYmIHUxMS5wcmVmaXggJiYgdTExLmljb25OYW1lKSB7CiAgICAgICAgdmFyIHYxNSA9IGk0ID09PSAiZmEiID8gVnQxMCh1MTEuaWNvbk5hbWUpIDoge30sIHAxOCA9IFcxNSh1MTEucHJlZml4LCB1MTEuaWNvbk5hbWUpOwogICAgICAgIHYxNS5wcmVmaXggJiYgKGk0ID0gbnVsbCksIHUxMS5pY29uTmFtZSA9IHYxNS5pY29uTmFtZSB8fCBwMTggfHwgdTExLmljb25OYW1lLCB1MTEucHJlZml4ID0gdjE1LnByZWZpeCB8fCB1MTEucHJlZml4LCB1MTEucHJlZml4ID09PSAiZmFyIiAmJiAhWDIxLmZhciAmJiBYMjEuZmFzICYmICFtMjEuYXV0b0ZldGNoU3ZnICYmICh1MTEucHJlZml4ID0gImZhcyIpOwogICAgICB9CiAgICAgIHJldHVybiB1MTE7CiAgICB9LCBKbjIoKSk7CiAgICByZXR1cm4gKG44LmluY2x1ZGVzKCJmYS1icmFuZHMiKSB8fCBuOC5pbmNsdWRlcygiZmFiIikpICYmIChmMTEucHJlZml4ID0gImZhYiIpLCAobjguaW5jbHVkZXMoImZhLWR1b3RvbmUiKSB8fCBuOC5pbmNsdWRlcygiZmFkIikpICYmIChmMTEucHJlZml4ID0gImZhZCIpLCAhZjExLnByZWZpeCAmJiBzOCA9PT0gaDcgJiYgKFgyMS5mYXNzIHx8IG0yMS5hdXRvRmV0Y2hTdmcpICYmIChmMTEucHJlZml4ID0gImZhc3MiLCBmMTEuaWNvbk5hbWUgPSBXMTUoZjExLnByZWZpeCwgZjExLmljb25OYW1lKSB8fCBmMTEuaWNvbk5hbWUpLCAoZjExLnByZWZpeCA9PT0gImZhIiB8fCBpNCA9PT0gImZhIikgJiYgKGYxMS5wcmVmaXggPSB6MjIoKSB8fCAiZmFzIiksIGYxMTsKICB9CiAgdmFyIFdhID0gZnVuY3Rpb24oKSB7CiAgICBmdW5jdGlvbiBuOCgpIHsKICAgICAgYWEodGhpcywgbjgpLCB0aGlzLmRlZmluaXRpb25zID0ge307CiAgICB9CiAgICByZXR1cm4gZWEobjgsIFt7IGtleTogImFkZCIsIHZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgZm9yICh2YXIgYTQgPSB0aGlzLCBlNSA9IGFyZ3VtZW50cy5sZW5ndGgsIHIzID0gbmV3IEFycmF5KGU1KSwgbzQgPSAwOyBvNCA8IGU1OyBvNCsrKQogICAgICAgIHIzW280XSA9IGFyZ3VtZW50c1tvNF07CiAgICAgIHZhciBpNCA9IHIzLnJlZHVjZSh0aGlzLl9wdWxsRGVmaW5pdGlvbnMsIHt9KTsKICAgICAgT2JqZWN0LmtleXMoaTQpLmZvckVhY2goZnVuY3Rpb24oczgpIHsKICAgICAgICBhNC5kZWZpbml0aW9uc1tzOF0gPSBjMTQoYzE0KHt9LCBhNC5kZWZpbml0aW9uc1tzOF0gfHwge30pLCBpNFtzOF0pLCBGbjIoczgsIGk0W3M4XSk7CiAgICAgICAgdmFyIGYxMSA9IGFuMltnOV1bczhdOwogICAgICAgIGYxMSAmJiBGbjIoZjExLCBpNFtzOF0pLCBCdDcoKTsKICAgICAgfSk7CiAgICB9IH0sIHsga2V5OiAicmVzZXQiLCB2YWx1ZTogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTsKICAgIH0gfSwgeyBrZXk6ICJfcHVsbERlZmluaXRpb25zIiwgdmFsdWU6IGZ1bmN0aW9uKGE0LCBlNSkgewogICAgICB2YXIgcjMgPSBlNS5wcmVmaXggJiYgZTUuaWNvbk5hbWUgJiYgZTUuaWNvbiA/IHsgMDogZTUgfSA6IGU1OwogICAgICByZXR1cm4gT2JqZWN0LmtleXMocjMpLm1hcChmdW5jdGlvbihvNCkgewogICAgICAgIHZhciBpNCA9IHIzW280XSwgczggPSBpNC5wcmVmaXgsIGYxMSA9IGk0Lmljb25OYW1lLCB1MTEgPSBpNC5pY29uLCBsNyA9IHUxMVsyXTsKICAgICAgICBhNFtzOF0gfHwgKGE0W3M4XSA9IHt9KSwgbDcubGVuZ3RoID4gMCAmJiBsNy5mb3JFYWNoKGZ1bmN0aW9uKGQxNSkgewogICAgICAgICAgdHlwZW9mIGQxNSA9PSAic3RyaW5nIiAmJiAoYTRbczhdW2QxNV0gPSB1MTEpOwogICAgICAgIH0pLCBhNFtzOF1bZjExXSA9IHUxMTsKICAgICAgfSksIGE0OwogICAgfSB9XSksIG44OwogIH0oKTsKICB2YXIgdnQ4ID0gW107CiAgdmFyIEIxOSA9IHt9OwogIHZhciBWMTcgPSB7fTsKICB2YXIgSGEgPSBPYmplY3Qua2V5cyhWMTcpOwogIGZ1bmN0aW9uIEdhKG44LCB0NCkgewogICAgdmFyIGE0ID0gdDQubWl4b3V0c1RvOwogICAgcmV0dXJuIHZ0OCA9IG44LCBCMTkgPSB7fSwgT2JqZWN0LmtleXMoVjE3KS5mb3JFYWNoKGZ1bmN0aW9uKGU1KSB7CiAgICAgIEhhLmluZGV4T2YoZTUpID09PSAtMSAmJiBkZWxldGUgVjE3W2U1XTsKICAgIH0pLCB2dDguZm9yRWFjaChmdW5jdGlvbihlNSkgewogICAgICB2YXIgcjMgPSBlNS5taXhvdXQgPyBlNS5taXhvdXQoKSA6IHt9OwogICAgICBpZiAoT2JqZWN0LmtleXMocjMpLmZvckVhY2goZnVuY3Rpb24oaTQpIHsKICAgICAgICB0eXBlb2YgcjNbaTRdID09ICJmdW5jdGlvbiIgJiYgKGE0W2k0XSA9IHIzW2k0XSksIGtuMyhyM1tpNF0pID09PSAib2JqZWN0IiAmJiBPYmplY3Qua2V5cyhyM1tpNF0pLmZvckVhY2goZnVuY3Rpb24oczgpIHsKICAgICAgICAgIGE0W2k0XSB8fCAoYTRbaTRdID0ge30pLCBhNFtpNF1bczhdID0gcjNbaTRdW3M4XTsKICAgICAgICB9KTsKICAgICAgfSksIGU1Lmhvb2tzKSB7CiAgICAgICAgdmFyIG80ID0gZTUuaG9va3MoKTsKICAgICAgICBPYmplY3Qua2V5cyhvNCkuZm9yRWFjaChmdW5jdGlvbihpNCkgewogICAgICAgICAgQjE5W2k0XSB8fCAoQjE5W2k0XSA9IFtdKSwgQjE5W2k0XS5wdXNoKG80W2k0XSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZTUucHJvdmlkZXMgJiYgZTUucHJvdmlkZXMoVjE3KTsKICAgIH0pLCBhNDsKICB9CiAgZnVuY3Rpb24gRG4yKG44LCB0NCkgewogICAgZm9yICh2YXIgYTQgPSBhcmd1bWVudHMubGVuZ3RoLCBlNSA9IG5ldyBBcnJheShhNCA+IDIgPyBhNCAtIDIgOiAwKSwgcjMgPSAyOyByMyA8IGE0OyByMysrKQogICAgICBlNVtyMyAtIDJdID0gYXJndW1lbnRzW3IzXTsKICAgIHZhciBvNCA9IEIxOVtuOF0gfHwgW107CiAgICByZXR1cm4gbzQuZm9yRWFjaChmdW5jdGlvbihpNCkgewogICAgICB0NCA9IGk0LmFwcGx5KG51bGwsIFt0NF0uY29uY2F0KGU1KSk7CiAgICB9KSwgdDQ7CiAgfQogIGZ1bmN0aW9uIEcxOShuOCkgewogICAgZm9yICh2YXIgdDQgPSBhcmd1bWVudHMubGVuZ3RoLCBhNCA9IG5ldyBBcnJheSh0NCA+IDEgPyB0NCAtIDEgOiAwKSwgZTUgPSAxOyBlNSA8IHQ0OyBlNSsrKQogICAgICBhNFtlNSAtIDFdID0gYXJndW1lbnRzW2U1XTsKICAgIHZhciByMyA9IEIxOVtuOF0gfHwgW107CiAgICByMy5mb3JFYWNoKGZ1bmN0aW9uKG80KSB7CiAgICAgIG80LmFwcGx5KG51bGwsIGE0KTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBNMTkoKSB7CiAgICB2YXIgbjggPSBhcmd1bWVudHNbMF0sIHQ0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKICAgIHJldHVybiBWMTdbbjhdID8gVjE3W244XS5hcHBseShudWxsLCB0NCkgOiB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIHpuMihuOCkgewogICAgbjgucHJlZml4ID09PSAiZmEiICYmIChuOC5wcmVmaXggPSAiZmFzIik7CiAgICB2YXIgdDQgPSBuOC5pY29uTmFtZSwgYTQgPSBuOC5wcmVmaXggfHwgejIyKCk7CiAgICBpZiAoISF0NCkKICAgICAgcmV0dXJuIHQ0ID0gVzE1KGE0LCB0NCkgfHwgdDQsIHV0MTEocXQ0LmRlZmluaXRpb25zLCBhNCwgdDQpIHx8IHV0MTEoUDI0LnN0eWxlcywgYTQsIHQ0KTsKICB9CiAgdmFyIHF0NCA9IG5ldyBXYSgpOwogIHZhciBYYSA9IGZ1bmN0aW9uKCkgewogICAgbTIxLmF1dG9SZXBsYWNlU3ZnID0gZmFsc2UsIG0yMS5vYnNlcnZlTXV0YXRpb25zID0gZmFsc2UsIEcxOSgibm9BdXRvIik7CiAgfTsKICB2YXIgQmEgPSB7IGkyc3ZnOiBmdW5jdGlvbigpIHsKICAgIHZhciB0NCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307CiAgICByZXR1cm4gTDE3ID8gKEcxOSgiYmVmb3JlSTJzdmciLCB0NCksIE0xOSgicHNldWRvRWxlbWVudHMyc3ZnIiwgdDQpLCBNMTkoImkyc3ZnIiwgdDQpKSA6IFByb21pc2UucmVqZWN0KCJPcGVyYXRpb24gcmVxdWlyZXMgYSBET00gb2Ygc29tZSBraW5kLiIpOwogIH0sIHdhdGNoOiBmdW5jdGlvbigpIHsKICAgIHZhciB0NCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge30sIGE0ID0gdDQuYXV0b1JlcGxhY2VTdmdSb290OwogICAgbTIxLmF1dG9SZXBsYWNlU3ZnID09PSBmYWxzZSAmJiAobTIxLmF1dG9SZXBsYWNlU3ZnID0gdHJ1ZSksIG0yMS5vYnNlcnZlTXV0YXRpb25zID0gdHJ1ZSwgVGEoZnVuY3Rpb24oKSB7CiAgICAgIHFhKHsgYXV0b1JlcGxhY2VTdmdSb290OiBhNCB9KSwgRzE5KCJ3YXRjaCIsIHQ0KTsKICAgIH0pOwogIH0gfTsKICB2YXIgVmEgPSB7IGljb246IGZ1bmN0aW9uKHQ0KSB7CiAgICBpZiAodDQgPT09IG51bGwpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKGtuMyh0NCkgPT09ICJvYmplY3QiICYmIHQ0LnByZWZpeCAmJiB0NC5pY29uTmFtZSkKICAgICAgcmV0dXJuIHsgcHJlZml4OiB0NC5wcmVmaXgsIGljb25OYW1lOiBXMTUodDQucHJlZml4LCB0NC5pY29uTmFtZSkgfHwgdDQuaWNvbk5hbWUgfTsKICAgIGlmIChBcnJheS5pc0FycmF5KHQ0KSAmJiB0NC5sZW5ndGggPT09IDIpIHsKICAgICAgdmFyIGE0ID0gdDRbMV0uaW5kZXhPZigiZmEtIikgPT09IDAgPyB0NFsxXS5zbGljZSgzKSA6IHQ0WzFdLCBlNSA9IFNuMih0NFswXSk7CiAgICAgIHJldHVybiB7IHByZWZpeDogZTUsIGljb25OYW1lOiBXMTUoZTUsIGE0KSB8fCBhNCB9OwogICAgfQogICAgaWYgKHR5cGVvZiB0NCA9PSAic3RyaW5nIiAmJiAodDQuaW5kZXhPZigiIi5jb25jYXQobTIxLmNzc1ByZWZpeCwgIi0iKSkgPiAtMSB8fCB0NC5tYXRjaChwYSkpKSB7CiAgICAgIHZhciByMyA9IEVuMih0NC5zcGxpdCgiICIpLCB7IHNraXBMb29rdXBzOiB0cnVlIH0pOwogICAgICByZXR1cm4geyBwcmVmaXg6IHIzLnByZWZpeCB8fCB6MjIoKSwgaWNvbk5hbWU6IFcxNShyMy5wcmVmaXgsIHIzLmljb25OYW1lKSB8fCByMy5pY29uTmFtZSB9OwogICAgfQogICAgaWYgKHR5cGVvZiB0NCA9PSAic3RyaW5nIikgewogICAgICB2YXIgbzQgPSB6MjIoKTsKICAgICAgcmV0dXJuIHsgcHJlZml4OiBvNCwgaWNvbk5hbWU6IFcxNShvNCwgdDQpIHx8IHQ0IH07CiAgICB9CiAgfSB9OwogIHZhciBTMTkgPSB7IG5vQXV0bzogWGEsIGNvbmZpZzogbTIxLCBkb206IEJhLCBwYXJzZTogVmEsIGxpYnJhcnk6IHF0NCwgZmluZEljb25EZWZpbml0aW9uOiB6bjIsIHRvSHRtbDogZm4yIH07CiAgdmFyIHFhID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgdDQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9LCBhNCA9IHQ0LmF1dG9SZXBsYWNlU3ZnUm9vdCwgZTUgPSBhNCA9PT0gdm9pZCAwID8gYjIxIDogYTQ7CiAgICAoT2JqZWN0LmtleXMoUDI0LnN0eWxlcykubGVuZ3RoID4gMCB8fCBtMjEuYXV0b0ZldGNoU3ZnKSAmJiBMMTcgJiYgbTIxLmF1dG9SZXBsYWNlU3ZnICYmIFMxOS5kb20uaTJzdmcoeyBub2RlOiBlNSB9KTsKICB9OwogIGZ1bmN0aW9uIE9uMihuOCwgdDQpIHsKICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobjgsICJhYnN0cmFjdCIsIHsgZ2V0OiB0NCB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KG44LCAiaHRtbCIsIHsgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIG44LmFic3RyYWN0Lm1hcChmdW5jdGlvbihlNSkgewogICAgICAgIHJldHVybiBmbjIoZTUpOwogICAgICB9KTsKICAgIH0gfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuOCwgIm5vZGUiLCB7IGdldDogZnVuY3Rpb24oKSB7CiAgICAgIGlmICghIUwxNykgewogICAgICAgIHZhciBlNSA9IGIyMS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICByZXR1cm4gZTUuaW5uZXJIVE1MID0gbjguaHRtbCwgZTUuY2hpbGRyZW47CiAgICAgIH0KICAgIH0gfSksIG44OwogIH0KICBmdW5jdGlvbiBLYShuOCkgewogICAgdmFyIHQ0ID0gbjguY2hpbGRyZW4sIGE0ID0gbjgubWFpbiwgZTUgPSBuOC5tYXNrLCByMyA9IG44LmF0dHJpYnV0ZXMsIG80ID0gbjguc3R5bGVzLCBpNCA9IG44LnRyYW5zZm9ybTsKICAgIGlmIChxbjIoaTQpICYmIGE0LmZvdW5kICYmICFlNS5mb3VuZCkgewogICAgICB2YXIgczggPSBhNC53aWR0aCwgZjExID0gYTQuaGVpZ2h0LCB1MTEgPSB7IHg6IHM4IC8gZjExIC8gMiwgeTogMC41IH07CiAgICAgIHIzLnN0eWxlID0gQW4yKGMxNChjMTQoe30sIG80KSwge30sIHsgInRyYW5zZm9ybS1vcmlnaW4iOiAiIi5jb25jYXQodTExLnggKyBpNC54IC8gMTYsICJlbSAiKS5jb25jYXQodTExLnkgKyBpNC55IC8gMTYsICJlbSIpIH0pKTsKICAgIH0KICAgIHJldHVybiBbeyB0YWc6ICJzdmciLCBhdHRyaWJ1dGVzOiByMywgY2hpbGRyZW46IHQ0IH1dOwogIH0KICBmdW5jdGlvbiBRYShuOCkgewogICAgdmFyIHQ0ID0gbjgucHJlZml4LCBhNCA9IG44Lmljb25OYW1lLCBlNSA9IG44LmNoaWxkcmVuLCByMyA9IG44LmF0dHJpYnV0ZXMsIG80ID0gbjguc3ltYm9sLCBpNCA9IG80ID09PSB0cnVlID8gIiIuY29uY2F0KHQ0LCAiLSIpLmNvbmNhdChtMjEuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChhNCkgOiBvNDsKICAgIHJldHVybiBbeyB0YWc6ICJzdmciLCBhdHRyaWJ1dGVzOiB7IHN0eWxlOiAiZGlzcGxheTogbm9uZTsiIH0sIGNoaWxkcmVuOiBbeyB0YWc6ICJzeW1ib2wiLCBhdHRyaWJ1dGVzOiBjMTQoYzE0KHt9LCByMyksIHt9LCB7IGlkOiBpNCB9KSwgY2hpbGRyZW46IGU1IH1dIH1dOwogIH0KICBmdW5jdGlvbiBabjIobjgpIHsKICAgIHZhciB0NCA9IG44Lmljb25zLCBhNCA9IHQ0Lm1haW4sIGU1ID0gdDQubWFzaywgcjMgPSBuOC5wcmVmaXgsIG80ID0gbjguaWNvbk5hbWUsIGk0ID0gbjgudHJhbnNmb3JtLCBzOCA9IG44LnN5bWJvbCwgZjExID0gbjgudGl0bGUsIHUxMSA9IG44Lm1hc2tJZCwgbDcgPSBuOC50aXRsZUlkLCBkMTUgPSBuOC5leHRyYSwgdjE1ID0gbjgud2F0Y2hhYmxlLCBwMTggPSB2MTUgPT09IHZvaWQgMCA/IGZhbHNlIDogdjE1LCB3MjEgPSBlNS5mb3VuZCA/IGU1IDogYTQsIEUxNSA9IHcyMS53aWR0aCwgTzE1ID0gdzIxLmhlaWdodCwgQzE3ID0gcjMgPT09ICJmYWsiLCBrMTggPSBbbTIxLnJlcGxhY2VtZW50Q2xhc3MsIG80ID8gIiIuY29uY2F0KG0yMS5jc3NQcmVmaXgsICItIikuY29uY2F0KG80KSA6ICIiXS5maWx0ZXIoZnVuY3Rpb24oUjI2KSB7CiAgICAgIHJldHVybiBkMTUuY2xhc3Nlcy5pbmRleE9mKFIyNikgPT09IC0xOwogICAgfSkuZmlsdGVyKGZ1bmN0aW9uKFIyNikgewogICAgICByZXR1cm4gUjI2ICE9PSAiIiB8fCAhIVIyNjsKICAgIH0pLmNvbmNhdChkMTUuY2xhc3Nlcykuam9pbigiICIpLCB4MjEgPSB7IGNoaWxkcmVuOiBbXSwgYXR0cmlidXRlczogYzE0KGMxNCh7fSwgZDE1LmF0dHJpYnV0ZXMpLCB7fSwgeyAiZGF0YS1wcmVmaXgiOiByMywgImRhdGEtaWNvbiI6IG80LCBjbGFzczogazE4LCByb2xlOiBkMTUuYXR0cmlidXRlcy5yb2xlIHx8ICJpbWciLCB4bWxuczogImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgdmlld0JveDogIjAgMCAiLmNvbmNhdChFMTUsICIgIikuY29uY2F0KE8xNSkgfSkgfSwgSTI3ID0gQzE3ICYmICF+ZDE1LmNsYXNzZXMuaW5kZXhPZigiZmEtZnciKSA/IHsgd2lkdGg6ICIiLmNvbmNhdChFMTUgLyBPMTUgKiAxNiAqIDAuMDYyNSwgImVtIikgfSA6IHt9OwogICAgcDE4ICYmICh4MjEuYXR0cmlidXRlc1tIMTldID0gIiIpLCBmMTEgJiYgKHgyMS5jaGlsZHJlbi5wdXNoKHsgdGFnOiAidGl0bGUiLCBhdHRyaWJ1dGVzOiB7IGlkOiB4MjEuYXR0cmlidXRlc1siYXJpYS1sYWJlbGxlZGJ5Il0gfHwgInRpdGxlLSIuY29uY2F0KGw3IHx8IHJuMygpKSB9LCBjaGlsZHJlbjogW2YxMV0gfSksIGRlbGV0ZSB4MjEuYXR0cmlidXRlcy50aXRsZSk7CiAgICB2YXIgQTIwID0gYzE0KGMxNCh7fSwgeDIxKSwge30sIHsgcHJlZml4OiByMywgaWNvbk5hbWU6IG80LCBtYWluOiBhNCwgbWFzazogZTUsIG1hc2tJZDogdTExLCB0cmFuc2Zvcm06IGk0LCBzeW1ib2w6IHM4LCBzdHlsZXM6IGMxNChjMTQoe30sIEkyNyksIGQxNS5zdHlsZXMpIH0pLCBZMzAgPSBlNS5mb3VuZCAmJiBhNC5mb3VuZCA/IE0xOSgiZ2VuZXJhdGVBYnN0cmFjdE1hc2siLCBBMjApIHx8IHsgY2hpbGRyZW46IFtdLCBhdHRyaWJ1dGVzOiB7fSB9IDogTTE5KCJnZW5lcmF0ZUFic3RyYWN0SWNvbiIsIEEyMCkgfHwgeyBjaGlsZHJlbjogW10sIGF0dHJpYnV0ZXM6IHt9IH0sICQyMSA9IFkzMC5jaGlsZHJlbiwgUG4zID0gWTMwLmF0dHJpYnV0ZXM7CiAgICByZXR1cm4gQTIwLmNoaWxkcmVuID0gJDIxLCBBMjAuYXR0cmlidXRlcyA9IFBuMywgczggPyBRYShBMjApIDogS2EoQTIwKTsKICB9CiAgZnVuY3Rpb24gcHQxMChuOCkgewogICAgdmFyIHQ0ID0gbjguY29udGVudCwgYTQgPSBuOC53aWR0aCwgZTUgPSBuOC5oZWlnaHQsIHIzID0gbjgudHJhbnNmb3JtLCBvNCA9IG44LnRpdGxlLCBpNCA9IG44LmV4dHJhLCBzOCA9IG44LndhdGNoYWJsZSwgZjExID0gczggPT09IHZvaWQgMCA/IGZhbHNlIDogczgsIHUxMSA9IGMxNChjMTQoYzE0KHt9LCBpNC5hdHRyaWJ1dGVzKSwgbzQgPyB7IHRpdGxlOiBvNCB9IDoge30pLCB7fSwgeyBjbGFzczogaTQuY2xhc3Nlcy5qb2luKCIgIikgfSk7CiAgICBmMTEgJiYgKHUxMVtIMTldID0gIiIpOwogICAgdmFyIGw3ID0gYzE0KHt9LCBpNC5zdHlsZXMpOwogICAgcW4yKHIzKSAmJiAobDcudHJhbnNmb3JtID0gQ2EoeyB0cmFuc2Zvcm06IHIzLCBzdGFydENlbnRlcmVkOiB0cnVlLCB3aWR0aDogYTQsIGhlaWdodDogZTUgfSksIGw3WyItd2Via2l0LXRyYW5zZm9ybSJdID0gbDcudHJhbnNmb3JtKTsKICAgIHZhciBkMTUgPSBBbjIobDcpOwogICAgZDE1Lmxlbmd0aCA+IDAgJiYgKHUxMS5zdHlsZSA9IGQxNSk7CiAgICB2YXIgdjE1ID0gW107CiAgICByZXR1cm4gdjE1LnB1c2goeyB0YWc6ICJzcGFuIiwgYXR0cmlidXRlczogdTExLCBjaGlsZHJlbjogW3Q0XSB9KSwgbzQgJiYgdjE1LnB1c2goeyB0YWc6ICJzcGFuIiwgYXR0cmlidXRlczogeyBjbGFzczogInNyLW9ubHkiIH0sIGNoaWxkcmVuOiBbbzRdIH0pLCB2MTU7CiAgfQogIGZ1bmN0aW9uIEphKG44KSB7CiAgICB2YXIgdDQgPSBuOC5jb250ZW50LCBhNCA9IG44LnRpdGxlLCBlNSA9IG44LmV4dHJhLCByMyA9IGMxNChjMTQoYzE0KHt9LCBlNS5hdHRyaWJ1dGVzKSwgYTQgPyB7IHRpdGxlOiBhNCB9IDoge30pLCB7fSwgeyBjbGFzczogZTUuY2xhc3Nlcy5qb2luKCIgIikgfSksIG80ID0gQW4yKGU1LnN0eWxlcyk7CiAgICBvNC5sZW5ndGggPiAwICYmIChyMy5zdHlsZSA9IG80KTsKICAgIHZhciBpNCA9IFtdOwogICAgcmV0dXJuIGk0LnB1c2goeyB0YWc6ICJzcGFuIiwgYXR0cmlidXRlczogcjMsIGNoaWxkcmVuOiBbdDRdIH0pLCBhNCAmJiBpNC5wdXNoKHsgdGFnOiAic3BhbiIsIGF0dHJpYnV0ZXM6IHsgY2xhc3M6ICJzci1vbmx5IiB9LCBjaGlsZHJlbjogW2E0XSB9KSwgaTQ7CiAgfQogIHZhciBObjIgPSBQMjQuc3R5bGVzOwogIGZ1bmN0aW9uIGpuMihuOCkgewogICAgdmFyIHQ0ID0gbjhbMF0sIGE0ID0gbjhbMV0sIGU1ID0gbjguc2xpY2UoNCksIHIzID0gV24yKGU1LCAxKSwgbzQgPSByM1swXSwgaTQgPSBudWxsOwogICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobzQpID8gaTQgPSB7IHRhZzogImciLCBhdHRyaWJ1dGVzOiB7IGNsYXNzOiAiIi5jb25jYXQobTIxLmNzc1ByZWZpeCwgIi0iKS5jb25jYXQoVTI0LkdST1VQKSB9LCBjaGlsZHJlbjogW3sgdGFnOiAicGF0aCIsIGF0dHJpYnV0ZXM6IHsgY2xhc3M6ICIiLmNvbmNhdChtMjEuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChVMjQuU0VDT05EQVJZKSwgZmlsbDogImN1cnJlbnRDb2xvciIsIGQ6IG80WzBdIH0gfSwgeyB0YWc6ICJwYXRoIiwgYXR0cmlidXRlczogeyBjbGFzczogIiIuY29uY2F0KG0yMS5jc3NQcmVmaXgsICItIikuY29uY2F0KFUyNC5QUklNQVJZKSwgZmlsbDogImN1cnJlbnRDb2xvciIsIGQ6IG80WzFdIH0gfV0gfSA6IGk0ID0geyB0YWc6ICJwYXRoIiwgYXR0cmlidXRlczogeyBmaWxsOiAiY3VycmVudENvbG9yIiwgZDogbzQgfSB9LCB7IGZvdW5kOiB0cnVlLCB3aWR0aDogdDQsIGhlaWdodDogYTQsIGljb246IGk0IH07CiAgfQogIHZhciBaYSA9IHsgZm91bmQ6IGZhbHNlLCB3aWR0aDogNTEyLCBoZWlnaHQ6IDUxMiB9OwogIGZ1bmN0aW9uIG5lMTIobjgsIHQ0KSB7CiAgICAhUnQxMCAmJiAhbTIxLnNob3dNaXNzaW5nSWNvbnMgJiYgbjggJiYgY29uc29sZS5lcnJvcignSWNvbiB3aXRoIG5hbWUgIicuY29uY2F0KG44LCAnIiBhbmQgcHJlZml4ICInKS5jb25jYXQodDQsICciIGlzIG1pc3NpbmcuJykpOwogIH0KICBmdW5jdGlvbiBZbjIobjgsIHQ0KSB7CiAgICB2YXIgYTQgPSB0NDsKICAgIHJldHVybiB0NCA9PT0gImZhIiAmJiBtMjEuc3R5bGVEZWZhdWx0ICE9PSBudWxsICYmICh0NCA9IHoyMigpKSwgbmV3IFByb21pc2UoZnVuY3Rpb24oZTUsIHIzKSB7CiAgICAgIHZhciBvNCA9IHsgZm91bmQ6IGZhbHNlLCB3aWR0aDogNTEyLCBoZWlnaHQ6IDUxMiwgaWNvbjogTTE5KCJtaXNzaW5nSWNvbkFic3RyYWN0IikgfHwge30gfTsKICAgICAgaWYgKGE0ID09PSAiZmEiKSB7CiAgICAgICAgdmFyIGk0ID0gVnQxMChuOCkgfHwge307CiAgICAgICAgbjggPSBpNC5pY29uTmFtZSB8fCBuOCwgdDQgPSBpNC5wcmVmaXggfHwgdDQ7CiAgICAgIH0KICAgICAgaWYgKG44ICYmIHQ0ICYmIE5uMlt0NF0gJiYgTm4yW3Q0XVtuOF0pIHsKICAgICAgICB2YXIgczggPSBObjJbdDRdW244XTsKICAgICAgICByZXR1cm4gZTUoam4yKHM4KSk7CiAgICAgIH0KICAgICAgbmUxMihuOCwgdDQpLCBlNShjMTQoYzE0KHt9LCBaYSksIHt9LCB7IGljb246IG0yMS5zaG93TWlzc2luZ0ljb25zICYmIG44ID8gTTE5KCJtaXNzaW5nSWNvbkFic3RyYWN0IikgfHwge30gOiB7fSB9KSk7CiAgICB9KTsKICB9CiAgdmFyIGd0MTAgPSBmdW5jdGlvbigpIHsKICB9OwogIHZhciAkbjIgPSBtMjEubWVhc3VyZVBlcmZvcm1hbmNlICYmIGxuICYmIGxuLm1hcmsgJiYgbG4ubWVhc3VyZSA/IGxuIDogeyBtYXJrOiBndDEwLCBtZWFzdXJlOiBndDEwIH07CiAgdmFyIFExMyA9ICdGQSAiNi4yLjAiJzsKICB2YXIgdGUxNCA9IGZ1bmN0aW9uKHQ0KSB7CiAgICByZXR1cm4gJG4yLm1hcmsoIiIuY29uY2F0KFExMywgIiAiKS5jb25jYXQodDQsICIgYmVnaW5zIikpLCBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIEt0NCh0NCk7CiAgICB9OwogIH07CiAgdmFyIEt0NCA9IGZ1bmN0aW9uKHQ0KSB7CiAgICAkbjIubWFyaygiIi5jb25jYXQoUTEzLCAiICIpLmNvbmNhdCh0NCwgIiBlbmRzIikpLCAkbjIubWVhc3VyZSgiIi5jb25jYXQoUTEzLCAiICIpLmNvbmNhdCh0NCksICIiLmNvbmNhdChRMTMsICIgIikuY29uY2F0KHQ0LCAiIGJlZ2lucyIpLCAiIi5jb25jYXQoUTEzLCAiICIpLmNvbmNhdCh0NCwgIiBlbmRzIikpOwogIH07CiAgdmFyIG50MTIgPSB7IGJlZ2luOiB0ZTE0LCBlbmQ6IEt0NCB9OwogIHZhciBobjMgPSBmdW5jdGlvbigpIHsKICB9OwogIGZ1bmN0aW9uIGJ0NShuOCkgewogICAgdmFyIHQ0ID0gbjguZ2V0QXR0cmlidXRlID8gbjguZ2V0QXR0cmlidXRlKEgxOSkgOiBudWxsOwogICAgcmV0dXJuIHR5cGVvZiB0NCA9PSAic3RyaW5nIjsKICB9CiAgZnVuY3Rpb24gYWUxMyhuOCkgewogICAgdmFyIHQ0ID0gbjguZ2V0QXR0cmlidXRlID8gbjguZ2V0QXR0cmlidXRlKEduMykgOiBudWxsLCBhNCA9IG44LmdldEF0dHJpYnV0ZSA/IG44LmdldEF0dHJpYnV0ZShYbjIpIDogbnVsbDsKICAgIHJldHVybiB0NCAmJiBhNDsKICB9CiAgZnVuY3Rpb24gZWUxNShuOCkgewogICAgcmV0dXJuIG44ICYmIG44LmNsYXNzTGlzdCAmJiBuOC5jbGFzc0xpc3QuY29udGFpbnMgJiYgbjguY2xhc3NMaXN0LmNvbnRhaW5zKG0yMS5yZXBsYWNlbWVudENsYXNzKTsKICB9CiAgZnVuY3Rpb24gcmUxNygpIHsKICAgIGlmIChtMjEuYXV0b1JlcGxhY2VTdmcgPT09IHRydWUpCiAgICAgIHJldHVybiB5bjMucmVwbGFjZTsKICAgIHZhciBuOCA9IHluM1ttMjEuYXV0b1JlcGxhY2VTdmddOwogICAgcmV0dXJuIG44IHx8IHluMy5yZXBsYWNlOwogIH0KICBmdW5jdGlvbiBpZTExKG44KSB7CiAgICByZXR1cm4gYjIxLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCBuOCk7CiAgfQogIGZ1bmN0aW9uIG9lOChuOCkgewogICAgcmV0dXJuIGIyMS5jcmVhdGVFbGVtZW50KG44KTsKICB9CiAgZnVuY3Rpb24gUXQ1KG44KSB7CiAgICB2YXIgdDQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCBhNCA9IHQ0LmNlRm4sIGU1ID0gYTQgPT09IHZvaWQgMCA/IG44LnRhZyA9PT0gInN2ZyIgPyBpZTExIDogb2U4IDogYTQ7CiAgICBpZiAodHlwZW9mIG44ID09ICJzdHJpbmciKQogICAgICByZXR1cm4gYjIxLmNyZWF0ZVRleHROb2RlKG44KTsKICAgIHZhciByMyA9IGU1KG44LnRhZyk7CiAgICBPYmplY3Qua2V5cyhuOC5hdHRyaWJ1dGVzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGk0KSB7CiAgICAgIHIzLnNldEF0dHJpYnV0ZShpNCwgbjguYXR0cmlidXRlc1tpNF0pOwogICAgfSk7CiAgICB2YXIgbzQgPSBuOC5jaGlsZHJlbiB8fCBbXTsKICAgIHJldHVybiBvNC5mb3JFYWNoKGZ1bmN0aW9uKGk0KSB7CiAgICAgIHIzLmFwcGVuZENoaWxkKFF0NShpNCwgeyBjZUZuOiBlNSB9KSk7CiAgICB9KSwgcjM7CiAgfQogIGZ1bmN0aW9uIHNlMTUobjgpIHsKICAgIHZhciB0NCA9ICIgIi5jb25jYXQobjgub3V0ZXJIVE1MLCAiICIpOwogICAgcmV0dXJuIHQ0ID0gIiIuY29uY2F0KHQ0LCAiRm9udCBBd2Vzb21lIGZvbnRhd2Vzb21lLmNvbSAiKSwgdDQ7CiAgfQogIHZhciB5bjMgPSB7IHJlcGxhY2U6IGZ1bmN0aW9uKHQ0KSB7CiAgICB2YXIgYTQgPSB0NFswXTsKICAgIGlmIChhNC5wYXJlbnROb2RlKQogICAgICBpZiAodDRbMV0uZm9yRWFjaChmdW5jdGlvbihyMykgewogICAgICAgIGE0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFF0NShyMyksIGE0KTsKICAgICAgfSksIGE0LmdldEF0dHJpYnV0ZShIMTkpID09PSBudWxsICYmIG0yMS5rZWVwT3JpZ2luYWxTb3VyY2UpIHsKICAgICAgICB2YXIgZTUgPSBiMjEuY3JlYXRlQ29tbWVudChzZTE1KGE0KSk7CiAgICAgICAgYTQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZTUsIGE0KTsKICAgICAgfSBlbHNlCiAgICAgICAgYTQucmVtb3ZlKCk7CiAgfSwgbmVzdDogZnVuY3Rpb24odDQpIHsKICAgIHZhciBhNCA9IHQ0WzBdLCBlNSA9IHQ0WzFdOwogICAgaWYgKH5WbjIoYTQpLmluZGV4T2YobTIxLnJlcGxhY2VtZW50Q2xhc3MpKQogICAgICByZXR1cm4geW4zLnJlcGxhY2UodDQpOwogICAgdmFyIHIzID0gbmV3IFJlZ0V4cCgiIi5jb25jYXQobTIxLmNzc1ByZWZpeCwgIi0uKiIpKTsKICAgIGlmIChkZWxldGUgZTVbMF0uYXR0cmlidXRlcy5pZCwgZTVbMF0uYXR0cmlidXRlcy5jbGFzcykgewogICAgICB2YXIgbzQgPSBlNVswXS5hdHRyaWJ1dGVzLmNsYXNzLnNwbGl0KCIgIikucmVkdWNlKGZ1bmN0aW9uKHM4LCBmMTEpIHsKICAgICAgICByZXR1cm4gZjExID09PSBtMjEucmVwbGFjZW1lbnRDbGFzcyB8fCBmMTEubWF0Y2gocjMpID8gczgudG9TdmcucHVzaChmMTEpIDogczgudG9Ob2RlLnB1c2goZjExKSwgczg7CiAgICAgIH0sIHsgdG9Ob2RlOiBbXSwgdG9Tdmc6IFtdIH0pOwogICAgICBlNVswXS5hdHRyaWJ1dGVzLmNsYXNzID0gbzQudG9Tdmcuam9pbigiICIpLCBvNC50b05vZGUubGVuZ3RoID09PSAwID8gYTQucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpIDogYTQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIG80LnRvTm9kZS5qb2luKCIgIikpOwogICAgfQogICAgdmFyIGk0ID0gZTUubWFwKGZ1bmN0aW9uKHM4KSB7CiAgICAgIHJldHVybiBmbjIoczgpOwogICAgfSkuam9pbihgCmApOwogICAgYTQuc2V0QXR0cmlidXRlKEgxOSwgIiIpLCBhNC5pbm5lckhUTUwgPSBpNDsKICB9IH07CiAgZnVuY3Rpb24gaHQxMShuOCkgewogICAgbjgoKTsKICB9CiAgZnVuY3Rpb24gSnQzKG44LCB0NCkgewogICAgdmFyIGE0ID0gdHlwZW9mIHQ0ID09ICJmdW5jdGlvbiIgPyB0NCA6IGhuMzsKICAgIGlmIChuOC5sZW5ndGggPT09IDApCiAgICAgIGE0KCk7CiAgICBlbHNlIHsKICAgICAgdmFyIGU1ID0gaHQxMTsKICAgICAgbTIxLm11dGF0ZUFwcHJvYWNoID09PSBtYSAmJiAoZTUgPSBEMTgucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGh0MTEpLCBlNShmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcjMgPSByZTE3KCksIG80ID0gbnQxMi5iZWdpbigibXV0YXRlIik7CiAgICAgICAgbjgubWFwKHIzKSwgbzQoKSwgYTQoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIHZhciB0dDE1ID0gZmFsc2U7CiAgZnVuY3Rpb24gWnQ0KCkgewogICAgdHQxNSA9IHRydWU7CiAgfQogIGZ1bmN0aW9uIFVuMigpIHsKICAgIHR0MTUgPSBmYWxzZTsKICB9CiAgdmFyIHhuMiA9IG51bGw7CiAgZnVuY3Rpb24geXQ2KG44KSB7CiAgICBpZiAoISFzdDkgJiYgISFtMjEub2JzZXJ2ZU11dGF0aW9ucykgewogICAgICB2YXIgdDQgPSBuOC50cmVlQ2FsbGJhY2ssIGE0ID0gdDQgPT09IHZvaWQgMCA/IGhuMyA6IHQ0LCBlNSA9IG44Lm5vZGVDYWxsYmFjaywgcjMgPSBlNSA9PT0gdm9pZCAwID8gaG4zIDogZTUsIG80ID0gbjgucHNldWRvRWxlbWVudHNDYWxsYmFjaywgaTQgPSBvNCA9PT0gdm9pZCAwID8gaG4zIDogbzQsIHM4ID0gbjgub2JzZXJ2ZU11dGF0aW9uc1Jvb3QsIGYxMSA9IHM4ID09PSB2b2lkIDAgPyBiMjEgOiBzODsKICAgICAgeG4yID0gbmV3IHN0OShmdW5jdGlvbih1MTEpIHsKICAgICAgICBpZiAoIXR0MTUpIHsKICAgICAgICAgIHZhciBsNyA9IHoyMigpOwogICAgICAgICAgSzE2KHUxMSkuZm9yRWFjaChmdW5jdGlvbihkMTUpIHsKICAgICAgICAgICAgaWYgKGQxNS50eXBlID09PSAiY2hpbGRMaXN0IiAmJiBkMTUuYWRkZWROb2Rlcy5sZW5ndGggPiAwICYmICFidDUoZDE1LmFkZGVkTm9kZXNbMF0pICYmIChtMjEuc2VhcmNoUHNldWRvRWxlbWVudHMgJiYgaTQoZDE1LnRhcmdldCksIGE0KGQxNS50YXJnZXQpKSwgZDE1LnR5cGUgPT09ICJhdHRyaWJ1dGVzIiAmJiBkMTUudGFyZ2V0LnBhcmVudE5vZGUgJiYgbTIxLnNlYXJjaFBzZXVkb0VsZW1lbnRzICYmIGk0KGQxNS50YXJnZXQucGFyZW50Tm9kZSksIGQxNS50eXBlID09PSAiYXR0cmlidXRlcyIgJiYgYnQ1KGQxNS50YXJnZXQpICYmIH55YS5pbmRleE9mKGQxNS5hdHRyaWJ1dGVOYW1lKSkKICAgICAgICAgICAgICBpZiAoZDE1LmF0dHJpYnV0ZU5hbWUgPT09ICJjbGFzcyIgJiYgYWUxMyhkMTUudGFyZ2V0KSkgewogICAgICAgICAgICAgICAgdmFyIHYxNSA9IEVuMihWbjIoZDE1LnRhcmdldCkpLCBwMTggPSB2MTUucHJlZml4LCB3MjEgPSB2MTUuaWNvbk5hbWU7CiAgICAgICAgICAgICAgICBkMTUudGFyZ2V0LnNldEF0dHJpYnV0ZShHbjMsIHAxOCB8fCBsNyksIHcyMSAmJiBkMTUudGFyZ2V0LnNldEF0dHJpYnV0ZShYbjIsIHcyMSk7CiAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBlZTE1KGQxNS50YXJnZXQpICYmIHIzKGQxNS50YXJnZXQpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KSwgTDE3ICYmIHhuMi5vYnNlcnZlKGYxMSwgeyBjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGZlMTAoKSB7CiAgICAheG4yIHx8IHhuMi5kaXNjb25uZWN0KCk7CiAgfQogIGZ1bmN0aW9uIGxlMTMobjgpIHsKICAgIHZhciB0NCA9IG44LmdldEF0dHJpYnV0ZSgic3R5bGUiKSwgYTQgPSBbXTsKICAgIHJldHVybiB0NCAmJiAoYTQgPSB0NC5zcGxpdCgiOyIpLnJlZHVjZShmdW5jdGlvbihlNSwgcjMpIHsKICAgICAgdmFyIG80ID0gcjMuc3BsaXQoIjoiKSwgaTQgPSBvNFswXSwgczggPSBvNC5zbGljZSgxKTsKICAgICAgcmV0dXJuIGk0ICYmIHM4Lmxlbmd0aCA+IDAgJiYgKGU1W2k0XSA9IHM4LmpvaW4oIjoiKS50cmltKCkpLCBlNTsKICAgIH0sIHt9KSksIGE0OwogIH0KICBmdW5jdGlvbiBjZTEyKG44KSB7CiAgICB2YXIgdDQgPSBuOC5nZXRBdHRyaWJ1dGUoImRhdGEtcHJlZml4IiksIGE0ID0gbjguZ2V0QXR0cmlidXRlKCJkYXRhLWljb24iKSwgZTUgPSBuOC5pbm5lclRleHQgIT09IHZvaWQgMCA/IG44LmlubmVyVGV4dC50cmltKCkgOiAiIiwgcjMgPSBFbjIoVm4yKG44KSk7CiAgICByZXR1cm4gcjMucHJlZml4IHx8IChyMy5wcmVmaXggPSB6MjIoKSksIHQ0ICYmIGE0ICYmIChyMy5wcmVmaXggPSB0NCwgcjMuaWNvbk5hbWUgPSBhNCksIHIzLmljb25OYW1lICYmIHIzLnByZWZpeCB8fCAocjMucHJlZml4ICYmIGU1Lmxlbmd0aCA+IDAgJiYgKHIzLmljb25OYW1lID0gJGEocjMucHJlZml4LCBuOC5pbm5lclRleHQpIHx8IFFuMihyMy5wcmVmaXgsIFJuMihuOC5pbm5lclRleHQpKSksICFyMy5pY29uTmFtZSAmJiBtMjEuYXV0b0ZldGNoU3ZnICYmIG44LmZpcnN0Q2hpbGQgJiYgbjguZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgJiYgKHIzLmljb25OYW1lID0gbjguZmlyc3RDaGlsZC5kYXRhKSksIHIzOwogIH0KICBmdW5jdGlvbiB1ZTE1KG44KSB7CiAgICB2YXIgdDQgPSBLMTYobjguYXR0cmlidXRlcykucmVkdWNlKGZ1bmN0aW9uKHIzLCBvNCkgewogICAgICByZXR1cm4gcjMubmFtZSAhPT0gImNsYXNzIiAmJiByMy5uYW1lICE9PSAic3R5bGUiICYmIChyM1tvNC5uYW1lXSA9IG80LnZhbHVlKSwgcjM7CiAgICB9LCB7fSksIGE0ID0gbjguZ2V0QXR0cmlidXRlKCJ0aXRsZSIpLCBlNSA9IG44LmdldEF0dHJpYnV0ZSgiZGF0YS1mYS10aXRsZS1pZCIpOwogICAgcmV0dXJuIG0yMS5hdXRvQTExeSAmJiAoYTQgPyB0NFsiYXJpYS1sYWJlbGxlZGJ5Il0gPSAiIi5jb25jYXQobTIxLnJlcGxhY2VtZW50Q2xhc3MsICItdGl0bGUtIikuY29uY2F0KGU1IHx8IHJuMygpKSA6ICh0NFsiYXJpYS1oaWRkZW4iXSA9ICJ0cnVlIiwgdDQuZm9jdXNhYmxlID0gImZhbHNlIikpLCB0NDsKICB9CiAgZnVuY3Rpb24gbWUxNSgpIHsKICAgIHJldHVybiB7IGljb25OYW1lOiBudWxsLCB0aXRsZTogbnVsbCwgdGl0bGVJZDogbnVsbCwgcHJlZml4OiBudWxsLCB0cmFuc2Zvcm06IE4xNCwgc3ltYm9sOiBmYWxzZSwgbWFzazogeyBpY29uTmFtZTogbnVsbCwgcHJlZml4OiBudWxsLCByZXN0OiBbXSB9LCBtYXNrSWQ6IG51bGwsIGV4dHJhOiB7IGNsYXNzZXM6IFtdLCBzdHlsZXM6IHt9LCBhdHRyaWJ1dGVzOiB7fSB9IH07CiAgfQogIGZ1bmN0aW9uIGt0NihuOCkgewogICAgdmFyIHQ0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7IHN0eWxlUGFyc2VyOiB0cnVlIH0sIGE0ID0gY2UxMihuOCksIGU1ID0gYTQuaWNvbk5hbWUsIHIzID0gYTQucHJlZml4LCBvNCA9IGE0LnJlc3QsIGk0ID0gdWUxNShuOCksIHM4ID0gRG4yKCJwYXJzZU5vZGVBdHRyaWJ1dGVzIiwge30sIG44KSwgZjExID0gdDQuc3R5bGVQYXJzZXIgPyBsZTEzKG44KSA6IFtdOwogICAgcmV0dXJuIGMxNCh7IGljb25OYW1lOiBlNSwgdGl0bGU6IG44LmdldEF0dHJpYnV0ZSgidGl0bGUiKSwgdGl0bGVJZDogbjguZ2V0QXR0cmlidXRlKCJkYXRhLWZhLXRpdGxlLWlkIiksIHByZWZpeDogcjMsIHRyYW5zZm9ybTogTjE0LCBtYXNrOiB7IGljb25OYW1lOiBudWxsLCBwcmVmaXg6IG51bGwsIHJlc3Q6IFtdIH0sIG1hc2tJZDogbnVsbCwgc3ltYm9sOiBmYWxzZSwgZXh0cmE6IHsgY2xhc3NlczogbzQsIHN0eWxlczogZjExLCBhdHRyaWJ1dGVzOiBpNCB9IH0sIHM4KTsKICB9CiAgdmFyIGRlOSA9IFAyNC5zdHlsZXM7CiAgZnVuY3Rpb24gbmEobjgpIHsKICAgIHZhciB0NCA9IG0yMS5hdXRvUmVwbGFjZVN2ZyA9PT0gIm5lc3QiID8ga3Q2KG44LCB7IHN0eWxlUGFyc2VyOiBmYWxzZSB9KSA6IGt0NihuOCk7CiAgICByZXR1cm4gfnQ0LmV4dHJhLmNsYXNzZXMuaW5kZXhPZihGdDQpID8gTTE5KCJnZW5lcmF0ZUxheWVyc1RleHQiLCBuOCwgdDQpIDogTTE5KCJnZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb24iLCBuOCwgdDQpOwogIH0KICB2YXIgajE1ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBCbjIubWFwKGZ1bmN0aW9uKG44KSB7CiAgICBqMTUuYWRkKCJmYS0iLmNvbmNhdChuOCkpOwogIH0pOwogIE9iamVjdC5rZXlzKG5uNFtnOV0pLm1hcChqMTUuYWRkLmJpbmQoajE1KSk7CiAgT2JqZWN0LmtleXMobm40W2g3XSkubWFwKGoxNS5hZGQuYmluZChqMTUpKTsKICBqMTUgPSBvbjQoajE1KTsKICBmdW5jdGlvbiB3dDcobjgpIHsKICAgIHZhciB0NCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogbnVsbDsKICAgIGlmICghTDE3KQogICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICB2YXIgYTQgPSBiMjEuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdCwgZTUgPSBmdW5jdGlvbihkMTUpIHsKICAgICAgcmV0dXJuIGE0LmFkZCgiIi5jb25jYXQoZnQ2LCAiLSIpLmNvbmNhdChkMTUpKTsKICAgIH0sIHIzID0gZnVuY3Rpb24oZDE1KSB7CiAgICAgIHJldHVybiBhNC5yZW1vdmUoIiIuY29uY2F0KGZ0NiwgIi0iKS5jb25jYXQoZDE1KSk7CiAgICB9LCBvNCA9IG0yMS5hdXRvRmV0Y2hTdmcgPyBqMTUgOiBCbjIubWFwKGZ1bmN0aW9uKGw3KSB7CiAgICAgIHJldHVybiAiZmEtIi5jb25jYXQobDcpOwogICAgfSkuY29uY2F0KE9iamVjdC5rZXlzKGRlOSkpOwogICAgbzQuaW5jbHVkZXMoImZhIikgfHwgbzQucHVzaCgiZmEiKTsKICAgIHZhciBpNCA9IFsiLiIuY29uY2F0KEZ0NCwgIjpub3QoWyIpLmNvbmNhdChIMTksICJdKSIpXS5jb25jYXQobzQubWFwKGZ1bmN0aW9uKGw3KSB7CiAgICAgIHJldHVybiAiLiIuY29uY2F0KGw3LCAiOm5vdChbIikuY29uY2F0KEgxOSwgIl0pIik7CiAgICB9KSkuam9pbigiLCAiKTsKICAgIGlmIChpNC5sZW5ndGggPT09IDApCiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICAgIHZhciBzOCA9IFtdOwogICAgdHJ5IHsKICAgICAgczggPSBLMTYobjgucXVlcnlTZWxlY3RvckFsbChpNCkpOwogICAgfSBjYXRjaCB7CiAgICB9CiAgICBpZiAoczgubGVuZ3RoID4gMCkKICAgICAgZTUoInBlbmRpbmciKSwgcjMoImNvbXBsZXRlIik7CiAgICBlbHNlCiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICAgIHZhciBmMTEgPSBudDEyLmJlZ2luKCJvblRyZWUiKSwgdTExID0gczgucmVkdWNlKGZ1bmN0aW9uKGw3LCBkMTUpIHsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgdjE1ID0gbmEoZDE1KTsKICAgICAgICB2MTUgJiYgbDcucHVzaCh2MTUpOwogICAgICB9IGNhdGNoIChwMTgpIHsKICAgICAgICBSdDEwIHx8IHAxOC5uYW1lID09PSAiTWlzc2luZ0ljb24iICYmIGNvbnNvbGUuZXJyb3IocDE4KTsKICAgICAgfQogICAgICByZXR1cm4gbDc7CiAgICB9LCBbXSk7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obDcsIGQxNSkgewogICAgICBQcm9taXNlLmFsbCh1MTEpLnRoZW4oZnVuY3Rpb24odjE1KSB7CiAgICAgICAgSnQzKHYxNSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBlNSgiYWN0aXZlIiksIGU1KCJjb21wbGV0ZSIpLCByMygicGVuZGluZyIpLCB0eXBlb2YgdDQgPT0gImZ1bmN0aW9uIiAmJiB0NCgpLCBmMTEoKSwgbDcoKTsKICAgICAgICB9KTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24odjE1KSB7CiAgICAgICAgZjExKCksIGQxNSh2MTUpOwogICAgICB9KTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiB2ZTEwKG44KSB7CiAgICB2YXIgdDQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IG51bGw7CiAgICBuYShuOCkudGhlbihmdW5jdGlvbihhNCkgewogICAgICBhNCAmJiBKdDMoW2E0XSwgdDQpOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIHBlMTAobjgpIHsKICAgIHJldHVybiBmdW5jdGlvbih0NCkgewogICAgICB2YXIgYTQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCBlNSA9ICh0NCB8fCB7fSkuaWNvbiA/IHQ0IDogem4yKHQ0IHx8IHt9KSwgcjMgPSBhNC5tYXNrOwogICAgICByZXR1cm4gcjMgJiYgKHIzID0gKHIzIHx8IHt9KS5pY29uID8gcjMgOiB6bjIocjMgfHwge30pKSwgbjgoZTUsIGMxNChjMTQoe30sIGE0KSwge30sIHsgbWFzazogcjMgfSkpOwogICAgfTsKICB9CiAgdmFyIGdlMTAgPSBmdW5jdGlvbih0NCkgewogICAgdmFyIGE0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fSwgZTUgPSBhNC50cmFuc2Zvcm0sIHIzID0gZTUgPT09IHZvaWQgMCA/IE4xNCA6IGU1LCBvNCA9IGE0LnN5bWJvbCwgaTQgPSBvNCA9PT0gdm9pZCAwID8gZmFsc2UgOiBvNCwgczggPSBhNC5tYXNrLCBmMTEgPSBzOCA9PT0gdm9pZCAwID8gbnVsbCA6IHM4LCB1MTEgPSBhNC5tYXNrSWQsIGw3ID0gdTExID09PSB2b2lkIDAgPyBudWxsIDogdTExLCBkMTUgPSBhNC50aXRsZSwgdjE1ID0gZDE1ID09PSB2b2lkIDAgPyBudWxsIDogZDE1LCBwMTggPSBhNC50aXRsZUlkLCB3MjEgPSBwMTggPT09IHZvaWQgMCA/IG51bGwgOiBwMTgsIEUxNSA9IGE0LmNsYXNzZXMsIE8xNSA9IEUxNSA9PT0gdm9pZCAwID8gW10gOiBFMTUsIEMxNyA9IGE0LmF0dHJpYnV0ZXMsIGsxOCA9IEMxNyA9PT0gdm9pZCAwID8ge30gOiBDMTcsIHgyMSA9IGE0LnN0eWxlcywgSTI3ID0geDIxID09PSB2b2lkIDAgPyB7fSA6IHgyMTsKICAgIGlmICghIXQ0KSB7CiAgICAgIHZhciBBMjAgPSB0NC5wcmVmaXgsIFkzMCA9IHQ0Lmljb25OYW1lLCAkMjEgPSB0NC5pY29uOwogICAgICByZXR1cm4gT24yKGMxNCh7IHR5cGU6ICJpY29uIiB9LCB0NCksIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBHMTkoImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbiIsIHsgaWNvbkRlZmluaXRpb246IHQ0LCBwYXJhbXM6IGE0IH0pLCBtMjEuYXV0b0ExMXkgJiYgKHYxNSA/IGsxOFsiYXJpYS1sYWJlbGxlZGJ5Il0gPSAiIi5jb25jYXQobTIxLnJlcGxhY2VtZW50Q2xhc3MsICItdGl0bGUtIikuY29uY2F0KHcyMSB8fCBybjMoKSkgOiAoazE4WyJhcmlhLWhpZGRlbiJdID0gInRydWUiLCBrMTguZm9jdXNhYmxlID0gImZhbHNlIikpLCBabjIoeyBpY29uczogeyBtYWluOiBqbjIoJDIxKSwgbWFzazogZjExID8gam4yKGYxMS5pY29uKSA6IHsgZm91bmQ6IGZhbHNlLCB3aWR0aDogbnVsbCwgaGVpZ2h0OiBudWxsLCBpY29uOiB7fSB9IH0sIHByZWZpeDogQTIwLCBpY29uTmFtZTogWTMwLCB0cmFuc2Zvcm06IGMxNChjMTQoe30sIE4xNCksIHIzKSwgc3ltYm9sOiBpNCwgdGl0bGU6IHYxNSwgbWFza0lkOiBsNywgdGl0bGVJZDogdzIxLCBleHRyYTogeyBhdHRyaWJ1dGVzOiBrMTgsIHN0eWxlczogSTI3LCBjbGFzc2VzOiBPMTUgfSB9KTsKICAgICAgfSk7CiAgICB9CiAgfTsKICB2YXIgYmUxMCA9IHsgbWl4b3V0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB7IGljb246IHBlMTAoZ2UxMCkgfTsKICB9LCBob29rczogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4geyBtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzOiBmdW5jdGlvbihhNCkgewogICAgICByZXR1cm4gYTQudHJlZUNhbGxiYWNrID0gd3Q3LCBhNC5ub2RlQ2FsbGJhY2sgPSB2ZTEwLCBhNDsKICAgIH0gfTsKICB9LCBwcm92aWRlczogZnVuY3Rpb24odDQpIHsKICAgIHQ0Lmkyc3ZnID0gZnVuY3Rpb24oYTQpIHsKICAgICAgdmFyIGU1ID0gYTQubm9kZSwgcjMgPSBlNSA9PT0gdm9pZCAwID8gYjIxIDogZTUsIG80ID0gYTQuY2FsbGJhY2ssIGk0ID0gbzQgPT09IHZvaWQgMCA/IGZ1bmN0aW9uKCkgewogICAgICB9IDogbzQ7CiAgICAgIHJldHVybiB3dDcocjMsIGk0KTsKICAgIH0sIHQ0LmdlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbiA9IGZ1bmN0aW9uKGE0LCBlNSkgewogICAgICB2YXIgcjMgPSBlNS5pY29uTmFtZSwgbzQgPSBlNS50aXRsZSwgaTQgPSBlNS50aXRsZUlkLCBzOCA9IGU1LnByZWZpeCwgZjExID0gZTUudHJhbnNmb3JtLCB1MTEgPSBlNS5zeW1ib2wsIGw3ID0gZTUubWFzaywgZDE1ID0gZTUubWFza0lkLCB2MTUgPSBlNS5leHRyYTsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHAxOCwgdzIxKSB7CiAgICAgICAgUHJvbWlzZS5hbGwoW1luMihyMywgczgpLCBsNy5pY29uTmFtZSA/IFluMihsNy5pY29uTmFtZSwgbDcucHJlZml4KSA6IFByb21pc2UucmVzb2x2ZSh7IGZvdW5kOiBmYWxzZSwgd2lkdGg6IDUxMiwgaGVpZ2h0OiA1MTIsIGljb246IHt9IH0pXSkudGhlbihmdW5jdGlvbihFMTUpIHsKICAgICAgICAgIHZhciBPMTUgPSBXbjIoRTE1LCAyKSwgQzE3ID0gTzE1WzBdLCBrMTggPSBPMTVbMV07CiAgICAgICAgICBwMTgoW2E0LCBabjIoeyBpY29uczogeyBtYWluOiBDMTcsIG1hc2s6IGsxOCB9LCBwcmVmaXg6IHM4LCBpY29uTmFtZTogcjMsIHRyYW5zZm9ybTogZjExLCBzeW1ib2w6IHUxMSwgbWFza0lkOiBkMTUsIHRpdGxlOiBvNCwgdGl0bGVJZDogaTQsIGV4dHJhOiB2MTUsIHdhdGNoYWJsZTogdHJ1ZSB9KV0pOwogICAgICAgIH0pLmNhdGNoKHcyMSk7CiAgICAgIH0pOwogICAgfSwgdDQuZ2VuZXJhdGVBYnN0cmFjdEljb24gPSBmdW5jdGlvbihhNCkgewogICAgICB2YXIgZTUgPSBhNC5jaGlsZHJlbiwgcjMgPSBhNC5hdHRyaWJ1dGVzLCBvNCA9IGE0Lm1haW4sIGk0ID0gYTQudHJhbnNmb3JtLCBzOCA9IGE0LnN0eWxlcywgZjExID0gQW4yKHM4KTsKICAgICAgZjExLmxlbmd0aCA+IDAgJiYgKHIzLnN0eWxlID0gZjExKTsKICAgICAgdmFyIHUxMTsKICAgICAgcmV0dXJuIHFuMihpNCkgJiYgKHUxMSA9IE0xOSgiZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nIiwgeyBtYWluOiBvNCwgdHJhbnNmb3JtOiBpNCwgY29udGFpbmVyV2lkdGg6IG80LndpZHRoLCBpY29uV2lkdGg6IG80LndpZHRoIH0pKSwgZTUucHVzaCh1MTEgfHwgbzQuaWNvbiksIHsgY2hpbGRyZW46IGU1LCBhdHRyaWJ1dGVzOiByMyB9OwogICAgfTsKICB9IH07CiAgdmFyIGhlMTAgPSB7IG1peG91dDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4geyBsYXllcjogZnVuY3Rpb24oYTQpIHsKICAgICAgdmFyIGU1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fSwgcjMgPSBlNS5jbGFzc2VzLCBvNCA9IHIzID09PSB2b2lkIDAgPyBbXSA6IHIzOwogICAgICByZXR1cm4gT24yKHsgdHlwZTogImxheWVyIiB9LCBmdW5jdGlvbigpIHsKICAgICAgICBHMTkoImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbiIsIHsgYXNzZW1ibGVyOiBhNCwgcGFyYW1zOiBlNSB9KTsKICAgICAgICB2YXIgaTQgPSBbXTsKICAgICAgICByZXR1cm4gYTQoZnVuY3Rpb24oczgpIHsKICAgICAgICAgIEFycmF5LmlzQXJyYXkoczgpID8gczgubWFwKGZ1bmN0aW9uKGYxMSkgewogICAgICAgICAgICBpNCA9IGk0LmNvbmNhdChmMTEuYWJzdHJhY3QpOwogICAgICAgICAgfSkgOiBpNCA9IGk0LmNvbmNhdChzOC5hYnN0cmFjdCk7CiAgICAgICAgfSksIFt7IHRhZzogInNwYW4iLCBhdHRyaWJ1dGVzOiB7IGNsYXNzOiBbIiIuY29uY2F0KG0yMS5jc3NQcmVmaXgsICItbGF5ZXJzIildLmNvbmNhdChvbjQobzQpKS5qb2luKCIgIikgfSwgY2hpbGRyZW46IGk0IH1dOwogICAgICB9KTsKICAgIH0gfTsKICB9IH07CiAgdmFyIHllMTIgPSB7IG1peG91dDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4geyBjb3VudGVyOiBmdW5jdGlvbihhNCkgewogICAgICB2YXIgZTUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCByMyA9IGU1LnRpdGxlLCBvNCA9IHIzID09PSB2b2lkIDAgPyBudWxsIDogcjMsIGk0ID0gZTUuY2xhc3NlcywgczggPSBpNCA9PT0gdm9pZCAwID8gW10gOiBpNCwgZjExID0gZTUuYXR0cmlidXRlcywgdTExID0gZjExID09PSB2b2lkIDAgPyB7fSA6IGYxMSwgbDcgPSBlNS5zdHlsZXMsIGQxNSA9IGw3ID09PSB2b2lkIDAgPyB7fSA6IGw3OwogICAgICByZXR1cm4gT24yKHsgdHlwZTogImNvdW50ZXIiLCBjb250ZW50OiBhNCB9LCBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gRzE5KCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb24iLCB7IGNvbnRlbnQ6IGE0LCBwYXJhbXM6IGU1IH0pLCBKYSh7IGNvbnRlbnQ6IGE0LnRvU3RyaW5nKCksIHRpdGxlOiBvNCwgZXh0cmE6IHsgYXR0cmlidXRlczogdTExLCBzdHlsZXM6IGQxNSwgY2xhc3NlczogWyIiLmNvbmNhdChtMjEuY3NzUHJlZml4LCAiLWxheWVycy1jb3VudGVyIildLmNvbmNhdChvbjQoczgpKSB9IH0pOwogICAgICB9KTsKICAgIH0gfTsKICB9IH07CiAgdmFyIGtlMTMgPSB7IG1peG91dDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4geyB0ZXh0OiBmdW5jdGlvbihhNCkgewogICAgICB2YXIgZTUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9LCByMyA9IGU1LnRyYW5zZm9ybSwgbzQgPSByMyA9PT0gdm9pZCAwID8gTjE0IDogcjMsIGk0ID0gZTUudGl0bGUsIHM4ID0gaTQgPT09IHZvaWQgMCA/IG51bGwgOiBpNCwgZjExID0gZTUuY2xhc3NlcywgdTExID0gZjExID09PSB2b2lkIDAgPyBbXSA6IGYxMSwgbDcgPSBlNS5hdHRyaWJ1dGVzLCBkMTUgPSBsNyA9PT0gdm9pZCAwID8ge30gOiBsNywgdjE1ID0gZTUuc3R5bGVzLCBwMTggPSB2MTUgPT09IHZvaWQgMCA/IHt9IDogdjE1OwogICAgICByZXR1cm4gT24yKHsgdHlwZTogInRleHQiLCBjb250ZW50OiBhNCB9LCBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gRzE5KCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb24iLCB7IGNvbnRlbnQ6IGE0LCBwYXJhbXM6IGU1IH0pLCBwdDEwKHsgY29udGVudDogYTQsIHRyYW5zZm9ybTogYzE0KGMxNCh7fSwgTjE0KSwgbzQpLCB0aXRsZTogczgsIGV4dHJhOiB7IGF0dHJpYnV0ZXM6IGQxNSwgc3R5bGVzOiBwMTgsIGNsYXNzZXM6IFsiIi5jb25jYXQobTIxLmNzc1ByZWZpeCwgIi1sYXllcnMtdGV4dCIpXS5jb25jYXQob240KHUxMSkpIH0gfSk7CiAgICAgIH0pOwogICAgfSB9OwogIH0sIHByb3ZpZGVzOiBmdW5jdGlvbih0NCkgewogICAgdDQuZ2VuZXJhdGVMYXllcnNUZXh0ID0gZnVuY3Rpb24oYTQsIGU1KSB7CiAgICAgIHZhciByMyA9IGU1LnRpdGxlLCBvNCA9IGU1LnRyYW5zZm9ybSwgaTQgPSBlNS5leHRyYSwgczggPSBudWxsLCBmMTEgPSBudWxsOwogICAgICBpZiAoVHQ5KSB7CiAgICAgICAgdmFyIHUxMSA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYTQpLmZvbnRTaXplLCAxMCksIGw3ID0gYTQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgczggPSBsNy53aWR0aCAvIHUxMSwgZjExID0gbDcuaGVpZ2h0IC8gdTExOwogICAgICB9CiAgICAgIHJldHVybiBtMjEuYXV0b0ExMXkgJiYgIXIzICYmIChpNC5hdHRyaWJ1dGVzWyJhcmlhLWhpZGRlbiJdID0gInRydWUiKSwgUHJvbWlzZS5yZXNvbHZlKFthNCwgcHQxMCh7IGNvbnRlbnQ6IGE0LmlubmVySFRNTCwgd2lkdGg6IHM4LCBoZWlnaHQ6IGYxMSwgdHJhbnNmb3JtOiBvNCwgdGl0bGU6IHIzLCBleHRyYTogaTQsIHdhdGNoYWJsZTogdHJ1ZSB9KV0pOwogICAgfTsKICB9IH07CiAgdmFyIHdlOCA9IG5ldyBSZWdFeHAoJyInLCAidWciKTsKICB2YXIgeHQxMSA9IFsxMTA1OTIwLCAxMTEyMzE5XTsKICBmdW5jdGlvbiB4ZTExKG44KSB7CiAgICB2YXIgdDQgPSBuOC5yZXBsYWNlKHdlOCwgIiIpLCBhNCA9IFJhKHQ0LCAwKSwgZTUgPSBhNCA+PSB4dDExWzBdICYmIGE0IDw9IHh0MTFbMV0sIHIzID0gdDQubGVuZ3RoID09PSAyID8gdDRbMF0gPT09IHQ0WzFdIDogZmFsc2U7CiAgICByZXR1cm4geyB2YWx1ZTogUm4yKHIzID8gdDRbMF0gOiB0NCksIGlzU2Vjb25kYXJ5OiBlNSB8fCByMyB9OwogIH0KICBmdW5jdGlvbiBBdDkobjgsIHQ0KSB7CiAgICB2YXIgYTQgPSAiIi5jb25jYXQodWEpLmNvbmNhdCh0NC5yZXBsYWNlKCI6IiwgIi0iKSk7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZTUsIHIzKSB7CiAgICAgIGlmIChuOC5nZXRBdHRyaWJ1dGUoYTQpICE9PSBudWxsKQogICAgICAgIHJldHVybiBlNSgpOwogICAgICB2YXIgbzQgPSBLMTYobjguY2hpbGRyZW4pLCBpNCA9IG80LmZpbHRlcihmdW5jdGlvbigkMjEpIHsKICAgICAgICByZXR1cm4gJDIxLmdldEF0dHJpYnV0ZShMbjIpID09PSB0NDsKICAgICAgfSlbMF0sIHM4ID0gRDE4LmdldENvbXB1dGVkU3R5bGUobjgsIHQ0KSwgZjExID0gczguZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC1mYW1pbHkiKS5tYXRjaChnYSksIHUxMSA9IHM4LmdldFByb3BlcnR5VmFsdWUoImZvbnQtd2VpZ2h0IiksIGw3ID0gczguZ2V0UHJvcGVydHlWYWx1ZSgiY29udGVudCIpOwogICAgICBpZiAoaTQgJiYgIWYxMSkKICAgICAgICByZXR1cm4gbjgucmVtb3ZlQ2hpbGQoaTQpLCBlNSgpOwogICAgICBpZiAoZjExICYmIGw3ICE9PSAibm9uZSIgJiYgbDcgIT09ICIiKSB7CiAgICAgICAgdmFyIGQxNSA9IHM4LmdldFByb3BlcnR5VmFsdWUoImNvbnRlbnQiKSwgdjE1ID0gflsiU2hhcnAiXS5pbmRleE9mKGYxMVsyXSkgPyBoNyA6IGc5LCBwMTggPSB+WyJTb2xpZCIsICJSZWd1bGFyIiwgIkxpZ2h0IiwgIlRoaW4iLCAiRHVvdG9uZSIsICJCcmFuZHMiLCAiS2l0Il0uaW5kZXhPZihmMTFbMl0pID8gdG4zW3YxNV1bZjExWzJdLnRvTG93ZXJDYXNlKCldIDogYmFbdjE1XVt1MTFdLCB3MjEgPSB4ZTExKGQxNSksIEUxNSA9IHcyMS52YWx1ZSwgTzE1ID0gdzIxLmlzU2Vjb25kYXJ5LCBDMTcgPSBmMTFbMF0uc3RhcnRzV2l0aCgiRm9udEF3ZXNvbWUiKSwgazE4ID0gUW4yKHAxOCwgRTE1KSwgeDIxID0gazE4OwogICAgICAgIGlmIChDMTcpIHsKICAgICAgICAgIHZhciBJMjcgPSBVYShFMTUpOwogICAgICAgICAgSTI3Lmljb25OYW1lICYmIEkyNy5wcmVmaXggJiYgKGsxOCA9IEkyNy5pY29uTmFtZSwgcDE4ID0gSTI3LnByZWZpeCk7CiAgICAgICAgfQogICAgICAgIGlmIChrMTggJiYgIU8xNSAmJiAoIWk0IHx8IGk0LmdldEF0dHJpYnV0ZShHbjMpICE9PSBwMTggfHwgaTQuZ2V0QXR0cmlidXRlKFhuMikgIT09IHgyMSkpIHsKICAgICAgICAgIG44LnNldEF0dHJpYnV0ZShhNCwgeDIxKSwgaTQgJiYgbjgucmVtb3ZlQ2hpbGQoaTQpOwogICAgICAgICAgdmFyIEEyMCA9IG1lMTUoKSwgWTMwID0gQTIwLmV4dHJhOwogICAgICAgICAgWTMwLmF0dHJpYnV0ZXNbTG4yXSA9IHQ0LCBZbjIoazE4LCBwMTgpLnRoZW4oZnVuY3Rpb24oJDIxKSB7CiAgICAgICAgICAgIHZhciBQbjMgPSBabjIoYzE0KGMxNCh7fSwgQTIwKSwge30sIHsgaWNvbnM6IHsgbWFpbjogJDIxLCBtYXNrOiBKbjIoKSB9LCBwcmVmaXg6IHAxOCwgaWNvbk5hbWU6IHgyMSwgZXh0cmE6IFkzMCwgd2F0Y2hhYmxlOiB0cnVlIH0pKSwgUjI2ID0gYjIxLmNyZWF0ZUVsZW1lbnQoInN2ZyIpOwogICAgICAgICAgICB0NCA9PT0gIjo6YmVmb3JlIiA/IG44Lmluc2VydEJlZm9yZShSMjYsIG44LmZpcnN0Q2hpbGQpIDogbjguYXBwZW5kQ2hpbGQoUjI2KSwgUjI2Lm91dGVySFRNTCA9IFBuMy5tYXAoZnVuY3Rpb24odGEpIHsKICAgICAgICAgICAgICByZXR1cm4gZm4yKHRhKTsKICAgICAgICAgICAgfSkuam9pbihgCmApLCBuOC5yZW1vdmVBdHRyaWJ1dGUoYTQpLCBlNSgpOwogICAgICAgICAgfSkuY2F0Y2gocjMpOwogICAgICAgIH0gZWxzZQogICAgICAgICAgZTUoKTsKICAgICAgfSBlbHNlCiAgICAgICAgZTUoKTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBBZTE1KG44KSB7CiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW0F0OShuOCwgIjo6YmVmb3JlIiksIEF0OShuOCwgIjo6YWZ0ZXIiKV0pOwogIH0KICBmdW5jdGlvbiBTZTExKG44KSB7CiAgICByZXR1cm4gbjgucGFyZW50Tm9kZSAhPT0gZG9jdW1lbnQuaGVhZCAmJiAhfmRhLmluZGV4T2YobjgudGFnTmFtZS50b1VwcGVyQ2FzZSgpKSAmJiAhbjguZ2V0QXR0cmlidXRlKExuMikgJiYgKCFuOC5wYXJlbnROb2RlIHx8IG44LnBhcmVudE5vZGUudGFnTmFtZSAhPT0gInN2ZyIpOwogIH0KICBmdW5jdGlvbiBTdDgobjgpIHsKICAgIGlmICghIUwxNykKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQ0LCBhNCkgewogICAgICAgIHZhciBlNSA9IEsxNihuOC5xdWVyeVNlbGVjdG9yQWxsKCIqIikpLmZpbHRlcihTZTExKS5tYXAoQWUxNSksIHIzID0gbnQxMi5iZWdpbigic2VhcmNoUHNldWRvRWxlbWVudHMiKTsKICAgICAgICBadDQoKSwgUHJvbWlzZS5hbGwoZTUpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICByMygpLCBVbjIoKSwgdDQoKTsKICAgICAgICB9KS5jYXRjaChmdW5jdGlvbigpIHsKICAgICAgICAgIHIzKCksIFVuMigpLCBhNCgpOwogICAgICAgIH0pOwogICAgICB9KTsKICB9CiAgdmFyIEVlNyA9IHsgaG9va3M6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHsgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrczogZnVuY3Rpb24oYTQpIHsKICAgICAgcmV0dXJuIGE0LnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sgPSBTdDgsIGE0OwogICAgfSB9OwogIH0sIHByb3ZpZGVzOiBmdW5jdGlvbih0NCkgewogICAgdDQucHNldWRvRWxlbWVudHMyc3ZnID0gZnVuY3Rpb24oYTQpIHsKICAgICAgdmFyIGU1ID0gYTQubm9kZSwgcjMgPSBlNSA9PT0gdm9pZCAwID8gYjIxIDogZTU7CiAgICAgIG0yMS5zZWFyY2hQc2V1ZG9FbGVtZW50cyAmJiBTdDgocjMpOwogICAgfTsKICB9IH07CiAgdmFyIEV0OCA9IGZhbHNlOwogIHZhciBPZTExID0geyBtaXhvdXQ6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHsgZG9tOiB7IHVud2F0Y2g6IGZ1bmN0aW9uKCkgewogICAgICBadDQoKSwgRXQ4ID0gdHJ1ZTsKICAgIH0gfSB9OwogIH0sIGhvb2tzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB7IGJvb3RzdHJhcDogZnVuY3Rpb24oKSB7CiAgICAgIHl0NihEbjIoIm11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MiLCB7fSkpOwogICAgfSwgbm9BdXRvOiBmdW5jdGlvbigpIHsKICAgICAgZmUxMCgpOwogICAgfSwgd2F0Y2g6IGZ1bmN0aW9uKGE0KSB7CiAgICAgIHZhciBlNSA9IGE0Lm9ic2VydmVNdXRhdGlvbnNSb290OwogICAgICBFdDggPyBVbjIoKSA6IHl0NihEbjIoIm11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MiLCB7IG9ic2VydmVNdXRhdGlvbnNSb290OiBlNSB9KSk7CiAgICB9IH07CiAgfSB9OwogIHZhciBPdDEwID0gZnVuY3Rpb24odDQpIHsKICAgIHZhciBhNCA9IHsgc2l6ZTogMTYsIHg6IDAsIHk6IDAsIGZsaXBYOiBmYWxzZSwgZmxpcFk6IGZhbHNlLCByb3RhdGU6IDAgfTsKICAgIHJldHVybiB0NC50b0xvd2VyQ2FzZSgpLnNwbGl0KCIgIikucmVkdWNlKGZ1bmN0aW9uKGU1LCByMykgewogICAgICB2YXIgbzQgPSByMy50b0xvd2VyQ2FzZSgpLnNwbGl0KCItIiksIGk0ID0gbzRbMF0sIHM4ID0gbzQuc2xpY2UoMSkuam9pbigiLSIpOwogICAgICBpZiAoaTQgJiYgczggPT09ICJoIikKICAgICAgICByZXR1cm4gZTUuZmxpcFggPSB0cnVlLCBlNTsKICAgICAgaWYgKGk0ICYmIHM4ID09PSAidiIpCiAgICAgICAgcmV0dXJuIGU1LmZsaXBZID0gdHJ1ZSwgZTU7CiAgICAgIGlmIChzOCA9IHBhcnNlRmxvYXQoczgpLCBpc05hTihzOCkpCiAgICAgICAgcmV0dXJuIGU1OwogICAgICBzd2l0Y2ggKGk0KSB7CiAgICAgICAgY2FzZSAiZ3JvdyI6CiAgICAgICAgICBlNS5zaXplID0gZTUuc2l6ZSArIHM4OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAic2hyaW5rIjoKICAgICAgICAgIGU1LnNpemUgPSBlNS5zaXplIC0gczg7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJsZWZ0IjoKICAgICAgICAgIGU1LnggPSBlNS54IC0gczg7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJyaWdodCI6CiAgICAgICAgICBlNS54ID0gZTUueCArIHM4OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAidXAiOgogICAgICAgICAgZTUueSA9IGU1LnkgLSBzODsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImRvd24iOgogICAgICAgICAgZTUueSA9IGU1LnkgKyBzODsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInJvdGF0ZSI6CiAgICAgICAgICBlNS5yb3RhdGUgPSBlNS5yb3RhdGUgKyBzODsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBlNTsKICAgIH0sIGE0KTsKICB9OwogIHZhciBQZTEyID0geyBtaXhvdXQ6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHsgcGFyc2U6IHsgdHJhbnNmb3JtOiBmdW5jdGlvbihhNCkgewogICAgICByZXR1cm4gT3QxMChhNCk7CiAgICB9IH0gfTsKICB9LCBob29rczogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4geyBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbihhNCwgZTUpIHsKICAgICAgdmFyIHIzID0gZTUuZ2V0QXR0cmlidXRlKCJkYXRhLWZhLXRyYW5zZm9ybSIpOwogICAgICByZXR1cm4gcjMgJiYgKGE0LnRyYW5zZm9ybSA9IE90MTAocjMpKSwgYTQ7CiAgICB9IH07CiAgfSwgcHJvdmlkZXM6IGZ1bmN0aW9uKHQ0KSB7CiAgICB0NC5nZW5lcmF0ZUFic3RyYWN0VHJhbnNmb3JtR3JvdXBpbmcgPSBmdW5jdGlvbihhNCkgewogICAgICB2YXIgZTUgPSBhNC5tYWluLCByMyA9IGE0LnRyYW5zZm9ybSwgbzQgPSBhNC5jb250YWluZXJXaWR0aCwgaTQgPSBhNC5pY29uV2lkdGgsIHM4ID0geyB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQobzQgLyAyLCAiIDI1NikiKSB9LCBmMTEgPSAidHJhbnNsYXRlKCIuY29uY2F0KHIzLnggKiAzMiwgIiwgIikuY29uY2F0KHIzLnkgKiAzMiwgIikgIiksIHUxMSA9ICJzY2FsZSgiLmNvbmNhdChyMy5zaXplIC8gMTYgKiAocjMuZmxpcFggPyAtMSA6IDEpLCAiLCAiKS5jb25jYXQocjMuc2l6ZSAvIDE2ICogKHIzLmZsaXBZID8gLTEgOiAxKSwgIikgIiksIGw3ID0gInJvdGF0ZSgiLmNvbmNhdChyMy5yb3RhdGUsICIgMCAwKSIpLCBkMTUgPSB7IHRyYW5zZm9ybTogIiIuY29uY2F0KGYxMSwgIiAiKS5jb25jYXQodTExLCAiICIpLmNvbmNhdChsNykgfSwgdjE1ID0geyB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQoaTQgLyAyICogLTEsICIgLTI1NikiKSB9LCBwMTggPSB7IG91dGVyOiBzOCwgaW5uZXI6IGQxNSwgcGF0aDogdjE1IH07CiAgICAgIHJldHVybiB7IHRhZzogImciLCBhdHRyaWJ1dGVzOiBjMTQoe30sIHAxOC5vdXRlciksIGNoaWxkcmVuOiBbeyB0YWc6ICJnIiwgYXR0cmlidXRlczogYzE0KHt9LCBwMTguaW5uZXIpLCBjaGlsZHJlbjogW3sgdGFnOiBlNS5pY29uLnRhZywgY2hpbGRyZW46IGU1Lmljb24uY2hpbGRyZW4sIGF0dHJpYnV0ZXM6IGMxNChjMTQoe30sIGU1Lmljb24uYXR0cmlidXRlcyksIHAxOC5wYXRoKSB9XSB9XSB9OwogICAgfTsKICB9IH07CiAgdmFyIF9uMiA9IHsgeDogMCwgeTogMCwgd2lkdGg6ICIxMDAlIiwgaGVpZ2h0OiAiMTAwJSIgfTsKICBmdW5jdGlvbiBQdDExKG44KSB7CiAgICB2YXIgdDQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7CiAgICByZXR1cm4gbjguYXR0cmlidXRlcyAmJiAobjguYXR0cmlidXRlcy5maWxsIHx8IHQ0KSAmJiAobjguYXR0cmlidXRlcy5maWxsID0gImJsYWNrIiksIG44OwogIH0KICBmdW5jdGlvbiBDZTE2KG44KSB7CiAgICByZXR1cm4gbjgudGFnID09PSAiZyIgPyBuOC5jaGlsZHJlbiA6IFtuOF07CiAgfQogIHZhciBJZTggPSB7IGhvb2tzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB7IHBhcnNlTm9kZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uKGE0LCBlNSkgewogICAgICB2YXIgcjMgPSBlNS5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtbWFzayIpLCBvNCA9IHIzID8gRW4yKHIzLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKGk0KSB7CiAgICAgICAgcmV0dXJuIGk0LnRyaW0oKTsKICAgICAgfSkpIDogSm4yKCk7CiAgICAgIHJldHVybiBvNC5wcmVmaXggfHwgKG80LnByZWZpeCA9IHoyMigpKSwgYTQubWFzayA9IG80LCBhNC5tYXNrSWQgPSBlNS5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtbWFzay1pZCIpLCBhNDsKICAgIH0gfTsKICB9LCBwcm92aWRlczogZnVuY3Rpb24odDQpIHsKICAgIHQ0LmdlbmVyYXRlQWJzdHJhY3RNYXNrID0gZnVuY3Rpb24oYTQpIHsKICAgICAgdmFyIGU1ID0gYTQuY2hpbGRyZW4sIHIzID0gYTQuYXR0cmlidXRlcywgbzQgPSBhNC5tYWluLCBpNCA9IGE0Lm1hc2ssIHM4ID0gYTQubWFza0lkLCBmMTEgPSBhNC50cmFuc2Zvcm0sIHUxMSA9IG80LndpZHRoLCBsNyA9IG80Lmljb24sIGQxNSA9IGk0LndpZHRoLCB2MTUgPSBpNC5pY29uLCBwMTggPSBQYSh7IHRyYW5zZm9ybTogZjExLCBjb250YWluZXJXaWR0aDogZDE1LCBpY29uV2lkdGg6IHUxMSB9KSwgdzIxID0geyB0YWc6ICJyZWN0IiwgYXR0cmlidXRlczogYzE0KGMxNCh7fSwgX24yKSwge30sIHsgZmlsbDogIndoaXRlIiB9KSB9LCBFMTUgPSBsNy5jaGlsZHJlbiA/IHsgY2hpbGRyZW46IGw3LmNoaWxkcmVuLm1hcChQdDExKSB9IDoge30sIE8xNSA9IHsgdGFnOiAiZyIsIGF0dHJpYnV0ZXM6IGMxNCh7fSwgcDE4LmlubmVyKSwgY2hpbGRyZW46IFtQdDExKGMxNCh7IHRhZzogbDcudGFnLCBhdHRyaWJ1dGVzOiBjMTQoYzE0KHt9LCBsNy5hdHRyaWJ1dGVzKSwgcDE4LnBhdGgpIH0sIEUxNSkpXSB9LCBDMTcgPSB7IHRhZzogImciLCBhdHRyaWJ1dGVzOiBjMTQoe30sIHAxOC5vdXRlciksIGNoaWxkcmVuOiBbTzE1XSB9LCBrMTggPSAibWFzay0iLmNvbmNhdChzOCB8fCBybjMoKSksIHgyMSA9ICJjbGlwLSIuY29uY2F0KHM4IHx8IHJuMygpKSwgSTI3ID0geyB0YWc6ICJtYXNrIiwgYXR0cmlidXRlczogYzE0KGMxNCh7fSwgX24yKSwge30sIHsgaWQ6IGsxOCwgbWFza1VuaXRzOiAidXNlclNwYWNlT25Vc2UiLCBtYXNrQ29udGVudFVuaXRzOiAidXNlclNwYWNlT25Vc2UiIH0pLCBjaGlsZHJlbjogW3cyMSwgQzE3XSB9LCBBMjAgPSB7IHRhZzogImRlZnMiLCBjaGlsZHJlbjogW3sgdGFnOiAiY2xpcFBhdGgiLCBhdHRyaWJ1dGVzOiB7IGlkOiB4MjEgfSwgY2hpbGRyZW46IENlMTYodjE1KSB9LCBJMjddIH07CiAgICAgIHJldHVybiBlNS5wdXNoKEEyMCwgeyB0YWc6ICJyZWN0IiwgYXR0cmlidXRlczogYzE0KHsgZmlsbDogImN1cnJlbnRDb2xvciIsICJjbGlwLXBhdGgiOiAidXJsKCMiLmNvbmNhdCh4MjEsICIpIiksIG1hc2s6ICJ1cmwoIyIuY29uY2F0KGsxOCwgIikiKSB9LCBfbjIpIH0pLCB7IGNoaWxkcmVuOiBlNSwgYXR0cmlidXRlczogcjMgfTsKICAgIH07CiAgfSB9OwogIHZhciBOZTggPSB7IHByb3ZpZGVzOiBmdW5jdGlvbih0NCkgewogICAgdmFyIGE0ID0gZmFsc2U7CiAgICBEMTgubWF0Y2hNZWRpYSAmJiAoYTQgPSBEMTgubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzKSwgdDQubWlzc2luZ0ljb25BYnN0cmFjdCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgZTUgPSBbXSwgcjMgPSB7IGZpbGw6ICJjdXJyZW50Q29sb3IiIH0sIG80ID0geyBhdHRyaWJ1dGVUeXBlOiAiWE1MIiwgcmVwZWF0Q291bnQ6ICJpbmRlZmluaXRlIiwgZHVyOiAiMnMiIH07CiAgICAgIGU1LnB1c2goeyB0YWc6ICJwYXRoIiwgYXR0cmlidXRlczogYzE0KGMxNCh7fSwgcjMpLCB7fSwgeyBkOiAiTTE1Ni41LDQ0Ny43bC0xMi42LDI5LjVjLTE4LjctOS41LTM1LjktMjEuMi01MS41LTM0LjlsMjIuNy0yMi43QzEyNy42LDQzMC41LDE0MS41LDQ0MCwxNTYuNSw0NDcuN3ogTTQwLjYsMjcySDguNSBjMS40LDIxLjIsNS40LDQxLjcsMTEuNyw2MS4xTDUwLDMyMS4yQzQ1LjEsMzA1LjUsNDEuOCwyODksNDAuNiwyNzJ6IE00MC42LDI0MGMxLjQtMTguOCw1LjItMzcsMTEuMS01NC4xbC0yOS41LTEyLjYgQzE0LjcsMTk0LjMsMTAsMjE2LjcsOC41LDI0MEg0MC42eiBNNjQuMywxNTYuNWM3LjgtMTQuOSwxNy4yLTI4LjgsMjguMS00MS41TDY5LjcsOTIuM2MtMTMuNywxNS42LTI1LjUsMzIuOC0zNC45LDUxLjUgTDY0LjMsMTU2LjV6IE0zOTcsNDE5LjZjLTEzLjksMTItMjkuNCwyMi4zLTQ2LjEsMzAuNGwxMS45LDI5LjhjMjAuNy05LjksMzkuOC0yMi42LDU2LjktMzcuNkwzOTcsNDE5LjZ6IE0xMTUsOTIuNCBjMTMuOS0xMiwyOS40LTIyLjMsNDYuMS0zMC40bC0xMS45LTI5LjhjLTIwLjcsOS45LTM5LjgsMjIuNi01Ni44LDM3LjZMMTE1LDkyLjR6IE00NDcuNywzNTUuNWMtNy44LDE0LjktMTcuMiwyOC44LTI4LjEsNDEuNSBsMjIuNywyMi43YzEzLjctMTUuNiwyNS41LTMyLjksMzQuOS01MS41TDQ0Ny43LDM1NS41eiBNNDcxLjQsMjcyYy0xLjQsMTguOC01LjIsMzctMTEuMSw1NC4xbDI5LjUsMTIuNiBjNy41LTIxLjEsMTIuMi00My41LDEzLjYtNjYuOEg0NzEuNHogTTMyMS4yLDQ2MmMtMTUuNyw1LTMyLjIsOC4yLTQ5LjIsOS40djMyLjFjMjEuMi0xLjQsNDEuNy01LjQsNjEuMS0xMS43TDMyMS4yLDQ2MnogTTI0MCw0NzEuNGMtMTguOC0xLjQtMzctNS4yLTU0LjEtMTEuMWwtMTIuNiwyOS41YzIxLjEsNy41LDQzLjUsMTIuMiw2Ni44LDEzLjZWNDcxLjR6IE00NjIsMTkwLjhjNSwxNS43LDguMiwzMi4yLDkuNCw0OS4yaDMyLjEgYy0xLjQtMjEuMi01LjQtNDEuNy0xMS43LTYxLjFMNDYyLDE5MC44eiBNOTIuNCwzOTdjLTEyLTEzLjktMjIuMy0yOS40LTMwLjQtNDYuMWwtMjkuOCwxMS45YzkuOSwyMC43LDIyLjYsMzkuOCwzNy42LDU2LjkgTDkyLjQsMzk3eiBNMjcyLDQwLjZjMTguOCwxLjQsMzYuOSw1LjIsNTQuMSwxMS4xbDEyLjYtMjkuNUMzMTcuNywxNC43LDI5NS4zLDEwLDI3Miw4LjVWNDAuNnogTTE5MC44LDUwIGMxNS43LTUsMzIuMi04LjIsNDkuMi05LjRWOC41Yy0yMS4yLDEuNC00MS43LDUuNC02MS4xLDExLjdMMTkwLjgsNTB6IE00NDIuMyw5Mi4zTDQxOS42LDExNWMxMiwxMy45LDIyLjMsMjkuNCwzMC41LDQ2LjEgbDI5LjgtMTEuOUM0NzAsMTI4LjUsNDU3LjMsMTA5LjQsNDQyLjMsOTIuM3ogTTM5Nyw5Mi40bDIyLjctMjIuN2MtMTUuNi0xMy43LTMyLjgtMjUuNS01MS41LTM0LjlsLTEyLjYsMjkuNSBDMzcwLjQsNzIuMSwzODQuNCw4MS41LDM5Nyw5Mi40eiIgfSkgfSk7CiAgICAgIHZhciBpNCA9IGMxNChjMTQoe30sIG80KSwge30sIHsgYXR0cmlidXRlTmFtZTogIm9wYWNpdHkiIH0pLCBzOCA9IHsgdGFnOiAiY2lyY2xlIiwgYXR0cmlidXRlczogYzE0KGMxNCh7fSwgcjMpLCB7fSwgeyBjeDogIjI1NiIsIGN5OiAiMzY0IiwgcjogIjI4IiB9KSwgY2hpbGRyZW46IFtdIH07CiAgICAgIHJldHVybiBhNCB8fCBzOC5jaGlsZHJlbi5wdXNoKHsgdGFnOiAiYW5pbWF0ZSIsIGF0dHJpYnV0ZXM6IGMxNChjMTQoe30sIG80KSwge30sIHsgYXR0cmlidXRlTmFtZTogInIiLCB2YWx1ZXM6ICIyODsxNDsyODsyODsxNDsyODsiIH0pIH0sIHsgdGFnOiAiYW5pbWF0ZSIsIGF0dHJpYnV0ZXM6IGMxNChjMTQoe30sIGk0KSwge30sIHsgdmFsdWVzOiAiMTswOzE7MTswOzE7IiB9KSB9KSwgZTUucHVzaChzOCksIGU1LnB1c2goeyB0YWc6ICJwYXRoIiwgYXR0cmlidXRlczogYzE0KGMxNCh7fSwgcjMpLCB7fSwgeyBvcGFjaXR5OiAiMSIsIGQ6ICJNMjYzLjcsMzEyaC0xNmMtNi42LDAtMTItNS40LTEyLTEyYzAtNzEsNzcuNC02My45LDc3LjQtMTA3LjhjMC0yMC0xNy44LTQwLjItNTcuNC00MC4yYy0yOS4xLDAtNDQuMyw5LjYtNTkuMiwyOC43IGMtMy45LDUtMTEuMSw2LTE2LjIsMi40bC0xMy4xLTkuMmMtNS42LTMuOS02LjktMTEuOC0yLjYtMTcuMmMyMS4yLTI3LjIsNDYuNC00NC43LDkxLjItNDQuN2M1Mi4zLDAsOTcuNCwyOS44LDk3LjQsODAuMiBjMCw2Ny42LTc3LjQsNjMuNS03Ny40LDEwNy44QzI3NS43LDMwNi42LDI3MC4zLDMxMiwyNjMuNywzMTJ6IiB9KSwgY2hpbGRyZW46IGE0ID8gW10gOiBbeyB0YWc6ICJhbmltYXRlIiwgYXR0cmlidXRlczogYzE0KGMxNCh7fSwgaTQpLCB7fSwgeyB2YWx1ZXM6ICIxOzA7MDswOzA7MTsiIH0pIH1dIH0pLCBhNCB8fCBlNS5wdXNoKHsgdGFnOiAicGF0aCIsIGF0dHJpYnV0ZXM6IGMxNChjMTQoe30sIHIzKSwge30sIHsgb3BhY2l0eTogIjAiLCBkOiAiTTIzMi41LDEzNC41bDcsMTY4YzAuMyw2LjQsNS42LDExLjUsMTIsMTEuNWg5YzYuNCwwLDExLjctNS4xLDEyLTExLjVsNy0xNjhjMC4zLTYuOC01LjItMTIuNS0xMi0xMi41aC0yMyBDMjM3LjcsMTIyLDIzMi4yLDEyNy43LDIzMi41LDEzNC41eiIgfSksIGNoaWxkcmVuOiBbeyB0YWc6ICJhbmltYXRlIiwgYXR0cmlidXRlczogYzE0KGMxNCh7fSwgaTQpLCB7fSwgeyB2YWx1ZXM6ICIwOzA7MTsxOzA7MDsiIH0pIH1dIH0pLCB7IHRhZzogImciLCBhdHRyaWJ1dGVzOiB7IGNsYXNzOiAibWlzc2luZyIgfSwgY2hpbGRyZW46IGU1IH07CiAgICB9OwogIH0gfTsKICB2YXIgX2UxMiA9IHsgaG9va3M6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHsgcGFyc2VOb2RlQXR0cmlidXRlczogZnVuY3Rpb24oYTQsIGU1KSB7CiAgICAgIHZhciByMyA9IGU1LmdldEF0dHJpYnV0ZSgiZGF0YS1mYS1zeW1ib2wiKSwgbzQgPSByMyA9PT0gbnVsbCA/IGZhbHNlIDogcjMgPT09ICIiID8gdHJ1ZSA6IHIzOwogICAgICByZXR1cm4gYTQuc3ltYm9sID0gbzQsIGE0OwogICAgfSB9OwogIH0gfTsKICB2YXIgVGUxMyA9IFtOYSwgYmUxMCwgaGUxMCwgeWUxMiwga2UxMywgRWU3LCBPZTExLCBQZTEyLCBJZTgsIE5lOCwgX2UxMl07CiAgR2EoVGUxMywgeyBtaXhvdXRzVG86IFMxOSB9KTsKICB2YXIgTGU3ID0gUzE5Lm5vQXV0bzsKICB2YXIgUmUxMyA9IFMxOS5jb25maWc7CiAgdmFyIEZlMTAgPSBTMTkubGlicmFyeTsKICB2YXIgRGUxMCA9IFMxOS5kb207CiAgdmFyIHplNiA9IFMxOS5wYXJzZTsKICB2YXIgamU0ID0gUzE5LmZpbmRJY29uRGVmaW5pdGlvbjsKICB2YXIgWWU3ID0gUzE5LnRvSHRtbDsKICB2YXIgJGU5ID0gUzE5Lmljb247CiAgdmFyIFVlNiA9IFMxOS5sYXllcjsKICB2YXIgV2U4ID0gUzE5LnRleHQ7CiAgdmFyIEhlNCA9IFMxOS5jb3VudGVyOwoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9wcm9wLXR5cGVzQDE1LjguMS9kZW5vL3Byb3AtdHlwZXMuanMKICB2YXIgZDE0ID0gT2JqZWN0LmNyZWF0ZTsKICB2YXIgYzE1ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogIHZhciBiMjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwogIHZhciBQMjUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczsKICB2YXIgUjIyID0gT2JqZWN0LmdldFByb3RvdHlwZU9mOwogIHZhciBnMTAgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogIHZhciBzNyA9IChlNSwgcjMpID0+ICgpID0+IChyMyB8fCBlNSgocjMgPSB7IGV4cG9ydHM6IHt9IH0pLmV4cG9ydHMsIHIzKSwgcjMuZXhwb3J0cyk7CiAgdmFyIHYxNCA9IChlNSwgcjMsIHQ0LCBuOCkgPT4gewogICAgaWYgKHIzICYmIHR5cGVvZiByMyA9PSAib2JqZWN0IiB8fCB0eXBlb2YgcjMgPT0gImZ1bmN0aW9uIikKICAgICAgZm9yIChsZXQgbzQgb2YgUDI1KHIzKSkKICAgICAgICAhZzEwLmNhbGwoZTUsIG80KSAmJiBvNCAhPT0gdDQgJiYgYzE1KGU1LCBvNCwgeyBnZXQ6ICgpID0+IHIzW280XSwgZW51bWVyYWJsZTogIShuOCA9IGIyMihyMywgbzQpKSB8fCBuOC5lbnVtZXJhYmxlIH0pOwogICAgcmV0dXJuIGU1OwogIH07CiAgdmFyIHgyMCA9IChlNSwgcjMsIHQ0KSA9PiAodDQgPSBlNSAhPSBudWxsID8gZDE0KFIyMihlNSkpIDoge30sIHYxNChyMyB8fCAhZTUgfHwgIWU1Ll9fZXNNb2R1bGUgPyBjMTUodDQsICJkZWZhdWx0IiwgeyB2YWx1ZTogZTUsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0NCwgZTUpKTsKICB2YXIgaTMgPSBzNygocTIwLCBwMTgpID0+IHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBFMTUgPSAiU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQiOwogICAgcDE4LmV4cG9ydHMgPSBFMTU7CiAgfSk7CiAgdmFyIGw2ID0gczcoKEQyMCwgZjExKSA9PiB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgUzIxID0gaTMoKTsKICAgIGZ1bmN0aW9uIHUxMSgpIHsKICAgIH0KICAgIGZ1bmN0aW9uIHkxNygpIHsKICAgIH0KICAgIHkxNy5yZXNldFdhcm5pbmdDYWNoZSA9IHUxMTsKICAgIGYxMS5leHBvcnRzID0gZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIGU1KG44LCBvNCwgQzE3LCBJMjcsIE4xNywgXzI1KSB7CiAgICAgICAgaWYgKF8yNSAhPT0gUzIxKSB7CiAgICAgICAgICB2YXIgYTQgPSBuZXcgRXJyb3IoIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKTsKICAgICAgICAgIHRocm93IGE0Lm5hbWUgPSAiSW52YXJpYW50IFZpb2xhdGlvbiIsIGE0OwogICAgICAgIH0KICAgICAgfQogICAgICBlNS5pc1JlcXVpcmVkID0gZTU7CiAgICAgIGZ1bmN0aW9uIHIzKCkgewogICAgICAgIHJldHVybiBlNTsKICAgICAgfQogICAgICB2YXIgdDQgPSB7IGFycmF5OiBlNSwgYmlnaW50OiBlNSwgYm9vbDogZTUsIGZ1bmM6IGU1LCBudW1iZXI6IGU1LCBvYmplY3Q6IGU1LCBzdHJpbmc6IGU1LCBzeW1ib2w6IGU1LCBhbnk6IGU1LCBhcnJheU9mOiByMywgZWxlbWVudDogZTUsIGVsZW1lbnRUeXBlOiBlNSwgaW5zdGFuY2VPZjogcjMsIG5vZGU6IGU1LCBvYmplY3RPZjogcjMsIG9uZU9mOiByMywgb25lT2ZUeXBlOiByMywgc2hhcGU6IHIzLCBleGFjdDogcjMsIGNoZWNrUHJvcFR5cGVzOiB5MTcsIHJlc2V0V2FybmluZ0NhY2hlOiB1MTEgfTsKICAgICAgcmV0dXJuIHQ0LlByb3BUeXBlcyA9IHQ0LCB0NDsKICAgIH07CiAgfSk7CiAgdmFyIGg4ID0gczcoKEYyMiwgbTIzKSA9PiB7CiAgICBtMjMuZXhwb3J0cyA9IGw2KCkoKTsKICAgIHZhciBqMTksIHcyMTsKICB9KTsKICB2YXIgTzEyID0geDIwKGg4KCkpOwogIHZhciB7IGFycmF5OiBBMTcsIGJpZ2ludDogTDE4LCBib29sOiBVMjUsIGZ1bmM6IFYxOCwgbnVtYmVyOiBCMjAsIG9iamVjdDogSDIwLCBzdHJpbmc6IFkyOSwgc3ltYm9sOiB6MjMsIGFueTogRzIwLCBhcnJheU9mOiBKMTEsIGVsZW1lbnQ6IEsxNywgZWxlbWVudFR5cGU6IE0yMCwgaW5zdGFuY2VPZjogUTE0LCBub2RlOiBYMjIsIG9iamVjdE9mOiBaMjAsIG9uZU9mOiAkMTksIG9uZU9mVHlwZTogZWUxNiwgc2hhcGU6IHJlMTgsIGV4YWN0OiB0ZTE1LCBjaGVja1Byb3BUeXBlczogb2U5LCByZXNldFdhcm5pbmdDYWNoZTogbmUxMywgUHJvcFR5cGVzOiBzZTE2IH0gPSBPMTI7CiAgdmFyIHsgZGVmYXVsdDogVDI3LCAuLi5rMTYgfSA9IE8xMjsKICB2YXIgYWUxNCA9IFQyNyAhPT0gdm9pZCAwID8gVDI3IDogazE2OwoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3N0YWJsZS9yZWFjdEAxOC4yLjAvZGVuby9yZWFjdC5qcwogIHZhciBVMjYgPSBPYmplY3QuY3JlYXRlOwogIHZhciBDMTUgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIHExNyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CiAgdmFyIEExOCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzOwogIHZhciBNMjEgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7CiAgdmFyIHoyNCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgdmFyIGsxNyA9IChlNSwgdDQpID0+ICgpID0+ICh0NCB8fCBlNSgodDQgPSB7IGV4cG9ydHM6IHt9IH0pLmV4cG9ydHMsIHQ0KSwgdDQuZXhwb3J0cyk7CiAgdmFyIEIyMSA9IChlNSwgdDQsIHIzLCBvNCkgPT4gewogICAgaWYgKHQ0ICYmIHR5cGVvZiB0NCA9PSAib2JqZWN0IiB8fCB0eXBlb2YgdDQgPT0gImZ1bmN0aW9uIikKICAgICAgZm9yIChsZXQgdTExIG9mIEExOCh0NCkpCiAgICAgICAgIXoyNC5jYWxsKGU1LCB1MTEpICYmIHUxMSAhPT0gcjMgJiYgQzE1KGU1LCB1MTEsIHsgZ2V0OiAoKSA9PiB0NFt1MTFdLCBlbnVtZXJhYmxlOiAhKG80ID0gcTE3KHQ0LCB1MTEpKSB8fCBvNC5lbnVtZXJhYmxlIH0pOwogICAgcmV0dXJuIGU1OwogIH07CiAgdmFyIEgyMSA9IChlNSwgdDQsIHIzKSA9PiAocjMgPSBlNSAhPSBudWxsID8gVTI2KE0yMShlNSkpIDoge30sIEIyMSh0NCB8fCAhZTUgfHwgIWU1Ll9fZXNNb2R1bGUgPyBDMTUocjMsICJkZWZhdWx0IiwgeyB2YWx1ZTogZTUsIGVudW1lcmFibGU6IHRydWUgfSkgOiByMywgZTUpKTsKICB2YXIgRDE5ID0gazE3KChuOCkgPT4gewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIHkxNyA9IFN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKSwgVzE4ID0gU3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksIFkzMCA9IFN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksIEcyMyA9IFN5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIiksIEoxNCA9IFN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksIEsxOSA9IFN5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIiksIFExNyA9IFN5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKSwgWDIzID0gU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSwgWjIyID0gU3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2UiKSwgZWUxOCA9IFN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSwgdGUxNyA9IFN5bWJvbC5mb3IoInJlYWN0LmxhenkiKSwgdzIxID0gU3ltYm9sLml0ZXJhdG9yOwogICAgZnVuY3Rpb24gcmUyMChlNSkgewogICAgICByZXR1cm4gZTUgPT09IG51bGwgfHwgdHlwZW9mIGU1ICE9ICJvYmplY3QiID8gbnVsbCA6IChlNSA9IHcyMSAmJiBlNVt3MjFdIHx8IGU1WyJAQGl0ZXJhdG9yIl0sIHR5cGVvZiBlNSA9PSAiZnVuY3Rpb24iID8gZTUgOiBudWxsKTsKICAgIH0KICAgIHZhciB4MjEgPSB7IGlzTW91bnRlZDogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24oKSB7CiAgICB9LCBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbigpIHsKICAgIH0sIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICB9IH0sIE8xNSA9IE9iamVjdC5hc3NpZ24sIGoxOSA9IHt9OwogICAgZnVuY3Rpb24gcDE4KGU1LCB0NCwgcjMpIHsKICAgICAgdGhpcy5wcm9wcyA9IGU1LCB0aGlzLmNvbnRleHQgPSB0NCwgdGhpcy5yZWZzID0gajE5LCB0aGlzLnVwZGF0ZXIgPSByMyB8fCB4MjE7CiAgICB9CiAgICBwMTgucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTsKICAgIHAxOC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbihlNSwgdDQpIHsKICAgICAgaWYgKHR5cGVvZiBlNSAhPSAib2JqZWN0IiAmJiB0eXBlb2YgZTUgIT0gImZ1bmN0aW9uIiAmJiBlNSAhPSBudWxsKQogICAgICAgIHRocm93IEVycm9yKCJzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4iKTsKICAgICAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBlNSwgdDQsICJzZXRTdGF0ZSIpOwogICAgfTsKICAgIHAxOC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbihlNSkgewogICAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGU1LCAiZm9yY2VVcGRhdGUiKTsKICAgIH07CiAgICBmdW5jdGlvbiBJMjcoKSB7CiAgICB9CiAgICBJMjcucHJvdG90eXBlID0gcDE4LnByb3RvdHlwZTsKICAgIGZ1bmN0aW9uIHYxNShlNSwgdDQsIHIzKSB7CiAgICAgIHRoaXMucHJvcHMgPSBlNSwgdGhpcy5jb250ZXh0ID0gdDQsIHRoaXMucmVmcyA9IGoxOSwgdGhpcy51cGRhdGVyID0gcjMgfHwgeDIxOwogICAgfQogICAgdmFyIFMyMSA9IHYxNS5wcm90b3R5cGUgPSBuZXcgSTI3KCk7CiAgICBTMjEuY29uc3RydWN0b3IgPSB2MTU7CiAgICBPMTUoUzIxLCBwMTgucHJvdG90eXBlKTsKICAgIFMyMS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7CiAgICB2YXIgYjI1ID0gQXJyYXkuaXNBcnJheSwgZzEyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwgRTE1ID0geyBjdXJyZW50OiBudWxsIH0sIFAyNyA9IHsga2V5OiB0cnVlLCByZWY6IHRydWUsIF9fc2VsZjogdHJ1ZSwgX19zb3VyY2U6IHRydWUgfTsKICAgIGZ1bmN0aW9uIFQyOShlNSwgdDQsIHIzKSB7CiAgICAgIHZhciBvNCwgdTExID0ge30sIGMxNyA9IG51bGwsIGYxMSA9IG51bGw7CiAgICAgIGlmICh0NCAhPSBudWxsKQogICAgICAgIGZvciAobzQgaW4gdDQucmVmICE9PSB2b2lkIDAgJiYgKGYxMSA9IHQ0LnJlZiksIHQ0LmtleSAhPT0gdm9pZCAwICYmIChjMTcgPSAiIiArIHQ0LmtleSksIHQ0KQogICAgICAgICAgZzEyLmNhbGwodDQsIG80KSAmJiAhUDI3Lmhhc093blByb3BlcnR5KG80KSAmJiAodTExW280XSA9IHQ0W280XSk7CiAgICAgIHZhciBpNCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyOwogICAgICBpZiAoaTQgPT09IDEpCiAgICAgICAgdTExLmNoaWxkcmVuID0gcjM7CiAgICAgIGVsc2UgaWYgKDEgPCBpNCkgewogICAgICAgIGZvciAodmFyIHM4ID0gQXJyYXkoaTQpLCBhNCA9IDA7IGE0IDwgaTQ7IGE0KyspCiAgICAgICAgICBzOFthNF0gPSBhcmd1bWVudHNbYTQgKyAyXTsKICAgICAgICB1MTEuY2hpbGRyZW4gPSBzODsKICAgICAgfQogICAgICBpZiAoZTUgJiYgZTUuZGVmYXVsdFByb3BzKQogICAgICAgIGZvciAobzQgaW4gaTQgPSBlNS5kZWZhdWx0UHJvcHMsIGk0KQogICAgICAgICAgdTExW280XSA9PT0gdm9pZCAwICYmICh1MTFbbzRdID0gaTRbbzRdKTsKICAgICAgcmV0dXJuIHsgJCR0eXBlb2Y6IHkxNywgdHlwZTogZTUsIGtleTogYzE3LCByZWY6IGYxMSwgcHJvcHM6IHUxMSwgX293bmVyOiBFMTUuY3VycmVudCB9OwogICAgfQogICAgZnVuY3Rpb24gbmUxNShlNSwgdDQpIHsKICAgICAgcmV0dXJuIHsgJCR0eXBlb2Y6IHkxNywgdHlwZTogZTUudHlwZSwga2V5OiB0NCwgcmVmOiBlNS5yZWYsIHByb3BzOiBlNS5wcm9wcywgX293bmVyOiBlNS5fb3duZXIgfTsKICAgIH0KICAgIGZ1bmN0aW9uIFIyNihlNSkgewogICAgICByZXR1cm4gdHlwZW9mIGU1ID09ICJvYmplY3QiICYmIGU1ICE9PSBudWxsICYmIGU1LiQkdHlwZW9mID09PSB5MTc7CiAgICB9CiAgICBmdW5jdGlvbiB1ZTE4KGU1KSB7CiAgICAgIHZhciB0NCA9IHsgIj0iOiAiPTAiLCAiOiI6ICI9MiIgfTsKICAgICAgcmV0dXJuICIkIiArIGU1LnJlcGxhY2UoL1s9Ol0vZywgZnVuY3Rpb24ocjMpIHsKICAgICAgICByZXR1cm4gdDRbcjNdOwogICAgICB9KTsKICAgIH0KICAgIHZhciAkMjEgPSAvXC8rL2c7CiAgICBmdW5jdGlvbiBoMTAoZTUsIHQ0KSB7CiAgICAgIHJldHVybiB0eXBlb2YgZTUgPT0gIm9iamVjdCIgJiYgZTUgIT09IG51bGwgJiYgZTUua2V5ICE9IG51bGwgPyB1ZTE4KCIiICsgZTUua2V5KSA6IHQ0LnRvU3RyaW5nKDM2KTsKICAgIH0KICAgIGZ1bmN0aW9uIF8yNShlNSwgdDQsIHIzLCBvNCwgdTExKSB7CiAgICAgIHZhciBjMTcgPSB0eXBlb2YgZTU7CiAgICAgIChjMTcgPT09ICJ1bmRlZmluZWQiIHx8IGMxNyA9PT0gImJvb2xlYW4iKSAmJiAoZTUgPSBudWxsKTsKICAgICAgdmFyIGYxMSA9IGZhbHNlOwogICAgICBpZiAoZTUgPT09IG51bGwpCiAgICAgICAgZjExID0gdHJ1ZTsKICAgICAgZWxzZQogICAgICAgIHN3aXRjaCAoYzE3KSB7CiAgICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgY2FzZSAibnVtYmVyIjoKICAgICAgICAgICAgZjExID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJvYmplY3QiOgogICAgICAgICAgICBzd2l0Y2ggKGU1LiQkdHlwZW9mKSB7CiAgICAgICAgICAgICAgY2FzZSB5MTc6CiAgICAgICAgICAgICAgY2FzZSBXMTg6CiAgICAgICAgICAgICAgICBmMTEgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoZjExKQogICAgICAgIHJldHVybiBmMTEgPSBlNSwgdTExID0gdTExKGYxMSksIGU1ID0gbzQgPT09ICIiID8gIi4iICsgaDEwKGYxMSwgMCkgOiBvNCwgYjI1KHUxMSkgPyAocjMgPSAiIiwgZTUgIT0gbnVsbCAmJiAocjMgPSBlNS5yZXBsYWNlKCQyMSwgIiQmLyIpICsgIi8iKSwgXzI1KHUxMSwgdDQsIHIzLCAiIiwgZnVuY3Rpb24oYTQpIHsKICAgICAgICAgIHJldHVybiBhNDsKICAgICAgICB9KSkgOiB1MTEgIT0gbnVsbCAmJiAoUjI2KHUxMSkgJiYgKHUxMSA9IG5lMTUodTExLCByMyArICghdTExLmtleSB8fCBmMTEgJiYgZjExLmtleSA9PT0gdTExLmtleSA/ICIiIDogKCIiICsgdTExLmtleSkucmVwbGFjZSgkMjEsICIkJi8iKSArICIvIikgKyBlNSkpLCB0NC5wdXNoKHUxMSkpLCAxOwogICAgICBpZiAoZjExID0gMCwgbzQgPSBvNCA9PT0gIiIgPyAiLiIgOiBvNCArICI6IiwgYjI1KGU1KSkKICAgICAgICBmb3IgKHZhciBpNCA9IDA7IGk0IDwgZTUubGVuZ3RoOyBpNCsrKSB7CiAgICAgICAgICBjMTcgPSBlNVtpNF07CiAgICAgICAgICB2YXIgczggPSBvNCArIGgxMChjMTcsIGk0KTsKICAgICAgICAgIGYxMSArPSBfMjUoYzE3LCB0NCwgcjMsIHM4LCB1MTEpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoczggPSByZTIwKGU1KSwgdHlwZW9mIHM4ID09ICJmdW5jdGlvbiIpCiAgICAgICAgZm9yIChlNSA9IHM4LmNhbGwoZTUpLCBpNCA9IDA7ICEoYzE3ID0gZTUubmV4dCgpKS5kb25lOyApCiAgICAgICAgICBjMTcgPSBjMTcudmFsdWUsIHM4ID0gbzQgKyBoMTAoYzE3LCBpNCsrKSwgZjExICs9IF8yNShjMTcsIHQ0LCByMywgczgsIHUxMSk7CiAgICAgIGVsc2UgaWYgKGMxNyA9PT0gIm9iamVjdCIpCiAgICAgICAgdGhyb3cgdDQgPSBTdHJpbmcoZTUpLCBFcnJvcigiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiAiICsgKHQ0ID09PSAiW29iamVjdCBPYmplY3RdIiA/ICJvYmplY3Qgd2l0aCBrZXlzIHsiICsgT2JqZWN0LmtleXMoZTUpLmpvaW4oIiwgIikgKyAifSIgOiB0NCkgKyAiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLiIpOwogICAgICByZXR1cm4gZjExOwogICAgfQogICAgZnVuY3Rpb24gZDE1KGU1LCB0NCwgcjMpIHsKICAgICAgaWYgKGU1ID09IG51bGwpCiAgICAgICAgcmV0dXJuIGU1OwogICAgICB2YXIgbzQgPSBbXSwgdTExID0gMDsKICAgICAgcmV0dXJuIF8yNShlNSwgbzQsICIiLCAiIiwgZnVuY3Rpb24oYzE3KSB7CiAgICAgICAgcmV0dXJuIHQ0LmNhbGwocjMsIGMxNywgdTExKyspOwogICAgICB9KSwgbzQ7CiAgICB9CiAgICBmdW5jdGlvbiBvZTEyKGU1KSB7CiAgICAgIGlmIChlNS5fc3RhdHVzID09PSAtMSkgewogICAgICAgIHZhciB0NCA9IGU1Ll9yZXN1bHQ7CiAgICAgICAgdDQgPSB0NCgpLCB0NC50aGVuKGZ1bmN0aW9uKHIzKSB7CiAgICAgICAgICAoZTUuX3N0YXR1cyA9PT0gMCB8fCBlNS5fc3RhdHVzID09PSAtMSkgJiYgKGU1Ll9zdGF0dXMgPSAxLCBlNS5fcmVzdWx0ID0gcjMpOwogICAgICAgIH0sIGZ1bmN0aW9uKHIzKSB7CiAgICAgICAgICAoZTUuX3N0YXR1cyA9PT0gMCB8fCBlNS5fc3RhdHVzID09PSAtMSkgJiYgKGU1Ll9zdGF0dXMgPSAyLCBlNS5fcmVzdWx0ID0gcjMpOwogICAgICAgIH0pLCBlNS5fc3RhdHVzID09PSAtMSAmJiAoZTUuX3N0YXR1cyA9IDAsIGU1Ll9yZXN1bHQgPSB0NCk7CiAgICAgIH0KICAgICAgaWYgKGU1Ll9zdGF0dXMgPT09IDEpCiAgICAgICAgcmV0dXJuIGU1Ll9yZXN1bHQuZGVmYXVsdDsKICAgICAgdGhyb3cgZTUuX3Jlc3VsdDsKICAgIH0KICAgIHZhciBsNyA9IHsgY3VycmVudDogbnVsbCB9LCBtMjMgPSB7IHRyYW5zaXRpb246IG51bGwgfSwgc2UxOSA9IHsgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogbDcsIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOiBtMjMsIFJlYWN0Q3VycmVudE93bmVyOiBFMTUgfTsKICAgIG44LkNoaWxkcmVuID0geyBtYXA6IGQxNSwgZm9yRWFjaDogZnVuY3Rpb24oZTUsIHQ0LCByMykgewogICAgICBkMTUoZTUsIGZ1bmN0aW9uKCkgewogICAgICAgIHQ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH0sIHIzKTsKICAgIH0sIGNvdW50OiBmdW5jdGlvbihlNSkgewogICAgICB2YXIgdDQgPSAwOwogICAgICByZXR1cm4gZDE1KGU1LCBmdW5jdGlvbigpIHsKICAgICAgICB0NCsrOwogICAgICB9KSwgdDQ7CiAgICB9LCB0b0FycmF5OiBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gZDE1KGU1LCBmdW5jdGlvbih0NCkgewogICAgICAgIHJldHVybiB0NDsKICAgICAgfSkgfHwgW107CiAgICB9LCBvbmx5OiBmdW5jdGlvbihlNSkgewogICAgICBpZiAoIVIyNihlNSkpCiAgICAgICAgdGhyb3cgRXJyb3IoIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLiIpOwogICAgICByZXR1cm4gZTU7CiAgICB9IH07CiAgICBuOC5Db21wb25lbnQgPSBwMTg7CiAgICBuOC5GcmFnbWVudCA9IFkzMDsKICAgIG44LlByb2ZpbGVyID0gSjE0OwogICAgbjguUHVyZUNvbXBvbmVudCA9IHYxNTsKICAgIG44LlN0cmljdE1vZGUgPSBHMjM7CiAgICBuOC5TdXNwZW5zZSA9IFoyMjsKICAgIG44Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gc2UxOTsKICAgIG44LmNsb25lRWxlbWVudCA9IGZ1bmN0aW9uKGU1LCB0NCwgcjMpIHsKICAgICAgaWYgKGU1ID09IG51bGwpCiAgICAgICAgdGhyb3cgRXJyb3IoIlJlYWN0LmNsb25lRWxlbWVudCguLi4pOiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkICIgKyBlNSArICIuIik7CiAgICAgIHZhciBvNCA9IE8xNSh7fSwgZTUucHJvcHMpLCB1MTEgPSBlNS5rZXksIGMxNyA9IGU1LnJlZiwgZjExID0gZTUuX293bmVyOwogICAgICBpZiAodDQgIT0gbnVsbCkgewogICAgICAgIGlmICh0NC5yZWYgIT09IHZvaWQgMCAmJiAoYzE3ID0gdDQucmVmLCBmMTEgPSBFMTUuY3VycmVudCksIHQ0LmtleSAhPT0gdm9pZCAwICYmICh1MTEgPSAiIiArIHQ0LmtleSksIGU1LnR5cGUgJiYgZTUudHlwZS5kZWZhdWx0UHJvcHMpCiAgICAgICAgICB2YXIgaTQgPSBlNS50eXBlLmRlZmF1bHRQcm9wczsKICAgICAgICBmb3IgKHM4IGluIHQ0KQogICAgICAgICAgZzEyLmNhbGwodDQsIHM4KSAmJiAhUDI3Lmhhc093blByb3BlcnR5KHM4KSAmJiAobzRbczhdID0gdDRbczhdID09PSB2b2lkIDAgJiYgaTQgIT09IHZvaWQgMCA/IGk0W3M4XSA6IHQ0W3M4XSk7CiAgICAgIH0KICAgICAgdmFyIHM4ID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7CiAgICAgIGlmIChzOCA9PT0gMSkKICAgICAgICBvNC5jaGlsZHJlbiA9IHIzOwogICAgICBlbHNlIGlmICgxIDwgczgpIHsKICAgICAgICBpNCA9IEFycmF5KHM4KTsKICAgICAgICBmb3IgKHZhciBhNCA9IDA7IGE0IDwgczg7IGE0KyspCiAgICAgICAgICBpNFthNF0gPSBhcmd1bWVudHNbYTQgKyAyXTsKICAgICAgICBvNC5jaGlsZHJlbiA9IGk0OwogICAgICB9CiAgICAgIHJldHVybiB7ICQkdHlwZW9mOiB5MTcsIHR5cGU6IGU1LnR5cGUsIGtleTogdTExLCByZWY6IGMxNywgcHJvcHM6IG80LCBfb3duZXI6IGYxMSB9OwogICAgfTsKICAgIG44LmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gZTUgPSB7ICQkdHlwZW9mOiBRMTcsIF9jdXJyZW50VmFsdWU6IGU1LCBfY3VycmVudFZhbHVlMjogZTUsIF90aHJlYWRDb3VudDogMCwgUHJvdmlkZXI6IG51bGwsIENvbnN1bWVyOiBudWxsLCBfZGVmYXVsdFZhbHVlOiBudWxsLCBfZ2xvYmFsTmFtZTogbnVsbCB9LCBlNS5Qcm92aWRlciA9IHsgJCR0eXBlb2Y6IEsxOSwgX2NvbnRleHQ6IGU1IH0sIGU1LkNvbnN1bWVyID0gZTU7CiAgICB9OwogICAgbjguY3JlYXRlRWxlbWVudCA9IFQyOTsKICAgIG44LmNyZWF0ZUZhY3RvcnkgPSBmdW5jdGlvbihlNSkgewogICAgICB2YXIgdDQgPSBUMjkuYmluZChudWxsLCBlNSk7CiAgICAgIHJldHVybiB0NC50eXBlID0gZTUsIHQ0OwogICAgfTsKICAgIG44LmNyZWF0ZVJlZiA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4geyBjdXJyZW50OiBudWxsIH07CiAgICB9OwogICAgbjguZm9yd2FyZFJlZiA9IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHJldHVybiB7ICQkdHlwZW9mOiBYMjMsIHJlbmRlcjogZTUgfTsKICAgIH07CiAgICBuOC5pc1ZhbGlkRWxlbWVudCA9IFIyNjsKICAgIG44LmxhenkgPSBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4geyAkJHR5cGVvZjogdGUxNywgX3BheWxvYWQ6IHsgX3N0YXR1czogLTEsIF9yZXN1bHQ6IGU1IH0sIF9pbml0OiBvZTEyIH07CiAgICB9OwogICAgbjgubWVtbyA9IGZ1bmN0aW9uKGU1LCB0NCkgewogICAgICByZXR1cm4geyAkJHR5cGVvZjogZWUxOCwgdHlwZTogZTUsIGNvbXBhcmU6IHQ0ID09PSB2b2lkIDAgPyBudWxsIDogdDQgfTsKICAgIH07CiAgICBuOC5zdGFydFRyYW5zaXRpb24gPSBmdW5jdGlvbihlNSkgewogICAgICB2YXIgdDQgPSBtMjMudHJhbnNpdGlvbjsKICAgICAgbTIzLnRyYW5zaXRpb24gPSB7fTsKICAgICAgdHJ5IHsKICAgICAgICBlNSgpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIG0yMy50cmFuc2l0aW9uID0gdDQ7CiAgICAgIH0KICAgIH07CiAgICBuOC51bnN0YWJsZV9hY3QgPSBmdW5jdGlvbigpIHsKICAgICAgdGhyb3cgRXJyb3IoImFjdCguLi4pIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMgb2YgUmVhY3QuIik7CiAgICB9OwogICAgbjgudXNlQ2FsbGJhY2sgPSBmdW5jdGlvbihlNSwgdDQpIHsKICAgICAgcmV0dXJuIGw3LmN1cnJlbnQudXNlQ2FsbGJhY2soZTUsIHQ0KTsKICAgIH07CiAgICBuOC51c2VDb250ZXh0ID0gZnVuY3Rpb24oZTUpIHsKICAgICAgcmV0dXJuIGw3LmN1cnJlbnQudXNlQ29udGV4dChlNSk7CiAgICB9OwogICAgbjgudXNlRGVidWdWYWx1ZSA9IGZ1bmN0aW9uKCkgewogICAgfTsKICAgIG44LnVzZURlZmVycmVkVmFsdWUgPSBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gbDcuY3VycmVudC51c2VEZWZlcnJlZFZhbHVlKGU1KTsKICAgIH07CiAgICBuOC51c2VFZmZlY3QgPSBmdW5jdGlvbihlNSwgdDQpIHsKICAgICAgcmV0dXJuIGw3LmN1cnJlbnQudXNlRWZmZWN0KGU1LCB0NCk7CiAgICB9OwogICAgbjgudXNlSWQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGw3LmN1cnJlbnQudXNlSWQoKTsKICAgIH07CiAgICBuOC51c2VJbXBlcmF0aXZlSGFuZGxlID0gZnVuY3Rpb24oZTUsIHQ0LCByMykgewogICAgICByZXR1cm4gbDcuY3VycmVudC51c2VJbXBlcmF0aXZlSGFuZGxlKGU1LCB0NCwgcjMpOwogICAgfTsKICAgIG44LnVzZUluc2VydGlvbkVmZmVjdCA9IGZ1bmN0aW9uKGU1LCB0NCkgewogICAgICByZXR1cm4gbDcuY3VycmVudC51c2VJbnNlcnRpb25FZmZlY3QoZTUsIHQ0KTsKICAgIH07CiAgICBuOC51c2VMYXlvdXRFZmZlY3QgPSBmdW5jdGlvbihlNSwgdDQpIHsKICAgICAgcmV0dXJuIGw3LmN1cnJlbnQudXNlTGF5b3V0RWZmZWN0KGU1LCB0NCk7CiAgICB9OwogICAgbjgudXNlTWVtbyA9IGZ1bmN0aW9uKGU1LCB0NCkgewogICAgICByZXR1cm4gbDcuY3VycmVudC51c2VNZW1vKGU1LCB0NCk7CiAgICB9OwogICAgbjgudXNlUmVkdWNlciA9IGZ1bmN0aW9uKGU1LCB0NCwgcjMpIHsKICAgICAgcmV0dXJuIGw3LmN1cnJlbnQudXNlUmVkdWNlcihlNSwgdDQsIHIzKTsKICAgIH07CiAgICBuOC51c2VSZWYgPSBmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gbDcuY3VycmVudC51c2VSZWYoZTUpOwogICAgfTsKICAgIG44LnVzZVN0YXRlID0gZnVuY3Rpb24oZTUpIHsKICAgICAgcmV0dXJuIGw3LmN1cnJlbnQudXNlU3RhdGUoZTUpOwogICAgfTsKICAgIG44LnVzZVN5bmNFeHRlcm5hbFN0b3JlID0gZnVuY3Rpb24oZTUsIHQ0LCByMykgewogICAgICByZXR1cm4gbDcuY3VycmVudC51c2VTeW5jRXh0ZXJuYWxTdG9yZShlNSwgdDQsIHIzKTsKICAgIH07CiAgICBuOC51c2VUcmFuc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBsNy5jdXJyZW50LnVzZVRyYW5zaXRpb24oKTsKICAgIH07CiAgICBuOC52ZXJzaW9uID0gIjE4LjIuMCI7CiAgfSk7CiAgdmFyIEwxOSA9IGsxNygobGUxNSwgVjIxKSA9PiB7CiAgICAidXNlIHN0cmljdCI7CiAgICBWMjEuZXhwb3J0cyA9IEQxOSgpOwogIH0pOwogIHZhciBGMjAgPSBIMjEoTDE5KCkpOwogIHZhciB7IENoaWxkcmVuOiBhZTE1LCBDb21wb25lbnQ6IHBlMTEsIEZyYWdtZW50OiB5ZTEzLCBQcm9maWxlcjogZGUxMCwgUHVyZUNvbXBvbmVudDogX2UxMywgU3RyaWN0TW9kZTogbWUxNiwgU3VzcGVuc2U6IGhlMTEsIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOiB2ZTExLCBjbG9uZUVsZW1lbnQ6IFNlMTIsIGNyZWF0ZUNvbnRleHQ6IEVlOCwgY3JlYXRlRWxlbWVudDogUmUxNCwgY3JlYXRlRmFjdG9yeTogQ2UxNywgY3JlYXRlUmVmOiBrZTE0LCBmb3J3YXJkUmVmOiB3ZTksIGlzVmFsaWRFbGVtZW50OiBiZTExLCBsYXp5OiAkZTEwLCBtZW1vOiB4ZTEyLCBzdGFydFRyYW5zaXRpb246IE9lMTIsIHVuc3RhYmxlX2FjdDogamU1LCB1c2VDYWxsYmFjazogSWU5LCB1c2VDb250ZXh0OiBnZTExLCB1c2VEZWJ1Z1ZhbHVlOiBQZTEzLCB1c2VEZWZlcnJlZFZhbHVlOiBUZTE0LCB1c2VFZmZlY3Q6IERlMTEsIHVzZUlkOiBWZTUsIHVzZUltcGVyYXRpdmVIYW5kbGU6IExlOCwgdXNlSW5zZXJ0aW9uRWZmZWN0OiBOZTksIHVzZUxheW91dEVmZmVjdDogRmUxMSwgdXNlTWVtbzogVWU3LCB1c2VSZWR1Y2VyOiBxZTYsIHVzZVJlZjogQWUxNiwgdXNlU3RhdGU6IE1lMTEsIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiB6ZTcsIHVzZVRyYW5zaXRpb246IEJlMTAsIHZlcnNpb246IEhlNSB9ID0gRjIwOwogIHZhciB7IGRlZmF1bHQ6IE4xNSwgLi4uY2UxMyB9ID0gRjIwOwogIHZhciBXZTkgPSBOMTUgIT09IHZvaWQgMCA/IE4xNSA6IGNlMTM7CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bmb3J0YXdlc29tZS9yZWFjdC1mb250YXdlc29tZUAwLjIuMC9kZW5vL3JlYWN0LWZvbnRhd2Vzb21lLmpzCiAgZnVuY3Rpb24gVDI4KGU1LCB0NCkgewogICAgdmFyIHIzID0gT2JqZWN0LmtleXMoZTUpOwogICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsKICAgICAgdmFyIGE0ID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlNSk7CiAgICAgIHQ0ICYmIChhNCA9IGE0LmZpbHRlcihmdW5jdGlvbihpNCkgewogICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGU1LCBpNCkuZW51bWVyYWJsZTsKICAgICAgfSkpLCByMy5wdXNoLmFwcGx5KHIzLCBhNCk7CiAgICB9CiAgICByZXR1cm4gcjM7CiAgfQogIGZ1bmN0aW9uIGMxNihlNSkgewogICAgZm9yICh2YXIgdDQgPSAxOyB0NCA8IGFyZ3VtZW50cy5sZW5ndGg7IHQ0KyspIHsKICAgICAgdmFyIHIzID0gYXJndW1lbnRzW3Q0XSAhPSBudWxsID8gYXJndW1lbnRzW3Q0XSA6IHt9OwogICAgICB0NCAlIDIgPyBUMjgoT2JqZWN0KHIzKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbihhNCkgewogICAgICAgIGIyMyhlNSwgYTQsIHIzW2E0XSk7CiAgICAgIH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlNSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocjMpKSA6IFQyOChPYmplY3QocjMpKS5mb3JFYWNoKGZ1bmN0aW9uKGE0KSB7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGU1LCBhNCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyMywgYTQpKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gZTU7CiAgfQogIGZ1bmN0aW9uIGg5KGU1KSB7CiAgICByZXR1cm4gaDkgPSB0eXBlb2YgU3ltYm9sID09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAic3ltYm9sIiA/IGZ1bmN0aW9uKHQ0KSB7CiAgICAgIHJldHVybiB0eXBlb2YgdDQ7CiAgICB9IDogZnVuY3Rpb24odDQpIHsKICAgICAgcmV0dXJuIHQ0ICYmIHR5cGVvZiBTeW1ib2wgPT0gImZ1bmN0aW9uIiAmJiB0NC5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIHQ0ICE9PSBTeW1ib2wucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2YgdDQ7CiAgICB9LCBoOShlNSk7CiAgfQogIGZ1bmN0aW9uIGIyMyhlNSwgdDQsIHIzKSB7CiAgICByZXR1cm4gdDQgaW4gZTUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZTUsIHQ0LCB7IHZhbHVlOiByMywgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KSA6IGU1W3Q0XSA9IHIzLCBlNTsKICB9CiAgZnVuY3Rpb24gRjIxKGU1LCB0NCkgewogICAgaWYgKGU1ID09IG51bGwpCiAgICAgIHJldHVybiB7fTsKICAgIHZhciByMyA9IHt9LCBhNCA9IE9iamVjdC5rZXlzKGU1KSwgaTQsIG80OwogICAgZm9yIChvNCA9IDA7IG80IDwgYTQubGVuZ3RoOyBvNCsrKQogICAgICBpNCA9IGE0W280XSwgISh0NC5pbmRleE9mKGk0KSA+PSAwKSAmJiAocjNbaTRdID0gZTVbaTRdKTsKICAgIHJldHVybiByMzsKICB9CiAgZnVuY3Rpb24gTDIwKGU1LCB0NCkgewogICAgaWYgKGU1ID09IG51bGwpCiAgICAgIHJldHVybiB7fTsKICAgIHZhciByMyA9IEYyMShlNSwgdDQpLCBhNCwgaTQ7CiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgewogICAgICB2YXIgbzQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGU1KTsKICAgICAgZm9yIChpNCA9IDA7IGk0IDwgbzQubGVuZ3RoOyBpNCsrKQogICAgICAgIGE0ID0gbzRbaTRdLCAhKHQ0LmluZGV4T2YoYTQpID49IDApICYmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGU1LCBhNCkgfHwgKHIzW2E0XSA9IGU1W2E0XSkpOwogICAgfQogICAgcmV0dXJuIHIzOwogIH0KICBmdW5jdGlvbiBTMjAoZTUpIHsKICAgIHJldHVybiBVMjcoZTUpIHx8IEsxOChlNSkgfHwgJDIwKGU1KSB8fCBIMjIoKTsKICB9CiAgZnVuY3Rpb24gVTI3KGU1KSB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShlNSkpCiAgICAgIHJldHVybiBfMjQoZTUpOwogIH0KICBmdW5jdGlvbiBLMTgoZTUpIHsKICAgIGlmICh0eXBlb2YgU3ltYm9sIDwgInUiICYmIGU1W1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBlNVsiQEBpdGVyYXRvciJdICE9IG51bGwpCiAgICAgIHJldHVybiBBcnJheS5mcm9tKGU1KTsKICB9CiAgZnVuY3Rpb24gJDIwKGU1LCB0NCkgewogICAgaWYgKCEhZTUpIHsKICAgICAgaWYgKHR5cGVvZiBlNSA9PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gXzI0KGU1LCB0NCk7CiAgICAgIHZhciByMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlNSkuc2xpY2UoOCwgLTEpOwogICAgICBpZiAocjMgPT09ICJPYmplY3QiICYmIGU1LmNvbnN0cnVjdG9yICYmIChyMyA9IGU1LmNvbnN0cnVjdG9yLm5hbWUpLCByMyA9PT0gIk1hcCIgfHwgcjMgPT09ICJTZXQiKQogICAgICAgIHJldHVybiBBcnJheS5mcm9tKGU1KTsKICAgICAgaWYgKHIzID09PSAiQXJndW1lbnRzIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyMykpCiAgICAgICAgcmV0dXJuIF8yNChlNSwgdDQpOwogICAgfQogIH0KICBmdW5jdGlvbiBfMjQoZTUsIHQ0KSB7CiAgICAodDQgPT0gbnVsbCB8fCB0NCA+IGU1Lmxlbmd0aCkgJiYgKHQ0ID0gZTUubGVuZ3RoKTsKICAgIGZvciAodmFyIHIzID0gMCwgYTQgPSBuZXcgQXJyYXkodDQpOyByMyA8IHQ0OyByMysrKQogICAgICBhNFtyM10gPSBlNVtyM107CiAgICByZXR1cm4gYTQ7CiAgfQogIGZ1bmN0aW9uIEgyMigpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCk7CiAgfQogIGZ1bmN0aW9uIE0yMihlNSkgewogICAgdmFyIHQ0LCByMyA9IGU1LmJlYXQsIGE0ID0gZTUuZmFkZSwgaTQgPSBlNS5iZWF0RmFkZSwgbzQgPSBlNS5ib3VuY2UsIHkxNyA9IGU1LnNoYWtlLCBtMjMgPSBlNS5mbGFzaCwgbDcgPSBlNS5zcGluLCBzOCA9IGU1LnNwaW5QdWxzZSwgdTExID0gZTUuc3BpblJldmVyc2UsIHgyMSA9IGU1LnB1bHNlLCB3MjEgPSBlNS5maXhlZFdpZHRoLCBkMTUgPSBlNS5pbnZlcnNlLCBQMjcgPSBlNS5ib3JkZXIsIHAxOCA9IGU1Lmxpc3RJdGVtLCBmMTEgPSBlNS5mbGlwLCBJMjcgPSBlNS5zaXplLCB2MTUgPSBlNS5yb3RhdGlvbiwgQTIwID0gZTUucHVsbCwgTjE3ID0gKHQ0ID0geyAiZmEtYmVhdCI6IHIzLCAiZmEtZmFkZSI6IGE0LCAiZmEtYmVhdC1mYWRlIjogaTQsICJmYS1ib3VuY2UiOiBvNCwgImZhLXNoYWtlIjogeTE3LCAiZmEtZmxhc2giOiBtMjMsICJmYS1zcGluIjogbDcsICJmYS1zcGluLXJldmVyc2UiOiB1MTEsICJmYS1zcGluLXB1bHNlIjogczgsICJmYS1wdWxzZSI6IHgyMSwgImZhLWZ3IjogdzIxLCAiZmEtaW52ZXJzZSI6IGQxNSwgImZhLWJvcmRlciI6IFAyNywgImZhLWxpIjogcDE4LCAiZmEtZmxpcCI6IGYxMSA9PT0gdHJ1ZSwgImZhLWZsaXAtaG9yaXpvbnRhbCI6IGYxMSA9PT0gImhvcml6b250YWwiIHx8IGYxMSA9PT0gImJvdGgiLCAiZmEtZmxpcC12ZXJ0aWNhbCI6IGYxMSA9PT0gInZlcnRpY2FsIiB8fCBmMTEgPT09ICJib3RoIiB9LCBiMjModDQsICJmYS0iLmNvbmNhdChJMjcpLCB0eXBlb2YgSTI3IDwgInUiICYmIEkyNyAhPT0gbnVsbCksIGIyMyh0NCwgImZhLXJvdGF0ZS0iLmNvbmNhdCh2MTUpLCB0eXBlb2YgdjE1IDwgInUiICYmIHYxNSAhPT0gbnVsbCAmJiB2MTUgIT09IDApLCBiMjModDQsICJmYS1wdWxsLSIuY29uY2F0KEEyMCksIHR5cGVvZiBBMjAgPCAidSIgJiYgQTIwICE9PSBudWxsKSwgYjIzKHQ0LCAiZmEtc3dhcC1vcGFjaXR5IiwgZTUuc3dhcE9wYWNpdHkpLCB0NCk7CiAgICByZXR1cm4gT2JqZWN0LmtleXMoTjE3KS5tYXAoZnVuY3Rpb24oTzE1KSB7CiAgICAgIHJldHVybiBOMTdbTzE1XSA/IE8xNSA6IG51bGw7CiAgICB9KS5maWx0ZXIoZnVuY3Rpb24oTzE1KSB7CiAgICAgIHJldHVybiBPMTU7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gVjE5KGU1KSB7CiAgICByZXR1cm4gZTUgPSBlNSAtIDAsIGU1ID09PSBlNTsKICB9CiAgZnVuY3Rpb24gVzE2KGU1KSB7CiAgICByZXR1cm4gVjE5KGU1KSA/IGU1IDogKGU1ID0gZTUucmVwbGFjZSgvW1wtX1xzXSsoLik/L2csIGZ1bmN0aW9uKHQ0LCByMykgewogICAgICByZXR1cm4gcjMgPyByMy50b1VwcGVyQ2FzZSgpIDogIiI7CiAgICB9KSwgZTUuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyBlNS5zdWJzdHIoMSkpOwogIH0KICB2YXIgcTE4ID0gWyJzdHlsZSJdOwogIGZ1bmN0aW9uIEIyMihlNSkgewogICAgcmV0dXJuIGU1LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZTUuc2xpY2UoMSk7CiAgfQogIGZ1bmN0aW9uIEcyMShlNSkgewogICAgcmV0dXJuIGU1LnNwbGl0KCI7IikubWFwKGZ1bmN0aW9uKHQ0KSB7CiAgICAgIHJldHVybiB0NC50cmltKCk7CiAgICB9KS5maWx0ZXIoZnVuY3Rpb24odDQpIHsKICAgICAgcmV0dXJuIHQ0OwogICAgfSkucmVkdWNlKGZ1bmN0aW9uKHQ0LCByMykgewogICAgICB2YXIgYTQgPSByMy5pbmRleE9mKCI6IiksIGk0ID0gVzE2KHIzLnNsaWNlKDAsIGE0KSksIG80ID0gcjMuc2xpY2UoYTQgKyAxKS50cmltKCk7CiAgICAgIHJldHVybiBpNC5zdGFydHNXaXRoKCJ3ZWJraXQiKSA/IHQ0W0IyMihpNCldID0gbzQgOiB0NFtpNF0gPSBvNCwgdDQ7CiAgICB9LCB7fSk7CiAgfQogIGZ1bmN0aW9uIEUxNChlNSwgdDQpIHsKICAgIHZhciByMyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzJdIDoge307CiAgICBpZiAodHlwZW9mIHQ0ID09ICJzdHJpbmciKQogICAgICByZXR1cm4gdDQ7CiAgICB2YXIgYTQgPSAodDQuY2hpbGRyZW4gfHwgW10pLm1hcChmdW5jdGlvbihsNykgewogICAgICByZXR1cm4gRTE0KGU1LCBsNyk7CiAgICB9KSwgaTQgPSBPYmplY3Qua2V5cyh0NC5hdHRyaWJ1dGVzIHx8IHt9KS5yZWR1Y2UoZnVuY3Rpb24obDcsIHM4KSB7CiAgICAgIHZhciB1MTEgPSB0NC5hdHRyaWJ1dGVzW3M4XTsKICAgICAgc3dpdGNoIChzOCkgewogICAgICAgIGNhc2UgImNsYXNzIjoKICAgICAgICAgIGw3LmF0dHJzLmNsYXNzTmFtZSA9IHUxMSwgZGVsZXRlIHQ0LmF0dHJpYnV0ZXMuY2xhc3M7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzdHlsZSI6CiAgICAgICAgICBsNy5hdHRycy5zdHlsZSA9IEcyMSh1MTEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHM4LmluZGV4T2YoImFyaWEtIikgPT09IDAgfHwgczguaW5kZXhPZigiZGF0YS0iKSA9PT0gMCA/IGw3LmF0dHJzW3M4LnRvTG93ZXJDYXNlKCldID0gdTExIDogbDcuYXR0cnNbVzE2KHM4KV0gPSB1MTE7CiAgICAgIH0KICAgICAgcmV0dXJuIGw3OwogICAgfSwgeyBhdHRyczoge30gfSksIG80ID0gcjMuc3R5bGUsIHkxNyA9IG80ID09PSB2b2lkIDAgPyB7fSA6IG80LCBtMjMgPSBMMjAocjMsIHExOCk7CiAgICByZXR1cm4gaTQuYXR0cnMuc3R5bGUgPSBjMTYoYzE2KHt9LCBpNC5hdHRycy5zdHlsZSksIHkxNyksIGU1LmFwcGx5KHZvaWQgMCwgW3Q0LnRhZywgYzE2KGMxNih7fSwgaTQuYXR0cnMpLCBtMjMpXS5jb25jYXQoUzIwKGE0KSkpOwogIH0KICB2YXIgUjIzID0gZmFsc2U7CiAgdHJ5IHsKICAgIFIyMyA9IHRydWU7CiAgfSBjYXRjaCB7CiAgfQogIGZ1bmN0aW9uIEoxMigpIHsKICAgIGlmICghUjIzICYmIGNvbnNvbGUgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT0gImZ1bmN0aW9uIikgewogICAgICB2YXIgZTU7CiAgICAgIChlNSA9IGNvbnNvbGUpLmVycm9yLmFwcGx5KGU1LCBhcmd1bWVudHMpOwogICAgfQogIH0KICBmdW5jdGlvbiB6MjUoZTUpIHsKICAgIGlmIChlNSAmJiBoOShlNSkgPT09ICJvYmplY3QiICYmIGU1LnByZWZpeCAmJiBlNS5pY29uTmFtZSAmJiBlNS5pY29uKQogICAgICByZXR1cm4gZTU7CiAgICBpZiAoemU2Lmljb24pCiAgICAgIHJldHVybiB6ZTYuaWNvbihlNSk7CiAgICBpZiAoZTUgPT09IG51bGwpCiAgICAgIHJldHVybiBudWxsOwogICAgaWYgKGU1ICYmIGg5KGU1KSA9PT0gIm9iamVjdCIgJiYgZTUucHJlZml4ICYmIGU1Lmljb25OYW1lKQogICAgICByZXR1cm4gZTU7CiAgICBpZiAoQXJyYXkuaXNBcnJheShlNSkgJiYgZTUubGVuZ3RoID09PSAyKQogICAgICByZXR1cm4geyBwcmVmaXg6IGU1WzBdLCBpY29uTmFtZTogZTVbMV0gfTsKICAgIGlmICh0eXBlb2YgZTUgPT0gInN0cmluZyIpCiAgICAgIHJldHVybiB7IHByZWZpeDogImZhcyIsIGljb25OYW1lOiBlNSB9OwogIH0KICBmdW5jdGlvbiBqMTYoZTUsIHQ0KSB7CiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0NCkgJiYgdDQubGVuZ3RoID4gMCB8fCAhQXJyYXkuaXNBcnJheSh0NCkgJiYgdDQgPyBiMjMoe30sIGU1LCB0NCkgOiB7fTsKICB9CiAgdmFyIGcxMSA9IFdlOS5mb3J3YXJkUmVmKGZ1bmN0aW9uKGU1LCB0NCkgewogICAgdmFyIHIzID0gZTUuaWNvbiwgYTQgPSBlNS5tYXNrLCBpNCA9IGU1LnN5bWJvbCwgbzQgPSBlNS5jbGFzc05hbWUsIHkxNyA9IGU1LnRpdGxlLCBtMjMgPSBlNS50aXRsZUlkLCBsNyA9IGU1Lm1hc2tJZCwgczggPSB6MjUocjMpLCB1MTEgPSBqMTYoImNsYXNzZXMiLCBbXS5jb25jYXQoUzIwKE0yMihlNSkpLCBTMjAobzQuc3BsaXQoIiAiKSkpKSwgeDIxID0gajE2KCJ0cmFuc2Zvcm0iLCB0eXBlb2YgZTUudHJhbnNmb3JtID09ICJzdHJpbmciID8gemU2LnRyYW5zZm9ybShlNS50cmFuc2Zvcm0pIDogZTUudHJhbnNmb3JtKSwgdzIxID0gajE2KCJtYXNrIiwgejI1KGE0KSksIGQxNSA9ICRlOShzOCwgYzE2KGMxNihjMTYoYzE2KHt9LCB1MTEpLCB4MjEpLCB3MjEpLCB7fSwgeyBzeW1ib2w6IGk0LCB0aXRsZTogeTE3LCB0aXRsZUlkOiBtMjMsIG1hc2tJZDogbDcgfSkpOwogICAgaWYgKCFkMTUpCiAgICAgIHJldHVybiBKMTIoIkNvdWxkIG5vdCBmaW5kIGljb24iLCBzOCksIG51bGw7CiAgICB2YXIgUDI3ID0gZDE1LmFic3RyYWN0LCBwMTggPSB7IHJlZjogdDQgfTsKICAgIHJldHVybiBPYmplY3Qua2V5cyhlNSkuZm9yRWFjaChmdW5jdGlvbihmMTEpIHsKICAgICAgZzExLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShmMTEpIHx8IChwMThbZjExXSA9IGU1W2YxMV0pOwogICAgfSksIFExNShQMjdbMF0sIHAxOCk7CiAgfSk7CiAgZzExLmRpc3BsYXlOYW1lID0gIkZvbnRBd2Vzb21lSWNvbiI7CiAgZzExLnByb3BUeXBlcyA9IHsgYmVhdDogYWUxNC5ib29sLCBib3JkZXI6IGFlMTQuYm9vbCwgYmVhdEZhZGU6IGFlMTQuYm9vbCwgYm91bmNlOiBhZTE0LmJvb2wsIGNsYXNzTmFtZTogYWUxNC5zdHJpbmcsIGZhZGU6IGFlMTQuYm9vbCwgZmxhc2g6IGFlMTQuYm9vbCwgbWFzazogYWUxNC5vbmVPZlR5cGUoW2FlMTQub2JqZWN0LCBhZTE0LmFycmF5LCBhZTE0LnN0cmluZ10pLCBtYXNrSWQ6IGFlMTQuc3RyaW5nLCBmaXhlZFdpZHRoOiBhZTE0LmJvb2wsIGludmVyc2U6IGFlMTQuYm9vbCwgZmxpcDogYWUxNC5vbmVPZihbdHJ1ZSwgZmFsc2UsICJob3Jpem9udGFsIiwgInZlcnRpY2FsIiwgImJvdGgiXSksIGljb246IGFlMTQub25lT2ZUeXBlKFthZTE0Lm9iamVjdCwgYWUxNC5hcnJheSwgYWUxNC5zdHJpbmddKSwgbGlzdEl0ZW06IGFlMTQuYm9vbCwgcHVsbDogYWUxNC5vbmVPZihbInJpZ2h0IiwgImxlZnQiXSksIHB1bHNlOiBhZTE0LmJvb2wsIHJvdGF0aW9uOiBhZTE0Lm9uZU9mKFswLCA5MCwgMTgwLCAyNzBdKSwgc2hha2U6IGFlMTQuYm9vbCwgc2l6ZTogYWUxNC5vbmVPZihbIjJ4cyIsICJ4cyIsICJzbSIsICJsZyIsICJ4bCIsICIyeGwiLCAiMXgiLCAiMngiLCAiM3giLCAiNHgiLCAiNXgiLCAiNngiLCAiN3giLCAiOHgiLCAiOXgiLCAiMTB4Il0pLCBzcGluOiBhZTE0LmJvb2wsIHNwaW5QdWxzZTogYWUxNC5ib29sLCBzcGluUmV2ZXJzZTogYWUxNC5ib29sLCBzeW1ib2w6IGFlMTQub25lT2ZUeXBlKFthZTE0LmJvb2wsIGFlMTQuc3RyaW5nXSksIHRpdGxlOiBhZTE0LnN0cmluZywgdGl0bGVJZDogYWUxNC5zdHJpbmcsIHRyYW5zZm9ybTogYWUxNC5vbmVPZlR5cGUoW2FlMTQuc3RyaW5nLCBhZTE0Lm9iamVjdF0pLCBzd2FwT3BhY2l0eTogYWUxNC5ib29sIH07CiAgZzExLmRlZmF1bHRQcm9wcyA9IHsgYm9yZGVyOiBmYWxzZSwgY2xhc3NOYW1lOiAiIiwgbWFzazogbnVsbCwgbWFza0lkOiBudWxsLCBmaXhlZFdpZHRoOiBmYWxzZSwgaW52ZXJzZTogZmFsc2UsIGZsaXA6IGZhbHNlLCBpY29uOiBudWxsLCBsaXN0SXRlbTogZmFsc2UsIHB1bGw6IG51bGwsIHB1bHNlOiBmYWxzZSwgcm90YXRpb246IG51bGwsIHNpemU6IG51bGwsIHNwaW46IGZhbHNlLCBzcGluUHVsc2U6IGZhbHNlLCBzcGluUmV2ZXJzZTogZmFsc2UsIGJlYXQ6IGZhbHNlLCBmYWRlOiBmYWxzZSwgYmVhdEZhZGU6IGZhbHNlLCBib3VuY2U6IGZhbHNlLCBzaGFrZTogZmFsc2UsIHN5bWJvbDogZmFsc2UsIHRpdGxlOiAiIiwgdGl0bGVJZDogbnVsbCwgdHJhbnNmb3JtOiBudWxsLCBzd2FwT3BhY2l0eTogZmFsc2UgfTsKICB2YXIgUTE1ID0gRTE0LmJpbmQobnVsbCwgV2U5LmNyZWF0ZUVsZW1lbnQpOwoKICAvLyBkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9mdXp6eXNvcnRAMi4wLjEvZGVuby9mdXp6eXNvcnQuanMKICB2YXIgc2UxNyA9IE9iamVjdC5jcmVhdGU7CiAgdmFyIE8xMyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKICB2YXIgb2UxMCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CiAgdmFyIGdlMTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczsKICB2YXIgZGUxMSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKICB2YXIgY2UxNCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgdmFyIHVlMTYgPSAodzIxLCBfMjUpID0+ICgpID0+IChfMjUgfHwgdzIxKChfMjUgPSB7IGV4cG9ydHM6IHt9IH0pLmV4cG9ydHMsIF8yNSksIF8yNS5leHBvcnRzKTsKICB2YXIgX2UxNCA9ICh3MjEsIF8yNSwgbTIzLCBQMjcpID0+IHsKICAgIGlmIChfMjUgJiYgdHlwZW9mIF8yNSA9PSAib2JqZWN0IiB8fCB0eXBlb2YgXzI1ID09ICJmdW5jdGlvbiIpCiAgICAgIGZvciAobGV0IHkxNyBvZiBnZTEyKF8yNSkpCiAgICAgICAgIWNlMTQuY2FsbCh3MjEsIHkxNykgJiYgeTE3ICE9PSBtMjMgJiYgTzEzKHcyMSwgeTE3LCB7IGdldDogKCkgPT4gXzI1W3kxN10sIGVudW1lcmFibGU6ICEoUDI3ID0gb2UxMChfMjUsIHkxNykpIHx8IFAyNy5lbnVtZXJhYmxlIH0pOwogICAgcmV0dXJuIHcyMTsKICB9OwogIHZhciBoZTEyID0gKHcyMSwgXzI1LCBtMjMpID0+IChtMjMgPSB3MjEgIT0gbnVsbCA/IHNlMTcoZGUxMSh3MjEpKSA6IHt9LCBfZTE0KF8yNSB8fCAhdzIxIHx8ICF3MjEuX19lc01vZHVsZSA/IE8xMyhtMjMsICJkZWZhdWx0IiwgeyB2YWx1ZTogdzIxLCBlbnVtZXJhYmxlOiB0cnVlIH0pIDogbTIzLCB3MjEpKTsKICB2YXIgajE3ID0gdWUxNigoVTI5LCBxMjApID0+IHsKICAgICgodzIxLCBfMjUpID0+IHsKICAgICAgdHlwZW9mIGRlZmluZSA9PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoW10sIF8yNSkgOiB0eXBlb2YgcTIwID09ICJvYmplY3QiICYmIHEyMC5leHBvcnRzID8gcTIwLmV4cG9ydHMgPSBfMjUoKSA6IHcyMS5mdXp6eXNvcnQgPSBfMjUoKTsKICAgIH0pKFUyOSwgKHcyMSkgPT4gewogICAgICB2YXIgXzI1ID0gKHIzLCBlNSkgPT4gewogICAgICAgIGlmIChyMyA9PSAiZmFyemhlciIpCiAgICAgICAgICByZXR1cm4geyB0YXJnZXQ6ICJmYXJ6aGVyIHdhcyBoZXJlICheLV4qKS8iLCBzY29yZTogMCwgX2luZGV4ZXM6IFswXSB9OwogICAgICAgIGlmICghcjMgfHwgIWU1KQogICAgICAgICAgcmV0dXJuIGcxMjsKICAgICAgICB2YXIgYTQgPSBHMjMocjMpOwogICAgICAgIEEyMChlNSkgfHwgKGU1ID0gazE4KGU1KSk7CiAgICAgICAgdmFyIG44ID0gYTQuYml0ZmxhZ3M7CiAgICAgICAgcmV0dXJuIChuOCAmIGU1Ll9iaXRmbGFncykgIT09IG44ID8gZzEyIDogTjE3KGE0LCBlNSk7CiAgICAgIH0sIG0yMyA9IChyMywgZTUsIGE0KSA9PiB7CiAgICAgICAgaWYgKHIzID09ICJmYXJ6aGVyIikKICAgICAgICAgIHJldHVybiBbeyB0YXJnZXQ6ICJmYXJ6aGVyIHdhcyBoZXJlICheLV4qKS8iLCBzY29yZTogMCwgX2luZGV4ZXM6IFswXSwgb2JqOiBlNSA/IGU1WzBdIDogZzEyIH1dOwogICAgICAgIGlmICghcjMpCiAgICAgICAgICByZXR1cm4gYTQgJiYgYTQuYWxsID8gcmUyMChyMywgZTUsIGE0KSA6IFcxODsKICAgICAgICB2YXIgbjggPSBHMjMocjMpLCBmMTEgPSBuOC5iaXRmbGFncywgdDQgPSBuOC5jb250YWluc1NwYWNlLCB2MTUgPSBhNCAmJiBhNC50aHJlc2hvbGQgfHwgQjI0LCBpNCA9IGE0ICYmIGE0LmxpbWl0IHx8IFExNywgbDcgPSAwLCBzOCA9IDAsIG80ID0gZTUubGVuZ3RoOwogICAgICAgIGlmIChhNCAmJiBhNC5rZXkpCiAgICAgICAgICBmb3IgKHZhciBoMTAgPSBhNC5rZXksIHUxMSA9IDA7IHUxMSA8IG80OyArK3UxMSkgewogICAgICAgICAgICB2YXIgUzIxID0gZTVbdTExXSwgZDE1ID0gTTI1KFMyMSwgaDEwKTsKICAgICAgICAgICAgaWYgKCEhZDE1ICYmIChBMjAoZDE1KSB8fCAoZDE1ID0gazE4KGQxNSkpLCAoZjExICYgZDE1Ll9iaXRmbGFncykgPT09IGYxMSkpIHsKICAgICAgICAgICAgICB2YXIgeDIxID0gTjE3KG44LCBkMTUpOwogICAgICAgICAgICAgIHgyMSAhPT0gZzEyICYmICh4MjEuc2NvcmUgPCB2MTUgfHwgKHgyMSA9IHsgdGFyZ2V0OiB4MjEudGFyZ2V0LCBfdGFyZ2V0TG93ZXI6ICIiLCBfdGFyZ2V0TG93ZXJDb2RlczogZzEyLCBfbmV4dEJlZ2lubmluZ0luZGV4ZXM6IGcxMiwgX2JpdGZsYWdzOiAwLCBzY29yZTogeDIxLnNjb3JlLCBfaW5kZXhlczogeDIxLl9pbmRleGVzLCBvYmo6IFMyMSB9LCBsNyA8IGk0ID8gKHAxOC5hZGQoeDIxKSwgKytsNykgOiAoKytzOCwgeDIxLnNjb3JlID4gcDE4LnBlZWsoKS5zY29yZSAmJiBwMTgucmVwbGFjZVRvcCh4MjEpKSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoYTQgJiYgYTQua2V5cykKICAgICAgICAgIGZvciAodmFyIFYyMSA9IGE0LnNjb3JlRm4gfHwgdmUxMywgWDIzID0gYTQua2V5cywgejI2ID0gWDIzLmxlbmd0aCwgdTExID0gMDsgdTExIDwgbzQ7ICsrdTExKSB7CiAgICAgICAgICAgIGZvciAodmFyIFMyMSA9IGU1W3UxMV0sIGIyNSA9IG5ldyBBcnJheSh6MjYpLCBjMTcgPSAwOyBjMTcgPCB6MjY7ICsrYzE3KSB7CiAgICAgICAgICAgICAgdmFyIGgxMCA9IFgyM1tjMTddLCBkMTUgPSBNMjUoUzIxLCBoMTApOwogICAgICAgICAgICAgIGlmICghZDE1KSB7CiAgICAgICAgICAgICAgICBiMjVbYzE3XSA9IGcxMjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBBMjAoZDE1KSB8fCAoZDE1ID0gazE4KGQxNSkpLCAoZjExICYgZDE1Ll9iaXRmbGFncykgIT09IGYxMSA/IGIyNVtjMTddID0gZzEyIDogYjI1W2MxN10gPSBOMTcobjgsIGQxNSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYjI1Lm9iaiA9IFMyMTsKICAgICAgICAgICAgdmFyIFQyOSA9IFYyMShiMjUpOwogICAgICAgICAgICBUMjkgIT09IGcxMiAmJiAoVDI5IDwgdjE1IHx8IChiMjUuc2NvcmUgPSBUMjksIGw3IDwgaTQgPyAocDE4LmFkZChiMjUpLCArK2w3KSA6ICgrK3M4LCBUMjkgPiBwMTgucGVlaygpLnNjb3JlICYmIHAxOC5yZXBsYWNlVG9wKGIyNSkpKSk7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgZm9yICh2YXIgdTExID0gMDsgdTExIDwgbzQ7ICsrdTExKSB7CiAgICAgICAgICAgIHZhciBkMTUgPSBlNVt1MTFdOwogICAgICAgICAgICBpZiAoISFkMTUgJiYgKEEyMChkMTUpIHx8IChkMTUgPSBrMTgoZDE1KSksIChmMTEgJiBkMTUuX2JpdGZsYWdzKSA9PT0gZjExKSkgewogICAgICAgICAgICAgIHZhciB4MjEgPSBOMTcobjgsIGQxNSk7CiAgICAgICAgICAgICAgeDIxICE9PSBnMTIgJiYgKHgyMS5zY29yZSA8IHYxNSB8fCAobDcgPCBpNCA/IChwMTguYWRkKHgyMSksICsrbDcpIDogKCsrczgsIHgyMS5zY29yZSA+IHAxOC5wZWVrKCkuc2NvcmUgJiYgcDE4LnJlcGxhY2VUb3AoeDIxKSkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGlmIChsNyA9PT0gMCkKICAgICAgICAgIHJldHVybiBXMTg7CiAgICAgICAgZm9yICh2YXIgTDIyID0gbmV3IEFycmF5KGw3KSwgdTExID0gbDcgLSAxOyB1MTEgPj0gMDsgLS11MTEpCiAgICAgICAgICBMMjJbdTExXSA9IHAxOC5wb2xsKCk7CiAgICAgICAgcmV0dXJuIEwyMi50b3RhbCA9IGw3ICsgczgsIEwyMjsKICAgICAgfSwgUDI3ID0gKHIzLCBlNSwgYTQpID0+IHsKICAgICAgICBpZiAodHlwZW9mIGU1ID09ICJmdW5jdGlvbiIpCiAgICAgICAgICByZXR1cm4geTE3KHIzLCBlNSk7CiAgICAgICAgaWYgKHIzID09PSBnMTIpCiAgICAgICAgICByZXR1cm4gZzEyOwogICAgICAgIGU1ID09PSB2b2lkIDAgJiYgKGU1ID0gIjxiPiIpLCBhNCA9PT0gdm9pZCAwICYmIChhNCA9ICI8L2I+Iik7CiAgICAgICAgdmFyIG44ID0gIiIsIGYxMSA9IDAsIHQ0ID0gZmFsc2UsIHYxNSA9IHIzLnRhcmdldCwgaTQgPSB2MTUubGVuZ3RoLCBsNyA9IHIzLl9pbmRleGVzOwogICAgICAgIGw3ID0gbDcuc2xpY2UoMCwgbDcubGVuKS5zb3J0KChoMTAsIHUxMSkgPT4gaDEwIC0gdTExKTsKICAgICAgICBmb3IgKHZhciBzOCA9IDA7IHM4IDwgaTQ7ICsrczgpIHsKICAgICAgICAgIHZhciBvNCA9IHYxNVtzOF07CiAgICAgICAgICBpZiAobDdbZjExXSA9PT0gczgpIHsKICAgICAgICAgICAgaWYgKCsrZjExLCB0NCB8fCAodDQgPSB0cnVlLCBuOCArPSBlNSksIGYxMSA9PT0gbDcubGVuZ3RoKSB7CiAgICAgICAgICAgICAgbjggKz0gbzQgKyBhNCArIHYxNS5zdWJzdHIoczggKyAxKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIHQ0ICYmICh0NCA9IGZhbHNlLCBuOCArPSBhNCk7CiAgICAgICAgICBuOCArPSBvNDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG44OwogICAgICB9LCB5MTcgPSAoczgsIGU1KSA9PiB7CiAgICAgICAgaWYgKHM4ID09PSBnMTIpCiAgICAgICAgICByZXR1cm4gZzEyOwogICAgICAgIHZhciBhNCA9IHM4LnRhcmdldCwgbjggPSBhNC5sZW5ndGgsIGYxMSA9IHM4Ll9pbmRleGVzOwogICAgICAgIGYxMSA9IGYxMS5zbGljZSgwLCBmMTEubGVuKS5zb3J0KCh1MTEsIFMyMSkgPT4gdTExIC0gUzIxKTsKICAgICAgICBmb3IgKHZhciB0NCA9ICIiLCB2MTUgPSAwLCBpNCA9IDAsIGw3ID0gZmFsc2UsIHM4ID0gW10sIG80ID0gMDsgbzQgPCBuODsgKytvNCkgewogICAgICAgICAgdmFyIGgxMCA9IGE0W280XTsKICAgICAgICAgIGlmIChmMTFbaTRdID09PSBvNCkgewogICAgICAgICAgICBpZiAoKytpNCwgbDcgfHwgKGw3ID0gdHJ1ZSwgczgucHVzaCh0NCksIHQ0ID0gIiIpLCBpNCA9PT0gZjExLmxlbmd0aCkgewogICAgICAgICAgICAgIHQ0ICs9IGgxMCwgczgucHVzaChlNSh0NCwgdjE1KyspKSwgdDQgPSAiIiwgczgucHVzaChhNC5zdWJzdHIobzQgKyAxKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICBsNyAmJiAobDcgPSBmYWxzZSwgczgucHVzaChlNSh0NCwgdjE1KyspKSwgdDQgPSAiIik7CiAgICAgICAgICB0NCArPSBoMTA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzODsKICAgICAgfSwgZWUxOCA9IChyMykgPT4gcjMuX2luZGV4ZXMuc2xpY2UoMCwgcjMuX2luZGV4ZXMubGVuKS5zb3J0KChlNSwgYTQpID0+IGU1IC0gYTQpLCBFMTUgPSAocjMpID0+IHsKICAgICAgICB0eXBlb2YgcjMgIT0gInN0cmluZyIgJiYgKHIzID0gIiIpOwogICAgICAgIHZhciBlNSA9IEgyMyhyMyk7CiAgICAgICAgcmV0dXJuIHsgdGFyZ2V0OiByMywgX3RhcmdldExvd2VyOiBlNS5fbG93ZXIsIF90YXJnZXRMb3dlckNvZGVzOiBlNS5sb3dlckNvZGVzLCBfbmV4dEJlZ2lubmluZ0luZGV4ZXM6IGcxMiwgX2JpdGZsYWdzOiBlNS5iaXRmbGFncywgc2NvcmU6IGcxMiwgX2luZGV4ZXM6IFswXSwgb2JqOiBnMTIgfTsKICAgICAgfSwgJDIxID0gKHIzKSA9PiB7CiAgICAgICAgdHlwZW9mIHIzICE9ICJzdHJpbmciICYmIChyMyA9ICIiKSwgcjMgPSByMy50cmltKCk7CiAgICAgICAgdmFyIGU1ID0gSDIzKHIzKSwgYTQgPSBbXTsKICAgICAgICBpZiAoZTUuY29udGFpbnNTcGFjZSkgewogICAgICAgICAgdmFyIG44ID0gcjMuc3BsaXQoL1xzKy8pOwogICAgICAgICAgbjggPSBbLi4ubmV3IFNldChuOCldOwogICAgICAgICAgZm9yICh2YXIgZjExID0gMDsgZjExIDwgbjgubGVuZ3RoOyBmMTErKykKICAgICAgICAgICAgaWYgKG44W2YxMV0gIT09ICIiKSB7CiAgICAgICAgICAgICAgdmFyIHQ0ID0gSDIzKG44W2YxMV0pOwogICAgICAgICAgICAgIGE0LnB1c2goeyBsb3dlckNvZGVzOiB0NC5sb3dlckNvZGVzLCBfbG93ZXI6IG44W2YxMV0udG9Mb3dlckNhc2UoKSwgY29udGFpbnNTcGFjZTogZmFsc2UgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgbG93ZXJDb2RlczogZTUubG93ZXJDb2RlcywgYml0ZmxhZ3M6IGU1LmJpdGZsYWdzLCBjb250YWluc1NwYWNlOiBlNS5jb250YWluc1NwYWNlLCBfbG93ZXI6IGU1Ll9sb3dlciwgc3BhY2VTZWFyY2hlczogYTQgfTsKICAgICAgfSwgazE4ID0gKHIzKSA9PiB7CiAgICAgICAgaWYgKHIzLmxlbmd0aCA+IDk5OSkKICAgICAgICAgIHJldHVybiBFMTUocjMpOwogICAgICAgIHZhciBlNSA9IEoxNC5nZXQocjMpOwogICAgICAgIHJldHVybiBlNSAhPT0gdm9pZCAwIHx8IChlNSA9IEUxNShyMyksIEoxNC5zZXQocjMsIGU1KSksIGU1OwogICAgICB9LCBHMjMgPSAocjMpID0+IHsKICAgICAgICBpZiAocjMubGVuZ3RoID4gOTk5KQogICAgICAgICAgcmV0dXJuICQyMShyMyk7CiAgICAgICAgdmFyIGU1ID0gSzE5LmdldChyMyk7CiAgICAgICAgcmV0dXJuIGU1ICE9PSB2b2lkIDAgfHwgKGU1ID0gJDIxKHIzKSwgSzE5LnNldChyMywgZTUpKSwgZTU7CiAgICAgIH0sIHJlMjAgPSAocjMsIGU1LCBhNCkgPT4gewogICAgICAgIHZhciBuOCA9IFtdOwogICAgICAgIG44LnRvdGFsID0gZTUubGVuZ3RoOwogICAgICAgIHZhciBmMTEgPSBhNCAmJiBhNC5saW1pdCB8fCBRMTc7CiAgICAgICAgaWYgKGE0ICYmIGE0LmtleSkKICAgICAgICAgIGZvciAodmFyIHQ0ID0gMDsgdDQgPCBlNS5sZW5ndGg7IHQ0KyspIHsKICAgICAgICAgICAgdmFyIHYxNSA9IGU1W3Q0XSwgaTQgPSBNMjUodjE1LCBhNC5rZXkpOwogICAgICAgICAgICBpZiAoISFpNCkgewogICAgICAgICAgICAgIEEyMChpNCkgfHwgKGk0ID0gazE4KGk0KSksIGk0LnNjb3JlID0gQjI0LCBpNC5faW5kZXhlcy5sZW4gPSAwOwogICAgICAgICAgICAgIHZhciBsNyA9IGk0OwogICAgICAgICAgICAgIGlmIChsNyA9IHsgdGFyZ2V0OiBsNy50YXJnZXQsIF90YXJnZXRMb3dlcjogIiIsIF90YXJnZXRMb3dlckNvZGVzOiBnMTIsIF9uZXh0QmVnaW5uaW5nSW5kZXhlczogZzEyLCBfYml0ZmxhZ3M6IDAsIHNjb3JlOiBpNC5zY29yZSwgX2luZGV4ZXM6IGcxMiwgb2JqOiB2MTUgfSwgbjgucHVzaChsNyksIG44Lmxlbmd0aCA+PSBmMTEpCiAgICAgICAgICAgICAgICByZXR1cm4gbjg7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBlbHNlIGlmIChhNCAmJiBhNC5rZXlzKQogICAgICAgICAgZm9yICh2YXIgdDQgPSAwOyB0NCA8IGU1Lmxlbmd0aDsgdDQrKykgewogICAgICAgICAgICBmb3IgKHZhciB2MTUgPSBlNVt0NF0sIHM4ID0gbmV3IEFycmF5KGE0LmtleXMubGVuZ3RoKSwgbzQgPSBhNC5rZXlzLmxlbmd0aCAtIDE7IG80ID49IDA7IC0tbzQpIHsKICAgICAgICAgICAgICB2YXIgaTQgPSBNMjUodjE1LCBhNC5rZXlzW280XSk7CiAgICAgICAgICAgICAgaWYgKCFpNCkgewogICAgICAgICAgICAgICAgczhbbzRdID0gZzEyOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIEEyMChpNCkgfHwgKGk0ID0gazE4KGk0KSksIGk0LnNjb3JlID0gQjI0LCBpNC5faW5kZXhlcy5sZW4gPSAwLCBzOFtvNF0gPSBpNDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoczgub2JqID0gdjE1LCBzOC5zY29yZSA9IEIyNCwgbjgucHVzaChzOCksIG44Lmxlbmd0aCA+PSBmMTEpCiAgICAgICAgICAgICAgcmV0dXJuIG44OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIGZvciAodmFyIHQ0ID0gMDsgdDQgPCBlNS5sZW5ndGg7IHQ0KyspIHsKICAgICAgICAgICAgdmFyIGk0ID0gZTVbdDRdOwogICAgICAgICAgICBpZiAoISFpNCAmJiAoQTIwKGk0KSB8fCAoaTQgPSBrMTgoaTQpKSwgaTQuc2NvcmUgPSBCMjQsIGk0Ll9pbmRleGVzLmxlbiA9IDAsIG44LnB1c2goaTQpLCBuOC5sZW5ndGggPj0gZjExKSkKICAgICAgICAgICAgICByZXR1cm4gbjg7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIG44OwogICAgICB9LCBOMTcgPSAocjMsIGU1KSA9PiB7CiAgICAgICAgaWYgKHIzLmNvbnRhaW5zU3BhY2UpCiAgICAgICAgICByZXR1cm4gYWUxNyhyMywgZTUpOwogICAgICAgIGZvciAodmFyIGE0ID0gcjMuX2xvd2VyLCBuOCA9IHIzLmxvd2VyQ29kZXMsIGYxMSA9IG44WzBdLCB0NCA9IGU1Ll90YXJnZXRMb3dlckNvZGVzLCB2MTUgPSBuOC5sZW5ndGgsIGk0ID0gdDQubGVuZ3RoLCBoMTAgPSAwLCBsNyA9IDAsIHM4ID0gMDsgOyApIHsKICAgICAgICAgIHZhciBvNCA9IGYxMSA9PT0gdDRbbDddOwogICAgICAgICAgaWYgKG80KSB7CiAgICAgICAgICAgIGlmIChDMTdbczgrK10gPSBsNywgKytoMTAsIGgxMCA9PT0gdjE1KQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBmMTEgPSBuOFtoMTBdOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCsrbDcsIGw3ID49IGk0KQogICAgICAgICAgICByZXR1cm4gZzEyOwogICAgICAgIH0KICAgICAgICB2YXIgaDEwID0gMCwgdTExID0gZmFsc2UsIFMyMSA9IDAsIGQxNSA9IGU1Ll9uZXh0QmVnaW5uaW5nSW5kZXhlczsKICAgICAgICBkMTUgPT09IGcxMiAmJiAoZDE1ID0gZTUuX25leHRCZWdpbm5pbmdJbmRleGVzID0gaWUxMyhlNS50YXJnZXQpKTsKICAgICAgICB2YXIgeDIxID0gbDcgPSBDMTdbMF0gPT09IDAgPyAwIDogZDE1W0MxN1swXSAtIDFdLCBWMjEgPSAwOwogICAgICAgIGlmIChsNyAhPT0gaTQpCiAgICAgICAgICBmb3IgKDsgOyApCiAgICAgICAgICAgIGlmIChsNyA+PSBpNCkgewogICAgICAgICAgICAgIGlmIChoMTAgPD0gMCB8fCAoKytWMjEsIFYyMSA+IDIwMCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAtLWgxMDsKICAgICAgICAgICAgICB2YXIgWDIzID0gRjIyWy0tUzIxXTsKICAgICAgICAgICAgICBsNyA9IGQxNVtYMjNdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHZhciBvNCA9IG44W2gxMF0gPT09IHQ0W2w3XTsKICAgICAgICAgICAgICBpZiAobzQpIHsKICAgICAgICAgICAgICAgIGlmIChGMjJbUzIxKytdID0gbDcsICsraDEwLCBoMTAgPT09IHYxNSkgewogICAgICAgICAgICAgICAgICB1MTEgPSB0cnVlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICsrbDc7CiAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBsNyA9IGQxNVtsN107CiAgICAgICAgICAgIH0KICAgICAgICB2YXIgejI2ID0gZTUuX3RhcmdldExvd2VyLmluZGV4T2YoYTQsIEMxN1swXSksIGIyNSA9IH56MjY7CiAgICAgICAgaWYgKGIyNSAmJiAhdTExKQogICAgICAgICAgZm9yICh2YXIgYzE3ID0gMDsgYzE3IDwgczg7ICsrYzE3KQogICAgICAgICAgICBDMTdbYzE3XSA9IHoyNiArIGMxNzsKICAgICAgICB2YXIgVDI5ID0gZmFsc2U7CiAgICAgICAgYjI1ICYmIChUMjkgPSBlNS5fbmV4dEJlZ2lubmluZ0luZGV4ZXNbejI2IC0gMV0gPT09IHoyNik7CiAgICAgICAgewogICAgICAgICAgaWYgKHUxMSkKICAgICAgICAgICAgdmFyIEwyMiA9IEYyMiwgWTMwID0gUzIxOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB2YXIgTDIyID0gQzE3LCBZMzAgPSBzODsKICAgICAgICAgIGZvciAodmFyIEkyNyA9IDAsIEQyMCA9IDAsIGMxNyA9IDE7IGMxNyA8IHYxNTsgKytjMTcpCiAgICAgICAgICAgIEwyMltjMTddIC0gTDIyW2MxNyAtIDFdICE9PSAxICYmIChJMjcgLT0gTDIyW2MxN10sICsrRDIwKTsKICAgICAgICAgIHZhciBsZTE1ID0gTDIyW3YxNSAtIDFdIC0gTDIyWzBdIC0gKHYxNSAtIDEpOwogICAgICAgICAgaWYgKEkyNyAtPSAoMTIgKyBsZTE1KSAqIEQyMCwgTDIyWzBdICE9PSAwICYmIChJMjcgLT0gTDIyWzBdICogMTApLCAhdTExKQogICAgICAgICAgICBJMjcgKj0gMWUzOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZvciAodmFyIFoyMiA9IDEsIGMxNyA9IGQxNVswXTsgYzE3IDwgaTQ7IGMxNyA9IGQxNVtjMTddKQogICAgICAgICAgICAgICsrWjIyOwogICAgICAgICAgICBaMjIgPiAyNCAmJiAoSTI3ICo9IChaMjIgLSAyNCkgKiAxMCk7CiAgICAgICAgICB9CiAgICAgICAgICBiMjUgJiYgKEkyNyAvPSAxMCksIFQyOSAmJiAoSTI3IC89IDEwKSwgSTI3IC09IGk0IC0gdjE1LCBlNS5zY29yZSA9IEkyNzsKICAgICAgICAgIGZvciAodmFyIGMxNyA9IDA7IGMxNyA8IFkzMDsgKytjMTcpCiAgICAgICAgICAgIGU1Ll9pbmRleGVzW2MxN10gPSBMMjJbYzE3XTsKICAgICAgICAgIHJldHVybiBlNS5faW5kZXhlcy5sZW4gPSBZMzAsIGU1OwogICAgICAgIH0KICAgICAgfSwgYWUxNyA9IChyMywgZTUpID0+IHsKICAgICAgICBmb3IgKHZhciBhNCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIG44ID0gMCwgZjExID0gZzEyLCB0NCA9IDAsIHYxNSA9IHIzLnNwYWNlU2VhcmNoZXMsIHM4ID0gMDsgczggPCB2MTUubGVuZ3RoOyArK3M4KSB7CiAgICAgICAgICB2YXIgaTQgPSB2MTVbczhdOwogICAgICAgICAgaWYgKGYxMSA9IE4xNyhpNCwgZTUpLCBmMTEgPT09IGcxMikKICAgICAgICAgICAgcmV0dXJuIGcxMjsKICAgICAgICAgIG44ICs9IGYxMS5zY29yZSwgZjExLl9pbmRleGVzWzBdIDwgdDQgJiYgKG44IC09IHQ0IC0gZjExLl9pbmRleGVzWzBdKSwgdDQgPSBmMTEuX2luZGV4ZXNbMF07CiAgICAgICAgICBmb3IgKHZhciBsNyA9IDA7IGw3IDwgZjExLl9pbmRleGVzLmxlbjsgKytsNykKICAgICAgICAgICAgYTQuYWRkKGYxMS5faW5kZXhlc1tsN10pOwogICAgICAgIH0KICAgICAgICBmMTEuc2NvcmUgPSBuODsKICAgICAgICB2YXIgczggPSAwOwogICAgICAgIGZvciAobGV0IG80IG9mIGE0KQogICAgICAgICAgZjExLl9pbmRleGVzW3M4KytdID0gbzQ7CiAgICAgICAgcmV0dXJuIGYxMS5faW5kZXhlcy5sZW4gPSBzOCwgZjExOwogICAgICB9LCBIMjMgPSAocjMpID0+IHsKICAgICAgICBmb3IgKHZhciBlNSA9IHIzLmxlbmd0aCwgYTQgPSByMy50b0xvd2VyQ2FzZSgpLCBuOCA9IFtdLCBmMTEgPSAwLCB0NCA9IGZhbHNlLCB2MTUgPSAwOyB2MTUgPCBlNTsgKyt2MTUpIHsKICAgICAgICAgIHZhciBpNCA9IG44W3YxNV0gPSBhNC5jaGFyQ29kZUF0KHYxNSk7CiAgICAgICAgICBpZiAoaTQgPT09IDMyKSB7CiAgICAgICAgICAgIHQ0ID0gdHJ1ZTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbDcgPSBpNCA+PSA5NyAmJiBpNCA8PSAxMjIgPyBpNCAtIDk3IDogaTQgPj0gNDggJiYgaTQgPD0gNTcgPyAyNiA6IGk0IDw9IDEyNyA/IDMwIDogMzE7CiAgICAgICAgICBmMTEgfD0gMSA8PCBsNzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsgbG93ZXJDb2RlczogbjgsIGJpdGZsYWdzOiBmMTEsIGNvbnRhaW5zU3BhY2U6IHQ0LCBfbG93ZXI6IGE0IH07CiAgICAgIH0sIG5lMTUgPSAocjMpID0+IHsKICAgICAgICBmb3IgKHZhciBlNSA9IHIzLmxlbmd0aCwgYTQgPSBbXSwgbjggPSAwLCBmMTEgPSBmYWxzZSwgdDQgPSBmYWxzZSwgdjE1ID0gMDsgdjE1IDwgZTU7ICsrdjE1KSB7CiAgICAgICAgICB2YXIgaTQgPSByMy5jaGFyQ29kZUF0KHYxNSksIGw3ID0gaTQgPj0gNjUgJiYgaTQgPD0gOTAsIHM4ID0gbDcgfHwgaTQgPj0gOTcgJiYgaTQgPD0gMTIyIHx8IGk0ID49IDQ4ICYmIGk0IDw9IDU3LCBvNCA9IGw3ICYmICFmMTEgfHwgIXQ0IHx8ICFzODsKICAgICAgICAgIGYxMSA9IGw3LCB0NCA9IHM4LCBvNCAmJiAoYTRbbjgrK10gPSB2MTUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYTQ7CiAgICAgIH0sIGllMTMgPSAocjMpID0+IHsKICAgICAgICBmb3IgKHZhciBlNSA9IHIzLmxlbmd0aCwgYTQgPSBuZTE1KHIzKSwgbjggPSBbXSwgZjExID0gYTRbMF0sIHQ0ID0gMCwgdjE1ID0gMDsgdjE1IDwgZTU7ICsrdjE1KQogICAgICAgICAgZjExID4gdjE1ID8gbjhbdjE1XSA9IGYxMSA6IChmMTEgPSBhNFsrK3Q0XSwgbjhbdjE1XSA9IGYxMSA9PT0gdm9pZCAwID8gZTUgOiBmMTEpOwogICAgICAgIHJldHVybiBuODsKICAgICAgfSwgZmUxMiA9ICgpID0+IHsKICAgICAgICBKMTQuY2xlYXIoKSwgSzE5LmNsZWFyKCksIEMxNyA9IFtdLCBGMjIgPSBbXTsKICAgICAgfSwgSjE0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgSzE5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgQzE3ID0gW10sIEYyMiA9IFtdLCB2ZTEzID0gKHIzKSA9PiB7CiAgICAgICAgZm9yICh2YXIgZTUgPSBCMjQsIGE0ID0gcjMubGVuZ3RoLCBuOCA9IDA7IG44IDwgYTQ7ICsrbjgpIHsKICAgICAgICAgIHZhciBmMTEgPSByM1tuOF07CiAgICAgICAgICBpZiAoZjExICE9PSBnMTIpIHsKICAgICAgICAgICAgdmFyIHQ0ID0gZjExLnNjb3JlOwogICAgICAgICAgICB0NCA+IGU1ICYmIChlNSA9IHQ0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGU1ID09PSBCMjQgPyBnMTIgOiBlNTsKICAgICAgfSwgTTI1ID0gKHIzLCBlNSkgPT4gewogICAgICAgIHZhciBhNCA9IHIzW2U1XTsKICAgICAgICBpZiAoYTQgIT09IHZvaWQgMCkKICAgICAgICAgIHJldHVybiBhNDsKICAgICAgICB2YXIgbjggPSBlNTsKICAgICAgICBBcnJheS5pc0FycmF5KGU1KSB8fCAobjggPSBlNS5zcGxpdCgiLiIpKTsKICAgICAgICBmb3IgKHZhciBmMTEgPSBuOC5sZW5ndGgsIHQ0ID0gLTE7IHIzICYmICsrdDQgPCBmMTE7ICkKICAgICAgICAgIHIzID0gcjNbbjhbdDRdXTsKICAgICAgICByZXR1cm4gcjM7CiAgICAgIH0sIEEyMCA9IChyMykgPT4gdHlwZW9mIHIzID09ICJvYmplY3QiLCBRMTcgPSAxIC8gMCwgQjI0ID0gLVExNywgVzE4ID0gW107CiAgICAgIFcxOC50b3RhbCA9IDA7CiAgICAgIHZhciBnMTIgPSBudWxsLCB0ZTE3ID0gKHIzKSA9PiB7CiAgICAgICAgdmFyIGU1ID0gW10sIGE0ID0gMCwgbjggPSB7fSwgZjExID0gKHQ0KSA9PiB7CiAgICAgICAgICBmb3IgKHZhciB2MTUgPSAwLCBpNCA9IGU1W3YxNV0sIGw3ID0gMTsgbDcgPCBhNDsgKSB7CiAgICAgICAgICAgIHZhciBzOCA9IGw3ICsgMTsKICAgICAgICAgICAgdjE1ID0gbDcsIHM4IDwgYTQgJiYgZTVbczhdLnNjb3JlIDwgZTVbbDddLnNjb3JlICYmICh2MTUgPSBzOCksIGU1W3YxNSAtIDEgPj4gMV0gPSBlNVt2MTVdLCBsNyA9IDEgKyAodjE1IDw8IDEpOwogICAgICAgICAgfQogICAgICAgICAgZm9yICh2YXIgbzQgPSB2MTUgLSAxID4+IDE7IHYxNSA+IDAgJiYgaTQuc2NvcmUgPCBlNVtvNF0uc2NvcmU7IG80ID0gKHYxNSA9IG80KSAtIDEgPj4gMSkKICAgICAgICAgICAgZTVbdjE1XSA9IGU1W280XTsKICAgICAgICAgIGU1W3YxNV0gPSBpNDsKICAgICAgICB9OwogICAgICAgIHJldHVybiBuOC5hZGQgPSAodDQpID0+IHsKICAgICAgICAgIHZhciB2MTUgPSBhNDsKICAgICAgICAgIGU1W2E0KytdID0gdDQ7CiAgICAgICAgICBmb3IgKHZhciBpNCA9IHYxNSAtIDEgPj4gMTsgdjE1ID4gMCAmJiB0NC5zY29yZSA8IGU1W2k0XS5zY29yZTsgaTQgPSAodjE1ID0gaTQpIC0gMSA+PiAxKQogICAgICAgICAgICBlNVt2MTVdID0gZTVbaTRdOwogICAgICAgICAgZTVbdjE1XSA9IHQ0OwogICAgICAgIH0sIG44LnBvbGwgPSAodDQpID0+IHsKICAgICAgICAgIGlmIChhNCAhPT0gMCkgewogICAgICAgICAgICB2YXIgdjE1ID0gZTVbMF07CiAgICAgICAgICAgIHJldHVybiBlNVswXSA9IGU1Wy0tYTRdLCBmMTEoKSwgdjE1OwogICAgICAgICAgfQogICAgICAgIH0sIG44LnBlZWsgPSAodDQpID0+IHsKICAgICAgICAgIGlmIChhNCAhPT0gMCkKICAgICAgICAgICAgcmV0dXJuIGU1WzBdOwogICAgICAgIH0sIG44LnJlcGxhY2VUb3AgPSAodDQpID0+IHsKICAgICAgICAgIGU1WzBdID0gdDQsIGYxMSgpOwogICAgICAgIH0sIG44OwogICAgICB9LCBwMTggPSB0ZTE3KCk7CiAgICAgIHJldHVybiB7IHNpbmdsZTogXzI1LCBnbzogbTIzLCBoaWdobGlnaHQ6IFAyNywgcHJlcGFyZTogRTE1LCBpbmRleGVzOiBlZTE4LCBjbGVhbnVwOiBmZTEyIH07CiAgICB9KTsKICB9KTsKICB2YXIgeGUxMyA9IGhlMTIoajE3KCkpOwogIHZhciB7IGRlZmF1bHQ6IFIyNCwgLi4ud2UxMCB9ID0geGUxMzsKICB2YXIgYmUxMiA9IFIyNCAhPT0gdm9pZCAwID8gUjI0IDogd2UxMDsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9jb21wb25lbnRzL2ZpbHRlci50c3gKICBmdW5jdGlvbiBtYWdpY1NvcnRlcihhNCwgYjI1KSB7CiAgICBpZiAoYTQub3JkZXJJZCAmJiBiMjUub3JkZXJJZCkgewogICAgICByZXR1cm4gYTQub3JkZXJJZCA8IGIyNS5vcmRlcklkID8gLTEgOiAxOwogICAgfQogICAgaWYgKGE0Lm9yZGVySWQpIHsKICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgaWYgKGIyNS5vcmRlcklkKSB7CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQogIGZ1bmN0aW9uIGVzY2FwZUh0bWwodW5zYWZlKSB7CiAgICByZXR1cm4gdW5zYWZlLnJlcGxhY2VBbGwoIiYiLCAiJmFtcDsiKS5yZXBsYWNlQWxsKCI8IiwgIiZsdDsiKS5yZXBsYWNlQWxsKCI+IiwgIiZndDsiKS5yZXBsYWNlQWxsKCciJywgIiZxdW90OyIpLnJlcGxhY2VBbGwoIiciLCAiJiMwMzk7Iik7CiAgfQogIGZ1bmN0aW9uIGZ1enp5U29ydGVyKHBhdHRlcm4sIG9wdGlvbnMpIHsKICAgIHJldHVybiBiZTEyLmdvKHBhdHRlcm4sIG9wdGlvbnMsIHsKICAgICAgYWxsOiB0cnVlLAogICAgICBrZXk6ICJuYW1lIgogICAgfSkubWFwKChyZXN1bHQpID0+ICh7IC4uLnJlc3VsdC5vYmosIHJlc3VsdCB9KSkuc29ydChtYWdpY1NvcnRlcik7CiAgfQogIGZ1bmN0aW9uIEZpbHRlckxpc3QoewogICAgcGxhY2Vob2xkZXIsCiAgICBvcHRpb25zLAogICAgbGFiZWwsCiAgICBvblNlbGVjdCwKICAgIG9uS2V5UHJlc3MsCiAgICBhbGxvd05ldyA9IGZhbHNlLAogICAgaGVscFRleHQgPSAiIiwKICAgIGNvbXBsZXRlUHJlZml4LAogICAgaWNvbiwKICAgIG5ld0hpbnQKICB9KSB7CiAgICBjb25zdCBzZWFyY2hCb3hSZWYgPSBMZShudWxsKTsKICAgIGNvbnN0IFt0ZXh0LCBzZXRUZXh0XSA9IHFlKCIiKTsKICAgIGNvbnN0IFttYXRjaGluZ09wdGlvbnMsIHNldE1hdGNoaW5nT3B0aW9uc10gPSBxZSgKICAgICAgZnV6enlTb3J0ZXIoIiIsIG9wdGlvbnMpCiAgICApOwogICAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3Rpb25PcHRpb25dID0gcWUoMCk7CiAgICBsZXQgc2VsZWN0ZWRFbGVtZW50UmVmID0gTGUobnVsbCk7CiAgICBmdW5jdGlvbiBmaWx0ZXJVcGRhdGUoZTUpIHsKICAgICAgdXBkYXRlRmlsdGVyKGU1LnRhcmdldC52YWx1ZSk7CiAgICB9CiAgICBmdW5jdGlvbiB1cGRhdGVGaWx0ZXIob3JpZ2luYWxQaHJhc2UpIHsKICAgICAgbGV0IGZvdW5kRXhhY3RNYXRjaCA9IGZhbHNlOwogICAgICBsZXQgcmVzdWx0cyA9IGZ1enp5U29ydGVyKG9yaWdpbmFsUGhyYXNlLCBvcHRpb25zKTsKICAgICAgaWYgKGFsbG93TmV3ICYmICFmb3VuZEV4YWN0TWF0Y2ggJiYgb3JpZ2luYWxQaHJhc2UpIHsKICAgICAgICByZXN1bHRzLnB1c2goewogICAgICAgICAgbmFtZTogb3JpZ2luYWxQaHJhc2UsCiAgICAgICAgICBoaW50OiBuZXdIaW50CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgc2V0TWF0Y2hpbmdPcHRpb25zKHJlc3VsdHMpOwogICAgICBzZXRUZXh0KG9yaWdpbmFsUGhyYXNlKTsKICAgICAgc2V0U2VsZWN0aW9uT3B0aW9uKDApOwogICAgfQogICAgeGUyKCgpID0+IHsKICAgICAgdXBkYXRlRmlsdGVyKHRleHQpOwogICAgfSwgW29wdGlvbnNdKTsKICAgIHhlMigoKSA9PiB7CiAgICAgIHNlYXJjaEJveFJlZi5jdXJyZW50LmZvY3VzKCk7CiAgICB9LCBbXSk7CiAgICB4ZTIoKCkgPT4gewogICAgICBmdW5jdGlvbiBjbG9zZXIoKSB7CiAgICAgICAgb25TZWxlY3Qodm9pZCAwKTsKICAgICAgfQogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGNsb3Nlcik7CiAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBjbG9zZXIpOwogICAgICB9OwogICAgfSwgW10pOwogICAgbGV0IGV4aXRpbmcgPSBmYWxzZTsKICAgIGNvbnN0IHJldHVybkVsID0gLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJkaXYiLCB7CiAgICAgIGNsYXNzTmFtZTogInNiLWZpbHRlci13cmFwcGVyIgogICAgfSwgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJkaXYiLCB7CiAgICAgIGNsYXNzTmFtZTogInNiLWZpbHRlci1ib3giCiAgICB9LCAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoImRpdiIsIHsKICAgICAgY2xhc3NOYW1lOiAic2ItaGVhZGVyIgogICAgfSwgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJsYWJlbCIsIG51bGwsIGxhYmVsKSwgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJpbnB1dCIsIHsKICAgICAgdHlwZTogInRleHQiLAogICAgICB2YWx1ZTogdGV4dCwKICAgICAgcGxhY2Vob2xkZXIsCiAgICAgIHJlZjogc2VhcmNoQm94UmVmLAogICAgICBvbkNoYW5nZTogZmlsdGVyVXBkYXRlLAogICAgICBvbkJsdXI6IChlNSkgPT4gewogICAgICAgIGlmICghZXhpdGluZykgewogICAgICAgICAgc2VhcmNoQm94UmVmLmN1cnJlbnQuZm9jdXMoKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG9uS2V5RG93bjogKGU1KSA9PiB7CiAgICAgICAgaWYgKG9uS2V5UHJlc3MpIHsKICAgICAgICAgIG9uS2V5UHJlc3MoZTUua2V5LCB0ZXh0KTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChlNS5rZXkpIHsKICAgICAgICAgIGNhc2UgIkFycm93VXAiOgogICAgICAgICAgICBzZXRTZWxlY3Rpb25PcHRpb24oTWF0aC5tYXgoMCwgc2VsZWN0ZWRPcHRpb24gLSAxKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiQXJyb3dEb3duIjoKICAgICAgICAgICAgc2V0U2VsZWN0aW9uT3B0aW9uKAogICAgICAgICAgICAgIE1hdGgubWluKG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggLSAxLCBzZWxlY3RlZE9wdGlvbiArIDEpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiRW50ZXIiOgogICAgICAgICAgICBleGl0aW5nID0gdHJ1ZTsKICAgICAgICAgICAgb25TZWxlY3QobWF0Y2hpbmdPcHRpb25zW3NlbGVjdGVkT3B0aW9uXSk7CiAgICAgICAgICAgIGU1LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiUGFnZVVwIjoKICAgICAgICAgICAgc2V0U2VsZWN0aW9uT3B0aW9uKE1hdGgubWF4KDAsIHNlbGVjdGVkT3B0aW9uIC0gNSkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIlBhZ2VEb3duIjoKICAgICAgICAgICAgc2V0U2VsZWN0aW9uT3B0aW9uKE1hdGgubWF4KDAsIHNlbGVjdGVkT3B0aW9uICsgNSkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgIkhvbWUiOgogICAgICAgICAgICBzZXRTZWxlY3Rpb25PcHRpb24oMCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiRW5kIjoKICAgICAgICAgICAgc2V0U2VsZWN0aW9uT3B0aW9uKG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggLSAxKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJFc2NhcGUiOgogICAgICAgICAgICBleGl0aW5nID0gdHJ1ZTsKICAgICAgICAgICAgb25TZWxlY3Qodm9pZCAwKTsKICAgICAgICAgICAgZTUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICIgIjoKICAgICAgICAgICAgaWYgKGNvbXBsZXRlUHJlZml4ICYmICF0ZXh0KSB7CiAgICAgICAgICAgICAgdXBkYXRlRmlsdGVyKGNvbXBsZXRlUHJlZml4KTsKICAgICAgICAgICAgICBlNS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlNS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgfSwKICAgICAgb25DbGljazogKGU1KSA9PiBlNS5zdG9wUHJvcGFnYXRpb24oKQogICAgfSkpLCAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoImRpdiIsIHsKICAgICAgY2xhc3NOYW1lOiAic2ItaGVscC10ZXh0IiwKICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBoZWxwVGV4dCB9CiAgICB9KSwgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJkaXYiLCB7CiAgICAgIGNsYXNzTmFtZTogInNiLXJlc3VsdC1saXN0IgogICAgfSwgbWF0Y2hpbmdPcHRpb25zICYmIG1hdGNoaW5nT3B0aW9ucy5sZW5ndGggPiAwID8gbWF0Y2hpbmdPcHRpb25zLm1hcCgob3B0aW9uLCBpZHgpID0+IC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudCgiZGl2IiwgewogICAgICBrZXk6ICIiICsgaWR4LAogICAgICByZWY6IHNlbGVjdGVkT3B0aW9uID09PSBpZHggPyBzZWxlY3RlZEVsZW1lbnRSZWYgOiB2b2lkIDAsCiAgICAgIGNsYXNzTmFtZTogc2VsZWN0ZWRPcHRpb24gPT09IGlkeCA/ICJzYi1zZWxlY3RlZC1vcHRpb24iIDogInNiLW9wdGlvbiIsCiAgICAgIG9uTW91c2VPdmVyOiAoZTUpID0+IHsKICAgICAgICBzZXRTZWxlY3Rpb25PcHRpb24oaWR4KTsKICAgICAgfSwKICAgICAgb25DbGljazogKGU1KSA9PiB7CiAgICAgICAgZTUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBvblNlbGVjdChvcHRpb24pOwogICAgICB9CiAgICB9LCAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoInNwYW4iLCB7CiAgICAgIGNsYXNzTmFtZTogInNiLWljb24iCiAgICB9LCBpY29uICYmIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudChnMTEsIHsKICAgICAgaWNvbgogICAgfSkpLCAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoInNwYW4iLCB7CiAgICAgIGNsYXNzTmFtZTogInNiLW5hbWUiLAogICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDogewogICAgICAgIF9faHRtbDogb3B0aW9uPy5yZXN1bHQ/LmluZGV4ZXMgPyBiZTEyLmhpZ2hsaWdodChvcHRpb24ucmVzdWx0LCAiPGI+IiwgIjwvYj4iKSA6IGVzY2FwZUh0bWwob3B0aW9uLm5hbWUpCiAgICAgIH0KICAgIH0pLCBvcHRpb24uaGludCAmJiAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoInNwYW4iLCB7CiAgICAgIGNsYXNzTmFtZTogInNiLWhpbnQiCiAgICB9LCBvcHRpb24uaGludCkpKSA6IG51bGwpKSk7CiAgICB4ZTIoKCkgPT4gewogICAgICBzZWxlY3RlZEVsZW1lbnRSZWYuY3VycmVudD8uc2Nyb2xsSW50b1ZpZXcoewogICAgICAgIGJsb2NrOiAibmVhcmVzdCIKICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiByZXR1cm5FbDsKICB9CgogIC8vIGRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29uc0A2LjIuMC9kZW5vL2ZyZWUtc29saWQtc3ZnLWljb25zLmpzCiAgdmFyIGM0MiA9IHsgcHJlZml4OiAiZmFzIiwgaWNvbk5hbWU6ICJwZXJzb24tcnVubmluZyIsIGljb246IFs0NDgsIDUxMiwgWzEyNzkzOSwgInJ1bm5pbmciXSwgImY3MGMiLCAiTTMzNiA0OGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6TTE0MS43IDE3NS41YzkuOS05LjkgMjMuNC0xNS41IDM3LjUtMTUuNWMxLjkgMCAzLjggLjEgNS42IC4zTDE1My42IDI1NGMtOS4zIDI4IDEuNyA1OC44IDI2LjggNzQuNWw4Ni4yIDUzLjktMjUuNCA4OC44Yy00LjkgMTcgNSAzNC43IDIyIDM5LjZzMzQuNy01IDM5LjYtMjJsMjguNy0xMDAuNGM1LjktMjAuNi0yLjYtNDIuNi0yMC43LTUzLjlMMjU0IDI5OWwzMC45LTgyLjQgNS4xIDEyLjNDMzA1IDI2NC43IDMzOS45IDI4OCAzNzguNyAyODhINDAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM3OC43Yy0xMi45IDAtMjQuNi03LjgtMjkuNS0xOS43bC02LjMtMTVjLTE0LjYtMzUuMS00NC4xLTYxLjktODAuNS03My4xbC00OC43LTE1Yy0xMS4xLTMuNC0yMi43LTUuMi0zNC40LTUuMmMtMzEgMC02MC44IDEyLjMtODIuNyAzNC4zTDczLjQgMTUzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMjMuMS0yMy4xek0xMDcuMiAzNTJINDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoNjkuNmMxOSAwIDM2LjItMTEuMiA0My45LTI4LjVMMTczIDM2MS42bC05LjUtNmMtMTcuNS0xMC45LTMwLjUtMjYuOC0zNy45LTQ0LjlMMTA3LjIgMzUyeiJdIH07CiAgdmFyIFFlNCA9IGM0MjsKICB2YXIgTTIzID0geyBwcmVmaXg6ICJmYXMiLCBpY29uTmFtZTogImhvdXNlIiwgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTY4LCA2MzQ5OCwgNjM1MDAsICJob21lIiwgImhvbWUtYWx0IiwgImhvbWUtbGctYWx0Il0sICJmMDE1IiwgIk01NzUuOCAyNTUuNWMwIDE4LTE1IDMyLjEtMzIgMzIuMWgtMzJsLjcgMTYwLjJjMCAyLjctLjIgNS40LS41IDguMVY0NzJjMCAyMi4xLTE3LjkgNDAtNDAgNDBINDU2Yy0xLjEgMC0yLjIgMC0zLjMtLjFjLTEuNCAuMS0yLjggLjEtNC4yIC4xSDQxNiAzOTJjLTIyLjEgMC00MC0xNy45LTQwLTQwVjQ0OCAzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NCAyNGMwIDIyLjEtMTcuOSA0MC00MCA0MEgxNjAgMTI4LjFjLTEuNSAwLTMtLjEtNC41LS4yYy0xLjIgLjEtMi40IC4yLTMuNiAuMkgxMDRjLTIyLjEgMC00MC0xNy45LTQwLTQwVjM2MGMwLS45IDAtMS45IC4xLTIuOFYyODcuNkgzMmMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNTY0LjggMjMxLjVjOCA3IDEyIDE1IDExIDI0eiJdIH07CiAgdmFyIEh0OCA9IE0yMzsKICB2YXIgY2ggPSB7IHByZWZpeDogImZhcyIsIGljb25OYW1lOiAic3VuIiwgaWNvbjogWzUxMiwgNTEyLCBbOTcyOF0sICJmMTg1IiwgIk0zNjEuNSAxLjJjNSAyLjEgOC42IDYuNiA5LjYgMTEuOUwzOTEgMTIxbDEwNy45IDE5LjhjNS4zIDEgOS44IDQuNiAxMS45IDkuNnMxLjUgMTAuNy0xLjYgMTUuMkw0NDYuOSAyNTZsNjIuMyA5MC4zYzMuMSA0LjUgMy43IDEwLjIgMS42IDE1LjJzLTYuNiA4LjYtMTEuOSA5LjZMMzkxIDM5MSAzNzEuMSA0OTguOWMtMSA1LjMtNC42IDkuOC05LjYgMTEuOXMtMTAuNyAxLjUtMTUuMi0xLjZMMjU2IDQ0Ni45bC05MC4zIDYyLjNjLTQuNSAzLjEtMTAuMiAzLjctMTUuMiAxLjZzLTguNi02LjYtOS42LTExLjlMMTIxIDM5MSAxMy4xIDM3MS4xYy01LjMtMS05LjgtNC42LTExLjktOS42cy0xLjUtMTAuNyAxLjYtMTUuMkw2NS4xIDI1NiAyLjggMTY1LjdjLTMuMS00LjUtMy43LTEwLjItMS42LTE1LjJzNi42LTguNiAxMS45LTkuNkwxMjEgMTIxIDE0MC45IDEzLjFjMS01LjMgNC42LTkuOCA5LjYtMTEuOXMxMC43LTEuNSAxNS4yIDEuNkwyNTYgNjUuMSAzNDYuMyAyLjhjNC41LTMuMSAxMC4yLTMuNyAxNS4yLTEuNnpNMzUyIDI1NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NnM0My05NiA5Ni05NnM5NiA0MyA5NiA5NnptMzIgMGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOHMtMTI4IDU3LjMtMTI4IDEyOHM1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjh6Il0gfTsKICB2YXIgV2QgPSB7IHByZWZpeDogImZhcyIsIGljb25OYW1lOiAibW9vbiIsIGljb246IFszODQsIDUxMiwgWzEyNzc2OSwgOTIxNF0sICJmMTg2IiwgIk0yMjMuNSAzMkMxMDAgMzIgMCAxMzIuMyAwIDI1NlMxMDAgNDgwIDIyMy41IDQ4MGM2MC42IDAgMTE1LjUtMjQuMiAxNTUuOC02My40YzUtNC45IDYuMy0xMi41IDMuMS0xOC43cy0xMC4xLTkuNy0xNy04LjVjLTkuOCAxLjctMTkuOCAyLjYtMzAuMSAyLjZjLTk2LjkgMC0xNzUuNS03OC44LTE3NS41LTE3NmMwLTY1LjggMzYtMTIzLjEgODkuMy0xNTMuM2M2LjEtMy41IDkuMi0xMC41IDcuNy0xNy4zcy03LjMtMTEuOS0xNC4zLTEyLjVjLTYuMy0uNS0xMi42LS44LTE5LS44eiJdIH07CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvY29tcG9uZW50cy9jb21tYW5kX3BhbGV0dGUudHN4CiAgZnVuY3Rpb24gQ29tbWFuZFBhbGV0dGUoewogICAgY29tbWFuZHMsCiAgICByZWNlbnRDb21tYW5kcywKICAgIG9uVHJpZ2dlcgogIH0pIHsKICAgIGxldCBvcHRpb25zID0gW107CiAgICBjb25zdCBpc01hYyA9IGlzTWFjTGlrZSgpOwogICAgZm9yIChsZXQgW25hbWUsIGRlZjJdIG9mIGNvbW1hbmRzLmVudHJpZXMoKSkgewogICAgICBvcHRpb25zLnB1c2goewogICAgICAgIG5hbWUsCiAgICAgICAgaGludDogaXNNYWMgJiYgZGVmMi5jb21tYW5kLm1hYyA/IGRlZjIuY29tbWFuZC5tYWMgOiBkZWYyLmNvbW1hbmQua2V5LAogICAgICAgIG9yZGVySWQ6IHJlY2VudENvbW1hbmRzLmhhcyhuYW1lKSA/IC1yZWNlbnRDb21tYW5kcy5nZXQobmFtZSkuZ2V0VGltZSgpIDogMAogICAgICB9KTsKICAgIH0KICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoRmlsdGVyTGlzdCwgewogICAgICBsYWJlbDogIlJ1biIsCiAgICAgIHBsYWNlaG9sZGVyOiAiQ29tbWFuZCIsCiAgICAgIG9wdGlvbnMsCiAgICAgIGFsbG93TmV3OiBmYWxzZSwKICAgICAgaWNvbjogYzQyLAogICAgICBoZWxwVGV4dDogIlN0YXJ0IHR5cGluZyB0aGUgY29tbWFuZCBuYW1lIHRvIGZpbHRlciByZXN1bHRzLCBwcmVzcyA8Y29kZT5SZXR1cm48L2NvZGU+IHRvIHJ1bi4iLAogICAgICBvblNlbGVjdDogKG9wdCkgPT4gewogICAgICAgIGlmIChvcHQpIHsKICAgICAgICAgIG9uVHJpZ2dlcihjb21tYW5kcy5nZXQob3B0Lm5hbWUpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgb25UcmlnZ2VyKHZvaWQgMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvY29tcG9uZW50cy9wYWdlX25hdmlnYXRvci50c3gKICBmdW5jdGlvbiBQYWdlTmF2aWdhdG9yKHsKICAgIGFsbFBhZ2VzLAogICAgb25OYXZpZ2F0ZSwKICAgIGN1cnJlbnRQYWdlCiAgfSkgewogICAgbGV0IG9wdGlvbnMgPSBbXTsKICAgIGZvciAobGV0IHBhZ2VNZXRhIG9mIGFsbFBhZ2VzKSB7CiAgICAgIGxldCBvcmRlcklkID0gLXBhZ2VNZXRhLmxhc3RNb2RpZmllZDsKICAgICAgaWYgKHBhZ2VNZXRhLmxhc3RPcGVuZWQpIHsKICAgICAgICBvcmRlcklkID0gLXBhZ2VNZXRhLmxhc3RPcGVuZWQ7CiAgICAgIH0KICAgICAgaWYgKGN1cnJlbnRQYWdlICYmIGN1cnJlbnRQYWdlID09PSBwYWdlTWV0YS5uYW1lKSB7CiAgICAgICAgb3JkZXJJZCA9IEluZmluaXR5OwogICAgICB9CiAgICAgIG9wdGlvbnMucHVzaCh7CiAgICAgICAgLi4ucGFnZU1ldGEsCiAgICAgICAgb3JkZXJJZAogICAgICB9KTsKICAgIH0KICAgIGxldCBjb21wbGV0ZVByZWZpeCA9IHZvaWQgMDsKICAgIGlmIChjdXJyZW50UGFnZSAmJiBjdXJyZW50UGFnZS5pbmNsdWRlcygiLyIpKSB7CiAgICAgIGNvbnN0IHBpZWNlcyA9IGN1cnJlbnRQYWdlLnNwbGl0KCIvIik7CiAgICAgIGNvbXBsZXRlUHJlZml4ID0gcGllY2VzLnNsaWNlKDAsIHBpZWNlcy5sZW5ndGggLSAxKS5qb2luKCIvIikgKyAiLyI7CiAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlICYmIGN1cnJlbnRQYWdlLmluY2x1ZGVzKCIgIikpIHsKICAgICAgY29tcGxldGVQcmVmaXggPSBjdXJyZW50UGFnZS5zcGxpdCgiICIpWzBdICsgIiAiOwogICAgfQogICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudChGaWx0ZXJMaXN0LCB7CiAgICAgIHBsYWNlaG9sZGVyOiAiUGFnZSIsCiAgICAgIGxhYmVsOiAiT3BlbiIsCiAgICAgIG9wdGlvbnMsCiAgICAgIGFsbG93TmV3OiB0cnVlLAogICAgICBoZWxwVGV4dDogIlN0YXJ0IHR5cGluZyB0aGUgcGFnZSBuYW1lIHRvIGZpbHRlciByZXN1bHRzLCBwcmVzcyA8Y29kZT5SZXR1cm48L2NvZGU+IHRvIG9wZW4uIiwKICAgICAgbmV3SGludDogIkNyZWF0ZSBwYWdlIiwKICAgICAgY29tcGxldGVQcmVmaXgsCiAgICAgIG9uU2VsZWN0OiAob3B0KSA9PiB7CiAgICAgICAgb25OYXZpZ2F0ZShvcHQ/Lm5hbWUpOwogICAgICB9CiAgICB9KTsKICB9CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvY29tcG9uZW50cy9wYW5lbC50c3gKICB2YXIgcGFuZWxIdG1sID0gYDwhRE9DVFlQRSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPGJhc2UgdGFyZ2V0PSJfdG9wIj4KPHNjcmlwdD4Kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCAobWVzc2FnZSkgPT4gewogIGNvbnN0IGRhdGEgPSBtZXNzYWdlLmRhdGE7CiAgc3dpdGNoIChkYXRhLnR5cGUpIHsKICAgIGNhc2UgImh0bWwiOgogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9IGRhdGEuaHRtbDsKICAgICAgaWYgKGRhdGEuc2NyaXB0KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGV2YWwoZGF0YS5zY3JpcHQpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGV2YWxpbmcgc2NyaXB0IiwgZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGJyZWFrOwogIH0KfSk7CgpmdW5jdGlvbiBzZW5kRXZlbnQobmFtZSwgLi4uYXJncykgewogIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoCiAgICB7CiAgICAgIHR5cGU6ICJldmVudCIsCiAgICAgIG5hbWUsCiAgICAgIGFyZ3MsCiAgICB9LAogICAgIioiCiAgKTsKfQo8XC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+ClNlbmQgbWUgSFRNTAo8L2JvZHk+CjwvaHRtbD5gOwogIGZ1bmN0aW9uIFBhbmVsKHsKICAgIGNvbmZpZywKICAgIGVkaXRvcgogIH0pIHsKICAgIGNvbnN0IGlGcmFtZVJlZiA9IExlKG51bGwpOwogICAgeGUyKCgpID0+IHsKICAgICAgZnVuY3Rpb24gbG9hZENvbnRlbnQoKSB7CiAgICAgICAgaWYgKGlGcmFtZVJlZi5jdXJyZW50Py5jb250ZW50V2luZG93KSB7CiAgICAgICAgICBpRnJhbWVSZWYuY3VycmVudC5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgdHlwZTogImh0bWwiLAogICAgICAgICAgICBodG1sOiBjb25maWcuaHRtbCwKICAgICAgICAgICAgc2NyaXB0OiBjb25maWcuc2NyaXB0CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFpRnJhbWVSZWYuY3VycmVudCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBsZXQgaWZyYW1lID0gaUZyYW1lUmVmLmN1cnJlbnQ7CiAgICAgIGlmcmFtZS5vbmxvYWQgPSBsb2FkQ29udGVudDsKICAgICAgbG9hZENvbnRlbnQoKTsKICAgICAgcmV0dXJuICgpID0+IHsKICAgICAgICBpZnJhbWUub25sb2FkID0gbnVsbDsKICAgICAgfTsKICAgIH0sIFtjb25maWcuaHRtbCwgY29uZmlnLnNjcmlwdF0pOwogICAgeGUyKCgpID0+IHsKICAgICAgbGV0IG1lc3NhZ2VMaXN0ZW5lciA9IChldnQpID0+IHsKICAgICAgICBpZiAoZXZ0LnNvdXJjZSAhPT0gaUZyYW1lUmVmLmN1cnJlbnQuY29udGVudFdpbmRvdykgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgZGF0YSA9IGV2dC5kYXRhOwogICAgICAgIGlmICghZGF0YSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBpZiAoZGF0YS50eXBlID09PSAiZXZlbnQiKSB7CiAgICAgICAgICBlZGl0b3IuZGlzcGF0Y2hBcHBFdmVudChkYXRhLm5hbWUsIC4uLmRhdGEuYXJncyk7CiAgICAgICAgfQogICAgICB9OwogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG1lc3NhZ2VMaXN0ZW5lcik7CiAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBtZXNzYWdlTGlzdGVuZXIpOwogICAgICB9OwogICAgfSwgW10pOwogICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudCgiZGl2IiwgewogICAgICBjbGFzc05hbWU6ICJzYi1wYW5lbCIsCiAgICAgIHN0eWxlOiB7IGZsZXg6IGNvbmZpZy5tb2RlIH0KICAgIH0sIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiwgewogICAgICBzcmNEb2M6IHBhbmVsSHRtbCwKICAgICAgcmVmOiBpRnJhbWVSZWYKICAgIH0pKTsKICB9CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvY29tcG9uZW50cy90b3BfYmFyLnRzeAogIGZ1bmN0aW9uIHByZXR0eU5hbWUoczgpIHsKICAgIGlmICghczgpIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogICAgcmV0dXJuIHM4LnJlcGxhY2VBbGwoIi8iLCAiIC8gIik7CiAgfQogIGZ1bmN0aW9uIFRvcEJhcih7CiAgICBwYWdlTmFtZSwKICAgIHVuc2F2ZWRDaGFuZ2VzLAogICAgaXNMb2FkaW5nLAogICAgbm90aWZpY2F0aW9ucywKICAgIG9uQ2xpY2ssCiAgICBvblRoZW1lQ2xpY2ssCiAgICBvbkhvbWVDbGljaywKICAgIG9uQWN0aW9uQ2xpY2ssCiAgICBsaHMsCiAgICByaHMKICB9KSB7CiAgICBjb25zdCBbdGhlbWUsIHNldFRoZW1lXSA9IHFlKGxvY2FsU3RvcmFnZS50aGVtZSA/PyAibGlnaHQiKTsKICAgIGNvbnN0IGlzTWFjID0gaXNNYWNMaWtlKCk7CiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJkaXYiLCB7CiAgICAgIGlkOiAic2ItdG9wIiwKICAgICAgb25DbGljawogICAgfSwgbGhzLCAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoImRpdiIsIHsKICAgICAgY2xhc3NOYW1lOiAibWFpbiIKICAgIH0sIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudCgiZGl2IiwgewogICAgICBjbGFzc05hbWU6ICJpbm5lciIKICAgIH0sIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudCgic3BhbiIsIHsKICAgICAgY2xhc3NOYW1lOiBgc2ItY3VycmVudC1wYWdlICR7aXNMb2FkaW5nID8gInNiLWxvYWRpbmciIDogdW5zYXZlZENoYW5nZXMgPyAic2ItdW5zYXZlZCIgOiAic2Itc2F2ZWQifWAKICAgIH0sIHByZXR0eU5hbWUocGFnZU5hbWUpKSwgbm90aWZpY2F0aW9ucy5sZW5ndGggPiAwICYmIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudCgiZGl2IiwgewogICAgICBjbGFzc05hbWU6ICJzYi1ub3RpZmljYXRpb25zIgogICAgfSwgbm90aWZpY2F0aW9ucy5tYXAoKG5vdGlmaWNhdGlvbikgPT4gLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJkaXYiLCB7CiAgICAgIGtleTogbm90aWZpY2F0aW9uLmlkLAogICAgICBjbGFzc05hbWU6IGBzYi1ub3RpZmljYXRpb24tJHtub3RpZmljYXRpb24udHlwZX1gCiAgICB9LCBub3RpZmljYXRpb24ubWVzc2FnZSkpKSwgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJkaXYiLCB7CiAgICAgIGNsYXNzTmFtZTogInNiLWFjdGlvbnMiCiAgICB9LCAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIsIHsKICAgICAgb25DbGljazogKGU1KSA9PiB7CiAgICAgICAgb25Ib21lQ2xpY2soKTsKICAgICAgICBlNS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgfSwKICAgICAgdGl0bGU6ICJOYXZpZ2F0ZSB0byB0aGUgJ2luZGV4JyBwYWdlIgogICAgfSwgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KGcxMSwgewogICAgICBpY29uOiBIdDgKICAgIH0pKSwgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJidXR0b24iLCB7CiAgICAgIG9uQ2xpY2s6IChlNSkgPT4gewogICAgICAgIG9uQWN0aW9uQ2xpY2soKTsKICAgICAgICBlNS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgfSwKICAgICAgdGl0bGU6ICJPcGVuIHRoZSBjb21tYW5kIHBhbGV0dGUgKCIgKyAoaXNNYWMgPyAiQ21kIiA6ICJDdHJsIikgKyAiKy8pIgogICAgfSwgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KGcxMSwgewogICAgICBpY29uOiBRZTQKICAgIH0pKSwgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJidXR0b24iLCB7CiAgICAgIG9uQ2xpY2s6IChlNSkgPT4gewogICAgICAgIG9uVGhlbWVDbGljaygpOwogICAgICAgIHNldFRoZW1lKGxvY2FsU3RvcmFnZS50aGVtZSA/PyAibGlnaHQiKTsKICAgICAgICBlNS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgfSwKICAgICAgdGl0bGU6ICJUb2dnbGUgdGhlbWUiCiAgICB9LCAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoZzExLCB7CiAgICAgIGljb246IHRoZW1lID09PSAiZGFyayIgPyBjaCA6IFdkCiAgICB9KSkpKSksIHJocyk7CiAgfQoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvY29tbW9uL3R5cGVzLnRzCiAgdmFyIG1heGltdW1BdHRhY2htZW50U2l6ZSA9IDEwMCAqIDEwMjQgKiAxMDI0OwoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL2VkaXRvcl9wYXN0ZS50cwogIHZhciB1cmxSZWdleHAgPSAvXmh0dHBzPzpcL1wvWy1hLXpBLVowLTlAOiUuX1wrfiM9XXsxLDI1Nn0oWy1hLXpBLVowLTkoKUA6JV9cKy5+Iz8mLy89XSopLzsKICB2YXIgcGFzdGVMaW5rRXh0ZW5zaW9uID0gVjQuZnJvbUNsYXNzKAogICAgY2xhc3MgewogICAgICB1cGRhdGUodXBkYXRlKSB7CiAgICAgICAgdXBkYXRlLnRyYW5zYWN0aW9ucy5mb3JFYWNoKCh0cjMpID0+IHsKICAgICAgICAgIGlmICh0cjMuaXNVc2VyRXZlbnQoImlucHV0LnBhc3RlIikpIHsKICAgICAgICAgICAgbGV0IHBhc3RlZFRleHQgPSBbXTsKICAgICAgICAgICAgbGV0IGZyb20yID0gMDsKICAgICAgICAgICAgbGV0IHRvID0gMDsKICAgICAgICAgICAgdHIzLmNoYW5nZXMuaXRlckNoYW5nZXMoKGZyb21BLCB0b0EsIGZyb21CLCB0b0IsIGluc2VydGVkKSA9PiB7CiAgICAgICAgICAgICAgcGFzdGVkVGV4dC5wdXNoKGluc2VydGVkLnNsaWNlU3RyaW5nKDApKTsKICAgICAgICAgICAgICBmcm9tMiA9IGZyb21BOwogICAgICAgICAgICAgIHRvID0gdG9COwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgbGV0IHBhc3RlZFN0cmluZyA9IHBhc3RlZFRleHQuam9pbigiIik7CiAgICAgICAgICAgIGlmIChwYXN0ZWRTdHJpbmcubWF0Y2godXJsUmVnZXhwKSkgewogICAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB1cGRhdGUuc3RhcnRTdGF0ZS5zZWxlY3Rpb24ubWFpbjsKICAgICAgICAgICAgICBpZiAoIXNlbGVjdGlvbi5lbXB0eSkgewogICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgIHVwZGF0ZS52aWV3LmRpc3BhdGNoKHsKICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IGZyb20yLAogICAgICAgICAgICAgICAgICAgICAgICB0bywKICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0OiBgWyR7dXBkYXRlLnN0YXJ0U3RhdGUuc2xpY2VEb2MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnRvCiAgICAgICAgICAgICAgICAgICAgICAgICl9XSgke3Bhc3RlZFN0cmluZ30pYAogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICk7CiAgZnVuY3Rpb24gYXR0YWNobWVudEV4dGVuc2lvbihlZGl0b3IpIHsKICAgIHJldHVybiBNMi5kb21FdmVudEhhbmRsZXJzKHsKICAgICAgZHJhZ292ZXI6IChldmVudCkgPT4gewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH0sCiAgICAgIGRyb3A6IChldmVudCkgPT4gewogICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHsKICAgICAgICAgIGxldCBwYXlsb2FkID0gWy4uLmV2ZW50LmRhdGFUcmFuc2Zlci5maWxlc107CiAgICAgICAgICBpZiAoIXBheWxvYWQubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHNhZmVSdW4yKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGVUcmFuc2ZlcihwYXlsb2FkKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcGFzdGU6IChldmVudCkgPT4gewogICAgICAgIGxldCBwYXlsb2FkID0gWy4uLmV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXNdOwogICAgICAgIGlmICghcGF5bG9hZC5sZW5ndGggfHwgcGF5bG9hZC5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgc2FmZVJ1bjIoYXN5bmMgKCkgPT4gewogICAgICAgICAgYXdhaXQgcHJvY2Vzc0l0ZW1UcmFuc2ZlcihwYXlsb2FkKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSk7CiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRmlsZVRyYW5zZmVyKHBheWxvYWQpIHsKICAgICAgbGV0IGRhdGEgPSBhd2FpdCBwYXlsb2FkWzBdLmFycmF5QnVmZmVyKCk7CiAgICAgIGF3YWl0IHNhdmVGaWxlKGRhdGEsIHBheWxvYWRbMF0ubmFtZSwgcGF5bG9hZFswXS50eXBlKTsKICAgIH0KICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NJdGVtVHJhbnNmZXIocGF5bG9hZCkgewogICAgICBsZXQgZmlsZSA9IHBheWxvYWQuZmluZCgoaXRlbSkgPT4gaXRlbS5raW5kID09PSAiZmlsZSIpOwogICAgICBpZiAoIWZpbGUpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgY29uc3QgZmlsZVR5cGUgPSBmaWxlLnR5cGU7CiAgICAgIGxldCBleHQgPSBmaWxlVHlwZS5zcGxpdCgiLyIpWzFdOwogICAgICBsZXQgZmlsZU5hbWUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoIi4iKVswXS5yZXBsYWNlKCJUIiwgIl8iKS5yZXBsYWNlQWxsKCI6IiwgIi0iKTsKICAgICAgbGV0IGRhdGEgPSBhd2FpdCBmaWxlLmdldEFzRmlsZSgpPy5hcnJheUJ1ZmZlcigpOwogICAgICBhd2FpdCBzYXZlRmlsZShkYXRhLCBgJHtmaWxlTmFtZX0uJHtleHR9YCwgZmlsZVR5cGUpOwogICAgfQogICAgYXN5bmMgZnVuY3Rpb24gc2F2ZUZpbGUoZGF0YSwgc3VnZ2VzdGVkTmFtZSwgbWltZVR5cGUpIHsKICAgICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA+IG1heGltdW1BdHRhY2htZW50U2l6ZSkgewogICAgICAgIGVkaXRvci5mbGFzaE5vdGlmaWNhdGlvbigKICAgICAgICAgIGBBdHRhY2htZW50IGlzIHRvbyBsYXJnZSwgbWF4aW11bSBpcyAke21heGltdW1BdHRhY2htZW50U2l6ZSAvIDEwMjQgLyAxMDI0fU1CYCwKICAgICAgICAgICJlcnJvciIKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBsZXQgZmluYWxGaWxlTmFtZSA9IHByb21wdCgKICAgICAgICAiRmlsZSBuYW1lIGZvciBwYXN0ZWQgYXR0YWNobWVudCIsCiAgICAgICAgc3VnZ2VzdGVkTmFtZQogICAgICApOwogICAgICBpZiAoIWZpbmFsRmlsZU5hbWUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYXdhaXQgZWRpdG9yLnNwYWNlLndyaXRlQXR0YWNobWVudChmaW5hbEZpbGVOYW1lLCAiYXJyYXlidWZmZXIiLCBkYXRhKTsKICAgICAgbGV0IGF0dGFjaG1lbnRNYXJrZG93biA9IGBbJHtmaW5hbEZpbGVOYW1lfV0oJHtmaW5hbEZpbGVOYW1lfSlgOwogICAgICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpIHsKICAgICAgICBhdHRhY2htZW50TWFya2Rvd24gPSBgIVtdKCR7ZmluYWxGaWxlTmFtZX0pYDsKICAgICAgfQogICAgICBlZGl0b3IuZWRpdG9yVmlldy5kaXNwYXRjaCh7CiAgICAgICAgY2hhbmdlczogWwogICAgICAgICAgewogICAgICAgICAgICBpbnNlcnQ6IGF0dGFjaG1lbnRNYXJrZG93biwKICAgICAgICAgICAgZnJvbTogZWRpdG9yLmVkaXRvclZpZXcuc3RhdGUuc2VsZWN0aW9uLm1haW4uZnJvbQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL2hvb2tzL2NvbW1hbmQudHMKICB2YXIgQ29tbWFuZEhvb2sgPSBjbGFzcyBleHRlbmRzIEV2ZW50RW1pdHRlcjIgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgfQogICAgYnVpbGRBbGxDb21tYW5kcyhzeXN0ZW0pIHsKICAgICAgdGhpcy5lZGl0b3JDb21tYW5kcy5jbGVhcigpOwogICAgICBmb3IgKGxldCBwbHVnIG9mIHN5c3RlbS5sb2FkZWRQbHVncy52YWx1ZXMoKSkgewogICAgICAgIGZvciAoY29uc3QgW25hbWUsIGZ1bmN0aW9uRGVmXSBvZiBPYmplY3QuZW50cmllcygKICAgICAgICAgIHBsdWcubWFuaWZlc3QuZnVuY3Rpb25zCiAgICAgICAgKSkgewogICAgICAgICAgaWYgKCFmdW5jdGlvbkRlZi5jb21tYW5kKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgY21kID0gZnVuY3Rpb25EZWYuY29tbWFuZDsKICAgICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHMuc2V0KGNtZC5uYW1lLCB7CiAgICAgICAgICAgIGNvbW1hbmQ6IGNtZCwKICAgICAgICAgICAgcnVuOiAoKSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIHBsdWcuaW52b2tlKG5hbWUsIFtjbWRdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuZW1pdCgiY29tbWFuZHNVcGRhdGVkIiwgdGhpcy5lZGl0b3JDb21tYW5kcyk7CiAgICB9CiAgICBhcHBseShzeXN0ZW0pIHsKICAgICAgdGhpcy5idWlsZEFsbENvbW1hbmRzKHN5c3RlbSk7CiAgICAgIHN5c3RlbS5vbih7CiAgICAgICAgcGx1Z0xvYWRlZDogKCkgPT4gewogICAgICAgICAgdGhpcy5idWlsZEFsbENvbW1hbmRzKHN5c3RlbSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHZhbGlkYXRlTWFuaWZlc3QobWFuaWZlc3QpIHsKICAgICAgbGV0IGVycm9ycyA9IFtdOwogICAgICBmb3IgKGNvbnN0IFtuYW1lLCBmdW5jdGlvbkRlZl0gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3QuZnVuY3Rpb25zKSkgewogICAgICAgIGlmICghZnVuY3Rpb25EZWYuY29tbWFuZCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNtZCA9IGZ1bmN0aW9uRGVmLmNvbW1hbmQ7CiAgICAgICAgaWYgKCFjbWQubmFtZSkgewogICAgICAgICAgZXJyb3JzLnB1c2goYEZ1bmN0aW9uICR7bmFtZX0gaGFzIGEgY29tbWFuZCBidXQgbm8gbmFtZWApOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gW107CiAgICB9CiAgfTsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9ob29rcy9zbGFzaF9jb21tYW5kLnRzCiAgdmFyIHNsYXNoQ29tbWFuZFJlZ2V4cCA9IC8oW15cd118XilcL1tcd1wtXSovOwogIHZhciBTbGFzaENvbW1hbmRIb29rID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZWRpdG9yKSB7CiAgICAgIHRoaXMuc2xhc2hDb21tYW5kcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOwogICAgfQogICAgYnVpbGRBbGxDb21tYW5kcyhzeXN0ZW0pIHsKICAgICAgdGhpcy5zbGFzaENvbW1hbmRzLmNsZWFyKCk7CiAgICAgIGZvciAobGV0IHBsdWcgb2Ygc3lzdGVtLmxvYWRlZFBsdWdzLnZhbHVlcygpKSB7CiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgZnVuY3Rpb25EZWZdIG9mIE9iamVjdC5lbnRyaWVzKAogICAgICAgICAgcGx1Zy5tYW5pZmVzdC5mdW5jdGlvbnMKICAgICAgICApKSB7CiAgICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmLnNsYXNoQ29tbWFuZCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IGNtZCA9IGZ1bmN0aW9uRGVmLnNsYXNoQ29tbWFuZDsKICAgICAgICAgIHRoaXMuc2xhc2hDb21tYW5kcy5zZXQoY21kLm5hbWUsIHsKICAgICAgICAgICAgc2xhc2hDb21tYW5kOiBjbWQsCiAgICAgICAgICAgIHJ1bjogKCkgPT4gewogICAgICAgICAgICAgIHJldHVybiBwbHVnLmludm9rZShuYW1lLCBbY21kXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc2xhc2hDb21tYW5kQ29tcGxldGVyKGN0eCkgewogICAgICBsZXQgcHJlZml4ID0gY3R4Lm1hdGNoQmVmb3JlKHNsYXNoQ29tbWFuZFJlZ2V4cCk7CiAgICAgIGlmICghcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc3QgcHJlZml4VGV4dCA9IHByZWZpeC50ZXh0OwogICAgICBsZXQgb3B0aW9ucyA9IFtdOwogICAgICBsZXQgY3VycmVudE5vZGUgPSBtMTQoY3R4LnN0YXRlKS5yZXNvbHZlSW5uZXIoY3R4LnBvcyk7CiAgICAgIGlmIChjdXJyZW50Tm9kZS50eXBlLm5hbWUgPT09ICJDb21tZW50QmxvY2siKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZm9yIChsZXQgW25hbWUsIGRlZjJdIG9mIHRoaXMuc2xhc2hDb21tYW5kcy5lbnRyaWVzKCkpIHsKICAgICAgICBvcHRpb25zLnB1c2goewogICAgICAgICAgbGFiZWw6IGRlZjIuc2xhc2hDb21tYW5kLm5hbWUsCiAgICAgICAgICBkZXRhaWw6IGRlZjIuc2xhc2hDb21tYW5kLmRlc2NyaXB0aW9uLAogICAgICAgICAgYXBwbHk6ICgpID0+IHsKICAgICAgICAgICAgdGhpcy5lZGl0b3IuZWRpdG9yVmlldz8uZGlzcGF0Y2goewogICAgICAgICAgICAgIGNoYW5nZXM6IHsKICAgICAgICAgICAgICAgIGZyb206IHByZWZpeC5mcm9tICsgcHJlZml4VGV4dC5pbmRleE9mKCIvIiksCiAgICAgICAgICAgICAgICB0bzogY3R4LnBvcywKICAgICAgICAgICAgICAgIGluc2VydDogIiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBzYWZlUnVuKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBhd2FpdCBkZWYyLnJ1bigpOwogICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiB7CiAgICAgICAgZnJvbTogcHJlZml4LmZyb20gKyBwcmVmaXhUZXh0LmluZGV4T2YoIi8iKSArIDEsCiAgICAgICAgb3B0aW9ucwogICAgICB9OwogICAgfQogICAgYXBwbHkoc3lzdGVtKSB7CiAgICAgIHRoaXMuYnVpbGRBbGxDb21tYW5kcyhzeXN0ZW0pOwogICAgICBzeXN0ZW0ub24oewogICAgICAgIHBsdWdMb2FkZWQ6ICgpID0+IHsKICAgICAgICAgIHRoaXMuYnVpbGRBbGxDb21tYW5kcyhzeXN0ZW0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICB2YWxpZGF0ZU1hbmlmZXN0KG1hbmlmZXN0KSB7CiAgICAgIGxldCBlcnJvcnMgPSBbXTsKICAgICAgZm9yIChjb25zdCBbbmFtZSwgZnVuY3Rpb25EZWZdIG9mIE9iamVjdC5lbnRyaWVzKG1hbmlmZXN0LmZ1bmN0aW9ucykpIHsKICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmLnNsYXNoQ29tbWFuZCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNtZCA9IGZ1bmN0aW9uRGVmLnNsYXNoQ29tbWFuZDsKICAgICAgICBpZiAoIWNtZC5uYW1lKSB7CiAgICAgICAgICBlcnJvcnMucHVzaChgRnVuY3Rpb24gJHtuYW1lfSBoYXMgYSBjb21tYW5kIGJ1dCBubyBuYW1lYCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBbXTsKICAgIH0KICB9OwoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL2lubGluZV9pbWFnZS50cwogIHZhciBJbmxpbmVJbWFnZVdpZGdldCA9IGNsYXNzIGV4dGVuZHMgWDQgewogICAgY29uc3RydWN0b3IodXJsLCB0aXRsZSkgewogICAgICBzdXBlcigpOwogICAgICB0aGlzLnVybCA9IHVybDsKICAgICAgdGhpcy50aXRsZSA9IHRpdGxlOwogICAgfQogICAgZXEob3RoZXIpIHsKICAgICAgcmV0dXJuIG90aGVyLnVybCA9PT0gdGhpcy51cmwgJiYgb3RoZXIudGl0bGUgPT09IHRoaXMudGl0bGU7CiAgICB9CiAgICB0b0RPTSgpIHsKICAgICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CiAgICAgIGlmICh0aGlzLnVybC5zdGFydHNXaXRoKCJodHRwIikpIHsKICAgICAgICBpbWcuc3JjID0gdGhpcy51cmw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW1nLnNyYyA9IGBmcy8ke3RoaXMudXJsfWA7CiAgICAgIH0KICAgICAgaW1nLmFsdCA9IHRoaXMudGl0bGU7CiAgICAgIGltZy50aXRsZSA9IHRoaXMudGl0bGU7CiAgICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgaW1nLmNsYXNzTmFtZSA9ICJzYi1pbmxpbmUtaW1nIjsKICAgICAgcmV0dXJuIGltZzsKICAgIH0KICB9OwogIHZhciBpbmxpbmVJbWFnZXMgPSAodmlldykgPT4gewogICAgbGV0IHdpZGdldHMgPSBbXTsKICAgIGNvbnN0IGltYWdlUmVnZXggPSAvIVxbKD88dGl0bGU+W15cXV0qKVxdXCgoPzx1cmw+LispXCkvOwogICAgZm9yIChsZXQgeyBmcm9tOiBmcm9tMiwgdG8gfSBvZiB2aWV3LnZpc2libGVSYW5nZXMpIHsKICAgICAgbTE0KHZpZXcuc3RhdGUpLml0ZXJhdGUoewogICAgICAgIGZyb206IGZyb20yLAogICAgICAgIHRvLAogICAgICAgIGVudGVyOiAobm9kZSkgPT4gewogICAgICAgICAgaWYgKG5vZGUubmFtZSAhPT0gIkltYWdlIikgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBpbWFnZVJleGV4UmVzdWx0ID0gaW1hZ2VSZWdleC5leGVjKAogICAgICAgICAgICB2aWV3LnN0YXRlLnNsaWNlRG9jKG5vZGUuZnJvbSwgbm9kZS50bykKICAgICAgICAgICk7CiAgICAgICAgICBpZiAoaW1hZ2VSZXhleFJlc3VsdCA9PT0gbnVsbCB8fCAhaW1hZ2VSZXhleFJlc3VsdC5ncm91cHMpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgdXJsID0gaW1hZ2VSZXhleFJlc3VsdC5ncm91cHMudXJsOwogICAgICAgICAgY29uc3QgdGl0bGUgPSBpbWFnZVJleGV4UmVzdWx0Lmdyb3Vwcy50aXRsZTsKICAgICAgICAgIGxldCBkZWNvID0gay53aWRnZXQoewogICAgICAgICAgICB3aWRnZXQ6IG5ldyBJbmxpbmVJbWFnZVdpZGdldCh1cmwsIHRpdGxlKQogICAgICAgICAgfSk7CiAgICAgICAgICB3aWRnZXRzLnB1c2goZGVjby5yYW5nZShub2RlLnRvKSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBrLnNldCh3aWRnZXRzLCB0cnVlKTsKICB9OwogIHZhciBpbmxpbmVJbWFnZXNQbHVnaW4gPSAoKSA9PiBWNC5mcm9tQ2xhc3MoCiAgICBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHZpZXcpIHsKICAgICAgICB0aGlzLmRlY29yYXRpb25zID0gaW5saW5lSW1hZ2VzKHZpZXcpOwogICAgICB9CiAgICAgIHVwZGF0ZSh1cGRhdGUpIHsKICAgICAgICBpZiAodXBkYXRlLmRvY0NoYW5nZWQpIHsKICAgICAgICAgIHRoaXMuZGVjb3JhdGlvbnMgPSBpbmxpbmVJbWFnZXModXBkYXRlLnZpZXcpOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgZGVjb3JhdGlvbnM6ICh2MTUpID0+IHYxNS5kZWNvcmF0aW9ucwogICAgfQogICk7CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvbGluZV93cmFwcGVyLnRzCiAgZnVuY3Rpb24gd3JhcExpbmVzKHZpZXcsIHdyYXBFbGVtZW50cykgewogICAgbGV0IHdpZGdldHMgPSBbXTsKICAgIGxldCBlbGVtZW50U3RhY2sgPSBbXTsKICAgIGNvbnN0IGRvYyA9IHZpZXcuc3RhdGUuZG9jOwogICAgZm9yIChsZXQgeyBmcm9tOiBmcm9tMiwgdG8gfSBvZiB2aWV3LnZpc2libGVSYW5nZXMpIHsKICAgICAgbTE0KHZpZXcuc3RhdGUpLml0ZXJhdGUoewogICAgICAgIGZyb206IGZyb20yLAogICAgICAgIHRvLAogICAgICAgIGVudGVyOiAoeyB0eXBlLCBmcm9tOiBmcm9tMywgdG86IHRvMiB9KSA9PiB7CiAgICAgICAgICBmb3IgKGxldCB3cmFwRWxlbWVudCBvZiB3cmFwRWxlbWVudHMpIHsKICAgICAgICAgICAgaWYgKHR5cGUubmFtZSA9PSB3cmFwRWxlbWVudC5zZWxlY3RvcikgewogICAgICAgICAgICAgIGlmICh3cmFwRWxlbWVudC5uZXN0aW5nKSB7CiAgICAgICAgICAgICAgICBlbGVtZW50U3RhY2sucHVzaCh0eXBlLm5hbWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjb25zdCBib2R5VGV4dCA9IGRvYy5zbGljZVN0cmluZyhmcm9tMywgdG8yKTsKICAgICAgICAgICAgICBsZXQgaWR4ID0gZnJvbTM7CiAgICAgICAgICAgICAgZm9yIChsZXQgbGluZSBvZiBib2R5VGV4dC5zcGxpdCgiXG4iKSkgewogICAgICAgICAgICAgICAgbGV0IGNscyA9IHdyYXBFbGVtZW50LmNsYXNzOwogICAgICAgICAgICAgICAgaWYgKHdyYXBFbGVtZW50Lm5lc3RpbmcpIHsKICAgICAgICAgICAgICAgICAgY2xzID0gYCR7Y2xzfSAke2Nsc30tJHtlbGVtZW50U3RhY2subGVuZ3RofWA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aWRnZXRzLnB1c2goCiAgICAgICAgICAgICAgICAgIGsubGluZSh7CiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGNscwogICAgICAgICAgICAgICAgICB9KS5yYW5nZShkb2MubGluZUF0KGlkeCkuZnJvbSkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZHggKz0gbGluZS5sZW5ndGggKyAxOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGVhdmUoeyB0eXBlIH0pIHsKICAgICAgICAgIGZvciAobGV0IHdyYXBFbGVtZW50IG9mIHdyYXBFbGVtZW50cykgewogICAgICAgICAgICBpZiAodHlwZS5uYW1lID09IHdyYXBFbGVtZW50LnNlbGVjdG9yICYmIHdyYXBFbGVtZW50Lm5lc3RpbmcpIHsKICAgICAgICAgICAgICBlbGVtZW50U3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgd2lkZ2V0cyA9IHdpZGdldHMuc29ydCgoYTQsIGIyNSkgPT4gewogICAgICByZXR1cm4gYTQuZnJvbSA8IGIyNS5mcm9tID8gLTEgOiAxOwogICAgfSk7CiAgICByZXR1cm4gay5zZXQod2lkZ2V0cyk7CiAgfQogIHZhciBsaW5lV3JhcHBlciA9ICh3cmFwRWxlbWVudHMpID0+IFY0LmZyb21DbGFzcygKICAgIGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodmlldykgewogICAgICAgIHRoaXMuZGVjb3JhdGlvbnMgPSB3cmFwTGluZXModmlldywgd3JhcEVsZW1lbnRzKTsKICAgICAgfQogICAgICB1cGRhdGUodXBkYXRlKSB7CiAgICAgICAgaWYgKHVwZGF0ZS5kb2NDaGFuZ2VkIHx8IHVwZGF0ZS52aWV3cG9ydENoYW5nZWQpIHsKICAgICAgICAgIHRoaXMuZGVjb3JhdGlvbnMgPSB3cmFwTGluZXModXBkYXRlLnZpZXcsIHdyYXBFbGVtZW50cyk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICBkZWNvcmF0aW9uczogKHYxNSkgPT4gdjE1LmRlY29yYXRpb25zCiAgICB9CiAgKTsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9uYXZpZ2F0b3IudHMKICBmdW5jdGlvbiBlbmNvZGVQYWdlVXJsKG5hbWUpIHsKICAgIHJldHVybiBuYW1lLnJlcGxhY2VBbGwoIiAiLCAiXyIpOwogIH0KICBmdW5jdGlvbiBkZWNvZGVQYWdlVXJsKHVybCkgewogICAgcmV0dXJuIHVybC5yZXBsYWNlQWxsKCJfIiwgIiAiKTsKICB9CiAgdmFyIFBhdGhQYWdlTmF2aWdhdG9yID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoaW5kZXhQYWdlLCByb290ID0gIiIpIHsKICAgICAgdGhpcy5pbmRleFBhZ2UgPSBpbmRleFBhZ2U7CiAgICAgIHRoaXMucm9vdCA9IHJvb3Q7CiAgICB9CiAgICBhc3luYyBuYXZpZ2F0ZShwYWdlLCBwb3MsIHJlcGxhY2VTdGF0ZSA9IGZhbHNlKSB7CiAgICAgIGxldCBlbmNvZGVkUGFnZSA9IGVuY29kZVBhZ2VVcmwocGFnZSk7CiAgICAgIGlmIChwYWdlID09PSB0aGlzLmluZGV4UGFnZSkgewogICAgICAgIGVuY29kZWRQYWdlID0gIiI7CiAgICAgIH0KICAgICAgaWYgKHJlcGxhY2VTdGF0ZSkgewogICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSgKICAgICAgICAgIHsgcGFnZSwgcG9zIH0sCiAgICAgICAgICBwYWdlLAogICAgICAgICAgYCR7dGhpcy5yb290fS8ke2VuY29kZWRQYWdlfWAKICAgICAgICApOwogICAgICB9IGVsc2UgewogICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSgKICAgICAgICAgIHsgcGFnZSwgcG9zIH0sCiAgICAgICAgICBwYWdlLAogICAgICAgICAgYCR7dGhpcy5yb290fS8ke2VuY29kZWRQYWdlfWAKICAgICAgICApOwogICAgICB9CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBQb3BTdGF0ZUV2ZW50KCJwb3BzdGF0ZSIsIHsKICAgICAgICAgIHN0YXRlOiB7IHBhZ2UsIHBvcyB9CiAgICAgICAgfSkKICAgICAgKTsKICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmU3KSA9PiB7CiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uUmVzb2x2ZSA9IHJlc29sdmU3OwogICAgICB9KTsKICAgICAgdGhpcy5uYXZpZ2F0aW9uUmVzb2x2ZSA9IHZvaWQgMDsKICAgIH0KICAgIHN1YnNjcmliZShwYWdlTG9hZENhbGxiYWNrKSB7CiAgICAgIGNvbnN0IGNiID0gKGV2ZW50KSA9PiB7CiAgICAgICAgY29uc3QgZ290b1BhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlKCk7CiAgICAgICAgaWYgKCFnb3RvUGFnZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzYWZlUnVuKGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IHBhZ2VMb2FkQ2FsbGJhY2soCiAgICAgICAgICAgIHRoaXMuZ2V0Q3VycmVudFBhZ2UoKSwKICAgICAgICAgICAgZXZlbnQ/LnN0YXRlPy5wb3MgfHwgdGhpcy5nZXRDdXJyZW50UG9zKCkKICAgICAgICAgICk7CiAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uUmVzb2x2ZSkgewogICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25SZXNvbHZlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsIGNiKTsKICAgICAgY2IoKTsKICAgIH0KICAgIGRlY29kZVVSSSgpIHsKICAgICAgbGV0IFtwYWdlLCBwb3NdID0gZGVjb2RlVVJJKAogICAgICAgIGxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZyh0aGlzLnJvb3QubGVuZ3RoICsgMSkKICAgICAgKS5zcGxpdCgiQCIpOwogICAgICBpZiAocG9zKSB7CiAgICAgICAgaWYgKHBvcy5tYXRjaCgvXlxkKyQvKSkgewogICAgICAgICAgcmV0dXJuIFtwYWdlLCArcG9zXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIFtwYWdlLCBwb3NdOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gW3BhZ2UsIDBdOwogICAgICB9CiAgICB9CiAgICBnZXRDdXJyZW50UGFnZSgpIHsKICAgICAgcmV0dXJuIGRlY29kZVBhZ2VVcmwodGhpcy5kZWNvZGVVUkkoKVswXSkgfHwgdGhpcy5pbmRleFBhZ2U7CiAgICB9CiAgICBnZXRDdXJyZW50UG9zKCkgewogICAgICByZXR1cm4gdGhpcy5kZWNvZGVVUkkoKVsxXTsKICAgIH0KICB9OwoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL3JlZHVjZXIudHMKICB2YXIgbTIyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBtMjIuc2l6ZTsKICBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHsKICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHsKICAgICAgY2FzZSAicGFnZS1sb2FkaW5nIjoKICAgICAgICByZXR1cm4gewogICAgICAgICAgLi4uc3RhdGUsCiAgICAgICAgICBpc0xvYWRpbmc6IHRydWUsCiAgICAgICAgICBjdXJyZW50UGFnZTogYWN0aW9uLm5hbWUKICAgICAgICB9OwogICAgICBjYXNlICJwYWdlLWxvYWRlZCI6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC4uLnN0YXRlLAogICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSwKICAgICAgICAgIGFsbFBhZ2VzOiBuZXcgU2V0KAogICAgICAgICAgICBbLi4uc3RhdGUuYWxsUGFnZXNdLm1hcCgKICAgICAgICAgICAgICAocGFnZU1ldGEpID0+IHBhZ2VNZXRhLm5hbWUgPT09IGFjdGlvbi5tZXRhLm5hbWUgPyB7IC4uLnBhZ2VNZXRhLCBsYXN0T3BlbmVkOiBEYXRlLm5vdygpIH0gOiBwYWdlTWV0YQogICAgICAgICAgICApCiAgICAgICAgICApLAogICAgICAgICAgcGVybTogYWN0aW9uLm1ldGEucGVybSwKICAgICAgICAgIGN1cnJlbnRQYWdlOiBhY3Rpb24ubWV0YS5uYW1lCiAgICAgICAgfTsKICAgICAgY2FzZSAicGFnZS1jaGFuZ2VkIjoKICAgICAgICByZXR1cm4gewogICAgICAgICAgLi4uc3RhdGUsCiAgICAgICAgICB1bnNhdmVkQ2hhbmdlczogdHJ1ZQogICAgICAgIH07CiAgICAgIGNhc2UgInBhZ2Utc2F2ZWQiOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi5zdGF0ZSwKICAgICAgICAgIHVuc2F2ZWRDaGFuZ2VzOiBmYWxzZQogICAgICAgIH07CiAgICAgIGNhc2UgInN0YXJ0LW5hdmlnYXRlIjoKICAgICAgICByZXR1cm4gewogICAgICAgICAgLi4uc3RhdGUsCiAgICAgICAgICBzaG93UGFnZU5hdmlnYXRvcjogdHJ1ZQogICAgICAgIH07CiAgICAgIGNhc2UgInN0b3AtbmF2aWdhdGUiOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi5zdGF0ZSwKICAgICAgICAgIHNob3dQYWdlTmF2aWdhdG9yOiBmYWxzZQogICAgICAgIH07CiAgICAgIGNhc2UgInBhZ2VzLWxpc3RlZCI6CiAgICAgICAgbGV0IG9sZFBhZ2VNZXRhID0gbmV3IE1hcChbLi4uc3RhdGUuYWxsUGFnZXNdLm1hcCgocG0pID0+IFtwbS5uYW1lLCBwbV0pKTsKICAgICAgICBmb3IgKGxldCBwYWdlTWV0YSBvZiBhY3Rpb24ucGFnZXMpIHsKICAgICAgICAgIGxldCBvbGRQYWdlTWV0YUl0ZW0gPSBvbGRQYWdlTWV0YS5nZXQocGFnZU1ldGEubmFtZSk7CiAgICAgICAgICBpZiAob2xkUGFnZU1ldGFJdGVtICYmIG9sZFBhZ2VNZXRhSXRlbS5sYXN0T3BlbmVkKSB7CiAgICAgICAgICAgIHBhZ2VNZXRhLmxhc3RPcGVuZWQgPSBvbGRQYWdlTWV0YUl0ZW0ubGFzdE9wZW5lZDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC4uLnN0YXRlLAogICAgICAgICAgYWxsUGFnZXM6IGFjdGlvbi5wYWdlcwogICAgICAgIH07CiAgICAgIGNhc2UgInNob3ctcGFsZXR0ZSI6CiAgICAgICAgbGV0IGNvbW1hbmRzID0gbmV3IE1hcChzdGF0ZS5jb21tYW5kcyk7CiAgICAgICAgZm9yIChsZXQgW2sxOCwgdjE1XSBvZiBzdGF0ZS5jb21tYW5kcy5lbnRyaWVzKCkpIHsKICAgICAgICAgIGlmICh2MTUuY29tbWFuZC5jb250ZXh0cyAmJiAoIWFjdGlvbi5jb250ZXh0IHx8ICF2MTUuY29tbWFuZC5jb250ZXh0cy5pbmNsdWRlcyhhY3Rpb24uY29udGV4dCkpKSB7CiAgICAgICAgICAgIGNvbW1hbmRzLmRlbGV0ZShrMTgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAgLi4uc3RhdGUsCiAgICAgICAgICBjb21tYW5kcywKICAgICAgICAgIHNob3dDb21tYW5kUGFsZXR0ZTogdHJ1ZQogICAgICAgIH07CiAgICAgIGNhc2UgImhpZGUtcGFsZXR0ZSI6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC4uLnN0YXRlLAogICAgICAgICAgc2hvd0NvbW1hbmRQYWxldHRlOiBmYWxzZQogICAgICAgIH07CiAgICAgIGNhc2UgImNvbW1hbmQtcnVuIjoKICAgICAgICByZXR1cm4gewogICAgICAgICAgLi4uc3RhdGUsCiAgICAgICAgICByZWNlbnRDb21tYW5kczogc3RhdGUucmVjZW50Q29tbWFuZHMuc2V0KGFjdGlvbi5jb21tYW5kLCBuZXcgRGF0ZSgpKQogICAgICAgIH07CiAgICAgIGNhc2UgInVwZGF0ZS1jb21tYW5kcyI6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC4uLnN0YXRlLAogICAgICAgICAgY29tbWFuZHM6IGFjdGlvbi5jb21tYW5kcwogICAgICAgIH07CiAgICAgIGNhc2UgInNob3ctbm90aWZpY2F0aW9uIjoKICAgICAgICByZXR1cm4gewogICAgICAgICAgLi4uc3RhdGUsCiAgICAgICAgICBub3RpZmljYXRpb25zOiBbLi4uc3RhdGUubm90aWZpY2F0aW9ucywgYWN0aW9uLm5vdGlmaWNhdGlvbl0KICAgICAgICB9OwogICAgICBjYXNlICJkaXNtaXNzLW5vdGlmaWNhdGlvbiI6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC4uLnN0YXRlLAogICAgICAgICAgbm90aWZpY2F0aW9uczogc3RhdGUubm90aWZpY2F0aW9ucy5maWx0ZXIoKG44KSA9PiBuOC5pZCAhPT0gYWN0aW9uLmlkKQogICAgICAgIH07CiAgICAgIGNhc2UgInNob3ctcGFuZWwiOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi5zdGF0ZSwKICAgICAgICAgIHBhbmVsczogewogICAgICAgICAgICAuLi5zdGF0ZS5wYW5lbHMsCiAgICAgICAgICAgIFthY3Rpb24uaWRdOiBhY3Rpb24uY29uZmlnCiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgY2FzZSAiaGlkZS1wYW5lbCI6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC4uLnN0YXRlLAogICAgICAgICAgcGFuZWxzOiB7CiAgICAgICAgICAgIC4uLnN0YXRlLnBhbmVscywKICAgICAgICAgICAgW2FjdGlvbi5pZF06IHt9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgY2FzZSAic2hvdy1maWx0ZXJib3giOgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAuLi5zdGF0ZSwKICAgICAgICAgIHNob3dGaWx0ZXJCb3g6IHRydWUsCiAgICAgICAgICBmaWx0ZXJCb3hPblNlbGVjdDogYWN0aW9uLm9uU2VsZWN0LAogICAgICAgICAgZmlsdGVyQm94UGxhY2VIb2xkZXI6IGFjdGlvbi5wbGFjZUhvbGRlciwKICAgICAgICAgIGZpbHRlckJveE9wdGlvbnM6IGFjdGlvbi5vcHRpb25zLAogICAgICAgICAgZmlsdGVyQm94TGFiZWw6IGFjdGlvbi5sYWJlbCwKICAgICAgICAgIGZpbHRlckJveEhlbHBUZXh0OiBhY3Rpb24uaGVscFRleHQKICAgICAgICB9OwogICAgICBjYXNlICJoaWRlLWZpbHRlcmJveCI6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC4uLnN0YXRlLAogICAgICAgICAgc2hvd0ZpbHRlckJveDogZmFsc2UsCiAgICAgICAgICBmaWx0ZXJCb3hPblNlbGVjdDogKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIGZpbHRlckJveFBsYWNlSG9sZGVyOiAiIiwKICAgICAgICAgIGZpbHRlckJveE9wdGlvbnM6IFtdLAogICAgICAgICAgZmlsdGVyQm94SGVscFRleHQ6ICIiCiAgICAgICAgfTsKICAgICAgY2FzZSAic2V0LWVkaXRvci1ybyI6CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIC4uLnN0YXRlLAogICAgICAgICAgZm9yY2VkUk9Nb2RlOiBhY3Rpb24uZW5hYmxlZAogICAgICAgIH07CiAgICB9CiAgICByZXR1cm4gc3RhdGU7CiAgfQoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL3NtYXJ0X3F1b3Rlcy50cwogIHZhciBzdHJhaWdodFF1b3RlQ29udGV4dHMgPSBbIkNvbW1lbnRCbG9jayIsICJGZW5jZWRDb2RlIiwgIklubGluZUNvZGUiXTsKICBmdW5jdGlvbiBrZXlCaW5kaW5nRm9yUXVvdGUocXVvdGUsIGxlZnQsIHJpZ2h0KSB7CiAgICByZXR1cm4gewogICAgICBrZXk6IHF1b3RlLAogICAgICBydW46ICh0YXJnZXQpID0+IHsKICAgICAgICBsZXQgY3Vyc29yUG9zID0gdGFyZ2V0LnN0YXRlLnNlbGVjdGlvbi5tYWluLmZyb207CiAgICAgICAgbGV0IGNoQmVmb3JlID0gdGFyZ2V0LnN0YXRlLnNsaWNlRG9jKGN1cnNvclBvcyAtIDEsIGN1cnNvclBvcyk7CiAgICAgICAgbGV0IG5vZGUgPSBtMTQodGFyZ2V0LnN0YXRlKS5yZXNvbHZlSW5uZXIoY3Vyc29yUG9zKTsKICAgICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICAgaWYgKHN0cmFpZ2h0UXVvdGVDb250ZXh0cy5pbmNsdWRlcyhub2RlLnR5cGUubmFtZSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG5vZGUucGFyZW50KSB7CiAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgcXVvdGUyID0gcmlnaHQ7CiAgICAgICAgaWYgKC9cVy8uZXhlYyhjaEJlZm9yZSkgJiYgIS9bIVw/LFwuXC094oCcXS8uZXhlYyhjaEJlZm9yZSkpIHsKICAgICAgICAgIHF1b3RlMiA9IGxlZnQ7CiAgICAgICAgfQogICAgICAgIHRhcmdldC5kaXNwYXRjaCh7CiAgICAgICAgICBjaGFuZ2VzOiB7CiAgICAgICAgICAgIGluc2VydDogcXVvdGUyLAogICAgICAgICAgICBmcm9tOiBjdXJzb3JQb3MKICAgICAgICAgIH0sCiAgICAgICAgICBzZWxlY3Rpb246IHsKICAgICAgICAgICAgYW5jaG9yOiBjdXJzb3JQb3MgKyAxCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH07CiAgfQogIHZhciBzbWFydFF1b3RlS2V5bWFwID0gWwogICAga2V5QmluZGluZ0ZvclF1b3RlKCciJywgIlx1MjAxQyIsICJcdTIwMUQiKSwKICAgIGtleUJpbmRpbmdGb3JRdW90ZSgiJyIsICJcdTIwMTgiLCAiXHUyMDE5IikKICBdOwoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL3N0eWxlLnRzCiAgZnVuY3Rpb24gaGlnaGxpZ2h0U3R5bGVzKG1kRXh0ZW5zaW9uKSB7CiAgICBXODsKICAgIGNvbnN0IGhscyA9IEQxMC5kZWZpbmUoWwogICAgICB7IHRhZzogbjUuaGVhZGluZzEsIGNsYXNzOiAic2ItaDEiIH0sCiAgICAgIHsgdGFnOiBuNS5oZWFkaW5nMiwgY2xhc3M6ICJzYi1oMiIgfSwKICAgICAgeyB0YWc6IG41LmhlYWRpbmczLCBjbGFzczogInNiLWgzIiB9LAogICAgICB7IHRhZzogbjUubGluaywgY2xhc3M6ICJzYi1saW5rIiB9LAogICAgICB7IHRhZzogbjUubWV0YSwgY2xhc3M6ICJzYi1tZXRhIiB9LAogICAgICB7IHRhZzogbjUucXVvdGUsIGNsYXNzOiAic2ItcXVvdGUiIH0sCiAgICAgIHsgdGFnOiBuNS5tb25vc3BhY2UsIGNsYXNzOiAic2ItY29kZSIgfSwKICAgICAgeyB0YWc6IG41LnVybCwgY2xhc3M6ICJzYi11cmwiIH0sCiAgICAgIHsgdGFnOiBXaWtpTGlua1RhZywgY2xhc3M6ICJzYi13aWtpLWxpbmsiIH0sCiAgICAgIHsgdGFnOiBXaWtpTGlua1BhZ2VUYWcsIGNsYXNzOiAic2Itd2lraS1saW5rLXBhZ2UiIH0sCiAgICAgIHsgdGFnOiBUYXNrVGFnLCBjbGFzczogInNiLXRhc2siIH0sCiAgICAgIHsgdGFnOiBUYXNrTWFya2VyVGFnLCBjbGFzczogInNiLXRhc2stbWFya2VyIiB9LAogICAgICB7IHRhZzogQ29kZUluZm9UYWcsIGNsYXNzOiAic2ItY29kZS1pbmZvIiB9LAogICAgICB7IHRhZzogQ29tbWVudFRhZywgY2xhc3M6ICJzYi1jb21tZW50IiB9LAogICAgICB7IHRhZzogQ29tbWVudE1hcmtlclRhZywgY2xhc3M6ICJzYi1jb21tZW50LW1hcmtlciIgfSwKICAgICAgeyB0YWc6IEhpZ2hsaWdodCwgY2xhc3M6ICJzYi1oaWdobGlnaHQiIH0sCiAgICAgIHsgdGFnOiBuNS5lbXBoYXNpcywgY2xhc3M6ICJzYi1lbXBoYXNpcyIgfSwKICAgICAgeyB0YWc6IG41LnN0cm9uZywgY2xhc3M6ICJzYi1zdHJvbmciIH0sCiAgICAgIHsgdGFnOiBuNS5hdG9tLCBjbGFzczogInNiLWF0b20iIH0sCiAgICAgIHsgdGFnOiBuNS5ib29sLCBjbGFzczogInNiLWJvb2wiIH0sCiAgICAgIHsgdGFnOiBuNS51cmwsIGNsYXNzOiAic2ItdXJsIiB9LAogICAgICB7IHRhZzogbjUuaW5zZXJ0ZWQsIGNsYXNzOiAic2ItaW5zZXJ0ZWQiIH0sCiAgICAgIHsgdGFnOiBuNS5kZWxldGVkLCBjbGFzczogInNiLWRlbGV0ZWQiIH0sCiAgICAgIHsgdGFnOiBuNS5saXRlcmFsLCBjbGFzczogInNiLWxpdGVyYWwiIH0sCiAgICAgIHsgdGFnOiBuNS5rZXl3b3JkLCBjbGFzczogInNiLWtleXdvcmQiIH0sCiAgICAgIHsgdGFnOiBuNS5saXN0LCBjbGFzczogInNiLWxpc3QiIH0sCiAgICAgIHsgdGFnOiBuNS5zdHJpbmcsIGNsYXNzOiAic2Itc3RyaW5nIiB9LAogICAgICB7IHRhZzogbjUubnVtYmVyLCBjbGFzczogInNiLW51bWJlciIgfSwKICAgICAgeyB0YWc6IFtuNS5yZWdleHAsIG41LmVzY2FwZSwgbjUuc3BlY2lhbChuNS5zdHJpbmcpXSwgY2xhc3M6ICJzYi1zdHJpbmcyIiB9LAogICAgICB7IHRhZzogbjUudmFyaWFibGVOYW1lLCBjbGFzczogInNiLXZhcmlhYmxlTmFtZSIgfSwKICAgICAgeyB0YWc6IG41LnR5cGVOYW1lLCBjbGFzczogInNiLXR5cGVOYW1lIiB9LAogICAgICB7IHRhZzogbjUuY29tbWVudCwgY2xhc3M6ICJzYi1jb21tZW50IiB9LAogICAgICB7IHRhZzogbjUuaW52YWxpZCwgY2xhc3M6ICJzYi1pbnZhbGlkIiB9LAogICAgICB7IHRhZzogbjUucHJvY2Vzc2luZ0luc3RydWN0aW9uLCBjbGFzczogInNiLW1ldGEiIH0sCiAgICAgIHsgdGFnOiBuNS5wdW5jdHVhdGlvbiwgY2xhc3M6ICJzYi1wdW5jdHVhdGlvbiIgfSwKICAgICAgeyB0YWc6IEhvcml6b250YWxSdWxlVGFnLCBjbGFzczogInNiLWhyIiB9LAogICAgICAuLi5tZEV4dGVuc2lvbi5tYXAoKG1kRXh0KSA9PiB7CiAgICAgICAgcmV0dXJuIHsgdGFnOiBtZEV4dC50YWcsIC4uLm1kRXh0LnN0eWxlcywgY2xhc3M6IG1kRXh0LmNsYXNzTmFtZSB9OwogICAgICB9KQogICAgXSk7CiAgICBjb25zdCBmbjAgPSBobHMuc3R5bGU7CiAgICBobHMuc3R5bGUgPSAodGFncykgPT4gewogICAgICByZXR1cm4gZm4wKHRhZ3MgfHwgW10pOwogICAgfTsKICAgIHJldHVybiBobHM7CiAgfQoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvcGx1Z29zL3N5c2NhbGxzL3RyYW5zcG9ydC50cwogIGZ1bmN0aW9uIHByb3h5U3lzY2FsbHMobmFtZXMsIHRyYW5zcG9ydENhbGwpIHsKICAgIGxldCBzeXNjYWxscyA9IHt9OwogICAgZm9yIChsZXQgbmFtZSBvZiBuYW1lcykgewogICAgICBzeXNjYWxsc1tuYW1lXSA9IChjdHgsIC4uLmFyZ3MpID0+IHsKICAgICAgICByZXR1cm4gdHJhbnNwb3J0Q2FsbChjdHgsIG5hbWUsIC4uLmFyZ3MpOwogICAgICB9OwogICAgfQogICAgcmV0dXJuIHN5c2NhbGxzOwogIH0KCiAgLy8gZGVubzpodHRwczovL2VzbS5zaC92OTYvZGV4aWVAMy4yLjIvZGVuby9kZXhpZS5qcwogIHZhciBfX2dsb2JhbCQgPSBnbG9iYWxUaGlzIHx8ICh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHNlbGYpOwogIHZhciBfX3NldEltbWVkaWF0ZSQgPSAoY2IsIC4uLmFyZ3MpID0+IHNldFRpbWVvdXQoY2IsIDAsIC4uLmFyZ3MpOwogIHZhciBQMjYgPSB0eXBlb2YgZ2xvYmFsVGhpcyA8ICJ1IiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygc2VsZiA8ICJ1IiA/IHNlbGYgOiB0eXBlb2YgZG9jdW1lbnQgPCAidSIgPyB3aW5kb3cgOiBfX2dsb2JhbCQ7CiAgdmFyIE0yNCA9IE9iamVjdC5rZXlzOwogIHZhciBqMTggPSBBcnJheS5pc0FycmF5OwogIHR5cGVvZiBQcm9taXNlIDwgInUiICYmICFQMjYuUHJvbWlzZSAmJiAoUDI2LlByb21pc2UgPSBQcm9taXNlKTsKICBmdW5jdGlvbiBMMjEodDQsIGU1KSB7CiAgICByZXR1cm4gdHlwZW9mIGU1ICE9ICJvYmplY3QiIHx8IE0yNChlNSkuZm9yRWFjaChmdW5jdGlvbihuOCkgewogICAgICB0NFtuOF0gPSBlNVtuOF07CiAgICB9KSwgdDQ7CiAgfQogIHZhciBNZTEyID0gT2JqZWN0LmdldFByb3RvdHlwZU9mOwogIHZhciBhcjIgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICBmdW5jdGlvbiBXMTcodDQsIGU1KSB7CiAgICByZXR1cm4gYXIyLmNhbGwodDQsIGU1KTsKICB9CiAgZnVuY3Rpb24gU2UxMyh0NCwgZTUpIHsKICAgIHR5cGVvZiBlNSA9PSAiZnVuY3Rpb24iICYmIChlNSA9IGU1KE1lMTIodDQpKSksICh0eXBlb2YgUmVmbGVjdCA+ICJ1IiA/IE0yNCA6IFJlZmxlY3Qub3duS2V5cykoZTUpLmZvckVhY2goKG44KSA9PiB7CiAgICAgIHJlMTkodDQsIG44LCBlNVtuOF0pOwogICAgfSk7CiAgfQogIHZhciBJbjMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgZnVuY3Rpb24gcmUxOSh0NCwgZTUsIG44LCByMykgewogICAgSW4zKHQ0LCBlNSwgTDIxKG44ICYmIFcxNyhuOCwgImdldCIpICYmIHR5cGVvZiBuOC5nZXQgPT0gImZ1bmN0aW9uIiA/IHsgZ2V0OiBuOC5nZXQsIHNldDogbjguc2V0LCBjb25maWd1cmFibGU6IHRydWUgfSA6IHsgdmFsdWU6IG44LCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sIHIzKSk7CiAgfQogIGZ1bmN0aW9uIEFlMTcodDQpIHsKICAgIHJldHVybiB7IGZyb206IGZ1bmN0aW9uKGU1KSB7CiAgICAgIHJldHVybiB0NC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGU1LnByb3RvdHlwZSksIHJlMTkodDQucHJvdG90eXBlLCAiY29uc3RydWN0b3IiLCB0NCksIHsgZXh0ZW5kOiBTZTEzLmJpbmQobnVsbCwgdDQucHJvdG90eXBlKSB9OwogICAgfSB9OwogIH0KICB2YXIgdXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsKICBmdW5jdGlvbiBlbjQodDQsIGU1KSB7CiAgICBsZXQgbjggPSB1cjIodDQsIGU1KSwgcjM7CiAgICByZXR1cm4gbjggfHwgKHIzID0gTWUxMih0NCkpICYmIGVuNChyMywgZTUpOwogIH0KICB2YXIgbHIyID0gW10uc2xpY2U7CiAgZnVuY3Rpb24geXQ3KHQ0LCBlNSwgbjgpIHsKICAgIHJldHVybiBscjIuY2FsbCh0NCwgZTUsIG44KTsKICB9CiAgZnVuY3Rpb24gRG4zKHQ0LCBlNSkgewogICAgcmV0dXJuIGU1KHQ0KTsKICB9CiAgZnVuY3Rpb24gRGUxMih0NCkgewogICAgaWYgKCF0NCkKICAgICAgdGhyb3cgbmV3IEVycm9yKCJBc3NlcnRpb24gRmFpbGVkIik7CiAgfQogIGZ1bmN0aW9uIFJuMyh0NCkgewogICAgUDI2LnNldEltbWVkaWF0ZSA/IF9fc2V0SW1tZWRpYXRlJCh0NCkgOiBzZXRUaW1lb3V0KHQ0LCAwKTsKICB9CiAgZnVuY3Rpb24gUG4yKHQ0LCBlNSkgewogICAgcmV0dXJuIHQ0LnJlZHVjZSgobjgsIHIzLCBpNCkgPT4gewogICAgICB2YXIgczggPSBlNShyMywgaTQpOwogICAgICByZXR1cm4gczggJiYgKG44W3M4WzBdXSA9IHM4WzFdKSwgbjg7CiAgICB9LCB7fSk7CiAgfQogIGZ1bmN0aW9uIGNyMih0NCwgZTUsIG44KSB7CiAgICB0cnkgewogICAgICB0NC5hcHBseShudWxsLCBuOCk7CiAgICB9IGNhdGNoIChyMykgewogICAgICBlNSAmJiBlNShyMyk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG5lMTQodDQsIGU1KSB7CiAgICBpZiAoVzE3KHQ0LCBlNSkpCiAgICAgIHJldHVybiB0NFtlNV07CiAgICBpZiAoIWU1KQogICAgICByZXR1cm4gdDQ7CiAgICBpZiAodHlwZW9mIGU1ICE9ICJzdHJpbmciKSB7CiAgICAgIGZvciAodmFyIG44ID0gW10sIHIzID0gMCwgaTQgPSBlNS5sZW5ndGg7IHIzIDwgaTQ7ICsrcjMpIHsKICAgICAgICB2YXIgczggPSBuZTE0KHQ0LCBlNVtyM10pOwogICAgICAgIG44LnB1c2goczgpOwogICAgICB9CiAgICAgIHJldHVybiBuODsKICAgIH0KICAgIHZhciBvNCA9IGU1LmluZGV4T2YoIi4iKTsKICAgIGlmIChvNCAhPT0gLTEpIHsKICAgICAgdmFyIGE0ID0gdDRbZTUuc3Vic3RyKDAsIG80KV07CiAgICAgIHJldHVybiBhNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmUxNChhNCwgZTUuc3Vic3RyKG80ICsgMSkpOwogICAgfQogIH0KICBmdW5jdGlvbiBRMTYodDQsIGU1LCBuOCkgewogICAgaWYgKCEoIXQ0IHx8IGU1ID09PSB2b2lkIDApICYmICEoImlzRnJvemVuIiBpbiBPYmplY3QgJiYgT2JqZWN0LmlzRnJvemVuKHQ0KSkpCiAgICAgIGlmICh0eXBlb2YgZTUgIT0gInN0cmluZyIgJiYgImxlbmd0aCIgaW4gZTUpIHsKICAgICAgICBEZTEyKHR5cGVvZiBuOCAhPSAic3RyaW5nIiAmJiAibGVuZ3RoIiBpbiBuOCk7CiAgICAgICAgZm9yICh2YXIgcjMgPSAwLCBpNCA9IGU1Lmxlbmd0aDsgcjMgPCBpNDsgKytyMykKICAgICAgICAgIFExNih0NCwgZTVbcjNdLCBuOFtyM10pOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBzOCA9IGU1LmluZGV4T2YoIi4iKTsKICAgICAgICBpZiAoczggIT09IC0xKSB7CiAgICAgICAgICB2YXIgbzQgPSBlNS5zdWJzdHIoMCwgczgpLCBhNCA9IGU1LnN1YnN0cihzOCArIDEpOwogICAgICAgICAgaWYgKGE0ID09PSAiIikKICAgICAgICAgICAgbjggPT09IHZvaWQgMCA/IGoxOCh0NCkgJiYgIWlzTmFOKHBhcnNlSW50KG80KSkgPyB0NC5zcGxpY2UobzQsIDEpIDogZGVsZXRlIHQ0W280XSA6IHQ0W280XSA9IG44OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciB1MTEgPSB0NFtvNF07CiAgICAgICAgICAgICghdTExIHx8ICFXMTcodDQsIG80KSkgJiYgKHUxMSA9IHQ0W280XSA9IHt9KSwgUTE2KHUxMSwgYTQsIG44KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UKICAgICAgICAgIG44ID09PSB2b2lkIDAgPyBqMTgodDQpICYmICFpc05hTihwYXJzZUludChlNSkpID8gdDQuc3BsaWNlKGU1LCAxKSA6IGRlbGV0ZSB0NFtlNV0gOiB0NFtlNV0gPSBuODsKICAgICAgfQogIH0KICBmdW5jdGlvbiBmcjIodDQsIGU1KSB7CiAgICB0eXBlb2YgZTUgPT0gInN0cmluZyIgPyBRMTYodDQsIGU1LCB2b2lkIDApIDogImxlbmd0aCIgaW4gZTUgJiYgW10ubWFwLmNhbGwoZTUsIGZ1bmN0aW9uKG44KSB7CiAgICAgIFExNih0NCwgbjgsIHZvaWQgMCk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24ga240KHQ0KSB7CiAgICB2YXIgZTUgPSB7fTsKICAgIGZvciAodmFyIG44IGluIHQ0KQogICAgICBXMTcodDQsIG44KSAmJiAoZTVbbjhdID0gdDRbbjhdKTsKICAgIHJldHVybiBlNTsKICB9CiAgdmFyIGhyMiA9IFtdLmNvbmNhdDsKICBmdW5jdGlvbiBPbjModDQpIHsKICAgIHJldHVybiBocjIuYXBwbHkoW10sIHQ0KTsKICB9CiAgdmFyIE1uMyA9ICJCb29sZWFuLFN0cmluZyxEYXRlLFJlZ0V4cCxCbG9iLEZpbGUsRmlsZUxpc3QsRmlsZVN5c3RlbUZpbGVIYW5kbGUsQXJyYXlCdWZmZXIsRGF0YVZpZXcsVWludDhDbGFtcGVkQXJyYXksSW1hZ2VCaXRtYXAsSW1hZ2VEYXRhLE1hcCxTZXQsQ3J5cHRvS2V5Ii5zcGxpdCgiLCIpLmNvbmNhdChPbjMoWzgsIDE2LCAzMiwgNjRdLm1hcCgodDQpID0+IFsiSW50IiwgIlVpbnQiLCAiRmxvYXQiXS5tYXAoKGU1KSA9PiBlNSArIHQ0ICsgIkFycmF5IikpKSkuZmlsdGVyKCh0NCkgPT4gUDI2W3Q0XSk7CiAgdmFyIGRyMiA9IE1uMy5tYXAoKHQ0KSA9PiBQMjZbdDRdKTsKICBQbjIoTW4zLCAodDQpID0+IFt0NCwgdHJ1ZV0pOwogIHZhciBvZTExID0gbnVsbDsKICBmdW5jdGlvbiAkZTExKHQ0KSB7CiAgICBvZTExID0gdHlwZW9mIFdlYWtNYXAgPCAidSIgJiYgLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICBsZXQgZTUgPSBDdDEwKHQ0KTsKICAgIHJldHVybiBvZTExID0gbnVsbCwgZTU7CiAgfQogIGZ1bmN0aW9uIEN0MTAodDQpIHsKICAgIGlmICghdDQgfHwgdHlwZW9mIHQ0ICE9ICJvYmplY3QiKQogICAgICByZXR1cm4gdDQ7CiAgICBsZXQgZTUgPSBvZTExICYmIG9lMTEuZ2V0KHQ0KTsKICAgIGlmIChlNSkKICAgICAgcmV0dXJuIGU1OwogICAgaWYgKGoxOCh0NCkpIHsKICAgICAgZTUgPSBbXSwgb2UxMSAmJiBvZTExLnNldCh0NCwgZTUpOwogICAgICBmb3IgKHZhciBuOCA9IDAsIHIzID0gdDQubGVuZ3RoOyBuOCA8IHIzOyArK244KQogICAgICAgIGU1LnB1c2goQ3QxMCh0NFtuOF0pKTsKICAgIH0gZWxzZSBpZiAoZHIyLmluZGV4T2YodDQuY29uc3RydWN0b3IpID49IDApCiAgICAgIGU1ID0gdDQ7CiAgICBlbHNlIHsKICAgICAgbGV0IHM4ID0gTWUxMih0NCk7CiAgICAgIGU1ID0gczggPT09IE9iamVjdC5wcm90b3R5cGUgPyB7fSA6IE9iamVjdC5jcmVhdGUoczgpLCBvZTExICYmIG9lMTEuc2V0KHQ0LCBlNSk7CiAgICAgIGZvciAodmFyIGk0IGluIHQ0KQogICAgICAgIFcxNyh0NCwgaTQpICYmIChlNVtpNF0gPSBDdDEwKHQ0W2k0XSkpOwogICAgfQogICAgcmV0dXJuIGU1OwogIH0KICB2YXIgeyB0b1N0cmluZzogcHIyIH0gPSB7fTsKICBmdW5jdGlvbiBLdDUodDQpIHsKICAgIHJldHVybiBwcjIuY2FsbCh0NCkuc2xpY2UoOCwgLTEpOwogIH0KICB2YXIgVHQxMCA9IHR5cGVvZiBTeW1ib2wgPCAidSIgPyBTeW1ib2wuaXRlcmF0b3IgOiAiQEBpdGVyYXRvciI7CiAgdmFyIHlyMiA9IHR5cGVvZiBUdDEwID09ICJzeW1ib2wiID8gZnVuY3Rpb24odDQpIHsKICAgIHZhciBlNTsKICAgIHJldHVybiB0NCAhPSBudWxsICYmIChlNSA9IHQ0W1R0MTBdKSAmJiBlNS5hcHBseSh0NCk7CiAgfSA6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG51bGw7CiAgfTsKICB2YXIgeGUxNCA9IHt9OwogIGZ1bmN0aW9uIGVlMTcodDQpIHsKICAgIHZhciBlNSwgbjgsIHIzLCBpNDsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7CiAgICAgIGlmIChqMTgodDQpKQogICAgICAgIHJldHVybiB0NC5zbGljZSgpOwogICAgICBpZiAodGhpcyA9PT0geGUxNCAmJiB0eXBlb2YgdDQgPT0gInN0cmluZyIpCiAgICAgICAgcmV0dXJuIFt0NF07CiAgICAgIGlmIChpNCA9IHlyMih0NCkpIHsKICAgICAgICBmb3IgKG44ID0gW107IHIzID0gaTQubmV4dCgpLCAhcjMuZG9uZTsgKQogICAgICAgICAgbjgucHVzaChyMy52YWx1ZSk7CiAgICAgICAgcmV0dXJuIG44OwogICAgICB9CiAgICAgIGlmICh0NCA9PSBudWxsKQogICAgICAgIHJldHVybiBbdDRdOwogICAgICBpZiAoZTUgPSB0NC5sZW5ndGgsIHR5cGVvZiBlNSA9PSAibnVtYmVyIikgewogICAgICAgIGZvciAobjggPSBuZXcgQXJyYXkoZTUpOyBlNS0tOyApCiAgICAgICAgICBuOFtlNV0gPSB0NFtlNV07CiAgICAgICAgcmV0dXJuIG44OwogICAgICB9CiAgICAgIHJldHVybiBbdDRdOwogICAgfQogICAgZm9yIChlNSA9IGFyZ3VtZW50cy5sZW5ndGgsIG44ID0gbmV3IEFycmF5KGU1KTsgZTUtLTsgKQogICAgICBuOFtlNV0gPSBhcmd1bWVudHNbZTVdOwogICAgcmV0dXJuIG44OwogIH0KICB2YXIgdG40ID0gdHlwZW9mIFN5bWJvbCA8ICJ1IiA/ICh0NCkgPT4gdDRbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gIkFzeW5jRnVuY3Rpb24iIDogKCkgPT4gZmFsc2U7CiAgdmFyIHExOSA9IHR5cGVvZiBsb2NhdGlvbiA8ICJ1IiAmJiAvXihodHRwfGh0dHBzKTpcL1wvKGxvY2FsaG9zdHwxMjdcLjBcLjBcLjEpLy50ZXN0KGxvY2F0aW9uLmhyZWYpOwogIGZ1bmN0aW9uIEJuMyh0NCwgZTUpIHsKICAgIHExOSA9IHQ0LCBGbjMgPSBlNTsKICB9CiAgdmFyIEZuMyA9ICgpID0+IHRydWU7CiAgdmFyIG1yMiA9ICFuZXcgRXJyb3IoIiIpLnN0YWNrOwogIGZ1bmN0aW9uIHZlMTIoKSB7CiAgICBpZiAobXIyKQogICAgICB0cnkgewogICAgICAgIHRocm93IHZlMTIuYXJndW1lbnRzLCBuZXcgRXJyb3IoKTsKICAgICAgfSBjYXRjaCAodDQpIHsKICAgICAgICByZXR1cm4gdDQ7CiAgICAgIH0KICAgIHJldHVybiBuZXcgRXJyb3IoKTsKICB9CiAgZnVuY3Rpb24gSXQxMCh0NCwgZTUpIHsKICAgIHZhciBuOCA9IHQ0LnN0YWNrOwogICAgcmV0dXJuIG44ID8gKGU1ID0gZTUgfHwgMCwgbjguaW5kZXhPZih0NC5uYW1lKSA9PT0gMCAmJiAoZTUgKz0gKHQ0Lm5hbWUgKyB0NC5tZXNzYWdlKS5zcGxpdChgCmApLmxlbmd0aCksIG44LnNwbGl0KGAKYCkuc2xpY2UoZTUpLmZpbHRlcihGbjMpLm1hcCgocjMpID0+IGAKYCArIHIzKS5qb2luKCIiKSkgOiAiIjsKICB9CiAgdmFyIGdyMiA9IFsiTW9kaWZ5IiwgIkJ1bGsiLCAiT3BlbkZhaWxlZCIsICJWZXJzaW9uQ2hhbmdlIiwgIlNjaGVtYSIsICJVcGdyYWRlIiwgIkludmFsaWRUYWJsZSIsICJNaXNzaW5nQVBJIiwgIk5vU3VjaERhdGFiYXNlIiwgIkludmFsaWRBcmd1bWVudCIsICJTdWJUcmFuc2FjdGlvbiIsICJVbnN1cHBvcnRlZCIsICJJbnRlcm5hbCIsICJEYXRhYmFzZUNsb3NlZCIsICJQcmVtYXR1cmVDb21taXQiLCAiRm9yZWlnbkF3YWl0Il07CiAgdmFyIE5uMyA9IFsiVW5rbm93biIsICJDb25zdHJhaW50IiwgIkRhdGEiLCAiVHJhbnNhY3Rpb25JbmFjdGl2ZSIsICJSZWFkT25seSIsICJWZXJzaW9uIiwgIk5vdEZvdW5kIiwgIkludmFsaWRTdGF0ZSIsICJJbnZhbGlkQWNjZXNzIiwgIkFib3J0IiwgIlRpbWVvdXQiLCAiUXVvdGFFeGNlZWRlZCIsICJTeW50YXgiLCAiRGF0YUNsb25lIl07CiAgdmFyIG5uNSA9IGdyMi5jb25jYXQoTm4zKTsKICB2YXIgdnIyID0geyBWZXJzaW9uQ2hhbmdlZDogIkRhdGFiYXNlIHZlcnNpb24gY2hhbmdlZCBieSBvdGhlciBkYXRhYmFzZSBjb25uZWN0aW9uIiwgRGF0YWJhc2VDbG9zZWQ6ICJEYXRhYmFzZSBoYXMgYmVlbiBjbG9zZWQiLCBBYm9ydDogIlRyYW5zYWN0aW9uIGFib3J0ZWQiLCBUcmFuc2FjdGlvbkluYWN0aXZlOiAiVHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgY29tcGxldGVkIG9yIGZhaWxlZCIsIE1pc3NpbmdBUEk6ICJJbmRleGVkREIgQVBJIG1pc3NpbmcuIFBsZWFzZSB2aXNpdCBodHRwczovL3Rpbnl1cmwuY29tL3kydXV2c2tiIiB9OwogIGZ1bmN0aW9uIENlMTgodDQsIGU1KSB7CiAgICB0aGlzLl9lID0gdmUxMigpLCB0aGlzLm5hbWUgPSB0NCwgdGhpcy5tZXNzYWdlID0gZTU7CiAgfQogIEFlMTcoQ2UxOCkuZnJvbShFcnJvcikuZXh0ZW5kKHsgc3RhY2s6IHsgZ2V0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLl9zdGFjayB8fCAodGhpcy5fc3RhY2sgPSB0aGlzLm5hbWUgKyAiOiAiICsgdGhpcy5tZXNzYWdlICsgSXQxMCh0aGlzLl9lLCAyKSk7CiAgfSB9LCB0b1N0cmluZzogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5uYW1lICsgIjogIiArIHRoaXMubWVzc2FnZTsKICB9IH0pOwogIGZ1bmN0aW9uIGpuMyh0NCwgZTUpIHsKICAgIHJldHVybiB0NCArICIuIEVycm9yczogIiArIE9iamVjdC5rZXlzKGU1KS5tYXAoKG44KSA9PiBlNVtuOF0udG9TdHJpbmcoKSkuZmlsdGVyKChuOCwgcjMsIGk0KSA9PiBpNC5pbmRleE9mKG44KSA9PT0gcjMpLmpvaW4oYApgKTsKICB9CiAgZnVuY3Rpb24gc3QxMCh0NCwgZTUsIG44LCByMykgewogICAgdGhpcy5fZSA9IHZlMTIoKSwgdGhpcy5mYWlsdXJlcyA9IGU1LCB0aGlzLmZhaWxlZEtleXMgPSByMywgdGhpcy5zdWNjZXNzQ291bnQgPSBuOCwgdGhpcy5tZXNzYWdlID0gam4zKHQ0LCBlNSk7CiAgfQogIEFlMTcoc3QxMCkuZnJvbShDZTE4KTsKICBmdW5jdGlvbiBQZTE0KHQ0LCBlNSkgewogICAgdGhpcy5fZSA9IHZlMTIoKSwgdGhpcy5uYW1lID0gIkJ1bGtFcnJvciIsIHRoaXMuZmFpbHVyZXMgPSBPYmplY3Qua2V5cyhlNSkubWFwKChuOCkgPT4gZTVbbjhdKSwgdGhpcy5mYWlsdXJlc0J5UG9zID0gZTUsIHRoaXMubWVzc2FnZSA9IGpuMyh0NCwgZTUpOwogIH0KICBBZTE3KFBlMTQpLmZyb20oQ2UxOCk7CiAgdmFyIHJuNCA9IG5uNS5yZWR1Y2UoKHQ0LCBlNSkgPT4gKHQ0W2U1XSA9IGU1ICsgIkVycm9yIiwgdDQpLCB7fSk7CiAgdmFyIF9yID0gQ2UxODsKICB2YXIgQzE2ID0gbm41LnJlZHVjZSgodDQsIGU1KSA9PiB7CiAgICB2YXIgbjggPSBlNSArICJFcnJvciI7CiAgICBmdW5jdGlvbiByMyhpNCwgczgpIHsKICAgICAgdGhpcy5fZSA9IHZlMTIoKSwgdGhpcy5uYW1lID0gbjgsIGk0ID8gdHlwZW9mIGk0ID09ICJzdHJpbmciID8gKHRoaXMubWVzc2FnZSA9IGAke2k0fSR7czggPyBgCiBgICsgczggOiAiIn1gLCB0aGlzLmlubmVyID0gczggfHwgbnVsbCkgOiB0eXBlb2YgaTQgPT0gIm9iamVjdCIgJiYgKHRoaXMubWVzc2FnZSA9IGAke2k0Lm5hbWV9ICR7aTQubWVzc2FnZX1gLCB0aGlzLmlubmVyID0gaTQpIDogKHRoaXMubWVzc2FnZSA9IHZyMltlNV0gfHwgbjgsIHRoaXMuaW5uZXIgPSBudWxsKTsKICAgIH0KICAgIHJldHVybiBBZTE3KHIzKS5mcm9tKF9yKSwgdDRbZTVdID0gcjMsIHQ0OwogIH0sIHt9KTsKICBDMTYuU3ludGF4ID0gU3ludGF4RXJyb3I7CiAgQzE2LlR5cGUgPSBUeXBlRXJyb3I7CiAgQzE2LlJhbmdlID0gUmFuZ2VFcnJvcjsKICB2YXIgZ240ID0gTm4zLnJlZHVjZSgodDQsIGU1KSA9PiAodDRbZTUgKyAiRXJyb3IiXSA9IEMxNltlNV0sIHQ0KSwge30pOwogIGZ1bmN0aW9uIHdyMih0NCwgZTUpIHsKICAgIGlmICghdDQgfHwgdDQgaW5zdGFuY2VvZiBDZTE4IHx8IHQ0IGluc3RhbmNlb2YgVHlwZUVycm9yIHx8IHQ0IGluc3RhbmNlb2YgU3ludGF4RXJyb3IgfHwgIXQ0Lm5hbWUgfHwgIWduNFt0NC5uYW1lXSkKICAgICAgcmV0dXJuIHQ0OwogICAgdmFyIG44ID0gbmV3IGduNFt0NC5uYW1lXShlNSB8fCB0NC5tZXNzYWdlLCB0NCk7CiAgICByZXR1cm4gInN0YWNrIiBpbiB0NCAmJiByZTE5KG44LCAic3RhY2siLCB7IGdldDogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLmlubmVyLnN0YWNrOwogICAgfSB9KSwgbjg7CiAgfQogIHZhciBtdDkgPSBubjUucmVkdWNlKCh0NCwgZTUpID0+IChbIlN5bnRheCIsICJUeXBlIiwgIlJhbmdlIl0uaW5kZXhPZihlNSkgPT09IC0xICYmICh0NFtlNSArICJFcnJvciJdID0gQzE2W2U1XSksIHQ0KSwge30pOwogIG10OS5Nb2RpZnlFcnJvciA9IHN0MTA7CiAgbXQ5LkRleGllRXJyb3IgPSBDZTE4OwogIG10OS5CdWxrRXJyb3IgPSBQZTE0OwogIGZ1bmN0aW9uIFIyNSgpIHsKICB9CiAgZnVuY3Rpb24gemU4KHQ0KSB7CiAgICByZXR1cm4gdDQ7CiAgfQogIGZ1bmN0aW9uIGJyMih0NCwgZTUpIHsKICAgIHJldHVybiB0NCA9PSBudWxsIHx8IHQ0ID09PSB6ZTggPyBlNSA6IGZ1bmN0aW9uKG44KSB7CiAgICAgIHJldHVybiBlNSh0NChuOCkpOwogICAgfTsKICB9CiAgZnVuY3Rpb24gbWUxNyh0NCwgZTUpIHsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgdDQuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgZTUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHhyMih0NCwgZTUpIHsKICAgIHJldHVybiB0NCA9PT0gUjI1ID8gZTUgOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIG44ID0gdDQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgbjggIT09IHZvaWQgMCAmJiAoYXJndW1lbnRzWzBdID0gbjgpOwogICAgICB2YXIgcjMgPSB0aGlzLm9uc3VjY2VzcywgaTQgPSB0aGlzLm9uZXJyb3I7CiAgICAgIHRoaXMub25zdWNjZXNzID0gbnVsbCwgdGhpcy5vbmVycm9yID0gbnVsbDsKICAgICAgdmFyIHM4ID0gZTUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgcmV0dXJuIHIzICYmICh0aGlzLm9uc3VjY2VzcyA9IHRoaXMub25zdWNjZXNzID8gbWUxNyhyMywgdGhpcy5vbnN1Y2Nlc3MpIDogcjMpLCBpNCAmJiAodGhpcy5vbmVycm9yID0gdGhpcy5vbmVycm9yID8gbWUxNyhpNCwgdGhpcy5vbmVycm9yKSA6IGk0KSwgczggIT09IHZvaWQgMCA/IHM4IDogbjg7CiAgICB9OwogIH0KICBmdW5jdGlvbiBFcjIodDQsIGU1KSB7CiAgICByZXR1cm4gdDQgPT09IFIyNSA/IGU1IDogZnVuY3Rpb24oKSB7CiAgICAgIHQ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIHZhciBuOCA9IHRoaXMub25zdWNjZXNzLCByMyA9IHRoaXMub25lcnJvcjsKICAgICAgdGhpcy5vbnN1Y2Nlc3MgPSB0aGlzLm9uZXJyb3IgPSBudWxsLCBlNS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBuOCAmJiAodGhpcy5vbnN1Y2Nlc3MgPSB0aGlzLm9uc3VjY2VzcyA/IG1lMTcobjgsIHRoaXMub25zdWNjZXNzKSA6IG44KSwgcjMgJiYgKHRoaXMub25lcnJvciA9IHRoaXMub25lcnJvciA/IG1lMTcocjMsIHRoaXMub25lcnJvcikgOiByMyk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBTcjIodDQsIGU1KSB7CiAgICByZXR1cm4gdDQgPT09IFIyNSA/IGU1IDogZnVuY3Rpb24objgpIHsKICAgICAgdmFyIHIzID0gdDQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgTDIxKG44LCByMyk7CiAgICAgIHZhciBpNCA9IHRoaXMub25zdWNjZXNzLCBzOCA9IHRoaXMub25lcnJvcjsKICAgICAgdGhpcy5vbnN1Y2Nlc3MgPSBudWxsLCB0aGlzLm9uZXJyb3IgPSBudWxsOwogICAgICB2YXIgbzQgPSBlNS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICByZXR1cm4gaTQgJiYgKHRoaXMub25zdWNjZXNzID0gdGhpcy5vbnN1Y2Nlc3MgPyBtZTE3KGk0LCB0aGlzLm9uc3VjY2VzcykgOiBpNCksIHM4ICYmICh0aGlzLm9uZXJyb3IgPSB0aGlzLm9uZXJyb3IgPyBtZTE3KHM4LCB0aGlzLm9uZXJyb3IpIDogczgpLCByMyA9PT0gdm9pZCAwID8gbzQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG80IDogTDIxKHIzLCBvNCk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBBcjIodDQsIGU1KSB7CiAgICByZXR1cm4gdDQgPT09IFIyNSA/IGU1IDogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBlNS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID09PSBmYWxzZSA/IGZhbHNlIDogdDQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHNuNyh0NCwgZTUpIHsKICAgIHJldHVybiB0NCA9PT0gUjI1ID8gZTUgOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIG44ID0gdDQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgaWYgKG44ICYmIHR5cGVvZiBuOC50aGVuID09ICJmdW5jdGlvbiIpIHsKICAgICAgICBmb3IgKHZhciByMyA9IHRoaXMsIGk0ID0gYXJndW1lbnRzLmxlbmd0aCwgczggPSBuZXcgQXJyYXkoaTQpOyBpNC0tOyApCiAgICAgICAgICBzOFtpNF0gPSBhcmd1bWVudHNbaTRdOwogICAgICAgIHJldHVybiBuOC50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGU1LmFwcGx5KHIzLCBzOCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGU1LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9OwogIH0KICB2YXIgQmUxMSA9IHt9OwogIHZhciBDcjIgPSAxMDA7CiAgdmFyIEtyID0gMjA7CiAgdmFyIFZuMyA9IDEwMDsKICB2YXIgW0R0MTAsIG90OCwgUnQxMV0gPSB0eXBlb2YgUHJvbWlzZSA+ICJ1IiA/IFtdIDogKCgpID0+IHsKICAgIGxldCB0NCA9IFByb21pc2UucmVzb2x2ZSgpOwogICAgaWYgKHR5cGVvZiBjcnlwdG8gPiAidSIgfHwgIWNyeXB0by5zdWJ0bGUpCiAgICAgIHJldHVybiBbdDQsIE1lMTIodDQpLCB0NF07CiAgICBsZXQgZTUgPSBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTUxMiIsIG5ldyBVaW50OEFycmF5KFswXSkpOwogICAgcmV0dXJuIFtlNSwgTWUxMihlNSksIHQ0XTsKICB9KSgpOwogIHZhciBMbjMgPSBvdDggJiYgb3Q4LnRoZW47CiAgdmFyIFplNiA9IER0MTAgJiYgRHQxMC5jb25zdHJ1Y3RvcjsKICB2YXIgb241ID0gISFSdDExOwogIHZhciBQdDEyID0gZmFsc2U7CiAgdmFyIFRyMiA9IFJ0MTEgPyAoKSA9PiB7CiAgICBSdDExLnRoZW4oWGU0KTsKICB9IDogUDI2LnNldEltbWVkaWF0ZSA/IF9fc2V0SW1tZWRpYXRlJC5iaW5kKG51bGwsIFhlNCkgOiBQMjYuTXV0YXRpb25PYnNlcnZlciA/ICgpID0+IHsKICAgIHZhciB0NCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gewogICAgICBYZTQoKSwgdDQgPSBudWxsOwogICAgfSkub2JzZXJ2ZSh0NCwgeyBhdHRyaWJ1dGVzOiB0cnVlIH0pLCB0NC5zZXRBdHRyaWJ1dGUoImkiLCAiMSIpOwogIH0gOiAoKSA9PiB7CiAgICBzZXRUaW1lb3V0KFhlNCwgMCk7CiAgfTsKICB2YXIgRmUxMiA9IGZ1bmN0aW9uKHQ0LCBlNSkgewogICAgUmUxNS5wdXNoKFt0NCwgZTVdKSwgYXQ4ICYmIChUcjIoKSwgYXQ4ID0gZmFsc2UpOwogIH07CiAgdmFyIGt0NyA9IHRydWU7CiAgdmFyIGF0OCA9IHRydWU7CiAgdmFyIHBlMTIgPSBbXTsKICB2YXIgZXQxMSA9IFtdOwogIHZhciBPdDExID0gbnVsbDsKICB2YXIgTXQ1ID0gemU4OwogIHZhciBFZTkgPSB7IGlkOiAiZ2xvYmFsIiwgZ2xvYmFsOiB0cnVlLCByZWY6IDAsIHVuaGFuZGxlZHM6IFtdLCBvbnVuaGFuZGxlZDogd240LCBwZ3A6IGZhbHNlLCBlbnY6IHt9LCBmaW5hbGl6ZTogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnVuaGFuZGxlZHMuZm9yRWFjaCgodDQpID0+IHsKICAgICAgdHJ5IHsKICAgICAgICB3bjQodDRbMF0sIHQ0WzFdKTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgIH0pOwogIH0gfTsKICB2YXIgQTE5ID0gRWU5OwogIHZhciBSZTE1ID0gW107CiAgdmFyIHllMTQgPSAwOwogIHZhciB0dDE2ID0gW107CiAgZnVuY3Rpb24gYjI0KHQ0KSB7CiAgICBpZiAodHlwZW9mIHRoaXMgIT0gIm9iamVjdCIpCiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldyIpOwogICAgdGhpcy5fbGlzdGVuZXJzID0gW10sIHRoaXMub251bmNhdGNoZWQgPSBSMjUsIHRoaXMuX2xpYiA9IGZhbHNlOwogICAgdmFyIGU1ID0gdGhpcy5fUFNEID0gQTE5OwogICAgaWYgKHExOSAmJiAodGhpcy5fc3RhY2tIb2xkZXIgPSB2ZTEyKCksIHRoaXMuX3ByZXYgPSBudWxsLCB0aGlzLl9udW1QcmV2ID0gMCksIHR5cGVvZiB0NCAhPSAiZnVuY3Rpb24iKSB7CiAgICAgIGlmICh0NCAhPT0gQmUxMSkKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpOwogICAgICB0aGlzLl9zdGF0ZSA9IGFyZ3VtZW50c1sxXSwgdGhpcy5fdmFsdWUgPSBhcmd1bWVudHNbMl0sIHRoaXMuX3N0YXRlID09PSBmYWxzZSAmJiBGdDUodGhpcywgdGhpcy5fdmFsdWUpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0aGlzLl9zdGF0ZSA9IG51bGwsIHRoaXMuX3ZhbHVlID0gbnVsbCwgKytlNS5yZWYsIHpuMyh0aGlzLCB0NCk7CiAgfQogIHZhciBCdDggPSB7IGdldDogZnVuY3Rpb24oKSB7CiAgICB2YXIgdDQgPSBBMTksIGU1ID0gdXQxMjsKICAgIGZ1bmN0aW9uIG44KHIzLCBpNCkgewogICAgICB2YXIgczggPSAhdDQuZ2xvYmFsICYmICh0NCAhPT0gQTE5IHx8IGU1ICE9PSB1dDEyKTsKICAgICAgbGV0IG80ID0gczggJiYgIWllMTIoKTsKICAgICAgdmFyIGE0ID0gbmV3IGIyNCgodTExLCBsNykgPT4gewogICAgICAgIGFuMyh0aGlzLCBuZXcgJG4zKGN0MTEocjMsIHQ0LCBzOCwgbzQpLCBjdDExKGk0LCB0NCwgczgsIG80KSwgdTExLCBsNywgdDQpKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBxMTkgJiYgSG4zKGE0LCB0aGlzKSwgYTQ7CiAgICB9CiAgICByZXR1cm4gbjgucHJvdG90eXBlID0gQmUxMSwgbjg7CiAgfSwgc2V0OiBmdW5jdGlvbih0NCkgewogICAgcmUxOSh0aGlzLCAidGhlbiIsIHQ0ICYmIHQ0LnByb3RvdHlwZSA9PT0gQmUxMSA/IEJ0OCA6IHsgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHQ0OwogICAgfSwgc2V0OiBCdDguc2V0IH0pOwogIH0gfTsKICBTZTEzKGIyNC5wcm90b3R5cGUsIHsgdGhlbjogQnQ4LCBfdGhlbjogZnVuY3Rpb24odDQsIGU1KSB7CiAgICBhbjModGhpcywgbmV3ICRuMyhudWxsLCBudWxsLCB0NCwgZTUsIEExOSkpOwogIH0sIGNhdGNoOiBmdW5jdGlvbih0NCkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpCiAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgdDQpOwogICAgdmFyIGU1ID0gYXJndW1lbnRzWzBdLCBuOCA9IGFyZ3VtZW50c1sxXTsKICAgIHJldHVybiB0eXBlb2YgZTUgPT0gImZ1bmN0aW9uIiA/IHRoaXMudGhlbihudWxsLCAocjMpID0+IHIzIGluc3RhbmNlb2YgZTUgPyBuOChyMykgOiBudDEzKHIzKSkgOiB0aGlzLnRoZW4obnVsbCwgKHIzKSA9PiByMyAmJiByMy5uYW1lID09PSBlNSA/IG44KHIzKSA6IG50MTMocjMpKTsKICB9LCBmaW5hbGx5OiBmdW5jdGlvbih0NCkgewogICAgcmV0dXJuIHRoaXMudGhlbigoZTUpID0+ICh0NCgpLCBlNSksIChlNSkgPT4gKHQ0KCksIG50MTMoZTUpKSk7CiAgfSwgc3RhY2s6IHsgZ2V0OiBmdW5jdGlvbigpIHsKICAgIGlmICh0aGlzLl9zdGFjaykKICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrOwogICAgdHJ5IHsKICAgICAgUHQxMiA9IHRydWU7CiAgICAgIHZhciB0NCA9IFduMyh0aGlzLCBbXSwgS3IpLCBlNSA9IHQ0LmpvaW4oYApGcm9tIHByZXZpb3VzOiBgKTsKICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlICE9PSBudWxsICYmICh0aGlzLl9zdGFjayA9IGU1KSwgZTU7CiAgICB9IGZpbmFsbHkgewogICAgICBQdDEyID0gZmFsc2U7CiAgICB9CiAgfSB9LCB0aW1lb3V0OiBmdW5jdGlvbih0NCwgZTUpIHsKICAgIHJldHVybiB0NCA8IDEgLyAwID8gbmV3IGIyNCgobjgsIHIzKSA9PiB7CiAgICAgIHZhciBpNCA9IHNldFRpbWVvdXQoKCkgPT4gcjMobmV3IEMxNi5UaW1lb3V0KGU1KSksIHQ0KTsKICAgICAgdGhpcy50aGVuKG44LCByMykuZmluYWxseShjbGVhclRpbWVvdXQuYmluZChudWxsLCBpNCkpOwogICAgfSkgOiB0aGlzOwogIH0gfSk7CiAgdHlwZW9mIFN5bWJvbCA8ICJ1IiAmJiBTeW1ib2wudG9TdHJpbmdUYWcgJiYgcmUxOShiMjQucHJvdG90eXBlLCBTeW1ib2wudG9TdHJpbmdUYWcsICJEZXhpZS5Qcm9taXNlIik7CiAgRWU5LmVudiA9IFluMygpOwogIGZ1bmN0aW9uICRuMyh0NCwgZTUsIG44LCByMywgaTQpIHsKICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2YgdDQgPT0gImZ1bmN0aW9uIiA/IHQ0IDogbnVsbCwgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIGU1ID09ICJmdW5jdGlvbiIgPyBlNSA6IG51bGwsIHRoaXMucmVzb2x2ZSA9IG44LCB0aGlzLnJlamVjdCA9IHIzLCB0aGlzLnBzZCA9IGk0OwogIH0KICBTZTEzKGIyNCwgeyBhbGw6IGZ1bmN0aW9uKCkgewogICAgdmFyIHQ0ID0gZWUxNy5hcHBseShudWxsLCBhcmd1bWVudHMpLm1hcChsdDkpOwogICAgcmV0dXJuIG5ldyBiMjQoZnVuY3Rpb24oZTUsIG44KSB7CiAgICAgIHQ0Lmxlbmd0aCA9PT0gMCAmJiBlNShbXSk7CiAgICAgIHZhciByMyA9IHQ0Lmxlbmd0aDsKICAgICAgdDQuZm9yRWFjaCgoaTQsIHM4KSA9PiBiMjQucmVzb2x2ZShpNCkudGhlbigobzQpID0+IHsKICAgICAgICB0NFtzOF0gPSBvNCwgLS1yMyB8fCBlNSh0NCk7CiAgICAgIH0sIG44KSk7CiAgICB9KTsKICB9LCByZXNvbHZlOiAodDQpID0+IHsKICAgIGlmICh0NCBpbnN0YW5jZW9mIGIyNCkKICAgICAgcmV0dXJuIHQ0OwogICAgaWYgKHQ0ICYmIHR5cGVvZiB0NC50aGVuID09ICJmdW5jdGlvbiIpCiAgICAgIHJldHVybiBuZXcgYjI0KChuOCwgcjMpID0+IHsKICAgICAgICB0NC50aGVuKG44LCByMyk7CiAgICAgIH0pOwogICAgdmFyIGU1ID0gbmV3IGIyNChCZTExLCB0cnVlLCB0NCk7CiAgICByZXR1cm4gSG4zKGU1LCBPdDExKSwgZTU7CiAgfSwgcmVqZWN0OiBudDEzLCByYWNlOiBmdW5jdGlvbigpIHsKICAgIHZhciB0NCA9IGVlMTcuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5tYXAobHQ5KTsKICAgIHJldHVybiBuZXcgYjI0KChlNSwgbjgpID0+IHsKICAgICAgdDQubWFwKChyMykgPT4gYjI0LnJlc29sdmUocjMpLnRoZW4oZTUsIG44KSk7CiAgICB9KTsKICB9LCBQU0Q6IHsgZ2V0OiAoKSA9PiBBMTksIHNldDogKHQ0KSA9PiBBMTkgPSB0NCB9LCB0b3RhbEVjaG9lczogeyBnZXQ6ICgpID0+IHV0MTIgfSwgbmV3UFNEOiBsZTE0LCB1c2VQU0Q6IFRlMTUsIHNjaGVkdWxlcjogeyBnZXQ6ICgpID0+IEZlMTIsIHNldDogKHQ0KSA9PiB7CiAgICBGZTEyID0gdDQ7CiAgfSB9LCByZWplY3Rpb25NYXBwZXI6IHsgZ2V0OiAoKSA9PiBNdDUsIHNldDogKHQ0KSA9PiB7CiAgICBNdDUgPSB0NDsKICB9IH0sIGZvbGxvdzogKHQ0LCBlNSkgPT4gbmV3IGIyNCgobjgsIHIzKSA9PiBsZTE0KChpNCwgczgpID0+IHsKICAgIHZhciBvNCA9IEExOTsKICAgIG80LnVuaGFuZGxlZHMgPSBbXSwgbzQub251bmhhbmRsZWQgPSBzOCwgbzQuZmluYWxpemUgPSBtZTE3KGZ1bmN0aW9uKCkgewogICAgICBEcjIoKCkgPT4gewogICAgICAgIHRoaXMudW5oYW5kbGVkcy5sZW5ndGggPT09IDAgPyBpNCgpIDogczgodGhpcy51bmhhbmRsZWRzWzBdKTsKICAgICAgfSk7CiAgICB9LCBvNC5maW5hbGl6ZSksIHQ0KCk7CiAgfSwgZTUsIG44LCByMykpIH0pOwogIFplNiAmJiAoWmU2LmFsbFNldHRsZWQgJiYgcmUxOShiMjQsICJhbGxTZXR0bGVkIiwgZnVuY3Rpb24oKSB7CiAgICBsZXQgdDQgPSBlZTE3LmFwcGx5KG51bGwsIGFyZ3VtZW50cykubWFwKGx0OSk7CiAgICByZXR1cm4gbmV3IGIyNCgoZTUpID0+IHsKICAgICAgdDQubGVuZ3RoID09PSAwICYmIGU1KFtdKTsKICAgICAgbGV0IG44ID0gdDQubGVuZ3RoLCByMyA9IG5ldyBBcnJheShuOCk7CiAgICAgIHQ0LmZvckVhY2goKGk0LCBzOCkgPT4gYjI0LnJlc29sdmUoaTQpLnRoZW4oKG80KSA9PiByM1tzOF0gPSB7IHN0YXR1czogImZ1bGZpbGxlZCIsIHZhbHVlOiBvNCB9LCAobzQpID0+IHIzW3M4XSA9IHsgc3RhdHVzOiAicmVqZWN0ZWQiLCByZWFzb246IG80IH0pLnRoZW4oKCkgPT4gLS1uOCB8fCBlNShyMykpKTsKICAgIH0pOwogIH0pLCBaZTYuYW55ICYmIHR5cGVvZiBBZ2dyZWdhdGVFcnJvciA8ICJ1IiAmJiByZTE5KGIyNCwgImFueSIsIGZ1bmN0aW9uKCkgewogICAgbGV0IHQ0ID0gZWUxNy5hcHBseShudWxsLCBhcmd1bWVudHMpLm1hcChsdDkpOwogICAgcmV0dXJuIG5ldyBiMjQoKGU1LCBuOCkgPT4gewogICAgICB0NC5sZW5ndGggPT09IDAgJiYgbjgobmV3IEFnZ3JlZ2F0ZUVycm9yKFtdKSk7CiAgICAgIGxldCByMyA9IHQ0Lmxlbmd0aCwgaTQgPSBuZXcgQXJyYXkocjMpOwogICAgICB0NC5mb3JFYWNoKChzOCwgbzQpID0+IGIyNC5yZXNvbHZlKHM4KS50aGVuKChhNCkgPT4gZTUoYTQpLCAoYTQpID0+IHsKICAgICAgICBpNFtvNF0gPSBhNCwgLS1yMyB8fCBuOChuZXcgQWdncmVnYXRlRXJyb3IoaTQpKTsKICAgICAgfSkpOwogICAgfSk7CiAgfSkpOwogIGZ1bmN0aW9uIHpuMyh0NCwgZTUpIHsKICAgIHRyeSB7CiAgICAgIGU1KChuOCkgPT4gewogICAgICAgIGlmICh0NC5fc3RhdGUgPT09IG51bGwpIHsKICAgICAgICAgIGlmIChuOCA9PT0gdDQpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdHNlbGYuIik7CiAgICAgICAgICB2YXIgcjMgPSB0NC5fbGliICYmIFVlOCgpOwogICAgICAgICAgbjggJiYgdHlwZW9mIG44LnRoZW4gPT0gImZ1bmN0aW9uIiA/IHpuMyh0NCwgKGk0LCBzOCkgPT4gewogICAgICAgICAgICBuOCBpbnN0YW5jZW9mIGIyNCA/IG44Ll90aGVuKGk0LCBzOCkgOiBuOC50aGVuKGk0LCBzOCk7CiAgICAgICAgICB9KSA6ICh0NC5fc3RhdGUgPSB0cnVlLCB0NC5fdmFsdWUgPSBuOCwgVW4zKHQ0KSksIHIzICYmIFdlMTAoKTsKICAgICAgICB9CiAgICAgIH0sIEZ0NS5iaW5kKG51bGwsIHQ0KSk7CiAgICB9IGNhdGNoIChuOCkgewogICAgICBGdDUodDQsIG44KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gRnQ1KHQ0LCBlNSkgewogICAgaWYgKGV0MTEucHVzaChlNSksIHQ0Ll9zdGF0ZSA9PT0gbnVsbCkgewogICAgICB2YXIgbjggPSB0NC5fbGliICYmIFVlOCgpOwogICAgICBlNSA9IE10NShlNSksIHQ0Ll9zdGF0ZSA9IGZhbHNlLCB0NC5fdmFsdWUgPSBlNSwgcTE5ICYmIGU1ICE9PSBudWxsICYmIHR5cGVvZiBlNSA9PSAib2JqZWN0IiAmJiAhZTUuX3Byb21pc2UgJiYgY3IyKCgpID0+IHsKICAgICAgICB2YXIgcjMgPSBlbjQoZTUsICJzdGFjayIpOwogICAgICAgIGU1Ll9wcm9taXNlID0gdDQsIHJlMTkoZTUsICJzdGFjayIsIHsgZ2V0OiAoKSA9PiBQdDEyID8gcjMgJiYgKHIzLmdldCA/IHIzLmdldC5hcHBseShlNSkgOiByMy52YWx1ZSkgOiB0NC5zdGFjayB9KTsKICAgICAgfSksIFJyMih0NCksIFVuMyh0NCksIG44ICYmIFdlMTAoKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gVW4zKHQ0KSB7CiAgICB2YXIgZTUgPSB0NC5fbGlzdGVuZXJzOwogICAgdDQuX2xpc3RlbmVycyA9IFtdOwogICAgZm9yICh2YXIgbjggPSAwLCByMyA9IGU1Lmxlbmd0aDsgbjggPCByMzsgKytuOCkKICAgICAgYW4zKHQ0LCBlNVtuOF0pOwogICAgdmFyIGk0ID0gdDQuX1BTRDsKICAgIC0taTQucmVmIHx8IGk0LmZpbmFsaXplKCksIHllMTQgPT09IDAgJiYgKCsreWUxNCwgRmUxMigoKSA9PiB7CiAgICAgIC0teWUxNCA9PT0gMCAmJiB1bjIoKTsKICAgIH0sIFtdKSk7CiAgfQogIGZ1bmN0aW9uIGFuMyh0NCwgZTUpIHsKICAgIGlmICh0NC5fc3RhdGUgPT09IG51bGwpIHsKICAgICAgdDQuX2xpc3RlbmVycy5wdXNoKGU1KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIG44ID0gdDQuX3N0YXRlID8gZTUub25GdWxmaWxsZWQgOiBlNS5vblJlamVjdGVkOwogICAgaWYgKG44ID09PSBudWxsKQogICAgICByZXR1cm4gKHQ0Ll9zdGF0ZSA/IGU1LnJlc29sdmUgOiBlNS5yZWplY3QpKHQ0Ll92YWx1ZSk7CiAgICArK2U1LnBzZC5yZWYsICsreWUxNCwgRmUxMihJcjIsIFtuOCwgdDQsIGU1XSk7CiAgfQogIGZ1bmN0aW9uIElyMih0NCwgZTUsIG44KSB7CiAgICB0cnkgewogICAgICBPdDExID0gZTU7CiAgICAgIHZhciByMywgaTQgPSBlNS5fdmFsdWU7CiAgICAgIGU1Ll9zdGF0ZSA/IHIzID0gdDQoaTQpIDogKGV0MTEubGVuZ3RoICYmIChldDExID0gW10pLCByMyA9IHQ0KGk0KSwgZXQxMS5pbmRleE9mKGk0KSA9PT0gLTEgJiYgUHIoZTUpKSwgbjgucmVzb2x2ZShyMyk7CiAgICB9IGNhdGNoIChzOCkgewogICAgICBuOC5yZWplY3QoczgpOwogICAgfSBmaW5hbGx5IHsKICAgICAgT3QxMSA9IG51bGwsIC0teWUxNCA9PT0gMCAmJiB1bjIoKSwgLS1uOC5wc2QucmVmIHx8IG44LnBzZC5maW5hbGl6ZSgpOwogICAgfQogIH0KICBmdW5jdGlvbiBXbjModDQsIGU1LCBuOCkgewogICAgaWYgKGU1Lmxlbmd0aCA9PT0gbjgpCiAgICAgIHJldHVybiBlNTsKICAgIHZhciByMyA9ICIiOwogICAgaWYgKHQ0Ll9zdGF0ZSA9PT0gZmFsc2UpIHsKICAgICAgdmFyIGk0ID0gdDQuX3ZhbHVlLCBzOCwgbzQ7CiAgICAgIGk0ICE9IG51bGwgPyAoczggPSBpNC5uYW1lIHx8ICJFcnJvciIsIG80ID0gaTQubWVzc2FnZSB8fCBpNCwgcjMgPSBJdDEwKGk0LCAwKSkgOiAoczggPSBpNCwgbzQgPSAiIiksIGU1LnB1c2goczggKyAobzQgPyAiOiAiICsgbzQgOiAiIikgKyByMyk7CiAgICB9CiAgICByZXR1cm4gcTE5ICYmIChyMyA9IEl0MTAodDQuX3N0YWNrSG9sZGVyLCAyKSwgcjMgJiYgZTUuaW5kZXhPZihyMykgPT09IC0xICYmIGU1LnB1c2gocjMpLCB0NC5fcHJldiAmJiBXbjModDQuX3ByZXYsIGU1LCBuOCkpLCBlNTsKICB9CiAgZnVuY3Rpb24gSG4zKHQ0LCBlNSkgewogICAgdmFyIG44ID0gZTUgPyBlNS5fbnVtUHJldiArIDEgOiAwOwogICAgbjggPCBDcjIgJiYgKHQ0Ll9wcmV2ID0gZTUsIHQ0Ll9udW1QcmV2ID0gbjgpOwogIH0KICBmdW5jdGlvbiBYZTQoKSB7CiAgICBVZTgoKSAmJiBXZTEwKCk7CiAgfQogIGZ1bmN0aW9uIFVlOCgpIHsKICAgIHZhciB0NCA9IGt0NzsKICAgIHJldHVybiBrdDcgPSBmYWxzZSwgYXQ4ID0gZmFsc2UsIHQ0OwogIH0KICBmdW5jdGlvbiBXZTEwKCkgewogICAgdmFyIHQ0LCBlNSwgbjg7CiAgICBkbwogICAgICBmb3IgKDsgUmUxNS5sZW5ndGggPiAwOyApCiAgICAgICAgZm9yICh0NCA9IFJlMTUsIFJlMTUgPSBbXSwgbjggPSB0NC5sZW5ndGgsIGU1ID0gMDsgZTUgPCBuODsgKytlNSkgewogICAgICAgICAgdmFyIHIzID0gdDRbZTVdOwogICAgICAgICAgcjNbMF0uYXBwbHkobnVsbCwgcjNbMV0pOwogICAgICAgIH0KICAgIHdoaWxlIChSZTE1Lmxlbmd0aCA+IDApOwogICAga3Q3ID0gdHJ1ZSwgYXQ4ID0gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gdW4yKCkgewogICAgdmFyIHQ0ID0gcGUxMjsKICAgIHBlMTIgPSBbXSwgdDQuZm9yRWFjaCgocjMpID0+IHsKICAgICAgcjMuX1BTRC5vbnVuaGFuZGxlZC5jYWxsKG51bGwsIHIzLl92YWx1ZSwgcjMpOwogICAgfSk7CiAgICBmb3IgKHZhciBlNSA9IHR0MTYuc2xpY2UoMCksIG44ID0gZTUubGVuZ3RoOyBuODsgKQogICAgICBlNVstLW44XSgpOwogIH0KICBmdW5jdGlvbiBEcjIodDQpIHsKICAgIGZ1bmN0aW9uIGU1KCkgewogICAgICB0NCgpLCB0dDE2LnNwbGljZSh0dDE2LmluZGV4T2YoZTUpLCAxKTsKICAgIH0KICAgIHR0MTYucHVzaChlNSksICsreWUxNCwgRmUxMigoKSA9PiB7CiAgICAgIC0teWUxNCA9PT0gMCAmJiB1bjIoKTsKICAgIH0sIFtdKTsKICB9CiAgZnVuY3Rpb24gUnIyKHQ0KSB7CiAgICBwZTEyLnNvbWUoKGU1KSA9PiBlNS5fdmFsdWUgPT09IHQ0Ll92YWx1ZSkgfHwgcGUxMi5wdXNoKHQ0KTsKICB9CiAgZnVuY3Rpb24gUHIodDQpIHsKICAgIGZvciAodmFyIGU1ID0gcGUxMi5sZW5ndGg7IGU1OyApCiAgICAgIGlmIChwZTEyWy0tZTVdLl92YWx1ZSA9PT0gdDQuX3ZhbHVlKSB7CiAgICAgICAgcGUxMi5zcGxpY2UoZTUsIDEpOwogICAgICAgIHJldHVybjsKICAgICAgfQogIH0KICBmdW5jdGlvbiBudDEzKHQ0KSB7CiAgICByZXR1cm4gbmV3IGIyNChCZTExLCBmYWxzZSwgdDQpOwogIH0KICBmdW5jdGlvbiBPMTQodDQsIGU1KSB7CiAgICB2YXIgbjggPSBBMTk7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHZhciByMyA9IFVlOCgpLCBpNCA9IEExOTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gY2UxNShuOCwgdHJ1ZSksIHQ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH0gY2F0Y2ggKHM4KSB7CiAgICAgICAgZTUgJiYgZTUoczgpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIGNlMTUoaTQsIGZhbHNlKSwgcjMgJiYgV2UxMCgpOwogICAgICB9CiAgICB9OwogIH0KICB2YXIgTjE2ID0geyBhd2FpdHM6IDAsIGVjaG9lczogMCwgaWQ6IDAgfTsKICB2YXIga3IyID0gMDsKICB2YXIgcnQxMyA9IFtdOwogIHZhciB3dDggPSAwOwogIHZhciB1dDEyID0gMDsKICB2YXIgT3IzID0gMDsKICBmdW5jdGlvbiBsZTE0KHQ0LCBlNSwgbjgsIHIzKSB7CiAgICB2YXIgaTQgPSBBMTksIHM4ID0gT2JqZWN0LmNyZWF0ZShpNCk7CiAgICBzOC5wYXJlbnQgPSBpNCwgczgucmVmID0gMCwgczguZ2xvYmFsID0gZmFsc2UsIHM4LmlkID0gKytPcjM7CiAgICB2YXIgbzQgPSBFZTkuZW52OwogICAgczguZW52ID0gb241ID8geyBQcm9taXNlOiBiMjQsIFByb21pc2VQcm9wOiB7IHZhbHVlOiBiMjQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSwgYWxsOiBiMjQuYWxsLCByYWNlOiBiMjQucmFjZSwgYWxsU2V0dGxlZDogYjI0LmFsbFNldHRsZWQsIGFueTogYjI0LmFueSwgcmVzb2x2ZTogYjI0LnJlc29sdmUsIHJlamVjdDogYjI0LnJlamVjdCwgbnRoZW46IHZuMyhvNC5udGhlbiwgczgpLCBndGhlbjogdm4zKG80Lmd0aGVuLCBzOCkgfSA6IHt9LCBlNSAmJiBMMjEoczgsIGU1KSwgKytpNC5yZWYsIHM4LmZpbmFsaXplID0gZnVuY3Rpb24oKSB7CiAgICAgIC0tdGhpcy5wYXJlbnQucmVmIHx8IHRoaXMucGFyZW50LmZpbmFsaXplKCk7CiAgICB9OwogICAgdmFyIGE0ID0gVGUxNShzOCwgdDQsIG44LCByMyk7CiAgICByZXR1cm4gczgucmVmID09PSAwICYmIHM4LmZpbmFsaXplKCksIGE0OwogIH0KICBmdW5jdGlvbiBLZTUoKSB7CiAgICByZXR1cm4gTjE2LmlkIHx8IChOMTYuaWQgPSArK2tyMiksICsrTjE2LmF3YWl0cywgTjE2LmVjaG9lcyArPSBWbjMsIE4xNi5pZDsKICB9CiAgZnVuY3Rpb24gaWUxMigpIHsKICAgIHJldHVybiBOMTYuYXdhaXRzID8gKC0tTjE2LmF3YWl0cyA9PT0gMCAmJiAoTjE2LmlkID0gMCksIE4xNi5lY2hvZXMgPSBOMTYuYXdhaXRzICogVm4zLCB0cnVlKSA6IGZhbHNlOwogIH0KICAoIiIgKyBMbjMpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKSA9PT0gLTEgJiYgKEtlNSA9IGllMTIgPSBSMjUpOwogIGZ1bmN0aW9uIGx0OSh0NCkgewogICAgcmV0dXJuIE4xNi5lY2hvZXMgJiYgdDQgJiYgdDQuY29uc3RydWN0b3IgPT09IFplNiA/IChLZTUoKSwgdDQudGhlbigoZTUpID0+IChpZTEyKCksIGU1KSwgKGU1KSA9PiAoaWUxMigpLCBCMjMoZTUpKSkpIDogdDQ7CiAgfQogIGZ1bmN0aW9uIE1yMih0NCkgewogICAgKyt1dDEyLCAoIU4xNi5lY2hvZXMgfHwgLS1OMTYuZWNob2VzID09PSAwKSAmJiAoTjE2LmVjaG9lcyA9IE4xNi5pZCA9IDApLCBydDEzLnB1c2goQTE5KSwgY2UxNSh0NCwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIEJyMigpIHsKICAgIHZhciB0NCA9IHJ0MTNbcnQxMy5sZW5ndGggLSAxXTsKICAgIHJ0MTMucG9wKCksIGNlMTUodDQsIGZhbHNlKTsKICB9CiAgZnVuY3Rpb24gY2UxNSh0NCwgZTUpIHsKICAgIHZhciBuOCA9IEExOTsKICAgIGlmICgoZTUgPyBOMTYuZWNob2VzICYmICghd3Q4KysgfHwgdDQgIT09IEExOSkgOiB3dDggJiYgKCEtLXd0OCB8fCB0NCAhPT0gQTE5KSkgJiYgWG4zKGU1ID8gTXIyLmJpbmQobnVsbCwgdDQpIDogQnIyKSwgdDQgIT09IEExOSAmJiAoQTE5ID0gdDQsIG44ID09PSBFZTkgJiYgKEVlOS5lbnYgPSBZbjMoKSksIG9uNSkpIHsKICAgICAgdmFyIHIzID0gRWU5LmVudi5Qcm9taXNlLCBpNCA9IHQ0LmVudjsKICAgICAgb3Q4LnRoZW4gPSBpNC5udGhlbiwgcjMucHJvdG90eXBlLnRoZW4gPSBpNC5ndGhlbiwgKG44Lmdsb2JhbCB8fCB0NC5nbG9iYWwpICYmIChPYmplY3QuZGVmaW5lUHJvcGVydHkoUDI2LCAiUHJvbWlzZSIsIGk0LlByb21pc2VQcm9wKSwgcjMuYWxsID0gaTQuYWxsLCByMy5yYWNlID0gaTQucmFjZSwgcjMucmVzb2x2ZSA9IGk0LnJlc29sdmUsIHIzLnJlamVjdCA9IGk0LnJlamVjdCwgaTQuYWxsU2V0dGxlZCAmJiAocjMuYWxsU2V0dGxlZCA9IGk0LmFsbFNldHRsZWQpLCBpNC5hbnkgJiYgKHIzLmFueSA9IGk0LmFueSkpOwogICAgfQogIH0KICBmdW5jdGlvbiBZbjMoKSB7CiAgICB2YXIgdDQgPSBQMjYuUHJvbWlzZTsKICAgIHJldHVybiBvbjUgPyB7IFByb21pc2U6IHQ0LCBQcm9taXNlUHJvcDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihQMjYsICJQcm9taXNlIiksIGFsbDogdDQuYWxsLCByYWNlOiB0NC5yYWNlLCBhbGxTZXR0bGVkOiB0NC5hbGxTZXR0bGVkLCBhbnk6IHQ0LmFueSwgcmVzb2x2ZTogdDQucmVzb2x2ZSwgcmVqZWN0OiB0NC5yZWplY3QsIG50aGVuOiBvdDgudGhlbiwgZ3RoZW46IHQ0LnByb3RvdHlwZS50aGVuIH0gOiB7fTsKICB9CiAgZnVuY3Rpb24gVGUxNSh0NCwgZTUsIG44LCByMywgaTQpIHsKICAgIHZhciBzOCA9IEExOTsKICAgIHRyeSB7CiAgICAgIHJldHVybiBjZTE1KHQ0LCB0cnVlKSwgZTUobjgsIHIzLCBpNCk7CiAgICB9IGZpbmFsbHkgewogICAgICBjZTE1KHM4LCBmYWxzZSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIFhuMyh0NCkgewogICAgTG4zLmNhbGwoRHQxMCwgdDQpOwogIH0KICBmdW5jdGlvbiBjdDExKHQ0LCBlNSwgbjgsIHIzKSB7CiAgICByZXR1cm4gdHlwZW9mIHQ0ICE9ICJmdW5jdGlvbiIgPyB0NCA6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgaTQgPSBBMTk7CiAgICAgIG44ICYmIEtlNSgpLCBjZTE1KGU1LCB0cnVlKTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdDQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBjZTE1KGk0LCBmYWxzZSksIHIzICYmIFhuMyhpZTEyKTsKICAgICAgfQogICAgfTsKICB9CiAgZnVuY3Rpb24gdm4zKHQ0LCBlNSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKG44LCByMykgewogICAgICByZXR1cm4gdDQuY2FsbCh0aGlzLCBjdDExKG44LCBlNSksIGN0MTEocjMsIGU1KSk7CiAgICB9OwogIH0KICB2YXIgX24zID0gInVuaGFuZGxlZHJlamVjdGlvbiI7CiAgZnVuY3Rpb24gd240KHQ0LCBlNSkgewogICAgdmFyIG44OwogICAgdHJ5IHsKICAgICAgbjggPSBlNS5vbnVuY2F0Y2hlZCh0NCk7CiAgICB9IGNhdGNoIHsKICAgIH0KICAgIGlmIChuOCAhPT0gZmFsc2UpCiAgICAgIHRyeSB7CiAgICAgICAgdmFyIHIzLCBpNCA9IHsgcHJvbWlzZTogZTUsIHJlYXNvbjogdDQgfTsKICAgICAgICBpZiAoUDI2LmRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ID8gKHIzID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksIHIzLmluaXRFdmVudChfbjMsIHRydWUsIHRydWUpLCBMMjEocjMsIGk0KSkgOiBQMjYuQ3VzdG9tRXZlbnQgJiYgKHIzID0gbmV3IEN1c3RvbUV2ZW50KF9uMywgeyBkZXRhaWw6IGk0IH0pLCBMMjEocjMsIGk0KSksIHIzICYmIFAyNi5kaXNwYXRjaEV2ZW50ICYmIChkaXNwYXRjaEV2ZW50KHIzKSwgIVAyNi5Qcm9taXNlUmVqZWN0aW9uRXZlbnQgJiYgUDI2Lm9udW5oYW5kbGVkcmVqZWN0aW9uKSkKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIFAyNi5vbnVuaGFuZGxlZHJlamVjdGlvbihyMyk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICBxMTkgJiYgcjMgJiYgIXIzLmRlZmF1bHRQcmV2ZW50ZWQgJiYgY29uc29sZS53YXJuKGBVbmhhbmRsZWQgcmVqZWN0aW9uOiAke3Q0LnN0YWNrIHx8IHQ0fWApOwogICAgICB9IGNhdGNoIHsKICAgICAgfQogIH0KICB2YXIgQjIzID0gYjI0LnJlamVjdDsKICBmdW5jdGlvbiBOdDcodDQsIGU1LCBuOCwgcjMpIHsKICAgIGlmICghdDQuaWRiZGIgfHwgIXQ0Ll9zdGF0ZS5vcGVuQ29tcGxldGUgJiYgIUExOS5sZXRUaHJvdWdoICYmICF0NC5fdmlwKSB7CiAgICAgIGlmICh0NC5fc3RhdGUub3BlbkNvbXBsZXRlKQogICAgICAgIHJldHVybiBCMjMobmV3IEMxNi5EYXRhYmFzZUNsb3NlZCh0NC5fc3RhdGUuZGJPcGVuRXJyb3IpKTsKICAgICAgaWYgKCF0NC5fc3RhdGUuaXNCZWluZ09wZW5lZCkgewogICAgICAgIGlmICghdDQuX29wdGlvbnMuYXV0b09wZW4pCiAgICAgICAgICByZXR1cm4gQjIzKG5ldyBDMTYuRGF0YWJhc2VDbG9zZWQoKSk7CiAgICAgICAgdDQub3BlbigpLmNhdGNoKFIyNSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHQ0Ll9zdGF0ZS5kYlJlYWR5UHJvbWlzZS50aGVuKCgpID0+IE50Nyh0NCwgZTUsIG44LCByMykpOwogICAgfSBlbHNlIHsKICAgICAgdmFyIGk0ID0gdDQuX2NyZWF0ZVRyYW5zYWN0aW9uKGU1LCBuOCwgdDQuX2RiU2NoZW1hKTsKICAgICAgdHJ5IHsKICAgICAgICBpNC5jcmVhdGUoKSwgdDQuX3N0YXRlLlBSMTM5OF9tYXhMb29wID0gMzsKICAgICAgfSBjYXRjaCAoczgpIHsKICAgICAgICByZXR1cm4gczgubmFtZSA9PT0gcm40LkludmFsaWRTdGF0ZSAmJiB0NC5pc09wZW4oKSAmJiAtLXQ0Ll9zdGF0ZS5QUjEzOThfbWF4TG9vcCA+IDAgPyAoY29uc29sZS53YXJuKCJEZXhpZTogTmVlZCB0byByZW9wZW4gZGIiKSwgdDQuX2Nsb3NlKCksIHQ0Lm9wZW4oKS50aGVuKCgpID0+IE50Nyh0NCwgZTUsIG44LCByMykpKSA6IEIyMyhzOCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGk0Ll9wcm9taXNlKGU1LCAoczgsIG80KSA9PiBsZTE0KCgpID0+IChBMTkudHJhbnMgPSBpNCwgcjMoczgsIG80LCBpNCkpKSkudGhlbigoczgpID0+IGk0Ll9jb21wbGV0aW9uLnRoZW4oKCkgPT4gczgpKTsKICAgIH0KICB9CiAgdmFyIGJuMyA9ICIzLjIuMiI7CiAgdmFyIGRlMTIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1NTM1KTsKICB2YXIganQ0ID0gLTEgLyAwOwogIHZhciBKMTMgPSAiSW52YWxpZCBrZXkgcHJvdmlkZWQuIEtleXMgbXVzdCBiZSBvZiB0eXBlIHN0cmluZywgbnVtYmVyLCBEYXRlIG9yIEFycmF5PHN0cmluZyB8IG51bWJlciB8IERhdGU+LiI7CiAgdmFyIFFuMyA9ICJTdHJpbmcgZXhwZWN0ZWQuIjsKICB2YXIga2UxNSA9IFtdOwogIHZhciBndDExID0gdHlwZW9mIG5hdmlnYXRvciA8ICJ1IiAmJiAvKE1TSUV8VHJpZGVudHxFZGdlKS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICB2YXIgRnIyID0gZ3QxMTsKICB2YXIgTnIgPSBndDExOwogIHZhciBHbjQgPSAodDQpID0+ICEvKGRleGllXC5qc3xkZXhpZVwubWluXC5qcykvLnRlc3QodDQpOwogIHZhciB2dDkgPSAiX19kYm5hbWVzIjsKICB2YXIgYnQ2ID0gInJlYWRvbmx5IjsKICB2YXIgeHQxMiA9ICJyZWFkd3JpdGUiOwogIGZ1bmN0aW9uIGdlMTModDQsIGU1KSB7CiAgICByZXR1cm4gdDQgPyBlNSA/IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdDQuYXBwbHkodGhpcywgYXJndW1lbnRzKSAmJiBlNS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfSA6IHQ0IDogZTU7CiAgfQogIHZhciBxbjMgPSB7IHR5cGU6IDMsIGxvd2VyOiAtMSAvIDAsIGxvd2VyT3BlbjogZmFsc2UsIHVwcGVyOiBbW11dLCB1cHBlck9wZW46IGZhbHNlIH07CiAgZnVuY3Rpb24gUWU1KHQ0KSB7CiAgICByZXR1cm4gdHlwZW9mIHQ0ID09ICJzdHJpbmciICYmICEvXC4vLnRlc3QodDQpID8gKGU1KSA9PiAoZTVbdDRdID09PSB2b2lkIDAgJiYgdDQgaW4gZTUgJiYgKGU1ID0gJGUxMShlNSksIGRlbGV0ZSBlNVt0NF0pLCBlNSkgOiAoZTUpID0+IGU1OwogIH0KICB2YXIgVnQxMSA9IGNsYXNzIHsKICAgIF90cmFucyhlNSwgbjgsIHIzKSB7CiAgICAgIGxldCBpNCA9IHRoaXMuX3R4IHx8IEExOS50cmFucywgczggPSB0aGlzLm5hbWU7CiAgICAgIGZ1bmN0aW9uIG80KHUxMSwgbDcsIGgxMCkgewogICAgICAgIGlmICghaDEwLnNjaGVtYVtzOF0pCiAgICAgICAgICB0aHJvdyBuZXcgQzE2Lk5vdEZvdW5kKCJUYWJsZSAiICsgczggKyAiIG5vdCBwYXJ0IG9mIHRyYW5zYWN0aW9uIik7CiAgICAgICAgcmV0dXJuIG44KGgxMC5pZGJ0cmFucywgaDEwKTsKICAgICAgfQogICAgICBsZXQgYTQgPSBVZTgoKTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gaTQgJiYgaTQuZGIgPT09IHRoaXMuZGIgPyBpNCA9PT0gQTE5LnRyYW5zID8gaTQuX3Byb21pc2UoZTUsIG80LCByMykgOiBsZTE0KCgpID0+IGk0Ll9wcm9taXNlKGU1LCBvNCwgcjMpLCB7IHRyYW5zOiBpNCwgdHJhbnNsZXNzOiBBMTkudHJhbnNsZXNzIHx8IEExOSB9KSA6IE50Nyh0aGlzLmRiLCBlNSwgW3RoaXMubmFtZV0sIG80KTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBhNCAmJiBXZTEwKCk7CiAgICAgIH0KICAgIH0KICAgIGdldChlNSwgbjgpIHsKICAgICAgcmV0dXJuIGU1ICYmIGU1LmNvbnN0cnVjdG9yID09PSBPYmplY3QgPyB0aGlzLndoZXJlKGU1KS5maXJzdChuOCkgOiB0aGlzLl90cmFucygicmVhZG9ubHkiLCAocjMpID0+IHRoaXMuY29yZS5nZXQoeyB0cmFuczogcjMsIGtleTogZTUgfSkudGhlbigoaTQpID0+IHRoaXMuaG9vay5yZWFkaW5nLmZpcmUoaTQpKSkudGhlbihuOCk7CiAgICB9CiAgICB3aGVyZShlNSkgewogICAgICBpZiAodHlwZW9mIGU1ID09ICJzdHJpbmciKQogICAgICAgIHJldHVybiBuZXcgdGhpcy5kYi5XaGVyZUNsYXVzZSh0aGlzLCBlNSk7CiAgICAgIGlmIChqMTgoZTUpKQogICAgICAgIHJldHVybiBuZXcgdGhpcy5kYi5XaGVyZUNsYXVzZSh0aGlzLCBgWyR7ZTUuam9pbigiKyIpfV1gKTsKICAgICAgbGV0IG44ID0gTTI0KGU1KTsKICAgICAgaWYgKG44Lmxlbmd0aCA9PT0gMSkKICAgICAgICByZXR1cm4gdGhpcy53aGVyZShuOFswXSkuZXF1YWxzKGU1W244WzBdXSk7CiAgICAgIGxldCByMyA9IHRoaXMuc2NoZW1hLmluZGV4ZXMuY29uY2F0KHRoaXMuc2NoZW1hLnByaW1LZXkpLmZpbHRlcigobDcpID0+IGw3LmNvbXBvdW5kICYmIG44LmV2ZXJ5KChoMTApID0+IGw3LmtleVBhdGguaW5kZXhPZihoMTApID49IDApICYmIGw3LmtleVBhdGguZXZlcnkoKGgxMCkgPT4gbjguaW5kZXhPZihoMTApID49IDApKVswXTsKICAgICAgaWYgKHIzICYmIHRoaXMuZGIuX21heEtleSAhPT0gZGUxMikKICAgICAgICByZXR1cm4gdGhpcy53aGVyZShyMy5uYW1lKS5lcXVhbHMocjMua2V5UGF0aC5tYXAoKGw3KSA9PiBlNVtsN10pKTsKICAgICAgIXIzICYmIHExOSAmJiBjb25zb2xlLndhcm4oYFRoZSBxdWVyeSAke0pTT04uc3RyaW5naWZ5KGU1KX0gb24gJHt0aGlzLm5hbWV9IHdvdWxkIGJlbmVmaXQgb2YgYSBjb21wb3VuZCBpbmRleCBbJHtuOC5qb2luKCIrIil9XWApOwogICAgICBsZXQgeyBpZHhCeU5hbWU6IGk0IH0gPSB0aGlzLnNjaGVtYSwgczggPSB0aGlzLmRiLl9kZXBzLmluZGV4ZWREQjsKICAgICAgZnVuY3Rpb24gbzQobDcsIGgxMCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXR1cm4gczguY21wKGw3LCBoMTApID09PSAwOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgW2E0LCB1MTFdID0gbjgucmVkdWNlKChbbDcsIGgxMF0sIGQxNSkgPT4gewogICAgICAgIGxldCBjMTcgPSBpNFtkMTVdLCBmMTEgPSBlNVtkMTVdOwogICAgICAgIHJldHVybiBbbDcgfHwgYzE3LCBsNyB8fCAhYzE3ID8gZ2UxMyhoMTAsIGMxNyAmJiBjMTcubXVsdGkgPyAoZzEyKSA9PiB7CiAgICAgICAgICBsZXQgcDE4ID0gbmUxNChnMTIsIGQxNSk7CiAgICAgICAgICByZXR1cm4gajE4KHAxOCkgJiYgcDE4LnNvbWUoKHYxNSkgPT4gbzQoZjExLCB2MTUpKTsKICAgICAgICB9IDogKGcxMikgPT4gbzQoZjExLCBuZTE0KGcxMiwgZDE1KSkpIDogaDEwXTsKICAgICAgfSwgW251bGwsIG51bGxdKTsKICAgICAgcmV0dXJuIGE0ID8gdGhpcy53aGVyZShhNC5uYW1lKS5lcXVhbHMoZTVbYTQua2V5UGF0aF0pLmZpbHRlcih1MTEpIDogcjMgPyB0aGlzLmZpbHRlcih1MTEpIDogdGhpcy53aGVyZShuOCkuZXF1YWxzKCIiKTsKICAgIH0KICAgIGZpbHRlcihlNSkgewogICAgICByZXR1cm4gdGhpcy50b0NvbGxlY3Rpb24oKS5hbmQoZTUpOwogICAgfQogICAgY291bnQoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMudG9Db2xsZWN0aW9uKCkuY291bnQoZTUpOwogICAgfQogICAgb2Zmc2V0KGU1KSB7CiAgICAgIHJldHVybiB0aGlzLnRvQ29sbGVjdGlvbigpLm9mZnNldChlNSk7CiAgICB9CiAgICBsaW1pdChlNSkgewogICAgICByZXR1cm4gdGhpcy50b0NvbGxlY3Rpb24oKS5saW1pdChlNSk7CiAgICB9CiAgICBlYWNoKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLnRvQ29sbGVjdGlvbigpLmVhY2goZTUpOwogICAgfQogICAgdG9BcnJheShlNSkgewogICAgICByZXR1cm4gdGhpcy50b0NvbGxlY3Rpb24oKS50b0FycmF5KGU1KTsKICAgIH0KICAgIHRvQ29sbGVjdGlvbigpIHsKICAgICAgcmV0dXJuIG5ldyB0aGlzLmRiLkNvbGxlY3Rpb24obmV3IHRoaXMuZGIuV2hlcmVDbGF1c2UodGhpcykpOwogICAgfQogICAgb3JkZXJCeShlNSkgewogICAgICByZXR1cm4gbmV3IHRoaXMuZGIuQ29sbGVjdGlvbihuZXcgdGhpcy5kYi5XaGVyZUNsYXVzZSh0aGlzLCBqMTgoZTUpID8gYFske2U1LmpvaW4oIisiKX1dYCA6IGU1KSk7CiAgICB9CiAgICByZXZlcnNlKCkgewogICAgICByZXR1cm4gdGhpcy50b0NvbGxlY3Rpb24oKS5yZXZlcnNlKCk7CiAgICB9CiAgICBtYXBUb0NsYXNzKGU1KSB7CiAgICAgIHRoaXMuc2NoZW1hLm1hcHBlZENsYXNzID0gZTU7CiAgICAgIGxldCBuOCA9IChyMykgPT4gewogICAgICAgIGlmICghcjMpCiAgICAgICAgICByZXR1cm4gcjM7CiAgICAgICAgbGV0IGk0ID0gT2JqZWN0LmNyZWF0ZShlNS5wcm90b3R5cGUpOwogICAgICAgIGZvciAodmFyIHM4IGluIHIzKQogICAgICAgICAgaWYgKFcxNyhyMywgczgpKQogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGk0W3M4XSA9IHIzW3M4XTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICByZXR1cm4gaTQ7CiAgICAgIH07CiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5yZWFkSG9vayAmJiB0aGlzLmhvb2sucmVhZGluZy51bnN1YnNjcmliZSh0aGlzLnNjaGVtYS5yZWFkSG9vayksIHRoaXMuc2NoZW1hLnJlYWRIb29rID0gbjgsIHRoaXMuaG9vaygicmVhZGluZyIsIG44KSwgZTU7CiAgICB9CiAgICBkZWZpbmVDbGFzcygpIHsKICAgICAgZnVuY3Rpb24gZTUobjgpIHsKICAgICAgICBMMjEodGhpcywgbjgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLm1hcFRvQ2xhc3MoZTUpOwogICAgfQogICAgYWRkKGU1LCBuOCkgewogICAgICBsZXQgeyBhdXRvOiByMywga2V5UGF0aDogaTQgfSA9IHRoaXMuc2NoZW1hLnByaW1LZXksIHM4ID0gZTU7CiAgICAgIHJldHVybiBpNCAmJiByMyAmJiAoczggPSBRZTUoaTQpKGU1KSksIHRoaXMuX3RyYW5zKCJyZWFkd3JpdGUiLCAobzQpID0+IHRoaXMuY29yZS5tdXRhdGUoeyB0cmFuczogbzQsIHR5cGU6ICJhZGQiLCBrZXlzOiBuOCAhPSBudWxsID8gW244XSA6IG51bGwsIHZhbHVlczogW3M4XSB9KSkudGhlbigobzQpID0+IG80Lm51bUZhaWx1cmVzID8gYjI0LnJlamVjdChvNC5mYWlsdXJlc1swXSkgOiBvNC5sYXN0UmVzdWx0KS50aGVuKChvNCkgPT4gewogICAgICAgIGlmIChpNCkKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIFExNihlNSwgaTQsIG80KTsKICAgICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgfQogICAgICAgIHJldHVybiBvNDsKICAgICAgfSk7CiAgICB9CiAgICB1cGRhdGUoZTUsIG44KSB7CiAgICAgIGlmICh0eXBlb2YgZTUgPT0gIm9iamVjdCIgJiYgIWoxOChlNSkpIHsKICAgICAgICBsZXQgcjMgPSBuZTE0KGU1LCB0aGlzLnNjaGVtYS5wcmltS2V5LmtleVBhdGgpOwogICAgICAgIGlmIChyMyA9PT0gdm9pZCAwKQogICAgICAgICAgcmV0dXJuIEIyMyhuZXcgQzE2LkludmFsaWRBcmd1bWVudCgiR2l2ZW4gb2JqZWN0IGRvZXMgbm90IGNvbnRhaW4gaXRzIHByaW1hcnkga2V5IikpOwogICAgICAgIHRyeSB7CiAgICAgICAgICB0eXBlb2YgbjggIT0gImZ1bmN0aW9uIiA/IE0yNChuOCkuZm9yRWFjaCgoaTQpID0+IHsKICAgICAgICAgICAgUTE2KGU1LCBpNCwgbjhbaTRdKTsKICAgICAgICAgIH0pIDogbjgoZTUsIHsgdmFsdWU6IGU1LCBwcmltS2V5OiByMyB9KTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMud2hlcmUoIjppZCIpLmVxdWFscyhyMykubW9kaWZ5KG44KTsKICAgICAgfSBlbHNlCiAgICAgICAgcmV0dXJuIHRoaXMud2hlcmUoIjppZCIpLmVxdWFscyhlNSkubW9kaWZ5KG44KTsKICAgIH0KICAgIHB1dChlNSwgbjgpIHsKICAgICAgbGV0IHsgYXV0bzogcjMsIGtleVBhdGg6IGk0IH0gPSB0aGlzLnNjaGVtYS5wcmltS2V5LCBzOCA9IGU1OwogICAgICByZXR1cm4gaTQgJiYgcjMgJiYgKHM4ID0gUWU1KGk0KShlNSkpLCB0aGlzLl90cmFucygicmVhZHdyaXRlIiwgKG80KSA9PiB0aGlzLmNvcmUubXV0YXRlKHsgdHJhbnM6IG80LCB0eXBlOiAicHV0IiwgdmFsdWVzOiBbczhdLCBrZXlzOiBuOCAhPSBudWxsID8gW244XSA6IG51bGwgfSkpLnRoZW4oKG80KSA9PiBvNC5udW1GYWlsdXJlcyA/IGIyNC5yZWplY3QobzQuZmFpbHVyZXNbMF0pIDogbzQubGFzdFJlc3VsdCkudGhlbigobzQpID0+IHsKICAgICAgICBpZiAoaTQpCiAgICAgICAgICB0cnkgewogICAgICAgICAgICBRMTYoZTUsIGk0LCBvNCk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gbzQ7CiAgICAgIH0pOwogICAgfQogICAgZGVsZXRlKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLl90cmFucygicmVhZHdyaXRlIiwgKG44KSA9PiB0aGlzLmNvcmUubXV0YXRlKHsgdHJhbnM6IG44LCB0eXBlOiAiZGVsZXRlIiwga2V5czogW2U1XSB9KSkudGhlbigobjgpID0+IG44Lm51bUZhaWx1cmVzID8gYjI0LnJlamVjdChuOC5mYWlsdXJlc1swXSkgOiB2b2lkIDApOwogICAgfQogICAgY2xlYXIoKSB7CiAgICAgIHJldHVybiB0aGlzLl90cmFucygicmVhZHdyaXRlIiwgKGU1KSA9PiB0aGlzLmNvcmUubXV0YXRlKHsgdHJhbnM6IGU1LCB0eXBlOiAiZGVsZXRlUmFuZ2UiLCByYW5nZTogcW4zIH0pKS50aGVuKChlNSkgPT4gZTUubnVtRmFpbHVyZXMgPyBiMjQucmVqZWN0KGU1LmZhaWx1cmVzWzBdKSA6IHZvaWQgMCk7CiAgICB9CiAgICBidWxrR2V0KGU1KSB7CiAgICAgIHJldHVybiB0aGlzLl90cmFucygicmVhZG9ubHkiLCAobjgpID0+IHRoaXMuY29yZS5nZXRNYW55KHsga2V5czogZTUsIHRyYW5zOiBuOCB9KS50aGVuKChyMykgPT4gcjMubWFwKChpNCkgPT4gdGhpcy5ob29rLnJlYWRpbmcuZmlyZShpNCkpKSk7CiAgICB9CiAgICBidWxrQWRkKGU1LCBuOCwgcjMpIHsKICAgICAgbGV0IGk0ID0gQXJyYXkuaXNBcnJheShuOCkgPyBuOCA6IHZvaWQgMDsKICAgICAgcjMgPSByMyB8fCAoaTQgPyB2b2lkIDAgOiBuOCk7CiAgICAgIGxldCBzOCA9IHIzID8gcjMuYWxsS2V5cyA6IHZvaWQgMDsKICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zKCJyZWFkd3JpdGUiLCAobzQpID0+IHsKICAgICAgICBsZXQgeyBhdXRvOiBhNCwga2V5UGF0aDogdTExIH0gPSB0aGlzLnNjaGVtYS5wcmltS2V5OwogICAgICAgIGlmICh1MTEgJiYgaTQpCiAgICAgICAgICB0aHJvdyBuZXcgQzE2LkludmFsaWRBcmd1bWVudCgiYnVsa0FkZCgpOiBrZXlzIGFyZ3VtZW50IGludmFsaWQgb24gdGFibGVzIHdpdGggaW5ib3VuZCBrZXlzIik7CiAgICAgICAgaWYgKGk0ICYmIGk0Lmxlbmd0aCAhPT0gZTUubGVuZ3RoKQogICAgICAgICAgdGhyb3cgbmV3IEMxNi5JbnZhbGlkQXJndW1lbnQoIkFyZ3VtZW50cyBvYmplY3RzIGFuZCBrZXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgiKTsKICAgICAgICBsZXQgbDcgPSBlNS5sZW5ndGgsIGgxMCA9IHUxMSAmJiBhNCA/IGU1Lm1hcChRZTUodTExKSkgOiBlNTsKICAgICAgICByZXR1cm4gdGhpcy5jb3JlLm11dGF0ZSh7IHRyYW5zOiBvNCwgdHlwZTogImFkZCIsIGtleXM6IGk0LCB2YWx1ZXM6IGgxMCwgd2FudFJlc3VsdHM6IHM4IH0pLnRoZW4oKHsgbnVtRmFpbHVyZXM6IGQxNSwgcmVzdWx0czogYzE3LCBsYXN0UmVzdWx0OiBmMTEsIGZhaWx1cmVzOiBnMTIgfSkgPT4gewogICAgICAgICAgbGV0IHAxOCA9IHM4ID8gYzE3IDogZjExOwogICAgICAgICAgaWYgKGQxNSA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuIHAxODsKICAgICAgICAgIHRocm93IG5ldyBQZTE0KGAke3RoaXMubmFtZX0uYnVsa0FkZCgpOiAke2QxNX0gb2YgJHtsN30gb3BlcmF0aW9ucyBmYWlsZWRgLCBnMTIpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0KICAgIGJ1bGtQdXQoZTUsIG44LCByMykgewogICAgICBsZXQgaTQgPSBBcnJheS5pc0FycmF5KG44KSA/IG44IDogdm9pZCAwOwogICAgICByMyA9IHIzIHx8IChpNCA/IHZvaWQgMCA6IG44KTsKICAgICAgbGV0IHM4ID0gcjMgPyByMy5hbGxLZXlzIDogdm9pZCAwOwogICAgICByZXR1cm4gdGhpcy5fdHJhbnMoInJlYWR3cml0ZSIsIChvNCkgPT4gewogICAgICAgIGxldCB7IGF1dG86IGE0LCBrZXlQYXRoOiB1MTEgfSA9IHRoaXMuc2NoZW1hLnByaW1LZXk7CiAgICAgICAgaWYgKHUxMSAmJiBpNCkKICAgICAgICAgIHRocm93IG5ldyBDMTYuSW52YWxpZEFyZ3VtZW50KCJidWxrUHV0KCk6IGtleXMgYXJndW1lbnQgaW52YWxpZCBvbiB0YWJsZXMgd2l0aCBpbmJvdW5kIGtleXMiKTsKICAgICAgICBpZiAoaTQgJiYgaTQubGVuZ3RoICE9PSBlNS5sZW5ndGgpCiAgICAgICAgICB0aHJvdyBuZXcgQzE2LkludmFsaWRBcmd1bWVudCgiQXJndW1lbnRzIG9iamVjdHMgYW5kIGtleXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIGxldCBsNyA9IGU1Lmxlbmd0aCwgaDEwID0gdTExICYmIGE0ID8gZTUubWFwKFFlNSh1MTEpKSA6IGU1OwogICAgICAgIHJldHVybiB0aGlzLmNvcmUubXV0YXRlKHsgdHJhbnM6IG80LCB0eXBlOiAicHV0Iiwga2V5czogaTQsIHZhbHVlczogaDEwLCB3YW50UmVzdWx0czogczggfSkudGhlbigoeyBudW1GYWlsdXJlczogZDE1LCByZXN1bHRzOiBjMTcsIGxhc3RSZXN1bHQ6IGYxMSwgZmFpbHVyZXM6IGcxMiB9KSA9PiB7CiAgICAgICAgICBsZXQgcDE4ID0gczggPyBjMTcgOiBmMTE7CiAgICAgICAgICBpZiAoZDE1ID09PSAwKQogICAgICAgICAgICByZXR1cm4gcDE4OwogICAgICAgICAgdGhyb3cgbmV3IFBlMTQoYCR7dGhpcy5uYW1lfS5idWxrUHV0KCk6ICR7ZDE1fSBvZiAke2w3fSBvcGVyYXRpb25zIGZhaWxlZGAsIGcxMik7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogICAgYnVsa0RlbGV0ZShlNSkgewogICAgICBsZXQgbjggPSBlNS5sZW5ndGg7CiAgICAgIHJldHVybiB0aGlzLl90cmFucygicmVhZHdyaXRlIiwgKHIzKSA9PiB0aGlzLmNvcmUubXV0YXRlKHsgdHJhbnM6IHIzLCB0eXBlOiAiZGVsZXRlIiwga2V5czogZTUgfSkpLnRoZW4oKHsgbnVtRmFpbHVyZXM6IHIzLCBsYXN0UmVzdWx0OiBpNCwgZmFpbHVyZXM6IHM4IH0pID0+IHsKICAgICAgICBpZiAocjMgPT09IDApCiAgICAgICAgICByZXR1cm4gaTQ7CiAgICAgICAgdGhyb3cgbmV3IFBlMTQoYCR7dGhpcy5uYW1lfS5idWxrRGVsZXRlKCk6ICR7cjN9IG9mICR7bjh9IG9wZXJhdGlvbnMgZmFpbGVkYCwgczgpOwogICAgICB9KTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEhlNih0NCkgewogICAgdmFyIGU1ID0ge30sIG44ID0gZnVuY3Rpb24oYTQsIHUxMSkgewogICAgICBpZiAodTExKSB7CiAgICAgICAgZm9yICh2YXIgbDcgPSBhcmd1bWVudHMubGVuZ3RoLCBoMTAgPSBuZXcgQXJyYXkobDcgLSAxKTsgLS1sNzsgKQogICAgICAgICAgaDEwW2w3IC0gMV0gPSBhcmd1bWVudHNbbDddOwogICAgICAgIHJldHVybiBlNVthNF0uc3Vic2NyaWJlLmFwcGx5KG51bGwsIGgxMCksIHQ0OwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhNCA9PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gZTVbYTRdOwogICAgfTsKICAgIG44LmFkZEV2ZW50VHlwZSA9IHM4OwogICAgZm9yICh2YXIgcjMgPSAxLCBpNCA9IGFyZ3VtZW50cy5sZW5ndGg7IHIzIDwgaTQ7ICsrcjMpCiAgICAgIHM4KGFyZ3VtZW50c1tyM10pOwogICAgcmV0dXJuIG44OwogICAgZnVuY3Rpb24gczgoYTQsIHUxMSwgbDcpIHsKICAgICAgaWYgKHR5cGVvZiBhNCA9PSAib2JqZWN0IikKICAgICAgICByZXR1cm4gbzQoYTQpOwogICAgICB1MTEgfHwgKHUxMSA9IEFyMiksIGw3IHx8IChsNyA9IFIyNSk7CiAgICAgIHZhciBoMTAgPSB7IHN1YnNjcmliZXJzOiBbXSwgZmlyZTogbDcsIHN1YnNjcmliZTogZnVuY3Rpb24oZDE1KSB7CiAgICAgICAgaDEwLnN1YnNjcmliZXJzLmluZGV4T2YoZDE1KSA9PT0gLTEgJiYgKGgxMC5zdWJzY3JpYmVycy5wdXNoKGQxNSksIGgxMC5maXJlID0gdTExKGgxMC5maXJlLCBkMTUpKTsKICAgICAgfSwgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uKGQxNSkgewogICAgICAgIGgxMC5zdWJzY3JpYmVycyA9IGgxMC5zdWJzY3JpYmVycy5maWx0ZXIoZnVuY3Rpb24oYzE3KSB7CiAgICAgICAgICByZXR1cm4gYzE3ICE9PSBkMTU7CiAgICAgICAgfSksIGgxMC5maXJlID0gaDEwLnN1YnNjcmliZXJzLnJlZHVjZSh1MTEsIGw3KTsKICAgICAgfSB9OwogICAgICByZXR1cm4gZTVbYTRdID0gbjhbYTRdID0gaDEwLCBoMTA7CiAgICB9CiAgICBmdW5jdGlvbiBvNChhNCkgewogICAgICBNMjQoYTQpLmZvckVhY2goZnVuY3Rpb24odTExKSB7CiAgICAgICAgdmFyIGw3ID0gYTRbdTExXTsKICAgICAgICBpZiAoajE4KGw3KSkKICAgICAgICAgIHM4KHUxMSwgYTRbdTExXVswXSwgYTRbdTExXVsxXSk7CiAgICAgICAgZWxzZSBpZiAobDcgPT09ICJhc2FwIikKICAgICAgICAgIHZhciBoMTAgPSBzOCh1MTEsIHplOCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvciAodmFyIGMxNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGYxMSA9IG5ldyBBcnJheShjMTcpOyBjMTctLTsgKQogICAgICAgICAgICAgIGYxMVtjMTddID0gYXJndW1lbnRzW2MxN107CiAgICAgICAgICAgIGgxMC5zdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uKGcxMikgewogICAgICAgICAgICAgIFJuMyhmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGcxMi5hcHBseShudWxsLCBmMTEpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIGVsc2UKICAgICAgICAgIHRocm93IG5ldyBDMTYuSW52YWxpZEFyZ3VtZW50KCJJbnZhbGlkIGV2ZW50IGNvbmZpZyIpOwogICAgICB9KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gWWU4KHQ0LCBlNSkgewogICAgcmV0dXJuIEFlMTcoZTUpLmZyb20oeyBwcm90b3R5cGU6IHQ0IH0pLCBlNTsKICB9CiAgZnVuY3Rpb24ganIodDQpIHsKICAgIHJldHVybiBZZTgoVnQxMS5wcm90b3R5cGUsIGZ1bmN0aW9uKG44LCByMywgaTQpIHsKICAgICAgdGhpcy5kYiA9IHQ0LCB0aGlzLl90eCA9IGk0LCB0aGlzLm5hbWUgPSBuOCwgdGhpcy5zY2hlbWEgPSByMywgdGhpcy5ob29rID0gdDQuX2FsbFRhYmxlc1tuOF0gPyB0NC5fYWxsVGFibGVzW244XS5ob29rIDogSGU2KG51bGwsIHsgY3JlYXRpbmc6IFt4cjIsIFIyNV0sIHJlYWRpbmc6IFticjIsIHplOF0sIHVwZGF0aW5nOiBbU3IyLCBSMjVdLCBkZWxldGluZzogW0VyMiwgUjI1XSB9KTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiB3ZTExKHQ0LCBlNSkgewogICAgcmV0dXJuICEodDQuZmlsdGVyIHx8IHQ0LmFsZ29yaXRobSB8fCB0NC5vcikgJiYgKGU1ID8gdDQuanVzdExpbWl0IDogIXQ0LnJlcGxheUZpbHRlcik7CiAgfQogIGZ1bmN0aW9uIEV0OSh0NCwgZTUpIHsKICAgIHQ0LmZpbHRlciA9IGdlMTModDQuZmlsdGVyLCBlNSk7CiAgfQogIGZ1bmN0aW9uIFN0OSh0NCwgZTUsIG44KSB7CiAgICB2YXIgcjMgPSB0NC5yZXBsYXlGaWx0ZXI7CiAgICB0NC5yZXBsYXlGaWx0ZXIgPSByMyA/ICgpID0+IGdlMTMocjMoKSwgZTUoKSkgOiBlNSwgdDQuanVzdExpbWl0ID0gbjggJiYgIXIzOwogIH0KICBmdW5jdGlvbiBWcih0NCwgZTUpIHsKICAgIHQ0LmlzTWF0Y2ggPSBnZTEzKHQ0LmlzTWF0Y2gsIGU1KTsKICB9CiAgZnVuY3Rpb24gaXQxMyh0NCwgZTUpIHsKICAgIGlmICh0NC5pc1ByaW1LZXkpCiAgICAgIHJldHVybiBlNS5wcmltYXJ5S2V5OwogICAgbGV0IG44ID0gZTUuZ2V0SW5kZXhCeUtleVBhdGgodDQuaW5kZXgpOwogICAgaWYgKCFuOCkKICAgICAgdGhyb3cgbmV3IEMxNi5TY2hlbWEoIktleVBhdGggIiArIHQ0LmluZGV4ICsgIiBvbiBvYmplY3Qgc3RvcmUgIiArIGU1Lm5hbWUgKyAiIGlzIG5vdCBpbmRleGVkIik7CiAgICByZXR1cm4gbjg7CiAgfQogIGZ1bmN0aW9uIHhuMyh0NCwgZTUsIG44KSB7CiAgICBsZXQgcjMgPSBpdDEzKHQ0LCBlNS5zY2hlbWEpOwogICAgcmV0dXJuIGU1Lm9wZW5DdXJzb3IoeyB0cmFuczogbjgsIHZhbHVlczogIXQ0LmtleXNPbmx5LCByZXZlcnNlOiB0NC5kaXIgPT09ICJwcmV2IiwgdW5pcXVlOiAhIXQ0LnVuaXF1ZSwgcXVlcnk6IHsgaW5kZXg6IHIzLCByYW5nZTogdDQucmFuZ2UgfSB9KTsKICB9CiAgZnVuY3Rpb24gR2U3KHQ0LCBlNSwgbjgsIHIzKSB7CiAgICBsZXQgaTQgPSB0NC5yZXBsYXlGaWx0ZXIgPyBnZTEzKHQ0LmZpbHRlciwgdDQucmVwbGF5RmlsdGVyKCkpIDogdDQuZmlsdGVyOwogICAgaWYgKHQ0Lm9yKSB7CiAgICAgIGxldCBzOCA9IHt9LCBvNCA9IChhNCwgdTExLCBsNykgPT4gewogICAgICAgIGlmICghaTQgfHwgaTQodTExLCBsNywgKGMxNykgPT4gdTExLnN0b3AoYzE3KSwgKGMxNykgPT4gdTExLmZhaWwoYzE3KSkpIHsKICAgICAgICAgIHZhciBoMTAgPSB1MTEucHJpbWFyeUtleSwgZDE1ID0gIiIgKyBoMTA7CiAgICAgICAgICBkMTUgPT09ICJbb2JqZWN0IEFycmF5QnVmZmVyXSIgJiYgKGQxNSA9ICIiICsgbmV3IFVpbnQ4QXJyYXkoaDEwKSksIFcxNyhzOCwgZDE1KSB8fCAoczhbZDE1XSA9IHRydWUsIGU1KGE0LCB1MTEsIGw3KSk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3Q0Lm9yLl9pdGVyYXRlKG80LCBuOCksIEVuMyh4bjModDQsIHIzLCBuOCksIHQ0LmFsZ29yaXRobSwgbzQsICF0NC5rZXlzT25seSAmJiB0NC52YWx1ZU1hcHBlcildKTsKICAgIH0gZWxzZQogICAgICByZXR1cm4gRW4zKHhuMyh0NCwgcjMsIG44KSwgZ2UxMyh0NC5hbGdvcml0aG0sIGk0KSwgZTUsICF0NC5rZXlzT25seSAmJiB0NC52YWx1ZU1hcHBlcik7CiAgfQogIGZ1bmN0aW9uIEVuMyh0NCwgZTUsIG44LCByMykgewogICAgdmFyIGk0ID0gcjMgPyAobzQsIGE0LCB1MTEpID0+IG44KHIzKG80KSwgYTQsIHUxMSkgOiBuOCwgczggPSBPMTQoaTQpOwogICAgcmV0dXJuIHQ0LnRoZW4oKG80KSA9PiB7CiAgICAgIGlmIChvNCkKICAgICAgICByZXR1cm4gbzQuc3RhcnQoKCkgPT4gewogICAgICAgICAgdmFyIGE0ID0gKCkgPT4gbzQuY29udGludWUoKTsKICAgICAgICAgICghZTUgfHwgZTUobzQsICh1MTEpID0+IGE0ID0gdTExLCAodTExKSA9PiB7CiAgICAgICAgICAgIG80LnN0b3AodTExKSwgYTQgPSBSMjU7CiAgICAgICAgICB9LCAodTExKSA9PiB7CiAgICAgICAgICAgIG80LmZhaWwodTExKSwgYTQgPSBSMjU7CiAgICAgICAgICB9KSkgJiYgczgobzQudmFsdWUsIG80LCAodTExKSA9PiBhNCA9IHUxMSksIGE0KCk7CiAgICAgICAgfSk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gVjIwKHQ0LCBlNSkgewogICAgdHJ5IHsKICAgICAgbGV0IG44ID0gU24zKHQ0KSwgcjMgPSBTbjMoZTUpOwogICAgICBpZiAobjggIT09IHIzKQogICAgICAgIHJldHVybiBuOCA9PT0gIkFycmF5IiA/IDEgOiByMyA9PT0gIkFycmF5IiA/IC0xIDogbjggPT09ICJiaW5hcnkiID8gMSA6IHIzID09PSAiYmluYXJ5IiA/IC0xIDogbjggPT09ICJzdHJpbmciID8gMSA6IHIzID09PSAic3RyaW5nIiA/IC0xIDogbjggPT09ICJEYXRlIiA/IDEgOiByMyAhPT0gIkRhdGUiID8gTmFOIDogLTE7CiAgICAgIHN3aXRjaCAobjgpIHsKICAgICAgICBjYXNlICJudW1iZXIiOgogICAgICAgIGNhc2UgIkRhdGUiOgogICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICByZXR1cm4gdDQgPiBlNSA/IDEgOiB0NCA8IGU1ID8gLTEgOiAwOwogICAgICAgIGNhc2UgImJpbmFyeSI6CiAgICAgICAgICByZXR1cm4gJHIyKEFuMyh0NCksIEFuMyhlNSkpOwogICAgICAgIGNhc2UgIkFycmF5IjoKICAgICAgICAgIHJldHVybiBMcjIodDQsIGU1KTsKICAgICAgfQogICAgfSBjYXRjaCB7CiAgICB9CiAgICByZXR1cm4gTmFOOwogIH0KICBmdW5jdGlvbiBMcjIodDQsIGU1KSB7CiAgICBsZXQgbjggPSB0NC5sZW5ndGgsIHIzID0gZTUubGVuZ3RoLCBpNCA9IG44IDwgcjMgPyBuOCA6IHIzOwogICAgZm9yIChsZXQgczggPSAwOyBzOCA8IGk0OyArK3M4KSB7CiAgICAgIGxldCBvNCA9IFYyMCh0NFtzOF0sIGU1W3M4XSk7CiAgICAgIGlmIChvNCAhPT0gMCkKICAgICAgICByZXR1cm4gbzQ7CiAgICB9CiAgICByZXR1cm4gbjggPT09IHIzID8gMCA6IG44IDwgcjMgPyAtMSA6IDE7CiAgfQogIGZ1bmN0aW9uICRyMih0NCwgZTUpIHsKICAgIGxldCBuOCA9IHQ0Lmxlbmd0aCwgcjMgPSBlNS5sZW5ndGgsIGk0ID0gbjggPCByMyA/IG44IDogcjM7CiAgICBmb3IgKGxldCBzOCA9IDA7IHM4IDwgaTQ7ICsrczgpCiAgICAgIGlmICh0NFtzOF0gIT09IGU1W3M4XSkKICAgICAgICByZXR1cm4gdDRbczhdIDwgZTVbczhdID8gLTEgOiAxOwogICAgcmV0dXJuIG44ID09PSByMyA/IDAgOiBuOCA8IHIzID8gLTEgOiAxOwogIH0KICBmdW5jdGlvbiBTbjModDQpIHsKICAgIGxldCBlNSA9IHR5cGVvZiB0NDsKICAgIGlmIChlNSAhPT0gIm9iamVjdCIpCiAgICAgIHJldHVybiBlNTsKICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodDQpKQogICAgICByZXR1cm4gImJpbmFyeSI7CiAgICBsZXQgbjggPSBLdDUodDQpOwogICAgcmV0dXJuIG44ID09PSAiQXJyYXlCdWZmZXIiID8gImJpbmFyeSIgOiBuODsKICB9CiAgZnVuY3Rpb24gQW4zKHQ0KSB7CiAgICByZXR1cm4gdDQgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gdDQgOiBBcnJheUJ1ZmZlci5pc1ZpZXcodDQpID8gbmV3IFVpbnQ4QXJyYXkodDQuYnVmZmVyLCB0NC5ieXRlT2Zmc2V0LCB0NC5ieXRlTGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KHQ0KTsKICB9CiAgdmFyIEx0MTEgPSBjbGFzcyB7CiAgICBfcmVhZChlNSwgbjgpIHsKICAgICAgdmFyIHIzID0gdGhpcy5fY3R4OwogICAgICByZXR1cm4gcjMuZXJyb3IgPyByMy50YWJsZS5fdHJhbnMobnVsbCwgQjIzLmJpbmQobnVsbCwgcjMuZXJyb3IpKSA6IHIzLnRhYmxlLl90cmFucygicmVhZG9ubHkiLCBlNSkudGhlbihuOCk7CiAgICB9CiAgICBfd3JpdGUoZTUpIHsKICAgICAgdmFyIG44ID0gdGhpcy5fY3R4OwogICAgICByZXR1cm4gbjguZXJyb3IgPyBuOC50YWJsZS5fdHJhbnMobnVsbCwgQjIzLmJpbmQobnVsbCwgbjguZXJyb3IpKSA6IG44LnRhYmxlLl90cmFucygicmVhZHdyaXRlIiwgZTUsICJsb2NrZWQiKTsKICAgIH0KICAgIF9hZGRBbGdvcml0aG0oZTUpIHsKICAgICAgdmFyIG44ID0gdGhpcy5fY3R4OwogICAgICBuOC5hbGdvcml0aG0gPSBnZTEzKG44LmFsZ29yaXRobSwgZTUpOwogICAgfQogICAgX2l0ZXJhdGUoZTUsIG44KSB7CiAgICAgIHJldHVybiBHZTcodGhpcy5fY3R4LCBlNSwgbjgsIHRoaXMuX2N0eC50YWJsZS5jb3JlKTsKICAgIH0KICAgIGNsb25lKGU1KSB7CiAgICAgIHZhciBuOCA9IE9iamVjdC5jcmVhdGUodGhpcy5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpLCByMyA9IE9iamVjdC5jcmVhdGUodGhpcy5fY3R4KTsKICAgICAgcmV0dXJuIGU1ICYmIEwyMShyMywgZTUpLCBuOC5fY3R4ID0gcjMsIG44OwogICAgfQogICAgcmF3KCkgewogICAgICByZXR1cm4gdGhpcy5fY3R4LnZhbHVlTWFwcGVyID0gbnVsbCwgdGhpczsKICAgIH0KICAgIGVhY2goZTUpIHsKICAgICAgdmFyIG44ID0gdGhpcy5fY3R4OwogICAgICByZXR1cm4gdGhpcy5fcmVhZCgocjMpID0+IEdlNyhuOCwgZTUsIHIzLCBuOC50YWJsZS5jb3JlKSk7CiAgICB9CiAgICBjb3VudChlNSkgewogICAgICByZXR1cm4gdGhpcy5fcmVhZCgobjgpID0+IHsKICAgICAgICBsZXQgcjMgPSB0aGlzLl9jdHgsIGk0ID0gcjMudGFibGUuY29yZTsKICAgICAgICBpZiAod2UxMShyMywgdHJ1ZSkpCiAgICAgICAgICByZXR1cm4gaTQuY291bnQoeyB0cmFuczogbjgsIHF1ZXJ5OiB7IGluZGV4OiBpdDEzKHIzLCBpNC5zY2hlbWEpLCByYW5nZTogcjMucmFuZ2UgfSB9KS50aGVuKChvNCkgPT4gTWF0aC5taW4obzQsIHIzLmxpbWl0KSk7CiAgICAgICAgdmFyIHM4ID0gMDsKICAgICAgICByZXR1cm4gR2U3KHIzLCAoKSA9PiAoKytzOCwgZmFsc2UpLCBuOCwgaTQpLnRoZW4oKCkgPT4gczgpOwogICAgICB9KS50aGVuKGU1KTsKICAgIH0KICAgIHNvcnRCeShlNSwgbjgpIHsKICAgICAgbGV0IHIzID0gZTUuc3BsaXQoIi4iKS5yZXZlcnNlKCksIGk0ID0gcjNbMF0sIHM4ID0gcjMubGVuZ3RoIC0gMTsKICAgICAgZnVuY3Rpb24gbzQobDcsIGgxMCkgewogICAgICAgIHJldHVybiBoMTAgPyBvNChsN1tyM1toMTBdXSwgaDEwIC0gMSkgOiBsN1tpNF07CiAgICAgIH0KICAgICAgdmFyIGE0ID0gdGhpcy5fY3R4LmRpciA9PT0gIm5leHQiID8gMSA6IC0xOwogICAgICBmdW5jdGlvbiB1MTEobDcsIGgxMCkgewogICAgICAgIHZhciBkMTUgPSBvNChsNywgczgpLCBjMTcgPSBvNChoMTAsIHM4KTsKICAgICAgICByZXR1cm4gZDE1IDwgYzE3ID8gLWE0IDogZDE1ID4gYzE3ID8gYTQgOiAwOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnRvQXJyYXkoZnVuY3Rpb24obDcpIHsKICAgICAgICByZXR1cm4gbDcuc29ydCh1MTEpOwogICAgICB9KS50aGVuKG44KTsKICAgIH0KICAgIHRvQXJyYXkoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMuX3JlYWQoKG44KSA9PiB7CiAgICAgICAgdmFyIHIzID0gdGhpcy5fY3R4OwogICAgICAgIGlmIChyMy5kaXIgPT09ICJuZXh0IiAmJiB3ZTExKHIzLCB0cnVlKSAmJiByMy5saW1pdCA+IDApIHsKICAgICAgICAgIGxldCB7IHZhbHVlTWFwcGVyOiBpNCB9ID0gcjMsIHM4ID0gaXQxMyhyMywgcjMudGFibGUuY29yZS5zY2hlbWEpOwogICAgICAgICAgcmV0dXJuIHIzLnRhYmxlLmNvcmUucXVlcnkoeyB0cmFuczogbjgsIGxpbWl0OiByMy5saW1pdCwgdmFsdWVzOiB0cnVlLCBxdWVyeTogeyBpbmRleDogczgsIHJhbmdlOiByMy5yYW5nZSB9IH0pLnRoZW4oKHsgcmVzdWx0OiBvNCB9KSA9PiBpNCA/IG80Lm1hcChpNCkgOiBvNCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxldCBpNCA9IFtdOwogICAgICAgICAgcmV0dXJuIEdlNyhyMywgKHM4KSA9PiBpNC5wdXNoKHM4KSwgbjgsIHIzLnRhYmxlLmNvcmUpLnRoZW4oKCkgPT4gaTQpOwogICAgICAgIH0KICAgICAgfSwgZTUpOwogICAgfQogICAgb2Zmc2V0KGU1KSB7CiAgICAgIHZhciBuOCA9IHRoaXMuX2N0eDsKICAgICAgcmV0dXJuIGU1IDw9IDAgPyB0aGlzIDogKG44Lm9mZnNldCArPSBlNSwgd2UxMShuOCkgPyBTdDkobjgsICgpID0+IHsKICAgICAgICB2YXIgcjMgPSBlNTsKICAgICAgICByZXR1cm4gKGk0LCBzOCkgPT4gcjMgPT09IDAgPyB0cnVlIDogcjMgPT09IDEgPyAoLS1yMywgZmFsc2UpIDogKHM4KCgpID0+IHsKICAgICAgICAgIGk0LmFkdmFuY2UocjMpLCByMyA9IDA7CiAgICAgICAgfSksIGZhbHNlKTsKICAgICAgfSkgOiBTdDkobjgsICgpID0+IHsKICAgICAgICB2YXIgcjMgPSBlNTsKICAgICAgICByZXR1cm4gKCkgPT4gLS1yMyA8IDA7CiAgICAgIH0pLCB0aGlzKTsKICAgIH0KICAgIGxpbWl0KGU1KSB7CiAgICAgIHJldHVybiB0aGlzLl9jdHgubGltaXQgPSBNYXRoLm1pbih0aGlzLl9jdHgubGltaXQsIGU1KSwgU3Q5KHRoaXMuX2N0eCwgKCkgPT4gewogICAgICAgIHZhciBuOCA9IGU1OwogICAgICAgIHJldHVybiBmdW5jdGlvbihyMywgaTQsIHM4KSB7CiAgICAgICAgICByZXR1cm4gLS1uOCA8PSAwICYmIGk0KHM4KSwgbjggPj0gMDsKICAgICAgICB9OwogICAgICB9LCB0cnVlKSwgdGhpczsKICAgIH0KICAgIHVudGlsKGU1LCBuOCkgewogICAgICByZXR1cm4gRXQ5KHRoaXMuX2N0eCwgZnVuY3Rpb24ocjMsIGk0LCBzOCkgewogICAgICAgIHJldHVybiBlNShyMy52YWx1ZSkgPyAoaTQoczgpLCBuOCkgOiB0cnVlOwogICAgICB9KSwgdGhpczsKICAgIH0KICAgIGZpcnN0KGU1KSB7CiAgICAgIHJldHVybiB0aGlzLmxpbWl0KDEpLnRvQXJyYXkoZnVuY3Rpb24objgpIHsKICAgICAgICByZXR1cm4gbjhbMF07CiAgICAgIH0pLnRoZW4oZTUpOwogICAgfQogICAgbGFzdChlNSkgewogICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmlyc3QoZTUpOwogICAgfQogICAgZmlsdGVyKGU1KSB7CiAgICAgIHJldHVybiBFdDkodGhpcy5fY3R4LCBmdW5jdGlvbihuOCkgewogICAgICAgIHJldHVybiBlNShuOC52YWx1ZSk7CiAgICAgIH0pLCBWcih0aGlzLl9jdHgsIGU1KSwgdGhpczsKICAgIH0KICAgIGFuZChlNSkgewogICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZTUpOwogICAgfQogICAgb3IoZTUpIHsKICAgICAgcmV0dXJuIG5ldyB0aGlzLmRiLldoZXJlQ2xhdXNlKHRoaXMuX2N0eC50YWJsZSwgZTUsIHRoaXMpOwogICAgfQogICAgcmV2ZXJzZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuX2N0eC5kaXIgPSB0aGlzLl9jdHguZGlyID09PSAicHJldiIgPyAibmV4dCIgOiAicHJldiIsIHRoaXMuX29uZGlyZWN0aW9uY2hhbmdlICYmIHRoaXMuX29uZGlyZWN0aW9uY2hhbmdlKHRoaXMuX2N0eC5kaXIpLCB0aGlzOwogICAgfQogICAgZGVzYygpIHsKICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpOwogICAgfQogICAgZWFjaEtleShlNSkgewogICAgICB2YXIgbjggPSB0aGlzLl9jdHg7CiAgICAgIHJldHVybiBuOC5rZXlzT25seSA9ICFuOC5pc01hdGNoLCB0aGlzLmVhY2goZnVuY3Rpb24ocjMsIGk0KSB7CiAgICAgICAgZTUoaTQua2V5LCBpNCk7CiAgICAgIH0pOwogICAgfQogICAgZWFjaFVuaXF1ZUtleShlNSkgewogICAgICByZXR1cm4gdGhpcy5fY3R4LnVuaXF1ZSA9ICJ1bmlxdWUiLCB0aGlzLmVhY2hLZXkoZTUpOwogICAgfQogICAgZWFjaFByaW1hcnlLZXkoZTUpIHsKICAgICAgdmFyIG44ID0gdGhpcy5fY3R4OwogICAgICByZXR1cm4gbjgua2V5c09ubHkgPSAhbjguaXNNYXRjaCwgdGhpcy5lYWNoKGZ1bmN0aW9uKHIzLCBpNCkgewogICAgICAgIGU1KGk0LnByaW1hcnlLZXksIGk0KTsKICAgICAgfSk7CiAgICB9CiAgICBrZXlzKGU1KSB7CiAgICAgIHZhciBuOCA9IHRoaXMuX2N0eDsKICAgICAgbjgua2V5c09ubHkgPSAhbjguaXNNYXRjaDsKICAgICAgdmFyIHIzID0gW107CiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaTQsIHM4KSB7CiAgICAgICAgcjMucHVzaChzOC5rZXkpOwogICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiByMzsKICAgICAgfSkudGhlbihlNSk7CiAgICB9CiAgICBwcmltYXJ5S2V5cyhlNSkgewogICAgICB2YXIgbjggPSB0aGlzLl9jdHg7CiAgICAgIGlmIChuOC5kaXIgPT09ICJuZXh0IiAmJiB3ZTExKG44LCB0cnVlKSAmJiBuOC5saW1pdCA+IDApCiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWQoKGk0KSA9PiB7CiAgICAgICAgICB2YXIgczggPSBpdDEzKG44LCBuOC50YWJsZS5jb3JlLnNjaGVtYSk7CiAgICAgICAgICByZXR1cm4gbjgudGFibGUuY29yZS5xdWVyeSh7IHRyYW5zOiBpNCwgdmFsdWVzOiBmYWxzZSwgbGltaXQ6IG44LmxpbWl0LCBxdWVyeTogeyBpbmRleDogczgsIHJhbmdlOiBuOC5yYW5nZSB9IH0pOwogICAgICAgIH0pLnRoZW4oKHsgcmVzdWx0OiBpNCB9KSA9PiBpNCkudGhlbihlNSk7CiAgICAgIG44LmtleXNPbmx5ID0gIW44LmlzTWF0Y2g7CiAgICAgIHZhciByMyA9IFtdOwogICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGk0LCBzOCkgewogICAgICAgIHIzLnB1c2goczgucHJpbWFyeUtleSk7CiAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHIzOwogICAgICB9KS50aGVuKGU1KTsKICAgIH0KICAgIHVuaXF1ZUtleXMoZTUpIHsKICAgICAgcmV0dXJuIHRoaXMuX2N0eC51bmlxdWUgPSAidW5pcXVlIiwgdGhpcy5rZXlzKGU1KTsKICAgIH0KICAgIGZpcnN0S2V5KGU1KSB7CiAgICAgIHJldHVybiB0aGlzLmxpbWl0KDEpLmtleXMoZnVuY3Rpb24objgpIHsKICAgICAgICByZXR1cm4gbjhbMF07CiAgICAgIH0pLnRoZW4oZTUpOwogICAgfQogICAgbGFzdEtleShlNSkgewogICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmlyc3RLZXkoZTUpOwogICAgfQogICAgZGlzdGluY3QoKSB7CiAgICAgIHZhciBlNSA9IHRoaXMuX2N0eCwgbjggPSBlNS5pbmRleCAmJiBlNS50YWJsZS5zY2hlbWEuaWR4QnlOYW1lW2U1LmluZGV4XTsKICAgICAgaWYgKCFuOCB8fCAhbjgubXVsdGkpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIHZhciByMyA9IHt9OwogICAgICByZXR1cm4gRXQ5KHRoaXMuX2N0eCwgZnVuY3Rpb24oaTQpIHsKICAgICAgICB2YXIgczggPSBpNC5wcmltYXJ5S2V5LnRvU3RyaW5nKCksIG80ID0gVzE3KHIzLCBzOCk7CiAgICAgICAgcmV0dXJuIHIzW3M4XSA9IHRydWUsICFvNDsKICAgICAgfSksIHRoaXM7CiAgICB9CiAgICBtb2RpZnkoZTUpIHsKICAgICAgdmFyIG44ID0gdGhpcy5fY3R4OwogICAgICByZXR1cm4gdGhpcy5fd3JpdGUoKHIzKSA9PiB7CiAgICAgICAgdmFyIGk0OwogICAgICAgIGlmICh0eXBlb2YgZTUgPT0gImZ1bmN0aW9uIikKICAgICAgICAgIGk0ID0gZTU7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgczggPSBNMjQoZTUpLCBvNCA9IHM4Lmxlbmd0aDsKICAgICAgICAgIGk0ID0gZnVuY3Rpb24ocDE4KSB7CiAgICAgICAgICAgIGZvciAodmFyIHYxNSA9IGZhbHNlLCB5MTcgPSAwOyB5MTcgPCBvNDsgKyt5MTcpIHsKICAgICAgICAgICAgICB2YXIgXzI1ID0gczhbeTE3XSwgdzIxID0gZTVbXzI1XTsKICAgICAgICAgICAgICBuZTE0KHAxOCwgXzI1KSAhPT0gdzIxICYmIChRMTYocDE4LCBfMjUsIHcyMSksIHYxNSA9IHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB2MTU7CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBsZXQgYTQgPSBuOC50YWJsZS5jb3JlLCB7IG91dGJvdW5kOiB1MTEsIGV4dHJhY3RLZXk6IGw3IH0gPSBhNC5zY2hlbWEucHJpbWFyeUtleSwgaDEwID0gdGhpcy5kYi5fb3B0aW9ucy5tb2RpZnlDaHVua1NpemUgfHwgMjAwLCBkMTUgPSBbXSwgYzE3ID0gMCwgZjExID0gW10sIGcxMiA9IChwMTgsIHYxNSkgPT4gewogICAgICAgICAgbGV0IHsgZmFpbHVyZXM6IHkxNywgbnVtRmFpbHVyZXM6IF8yNSB9ID0gdjE1OwogICAgICAgICAgYzE3ICs9IHAxOCAtIF8yNTsKICAgICAgICAgIGZvciAobGV0IHcyMSBvZiBNMjQoeTE3KSkKICAgICAgICAgICAgZDE1LnB1c2goeTE3W3cyMV0pOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5wcmltYXJ5S2V5cygpLnRoZW4oKHAxOCkgPT4gewogICAgICAgICAgbGV0IHYxNSA9ICh5MTcpID0+IHsKICAgICAgICAgICAgbGV0IF8yNSA9IE1hdGgubWluKGgxMCwgcDE4Lmxlbmd0aCAtIHkxNyk7CiAgICAgICAgICAgIHJldHVybiBhNC5nZXRNYW55KHsgdHJhbnM6IHIzLCBrZXlzOiBwMTguc2xpY2UoeTE3LCB5MTcgKyBfMjUpLCBjYWNoZTogImltbXV0YWJsZSIgfSkudGhlbigodzIxKSA9PiB7CiAgICAgICAgICAgICAgbGV0IG0yMyA9IFtdLCB4MjEgPSBbXSwgRTE1ID0gdTExID8gW10gOiBudWxsLCBTMjEgPSBbXTsKICAgICAgICAgICAgICBmb3IgKGxldCBJMjcgPSAwOyBJMjcgPCBfMjU7ICsrSTI3KSB7CiAgICAgICAgICAgICAgICBsZXQgazE4ID0gdzIxW0kyN10sIEQyMCA9IHsgdmFsdWU6ICRlMTEoazE4KSwgcHJpbUtleTogcDE4W3kxNyArIEkyN10gfTsKICAgICAgICAgICAgICAgIGk0LmNhbGwoRDIwLCBEMjAudmFsdWUsIEQyMCkgIT09IGZhbHNlICYmIChEMjAudmFsdWUgPT0gbnVsbCA/IFMyMS5wdXNoKHAxOFt5MTcgKyBJMjddKSA6ICF1MTEgJiYgVjIwKGw3KGsxOCksIGw3KEQyMC52YWx1ZSkpICE9PSAwID8gKFMyMS5wdXNoKHAxOFt5MTcgKyBJMjddKSwgbTIzLnB1c2goRDIwLnZhbHVlKSkgOiAoeDIxLnB1c2goRDIwLnZhbHVlKSwgdTExICYmIEUxNS5wdXNoKHAxOFt5MTcgKyBJMjddKSkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsZXQgSzE5ID0gd2UxMShuOCkgJiYgbjgubGltaXQgPT09IDEgLyAwICYmICh0eXBlb2YgZTUgIT0gImZ1bmN0aW9uIiB8fCBlNSA9PT0gQXQxMCkgJiYgeyBpbmRleDogbjguaW5kZXgsIHJhbmdlOiBuOC5yYW5nZSB9OwogICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobTIzLmxlbmd0aCA+IDAgJiYgYTQubXV0YXRlKHsgdHJhbnM6IHIzLCB0eXBlOiAiYWRkIiwgdmFsdWVzOiBtMjMgfSkudGhlbigoSTI3KSA9PiB7CiAgICAgICAgICAgICAgICBmb3IgKGxldCBrMTggaW4gSTI3LmZhaWx1cmVzKQogICAgICAgICAgICAgICAgICBTMjEuc3BsaWNlKHBhcnNlSW50KGsxOCksIDEpOwogICAgICAgICAgICAgICAgZzEyKG0yMy5sZW5ndGgsIEkyNyk7CiAgICAgICAgICAgICAgfSkpLnRoZW4oKCkgPT4gKHgyMS5sZW5ndGggPiAwIHx8IEsxOSAmJiB0eXBlb2YgZTUgPT0gIm9iamVjdCIpICYmIGE0Lm11dGF0ZSh7IHRyYW5zOiByMywgdHlwZTogInB1dCIsIGtleXM6IEUxNSwgdmFsdWVzOiB4MjEsIGNyaXRlcmlhOiBLMTksIGNoYW5nZVNwZWM6IHR5cGVvZiBlNSAhPSAiZnVuY3Rpb24iICYmIGU1IH0pLnRoZW4oKEkyNykgPT4gZzEyKHgyMS5sZW5ndGgsIEkyNykpKS50aGVuKCgpID0+IChTMjEubGVuZ3RoID4gMCB8fCBLMTkgJiYgZTUgPT09IEF0MTApICYmIGE0Lm11dGF0ZSh7IHRyYW5zOiByMywgdHlwZTogImRlbGV0ZSIsIGtleXM6IFMyMSwgY3JpdGVyaWE6IEsxOSB9KS50aGVuKChJMjcpID0+IGcxMihTMjEubGVuZ3RoLCBJMjcpKSkudGhlbigoKSA9PiBwMTgubGVuZ3RoID4geTE3ICsgXzI1ICYmIHYxNSh5MTcgKyBoMTApKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHYxNSgwKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgaWYgKGQxNS5sZW5ndGggPiAwKQogICAgICAgICAgICAgIHRocm93IG5ldyBzdDEwKCJFcnJvciBtb2RpZnlpbmcgb25lIG9yIG1vcmUgb2JqZWN0cyIsIGQxNSwgYzE3LCBmMTEpOwogICAgICAgICAgICByZXR1cm4gcDE4Lmxlbmd0aDsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0KICAgIGRlbGV0ZSgpIHsKICAgICAgdmFyIGU1ID0gdGhpcy5fY3R4LCBuOCA9IGU1LnJhbmdlOwogICAgICByZXR1cm4gd2UxMShlNSkgJiYgKGU1LmlzUHJpbUtleSAmJiAhTnIgfHwgbjgudHlwZSA9PT0gMykgPyB0aGlzLl93cml0ZSgocjMpID0+IHsKICAgICAgICBsZXQgeyBwcmltYXJ5S2V5OiBpNCB9ID0gZTUudGFibGUuY29yZS5zY2hlbWEsIHM4ID0gbjg7CiAgICAgICAgcmV0dXJuIGU1LnRhYmxlLmNvcmUuY291bnQoeyB0cmFuczogcjMsIHF1ZXJ5OiB7IGluZGV4OiBpNCwgcmFuZ2U6IHM4IH0gfSkudGhlbigobzQpID0+IGU1LnRhYmxlLmNvcmUubXV0YXRlKHsgdHJhbnM6IHIzLCB0eXBlOiAiZGVsZXRlUmFuZ2UiLCByYW5nZTogczggfSkudGhlbigoeyBmYWlsdXJlczogYTQsIGxhc3RSZXN1bHQ6IHUxMSwgcmVzdWx0czogbDcsIG51bUZhaWx1cmVzOiBoMTAgfSkgPT4gewogICAgICAgICAgaWYgKGgxMCkKICAgICAgICAgICAgdGhyb3cgbmV3IHN0MTAoIkNvdWxkIG5vdCBkZWxldGUgc29tZSB2YWx1ZXMiLCBPYmplY3Qua2V5cyhhNCkubWFwKChkMTUpID0+IGE0W2QxNV0pLCBvNCAtIGgxMCk7CiAgICAgICAgICByZXR1cm4gbzQgLSBoMTA7CiAgICAgICAgfSkpOwogICAgICB9KSA6IHRoaXMubW9kaWZ5KEF0MTApOwogICAgfQogIH07CiAgdmFyIEF0MTAgPSAodDQsIGU1KSA9PiBlNS52YWx1ZSA9IG51bGw7CiAgZnVuY3Rpb24genIyKHQ0KSB7CiAgICByZXR1cm4gWWU4KEx0MTEucHJvdG90eXBlLCBmdW5jdGlvbihuOCwgcjMpIHsKICAgICAgdGhpcy5kYiA9IHQ0OwogICAgICBsZXQgaTQgPSBxbjMsIHM4ID0gbnVsbDsKICAgICAgaWYgKHIzKQogICAgICAgIHRyeSB7CiAgICAgICAgICBpNCA9IHIzKCk7CiAgICAgICAgfSBjYXRjaCAobDcpIHsKICAgICAgICAgIHM4ID0gbDc7CiAgICAgICAgfQogICAgICBsZXQgbzQgPSBuOC5fY3R4LCBhNCA9IG80LnRhYmxlLCB1MTEgPSBhNC5ob29rLnJlYWRpbmcuZmlyZTsKICAgICAgdGhpcy5fY3R4ID0geyB0YWJsZTogYTQsIGluZGV4OiBvNC5pbmRleCwgaXNQcmltS2V5OiAhbzQuaW5kZXggfHwgYTQuc2NoZW1hLnByaW1LZXkua2V5UGF0aCAmJiBvNC5pbmRleCA9PT0gYTQuc2NoZW1hLnByaW1LZXkubmFtZSwgcmFuZ2U6IGk0LCBrZXlzT25seTogZmFsc2UsIGRpcjogIm5leHQiLCB1bmlxdWU6ICIiLCBhbGdvcml0aG06IG51bGwsIGZpbHRlcjogbnVsbCwgcmVwbGF5RmlsdGVyOiBudWxsLCBqdXN0TGltaXQ6IHRydWUsIGlzTWF0Y2g6IG51bGwsIG9mZnNldDogMCwgbGltaXQ6IDEgLyAwLCBlcnJvcjogczgsIG9yOiBvNC5vciwgdmFsdWVNYXBwZXI6IHUxMSAhPT0gemU4ID8gdTExIDogbnVsbCB9OwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIFVyMih0NCwgZTUpIHsKICAgIHJldHVybiB0NCA8IGU1ID8gLTEgOiB0NCA9PT0gZTUgPyAwIDogMTsKICB9CiAgZnVuY3Rpb24gV3IodDQsIGU1KSB7CiAgICByZXR1cm4gdDQgPiBlNSA/IC0xIDogdDQgPT09IGU1ID8gMCA6IDE7CiAgfQogIGZ1bmN0aW9uIFUyOCh0NCwgZTUsIG44KSB7CiAgICB2YXIgcjMgPSB0NCBpbnN0YW5jZW9mIGZ0NyA/IG5ldyB0NC5Db2xsZWN0aW9uKHQ0KSA6IHQ0OwogICAgcmV0dXJuIHIzLl9jdHguZXJyb3IgPSBuOCA/IG5ldyBuOChlNSkgOiBuZXcgVHlwZUVycm9yKGU1KSwgcjM7CiAgfQogIGZ1bmN0aW9uIGJlMTModDQpIHsKICAgIHJldHVybiBuZXcgdDQuQ29sbGVjdGlvbih0NCwgKCkgPT4gSm4zKCIiKSkubGltaXQoMCk7CiAgfQogIGZ1bmN0aW9uIEhyKHQ0KSB7CiAgICByZXR1cm4gdDQgPT09ICJuZXh0IiA/IChlNSkgPT4gZTUudG9VcHBlckNhc2UoKSA6IChlNSkgPT4gZTUudG9Mb3dlckNhc2UoKTsKICB9CiAgZnVuY3Rpb24gWXIyKHQ0KSB7CiAgICByZXR1cm4gdDQgPT09ICJuZXh0IiA/IChlNSkgPT4gZTUudG9Mb3dlckNhc2UoKSA6IChlNSkgPT4gZTUudG9VcHBlckNhc2UoKTsKICB9CiAgZnVuY3Rpb24gWHIyKHQ0LCBlNSwgbjgsIHIzLCBpNCwgczgpIHsKICAgIGZvciAodmFyIG80ID0gTWF0aC5taW4odDQubGVuZ3RoLCByMy5sZW5ndGgpLCBhNCA9IC0xLCB1MTEgPSAwOyB1MTEgPCBvNDsgKyt1MTEpIHsKICAgICAgdmFyIGw3ID0gZTVbdTExXTsKICAgICAgaWYgKGw3ICE9PSByM1t1MTFdKQogICAgICAgIHJldHVybiBpNCh0NFt1MTFdLCBuOFt1MTFdKSA8IDAgPyB0NC5zdWJzdHIoMCwgdTExKSArIG44W3UxMV0gKyBuOC5zdWJzdHIodTExICsgMSkgOiBpNCh0NFt1MTFdLCByM1t1MTFdKSA8IDAgPyB0NC5zdWJzdHIoMCwgdTExKSArIHIzW3UxMV0gKyBuOC5zdWJzdHIodTExICsgMSkgOiBhNCA+PSAwID8gdDQuc3Vic3RyKDAsIGE0KSArIGU1W2E0XSArIG44LnN1YnN0cihhNCArIDEpIDogbnVsbDsKICAgICAgaTQodDRbdTExXSwgbDcpIDwgMCAmJiAoYTQgPSB1MTEpOwogICAgfQogICAgcmV0dXJuIG80IDwgcjMubGVuZ3RoICYmIHM4ID09PSAibmV4dCIgPyB0NCArIG44LnN1YnN0cih0NC5sZW5ndGgpIDogbzQgPCB0NC5sZW5ndGggJiYgczggPT09ICJwcmV2IiA/IHQ0LnN1YnN0cigwLCBuOC5sZW5ndGgpIDogYTQgPCAwID8gbnVsbCA6IHQ0LnN1YnN0cigwLCBhNCkgKyByM1thNF0gKyBuOC5zdWJzdHIoYTQgKyAxKTsKICB9CiAgZnVuY3Rpb24gcWU3KHQ0LCBlNSwgbjgsIHIzKSB7CiAgICB2YXIgaTQsIHM4LCBvNCwgYTQsIHUxMSwgbDcsIGgxMCwgZDE1ID0gbjgubGVuZ3RoOwogICAgaWYgKCFuOC5ldmVyeSgocDE4KSA9PiB0eXBlb2YgcDE4ID09ICJzdHJpbmciKSkKICAgICAgcmV0dXJuIFUyOCh0NCwgUW4zKTsKICAgIGZ1bmN0aW9uIGMxNyhwMTgpIHsKICAgICAgaTQgPSBIcihwMTgpLCBzOCA9IFlyMihwMTgpLCBvNCA9IHAxOCA9PT0gIm5leHQiID8gVXIyIDogV3I7CiAgICAgIHZhciB2MTUgPSBuOC5tYXAoZnVuY3Rpb24oeTE3KSB7CiAgICAgICAgcmV0dXJuIHsgbG93ZXI6IHM4KHkxNyksIHVwcGVyOiBpNCh5MTcpIH07CiAgICAgIH0pLnNvcnQoZnVuY3Rpb24oeTE3LCBfMjUpIHsKICAgICAgICByZXR1cm4gbzQoeTE3Lmxvd2VyLCBfMjUubG93ZXIpOwogICAgICB9KTsKICAgICAgYTQgPSB2MTUubWFwKGZ1bmN0aW9uKHkxNykgewogICAgICAgIHJldHVybiB5MTcudXBwZXI7CiAgICAgIH0pLCB1MTEgPSB2MTUubWFwKGZ1bmN0aW9uKHkxNykgewogICAgICAgIHJldHVybiB5MTcubG93ZXI7CiAgICAgIH0pLCBsNyA9IHAxOCwgaDEwID0gcDE4ID09PSAibmV4dCIgPyAiIiA6IHIzOwogICAgfQogICAgYzE3KCJuZXh0Iik7CiAgICB2YXIgZjExID0gbmV3IHQ0LkNvbGxlY3Rpb24odDQsICgpID0+IHNlMTgoYTRbMF0sIHUxMVtkMTUgLSAxXSArIHIzKSk7CiAgICBmMTEuX29uZGlyZWN0aW9uY2hhbmdlID0gZnVuY3Rpb24ocDE4KSB7CiAgICAgIGMxNyhwMTgpOwogICAgfTsKICAgIHZhciBnMTIgPSAwOwogICAgcmV0dXJuIGYxMS5fYWRkQWxnb3JpdGhtKGZ1bmN0aW9uKHAxOCwgdjE1LCB5MTcpIHsKICAgICAgdmFyIF8yNSA9IHAxOC5rZXk7CiAgICAgIGlmICh0eXBlb2YgXzI1ICE9ICJzdHJpbmciKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgdmFyIHcyMSA9IHM4KF8yNSk7CiAgICAgIGlmIChlNSh3MjEsIHUxMSwgZzEyKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgZm9yICh2YXIgbTIzID0gbnVsbCwgeDIxID0gZzEyOyB4MjEgPCBkMTU7ICsreDIxKSB7CiAgICAgICAgdmFyIEUxNSA9IFhyMihfMjUsIHcyMSwgYTRbeDIxXSwgdTExW3gyMV0sIG80LCBsNyk7CiAgICAgICAgRTE1ID09PSBudWxsICYmIG0yMyA9PT0gbnVsbCA/IGcxMiA9IHgyMSArIDEgOiAobTIzID09PSBudWxsIHx8IG80KG0yMywgRTE1KSA+IDApICYmIChtMjMgPSBFMTUpOwogICAgICB9CiAgICAgIHJldHVybiB2MTUobTIzICE9PSBudWxsID8gZnVuY3Rpb24oKSB7CiAgICAgICAgcDE4LmNvbnRpbnVlKG0yMyArIGgxMCk7CiAgICAgIH0gOiB5MTcpLCBmYWxzZTsKICAgIH0pLCBmMTE7CiAgfQogIGZ1bmN0aW9uIHNlMTgodDQsIGU1LCBuOCwgcjMpIHsKICAgIHJldHVybiB7IHR5cGU6IDIsIGxvd2VyOiB0NCwgdXBwZXI6IGU1LCBsb3dlck9wZW46IG44LCB1cHBlck9wZW46IHIzIH07CiAgfQogIGZ1bmN0aW9uIEpuMyh0NCkgewogICAgcmV0dXJuIHsgdHlwZTogMSwgbG93ZXI6IHQ0LCB1cHBlcjogdDQgfTsKICB9CiAgdmFyIGZ0NyA9IGNsYXNzIHsKICAgIGdldCBDb2xsZWN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5fY3R4LnRhYmxlLmRiLkNvbGxlY3Rpb247CiAgICB9CiAgICBiZXR3ZWVuKGU1LCBuOCwgcjMsIGk0KSB7CiAgICAgIHIzID0gcjMgIT09IGZhbHNlLCBpNCA9IGk0ID09PSB0cnVlOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB0aGlzLl9jbXAoZTUsIG44KSA+IDAgfHwgdGhpcy5fY21wKGU1LCBuOCkgPT09IDAgJiYgKHIzIHx8IGk0KSAmJiAhKHIzICYmIGk0KSA/IGJlMTModGhpcykgOiBuZXcgdGhpcy5Db2xsZWN0aW9uKHRoaXMsICgpID0+IHNlMTgoZTUsIG44LCAhcjMsICFpNCkpOwogICAgICB9IGNhdGNoIHsKICAgICAgICByZXR1cm4gVTI4KHRoaXMsIEoxMyk7CiAgICAgIH0KICAgIH0KICAgIGVxdWFscyhlNSkgewogICAgICByZXR1cm4gZTUgPT0gbnVsbCA/IFUyOCh0aGlzLCBKMTMpIDogbmV3IHRoaXMuQ29sbGVjdGlvbih0aGlzLCAoKSA9PiBKbjMoZTUpKTsKICAgIH0KICAgIGFib3ZlKGU1KSB7CiAgICAgIHJldHVybiBlNSA9PSBudWxsID8gVTI4KHRoaXMsIEoxMykgOiBuZXcgdGhpcy5Db2xsZWN0aW9uKHRoaXMsICgpID0+IHNlMTgoZTUsIHZvaWQgMCwgdHJ1ZSkpOwogICAgfQogICAgYWJvdmVPckVxdWFsKGU1KSB7CiAgICAgIHJldHVybiBlNSA9PSBudWxsID8gVTI4KHRoaXMsIEoxMykgOiBuZXcgdGhpcy5Db2xsZWN0aW9uKHRoaXMsICgpID0+IHNlMTgoZTUsIHZvaWQgMCwgZmFsc2UpKTsKICAgIH0KICAgIGJlbG93KGU1KSB7CiAgICAgIHJldHVybiBlNSA9PSBudWxsID8gVTI4KHRoaXMsIEoxMykgOiBuZXcgdGhpcy5Db2xsZWN0aW9uKHRoaXMsICgpID0+IHNlMTgodm9pZCAwLCBlNSwgZmFsc2UsIHRydWUpKTsKICAgIH0KICAgIGJlbG93T3JFcXVhbChlNSkgewogICAgICByZXR1cm4gZTUgPT0gbnVsbCA/IFUyOCh0aGlzLCBKMTMpIDogbmV3IHRoaXMuQ29sbGVjdGlvbih0aGlzLCAoKSA9PiBzZTE4KHZvaWQgMCwgZTUpKTsKICAgIH0KICAgIHN0YXJ0c1dpdGgoZTUpIHsKICAgICAgcmV0dXJuIHR5cGVvZiBlNSAhPSAic3RyaW5nIiA/IFUyOCh0aGlzLCBRbjMpIDogdGhpcy5iZXR3ZWVuKGU1LCBlNSArIGRlMTIsIHRydWUsIHRydWUpOwogICAgfQogICAgc3RhcnRzV2l0aElnbm9yZUNhc2UoZTUpIHsKICAgICAgcmV0dXJuIGU1ID09PSAiIiA/IHRoaXMuc3RhcnRzV2l0aChlNSkgOiBxZTcodGhpcywgKG44LCByMykgPT4gbjguaW5kZXhPZihyM1swXSkgPT09IDAsIFtlNV0sIGRlMTIpOwogICAgfQogICAgZXF1YWxzSWdub3JlQ2FzZShlNSkgewogICAgICByZXR1cm4gcWU3KHRoaXMsIChuOCwgcjMpID0+IG44ID09PSByM1swXSwgW2U1XSwgIiIpOwogICAgfQogICAgYW55T2ZJZ25vcmVDYXNlKCkgewogICAgICB2YXIgZTUgPSBlZTE3LmFwcGx5KHhlMTQsIGFyZ3VtZW50cyk7CiAgICAgIHJldHVybiBlNS5sZW5ndGggPT09IDAgPyBiZTEzKHRoaXMpIDogcWU3KHRoaXMsIChuOCwgcjMpID0+IHIzLmluZGV4T2YobjgpICE9PSAtMSwgZTUsICIiKTsKICAgIH0KICAgIHN0YXJ0c1dpdGhBbnlPZklnbm9yZUNhc2UoKSB7CiAgICAgIHZhciBlNSA9IGVlMTcuYXBwbHkoeGUxNCwgYXJndW1lbnRzKTsKICAgICAgcmV0dXJuIGU1Lmxlbmd0aCA9PT0gMCA/IGJlMTModGhpcykgOiBxZTcodGhpcywgKG44LCByMykgPT4gcjMuc29tZSgoaTQpID0+IG44LmluZGV4T2YoaTQpID09PSAwKSwgZTUsIGRlMTIpOwogICAgfQogICAgYW55T2YoKSB7CiAgICAgIGxldCBlNSA9IGVlMTcuYXBwbHkoeGUxNCwgYXJndW1lbnRzKSwgbjggPSB0aGlzLl9jbXA7CiAgICAgIHRyeSB7CiAgICAgICAgZTUuc29ydChuOCk7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHJldHVybiBVMjgodGhpcywgSjEzKTsKICAgICAgfQogICAgICBpZiAoZTUubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybiBiZTEzKHRoaXMpOwogICAgICBsZXQgcjMgPSBuZXcgdGhpcy5Db2xsZWN0aW9uKHRoaXMsICgpID0+IHNlMTgoZTVbMF0sIGU1W2U1Lmxlbmd0aCAtIDFdKSk7CiAgICAgIHIzLl9vbmRpcmVjdGlvbmNoYW5nZSA9IChzOCkgPT4gewogICAgICAgIG44ID0gczggPT09ICJuZXh0IiA/IHRoaXMuX2FzY2VuZGluZyA6IHRoaXMuX2Rlc2NlbmRpbmcsIGU1LnNvcnQobjgpOwogICAgICB9OwogICAgICBsZXQgaTQgPSAwOwogICAgICByZXR1cm4gcjMuX2FkZEFsZ29yaXRobSgoczgsIG80LCBhNCkgPT4gewogICAgICAgIGxldCB1MTEgPSBzOC5rZXk7CiAgICAgICAgZm9yICg7IG44KHUxMSwgZTVbaTRdKSA+IDA7ICkKICAgICAgICAgIGlmICgrK2k0LCBpNCA9PT0gZTUubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gbzQoYTQpLCBmYWxzZTsKICAgICAgICByZXR1cm4gbjgodTExLCBlNVtpNF0pID09PSAwID8gdHJ1ZSA6IChvNCgoKSA9PiB7CiAgICAgICAgICBzOC5jb250aW51ZShlNVtpNF0pOwogICAgICAgIH0pLCBmYWxzZSk7CiAgICAgIH0pLCByMzsKICAgIH0KICAgIG5vdEVxdWFsKGU1KSB7CiAgICAgIHJldHVybiB0aGlzLmluQW55UmFuZ2UoW1tqdDQsIGU1XSwgW2U1LCB0aGlzLmRiLl9tYXhLZXldXSwgeyBpbmNsdWRlTG93ZXJzOiBmYWxzZSwgaW5jbHVkZVVwcGVyczogZmFsc2UgfSk7CiAgICB9CiAgICBub25lT2YoKSB7CiAgICAgIGxldCBlNSA9IGVlMTcuYXBwbHkoeGUxNCwgYXJndW1lbnRzKTsKICAgICAgaWYgKGU1Lmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gbmV3IHRoaXMuQ29sbGVjdGlvbih0aGlzKTsKICAgICAgdHJ5IHsKICAgICAgICBlNS5zb3J0KHRoaXMuX2FzY2VuZGluZyk7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHJldHVybiBVMjgodGhpcywgSjEzKTsKICAgICAgfQogICAgICBsZXQgbjggPSBlNS5yZWR1Y2UoKHIzLCBpNCkgPT4gcjMgPyByMy5jb25jYXQoW1tyM1tyMy5sZW5ndGggLSAxXVsxXSwgaTRdXSkgOiBbW2p0NCwgaTRdXSwgbnVsbCk7CiAgICAgIHJldHVybiBuOC5wdXNoKFtlNVtlNS5sZW5ndGggLSAxXSwgdGhpcy5kYi5fbWF4S2V5XSksIHRoaXMuaW5BbnlSYW5nZShuOCwgeyBpbmNsdWRlTG93ZXJzOiBmYWxzZSwgaW5jbHVkZVVwcGVyczogZmFsc2UgfSk7CiAgICB9CiAgICBpbkFueVJhbmdlKGU1LCBuOCkgewogICAgICBsZXQgcjMgPSB0aGlzLl9jbXAsIGk0ID0gdGhpcy5fYXNjZW5kaW5nLCBzOCA9IHRoaXMuX2Rlc2NlbmRpbmcsIG80ID0gdGhpcy5fbWluLCBhNCA9IHRoaXMuX21heDsKICAgICAgaWYgKGU1Lmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gYmUxMyh0aGlzKTsKICAgICAgaWYgKCFlNS5ldmVyeSgobTIzKSA9PiBtMjNbMF0gIT09IHZvaWQgMCAmJiBtMjNbMV0gIT09IHZvaWQgMCAmJiBpNChtMjNbMF0sIG0yM1sxXSkgPD0gMCkpCiAgICAgICAgcmV0dXJuIFUyOCh0aGlzLCAiRmlyc3QgYXJndW1lbnQgdG8gaW5BbnlSYW5nZSgpIG11c3QgYmUgYW4gQXJyYXkgb2YgdHdvLXZhbHVlIEFycmF5cyBbbG93ZXIsdXBwZXJdIHdoZXJlIHVwcGVyIG11c3Qgbm90IGJlIGxvd2VyIHRoYW4gbG93ZXIiLCBDMTYuSW52YWxpZEFyZ3VtZW50KTsKICAgICAgbGV0IHUxMSA9ICFuOCB8fCBuOC5pbmNsdWRlTG93ZXJzICE9PSBmYWxzZSwgbDcgPSBuOCAmJiBuOC5pbmNsdWRlVXBwZXJzID09PSB0cnVlOwogICAgICBmdW5jdGlvbiBoMTAobTIzLCB4MjEpIHsKICAgICAgICBsZXQgRTE1ID0gMCwgUzIxID0gbTIzLmxlbmd0aDsKICAgICAgICBmb3IgKDsgRTE1IDwgUzIxOyArK0UxNSkgewogICAgICAgICAgbGV0IEsxOSA9IG0yM1tFMTVdOwogICAgICAgICAgaWYgKHIzKHgyMVswXSwgSzE5WzFdKSA8IDAgJiYgcjMoeDIxWzFdLCBLMTlbMF0pID4gMCkgewogICAgICAgICAgICBLMTlbMF0gPSBvNChLMTlbMF0sIHgyMVswXSksIEsxOVsxXSA9IGE0KEsxOVsxXSwgeDIxWzFdKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBFMTUgPT09IFMyMSAmJiBtMjMucHVzaCh4MjEpLCBtMjM7CiAgICAgIH0KICAgICAgbGV0IGQxNSA9IGk0OwogICAgICBmdW5jdGlvbiBjMTcobTIzLCB4MjEpIHsKICAgICAgICByZXR1cm4gZDE1KG0yM1swXSwgeDIxWzBdKTsKICAgICAgfQogICAgICBsZXQgZjExOwogICAgICB0cnkgewogICAgICAgIGYxMSA9IGU1LnJlZHVjZShoMTAsIFtdKSwgZjExLnNvcnQoYzE3KTsKICAgICAgfSBjYXRjaCB7CiAgICAgICAgcmV0dXJuIFUyOCh0aGlzLCBKMTMpOwogICAgICB9CiAgICAgIGxldCBnMTIgPSAwLCBwMTggPSBsNyA/IChtMjMpID0+IGk0KG0yMywgZjExW2cxMl1bMV0pID4gMCA6IChtMjMpID0+IGk0KG0yMywgZjExW2cxMl1bMV0pID49IDAsIHYxNSA9IHUxMSA/IChtMjMpID0+IHM4KG0yMywgZjExW2cxMl1bMF0pID4gMCA6IChtMjMpID0+IHM4KG0yMywgZjExW2cxMl1bMF0pID49IDA7CiAgICAgIGZ1bmN0aW9uIHkxNyhtMjMpIHsKICAgICAgICByZXR1cm4gIXAxOChtMjMpICYmICF2MTUobTIzKTsKICAgICAgfQogICAgICBsZXQgXzI1ID0gcDE4LCB3MjEgPSBuZXcgdGhpcy5Db2xsZWN0aW9uKHRoaXMsICgpID0+IHNlMTgoZjExWzBdWzBdLCBmMTFbZjExLmxlbmd0aCAtIDFdWzFdLCAhdTExLCAhbDcpKTsKICAgICAgcmV0dXJuIHcyMS5fb25kaXJlY3Rpb25jaGFuZ2UgPSAobTIzKSA9PiB7CiAgICAgICAgbTIzID09PSAibmV4dCIgPyAoXzI1ID0gcDE4LCBkMTUgPSBpNCkgOiAoXzI1ID0gdjE1LCBkMTUgPSBzOCksIGYxMS5zb3J0KGMxNyk7CiAgICAgIH0sIHcyMS5fYWRkQWxnb3JpdGhtKChtMjMsIHgyMSwgRTE1KSA9PiB7CiAgICAgICAgZm9yICh2YXIgUzIxID0gbTIzLmtleTsgXzI1KFMyMSk7ICkKICAgICAgICAgIGlmICgrK2cxMiwgZzEyID09PSBmMTEubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4geDIxKEUxNSksIGZhbHNlOwogICAgICAgIHJldHVybiB5MTcoUzIxKSA/IHRydWUgOiAodGhpcy5fY21wKFMyMSwgZjExW2cxMl1bMV0pID09PSAwIHx8IHRoaXMuX2NtcChTMjEsIGYxMVtnMTJdWzBdKSA9PT0gMCB8fCB4MjEoKCkgPT4gewogICAgICAgICAgZDE1ID09PSBpNCA/IG0yMy5jb250aW51ZShmMTFbZzEyXVswXSkgOiBtMjMuY29udGludWUoZjExW2cxMl1bMV0pOwogICAgICAgIH0pLCBmYWxzZSk7CiAgICAgIH0pLCB3MjE7CiAgICB9CiAgICBzdGFydHNXaXRoQW55T2YoKSB7CiAgICAgIGxldCBlNSA9IGVlMTcuYXBwbHkoeGUxNCwgYXJndW1lbnRzKTsKICAgICAgcmV0dXJuIGU1LmV2ZXJ5KChuOCkgPT4gdHlwZW9mIG44ID09ICJzdHJpbmciKSA/IGU1Lmxlbmd0aCA9PT0gMCA/IGJlMTModGhpcykgOiB0aGlzLmluQW55UmFuZ2UoZTUubWFwKChuOCkgPT4gW244LCBuOCArIGRlMTJdKSkgOiBVMjgodGhpcywgInN0YXJ0c1dpdGhBbnlPZigpIG9ubHkgd29ya3Mgd2l0aCBzdHJpbmdzIik7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBRcih0NCkgewogICAgcmV0dXJuIFllOChmdDcucHJvdG90eXBlLCBmdW5jdGlvbihuOCwgcjMsIGk0KSB7CiAgICAgIHRoaXMuZGIgPSB0NCwgdGhpcy5fY3R4ID0geyB0YWJsZTogbjgsIGluZGV4OiByMyA9PT0gIjppZCIgPyBudWxsIDogcjMsIG9yOiBpNCB9OwogICAgICBsZXQgczggPSB0NC5fZGVwcy5pbmRleGVkREI7CiAgICAgIGlmICghczgpCiAgICAgICAgdGhyb3cgbmV3IEMxNi5NaXNzaW5nQVBJKCk7CiAgICAgIHRoaXMuX2NtcCA9IHRoaXMuX2FzY2VuZGluZyA9IHM4LmNtcC5iaW5kKHM4KSwgdGhpcy5fZGVzY2VuZGluZyA9IChvNCwgYTQpID0+IHM4LmNtcChhNCwgbzQpLCB0aGlzLl9tYXggPSAobzQsIGE0KSA9PiBzOC5jbXAobzQsIGE0KSA+IDAgPyBvNCA6IGE0LCB0aGlzLl9taW4gPSAobzQsIGE0KSA9PiBzOC5jbXAobzQsIGE0KSA8IDAgPyBvNCA6IGE0LCB0aGlzLl9JREJLZXlSYW5nZSA9IHQ0Ll9kZXBzLklEQktleVJhbmdlOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIEcyMih0NCkgewogICAgcmV0dXJuIE8xNChmdW5jdGlvbihlNSkgewogICAgICByZXR1cm4gTmUxMChlNSksIHQ0KGU1LnRhcmdldC5lcnJvciksIGZhbHNlOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIE5lMTAodDQpIHsKICAgIHQ0LnN0b3BQcm9wYWdhdGlvbiAmJiB0NC5zdG9wUHJvcGFnYXRpb24oKSwgdDQucHJldmVudERlZmF1bHQgJiYgdDQucHJldmVudERlZmF1bHQoKTsKICB9CiAgdmFyIGplNiA9ICJzdG9yYWdlbXV0YXRlZCI7CiAgdmFyIGFlMTYgPSAieC1zdG9yYWdlbXV0YXRlZC0xIjsKICB2YXIgZmUxMSA9IEhlNihudWxsLCBqZTYpOwogIHZhciAkdDUgPSBjbGFzcyB7CiAgICBfbG9jaygpIHsKICAgICAgcmV0dXJuIERlMTIoIUExOS5nbG9iYWwpLCArK3RoaXMuX3JlY3Vsb2NrLCB0aGlzLl9yZWN1bG9jayA9PT0gMSAmJiAhQTE5Lmdsb2JhbCAmJiAoQTE5LmxvY2tPd25lckZvciA9IHRoaXMpLCB0aGlzOwogICAgfQogICAgX3VubG9jaygpIHsKICAgICAgaWYgKERlMTIoIUExOS5nbG9iYWwpLCAtLXRoaXMuX3JlY3Vsb2NrID09PSAwKQogICAgICAgIGZvciAoQTE5Lmdsb2JhbCB8fCAoQTE5LmxvY2tPd25lckZvciA9IG51bGwpOyB0aGlzLl9ibG9ja2VkRnVuY3MubGVuZ3RoID4gMCAmJiAhdGhpcy5fbG9ja2VkKCk7ICkgewogICAgICAgICAgdmFyIGU1ID0gdGhpcy5fYmxvY2tlZEZ1bmNzLnNoaWZ0KCk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBUZTE1KGU1WzFdLCBlNVswXSk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgX2xvY2tlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuX3JlY3Vsb2NrICYmIEExOS5sb2NrT3duZXJGb3IgIT09IHRoaXM7CiAgICB9CiAgICBjcmVhdGUoZTUpIHsKICAgICAgaWYgKCF0aGlzLm1vZGUpCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIGxldCBuOCA9IHRoaXMuZGIuaWRiZGIsIHIzID0gdGhpcy5kYi5fc3RhdGUuZGJPcGVuRXJyb3I7CiAgICAgIGlmIChEZTEyKCF0aGlzLmlkYnRyYW5zKSwgIWU1ICYmICFuOCkKICAgICAgICBzd2l0Y2ggKHIzICYmIHIzLm5hbWUpIHsKICAgICAgICAgIGNhc2UgIkRhdGFiYXNlQ2xvc2VkRXJyb3IiOgogICAgICAgICAgICB0aHJvdyBuZXcgQzE2LkRhdGFiYXNlQ2xvc2VkKHIzKTsKICAgICAgICAgIGNhc2UgIk1pc3NpbmdBUElFcnJvciI6CiAgICAgICAgICAgIHRocm93IG5ldyBDMTYuTWlzc2luZ0FQSShyMy5tZXNzYWdlLCByMyk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgQzE2Lk9wZW5GYWlsZWQocjMpOwogICAgICAgIH0KICAgICAgaWYgKCF0aGlzLmFjdGl2ZSkKICAgICAgICB0aHJvdyBuZXcgQzE2LlRyYW5zYWN0aW9uSW5hY3RpdmUoKTsKICAgICAgcmV0dXJuIERlMTIodGhpcy5fY29tcGxldGlvbi5fc3RhdGUgPT09IG51bGwpLCBlNSA9IHRoaXMuaWRidHJhbnMgPSBlNSB8fCAodGhpcy5kYi5jb3JlID8gdGhpcy5kYi5jb3JlLnRyYW5zYWN0aW9uKHRoaXMuc3RvcmVOYW1lcywgdGhpcy5tb2RlLCB7IGR1cmFiaWxpdHk6IHRoaXMuY2hyb21lVHJhbnNhY3Rpb25EdXJhYmlsaXR5IH0pIDogbjgudHJhbnNhY3Rpb24odGhpcy5zdG9yZU5hbWVzLCB0aGlzLm1vZGUsIHsgZHVyYWJpbGl0eTogdGhpcy5jaHJvbWVUcmFuc2FjdGlvbkR1cmFiaWxpdHkgfSkpLCBlNS5vbmVycm9yID0gTzE0KChpNCkgPT4gewogICAgICAgIE5lMTAoaTQpLCB0aGlzLl9yZWplY3QoZTUuZXJyb3IpOwogICAgICB9KSwgZTUub25hYm9ydCA9IE8xNCgoaTQpID0+IHsKICAgICAgICBOZTEwKGk0KSwgdGhpcy5hY3RpdmUgJiYgdGhpcy5fcmVqZWN0KG5ldyBDMTYuQWJvcnQoZTUuZXJyb3IpKSwgdGhpcy5hY3RpdmUgPSBmYWxzZSwgdGhpcy5vbigiYWJvcnQiKS5maXJlKGk0KTsKICAgICAgfSksIGU1Lm9uY29tcGxldGUgPSBPMTQoKCkgPT4gewogICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2UsIHRoaXMuX3Jlc29sdmUoKSwgIm11dGF0ZWRQYXJ0cyIgaW4gZTUgJiYgZmUxMS5zdG9yYWdlbXV0YXRlZC5maXJlKGU1Lm11dGF0ZWRQYXJ0cyk7CiAgICAgIH0pLCB0aGlzOwogICAgfQogICAgX3Byb21pc2UoZTUsIG44LCByMykgewogICAgICBpZiAoZTUgPT09ICJyZWFkd3JpdGUiICYmIHRoaXMubW9kZSAhPT0gInJlYWR3cml0ZSIpCiAgICAgICAgcmV0dXJuIEIyMyhuZXcgQzE2LlJlYWRPbmx5KCJUcmFuc2FjdGlvbiBpcyByZWFkb25seSIpKTsKICAgICAgaWYgKCF0aGlzLmFjdGl2ZSkKICAgICAgICByZXR1cm4gQjIzKG5ldyBDMTYuVHJhbnNhY3Rpb25JbmFjdGl2ZSgpKTsKICAgICAgaWYgKHRoaXMuX2xvY2tlZCgpKQogICAgICAgIHJldHVybiBuZXcgYjI0KChzOCwgbzQpID0+IHsKICAgICAgICAgIHRoaXMuX2Jsb2NrZWRGdW5jcy5wdXNoKFsoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuX3Byb21pc2UoZTUsIG44LCByMykudGhlbihzOCwgbzQpOwogICAgICAgICAgfSwgQTE5XSk7CiAgICAgICAgfSk7CiAgICAgIGlmIChyMykKICAgICAgICByZXR1cm4gbGUxNCgoKSA9PiB7CiAgICAgICAgICB2YXIgczggPSBuZXcgYjI0KChvNCwgYTQpID0+IHsKICAgICAgICAgICAgdGhpcy5fbG9jaygpOwogICAgICAgICAgICBsZXQgdTExID0gbjgobzQsIGE0LCB0aGlzKTsKICAgICAgICAgICAgdTExICYmIHUxMS50aGVuICYmIHUxMS50aGVuKG80LCBhNCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiBzOC5maW5hbGx5KCgpID0+IHRoaXMuX3VubG9jaygpKSwgczguX2xpYiA9IHRydWUsIHM4OwogICAgICAgIH0pOwogICAgICB2YXIgaTQgPSBuZXcgYjI0KChzOCwgbzQpID0+IHsKICAgICAgICB2YXIgYTQgPSBuOChzOCwgbzQsIHRoaXMpOwogICAgICAgIGE0ICYmIGE0LnRoZW4gJiYgYTQudGhlbihzOCwgbzQpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGk0Ll9saWIgPSB0cnVlLCBpNDsKICAgIH0KICAgIF9yb290KCkgewogICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5fcm9vdCgpIDogdGhpczsKICAgIH0KICAgIHdhaXRGb3IoZTUpIHsKICAgICAgdmFyIG44ID0gdGhpcy5fcm9vdCgpOwogICAgICBsZXQgcjMgPSBiMjQucmVzb2x2ZShlNSk7CiAgICAgIGlmIChuOC5fd2FpdGluZ0ZvcikKICAgICAgICBuOC5fd2FpdGluZ0ZvciA9IG44Ll93YWl0aW5nRm9yLnRoZW4oKCkgPT4gcjMpOwogICAgICBlbHNlIHsKICAgICAgICBuOC5fd2FpdGluZ0ZvciA9IHIzLCBuOC5fd2FpdGluZ1F1ZXVlID0gW107CiAgICAgICAgdmFyIGk0ID0gbjguaWRidHJhbnMub2JqZWN0U3RvcmUobjguc3RvcmVOYW1lc1swXSk7CiAgICAgICAgKGZ1bmN0aW9uIG80KCkgewogICAgICAgICAgZm9yICgrK244Ll9zcGluQ291bnQ7IG44Ll93YWl0aW5nUXVldWUubGVuZ3RoOyApCiAgICAgICAgICAgIG44Ll93YWl0aW5nUXVldWUuc2hpZnQoKSgpOwogICAgICAgICAgbjguX3dhaXRpbmdGb3IgJiYgKGk0LmdldCgtMSAvIDApLm9uc3VjY2VzcyA9IG80KTsKICAgICAgICB9KSgpOwogICAgICB9CiAgICAgIHZhciBzOCA9IG44Ll93YWl0aW5nRm9yOwogICAgICByZXR1cm4gbmV3IGIyNCgobzQsIGE0KSA9PiB7CiAgICAgICAgcjMudGhlbigodTExKSA9PiBuOC5fd2FpdGluZ1F1ZXVlLnB1c2goTzE0KG80LmJpbmQobnVsbCwgdTExKSkpLCAodTExKSA9PiBuOC5fd2FpdGluZ1F1ZXVlLnB1c2goTzE0KGE0LmJpbmQobnVsbCwgdTExKSkpKS5maW5hbGx5KCgpID0+IHsKICAgICAgICAgIG44Ll93YWl0aW5nRm9yID09PSBzOCAmJiAobjguX3dhaXRpbmdGb3IgPSBudWxsKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgICBhYm9ydCgpIHsKICAgICAgdGhpcy5hY3RpdmUgJiYgKHRoaXMuYWN0aXZlID0gZmFsc2UsIHRoaXMuaWRidHJhbnMgJiYgdGhpcy5pZGJ0cmFucy5hYm9ydCgpLCB0aGlzLl9yZWplY3QobmV3IEMxNi5BYm9ydCgpKSk7CiAgICB9CiAgICB0YWJsZShlNSkgewogICAgICBsZXQgbjggPSB0aGlzLl9tZW1vaXplZFRhYmxlcyB8fCAodGhpcy5fbWVtb2l6ZWRUYWJsZXMgPSB7fSk7CiAgICAgIGlmIChXMTcobjgsIGU1KSkKICAgICAgICByZXR1cm4gbjhbZTVdOwogICAgICBsZXQgcjMgPSB0aGlzLnNjaGVtYVtlNV07CiAgICAgIGlmICghcjMpCiAgICAgICAgdGhyb3cgbmV3IEMxNi5Ob3RGb3VuZCgiVGFibGUgIiArIGU1ICsgIiBub3QgcGFydCBvZiB0cmFuc2FjdGlvbiIpOwogICAgICBsZXQgaTQgPSBuZXcgdGhpcy5kYi5UYWJsZShlNSwgcjMsIHRoaXMpOwogICAgICByZXR1cm4gaTQuY29yZSA9IHRoaXMuZGIuY29yZS50YWJsZShlNSksIG44W2U1XSA9IGk0LCBpNDsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEdyMih0NCkgewogICAgcmV0dXJuIFllOCgkdDUucHJvdG90eXBlLCBmdW5jdGlvbihuOCwgcjMsIGk0LCBzOCwgbzQpIHsKICAgICAgdGhpcy5kYiA9IHQ0LCB0aGlzLm1vZGUgPSBuOCwgdGhpcy5zdG9yZU5hbWVzID0gcjMsIHRoaXMuc2NoZW1hID0gaTQsIHRoaXMuY2hyb21lVHJhbnNhY3Rpb25EdXJhYmlsaXR5ID0gczgsIHRoaXMuaWRidHJhbnMgPSBudWxsLCB0aGlzLm9uID0gSGU2KHRoaXMsICJjb21wbGV0ZSIsICJlcnJvciIsICJhYm9ydCIpLCB0aGlzLnBhcmVudCA9IG80IHx8IG51bGwsIHRoaXMuYWN0aXZlID0gdHJ1ZSwgdGhpcy5fcmVjdWxvY2sgPSAwLCB0aGlzLl9ibG9ja2VkRnVuY3MgPSBbXSwgdGhpcy5fcmVzb2x2ZSA9IG51bGwsIHRoaXMuX3JlamVjdCA9IG51bGwsIHRoaXMuX3dhaXRpbmdGb3IgPSBudWxsLCB0aGlzLl93YWl0aW5nUXVldWUgPSBudWxsLCB0aGlzLl9zcGluQ291bnQgPSAwLCB0aGlzLl9jb21wbGV0aW9uID0gbmV3IGIyNCgoYTQsIHUxMSkgPT4gewogICAgICAgIHRoaXMuX3Jlc29sdmUgPSBhNCwgdGhpcy5fcmVqZWN0ID0gdTExOwogICAgICB9KSwgdGhpcy5fY29tcGxldGlvbi50aGVuKCgpID0+IHsKICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlLCB0aGlzLm9uLmNvbXBsZXRlLmZpcmUoKTsKICAgICAgfSwgKGE0KSA9PiB7CiAgICAgICAgdmFyIHUxMSA9IHRoaXMuYWN0aXZlOwogICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZSA9IGZhbHNlLCB0aGlzLm9uLmVycm9yLmZpcmUoYTQpLCB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50Ll9yZWplY3QoYTQpIDogdTExICYmIHRoaXMuaWRidHJhbnMgJiYgdGhpcy5pZGJ0cmFucy5hYm9ydCgpLCBCMjMoYTQpOwogICAgICB9KTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiB6dDkodDQsIGU1LCBuOCwgcjMsIGk0LCBzOCwgbzQpIHsKICAgIHJldHVybiB7IG5hbWU6IHQ0LCBrZXlQYXRoOiBlNSwgdW5pcXVlOiBuOCwgbXVsdGk6IHIzLCBhdXRvOiBpNCwgY29tcG91bmQ6IHM4LCBzcmM6IChuOCAmJiAhbzQgPyAiJiIgOiAiIikgKyAocjMgPyAiKiIgOiAiIikgKyAoaTQgPyAiKysiIDogIiIpICsgWm4zKGU1KSB9OwogIH0KICBmdW5jdGlvbiBabjModDQpIHsKICAgIHJldHVybiB0eXBlb2YgdDQgPT0gInN0cmluZyIgPyB0NCA6IHQ0ID8gIlsiICsgW10uam9pbi5jYWxsKHQ0LCAiKyIpICsgIl0iIDogIiI7CiAgfQogIGZ1bmN0aW9uIGVyMih0NCwgZTUsIG44KSB7CiAgICByZXR1cm4geyBuYW1lOiB0NCwgcHJpbUtleTogZTUsIGluZGV4ZXM6IG44LCBtYXBwZWRDbGFzczogbnVsbCwgaWR4QnlOYW1lOiBQbjIobjgsIChyMykgPT4gW3IzLm5hbWUsIHIzXSkgfTsKICB9CiAgZnVuY3Rpb24gcXIyKHQ0KSB7CiAgICByZXR1cm4gdDQubGVuZ3RoID09PSAxID8gdDRbMF0gOiB0NDsKICB9CiAgdmFyIFZlNiA9ICh0NCkgPT4gewogICAgdHJ5IHsKICAgICAgcmV0dXJuIHQ0Lm9ubHkoW1tdXSksIFZlNiA9ICgpID0+IFtbXV0sIFtbXV07CiAgICB9IGNhdGNoIHsKICAgICAgcmV0dXJuIFZlNiA9ICgpID0+IGRlMTIsIGRlMTI7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBVdDkodDQpIHsKICAgIHJldHVybiB0NCA9PSBudWxsID8gKCkgPT4gewogICAgfSA6IHR5cGVvZiB0NCA9PSAic3RyaW5nIiA/IEpyMih0NCkgOiAoZTUpID0+IG5lMTQoZTUsIHQ0KTsKICB9CiAgZnVuY3Rpb24gSnIyKHQ0KSB7CiAgICByZXR1cm4gdDQuc3BsaXQoIi4iKS5sZW5ndGggPT09IDEgPyAobjgpID0+IG44W3Q0XSA6IChuOCkgPT4gbmUxNChuOCwgdDQpOwogIH0KICBmdW5jdGlvbiBDbjModDQpIHsKICAgIHJldHVybiBbXS5zbGljZS5jYWxsKHQ0KTsKICB9CiAgdmFyIFpyID0gMDsKICBmdW5jdGlvbiBPZTEzKHQ0KSB7CiAgICByZXR1cm4gdDQgPT0gbnVsbCA/ICI6aWQiIDogdHlwZW9mIHQ0ID09ICJzdHJpbmciID8gdDQgOiBgWyR7dDQuam9pbigiKyIpfV1gOwogIH0KICBmdW5jdGlvbiBlaTIodDQsIGU1LCBuOCkgewogICAgZnVuY3Rpb24gcjMoaDEwLCBkMTUpIHsKICAgICAgbGV0IGMxNyA9IENuMyhoMTAub2JqZWN0U3RvcmVOYW1lcyk7CiAgICAgIHJldHVybiB7IHNjaGVtYTogeyBuYW1lOiBoMTAubmFtZSwgdGFibGVzOiBjMTcubWFwKChmMTEpID0+IGQxNS5vYmplY3RTdG9yZShmMTEpKS5tYXAoKGYxMSkgPT4gewogICAgICAgIGxldCB7IGtleVBhdGg6IGcxMiwgYXV0b0luY3JlbWVudDogcDE4IH0gPSBmMTEsIHYxNSA9IGoxOChnMTIpLCB5MTcgPSBnMTIgPT0gbnVsbCwgXzI1ID0ge30sIHcyMSA9IHsgbmFtZTogZjExLm5hbWUsIHByaW1hcnlLZXk6IHsgbmFtZTogbnVsbCwgaXNQcmltYXJ5S2V5OiB0cnVlLCBvdXRib3VuZDogeTE3LCBjb21wb3VuZDogdjE1LCBrZXlQYXRoOiBnMTIsIGF1dG9JbmNyZW1lbnQ6IHAxOCwgdW5pcXVlOiB0cnVlLCBleHRyYWN0S2V5OiBVdDkoZzEyKSB9LCBpbmRleGVzOiBDbjMoZjExLmluZGV4TmFtZXMpLm1hcCgobTIzKSA9PiBmMTEuaW5kZXgobTIzKSkubWFwKChtMjMpID0+IHsKICAgICAgICAgIGxldCB7IG5hbWU6IHgyMSwgdW5pcXVlOiBFMTUsIG11bHRpRW50cnk6IFMyMSwga2V5UGF0aDogSzE5IH0gPSBtMjMsIEkyNyA9IGoxOChLMTkpLCBrMTggPSB7IG5hbWU6IHgyMSwgY29tcG91bmQ6IEkyNywga2V5UGF0aDogSzE5LCB1bmlxdWU6IEUxNSwgbXVsdGlFbnRyeTogUzIxLCBleHRyYWN0S2V5OiBVdDkoSzE5KSB9OwogICAgICAgICAgcmV0dXJuIF8yNVtPZTEzKEsxOSldID0gazE4LCBrMTg7CiAgICAgICAgfSksIGdldEluZGV4QnlLZXlQYXRoOiAobTIzKSA9PiBfMjVbT2UxMyhtMjMpXSB9OwogICAgICAgIHJldHVybiBfMjVbIjppZCJdID0gdzIxLnByaW1hcnlLZXksIGcxMiAhPSBudWxsICYmIChfMjVbT2UxMyhnMTIpXSA9IHcyMS5wcmltYXJ5S2V5KSwgdzIxOwogICAgICB9KSB9LCBoYXNHZXRBbGw6IGMxNy5sZW5ndGggPiAwICYmICJnZXRBbGwiIGluIGQxNS5vYmplY3RTdG9yZShjMTdbMF0pICYmICEodHlwZW9mIG5hdmlnYXRvciA8ICJ1IiAmJiAvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmICEvKENocm9tZVwvfEVkZ2VcLykvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgW10uY29uY2F0KG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1NhZmFyaVwvKFxkKikvKSlbMV0gPCA2MDQpIH07CiAgICB9CiAgICBmdW5jdGlvbiBpNChoMTApIHsKICAgICAgaWYgKGgxMC50eXBlID09PSAzKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBpZiAoaDEwLnR5cGUgPT09IDQpCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29udmVydCBuZXZlciB0eXBlIHRvIElEQktleVJhbmdlIik7CiAgICAgIGxldCB7IGxvd2VyOiBkMTUsIHVwcGVyOiBjMTcsIGxvd2VyT3BlbjogZjExLCB1cHBlck9wZW46IGcxMiB9ID0gaDEwOwogICAgICByZXR1cm4gZDE1ID09PSB2b2lkIDAgPyBjMTcgPT09IHZvaWQgMCA/IG51bGwgOiBlNS51cHBlckJvdW5kKGMxNywgISFnMTIpIDogYzE3ID09PSB2b2lkIDAgPyBlNS5sb3dlckJvdW5kKGQxNSwgISFmMTEpIDogZTUuYm91bmQoZDE1LCBjMTcsICEhZjExLCAhIWcxMik7CiAgICB9CiAgICBmdW5jdGlvbiBzOChoMTApIHsKICAgICAgbGV0IGQxNSA9IGgxMC5uYW1lOwogICAgICBmdW5jdGlvbiBjMTcoeyB0cmFuczogcDE4LCB0eXBlOiB2MTUsIGtleXM6IHkxNywgdmFsdWVzOiBfMjUsIHJhbmdlOiB3MjEgfSkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgobTIzLCB4MjEpID0+IHsKICAgICAgICAgIG0yMyA9IE8xNChtMjMpOwogICAgICAgICAgbGV0IEUxNSA9IHAxOC5vYmplY3RTdG9yZShkMTUpLCBTMjEgPSBFMTUua2V5UGF0aCA9PSBudWxsLCBLMTkgPSB2MTUgPT09ICJwdXQiIHx8IHYxNSA9PT0gImFkZCI7CiAgICAgICAgICBpZiAoIUsxOSAmJiB2MTUgIT09ICJkZWxldGUiICYmIHYxNSAhPT0gImRlbGV0ZVJhbmdlIikKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG9wZXJhdGlvbiB0eXBlOiAiICsgdjE1KTsKICAgICAgICAgIGxldCB7IGxlbmd0aDogSTI3IH0gPSB5MTcgfHwgXzI1IHx8IHsgbGVuZ3RoOiAxIH07CiAgICAgICAgICBpZiAoeTE3ICYmIF8yNSAmJiB5MTcubGVuZ3RoICE9PSBfMjUubGVuZ3RoKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkdpdmVuIGtleXMgYXJyYXkgbXVzdCBoYXZlIHNhbWUgbGVuZ3RoIGFzIGdpdmVuIHZhbHVlcyBhcnJheS4iKTsKICAgICAgICAgIGlmIChJMjcgPT09IDApCiAgICAgICAgICAgIHJldHVybiBtMjMoeyBudW1GYWlsdXJlczogMCwgZmFpbHVyZXM6IHt9LCByZXN1bHRzOiBbXSwgbGFzdFJlc3VsdDogdm9pZCAwIH0pOwogICAgICAgICAgbGV0IGsxOCwgRDIwID0gW10sICQyMSA9IFtdLCBUMjkgPSAwLCBZMzAgPSAoejI2KSA9PiB7CiAgICAgICAgICAgICsrVDI5LCBOZTEwKHoyNik7CiAgICAgICAgICB9OwogICAgICAgICAgaWYgKHYxNSA9PT0gImRlbGV0ZVJhbmdlIikgewogICAgICAgICAgICBpZiAodzIxLnR5cGUgPT09IDQpCiAgICAgICAgICAgICAgcmV0dXJuIG0yMyh7IG51bUZhaWx1cmVzOiBUMjksIGZhaWx1cmVzOiAkMjEsIHJlc3VsdHM6IFtdLCBsYXN0UmVzdWx0OiB2b2lkIDAgfSk7CiAgICAgICAgICAgIHcyMS50eXBlID09PSAzID8gRDIwLnB1c2goazE4ID0gRTE1LmNsZWFyKCkpIDogRDIwLnB1c2goazE4ID0gRTE1LmRlbGV0ZShpNCh3MjEpKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsZXQgW3oyNiwgSDIzXSA9IEsxOSA/IFMyMSA/IFtfMjUsIHkxN10gOiBbXzI1LCBudWxsXSA6IFt5MTcsIG51bGxdOwogICAgICAgICAgICBpZiAoSzE5KQogICAgICAgICAgICAgIGZvciAobGV0IEYyMiA9IDA7IEYyMiA8IEkyNzsgKytGMjIpCiAgICAgICAgICAgICAgICBEMjAucHVzaChrMTggPSBIMjMgJiYgSDIzW0YyMl0gIT09IHZvaWQgMCA/IEUxNVt2MTVdKHoyNltGMjJdLCBIMjNbRjIyXSkgOiBFMTVbdjE1XSh6MjZbRjIyXSkpLCBrMTgub25lcnJvciA9IFkzMDsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIGZvciAobGV0IEYyMiA9IDA7IEYyMiA8IEkyNzsgKytGMjIpCiAgICAgICAgICAgICAgICBEMjAucHVzaChrMTggPSBFMTVbdjE1XSh6MjZbRjIyXSkpLCBrMTgub25lcnJvciA9IFkzMDsKICAgICAgICAgIH0KICAgICAgICAgIGxldCBYMjMgPSAoejI2KSA9PiB7CiAgICAgICAgICAgIGxldCBIMjMgPSB6MjYudGFyZ2V0LnJlc3VsdDsKICAgICAgICAgICAgRDIwLmZvckVhY2goKEYyMiwgSWUxMCkgPT4gRjIyLmVycm9yICE9IG51bGwgJiYgKCQyMVtJZTEwXSA9IEYyMi5lcnJvcikpLCBtMjMoeyBudW1GYWlsdXJlczogVDI5LCBmYWlsdXJlczogJDIxLCByZXN1bHRzOiB2MTUgPT09ICJkZWxldGUiID8geTE3IDogRDIwLm1hcCgoRjIyKSA9PiBGMjIucmVzdWx0KSwgbGFzdFJlc3VsdDogSDIzIH0pOwogICAgICAgICAgfTsKICAgICAgICAgIGsxOC5vbmVycm9yID0gKHoyNikgPT4gewogICAgICAgICAgICBZMzAoejI2KSwgWDIzKHoyNik7CiAgICAgICAgICB9LCBrMTgub25zdWNjZXNzID0gWDIzOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGYxMSh7IHRyYW5zOiBwMTgsIHZhbHVlczogdjE1LCBxdWVyeTogeTE3LCByZXZlcnNlOiBfMjUsIHVuaXF1ZTogdzIxIH0pIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKG0yMywgeDIxKSA9PiB7CiAgICAgICAgICBtMjMgPSBPMTQobTIzKTsKICAgICAgICAgIGxldCB7IGluZGV4OiBFMTUsIHJhbmdlOiBTMjEgfSA9IHkxNywgSzE5ID0gcDE4Lm9iamVjdFN0b3JlKGQxNSksIEkyNyA9IEUxNS5pc1ByaW1hcnlLZXkgPyBLMTkgOiBLMTkuaW5kZXgoRTE1Lm5hbWUpLCBrMTggPSBfMjUgPyB3MjEgPyAicHJldnVuaXF1ZSIgOiAicHJldiIgOiB3MjEgPyAibmV4dHVuaXF1ZSIgOiAibmV4dCIsIEQyMCA9IHYxNSB8fCAhKCJvcGVuS2V5Q3Vyc29yIiBpbiBJMjcpID8gSTI3Lm9wZW5DdXJzb3IoaTQoUzIxKSwgazE4KSA6IEkyNy5vcGVuS2V5Q3Vyc29yKGk0KFMyMSksIGsxOCk7CiAgICAgICAgICBEMjAub25lcnJvciA9IEcyMih4MjEpLCBEMjAub25zdWNjZXNzID0gTzE0KCgkMjEpID0+IHsKICAgICAgICAgICAgbGV0IFQyOSA9IEQyMC5yZXN1bHQ7CiAgICAgICAgICAgIGlmICghVDI5KSB7CiAgICAgICAgICAgICAgbTIzKG51bGwpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBUMjkuX19faWQgPSArK1pyLCBUMjkuZG9uZSA9IGZhbHNlOwogICAgICAgICAgICBsZXQgWTMwID0gVDI5LmNvbnRpbnVlLmJpbmQoVDI5KSwgWDIzID0gVDI5LmNvbnRpbnVlUHJpbWFyeUtleTsKICAgICAgICAgICAgWDIzICYmIChYMjMgPSBYMjMuYmluZChUMjkpKTsKICAgICAgICAgICAgbGV0IHoyNiA9IFQyOS5hZHZhbmNlLmJpbmQoVDI5KSwgSDIzID0gKCkgPT4gewogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ3Vyc29yIG5vdCBzdGFydGVkIik7CiAgICAgICAgICAgIH0sIEYyMiA9ICgpID0+IHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkN1cnNvciBub3Qgc3RvcHBlZCIpOwogICAgICAgICAgICB9OwogICAgICAgICAgICBUMjkudHJhbnMgPSBwMTgsIFQyOS5zdG9wID0gVDI5LmNvbnRpbnVlID0gVDI5LmNvbnRpbnVlUHJpbWFyeUtleSA9IFQyOS5hZHZhbmNlID0gSDIzLCBUMjkuZmFpbCA9IE8xNCh4MjEpLCBUMjkubmV4dCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGxldCBJZTEwID0gMTsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydCgoKSA9PiBJZTEwLS0gPyB0aGlzLmNvbnRpbnVlKCkgOiB0aGlzLnN0b3AoKSkudGhlbigoKSA9PiB0aGlzKTsKICAgICAgICAgICAgfSwgVDI5LnN0YXJ0ID0gKEllMTApID0+IHsKICAgICAgICAgICAgICBsZXQgc3IyID0gbmV3IFByb21pc2UoKF9lMTUsIG1uMykgPT4gewogICAgICAgICAgICAgICAgX2UxNSA9IE8xNChfZTE1KSwgRDIwLm9uZXJyb3IgPSBHMjIobW4zKSwgVDI5LmZhaWwgPSBtbjMsIFQyOS5zdG9wID0gKG9yMikgPT4gewogICAgICAgICAgICAgICAgICBUMjkuc3RvcCA9IFQyOS5jb250aW51ZSA9IFQyOS5jb250aW51ZVByaW1hcnlLZXkgPSBUMjkuYWR2YW5jZSA9IEYyMiwgX2UxNShvcjIpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB9KSwgX3Q0ID0gKCkgPT4gewogICAgICAgICAgICAgICAgaWYgKEQyMC5yZXN1bHQpCiAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgSWUxMCgpOwogICAgICAgICAgICAgICAgICB9IGNhdGNoIChfZTE1KSB7CiAgICAgICAgICAgICAgICAgICAgVDI5LmZhaWwoX2UxNSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgVDI5LmRvbmUgPSB0cnVlLCBUMjkuc3RhcnQgPSAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDdXJzb3IgYmVoaW5kIGxhc3QgZW50cnkiKTsKICAgICAgICAgICAgICAgICAgfSwgVDI5LnN0b3AoKTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIHJldHVybiBEMjAub25zdWNjZXNzID0gTzE0KChfZTE1KSA9PiB7CiAgICAgICAgICAgICAgICBEMjAub25zdWNjZXNzID0gX3Q0LCBfdDQoKTsKICAgICAgICAgICAgICB9KSwgVDI5LmNvbnRpbnVlID0gWTMwLCBUMjkuY29udGludWVQcmltYXJ5S2V5ID0gWDIzLCBUMjkuYWR2YW5jZSA9IHoyNiwgX3Q0KCksIHNyMjsKICAgICAgICAgICAgfSwgbTIzKFQyOSk7CiAgICAgICAgICB9LCB4MjEpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGcxMihwMTgpIHsKICAgICAgICByZXR1cm4gKHYxNSkgPT4gbmV3IFByb21pc2UoKHkxNywgXzI1KSA9PiB7CiAgICAgICAgICB5MTcgPSBPMTQoeTE3KTsKICAgICAgICAgIGxldCB7IHRyYW5zOiB3MjEsIHZhbHVlczogbTIzLCBsaW1pdDogeDIxLCBxdWVyeTogRTE1IH0gPSB2MTUsIFMyMSA9IHgyMSA9PT0gMSAvIDAgPyB2b2lkIDAgOiB4MjEsIHsgaW5kZXg6IEsxOSwgcmFuZ2U6IEkyNyB9ID0gRTE1LCBrMTggPSB3MjEub2JqZWN0U3RvcmUoZDE1KSwgRDIwID0gSzE5LmlzUHJpbWFyeUtleSA/IGsxOCA6IGsxOC5pbmRleChLMTkubmFtZSksICQyMSA9IGk0KEkyNyk7CiAgICAgICAgICBpZiAoeDIxID09PSAwKQogICAgICAgICAgICByZXR1cm4geTE3KHsgcmVzdWx0OiBbXSB9KTsKICAgICAgICAgIGlmIChwMTgpIHsKICAgICAgICAgICAgbGV0IFQyOSA9IG0yMyA/IEQyMC5nZXRBbGwoJDIxLCBTMjEpIDogRDIwLmdldEFsbEtleXMoJDIxLCBTMjEpOwogICAgICAgICAgICBUMjkub25zdWNjZXNzID0gKFkzMCkgPT4geTE3KHsgcmVzdWx0OiBZMzAudGFyZ2V0LnJlc3VsdCB9KSwgVDI5Lm9uZXJyb3IgPSBHMjIoXzI1KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxldCBUMjkgPSAwLCBZMzAgPSBtMjMgfHwgISgib3BlbktleUN1cnNvciIgaW4gRDIwKSA/IEQyMC5vcGVuQ3Vyc29yKCQyMSkgOiBEMjAub3BlbktleUN1cnNvcigkMjEpLCBYMjMgPSBbXTsKICAgICAgICAgICAgWTMwLm9uc3VjY2VzcyA9ICh6MjYpID0+IHsKICAgICAgICAgICAgICBsZXQgSDIzID0gWTMwLnJlc3VsdDsKICAgICAgICAgICAgICBpZiAoIUgyMykKICAgICAgICAgICAgICAgIHJldHVybiB5MTcoeyByZXN1bHQ6IFgyMyB9KTsKICAgICAgICAgICAgICBpZiAoWDIzLnB1c2gobTIzID8gSDIzLnZhbHVlIDogSDIzLnByaW1hcnlLZXkpLCArK1QyOSA9PT0geDIxKQogICAgICAgICAgICAgICAgcmV0dXJuIHkxNyh7IHJlc3VsdDogWDIzIH0pOwogICAgICAgICAgICAgIEgyMy5jb250aW51ZSgpOwogICAgICAgICAgICB9LCBZMzAub25lcnJvciA9IEcyMihfMjUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiB7IG5hbWU6IGQxNSwgc2NoZW1hOiBoMTAsIG11dGF0ZTogYzE3LCBnZXRNYW55KHsgdHJhbnM6IHAxOCwga2V5czogdjE1IH0pIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHkxNywgXzI1KSA9PiB7CiAgICAgICAgICB5MTcgPSBPMTQoeTE3KTsKICAgICAgICAgIGxldCB3MjEgPSBwMTgub2JqZWN0U3RvcmUoZDE1KSwgbTIzID0gdjE1Lmxlbmd0aCwgeDIxID0gbmV3IEFycmF5KG0yMyksIEUxNSA9IDAsIFMyMSA9IDAsIEsxOSwgSTI3ID0gKEQyMCkgPT4gewogICAgICAgICAgICBsZXQgJDIxID0gRDIwLnRhcmdldDsKICAgICAgICAgICAgKHgyMVskMjEuX3Bvc10gPSAkMjEucmVzdWx0KSAhPSBudWxsLCArK1MyMSA9PT0gRTE1ICYmIHkxNyh4MjEpOwogICAgICAgICAgfSwgazE4ID0gRzIyKF8yNSk7CiAgICAgICAgICBmb3IgKGxldCBEMjAgPSAwOyBEMjAgPCBtMjM7ICsrRDIwKQogICAgICAgICAgICB2MTVbRDIwXSAhPSBudWxsICYmIChLMTkgPSB3MjEuZ2V0KHYxNVtEMjBdKSwgSzE5Ll9wb3MgPSBEMjAsIEsxOS5vbnN1Y2Nlc3MgPSBJMjcsIEsxOS5vbmVycm9yID0gazE4LCArK0UxNSk7CiAgICAgICAgICBFMTUgPT09IDAgJiYgeTE3KHgyMSk7CiAgICAgICAgfSk7CiAgICAgIH0sIGdldCh7IHRyYW5zOiBwMTgsIGtleTogdjE1IH0pIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHkxNywgXzI1KSA9PiB7CiAgICAgICAgICB5MTcgPSBPMTQoeTE3KTsKICAgICAgICAgIGxldCBtMjMgPSBwMTgub2JqZWN0U3RvcmUoZDE1KS5nZXQodjE1KTsKICAgICAgICAgIG0yMy5vbnN1Y2Nlc3MgPSAoeDIxKSA9PiB5MTcoeDIxLnRhcmdldC5yZXN1bHQpLCBtMjMub25lcnJvciA9IEcyMihfMjUpOwogICAgICAgIH0pOwogICAgICB9LCBxdWVyeTogZzEyKGE0KSwgb3BlbkN1cnNvcjogZjExLCBjb3VudCh7IHF1ZXJ5OiBwMTgsIHRyYW5zOiB2MTUgfSkgewogICAgICAgIGxldCB7IGluZGV4OiB5MTcsIHJhbmdlOiBfMjUgfSA9IHAxODsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHcyMSwgbTIzKSA9PiB7CiAgICAgICAgICBsZXQgeDIxID0gdjE1Lm9iamVjdFN0b3JlKGQxNSksIEUxNSA9IHkxNy5pc1ByaW1hcnlLZXkgPyB4MjEgOiB4MjEuaW5kZXgoeTE3Lm5hbWUpLCBTMjEgPSBpNChfMjUpLCBLMTkgPSBTMjEgPyBFMTUuY291bnQoUzIxKSA6IEUxNS5jb3VudCgpOwogICAgICAgICAgSzE5Lm9uc3VjY2VzcyA9IE8xNCgoSTI3KSA9PiB3MjEoSTI3LnRhcmdldC5yZXN1bHQpKSwgSzE5Lm9uZXJyb3IgPSBHMjIobTIzKTsKICAgICAgICB9KTsKICAgICAgfSB9OwogICAgfQogICAgbGV0IHsgc2NoZW1hOiBvNCwgaGFzR2V0QWxsOiBhNCB9ID0gcjModDQsIG44KSwgdTExID0gbzQudGFibGVzLm1hcCgoaDEwKSA9PiBzOChoMTApKSwgbDcgPSB7fTsKICAgIHJldHVybiB1MTEuZm9yRWFjaCgoaDEwKSA9PiBsN1toMTAubmFtZV0gPSBoMTApLCB7IHN0YWNrOiAiZGJjb3JlIiwgdHJhbnNhY3Rpb246IHQ0LnRyYW5zYWN0aW9uLmJpbmQodDQpLCB0YWJsZShoMTApIHsKICAgICAgaWYgKCFsN1toMTBdKQogICAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgJyR7aDEwfScgbm90IGZvdW5kYCk7CiAgICAgIHJldHVybiBsN1toMTBdOwogICAgfSwgTUlOX0tFWTogLTEgLyAwLCBNQVhfS0VZOiBWZTYoZTUpLCBzY2hlbWE6IG80IH07CiAgfQogIGZ1bmN0aW9uIHRpMih0NCwgZTUpIHsKICAgIHJldHVybiBlNS5yZWR1Y2UoKG44LCB7IGNyZWF0ZTogcjMgfSkgPT4gKHsgLi4ubjgsIC4uLnIzKG44KSB9KSwgdDQpOwogIH0KICBmdW5jdGlvbiBuaTIodDQsIGU1LCB7IElEQktleVJhbmdlOiBuOCwgaW5kZXhlZERCOiByMyB9LCBpNCkgewogICAgcmV0dXJuIHsgZGJjb3JlOiB0aTIoZWkyKGU1LCBuOCwgaTQpLCB0NC5kYmNvcmUpIH07CiAgfQogIGZ1bmN0aW9uIGxuMih7IF9ub3ZpcDogdDQgfSwgZTUpIHsKICAgIGxldCBuOCA9IGU1LmRiLCByMyA9IG5pMih0NC5fbWlkZGxld2FyZXMsIG44LCB0NC5fZGVwcywgZTUpOwogICAgdDQuY29yZSA9IHIzLmRiY29yZSwgdDQudGFibGVzLmZvckVhY2goKGk0KSA9PiB7CiAgICAgIGxldCBzOCA9IGk0Lm5hbWU7CiAgICAgIHQ0LmNvcmUuc2NoZW1hLnRhYmxlcy5zb21lKChvNCkgPT4gbzQubmFtZSA9PT0gczgpICYmIChpNC5jb3JlID0gdDQuY29yZS50YWJsZShzOCksIHQ0W3M4XSBpbnN0YW5jZW9mIHQ0LlRhYmxlICYmICh0NFtzOF0uY29yZSA9IGk0LmNvcmUpKTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBodDEyKHsgX25vdmlwOiB0NCB9LCBlNSwgbjgsIHIzKSB7CiAgICBuOC5mb3JFYWNoKChpNCkgPT4gewogICAgICBsZXQgczggPSByM1tpNF07CiAgICAgIGU1LmZvckVhY2goKG80KSA9PiB7CiAgICAgICAgbGV0IGE0ID0gZW40KG80LCBpNCk7CiAgICAgICAgKCFhNCB8fCAidmFsdWUiIGluIGE0ICYmIGE0LnZhbHVlID09PSB2b2lkIDApICYmIChvNCA9PT0gdDQuVHJhbnNhY3Rpb24ucHJvdG90eXBlIHx8IG80IGluc3RhbmNlb2YgdDQuVHJhbnNhY3Rpb24gPyByZTE5KG80LCBpNCwgeyBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50YWJsZShpNCk7CiAgICAgICAgfSwgc2V0KHUxMSkgewogICAgICAgICAgSW4zKHRoaXMsIGk0LCB7IHZhbHVlOiB1MTEsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSk7CiAgICAgICAgfSB9KSA6IG80W2k0XSA9IG5ldyB0NC5UYWJsZShpNCwgczgpKTsKICAgICAgfSk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gV3QxMih7IF9ub3ZpcDogdDQgfSwgZTUpIHsKICAgIGU1LmZvckVhY2goKG44KSA9PiB7CiAgICAgIGZvciAobGV0IHIzIGluIG44KQogICAgICAgIG44W3IzXSBpbnN0YW5jZW9mIHQ0LlRhYmxlICYmIGRlbGV0ZSBuOFtyM107CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gcmkyKHQ0LCBlNSkgewogICAgcmV0dXJuIHQ0Ll9jZmcudmVyc2lvbiAtIGU1Ll9jZmcudmVyc2lvbjsKICB9CiAgZnVuY3Rpb24gaWkyKHQ0LCBlNSwgbjgsIHIzKSB7CiAgICBsZXQgaTQgPSB0NC5fZGJTY2hlbWEsIHM4ID0gdDQuX2NyZWF0ZVRyYW5zYWN0aW9uKCJyZWFkd3JpdGUiLCB0NC5fc3RvcmVOYW1lcywgaTQpOwogICAgczguY3JlYXRlKG44KSwgczguX2NvbXBsZXRpb24uY2F0Y2gocjMpOwogICAgbGV0IG80ID0gczguX3JlamVjdC5iaW5kKHM4KSwgYTQgPSBBMTkudHJhbnNsZXNzIHx8IEExOTsKICAgIGxlMTQoKCkgPT4gewogICAgICBBMTkudHJhbnMgPSBzOCwgQTE5LnRyYW5zbGVzcyA9IGE0LCBlNSA9PT0gMCA/IChNMjQoaTQpLmZvckVhY2goKHUxMSkgPT4gewogICAgICAgIGNuMihuOCwgdTExLCBpNFt1MTFdLnByaW1LZXksIGk0W3UxMV0uaW5kZXhlcyk7CiAgICAgIH0pLCBsbjIodDQsIG44KSwgYjI0LmZvbGxvdygoKSA9PiB0NC5vbi5wb3B1bGF0ZS5maXJlKHM4KSkuY2F0Y2gobzQpKSA6IHNpMih0NCwgZTUsIHM4LCBuOCkuY2F0Y2gobzQpOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIHNpMih7IF9ub3ZpcDogdDQgfSwgZTUsIG44LCByMykgewogICAgbGV0IGk0ID0gW10sIHM4ID0gdDQuX3ZlcnNpb25zLCBvNCA9IHQ0Ll9kYlNjaGVtYSA9IGZuMyh0NCwgdDQuaWRiZGIsIHIzKSwgYTQgPSBmYWxzZTsKICAgIHM4LmZpbHRlcigoaDEwKSA9PiBoMTAuX2NmZy52ZXJzaW9uID49IGU1KS5mb3JFYWNoKChoMTApID0+IHsKICAgICAgaTQucHVzaCgoKSA9PiB7CiAgICAgICAgbGV0IGQxNSA9IG80LCBjMTcgPSBoMTAuX2NmZy5kYnNjaGVtYTsKICAgICAgICBZdDUodDQsIGQxNSwgcjMpLCBZdDUodDQsIGMxNywgcjMpLCBvNCA9IHQ0Ll9kYlNjaGVtYSA9IGMxNzsKICAgICAgICBsZXQgZjExID0gdHIyKGQxNSwgYzE3KTsKICAgICAgICBmMTEuYWRkLmZvckVhY2goKHAxOCkgPT4gewogICAgICAgICAgY24yKHIzLCBwMThbMF0sIHAxOFsxXS5wcmltS2V5LCBwMThbMV0uaW5kZXhlcyk7CiAgICAgICAgfSksIGYxMS5jaGFuZ2UuZm9yRWFjaCgocDE4KSA9PiB7CiAgICAgICAgICBpZiAocDE4LnJlY3JlYXRlKQogICAgICAgICAgICB0aHJvdyBuZXcgQzE2LlVwZ3JhZGUoIk5vdCB5ZXQgc3VwcG9ydCBmb3IgY2hhbmdpbmcgcHJpbWFyeSBrZXkiKTsKICAgICAgICAgIHsKICAgICAgICAgICAgbGV0IHYxNSA9IHIzLm9iamVjdFN0b3JlKHAxOC5uYW1lKTsKICAgICAgICAgICAgcDE4LmFkZC5mb3JFYWNoKCh5MTcpID0+IEh0OSh2MTUsIHkxNykpLCBwMTguY2hhbmdlLmZvckVhY2goKHkxNykgPT4gewogICAgICAgICAgICAgIHYxNS5kZWxldGVJbmRleCh5MTcubmFtZSksIEh0OSh2MTUsIHkxNyk7CiAgICAgICAgICAgIH0pLCBwMTguZGVsLmZvckVhY2goKHkxNykgPT4gdjE1LmRlbGV0ZUluZGV4KHkxNykpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGxldCBnMTIgPSBoMTAuX2NmZy5jb250ZW50VXBncmFkZTsKICAgICAgICBpZiAoZzEyICYmIGgxMC5fY2ZnLnZlcnNpb24gPiBlNSkgewogICAgICAgICAgbG4yKHQ0LCByMyksIG44Ll9tZW1vaXplZFRhYmxlcyA9IHt9LCBhNCA9IHRydWU7CiAgICAgICAgICBsZXQgcDE4ID0ga240KGMxNyk7CiAgICAgICAgICBmMTEuZGVsLmZvckVhY2goKHcyMSkgPT4gewogICAgICAgICAgICBwMThbdzIxXSA9IGQxNVt3MjFdOwogICAgICAgICAgfSksIFd0MTIodDQsIFt0NC5UcmFuc2FjdGlvbi5wcm90b3R5cGVdKSwgaHQxMih0NCwgW3Q0LlRyYW5zYWN0aW9uLnByb3RvdHlwZV0sIE0yNChwMTgpLCBwMTgpLCBuOC5zY2hlbWEgPSBwMTg7CiAgICAgICAgICBsZXQgdjE1ID0gdG40KGcxMik7CiAgICAgICAgICB2MTUgJiYgS2U1KCk7CiAgICAgICAgICBsZXQgeTE3LCBfMjUgPSBiMjQuZm9sbG93KCgpID0+IHsKICAgICAgICAgICAgaWYgKHkxNyA9IGcxMihuOCksIHkxNyAmJiB2MTUpIHsKICAgICAgICAgICAgICB2YXIgdzIxID0gaWUxMi5iaW5kKG51bGwsIG51bGwpOwogICAgICAgICAgICAgIHkxNy50aGVuKHcyMSwgdzIxKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4geTE3ICYmIHR5cGVvZiB5MTcudGhlbiA9PSAiZnVuY3Rpb24iID8gYjI0LnJlc29sdmUoeTE3KSA6IF8yNS50aGVuKCgpID0+IHkxNyk7CiAgICAgICAgfQogICAgICB9KSwgaTQucHVzaCgoZDE1KSA9PiB7CiAgICAgICAgaWYgKCFhNCB8fCAhRnIyKSB7CiAgICAgICAgICBsZXQgYzE3ID0gaDEwLl9jZmcuZGJzY2hlbWE7CiAgICAgICAgICBhaShjMTcsIGQxNSk7CiAgICAgICAgfQogICAgICAgIFd0MTIodDQsIFt0NC5UcmFuc2FjdGlvbi5wcm90b3R5cGVdKSwgaHQxMih0NCwgW3Q0LlRyYW5zYWN0aW9uLnByb3RvdHlwZV0sIHQ0Ll9zdG9yZU5hbWVzLCB0NC5fZGJTY2hlbWEpLCBuOC5zY2hlbWEgPSB0NC5fZGJTY2hlbWE7CiAgICAgIH0pOwogICAgfSk7CiAgICBmdW5jdGlvbiBsNygpIHsKICAgICAgcmV0dXJuIGk0Lmxlbmd0aCA/IGIyNC5yZXNvbHZlKGk0LnNoaWZ0KCkobjguaWRidHJhbnMpKS50aGVuKGw3KSA6IGIyNC5yZXNvbHZlKCk7CiAgICB9CiAgICByZXR1cm4gbDcoKS50aGVuKCgpID0+IHsKICAgICAgb2kyKG80LCByMyk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gdHIyKHQ0LCBlNSkgewogICAgbGV0IG44ID0geyBkZWw6IFtdLCBhZGQ6IFtdLCBjaGFuZ2U6IFtdIH0sIHIzOwogICAgZm9yIChyMyBpbiB0NCkKICAgICAgZTVbcjNdIHx8IG44LmRlbC5wdXNoKHIzKTsKICAgIGZvciAocjMgaW4gZTUpIHsKICAgICAgbGV0IGk0ID0gdDRbcjNdLCBzOCA9IGU1W3IzXTsKICAgICAgaWYgKCFpNCkKICAgICAgICBuOC5hZGQucHVzaChbcjMsIHM4XSk7CiAgICAgIGVsc2UgewogICAgICAgIGxldCBvNCA9IHsgbmFtZTogcjMsIGRlZjogczgsIHJlY3JlYXRlOiBmYWxzZSwgZGVsOiBbXSwgYWRkOiBbXSwgY2hhbmdlOiBbXSB9OwogICAgICAgIGlmICgiIiArIChpNC5wcmltS2V5LmtleVBhdGggfHwgIiIpICE9ICIiICsgKHM4LnByaW1LZXkua2V5UGF0aCB8fCAiIikgfHwgaTQucHJpbUtleS5hdXRvICE9PSBzOC5wcmltS2V5LmF1dG8gJiYgIWd0MTEpCiAgICAgICAgICBvNC5yZWNyZWF0ZSA9IHRydWUsIG44LmNoYW5nZS5wdXNoKG80KTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGxldCBhNCA9IGk0LmlkeEJ5TmFtZSwgdTExID0gczguaWR4QnlOYW1lLCBsNzsKICAgICAgICAgIGZvciAobDcgaW4gYTQpCiAgICAgICAgICAgIHUxMVtsN10gfHwgbzQuZGVsLnB1c2gobDcpOwogICAgICAgICAgZm9yIChsNyBpbiB1MTEpIHsKICAgICAgICAgICAgbGV0IGgxMCA9IGE0W2w3XSwgZDE1ID0gdTExW2w3XTsKICAgICAgICAgICAgaDEwID8gaDEwLnNyYyAhPT0gZDE1LnNyYyAmJiBvNC5jaGFuZ2UucHVzaChkMTUpIDogbzQuYWRkLnB1c2goZDE1KTsKICAgICAgICAgIH0KICAgICAgICAgIChvNC5kZWwubGVuZ3RoID4gMCB8fCBvNC5hZGQubGVuZ3RoID4gMCB8fCBvNC5jaGFuZ2UubGVuZ3RoID4gMCkgJiYgbjguY2hhbmdlLnB1c2gobzQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG44OwogIH0KICBmdW5jdGlvbiBjbjIodDQsIGU1LCBuOCwgcjMpIHsKICAgIGxldCBpNCA9IHQ0LmRiLmNyZWF0ZU9iamVjdFN0b3JlKGU1LCBuOC5rZXlQYXRoID8geyBrZXlQYXRoOiBuOC5rZXlQYXRoLCBhdXRvSW5jcmVtZW50OiBuOC5hdXRvIH0gOiB7IGF1dG9JbmNyZW1lbnQ6IG44LmF1dG8gfSk7CiAgICByZXR1cm4gcjMuZm9yRWFjaCgoczgpID0+IEh0OShpNCwgczgpKSwgaTQ7CiAgfQogIGZ1bmN0aW9uIG9pMih0NCwgZTUpIHsKICAgIE0yNCh0NCkuZm9yRWFjaCgobjgpID0+IHsKICAgICAgZTUuZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhuOCkgfHwgY24yKGU1LCBuOCwgdDRbbjhdLnByaW1LZXksIHQ0W244XS5pbmRleGVzKTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBhaSh0NCwgZTUpIHsKICAgIFtdLnNsaWNlLmNhbGwoZTUuZGIub2JqZWN0U3RvcmVOYW1lcykuZm9yRWFjaCgobjgpID0+IHQ0W244XSA9PSBudWxsICYmIGU1LmRiLmRlbGV0ZU9iamVjdFN0b3JlKG44KSk7CiAgfQogIGZ1bmN0aW9uIEh0OSh0NCwgZTUpIHsKICAgIHQ0LmNyZWF0ZUluZGV4KGU1Lm5hbWUsIGU1LmtleVBhdGgsIHsgdW5pcXVlOiBlNS51bmlxdWUsIG11bHRpRW50cnk6IGU1Lm11bHRpIH0pOwogIH0KICBmdW5jdGlvbiBmbjModDQsIGU1LCBuOCkgewogICAgbGV0IHIzID0ge307CiAgICByZXR1cm4geXQ3KGU1Lm9iamVjdFN0b3JlTmFtZXMsIDApLmZvckVhY2goKHM4KSA9PiB7CiAgICAgIGxldCBvNCA9IG44Lm9iamVjdFN0b3JlKHM4KSwgYTQgPSBvNC5rZXlQYXRoLCB1MTEgPSB6dDkoWm4zKGE0KSwgYTQgfHwgIiIsIGZhbHNlLCBmYWxzZSwgISFvNC5hdXRvSW5jcmVtZW50LCBhNCAmJiB0eXBlb2YgYTQgIT0gInN0cmluZyIsIHRydWUpLCBsNyA9IFtdOwogICAgICBmb3IgKGxldCBkMTUgPSAwOyBkMTUgPCBvNC5pbmRleE5hbWVzLmxlbmd0aDsgKytkMTUpIHsKICAgICAgICBsZXQgYzE3ID0gbzQuaW5kZXgobzQuaW5kZXhOYW1lc1tkMTVdKTsKICAgICAgICBhNCA9IGMxNy5rZXlQYXRoOwogICAgICAgIHZhciBoMTAgPSB6dDkoYzE3Lm5hbWUsIGE0LCAhIWMxNy51bmlxdWUsICEhYzE3Lm11bHRpRW50cnksIGZhbHNlLCBhNCAmJiB0eXBlb2YgYTQgIT0gInN0cmluZyIsIGZhbHNlKTsKICAgICAgICBsNy5wdXNoKGgxMCk7CiAgICAgIH0KICAgICAgcjNbczhdID0gZXIyKHM4LCB1MTEsIGw3KTsKICAgIH0pLCByMzsKICB9CiAgZnVuY3Rpb24gdWkyKHsgX25vdmlwOiB0NCB9LCBlNSwgbjgpIHsKICAgIHQ0LnZlcm5vID0gZTUudmVyc2lvbiAvIDEwOwogICAgbGV0IHIzID0gdDQuX2RiU2NoZW1hID0gZm4zKHQ0LCBlNSwgbjgpOwogICAgdDQuX3N0b3JlTmFtZXMgPSB5dDcoZTUub2JqZWN0U3RvcmVOYW1lcywgMCksIGh0MTIodDQsIFt0NC5fYWxsVGFibGVzXSwgTTI0KHIzKSwgcjMpOwogIH0KICBmdW5jdGlvbiBsaTIodDQsIGU1KSB7CiAgICBsZXQgbjggPSBmbjModDQsIHQ0LmlkYmRiLCBlNSksIHIzID0gdHIyKG44LCB0NC5fZGJTY2hlbWEpOwogICAgcmV0dXJuICEocjMuYWRkLmxlbmd0aCB8fCByMy5jaGFuZ2Uuc29tZSgoaTQpID0+IGk0LmFkZC5sZW5ndGggfHwgaTQuY2hhbmdlLmxlbmd0aCkpOwogIH0KICBmdW5jdGlvbiBZdDUoeyBfbm92aXA6IHQ0IH0sIGU1LCBuOCkgewogICAgbGV0IHIzID0gbjguZGIub2JqZWN0U3RvcmVOYW1lczsKICAgIGZvciAobGV0IGk0ID0gMDsgaTQgPCByMy5sZW5ndGg7ICsraTQpIHsKICAgICAgbGV0IHM4ID0gcjNbaTRdLCBvNCA9IG44Lm9iamVjdFN0b3JlKHM4KTsKICAgICAgdDQuX2hhc0dldEFsbCA9ICJnZXRBbGwiIGluIG80OwogICAgICBmb3IgKGxldCBhNCA9IDA7IGE0IDwgbzQuaW5kZXhOYW1lcy5sZW5ndGg7ICsrYTQpIHsKICAgICAgICBsZXQgdTExID0gbzQuaW5kZXhOYW1lc1thNF0sIGw3ID0gbzQuaW5kZXgodTExKS5rZXlQYXRoLCBoMTAgPSB0eXBlb2YgbDcgPT0gInN0cmluZyIgPyBsNyA6ICJbIiArIHl0NyhsNykuam9pbigiKyIpICsgIl0iOwogICAgICAgIGlmIChlNVtzOF0pIHsKICAgICAgICAgIGxldCBkMTUgPSBlNVtzOF0uaWR4QnlOYW1lW2gxMF07CiAgICAgICAgICBkMTUgJiYgKGQxNS5uYW1lID0gdTExLCBkZWxldGUgZTVbczhdLmlkeEJ5TmFtZVtoMTBdLCBlNVtzOF0uaWR4QnlOYW1lW3UxMV0gPSBkMTUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdHlwZW9mIG5hdmlnYXRvciA8ICJ1IiAmJiAvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmICEvKENocm9tZVwvfEVkZ2VcLykvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgUDI2Lldvcmtlckdsb2JhbFNjb3BlICYmIFAyNiBpbnN0YW5jZW9mIFAyNi5Xb3JrZXJHbG9iYWxTY29wZSAmJiBbXS5jb25jYXQobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvU2FmYXJpXC8oXGQqKS8pKVsxXSA8IDYwNCAmJiAodDQuX2hhc0dldEFsbCA9IGZhbHNlKTsKICB9CiAgZnVuY3Rpb24gY2kodDQpIHsKICAgIHJldHVybiB0NC5zcGxpdCgiLCIpLm1hcCgoZTUsIG44KSA9PiB7CiAgICAgIGU1ID0gZTUudHJpbSgpOwogICAgICBsZXQgcjMgPSBlNS5yZXBsYWNlKC8oWyYqXXxcK1wrKS9nLCAiIiksIGk0ID0gL15cWy8udGVzdChyMykgPyByMy5tYXRjaCgvXlxbKC4qKVxdJC8pWzFdLnNwbGl0KCIrIikgOiByMzsKICAgICAgcmV0dXJuIHp0OShyMywgaTQgfHwgbnVsbCwgL1wmLy50ZXN0KGU1KSwgL1wqLy50ZXN0KGU1KSwgL1wrXCsvLnRlc3QoZTUpLCBqMTgoaTQpLCBuOCA9PT0gMCk7CiAgICB9KTsKICB9CiAgdmFyIFh0NCA9IGNsYXNzIHsKICAgIF9wYXJzZVN0b3Jlc1NwZWMoZTUsIG44KSB7CiAgICAgIE0yNChlNSkuZm9yRWFjaCgocjMpID0+IHsKICAgICAgICBpZiAoZTVbcjNdICE9PSBudWxsKSB7CiAgICAgICAgICB2YXIgaTQgPSBjaShlNVtyM10pLCBzOCA9IGk0LnNoaWZ0KCk7CiAgICAgICAgICBpZiAoczgubXVsdGkpCiAgICAgICAgICAgIHRocm93IG5ldyBDMTYuU2NoZW1hKCJQcmltYXJ5IGtleSBjYW5ub3QgYmUgbXVsdGktdmFsdWVkIik7CiAgICAgICAgICBpNC5mb3JFYWNoKChvNCkgPT4gewogICAgICAgICAgICBpZiAobzQuYXV0bykKICAgICAgICAgICAgICB0aHJvdyBuZXcgQzE2LlNjaGVtYSgiT25seSBwcmltYXJ5IGtleSBjYW4gYmUgbWFya2VkIGFzIGF1dG9JbmNyZW1lbnQgKCsrKSIpOwogICAgICAgICAgICBpZiAoIW80LmtleVBhdGgpCiAgICAgICAgICAgICAgdGhyb3cgbmV3IEMxNi5TY2hlbWEoIkluZGV4IG11c3QgaGF2ZSBhIG5hbWUgYW5kIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmciKTsKICAgICAgICAgIH0pLCBuOFtyM10gPSBlcjIocjMsIHM4LCBpNCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHN0b3JlcyhlNSkgewogICAgICBsZXQgbjggPSB0aGlzLmRiOwogICAgICB0aGlzLl9jZmcuc3RvcmVzU291cmNlID0gdGhpcy5fY2ZnLnN0b3Jlc1NvdXJjZSA/IEwyMSh0aGlzLl9jZmcuc3RvcmVzU291cmNlLCBlNSkgOiBlNTsKICAgICAgbGV0IHIzID0gbjguX3ZlcnNpb25zLCBpNCA9IHt9LCBzOCA9IHt9OwogICAgICByZXR1cm4gcjMuZm9yRWFjaCgobzQpID0+IHsKICAgICAgICBMMjEoaTQsIG80Ll9jZmcuc3RvcmVzU291cmNlKSwgczggPSBvNC5fY2ZnLmRic2NoZW1hID0ge30sIG80Ll9wYXJzZVN0b3Jlc1NwZWMoaTQsIHM4KTsKICAgICAgfSksIG44Ll9kYlNjaGVtYSA9IHM4LCBXdDEyKG44LCBbbjguX2FsbFRhYmxlcywgbjgsIG44LlRyYW5zYWN0aW9uLnByb3RvdHlwZV0pLCBodDEyKG44LCBbbjguX2FsbFRhYmxlcywgbjgsIG44LlRyYW5zYWN0aW9uLnByb3RvdHlwZSwgdGhpcy5fY2ZnLnRhYmxlc10sIE0yNChzOCksIHM4KSwgbjguX3N0b3JlTmFtZXMgPSBNMjQoczgpLCB0aGlzOwogICAgfQogICAgdXBncmFkZShlNSkgewogICAgICByZXR1cm4gdGhpcy5fY2ZnLmNvbnRlbnRVcGdyYWRlID0gc243KHRoaXMuX2NmZy5jb250ZW50VXBncmFkZSB8fCBSMjUsIGU1KSwgdGhpczsKICAgIH0KICB9OwogIGZ1bmN0aW9uIGZpKHQ0KSB7CiAgICByZXR1cm4gWWU4KFh0NC5wcm90b3R5cGUsIGZ1bmN0aW9uKG44KSB7CiAgICAgIHRoaXMuZGIgPSB0NCwgdGhpcy5fY2ZnID0geyB2ZXJzaW9uOiBuOCwgc3RvcmVzU291cmNlOiBudWxsLCBkYnNjaGVtYToge30sIHRhYmxlczoge30sIGNvbnRlbnRVcGdyYWRlOiBudWxsIH07CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaG40KHQ0LCBlNSkgewogICAgbGV0IG44ID0gdDQuX2RiTmFtZXNEQjsKICAgIHJldHVybiBuOCB8fCAobjggPSB0NC5fZGJOYW1lc0RCID0gbmV3IHVlMTcodnQ5LCB7IGFkZG9uczogW10sIGluZGV4ZWREQjogdDQsIElEQktleVJhbmdlOiBlNSB9KSwgbjgudmVyc2lvbigxKS5zdG9yZXMoeyBkYm5hbWVzOiAibmFtZSIgfSkpLCBuOC50YWJsZSgiZGJuYW1lcyIpOwogIH0KICBmdW5jdGlvbiBkbjModDQpIHsKICAgIHJldHVybiB0NCAmJiB0eXBlb2YgdDQuZGF0YWJhc2VzID09ICJmdW5jdGlvbiI7CiAgfQogIGZ1bmN0aW9uIGhpMih7IGluZGV4ZWREQjogdDQsIElEQktleVJhbmdlOiBlNSB9KSB7CiAgICByZXR1cm4gZG4zKHQ0KSA/IFByb21pc2UucmVzb2x2ZSh0NC5kYXRhYmFzZXMoKSkudGhlbigobjgpID0+IG44Lm1hcCgocjMpID0+IHIzLm5hbWUpLmZpbHRlcigocjMpID0+IHIzICE9PSB2dDkpKSA6IGhuNCh0NCwgZTUpLnRvQ29sbGVjdGlvbigpLnByaW1hcnlLZXlzKCk7CiAgfQogIGZ1bmN0aW9uIGRpMih7IGluZGV4ZWREQjogdDQsIElEQktleVJhbmdlOiBlNSB9LCBuOCkgewogICAgIWRuMyh0NCkgJiYgbjggIT09IHZ0OSAmJiBobjQodDQsIGU1KS5wdXQoeyBuYW1lOiBuOCB9KS5jYXRjaChSMjUpOwogIH0KICBmdW5jdGlvbiBwaTIoeyBpbmRleGVkREI6IHQ0LCBJREJLZXlSYW5nZTogZTUgfSwgbjgpIHsKICAgICFkbjModDQpICYmIG44ICE9PSB2dDkgJiYgaG40KHQ0LCBlNSkuZGVsZXRlKG44KS5jYXRjaChSMjUpOwogIH0KICBmdW5jdGlvbiBRdDYodDQpIHsKICAgIHJldHVybiBsZTE0KGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gQTE5LmxldFRocm91Z2ggPSB0cnVlLCB0NCgpOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIHlpMigpIHsKICAgIHZhciB0NCA9ICFuYXZpZ2F0b3IudXNlckFnZW50RGF0YSAmJiAvU2FmYXJpXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIS9DaHJvbShlfGl1bSlcLy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICAgIGlmICghdDQgfHwgIWluZGV4ZWREQi5kYXRhYmFzZXMpCiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICAgIHZhciBlNTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuOCkgewogICAgICB2YXIgcjMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gaW5kZXhlZERCLmRhdGFiYXNlcygpLmZpbmFsbHkobjgpOwogICAgICB9OwogICAgICBlNSA9IHNldEludGVydmFsKHIzLCAxMDApLCByMygpOwogICAgfSkuZmluYWxseShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZTUpOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIG1pKHQ0KSB7CiAgICBsZXQgZTUgPSB0NC5fc3RhdGUsIHsgaW5kZXhlZERCOiBuOCB9ID0gdDQuX2RlcHM7CiAgICBpZiAoZTUuaXNCZWluZ09wZW5lZCB8fCB0NC5pZGJkYikKICAgICAgcmV0dXJuIGU1LmRiUmVhZHlQcm9taXNlLnRoZW4oKCkgPT4gZTUuZGJPcGVuRXJyb3IgPyBCMjMoZTUuZGJPcGVuRXJyb3IpIDogdDQpOwogICAgcTE5ICYmIChlNS5vcGVuQ2FuY2VsbGVyLl9zdGFja0hvbGRlciA9IHZlMTIoKSksIGU1LmlzQmVpbmdPcGVuZWQgPSB0cnVlLCBlNS5kYk9wZW5FcnJvciA9IG51bGwsIGU1Lm9wZW5Db21wbGV0ZSA9IGZhbHNlOwogICAgbGV0IHIzID0gZTUub3BlbkNhbmNlbGxlcjsKICAgIGZ1bmN0aW9uIGk0KCkgewogICAgICBpZiAoZTUub3BlbkNhbmNlbGxlciAhPT0gcjMpCiAgICAgICAgdGhyb3cgbmV3IEMxNi5EYXRhYmFzZUNsb3NlZCgiZGIub3BlbigpIHdhcyBjYW5jZWxsZWQiKTsKICAgIH0KICAgIGxldCBzOCA9IGU1LmRiUmVhZHlSZXNvbHZlLCBvNCA9IG51bGwsIGE0ID0gZmFsc2U7CiAgICByZXR1cm4gYjI0LnJhY2UoW3IzLCAodHlwZW9mIG5hdmlnYXRvciA+ICJ1IiA/IGIyNC5yZXNvbHZlKCkgOiB5aTIoKSkudGhlbigoKSA9PiBuZXcgYjI0KCh1MTEsIGw3KSA9PiB7CiAgICAgIGlmIChpNCgpLCAhbjgpCiAgICAgICAgdGhyb3cgbmV3IEMxNi5NaXNzaW5nQVBJKCk7CiAgICAgIGxldCBoMTAgPSB0NC5uYW1lLCBkMTUgPSBlNS5hdXRvU2NoZW1hID8gbjgub3BlbihoMTApIDogbjgub3BlbihoMTAsIE1hdGgucm91bmQodDQudmVybm8gKiAxMCkpOwogICAgICBpZiAoIWQxNSkKICAgICAgICB0aHJvdyBuZXcgQzE2Lk1pc3NpbmdBUEkoKTsKICAgICAgZDE1Lm9uZXJyb3IgPSBHMjIobDcpLCBkMTUub25ibG9ja2VkID0gTzE0KHQ0Ll9maXJlT25CbG9ja2VkKSwgZDE1Lm9udXBncmFkZW5lZWRlZCA9IE8xNCgoYzE3KSA9PiB7CiAgICAgICAgaWYgKG80ID0gZDE1LnRyYW5zYWN0aW9uLCBlNS5hdXRvU2NoZW1hICYmICF0NC5fb3B0aW9ucy5hbGxvd0VtcHR5REIpIHsKICAgICAgICAgIGQxNS5vbmVycm9yID0gTmUxMCwgbzQuYWJvcnQoKSwgZDE1LnJlc3VsdC5jbG9zZSgpOwogICAgICAgICAgbGV0IGcxMiA9IG44LmRlbGV0ZURhdGFiYXNlKGgxMCk7CiAgICAgICAgICBnMTIub25zdWNjZXNzID0gZzEyLm9uZXJyb3IgPSBPMTQoKCkgPT4gewogICAgICAgICAgICBsNyhuZXcgQzE2Lk5vU3VjaERhdGFiYXNlKGBEYXRhYmFzZSAke2gxMH0gZG9lc250IGV4aXN0YCkpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG80Lm9uZXJyb3IgPSBHMjIobDcpOwogICAgICAgICAgdmFyIGYxMSA9IGMxNy5vbGRWZXJzaW9uID4gTWF0aC5wb3coMiwgNjIpID8gMCA6IGMxNy5vbGRWZXJzaW9uOwogICAgICAgICAgYTQgPSBmMTEgPCAxLCB0NC5fbm92aXAuaWRiZGIgPSBkMTUucmVzdWx0LCBpaTIodDQsIGYxMSAvIDEwLCBvNCwgbDcpOwogICAgICAgIH0KICAgICAgfSwgbDcpLCBkMTUub25zdWNjZXNzID0gTzE0KCgpID0+IHsKICAgICAgICBvNCA9IG51bGw7CiAgICAgICAgbGV0IGMxNyA9IHQ0Ll9ub3ZpcC5pZGJkYiA9IGQxNS5yZXN1bHQsIGYxMSA9IHl0NyhjMTcub2JqZWN0U3RvcmVOYW1lcyk7CiAgICAgICAgaWYgKGYxMS5sZW5ndGggPiAwKQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbGV0IGcxMiA9IGMxNy50cmFuc2FjdGlvbihxcjIoZjExKSwgInJlYWRvbmx5Iik7CiAgICAgICAgICAgIGU1LmF1dG9TY2hlbWEgPyB1aTIodDQsIGMxNywgZzEyKSA6IChZdDUodDQsIHQ0Ll9kYlNjaGVtYSwgZzEyKSwgbGkyKHQ0LCBnMTIpIHx8IGNvbnNvbGUud2FybigiRGV4aWUgU2NoZW1hRGlmZjogU2NoZW1hIHdhcyBleHRlbmRlZCB3aXRob3V0IGluY3JlYXNpbmcgdGhlIG51bWJlciBwYXNzZWQgdG8gZGIudmVyc2lvbigpLiBTb21lIHF1ZXJpZXMgbWF5IGZhaWwuIikpLCBsbjIodDQsIGcxMik7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICBrZTE1LnB1c2godDQpLCBjMTcub252ZXJzaW9uY2hhbmdlID0gTzE0KChnMTIpID0+IHsKICAgICAgICAgIGU1LnZjRmlyZWQgPSB0cnVlLCB0NC5vbigidmVyc2lvbmNoYW5nZSIpLmZpcmUoZzEyKTsKICAgICAgICB9KSwgYzE3Lm9uY2xvc2UgPSBPMTQoKGcxMikgPT4gewogICAgICAgICAgdDQub24oImNsb3NlIikuZmlyZShnMTIpOwogICAgICAgIH0pLCBhNCAmJiBkaTIodDQuX2RlcHMsIGgxMCksIHUxMSgpOwogICAgICB9LCBsNyk7CiAgICB9KSldKS50aGVuKCgpID0+IChpNCgpLCBlNS5vblJlYWR5QmVpbmdGaXJlZCA9IFtdLCBiMjQucmVzb2x2ZShRdDYoKCkgPT4gdDQub24ucmVhZHkuZmlyZSh0NC52aXApKSkudGhlbihmdW5jdGlvbiB1MTEoKSB7CiAgICAgIGlmIChlNS5vblJlYWR5QmVpbmdGaXJlZC5sZW5ndGggPiAwKSB7CiAgICAgICAgbGV0IGw3ID0gZTUub25SZWFkeUJlaW5nRmlyZWQucmVkdWNlKHNuNywgUjI1KTsKICAgICAgICByZXR1cm4gZTUub25SZWFkeUJlaW5nRmlyZWQgPSBbXSwgYjI0LnJlc29sdmUoUXQ2KCgpID0+IGw3KHQ0LnZpcCkpKS50aGVuKHUxMSk7CiAgICAgIH0KICAgIH0pKSkuZmluYWxseSgoKSA9PiB7CiAgICAgIGU1Lm9uUmVhZHlCZWluZ0ZpcmVkID0gbnVsbCwgZTUuaXNCZWluZ09wZW5lZCA9IGZhbHNlOwogICAgfSkudGhlbigoKSA9PiB0NCkuY2F0Y2goKHUxMSkgPT4gewogICAgICBlNS5kYk9wZW5FcnJvciA9IHUxMTsKICAgICAgdHJ5IHsKICAgICAgICBvNCAmJiBvNC5hYm9ydCgpOwogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgICByZXR1cm4gcjMgPT09IGU1Lm9wZW5DYW5jZWxsZXIgJiYgdDQuX2Nsb3NlKCksIEIyMyh1MTEpOwogICAgfSkuZmluYWxseSgoKSA9PiB7CiAgICAgIGU1Lm9wZW5Db21wbGV0ZSA9IHRydWUsIHM4KCk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gR3Q0KHQ0KSB7CiAgICB2YXIgZTUgPSAobzQpID0+IHQ0Lm5leHQobzQpLCBuOCA9IChvNCkgPT4gdDQudGhyb3cobzQpLCByMyA9IHM4KGU1KSwgaTQgPSBzOChuOCk7CiAgICBmdW5jdGlvbiBzOChvNCkgewogICAgICByZXR1cm4gKGE0KSA9PiB7CiAgICAgICAgdmFyIHUxMSA9IG80KGE0KSwgbDcgPSB1MTEudmFsdWU7CiAgICAgICAgcmV0dXJuIHUxMS5kb25lID8gbDcgOiAhbDcgfHwgdHlwZW9mIGw3LnRoZW4gIT0gImZ1bmN0aW9uIiA/IGoxOChsNykgPyBQcm9taXNlLmFsbChsNykudGhlbihyMywgaTQpIDogcjMobDcpIDogbDcudGhlbihyMywgaTQpOwogICAgICB9OwogICAgfQogICAgcmV0dXJuIHM4KGU1KSgpOwogIH0KICBmdW5jdGlvbiBnaSh0NCwgZTUsIG44KSB7CiAgICB2YXIgcjMgPSBhcmd1bWVudHMubGVuZ3RoOwogICAgaWYgKHIzIDwgMikKICAgICAgdGhyb3cgbmV3IEMxNi5JbnZhbGlkQXJndW1lbnQoIlRvbyBmZXcgYXJndW1lbnRzIik7CiAgICBmb3IgKHZhciBpNCA9IG5ldyBBcnJheShyMyAtIDEpOyAtLXIzOyApCiAgICAgIGk0W3IzIC0gMV0gPSBhcmd1bWVudHNbcjNdOwogICAgbjggPSBpNC5wb3AoKTsKICAgIHZhciBzOCA9IE9uMyhpNCk7CiAgICByZXR1cm4gW3Q0LCBzOCwgbjhdOwogIH0KICBmdW5jdGlvbiBucjIodDQsIGU1LCBuOCwgcjMsIGk0KSB7CiAgICByZXR1cm4gYjI0LnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgbGV0IHM4ID0gQTE5LnRyYW5zbGVzcyB8fCBBMTksIG80ID0gdDQuX2NyZWF0ZVRyYW5zYWN0aW9uKGU1LCBuOCwgdDQuX2RiU2NoZW1hLCByMyksIGE0ID0geyB0cmFuczogbzQsIHRyYW5zbGVzczogczggfTsKICAgICAgaWYgKHIzKQogICAgICAgIG80LmlkYnRyYW5zID0gcjMuaWRidHJhbnM7CiAgICAgIGVsc2UKICAgICAgICB0cnkgewogICAgICAgICAgbzQuY3JlYXRlKCksIHQ0Ll9zdGF0ZS5QUjEzOThfbWF4TG9vcCA9IDM7CiAgICAgICAgfSBjYXRjaCAoZDE1KSB7CiAgICAgICAgICByZXR1cm4gZDE1Lm5hbWUgPT09IHJuNC5JbnZhbGlkU3RhdGUgJiYgdDQuaXNPcGVuKCkgJiYgLS10NC5fc3RhdGUuUFIxMzk4X21heExvb3AgPiAwID8gKGNvbnNvbGUud2FybigiRGV4aWU6IE5lZWQgdG8gcmVvcGVuIGRiIiksIHQ0Ll9jbG9zZSgpLCB0NC5vcGVuKCkudGhlbigoKSA9PiBucjIodDQsIGU1LCBuOCwgbnVsbCwgaTQpKSkgOiBCMjMoZDE1KTsKICAgICAgICB9CiAgICAgIGxldCB1MTEgPSB0bjQoaTQpOwogICAgICB1MTEgJiYgS2U1KCk7CiAgICAgIGxldCBsNywgaDEwID0gYjI0LmZvbGxvdygoKSA9PiB7CiAgICAgICAgaWYgKGw3ID0gaTQuY2FsbChvNCwgbzQpLCBsNykKICAgICAgICAgIGlmICh1MTEpIHsKICAgICAgICAgICAgdmFyIGQxNSA9IGllMTIuYmluZChudWxsLCBudWxsKTsKICAgICAgICAgICAgbDcudGhlbihkMTUsIGQxNSk7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgdHlwZW9mIGw3Lm5leHQgPT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgbDcudGhyb3cgPT0gImZ1bmN0aW9uIiAmJiAobDcgPSBHdDQobDcpKTsKICAgICAgfSwgYTQpOwogICAgICByZXR1cm4gKGw3ICYmIHR5cGVvZiBsNy50aGVuID09ICJmdW5jdGlvbiIgPyBiMjQucmVzb2x2ZShsNykudGhlbigoZDE1KSA9PiBvNC5hY3RpdmUgPyBkMTUgOiBCMjMobmV3IEMxNi5QcmVtYXR1cmVDb21taXQoIlRyYW5zYWN0aW9uIGNvbW1pdHRlZCB0b28gZWFybHkuIFNlZSBodHRwOi8vYml0Lmx5LzJrZGNrTW4iKSkpIDogaDEwLnRoZW4oKCkgPT4gbDcpKS50aGVuKChkMTUpID0+IChyMyAmJiBvNC5fcmVzb2x2ZSgpLCBvNC5fY29tcGxldGlvbi50aGVuKCgpID0+IGQxNSkpKS5jYXRjaCgoZDE1KSA9PiAobzQuX3JlamVjdChkMTUpLCBCMjMoZDE1KSkpOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIEplNyh0NCwgZTUsIG44KSB7CiAgICBsZXQgcjMgPSBqMTgodDQpID8gdDQuc2xpY2UoKSA6IFt0NF07CiAgICBmb3IgKGxldCBpNCA9IDA7IGk0IDwgbjg7ICsraTQpCiAgICAgIHIzLnB1c2goZTUpOwogICAgcmV0dXJuIHIzOwogIH0KICBmdW5jdGlvbiB2aTIodDQpIHsKICAgIHJldHVybiB7IC4uLnQ0LCB0YWJsZShlNSkgewogICAgICBsZXQgbjggPSB0NC50YWJsZShlNSksIHsgc2NoZW1hOiByMyB9ID0gbjgsIGk0ID0ge30sIHM4ID0gW107CiAgICAgIGZ1bmN0aW9uIG80KGMxNywgZjExLCBnMTIpIHsKICAgICAgICBsZXQgcDE4ID0gT2UxMyhjMTcpLCB2MTUgPSBpNFtwMThdID0gaTRbcDE4XSB8fCBbXSwgeTE3ID0gYzE3ID09IG51bGwgPyAwIDogdHlwZW9mIGMxNyA9PSAic3RyaW5nIiA/IDEgOiBjMTcubGVuZ3RoLCBfMjUgPSBmMTEgPiAwLCB3MjEgPSB7IC4uLmcxMiwgaXNWaXJ0dWFsOiBfMjUsIGtleVRhaWw6IGYxMSwga2V5TGVuZ3RoOiB5MTcsIGV4dHJhY3RLZXk6IFV0OShjMTcpLCB1bmlxdWU6ICFfMjUgJiYgZzEyLnVuaXF1ZSB9OwogICAgICAgIGlmICh2MTUucHVzaCh3MjEpLCB3MjEuaXNQcmltYXJ5S2V5IHx8IHM4LnB1c2godzIxKSwgeTE3ID4gMSkgewogICAgICAgICAgbGV0IG0yMyA9IHkxNyA9PT0gMiA/IGMxN1swXSA6IGMxNy5zbGljZSgwLCB5MTcgLSAxKTsKICAgICAgICAgIG80KG0yMywgZjExICsgMSwgZzEyKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHYxNS5zb3J0KChtMjMsIHgyMSkgPT4gbTIzLmtleVRhaWwgLSB4MjEua2V5VGFpbCksIHcyMTsKICAgICAgfQogICAgICBsZXQgYTQgPSBvNChyMy5wcmltYXJ5S2V5LmtleVBhdGgsIDAsIHIzLnByaW1hcnlLZXkpOwogICAgICBpNFsiOmlkIl0gPSBbYTRdOwogICAgICBmb3IgKGxldCBjMTcgb2YgcjMuaW5kZXhlcykKICAgICAgICBvNChjMTcua2V5UGF0aCwgMCwgYzE3KTsKICAgICAgZnVuY3Rpb24gdTExKGMxNykgewogICAgICAgIGxldCBmMTEgPSBpNFtPZTEzKGMxNyldOwogICAgICAgIHJldHVybiBmMTEgJiYgZjExWzBdOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGw3KGMxNywgZjExKSB7CiAgICAgICAgcmV0dXJuIHsgdHlwZTogYzE3LnR5cGUgPT09IDEgPyAyIDogYzE3LnR5cGUsIGxvd2VyOiBKZTcoYzE3Lmxvd2VyLCBjMTcubG93ZXJPcGVuID8gdDQuTUFYX0tFWSA6IHQ0Lk1JTl9LRVksIGYxMSksIGxvd2VyT3BlbjogdHJ1ZSwgdXBwZXI6IEplNyhjMTcudXBwZXIsIGMxNy51cHBlck9wZW4gPyB0NC5NSU5fS0VZIDogdDQuTUFYX0tFWSwgZjExKSwgdXBwZXJPcGVuOiB0cnVlIH07CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaDEwKGMxNykgewogICAgICAgIGxldCBmMTEgPSBjMTcucXVlcnkuaW5kZXg7CiAgICAgICAgcmV0dXJuIGYxMS5pc1ZpcnR1YWwgPyB7IC4uLmMxNywgcXVlcnk6IHsgaW5kZXg6IGYxMSwgcmFuZ2U6IGw3KGMxNy5xdWVyeS5yYW5nZSwgZjExLmtleVRhaWwpIH0gfSA6IGMxNzsKICAgICAgfQogICAgICByZXR1cm4geyAuLi5uOCwgc2NoZW1hOiB7IC4uLnIzLCBwcmltYXJ5S2V5OiBhNCwgaW5kZXhlczogczgsIGdldEluZGV4QnlLZXlQYXRoOiB1MTEgfSwgY291bnQoYzE3KSB7CiAgICAgICAgcmV0dXJuIG44LmNvdW50KGgxMChjMTcpKTsKICAgICAgfSwgcXVlcnkoYzE3KSB7CiAgICAgICAgcmV0dXJuIG44LnF1ZXJ5KGgxMChjMTcpKTsKICAgICAgfSwgb3BlbkN1cnNvcihjMTcpIHsKICAgICAgICBsZXQgeyBrZXlUYWlsOiBmMTEsIGlzVmlydHVhbDogZzEyLCBrZXlMZW5ndGg6IHAxOCB9ID0gYzE3LnF1ZXJ5LmluZGV4OwogICAgICAgIGlmICghZzEyKQogICAgICAgICAgcmV0dXJuIG44Lm9wZW5DdXJzb3IoYzE3KTsKICAgICAgICBmdW5jdGlvbiB2MTUoeTE3KSB7CiAgICAgICAgICBmdW5jdGlvbiBfMjUobTIzKSB7CiAgICAgICAgICAgIG0yMyAhPSBudWxsID8geTE3LmNvbnRpbnVlKEplNyhtMjMsIGMxNy5yZXZlcnNlID8gdDQuTUFYX0tFWSA6IHQ0Lk1JTl9LRVksIGYxMSkpIDogYzE3LnVuaXF1ZSA/IHkxNy5jb250aW51ZSh5MTcua2V5LnNsaWNlKDAsIHAxOCkuY29uY2F0KGMxNy5yZXZlcnNlID8gdDQuTUlOX0tFWSA6IHQ0Lk1BWF9LRVksIGYxMSkpIDogeTE3LmNvbnRpbnVlKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh5MTcsIHsgY29udGludWU6IHsgdmFsdWU6IF8yNSB9LCBjb250aW51ZVByaW1hcnlLZXk6IHsgdmFsdWUobTIzLCB4MjEpIHsKICAgICAgICAgICAgeTE3LmNvbnRpbnVlUHJpbWFyeUtleShKZTcobTIzLCB0NC5NQVhfS0VZLCBmMTEpLCB4MjEpOwogICAgICAgICAgfSB9LCBwcmltYXJ5S2V5OiB7IGdldCgpIHsKICAgICAgICAgICAgcmV0dXJuIHkxNy5wcmltYXJ5S2V5OwogICAgICAgICAgfSB9LCBrZXk6IHsgZ2V0KCkgewogICAgICAgICAgICBsZXQgbTIzID0geTE3LmtleTsKICAgICAgICAgICAgcmV0dXJuIHAxOCA9PT0gMSA/IG0yM1swXSA6IG0yMy5zbGljZSgwLCBwMTgpOwogICAgICAgICAgfSB9LCB2YWx1ZTogeyBnZXQoKSB7CiAgICAgICAgICAgIHJldHVybiB5MTcudmFsdWU7CiAgICAgICAgICB9IH0gfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuOC5vcGVuQ3Vyc29yKGgxMChjMTcpKS50aGVuKCh5MTcpID0+IHkxNyAmJiB2MTUoeTE3KSk7CiAgICAgIH0gfTsKICAgIH0gfTsKICB9CiAgdmFyIF9pMiA9IHsgc3RhY2s6ICJkYmNvcmUiLCBuYW1lOiAiVmlydHVhbEluZGV4TWlkZGxld2FyZSIsIGxldmVsOiAxLCBjcmVhdGU6IHZpMiB9OwogIGZ1bmN0aW9uIHBuMih0NCwgZTUsIG44LCByMykgewogICAgcmV0dXJuIG44ID0gbjggfHwge30sIHIzID0gcjMgfHwgIiIsIE0yNCh0NCkuZm9yRWFjaCgoaTQpID0+IHsKICAgICAgaWYgKCFXMTcoZTUsIGk0KSkKICAgICAgICBuOFtyMyArIGk0XSA9IHZvaWQgMDsKICAgICAgZWxzZSB7CiAgICAgICAgdmFyIHM4ID0gdDRbaTRdLCBvNCA9IGU1W2k0XTsKICAgICAgICBpZiAodHlwZW9mIHM4ID09ICJvYmplY3QiICYmIHR5cGVvZiBvNCA9PSAib2JqZWN0IiAmJiBzOCAmJiBvNCkgewogICAgICAgICAgbGV0IGE0ID0gS3Q1KHM4KSwgdTExID0gS3Q1KG80KTsKICAgICAgICAgIGE0ICE9PSB1MTEgPyBuOFtyMyArIGk0XSA9IGU1W2k0XSA6IGE0ID09PSAiT2JqZWN0IiA/IHBuMihzOCwgbzQsIG44LCByMyArIGk0ICsgIi4iKSA6IHM4ICE9PSBvNCAmJiAobjhbcjMgKyBpNF0gPSBlNVtpNF0pOwogICAgICAgIH0gZWxzZQogICAgICAgICAgczggIT09IG80ICYmIChuOFtyMyArIGk0XSA9IGU1W2k0XSk7CiAgICAgIH0KICAgIH0pLCBNMjQoZTUpLmZvckVhY2goKGk0KSA9PiB7CiAgICAgIFcxNyh0NCwgaTQpIHx8IChuOFtyMyArIGk0XSA9IGU1W2k0XSk7CiAgICB9KSwgbjg7CiAgfQogIGZ1bmN0aW9uIHdpMih0NCwgZTUpIHsKICAgIHJldHVybiBlNS50eXBlID09PSAiZGVsZXRlIiA/IGU1LmtleXMgOiBlNS5rZXlzIHx8IGU1LnZhbHVlcy5tYXAodDQuZXh0cmFjdEtleSk7CiAgfQogIHZhciBiaTIgPSB7IHN0YWNrOiAiZGJjb3JlIiwgbmFtZTogIkhvb2tzTWlkZGxld2FyZSIsIGxldmVsOiAyLCBjcmVhdGU6ICh0NCkgPT4gKHsgLi4udDQsIHRhYmxlKGU1KSB7CiAgICBsZXQgbjggPSB0NC50YWJsZShlNSksIHsgcHJpbWFyeUtleTogcjMgfSA9IG44LnNjaGVtYTsKICAgIHJldHVybiB7IC4uLm44LCBtdXRhdGUoczgpIHsKICAgICAgbGV0IG80ID0gQTE5LnRyYW5zLCB7IGRlbGV0aW5nOiBhNCwgY3JlYXRpbmc6IHUxMSwgdXBkYXRpbmc6IGw3IH0gPSBvNC50YWJsZShlNSkuaG9vazsKICAgICAgc3dpdGNoIChzOC50eXBlKSB7CiAgICAgICAgY2FzZSAiYWRkIjoKICAgICAgICAgIGlmICh1MTEuZmlyZSA9PT0gUjI1KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIHJldHVybiBvNC5fcHJvbWlzZSgicmVhZHdyaXRlIiwgKCkgPT4gaDEwKHM4KSwgdHJ1ZSk7CiAgICAgICAgY2FzZSAicHV0IjoKICAgICAgICAgIGlmICh1MTEuZmlyZSA9PT0gUjI1ICYmIGw3LmZpcmUgPT09IFIyNSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICByZXR1cm4gbzQuX3Byb21pc2UoInJlYWR3cml0ZSIsICgpID0+IGgxMChzOCksIHRydWUpOwogICAgICAgIGNhc2UgImRlbGV0ZSI6CiAgICAgICAgICBpZiAoYTQuZmlyZSA9PT0gUjI1KQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIHJldHVybiBvNC5fcHJvbWlzZSgicmVhZHdyaXRlIiwgKCkgPT4gaDEwKHM4KSwgdHJ1ZSk7CiAgICAgICAgY2FzZSAiZGVsZXRlUmFuZ2UiOgogICAgICAgICAgaWYgKGE0LmZpcmUgPT09IFIyNSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICByZXR1cm4gbzQuX3Byb21pc2UoInJlYWR3cml0ZSIsICgpID0+IGQxNShzOCksIHRydWUpOwogICAgICB9CiAgICAgIHJldHVybiBuOC5tdXRhdGUoczgpOwogICAgICBmdW5jdGlvbiBoMTAoZjExKSB7CiAgICAgICAgbGV0IGcxMiA9IEExOS50cmFucywgcDE4ID0gZjExLmtleXMgfHwgd2kyKHIzLCBmMTEpOwogICAgICAgIGlmICghcDE4KQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJLZXlzIG1pc3NpbmciKTsKICAgICAgICByZXR1cm4gZjExID0gZjExLnR5cGUgPT09ICJhZGQiIHx8IGYxMS50eXBlID09PSAicHV0IiA/IHsgLi4uZjExLCBrZXlzOiBwMTggfSA6IHsgLi4uZjExIH0sIGYxMS50eXBlICE9PSAiZGVsZXRlIiAmJiAoZjExLnZhbHVlcyA9IFsuLi5mMTEudmFsdWVzXSksIGYxMS5rZXlzICYmIChmMTEua2V5cyA9IFsuLi5mMTEua2V5c10pLCB4aShuOCwgZjExLCBwMTgpLnRoZW4oKHYxNSkgPT4gewogICAgICAgICAgbGV0IHkxNyA9IHAxOC5tYXAoKF8yNSwgdzIxKSA9PiB7CiAgICAgICAgICAgIGxldCBtMjMgPSB2MTVbdzIxXSwgeDIxID0geyBvbmVycm9yOiBudWxsLCBvbnN1Y2Nlc3M6IG51bGwgfTsKICAgICAgICAgICAgaWYgKGYxMS50eXBlID09PSAiZGVsZXRlIikKICAgICAgICAgICAgICBhNC5maXJlLmNhbGwoeDIxLCBfMjUsIG0yMywgZzEyKTsKICAgICAgICAgICAgZWxzZSBpZiAoZjExLnR5cGUgPT09ICJhZGQiIHx8IG0yMyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgbGV0IEUxNSA9IHUxMS5maXJlLmNhbGwoeDIxLCBfMjUsIGYxMS52YWx1ZXNbdzIxXSwgZzEyKTsKICAgICAgICAgICAgICBfMjUgPT0gbnVsbCAmJiBFMTUgIT0gbnVsbCAmJiAoXzI1ID0gRTE1LCBmMTEua2V5c1t3MjFdID0gXzI1LCByMy5vdXRib3VuZCB8fCBRMTYoZjExLnZhbHVlc1t3MjFdLCByMy5rZXlQYXRoLCBfMjUpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZXQgRTE1ID0gcG4yKG0yMywgZjExLnZhbHVlc1t3MjFdKSwgUzIxID0gbDcuZmlyZS5jYWxsKHgyMSwgRTE1LCBfMjUsIG0yMywgZzEyKTsKICAgICAgICAgICAgICBpZiAoUzIxKSB7CiAgICAgICAgICAgICAgICBsZXQgSzE5ID0gZjExLnZhbHVlc1t3MjFdOwogICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoUzIxKS5mb3JFYWNoKChJMjcpID0+IHsKICAgICAgICAgICAgICAgICAgVzE3KEsxOSwgSTI3KSA/IEsxOVtJMjddID0gUzIxW0kyN10gOiBRMTYoSzE5LCBJMjcsIFMyMVtJMjddKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4geDIxOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gbjgubXV0YXRlKGYxMSkudGhlbigoeyBmYWlsdXJlczogXzI1LCByZXN1bHRzOiB3MjEsIG51bUZhaWx1cmVzOiBtMjMsIGxhc3RSZXN1bHQ6IHgyMSB9KSA9PiB7CiAgICAgICAgICAgIGZvciAobGV0IEUxNSA9IDA7IEUxNSA8IHAxOC5sZW5ndGg7ICsrRTE1KSB7CiAgICAgICAgICAgICAgbGV0IFMyMSA9IHcyMSA/IHcyMVtFMTVdIDogcDE4W0UxNV0sIEsxOSA9IHkxN1tFMTVdOwogICAgICAgICAgICAgIFMyMSA9PSBudWxsID8gSzE5Lm9uZXJyb3IgJiYgSzE5Lm9uZXJyb3IoXzI1W0UxNV0pIDogSzE5Lm9uc3VjY2VzcyAmJiBLMTkub25zdWNjZXNzKGYxMS50eXBlID09PSAicHV0IiAmJiB2MTVbRTE1XSA/IGYxMS52YWx1ZXNbRTE1XSA6IFMyMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHsgZmFpbHVyZXM6IF8yNSwgcmVzdWx0czogdzIxLCBudW1GYWlsdXJlczogbTIzLCBsYXN0UmVzdWx0OiB4MjEgfTsKICAgICAgICAgIH0pLmNhdGNoKChfMjUpID0+ICh5MTcuZm9yRWFjaCgodzIxKSA9PiB3MjEub25lcnJvciAmJiB3MjEub25lcnJvcihfMjUpKSwgUHJvbWlzZS5yZWplY3QoXzI1KSkpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGQxNShmMTEpIHsKICAgICAgICByZXR1cm4gYzE3KGYxMS50cmFucywgZjExLnJhbmdlLCAxZTQpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGMxNyhmMTEsIGcxMiwgcDE4KSB7CiAgICAgICAgcmV0dXJuIG44LnF1ZXJ5KHsgdHJhbnM6IGYxMSwgdmFsdWVzOiBmYWxzZSwgcXVlcnk6IHsgaW5kZXg6IHIzLCByYW5nZTogZzEyIH0sIGxpbWl0OiBwMTggfSkudGhlbigoeyByZXN1bHQ6IHYxNSB9KSA9PiBoMTAoeyB0eXBlOiAiZGVsZXRlIiwga2V5czogdjE1LCB0cmFuczogZjExIH0pLnRoZW4oKHkxNykgPT4geTE3Lm51bUZhaWx1cmVzID4gMCA/IFByb21pc2UucmVqZWN0KHkxNy5mYWlsdXJlc1swXSkgOiB2MTUubGVuZ3RoIDwgcDE4ID8geyBmYWlsdXJlczogW10sIG51bUZhaWx1cmVzOiAwLCBsYXN0UmVzdWx0OiB2b2lkIDAgfSA6IGMxNyhmMTEsIHsgLi4uZzEyLCBsb3dlcjogdjE1W3YxNS5sZW5ndGggLSAxXSwgbG93ZXJPcGVuOiB0cnVlIH0sIHAxOCkpKTsKICAgICAgfQogICAgfSB9OwogIH0gfSkgfTsKICBmdW5jdGlvbiB4aSh0NCwgZTUsIG44KSB7CiAgICByZXR1cm4gZTUudHlwZSA9PT0gImFkZCIgPyBQcm9taXNlLnJlc29sdmUoW10pIDogdDQuZ2V0TWFueSh7IHRyYW5zOiBlNS50cmFucywga2V5czogbjgsIGNhY2hlOiAiaW1tdXRhYmxlIiB9KTsKICB9CiAgZnVuY3Rpb24gcnIyKHQ0LCBlNSwgbjgpIHsKICAgIHRyeSB7CiAgICAgIGlmICghZTUgfHwgZTUua2V5cy5sZW5ndGggPCB0NC5sZW5ndGgpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIGxldCByMyA9IFtdOwogICAgICBmb3IgKGxldCBpNCA9IDAsIHM4ID0gMDsgaTQgPCBlNS5rZXlzLmxlbmd0aCAmJiBzOCA8IHQ0Lmxlbmd0aDsgKytpNCkKICAgICAgICBWMjAoZTUua2V5c1tpNF0sIHQ0W3M4XSkgPT09IDAgJiYgKHIzLnB1c2gobjggPyAkZTExKGU1LnZhbHVlc1tpNF0pIDogZTUudmFsdWVzW2k0XSksICsrczgpOwogICAgICByZXR1cm4gcjMubGVuZ3RoID09PSB0NC5sZW5ndGggPyByMyA6IG51bGw7CiAgICB9IGNhdGNoIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQogIHZhciBFaTIgPSB7IHN0YWNrOiAiZGJjb3JlIiwgbGV2ZWw6IC0xLCBjcmVhdGU6ICh0NCkgPT4gKHsgdGFibGU6IChlNSkgPT4gewogICAgbGV0IG44ID0gdDQudGFibGUoZTUpOwogICAgcmV0dXJuIHsgLi4ubjgsIGdldE1hbnk6IChyMykgPT4gewogICAgICBpZiAoIXIzLmNhY2hlKQogICAgICAgIHJldHVybiBuOC5nZXRNYW55KHIzKTsKICAgICAgbGV0IGk0ID0gcnIyKHIzLmtleXMsIHIzLnRyYW5zLl9jYWNoZSwgcjMuY2FjaGUgPT09ICJjbG9uZSIpOwogICAgICByZXR1cm4gaTQgPyBiMjQucmVzb2x2ZShpNCkgOiBuOC5nZXRNYW55KHIzKS50aGVuKChzOCkgPT4gKHIzLnRyYW5zLl9jYWNoZSA9IHsga2V5czogcjMua2V5cywgdmFsdWVzOiByMy5jYWNoZSA9PT0gImNsb25lIiA/ICRlMTEoczgpIDogczggfSwgczgpKTsKICAgIH0sIG11dGF0ZTogKHIzKSA9PiAocjMudHlwZSAhPT0gImFkZCIgJiYgKHIzLnRyYW5zLl9jYWNoZSA9IG51bGwpLCBuOC5tdXRhdGUocjMpKSB9OwogIH0gfSkgfTsKICBmdW5jdGlvbiB5bjQodDQpIHsKICAgIHJldHVybiAhKCJmcm9tIiBpbiB0NCk7CiAgfQogIHZhciBaMjEgPSBmdW5jdGlvbih0NCwgZTUpIHsKICAgIGlmICh0aGlzKQogICAgICBMMjEodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IHsgZDogMSwgZnJvbTogdDQsIHRvOiBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGU1IDogdDQgfSA6IHsgZDogMCB9KTsKICAgIGVsc2UgewogICAgICBsZXQgbjggPSBuZXcgWjIxKCk7CiAgICAgIHJldHVybiB0NCAmJiAiZCIgaW4gdDQgJiYgTDIxKG44LCB0NCksIG44OwogICAgfQogIH07CiAgU2UxMyhaMjEucHJvdG90eXBlLCB7IGFkZCh0NCkgewogICAgcmV0dXJuIGR0OSh0aGlzLCB0NCksIHRoaXM7CiAgfSwgYWRkS2V5KHQ0KSB7CiAgICByZXR1cm4gTGU5KHRoaXMsIHQ0LCB0NCksIHRoaXM7CiAgfSwgYWRkS2V5cyh0NCkgewogICAgcmV0dXJuIHQ0LmZvckVhY2goKGU1KSA9PiBMZTkodGhpcywgZTUsIGU1KSksIHRoaXM7CiAgfSwgW1R0MTBdKCkgewogICAgcmV0dXJuIHF0NSh0aGlzKTsKICB9IH0pOwogIGZ1bmN0aW9uIExlOSh0NCwgZTUsIG44KSB7CiAgICBsZXQgcjMgPSBWMjAoZTUsIG44KTsKICAgIGlmIChpc05hTihyMykpCiAgICAgIHJldHVybjsKICAgIGlmIChyMyA+IDApCiAgICAgIHRocm93IFJhbmdlRXJyb3IoKTsKICAgIGlmICh5bjQodDQpKQogICAgICByZXR1cm4gTDIxKHQ0LCB7IGZyb206IGU1LCB0bzogbjgsIGQ6IDEgfSk7CiAgICBsZXQgaTQgPSB0NC5sLCBzOCA9IHQ0LnI7CiAgICBpZiAoVjIwKG44LCB0NC5mcm9tKSA8IDApCiAgICAgIHJldHVybiBpNCA/IExlOShpNCwgZTUsIG44KSA6IHQ0LmwgPSB7IGZyb206IGU1LCB0bzogbjgsIGQ6IDEsIGw6IG51bGwsIHI6IG51bGwgfSwgS24zKHQ0KTsKICAgIGlmIChWMjAoZTUsIHQ0LnRvKSA+IDApCiAgICAgIHJldHVybiBzOCA/IExlOShzOCwgZTUsIG44KSA6IHQ0LnIgPSB7IGZyb206IGU1LCB0bzogbjgsIGQ6IDEsIGw6IG51bGwsIHI6IG51bGwgfSwgS24zKHQ0KTsKICAgIFYyMChlNSwgdDQuZnJvbSkgPCAwICYmICh0NC5mcm9tID0gZTUsIHQ0LmwgPSBudWxsLCB0NC5kID0gczggPyBzOC5kICsgMSA6IDEpLCBWMjAobjgsIHQ0LnRvKSA+IDAgJiYgKHQ0LnRvID0gbjgsIHQ0LnIgPSBudWxsLCB0NC5kID0gdDQubCA/IHQ0LmwuZCArIDEgOiAxKTsKICAgIGxldCBvNCA9ICF0NC5yOwogICAgaTQgJiYgIXQ0LmwgJiYgZHQ5KHQ0LCBpNCksIHM4ICYmIG80ICYmIGR0OSh0NCwgczgpOwogIH0KICBmdW5jdGlvbiBkdDkodDQsIGU1KSB7CiAgICBmdW5jdGlvbiBuOChyMywgeyBmcm9tOiBpNCwgdG86IHM4LCBsOiBvNCwgcjogYTQgfSkgewogICAgICBMZTkocjMsIGk0LCBzOCksIG80ICYmIG44KHIzLCBvNCksIGE0ICYmIG44KHIzLCBhNCk7CiAgICB9CiAgICB5bjQoZTUpIHx8IG44KHQ0LCBlNSk7CiAgfQogIGZ1bmN0aW9uIFNpMih0NCwgZTUpIHsKICAgIGxldCBuOCA9IHF0NShlNSksIHIzID0gbjgubmV4dCgpOwogICAgaWYgKHIzLmRvbmUpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGxldCBpNCA9IHIzLnZhbHVlLCBzOCA9IHF0NSh0NCksIG80ID0gczgubmV4dChpNC5mcm9tKSwgYTQgPSBvNC52YWx1ZTsKICAgIGZvciAoOyAhcjMuZG9uZSAmJiAhbzQuZG9uZTsgKSB7CiAgICAgIGlmIChWMjAoYTQuZnJvbSwgaTQudG8pIDw9IDAgJiYgVjIwKGE0LnRvLCBpNC5mcm9tKSA+PSAwKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBWMjAoaTQuZnJvbSwgYTQuZnJvbSkgPCAwID8gaTQgPSAocjMgPSBuOC5uZXh0KGE0LmZyb20pKS52YWx1ZSA6IGE0ID0gKG80ID0gczgubmV4dChpNC5mcm9tKSkudmFsdWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHF0NSh0NCkgewogICAgbGV0IGU1ID0geW40KHQ0KSA/IG51bGwgOiB7IHM6IDAsIG46IHQ0IH07CiAgICByZXR1cm4geyBuZXh0KG44KSB7CiAgICAgIGxldCByMyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwOwogICAgICBmb3IgKDsgZTU7ICkKICAgICAgICBzd2l0Y2ggKGU1LnMpIHsKICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgaWYgKGU1LnMgPSAxLCByMykKICAgICAgICAgICAgICBmb3IgKDsgZTUubi5sICYmIFYyMChuOCwgZTUubi5mcm9tKSA8IDA7ICkKICAgICAgICAgICAgICAgIGU1ID0geyB1cDogZTUsIG46IGU1Lm4ubCwgczogMSB9OwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgZm9yICg7IGU1Lm4ubDsgKQogICAgICAgICAgICAgICAgZTUgPSB7IHVwOiBlNSwgbjogZTUubi5sLCBzOiAxIH07CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGlmIChlNS5zID0gMiwgIXIzIHx8IFYyMChuOCwgZTUubi50bykgPD0gMCkKICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogZTUubiwgZG9uZTogZmFsc2UgfTsKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgaWYgKGU1Lm4ucikgewogICAgICAgICAgICAgIGU1LnMgPSAzLCBlNSA9IHsgdXA6IGU1LCBuOiBlNS5uLnIsIHM6IDAgfTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBlNSA9IGU1LnVwOwogICAgICAgIH0KICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OwogICAgfSB9OwogIH0KICBmdW5jdGlvbiBLbjModDQpIHsKICAgIHZhciBlNSwgbjg7CiAgICBsZXQgcjMgPSAoKChlNSA9IHQ0LnIpID09PSBudWxsIHx8IGU1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlNS5kKSB8fCAwKSAtICgoKG44ID0gdDQubCkgPT09IG51bGwgfHwgbjggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG44LmQpIHx8IDApLCBpNCA9IHIzID4gMSA/ICJyIiA6IHIzIDwgLTEgPyAibCIgOiAiIjsKICAgIGlmIChpNCkgewogICAgICBsZXQgczggPSBpNCA9PT0gInIiID8gImwiIDogInIiLCBvNCA9IHsgLi4udDQgfSwgYTQgPSB0NFtpNF07CiAgICAgIHQ0LmZyb20gPSBhNC5mcm9tLCB0NC50byA9IGE0LnRvLCB0NFtpNF0gPSBhNFtpNF0sIG80W2k0XSA9IGE0W3M4XSwgdDRbczhdID0gbzQsIG80LmQgPSBUbjMobzQpOwogICAgfQogICAgdDQuZCA9IFRuMyh0NCk7CiAgfQogIGZ1bmN0aW9uIFRuMyh7IHI6IHQ0LCBsOiBlNSB9KSB7CiAgICByZXR1cm4gKHQ0ID8gZTUgPyBNYXRoLm1heCh0NC5kLCBlNS5kKSA6IHQ0LmQgOiBlNSA/IGU1LmQgOiAwKSArIDE7CiAgfQogIHZhciBBaTIgPSB7IHN0YWNrOiAiZGJjb3JlIiwgbGV2ZWw6IDAsIGNyZWF0ZTogKHQ0KSA9PiB7CiAgICBsZXQgZTUgPSB0NC5zY2hlbWEubmFtZSwgbjggPSBuZXcgWjIxKHQ0Lk1JTl9LRVksIHQ0Lk1BWF9LRVkpOwogICAgcmV0dXJuIHsgLi4udDQsIHRhYmxlOiAocjMpID0+IHsKICAgICAgbGV0IGk0ID0gdDQudGFibGUocjMpLCB7IHNjaGVtYTogczggfSA9IGk0LCB7IHByaW1hcnlLZXk6IG80IH0gPSBzOCwgeyBleHRyYWN0S2V5OiBhNCwgb3V0Ym91bmQ6IHUxMSB9ID0gbzQsIGw3ID0geyAuLi5pNCwgbXV0YXRlOiAoYzE3KSA9PiB7CiAgICAgICAgbGV0IGYxMSA9IGMxNy50cmFucywgZzEyID0gZjExLm11dGF0ZWRQYXJ0cyB8fCAoZjExLm11dGF0ZWRQYXJ0cyA9IHt9KSwgcDE4ID0gKEUxNSkgPT4gewogICAgICAgICAgbGV0IFMyMSA9IGBpZGI6Ly8ke2U1fS8ke3IzfS8ke0UxNX1gOwogICAgICAgICAgcmV0dXJuIGcxMltTMjFdIHx8IChnMTJbUzIxXSA9IG5ldyBaMjEoKSk7CiAgICAgICAgfSwgdjE1ID0gcDE4KCIiKSwgeTE3ID0gcDE4KCI6ZGVscyIpLCB7IHR5cGU6IF8yNSB9ID0gYzE3LCBbdzIxLCBtMjNdID0gYzE3LnR5cGUgPT09ICJkZWxldGVSYW5nZSIgPyBbYzE3LnJhbmdlXSA6IGMxNy50eXBlID09PSAiZGVsZXRlIiA/IFtjMTcua2V5c10gOiBjMTcudmFsdWVzLmxlbmd0aCA8IDUwID8gW1tdLCBjMTcudmFsdWVzXSA6IFtdLCB4MjEgPSBjMTcudHJhbnMuX2NhY2hlOwogICAgICAgIHJldHVybiBpNC5tdXRhdGUoYzE3KS50aGVuKChFMTUpID0+IHsKICAgICAgICAgIGlmIChqMTgodzIxKSkgewogICAgICAgICAgICBfMjUgIT09ICJkZWxldGUiICYmICh3MjEgPSBFMTUucmVzdWx0cyksIHYxNS5hZGRLZXlzKHcyMSk7CiAgICAgICAgICAgIGxldCBTMjEgPSBycjIodzIxLCB4MjEpOwogICAgICAgICAgICAhUzIxICYmIF8yNSAhPT0gImFkZCIgJiYgeTE3LmFkZEtleXModzIxKSwgKFMyMSB8fCBtMjMpICYmIENpMihwMTgsIHM4LCBTMjEsIG0yMyk7CiAgICAgICAgICB9IGVsc2UgaWYgKHcyMSkgewogICAgICAgICAgICBsZXQgUzIxID0geyBmcm9tOiB3MjEubG93ZXIsIHRvOiB3MjEudXBwZXIgfTsKICAgICAgICAgICAgeTE3LmFkZChTMjEpLCB2MTUuYWRkKFMyMSk7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgdjE1LmFkZChuOCksIHkxNy5hZGQobjgpLCBzOC5pbmRleGVzLmZvckVhY2goKFMyMSkgPT4gcDE4KFMyMS5uYW1lKS5hZGQobjgpKTsKICAgICAgICAgIHJldHVybiBFMTU7CiAgICAgICAgfSk7CiAgICAgIH0gfSwgaDEwID0gKHsgcXVlcnk6IHsgaW5kZXg6IGMxNywgcmFuZ2U6IGYxMSB9IH0pID0+IHsKICAgICAgICB2YXIgZzEyLCBwMTg7CiAgICAgICAgcmV0dXJuIFtjMTcsIG5ldyBaMjEoKGcxMiA9IGYxMS5sb3dlcikgIT09IG51bGwgJiYgZzEyICE9PSB2b2lkIDAgPyBnMTIgOiB0NC5NSU5fS0VZLCAocDE4ID0gZjExLnVwcGVyKSAhPT0gbnVsbCAmJiBwMTggIT09IHZvaWQgMCA/IHAxOCA6IHQ0Lk1BWF9LRVkpXTsKICAgICAgfSwgZDE1ID0geyBnZXQ6IChjMTcpID0+IFtvNCwgbmV3IFoyMShjMTcua2V5KV0sIGdldE1hbnk6IChjMTcpID0+IFtvNCwgbmV3IFoyMSgpLmFkZEtleXMoYzE3LmtleXMpXSwgY291bnQ6IGgxMCwgcXVlcnk6IGgxMCwgb3BlbkN1cnNvcjogaDEwIH07CiAgICAgIHJldHVybiBNMjQoZDE1KS5mb3JFYWNoKChjMTcpID0+IHsKICAgICAgICBsN1tjMTddID0gZnVuY3Rpb24oZjExKSB7CiAgICAgICAgICBsZXQgeyBzdWJzY3I6IGcxMiB9ID0gQTE5OwogICAgICAgICAgaWYgKGcxMikgewogICAgICAgICAgICBsZXQgcDE4ID0gKG0yMykgPT4gewogICAgICAgICAgICAgIGxldCB4MjEgPSBgaWRiOi8vJHtlNX0vJHtyM30vJHttMjN9YDsKICAgICAgICAgICAgICByZXR1cm4gZzEyW3gyMV0gfHwgKGcxMlt4MjFdID0gbmV3IFoyMSgpKTsKICAgICAgICAgICAgfSwgdjE1ID0gcDE4KCIiKSwgeTE3ID0gcDE4KCI6ZGVscyIpLCBbXzI1LCB3MjFdID0gZDE1W2MxN10oZjExKTsKICAgICAgICAgICAgaWYgKHAxOChfMjUubmFtZSB8fCAiIikuYWRkKHcyMSksICFfMjUuaXNQcmltYXJ5S2V5KQogICAgICAgICAgICAgIGlmIChjMTcgPT09ICJjb3VudCIpCiAgICAgICAgICAgICAgICB5MTcuYWRkKG44KTsKICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGxldCBtMjMgPSBjMTcgPT09ICJxdWVyeSIgJiYgdTExICYmIGYxMS52YWx1ZXMgJiYgaTQucXVlcnkoeyAuLi5mMTEsIHZhbHVlczogZmFsc2UgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gaTRbYzE3XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLnRoZW4oKHgyMSkgPT4gewogICAgICAgICAgICAgICAgICBpZiAoYzE3ID09PSAicXVlcnkiKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHUxMSAmJiBmMTEudmFsdWVzKQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0yMy50aGVuKCh7IHJlc3VsdDogUzIxIH0pID0+ICh2MTUuYWRkS2V5cyhTMjEpLCB4MjEpKTsKICAgICAgICAgICAgICAgICAgICBsZXQgRTE1ID0gZjExLnZhbHVlcyA/IHgyMS5yZXN1bHQubWFwKGE0KSA6IHgyMS5yZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgZjExLnZhbHVlcyA/IHYxNS5hZGRLZXlzKEUxNSkgOiB5MTcuYWRkS2V5cyhFMTUpOwogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMxNyA9PT0gIm9wZW5DdXJzb3IiKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IEUxNSA9IHgyMSwgUzIxID0gZjExLnZhbHVlczsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gRTE1ICYmIE9iamVjdC5jcmVhdGUoRTE1LCB7IGtleTogeyBnZXQoKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geTE3LmFkZEtleShFMTUucHJpbWFyeUtleSksIEUxNS5rZXk7CiAgICAgICAgICAgICAgICAgICAgfSB9LCBwcmltYXJ5S2V5OiB7IGdldCgpIHsKICAgICAgICAgICAgICAgICAgICAgIGxldCBLMTkgPSBFMTUucHJpbWFyeUtleTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5MTcuYWRkS2V5KEsxOSksIEsxOTsKICAgICAgICAgICAgICAgICAgICB9IH0sIHZhbHVlOiB7IGdldCgpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTMjEgJiYgdjE1LmFkZEtleShFMTUucHJpbWFyeUtleSksIEUxNS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9IH0gfSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgcmV0dXJuIHgyMTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBpNFtjMTddLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSksIGw3OwogICAgfSB9OwogIH0gfTsKICBmdW5jdGlvbiBDaTIodDQsIGU1LCBuOCwgcjMpIHsKICAgIGZ1bmN0aW9uIGk0KHM4KSB7CiAgICAgIGxldCBvNCA9IHQ0KHM4Lm5hbWUgfHwgIiIpOwogICAgICBmdW5jdGlvbiBhNChsNykgewogICAgICAgIHJldHVybiBsNyAhPSBudWxsID8gczguZXh0cmFjdEtleShsNykgOiBudWxsOwogICAgICB9CiAgICAgIGxldCB1MTEgPSAobDcpID0+IHM4Lm11bHRpRW50cnkgJiYgajE4KGw3KSA/IGw3LmZvckVhY2goKGgxMCkgPT4gbzQuYWRkS2V5KGgxMCkpIDogbzQuYWRkS2V5KGw3KTsKICAgICAgKG44IHx8IHIzKS5mb3JFYWNoKChsNywgaDEwKSA9PiB7CiAgICAgICAgbGV0IGQxNSA9IG44ICYmIGE0KG44W2gxMF0pLCBjMTcgPSByMyAmJiBhNChyM1toMTBdKTsKICAgICAgICBWMjAoZDE1LCBjMTcpICE9PSAwICYmIChkMTUgIT0gbnVsbCAmJiB1MTEoZDE1KSwgYzE3ICE9IG51bGwgJiYgdTExKGMxNykpOwogICAgICB9KTsKICAgIH0KICAgIGU1LmluZGV4ZXMuZm9yRWFjaChpNCk7CiAgfQogIHZhciB1ZTE3ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUsIG44KSB7CiAgICAgIHRoaXMuX21pZGRsZXdhcmVzID0ge30sIHRoaXMudmVybm8gPSAwOwogICAgICBsZXQgcjMgPSB1ZTE3LmRlcGVuZGVuY2llczsKICAgICAgdGhpcy5fb3B0aW9ucyA9IG44ID0geyBhZGRvbnM6IHVlMTcuYWRkb25zLCBhdXRvT3BlbjogdHJ1ZSwgaW5kZXhlZERCOiByMy5pbmRleGVkREIsIElEQktleVJhbmdlOiByMy5JREJLZXlSYW5nZSwgLi4ubjggfSwgdGhpcy5fZGVwcyA9IHsgaW5kZXhlZERCOiBuOC5pbmRleGVkREIsIElEQktleVJhbmdlOiBuOC5JREJLZXlSYW5nZSB9OwogICAgICBsZXQgeyBhZGRvbnM6IGk0IH0gPSBuODsKICAgICAgdGhpcy5fZGJTY2hlbWEgPSB7fSwgdGhpcy5fdmVyc2lvbnMgPSBbXSwgdGhpcy5fc3RvcmVOYW1lcyA9IFtdLCB0aGlzLl9hbGxUYWJsZXMgPSB7fSwgdGhpcy5pZGJkYiA9IG51bGwsIHRoaXMuX25vdmlwID0gdGhpczsKICAgICAgbGV0IHM4ID0geyBkYk9wZW5FcnJvcjogbnVsbCwgaXNCZWluZ09wZW5lZDogZmFsc2UsIG9uUmVhZHlCZWluZ0ZpcmVkOiBudWxsLCBvcGVuQ29tcGxldGU6IGZhbHNlLCBkYlJlYWR5UmVzb2x2ZTogUjI1LCBkYlJlYWR5UHJvbWlzZTogbnVsbCwgY2FuY2VsT3BlbjogUjI1LCBvcGVuQ2FuY2VsbGVyOiBudWxsLCBhdXRvU2NoZW1hOiB0cnVlLCBQUjEzOThfbWF4TG9vcDogMyB9OwogICAgICBzOC5kYlJlYWR5UHJvbWlzZSA9IG5ldyBiMjQoKG80KSA9PiB7CiAgICAgICAgczguZGJSZWFkeVJlc29sdmUgPSBvNDsKICAgICAgfSksIHM4Lm9wZW5DYW5jZWxsZXIgPSBuZXcgYjI0KChvNCwgYTQpID0+IHsKICAgICAgICBzOC5jYW5jZWxPcGVuID0gYTQ7CiAgICAgIH0pLCB0aGlzLl9zdGF0ZSA9IHM4LCB0aGlzLm5hbWUgPSBlNSwgdGhpcy5vbiA9IEhlNih0aGlzLCAicG9wdWxhdGUiLCAiYmxvY2tlZCIsICJ2ZXJzaW9uY2hhbmdlIiwgImNsb3NlIiwgeyByZWFkeTogW3NuNywgUjI1XSB9KSwgdGhpcy5vbi5yZWFkeS5zdWJzY3JpYmUgPSBEbjModGhpcy5vbi5yZWFkeS5zdWJzY3JpYmUsIChvNCkgPT4gKGE0LCB1MTEpID0+IHsKICAgICAgICB1ZTE3LnZpcCgoKSA9PiB7CiAgICAgICAgICBsZXQgbDcgPSB0aGlzLl9zdGF0ZTsKICAgICAgICAgIGlmIChsNy5vcGVuQ29tcGxldGUpCiAgICAgICAgICAgIGw3LmRiT3BlbkVycm9yIHx8IGIyNC5yZXNvbHZlKCkudGhlbihhNCksIHUxMSAmJiBvNChhNCk7CiAgICAgICAgICBlbHNlIGlmIChsNy5vblJlYWR5QmVpbmdGaXJlZCkKICAgICAgICAgICAgbDcub25SZWFkeUJlaW5nRmlyZWQucHVzaChhNCksIHUxMSAmJiBvNChhNCk7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbzQoYTQpOwogICAgICAgICAgICBsZXQgaDEwID0gdGhpczsKICAgICAgICAgICAgdTExIHx8IG80KGZ1bmN0aW9uIGQxNSgpIHsKICAgICAgICAgICAgICBoMTAub24ucmVhZHkudW5zdWJzY3JpYmUoYTQpLCBoMTAub24ucmVhZHkudW5zdWJzY3JpYmUoZDE1KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pLCB0aGlzLkNvbGxlY3Rpb24gPSB6cjIodGhpcyksIHRoaXMuVGFibGUgPSBqcih0aGlzKSwgdGhpcy5UcmFuc2FjdGlvbiA9IEdyMih0aGlzKSwgdGhpcy5WZXJzaW9uID0gZmkodGhpcyksIHRoaXMuV2hlcmVDbGF1c2UgPSBRcih0aGlzKSwgdGhpcy5vbigidmVyc2lvbmNoYW5nZSIsIChvNCkgPT4gewogICAgICAgIG80Lm5ld1ZlcnNpb24gPiAwID8gY29uc29sZS53YXJuKGBBbm90aGVyIGNvbm5lY3Rpb24gd2FudHMgdG8gdXBncmFkZSBkYXRhYmFzZSAnJHt0aGlzLm5hbWV9Jy4gQ2xvc2luZyBkYiBub3cgdG8gcmVzdW1lIHRoZSB1cGdyYWRlLmApIDogY29uc29sZS53YXJuKGBBbm90aGVyIGNvbm5lY3Rpb24gd2FudHMgdG8gZGVsZXRlIGRhdGFiYXNlICcke3RoaXMubmFtZX0nLiBDbG9zaW5nIGRiIG5vdyB0byByZXN1bWUgdGhlIGRlbGV0ZSByZXF1ZXN0LmApLCB0aGlzLmNsb3NlKCk7CiAgICAgIH0pLCB0aGlzLm9uKCJibG9ja2VkIiwgKG80KSA9PiB7CiAgICAgICAgIW80Lm5ld1ZlcnNpb24gfHwgbzQubmV3VmVyc2lvbiA8IG80Lm9sZFZlcnNpb24gPyBjb25zb2xlLndhcm4oYERleGllLmRlbGV0ZSgnJHt0aGlzLm5hbWV9Jykgd2FzIGJsb2NrZWRgKSA6IGNvbnNvbGUud2FybihgVXBncmFkZSAnJHt0aGlzLm5hbWV9JyBibG9ja2VkIGJ5IG90aGVyIGNvbm5lY3Rpb24gaG9sZGluZyB2ZXJzaW9uICR7bzQub2xkVmVyc2lvbiAvIDEwfWApOwogICAgICB9KSwgdGhpcy5fbWF4S2V5ID0gVmU2KG44LklEQktleVJhbmdlKSwgdGhpcy5fY3JlYXRlVHJhbnNhY3Rpb24gPSAobzQsIGE0LCB1MTEsIGw3KSA9PiBuZXcgdGhpcy5UcmFuc2FjdGlvbihvNCwgYTQsIHUxMSwgdGhpcy5fb3B0aW9ucy5jaHJvbWVUcmFuc2FjdGlvbkR1cmFiaWxpdHksIGw3KSwgdGhpcy5fZmlyZU9uQmxvY2tlZCA9IChvNCkgPT4gewogICAgICAgIHRoaXMub24oImJsb2NrZWQiKS5maXJlKG80KSwga2UxNS5maWx0ZXIoKGE0KSA9PiBhNC5uYW1lID09PSB0aGlzLm5hbWUgJiYgYTQgIT09IHRoaXMgJiYgIWE0Ll9zdGF0ZS52Y0ZpcmVkKS5tYXAoKGE0KSA9PiBhNC5vbigidmVyc2lvbmNoYW5nZSIpLmZpcmUobzQpKTsKICAgICAgfSwgdGhpcy51c2UoX2kyKSwgdGhpcy51c2UoYmkyKSwgdGhpcy51c2UoQWkyKSwgdGhpcy51c2UoRWkyKSwgdGhpcy52aXAgPSBPYmplY3QuY3JlYXRlKHRoaXMsIHsgX3ZpcDogeyB2YWx1ZTogdHJ1ZSB9IH0pLCBpNC5mb3JFYWNoKChvNCkgPT4gbzQodGhpcykpOwogICAgfQogICAgdmVyc2lvbihlNSkgewogICAgICBpZiAoaXNOYU4oZTUpIHx8IGU1IDwgMC4xKQogICAgICAgIHRocm93IG5ldyBDMTYuVHlwZSgiR2l2ZW4gdmVyc2lvbiBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiKTsKICAgICAgaWYgKGU1ID0gTWF0aC5yb3VuZChlNSAqIDEwKSAvIDEwLCB0aGlzLmlkYmRiIHx8IHRoaXMuX3N0YXRlLmlzQmVpbmdPcGVuZWQpCiAgICAgICAgdGhyb3cgbmV3IEMxNi5TY2hlbWEoIkNhbm5vdCBhZGQgdmVyc2lvbiB3aGVuIGRhdGFiYXNlIGlzIG9wZW4iKTsKICAgICAgdGhpcy52ZXJubyA9IE1hdGgubWF4KHRoaXMudmVybm8sIGU1KTsKICAgICAgbGV0IG44ID0gdGhpcy5fdmVyc2lvbnM7CiAgICAgIHZhciByMyA9IG44LmZpbHRlcigoaTQpID0+IGk0Ll9jZmcudmVyc2lvbiA9PT0gZTUpWzBdOwogICAgICByZXR1cm4gcjMgfHwgKHIzID0gbmV3IHRoaXMuVmVyc2lvbihlNSksIG44LnB1c2gocjMpLCBuOC5zb3J0KHJpMiksIHIzLnN0b3Jlcyh7fSksIHRoaXMuX3N0YXRlLmF1dG9TY2hlbWEgPSBmYWxzZSwgcjMpOwogICAgfQogICAgX3doZW5SZWFkeShlNSkgewogICAgICByZXR1cm4gdGhpcy5pZGJkYiAmJiAodGhpcy5fc3RhdGUub3BlbkNvbXBsZXRlIHx8IEExOS5sZXRUaHJvdWdoIHx8IHRoaXMuX3ZpcCkgPyBlNSgpIDogbmV3IGIyNCgobjgsIHIzKSA9PiB7CiAgICAgICAgaWYgKHRoaXMuX3N0YXRlLm9wZW5Db21wbGV0ZSkKICAgICAgICAgIHJldHVybiByMyhuZXcgQzE2LkRhdGFiYXNlQ2xvc2VkKHRoaXMuX3N0YXRlLmRiT3BlbkVycm9yKSk7CiAgICAgICAgaWYgKCF0aGlzLl9zdGF0ZS5pc0JlaW5nT3BlbmVkKSB7CiAgICAgICAgICBpZiAoIXRoaXMuX29wdGlvbnMuYXV0b09wZW4pIHsKICAgICAgICAgICAgcjMobmV3IEMxNi5EYXRhYmFzZUNsb3NlZCgpKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5vcGVuKCkuY2F0Y2goUjI1KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fc3RhdGUuZGJSZWFkeVByb21pc2UudGhlbihuOCwgcjMpOwogICAgICB9KS50aGVuKGU1KTsKICAgIH0KICAgIHVzZSh7IHN0YWNrOiBlNSwgY3JlYXRlOiBuOCwgbGV2ZWw6IHIzLCBuYW1lOiBpNCB9KSB7CiAgICAgIGk0ICYmIHRoaXMudW51c2UoeyBzdGFjazogZTUsIG5hbWU6IGk0IH0pOwogICAgICBsZXQgczggPSB0aGlzLl9taWRkbGV3YXJlc1tlNV0gfHwgKHRoaXMuX21pZGRsZXdhcmVzW2U1XSA9IFtdKTsKICAgICAgcmV0dXJuIHM4LnB1c2goeyBzdGFjazogZTUsIGNyZWF0ZTogbjgsIGxldmVsOiByMyA/PyAxMCwgbmFtZTogaTQgfSksIHM4LnNvcnQoKG80LCBhNCkgPT4gbzQubGV2ZWwgLSBhNC5sZXZlbCksIHRoaXM7CiAgICB9CiAgICB1bnVzZSh7IHN0YWNrOiBlNSwgbmFtZTogbjgsIGNyZWF0ZTogcjMgfSkgewogICAgICByZXR1cm4gZTUgJiYgdGhpcy5fbWlkZGxld2FyZXNbZTVdICYmICh0aGlzLl9taWRkbGV3YXJlc1tlNV0gPSB0aGlzLl9taWRkbGV3YXJlc1tlNV0uZmlsdGVyKChpNCkgPT4gcjMgPyBpNC5jcmVhdGUgIT09IHIzIDogbjggPyBpNC5uYW1lICE9PSBuOCA6IGZhbHNlKSksIHRoaXM7CiAgICB9CiAgICBvcGVuKCkgewogICAgICByZXR1cm4gbWkodGhpcyk7CiAgICB9CiAgICBfY2xvc2UoKSB7CiAgICAgIGxldCBlNSA9IHRoaXMuX3N0YXRlLCBuOCA9IGtlMTUuaW5kZXhPZih0aGlzKTsKICAgICAgaWYgKG44ID49IDAgJiYga2UxNS5zcGxpY2UobjgsIDEpLCB0aGlzLmlkYmRiKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMuaWRiZGIuY2xvc2UoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgICAgdGhpcy5fbm92aXAuaWRiZGIgPSBudWxsOwogICAgICB9CiAgICAgIGU1LmRiUmVhZHlQcm9taXNlID0gbmV3IGIyNCgocjMpID0+IHsKICAgICAgICBlNS5kYlJlYWR5UmVzb2x2ZSA9IHIzOwogICAgICB9KSwgZTUub3BlbkNhbmNlbGxlciA9IG5ldyBiMjQoKHIzLCBpNCkgPT4gewogICAgICAgIGU1LmNhbmNlbE9wZW4gPSBpNDsKICAgICAgfSk7CiAgICB9CiAgICBjbG9zZSgpIHsKICAgICAgdGhpcy5fY2xvc2UoKTsKICAgICAgbGV0IGU1ID0gdGhpcy5fc3RhdGU7CiAgICAgIHRoaXMuX29wdGlvbnMuYXV0b09wZW4gPSBmYWxzZSwgZTUuZGJPcGVuRXJyb3IgPSBuZXcgQzE2LkRhdGFiYXNlQ2xvc2VkKCksIGU1LmlzQmVpbmdPcGVuZWQgJiYgZTUuY2FuY2VsT3BlbihlNS5kYk9wZW5FcnJvcik7CiAgICB9CiAgICBkZWxldGUoKSB7CiAgICAgIGxldCBlNSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwLCBuOCA9IHRoaXMuX3N0YXRlOwogICAgICByZXR1cm4gbmV3IGIyNCgocjMsIGk0KSA9PiB7CiAgICAgICAgbGV0IHM4ID0gKCkgPT4gewogICAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICAgICAgdmFyIG80ID0gdGhpcy5fZGVwcy5pbmRleGVkREIuZGVsZXRlRGF0YWJhc2UodGhpcy5uYW1lKTsKICAgICAgICAgIG80Lm9uc3VjY2VzcyA9IE8xNCgoKSA9PiB7CiAgICAgICAgICAgIHBpMih0aGlzLl9kZXBzLCB0aGlzLm5hbWUpLCByMygpOwogICAgICAgICAgfSksIG80Lm9uZXJyb3IgPSBHMjIoaTQpLCBvNC5vbmJsb2NrZWQgPSB0aGlzLl9maXJlT25CbG9ja2VkOwogICAgICAgIH07CiAgICAgICAgaWYgKGU1KQogICAgICAgICAgdGhyb3cgbmV3IEMxNi5JbnZhbGlkQXJndW1lbnQoIkFyZ3VtZW50cyBub3QgYWxsb3dlZCBpbiBkYi5kZWxldGUoKSIpOwogICAgICAgIG44LmlzQmVpbmdPcGVuZWQgPyBuOC5kYlJlYWR5UHJvbWlzZS50aGVuKHM4KSA6IHM4KCk7CiAgICAgIH0pOwogICAgfQogICAgYmFja2VuZERCKCkgewogICAgICByZXR1cm4gdGhpcy5pZGJkYjsKICAgIH0KICAgIGlzT3BlbigpIHsKICAgICAgcmV0dXJuIHRoaXMuaWRiZGIgIT09IG51bGw7CiAgICB9CiAgICBoYXNCZWVuQ2xvc2VkKCkgewogICAgICBsZXQgZTUgPSB0aGlzLl9zdGF0ZS5kYk9wZW5FcnJvcjsKICAgICAgcmV0dXJuIGU1ICYmIGU1Lm5hbWUgPT09ICJEYXRhYmFzZUNsb3NlZCI7CiAgICB9CiAgICBoYXNGYWlsZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5kYk9wZW5FcnJvciAhPT0gbnVsbDsKICAgIH0KICAgIGR5bmFtaWNhbGx5T3BlbmVkKCkgewogICAgICByZXR1cm4gdGhpcy5fc3RhdGUuYXV0b1NjaGVtYTsKICAgIH0KICAgIGdldCB0YWJsZXMoKSB7CiAgICAgIHJldHVybiBNMjQodGhpcy5fYWxsVGFibGVzKS5tYXAoKGU1KSA9PiB0aGlzLl9hbGxUYWJsZXNbZTVdKTsKICAgIH0KICAgIHRyYW5zYWN0aW9uKCkgewogICAgICBsZXQgZTUgPSBnaS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb24uYXBwbHkodGhpcywgZTUpOwogICAgfQogICAgX3RyYW5zYWN0aW9uKGU1LCBuOCwgcjMpIHsKICAgICAgbGV0IGk0ID0gQTE5LnRyYW5zOwogICAgICAoIWk0IHx8IGk0LmRiICE9PSB0aGlzIHx8IGU1LmluZGV4T2YoIiEiKSAhPT0gLTEpICYmIChpNCA9IG51bGwpOwogICAgICBsZXQgczggPSBlNS5pbmRleE9mKCI/IikgIT09IC0xOwogICAgICBlNSA9IGU1LnJlcGxhY2UoIiEiLCAiIikucmVwbGFjZSgiPyIsICIiKTsKICAgICAgbGV0IG80LCBhNDsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoYTQgPSBuOC5tYXAoKGw3KSA9PiB7CiAgICAgICAgICB2YXIgaDEwID0gbDcgaW5zdGFuY2VvZiB0aGlzLlRhYmxlID8gbDcubmFtZSA6IGw3OwogICAgICAgICAgaWYgKHR5cGVvZiBoMTAgIT0gInN0cmluZyIpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdGFibGUgYXJndW1lbnQgdG8gRGV4aWUudHJhbnNhY3Rpb24oKS4gT25seSBUYWJsZSBvciBTdHJpbmcgYXJlIGFsbG93ZWQiKTsKICAgICAgICAgIHJldHVybiBoMTA7CiAgICAgICAgfSksIGU1ID09ICJyIiB8fCBlNSA9PT0gYnQ2KQogICAgICAgICAgbzQgPSBidDY7CiAgICAgICAgZWxzZSBpZiAoZTUgPT0gInJ3IiB8fCBlNSA9PSB4dDEyKQogICAgICAgICAgbzQgPSB4dDEyOwogICAgICAgIGVsc2UKICAgICAgICAgIHRocm93IG5ldyBDMTYuSW52YWxpZEFyZ3VtZW50KCJJbnZhbGlkIHRyYW5zYWN0aW9uIG1vZGU6ICIgKyBlNSk7CiAgICAgICAgaWYgKGk0KSB7CiAgICAgICAgICBpZiAoaTQubW9kZSA9PT0gYnQ2ICYmIG80ID09PSB4dDEyKQogICAgICAgICAgICBpZiAoczgpCiAgICAgICAgICAgICAgaTQgPSBudWxsOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgdGhyb3cgbmV3IEMxNi5TdWJUcmFuc2FjdGlvbigiQ2Fubm90IGVudGVyIGEgc3ViLXRyYW5zYWN0aW9uIHdpdGggUkVBRFdSSVRFIG1vZGUgd2hlbiBwYXJlbnQgdHJhbnNhY3Rpb24gaXMgUkVBRE9OTFkiKTsKICAgICAgICAgIGk0ICYmIGE0LmZvckVhY2goKGw3KSA9PiB7CiAgICAgICAgICAgIGlmIChpNCAmJiBpNC5zdG9yZU5hbWVzLmluZGV4T2YobDcpID09PSAtMSkKICAgICAgICAgICAgICBpZiAoczgpCiAgICAgICAgICAgICAgICBpNCA9IG51bGw7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEMxNi5TdWJUcmFuc2FjdGlvbigiVGFibGUgIiArIGw3ICsgIiBub3QgaW5jbHVkZWQgaW4gcGFyZW50IHRyYW5zYWN0aW9uLiIpOwogICAgICAgICAgfSksIHM4ICYmIGk0ICYmICFpNC5hY3RpdmUgJiYgKGk0ID0gbnVsbCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChsNykgewogICAgICAgIHJldHVybiBpNCA/IGk0Ll9wcm9taXNlKG51bGwsIChoMTAsIGQxNSkgPT4gewogICAgICAgICAgZDE1KGw3KTsKICAgICAgICB9KSA6IEIyMyhsNyk7CiAgICAgIH0KICAgICAgbGV0IHUxMSA9IG5yMi5iaW5kKG51bGwsIHRoaXMsIG80LCBhNCwgaTQsIHIzKTsKICAgICAgcmV0dXJuIGk0ID8gaTQuX3Byb21pc2UobzQsIHUxMSwgImxvY2siKSA6IEExOS50cmFucyA/IFRlMTUoQTE5LnRyYW5zbGVzcywgKCkgPT4gdGhpcy5fd2hlblJlYWR5KHUxMSkpIDogdGhpcy5fd2hlblJlYWR5KHUxMSk7CiAgICB9CiAgICB0YWJsZShlNSkgewogICAgICBpZiAoIVcxNyh0aGlzLl9hbGxUYWJsZXMsIGU1KSkKICAgICAgICB0aHJvdyBuZXcgQzE2LkludmFsaWRUYWJsZShgVGFibGUgJHtlNX0gZG9lcyBub3QgZXhpc3RgKTsKICAgICAgcmV0dXJuIHRoaXMuX2FsbFRhYmxlc1tlNV07CiAgICB9CiAgfTsKICB2YXIgS2kyID0gdHlwZW9mIFN5bWJvbCA8ICJ1IiAmJiAib2JzZXJ2YWJsZSIgaW4gU3ltYm9sID8gU3ltYm9sLm9ic2VydmFibGUgOiAiQEBvYnNlcnZhYmxlIjsKICB2YXIgSnQ0ID0gY2xhc3MgewogICAgY29uc3RydWN0b3IoZTUpIHsKICAgICAgdGhpcy5fc3Vic2NyaWJlID0gZTU7CiAgICB9CiAgICBzdWJzY3JpYmUoZTUsIG44LCByMykgewogICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKCFlNSB8fCB0eXBlb2YgZTUgPT0gImZ1bmN0aW9uIiA/IHsgbmV4dDogZTUsIGVycm9yOiBuOCwgY29tcGxldGU6IHIzIH0gOiBlNSk7CiAgICB9CiAgICBbS2kyXSgpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBpcjIodDQsIGU1KSB7CiAgICByZXR1cm4gTTI0KGU1KS5mb3JFYWNoKChuOCkgPT4gewogICAgICBsZXQgcjMgPSB0NFtuOF0gfHwgKHQ0W244XSA9IG5ldyBaMjEoKSk7CiAgICAgIGR0OShyMywgZTVbbjhdKTsKICAgIH0pLCB0NDsKICB9CiAgZnVuY3Rpb24gVGkyKHQ0KSB7CiAgICByZXR1cm4gbmV3IEp0NCgoZTUpID0+IHsKICAgICAgbGV0IG44ID0gdG40KHQ0KTsKICAgICAgZnVuY3Rpb24gcjMoZjExKSB7CiAgICAgICAgbjggJiYgS2U1KCk7CiAgICAgICAgbGV0IGcxMiA9ICgpID0+IGxlMTQodDQsIHsgc3Vic2NyOiBmMTEsIHRyYW5zOiBudWxsIH0pLCBwMTggPSBBMTkudHJhbnMgPyBUZTE1KEExOS50cmFuc2xlc3MsIGcxMikgOiBnMTIoKTsKICAgICAgICByZXR1cm4gbjggJiYgcDE4LnRoZW4oaWUxMiwgaWUxMiksIHAxODsKICAgICAgfQogICAgICBsZXQgaTQgPSBmYWxzZSwgczggPSB7fSwgbzQgPSB7fSwgYTQgPSB7IGdldCBjbG9zZWQoKSB7CiAgICAgICAgcmV0dXJuIGk0OwogICAgICB9LCB1bnN1YnNjcmliZTogKCkgPT4gewogICAgICAgIGk0ID0gdHJ1ZSwgZmUxMS5zdG9yYWdlbXV0YXRlZC51bnN1YnNjcmliZShkMTUpOwogICAgICB9IH07CiAgICAgIGU1LnN0YXJ0ICYmIGU1LnN0YXJ0KGE0KTsKICAgICAgbGV0IHUxMSA9IGZhbHNlLCBsNyA9IGZhbHNlOwogICAgICBmdW5jdGlvbiBoMTAoKSB7CiAgICAgICAgcmV0dXJuIE0yNChvNCkuc29tZSgoZjExKSA9PiBzOFtmMTFdICYmIFNpMihzOFtmMTFdLCBvNFtmMTFdKSk7CiAgICAgIH0KICAgICAgbGV0IGQxNSA9IChmMTEpID0+IHsKICAgICAgICBpcjIoczgsIGYxMSksIGgxMCgpICYmIGMxNygpOwogICAgICB9LCBjMTcgPSAoKSA9PiB7CiAgICAgICAgaWYgKHUxMSB8fCBpNCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBzOCA9IHt9OwogICAgICAgIGxldCBmMTEgPSB7fSwgZzEyID0gcjMoZjExKTsKICAgICAgICBsNyB8fCAoZmUxMShqZTYsIGQxNSksIGw3ID0gdHJ1ZSksIHUxMSA9IHRydWUsIFByb21pc2UucmVzb2x2ZShnMTIpLnRoZW4oKHAxOCkgPT4gewogICAgICAgICAgdTExID0gZmFsc2UsICFpNCAmJiAoaDEwKCkgPyBjMTcoKSA6IChzOCA9IHt9LCBvNCA9IGYxMSwgZTUubmV4dCAmJiBlNS5uZXh0KHAxOCkpKTsKICAgICAgICB9LCAocDE4KSA9PiB7CiAgICAgICAgICB1MTEgPSBmYWxzZSwgZTUuZXJyb3IgJiYgZTUuZXJyb3IocDE4KSwgYTQudW5zdWJzY3JpYmUoKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgcmV0dXJuIGMxNygpLCBhNDsKICAgIH0pOwogIH0KICB2YXIgWnQ1OwogIHRyeSB7CiAgICBadDUgPSB7IGluZGV4ZWREQjogUDI2LmluZGV4ZWREQiB8fCBQMjYubW96SW5kZXhlZERCIHx8IFAyNi53ZWJraXRJbmRleGVkREIgfHwgUDI2Lm1zSW5kZXhlZERCLCBJREJLZXlSYW5nZTogUDI2LklEQktleVJhbmdlIHx8IFAyNi53ZWJraXRJREJLZXlSYW5nZSB9OwogIH0gY2F0Y2ggewogICAgWnQ1ID0geyBpbmRleGVkREI6IG51bGwsIElEQktleVJhbmdlOiBudWxsIH07CiAgfQogIHZhciBoZTEzID0gdWUxNzsKICBTZTEzKGhlMTMsIHsgLi4ubXQ5LCBkZWxldGUodDQpIHsKICAgIHJldHVybiBuZXcgaGUxMyh0NCwgeyBhZGRvbnM6IFtdIH0pLmRlbGV0ZSgpOwogIH0sIGV4aXN0cyh0NCkgewogICAgcmV0dXJuIG5ldyBoZTEzKHQ0LCB7IGFkZG9uczogW10gfSkub3BlbigpLnRoZW4oKGU1KSA9PiAoZTUuY2xvc2UoKSwgdHJ1ZSkpLmNhdGNoKCJOb1N1Y2hEYXRhYmFzZUVycm9yIiwgKCkgPT4gZmFsc2UpOwogIH0sIGdldERhdGFiYXNlTmFtZXModDQpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBoaTIoaGUxMy5kZXBlbmRlbmNpZXMpLnRoZW4odDQpOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiBCMjMobmV3IEMxNi5NaXNzaW5nQVBJKCkpOwogICAgfQogIH0sIGRlZmluZUNsYXNzKCkgewogICAgZnVuY3Rpb24gdDQoZTUpIHsKICAgICAgTDIxKHRoaXMsIGU1KTsKICAgIH0KICAgIHJldHVybiB0NDsKICB9LCBpZ25vcmVUcmFuc2FjdGlvbih0NCkgewogICAgcmV0dXJuIEExOS50cmFucyA/IFRlMTUoQTE5LnRyYW5zbGVzcywgdDQpIDogdDQoKTsKICB9LCB2aXA6IFF0NiwgYXN5bmM6IGZ1bmN0aW9uKHQ0KSB7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIGU1ID0gR3Q0KHQ0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOwogICAgICAgIHJldHVybiAhZTUgfHwgdHlwZW9mIGU1LnRoZW4gIT0gImZ1bmN0aW9uIiA/IGIyNC5yZXNvbHZlKGU1KSA6IGU1OwogICAgICB9IGNhdGNoIChuOCkgewogICAgICAgIHJldHVybiBCMjMobjgpOwogICAgICB9CiAgICB9OwogIH0sIHNwYXduOiBmdW5jdGlvbih0NCwgZTUsIG44KSB7CiAgICB0cnkgewogICAgICB2YXIgcjMgPSBHdDQodDQuYXBwbHkobjgsIGU1IHx8IFtdKSk7CiAgICAgIHJldHVybiAhcjMgfHwgdHlwZW9mIHIzLnRoZW4gIT0gImZ1bmN0aW9uIiA/IGIyNC5yZXNvbHZlKHIzKSA6IHIzOwogICAgfSBjYXRjaCAoaTQpIHsKICAgICAgcmV0dXJuIEIyMyhpNCk7CiAgICB9CiAgfSwgY3VycmVudFRyYW5zYWN0aW9uOiB7IGdldDogKCkgPT4gQTE5LnRyYW5zIHx8IG51bGwgfSwgd2FpdEZvcjogZnVuY3Rpb24odDQsIGU1KSB7CiAgICBsZXQgbjggPSBiMjQucmVzb2x2ZSh0eXBlb2YgdDQgPT0gImZ1bmN0aW9uIiA/IGhlMTMuaWdub3JlVHJhbnNhY3Rpb24odDQpIDogdDQpLnRpbWVvdXQoZTUgfHwgNmU0KTsKICAgIHJldHVybiBBMTkudHJhbnMgPyBBMTkudHJhbnMud2FpdEZvcihuOCkgOiBuODsKICB9LCBQcm9taXNlOiBiMjQsIGRlYnVnOiB7IGdldDogKCkgPT4gcTE5LCBzZXQ6ICh0NCkgPT4gewogICAgQm4zKHQ0LCB0NCA9PT0gImRleGllIiA/ICgpID0+IHRydWUgOiBHbjQpOwogIH0gfSwgZGVyaXZlOiBBZTE3LCBleHRlbmQ6IEwyMSwgcHJvcHM6IFNlMTMsIG92ZXJyaWRlOiBEbjMsIEV2ZW50czogSGU2LCBvbjogZmUxMSwgbGl2ZVF1ZXJ5OiBUaTIsIGV4dGVuZE9ic2VydmFiaWxpdHlTZXQ6IGlyMiwgZ2V0QnlLZXlQYXRoOiBuZTE0LCBzZXRCeUtleVBhdGg6IFExNiwgZGVsQnlLZXlQYXRoOiBmcjIsIHNoYWxsb3dDbG9uZToga240LCBkZWVwQ2xvbmU6ICRlMTEsIGdldE9iamVjdERpZmY6IHBuMiwgY21wOiBWMjAsIGFzYXA6IFJuMywgbWluS2V5OiBqdDQsIGFkZG9uczogW10sIGNvbm5lY3Rpb25zOiBrZTE1LCBlcnJuYW1lczogcm40LCBkZXBlbmRlbmNpZXM6IFp0NSwgc2VtVmVyOiBibjMsIHZlcnNpb246IGJuMy5zcGxpdCgiLiIpLm1hcCgodDQpID0+IHBhcnNlSW50KHQ0KSkucmVkdWNlKCh0NCwgZTUsIG44KSA9PiB0NCArIGU1IC8gTWF0aC5wb3coMTAsIG44ICogMikpIH0pOwogIGhlMTMubWF4S2V5ID0gVmU2KGhlMTMuZGVwZW5kZW5jaWVzLklEQktleVJhbmdlKTsKICB0eXBlb2YgZGlzcGF0Y2hFdmVudCA8ICJ1IiAmJiB0eXBlb2YgYWRkRXZlbnRMaXN0ZW5lciA8ICJ1IiAmJiAoZmUxMShqZTYsICh0NCkgPT4gewogICAgaWYgKCF0ZTE2KSB7CiAgICAgIGxldCBlNTsKICAgICAgZ3QxMSA/IChlNSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLCBlNS5pbml0Q3VzdG9tRXZlbnQoYWUxNiwgdHJ1ZSwgdHJ1ZSwgdDQpKSA6IGU1ID0gbmV3IEN1c3RvbUV2ZW50KGFlMTYsIHsgZGV0YWlsOiB0NCB9KSwgdGUxNiA9IHRydWUsIGRpc3BhdGNoRXZlbnQoZTUpLCB0ZTE2ID0gZmFsc2U7CiAgICB9CiAgfSksIGFkZEV2ZW50TGlzdGVuZXIoYWUxNiwgKHsgZGV0YWlsOiB0NCB9KSA9PiB7CiAgICB0ZTE2IHx8IHB0MTEodDQpOwogIH0pKTsKICBmdW5jdGlvbiBwdDExKHQ0KSB7CiAgICBsZXQgZTUgPSB0ZTE2OwogICAgdHJ5IHsKICAgICAgdGUxNiA9IHRydWUsIGZlMTEuc3RvcmFnZW11dGF0ZWQuZmlyZSh0NCk7CiAgICB9IGZpbmFsbHkgewogICAgICB0ZTE2ID0gZTU7CiAgICB9CiAgfQogIHZhciB0ZTE2ID0gZmFsc2U7CiAgaWYgKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsIDwgInUiKSB7CiAgICBsZXQgdDQgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbChhZTE2KTsKICAgIGZlMTEoamU2LCAoZTUpID0+IHsKICAgICAgdGUxNiB8fCB0NC5wb3N0TWVzc2FnZShlNSk7CiAgICB9KSwgdDQub25tZXNzYWdlID0gKGU1KSA9PiB7CiAgICAgIGU1LmRhdGEgJiYgcHQxMShlNS5kYXRhKTsKICAgIH07CiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiA8ICJ1IiAmJiB0eXBlb2YgbmF2aWdhdG9yIDwgInUiKSB7CiAgICBmZTExKGplNiwgKGU1KSA9PiB7CiAgICAgIHRyeSB7CiAgICAgICAgdGUxNiB8fCAodHlwZW9mIGxvY2FsU3RvcmFnZSA8ICJ1IiAmJiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShhZTE2LCBKU09OLnN0cmluZ2lmeSh7IHRyaWc6IE1hdGgucmFuZG9tKCksIGNoYW5nZWRQYXJ0czogZTUgfSkpLCB0eXBlb2Ygc2VsZi5jbGllbnRzID09ICJvYmplY3QiICYmIFsuLi5zZWxmLmNsaWVudHMubWF0Y2hBbGwoeyBpbmNsdWRlVW5jb250cm9sbGVkOiB0cnVlIH0pXS5mb3JFYWNoKChuOCkgPT4gbjgucG9zdE1lc3NhZ2UoeyB0eXBlOiBhZTE2LCBjaGFuZ2VkUGFydHM6IGU1IH0pKSk7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9KSwgdHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIgPCAidSIgJiYgYWRkRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIsIChlNSkgPT4gewogICAgICBpZiAoZTUua2V5ID09PSBhZTE2KSB7CiAgICAgICAgbGV0IG44ID0gSlNPTi5wYXJzZShlNS5uZXdWYWx1ZSk7CiAgICAgICAgbjggJiYgcHQxMShuOC5jaGFuZ2VkUGFydHMpOwogICAgICB9CiAgICB9KTsKICAgIGxldCB0NCA9IHNlbGYuZG9jdW1lbnQgJiYgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXI7CiAgICB0NCAmJiB0NC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgSWkyKTsKICB9CiAgZnVuY3Rpb24gSWkyKHsgZGF0YTogdDQgfSkgewogICAgdDQgJiYgdDQudHlwZSA9PT0gYWUxNiAmJiBwdDExKHQ0LmNoYW5nZWRQYXJ0cyk7CiAgfQogIGIyNC5yZWplY3Rpb25NYXBwZXIgPSB3cjI7CiAgQm4zKHExOSwgR240KTsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9zeXNjYWxscy9zdG9yZS5kZXhpZV9icm93c2VyLnRzCiAgZnVuY3Rpb24gc3RvcmVTeXNjYWxscyhkYk5hbWUsIHRhYmxlTmFtZSkgewogICAgY29uc3QgZGIgPSBuZXcgdWUxNyhkYk5hbWUpOwogICAgZGIudmVyc2lvbigxKS5zdG9yZXMoewogICAgICBbdGFibGVOYW1lXTogImtleSIKICAgIH0pOwogICAgY29uc3QgaXRlbXMgPSBkYi50YWJsZSh0YWJsZU5hbWUpOwogICAgcmV0dXJuIHsKICAgICAgInN0b3JlLmRlbGV0ZSI6IGFzeW5jIChjdHgsIGtleSkgPT4gewogICAgICAgIGF3YWl0IGl0ZW1zLmRlbGV0ZShrZXkpOwogICAgICB9LAogICAgICAic3RvcmUuZGVsZXRlUHJlZml4IjogYXN5bmMgKGN0eCwgcHJlZml4KSA9PiB7CiAgICAgICAgYXdhaXQgaXRlbXMud2hlcmUoImtleSIpLnN0YXJ0c1dpdGgocHJlZml4KS5kZWxldGUoKTsKICAgICAgfSwKICAgICAgInN0b3JlLmRlbGV0ZUFsbCI6IGFzeW5jICgpID0+IHsKICAgICAgICBhd2FpdCBpdGVtcy5jbGVhcigpOwogICAgICB9LAogICAgICAic3RvcmUuc2V0IjogYXN5bmMgKGN0eCwga2V5LCB2YWx1ZSkgPT4gewogICAgICAgIGF3YWl0IGl0ZW1zLnB1dCh7CiAgICAgICAgICBrZXksCiAgICAgICAgICB2YWx1ZQogICAgICAgIH0pOwogICAgICB9LAogICAgICAic3RvcmUuYmF0Y2hTZXQiOiBhc3luYyAoY3R4LCBrdnMpID0+IHsKICAgICAgICBhd2FpdCBpdGVtcy5idWxrUHV0KAogICAgICAgICAga3ZzLm1hcCgoeyBrZXksIHZhbHVlIH0pID0+ICh7CiAgICAgICAgICAgIGtleSwKICAgICAgICAgICAgdmFsdWUKICAgICAgICAgIH0pKQogICAgICAgICk7CiAgICAgIH0sCiAgICAgICJzdG9yZS5nZXQiOiBhc3luYyAoY3R4LCBrZXkpID0+IHsKICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgaXRlbXMuZ2V0KHsKICAgICAgICAgIGtleQogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQudmFsdWUgOiBudWxsOwogICAgICB9LAogICAgICAic3RvcmUucXVlcnlQcmVmaXgiOiBhc3luYyAoY3R4LCBrZXlQcmVmaXgpID0+IHsKICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGl0ZW1zLndoZXJlKCJrZXkiKS5zdGFydHNXaXRoKGtleVByZWZpeCkudG9BcnJheSgpOwogICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiAoewogICAgICAgICAga2V5OiByZXN1bHQua2V5LAogICAgICAgICAgdmFsdWU6IHJlc3VsdC52YWx1ZQogICAgICAgIH0pKTsKICAgICAgfQogICAgfTsKICB9CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvc3lzY2FsbHMvY2xpZW50U3RvcmUudHMKICBmdW5jdGlvbiBjbGllbnRTdG9yZVN5c2NhbGxzKCkgewogICAgY29uc3Qgc3RvcmVDYWxscyA9IHN0b3JlU3lzY2FsbHMoImxvY2FsIiwgImxvY2FsRGF0YSIpOwogICAgcmV0dXJuIHByb3h5U3lzY2FsbHMoCiAgICAgIFsiY2xpZW50U3RvcmUuZ2V0IiwgImNsaWVudFN0b3JlLnNldCIsICJjbGllbnRTdG9yZS5kZWxldGUiXSwKICAgICAgKGN0eCwgbmFtZSwgLi4uYXJncykgPT4gewogICAgICAgIHJldHVybiBzdG9yZUNhbGxzW25hbWUucmVwbGFjZSgiY2xpZW50U3RvcmUuIiwgInN0b3JlLiIpXShjdHgsIC4uLmFyZ3MpOwogICAgICB9CiAgICApOwogIH0KCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9zeXNjYWxscy9lZGl0b3IudHMKICBmdW5jdGlvbiBlbnN1cmVBbmNob3IoZXhwciwgc3RhcnQpIHsKICAgIHZhciBfYTQ7CiAgICBsZXQgeyBzb3VyY2UgfSA9IGV4cHI7CiAgICBsZXQgYWRkU3RhcnQgPSBzdGFydCAmJiBzb3VyY2VbMF0gIT0gIl4iLCBhZGRFbmQgPSBzb3VyY2Vbc291cmNlLmxlbmd0aCAtIDFdICE9ICIkIjsKICAgIGlmICghYWRkU3RhcnQgJiYgIWFkZEVuZCkKICAgICAgcmV0dXJuIGV4cHI7CiAgICByZXR1cm4gbmV3IFJlZ0V4cCgKICAgICAgYCR7YWRkU3RhcnQgPyAiXiIgOiAiIn0oPzoke3NvdXJjZX0pJHthZGRFbmQgPyAiJCIgOiAiIn1gLAogICAgICAoX2E0ID0gZXhwci5mbGFncykgIT09IG51bGwgJiYgX2E0ICE9PSB2b2lkIDAgPyBfYTQgOiBleHByLmlnbm9yZUNhc2UgPyAiaSIgOiAiIgogICAgKTsKICB9CiAgZnVuY3Rpb24gZWRpdG9yU3lzY2FsbHMoZWRpdG9yKSB7CiAgICBjb25zdCBzeXNjYWxscyA9IHsKICAgICAgImVkaXRvci5nZXRDdXJyZW50UGFnZSI6ICgpID0+IHsKICAgICAgICByZXR1cm4gZWRpdG9yLmN1cnJlbnRQYWdlOwogICAgICB9LAogICAgICAiZWRpdG9yLmdldFRleHQiOiAoKSA9PiB7CiAgICAgICAgcmV0dXJuIGVkaXRvci5lZGl0b3JWaWV3Py5zdGF0ZS5zbGljZURvYygpOwogICAgICB9LAogICAgICAiZWRpdG9yLmdldEN1cnNvciI6ICgpID0+IHsKICAgICAgICByZXR1cm4gZWRpdG9yLmVkaXRvclZpZXcuc3RhdGUuc2VsZWN0aW9uLm1haW4uZnJvbTsKICAgICAgfSwKICAgICAgImVkaXRvci5nZXRTZWxlY3Rpb24iOiAoKSA9PiB7CiAgICAgICAgcmV0dXJuIGVkaXRvci5lZGl0b3JWaWV3LnN0YXRlLnNlbGVjdGlvbi5tYWluOwogICAgICB9LAogICAgICAiZWRpdG9yLnNhdmUiOiBhc3luYyAoKSA9PiB7CiAgICAgICAgcmV0dXJuIGVkaXRvci5zYXZlKHRydWUpOwogICAgICB9LAogICAgICAiZWRpdG9yLm5hdmlnYXRlIjogYXN5bmMgKGN0eCwgbmFtZSwgcG9zLCByZXBsYWNlU3RhdGUgPSBmYWxzZSkgPT4gewogICAgICAgIGF3YWl0IGVkaXRvci5uYXZpZ2F0ZShuYW1lLCBwb3MsIHJlcGxhY2VTdGF0ZSk7CiAgICAgIH0sCiAgICAgICJlZGl0b3IucmVsb2FkUGFnZSI6IGFzeW5jIChjdHgpID0+IHsKICAgICAgICBhd2FpdCBlZGl0b3IucmVsb2FkUGFnZSgpOwogICAgICB9LAogICAgICAiZWRpdG9yLm9wZW5VcmwiOiBhc3luYyAoY3R4LCB1cmwpID0+IHsKICAgICAgICBsZXQgd2luID0gd2luZG93Lm9wZW4odXJsLCAiX2JsYW5rIik7CiAgICAgICAgaWYgKHdpbikgewogICAgICAgICAgd2luLmZvY3VzKCk7CiAgICAgICAgfQogICAgICB9LAogICAgICAiZWRpdG9yLmZsYXNoTm90aWZpY2F0aW9uIjogKGN0eCwgbWVzc2FnZSwgdHlwZSA9ICJpbmZvIikgPT4gewogICAgICAgIGVkaXRvci5mbGFzaE5vdGlmaWNhdGlvbihtZXNzYWdlLCB0eXBlKTsKICAgICAgfSwKICAgICAgImVkaXRvci5maWx0ZXJCb3giOiAoY3R4LCBsYWJlbCwgb3B0aW9ucywgaGVscFRleHQgPSAiIiwgcGxhY2VIb2xkZXIgPSAiIikgPT4gewogICAgICAgIHJldHVybiBlZGl0b3IuZmlsdGVyQm94KGxhYmVsLCBvcHRpb25zLCBoZWxwVGV4dCwgcGxhY2VIb2xkZXIpOwogICAgICB9LAogICAgICAiZWRpdG9yLnNob3dQYW5lbCI6IChjdHgsIGlkLCBtb2RlLCBodG1sLCBzY3JpcHQpID0+IHsKICAgICAgICBlZGl0b3Iudmlld0Rpc3BhdGNoKHsKICAgICAgICAgIHR5cGU6ICJzaG93LXBhbmVsIiwKICAgICAgICAgIGlkLAogICAgICAgICAgY29uZmlnOiB7IGh0bWwsIHNjcmlwdCwgbW9kZSB9CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgICJlZGl0b3IuaGlkZVBhbmVsIjogKGN0eCwgaWQpID0+IHsKICAgICAgICBlZGl0b3Iudmlld0Rpc3BhdGNoKHsKICAgICAgICAgIHR5cGU6ICJoaWRlLXBhbmVsIiwKICAgICAgICAgIGlkCiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgICJlZGl0b3Iuc2hvd1JocyI6IChjdHgsIGh0bWwsIHNjcmlwdCwgZmxleCkgPT4gewogICAgICAgIHN5c2NhbGxzWyJlZGl0b3Iuc2hvd1BhbmVsIl0oY3R4LCAicmhzIiwgZmxleCwgaHRtbCwgc2NyaXB0KTsKICAgICAgfSwKICAgICAgImVkaXRvci5oaWRlUmhzIjogKGN0eCkgPT4gewogICAgICAgIHN5c2NhbGxzWyJlZGl0b3IuaGlkZVBhbmVsIl0oY3R4LCAicmhzIik7CiAgICAgIH0sCiAgICAgICJlZGl0b3Iuc2hvd0xocyI6IChjdHgsIGh0bWwsIHNjcmlwdCwgZmxleCkgPT4gewogICAgICAgIHN5c2NhbGxzWyJlZGl0b3Iuc2hvd1BhbmVsIl0oY3R4LCAibGhzIiwgZmxleCwgaHRtbCwgc2NyaXB0KTsKICAgICAgfSwKICAgICAgImVkaXRvci5oaWRlTGhzIjogKGN0eCkgPT4gewogICAgICAgIHN5c2NhbGxzWyJlZGl0b3IuaGlkZVBhbmVsIl0oY3R4LCAibGhzIik7CiAgICAgIH0sCiAgICAgICJlZGl0b3Iuc2hvd0JocyI6IChjdHgsIGh0bWwsIHNjcmlwdCwgZmxleCkgPT4gewogICAgICAgIHN5c2NhbGxzWyJlZGl0b3Iuc2hvd1BhbmVsIl0oY3R4LCAiYmhzIiwgZmxleCwgaHRtbCwgc2NyaXB0KTsKICAgICAgfSwKICAgICAgImVkaXRvci5oaWRlQmhzIjogKGN0eCkgPT4gewogICAgICAgIHN5c2NhbGxzWyJlZGl0b3IuaGlkZVBhbmVsIl0oY3R4LCAiYmhzIik7CiAgICAgIH0sCiAgICAgICJlZGl0b3IuaW5zZXJ0QXRQb3MiOiAoY3R4LCB0ZXh0LCBwb3MpID0+IHsKICAgICAgICBlZGl0b3IuZWRpdG9yVmlldy5kaXNwYXRjaCh7CiAgICAgICAgICBjaGFuZ2VzOiB7CiAgICAgICAgICAgIGluc2VydDogdGV4dCwKICAgICAgICAgICAgZnJvbTogcG9zCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgICJlZGl0b3IucmVwbGFjZVJhbmdlIjogKGN0eCwgZnJvbTIsIHRvLCB0ZXh0KSA9PiB7CiAgICAgICAgZWRpdG9yLmVkaXRvclZpZXcuZGlzcGF0Y2goewogICAgICAgICAgY2hhbmdlczogewogICAgICAgICAgICBpbnNlcnQ6IHRleHQsCiAgICAgICAgICAgIGZyb206IGZyb20yLAogICAgICAgICAgICB0bwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LAogICAgICAiZWRpdG9yLm1vdmVDdXJzb3IiOiAoY3R4LCBwb3MpID0+IHsKICAgICAgICBlZGl0b3IuZWRpdG9yVmlldy5kaXNwYXRjaCh7CiAgICAgICAgICBzZWxlY3Rpb246IHsKICAgICAgICAgICAgYW5jaG9yOiBwb3MKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSwKICAgICAgImVkaXRvci5zZXRTZWxlY3Rpb24iOiAoY3R4LCBmcm9tMiwgdG8pID0+IHsKICAgICAgICBsZXQgZWRpdG9yVmlldyA9IGVkaXRvci5lZGl0b3JWaWV3OwogICAgICAgIGVkaXRvclZpZXcuZGlzcGF0Y2goewogICAgICAgICAgc2VsZWN0aW9uOiB7CiAgICAgICAgICAgIGFuY2hvcjogZnJvbTIsCiAgICAgICAgICAgIGhlYWQ6IHRvCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgICJlZGl0b3IuaW5zZXJ0QXRDdXJzb3IiOiAoY3R4LCB0ZXh0KSA9PiB7CiAgICAgICAgbGV0IGVkaXRvclZpZXcgPSBlZGl0b3IuZWRpdG9yVmlldzsKICAgICAgICBsZXQgZnJvbTIgPSBlZGl0b3JWaWV3LnN0YXRlLnNlbGVjdGlvbi5tYWluLmZyb207CiAgICAgICAgZWRpdG9yVmlldy5kaXNwYXRjaCh7CiAgICAgICAgICBjaGFuZ2VzOiB7CiAgICAgICAgICAgIGluc2VydDogdGV4dCwKICAgICAgICAgICAgZnJvbTogZnJvbTIKICAgICAgICAgIH0sCiAgICAgICAgICBzZWxlY3Rpb246IHsKICAgICAgICAgICAgYW5jaG9yOiBmcm9tMiArIHRleHQubGVuZ3RoCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgICJlZGl0b3IubWF0Y2hCZWZvcmUiOiAoY3R4LCByZWdleHAyKSA9PiB7CiAgICAgICAgY29uc3QgZWRpdG9yU3RhdGUgPSBlZGl0b3IuZWRpdG9yVmlldy5zdGF0ZTsKICAgICAgICBsZXQgc2VsZWN0aW9uID0gZWRpdG9yU3RhdGUuc2VsZWN0aW9uLm1haW47CiAgICAgICAgbGV0IGZyb20yID0gc2VsZWN0aW9uLmZyb207CiAgICAgICAgaWYgKHNlbGVjdGlvbi5lbXB0eSkgewogICAgICAgICAgbGV0IGxpbmUgPSBlZGl0b3JTdGF0ZS5kb2MubGluZUF0KGZyb20yKTsKICAgICAgICAgIGxldCBzdGFydCA9IE1hdGgubWF4KGxpbmUuZnJvbSwgZnJvbTIgLSAyNTApOwogICAgICAgICAgbGV0IHN0cjIgPSBsaW5lLnRleHQuc2xpY2Uoc3RhcnQgLSBsaW5lLmZyb20sIGZyb20yIC0gbGluZS5mcm9tKTsKICAgICAgICAgIGxldCBmb3VuZCA9IHN0cjIuc2VhcmNoKGVuc3VyZUFuY2hvcihuZXcgUmVnRXhwKHJlZ2V4cDIpLCBmYWxzZSkpOwogICAgICAgICAgcmV0dXJuIGZvdW5kIDwgMCA/IG51bGwgOiB7IGZyb206IHN0YXJ0ICsgZm91bmQsIHRvOiBmcm9tMiwgdGV4dDogc3RyMi5zbGljZShmb3VuZCkgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0sCiAgICAgICJlZGl0b3IuZGlzcGF0Y2giOiAoY3R4LCBjaGFuZ2UpID0+IHsKICAgICAgICBlZGl0b3IuZWRpdG9yVmlldy5kaXNwYXRjaChjaGFuZ2UpOwogICAgICB9LAogICAgICAiZWRpdG9yLnByb21wdCI6IChjdHgsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSA9ICIiKSA9PiB7CiAgICAgICAgcmV0dXJuIHByb21wdChtZXNzYWdlLCBkZWZhdWx0VmFsdWUpOwogICAgICB9LAogICAgICAiZWRpdG9yLmVuYWJsZVJlYWRPbmx5TW9kZSI6IChjdHgsIGVuYWJsZWQpID0+IHsKICAgICAgICBlZGl0b3Iudmlld0Rpc3BhdGNoKHsKICAgICAgICAgIHR5cGU6ICJzZXQtZWRpdG9yLXJvIiwKICAgICAgICAgIGVuYWJsZWQKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIHJldHVybiBzeXNjYWxsczsKICB9CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvc3lzY2FsbHMvZnVsbHRleHQudHMKICBmdW5jdGlvbiBmdWxsdGV4dFN5c2NhbGxzKHNwYWNlKSB7CiAgICByZXR1cm4gcHJveHlTeXNjYWxscygKICAgICAgWyJmdWxsdGV4dC5zZWFyY2giLCAiZnVsbHRleHQuZGVsZXRlIiwgImZ1bGx0ZXh0LmluZGV4Il0sCiAgICAgIChjdHgsIG5hbWUsIC4uLmFyZ3MpID0+IHNwYWNlLnByb3h5U3lzY2FsbChjdHgucGx1ZywgbmFtZSwgYXJncykKICAgICk7CiAgfQoKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL3N5c2NhbGxzL2luZGV4LnRzCiAgZnVuY3Rpb24gaW5kZXhlclN5c2NhbGxzKHNwYWNlKSB7CiAgICByZXR1cm4gcHJveHlTeXNjYWxscygKICAgICAgWwogICAgICAgICJpbmRleC5xdWVyeVByZWZpeCIsCiAgICAgICAgImluZGV4LmdldCIsCiAgICAgICAgImluZGV4LnNldCIsCiAgICAgICAgImluZGV4LmJhdGNoU2V0IiwKICAgICAgICAiaW5kZXguZGVsZXRlIgogICAgICBdLAogICAgICAoY3R4LCBuYW1lLCAuLi5hcmdzKSA9PiBzcGFjZS5wcm94eVN5c2NhbGwoY3R4LnBsdWcsIG5hbWUsIGFyZ3MpCiAgICApOwogIH0KCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9zeXNjYWxscy9zcGFjZS50cwogIGZ1bmN0aW9uIHNwYWNlU3lzY2FsbHMoZWRpdG9yKSB7CiAgICByZXR1cm4gewogICAgICAic3BhY2UubGlzdFBhZ2VzIjogKCkgPT4gewogICAgICAgIHJldHVybiBbLi4uZWRpdG9yLnNwYWNlLmxpc3RQYWdlcygpXTsKICAgICAgfSwKICAgICAgInNwYWNlLnJlYWRQYWdlIjogYXN5bmMgKGN0eCwgbmFtZSkgPT4gewogICAgICAgIHJldHVybiBhd2FpdCBlZGl0b3Iuc3BhY2UucmVhZFBhZ2UobmFtZSk7CiAgICAgIH0sCiAgICAgICJzcGFjZS5nZXRQYWdlTWV0YSI6IGFzeW5jIChjdHgsIG5hbWUpID0+IHsKICAgICAgICByZXR1cm4gYXdhaXQgZWRpdG9yLnNwYWNlLmdldFBhZ2VNZXRhKG5hbWUpOwogICAgICB9LAogICAgICAic3BhY2Uud3JpdGVQYWdlIjogYXN5bmMgKGN0eCwgbmFtZSwgdGV4dCkgPT4gewogICAgICAgIHJldHVybiBhd2FpdCBlZGl0b3Iuc3BhY2Uud3JpdGVQYWdlKG5hbWUsIHRleHQpOwogICAgICB9LAogICAgICAic3BhY2UuZGVsZXRlUGFnZSI6IGFzeW5jIChjdHgsIG5hbWUpID0+IHsKICAgICAgICBpZiAoZWRpdG9yLmN1cnJlbnRQYWdlID09PSBuYW1lKSB7CiAgICAgICAgICBhd2FpdCBlZGl0b3IubmF2aWdhdGUoIiIpOwogICAgICAgIH0KICAgICAgICBlZGl0b3Iub3BlblBhZ2VzLmRlbGV0ZShuYW1lKTsKICAgICAgICBjb25zb2xlLmxvZygiRGVsZXRpbmcgcGFnZSIpOwogICAgICAgIGF3YWl0IGVkaXRvci5zcGFjZS5kZWxldGVQYWdlKG5hbWUpOwogICAgICB9LAogICAgICAic3BhY2UubGlzdFBsdWdzIjogYXN5bmMgKCkgPT4gewogICAgICAgIHJldHVybiBhd2FpdCBlZGl0b3Iuc3BhY2UubGlzdFBsdWdzKCk7CiAgICAgIH0sCiAgICAgICJzcGFjZS5saXN0QXR0YWNobWVudHMiOiBhc3luYyAoY3R4KSA9PiB7CiAgICAgICAgcmV0dXJuIGF3YWl0IGVkaXRvci5zcGFjZS5mZXRjaEF0dGFjaG1lbnRMaXN0KCk7CiAgICAgIH0sCiAgICAgICJzcGFjZS5yZWFkQXR0YWNobWVudCI6IGFzeW5jIChjdHgsIG5hbWUpID0+IHsKICAgICAgICByZXR1cm4gYXdhaXQgZWRpdG9yLnNwYWNlLnJlYWRBdHRhY2htZW50KG5hbWUsICJkYXRhdXJsIik7CiAgICAgIH0sCiAgICAgICJzcGFjZS5nZXRBdHRhY2htZW50TWV0YSI6IGFzeW5jIChjdHgsIG5hbWUpID0+IHsKICAgICAgICByZXR1cm4gYXdhaXQgZWRpdG9yLnNwYWNlLmdldEF0dGFjaG1lbnRNZXRhKG5hbWUpOwogICAgICB9LAogICAgICAic3BhY2Uud3JpdGVBdHRhY2htZW50IjogYXN5bmMgKGN0eCwgbmFtZSwgZW5jb2RpbmcsIGRhdGEpID0+IHsKICAgICAgICByZXR1cm4gYXdhaXQgZWRpdG9yLnNwYWNlLndyaXRlQXR0YWNobWVudChuYW1lLCBlbmNvZGluZywgZGF0YSk7CiAgICAgIH0sCiAgICAgICJzcGFjZS5kZWxldGVBdHRhY2htZW50IjogYXN5bmMgKGN0eCwgbmFtZSkgPT4gewogICAgICAgIGF3YWl0IGVkaXRvci5zcGFjZS5kZWxldGVBdHRhY2htZW50KG5hbWUpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9zeXNjYWxscy9zdG9yZS50cwogIGZ1bmN0aW9uIHN0b3JlU3lzY2FsbHMyKHNwYWNlKSB7CiAgICByZXR1cm4gcHJveHlTeXNjYWxscygKICAgICAgWwogICAgICAgICJzdG9yZS5xdWVyeVByZWZpeCIsCiAgICAgICAgInN0b3JlLmdldCIsCiAgICAgICAgInN0b3JlLnNldCIsCiAgICAgICAgInN0b3JlLmJhdGNoU2V0IiwKICAgICAgICAic3RvcmUuZGVsZXRlIiwKICAgICAgICAic3RvcmUuZGVsZXRlUHJlZml4IgogICAgICBdLAogICAgICAoY3R4LCBuYW1lLCAuLi5hcmdzKSA9PiBzcGFjZS5wcm94eVN5c2NhbGwoY3R4LnBsdWcsIG5hbWUsIGFyZ3MpCiAgICApOwogIH0KCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9zeXNjYWxscy9zeXN0ZW0udHMKICBmdW5jdGlvbiBzeXN0ZW1TeXNjYWxscyhlZGl0b3IpIHsKICAgIHJldHVybiB7CiAgICAgICJzeXN0ZW0uaW52b2tlRnVuY3Rpb24iOiBhc3luYyAoY3R4LCBlbnYyLCBuYW1lLCAuLi5hcmdzKSA9PiB7CiAgICAgICAgaWYgKCFjdHgucGx1ZykgewogICAgICAgICAgdGhyb3cgRXJyb3IoIk5vIHBsdWcgYXNzb2NpYXRlZCB3aXRoIGNvbnRleHQiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVudjIgPT09ICJjbGllbnQiKSB7CiAgICAgICAgICByZXR1cm4gY3R4LnBsdWcuaW52b2tlKG5hbWUsIGFyZ3MpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZWRpdG9yLnNwYWNlLmludm9rZUZ1bmN0aW9uKGN0eC5wbHVnLCBlbnYyLCBuYW1lLCBhcmdzKTsKICAgICAgfSwKICAgICAgInN5c3RlbS5pbnZva2VDb21tYW5kIjogYXN5bmMgKGN0eCwgbmFtZSkgPT4gewogICAgICAgIHJldHVybiBlZGl0b3IucnVuQ29tbWFuZEJ5TmFtZShuYW1lKTsKICAgICAgfSwKICAgICAgInN5c3RlbS5saXN0Q29tbWFuZHMiOiBhc3luYyAoY3R4KSA9PiB7CiAgICAgICAgbGV0IGFsbENvbW1hbmRzID0ge307CiAgICAgICAgZm9yIChsZXQgW2NtZCwgZGVmMl0gb2YgZWRpdG9yLmNvbW1hbmRIb29rLmVkaXRvckNvbW1hbmRzKSB7CiAgICAgICAgICBhbGxDb21tYW5kc1tjbWRdID0gZGVmMi5jb21tYW5kOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWxsQ29tbWFuZHM7CiAgICAgIH0sCiAgICAgICJzeXN0ZW0ucmVsb2FkUGx1Z3MiOiBhc3luYyAoKSA9PiB7CiAgICAgICAgcmV0dXJuIGVkaXRvci5yZWxvYWRQbHVncygpOwogICAgICB9LAogICAgICAic2FuZGJveC5nZXRTZXJ2ZXJMb2dzIjogYXN5bmMgKGN0eCkgPT4gewogICAgICAgIHJldHVybiBlZGl0b3Iuc3BhY2UucHJveHlTeXNjYWxsKGN0eC5wbHVnLCAic2FuZGJveC5nZXRMb2dzIiwgW10pOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi90eXBlcy50cwogIHZhciBpbml0aWFsVmlld1N0YXRlID0gewogICAgcGVybTogInJ3IiwKICAgIGZvcmNlZFJPTW9kZTogZmFsc2UsCiAgICBpc0xvYWRpbmc6IGZhbHNlLAogICAgc2hvd1BhZ2VOYXZpZ2F0b3I6IGZhbHNlLAogICAgc2hvd0NvbW1hbmRQYWxldHRlOiBmYWxzZSwKICAgIHVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSwKICAgIHBhbmVsczogewogICAgICBsaHM6IHt9LAogICAgICByaHM6IHt9LAogICAgICBiaHM6IHt9LAogICAgICBtb2RhbDoge30KICAgIH0sCiAgICBhbGxQYWdlczogLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwKICAgIGNvbW1hbmRzOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLAogICAgcmVjZW50Q29tbWFuZHM6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksCiAgICBub3RpZmljYXRpb25zOiBbXSwKICAgIHNob3dGaWx0ZXJCb3g6IGZhbHNlLAogICAgZmlsdGVyQm94SGVscFRleHQ6ICIiLAogICAgZmlsdGVyQm94TGFiZWw6ICIiLAogICAgZmlsdGVyQm94T25TZWxlY3Q6ICgpID0+IHsKICAgIH0sCiAgICBmaWx0ZXJCb3hPcHRpb25zOiBbXSwKICAgIGZpbHRlckJveFBsYWNlSG9sZGVyOiAiIgogIH07CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvZWRpdG9yLnRzeAogIHZhciBQYWdlU3RhdGUgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihzY3JvbGxUb3AsIHNlbGVjdGlvbikgewogICAgICB0aGlzLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKICAgICAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CiAgICB9CiAgfTsKICB2YXIgc2F2ZUludGVydmFsID0gMWUzOwogIHZhciBFZGl0b3IgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3RvcihzcGFjZSwgcGFyZW50LCB1cmxQcmVmaXgsIGluZGV4UGFnZSkgewogICAgICB0aGlzLm9wZW5QYWdlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIHRoaXMuZGVib3VuY2VkVXBkYXRlRXZlbnQgPSB0aHJvdHRsZSgoKSA9PiB7CiAgICAgICAgdGhpcy5ldmVudEhvb2suZGlzcGF0Y2hFdmVudCgiZWRpdG9yOnVwZGF0ZWQiKS5jYXRjaCgoZTUpID0+IGNvbnNvbGUuZXJyb3IoIkVycm9yIGRpc3BhdGNoaW5nIGVkaXRvcjp1cGRhdGVkIGV2ZW50IiwgZTUpKTsKICAgICAgfSwgMWUzKTsKICAgICAgdGhpcy5zeXN0ZW0gPSBuZXcgU3lzdGVtKCJjbGllbnQiKTsKICAgICAgdGhpcy5tZEV4dGVuc2lvbnMgPSBbXTsKICAgICAgdGhpcy5zcGFjZSA9IHNwYWNlOwogICAgICB0aGlzLnVybFByZWZpeCA9IHVybFByZWZpeDsKICAgICAgdGhpcy52aWV3U3RhdGUgPSBpbml0aWFsVmlld1N0YXRlOwogICAgICB0aGlzLnZpZXdEaXNwYXRjaCA9ICgpID0+IHsKICAgICAgfTsKICAgICAgdGhpcy5pbmRleFBhZ2UgPSBpbmRleFBhZ2U7CiAgICAgIHRoaXMuZXZlbnRIb29rID0gbmV3IEV2ZW50SG9vaygpOwogICAgICB0aGlzLnN5c3RlbS5hZGRIb29rKHRoaXMuZXZlbnRIb29rKTsKICAgICAgdGhpcy5jb21tYW5kSG9vayA9IG5ldyBDb21tYW5kSG9vaygpOwogICAgICB0aGlzLmNvbW1hbmRIb29rLm9uKHsKICAgICAgICBjb21tYW5kc1VwZGF0ZWQ6IChjb21tYW5kTWFwKSA9PiB7CiAgICAgICAgICB0aGlzLnZpZXdEaXNwYXRjaCh7CiAgICAgICAgICAgIHR5cGU6ICJ1cGRhdGUtY29tbWFuZHMiLAogICAgICAgICAgICBjb21tYW5kczogY29tbWFuZE1hcAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zeXN0ZW0uYWRkSG9vayh0aGlzLmNvbW1hbmRIb29rKTsKICAgICAgdGhpcy5zbGFzaENvbW1hbmRIb29rID0gbmV3IFNsYXNoQ29tbWFuZEhvb2sodGhpcyk7CiAgICAgIHRoaXMuc3lzdGVtLmFkZEhvb2sodGhpcy5zbGFzaENvbW1hbmRIb29rKTsKICAgICAgdGhpcy5yZW5kZXIocGFyZW50KTsKICAgICAgdGhpcy5lZGl0b3JWaWV3ID0gbmV3IE0yKHsKICAgICAgICBzdGF0ZTogdGhpcy5jcmVhdGVFZGl0b3JTdGF0ZSgiIiwgIiIpLAogICAgICAgIHBhcmVudDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNiLWVkaXRvciIpCiAgICAgIH0pOwogICAgICB0aGlzLnBhZ2VOYXZpZ2F0b3IgPSBuZXcgUGF0aFBhZ2VOYXZpZ2F0b3IoaW5kZXhQYWdlLCB1cmxQcmVmaXgpOwogICAgICB0aGlzLnN5c3RlbS5yZWdpc3RlclN5c2NhbGxzKAogICAgICAgIFtdLAogICAgICAgIGV2ZW50U3lzY2FsbHModGhpcy5ldmVudEhvb2spLAogICAgICAgIGVkaXRvclN5c2NhbGxzKHRoaXMpLAogICAgICAgIHNwYWNlU3lzY2FsbHModGhpcyksCiAgICAgICAgaW5kZXhlclN5c2NhbGxzKHRoaXMuc3BhY2UpLAogICAgICAgIGZ1bGx0ZXh0U3lzY2FsbHModGhpcy5zcGFjZSksCiAgICAgICAgc3lzdGVtU3lzY2FsbHModGhpcyksCiAgICAgICAgbWFya2Rvd25TeXNjYWxscyhidWlsZE1hcmtkb3duKHRoaXMubWRFeHRlbnNpb25zKSksCiAgICAgICAgY2xpZW50U3RvcmVTeXNjYWxscygpLAogICAgICAgIHN0b3JlU3lzY2FsbHMyKHRoaXMuc3BhY2UpLAogICAgICAgIHNhbmRib3hTeXNjYWxscyh0aGlzLnN5c3RlbSkKICAgICAgKTsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZXYpID0+IHsKICAgICAgICBpZiAoIXRoaXMuZWRpdG9yVmlldz8uaGFzRm9jdXMpIHsKICAgICAgICAgIGlmIChldi50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbS10ZXh0ZmllbGQiKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZW8odGhpcy5lZGl0b3JWaWV3LCBldiwgImVkaXRvciIpKSB7CiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCAoZXYpID0+IHsKICAgICAgICBpZiAoZXYudG91Y2hlcy5sZW5ndGggPiAyKSB7CiAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLnZpZXdEaXNwYXRjaCh7IHR5cGU6ICJzaG93LXBhbGV0dGUiIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBnZXQgY3VycmVudFBhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLnZpZXdTdGF0ZS5jdXJyZW50UGFnZTsKICAgIH0KICAgIGFzeW5jIGluaXQoKSB7CiAgICAgIHRoaXMuZm9jdXMoKTsKICAgICAgdGhpcy5wYWdlTmF2aWdhdG9yLnN1YnNjcmliZShhc3luYyAocGFnZU5hbWUsIHBvcykgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJOb3cgbmF2aWdhdGluZyB0byIsIHBhZ2VOYW1lKTsKICAgICAgICBpZiAoIXRoaXMuZWRpdG9yVmlldykgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsZXQgc3RhdGVSZXN0b3JlZCA9IGF3YWl0IHRoaXMubG9hZFBhZ2UocGFnZU5hbWUpOwogICAgICAgIGlmIChwb3MpIHsKICAgICAgICAgIGlmICh0eXBlb2YgcG9zID09PSAic3RyaW5nIikgewogICAgICAgICAgICBsZXQgcG9zTG9va3VwID0gYXdhaXQgdGhpcy5zeXN0ZW0ubG9jYWxTeXNjYWxsKCJjb3JlIiwgImluZGV4LmdldCIsIFsKICAgICAgICAgICAgICBwYWdlTmFtZSwKICAgICAgICAgICAgICBgYToke3BhZ2VOYW1lfTpAJHtwb3N9YAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgaWYgKCFwb3NMb29rdXApIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mbGFzaE5vdGlmaWNhdGlvbigKICAgICAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBhbmNob3IgQCR7cG9zfWAsCiAgICAgICAgICAgICAgICAiZXJyb3IiCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBwb3MgPSArcG9zTG9va3VwOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmVkaXRvclZpZXcuZGlzcGF0Y2goewogICAgICAgICAgICBzZWxlY3Rpb246IHsgYW5jaG9yOiBwb3MgfSwKICAgICAgICAgICAgc2Nyb2xsSW50b1ZpZXc6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlUmVzdG9yZWQpIHsKICAgICAgICAgIHRoaXMuZWRpdG9yVmlldy5kaXNwYXRjaCh7CiAgICAgICAgICAgIHNlbGVjdGlvbjogeyBhbmNob3I6IDAgfSwKICAgICAgICAgICAgc2Nyb2xsSW50b1ZpZXc6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGxldCBnbG9iYWxNb2R1bGVzID0gYXdhaXQgKGF3YWl0IGZldGNoKGAke3RoaXMudXJsUHJlZml4fS9nbG9iYWwucGx1Zy5qc29uYCkpLmpzb24oKTsKICAgICAgdGhpcy5zeXN0ZW0ub24oewogICAgICAgIHBsdWdMb2FkZWQ6IChwbHVnKSA9PiB7CiAgICAgICAgICBzYWZlUnVuKGFzeW5jICgpID0+IHsKICAgICAgICAgICAgZm9yIChsZXQgW21vZE5hbWUsIGNvZGVdIG9mIE9iamVjdC5lbnRyaWVzKAogICAgICAgICAgICAgIGdsb2JhbE1vZHVsZXMuZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICkpIHsKICAgICAgICAgICAgICBhd2FpdCBwbHVnLnNhbmRib3gubG9hZERlcGVuZGVuY3kobW9kTmFtZSwgY29kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc3BhY2Uub24oewogICAgICAgIHBhZ2VDaGFuZ2VkOiAobWV0YTIpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09PSBtZXRhMi5uYW1lKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJQYWdlIGNoYW5nZWQgb24gZGlzaywgcmVsb2FkaW5nIik7CiAgICAgICAgICAgIHRoaXMuZmxhc2hOb3RpZmljYXRpb24oIlBhZ2UgY2hhbmdlZCBvbiBkaXNrLCByZWxvYWRpbmciKTsKICAgICAgICAgICAgdGhpcy5yZWxvYWRQYWdlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBwYWdlTGlzdFVwZGF0ZWQ6IChwYWdlcykgPT4gewogICAgICAgICAgdGhpcy52aWV3RGlzcGF0Y2goewogICAgICAgICAgICB0eXBlOiAicGFnZXMtbGlzdGVkIiwKICAgICAgICAgICAgcGFnZXMKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGF3YWl0IHRoaXMucmVsb2FkUGx1Z3MoKTsKICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaEFwcEV2ZW50KCJlZGl0b3I6aW5pdCIpOwogICAgfQogICAgYXN5bmMgc2F2ZShpbW1lZGlhdGUgPSBmYWxzZSkgewogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU3LCByZWplY3QpID0+IHsKICAgICAgICBpZiAoIXRoaXMudmlld1N0YXRlLnVuc2F2ZWRDaGFuZ2VzKSB7CiAgICAgICAgICByZXR1cm4gcmVzb2x2ZTcoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuc2F2ZVRpbWVvdXQpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNhdmVUaW1lb3V0KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zYXZlVGltZW91dCA9IHNldFRpbWVvdXQoCiAgICAgICAgICAoKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKSB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coIlNhdmluZyBwYWdlIiwgdGhpcy5jdXJyZW50UGFnZSk7CiAgICAgICAgICAgICAgdGhpcy5zcGFjZS53cml0ZVBhZ2UoCiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLAogICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JWaWV3LnN0YXRlLnNsaWNlRG9jKDApLAogICAgICAgICAgICAgICAgdHJ1ZQogICAgICAgICAgICAgICkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLnZpZXdEaXNwYXRjaCh7IHR5cGU6ICJwYWdlLXNhdmVkIiB9KTsKICAgICAgICAgICAgICAgIHJlc29sdmU3KCk7CiAgICAgICAgICAgICAgfSkuY2F0Y2goKGU1KSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLmZsYXNoTm90aWZpY2F0aW9uKAogICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHNhdmUgcGFnZSwgcmV0cnlpbmcgYWdhaW4gaW4gMTAgc2Vjb25kcyIsCiAgICAgICAgICAgICAgICAgICJlcnJvciIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB0aGlzLnNhdmVUaW1lb3V0ID0gc2V0VGltZW91dCh0aGlzLnNhdmUuYmluZCh0aGlzKSwgMWU0KTsKICAgICAgICAgICAgICAgIHJlamVjdChlNSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmVzb2x2ZTcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGltbWVkaWF0ZSA/IDAgOiBzYXZlSW50ZXJ2YWwKICAgICAgICApOwogICAgICB9KTsKICAgIH0KICAgIGZsYXNoTm90aWZpY2F0aW9uKG1lc3NhZ2UsIHR5cGUgPSAiaW5mbyIpIHsKICAgICAgbGV0IGlkID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWU2KTsKICAgICAgdGhpcy52aWV3RGlzcGF0Y2goewogICAgICAgIHR5cGU6ICJzaG93LW5vdGlmaWNhdGlvbiIsCiAgICAgICAgbm90aWZpY2F0aW9uOiB7CiAgICAgICAgICBpZCwKICAgICAgICAgIHR5cGUsCiAgICAgICAgICBtZXNzYWdlLAogICAgICAgICAgZGF0ZTogbmV3IERhdGUoKQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHNldFRpbWVvdXQoCiAgICAgICAgKCkgPT4gewogICAgICAgICAgdGhpcy52aWV3RGlzcGF0Y2goewogICAgICAgICAgICB0eXBlOiAiZGlzbWlzcy1ub3RpZmljYXRpb24iLAogICAgICAgICAgICBpZAogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICB0eXBlID09PSAiaW5mbyIgPyAyZTMgOiA1ZTMKICAgICAgKTsKICAgIH0KICAgIGZpbHRlckJveChsYWJlbCwgb3B0aW9ucywgaGVscFRleHQgPSAiIiwgcGxhY2VIb2xkZXIgPSAiIikgewogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU3KSA9PiB7CiAgICAgICAgdGhpcy52aWV3RGlzcGF0Y2goewogICAgICAgICAgdHlwZTogInNob3ctZmlsdGVyYm94IiwKICAgICAgICAgIGxhYmVsLAogICAgICAgICAgb3B0aW9ucywKICAgICAgICAgIHBsYWNlSG9sZGVyLAogICAgICAgICAgaGVscFRleHQsCiAgICAgICAgICBvblNlbGVjdDogKG9wdGlvbikgPT4gewogICAgICAgICAgICB0aGlzLnZpZXdEaXNwYXRjaCh7IHR5cGU6ICJoaWRlLWZpbHRlcmJveCIgfSk7CiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTsKICAgICAgICAgICAgcmVzb2x2ZTcob3B0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBkaXNwYXRjaEFwcEV2ZW50KG5hbWUsIGRhdGEpIHsKICAgICAgcmV0dXJuIHRoaXMuZXZlbnRIb29rLmRpc3BhdGNoRXZlbnQobmFtZSwgZGF0YSk7CiAgICB9CiAgICBjcmVhdGVFZGl0b3JTdGF0ZShwYWdlTmFtZSwgdGV4dCkgewogICAgICBsZXQgY29tbWFuZEtleUJpbmRpbmdzID0gW107CiAgICAgIGZvciAobGV0IGRlZjIgb2YgdGhpcy5jb21tYW5kSG9vay5lZGl0b3JDb21tYW5kcy52YWx1ZXMoKSkgewogICAgICAgIGlmIChkZWYyLmNvbW1hbmQua2V5KSB7CiAgICAgICAgICBjb21tYW5kS2V5QmluZGluZ3MucHVzaCh7CiAgICAgICAgICAgIGtleTogZGVmMi5jb21tYW5kLmtleSwKICAgICAgICAgICAgbWFjOiBkZWYyLmNvbW1hbmQubWFjLAogICAgICAgICAgICBydW46ICgpID0+IHsKICAgICAgICAgICAgICBpZiAoZGVmMi5jb21tYW5kLmNvbnRleHRzKSB7CiAgICAgICAgICAgICAgICBsZXQgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpOwogICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8ICFkZWYyLmNvbW1hbmQuY29udGV4dHMuaW5jbHVkZXMoY29udGV4dCkpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGRlZjIucnVuKS5jYXRjaCgoZTUpID0+IHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZTUpOwogICAgICAgICAgICAgICAgdGhpcy5mbGFzaE5vdGlmaWNhdGlvbigKICAgICAgICAgICAgICAgICAgYEVycm9yIHJ1bm5pbmcgY29tbWFuZDogJHtlNS5tZXNzYWdlfWAsCiAgICAgICAgICAgICAgICAgICJlcnJvciIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXM7CiAgICAgIHJldHVybiB3LmNyZWF0ZSh7CiAgICAgICAgZG9jOiB0ZXh0LAogICAgICAgIGV4dGVuc2lvbnM6IFsKICAgICAgICAgIGFlMTIoewogICAgICAgICAgICBiYXNlOiBidWlsZE1hcmtkb3duKHRoaXMubWRFeHRlbnNpb25zKSwKICAgICAgICAgICAgY29kZUxhbmd1YWdlczogWwogICAgICAgICAgICAgIGo5Lm9mKHsKICAgICAgICAgICAgICAgIG5hbWU6ICJ5YW1sIiwKICAgICAgICAgICAgICAgIGFsaWFzOiBbIm1ldGEiLCAiZGF0YSJdLAogICAgICAgICAgICAgICAgc3VwcG9ydDogbmV3IGR0NihxMTAuZGVmaW5lKGEzKSkKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBqOS5vZih7CiAgICAgICAgICAgICAgICBuYW1lOiAiamF2YXNjcmlwdCIsCiAgICAgICAgICAgICAgICBhbGlhczogWyJqcyJdLAogICAgICAgICAgICAgICAgc3VwcG9ydDogbmV3IGR0NihwMTcpCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgajkub2YoewogICAgICAgICAgICAgICAgbmFtZTogInR5cGVzY3JpcHQiLAogICAgICAgICAgICAgICAgYWxpYXM6IFsidHMiXSwKICAgICAgICAgICAgICAgIHN1cHBvcnQ6IG5ldyBkdDYoRzE4KQogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGFkZEtleW1hcDogdHJ1ZQogICAgICAgICAgfSksCiAgICAgICAgICBubjMoaGlnaGxpZ2h0U3R5bGVzKHRoaXMubWRFeHRlbnNpb25zKSksCiAgICAgICAgICBRdDIoewogICAgICAgICAgICBvdmVycmlkZTogWwogICAgICAgICAgICAgIHRoaXMuY29tcGxldGVyLmJpbmQodGhpcyksCiAgICAgICAgICAgICAgdGhpcy5zbGFzaENvbW1hbmRIb29rLnNsYXNoQ29tbWFuZENvbXBsZXRlci5iaW5kKAogICAgICAgICAgICAgICAgdGhpcy5zbGFzaENvbW1hbmRIb29rCiAgICAgICAgICAgICAgKQogICAgICAgICAgICBdCiAgICAgICAgICB9KSwKICAgICAgICAgIGlubGluZUltYWdlc1BsdWdpbigpLAogICAgICAgICAgbm8oKSwKICAgICAgICAgIG1uKCksCiAgICAgICAgICBpbygpLAogICAgICAgICAgc28oKSwKICAgICAgICAgIFhlMygpLAogICAgICAgICAgTTIubGluZVdyYXBwaW5nLAogICAgICAgICAgbGluZVdyYXBwZXIoWwogICAgICAgICAgICB7IHNlbGVjdG9yOiAiQVRYSGVhZGluZzEiLCBjbGFzczogInNiLWxpbmUtaDEiIH0sCiAgICAgICAgICAgIHsgc2VsZWN0b3I6ICJBVFhIZWFkaW5nMiIsIGNsYXNzOiAic2ItbGluZS1oMiIgfSwKICAgICAgICAgICAgeyBzZWxlY3RvcjogIkFUWEhlYWRpbmczIiwgY2xhc3M6ICJzYi1saW5lLWgzIiB9LAogICAgICAgICAgICB7IHNlbGVjdG9yOiAiTGlzdEl0ZW0iLCBjbGFzczogInNiLWxpbmUtbGkiLCBuZXN0aW5nOiB0cnVlIH0sCiAgICAgICAgICAgIHsgc2VsZWN0b3I6ICJCbG9ja3F1b3RlIiwgY2xhc3M6ICJzYi1saW5lLWJsb2NrcXVvdGUiIH0sCiAgICAgICAgICAgIHsgc2VsZWN0b3I6ICJUYXNrIiwgY2xhc3M6ICJzYi1saW5lLXRhc2siIH0sCiAgICAgICAgICAgIHsgc2VsZWN0b3I6ICJDb2RlQmxvY2siLCBjbGFzczogInNiLWxpbmUtY29kZSIgfSwKICAgICAgICAgICAgeyBzZWxlY3RvcjogIkZlbmNlZENvZGUiLCBjbGFzczogInNiLWxpbmUtZmVuY2VkLWNvZGUiIH0sCiAgICAgICAgICAgIHsgc2VsZWN0b3I6ICJDb21tZW50IiwgY2xhc3M6ICJzYi1saW5lLWNvbW1lbnQiIH0sCiAgICAgICAgICAgIHsgc2VsZWN0b3I6ICJCdWxsZXRMaXN0IiwgY2xhc3M6ICJzYi1saW5lLXVsIiB9LAogICAgICAgICAgICB7IHNlbGVjdG9yOiAiT3JkZXJlZExpc3QiLCBjbGFzczogInNiLWxpbmUtb2wiIH0sCiAgICAgICAgICAgIHsgc2VsZWN0b3I6ICJUYWJsZUhlYWRlciIsIGNsYXNzOiAic2ItbGluZS10YmwtaGVhZGVyIiB9CiAgICAgICAgICBdKSwKICAgICAgICAgIGJyLm9mKFsKICAgICAgICAgICAgLi4uc21hcnRRdW90ZUtleW1hcCwKICAgICAgICAgICAgLi4uenQ2LAogICAgICAgICAgICAuLi5vbjIsCiAgICAgICAgICAgIC4uLlVlNCwKICAgICAgICAgICAgLi4ua24yLAogICAgICAgICAgICAuLi5rdCwKICAgICAgICAgICAgR24yLAogICAgICAgICAgICAuLi5jb21tYW5kS2V5QmluZGluZ3MsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBrZXk6ICJDdHJsLWsiLAogICAgICAgICAgICAgIG1hYzogIkNtZC1rIiwKICAgICAgICAgICAgICBydW46ICgpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMudmlld0Rpc3BhdGNoKHsgdHlwZTogInN0YXJ0LW5hdmlnYXRlIiB9KTsKICAgICAgICAgICAgICAgIHRoaXMuc3BhY2UudXBkYXRlUGFnZUxpc3QoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGtleTogIkN0cmwtLyIsCiAgICAgICAgICAgICAgbWFjOiAiQ21kLS8iLAogICAgICAgICAgICAgIHJ1bjogKCkgPT4gewogICAgICAgICAgICAgICAgbGV0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTsKICAgICAgICAgICAgICAgIHRoaXMudmlld0Rpc3BhdGNoKHsKICAgICAgICAgICAgICAgICAgdHlwZTogInNob3ctcGFsZXR0ZSIsCiAgICAgICAgICAgICAgICAgIGNvbnRleHQKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAga2V5OiAiQ3RybC1sIiwKICAgICAgICAgICAgICBtYWM6ICJDbWQtbCIsCiAgICAgICAgICAgICAgcnVuOiAoKSA9PiB7CiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvclZpZXc/LmRpc3BhdGNoKHsKICAgICAgICAgICAgICAgICAgZWZmZWN0czogWwogICAgICAgICAgICAgICAgICAgIE0yLnNjcm9sbEludG9WaWV3KAogICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JWaWV3LnN0YXRlLnNlbGVjdGlvbi5tYWluLmFuY2hvciwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgeTogImNlbnRlciIKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdKSwKICAgICAgICAgIE0yLmRvbUV2ZW50SGFuZGxlcnMoewogICAgICAgICAgICBjbGljazogKGV2ZW50LCB2aWV3KSA9PiB7CiAgICAgICAgICAgICAgc2FmZVJ1bihhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICBsZXQgY2xpY2tFdmVudCA9IHsKICAgICAgICAgICAgICAgICAgcGFnZTogcGFnZU5hbWUsCiAgICAgICAgICAgICAgICAgIGN0cmxLZXk6IGV2ZW50LmN0cmxLZXksCiAgICAgICAgICAgICAgICAgIG1ldGFLZXk6IGV2ZW50Lm1ldGFLZXksCiAgICAgICAgICAgICAgICAgIGFsdEtleTogZXZlbnQuYWx0S2V5LAogICAgICAgICAgICAgICAgICBwb3M6IHZpZXcucG9zQXRDb29yZHMoZXZlbnQpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaEFwcEV2ZW50KCJwYWdlOmNsaWNrIiwgY2xpY2tFdmVudCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLAogICAgICAgICAgVjQuZnJvbUNsYXNzKAogICAgICAgICAgICBjbGFzcyB7CiAgICAgICAgICAgICAgdXBkYXRlKHVwZGF0ZSkgewogICAgICAgICAgICAgICAgaWYgKHVwZGF0ZS5kb2NDaGFuZ2VkKSB7CiAgICAgICAgICAgICAgICAgIGVkaXRvci52aWV3RGlzcGF0Y2goeyB0eXBlOiAicGFnZS1jaGFuZ2VkIiB9KTsKICAgICAgICAgICAgICAgICAgZWRpdG9yLmRlYm91bmNlZFVwZGF0ZUV2ZW50KCk7CiAgICAgICAgICAgICAgICAgIGVkaXRvci5zYXZlKCkuY2F0Y2goKGU1KSA9PiBjb25zb2xlLmVycm9yKCJFcnJvciBzYXZpbmciLCBlNSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgKSwKICAgICAgICAgIHBhc3RlTGlua0V4dGVuc2lvbiwKICAgICAgICAgIGF0dGFjaG1lbnRFeHRlbnNpb24odGhpcyksCiAgICAgICAgICBLdDMoKQogICAgICAgIF0KICAgICAgfSk7CiAgICB9CiAgICBhc3luYyByZWxvYWRQbHVncygpIHsKICAgICAgY29uc29sZS5sb2coIkxvYWRpbmcgcGx1Z3MiKTsKICAgICAgYXdhaXQgdGhpcy5zcGFjZS51cGRhdGVQYWdlTGlzdCgpOwogICAgICBhd2FpdCB0aGlzLnN5c3RlbS51bmxvYWRBbGwoKTsKICAgICAgY29uc29sZS5sb2coIihSZSlsb2FkaW5nIHBsdWdzIik7CiAgICAgIGZvciAobGV0IHBsdWdOYW1lIG9mIGF3YWl0IHRoaXMuc3BhY2UubGlzdFBsdWdzKCkpIHsKICAgICAgICBsZXQgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLnNwYWNlLnJlYWRBdHRhY2htZW50KHBsdWdOYW1lLCAic3RyaW5nIik7CiAgICAgICAgYXdhaXQgdGhpcy5zeXN0ZW0ubG9hZChKU09OLnBhcnNlKGRhdGEpLCBjcmVhdGVTYW5kYm94KTsKICAgICAgfQogICAgICB0aGlzLnJlYnVpbGRFZGl0b3JTdGF0ZSgpOwogICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoQXBwRXZlbnQoInBsdWdzOmxvYWRlZCIpOwogICAgfQogICAgcmVidWlsZEVkaXRvclN0YXRlKCkgewogICAgICBjb25zdCBlZGl0b3JWaWV3ID0gdGhpcy5lZGl0b3JWaWV3OwogICAgICBjb25zb2xlLmxvZygiUmVidWlsZGluZyBlZGl0b3Igc3RhdGUiKTsKICAgICAgaWYgKGVkaXRvclZpZXcgJiYgdGhpcy5jdXJyZW50UGFnZSkgewogICAgICAgIGNvbnNvbGUubG9nKCJHZXR0aW5nIGFsbCBzeW50YXggZXh0ZW5zaW9ucyIpOwogICAgICAgIHRoaXMubWRFeHRlbnNpb25zID0gbG9hZE1hcmtkb3duRXh0ZW5zaW9ucyh0aGlzLnN5c3RlbSk7CiAgICAgICAgdGhpcy5zeXN0ZW0ucmVnaXN0ZXJTeXNjYWxscygKICAgICAgICAgIFtdLAogICAgICAgICAgbWFya2Rvd25TeXNjYWxscyhidWlsZE1hcmtkb3duKHRoaXMubWRFeHRlbnNpb25zKSkKICAgICAgICApOwogICAgICAgIHRoaXMuc2F2ZVN0YXRlKHRoaXMuY3VycmVudFBhZ2UpOwogICAgICAgIGVkaXRvclZpZXcuc2V0U3RhdGUoCiAgICAgICAgICB0aGlzLmNyZWF0ZUVkaXRvclN0YXRlKHRoaXMuY3VycmVudFBhZ2UsIGVkaXRvclZpZXcuc3RhdGUuc2xpY2VEb2MoKSkKICAgICAgICApOwogICAgICAgIGlmIChlZGl0b3JWaWV3LmNvbnRlbnRET00pIHsKICAgICAgICAgIHRoaXMudHdlYWtFZGl0b3JET00oCiAgICAgICAgICAgIGVkaXRvclZpZXcuY29udGVudERPTSwKICAgICAgICAgICAgdGhpcy52aWV3U3RhdGUucGVybSA9PT0gInJvIgogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5yZXN0b3JlU3RhdGUodGhpcy5jdXJyZW50UGFnZSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGNvbXBsZXRlcigpIHsKICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmRpc3BhdGNoQXBwRXZlbnQoInBhZ2U6Y29tcGxldGUiKTsKICAgICAgbGV0IGFjdHVhbFJlc3VsdCA9IG51bGw7CiAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHsKICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICBpZiAoYWN0dWFsUmVzdWx0KSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoCiAgICAgICAgICAgICAgIkdvdCBjb21wbGV0aW9uIHJlc3VsdHMgZnJvbSBtdWx0aXBsZSBzb3VyY2VzLCBjYW5ub3QgZGVhbCB3aXRoIHRoYXQiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgYWN0dWFsUmVzdWx0ID0gcmVzdWx0OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gYWN0dWFsUmVzdWx0OwogICAgfQogICAgcmVsb2FkUGFnZSgpIHsKICAgICAgY29uc29sZS5sb2coIlJlbG9hZGluZyBwYWdlIik7CiAgICAgIHNhZmVSdW4oYXN5bmMgKCkgPT4gewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNhdmVUaW1lb3V0KTsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRQYWdlKHRoaXMuY3VycmVudFBhZ2UpOwogICAgICB9KTsKICAgIH0KICAgIGZvY3VzKCkgewogICAgICB0aGlzLmVkaXRvclZpZXcuZm9jdXMoKTsKICAgIH0KICAgIGFzeW5jIG5hdmlnYXRlKG5hbWUsIHBvcywgcmVwbGFjZVN0YXRlID0gZmFsc2UpIHsKICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgbmFtZSA9IHRoaXMuaW5kZXhQYWdlOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMucGFnZU5hdmlnYXRvci5uYXZpZ2F0ZShuYW1lLCBwb3MsIHJlcGxhY2VTdGF0ZSk7CiAgICB9CiAgICBhc3luYyBsb2FkUGFnZShwYWdlTmFtZSkgewogICAgICBjb25zdCBsb2FkaW5nRGlmZmVyZW50UGFnZSA9IHBhZ2VOYW1lICE9PSB0aGlzLmN1cnJlbnRQYWdlOwogICAgICBjb25zdCBlZGl0b3JWaWV3ID0gdGhpcy5lZGl0b3JWaWV3OwogICAgICBpZiAoIWVkaXRvclZpZXcpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgY29uc3QgcHJldmlvdXNQYWdlID0gdGhpcy5jdXJyZW50UGFnZTsKICAgICAgaWYgKHByZXZpb3VzUGFnZSkgewogICAgICAgIHRoaXMuc2F2ZVN0YXRlKHByZXZpb3VzUGFnZSk7CiAgICAgICAgdGhpcy5zcGFjZS51bndhdGNoUGFnZShwcmV2aW91c1BhZ2UpOwogICAgICAgIGF3YWl0IHRoaXMuc2F2ZSh0cnVlKTsKICAgICAgfQogICAgICB0aGlzLnZpZXdEaXNwYXRjaCh7CiAgICAgICAgdHlwZTogInBhZ2UtbG9hZGluZyIsCiAgICAgICAgbmFtZTogcGFnZU5hbWUKICAgICAgfSk7CiAgICAgIGxldCBkb2M7CiAgICAgIHRyeSB7CiAgICAgICAgZG9jID0gYXdhaXQgdGhpcy5zcGFjZS5yZWFkUGFnZShwYWdlTmFtZSk7CiAgICAgIH0gY2F0Y2ggKGU1KSB7CiAgICAgICAgY29uc29sZS5sb2coIkNyZWF0aW5nIG5ldyBwYWdlIiwgcGFnZU5hbWUpOwogICAgICAgIGRvYyA9IHsKICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgbWV0YTogeyBuYW1lOiBwYWdlTmFtZSwgbGFzdE1vZGlmaWVkOiAwLCBwZXJtOiAicnciIH0KICAgICAgICB9OwogICAgICB9CiAgICAgIGxldCBlZGl0b3JTdGF0ZSA9IHRoaXMuY3JlYXRlRWRpdG9yU3RhdGUocGFnZU5hbWUsIGRvYy50ZXh0KTsKICAgICAgZWRpdG9yVmlldy5zZXRTdGF0ZShlZGl0b3JTdGF0ZSk7CiAgICAgIGlmIChlZGl0b3JWaWV3LmNvbnRlbnRET00pIHsKICAgICAgICB0aGlzLnR3ZWFrRWRpdG9yRE9NKGVkaXRvclZpZXcuY29udGVudERPTSwgZG9jLm1ldGEucGVybSA9PT0gInJvIik7CiAgICAgIH0KICAgICAgbGV0IHN0YXRlUmVzdG9yZWQgPSB0aGlzLnJlc3RvcmVTdGF0ZShwYWdlTmFtZSk7CiAgICAgIHRoaXMuc3BhY2Uud2F0Y2hQYWdlKHBhZ2VOYW1lKTsKICAgICAgdGhpcy52aWV3RGlzcGF0Y2goewogICAgICAgIHR5cGU6ICJwYWdlLWxvYWRlZCIsCiAgICAgICAgbWV0YTogZG9jLm1ldGEKICAgICAgfSk7CiAgICAgIGlmIChsb2FkaW5nRGlmZmVyZW50UGFnZSkgewogICAgICAgIGF3YWl0IHRoaXMuZXZlbnRIb29rLmRpc3BhdGNoRXZlbnQoImVkaXRvcjpwYWdlTG9hZGVkIiwgcGFnZU5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIGF3YWl0IHRoaXMuZXZlbnRIb29rLmRpc3BhdGNoRXZlbnQoImVkaXRvcjpwYWdlUmVsb2FkZWQiLCBwYWdlTmFtZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXRlUmVzdG9yZWQ7CiAgICB9CiAgICB0d2Vha0VkaXRvckRPTShjb250ZW50RE9NLCByZWFkT25seSkgewogICAgICBjb250ZW50RE9NLnNwZWxsY2hlY2sgPSB0cnVlOwogICAgICBjb250ZW50RE9NLnNldEF0dHJpYnV0ZSgiYXV0b2NvcnJlY3QiLCAib24iKTsKICAgICAgY29udGVudERPTS5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwgIm9uIik7CiAgICAgIGNvbnRlbnRET00uc2V0QXR0cmlidXRlKAogICAgICAgICJjb250ZW50ZWRpdGFibGUiLAogICAgICAgIHJlYWRPbmx5IHx8IHRoaXMudmlld1N0YXRlLmZvcmNlZFJPTW9kZSA/ICJmYWxzZSIgOiAidHJ1ZSIKICAgICAgKTsKICAgICAgaWYgKGlzTW9iaWxlU2FmYXJpKCkgJiYgcmVhZE9ubHkpIHsKICAgICAgICBjb25zb2xlLmxvZygiU2FmYXJpIHJlYWQgb25seSBoYWNrIik7CiAgICAgICAgY29udGVudERPTS5jbGFzc0xpc3QuYWRkKCJpb3Mtc2FmYXJpLXJlYWRvbmx5Iik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29udGVudERPTS5jbGFzc0xpc3QucmVtb3ZlKCJpb3Mtc2FmYXJpLXJlYWRvbmx5Iik7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaXNNb2JpbGVTYWZhcmkoKSB7CiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goLyhpUG9kfGlQaG9uZXxpUGFkKS8pICYmIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0Lyk7CiAgICAgIH0KICAgIH0KICAgIHJlc3RvcmVTdGF0ZShwYWdlTmFtZSkgewogICAgICBsZXQgcGFnZVN0YXRlID0gdGhpcy5vcGVuUGFnZXMuZ2V0KHBhZ2VOYW1lKTsKICAgICAgY29uc3QgZWRpdG9yVmlldyA9IHRoaXMuZWRpdG9yVmlldzsKICAgICAgaWYgKHBhZ2VTdGF0ZSkgewogICAgICAgIGVkaXRvclZpZXcuc2Nyb2xsRE9NLnNjcm9sbFRvcCA9IHBhZ2VTdGF0ZS5zY3JvbGxUb3A7CiAgICAgICAgZWRpdG9yVmlldy5kaXNwYXRjaCh7CiAgICAgICAgICBzZWxlY3Rpb246IHBhZ2VTdGF0ZS5zZWxlY3Rpb24sCiAgICAgICAgICBzY3JvbGxJbnRvVmlldzogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGVkaXRvclZpZXcuc2Nyb2xsRE9NLnNjcm9sbFRvcCA9IDA7CiAgICAgICAgZWRpdG9yVmlldy5kaXNwYXRjaCh7CiAgICAgICAgICBzZWxlY3Rpb246IHsgYW5jaG9yOiAwIH0sCiAgICAgICAgICBzY3JvbGxJbnRvVmlldzogdHJ1ZQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGVkaXRvclZpZXcuZm9jdXMoKTsKICAgICAgcmV0dXJuICEhcGFnZVN0YXRlOwogICAgfQogICAgc2F2ZVN0YXRlKGN1cnJlbnRQYWdlKSB7CiAgICAgIHRoaXMub3BlblBhZ2VzLnNldCgKICAgICAgICBjdXJyZW50UGFnZSwKICAgICAgICBuZXcgUGFnZVN0YXRlKAogICAgICAgICAgdGhpcy5lZGl0b3JWaWV3LnNjcm9sbERPTS5zY3JvbGxUb3AsCiAgICAgICAgICB0aGlzLmVkaXRvclZpZXcuc3RhdGUuc2VsZWN0aW9uCiAgICAgICAgKQogICAgICApOwogICAgfQogICAgVmlld0NvbXBvbmVudCgpIHsKICAgICAgY29uc3QgW3ZpZXdTdGF0ZSwgZGlzcGF0Y2hdID0gRmUocmVkdWNlciwgaW5pdGlhbFZpZXdTdGF0ZSk7CiAgICAgIHRoaXMudmlld1N0YXRlID0gdmlld1N0YXRlOwogICAgICB0aGlzLnZpZXdEaXNwYXRjaCA9IGRpc3BhdGNoOwogICAgICBjb25zdCBlZGl0b3IgPSB0aGlzOwogICAgICB4ZTIoKCkgPT4gewogICAgICAgIGlmICh2aWV3U3RhdGUuY3VycmVudFBhZ2UpIHsKICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gdmlld1N0YXRlLmN1cnJlbnRQYWdlOwogICAgICAgIH0KICAgICAgfSwgW3ZpZXdTdGF0ZS5jdXJyZW50UGFnZV0pOwogICAgICB4ZTIoKCkgPT4gewogICAgICAgIGlmIChlZGl0b3IuZWRpdG9yVmlldykgewogICAgICAgICAgZWRpdG9yLnR3ZWFrRWRpdG9yRE9NKAogICAgICAgICAgICBlZGl0b3IuZWRpdG9yVmlldy5jb250ZW50RE9NLAogICAgICAgICAgICB2aWV3U3RhdGUucGVybSA9PT0gInJvIgogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgIH0sIFt2aWV3U3RhdGUuZm9yY2VkUk9Nb2RlXSk7CiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoTWUyLkZyYWdtZW50LCBudWxsLCB2aWV3U3RhdGUuc2hvd1BhZ2VOYXZpZ2F0b3IgJiYgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KFBhZ2VOYXZpZ2F0b3IsIHsKICAgICAgICBhbGxQYWdlczogdmlld1N0YXRlLmFsbFBhZ2VzLAogICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRQYWdlLAogICAgICAgIG9uTmF2aWdhdGU6IChwYWdlKSA9PiB7CiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICJzdG9wLW5hdmlnYXRlIiB9KTsKICAgICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICAgICAgaWYgKHBhZ2UpIHsKICAgICAgICAgICAgc2FmZVJ1bihhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgYXdhaXQgZWRpdG9yLm5hdmlnYXRlKHBhZ2UpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pLCB2aWV3U3RhdGUuc2hvd0NvbW1hbmRQYWxldHRlICYmIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudChDb21tYW5kUGFsZXR0ZSwgewogICAgICAgIG9uVHJpZ2dlcjogKGNtZCkgPT4gewogICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiAiaGlkZS1wYWxldHRlIiB9KTsKICAgICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICAgICAgaWYgKGNtZCkgewogICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICJjb21tYW5kLXJ1biIsIGNvbW1hbmQ6IGNtZC5jb21tYW5kLm5hbWUgfSk7CiAgICAgICAgICAgIGNtZC5ydW4oKS5jYXRjaCgoZTUpID0+IHsKICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBydW5uaW5nIGNvbW1hbmQiLCBlNS5tZXNzYWdlKTsKICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY29tbWFuZHM6IHZpZXdTdGF0ZS5jb21tYW5kcywKICAgICAgICByZWNlbnRDb21tYW5kczogdmlld1N0YXRlLnJlY2VudENvbW1hbmRzCiAgICAgIH0pLCB2aWV3U3RhdGUuc2hvd0ZpbHRlckJveCAmJiAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoRmlsdGVyTGlzdCwgewogICAgICAgIGxhYmVsOiB2aWV3U3RhdGUuZmlsdGVyQm94TGFiZWwsCiAgICAgICAgcGxhY2Vob2xkZXI6IHZpZXdTdGF0ZS5maWx0ZXJCb3hQbGFjZUhvbGRlciwKICAgICAgICBvcHRpb25zOiB2aWV3U3RhdGUuZmlsdGVyQm94T3B0aW9ucywKICAgICAgICBhbGxvd05ldzogZmFsc2UsCiAgICAgICAgaGVscFRleHQ6IHZpZXdTdGF0ZS5maWx0ZXJCb3hIZWxwVGV4dCwKICAgICAgICBvblNlbGVjdDogdmlld1N0YXRlLmZpbHRlckJveE9uU2VsZWN0CiAgICAgIH0pLCAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoVG9wQmFyLCB7CiAgICAgICAgcGFnZU5hbWU6IHZpZXdTdGF0ZS5jdXJyZW50UGFnZSwKICAgICAgICBub3RpZmljYXRpb25zOiB2aWV3U3RhdGUubm90aWZpY2F0aW9ucywKICAgICAgICB1bnNhdmVkQ2hhbmdlczogdmlld1N0YXRlLnVuc2F2ZWRDaGFuZ2VzLAogICAgICAgIGlzTG9hZGluZzogdmlld1N0YXRlLmlzTG9hZGluZywKICAgICAgICBvbkNsaWNrOiAoKSA9PiB7CiAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6ICJzdGFydC1uYXZpZ2F0ZSIgfSk7CiAgICAgICAgfSwKICAgICAgICBvblRoZW1lQ2xpY2s6ICgpID0+IHsKICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2UudGhlbWUgPT09ICJkYXJrIikKICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnRoZW1lID0gImxpZ2h0IjsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnRoZW1lID0gImRhcmsiOwogICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWUgPSBsb2NhbFN0b3JhZ2UudGhlbWU7CiAgICAgICAgfSwKICAgICAgICBvbkhvbWVDbGljazogKCkgPT4gewogICAgICAgICAgZWRpdG9yLm5hdmlnYXRlKCIiKTsKICAgICAgICB9LAogICAgICAgIG9uQWN0aW9uQ2xpY2s6ICgpID0+IHsKICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogInNob3ctcGFsZXR0ZSIgfSk7CiAgICAgICAgfSwKICAgICAgICByaHM6ICEhdmlld1N0YXRlLnBhbmVscy5yaHMubW9kZSAmJiAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoImRpdiIsIHsKICAgICAgICAgIGNsYXNzTmFtZTogInBhbmVsIiwKICAgICAgICAgIHN0eWxlOiB7IGZsZXg6IHZpZXdTdGF0ZS5wYW5lbHMucmhzLm1vZGUgfQogICAgICAgIH0pLAogICAgICAgIGxoczogISF2aWV3U3RhdGUucGFuZWxzLmxocy5tb2RlICYmIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudCgiZGl2IiwgewogICAgICAgICAgY2xhc3NOYW1lOiAicGFuZWwiLAogICAgICAgICAgc3R5bGU6IHsgZmxleDogdmlld1N0YXRlLnBhbmVscy5saHMubW9kZSB9CiAgICAgICAgfSkKICAgICAgfSksIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudCgiZGl2IiwgewogICAgICAgIGlkOiAic2ItbWFpbiIKICAgICAgfSwgISF2aWV3U3RhdGUucGFuZWxzLmxocy5tb2RlICYmIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudChQYW5lbCwgewogICAgICAgIGNvbmZpZzogdmlld1N0YXRlLnBhbmVscy5saHMsCiAgICAgICAgZWRpdG9yCiAgICAgIH0pLCAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoImRpdiIsIHsKICAgICAgICBpZDogInNiLWVkaXRvciIKICAgICAgfSksICEhdmlld1N0YXRlLnBhbmVscy5yaHMubW9kZSAmJiAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoUGFuZWwsIHsKICAgICAgICBjb25maWc6IHZpZXdTdGF0ZS5wYW5lbHMucmhzLAogICAgICAgIGVkaXRvcgogICAgICB9KSksICEhdmlld1N0YXRlLnBhbmVscy5tb2RhbC5tb2RlICYmIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudCgiZGl2IiwgewogICAgICAgIGNsYXNzTmFtZTogInNiLW1vZGFsIiwKICAgICAgICBzdHlsZTogeyBpbnNldDogYCR7dmlld1N0YXRlLnBhbmVscy5tb2RhbC5tb2RlfXB4YCB9CiAgICAgIH0sIC8qIEBfX1BVUkVfXyAqLyBNZTIuY3JlYXRlRWxlbWVudChQYW5lbCwgewogICAgICAgIGNvbmZpZzogdmlld1N0YXRlLnBhbmVscy5tb2RhbCwKICAgICAgICBlZGl0b3IKICAgICAgfSkpLCAhIXZpZXdTdGF0ZS5wYW5lbHMuYmhzLm1vZGUgJiYgLyogQF9fUFVSRV9fICovIE1lMi5jcmVhdGVFbGVtZW50KCJkaXYiLCB7CiAgICAgICAgY2xhc3NOYW1lOiAic2ItYmhzIgogICAgICB9LCAvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoUGFuZWwsIHsKICAgICAgICBjb25maWc6IHZpZXdTdGF0ZS5wYW5lbHMuYmhzLAogICAgICAgIGVkaXRvcgogICAgICB9KSkpOwogICAgfQogICAgYXN5bmMgcnVuQ29tbWFuZEJ5TmFtZShuYW1lKSB7CiAgICAgIGNvbnN0IGNtZCA9IHRoaXMudmlld1N0YXRlLmNvbW1hbmRzLmdldChuYW1lKTsKICAgICAgaWYgKGNtZCkgewogICAgICAgIGF3YWl0IGNtZC5ydW4oKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgJHtuYW1lfSBub3QgZm91bmRgKTsKICAgICAgfQogICAgfQogICAgcmVuZGVyKGNvbnRhaW5lcikgewogICAgICBjb25zdCBWaWV3Q29tcG9uZW50ID0gdGhpcy5WaWV3Q29tcG9uZW50LmJpbmQodGhpcyk7CiAgICAgIEFmLnJlbmRlcigvKiBAX19QVVJFX18gKi8gTWUyLmNyZWF0ZUVsZW1lbnQoVmlld0NvbXBvbmVudCwgbnVsbCksIGNvbnRhaW5lcik7CiAgICB9CiAgICBnZXRDb250ZXh0KCkgewogICAgICBsZXQgc3RhdGUgPSB0aGlzLmVkaXRvclZpZXcuc3RhdGU7CiAgICAgIGxldCBzZWxlY3Rpb24gPSBzdGF0ZS5zZWxlY3Rpb24ubWFpbjsKICAgICAgaWYgKHNlbGVjdGlvbi5lbXB0eSkgewogICAgICAgIHJldHVybiBtMTQoc3RhdGUpLnJlc29sdmVJbm5lcihzZWxlY3Rpb24uZnJvbSkubmFtZTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgfTsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL2NvbW1vbi9zcGFjZXMvY29uc3RhbnRzLnRzCiAgdmFyIHBsdWdQcmVmaXggPSAiX3BsdWcvIjsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL2NvbW1vbi9zcGFjZXMvc3BhY2UudHMKICB2YXIgcGFnZVdhdGNoSW50ZXJ2YWwgPSAyZTM7CiAgdmFyIFNwYWNlID0gY2xhc3MgZXh0ZW5kcyBFdmVudEVtaXR0ZXIyIHsKICAgIGNvbnN0cnVjdG9yKHNwYWNlKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIHRoaXMuc3BhY2UgPSBzcGFjZTsKICAgICAgdGhpcy5wYWdlTWV0YUNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgdGhpcy53YXRjaGVkUGFnZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICB0aGlzLmluaXRpYWxQYWdlTGlzdExvYWQgPSB0cnVlOwogICAgICB0aGlzLnNhdmluZyA9IGZhbHNlOwogICAgfQogICAgYXN5bmMgdXBkYXRlUGFnZUxpc3QoKSB7CiAgICAgIGxldCBuZXdQYWdlTGlzdCA9IGF3YWl0IHRoaXMuZmV0Y2hQYWdlTGlzdCgpOwogICAgICBsZXQgZGVsZXRlZFBhZ2VzID0gbmV3IFNldCh0aGlzLnBhZ2VNZXRhQ2FjaGUua2V5cygpKTsKICAgICAgbmV3UGFnZUxpc3QuZm9yRWFjaCgobWV0YTIpID0+IHsKICAgICAgICBjb25zdCBwYWdlTmFtZSA9IG1ldGEyLm5hbWU7CiAgICAgICAgY29uc3Qgb2xkUGFnZU1ldGEgPSB0aGlzLnBhZ2VNZXRhQ2FjaGUuZ2V0KHBhZ2VOYW1lKTsKICAgICAgICBjb25zdCBuZXdQYWdlTWV0YSA9IHsKICAgICAgICAgIG5hbWU6IHBhZ2VOYW1lLAogICAgICAgICAgbGFzdE1vZGlmaWVkOiBtZXRhMi5sYXN0TW9kaWZpZWQsCiAgICAgICAgICBwZXJtOiBtZXRhMi5wZXJtCiAgICAgICAgfTsKICAgICAgICBpZiAoIW9sZFBhZ2VNZXRhICYmIChwYWdlTmFtZS5zdGFydHNXaXRoKHBsdWdQcmVmaXgpIHx8ICF0aGlzLmluaXRpYWxQYWdlTGlzdExvYWQpKSB7CiAgICAgICAgICB0aGlzLmVtaXQoInBhZ2VDcmVhdGVkIiwgbmV3UGFnZU1ldGEpOwogICAgICAgIH0gZWxzZSBpZiAob2xkUGFnZU1ldGEgJiYgb2xkUGFnZU1ldGEubGFzdE1vZGlmaWVkICE9PSBuZXdQYWdlTWV0YS5sYXN0TW9kaWZpZWQpIHsKICAgICAgICAgIHRoaXMuZW1pdCgicGFnZUNoYW5nZWQiLCBuZXdQYWdlTWV0YSk7CiAgICAgICAgfQogICAgICAgIGRlbGV0ZWRQYWdlcy5kZWxldGUocGFnZU5hbWUpOwogICAgICAgIHRoaXMucGFnZU1ldGFDYWNoZS5zZXQocGFnZU5hbWUsIG5ld1BhZ2VNZXRhKTsKICAgICAgfSk7CiAgICAgIGZvciAoY29uc3QgZGVsZXRlZFBhZ2Ugb2YgZGVsZXRlZFBhZ2VzKSB7CiAgICAgICAgdGhpcy5wYWdlTWV0YUNhY2hlLmRlbGV0ZShkZWxldGVkUGFnZSk7CiAgICAgICAgdGhpcy5lbWl0KCJwYWdlRGVsZXRlZCIsIGRlbGV0ZWRQYWdlKTsKICAgICAgfQogICAgICB0aGlzLmVtaXQoInBhZ2VMaXN0VXBkYXRlZCIsIHRoaXMubGlzdFBhZ2VzKCkpOwogICAgICB0aGlzLmluaXRpYWxQYWdlTGlzdExvYWQgPSBmYWxzZTsKICAgIH0KICAgIHdhdGNoKCkgewogICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgc2FmZVJ1bihhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5zYXZpbmcpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZm9yIChjb25zdCBwYWdlTmFtZSBvZiB0aGlzLndhdGNoZWRQYWdlcykgewogICAgICAgICAgICBjb25zdCBvbGRNZXRhID0gdGhpcy5wYWdlTWV0YUNhY2hlLmdldChwYWdlTmFtZSk7CiAgICAgICAgICAgIGlmICghb2xkTWV0YSkgewogICAgICAgICAgICAgIHRoaXMud2F0Y2hlZFBhZ2VzLmRlbGV0ZShwYWdlTmFtZSk7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRQYWdlTWV0YShwYWdlTmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sIHBhZ2VXYXRjaEludGVydmFsKTsKICAgICAgdGhpcy51cGRhdGVQYWdlTGlzdCgpLmNhdGNoKGNvbnNvbGUuZXJyb3IpOwogICAgfQogICAgYXN5bmMgZGVsZXRlUGFnZShuYW1lLCBkZWxldGVEYXRlKSB7CiAgICAgIGF3YWl0IHRoaXMuZ2V0UGFnZU1ldGEobmFtZSk7CiAgICAgIGF3YWl0IHRoaXMuc3BhY2UuZGVsZXRlRmlsZShgJHtuYW1lfS5tZGApOwogICAgICB0aGlzLnBhZ2VNZXRhQ2FjaGUuZGVsZXRlKG5hbWUpOwogICAgICB0aGlzLmVtaXQoInBhZ2VEZWxldGVkIiwgbmFtZSk7CiAgICAgIHRoaXMuZW1pdCgicGFnZUxpc3RVcGRhdGVkIiwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoWy4uLnRoaXMucGFnZU1ldGFDYWNoZS52YWx1ZXMoKV0pKTsKICAgIH0KICAgIGFzeW5jIGdldFBhZ2VNZXRhKG5hbWUpIHsKICAgICAgbGV0IG9sZE1ldGEgPSB0aGlzLnBhZ2VNZXRhQ2FjaGUuZ2V0KG5hbWUpOwogICAgICBsZXQgbmV3TWV0YSA9IGZpbGVNZXRhVG9QYWdlTWV0YSgKICAgICAgICBhd2FpdCB0aGlzLnNwYWNlLmdldEZpbGVNZXRhKGAke25hbWV9Lm1kYCkKICAgICAgKTsKICAgICAgaWYgKG9sZE1ldGEpIHsKICAgICAgICBpZiAob2xkTWV0YS5sYXN0TW9kaWZpZWQgIT09IG5ld01ldGEubGFzdE1vZGlmaWVkKSB7CiAgICAgICAgICB0aGlzLmVtaXQoInBhZ2VDaGFuZ2VkIiwgbmV3TWV0YSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0aGlzLm1ldGFDYWNoZXIobmFtZSwgbmV3TWV0YSk7CiAgICB9CiAgICBpbnZva2VGdW5jdGlvbihwbHVnLCBlbnYyLCBuYW1lLCBhcmdzKSB7CiAgICAgIHJldHVybiB0aGlzLnNwYWNlLmludm9rZUZ1bmN0aW9uKHBsdWcsIGVudjIsIG5hbWUsIGFyZ3MpOwogICAgfQogICAgbGlzdFBhZ2VzKCkgewogICAgICByZXR1cm4gbmV3IFNldCh0aGlzLnBhZ2VNZXRhQ2FjaGUudmFsdWVzKCkpOwogICAgfQogICAgYXN5bmMgbGlzdFBsdWdzKCkgewogICAgICBsZXQgYWxsRmlsZXMgPSBhd2FpdCB0aGlzLnNwYWNlLmZldGNoRmlsZUxpc3QoKTsKICAgICAgcmV0dXJuIGFsbEZpbGVzLmZpbHRlcigoZmlsZU1ldGEpID0+IGZpbGVNZXRhLm5hbWUuZW5kc1dpdGgoIi5wbHVnLmpzb24iKSkubWFwKChmaWxlTWV0YSkgPT4gZmlsZU1ldGEubmFtZSk7CiAgICB9CiAgICBwcm94eVN5c2NhbGwocGx1ZywgbmFtZSwgYXJncykgewogICAgICByZXR1cm4gdGhpcy5zcGFjZS5wcm94eVN5c2NhbGwocGx1ZywgbmFtZSwgYXJncyk7CiAgICB9CiAgICBhc3luYyByZWFkUGFnZShuYW1lKSB7CiAgICAgIGxldCBwYWdlRGF0YSA9IGF3YWl0IHRoaXMuc3BhY2UucmVhZEZpbGUoYCR7bmFtZX0ubWRgLCAic3RyaW5nIik7CiAgICAgIGxldCBwcmV2aW91c01ldGEgPSB0aGlzLnBhZ2VNZXRhQ2FjaGUuZ2V0KG5hbWUpOwogICAgICBsZXQgbmV3TWV0YSA9IGZpbGVNZXRhVG9QYWdlTWV0YShwYWdlRGF0YS5tZXRhKTsKICAgICAgaWYgKHByZXZpb3VzTWV0YSkgewogICAgICAgIGlmIChwcmV2aW91c01ldGEubGFzdE1vZGlmaWVkICE9PSBuZXdNZXRhLmxhc3RNb2RpZmllZCkgewogICAgICAgICAgdGhpcy5lbWl0KCJwYWdlQ2hhbmdlZCIsIG5ld01ldGEpOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgbWV0YTIgPSB0aGlzLm1ldGFDYWNoZXIobmFtZSwgbmV3TWV0YSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgdGV4dDogcGFnZURhdGEuZGF0YSwKICAgICAgICBtZXRhOiBtZXRhMgogICAgICB9OwogICAgfQogICAgd2F0Y2hQYWdlKHBhZ2VOYW1lKSB7CiAgICAgIHRoaXMud2F0Y2hlZFBhZ2VzLmFkZChwYWdlTmFtZSk7CiAgICB9CiAgICB1bndhdGNoUGFnZShwYWdlTmFtZSkgewogICAgICB0aGlzLndhdGNoZWRQYWdlcy5kZWxldGUocGFnZU5hbWUpOwogICAgfQogICAgYXN5bmMgd3JpdGVQYWdlKG5hbWUsIHRleHQsIHNlbGZVcGRhdGUpIHsKICAgICAgdHJ5IHsKICAgICAgICB0aGlzLnNhdmluZyA9IHRydWU7CiAgICAgICAgbGV0IHBhZ2VNZXRhID0gZmlsZU1ldGFUb1BhZ2VNZXRhKAogICAgICAgICAgYXdhaXQgdGhpcy5zcGFjZS53cml0ZUZpbGUoYCR7bmFtZX0ubWRgLCAic3RyaW5nIiwgdGV4dCwgc2VsZlVwZGF0ZSkKICAgICAgICApOwogICAgICAgIGlmICghc2VsZlVwZGF0ZSkgewogICAgICAgICAgdGhpcy5lbWl0KCJwYWdlQ2hhbmdlZCIsIHBhZ2VNZXRhKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubWV0YUNhY2hlcihuYW1lLCBwYWdlTWV0YSk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZmV0Y2hQYWdlTGlzdCgpIHsKICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLnNwYWNlLmZldGNoRmlsZUxpc3QoKSkuZmlsdGVyKChmaWxlTWV0YSkgPT4gZmlsZU1ldGEubmFtZS5lbmRzV2l0aCgiLm1kIikpLm1hcChmaWxlTWV0YVRvUGFnZU1ldGEpOwogICAgfQogICAgYXN5bmMgZmV0Y2hBdHRhY2htZW50TGlzdCgpIHsKICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLnNwYWNlLmZldGNoRmlsZUxpc3QoKSkuZmlsdGVyKAogICAgICAgIChmaWxlTWV0YSkgPT4gIWZpbGVNZXRhLm5hbWUuZW5kc1dpdGgoIi5tZCIpICYmICFmaWxlTWV0YS5uYW1lLmVuZHNXaXRoKCIucGx1Zy5qc29uIikKICAgICAgKTsKICAgIH0KICAgIHJlYWRBdHRhY2htZW50KG5hbWUsIGVuY29kaW5nKSB7CiAgICAgIHJldHVybiB0aGlzLnNwYWNlLnJlYWRGaWxlKG5hbWUsIGVuY29kaW5nKTsKICAgIH0KICAgIGdldEF0dGFjaG1lbnRNZXRhKG5hbWUpIHsKICAgICAgcmV0dXJuIHRoaXMuc3BhY2UuZ2V0RmlsZU1ldGEobmFtZSk7CiAgICB9CiAgICB3cml0ZUF0dGFjaG1lbnQobmFtZSwgZW5jb2RpbmcsIGRhdGEsIHNlbGZVcGRhdGUpIHsKICAgICAgcmV0dXJuIHRoaXMuc3BhY2Uud3JpdGVGaWxlKG5hbWUsIGVuY29kaW5nLCBkYXRhLCBzZWxmVXBkYXRlKTsKICAgIH0KICAgIGRlbGV0ZUF0dGFjaG1lbnQobmFtZSkgewogICAgICByZXR1cm4gdGhpcy5zcGFjZS5kZWxldGVGaWxlKG5hbWUpOwogICAgfQogICAgbWV0YUNhY2hlcihuYW1lLCBtZXRhMikgewogICAgICB0aGlzLnBhZ2VNZXRhQ2FjaGUuc2V0KG5hbWUsIG1ldGEyKTsKICAgICAgcmV0dXJuIG1ldGEyOwogICAgfQogIH07CiAgZnVuY3Rpb24gZmlsZU1ldGFUb1BhZ2VNZXRhKGZpbGVNZXRhKSB7CiAgICByZXR1cm4gewogICAgICAuLi5maWxlTWV0YSwKICAgICAgbmFtZTogZmlsZU1ldGEubmFtZS5zdWJzdHJpbmcoMCwgZmlsZU1ldGEubmFtZS5sZW5ndGggLSAzKQogICAgfTsKICB9CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy9jb21tb24vc3BhY2VzL2h0dHBfc3BhY2VfcHJpbWl0aXZlcy50cwogIHZhciBIdHRwU3BhY2VQcmltaXRpdmVzID0gY2xhc3MgewogICAgY29uc3RydWN0b3IodXJsLCB0b2tlbikgewogICAgICB0aGlzLmZzVXJsID0gdXJsICsgIi9mcyI7CiAgICAgIHRoaXMucGx1Z1VybCA9IHVybCArICIvcGx1ZyI7CiAgICAgIHRoaXMudG9rZW4gPSB0b2tlbjsKICAgIH0KICAgIGFzeW5jIGF1dGhlbnRpY2F0ZWRGZXRjaCh1cmwsIG9wdGlvbnMpIHsKICAgICAgaWYgKHRoaXMudG9rZW4pIHsKICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307CiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWyJBdXRob3JpemF0aW9uIl0gPSBgQmVhcmVyICR7dGhpcy50b2tlbn1gOwogICAgICB9CiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBmZXRjaCh1cmwsIG9wdGlvbnMpOwogICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gNDAxKSB7CiAgICAgICAgdGhyb3cgRXJyb3IoIlVuYXV0aG9yaXplZCIpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBhc3luYyBmZXRjaEZpbGVMaXN0KCkgewogICAgICBsZXQgcmVxID0gYXdhaXQgdGhpcy5hdXRoZW50aWNhdGVkRmV0Y2godGhpcy5mc1VybCwgewogICAgICAgIG1ldGhvZDogIkdFVCIKICAgICAgfSk7CiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCByZXEuanNvbigpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgYXN5bmMgcmVhZEZpbGUobmFtZSwgZW5jb2RpbmcpIHsKICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuYXV0aGVudGljYXRlZEZldGNoKGAke3RoaXMuZnNVcmx9LyR7bmFtZX1gLCB7CiAgICAgICAgbWV0aG9kOiAiR0VUIgogICAgICB9KTsKICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDQwNCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcihgUGFnZSBub3QgZm91bmRgKTsKICAgICAgfQogICAgICBsZXQgZGF0YSA9IG51bGw7CiAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKICAgICAgICBjYXNlICJhcnJheWJ1ZmZlciI6CiAgICAgICAgICB7CiAgICAgICAgICAgIGxldCBhYkJsb2IgPSBhd2FpdCByZXMuYmxvYigpOwogICAgICAgICAgICBkYXRhID0gYXdhaXQgYWJCbG9iLmFycmF5QnVmZmVyKCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJkYXRhdXJsIjoKICAgICAgICAgIHsKICAgICAgICAgICAgbGV0IGRVQmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7CiAgICAgICAgICAgIGRhdGEgPSBhcnJheUJ1ZmZlclRvRGF0YVVybChhd2FpdCBkVUJsb2IuYXJyYXlCdWZmZXIoKSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgZGF0YSA9IGF3YWl0IHJlcy50ZXh0KCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIGRhdGEsCiAgICAgICAgbWV0YTogdGhpcy5yZXNwb25zZVRvTWV0YShuYW1lLCByZXMpCiAgICAgIH07CiAgICB9CiAgICBhc3luYyB3cml0ZUZpbGUobmFtZSwgZW5jb2RpbmcsIGRhdGEsIHNlbGZVcGRhdGUpIHsKICAgICAgbGV0IGJvZHkgPSBudWxsOwogICAgICBzd2l0Y2ggKGVuY29kaW5nKSB7CiAgICAgICAgY2FzZSAiYXJyYXlidWZmZXIiOgogICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICBib2R5ID0gZGF0YTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImRhdGF1cmwiOgogICAgICAgICAgZGF0YSA9IGRhdGFVcmxUb0FycmF5QnVmZmVyKGRhdGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuYXV0aGVudGljYXRlZEZldGNoKGAke3RoaXMuZnNVcmx9LyR7bmFtZX1gLCB7CiAgICAgICAgbWV0aG9kOiAiUFVUIiwKICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAiQ29udGVudC10eXBlIjogImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIKICAgICAgICB9LAogICAgICAgIGJvZHkKICAgICAgfSk7CiAgICAgIGNvbnN0IG5ld01ldGEgPSB0aGlzLnJlc3BvbnNlVG9NZXRhKG5hbWUsIHJlcyk7CiAgICAgIHJldHVybiBuZXdNZXRhOwogICAgfQogICAgYXN5bmMgZGVsZXRlRmlsZShuYW1lKSB7CiAgICAgIGxldCByZXEgPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZWRGZXRjaChgJHt0aGlzLmZzVXJsfS8ke25hbWV9YCwgewogICAgICAgIG1ldGhvZDogIkRFTEVURSIKICAgICAgfSk7CiAgICAgIGlmIChyZXEuc3RhdHVzICE9PSAyMDApIHsKICAgICAgICB0aHJvdyBFcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBmaWxlOiAke3JlcS5zdGF0dXNUZXh0fWApOwogICAgICB9CiAgICB9CiAgICBhc3luYyBnZXRGaWxlTWV0YShuYW1lKSB7CiAgICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZWRGZXRjaChgJHt0aGlzLmZzVXJsfS8ke25hbWV9YCwgewogICAgICAgIG1ldGhvZDogIk9QVElPTlMiCiAgICAgIH0pOwogICAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDA0KSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZGApOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlVG9NZXRhKG5hbWUsIHJlcyk7CiAgICB9CiAgICByZXNwb25zZVRvTWV0YShuYW1lLCByZXMpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBuYW1lLAogICAgICAgIHNpemU6ICtyZXMuaGVhZGVycy5nZXQoIkNvbnRlbnQtbGVuZ3RoIiksCiAgICAgICAgY29udGVudFR5cGU6IHJlcy5oZWFkZXJzLmdldCgiQ29udGVudC10eXBlIiksCiAgICAgICAgbGFzdE1vZGlmaWVkOiArKHJlcy5oZWFkZXJzLmdldCgiTGFzdC1Nb2RpZmllZCIpIHx8ICIwIiksCiAgICAgICAgcGVybTogcmVzLmhlYWRlcnMuZ2V0KCJYLVBlcm1pc3Npb24iKSB8fCAicnciCiAgICAgIH07CiAgICB9CiAgICBhc3luYyBwcm94eVN5c2NhbGwocGx1ZywgbmFtZSwgYXJncykgewogICAgICBsZXQgcmVxID0gYXdhaXQgdGhpcy5hdXRoZW50aWNhdGVkRmV0Y2goCiAgICAgICAgYCR7dGhpcy5wbHVnVXJsfS8ke3BsdWcubmFtZX0vc3lzY2FsbC8ke25hbWV9YCwKICAgICAgICB7CiAgICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgIkNvbnRlbnQtdHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgfSwKICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGFyZ3MpCiAgICAgICAgfQogICAgICApOwogICAgICBpZiAocmVxLnN0YXR1cyAhPT0gMjAwKSB7CiAgICAgICAgbGV0IGVycm9yID0gYXdhaXQgcmVxLnRleHQoKTsKICAgICAgICB0aHJvdyBFcnJvcihlcnJvcik7CiAgICAgIH0KICAgICAgaWYgKHJlcS5oZWFkZXJzLmdldCgiQ29udGVudC1sZW5ndGgiKSA9PT0gIjAiKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHJldHVybiBhd2FpdCByZXEuanNvbigpOwogICAgfQogICAgYXN5bmMgaW52b2tlRnVuY3Rpb24ocGx1ZywgZW52MiwgbmFtZSwgYXJncykgewogICAgICBpZiAoIWVudjIgfHwgZW52MiA9PT0gImNsaWVudCIpIHsKICAgICAgICByZXR1cm4gcGx1Zy5pbnZva2UobmFtZSwgYXJncyk7CiAgICAgIH0KICAgICAgbGV0IHJlcSA9IGF3YWl0IHRoaXMuYXV0aGVudGljYXRlZEZldGNoKAogICAgICAgIGAke3RoaXMucGx1Z1VybH0vJHtwbHVnLm5hbWV9L2Z1bmN0aW9uLyR7bmFtZX1gLAogICAgICAgIHsKICAgICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAiQ29udGVudC10eXBlIjogImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgICB9LAogICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYXJncykKICAgICAgICB9CiAgICAgICk7CiAgICAgIGlmIChyZXEuc3RhdHVzICE9PSAyMDApIHsKICAgICAgICBsZXQgZXJyb3IgPSBhd2FpdCByZXEudGV4dCgpOwogICAgICAgIHRocm93IEVycm9yKGVycm9yKTsKICAgICAgfQogICAgICBpZiAocmVxLmhlYWRlcnMuZ2V0KCJDb250ZW50LWxlbmd0aCIpID09PSAiMCIpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHJlcS5oZWFkZXJzLmdldCgiQ29udGVudC10eXBlIik/LmluY2x1ZGVzKCJhcHBsaWNhdGlvbi9qc29uIikpIHsKICAgICAgICByZXR1cm4gYXdhaXQgcmVxLmpzb24oKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gYXdhaXQgcmVxLnRleHQoKTsKICAgICAgfQogICAgfQogIH07CiAgZnVuY3Rpb24gZGF0YVVybFRvQXJyYXlCdWZmZXIoZGF0YVVybCkgewogICAgdmFyIGJpbmFyeV9zdHJpbmcgPSB3aW5kb3cuYXRvYihkYXRhVXJsLnNwbGl0KCIsIilbMV0pOwogICAgdmFyIGxlbiA9IGJpbmFyeV9zdHJpbmcubGVuZ3RoOwogICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuKTsKICAgIGZvciAodmFyIGk0ID0gMDsgaTQgPCBsZW47IGk0KyspIHsKICAgICAgYnl0ZXNbaTRdID0gYmluYXJ5X3N0cmluZy5jaGFyQ29kZUF0KGk0KTsKICAgIH0KICAgIHJldHVybiBieXRlcy5idWZmZXI7CiAgfQogIGZ1bmN0aW9uIGFycmF5QnVmZmVyVG9EYXRhVXJsKGJ1ZmZlcikgewogICAgdmFyIGJpbmFyeTIgPSAiIjsKICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7CiAgICB2YXIgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDsKICAgIGZvciAodmFyIGk0ID0gMDsgaTQgPCBsZW47IGk0KyspIHsKICAgICAgYmluYXJ5MiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2k0XSk7CiAgICB9CiAgICByZXR1cm4gYGRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtLCR7d2luZG93LmJ0b2EoYmluYXJ5Mil9YDsKICB9CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvYm9vdC50cwogIHNhZmVSdW4oYXN5bmMgKCkgPT4gewogICAgbGV0IHBhc3N3b3JkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInBhc3N3b3JkIikgfHwgdm9pZCAwOwogICAgbGV0IGh0dHBQcmltaXRpdmVzID0gbmV3IEh0dHBTcGFjZVByaW1pdGl2ZXMoIiIsIHBhc3N3b3JkKTsKICAgIGxldCBzZXR0aW5nc1BhZ2VUZXh0ID0gIiI7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICB0cnkgewogICAgICAgIHNldHRpbmdzUGFnZVRleHQgPSAoYXdhaXQgaHR0cFByaW1pdGl2ZXMucmVhZEZpbGUoIlNFVFRJTkdTLm1kIiwgInN0cmluZyIpKS5kYXRhOwogICAgICAgIGJyZWFrOwogICAgICB9IGNhdGNoIChlNSkgewogICAgICAgIGlmIChlNS5tZXNzYWdlID09PSAiVW5hdXRob3JpemVkIikgewogICAgICAgICAgcGFzc3dvcmQgPSBwcm9tcHQoIlBhc3N3b3JkOiAiKSB8fCB2b2lkIDA7CiAgICAgICAgICBpZiAoIXBhc3N3b3JkKSB7CiAgICAgICAgICAgIGFsZXJ0KCJTb3JyeSwgbmVlZCBhIHBhc3N3b3JkIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJwYXNzd29yZCIsIHBhc3N3b3JkKTsKICAgICAgICAgIGh0dHBQcmltaXRpdmVzID0gbmV3IEh0dHBTcGFjZVByaW1pdGl2ZXMoIiIsIHBhc3N3b3JkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGxldCBzZXJ2ZXJTcGFjZSA9IG5ldyBTcGFjZShodHRwUHJpbWl0aXZlcyk7CiAgICBzZXJ2ZXJTcGFjZS53YXRjaCgpOwogICAgY29uc29sZS5sb2coIkJvb3RpbmcuLi4iKTsKICAgIGxldCBzZXR0aW5ncyA9IHBhcnNlWWFtbFNldHRpbmdzKHNldHRpbmdzUGFnZVRleHQpOwogICAgbGV0IGVkaXRvciA9IG5ldyBFZGl0b3IoCiAgICAgIHNlcnZlclNwYWNlLAogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2Itcm9vdCIpLAogICAgICAiIiwKICAgICAgc2V0dGluZ3MuaW5kZXhQYWdlIHx8ICJpbmRleCIKICAgICk7CiAgICBhd2FpdCBlZGl0b3IuaW5pdCgpOwogICAgd2luZG93LmVkaXRvciA9IGVkaXRvcjsKICB9KTsKfSkoKTsKLyoqCiAqIEBsaWNlbnNlIFJlYWN0CiAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8KLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjIKICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8KLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjIKICogcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8KLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjIKICogcmVhY3QucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqLwovLyMgc291cmNlTWFwcGluZ1VSTD1jbGllbnQuanMubWFwCg==", "dist/LICENSE.md": "IyBpQSBXcml0ZXIgVHlwZWZhY2UKCkNvcHlyaWdodCDCqSAyMDE4IEluZm9ybWF0aW9uIEFyY2hpdGVjdHMgSW5jLiB3aXRoIFJlc2VydmVkIEZvbnQgTmFtZSAiaUEgV3JpdGVyIgoKIyBCYXNlZCBvbiBJQk0gUGxleCBUeXBlZmFjZQoKQ29weXJpZ2h0IMKpIDIwMTcgSUJNIENvcnAuIHdpdGggUmVzZXJ2ZWQgRm9udCBOYW1lICJQbGV4IgoKIyBMaWNlbnNlCgpUaGlzIEZvbnQgU29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNJTCBPcGVuIEZvbnQgTGljZW5zZSwgVmVyc2lvbiAxLjEuClRoaXMgbGljZW5zZSBpcyBjb3BpZWQgYmVsb3csIGFuZCBpcyBhbHNvIGF2YWlsYWJsZSB3aXRoIGEgRkFRIGF0OgpodHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU0lMIE9QRU4gRk9OVCBMSUNFTlNFIFZlcnNpb24gMS4xIC0gMjYgRmVicnVhcnkgMjAwNwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUFJFQU1CTEUKVGhlIGdvYWxzIG9mIHRoZSBPcGVuIEZvbnQgTGljZW5zZSAoT0ZMKSBhcmUgdG8gc3RpbXVsYXRlIHdvcmxkd2lkZQpkZXZlbG9wbWVudCBvZiBjb2xsYWJvcmF0aXZlIGZvbnQgcHJvamVjdHMsIHRvIHN1cHBvcnQgdGhlIGZvbnQgY3JlYXRpb24KZWZmb3J0cyBvZiBhY2FkZW1pYyBhbmQgbGluZ3Vpc3RpYyBjb21tdW5pdGllcywgYW5kIHRvIHByb3ZpZGUgYSBmcmVlIGFuZApvcGVuIGZyYW1ld29yayBpbiB3aGljaCBmb250cyBtYXkgYmUgc2hhcmVkIGFuZCBpbXByb3ZlZCBpbiBwYXJ0bmVyc2hpcAp3aXRoIG90aGVycy4KClRoZSBPRkwgYWxsb3dzIHRoZSBsaWNlbnNlZCBmb250cyB0byBiZSB1c2VkLCBzdHVkaWVkLCBtb2RpZmllZCBhbmQKcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUKZm9udHMsIGluY2x1ZGluZyBhbnkgZGVyaXZhdGl2ZSB3b3JrcywgY2FuIGJlIGJ1bmRsZWQsIGVtYmVkZGVkLCAKcmVkaXN0cmlidXRlZCBhbmQvb3Igc29sZCB3aXRoIGFueSBzb2Z0d2FyZSBwcm92aWRlZCB0aGF0IGFueSByZXNlcnZlZApuYW1lcyBhcmUgbm90IHVzZWQgYnkgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlIGZvbnRzIGFuZCBkZXJpdmF0aXZlcywKaG93ZXZlciwgY2Fubm90IGJlIHJlbGVhc2VkIHVuZGVyIGFueSBvdGhlciB0eXBlIG9mIGxpY2Vuc2UuIFRoZQpyZXF1aXJlbWVudCBmb3IgZm9udHMgdG8gcmVtYWluIHVuZGVyIHRoaXMgbGljZW5zZSBkb2VzIG5vdCBhcHBseQp0byBhbnkgZG9jdW1lbnQgY3JlYXRlZCB1c2luZyB0aGUgZm9udHMgb3IgdGhlaXIgZGVyaXZhdGl2ZXMuCgpERUZJTklUSU9OUwoiRm9udCBTb2Z0d2FyZSIgcmVmZXJzIHRvIHRoZSBzZXQgb2YgZmlsZXMgcmVsZWFzZWQgYnkgdGhlIENvcHlyaWdodApIb2xkZXIocykgdW5kZXIgdGhpcyBsaWNlbnNlIGFuZCBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLiBUaGlzIG1heQppbmNsdWRlIHNvdXJjZSBmaWxlcywgYnVpbGQgc2NyaXB0cyBhbmQgZG9jdW1lbnRhdGlvbi4KCiJSZXNlcnZlZCBGb250IE5hbWUiIHJlZmVycyB0byBhbnkgbmFtZXMgc3BlY2lmaWVkIGFzIHN1Y2ggYWZ0ZXIgdGhlCmNvcHlyaWdodCBzdGF0ZW1lbnQocykuCgoiT3JpZ2luYWwgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIEZvbnQgU29mdHdhcmUgY29tcG9uZW50cyBhcwpkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKS4KCiJNb2RpZmllZCBWZXJzaW9uIiByZWZlcnMgdG8gYW55IGRlcml2YXRpdmUgbWFkZSBieSBhZGRpbmcgdG8sIGRlbGV0aW5nLApvciBzdWJzdGl0dXRpbmcgLS0gaW4gcGFydCBvciBpbiB3aG9sZSAtLSBhbnkgb2YgdGhlIGNvbXBvbmVudHMgb2YgdGhlCk9yaWdpbmFsIFZlcnNpb24sIGJ5IGNoYW5naW5nIGZvcm1hdHMgb3IgYnkgcG9ydGluZyB0aGUgRm9udCBTb2Z0d2FyZSB0byBhCm5ldyBlbnZpcm9ubWVudC4KCiJBdXRob3IiIHJlZmVycyB0byBhbnkgZGVzaWduZXIsIGVuZ2luZWVyLCBwcm9ncmFtbWVyLCB0ZWNobmljYWwKd3JpdGVyIG9yIG90aGVyIHBlcnNvbiB3aG8gY29udHJpYnV0ZWQgdG8gdGhlIEZvbnQgU29mdHdhcmUuCgpQRVJNSVNTSU9OICYgQ09ORElUSU9OUwpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoZSBGb250IFNvZnR3YXJlLCB0byB1c2UsIHN0dWR5LCBjb3B5LCBtZXJnZSwgZW1iZWQsIG1vZGlmeSwKcmVkaXN0cmlidXRlLCBhbmQgc2VsbCBtb2RpZmllZCBhbmQgdW5tb2RpZmllZCBjb3BpZXMgb2YgdGhlIEZvbnQKU29mdHdhcmUsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKMSkgTmVpdGhlciB0aGUgRm9udCBTb2Z0d2FyZSBub3IgYW55IG9mIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMsCmluIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zLCBtYXkgYmUgc29sZCBieSBpdHNlbGYuCgoyKSBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucyBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgYnVuZGxlZCwKcmVkaXN0cmlidXRlZCBhbmQvb3Igc29sZCB3aXRoIGFueSBzb2Z0d2FyZSwgcHJvdmlkZWQgdGhhdCBlYWNoIGNvcHkKY29udGFpbnMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbGljZW5zZS4gVGhlc2UgY2FuIGJlCmluY2x1ZGVkIGVpdGhlciBhcyBzdGFuZC1hbG9uZSB0ZXh0IGZpbGVzLCBodW1hbi1yZWFkYWJsZSBoZWFkZXJzIG9yCmluIHRoZSBhcHByb3ByaWF0ZSBtYWNoaW5lLXJlYWRhYmxlIG1ldGFkYXRhIGZpZWxkcyB3aXRoaW4gdGV4dCBvcgpiaW5hcnkgZmlsZXMgYXMgbG9uZyBhcyB0aG9zZSBmaWVsZHMgY2FuIGJlIGVhc2lseSB2aWV3ZWQgYnkgdGhlIHVzZXIuCgozKSBObyBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSB1c2UgdGhlIFJlc2VydmVkIEZvbnQKTmFtZShzKSB1bmxlc3MgZXhwbGljaXQgd3JpdHRlbiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKQ29weXJpZ2h0IEhvbGRlci4gVGhpcyByZXN0cmljdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlIHByaW1hcnkgZm9udCBuYW1lIGFzCnByZXNlbnRlZCB0byB0aGUgdXNlcnMuCgo0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250ClNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIHByb21vdGUsIGVuZG9yc2Ugb3IgYWR2ZXJ0aXNlIGFueQpNb2RpZmllZCBWZXJzaW9uLCBleGNlcHQgdG8gYWNrbm93bGVkZ2UgdGhlIGNvbnRyaWJ1dGlvbihzKSBvZiB0aGUKQ29weXJpZ2h0IEhvbGRlcihzKSBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4KcGVybWlzc2lvbi4KCjUpIFRoZSBGb250IFNvZnR3YXJlLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkLCBpbiBwYXJ0IG9yIGluIHdob2xlLAptdXN0IGJlIGRpc3RyaWJ1dGVkIGVudGlyZWx5IHVuZGVyIHRoaXMgbGljZW5zZSwgYW5kIG11c3Qgbm90IGJlCmRpc3RyaWJ1dGVkIHVuZGVyIGFueSBvdGhlciBsaWNlbnNlLiBUaGUgcmVxdWlyZW1lbnQgZm9yIGZvbnRzIHRvCnJlbWFpbiB1bmRlciB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gYW55IGRvY3VtZW50IGNyZWF0ZWQKdXNpbmcgdGhlIEZvbnQgU29mdHdhcmUuCgpURVJNSU5BVElPTgpUaGlzIGxpY2Vuc2UgYmVjb21lcyBudWxsIGFuZCB2b2lkIGlmIGFueSBvZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBhcmUKbm90IG1ldC4KCkRJU0NMQUlNRVIKVEhFIEZPTlQgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVApPRiBDT1BZUklHSFQsIFBBVEVOVCwgVFJBREVNQVJLLCBPUiBPVEhFUiBSSUdIVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkNPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLApJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCkRBTUFHRVMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwpGUk9NLCBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGT05UIFNPRlRXQVJFIE9SIEZST00KT1RIRVIgREVBTElOR1MgSU4gVEhFIEZPTlQgU09GVFdBUkUu", "dist/client.js.map": "ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVubzpodHRwczovL2VzbS5zaC92OTYvc2NoZWR1bGVyQDAuMjAuMi9kZW5vL3NjaGVkdWxlci5qcyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3N0YWJsZS9yZWFjdEAxNy4wLjIvZGVuby9yZWFjdC5qcyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9yZWFjdC1kb21AMTcuMC4yL2Rlbm8vcmVhY3QtZG9tLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL3N0YXRlQDYuMS4yL2Rlbm8vc3RhdGUuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvc3R5bGUtbW9kQDQuMC4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QWJHVjZaWEl2WTI5dGJXOXUvZGVuby9zdHlsZS1tb2QuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvdzNjLWtleW5hbWVAMi4yLjYvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBYkdWNlpYSXZZMjl0Ylc5dS9kZW5vL3czYy1rZXluYW1lLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL3ZpZXdANi4zLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBYkdWNlpYSXZZMjl0Ylc5dS9kZW5vL3ZpZXcuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvQGxlemVyL2NvbW1vbkAxLjAuMS9kZW5vL2NvbW1vbi5qcyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AbGV6ZXIvaGlnaGxpZ2h0QDEuMS4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QWJHVjZaWEl2WTI5dGJXOXUvZGVuby9oaWdobGlnaHQuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvbGFuZ3VhZ2VANi4yLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBYkdWNlpYSXZZMjl0Ylc5dS9kZW5vL2xhbmd1YWdlLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2F1dG9jb21wbGV0ZUA2LjMuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFiR1Y2WlhJdlkyOXRiVzl1L2Rlbm8vYXV0b2NvbXBsZXRlLmpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcveWFtbC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL2Vycm9yLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdXRpbHMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC9tYXJrLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvc2NoZW1hLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL191dGlsL2Fzc2VydC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2J5dGVzL21vZC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2lvL2J1ZmZlci50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvYmluYXJ5LnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS9ib29sLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS9mbG9hdC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvZnVuY3Rpb24udHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC90eXBlL2ludC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvbWFwLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS9tZXJnZS50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvbmlsLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS9vbWFwLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS9wYWlycy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvcmVnZXhwLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS9zZXEudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC90eXBlL3NldC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3R5cGUvc3RyLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvdHlwZS90aW1lc3RhbXAudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC90eXBlL3VuZGVmaW5lZC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3NjaGVtYS9mYWlsc2FmZS50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3NjaGVtYS9qc29uLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvc2NoZW1hL2NvcmUudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC9zY2hlbWEvZGVmYXVsdC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3NjaGVtYS9leHRlbmRlZC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL3N0YXRlLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvbG9hZGVyL2xvYWRlcl9zdGF0ZS50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL2xvYWRlci9sb2FkZXIudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC9wYXJzZS50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL2VuY29kaW5nL195YW1sL2R1bXBlci9kdW1wZXJfc3RhdGUudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9lbmNvZGluZy9feWFtbC9kdW1wZXIvZHVtcGVyLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvZW5jb2RpbmcvX3lhbWwvc3RyaW5naWZ5LnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvX3V0aWwvb3MudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9wYXRoL3dpbjMyLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvcGF0aC9fY29uc3RhbnRzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTU4LjAvcGF0aC9fdXRpbC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL3BhdGgvcG9zaXgudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9wYXRoL2dsb2IudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTguMC9wYXRoL21vZC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1OC4wL3N0cmVhbXMvY29udmVyc2lvbi50cyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AbGV6ZXIvY29tbW9uQDEuMC4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzL2Rlbm8vY29tbW9uLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9oaWdobGlnaHRAMS4xLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjMvZGVuby9oaWdobGlnaHQuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvc3R5bGUtbW9kQDQuMC4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzL2Rlbm8vc3R5bGUtbW9kLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2xhbmd1YWdlQDYuMi4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzL2Rlbm8vbGFuZ3VhZ2UuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvY29tbWFuZHNANi4xLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjMvZGVuby9jb21tYW5kcy5qcyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AbGV6ZXIvaGlnaGxpZ2h0QDEuMS4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOWpiMjF0WVc1a2N5eEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjQvZGVuby9oaWdobGlnaHQuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvc3R5bGUtbW9kQDQuMC4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOWpiMjF0WVc1a2N5eEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjQvZGVuby9zdHlsZS1tb2QuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvbGFuZ3VhZ2VANi4yLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5amIyMXRZVzVrY3l4QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzTEVCc1pYcGxjaTlqYjIxdGIyNC9kZW5vL2xhbmd1YWdlLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2F1dG9jb21wbGV0ZUA2LjMuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTlqYjIxdFlXNWtjeXhBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0L2Rlbm8vYXV0b2NvbXBsZXRlLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9oaWdobGlnaHRAMS4xLjEvWC1aUzlBYkdWNlpYSXZZMjl0Ylc5dS9kZW5vL2hpZ2hsaWdodC5qcyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AbGV6ZXIvbWFya2Rvd25AMS4wLjIvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5c1lXNW5kV0ZuWlN4QWJHVjZaWEl2WTI5dGJXOXVMRUJzWlhwbGNpOW9hV2RvYkdsbmFIUS9kZW5vL21hcmtkb3duLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L2NyZWx0QDEuMC41L1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzL2Rlbm8vY3JlbHQuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3Ivc2VhcmNoQDYuMi4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzL2Rlbm8vc2VhcmNoLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L3N0eWxlLW1vZEA0LjAuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjRzUUd4bGVtVnlMMmhwWjJoc2FXZG9kQ3hBYkdWNlpYSXZiSEkvZGVuby9zdHlsZS1tb2QuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvbGFuZ3VhZ2VANi4yLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YkhJL2Rlbm8vbGFuZ3VhZ2UuanMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9fZGVub191bnN0YWJsZS50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2FzeW5jL2RlZmVycmVkLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvYXN5bmMvZGVsYXkudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9hc3luYy9tdXhfYXN5bmNfaXRlcmF0b3IudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9mbXQvY29sb3JzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvdGVzdGluZy9hc3NlcnRzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvX3V0aWwvYXNzZXJ0LnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvYnl0ZXMvbW9kLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvaW8vYnVmZmVyLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvc3RyZWFtcy9jb252ZXJzaW9uLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9fdXRpbHMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3V0aWwvdHlwZXMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvdHlwZXMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL2NyeXB0by9jb25zdGFudHMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL2NyeXB0by9fa2V5cy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvZXJyb3JfY29kZXMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL2hpZGVfc3RhY2tfZnJhbWVzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9ub3JtYWxpemVfZW5jb2RpbmcubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC92YWxpZGF0b3JzLm1qcyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy91dGlsLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC91dGlsL2luc3BlY3QubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC91dGlsLm1qcyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvX2NvcmUudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL19wcm9jZXNzL2V4aXRpbmcudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL2ZpeGVkX3F1ZXVlLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9fbmV4dF90aWNrLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvZm10L3ByaW50Zi50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvdXRpbC9kZWJ1Z2xvZy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy91di50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL191dGlsL29zLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL193aW5lcnJvci50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9fbGlidXZfd2luZXJyb3IudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvY29uc3RhbnRzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS91dGlsL3R5cGVzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3N0cmluZ19kZWNvZGVyLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL19ub2RlLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2J1ZmZlci50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2VuY29kaW5nL2Jhc2U2NC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2VuY29kaW5nL2Jhc2U2NHVybC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9fdXRpbHMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL2J1ZmZlci5tanMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL19idWZmZXIubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS91dGlsLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9lcnJvcnMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL19ldmVudHMubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvZmxhZ3MvbW9kLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL25vZGVfb3B0aW9ucy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvb3B0aW9ucy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL3BhdGgvd2luMzIudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9wYXRoL19jb25zdGFudHMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9wYXRoL191dGlsLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvcGF0aC9wb3NpeC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL3BhdGgvZ2xvYi50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL3BhdGgvbW9kLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9fcHJvY2Vzcy9wcm9jZXNzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9yZWFkbGluZS91dGlscy5tanMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3JlYWRsaW5lL2NhbGxiYWNrcy5tanMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3N0cmVhbXMvX3V0aWxzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL2VuZC1vZi1zdHJlYW0ubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL2FkZC1hYm9ydC1zaWduYWwubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL3V0aWxzLm1qcyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvX3Byb2Nlc3Mvc3RkaW8ubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9ibG9iLm1qcyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvc3RyZWFtcy9mcm9tLm1qcyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZS5tanMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3N0cmVhbXMvbGVnYWN5Lm1qcyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvc3RyaW5nX2RlY29kZXIudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3N0cmVhbXMvYnVmZmVyX2xpc3QubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL3JlYWRhYmxlLm1qcyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvc3RyZWFtcy93cml0YWJsZS5tanMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3N0cmVhbXMvZHVwbGV4Lm1qcyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvc3RyZWFtcy90cmFuc2Zvcm0ubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9zdHJlYW1zL3Bhc3N0aHJvdWdoLm1qcyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5tanMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsL3N0cmVhbXMvY29tcG9zZS5tanMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL3N0cmVhbS9wcm9taXNlcy5tanMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL19zdHJlYW0ubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9fcHJvY2Vzcy9zdHJlYW1zLm1qcyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9hc3luY193cmFwLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2NvbmZpZy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9jYXJlc193cmFwLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9uZXQudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvYXJlcy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9jb250ZXh0aWZ5LnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2NyeXB0by50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL2NyeXB0by90aW1pbmdfc2FmZV9lcXVhbC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9fdGltaW5nU2FmZUVxdWFsLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2NyZWRlbnRpYWxzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2Vycm9ycy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9mcy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9mc19kaXIudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvZnNfZXZlbnRfd3JhcC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9oZWFwX3V0aWxzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2h0dHBfcGFyc2VyLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL2ljdS50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9pbnNwZWN0b3IudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvanNfc3RyZWFtLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL21lc3NhZ2luZy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9tb2R1bGVfd3JhcC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9uYXRpdmVfbW9kdWxlLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL25hdGl2ZXMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvb3B0aW9ucy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9vcy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9waXBlX3dyYXAudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvc3RyZWFtX3dyYXAudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvaGFuZGxlX3dyYXAudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvY29ubmVjdGlvbl93cmFwLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL19saXN0ZW4udHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvcGVyZm9ybWFuY2UudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvcHJvY2Vzc19tZXRob2RzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3JlcG9ydC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9zZXJkZXMudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvc2lnbmFsX3dyYXAudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvc3Bhd25fc3luYy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy9zeW1ib2xzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3Rhc2tfcXVldWUudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvdGNwX3dyYXAudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvdGltZXJzLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3Rsc193cmFwLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3RyYWNlX2V2ZW50cy50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy90dHlfd3JhcC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy91ZHBfd3JhcC50cyIsICJkZW5vOmh0dHBzOi8vZGVuby5sYW5kL3N0ZEAwLjE1My4wL25vZGUvaW50ZXJuYWxfYmluZGluZy91cmwudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvdjgudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvd29ya2VyLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbF9iaW5kaW5nL3psaWIudHMiLCAiZGVubzpodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL2ludGVybmFsX2JpbmRpbmcvbW9kLnRzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9pbnRlcm5hbC9wcm9jZXNzL3Blcl90aHJlYWQubWpzIiwgImRlbm86aHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9wcm9jZXNzLnRzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9sckAxLjIuMy9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9sci5qcyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AbGV6ZXIvaHRtbEAxLjAuMS9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9odG1sLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9jc3NAMS4wLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5c1lXNW5kV0ZuWlN4QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzTEVCc1pYcGxjaTlqYjIxdGIyNHNRR3hsZW1WeUwyaHBaMmhzYVdkb2RDeEFiR1Y2WlhJdmJXRnlhMlJ2ZDI0L2Rlbm8vY3NzLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2xhbmctY3NzQDYuMC4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOXNZVzVuZFdGblpTeEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjRzUUd4bGVtVnlMMmhwWjJoc2FXZG9kQ3hBYkdWNlpYSXZiV0Z5YTJSdmQyNC9kZW5vL2xhbmctY3NzLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9qYXZhc2NyaXB0QDEuMC4yL1gtWlM5QVkyOWtaVzFwY25KdmNpOXNZVzVuZFdGblpTeEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjRzUUd4bGVtVnlMMmhwWjJoc2FXZG9kQ3hBYkdWNlpYSXZiV0Z5YTJSdmQyNC9kZW5vL2phdmFzY3JpcHQuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlQDYuMy4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOXNZVzVuZFdGblpTeEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjRzUUd4bGVtVnlMMmhwWjJoc2FXZG9kQ3hBYkdWNlpYSXZiV0Z5YTJSdmQyNC9kZW5vL2F1dG9jb21wbGV0ZS5qcyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AY29kZW1pcnJvci9sYW5nLWphdmFzY3JpcHRANi4xLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5c1lXNW5kV0ZuWlN4QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzTEVCc1pYcGxjaTlqYjIxdGIyNHNRR3hsZW1WeUwyaHBaMmhzYVdkb2RDeEFiR1Y2WlhJdmJXRnlhMlJ2ZDI0L2Rlbm8vbGFuZy1qYXZhc2NyaXB0LmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2xhbmctaHRtbEA2LjEuMi9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9sYW5nLWh0bWwuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvQGNvZGVtaXJyb3IvbGFuZy1tYXJrZG93bkA2LjAuMS9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9sYW5nLW1hcmtkb3duLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2xlZ2FjeS1tb2Rlc0A2LjEuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aUS9kZW5vL21vZGUveWFtbC5qcyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AbGV6ZXIvbHJAMS4yLjMvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5c1lXNW5kV0ZuWlN4QWJHVjZaWEl2WTI5dGJXOXVMRUJzWlhwbGNpOW9hV2RvYkdsbmFIUS9kZW5vL2xyLmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0BsZXplci9qYXZhc2NyaXB0QDEuMC4yL1gtWlM5QVkyOWtaVzFwY25KdmNpOXNZVzVuZFdGblpTeEFiR1Y2WlhJdlkyOXRiVzl1TEVCc1pYcGxjaTlvYVdkb2JHbG5hSFEvZGVuby9qYXZhc2NyaXB0LmpzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bjb2RlbWlycm9yL2xhbmctamF2YXNjcmlwdEA2LjEuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTloZFhSdlkyOXRjR3hsZEdVc1FHTnZaR1Z0YVhKeWIzSXZZMjl0YldGdVpITXNRR052WkdWdGFYSnliM0l2YkdGdVozVmhaMlVzUUdOdlpHVnRhWEp5YjNJdmJHbHVkQ3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJwaGRtRnpZM0pwY0hRc1FHeGxlbVZ5TDJ4eS9kZW5vL2xhbmctamF2YXNjcmlwdC5qcyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvY29tbW9uL21hcmtkb3duX2V4dC50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvY29tbW9uL2N1c3RvbXRhZ3MudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL2NvbW1vbi9wYXJzZXIudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL2NvbW1vbi9wYXJzZV90cmVlLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy9jb21tb24vc3lzY2FsbHMvbWFya2Rvd24udHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL2NvbW1vbi91dGlsLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy9wbHVnb3MvdXRpbC50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvcGx1Z29zL3NhbmRib3gudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9lbnZpcm9ubWVudHMvd2Vid29ya2VyX3NhbmRib3gudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9ob29rcy9ldmVudC50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvcGx1Z29zL3N5c2NhbGxzL2V2ZW50LnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy9wbHVnb3Mvc3lzY2FsbHMvc2FuZGJveC50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvcGx1Z29zL2V2ZW50LnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy9wbHVnb3MvcGx1Zy50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvcGx1Z29zL3N5c3RlbS50cyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmVANi4yLjAvZGVuby9mb250YXdlc29tZS1zdmctY29yZS5qcyIsICJkZW5vOmh0dHBzOi8vZXNtLnNoL3Y5Ni9wcm9wLXR5cGVzQDE1LjguMS9kZW5vL3Byb3AtdHlwZXMuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC9zdGFibGUvcmVhY3RAMTguMi4wL2Rlbm8vcmVhY3QuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lQDAuMi4wL2Rlbm8vcmVhY3QtZm9udGF3ZXNvbWUuanMiLCAiZGVubzpodHRwczovL2VzbS5zaC92OTYvZnV6enlzb3J0QDIuMC4xL2Rlbm8vZnV6enlzb3J0LmpzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvY29tcG9uZW50cy9maWx0ZXIudHN4IiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29uc0A2LjIuMC9kZW5vL2ZyZWUtc29saWQtc3ZnLWljb25zLmpzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvY29tcG9uZW50cy9jb21tYW5kX3BhbGV0dGUudHN4IiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvY29tcG9uZW50cy9wYWdlX25hdmlnYXRvci50c3giLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9jb21wb25lbnRzL3BhbmVsLnRzeCIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL2NvbXBvbmVudHMvdG9wX2Jhci50c3giLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL2NvbW1vbi90eXBlcy50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL2VkaXRvcl9wYXN0ZS50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL2hvb2tzL2NvbW1hbmQudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9ob29rcy9zbGFzaF9jb21tYW5kLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvaW5saW5lX2ltYWdlLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvbGluZV93cmFwcGVyLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvbmF2aWdhdG9yLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvcmVkdWNlci50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL3NtYXJ0X3F1b3Rlcy50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL3N0eWxlLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy9wbHVnb3Mvc3lzY2FsbHMvdHJhbnNwb3J0LnRzIiwgImRlbm86aHR0cHM6Ly9lc20uc2gvdjk2L2RleGllQDMuMi4yL2Rlbm8vZGV4aWUuanMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9zeXNjYWxscy9zdG9yZS5kZXhpZV9icm93c2VyLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvc3lzY2FsbHMvY2xpZW50U3RvcmUudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9zeXNjYWxscy9lZGl0b3IudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9zeXNjYWxscy9mdWxsdGV4dC50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL3N5c2NhbGxzL2luZGV4LnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvc3lzY2FsbHMvc3BhY2UudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3dlYi9zeXNjYWxscy9zdG9yZS50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL3N5c2NhbGxzL3N5c3RlbS50cyIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvd2ViL3R5cGVzLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvZWRpdG9yLnRzeCIsICJkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvY29tbW9uL3NwYWNlcy9jb25zdGFudHMudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL2NvbW1vbi9zcGFjZXMvc3BhY2UudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL2NvbW1vbi9zcGFjZXMvaHR0cF9zcGFjZV9wcmltaXRpdmVzLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy93ZWIvYm9vdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoc2NoZWR1bGVyQDAuMjAuMikgZGVubyBwcm9kdWN0aW9uICovXG52YXIgej1PYmplY3QuY3JlYXRlO3ZhciBPPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgQj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3ZhciBHPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO3ZhciBlZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbmU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgVj0oZSxuKT0+KCk9PihufHxlKChuPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxuKSxuLmV4cG9ydHMpO3ZhciB0ZT0oZSxuLHQsbCk9PntpZihuJiZ0eXBlb2Ygbj09XCJvYmplY3RcInx8dHlwZW9mIG49PVwiZnVuY3Rpb25cIilmb3IobGV0IG8gb2YgRyhuKSkhbmUuY2FsbChlLG8pJiZvIT09dCYmTyhlLG8se2dldDooKT0+bltvXSxlbnVtZXJhYmxlOiEobD1CKG4sbykpfHxsLmVudW1lcmFibGV9KTtyZXR1cm4gZX07dmFyIHJlPShlLG4sdCk9Pih0PWUhPW51bGw/eihlZShlKSk6e30sdGUobnx8IWV8fCFlLl9fZXNNb2R1bGU/Tyh0LFwiZGVmYXVsdFwiLHt2YWx1ZTplLGVudW1lcmFibGU6ITB9KTp0LGUpKTt2YXIgWD1WKHI9PntcInVzZSBzdHJpY3RcIjt2YXIgeSxoLFQscTt0eXBlb2YgcGVyZm9ybWFuY2U9PVwib2JqZWN0XCImJnR5cGVvZiBwZXJmb3JtYW5jZS5ub3c9PVwiZnVuY3Rpb25cIj8oSD1wZXJmb3JtYW5jZSxyLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBILm5vdygpfSk6KEM9RGF0ZSxKPUMubm93KCksci51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gQy5ub3coKS1KfSk7dmFyIEgsQyxKO3R5cGVvZiB3aW5kb3c+XCJ1XCJ8fHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCE9XCJmdW5jdGlvblwiPyhwPW51bGwsTD1udWxsLE49ZnVuY3Rpb24oKXtpZihwIT09bnVsbCl0cnl7dmFyIGU9ci51bnN0YWJsZV9ub3coKTtwKCEwLGUpLHA9bnVsbH1jYXRjaChuKXt0aHJvdyBzZXRUaW1lb3V0KE4sMCksbn19LHk9ZnVuY3Rpb24oZSl7cCE9PW51bGw/c2V0VGltZW91dCh5LDAsZSk6KHA9ZSxzZXRUaW1lb3V0KE4sMCkpfSxoPWZ1bmN0aW9uKGUsbil7TD1zZXRUaW1lb3V0KGUsbil9LFQ9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoTCl9LHIudW5zdGFibGVfc2hvdWxkWWllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0scT1yLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKCl7fSk6KEs9d2luZG93LnNldFRpbWVvdXQsUT13aW5kb3cuY2xlYXJUaW1lb3V0LHR5cGVvZiBjb25zb2xlPFwidVwiJiYoUz13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUsdHlwZW9mIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUhPVwiZnVuY3Rpb25cIiYmY29uc29sZS5lcnJvcihcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzXCIpLHR5cGVvZiBTIT1cImZ1bmN0aW9uXCImJmNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGNhbmNlbEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzXCIpKSxtPSExLHc9bnVsbCxnPS0xLGo9NSxFPTAsci51bnN0YWJsZV9zaG91bGRZaWVsZD1mdW5jdGlvbigpe3JldHVybiByLnVuc3RhYmxlX25vdygpPj1FfSxxPWZ1bmN0aW9uKCl7fSxyLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGUpezA+ZXx8MTI1PGU/Y29uc29sZS5lcnJvcihcImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZFwiKTpqPTA8ZT9NYXRoLmZsb29yKDFlMy9lKTo1fSxGPW5ldyBNZXNzYWdlQ2hhbm5lbCxQPUYucG9ydDIsRi5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtpZih3IT09bnVsbCl7dmFyIGU9ci51bnN0YWJsZV9ub3coKTtFPWUrajt0cnl7dyghMCxlKT9QLnBvc3RNZXNzYWdlKG51bGwpOihtPSExLHc9bnVsbCl9Y2F0Y2gobil7dGhyb3cgUC5wb3N0TWVzc2FnZShudWxsKSxufX1lbHNlIG09ITF9LHk9ZnVuY3Rpb24oZSl7dz1lLG18fChtPSEwLFAucG9zdE1lc3NhZ2UobnVsbCkpfSxoPWZ1bmN0aW9uKGUsbil7Zz1LKGZ1bmN0aW9uKCl7ZShyLnVuc3RhYmxlX25vdygpKX0sbil9LFQ9ZnVuY3Rpb24oKXtRKGcpLGc9LTF9KTt2YXIgcCxMLE4sSyxRLFMsbSx3LGcsaixFLEYsUDtmdW5jdGlvbiBSKGUsbil7dmFyIHQ9ZS5sZW5ndGg7ZS5wdXNoKG4pO2U6Zm9yKDs7KXt2YXIgbD10LTE+Pj4xLG89ZVtsXTtpZihvIT09dm9pZCAwJiYwPHgobyxuKSllW2xdPW4sZVt0XT1vLHQ9bDtlbHNlIGJyZWFrIGV9fWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGU9ZVswXSxlPT09dm9pZCAwP251bGw6ZX1mdW5jdGlvbiBJKGUpe3ZhciBuPWVbMF07aWYobiE9PXZvaWQgMCl7dmFyIHQ9ZS5wb3AoKTtpZih0IT09bil7ZVswXT10O2U6Zm9yKHZhciBsPTAsbz1lLmxlbmd0aDtsPG87KXt2YXIgZj0yKihsKzEpLTEsYj1lW2ZdLHY9ZisxLGQ9ZVt2XTtpZihiIT09dm9pZCAwJiYwPngoYix0KSlkIT09dm9pZCAwJiYwPngoZCxiKT8oZVtsXT1kLGVbdl09dCxsPXYpOihlW2xdPWIsZVtmXT10LGw9Zik7ZWxzZSBpZihkIT09dm9pZCAwJiYwPngoZCx0KSllW2xdPWQsZVt2XT10LGw9djtlbHNlIGJyZWFrIGV9fXJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIHgoZSxuKXt2YXIgdD1lLnNvcnRJbmRleC1uLnNvcnRJbmRleDtyZXR1cm4gdCE9PTA/dDplLmlkLW4uaWR9dmFyIHM9W10sYz1bXSxsZT0xLHU9bnVsbCxpPTMsTT0hMSxfPSExLGs9ITE7ZnVuY3Rpb24gWShlKXtmb3IodmFyIG49YShjKTtuIT09bnVsbDspe2lmKG4uY2FsbGJhY2s9PT1udWxsKUkoYyk7ZWxzZSBpZihuLnN0YXJ0VGltZTw9ZSlJKGMpLG4uc29ydEluZGV4PW4uZXhwaXJhdGlvblRpbWUsUihzLG4pO2Vsc2UgYnJlYWs7bj1hKGMpfX1mdW5jdGlvbiBVKGUpe2lmKGs9ITEsWShlKSwhXylpZihhKHMpIT09bnVsbClfPSEwLHkoVyk7ZWxzZXt2YXIgbj1hKGMpO24hPT1udWxsJiZoKFUsbi5zdGFydFRpbWUtZSl9fWZ1bmN0aW9uIFcoZSxuKXtfPSExLGsmJihrPSExLFQoKSksTT0hMDt2YXIgdD1pO3RyeXtmb3IoWShuKSx1PWEocyk7dSE9PW51bGwmJighKHUuZXhwaXJhdGlvblRpbWU+bil8fGUmJiFyLnVuc3RhYmxlX3Nob3VsZFlpZWxkKCkpOyl7dmFyIGw9dS5jYWxsYmFjaztpZih0eXBlb2YgbD09XCJmdW5jdGlvblwiKXt1LmNhbGxiYWNrPW51bGwsaT11LnByaW9yaXR5TGV2ZWw7dmFyIG89bCh1LmV4cGlyYXRpb25UaW1lPD1uKTtuPXIudW5zdGFibGVfbm93KCksdHlwZW9mIG89PVwiZnVuY3Rpb25cIj91LmNhbGxiYWNrPW86dT09PWEocykmJkkocyksWShuKX1lbHNlIEkocyk7dT1hKHMpfWlmKHUhPT1udWxsKXZhciBmPSEwO2Vsc2V7dmFyIGI9YShjKTtiIT09bnVsbCYmaChVLGIuc3RhcnRUaW1lLW4pLGY9ITF9cmV0dXJuIGZ9ZmluYWxseXt1PW51bGwsaT10LE09ITF9fXZhciBvZT1xO3IudW5zdGFibGVfSWRsZVByaW9yaXR5PTU7ci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eT0xO3IudW5zdGFibGVfTG93UHJpb3JpdHk9NDtyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTM7ci51bnN0YWJsZV9Qcm9maWxpbmc9bnVsbDtyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTI7ci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihlKXtlLmNhbGxiYWNrPW51bGx9O3IudW5zdGFibGVfY29udGludWVFeGVjdXRpb249ZnVuY3Rpb24oKXtffHxNfHwoXz0hMCx5KFcpKX07ci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBpfTtyLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIGEocyl9O3IudW5zdGFibGVfbmV4dD1mdW5jdGlvbihlKXtzd2l0Y2goaSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIG49MzticmVhaztkZWZhdWx0Om49aX12YXIgdD1pO2k9bjt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e2k9dH19O3IudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9O3IudW5zdGFibGVfcmVxdWVzdFBhaW50PW9lO3IudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDplPTN9dmFyIHQ9aTtpPWU7dHJ5e3JldHVybiBuKCl9ZmluYWxseXtpPXR9fTtyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s9ZnVuY3Rpb24oZSxuLHQpe3ZhciBsPXIudW5zdGFibGVfbm93KCk7c3dpdGNoKHR5cGVvZiB0PT1cIm9iamVjdFwiJiZ0IT09bnVsbD8odD10LmRlbGF5LHQ9dHlwZW9mIHQ9PVwibnVtYmVyXCImJjA8dD9sK3Q6bCk6dD1sLGUpe2Nhc2UgMTp2YXIgbz0tMTticmVhaztjYXNlIDI6bz0yNTA7YnJlYWs7Y2FzZSA1Om89MTA3Mzc0MTgyMzticmVhaztjYXNlIDQ6bz0xZTQ7YnJlYWs7ZGVmYXVsdDpvPTVlM31yZXR1cm4gbz10K28sZT17aWQ6bGUrKyxjYWxsYmFjazpuLHByaW9yaXR5TGV2ZWw6ZSxzdGFydFRpbWU6dCxleHBpcmF0aW9uVGltZTpvLHNvcnRJbmRleDotMX0sdD5sPyhlLnNvcnRJbmRleD10LFIoYyxlKSxhKHMpPT09bnVsbCYmZT09PWEoYykmJihrP1QoKTprPSEwLGgoVSx0LWwpKSk6KGUuc29ydEluZGV4PW8sUihzLGUpLF98fE18fChfPSEwLHkoVykpKSxlfTtyLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgbj1pO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWk7aT1uO3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtpPXR9fX19KTt2YXIgJD1WKChzZSxaKT0+e1widXNlIHN0cmljdFwiO1ouZXhwb3J0cz1YKCl9KTt2YXIgRD1yZSgkKCkpLHt1bnN0YWJsZV9ub3c6Y2UsdW5zdGFibGVfc2hvdWxkWWllbGQ6ZmUsdW5zdGFibGVfSWRsZVByaW9yaXR5OmJlLHVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5Ol9lLHVuc3RhYmxlX0xvd1ByaW9yaXR5OmRlLHVuc3RhYmxlX05vcm1hbFByaW9yaXR5OnBlLHVuc3RhYmxlX1Byb2ZpbGluZzp5ZSx1bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eTp2ZSx1bnN0YWJsZV9jYW5jZWxDYWxsYmFjazptZSx1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbjp3ZSx1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDpoZSx1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZTprZSx1bnN0YWJsZV9uZXh0OmdlLHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uOlBlLHVuc3RhYmxlX3JlcXVlc3RQYWludDp4ZSx1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk6VGUsdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjazpJZSx1bnN0YWJsZV93cmFwQ2FsbGJhY2s6TWV9PUQse2RlZmF1bHQ6QSwuLi5pZX09RCxDZT1BIT09dm9pZCAwP0E6aWU7ZXhwb3J0e0NlIGFzIGRlZmF1bHQsYmUgYXMgdW5zdGFibGVfSWRsZVByaW9yaXR5LF9lIGFzIHVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LGRlIGFzIHVuc3RhYmxlX0xvd1ByaW9yaXR5LHBlIGFzIHVuc3RhYmxlX05vcm1hbFByaW9yaXR5LHllIGFzIHVuc3RhYmxlX1Byb2ZpbGluZyx2ZSBhcyB1bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxtZSBhcyB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjayx3ZSBhcyB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbixoZSBhcyB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxrZSBhcyB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSxnZSBhcyB1bnN0YWJsZV9uZXh0LGNlIGFzIHVuc3RhYmxlX25vdyxQZSBhcyB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbix4ZSBhcyB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQsVGUgYXMgdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LEllIGFzIHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssZmUgYXMgdW5zdGFibGVfc2hvdWxkWWllbGQsTWUgYXMgdW5zdGFibGVfd3JhcENhbGxiYWNrfTtcbi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKHJlYWN0QDE3LjAuMikgZGVubyBwcm9kdWN0aW9uICovXG5jb25zdCBfX29iamVjdF9hc3NpZ24kID0gT2JqZWN0LmFzc2lnbjt2YXIgWT1PYmplY3QuY3JlYXRlO3ZhciAkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgRz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3ZhciBKPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO3ZhciBLPU9iamVjdC5nZXRQcm90b3R5cGVPZixRPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIFg9KGU9PnR5cGVvZiByZXF1aXJlPFwidVwiP3JlcXVpcmU6dHlwZW9mIFByb3h5PFwidVwiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZTxcInVcIj9yZXF1aXJlOnQpW3JdfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8XCJ1XCIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IG5ldyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mIFwiJytlKydcIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgZz0oZSx0KT0+KCk9Pih0fHxlKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpO3ZhciBaPShlLHQscix1KT0+e2lmKHQmJnR5cGVvZiB0PT1cIm9iamVjdFwifHx0eXBlb2YgdD09XCJmdW5jdGlvblwiKWZvcihsZXQgbyBvZiBKKHQpKSFRLmNhbGwoZSxvKSYmbyE9PXImJiQoZSxvLHtnZXQ6KCk9PnRbb10sZW51bWVyYWJsZTohKHU9Ryh0LG8pKXx8dS5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBiPShlLHQscik9PihyPWUhPW51bGw/WShLKGUpKTp7fSxaKHR8fCFlfHwhZS5fX2VzTW9kdWxlPyQocixcImRlZmF1bHRcIix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSk7dmFyIFY9ZyhuPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIEU9X19vYmplY3RfYXNzaWduJCx5PTYwMTAzLGo9NjAxMDY7bi5GcmFnbWVudD02MDEwNztuLlN0cmljdE1vZGU9NjAxMDg7bi5Qcm9maWxlcj02MDExNDt2YXIgeD02MDEwOSxJPTYwMTEwLHc9NjAxMTI7bi5TdXNwZW5zZT02MDExMzt2YXIgQT02MDExNSxGPTYwMTE2O3R5cGVvZiBTeW1ib2w9PVwiZnVuY3Rpb25cIiYmU3ltYm9sLmZvciYmKGw9U3ltYm9sLmZvcix5PWwoXCJyZWFjdC5lbGVtZW50XCIpLGo9bChcInJlYWN0LnBvcnRhbFwiKSxuLkZyYWdtZW50PWwoXCJyZWFjdC5mcmFnbWVudFwiKSxuLlN0cmljdE1vZGU9bChcInJlYWN0LnN0cmljdF9tb2RlXCIpLG4uUHJvZmlsZXI9bChcInJlYWN0LnByb2ZpbGVyXCIpLHg9bChcInJlYWN0LnByb3ZpZGVyXCIpLEk9bChcInJlYWN0LmNvbnRleHRcIiksdz1sKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksbi5TdXNwZW5zZT1sKFwicmVhY3Quc3VzcGVuc2VcIiksQT1sKFwicmVhY3QubWVtb1wiKSxGPWwoXCJyZWFjdC5sYXp5XCIpKTt2YXIgbCxPPXR5cGVvZiBTeW1ib2w9PVwiZnVuY3Rpb25cIiYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIGVlKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPVwib2JqZWN0XCI/bnVsbDooZT1PJiZlW09dfHxlW1wiQEBpdGVyYXRvclwiXSx0eXBlb2YgZT09XCJmdW5jdGlvblwiP2U6bnVsbCl9ZnVuY3Rpb24gXyhlKXtmb3IodmFyIHQ9XCJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD1cIitlLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXQrPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3JdKTtyZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIitlK1wiOyB2aXNpdCBcIit0K1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn12YXIgTD17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0scT17fTtmdW5jdGlvbiBkKGUsdCxyKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPXEsdGhpcy51cGRhdGVyPXJ8fEx9ZC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fTtkLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlIT1cIm9iamVjdFwiJiZ0eXBlb2YgZSE9XCJmdW5jdGlvblwiJiZlIT1udWxsKXRocm93IEVycm9yKF8oODUpKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSx0LFwic2V0U3RhdGVcIil9O2QucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLFwiZm9yY2VVcGRhdGVcIil9O2Z1bmN0aW9uIEQoKXt9RC5wcm90b3R5cGU9ZC5wcm90b3R5cGU7ZnVuY3Rpb24gUyhlLHQscil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1xLHRoaXMudXBkYXRlcj1yfHxMfXZhciBDPVMucHJvdG90eXBlPW5ldyBEO0MuY29uc3RydWN0b3I9UztFKEMsZC5wcm90b3R5cGUpO0MuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIFI9e2N1cnJlbnQ6bnVsbH0sTT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LE49e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtmdW5jdGlvbiBVKGUsdCxyKXt2YXIgdSxvPXt9LGY9bnVsbCxzPW51bGw7aWYodCE9bnVsbClmb3IodSBpbiB0LnJlZiE9PXZvaWQgMCYmKHM9dC5yZWYpLHQua2V5IT09dm9pZCAwJiYoZj1cIlwiK3Qua2V5KSx0KU0uY2FsbCh0LHUpJiYhTi5oYXNPd25Qcm9wZXJ0eSh1KSYmKG9bdV09dFt1XSk7dmFyIGM9YXJndW1lbnRzLmxlbmd0aC0yO2lmKGM9PT0xKW8uY2hpbGRyZW49cjtlbHNlIGlmKDE8Yyl7Zm9yKHZhciBpPUFycmF5KGMpLHA9MDtwPGM7cCsrKWlbcF09YXJndW1lbnRzW3ArMl07by5jaGlsZHJlbj1pfWlmKGUmJmUuZGVmYXVsdFByb3BzKWZvcih1IGluIGM9ZS5kZWZhdWx0UHJvcHMsYylvW3VdPT09dm9pZCAwJiYob1t1XT1jW3VdKTtyZXR1cm57JCR0eXBlb2Y6eSx0eXBlOmUsa2V5OmYscmVmOnMscHJvcHM6byxfb3duZXI6Ui5jdXJyZW50fX1mdW5jdGlvbiB0ZShlLHQpe3JldHVybnskJHR5cGVvZjp5LHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn19ZnVuY3Rpb24gayhlKXtyZXR1cm4gdHlwZW9mIGU9PVwib2JqZWN0XCImJmUhPT1udWxsJiZlLiQkdHlwZW9mPT09eX1mdW5jdGlvbiByZShlKXt2YXIgdD17XCI9XCI6XCI9MFwiLFwiOlwiOlwiPTJcIn07cmV0dXJuXCIkXCIrZS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24ocil7cmV0dXJuIHRbcl19KX12YXIgUD0vXFwvKy9nO2Z1bmN0aW9uIGgoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PVwib2JqZWN0XCImJmUhPT1udWxsJiZlLmtleSE9bnVsbD9yZShcIlwiK2Uua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBtKGUsdCxyLHUsbyl7dmFyIGY9dHlwZW9mIGU7KGY9PT1cInVuZGVmaW5lZFwifHxmPT09XCJib29sZWFuXCIpJiYoZT1udWxsKTt2YXIgcz0hMTtpZihlPT09bnVsbClzPSEwO2Vsc2Ugc3dpdGNoKGYpe2Nhc2VcInN0cmluZ1wiOmNhc2VcIm51bWJlclwiOnM9ITA7YnJlYWs7Y2FzZVwib2JqZWN0XCI6c3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgeTpjYXNlIGo6cz0hMH19aWYocylyZXR1cm4gcz1lLG89byhzKSxlPXU9PT1cIlwiP1wiLlwiK2gocywwKTp1LEFycmF5LmlzQXJyYXkobyk/KHI9XCJcIixlIT1udWxsJiYocj1lLnJlcGxhY2UoUCxcIiQmL1wiKStcIi9cIiksbShvLHQscixcIlwiLGZ1bmN0aW9uKHApe3JldHVybiBwfSkpOm8hPW51bGwmJihrKG8pJiYobz10ZShvLHIrKCFvLmtleXx8cyYmcy5rZXk9PT1vLmtleT9cIlwiOihcIlwiK28ua2V5KS5yZXBsYWNlKFAsXCIkJi9cIikrXCIvXCIpK2UpKSx0LnB1c2gobykpLDE7aWYocz0wLHU9dT09PVwiXCI/XCIuXCI6dStcIjpcIixBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXtmPWVbY107dmFyIGk9dStoKGYsYyk7cys9bShmLHQscixpLG8pfWVsc2UgaWYoaT1lZShlKSx0eXBlb2YgaT09XCJmdW5jdGlvblwiKWZvcihlPWkuY2FsbChlKSxjPTA7IShmPWUubmV4dCgpKS5kb25lOylmPWYudmFsdWUsaT11K2goZixjKyspLHMrPW0oZix0LHIsaSxvKTtlbHNlIGlmKGY9PT1cIm9iamVjdFwiKXRocm93IHQ9XCJcIitlLEVycm9yKF8oMzEsdD09PVwiW29iamVjdCBPYmplY3RdXCI/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhlKS5qb2luKFwiLCBcIikrXCJ9XCI6dCkpO3JldHVybiBzfWZ1bmN0aW9uIHYoZSx0LHIpe2lmKGU9PW51bGwpcmV0dXJuIGU7dmFyIHU9W10sbz0wO3JldHVybiBtKGUsdSxcIlwiLFwiXCIsZnVuY3Rpb24oZil7cmV0dXJuIHQuY2FsbChyLGYsbysrKX0pLHV9ZnVuY3Rpb24gbmUoZSl7aWYoZS5fc3RhdHVzPT09LTEpe3ZhciB0PWUuX3Jlc3VsdDt0PXQoKSxlLl9zdGF0dXM9MCxlLl9yZXN1bHQ9dCx0LnRoZW4oZnVuY3Rpb24ocil7ZS5fc3RhdHVzPT09MCYmKHI9ci5kZWZhdWx0LGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD1yKX0sZnVuY3Rpb24ocil7ZS5fc3RhdHVzPT09MCYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD1yKX0pfWlmKGUuX3N0YXR1cz09PTEpcmV0dXJuIGUuX3Jlc3VsdDt0aHJvdyBlLl9yZXN1bHR9dmFyIFQ9e2N1cnJlbnQ6bnVsbH07ZnVuY3Rpb24gYSgpe3ZhciBlPVQuY3VycmVudDtpZihlPT09bnVsbCl0aHJvdyBFcnJvcihfKDMyMSkpO3JldHVybiBlfXZhciBvZT17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjpULFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOnt0cmFuc2l0aW9uOjB9LFJlYWN0Q3VycmVudE93bmVyOlIsSXNTb21lUmVuZGVyZXJBY3Rpbmc6e2N1cnJlbnQ6ITF9LGFzc2lnbjpFfTtuLkNoaWxkcmVuPXttYXA6dixmb3JFYWNoOmZ1bmN0aW9uKGUsdCxyKXt2KGUsZnVuY3Rpb24oKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scil9LGNvdW50OmZ1bmN0aW9uKGUpe3ZhciB0PTA7cmV0dXJuIHYoZSxmdW5jdGlvbigpe3QrK30pLHR9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSxmdW5jdGlvbih0KXtyZXR1cm4gdH0pfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighayhlKSl0aHJvdyBFcnJvcihfKDE0MykpO3JldHVybiBlfX07bi5Db21wb25lbnQ9ZDtuLlB1cmVDb21wb25lbnQ9UztuLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEPW9lO24uY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxyKXtpZihlPT1udWxsKXRocm93IEVycm9yKF8oMjY3LGUpKTt2YXIgdT1FKHt9LGUucHJvcHMpLG89ZS5rZXksZj1lLnJlZixzPWUuX293bmVyO2lmKHQhPW51bGwpe2lmKHQucmVmIT09dm9pZCAwJiYoZj10LnJlZixzPVIuY3VycmVudCksdC5rZXkhPT12b2lkIDAmJihvPVwiXCIrdC5rZXkpLGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgYz1lLnR5cGUuZGVmYXVsdFByb3BzO2ZvcihpIGluIHQpTS5jYWxsKHQsaSkmJiFOLmhhc093blByb3BlcnR5KGkpJiYodVtpXT10W2ldPT09dm9pZCAwJiZjIT09dm9pZCAwP2NbaV06dFtpXSl9dmFyIGk9YXJndW1lbnRzLmxlbmd0aC0yO2lmKGk9PT0xKXUuY2hpbGRyZW49cjtlbHNlIGlmKDE8aSl7Yz1BcnJheShpKTtmb3IodmFyIHA9MDtwPGk7cCsrKWNbcF09YXJndW1lbnRzW3ArMl07dS5jaGlsZHJlbj1jfXJldHVybnskJHR5cGVvZjp5LHR5cGU6ZS50eXBlLGtleTpvLHJlZjpmLHByb3BzOnUsX293bmVyOnN9fTtuLmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9bnVsbCksZT17JCR0eXBlb2Y6SSxfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6dCxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9LGUuUHJvdmlkZXI9eyQkdHlwZW9mOngsX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfTtuLmNyZWF0ZUVsZW1lbnQ9VTtuLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9VS5iaW5kKG51bGwsZSk7cmV0dXJuIHQudHlwZT1lLHR9O24uY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O24uZm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6dyxyZW5kZXI6ZX19O24uaXNWYWxpZEVsZW1lbnQ9aztuLmxhenk9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOkYsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpuZX19O24ubWVtbz1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjpBLHR5cGU6ZSxjb21wYXJlOnQ9PT12b2lkIDA/bnVsbDp0fX07bi51c2VDYWxsYmFjaz1mdW5jdGlvbihlLHQpe3JldHVybiBhKCkudXNlQ2FsbGJhY2soZSx0KX07bi51c2VDb250ZXh0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoKS51c2VDb250ZXh0KGUsdCl9O24udXNlRGVidWdWYWx1ZT1mdW5jdGlvbigpe307bi51c2VFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSgpLnVzZUVmZmVjdChlLHQpfTtuLnVzZUltcGVyYXRpdmVIYW5kbGU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhKCkudXNlSW1wZXJhdGl2ZUhhbmRsZShlLHQscil9O24udXNlTGF5b3V0RWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoKS51c2VMYXlvdXRFZmZlY3QoZSx0KX07bi51c2VNZW1vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoKS51c2VNZW1vKGUsdCl9O24udXNlUmVkdWNlcj1mdW5jdGlvbihlLHQscil7cmV0dXJuIGEoKS51c2VSZWR1Y2VyKGUsdCxyKX07bi51c2VSZWY9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoKS51c2VSZWYoZSl9O24udXNlU3RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoKS51c2VTdGF0ZShlKX07bi52ZXJzaW9uPVwiMTcuMC4yXCJ9KTt2YXIgej1nKChjZSxCKT0+e1widXNlIHN0cmljdFwiO0IuZXhwb3J0cz1WKCl9KTt2YXIgVz1iKHooKSkse0ZyYWdtZW50OnNlLFN0cmljdE1vZGU6bGUsUHJvZmlsZXI6cGUsU3VzcGVuc2U6YWUsQ2hpbGRyZW46eWUsQ29tcG9uZW50OmRlLFB1cmVDb21wb25lbnQ6X2UsX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6dmUsY2xvbmVFbGVtZW50Om1lLGNyZWF0ZUNvbnRleHQ6aGUsY3JlYXRlRWxlbWVudDpFZSxjcmVhdGVGYWN0b3J5OlNlLGNyZWF0ZVJlZjpDZSxmb3J3YXJkUmVmOlJlLGlzVmFsaWRFbGVtZW50OmtlLGxhenk6JGUsbWVtbzpnZSx1c2VDYWxsYmFjazpPZSx1c2VDb250ZXh0OlBlLHVzZURlYnVnVmFsdWU6amUsdXNlRWZmZWN0OnhlLHVzZUltcGVyYXRpdmVIYW5kbGU6SWUsdXNlTGF5b3V0RWZmZWN0OndlLHVzZU1lbW86QWUsdXNlUmVkdWNlcjpGZSx1c2VSZWY6TGUsdXNlU3RhdGU6cWUsdmVyc2lvbjpEZX09Vyx7ZGVmYXVsdDpILC4uLnVlfT1XLE1lPUghPT12b2lkIDA/SDp1ZTtleHBvcnR7eWUgYXMgQ2hpbGRyZW4sZGUgYXMgQ29tcG9uZW50LHNlIGFzIEZyYWdtZW50LHBlIGFzIFByb2ZpbGVyLF9lIGFzIFB1cmVDb21wb25lbnQsbGUgYXMgU3RyaWN0TW9kZSxhZSBhcyBTdXNwZW5zZSx2ZSBhcyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxtZSBhcyBjbG9uZUVsZW1lbnQsaGUgYXMgY3JlYXRlQ29udGV4dCxFZSBhcyBjcmVhdGVFbGVtZW50LFNlIGFzIGNyZWF0ZUZhY3RvcnksQ2UgYXMgY3JlYXRlUmVmLE1lIGFzIGRlZmF1bHQsUmUgYXMgZm9yd2FyZFJlZixrZSBhcyBpc1ZhbGlkRWxlbWVudCwkZSBhcyBsYXp5LGdlIGFzIG1lbW8sT2UgYXMgdXNlQ2FsbGJhY2ssUGUgYXMgdXNlQ29udGV4dCxqZSBhcyB1c2VEZWJ1Z1ZhbHVlLHhlIGFzIHVzZUVmZmVjdCxJZSBhcyB1c2VJbXBlcmF0aXZlSGFuZGxlLHdlIGFzIHVzZUxheW91dEVmZmVjdCxBZSBhcyB1c2VNZW1vLEZlIGFzIHVzZVJlZHVjZXIsTGUgYXMgdXNlUmVmLHFlIGFzIHVzZVN0YXRlLERlIGFzIHZlcnNpb259O1xuLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShyZWFjdC1kb21AMTcuMC4yKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydCBfX3NjaGVkdWxlciQgZnJvbSBcIi92OTYvc2NoZWR1bGVyQDAuMjAuMi9kZW5vL3NjaGVkdWxlci5qc1wiO2NvbnN0IF9fb2JqZWN0X2Fzc2lnbiQgPSBPYmplY3QuYXNzaWduO2ltcG9ydCBfX3JlYWN0JCBmcm9tIFwiL3N0YWJsZS9yZWFjdEAxNy4wLjIvZGVuby9yZWFjdC5qc1wiO3ZhciBOcz1PYmplY3QuY3JlYXRlO3ZhciBPaT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIFBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dmFyIFRzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO3ZhciBMcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsenM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgT3I9KGU9PnR5cGVvZiByZXF1aXJlPFwidVwiP3JlcXVpcmU6dHlwZW9mIFByb3h5PFwidVwiP25ldyBQcm94eShlLHtnZXQ6KG4sdCk9Pih0eXBlb2YgcmVxdWlyZTxcInVcIj9yZXF1aXJlOm4pW3RdfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8XCJ1XCIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IG5ldyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mIFwiJytlKydcIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTWk9KGUsbik9PigpPT4obnx8ZSgobj17ZXhwb3J0czp7fX0pLmV4cG9ydHMsbiksbi5leHBvcnRzKTt2YXIgT3M9KGUsbix0LHIpPT57aWYobiYmdHlwZW9mIG49PVwib2JqZWN0XCJ8fHR5cGVvZiBuPT1cImZ1bmN0aW9uXCIpZm9yKGxldCBsIG9mIFRzKG4pKSF6cy5jYWxsKGUsbCkmJmwhPT10JiZPaShlLGwse2dldDooKT0+bltsXSxlbnVtZXJhYmxlOiEocj1QcyhuLGwpKXx8ci5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBNcz0oZSxuLHQpPT4odD1lIT1udWxsP05zKExzKGUpKTp7fSxPcyhufHwhZXx8IWUuX19lc01vZHVsZT9PaSh0LFwiZGVmYXVsdFwiLHt2YWx1ZTplLGVudW1lcmFibGU6ITB9KTp0LGUpKTt2YXIgd3M9TWkoaWU9PntcInVzZSBzdHJpY3RcIjt2YXIgeXI9X19yZWFjdCQsTT1fX29iamVjdF9hc3NpZ24kLFU9X19zY2hlZHVsZXIkO2Z1bmN0aW9uIHYoZSl7Zm9yKHZhciBuPVwiaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9XCIrZSx0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyluKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1t0XSk7cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrZStcIjsgdmlzaXQgXCIrbitcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9aWYoIXlyKXRocm93IEVycm9yKHYoMjI3KSk7dmFyIFlvPW5ldyBTZXQsb3Q9e307ZnVuY3Rpb24gSmUoZSxuKXtrbihlLG4pLGtuKGUrXCJDYXB0dXJlXCIsbil9ZnVuY3Rpb24ga24oZSxuKXtmb3Iob3RbZV09bixlPTA7ZTxuLmxlbmd0aDtlKyspWW8uYWRkKG5bZV0pfXZhciB3ZT0hKHR5cGVvZiB3aW5kb3c+XCJ1XCJ8fHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ+XCJ1XCJ8fHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudD5cInVcIiksUnM9L15bOkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdWzpBLVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBdKiQvLFJpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksRGk9e30sSWk9e307ZnVuY3Rpb24gRHMoZSl7cmV0dXJuIFJpLmNhbGwoSWksZSk/ITA6UmkuY2FsbChEaSxlKT8hMTpScy50ZXN0KGUpP0lpW2VdPSEwOihEaVtlXT0hMCwhMSl9ZnVuY3Rpb24gSXMoZSxuLHQscil7aWYodCE9PW51bGwmJnQudHlwZT09PTApcmV0dXJuITE7c3dpdGNoKHR5cGVvZiBuKXtjYXNlXCJmdW5jdGlvblwiOmNhc2VcInN5bWJvbFwiOnJldHVybiEwO2Nhc2VcImJvb2xlYW5cIjpyZXR1cm4gcj8hMTp0IT09bnVsbD8hdC5hY2NlcHRzQm9vbGVhbnM6KGU9ZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSksZSE9PVwiZGF0YS1cIiYmZSE9PVwiYXJpYS1cIik7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gRnMoZSxuLHQscil7aWYobj09PW51bGx8fHR5cGVvZiBuPlwidVwifHxJcyhlLG4sdCxyKSlyZXR1cm4hMDtpZihyKXJldHVybiExO2lmKHQhPT1udWxsKXN3aXRjaCh0LnR5cGUpe2Nhc2UgMzpyZXR1cm4hbjtjYXNlIDQ6cmV0dXJuIG49PT0hMTtjYXNlIDU6cmV0dXJuIGlzTmFOKG4pO2Nhc2UgNjpyZXR1cm4gaXNOYU4obil8fDE+bn1yZXR1cm4hMX1mdW5jdGlvbiBYKGUsbix0LHIsbCxpLG8pe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPW49PT0yfHxuPT09M3x8bj09PTQsdGhpcy5hdHRyaWJ1dGVOYW1lPXIsdGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9bCx0aGlzLm11c3RVc2VQcm9wZXJ0eT10LHRoaXMucHJvcGVydHlOYW1lPWUsdGhpcy50eXBlPW4sdGhpcy5zYW5pdGl6ZVVSTD1pLHRoaXMucmVtb3ZlRW1wdHlTdHJpbmc9b312YXIgSD17fTtcImNoaWxkcmVuIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGRlZmF1bHRWYWx1ZSBkZWZhdWx0Q2hlY2tlZCBpbm5lckhUTUwgc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZyBzdHlsZVwiLnNwbGl0KFwiIFwiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0hbZV09bmV3IFgoZSwwLCExLGUsbnVsbCwhMSwhMSl9KTtbW1wiYWNjZXB0Q2hhcnNldFwiLFwiYWNjZXB0LWNoYXJzZXRcIl0sW1wiY2xhc3NOYW1lXCIsXCJjbGFzc1wiXSxbXCJodG1sRm9yXCIsXCJmb3JcIl0sW1wiaHR0cEVxdWl2XCIsXCJodHRwLWVxdWl2XCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWVbMF07SFtuXT1uZXcgWChuLDEsITEsZVsxXSxudWxsLCExLCExKX0pO1tcImNvbnRlbnRFZGl0YWJsZVwiLFwiZHJhZ2dhYmxlXCIsXCJzcGVsbENoZWNrXCIsXCJ2YWx1ZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0hbZV09bmV3IFgoZSwyLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO1tcImF1dG9SZXZlcnNlXCIsXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCIsXCJmb2N1c2FibGVcIixcInByZXNlcnZlQWxwaGFcIl0uZm9yRWFjaChmdW5jdGlvbihlKXtIW2VdPW5ldyBYKGUsMiwhMSxlLG51bGwsITEsITEpfSk7XCJhbGxvd0Z1bGxTY3JlZW4gYXN5bmMgYXV0b0ZvY3VzIGF1dG9QbGF5IGNvbnRyb2xzIGRlZmF1bHQgZGVmZXIgZGlzYWJsZWQgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUgZGlzYWJsZVJlbW90ZVBsYXliYWNrIGZvcm1Ob1ZhbGlkYXRlIGhpZGRlbiBsb29wIG5vTW9kdWxlIG5vVmFsaWRhdGUgb3BlbiBwbGF5c0lubGluZSByZWFkT25seSByZXF1aXJlZCByZXZlcnNlZCBzY29wZWQgc2VhbWxlc3MgaXRlbVNjb3BlXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oZSl7SFtlXT1uZXcgWChlLDMsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7W1wiY2hlY2tlZFwiLFwibXVsdGlwbGVcIixcIm11dGVkXCIsXCJzZWxlY3RlZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0hbZV09bmV3IFgoZSwzLCEwLGUsbnVsbCwhMSwhMSl9KTtbXCJjYXB0dXJlXCIsXCJkb3dubG9hZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0hbZV09bmV3IFgoZSw0LCExLGUsbnVsbCwhMSwhMSl9KTtbXCJjb2xzXCIsXCJyb3dzXCIsXCJzaXplXCIsXCJzcGFuXCJdLmZvckVhY2goZnVuY3Rpb24oZSl7SFtlXT1uZXcgWChlLDYsITEsZSxudWxsLCExLCExKX0pO1tcInJvd1NwYW5cIixcInN0YXJ0XCJdLmZvckVhY2goZnVuY3Rpb24oZSl7SFtlXT1uZXcgWChlLDUsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7dmFyIEJsPS9bXFwtOl0oW2Etel0pL2c7ZnVuY3Rpb24gSGwoZSl7cmV0dXJuIGVbMV0udG9VcHBlckNhc2UoKX1cImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0XCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXBsYWNlKEJsLEhsKTtIW25dPW5ldyBYKG4sMSwhMSxlLG51bGwsITEsITEpfSk7XCJ4bGluazphY3R1YXRlIHhsaW5rOmFyY3JvbGUgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGVcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1lLnJlcGxhY2UoQmwsSGwpO0hbbl09bmV3IFgobiwxLCExLGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsITEsITEpfSk7W1wieG1sOmJhc2VcIixcInhtbDpsYW5nXCIsXCJ4bWw6c3BhY2VcIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1lLnJlcGxhY2UoQmwsSGwpO0hbbl09bmV3IFgobiwxLCExLGUsXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIiwhMSwhMSl9KTtbXCJ0YWJJbmRleFwiLFwiY3Jvc3NPcmlnaW5cIl0uZm9yRWFjaChmdW5jdGlvbihlKXtIW2VdPW5ldyBYKGUsMSwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtILnhsaW5rSHJlZj1uZXcgWChcInhsaW5rSHJlZlwiLDEsITEsXCJ4bGluazpocmVmXCIsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsITAsITEpO1tcInNyY1wiLFwiaHJlZlwiLFwiYWN0aW9uXCIsXCJmb3JtQWN0aW9uXCJdLmZvckVhY2goZnVuY3Rpb24oZSl7SFtlXT1uZXcgWChlLDEsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITAsITApfSk7ZnVuY3Rpb24gV2woZSxuLHQscil7dmFyIGw9SC5oYXNPd25Qcm9wZXJ0eShuKT9IW25dOm51bGwsaT1sIT09bnVsbD9sLnR5cGU9PT0wOnI/ITE6ISghKDI8bi5sZW5ndGgpfHxuWzBdIT09XCJvXCImJm5bMF0hPT1cIk9cInx8blsxXSE9PVwiblwiJiZuWzFdIT09XCJOXCIpO2l8fChGcyhuLHQsbCxyKSYmKHQ9bnVsbCkscnx8bD09PW51bGw/RHMobikmJih0PT09bnVsbD9lLnJlbW92ZUF0dHJpYnV0ZShuKTplLnNldEF0dHJpYnV0ZShuLFwiXCIrdCkpOmwubXVzdFVzZVByb3BlcnR5P2VbbC5wcm9wZXJ0eU5hbWVdPXQ9PT1udWxsP2wudHlwZT09PTM/ITE6XCJcIjp0OihuPWwuYXR0cmlidXRlTmFtZSxyPWwuYXR0cmlidXRlTmFtZXNwYWNlLHQ9PT1udWxsP2UucmVtb3ZlQXR0cmlidXRlKG4pOihsPWwudHlwZSx0PWw9PT0zfHxsPT09NCYmdD09PSEwP1wiXCI6XCJcIit0LHI/ZS5zZXRBdHRyaWJ1dGVOUyhyLG4sdCk6ZS5zZXRBdHRyaWJ1dGUobix0KSkpKX12YXIgcWU9eXIuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsQW49NjAxMDMsV2U9NjAxMDYsa2U9NjAxMDcsQWw9NjAxMDgsS249NjAxMTQsUWw9NjAxMDksJGw9NjAxMTAsZ3I9NjAxMTIsR249NjAxMTMsS3Q9NjAxMjAsd3I9NjAxMTUsWWw9NjAxMTYsWGw9NjAxMjEsS2w9NjAxMjgsWG89NjAxMjksR2w9NjAxMzAsZWw9NjAxMzE7dHlwZW9mIFN5bWJvbD09XCJmdW5jdGlvblwiJiZTeW1ib2wuZm9yJiYoRj1TeW1ib2wuZm9yLEFuPUYoXCJyZWFjdC5lbGVtZW50XCIpLFdlPUYoXCJyZWFjdC5wb3J0YWxcIiksa2U9RihcInJlYWN0LmZyYWdtZW50XCIpLEFsPUYoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxLbj1GKFwicmVhY3QucHJvZmlsZXJcIiksUWw9RihcInJlYWN0LnByb3ZpZGVyXCIpLCRsPUYoXCJyZWFjdC5jb250ZXh0XCIpLGdyPUYoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxHbj1GKFwicmVhY3Quc3VzcGVuc2VcIiksS3Q9RihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksd3I9RihcInJlYWN0Lm1lbW9cIiksWWw9RihcInJlYWN0LmxhenlcIiksWGw9RihcInJlYWN0LmJsb2NrXCIpLEYoXCJyZWFjdC5zY29wZVwiKSxLbD1GKFwicmVhY3Qub3BhcXVlLmlkXCIpLFhvPUYoXCJyZWFjdC5kZWJ1Z190cmFjZV9tb2RlXCIpLEdsPUYoXCJyZWFjdC5vZmZzY3JlZW5cIiksZWw9RihcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIikpO3ZhciBGLEZpPXR5cGVvZiBTeW1ib2w9PVwiZnVuY3Rpb25cIiYmU3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIE9uKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPVwib2JqZWN0XCI/bnVsbDooZT1GaSYmZVtGaV18fGVbXCJAQGl0ZXJhdG9yXCJdLHR5cGVvZiBlPT1cImZ1bmN0aW9uXCI/ZTpudWxsKX12YXIgTXI7ZnVuY3Rpb24gUW4oZSl7aWYoTXI9PT12b2lkIDApdHJ5e3Rocm93IEVycm9yKCl9Y2F0Y2godCl7dmFyIG49dC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtNcj1uJiZuWzFdfHxcIlwifXJldHVybmBcbmArTXIrZX12YXIgUnI9ITE7ZnVuY3Rpb24gX3QoZSxuKXtpZighZXx8UnIpcmV0dXJuXCJcIjtScj0hMDt2YXIgdD1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT12b2lkIDA7dHJ5e2lmKG4paWYobj1mdW5jdGlvbigpe3Rocm93IEVycm9yKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcInByb3BzXCIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PVwib2JqZWN0XCImJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QobixbXSl9Y2F0Y2gocyl7dmFyIHI9c31SZWZsZWN0LmNvbnN0cnVjdChlLFtdLG4pfWVsc2V7dHJ5e24uY2FsbCgpfWNhdGNoKHMpe3I9c31lLmNhbGwobi5wcm90b3R5cGUpfWVsc2V7dHJ5e3Rocm93IEVycm9yKCl9Y2F0Y2gocyl7cj1zfWUoKX19Y2F0Y2gocyl7aWYocyYmciYmdHlwZW9mIHMuc3RhY2s9PVwic3RyaW5nXCIpe2Zvcih2YXIgbD1zLnN0YWNrLnNwbGl0KGBcbmApLGk9ci5zdGFjay5zcGxpdChgXG5gKSxvPWwubGVuZ3RoLTEsdT1pLmxlbmd0aC0xOzE8PW8mJjA8PXUmJmxbb10hPT1pW3VdOyl1LS07Zm9yKDsxPD1vJiYwPD11O28tLSx1LS0paWYobFtvXSE9PWlbdV0pe2lmKG8hPT0xfHx1IT09MSlkbyBpZihvLS0sdS0tLDA+dXx8bFtvXSE9PWlbdV0pcmV0dXJuYFxuYCtsW29dLnJlcGxhY2UoXCIgYXQgbmV3IFwiLFwiIGF0IFwiKTt3aGlsZSgxPD1vJiYwPD11KTticmVha319fWZpbmFsbHl7UnI9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9dH1yZXR1cm4oZT1lP2UuZGlzcGxheU5hbWV8fGUubmFtZTpcIlwiKT9RbihlKTpcIlwifWZ1bmN0aW9uIGpzKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSA1OnJldHVybiBRbihlLnR5cGUpO2Nhc2UgMTY6cmV0dXJuIFFuKFwiTGF6eVwiKTtjYXNlIDEzOnJldHVybiBRbihcIlN1c3BlbnNlXCIpO2Nhc2UgMTk6cmV0dXJuIFFuKFwiU3VzcGVuc2VMaXN0XCIpO2Nhc2UgMDpjYXNlIDI6Y2FzZSAxNTpyZXR1cm4gZT1fdChlLnR5cGUsITEpLGU7Y2FzZSAxMTpyZXR1cm4gZT1fdChlLnR5cGUucmVuZGVyLCExKSxlO2Nhc2UgMjI6cmV0dXJuIGU9X3QoZS50eXBlLl9yZW5kZXIsITEpLGU7Y2FzZSAxOnJldHVybiBlPV90KGUudHlwZSwhMCksZTtkZWZhdWx0OnJldHVyblwiXCJ9fWZ1bmN0aW9uIGRuKGUpe2lmKGU9PW51bGwpcmV0dXJuIG51bGw7aWYodHlwZW9mIGU9PVwiZnVuY3Rpb25cIilyZXR1cm4gZS5kaXNwbGF5TmFtZXx8ZS5uYW1lfHxudWxsO2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIGtlOnJldHVyblwiRnJhZ21lbnRcIjtjYXNlIFdlOnJldHVyblwiUG9ydGFsXCI7Y2FzZSBLbjpyZXR1cm5cIlByb2ZpbGVyXCI7Y2FzZSBBbDpyZXR1cm5cIlN0cmljdE1vZGVcIjtjYXNlIEduOnJldHVyblwiU3VzcGVuc2VcIjtjYXNlIEt0OnJldHVyblwiU3VzcGVuc2VMaXN0XCJ9aWYodHlwZW9mIGU9PVwib2JqZWN0XCIpc3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgJGw6cmV0dXJuKGUuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Db25zdW1lclwiO2Nhc2UgUWw6cmV0dXJuKGUuX2NvbnRleHQuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Qcm92aWRlclwiO2Nhc2UgZ3I6dmFyIG49ZS5yZW5kZXI7cmV0dXJuIG49bi5kaXNwbGF5TmFtZXx8bi5uYW1lfHxcIlwiLGUuZGlzcGxheU5hbWV8fChuIT09XCJcIj9cIkZvcndhcmRSZWYoXCIrbitcIilcIjpcIkZvcndhcmRSZWZcIik7Y2FzZSB3cjpyZXR1cm4gZG4oZS50eXBlKTtjYXNlIFhsOnJldHVybiBkbihlLl9yZW5kZXIpO2Nhc2UgWWw6bj1lLl9wYXlsb2FkLGU9ZS5faW5pdDt0cnl7cmV0dXJuIGRuKGUobikpfWNhdGNoe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gRGUoZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlXCJib29sZWFuXCI6Y2FzZVwibnVtYmVyXCI6Y2FzZVwib2JqZWN0XCI6Y2FzZVwic3RyaW5nXCI6Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm5cIlwifX1mdW5jdGlvbiBLbyhlKXt2YXIgbj1lLnR5cGU7cmV0dXJuKGU9ZS5ub2RlTmFtZSkmJmUudG9Mb3dlckNhc2UoKT09PVwiaW5wdXRcIiYmKG49PT1cImNoZWNrYm94XCJ8fG49PT1cInJhZGlvXCIpfWZ1bmN0aW9uIFVzKGUpe3ZhciBuPUtvKGUpP1wiY2hlY2tlZFwiOlwidmFsdWVcIix0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsbikscj1cIlwiK2Vbbl07aWYoIWUuaGFzT3duUHJvcGVydHkobikmJnR5cGVvZiB0PFwidVwiJiZ0eXBlb2YgdC5nZXQ9PVwiZnVuY3Rpb25cIiYmdHlwZW9mIHQuc2V0PT1cImZ1bmN0aW9uXCIpe3ZhciBsPXQuZ2V0LGk9dC5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24obyl7cj1cIlwiK28saS5jYWxsKHRoaXMsbyl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTp0LmVudW1lcmFibGV9KSx7Z2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sc2V0VmFsdWU6ZnVuY3Rpb24obyl7cj1cIlwiK299LHN0b3BUcmFja2luZzpmdW5jdGlvbigpe2UuX3ZhbHVlVHJhY2tlcj1udWxsLGRlbGV0ZSBlW25dfX19fWZ1bmN0aW9uIE50KGUpe2UuX3ZhbHVlVHJhY2tlcnx8KGUuX3ZhbHVlVHJhY2tlcj1VcyhlKSl9ZnVuY3Rpb24gR28oZSl7aWYoIWUpcmV0dXJuITE7dmFyIG49ZS5fdmFsdWVUcmFja2VyO2lmKCFuKXJldHVybiEwO3ZhciB0PW4uZ2V0VmFsdWUoKSxyPVwiXCI7cmV0dXJuIGUmJihyPUtvKGUpP2UuY2hlY2tlZD9cInRydWVcIjpcImZhbHNlXCI6ZS52YWx1ZSksZT1yLGUhPT10PyhuLnNldFZhbHVlKGUpLCEwKTohMX1mdW5jdGlvbiBHdChlKXtpZihlPWV8fCh0eXBlb2YgZG9jdW1lbnQ8XCJ1XCI/ZG9jdW1lbnQ6dm9pZCAwKSx0eXBlb2YgZT5cInVcIilyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGUuYWN0aXZlRWxlbWVudHx8ZS5ib2R5fWNhdGNoe3JldHVybiBlLmJvZHl9fWZ1bmN0aW9uIG5sKGUsbil7dmFyIHQ9bi5jaGVja2VkO3JldHVybiBNKHt9LG4se2RlZmF1bHRDaGVja2VkOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLHZhbHVlOnZvaWQgMCxjaGVja2VkOnQ/P2UuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZH0pfWZ1bmN0aW9uIGppKGUsbil7dmFyIHQ9bi5kZWZhdWx0VmFsdWU9PW51bGw/XCJcIjpuLmRlZmF1bHRWYWx1ZSxyPW4uY2hlY2tlZCE9bnVsbD9uLmNoZWNrZWQ6bi5kZWZhdWx0Q2hlY2tlZDt0PURlKG4udmFsdWUhPW51bGw/bi52YWx1ZTp0KSxlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOnIsaW5pdGlhbFZhbHVlOnQsY29udHJvbGxlZDpuLnR5cGU9PT1cImNoZWNrYm94XCJ8fG4udHlwZT09PVwicmFkaW9cIj9uLmNoZWNrZWQhPW51bGw6bi52YWx1ZSE9bnVsbH19ZnVuY3Rpb24gWm8oZSxuKXtuPW4uY2hlY2tlZCxuIT1udWxsJiZXbChlLFwiY2hlY2tlZFwiLG4sITEpfWZ1bmN0aW9uIHRsKGUsbil7Wm8oZSxuKTt2YXIgdD1EZShuLnZhbHVlKSxyPW4udHlwZTtpZih0IT1udWxsKXI9PT1cIm51bWJlclwiPyh0PT09MCYmZS52YWx1ZT09PVwiXCJ8fGUudmFsdWUhPXQpJiYoZS52YWx1ZT1cIlwiK3QpOmUudmFsdWUhPT1cIlwiK3QmJihlLnZhbHVlPVwiXCIrdCk7ZWxzZSBpZihyPT09XCJzdWJtaXRcInx8cj09PVwicmVzZXRcIil7ZS5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtyZXR1cm59bi5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpP3JsKGUsbi50eXBlLHQpOm4uaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikmJnJsKGUsbi50eXBlLERlKG4uZGVmYXVsdFZhbHVlKSksbi5jaGVja2VkPT1udWxsJiZuLmRlZmF1bHRDaGVja2VkIT1udWxsJiYoZS5kZWZhdWx0Q2hlY2tlZD0hIW4uZGVmYXVsdENoZWNrZWQpfWZ1bmN0aW9uIFVpKGUsbix0KXtpZihuLmhhc093blByb3BlcnR5KFwidmFsdWVcIil8fG4uaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikpe3ZhciByPW4udHlwZTtpZighKHIhPT1cInN1Ym1pdFwiJiZyIT09XCJyZXNldFwifHxuLnZhbHVlIT09dm9pZCAwJiZuLnZhbHVlIT09bnVsbCkpcmV0dXJuO249XCJcIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLHR8fG49PT1lLnZhbHVlfHwoZS52YWx1ZT1uKSxlLmRlZmF1bHRWYWx1ZT1ufXQ9ZS5uYW1lLHQhPT1cIlwiJiYoZS5uYW1lPVwiXCIpLGUuZGVmYXVsdENoZWNrZWQ9ISFlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQsdCE9PVwiXCImJihlLm5hbWU9dCl9ZnVuY3Rpb24gcmwoZSxuLHQpeyhuIT09XCJudW1iZXJcInx8R3QoZS5vd25lckRvY3VtZW50KSE9PWUpJiYodD09bnVsbD9lLmRlZmF1bHRWYWx1ZT1cIlwiK2UuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWU6ZS5kZWZhdWx0VmFsdWUhPT1cIlwiK3QmJihlLmRlZmF1bHRWYWx1ZT1cIlwiK3QpKX1mdW5jdGlvbiBWcyhlKXt2YXIgbj1cIlwiO3JldHVybiB5ci5DaGlsZHJlbi5mb3JFYWNoKGUsZnVuY3Rpb24odCl7dCE9bnVsbCYmKG4rPXQpfSksbn1mdW5jdGlvbiBsbChlLG4pe3JldHVybiBlPU0oe2NoaWxkcmVuOnZvaWQgMH0sbiksKG49VnMobi5jaGlsZHJlbikpJiYoZS5jaGlsZHJlbj1uKSxlfWZ1bmN0aW9uIHBuKGUsbix0LHIpe2lmKGU9ZS5vcHRpb25zLG4pe249e307Zm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspbltcIiRcIit0W2xdXT0hMDtmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKWw9bi5oYXNPd25Qcm9wZXJ0eShcIiRcIitlW3RdLnZhbHVlKSxlW3RdLnNlbGVjdGVkIT09bCYmKGVbdF0uc2VsZWN0ZWQ9bCksbCYmciYmKGVbdF0uZGVmYXVsdFNlbGVjdGVkPSEwKX1lbHNle2Zvcih0PVwiXCIrRGUodCksbj1udWxsLGw9MDtsPGUubGVuZ3RoO2wrKyl7aWYoZVtsXS52YWx1ZT09PXQpe2VbbF0uc2VsZWN0ZWQ9ITAsciYmKGVbbF0uZGVmYXVsdFNlbGVjdGVkPSEwKTtyZXR1cm59biE9PW51bGx8fGVbbF0uZGlzYWJsZWR8fChuPWVbbF0pfW4hPT1udWxsJiYobi5zZWxlY3RlZD0hMCl9fWZ1bmN0aW9uIGlsKGUsbil7aWYobi5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCl0aHJvdyBFcnJvcih2KDkxKSk7cmV0dXJuIE0oe30sbix7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46XCJcIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlfSl9ZnVuY3Rpb24gVmkoZSxuKXt2YXIgdD1uLnZhbHVlO2lmKHQ9PW51bGwpe2lmKHQ9bi5jaGlsZHJlbixuPW4uZGVmYXVsdFZhbHVlLHQhPW51bGwpe2lmKG4hPW51bGwpdGhyb3cgRXJyb3Iodig5MikpO2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKCEoMT49dC5sZW5ndGgpKXRocm93IEVycm9yKHYoOTMpKTt0PXRbMF19bj10fW49PW51bGwmJihuPVwiXCIpLHQ9bn1lLl93cmFwcGVyU3RhdGU9e2luaXRpYWxWYWx1ZTpEZSh0KX19ZnVuY3Rpb24gSm8oZSxuKXt2YXIgdD1EZShuLnZhbHVlKSxyPURlKG4uZGVmYXVsdFZhbHVlKTt0IT1udWxsJiYodD1cIlwiK3QsdCE9PWUudmFsdWUmJihlLnZhbHVlPXQpLG4uZGVmYXVsdFZhbHVlPT1udWxsJiZlLmRlZmF1bHRWYWx1ZSE9PXQmJihlLmRlZmF1bHRWYWx1ZT10KSksciE9bnVsbCYmKGUuZGVmYXVsdFZhbHVlPVwiXCIrcil9ZnVuY3Rpb24gQmkoZSl7dmFyIG49ZS50ZXh0Q29udGVudDtuPT09ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSYmbiE9PVwiXCImJm4hPT1udWxsJiYoZS52YWx1ZT1uKX12YXIgb2w9e2h0bWw6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIsbWF0aG1sOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLHN2ZzpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9O2Z1bmN0aW9uIHFvKGUpe3N3aXRjaChlKXtjYXNlXCJzdmdcIjpyZXR1cm5cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7Y2FzZVwibWF0aFwiOnJldHVyblwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiO2RlZmF1bHQ6cmV0dXJuXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCJ9fWZ1bmN0aW9uIHVsKGUsbil7cmV0dXJuIGU9PW51bGx8fGU9PT1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj9xbyhuKTplPT09XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiJiZuPT09XCJmb3JlaWduT2JqZWN0XCI/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6ZX12YXIgUHQsYm89ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBNU0FwcDxcInVcIiYmTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24/ZnVuY3Rpb24obix0LHIsbCl7TVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gZShuLHQscixsKX0pfTplfShmdW5jdGlvbihlLG4pe2lmKGUubmFtZXNwYWNlVVJJIT09b2wuc3ZnfHxcImlubmVySFRNTFwiaW4gZSllLmlubmVySFRNTD1uO2Vsc2V7Zm9yKFB0PVB0fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFB0LmlubmVySFRNTD1cIjxzdmc+XCIrbi52YWx1ZU9mKCkudG9TdHJpbmcoKStcIjwvc3ZnPlwiLG49UHQuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO24uZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZChuLmZpcnN0Q2hpbGQpfX0pO2Z1bmN0aW9uIHV0KGUsbil7aWYobil7dmFyIHQ9ZS5maXJzdENoaWxkO2lmKHQmJnQ9PT1lLmxhc3RDaGlsZCYmdC5ub2RlVHlwZT09PTMpe3Qubm9kZVZhbHVlPW47cmV0dXJufX1lLnRleHRDb250ZW50PW59dmFyIFpuPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxCcz1bXCJXZWJraXRcIixcIm1zXCIsXCJNb3pcIixcIk9cIl07T2JqZWN0LmtleXMoWm4pLmZvckVhY2goZnVuY3Rpb24oZSl7QnMuZm9yRWFjaChmdW5jdGlvbihuKXtuPW4rZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnN1YnN0cmluZygxKSxabltuXT1abltlXX0pfSk7ZnVuY3Rpb24gZXUoZSxuLHQpe3JldHVybiBuPT1udWxsfHx0eXBlb2Ygbj09XCJib29sZWFuXCJ8fG49PT1cIlwiP1wiXCI6dHx8dHlwZW9mIG4hPVwibnVtYmVyXCJ8fG49PT0wfHxabi5oYXNPd25Qcm9wZXJ0eShlKSYmWm5bZV0/KFwiXCIrbikudHJpbSgpOm4rXCJweFwifWZ1bmN0aW9uIG51KGUsbil7ZT1lLnN0eWxlO2Zvcih2YXIgdCBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkodCkpe3ZhciByPXQuaW5kZXhPZihcIi0tXCIpPT09MCxsPWV1KHQsblt0XSxyKTt0PT09XCJmbG9hdFwiJiYodD1cImNzc0Zsb2F0XCIpLHI/ZS5zZXRQcm9wZXJ0eSh0LGwpOmVbdF09bH19dmFyIEhzPU0oe21lbnVpdGVtOiEwfSx7YXJlYTohMCxiYXNlOiEwLGJyOiEwLGNvbDohMCxlbWJlZDohMCxocjohMCxpbWc6ITAsaW5wdXQ6ITAsa2V5Z2VuOiEwLGxpbms6ITAsbWV0YTohMCxwYXJhbTohMCxzb3VyY2U6ITAsdHJhY2s6ITAsd2JyOiEwfSk7ZnVuY3Rpb24gc2woZSxuKXtpZihuKXtpZihIc1tlXSYmKG4uY2hpbGRyZW4hPW51bGx8fG4uZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpKXRocm93IEVycm9yKHYoMTM3LGUpKTtpZihuLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT1udWxsKXtpZihuLmNoaWxkcmVuIT1udWxsKXRocm93IEVycm9yKHYoNjApKTtpZighKHR5cGVvZiBuLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPT1cIm9iamVjdFwiJiZcIl9faHRtbFwiaW4gbi5kYW5nZXJvdXNseVNldElubmVySFRNTCkpdGhyb3cgRXJyb3Iodig2MSkpfWlmKG4uc3R5bGUhPW51bGwmJnR5cGVvZiBuLnN0eWxlIT1cIm9iamVjdFwiKXRocm93IEVycm9yKHYoNjIpKX19ZnVuY3Rpb24gYWwoZSxuKXtpZihlLmluZGV4T2YoXCItXCIpPT09LTEpcmV0dXJuIHR5cGVvZiBuLmlzPT1cInN0cmluZ1wiO3N3aXRjaChlKXtjYXNlXCJhbm5vdGF0aW9uLXhtbFwiOmNhc2VcImNvbG9yLXByb2ZpbGVcIjpjYXNlXCJmb250LWZhY2VcIjpjYXNlXCJmb250LWZhY2Utc3JjXCI6Y2FzZVwiZm9udC1mYWNlLXVyaVwiOmNhc2VcImZvbnQtZmFjZS1mb3JtYXRcIjpjYXNlXCJmb250LWZhY2UtbmFtZVwiOmNhc2VcIm1pc3NpbmctZ2x5cGhcIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1mdW5jdGlvbiBabChlKXtyZXR1cm4gZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3csZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGU9ZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksZS5ub2RlVHlwZT09PTM/ZS5wYXJlbnROb2RlOmV9dmFyIGZsPW51bGwsbW49bnVsbCxobj1udWxsO2Z1bmN0aW9uIEhpKGUpe2lmKGU9RXQoZSkpe2lmKHR5cGVvZiBmbCE9XCJmdW5jdGlvblwiKXRocm93IEVycm9yKHYoMjgwKSk7dmFyIG49ZS5zdGF0ZU5vZGU7biYmKG49X3IobiksZmwoZS5zdGF0ZU5vZGUsZS50eXBlLG4pKX19ZnVuY3Rpb24gdHUoZSl7bW4/aG4/aG4ucHVzaChlKTpobj1bZV06bW49ZX1mdW5jdGlvbiBydSgpe2lmKG1uKXt2YXIgZT1tbixuPWhuO2lmKGhuPW1uPW51bGwsSGkoZSksbilmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKUhpKG5bZV0pfX1mdW5jdGlvbiBKbChlLG4pe3JldHVybiBlKG4pfWZ1bmN0aW9uIGx1KGUsbix0LHIsbCl7cmV0dXJuIGUobix0LHIsbCl9ZnVuY3Rpb24gcWwoKXt9dmFyIGl1PUpsLEFlPSExLERyPSExO2Z1bmN0aW9uIGJsKCl7KG1uIT09bnVsbHx8aG4hPT1udWxsKSYmKHFsKCkscnUoKSl9ZnVuY3Rpb24gV3MoZSxuLHQpe2lmKERyKXJldHVybiBlKG4sdCk7RHI9ITA7dHJ5e3JldHVybiBpdShlLG4sdCl9ZmluYWxseXtEcj0hMSxibCgpfX1mdW5jdGlvbiBzdChlLG4pe3ZhciB0PWUuc3RhdGVOb2RlO2lmKHQ9PT1udWxsKXJldHVybiBudWxsO3ZhciByPV9yKHQpO2lmKHI9PT1udWxsKXJldHVybiBudWxsO3Q9cltuXTtlOnN3aXRjaChuKXtjYXNlXCJvbkNsaWNrXCI6Y2FzZVwib25DbGlja0NhcHR1cmVcIjpjYXNlXCJvbkRvdWJsZUNsaWNrXCI6Y2FzZVwib25Eb3VibGVDbGlja0NhcHR1cmVcIjpjYXNlXCJvbk1vdXNlRG93blwiOmNhc2VcIm9uTW91c2VEb3duQ2FwdHVyZVwiOmNhc2VcIm9uTW91c2VNb3ZlXCI6Y2FzZVwib25Nb3VzZU1vdmVDYXB0dXJlXCI6Y2FzZVwib25Nb3VzZVVwXCI6Y2FzZVwib25Nb3VzZVVwQ2FwdHVyZVwiOmNhc2VcIm9uTW91c2VFbnRlclwiOihyPSFyLmRpc2FibGVkKXx8KGU9ZS50eXBlLHI9IShlPT09XCJidXR0b25cInx8ZT09PVwiaW5wdXRcInx8ZT09PVwic2VsZWN0XCJ8fGU9PT1cInRleHRhcmVhXCIpKSxlPSFyO2JyZWFrIGU7ZGVmYXVsdDplPSExfWlmKGUpcmV0dXJuIG51bGw7aWYodCYmdHlwZW9mIHQhPVwiZnVuY3Rpb25cIil0aHJvdyBFcnJvcih2KDIzMSxuLHR5cGVvZiB0KSk7cmV0dXJuIHR9dmFyIGNsPSExO2lmKHdlKXRyeXtubj17fSxPYmplY3QuZGVmaW5lUHJvcGVydHkobm4sXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe2NsPSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLG5uLG5uKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIixubixubil9Y2F0Y2h7Y2w9ITF9dmFyIG5uO2Z1bmN0aW9uIEFzKGUsbix0LHIsbCxpLG8sdSxzKXt2YXIgZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMyk7dHJ5e24uYXBwbHkodCxkKX1jYXRjaCh5KXt0aGlzLm9uRXJyb3IoeSl9fXZhciBKbj0hMSxadD1udWxsLEp0PSExLGRsPW51bGwsUXM9e29uRXJyb3I6ZnVuY3Rpb24oZSl7Sm49ITAsWnQ9ZX19O2Z1bmN0aW9uICRzKGUsbix0LHIsbCxpLG8sdSxzKXtKbj0hMSxadD1udWxsLEFzLmFwcGx5KFFzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWXMoZSxuLHQscixsLGksbyx1LHMpe2lmKCRzLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxKbil7aWYoSm4pe3ZhciBkPVp0O0puPSExLFp0PW51bGx9ZWxzZSB0aHJvdyBFcnJvcih2KDE5OCkpO0p0fHwoSnQ9ITAsZGw9ZCl9fWZ1bmN0aW9uIGJlKGUpe3ZhciBuPWUsdD1lO2lmKGUuYWx0ZXJuYXRlKWZvcig7bi5yZXR1cm47KW49bi5yZXR1cm47ZWxzZXtlPW47ZG8gbj1lLChuLmZsYWdzJjEwMjYpIT09MCYmKHQ9bi5yZXR1cm4pLGU9bi5yZXR1cm47d2hpbGUoZSl9cmV0dXJuIG4udGFnPT09Mz90Om51bGx9ZnVuY3Rpb24gb3UoZSl7aWYoZS50YWc9PT0xMyl7dmFyIG49ZS5tZW1vaXplZFN0YXRlO2lmKG49PT1udWxsJiYoZT1lLmFsdGVybmF0ZSxlIT09bnVsbCYmKG49ZS5tZW1vaXplZFN0YXRlKSksbiE9PW51bGwpcmV0dXJuIG4uZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBXaShlKXtpZihiZShlKSE9PWUpdGhyb3cgRXJyb3IodigxODgpKX1mdW5jdGlvbiBYcyhlKXt2YXIgbj1lLmFsdGVybmF0ZTtpZighbil7aWYobj1iZShlKSxuPT09bnVsbCl0aHJvdyBFcnJvcih2KDE4OCkpO3JldHVybiBuIT09ZT9udWxsOmV9Zm9yKHZhciB0PWUscj1uOzspe3ZhciBsPXQucmV0dXJuO2lmKGw9PT1udWxsKWJyZWFrO3ZhciBpPWwuYWx0ZXJuYXRlO2lmKGk9PT1udWxsKXtpZihyPWwucmV0dXJuLHIhPT1udWxsKXt0PXI7Y29udGludWV9YnJlYWt9aWYobC5jaGlsZD09PWkuY2hpbGQpe2ZvcihpPWwuY2hpbGQ7aTspe2lmKGk9PT10KXJldHVybiBXaShsKSxlO2lmKGk9PT1yKXJldHVybiBXaShsKSxuO2k9aS5zaWJsaW5nfXRocm93IEVycm9yKHYoMTg4KSl9aWYodC5yZXR1cm4hPT1yLnJldHVybil0PWwscj1pO2Vsc2V7Zm9yKHZhciBvPSExLHU9bC5jaGlsZDt1Oyl7aWYodT09PXQpe289ITAsdD1sLHI9aTticmVha31pZih1PT09cil7bz0hMCxyPWwsdD1pO2JyZWFrfXU9dS5zaWJsaW5nfWlmKCFvKXtmb3IodT1pLmNoaWxkO3U7KXtpZih1PT09dCl7bz0hMCx0PWkscj1sO2JyZWFrfWlmKHU9PT1yKXtvPSEwLHI9aSx0PWw7YnJlYWt9dT11LnNpYmxpbmd9aWYoIW8pdGhyb3cgRXJyb3IodigxODkpKX19aWYodC5hbHRlcm5hdGUhPT1yKXRocm93IEVycm9yKHYoMTkwKSl9aWYodC50YWchPT0zKXRocm93IEVycm9yKHYoMTg4KSk7cmV0dXJuIHQuc3RhdGVOb2RlLmN1cnJlbnQ9PT10P2U6bn1mdW5jdGlvbiB1dShlKXtpZihlPVhzKGUpLCFlKXJldHVybiBudWxsO2Zvcih2YXIgbj1lOzspe2lmKG4udGFnPT09NXx8bi50YWc9PT02KXJldHVybiBuO2lmKG4uY2hpbGQpbi5jaGlsZC5yZXR1cm49bixuPW4uY2hpbGQ7ZWxzZXtpZihuPT09ZSlicmVhaztmb3IoOyFuLnNpYmxpbmc7KXtpZighbi5yZXR1cm58fG4ucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9fXJldHVybiBudWxsfWZ1bmN0aW9uIEFpKGUsbil7Zm9yKHZhciB0PWUuYWx0ZXJuYXRlO24hPT1udWxsOyl7aWYobj09PWV8fG49PT10KXJldHVybiEwO249bi5yZXR1cm59cmV0dXJuITF9dmFyIHN1LGVpLGF1LGZ1LHBsPSExLHNlPVtdLE5lPW51bGwsUGU9bnVsbCxUZT1udWxsLGF0PW5ldyBNYXAsZnQ9bmV3IE1hcCxNbj1bXSxRaT1cIm1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNvcHkgY3V0IHBhc3RlIGNsaWNrIGNoYW5nZSBjb250ZXh0bWVudSByZXNldCBzdWJtaXRcIi5zcGxpdChcIiBcIik7ZnVuY3Rpb24gbWwoZSxuLHQscixsKXtyZXR1cm57YmxvY2tlZE9uOmUsZG9tRXZlbnROYW1lOm4sZXZlbnRTeXN0ZW1GbGFnczp0fDE2LG5hdGl2ZUV2ZW50OmwsdGFyZ2V0Q29udGFpbmVyczpbcl19fWZ1bmN0aW9uICRpKGUsbil7c3dpdGNoKGUpe2Nhc2VcImZvY3VzaW5cIjpjYXNlXCJmb2N1c291dFwiOk5lPW51bGw7YnJlYWs7Y2FzZVwiZHJhZ2VudGVyXCI6Y2FzZVwiZHJhZ2xlYXZlXCI6UGU9bnVsbDticmVhaztjYXNlXCJtb3VzZW92ZXJcIjpjYXNlXCJtb3VzZW91dFwiOlRlPW51bGw7YnJlYWs7Y2FzZVwicG9pbnRlcm92ZXJcIjpjYXNlXCJwb2ludGVyb3V0XCI6YXQuZGVsZXRlKG4ucG9pbnRlcklkKTticmVhaztjYXNlXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2VcImxvc3Rwb2ludGVyY2FwdHVyZVwiOmZ0LmRlbGV0ZShuLnBvaW50ZXJJZCl9fWZ1bmN0aW9uIFJuKGUsbix0LHIsbCxpKXtyZXR1cm4gZT09PW51bGx8fGUubmF0aXZlRXZlbnQhPT1pPyhlPW1sKG4sdCxyLGwsaSksbiE9PW51bGwmJihuPUV0KG4pLG4hPT1udWxsJiZlaShuKSksZSk6KGUuZXZlbnRTeXN0ZW1GbGFnc3w9cixuPWUudGFyZ2V0Q29udGFpbmVycyxsIT09bnVsbCYmbi5pbmRleE9mKGwpPT09LTEmJm4ucHVzaChsKSxlKX1mdW5jdGlvbiBLcyhlLG4sdCxyLGwpe3N3aXRjaChuKXtjYXNlXCJmb2N1c2luXCI6cmV0dXJuIE5lPVJuKE5lLGUsbix0LHIsbCksITA7Y2FzZVwiZHJhZ2VudGVyXCI6cmV0dXJuIFBlPVJuKFBlLGUsbix0LHIsbCksITA7Y2FzZVwibW91c2VvdmVyXCI6cmV0dXJuIFRlPVJuKFRlLGUsbix0LHIsbCksITA7Y2FzZVwicG9pbnRlcm92ZXJcIjp2YXIgaT1sLnBvaW50ZXJJZDtyZXR1cm4gYXQuc2V0KGksUm4oYXQuZ2V0KGkpfHxudWxsLGUsbix0LHIsbCkpLCEwO2Nhc2VcImdvdHBvaW50ZXJjYXB0dXJlXCI6cmV0dXJuIGk9bC5wb2ludGVySWQsZnQuc2V0KGksUm4oZnQuZ2V0KGkpfHxudWxsLGUsbix0LHIsbCkpLCEwfXJldHVybiExfWZ1bmN0aW9uIEdzKGUpe3ZhciBuPVFlKGUudGFyZ2V0KTtpZihuIT09bnVsbCl7dmFyIHQ9YmUobik7aWYodCE9PW51bGwpe2lmKG49dC50YWcsbj09PTEzKXtpZihuPW91KHQpLG4hPT1udWxsKXtlLmJsb2NrZWRPbj1uLGZ1KGUubGFuZVByaW9yaXR5LGZ1bmN0aW9uKCl7VS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkoZS5wcmlvcml0eSxmdW5jdGlvbigpe2F1KHQpfSl9KTtyZXR1cm59fWVsc2UgaWYobj09PTMmJnQuc3RhdGVOb2RlLmh5ZHJhdGUpe2UuYmxvY2tlZE9uPXQudGFnPT09Mz90LnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBVdChlKXtpZihlLmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPWUudGFyZ2V0Q29udGFpbmVyczswPG4ubGVuZ3RoOyl7dmFyIHQ9bGkoZS5kb21FdmVudE5hbWUsZS5ldmVudFN5c3RlbUZsYWdzLG5bMF0sZS5uYXRpdmVFdmVudCk7aWYodCE9PW51bGwpcmV0dXJuIG49RXQodCksbiE9PW51bGwmJmVpKG4pLGUuYmxvY2tlZE9uPXQsITE7bi5zaGlmdCgpfXJldHVybiEwfWZ1bmN0aW9uIFlpKGUsbix0KXtVdChlKSYmdC5kZWxldGUobil9ZnVuY3Rpb24gWnMoKXtmb3IocGw9ITE7MDxzZS5sZW5ndGg7KXt2YXIgZT1zZVswXTtpZihlLmJsb2NrZWRPbiE9PW51bGwpe2U9RXQoZS5ibG9ja2VkT24pLGUhPT1udWxsJiZzdShlKTticmVha31mb3IodmFyIG49ZS50YXJnZXRDb250YWluZXJzOzA8bi5sZW5ndGg7KXt2YXIgdD1saShlLmRvbUV2ZW50TmFtZSxlLmV2ZW50U3lzdGVtRmxhZ3MsblswXSxlLm5hdGl2ZUV2ZW50KTtpZih0IT09bnVsbCl7ZS5ibG9ja2VkT249dDticmVha31uLnNoaWZ0KCl9ZS5ibG9ja2VkT249PT1udWxsJiZzZS5zaGlmdCgpfU5lIT09bnVsbCYmVXQoTmUpJiYoTmU9bnVsbCksUGUhPT1udWxsJiZVdChQZSkmJihQZT1udWxsKSxUZSE9PW51bGwmJlV0KFRlKSYmKFRlPW51bGwpLGF0LmZvckVhY2goWWkpLGZ0LmZvckVhY2goWWkpfWZ1bmN0aW9uIERuKGUsbil7ZS5ibG9ja2VkT249PT1uJiYoZS5ibG9ja2VkT249bnVsbCxwbHx8KHBsPSEwLFUudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhVLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFpzKSkpfWZ1bmN0aW9uIGN1KGUpe2Z1bmN0aW9uIG4obCl7cmV0dXJuIERuKGwsZSl9aWYoMDxzZS5sZW5ndGgpe0RuKHNlWzBdLGUpO2Zvcih2YXIgdD0xO3Q8c2UubGVuZ3RoO3QrKyl7dmFyIHI9c2VbdF07ci5ibG9ja2VkT249PT1lJiYoci5ibG9ja2VkT249bnVsbCl9fWZvcihOZSE9PW51bGwmJkRuKE5lLGUpLFBlIT09bnVsbCYmRG4oUGUsZSksVGUhPT1udWxsJiZEbihUZSxlKSxhdC5mb3JFYWNoKG4pLGZ0LmZvckVhY2gobiksdD0wO3Q8TW4ubGVuZ3RoO3QrKylyPU1uW3RdLHIuYmxvY2tlZE9uPT09ZSYmKHIuYmxvY2tlZE9uPW51bGwpO2Zvcig7MDxNbi5sZW5ndGgmJih0PU1uWzBdLHQuYmxvY2tlZE9uPT09bnVsbCk7KUdzKHQpLHQuYmxvY2tlZE9uPT09bnVsbCYmTW4uc2hpZnQoKX1mdW5jdGlvbiBUdChlLG4pe3ZhciB0PXt9O3JldHVybiB0W2UudG9Mb3dlckNhc2UoKV09bi50b0xvd2VyQ2FzZSgpLHRbXCJXZWJraXRcIitlXT1cIndlYmtpdFwiK24sdFtcIk1velwiK2VdPVwibW96XCIrbix0fXZhciBvbj17YW5pbWF0aW9uZW5kOlR0KFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25FbmRcIiksYW5pbWF0aW9uaXRlcmF0aW9uOlR0KFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25JdGVyYXRpb25cIiksYW5pbWF0aW9uc3RhcnQ6VHQoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvblN0YXJ0XCIpLHRyYW5zaXRpb25lbmQ6VHQoXCJUcmFuc2l0aW9uXCIsXCJUcmFuc2l0aW9uRW5kXCIpfSxJcj17fSxkdT17fTt3ZSYmKGR1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUsXCJBbmltYXRpb25FdmVudFwiaW4gd2luZG93fHwoZGVsZXRlIG9uLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIG9uLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIG9uLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXCJUcmFuc2l0aW9uRXZlbnRcImluIHdpbmRvd3x8ZGVsZXRlIG9uLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7ZnVuY3Rpb24gU3IoZSl7aWYoSXJbZV0pcmV0dXJuIElyW2VdO2lmKCFvbltlXSlyZXR1cm4gZTt2YXIgbj1vbltlXSx0O2Zvcih0IGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eSh0KSYmdCBpbiBkdSlyZXR1cm4gSXJbZV09blt0XTtyZXR1cm4gZX12YXIgcHU9U3IoXCJhbmltYXRpb25lbmRcIiksbXU9U3IoXCJhbmltYXRpb25pdGVyYXRpb25cIiksaHU9U3IoXCJhbmltYXRpb25zdGFydFwiKSx2dT1TcihcInRyYW5zaXRpb25lbmRcIikseXU9bmV3IE1hcCxuaT1uZXcgTWFwLEpzPVtcImFib3J0XCIsXCJhYm9ydFwiLHB1LFwiYW5pbWF0aW9uRW5kXCIsbXUsXCJhbmltYXRpb25JdGVyYXRpb25cIixodSxcImFuaW1hdGlvblN0YXJ0XCIsXCJjYW5wbGF5XCIsXCJjYW5QbGF5XCIsXCJjYW5wbGF5dGhyb3VnaFwiLFwiY2FuUGxheVRocm91Z2hcIixcImR1cmF0aW9uY2hhbmdlXCIsXCJkdXJhdGlvbkNoYW5nZVwiLFwiZW1wdGllZFwiLFwiZW1wdGllZFwiLFwiZW5jcnlwdGVkXCIsXCJlbmNyeXB0ZWRcIixcImVuZGVkXCIsXCJlbmRlZFwiLFwiZXJyb3JcIixcImVycm9yXCIsXCJnb3Rwb2ludGVyY2FwdHVyZVwiLFwiZ290UG9pbnRlckNhcHR1cmVcIixcImxvYWRcIixcImxvYWRcIixcImxvYWRlZGRhdGFcIixcImxvYWRlZERhdGFcIixcImxvYWRlZG1ldGFkYXRhXCIsXCJsb2FkZWRNZXRhZGF0YVwiLFwibG9hZHN0YXJ0XCIsXCJsb2FkU3RhcnRcIixcImxvc3Rwb2ludGVyY2FwdHVyZVwiLFwibG9zdFBvaW50ZXJDYXB0dXJlXCIsXCJwbGF5aW5nXCIsXCJwbGF5aW5nXCIsXCJwcm9ncmVzc1wiLFwicHJvZ3Jlc3NcIixcInNlZWtpbmdcIixcInNlZWtpbmdcIixcInN0YWxsZWRcIixcInN0YWxsZWRcIixcInN1c3BlbmRcIixcInN1c3BlbmRcIixcInRpbWV1cGRhdGVcIixcInRpbWVVcGRhdGVcIix2dSxcInRyYW5zaXRpb25FbmRcIixcIndhaXRpbmdcIixcIndhaXRpbmdcIl07ZnVuY3Rpb24gdGkoZSxuKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrPTIpe3ZhciByPWVbdF0sbD1lW3QrMV07bD1cIm9uXCIrKGxbMF0udG9VcHBlckNhc2UoKStsLnNsaWNlKDEpKSxuaS5zZXQocixuKSx5dS5zZXQocixsKSxKZShsLFtyXSl9fXZhciBxcz1VLnVuc3RhYmxlX25vdztxcygpO3ZhciBMPTg7ZnVuY3Rpb24gcm4oZSl7aWYoKDEmZSkhPT0wKXJldHVybiBMPTE1LDE7aWYoKDImZSkhPT0wKXJldHVybiBMPTE0LDI7aWYoKDQmZSkhPT0wKXJldHVybiBMPTEzLDQ7dmFyIG49MjQmZTtyZXR1cm4gbiE9PTA/KEw9MTIsbik6KGUmMzIpIT09MD8oTD0xMSwzMik6KG49MTkyJmUsbiE9PTA/KEw9MTAsbik6KGUmMjU2KSE9PTA/KEw9OSwyNTYpOihuPTM1ODQmZSxuIT09MD8oTD04LG4pOihlJjQwOTYpIT09MD8oTD03LDQwOTYpOihuPTQxODYxMTImZSxuIT09MD8oTD02LG4pOihuPTYyOTE0NTYwJmUsbiE9PTA/KEw9NSxuKTplJjY3MTA4ODY0PyhMPTQsNjcxMDg4NjQpOihlJjEzNDIxNzcyOCkhPT0wPyhMPTMsMTM0MjE3NzI4KToobj04MDUzMDYzNjgmZSxuIT09MD8oTD0yLG4pOigxMDczNzQxODI0JmUpIT09MD8oTD0xLDEwNzM3NDE4MjQpOihMPTgsZSkpKSkpKX1mdW5jdGlvbiBicyhlKXtzd2l0Y2goZSl7Y2FzZSA5OTpyZXR1cm4gMTU7Y2FzZSA5ODpyZXR1cm4gMTA7Y2FzZSA5NzpjYXNlIDk2OnJldHVybiA4O2Nhc2UgOTU6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gZWEoZSl7c3dpdGNoKGUpe2Nhc2UgMTU6Y2FzZSAxNDpyZXR1cm4gOTk7Y2FzZSAxMzpjYXNlIDEyOmNhc2UgMTE6Y2FzZSAxMDpyZXR1cm4gOTg7Y2FzZSA5OmNhc2UgODpjYXNlIDc6Y2FzZSA2OmNhc2UgNDpjYXNlIDU6cmV0dXJuIDk3O2Nhc2UgMzpjYXNlIDI6Y2FzZSAxOnJldHVybiA5NTtjYXNlIDA6cmV0dXJuIDkwO2RlZmF1bHQ6dGhyb3cgRXJyb3IodigzNTgsZSkpfX1mdW5jdGlvbiBjdChlLG4pe3ZhciB0PWUucGVuZGluZ0xhbmVzO2lmKHQ9PT0wKXJldHVybiBMPTA7dmFyIHI9MCxsPTAsaT1lLmV4cGlyZWRMYW5lcyxvPWUuc3VzcGVuZGVkTGFuZXMsdT1lLnBpbmdlZExhbmVzO2lmKGkhPT0wKXI9aSxsPUw9MTU7ZWxzZSBpZihpPXQmMTM0MjE3NzI3LGkhPT0wKXt2YXIgcz1pJn5vO3MhPT0wPyhyPXJuKHMpLGw9TCk6KHUmPWksdSE9PTAmJihyPXJuKHUpLGw9TCkpfWVsc2UgaT10Jn5vLGkhPT0wPyhyPXJuKGkpLGw9TCk6dSE9PTAmJihyPXJuKHUpLGw9TCk7aWYocj09PTApcmV0dXJuIDA7aWYocj0zMS1JZShyKSxyPXQmKCgwPnI/MDoxPDxyKTw8MSktMSxuIT09MCYmbiE9PXImJihuJm8pPT09MCl7aWYocm4obiksbDw9TClyZXR1cm4gbjtMPWx9aWYobj1lLmVudGFuZ2xlZExhbmVzLG4hPT0wKWZvcihlPWUuZW50YW5nbGVtZW50cyxuJj1yOzA8bjspdD0zMS1JZShuKSxsPTE8PHQscnw9ZVt0XSxuJj1+bDtyZXR1cm4gcn1mdW5jdGlvbiBndShlKXtyZXR1cm4gZT1lLnBlbmRpbmdMYW5lcyYtMTA3Mzc0MTgyNSxlIT09MD9lOmUmMTA3Mzc0MTgyND8xMDczNzQxODI0OjB9ZnVuY3Rpb24gcXQoZSxuKXtzd2l0Y2goZSl7Y2FzZSAxNTpyZXR1cm4gMTtjYXNlIDE0OnJldHVybiAyO2Nhc2UgMTI6cmV0dXJuIGU9bG4oMjQmfm4pLGU9PT0wP3F0KDEwLG4pOmU7Y2FzZSAxMDpyZXR1cm4gZT1sbigxOTImfm4pLGU9PT0wP3F0KDgsbik6ZTtjYXNlIDg6cmV0dXJuIGU9bG4oMzU4NCZ+biksZT09PTAmJihlPWxuKDQxODYxMTImfm4pLGU9PT0wJiYoZT01MTIpKSxlO2Nhc2UgMjpyZXR1cm4gbj1sbig4MDUzMDYzNjgmfm4pLG49PT0wJiYobj0yNjg0MzU0NTYpLG59dGhyb3cgRXJyb3IodigzNTgsZSkpfWZ1bmN0aW9uIGxuKGUpe3JldHVybiBlJi1lfWZ1bmN0aW9uIEZyKGUpe2Zvcih2YXIgbj1bXSx0PTA7MzE+dDt0Kyspbi5wdXNoKGUpO3JldHVybiBufWZ1bmN0aW9uIEVyKGUsbix0KXtlLnBlbmRpbmdMYW5lc3w9bjt2YXIgcj1uLTE7ZS5zdXNwZW5kZWRMYW5lcyY9cixlLnBpbmdlZExhbmVzJj1yLGU9ZS5ldmVudFRpbWVzLG49MzEtSWUobiksZVtuXT10fXZhciBJZT1NYXRoLmNsejMyP01hdGguY2x6MzI6cmEsbmE9TWF0aC5sb2csdGE9TWF0aC5MTjI7ZnVuY3Rpb24gcmEoZSl7cmV0dXJuIGU9PT0wPzMyOjMxLShuYShlKS90YXwwKXwwfXZhciBsYT1VLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LGlhPVUudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LFZ0PSEwO2Z1bmN0aW9uIG9hKGUsbix0LHIpe0FlfHxxbCgpO3ZhciBsPXJpLGk9QWU7QWU9ITA7dHJ5e2x1KGwsZSxuLHQscil9ZmluYWxseXsoQWU9aSl8fGJsKCl9fWZ1bmN0aW9uIHVhKGUsbix0LHIpe2lhKGxhLHJpLmJpbmQobnVsbCxlLG4sdCxyKSl9ZnVuY3Rpb24gcmkoZSxuLHQscil7aWYoVnQpe3ZhciBsO2lmKChsPShuJjQpPT09MCkmJjA8c2UubGVuZ3RoJiYtMTxRaS5pbmRleE9mKGUpKWU9bWwobnVsbCxlLG4sdCxyKSxzZS5wdXNoKGUpO2Vsc2V7dmFyIGk9bGkoZSxuLHQscik7aWYoaT09PW51bGwpbCYmJGkoZSxyKTtlbHNle2lmKGwpe2lmKC0xPFFpLmluZGV4T2YoZSkpe2U9bWwoaSxlLG4sdCxyKSxzZS5wdXNoKGUpO3JldHVybn1pZihLcyhpLGUsbix0LHIpKXJldHVybjskaShlLHIpfU91KGUsbixyLG51bGwsdCl9fX19ZnVuY3Rpb24gbGkoZSxuLHQscil7dmFyIGw9Wmwocik7aWYobD1RZShsKSxsIT09bnVsbCl7dmFyIGk9YmUobCk7aWYoaT09PW51bGwpbD1udWxsO2Vsc2V7dmFyIG89aS50YWc7aWYobz09PTEzKXtpZihsPW91KGkpLGwhPT1udWxsKXJldHVybiBsO2w9bnVsbH1lbHNlIGlmKG89PT0zKXtpZihpLnN0YXRlTm9kZS5oeWRyYXRlKXJldHVybiBpLnRhZz09PTM/aS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2w9bnVsbH1lbHNlIGkhPT1sJiYobD1udWxsKX19cmV0dXJuIE91KGUsbixyLGwsdCksbnVsbH12YXIgeGU9bnVsbCxpaT1udWxsLEJ0PW51bGw7ZnVuY3Rpb24gd3UoKXtpZihCdClyZXR1cm4gQnQ7dmFyIGUsbj1paSx0PW4ubGVuZ3RoLHIsbD1cInZhbHVlXCJpbiB4ZT94ZS52YWx1ZTp4ZS50ZXh0Q29udGVudCxpPWwubGVuZ3RoO2ZvcihlPTA7ZTx0JiZuW2VdPT09bFtlXTtlKyspO3ZhciBvPXQtZTtmb3Iocj0xO3I8PW8mJm5bdC1yXT09PWxbaS1yXTtyKyspO3JldHVybiBCdD1sLnNsaWNlKGUsMTxyPzEtcjp2b2lkIDApfWZ1bmN0aW9uIEh0KGUpe3ZhciBuPWUua2V5Q29kZTtyZXR1cm5cImNoYXJDb2RlXCJpbiBlPyhlPWUuY2hhckNvZGUsZT09PTAmJm49PT0xMyYmKGU9MTMpKTplPW4sZT09PTEwJiYoZT0xMyksMzI8PWV8fGU9PT0xMz9lOjB9ZnVuY3Rpb24gTHQoKXtyZXR1cm4hMH1mdW5jdGlvbiBYaSgpe3JldHVybiExfWZ1bmN0aW9uIGIoZSl7ZnVuY3Rpb24gbih0LHIsbCxpLG8pe3RoaXMuX3JlYWN0TmFtZT10LHRoaXMuX3RhcmdldEluc3Q9bCx0aGlzLnR5cGU9cix0aGlzLm5hdGl2ZUV2ZW50PWksdGhpcy50YXJnZXQ9byx0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbDtmb3IodmFyIHUgaW4gZSllLmhhc093blByb3BlcnR5KHUpJiYodD1lW3VdLHRoaXNbdV09dD90KGkpOmlbdV0pO3JldHVybiB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD0oaS5kZWZhdWx0UHJldmVudGVkIT1udWxsP2kuZGVmYXVsdFByZXZlbnRlZDppLnJldHVyblZhbHVlPT09ITEpP0x0OlhpLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9WGksdGhpc31yZXR1cm4gTShuLnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIHQ9dGhpcy5uYXRpdmVFdmVudDt0JiYodC5wcmV2ZW50RGVmYXVsdD90LnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIHQucmV0dXJuVmFsdWUhPVwidW5rbm93blwiJiYodC5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9THQpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5hdGl2ZUV2ZW50O3QmJih0LnN0b3BQcm9wYWdhdGlvbj90LnN0b3BQcm9wYWdhdGlvbigpOnR5cGVvZiB0LmNhbmNlbEJ1YmJsZSE9XCJ1bmtub3duXCImJih0LmNhbmNlbEJ1YmJsZT0hMCksdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1MdCl9LHBlcnNpc3Q6ZnVuY3Rpb24oKXt9LGlzUGVyc2lzdGVudDpMdH0pLG59dmFyIE5uPXtldmVudFBoYXNlOjAsYnViYmxlczowLGNhbmNlbGFibGU6MCx0aW1lU3RhbXA6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGltZVN0YW1wfHxEYXRlLm5vdygpfSxkZWZhdWx0UHJldmVudGVkOjAsaXNUcnVzdGVkOjB9LG9pPWIoTm4pLFN0PU0oe30sTm4se3ZpZXc6MCxkZXRhaWw6MH0pLHNhPWIoU3QpLGpyLFVyLEluLGtyPU0oe30sU3Qse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6dWksYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldD09PXZvaWQgMD9lLmZyb21FbGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQ6ZS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oZSl7cmV0dXJuXCJtb3ZlbWVudFhcImluIGU/ZS5tb3ZlbWVudFg6KGUhPT1JbiYmKEluJiZlLnR5cGU9PT1cIm1vdXNlbW92ZVwiPyhqcj1lLnNjcmVlblgtSW4uc2NyZWVuWCxVcj1lLnNjcmVlblktSW4uc2NyZWVuWSk6VXI9anI9MCxJbj1lKSxqcil9LG1vdmVtZW50WTpmdW5jdGlvbihlKXtyZXR1cm5cIm1vdmVtZW50WVwiaW4gZT9lLm1vdmVtZW50WTpVcn19KSxLaT1iKGtyKSxhYT1NKHt9LGtyLHtkYXRhVHJhbnNmZXI6MH0pLGZhPWIoYWEpLGNhPU0oe30sU3Qse3JlbGF0ZWRUYXJnZXQ6MH0pLFZyPWIoY2EpLGRhPU0oe30sTm4se2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLHBhPWIoZGEpLG1hPU0oe30sTm4se2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuXCJjbGlwYm9hcmREYXRhXCJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxoYT1iKG1hKSx2YT1NKHt9LE5uLHtkYXRhOjB9KSxHaT1iKHZhKSx5YT17RXNjOlwiRXNjYXBlXCIsU3BhY2ViYXI6XCIgXCIsTGVmdDpcIkFycm93TGVmdFwiLFVwOlwiQXJyb3dVcFwiLFJpZ2h0OlwiQXJyb3dSaWdodFwiLERvd246XCJBcnJvd0Rvd25cIixEZWw6XCJEZWxldGVcIixXaW46XCJPU1wiLE1lbnU6XCJDb250ZXh0TWVudVwiLEFwcHM6XCJDb250ZXh0TWVudVwiLFNjcm9sbDpcIlNjcm9sbExvY2tcIixNb3pQcmludGFibGVLZXk6XCJVbmlkZW50aWZpZWRcIn0sZ2E9ezg6XCJCYWNrc3BhY2VcIiw5OlwiVGFiXCIsMTI6XCJDbGVhclwiLDEzOlwiRW50ZXJcIiwxNjpcIlNoaWZ0XCIsMTc6XCJDb250cm9sXCIsMTg6XCJBbHRcIiwxOTpcIlBhdXNlXCIsMjA6XCJDYXBzTG9ja1wiLDI3OlwiRXNjYXBlXCIsMzI6XCIgXCIsMzM6XCJQYWdlVXBcIiwzNDpcIlBhZ2VEb3duXCIsMzU6XCJFbmRcIiwzNjpcIkhvbWVcIiwzNzpcIkFycm93TGVmdFwiLDM4OlwiQXJyb3dVcFwiLDM5OlwiQXJyb3dSaWdodFwiLDQwOlwiQXJyb3dEb3duXCIsNDU6XCJJbnNlcnRcIiw0NjpcIkRlbGV0ZVwiLDExMjpcIkYxXCIsMTEzOlwiRjJcIiwxMTQ6XCJGM1wiLDExNTpcIkY0XCIsMTE2OlwiRjVcIiwxMTc6XCJGNlwiLDExODpcIkY3XCIsMTE5OlwiRjhcIiwxMjA6XCJGOVwiLDEyMTpcIkYxMFwiLDEyMjpcIkYxMVwiLDEyMzpcIkYxMlwiLDE0NDpcIk51bUxvY2tcIiwxNDU6XCJTY3JvbGxMb2NrXCIsMjI0OlwiTWV0YVwifSx3YT17QWx0OlwiYWx0S2V5XCIsQ29udHJvbDpcImN0cmxLZXlcIixNZXRhOlwibWV0YUtleVwiLFNoaWZ0Olwic2hpZnRLZXlcIn07ZnVuY3Rpb24gU2EoZSl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtyZXR1cm4gbi5nZXRNb2RpZmllclN0YXRlP24uZ2V0TW9kaWZpZXJTdGF0ZShlKTooZT13YVtlXSk/ISFuW2VdOiExfWZ1bmN0aW9uIHVpKCl7cmV0dXJuIFNhfXZhciBFYT1NKHt9LFN0LHtrZXk6ZnVuY3Rpb24oZSl7aWYoZS5rZXkpe3ZhciBuPXlhW2Uua2V5XXx8ZS5rZXk7aWYobiE9PVwiVW5pZGVudGlmaWVkXCIpcmV0dXJuIG59cmV0dXJuIGUudHlwZT09PVwia2V5cHJlc3NcIj8oZT1IdChlKSxlPT09MTM/XCJFbnRlclwiOlN0cmluZy5mcm9tQ2hhckNvZGUoZSkpOmUudHlwZT09PVwia2V5ZG93blwifHxlLnR5cGU9PT1cImtleXVwXCI/Z2FbZS5rZXlDb2RlXXx8XCJVbmlkZW50aWZpZWRcIjpcIlwifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTp1aSxjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09XCJrZXlwcmVzc1wiP0h0KGUpOjB9LGtleUNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PVwia2V5ZG93blwifHxlLnR5cGU9PT1cImtleXVwXCI/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT1cImtleXByZXNzXCI/SHQoZSk6ZS50eXBlPT09XCJrZXlkb3duXCJ8fGUudHlwZT09PVwia2V5dXBcIj9lLmtleUNvZGU6MH19KSxrYT1iKEVhKSx4YT1NKHt9LGtyLHtwb2ludGVySWQ6MCx3aWR0aDowLGhlaWdodDowLHByZXNzdXJlOjAsdGFuZ2VudGlhbFByZXNzdXJlOjAsdGlsdFg6MCx0aWx0WTowLHR3aXN0OjAscG9pbnRlclR5cGU6MCxpc1ByaW1hcnk6MH0pLFppPWIoeGEpLENhPU0oe30sU3Qse3RvdWNoZXM6MCx0YXJnZXRUb3VjaGVzOjAsY2hhbmdlZFRvdWNoZXM6MCxhbHRLZXk6MCxtZXRhS2V5OjAsY3RybEtleTowLHNoaWZ0S2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTp1aX0pLF9hPWIoQ2EpLE5hPU0oe30sTm4se3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksUGE9YihOYSksVGE9TSh7fSxrcix7ZGVsdGFYOmZ1bmN0aW9uKGUpe3JldHVyblwiZGVsdGFYXCJpbiBlP2UuZGVsdGFYOlwid2hlZWxEZWx0YVhcImluIGU/LWUud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGUpe3JldHVyblwiZGVsdGFZXCJpbiBlP2UuZGVsdGFZOlwid2hlZWxEZWx0YVlcImluIGU/LWUud2hlZWxEZWx0YVk6XCJ3aGVlbERlbHRhXCJpbiBlPy1lLndoZWVsRGVsdGE6MH0sZGVsdGFaOjAsZGVsdGFNb2RlOjB9KSxMYT1iKFRhKSx6YT1bOSwxMywyNywzMl0sc2k9d2UmJlwiQ29tcG9zaXRpb25FdmVudFwiaW4gd2luZG93LHFuPW51bGw7d2UmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmKHFuPWRvY3VtZW50LmRvY3VtZW50TW9kZSk7dmFyIE9hPXdlJiZcIlRleHRFdmVudFwiaW4gd2luZG93JiYhcW4sU3U9d2UmJighc2l8fHFuJiY4PHFuJiYxMT49cW4pLEppPVN0cmluZy5mcm9tQ2hhckNvZGUoMzIpLHFpPSExO2Z1bmN0aW9uIEV1KGUsbil7c3dpdGNoKGUpe2Nhc2VcImtleXVwXCI6cmV0dXJuIHphLmluZGV4T2Yobi5rZXlDb2RlKSE9PS0xO2Nhc2VcImtleWRvd25cIjpyZXR1cm4gbi5rZXlDb2RlIT09MjI5O2Nhc2VcImtleXByZXNzXCI6Y2FzZVwibW91c2Vkb3duXCI6Y2FzZVwiZm9jdXNvdXRcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBrdShlKXtyZXR1cm4gZT1lLmRldGFpbCx0eXBlb2YgZT09XCJvYmplY3RcIiYmXCJkYXRhXCJpbiBlP2UuZGF0YTpudWxsfXZhciB1bj0hMTtmdW5jdGlvbiBNYShlLG4pe3N3aXRjaChlKXtjYXNlXCJjb21wb3NpdGlvbmVuZFwiOnJldHVybiBrdShuKTtjYXNlXCJrZXlwcmVzc1wiOnJldHVybiBuLndoaWNoIT09MzI/bnVsbDoocWk9ITAsSmkpO2Nhc2VcInRleHRJbnB1dFwiOnJldHVybiBlPW4uZGF0YSxlPT09SmkmJnFpP251bGw6ZTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBSYShlLG4pe2lmKHVuKXJldHVybiBlPT09XCJjb21wb3NpdGlvbmVuZFwifHwhc2kmJkV1KGUsbik/KGU9d3UoKSxCdD1paT14ZT1udWxsLHVuPSExLGUpOm51bGw7c3dpdGNoKGUpe2Nhc2VcInBhc3RlXCI6cmV0dXJuIG51bGw7Y2FzZVwia2V5cHJlc3NcIjppZighKG4uY3RybEtleXx8bi5hbHRLZXl8fG4ubWV0YUtleSl8fG4uY3RybEtleSYmbi5hbHRLZXkpe2lmKG4uY2hhciYmMTxuLmNoYXIubGVuZ3RoKXJldHVybiBuLmNoYXI7aWYobi53aGljaClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuLndoaWNoKX1yZXR1cm4gbnVsbDtjYXNlXCJjb21wb3NpdGlvbmVuZFwiOnJldHVybiBTdSYmbi5sb2NhbGUhPT1cImtvXCI/bnVsbDpuLmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIERhPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLFwiZGF0ZXRpbWUtbG9jYWxcIjohMCxlbWFpbDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O2Z1bmN0aW9uIGJpKGUpe3ZhciBuPWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gbj09PVwiaW5wdXRcIj8hIURhW2UudHlwZV06bj09PVwidGV4dGFyZWFcIn1mdW5jdGlvbiB4dShlLG4sdCxyKXt0dShyKSxuPWJ0KG4sXCJvbkNoYW5nZVwiKSwwPG4ubGVuZ3RoJiYodD1uZXcgb2koXCJvbkNoYW5nZVwiLFwiY2hhbmdlXCIsbnVsbCx0LHIpLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6bn0pKX12YXIgYm49bnVsbCxkdD1udWxsO2Z1bmN0aW9uIElhKGUpe1R1KGUsMCl9ZnVuY3Rpb24geHIoZSl7dmFyIG49YW4oZSk7aWYoR28obikpcmV0dXJuIGV9ZnVuY3Rpb24gRmEoZSxuKXtpZihlPT09XCJjaGFuZ2VcIilyZXR1cm4gbn12YXIgQ3U9ITE7d2UmJih3ZT8oT3Q9XCJvbmlucHV0XCJpbiBkb2N1bWVudCxPdHx8KEJyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksQnIuc2V0QXR0cmlidXRlKFwib25pbnB1dFwiLFwicmV0dXJuO1wiKSxPdD10eXBlb2YgQnIub25pbnB1dD09XCJmdW5jdGlvblwiKSx6dD1PdCk6enQ9ITEsQ3U9enQmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO3ZhciB6dCxPdCxCcjtmdW5jdGlvbiBlbygpe2JuJiYoYm4uZGV0YWNoRXZlbnQoXCJvbnByb3BlcnR5Y2hhbmdlXCIsX3UpLGR0PWJuPW51bGwpfWZ1bmN0aW9uIF91KGUpe2lmKGUucHJvcGVydHlOYW1lPT09XCJ2YWx1ZVwiJiZ4cihkdCkpe3ZhciBuPVtdO2lmKHh1KG4sZHQsZSxabChlKSksZT1JYSxBZSllKG4pO2Vsc2V7QWU9ITA7dHJ5e0psKGUsbil9ZmluYWxseXtBZT0hMSxibCgpfX19fWZ1bmN0aW9uIGphKGUsbix0KXtlPT09XCJmb2N1c2luXCI/KGVvKCksYm49bixkdD10LGJuLmF0dGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLF91KSk6ZT09PVwiZm9jdXNvdXRcIiYmZW8oKX1mdW5jdGlvbiBVYShlKXtpZihlPT09XCJzZWxlY3Rpb25jaGFuZ2VcInx8ZT09PVwia2V5dXBcInx8ZT09PVwia2V5ZG93blwiKXJldHVybiB4cihkdCl9ZnVuY3Rpb24gVmEoZSxuKXtpZihlPT09XCJjbGlja1wiKXJldHVybiB4cihuKX1mdW5jdGlvbiBCYShlLG4pe2lmKGU9PT1cImlucHV0XCJ8fGU9PT1cImNoYW5nZVwiKXJldHVybiB4cihuKX1mdW5jdGlvbiBIYShlLG4pe3JldHVybiBlPT09biYmKGUhPT0wfHwxL2U9PT0xL24pfHxlIT09ZSYmbiE9PW59dmFyIGVlPXR5cGVvZiBPYmplY3QuaXM9PVwiZnVuY3Rpb25cIj9PYmplY3QuaXM6SGEsV2E9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBwdChlLG4pe2lmKGVlKGUsbikpcmV0dXJuITA7aWYodHlwZW9mIGUhPVwib2JqZWN0XCJ8fGU9PT1udWxsfHx0eXBlb2YgbiE9XCJvYmplY3RcInx8bj09PW51bGwpcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyhuKTtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspaWYoIVdhLmNhbGwobix0W3JdKXx8IWVlKGVbdFtyXV0sblt0W3JdXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbm8oZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIHRvKGUsbil7dmFyIHQ9bm8oZSk7ZT0wO2Zvcih2YXIgcjt0Oyl7aWYodC5ub2RlVHlwZT09PTMpe2lmKHI9ZSt0LnRleHRDb250ZW50Lmxlbmd0aCxlPD1uJiZyPj1uKXJldHVybntub2RlOnQsb2Zmc2V0Om4tZX07ZT1yfWU6e2Zvcig7dDspe2lmKHQubmV4dFNpYmxpbmcpe3Q9dC5uZXh0U2libGluZzticmVhayBlfXQ9dC5wYXJlbnROb2RlfXQ9dm9pZCAwfXQ9bm8odCl9fWZ1bmN0aW9uIE51KGUsbil7cmV0dXJuIGUmJm4/ZT09PW4/ITA6ZSYmZS5ub2RlVHlwZT09PTM/ITE6biYmbi5ub2RlVHlwZT09PTM/TnUoZSxuLnBhcmVudE5vZGUpOlwiY29udGFpbnNcImluIGU/ZS5jb250YWlucyhuKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPyEhKGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24obikmMTYpOiExOiExfWZ1bmN0aW9uIHJvKCl7Zm9yKHZhciBlPXdpbmRvdyxuPUd0KCk7biBpbnN0YW5jZW9mIGUuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7dmFyIHQ9dHlwZW9mIG4uY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmPT1cInN0cmluZ1wifWNhdGNoe3Q9ITF9aWYodCllPW4uY29udGVudFdpbmRvdztlbHNlIGJyZWFrO249R3QoZS5kb2N1bWVudCl9cmV0dXJuIG59ZnVuY3Rpb24gaGwoZSl7dmFyIG49ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBuJiYobj09PVwiaW5wdXRcIiYmKGUudHlwZT09PVwidGV4dFwifHxlLnR5cGU9PT1cInNlYXJjaFwifHxlLnR5cGU9PT1cInRlbFwifHxlLnR5cGU9PT1cInVybFwifHxlLnR5cGU9PT1cInBhc3N3b3JkXCIpfHxuPT09XCJ0ZXh0YXJlYVwifHxlLmNvbnRlbnRFZGl0YWJsZT09PVwidHJ1ZVwiKX12YXIgQWE9d2UmJlwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxzbj1udWxsLHZsPW51bGwsZXQ9bnVsbCx5bD0hMTtmdW5jdGlvbiBsbyhlLG4sdCl7dmFyIHI9dC53aW5kb3c9PT10P3QuZG9jdW1lbnQ6dC5ub2RlVHlwZT09PTk/dDp0Lm93bmVyRG9jdW1lbnQ7eWx8fHNuPT1udWxsfHxzbiE9PUd0KHIpfHwocj1zbixcInNlbGVjdGlvblN0YXJ0XCJpbiByJiZobChyKT9yPXtzdGFydDpyLnNlbGVjdGlvblN0YXJ0LGVuZDpyLnNlbGVjdGlvbkVuZH06KHI9KHIub3duZXJEb2N1bWVudCYmci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpLHI9e2FuY2hvck5vZGU6ci5hbmNob3JOb2RlLGFuY2hvck9mZnNldDpyLmFuY2hvck9mZnNldCxmb2N1c05vZGU6ci5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6ci5mb2N1c09mZnNldH0pLGV0JiZwdChldCxyKXx8KGV0PXIscj1idCh2bCxcIm9uU2VsZWN0XCIpLDA8ci5sZW5ndGgmJihuPW5ldyBvaShcIm9uU2VsZWN0XCIsXCJzZWxlY3RcIixudWxsLG4sdCksZS5wdXNoKHtldmVudDpuLGxpc3RlbmVyczpyfSksbi50YXJnZXQ9c24pKSl9dGkoXCJjYW5jZWwgY2FuY2VsIGNsaWNrIGNsaWNrIGNsb3NlIGNsb3NlIGNvbnRleHRtZW51IGNvbnRleHRNZW51IGNvcHkgY29weSBjdXQgY3V0IGF1eGNsaWNrIGF1eENsaWNrIGRibGNsaWNrIGRvdWJsZUNsaWNrIGRyYWdlbmQgZHJhZ0VuZCBkcmFnc3RhcnQgZHJhZ1N0YXJ0IGRyb3AgZHJvcCBmb2N1c2luIGZvY3VzIGZvY3Vzb3V0IGJsdXIgaW5wdXQgaW5wdXQgaW52YWxpZCBpbnZhbGlkIGtleWRvd24ga2V5RG93biBrZXlwcmVzcyBrZXlQcmVzcyBrZXl1cCBrZXlVcCBtb3VzZWRvd24gbW91c2VEb3duIG1vdXNldXAgbW91c2VVcCBwYXN0ZSBwYXN0ZSBwYXVzZSBwYXVzZSBwbGF5IHBsYXkgcG9pbnRlcmNhbmNlbCBwb2ludGVyQ2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJEb3duIHBvaW50ZXJ1cCBwb2ludGVyVXAgcmF0ZWNoYW5nZSByYXRlQ2hhbmdlIHJlc2V0IHJlc2V0IHNlZWtlZCBzZWVrZWQgc3VibWl0IHN1Ym1pdCB0b3VjaGNhbmNlbCB0b3VjaENhbmNlbCB0b3VjaGVuZCB0b3VjaEVuZCB0b3VjaHN0YXJ0IHRvdWNoU3RhcnQgdm9sdW1lY2hhbmdlIHZvbHVtZUNoYW5nZVwiLnNwbGl0KFwiIFwiKSwwKTt0aShcImRyYWcgZHJhZyBkcmFnZW50ZXIgZHJhZ0VudGVyIGRyYWdleGl0IGRyYWdFeGl0IGRyYWdsZWF2ZSBkcmFnTGVhdmUgZHJhZ292ZXIgZHJhZ092ZXIgbW91c2Vtb3ZlIG1vdXNlTW92ZSBtb3VzZW91dCBtb3VzZU91dCBtb3VzZW92ZXIgbW91c2VPdmVyIHBvaW50ZXJtb3ZlIHBvaW50ZXJNb3ZlIHBvaW50ZXJvdXQgcG9pbnRlck91dCBwb2ludGVyb3ZlciBwb2ludGVyT3ZlciBzY3JvbGwgc2Nyb2xsIHRvZ2dsZSB0b2dnbGUgdG91Y2htb3ZlIHRvdWNoTW92ZSB3aGVlbCB3aGVlbFwiLnNwbGl0KFwiIFwiKSwxKTt0aShKcywyKTtmb3IoSHI9XCJjaGFuZ2Ugc2VsZWN0aW9uY2hhbmdlIHRleHRJbnB1dCBjb21wb3NpdGlvbnN0YXJ0IGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9udXBkYXRlXCIuc3BsaXQoXCIgXCIpLE10PTA7TXQ8SHIubGVuZ3RoO010Kyspbmkuc2V0KEhyW010XSwwKTt2YXIgSHIsTXQ7a24oXCJvbk1vdXNlRW50ZXJcIixbXCJtb3VzZW91dFwiLFwibW91c2VvdmVyXCJdKTtrbihcIm9uTW91c2VMZWF2ZVwiLFtcIm1vdXNlb3V0XCIsXCJtb3VzZW92ZXJcIl0pO2tuKFwib25Qb2ludGVyRW50ZXJcIixbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXSk7a24oXCJvblBvaW50ZXJMZWF2ZVwiLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdKTtKZShcIm9uQ2hhbmdlXCIsXCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSk7SmUoXCJvblNlbGVjdFwiLFwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXCIgXCIpKTtKZShcIm9uQmVmb3JlSW5wdXRcIixbXCJjb21wb3NpdGlvbmVuZFwiLFwia2V5cHJlc3NcIixcInRleHRJbnB1dFwiLFwicGFzdGVcIl0pO0plKFwib25Db21wb3NpdGlvbkVuZFwiLFwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO0plKFwib25Db21wb3NpdGlvblN0YXJ0XCIsXCJjb21wb3NpdGlvbnN0YXJ0IGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKTtKZShcIm9uQ29tcG9zaXRpb25VcGRhdGVcIixcImNvbXBvc2l0aW9udXBkYXRlIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKTt2YXIgJG49XCJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nXCIuc3BsaXQoXCIgXCIpLFB1PW5ldyBTZXQoXCJjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCB0b2dnbGVcIi5zcGxpdChcIiBcIikuY29uY2F0KCRuKSk7ZnVuY3Rpb24gaW8oZSxuLHQpe3ZhciByPWUudHlwZXx8XCJ1bmtub3duLWV2ZW50XCI7ZS5jdXJyZW50VGFyZ2V0PXQsWXMocixuLHZvaWQgMCxlKSxlLmN1cnJlbnRUYXJnZXQ9bnVsbH1mdW5jdGlvbiBUdShlLG4pe249KG4mNCkhPT0wO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgcj1lW3RdLGw9ci5ldmVudDtyPXIubGlzdGVuZXJzO2U6e3ZhciBpPXZvaWQgMDtpZihuKWZvcih2YXIgbz1yLmxlbmd0aC0xOzA8PW87by0tKXt2YXIgdT1yW29dLHM9dS5pbnN0YW5jZSxkPXUuY3VycmVudFRhcmdldDtpZih1PXUubGlzdGVuZXIscyE9PWkmJmwuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO2lvKGwsdSxkKSxpPXN9ZWxzZSBmb3Iobz0wO288ci5sZW5ndGg7bysrKXtpZih1PXJbb10scz11Lmluc3RhbmNlLGQ9dS5jdXJyZW50VGFyZ2V0LHU9dS5saXN0ZW5lcixzIT09aSYmbC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7aW8obCx1LGQpLGk9c319fWlmKEp0KXRocm93IGU9ZGwsSnQ9ITEsZGw9bnVsbCxlfWZ1bmN0aW9uIHooZSxuKXt2YXIgdD1SdShuKSxyPWUrXCJfX2J1YmJsZVwiO3QuaGFzKHIpfHwoenUobixlLDIsITEpLHQuYWRkKHIpKX12YXIgb289XCJfcmVhY3RMaXN0ZW5pbmdcIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtmdW5jdGlvbiBMdShlKXtlW29vXXx8KGVbb29dPSEwLFlvLmZvckVhY2goZnVuY3Rpb24obil7UHUuaGFzKG4pfHx1byhuLCExLGUsbnVsbCksdW8obiwhMCxlLG51bGwpfSkpfWZ1bmN0aW9uIHVvKGUsbix0LHIpe3ZhciBsPTQ8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTowLGk9dDtpZihlPT09XCJzZWxlY3Rpb25jaGFuZ2VcIiYmdC5ub2RlVHlwZSE9PTkmJihpPXQub3duZXJEb2N1bWVudCksciE9PW51bGwmJiFuJiZQdS5oYXMoZSkpe2lmKGUhPT1cInNjcm9sbFwiKXJldHVybjtsfD0yLGk9cn12YXIgbz1SdShpKSx1PWUrXCJfX1wiKyhuP1wiY2FwdHVyZVwiOlwiYnViYmxlXCIpO28uaGFzKHUpfHwobiYmKGx8PTQpLHp1KGksZSxsLG4pLG8uYWRkKHUpKX1mdW5jdGlvbiB6dShlLG4sdCxyKXt2YXIgbD1uaS5nZXQobik7c3dpdGNoKGw9PT12b2lkIDA/MjpsKXtjYXNlIDA6bD1vYTticmVhaztjYXNlIDE6bD11YTticmVhaztkZWZhdWx0Omw9cml9dD1sLmJpbmQobnVsbCxuLHQsZSksbD12b2lkIDAsIWNsfHxuIT09XCJ0b3VjaHN0YXJ0XCImJm4hPT1cInRvdWNobW92ZVwiJiZuIT09XCJ3aGVlbFwifHwobD0hMCkscj9sIT09dm9pZCAwP2UuYWRkRXZlbnRMaXN0ZW5lcihuLHQse2NhcHR1cmU6ITAscGFzc2l2ZTpsfSk6ZS5hZGRFdmVudExpc3RlbmVyKG4sdCwhMCk6bCE9PXZvaWQgMD9lLmFkZEV2ZW50TGlzdGVuZXIobix0LHtwYXNzaXZlOmx9KTplLmFkZEV2ZW50TGlzdGVuZXIobix0LCExKX1mdW5jdGlvbiBPdShlLG4sdCxyLGwpe3ZhciBpPXI7aWYoKG4mMSk9PT0wJiYobiYyKT09PTAmJnIhPT1udWxsKWU6Zm9yKDs7KXtpZihyPT09bnVsbClyZXR1cm47dmFyIG89ci50YWc7aWYobz09PTN8fG89PT00KXt2YXIgdT1yLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2lmKHU9PT1sfHx1Lm5vZGVUeXBlPT09OCYmdS5wYXJlbnROb2RlPT09bClicmVhaztpZihvPT09NClmb3Iobz1yLnJldHVybjtvIT09bnVsbDspe3ZhciBzPW8udGFnO2lmKChzPT09M3x8cz09PTQpJiYocz1vLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLHM9PT1sfHxzLm5vZGVUeXBlPT09OCYmcy5wYXJlbnROb2RlPT09bCkpcmV0dXJuO289by5yZXR1cm59Zm9yKDt1IT09bnVsbDspe2lmKG89UWUodSksbz09PW51bGwpcmV0dXJuO2lmKHM9by50YWcscz09PTV8fHM9PT02KXtyPWk9bztjb250aW51ZSBlfXU9dS5wYXJlbnROb2RlfX1yPXIucmV0dXJufVdzKGZ1bmN0aW9uKCl7dmFyIGQ9aSx5PVpsKHQpLEM9W107ZTp7dmFyIGg9eXUuZ2V0KGUpO2lmKGghPT12b2lkIDApe3ZhciBTPW9pLGs9ZTtzd2l0Y2goZSl7Y2FzZVwia2V5cHJlc3NcIjppZihIdCh0KT09PTApYnJlYWsgZTtjYXNlXCJrZXlkb3duXCI6Y2FzZVwia2V5dXBcIjpTPWthO2JyZWFrO2Nhc2VcImZvY3VzaW5cIjprPVwiZm9jdXNcIixTPVZyO2JyZWFrO2Nhc2VcImZvY3Vzb3V0XCI6az1cImJsdXJcIixTPVZyO2JyZWFrO2Nhc2VcImJlZm9yZWJsdXJcIjpjYXNlXCJhZnRlcmJsdXJcIjpTPVZyO2JyZWFrO2Nhc2VcImNsaWNrXCI6aWYodC5idXR0b249PT0yKWJyZWFrIGU7Y2FzZVwiYXV4Y2xpY2tcIjpjYXNlXCJkYmxjbGlja1wiOmNhc2VcIm1vdXNlZG93blwiOmNhc2VcIm1vdXNlbW92ZVwiOmNhc2VcIm1vdXNldXBcIjpjYXNlXCJtb3VzZW91dFwiOmNhc2VcIm1vdXNlb3ZlclwiOmNhc2VcImNvbnRleHRtZW51XCI6Uz1LaTticmVhaztjYXNlXCJkcmFnXCI6Y2FzZVwiZHJhZ2VuZFwiOmNhc2VcImRyYWdlbnRlclwiOmNhc2VcImRyYWdleGl0XCI6Y2FzZVwiZHJhZ2xlYXZlXCI6Y2FzZVwiZHJhZ292ZXJcIjpjYXNlXCJkcmFnc3RhcnRcIjpjYXNlXCJkcm9wXCI6Uz1mYTticmVhaztjYXNlXCJ0b3VjaGNhbmNlbFwiOmNhc2VcInRvdWNoZW5kXCI6Y2FzZVwidG91Y2htb3ZlXCI6Y2FzZVwidG91Y2hzdGFydFwiOlM9X2E7YnJlYWs7Y2FzZSBwdTpjYXNlIG11OmNhc2UgaHU6Uz1wYTticmVhaztjYXNlIHZ1OlM9UGE7YnJlYWs7Y2FzZVwic2Nyb2xsXCI6Uz1zYTticmVhaztjYXNlXCJ3aGVlbFwiOlM9TGE7YnJlYWs7Y2FzZVwiY29weVwiOmNhc2VcImN1dFwiOmNhc2VcInBhc3RlXCI6Uz1oYTticmVhaztjYXNlXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2VcImxvc3Rwb2ludGVyY2FwdHVyZVwiOmNhc2VcInBvaW50ZXJjYW5jZWxcIjpjYXNlXCJwb2ludGVyZG93blwiOmNhc2VcInBvaW50ZXJtb3ZlXCI6Y2FzZVwicG9pbnRlcm91dFwiOmNhc2VcInBvaW50ZXJvdmVyXCI6Y2FzZVwicG9pbnRlcnVwXCI6Uz1aaX12YXIgRT0obiY0KSE9PTAsYz0hRSYmZT09PVwic2Nyb2xsXCIsYT1FP2ghPT1udWxsP2grXCJDYXB0dXJlXCI6bnVsbDpoO0U9W107Zm9yKHZhciBmPWQscDtmIT09bnVsbDspe3A9Zjt2YXIgbT1wLnN0YXRlTm9kZTtpZihwLnRhZz09PTUmJm0hPT1udWxsJiYocD1tLGEhPT1udWxsJiYobT1zdChmLGEpLG0hPW51bGwmJkUucHVzaChtdChmLG0scCkpKSksYylicmVhaztmPWYucmV0dXJufTA8RS5sZW5ndGgmJihoPW5ldyBTKGgsayxudWxsLHQseSksQy5wdXNoKHtldmVudDpoLGxpc3RlbmVyczpFfSkpfX1pZigobiY3KT09PTApe2U6e2lmKGg9ZT09PVwibW91c2VvdmVyXCJ8fGU9PT1cInBvaW50ZXJvdmVyXCIsUz1lPT09XCJtb3VzZW91dFwifHxlPT09XCJwb2ludGVyb3V0XCIsaCYmKG4mMTYpPT09MCYmKGs9dC5yZWxhdGVkVGFyZ2V0fHx0LmZyb21FbGVtZW50KSYmKFFlKGspfHxrW1BuXSkpYnJlYWsgZTtpZigoU3x8aCkmJihoPXkud2luZG93PT09eT95OihoPXkub3duZXJEb2N1bWVudCk/aC5kZWZhdWx0Vmlld3x8aC5wYXJlbnRXaW5kb3c6d2luZG93LFM/KGs9dC5yZWxhdGVkVGFyZ2V0fHx0LnRvRWxlbWVudCxTPWQsaz1rP1FlKGspOm51bGwsayE9PW51bGwmJihjPWJlKGspLGshPT1jfHxrLnRhZyE9PTUmJmsudGFnIT09NikmJihrPW51bGwpKTooUz1udWxsLGs9ZCksUyE9PWspKXtpZihFPUtpLG09XCJvbk1vdXNlTGVhdmVcIixhPVwib25Nb3VzZUVudGVyXCIsZj1cIm1vdXNlXCIsKGU9PT1cInBvaW50ZXJvdXRcInx8ZT09PVwicG9pbnRlcm92ZXJcIikmJihFPVppLG09XCJvblBvaW50ZXJMZWF2ZVwiLGE9XCJvblBvaW50ZXJFbnRlclwiLGY9XCJwb2ludGVyXCIpLGM9Uz09bnVsbD9oOmFuKFMpLHA9az09bnVsbD9oOmFuKGspLGg9bmV3IEUobSxmK1wibGVhdmVcIixTLHQseSksaC50YXJnZXQ9YyxoLnJlbGF0ZWRUYXJnZXQ9cCxtPW51bGwsUWUoeSk9PT1kJiYoRT1uZXcgRShhLGYrXCJlbnRlclwiLGssdCx5KSxFLnRhcmdldD1wLEUucmVsYXRlZFRhcmdldD1jLG09RSksYz1tLFMmJmspbjp7Zm9yKEU9UyxhPWssZj0wLHA9RTtwO3A9dG4ocCkpZisrO2ZvcihwPTAsbT1hO207bT10bihtKSlwKys7Zm9yKDswPGYtcDspRT10bihFKSxmLS07Zm9yKDswPHAtZjspYT10bihhKSxwLS07Zm9yKDtmLS07KXtpZihFPT09YXx8YSE9PW51bGwmJkU9PT1hLmFsdGVybmF0ZSlicmVhayBuO0U9dG4oRSksYT10bihhKX1FPW51bGx9ZWxzZSBFPW51bGw7UyE9PW51bGwmJnNvKEMsaCxTLEUsITEpLGshPT1udWxsJiZjIT09bnVsbCYmc28oQyxjLGssRSwhMCl9fWU6e2lmKGg9ZD9hbihkKTp3aW5kb3csUz1oLm5vZGVOYW1lJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksUz09PVwic2VsZWN0XCJ8fFM9PT1cImlucHV0XCImJmgudHlwZT09PVwiZmlsZVwiKXZhciBfPUZhO2Vsc2UgaWYoYmkoaCkpaWYoQ3UpXz1CYTtlbHNle189VWE7dmFyIHc9amF9ZWxzZShTPWgubm9kZU5hbWUpJiZTLnRvTG93ZXJDYXNlKCk9PT1cImlucHV0XCImJihoLnR5cGU9PT1cImNoZWNrYm94XCJ8fGgudHlwZT09PVwicmFkaW9cIikmJihfPVZhKTtpZihfJiYoXz1fKGUsZCkpKXt4dShDLF8sdCx5KTticmVhayBlfXcmJncoZSxoLGQpLGU9PT1cImZvY3Vzb3V0XCImJih3PWguX3dyYXBwZXJTdGF0ZSkmJncuY29udHJvbGxlZCYmaC50eXBlPT09XCJudW1iZXJcIiYmcmwoaCxcIm51bWJlclwiLGgudmFsdWUpfXN3aXRjaCh3PWQ/YW4oZCk6d2luZG93LGUpe2Nhc2VcImZvY3VzaW5cIjooYmkodyl8fHcuY29udGVudEVkaXRhYmxlPT09XCJ0cnVlXCIpJiYoc249dyx2bD1kLGV0PW51bGwpO2JyZWFrO2Nhc2VcImZvY3Vzb3V0XCI6ZXQ9dmw9c249bnVsbDticmVhaztjYXNlXCJtb3VzZWRvd25cIjp5bD0hMDticmVhaztjYXNlXCJjb250ZXh0bWVudVwiOmNhc2VcIm1vdXNldXBcIjpjYXNlXCJkcmFnZW5kXCI6eWw9ITEsbG8oQyx0LHkpO2JyZWFrO2Nhc2VcInNlbGVjdGlvbmNoYW5nZVwiOmlmKEFhKWJyZWFrO2Nhc2VcImtleWRvd25cIjpjYXNlXCJrZXl1cFwiOmxvKEMsdCx5KX12YXIgTjtpZihzaSllOntzd2l0Y2goZSl7Y2FzZVwiY29tcG9zaXRpb25zdGFydFwiOnZhciBUPVwib25Db21wb3NpdGlvblN0YXJ0XCI7YnJlYWsgZTtjYXNlXCJjb21wb3NpdGlvbmVuZFwiOlQ9XCJvbkNvbXBvc2l0aW9uRW5kXCI7YnJlYWsgZTtjYXNlXCJjb21wb3NpdGlvbnVwZGF0ZVwiOlQ9XCJvbkNvbXBvc2l0aW9uVXBkYXRlXCI7YnJlYWsgZX1UPXZvaWQgMH1lbHNlIHVuP0V1KGUsdCkmJihUPVwib25Db21wb3NpdGlvbkVuZFwiKTplPT09XCJrZXlkb3duXCImJnQua2V5Q29kZT09PTIyOSYmKFQ9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIik7VCYmKFN1JiZ0LmxvY2FsZSE9PVwia29cIiYmKHVufHxUIT09XCJvbkNvbXBvc2l0aW9uU3RhcnRcIj9UPT09XCJvbkNvbXBvc2l0aW9uRW5kXCImJnVuJiYoTj13dSgpKTooeGU9eSxpaT1cInZhbHVlXCJpbiB4ZT94ZS52YWx1ZTp4ZS50ZXh0Q29udGVudCx1bj0hMCkpLHc9YnQoZCxUKSwwPHcubGVuZ3RoJiYoVD1uZXcgR2koVCxlLG51bGwsdCx5KSxDLnB1c2goe2V2ZW50OlQsbGlzdGVuZXJzOnd9KSxOP1QuZGF0YT1OOihOPWt1KHQpLE4hPT1udWxsJiYoVC5kYXRhPU4pKSkpLChOPU9hP01hKGUsdCk6UmEoZSx0KSkmJihkPWJ0KGQsXCJvbkJlZm9yZUlucHV0XCIpLDA8ZC5sZW5ndGgmJih5PW5ldyBHaShcIm9uQmVmb3JlSW5wdXRcIixcImJlZm9yZWlucHV0XCIsbnVsbCx0LHkpLEMucHVzaCh7ZXZlbnQ6eSxsaXN0ZW5lcnM6ZH0pLHkuZGF0YT1OKSl9VHUoQyxuKX0pfWZ1bmN0aW9uIG10KGUsbix0KXtyZXR1cm57aW5zdGFuY2U6ZSxsaXN0ZW5lcjpuLGN1cnJlbnRUYXJnZXQ6dH19ZnVuY3Rpb24gYnQoZSxuKXtmb3IodmFyIHQ9bitcIkNhcHR1cmVcIixyPVtdO2UhPT1udWxsOyl7dmFyIGw9ZSxpPWwuc3RhdGVOb2RlO2wudGFnPT09NSYmaSE9PW51bGwmJihsPWksaT1zdChlLHQpLGkhPW51bGwmJnIudW5zaGlmdChtdChlLGksbCkpLGk9c3QoZSxuKSxpIT1udWxsJiZyLnB1c2gobXQoZSxpLGwpKSksZT1lLnJldHVybn1yZXR1cm4gcn1mdW5jdGlvbiB0bihlKXtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtkbyBlPWUucmV0dXJuO3doaWxlKGUmJmUudGFnIT09NSk7cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gc28oZSxuLHQscixsKXtmb3IodmFyIGk9bi5fcmVhY3ROYW1lLG89W107dCE9PW51bGwmJnQhPT1yOyl7dmFyIHU9dCxzPXUuYWx0ZXJuYXRlLGQ9dS5zdGF0ZU5vZGU7aWYocyE9PW51bGwmJnM9PT1yKWJyZWFrO3UudGFnPT09NSYmZCE9PW51bGwmJih1PWQsbD8ocz1zdCh0LGkpLHMhPW51bGwmJm8udW5zaGlmdChtdCh0LHMsdSkpKTpsfHwocz1zdCh0LGkpLHMhPW51bGwmJm8ucHVzaChtdCh0LHMsdSkpKSksdD10LnJldHVybn1vLmxlbmd0aCE9PTAmJmUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6b30pfWZ1bmN0aW9uIGVyKCl7fXZhciBXcj1udWxsLEFyPW51bGw7ZnVuY3Rpb24gTXUoZSxuKXtzd2l0Y2goZSl7Y2FzZVwiYnV0dG9uXCI6Y2FzZVwiaW5wdXRcIjpjYXNlXCJzZWxlY3RcIjpjYXNlXCJ0ZXh0YXJlYVwiOnJldHVybiEhbi5hdXRvRm9jdXN9cmV0dXJuITF9ZnVuY3Rpb24gZ2woZSxuKXtyZXR1cm4gZT09PVwidGV4dGFyZWFcInx8ZT09PVwib3B0aW9uXCJ8fGU9PT1cIm5vc2NyaXB0XCJ8fHR5cGVvZiBuLmNoaWxkcmVuPT1cInN0cmluZ1wifHx0eXBlb2Ygbi5jaGlsZHJlbj09XCJudW1iZXJcInx8dHlwZW9mIG4uZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9PVwib2JqZWN0XCImJm4uZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPT1udWxsJiZuLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCE9bnVsbH12YXIgYW89dHlwZW9mIHNldFRpbWVvdXQ9PVwiZnVuY3Rpb25cIj9zZXRUaW1lb3V0OnZvaWQgMCxRYT10eXBlb2YgY2xlYXJUaW1lb3V0PT1cImZ1bmN0aW9uXCI/Y2xlYXJUaW1lb3V0OnZvaWQgMDtmdW5jdGlvbiBhaShlKXtlLm5vZGVUeXBlPT09MT9lLnRleHRDb250ZW50PVwiXCI6ZS5ub2RlVHlwZT09PTkmJihlPWUuYm9keSxlIT1udWxsJiYoZS50ZXh0Q29udGVudD1cIlwiKSl9ZnVuY3Rpb24gdm4oZSl7Zm9yKDtlIT1udWxsO2U9ZS5uZXh0U2libGluZyl7dmFyIG49ZS5ub2RlVHlwZTtpZihuPT09MXx8bj09PTMpYnJlYWt9cmV0dXJuIGV9ZnVuY3Rpb24gZm8oZSl7ZT1lLnByZXZpb3VzU2libGluZztmb3IodmFyIG49MDtlOyl7aWYoZS5ub2RlVHlwZT09PTgpe3ZhciB0PWUuZGF0YTtpZih0PT09XCIkXCJ8fHQ9PT1cIiQhXCJ8fHQ9PT1cIiQ/XCIpe2lmKG49PT0wKXJldHVybiBlO24tLX1lbHNlIHQ9PT1cIi8kXCImJm4rK31lPWUucHJldmlvdXNTaWJsaW5nfXJldHVybiBudWxsfXZhciBRcj0wO2Z1bmN0aW9uICRhKGUpe3JldHVybnskJHR5cGVvZjpLbCx0b1N0cmluZzplLHZhbHVlT2Y6ZX19dmFyIENyPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLENlPVwiX19yZWFjdEZpYmVyJFwiK0NyLG5yPVwiX19yZWFjdFByb3BzJFwiK0NyLFBuPVwiX19yZWFjdENvbnRhaW5lciRcIitDcixjbz1cIl9fcmVhY3RFdmVudHMkXCIrQ3I7ZnVuY3Rpb24gUWUoZSl7dmFyIG49ZVtDZV07aWYobilyZXR1cm4gbjtmb3IodmFyIHQ9ZS5wYXJlbnROb2RlO3Q7KXtpZihuPXRbUG5dfHx0W0NlXSl7aWYodD1uLmFsdGVybmF0ZSxuLmNoaWxkIT09bnVsbHx8dCE9PW51bGwmJnQuY2hpbGQhPT1udWxsKWZvcihlPWZvKGUpO2UhPT1udWxsOyl7aWYodD1lW0NlXSlyZXR1cm4gdDtlPWZvKGUpfXJldHVybiBufWU9dCx0PWUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBFdChlKXtyZXR1cm4gZT1lW0NlXXx8ZVtQbl0sIWV8fGUudGFnIT09NSYmZS50YWchPT02JiZlLnRhZyE9PTEzJiZlLnRhZyE9PTM/bnVsbDplfWZ1bmN0aW9uIGFuKGUpe2lmKGUudGFnPT09NXx8ZS50YWc9PT02KXJldHVybiBlLnN0YXRlTm9kZTt0aHJvdyBFcnJvcih2KDMzKSl9ZnVuY3Rpb24gX3IoZSl7cmV0dXJuIGVbbnJdfHxudWxsfWZ1bmN0aW9uIFJ1KGUpe3ZhciBuPWVbY29dO3JldHVybiBuPT09dm9pZCAwJiYobj1lW2NvXT1uZXcgU2V0KSxufXZhciB3bD1bXSxmbj0tMTtmdW5jdGlvbiBWZShlKXtyZXR1cm57Y3VycmVudDplfX1mdW5jdGlvbiBPKGUpezA+Zm58fChlLmN1cnJlbnQ9d2xbZm5dLHdsW2ZuXT1udWxsLGZuLS0pfWZ1bmN0aW9uIEQoZSxuKXtmbisrLHdsW2ZuXT1lLmN1cnJlbnQsZS5jdXJyZW50PW59dmFyIEZlPXt9LCQ9VmUoRmUpLFo9VmUoITEpLEtlPUZlO2Z1bmN0aW9uIHhuKGUsbil7dmFyIHQ9ZS50eXBlLmNvbnRleHRUeXBlcztpZighdClyZXR1cm4gRmU7dmFyIHI9ZS5zdGF0ZU5vZGU7aWYociYmci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09bilyZXR1cm4gci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgbD17fSxpO2ZvcihpIGluIHQpbFtpXT1uW2ldO3JldHVybiByJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9bixlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWwpLGx9ZnVuY3Rpb24gSihlKXtyZXR1cm4gZT1lLmNoaWxkQ29udGV4dFR5cGVzLGUhPW51bGx9ZnVuY3Rpb24gdHIoKXtPKFopLE8oJCl9ZnVuY3Rpb24gcG8oZSxuLHQpe2lmKCQuY3VycmVudCE9PUZlKXRocm93IEVycm9yKHYoMTY4KSk7RCgkLG4pLEQoWix0KX1mdW5jdGlvbiBEdShlLG4sdCl7dmFyIHI9ZS5zdGF0ZU5vZGU7aWYoZT1uLmNoaWxkQ29udGV4dFR5cGVzLHR5cGVvZiByLmdldENoaWxkQ29udGV4dCE9XCJmdW5jdGlvblwiKXJldHVybiB0O3I9ci5nZXRDaGlsZENvbnRleHQoKTtmb3IodmFyIGwgaW4gcilpZighKGwgaW4gZSkpdGhyb3cgRXJyb3IodigxMDgsZG4obil8fFwiVW5rbm93blwiLGwpKTtyZXR1cm4gTSh7fSx0LHIpfWZ1bmN0aW9uIFd0KGUpe3JldHVybiBlPShlPWUuc3RhdGVOb2RlKSYmZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dHx8RmUsS2U9JC5jdXJyZW50LEQoJCxlKSxEKFosWi5jdXJyZW50KSwhMH1mdW5jdGlvbiBtbyhlLG4sdCl7dmFyIHI9ZS5zdGF0ZU5vZGU7aWYoIXIpdGhyb3cgRXJyb3IodigxNjkpKTt0PyhlPUR1KGUsbixLZSksci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD1lLE8oWiksTygkKSxEKCQsZSkpOk8oWiksRChaLHQpfXZhciBmaT1udWxsLFhlPW51bGwsWWE9VS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksY2k9VS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFNsPVUudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssWGE9VS51bnN0YWJsZV9zaG91bGRZaWVsZCxobz1VLnVuc3RhYmxlX3JlcXVlc3RQYWludCxFbD1VLnVuc3RhYmxlX25vdyxLYT1VLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLE5yPVUudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksSXU9VS51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxGdT1VLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LGp1PVUudW5zdGFibGVfTG93UHJpb3JpdHksVXU9VS51bnN0YWJsZV9JZGxlUHJpb3JpdHksJHI9e30sR2E9aG8hPT12b2lkIDA/aG86ZnVuY3Rpb24oKXt9LG1lPW51bGwsQXQ9bnVsbCxZcj0hMSx2bz1FbCgpLEE9MWU0PnZvP0VsOmZ1bmN0aW9uKCl7cmV0dXJuIEVsKCktdm99O2Z1bmN0aW9uIENuKCl7c3dpdGNoKEthKCkpe2Nhc2UgTnI6cmV0dXJuIDk5O2Nhc2UgSXU6cmV0dXJuIDk4O2Nhc2UgRnU6cmV0dXJuIDk3O2Nhc2UganU6cmV0dXJuIDk2O2Nhc2UgVXU6cmV0dXJuIDk1O2RlZmF1bHQ6dGhyb3cgRXJyb3IodigzMzIpKX19ZnVuY3Rpb24gVnUoZSl7c3dpdGNoKGUpe2Nhc2UgOTk6cmV0dXJuIE5yO2Nhc2UgOTg6cmV0dXJuIEl1O2Nhc2UgOTc6cmV0dXJuIEZ1O2Nhc2UgOTY6cmV0dXJuIGp1O2Nhc2UgOTU6cmV0dXJuIFV1O2RlZmF1bHQ6dGhyb3cgRXJyb3IodigzMzIpKX19ZnVuY3Rpb24gR2UoZSxuKXtyZXR1cm4gZT1WdShlKSxZYShlLG4pfWZ1bmN0aW9uIGh0KGUsbix0KXtyZXR1cm4gZT1WdShlKSxjaShlLG4sdCl9ZnVuY3Rpb24gcGUoKXtpZihBdCE9PW51bGwpe3ZhciBlPUF0O0F0PW51bGwsU2woZSl9QnUoKX1mdW5jdGlvbiBCdSgpe2lmKCFZciYmbWUhPT1udWxsKXtZcj0hMDt2YXIgZT0wO3RyeXt2YXIgbj1tZTtHZSg5OSxmdW5jdGlvbigpe2Zvcig7ZTxuLmxlbmd0aDtlKyspe3ZhciB0PW5bZV07ZG8gdD10KCEwKTt3aGlsZSh0IT09bnVsbCl9fSksbWU9bnVsbH1jYXRjaCh0KXt0aHJvdyBtZSE9PW51bGwmJihtZT1tZS5zbGljZShlKzEpKSxjaShOcixwZSksdH1maW5hbGx5e1lyPSExfX19dmFyIFphPXFlLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO2Z1bmN0aW9uIG9lKGUsbil7aWYoZSYmZS5kZWZhdWx0UHJvcHMpe249TSh7fSxuKSxlPWUuZGVmYXVsdFByb3BzO2Zvcih2YXIgdCBpbiBlKW5bdF09PT12b2lkIDAmJihuW3RdPWVbdF0pO3JldHVybiBufXJldHVybiBufXZhciBycj1WZShudWxsKSxscj1udWxsLGNuPW51bGwsaXI9bnVsbDtmdW5jdGlvbiBkaSgpe2lyPWNuPWxyPW51bGx9ZnVuY3Rpb24gcGkoZSl7dmFyIG49cnIuY3VycmVudDtPKHJyKSxlLnR5cGUuX2NvbnRleHQuX2N1cnJlbnRWYWx1ZT1ufWZ1bmN0aW9uIEh1KGUsbil7Zm9yKDtlIT09bnVsbDspe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKChlLmNoaWxkTGFuZXMmbik9PT1uKXtpZih0PT09bnVsbHx8KHQuY2hpbGRMYW5lcyZuKT09PW4pYnJlYWs7dC5jaGlsZExhbmVzfD1ufWVsc2UgZS5jaGlsZExhbmVzfD1uLHQhPT1udWxsJiYodC5jaGlsZExhbmVzfD1uKTtlPWUucmV0dXJufX1mdW5jdGlvbiB5bihlLG4pe2xyPWUsaXI9Y249bnVsbCxlPWUuZGVwZW5kZW5jaWVzLGUhPT1udWxsJiZlLmZpcnN0Q29udGV4dCE9PW51bGwmJigoZS5sYW5lcyZuKSE9PTAmJih1ZT0hMCksZS5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gcmUoZSxuKXtpZihpciE9PWUmJm4hPT0hMSYmbiE9PTApaWYoKHR5cGVvZiBuIT1cIm51bWJlclwifHxuPT09MTA3Mzc0MTgyMykmJihpcj1lLG49MTA3Mzc0MTgyMyksbj17Y29udGV4dDplLG9ic2VydmVkQml0czpuLG5leHQ6bnVsbH0sY249PT1udWxsKXtpZihscj09PW51bGwpdGhyb3cgRXJyb3IodigzMDgpKTtjbj1uLGxyLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6bixyZXNwb25kZXJzOm51bGx9fWVsc2UgY249Y24ubmV4dD1uO3JldHVybiBlLl9jdXJyZW50VmFsdWV9dmFyIEVlPSExO2Z1bmN0aW9uIG1pKGUpe2UudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLm1lbW9pemVkU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm51bGwsbGFzdEJhc2VVcGRhdGU6bnVsbCxzaGFyZWQ6e3BlbmRpbmc6bnVsbH0sZWZmZWN0czpudWxsfX1mdW5jdGlvbiBXdShlLG4pe2U9ZS51cGRhdGVRdWV1ZSxuLnVwZGF0ZVF1ZXVlPT09ZSYmKG4udXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6ZS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6ZS5zaGFyZWQsZWZmZWN0czplLmVmZmVjdHN9KX1mdW5jdGlvbiBMZShlLG4pe3JldHVybntldmVudFRpbWU6ZSxsYW5lOm4sdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiB6ZShlLG4pe2lmKGU9ZS51cGRhdGVRdWV1ZSxlIT09bnVsbCl7ZT1lLnNoYXJlZDt2YXIgdD1lLnBlbmRpbmc7dD09PW51bGw/bi5uZXh0PW46KG4ubmV4dD10Lm5leHQsdC5uZXh0PW4pLGUucGVuZGluZz1ufX1mdW5jdGlvbiB5byhlLG4pe3ZhciB0PWUudXBkYXRlUXVldWUscj1lLmFsdGVybmF0ZTtpZihyIT09bnVsbCYmKHI9ci51cGRhdGVRdWV1ZSx0PT09cikpe3ZhciBsPW51bGwsaT1udWxsO2lmKHQ9dC5maXJzdEJhc2VVcGRhdGUsdCE9PW51bGwpe2Rve3ZhciBvPXtldmVudFRpbWU6dC5ldmVudFRpbWUsbGFuZTp0LmxhbmUsdGFnOnQudGFnLHBheWxvYWQ6dC5wYXlsb2FkLGNhbGxiYWNrOnQuY2FsbGJhY2ssbmV4dDpudWxsfTtpPT09bnVsbD9sPWk9bzppPWkubmV4dD1vLHQ9dC5uZXh0fXdoaWxlKHQhPT1udWxsKTtpPT09bnVsbD9sPWk9bjppPWkubmV4dD1ufWVsc2UgbD1pPW47dD17YmFzZVN0YXRlOnIuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTpsLGxhc3RCYXNlVXBkYXRlOmksc2hhcmVkOnIuc2hhcmVkLGVmZmVjdHM6ci5lZmZlY3RzfSxlLnVwZGF0ZVF1ZXVlPXQ7cmV0dXJufWU9dC5sYXN0QmFzZVVwZGF0ZSxlPT09bnVsbD90LmZpcnN0QmFzZVVwZGF0ZT1uOmUubmV4dD1uLHQubGFzdEJhc2VVcGRhdGU9bn1mdW5jdGlvbiB2dChlLG4sdCxyKXt2YXIgbD1lLnVwZGF0ZVF1ZXVlO0VlPSExO3ZhciBpPWwuZmlyc3RCYXNlVXBkYXRlLG89bC5sYXN0QmFzZVVwZGF0ZSx1PWwuc2hhcmVkLnBlbmRpbmc7aWYodSE9PW51bGwpe2wuc2hhcmVkLnBlbmRpbmc9bnVsbDt2YXIgcz11LGQ9cy5uZXh0O3MubmV4dD1udWxsLG89PT1udWxsP2k9ZDpvLm5leHQ9ZCxvPXM7dmFyIHk9ZS5hbHRlcm5hdGU7aWYoeSE9PW51bGwpe3k9eS51cGRhdGVRdWV1ZTt2YXIgQz15Lmxhc3RCYXNlVXBkYXRlO0MhPT1vJiYoQz09PW51bGw/eS5maXJzdEJhc2VVcGRhdGU9ZDpDLm5leHQ9ZCx5Lmxhc3RCYXNlVXBkYXRlPXMpfX1pZihpIT09bnVsbCl7Qz1sLmJhc2VTdGF0ZSxvPTAseT1kPXM9bnVsbDtkb3t1PWkubGFuZTt2YXIgaD1pLmV2ZW50VGltZTtpZigociZ1KT09PXUpe3khPT1udWxsJiYoeT15Lm5leHQ9e2V2ZW50VGltZTpoLGxhbmU6MCx0YWc6aS50YWcscGF5bG9hZDppLnBheWxvYWQsY2FsbGJhY2s6aS5jYWxsYmFjayxuZXh0Om51bGx9KTtlOnt2YXIgUz1lLGs9aTtzd2l0Y2godT1uLGg9dCxrLnRhZyl7Y2FzZSAxOmlmKFM9ay5wYXlsb2FkLHR5cGVvZiBTPT1cImZ1bmN0aW9uXCIpe0M9Uy5jYWxsKGgsQyx1KTticmVhayBlfUM9UzticmVhayBlO2Nhc2UgMzpTLmZsYWdzPVMuZmxhZ3MmLTQwOTd8NjQ7Y2FzZSAwOmlmKFM9ay5wYXlsb2FkLHU9dHlwZW9mIFM9PVwiZnVuY3Rpb25cIj9TLmNhbGwoaCxDLHUpOlMsdT09bnVsbClicmVhayBlO0M9TSh7fSxDLHUpO2JyZWFrIGU7Y2FzZSAyOkVlPSEwfX1pLmNhbGxiYWNrIT09bnVsbCYmKGUuZmxhZ3N8PTMyLHU9bC5lZmZlY3RzLHU9PT1udWxsP2wuZWZmZWN0cz1baV06dS5wdXNoKGkpKX1lbHNlIGg9e2V2ZW50VGltZTpoLGxhbmU6dSx0YWc6aS50YWcscGF5bG9hZDppLnBheWxvYWQsY2FsbGJhY2s6aS5jYWxsYmFjayxuZXh0Om51bGx9LHk9PT1udWxsPyhkPXk9aCxzPUMpOnk9eS5uZXh0PWgsb3w9dTtpZihpPWkubmV4dCxpPT09bnVsbCl7aWYodT1sLnNoYXJlZC5wZW5kaW5nLHU9PT1udWxsKWJyZWFrO2k9dS5uZXh0LHUubmV4dD1udWxsLGwubGFzdEJhc2VVcGRhdGU9dSxsLnNoYXJlZC5wZW5kaW5nPW51bGx9fXdoaWxlKDEpO3k9PT1udWxsJiYocz1DKSxsLmJhc2VTdGF0ZT1zLGwuZmlyc3RCYXNlVXBkYXRlPWQsbC5sYXN0QmFzZVVwZGF0ZT15LHh0fD1vLGUubGFuZXM9byxlLm1lbW9pemVkU3RhdGU9Q319ZnVuY3Rpb24gZ28oZSxuLHQpe2lmKGU9bi5lZmZlY3RzLG4uZWZmZWN0cz1udWxsLGUhPT1udWxsKWZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0sbD1yLmNhbGxiYWNrO2lmKGwhPT1udWxsKXtpZihyLmNhbGxiYWNrPW51bGwscj10LHR5cGVvZiBsIT1cImZ1bmN0aW9uXCIpdGhyb3cgRXJyb3IodigxOTEsbCkpO2wuY2FsbChyKX19fXZhciBBdT1uZXcgeXIuQ29tcG9uZW50KCkucmVmcztmdW5jdGlvbiBvcihlLG4sdCxyKXtuPWUubWVtb2l6ZWRTdGF0ZSx0PXQocixuKSx0PXQ9PW51bGw/bjpNKHt9LG4sdCksZS5tZW1vaXplZFN0YXRlPXQsZS5sYW5lcz09PTAmJihlLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT10KX12YXIgUHI9e2lzTW91bnRlZDpmdW5jdGlvbihlKXtyZXR1cm4oZT1lLl9yZWFjdEludGVybmFscyk/YmUoZSk9PT1lOiExfSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSxuLHQpe2U9ZS5fcmVhY3RJbnRlcm5hbHM7dmFyIHI9cSgpLGw9T2UoZSksaT1MZShyLGwpO2kucGF5bG9hZD1uLHQhPW51bGwmJihpLmNhbGxiYWNrPXQpLHplKGUsaSksTWUoZSxsLHIpfSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGUsbix0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciByPXEoKSxsPU9lKGUpLGk9TGUocixsKTtpLnRhZz0xLGkucGF5bG9hZD1uLHQhPW51bGwmJihpLmNhbGxiYWNrPXQpLHplKGUsaSksTWUoZSxsLHIpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSxuKXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciB0PXEoKSxyPU9lKGUpLGw9TGUodCxyKTtsLnRhZz0yLG4hPW51bGwmJihsLmNhbGxiYWNrPW4pLHplKGUsbCksTWUoZSxyLHQpfX07ZnVuY3Rpb24gd28oZSxuLHQscixsLGksbyl7cmV0dXJuIGU9ZS5zdGF0ZU5vZGUsdHlwZW9mIGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPT1cImZ1bmN0aW9uXCI/ZS5zaG91bGRDb21wb25lbnRVcGRhdGUocixpLG8pOm4ucHJvdG90eXBlJiZuLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hcHQodCxyKXx8IXB0KGwsaSk6ITB9ZnVuY3Rpb24gUXUoZSxuLHQpe3ZhciByPSExLGw9RmUsaT1uLmNvbnRleHRUeXBlO3JldHVybiB0eXBlb2YgaT09XCJvYmplY3RcIiYmaSE9PW51bGw/aT1yZShpKToobD1KKG4pP0tlOiQuY3VycmVudCxyPW4uY29udGV4dFR5cGVzLGk9KHI9ciE9bnVsbCk/eG4oZSxsKTpGZSksbj1uZXcgbih0LGkpLGUubWVtb2l6ZWRTdGF0ZT1uLnN0YXRlIT09bnVsbCYmbi5zdGF0ZSE9PXZvaWQgMD9uLnN0YXRlOm51bGwsbi51cGRhdGVyPVByLGUuc3RhdGVOb2RlPW4sbi5fcmVhY3RJbnRlcm5hbHM9ZSxyJiYoZT1lLnN0YXRlTm9kZSxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9bCxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWkpLG59ZnVuY3Rpb24gU28oZSxuLHQscil7ZT1uLnN0YXRlLHR5cGVvZiBuLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PVwiZnVuY3Rpb25cIiYmbi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHQsciksdHlwZW9mIG4uVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PVwiZnVuY3Rpb25cIiYmbi5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh0LHIpLG4uc3RhdGUhPT1lJiZQci5lbnF1ZXVlUmVwbGFjZVN0YXRlKG4sbi5zdGF0ZSxudWxsKX1mdW5jdGlvbiBrbChlLG4sdCxyKXt2YXIgbD1lLnN0YXRlTm9kZTtsLnByb3BzPXQsbC5zdGF0ZT1lLm1lbW9pemVkU3RhdGUsbC5yZWZzPUF1LG1pKGUpO3ZhciBpPW4uY29udGV4dFR5cGU7dHlwZW9mIGk9PVwib2JqZWN0XCImJmkhPT1udWxsP2wuY29udGV4dD1yZShpKTooaT1KKG4pP0tlOiQuY3VycmVudCxsLmNvbnRleHQ9eG4oZSxpKSksdnQoZSx0LGwsciksbC5zdGF0ZT1lLm1lbW9pemVkU3RhdGUsaT1uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyx0eXBlb2YgaT09XCJmdW5jdGlvblwiJiYob3IoZSxuLGksdCksbC5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpLHR5cGVvZiBuLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09XCJmdW5jdGlvblwifHx0eXBlb2YgbC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09XCJmdW5jdGlvblwifHx0eXBlb2YgbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IT1cImZ1bmN0aW9uXCImJnR5cGVvZiBsLmNvbXBvbmVudFdpbGxNb3VudCE9XCJmdW5jdGlvblwifHwobj1sLnN0YXRlLHR5cGVvZiBsLmNvbXBvbmVudFdpbGxNb3VudD09XCJmdW5jdGlvblwiJiZsLmNvbXBvbmVudFdpbGxNb3VudCgpLHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQ9PVwiZnVuY3Rpb25cIiYmbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksbiE9PWwuc3RhdGUmJlByLmVucXVldWVSZXBsYWNlU3RhdGUobCxsLnN0YXRlLG51bGwpLHZ0KGUsdCxsLHIpLGwuc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSx0eXBlb2YgbC5jb21wb25lbnREaWRNb3VudD09XCJmdW5jdGlvblwiJiYoZS5mbGFnc3w9NCl9dmFyIFJ0PUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gRm4oZSxuLHQpe2lmKGU9dC5yZWYsZSE9PW51bGwmJnR5cGVvZiBlIT1cImZ1bmN0aW9uXCImJnR5cGVvZiBlIT1cIm9iamVjdFwiKXtpZih0Ll9vd25lcil7aWYodD10Ll9vd25lcix0KXtpZih0LnRhZyE9PTEpdGhyb3cgRXJyb3IodigzMDkpKTt2YXIgcj10LnN0YXRlTm9kZX1pZighcil0aHJvdyBFcnJvcih2KDE0NyxlKSk7dmFyIGw9XCJcIitlO3JldHVybiBuIT09bnVsbCYmbi5yZWYhPT1udWxsJiZ0eXBlb2Ygbi5yZWY9PVwiZnVuY3Rpb25cIiYmbi5yZWYuX3N0cmluZ1JlZj09PWw/bi5yZWY6KG49ZnVuY3Rpb24oaSl7dmFyIG89ci5yZWZzO289PT1BdSYmKG89ci5yZWZzPXt9KSxpPT09bnVsbD9kZWxldGUgb1tsXTpvW2xdPWl9LG4uX3N0cmluZ1JlZj1sLG4pfWlmKHR5cGVvZiBlIT1cInN0cmluZ1wiKXRocm93IEVycm9yKHYoMjg0KSk7aWYoIXQuX293bmVyKXRocm93IEVycm9yKHYoMjkwLGUpKX1yZXR1cm4gZX1mdW5jdGlvbiBEdChlLG4pe2lmKGUudHlwZSE9PVwidGV4dGFyZWFcIil0aHJvdyBFcnJvcih2KDMxLE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT09PVwiW29iamVjdCBPYmplY3RdXCI/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhuKS5qb2luKFwiLCBcIikrXCJ9XCI6bikpfWZ1bmN0aW9uICR1KGUpe2Z1bmN0aW9uIG4oYyxhKXtpZihlKXt2YXIgZj1jLmxhc3RFZmZlY3Q7ZiE9PW51bGw/KGYubmV4dEVmZmVjdD1hLGMubGFzdEVmZmVjdD1hKTpjLmZpcnN0RWZmZWN0PWMubGFzdEVmZmVjdD1hLGEubmV4dEVmZmVjdD1udWxsLGEuZmxhZ3M9OH19ZnVuY3Rpb24gdChjLGEpe2lmKCFlKXJldHVybiBudWxsO2Zvcig7YSE9PW51bGw7KW4oYyxhKSxhPWEuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiByKGMsYSl7Zm9yKGM9bmV3IE1hcDthIT09bnVsbDspYS5rZXkhPT1udWxsP2Muc2V0KGEua2V5LGEpOmMuc2V0KGEuaW5kZXgsYSksYT1hLnNpYmxpbmc7cmV0dXJuIGN9ZnVuY3Rpb24gbChjLGEpe3JldHVybiBjPVVlKGMsYSksYy5pbmRleD0wLGMuc2libGluZz1udWxsLGN9ZnVuY3Rpb24gaShjLGEsZil7cmV0dXJuIGMuaW5kZXg9ZixlPyhmPWMuYWx0ZXJuYXRlLGYhPT1udWxsPyhmPWYuaW5kZXgsZjxhPyhjLmZsYWdzPTIsYSk6Zik6KGMuZmxhZ3M9MixhKSk6YX1mdW5jdGlvbiBvKGMpe3JldHVybiBlJiZjLmFsdGVybmF0ZT09PW51bGwmJihjLmZsYWdzPTIpLGN9ZnVuY3Rpb24gdShjLGEsZixwKXtyZXR1cm4gYT09PW51bGx8fGEudGFnIT09Nj8oYT1KcihmLGMubW9kZSxwKSxhLnJldHVybj1jLGEpOihhPWwoYSxmKSxhLnJldHVybj1jLGEpfWZ1bmN0aW9uIHMoYyxhLGYscCl7cmV0dXJuIGEhPT1udWxsJiZhLmVsZW1lbnRUeXBlPT09Zi50eXBlPyhwPWwoYSxmLnByb3BzKSxwLnJlZj1GbihjLGEsZikscC5yZXR1cm49YyxwKToocD1YdChmLnR5cGUsZi5rZXksZi5wcm9wcyxudWxsLGMubW9kZSxwKSxwLnJlZj1GbihjLGEsZikscC5yZXR1cm49YyxwKX1mdW5jdGlvbiBkKGMsYSxmLHApe3JldHVybiBhPT09bnVsbHx8YS50YWchPT00fHxhLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09Zi5jb250YWluZXJJbmZvfHxhLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PWYuaW1wbGVtZW50YXRpb24/KGE9cXIoZixjLm1vZGUscCksYS5yZXR1cm49YyxhKTooYT1sKGEsZi5jaGlsZHJlbnx8W10pLGEucmV0dXJuPWMsYSl9ZnVuY3Rpb24geShjLGEsZixwLG0pe3JldHVybiBhPT09bnVsbHx8YS50YWchPT03PyhhPUVuKGYsYy5tb2RlLHAsbSksYS5yZXR1cm49YyxhKTooYT1sKGEsZiksYS5yZXR1cm49YyxhKX1mdW5jdGlvbiBDKGMsYSxmKXtpZih0eXBlb2YgYT09XCJzdHJpbmdcInx8dHlwZW9mIGE9PVwibnVtYmVyXCIpcmV0dXJuIGE9SnIoXCJcIithLGMubW9kZSxmKSxhLnJldHVybj1jLGE7aWYodHlwZW9mIGE9PVwib2JqZWN0XCImJmEhPT1udWxsKXtzd2l0Y2goYS4kJHR5cGVvZil7Y2FzZSBBbjpyZXR1cm4gZj1YdChhLnR5cGUsYS5rZXksYS5wcm9wcyxudWxsLGMubW9kZSxmKSxmLnJlZj1GbihjLG51bGwsYSksZi5yZXR1cm49YyxmO2Nhc2UgV2U6cmV0dXJuIGE9cXIoYSxjLm1vZGUsZiksYS5yZXR1cm49YyxhfWlmKFJ0KGEpfHxPbihhKSlyZXR1cm4gYT1FbihhLGMubW9kZSxmLG51bGwpLGEucmV0dXJuPWMsYTtEdChjLGEpfXJldHVybiBudWxsfWZ1bmN0aW9uIGgoYyxhLGYscCl7dmFyIG09YSE9PW51bGw/YS5rZXk6bnVsbDtpZih0eXBlb2YgZj09XCJzdHJpbmdcInx8dHlwZW9mIGY9PVwibnVtYmVyXCIpcmV0dXJuIG0hPT1udWxsP251bGw6dShjLGEsXCJcIitmLHApO2lmKHR5cGVvZiBmPT1cIm9iamVjdFwiJiZmIT09bnVsbCl7c3dpdGNoKGYuJCR0eXBlb2Ype2Nhc2UgQW46cmV0dXJuIGYua2V5PT09bT9mLnR5cGU9PT1rZT95KGMsYSxmLnByb3BzLmNoaWxkcmVuLHAsbSk6cyhjLGEsZixwKTpudWxsO2Nhc2UgV2U6cmV0dXJuIGYua2V5PT09bT9kKGMsYSxmLHApOm51bGx9aWYoUnQoZil8fE9uKGYpKXJldHVybiBtIT09bnVsbD9udWxsOnkoYyxhLGYscCxudWxsKTtEdChjLGYpfXJldHVybiBudWxsfWZ1bmN0aW9uIFMoYyxhLGYscCxtKXtpZih0eXBlb2YgcD09XCJzdHJpbmdcInx8dHlwZW9mIHA9PVwibnVtYmVyXCIpcmV0dXJuIGM9Yy5nZXQoZil8fG51bGwsdShhLGMsXCJcIitwLG0pO2lmKHR5cGVvZiBwPT1cIm9iamVjdFwiJiZwIT09bnVsbCl7c3dpdGNoKHAuJCR0eXBlb2Ype2Nhc2UgQW46cmV0dXJuIGM9Yy5nZXQocC5rZXk9PT1udWxsP2Y6cC5rZXkpfHxudWxsLHAudHlwZT09PWtlP3koYSxjLHAucHJvcHMuY2hpbGRyZW4sbSxwLmtleSk6cyhhLGMscCxtKTtjYXNlIFdlOnJldHVybiBjPWMuZ2V0KHAua2V5PT09bnVsbD9mOnAua2V5KXx8bnVsbCxkKGEsYyxwLG0pfWlmKFJ0KHApfHxPbihwKSlyZXR1cm4gYz1jLmdldChmKXx8bnVsbCx5KGEsYyxwLG0sbnVsbCk7RHQoYSxwKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBrKGMsYSxmLHApe2Zvcih2YXIgbT1udWxsLF89bnVsbCx3PWEsTj1hPTAsVD1udWxsO3chPT1udWxsJiZOPGYubGVuZ3RoO04rKyl7dy5pbmRleD5OPyhUPXcsdz1udWxsKTpUPXcuc2libGluZzt2YXIgUD1oKGMsdyxmW05dLHApO2lmKFA9PT1udWxsKXt3PT09bnVsbCYmKHc9VCk7YnJlYWt9ZSYmdyYmUC5hbHRlcm5hdGU9PT1udWxsJiZuKGMsdyksYT1pKFAsYSxOKSxfPT09bnVsbD9tPVA6Xy5zaWJsaW5nPVAsXz1QLHc9VH1pZihOPT09Zi5sZW5ndGgpcmV0dXJuIHQoYyx3KSxtO2lmKHc9PT1udWxsKXtmb3IoO048Zi5sZW5ndGg7TisrKXc9QyhjLGZbTl0scCksdyE9PW51bGwmJihhPWkodyxhLE4pLF89PT1udWxsP209dzpfLnNpYmxpbmc9dyxfPXcpO3JldHVybiBtfWZvcih3PXIoYyx3KTtOPGYubGVuZ3RoO04rKylUPVModyxjLE4sZltOXSxwKSxUIT09bnVsbCYmKGUmJlQuYWx0ZXJuYXRlIT09bnVsbCYmdy5kZWxldGUoVC5rZXk9PT1udWxsP046VC5rZXkpLGE9aShULGEsTiksXz09PW51bGw/bT1UOl8uc2libGluZz1ULF89VCk7cmV0dXJuIGUmJncuZm9yRWFjaChmdW5jdGlvbihTZSl7cmV0dXJuIG4oYyxTZSl9KSxtfWZ1bmN0aW9uIEUoYyxhLGYscCl7dmFyIG09T24oZik7aWYodHlwZW9mIG0hPVwiZnVuY3Rpb25cIil0aHJvdyBFcnJvcih2KDE1MCkpO2lmKGY9bS5jYWxsKGYpLGY9PW51bGwpdGhyb3cgRXJyb3IodigxNTEpKTtmb3IodmFyIF89bT1udWxsLHc9YSxOPWE9MCxUPW51bGwsUD1mLm5leHQoKTt3IT09bnVsbCYmIVAuZG9uZTtOKyssUD1mLm5leHQoKSl7dy5pbmRleD5OPyhUPXcsdz1udWxsKTpUPXcuc2libGluZzt2YXIgU2U9aChjLHcsUC52YWx1ZSxwKTtpZihTZT09PW51bGwpe3c9PT1udWxsJiYodz1UKTticmVha31lJiZ3JiZTZS5hbHRlcm5hdGU9PT1udWxsJiZuKGMsdyksYT1pKFNlLGEsTiksXz09PW51bGw/bT1TZTpfLnNpYmxpbmc9U2UsXz1TZSx3PVR9aWYoUC5kb25lKXJldHVybiB0KGMsdyksbTtpZih3PT09bnVsbCl7Zm9yKDshUC5kb25lO04rKyxQPWYubmV4dCgpKVA9QyhjLFAudmFsdWUscCksUCE9PW51bGwmJihhPWkoUCxhLE4pLF89PT1udWxsP209UDpfLnNpYmxpbmc9UCxfPVApO3JldHVybiBtfWZvcih3PXIoYyx3KTshUC5kb25lO04rKyxQPWYubmV4dCgpKVA9Uyh3LGMsTixQLnZhbHVlLHApLFAhPT1udWxsJiYoZSYmUC5hbHRlcm5hdGUhPT1udWxsJiZ3LmRlbGV0ZShQLmtleT09PW51bGw/TjpQLmtleSksYT1pKFAsYSxOKSxfPT09bnVsbD9tPVA6Xy5zaWJsaW5nPVAsXz1QKTtyZXR1cm4gZSYmdy5mb3JFYWNoKGZ1bmN0aW9uKF9zKXtyZXR1cm4gbihjLF9zKX0pLG19cmV0dXJuIGZ1bmN0aW9uKGMsYSxmLHApe3ZhciBtPXR5cGVvZiBmPT1cIm9iamVjdFwiJiZmIT09bnVsbCYmZi50eXBlPT09a2UmJmYua2V5PT09bnVsbDttJiYoZj1mLnByb3BzLmNoaWxkcmVuKTt2YXIgXz10eXBlb2YgZj09XCJvYmplY3RcIiYmZiE9PW51bGw7aWYoXylzd2l0Y2goZi4kJHR5cGVvZil7Y2FzZSBBbjplOntmb3IoXz1mLmtleSxtPWE7bSE9PW51bGw7KXtpZihtLmtleT09PV8pe3N3aXRjaChtLnRhZyl7Y2FzZSA3OmlmKGYudHlwZT09PWtlKXt0KGMsbS5zaWJsaW5nKSxhPWwobSxmLnByb3BzLmNoaWxkcmVuKSxhLnJldHVybj1jLGM9YTticmVhayBlfWJyZWFrO2RlZmF1bHQ6aWYobS5lbGVtZW50VHlwZT09PWYudHlwZSl7dChjLG0uc2libGluZyksYT1sKG0sZi5wcm9wcyksYS5yZWY9Rm4oYyxtLGYpLGEucmV0dXJuPWMsYz1hO2JyZWFrIGV9fXQoYyxtKTticmVha31lbHNlIG4oYyxtKTttPW0uc2libGluZ31mLnR5cGU9PT1rZT8oYT1FbihmLnByb3BzLmNoaWxkcmVuLGMubW9kZSxwLGYua2V5KSxhLnJldHVybj1jLGM9YSk6KHA9WHQoZi50eXBlLGYua2V5LGYucHJvcHMsbnVsbCxjLm1vZGUscCkscC5yZWY9Rm4oYyxhLGYpLHAucmV0dXJuPWMsYz1wKX1yZXR1cm4gbyhjKTtjYXNlIFdlOmU6e2ZvcihtPWYua2V5O2EhPT1udWxsOyl7aWYoYS5rZXk9PT1tKWlmKGEudGFnPT09NCYmYS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PWYuY29udGFpbmVySW5mbyYmYS5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT1mLmltcGxlbWVudGF0aW9uKXt0KGMsYS5zaWJsaW5nKSxhPWwoYSxmLmNoaWxkcmVufHxbXSksYS5yZXR1cm49YyxjPWE7YnJlYWsgZX1lbHNle3QoYyxhKTticmVha31lbHNlIG4oYyxhKTthPWEuc2libGluZ31hPXFyKGYsYy5tb2RlLHApLGEucmV0dXJuPWMsYz1hfXJldHVybiBvKGMpfWlmKHR5cGVvZiBmPT1cInN0cmluZ1wifHx0eXBlb2YgZj09XCJudW1iZXJcIilyZXR1cm4gZj1cIlwiK2YsYSE9PW51bGwmJmEudGFnPT09Nj8odChjLGEuc2libGluZyksYT1sKGEsZiksYS5yZXR1cm49YyxjPWEpOih0KGMsYSksYT1KcihmLGMubW9kZSxwKSxhLnJldHVybj1jLGM9YSksbyhjKTtpZihSdChmKSlyZXR1cm4gayhjLGEsZixwKTtpZihPbihmKSlyZXR1cm4gRShjLGEsZixwKTtpZihfJiZEdChjLGYpLHR5cGVvZiBmPlwidVwiJiYhbSlzd2l0Y2goYy50YWcpe2Nhc2UgMTpjYXNlIDIyOmNhc2UgMDpjYXNlIDExOmNhc2UgMTU6dGhyb3cgRXJyb3IodigxNTIsZG4oYy50eXBlKXx8XCJDb21wb25lbnRcIikpfXJldHVybiB0KGMsYSl9fXZhciB1cj0kdSghMCksWXU9JHUoITEpLGt0PXt9LGNlPVZlKGt0KSx5dD1WZShrdCksZ3Q9VmUoa3QpO2Z1bmN0aW9uICRlKGUpe2lmKGU9PT1rdCl0aHJvdyBFcnJvcih2KDE3NCkpO3JldHVybiBlfWZ1bmN0aW9uIHhsKGUsbil7c3dpdGNoKEQoZ3QsbiksRCh5dCxlKSxEKGNlLGt0KSxlPW4ubm9kZVR5cGUsZSl7Y2FzZSA5OmNhc2UgMTE6bj0obj1uLmRvY3VtZW50RWxlbWVudCk/bi5uYW1lc3BhY2VVUkk6dWwobnVsbCxcIlwiKTticmVhaztkZWZhdWx0OmU9ZT09PTg/bi5wYXJlbnROb2RlOm4sbj1lLm5hbWVzcGFjZVVSSXx8bnVsbCxlPWUudGFnTmFtZSxuPXVsKG4sZSl9TyhjZSksRChjZSxuKX1mdW5jdGlvbiBfbigpe08oY2UpLE8oeXQpLE8oZ3QpfWZ1bmN0aW9uIEVvKGUpeyRlKGd0LmN1cnJlbnQpO3ZhciBuPSRlKGNlLmN1cnJlbnQpLHQ9dWwobixlLnR5cGUpO24hPT10JiYoRCh5dCxlKSxEKGNlLHQpKX1mdW5jdGlvbiBoaShlKXt5dC5jdXJyZW50PT09ZSYmKE8oY2UpLE8oeXQpKX12YXIgUj1WZSgwKTtmdW5jdGlvbiBzcihlKXtmb3IodmFyIG49ZTtuIT09bnVsbDspe2lmKG4udGFnPT09MTMpe3ZhciB0PW4ubWVtb2l6ZWRTdGF0ZTtpZih0IT09bnVsbCYmKHQ9dC5kZWh5ZHJhdGVkLHQ9PT1udWxsfHx0LmRhdGE9PT1cIiQ/XCJ8fHQuZGF0YT09PVwiJCFcIikpcmV0dXJuIG59ZWxzZSBpZihuLnRhZz09PTE5JiZuLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIhPT12b2lkIDApe2lmKChuLmZsYWdzJjY0KSE9PTApcmV0dXJuIG59ZWxzZSBpZihuLmNoaWxkIT09bnVsbCl7bi5jaGlsZC5yZXR1cm49bixuPW4uY2hpbGQ7Y29udGludWV9aWYobj09PWUpYnJlYWs7Zm9yKDtuLnNpYmxpbmc9PT1udWxsOyl7aWYobi5yZXR1cm49PT1udWxsfHxuLnJldHVybj09PWUpcmV0dXJuIG51bGw7bj1uLnJldHVybn1uLnNpYmxpbmcucmV0dXJuPW4ucmV0dXJuLG49bi5zaWJsaW5nfXJldHVybiBudWxsfXZhciB2ZT1udWxsLF9lPW51bGwsZGU9ITE7ZnVuY3Rpb24gWHUoZSxuKXt2YXIgdD1uZSg1LG51bGwsbnVsbCwwKTt0LmVsZW1lbnRUeXBlPVwiREVMRVRFRFwiLHQudHlwZT1cIkRFTEVURURcIix0LnN0YXRlTm9kZT1uLHQucmV0dXJuPWUsdC5mbGFncz04LGUubGFzdEVmZmVjdCE9PW51bGw/KGUubGFzdEVmZmVjdC5uZXh0RWZmZWN0PXQsZS5sYXN0RWZmZWN0PXQpOmUuZmlyc3RFZmZlY3Q9ZS5sYXN0RWZmZWN0PXR9ZnVuY3Rpb24ga28oZSxuKXtzd2l0Y2goZS50YWcpe2Nhc2UgNTp2YXIgdD1lLnR5cGU7cmV0dXJuIG49bi5ub2RlVHlwZSE9PTF8fHQudG9Mb3dlckNhc2UoKSE9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9udWxsOm4sbiE9PW51bGw/KGUuc3RhdGVOb2RlPW4sITApOiExO2Nhc2UgNjpyZXR1cm4gbj1lLnBlbmRpbmdQcm9wcz09PVwiXCJ8fG4ubm9kZVR5cGUhPT0zP251bGw6bixuIT09bnVsbD8oZS5zdGF0ZU5vZGU9biwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBDbChlKXtpZihkZSl7dmFyIG49X2U7aWYobil7dmFyIHQ9bjtpZigha28oZSxuKSl7aWYobj12bih0Lm5leHRTaWJsaW5nKSwhbnx8IWtvKGUsbikpe2UuZmxhZ3M9ZS5mbGFncyYtMTAyNXwyLGRlPSExLHZlPWU7cmV0dXJufVh1KHZlLHQpfXZlPWUsX2U9dm4obi5maXJzdENoaWxkKX1lbHNlIGUuZmxhZ3M9ZS5mbGFncyYtMTAyNXwyLGRlPSExLHZlPWV9fWZ1bmN0aW9uIHhvKGUpe2ZvcihlPWUucmV0dXJuO2UhPT1udWxsJiZlLnRhZyE9PTUmJmUudGFnIT09MyYmZS50YWchPT0xMzspZT1lLnJldHVybjt2ZT1lfWZ1bmN0aW9uIEl0KGUpe2lmKGUhPT12ZSlyZXR1cm4hMTtpZighZGUpcmV0dXJuIHhvKGUpLGRlPSEwLCExO3ZhciBuPWUudHlwZTtpZihlLnRhZyE9PTV8fG4hPT1cImhlYWRcIiYmbiE9PVwiYm9keVwiJiYhZ2wobixlLm1lbW9pemVkUHJvcHMpKWZvcihuPV9lO247KVh1KGUsbiksbj12bihuLm5leHRTaWJsaW5nKTtpZih4byhlKSxlLnRhZz09PTEzKXtpZihlPWUubWVtb2l6ZWRTdGF0ZSxlPWUhPT1udWxsP2UuZGVoeWRyYXRlZDpudWxsLCFlKXRocm93IEVycm9yKHYoMzE3KSk7ZTp7Zm9yKGU9ZS5uZXh0U2libGluZyxuPTA7ZTspe2lmKGUubm9kZVR5cGU9PT04KXt2YXIgdD1lLmRhdGE7aWYodD09PVwiLyRcIil7aWYobj09PTApe19lPXZuKGUubmV4dFNpYmxpbmcpO2JyZWFrIGV9bi0tfWVsc2UgdCE9PVwiJFwiJiZ0IT09XCIkIVwiJiZ0IT09XCIkP1wifHxuKyt9ZT1lLm5leHRTaWJsaW5nfV9lPW51bGx9fWVsc2UgX2U9dmU/dm4oZS5zdGF0ZU5vZGUubmV4dFNpYmxpbmcpOm51bGw7cmV0dXJuITB9ZnVuY3Rpb24gWHIoKXtfZT12ZT1udWxsLGRlPSExfXZhciBnbj1bXTtmdW5jdGlvbiB2aSgpe2Zvcih2YXIgZT0wO2U8Z24ubGVuZ3RoO2UrKylnbltlXS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1udWxsO2duLmxlbmd0aD0wfXZhciBudD1xZS5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLHRlPXFlLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLHd0PTAsST1udWxsLFc9bnVsbCxWPW51bGwsYXI9ITEsdHQ9ITE7ZnVuY3Rpb24gSygpe3Rocm93IEVycm9yKHYoMzIxKSl9ZnVuY3Rpb24geWkoZSxuKXtpZihuPT09bnVsbClyZXR1cm4hMTtmb3IodmFyIHQ9MDt0PG4ubGVuZ3RoJiZ0PGUubGVuZ3RoO3QrKylpZighZWUoZVt0XSxuW3RdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBnaShlLG4sdCxyLGwsaSl7aWYod3Q9aSxJPW4sbi5tZW1vaXplZFN0YXRlPW51bGwsbi51cGRhdGVRdWV1ZT1udWxsLG4ubGFuZXM9MCxudC5jdXJyZW50PWU9PT1udWxsfHxlLm1lbW9pemVkU3RhdGU9PT1udWxsP3FhOmJhLGU9dChyLGwpLHR0KXtpPTA7ZG97aWYodHQ9ITEsISgyNT5pKSl0aHJvdyBFcnJvcih2KDMwMSkpO2krPTEsVj1XPW51bGwsbi51cGRhdGVRdWV1ZT1udWxsLG50LmN1cnJlbnQ9ZWYsZT10KHIsbCl9d2hpbGUodHQpfWlmKG50LmN1cnJlbnQ9cHIsbj1XIT09bnVsbCYmVy5uZXh0IT09bnVsbCx3dD0wLFY9Vz1JPW51bGwsYXI9ITEsbil0aHJvdyBFcnJvcih2KDMwMCkpO3JldHVybiBlfWZ1bmN0aW9uIFllKCl7dmFyIGU9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxiYXNlUXVldWU6bnVsbCxxdWV1ZTpudWxsLG5leHQ6bnVsbH07cmV0dXJuIFY9PT1udWxsP0kubWVtb2l6ZWRTdGF0ZT1WPWU6Vj1WLm5leHQ9ZSxWfWZ1bmN0aW9uIGVuKCl7aWYoVz09PW51bGwpe3ZhciBlPUkuYWx0ZXJuYXRlO2U9ZSE9PW51bGw/ZS5tZW1vaXplZFN0YXRlOm51bGx9ZWxzZSBlPVcubmV4dDt2YXIgbj1WPT09bnVsbD9JLm1lbW9pemVkU3RhdGU6Vi5uZXh0O2lmKG4hPT1udWxsKVY9bixXPWU7ZWxzZXtpZihlPT09bnVsbCl0aHJvdyBFcnJvcih2KDMxMCkpO1c9ZSxlPXttZW1vaXplZFN0YXRlOlcubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6Vy5iYXNlU3RhdGUsYmFzZVF1ZXVlOlcuYmFzZVF1ZXVlLHF1ZXVlOlcucXVldWUsbmV4dDpudWxsfSxWPT09bnVsbD9JLm1lbW9pemVkU3RhdGU9Vj1lOlY9Vi5uZXh0PWV9cmV0dXJuIFZ9ZnVuY3Rpb24gYWUoZSxuKXtyZXR1cm4gdHlwZW9mIG49PVwiZnVuY3Rpb25cIj9uKGUpOm59ZnVuY3Rpb24gam4oZSl7dmFyIG49ZW4oKSx0PW4ucXVldWU7aWYodD09PW51bGwpdGhyb3cgRXJyb3IodigzMTEpKTt0Lmxhc3RSZW5kZXJlZFJlZHVjZXI9ZTt2YXIgcj1XLGw9ci5iYXNlUXVldWUsaT10LnBlbmRpbmc7aWYoaSE9PW51bGwpe2lmKGwhPT1udWxsKXt2YXIgbz1sLm5leHQ7bC5uZXh0PWkubmV4dCxpLm5leHQ9b31yLmJhc2VRdWV1ZT1sPWksdC5wZW5kaW5nPW51bGx9aWYobCE9PW51bGwpe2w9bC5uZXh0LHI9ci5iYXNlU3RhdGU7dmFyIHU9bz1pPW51bGwscz1sO2Rve3ZhciBkPXMubGFuZTtpZigod3QmZCk9PT1kKXUhPT1udWxsJiYodT11Lm5leHQ9e2xhbmU6MCxhY3Rpb246cy5hY3Rpb24sZWFnZXJSZWR1Y2VyOnMuZWFnZXJSZWR1Y2VyLGVhZ2VyU3RhdGU6cy5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLHI9cy5lYWdlclJlZHVjZXI9PT1lP3MuZWFnZXJTdGF0ZTplKHIscy5hY3Rpb24pO2Vsc2V7dmFyIHk9e2xhbmU6ZCxhY3Rpb246cy5hY3Rpb24sZWFnZXJSZWR1Y2VyOnMuZWFnZXJSZWR1Y2VyLGVhZ2VyU3RhdGU6cy5lYWdlclN0YXRlLG5leHQ6bnVsbH07dT09PW51bGw/KG89dT15LGk9cik6dT11Lm5leHQ9eSxJLmxhbmVzfD1kLHh0fD1kfXM9cy5uZXh0fXdoaWxlKHMhPT1udWxsJiZzIT09bCk7dT09PW51bGw/aT1yOnUubmV4dD1vLGVlKHIsbi5tZW1vaXplZFN0YXRlKXx8KHVlPSEwKSxuLm1lbW9pemVkU3RhdGU9cixuLmJhc2VTdGF0ZT1pLG4uYmFzZVF1ZXVlPXUsdC5sYXN0UmVuZGVyZWRTdGF0ZT1yfXJldHVybltuLm1lbW9pemVkU3RhdGUsdC5kaXNwYXRjaF19ZnVuY3Rpb24gVW4oZSl7dmFyIG49ZW4oKSx0PW4ucXVldWU7aWYodD09PW51bGwpdGhyb3cgRXJyb3IodigzMTEpKTt0Lmxhc3RSZW5kZXJlZFJlZHVjZXI9ZTt2YXIgcj10LmRpc3BhdGNoLGw9dC5wZW5kaW5nLGk9bi5tZW1vaXplZFN0YXRlO2lmKGwhPT1udWxsKXt0LnBlbmRpbmc9bnVsbDt2YXIgbz1sPWwubmV4dDtkbyBpPWUoaSxvLmFjdGlvbiksbz1vLm5leHQ7d2hpbGUobyE9PWwpO2VlKGksbi5tZW1vaXplZFN0YXRlKXx8KHVlPSEwKSxuLm1lbW9pemVkU3RhdGU9aSxuLmJhc2VRdWV1ZT09PW51bGwmJihuLmJhc2VTdGF0ZT1pKSx0Lmxhc3RSZW5kZXJlZFN0YXRlPWl9cmV0dXJuW2kscl19ZnVuY3Rpb24gQ28oZSxuLHQpe3ZhciByPW4uX2dldFZlcnNpb247cj1yKG4uX3NvdXJjZSk7dmFyIGw9bi5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeTtpZihsIT09bnVsbD9lPWw9PT1yOihlPWUubXV0YWJsZVJlYWRMYW5lcywoZT0od3QmZSk9PT1lKSYmKG4uX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk9cixnbi5wdXNoKG4pKSksZSlyZXR1cm4gdChuLl9zb3VyY2UpO3Rocm93IGduLnB1c2gobiksRXJyb3IodigzNTApKX1mdW5jdGlvbiBLdShlLG4sdCxyKXt2YXIgbD1ZO2lmKGw9PT1udWxsKXRocm93IEVycm9yKHYoMzQ5KSk7dmFyIGk9bi5fZ2V0VmVyc2lvbixvPWkobi5fc291cmNlKSx1PW50LmN1cnJlbnQscz11LnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJuIENvKGwsbix0KX0pLGQ9c1sxXSx5PXNbMF07cz1WO3ZhciBDPWUubWVtb2l6ZWRTdGF0ZSxoPUMucmVmcyxTPWguZ2V0U25hcHNob3Qsaz1DLnNvdXJjZTtDPUMuc3Vic2NyaWJlO3ZhciBFPUk7cmV0dXJuIGUubWVtb2l6ZWRTdGF0ZT17cmVmczpoLHNvdXJjZTpuLHN1YnNjcmliZTpyfSx1LnVzZUVmZmVjdChmdW5jdGlvbigpe2guZ2V0U25hcHNob3Q9dCxoLnNldFNuYXBzaG90PWQ7dmFyIGM9aShuLl9zb3VyY2UpO2lmKCFlZShvLGMpKXtjPXQobi5fc291cmNlKSxlZSh5LGMpfHwoZChjKSxjPU9lKEUpLGwubXV0YWJsZVJlYWRMYW5lc3w9YyZsLnBlbmRpbmdMYW5lcyksYz1sLm11dGFibGVSZWFkTGFuZXMsbC5lbnRhbmdsZWRMYW5lc3w9Yztmb3IodmFyIGE9bC5lbnRhbmdsZW1lbnRzLGY9YzswPGY7KXt2YXIgcD0zMS1JZShmKSxtPTE8PHA7YVtwXXw9YyxmJj1+bX19fSxbdCxuLHJdKSx1LnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiByKG4uX3NvdXJjZSxmdW5jdGlvbigpe3ZhciBjPWguZ2V0U25hcHNob3QsYT1oLnNldFNuYXBzaG90O3RyeXthKGMobi5fc291cmNlKSk7dmFyIGY9T2UoRSk7bC5tdXRhYmxlUmVhZExhbmVzfD1mJmwucGVuZGluZ0xhbmVzfWNhdGNoKHApe2EoZnVuY3Rpb24oKXt0aHJvdyBwfSl9fSl9LFtuLHJdKSxlZShTLHQpJiZlZShrLG4pJiZlZShDLHIpfHwoZT17cGVuZGluZzpudWxsLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphZSxsYXN0UmVuZGVyZWRTdGF0ZTp5fSxlLmRpc3BhdGNoPWQ9RWkuYmluZChudWxsLEksZSkscy5xdWV1ZT1lLHMuYmFzZVF1ZXVlPW51bGwseT1DbyhsLG4sdCkscy5tZW1vaXplZFN0YXRlPXMuYmFzZVN0YXRlPXkpLHl9ZnVuY3Rpb24gR3UoZSxuLHQpe3ZhciByPWVuKCk7cmV0dXJuIEt1KHIsZSxuLHQpfWZ1bmN0aW9uIFZuKGUpe3ZhciBuPVllKCk7cmV0dXJuIHR5cGVvZiBlPT1cImZ1bmN0aW9uXCImJihlPWUoKSksbi5tZW1vaXplZFN0YXRlPW4uYmFzZVN0YXRlPWUsZT1uLnF1ZXVlPXtwZW5kaW5nOm51bGwsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmFlLGxhc3RSZW5kZXJlZFN0YXRlOmV9LGU9ZS5kaXNwYXRjaD1FaS5iaW5kKG51bGwsSSxlKSxbbi5tZW1vaXplZFN0YXRlLGVdfWZ1bmN0aW9uIGZyKGUsbix0LHIpe3JldHVybiBlPXt0YWc6ZSxjcmVhdGU6bixkZXN0cm95OnQsZGVwczpyLG5leHQ6bnVsbH0sbj1JLnVwZGF0ZVF1ZXVlLG49PT1udWxsPyhuPXtsYXN0RWZmZWN0Om51bGx9LEkudXBkYXRlUXVldWU9bixuLmxhc3RFZmZlY3Q9ZS5uZXh0PWUpOih0PW4ubGFzdEVmZmVjdCx0PT09bnVsbD9uLmxhc3RFZmZlY3Q9ZS5uZXh0PWU6KHI9dC5uZXh0LHQubmV4dD1lLGUubmV4dD1yLG4ubGFzdEVmZmVjdD1lKSksZX1mdW5jdGlvbiBfbyhlKXt2YXIgbj1ZZSgpO3JldHVybiBlPXtjdXJyZW50OmV9LG4ubWVtb2l6ZWRTdGF0ZT1lfWZ1bmN0aW9uIGNyKCl7cmV0dXJuIGVuKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBfbChlLG4sdCxyKXt2YXIgbD1ZZSgpO0kuZmxhZ3N8PWUsbC5tZW1vaXplZFN0YXRlPWZyKDF8bix0LHZvaWQgMCxyPT09dm9pZCAwP251bGw6cil9ZnVuY3Rpb24gd2koZSxuLHQscil7dmFyIGw9ZW4oKTtyPXI9PT12b2lkIDA/bnVsbDpyO3ZhciBpPXZvaWQgMDtpZihXIT09bnVsbCl7dmFyIG89Vy5tZW1vaXplZFN0YXRlO2lmKGk9by5kZXN0cm95LHIhPT1udWxsJiZ5aShyLG8uZGVwcykpe2ZyKG4sdCxpLHIpO3JldHVybn19SS5mbGFnc3w9ZSxsLm1lbW9pemVkU3RhdGU9ZnIoMXxuLHQsaSxyKX1mdW5jdGlvbiBObyhlLG4pe3JldHVybiBfbCg1MTYsNCxlLG4pfWZ1bmN0aW9uIGRyKGUsbil7cmV0dXJuIHdpKDUxNiw0LGUsbil9ZnVuY3Rpb24gWnUoZSxuKXtyZXR1cm4gd2koNCwyLGUsbil9ZnVuY3Rpb24gSnUoZSxuKXtpZih0eXBlb2Ygbj09XCJmdW5jdGlvblwiKXJldHVybiBlPWUoKSxuKGUpLGZ1bmN0aW9uKCl7bihudWxsKX07aWYobiE9bnVsbClyZXR1cm4gZT1lKCksbi5jdXJyZW50PWUsZnVuY3Rpb24oKXtuLmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gcXUoZSxuLHQpe3JldHVybiB0PXQhPW51bGw/dC5jb25jYXQoW2VdKTpudWxsLHdpKDQsMixKdS5iaW5kKG51bGwsbixlKSx0KX1mdW5jdGlvbiBTaSgpe31mdW5jdGlvbiBidShlLG4pe3ZhciB0PWVuKCk7bj1uPT09dm9pZCAwP251bGw6bjt2YXIgcj10Lm1lbW9pemVkU3RhdGU7cmV0dXJuIHIhPT1udWxsJiZuIT09bnVsbCYmeWkobixyWzFdKT9yWzBdOih0Lm1lbW9pemVkU3RhdGU9W2Usbl0sZSl9ZnVuY3Rpb24gZXMoZSxuKXt2YXIgdD1lbigpO249bj09PXZvaWQgMD9udWxsOm47dmFyIHI9dC5tZW1vaXplZFN0YXRlO3JldHVybiByIT09bnVsbCYmbiE9PW51bGwmJnlpKG4sclsxXSk/clswXTooZT1lKCksdC5tZW1vaXplZFN0YXRlPVtlLG5dLGUpfWZ1bmN0aW9uIEphKGUsbil7dmFyIHQ9Q24oKTtHZSg5OD50Pzk4OnQsZnVuY3Rpb24oKXtlKCEwKX0pLEdlKDk3PHQ/OTc6dCxmdW5jdGlvbigpe3ZhciByPXRlLnRyYW5zaXRpb247dGUudHJhbnNpdGlvbj0xO3RyeXtlKCExKSxuKCl9ZmluYWxseXt0ZS50cmFuc2l0aW9uPXJ9fSl9ZnVuY3Rpb24gRWkoZSxuLHQpe3ZhciByPXEoKSxsPU9lKGUpLGk9e2xhbmU6bCxhY3Rpb246dCxlYWdlclJlZHVjZXI6bnVsbCxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfSxvPW4ucGVuZGluZztpZihvPT09bnVsbD9pLm5leHQ9aTooaS5uZXh0PW8ubmV4dCxvLm5leHQ9aSksbi5wZW5kaW5nPWksbz1lLmFsdGVybmF0ZSxlPT09SXx8byE9PW51bGwmJm89PT1JKXR0PWFyPSEwO2Vsc2V7aWYoZS5sYW5lcz09PTAmJihvPT09bnVsbHx8by5sYW5lcz09PTApJiYobz1uLmxhc3RSZW5kZXJlZFJlZHVjZXIsbyE9PW51bGwpKXRyeXt2YXIgdT1uLmxhc3RSZW5kZXJlZFN0YXRlLHM9byh1LHQpO2lmKGkuZWFnZXJSZWR1Y2VyPW8saS5lYWdlclN0YXRlPXMsZWUocyx1KSlyZXR1cm59Y2F0Y2h7fWZpbmFsbHl7fU1lKGUsbCxyKX19dmFyIHByPXtyZWFkQ29udGV4dDpyZSx1c2VDYWxsYmFjazpLLHVzZUNvbnRleHQ6Syx1c2VFZmZlY3Q6Syx1c2VJbXBlcmF0aXZlSGFuZGxlOkssdXNlTGF5b3V0RWZmZWN0OkssdXNlTWVtbzpLLHVzZVJlZHVjZXI6Syx1c2VSZWY6Syx1c2VTdGF0ZTpLLHVzZURlYnVnVmFsdWU6Syx1c2VEZWZlcnJlZFZhbHVlOkssdXNlVHJhbnNpdGlvbjpLLHVzZU11dGFibGVTb3VyY2U6Syx1c2VPcGFxdWVJZGVudGlmaWVyOkssdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxxYT17cmVhZENvbnRleHQ6cmUsdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gWWUoKS5tZW1vaXplZFN0YXRlPVtlLG49PT12b2lkIDA/bnVsbDpuXSxlfSx1c2VDb250ZXh0OnJlLHVzZUVmZmVjdDpObyx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsbix0KXtyZXR1cm4gdD10IT1udWxsP3QuY29uY2F0KFtlXSk6bnVsbCxfbCg0LDIsSnUuYmluZChudWxsLG4sZSksdCl9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLG4pe3JldHVybiBfbCg0LDIsZSxuKX0sdXNlTWVtbzpmdW5jdGlvbihlLG4pe3ZhciB0PVllKCk7cmV0dXJuIG49bj09PXZvaWQgMD9udWxsOm4sZT1lKCksdC5tZW1vaXplZFN0YXRlPVtlLG5dLGV9LHVzZVJlZHVjZXI6ZnVuY3Rpb24oZSxuLHQpe3ZhciByPVllKCk7cmV0dXJuIG49dCE9PXZvaWQgMD90KG4pOm4sci5tZW1vaXplZFN0YXRlPXIuYmFzZVN0YXRlPW4sZT1yLnF1ZXVlPXtwZW5kaW5nOm51bGwsZGlzcGF0Y2g6bnVsbCxsYXN0UmVuZGVyZWRSZWR1Y2VyOmUsbGFzdFJlbmRlcmVkU3RhdGU6bn0sZT1lLmRpc3BhdGNoPUVpLmJpbmQobnVsbCxJLGUpLFtyLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpfbyx1c2VTdGF0ZTpWbix1c2VEZWJ1Z1ZhbHVlOlNpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIG49Vm4oZSksdD1uWzBdLHI9blsxXTtyZXR1cm4gTm8oZnVuY3Rpb24oKXt2YXIgbD10ZS50cmFuc2l0aW9uO3RlLnRyYW5zaXRpb249MTt0cnl7cihlKX1maW5hbGx5e3RlLnRyYW5zaXRpb249bH19LFtlXSksdH0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPVZuKCExKSxuPWVbMF07cmV0dXJuIGU9SmEuYmluZChudWxsLGVbMV0pLF9vKGUpLFtlLG5dfSx1c2VNdXRhYmxlU291cmNlOmZ1bmN0aW9uKGUsbix0KXt2YXIgcj1ZZSgpO3JldHVybiByLm1lbW9pemVkU3RhdGU9e3JlZnM6e2dldFNuYXBzaG90Om4sc2V0U25hcHNob3Q6bnVsbH0sc291cmNlOmUsc3Vic2NyaWJlOnR9LEt1KHIsZSxuLHQpfSx1c2VPcGFxdWVJZGVudGlmaWVyOmZ1bmN0aW9uKCl7aWYoZGUpe3ZhciBlPSExLG49JGEoZnVuY3Rpb24oKXt0aHJvdyBlfHwoZT0hMCx0KFwicjpcIisoUXIrKykudG9TdHJpbmcoMzYpKSksRXJyb3IodigzNTUpKX0pLHQ9Vm4obilbMV07cmV0dXJuKEkubW9kZSYyKT09PTAmJihJLmZsYWdzfD01MTYsZnIoNSxmdW5jdGlvbigpe3QoXCJyOlwiKyhRcisrKS50b1N0cmluZygzNikpfSx2b2lkIDAsbnVsbCkpLG59cmV0dXJuIG49XCJyOlwiKyhRcisrKS50b1N0cmluZygzNiksVm4obiksbn0sdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxiYT17cmVhZENvbnRleHQ6cmUsdXNlQ2FsbGJhY2s6YnUsdXNlQ29udGV4dDpyZSx1c2VFZmZlY3Q6ZHIsdXNlSW1wZXJhdGl2ZUhhbmRsZTpxdSx1c2VMYXlvdXRFZmZlY3Q6WnUsdXNlTWVtbzplcyx1c2VSZWR1Y2VyOmpuLHVzZVJlZjpjcix1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBqbihhZSl9LHVzZURlYnVnVmFsdWU6U2ksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgbj1qbihhZSksdD1uWzBdLHI9blsxXTtyZXR1cm4gZHIoZnVuY3Rpb24oKXt2YXIgbD10ZS50cmFuc2l0aW9uO3RlLnRyYW5zaXRpb249MTt0cnl7cihlKX1maW5hbGx5e3RlLnRyYW5zaXRpb249bH19LFtlXSksdH0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPWpuKGFlKVswXTtyZXR1cm5bY3IoKS5jdXJyZW50LGVdfSx1c2VNdXRhYmxlU291cmNlOkd1LHVzZU9wYXF1ZUlkZW50aWZpZXI6ZnVuY3Rpb24oKXtyZXR1cm4gam4oYWUpWzBdfSx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LGVmPXtyZWFkQ29udGV4dDpyZSx1c2VDYWxsYmFjazpidSx1c2VDb250ZXh0OnJlLHVzZUVmZmVjdDpkcix1c2VJbXBlcmF0aXZlSGFuZGxlOnF1LHVzZUxheW91dEVmZmVjdDpadSx1c2VNZW1vOmVzLHVzZVJlZHVjZXI6VW4sdXNlUmVmOmNyLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIFVuKGFlKX0sdXNlRGVidWdWYWx1ZTpTaSx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciBuPVVuKGFlKSx0PW5bMF0scj1uWzFdO3JldHVybiBkcihmdW5jdGlvbigpe3ZhciBsPXRlLnRyYW5zaXRpb247dGUudHJhbnNpdGlvbj0xO3RyeXtyKGUpfWZpbmFsbHl7dGUudHJhbnNpdGlvbj1sfX0sW2VdKSx0fSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9VW4oYWUpWzBdO3JldHVybltjcigpLmN1cnJlbnQsZV19LHVzZU11dGFibGVTb3VyY2U6R3UsdXNlT3BhcXVlSWRlbnRpZmllcjpmdW5jdGlvbigpe3JldHVybiBVbihhZSlbMF19LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sbmY9cWUuUmVhY3RDdXJyZW50T3duZXIsdWU9ITE7ZnVuY3Rpb24gRyhlLG4sdCxyKXtuLmNoaWxkPWU9PT1udWxsP1l1KG4sbnVsbCx0LHIpOnVyKG4sZS5jaGlsZCx0LHIpfWZ1bmN0aW9uIFBvKGUsbix0LHIsbCl7dD10LnJlbmRlcjt2YXIgaT1uLnJlZjtyZXR1cm4geW4obixsKSxyPWdpKGUsbix0LHIsaSxsKSxlIT09bnVsbCYmIXVlPyhuLnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsbi5mbGFncyY9LTUxNyxlLmxhbmVzJj1+bCx5ZShlLG4sbCkpOihuLmZsYWdzfD0xLEcoZSxuLHIsbCksbi5jaGlsZCl9ZnVuY3Rpb24gVG8oZSxuLHQscixsLGkpe2lmKGU9PT1udWxsKXt2YXIgbz10LnR5cGU7cmV0dXJuIHR5cGVvZiBvPT1cImZ1bmN0aW9uXCImJiFQaShvKSYmby5kZWZhdWx0UHJvcHM9PT12b2lkIDAmJnQuY29tcGFyZT09PW51bGwmJnQuZGVmYXVsdFByb3BzPT09dm9pZCAwPyhuLnRhZz0xNSxuLnR5cGU9byxucyhlLG4sbyxyLGwsaSkpOihlPVh0KHQudHlwZSxudWxsLHIsbixuLm1vZGUsaSksZS5yZWY9bi5yZWYsZS5yZXR1cm49bixuLmNoaWxkPWUpfXJldHVybiBvPWUuY2hpbGQsKGwmaSk9PT0wJiYobD1vLm1lbW9pemVkUHJvcHMsdD10LmNvbXBhcmUsdD10IT09bnVsbD90OnB0LHQobCxyKSYmZS5yZWY9PT1uLnJlZik/eWUoZSxuLGkpOihuLmZsYWdzfD0xLGU9VWUobyxyKSxlLnJlZj1uLnJlZixlLnJldHVybj1uLG4uY2hpbGQ9ZSl9ZnVuY3Rpb24gbnMoZSxuLHQscixsLGkpe2lmKGUhPT1udWxsJiZwdChlLm1lbW9pemVkUHJvcHMscikmJmUucmVmPT09bi5yZWYpaWYodWU9ITEsKGkmbCkhPT0wKShlLmZsYWdzJjE2Mzg0KSE9PTAmJih1ZT0hMCk7ZWxzZSByZXR1cm4gbi5sYW5lcz1lLmxhbmVzLHllKGUsbixpKTtyZXR1cm4gTmwoZSxuLHQscixpKX1mdW5jdGlvbiBLcihlLG4sdCl7dmFyIHI9bi5wZW5kaW5nUHJvcHMsbD1yLmNoaWxkcmVuLGk9ZSE9PW51bGw/ZS5tZW1vaXplZFN0YXRlOm51bGw7aWYoci5tb2RlPT09XCJoaWRkZW5cInx8ci5tb2RlPT09XCJ1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZ1wiKWlmKChuLm1vZGUmNCk9PT0wKW4ubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOjB9LGp0KG4sdCk7ZWxzZSBpZigodCYxMDczNzQxODI0KSE9PTApbi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MH0sanQobixpIT09bnVsbD9pLmJhc2VMYW5lczp0KTtlbHNlIHJldHVybiBlPWkhPT1udWxsP2kuYmFzZUxhbmVzfHQ6dCxuLmxhbmVzPW4uY2hpbGRMYW5lcz0xMDczNzQxODI0LG4ubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOmV9LGp0KG4sZSksbnVsbDtlbHNlIGkhPT1udWxsPyhyPWkuYmFzZUxhbmVzfHQsbi5tZW1vaXplZFN0YXRlPW51bGwpOnI9dCxqdChuLHIpO3JldHVybiBHKGUsbixsLHQpLG4uY2hpbGR9ZnVuY3Rpb24gdHMoZSxuKXt2YXIgdD1uLnJlZjsoZT09PW51bGwmJnQhPT1udWxsfHxlIT09bnVsbCYmZS5yZWYhPT10KSYmKG4uZmxhZ3N8PTEyOCl9ZnVuY3Rpb24gTmwoZSxuLHQscixsKXt2YXIgaT1KKHQpP0tlOiQuY3VycmVudDtyZXR1cm4gaT14bihuLGkpLHluKG4sbCksdD1naShlLG4sdCxyLGksbCksZSE9PW51bGwmJiF1ZT8obi51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLG4uZmxhZ3MmPS01MTcsZS5sYW5lcyY9fmwseWUoZSxuLGwpKToobi5mbGFnc3w9MSxHKGUsbix0LGwpLG4uY2hpbGQpfWZ1bmN0aW9uIExvKGUsbix0LHIsbCl7aWYoSih0KSl7dmFyIGk9ITA7V3Qobil9ZWxzZSBpPSExO2lmKHluKG4sbCksbi5zdGF0ZU5vZGU9PT1udWxsKWUhPT1udWxsJiYoZS5hbHRlcm5hdGU9bnVsbCxuLmFsdGVybmF0ZT1udWxsLG4uZmxhZ3N8PTIpLFF1KG4sdCxyKSxrbChuLHQscixsKSxyPSEwO2Vsc2UgaWYoZT09PW51bGwpe3ZhciBvPW4uc3RhdGVOb2RlLHU9bi5tZW1vaXplZFByb3BzO28ucHJvcHM9dTt2YXIgcz1vLmNvbnRleHQsZD10LmNvbnRleHRUeXBlO3R5cGVvZiBkPT1cIm9iamVjdFwiJiZkIT09bnVsbD9kPXJlKGQpOihkPUoodCk/S2U6JC5jdXJyZW50LGQ9eG4obixkKSk7dmFyIHk9dC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsQz10eXBlb2YgeT09XCJmdW5jdGlvblwifHx0eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09XCJmdW5jdGlvblwiO0N8fHR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1cImZ1bmN0aW9uXCImJnR5cGVvZiBvLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPVwiZnVuY3Rpb25cInx8KHUhPT1yfHxzIT09ZCkmJlNvKG4sbyxyLGQpLEVlPSExO3ZhciBoPW4ubWVtb2l6ZWRTdGF0ZTtvLnN0YXRlPWgsdnQobixyLG8sbCkscz1uLm1lbW9pemVkU3RhdGUsdSE9PXJ8fGghPT1zfHxaLmN1cnJlbnR8fEVlPyh0eXBlb2YgeT09XCJmdW5jdGlvblwiJiYob3Iobix0LHkscikscz1uLm1lbW9pemVkU3RhdGUpLCh1PUVlfHx3byhuLHQsdSxyLGgscyxkKSk/KEN8fHR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPVwiZnVuY3Rpb25cIiYmdHlwZW9mIG8uY29tcG9uZW50V2lsbE1vdW50IT1cImZ1bmN0aW9uXCJ8fCh0eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQ9PVwiZnVuY3Rpb25cIiYmby5jb21wb25lbnRXaWxsTW91bnQoKSx0eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50PT1cImZ1bmN0aW9uXCImJm8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSx0eXBlb2Ygby5jb21wb25lbnREaWRNb3VudD09XCJmdW5jdGlvblwiJiYobi5mbGFnc3w9NCkpOih0eXBlb2Ygby5jb21wb25lbnREaWRNb3VudD09XCJmdW5jdGlvblwiJiYobi5mbGFnc3w9NCksbi5tZW1vaXplZFByb3BzPXIsbi5tZW1vaXplZFN0YXRlPXMpLG8ucHJvcHM9cixvLnN0YXRlPXMsby5jb250ZXh0PWQscj11KToodHlwZW9mIG8uY29tcG9uZW50RGlkTW91bnQ9PVwiZnVuY3Rpb25cIiYmKG4uZmxhZ3N8PTQpLHI9ITEpfWVsc2V7bz1uLnN0YXRlTm9kZSxXdShlLG4pLHU9bi5tZW1vaXplZFByb3BzLGQ9bi50eXBlPT09bi5lbGVtZW50VHlwZT91Om9lKG4udHlwZSx1KSxvLnByb3BzPWQsQz1uLnBlbmRpbmdQcm9wcyxoPW8uY29udGV4dCxzPXQuY29udGV4dFR5cGUsdHlwZW9mIHM9PVwib2JqZWN0XCImJnMhPT1udWxsP3M9cmUocyk6KHM9Sih0KT9LZTokLmN1cnJlbnQscz14bihuLHMpKTt2YXIgUz10LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczsoeT10eXBlb2YgUz09XCJmdW5jdGlvblwifHx0eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09XCJmdW5jdGlvblwiKXx8dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPVwiZnVuY3Rpb25cIiYmdHlwZW9mIG8uY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyE9XCJmdW5jdGlvblwifHwodSE9PUN8fGghPT1zKSYmU28obixvLHIscyksRWU9ITEsaD1uLm1lbW9pemVkU3RhdGUsby5zdGF0ZT1oLHZ0KG4scixvLGwpO3ZhciBrPW4ubWVtb2l6ZWRTdGF0ZTt1IT09Q3x8aCE9PWt8fFouY3VycmVudHx8RWU/KHR5cGVvZiBTPT1cImZ1bmN0aW9uXCImJihvcihuLHQsUyxyKSxrPW4ubWVtb2l6ZWRTdGF0ZSksKGQ9RWV8fHdvKG4sdCxkLHIsaCxrLHMpKT8oeXx8dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUhPVwiZnVuY3Rpb25cIiYmdHlwZW9mIG8uY29tcG9uZW50V2lsbFVwZGF0ZSE9XCJmdW5jdGlvblwifHwodHlwZW9mIG8uY29tcG9uZW50V2lsbFVwZGF0ZT09XCJmdW5jdGlvblwiJiZvLmNvbXBvbmVudFdpbGxVcGRhdGUocixrLHMpLHR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPT1cImZ1bmN0aW9uXCImJm8uVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUocixrLHMpKSx0eXBlb2Ygby5jb21wb25lbnREaWRVcGRhdGU9PVwiZnVuY3Rpb25cIiYmKG4uZmxhZ3N8PTQpLHR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT1cImZ1bmN0aW9uXCImJihuLmZsYWdzfD0yNTYpKToodHlwZW9mIG8uY29tcG9uZW50RGlkVXBkYXRlIT1cImZ1bmN0aW9uXCJ8fHU9PT1lLm1lbW9pemVkUHJvcHMmJmg9PT1lLm1lbW9pemVkU3RhdGV8fChuLmZsYWdzfD00KSx0eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9XCJmdW5jdGlvblwifHx1PT09ZS5tZW1vaXplZFByb3BzJiZoPT09ZS5tZW1vaXplZFN0YXRlfHwobi5mbGFnc3w9MjU2KSxuLm1lbW9pemVkUHJvcHM9cixuLm1lbW9pemVkU3RhdGU9ayksby5wcm9wcz1yLG8uc3RhdGU9ayxvLmNvbnRleHQ9cyxyPWQpOih0eXBlb2Ygby5jb21wb25lbnREaWRVcGRhdGUhPVwiZnVuY3Rpb25cInx8dT09PWUubWVtb2l6ZWRQcm9wcyYmaD09PWUubWVtb2l6ZWRTdGF0ZXx8KG4uZmxhZ3N8PTQpLHR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1cImZ1bmN0aW9uXCJ8fHU9PT1lLm1lbW9pemVkUHJvcHMmJmg9PT1lLm1lbW9pemVkU3RhdGV8fChuLmZsYWdzfD0yNTYpLHI9ITEpfXJldHVybiBQbChlLG4sdCxyLGksbCl9ZnVuY3Rpb24gUGwoZSxuLHQscixsLGkpe3RzKGUsbik7dmFyIG89KG4uZmxhZ3MmNjQpIT09MDtpZighciYmIW8pcmV0dXJuIGwmJm1vKG4sdCwhMSkseWUoZSxuLGkpO3I9bi5zdGF0ZU5vZGUsbmYuY3VycmVudD1uO3ZhciB1PW8mJnR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9XCJmdW5jdGlvblwiP251bGw6ci5yZW5kZXIoKTtyZXR1cm4gbi5mbGFnc3w9MSxlIT09bnVsbCYmbz8obi5jaGlsZD11cihuLGUuY2hpbGQsbnVsbCxpKSxuLmNoaWxkPXVyKG4sbnVsbCx1LGkpKTpHKGUsbix1LGkpLG4ubWVtb2l6ZWRTdGF0ZT1yLnN0YXRlLGwmJm1vKG4sdCwhMCksbi5jaGlsZH1mdW5jdGlvbiB6byhlKXt2YXIgbj1lLnN0YXRlTm9kZTtuLnBlbmRpbmdDb250ZXh0P3BvKGUsbi5wZW5kaW5nQ29udGV4dCxuLnBlbmRpbmdDb250ZXh0IT09bi5jb250ZXh0KTpuLmNvbnRleHQmJnBvKGUsbi5jb250ZXh0LCExKSx4bChlLG4uY29udGFpbmVySW5mbyl9dmFyIEZ0PXtkZWh5ZHJhdGVkOm51bGwscmV0cnlMYW5lOjB9O2Z1bmN0aW9uIE9vKGUsbix0KXt2YXIgcj1uLnBlbmRpbmdQcm9wcyxsPVIuY3VycmVudCxpPSExLG87cmV0dXJuKG89KG4uZmxhZ3MmNjQpIT09MCl8fChvPWUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGU9PT1udWxsPyExOihsJjIpIT09MCksbz8oaT0hMCxuLmZsYWdzJj0tNjUpOmUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGU9PT1udWxsfHxyLmZhbGxiYWNrPT09dm9pZCAwfHxyLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrPT09ITB8fChsfD0xKSxEKFIsbCYxKSxlPT09bnVsbD8oci5mYWxsYmFjayE9PXZvaWQgMCYmQ2wobiksZT1yLmNoaWxkcmVuLGw9ci5mYWxsYmFjayxpPyhlPU1vKG4sZSxsLHQpLG4uY2hpbGQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOnR9LG4ubWVtb2l6ZWRTdGF0ZT1GdCxlKTp0eXBlb2Ygci51bnN0YWJsZV9leHBlY3RlZExvYWRUaW1lPT1cIm51bWJlclwiPyhlPU1vKG4sZSxsLHQpLG4uY2hpbGQubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOnR9LG4ubWVtb2l6ZWRTdGF0ZT1GdCxuLmxhbmVzPTMzNTU0NDMyLGUpOih0PVRpKHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOmV9LG4ubW9kZSx0LG51bGwpLHQucmV0dXJuPW4sbi5jaGlsZD10KSk6ZS5tZW1vaXplZFN0YXRlIT09bnVsbD9pPyhyPURvKGUsbixyLmNoaWxkcmVuLHIuZmFsbGJhY2ssdCksaT1uLmNoaWxkLGw9ZS5jaGlsZC5tZW1vaXplZFN0YXRlLGkubWVtb2l6ZWRTdGF0ZT1sPT09bnVsbD97YmFzZUxhbmVzOnR9OntiYXNlTGFuZXM6bC5iYXNlTGFuZXN8dH0saS5jaGlsZExhbmVzPWUuY2hpbGRMYW5lcyZ+dCxuLm1lbW9pemVkU3RhdGU9RnQscik6KHQ9Um8oZSxuLHIuY2hpbGRyZW4sdCksbi5tZW1vaXplZFN0YXRlPW51bGwsdCk6aT8ocj1EbyhlLG4sci5jaGlsZHJlbixyLmZhbGxiYWNrLHQpLGk9bi5jaGlsZCxsPWUuY2hpbGQubWVtb2l6ZWRTdGF0ZSxpLm1lbW9pemVkU3RhdGU9bD09PW51bGw/e2Jhc2VMYW5lczp0fTp7YmFzZUxhbmVzOmwuYmFzZUxhbmVzfHR9LGkuY2hpbGRMYW5lcz1lLmNoaWxkTGFuZXMmfnQsbi5tZW1vaXplZFN0YXRlPUZ0LHIpOih0PVJvKGUsbixyLmNoaWxkcmVuLHQpLG4ubWVtb2l6ZWRTdGF0ZT1udWxsLHQpfWZ1bmN0aW9uIE1vKGUsbix0LHIpe3ZhciBsPWUubW9kZSxpPWUuY2hpbGQ7cmV0dXJuIG49e21vZGU6XCJoaWRkZW5cIixjaGlsZHJlbjpufSwobCYyKT09PTAmJmkhPT1udWxsPyhpLmNoaWxkTGFuZXM9MCxpLnBlbmRpbmdQcm9wcz1uKTppPVRpKG4sbCwwLG51bGwpLHQ9RW4odCxsLHIsbnVsbCksaS5yZXR1cm49ZSx0LnJldHVybj1lLGkuc2libGluZz10LGUuY2hpbGQ9aSx0fWZ1bmN0aW9uIFJvKGUsbix0LHIpe3ZhciBsPWUuY2hpbGQ7cmV0dXJuIGU9bC5zaWJsaW5nLHQ9VWUobCx7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjp0fSksKG4ubW9kZSYyKT09PTAmJih0LmxhbmVzPXIpLHQucmV0dXJuPW4sdC5zaWJsaW5nPW51bGwsZSE9PW51bGwmJihlLm5leHRFZmZlY3Q9bnVsbCxlLmZsYWdzPTgsbi5maXJzdEVmZmVjdD1uLmxhc3RFZmZlY3Q9ZSksbi5jaGlsZD10fWZ1bmN0aW9uIERvKGUsbix0LHIsbCl7dmFyIGk9bi5tb2RlLG89ZS5jaGlsZDtlPW8uc2libGluZzt2YXIgdT17bW9kZTpcImhpZGRlblwiLGNoaWxkcmVuOnR9O3JldHVybihpJjIpPT09MCYmbi5jaGlsZCE9PW8/KHQ9bi5jaGlsZCx0LmNoaWxkTGFuZXM9MCx0LnBlbmRpbmdQcm9wcz11LG89dC5sYXN0RWZmZWN0LG8hPT1udWxsPyhuLmZpcnN0RWZmZWN0PXQuZmlyc3RFZmZlY3Qsbi5sYXN0RWZmZWN0PW8sby5uZXh0RWZmZWN0PW51bGwpOm4uZmlyc3RFZmZlY3Q9bi5sYXN0RWZmZWN0PW51bGwpOnQ9VWUobyx1KSxlIT09bnVsbD9yPVVlKGUscik6KHI9RW4ocixpLGwsbnVsbCksci5mbGFnc3w9Miksci5yZXR1cm49bix0LnJldHVybj1uLHQuc2libGluZz1yLG4uY2hpbGQ9dCxyfWZ1bmN0aW9uIElvKGUsbil7ZS5sYW5lc3w9bjt2YXIgdD1lLmFsdGVybmF0ZTt0IT09bnVsbCYmKHQubGFuZXN8PW4pLEh1KGUucmV0dXJuLG4pfWZ1bmN0aW9uIEdyKGUsbix0LHIsbCxpKXt2YXIgbz1lLm1lbW9pemVkU3RhdGU7bz09PW51bGw/ZS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczpuLHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6cix0YWlsOnQsdGFpbE1vZGU6bCxsYXN0RWZmZWN0Oml9OihvLmlzQmFja3dhcmRzPW4sby5yZW5kZXJpbmc9bnVsbCxvLnJlbmRlcmluZ1N0YXJ0VGltZT0wLG8ubGFzdD1yLG8udGFpbD10LG8udGFpbE1vZGU9bCxvLmxhc3RFZmZlY3Q9aSl9ZnVuY3Rpb24gRm8oZSxuLHQpe3ZhciByPW4ucGVuZGluZ1Byb3BzLGw9ci5yZXZlYWxPcmRlcixpPXIudGFpbDtpZihHKGUsbixyLmNoaWxkcmVuLHQpLHI9Ui5jdXJyZW50LChyJjIpIT09MClyPXImMXwyLG4uZmxhZ3N8PTY0O2Vsc2V7aWYoZSE9PW51bGwmJihlLmZsYWdzJjY0KSE9PTApZTpmb3IoZT1uLmNoaWxkO2UhPT1udWxsOyl7aWYoZS50YWc9PT0xMyllLm1lbW9pemVkU3RhdGUhPT1udWxsJiZJbyhlLHQpO2Vsc2UgaWYoZS50YWc9PT0xOSlJbyhlLHQpO2Vsc2UgaWYoZS5jaGlsZCE9PW51bGwpe2UuY2hpbGQucmV0dXJuPWUsZT1lLmNoaWxkO2NvbnRpbnVlfWlmKGU9PT1uKWJyZWFrIGU7Zm9yKDtlLnNpYmxpbmc9PT1udWxsOyl7aWYoZS5yZXR1cm49PT1udWxsfHxlLnJldHVybj09PW4pYnJlYWsgZTtlPWUucmV0dXJufWUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmd9ciY9MX1pZihEKFIsciksKG4ubW9kZSYyKT09PTApbi5tZW1vaXplZFN0YXRlPW51bGw7ZWxzZSBzd2l0Y2gobCl7Y2FzZVwiZm9yd2FyZHNcIjpmb3IodD1uLmNoaWxkLGw9bnVsbDt0IT09bnVsbDspZT10LmFsdGVybmF0ZSxlIT09bnVsbCYmc3IoZSk9PT1udWxsJiYobD10KSx0PXQuc2libGluZzt0PWwsdD09PW51bGw/KGw9bi5jaGlsZCxuLmNoaWxkPW51bGwpOihsPXQuc2libGluZyx0LnNpYmxpbmc9bnVsbCksR3IobiwhMSxsLHQsaSxuLmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2VcImJhY2t3YXJkc1wiOmZvcih0PW51bGwsbD1uLmNoaWxkLG4uY2hpbGQ9bnVsbDtsIT09bnVsbDspe2lmKGU9bC5hbHRlcm5hdGUsZSE9PW51bGwmJnNyKGUpPT09bnVsbCl7bi5jaGlsZD1sO2JyZWFrfWU9bC5zaWJsaW5nLGwuc2libGluZz10LHQ9bCxsPWV9R3IobiwhMCx0LG51bGwsaSxuLmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2VcInRvZ2V0aGVyXCI6R3IobiwhMSxudWxsLG51bGwsdm9pZCAwLG4ubGFzdEVmZmVjdCk7YnJlYWs7ZGVmYXVsdDpuLm1lbW9pemVkU3RhdGU9bnVsbH1yZXR1cm4gbi5jaGlsZH1mdW5jdGlvbiB5ZShlLG4sdCl7aWYoZSE9PW51bGwmJihuLmRlcGVuZGVuY2llcz1lLmRlcGVuZGVuY2llcykseHR8PW4ubGFuZXMsKHQmbi5jaGlsZExhbmVzKSE9PTApe2lmKGUhPT1udWxsJiZuLmNoaWxkIT09ZS5jaGlsZCl0aHJvdyBFcnJvcih2KDE1MykpO2lmKG4uY2hpbGQhPT1udWxsKXtmb3IoZT1uLmNoaWxkLHQ9VWUoZSxlLnBlbmRpbmdQcm9wcyksbi5jaGlsZD10LHQucmV0dXJuPW47ZS5zaWJsaW5nIT09bnVsbDspZT1lLnNpYmxpbmcsdD10LnNpYmxpbmc9VWUoZSxlLnBlbmRpbmdQcm9wcyksdC5yZXR1cm49bjt0LnNpYmxpbmc9bnVsbH1yZXR1cm4gbi5jaGlsZH1yZXR1cm4gbnVsbH12YXIgcnMsVGwsbHMsaXM7cnM9ZnVuY3Rpb24oZSxuKXtmb3IodmFyIHQ9bi5jaGlsZDt0IT09bnVsbDspe2lmKHQudGFnPT09NXx8dC50YWc9PT02KWUuYXBwZW5kQ2hpbGQodC5zdGF0ZU5vZGUpO2Vsc2UgaWYodC50YWchPT00JiZ0LmNoaWxkIT09bnVsbCl7dC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7Y29udGludWV9aWYodD09PW4pYnJlYWs7Zm9yKDt0LnNpYmxpbmc9PT1udWxsOyl7aWYodC5yZXR1cm49PT1udWxsfHx0LnJldHVybj09PW4pcmV0dXJuO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319O1RsPWZ1bmN0aW9uKCl7fTtscz1mdW5jdGlvbihlLG4sdCxyKXt2YXIgbD1lLm1lbW9pemVkUHJvcHM7aWYobCE9PXIpe2U9bi5zdGF0ZU5vZGUsJGUoY2UuY3VycmVudCk7dmFyIGk9bnVsbDtzd2l0Y2godCl7Y2FzZVwiaW5wdXRcIjpsPW5sKGUsbCkscj1ubChlLHIpLGk9W107YnJlYWs7Y2FzZVwib3B0aW9uXCI6bD1sbChlLGwpLHI9bGwoZSxyKSxpPVtdO2JyZWFrO2Nhc2VcInNlbGVjdFwiOmw9TSh7fSxsLHt2YWx1ZTp2b2lkIDB9KSxyPU0oe30scix7dmFsdWU6dm9pZCAwfSksaT1bXTticmVhaztjYXNlXCJ0ZXh0YXJlYVwiOmw9aWwoZSxsKSxyPWlsKGUsciksaT1bXTticmVhaztkZWZhdWx0OnR5cGVvZiBsLm9uQ2xpY2shPVwiZnVuY3Rpb25cIiYmdHlwZW9mIHIub25DbGljaz09XCJmdW5jdGlvblwiJiYoZS5vbmNsaWNrPWVyKX1zbCh0LHIpO3ZhciBvO3Q9bnVsbDtmb3IoZCBpbiBsKWlmKCFyLmhhc093blByb3BlcnR5KGQpJiZsLmhhc093blByb3BlcnR5KGQpJiZsW2RdIT1udWxsKWlmKGQ9PT1cInN0eWxlXCIpe3ZhciB1PWxbZF07Zm9yKG8gaW4gdSl1Lmhhc093blByb3BlcnR5KG8pJiYodHx8KHQ9e30pLHRbb109XCJcIil9ZWxzZSBkIT09XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiJiZkIT09XCJjaGlsZHJlblwiJiZkIT09XCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiYmZCE9PVwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCImJmQhPT1cImF1dG9Gb2N1c1wiJiYob3QuaGFzT3duUHJvcGVydHkoZCk/aXx8KGk9W10pOihpPWl8fFtdKS5wdXNoKGQsbnVsbCkpO2ZvcihkIGluIHIpe3ZhciBzPXJbZF07aWYodT1sPy5bZF0sci5oYXNPd25Qcm9wZXJ0eShkKSYmcyE9PXUmJihzIT1udWxsfHx1IT1udWxsKSlpZihkPT09XCJzdHlsZVwiKWlmKHUpe2ZvcihvIGluIHUpIXUuaGFzT3duUHJvcGVydHkobyl8fHMmJnMuaGFzT3duUHJvcGVydHkobyl8fCh0fHwodD17fSksdFtvXT1cIlwiKTtmb3IobyBpbiBzKXMuaGFzT3duUHJvcGVydHkobykmJnVbb10hPT1zW29dJiYodHx8KHQ9e30pLHRbb109c1tvXSl9ZWxzZSB0fHwoaXx8KGk9W10pLGkucHVzaChkLHQpKSx0PXM7ZWxzZSBkPT09XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPyhzPXM/cy5fX2h0bWw6dm9pZCAwLHU9dT91Ll9faHRtbDp2b2lkIDAscyE9bnVsbCYmdSE9PXMmJihpPWl8fFtdKS5wdXNoKGQscykpOmQ9PT1cImNoaWxkcmVuXCI/dHlwZW9mIHMhPVwic3RyaW5nXCImJnR5cGVvZiBzIT1cIm51bWJlclwifHwoaT1pfHxbXSkucHVzaChkLFwiXCIrcyk6ZCE9PVwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCImJmQhPT1cInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiJiYob3QuaGFzT3duUHJvcGVydHkoZCk/KHMhPW51bGwmJmQ9PT1cIm9uU2Nyb2xsXCImJnooXCJzY3JvbGxcIixlKSxpfHx1PT09c3x8KGk9W10pKTp0eXBlb2Ygcz09XCJvYmplY3RcIiYmcyE9PW51bGwmJnMuJCR0eXBlb2Y9PT1LbD9zLnRvU3RyaW5nKCk6KGk9aXx8W10pLnB1c2goZCxzKSl9dCYmKGk9aXx8W10pLnB1c2goXCJzdHlsZVwiLHQpO3ZhciBkPWk7KG4udXBkYXRlUXVldWU9ZCkmJihuLmZsYWdzfD00KX19O2lzPWZ1bmN0aW9uKGUsbix0LHIpe3QhPT1yJiYobi5mbGFnc3w9NCl9O2Z1bmN0aW9uIEJuKGUsbil7aWYoIWRlKXN3aXRjaChlLnRhaWxNb2RlKXtjYXNlXCJoaWRkZW5cIjpuPWUudGFpbDtmb3IodmFyIHQ9bnVsbDtuIT09bnVsbDspbi5hbHRlcm5hdGUhPT1udWxsJiYodD1uKSxuPW4uc2libGluZzt0PT09bnVsbD9lLnRhaWw9bnVsbDp0LnNpYmxpbmc9bnVsbDticmVhaztjYXNlXCJjb2xsYXBzZWRcIjp0PWUudGFpbDtmb3IodmFyIHI9bnVsbDt0IT09bnVsbDspdC5hbHRlcm5hdGUhPT1udWxsJiYocj10KSx0PXQuc2libGluZztyPT09bnVsbD9ufHxlLnRhaWw9PT1udWxsP2UudGFpbD1udWxsOmUudGFpbC5zaWJsaW5nPW51bGw6ci5zaWJsaW5nPW51bGx9fWZ1bmN0aW9uIHRmKGUsbix0KXt2YXIgcj1uLnBlbmRpbmdQcm9wcztzd2l0Y2gobi50YWcpe2Nhc2UgMjpjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBudWxsO2Nhc2UgMTpyZXR1cm4gSihuLnR5cGUpJiZ0cigpLG51bGw7Y2FzZSAzOnJldHVybiBfbigpLE8oWiksTygkKSx2aSgpLHI9bi5zdGF0ZU5vZGUsci5wZW5kaW5nQ29udGV4dCYmKHIuY29udGV4dD1yLnBlbmRpbmdDb250ZXh0LHIucGVuZGluZ0NvbnRleHQ9bnVsbCksKGU9PT1udWxsfHxlLmNoaWxkPT09bnVsbCkmJihJdChuKT9uLmZsYWdzfD00OnIuaHlkcmF0ZXx8KG4uZmxhZ3N8PTI1NikpLFRsKG4pLG51bGw7Y2FzZSA1OmhpKG4pO3ZhciBsPSRlKGd0LmN1cnJlbnQpO2lmKHQ9bi50eXBlLGUhPT1udWxsJiZuLnN0YXRlTm9kZSE9bnVsbClscyhlLG4sdCxyLGwpLGUucmVmIT09bi5yZWYmJihuLmZsYWdzfD0xMjgpO2Vsc2V7aWYoIXIpe2lmKG4uc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcih2KDE2NikpO3JldHVybiBudWxsfWlmKGU9JGUoY2UuY3VycmVudCksSXQobikpe3I9bi5zdGF0ZU5vZGUsdD1uLnR5cGU7dmFyIGk9bi5tZW1vaXplZFByb3BzO3N3aXRjaChyW0NlXT1uLHJbbnJdPWksdCl7Y2FzZVwiZGlhbG9nXCI6eihcImNhbmNlbFwiLHIpLHooXCJjbG9zZVwiLHIpO2JyZWFrO2Nhc2VcImlmcmFtZVwiOmNhc2VcIm9iamVjdFwiOmNhc2VcImVtYmVkXCI6eihcImxvYWRcIixyKTticmVhaztjYXNlXCJ2aWRlb1wiOmNhc2VcImF1ZGlvXCI6Zm9yKGU9MDtlPCRuLmxlbmd0aDtlKyspeigkbltlXSxyKTticmVhaztjYXNlXCJzb3VyY2VcIjp6KFwiZXJyb3JcIixyKTticmVhaztjYXNlXCJpbWdcIjpjYXNlXCJpbWFnZVwiOmNhc2VcImxpbmtcIjp6KFwiZXJyb3JcIixyKSx6KFwibG9hZFwiLHIpO2JyZWFrO2Nhc2VcImRldGFpbHNcIjp6KFwidG9nZ2xlXCIscik7YnJlYWs7Y2FzZVwiaW5wdXRcIjpqaShyLGkpLHooXCJpbnZhbGlkXCIscik7YnJlYWs7Y2FzZVwic2VsZWN0XCI6ci5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIWkubXVsdGlwbGV9LHooXCJpbnZhbGlkXCIscik7YnJlYWs7Y2FzZVwidGV4dGFyZWFcIjpWaShyLGkpLHooXCJpbnZhbGlkXCIscil9c2wodCxpKSxlPW51bGw7Zm9yKHZhciBvIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShvKSYmKGw9aVtvXSxvPT09XCJjaGlsZHJlblwiP3R5cGVvZiBsPT1cInN0cmluZ1wiP3IudGV4dENvbnRlbnQhPT1sJiYoZT1bXCJjaGlsZHJlblwiLGxdKTp0eXBlb2YgbD09XCJudW1iZXJcIiYmci50ZXh0Q29udGVudCE9PVwiXCIrbCYmKGU9W1wiY2hpbGRyZW5cIixcIlwiK2xdKTpvdC5oYXNPd25Qcm9wZXJ0eShvKSYmbCE9bnVsbCYmbz09PVwib25TY3JvbGxcIiYmeihcInNjcm9sbFwiLHIpKTtzd2l0Y2godCl7Y2FzZVwiaW5wdXRcIjpOdChyKSxVaShyLGksITApO2JyZWFrO2Nhc2VcInRleHRhcmVhXCI6TnQociksQmkocik7YnJlYWs7Y2FzZVwic2VsZWN0XCI6Y2FzZVwib3B0aW9uXCI6YnJlYWs7ZGVmYXVsdDp0eXBlb2YgaS5vbkNsaWNrPT1cImZ1bmN0aW9uXCImJihyLm9uY2xpY2s9ZXIpfXI9ZSxuLnVwZGF0ZVF1ZXVlPXIsciE9PW51bGwmJihuLmZsYWdzfD00KX1lbHNle3N3aXRjaChvPWwubm9kZVR5cGU9PT05P2w6bC5vd25lckRvY3VtZW50LGU9PT1vbC5odG1sJiYoZT1xbyh0KSksZT09PW9sLmh0bWw/dD09PVwic2NyaXB0XCI/KGU9by5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGUuaW5uZXJIVE1MPVwiPHNjcmlwdD48XFwvc2NyaXB0PlwiLGU9ZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpKTp0eXBlb2Ygci5pcz09XCJzdHJpbmdcIj9lPW8uY3JlYXRlRWxlbWVudCh0LHtpczpyLmlzfSk6KGU9by5jcmVhdGVFbGVtZW50KHQpLHQ9PT1cInNlbGVjdFwiJiYobz1lLHIubXVsdGlwbGU/by5tdWx0aXBsZT0hMDpyLnNpemUmJihvLnNpemU9ci5zaXplKSkpOmU9by5jcmVhdGVFbGVtZW50TlMoZSx0KSxlW0NlXT1uLGVbbnJdPXIscnMoZSxuLCExLCExKSxuLnN0YXRlTm9kZT1lLG89YWwodCxyKSx0KXtjYXNlXCJkaWFsb2dcIjp6KFwiY2FuY2VsXCIsZSkseihcImNsb3NlXCIsZSksbD1yO2JyZWFrO2Nhc2VcImlmcmFtZVwiOmNhc2VcIm9iamVjdFwiOmNhc2VcImVtYmVkXCI6eihcImxvYWRcIixlKSxsPXI7YnJlYWs7Y2FzZVwidmlkZW9cIjpjYXNlXCJhdWRpb1wiOmZvcihsPTA7bDwkbi5sZW5ndGg7bCsrKXooJG5bbF0sZSk7bD1yO2JyZWFrO2Nhc2VcInNvdXJjZVwiOnooXCJlcnJvclwiLGUpLGw9cjticmVhaztjYXNlXCJpbWdcIjpjYXNlXCJpbWFnZVwiOmNhc2VcImxpbmtcIjp6KFwiZXJyb3JcIixlKSx6KFwibG9hZFwiLGUpLGw9cjticmVhaztjYXNlXCJkZXRhaWxzXCI6eihcInRvZ2dsZVwiLGUpLGw9cjticmVhaztjYXNlXCJpbnB1dFwiOmppKGUsciksbD1ubChlLHIpLHooXCJpbnZhbGlkXCIsZSk7YnJlYWs7Y2FzZVwib3B0aW9uXCI6bD1sbChlLHIpO2JyZWFrO2Nhc2VcInNlbGVjdFwiOmUuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFyLm11bHRpcGxlfSxsPU0oe30scix7dmFsdWU6dm9pZCAwfSkseihcImludmFsaWRcIixlKTticmVhaztjYXNlXCJ0ZXh0YXJlYVwiOlZpKGUsciksbD1pbChlLHIpLHooXCJpbnZhbGlkXCIsZSk7YnJlYWs7ZGVmYXVsdDpsPXJ9c2wodCxsKTt2YXIgdT1sO2ZvcihpIGluIHUpaWYodS5oYXNPd25Qcm9wZXJ0eShpKSl7dmFyIHM9dVtpXTtpPT09XCJzdHlsZVwiP251KGUscyk6aT09PVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj8ocz1zP3MuX19odG1sOnZvaWQgMCxzIT1udWxsJiZibyhlLHMpKTppPT09XCJjaGlsZHJlblwiP3R5cGVvZiBzPT1cInN0cmluZ1wiPyh0IT09XCJ0ZXh0YXJlYVwifHxzIT09XCJcIikmJnV0KGUscyk6dHlwZW9mIHM9PVwibnVtYmVyXCImJnV0KGUsXCJcIitzKTppIT09XCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIiYmaSE9PVwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCImJmkhPT1cImF1dG9Gb2N1c1wiJiYob3QuaGFzT3duUHJvcGVydHkoaSk/cyE9bnVsbCYmaT09PVwib25TY3JvbGxcIiYmeihcInNjcm9sbFwiLGUpOnMhPW51bGwmJldsKGUsaSxzLG8pKX1zd2l0Y2godCl7Y2FzZVwiaW5wdXRcIjpOdChlKSxVaShlLHIsITEpO2JyZWFrO2Nhc2VcInRleHRhcmVhXCI6TnQoZSksQmkoZSk7YnJlYWs7Y2FzZVwib3B0aW9uXCI6ci52YWx1ZSE9bnVsbCYmZS5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLFwiXCIrRGUoci52YWx1ZSkpO2JyZWFrO2Nhc2VcInNlbGVjdFwiOmUubXVsdGlwbGU9ISFyLm11bHRpcGxlLGk9ci52YWx1ZSxpIT1udWxsP3BuKGUsISFyLm11bHRpcGxlLGksITEpOnIuZGVmYXVsdFZhbHVlIT1udWxsJiZwbihlLCEhci5tdWx0aXBsZSxyLmRlZmF1bHRWYWx1ZSwhMCk7YnJlYWs7ZGVmYXVsdDp0eXBlb2YgbC5vbkNsaWNrPT1cImZ1bmN0aW9uXCImJihlLm9uY2xpY2s9ZXIpfU11KHQscikmJihuLmZsYWdzfD00KX1uLnJlZiE9PW51bGwmJihuLmZsYWdzfD0xMjgpfXJldHVybiBudWxsO2Nhc2UgNjppZihlJiZuLnN0YXRlTm9kZSE9bnVsbClpcyhlLG4sZS5tZW1vaXplZFByb3BzLHIpO2Vsc2V7aWYodHlwZW9mIHIhPVwic3RyaW5nXCImJm4uc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcih2KDE2NikpO3Q9JGUoZ3QuY3VycmVudCksJGUoY2UuY3VycmVudCksSXQobik/KHI9bi5zdGF0ZU5vZGUsdD1uLm1lbW9pemVkUHJvcHMscltDZV09bixyLm5vZGVWYWx1ZSE9PXQmJihuLmZsYWdzfD00KSk6KHI9KHQubm9kZVR5cGU9PT05P3Q6dC5vd25lckRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShyKSxyW0NlXT1uLG4uc3RhdGVOb2RlPXIpfXJldHVybiBudWxsO2Nhc2UgMTM6cmV0dXJuIE8oUikscj1uLm1lbW9pemVkU3RhdGUsKG4uZmxhZ3MmNjQpIT09MD8obi5sYW5lcz10LG4pOihyPXIhPT1udWxsLHQ9ITEsZT09PW51bGw/bi5tZW1vaXplZFByb3BzLmZhbGxiYWNrIT09dm9pZCAwJiZJdChuKTp0PWUubWVtb2l6ZWRTdGF0ZSE9PW51bGwsciYmIXQmJihuLm1vZGUmMikhPT0wJiYoZT09PW51bGwmJm4ubWVtb2l6ZWRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayE9PSEwfHwoUi5jdXJyZW50JjEpIT09MD9CPT09MCYmKEI9Myk6KChCPT09MHx8Qj09PTMpJiYoQj00KSxZPT09bnVsbHx8KHh0JjEzNDIxNzcyNyk9PT0wJiYoTG4mMTM0MjE3NzI3KT09PTB8fHduKFksUSkpKSwocnx8dCkmJihuLmZsYWdzfD00KSxudWxsKTtjYXNlIDQ6cmV0dXJuIF9uKCksVGwobiksZT09PW51bGwmJkx1KG4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLG51bGw7Y2FzZSAxMDpyZXR1cm4gcGkobiksbnVsbDtjYXNlIDE3OnJldHVybiBKKG4udHlwZSkmJnRyKCksbnVsbDtjYXNlIDE5OmlmKE8oUikscj1uLm1lbW9pemVkU3RhdGUscj09PW51bGwpcmV0dXJuIG51bGw7aWYoaT0obi5mbGFncyY2NCkhPT0wLG89ci5yZW5kZXJpbmcsbz09PW51bGwpaWYoaSlCbihyLCExKTtlbHNle2lmKEIhPT0wfHxlIT09bnVsbCYmKGUuZmxhZ3MmNjQpIT09MClmb3IoZT1uLmNoaWxkO2UhPT1udWxsOyl7aWYobz1zcihlKSxvIT09bnVsbCl7Zm9yKG4uZmxhZ3N8PTY0LEJuKHIsITEpLGk9by51cGRhdGVRdWV1ZSxpIT09bnVsbCYmKG4udXBkYXRlUXVldWU9aSxuLmZsYWdzfD00KSxyLmxhc3RFZmZlY3Q9PT1udWxsJiYobi5maXJzdEVmZmVjdD1udWxsKSxuLmxhc3RFZmZlY3Q9ci5sYXN0RWZmZWN0LHI9dCx0PW4uY2hpbGQ7dCE9PW51bGw7KWk9dCxlPXIsaS5mbGFncyY9MixpLm5leHRFZmZlY3Q9bnVsbCxpLmZpcnN0RWZmZWN0PW51bGwsaS5sYXN0RWZmZWN0PW51bGwsbz1pLmFsdGVybmF0ZSxvPT09bnVsbD8oaS5jaGlsZExhbmVzPTAsaS5sYW5lcz1lLGkuY2hpbGQ9bnVsbCxpLm1lbW9pemVkUHJvcHM9bnVsbCxpLm1lbW9pemVkU3RhdGU9bnVsbCxpLnVwZGF0ZVF1ZXVlPW51bGwsaS5kZXBlbmRlbmNpZXM9bnVsbCxpLnN0YXRlTm9kZT1udWxsKTooaS5jaGlsZExhbmVzPW8uY2hpbGRMYW5lcyxpLmxhbmVzPW8ubGFuZXMsaS5jaGlsZD1vLmNoaWxkLGkubWVtb2l6ZWRQcm9wcz1vLm1lbW9pemVkUHJvcHMsaS5tZW1vaXplZFN0YXRlPW8ubWVtb2l6ZWRTdGF0ZSxpLnVwZGF0ZVF1ZXVlPW8udXBkYXRlUXVldWUsaS50eXBlPW8udHlwZSxlPW8uZGVwZW5kZW5jaWVzLGkuZGVwZW5kZW5jaWVzPWU9PT1udWxsP251bGw6e2xhbmVzOmUubGFuZXMsZmlyc3RDb250ZXh0OmUuZmlyc3RDb250ZXh0fSksdD10LnNpYmxpbmc7cmV0dXJuIEQoUixSLmN1cnJlbnQmMXwyKSxuLmNoaWxkfWU9ZS5zaWJsaW5nfXIudGFpbCE9PW51bGwmJkEoKT5EbCYmKG4uZmxhZ3N8PTY0LGk9ITAsQm4ociwhMSksbi5sYW5lcz0zMzU1NDQzMil9ZWxzZXtpZighaSlpZihlPXNyKG8pLGUhPT1udWxsKXtpZihuLmZsYWdzfD02NCxpPSEwLHQ9ZS51cGRhdGVRdWV1ZSx0IT09bnVsbCYmKG4udXBkYXRlUXVldWU9dCxuLmZsYWdzfD00KSxCbihyLCEwKSxyLnRhaWw9PT1udWxsJiZyLnRhaWxNb2RlPT09XCJoaWRkZW5cIiYmIW8uYWx0ZXJuYXRlJiYhZGUpcmV0dXJuIG49bi5sYXN0RWZmZWN0PXIubGFzdEVmZmVjdCxuIT09bnVsbCYmKG4ubmV4dEVmZmVjdD1udWxsKSxudWxsfWVsc2UgMipBKCktci5yZW5kZXJpbmdTdGFydFRpbWU+RGwmJnQhPT0xMDczNzQxODI0JiYobi5mbGFnc3w9NjQsaT0hMCxCbihyLCExKSxuLmxhbmVzPTMzNTU0NDMyKTtyLmlzQmFja3dhcmRzPyhvLnNpYmxpbmc9bi5jaGlsZCxuLmNoaWxkPW8pOih0PXIubGFzdCx0IT09bnVsbD90LnNpYmxpbmc9bzpuLmNoaWxkPW8sci5sYXN0PW8pfXJldHVybiByLnRhaWwhPT1udWxsPyh0PXIudGFpbCxyLnJlbmRlcmluZz10LHIudGFpbD10LnNpYmxpbmcsci5sYXN0RWZmZWN0PW4ubGFzdEVmZmVjdCxyLnJlbmRlcmluZ1N0YXJ0VGltZT1BKCksdC5zaWJsaW5nPW51bGwsbj1SLmN1cnJlbnQsRChSLGk/biYxfDI6biYxKSx0KTpudWxsO2Nhc2UgMjM6Y2FzZSAyNDpyZXR1cm4gTmkoKSxlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbCE9KG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiZyLm1vZGUhPT1cInVuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nXCImJihuLmZsYWdzfD00KSxudWxsfXRocm93IEVycm9yKHYoMTU2LG4udGFnKSl9ZnVuY3Rpb24gcmYoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDE6SihlLnR5cGUpJiZ0cigpO3ZhciBuPWUuZmxhZ3M7cmV0dXJuIG4mNDA5Nj8oZS5mbGFncz1uJi00MDk3fDY0LGUpOm51bGw7Y2FzZSAzOmlmKF9uKCksTyhaKSxPKCQpLHZpKCksbj1lLmZsYWdzLChuJjY0KSE9PTApdGhyb3cgRXJyb3IodigyODUpKTtyZXR1cm4gZS5mbGFncz1uJi00MDk3fDY0LGU7Y2FzZSA1OnJldHVybiBoaShlKSxudWxsO2Nhc2UgMTM6cmV0dXJuIE8oUiksbj1lLmZsYWdzLG4mNDA5Nj8oZS5mbGFncz1uJi00MDk3fDY0LGUpOm51bGw7Y2FzZSAxOTpyZXR1cm4gTyhSKSxudWxsO2Nhc2UgNDpyZXR1cm4gX24oKSxudWxsO2Nhc2UgMTA6cmV0dXJuIHBpKGUpLG51bGw7Y2FzZSAyMzpjYXNlIDI0OnJldHVybiBOaSgpLG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24ga2koZSxuKXt0cnl7dmFyIHQ9XCJcIixyPW47ZG8gdCs9anMocikscj1yLnJldHVybjt3aGlsZShyKTt2YXIgbD10fWNhdGNoKGkpe2w9YFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogYCtpLm1lc3NhZ2UrYFxuYCtpLnN0YWNrfXJldHVybnt2YWx1ZTplLHNvdXJjZTpuLHN0YWNrOmx9fWZ1bmN0aW9uIExsKGUsbil7dHJ5e2NvbnNvbGUuZXJyb3Iobi52YWx1ZSl9Y2F0Y2godCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHR9KX19dmFyIGxmPXR5cGVvZiBXZWFrTWFwPT1cImZ1bmN0aW9uXCI/V2Vha01hcDpNYXA7ZnVuY3Rpb24gb3MoZSxuLHQpe3Q9TGUoLTEsdCksdC50YWc9Myx0LnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH07dmFyIHI9bi52YWx1ZTtyZXR1cm4gdC5jYWxsYmFjaz1mdW5jdGlvbigpe2hyfHwoaHI9ITAsSWw9ciksTGwoZSxuKX0sdH1mdW5jdGlvbiB1cyhlLG4sdCl7dD1MZSgtMSx0KSx0LnRhZz0zO3ZhciByPWUudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7aWYodHlwZW9mIHI9PVwiZnVuY3Rpb25cIil7dmFyIGw9bi52YWx1ZTt0LnBheWxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gTGwoZSxuKSxyKGwpfX12YXIgaT1lLnN0YXRlTm9kZTtyZXR1cm4gaSE9PW51bGwmJnR5cGVvZiBpLmNvbXBvbmVudERpZENhdGNoPT1cImZ1bmN0aW9uXCImJih0LmNhbGxiYWNrPWZ1bmN0aW9uKCl7dHlwZW9mIHIhPVwiZnVuY3Rpb25cIiYmKGZlPT09bnVsbD9mZT1uZXcgU2V0KFt0aGlzXSk6ZmUuYWRkKHRoaXMpLExsKGUsbikpO3ZhciBvPW4uc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaChuLnZhbHVlLHtjb21wb25lbnRTdGFjazpvIT09bnVsbD9vOlwiXCJ9KX0pLHR9dmFyIG9mPXR5cGVvZiBXZWFrU2V0PT1cImZ1bmN0aW9uXCI/V2Vha1NldDpTZXQ7ZnVuY3Rpb24gam8oZSl7dmFyIG49ZS5yZWY7aWYobiE9PW51bGwpaWYodHlwZW9mIG49PVwiZnVuY3Rpb25cIil0cnl7bihudWxsKX1jYXRjaCh0KXtSZShlLHQpfWVsc2Ugbi5jdXJyZW50PW51bGx9ZnVuY3Rpb24gdWYoZSxuKXtzd2l0Y2gobi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Y2FzZSAyMjpyZXR1cm47Y2FzZSAxOmlmKG4uZmxhZ3MmMjU2JiZlIT09bnVsbCl7dmFyIHQ9ZS5tZW1vaXplZFByb3BzLHI9ZS5tZW1vaXplZFN0YXRlO2U9bi5zdGF0ZU5vZGUsbj1lLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKG4uZWxlbWVudFR5cGU9PT1uLnR5cGU/dDpvZShuLnR5cGUsdCksciksZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZT1ufXJldHVybjtjYXNlIDM6bi5mbGFncyYyNTYmJmFpKG4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO3JldHVybjtjYXNlIDU6Y2FzZSA2OmNhc2UgNDpjYXNlIDE3OnJldHVybn10aHJvdyBFcnJvcih2KDE2MykpfWZ1bmN0aW9uIHNmKGUsbix0KXtzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Y2FzZSAyMjppZihuPXQudXBkYXRlUXVldWUsbj1uIT09bnVsbD9uLmxhc3RFZmZlY3Q6bnVsbCxuIT09bnVsbCl7ZT1uPW4ubmV4dDtkb3tpZigoZS50YWcmMyk9PT0zKXt2YXIgcj1lLmNyZWF0ZTtlLmRlc3Ryb3k9cigpfWU9ZS5uZXh0fXdoaWxlKGUhPT1uKX1pZihuPXQudXBkYXRlUXVldWUsbj1uIT09bnVsbD9uLmxhc3RFZmZlY3Q6bnVsbCxuIT09bnVsbCl7ZT1uPW4ubmV4dDtkb3t2YXIgbD1lO3I9bC5uZXh0LGw9bC50YWcsKGwmNCkhPT0wJiYobCYxKSE9PTAmJih2cyh0LGUpLHZmKHQsZSkpLGU9cn13aGlsZShlIT09bil9cmV0dXJuO2Nhc2UgMTplPXQuc3RhdGVOb2RlLHQuZmxhZ3MmNCYmKG49PT1udWxsP2UuY29tcG9uZW50RGlkTW91bnQoKToocj10LmVsZW1lbnRUeXBlPT09dC50eXBlP24ubWVtb2l6ZWRQcm9wczpvZSh0LnR5cGUsbi5tZW1vaXplZFByb3BzKSxlLmNvbXBvbmVudERpZFVwZGF0ZShyLG4ubWVtb2l6ZWRTdGF0ZSxlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKSkpLG49dC51cGRhdGVRdWV1ZSxuIT09bnVsbCYmZ28odCxuLGUpO3JldHVybjtjYXNlIDM6aWYobj10LnVwZGF0ZVF1ZXVlLG4hPT1udWxsKXtpZihlPW51bGwsdC5jaGlsZCE9PW51bGwpc3dpdGNoKHQuY2hpbGQudGFnKXtjYXNlIDU6ZT10LmNoaWxkLnN0YXRlTm9kZTticmVhaztjYXNlIDE6ZT10LmNoaWxkLnN0YXRlTm9kZX1nbyh0LG4sZSl9cmV0dXJuO2Nhc2UgNTplPXQuc3RhdGVOb2RlLG49PT1udWxsJiZ0LmZsYWdzJjQmJk11KHQudHlwZSx0Lm1lbW9pemVkUHJvcHMpJiZlLmZvY3VzKCk7cmV0dXJuO2Nhc2UgNjpyZXR1cm47Y2FzZSA0OnJldHVybjtjYXNlIDEyOnJldHVybjtjYXNlIDEzOnQubWVtb2l6ZWRTdGF0ZT09PW51bGwmJih0PXQuYWx0ZXJuYXRlLHQhPT1udWxsJiYodD10Lm1lbW9pemVkU3RhdGUsdCE9PW51bGwmJih0PXQuZGVoeWRyYXRlZCx0IT09bnVsbCYmY3UodCkpKSk7cmV0dXJuO2Nhc2UgMTk6Y2FzZSAxNzpjYXNlIDIwOmNhc2UgMjE6Y2FzZSAyMzpjYXNlIDI0OnJldHVybn10aHJvdyBFcnJvcih2KDE2MykpfWZ1bmN0aW9uIFVvKGUsbil7Zm9yKHZhciB0PWU7Oyl7aWYodC50YWc9PT01KXt2YXIgcj10LnN0YXRlTm9kZTtpZihuKXI9ci5zdHlsZSx0eXBlb2Ygci5zZXRQcm9wZXJ0eT09XCJmdW5jdGlvblwiP3Iuc2V0UHJvcGVydHkoXCJkaXNwbGF5XCIsXCJub25lXCIsXCJpbXBvcnRhbnRcIik6ci5kaXNwbGF5PVwibm9uZVwiO2Vsc2V7cj10LnN0YXRlTm9kZTt2YXIgbD10Lm1lbW9pemVkUHJvcHMuc3R5bGU7bD1sIT1udWxsJiZsLmhhc093blByb3BlcnR5KFwiZGlzcGxheVwiKT9sLmRpc3BsYXk6bnVsbCxyLnN0eWxlLmRpc3BsYXk9ZXUoXCJkaXNwbGF5XCIsbCl9fWVsc2UgaWYodC50YWc9PT02KXQuc3RhdGVOb2RlLm5vZGVWYWx1ZT1uP1wiXCI6dC5tZW1vaXplZFByb3BzO2Vsc2UgaWYoKHQudGFnIT09MjMmJnQudGFnIT09MjR8fHQubWVtb2l6ZWRTdGF0ZT09PW51bGx8fHQ9PT1lKSYmdC5jaGlsZCE9PW51bGwpe3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2NvbnRpbnVlfWlmKHQ9PT1lKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1lKXJldHVybjt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9fWZ1bmN0aW9uIFZvKGUsbil7aWYoWGUmJnR5cGVvZiBYZS5vbkNvbW1pdEZpYmVyVW5tb3VudD09XCJmdW5jdGlvblwiKXRyeXtYZS5vbkNvbW1pdEZpYmVyVW5tb3VudChmaSxuKX1jYXRjaHt9c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAyMjppZihlPW4udXBkYXRlUXVldWUsZSE9PW51bGwmJihlPWUubGFzdEVmZmVjdCxlIT09bnVsbCkpe3ZhciB0PWU9ZS5uZXh0O2Rve3ZhciByPXQsbD1yLmRlc3Ryb3k7aWYocj1yLnRhZyxsIT09dm9pZCAwKWlmKChyJjQpIT09MCl2cyhuLHQpO2Vsc2V7cj1uO3RyeXtsKCl9Y2F0Y2goaSl7UmUocixpKX19dD10Lm5leHR9d2hpbGUodCE9PWUpfWJyZWFrO2Nhc2UgMTppZihqbyhuKSxlPW4uc3RhdGVOb2RlLHR5cGVvZiBlLmNvbXBvbmVudFdpbGxVbm1vdW50PT1cImZ1bmN0aW9uXCIpdHJ5e2UucHJvcHM9bi5tZW1vaXplZFByb3BzLGUuc3RhdGU9bi5tZW1vaXplZFN0YXRlLGUuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChpKXtSZShuLGkpfWJyZWFrO2Nhc2UgNTpqbyhuKTticmVhaztjYXNlIDQ6c3MoZSxuKX19ZnVuY3Rpb24gQm8oZSl7ZS5hbHRlcm5hdGU9bnVsbCxlLmNoaWxkPW51bGwsZS5kZXBlbmRlbmNpZXM9bnVsbCxlLmZpcnN0RWZmZWN0PW51bGwsZS5sYXN0RWZmZWN0PW51bGwsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS5wZW5kaW5nUHJvcHM9bnVsbCxlLnJldHVybj1udWxsLGUudXBkYXRlUXVldWU9bnVsbH1mdW5jdGlvbiBIbyhlKXtyZXR1cm4gZS50YWc9PT01fHxlLnRhZz09PTN8fGUudGFnPT09NH1mdW5jdGlvbiBXbyhlKXtlOntmb3IodmFyIG49ZS5yZXR1cm47biE9PW51bGw7KXtpZihIbyhuKSlicmVhayBlO249bi5yZXR1cm59dGhyb3cgRXJyb3IodigxNjApKX12YXIgdD1uO3N3aXRjaChuPXQuc3RhdGVOb2RlLHQudGFnKXtjYXNlIDU6dmFyIHI9ITE7YnJlYWs7Y2FzZSAzOm49bi5jb250YWluZXJJbmZvLHI9ITA7YnJlYWs7Y2FzZSA0Om49bi5jb250YWluZXJJbmZvLHI9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcih2KDE2MSkpfXQuZmxhZ3MmMTYmJih1dChuLFwiXCIpLHQuZmxhZ3MmPS0xNyk7ZTpuOmZvcih0PWU7Oyl7Zm9yKDt0LnNpYmxpbmc9PT1udWxsOyl7aWYodC5yZXR1cm49PT1udWxsfHxIbyh0LnJldHVybikpe3Q9bnVsbDticmVhayBlfXQ9dC5yZXR1cm59Zm9yKHQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmc7dC50YWchPT01JiZ0LnRhZyE9PTYmJnQudGFnIT09MTg7KXtpZih0LmZsYWdzJjJ8fHQuY2hpbGQ9PT1udWxsfHx0LnRhZz09PTQpY29udGludWUgbjt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZH1pZighKHQuZmxhZ3MmMikpe3Q9dC5zdGF0ZU5vZGU7YnJlYWsgZX19cj96bChlLHQsbik6T2woZSx0LG4pfWZ1bmN0aW9uIHpsKGUsbix0KXt2YXIgcj1lLnRhZyxsPXI9PT01fHxyPT09NjtpZihsKWU9bD9lLnN0YXRlTm9kZTplLnN0YXRlTm9kZS5pbnN0YW5jZSxuP3Qubm9kZVR5cGU9PT04P3QucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSxuKTp0Lmluc2VydEJlZm9yZShlLG4pOih0Lm5vZGVUeXBlPT09OD8obj10LnBhcmVudE5vZGUsbi5pbnNlcnRCZWZvcmUoZSx0KSk6KG49dCxuLmFwcGVuZENoaWxkKGUpKSx0PXQuX3JlYWN0Um9vdENvbnRhaW5lcix0IT1udWxsfHxuLm9uY2xpY2shPT1udWxsfHwobi5vbmNsaWNrPWVyKSk7ZWxzZSBpZihyIT09NCYmKGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKHpsKGUsbix0KSxlPWUuc2libGluZztlIT09bnVsbDspemwoZSxuLHQpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIE9sKGUsbix0KXt2YXIgcj1lLnRhZyxsPXI9PT01fHxyPT09NjtpZihsKWU9bD9lLnN0YXRlTm9kZTplLnN0YXRlTm9kZS5pbnN0YW5jZSxuP3QuaW5zZXJ0QmVmb3JlKGUsbik6dC5hcHBlbmRDaGlsZChlKTtlbHNlIGlmKHIhPT00JiYoZT1lLmNoaWxkLGUhPT1udWxsKSlmb3IoT2woZSxuLHQpLGU9ZS5zaWJsaW5nO2UhPT1udWxsOylPbChlLG4sdCksZT1lLnNpYmxpbmd9ZnVuY3Rpb24gc3MoZSxuKXtmb3IodmFyIHQ9bixyPSExLGwsaTs7KXtpZighcil7cj10LnJldHVybjtlOmZvcig7Oyl7aWYocj09PW51bGwpdGhyb3cgRXJyb3IodigxNjApKTtzd2l0Y2gobD1yLnN0YXRlTm9kZSxyLnRhZyl7Y2FzZSA1Omk9ITE7YnJlYWsgZTtjYXNlIDM6bD1sLmNvbnRhaW5lckluZm8saT0hMDticmVhayBlO2Nhc2UgNDpsPWwuY29udGFpbmVySW5mbyxpPSEwO2JyZWFrIGV9cj1yLnJldHVybn1yPSEwfWlmKHQudGFnPT09NXx8dC50YWc9PT02KXtlOmZvcih2YXIgbz1lLHU9dCxzPXU7OylpZihWbyhvLHMpLHMuY2hpbGQhPT1udWxsJiZzLnRhZyE9PTQpcy5jaGlsZC5yZXR1cm49cyxzPXMuY2hpbGQ7ZWxzZXtpZihzPT09dSlicmVhayBlO2Zvcig7cy5zaWJsaW5nPT09bnVsbDspe2lmKHMucmV0dXJuPT09bnVsbHx8cy5yZXR1cm49PT11KWJyZWFrIGU7cz1zLnJldHVybn1zLnNpYmxpbmcucmV0dXJuPXMucmV0dXJuLHM9cy5zaWJsaW5nfWk/KG89bCx1PXQuc3RhdGVOb2RlLG8ubm9kZVR5cGU9PT04P28ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1KTpvLnJlbW92ZUNoaWxkKHUpKTpsLnJlbW92ZUNoaWxkKHQuc3RhdGVOb2RlKX1lbHNlIGlmKHQudGFnPT09NCl7aWYodC5jaGlsZCE9PW51bGwpe2w9dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxpPSEwLHQuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2NvbnRpbnVlfX1lbHNlIGlmKFZvKGUsdCksdC5jaGlsZCE9PW51bGwpe3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2NvbnRpbnVlfWlmKHQ9PT1uKWJyZWFrO2Zvcig7dC5zaWJsaW5nPT09bnVsbDspe2lmKHQucmV0dXJuPT09bnVsbHx8dC5yZXR1cm49PT1uKXJldHVybjt0PXQucmV0dXJuLHQudGFnPT09NCYmKHI9ITEpfXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9fWZ1bmN0aW9uIFpyKGUsbil7c3dpdGNoKG4udGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAyMjp2YXIgdD1uLnVwZGF0ZVF1ZXVlO2lmKHQ9dCE9PW51bGw/dC5sYXN0RWZmZWN0Om51bGwsdCE9PW51bGwpe3ZhciByPXQ9dC5uZXh0O2RvKHIudGFnJjMpPT09MyYmKGU9ci5kZXN0cm95LHIuZGVzdHJveT12b2lkIDAsZSE9PXZvaWQgMCYmZSgpKSxyPXIubmV4dDt3aGlsZShyIT09dCl9cmV0dXJuO2Nhc2UgMTpyZXR1cm47Y2FzZSA1OmlmKHQ9bi5zdGF0ZU5vZGUsdCE9bnVsbCl7cj1uLm1lbW9pemVkUHJvcHM7dmFyIGw9ZSE9PW51bGw/ZS5tZW1vaXplZFByb3BzOnI7ZT1uLnR5cGU7dmFyIGk9bi51cGRhdGVRdWV1ZTtpZihuLnVwZGF0ZVF1ZXVlPW51bGwsaSE9PW51bGwpe2Zvcih0W25yXT1yLGU9PT1cImlucHV0XCImJnIudHlwZT09PVwicmFkaW9cIiYmci5uYW1lIT1udWxsJiZabyh0LHIpLGFsKGUsbCksbj1hbChlLHIpLGw9MDtsPGkubGVuZ3RoO2wrPTIpe3ZhciBvPWlbbF0sdT1pW2wrMV07bz09PVwic3R5bGVcIj9udSh0LHUpOm89PT1cImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI/Ym8odCx1KTpvPT09XCJjaGlsZHJlblwiP3V0KHQsdSk6V2wodCxvLHUsbil9c3dpdGNoKGUpe2Nhc2VcImlucHV0XCI6dGwodCxyKTticmVhaztjYXNlXCJ0ZXh0YXJlYVwiOkpvKHQscik7YnJlYWs7Y2FzZVwic2VsZWN0XCI6ZT10Ll93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUsdC5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhci5tdWx0aXBsZSxpPXIudmFsdWUsaSE9bnVsbD9wbih0LCEhci5tdWx0aXBsZSxpLCExKTplIT09ISFyLm11bHRpcGxlJiYoci5kZWZhdWx0VmFsdWUhPW51bGw/cG4odCwhIXIubXVsdGlwbGUsci5kZWZhdWx0VmFsdWUsITApOnBuKHQsISFyLm11bHRpcGxlLHIubXVsdGlwbGU/W106XCJcIiwhMSkpfX19cmV0dXJuO2Nhc2UgNjppZihuLnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IodigxNjIpKTtuLnN0YXRlTm9kZS5ub2RlVmFsdWU9bi5tZW1vaXplZFByb3BzO3JldHVybjtjYXNlIDM6dD1uLnN0YXRlTm9kZSx0Lmh5ZHJhdGUmJih0Lmh5ZHJhdGU9ITEsY3UodC5jb250YWluZXJJbmZvKSk7cmV0dXJuO2Nhc2UgMTI6cmV0dXJuO2Nhc2UgMTM6bi5tZW1vaXplZFN0YXRlIT09bnVsbCYmKF9pPUEoKSxVbyhuLmNoaWxkLCEwKSksQW8obik7cmV0dXJuO2Nhc2UgMTk6QW8obik7cmV0dXJuO2Nhc2UgMTc6cmV0dXJuO2Nhc2UgMjM6Y2FzZSAyNDpVbyhuLG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwpO3JldHVybn10aHJvdyBFcnJvcih2KDE2MykpfWZ1bmN0aW9uIEFvKGUpe3ZhciBuPWUudXBkYXRlUXVldWU7aWYobiE9PW51bGwpe2UudXBkYXRlUXVldWU9bnVsbDt2YXIgdD1lLnN0YXRlTm9kZTt0PT09bnVsbCYmKHQ9ZS5zdGF0ZU5vZGU9bmV3IG9mKSxuLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIGw9d2YuYmluZChudWxsLGUscik7dC5oYXMocil8fCh0LmFkZChyKSxyLnRoZW4obCxsKSl9KX19ZnVuY3Rpb24gYWYoZSxuKXtyZXR1cm4gZSE9PW51bGwmJihlPWUubWVtb2l6ZWRTdGF0ZSxlPT09bnVsbHx8ZS5kZWh5ZHJhdGVkIT09bnVsbCk/KG49bi5tZW1vaXplZFN0YXRlLG4hPT1udWxsJiZuLmRlaHlkcmF0ZWQ9PT1udWxsKTohMX12YXIgZmY9TWF0aC5jZWlsLG1yPXFlLlJlYWN0Q3VycmVudERpc3BhdGNoZXIseGk9cWUuUmVhY3RDdXJyZW50T3duZXIseD0wLFk9bnVsbCxqPW51bGwsUT0wLFplPTAsTWw9VmUoMCksQj0wLFRyPW51bGwsVG49MCx4dD0wLExuPTAsQ2k9MCxSbD1udWxsLF9pPTAsRGw9MS8wO2Z1bmN0aW9uIHpuKCl7RGw9QSgpKzUwMH12YXIgZz1udWxsLGhyPSExLElsPW51bGwsZmU9bnVsbCxqZT0hMSxydD1udWxsLFluPTkwLEZsPVtdLGpsPVtdLGdlPW51bGwsbHQ9MCxVbD1udWxsLFF0PS0xLGhlPTAsJHQ9MCxpdD1udWxsLFl0PSExO2Z1bmN0aW9uIHEoKXtyZXR1cm4oeCY0OCkhPT0wP0EoKTpRdCE9PS0xP1F0OlF0PUEoKX1mdW5jdGlvbiBPZShlKXtpZihlPWUubW9kZSwoZSYyKT09PTApcmV0dXJuIDE7aWYoKGUmNCk9PT0wKXJldHVybiBDbigpPT09OTk/MToyO2lmKGhlPT09MCYmKGhlPVRuKSxaYS50cmFuc2l0aW9uIT09MCl7JHQhPT0wJiYoJHQ9UmwhPT1udWxsP1JsLnBlbmRpbmdMYW5lczowKSxlPWhlO3ZhciBuPTQxODYxMTImfiR0O3JldHVybiBuJj0tbixuPT09MCYmKGU9NDE4NjExMiZ+ZSxuPWUmLWUsbj09PTAmJihuPTgxOTIpKSxufXJldHVybiBlPUNuKCksKHgmNCkhPT0wJiZlPT09OTg/ZT1xdCgxMixoZSk6KGU9YnMoZSksZT1xdChlLGhlKSksZX1mdW5jdGlvbiBNZShlLG4sdCl7aWYoNTA8bHQpdGhyb3cgbHQ9MCxVbD1udWxsLEVycm9yKHYoMTg1KSk7aWYoZT1McihlLG4pLGU9PT1udWxsKXJldHVybiBudWxsO0VyKGUsbix0KSxlPT09WSYmKExufD1uLEI9PT00JiZ3bihlLFEpKTt2YXIgcj1DbigpO249PT0xPyh4JjgpIT09MCYmKHgmNDgpPT09MD9WbChlKToobGUoZSx0KSx4PT09MCYmKHpuKCkscGUoKSkpOigoeCY0KT09PTB8fHIhPT05OCYmciE9PTk5fHwoZ2U9PT1udWxsP2dlPW5ldyBTZXQoW2VdKTpnZS5hZGQoZSkpLGxlKGUsdCkpLFJsPWV9ZnVuY3Rpb24gTHIoZSxuKXtlLmxhbmVzfD1uO3ZhciB0PWUuYWx0ZXJuYXRlO2Zvcih0IT09bnVsbCYmKHQubGFuZXN8PW4pLHQ9ZSxlPWUucmV0dXJuO2UhPT1udWxsOyllLmNoaWxkTGFuZXN8PW4sdD1lLmFsdGVybmF0ZSx0IT09bnVsbCYmKHQuY2hpbGRMYW5lc3w9biksdD1lLGU9ZS5yZXR1cm47cmV0dXJuIHQudGFnPT09Mz90LnN0YXRlTm9kZTpudWxsfWZ1bmN0aW9uIGxlKGUsbil7Zm9yKHZhciB0PWUuY2FsbGJhY2tOb2RlLHI9ZS5zdXNwZW5kZWRMYW5lcyxsPWUucGluZ2VkTGFuZXMsaT1lLmV4cGlyYXRpb25UaW1lcyxvPWUucGVuZGluZ0xhbmVzOzA8bzspe3ZhciB1PTMxLUllKG8pLHM9MTw8dSxkPWlbdV07aWYoZD09PS0xKXtpZigocyZyKT09PTB8fChzJmwpIT09MCl7ZD1uLHJuKHMpO3ZhciB5PUw7aVt1XT0xMDw9eT9kKzI1MDo2PD15P2QrNWUzOi0xfX1lbHNlIGQ8PW4mJihlLmV4cGlyZWRMYW5lc3w9cyk7byY9fnN9aWYocj1jdChlLGU9PT1ZP1E6MCksbj1MLHI9PT0wKXQhPT1udWxsJiYodCE9PSRyJiZTbCh0KSxlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wKTtlbHNle2lmKHQhPT1udWxsKXtpZihlLmNhbGxiYWNrUHJpb3JpdHk9PT1uKXJldHVybjt0IT09JHImJlNsKHQpfW49PT0xNT8odD1WbC5iaW5kKG51bGwsZSksbWU9PT1udWxsPyhtZT1bdF0sQXQ9Y2koTnIsQnUpKTptZS5wdXNoKHQpLHQ9JHIpOm49PT0xND90PWh0KDk5LFZsLmJpbmQobnVsbCxlKSk6KHQ9ZWEobiksdD1odCh0LGFzLmJpbmQobnVsbCxlKSkpLGUuY2FsbGJhY2tQcmlvcml0eT1uLGUuY2FsbGJhY2tOb2RlPXR9fWZ1bmN0aW9uIGFzKGUpe2lmKFF0PS0xLCR0PWhlPTAsKHgmNDgpIT09MCl0aHJvdyBFcnJvcih2KDMyNykpO3ZhciBuPWUuY2FsbGJhY2tOb2RlO2lmKEJlKCkmJmUuY2FsbGJhY2tOb2RlIT09bilyZXR1cm4gbnVsbDt2YXIgdD1jdChlLGU9PT1ZP1E6MCk7aWYodD09PTApcmV0dXJuIG51bGw7dmFyIHI9dCxsPXg7eHw9MTY7dmFyIGk9cHMoKTsoWSE9PWV8fFEhPT1yKSYmKHpuKCksU24oZSxyKSk7ZG8gdHJ5e3BmKCk7YnJlYWt9Y2F0Y2godSl7ZHMoZSx1KX13aGlsZSgxKTtpZihkaSgpLG1yLmN1cnJlbnQ9aSx4PWwsaiE9PW51bGw/cj0wOihZPW51bGwsUT0wLHI9QiksKFRuJkxuKSE9PTApU24oZSwwKTtlbHNlIGlmKHIhPT0wKXtpZihyPT09MiYmKHh8PTY0LGUuaHlkcmF0ZSYmKGUuaHlkcmF0ZT0hMSxhaShlLmNvbnRhaW5lckluZm8pKSx0PWd1KGUpLHQhPT0wJiYocj1YbihlLHQpKSkscj09PTEpdGhyb3cgbj1UcixTbihlLDApLHduKGUsdCksbGUoZSxBKCkpLG47c3dpdGNoKGUuZmluaXNoZWRXb3JrPWUuY3VycmVudC5hbHRlcm5hdGUsZS5maW5pc2hlZExhbmVzPXQscil7Y2FzZSAwOmNhc2UgMTp0aHJvdyBFcnJvcih2KDM0NSkpO2Nhc2UgMjpIZShlKTticmVhaztjYXNlIDM6aWYod24oZSx0KSwodCY2MjkxNDU2MCk9PT10JiYocj1faSs1MDAtQSgpLDEwPHIpKXtpZihjdChlLDApIT09MClicmVhaztpZihsPWUuc3VzcGVuZGVkTGFuZXMsKGwmdCkhPT10KXtxKCksZS5waW5nZWRMYW5lc3w9ZS5zdXNwZW5kZWRMYW5lcyZsO2JyZWFrfWUudGltZW91dEhhbmRsZT1hbyhIZS5iaW5kKG51bGwsZSkscik7YnJlYWt9SGUoZSk7YnJlYWs7Y2FzZSA0OmlmKHduKGUsdCksKHQmNDE4NjExMik9PT10KWJyZWFrO2ZvcihyPWUuZXZlbnRUaW1lcyxsPS0xOzA8dDspe3ZhciBvPTMxLUllKHQpO2k9MTw8byxvPXJbb10sbz5sJiYobD1vKSx0Jj1+aX1pZih0PWwsdD1BKCktdCx0PSgxMjA+dD8xMjA6NDgwPnQ/NDgwOjEwODA+dD8xMDgwOjE5MjA+dD8xOTIwOjNlMz50PzNlMzo0MzIwPnQ/NDMyMDoxOTYwKmZmKHQvMTk2MCkpLXQsMTA8dCl7ZS50aW1lb3V0SGFuZGxlPWFvKEhlLmJpbmQobnVsbCxlKSx0KTticmVha31IZShlKTticmVhaztjYXNlIDU6SGUoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcih2KDMyOSkpfX1yZXR1cm4gbGUoZSxBKCkpLGUuY2FsbGJhY2tOb2RlPT09bj9hcy5iaW5kKG51bGwsZSk6bnVsbH1mdW5jdGlvbiB3bihlLG4pe2ZvcihuJj1+Q2ksbiY9fkxuLGUuc3VzcGVuZGVkTGFuZXN8PW4sZS5waW5nZWRMYW5lcyY9fm4sZT1lLmV4cGlyYXRpb25UaW1lczswPG47KXt2YXIgdD0zMS1JZShuKSxyPTE8PHQ7ZVt0XT0tMSxuJj1+cn19ZnVuY3Rpb24gVmwoZSl7aWYoKHgmNDgpIT09MCl0aHJvdyBFcnJvcih2KDMyNykpO2lmKEJlKCksZT09PVkmJihlLmV4cGlyZWRMYW5lcyZRKSE9PTApe3ZhciBuPVEsdD1YbihlLG4pOyhUbiZMbikhPT0wJiYobj1jdChlLG4pLHQ9WG4oZSxuKSl9ZWxzZSBuPWN0KGUsMCksdD1YbihlLG4pO2lmKGUudGFnIT09MCYmdD09PTImJih4fD02NCxlLmh5ZHJhdGUmJihlLmh5ZHJhdGU9ITEsYWkoZS5jb250YWluZXJJbmZvKSksbj1ndShlKSxuIT09MCYmKHQ9WG4oZSxuKSkpLHQ9PT0xKXRocm93IHQ9VHIsU24oZSwwKSx3bihlLG4pLGxlKGUsQSgpKSx0O3JldHVybiBlLmZpbmlzaGVkV29yaz1lLmN1cnJlbnQuYWx0ZXJuYXRlLGUuZmluaXNoZWRMYW5lcz1uLEhlKGUpLGxlKGUsQSgpKSxudWxsfWZ1bmN0aW9uIGNmKCl7aWYoZ2UhPT1udWxsKXt2YXIgZT1nZTtnZT1udWxsLGUuZm9yRWFjaChmdW5jdGlvbihuKXtuLmV4cGlyZWRMYW5lc3w9MjQmbi5wZW5kaW5nTGFuZXMsbGUobixBKCkpfSl9cGUoKX1mdW5jdGlvbiBmcyhlLG4pe3ZhciB0PXg7eHw9MTt0cnl7cmV0dXJuIGUobil9ZmluYWxseXt4PXQseD09PTAmJih6bigpLHBlKCkpfX1mdW5jdGlvbiBjcyhlLG4pe3ZhciB0PXg7eCY9LTIseHw9ODt0cnl7cmV0dXJuIGUobil9ZmluYWxseXt4PXQseD09PTAmJih6bigpLHBlKCkpfX1mdW5jdGlvbiBqdChlLG4pe0QoTWwsWmUpLFplfD1uLFRufD1ufWZ1bmN0aW9uIE5pKCl7WmU9TWwuY3VycmVudCxPKE1sKX1mdW5jdGlvbiBTbihlLG4pe2UuZmluaXNoZWRXb3JrPW51bGwsZS5maW5pc2hlZExhbmVzPTA7dmFyIHQ9ZS50aW1lb3V0SGFuZGxlO2lmKHQhPT0tMSYmKGUudGltZW91dEhhbmRsZT0tMSxRYSh0KSksaiE9PW51bGwpZm9yKHQ9ai5yZXR1cm47dCE9PW51bGw7KXt2YXIgcj10O3N3aXRjaChyLnRhZyl7Y2FzZSAxOnI9ci50eXBlLmNoaWxkQ29udGV4dFR5cGVzLHIhPW51bGwmJnRyKCk7YnJlYWs7Y2FzZSAzOl9uKCksTyhaKSxPKCQpLHZpKCk7YnJlYWs7Y2FzZSA1OmhpKHIpO2JyZWFrO2Nhc2UgNDpfbigpO2JyZWFrO2Nhc2UgMTM6TyhSKTticmVhaztjYXNlIDE5Ok8oUik7YnJlYWs7Y2FzZSAxMDpwaShyKTticmVhaztjYXNlIDIzOmNhc2UgMjQ6TmkoKX10PXQucmV0dXJufVk9ZSxqPVVlKGUuY3VycmVudCxudWxsKSxRPVplPVRuPW4sQj0wLFRyPW51bGwsQ2k9TG49eHQ9MH1mdW5jdGlvbiBkcyhlLG4pe2Rve3ZhciB0PWo7dHJ5e2lmKGRpKCksbnQuY3VycmVudD1wcixhcil7Zm9yKHZhciByPUkubWVtb2l6ZWRTdGF0ZTtyIT09bnVsbDspe3ZhciBsPXIucXVldWU7bCE9PW51bGwmJihsLnBlbmRpbmc9bnVsbCkscj1yLm5leHR9YXI9ITF9aWYod3Q9MCxWPVc9ST1udWxsLHR0PSExLHhpLmN1cnJlbnQ9bnVsbCx0PT09bnVsbHx8dC5yZXR1cm49PT1udWxsKXtCPTEsVHI9bixqPW51bGw7YnJlYWt9ZTp7dmFyIGk9ZSxvPXQucmV0dXJuLHU9dCxzPW47aWYobj1RLHUuZmxhZ3N8PTIwNDgsdS5maXJzdEVmZmVjdD11Lmxhc3RFZmZlY3Q9bnVsbCxzIT09bnVsbCYmdHlwZW9mIHM9PVwib2JqZWN0XCImJnR5cGVvZiBzLnRoZW49PVwiZnVuY3Rpb25cIil7dmFyIGQ9cztpZigodS5tb2RlJjIpPT09MCl7dmFyIHk9dS5hbHRlcm5hdGU7eT8odS51cGRhdGVRdWV1ZT15LnVwZGF0ZVF1ZXVlLHUubWVtb2l6ZWRTdGF0ZT15Lm1lbW9pemVkU3RhdGUsdS5sYW5lcz15LmxhbmVzKToodS51cGRhdGVRdWV1ZT1udWxsLHUubWVtb2l6ZWRTdGF0ZT1udWxsKX12YXIgQz0oUi5jdXJyZW50JjEpIT09MCxoPW87ZG97dmFyIFM7aWYoUz1oLnRhZz09PTEzKXt2YXIgaz1oLm1lbW9pemVkU3RhdGU7aWYoayE9PW51bGwpUz1rLmRlaHlkcmF0ZWQhPT1udWxsO2Vsc2V7dmFyIEU9aC5tZW1vaXplZFByb3BzO1M9RS5mYWxsYmFjaz09PXZvaWQgMD8hMTpFLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrIT09ITA/ITA6IUN9fWlmKFMpe3ZhciBjPWgudXBkYXRlUXVldWU7aWYoYz09PW51bGwpe3ZhciBhPW5ldyBTZXQ7YS5hZGQoZCksaC51cGRhdGVRdWV1ZT1hfWVsc2UgYy5hZGQoZCk7aWYoKGgubW9kZSYyKT09PTApe2lmKGguZmxhZ3N8PTY0LHUuZmxhZ3N8PTE2Mzg0LHUuZmxhZ3MmPS0yOTgxLHUudGFnPT09MSlpZih1LmFsdGVybmF0ZT09PW51bGwpdS50YWc9MTc7ZWxzZXt2YXIgZj1MZSgtMSwxKTtmLnRhZz0yLHplKHUsZil9dS5sYW5lc3w9MTticmVhayBlfXM9dm9pZCAwLHU9bjt2YXIgcD1pLnBpbmdDYWNoZTtpZihwPT09bnVsbD8ocD1pLnBpbmdDYWNoZT1uZXcgbGYscz1uZXcgU2V0LHAuc2V0KGQscykpOihzPXAuZ2V0KGQpLHM9PT12b2lkIDAmJihzPW5ldyBTZXQscC5zZXQoZCxzKSkpLCFzLmhhcyh1KSl7cy5hZGQodSk7dmFyIG09Z2YuYmluZChudWxsLGksZCx1KTtkLnRoZW4obSxtKX1oLmZsYWdzfD00MDk2LGgubGFuZXM9bjticmVhayBlfWg9aC5yZXR1cm59d2hpbGUoaCE9PW51bGwpO3M9RXJyb3IoKGRuKHUudHlwZSl8fFwiQSBSZWFjdCBjb21wb25lbnRcIikrYCBzdXNwZW5kZWQgd2hpbGUgcmVuZGVyaW5nLCBidXQgbm8gZmFsbGJhY2sgVUkgd2FzIHNwZWNpZmllZC5cblxuQWRkIGEgPFN1c3BlbnNlIGZhbGxiYWNrPS4uLj4gY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgdHJlZSB0byBwcm92aWRlIGEgbG9hZGluZyBpbmRpY2F0b3Igb3IgcGxhY2Vob2xkZXIgdG8gZGlzcGxheS5gKX1CIT09NSYmKEI9Mikscz1raShzLHUpLGg9bztkb3tzd2l0Y2goaC50YWcpe2Nhc2UgMzppPXMsaC5mbGFnc3w9NDA5NixuJj0tbixoLmxhbmVzfD1uO3ZhciBfPW9zKGgsaSxuKTt5byhoLF8pO2JyZWFrIGU7Y2FzZSAxOmk9czt2YXIgdz1oLnR5cGUsTj1oLnN0YXRlTm9kZTtpZigoaC5mbGFncyY2NCk9PT0wJiYodHlwZW9mIHcuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPT1cImZ1bmN0aW9uXCJ8fE4hPT1udWxsJiZ0eXBlb2YgTi5jb21wb25lbnREaWRDYXRjaD09XCJmdW5jdGlvblwiJiYoZmU9PT1udWxsfHwhZmUuaGFzKE4pKSkpe2guZmxhZ3N8PTQwOTYsbiY9LW4saC5sYW5lc3w9bjt2YXIgVD11cyhoLGksbik7eW8oaCxUKTticmVhayBlfX1oPWgucmV0dXJufXdoaWxlKGghPT1udWxsKX1ocyh0KX1jYXRjaChQKXtuPVAsaj09PXQmJnQhPT1udWxsJiYoaj10PXQucmV0dXJuKTtjb250aW51ZX1icmVha313aGlsZSgxKX1mdW5jdGlvbiBwcygpe3ZhciBlPW1yLmN1cnJlbnQ7cmV0dXJuIG1yLmN1cnJlbnQ9cHIsZT09PW51bGw/cHI6ZX1mdW5jdGlvbiBYbihlLG4pe3ZhciB0PXg7eHw9MTY7dmFyIHI9cHMoKTtZPT09ZSYmUT09PW58fFNuKGUsbik7ZG8gdHJ5e2RmKCk7YnJlYWt9Y2F0Y2gobCl7ZHMoZSxsKX13aGlsZSgxKTtpZihkaSgpLHg9dCxtci5jdXJyZW50PXIsaiE9PW51bGwpdGhyb3cgRXJyb3IodigyNjEpKTtyZXR1cm4gWT1udWxsLFE9MCxCfWZ1bmN0aW9uIGRmKCl7Zm9yKDtqIT09bnVsbDspbXMoail9ZnVuY3Rpb24gcGYoKXtmb3IoO2ohPT1udWxsJiYhWGEoKTspbXMoail9ZnVuY3Rpb24gbXMoZSl7dmFyIG49eXMoZS5hbHRlcm5hdGUsZSxaZSk7ZS5tZW1vaXplZFByb3BzPWUucGVuZGluZ1Byb3BzLG49PT1udWxsP2hzKGUpOmo9bix4aS5jdXJyZW50PW51bGx9ZnVuY3Rpb24gaHMoZSl7dmFyIG49ZTtkb3t2YXIgdD1uLmFsdGVybmF0ZTtpZihlPW4ucmV0dXJuLChuLmZsYWdzJjIwNDgpPT09MCl7aWYodD10Zih0LG4sWmUpLHQhPT1udWxsKXtqPXQ7cmV0dXJufWlmKHQ9bix0LnRhZyE9PTI0JiZ0LnRhZyE9PTIzfHx0Lm1lbW9pemVkU3RhdGU9PT1udWxsfHwoWmUmMTA3Mzc0MTgyNCkhPT0wfHwodC5tb2RlJjQpPT09MCl7Zm9yKHZhciByPTAsbD10LmNoaWxkO2whPT1udWxsOylyfD1sLmxhbmVzfGwuY2hpbGRMYW5lcyxsPWwuc2libGluZzt0LmNoaWxkTGFuZXM9cn1lIT09bnVsbCYmKGUuZmxhZ3MmMjA0OCk9PT0wJiYoZS5maXJzdEVmZmVjdD09PW51bGwmJihlLmZpcnN0RWZmZWN0PW4uZmlyc3RFZmZlY3QpLG4ubGFzdEVmZmVjdCE9PW51bGwmJihlLmxhc3RFZmZlY3QhPT1udWxsJiYoZS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9bi5maXJzdEVmZmVjdCksZS5sYXN0RWZmZWN0PW4ubGFzdEVmZmVjdCksMTxuLmZsYWdzJiYoZS5sYXN0RWZmZWN0IT09bnVsbD9lLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1uOmUuZmlyc3RFZmZlY3Q9bixlLmxhc3RFZmZlY3Q9bikpfWVsc2V7aWYodD1yZihuKSx0IT09bnVsbCl7dC5mbGFncyY9MjA0NyxqPXQ7cmV0dXJufWUhPT1udWxsJiYoZS5maXJzdEVmZmVjdD1lLmxhc3RFZmZlY3Q9bnVsbCxlLmZsYWdzfD0yMDQ4KX1pZihuPW4uc2libGluZyxuIT09bnVsbCl7aj1uO3JldHVybn1qPW49ZX13aGlsZShuIT09bnVsbCk7Qj09PTAmJihCPTUpfWZ1bmN0aW9uIEhlKGUpe3ZhciBuPUNuKCk7cmV0dXJuIEdlKDk5LG1mLmJpbmQobnVsbCxlLG4pKSxudWxsfWZ1bmN0aW9uIG1mKGUsbil7ZG8gQmUoKTt3aGlsZShydCE9PW51bGwpO2lmKCh4JjQ4KSE9PTApdGhyb3cgRXJyb3IodigzMjcpKTt2YXIgdD1lLmZpbmlzaGVkV29yaztpZih0PT09bnVsbClyZXR1cm4gbnVsbDtpZihlLmZpbmlzaGVkV29yaz1udWxsLGUuZmluaXNoZWRMYW5lcz0wLHQ9PT1lLmN1cnJlbnQpdGhyb3cgRXJyb3IodigxNzcpKTtlLmNhbGxiYWNrTm9kZT1udWxsO3ZhciByPXQubGFuZXN8dC5jaGlsZExhbmVzLGw9cixpPWUucGVuZGluZ0xhbmVzJn5sO2UucGVuZGluZ0xhbmVzPWwsZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLmV4cGlyZWRMYW5lcyY9bCxlLm11dGFibGVSZWFkTGFuZXMmPWwsZS5lbnRhbmdsZWRMYW5lcyY9bCxsPWUuZW50YW5nbGVtZW50cztmb3IodmFyIG89ZS5ldmVudFRpbWVzLHU9ZS5leHBpcmF0aW9uVGltZXM7MDxpOyl7dmFyIHM9MzEtSWUoaSksZD0xPDxzO2xbc109MCxvW3NdPS0xLHVbc109LTEsaSY9fmR9aWYoZ2UhPT1udWxsJiYociYyNCk9PT0wJiZnZS5oYXMoZSkmJmdlLmRlbGV0ZShlKSxlPT09WSYmKGo9WT1udWxsLFE9MCksMTx0LmZsYWdzP3QubGFzdEVmZmVjdCE9PW51bGw/KHQubGFzdEVmZmVjdC5uZXh0RWZmZWN0PXQscj10LmZpcnN0RWZmZWN0KTpyPXQ6cj10LmZpcnN0RWZmZWN0LHIhPT1udWxsKXtpZihsPXgseHw9MzIseGkuY3VycmVudD1udWxsLFdyPVZ0LG89cm8oKSxobChvKSl7aWYoXCJzZWxlY3Rpb25TdGFydFwiaW4gbyl1PXtzdGFydDpvLnNlbGVjdGlvblN0YXJ0LGVuZDpvLnNlbGVjdGlvbkVuZH07ZWxzZSBlOmlmKHU9KHU9by5vd25lckRvY3VtZW50KSYmdS5kZWZhdWx0Vmlld3x8d2luZG93LChkPXUuZ2V0U2VsZWN0aW9uJiZ1LmdldFNlbGVjdGlvbigpKSYmZC5yYW5nZUNvdW50IT09MCl7dT1kLmFuY2hvck5vZGUsaT1kLmFuY2hvck9mZnNldCxzPWQuZm9jdXNOb2RlLGQ9ZC5mb2N1c09mZnNldDt0cnl7dS5ub2RlVHlwZSxzLm5vZGVUeXBlfWNhdGNoe3U9bnVsbDticmVhayBlfXZhciB5PTAsQz0tMSxoPS0xLFM9MCxrPTAsRT1vLGM9bnVsbDtuOmZvcig7Oyl7Zm9yKHZhciBhO0UhPT11fHxpIT09MCYmRS5ub2RlVHlwZSE9PTN8fChDPXkraSksRSE9PXN8fGQhPT0wJiZFLm5vZGVUeXBlIT09M3x8KGg9eStkKSxFLm5vZGVUeXBlPT09MyYmKHkrPUUubm9kZVZhbHVlLmxlbmd0aCksKGE9RS5maXJzdENoaWxkKSE9PW51bGw7KWM9RSxFPWE7Zm9yKDs7KXtpZihFPT09bylicmVhayBuO2lmKGM9PT11JiYrK1M9PT1pJiYoQz15KSxjPT09cyYmKytrPT09ZCYmKGg9eSksKGE9RS5uZXh0U2libGluZykhPT1udWxsKWJyZWFrO0U9YyxjPUUucGFyZW50Tm9kZX1FPWF9dT1DPT09LTF8fGg9PT0tMT9udWxsOntzdGFydDpDLGVuZDpofX1lbHNlIHU9bnVsbDt1PXV8fHtzdGFydDowLGVuZDowfX1lbHNlIHU9bnVsbDtBcj17Zm9jdXNlZEVsZW06byxzZWxlY3Rpb25SYW5nZTp1fSxWdD0hMSxpdD1udWxsLFl0PSExLGc9cjtkbyB0cnl7aGYoKX1jYXRjaChQKXtpZihnPT09bnVsbCl0aHJvdyBFcnJvcih2KDMzMCkpO1JlKGcsUCksZz1nLm5leHRFZmZlY3R9d2hpbGUoZyE9PW51bGwpO2l0PW51bGwsZz1yO2RvIHRyeXtmb3Iobz1lO2chPT1udWxsOyl7dmFyIGY9Zy5mbGFncztpZihmJjE2JiZ1dChnLnN0YXRlTm9kZSxcIlwiKSxmJjEyOCl7dmFyIHA9Zy5hbHRlcm5hdGU7aWYocCE9PW51bGwpe3ZhciBtPXAucmVmO20hPT1udWxsJiYodHlwZW9mIG09PVwiZnVuY3Rpb25cIj9tKG51bGwpOm0uY3VycmVudD1udWxsKX19c3dpdGNoKGYmMTAzOCl7Y2FzZSAyOldvKGcpLGcuZmxhZ3MmPS0zO2JyZWFrO2Nhc2UgNjpXbyhnKSxnLmZsYWdzJj0tMyxacihnLmFsdGVybmF0ZSxnKTticmVhaztjYXNlIDEwMjQ6Zy5mbGFncyY9LTEwMjU7YnJlYWs7Y2FzZSAxMDI4OmcuZmxhZ3MmPS0xMDI1LFpyKGcuYWx0ZXJuYXRlLGcpO2JyZWFrO2Nhc2UgNDpacihnLmFsdGVybmF0ZSxnKTticmVhaztjYXNlIDg6dT1nLHNzKG8sdSk7dmFyIF89dS5hbHRlcm5hdGU7Qm8odSksXyE9PW51bGwmJkJvKF8pfWc9Zy5uZXh0RWZmZWN0fX1jYXRjaChQKXtpZihnPT09bnVsbCl0aHJvdyBFcnJvcih2KDMzMCkpO1JlKGcsUCksZz1nLm5leHRFZmZlY3R9d2hpbGUoZyE9PW51bGwpO2lmKG09QXIscD1ybygpLGY9bS5mb2N1c2VkRWxlbSxvPW0uc2VsZWN0aW9uUmFuZ2UscCE9PWYmJmYmJmYub3duZXJEb2N1bWVudCYmTnUoZi5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxmKSl7Zm9yKG8hPT1udWxsJiZobChmKSYmKHA9by5zdGFydCxtPW8uZW5kLG09PT12b2lkIDAmJihtPXApLFwic2VsZWN0aW9uU3RhcnRcImluIGY/KGYuc2VsZWN0aW9uU3RhcnQ9cCxmLnNlbGVjdGlvbkVuZD1NYXRoLm1pbihtLGYudmFsdWUubGVuZ3RoKSk6KG09KHA9Zi5vd25lckRvY3VtZW50fHxkb2N1bWVudCkmJnAuZGVmYXVsdFZpZXd8fHdpbmRvdyxtLmdldFNlbGVjdGlvbiYmKG09bS5nZXRTZWxlY3Rpb24oKSx1PWYudGV4dENvbnRlbnQubGVuZ3RoLF89TWF0aC5taW4oby5zdGFydCx1KSxvPW8uZW5kPT09dm9pZCAwP186TWF0aC5taW4oby5lbmQsdSksIW0uZXh0ZW5kJiZfPm8mJih1PW8sbz1fLF89dSksdT10byhmLF8pLGk9dG8oZixvKSx1JiZpJiYobS5yYW5nZUNvdW50IT09MXx8bS5hbmNob3JOb2RlIT09dS5ub2RlfHxtLmFuY2hvck9mZnNldCE9PXUub2Zmc2V0fHxtLmZvY3VzTm9kZSE9PWkubm9kZXx8bS5mb2N1c09mZnNldCE9PWkub2Zmc2V0KSYmKHA9cC5jcmVhdGVSYW5nZSgpLHAuc2V0U3RhcnQodS5ub2RlLHUub2Zmc2V0KSxtLnJlbW92ZUFsbFJhbmdlcygpLF8+bz8obS5hZGRSYW5nZShwKSxtLmV4dGVuZChpLm5vZGUsaS5vZmZzZXQpKToocC5zZXRFbmQoaS5ub2RlLGkub2Zmc2V0KSxtLmFkZFJhbmdlKHApKSkpKSkscD1bXSxtPWY7bT1tLnBhcmVudE5vZGU7KW0ubm9kZVR5cGU9PT0xJiZwLnB1c2goe2VsZW1lbnQ6bSxsZWZ0Om0uc2Nyb2xsTGVmdCx0b3A6bS5zY3JvbGxUb3B9KTtmb3IodHlwZW9mIGYuZm9jdXM9PVwiZnVuY3Rpb25cIiYmZi5mb2N1cygpLGY9MDtmPHAubGVuZ3RoO2YrKyltPXBbZl0sbS5lbGVtZW50LnNjcm9sbExlZnQ9bS5sZWZ0LG0uZWxlbWVudC5zY3JvbGxUb3A9bS50b3B9VnQ9ISFXcixBcj1Xcj1udWxsLGUuY3VycmVudD10LGc9cjtkbyB0cnl7Zm9yKGY9ZTtnIT09bnVsbDspe3ZhciB3PWcuZmxhZ3M7aWYodyYzNiYmc2YoZixnLmFsdGVybmF0ZSxnKSx3JjEyOCl7cD12b2lkIDA7dmFyIE49Zy5yZWY7aWYoTiE9PW51bGwpe3ZhciBUPWcuc3RhdGVOb2RlO3N3aXRjaChnLnRhZyl7Y2FzZSA1OnA9VDticmVhaztkZWZhdWx0OnA9VH10eXBlb2YgTj09XCJmdW5jdGlvblwiP04ocCk6Ti5jdXJyZW50PXB9fWc9Zy5uZXh0RWZmZWN0fX1jYXRjaChQKXtpZihnPT09bnVsbCl0aHJvdyBFcnJvcih2KDMzMCkpO1JlKGcsUCksZz1nLm5leHRFZmZlY3R9d2hpbGUoZyE9PW51bGwpO2c9bnVsbCxHYSgpLHg9bH1lbHNlIGUuY3VycmVudD10O2lmKGplKWplPSExLHJ0PWUsWW49bjtlbHNlIGZvcihnPXI7ZyE9PW51bGw7KW49Zy5uZXh0RWZmZWN0LGcubmV4dEVmZmVjdD1udWxsLGcuZmxhZ3MmOCYmKHc9Zyx3LnNpYmxpbmc9bnVsbCx3LnN0YXRlTm9kZT1udWxsKSxnPW47aWYocj1lLnBlbmRpbmdMYW5lcyxyPT09MCYmKGZlPW51bGwpLHI9PT0xP2U9PT1VbD9sdCsrOihsdD0wLFVsPWUpOmx0PTAsdD10LnN0YXRlTm9kZSxYZSYmdHlwZW9mIFhlLm9uQ29tbWl0RmliZXJSb290PT1cImZ1bmN0aW9uXCIpdHJ5e1hlLm9uQ29tbWl0RmliZXJSb290KGZpLHQsdm9pZCAwLCh0LmN1cnJlbnQuZmxhZ3MmNjQpPT09NjQpfWNhdGNoe31pZihsZShlLEEoKSksaHIpdGhyb3cgaHI9ITEsZT1JbCxJbD1udWxsLGU7cmV0dXJuKHgmOCkhPT0wfHxwZSgpLG51bGx9ZnVuY3Rpb24gaGYoKXtmb3IoO2chPT1udWxsOyl7dmFyIGU9Zy5hbHRlcm5hdGU7WXR8fGl0PT09bnVsbHx8KChnLmZsYWdzJjgpIT09MD9BaShnLGl0KSYmKFl0PSEwKTpnLnRhZz09PTEzJiZhZihlLGcpJiZBaShnLGl0KSYmKFl0PSEwKSk7dmFyIG49Zy5mbGFnczsobiYyNTYpIT09MCYmdWYoZSxnKSwobiY1MTIpPT09MHx8amV8fChqZT0hMCxodCg5NyxmdW5jdGlvbigpe3JldHVybiBCZSgpLG51bGx9KSksZz1nLm5leHRFZmZlY3R9fWZ1bmN0aW9uIEJlKCl7aWYoWW4hPT05MCl7dmFyIGU9OTc8WW4/OTc6WW47cmV0dXJuIFluPTkwLEdlKGUseWYpfXJldHVybiExfWZ1bmN0aW9uIHZmKGUsbil7RmwucHVzaChuLGUpLGplfHwoamU9ITAsaHQoOTcsZnVuY3Rpb24oKXtyZXR1cm4gQmUoKSxudWxsfSkpfWZ1bmN0aW9uIHZzKGUsbil7amwucHVzaChuLGUpLGplfHwoamU9ITAsaHQoOTcsZnVuY3Rpb24oKXtyZXR1cm4gQmUoKSxudWxsfSkpfWZ1bmN0aW9uIHlmKCl7aWYocnQ9PT1udWxsKXJldHVybiExO3ZhciBlPXJ0O2lmKHJ0PW51bGwsKHgmNDgpIT09MCl0aHJvdyBFcnJvcih2KDMzMSkpO3ZhciBuPXg7eHw9MzI7dmFyIHQ9amw7amw9W107Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKz0yKXt2YXIgbD10W3JdLGk9dFtyKzFdLG89bC5kZXN0cm95O2lmKGwuZGVzdHJveT12b2lkIDAsdHlwZW9mIG89PVwiZnVuY3Rpb25cIil0cnl7bygpfWNhdGNoKHMpe2lmKGk9PT1udWxsKXRocm93IEVycm9yKHYoMzMwKSk7UmUoaSxzKX19Zm9yKHQ9RmwsRmw9W10scj0wO3I8dC5sZW5ndGg7cis9Mil7bD10W3JdLGk9dFtyKzFdO3RyeXt2YXIgdT1sLmNyZWF0ZTtsLmRlc3Ryb3k9dSgpfWNhdGNoKHMpe2lmKGk9PT1udWxsKXRocm93IEVycm9yKHYoMzMwKSk7UmUoaSxzKX19Zm9yKHU9ZS5jdXJyZW50LmZpcnN0RWZmZWN0O3UhPT1udWxsOyllPXUubmV4dEVmZmVjdCx1Lm5leHRFZmZlY3Q9bnVsbCx1LmZsYWdzJjgmJih1LnNpYmxpbmc9bnVsbCx1LnN0YXRlTm9kZT1udWxsKSx1PWU7cmV0dXJuIHg9bixwZSgpLCEwfWZ1bmN0aW9uIFFvKGUsbix0KXtuPWtpKHQsbiksbj1vcyhlLG4sMSksemUoZSxuKSxuPXEoKSxlPUxyKGUsMSksZSE9PW51bGwmJihFcihlLDEsbiksbGUoZSxuKSl9ZnVuY3Rpb24gUmUoZSxuKXtpZihlLnRhZz09PTMpUW8oZSxlLG4pO2Vsc2UgZm9yKHZhciB0PWUucmV0dXJuO3QhPT1udWxsOyl7aWYodC50YWc9PT0zKXtRbyh0LGUsbik7YnJlYWt9ZWxzZSBpZih0LnRhZz09PTEpe3ZhciByPXQuc3RhdGVOb2RlO2lmKHR5cGVvZiB0LnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPT1cImZ1bmN0aW9uXCJ8fHR5cGVvZiByLmNvbXBvbmVudERpZENhdGNoPT1cImZ1bmN0aW9uXCImJihmZT09PW51bGx8fCFmZS5oYXMocikpKXtlPWtpKG4sZSk7dmFyIGw9dXModCxlLDEpO2lmKHplKHQsbCksbD1xKCksdD1Mcih0LDEpLHQhPT1udWxsKUVyKHQsMSxsKSxsZSh0LGwpO2Vsc2UgaWYodHlwZW9mIHIuY29tcG9uZW50RGlkQ2F0Y2g9PVwiZnVuY3Rpb25cIiYmKGZlPT09bnVsbHx8IWZlLmhhcyhyKSkpdHJ5e3IuY29tcG9uZW50RGlkQ2F0Y2gobixlKX1jYXRjaHt9YnJlYWt9fXQ9dC5yZXR1cm59fWZ1bmN0aW9uIGdmKGUsbix0KXt2YXIgcj1lLnBpbmdDYWNoZTtyIT09bnVsbCYmci5kZWxldGUobiksbj1xKCksZS5waW5nZWRMYW5lc3w9ZS5zdXNwZW5kZWRMYW5lcyZ0LFk9PT1lJiYoUSZ0KT09PXQmJihCPT09NHx8Qj09PTMmJihRJjYyOTE0NTYwKT09PVEmJjUwMD5BKCktX2k/U24oZSwwKTpDaXw9dCksbGUoZSxuKX1mdW5jdGlvbiB3ZihlLG4pe3ZhciB0PWUuc3RhdGVOb2RlO3QhPT1udWxsJiZ0LmRlbGV0ZShuKSxuPTAsbj09PTAmJihuPWUubW9kZSwobiYyKT09PTA/bj0xOihuJjQpPT09MD9uPUNuKCk9PT05OT8xOjI6KGhlPT09MCYmKGhlPVRuKSxuPWxuKDYyOTE0NTYwJn5oZSksbj09PTAmJihuPTQxOTQzMDQpKSksdD1xKCksZT1McihlLG4pLGUhPT1udWxsJiYoRXIoZSxuLHQpLGxlKGUsdCkpfXZhciB5czt5cz1mdW5jdGlvbihlLG4sdCl7dmFyIHI9bi5sYW5lcztpZihlIT09bnVsbClpZihlLm1lbW9pemVkUHJvcHMhPT1uLnBlbmRpbmdQcm9wc3x8Wi5jdXJyZW50KXVlPSEwO2Vsc2UgaWYoKHQmcikhPT0wKXVlPShlLmZsYWdzJjE2Mzg0KSE9PTA7ZWxzZXtzd2l0Y2godWU9ITEsbi50YWcpe2Nhc2UgMzp6byhuKSxYcigpO2JyZWFrO2Nhc2UgNTpFbyhuKTticmVhaztjYXNlIDE6SihuLnR5cGUpJiZXdChuKTticmVhaztjYXNlIDQ6eGwobixuLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOnI9bi5tZW1vaXplZFByb3BzLnZhbHVlO3ZhciBsPW4udHlwZS5fY29udGV4dDtEKHJyLGwuX2N1cnJlbnRWYWx1ZSksbC5fY3VycmVudFZhbHVlPXI7YnJlYWs7Y2FzZSAxMzppZihuLm1lbW9pemVkU3RhdGUhPT1udWxsKXJldHVybih0Jm4uY2hpbGQuY2hpbGRMYW5lcykhPT0wP09vKGUsbix0KTooRChSLFIuY3VycmVudCYxKSxuPXllKGUsbix0KSxuIT09bnVsbD9uLnNpYmxpbmc6bnVsbCk7RChSLFIuY3VycmVudCYxKTticmVhaztjYXNlIDE5OmlmKHI9KHQmbi5jaGlsZExhbmVzKSE9PTAsKGUuZmxhZ3MmNjQpIT09MCl7aWYocilyZXR1cm4gRm8oZSxuLHQpO24uZmxhZ3N8PTY0fWlmKGw9bi5tZW1vaXplZFN0YXRlLGwhPT1udWxsJiYobC5yZW5kZXJpbmc9bnVsbCxsLnRhaWw9bnVsbCxsLmxhc3RFZmZlY3Q9bnVsbCksRChSLFIuY3VycmVudCkscilicmVhaztyZXR1cm4gbnVsbDtjYXNlIDIzOmNhc2UgMjQ6cmV0dXJuIG4ubGFuZXM9MCxLcihlLG4sdCl9cmV0dXJuIHllKGUsbix0KX1lbHNlIHVlPSExO3N3aXRjaChuLmxhbmVzPTAsbi50YWcpe2Nhc2UgMjppZihyPW4udHlwZSxlIT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwsbi5hbHRlcm5hdGU9bnVsbCxuLmZsYWdzfD0yKSxlPW4ucGVuZGluZ1Byb3BzLGw9eG4obiwkLmN1cnJlbnQpLHluKG4sdCksbD1naShudWxsLG4scixlLGwsdCksbi5mbGFnc3w9MSx0eXBlb2YgbD09XCJvYmplY3RcIiYmbCE9PW51bGwmJnR5cGVvZiBsLnJlbmRlcj09XCJmdW5jdGlvblwiJiZsLiQkdHlwZW9mPT09dm9pZCAwKXtpZihuLnRhZz0xLG4ubWVtb2l6ZWRTdGF0ZT1udWxsLG4udXBkYXRlUXVldWU9bnVsbCxKKHIpKXt2YXIgaT0hMDtXdChuKX1lbHNlIGk9ITE7bi5tZW1vaXplZFN0YXRlPWwuc3RhdGUhPT1udWxsJiZsLnN0YXRlIT09dm9pZCAwP2wuc3RhdGU6bnVsbCxtaShuKTt2YXIgbz1yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczt0eXBlb2Ygbz09XCJmdW5jdGlvblwiJiZvcihuLHIsbyxlKSxsLnVwZGF0ZXI9UHIsbi5zdGF0ZU5vZGU9bCxsLl9yZWFjdEludGVybmFscz1uLGtsKG4scixlLHQpLG49UGwobnVsbCxuLHIsITAsaSx0KX1lbHNlIG4udGFnPTAsRyhudWxsLG4sbCx0KSxuPW4uY2hpbGQ7cmV0dXJuIG47Y2FzZSAxNjpsPW4uZWxlbWVudFR5cGU7ZTp7c3dpdGNoKGUhPT1udWxsJiYoZS5hbHRlcm5hdGU9bnVsbCxuLmFsdGVybmF0ZT1udWxsLG4uZmxhZ3N8PTIpLGU9bi5wZW5kaW5nUHJvcHMsaT1sLl9pbml0LGw9aShsLl9wYXlsb2FkKSxuLnR5cGU9bCxpPW4udGFnPUVmKGwpLGU9b2UobCxlKSxpKXtjYXNlIDA6bj1ObChudWxsLG4sbCxlLHQpO2JyZWFrIGU7Y2FzZSAxOm49TG8obnVsbCxuLGwsZSx0KTticmVhayBlO2Nhc2UgMTE6bj1QbyhudWxsLG4sbCxlLHQpO2JyZWFrIGU7Y2FzZSAxNDpuPVRvKG51bGwsbixsLG9lKGwudHlwZSxlKSxyLHQpO2JyZWFrIGV9dGhyb3cgRXJyb3IodigzMDYsbCxcIlwiKSl9cmV0dXJuIG47Y2FzZSAwOnJldHVybiByPW4udHlwZSxsPW4ucGVuZGluZ1Byb3BzLGw9bi5lbGVtZW50VHlwZT09PXI/bDpvZShyLGwpLE5sKGUsbixyLGwsdCk7Y2FzZSAxOnJldHVybiByPW4udHlwZSxsPW4ucGVuZGluZ1Byb3BzLGw9bi5lbGVtZW50VHlwZT09PXI/bDpvZShyLGwpLExvKGUsbixyLGwsdCk7Y2FzZSAzOmlmKHpvKG4pLHI9bi51cGRhdGVRdWV1ZSxlPT09bnVsbHx8cj09PW51bGwpdGhyb3cgRXJyb3IodigyODIpKTtpZihyPW4ucGVuZGluZ1Byb3BzLGw9bi5tZW1vaXplZFN0YXRlLGw9bCE9PW51bGw/bC5lbGVtZW50Om51bGwsV3UoZSxuKSx2dChuLHIsbnVsbCx0KSxyPW4ubWVtb2l6ZWRTdGF0ZS5lbGVtZW50LHI9PT1sKVhyKCksbj15ZShlLG4sdCk7ZWxzZXtpZihsPW4uc3RhdGVOb2RlLChpPWwuaHlkcmF0ZSkmJihfZT12bihuLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLmZpcnN0Q2hpbGQpLHZlPW4saT1kZT0hMCksaSl7aWYoZT1sLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEsZSE9bnVsbClmb3IobD0wO2w8ZS5sZW5ndGg7bCs9MilpPWVbbF0saS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeT1lW2wrMV0sZ24ucHVzaChpKTtmb3IodD1ZdShuLG51bGwscix0KSxuLmNoaWxkPXQ7dDspdC5mbGFncz10LmZsYWdzJi0zfDEwMjQsdD10LnNpYmxpbmd9ZWxzZSBHKGUsbixyLHQpLFhyKCk7bj1uLmNoaWxkfXJldHVybiBuO2Nhc2UgNTpyZXR1cm4gRW8obiksZT09PW51bGwmJkNsKG4pLHI9bi50eXBlLGw9bi5wZW5kaW5nUHJvcHMsaT1lIT09bnVsbD9lLm1lbW9pemVkUHJvcHM6bnVsbCxvPWwuY2hpbGRyZW4sZ2wocixsKT9vPW51bGw6aSE9PW51bGwmJmdsKHIsaSkmJihuLmZsYWdzfD0xNiksdHMoZSxuKSxHKGUsbixvLHQpLG4uY2hpbGQ7Y2FzZSA2OnJldHVybiBlPT09bnVsbCYmQ2wobiksbnVsbDtjYXNlIDEzOnJldHVybiBPbyhlLG4sdCk7Y2FzZSA0OnJldHVybiB4bChuLG4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLHI9bi5wZW5kaW5nUHJvcHMsZT09PW51bGw/bi5jaGlsZD11cihuLG51bGwscix0KTpHKGUsbixyLHQpLG4uY2hpbGQ7Y2FzZSAxMTpyZXR1cm4gcj1uLnR5cGUsbD1uLnBlbmRpbmdQcm9wcyxsPW4uZWxlbWVudFR5cGU9PT1yP2w6b2UocixsKSxQbyhlLG4scixsLHQpO2Nhc2UgNzpyZXR1cm4gRyhlLG4sbi5wZW5kaW5nUHJvcHMsdCksbi5jaGlsZDtjYXNlIDg6cmV0dXJuIEcoZSxuLG4ucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHQpLG4uY2hpbGQ7Y2FzZSAxMjpyZXR1cm4gRyhlLG4sbi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sdCksbi5jaGlsZDtjYXNlIDEwOmU6e3I9bi50eXBlLl9jb250ZXh0LGw9bi5wZW5kaW5nUHJvcHMsbz1uLm1lbW9pemVkUHJvcHMsaT1sLnZhbHVlO3ZhciB1PW4udHlwZS5fY29udGV4dDtpZihEKHJyLHUuX2N1cnJlbnRWYWx1ZSksdS5fY3VycmVudFZhbHVlPWksbyE9PW51bGwpaWYodT1vLnZhbHVlLGk9ZWUodSxpKT8wOih0eXBlb2Ygci5fY2FsY3VsYXRlQ2hhbmdlZEJpdHM9PVwiZnVuY3Rpb25cIj9yLl9jYWxjdWxhdGVDaGFuZ2VkQml0cyh1LGkpOjEwNzM3NDE4MjMpfDAsaT09PTApe2lmKG8uY2hpbGRyZW49PT1sLmNoaWxkcmVuJiYhWi5jdXJyZW50KXtuPXllKGUsbix0KTticmVhayBlfX1lbHNlIGZvcih1PW4uY2hpbGQsdSE9PW51bGwmJih1LnJldHVybj1uKTt1IT09bnVsbDspe3ZhciBzPXUuZGVwZW5kZW5jaWVzO2lmKHMhPT1udWxsKXtvPXUuY2hpbGQ7Zm9yKHZhciBkPXMuZmlyc3RDb250ZXh0O2QhPT1udWxsOyl7aWYoZC5jb250ZXh0PT09ciYmKGQub2JzZXJ2ZWRCaXRzJmkpIT09MCl7dS50YWc9PT0xJiYoZD1MZSgtMSx0Ji10KSxkLnRhZz0yLHplKHUsZCkpLHUubGFuZXN8PXQsZD11LmFsdGVybmF0ZSxkIT09bnVsbCYmKGQubGFuZXN8PXQpLEh1KHUucmV0dXJuLHQpLHMubGFuZXN8PXQ7YnJlYWt9ZD1kLm5leHR9fWVsc2Ugbz11LnRhZz09PTEwJiZ1LnR5cGU9PT1uLnR5cGU/bnVsbDp1LmNoaWxkO2lmKG8hPT1udWxsKW8ucmV0dXJuPXU7ZWxzZSBmb3Iobz11O28hPT1udWxsOyl7aWYobz09PW4pe289bnVsbDticmVha31pZih1PW8uc2libGluZyx1IT09bnVsbCl7dS5yZXR1cm49by5yZXR1cm4sbz11O2JyZWFrfW89by5yZXR1cm59dT1vfUcoZSxuLGwuY2hpbGRyZW4sdCksbj1uLmNoaWxkfXJldHVybiBuO2Nhc2UgOTpyZXR1cm4gbD1uLnR5cGUsaT1uLnBlbmRpbmdQcm9wcyxyPWkuY2hpbGRyZW4seW4obix0KSxsPXJlKGwsaS51bnN0YWJsZV9vYnNlcnZlZEJpdHMpLHI9cihsKSxuLmZsYWdzfD0xLEcoZSxuLHIsdCksbi5jaGlsZDtjYXNlIDE0OnJldHVybiBsPW4udHlwZSxpPW9lKGwsbi5wZW5kaW5nUHJvcHMpLGk9b2UobC50eXBlLGkpLFRvKGUsbixsLGkscix0KTtjYXNlIDE1OnJldHVybiBucyhlLG4sbi50eXBlLG4ucGVuZGluZ1Byb3BzLHIsdCk7Y2FzZSAxNzpyZXR1cm4gcj1uLnR5cGUsbD1uLnBlbmRpbmdQcm9wcyxsPW4uZWxlbWVudFR5cGU9PT1yP2w6b2UocixsKSxlIT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwsbi5hbHRlcm5hdGU9bnVsbCxuLmZsYWdzfD0yKSxuLnRhZz0xLEoocik/KGU9ITAsV3QobikpOmU9ITEseW4obix0KSxRdShuLHIsbCksa2wobixyLGwsdCksUGwobnVsbCxuLHIsITAsZSx0KTtjYXNlIDE5OnJldHVybiBGbyhlLG4sdCk7Y2FzZSAyMzpyZXR1cm4gS3IoZSxuLHQpO2Nhc2UgMjQ6cmV0dXJuIEtyKGUsbix0KX10aHJvdyBFcnJvcih2KDE1NixuLnRhZykpfTtmdW5jdGlvbiBTZihlLG4sdCxyKXt0aGlzLnRhZz1lLHRoaXMua2V5PXQsdGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbCx0aGlzLmluZGV4PTAsdGhpcy5yZWY9bnVsbCx0aGlzLnBlbmRpbmdQcm9wcz1uLHRoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsLHRoaXMubW9kZT1yLHRoaXMuZmxhZ3M9MCx0aGlzLmxhc3RFZmZlY3Q9dGhpcy5maXJzdEVmZmVjdD10aGlzLm5leHRFZmZlY3Q9bnVsbCx0aGlzLmNoaWxkTGFuZXM9dGhpcy5sYW5lcz0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gbmUoZSxuLHQscil7cmV0dXJuIG5ldyBTZihlLG4sdCxyKX1mdW5jdGlvbiBQaShlKXtyZXR1cm4gZT1lLnByb3RvdHlwZSwhKCFlfHwhZS5pc1JlYWN0Q29tcG9uZW50KX1mdW5jdGlvbiBFZihlKXtpZih0eXBlb2YgZT09XCJmdW5jdGlvblwiKXJldHVybiBQaShlKT8xOjA7aWYoZSE9bnVsbCl7aWYoZT1lLiQkdHlwZW9mLGU9PT1ncilyZXR1cm4gMTE7aWYoZT09PXdyKXJldHVybiAxNH1yZXR1cm4gMn1mdW5jdGlvbiBVZShlLG4pe3ZhciB0PWUuYWx0ZXJuYXRlO3JldHVybiB0PT09bnVsbD8odD1uZShlLnRhZyxuLGUua2V5LGUubW9kZSksdC5lbGVtZW50VHlwZT1lLmVsZW1lbnRUeXBlLHQudHlwZT1lLnR5cGUsdC5zdGF0ZU5vZGU9ZS5zdGF0ZU5vZGUsdC5hbHRlcm5hdGU9ZSxlLmFsdGVybmF0ZT10KToodC5wZW5kaW5nUHJvcHM9bix0LnR5cGU9ZS50eXBlLHQuZmxhZ3M9MCx0Lm5leHRFZmZlY3Q9bnVsbCx0LmZpcnN0RWZmZWN0PW51bGwsdC5sYXN0RWZmZWN0PW51bGwpLHQuY2hpbGRMYW5lcz1lLmNoaWxkTGFuZXMsdC5sYW5lcz1lLmxhbmVzLHQuY2hpbGQ9ZS5jaGlsZCx0Lm1lbW9pemVkUHJvcHM9ZS5tZW1vaXplZFByb3BzLHQubWVtb2l6ZWRTdGF0ZT1lLm1lbW9pemVkU3RhdGUsdC51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLG49ZS5kZXBlbmRlbmNpZXMsdC5kZXBlbmRlbmNpZXM9bj09PW51bGw/bnVsbDp7bGFuZXM6bi5sYW5lcyxmaXJzdENvbnRleHQ6bi5maXJzdENvbnRleHR9LHQuc2libGluZz1lLnNpYmxpbmcsdC5pbmRleD1lLmluZGV4LHQucmVmPWUucmVmLHR9ZnVuY3Rpb24gWHQoZSxuLHQscixsLGkpe3ZhciBvPTI7aWYocj1lLHR5cGVvZiBlPT1cImZ1bmN0aW9uXCIpUGkoZSkmJihvPTEpO2Vsc2UgaWYodHlwZW9mIGU9PVwic3RyaW5nXCIpbz01O2Vsc2UgZTpzd2l0Y2goZSl7Y2FzZSBrZTpyZXR1cm4gRW4odC5jaGlsZHJlbixsLGksbik7Y2FzZSBYbzpvPTgsbHw9MTY7YnJlYWs7Y2FzZSBBbDpvPTgsbHw9MTticmVhaztjYXNlIEtuOnJldHVybiBlPW5lKDEyLHQsbixsfDgpLGUuZWxlbWVudFR5cGU9S24sZS50eXBlPUtuLGUubGFuZXM9aSxlO2Nhc2UgR246cmV0dXJuIGU9bmUoMTMsdCxuLGwpLGUudHlwZT1HbixlLmVsZW1lbnRUeXBlPUduLGUubGFuZXM9aSxlO2Nhc2UgS3Q6cmV0dXJuIGU9bmUoMTksdCxuLGwpLGUuZWxlbWVudFR5cGU9S3QsZS5sYW5lcz1pLGU7Y2FzZSBHbDpyZXR1cm4gVGkodCxsLGksbik7Y2FzZSBlbDpyZXR1cm4gZT1uZSgyNCx0LG4sbCksZS5lbGVtZW50VHlwZT1lbCxlLmxhbmVzPWksZTtkZWZhdWx0OmlmKHR5cGVvZiBlPT1cIm9iamVjdFwiJiZlIT09bnVsbClzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBRbDpvPTEwO2JyZWFrIGU7Y2FzZSAkbDpvPTk7YnJlYWsgZTtjYXNlIGdyOm89MTE7YnJlYWsgZTtjYXNlIHdyOm89MTQ7YnJlYWsgZTtjYXNlIFlsOm89MTYscj1udWxsO2JyZWFrIGU7Y2FzZSBYbDpvPTIyO2JyZWFrIGV9dGhyb3cgRXJyb3IodigxMzAsZT09bnVsbD9lOnR5cGVvZiBlLFwiXCIpKX1yZXR1cm4gbj1uZShvLHQsbixsKSxuLmVsZW1lbnRUeXBlPWUsbi50eXBlPXIsbi5sYW5lcz1pLG59ZnVuY3Rpb24gRW4oZSxuLHQscil7cmV0dXJuIGU9bmUoNyxlLHIsbiksZS5sYW5lcz10LGV9ZnVuY3Rpb24gVGkoZSxuLHQscil7cmV0dXJuIGU9bmUoMjMsZSxyLG4pLGUuZWxlbWVudFR5cGU9R2wsZS5sYW5lcz10LGV9ZnVuY3Rpb24gSnIoZSxuLHQpe3JldHVybiBlPW5lKDYsZSxudWxsLG4pLGUubGFuZXM9dCxlfWZ1bmN0aW9uIHFyKGUsbix0KXtyZXR1cm4gbj1uZSg0LGUuY2hpbGRyZW4hPT1udWxsP2UuY2hpbGRyZW46W10sZS5rZXksbiksbi5sYW5lcz10LG4uc3RhdGVOb2RlPXtjb250YWluZXJJbmZvOmUuY29udGFpbmVySW5mbyxwZW5kaW5nQ2hpbGRyZW46bnVsbCxpbXBsZW1lbnRhdGlvbjplLmltcGxlbWVudGF0aW9ufSxufWZ1bmN0aW9uIGtmKGUsbix0KXt0aGlzLnRhZz1uLHRoaXMuY29udGFpbmVySW5mbz1lLHRoaXMuZmluaXNoZWRXb3JrPXRoaXMucGluZ0NhY2hlPXRoaXMuY3VycmVudD10aGlzLnBlbmRpbmdDaGlsZHJlbj1udWxsLHRoaXMudGltZW91dEhhbmRsZT0tMSx0aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD1udWxsLHRoaXMuaHlkcmF0ZT10LHRoaXMuY2FsbGJhY2tOb2RlPW51bGwsdGhpcy5jYWxsYmFja1ByaW9yaXR5PTAsdGhpcy5ldmVudFRpbWVzPUZyKDApLHRoaXMuZXhwaXJhdGlvblRpbWVzPUZyKC0xKSx0aGlzLmVudGFuZ2xlZExhbmVzPXRoaXMuZmluaXNoZWRMYW5lcz10aGlzLm11dGFibGVSZWFkTGFuZXM9dGhpcy5leHBpcmVkTGFuZXM9dGhpcy5waW5nZWRMYW5lcz10aGlzLnN1c3BlbmRlZExhbmVzPXRoaXMucGVuZGluZ0xhbmVzPTAsdGhpcy5lbnRhbmdsZW1lbnRzPUZyKDApLHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT1udWxsfWZ1bmN0aW9uIHhmKGUsbix0KXt2YXIgcj0zPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6V2Usa2V5OnI9PW51bGw/bnVsbDpcIlwiK3IsY2hpbGRyZW46ZSxjb250YWluZXJJbmZvOm4saW1wbGVtZW50YXRpb246dH19ZnVuY3Rpb24gdnIoZSxuLHQscil7dmFyIGw9bi5jdXJyZW50LGk9cSgpLG89T2UobCk7ZTppZih0KXt0PXQuX3JlYWN0SW50ZXJuYWxzO246e2lmKGJlKHQpIT09dHx8dC50YWchPT0xKXRocm93IEVycm9yKHYoMTcwKSk7dmFyIHU9dDtkb3tzd2l0Y2godS50YWcpe2Nhc2UgMzp1PXUuc3RhdGVOb2RlLmNvbnRleHQ7YnJlYWsgbjtjYXNlIDE6aWYoSih1LnR5cGUpKXt1PXUuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O2JyZWFrIG59fXU9dS5yZXR1cm59d2hpbGUodSE9PW51bGwpO3Rocm93IEVycm9yKHYoMTcxKSl9aWYodC50YWc9PT0xKXt2YXIgcz10LnR5cGU7aWYoSihzKSl7dD1EdSh0LHMsdSk7YnJlYWsgZX19dD11fWVsc2UgdD1GZTtyZXR1cm4gbi5jb250ZXh0PT09bnVsbD9uLmNvbnRleHQ9dDpuLnBlbmRpbmdDb250ZXh0PXQsbj1MZShpLG8pLG4ucGF5bG9hZD17ZWxlbWVudDplfSxyPXI9PT12b2lkIDA/bnVsbDpyLHIhPT1udWxsJiYobi5jYWxsYmFjaz1yKSx6ZShsLG4pLE1lKGwsbyxpKSxvfWZ1bmN0aW9uIGJyKGUpe2lmKGU9ZS5jdXJyZW50LCFlLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChlLmNoaWxkLnRhZyl7Y2FzZSA1OnJldHVybiBlLmNoaWxkLnN0YXRlTm9kZTtkZWZhdWx0OnJldHVybiBlLmNoaWxkLnN0YXRlTm9kZX19ZnVuY3Rpb24gJG8oZSxuKXtpZihlPWUubWVtb2l6ZWRTdGF0ZSxlIT09bnVsbCYmZS5kZWh5ZHJhdGVkIT09bnVsbCl7dmFyIHQ9ZS5yZXRyeUxhbmU7ZS5yZXRyeUxhbmU9dCE9PTAmJnQ8bj90Om59fWZ1bmN0aW9uIExpKGUsbil7JG8oZSxuKSwoZT1lLmFsdGVybmF0ZSkmJiRvKGUsbil9ZnVuY3Rpb24gQ2YoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB6aShlLG4sdCl7dmFyIHI9dCE9bnVsbCYmdC5oeWRyYXRpb25PcHRpb25zIT1udWxsJiZ0Lmh5ZHJhdGlvbk9wdGlvbnMubXV0YWJsZVNvdXJjZXN8fG51bGw7aWYodD1uZXcga2YoZSxuLHQhPW51bGwmJnQuaHlkcmF0ZT09PSEwKSxuPW5lKDMsbnVsbCxudWxsLG49PT0yPzc6bj09PTE/MzowKSx0LmN1cnJlbnQ9bixuLnN0YXRlTm9kZT10LG1pKG4pLGVbUG5dPXQuY3VycmVudCxMdShlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGU6ZSkscilmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXtuPXJbZV07dmFyIGw9bi5fZ2V0VmVyc2lvbjtsPWwobi5fc291cmNlKSx0Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9PW51bGw/dC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPVtuLGxdOnQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG4sbCl9dGhpcy5faW50ZXJuYWxSb290PXR9emkucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt2cihlLHRoaXMuX2ludGVybmFsUm9vdCxudWxsLG51bGwpfTt6aS5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ludGVybmFsUm9vdCxuPWUuY29udGFpbmVySW5mbzt2cihudWxsLGUsbnVsbCxmdW5jdGlvbigpe25bUG5dPW51bGx9KX07ZnVuY3Rpb24gQ3QoZSl7cmV0dXJuISghZXx8ZS5ub2RlVHlwZSE9PTEmJmUubm9kZVR5cGUhPT05JiZlLm5vZGVUeXBlIT09MTEmJihlLm5vZGVUeXBlIT09OHx8ZS5ub2RlVmFsdWUhPT1cIiByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSBcIikpfWZ1bmN0aW9uIF9mKGUsbil7aWYobnx8KG49ZT9lLm5vZGVUeXBlPT09OT9lLmRvY3VtZW50RWxlbWVudDplLmZpcnN0Q2hpbGQ6bnVsbCxuPSEoIW58fG4ubm9kZVR5cGUhPT0xfHwhbi5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlYWN0cm9vdFwiKSkpLCFuKWZvcih2YXIgdDt0PWUubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKHQpO3JldHVybiBuZXcgemkoZSwwLG4/e2h5ZHJhdGU6ITB9OnZvaWQgMCl9ZnVuY3Rpb24genIoZSxuLHQscixsKXt2YXIgaT10Ll9yZWFjdFJvb3RDb250YWluZXI7aWYoaSl7dmFyIG89aS5faW50ZXJuYWxSb290O2lmKHR5cGVvZiBsPT1cImZ1bmN0aW9uXCIpe3ZhciB1PWw7bD1mdW5jdGlvbigpe3ZhciBkPWJyKG8pO3UuY2FsbChkKX19dnIobixvLGUsbCl9ZWxzZXtpZihpPXQuX3JlYWN0Um9vdENvbnRhaW5lcj1fZih0LHIpLG89aS5faW50ZXJuYWxSb290LHR5cGVvZiBsPT1cImZ1bmN0aW9uXCIpe3ZhciBzPWw7bD1mdW5jdGlvbigpe3ZhciBkPWJyKG8pO3MuY2FsbChkKX19Y3MoZnVuY3Rpb24oKXt2cihuLG8sZSxsKX0pfXJldHVybiBicihvKX1zdT1mdW5jdGlvbihlKXtpZihlLnRhZz09PTEzKXt2YXIgbj1xKCk7TWUoZSw0LG4pLExpKGUsNCl9fTtlaT1mdW5jdGlvbihlKXtpZihlLnRhZz09PTEzKXt2YXIgbj1xKCk7TWUoZSw2NzEwODg2NCxuKSxMaShlLDY3MTA4ODY0KX19O2F1PWZ1bmN0aW9uKGUpe2lmKGUudGFnPT09MTMpe3ZhciBuPXEoKSx0PU9lKGUpO01lKGUsdCxuKSxMaShlLHQpfX07ZnU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbigpfTtmbD1mdW5jdGlvbihlLG4sdCl7c3dpdGNoKG4pe2Nhc2VcImlucHV0XCI6aWYodGwoZSx0KSxuPXQubmFtZSx0LnR5cGU9PT1cInJhZGlvXCImJm4hPW51bGwpe2Zvcih0PWU7dC5wYXJlbnROb2RlOyl0PXQucGFyZW50Tm9kZTtmb3IodD10LnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbnB1dFtuYW1lPVwiK0pTT04uc3RyaW5naWZ5KFwiXCIrbikrJ11bdHlwZT1cInJhZGlvXCJdJyksbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2lmKHIhPT1lJiZyLmZvcm09PT1lLmZvcm0pe3ZhciBsPV9yKHIpO2lmKCFsKXRocm93IEVycm9yKHYoOTApKTtHbyhyKSx0bChyLGwpfX19YnJlYWs7Y2FzZVwidGV4dGFyZWFcIjpKbyhlLHQpO2JyZWFrO2Nhc2VcInNlbGVjdFwiOm49dC52YWx1ZSxuIT1udWxsJiZwbihlLCEhdC5tdWx0aXBsZSxuLCExKX19O0psPWZzO2x1PWZ1bmN0aW9uKGUsbix0LHIsbCl7dmFyIGk9eDt4fD00O3RyeXtyZXR1cm4gR2UoOTgsZS5iaW5kKG51bGwsbix0LHIsbCkpfWZpbmFsbHl7eD1pLHg9PT0wJiYoem4oKSxwZSgpKX19O3FsPWZ1bmN0aW9uKCl7KHgmNDkpPT09MCYmKGNmKCksQmUoKSl9O2l1PWZ1bmN0aW9uKGUsbil7dmFyIHQ9eDt4fD0yO3RyeXtyZXR1cm4gZShuKX1maW5hbGx5e3g9dCx4PT09MCYmKHpuKCkscGUoKSl9fTtmdW5jdGlvbiBncyhlLG4pe3ZhciB0PTI8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsO2lmKCFDdChuKSl0aHJvdyBFcnJvcih2KDIwMCkpO3JldHVybiB4ZihlLG4sbnVsbCx0KX12YXIgTmY9e0V2ZW50czpbRXQsYW4sX3IsdHUscnUsQmUse2N1cnJlbnQ6ITF9XX0sSG49e2ZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOlFlLGJ1bmRsZVR5cGU6MCx2ZXJzaW9uOlwiMTcuMC4yXCIscmVuZGVyZXJQYWNrYWdlTmFtZTpcInJlYWN0LWRvbVwifSxQZj17YnVuZGxlVHlwZTpIbi5idW5kbGVUeXBlLHZlcnNpb246SG4udmVyc2lvbixyZW5kZXJlclBhY2thZ2VOYW1lOkhuLnJlbmRlcmVyUGFja2FnZU5hbWUscmVuZGVyZXJDb25maWc6SG4ucmVuZGVyZXJDb25maWcsb3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6bnVsbCxvdmVycmlkZVByb3BzUmVuYW1lUGF0aDpudWxsLHNldFN1c3BlbnNlSGFuZGxlcjpudWxsLHNjaGVkdWxlVXBkYXRlOm51bGwsY3VycmVudERpc3BhdGNoZXJSZWY6cWUuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT11dShlKSxlPT09bnVsbD9udWxsOmUuc3RhdGVOb2RlfSxmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpIbi5maW5kRmliZXJCeUhvc3RJbnN0YW5jZXx8Q2YsZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOm51bGwsc2NoZWR1bGVSZWZyZXNoOm51bGwsc2NoZWR1bGVSb290Om51bGwsc2V0UmVmcmVzaEhhbmRsZXI6bnVsbCxnZXRDdXJyZW50RmliZXI6bnVsbH07aWYodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXzxcInVcIiYmKFduPV9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXywhV24uaXNEaXNhYmxlZCYmV24uc3VwcG9ydHNGaWJlcikpdHJ5e2ZpPVduLmluamVjdChQZiksWGU9V259Y2F0Y2h7fXZhciBXbjtpZS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1OZjtpZS5jcmVhdGVQb3J0YWw9Z3M7aWUuZmluZERPTU5vZGU9ZnVuY3Rpb24oZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihlLm5vZGVUeXBlPT09MSlyZXR1cm4gZTt2YXIgbj1lLl9yZWFjdEludGVybmFscztpZihuPT09dm9pZCAwKXRocm93IHR5cGVvZiBlLnJlbmRlcj09XCJmdW5jdGlvblwiP0Vycm9yKHYoMTg4KSk6RXJyb3IodigyNjgsT2JqZWN0LmtleXMoZSkpKTtyZXR1cm4gZT11dShuKSxlPWU9PT1udWxsP251bGw6ZS5zdGF0ZU5vZGUsZX07aWUuZmx1c2hTeW5jPWZ1bmN0aW9uKGUsbil7dmFyIHQ9eDtpZigodCY0OCkhPT0wKXJldHVybiBlKG4pO3h8PTE7dHJ5e2lmKGUpcmV0dXJuIEdlKDk5LGUuYmluZChudWxsLG4pKX1maW5hbGx5e3g9dCxwZSgpfX07aWUuaHlkcmF0ZT1mdW5jdGlvbihlLG4sdCl7aWYoIUN0KG4pKXRocm93IEVycm9yKHYoMjAwKSk7cmV0dXJuIHpyKG51bGwsZSxuLCEwLHQpfTtpZS5yZW5kZXI9ZnVuY3Rpb24oZSxuLHQpe2lmKCFDdChuKSl0aHJvdyBFcnJvcih2KDIwMCkpO3JldHVybiB6cihudWxsLGUsbiwhMSx0KX07aWUudW5tb3VudENvbXBvbmVudEF0Tm9kZT1mdW5jdGlvbihlKXtpZighQ3QoZSkpdGhyb3cgRXJyb3Iodig0MCkpO3JldHVybiBlLl9yZWFjdFJvb3RDb250YWluZXI/KGNzKGZ1bmN0aW9uKCl7enIobnVsbCxudWxsLGUsITEsZnVuY3Rpb24oKXtlLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbCxlW1BuXT1udWxsfSl9KSwhMCk6ITF9O2llLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPWZzO2llLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbD1mdW5jdGlvbihlLG4pe3JldHVybiBncyhlLG4sMjxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGwpfTtpZS51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbihlLG4sdCxyKXtpZighQ3QodCkpdGhyb3cgRXJyb3IodigyMDApKTtpZihlPT1udWxsfHxlLl9yZWFjdEludGVybmFscz09PXZvaWQgMCl0aHJvdyBFcnJvcih2KDM4KSk7cmV0dXJuIHpyKGUsbix0LCExLHIpfTtpZS52ZXJzaW9uPVwiMTcuMC4yXCJ9KTt2YXIga3M9TWkoKE9mLEVzKT0+e1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIFNzKCl7aWYoISh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fPlwidVwifHx0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFIT1cImZ1bmN0aW9uXCIpKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoU3MpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fVNzKCksRXMuZXhwb3J0cz13cygpfSk7dmFyIENzPU1zKGtzKCkpLHtfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDpNZixjcmVhdGVQb3J0YWw6UmYsZmluZERPTU5vZGU6RGYsZmx1c2hTeW5jOklmLGh5ZHJhdGU6RmYscmVuZGVyOmpmLHVubW91bnRDb21wb25lbnRBdE5vZGU6VWYsdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6VmYsdW5zdGFibGVfY3JlYXRlUG9ydGFsOkJmLHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOkhmLHZlcnNpb246V2Z9PUNzLHtkZWZhdWx0OnhzLC4uLlRmfT1DcyxBZj14cyE9PXZvaWQgMD94czpUZjtleHBvcnR7TWYgYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsUmYgYXMgY3JlYXRlUG9ydGFsLEFmIGFzIGRlZmF1bHQsRGYgYXMgZmluZERPTU5vZGUsSWYgYXMgZmx1c2hTeW5jLEZmIGFzIGh5ZHJhdGUsamYgYXMgcmVuZGVyLFVmIGFzIHVubW91bnRDb21wb25lbnRBdE5vZGUsVmYgYXMgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMsQmYgYXMgdW5zdGFibGVfY3JlYXRlUG9ydGFsLEhmIGFzIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyLFdmIGFzIHZlcnNpb259O1xuLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGNvZGVtaXJyb3Ivc3RhdGVANi4xLjIpIGRlbm8gcHJvZHVjdGlvbiAqL1xudmFyIHY9Y2xhc3N7Y29uc3RydWN0b3IoKXt9bGluZUF0KGUpe2lmKGU8MHx8ZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBwb3NpdGlvbiAke2V9IGluIGRvY3VtZW50IG9mIGxlbmd0aCAke3RoaXMubGVuZ3RofWApO3JldHVybiB0aGlzLmxpbmVJbm5lcihlLCExLDEsMCl9bGluZShlKXtpZihlPDF8fGU+dGhpcy5saW5lcyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBsaW5lIG51bWJlciAke2V9IGluICR7dGhpcy5saW5lc30tbGluZSBkb2N1bWVudGApO3JldHVybiB0aGlzLmxpbmVJbm5lcihlLCEwLDEsMCl9cmVwbGFjZShlLHQsbil7bGV0IGk9W107cmV0dXJuIHRoaXMuZGVjb21wb3NlKDAsZSxpLDIpLG4ubGVuZ3RoJiZuLmRlY29tcG9zZSgwLG4ubGVuZ3RoLGksMyksdGhpcy5kZWNvbXBvc2UodCx0aGlzLmxlbmd0aCxpLDEpLGIuZnJvbShpLHRoaXMubGVuZ3RoLSh0LWUpK24ubGVuZ3RoKX1hcHBlbmQoZSl7cmV0dXJuIHRoaXMucmVwbGFjZSh0aGlzLmxlbmd0aCx0aGlzLmxlbmd0aCxlKX1zbGljZShlLHQ9dGhpcy5sZW5ndGgpe2xldCBuPVtdO3JldHVybiB0aGlzLmRlY29tcG9zZShlLHQsbiwwKSxiLmZyb20obix0LWUpfWVxKGUpe2lmKGU9PXRoaXMpcmV0dXJuITA7aWYoZS5sZW5ndGghPXRoaXMubGVuZ3RofHxlLmxpbmVzIT10aGlzLmxpbmVzKXJldHVybiExO2xldCB0PXRoaXMuc2NhbklkZW50aWNhbChlLDEpLG49dGhpcy5sZW5ndGgtdGhpcy5zY2FuSWRlbnRpY2FsKGUsLTEpLGk9bmV3IFYodGhpcykscz1uZXcgVihlKTtmb3IobGV0IHI9dCxoPXQ7Oyl7aWYoaS5uZXh0KHIpLHMubmV4dChyKSxyPTAsaS5saW5lQnJlYWshPXMubGluZUJyZWFrfHxpLmRvbmUhPXMuZG9uZXx8aS52YWx1ZSE9cy52YWx1ZSlyZXR1cm4hMTtpZihoKz1pLnZhbHVlLmxlbmd0aCxpLmRvbmV8fGg+PW4pcmV0dXJuITB9fWl0ZXIoZT0xKXtyZXR1cm4gbmV3IFYodGhpcyxlKX1pdGVyUmFuZ2UoZSx0PXRoaXMubGVuZ3RoKXtyZXR1cm4gbmV3IHRlKHRoaXMsZSx0KX1pdGVyTGluZXMoZSx0KXtsZXQgbjtpZihlPT1udWxsKW49dGhpcy5pdGVyKCk7ZWxzZXt0PT1udWxsJiYodD10aGlzLmxpbmVzKzEpO2xldCBpPXRoaXMubGluZShlKS5mcm9tO249dGhpcy5pdGVyUmFuZ2UoaSxNYXRoLm1heChpLHQ9PXRoaXMubGluZXMrMT90aGlzLmxlbmd0aDp0PD0xPzA6dGhpcy5saW5lKHQtMSkudG8pKX1yZXR1cm4gbmV3IG5lKG4pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuc2xpY2VTdHJpbmcoMCl9dG9KU09OKCl7bGV0IGU9W107cmV0dXJuIHRoaXMuZmxhdHRlbihlKSxlfXN0YXRpYyBvZihlKXtpZihlLmxlbmd0aD09MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkEgZG9jdW1lbnQgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBsaW5lXCIpO3JldHVybiBlLmxlbmd0aD09MSYmIWVbMF0/di5lbXB0eTplLmxlbmd0aDw9MzI/bmV3IG0oZSk6Yi5mcm9tKG0uc3BsaXQoZSxbXSkpfX0sbT1jbGFzcyBleHRlbmRzIHZ7Y29uc3RydWN0b3IoZSx0PWplKGUpKXtzdXBlcigpLHRoaXMudGV4dD1lLHRoaXMubGVuZ3RoPXR9Z2V0IGxpbmVzKCl7cmV0dXJuIHRoaXMudGV4dC5sZW5ndGh9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIG51bGx9bGluZUlubmVyKGUsdCxuLGkpe2ZvcihsZXQgcz0wOztzKyspe2xldCByPXRoaXMudGV4dFtzXSxoPWkrci5sZW5ndGg7aWYoKHQ/bjpoKT49ZSlyZXR1cm4gbmV3IGZlKGksaCxuLHIpO2k9aCsxLG4rK319ZGVjb21wb3NlKGUsdCxuLGkpe2xldCBzPWU8PTAmJnQ+PXRoaXMubGVuZ3RoP3RoaXM6bmV3IG0oSWUodGhpcy50ZXh0LGUsdCksTWF0aC5taW4odCx0aGlzLmxlbmd0aCktTWF0aC5tYXgoMCxlKSk7aWYoaSYxKXtsZXQgcj1uLnBvcCgpLGg9ZWUocy50ZXh0LHIudGV4dC5zbGljZSgpLDAscy5sZW5ndGgpO2lmKGgubGVuZ3RoPD0zMiluLnB1c2gobmV3IG0oaCxyLmxlbmd0aCtzLmxlbmd0aCkpO2Vsc2V7bGV0IG89aC5sZW5ndGg+PjE7bi5wdXNoKG5ldyBtKGguc2xpY2UoMCxvKSksbmV3IG0oaC5zbGljZShvKSkpfX1lbHNlIG4ucHVzaChzKX1yZXBsYWNlKGUsdCxuKXtpZighKG4gaW5zdGFuY2VvZiBtKSlyZXR1cm4gc3VwZXIucmVwbGFjZShlLHQsbik7bGV0IGk9ZWUodGhpcy50ZXh0LGVlKG4udGV4dCxJZSh0aGlzLnRleHQsMCxlKSksdCkscz10aGlzLmxlbmd0aCtuLmxlbmd0aC0odC1lKTtyZXR1cm4gaS5sZW5ndGg8PTMyP25ldyBtKGkscyk6Yi5mcm9tKG0uc3BsaXQoaSxbXSkscyl9c2xpY2VTdHJpbmcoZSx0PXRoaXMubGVuZ3RoLG49YFxuYCl7bGV0IGk9XCJcIjtmb3IobGV0IHM9MCxyPTA7czw9dCYmcjx0aGlzLnRleHQubGVuZ3RoO3IrKyl7bGV0IGg9dGhpcy50ZXh0W3JdLG89cytoLmxlbmd0aDtzPmUmJnImJihpKz1uKSxlPG8mJnQ+cyYmKGkrPWguc2xpY2UoTWF0aC5tYXgoMCxlLXMpLHQtcykpLHM9bysxfXJldHVybiBpfWZsYXR0ZW4oZSl7Zm9yKGxldCB0IG9mIHRoaXMudGV4dCllLnB1c2godCl9c2NhbklkZW50aWNhbCgpe3JldHVybiAwfXN0YXRpYyBzcGxpdChlLHQpe2xldCBuPVtdLGk9LTE7Zm9yKGxldCBzIG9mIGUpbi5wdXNoKHMpLGkrPXMubGVuZ3RoKzEsbi5sZW5ndGg9PTMyJiYodC5wdXNoKG5ldyBtKG4saSkpLG49W10saT0tMSk7cmV0dXJuIGk+LTEmJnQucHVzaChuZXcgbShuLGkpKSx0fX0sYj1jbGFzcyBleHRlbmRzIHZ7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigpLHRoaXMuY2hpbGRyZW49ZSx0aGlzLmxlbmd0aD10LHRoaXMubGluZXM9MDtmb3IobGV0IG4gb2YgZSl0aGlzLmxpbmVzKz1uLmxpbmVzfWxpbmVJbm5lcihlLHQsbixpKXtmb3IobGV0IHM9MDs7cysrKXtsZXQgcj10aGlzLmNoaWxkcmVuW3NdLGg9aStyLmxlbmd0aCxvPW4rci5saW5lcy0xO2lmKCh0P286aCk+PWUpcmV0dXJuIHIubGluZUlubmVyKGUsdCxuLGkpO2k9aCsxLG49bysxfX1kZWNvbXBvc2UoZSx0LG4saSl7Zm9yKGxldCBzPTAscj0wO3I8PXQmJnM8dGhpcy5jaGlsZHJlbi5sZW5ndGg7cysrKXtsZXQgaD10aGlzLmNoaWxkcmVuW3NdLG89citoLmxlbmd0aDtpZihlPD1vJiZ0Pj1yKXtsZXQgYT1pJigocjw9ZT8xOjApfChvPj10PzI6MCkpO3I+PWUmJm88PXQmJiFhP24ucHVzaChoKTpoLmRlY29tcG9zZShlLXIsdC1yLG4sYSl9cj1vKzF9fXJlcGxhY2UoZSx0LG4pe2lmKG4ubGluZXM8dGhpcy5saW5lcylmb3IobGV0IGk9MCxzPTA7aTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCByPXRoaXMuY2hpbGRyZW5baV0saD1zK3IubGVuZ3RoO2lmKGU+PXMmJnQ8PWgpe2xldCBvPXIucmVwbGFjZShlLXMsdC1zLG4pLGE9dGhpcy5saW5lcy1yLmxpbmVzK28ubGluZXM7aWYoby5saW5lczxhPj41LTEmJm8ubGluZXM+YT4+NSsxKXtsZXQgZj10aGlzLmNoaWxkcmVuLnNsaWNlKCk7cmV0dXJuIGZbaV09byxuZXcgYihmLHRoaXMubGVuZ3RoLSh0LWUpK24ubGVuZ3RoKX1yZXR1cm4gc3VwZXIucmVwbGFjZShzLGgsbyl9cz1oKzF9cmV0dXJuIHN1cGVyLnJlcGxhY2UoZSx0LG4pfXNsaWNlU3RyaW5nKGUsdD10aGlzLmxlbmd0aCxuPWBcbmApe2xldCBpPVwiXCI7Zm9yKGxldCBzPTAscj0wO3M8dGhpcy5jaGlsZHJlbi5sZW5ndGgmJnI8PXQ7cysrKXtsZXQgaD10aGlzLmNoaWxkcmVuW3NdLG89citoLmxlbmd0aDtyPmUmJnMmJihpKz1uKSxlPG8mJnQ+ciYmKGkrPWguc2xpY2VTdHJpbmcoZS1yLHQtcixuKSkscj1vKzF9cmV0dXJuIGl9ZmxhdHRlbihlKXtmb3IobGV0IHQgb2YgdGhpcy5jaGlsZHJlbil0LmZsYXR0ZW4oZSl9c2NhbklkZW50aWNhbChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIGIpKXJldHVybiAwO2xldCBuPTAsW2kscyxyLGhdPXQ+MD9bMCwwLHRoaXMuY2hpbGRyZW4ubGVuZ3RoLGUuY2hpbGRyZW4ubGVuZ3RoXTpbdGhpcy5jaGlsZHJlbi5sZW5ndGgtMSxlLmNoaWxkcmVuLmxlbmd0aC0xLC0xLC0xXTtmb3IoOztpKz10LHMrPXQpe2lmKGk9PXJ8fHM9PWgpcmV0dXJuIG47bGV0IG89dGhpcy5jaGlsZHJlbltpXSxhPWUuY2hpbGRyZW5bc107aWYobyE9YSlyZXR1cm4gbitvLnNjYW5JZGVudGljYWwoYSx0KTtuKz1vLmxlbmd0aCsxfX1zdGF0aWMgZnJvbShlLHQ9ZS5yZWR1Y2UoKG4saSk9Pm4raS5sZW5ndGgrMSwtMSkpe2xldCBuPTA7Zm9yKGxldCBjIG9mIGUpbis9Yy5saW5lcztpZihuPDMyKXtsZXQgYz1bXTtmb3IobGV0IHAgb2YgZSlwLmZsYXR0ZW4oYyk7cmV0dXJuIG5ldyBtKGMsdCl9bGV0IGk9TWF0aC5tYXgoMzIsbj4+NSkscz1pPDwxLHI9aT4+MSxoPVtdLG89MCxhPS0xLGY9W107ZnVuY3Rpb24gdShjKXtsZXQgcDtpZihjLmxpbmVzPnMmJmMgaW5zdGFuY2VvZiBiKWZvcihsZXQgRSBvZiBjLmNoaWxkcmVuKXUoRSk7ZWxzZSBjLmxpbmVzPnImJihvPnJ8fCFvKT8oZCgpLGgucHVzaChjKSk6YyBpbnN0YW5jZW9mIG0mJm8mJihwPWZbZi5sZW5ndGgtMV0paW5zdGFuY2VvZiBtJiZjLmxpbmVzK3AubGluZXM8PTMyPyhvKz1jLmxpbmVzLGErPWMubGVuZ3RoKzEsZltmLmxlbmd0aC0xXT1uZXcgbShwLnRleHQuY29uY2F0KGMudGV4dCkscC5sZW5ndGgrMStjLmxlbmd0aCkpOihvK2MubGluZXM+aSYmZCgpLG8rPWMubGluZXMsYSs9Yy5sZW5ndGgrMSxmLnB1c2goYykpfWZ1bmN0aW9uIGQoKXtvIT0wJiYoaC5wdXNoKGYubGVuZ3RoPT0xP2ZbMF06Yi5mcm9tKGYsYSkpLGE9LTEsbz1mLmxlbmd0aD0wKX1mb3IobGV0IGMgb2YgZSl1KGMpO3JldHVybiBkKCksaC5sZW5ndGg9PTE/aFswXTpuZXcgYihoLHQpfX07di5lbXB0eT1uZXcgbShbXCJcIl0sMCk7ZnVuY3Rpb24gamUobCl7bGV0IGU9LTE7Zm9yKGxldCB0IG9mIGwpZSs9dC5sZW5ndGgrMTtyZXR1cm4gZX1mdW5jdGlvbiBlZShsLGUsdD0wLG49MWU5KXtmb3IobGV0IGk9MCxzPTAscj0hMDtzPGwubGVuZ3RoJiZpPD1uO3MrKyl7bGV0IGg9bFtzXSxvPWkraC5sZW5ndGg7bz49dCYmKG8+biYmKGg9aC5zbGljZSgwLG4taSkpLGk8dCYmKGg9aC5zbGljZSh0LWkpKSxyPyhlW2UubGVuZ3RoLTFdKz1oLHI9ITEpOmUucHVzaChoKSksaT1vKzF9cmV0dXJuIGV9ZnVuY3Rpb24gSWUobCxlLHQpe3JldHVybiBlZShsLFtcIlwiXSxlLHQpfXZhciBWPWNsYXNze2NvbnN0cnVjdG9yKGUsdD0xKXt0aGlzLmRpcj10LHRoaXMuZG9uZT0hMSx0aGlzLmxpbmVCcmVhaz0hMSx0aGlzLnZhbHVlPVwiXCIsdGhpcy5ub2Rlcz1bZV0sdGhpcy5vZmZzZXRzPVt0PjA/MTooZSBpbnN0YW5jZW9mIG0/ZS50ZXh0Lmxlbmd0aDplLmNoaWxkcmVuLmxlbmd0aCk8PDFdfW5leHRJbm5lcihlLHQpe2Zvcih0aGlzLmRvbmU9dGhpcy5saW5lQnJlYWs9ITE7Oyl7bGV0IG49dGhpcy5ub2Rlcy5sZW5ndGgtMSxpPXRoaXMubm9kZXNbbl0scz10aGlzLm9mZnNldHNbbl0scj1zPj4xLGg9aSBpbnN0YW5jZW9mIG0/aS50ZXh0Lmxlbmd0aDppLmNoaWxkcmVuLmxlbmd0aDtpZihyPT0odD4wP2g6MCkpe2lmKG49PTApcmV0dXJuIHRoaXMuZG9uZT0hMCx0aGlzLnZhbHVlPVwiXCIsdGhpczt0PjAmJnRoaXMub2Zmc2V0c1tuLTFdKyssdGhpcy5ub2Rlcy5wb3AoKSx0aGlzLm9mZnNldHMucG9wKCl9ZWxzZSBpZigocyYxKT09KHQ+MD8wOjEpKXtpZih0aGlzLm9mZnNldHNbbl0rPXQsZT09MClyZXR1cm4gdGhpcy5saW5lQnJlYWs9ITAsdGhpcy52YWx1ZT1gXG5gLHRoaXM7ZS0tfWVsc2UgaWYoaSBpbnN0YW5jZW9mIG0pe2xldCBvPWkudGV4dFtyKyh0PDA/LTE6MCldO2lmKHRoaXMub2Zmc2V0c1tuXSs9dCxvLmxlbmd0aD5NYXRoLm1heCgwLGUpKXJldHVybiB0aGlzLnZhbHVlPWU9PTA/bzp0PjA/by5zbGljZShlKTpvLnNsaWNlKDAsby5sZW5ndGgtZSksdGhpcztlLT1vLmxlbmd0aH1lbHNle2xldCBvPWkuY2hpbGRyZW5bcisodDwwPy0xOjApXTtlPm8ubGVuZ3RoPyhlLT1vLmxlbmd0aCx0aGlzLm9mZnNldHNbbl0rPXQpOih0PDAmJnRoaXMub2Zmc2V0c1tuXS0tLHRoaXMubm9kZXMucHVzaChvKSx0aGlzLm9mZnNldHMucHVzaCh0PjA/MToobyBpbnN0YW5jZW9mIG0/by50ZXh0Lmxlbmd0aDpvLmNoaWxkcmVuLmxlbmd0aCk8PDEpKX19fW5leHQoZT0wKXtyZXR1cm4gZTwwJiYodGhpcy5uZXh0SW5uZXIoLWUsLXRoaXMuZGlyKSxlPXRoaXMudmFsdWUubGVuZ3RoKSx0aGlzLm5leHRJbm5lcihlLHRoaXMuZGlyKX19LHRlPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnZhbHVlPVwiXCIsdGhpcy5kb25lPSExLHRoaXMuY3Vyc29yPW5ldyBWKGUsdD5uPy0xOjEpLHRoaXMucG9zPXQ+bj9lLmxlbmd0aDowLHRoaXMuZnJvbT1NYXRoLm1pbih0LG4pLHRoaXMudG89TWF0aC5tYXgodCxuKX1uZXh0SW5uZXIoZSx0KXtpZih0PDA/dGhpcy5wb3M8PXRoaXMuZnJvbTp0aGlzLnBvcz49dGhpcy50bylyZXR1cm4gdGhpcy52YWx1ZT1cIlwiLHRoaXMuZG9uZT0hMCx0aGlzO2UrPU1hdGgubWF4KDAsdDwwP3RoaXMucG9zLXRoaXMudG86dGhpcy5mcm9tLXRoaXMucG9zKTtsZXQgbj10PDA/dGhpcy5wb3MtdGhpcy5mcm9tOnRoaXMudG8tdGhpcy5wb3M7ZT5uJiYoZT1uKSxuLT1lO2xldHt2YWx1ZTppfT10aGlzLmN1cnNvci5uZXh0KGUpO3JldHVybiB0aGlzLnBvcys9KGkubGVuZ3RoK2UpKnQsdGhpcy52YWx1ZT1pLmxlbmd0aDw9bj9pOnQ8MD9pLnNsaWNlKGkubGVuZ3RoLW4pOmkuc2xpY2UoMCxuKSx0aGlzLmRvbmU9IXRoaXMudmFsdWUsdGhpc31uZXh0KGU9MCl7cmV0dXJuIGU8MD9lPU1hdGgubWF4KGUsdGhpcy5mcm9tLXRoaXMucG9zKTplPjAmJihlPU1hdGgubWluKGUsdGhpcy50by10aGlzLnBvcykpLHRoaXMubmV4dElubmVyKGUsdGhpcy5jdXJzb3IuZGlyKX1nZXQgbGluZUJyZWFrKCl7cmV0dXJuIHRoaXMuY3Vyc29yLmxpbmVCcmVhayYmdGhpcy52YWx1ZSE9XCJcIn19LG5lPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuaW5uZXI9ZSx0aGlzLmFmdGVyQnJlYWs9ITAsdGhpcy52YWx1ZT1cIlwiLHRoaXMuZG9uZT0hMX1uZXh0KGU9MCl7bGV0e2RvbmU6dCxsaW5lQnJlYWs6bix2YWx1ZTppfT10aGlzLmlubmVyLm5leHQoZSk7cmV0dXJuIHQ/KHRoaXMuZG9uZT0hMCx0aGlzLnZhbHVlPVwiXCIpOm4/dGhpcy5hZnRlckJyZWFrP3RoaXMudmFsdWU9XCJcIjoodGhpcy5hZnRlckJyZWFrPSEwLHRoaXMubmV4dCgpKToodGhpcy52YWx1ZT1pLHRoaXMuYWZ0ZXJCcmVhaz0hMSksdGhpc31nZXQgbGluZUJyZWFrKCl7cmV0dXJuITF9fTt0eXBlb2YgU3ltYm9sPFwidVwiJiYodi5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXIoKX0sVi5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT10ZS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1uZS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSk7dmFyIGZlPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLGkpe3RoaXMuZnJvbT1lLHRoaXMudG89dCx0aGlzLm51bWJlcj1uLHRoaXMudGV4dD1pfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy50by10aGlzLmZyb219fSwkPVwibGMsMzQsN24sNyw3YiwxOSwsLCwyLCwyLCwsMjAsYiwxYyxsLGcsLDJ0LDcsMiw2LDIsMiwsNCx6LCx1LHIsMmosYiwxbSw5LDksLG8sNCwsOSwsMywsNSwxNywzLDNiLGYsLHcsMWosLCwsNCw4LDQsLDMsNyxhLDIsdCwsMW0sLCwsMiw0LDgsLDksLGEsMixxLCwyLDIsMWwsLDQsMiw0LDIsMiwzLDMsLHUsMiwzLCxiLDIsMWwsLDQsNSwsMiw0LCxrLDIsbSw2LCwsMW0sLCwyLCw0LDgsLDcsMyxhLDIsdSwsMW4sLCwsYywsOSwsMTQsLDMsLDFsLDMsNSwzLCw0LDcsMixiLDIsdCwsMW0sLDIsLDIsLDMsLDUsMiw3LDIsYiwyLHMsMiwxbCwyLCwsMiw0LDgsLDksLGEsMix0LCwyMCwsNCwsMiwzLCwsOCwsMjksLDIsNyxjLDgsMnEsLDIsOSxiLDYsMjIsMixyLCwsLCwsMWosZSwsNSwsMiw1LGIsLDEwLDksLDJ1LDQsLDYsLDIsMiwyLHAsMiw0LDMsZyw0LGQsLDIsMiw2LCxmLCxqaiwzLHFhLDMsdCwzLHQsMix1LDIsMXMsMiwsNyw4LCwyLGIsOSwsMTksMywzYiwyLHksLDNhLDMsNCwyLDksLDYsMyw2MywyLDIsLDFtLCwsNywsLCwsMiw4LDYsYSwyLCwxYyxoLDFyLDQsMWMsNywsLDUsLDE0LDksYywyLHcsNCwyLDIsLDMsMWssLCwyLDMsLCwzLDFtLDgsMiwyLDQ4LDMsLGQsLDcsNCwsNiwsMywyLDVpLDFtLCw1LGVrLCw1Zix4LDJkYSwzLDN4LCwybyx3LGZlLDYsMngsMixuOXcsNCwsYSx3LDIsMjgsMiw3aywsMywsNCwscCwyLDUsLDQ3LDIscSxpLGQsLDEyLDgscCxiLDFhLDMsMWMsLDIsNCwyLDIsMTMsLDF2LDYsMiwyLDIsMixjLCw4LCwxYiwsMWYsLCwzLDIsMiw1LDIsLCwxNiwyLDgsLDZtLCwyLCw0LCxmbjQsLGtoLGcsZyxnLGE2LDIsZ3QsLDZhLCw0NSw1LDFhZSwzLCwyLDUsNCwxNCwzLDQsLDRsLDIsZngsNCxhciwyLDQ5LGIsNHcsLDFpLGYsMWssMywxZCw0LDIsMiwxeCwzLDEwLDUsLDgsMXEsLGMsMiwxZyw5LGEsNCwyLCwybiwzLDIsLCwyLDYsLDRnLCwzLDgsbCwyLDFsLDIsLCwsLG0sLGUsNywzLDUsNWYsOCwyLDMsLCxuLCwyOSwsMiw2LCwsMiwsLDIsLDIsNmosLDIsNCw2LDIsLDIsciwyLDJkLDgsMiwsLDIsMnksLCwsMiw2LCwsMnQsMywyLDQsLDUsNzcsOSwsMiw2dCwsYSwyLCwsNCwsNDAsNCwyLDIsNCwsdyxhLDE0LDYsMiw0LDgsLDksNiwyLDMsMWEsZCwsMixiYSw3LCw2LCwsMmEsbSwyLDcsLDIsLDIsM2UsNiwzLCwsMiwsNywsLDIwLDIsMywsLCw5biwyLGYwYiw1LDFuLDcsdDQsLDFyLDQsMjksLGY1aywyLDQzcSwsLDMsNCw1LDgsOCwyLDcsdSw0LDQ0LDMsMWl6LDFqLDQsMWUsOCwsZSwsbSw1LCxmLDExcyw3LCxoLDIsNywsMiwsNSw3OSw3LGM1LDQsMTVzLDcsMzEsNywyNDAsNSxneDdrLDJvLDNrLDZvXCIuc3BsaXQoXCIsXCIpLm1hcChsPT5sP3BhcnNlSW50KGwsMzYpOjEpO2ZvcihsZXQgbD0xO2w8JC5sZW5ndGg7bCsrKSRbbF0rPSRbbC0xXTtmdW5jdGlvbiBaZShsKXtmb3IobGV0IGU9MTtlPCQubGVuZ3RoO2UrPTIpaWYoJFtlXT5sKXJldHVybiAkW2UtMV08PWw7cmV0dXJuITF9ZnVuY3Rpb24gQWUobCl7cmV0dXJuIGw+PTEyNzQ2MiYmbDw9MTI3NDg3fXZhciBQZT04MjA1O2Z1bmN0aW9uIGllKGwsZSx0PSEwLG49ITApe3JldHVybih0P0ZlOkhlKShsLGUsbil9ZnVuY3Rpb24gRmUobCxlLHQpe2lmKGU9PWwubGVuZ3RoKXJldHVybiBlO2UmJkplKGwuY2hhckNvZGVBdChlKSkmJlRlKGwuY2hhckNvZGVBdChlLTEpKSYmZS0tO2xldCBuPW9lKGwsZSk7Zm9yKGUrPWJlKG4pO2U8bC5sZW5ndGg7KXtsZXQgaT1vZShsLGUpO2lmKG49PVBlfHxpPT1QZXx8dCYmWmUoaSkpZSs9YmUoaSksbj1pO2Vsc2UgaWYoQWUoaSkpe2xldCBzPTAscj1lLTI7Zm9yKDtyPj0wJiZBZShvZShsLHIpKTspcysrLHItPTI7aWYocyUyPT0wKWJyZWFrO2UrPTJ9ZWxzZSBicmVha31yZXR1cm4gZX1mdW5jdGlvbiBIZShsLGUsdCl7Zm9yKDtlPjA7KXtsZXQgbj1GZShsLGUtMix0KTtpZihuPGUpcmV0dXJuIG47ZS0tfXJldHVybiAwfWZ1bmN0aW9uIEplKGwpe3JldHVybiBsPj01NjMyMCYmbDw1NzM0NH1mdW5jdGlvbiBUZShsKXtyZXR1cm4gbD49NTUyOTYmJmw8NTYzMjB9ZnVuY3Rpb24gb2UobCxlKXtsZXQgdD1sLmNoYXJDb2RlQXQoZSk7aWYoIVRlKHQpfHxlKzE9PWwubGVuZ3RoKXJldHVybiB0O2xldCBuPWwuY2hhckNvZGVBdChlKzEpO3JldHVybiBKZShuKT8odC01NTI5Njw8MTApKyhuLTU2MzIwKSs2NTUzNjp0fWZ1bmN0aW9uIHJ0KGwpe3JldHVybiBsPD02NTUzNT9TdHJpbmcuZnJvbUNoYXJDb2RlKGwpOihsLT02NTUzNixTdHJpbmcuZnJvbUNoYXJDb2RlKChsPj4xMCkrNTUyOTYsKGwmMTAyMykrNTYzMjApKX1mdW5jdGlvbiBiZShsKXtyZXR1cm4gbDw2NTUzNj8xOjJ9dmFyIHVlPS9cXHJcXG4/fFxcbi8sTT1mdW5jdGlvbihsKXtyZXR1cm4gbFtsLlNpbXBsZT0wXT1cIlNpbXBsZVwiLGxbbC5UcmFja0RlbD0xXT1cIlRyYWNrRGVsXCIsbFtsLlRyYWNrQmVmb3JlPTJdPVwiVHJhY2tCZWZvcmVcIixsW2wuVHJhY2tBZnRlcj0zXT1cIlRyYWNrQWZ0ZXJcIixsfShNfHwoTT17fSkpLE89Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5zZWN0aW9ucz1lfWdldCBsZW5ndGgoKXtsZXQgZT0wO2ZvcihsZXQgdD0wO3Q8dGhpcy5zZWN0aW9ucy5sZW5ndGg7dCs9MillKz10aGlzLnNlY3Rpb25zW3RdO3JldHVybiBlfWdldCBuZXdMZW5ndGgoKXtsZXQgZT0wO2ZvcihsZXQgdD0wO3Q8dGhpcy5zZWN0aW9ucy5sZW5ndGg7dCs9Mil7bGV0IG49dGhpcy5zZWN0aW9uc1t0KzFdO2UrPW48MD90aGlzLnNlY3Rpb25zW3RdOm59cmV0dXJuIGV9Z2V0IGVtcHR5KCl7cmV0dXJuIHRoaXMuc2VjdGlvbnMubGVuZ3RoPT0wfHx0aGlzLnNlY3Rpb25zLmxlbmd0aD09MiYmdGhpcy5zZWN0aW9uc1sxXTwwfWl0ZXJHYXBzKGUpe2ZvcihsZXQgdD0wLG49MCxpPTA7dDx0aGlzLnNlY3Rpb25zLmxlbmd0aDspe2xldCBzPXRoaXMuc2VjdGlvbnNbdCsrXSxyPXRoaXMuc2VjdGlvbnNbdCsrXTtyPDA/KGUobixpLHMpLGkrPXMpOmkrPXIsbis9c319aXRlckNoYW5nZWRSYW5nZXMoZSx0PSExKXtjZSh0aGlzLGUsdCl9Z2V0IGludmVydGVkRGVzYygpe2xldCBlPVtdO2ZvcihsZXQgdD0wO3Q8dGhpcy5zZWN0aW9ucy5sZW5ndGg7KXtsZXQgbj10aGlzLnNlY3Rpb25zW3QrK10saT10aGlzLnNlY3Rpb25zW3QrK107aTwwP2UucHVzaChuLGkpOmUucHVzaChpLG4pfXJldHVybiBuZXcgTyhlKX1jb21wb3NlRGVzYyhlKXtyZXR1cm4gdGhpcy5lbXB0eT9lOmUuZW1wdHk/dGhpczpDZSh0aGlzLGUpfW1hcERlc2MoZSx0PSExKXtyZXR1cm4gZS5lbXB0eT90aGlzOmRlKHRoaXMsZSx0KX1tYXBQb3MoZSx0PS0xLG49TS5TaW1wbGUpe2xldCBpPTAscz0wO2ZvcihsZXQgcj0wO3I8dGhpcy5zZWN0aW9ucy5sZW5ndGg7KXtsZXQgaD10aGlzLnNlY3Rpb25zW3IrK10sbz10aGlzLnNlY3Rpb25zW3IrK10sYT1pK2g7aWYobzwwKXtpZihhPmUpcmV0dXJuIHMrKGUtaSk7cys9aH1lbHNle2lmKG4hPU0uU2ltcGxlJiZhPj1lJiYobj09TS5UcmFja0RlbCYmaTxlJiZhPmV8fG49PU0uVHJhY2tCZWZvcmUmJmk8ZXx8bj09TS5UcmFja0FmdGVyJiZhPmUpKXJldHVybiBudWxsO2lmKGE+ZXx8YT09ZSYmdDwwJiYhaClyZXR1cm4gZT09aXx8dDwwP3M6cytvO3MrPW99aT1hfWlmKGU+aSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUG9zaXRpb24gJHtlfSBpcyBvdXQgb2YgcmFuZ2UgZm9yIGNoYW5nZXNldCBvZiBsZW5ndGggJHtpfWApO3JldHVybiBzfXRvdWNoZXNSYW5nZShlLHQ9ZSl7Zm9yKGxldCBuPTAsaT0wO248dGhpcy5zZWN0aW9ucy5sZW5ndGgmJmk8PXQ7KXtsZXQgcz10aGlzLnNlY3Rpb25zW24rK10scj10aGlzLnNlY3Rpb25zW24rK10saD1pK3M7aWYocj49MCYmaTw9dCYmaD49ZSlyZXR1cm4gaTxlJiZoPnQ/XCJjb3ZlclwiOiEwO2k9aH1yZXR1cm4hMX10b1N0cmluZygpe2xldCBlPVwiXCI7Zm9yKGxldCB0PTA7dDx0aGlzLnNlY3Rpb25zLmxlbmd0aDspe2xldCBuPXRoaXMuc2VjdGlvbnNbdCsrXSxpPXRoaXMuc2VjdGlvbnNbdCsrXTtlKz0oZT9cIiBcIjpcIlwiKStuKyhpPj0wP1wiOlwiK2k6XCJcIil9cmV0dXJuIGV9dG9KU09OKCl7cmV0dXJuIHRoaXMuc2VjdGlvbnN9c3RhdGljIGZyb21KU09OKGUpe2lmKCFBcnJheS5pc0FycmF5KGUpfHxlLmxlbmd0aCUyfHxlLnNvbWUodD0+dHlwZW9mIHQhPVwibnVtYmVyXCIpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBKU09OIHJlcHJlc2VudGF0aW9uIG9mIENoYW5nZURlc2NcIik7cmV0dXJuIG5ldyBPKGUpfXN0YXRpYyBjcmVhdGUoZSl7cmV0dXJuIG5ldyBPKGUpfX0seD1jbGFzcyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlKSx0aGlzLmluc2VydGVkPXR9YXBwbHkoZSl7aWYodGhpcy5sZW5ndGghPWUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXBwbHlpbmcgY2hhbmdlIHNldCB0byBhIGRvY3VtZW50IHdpdGggdGhlIHdyb25nIGxlbmd0aFwiKTtyZXR1cm4gY2UodGhpcywodCxuLGkscyxyKT0+ZT1lLnJlcGxhY2UoaSxpKyhuLXQpLHIpLCExKSxlfW1hcERlc2MoZSx0PSExKXtyZXR1cm4gZGUodGhpcyxlLHQsITApfWludmVydChlKXtsZXQgdD10aGlzLnNlY3Rpb25zLnNsaWNlKCksbj1bXTtmb3IobGV0IGk9MCxzPTA7aTx0Lmxlbmd0aDtpKz0yKXtsZXQgcj10W2ldLGg9dFtpKzFdO2lmKGg+PTApe3RbaV09aCx0W2krMV09cjtsZXQgbz1pPj4xO2Zvcig7bi5sZW5ndGg8bzspbi5wdXNoKHYuZW1wdHkpO24ucHVzaChyP2Uuc2xpY2UocyxzK3IpOnYuZW1wdHkpfXMrPXJ9cmV0dXJuIG5ldyB4KHQsbil9Y29tcG9zZShlKXtyZXR1cm4gdGhpcy5lbXB0eT9lOmUuZW1wdHk/dGhpczpDZSh0aGlzLGUsITApfW1hcChlLHQ9ITEpe3JldHVybiBlLmVtcHR5P3RoaXM6ZGUodGhpcyxlLHQsITApfWl0ZXJDaGFuZ2VzKGUsdD0hMSl7Y2UodGhpcyxlLHQpfWdldCBkZXNjKCl7cmV0dXJuIE8uY3JlYXRlKHRoaXMuc2VjdGlvbnMpfWZpbHRlcihlKXtsZXQgdD1bXSxuPVtdLGk9W10scz1uZXcgTih0aGlzKTtlOmZvcihsZXQgcj0wLGg9MDs7KXtsZXQgbz1yPT1lLmxlbmd0aD8xZTk6ZVtyKytdO2Zvcig7aDxvfHxoPT1vJiZzLmxlbj09MDspe2lmKHMuZG9uZSlicmVhayBlO2xldCBmPU1hdGgubWluKHMubGVuLG8taCk7SShpLGYsLTEpO2xldCB1PXMuaW5zPT0tMT8tMTpzLm9mZj09MD9zLmluczowO0kodCxmLHUpLHU+MCYmUihuLHQscy50ZXh0KSxzLmZvcndhcmQoZiksaCs9Zn1sZXQgYT1lW3IrK107Zm9yKDtoPGE7KXtpZihzLmRvbmUpYnJlYWsgZTtsZXQgZj1NYXRoLm1pbihzLmxlbixhLWgpO0kodCxmLC0xKSxJKGksZixzLmlucz09LTE/LTE6cy5vZmY9PTA/cy5pbnM6MCkscy5mb3J3YXJkKGYpLGgrPWZ9fXJldHVybntjaGFuZ2VzOm5ldyB4KHQsbiksZmlsdGVyZWQ6Ty5jcmVhdGUoaSl9fXRvSlNPTigpe2xldCBlPVtdO2ZvcihsZXQgdD0wO3Q8dGhpcy5zZWN0aW9ucy5sZW5ndGg7dCs9Mil7bGV0IG49dGhpcy5zZWN0aW9uc1t0XSxpPXRoaXMuc2VjdGlvbnNbdCsxXTtpPDA/ZS5wdXNoKG4pOmk9PTA/ZS5wdXNoKFtuXSk6ZS5wdXNoKFtuXS5jb25jYXQodGhpcy5pbnNlcnRlZFt0Pj4xXS50b0pTT04oKSkpfXJldHVybiBlfXN0YXRpYyBvZihlLHQsbil7bGV0IGk9W10scz1bXSxyPTAsaD1udWxsO2Z1bmN0aW9uIG8oZj0hMSl7aWYoIWYmJiFpLmxlbmd0aClyZXR1cm47cjx0JiZJKGksdC1yLC0xKTtsZXQgdT1uZXcgeChpLHMpO2g9aD9oLmNvbXBvc2UodS5tYXAoaCkpOnUsaT1bXSxzPVtdLHI9MH1mdW5jdGlvbiBhKGYpe2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGxldCB1IG9mIGYpYSh1KTtlbHNlIGlmKGYgaW5zdGFuY2VvZiB4KXtpZihmLmxlbmd0aCE9dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTWlzbWF0Y2hlZCBjaGFuZ2Ugc2V0IGxlbmd0aCAoZ290ICR7Zi5sZW5ndGh9LCBleHBlY3RlZCAke3R9KWApO28oKSxoPWg/aC5jb21wb3NlKGYubWFwKGgpKTpmfWVsc2V7bGV0e2Zyb206dSx0bzpkPXUsaW5zZXJ0OmN9PWY7aWYodT5kfHx1PDB8fGQ+dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBjaGFuZ2UgcmFuZ2UgJHt1fSB0byAke2R9IChpbiBkb2Mgb2YgbGVuZ3RoICR7dH0pYCk7bGV0IHA9Yz90eXBlb2YgYz09XCJzdHJpbmdcIj92Lm9mKGMuc3BsaXQobnx8dWUpKTpjOnYuZW1wdHksRT1wLmxlbmd0aDtpZih1PT1kJiZFPT0wKXJldHVybjt1PHImJm8oKSx1PnImJkkoaSx1LXIsLTEpLEkoaSxkLXUsRSksUihzLGkscCkscj1kfX1yZXR1cm4gYShlKSxvKCFoKSxofXN0YXRpYyBlbXB0eShlKXtyZXR1cm4gbmV3IHgoZT9bZSwtMV06W10sW10pfXN0YXRpYyBmcm9tSlNPTihlKXtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBDaGFuZ2VTZXRcIik7bGV0IHQ9W10sbj1bXTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHM9ZVtpXTtpZih0eXBlb2Ygcz09XCJudW1iZXJcIil0LnB1c2gocywtMSk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShzKXx8dHlwZW9mIHNbMF0hPVwibnVtYmVyXCJ8fHMuc29tZSgocixoKT0+aCYmdHlwZW9mIHIhPVwic3RyaW5nXCIpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBKU09OIHJlcHJlc2VudGF0aW9uIG9mIENoYW5nZVNldFwiKTtpZihzLmxlbmd0aD09MSl0LnB1c2goc1swXSwwKTtlbHNle2Zvcig7bi5sZW5ndGg8aTspbi5wdXNoKHYuZW1wdHkpO25baV09di5vZihzLnNsaWNlKDEpKSx0LnB1c2goc1swXSxuW2ldLmxlbmd0aCl9fX1yZXR1cm4gbmV3IHgodCxuKX1zdGF0aWMgY3JlYXRlU2V0KGUsdCl7cmV0dXJuIG5ldyB4KGUsdCl9fTtmdW5jdGlvbiBJKGwsZSx0LG49ITEpe2lmKGU9PTAmJnQ8PTApcmV0dXJuO2xldCBpPWwubGVuZ3RoLTI7aT49MCYmdDw9MCYmdD09bFtpKzFdP2xbaV0rPWU6ZT09MCYmbFtpXT09MD9sW2krMV0rPXQ6bj8obFtpXSs9ZSxsW2krMV0rPXQpOmwucHVzaChlLHQpfWZ1bmN0aW9uIFIobCxlLHQpe2lmKHQubGVuZ3RoPT0wKXJldHVybjtsZXQgbj1lLmxlbmd0aC0yPj4xO2lmKG48bC5sZW5ndGgpbFtsLmxlbmd0aC0xXT1sW2wubGVuZ3RoLTFdLmFwcGVuZCh0KTtlbHNle2Zvcig7bC5sZW5ndGg8bjspbC5wdXNoKHYuZW1wdHkpO2wucHVzaCh0KX19ZnVuY3Rpb24gY2UobCxlLHQpe2xldCBuPWwuaW5zZXJ0ZWQ7Zm9yKGxldCBpPTAscz0wLHI9MDtyPGwuc2VjdGlvbnMubGVuZ3RoOyl7bGV0IGg9bC5zZWN0aW9uc1tyKytdLG89bC5zZWN0aW9uc1tyKytdO2lmKG88MClpKz1oLHMrPWg7ZWxzZXtsZXQgYT1pLGY9cyx1PXYuZW1wdHk7Zm9yKDthKz1oLGYrPW8sbyYmbiYmKHU9dS5hcHBlbmQobltyLTI+PjFdKSksISh0fHxyPT1sLnNlY3Rpb25zLmxlbmd0aHx8bC5zZWN0aW9uc1tyKzFdPDApOyloPWwuc2VjdGlvbnNbcisrXSxvPWwuc2VjdGlvbnNbcisrXTtlKGksYSxzLGYsdSksaT1hLHM9Zn19fWZ1bmN0aW9uIGRlKGwsZSx0LG49ITEpe2xldCBpPVtdLHM9bj9bXTpudWxsLHI9bmV3IE4obCksaD1uZXcgTihlKTtmb3IobGV0IG89LTE7OylpZihyLmlucz09LTEmJmguaW5zPT0tMSl7bGV0IGE9TWF0aC5taW4oci5sZW4saC5sZW4pO0koaSxhLC0xKSxyLmZvcndhcmQoYSksaC5mb3J3YXJkKGEpfWVsc2UgaWYoaC5pbnM+PTAmJihyLmluczwwfHxvPT1yLml8fHIub2ZmPT0wJiYoaC5sZW48ci5sZW58fGgubGVuPT1yLmxlbiYmIXQpKSl7bGV0IGE9aC5sZW47Zm9yKEkoaSxoLmlucywtMSk7YTspe2xldCBmPU1hdGgubWluKHIubGVuLGEpO3IuaW5zPj0wJiZvPHIuaSYmci5sZW48PWYmJihJKGksMCxyLmlucykscyYmUihzLGksci50ZXh0KSxvPXIuaSksci5mb3J3YXJkKGYpLGEtPWZ9aC5uZXh0KCl9ZWxzZSBpZihyLmlucz49MCl7bGV0IGE9MCxmPXIubGVuO2Zvcig7ZjspaWYoaC5pbnM9PS0xKXtsZXQgdT1NYXRoLm1pbihmLGgubGVuKTthKz11LGYtPXUsaC5mb3J3YXJkKHUpfWVsc2UgaWYoaC5pbnM9PTAmJmgubGVuPGYpZi09aC5sZW4saC5uZXh0KCk7ZWxzZSBicmVhaztJKGksYSxvPHIuaT9yLmluczowKSxzJiZvPHIuaSYmUihzLGksci50ZXh0KSxvPXIuaSxyLmZvcndhcmQoci5sZW4tZil9ZWxzZXtpZihyLmRvbmUmJmguZG9uZSlyZXR1cm4gcz94LmNyZWF0ZVNldChpLHMpOk8uY3JlYXRlKGkpO3Rocm93IG5ldyBFcnJvcihcIk1pc21hdGNoZWQgY2hhbmdlIHNldCBsZW5ndGhzXCIpfX1mdW5jdGlvbiBDZShsLGUsdD0hMSl7bGV0IG49W10saT10P1tdOm51bGwscz1uZXcgTihsKSxyPW5ldyBOKGUpO2ZvcihsZXQgaD0hMTs7KXtpZihzLmRvbmUmJnIuZG9uZSlyZXR1cm4gaT94LmNyZWF0ZVNldChuLGkpOk8uY3JlYXRlKG4pO2lmKHMuaW5zPT0wKUkobixzLmxlbiwwLGgpLHMubmV4dCgpO2Vsc2UgaWYoci5sZW49PTAmJiFyLmRvbmUpSShuLDAsci5pbnMsaCksaSYmUihpLG4sci50ZXh0KSxyLm5leHQoKTtlbHNle2lmKHMuZG9uZXx8ci5kb25lKXRocm93IG5ldyBFcnJvcihcIk1pc21hdGNoZWQgY2hhbmdlIHNldCBsZW5ndGhzXCIpO3tsZXQgbz1NYXRoLm1pbihzLmxlbjIsci5sZW4pLGE9bi5sZW5ndGg7aWYocy5pbnM9PS0xKXtsZXQgZj1yLmlucz09LTE/LTE6ci5vZmY/MDpyLmlucztJKG4sbyxmLGgpLGkmJmYmJlIoaSxuLHIudGV4dCl9ZWxzZSByLmlucz09LTE/KEkobixzLm9mZj8wOnMubGVuLG8saCksaSYmUihpLG4scy50ZXh0Qml0KG8pKSk6KEkobixzLm9mZj8wOnMubGVuLHIub2ZmPzA6ci5pbnMsaCksaSYmIXIub2ZmJiZSKGksbixyLnRleHQpKTtoPShzLmlucz5vfHxyLmlucz49MCYmci5sZW4+bykmJihofHxuLmxlbmd0aD5hKSxzLmZvcndhcmQyKG8pLHIuZm9yd2FyZChvKX19fX12YXIgTj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnNldD1lLHRoaXMuaT0wLHRoaXMubmV4dCgpfW5leHQoKXtsZXR7c2VjdGlvbnM6ZX09dGhpcy5zZXQ7dGhpcy5pPGUubGVuZ3RoPyh0aGlzLmxlbj1lW3RoaXMuaSsrXSx0aGlzLmlucz1lW3RoaXMuaSsrXSk6KHRoaXMubGVuPTAsdGhpcy5pbnM9LTIpLHRoaXMub2ZmPTB9Z2V0IGRvbmUoKXtyZXR1cm4gdGhpcy5pbnM9PS0yfWdldCBsZW4yKCl7cmV0dXJuIHRoaXMuaW5zPDA/dGhpcy5sZW46dGhpcy5pbnN9Z2V0IHRleHQoKXtsZXR7aW5zZXJ0ZWQ6ZX09dGhpcy5zZXQsdD10aGlzLmktMj4+MTtyZXR1cm4gdD49ZS5sZW5ndGg/di5lbXB0eTplW3RdfXRleHRCaXQoZSl7bGV0e2luc2VydGVkOnR9PXRoaXMuc2V0LG49dGhpcy5pLTI+PjE7cmV0dXJuIG4+PXQubGVuZ3RoJiYhZT92LmVtcHR5OnRbbl0uc2xpY2UodGhpcy5vZmYsZT09bnVsbD92b2lkIDA6dGhpcy5vZmYrZSl9Zm9yd2FyZChlKXtlPT10aGlzLmxlbj90aGlzLm5leHQoKToodGhpcy5sZW4tPWUsdGhpcy5vZmYrPWUpfWZvcndhcmQyKGUpe3RoaXMuaW5zPT0tMT90aGlzLmZvcndhcmQoZSk6ZT09dGhpcy5pbnM/dGhpcy5uZXh0KCk6KHRoaXMuaW5zLT1lLHRoaXMub2ZmKz1lKX19LEI9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZnJvbT1lLHRoaXMudG89dCx0aGlzLmZsYWdzPW59Z2V0IGFuY2hvcigpe3JldHVybiB0aGlzLmZsYWdzJjE2P3RoaXMudG86dGhpcy5mcm9tfWdldCBoZWFkKCl7cmV0dXJuIHRoaXMuZmxhZ3MmMTY/dGhpcy5mcm9tOnRoaXMudG99Z2V0IGVtcHR5KCl7cmV0dXJuIHRoaXMuZnJvbT09dGhpcy50b31nZXQgYXNzb2MoKXtyZXR1cm4gdGhpcy5mbGFncyY0Py0xOnRoaXMuZmxhZ3MmOD8xOjB9Z2V0IGJpZGlMZXZlbCgpe2xldCBlPXRoaXMuZmxhZ3MmMztyZXR1cm4gZT09Mz9udWxsOmV9Z2V0IGdvYWxDb2x1bW4oKXtsZXQgZT10aGlzLmZsYWdzPj41O3JldHVybiBlPT0zMzU1NDQzMT92b2lkIDA6ZX1tYXAoZSx0PS0xKXtsZXQgbixpO3JldHVybiB0aGlzLmVtcHR5P249aT1lLm1hcFBvcyh0aGlzLmZyb20sdCk6KG49ZS5tYXBQb3ModGhpcy5mcm9tLDEpLGk9ZS5tYXBQb3ModGhpcy50bywtMSkpLG49PXRoaXMuZnJvbSYmaT09dGhpcy50bz90aGlzOm5ldyBCKG4saSx0aGlzLmZsYWdzKX1leHRlbmQoZSx0PWUpe2lmKGU8PXRoaXMuYW5jaG9yJiZ0Pj10aGlzLmFuY2hvcilyZXR1cm4gZy5yYW5nZShlLHQpO2xldCBuPU1hdGguYWJzKGUtdGhpcy5hbmNob3IpPk1hdGguYWJzKHQtdGhpcy5hbmNob3IpP2U6dDtyZXR1cm4gZy5yYW5nZSh0aGlzLmFuY2hvcixuKX1lcShlKXtyZXR1cm4gdGhpcy5hbmNob3I9PWUuYW5jaG9yJiZ0aGlzLmhlYWQ9PWUuaGVhZH10b0pTT04oKXtyZXR1cm57YW5jaG9yOnRoaXMuYW5jaG9yLGhlYWQ6dGhpcy5oZWFkfX1zdGF0aWMgZnJvbUpTT04oZSl7aWYoIWV8fHR5cGVvZiBlLmFuY2hvciE9XCJudW1iZXJcInx8dHlwZW9mIGUuaGVhZCE9XCJudW1iZXJcIil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgU2VsZWN0aW9uUmFuZ2VcIik7cmV0dXJuIGcucmFuZ2UoZS5hbmNob3IsZS5oZWFkKX1zdGF0aWMgY3JlYXRlKGUsdCxuKXtyZXR1cm4gbmV3IEIoZSx0LG4pfX0sZz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMucmFuZ2VzPWUsdGhpcy5tYWluSW5kZXg9dH1tYXAoZSx0PS0xKXtyZXR1cm4gZS5lbXB0eT90aGlzOmcuY3JlYXRlKHRoaXMucmFuZ2VzLm1hcChuPT5uLm1hcChlLHQpKSx0aGlzLm1haW5JbmRleCl9ZXEoZSl7aWYodGhpcy5yYW5nZXMubGVuZ3RoIT1lLnJhbmdlcy5sZW5ndGh8fHRoaXMubWFpbkluZGV4IT1lLm1haW5JbmRleClyZXR1cm4hMTtmb3IobGV0IHQ9MDt0PHRoaXMucmFuZ2VzLmxlbmd0aDt0KyspaWYoIXRoaXMucmFuZ2VzW3RdLmVxKGUucmFuZ2VzW3RdKSlyZXR1cm4hMTtyZXR1cm4hMH1nZXQgbWFpbigpe3JldHVybiB0aGlzLnJhbmdlc1t0aGlzLm1haW5JbmRleF19YXNTaW5nbGUoKXtyZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RoPT0xP3RoaXM6bmV3IGcoW3RoaXMubWFpbl0sMCl9YWRkUmFuZ2UoZSx0PSEwKXtyZXR1cm4gZy5jcmVhdGUoW2VdLmNvbmNhdCh0aGlzLnJhbmdlcyksdD8wOnRoaXMubWFpbkluZGV4KzEpfXJlcGxhY2VSYW5nZShlLHQ9dGhpcy5tYWluSW5kZXgpe2xldCBuPXRoaXMucmFuZ2VzLnNsaWNlKCk7cmV0dXJuIG5bdF09ZSxnLmNyZWF0ZShuLHRoaXMubWFpbkluZGV4KX10b0pTT04oKXtyZXR1cm57cmFuZ2VzOnRoaXMucmFuZ2VzLm1hcChlPT5lLnRvSlNPTigpKSxtYWluOnRoaXMubWFpbkluZGV4fX1zdGF0aWMgZnJvbUpTT04oZSl7aWYoIWV8fCFBcnJheS5pc0FycmF5KGUucmFuZ2VzKXx8dHlwZW9mIGUubWFpbiE9XCJudW1iZXJcInx8ZS5tYWluPj1lLnJhbmdlcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIEpTT04gcmVwcmVzZW50YXRpb24gZm9yIEVkaXRvclNlbGVjdGlvblwiKTtyZXR1cm4gbmV3IGcoZS5yYW5nZXMubWFwKHQ9PkIuZnJvbUpTT04odCkpLGUubWFpbil9c3RhdGljIHNpbmdsZShlLHQ9ZSl7cmV0dXJuIG5ldyBnKFtnLnJhbmdlKGUsdCldLDApfXN0YXRpYyBjcmVhdGUoZSx0PTApe2lmKGUubGVuZ3RoPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQSBzZWxlY3Rpb24gbmVlZHMgYXQgbGVhc3Qgb25lIHJhbmdlXCIpO2ZvcihsZXQgbj0wLGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHM9ZVtpXTtpZihzLmVtcHR5P3MuZnJvbTw9bjpzLmZyb208bilyZXR1cm4gZy5ub3JtYWxpemVkKGUuc2xpY2UoKSx0KTtuPXMudG99cmV0dXJuIG5ldyBnKGUsdCl9c3RhdGljIGN1cnNvcihlLHQ9MCxuLGkpe3JldHVybiBCLmNyZWF0ZShlLGUsKHQ9PTA/MDp0PDA/NDo4KXwobj09bnVsbD8zOk1hdGgubWluKDIsbikpfChpPz8zMzU1NDQzMSk8PDUpfXN0YXRpYyByYW5nZShlLHQsbil7bGV0IGk9KG4/PzMzNTU0NDMxKTw8NTtyZXR1cm4gdDxlP0IuY3JlYXRlKHQsZSwxNnxpfDgpOkIuY3JlYXRlKGUsdCxpfCh0PmU/NDowKSl9c3RhdGljIG5vcm1hbGl6ZWQoZSx0PTApe2xldCBuPWVbdF07ZS5zb3J0KChpLHMpPT5pLmZyb20tcy5mcm9tKSx0PWUuaW5kZXhPZihuKTtmb3IobGV0IGk9MTtpPGUubGVuZ3RoO2krKyl7bGV0IHM9ZVtpXSxyPWVbaS0xXTtpZihzLmVtcHR5P3MuZnJvbTw9ci50bzpzLmZyb208ci50byl7bGV0IGg9ci5mcm9tLG89TWF0aC5tYXgocy50byxyLnRvKTtpPD10JiZ0LS0sZS5zcGxpY2UoLS1pLDIscy5hbmNob3I+cy5oZWFkP2cucmFuZ2UobyxoKTpnLnJhbmdlKGgsbykpfX1yZXR1cm4gbmV3IGcoZSx0KX19O2Z1bmN0aW9uIFZlKGwsZSl7Zm9yKGxldCB0IG9mIGwucmFuZ2VzKWlmKHQudG8+ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlNlbGVjdGlvbiBwb2ludHMgb3V0c2lkZSBvZiBkb2N1bWVudFwiKX12YXIgeWU9MCxBPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLGkscyl7dGhpcy5jb21iaW5lPWUsdGhpcy5jb21wYXJlSW5wdXQ9dCx0aGlzLmNvbXBhcmU9bix0aGlzLmlzU3RhdGljPWksdGhpcy5pZD15ZSsrLHRoaXMuZGVmYXVsdD1lKFtdKSx0aGlzLmV4dGVuc2lvbnM9dHlwZW9mIHM9PVwiZnVuY3Rpb25cIj9zKHRoaXMpOnN9c3RhdGljIGRlZmluZShlPXt9KXtyZXR1cm4gbmV3IEEoZS5jb21iaW5lfHwodD0+dCksZS5jb21wYXJlSW5wdXR8fCgodCxuKT0+dD09PW4pLGUuY29tcGFyZXx8KGUuY29tYmluZT8odCxuKT0+dD09PW46U2UpLCEhZS5zdGF0aWMsZS5lbmFibGVzKX1vZihlKXtyZXR1cm4gbmV3IHooW10sdGhpcywwLGUpfWNvbXB1dGUoZSx0KXtpZih0aGlzLmlzU3RhdGljKXRocm93IG5ldyBFcnJvcihcIkNhbid0IGNvbXB1dGUgYSBzdGF0aWMgZmFjZXRcIik7cmV0dXJuIG5ldyB6KGUsdGhpcywxLHQpfWNvbXB1dGVOKGUsdCl7aWYodGhpcy5pc1N0YXRpYyl0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBjb21wdXRlIGEgc3RhdGljIGZhY2V0XCIpO3JldHVybiBuZXcgeihlLHRoaXMsMix0KX1mcm9tKGUsdCl7cmV0dXJuIHR8fCh0PW49Pm4pLHRoaXMuY29tcHV0ZShbZV0sbj0+dChuLmZpZWxkKGUpKSl9fTtmdW5jdGlvbiBTZShsLGUpe3JldHVybiBsPT1lfHxsLmxlbmd0aD09ZS5sZW5ndGgmJmwuZXZlcnkoKHQsbik9PnQ9PT1lW25dKX12YXIgej1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbixpKXt0aGlzLmRlcGVuZGVuY2llcz1lLHRoaXMuZmFjZXQ9dCx0aGlzLnR5cGU9bix0aGlzLnZhbHVlPWksdGhpcy5pZD15ZSsrfWR5bmFtaWNTbG90KGUpe3ZhciB0O2xldCBuPXRoaXMudmFsdWUsaT10aGlzLmZhY2V0LmNvbXBhcmVJbnB1dCxzPXRoaXMuaWQscj1lW3NdPj4xLGg9dGhpcy50eXBlPT0yLG89ITEsYT0hMSxmPVtdO2ZvcihsZXQgdSBvZiB0aGlzLmRlcGVuZGVuY2llcyl1PT1cImRvY1wiP289ITA6dT09XCJzZWxlY3Rpb25cIj9hPSEwOigoKHQ9ZVt1LmlkXSkhPT1udWxsJiZ0IT09dm9pZCAwP3Q6MSkmMSk9PTAmJmYucHVzaChlW3UuaWRdKTtyZXR1cm57Y3JlYXRlKHUpe3JldHVybiB1LnZhbHVlc1tyXT1uKHUpLDF9LHVwZGF0ZSh1LGQpe2lmKG8mJmQuZG9jQ2hhbmdlZHx8YSYmKGQuZG9jQ2hhbmdlZHx8ZC5zZWxlY3Rpb24pfHxnZSh1LGYpKXtsZXQgYz1uKHUpO2lmKGg/IU9lKGMsdS52YWx1ZXNbcl0saSk6IWkoYyx1LnZhbHVlc1tyXSkpcmV0dXJuIHUudmFsdWVzW3JdPWMsMX1yZXR1cm4gMH0scmVjb25maWd1cmU6KHUsZCk9PntsZXQgYz1uKHUpLHA9ZC5jb25maWcuYWRkcmVzc1tzXTtpZihwIT1udWxsKXtsZXQgRT1yZShkLHApO2lmKHRoaXMuZGVwZW5kZW5jaWVzLmV2ZXJ5KGs9PmsgaW5zdGFuY2VvZiBBP2QuZmFjZXQoayk9PT11LmZhY2V0KGspOmsgaW5zdGFuY2VvZiBKP2QuZmllbGQoaywhMSk9PXUuZmllbGQoaywhMSk6ITApfHwoaD9PZShjLEUsaSk6aShjLEUpKSlyZXR1cm4gdS52YWx1ZXNbcl09RSwwfXJldHVybiB1LnZhbHVlc1tyXT1jLDF9fX19O2Z1bmN0aW9uIE9lKGwsZSx0KXtpZihsLmxlbmd0aCE9ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuPTA7bjxsLmxlbmd0aDtuKyspaWYoIXQobFtuXSxlW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBnZShsLGUpe2xldCB0PSExO2ZvcihsZXQgbiBvZiBlKUsobCxuKSYxJiYodD0hMCk7cmV0dXJuIHR9ZnVuY3Rpb24gS2UobCxlLHQpe2xldCBuPXQubWFwKG89Pmxbby5pZF0pLGk9dC5tYXAobz0+by50eXBlKSxzPW4uZmlsdGVyKG89PiEobyYxKSkscj1sW2UuaWRdPj4xO2Z1bmN0aW9uIGgobyl7bGV0IGE9W107Zm9yKGxldCBmPTA7ZjxuLmxlbmd0aDtmKyspe2xldCB1PXJlKG8sbltmXSk7aWYoaVtmXT09Milmb3IobGV0IGQgb2YgdSlhLnB1c2goZCk7ZWxzZSBhLnB1c2godSl9cmV0dXJuIGUuY29tYmluZShhKX1yZXR1cm57Y3JlYXRlKG8pe2ZvcihsZXQgYSBvZiBuKUsobyxhKTtyZXR1cm4gby52YWx1ZXNbcl09aChvKSwxfSx1cGRhdGUobyxhKXtpZighZ2UobyxzKSlyZXR1cm4gMDtsZXQgZj1oKG8pO3JldHVybiBlLmNvbXBhcmUoZixvLnZhbHVlc1tyXSk/MDooby52YWx1ZXNbcl09ZiwxKX0scmVjb25maWd1cmUobyxhKXtsZXQgZj1nZShvLG4pLHU9YS5jb25maWcuZmFjZXRzW2UuaWRdLGQ9YS5mYWNldChlKTtpZih1JiYhZiYmU2UodCx1KSlyZXR1cm4gby52YWx1ZXNbcl09ZCwwO2xldCBjPWgobyk7cmV0dXJuIGUuY29tcGFyZShjLGQpPyhvLnZhbHVlc1tyXT1kLDApOihvLnZhbHVlc1tyXT1jLDEpfX19dmFyIEVlPUEuZGVmaW5lKHtzdGF0aWM6ITB9KSxKPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLGkscyl7dGhpcy5pZD1lLHRoaXMuY3JlYXRlRj10LHRoaXMudXBkYXRlRj1uLHRoaXMuY29tcGFyZUY9aSx0aGlzLnNwZWM9cyx0aGlzLnByb3ZpZGVzPXZvaWQgMH1zdGF0aWMgZGVmaW5lKGUpe2xldCB0PW5ldyBKKHllKyssZS5jcmVhdGUsZS51cGRhdGUsZS5jb21wYXJlfHwoKG4saSk9Pm49PT1pKSxlKTtyZXR1cm4gZS5wcm92aWRlJiYodC5wcm92aWRlcz1lLnByb3ZpZGUodCkpLHR9Y3JlYXRlKGUpe2xldCB0PWUuZmFjZXQoRWUpLmZpbmQobj0+bi5maWVsZD09dGhpcyk7cmV0dXJuKHQ/LmNyZWF0ZXx8dGhpcy5jcmVhdGVGKShlKX1zbG90KGUpe2xldCB0PWVbdGhpcy5pZF0+PjE7cmV0dXJue2NyZWF0ZTpuPT4obi52YWx1ZXNbdF09dGhpcy5jcmVhdGUobiksMSksdXBkYXRlOihuLGkpPT57bGV0IHM9bi52YWx1ZXNbdF0scj10aGlzLnVwZGF0ZUYocyxpKTtyZXR1cm4gdGhpcy5jb21wYXJlRihzLHIpPzA6KG4udmFsdWVzW3RdPXIsMSl9LHJlY29uZmlndXJlOihuLGkpPT5pLmNvbmZpZy5hZGRyZXNzW3RoaXMuaWRdIT1udWxsPyhuLnZhbHVlc1t0XT1pLmZpZWxkKHRoaXMpLDApOihuLnZhbHVlc1t0XT10aGlzLmNyZWF0ZShuKSwxKX19aW5pdChlKXtyZXR1cm5bdGhpcyxFZS5vZih7ZmllbGQ6dGhpcyxjcmVhdGU6ZX0pXX1nZXQgZXh0ZW5zaW9uKCl7cmV0dXJuIHRoaXN9fSxUPXtsb3dlc3Q6NCxsb3c6MyxkZWZhdWx0OjIsaGlnaDoxLGhpZ2hlc3Q6MH07ZnVuY3Rpb24gSChsKXtyZXR1cm4gZT0+bmV3IHNlKGUsbCl9dmFyIGx0PXtoaWdoZXN0OkgoVC5oaWdoZXN0KSxoaWdoOkgoVC5oaWdoKSxkZWZhdWx0OkgoVC5kZWZhdWx0KSxsb3c6SChULmxvdyksbG93ZXN0OkgoVC5sb3dlc3QpfSxzZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaW5uZXI9ZSx0aGlzLnByZWM9dH19LFU9Y2xhc3N7b2YoZSl7cmV0dXJuIG5ldyBRKHRoaXMsZSl9cmVjb25maWd1cmUoZSl7cmV0dXJuIFUucmVjb25maWd1cmUub2Yoe2NvbXBhcnRtZW50OnRoaXMsZXh0ZW5zaW9uOmV9KX1nZXQoZSl7cmV0dXJuIGUuY29uZmlnLmNvbXBhcnRtZW50cy5nZXQodGhpcyl9fSxRPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5jb21wYXJ0bWVudD1lLHRoaXMuaW5uZXI9dH19LEc9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4saSxzLHIpe2Zvcih0aGlzLmJhc2U9ZSx0aGlzLmNvbXBhcnRtZW50cz10LHRoaXMuZHluYW1pY1Nsb3RzPW4sdGhpcy5hZGRyZXNzPWksdGhpcy5zdGF0aWNWYWx1ZXM9cyx0aGlzLmZhY2V0cz1yLHRoaXMuc3RhdHVzVGVtcGxhdGU9W107dGhpcy5zdGF0dXNUZW1wbGF0ZS5sZW5ndGg8bi5sZW5ndGg7KXRoaXMuc3RhdHVzVGVtcGxhdGUucHVzaCgwKX1zdGF0aWNGYWNldChlKXtsZXQgdD10aGlzLmFkZHJlc3NbZS5pZF07cmV0dXJuIHQ9PW51bGw/ZS5kZWZhdWx0OnRoaXMuc3RhdGljVmFsdWVzW3Q+PjFdfXN0YXRpYyByZXNvbHZlKGUsdCxuKXtsZXQgaT1bXSxzPU9iamVjdC5jcmVhdGUobnVsbCkscj1uZXcgTWFwO2ZvcihsZXQgZCBvZiBRZShlLHQscikpZCBpbnN0YW5jZW9mIEo/aS5wdXNoKGQpOihzW2QuZmFjZXQuaWRdfHwoc1tkLmZhY2V0LmlkXT1bXSkpLnB1c2goZCk7bGV0IGg9T2JqZWN0LmNyZWF0ZShudWxsKSxvPVtdLGE9W107Zm9yKGxldCBkIG9mIGkpaFtkLmlkXT1hLmxlbmd0aDw8MSxhLnB1c2goYz0+ZC5zbG90KGMpKTtsZXQgZj1uPy5jb25maWcuZmFjZXRzO2ZvcihsZXQgZCBpbiBzKXtsZXQgYz1zW2RdLHA9Y1swXS5mYWNldCxFPWYmJmZbZF18fFtdO2lmKGMuZXZlcnkoaz0+ay50eXBlPT0wKSlpZihoW3AuaWRdPW8ubGVuZ3RoPDwxfDEsU2UoRSxjKSlvLnB1c2gobi5mYWNldChwKSk7ZWxzZXtsZXQgaz1wLmNvbWJpbmUoYy5tYXAoaGU9PmhlLnZhbHVlKSk7by5wdXNoKG4mJnAuY29tcGFyZShrLG4uZmFjZXQocCkpP24uZmFjZXQocCk6ayl9ZWxzZXtmb3IobGV0IGsgb2YgYylrLnR5cGU9PTA/KGhbay5pZF09by5sZW5ndGg8PDF8MSxvLnB1c2goay52YWx1ZSkpOihoW2suaWRdPWEubGVuZ3RoPDwxLGEucHVzaChoZT0+ay5keW5hbWljU2xvdChoZSkpKTtoW3AuaWRdPWEubGVuZ3RoPDwxLGEucHVzaChrPT5LZShrLHAsYykpfX1sZXQgdT1hLm1hcChkPT5kKGgpKTtyZXR1cm4gbmV3IEcoZSxyLHUsaCxvLHMpfX07ZnVuY3Rpb24gUWUobCxlLHQpe2xldCBuPVtbXSxbXSxbXSxbXSxbXV0saT1uZXcgTWFwO2Z1bmN0aW9uIHMocixoKXtsZXQgbz1pLmdldChyKTtpZihvIT1udWxsKXtpZihvPD1oKXJldHVybjtsZXQgYT1uW29dLmluZGV4T2Yocik7YT4tMSYmbltvXS5zcGxpY2UoYSwxKSxyIGluc3RhbmNlb2YgUSYmdC5kZWxldGUoci5jb21wYXJ0bWVudCl9aWYoaS5zZXQocixoKSxBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgYSBvZiByKXMoYSxoKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiBRKXtpZih0LmhhcyhyLmNvbXBhcnRtZW50KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkR1cGxpY2F0ZSB1c2Ugb2YgY29tcGFydG1lbnQgaW4gZXh0ZW5zaW9uc1wiKTtsZXQgYT1lLmdldChyLmNvbXBhcnRtZW50KXx8ci5pbm5lcjt0LnNldChyLmNvbXBhcnRtZW50LGEpLHMoYSxoKX1lbHNlIGlmKHIgaW5zdGFuY2VvZiBzZSlzKHIuaW5uZXIsci5wcmVjKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiBKKW5baF0ucHVzaChyKSxyLnByb3ZpZGVzJiZzKHIucHJvdmlkZXMsaCk7ZWxzZSBpZihyIGluc3RhbmNlb2YgeiluW2hdLnB1c2gociksci5mYWNldC5leHRlbnNpb25zJiZzKHIuZmFjZXQuZXh0ZW5zaW9ucyxULmRlZmF1bHQpO2Vsc2V7bGV0IGE9ci5leHRlbnNpb247aWYoIWEpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgZXh0ZW5zaW9uIHZhbHVlIGluIGV4dGVuc2lvbiBzZXQgKCR7cn0pLiBUaGlzIHNvbWV0aW1lcyBoYXBwZW5zIGJlY2F1c2UgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIEBjb2RlbWlycm9yL3N0YXRlIGFyZSBsb2FkZWQsIGJyZWFraW5nIGluc3RhbmNlb2YgY2hlY2tzLmApO3MoYSxoKX19cmV0dXJuIHMobCxULmRlZmF1bHQpLG4ucmVkdWNlKChyLGgpPT5yLmNvbmNhdChoKSl9ZnVuY3Rpb24gSyhsLGUpe2lmKGUmMSlyZXR1cm4gMjtsZXQgdD1lPj4xLG49bC5zdGF0dXNbdF07aWYobj09NCl0aHJvdyBuZXcgRXJyb3IoXCJDeWNsaWMgZGVwZW5kZW5jeSBiZXR3ZWVuIGZpZWxkcyBhbmQvb3IgZmFjZXRzXCIpO2lmKG4mMilyZXR1cm4gbjtsLnN0YXR1c1t0XT00O2xldCBpPWwuY29tcHV0ZVNsb3QobCxsLmNvbmZpZy5keW5hbWljU2xvdHNbdF0pO3JldHVybiBsLnN0YXR1c1t0XT0yfGl9ZnVuY3Rpb24gcmUobCxlKXtyZXR1cm4gZSYxP2wuY29uZmlnLnN0YXRpY1ZhbHVlc1tlPj4xXTpsLnZhbHVlc1tlPj4xXX12YXIgTmU9QS5kZWZpbmUoKSxEZT1BLmRlZmluZSh7Y29tYmluZTpsPT5sLnNvbWUoZT0+ZSksc3RhdGljOiEwfSkscWU9QS5kZWZpbmUoe2NvbWJpbmU6bD0+bC5sZW5ndGg/bFswXTp2b2lkIDAsc3RhdGljOiEwfSksTGU9QS5kZWZpbmUoKSwkZT1BLmRlZmluZSgpLHplPUEuZGVmaW5lKCksV2U9QS5kZWZpbmUoe2NvbWJpbmU6bD0+bC5sZW5ndGg/bFswXTohMX0pLEQ9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnR5cGU9ZSx0aGlzLnZhbHVlPXR9c3RhdGljIGRlZmluZSgpe3JldHVybiBuZXcgcGV9fSxwZT1jbGFzc3tvZihlKXtyZXR1cm4gbmV3IEQodGhpcyxlKX19LG1lPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMubWFwPWV9b2YoZSl7cmV0dXJuIG5ldyB5KHRoaXMsZSl9fSx5PWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy50eXBlPWUsdGhpcy52YWx1ZT10fW1hcChlKXtsZXQgdD10aGlzLnR5cGUubWFwKHRoaXMudmFsdWUsZSk7cmV0dXJuIHQ9PT12b2lkIDA/dm9pZCAwOnQ9PXRoaXMudmFsdWU/dGhpczpuZXcgeSh0aGlzLnR5cGUsdCl9aXMoZSl7cmV0dXJuIHRoaXMudHlwZT09ZX1zdGF0aWMgZGVmaW5lKGU9e30pe3JldHVybiBuZXcgbWUoZS5tYXB8fCh0PT50KSl9c3RhdGljIG1hcEVmZmVjdHMoZSx0KXtpZighZS5sZW5ndGgpcmV0dXJuIGU7bGV0IG49W107Zm9yKGxldCBpIG9mIGUpe2xldCBzPWkubWFwKHQpO3MmJm4ucHVzaChzKX1yZXR1cm4gbn19O3kucmVjb25maWd1cmU9eS5kZWZpbmUoKTt5LmFwcGVuZENvbmZpZz15LmRlZmluZSgpO3ZhciBTPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLGkscyxyKXt0aGlzLnN0YXJ0U3RhdGU9ZSx0aGlzLmNoYW5nZXM9dCx0aGlzLnNlbGVjdGlvbj1uLHRoaXMuZWZmZWN0cz1pLHRoaXMuYW5ub3RhdGlvbnM9cyx0aGlzLnNjcm9sbEludG9WaWV3PXIsdGhpcy5fZG9jPW51bGwsdGhpcy5fc3RhdGU9bnVsbCxuJiZWZShuLHQubmV3TGVuZ3RoKSxzLnNvbWUoaD0+aC50eXBlPT1TLnRpbWUpfHwodGhpcy5hbm5vdGF0aW9ucz1zLmNvbmNhdChTLnRpbWUub2YoRGF0ZS5ub3coKSkpKX1zdGF0aWMgY3JlYXRlKGUsdCxuLGkscyxyKXtyZXR1cm4gbmV3IFMoZSx0LG4saSxzLHIpfWdldCBuZXdEb2MoKXtyZXR1cm4gdGhpcy5fZG9jfHwodGhpcy5fZG9jPXRoaXMuY2hhbmdlcy5hcHBseSh0aGlzLnN0YXJ0U3RhdGUuZG9jKSl9Z2V0IG5ld1NlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbnx8dGhpcy5zdGFydFN0YXRlLnNlbGVjdGlvbi5tYXAodGhpcy5jaGFuZ2VzKX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV8fHRoaXMuc3RhcnRTdGF0ZS5hcHBseVRyYW5zYWN0aW9uKHRoaXMpLHRoaXMuX3N0YXRlfWFubm90YXRpb24oZSl7Zm9yKGxldCB0IG9mIHRoaXMuYW5ub3RhdGlvbnMpaWYodC50eXBlPT1lKXJldHVybiB0LnZhbHVlfWdldCBkb2NDaGFuZ2VkKCl7cmV0dXJuIXRoaXMuY2hhbmdlcy5lbXB0eX1nZXQgcmVjb25maWd1cmVkKCl7cmV0dXJuIHRoaXMuc3RhcnRTdGF0ZS5jb25maWchPXRoaXMuc3RhdGUuY29uZmlnfWlzVXNlckV2ZW50KGUpe2xldCB0PXRoaXMuYW5ub3RhdGlvbihTLnVzZXJFdmVudCk7cmV0dXJuISEodCYmKHQ9PWV8fHQubGVuZ3RoPmUubGVuZ3RoJiZ0LnNsaWNlKDAsZS5sZW5ndGgpPT1lJiZ0W2UubGVuZ3RoXT09XCIuXCIpKX19O1MudGltZT1ELmRlZmluZSgpO1MudXNlckV2ZW50PUQuZGVmaW5lKCk7Uy5hZGRUb0hpc3Rvcnk9RC5kZWZpbmUoKTtTLnJlbW90ZT1ELmRlZmluZSgpO2Z1bmN0aW9uIFhlKGwsZSl7bGV0IHQ9W107Zm9yKGxldCBuPTAsaT0wOzspe2xldCBzLHI7aWYobjxsLmxlbmd0aCYmKGk9PWUubGVuZ3RofHxlW2ldPj1sW25dKSlzPWxbbisrXSxyPWxbbisrXTtlbHNlIGlmKGk8ZS5sZW5ndGgpcz1lW2krK10scj1lW2krK107ZWxzZSByZXR1cm4gdDshdC5sZW5ndGh8fHRbdC5sZW5ndGgtMV08cz90LnB1c2gocyxyKTp0W3QubGVuZ3RoLTFdPHImJih0W3QubGVuZ3RoLTFdPXIpfX1mdW5jdGlvbiBVZShsLGUsdCl7dmFyIG47bGV0IGkscyxyO3JldHVybiB0PyhpPWUuY2hhbmdlcyxzPXguZW1wdHkoZS5jaGFuZ2VzLmxlbmd0aCkscj1sLmNoYW5nZXMuY29tcG9zZShlLmNoYW5nZXMpKTooaT1lLmNoYW5nZXMubWFwKGwuY2hhbmdlcykscz1sLmNoYW5nZXMubWFwRGVzYyhlLmNoYW5nZXMsITApLHI9bC5jaGFuZ2VzLmNvbXBvc2UoaSkpLHtjaGFuZ2VzOnIsc2VsZWN0aW9uOmUuc2VsZWN0aW9uP2Uuc2VsZWN0aW9uLm1hcChzKToobj1sLnNlbGVjdGlvbik9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLm1hcChpKSxlZmZlY3RzOnkubWFwRWZmZWN0cyhsLmVmZmVjdHMsaSkuY29uY2F0KHkubWFwRWZmZWN0cyhlLmVmZmVjdHMscykpLGFubm90YXRpb25zOmwuYW5ub3RhdGlvbnMubGVuZ3RoP2wuYW5ub3RhdGlvbnMuY29uY2F0KGUuYW5ub3RhdGlvbnMpOmUuYW5ub3RhdGlvbnMsc2Nyb2xsSW50b1ZpZXc6bC5zY3JvbGxJbnRvVmlld3x8ZS5zY3JvbGxJbnRvVmlld319ZnVuY3Rpb24gd2UobCxlLHQpe2xldCBuPWUuc2VsZWN0aW9uLGk9VyhlLmFubm90YXRpb25zKTtyZXR1cm4gZS51c2VyRXZlbnQmJihpPWkuY29uY2F0KFMudXNlckV2ZW50Lm9mKGUudXNlckV2ZW50KSkpLHtjaGFuZ2VzOmUuY2hhbmdlcyBpbnN0YW5jZW9mIHg/ZS5jaGFuZ2VzOngub2YoZS5jaGFuZ2VzfHxbXSx0LGwuZmFjZXQocWUpKSxzZWxlY3Rpb246biYmKG4gaW5zdGFuY2VvZiBnP246Zy5zaW5nbGUobi5hbmNob3Isbi5oZWFkKSksZWZmZWN0czpXKGUuZWZmZWN0cyksYW5ub3RhdGlvbnM6aSxzY3JvbGxJbnRvVmlldzohIWUuc2Nyb2xsSW50b1ZpZXd9fWZ1bmN0aW9uIEdlKGwsZSx0KXtsZXQgbj13ZShsLGUubGVuZ3RoP2VbMF06e30sbC5kb2MubGVuZ3RoKTtlLmxlbmd0aCYmZVswXS5maWx0ZXI9PT0hMSYmKHQ9ITEpO2ZvcihsZXQgcz0xO3M8ZS5sZW5ndGg7cysrKXtlW3NdLmZpbHRlcj09PSExJiYodD0hMSk7bGV0IHI9ISFlW3NdLnNlcXVlbnRpYWw7bj1VZShuLHdlKGwsZVtzXSxyP24uY2hhbmdlcy5uZXdMZW5ndGg6bC5kb2MubGVuZ3RoKSxyKX1sZXQgaT1TLmNyZWF0ZShsLG4uY2hhbmdlcyxuLnNlbGVjdGlvbixuLmVmZmVjdHMsbi5hbm5vdGF0aW9ucyxuLnNjcm9sbEludG9WaWV3KTtyZXR1cm4gX2UodD9ZZShpKTppKX1mdW5jdGlvbiBZZShsKXtsZXQgZT1sLnN0YXJ0U3RhdGUsdD0hMDtmb3IobGV0IGkgb2YgZS5mYWNldChMZSkpe2xldCBzPWkobCk7aWYocz09PSExKXt0PSExO2JyZWFrfUFycmF5LmlzQXJyYXkocykmJih0PXQ9PT0hMD9zOlhlKHQscykpfWlmKHQhPT0hMCl7bGV0IGkscztpZih0PT09ITEpcz1sLmNoYW5nZXMuaW52ZXJ0ZWREZXNjLGk9eC5lbXB0eShlLmRvYy5sZW5ndGgpO2Vsc2V7bGV0IHI9bC5jaGFuZ2VzLmZpbHRlcih0KTtpPXIuY2hhbmdlcyxzPXIuZmlsdGVyZWQubWFwRGVzYyhyLmNoYW5nZXMpLmludmVydGVkRGVzY31sPVMuY3JlYXRlKGUsaSxsLnNlbGVjdGlvbiYmbC5zZWxlY3Rpb24ubWFwKHMpLHkubWFwRWZmZWN0cyhsLmVmZmVjdHMscyksbC5hbm5vdGF0aW9ucyxsLnNjcm9sbEludG9WaWV3KX1sZXQgbj1lLmZhY2V0KCRlKTtmb3IobGV0IGk9bi5sZW5ndGgtMTtpPj0wO2ktLSl7bGV0IHM9bltpXShsKTtzIGluc3RhbmNlb2YgUz9sPXM6QXJyYXkuaXNBcnJheShzKSYmcy5sZW5ndGg9PTEmJnNbMF1pbnN0YW5jZW9mIFM/bD1zWzBdOmw9R2UoZSxXKHMpLCExKX1yZXR1cm4gbH1mdW5jdGlvbiBfZShsKXtsZXQgZT1sLnN0YXJ0U3RhdGUsdD1lLmZhY2V0KHplKSxuPWw7Zm9yKGxldCBpPXQubGVuZ3RoLTE7aT49MDtpLS0pe2xldCBzPXRbaV0obCk7cyYmT2JqZWN0LmtleXMocykubGVuZ3RoJiYobj1VZShuLHdlKGUscyxsLmNoYW5nZXMubmV3TGVuZ3RoKSwhMCkpfXJldHVybiBuPT1sP2w6Uy5jcmVhdGUoZSxsLmNoYW5nZXMsbC5zZWxlY3Rpb24sbi5lZmZlY3RzLG4uYW5ub3RhdGlvbnMsbi5zY3JvbGxJbnRvVmlldyl9dmFyIGV0PVtdO2Z1bmN0aW9uIFcobCl7cmV0dXJuIGw9PW51bGw/ZXQ6QXJyYXkuaXNBcnJheShsKT9sOltsXX12YXIgRj1mdW5jdGlvbihsKXtyZXR1cm4gbFtsLldvcmQ9MF09XCJXb3JkXCIsbFtsLlNwYWNlPTFdPVwiU3BhY2VcIixsW2wuT3RoZXI9Ml09XCJPdGhlclwiLGx9KEZ8fChGPXt9KSksdHQ9L1tcXHUwMGRmXFx1MDU4N1xcdTA1OTAtXFx1MDVmNFxcdTA2MDAtXFx1MDZmZlxcdTMwNDAtXFx1MzA5ZlxcdTMwYTAtXFx1MzBmZlxcdTM0MDAtXFx1NGRiNVxcdTRlMDAtXFx1OWZjY1xcdWFjMDAtXFx1ZDdhZl0vLHZlO3RyeXt2ZT1uZXcgUmVnRXhwKFwiW1xcXFxwe0FscGhhYmV0aWN9XFxcXHB7TnVtYmVyfV9dXCIsXCJ1XCIpfWNhdGNoe31mdW5jdGlvbiBudChsKXtpZih2ZSlyZXR1cm4gdmUudGVzdChsKTtmb3IobGV0IGU9MDtlPGwubGVuZ3RoO2UrKyl7bGV0IHQ9bFtlXTtpZigvXFx3Ly50ZXN0KHQpfHx0PlwiXFx4ODBcIiYmKHQudG9VcHBlckNhc2UoKSE9dC50b0xvd2VyQ2FzZSgpfHx0dC50ZXN0KHQpKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpdChsKXtyZXR1cm4gZT0+e2lmKCEvXFxTLy50ZXN0KGUpKXJldHVybiBGLlNwYWNlO2lmKG50KGUpKXJldHVybiBGLldvcmQ7Zm9yKGxldCB0PTA7dDxsLmxlbmd0aDt0KyspaWYoZS5pbmRleE9mKGxbdF0pPi0xKXJldHVybiBGLldvcmQ7cmV0dXJuIEYuT3RoZXJ9fXZhciB3PWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuLGkscyxyKXt0aGlzLmNvbmZpZz1lLHRoaXMuZG9jPXQsdGhpcy5zZWxlY3Rpb249bix0aGlzLnZhbHVlcz1pLHRoaXMuc3RhdHVzPWUuc3RhdHVzVGVtcGxhdGUuc2xpY2UoKSx0aGlzLmNvbXB1dGVTbG90PXMsciYmKHIuX3N0YXRlPXRoaXMpO2ZvcihsZXQgaD0wO2g8dGhpcy5jb25maWcuZHluYW1pY1Nsb3RzLmxlbmd0aDtoKyspSyh0aGlzLGg8PDEpO3RoaXMuY29tcHV0ZVNsb3Q9bnVsbH1maWVsZChlLHQ9ITApe2xldCBuPXRoaXMuY29uZmlnLmFkZHJlc3NbZS5pZF07aWYobj09bnVsbCl7aWYodCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkZpZWxkIGlzIG5vdCBwcmVzZW50IGluIHRoaXMgc3RhdGVcIik7cmV0dXJufXJldHVybiBLKHRoaXMsbikscmUodGhpcyxuKX11cGRhdGUoLi4uZSl7cmV0dXJuIEdlKHRoaXMsZSwhMCl9YXBwbHlUcmFuc2FjdGlvbihlKXtsZXQgdD10aGlzLmNvbmZpZyx7YmFzZTpuLGNvbXBhcnRtZW50czppfT10O2ZvcihsZXQgciBvZiBlLmVmZmVjdHMpci5pcyhVLnJlY29uZmlndXJlKT8odCYmKGk9bmV3IE1hcCx0LmNvbXBhcnRtZW50cy5mb3JFYWNoKChoLG8pPT5pLnNldChvLGgpKSx0PW51bGwpLGkuc2V0KHIudmFsdWUuY29tcGFydG1lbnQsci52YWx1ZS5leHRlbnNpb24pKTpyLmlzKHkucmVjb25maWd1cmUpPyh0PW51bGwsbj1yLnZhbHVlKTpyLmlzKHkuYXBwZW5kQ29uZmlnKSYmKHQ9bnVsbCxuPVcobikuY29uY2F0KHIudmFsdWUpKTtsZXQgczt0P3M9ZS5zdGFydFN0YXRlLnZhbHVlcy5zbGljZSgpOih0PUcucmVzb2x2ZShuLGksdGhpcykscz1uZXcgdyh0LHRoaXMuZG9jLHRoaXMuc2VsZWN0aW9uLHQuZHluYW1pY1Nsb3RzLm1hcCgoKT0+bnVsbCksKGgsbyk9Pm8ucmVjb25maWd1cmUoaCx0aGlzKSxudWxsKS52YWx1ZXMpLG5ldyB3KHQsZS5uZXdEb2MsZS5uZXdTZWxlY3Rpb24scywocixoKT0+aC51cGRhdGUocixlKSxlKX1yZXBsYWNlU2VsZWN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09XCJzdHJpbmdcIiYmKGU9dGhpcy50b1RleHQoZSkpLHRoaXMuY2hhbmdlQnlSYW5nZSh0PT4oe2NoYW5nZXM6e2Zyb206dC5mcm9tLHRvOnQudG8saW5zZXJ0OmV9LHJhbmdlOmcuY3Vyc29yKHQuZnJvbStlLmxlbmd0aCl9KSl9Y2hhbmdlQnlSYW5nZShlKXtsZXQgdD10aGlzLnNlbGVjdGlvbixuPWUodC5yYW5nZXNbMF0pLGk9dGhpcy5jaGFuZ2VzKG4uY2hhbmdlcykscz1bbi5yYW5nZV0scj1XKG4uZWZmZWN0cyk7Zm9yKGxldCBoPTE7aDx0LnJhbmdlcy5sZW5ndGg7aCsrKXtsZXQgbz1lKHQucmFuZ2VzW2hdKSxhPXRoaXMuY2hhbmdlcyhvLmNoYW5nZXMpLGY9YS5tYXAoaSk7Zm9yKGxldCBkPTA7ZDxoO2QrKylzW2RdPXNbZF0ubWFwKGYpO2xldCB1PWkubWFwRGVzYyhhLCEwKTtzLnB1c2goby5yYW5nZS5tYXAodSkpLGk9aS5jb21wb3NlKGYpLHI9eS5tYXBFZmZlY3RzKHIsZikuY29uY2F0KHkubWFwRWZmZWN0cyhXKG8uZWZmZWN0cyksdSkpfXJldHVybntjaGFuZ2VzOmksc2VsZWN0aW9uOmcuY3JlYXRlKHMsdC5tYWluSW5kZXgpLGVmZmVjdHM6cn19Y2hhbmdlcyhlPVtdKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHg/ZTp4Lm9mKGUsdGhpcy5kb2MubGVuZ3RoLHRoaXMuZmFjZXQody5saW5lU2VwYXJhdG9yKSl9dG9UZXh0KGUpe3JldHVybiB2Lm9mKGUuc3BsaXQodGhpcy5mYWNldCh3LmxpbmVTZXBhcmF0b3IpfHx1ZSkpfXNsaWNlRG9jKGU9MCx0PXRoaXMuZG9jLmxlbmd0aCl7cmV0dXJuIHRoaXMuZG9jLnNsaWNlU3RyaW5nKGUsdCx0aGlzLmxpbmVCcmVhayl9ZmFjZXQoZSl7bGV0IHQ9dGhpcy5jb25maWcuYWRkcmVzc1tlLmlkXTtyZXR1cm4gdD09bnVsbD9lLmRlZmF1bHQ6KEsodGhpcyx0KSxyZSh0aGlzLHQpKX10b0pTT04oZSl7bGV0IHQ9e2RvYzp0aGlzLnNsaWNlRG9jKCksc2VsZWN0aW9uOnRoaXMuc2VsZWN0aW9uLnRvSlNPTigpfTtpZihlKWZvcihsZXQgbiBpbiBlKXtsZXQgaT1lW25dO2kgaW5zdGFuY2VvZiBKJiZ0aGlzLmNvbmZpZy5hZGRyZXNzW2kuaWRdIT1udWxsJiYodFtuXT1pLnNwZWMudG9KU09OKHRoaXMuZmllbGQoZVtuXSksdGhpcykpfXJldHVybiB0fXN0YXRpYyBmcm9tSlNPTihlLHQ9e30sbil7aWYoIWV8fHR5cGVvZiBlLmRvYyE9XCJzdHJpbmdcIil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgSlNPTiByZXByZXNlbnRhdGlvbiBmb3IgRWRpdG9yU3RhdGVcIik7bGV0IGk9W107aWYobil7Zm9yKGxldCBzIGluIG4paWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscykpe2xldCByPW5bc10saD1lW3NdO2kucHVzaChyLmluaXQobz0+ci5zcGVjLmZyb21KU09OKGgsbykpKX19cmV0dXJuIHcuY3JlYXRlKHtkb2M6ZS5kb2Msc2VsZWN0aW9uOmcuZnJvbUpTT04oZS5zZWxlY3Rpb24pLGV4dGVuc2lvbnM6dC5leHRlbnNpb25zP2kuY29uY2F0KFt0LmV4dGVuc2lvbnNdKTppfSl9c3RhdGljIGNyZWF0ZShlPXt9KXtsZXQgdD1HLnJlc29sdmUoZS5leHRlbnNpb25zfHxbXSxuZXcgTWFwKSxuPWUuZG9jIGluc3RhbmNlb2Ygdj9lLmRvYzp2Lm9mKChlLmRvY3x8XCJcIikuc3BsaXQodC5zdGF0aWNGYWNldCh3LmxpbmVTZXBhcmF0b3IpfHx1ZSkpLGk9ZS5zZWxlY3Rpb24/ZS5zZWxlY3Rpb24gaW5zdGFuY2VvZiBnP2Uuc2VsZWN0aW9uOmcuc2luZ2xlKGUuc2VsZWN0aW9uLmFuY2hvcixlLnNlbGVjdGlvbi5oZWFkKTpnLnNpbmdsZSgwKTtyZXR1cm4gVmUoaSxuLmxlbmd0aCksdC5zdGF0aWNGYWNldChEZSl8fChpPWkuYXNTaW5nbGUoKSksbmV3IHcodCxuLGksdC5keW5hbWljU2xvdHMubWFwKCgpPT5udWxsKSwocyxyKT0+ci5jcmVhdGUocyksbnVsbCl9Z2V0IHRhYlNpemUoKXtyZXR1cm4gdGhpcy5mYWNldCh3LnRhYlNpemUpfWdldCBsaW5lQnJlYWsoKXtyZXR1cm4gdGhpcy5mYWNldCh3LmxpbmVTZXBhcmF0b3IpfHxgXG5gfWdldCByZWFkT25seSgpe3JldHVybiB0aGlzLmZhY2V0KFdlKX1waHJhc2UoZSwuLi50KXtmb3IobGV0IG4gb2YgdGhpcy5mYWNldCh3LnBocmFzZXMpKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGUpKXtlPW5bZV07YnJlYWt9cmV0dXJuIHQubGVuZ3RoJiYoZT1lLnJlcGxhY2UoL1xcJChcXCR8XFxkKikvZywobixpKT0+e2lmKGk9PVwiJFwiKXJldHVyblwiJFwiO2xldCBzPSsoaXx8MSk7cmV0dXJuIXN8fHM+dC5sZW5ndGg/bjp0W3MtMV19KSksZX1sYW5ndWFnZURhdGFBdChlLHQsbj0tMSl7bGV0IGk9W107Zm9yKGxldCBzIG9mIHRoaXMuZmFjZXQoTmUpKWZvcihsZXQgciBvZiBzKHRoaXMsdCxuKSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixlKSYmaS5wdXNoKHJbZV0pO3JldHVybiBpfWNoYXJDYXRlZ29yaXplcihlKXtyZXR1cm4gaXQodGhpcy5sYW5ndWFnZURhdGFBdChcIndvcmRDaGFyc1wiLGUpLmpvaW4oXCJcIikpfXdvcmRBdChlKXtsZXR7dGV4dDp0LGZyb206bixsZW5ndGg6aX09dGhpcy5kb2MubGluZUF0KGUpLHM9dGhpcy5jaGFyQ2F0ZWdvcml6ZXIoZSkscj1lLW4saD1lLW47Zm9yKDtyPjA7KXtsZXQgbz1pZSh0LHIsITEpO2lmKHModC5zbGljZShvLHIpKSE9Ri5Xb3JkKWJyZWFrO3I9b31mb3IoO2g8aTspe2xldCBvPWllKHQsaCk7aWYocyh0LnNsaWNlKGgsbykpIT1GLldvcmQpYnJlYWs7aD1vfXJldHVybiByPT1oP251bGw6Zy5yYW5nZShyK24saCtuKX19O3cuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbnM9RGU7dy50YWJTaXplPUEuZGVmaW5lKHtjb21iaW5lOmw9PmwubGVuZ3RoP2xbMF06NH0pO3cubGluZVNlcGFyYXRvcj1xZTt3LnJlYWRPbmx5PVdlO3cucGhyYXNlcz1BLmRlZmluZSh7Y29tcGFyZShsLGUpe2xldCB0PU9iamVjdC5rZXlzKGwpLG49T2JqZWN0LmtleXMoZSk7cmV0dXJuIHQubGVuZ3RoPT1uLmxlbmd0aCYmdC5ldmVyeShpPT5sW2ldPT1lW2ldKX19KTt3Lmxhbmd1YWdlRGF0YT1OZTt3LmNoYW5nZUZpbHRlcj1MZTt3LnRyYW5zYWN0aW9uRmlsdGVyPSRlO3cudHJhbnNhY3Rpb25FeHRlbmRlcj16ZTtVLnJlY29uZmlndXJlPXkuZGVmaW5lKCk7ZnVuY3Rpb24gaHQobCxlLHQ9e30pe2xldCBuPXt9O2ZvcihsZXQgaSBvZiBsKWZvcihsZXQgcyBvZiBPYmplY3Qua2V5cyhpKSl7bGV0IHI9aVtzXSxoPW5bc107aWYoaD09PXZvaWQgMCluW3NdPXI7ZWxzZSBpZighKGg9PT1yfHxyPT09dm9pZCAwKSlpZihPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0LHMpKW5bc109dFtzXShoLHIpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlnIG1lcmdlIGNvbmZsaWN0IGZvciBmaWVsZCBcIitzKX1mb3IobGV0IGkgaW4gZSluW2ldPT09dm9pZCAwJiYobltpXT1lW2ldKTtyZXR1cm4gbn12YXIgaj1jbGFzc3tlcShlKXtyZXR1cm4gdGhpcz09ZX1yYW5nZShlLHQ9ZSl7cmV0dXJuIHEuY3JlYXRlKGUsdCx0aGlzKX19O2oucHJvdG90eXBlLnN0YXJ0U2lkZT1qLnByb3RvdHlwZS5lbmRTaWRlPTA7ai5wcm90b3R5cGUucG9pbnQ9ITE7ai5wcm90b3R5cGUubWFwTW9kZT1NLlRyYWNrRGVsO3ZhciBxPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLmZyb209ZSx0aGlzLnRvPXQsdGhpcy52YWx1ZT1ufXN0YXRpYyBjcmVhdGUoZSx0LG4pe3JldHVybiBuZXcgcShlLHQsbil9fTtmdW5jdGlvbiBrZShsLGUpe3JldHVybiBsLmZyb20tZS5mcm9tfHxsLnZhbHVlLnN0YXJ0U2lkZS1lLnZhbHVlLnN0YXJ0U2lkZX12YXIgWD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbixpKXt0aGlzLmZyb209ZSx0aGlzLnRvPXQsdGhpcy52YWx1ZT1uLHRoaXMubWF4UG9pbnQ9aX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMudG9bdGhpcy50by5sZW5ndGgtMV19ZmluZEluZGV4KGUsdCxuLGk9MCl7bGV0IHM9bj90aGlzLnRvOnRoaXMuZnJvbTtmb3IobGV0IHI9aSxoPXMubGVuZ3RoOzspe2lmKHI9PWgpcmV0dXJuIHI7bGV0IG89citoPj4xLGE9c1tvXS1lfHwobj90aGlzLnZhbHVlW29dLmVuZFNpZGU6dGhpcy52YWx1ZVtvXS5zdGFydFNpZGUpLXQ7aWYobz09cilyZXR1cm4gYT49MD9yOmg7YT49MD9oPW86cj1vKzF9fWJldHdlZW4oZSx0LG4saSl7Zm9yKGxldCBzPXRoaXMuZmluZEluZGV4KHQsLTFlOSwhMCkscj10aGlzLmZpbmRJbmRleChuLDFlOSwhMSxzKTtzPHI7cysrKWlmKGkodGhpcy5mcm9tW3NdK2UsdGhpcy50b1tzXStlLHRoaXMudmFsdWVbc10pPT09ITEpcmV0dXJuITF9bWFwKGUsdCl7bGV0IG49W10saT1bXSxzPVtdLHI9LTEsaD0tMTtmb3IobGV0IG89MDtvPHRoaXMudmFsdWUubGVuZ3RoO28rKyl7bGV0IGE9dGhpcy52YWx1ZVtvXSxmPXRoaXMuZnJvbVtvXStlLHU9dGhpcy50b1tvXStlLGQsYztpZihmPT11KXtsZXQgcD10Lm1hcFBvcyhmLGEuc3RhcnRTaWRlLGEubWFwTW9kZSk7aWYocD09bnVsbHx8KGQ9Yz1wLGEuc3RhcnRTaWRlIT1hLmVuZFNpZGUmJihjPXQubWFwUG9zKGYsYS5lbmRTaWRlKSxjPGQpKSljb250aW51ZX1lbHNlIGlmKGQ9dC5tYXBQb3MoZixhLnN0YXJ0U2lkZSksYz10Lm1hcFBvcyh1LGEuZW5kU2lkZSksZD5jfHxkPT1jJiZhLnN0YXJ0U2lkZT4wJiZhLmVuZFNpZGU8PTApY29udGludWU7KGMtZHx8YS5lbmRTaWRlLWEuc3RhcnRTaWRlKTwwfHwocjwwJiYocj1kKSxhLnBvaW50JiYoaD1NYXRoLm1heChoLGMtZCkpLG4ucHVzaChhKSxpLnB1c2goZC1yKSxzLnB1c2goYy1yKSl9cmV0dXJue21hcHBlZDpuLmxlbmd0aD9uZXcgWChpLHMsbixoKTpudWxsLHBvczpyfX19LFA9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4saSl7dGhpcy5jaHVua1Bvcz1lLHRoaXMuY2h1bms9dCx0aGlzLm5leHRMYXllcj1uLHRoaXMubWF4UG9pbnQ9aX1zdGF0aWMgY3JlYXRlKGUsdCxuLGkpe3JldHVybiBuZXcgUChlLHQsbixpKX1nZXQgbGVuZ3RoKCl7bGV0IGU9dGhpcy5jaHVuay5sZW5ndGgtMTtyZXR1cm4gZTwwPzA6TWF0aC5tYXgodGhpcy5jaHVua0VuZChlKSx0aGlzLm5leHRMYXllci5sZW5ndGgpfWdldCBzaXplKCl7aWYodGhpcy5pc0VtcHR5KXJldHVybiAwO2xldCBlPXRoaXMubmV4dExheWVyLnNpemU7Zm9yKGxldCB0IG9mIHRoaXMuY2h1bmspZSs9dC52YWx1ZS5sZW5ndGg7cmV0dXJuIGV9Y2h1bmtFbmQoZSl7cmV0dXJuIHRoaXMuY2h1bmtQb3NbZV0rdGhpcy5jaHVua1tlXS5sZW5ndGh9dXBkYXRlKGUpe2xldHthZGQ6dD1bXSxzb3J0Om49ITEsZmlsdGVyRnJvbTppPTAsZmlsdGVyVG86cz10aGlzLmxlbmd0aH09ZSxyPWUuZmlsdGVyO2lmKHQubGVuZ3RoPT0wJiYhcilyZXR1cm4gdGhpcztpZihuJiYodD10LnNsaWNlKCkuc29ydChrZSkpLHRoaXMuaXNFbXB0eSlyZXR1cm4gdC5sZW5ndGg/UC5vZih0KTp0aGlzO2xldCBoPW5ldyBsZSh0aGlzLG51bGwsLTEpLmdvdG8oMCksbz0wLGE9W10sZj1uZXcgWjtmb3IoO2gudmFsdWV8fG88dC5sZW5ndGg7KWlmKG88dC5sZW5ndGgmJihoLmZyb20tdFtvXS5mcm9tfHxoLnN0YXJ0U2lkZS10W29dLnZhbHVlLnN0YXJ0U2lkZSk+PTApe2xldCB1PXRbbysrXTtmLmFkZElubmVyKHUuZnJvbSx1LnRvLHUudmFsdWUpfHxhLnB1c2godSl9ZWxzZSBoLnJhbmdlSW5kZXg9PTEmJmguY2h1bmtJbmRleDx0aGlzLmNodW5rLmxlbmd0aCYmKG89PXQubGVuZ3RofHx0aGlzLmNodW5rRW5kKGguY2h1bmtJbmRleCk8dFtvXS5mcm9tKSYmKCFyfHxpPnRoaXMuY2h1bmtFbmQoaC5jaHVua0luZGV4KXx8czx0aGlzLmNodW5rUG9zW2guY2h1bmtJbmRleF0pJiZmLmFkZENodW5rKHRoaXMuY2h1bmtQb3NbaC5jaHVua0luZGV4XSx0aGlzLmNodW5rW2guY2h1bmtJbmRleF0pP2gubmV4dENodW5rKCk6KCghcnx8aT5oLnRvfHxzPGguZnJvbXx8cihoLmZyb20saC50byxoLnZhbHVlKSkmJihmLmFkZElubmVyKGguZnJvbSxoLnRvLGgudmFsdWUpfHxhLnB1c2gocS5jcmVhdGUoaC5mcm9tLGgudG8saC52YWx1ZSkpKSxoLm5leHQoKSk7cmV0dXJuIGYuZmluaXNoSW5uZXIodGhpcy5uZXh0TGF5ZXIuaXNFbXB0eSYmIWEubGVuZ3RoP1AuZW1wdHk6dGhpcy5uZXh0TGF5ZXIudXBkYXRlKHthZGQ6YSxmaWx0ZXI6cixmaWx0ZXJGcm9tOmksZmlsdGVyVG86c30pKX1tYXAoZSl7aWYoZS5lbXB0eXx8dGhpcy5pc0VtcHR5KXJldHVybiB0aGlzO2xldCB0PVtdLG49W10saT0tMTtmb3IobGV0IHI9MDtyPHRoaXMuY2h1bmsubGVuZ3RoO3IrKyl7bGV0IGg9dGhpcy5jaHVua1Bvc1tyXSxvPXRoaXMuY2h1bmtbcl0sYT1lLnRvdWNoZXNSYW5nZShoLGgrby5sZW5ndGgpO2lmKGE9PT0hMSlpPU1hdGgubWF4KGksby5tYXhQb2ludCksdC5wdXNoKG8pLG4ucHVzaChlLm1hcFBvcyhoKSk7ZWxzZSBpZihhPT09ITApe2xldHttYXBwZWQ6Zixwb3M6dX09by5tYXAoaCxlKTtmJiYoaT1NYXRoLm1heChpLGYubWF4UG9pbnQpLHQucHVzaChmKSxuLnB1c2godSkpfX1sZXQgcz10aGlzLm5leHRMYXllci5tYXAoZSk7cmV0dXJuIHQubGVuZ3RoPT0wP3M6bmV3IFAobix0LHN8fFAuZW1wdHksaSl9YmV0d2VlbihlLHQsbil7aWYoIXRoaXMuaXNFbXB0eSl7Zm9yKGxldCBpPTA7aTx0aGlzLmNodW5rLmxlbmd0aDtpKyspe2xldCBzPXRoaXMuY2h1bmtQb3NbaV0scj10aGlzLmNodW5rW2ldO2lmKHQ+PXMmJmU8PXMrci5sZW5ndGgmJnIuYmV0d2VlbihzLGUtcyx0LXMsbik9PT0hMSlyZXR1cm59dGhpcy5uZXh0TGF5ZXIuYmV0d2VlbihlLHQsbil9fWl0ZXIoZT0wKXtyZXR1cm4gTC5mcm9tKFt0aGlzXSkuZ290byhlKX1nZXQgaXNFbXB0eSgpe3JldHVybiB0aGlzLm5leHRMYXllcj09dGhpc31zdGF0aWMgaXRlcihlLHQ9MCl7cmV0dXJuIEwuZnJvbShlKS5nb3RvKHQpfXN0YXRpYyBjb21wYXJlKGUsdCxuLGkscz0tMSl7bGV0IHI9ZS5maWx0ZXIodT0+dS5tYXhQb2ludD4wfHwhdS5pc0VtcHR5JiZ1Lm1heFBvaW50Pj1zKSxoPXQuZmlsdGVyKHU9PnUubWF4UG9pbnQ+MHx8IXUuaXNFbXB0eSYmdS5tYXhQb2ludD49cyksbz1CZShyLGgsbiksYT1uZXcgQyhyLG8scyksZj1uZXcgQyhoLG8scyk7bi5pdGVyR2FwcygodSxkLGMpPT5NZShhLHUsZixkLGMsaSkpLG4uZW1wdHkmJm4ubGVuZ3RoPT0wJiZNZShhLDAsZiwwLDAsaSl9c3RhdGljIGVxKGUsdCxuPTAsaSl7aT09bnVsbCYmKGk9MWU5KTtsZXQgcz1lLmZpbHRlcihmPT4hZi5pc0VtcHR5JiZ0LmluZGV4T2YoZik8MCkscj10LmZpbHRlcihmPT4hZi5pc0VtcHR5JiZlLmluZGV4T2YoZik8MCk7aWYocy5sZW5ndGghPXIubGVuZ3RoKXJldHVybiExO2lmKCFzLmxlbmd0aClyZXR1cm4hMDtsZXQgaD1CZShzLHIpLG89bmV3IEMocyxoLDApLmdvdG8obiksYT1uZXcgQyhyLGgsMCkuZ290byhuKTtmb3IoOzspe2lmKG8udG8hPWEudG98fCF4ZShvLmFjdGl2ZSxhLmFjdGl2ZSl8fG8ucG9pbnQmJighYS5wb2ludHx8IW8ucG9pbnQuZXEoYS5wb2ludCkpKXJldHVybiExO2lmKG8udG8+aSlyZXR1cm4hMDtvLm5leHQoKSxhLm5leHQoKX19c3RhdGljIHNwYW5zKGUsdCxuLGkscz0tMSl7bGV0IHI9bmV3IEMoZSxudWxsLHMpLmdvdG8odCksaD10LG89ci5vcGVuU3RhcnQ7Zm9yKDs7KXtsZXQgYT1NYXRoLm1pbihyLnRvLG4pO2lmKHIucG9pbnQ/KGkucG9pbnQoaCxhLHIucG9pbnQsci5hY3RpdmVGb3JQb2ludChyLnRvKSxvLHIucG9pbnRSYW5rKSxvPXIub3BlbkVuZChhKSsoci50bz5hPzE6MCkpOmE+aCYmKGkuc3BhbihoLGEsci5hY3RpdmUsbyksbz1yLm9wZW5FbmQoYSkpLHIudG8+bilicmVhaztoPXIudG8sci5uZXh0KCl9cmV0dXJuIG99c3RhdGljIG9mKGUsdD0hMSl7bGV0IG49bmV3IFo7Zm9yKGxldCBpIG9mIGUgaW5zdGFuY2VvZiBxP1tlXTp0P3N0KGUpOmUpbi5hZGQoaS5mcm9tLGkudG8saS52YWx1ZSk7cmV0dXJuIG4uZmluaXNoKCl9fTtQLmVtcHR5PW5ldyBQKFtdLFtdLG51bGwsLTEpO2Z1bmN0aW9uIHN0KGwpe2lmKGwubGVuZ3RoPjEpZm9yKGxldCBlPWxbMF0sdD0xO3Q8bC5sZW5ndGg7dCsrKXtsZXQgbj1sW3RdO2lmKGtlKGUsbik+MClyZXR1cm4gbC5zbGljZSgpLnNvcnQoa2UpO2U9bn1yZXR1cm4gbH1QLmVtcHR5Lm5leHRMYXllcj1QLmVtcHR5O3ZhciBaPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jaHVua3M9W10sdGhpcy5jaHVua1Bvcz1bXSx0aGlzLmNodW5rU3RhcnQ9LTEsdGhpcy5sYXN0PW51bGwsdGhpcy5sYXN0RnJvbT0tMWU5LHRoaXMubGFzdFRvPS0xZTksdGhpcy5mcm9tPVtdLHRoaXMudG89W10sdGhpcy52YWx1ZT1bXSx0aGlzLm1heFBvaW50PS0xLHRoaXMuc2V0TWF4UG9pbnQ9LTEsdGhpcy5uZXh0TGF5ZXI9bnVsbH1maW5pc2hDaHVuayhlKXt0aGlzLmNodW5rcy5wdXNoKG5ldyBYKHRoaXMuZnJvbSx0aGlzLnRvLHRoaXMudmFsdWUsdGhpcy5tYXhQb2ludCkpLHRoaXMuY2h1bmtQb3MucHVzaCh0aGlzLmNodW5rU3RhcnQpLHRoaXMuY2h1bmtTdGFydD0tMSx0aGlzLnNldE1heFBvaW50PU1hdGgubWF4KHRoaXMuc2V0TWF4UG9pbnQsdGhpcy5tYXhQb2ludCksdGhpcy5tYXhQb2ludD0tMSxlJiYodGhpcy5mcm9tPVtdLHRoaXMudG89W10sdGhpcy52YWx1ZT1bXSl9YWRkKGUsdCxuKXt0aGlzLmFkZElubmVyKGUsdCxuKXx8KHRoaXMubmV4dExheWVyfHwodGhpcy5uZXh0TGF5ZXI9bmV3IFopKS5hZGQoZSx0LG4pfWFkZElubmVyKGUsdCxuKXtsZXQgaT1lLXRoaXMubGFzdFRvfHxuLnN0YXJ0U2lkZS10aGlzLmxhc3QuZW5kU2lkZTtpZihpPD0wJiYoZS10aGlzLmxhc3RGcm9tfHxuLnN0YXJ0U2lkZS10aGlzLmxhc3Quc3RhcnRTaWRlKTwwKXRocm93IG5ldyBFcnJvcihcIlJhbmdlcyBtdXN0IGJlIGFkZGVkIHNvcnRlZCBieSBgZnJvbWAgcG9zaXRpb24gYW5kIGBzdGFydFNpZGVgXCIpO3JldHVybiBpPDA/ITE6KHRoaXMuZnJvbS5sZW5ndGg9PTI1MCYmdGhpcy5maW5pc2hDaHVuayghMCksdGhpcy5jaHVua1N0YXJ0PDAmJih0aGlzLmNodW5rU3RhcnQ9ZSksdGhpcy5mcm9tLnB1c2goZS10aGlzLmNodW5rU3RhcnQpLHRoaXMudG8ucHVzaCh0LXRoaXMuY2h1bmtTdGFydCksdGhpcy5sYXN0PW4sdGhpcy5sYXN0RnJvbT1lLHRoaXMubGFzdFRvPXQsdGhpcy52YWx1ZS5wdXNoKG4pLG4ucG9pbnQmJih0aGlzLm1heFBvaW50PU1hdGgubWF4KHRoaXMubWF4UG9pbnQsdC1lKSksITApfWFkZENodW5rKGUsdCl7aWYoKGUtdGhpcy5sYXN0VG98fHQudmFsdWVbMF0uc3RhcnRTaWRlLXRoaXMubGFzdC5lbmRTaWRlKTwwKXJldHVybiExO3RoaXMuZnJvbS5sZW5ndGgmJnRoaXMuZmluaXNoQ2h1bmsoITApLHRoaXMuc2V0TWF4UG9pbnQ9TWF0aC5tYXgodGhpcy5zZXRNYXhQb2ludCx0Lm1heFBvaW50KSx0aGlzLmNodW5rcy5wdXNoKHQpLHRoaXMuY2h1bmtQb3MucHVzaChlKTtsZXQgbj10LnZhbHVlLmxlbmd0aC0xO3JldHVybiB0aGlzLmxhc3Q9dC52YWx1ZVtuXSx0aGlzLmxhc3RGcm9tPXQuZnJvbVtuXStlLHRoaXMubGFzdFRvPXQudG9bbl0rZSwhMH1maW5pc2goKXtyZXR1cm4gdGhpcy5maW5pc2hJbm5lcihQLmVtcHR5KX1maW5pc2hJbm5lcihlKXtpZih0aGlzLmZyb20ubGVuZ3RoJiZ0aGlzLmZpbmlzaENodW5rKCExKSx0aGlzLmNodW5rcy5sZW5ndGg9PTApcmV0dXJuIGU7bGV0IHQ9UC5jcmVhdGUodGhpcy5jaHVua1Bvcyx0aGlzLmNodW5rcyx0aGlzLm5leHRMYXllcj90aGlzLm5leHRMYXllci5maW5pc2hJbm5lcihlKTplLHRoaXMuc2V0TWF4UG9pbnQpO3JldHVybiB0aGlzLmZyb209bnVsbCx0fX07ZnVuY3Rpb24gQmUobCxlLHQpe2xldCBuPW5ldyBNYXA7Zm9yKGxldCBzIG9mIGwpZm9yKGxldCByPTA7cjxzLmNodW5rLmxlbmd0aDtyKyspcy5jaHVua1tyXS5tYXhQb2ludDw9MCYmbi5zZXQocy5jaHVua1tyXSxzLmNodW5rUG9zW3JdKTtsZXQgaT1uZXcgU2V0O2ZvcihsZXQgcyBvZiBlKWZvcihsZXQgcj0wO3I8cy5jaHVuay5sZW5ndGg7cisrKXtsZXQgaD1uLmdldChzLmNodW5rW3JdKTtoIT1udWxsJiYodD90Lm1hcFBvcyhoKTpoKT09cy5jaHVua1Bvc1tyXSYmIXQ/LnRvdWNoZXNSYW5nZShoLGgrcy5jaHVua1tyXS5sZW5ndGgpJiZpLmFkZChzLmNodW5rW3JdKX1yZXR1cm4gaX12YXIgbGU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4saT0wKXt0aGlzLmxheWVyPWUsdGhpcy5za2lwPXQsdGhpcy5taW5Qb2ludD1uLHRoaXMucmFuaz1pfWdldCBzdGFydFNpZGUoKXtyZXR1cm4gdGhpcy52YWx1ZT90aGlzLnZhbHVlLnN0YXJ0U2lkZTowfWdldCBlbmRTaWRlKCl7cmV0dXJuIHRoaXMudmFsdWU/dGhpcy52YWx1ZS5lbmRTaWRlOjB9Z290byhlLHQ9LTFlOSl7cmV0dXJuIHRoaXMuY2h1bmtJbmRleD10aGlzLnJhbmdlSW5kZXg9MCx0aGlzLmdvdG9Jbm5lcihlLHQsITEpLHRoaXN9Z290b0lubmVyKGUsdCxuKXtmb3IoO3RoaXMuY2h1bmtJbmRleDx0aGlzLmxheWVyLmNodW5rLmxlbmd0aDspe2xldCBpPXRoaXMubGF5ZXIuY2h1bmtbdGhpcy5jaHVua0luZGV4XTtpZighKHRoaXMuc2tpcCYmdGhpcy5za2lwLmhhcyhpKXx8dGhpcy5sYXllci5jaHVua0VuZCh0aGlzLmNodW5rSW5kZXgpPGV8fGkubWF4UG9pbnQ8dGhpcy5taW5Qb2ludCkpYnJlYWs7dGhpcy5jaHVua0luZGV4Kyssbj0hMX1pZih0aGlzLmNodW5rSW5kZXg8dGhpcy5sYXllci5jaHVuay5sZW5ndGgpe2xldCBpPXRoaXMubGF5ZXIuY2h1bmtbdGhpcy5jaHVua0luZGV4XS5maW5kSW5kZXgoZS10aGlzLmxheWVyLmNodW5rUG9zW3RoaXMuY2h1bmtJbmRleF0sdCwhMCk7KCFufHx0aGlzLnJhbmdlSW5kZXg8aSkmJnRoaXMuc2V0UmFuZ2VJbmRleChpKX10aGlzLm5leHQoKX1mb3J3YXJkKGUsdCl7KHRoaXMudG8tZXx8dGhpcy5lbmRTaWRlLXQpPDAmJnRoaXMuZ290b0lubmVyKGUsdCwhMCl9bmV4dCgpe2Zvcig7OylpZih0aGlzLmNodW5rSW5kZXg9PXRoaXMubGF5ZXIuY2h1bmsubGVuZ3RoKXt0aGlzLmZyb209dGhpcy50bz0xZTksdGhpcy52YWx1ZT1udWxsO2JyZWFrfWVsc2V7bGV0IGU9dGhpcy5sYXllci5jaHVua1Bvc1t0aGlzLmNodW5rSW5kZXhdLHQ9dGhpcy5sYXllci5jaHVua1t0aGlzLmNodW5rSW5kZXhdLG49ZSt0LmZyb21bdGhpcy5yYW5nZUluZGV4XTtpZih0aGlzLmZyb209bix0aGlzLnRvPWUrdC50b1t0aGlzLnJhbmdlSW5kZXhdLHRoaXMudmFsdWU9dC52YWx1ZVt0aGlzLnJhbmdlSW5kZXhdLHRoaXMuc2V0UmFuZ2VJbmRleCh0aGlzLnJhbmdlSW5kZXgrMSksdGhpcy5taW5Qb2ludDwwfHx0aGlzLnZhbHVlLnBvaW50JiZ0aGlzLnRvLXRoaXMuZnJvbT49dGhpcy5taW5Qb2ludClicmVha319c2V0UmFuZ2VJbmRleChlKXtpZihlPT10aGlzLmxheWVyLmNodW5rW3RoaXMuY2h1bmtJbmRleF0udmFsdWUubGVuZ3RoKXtpZih0aGlzLmNodW5rSW5kZXgrKyx0aGlzLnNraXApZm9yKDt0aGlzLmNodW5rSW5kZXg8dGhpcy5sYXllci5jaHVuay5sZW5ndGgmJnRoaXMuc2tpcC5oYXModGhpcy5sYXllci5jaHVua1t0aGlzLmNodW5rSW5kZXhdKTspdGhpcy5jaHVua0luZGV4Kys7dGhpcy5yYW5nZUluZGV4PTB9ZWxzZSB0aGlzLnJhbmdlSW5kZXg9ZX1uZXh0Q2h1bmsoKXt0aGlzLmNodW5rSW5kZXgrKyx0aGlzLnJhbmdlSW5kZXg9MCx0aGlzLm5leHQoKX1jb21wYXJlKGUpe3JldHVybiB0aGlzLmZyb20tZS5mcm9tfHx0aGlzLnN0YXJ0U2lkZS1lLnN0YXJ0U2lkZXx8dGhpcy5yYW5rLWUucmFua3x8dGhpcy50by1lLnRvfHx0aGlzLmVuZFNpZGUtZS5lbmRTaWRlfX0sTD1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmhlYXA9ZX1zdGF0aWMgZnJvbShlLHQ9bnVsbCxuPS0xKXtsZXQgaT1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKylmb3IobGV0IHI9ZVtzXTshci5pc0VtcHR5O3I9ci5uZXh0TGF5ZXIpci5tYXhQb2ludD49biYmaS5wdXNoKG5ldyBsZShyLHQsbixzKSk7cmV0dXJuIGkubGVuZ3RoPT0xP2lbMF06bmV3IEwoaSl9Z2V0IHN0YXJ0U2lkZSgpe3JldHVybiB0aGlzLnZhbHVlP3RoaXMudmFsdWUuc3RhcnRTaWRlOjB9Z290byhlLHQ9LTFlOSl7Zm9yKGxldCBuIG9mIHRoaXMuaGVhcCluLmdvdG8oZSx0KTtmb3IobGV0IG49dGhpcy5oZWFwLmxlbmd0aD4+MTtuPj0wO24tLSlhZSh0aGlzLmhlYXAsbik7cmV0dXJuIHRoaXMubmV4dCgpLHRoaXN9Zm9yd2FyZChlLHQpe2ZvcihsZXQgbiBvZiB0aGlzLmhlYXApbi5mb3J3YXJkKGUsdCk7Zm9yKGxldCBuPXRoaXMuaGVhcC5sZW5ndGg+PjE7bj49MDtuLS0pYWUodGhpcy5oZWFwLG4pOyh0aGlzLnRvLWV8fHRoaXMudmFsdWUuZW5kU2lkZS10KTwwJiZ0aGlzLm5leHQoKX1uZXh0KCl7aWYodGhpcy5oZWFwLmxlbmd0aD09MCl0aGlzLmZyb209dGhpcy50bz0xZTksdGhpcy52YWx1ZT1udWxsLHRoaXMucmFuaz0tMTtlbHNle2xldCBlPXRoaXMuaGVhcFswXTt0aGlzLmZyb209ZS5mcm9tLHRoaXMudG89ZS50byx0aGlzLnZhbHVlPWUudmFsdWUsdGhpcy5yYW5rPWUucmFuayxlLnZhbHVlJiZlLm5leHQoKSxhZSh0aGlzLmhlYXAsMCl9fX07ZnVuY3Rpb24gYWUobCxlKXtmb3IobGV0IHQ9bFtlXTs7KXtsZXQgbj0oZTw8MSkrMTtpZihuPj1sLmxlbmd0aClicmVhaztsZXQgaT1sW25dO2lmKG4rMTxsLmxlbmd0aCYmaS5jb21wYXJlKGxbbisxXSk+PTAmJihpPWxbbisxXSxuKyspLHQuY29tcGFyZShpKTwwKWJyZWFrO2xbbl09dCxsW2VdPWksZT1ufX12YXIgQz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5taW5Qb2ludD1uLHRoaXMuYWN0aXZlPVtdLHRoaXMuYWN0aXZlVG89W10sdGhpcy5hY3RpdmVSYW5rPVtdLHRoaXMubWluQWN0aXZlPS0xLHRoaXMucG9pbnQ9bnVsbCx0aGlzLnBvaW50RnJvbT0wLHRoaXMucG9pbnRSYW5rPTAsdGhpcy50bz0tMWU5LHRoaXMuZW5kU2lkZT0wLHRoaXMub3BlblN0YXJ0PS0xLHRoaXMuY3Vyc29yPUwuZnJvbShlLHQsbil9Z290byhlLHQ9LTFlOSl7cmV0dXJuIHRoaXMuY3Vyc29yLmdvdG8oZSx0KSx0aGlzLmFjdGl2ZS5sZW5ndGg9dGhpcy5hY3RpdmVUby5sZW5ndGg9dGhpcy5hY3RpdmVSYW5rLmxlbmd0aD0wLHRoaXMubWluQWN0aXZlPS0xLHRoaXMudG89ZSx0aGlzLmVuZFNpZGU9dCx0aGlzLm9wZW5TdGFydD0tMSx0aGlzLm5leHQoKSx0aGlzfWZvcndhcmQoZSx0KXtmb3IoO3RoaXMubWluQWN0aXZlPi0xJiYodGhpcy5hY3RpdmVUb1t0aGlzLm1pbkFjdGl2ZV0tZXx8dGhpcy5hY3RpdmVbdGhpcy5taW5BY3RpdmVdLmVuZFNpZGUtdCk8MDspdGhpcy5yZW1vdmVBY3RpdmUodGhpcy5taW5BY3RpdmUpO3RoaXMuY3Vyc29yLmZvcndhcmQoZSx0KX1yZW1vdmVBY3RpdmUoZSl7WSh0aGlzLmFjdGl2ZSxlKSxZKHRoaXMuYWN0aXZlVG8sZSksWSh0aGlzLmFjdGl2ZVJhbmssZSksdGhpcy5taW5BY3RpdmU9UmUodGhpcy5hY3RpdmUsdGhpcy5hY3RpdmVUbyl9YWRkQWN0aXZlKGUpe2xldCB0PTAse3ZhbHVlOm4sdG86aSxyYW5rOnN9PXRoaXMuY3Vyc29yO2Zvcig7dDx0aGlzLmFjdGl2ZVJhbmsubGVuZ3RoJiZ0aGlzLmFjdGl2ZVJhbmtbdF08PXM7KXQrKztfKHRoaXMuYWN0aXZlLHQsbiksXyh0aGlzLmFjdGl2ZVRvLHQsaSksXyh0aGlzLmFjdGl2ZVJhbmssdCxzKSxlJiZfKGUsdCx0aGlzLmN1cnNvci5mcm9tKSx0aGlzLm1pbkFjdGl2ZT1SZSh0aGlzLmFjdGl2ZSx0aGlzLmFjdGl2ZVRvKX1uZXh0KCl7bGV0IGU9dGhpcy50byx0PXRoaXMucG9pbnQ7dGhpcy5wb2ludD1udWxsO2xldCBuPXRoaXMub3BlblN0YXJ0PDA/W106bnVsbCxpPTA7Zm9yKDs7KXtsZXQgcz10aGlzLm1pbkFjdGl2ZTtpZihzPi0xJiYodGhpcy5hY3RpdmVUb1tzXS10aGlzLmN1cnNvci5mcm9tfHx0aGlzLmFjdGl2ZVtzXS5lbmRTaWRlLXRoaXMuY3Vyc29yLnN0YXJ0U2lkZSk8MCl7aWYodGhpcy5hY3RpdmVUb1tzXT5lKXt0aGlzLnRvPXRoaXMuYWN0aXZlVG9bc10sdGhpcy5lbmRTaWRlPXRoaXMuYWN0aXZlW3NdLmVuZFNpZGU7YnJlYWt9dGhpcy5yZW1vdmVBY3RpdmUocyksbiYmWShuLHMpfWVsc2UgaWYodGhpcy5jdXJzb3IudmFsdWUpaWYodGhpcy5jdXJzb3IuZnJvbT5lKXt0aGlzLnRvPXRoaXMuY3Vyc29yLmZyb20sdGhpcy5lbmRTaWRlPXRoaXMuY3Vyc29yLnN0YXJ0U2lkZTticmVha31lbHNle2xldCByPXRoaXMuY3Vyc29yLnZhbHVlO2lmKCFyLnBvaW50KXRoaXMuYWRkQWN0aXZlKG4pLHRoaXMuY3Vyc29yLmZyb208ZSYmdGhpcy5jdXJzb3IudG8+ZSYmaSsrLHRoaXMuY3Vyc29yLm5leHQoKTtlbHNlIGlmKHQmJnRoaXMuY3Vyc29yLnRvPT10aGlzLnRvJiZ0aGlzLmN1cnNvci5mcm9tPHRoaXMuY3Vyc29yLnRvKXRoaXMuY3Vyc29yLm5leHQoKTtlbHNle3RoaXMucG9pbnQ9cix0aGlzLnBvaW50RnJvbT10aGlzLmN1cnNvci5mcm9tLHRoaXMucG9pbnRSYW5rPXRoaXMuY3Vyc29yLnJhbmssdGhpcy50bz10aGlzLmN1cnNvci50byx0aGlzLmVuZFNpZGU9ci5lbmRTaWRlLHRoaXMuY3Vyc29yLmZyb208ZSYmKGk9MSksdGhpcy5jdXJzb3IubmV4dCgpLHRoaXMuZm9yd2FyZCh0aGlzLnRvLHRoaXMuZW5kU2lkZSk7YnJlYWt9fWVsc2V7dGhpcy50bz10aGlzLmVuZFNpZGU9MWU5O2JyZWFrfX1pZihuKXtsZXQgcz0wO2Zvcig7czxuLmxlbmd0aCYmbltzXTxlOylzKys7dGhpcy5vcGVuU3RhcnQ9cytpfX1hY3RpdmVGb3JQb2ludChlKXtpZighdGhpcy5hY3RpdmUubGVuZ3RoKXJldHVybiB0aGlzLmFjdGl2ZTtsZXQgdD1bXTtmb3IobGV0IG49dGhpcy5hY3RpdmUubGVuZ3RoLTE7bj49MCYmISh0aGlzLmFjdGl2ZVJhbmtbbl08dGhpcy5wb2ludFJhbmspO24tLSkodGhpcy5hY3RpdmVUb1tuXT5lfHx0aGlzLmFjdGl2ZVRvW25dPT1lJiZ0aGlzLmFjdGl2ZVtuXS5lbmRTaWRlPj10aGlzLnBvaW50LmVuZFNpZGUpJiZ0LnB1c2godGhpcy5hY3RpdmVbbl0pO3JldHVybiB0LnJldmVyc2UoKX1vcGVuRW5kKGUpe2xldCB0PTA7Zm9yKGxldCBuPXRoaXMuYWN0aXZlVG8ubGVuZ3RoLTE7bj49MCYmdGhpcy5hY3RpdmVUb1tuXT5lO24tLSl0Kys7cmV0dXJuIHR9fTtmdW5jdGlvbiBNZShsLGUsdCxuLGkscyl7bC5nb3RvKGUpLHQuZ290byhuKTtsZXQgcj1uK2ksaD1uLG89bi1lO2Zvcig7Oyl7bGV0IGE9bC50bytvLXQudG98fGwuZW5kU2lkZS10LmVuZFNpZGUsZj1hPDA/bC50bytvOnQudG8sdT1NYXRoLm1pbihmLHIpO2lmKGwucG9pbnR8fHQucG9pbnQ/bC5wb2ludCYmdC5wb2ludCYmKGwucG9pbnQ9PXQucG9pbnR8fGwucG9pbnQuZXEodC5wb2ludCkpJiZ4ZShsLmFjdGl2ZUZvclBvaW50KGwudG8rbyksdC5hY3RpdmVGb3JQb2ludCh0LnRvKSl8fHMuY29tcGFyZVBvaW50KGgsdSxsLnBvaW50LHQucG9pbnQpOnU+aCYmIXhlKGwuYWN0aXZlLHQuYWN0aXZlKSYmcy5jb21wYXJlUmFuZ2UoaCx1LGwuYWN0aXZlLHQuYWN0aXZlKSxmPnIpYnJlYWs7aD1mLGE8PTAmJmwubmV4dCgpLGE+PTAmJnQubmV4dCgpfX1mdW5jdGlvbiB4ZShsLGUpe2lmKGwubGVuZ3RoIT1lLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHQ9MDt0PGwubGVuZ3RoO3QrKylpZihsW3RdIT1lW3RdJiYhbFt0XS5lcShlW3RdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBZKGwsZSl7Zm9yKGxldCB0PWUsbj1sLmxlbmd0aC0xO3Q8bjt0KyspbFt0XT1sW3QrMV07bC5wb3AoKX1mdW5jdGlvbiBfKGwsZSx0KXtmb3IobGV0IG49bC5sZW5ndGgtMTtuPj1lO24tLSlsW24rMV09bFtuXTtsW2VdPXR9ZnVuY3Rpb24gUmUobCxlKXtsZXQgdD0tMSxuPTFlOTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKykoZVtpXS1ufHxsW2ldLmVuZFNpZGUtbFt0XS5lbmRTaWRlKTwwJiYodD1pLG49ZVtpXSk7cmV0dXJuIHR9ZnVuY3Rpb24gb3QobCxlLHQ9bC5sZW5ndGgpe2xldCBuPTA7Zm9yKGxldCBpPTA7aTx0OylsLmNoYXJDb2RlQXQoaSk9PTk/KG4rPWUtbiVlLGkrKyk6KG4rKyxpPWllKGwsaSkpO3JldHVybiBufWZ1bmN0aW9uIGF0KGwsZSx0LG4pe2ZvcihsZXQgaT0wLHM9MDs7KXtpZihzPj1lKXJldHVybiBpO2lmKGk9PWwubGVuZ3RoKWJyZWFrO3MrPWwuY2hhckNvZGVBdChpKT09OT90LXMldDoxLGk9aWUobCxpKX1yZXR1cm4gbj09PSEwPy0xOmwubGVuZ3RofWV4cG9ydHtEIGFzIEFubm90YXRpb24scGUgYXMgQW5ub3RhdGlvblR5cGUsTyBhcyBDaGFuZ2VEZXNjLHggYXMgQ2hhbmdlU2V0LEYgYXMgQ2hhckNhdGVnb3J5LFUgYXMgQ29tcGFydG1lbnQsZyBhcyBFZGl0b3JTZWxlY3Rpb24sdyBhcyBFZGl0b3JTdGF0ZSxBIGFzIEZhY2V0LGZlIGFzIExpbmUsTSBhcyBNYXBNb2RlLGx0IGFzIFByZWMscSBhcyBSYW5nZSxQIGFzIFJhbmdlU2V0LFogYXMgUmFuZ2VTZXRCdWlsZGVyLGogYXMgUmFuZ2VWYWx1ZSxCIGFzIFNlbGVjdGlvblJhbmdlLHkgYXMgU3RhdGVFZmZlY3QsbWUgYXMgU3RhdGVFZmZlY3RUeXBlLEogYXMgU3RhdGVGaWVsZCx2IGFzIFRleHQsUyBhcyBUcmFuc2FjdGlvbixvZSBhcyBjb2RlUG9pbnRBdCxiZSBhcyBjb2RlUG9pbnRTaXplLGh0IGFzIGNvbWJpbmVDb25maWcsb3QgYXMgY291bnRDb2x1bW4saWUgYXMgZmluZENsdXN0ZXJCcmVhayxhdCBhcyBmaW5kQ29sdW1uLHJ0IGFzIGZyb21Db2RlUG9pbnR9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKHN0eWxlLW1vZEA0LjAuMCkgZGVubyBwcm9kdWN0aW9uICovXG52YXIgUz1cIlxcdTAzN0NcIix3PXR5cGVvZiBTeW1ib2w+XCJ1XCI/XCJfX1wiK1M6U3ltYm9sLmZvcihTKSxjPXR5cGVvZiBTeW1ib2w+XCJ1XCI/XCJfX3N0eWxlU2V0XCIrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlOCk6U3ltYm9sKFwic3R5bGVTZXRcIiksYj10eXBlb2YgZ2xvYmFsVGhpczxcInVcIj9nbG9iYWxUaGlzOnR5cGVvZiBkb2N1bWVudDxcInVcIj93aW5kb3c6e30sVD1jbGFzc3tjb25zdHJ1Y3RvcihlLGwpe3RoaXMucnVsZXM9W107bGV0e2ZpbmlzaDp1fT1sfHx7fTtmdW5jdGlvbiBuKHQpe3JldHVybi9eQC8udGVzdCh0KT9bdF06dC5zcGxpdCgvLFxccyovKX1mdW5jdGlvbiBzKHQsaSxoLHgpe2xldCBkPVtdLHI9L15AKFxcdyspXFxiLy5leGVjKHRbMF0pLGc9ciYmclsxXT09XCJrZXlmcmFtZXNcIjtpZihyJiZpPT1udWxsKXJldHVybiBoLnB1c2godFswXStcIjtcIik7Zm9yKGxldCBhIGluIGkpe2xldCBvPWlbYV07aWYoLyYvLnRlc3QoYSkpcyhhLnNwbGl0KC8sXFxzKi8pLm1hcChmPT50Lm1hcCh5PT5mLnJlcGxhY2UoLyYvLHkpKSkucmVkdWNlKChmLHkpPT5mLmNvbmNhdCh5KSksbyxoKTtlbHNlIGlmKG8mJnR5cGVvZiBvPT1cIm9iamVjdFwiKXtpZighcil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IChcIithK1wiKSBzaG91bGQgYmUgYSBwcmltaXRpdmUgdmFsdWUuXCIpO3MobihhKSxvLGQsZyl9ZWxzZSBvIT1udWxsJiZkLnB1c2goYS5yZXBsYWNlKC9fLiovLFwiXCIpLnJlcGxhY2UoL1tBLVpdL2csZj0+XCItXCIrZi50b0xvd2VyQ2FzZSgpKStcIjogXCIrbytcIjtcIil9KGQubGVuZ3RofHxnKSYmaC5wdXNoKCh1JiYhciYmIXg/dC5tYXAodSk6dCkuam9pbihcIiwgXCIpK1wiIHtcIitkLmpvaW4oXCIgXCIpK1wifVwiKX1mb3IobGV0IHQgaW4gZSlzKG4odCksZVt0XSx0aGlzLnJ1bGVzKX1nZXRSdWxlcygpe3JldHVybiB0aGlzLnJ1bGVzLmpvaW4oYFxuYCl9c3RhdGljIG5ld05hbWUoKXtsZXQgZT1iW3ddfHwxO3JldHVybiBiW3ddPWUrMSxTK2UudG9TdHJpbmcoMzYpfXN0YXRpYyBtb3VudChlLGwpeyhlW2NdfHxuZXcgbShlKSkubW91bnQoQXJyYXkuaXNBcnJheShsKT9sOltsXSl9fSxwPW51bGwsbT1jbGFzc3tjb25zdHJ1Y3RvcihlKXtpZighZS5oZWFkJiZlLmFkb3B0ZWRTdHlsZVNoZWV0cyYmdHlwZW9mIENTU1N0eWxlU2hlZXQ8XCJ1XCIpe2lmKHApcmV0dXJuIGUuYWRvcHRlZFN0eWxlU2hlZXRzPVtwLnNoZWV0XS5jb25jYXQoZS5hZG9wdGVkU3R5bGVTaGVldHMpLGVbY109cDt0aGlzLnNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LGUuYWRvcHRlZFN0eWxlU2hlZXRzPVt0aGlzLnNoZWV0XS5jb25jYXQoZS5hZG9wdGVkU3R5bGVTaGVldHMpLHA9dGhpc31lbHNle3RoaXMuc3R5bGVUYWc9KGUub3duZXJEb2N1bWVudHx8ZSkuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO2xldCBsPWUuaGVhZHx8ZTtsLmluc2VydEJlZm9yZSh0aGlzLnN0eWxlVGFnLGwuZmlyc3RDaGlsZCl9dGhpcy5tb2R1bGVzPVtdLGVbY109dGhpc31tb3VudChlKXtsZXQgbD10aGlzLnNoZWV0LHU9MCxuPTA7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2xldCB0PWVbc10saT10aGlzLm1vZHVsZXMuaW5kZXhPZih0KTtpZihpPG4mJmk+LTEmJih0aGlzLm1vZHVsZXMuc3BsaWNlKGksMSksbi0tLGk9LTEpLGk9PS0xKXtpZih0aGlzLm1vZHVsZXMuc3BsaWNlKG4rKywwLHQpLGwpZm9yKGxldCBoPTA7aDx0LnJ1bGVzLmxlbmd0aDtoKyspbC5pbnNlcnRSdWxlKHQucnVsZXNbaF0sdSsrKX1lbHNle2Zvcig7bjxpOyl1Kz10aGlzLm1vZHVsZXNbbisrXS5ydWxlcy5sZW5ndGg7dSs9dC5ydWxlcy5sZW5ndGgsbisrfX1pZighbCl7bGV0IHM9XCJcIjtmb3IobGV0IHQ9MDt0PHRoaXMubW9kdWxlcy5sZW5ndGg7dCsrKXMrPXRoaXMubW9kdWxlc1t0XS5nZXRSdWxlcygpK2BcbmA7dGhpcy5zdHlsZVRhZy50ZXh0Q29udGVudD1zfX19O2V4cG9ydHtUIGFzIFN0eWxlTW9kdWxlfTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZSh3M2Mta2V5bmFtZUAyLjIuNikgZGVubyBwcm9kdWN0aW9uICovXG52YXIgdD17ODpcIkJhY2tzcGFjZVwiLDk6XCJUYWJcIiwxMDpcIkVudGVyXCIsMTI6XCJOdW1Mb2NrXCIsMTM6XCJFbnRlclwiLDE2OlwiU2hpZnRcIiwxNzpcIkNvbnRyb2xcIiwxODpcIkFsdFwiLDIwOlwiQ2Fwc0xvY2tcIiwyNzpcIkVzY2FwZVwiLDMyOlwiIFwiLDMzOlwiUGFnZVVwXCIsMzQ6XCJQYWdlRG93blwiLDM1OlwiRW5kXCIsMzY6XCJIb21lXCIsMzc6XCJBcnJvd0xlZnRcIiwzODpcIkFycm93VXBcIiwzOTpcIkFycm93UmlnaHRcIiw0MDpcIkFycm93RG93blwiLDQ0OlwiUHJpbnRTY3JlZW5cIiw0NTpcIkluc2VydFwiLDQ2OlwiRGVsZXRlXCIsNTk6XCI7XCIsNjE6XCI9XCIsOTE6XCJNZXRhXCIsOTI6XCJNZXRhXCIsMTA2OlwiKlwiLDEwNzpcIitcIiwxMDg6XCIsXCIsMTA5OlwiLVwiLDExMDpcIi5cIiwxMTE6XCIvXCIsMTQ0OlwiTnVtTG9ja1wiLDE0NTpcIlNjcm9sbExvY2tcIiwxNjA6XCJTaGlmdFwiLDE2MTpcIlNoaWZ0XCIsMTYyOlwiQ29udHJvbFwiLDE2MzpcIkNvbnRyb2xcIiwxNjQ6XCJBbHRcIiwxNjU6XCJBbHRcIiwxNzM6XCItXCIsMTg2OlwiO1wiLDE4NzpcIj1cIiwxODg6XCIsXCIsMTg5OlwiLVwiLDE5MDpcIi5cIiwxOTE6XCIvXCIsMTkyOlwiYFwiLDIxOTpcIltcIiwyMjA6XCJcXFxcXCIsMjIxOlwiXVwiLDIyMjpcIidcIn0saT17NDg6XCIpXCIsNDk6XCIhXCIsNTA6XCJAXCIsNTE6XCIjXCIsNTI6XCIkXCIsNTM6XCIlXCIsNTQ6XCJeXCIsNTU6XCImXCIsNTY6XCIqXCIsNTc6XCIoXCIsNTk6XCI6XCIsNjE6XCIrXCIsMTczOlwiX1wiLDE4NjpcIjpcIiwxODc6XCIrXCIsMTg4OlwiPFwiLDE4OTpcIl9cIiwxOTA6XCI+XCIsMTkxOlwiP1wiLDE5MjpcIn5cIiwyMTk6XCJ7XCIsMjIwOlwifFwiLDIyMTpcIn1cIiwyMjI6J1wiJ30sbj10eXBlb2YgbmF2aWdhdG9yPFwidVwiJiYvQ2hyb21lXFwvKFxcZCspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpLHA9dHlwZW9mIG5hdmlnYXRvcjxcInVcIiYmL0dlY2tvXFwvXFxkKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxnPXR5cGVvZiBuYXZpZ2F0b3I8XCJ1XCImJi9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxkPXR5cGVvZiBuYXZpZ2F0b3I8XCJ1XCImJi9NU0lFIFxcZHxUcmlkZW50XFwvKD86WzctOV18XFxkezIsfSlcXC4uKnJ2OihcXGQrKS8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KSx5PWd8fG4mJituWzFdPDU3O2ZvcihyPTA7cjwxMDtyKyspdFs0OCtyXT10Wzk2K3JdPVN0cmluZyhyKTt2YXIgcjtmb3Iocj0xO3I8PTI0O3IrKyl0W3IrMTExXT1cIkZcIityO3ZhciByO2ZvcihyPTY1O3I8PTkwO3IrKyl0W3JdPVN0cmluZy5mcm9tQ2hhckNvZGUociszMiksaVtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpO3ZhciByO2ZvcihhIGluIHQpaS5oYXNPd25Qcm9wZXJ0eShhKXx8KGlbYV09dFthXSk7dmFyIGE7ZnVuY3Rpb24gcyhvKXt2YXIgZj15JiYoby5jdHJsS2V5fHxvLmFsdEtleXx8by5tZXRhS2V5KXx8ZCYmby5zaGlmdEtleSYmby5rZXkmJm8ua2V5Lmxlbmd0aD09MXx8by5rZXk9PVwiVW5pZGVudGlmaWVkXCIsZT0hZiYmby5rZXl8fChvLnNoaWZ0S2V5P2k6dClbby5rZXlDb2RlXXx8by5rZXl8fFwiVW5pZGVudGlmaWVkXCI7cmV0dXJuIGU9PVwiRXNjXCImJihlPVwiRXNjYXBlXCIpLGU9PVwiRGVsXCImJihlPVwiRGVsZXRlXCIpLGU9PVwiTGVmdFwiJiYoZT1cIkFycm93TGVmdFwiKSxlPT1cIlVwXCImJihlPVwiQXJyb3dVcFwiKSxlPT1cIlJpZ2h0XCImJihlPVwiQXJyb3dSaWdodFwiKSxlPT1cIkRvd25cIiYmKGU9XCJBcnJvd0Rvd25cIiksZX1leHBvcnR7dCBhcyBiYXNlLHMgYXMga2V5TmFtZSxpIGFzIHNoaWZ0fTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShAY29kZW1pcnJvci92aWV3QDYuMy4wKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydHtUZXh0IGFzIG90LFJhbmdlU2V0IGFzIEYsTWFwTW9kZSBhcyBndCxSYW5nZVZhbHVlIGFzIGxzLEZhY2V0IGFzIEMsU3RhdGVFZmZlY3QgYXMganQsQ2hhbmdlU2V0IGFzIGhzLGZpbmRDbHVzdGVyQnJlYWsgYXMga3QsRWRpdG9yU2VsZWN0aW9uIGFzIHgsRWRpdG9yU3RhdGUgYXMgTHQsZmluZENvbHVtbiBhcyBMZSxDaGFyQ2F0ZWdvcnkgYXMgYW4sUHJlYyBhcyBtaSxUcmFuc2FjdGlvbiBhcyBjbixjb2RlUG9pbnRBdCBhcyBhcyxjb2RlUG9pbnRTaXplIGFzIGZuLGNvbWJpbmVDb25maWcgYXMgZ2ksU3RhdGVGaWVsZCBhcyBjcyxSYW5nZVNldEJ1aWxkZXIgYXMgZG4sY291bnRDb2x1bW4gYXMgZnN9ZnJvbVwiQGNvZGVtaXJyb3Ivc3RhdGVcIjtpbXBvcnR7U3R5bGVNb2R1bGUgYXMgYnR9ZnJvbVwiL3Y5Ni9zdHlsZS1tb2RANC4wLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBYkdWNlpYSXZZMjl0Ylc5dS9kZW5vL3N0eWxlLW1vZC5qc1wiO2ltcG9ydHtrZXlOYW1lIGFzIHVuLGJhc2UgYXMgcG4sc2hpZnQgYXMgbW59ZnJvbVwiL3Y5Ni93M2Mta2V5bmFtZUAyLjIuNi9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFiR1Y2WlhJdlkyOXRiVzl1L2Rlbm8vdzNjLWtleW5hbWUuanNcIjtmdW5jdGlvbiBzZShzKXtsZXQgdDtyZXR1cm4gcy5ub2RlVHlwZT09MTE/dD1zLmdldFNlbGVjdGlvbj9zOnMub3duZXJEb2N1bWVudDp0PXMsdC5nZXRTZWxlY3Rpb24oKX1mdW5jdGlvbiB5dChzLHQpe3JldHVybiB0P3M9PXR8fHMuY29udGFpbnModC5ub2RlVHlwZSE9MT90LnBhcmVudE5vZGU6dCk6ITF9ZnVuY3Rpb24gZ24ocyl7bGV0IHQ9cy5hY3RpdmVFbGVtZW50O2Zvcig7dCYmdC5zaGFkb3dSb290Oyl0PXQuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O3JldHVybiB0fWZ1bmN0aW9uIFp0KHMsdCl7aWYoIXQuYW5jaG9yTm9kZSlyZXR1cm4hMTt0cnl7cmV0dXJuIHl0KHMsdC5hbmNob3JOb2RlKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gVnQocyl7cmV0dXJuIHMubm9kZVR5cGU9PTM/d3QocywwLHMubm9kZVZhbHVlLmxlbmd0aCkuZ2V0Q2xpZW50UmVjdHMoKTpzLm5vZGVUeXBlPT0xP3MuZ2V0Q2xpZW50UmVjdHMoKTpbXX1mdW5jdGlvbiBuZShzLHQsZSxpKXtyZXR1cm4gZT9TaShzLHQsZSxpLC0xKXx8U2kocyx0LGUsaSwxKTohMX1mdW5jdGlvbiByZShzKXtmb3IodmFyIHQ9MDs7dCsrKWlmKHM9cy5wcmV2aW91c1NpYmxpbmcsIXMpcmV0dXJuIHR9ZnVuY3Rpb24gU2kocyx0LGUsaSxuKXtmb3IoOzspe2lmKHM9PWUmJnQ9PWkpcmV0dXJuITA7aWYodD09KG48MD8wOld0KHMpKSl7aWYocy5ub2RlTmFtZT09XCJESVZcIilyZXR1cm4hMTtsZXQgcj1zLnBhcmVudE5vZGU7aWYoIXJ8fHIubm9kZVR5cGUhPTEpcmV0dXJuITE7dD1yZShzKSsobjwwPzA6MSkscz1yfWVsc2UgaWYocy5ub2RlVHlwZT09MSl7aWYocz1zLmNoaWxkTm9kZXNbdCsobjwwPy0xOjApXSxzLm5vZGVUeXBlPT0xJiZzLmNvbnRlbnRFZGl0YWJsZT09XCJmYWxzZVwiKXJldHVybiExO3Q9bjwwP1d0KHMpOjB9ZWxzZSByZXR1cm4hMX19ZnVuY3Rpb24gV3Qocyl7cmV0dXJuIHMubm9kZVR5cGU9PTM/cy5ub2RlVmFsdWUubGVuZ3RoOnMuY2hpbGROb2Rlcy5sZW5ndGh9dmFyIGRzPXtsZWZ0OjAscmlnaHQ6MCx0b3A6MCxib3R0b206MH07ZnVuY3Rpb24geGUocyx0KXtsZXQgZT10P3MubGVmdDpzLnJpZ2h0O3JldHVybntsZWZ0OmUscmlnaHQ6ZSx0b3A6cy50b3AsYm90dG9tOnMuYm90dG9tfX1mdW5jdGlvbiBibihzKXtyZXR1cm57bGVmdDowLHJpZ2h0OnMuaW5uZXJXaWR0aCx0b3A6MCxib3R0b206cy5pbm5lckhlaWdodH19ZnVuY3Rpb24geW4ocyx0LGUsaSxuLHIsbyxsKXtsZXQgaD1zLm93bmVyRG9jdW1lbnQsYT1oLmRlZmF1bHRWaWV3fHx3aW5kb3c7Zm9yKGxldCBjPXM7YzspaWYoYy5ub2RlVHlwZT09MSl7bGV0IGYsZD1jPT1oLmJvZHk7aWYoZClmPWJuKGEpO2Vsc2V7aWYoYy5zY3JvbGxIZWlnaHQ8PWMuY2xpZW50SGVpZ2h0JiZjLnNjcm9sbFdpZHRoPD1jLmNsaWVudFdpZHRoKXtjPWMuYXNzaWduZWRTbG90fHxjLnBhcmVudE5vZGU7Y29udGludWV9bGV0IGI9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmPXtsZWZ0OmIubGVmdCxyaWdodDpiLmxlZnQrYy5jbGllbnRXaWR0aCx0b3A6Yi50b3AsYm90dG9tOmIudG9wK2MuY2xpZW50SGVpZ2h0fX1sZXQgdT0wLHA9MDtpZihuPT1cIm5lYXJlc3RcIil0LnRvcDxmLnRvcD8ocD0tKGYudG9wLXQudG9wK28pLGU+MCYmdC5ib3R0b20+Zi5ib3R0b20rcCYmKHA9dC5ib3R0b20tZi5ib3R0b20rcCtvKSk6dC5ib3R0b20+Zi5ib3R0b20mJihwPXQuYm90dG9tLWYuYm90dG9tK28sZTwwJiZ0LnRvcC1wPGYudG9wJiYocD0tKGYudG9wK3AtdC50b3ArbykpKTtlbHNle2xldCBiPXQuYm90dG9tLXQudG9wLG09Zi5ib3R0b20tZi50b3A7cD0obj09XCJjZW50ZXJcIiYmYjw9bT90LnRvcCtiLzItbS8yOm49PVwic3RhcnRcInx8bj09XCJjZW50ZXJcIiYmZTwwP3QudG9wLW86dC5ib3R0b20tbStvKS1mLnRvcH1pZihpPT1cIm5lYXJlc3RcIj90LmxlZnQ8Zi5sZWZ0Pyh1PS0oZi5sZWZ0LXQubGVmdCtyKSxlPjAmJnQucmlnaHQ+Zi5yaWdodCt1JiYodT10LnJpZ2h0LWYucmlnaHQrdStyKSk6dC5yaWdodD5mLnJpZ2h0JiYodT10LnJpZ2h0LWYucmlnaHQrcixlPDAmJnQubGVmdDxmLmxlZnQrdSYmKHU9LShmLmxlZnQrdS10LmxlZnQrcikpKTp1PShpPT1cImNlbnRlclwiP3QubGVmdCsodC5yaWdodC10LmxlZnQpLzItKGYucmlnaHQtZi5sZWZ0KS8yOmk9PVwic3RhcnRcIj09bD90LmxlZnQtcjp0LnJpZ2h0LShmLnJpZ2h0LWYubGVmdCkrciktZi5sZWZ0LHV8fHApaWYoZClhLnNjcm9sbEJ5KHUscCk7ZWxzZXtsZXQgYj0wLG09MDtpZihwKXtsZXQgZz1jLnNjcm9sbFRvcDtjLnNjcm9sbFRvcCs9cCxtPWMuc2Nyb2xsVG9wLWd9aWYodSl7bGV0IGc9Yy5zY3JvbGxMZWZ0O2Muc2Nyb2xsTGVmdCs9dSxiPWMuc2Nyb2xsTGVmdC1nfXQ9e2xlZnQ6dC5sZWZ0LWIsdG9wOnQudG9wLW0scmlnaHQ6dC5yaWdodC1iLGJvdHRvbTp0LmJvdHRvbS1tfSxiJiZNYXRoLmFicyhiLXUpPDEmJihpPVwibmVhcmVzdFwiKSxtJiZNYXRoLmFicyhtLXApPDEmJihuPVwibmVhcmVzdFwiKX1pZihkKWJyZWFrO2M9Yy5hc3NpZ25lZFNsb3R8fGMucGFyZW50Tm9kZX1lbHNlIGlmKGMubm9kZVR5cGU9PTExKWM9Yy5ob3N0O2Vsc2UgYnJlYWt9dmFyIEVlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5hbmNob3JOb2RlPW51bGwsdGhpcy5hbmNob3JPZmZzZXQ9MCx0aGlzLmZvY3VzTm9kZT1udWxsLHRoaXMuZm9jdXNPZmZzZXQ9MH1lcSh0KXtyZXR1cm4gdGhpcy5hbmNob3JOb2RlPT10LmFuY2hvck5vZGUmJnRoaXMuYW5jaG9yT2Zmc2V0PT10LmFuY2hvck9mZnNldCYmdGhpcy5mb2N1c05vZGU9PXQuZm9jdXNOb2RlJiZ0aGlzLmZvY3VzT2Zmc2V0PT10LmZvY3VzT2Zmc2V0fXNldFJhbmdlKHQpe3RoaXMuc2V0KHQuYW5jaG9yTm9kZSx0LmFuY2hvck9mZnNldCx0LmZvY3VzTm9kZSx0LmZvY3VzT2Zmc2V0KX1zZXQodCxlLGksbil7dGhpcy5hbmNob3JOb2RlPXQsdGhpcy5hbmNob3JPZmZzZXQ9ZSx0aGlzLmZvY3VzTm9kZT1pLHRoaXMuZm9jdXNPZmZzZXQ9bn19LGR0PW51bGw7ZnVuY3Rpb24gdXMocyl7aWYocy5zZXRBY3RpdmUpcmV0dXJuIHMuc2V0QWN0aXZlKCk7aWYoZHQpcmV0dXJuIHMuZm9jdXMoZHQpO2xldCB0PVtdO2ZvcihsZXQgZT1zO2UmJih0LnB1c2goZSxlLnNjcm9sbFRvcCxlLnNjcm9sbExlZnQpLGUhPWUub3duZXJEb2N1bWVudCk7ZT1lLnBhcmVudE5vZGUpO2lmKHMuZm9jdXMoZHQ9PW51bGw/e2dldCBwcmV2ZW50U2Nyb2xsKCl7cmV0dXJuIGR0PXtwcmV2ZW50U2Nyb2xsOiEwfSwhMH19OnZvaWQgMCksIWR0KXtkdD0hMTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoOyl7bGV0IGk9dFtlKytdLG49dFtlKytdLHI9dFtlKytdO2kuc2Nyb2xsVG9wIT1uJiYoaS5zY3JvbGxUb3A9biksaS5zY3JvbGxMZWZ0IT1yJiYoaS5zY3JvbGxMZWZ0PXIpfX19dmFyIENpO2Z1bmN0aW9uIHd0KHMsdCxlPXQpe2xldCBpPUNpfHwoQ2k9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSk7cmV0dXJuIGkuc2V0RW5kKHMsZSksaS5zZXRTdGFydChzLHQpLGl9ZnVuY3Rpb24gRXQocyx0LGUpe2xldCBpPXtrZXk6dCxjb2RlOnQsa2V5Q29kZTplLHdoaWNoOmUsY2FuY2VsYWJsZTohMH0sbj1uZXcgS2V5Ym9hcmRFdmVudChcImtleWRvd25cIixpKTtuLnN5bnRoZXRpYz0hMCxzLmRpc3BhdGNoRXZlbnQobik7bGV0IHI9bmV3IEtleWJvYXJkRXZlbnQoXCJrZXl1cFwiLGkpO3JldHVybiByLnN5bnRoZXRpYz0hMCxzLmRpc3BhdGNoRXZlbnQociksbi5kZWZhdWx0UHJldmVudGVkfHxyLmRlZmF1bHRQcmV2ZW50ZWR9ZnVuY3Rpb24gd24ocyl7Zm9yKDtzOyl7aWYocyYmKHMubm9kZVR5cGU9PTl8fHMubm9kZVR5cGU9PTExJiZzLmhvc3QpKXJldHVybiBzO3M9cy5hc3NpZ25lZFNsb3R8fHMucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBwcyhzKXtmb3IoO3MuYXR0cmlidXRlcy5sZW5ndGg7KXMucmVtb3ZlQXR0cmlidXRlTm9kZShzLmF0dHJpYnV0ZXNbMF0pfWZ1bmN0aW9uIHZuKHMsdCl7bGV0IGU9dC5mb2N1c05vZGUsaT10LmZvY3VzT2Zmc2V0O2lmKCFlfHx0LmFuY2hvck5vZGUhPWV8fHQuYW5jaG9yT2Zmc2V0IT1pKXJldHVybiExO2Zvcig7OylpZihpKXtpZihlLm5vZGVUeXBlIT0xKXJldHVybiExO2xldCBuPWUuY2hpbGROb2Rlc1tpLTFdO24uY29udGVudEVkaXRhYmxlPT1cImZhbHNlXCI/aS0tOihlPW4saT1XdChlKSl9ZWxzZXtpZihlPT1zKXJldHVybiEwO2k9cmUoZSksZT1lLnBhcmVudE5vZGV9fXZhciBCPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPSEwKXt0aGlzLm5vZGU9dCx0aGlzLm9mZnNldD1lLHRoaXMucHJlY2lzZT1pfXN0YXRpYyBiZWZvcmUodCxlKXtyZXR1cm4gbmV3IEIodC5wYXJlbnROb2RlLHJlKHQpLGUpfXN0YXRpYyBhZnRlcih0LGUpe3JldHVybiBuZXcgQih0LnBhcmVudE5vZGUscmUodCkrMSxlKX19LGJpPVtdLEE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnBhcmVudD1udWxsLHRoaXMuZG9tPW51bGwsdGhpcy5kaXJ0eT0yfWdldCBlZGl0b3JWaWV3KCl7aWYoIXRoaXMucGFyZW50KXRocm93IG5ldyBFcnJvcihcIkFjY2Vzc2luZyB2aWV3IGluIG9ycGhhbiBjb250ZW50IHZpZXdcIik7cmV0dXJuIHRoaXMucGFyZW50LmVkaXRvclZpZXd9Z2V0IG92ZXJyaWRlRE9NVGV4dCgpe3JldHVybiBudWxsfWdldCBwb3NBdFN0YXJ0KCl7cmV0dXJuIHRoaXMucGFyZW50P3RoaXMucGFyZW50LnBvc0JlZm9yZSh0aGlzKTowfWdldCBwb3NBdEVuZCgpe3JldHVybiB0aGlzLnBvc0F0U3RhcnQrdGhpcy5sZW5ndGh9cG9zQmVmb3JlKHQpe2xldCBlPXRoaXMucG9zQXRTdGFydDtmb3IobGV0IGkgb2YgdGhpcy5jaGlsZHJlbil7aWYoaT09dClyZXR1cm4gZTtlKz1pLmxlbmd0aCtpLmJyZWFrQWZ0ZXJ9dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIGNoaWxkIGluIHBvc0JlZm9yZVwiKX1wb3NBZnRlcih0KXtyZXR1cm4gdGhpcy5wb3NCZWZvcmUodCkrdC5sZW5ndGh9Y29vcmRzQXQodCxlKXtyZXR1cm4gbnVsbH1zeW5jKHQpe2lmKHRoaXMuZGlydHkmMil7bGV0IGU9dGhpcy5kb20saT1udWxsLG47Zm9yKGxldCByIG9mIHRoaXMuY2hpbGRyZW4pe2lmKHIuZGlydHkpe2lmKCFyLmRvbSYmKG49aT9pLm5leHRTaWJsaW5nOmUuZmlyc3RDaGlsZCkpe2xldCBvPUEuZ2V0KG4pOyghb3x8IW8ucGFyZW50JiZvLmNhblJldXNlRE9NKHIpKSYmci5yZXVzZURPTShuKX1yLnN5bmModCksci5kaXJ0eT0wfWlmKG49aT9pLm5leHRTaWJsaW5nOmUuZmlyc3RDaGlsZCx0JiYhdC53cml0dGVuJiZ0Lm5vZGU9PWUmJm4hPXIuZG9tJiYodC53cml0dGVuPSEwKSxyLmRvbS5wYXJlbnROb2RlPT1lKWZvcig7biYmbiE9ci5kb207KW49TWkobik7ZWxzZSBlLmluc2VydEJlZm9yZShyLmRvbSxuKTtpPXIuZG9tfWZvcihuPWk/aS5uZXh0U2libGluZzplLmZpcnN0Q2hpbGQsbiYmdCYmdC5ub2RlPT1lJiYodC53cml0dGVuPSEwKTtuOyluPU1pKG4pfWVsc2UgaWYodGhpcy5kaXJ0eSYxKWZvcihsZXQgZSBvZiB0aGlzLmNoaWxkcmVuKWUuZGlydHkmJihlLnN5bmModCksZS5kaXJ0eT0wKX1yZXVzZURPTSh0KXt9bG9jYWxQb3NGcm9tRE9NKHQsZSl7bGV0IGk7aWYodD09dGhpcy5kb20paT10aGlzLmRvbS5jaGlsZE5vZGVzW2VdO2Vsc2V7bGV0IG49V3QodCk9PTA/MDplPT0wPy0xOjE7Zm9yKDs7KXtsZXQgcj10LnBhcmVudE5vZGU7aWYocj09dGhpcy5kb20pYnJlYWs7bj09MCYmci5maXJzdENoaWxkIT1yLmxhc3RDaGlsZCYmKHQ9PXIuZmlyc3RDaGlsZD9uPS0xOm49MSksdD1yfW48MD9pPXQ6aT10Lm5leHRTaWJsaW5nfWlmKGk9PXRoaXMuZG9tLmZpcnN0Q2hpbGQpcmV0dXJuIDA7Zm9yKDtpJiYhQS5nZXQoaSk7KWk9aS5uZXh0U2libGluZztpZighaSlyZXR1cm4gdGhpcy5sZW5ndGg7Zm9yKGxldCBuPTAscj0wOztuKyspe2xldCBvPXRoaXMuY2hpbGRyZW5bbl07aWYoby5kb209PWkpcmV0dXJuIHI7cis9by5sZW5ndGgrby5icmVha0FmdGVyfX1kb21Cb3VuZHNBcm91bmQodCxlLGk9MCl7bGV0IG49LTEscj0tMSxvPS0xLGw9LTE7Zm9yKGxldCBoPTAsYT1pLGM9aTtoPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2grKyl7bGV0IGY9dGhpcy5jaGlsZHJlbltoXSxkPWErZi5sZW5ndGg7aWYoYTx0JiZkPmUpcmV0dXJuIGYuZG9tQm91bmRzQXJvdW5kKHQsZSxhKTtpZihkPj10JiZuPT0tMSYmKG49aCxyPWEpLGE+ZSYmZi5kb20ucGFyZW50Tm9kZT09dGhpcy5kb20pe289aCxsPWM7YnJlYWt9Yz1kLGE9ZCtmLmJyZWFrQWZ0ZXJ9cmV0dXJue2Zyb206cix0bzpsPDA/aSt0aGlzLmxlbmd0aDpsLHN0YXJ0RE9NOihuP3RoaXMuY2hpbGRyZW5bbi0xXS5kb20ubmV4dFNpYmxpbmc6bnVsbCl8fHRoaXMuZG9tLmZpcnN0Q2hpbGQsZW5kRE9NOm88dGhpcy5jaGlsZHJlbi5sZW5ndGgmJm8+PTA/dGhpcy5jaGlsZHJlbltvXS5kb206bnVsbH19bWFya0RpcnR5KHQ9ITEpe3RoaXMuZGlydHl8PTIsdGhpcy5tYXJrUGFyZW50c0RpcnR5KHQpfW1hcmtQYXJlbnRzRGlydHkodCl7Zm9yKGxldCBlPXRoaXMucGFyZW50O2U7ZT1lLnBhcmVudCl7aWYodCYmKGUuZGlydHl8PTIpLGUuZGlydHkmMSlyZXR1cm47ZS5kaXJ0eXw9MSx0PSExfX1zZXRQYXJlbnQodCl7dGhpcy5wYXJlbnQhPXQmJih0aGlzLnBhcmVudD10LHRoaXMuZGlydHkmJnRoaXMubWFya1BhcmVudHNEaXJ0eSghMCkpfXNldERPTSh0KXt0aGlzLmRvbSYmKHRoaXMuZG9tLmNtVmlldz1udWxsKSx0aGlzLmRvbT10LHQuY21WaWV3PXRoaXN9Z2V0IHJvb3RWaWV3KCl7Zm9yKGxldCB0PXRoaXM7Oyl7bGV0IGU9dC5wYXJlbnQ7aWYoIWUpcmV0dXJuIHQ7dD1lfX1yZXBsYWNlQ2hpbGRyZW4odCxlLGk9Ymkpe3RoaXMubWFya0RpcnR5KCk7Zm9yKGxldCBuPXQ7bjxlO24rKyl7bGV0IHI9dGhpcy5jaGlsZHJlbltuXTtyLnBhcmVudD09dGhpcyYmci5kZXN0cm95KCl9dGhpcy5jaGlsZHJlbi5zcGxpY2UodCxlLXQsLi4uaSk7Zm9yKGxldCBuPTA7bjxpLmxlbmd0aDtuKyspaVtuXS5zZXRQYXJlbnQodGhpcyl9aWdub3JlTXV0YXRpb24odCl7cmV0dXJuITF9aWdub3JlRXZlbnQodCl7cmV0dXJuITF9Y2hpbGRDdXJzb3IodD10aGlzLmxlbmd0aCl7cmV0dXJuIG5ldyBvZSh0aGlzLmNoaWxkcmVuLHQsdGhpcy5jaGlsZHJlbi5sZW5ndGgpfWNoaWxkUG9zKHQsZT0xKXtyZXR1cm4gdGhpcy5jaGlsZEN1cnNvcigpLmZpbmRQb3ModCxlKX10b1N0cmluZygpe2xldCB0PXRoaXMuY29uc3RydWN0b3IubmFtZS5yZXBsYWNlKFwiVmlld1wiLFwiXCIpO3JldHVybiB0Kyh0aGlzLmNoaWxkcmVuLmxlbmd0aD9cIihcIit0aGlzLmNoaWxkcmVuLmpvaW4oKStcIilcIjp0aGlzLmxlbmd0aD9cIltcIisodD09XCJUZXh0XCI/dGhpcy50ZXh0OnRoaXMubGVuZ3RoKStcIl1cIjpcIlwiKSsodGhpcy5icmVha0FmdGVyP1wiI1wiOlwiXCIpfXN0YXRpYyBnZXQodCl7cmV0dXJuIHQuY21WaWV3fWdldCBpc0VkaXRhYmxlKCl7cmV0dXJuITB9bWVyZ2UodCxlLGksbixyLG8pe3JldHVybiExfWJlY29tZSh0KXtyZXR1cm4hMX1jYW5SZXVzZURPTSh0KXtyZXR1cm4gdC5jb25zdHJ1Y3Rvcj09dGhpcy5jb25zdHJ1Y3Rvcn1nZXRTaWRlKCl7cmV0dXJuIDB9ZGVzdHJveSgpe3RoaXMucGFyZW50PW51bGx9fTtBLnByb3RvdHlwZS5icmVha0FmdGVyPTA7ZnVuY3Rpb24gTWkocyl7bGV0IHQ9cy5uZXh0U2libGluZztyZXR1cm4gcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHMpLHR9dmFyIG9lPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmNoaWxkcmVuPXQsdGhpcy5wb3M9ZSx0aGlzLmk9aSx0aGlzLm9mZj0wfWZpbmRQb3ModCxlPTEpe2Zvcig7Oyl7aWYodD50aGlzLnBvc3x8dD09dGhpcy5wb3MmJihlPjB8fHRoaXMuaT09MHx8dGhpcy5jaGlsZHJlblt0aGlzLmktMV0uYnJlYWtBZnRlcikpcmV0dXJuIHRoaXMub2ZmPXQtdGhpcy5wb3MsdGhpcztsZXQgaT10aGlzLmNoaWxkcmVuWy0tdGhpcy5pXTt0aGlzLnBvcy09aS5sZW5ndGgraS5icmVha0FmdGVyfX19O2Z1bmN0aW9uIG1zKHMsdCxlLGksbixyLG8sbCxoKXtsZXR7Y2hpbGRyZW46YX09cyxjPWEubGVuZ3RoP2FbdF06bnVsbCxmPXIubGVuZ3RoP3Jbci5sZW5ndGgtMV06bnVsbCxkPWY/Zi5icmVha0FmdGVyOm87aWYoISh0PT1pJiZjJiYhbyYmIWQmJnIubGVuZ3RoPDImJmMubWVyZ2UoZSxuLHIubGVuZ3RoP2Y6bnVsbCxlPT0wLGwsaCkpKXtpZihpPGEubGVuZ3RoKXtsZXQgdT1hW2ldO3UmJm48dS5sZW5ndGg/KHQ9PWkmJih1PXUuc3BsaXQobiksbj0wKSwhZCYmZiYmdS5tZXJnZSgwLG4sZiwhMCwwLGgpP3Jbci5sZW5ndGgtMV09dToobiYmdS5tZXJnZSgwLG4sbnVsbCwhMSwwLGgpLHIucHVzaCh1KSkpOnU/LmJyZWFrQWZ0ZXImJihmP2YuYnJlYWtBZnRlcj0xOm89MSksaSsrfWZvcihjJiYoYy5icmVha0FmdGVyPW8sZT4wJiYoIW8mJnIubGVuZ3RoJiZjLm1lcmdlKGUsYy5sZW5ndGgsclswXSwhMSxsLDApP2MuYnJlYWtBZnRlcj1yLnNoaWZ0KCkuYnJlYWtBZnRlcjooZTxjLmxlbmd0aHx8Yy5jaGlsZHJlbi5sZW5ndGgmJmMuY2hpbGRyZW5bYy5jaGlsZHJlbi5sZW5ndGgtMV0ubGVuZ3RoPT0wKSYmYy5tZXJnZShlLGMubGVuZ3RoLG51bGwsITEsbCwwKSx0KyspKTt0PGkmJnIubGVuZ3RoOylpZihhW2ktMV0uYmVjb21lKHJbci5sZW5ndGgtMV0pKWktLSxyLnBvcCgpLGg9ci5sZW5ndGg/MDpsO2Vsc2UgaWYoYVt0XS5iZWNvbWUoclswXSkpdCsrLHIuc2hpZnQoKSxsPXIubGVuZ3RoPzA6aDtlbHNlIGJyZWFrOyFyLmxlbmd0aCYmdCYmaTxhLmxlbmd0aCYmIWFbdC0xXS5icmVha0FmdGVyJiZhW2ldLm1lcmdlKDAsMCxhW3QtMV0sITEsbCxoKSYmdC0tLCh0PGl8fHIubGVuZ3RoKSYmcy5yZXBsYWNlQ2hpbGRyZW4odCxpLHIpfX1mdW5jdGlvbiBncyhzLHQsZSxpLG4scil7bGV0IG89cy5jaGlsZEN1cnNvcigpLHtpOmwsb2ZmOmh9PW8uZmluZFBvcyhlLDEpLHtpOmEsb2ZmOmN9PW8uZmluZFBvcyh0LC0xKSxmPXQtZTtmb3IobGV0IGQgb2YgaSlmKz1kLmxlbmd0aDtzLmxlbmd0aCs9ZixtcyhzLGEsYyxsLGgsaSwwLG4scil9dmFyIHo9dHlwZW9mIG5hdmlnYXRvcjxcInVcIj9uYXZpZ2F0b3I6e3VzZXJBZ2VudDpcIlwiLHZlbmRvcjpcIlwiLHBsYXRmb3JtOlwiXCJ9LEJlPXR5cGVvZiBkb2N1bWVudDxcInVcIj9kb2N1bWVudDp7ZG9jdW1lbnRFbGVtZW50OntzdHlsZTp7fX19LFBlPS9FZGdlXFwvKFxcZCspLy5leGVjKHoudXNlckFnZW50KSxicz0vTVNJRSBcXGQvLnRlc3Qoei51c2VyQWdlbnQpLEhlPS9UcmlkZW50XFwvKD86WzctOV18XFxkezIsfSlcXC4uKnJ2OihcXGQrKS8uZXhlYyh6LnVzZXJBZ2VudCksU2U9ISEoYnN8fEhlfHxQZSksa2k9IVNlJiYvZ2Vja29cXC8oXFxkKykvaS50ZXN0KHoudXNlckFnZW50KSxNZT0hU2UmJi9DaHJvbWVcXC8oXFxkKykvLmV4ZWMoei51c2VyQWdlbnQpLEFpPVwid2Via2l0Rm9udFNtb290aGluZ1wiaW4gQmUuZG9jdW1lbnRFbGVtZW50LnN0eWxlLHlzPSFTZSYmL0FwcGxlIENvbXB1dGVyLy50ZXN0KHoudmVuZG9yKSxEaT15cyYmKC9Nb2JpbGVcXC9cXHcrLy50ZXN0KHoudXNlckFnZW50KXx8ei5tYXhUb3VjaFBvaW50cz4yKSx5PXttYWM6RGl8fC9NYWMvLnRlc3Qoei5wbGF0Zm9ybSksd2luZG93czovV2luLy50ZXN0KHoucGxhdGZvcm0pLGxpbnV4Oi9MaW51eHxYMTEvLnRlc3Qoei5wbGF0Zm9ybSksaWU6U2UsaWVfdmVyc2lvbjpicz9CZS5kb2N1bWVudE1vZGV8fDY6SGU/K0hlWzFdOlBlPytQZVsxXTowLGdlY2tvOmtpLGdlY2tvX3ZlcnNpb246a2k/KygvRmlyZWZveFxcLyhcXGQrKS8uZXhlYyh6LnVzZXJBZ2VudCl8fFswLDBdKVsxXTowLGNocm9tZTohIU1lLGNocm9tZV92ZXJzaW9uOk1lPytNZVsxXTowLGlvczpEaSxhbmRyb2lkOi9BbmRyb2lkXFxiLy50ZXN0KHoudXNlckFnZW50KSx3ZWJraXQ6QWksc2FmYXJpOnlzLHdlYmtpdF92ZXJzaW9uOkFpPysoL1xcYkFwcGxlV2ViS2l0XFwvKFxcZCspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpfHxbMCwwXSlbMV06MCx0YWJTaXplOkJlLmRvY3VtZW50RWxlbWVudC5zdHlsZS50YWJTaXplIT1udWxsP1widGFiLXNpemVcIjpcIi1tb3otdGFiLXNpemVcIn0seG49MjU2LCQ9Y2xhc3MgZXh0ZW5kcyBBe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50ZXh0PXR9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnRleHQubGVuZ3RofWNyZWF0ZURPTSh0KXt0aGlzLnNldERPTSh0fHxkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLnRleHQpKX1zeW5jKHQpe3RoaXMuZG9tfHx0aGlzLmNyZWF0ZURPTSgpLHRoaXMuZG9tLm5vZGVWYWx1ZSE9dGhpcy50ZXh0JiYodCYmdC5ub2RlPT10aGlzLmRvbSYmKHQud3JpdHRlbj0hMCksdGhpcy5kb20ubm9kZVZhbHVlPXRoaXMudGV4dCl9cmV1c2VET00odCl7dC5ub2RlVHlwZT09MyYmdGhpcy5jcmVhdGVET00odCl9bWVyZ2UodCxlLGkpe3JldHVybiBpJiYoIShpIGluc3RhbmNlb2YgJCl8fHRoaXMubGVuZ3RoLShlLXQpK2kubGVuZ3RoPnhuKT8hMToodGhpcy50ZXh0PXRoaXMudGV4dC5zbGljZSgwLHQpKyhpP2kudGV4dDpcIlwiKSt0aGlzLnRleHQuc2xpY2UoZSksdGhpcy5tYXJrRGlydHkoKSwhMCl9c3BsaXQodCl7bGV0IGU9bmV3ICQodGhpcy50ZXh0LnNsaWNlKHQpKTtyZXR1cm4gdGhpcy50ZXh0PXRoaXMudGV4dC5zbGljZSgwLHQpLHRoaXMubWFya0RpcnR5KCksZX1sb2NhbFBvc0Zyb21ET00odCxlKXtyZXR1cm4gdD09dGhpcy5kb20/ZTplP3RoaXMudGV4dC5sZW5ndGg6MH1kb21BdFBvcyh0KXtyZXR1cm4gbmV3IEIodGhpcy5kb20sdCl9ZG9tQm91bmRzQXJvdW5kKHQsZSxpKXtyZXR1cm57ZnJvbTppLHRvOmkrdGhpcy5sZW5ndGgsc3RhcnRET006dGhpcy5kb20sZW5kRE9NOnRoaXMuZG9tLm5leHRTaWJsaW5nfX1jb29yZHNBdCh0LGUpe3JldHVybiBOZSh0aGlzLmRvbSx0LGUpfX0scT1jbGFzcyBleHRlbmRzIEF7Y29uc3RydWN0b3IodCxlPVtdLGk9MCl7c3VwZXIoKSx0aGlzLm1hcms9dCx0aGlzLmNoaWxkcmVuPWUsdGhpcy5sZW5ndGg9aTtmb3IobGV0IG4gb2YgZSluLnNldFBhcmVudCh0aGlzKX1zZXRBdHRycyh0KXtpZihwcyh0KSx0aGlzLm1hcmsuY2xhc3MmJih0LmNsYXNzTmFtZT10aGlzLm1hcmsuY2xhc3MpLHRoaXMubWFyay5hdHRycylmb3IobGV0IGUgaW4gdGhpcy5tYXJrLmF0dHJzKXQuc2V0QXR0cmlidXRlKGUsdGhpcy5tYXJrLmF0dHJzW2VdKTtyZXR1cm4gdH1yZXVzZURPTSh0KXt0Lm5vZGVOYW1lPT10aGlzLm1hcmsudGFnTmFtZS50b1VwcGVyQ2FzZSgpJiYodGhpcy5zZXRET00odCksdGhpcy5kaXJ0eXw9Nil9c3luYyh0KXt0aGlzLmRvbT90aGlzLmRpcnR5JjQmJnRoaXMuc2V0QXR0cnModGhpcy5kb20pOnRoaXMuc2V0RE9NKHRoaXMuc2V0QXR0cnMoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm1hcmsudGFnTmFtZSkpKSxzdXBlci5zeW5jKHQpfW1lcmdlKHQsZSxpLG4scixvKXtyZXR1cm4gaSYmKCEoaSBpbnN0YW5jZW9mIHEmJmkubWFyay5lcSh0aGlzLm1hcmspKXx8dCYmcjw9MHx8ZTx0aGlzLmxlbmd0aCYmbzw9MCk/ITE6KGdzKHRoaXMsdCxlLGk/aS5jaGlsZHJlbjpbXSxyLTEsby0xKSx0aGlzLm1hcmtEaXJ0eSgpLCEwKX1zcGxpdCh0KXtsZXQgZT1bXSxpPTAsbj0tMSxyPTA7Zm9yKGxldCBsIG9mIHRoaXMuY2hpbGRyZW4pe2xldCBoPWkrbC5sZW5ndGg7aD50JiZlLnB1c2goaTx0P2wuc3BsaXQodC1pKTpsKSxuPDAmJmk+PXQmJihuPXIpLGk9aCxyKyt9bGV0IG89dGhpcy5sZW5ndGgtdDtyZXR1cm4gdGhpcy5sZW5ndGg9dCxuPi0xJiYodGhpcy5jaGlsZHJlbi5sZW5ndGg9bix0aGlzLm1hcmtEaXJ0eSgpKSxuZXcgcSh0aGlzLm1hcmssZSxvKX1kb21BdFBvcyh0KXtyZXR1cm4gdnModGhpcyx0KX1jb29yZHNBdCh0LGUpe3JldHVybiBTcyh0aGlzLHQsZSl9fTtmdW5jdGlvbiBOZShzLHQsZSl7bGV0IGk9cy5ub2RlVmFsdWUubGVuZ3RoO3Q+aSYmKHQ9aSk7bGV0IG49dCxyPXQsbz0wO3Q9PTAmJmU8MHx8dD09aSYmZT49MD95LmNocm9tZXx8eS5nZWNrb3x8KHQ/KG4tLSxvPTEpOnI8aSYmKHIrKyxvPS0xKSk6ZTwwP24tLTpyPGkmJnIrKztsZXQgbD13dChzLG4scikuZ2V0Q2xpZW50UmVjdHMoKTtpZighbC5sZW5ndGgpcmV0dXJuIGRzO2xldCBoPWxbKG8/bzwwOmU+PTApPzA6bC5sZW5ndGgtMV07cmV0dXJuIHkuc2FmYXJpJiYhbyYmaC53aWR0aD09MCYmKGg9QXJyYXkucHJvdG90eXBlLmZpbmQuY2FsbChsLGE9PmEud2lkdGgpfHxoKSxvP3hlKGgsbzwwKTpofHxudWxsfXZhciBqPWNsYXNzIGV4dGVuZHMgQXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLndpZGdldD10LHRoaXMubGVuZ3RoPWUsdGhpcy5zaWRlPWksdGhpcy5wcmV2V2lkZ2V0PW51bGx9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIG5ldyh0LmN1c3RvbVZpZXd8fGopKHQsZSxpKX1zcGxpdCh0KXtsZXQgZT1qLmNyZWF0ZSh0aGlzLndpZGdldCx0aGlzLmxlbmd0aC10LHRoaXMuc2lkZSk7cmV0dXJuIHRoaXMubGVuZ3RoLT10LGV9c3luYygpeyghdGhpcy5kb218fCF0aGlzLndpZGdldC51cGRhdGVET00odGhpcy5kb20pKSYmKHRoaXMuZG9tJiZ0aGlzLnByZXZXaWRnZXQmJnRoaXMucHJldldpZGdldC5kZXN0cm95KHRoaXMuZG9tKSx0aGlzLnByZXZXaWRnZXQ9bnVsbCx0aGlzLnNldERPTSh0aGlzLndpZGdldC50b0RPTSh0aGlzLmVkaXRvclZpZXcpKSx0aGlzLmRvbS5jb250ZW50RWRpdGFibGU9XCJmYWxzZVwiKX1nZXRTaWRlKCl7cmV0dXJuIHRoaXMuc2lkZX1tZXJnZSh0LGUsaSxuLHIsbyl7cmV0dXJuIGkmJighKGkgaW5zdGFuY2VvZiBqKXx8IXRoaXMud2lkZ2V0LmNvbXBhcmUoaS53aWRnZXQpfHx0PjAmJnI8PTB8fGU8dGhpcy5sZW5ndGgmJm88PTApPyExOih0aGlzLmxlbmd0aD10KyhpP2kubGVuZ3RoOjApKyh0aGlzLmxlbmd0aC1lKSwhMCl9YmVjb21lKHQpe3JldHVybiB0Lmxlbmd0aD09dGhpcy5sZW5ndGgmJnQgaW5zdGFuY2VvZiBqJiZ0LnNpZGU9PXRoaXMuc2lkZSYmdGhpcy53aWRnZXQuY29uc3RydWN0b3I9PXQud2lkZ2V0LmNvbnN0cnVjdG9yPyh0aGlzLndpZGdldC5lcSh0LndpZGdldCl8fHRoaXMubWFya0RpcnR5KCEwKSx0aGlzLmRvbSYmIXRoaXMucHJldldpZGdldCYmKHRoaXMucHJldldpZGdldD10aGlzLndpZGdldCksdGhpcy53aWRnZXQ9dC53aWRnZXQsITApOiExfWlnbm9yZU11dGF0aW9uKCl7cmV0dXJuITB9aWdub3JlRXZlbnQodCl7cmV0dXJuIHRoaXMud2lkZ2V0Lmlnbm9yZUV2ZW50KHQpfWdldCBvdmVycmlkZURPTVRleHQoKXtpZih0aGlzLmxlbmd0aD09MClyZXR1cm4gb3QuZW1wdHk7bGV0IHQ9dGhpcztmb3IoO3QucGFyZW50Oyl0PXQucGFyZW50O2xldCBlPXQuZWRpdG9yVmlldyxpPWUmJmUuc3RhdGUuZG9jLG49dGhpcy5wb3NBdFN0YXJ0O3JldHVybiBpP2kuc2xpY2UobixuK3RoaXMubGVuZ3RoKTpvdC5lbXB0eX1kb21BdFBvcyh0KXtyZXR1cm4gdD09MD9CLmJlZm9yZSh0aGlzLmRvbSk6Qi5hZnRlcih0aGlzLmRvbSx0PT10aGlzLmxlbmd0aCl9ZG9tQm91bmRzQXJvdW5kKCl7cmV0dXJuIG51bGx9Y29vcmRzQXQodCxlKXtsZXQgaT10aGlzLmRvbS5nZXRDbGllbnRSZWN0cygpLG49bnVsbDtpZighaS5sZW5ndGgpcmV0dXJuIGRzO2ZvcihsZXQgcj10PjA/aS5sZW5ndGgtMTowO249aVtyXSwhKHQ+MD9yPT0wOnI9PWkubGVuZ3RoLTF8fG4udG9wPG4uYm90dG9tKTtyKz10PjA/LTE6MSk7cmV0dXJuIHQ9PTAmJmU+MHx8dD09dGhpcy5sZW5ndGgmJmU8PTA/bjp4ZShuLHQ9PTApfWdldCBpc0VkaXRhYmxlKCl7cmV0dXJuITF9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKSx0aGlzLmRvbSYmdGhpcy53aWRnZXQuZGVzdHJveSh0aGlzLmRvbSl9fSxsZT1jbGFzcyBleHRlbmRzIGp7ZG9tQXRQb3ModCl7bGV0e3RvcFZpZXc6ZSx0ZXh0Oml9PXRoaXMud2lkZ2V0O3JldHVybiBlP1ZlKHQsMCxlLGksKG4scik9Pm4uZG9tQXRQb3Mociksbj0+bmV3IEIoaSxNYXRoLm1pbihuLGkubm9kZVZhbHVlLmxlbmd0aCkpKTpuZXcgQihpLE1hdGgubWluKHQsaS5ub2RlVmFsdWUubGVuZ3RoKSl9c3luYygpe3RoaXMuc2V0RE9NKHRoaXMud2lkZ2V0LnRvRE9NKCkpfWxvY2FsUG9zRnJvbURPTSh0LGUpe2xldHt0b3BWaWV3OmksdGV4dDpufT10aGlzLndpZGdldDtyZXR1cm4gaT93cyh0LGUsaSxuKTpNYXRoLm1pbihlLHRoaXMubGVuZ3RoKX1pZ25vcmVNdXRhdGlvbigpe3JldHVybiExfWdldCBvdmVycmlkZURPTVRleHQoKXtyZXR1cm4gbnVsbH1jb29yZHNBdCh0LGUpe2xldHt0b3BWaWV3OmksdGV4dDpufT10aGlzLndpZGdldDtyZXR1cm4gaT9WZSh0LGUsaSxuLChyLG8sbCk9PnIuY29vcmRzQXQobyxsKSwocixvKT0+TmUobixyLG8pKTpOZShuLHQsZSl9ZGVzdHJveSgpe3ZhciB0O3N1cGVyLmRlc3Ryb3koKSwodD10aGlzLndpZGdldC50b3BWaWV3KT09PW51bGx8fHQ9PT12b2lkIDB8fHQuZGVzdHJveSgpfWdldCBpc0VkaXRhYmxlKCl7cmV0dXJuITB9Y2FuUmV1c2VET00oKXtyZXR1cm4hMH19O2Z1bmN0aW9uIFZlKHMsdCxlLGksbixyKXtpZihlIGluc3RhbmNlb2YgcSl7Zm9yKGxldCBvPWUuZG9tLmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpe2xldCBsPUEuZ2V0KG8pO2lmKCFsKXJldHVybiByKHMsdCk7bGV0IGg9eXQobyxpKSxhPWwubGVuZ3RoKyhoP2kubm9kZVZhbHVlLmxlbmd0aDowKTtpZihzPGF8fHM9PWEmJmwuZ2V0U2lkZSgpPD0wKXJldHVybiBoP1ZlKHMsdCxsLGksbixyKTpuKGwscyx0KTtzLT1hfXJldHVybiBuKGUsZS5sZW5ndGgsLTEpfWVsc2UgcmV0dXJuIGUuZG9tPT1pP3Iocyx0KTpuKGUscyx0KX1mdW5jdGlvbiB3cyhzLHQsZSxpKXtpZihlIGluc3RhbmNlb2YgcSlmb3IobGV0IG4gb2YgZS5jaGlsZHJlbil7bGV0IHI9MCxvPXl0KG4uZG9tLGkpO2lmKHl0KG4uZG9tLHMpKXJldHVybiByKyhvP3dzKHMsdCxuLGkpOm4ubG9jYWxQb3NGcm9tRE9NKHMsdCkpO3IrPW8/aS5ub2RlVmFsdWUubGVuZ3RoOm4ubGVuZ3RofWVsc2UgaWYoZS5kb209PWkpcmV0dXJuIE1hdGgubWluKHQsaS5ub2RlVmFsdWUubGVuZ3RoKTtyZXR1cm4gZS5sb2NhbFBvc0Zyb21ET00ocyx0KX12YXIgbHQ9Y2xhc3MgZXh0ZW5kcyBBe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5zaWRlPXR9Z2V0IGxlbmd0aCgpe3JldHVybiAwfW1lcmdlKCl7cmV0dXJuITF9YmVjb21lKHQpe3JldHVybiB0IGluc3RhbmNlb2YgbHQmJnQuc2lkZT09dGhpcy5zaWRlfXNwbGl0KCl7cmV0dXJuIG5ldyBsdCh0aGlzLnNpZGUpfXN5bmMoKXtpZighdGhpcy5kb20pe2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7dC5jbGFzc05hbWU9XCJjbS13aWRnZXRCdWZmZXJcIix0LnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLHRoaXMuc2V0RE9NKHQpfX1nZXRTaWRlKCl7cmV0dXJuIHRoaXMuc2lkZX1kb21BdFBvcyh0KXtyZXR1cm4gQi5iZWZvcmUodGhpcy5kb20pfWxvY2FsUG9zRnJvbURPTSgpe3JldHVybiAwfWRvbUJvdW5kc0Fyb3VuZCgpe3JldHVybiBudWxsfWNvb3Jkc0F0KHQpe2xldCBlPXRoaXMuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9U24odGhpcyx0aGlzLnNpZGU+MD8tMToxKTtyZXR1cm4gaSYmaS50b3A8ZS5ib3R0b20mJmkuYm90dG9tPmUudG9wP3tsZWZ0OmUubGVmdCxyaWdodDplLnJpZ2h0LHRvcDppLnRvcCxib3R0b206aS5ib3R0b219OmV9Z2V0IG92ZXJyaWRlRE9NVGV4dCgpe3JldHVybiBvdC5lbXB0eX19OyQucHJvdG90eXBlLmNoaWxkcmVuPWoucHJvdG90eXBlLmNoaWxkcmVuPWx0LnByb3RvdHlwZS5jaGlsZHJlbj1iaTtmdW5jdGlvbiBTbihzLHQpe2xldCBlPXMucGFyZW50LGk9ZT9lLmNoaWxkcmVuLmluZGV4T2Yocyk6LTE7Zm9yKDtlJiZpPj0wOylpZih0PDA/aT4wOmk8ZS5jaGlsZHJlbi5sZW5ndGgpe2xldCBuPWUuY2hpbGRyZW5baSt0XTtpZihuIGluc3RhbmNlb2YgJCl7bGV0IHI9bi5jb29yZHNBdCh0PDA/bi5sZW5ndGg6MCx0KTtpZihyKXJldHVybiByfWkrPXR9ZWxzZSBpZihlIGluc3RhbmNlb2YgcSYmZS5wYXJlbnQpaT1lLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKGUpKyh0PDA/MDoxKSxlPWUucGFyZW50O2Vsc2V7bGV0IG49ZS5kb20ubGFzdENoaWxkO2lmKG4mJm4ubm9kZU5hbWU9PVwiQlJcIilyZXR1cm4gbi5nZXRDbGllbnRSZWN0cygpWzBdO2JyZWFrfX1mdW5jdGlvbiB2cyhzLHQpe2xldCBlPXMuZG9tLHtjaGlsZHJlbjppfT1zLG49MDtmb3IobGV0IHI9MDtuPGkubGVuZ3RoO24rKyl7bGV0IG89aVtuXSxsPXIrby5sZW5ndGg7aWYoIShsPT1yJiZvLmdldFNpZGUoKTw9MCkpe2lmKHQ+ciYmdDxsJiZvLmRvbS5wYXJlbnROb2RlPT1lKXJldHVybiBvLmRvbUF0UG9zKHQtcik7aWYodDw9cilicmVhaztyPWx9fWZvcihsZXQgcj1uO3I+MDtyLS0pe2xldCBvPWlbci0xXTtpZihvLmRvbS5wYXJlbnROb2RlPT1lKXJldHVybiBvLmRvbUF0UG9zKG8ubGVuZ3RoKX1mb3IobGV0IHI9bjtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aVtyXTtpZihvLmRvbS5wYXJlbnROb2RlPT1lKXJldHVybiBvLmRvbUF0UG9zKDApfXJldHVybiBuZXcgQihlLDApfWZ1bmN0aW9uIHhzKHMsdCxlKXtsZXQgaSx7Y2hpbGRyZW46bn09cztlPjAmJnQgaW5zdGFuY2VvZiBxJiZuLmxlbmd0aCYmKGk9bltuLmxlbmd0aC0xXSlpbnN0YW5jZW9mIHEmJmkubWFyay5lcSh0Lm1hcmspP3hzKGksdC5jaGlsZHJlblswXSxlLTEpOihuLnB1c2godCksdC5zZXRQYXJlbnQocykpLHMubGVuZ3RoKz10Lmxlbmd0aH1mdW5jdGlvbiBTcyhzLHQsZSl7Zm9yKGxldCByPTAsbz0wO288cy5jaGlsZHJlbi5sZW5ndGg7bysrKXtsZXQgbD1zLmNoaWxkcmVuW29dLGg9citsLmxlbmd0aCxhO2lmKChlPD0wfHxoPT1zLmxlbmd0aHx8bC5nZXRTaWRlKCk+MD9oPj10Omg+dCkmJih0PGh8fG8rMT09cy5jaGlsZHJlbi5sZW5ndGh8fChhPXMuY2hpbGRyZW5bbysxXSkubGVuZ3RofHxhLmdldFNpZGUoKT4wKSl7bGV0IGM9MDtpZihoPT1yKXtpZihsLmdldFNpZGUoKTw9MCljb250aW51ZTtjPWU9LWwuZ2V0U2lkZSgpfWxldCBmPWwuY29vcmRzQXQoTWF0aC5tYXgoMCx0LXIpLGUpO3JldHVybiBjJiZmP3hlKGYsZTwwKTpmfXI9aH1sZXQgaT1zLmRvbS5sYXN0Q2hpbGQ7aWYoIWkpcmV0dXJuIHMuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBuPVZ0KGkpO3JldHVybiBuW24ubGVuZ3RoLTFdfHxudWxsfWZ1bmN0aW9uIFdlKHMsdCl7Zm9yKGxldCBlIGluIHMpZT09XCJjbGFzc1wiJiZ0LmNsYXNzP3QuY2xhc3MrPVwiIFwiK3MuY2xhc3M6ZT09XCJzdHlsZVwiJiZ0LnN0eWxlP3Quc3R5bGUrPVwiO1wiK3Muc3R5bGU6dFtlXT1zW2VdO3JldHVybiB0fWZ1bmN0aW9uIHlpKHMsdCl7aWYocz09dClyZXR1cm4hMDtpZighc3x8IXQpcmV0dXJuITE7bGV0IGU9T2JqZWN0LmtleXMocyksaT1PYmplY3Qua2V5cyh0KTtpZihlLmxlbmd0aCE9aS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBuIG9mIGUpaWYoaS5pbmRleE9mKG4pPT0tMXx8c1tuXSE9PXRbbl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gRmUocyx0LGUpe2xldCBpPW51bGw7aWYodClmb3IobGV0IG4gaW4gdCllJiZuIGluIGV8fHMucmVtb3ZlQXR0cmlidXRlKGk9bik7aWYoZSlmb3IobGV0IG4gaW4gZSl0JiZ0W25dPT1lW25dfHxzLnNldEF0dHJpYnV0ZShpPW4sZVtuXSk7cmV0dXJuISFpfXZhciBYPWNsYXNze2VxKHQpe3JldHVybiExfXVwZGF0ZURPTSh0KXtyZXR1cm4hMX1jb21wYXJlKHQpe3JldHVybiB0aGlzPT10fHx0aGlzLmNvbnN0cnVjdG9yPT10LmNvbnN0cnVjdG9yJiZ0aGlzLmVxKHQpfWdldCBlc3RpbWF0ZWRIZWlnaHQoKXtyZXR1cm4tMX1pZ25vcmVFdmVudCh0KXtyZXR1cm4hMH1nZXQgY3VzdG9tVmlldygpe3JldHVybiBudWxsfWRlc3Ryb3kodCl7fX0sVD1mdW5jdGlvbihzKXtyZXR1cm4gc1tzLlRleHQ9MF09XCJUZXh0XCIsc1tzLldpZGdldEJlZm9yZT0xXT1cIldpZGdldEJlZm9yZVwiLHNbcy5XaWRnZXRBZnRlcj0yXT1cIldpZGdldEFmdGVyXCIsc1tzLldpZGdldFJhbmdlPTNdPVwiV2lkZ2V0UmFuZ2VcIixzfShUfHwoVD17fSkpLGs9Y2xhc3MgZXh0ZW5kcyBsc3tjb25zdHJ1Y3Rvcih0LGUsaSxuKXtzdXBlcigpLHRoaXMuc3RhcnRTaWRlPXQsdGhpcy5lbmRTaWRlPWUsdGhpcy53aWRnZXQ9aSx0aGlzLnNwZWM9bn1nZXQgaGVpZ2h0UmVsZXZhbnQoKXtyZXR1cm4hMX1zdGF0aWMgbWFyayh0KXtyZXR1cm4gbmV3IHZ0KHQpfXN0YXRpYyB3aWRnZXQodCl7bGV0IGU9dC5zaWRlfHwwLGk9ISF0LmJsb2NrO3JldHVybiBlKz1pP2U+MD8zZTg6LTRlODplPjA/MWU4Oi0xZTgsbmV3IFUodCxlLGUsaSx0LndpZGdldHx8bnVsbCwhMSl9c3RhdGljIHJlcGxhY2UodCl7bGV0IGU9ISF0LmJsb2NrLGksbjtpZih0LmlzQmxvY2tHYXApaT0tNWU4LG49NGU4O2Vsc2V7bGV0e3N0YXJ0OnIsZW5kOm99PUNzKHQsZSk7aT0ocj9lPy0zZTg6LTE6NWU4KS0xLG49KG8/ZT8yZTg6MTotNmU4KSsxfXJldHVybiBuZXcgVSh0LGksbixlLHQud2lkZ2V0fHxudWxsLCEwKX1zdGF0aWMgbGluZSh0KXtyZXR1cm4gbmV3IGN0KHQpfXN0YXRpYyBzZXQodCxlPSExKXtyZXR1cm4gRi5vZih0LGUpfWhhc0hlaWdodCgpe3JldHVybiB0aGlzLndpZGdldD90aGlzLndpZGdldC5lc3RpbWF0ZWRIZWlnaHQ+LTE6ITF9fTtrLm5vbmU9Ri5lbXB0eTt2YXIgdnQ9Y2xhc3MgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKHQpe2xldHtzdGFydDplLGVuZDppfT1Dcyh0KTtzdXBlcihlPy0xOjVlOCxpPzE6LTZlOCxudWxsLHQpLHRoaXMudGFnTmFtZT10LnRhZ05hbWV8fFwic3BhblwiLHRoaXMuY2xhc3M9dC5jbGFzc3x8XCJcIix0aGlzLmF0dHJzPXQuYXR0cmlidXRlc3x8bnVsbH1lcSh0KXtyZXR1cm4gdGhpcz09dHx8dCBpbnN0YW5jZW9mIHZ0JiZ0aGlzLnRhZ05hbWU9PXQudGFnTmFtZSYmdGhpcy5jbGFzcz09dC5jbGFzcyYmeWkodGhpcy5hdHRycyx0LmF0dHJzKX1yYW5nZSh0LGU9dCl7aWYodD49ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk1hcmsgZGVjb3JhdGlvbnMgbWF5IG5vdCBiZSBlbXB0eVwiKTtyZXR1cm4gc3VwZXIucmFuZ2UodCxlKX19O3Z0LnByb3RvdHlwZS5wb2ludD0hMTt2YXIgY3Q9Y2xhc3MgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKHQpe3N1cGVyKC0yZTgsLTJlOCxudWxsLHQpfWVxKHQpe3JldHVybiB0IGluc3RhbmNlb2YgY3QmJnlpKHRoaXMuc3BlYy5hdHRyaWJ1dGVzLHQuc3BlYy5hdHRyaWJ1dGVzKX1yYW5nZSh0LGU9dCl7aWYoZSE9dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkxpbmUgZGVjb3JhdGlvbiByYW5nZXMgbXVzdCBiZSB6ZXJvLWxlbmd0aFwiKTtyZXR1cm4gc3VwZXIucmFuZ2UodCxlKX19O2N0LnByb3RvdHlwZS5tYXBNb2RlPWd0LlRyYWNrQmVmb3JlO2N0LnByb3RvdHlwZS5wb2ludD0hMDt2YXIgVT1jbGFzcyBleHRlbmRzIGt7Y29uc3RydWN0b3IodCxlLGksbixyLG8pe3N1cGVyKGUsaSxyLHQpLHRoaXMuYmxvY2s9bix0aGlzLmlzUmVwbGFjZT1vLHRoaXMubWFwTW9kZT1uP2U8PTA/Z3QuVHJhY2tCZWZvcmU6Z3QuVHJhY2tBZnRlcjpndC5UcmFja0RlbH1nZXQgdHlwZSgpe3JldHVybiB0aGlzLnN0YXJ0U2lkZTx0aGlzLmVuZFNpZGU/VC5XaWRnZXRSYW5nZTp0aGlzLnN0YXJ0U2lkZTw9MD9ULldpZGdldEJlZm9yZTpULldpZGdldEFmdGVyfWdldCBoZWlnaHRSZWxldmFudCgpe3JldHVybiB0aGlzLmJsb2NrfHwhIXRoaXMud2lkZ2V0JiZ0aGlzLndpZGdldC5lc3RpbWF0ZWRIZWlnaHQ+PTV9ZXEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVJiZDbih0aGlzLndpZGdldCx0LndpZGdldCkmJnRoaXMuYmxvY2s9PXQuYmxvY2smJnRoaXMuc3RhcnRTaWRlPT10LnN0YXJ0U2lkZSYmdGhpcy5lbmRTaWRlPT10LmVuZFNpZGV9cmFuZ2UodCxlPXQpe2lmKHRoaXMuaXNSZXBsYWNlJiYodD5lfHx0PT1lJiZ0aGlzLnN0YXJ0U2lkZT4wJiZ0aGlzLmVuZFNpZGU8PTApKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCByYW5nZSBmb3IgcmVwbGFjZW1lbnQgZGVjb3JhdGlvblwiKTtpZighdGhpcy5pc1JlcGxhY2UmJmUhPXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJXaWRnZXQgZGVjb3JhdGlvbnMgY2FuIG9ubHkgaGF2ZSB6ZXJvLWxlbmd0aCByYW5nZXNcIik7cmV0dXJuIHN1cGVyLnJhbmdlKHQsZSl9fTtVLnByb3RvdHlwZS5wb2ludD0hMDtmdW5jdGlvbiBDcyhzLHQ9ITEpe2xldHtpbmNsdXNpdmVTdGFydDplLGluY2x1c2l2ZUVuZDppfT1zO3JldHVybiBlPT1udWxsJiYoZT1zLmluY2x1c2l2ZSksaT09bnVsbCYmKGk9cy5pbmNsdXNpdmUpLHtzdGFydDplPz90LGVuZDppPz90fX1mdW5jdGlvbiBDbihzLHQpe3JldHVybiBzPT10fHwhIShzJiZ0JiZzLmNvbXBhcmUodCkpfWZ1bmN0aW9uIHplKHMsdCxlLGk9MCl7bGV0IG49ZS5sZW5ndGgtMTtuPj0wJiZlW25dK2k+PXM/ZVtuXT1NYXRoLm1heChlW25dLHQpOmUucHVzaChzLHQpfXZhciBIPWNsYXNzIGV4dGVuZHMgQXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jaGlsZHJlbj1bXSx0aGlzLmxlbmd0aD0wLHRoaXMucHJldkF0dHJzPXZvaWQgMCx0aGlzLmF0dHJzPW51bGwsdGhpcy5icmVha0FmdGVyPTB9bWVyZ2UodCxlLGksbixyLG8pe2lmKGkpe2lmKCEoaSBpbnN0YW5jZW9mIEgpKXJldHVybiExO3RoaXMuZG9tfHxpLnRyYW5zZmVyRE9NKHRoaXMpfXJldHVybiBuJiZ0aGlzLnNldERlY28oaT9pLmF0dHJzOm51bGwpLGdzKHRoaXMsdCxlLGk/aS5jaGlsZHJlbjpbXSxyLG8pLCEwfXNwbGl0KHQpe2xldCBlPW5ldyBIO2lmKGUuYnJlYWtBZnRlcj10aGlzLmJyZWFrQWZ0ZXIsdGhpcy5sZW5ndGg9PTApcmV0dXJuIGU7bGV0e2ksb2ZmOm59PXRoaXMuY2hpbGRQb3ModCk7biYmKGUuYXBwZW5kKHRoaXMuY2hpbGRyZW5baV0uc3BsaXQobiksMCksdGhpcy5jaGlsZHJlbltpXS5tZXJnZShuLHRoaXMuY2hpbGRyZW5baV0ubGVuZ3RoLG51bGwsITEsMCwwKSxpKyspO2ZvcihsZXQgcj1pO3I8dGhpcy5jaGlsZHJlbi5sZW5ndGg7cisrKWUuYXBwZW5kKHRoaXMuY2hpbGRyZW5bcl0sMCk7Zm9yKDtpPjAmJnRoaXMuY2hpbGRyZW5baS0xXS5sZW5ndGg9PTA7KXRoaXMuY2hpbGRyZW5bLS1pXS5kZXN0cm95KCk7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPWksdGhpcy5tYXJrRGlydHkoKSx0aGlzLmxlbmd0aD10LGV9dHJhbnNmZXJET00odCl7IXRoaXMuZG9tfHwodGhpcy5tYXJrRGlydHkoKSx0LnNldERPTSh0aGlzLmRvbSksdC5wcmV2QXR0cnM9dGhpcy5wcmV2QXR0cnM9PT12b2lkIDA/dGhpcy5hdHRyczp0aGlzLnByZXZBdHRycyx0aGlzLnByZXZBdHRycz12b2lkIDAsdGhpcy5kb209bnVsbCl9c2V0RGVjbyh0KXt5aSh0aGlzLmF0dHJzLHQpfHwodGhpcy5kb20mJih0aGlzLnByZXZBdHRycz10aGlzLmF0dHJzLHRoaXMubWFya0RpcnR5KCkpLHRoaXMuYXR0cnM9dCl9YXBwZW5kKHQsZSl7eHModGhpcyx0LGUpfWFkZExpbmVEZWNvKHQpe2xldCBlPXQuc3BlYy5hdHRyaWJ1dGVzLGk9dC5zcGVjLmNsYXNzO2UmJih0aGlzLmF0dHJzPVdlKGUsdGhpcy5hdHRyc3x8e30pKSxpJiYodGhpcy5hdHRycz1XZSh7Y2xhc3M6aX0sdGhpcy5hdHRyc3x8e30pKX1kb21BdFBvcyh0KXtyZXR1cm4gdnModGhpcyx0KX1yZXVzZURPTSh0KXt0Lm5vZGVOYW1lPT1cIkRJVlwiJiYodGhpcy5zZXRET00odCksdGhpcy5kaXJ0eXw9Nil9c3luYyh0KXt2YXIgZTt0aGlzLmRvbT90aGlzLmRpcnR5JjQmJihwcyh0aGlzLmRvbSksdGhpcy5kb20uY2xhc3NOYW1lPVwiY20tbGluZVwiLHRoaXMucHJldkF0dHJzPXRoaXMuYXR0cnM/bnVsbDp2b2lkIDApOih0aGlzLnNldERPTShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSx0aGlzLmRvbS5jbGFzc05hbWU9XCJjbS1saW5lXCIsdGhpcy5wcmV2QXR0cnM9dGhpcy5hdHRycz9udWxsOnZvaWQgMCksdGhpcy5wcmV2QXR0cnMhPT12b2lkIDAmJihGZSh0aGlzLmRvbSx0aGlzLnByZXZBdHRycyx0aGlzLmF0dHJzKSx0aGlzLmRvbS5jbGFzc0xpc3QuYWRkKFwiY20tbGluZVwiKSx0aGlzLnByZXZBdHRycz12b2lkIDApLHN1cGVyLnN5bmModCk7bGV0IGk9dGhpcy5kb20ubGFzdENoaWxkO2Zvcig7aSYmQS5nZXQoaSlpbnN0YW5jZW9mIHE7KWk9aS5sYXN0Q2hpbGQ7aWYoIWl8fCF0aGlzLmxlbmd0aHx8aS5ub2RlTmFtZSE9XCJCUlwiJiYoKGU9QS5nZXQoaSkpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5pc0VkaXRhYmxlKT09ITEmJigheS5pb3N8fCF0aGlzLmNoaWxkcmVuLnNvbWUobj0+biBpbnN0YW5jZW9mICQpKSl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkJSXCIpO24uY21JZ25vcmU9ITAsdGhpcy5kb20uYXBwZW5kQ2hpbGQobil9fW1lYXN1cmVUZXh0U2l6ZSgpe2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPT0wfHx0aGlzLmxlbmd0aD4yMClyZXR1cm4gbnVsbDtsZXQgdD0wO2ZvcihsZXQgZSBvZiB0aGlzLmNoaWxkcmVuKXtpZighKGUgaW5zdGFuY2VvZiAkKXx8L1teIC1+XS8udGVzdChlLnRleHQpKXJldHVybiBudWxsO2xldCBpPVZ0KGUuZG9tKTtpZihpLmxlbmd0aCE9MSlyZXR1cm4gbnVsbDt0Kz1pWzBdLndpZHRofXJldHVybiB0P3tsaW5lSGVpZ2h0OnRoaXMuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxjaGFyV2lkdGg6dC90aGlzLmxlbmd0aH06bnVsbH1jb29yZHNBdCh0LGUpe3JldHVybiBTcyh0aGlzLHQsZSl9YmVjb21lKHQpe3JldHVybiExfWdldCB0eXBlKCl7cmV0dXJuIFQuVGV4dH1zdGF0aWMgZmluZCh0LGUpe2ZvcihsZXQgaT0wLG49MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl7bGV0IHI9dC5jaGlsZHJlbltpXSxvPW4rci5sZW5ndGg7aWYobz49ZSl7aWYociBpbnN0YW5jZW9mIEgpcmV0dXJuIHI7aWYobz5lKWJyZWFrfW49bytyLmJyZWFrQWZ0ZXJ9cmV0dXJuIG51bGx9fSxZPWNsYXNzIGV4dGVuZHMgQXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLndpZGdldD10LHRoaXMubGVuZ3RoPWUsdGhpcy50eXBlPWksdGhpcy5icmVha0FmdGVyPTAsdGhpcy5wcmV2V2lkZ2V0PW51bGx9bWVyZ2UodCxlLGksbixyLG8pe3JldHVybiBpJiYoIShpIGluc3RhbmNlb2YgWSl8fCF0aGlzLndpZGdldC5jb21wYXJlKGkud2lkZ2V0KXx8dD4wJiZyPD0wfHxlPHRoaXMubGVuZ3RoJiZvPD0wKT8hMToodGhpcy5sZW5ndGg9dCsoaT9pLmxlbmd0aDowKSsodGhpcy5sZW5ndGgtZSksITApfWRvbUF0UG9zKHQpe3JldHVybiB0PT0wP0IuYmVmb3JlKHRoaXMuZG9tKTpCLmFmdGVyKHRoaXMuZG9tLHQ9PXRoaXMubGVuZ3RoKX1zcGxpdCh0KXtsZXQgZT10aGlzLmxlbmd0aC10O3RoaXMubGVuZ3RoPXQ7bGV0IGk9bmV3IFkodGhpcy53aWRnZXQsZSx0aGlzLnR5cGUpO3JldHVybiBpLmJyZWFrQWZ0ZXI9dGhpcy5icmVha0FmdGVyLGl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIGJpfXN5bmMoKXsoIXRoaXMuZG9tfHwhdGhpcy53aWRnZXQudXBkYXRlRE9NKHRoaXMuZG9tKSkmJih0aGlzLmRvbSYmdGhpcy5wcmV2V2lkZ2V0JiZ0aGlzLnByZXZXaWRnZXQuZGVzdHJveSh0aGlzLmRvbSksdGhpcy5wcmV2V2lkZ2V0PW51bGwsdGhpcy5zZXRET00odGhpcy53aWRnZXQudG9ET00odGhpcy5lZGl0b3JWaWV3KSksdGhpcy5kb20uY29udGVudEVkaXRhYmxlPVwiZmFsc2VcIil9Z2V0IG92ZXJyaWRlRE9NVGV4dCgpe3JldHVybiB0aGlzLnBhcmVudD90aGlzLnBhcmVudC52aWV3LnN0YXRlLmRvYy5zbGljZSh0aGlzLnBvc0F0U3RhcnQsdGhpcy5wb3NBdEVuZCk6b3QuZW1wdHl9ZG9tQm91bmRzQXJvdW5kKCl7cmV0dXJuIG51bGx9YmVjb21lKHQpe3JldHVybiB0IGluc3RhbmNlb2YgWSYmdC50eXBlPT10aGlzLnR5cGUmJnQud2lkZ2V0LmNvbnN0cnVjdG9yPT10aGlzLndpZGdldC5jb25zdHJ1Y3Rvcj8odC53aWRnZXQuZXEodGhpcy53aWRnZXQpfHx0aGlzLm1hcmtEaXJ0eSghMCksdGhpcy5kb20mJiF0aGlzLnByZXZXaWRnZXQmJih0aGlzLnByZXZXaWRnZXQ9dGhpcy53aWRnZXQpLHRoaXMud2lkZ2V0PXQud2lkZ2V0LHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMuYnJlYWtBZnRlcj10LmJyZWFrQWZ0ZXIsITApOiExfWlnbm9yZU11dGF0aW9uKCl7cmV0dXJuITB9aWdub3JlRXZlbnQodCl7cmV0dXJuIHRoaXMud2lkZ2V0Lmlnbm9yZUV2ZW50KHQpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCksdGhpcy5kb20mJnRoaXMud2lkZ2V0LmRlc3Ryb3kodGhpcy5kb20pfX0sRnQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGksbil7dGhpcy5kb2M9dCx0aGlzLnBvcz1lLHRoaXMuZW5kPWksdGhpcy5kaXNhbGxvd0Jsb2NrRWZmZWN0c0Zvcj1uLHRoaXMuY29udGVudD1bXSx0aGlzLmN1ckxpbmU9bnVsbCx0aGlzLmJyZWFrQXRTdGFydD0wLHRoaXMucGVuZGluZ0J1ZmZlcj0wLHRoaXMuYXRDdXJzb3JQb3M9ITAsdGhpcy5vcGVuU3RhcnQ9LTEsdGhpcy5vcGVuRW5kPS0xLHRoaXMudGV4dD1cIlwiLHRoaXMudGV4dE9mZj0wLHRoaXMuY3Vyc29yPXQuaXRlcigpLHRoaXMuc2tpcD1lfXBvc0NvdmVyZWQoKXtpZih0aGlzLmNvbnRlbnQubGVuZ3RoPT0wKXJldHVybiF0aGlzLmJyZWFrQXRTdGFydCYmdGhpcy5kb2MubGluZUF0KHRoaXMucG9zKS5mcm9tIT10aGlzLnBvcztsZXQgdD10aGlzLmNvbnRlbnRbdGhpcy5jb250ZW50Lmxlbmd0aC0xXTtyZXR1cm4hdC5icmVha0FmdGVyJiYhKHQgaW5zdGFuY2VvZiBZJiZ0LnR5cGU9PVQuV2lkZ2V0QmVmb3JlKX1nZXRMaW5lKCl7cmV0dXJuIHRoaXMuY3VyTGluZXx8KHRoaXMuY29udGVudC5wdXNoKHRoaXMuY3VyTGluZT1uZXcgSCksdGhpcy5hdEN1cnNvclBvcz0hMCksdGhpcy5jdXJMaW5lfWZsdXNoQnVmZmVyKHQpe3RoaXMucGVuZGluZ0J1ZmZlciYmKHRoaXMuY3VyTGluZS5hcHBlbmQoWXQobmV3IGx0KC0xKSx0KSx0Lmxlbmd0aCksdGhpcy5wZW5kaW5nQnVmZmVyPTApfWFkZEJsb2NrV2lkZ2V0KHQpe3RoaXMuZmx1c2hCdWZmZXIoW10pLHRoaXMuY3VyTGluZT1udWxsLHRoaXMuY29udGVudC5wdXNoKHQpfWZpbmlzaCh0KXt0P3RoaXMucGVuZGluZ0J1ZmZlcj0wOnRoaXMuZmx1c2hCdWZmZXIoW10pLHRoaXMucG9zQ292ZXJlZCgpfHx0aGlzLmdldExpbmUoKX1idWlsZFRleHQodCxlLGkpe2Zvcig7dD4wOyl7aWYodGhpcy50ZXh0T2ZmPT10aGlzLnRleHQubGVuZ3RoKXtsZXR7dmFsdWU6cixsaW5lQnJlYWs6byxkb25lOmx9PXRoaXMuY3Vyc29yLm5leHQodGhpcy5za2lwKTtpZih0aGlzLnNraXA9MCxsKXRocm93IG5ldyBFcnJvcihcIlJhbiBvdXQgb2YgdGV4dCBjb250ZW50IHdoZW4gZHJhd2luZyBpbmxpbmUgdmlld3NcIik7aWYobyl7dGhpcy5wb3NDb3ZlcmVkKCl8fHRoaXMuZ2V0TGluZSgpLHRoaXMuY29udGVudC5sZW5ndGg/dGhpcy5jb250ZW50W3RoaXMuY29udGVudC5sZW5ndGgtMV0uYnJlYWtBZnRlcj0xOnRoaXMuYnJlYWtBdFN0YXJ0PTEsdGhpcy5mbHVzaEJ1ZmZlcihbXSksdGhpcy5jdXJMaW5lPW51bGwsdC0tO2NvbnRpbnVlfWVsc2UgdGhpcy50ZXh0PXIsdGhpcy50ZXh0T2ZmPTB9bGV0IG49TWF0aC5taW4odGhpcy50ZXh0Lmxlbmd0aC10aGlzLnRleHRPZmYsdCw1MTIpO3RoaXMuZmx1c2hCdWZmZXIoZS5zbGljZSgwLGkpKSx0aGlzLmdldExpbmUoKS5hcHBlbmQoWXQobmV3ICQodGhpcy50ZXh0LnNsaWNlKHRoaXMudGV4dE9mZix0aGlzLnRleHRPZmYrbikpLGUpLGkpLHRoaXMuYXRDdXJzb3JQb3M9ITAsdGhpcy50ZXh0T2ZmKz1uLHQtPW4saT0wfX1zcGFuKHQsZSxpLG4pe3RoaXMuYnVpbGRUZXh0KGUtdCxpLG4pLHRoaXMucG9zPWUsdGhpcy5vcGVuU3RhcnQ8MCYmKHRoaXMub3BlblN0YXJ0PW4pfXBvaW50KHQsZSxpLG4scixvKXtpZih0aGlzLmRpc2FsbG93QmxvY2tFZmZlY3RzRm9yW29dJiZpIGluc3RhbmNlb2YgVSl7aWYoaS5ibG9jayl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJsb2NrIGRlY29yYXRpb25zIG1heSBub3QgYmUgc3BlY2lmaWVkIHZpYSBwbHVnaW5zXCIpO2lmKGU+dGhpcy5kb2MubGluZUF0KHRoaXMucG9zKS50byl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkRlY29yYXRpb25zIHRoYXQgcmVwbGFjZSBsaW5lIGJyZWFrcyBtYXkgbm90IGJlIHNwZWNpZmllZCB2aWEgcGx1Z2luc1wiKX1sZXQgbD1lLXQ7aWYoaSBpbnN0YW5jZW9mIFUpaWYoaS5ibG9jayl7bGV0e3R5cGU6aH09aTtoPT1ULldpZGdldEFmdGVyJiYhdGhpcy5wb3NDb3ZlcmVkKCkmJnRoaXMuZ2V0TGluZSgpLHRoaXMuYWRkQmxvY2tXaWRnZXQobmV3IFkoaS53aWRnZXR8fG5ldyBoZShcImRpdlwiKSxsLGgpKX1lbHNle2xldCBoPWouY3JlYXRlKGkud2lkZ2V0fHxuZXcgaGUoXCJzcGFuXCIpLGwsaS5zdGFydFNpZGUpLGE9dGhpcy5hdEN1cnNvclBvcyYmIWguaXNFZGl0YWJsZSYmcjw9bi5sZW5ndGgmJih0PGV8fGkuc3RhcnRTaWRlPjApLGM9IWguaXNFZGl0YWJsZSYmKHQ8ZXx8aS5zdGFydFNpZGU8PTApLGY9dGhpcy5nZXRMaW5lKCk7dGhpcy5wZW5kaW5nQnVmZmVyPT0yJiYhYSYmKHRoaXMucGVuZGluZ0J1ZmZlcj0wKSx0aGlzLmZsdXNoQnVmZmVyKG4pLGEmJihmLmFwcGVuZChZdChuZXcgbHQoMSksbikscikscj1uLmxlbmd0aCtNYXRoLm1heCgwLHItbi5sZW5ndGgpKSxmLmFwcGVuZChZdChoLG4pLHIpLHRoaXMuYXRDdXJzb3JQb3M9Yyx0aGlzLnBlbmRpbmdCdWZmZXI9Yz90PGU/MToyOjB9ZWxzZSB0aGlzLmRvYy5saW5lQXQodGhpcy5wb3MpLmZyb209PXRoaXMucG9zJiZ0aGlzLmdldExpbmUoKS5hZGRMaW5lRGVjbyhpKTtsJiYodGhpcy50ZXh0T2ZmK2w8PXRoaXMudGV4dC5sZW5ndGg/dGhpcy50ZXh0T2ZmKz1sOih0aGlzLnNraXArPWwtKHRoaXMudGV4dC5sZW5ndGgtdGhpcy50ZXh0T2ZmKSx0aGlzLnRleHQ9XCJcIix0aGlzLnRleHRPZmY9MCksdGhpcy5wb3M9ZSksdGhpcy5vcGVuU3RhcnQ8MCYmKHRoaXMub3BlblN0YXJ0PXIpfXN0YXRpYyBidWlsZCh0LGUsaSxuLHIpe2xldCBvPW5ldyBGdCh0LGUsaSxyKTtyZXR1cm4gby5vcGVuRW5kPUYuc3BhbnMobixlLGksbyksby5vcGVuU3RhcnQ8MCYmKG8ub3BlblN0YXJ0PW8ub3BlbkVuZCksby5maW5pc2goby5vcGVuRW5kKSxvfX07ZnVuY3Rpb24gWXQocyx0KXtmb3IobGV0IGUgb2YgdClzPW5ldyBxKGUsW3NdLHMubGVuZ3RoKTtyZXR1cm4gc312YXIgaGU9Y2xhc3MgZXh0ZW5kcyBYe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50YWc9dH1lcSh0KXtyZXR1cm4gdC50YWc9PXRoaXMudGFnfXRvRE9NKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy50YWcpfXVwZGF0ZURPTSh0KXtyZXR1cm4gdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT10aGlzLnRhZ319LE1zPUMuZGVmaW5lKCksa3M9Qy5kZWZpbmUoKSxBcz1DLmRlZmluZSgpLERzPUMuZGVmaW5lKCksSWU9Qy5kZWZpbmUoKSxUcz1DLmRlZmluZSgpLE9zPUMuZGVmaW5lKHtjb21iaW5lOnM9PnMuc29tZSh0PT50KX0pLHh0PWNsYXNze2NvbnN0cnVjdG9yKHQsZT1cIm5lYXJlc3RcIixpPVwibmVhcmVzdFwiLG49NSxyPTUpe3RoaXMucmFuZ2U9dCx0aGlzLnk9ZSx0aGlzLng9aSx0aGlzLnlNYXJnaW49bix0aGlzLnhNYXJnaW49cn1tYXAodCl7cmV0dXJuIHQuZW1wdHk/dGhpczpuZXcgeHQodGhpcy5yYW5nZS5tYXAodCksdGhpcy55LHRoaXMueCx0aGlzLnlNYXJnaW4sdGhpcy54TWFyZ2luKX19LFRpPWp0LmRlZmluZSh7bWFwOihzLHQpPT5zLm1hcCh0KX0pO2Z1bmN0aW9uIG50KHMsdCxlKXtsZXQgaT1zLmZhY2V0KERzKTtpLmxlbmd0aD9pWzBdKHQpOndpbmRvdy5vbmVycm9yP3dpbmRvdy5vbmVycm9yKFN0cmluZyh0KSxlLHZvaWQgMCx2b2lkIDAsdCk6ZT9jb25zb2xlLmVycm9yKGUrXCI6XCIsdCk6Y29uc29sZS5lcnJvcih0KX12YXIgQ2U9Qy5kZWZpbmUoe2NvbWJpbmU6cz0+cy5sZW5ndGg/c1swXTohMH0pLE1uPTAsQXQ9Qy5kZWZpbmUoKSxWPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLG4pe3RoaXMuaWQ9dCx0aGlzLmNyZWF0ZT1lLHRoaXMuZG9tRXZlbnRIYW5kbGVycz1pLHRoaXMuZXh0ZW5zaW9uPW4odGhpcyl9c3RhdGljIGRlZmluZSh0LGUpe2xldHtldmVudEhhbmRsZXJzOmkscHJvdmlkZTpuLGRlY29yYXRpb25zOnJ9PWV8fHt9O3JldHVybiBuZXcgVihNbisrLHQsaSxvPT57bGV0IGw9W0F0Lm9mKG8pXTtyZXR1cm4gciYmbC5wdXNoKHp0Lm9mKGg9PntsZXQgYT1oLnBsdWdpbihvKTtyZXR1cm4gYT9yKGEpOmsubm9uZX0pKSxuJiZsLnB1c2gobihvKSksbH0pfXN0YXRpYyBmcm9tQ2xhc3ModCxlKXtyZXR1cm4gVi5kZWZpbmUoaT0+bmV3IHQoaSksZSl9fSxCdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnNwZWM9dCx0aGlzLm11c3RVcGRhdGU9bnVsbCx0aGlzLnZhbHVlPW51bGx9dXBkYXRlKHQpe2lmKHRoaXMudmFsdWUpe2lmKHRoaXMubXVzdFVwZGF0ZSl7bGV0IGU9dGhpcy5tdXN0VXBkYXRlO2lmKHRoaXMubXVzdFVwZGF0ZT1udWxsLHRoaXMudmFsdWUudXBkYXRlKXRyeXt0aGlzLnZhbHVlLnVwZGF0ZShlKX1jYXRjaChpKXtpZihudChlLnN0YXRlLGksXCJDb2RlTWlycm9yIHBsdWdpbiBjcmFzaGVkXCIpLHRoaXMudmFsdWUuZGVzdHJveSl0cnl7dGhpcy52YWx1ZS5kZXN0cm95KCl9Y2F0Y2h7fXRoaXMuZGVhY3RpdmF0ZSgpfX19ZWxzZSBpZih0aGlzLnNwZWMpdHJ5e3RoaXMudmFsdWU9dGhpcy5zcGVjLmNyZWF0ZSh0KX1jYXRjaChlKXtudCh0LnN0YXRlLGUsXCJDb2RlTWlycm9yIHBsdWdpbiBjcmFzaGVkXCIpLHRoaXMuZGVhY3RpdmF0ZSgpfXJldHVybiB0aGlzfWRlc3Ryb3kodCl7dmFyIGU7aWYoISgoZT10aGlzLnZhbHVlKT09PW51bGx8fGU9PT12b2lkIDApJiZlLmRlc3Ryb3kpdHJ5e3RoaXMudmFsdWUuZGVzdHJveSgpfWNhdGNoKGkpe250KHQuc3RhdGUsaSxcIkNvZGVNaXJyb3IgcGx1Z2luIGNyYXNoZWRcIil9fWRlYWN0aXZhdGUoKXt0aGlzLnNwZWM9dGhpcy52YWx1ZT1udWxsfX0sUnM9Qy5kZWZpbmUoKSx3aT1DLmRlZmluZSgpLHp0PUMuZGVmaW5lKCksTHM9Qy5kZWZpbmUoKSxFcz1DLmRlZmluZSgpLER0PUMuZGVmaW5lKCksST1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxuKXt0aGlzLmZyb21BPXQsdGhpcy50b0E9ZSx0aGlzLmZyb21CPWksdGhpcy50b0I9bn1qb2luKHQpe3JldHVybiBuZXcgSShNYXRoLm1pbih0aGlzLmZyb21BLHQuZnJvbUEpLE1hdGgubWF4KHRoaXMudG9BLHQudG9BKSxNYXRoLm1pbih0aGlzLmZyb21CLHQuZnJvbUIpLE1hdGgubWF4KHRoaXMudG9CLHQudG9CKSl9YWRkVG9TZXQodCl7bGV0IGU9dC5sZW5ndGgsaT10aGlzO2Zvcig7ZT4wO2UtLSl7bGV0IG49dFtlLTFdO2lmKCEobi5mcm9tQT5pLnRvQSkpe2lmKG4udG9BPGkuZnJvbUEpYnJlYWs7aT1pLmpvaW4obiksdC5zcGxpY2UoZS0xLDEpfX1yZXR1cm4gdC5zcGxpY2UoZSwwLGkpLHR9c3RhdGljIGV4dGVuZFdpdGhSYW5nZXModCxlKXtpZihlLmxlbmd0aD09MClyZXR1cm4gdDtsZXQgaT1bXTtmb3IobGV0IG49MCxyPTAsbz0wLGw9MDs7bisrKXtsZXQgaD1uPT10Lmxlbmd0aD9udWxsOnRbbl0sYT1vLWwsYz1oP2guZnJvbUI6MWU5O2Zvcig7cjxlLmxlbmd0aCYmZVtyXTxjOyl7bGV0IGY9ZVtyXSxkPWVbcisxXSx1PU1hdGgubWF4KGwsZikscD1NYXRoLm1pbihjLGQpO2lmKHU8PXAmJm5ldyBJKHUrYSxwK2EsdSxwKS5hZGRUb1NldChpKSxkPmMpYnJlYWs7cis9Mn1pZighaClyZXR1cm4gaTtuZXcgSShoLmZyb21BLGgudG9BLGguZnJvbUIsaC50b0IpLmFkZFRvU2V0KGkpLG89aC50b0EsbD1oLnRvQn19fSxTdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy52aWV3PXQsdGhpcy5zdGF0ZT1lLHRoaXMudHJhbnNhY3Rpb25zPWksdGhpcy5mbGFncz0wLHRoaXMuc3RhcnRTdGF0ZT10LnN0YXRlLHRoaXMuY2hhbmdlcz1ocy5lbXB0eSh0aGlzLnN0YXJ0U3RhdGUuZG9jLmxlbmd0aCk7Zm9yKGxldCBvIG9mIGkpdGhpcy5jaGFuZ2VzPXRoaXMuY2hhbmdlcy5jb21wb3NlKG8uY2hhbmdlcyk7bGV0IG49W107dGhpcy5jaGFuZ2VzLml0ZXJDaGFuZ2VkUmFuZ2VzKChvLGwsaCxhKT0+bi5wdXNoKG5ldyBJKG8sbCxoLGEpKSksdGhpcy5jaGFuZ2VkUmFuZ2VzPW47bGV0IHI9dC5oYXNGb2N1cztyIT10LmlucHV0U3RhdGUubm90aWZpZWRGb2N1c2VkJiYodC5pbnB1dFN0YXRlLm5vdGlmaWVkRm9jdXNlZD1yLHRoaXMuZmxhZ3N8PTEpfXN0YXRpYyBjcmVhdGUodCxlLGkpe3JldHVybiBuZXcgU3QodCxlLGkpfWdldCB2aWV3cG9ydENoYW5nZWQoKXtyZXR1cm4odGhpcy5mbGFncyY0KT4wfWdldCBoZWlnaHRDaGFuZ2VkKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMik+MH1nZXQgZ2VvbWV0cnlDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuZG9jQ2hhbmdlZHx8KHRoaXMuZmxhZ3MmMTApPjB9Z2V0IGZvY3VzQ2hhbmdlZCgpe3JldHVybih0aGlzLmZsYWdzJjEpPjB9Z2V0IGRvY0NoYW5nZWQoKXtyZXR1cm4hdGhpcy5jaGFuZ2VzLmVtcHR5fWdldCBzZWxlY3Rpb25TZXQoKXtyZXR1cm4gdGhpcy50cmFuc2FjdGlvbnMuc29tZSh0PT50LnNlbGVjdGlvbil9Z2V0IGVtcHR5KCl7cmV0dXJuIHRoaXMuZmxhZ3M9PTAmJnRoaXMudHJhbnNhY3Rpb25zLmxlbmd0aD09MH19LFI9ZnVuY3Rpb24ocyl7cmV0dXJuIHNbcy5MVFI9MF09XCJMVFJcIixzW3MuUlRMPTFdPVwiUlRMXCIsc30oUnx8KFI9e30pKSxxZT1SLkxUUixrbj1SLlJUTDtmdW5jdGlvbiBCcyhzKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHMubGVuZ3RoO2UrKyl0LnB1c2goMTw8K3NbZV0pO3JldHVybiB0fXZhciBBbj1CcyhcIjg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4NjY2ODg4ODg4Nzg3ODMzMzMzMzMzMzM3ODg4ODg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODg4ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg3ODY2NjY4ODg4MDg4ODg4NjYzMzgwODg4MzA4ODg4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4XCIpLERuPUJzKFwiNDQ0NDQ0ODgyNjYyNzI4ODk5OTk5OTk5OTk5MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyOTk5OTk5OTk5OTk5OTk5OTk5OTk5NDQ0NDQ0NDQ0NDY0NDIyMjgyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjk5OTk5OTk0OTk5OTk5OTIyOTk4OTk5OTIyMzMzMzMzMzMzM1wiKSxLZT1PYmplY3QuY3JlYXRlKG51bGwpLEs9W107Zm9yKGxldCBzIG9mW1wiKClcIixcIltdXCIsXCJ7fVwiXSl7bGV0IHQ9cy5jaGFyQ29kZUF0KDApLGU9cy5jaGFyQ29kZUF0KDEpO0tlW3RdPWUsS2VbZV09LXR9ZnVuY3Rpb24gVG4ocyl7cmV0dXJuIHM8PTI0Nz9BbltzXToxNDI0PD1zJiZzPD0xNTI0PzI6MTUzNjw9cyYmczw9MTc4NT9EbltzLTE1MzZdOjE3NzQ8PXMmJnM8PTIyMjA/NDo4MTkyPD1zJiZzPD04MjAzPzI1Njo2NDMzNjw9cyYmczw9NjUwMjM/NDpzPT04MjA0PzI1NjoxfXZhciBPbj0vW1xcdTA1OTAtXFx1MDVmNFxcdTA2MDAtXFx1MDZmZlxcdTA3MDAtXFx1MDhhY1xcdWZiNTAtXFx1ZmRmZl0vLHJ0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmZyb209dCx0aGlzLnRvPWUsdGhpcy5sZXZlbD1pfWdldCBkaXIoKXtyZXR1cm4gdGhpcy5sZXZlbCUyP2tuOnFlfXNpZGUodCxlKXtyZXR1cm4gdGhpcy5kaXI9PWU9PXQ/dGhpcy50bzp0aGlzLmZyb219c3RhdGljIGZpbmQodCxlLGksbil7bGV0IHI9LTE7Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2xldCBsPXRbb107aWYobC5mcm9tPD1lJiZsLnRvPj1lKXtpZihsLmxldmVsPT1pKXJldHVybiBvOyhyPDB8fChuIT0wP248MD9sLmZyb208ZTpsLnRvPmU6dFtyXS5sZXZlbD5sLmxldmVsKSkmJihyPW8pfX1pZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7cmV0dXJuIHJ9fSxPPVtdO2Z1bmN0aW9uIFBzKHMsdCl7bGV0IGU9cy5sZW5ndGgsaT10PT1xZT8xOjIsbj10PT1xZT8yOjE7aWYoIXN8fGk9PTEmJiFPbi50ZXN0KHMpKXJldHVybiBIcyhlKTtmb3IobGV0IG89MCxsPWksaD1pO288ZTtvKyspe2xldCBhPVRuKHMuY2hhckNvZGVBdChvKSk7YT09NTEyP2E9bDphPT04JiZoPT00JiYoYT0xNiksT1tvXT1hPT00PzI6YSxhJjcmJihoPWEpLGw9YX1mb3IobGV0IG89MCxsPWksaD1pO288ZTtvKyspe2xldCBhPU9bb107aWYoYT09MTI4KW88ZS0xJiZsPT1PW28rMV0mJmwmMjQ/YT1PW29dPWw6T1tvXT0yNTY7ZWxzZSBpZihhPT02NCl7bGV0IGM9bysxO2Zvcig7YzxlJiZPW2NdPT02NDspYysrO2xldCBmPW8mJmw9PTh8fGM8ZSYmT1tjXT09OD9oPT0xPzE6ODoyNTY7Zm9yKGxldCBkPW87ZDxjO2QrKylPW2RdPWY7bz1jLTF9ZWxzZSBhPT04JiZoPT0xJiYoT1tvXT0xKTtsPWEsYSY3JiYoaD1hKX1mb3IobGV0IG89MCxsPTAsaD0wLGEsYyxmO288ZTtvKyspaWYoYz1LZVthPXMuY2hhckNvZGVBdChvKV0paWYoYzwwKXtmb3IobGV0IGQ9bC0zO2Q+PTA7ZC09MylpZihLW2QrMV09PS1jKXtsZXQgdT1LW2QrMl0scD11JjI/aTp1JjQ/dSYxP246aTowO3AmJihPW29dPU9bS1tkXV09cCksbD1kO2JyZWFrfX1lbHNle2lmKEsubGVuZ3RoPT0xODkpYnJlYWs7S1tsKytdPW8sS1tsKytdPWEsS1tsKytdPWh9ZWxzZSBpZigoZj1PW29dKT09Mnx8Zj09MSl7bGV0IGQ9Zj09aTtoPWQ/MDoxO2ZvcihsZXQgdT1sLTM7dT49MDt1LT0zKXtsZXQgcD1LW3UrMl07aWYocCYyKWJyZWFrO2lmKGQpS1t1KzJdfD0yO2Vsc2V7aWYocCY0KWJyZWFrO0tbdSsyXXw9NH19fWZvcihsZXQgbz0wO288ZTtvKyspaWYoT1tvXT09MjU2KXtsZXQgbD1vKzE7Zm9yKDtsPGUmJk9bbF09PTI1NjspbCsrO2xldCBoPShvP09bby0xXTppKT09MSxhPShsPGU/T1tsXTppKT09MSxjPWg9PWE/aD8xOjI6aTtmb3IobGV0IGY9bztmPGw7ZisrKU9bZl09YztvPWwtMX1sZXQgcj1bXTtpZihpPT0xKWZvcihsZXQgbz0wO288ZTspe2xldCBsPW8saD1PW28rK10hPTE7Zm9yKDtvPGUmJmg9PShPW29dIT0xKTspbysrO2lmKGgpZm9yKGxldCBhPW87YT5sOyl7bGV0IGM9YSxmPU9bLS1hXSE9Mjtmb3IoO2E+bCYmZj09KE9bYS0xXSE9Mik7KWEtLTtyLnB1c2gobmV3IHJ0KGEsYyxmPzI6MSkpfWVsc2Ugci5wdXNoKG5ldyBydChsLG8sMCkpfWVsc2UgZm9yKGxldCBvPTA7bzxlOyl7bGV0IGw9byxoPU9bbysrXT09Mjtmb3IoO288ZSYmaD09KE9bb109PTIpOylvKys7ci5wdXNoKG5ldyBydChsLG8saD8xOjIpKX1yZXR1cm4gcn1mdW5jdGlvbiBIcyhzKXtyZXR1cm5bbmV3IHJ0KDAscywwKV19dmFyIE5zPVwiXCI7ZnVuY3Rpb24gVnMocyx0LGUsaSxuKXt2YXIgcjtsZXQgbz1pLmhlYWQtcy5mcm9tLGw9LTE7aWYobz09MCl7aWYoIW58fCFzLmxlbmd0aClyZXR1cm4gbnVsbDt0WzBdLmxldmVsIT1lJiYobz10WzBdLnNpZGUoITEsZSksbD0wKX1lbHNlIGlmKG89PXMubGVuZ3RoKXtpZihuKXJldHVybiBudWxsO2xldCBkPXRbdC5sZW5ndGgtMV07ZC5sZXZlbCE9ZSYmKG89ZC5zaWRlKCEwLGUpLGw9dC5sZW5ndGgtMSl9bDwwJiYobD1ydC5maW5kKHQsbywocj1pLmJpZGlMZXZlbCkhPT1udWxsJiZyIT09dm9pZCAwP3I6LTEsaS5hc3NvYykpO2xldCBoPXRbbF07bz09aC5zaWRlKG4sZSkmJihoPXRbbCs9bj8xOi0xXSxvPWguc2lkZSghbixlKSk7bGV0IGE9bj09KGguZGlyPT1lKSxjPWt0KHMudGV4dCxvLGEpO2lmKE5zPXMudGV4dC5zbGljZShNYXRoLm1pbihvLGMpLE1hdGgubWF4KG8sYykpLGMhPWguc2lkZShuLGUpKXJldHVybiB4LmN1cnNvcihjK3MuZnJvbSxhPy0xOjEsaC5sZXZlbCk7bGV0IGY9bD09KG4/dC5sZW5ndGgtMTowKT9udWxsOnRbbCsobj8xOi0xKV07cmV0dXJuIWYmJmgubGV2ZWwhPWU/eC5jdXJzb3Iobj9zLnRvOnMuZnJvbSxuPy0xOjEsZSk6ZiYmZi5sZXZlbDxoLmxldmVsP3guY3Vyc29yKGYuc2lkZSghbixlKStzLmZyb20sbj8xOi0xLGYubGV2ZWwpOnguY3Vyc29yKGMrcy5mcm9tLG4/LTE6MSxoLmxldmVsKX12YXIgc3Q9XCJcXHVGRkZGXCIsYWU9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnBvaW50cz10LHRoaXMudGV4dD1cIlwiLHRoaXMubGluZVNlcGFyYXRvcj1lLmZhY2V0KEx0LmxpbmVTZXBhcmF0b3IpfWFwcGVuZCh0KXt0aGlzLnRleHQrPXR9bGluZUJyZWFrKCl7dGhpcy50ZXh0Kz1zdH1yZWFkUmFuZ2UodCxlKXtpZighdClyZXR1cm4gdGhpcztsZXQgaT10LnBhcmVudE5vZGU7Zm9yKGxldCBuPXQ7Oyl7dGhpcy5maW5kUG9pbnRCZWZvcmUoaSxuKSx0aGlzLnJlYWROb2RlKG4pO2xldCByPW4ubmV4dFNpYmxpbmc7aWYocj09ZSlicmVhaztsZXQgbz1BLmdldChuKSxsPUEuZ2V0KHIpOyhvJiZsP28uYnJlYWtBZnRlcjoobz9vLmJyZWFrQWZ0ZXI6T2kobikpfHxPaShyKSYmKG4ubm9kZU5hbWUhPVwiQlJcInx8bi5jbUlnbm9yZSkpJiZ0aGlzLmxpbmVCcmVhaygpLG49cn1yZXR1cm4gdGhpcy5maW5kUG9pbnRCZWZvcmUoaSxlKSx0aGlzfXJlYWRUZXh0Tm9kZSh0KXtsZXQgZT10Lm5vZGVWYWx1ZTtmb3IobGV0IGkgb2YgdGhpcy5wb2ludHMpaS5ub2RlPT10JiYoaS5wb3M9dGhpcy50ZXh0Lmxlbmd0aCtNYXRoLm1pbihpLm9mZnNldCxlLmxlbmd0aCkpO2ZvcihsZXQgaT0wLG49dGhpcy5saW5lU2VwYXJhdG9yP251bGw6L1xcclxcbj98XFxuL2c7Oyl7bGV0IHI9LTEsbz0xLGw7aWYodGhpcy5saW5lU2VwYXJhdG9yPyhyPWUuaW5kZXhPZih0aGlzLmxpbmVTZXBhcmF0b3IsaSksbz10aGlzLmxpbmVTZXBhcmF0b3IubGVuZ3RoKToobD1uLmV4ZWMoZSkpJiYocj1sLmluZGV4LG89bFswXS5sZW5ndGgpLHRoaXMuYXBwZW5kKGUuc2xpY2UoaSxyPDA/ZS5sZW5ndGg6cikpLHI8MClicmVhaztpZih0aGlzLmxpbmVCcmVhaygpLG8+MSlmb3IobGV0IGggb2YgdGhpcy5wb2ludHMpaC5ub2RlPT10JiZoLnBvcz50aGlzLnRleHQubGVuZ3RoJiYoaC5wb3MtPW8tMSk7aT1yK299fXJlYWROb2RlKHQpe2lmKHQuY21JZ25vcmUpcmV0dXJuO2xldCBlPUEuZ2V0KHQpLGk9ZSYmZS5vdmVycmlkZURPTVRleHQ7aWYoaSE9bnVsbCl7dGhpcy5maW5kUG9pbnRJbnNpZGUodCxpLmxlbmd0aCk7Zm9yKGxldCBuPWkuaXRlcigpOyFuLm5leHQoKS5kb25lOyluLmxpbmVCcmVhaz90aGlzLmxpbmVCcmVhaygpOnRoaXMuYXBwZW5kKG4udmFsdWUpfWVsc2UgdC5ub2RlVHlwZT09Mz90aGlzLnJlYWRUZXh0Tm9kZSh0KTp0Lm5vZGVOYW1lPT1cIkJSXCI/dC5uZXh0U2libGluZyYmdGhpcy5saW5lQnJlYWsoKTp0Lm5vZGVUeXBlPT0xJiZ0aGlzLnJlYWRSYW5nZSh0LmZpcnN0Q2hpbGQsbnVsbCl9ZmluZFBvaW50QmVmb3JlKHQsZSl7Zm9yKGxldCBpIG9mIHRoaXMucG9pbnRzKWkubm9kZT09dCYmdC5jaGlsZE5vZGVzW2kub2Zmc2V0XT09ZSYmKGkucG9zPXRoaXMudGV4dC5sZW5ndGgpfWZpbmRQb2ludEluc2lkZSh0LGUpe2ZvcihsZXQgaSBvZiB0aGlzLnBvaW50cykodC5ub2RlVHlwZT09Mz9pLm5vZGU9PXQ6dC5jb250YWlucyhpLm5vZGUpKSYmKGkucG9zPXRoaXMudGV4dC5sZW5ndGgrTWF0aC5taW4oZSxpLm9mZnNldCkpfX07ZnVuY3Rpb24gT2kocyl7cmV0dXJuIHMubm9kZVR5cGU9PTEmJi9eKERJVnxQfExJfFVMfE9MfEJMT0NLUVVPVEV8RER8RFR8SFxcZHxTRUNUSU9OfFBSRSkkLy50ZXN0KHMubm9kZU5hbWUpfXZhciBjZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMubm9kZT10LHRoaXMub2Zmc2V0PWUsdGhpcy5wb3M9LTF9fSxmZT1jbGFzcyBleHRlbmRzIEF7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnZpZXc9dCx0aGlzLmNvbXBvc2l0aW9uRGVjbz1rLm5vbmUsdGhpcy5kZWNvcmF0aW9ucz1bXSx0aGlzLmR5bmFtaWNEZWNvcmF0aW9uTWFwPVtdLHRoaXMubWluV2lkdGg9MCx0aGlzLm1pbldpZHRoRnJvbT0wLHRoaXMubWluV2lkdGhUbz0wLHRoaXMuaW1wcmVjaXNlQW5jaG9yPW51bGwsdGhpcy5pbXByZWNpc2VIZWFkPW51bGwsdGhpcy5mb3JjZVNlbGVjdGlvbj0hMSx0aGlzLmxhc3RVcGRhdGU9RGF0ZS5ub3coKSx0aGlzLnNldERPTSh0LmNvbnRlbnRET00pLHRoaXMuY2hpbGRyZW49W25ldyBIXSx0aGlzLmNoaWxkcmVuWzBdLnNldFBhcmVudCh0aGlzKSx0aGlzLnVwZGF0ZURlY28oKSx0aGlzLnVwZGF0ZUlubmVyKFtuZXcgSSgwLDAsMCx0LnN0YXRlLmRvYy5sZW5ndGgpXSwwKX1nZXQgZWRpdG9yVmlldygpe3JldHVybiB0aGlzLnZpZXd9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnZpZXcuc3RhdGUuZG9jLmxlbmd0aH11cGRhdGUodCl7bGV0IGU9dC5jaGFuZ2VkUmFuZ2VzO3RoaXMubWluV2lkdGg+MCYmZS5sZW5ndGgmJihlLmV2ZXJ5KCh7ZnJvbUE6byx0b0E6bH0pPT5sPHRoaXMubWluV2lkdGhGcm9tfHxvPnRoaXMubWluV2lkdGhUbyk/KHRoaXMubWluV2lkdGhGcm9tPXQuY2hhbmdlcy5tYXBQb3ModGhpcy5taW5XaWR0aEZyb20sMSksdGhpcy5taW5XaWR0aFRvPXQuY2hhbmdlcy5tYXBQb3ModGhpcy5taW5XaWR0aFRvLDEpKTp0aGlzLm1pbldpZHRoPXRoaXMubWluV2lkdGhGcm9tPXRoaXMubWluV2lkdGhUbz0wKSx0aGlzLnZpZXcuaW5wdXRTdGF0ZS5jb21wb3Npbmc8MD90aGlzLmNvbXBvc2l0aW9uRGVjbz1rLm5vbmU6KHQudHJhbnNhY3Rpb25zLmxlbmd0aHx8dGhpcy5kaXJ0eSkmJih0aGlzLmNvbXBvc2l0aW9uRGVjbz1Mbih0aGlzLnZpZXcsdC5jaGFuZ2VzKSksKHkuaWV8fHkuY2hyb21lKSYmIXRoaXMuY29tcG9zaXRpb25EZWNvLnNpemUmJnQmJnQuc3RhdGUuZG9jLmxpbmVzIT10LnN0YXJ0U3RhdGUuZG9jLmxpbmVzJiYodGhpcy5mb3JjZVNlbGVjdGlvbj0hMCk7bGV0IGk9dGhpcy5kZWNvcmF0aW9ucyxuPXRoaXMudXBkYXRlRGVjbygpLHI9Qm4oaSxuLHQuY2hhbmdlcyk7cmV0dXJuIGU9SS5leHRlbmRXaXRoUmFuZ2VzKGUsciksdGhpcy5kaXJ0eT09MCYmZS5sZW5ndGg9PTA/ITE6KHRoaXMudXBkYXRlSW5uZXIoZSx0LnN0YXJ0U3RhdGUuZG9jLmxlbmd0aCksdC50cmFuc2FjdGlvbnMubGVuZ3RoJiYodGhpcy5sYXN0VXBkYXRlPURhdGUubm93KCkpLCEwKX11cGRhdGVJbm5lcih0LGUpe3RoaXMudmlldy52aWV3U3RhdGUubXVzdE1lYXN1cmVDb250ZW50PSEwLHRoaXMudXBkYXRlQ2hpbGRyZW4odCxlKTtsZXR7b2JzZXJ2ZXI6aX09dGhpcy52aWV3O2kuaWdub3JlKCgpPT57dGhpcy5kb20uc3R5bGUuaGVpZ2h0PXRoaXMudmlldy52aWV3U3RhdGUuY29udGVudEhlaWdodCtcInB4XCIsdGhpcy5kb20uc3R5bGUuZmxleEJhc2lzPXRoaXMubWluV2lkdGg/dGhpcy5taW5XaWR0aCtcInB4XCI6XCJcIjtsZXQgcj15LmNocm9tZXx8eS5pb3M/e25vZGU6aS5zZWxlY3Rpb25SYW5nZS5mb2N1c05vZGUsd3JpdHRlbjohMX06dm9pZCAwO3RoaXMuc3luYyhyKSx0aGlzLmRpcnR5PTAsciYmKHIud3JpdHRlbnx8aS5zZWxlY3Rpb25SYW5nZS5mb2N1c05vZGUhPXIubm9kZSkmJih0aGlzLmZvcmNlU2VsZWN0aW9uPSEwKSx0aGlzLmRvbS5zdHlsZS5oZWlnaHQ9XCJcIn0pO2xldCBuPVtdO2lmKHRoaXMudmlldy52aWV3cG9ydC5mcm9tfHx0aGlzLnZpZXcudmlld3BvcnQudG88dGhpcy52aWV3LnN0YXRlLmRvYy5sZW5ndGgpZm9yKGxldCByIG9mIHRoaXMuY2hpbGRyZW4pciBpbnN0YW5jZW9mIFkmJnIud2lkZ2V0IGluc3RhbmNlb2YgZGUmJm4ucHVzaChyLmRvbSk7aS51cGRhdGVHYXBzKG4pfXVwZGF0ZUNoaWxkcmVuKHQsZSl7bGV0IGk9dGhpcy5jaGlsZEN1cnNvcihlKTtmb3IobGV0IG49dC5sZW5ndGgtMTs7bi0tKXtsZXQgcj1uPj0wP3Rbbl06bnVsbDtpZighcilicmVhaztsZXR7ZnJvbUE6byx0b0E6bCxmcm9tQjpoLHRvQjphfT1yLHtjb250ZW50OmMsYnJlYWtBdFN0YXJ0OmYsb3BlblN0YXJ0OmQsb3BlbkVuZDp1fT1GdC5idWlsZCh0aGlzLnZpZXcuc3RhdGUuZG9jLGgsYSx0aGlzLmRlY29yYXRpb25zLHRoaXMuZHluYW1pY0RlY29yYXRpb25NYXApLHtpOnAsb2ZmOmJ9PWkuZmluZFBvcyhsLDEpLHtpOm0sb2ZmOmd9PWkuZmluZFBvcyhvLC0xKTttcyh0aGlzLG0sZyxwLGIsYyxmLGQsdSl9fXVwZGF0ZVNlbGVjdGlvbih0PSExLGU9ITEpe2lmKCh0fHwhdGhpcy52aWV3Lm9ic2VydmVyLnNlbGVjdGlvblJhbmdlLmZvY3VzTm9kZSkmJnRoaXMudmlldy5vYnNlcnZlci5yZWFkU2VsZWN0aW9uUmFuZ2UoKSwhKGV8fHRoaXMubWF5Q29udHJvbFNlbGVjdGlvbigpKSlyZXR1cm47bGV0IGk9dGhpcy5mb3JjZVNlbGVjdGlvbjt0aGlzLmZvcmNlU2VsZWN0aW9uPSExO2xldCBuPXRoaXMudmlldy5zdGF0ZS5zZWxlY3Rpb24ubWFpbixyPXRoaXMuZG9tQXRQb3Mobi5hbmNob3IpLG89bi5lbXB0eT9yOnRoaXMuZG9tQXRQb3Mobi5oZWFkKTtpZih5LmdlY2tvJiZuLmVtcHR5JiZSbihyKSl7bGV0IGg9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7dGhpcy52aWV3Lm9ic2VydmVyLmlnbm9yZSgoKT0+ci5ub2RlLmluc2VydEJlZm9yZShoLHIubm9kZS5jaGlsZE5vZGVzW3Iub2Zmc2V0XXx8bnVsbCkpLHI9bz1uZXcgQihoLDApLGk9ITB9bGV0IGw9dGhpcy52aWV3Lm9ic2VydmVyLnNlbGVjdGlvblJhbmdlOyhpfHwhbC5mb2N1c05vZGV8fCFuZShyLm5vZGUsci5vZmZzZXQsbC5hbmNob3JOb2RlLGwuYW5jaG9yT2Zmc2V0KXx8IW5lKG8ubm9kZSxvLm9mZnNldCxsLmZvY3VzTm9kZSxsLmZvY3VzT2Zmc2V0KSkmJih0aGlzLnZpZXcub2JzZXJ2ZXIuaWdub3JlKCgpPT57eS5hbmRyb2lkJiZ5LmNocm9tZSYmdGhpcy5kb20uY29udGFpbnMobC5mb2N1c05vZGUpJiZQbihsLmZvY3VzTm9kZSx0aGlzLmRvbSkmJih0aGlzLmRvbS5ibHVyKCksdGhpcy5kb20uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSk7bGV0IGg9c2UodGhpcy52aWV3LnJvb3QpO2lmKGgpaWYobi5lbXB0eSl7aWYoeS5nZWNrbyl7bGV0IGE9RW4oci5ub2RlLHIub2Zmc2V0KTtpZihhJiZhIT0zKXtsZXQgYz1GcyhyLm5vZGUsci5vZmZzZXQsYT09MT8xOi0xKTtjJiYocj1uZXcgQihjLGE9PTE/MDpjLm5vZGVWYWx1ZS5sZW5ndGgpKX19aC5jb2xsYXBzZShyLm5vZGUsci5vZmZzZXQpLG4uYmlkaUxldmVsIT1udWxsJiZsLmN1cnNvckJpZGlMZXZlbCE9bnVsbCYmKGwuY3Vyc29yQmlkaUxldmVsPW4uYmlkaUxldmVsKX1lbHNlIGlmKGguZXh0ZW5kKXtoLmNvbGxhcHNlKHIubm9kZSxyLm9mZnNldCk7dHJ5e2guZXh0ZW5kKG8ubm9kZSxvLm9mZnNldCl9Y2F0Y2h7fX1lbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7bi5hbmNob3I+bi5oZWFkJiYoW3Isb109W28scl0pLGEuc2V0RW5kKG8ubm9kZSxvLm9mZnNldCksYS5zZXRTdGFydChyLm5vZGUsci5vZmZzZXQpLGgucmVtb3ZlQWxsUmFuZ2VzKCksaC5hZGRSYW5nZShhKX19KSx0aGlzLnZpZXcub2JzZXJ2ZXIuc2V0U2VsZWN0aW9uUmFuZ2UocixvKSksdGhpcy5pbXByZWNpc2VBbmNob3I9ci5wcmVjaXNlP251bGw6bmV3IEIobC5hbmNob3JOb2RlLGwuYW5jaG9yT2Zmc2V0KSx0aGlzLmltcHJlY2lzZUhlYWQ9by5wcmVjaXNlP251bGw6bmV3IEIobC5mb2N1c05vZGUsbC5mb2N1c09mZnNldCl9ZW5mb3JjZUN1cnNvckFzc29jKCl7aWYodGhpcy5jb21wb3NpdGlvbkRlY28uc2l6ZSlyZXR1cm47bGV0IHQ9dGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbi5tYWluLGU9c2UodGhpcy52aWV3LnJvb3QpO2lmKCFlfHwhdC5lbXB0eXx8IXQuYXNzb2N8fCFlLm1vZGlmeSlyZXR1cm47bGV0IGk9SC5maW5kKHRoaXMsdC5oZWFkKTtpZighaSlyZXR1cm47bGV0IG49aS5wb3NBdFN0YXJ0O2lmKHQuaGVhZD09bnx8dC5oZWFkPT1uK2kubGVuZ3RoKXJldHVybjtsZXQgcj10aGlzLmNvb3Jkc0F0KHQuaGVhZCwtMSksbz10aGlzLmNvb3Jkc0F0KHQuaGVhZCwxKTtpZighcnx8IW98fHIuYm90dG9tPm8udG9wKXJldHVybjtsZXQgbD10aGlzLmRvbUF0UG9zKHQuaGVhZCt0LmFzc29jKTtlLmNvbGxhcHNlKGwubm9kZSxsLm9mZnNldCksZS5tb2RpZnkoXCJtb3ZlXCIsdC5hc3NvYzwwP1wiZm9yd2FyZFwiOlwiYmFja3dhcmRcIixcImxpbmVib3VuZGFyeVwiKX1tYXlDb250cm9sU2VsZWN0aW9uKCl7bGV0IHQ9dGhpcy52aWV3LnJvb3QuYWN0aXZlRWxlbWVudDtyZXR1cm4gdD09dGhpcy5kb218fFp0KHRoaXMuZG9tLHRoaXMudmlldy5vYnNlcnZlci5zZWxlY3Rpb25SYW5nZSkmJiEodCYmdGhpcy5kb20uY29udGFpbnModCkpfW5lYXJlc3QodCl7Zm9yKGxldCBlPXQ7ZTspe2xldCBpPUEuZ2V0KGUpO2lmKGkmJmkucm9vdFZpZXc9PXRoaXMpcmV0dXJuIGk7ZT1lLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9cG9zRnJvbURPTSh0LGUpe2xldCBpPXRoaXMubmVhcmVzdCh0KTtpZighaSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRyeWluZyB0byBmaW5kIHBvc2l0aW9uIGZvciBhIERPTSBwb3NpdGlvbiBvdXRzaWRlIG9mIHRoZSBkb2N1bWVudFwiKTtyZXR1cm4gaS5sb2NhbFBvc0Zyb21ET00odCxlKStpLnBvc0F0U3RhcnR9ZG9tQXRQb3ModCl7bGV0e2k6ZSxvZmY6aX09dGhpcy5jaGlsZEN1cnNvcigpLmZpbmRQb3ModCwtMSk7Zm9yKDtlPHRoaXMuY2hpbGRyZW4ubGVuZ3RoLTE7KXtsZXQgbj10aGlzLmNoaWxkcmVuW2VdO2lmKGk8bi5sZW5ndGh8fG4gaW5zdGFuY2VvZiBIKWJyZWFrO2UrKyxpPTB9cmV0dXJuIHRoaXMuY2hpbGRyZW5bZV0uZG9tQXRQb3MoaSl9Y29vcmRzQXQodCxlKXtmb3IobGV0IGk9dGhpcy5sZW5ndGgsbj10aGlzLmNoaWxkcmVuLmxlbmd0aC0xOztuLS0pe2xldCByPXRoaXMuY2hpbGRyZW5bbl0sbz1pLXIuYnJlYWtBZnRlci1yLmxlbmd0aDtpZih0Pm98fHQ9PW8mJnIudHlwZSE9VC5XaWRnZXRCZWZvcmUmJnIudHlwZSE9VC5XaWRnZXRBZnRlciYmKCFufHxlPT0yfHx0aGlzLmNoaWxkcmVuW24tMV0uYnJlYWtBZnRlcnx8dGhpcy5jaGlsZHJlbltuLTFdLnR5cGU9PVQuV2lkZ2V0QmVmb3JlJiZlPi0yKSlyZXR1cm4gci5jb29yZHNBdCh0LW8sZSk7aT1vfX1tZWFzdXJlVmlzaWJsZUxpbmVIZWlnaHRzKHQpe2xldCBlPVtdLHtmcm9tOmksdG86bn09dCxyPXRoaXMudmlldy5jb250ZW50RE9NLmNsaWVudFdpZHRoLG89cj5NYXRoLm1heCh0aGlzLnZpZXcuc2Nyb2xsRE9NLmNsaWVudFdpZHRoLHRoaXMubWluV2lkdGgpKzEsbD0tMSxoPXRoaXMudmlldy50ZXh0RGlyZWN0aW9uPT1SLkxUUjtmb3IobGV0IGE9MCxjPTA7Yzx0aGlzLmNoaWxkcmVuLmxlbmd0aDtjKyspe2xldCBmPXRoaXMuY2hpbGRyZW5bY10sZD1hK2YubGVuZ3RoO2lmKGQ+bilicmVhaztpZihhPj1pKXtsZXQgdT1mLmRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihlLnB1c2godS5oZWlnaHQpLG8pe2xldCBwPWYuZG9tLmxhc3RDaGlsZCxiPXA/VnQocCk6W107aWYoYi5sZW5ndGgpe2xldCBtPWJbYi5sZW5ndGgtMV0sZz1oP20ucmlnaHQtdS5sZWZ0OnUucmlnaHQtbS5sZWZ0O2c+bCYmKGw9Zyx0aGlzLm1pbldpZHRoPXIsdGhpcy5taW5XaWR0aEZyb209YSx0aGlzLm1pbldpZHRoVG89ZCl9fX1hPWQrZi5icmVha0FmdGVyfXJldHVybiBlfXRleHREaXJlY3Rpb25BdCh0KXtsZXR7aTplfT10aGlzLmNoaWxkUG9zKHQsMSk7cmV0dXJuIGdldENvbXB1dGVkU3R5bGUodGhpcy5jaGlsZHJlbltlXS5kb20pLmRpcmVjdGlvbj09XCJydGxcIj9SLlJUTDpSLkxUUn1tZWFzdXJlVGV4dFNpemUoKXtmb3IobGV0IG4gb2YgdGhpcy5jaGlsZHJlbilpZihuIGluc3RhbmNlb2YgSCl7bGV0IHI9bi5tZWFzdXJlVGV4dFNpemUoKTtpZihyKXJldHVybiByfWxldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksZSxpO3JldHVybiB0LmNsYXNzTmFtZT1cImNtLWxpbmVcIix0LnN0eWxlLndpZHRoPVwiOTk5OTlweFwiLHQudGV4dENvbnRlbnQ9XCJhYmMgZGVmIGdoaSBqa2wgbW5vIHBxciBzdHVcIix0aGlzLnZpZXcub2JzZXJ2ZXIuaWdub3JlKCgpPT57dGhpcy5kb20uYXBwZW5kQ2hpbGQodCk7bGV0IG49VnQodC5maXJzdENoaWxkKVswXTtlPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LGk9bj9uLndpZHRoLzI3OjcsdC5yZW1vdmUoKX0pLHtsaW5lSGVpZ2h0OmUsY2hhcldpZHRoOml9fWNoaWxkQ3Vyc29yKHQ9dGhpcy5sZW5ndGgpe2xldCBlPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO3JldHVybiBlJiYodC09dGhpcy5jaGlsZHJlblstLWVdLmxlbmd0aCksbmV3IG9lKHRoaXMuY2hpbGRyZW4sdCxlKX1jb21wdXRlQmxvY2tHYXBEZWNvKCl7bGV0IHQ9W10sZT10aGlzLnZpZXcudmlld1N0YXRlO2ZvcihsZXQgaT0wLG49MDs7bisrKXtsZXQgcj1uPT1lLnZpZXdwb3J0cy5sZW5ndGg/bnVsbDplLnZpZXdwb3J0c1tuXSxvPXI/ci5mcm9tLTE6dGhpcy5sZW5ndGg7aWYobz5pKXtsZXQgbD1lLmxpbmVCbG9ja0F0KG8pLmJvdHRvbS1lLmxpbmVCbG9ja0F0KGkpLnRvcDt0LnB1c2goay5yZXBsYWNlKHt3aWRnZXQ6bmV3IGRlKGwpLGJsb2NrOiEwLGluY2x1c2l2ZTohMCxpc0Jsb2NrR2FwOiEwfSkucmFuZ2UoaSxvKSl9aWYoIXIpYnJlYWs7aT1yLnRvKzF9cmV0dXJuIGsuc2V0KHQpfXVwZGF0ZURlY28oKXtsZXQgdD10aGlzLnZpZXcuc3RhdGUuZmFjZXQoenQpLm1hcCgoZSxpKT0+KHRoaXMuZHluYW1pY0RlY29yYXRpb25NYXBbaV09dHlwZW9mIGU9PVwiZnVuY3Rpb25cIik/ZSh0aGlzLnZpZXcpOmUpO2ZvcihsZXQgZT10Lmxlbmd0aDtlPHQubGVuZ3RoKzM7ZSsrKXRoaXMuZHluYW1pY0RlY29yYXRpb25NYXBbZV09ITE7cmV0dXJuIHRoaXMuZGVjb3JhdGlvbnM9Wy4uLnQsdGhpcy5jb21wb3NpdGlvbkRlY28sdGhpcy5jb21wdXRlQmxvY2tHYXBEZWNvKCksdGhpcy52aWV3LnZpZXdTdGF0ZS5saW5lR2FwRGVjb119c2Nyb2xsSW50b1ZpZXcodCl7bGV0e3JhbmdlOmV9PXQsaT10aGlzLmNvb3Jkc0F0KGUuaGVhZCxlLmVtcHR5P2UuYXNzb2M6ZS5oZWFkPmUuYW5jaG9yPy0xOjEpLG47aWYoIWkpcmV0dXJuOyFlLmVtcHR5JiYobj10aGlzLmNvb3Jkc0F0KGUuYW5jaG9yLGUuYW5jaG9yPmUuaGVhZD8tMToxKSkmJihpPXtsZWZ0Ok1hdGgubWluKGkubGVmdCxuLmxlZnQpLHRvcDpNYXRoLm1pbihpLnRvcCxuLnRvcCkscmlnaHQ6TWF0aC5tYXgoaS5yaWdodCxuLnJpZ2h0KSxib3R0b206TWF0aC5tYXgoaS5ib3R0b20sbi5ib3R0b20pfSk7bGV0IHI9MCxvPTAsbD0wLGg9MDtmb3IobGV0IGMgb2YgdGhpcy52aWV3LnN0YXRlLmZhY2V0KEVzKS5tYXAoZj0+Zih0aGlzLnZpZXcpKSlpZihjKXtsZXR7bGVmdDpmLHJpZ2h0OmQsdG9wOnUsYm90dG9tOnB9PWM7ZiE9bnVsbCYmKHI9TWF0aC5tYXgocixmKSksZCE9bnVsbCYmKG89TWF0aC5tYXgobyxkKSksdSE9bnVsbCYmKGw9TWF0aC5tYXgobCx1KSkscCE9bnVsbCYmKGg9TWF0aC5tYXgoaCxwKSl9bGV0IGE9e2xlZnQ6aS5sZWZ0LXIsdG9wOmkudG9wLWwscmlnaHQ6aS5yaWdodCtvLGJvdHRvbTppLmJvdHRvbStofTt5bih0aGlzLnZpZXcuc2Nyb2xsRE9NLGEsZS5oZWFkPGUuYW5jaG9yPy0xOjEsdC54LHQueSx0LnhNYXJnaW4sdC55TWFyZ2luLHRoaXMudmlldy50ZXh0RGlyZWN0aW9uPT1SLkxUUil9fTtmdW5jdGlvbiBSbihzKXtyZXR1cm4gcy5ub2RlLm5vZGVUeXBlPT0xJiZzLm5vZGUuZmlyc3RDaGlsZCYmKHMub2Zmc2V0PT0wfHxzLm5vZGUuY2hpbGROb2Rlc1tzLm9mZnNldC0xXS5jb250ZW50RWRpdGFibGU9PVwiZmFsc2VcIikmJihzLm9mZnNldD09cy5ub2RlLmNoaWxkTm9kZXMubGVuZ3RofHxzLm5vZGUuY2hpbGROb2Rlc1tzLm9mZnNldF0uY29udGVudEVkaXRhYmxlPT1cImZhbHNlXCIpfXZhciBkZT1jbGFzcyBleHRlbmRzIFh7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmhlaWdodD10fXRvRE9NKCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gdGhpcy51cGRhdGVET00odCksdH1lcSh0KXtyZXR1cm4gdC5oZWlnaHQ9PXRoaXMuaGVpZ2h0fXVwZGF0ZURPTSh0KXtyZXR1cm4gdC5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHQrXCJweFwiLCEwfWdldCBlc3RpbWF0ZWRIZWlnaHQoKXtyZXR1cm4gdGhpcy5oZWlnaHR9fTtmdW5jdGlvbiBXcyhzKXtsZXQgdD1zLm9ic2VydmVyLnNlbGVjdGlvblJhbmdlLGU9dC5mb2N1c05vZGUmJkZzKHQuZm9jdXNOb2RlLHQuZm9jdXNPZmZzZXQsMCk7aWYoIWUpcmV0dXJuIG51bGw7bGV0IGk9cy5kb2NWaWV3Lm5lYXJlc3QoZSk7aWYoIWkpcmV0dXJuIG51bGw7aWYoaSBpbnN0YW5jZW9mIEgpe2xldCBuPWU7Zm9yKDtuLnBhcmVudE5vZGUhPWkuZG9tOyluPW4ucGFyZW50Tm9kZTtsZXQgcj1uLnByZXZpb3VzU2libGluZztmb3IoO3ImJiFBLmdldChyKTspcj1yLnByZXZpb3VzU2libGluZztsZXQgbz1yP0EuZ2V0KHIpLnBvc0F0RW5kOmkucG9zQXRTdGFydDtyZXR1cm57ZnJvbTpvLHRvOm8sbm9kZTpuLHRleHQ6ZX19ZWxzZXtmb3IoOzspe2xldHtwYXJlbnQ6cn09aTtpZighcilyZXR1cm4gbnVsbDtpZihyIGluc3RhbmNlb2YgSClicmVhaztpPXJ9bGV0IG49aS5wb3NBdFN0YXJ0O3JldHVybntmcm9tOm4sdG86bitpLmxlbmd0aCxub2RlOmkuZG9tLHRleHQ6ZX19fWZ1bmN0aW9uIExuKHMsdCl7bGV0IGU9V3Mocyk7aWYoIWUpcmV0dXJuIGsubm9uZTtsZXR7ZnJvbTppLHRvOm4sbm9kZTpyLHRleHQ6b309ZSxsPXQubWFwUG9zKGksMSksaD1NYXRoLm1heChsLHQubWFwUG9zKG4sLTEpKSx7c3RhdGU6YX09cyxjPXIubm9kZVR5cGU9PTM/ci5ub2RlVmFsdWU6bmV3IGFlKFtdLGEpLnJlYWRSYW5nZShyLmZpcnN0Q2hpbGQsbnVsbCkudGV4dDtpZihoLWw8Yy5sZW5ndGgpaWYoYS5kb2Muc2xpY2VTdHJpbmcobCxNYXRoLm1pbihhLmRvYy5sZW5ndGgsbCtjLmxlbmd0aCksc3QpPT1jKWg9bCtjLmxlbmd0aDtlbHNlIGlmKGEuZG9jLnNsaWNlU3RyaW5nKE1hdGgubWF4KDAsaC1jLmxlbmd0aCksaCxzdCk9PWMpbD1oLWMubGVuZ3RoO2Vsc2UgcmV0dXJuIGsubm9uZTtlbHNlIGlmKGEuZG9jLnNsaWNlU3RyaW5nKGwsaCxzdCkhPWMpcmV0dXJuIGsubm9uZTtsZXQgZj1BLmdldChyKTtyZXR1cm4gZiBpbnN0YW5jZW9mIGxlP2Y9Zi53aWRnZXQudG9wVmlldzpmJiYoZi5wYXJlbnQ9bnVsbCksay5zZXQoay5yZXBsYWNlKHt3aWRnZXQ6bmV3IGplKHIsbyxmKSxpbmNsdXNpdmU6ITB9KS5yYW5nZShsLGgpKX12YXIgamU9Y2xhc3MgZXh0ZW5kcyBYe2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcigpLHRoaXMudG9wPXQsdGhpcy50ZXh0PWUsdGhpcy50b3BWaWV3PWl9ZXEodCl7cmV0dXJuIHRoaXMudG9wPT10LnRvcCYmdGhpcy50ZXh0PT10LnRleHR9dG9ET00oKXtyZXR1cm4gdGhpcy50b3B9aWdub3JlRXZlbnQoKXtyZXR1cm4hMX1nZXQgY3VzdG9tVmlldygpe3JldHVybiBsZX19O2Z1bmN0aW9uIEZzKHMsdCxlKXtmb3IoOzspe2lmKHMubm9kZVR5cGU9PTMpcmV0dXJuIHM7aWYocy5ub2RlVHlwZT09MSYmdD4wJiZlPD0wKXM9cy5jaGlsZE5vZGVzW3QtMV0sdD1XdChzKTtlbHNlIGlmKHMubm9kZVR5cGU9PTEmJnQ8cy5jaGlsZE5vZGVzLmxlbmd0aCYmZT49MClzPXMuY2hpbGROb2Rlc1t0XSx0PTA7ZWxzZSByZXR1cm4gbnVsbH19ZnVuY3Rpb24gRW4ocyx0KXtyZXR1cm4gcy5ub2RlVHlwZSE9MT8wOih0JiZzLmNoaWxkTm9kZXNbdC0xXS5jb250ZW50RWRpdGFibGU9PVwiZmFsc2VcIj8xOjApfCh0PHMuY2hpbGROb2Rlcy5sZW5ndGgmJnMuY2hpbGROb2Rlc1t0XS5jb250ZW50RWRpdGFibGU9PVwiZmFsc2VcIj8yOjApfXZhciBfZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2hhbmdlcz1bXX1jb21wYXJlUmFuZ2UodCxlKXt6ZSh0LGUsdGhpcy5jaGFuZ2VzKX1jb21wYXJlUG9pbnQodCxlKXt6ZSh0LGUsdGhpcy5jaGFuZ2VzKX19O2Z1bmN0aW9uIEJuKHMsdCxlKXtsZXQgaT1uZXcgX2U7cmV0dXJuIEYuY29tcGFyZShzLHQsZSxpKSxpLmNoYW5nZXN9ZnVuY3Rpb24gUG4ocyx0KXtmb3IobGV0IGU9cztlJiZlIT10O2U9ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZSlpZihlLm5vZGVUeXBlPT0xJiZlLmNvbnRlbnRFZGl0YWJsZT09XCJmYWxzZVwiKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEhuKHMsdCxlPTEpe2xldCBpPXMuY2hhckNhdGVnb3JpemVyKHQpLG49cy5kb2MubGluZUF0KHQpLHI9dC1uLmZyb207aWYobi5sZW5ndGg9PTApcmV0dXJuIHguY3Vyc29yKHQpO3I9PTA/ZT0xOnI9PW4ubGVuZ3RoJiYoZT0tMSk7bGV0IG89cixsPXI7ZTwwP289a3Qobi50ZXh0LHIsITEpOmw9a3Qobi50ZXh0LHIpO2xldCBoPWkobi50ZXh0LnNsaWNlKG8sbCkpO2Zvcig7bz4wOyl7bGV0IGE9a3Qobi50ZXh0LG8sITEpO2lmKGkobi50ZXh0LnNsaWNlKGEsbykpIT1oKWJyZWFrO289YX1mb3IoO2w8bi5sZW5ndGg7KXtsZXQgYT1rdChuLnRleHQsbCk7aWYoaShuLnRleHQuc2xpY2UobCxhKSkhPWgpYnJlYWs7bD1hfXJldHVybiB4LnJhbmdlKG8rbi5mcm9tLGwrbi5mcm9tKX1mdW5jdGlvbiBObihzLHQpe3JldHVybiB0LmxlZnQ+cz90LmxlZnQtczpNYXRoLm1heCgwLHMtdC5yaWdodCl9ZnVuY3Rpb24gVm4ocyx0KXtyZXR1cm4gdC50b3A+cz90LnRvcC1zOk1hdGgubWF4KDAscy10LmJvdHRvbSl9ZnVuY3Rpb24ga2Uocyx0KXtyZXR1cm4gcy50b3A8dC5ib3R0b20tMSYmcy5ib3R0b20+dC50b3ArMX1mdW5jdGlvbiBSaShzLHQpe3JldHVybiB0PHMudG9wP3t0b3A6dCxsZWZ0OnMubGVmdCxyaWdodDpzLnJpZ2h0LGJvdHRvbTpzLmJvdHRvbX06c31mdW5jdGlvbiBMaShzLHQpe3JldHVybiB0PnMuYm90dG9tP3t0b3A6cy50b3AsbGVmdDpzLmxlZnQscmlnaHQ6cy5yaWdodCxib3R0b206dH06c31mdW5jdGlvbiAkZShzLHQsZSl7bGV0IGksbixyLG8sbD0hMSxoLGEsYyxmO2ZvcihsZXQgcD1zLmZpcnN0Q2hpbGQ7cDtwPXAubmV4dFNpYmxpbmcpe2xldCBiPVZ0KHApO2ZvcihsZXQgbT0wO208Yi5sZW5ndGg7bSsrKXtsZXQgZz1iW21dO24mJmtlKG4sZykmJihnPVJpKExpKGcsbi5ib3R0b20pLG4udG9wKSk7bGV0IFM9Tm4odCxnKSx3PVZuKGUsZyk7aWYoUz09MCYmdz09MClyZXR1cm4gcC5ub2RlVHlwZT09Mz9FaShwLHQsZSk6JGUocCx0LGUpOyghaXx8bz53fHxvPT13JiZyPlMpJiYoaT1wLG49ZyxyPVMsbz13LGw9IVN8fChTPjA/bTxiLmxlbmd0aC0xOm0+MCkpLFM9PTA/ZT5nLmJvdHRvbSYmKCFjfHxjLmJvdHRvbTxnLmJvdHRvbSk/KGg9cCxjPWcpOmU8Zy50b3AmJighZnx8Zi50b3A+Zy50b3ApJiYoYT1wLGY9Zyk6YyYma2UoYyxnKT9jPUxpKGMsZy5ib3R0b20pOmYmJmtlKGYsZykmJihmPVJpKGYsZy50b3ApKX19aWYoYyYmYy5ib3R0b20+PWU/KGk9aCxuPWMpOmYmJmYudG9wPD1lJiYoaT1hLG49ZiksIWkpcmV0dXJue25vZGU6cyxvZmZzZXQ6MH07bGV0IGQ9TWF0aC5tYXgobi5sZWZ0LE1hdGgubWluKG4ucmlnaHQsdCkpO2lmKGkubm9kZVR5cGU9PTMpcmV0dXJuIEVpKGksZCxlKTtpZihsJiZpLmNvbnRlbnRFZGl0YWJsZSE9XCJmYWxzZVwiKXJldHVybiAkZShpLGQsZSk7bGV0IHU9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChzLmNoaWxkTm9kZXMsaSkrKHQ+PShuLmxlZnQrbi5yaWdodCkvMj8xOjApO3JldHVybntub2RlOnMsb2Zmc2V0OnV9fWZ1bmN0aW9uIEVpKHMsdCxlKXtsZXQgaT1zLm5vZGVWYWx1ZS5sZW5ndGgsbj0tMSxyPTFlOSxvPTA7Zm9yKGxldCBsPTA7bDxpO2wrKyl7bGV0IGg9d3QocyxsLGwrMSkuZ2V0Q2xpZW50UmVjdHMoKTtmb3IobGV0IGE9MDthPGgubGVuZ3RoO2ErKyl7bGV0IGM9aFthXTtpZihjLnRvcD09Yy5ib3R0b20pY29udGludWU7b3x8KG89dC1jLmxlZnQpO2xldCBmPShjLnRvcD5lP2MudG9wLWU6ZS1jLmJvdHRvbSktMTtpZihjLmxlZnQtMTw9dCYmYy5yaWdodCsxPj10JiZmPHIpe2xldCBkPXQ+PShjLmxlZnQrYy5yaWdodCkvMix1PWQ7aWYoKHkuY2hyb21lfHx5LmdlY2tvKSYmd3QocyxsKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0PT1jLnJpZ2h0JiYodT0hZCksZjw9MClyZXR1cm57bm9kZTpzLG9mZnNldDpsKyh1PzE6MCl9O249bCsodT8xOjApLHI9Zn19fXJldHVybntub2RlOnMsb2Zmc2V0Om4+LTE/bjpvPjA/cy5ub2RlVmFsdWUubGVuZ3RoOjB9fWZ1bmN0aW9uIHpzKHMse3g6dCx5OmV9LGksbj0tMSl7dmFyIHI7bGV0IG89cy5jb250ZW50RE9NLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9by50b3Arcy52aWV3U3RhdGUucGFkZGluZ1RvcCxoLHtkb2NIZWlnaHQ6YX09cy52aWV3U3RhdGUsYz1lLWw7aWYoYzwwKXJldHVybiAwO2lmKGM+YSlyZXR1cm4gcy5zdGF0ZS5kb2MubGVuZ3RoO2ZvcihsZXQgZz1zLmRlZmF1bHRMaW5lSGVpZ2h0LzIsUz0hMTtoPXMuZWxlbWVudEF0SGVpZ2h0KGMpLGgudHlwZSE9VC5UZXh0Oylmb3IoO2M9bj4wP2guYm90dG9tK2c6aC50b3AtZywhKGM+PTAmJmM8PWEpOyl7aWYoUylyZXR1cm4gaT9udWxsOjA7Uz0hMCxuPS1ufWU9bCtjO2xldCBmPWguZnJvbTtpZihmPHMudmlld3BvcnQuZnJvbSlyZXR1cm4gcy52aWV3cG9ydC5mcm9tPT0wPzA6aT9udWxsOkJpKHMsbyxoLHQsZSk7aWYoZj5zLnZpZXdwb3J0LnRvKXJldHVybiBzLnZpZXdwb3J0LnRvPT1zLnN0YXRlLmRvYy5sZW5ndGg/cy5zdGF0ZS5kb2MubGVuZ3RoOmk/bnVsbDpCaShzLG8saCx0LGUpO2xldCBkPXMuZG9tLm93bmVyRG9jdW1lbnQsdT1zLnJvb3QuZWxlbWVudEZyb21Qb2ludD9zLnJvb3Q6ZCxwPXUuZWxlbWVudEZyb21Qb2ludCh0LGUpO3AmJiFzLmNvbnRlbnRET00uY29udGFpbnMocCkmJihwPW51bGwpLHB8fCh0PU1hdGgubWF4KG8ubGVmdCsxLE1hdGgubWluKG8ucmlnaHQtMSx0KSkscD11LmVsZW1lbnRGcm9tUG9pbnQodCxlKSxwJiYhcy5jb250ZW50RE9NLmNvbnRhaW5zKHApJiYocD1udWxsKSk7bGV0IGIsbT0tMTtpZihwJiYoKHI9cy5kb2NWaWV3Lm5lYXJlc3QocCkpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5pc0VkaXRhYmxlKSE9ITEpe2lmKGQuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCl7bGV0IGc9ZC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KHQsZSk7ZyYmKHtvZmZzZXROb2RlOmIsb2Zmc2V0Om19PWcpfWVsc2UgaWYoZC5jYXJldFJhbmdlRnJvbVBvaW50KXtsZXQgZz1kLmNhcmV0UmFuZ2VGcm9tUG9pbnQodCxlKTtnJiYoe3N0YXJ0Q29udGFpbmVyOmIsc3RhcnRPZmZzZXQ6bX09ZywoIXMuY29udGVudERPTS5jb250YWlucyhiKXx8eS5zYWZhcmkmJlduKGIsbSx0KXx8eS5jaHJvbWUmJkZuKGIsbSx0KSkmJihiPXZvaWQgMCkpfX1pZighYnx8IXMuZG9jVmlldy5kb20uY29udGFpbnMoYikpe2xldCBnPUguZmluZChzLmRvY1ZpZXcsZik7aWYoIWcpcmV0dXJuIGM+aC50b3AraC5oZWlnaHQvMj9oLnRvOmguZnJvbTsoe25vZGU6YixvZmZzZXQ6bX09JGUoZy5kb20sdCxlKSl9cmV0dXJuIHMuZG9jVmlldy5wb3NGcm9tRE9NKGIsbSl9ZnVuY3Rpb24gQmkocyx0LGUsaSxuKXtsZXQgcj1NYXRoLnJvdW5kKChpLXQubGVmdCkqcy5kZWZhdWx0Q2hhcmFjdGVyV2lkdGgpO3MubGluZVdyYXBwaW5nJiZlLmhlaWdodD5zLmRlZmF1bHRMaW5lSGVpZ2h0KjEuNSYmKHIrPU1hdGguZmxvb3IoKG4tZS50b3ApL3MuZGVmYXVsdExpbmVIZWlnaHQpKnMudmlld1N0YXRlLmhlaWdodE9yYWNsZS5saW5lTGVuZ3RoKTtsZXQgbz1zLnN0YXRlLnNsaWNlRG9jKGUuZnJvbSxlLnRvKTtyZXR1cm4gZS5mcm9tK0xlKG8scixzLnN0YXRlLnRhYlNpemUpfWZ1bmN0aW9uIFduKHMsdCxlKXtsZXQgaTtpZihzLm5vZGVUeXBlIT0zfHx0IT0oaT1zLm5vZGVWYWx1ZS5sZW5ndGgpKXJldHVybiExO2ZvcihsZXQgbj1zLm5leHRTaWJsaW5nO247bj1uLm5leHRTaWJsaW5nKWlmKG4ubm9kZVR5cGUhPTF8fG4ubm9kZU5hbWUhPVwiQlJcIilyZXR1cm4hMTtyZXR1cm4gd3QocyxpLTEsaSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdD5lfWZ1bmN0aW9uIEZuKHMsdCxlKXtpZih0IT0wKXJldHVybiExO2ZvcihsZXQgbj1zOzspe2xldCByPW4ucGFyZW50Tm9kZTtpZighcnx8ci5ub2RlVHlwZSE9MXx8ci5maXJzdENoaWxkIT1uKXJldHVybiExO2lmKHIuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY20tbGluZVwiKSlicmVhaztuPXJ9bGV0IGk9cy5ub2RlVHlwZT09MT9zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnd0KHMsMCxNYXRoLm1heChzLm5vZGVWYWx1ZS5sZW5ndGgsMSkpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBlLWkubGVmdD41fWZ1bmN0aW9uIHpuKHMsdCxlLGkpe2xldCBuPXMuc3RhdGUuZG9jLmxpbmVBdCh0LmhlYWQpLHI9IWl8fCFzLmxpbmVXcmFwcGluZz9udWxsOnMuY29vcmRzQXRQb3ModC5hc3NvYzwwJiZ0LmhlYWQ+bi5mcm9tP3QuaGVhZC0xOnQuaGVhZCk7aWYocil7bGV0IGg9cy5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1zLnRleHREaXJlY3Rpb25BdChuLmZyb20pLGM9cy5wb3NBdENvb3Jkcyh7eDplPT0oYT09Ui5MVFIpP2gucmlnaHQtMTpoLmxlZnQrMSx5OihyLnRvcCtyLmJvdHRvbSkvMn0pO2lmKGMhPW51bGwpcmV0dXJuIHguY3Vyc29yKGMsZT8tMToxKX1sZXQgbz1ILmZpbmQocy5kb2NWaWV3LHQuaGVhZCksbD1vP2U/by5wb3NBdEVuZDpvLnBvc0F0U3RhcnQ6ZT9uLnRvOm4uZnJvbTtyZXR1cm4geC5jdXJzb3IobCxlPy0xOjEpfWZ1bmN0aW9uIFBpKHMsdCxlLGkpe2xldCBuPXMuc3RhdGUuZG9jLmxpbmVBdCh0LmhlYWQpLHI9cy5iaWRpU3BhbnMobiksbz1zLnRleHREaXJlY3Rpb25BdChuLmZyb20pO2ZvcihsZXQgbD10LGg9bnVsbDs7KXtsZXQgYT1WcyhuLHIsbyxsLGUpLGM9TnM7aWYoIWEpe2lmKG4ubnVtYmVyPT0oZT9zLnN0YXRlLmRvYy5saW5lczoxKSlyZXR1cm4gbDtjPWBcbmAsbj1zLnN0YXRlLmRvYy5saW5lKG4ubnVtYmVyKyhlPzE6LTEpKSxyPXMuYmlkaVNwYW5zKG4pLGE9eC5jdXJzb3IoZT9uLmZyb206bi50byl9aWYoaCl7aWYoIWgoYykpcmV0dXJuIGx9ZWxzZXtpZighaSlyZXR1cm4gYTtoPWkoYyl9bD1hfX1mdW5jdGlvbiBJbihzLHQsZSl7bGV0IGk9cy5zdGF0ZS5jaGFyQ2F0ZWdvcml6ZXIodCksbj1pKGUpO3JldHVybiByPT57bGV0IG89aShyKTtyZXR1cm4gbj09YW4uU3BhY2UmJihuPW8pLG49PW99fWZ1bmN0aW9uIHFuKHMsdCxlLGkpe2xldCBuPXQuaGVhZCxyPWU/MTotMTtpZihuPT0oZT9zLnN0YXRlLmRvYy5sZW5ndGg6MCkpcmV0dXJuIHguY3Vyc29yKG4sdC5hc3NvYyk7bGV0IG89dC5nb2FsQ29sdW1uLGwsaD1zLmNvbnRlbnRET00uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1zLmNvb3Jkc0F0UG9zKG4pLGM9cy5kb2N1bWVudFRvcDtpZihhKW89PW51bGwmJihvPWEubGVmdC1oLmxlZnQpLGw9cjwwP2EudG9wOmEuYm90dG9tO2Vsc2V7bGV0IHU9cy52aWV3U3RhdGUubGluZUJsb2NrQXQobik7bz09bnVsbCYmKG89TWF0aC5taW4oaC5yaWdodC1oLmxlZnQscy5kZWZhdWx0Q2hhcmFjdGVyV2lkdGgqKG4tdS5mcm9tKSkpLGw9KHI8MD91LnRvcDp1LmJvdHRvbSkrY31sZXQgZj1oLmxlZnQrbyxkPWk/P3MuZGVmYXVsdExpbmVIZWlnaHQ+PjE7Zm9yKGxldCB1PTA7O3UrPTEwKXtsZXQgcD1sKyhkK3UpKnIsYj16cyhzLHt4OmYseTpwfSwhMSxyKTtpZihwPGgudG9wfHxwPmguYm90dG9tfHwocjwwP2I8bjpiPm4pKXJldHVybiB4LmN1cnNvcihiLHQuYXNzb2Msdm9pZCAwLG8pfX1mdW5jdGlvbiBBZShzLHQsZSl7bGV0IGk9cy5zdGF0ZS5mYWNldChMcykubWFwKG49Pm4ocykpO2Zvcig7Oyl7bGV0IG49ITE7Zm9yKGxldCByIG9mIGkpci5iZXR3ZWVuKGUuZnJvbS0xLGUuZnJvbSsxLChvLGwsaCk9PntlLmZyb20+byYmZS5mcm9tPGwmJihlPXQuaGVhZD5lLmZyb20/eC5jdXJzb3IobywxKTp4LmN1cnNvcihsLC0xKSxuPSEwKX0pO2lmKCFuKXJldHVybiBlfX12YXIgR2U9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5sYXN0S2V5Q29kZT0wLHRoaXMubGFzdEtleVRpbWU9MCx0aGlzLmxhc3RUb3VjaFRpbWU9MCx0aGlzLmxhc3RGb2N1c1RpbWU9MCx0aGlzLmxhc3RTY3JvbGxUb3A9MCx0aGlzLmxhc3RTY3JvbGxMZWZ0PTAsdGhpcy5jaHJvbWVTY3JvbGxIYWNrPS0xLHRoaXMucGVuZGluZ0lPU0tleT12b2lkIDAsdGhpcy5sYXN0U2VsZWN0aW9uT3JpZ2luPW51bGwsdGhpcy5sYXN0U2VsZWN0aW9uVGltZT0wLHRoaXMubGFzdEVzY1ByZXNzPTAsdGhpcy5sYXN0Q29udGV4dE1lbnU9MCx0aGlzLnNjcm9sbEhhbmRsZXJzPVtdLHRoaXMucmVnaXN0ZXJlZEV2ZW50cz1bXSx0aGlzLmN1c3RvbUhhbmRsZXJzPVtdLHRoaXMuY29tcG9zaW5nPS0xLHRoaXMuY29tcG9zaXRpb25GaXJzdENoYW5nZT1udWxsLHRoaXMuY29tcG9zaXRpb25FbmRlZEF0PTAsdGhpcy5tb3VzZVNlbGVjdGlvbj1udWxsO2ZvcihsZXQgZSBpbiBQKXtsZXQgaT1QW2VdO3QuY29udGVudERPTS5hZGRFdmVudExpc3RlbmVyKGUsbj0+eyFIaSh0LG4pfHx0aGlzLmlnbm9yZUR1cmluZ0NvbXBvc2l0aW9uKG4pfHxlPT1cImtleWRvd25cIiYmdGhpcy5rZXlkb3duKHQsbil8fCh0aGlzLm11c3RGbHVzaE9ic2VydmVyKG4pJiZ0Lm9ic2VydmVyLmZvcmNlRmx1c2goKSx0aGlzLnJ1bkN1c3RvbUhhbmRsZXJzKGUsdCxuKT9uLnByZXZlbnREZWZhdWx0KCk6aSh0LG4pKX0sWGVbZV0pLHRoaXMucmVnaXN0ZXJlZEV2ZW50cy5wdXNoKGUpfXkuY2hyb21lJiZ5LmNocm9tZV92ZXJzaW9uPT0xMDImJnQuc2Nyb2xsRE9NLmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCgpPT57dGhpcy5jaHJvbWVTY3JvbGxIYWNrPDA/dC5jb250ZW50RE9NLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCI6d2luZG93LmNsZWFyVGltZW91dCh0aGlzLmNocm9tZVNjcm9sbEhhY2spLHRoaXMuY2hyb21lU2Nyb2xsSGFjaz1zZXRUaW1lb3V0KCgpPT57dGhpcy5jaHJvbWVTY3JvbGxIYWNrPS0xLHQuY29udGVudERPTS5zdHlsZS5wb2ludGVyRXZlbnRzPVwiXCJ9LDEwMCl9LHtwYXNzaXZlOiEwfSksdGhpcy5ub3RpZmllZEZvY3VzZWQ9dC5oYXNGb2N1cyx5LnNhZmFyaSYmdC5jb250ZW50RE9NLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCgpPT5udWxsKX1zZXRTZWxlY3Rpb25PcmlnaW4odCl7dGhpcy5sYXN0U2VsZWN0aW9uT3JpZ2luPXQsdGhpcy5sYXN0U2VsZWN0aW9uVGltZT1EYXRlLm5vdygpfWVuc3VyZUhhbmRsZXJzKHQsZSl7dmFyIGk7bGV0IG47dGhpcy5jdXN0b21IYW5kbGVycz1bXTtmb3IobGV0IHIgb2YgZSlpZihuPShpPXIudXBkYXRlKHQpLnNwZWMpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5kb21FdmVudEhhbmRsZXJzKXt0aGlzLmN1c3RvbUhhbmRsZXJzLnB1c2goe3BsdWdpbjpyLnZhbHVlLGhhbmRsZXJzOm59KTtmb3IobGV0IG8gaW4gbil0aGlzLnJlZ2lzdGVyZWRFdmVudHMuaW5kZXhPZihvKTwwJiZvIT1cInNjcm9sbFwiJiYodGhpcy5yZWdpc3RlcmVkRXZlbnRzLnB1c2gobyksdC5jb250ZW50RE9NLmFkZEV2ZW50TGlzdGVuZXIobyxsPT57IUhpKHQsbCl8fHRoaXMucnVuQ3VzdG9tSGFuZGxlcnMobyx0LGwpJiZsLnByZXZlbnREZWZhdWx0KCl9KSl9fXJ1bkN1c3RvbUhhbmRsZXJzKHQsZSxpKXtmb3IobGV0IG4gb2YgdGhpcy5jdXN0b21IYW5kbGVycyl7bGV0IHI9bi5oYW5kbGVyc1t0XTtpZihyKXRyeXtpZihyLmNhbGwobi5wbHVnaW4saSxlKXx8aS5kZWZhdWx0UHJldmVudGVkKXJldHVybiEwfWNhdGNoKG8pe250KGUuc3RhdGUsbyl9fXJldHVybiExfXJ1blNjcm9sbEhhbmRsZXJzKHQsZSl7dGhpcy5sYXN0U2Nyb2xsVG9wPXQuc2Nyb2xsRE9NLnNjcm9sbFRvcCx0aGlzLmxhc3RTY3JvbGxMZWZ0PXQuc2Nyb2xsRE9NLnNjcm9sbExlZnQ7Zm9yKGxldCBpIG9mIHRoaXMuY3VzdG9tSGFuZGxlcnMpe2xldCBuPWkuaGFuZGxlcnMuc2Nyb2xsO2lmKG4pdHJ5e24uY2FsbChpLnBsdWdpbixlLHQpfWNhdGNoKHIpe250KHQuc3RhdGUscil9fX1rZXlkb3duKHQsZSl7aWYodGhpcy5sYXN0S2V5Q29kZT1lLmtleUNvZGUsdGhpcy5sYXN0S2V5VGltZT1EYXRlLm5vdygpLGUua2V5Q29kZT09OSYmRGF0ZS5ub3coKTx0aGlzLmxhc3RFc2NQcmVzcysyZTMpcmV0dXJuITA7aWYoeS5hbmRyb2lkJiZ5LmNocm9tZSYmIWUuc3ludGhldGljJiYoZS5rZXlDb2RlPT0xM3x8ZS5rZXlDb2RlPT04KSlyZXR1cm4gdC5vYnNlcnZlci5kZWxheUFuZHJvaWRLZXkoZS5rZXksZS5rZXlDb2RlKSwhMDtsZXQgaTtyZXR1cm4geS5pb3MmJiFlLnN5bnRoZXRpYyYmIWUuYWx0S2V5JiYhZS5tZXRhS2V5JiYoKGk9SXMuZmluZChuPT5uLmtleUNvZGU9PWUua2V5Q29kZSkpJiYhZS5jdHJsS2V5fHxLbi5pbmRleE9mKGUua2V5KT4tMSYmZS5jdHJsS2V5JiYhZS5zaGlmdEtleSk/KHRoaXMucGVuZGluZ0lPU0tleT1pfHxlLHNldFRpbWVvdXQoKCk9PnRoaXMuZmx1c2hJT1NLZXkodCksMjUwKSwhMCk6ITF9Zmx1c2hJT1NLZXkodCl7bGV0IGU9dGhpcy5wZW5kaW5nSU9TS2V5O3JldHVybiBlPyh0aGlzLnBlbmRpbmdJT1NLZXk9dm9pZCAwLEV0KHQuY29udGVudERPTSxlLmtleSxlLmtleUNvZGUpKTohMX1pZ25vcmVEdXJpbmdDb21wb3NpdGlvbih0KXtyZXR1cm4vXmtleS8udGVzdCh0LnR5cGUpP3RoaXMuY29tcG9zaW5nPjA/ITA6eS5zYWZhcmkmJiF5LmlvcyYmRGF0ZS5ub3coKS10aGlzLmNvbXBvc2l0aW9uRW5kZWRBdDwxMDA/KHRoaXMuY29tcG9zaXRpb25FbmRlZEF0PTAsITApOiExOiExfW11c3RGbHVzaE9ic2VydmVyKHQpe3JldHVybiB0LnR5cGU9PVwia2V5ZG93blwiJiZ0LmtleUNvZGUhPTIyOX1zdGFydE1vdXNlU2VsZWN0aW9uKHQpe3RoaXMubW91c2VTZWxlY3Rpb24mJnRoaXMubW91c2VTZWxlY3Rpb24uZGVzdHJveSgpLHRoaXMubW91c2VTZWxlY3Rpb249dH11cGRhdGUodCl7dGhpcy5tb3VzZVNlbGVjdGlvbiYmdGhpcy5tb3VzZVNlbGVjdGlvbi51cGRhdGUodCksdC50cmFuc2FjdGlvbnMubGVuZ3RoJiYodGhpcy5sYXN0S2V5Q29kZT10aGlzLmxhc3RTZWxlY3Rpb25UaW1lPTApfWRlc3Ryb3koKXt0aGlzLm1vdXNlU2VsZWN0aW9uJiZ0aGlzLm1vdXNlU2VsZWN0aW9uLmRlc3Ryb3koKX19LElzPVt7a2V5OlwiQmFja3NwYWNlXCIsa2V5Q29kZTo4LGlucHV0VHlwZTpcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwifSx7a2V5OlwiRW50ZXJcIixrZXlDb2RlOjEzLGlucHV0VHlwZTpcImluc2VydFBhcmFncmFwaFwifSx7a2V5OlwiRGVsZXRlXCIsa2V5Q29kZTo0NixpbnB1dFR5cGU6XCJkZWxldGVDb250ZW50Rm9yd2FyZFwifV0sS249XCJkdGhrb1wiLHFzPVsxNiwxNywxOCwyMCw5MSw5MiwyMjQsMjI1XSxZZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxuKXt0aGlzLnZpZXc9dCx0aGlzLnN0eWxlPWksdGhpcy5tdXN0U2VsZWN0PW4sdGhpcy5sYXN0RXZlbnQ9ZTtsZXQgcj10LmNvbnRlbnRET00ub3duZXJEb2N1bWVudDtyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLm1vdmU9dGhpcy5tb3ZlLmJpbmQodGhpcykpLHIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLnVwPXRoaXMudXAuYmluZCh0aGlzKSksdGhpcy5leHRlbmQ9ZS5zaGlmdEtleSx0aGlzLm11bHRpcGxlPXQuc3RhdGUuZmFjZXQoTHQuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbnMpJiZqbih0LGUpLHRoaXMuZHJhZ01vdmU9X24odCxlKSx0aGlzLmRyYWdnaW5nPSRuKHQsZSkmJiRzKGUpPT0xP251bGw6ITEsdGhpcy5kcmFnZ2luZz09PSExJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0KGUpKX1tb3ZlKHQpe2lmKHQuYnV0dG9ucz09MClyZXR1cm4gdGhpcy5kZXN0cm95KCk7dGhpcy5kcmFnZ2luZz09PSExJiZ0aGlzLnNlbGVjdCh0aGlzLmxhc3RFdmVudD10KX11cCh0KXt0aGlzLmRyYWdnaW5nPT1udWxsJiZ0aGlzLnNlbGVjdCh0aGlzLmxhc3RFdmVudCksdGhpcy5kcmFnZ2luZ3x8dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZGVzdHJveSgpfWRlc3Ryb3koKXtsZXQgdD10aGlzLnZpZXcuY29udGVudERPTS5vd25lckRvY3VtZW50O3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMubW92ZSksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMudXApLHRoaXMudmlldy5pbnB1dFN0YXRlLm1vdXNlU2VsZWN0aW9uPW51bGx9c2VsZWN0KHQpe2xldCBlPXRoaXMuc3R5bGUuZ2V0KHQsdGhpcy5leHRlbmQsdGhpcy5tdWx0aXBsZSk7KHRoaXMubXVzdFNlbGVjdHx8IWUuZXEodGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbil8fGUubWFpbi5hc3NvYyE9dGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbi5tYWluLmFzc29jKSYmdGhpcy52aWV3LmRpc3BhdGNoKHtzZWxlY3Rpb246ZSx1c2VyRXZlbnQ6XCJzZWxlY3QucG9pbnRlclwiLHNjcm9sbEludG9WaWV3OiEwfSksdGhpcy5tdXN0U2VsZWN0PSExfXVwZGF0ZSh0KXt0LmRvY0NoYW5nZWQmJnRoaXMuZHJhZ2dpbmcmJih0aGlzLmRyYWdnaW5nPXRoaXMuZHJhZ2dpbmcubWFwKHQuY2hhbmdlcykpLHRoaXMuc3R5bGUudXBkYXRlKHQpJiZzZXRUaW1lb3V0KCgpPT50aGlzLnNlbGVjdCh0aGlzLmxhc3RFdmVudCksMjApfX07ZnVuY3Rpb24gam4ocyx0KXtsZXQgZT1zLnN0YXRlLmZhY2V0KE1zKTtyZXR1cm4gZS5sZW5ndGg/ZVswXSh0KTp5Lm1hYz90Lm1ldGFLZXk6dC5jdHJsS2V5fWZ1bmN0aW9uIF9uKHMsdCl7bGV0IGU9cy5zdGF0ZS5mYWNldChrcyk7cmV0dXJuIGUubGVuZ3RoP2VbMF0odCk6eS5tYWM/IXQuYWx0S2V5OiF0LmN0cmxLZXl9ZnVuY3Rpb24gJG4ocyx0KXtsZXR7bWFpbjplfT1zLnN0YXRlLnNlbGVjdGlvbjtpZihlLmVtcHR5KXJldHVybiExO2xldCBpPXNlKHMucm9vdCk7aWYoIWl8fGkucmFuZ2VDb3VudD09MClyZXR1cm4hMDtsZXQgbj1pLmdldFJhbmdlQXQoMCkuZ2V0Q2xpZW50UmVjdHMoKTtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKyl7bGV0IG89bltyXTtpZihvLmxlZnQ8PXQuY2xpZW50WCYmby5yaWdodD49dC5jbGllbnRYJiZvLnRvcDw9dC5jbGllbnRZJiZvLmJvdHRvbT49dC5jbGllbnRZKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEhpKHMsdCl7aWYoIXQuYnViYmxlcylyZXR1cm4hMDtpZih0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuITE7Zm9yKGxldCBlPXQudGFyZ2V0LGk7ZSE9cy5jb250ZW50RE9NO2U9ZS5wYXJlbnROb2RlKWlmKCFlfHxlLm5vZGVUeXBlPT0xMXx8KGk9QS5nZXQoZSkpJiZpLmlnbm9yZUV2ZW50KHQpKXJldHVybiExO3JldHVybiEwfXZhciBQPU9iamVjdC5jcmVhdGUobnVsbCksWGU9T2JqZWN0LmNyZWF0ZShudWxsKSxLcz15LmllJiZ5LmllX3ZlcnNpb248MTV8fHkuaW9zJiZ5LndlYmtpdF92ZXJzaW9uPDYwNDtmdW5jdGlvbiBHbihzKXtsZXQgdD1zLmRvbS5wYXJlbnROb2RlO2lmKCF0KXJldHVybjtsZXQgZT10LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKSk7ZS5zdHlsZS5jc3NUZXh0PVwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAtMTAwMDBweDsgdG9wOiAxMHB4XCIsZS5mb2N1cygpLHNldFRpbWVvdXQoKCk9PntzLmZvY3VzKCksZS5yZW1vdmUoKSxqcyhzLGUudmFsdWUpfSw1MCl9ZnVuY3Rpb24ganMocyx0KXtsZXR7c3RhdGU6ZX09cyxpLG49MSxyPWUudG9UZXh0KHQpLG89ci5saW5lcz09ZS5zZWxlY3Rpb24ucmFuZ2VzLmxlbmd0aDtpZihVZSE9bnVsbCYmZS5zZWxlY3Rpb24ucmFuZ2VzLmV2ZXJ5KGg9PmguZW1wdHkpJiZVZT09ci50b1N0cmluZygpKXtsZXQgaD0tMTtpPWUuY2hhbmdlQnlSYW5nZShhPT57bGV0IGM9ZS5kb2MubGluZUF0KGEuZnJvbSk7aWYoYy5mcm9tPT1oKXJldHVybntyYW5nZTphfTtoPWMuZnJvbTtsZXQgZj1lLnRvVGV4dCgobz9yLmxpbmUobisrKS50ZXh0OnQpK2UubGluZUJyZWFrKTtyZXR1cm57Y2hhbmdlczp7ZnJvbTpjLmZyb20saW5zZXJ0OmZ9LHJhbmdlOnguY3Vyc29yKGEuZnJvbStmLmxlbmd0aCl9fSl9ZWxzZSBvP2k9ZS5jaGFuZ2VCeVJhbmdlKGg9PntsZXQgYT1yLmxpbmUobisrKTtyZXR1cm57Y2hhbmdlczp7ZnJvbTpoLmZyb20sdG86aC50byxpbnNlcnQ6YS50ZXh0fSxyYW5nZTp4LmN1cnNvcihoLmZyb20rYS5sZW5ndGgpfX0pOmk9ZS5yZXBsYWNlU2VsZWN0aW9uKHIpO3MuZGlzcGF0Y2goaSx7dXNlckV2ZW50OlwiaW5wdXQucGFzdGVcIixzY3JvbGxJbnRvVmlldzohMH0pfVAua2V5ZG93bj0ocyx0KT0+e3MuaW5wdXRTdGF0ZS5zZXRTZWxlY3Rpb25PcmlnaW4oXCJzZWxlY3RcIiksdC5rZXlDb2RlPT0yNz9zLmlucHV0U3RhdGUubGFzdEVzY1ByZXNzPURhdGUubm93KCk6cXMuaW5kZXhPZih0LmtleUNvZGUpPDAmJihzLmlucHV0U3RhdGUubGFzdEVzY1ByZXNzPTApfTtQLnRvdWNoc3RhcnQ9KHMsdCk9PntzLmlucHV0U3RhdGUubGFzdFRvdWNoVGltZT1EYXRlLm5vdygpLHMuaW5wdXRTdGF0ZS5zZXRTZWxlY3Rpb25PcmlnaW4oXCJzZWxlY3QucG9pbnRlclwiKX07UC50b3VjaG1vdmU9cz0+e3MuaW5wdXRTdGF0ZS5zZXRTZWxlY3Rpb25PcmlnaW4oXCJzZWxlY3QucG9pbnRlclwiKX07WGUudG91Y2hzdGFydD1YZS50b3VjaG1vdmU9e3Bhc3NpdmU6ITB9O1AubW91c2Vkb3duPShzLHQpPT57aWYocy5vYnNlcnZlci5mbHVzaCgpLHMuaW5wdXRTdGF0ZS5sYXN0VG91Y2hUaW1lPkRhdGUubm93KCktMmUzKXJldHVybjtsZXQgZT1udWxsO2ZvcihsZXQgaSBvZiBzLnN0YXRlLmZhY2V0KEFzKSlpZihlPWkocyx0KSxlKWJyZWFrO2lmKCFlJiZ0LmJ1dHRvbj09MCYmKGU9VW4ocyx0KSksZSl7bGV0IGk9cy5yb290LmFjdGl2ZUVsZW1lbnQhPXMuY29udGVudERPTTtpJiZzLm9ic2VydmVyLmlnbm9yZSgoKT0+dXMocy5jb250ZW50RE9NKSkscy5pbnB1dFN0YXRlLnN0YXJ0TW91c2VTZWxlY3Rpb24obmV3IFllKHMsdCxlLGkpKX19O2Z1bmN0aW9uIE5pKHMsdCxlLGkpe2lmKGk9PTEpcmV0dXJuIHguY3Vyc29yKHQsZSk7aWYoaT09MilyZXR1cm4gSG4ocy5zdGF0ZSx0LGUpO3tsZXQgbj1ILmZpbmQocy5kb2NWaWV3LHQpLHI9cy5zdGF0ZS5kb2MubGluZUF0KG4/bi5wb3NBdEVuZDp0KSxvPW4/bi5wb3NBdFN0YXJ0OnIuZnJvbSxsPW4/bi5wb3NBdEVuZDpyLnRvO3JldHVybiBsPHMuc3RhdGUuZG9jLmxlbmd0aCYmbD09ci50byYmbCsrLHgucmFuZ2UobyxsKX19dmFyIF9zPShzLHQpPT5zPj10LnRvcCYmczw9dC5ib3R0b20sVmk9KHMsdCxlKT0+X3ModCxlKSYmcz49ZS5sZWZ0JiZzPD1lLnJpZ2h0O2Z1bmN0aW9uIFluKHMsdCxlLGkpe2xldCBuPUguZmluZChzLmRvY1ZpZXcsdCk7aWYoIW4pcmV0dXJuIDE7bGV0IHI9dC1uLnBvc0F0U3RhcnQ7aWYocj09MClyZXR1cm4gMTtpZihyPT1uLmxlbmd0aClyZXR1cm4tMTtsZXQgbz1uLmNvb3Jkc0F0KHIsLTEpO2lmKG8mJlZpKGUsaSxvKSlyZXR1cm4tMTtsZXQgbD1uLmNvb3Jkc0F0KHIsMSk7cmV0dXJuIGwmJlZpKGUsaSxsKT8xOm8mJl9zKGksbyk/LTE6MX1mdW5jdGlvbiBXaShzLHQpe2xldCBlPXMucG9zQXRDb29yZHMoe3g6dC5jbGllbnRYLHk6dC5jbGllbnRZfSwhMSk7cmV0dXJue3BvczplLGJpYXM6WW4ocyxlLHQuY2xpZW50WCx0LmNsaWVudFkpfX12YXIgWG49eS5pZSYmeS5pZV92ZXJzaW9uPD0xMSxGaT1udWxsLHppPTAsSWk9MDtmdW5jdGlvbiAkcyhzKXtpZighWG4pcmV0dXJuIHMuZGV0YWlsO2xldCB0PUZpLGU9SWk7cmV0dXJuIEZpPXMsSWk9RGF0ZS5ub3coKSx6aT0hdHx8ZT5EYXRlLm5vdygpLTQwMCYmTWF0aC5hYnModC5jbGllbnRYLXMuY2xpZW50WCk8MiYmTWF0aC5hYnModC5jbGllbnRZLXMuY2xpZW50WSk8Mj8oemkrMSklMzoxfWZ1bmN0aW9uIFVuKHMsdCl7bGV0IGU9V2kocyx0KSxpPSRzKHQpLG49cy5zdGF0ZS5zZWxlY3Rpb24scj1lLG89dDtyZXR1cm57dXBkYXRlKGwpe2wuZG9jQ2hhbmdlZCYmKGUucG9zPWwuY2hhbmdlcy5tYXBQb3MoZS5wb3MpLG49bi5tYXAobC5jaGFuZ2VzKSxvPW51bGwpfSxnZXQobCxoLGEpe2xldCBjO28mJmwuY2xpZW50WD09by5jbGllbnRYJiZsLmNsaWVudFk9PW8uY2xpZW50WT9jPXI6KGM9cj1XaShzLGwpLG89bCk7bGV0IGY9TmkocyxjLnBvcyxjLmJpYXMsaSk7aWYoZS5wb3MhPWMucG9zJiYhaCl7bGV0IGQ9TmkocyxlLnBvcyxlLmJpYXMsaSksdT1NYXRoLm1pbihkLmZyb20sZi5mcm9tKSxwPU1hdGgubWF4KGQudG8sZi50byk7Zj11PGYuZnJvbT94LnJhbmdlKHUscCk6eC5yYW5nZShwLHUpfXJldHVybiBoP24ucmVwbGFjZVJhbmdlKG4ubWFpbi5leHRlbmQoZi5mcm9tLGYudG8pKTphJiZuLnJhbmdlcy5sZW5ndGg+MSYmbi5yYW5nZXMuc29tZShkPT5kLmVxKGYpKT9KbihuLGYpOmE/bi5hZGRSYW5nZShmKTp4LmNyZWF0ZShbZl0pfX19ZnVuY3Rpb24gSm4ocyx0KXtmb3IobGV0IGU9MDs7ZSsrKWlmKHMucmFuZ2VzW2VdLmVxKHQpKXJldHVybiB4LmNyZWF0ZShzLnJhbmdlcy5zbGljZSgwLGUpLmNvbmNhdChzLnJhbmdlcy5zbGljZShlKzEpKSxzLm1haW5JbmRleD09ZT8wOnMubWFpbkluZGV4LShzLm1haW5JbmRleD5lPzE6MCkpfVAuZHJhZ3N0YXJ0PShzLHQpPT57bGV0e3NlbGVjdGlvbjp7bWFpbjplfX09cy5zdGF0ZSx7bW91c2VTZWxlY3Rpb246aX09cy5pbnB1dFN0YXRlO2kmJihpLmRyYWdnaW5nPWUpLHQuZGF0YVRyYW5zZmVyJiYodC5kYXRhVHJhbnNmZXIuc2V0RGF0YShcIlRleHRcIixzLnN0YXRlLnNsaWNlRG9jKGUuZnJvbSxlLnRvKSksdC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZD1cImNvcHlNb3ZlXCIpfTtmdW5jdGlvbiBxaShzLHQsZSxpKXtpZighZSlyZXR1cm47bGV0IG49cy5wb3NBdENvb3Jkcyh7eDp0LmNsaWVudFgseTp0LmNsaWVudFl9LCExKTt0LnByZXZlbnREZWZhdWx0KCk7bGV0e21vdXNlU2VsZWN0aW9uOnJ9PXMuaW5wdXRTdGF0ZSxvPWkmJnImJnIuZHJhZ2dpbmcmJnIuZHJhZ01vdmU/e2Zyb206ci5kcmFnZ2luZy5mcm9tLHRvOnIuZHJhZ2dpbmcudG99Om51bGwsbD17ZnJvbTpuLGluc2VydDplfSxoPXMuc3RhdGUuY2hhbmdlcyhvP1tvLGxdOmwpO3MuZm9jdXMoKSxzLmRpc3BhdGNoKHtjaGFuZ2VzOmgsc2VsZWN0aW9uOnthbmNob3I6aC5tYXBQb3MobiwtMSksaGVhZDpoLm1hcFBvcyhuLDEpfSx1c2VyRXZlbnQ6bz9cIm1vdmUuZHJvcFwiOlwiaW5wdXQuZHJvcFwifSl9UC5kcm9wPShzLHQpPT57aWYoIXQuZGF0YVRyYW5zZmVyKXJldHVybjtpZihzLnN0YXRlLnJlYWRPbmx5KXJldHVybiB0LnByZXZlbnREZWZhdWx0KCk7bGV0IGU9dC5kYXRhVHJhbnNmZXIuZmlsZXM7aWYoZSYmZS5sZW5ndGgpe3QucHJldmVudERlZmF1bHQoKTtsZXQgaT1BcnJheShlLmxlbmd0aCksbj0wLHI9KCk9PnsrK249PWUubGVuZ3RoJiZxaShzLHQsaS5maWx0ZXIobz0+byE9bnVsbCkuam9pbihzLnN0YXRlLmxpbmVCcmVhayksITEpfTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IGw9bmV3IEZpbGVSZWFkZXI7bC5vbmVycm9yPXIsbC5vbmxvYWQ9KCk9PnsvW1xceDAwLVxceDA4XFx4MGUtXFx4MWZdezJ9Ly50ZXN0KGwucmVzdWx0KXx8KGlbb109bC5yZXN1bHQpLHIoKX0sbC5yZWFkQXNUZXh0KGVbb10pfX1lbHNlIHFpKHMsdCx0LmRhdGFUcmFuc2Zlci5nZXREYXRhKFwiVGV4dFwiKSwhMCl9O1AucGFzdGU9KHMsdCk9PntpZihzLnN0YXRlLnJlYWRPbmx5KXJldHVybiB0LnByZXZlbnREZWZhdWx0KCk7cy5vYnNlcnZlci5mbHVzaCgpO2xldCBlPUtzP251bGw6dC5jbGlwYm9hcmREYXRhO2U/KGpzKHMsZS5nZXREYXRhKFwidGV4dC9wbGFpblwiKSksdC5wcmV2ZW50RGVmYXVsdCgpKTpHbihzKX07ZnVuY3Rpb24gWm4ocyx0KXtsZXQgZT1zLmRvbS5wYXJlbnROb2RlO2lmKCFlKXJldHVybjtsZXQgaT1lLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKSk7aS5zdHlsZS5jc3NUZXh0PVwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAtMTAwMDBweDsgdG9wOiAxMHB4XCIsaS52YWx1ZT10LGkuZm9jdXMoKSxpLnNlbGVjdGlvbkVuZD10Lmxlbmd0aCxpLnNlbGVjdGlvblN0YXJ0PTAsc2V0VGltZW91dCgoKT0+e2kucmVtb3ZlKCkscy5mb2N1cygpfSw1MCl9ZnVuY3Rpb24gUW4ocyl7bGV0IHQ9W10sZT1bXSxpPSExO2ZvcihsZXQgbiBvZiBzLnNlbGVjdGlvbi5yYW5nZXMpbi5lbXB0eXx8KHQucHVzaChzLnNsaWNlRG9jKG4uZnJvbSxuLnRvKSksZS5wdXNoKG4pKTtpZighdC5sZW5ndGgpe2xldCBuPS0xO2ZvcihsZXR7ZnJvbTpyfW9mIHMuc2VsZWN0aW9uLnJhbmdlcyl7bGV0IG89cy5kb2MubGluZUF0KHIpO28ubnVtYmVyPm4mJih0LnB1c2goby50ZXh0KSxlLnB1c2goe2Zyb206by5mcm9tLHRvOk1hdGgubWluKHMuZG9jLmxlbmd0aCxvLnRvKzEpfSkpLG49by5udW1iZXJ9aT0hMH1yZXR1cm57dGV4dDp0LmpvaW4ocy5saW5lQnJlYWspLHJhbmdlczplLGxpbmV3aXNlOml9fXZhciBVZT1udWxsO1AuY29weT1QLmN1dD0ocyx0KT0+e2xldHt0ZXh0OmUscmFuZ2VzOmksbGluZXdpc2U6bn09UW4ocy5zdGF0ZSk7aWYoIWUmJiFuKXJldHVybjtVZT1uP2U6bnVsbDtsZXQgcj1Lcz9udWxsOnQuY2xpcGJvYXJkRGF0YTtyPyh0LnByZXZlbnREZWZhdWx0KCksci5jbGVhckRhdGEoKSxyLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsZSkpOlpuKHMsZSksdC50eXBlPT1cImN1dFwiJiYhcy5zdGF0ZS5yZWFkT25seSYmcy5kaXNwYXRjaCh7Y2hhbmdlczppLHNjcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpcImRlbGV0ZS5jdXRcIn0pfTtmdW5jdGlvbiBHcyhzKXtzZXRUaW1lb3V0KCgpPT57cy5oYXNGb2N1cyE9cy5pbnB1dFN0YXRlLm5vdGlmaWVkRm9jdXNlZCYmcy51cGRhdGUoW10pfSwxMCl9UC5mb2N1cz1zPT57cy5pbnB1dFN0YXRlLmxhc3RGb2N1c1RpbWU9RGF0ZS5ub3coKSwhcy5zY3JvbGxET00uc2Nyb2xsVG9wJiYocy5pbnB1dFN0YXRlLmxhc3RTY3JvbGxUb3B8fHMuaW5wdXRTdGF0ZS5sYXN0U2Nyb2xsTGVmdCkmJihzLnNjcm9sbERPTS5zY3JvbGxUb3A9cy5pbnB1dFN0YXRlLmxhc3RTY3JvbGxUb3Ascy5zY3JvbGxET00uc2Nyb2xsTGVmdD1zLmlucHV0U3RhdGUubGFzdFNjcm9sbExlZnQpLEdzKHMpfTtQLmJsdXI9cz0+e3Mub2JzZXJ2ZXIuY2xlYXJTZWxlY3Rpb25SYW5nZSgpLEdzKHMpfTtQLmNvbXBvc2l0aW9uc3RhcnQ9UC5jb21wb3NpdGlvbnVwZGF0ZT1zPT57cy5pbnB1dFN0YXRlLmNvbXBvc2l0aW9uRmlyc3RDaGFuZ2U9PW51bGwmJihzLmlucHV0U3RhdGUuY29tcG9zaXRpb25GaXJzdENoYW5nZT0hMCkscy5pbnB1dFN0YXRlLmNvbXBvc2luZzwwJiYocy5pbnB1dFN0YXRlLmNvbXBvc2luZz0wKX07UC5jb21wb3NpdGlvbmVuZD1zPT57cy5pbnB1dFN0YXRlLmNvbXBvc2luZz0tMSxzLmlucHV0U3RhdGUuY29tcG9zaXRpb25FbmRlZEF0PURhdGUubm93KCkscy5pbnB1dFN0YXRlLmNvbXBvc2l0aW9uRmlyc3RDaGFuZ2U9bnVsbCx5LmNocm9tZSYmeS5hbmRyb2lkJiZzLm9ic2VydmVyLmZsdXNoU29vbigpLHNldFRpbWVvdXQoKCk9PntzLmlucHV0U3RhdGUuY29tcG9zaW5nPDAmJnMuZG9jVmlldy5jb21wb3NpdGlvbkRlY28uc2l6ZSYmcy51cGRhdGUoW10pfSw1MCl9O1AuY29udGV4dG1lbnU9cz0+e3MuaW5wdXRTdGF0ZS5sYXN0Q29udGV4dE1lbnU9RGF0ZS5ub3coKX07UC5iZWZvcmVpbnB1dD0ocyx0KT0+e3ZhciBlO2xldCBpO2lmKHkuY2hyb21lJiZ5LmFuZHJvaWQmJihpPUlzLmZpbmQobj0+bi5pbnB1dFR5cGU9PXQuaW5wdXRUeXBlKSkmJihzLm9ic2VydmVyLmRlbGF5QW5kcm9pZEtleShpLmtleSxpLmtleUNvZGUpLGkua2V5PT1cIkJhY2tzcGFjZVwifHxpLmtleT09XCJEZWxldGVcIikpe2xldCBuPSgoZT13aW5kb3cudmlzdWFsVmlld3BvcnQpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5oZWlnaHQpfHwwO3NldFRpbWVvdXQoKCk9Pnt2YXIgcjsoKChyPXdpbmRvdy52aXN1YWxWaWV3cG9ydCk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLmhlaWdodCl8fDApPm4rMTAmJnMuaGFzRm9jdXMmJihzLmNvbnRlbnRET00uYmx1cigpLHMuZm9jdXMoKSl9LDEwMCl9fTt2YXIgS2k9W1wicHJlLXdyYXBcIixcIm5vcm1hbFwiLFwicHJlLWxpbmVcIixcImJyZWFrLXNwYWNlc1wiXSx1ZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZG9jPW90LmVtcHR5LHRoaXMubGluZVdyYXBwaW5nPSExLHRoaXMuaGVpZ2h0U2FtcGxlcz17fSx0aGlzLmxpbmVIZWlnaHQ9MTQsdGhpcy5jaGFyV2lkdGg9Nyx0aGlzLmxpbmVMZW5ndGg9MzAsdGhpcy5oZWlnaHRDaGFuZ2VkPSExfWhlaWdodEZvckdhcCh0LGUpe2xldCBpPXRoaXMuZG9jLmxpbmVBdChlKS5udW1iZXItdGhpcy5kb2MubGluZUF0KHQpLm51bWJlcisxO3JldHVybiB0aGlzLmxpbmVXcmFwcGluZyYmKGkrPU1hdGguY2VpbCgoZS10LWkqdGhpcy5saW5lTGVuZ3RoKi41KS90aGlzLmxpbmVMZW5ndGgpKSx0aGlzLmxpbmVIZWlnaHQqaX1oZWlnaHRGb3JMaW5lKHQpe3JldHVybiB0aGlzLmxpbmVXcmFwcGluZz8oMStNYXRoLm1heCgwLE1hdGguY2VpbCgodC10aGlzLmxpbmVMZW5ndGgpLyh0aGlzLmxpbmVMZW5ndGgtNSkpKSkqdGhpcy5saW5lSGVpZ2h0OnRoaXMubGluZUhlaWdodH1zZXREb2ModCl7cmV0dXJuIHRoaXMuZG9jPXQsdGhpc31tdXN0UmVmcmVzaEZvcldyYXBwaW5nKHQpe3JldHVybiBLaS5pbmRleE9mKHQpPi0xIT10aGlzLmxpbmVXcmFwcGluZ31tdXN0UmVmcmVzaEZvckhlaWdodHModCl7bGV0IGU9ITE7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBuPXRbaV07bjwwP2krKzp0aGlzLmhlaWdodFNhbXBsZXNbTWF0aC5mbG9vcihuKjEwKV18fChlPSEwLHRoaXMuaGVpZ2h0U2FtcGxlc1tNYXRoLmZsb29yKG4qMTApXT0hMCl9cmV0dXJuIGV9cmVmcmVzaCh0LGUsaSxuLHIpe2xldCBvPUtpLmluZGV4T2YodCk+LTEsbD1NYXRoLnJvdW5kKGUpIT1NYXRoLnJvdW5kKHRoaXMubGluZUhlaWdodCl8fHRoaXMubGluZVdyYXBwaW5nIT1vO2lmKHRoaXMubGluZVdyYXBwaW5nPW8sdGhpcy5saW5lSGVpZ2h0PWUsdGhpcy5jaGFyV2lkdGg9aSx0aGlzLmxpbmVMZW5ndGg9bixsKXt0aGlzLmhlaWdodFNhbXBsZXM9e307Zm9yKGxldCBoPTA7aDxyLmxlbmd0aDtoKyspe2xldCBhPXJbaF07YTwwP2grKzp0aGlzLmhlaWdodFNhbXBsZXNbTWF0aC5mbG9vcihhKjEwKV09ITB9fXJldHVybiBsfX0scGU9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmZyb209dCx0aGlzLmhlaWdodHM9ZSx0aGlzLmluZGV4PTB9Z2V0IG1vcmUoKXtyZXR1cm4gdGhpcy5pbmRleDx0aGlzLmhlaWdodHMubGVuZ3RofX0sXz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxuLHIpe3RoaXMuZnJvbT10LHRoaXMubGVuZ3RoPWUsdGhpcy50b3A9aSx0aGlzLmhlaWdodD1uLHRoaXMudHlwZT1yfWdldCB0bygpe3JldHVybiB0aGlzLmZyb20rdGhpcy5sZW5ndGh9Z2V0IGJvdHRvbSgpe3JldHVybiB0aGlzLnRvcCt0aGlzLmhlaWdodH1qb2luKHQpe2xldCBlPShBcnJheS5pc0FycmF5KHRoaXMudHlwZSk/dGhpcy50eXBlOlt0aGlzXSkuY29uY2F0KEFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGU6W3RdKTtyZXR1cm4gbmV3IF8odGhpcy5mcm9tLHRoaXMubGVuZ3RoK3QubGVuZ3RoLHRoaXMudG9wLHRoaXMuaGVpZ2h0K3QuaGVpZ2h0LGUpfX0sRD1mdW5jdGlvbihzKXtyZXR1cm4gc1tzLkJ5UG9zPTBdPVwiQnlQb3NcIixzW3MuQnlIZWlnaHQ9MV09XCJCeUhlaWdodFwiLHNbcy5CeVBvc05vSGVpZ2h0PTJdPVwiQnlQb3NOb0hlaWdodFwiLHN9KER8fChEPXt9KSksUXQ9LjAwMSxOPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPTIpe3RoaXMubGVuZ3RoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmZsYWdzPWl9Z2V0IG91dGRhdGVkKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMik+MH1zZXQgb3V0ZGF0ZWQodCl7dGhpcy5mbGFncz0odD8yOjApfHRoaXMuZmxhZ3MmLTN9c2V0SGVpZ2h0KHQsZSl7dGhpcy5oZWlnaHQhPWUmJihNYXRoLmFicyh0aGlzLmhlaWdodC1lKT5RdCYmKHQuaGVpZ2h0Q2hhbmdlZD0hMCksdGhpcy5oZWlnaHQ9ZSl9cmVwbGFjZSh0LGUsaSl7cmV0dXJuIE4ub2YoaSl9ZGVjb21wb3NlTGVmdCh0LGUpe2UucHVzaCh0aGlzKX1kZWNvbXBvc2VSaWdodCh0LGUpe2UucHVzaCh0aGlzKX1hcHBseUNoYW5nZXModCxlLGksbil7bGV0IHI9dGhpcztmb3IobGV0IG89bi5sZW5ndGgtMTtvPj0wO28tLSl7bGV0e2Zyb21BOmwsdG9BOmgsZnJvbUI6YSx0b0I6Y309bltvXSxmPXIubGluZUF0KGwsRC5CeVBvc05vSGVpZ2h0LGUsMCwwKSxkPWYudG8+PWg/ZjpyLmxpbmVBdChoLEQuQnlQb3NOb0hlaWdodCxlLDAsMCk7Zm9yKGMrPWQudG8taCxoPWQudG87bz4wJiZmLmZyb208PW5bby0xXS50b0E7KWw9bltvLTFdLmZyb21BLGE9bltvLTFdLmZyb21CLG8tLSxsPGYuZnJvbSYmKGY9ci5saW5lQXQobCxELkJ5UG9zTm9IZWlnaHQsZSwwLDApKTthKz1mLmZyb20tbCxsPWYuZnJvbTtsZXQgdT1JdC5idWlsZChpLHQsYSxjKTtyPXIucmVwbGFjZShsLGgsdSl9cmV0dXJuIHIudXBkYXRlSGVpZ2h0KGksMCl9c3RhdGljIGVtcHR5KCl7cmV0dXJuIG5ldyBXKDAsMCl9c3RhdGljIG9mKHQpe2lmKHQubGVuZ3RoPT0xKXJldHVybiB0WzBdO2xldCBlPTAsaT10Lmxlbmd0aCxuPTAscj0wO2Zvcig7OylpZihlPT1pKWlmKG4+cioyKXtsZXQgbD10W2UtMV07bC5icmVhaz90LnNwbGljZSgtLWUsMSxsLmxlZnQsbnVsbCxsLnJpZ2h0KTp0LnNwbGljZSgtLWUsMSxsLmxlZnQsbC5yaWdodCksaSs9MStsLmJyZWFrLG4tPWwuc2l6ZX1lbHNlIGlmKHI+bioyKXtsZXQgbD10W2ldO2wuYnJlYWs/dC5zcGxpY2UoaSwxLGwubGVmdCxudWxsLGwucmlnaHQpOnQuc3BsaWNlKGksMSxsLmxlZnQsbC5yaWdodCksaSs9MitsLmJyZWFrLHItPWwuc2l6ZX1lbHNlIGJyZWFrO2Vsc2UgaWYobjxyKXtsZXQgbD10W2UrK107bCYmKG4rPWwuc2l6ZSl9ZWxzZXtsZXQgbD10Wy0taV07bCYmKHIrPWwuc2l6ZSl9bGV0IG89MDtyZXR1cm4gdFtlLTFdPT1udWxsPyhvPTEsZS0tKTp0W2VdPT1udWxsJiYobz0xLGkrKyksbmV3IEplKE4ub2YodC5zbGljZSgwLGUpKSxvLE4ub2YodC5zbGljZShpKSkpfX07Ti5wcm90b3R5cGUuc2l6ZT0xO3ZhciBtZT1jbGFzcyBleHRlbmRzIE57Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSksdGhpcy50eXBlPWl9YmxvY2tBdCh0LGUsaSxuKXtyZXR1cm4gbmV3IF8obix0aGlzLmxlbmd0aCxpLHRoaXMuaGVpZ2h0LHRoaXMudHlwZSl9bGluZUF0KHQsZSxpLG4scil7cmV0dXJuIHRoaXMuYmxvY2tBdCgwLGksbixyKX1mb3JFYWNoTGluZSh0LGUsaSxuLHIsbyl7dDw9cit0aGlzLmxlbmd0aCYmZT49ciYmbyh0aGlzLmJsb2NrQXQoMCxpLG4scikpfXVwZGF0ZUhlaWdodCh0LGU9MCxpPSExLG4pe3JldHVybiBuJiZuLmZyb208PWUmJm4ubW9yZSYmdGhpcy5zZXRIZWlnaHQodCxuLmhlaWdodHNbbi5pbmRleCsrXSksdGhpcy5vdXRkYXRlZD0hMSx0aGlzfXRvU3RyaW5nKCl7cmV0dXJuYGJsb2NrKCR7dGhpcy5sZW5ndGh9KWB9fSxXPWNsYXNzIGV4dGVuZHMgbWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUsVC5UZXh0KSx0aGlzLmNvbGxhcHNlZD0wLHRoaXMud2lkZ2V0SGVpZ2h0PTB9cmVwbGFjZSh0LGUsaSl7bGV0IG49aVswXTtyZXR1cm4gaS5sZW5ndGg9PTEmJihuIGluc3RhbmNlb2YgV3x8biBpbnN0YW5jZW9mIEUmJm4uZmxhZ3MmNCkmJk1hdGguYWJzKHRoaXMubGVuZ3RoLW4ubGVuZ3RoKTwxMD8obiBpbnN0YW5jZW9mIEU/bj1uZXcgVyhuLmxlbmd0aCx0aGlzLmhlaWdodCk6bi5oZWlnaHQ9dGhpcy5oZWlnaHQsdGhpcy5vdXRkYXRlZHx8KG4ub3V0ZGF0ZWQ9ITEpLG4pOk4ub2YoaSl9dXBkYXRlSGVpZ2h0KHQsZT0wLGk9ITEsbil7cmV0dXJuIG4mJm4uZnJvbTw9ZSYmbi5tb3JlP3RoaXMuc2V0SGVpZ2h0KHQsbi5oZWlnaHRzW24uaW5kZXgrK10pOihpfHx0aGlzLm91dGRhdGVkKSYmdGhpcy5zZXRIZWlnaHQodCxNYXRoLm1heCh0aGlzLndpZGdldEhlaWdodCx0LmhlaWdodEZvckxpbmUodGhpcy5sZW5ndGgtdGhpcy5jb2xsYXBzZWQpKSksdGhpcy5vdXRkYXRlZD0hMSx0aGlzfXRvU3RyaW5nKCl7cmV0dXJuYGxpbmUoJHt0aGlzLmxlbmd0aH0ke3RoaXMuY29sbGFwc2VkPy10aGlzLmNvbGxhcHNlZDpcIlwifSR7dGhpcy53aWRnZXRIZWlnaHQ/XCI6XCIrdGhpcy53aWRnZXRIZWlnaHQ6XCJcIn0pYH19LEU9Y2xhc3MgZXh0ZW5kcyBOe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQsMCl9bGluZXModCxlKXtsZXQgaT10LmxpbmVBdChlKS5udW1iZXIsbj10LmxpbmVBdChlK3RoaXMubGVuZ3RoKS5udW1iZXI7cmV0dXJue2ZpcnN0TGluZTppLGxhc3RMaW5lOm4sbGluZUhlaWdodDp0aGlzLmhlaWdodC8obi1pKzEpfX1ibG9ja0F0KHQsZSxpLG4pe2xldHtmaXJzdExpbmU6cixsYXN0TGluZTpvLGxpbmVIZWlnaHQ6bH09dGhpcy5saW5lcyhlLG4pLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihvLXIsTWF0aC5mbG9vcigodC1pKS9sKSkpLHtmcm9tOmEsbGVuZ3RoOmN9PWUubGluZShyK2gpO3JldHVybiBuZXcgXyhhLGMsaStsKmgsbCxULlRleHQpfWxpbmVBdCh0LGUsaSxuLHIpe2lmKGU9PUQuQnlIZWlnaHQpcmV0dXJuIHRoaXMuYmxvY2tBdCh0LGksbixyKTtpZihlPT1ELkJ5UG9zTm9IZWlnaHQpe2xldHtmcm9tOmYsdG86ZH09aS5saW5lQXQodCk7cmV0dXJuIG5ldyBfKGYsZC1mLDAsMCxULlRleHQpfWxldHtmaXJzdExpbmU6byxsaW5lSGVpZ2h0Omx9PXRoaXMubGluZXMoaSxyKSx7ZnJvbTpoLGxlbmd0aDphLG51bWJlcjpjfT1pLmxpbmVBdCh0KTtyZXR1cm4gbmV3IF8oaCxhLG4rbCooYy1vKSxsLFQuVGV4dCl9Zm9yRWFjaExpbmUodCxlLGksbixyLG8pe2xldHtmaXJzdExpbmU6bCxsaW5lSGVpZ2h0Omh9PXRoaXMubGluZXMoaSxyKTtmb3IobGV0IGE9TWF0aC5tYXgodCxyKSxjPU1hdGgubWluKHIrdGhpcy5sZW5ndGgsZSk7YTw9Yzspe2xldCBmPWkubGluZUF0KGEpO2E9PXQmJihuKz1oKihmLm51bWJlci1sKSksbyhuZXcgXyhmLmZyb20sZi5sZW5ndGgsbixoLFQuVGV4dCkpLG4rPWgsYT1mLnRvKzF9fXJlcGxhY2UodCxlLGkpe2xldCBuPXRoaXMubGVuZ3RoLWU7aWYobj4wKXtsZXQgcj1pW2kubGVuZ3RoLTFdO3IgaW5zdGFuY2VvZiBFP2lbaS5sZW5ndGgtMV09bmV3IEUoci5sZW5ndGgrbik6aS5wdXNoKG51bGwsbmV3IEUobi0xKSl9aWYodD4wKXtsZXQgcj1pWzBdO3IgaW5zdGFuY2VvZiBFP2lbMF09bmV3IEUodCtyLmxlbmd0aCk6aS51bnNoaWZ0KG5ldyBFKHQtMSksbnVsbCl9cmV0dXJuIE4ub2YoaSl9ZGVjb21wb3NlTGVmdCh0LGUpe2UucHVzaChuZXcgRSh0LTEpLG51bGwpfWRlY29tcG9zZVJpZ2h0KHQsZSl7ZS5wdXNoKG51bGwsbmV3IEUodGhpcy5sZW5ndGgtdC0xKSl9dXBkYXRlSGVpZ2h0KHQsZT0wLGk9ITEsbil7bGV0IHI9ZSt0aGlzLmxlbmd0aDtpZihuJiZuLmZyb208PWUrdGhpcy5sZW5ndGgmJm4ubW9yZSl7bGV0IG89W10sbD1NYXRoLm1heChlLG4uZnJvbSksaD0tMSxhPXQuaGVpZ2h0Q2hhbmdlZDtmb3Iobi5mcm9tPmUmJm8ucHVzaChuZXcgRShuLmZyb20tZS0xKS51cGRhdGVIZWlnaHQodCxlKSk7bDw9ciYmbi5tb3JlOyl7bGV0IGY9dC5kb2MubGluZUF0KGwpLmxlbmd0aDtvLmxlbmd0aCYmby5wdXNoKG51bGwpO2xldCBkPW4uaGVpZ2h0c1tuLmluZGV4KytdO2g9PS0xP2g9ZDpNYXRoLmFicyhkLWgpPj1RdCYmKGg9LTIpO2xldCB1PW5ldyBXKGYsZCk7dS5vdXRkYXRlZD0hMSxvLnB1c2godSksbCs9ZisxfWw8PXImJm8ucHVzaChudWxsLG5ldyBFKHItbCkudXBkYXRlSGVpZ2h0KHQsbCkpO2xldCBjPU4ub2Yobyk7cmV0dXJuIHQuaGVpZ2h0Q2hhbmdlZD1hfHxoPDB8fE1hdGguYWJzKGMuaGVpZ2h0LXRoaXMuaGVpZ2h0KT49UXR8fE1hdGguYWJzKGgtdGhpcy5saW5lcyh0LmRvYyxlKS5saW5lSGVpZ2h0KT49UXQsY31lbHNlKGl8fHRoaXMub3V0ZGF0ZWQpJiYodGhpcy5zZXRIZWlnaHQodCx0LmhlaWdodEZvckdhcChlLGUrdGhpcy5sZW5ndGgpKSx0aGlzLm91dGRhdGVkPSExKTtyZXR1cm4gdGhpc310b1N0cmluZygpe3JldHVybmBnYXAoJHt0aGlzLmxlbmd0aH0pYH19LEplPWNsYXNzIGV4dGVuZHMgTntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodC5sZW5ndGgrZStpLmxlbmd0aCx0LmhlaWdodCtpLmhlaWdodCxlfCh0Lm91dGRhdGVkfHxpLm91dGRhdGVkPzI6MCkpLHRoaXMubGVmdD10LHRoaXMucmlnaHQ9aSx0aGlzLnNpemU9dC5zaXplK2kuc2l6ZX1nZXQgYnJlYWsoKXtyZXR1cm4gdGhpcy5mbGFncyYxfWJsb2NrQXQodCxlLGksbil7bGV0IHI9aSt0aGlzLmxlZnQuaGVpZ2h0O3JldHVybiB0PHI/dGhpcy5sZWZ0LmJsb2NrQXQodCxlLGksbik6dGhpcy5yaWdodC5ibG9ja0F0KHQsZSxyLG4rdGhpcy5sZWZ0Lmxlbmd0aCt0aGlzLmJyZWFrKX1saW5lQXQodCxlLGksbixyKXtsZXQgbz1uK3RoaXMubGVmdC5oZWlnaHQsbD1yK3RoaXMubGVmdC5sZW5ndGgrdGhpcy5icmVhayxoPWU9PUQuQnlIZWlnaHQ/dDxvOnQ8bCxhPWg/dGhpcy5sZWZ0LmxpbmVBdCh0LGUsaSxuLHIpOnRoaXMucmlnaHQubGluZUF0KHQsZSxpLG8sbCk7aWYodGhpcy5icmVha3x8KGg/YS50bzxsOmEuZnJvbT5sKSlyZXR1cm4gYTtsZXQgYz1lPT1ELkJ5UG9zTm9IZWlnaHQ/RC5CeVBvc05vSGVpZ2h0OkQuQnlQb3M7cmV0dXJuIGg/YS5qb2luKHRoaXMucmlnaHQubGluZUF0KGwsYyxpLG8sbCkpOnRoaXMubGVmdC5saW5lQXQobCxjLGksbixyKS5qb2luKGEpfWZvckVhY2hMaW5lKHQsZSxpLG4scixvKXtsZXQgbD1uK3RoaXMubGVmdC5oZWlnaHQsaD1yK3RoaXMubGVmdC5sZW5ndGgrdGhpcy5icmVhaztpZih0aGlzLmJyZWFrKXQ8aCYmdGhpcy5sZWZ0LmZvckVhY2hMaW5lKHQsZSxpLG4scixvKSxlPj1oJiZ0aGlzLnJpZ2h0LmZvckVhY2hMaW5lKHQsZSxpLGwsaCxvKTtlbHNle2xldCBhPXRoaXMubGluZUF0KGgsRC5CeVBvcyxpLG4scik7dDxhLmZyb20mJnRoaXMubGVmdC5mb3JFYWNoTGluZSh0LGEuZnJvbS0xLGksbixyLG8pLGEudG8+PXQmJmEuZnJvbTw9ZSYmbyhhKSxlPmEudG8mJnRoaXMucmlnaHQuZm9yRWFjaExpbmUoYS50bysxLGUsaSxsLGgsbyl9fXJlcGxhY2UodCxlLGkpe2xldCBuPXRoaXMubGVmdC5sZW5ndGgrdGhpcy5icmVhaztpZihlPG4pcmV0dXJuIHRoaXMuYmFsYW5jZWQodGhpcy5sZWZ0LnJlcGxhY2UodCxlLGkpLHRoaXMucmlnaHQpO2lmKHQ+dGhpcy5sZWZ0Lmxlbmd0aClyZXR1cm4gdGhpcy5iYWxhbmNlZCh0aGlzLmxlZnQsdGhpcy5yaWdodC5yZXBsYWNlKHQtbixlLW4saSkpO2xldCByPVtdO3Q+MCYmdGhpcy5kZWNvbXBvc2VMZWZ0KHQscik7bGV0IG89ci5sZW5ndGg7Zm9yKGxldCBsIG9mIGkpci5wdXNoKGwpO2lmKHQ+MCYmamkocixvLTEpLGU8dGhpcy5sZW5ndGgpe2xldCBsPXIubGVuZ3RoO3RoaXMuZGVjb21wb3NlUmlnaHQoZSxyKSxqaShyLGwpfXJldHVybiBOLm9mKHIpfWRlY29tcG9zZUxlZnQodCxlKXtsZXQgaT10aGlzLmxlZnQubGVuZ3RoO2lmKHQ8PWkpcmV0dXJuIHRoaXMubGVmdC5kZWNvbXBvc2VMZWZ0KHQsZSk7ZS5wdXNoKHRoaXMubGVmdCksdGhpcy5icmVhayYmKGkrKyx0Pj1pJiZlLnB1c2gobnVsbCkpLHQ+aSYmdGhpcy5yaWdodC5kZWNvbXBvc2VMZWZ0KHQtaSxlKX1kZWNvbXBvc2VSaWdodCh0LGUpe2xldCBpPXRoaXMubGVmdC5sZW5ndGgsbj1pK3RoaXMuYnJlYWs7aWYodD49bilyZXR1cm4gdGhpcy5yaWdodC5kZWNvbXBvc2VSaWdodCh0LW4sZSk7dDxpJiZ0aGlzLmxlZnQuZGVjb21wb3NlUmlnaHQodCxlKSx0aGlzLmJyZWFrJiZ0PG4mJmUucHVzaChudWxsKSxlLnB1c2godGhpcy5yaWdodCl9YmFsYW5jZWQodCxlKXtyZXR1cm4gdC5zaXplPjIqZS5zaXplfHxlLnNpemU+Mip0LnNpemU/Ti5vZih0aGlzLmJyZWFrP1t0LG51bGwsZV06W3QsZV0pOih0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy5oZWlnaHQ9dC5oZWlnaHQrZS5oZWlnaHQsdGhpcy5vdXRkYXRlZD10Lm91dGRhdGVkfHxlLm91dGRhdGVkLHRoaXMuc2l6ZT10LnNpemUrZS5zaXplLHRoaXMubGVuZ3RoPXQubGVuZ3RoK3RoaXMuYnJlYWsrZS5sZW5ndGgsdGhpcyl9dXBkYXRlSGVpZ2h0KHQsZT0wLGk9ITEsbil7bGV0e2xlZnQ6cixyaWdodDpvfT10aGlzLGw9ZStyLmxlbmd0aCt0aGlzLmJyZWFrLGg9bnVsbDtyZXR1cm4gbiYmbi5mcm9tPD1lK3IubGVuZ3RoJiZuLm1vcmU/aD1yPXIudXBkYXRlSGVpZ2h0KHQsZSxpLG4pOnIudXBkYXRlSGVpZ2h0KHQsZSxpKSxuJiZuLmZyb208PWwrby5sZW5ndGgmJm4ubW9yZT9oPW89by51cGRhdGVIZWlnaHQodCxsLGksbik6by51cGRhdGVIZWlnaHQodCxsLGkpLGg/dGhpcy5iYWxhbmNlZChyLG8pOih0aGlzLmhlaWdodD10aGlzLmxlZnQuaGVpZ2h0K3RoaXMucmlnaHQuaGVpZ2h0LHRoaXMub3V0ZGF0ZWQ9ITEsdGhpcyl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5sZWZ0Kyh0aGlzLmJyZWFrP1wiIFwiOlwiLVwiKSt0aGlzLnJpZ2h0fX07ZnVuY3Rpb24gamkocyx0KXtsZXQgZSxpO3NbdF09PW51bGwmJihlPXNbdC0xXSlpbnN0YW5jZW9mIEUmJihpPXNbdCsxXSlpbnN0YW5jZW9mIEUmJnMuc3BsaWNlKHQtMSwzLG5ldyBFKGUubGVuZ3RoKzEraS5sZW5ndGgpKX12YXIgdHI9NSxJdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucG9zPXQsdGhpcy5vcmFjbGU9ZSx0aGlzLm5vZGVzPVtdLHRoaXMubGluZVN0YXJ0PS0xLHRoaXMubGluZUVuZD0tMSx0aGlzLmNvdmVyaW5nPW51bGwsdGhpcy53cml0dGVuVG89dH1nZXQgaXNDb3ZlcmVkKCl7cmV0dXJuIHRoaXMuY292ZXJpbmcmJnRoaXMubm9kZXNbdGhpcy5ub2Rlcy5sZW5ndGgtMV09PXRoaXMuY292ZXJpbmd9c3Bhbih0LGUpe2lmKHRoaXMubGluZVN0YXJ0Pi0xKXtsZXQgaT1NYXRoLm1pbihlLHRoaXMubGluZUVuZCksbj10aGlzLm5vZGVzW3RoaXMubm9kZXMubGVuZ3RoLTFdO24gaW5zdGFuY2VvZiBXP24ubGVuZ3RoKz1pLXRoaXMucG9zOihpPnRoaXMucG9zfHwhdGhpcy5pc0NvdmVyZWQpJiZ0aGlzLm5vZGVzLnB1c2gobmV3IFcoaS10aGlzLnBvcywtMSkpLHRoaXMud3JpdHRlblRvPWksZT5pJiYodGhpcy5ub2Rlcy5wdXNoKG51bGwpLHRoaXMud3JpdHRlblRvKyssdGhpcy5saW5lU3RhcnQ9LTEpfXRoaXMucG9zPWV9cG9pbnQodCxlLGkpe2lmKHQ8ZXx8aS5oZWlnaHRSZWxldmFudCl7bGV0IG49aS53aWRnZXQ/aS53aWRnZXQuZXN0aW1hdGVkSGVpZ2h0OjA7bjwwJiYobj10aGlzLm9yYWNsZS5saW5lSGVpZ2h0KTtsZXQgcj1lLXQ7aS5ibG9jaz90aGlzLmFkZEJsb2NrKG5ldyBtZShyLG4saS50eXBlKSk6KHJ8fG4+PXRyKSYmdGhpcy5hZGRMaW5lRGVjbyhuLHIpfWVsc2UgZT50JiZ0aGlzLnNwYW4odCxlKTt0aGlzLmxpbmVFbmQ+LTEmJnRoaXMubGluZUVuZDx0aGlzLnBvcyYmKHRoaXMubGluZUVuZD10aGlzLm9yYWNsZS5kb2MubGluZUF0KHRoaXMucG9zKS50byl9ZW50ZXJMaW5lKCl7aWYodGhpcy5saW5lU3RhcnQ+LTEpcmV0dXJuO2xldHtmcm9tOnQsdG86ZX09dGhpcy5vcmFjbGUuZG9jLmxpbmVBdCh0aGlzLnBvcyk7dGhpcy5saW5lU3RhcnQ9dCx0aGlzLmxpbmVFbmQ9ZSx0aGlzLndyaXR0ZW5Ubzx0JiYoKHRoaXMud3JpdHRlblRvPHQtMXx8dGhpcy5ub2Rlc1t0aGlzLm5vZGVzLmxlbmd0aC0xXT09bnVsbCkmJnRoaXMubm9kZXMucHVzaCh0aGlzLmJsYW5rQ29udGVudCh0aGlzLndyaXR0ZW5Ubyx0LTEpKSx0aGlzLm5vZGVzLnB1c2gobnVsbCkpLHRoaXMucG9zPnQmJnRoaXMubm9kZXMucHVzaChuZXcgVyh0aGlzLnBvcy10LC0xKSksdGhpcy53cml0dGVuVG89dGhpcy5wb3N9YmxhbmtDb250ZW50KHQsZSl7bGV0IGk9bmV3IEUoZS10KTtyZXR1cm4gdGhpcy5vcmFjbGUuZG9jLmxpbmVBdCh0KS50bz09ZSYmKGkuZmxhZ3N8PTQpLGl9ZW5zdXJlTGluZSgpe3RoaXMuZW50ZXJMaW5lKCk7bGV0IHQ9dGhpcy5ub2Rlcy5sZW5ndGg/dGhpcy5ub2Rlc1t0aGlzLm5vZGVzLmxlbmd0aC0xXTpudWxsO2lmKHQgaW5zdGFuY2VvZiBXKXJldHVybiB0O2xldCBlPW5ldyBXKDAsLTEpO3JldHVybiB0aGlzLm5vZGVzLnB1c2goZSksZX1hZGRCbG9jayh0KXt0aGlzLmVudGVyTGluZSgpLHQudHlwZT09VC5XaWRnZXRBZnRlciYmIXRoaXMuaXNDb3ZlcmVkJiZ0aGlzLmVuc3VyZUxpbmUoKSx0aGlzLm5vZGVzLnB1c2godCksdGhpcy53cml0dGVuVG89dGhpcy5wb3M9dGhpcy5wb3MrdC5sZW5ndGgsdC50eXBlIT1ULldpZGdldEJlZm9yZSYmKHRoaXMuY292ZXJpbmc9dCl9YWRkTGluZURlY28odCxlKXtsZXQgaT10aGlzLmVuc3VyZUxpbmUoKTtpLmxlbmd0aCs9ZSxpLmNvbGxhcHNlZCs9ZSxpLndpZGdldEhlaWdodD1NYXRoLm1heChpLndpZGdldEhlaWdodCx0KSx0aGlzLndyaXR0ZW5Ubz10aGlzLnBvcz10aGlzLnBvcytlfWZpbmlzaCh0KXtsZXQgZT10aGlzLm5vZGVzLmxlbmd0aD09MD9udWxsOnRoaXMubm9kZXNbdGhpcy5ub2Rlcy5sZW5ndGgtMV07dGhpcy5saW5lU3RhcnQ+LTEmJiEoZSBpbnN0YW5jZW9mIFcpJiYhdGhpcy5pc0NvdmVyZWQ/dGhpcy5ub2Rlcy5wdXNoKG5ldyBXKDAsLTEpKToodGhpcy53cml0dGVuVG88dGhpcy5wb3N8fGU9PW51bGwpJiZ0aGlzLm5vZGVzLnB1c2godGhpcy5ibGFua0NvbnRlbnQodGhpcy53cml0dGVuVG8sdGhpcy5wb3MpKTtsZXQgaT10O2ZvcihsZXQgbiBvZiB0aGlzLm5vZGVzKW4gaW5zdGFuY2VvZiBXJiZuLnVwZGF0ZUhlaWdodCh0aGlzLm9yYWNsZSxpKSxpKz1uP24ubGVuZ3RoOjE7cmV0dXJuIHRoaXMubm9kZXN9c3RhdGljIGJ1aWxkKHQsZSxpLG4pe2xldCByPW5ldyBJdChpLHQpO3JldHVybiBGLnNwYW5zKGUsaSxuLHIsMCksci5maW5pc2goaSl9fTtmdW5jdGlvbiBlcihzLHQsZSl7bGV0IGk9bmV3IFplO3JldHVybiBGLmNvbXBhcmUocyx0LGUsaSwwKSxpLmNoYW5nZXN9dmFyIFplPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jaGFuZ2VzPVtdfWNvbXBhcmVSYW5nZSgpe31jb21wYXJlUG9pbnQodCxlLGksbil7KHQ8ZXx8aSYmaS5oZWlnaHRSZWxldmFudHx8biYmbi5oZWlnaHRSZWxldmFudCkmJnplKHQsZSx0aGlzLmNoYW5nZXMsNSl9fTtmdW5jdGlvbiBpcihzLHQpe2xldCBlPXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1zLm93bmVyRG9jdW1lbnQsbj1pLmRlZmF1bHRWaWV3fHx3aW5kb3cscj1NYXRoLm1heCgwLGUubGVmdCksbz1NYXRoLm1pbihuLmlubmVyV2lkdGgsZS5yaWdodCksbD1NYXRoLm1heCgwLGUudG9wKSxoPU1hdGgubWluKG4uaW5uZXJIZWlnaHQsZS5ib3R0b20pO2ZvcihsZXQgYT1zLnBhcmVudE5vZGU7YSYmYSE9aS5ib2R5OylpZihhLm5vZGVUeXBlPT0xKXtsZXQgYz1hLGY9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYyk7aWYoKGMuc2Nyb2xsSGVpZ2h0PmMuY2xpZW50SGVpZ2h0fHxjLnNjcm9sbFdpZHRoPmMuY2xpZW50V2lkdGgpJiZmLm92ZXJmbG93IT1cInZpc2libGVcIil7bGV0IGQ9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyPU1hdGgubWF4KHIsZC5sZWZ0KSxvPU1hdGgubWluKG8sZC5yaWdodCksbD1NYXRoLm1heChsLGQudG9wKSxoPWE9PXMucGFyZW50Tm9kZT9kLmJvdHRvbTpNYXRoLm1pbihoLGQuYm90dG9tKX1hPWYucG9zaXRpb249PVwiYWJzb2x1dGVcInx8Zi5wb3NpdGlvbj09XCJmaXhlZFwiP2Mub2Zmc2V0UGFyZW50OmMucGFyZW50Tm9kZX1lbHNlIGlmKGEubm9kZVR5cGU9PTExKWE9YS5ob3N0O2Vsc2UgYnJlYWs7cmV0dXJue2xlZnQ6ci1lLmxlZnQscmlnaHQ6TWF0aC5tYXgocixvKS1lLmxlZnQsdG9wOmwtKGUudG9wK3QpLGJvdHRvbTpNYXRoLm1heChsLGgpLShlLnRvcCt0KX19ZnVuY3Rpb24gc3Iocyx0KXtsZXQgZT1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybntsZWZ0OjAscmlnaHQ6ZS5yaWdodC1lLmxlZnQsdG9wOnQsYm90dG9tOmUuYm90dG9tLShlLnRvcCt0KX19dmFyIFB0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmZyb209dCx0aGlzLnRvPWUsdGhpcy5zaXplPWl9c3RhdGljIHNhbWUodCxlKXtpZih0Lmxlbmd0aCE9ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBuPXRbaV0scj1lW2ldO2lmKG4uZnJvbSE9ci5mcm9tfHxuLnRvIT1yLnRvfHxuLnNpemUhPXIuc2l6ZSlyZXR1cm4hMX1yZXR1cm4hMH1kcmF3KHQpe3JldHVybiBrLnJlcGxhY2Uoe3dpZGdldDpuZXcgUWUodGhpcy5zaXplLHQpfSkucmFuZ2UodGhpcy5mcm9tLHRoaXMudG8pfX0sUWU9Y2xhc3MgZXh0ZW5kcyBYe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnNpemU9dCx0aGlzLnZlcnRpY2FsPWV9ZXEodCl7cmV0dXJuIHQuc2l6ZT09dGhpcy5zaXplJiZ0LnZlcnRpY2FsPT10aGlzLnZlcnRpY2FsfXRvRE9NKCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gdGhpcy52ZXJ0aWNhbD90LnN0eWxlLmhlaWdodD10aGlzLnNpemUrXCJweFwiOih0LnN0eWxlLndpZHRoPXRoaXMuc2l6ZStcInB4XCIsdC5zdHlsZS5oZWlnaHQ9XCIycHhcIix0LnN0eWxlLmRpc3BsYXk9XCJpbmxpbmUtYmxvY2tcIiksdH1nZXQgZXN0aW1hdGVkSGVpZ2h0KCl7cmV0dXJuIHRoaXMudmVydGljYWw/dGhpcy5zaXplOi0xfX0sZ2U9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5zdGF0ZT10LHRoaXMucGl4ZWxWaWV3cG9ydD17bGVmdDowLHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLHRvcDowLGJvdHRvbTowfSx0aGlzLmluVmlldz0hMCx0aGlzLnBhZGRpbmdUb3A9MCx0aGlzLnBhZGRpbmdCb3R0b209MCx0aGlzLmNvbnRlbnRET01XaWR0aD0wLHRoaXMuY29udGVudERPTUhlaWdodD0wLHRoaXMuZWRpdG9ySGVpZ2h0PTAsdGhpcy5lZGl0b3JXaWR0aD0wLHRoaXMuaGVpZ2h0T3JhY2xlPW5ldyB1ZSx0aGlzLnNjYWxlcj0kaSx0aGlzLnNjcm9sbFRhcmdldD1udWxsLHRoaXMucHJpbnRpbmc9ITEsdGhpcy5tdXN0TWVhc3VyZUNvbnRlbnQ9ITAsdGhpcy5kZWZhdWx0VGV4dERpcmVjdGlvbj1SLlJUTCx0aGlzLnZpc2libGVSYW5nZXM9W10sdGhpcy5tdXN0RW5mb3JjZUN1cnNvckFzc29jPSExLHRoaXMuc3RhdGVEZWNvPXQuZmFjZXQoenQpLmZpbHRlcihlPT50eXBlb2YgZSE9XCJmdW5jdGlvblwiKSx0aGlzLmhlaWdodE1hcD1OLmVtcHR5KCkuYXBwbHlDaGFuZ2VzKHRoaXMuc3RhdGVEZWNvLG90LmVtcHR5LHRoaXMuaGVpZ2h0T3JhY2xlLnNldERvYyh0LmRvYyksW25ldyBJKDAsMCwwLHQuZG9jLmxlbmd0aCldKSx0aGlzLnZpZXdwb3J0PXRoaXMuZ2V0Vmlld3BvcnQoMCxudWxsKSx0aGlzLnVwZGF0ZVZpZXdwb3J0TGluZXMoKSx0aGlzLnVwZGF0ZUZvclZpZXdwb3J0KCksdGhpcy5saW5lR2Fwcz10aGlzLmVuc3VyZUxpbmVHYXBzKFtdKSx0aGlzLmxpbmVHYXBEZWNvPWsuc2V0KHRoaXMubGluZUdhcHMubWFwKGU9PmUuZHJhdyghMSkpKSx0aGlzLmNvbXB1dGVWaXNpYmxlUmFuZ2VzKCl9dXBkYXRlRm9yVmlld3BvcnQoKXtsZXQgdD1bdGhpcy52aWV3cG9ydF0se21haW46ZX09dGhpcy5zdGF0ZS5zZWxlY3Rpb247Zm9yKGxldCBpPTA7aTw9MTtpKyspe2xldCBuPWk/ZS5oZWFkOmUuYW5jaG9yO2lmKCF0LnNvbWUoKHtmcm9tOnIsdG86b30pPT5uPj1yJiZuPD1vKSl7bGV0e2Zyb206cix0bzpvfT10aGlzLmxpbmVCbG9ja0F0KG4pO3QucHVzaChuZXcgdXQocixvKSl9fXRoaXMudmlld3BvcnRzPXQuc29ydCgoaSxuKT0+aS5mcm9tLW4uZnJvbSksdGhpcy5zY2FsZXI9dGhpcy5oZWlnaHRNYXAuaGVpZ2h0PD03ZTY/JGk6bmV3IHRpKHRoaXMuaGVpZ2h0T3JhY2xlLmRvYyx0aGlzLmhlaWdodE1hcCx0aGlzLnZpZXdwb3J0cyl9dXBkYXRlVmlld3BvcnRMaW5lcygpe3RoaXMudmlld3BvcnRMaW5lcz1bXSx0aGlzLmhlaWdodE1hcC5mb3JFYWNoTGluZSh0aGlzLnZpZXdwb3J0LmZyb20sdGhpcy52aWV3cG9ydC50byx0aGlzLnN0YXRlLmRvYywwLDAsdD0+e3RoaXMudmlld3BvcnRMaW5lcy5wdXNoKHRoaXMuc2NhbGVyLnNjYWxlPT0xP3Q6VHQodCx0aGlzLnNjYWxlcikpfSl9dXBkYXRlKHQsZT1udWxsKXt0aGlzLnN0YXRlPXQuc3RhdGU7bGV0IGk9dGhpcy5zdGF0ZURlY287dGhpcy5zdGF0ZURlY289dGhpcy5zdGF0ZS5mYWNldCh6dCkuZmlsdGVyKGE9PnR5cGVvZiBhIT1cImZ1bmN0aW9uXCIpO2xldCBuPXQuY2hhbmdlZFJhbmdlcyxyPUkuZXh0ZW5kV2l0aFJhbmdlcyhuLGVyKGksdGhpcy5zdGF0ZURlY28sdD90LmNoYW5nZXM6aHMuZW1wdHkodGhpcy5zdGF0ZS5kb2MubGVuZ3RoKSkpLG89dGhpcy5oZWlnaHRNYXAuaGVpZ2h0O3RoaXMuaGVpZ2h0TWFwPXRoaXMuaGVpZ2h0TWFwLmFwcGx5Q2hhbmdlcyh0aGlzLnN0YXRlRGVjbyx0LnN0YXJ0U3RhdGUuZG9jLHRoaXMuaGVpZ2h0T3JhY2xlLnNldERvYyh0aGlzLnN0YXRlLmRvYyksciksdGhpcy5oZWlnaHRNYXAuaGVpZ2h0IT1vJiYodC5mbGFnc3w9Mik7bGV0IGw9ci5sZW5ndGg/dGhpcy5tYXBWaWV3cG9ydCh0aGlzLnZpZXdwb3J0LHQuY2hhbmdlcyk6dGhpcy52aWV3cG9ydDsoZSYmKGUucmFuZ2UuaGVhZDxsLmZyb218fGUucmFuZ2UuaGVhZD5sLnRvKXx8IXRoaXMudmlld3BvcnRJc0FwcHJvcHJpYXRlKGwpKSYmKGw9dGhpcy5nZXRWaWV3cG9ydCgwLGUpKTtsZXQgaD0hdC5jaGFuZ2VzLmVtcHR5fHx0LmZsYWdzJjJ8fGwuZnJvbSE9dGhpcy52aWV3cG9ydC5mcm9tfHxsLnRvIT10aGlzLnZpZXdwb3J0LnRvO3RoaXMudmlld3BvcnQ9bCx0aGlzLnVwZGF0ZUZvclZpZXdwb3J0KCksaCYmdGhpcy51cGRhdGVWaWV3cG9ydExpbmVzKCksKHRoaXMubGluZUdhcHMubGVuZ3RofHx0aGlzLnZpZXdwb3J0LnRvLXRoaXMudmlld3BvcnQuZnJvbT4yZTM8PDEpJiZ0aGlzLnVwZGF0ZUxpbmVHYXBzKHRoaXMuZW5zdXJlTGluZUdhcHModGhpcy5tYXBMaW5lR2Fwcyh0aGlzLmxpbmVHYXBzLHQuY2hhbmdlcykpKSx0LmZsYWdzfD10aGlzLmNvbXB1dGVWaXNpYmxlUmFuZ2VzKCksZSYmKHRoaXMuc2Nyb2xsVGFyZ2V0PWUpLCF0aGlzLm11c3RFbmZvcmNlQ3Vyc29yQXNzb2MmJnQuc2VsZWN0aW9uU2V0JiZ0LnZpZXcubGluZVdyYXBwaW5nJiZ0LnN0YXRlLnNlbGVjdGlvbi5tYWluLmVtcHR5JiZ0LnN0YXRlLnNlbGVjdGlvbi5tYWluLmFzc29jJiYodGhpcy5tdXN0RW5mb3JjZUN1cnNvckFzc29jPSEwKX1tZWFzdXJlKHQpe2xldCBlPXQuY29udGVudERPTSxpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLG49dGhpcy5oZWlnaHRPcmFjbGUscj1pLndoaXRlU3BhY2U7dGhpcy5kZWZhdWx0VGV4dERpcmVjdGlvbj1pLmRpcmVjdGlvbj09XCJydGxcIj9SLlJUTDpSLkxUUjtsZXQgbz10aGlzLmhlaWdodE9yYWNsZS5tdXN0UmVmcmVzaEZvcldyYXBwaW5nKHIpLGw9b3x8dGhpcy5tdXN0TWVhc3VyZUNvbnRlbnR8fHRoaXMuY29udGVudERPTUhlaWdodCE9ZS5jbGllbnRIZWlnaHQ7dGhpcy5jb250ZW50RE9NSGVpZ2h0PWUuY2xpZW50SGVpZ2h0LHRoaXMubXVzdE1lYXN1cmVDb250ZW50PSExO2xldCBoPTAsYT0wLGM9cGFyc2VJbnQoaS5wYWRkaW5nVG9wKXx8MCxmPXBhcnNlSW50KGkucGFkZGluZ0JvdHRvbSl8fDA7KHRoaXMucGFkZGluZ1RvcCE9Y3x8dGhpcy5wYWRkaW5nQm90dG9tIT1mKSYmKHRoaXMucGFkZGluZ1RvcD1jLHRoaXMucGFkZGluZ0JvdHRvbT1mLGh8PTEwKSx0aGlzLmVkaXRvcldpZHRoIT10LnNjcm9sbERPTS5jbGllbnRXaWR0aCYmKG4ubGluZVdyYXBwaW5nJiYobD0hMCksdGhpcy5lZGl0b3JXaWR0aD10LnNjcm9sbERPTS5jbGllbnRXaWR0aCxofD04KTtsZXQgZD0odGhpcy5wcmludGluZz9zcjppcikoZSx0aGlzLnBhZGRpbmdUb3ApLHU9ZC50b3AtdGhpcy5waXhlbFZpZXdwb3J0LnRvcCxwPWQuYm90dG9tLXRoaXMucGl4ZWxWaWV3cG9ydC5ib3R0b207dGhpcy5waXhlbFZpZXdwb3J0PWQ7bGV0IGI9dGhpcy5waXhlbFZpZXdwb3J0LmJvdHRvbT50aGlzLnBpeGVsVmlld3BvcnQudG9wJiZ0aGlzLnBpeGVsVmlld3BvcnQucmlnaHQ+dGhpcy5waXhlbFZpZXdwb3J0LmxlZnQ7aWYoYiE9dGhpcy5pblZpZXcmJih0aGlzLmluVmlldz1iLGImJihsPSEwKSksIXRoaXMuaW5WaWV3JiYhdGhpcy5zY3JvbGxUYXJnZXQpcmV0dXJuIDA7bGV0IG09ZS5jbGllbnRXaWR0aDtpZigodGhpcy5jb250ZW50RE9NV2lkdGghPW18fHRoaXMuZWRpdG9ySGVpZ2h0IT10LnNjcm9sbERPTS5jbGllbnRIZWlnaHQpJiYodGhpcy5jb250ZW50RE9NV2lkdGg9bSx0aGlzLmVkaXRvckhlaWdodD10LnNjcm9sbERPTS5jbGllbnRIZWlnaHQsaHw9OCksbCl7bGV0IFM9dC5kb2NWaWV3Lm1lYXN1cmVWaXNpYmxlTGluZUhlaWdodHModGhpcy52aWV3cG9ydCk7aWYobi5tdXN0UmVmcmVzaEZvckhlaWdodHMoUykmJihvPSEwKSxvfHxuLmxpbmVXcmFwcGluZyYmTWF0aC5hYnMobS10aGlzLmNvbnRlbnRET01XaWR0aCk+bi5jaGFyV2lkdGgpe2xldHtsaW5lSGVpZ2h0OncsY2hhcldpZHRoOnZ9PXQuZG9jVmlldy5tZWFzdXJlVGV4dFNpemUoKTtvPW4ucmVmcmVzaChyLHcsdixtL3YsUyksbyYmKHQuZG9jVmlldy5taW5XaWR0aD0wLGh8PTgpfXU+MCYmcD4wP2E9TWF0aC5tYXgodSxwKTp1PDAmJnA8MCYmKGE9TWF0aC5taW4odSxwKSksbi5oZWlnaHRDaGFuZ2VkPSExO2ZvcihsZXQgdyBvZiB0aGlzLnZpZXdwb3J0cyl7bGV0IHY9dy5mcm9tPT10aGlzLnZpZXdwb3J0LmZyb20/Uzp0LmRvY1ZpZXcubWVhc3VyZVZpc2libGVMaW5lSGVpZ2h0cyh3KTt0aGlzLmhlaWdodE1hcD10aGlzLmhlaWdodE1hcC51cGRhdGVIZWlnaHQobiwwLG8sbmV3IHBlKHcuZnJvbSx2KSl9bi5oZWlnaHRDaGFuZ2VkJiYoaHw9Mil9bGV0IGc9IXRoaXMudmlld3BvcnRJc0FwcHJvcHJpYXRlKHRoaXMudmlld3BvcnQsYSl8fHRoaXMuc2Nyb2xsVGFyZ2V0JiYodGhpcy5zY3JvbGxUYXJnZXQucmFuZ2UuaGVhZDx0aGlzLnZpZXdwb3J0LmZyb218fHRoaXMuc2Nyb2xsVGFyZ2V0LnJhbmdlLmhlYWQ+dGhpcy52aWV3cG9ydC50byk7cmV0dXJuIGcmJih0aGlzLnZpZXdwb3J0PXRoaXMuZ2V0Vmlld3BvcnQoYSx0aGlzLnNjcm9sbFRhcmdldCkpLHRoaXMudXBkYXRlRm9yVmlld3BvcnQoKSwoaCYyfHxnKSYmdGhpcy51cGRhdGVWaWV3cG9ydExpbmVzKCksKHRoaXMubGluZUdhcHMubGVuZ3RofHx0aGlzLnZpZXdwb3J0LnRvLXRoaXMudmlld3BvcnQuZnJvbT4yZTM8PDEpJiZ0aGlzLnVwZGF0ZUxpbmVHYXBzKHRoaXMuZW5zdXJlTGluZUdhcHMobz9bXTp0aGlzLmxpbmVHYXBzLHQpKSxofD10aGlzLmNvbXB1dGVWaXNpYmxlUmFuZ2VzKCksdGhpcy5tdXN0RW5mb3JjZUN1cnNvckFzc29jJiYodGhpcy5tdXN0RW5mb3JjZUN1cnNvckFzc29jPSExLHQuZG9jVmlldy5lbmZvcmNlQ3Vyc29yQXNzb2MoKSksaH1nZXQgdmlzaWJsZVRvcCgpe3JldHVybiB0aGlzLnNjYWxlci5mcm9tRE9NKHRoaXMucGl4ZWxWaWV3cG9ydC50b3ApfWdldCB2aXNpYmxlQm90dG9tKCl7cmV0dXJuIHRoaXMuc2NhbGVyLmZyb21ET00odGhpcy5waXhlbFZpZXdwb3J0LmJvdHRvbSl9Z2V0Vmlld3BvcnQodCxlKXtsZXQgaT0uNS1NYXRoLm1heCgtLjUsTWF0aC5taW4oLjUsdC8xZTMvMikpLG49dGhpcy5oZWlnaHRNYXAscj10aGlzLnN0YXRlLmRvYyx7dmlzaWJsZVRvcDpvLHZpc2libGVCb3R0b206bH09dGhpcyxoPW5ldyB1dChuLmxpbmVBdChvLWkqMWUzLEQuQnlIZWlnaHQsciwwLDApLmZyb20sbi5saW5lQXQobCsoMS1pKSoxZTMsRC5CeUhlaWdodCxyLDAsMCkudG8pO2lmKGUpe2xldHtoZWFkOmF9PWUucmFuZ2U7aWYoYTxoLmZyb218fGE+aC50byl7bGV0IGM9TWF0aC5taW4odGhpcy5lZGl0b3JIZWlnaHQsdGhpcy5waXhlbFZpZXdwb3J0LmJvdHRvbS10aGlzLnBpeGVsVmlld3BvcnQudG9wKSxmPW4ubGluZUF0KGEsRC5CeVBvcyxyLDAsMCksZDtlLnk9PVwiY2VudGVyXCI/ZD0oZi50b3ArZi5ib3R0b20pLzItYy8yOmUueT09XCJzdGFydFwifHxlLnk9PVwibmVhcmVzdFwiJiZhPGguZnJvbT9kPWYudG9wOmQ9Zi5ib3R0b20tYyxoPW5ldyB1dChuLmxpbmVBdChkLTFlMy8yLEQuQnlIZWlnaHQsciwwLDApLmZyb20sbi5saW5lQXQoZCtjKzFlMy8yLEQuQnlIZWlnaHQsciwwLDApLnRvKX19cmV0dXJuIGh9bWFwVmlld3BvcnQodCxlKXtsZXQgaT1lLm1hcFBvcyh0LmZyb20sLTEpLG49ZS5tYXBQb3ModC50bywxKTtyZXR1cm4gbmV3IHV0KHRoaXMuaGVpZ2h0TWFwLmxpbmVBdChpLEQuQnlQb3MsdGhpcy5zdGF0ZS5kb2MsMCwwKS5mcm9tLHRoaXMuaGVpZ2h0TWFwLmxpbmVBdChuLEQuQnlQb3MsdGhpcy5zdGF0ZS5kb2MsMCwwKS50byl9dmlld3BvcnRJc0FwcHJvcHJpYXRlKHtmcm9tOnQsdG86ZX0saT0wKXtpZighdGhpcy5pblZpZXcpcmV0dXJuITA7bGV0e3RvcDpufT10aGlzLmhlaWdodE1hcC5saW5lQXQodCxELkJ5UG9zLHRoaXMuc3RhdGUuZG9jLDAsMCkse2JvdHRvbTpyfT10aGlzLmhlaWdodE1hcC5saW5lQXQoZSxELkJ5UG9zLHRoaXMuc3RhdGUuZG9jLDAsMCkse3Zpc2libGVUb3A6byx2aXNpYmxlQm90dG9tOmx9PXRoaXM7cmV0dXJuKHQ9PTB8fG48PW8tTWF0aC5tYXgoMTAsTWF0aC5taW4oLWksMjUwKSkpJiYoZT09dGhpcy5zdGF0ZS5kb2MubGVuZ3RofHxyPj1sK01hdGgubWF4KDEwLE1hdGgubWluKGksMjUwKSkpJiZuPm8tMioxZTMmJnI8bCsyKjFlM31tYXBMaW5lR2Fwcyh0LGUpe2lmKCF0Lmxlbmd0aHx8ZS5lbXB0eSlyZXR1cm4gdDtsZXQgaT1bXTtmb3IobGV0IG4gb2YgdCllLnRvdWNoZXNSYW5nZShuLmZyb20sbi50byl8fGkucHVzaChuZXcgUHQoZS5tYXBQb3Mobi5mcm9tKSxlLm1hcFBvcyhuLnRvKSxuLnNpemUpKTtyZXR1cm4gaX1lbnN1cmVMaW5lR2Fwcyh0LGUpe2xldCBpPXRoaXMuaGVpZ2h0T3JhY2xlLmxpbmVXcmFwcGluZyxuPWk/MWU0OjJlMyxyPW4+PjEsbz1uPDwxO2lmKHRoaXMuZGVmYXVsdFRleHREaXJlY3Rpb24hPVIuTFRSJiYhaSlyZXR1cm5bXTtsZXQgbD1bXSxoPShhLGMsZixkKT0+e2lmKGMtYTxyKXJldHVybjtsZXQgdT10aGlzLnN0YXRlLnNlbGVjdGlvbi5tYWluLHA9W3UuZnJvbV07dS5lbXB0eXx8cC5wdXNoKHUudG8pO2ZvcihsZXQgbSBvZiBwKWlmKG0+YSYmbTxjKXtoKGEsbS0xMCxmLGQpLGgobSsxMCxjLGYsZCk7cmV0dXJufWxldCBiPXJyKHQsbT0+bS5mcm9tPj1mLmZyb20mJm0udG88PWYudG8mJk1hdGguYWJzKG0uZnJvbS1hKTxyJiZNYXRoLmFicyhtLnRvLWMpPHImJiFwLnNvbWUoZz0+bS5mcm9tPGcmJm0udG8+ZykpO2lmKCFiKXtpZihjPGYudG8mJmUmJmkmJmUudmlzaWJsZVJhbmdlcy5zb21lKG09Pm0uZnJvbTw9YyYmbS50bz49Yykpe2xldCBtPWUubW92ZVRvTGluZUJvdW5kYXJ5KHguY3Vyc29yKGMpLCExLCEwKS5oZWFkO20+YSYmKGM9bSl9Yj1uZXcgUHQoYSxjLHRoaXMuZ2FwU2l6ZShmLGEsYyxkKSl9bC5wdXNoKGIpfTtmb3IobGV0IGEgb2YgdGhpcy52aWV3cG9ydExpbmVzKXtpZihhLmxlbmd0aDxvKWNvbnRpbnVlO2xldCBjPW5yKGEuZnJvbSxhLnRvLHRoaXMuc3RhdGVEZWNvKTtpZihjLnRvdGFsPG8pY29udGludWU7bGV0IGY9dGhpcy5zY3JvbGxUYXJnZXQ/dGhpcy5zY3JvbGxUYXJnZXQucmFuZ2UuaGVhZDpudWxsLGQsdTtpZihpKXtsZXQgcD1uL3RoaXMuaGVpZ2h0T3JhY2xlLmxpbmVMZW5ndGgqdGhpcy5oZWlnaHRPcmFjbGUubGluZUhlaWdodCxiLG07ZiE9bnVsbD8oYj1NYXRoLm1heChhLmZyb20sZi1uKSxtPU1hdGgubWluKGEudG8sZituKSk6KGI9KHRoaXMudmlzaWJsZVRvcC1hLnRvcC1wKS9hLmhlaWdodCxtPSh0aGlzLnZpc2libGVCb3R0b20tYS50b3ArcCkvYS5oZWlnaHQpLGQ9WHQoYyxiKSx1PVh0KGMsbSl9ZWxzZXtsZXQgcCxiO2lmKGYhPW51bGwpcD1NYXRoLm1heChhLmZyb20sZi1vKSxiPU1hdGgubWluKGEudG8sZitvKTtlbHNle2xldCBtPWMudG90YWwqdGhpcy5oZWlnaHRPcmFjbGUuY2hhcldpZHRoLGc9bip0aGlzLmhlaWdodE9yYWNsZS5jaGFyV2lkdGg7cD0odGhpcy5waXhlbFZpZXdwb3J0LmxlZnQtZykvbSxiPSh0aGlzLnBpeGVsVmlld3BvcnQucmlnaHQrZykvbX1kPVh0KGMscCksdT1YdChjLGIpfWQ+YS5mcm9tJiZoKGEuZnJvbSxkLGEsYyksdTxhLnRvJiZoKHUsYS50byxhLGMpfXJldHVybiBsfWdhcFNpemUodCxlLGksbil7bGV0IHI9X2kobixpKS1faShuLGUpO3JldHVybiB0aGlzLmhlaWdodE9yYWNsZS5saW5lV3JhcHBpbmc/dC5oZWlnaHQqcjpuLnRvdGFsKnRoaXMuaGVpZ2h0T3JhY2xlLmNoYXJXaWR0aCpyfXVwZGF0ZUxpbmVHYXBzKHQpe1B0LnNhbWUodCx0aGlzLmxpbmVHYXBzKXx8KHRoaXMubGluZUdhcHM9dCx0aGlzLmxpbmVHYXBEZWNvPWsuc2V0KHQubWFwKGU9PmUuZHJhdyh0aGlzLmhlaWdodE9yYWNsZS5saW5lV3JhcHBpbmcpKSkpfWNvbXB1dGVWaXNpYmxlUmFuZ2VzKCl7bGV0IHQ9dGhpcy5zdGF0ZURlY287dGhpcy5saW5lR2Fwcy5sZW5ndGgmJih0PXQuY29uY2F0KHRoaXMubGluZUdhcERlY28pKTtsZXQgZT1bXTtGLnNwYW5zKHQsdGhpcy52aWV3cG9ydC5mcm9tLHRoaXMudmlld3BvcnQudG8se3NwYW4obixyKXtlLnB1c2goe2Zyb206bix0bzpyfSl9LHBvaW50KCl7fX0sMjApO2xldCBpPWUubGVuZ3RoIT10aGlzLnZpc2libGVSYW5nZXMubGVuZ3RofHx0aGlzLnZpc2libGVSYW5nZXMuc29tZSgobixyKT0+bi5mcm9tIT1lW3JdLmZyb218fG4udG8hPWVbcl0udG8pO3JldHVybiB0aGlzLnZpc2libGVSYW5nZXM9ZSxpPzQ6MH1saW5lQmxvY2tBdCh0KXtyZXR1cm4gdD49dGhpcy52aWV3cG9ydC5mcm9tJiZ0PD10aGlzLnZpZXdwb3J0LnRvJiZ0aGlzLnZpZXdwb3J0TGluZXMuZmluZChlPT5lLmZyb208PXQmJmUudG8+PXQpfHxUdCh0aGlzLmhlaWdodE1hcC5saW5lQXQodCxELkJ5UG9zLHRoaXMuc3RhdGUuZG9jLDAsMCksdGhpcy5zY2FsZXIpfWxpbmVCbG9ja0F0SGVpZ2h0KHQpe3JldHVybiBUdCh0aGlzLmhlaWdodE1hcC5saW5lQXQodGhpcy5zY2FsZXIuZnJvbURPTSh0KSxELkJ5SGVpZ2h0LHRoaXMuc3RhdGUuZG9jLDAsMCksdGhpcy5zY2FsZXIpfWVsZW1lbnRBdEhlaWdodCh0KXtyZXR1cm4gVHQodGhpcy5oZWlnaHRNYXAuYmxvY2tBdCh0aGlzLnNjYWxlci5mcm9tRE9NKHQpLHRoaXMuc3RhdGUuZG9jLDAsMCksdGhpcy5zY2FsZXIpfWdldCBkb2NIZWlnaHQoKXtyZXR1cm4gdGhpcy5zY2FsZXIudG9ET00odGhpcy5oZWlnaHRNYXAuaGVpZ2h0KX1nZXQgY29udGVudEhlaWdodCgpe3JldHVybiB0aGlzLmRvY0hlaWdodCt0aGlzLnBhZGRpbmdUb3ArdGhpcy5wYWRkaW5nQm90dG9tfX0sdXQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmZyb209dCx0aGlzLnRvPWV9fTtmdW5jdGlvbiBucihzLHQsZSl7bGV0IGk9W10sbj1zLHI9MDtyZXR1cm4gRi5zcGFucyhlLHMsdCx7c3Bhbigpe30scG9pbnQobyxsKXtvPm4mJihpLnB1c2goe2Zyb206bix0bzpvfSkscis9by1uKSxuPWx9fSwyMCksbjx0JiYoaS5wdXNoKHtmcm9tOm4sdG86dH0pLHIrPXQtbikse3RvdGFsOnIscmFuZ2VzOml9fWZ1bmN0aW9uIFh0KHt0b3RhbDpzLHJhbmdlczp0fSxlKXtpZihlPD0wKXJldHVybiB0WzBdLmZyb207aWYoZT49MSlyZXR1cm4gdFt0Lmxlbmd0aC0xXS50bztsZXQgaT1NYXRoLmZsb29yKHMqZSk7Zm9yKGxldCBuPTA7O24rKyl7bGV0e2Zyb206cix0bzpvfT10W25dLGw9by1yO2lmKGk8PWwpcmV0dXJuIHIraTtpLT1sfX1mdW5jdGlvbiBfaShzLHQpe2xldCBlPTA7Zm9yKGxldHtmcm9tOmksdG86bn1vZiBzLnJhbmdlcyl7aWYodDw9bil7ZSs9dC1pO2JyZWFrfWUrPW4taX1yZXR1cm4gZS9zLnRvdGFsfWZ1bmN0aW9uIHJyKHMsdCl7Zm9yKGxldCBlIG9mIHMpaWYodChlKSlyZXR1cm4gZX12YXIgJGk9e3RvRE9NKHMpe3JldHVybiBzfSxmcm9tRE9NKHMpe3JldHVybiBzfSxzY2FsZToxfSx0aT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IG49MCxyPTAsbz0wO3RoaXMudmlld3BvcnRzPWkubWFwKCh7ZnJvbTpsLHRvOmh9KT0+e2xldCBhPWUubGluZUF0KGwsRC5CeVBvcyx0LDAsMCkudG9wLGM9ZS5saW5lQXQoaCxELkJ5UG9zLHQsMCwwKS5ib3R0b207cmV0dXJuIG4rPWMtYSx7ZnJvbTpsLHRvOmgsdG9wOmEsYm90dG9tOmMsZG9tVG9wOjAsZG9tQm90dG9tOjB9fSksdGhpcy5zY2FsZT0oN2U2LW4pLyhlLmhlaWdodC1uKTtmb3IobGV0IGwgb2YgdGhpcy52aWV3cG9ydHMpbC5kb21Ub3A9bysobC50b3AtcikqdGhpcy5zY2FsZSxvPWwuZG9tQm90dG9tPWwuZG9tVG9wKyhsLmJvdHRvbS1sLnRvcCkscj1sLmJvdHRvbX10b0RPTSh0KXtmb3IobGV0IGU9MCxpPTAsbj0wOztlKyspe2xldCByPWU8dGhpcy52aWV3cG9ydHMubGVuZ3RoP3RoaXMudmlld3BvcnRzW2VdOm51bGw7aWYoIXJ8fHQ8ci50b3ApcmV0dXJuIG4rKHQtaSkqdGhpcy5zY2FsZTtpZih0PD1yLmJvdHRvbSlyZXR1cm4gci5kb21Ub3ArKHQtci50b3ApO2k9ci5ib3R0b20sbj1yLmRvbUJvdHRvbX19ZnJvbURPTSh0KXtmb3IobGV0IGU9MCxpPTAsbj0wOztlKyspe2xldCByPWU8dGhpcy52aWV3cG9ydHMubGVuZ3RoP3RoaXMudmlld3BvcnRzW2VdOm51bGw7aWYoIXJ8fHQ8ci5kb21Ub3ApcmV0dXJuIGkrKHQtbikvdGhpcy5zY2FsZTtpZih0PD1yLmRvbUJvdHRvbSlyZXR1cm4gci50b3ArKHQtci5kb21Ub3ApO2k9ci5ib3R0b20sbj1yLmRvbUJvdHRvbX19fTtmdW5jdGlvbiBUdChzLHQpe2lmKHQuc2NhbGU9PTEpcmV0dXJuIHM7bGV0IGU9dC50b0RPTShzLnRvcCksaT10LnRvRE9NKHMuYm90dG9tKTtyZXR1cm4gbmV3IF8ocy5mcm9tLHMubGVuZ3RoLGUsaS1lLEFycmF5LmlzQXJyYXkocy50eXBlKT9zLnR5cGUubWFwKG49PlR0KG4sdCkpOnMudHlwZSl9dmFyIFV0PUMuZGVmaW5lKHtjb21iaW5lOnM9PnMuam9pbihcIiBcIil9KSxlaT1DLmRlZmluZSh7Y29tYmluZTpzPT5zLmluZGV4T2YoITApPi0xfSksaWk9YnQubmV3TmFtZSgpLFlzPWJ0Lm5ld05hbWUoKSxYcz1idC5uZXdOYW1lKCksVXM9e1wiJmxpZ2h0XCI6XCIuXCIrWXMsXCImZGFya1wiOlwiLlwiK1hzfTtmdW5jdGlvbiBzaShzLHQsZSl7cmV0dXJuIG5ldyBidCh0LHtmaW5pc2goaSl7cmV0dXJuLyYvLnRlc3QoaSk/aS5yZXBsYWNlKC8mXFx3Ki8sbj0+e2lmKG49PVwiJlwiKXJldHVybiBzO2lmKCFlfHwhZVtuXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5zdXBwb3J0ZWQgc2VsZWN0b3I6ICR7bn1gKTtyZXR1cm4gZVtuXX0pOnMrXCIgXCIraX19KX12YXIgb3I9c2koXCIuXCIraWkse1wiJi5jbS1lZGl0b3JcIjp7cG9zaXRpb246XCJyZWxhdGl2ZSAhaW1wb3J0YW50XCIsYm94U2l6aW5nOlwiYm9yZGVyLWJveFwiLFwiJi5jbS1mb2N1c2VkXCI6e291dGxpbmU6XCIxcHggZG90dGVkICMyMTIxMjFcIn0sZGlzcGxheTpcImZsZXggIWltcG9ydGFudFwiLGZsZXhEaXJlY3Rpb246XCJjb2x1bW5cIn0sXCIuY20tc2Nyb2xsZXJcIjp7ZGlzcGxheTpcImZsZXggIWltcG9ydGFudFwiLGFsaWduSXRlbXM6XCJmbGV4LXN0YXJ0ICFpbXBvcnRhbnRcIixmb250RmFtaWx5OlwibW9ub3NwYWNlXCIsbGluZUhlaWdodDoxLjQsaGVpZ2h0OlwiMTAwJVwiLG92ZXJmbG93WDpcImF1dG9cIixwb3NpdGlvbjpcInJlbGF0aXZlXCIsekluZGV4OjB9LFwiLmNtLWNvbnRlbnRcIjp7bWFyZ2luOjAsZmxleEdyb3c6MixmbGV4U2hyaW5rOjAsbWluSGVpZ2h0OlwiMTAwJVwiLGRpc3BsYXk6XCJibG9ja1wiLHdoaXRlU3BhY2U6XCJwcmVcIix3b3JkV3JhcDpcIm5vcm1hbFwiLGJveFNpemluZzpcImJvcmRlci1ib3hcIixwYWRkaW5nOlwiNHB4IDBcIixvdXRsaW5lOlwibm9uZVwiLFwiJltjb250ZW50ZWRpdGFibGU9dHJ1ZV1cIjp7V2Via2l0VXNlck1vZGlmeTpcInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHlcIn19LFwiLmNtLWxpbmVXcmFwcGluZ1wiOnt3aGl0ZVNwYWNlX2ZhbGxiYWNrOlwicHJlLXdyYXBcIix3aGl0ZVNwYWNlOlwiYnJlYWstc3BhY2VzXCIsd29yZEJyZWFrOlwiYnJlYWstd29yZFwiLG92ZXJmbG93V3JhcDpcImFueXdoZXJlXCIsZmxleFNocmluazoxfSxcIiZsaWdodCAuY20tY29udGVudFwiOntjYXJldENvbG9yOlwiYmxhY2tcIn0sXCImZGFyayAuY20tY29udGVudFwiOntjYXJldENvbG9yOlwid2hpdGVcIn0sXCIuY20tbGluZVwiOntkaXNwbGF5OlwiYmxvY2tcIixwYWRkaW5nOlwiMCAycHggMCA0cHhcIn0sXCIuY20tc2VsZWN0aW9uTGF5ZXJcIjp7ekluZGV4Oi0xLGNvbnRhaW46XCJzaXplIHN0eWxlXCJ9LFwiLmNtLXNlbGVjdGlvbkJhY2tncm91bmRcIjp7cG9zaXRpb246XCJhYnNvbHV0ZVwifSxcIiZsaWdodCAuY20tc2VsZWN0aW9uQmFja2dyb3VuZFwiOntiYWNrZ3JvdW5kOlwiI2Q5ZDlkOVwifSxcIiZkYXJrIC5jbS1zZWxlY3Rpb25CYWNrZ3JvdW5kXCI6e2JhY2tncm91bmQ6XCIjMjIyXCJ9LFwiJmxpZ2h0LmNtLWZvY3VzZWQgLmNtLXNlbGVjdGlvbkJhY2tncm91bmRcIjp7YmFja2dyb3VuZDpcIiNkN2Q0ZjBcIn0sXCImZGFyay5jbS1mb2N1c2VkIC5jbS1zZWxlY3Rpb25CYWNrZ3JvdW5kXCI6e2JhY2tncm91bmQ6XCIjMjMzXCJ9LFwiLmNtLWN1cnNvckxheWVyXCI6e3pJbmRleDoxMDAsY29udGFpbjpcInNpemUgc3R5bGVcIixwb2ludGVyRXZlbnRzOlwibm9uZVwifSxcIiYuY20tZm9jdXNlZCAuY20tY3Vyc29yTGF5ZXJcIjp7YW5pbWF0aW9uOlwic3RlcHMoMSkgY20tYmxpbmsgMS4ycyBpbmZpbml0ZVwifSxcIkBrZXlmcmFtZXMgY20tYmxpbmtcIjp7XCIwJVwiOnt9LFwiNTAlXCI6e29wYWNpdHk6MH0sXCIxMDAlXCI6e319LFwiQGtleWZyYW1lcyBjbS1ibGluazJcIjp7XCIwJVwiOnt9LFwiNTAlXCI6e29wYWNpdHk6MH0sXCIxMDAlXCI6e319LFwiLmNtLWN1cnNvciwgLmNtLWRyb3BDdXJzb3JcIjp7cG9zaXRpb246XCJhYnNvbHV0ZVwiLGJvcmRlckxlZnQ6XCIxLjJweCBzb2xpZCBibGFja1wiLG1hcmdpbkxlZnQ6XCItMC42cHhcIixwb2ludGVyRXZlbnRzOlwibm9uZVwifSxcIi5jbS1jdXJzb3JcIjp7ZGlzcGxheTpcIm5vbmVcIn0sXCImZGFyayAuY20tY3Vyc29yXCI6e2JvcmRlckxlZnRDb2xvcjpcIiM0NDRcIn0sXCImLmNtLWZvY3VzZWQgLmNtLWN1cnNvclwiOntkaXNwbGF5OlwiYmxvY2tcIn0sXCImbGlnaHQgLmNtLWFjdGl2ZUxpbmVcIjp7YmFja2dyb3VuZENvbG9yOlwiI2NjZWVmZjQ0XCJ9LFwiJmRhcmsgLmNtLWFjdGl2ZUxpbmVcIjp7YmFja2dyb3VuZENvbG9yOlwiIzk5ZWVmZjMzXCJ9LFwiJmxpZ2h0IC5jbS1zcGVjaWFsQ2hhclwiOntjb2xvcjpcInJlZFwifSxcIiZkYXJrIC5jbS1zcGVjaWFsQ2hhclwiOntjb2xvcjpcIiNmNzhcIn0sXCIuY20tZ3V0dGVyc1wiOntmbGV4U2hyaW5rOjAsZGlzcGxheTpcImZsZXhcIixoZWlnaHQ6XCIxMDAlXCIsYm94U2l6aW5nOlwiYm9yZGVyLWJveFwiLGxlZnQ6MCx6SW5kZXg6MjAwfSxcIiZsaWdodCAuY20tZ3V0dGVyc1wiOntiYWNrZ3JvdW5kQ29sb3I6XCIjZjVmNWY1XCIsY29sb3I6XCIjNmM2YzZjXCIsYm9yZGVyUmlnaHQ6XCIxcHggc29saWQgI2RkZFwifSxcIiZkYXJrIC5jbS1ndXR0ZXJzXCI6e2JhY2tncm91bmRDb2xvcjpcIiMzMzMzMzhcIixjb2xvcjpcIiNjY2NcIn0sXCIuY20tZ3V0dGVyXCI6e2Rpc3BsYXk6XCJmbGV4ICFpbXBvcnRhbnRcIixmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsZmxleFNocmluazowLGJveFNpemluZzpcImJvcmRlci1ib3hcIixtaW5IZWlnaHQ6XCIxMDAlXCIsb3ZlcmZsb3c6XCJoaWRkZW5cIn0sXCIuY20tZ3V0dGVyRWxlbWVudFwiOntib3hTaXppbmc6XCJib3JkZXItYm94XCJ9LFwiLmNtLWxpbmVOdW1iZXJzIC5jbS1ndXR0ZXJFbGVtZW50XCI6e3BhZGRpbmc6XCIwIDNweCAwIDVweFwiLG1pbldpZHRoOlwiMjBweFwiLHRleHRBbGlnbjpcInJpZ2h0XCIsd2hpdGVTcGFjZTpcIm5vd3JhcFwifSxcIiZsaWdodCAuY20tYWN0aXZlTGluZUd1dHRlclwiOntiYWNrZ3JvdW5kQ29sb3I6XCIjZTJmMmZmXCJ9LFwiJmRhcmsgLmNtLWFjdGl2ZUxpbmVHdXR0ZXJcIjp7YmFja2dyb3VuZENvbG9yOlwiIzIyMjIyN1wifSxcIi5jbS1wYW5lbHNcIjp7Ym94U2l6aW5nOlwiYm9yZGVyLWJveFwiLHBvc2l0aW9uOlwic3RpY2t5XCIsbGVmdDowLHJpZ2h0OjB9LFwiJmxpZ2h0IC5jbS1wYW5lbHNcIjp7YmFja2dyb3VuZENvbG9yOlwiI2Y1ZjVmNVwiLGNvbG9yOlwiYmxhY2tcIn0sXCImbGlnaHQgLmNtLXBhbmVscy10b3BcIjp7Ym9yZGVyQm90dG9tOlwiMXB4IHNvbGlkICNkZGRcIn0sXCImbGlnaHQgLmNtLXBhbmVscy1ib3R0b21cIjp7Ym9yZGVyVG9wOlwiMXB4IHNvbGlkICNkZGRcIn0sXCImZGFyayAuY20tcGFuZWxzXCI6e2JhY2tncm91bmRDb2xvcjpcIiMzMzMzMzhcIixjb2xvcjpcIndoaXRlXCJ9LFwiLmNtLXRhYlwiOntkaXNwbGF5OlwiaW5saW5lLWJsb2NrXCIsb3ZlcmZsb3c6XCJoaWRkZW5cIix2ZXJ0aWNhbEFsaWduOlwiYm90dG9tXCJ9LFwiLmNtLXdpZGdldEJ1ZmZlclwiOnt2ZXJ0aWNhbEFsaWduOlwidGV4dC10b3BcIixoZWlnaHQ6XCIxZW1cIix3aWR0aDowLGRpc3BsYXk6XCJpbmxpbmVcIn0sXCIuY20tcGxhY2Vob2xkZXJcIjp7Y29sb3I6XCIjODg4XCIsZGlzcGxheTpcImlubGluZS1ibG9ja1wiLHZlcnRpY2FsQWxpZ246XCJ0b3BcIn0sXCIuY20tYnV0dG9uXCI6e3ZlcnRpY2FsQWxpZ246XCJtaWRkbGVcIixjb2xvcjpcImluaGVyaXRcIixmb250U2l6ZTpcIjcwJVwiLHBhZGRpbmc6XCIuMmVtIDFlbVwiLGJvcmRlclJhZGl1czpcIjFweFwifSxcIiZsaWdodCAuY20tYnV0dG9uXCI6e2JhY2tncm91bmRJbWFnZTpcImxpbmVhci1ncmFkaWVudCgjZWZmMWY1LCAjZDlkOWRmKVwiLGJvcmRlcjpcIjFweCBzb2xpZCAjODg4XCIsXCImOmFjdGl2ZVwiOntiYWNrZ3JvdW5kSW1hZ2U6XCJsaW5lYXItZ3JhZGllbnQoI2I0YjRiNCwgI2QwZDNkNilcIn19LFwiJmRhcmsgLmNtLWJ1dHRvblwiOntiYWNrZ3JvdW5kSW1hZ2U6XCJsaW5lYXItZ3JhZGllbnQoIzM5MzkzOSwgIzExMSlcIixib3JkZXI6XCIxcHggc29saWQgIzg4OFwiLFwiJjphY3RpdmVcIjp7YmFja2dyb3VuZEltYWdlOlwibGluZWFyLWdyYWRpZW50KCMxMTEsICMzMzMpXCJ9fSxcIi5jbS10ZXh0ZmllbGRcIjp7dmVydGljYWxBbGlnbjpcIm1pZGRsZVwiLGNvbG9yOlwiaW5oZXJpdFwiLGZvbnRTaXplOlwiNzAlXCIsYm9yZGVyOlwiMXB4IHNvbGlkIHNpbHZlclwiLHBhZGRpbmc6XCIuMmVtIC41ZW1cIn0sXCImbGlnaHQgLmNtLXRleHRmaWVsZFwiOntiYWNrZ3JvdW5kQ29sb3I6XCJ3aGl0ZVwifSxcIiZkYXJrIC5jbS10ZXh0ZmllbGRcIjp7Ym9yZGVyOlwiMXB4IHNvbGlkICM1NTVcIixiYWNrZ3JvdW5kQ29sb3I6XCJpbmhlcml0XCJ9fSxVcyksbHI9e2NoaWxkTGlzdDohMCxjaGFyYWN0ZXJEYXRhOiEwLHN1YnRyZWU6ITAsYXR0cmlidXRlczohMCxjaGFyYWN0ZXJEYXRhT2xkVmFsdWU6ITB9LERlPXkuaWUmJnkuaWVfdmVyc2lvbjw9MTEsbmk9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudmlldz10LHRoaXMub25DaGFuZ2U9ZSx0aGlzLm9uU2Nyb2xsQ2hhbmdlZD1pLHRoaXMuYWN0aXZlPSExLHRoaXMuc2VsZWN0aW9uUmFuZ2U9bmV3IEVlLHRoaXMuc2VsZWN0aW9uQ2hhbmdlZD0hMSx0aGlzLmRlbGF5ZWRGbHVzaD0tMSx0aGlzLnJlc2l6ZVRpbWVvdXQ9LTEsdGhpcy5xdWV1ZT1bXSx0aGlzLmRlbGF5ZWRBbmRyb2lkS2V5PW51bGwsdGhpcy5sYXN0Q2hhbmdlPTAsdGhpcy5zY3JvbGxUYXJnZXRzPVtdLHRoaXMuaW50ZXJzZWN0aW9uPW51bGwsdGhpcy5yZXNpemU9bnVsbCx0aGlzLmludGVyc2VjdGluZz0hMSx0aGlzLmdhcEludGVyc2VjdGlvbj1udWxsLHRoaXMuZ2Fwcz1bXSx0aGlzLnBhcmVudENoZWNrPS0xLHRoaXMuZG9tPXQuY29udGVudERPTSx0aGlzLm9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKG49Pntmb3IobGV0IHIgb2Ygbil0aGlzLnF1ZXVlLnB1c2gocik7KHkuaWUmJnkuaWVfdmVyc2lvbjw9MTF8fHkuaW9zJiZ0LmNvbXBvc2luZykmJm4uc29tZShyPT5yLnR5cGU9PVwiY2hpbGRMaXN0XCImJnIucmVtb3ZlZE5vZGVzLmxlbmd0aHx8ci50eXBlPT1cImNoYXJhY3RlckRhdGFcIiYmci5vbGRWYWx1ZS5sZW5ndGg+ci50YXJnZXQubm9kZVZhbHVlLmxlbmd0aCk/dGhpcy5mbHVzaFNvb24oKTp0aGlzLmZsdXNoKCl9KSxEZSYmKHRoaXMub25DaGFyRGF0YT1uPT57dGhpcy5xdWV1ZS5wdXNoKHt0YXJnZXQ6bi50YXJnZXQsdHlwZTpcImNoYXJhY3RlckRhdGFcIixvbGRWYWx1ZTpuLnByZXZWYWx1ZX0pLHRoaXMuZmx1c2hTb29uKCl9KSx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlPXRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSx0aGlzLm9uUmVzaXplPXRoaXMub25SZXNpemUuYmluZCh0aGlzKSx0aGlzLm9uUHJpbnQ9dGhpcy5vblByaW50LmJpbmQodGhpcyksdGhpcy5vblNjcm9sbD10aGlzLm9uU2Nyb2xsLmJpbmQodGhpcyksdHlwZW9mIFJlc2l6ZU9ic2VydmVyPT1cImZ1bmN0aW9uXCImJih0aGlzLnJlc2l6ZT1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9Pnt0aGlzLnZpZXcuZG9jVmlldy5sYXN0VXBkYXRlPERhdGUubm93KCktNzUmJnRoaXMub25SZXNpemUoKX0pLHRoaXMucmVzaXplLm9ic2VydmUodC5zY3JvbGxET00pKSx0aGlzLmFkZFdpbmRvd0xpc3RlbmVycyh0aGlzLndpbj10LndpbiksdGhpcy5zdGFydCgpLHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlcj09XCJmdW5jdGlvblwiJiYodGhpcy5pbnRlcnNlY3Rpb249bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKG49Pnt0aGlzLnBhcmVudENoZWNrPDAmJih0aGlzLnBhcmVudENoZWNrPXNldFRpbWVvdXQodGhpcy5saXN0ZW5Gb3JTY3JvbGwuYmluZCh0aGlzKSwxZTMpKSxuLmxlbmd0aD4wJiZuW24ubGVuZ3RoLTFdLmludGVyc2VjdGlvblJhdGlvPjAhPXRoaXMuaW50ZXJzZWN0aW5nJiYodGhpcy5pbnRlcnNlY3Rpbmc9IXRoaXMuaW50ZXJzZWN0aW5nLHRoaXMuaW50ZXJzZWN0aW5nIT10aGlzLnZpZXcuaW5WaWV3JiZ0aGlzLm9uU2Nyb2xsQ2hhbmdlZChkb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpKSl9LHt9KSx0aGlzLmludGVyc2VjdGlvbi5vYnNlcnZlKHRoaXMuZG9tKSx0aGlzLmdhcEludGVyc2VjdGlvbj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIobj0+e24ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0uaW50ZXJzZWN0aW9uUmF0aW8+MCYmdGhpcy5vblNjcm9sbENoYW5nZWQoZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKSl9LHt9KSksdGhpcy5saXN0ZW5Gb3JTY3JvbGwoKSx0aGlzLnJlYWRTZWxlY3Rpb25SYW5nZSgpfW9uU2Nyb2xsKHQpe3RoaXMuaW50ZXJzZWN0aW5nJiZ0aGlzLmZsdXNoKCExKSx0aGlzLm9uU2Nyb2xsQ2hhbmdlZCh0KX1vblJlc2l6ZSgpe3RoaXMucmVzaXplVGltZW91dDwwJiYodGhpcy5yZXNpemVUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnJlc2l6ZVRpbWVvdXQ9LTEsdGhpcy52aWV3LnJlcXVlc3RNZWFzdXJlKCl9LDUwKSl9b25QcmludCgpe3RoaXMudmlldy52aWV3U3RhdGUucHJpbnRpbmc9ITAsdGhpcy52aWV3Lm1lYXN1cmUoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy52aWV3LnZpZXdTdGF0ZS5wcmludGluZz0hMSx0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUoKX0sNTAwKX11cGRhdGVHYXBzKHQpe2lmKHRoaXMuZ2FwSW50ZXJzZWN0aW9uJiYodC5sZW5ndGghPXRoaXMuZ2Fwcy5sZW5ndGh8fHRoaXMuZ2Fwcy5zb21lKChlLGkpPT5lIT10W2ldKSkpe3RoaXMuZ2FwSW50ZXJzZWN0aW9uLmRpc2Nvbm5lY3QoKTtmb3IobGV0IGUgb2YgdCl0aGlzLmdhcEludGVyc2VjdGlvbi5vYnNlcnZlKGUpO3RoaXMuZ2Fwcz10fX1vblNlbGVjdGlvbkNoYW5nZSh0KXtsZXQgZT10aGlzLnNlbGVjdGlvbkNoYW5nZWQ7aWYoIXRoaXMucmVhZFNlbGVjdGlvblJhbmdlKCl8fHRoaXMuZGVsYXllZEFuZHJvaWRLZXkpcmV0dXJuO2xldHt2aWV3Oml9PXRoaXMsbj10aGlzLnNlbGVjdGlvblJhbmdlO2lmKGkuc3RhdGUuZmFjZXQoQ2UpP2kucm9vdC5hY3RpdmVFbGVtZW50IT10aGlzLmRvbTohWnQoaS5kb20sbikpcmV0dXJuO2xldCByPW4uYW5jaG9yTm9kZSYmaS5kb2NWaWV3Lm5lYXJlc3Qobi5hbmNob3JOb2RlKTtpZihyJiZyLmlnbm9yZUV2ZW50KHQpKXtlfHwodGhpcy5zZWxlY3Rpb25DaGFuZ2VkPSExKTtyZXR1cm59KHkuaWUmJnkuaWVfdmVyc2lvbjw9MTF8fHkuYW5kcm9pZCYmeS5jaHJvbWUpJiYhaS5zdGF0ZS5zZWxlY3Rpb24ubWFpbi5lbXB0eSYmbi5mb2N1c05vZGUmJm5lKG4uZm9jdXNOb2RlLG4uZm9jdXNPZmZzZXQsbi5hbmNob3JOb2RlLG4uYW5jaG9yT2Zmc2V0KT90aGlzLmZsdXNoU29vbigpOnRoaXMuZmx1c2goITEpfXJlYWRTZWxlY3Rpb25SYW5nZSgpe2xldHt2aWV3OnR9PXRoaXMsZT15LnNhZmFyaSYmdC5yb290Lm5vZGVUeXBlPT0xMSYmZ24odGhpcy5kb20ub3duZXJEb2N1bWVudCk9PXRoaXMuZG9tJiZocih0aGlzLnZpZXcpfHxzZSh0LnJvb3QpO2lmKCFlfHx0aGlzLnNlbGVjdGlvblJhbmdlLmVxKGUpKXJldHVybiExO2xldCBpPVp0KHRoaXMuZG9tLGUpO3JldHVybiBpJiYhdGhpcy5zZWxlY3Rpb25DaGFuZ2VkJiZ0LmlucHV0U3RhdGUubGFzdEZvY3VzVGltZT5EYXRlLm5vdygpLTIwMCYmdC5pbnB1dFN0YXRlLmxhc3RUb3VjaFRpbWU8RGF0ZS5ub3coKS0zMDAmJnZuKHRoaXMuZG9tLGUpPyh0aGlzLnZpZXcuaW5wdXRTdGF0ZS5sYXN0Rm9jdXNUaW1lPTAsdC5kb2NWaWV3LnVwZGF0ZVNlbGVjdGlvbigpLCExKToodGhpcy5zZWxlY3Rpb25SYW5nZS5zZXRSYW5nZShlKSxpJiYodGhpcy5zZWxlY3Rpb25DaGFuZ2VkPSEwKSwhMCl9c2V0U2VsZWN0aW9uUmFuZ2UodCxlKXt0aGlzLnNlbGVjdGlvblJhbmdlLnNldCh0Lm5vZGUsdC5vZmZzZXQsZS5ub2RlLGUub2Zmc2V0KSx0aGlzLnNlbGVjdGlvbkNoYW5nZWQ9ITF9Y2xlYXJTZWxlY3Rpb25SYW5nZSgpe3RoaXMuc2VsZWN0aW9uUmFuZ2Uuc2V0KG51bGwsMCxudWxsLDApfWxpc3RlbkZvclNjcm9sbCgpe3RoaXMucGFyZW50Q2hlY2s9LTE7bGV0IHQ9MCxlPW51bGw7Zm9yKGxldCBpPXRoaXMuZG9tO2k7KWlmKGkubm9kZVR5cGU9PTEpIWUmJnQ8dGhpcy5zY3JvbGxUYXJnZXRzLmxlbmd0aCYmdGhpcy5zY3JvbGxUYXJnZXRzW3RdPT1pP3QrKzplfHwoZT10aGlzLnNjcm9sbFRhcmdldHMuc2xpY2UoMCx0KSksZSYmZS5wdXNoKGkpLGk9aS5hc3NpZ25lZFNsb3R8fGkucGFyZW50Tm9kZTtlbHNlIGlmKGkubm9kZVR5cGU9PTExKWk9aS5ob3N0O2Vsc2UgYnJlYWs7aWYodDx0aGlzLnNjcm9sbFRhcmdldHMubGVuZ3RoJiYhZSYmKGU9dGhpcy5zY3JvbGxUYXJnZXRzLnNsaWNlKDAsdCkpLGUpe2ZvcihsZXQgaSBvZiB0aGlzLnNjcm9sbFRhcmdldHMpaS5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5vblNjcm9sbCk7Zm9yKGxldCBpIG9mIHRoaXMuc2Nyb2xsVGFyZ2V0cz1lKWkuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMub25TY3JvbGwpfX1pZ25vcmUodCl7aWYoIXRoaXMuYWN0aXZlKXJldHVybiB0KCk7dHJ5e3JldHVybiB0aGlzLnN0b3AoKSx0KCl9ZmluYWxseXt0aGlzLnN0YXJ0KCksdGhpcy5jbGVhcigpfX1zdGFydCgpe3RoaXMuYWN0aXZlfHwodGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMuZG9tLGxyKSxEZSYmdGhpcy5kb20uYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZFwiLHRoaXMub25DaGFyRGF0YSksdGhpcy5hY3RpdmU9ITApfXN0b3AoKXshdGhpcy5hY3RpdmV8fCh0aGlzLmFjdGl2ZT0hMSx0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSxEZSYmdGhpcy5kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZFwiLHRoaXMub25DaGFyRGF0YSkpfWNsZWFyKCl7dGhpcy5wcm9jZXNzUmVjb3JkcygpLHRoaXMucXVldWUubGVuZ3RoPTAsdGhpcy5zZWxlY3Rpb25DaGFuZ2VkPSExfWRlbGF5QW5kcm9pZEtleSh0LGUpe3ZhciBpO3RoaXMuZGVsYXllZEFuZHJvaWRLZXl8fHRoaXMudmlldy53aW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57bGV0IG49dGhpcy5kZWxheWVkQW5kcm9pZEtleTt0aGlzLmRlbGF5ZWRBbmRyb2lkS2V5PW51bGwsdGhpcy5kZWxheWVkRmx1c2g9LTEsIXRoaXMuZmx1c2goKSYmbi5mb3JjZSYmRXQodGhpcy5kb20sbi5rZXksbi5rZXlDb2RlKX0pLCghdGhpcy5kZWxheWVkQW5kcm9pZEtleXx8dD09XCJFbnRlclwiKSYmKHRoaXMuZGVsYXllZEFuZHJvaWRLZXk9e2tleTp0LGtleUNvZGU6ZSxmb3JjZTp0aGlzLmxhc3RDaGFuZ2U8RGF0ZS5ub3coKS01MHx8ISEoISgoaT10aGlzLmRlbGF5ZWRBbmRyb2lkS2V5KT09PW51bGx8fGk9PT12b2lkIDApJiZpLmZvcmNlKX0pfWZsdXNoU29vbigpe3RoaXMuZGVsYXllZEZsdXNoPDAmJih0aGlzLmRlbGF5ZWRGbHVzaD10aGlzLnZpZXcud2luLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuZGVsYXllZEZsdXNoPS0xLHRoaXMuZmx1c2goKX0pKX1mb3JjZUZsdXNoKCl7dGhpcy5kZWxheWVkRmx1c2g+PTAmJih0aGlzLnZpZXcud2luLmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuZGVsYXllZEZsdXNoKSx0aGlzLmRlbGF5ZWRGbHVzaD0tMSksdGhpcy5mbHVzaCgpfXByb2Nlc3NSZWNvcmRzKCl7bGV0IHQ9dGhpcy5xdWV1ZTtmb3IobGV0IHIgb2YgdGhpcy5vYnNlcnZlci50YWtlUmVjb3JkcygpKXQucHVzaChyKTt0Lmxlbmd0aCYmKHRoaXMucXVldWU9W10pO2xldCBlPS0xLGk9LTEsbj0hMTtmb3IobGV0IHIgb2YgdCl7bGV0IG89dGhpcy5yZWFkTXV0YXRpb24ocik7IW98fChvLnR5cGVPdmVyJiYobj0hMCksZT09LTE/e2Zyb206ZSx0bzppfT1vOihlPU1hdGgubWluKG8uZnJvbSxlKSxpPU1hdGgubWF4KG8udG8saSkpKX1yZXR1cm57ZnJvbTplLHRvOmksdHlwZU92ZXI6bn19Zmx1c2godD0hMCl7aWYodGhpcy5kZWxheWVkRmx1c2g+PTB8fHRoaXMuZGVsYXllZEFuZHJvaWRLZXkpcmV0dXJuITE7dCYmdGhpcy5yZWFkU2VsZWN0aW9uUmFuZ2UoKTtsZXR7ZnJvbTplLHRvOmksdHlwZU92ZXI6bn09dGhpcy5wcm9jZXNzUmVjb3JkcygpLHI9dGhpcy5zZWxlY3Rpb25DaGFuZ2VkJiZadCh0aGlzLmRvbSx0aGlzLnNlbGVjdGlvblJhbmdlKTtpZihlPDAmJiFyKXJldHVybiExO2U+LTEmJih0aGlzLmxhc3RDaGFuZ2U9RGF0ZS5ub3coKSksdGhpcy52aWV3LmlucHV0U3RhdGUubGFzdEZvY3VzVGltZT0wLHRoaXMuc2VsZWN0aW9uQ2hhbmdlZD0hMTtsZXQgbz10aGlzLnZpZXcuc3RhdGUsbD10aGlzLm9uQ2hhbmdlKGUsaSxuKTtyZXR1cm4gdGhpcy52aWV3LnN0YXRlPT1vJiZ0aGlzLnZpZXcudXBkYXRlKFtdKSxsfXJlYWRNdXRhdGlvbih0KXtsZXQgZT10aGlzLnZpZXcuZG9jVmlldy5uZWFyZXN0KHQudGFyZ2V0KTtpZighZXx8ZS5pZ25vcmVNdXRhdGlvbih0KSlyZXR1cm4gbnVsbDtpZihlLm1hcmtEaXJ0eSh0LnR5cGU9PVwiYXR0cmlidXRlc1wiKSx0LnR5cGU9PVwiYXR0cmlidXRlc1wiJiYoZS5kaXJ0eXw9NCksdC50eXBlPT1cImNoaWxkTGlzdFwiKXtsZXQgaT1HaShlLHQucHJldmlvdXNTaWJsaW5nfHx0LnRhcmdldC5wcmV2aW91c1NpYmxpbmcsLTEpLG49R2koZSx0Lm5leHRTaWJsaW5nfHx0LnRhcmdldC5uZXh0U2libGluZywxKTtyZXR1cm57ZnJvbTppP2UucG9zQWZ0ZXIoaSk6ZS5wb3NBdFN0YXJ0LHRvOm4/ZS5wb3NCZWZvcmUobik6ZS5wb3NBdEVuZCx0eXBlT3ZlcjohMX19ZWxzZSByZXR1cm4gdC50eXBlPT1cImNoYXJhY3RlckRhdGFcIj97ZnJvbTplLnBvc0F0U3RhcnQsdG86ZS5wb3NBdEVuZCx0eXBlT3Zlcjp0LnRhcmdldC5ub2RlVmFsdWU9PXQub2xkVmFsdWV9Om51bGx9c2V0V2luZG93KHQpe3QhPXRoaXMud2luJiYodGhpcy5yZW1vdmVXaW5kb3dMaXN0ZW5lcnModGhpcy53aW4pLHRoaXMud2luPXQsdGhpcy5hZGRXaW5kb3dMaXN0ZW5lcnModGhpcy53aW4pKX1hZGRXaW5kb3dMaXN0ZW5lcnModCl7dC5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5vblJlc2l6ZSksdC5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JlcHJpbnRcIix0aGlzLm9uUHJpbnQpLHQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMub25TY3JvbGwpLHQuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLHRoaXMub25TZWxlY3Rpb25DaGFuZ2UpfXJlbW92ZVdpbmRvd0xpc3RlbmVycyh0KXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLm9uU2Nyb2xsKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLm9uUmVzaXplKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmVwcmludFwiLHRoaXMub25QcmludCksdC5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsdGhpcy5vblNlbGVjdGlvbkNoYW5nZSl9ZGVzdHJveSgpe3ZhciB0LGUsaTt0aGlzLnN0b3AoKSwodD10aGlzLmludGVyc2VjdGlvbik9PT1udWxsfHx0PT09dm9pZCAwfHx0LmRpc2Nvbm5lY3QoKSwoZT10aGlzLmdhcEludGVyc2VjdGlvbik9PT1udWxsfHxlPT09dm9pZCAwfHxlLmRpc2Nvbm5lY3QoKSwoaT10aGlzLnJlc2l6ZSk9PT1udWxsfHxpPT09dm9pZCAwfHxpLmRpc2Nvbm5lY3QoKTtmb3IobGV0IG4gb2YgdGhpcy5zY3JvbGxUYXJnZXRzKW4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMub25TY3JvbGwpO3RoaXMucmVtb3ZlV2luZG93TGlzdGVuZXJzKHRoaXMud2luKSxjbGVhclRpbWVvdXQodGhpcy5wYXJlbnRDaGVjayksY2xlYXJUaW1lb3V0KHRoaXMucmVzaXplVGltZW91dCl9fTtmdW5jdGlvbiBHaShzLHQsZSl7Zm9yKDt0Oyl7bGV0IGk9QS5nZXQodCk7aWYoaSYmaS5wYXJlbnQ9PXMpcmV0dXJuIGk7bGV0IG49dC5wYXJlbnROb2RlO3Q9biE9cy5kb20/bjplPjA/dC5uZXh0U2libGluZzp0LnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiBocihzKXtsZXQgdD1udWxsO2Z1bmN0aW9uIGUoaCl7aC5wcmV2ZW50RGVmYXVsdCgpLGguc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdD1oLmdldFRhcmdldFJhbmdlcygpWzBdfWlmKHMuY29udGVudERPTS5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JlaW5wdXRcIixlLCEwKSxzLmRvbS5vd25lckRvY3VtZW50LmV4ZWNDb21tYW5kKFwiaW5kZW50XCIpLHMuY29udGVudERPTS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JlaW5wdXRcIixlLCEwKSwhdClyZXR1cm4gbnVsbDtsZXQgaT10LnN0YXJ0Q29udGFpbmVyLG49dC5zdGFydE9mZnNldCxyPXQuZW5kQ29udGFpbmVyLG89dC5lbmRPZmZzZXQsbD1zLmRvY1ZpZXcuZG9tQXRQb3Mocy5zdGF0ZS5zZWxlY3Rpb24ubWFpbi5hbmNob3IpO3JldHVybiBuZShsLm5vZGUsbC5vZmZzZXQscixvKSYmKFtpLG4scixvXT1bcixvLGksbl0pLHthbmNob3JOb2RlOmksYW5jaG9yT2Zmc2V0Om4sZm9jdXNOb2RlOnIsZm9jdXNPZmZzZXQ6b319ZnVuY3Rpb24gYXIocyx0LGUsaSl7bGV0IG4scixvPXMuc3RhdGUuc2VsZWN0aW9uLm1haW47aWYodD4tMSl7bGV0IGw9cy5kb2NWaWV3LmRvbUJvdW5kc0Fyb3VuZCh0LGUsMCk7aWYoIWx8fHMuc3RhdGUucmVhZE9ubHkpcmV0dXJuITE7bGV0e2Zyb206aCx0bzphfT1sLGM9cy5kb2NWaWV3LmltcHJlY2lzZUhlYWR8fHMuZG9jVmlldy5pbXByZWNpc2VBbmNob3I/W106ZnIocyksZj1uZXcgYWUoYyxzLnN0YXRlKTtmLnJlYWRSYW5nZShsLnN0YXJ0RE9NLGwuZW5kRE9NKTtsZXQgZD1vLmZyb20sdT1udWxsOyhzLmlucHV0U3RhdGUubGFzdEtleUNvZGU9PT04JiZzLmlucHV0U3RhdGUubGFzdEtleVRpbWU+RGF0ZS5ub3coKS0xMDB8fHkuYW5kcm9pZCYmZi50ZXh0Lmxlbmd0aDxhLWgpJiYoZD1vLnRvLHU9XCJlbmRcIik7bGV0IHA9Y3Iocy5zdGF0ZS5kb2Muc2xpY2VTdHJpbmcoaCxhLHN0KSxmLnRleHQsZC1oLHUpO3AmJih5LmNocm9tZSYmcy5pbnB1dFN0YXRlLmxhc3RLZXlDb2RlPT0xMyYmcC50b0I9PXAuZnJvbSsyJiZmLnRleHQuc2xpY2UocC5mcm9tLHAudG9CKT09c3Qrc3QmJnAudG9CLS0sbj17ZnJvbTpoK3AuZnJvbSx0bzpoK3AudG9BLGluc2VydDpvdC5vZihmLnRleHQuc2xpY2UocC5mcm9tLHAudG9CKS5zcGxpdChzdCkpfSkscj1kcihjLGgpfWVsc2UgaWYocy5oYXNGb2N1c3x8IXMuc3RhdGUuZmFjZXQoQ2UpKXtsZXQgbD1zLm9ic2VydmVyLnNlbGVjdGlvblJhbmdlLHtpbXByZWNpc2VIZWFkOmgsaW1wcmVjaXNlQW5jaG9yOmF9PXMuZG9jVmlldyxjPWgmJmgubm9kZT09bC5mb2N1c05vZGUmJmgub2Zmc2V0PT1sLmZvY3VzT2Zmc2V0fHwheXQocy5jb250ZW50RE9NLGwuZm9jdXNOb2RlKT9zLnN0YXRlLnNlbGVjdGlvbi5tYWluLmhlYWQ6cy5kb2NWaWV3LnBvc0Zyb21ET00obC5mb2N1c05vZGUsbC5mb2N1c09mZnNldCksZj1hJiZhLm5vZGU9PWwuYW5jaG9yTm9kZSYmYS5vZmZzZXQ9PWwuYW5jaG9yT2Zmc2V0fHwheXQocy5jb250ZW50RE9NLGwuYW5jaG9yTm9kZSk/cy5zdGF0ZS5zZWxlY3Rpb24ubWFpbi5hbmNob3I6cy5kb2NWaWV3LnBvc0Zyb21ET00obC5hbmNob3JOb2RlLGwuYW5jaG9yT2Zmc2V0KTsoYyE9by5oZWFkfHxmIT1vLmFuY2hvcikmJihyPXguc2luZ2xlKGYsYykpfWlmKCFuJiYhcilyZXR1cm4hMTtpZighbiYmaSYmIW8uZW1wdHkmJnImJnIubWFpbi5lbXB0eT9uPXtmcm9tOm8uZnJvbSx0bzpvLnRvLGluc2VydDpzLnN0YXRlLmRvYy5zbGljZShvLmZyb20sby50byl9Om4mJm4uZnJvbT49by5mcm9tJiZuLnRvPD1vLnRvJiYobi5mcm9tIT1vLmZyb218fG4udG8hPW8udG8pJiZvLnRvLW8uZnJvbS0obi50by1uLmZyb20pPD00P249e2Zyb206by5mcm9tLHRvOm8udG8saW5zZXJ0OnMuc3RhdGUuZG9jLnNsaWNlKG8uZnJvbSxuLmZyb20pLmFwcGVuZChuLmluc2VydCkuYXBwZW5kKHMuc3RhdGUuZG9jLnNsaWNlKG4udG8sby50bykpfTooeS5tYWN8fHkuYW5kcm9pZCkmJm4mJm4uZnJvbT09bi50byYmbi5mcm9tPT1vLmhlYWQtMSYmL15cXC4gPyQvLnRlc3Qobi5pbnNlcnQudG9TdHJpbmcoKSkmJihyJiZuLmluc2VydC5sZW5ndGg9PTImJihyPXguc2luZ2xlKHIubWFpbi5hbmNob3ItMSxyLm1haW4uaGVhZC0xKSksbj17ZnJvbTpvLmZyb20sdG86by50byxpbnNlcnQ6b3Qub2YoW1wiIFwiXSl9KSxuKXtsZXQgbD1zLnN0YXRlO2lmKHkuaW9zJiZzLmlucHV0U3RhdGUuZmx1c2hJT1NLZXkocyl8fHkuYW5kcm9pZCYmKG4uZnJvbT09by5mcm9tJiZuLnRvPT1vLnRvJiZuLmluc2VydC5sZW5ndGg9PTEmJm4uaW5zZXJ0LmxpbmVzPT0yJiZFdChzLmNvbnRlbnRET00sXCJFbnRlclwiLDEzKXx8bi5mcm9tPT1vLmZyb20tMSYmbi50bz09by50byYmbi5pbnNlcnQubGVuZ3RoPT0wJiZFdChzLmNvbnRlbnRET00sXCJCYWNrc3BhY2VcIiw4KXx8bi5mcm9tPT1vLmZyb20mJm4udG89PW8udG8rMSYmbi5pbnNlcnQubGVuZ3RoPT0wJiZFdChzLmNvbnRlbnRET00sXCJEZWxldGVcIiw0NikpKXJldHVybiEwO2xldCBoPW4uaW5zZXJ0LnRvU3RyaW5nKCk7aWYocy5zdGF0ZS5mYWNldChUcykuc29tZShmPT5mKHMsbi5mcm9tLG4udG8saCkpKXJldHVybiEwO3MuaW5wdXRTdGF0ZS5jb21wb3Npbmc+PTAmJnMuaW5wdXRTdGF0ZS5jb21wb3NpbmcrKztsZXQgYTtpZihuLmZyb20+PW8uZnJvbSYmbi50bzw9by50byYmbi50by1uLmZyb20+PShvLnRvLW8uZnJvbSkvMyYmKCFyfHxyLm1haW4uZW1wdHkmJnIubWFpbi5mcm9tPT1uLmZyb20rbi5pbnNlcnQubGVuZ3RoKSYmcy5pbnB1dFN0YXRlLmNvbXBvc2luZzwwKXtsZXQgZj1vLmZyb208bi5mcm9tP2wuc2xpY2VEb2Moby5mcm9tLG4uZnJvbSk6XCJcIixkPW8udG8+bi50bz9sLnNsaWNlRG9jKG4udG8sby50byk6XCJcIjthPWwucmVwbGFjZVNlbGVjdGlvbihzLnN0YXRlLnRvVGV4dChmK24uaW5zZXJ0LnNsaWNlU3RyaW5nKDAsdm9pZCAwLHMuc3RhdGUubGluZUJyZWFrKStkKSl9ZWxzZXtsZXQgZj1sLmNoYW5nZXMobiksZD1yJiYhbC5zZWxlY3Rpb24ubWFpbi5lcShyLm1haW4pJiZyLm1haW4udG88PWYubmV3TGVuZ3RoP3IubWFpbjp2b2lkIDA7aWYobC5zZWxlY3Rpb24ucmFuZ2VzLmxlbmd0aD4xJiZzLmlucHV0U3RhdGUuY29tcG9zaW5nPj0wJiZuLnRvPD1vLnRvJiZuLnRvPj1vLnRvLTEwKXtsZXQgdT1zLnN0YXRlLnNsaWNlRG9jKG4uZnJvbSxuLnRvKSxwPVdzKHMpfHxzLnN0YXRlLmRvYy5saW5lQXQoby5oZWFkKSxiPW8udG8tbi50byxtPW8udG8tby5mcm9tO2E9bC5jaGFuZ2VCeVJhbmdlKGc9PntpZihnLmZyb209PW8uZnJvbSYmZy50bz09by50bylyZXR1cm57Y2hhbmdlczpmLHJhbmdlOmR8fGcubWFwKGYpfTtsZXQgUz1nLnRvLWIsdz1TLXUubGVuZ3RoO2lmKGcudG8tZy5mcm9tIT1tfHxzLnN0YXRlLnNsaWNlRG9jKHcsUykhPXV8fHAmJmcudG8+PXAuZnJvbSYmZy5mcm9tPD1wLnRvKXJldHVybntyYW5nZTpnfTtsZXQgdj1sLmNoYW5nZXMoe2Zyb206dyx0bzpTLGluc2VydDpuLmluc2VydH0pLEw9Zy50by1vLnRvO3JldHVybntjaGFuZ2VzOnYscmFuZ2U6ZD94LnJhbmdlKE1hdGgubWF4KDAsZC5hbmNob3IrTCksTWF0aC5tYXgoMCxkLmhlYWQrTCkpOmcubWFwKHYpfX0pfWVsc2UgYT17Y2hhbmdlczpmLHNlbGVjdGlvbjpkJiZsLnNlbGVjdGlvbi5yZXBsYWNlUmFuZ2UoZCl9fWxldCBjPVwiaW5wdXQudHlwZVwiO3JldHVybiBzLmNvbXBvc2luZyYmKGMrPVwiLmNvbXBvc2VcIixzLmlucHV0U3RhdGUuY29tcG9zaXRpb25GaXJzdENoYW5nZSYmKGMrPVwiLnN0YXJ0XCIscy5pbnB1dFN0YXRlLmNvbXBvc2l0aW9uRmlyc3RDaGFuZ2U9ITEpKSxzLmRpc3BhdGNoKGEse3Njcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpjfSksITB9ZWxzZSBpZihyJiYhci5tYWluLmVxKG8pKXtsZXQgbD0hMSxoPVwic2VsZWN0XCI7cmV0dXJuIHMuaW5wdXRTdGF0ZS5sYXN0U2VsZWN0aW9uVGltZT5EYXRlLm5vdygpLTUwJiYocy5pbnB1dFN0YXRlLmxhc3RTZWxlY3Rpb25PcmlnaW49PVwic2VsZWN0XCImJihsPSEwKSxoPXMuaW5wdXRTdGF0ZS5sYXN0U2VsZWN0aW9uT3JpZ2luKSxzLmRpc3BhdGNoKHtzZWxlY3Rpb246cixzY3JvbGxJbnRvVmlldzpsLHVzZXJFdmVudDpofSksITB9ZWxzZSByZXR1cm4hMX1mdW5jdGlvbiBjcihzLHQsZSxpKXtsZXQgbj1NYXRoLm1pbihzLmxlbmd0aCx0Lmxlbmd0aCkscj0wO2Zvcig7cjxuJiZzLmNoYXJDb2RlQXQocik9PXQuY2hhckNvZGVBdChyKTspcisrO2lmKHI9PW4mJnMubGVuZ3RoPT10Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbz1zLmxlbmd0aCxsPXQubGVuZ3RoO2Zvcig7bz4wJiZsPjAmJnMuY2hhckNvZGVBdChvLTEpPT10LmNoYXJDb2RlQXQobC0xKTspby0tLGwtLTtpZihpPT1cImVuZFwiKXtsZXQgaD1NYXRoLm1heCgwLHItTWF0aC5taW4obyxsKSk7ZS09bytoLXJ9cmV0dXJuIG88ciYmcy5sZW5ndGg8dC5sZW5ndGg/KHItPWU8PXImJmU+PW8/ci1lOjAsbD1yKyhsLW8pLG89cik6bDxyJiYoci09ZTw9ciYmZT49bD9yLWU6MCxvPXIrKG8tbCksbD1yKSx7ZnJvbTpyLHRvQTpvLHRvQjpsfX1mdW5jdGlvbiBmcihzKXtsZXQgdD1bXTtpZihzLnJvb3QuYWN0aXZlRWxlbWVudCE9cy5jb250ZW50RE9NKXJldHVybiB0O2xldHthbmNob3JOb2RlOmUsYW5jaG9yT2Zmc2V0OmksZm9jdXNOb2RlOm4sZm9jdXNPZmZzZXQ6cn09cy5vYnNlcnZlci5zZWxlY3Rpb25SYW5nZTtyZXR1cm4gZSYmKHQucHVzaChuZXcgY2UoZSxpKSksKG4hPWV8fHIhPWkpJiZ0LnB1c2gobmV3IGNlKG4scikpKSx0fWZ1bmN0aW9uIGRyKHMsdCl7aWYocy5sZW5ndGg9PTApcmV0dXJuIG51bGw7bGV0IGU9c1swXS5wb3MsaT1zLmxlbmd0aD09Mj9zWzFdLnBvczplO3JldHVybiBlPi0xJiZpPi0xP3guc2luZ2xlKGUrdCxpK3QpOm51bGx9dmFyIE09Y2xhc3N7Y29uc3RydWN0b3IodD17fSl7dGhpcy5wbHVnaW5zPVtdLHRoaXMucGx1Z2luTWFwPW5ldyBNYXAsdGhpcy5lZGl0b3JBdHRycz17fSx0aGlzLmNvbnRlbnRBdHRycz17fSx0aGlzLmJpZGlDYWNoZT1bXSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLnVwZGF0ZVN0YXRlPTIsdGhpcy5tZWFzdXJlU2NoZWR1bGVkPS0xLHRoaXMubWVhc3VyZVJlcXVlc3RzPVtdLHRoaXMuY29udGVudERPTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMuc2Nyb2xsRE9NPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy5zY3JvbGxET00udGFiSW5kZXg9LTEsdGhpcy5zY3JvbGxET00uY2xhc3NOYW1lPVwiY20tc2Nyb2xsZXJcIix0aGlzLnNjcm9sbERPTS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRET00pLHRoaXMuYW5ub3VuY2VET009ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLmFubm91bmNlRE9NLnN0eWxlLmNzc1RleHQ9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMDAwcHhcIix0aGlzLmFubm91bmNlRE9NLnNldEF0dHJpYnV0ZShcImFyaWEtbGl2ZVwiLFwicG9saXRlXCIpLHRoaXMuZG9tPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy5kb20uYXBwZW5kQ2hpbGQodGhpcy5hbm5vdW5jZURPTSksdGhpcy5kb20uYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxET00pLHRoaXMuX2Rpc3BhdGNoPXQuZGlzcGF0Y2h8fChlPT50aGlzLnVwZGF0ZShbZV0pKSx0aGlzLmRpc3BhdGNoPXRoaXMuZGlzcGF0Y2guYmluZCh0aGlzKSx0aGlzLl9yb290PXQucm9vdHx8d24odC5wYXJlbnQpfHxkb2N1bWVudCx0aGlzLnZpZXdTdGF0ZT1uZXcgZ2UodC5zdGF0ZXx8THQuY3JlYXRlKHQpKSx0aGlzLnBsdWdpbnM9dGhpcy5zdGF0ZS5mYWNldChBdCkubWFwKGU9Pm5ldyBCdChlKSk7Zm9yKGxldCBlIG9mIHRoaXMucGx1Z2lucyllLnVwZGF0ZSh0aGlzKTt0aGlzLm9ic2VydmVyPW5ldyBuaSh0aGlzLChlLGksbik9PmFyKHRoaXMsZSxpLG4pLGU9Pnt0aGlzLmlucHV0U3RhdGUucnVuU2Nyb2xsSGFuZGxlcnModGhpcyxlKSx0aGlzLm9ic2VydmVyLmludGVyc2VjdGluZyYmdGhpcy5tZWFzdXJlKCl9KSx0aGlzLmlucHV0U3RhdGU9bmV3IEdlKHRoaXMpLHRoaXMuaW5wdXRTdGF0ZS5lbnN1cmVIYW5kbGVycyh0aGlzLHRoaXMucGx1Z2lucyksdGhpcy5kb2NWaWV3PW5ldyBmZSh0aGlzKSx0aGlzLm1vdW50U3R5bGVzKCksdGhpcy51cGRhdGVBdHRycygpLHRoaXMudXBkYXRlU3RhdGU9MCx0aGlzLnJlcXVlc3RNZWFzdXJlKCksdC5wYXJlbnQmJnQucGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZG9tKX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy52aWV3U3RhdGUuc3RhdGV9Z2V0IHZpZXdwb3J0KCl7cmV0dXJuIHRoaXMudmlld1N0YXRlLnZpZXdwb3J0fWdldCB2aXNpYmxlUmFuZ2VzKCl7cmV0dXJuIHRoaXMudmlld1N0YXRlLnZpc2libGVSYW5nZXN9Z2V0IGluVmlldygpe3JldHVybiB0aGlzLnZpZXdTdGF0ZS5pblZpZXd9Z2V0IGNvbXBvc2luZygpe3JldHVybiB0aGlzLmlucHV0U3RhdGUuY29tcG9zaW5nPjB9Z2V0IGNvbXBvc2l0aW9uU3RhcnRlZCgpe3JldHVybiB0aGlzLmlucHV0U3RhdGUuY29tcG9zaW5nPj0wfWdldCByb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9Z2V0IHdpbigpe3JldHVybiB0aGlzLmRvbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9ZGlzcGF0Y2goLi4udCl7dGhpcy5fZGlzcGF0Y2godC5sZW5ndGg9PTEmJnRbMF1pbnN0YW5jZW9mIGNuP3RbMF06dGhpcy5zdGF0ZS51cGRhdGUoLi4udCkpfXVwZGF0ZSh0KXtpZih0aGlzLnVwZGF0ZVN0YXRlIT0wKXRocm93IG5ldyBFcnJvcihcIkNhbGxzIHRvIEVkaXRvclZpZXcudXBkYXRlIGFyZSBub3QgYWxsb3dlZCB3aGlsZSBhbiB1cGRhdGUgaXMgaW4gcHJvZ3Jlc3NcIik7bGV0IGU9ITEsaT0hMSxuLHI9dGhpcy5zdGF0ZTtmb3IobGV0IGwgb2YgdCl7aWYobC5zdGFydFN0YXRlIT1yKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIHVwZGF0ZSBzdGF0ZSB3aXRoIGEgdHJhbnNhY3Rpb24gdGhhdCBkb2Vzbid0IHN0YXJ0IGZyb20gdGhlIHByZXZpb3VzIHN0YXRlLlwiKTtyPWwuc3RhdGV9aWYodGhpcy5kZXN0cm95ZWQpe3RoaXMudmlld1N0YXRlLnN0YXRlPXI7cmV0dXJufWlmKHRoaXMub2JzZXJ2ZXIuY2xlYXIoKSxyLmZhY2V0KEx0LnBocmFzZXMpIT10aGlzLnN0YXRlLmZhY2V0KEx0LnBocmFzZXMpKXJldHVybiB0aGlzLnNldFN0YXRlKHIpO249U3QuY3JlYXRlKHRoaXMscix0KTtsZXQgbz10aGlzLnZpZXdTdGF0ZS5zY3JvbGxUYXJnZXQ7dHJ5e3RoaXMudXBkYXRlU3RhdGU9Mjtmb3IobGV0IGwgb2YgdCl7aWYobyYmKG89by5tYXAobC5jaGFuZ2VzKSksbC5zY3JvbGxJbnRvVmlldyl7bGV0e21haW46aH09bC5zdGF0ZS5zZWxlY3Rpb247bz1uZXcgeHQoaC5lbXB0eT9oOnguY3Vyc29yKGguaGVhZCxoLmhlYWQ+aC5hbmNob3I/LTE6MSkpfWZvcihsZXQgaCBvZiBsLmVmZmVjdHMpaC5pcyhUaSkmJihvPWgudmFsdWUpfXRoaXMudmlld1N0YXRlLnVwZGF0ZShuLG8pLHRoaXMuYmlkaUNhY2hlPUN0LnVwZGF0ZSh0aGlzLmJpZGlDYWNoZSxuLmNoYW5nZXMpLG4uZW1wdHl8fCh0aGlzLnVwZGF0ZVBsdWdpbnMobiksdGhpcy5pbnB1dFN0YXRlLnVwZGF0ZShuKSksZT10aGlzLmRvY1ZpZXcudXBkYXRlKG4pLHRoaXMuc3RhdGUuZmFjZXQoRHQpIT10aGlzLnN0eWxlTW9kdWxlcyYmdGhpcy5tb3VudFN0eWxlcygpLGk9dGhpcy51cGRhdGVBdHRycygpLHRoaXMuc2hvd0Fubm91bmNlbWVudHModCksdGhpcy5kb2NWaWV3LnVwZGF0ZVNlbGVjdGlvbihlLHQuc29tZShsPT5sLmlzVXNlckV2ZW50KFwic2VsZWN0LnBvaW50ZXJcIikpKX1maW5hbGx5e3RoaXMudXBkYXRlU3RhdGU9MH1pZihuLnN0YXJ0U3RhdGUuZmFjZXQoVXQpIT1uLnN0YXRlLmZhY2V0KFV0KSYmKHRoaXMudmlld1N0YXRlLm11c3RNZWFzdXJlQ29udGVudD0hMCksKGV8fGl8fG98fHRoaXMudmlld1N0YXRlLm11c3RFbmZvcmNlQ3Vyc29yQXNzb2N8fHRoaXMudmlld1N0YXRlLm11c3RNZWFzdXJlQ29udGVudCkmJnRoaXMucmVxdWVzdE1lYXN1cmUoKSwhbi5lbXB0eSlmb3IobGV0IGwgb2YgdGhpcy5zdGF0ZS5mYWNldChJZSkpbChuKX1zZXRTdGF0ZSh0KXtpZih0aGlzLnVwZGF0ZVN0YXRlIT0wKXRocm93IG5ldyBFcnJvcihcIkNhbGxzIHRvIEVkaXRvclZpZXcuc2V0U3RhdGUgYXJlIG5vdCBhbGxvd2VkIHdoaWxlIGFuIHVwZGF0ZSBpcyBpbiBwcm9ncmVzc1wiKTtpZih0aGlzLmRlc3Ryb3llZCl7dGhpcy52aWV3U3RhdGUuc3RhdGU9dDtyZXR1cm59dGhpcy51cGRhdGVTdGF0ZT0yO2xldCBlPXRoaXMuaGFzRm9jdXM7dHJ5e2ZvcihsZXQgaSBvZiB0aGlzLnBsdWdpbnMpaS5kZXN0cm95KHRoaXMpO3RoaXMudmlld1N0YXRlPW5ldyBnZSh0KSx0aGlzLnBsdWdpbnM9dC5mYWNldChBdCkubWFwKGk9Pm5ldyBCdChpKSksdGhpcy5wbHVnaW5NYXAuY2xlYXIoKTtmb3IobGV0IGkgb2YgdGhpcy5wbHVnaW5zKWkudXBkYXRlKHRoaXMpO3RoaXMuZG9jVmlldz1uZXcgZmUodGhpcyksdGhpcy5pbnB1dFN0YXRlLmVuc3VyZUhhbmRsZXJzKHRoaXMsdGhpcy5wbHVnaW5zKSx0aGlzLm1vdW50U3R5bGVzKCksdGhpcy51cGRhdGVBdHRycygpLHRoaXMuYmlkaUNhY2hlPVtdfWZpbmFsbHl7dGhpcy51cGRhdGVTdGF0ZT0wfWUmJnRoaXMuZm9jdXMoKSx0aGlzLnJlcXVlc3RNZWFzdXJlKCl9dXBkYXRlUGx1Z2lucyh0KXtsZXQgZT10LnN0YXJ0U3RhdGUuZmFjZXQoQXQpLGk9dC5zdGF0ZS5mYWNldChBdCk7aWYoZSE9aSl7bGV0IG49W107Zm9yKGxldCByIG9mIGkpe2xldCBvPWUuaW5kZXhPZihyKTtpZihvPDApbi5wdXNoKG5ldyBCdChyKSk7ZWxzZXtsZXQgbD10aGlzLnBsdWdpbnNbb107bC5tdXN0VXBkYXRlPXQsbi5wdXNoKGwpfX1mb3IobGV0IHIgb2YgdGhpcy5wbHVnaW5zKXIubXVzdFVwZGF0ZSE9dCYmci5kZXN0cm95KHRoaXMpO3RoaXMucGx1Z2lucz1uLHRoaXMucGx1Z2luTWFwLmNsZWFyKCksdGhpcy5pbnB1dFN0YXRlLmVuc3VyZUhhbmRsZXJzKHRoaXMsdGhpcy5wbHVnaW5zKX1lbHNlIGZvcihsZXQgbiBvZiB0aGlzLnBsdWdpbnMpbi5tdXN0VXBkYXRlPXQ7Zm9yKGxldCBuPTA7bjx0aGlzLnBsdWdpbnMubGVuZ3RoO24rKyl0aGlzLnBsdWdpbnNbbl0udXBkYXRlKHRoaXMpfW1lYXN1cmUodD0hMCl7aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuO3RoaXMubWVhc3VyZVNjaGVkdWxlZD4tMSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5tZWFzdXJlU2NoZWR1bGVkKSx0aGlzLm1lYXN1cmVTY2hlZHVsZWQ9MCx0JiZ0aGlzLm9ic2VydmVyLmZvcmNlRmx1c2goKTtsZXQgZT1udWxsLHtzY3JvbGxIZWlnaHQ6aSxzY3JvbGxUb3A6bixjbGllbnRIZWlnaHQ6cn09dGhpcy5zY3JvbGxET00sbz1uPmktci00P2k6bjt0cnl7Zm9yKGxldCBsPTA7O2wrKyl7dGhpcy51cGRhdGVTdGF0ZT0xO2xldCBoPXRoaXMudmlld3BvcnQsYT10aGlzLnZpZXdTdGF0ZS5saW5lQmxvY2tBdEhlaWdodChvKSxjPXRoaXMudmlld1N0YXRlLm1lYXN1cmUodGhpcyk7aWYoIWMmJiF0aGlzLm1lYXN1cmVSZXF1ZXN0cy5sZW5ndGgmJnRoaXMudmlld1N0YXRlLnNjcm9sbFRhcmdldD09bnVsbClicmVhaztpZihsPjUpe2NvbnNvbGUud2Fybih0aGlzLm1lYXN1cmVSZXF1ZXN0cy5sZW5ndGg/XCJNZWFzdXJlIGxvb3AgcmVzdGFydGVkIG1vcmUgdGhhbiA1IHRpbWVzXCI6XCJWaWV3cG9ydCBmYWlsZWQgdG8gc3RhYmlsaXplXCIpO2JyZWFrfWxldCBmPVtdO2MmNHx8KFt0aGlzLm1lYXN1cmVSZXF1ZXN0cyxmXT1bZix0aGlzLm1lYXN1cmVSZXF1ZXN0c10pO2xldCBkPWYubWFwKG09Pnt0cnl7cmV0dXJuIG0ucmVhZCh0aGlzKX1jYXRjaChnKXtyZXR1cm4gbnQodGhpcy5zdGF0ZSxnKSxZaX19KSx1PVN0LmNyZWF0ZSh0aGlzLHRoaXMuc3RhdGUsW10pLHA9ITEsYj0hMTt1LmZsYWdzfD1jLGU/ZS5mbGFnc3w9YzplPXUsdGhpcy51cGRhdGVTdGF0ZT0yLHUuZW1wdHl8fCh0aGlzLnVwZGF0ZVBsdWdpbnModSksdGhpcy5pbnB1dFN0YXRlLnVwZGF0ZSh1KSx0aGlzLnVwZGF0ZUF0dHJzKCkscD10aGlzLmRvY1ZpZXcudXBkYXRlKHUpKTtmb3IobGV0IG09MDttPGYubGVuZ3RoO20rKylpZihkW21dIT1ZaSl0cnl7bGV0IGc9ZlttXTtnLndyaXRlJiZnLndyaXRlKGRbbV0sdGhpcyl9Y2F0Y2goZyl7bnQodGhpcy5zdGF0ZSxnKX1pZih0aGlzLnZpZXdTdGF0ZS5zY3JvbGxUYXJnZXQpdGhpcy5kb2NWaWV3LnNjcm9sbEludG9WaWV3KHRoaXMudmlld1N0YXRlLnNjcm9sbFRhcmdldCksdGhpcy52aWV3U3RhdGUuc2Nyb2xsVGFyZ2V0PW51bGwsYj0hMDtlbHNle2xldCBtPXRoaXMudmlld1N0YXRlLmxpbmVCbG9ja0F0KGEuZnJvbSkudG9wLWEudG9wOyhtPjF8fG08LTEpJiYodGhpcy5zY3JvbGxET00uc2Nyb2xsVG9wKz1tLGI9ITApfWlmKHAmJnRoaXMuZG9jVmlldy51cGRhdGVTZWxlY3Rpb24oITApLHRoaXMudmlld3BvcnQuZnJvbT09aC5mcm9tJiZ0aGlzLnZpZXdwb3J0LnRvPT1oLnRvJiYhYiYmdGhpcy5tZWFzdXJlUmVxdWVzdHMubGVuZ3RoPT0wKWJyZWFrfX1maW5hbGx5e3RoaXMudXBkYXRlU3RhdGU9MCx0aGlzLm1lYXN1cmVTY2hlZHVsZWQ9LTF9aWYoZSYmIWUuZW1wdHkpZm9yKGxldCBsIG9mIHRoaXMuc3RhdGUuZmFjZXQoSWUpKWwoZSl9Z2V0IHRoZW1lQ2xhc3Nlcygpe3JldHVybiBpaStcIiBcIisodGhpcy5zdGF0ZS5mYWNldChlaSk/WHM6WXMpK1wiIFwiK3RoaXMuc3RhdGUuZmFjZXQoVXQpfXVwZGF0ZUF0dHJzKCl7bGV0IHQ9WGkodGhpcyxScyx7Y2xhc3M6XCJjbS1lZGl0b3JcIisodGhpcy5oYXNGb2N1cz9cIiBjbS1mb2N1c2VkIFwiOlwiIFwiKSt0aGlzLnRoZW1lQ2xhc3Nlc30pLGU9e3NwZWxsY2hlY2s6XCJmYWxzZVwiLGF1dG9jb3JyZWN0Olwib2ZmXCIsYXV0b2NhcGl0YWxpemU6XCJvZmZcIix0cmFuc2xhdGU6XCJub1wiLGNvbnRlbnRlZGl0YWJsZTp0aGlzLnN0YXRlLmZhY2V0KENlKT9cInRydWVcIjpcImZhbHNlXCIsY2xhc3M6XCJjbS1jb250ZW50XCIsc3R5bGU6YCR7eS50YWJTaXplfTogJHt0aGlzLnN0YXRlLnRhYlNpemV9YCxyb2xlOlwidGV4dGJveFwiLFwiYXJpYS1tdWx0aWxpbmVcIjpcInRydWVcIn07dGhpcy5zdGF0ZS5yZWFkT25seSYmKGVbXCJhcmlhLXJlYWRvbmx5XCJdPVwidHJ1ZVwiKSxYaSh0aGlzLHdpLGUpO2xldCBpPXRoaXMub2JzZXJ2ZXIuaWdub3JlKCgpPT57bGV0IG49RmUodGhpcy5jb250ZW50RE9NLHRoaXMuY29udGVudEF0dHJzLGUpLHI9RmUodGhpcy5kb20sdGhpcy5lZGl0b3JBdHRycyx0KTtyZXR1cm4gbnx8cn0pO3JldHVybiB0aGlzLmVkaXRvckF0dHJzPXQsdGhpcy5jb250ZW50QXR0cnM9ZSxpfXNob3dBbm5vdW5jZW1lbnRzKHQpe2xldCBlPSEwO2ZvcihsZXQgaSBvZiB0KWZvcihsZXQgbiBvZiBpLmVmZmVjdHMpaWYobi5pcyhNLmFubm91bmNlKSl7ZSYmKHRoaXMuYW5ub3VuY2VET00udGV4dENvbnRlbnQ9XCJcIiksZT0hMTtsZXQgcj10aGlzLmFubm91bmNlRE9NLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO3IudGV4dENvbnRlbnQ9bi52YWx1ZX19bW91bnRTdHlsZXMoKXt0aGlzLnN0eWxlTW9kdWxlcz10aGlzLnN0YXRlLmZhY2V0KER0KSxidC5tb3VudCh0aGlzLnJvb3QsdGhpcy5zdHlsZU1vZHVsZXMuY29uY2F0KG9yKS5yZXZlcnNlKCkpfXJlYWRNZWFzdXJlZCgpe2lmKHRoaXMudXBkYXRlU3RhdGU9PTIpdGhyb3cgbmV3IEVycm9yKFwiUmVhZGluZyB0aGUgZWRpdG9yIGxheW91dCBpc24ndCBhbGxvd2VkIGR1cmluZyBhbiB1cGRhdGVcIik7dGhpcy51cGRhdGVTdGF0ZT09MCYmdGhpcy5tZWFzdXJlU2NoZWR1bGVkPi0xJiZ0aGlzLm1lYXN1cmUoITEpfXJlcXVlc3RNZWFzdXJlKHQpe2lmKHRoaXMubWVhc3VyZVNjaGVkdWxlZDwwJiYodGhpcy5tZWFzdXJlU2NoZWR1bGVkPXRoaXMud2luLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5tZWFzdXJlKCkpKSx0KXtpZih0LmtleSE9bnVsbCl7Zm9yKGxldCBlPTA7ZTx0aGlzLm1lYXN1cmVSZXF1ZXN0cy5sZW5ndGg7ZSsrKWlmKHRoaXMubWVhc3VyZVJlcXVlc3RzW2VdLmtleT09PXQua2V5KXt0aGlzLm1lYXN1cmVSZXF1ZXN0c1tlXT10O3JldHVybn19dGhpcy5tZWFzdXJlUmVxdWVzdHMucHVzaCh0KX19cGx1Z2luKHQpe2xldCBlPXRoaXMucGx1Z2luTWFwLmdldCh0KTtyZXR1cm4oZT09PXZvaWQgMHx8ZSYmZS5zcGVjIT10KSYmdGhpcy5wbHVnaW5NYXAuc2V0KHQsZT10aGlzLnBsdWdpbnMuZmluZChpPT5pLnNwZWM9PXQpfHxudWxsKSxlJiZlLnVwZGF0ZSh0aGlzKS52YWx1ZX1nZXQgZG9jdW1lbnRUb3AoKXtyZXR1cm4gdGhpcy5jb250ZW50RE9NLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCt0aGlzLnZpZXdTdGF0ZS5wYWRkaW5nVG9wfWdldCBkb2N1bWVudFBhZGRpbmcoKXtyZXR1cm57dG9wOnRoaXMudmlld1N0YXRlLnBhZGRpbmdUb3AsYm90dG9tOnRoaXMudmlld1N0YXRlLnBhZGRpbmdCb3R0b219fWVsZW1lbnRBdEhlaWdodCh0KXtyZXR1cm4gdGhpcy5yZWFkTWVhc3VyZWQoKSx0aGlzLnZpZXdTdGF0ZS5lbGVtZW50QXRIZWlnaHQodCl9bGluZUJsb2NrQXRIZWlnaHQodCl7cmV0dXJuIHRoaXMucmVhZE1lYXN1cmVkKCksdGhpcy52aWV3U3RhdGUubGluZUJsb2NrQXRIZWlnaHQodCl9Z2V0IHZpZXdwb3J0TGluZUJsb2Nrcygpe3JldHVybiB0aGlzLnZpZXdTdGF0ZS52aWV3cG9ydExpbmVzfWxpbmVCbG9ja0F0KHQpe3JldHVybiB0aGlzLnZpZXdTdGF0ZS5saW5lQmxvY2tBdCh0KX1nZXQgY29udGVudEhlaWdodCgpe3JldHVybiB0aGlzLnZpZXdTdGF0ZS5jb250ZW50SGVpZ2h0fW1vdmVCeUNoYXIodCxlLGkpe3JldHVybiBBZSh0aGlzLHQsUGkodGhpcyx0LGUsaSkpfW1vdmVCeUdyb3VwKHQsZSl7cmV0dXJuIEFlKHRoaXMsdCxQaSh0aGlzLHQsZSxpPT5Jbih0aGlzLHQuaGVhZCxpKSkpfW1vdmVUb0xpbmVCb3VuZGFyeSh0LGUsaT0hMCl7cmV0dXJuIHpuKHRoaXMsdCxlLGkpfW1vdmVWZXJ0aWNhbGx5KHQsZSxpKXtyZXR1cm4gQWUodGhpcyx0LHFuKHRoaXMsdCxlLGkpKX1kb21BdFBvcyh0KXtyZXR1cm4gdGhpcy5kb2NWaWV3LmRvbUF0UG9zKHQpfXBvc0F0RE9NKHQsZT0wKXtyZXR1cm4gdGhpcy5kb2NWaWV3LnBvc0Zyb21ET00odCxlKX1wb3NBdENvb3Jkcyh0LGU9ITApe3JldHVybiB0aGlzLnJlYWRNZWFzdXJlZCgpLHpzKHRoaXMsdCxlKX1jb29yZHNBdFBvcyh0LGU9MSl7dGhpcy5yZWFkTWVhc3VyZWQoKTtsZXQgaT10aGlzLmRvY1ZpZXcuY29vcmRzQXQodCxlKTtpZighaXx8aS5sZWZ0PT1pLnJpZ2h0KXJldHVybiBpO2xldCBuPXRoaXMuc3RhdGUuZG9jLmxpbmVBdCh0KSxyPXRoaXMuYmlkaVNwYW5zKG4pLG89cltydC5maW5kKHIsdC1uLmZyb20sLTEsZSldO3JldHVybiB4ZShpLG8uZGlyPT1SLkxUUj09ZT4wKX1nZXQgZGVmYXVsdENoYXJhY3RlcldpZHRoKCl7cmV0dXJuIHRoaXMudmlld1N0YXRlLmhlaWdodE9yYWNsZS5jaGFyV2lkdGh9Z2V0IGRlZmF1bHRMaW5lSGVpZ2h0KCl7cmV0dXJuIHRoaXMudmlld1N0YXRlLmhlaWdodE9yYWNsZS5saW5lSGVpZ2h0fWdldCB0ZXh0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMudmlld1N0YXRlLmRlZmF1bHRUZXh0RGlyZWN0aW9ufXRleHREaXJlY3Rpb25BdCh0KXtyZXR1cm4hdGhpcy5zdGF0ZS5mYWNldChPcyl8fHQ8dGhpcy52aWV3cG9ydC5mcm9tfHx0PnRoaXMudmlld3BvcnQudG8/dGhpcy50ZXh0RGlyZWN0aW9uOih0aGlzLnJlYWRNZWFzdXJlZCgpLHRoaXMuZG9jVmlldy50ZXh0RGlyZWN0aW9uQXQodCkpfWdldCBsaW5lV3JhcHBpbmcoKXtyZXR1cm4gdGhpcy52aWV3U3RhdGUuaGVpZ2h0T3JhY2xlLmxpbmVXcmFwcGluZ31iaWRpU3BhbnModCl7aWYodC5sZW5ndGg+dXIpcmV0dXJuIEhzKHQubGVuZ3RoKTtsZXQgZT10aGlzLnRleHREaXJlY3Rpb25BdCh0LmZyb20pO2ZvcihsZXQgbiBvZiB0aGlzLmJpZGlDYWNoZSlpZihuLmZyb209PXQuZnJvbSYmbi5kaXI9PWUpcmV0dXJuIG4ub3JkZXI7bGV0IGk9UHModC50ZXh0LGUpO3JldHVybiB0aGlzLmJpZGlDYWNoZS5wdXNoKG5ldyBDdCh0LmZyb20sdC50byxlLGkpKSxpfWdldCBoYXNGb2N1cygpe3ZhciB0O3JldHVybih0aGlzLmRvbS5vd25lckRvY3VtZW50Lmhhc0ZvY3VzKCl8fHkuc2FmYXJpJiYoKHQ9dGhpcy5pbnB1dFN0YXRlKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQubGFzdENvbnRleHRNZW51KT5EYXRlLm5vdygpLTNlNCkmJnRoaXMucm9vdC5hY3RpdmVFbGVtZW50PT10aGlzLmNvbnRlbnRET019Zm9jdXMoKXt0aGlzLm9ic2VydmVyLmlnbm9yZSgoKT0+e3VzKHRoaXMuY29udGVudERPTSksdGhpcy5kb2NWaWV3LnVwZGF0ZVNlbGVjdGlvbigpfSl9c2V0Um9vdCh0KXt0aGlzLl9yb290IT10JiYodGhpcy5fcm9vdD10LHRoaXMub2JzZXJ2ZXIuc2V0V2luZG93KCh0Lm5vZGVUeXBlPT05P3Q6dC5vd25lckRvY3VtZW50KS5kZWZhdWx0Vmlld3x8d2luZG93KSx0aGlzLm1vdW50U3R5bGVzKCkpfWRlc3Ryb3koKXtmb3IobGV0IHQgb2YgdGhpcy5wbHVnaW5zKXQuZGVzdHJveSh0aGlzKTt0aGlzLnBsdWdpbnM9W10sdGhpcy5pbnB1dFN0YXRlLmRlc3Ryb3koKSx0aGlzLmRvbS5yZW1vdmUoKSx0aGlzLm9ic2VydmVyLmRlc3Ryb3koKSx0aGlzLm1lYXN1cmVTY2hlZHVsZWQ+LTEmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMubWVhc3VyZVNjaGVkdWxlZCksdGhpcy5kZXN0cm95ZWQ9ITB9c3RhdGljIHNjcm9sbEludG9WaWV3KHQsZT17fSl7cmV0dXJuIFRpLm9mKG5ldyB4dCh0eXBlb2YgdD09XCJudW1iZXJcIj94LmN1cnNvcih0KTp0LGUueSxlLngsZS55TWFyZ2luLGUueE1hcmdpbikpfXN0YXRpYyBkb21FdmVudEhhbmRsZXJzKHQpe3JldHVybiBWLmRlZmluZSgoKT0+KHt9KSx7ZXZlbnRIYW5kbGVyczp0fSl9c3RhdGljIHRoZW1lKHQsZSl7bGV0IGk9YnQubmV3TmFtZSgpLG49W1V0Lm9mKGkpLER0Lm9mKHNpKGAuJHtpfWAsdCkpXTtyZXR1cm4gZSYmZS5kYXJrJiZuLnB1c2goZWkub2YoITApKSxufXN0YXRpYyBiYXNlVGhlbWUodCl7cmV0dXJuIG1pLmxvd2VzdChEdC5vZihzaShcIi5cIitpaSx0LFVzKSkpfXN0YXRpYyBmaW5kRnJvbURPTSh0KXt2YXIgZTtsZXQgaT10LnF1ZXJ5U2VsZWN0b3IoXCIuY20tY29udGVudFwiKSxuPWkmJkEuZ2V0KGkpfHxBLmdldCh0KTtyZXR1cm4oKGU9bj8ucm9vdFZpZXcpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS52aWV3KXx8bnVsbH19O00uc3R5bGVNb2R1bGU9RHQ7TS5pbnB1dEhhbmRsZXI9VHM7TS5wZXJMaW5lVGV4dERpcmVjdGlvbj1PcztNLmV4Y2VwdGlvblNpbms9RHM7TS51cGRhdGVMaXN0ZW5lcj1JZTtNLmVkaXRhYmxlPUNlO00ubW91c2VTZWxlY3Rpb25TdHlsZT1BcztNLmRyYWdNb3Zlc1NlbGVjdGlvbj1rcztNLmNsaWNrQWRkc1NlbGVjdGlvblJhbmdlPU1zO00uZGVjb3JhdGlvbnM9enQ7TS5hdG9taWNSYW5nZXM9THM7TS5zY3JvbGxNYXJnaW5zPUVzO00uZGFya1RoZW1lPWVpO00uY29udGVudEF0dHJpYnV0ZXM9d2k7TS5lZGl0b3JBdHRyaWJ1dGVzPVJzO00ubGluZVdyYXBwaW5nPU0uY29udGVudEF0dHJpYnV0ZXMub2Yoe2NsYXNzOlwiY20tbGluZVdyYXBwaW5nXCJ9KTtNLmFubm91bmNlPWp0LmRlZmluZSgpO3ZhciB1cj00MDk2LFlpPXt9LEN0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLG4pe3RoaXMuZnJvbT10LHRoaXMudG89ZSx0aGlzLmRpcj1pLHRoaXMub3JkZXI9bn1zdGF0aWMgdXBkYXRlKHQsZSl7aWYoZS5lbXB0eSlyZXR1cm4gdDtsZXQgaT1bXSxuPXQubGVuZ3RoP3RbdC5sZW5ndGgtMV0uZGlyOlIuTFRSO2ZvcihsZXQgcj1NYXRoLm1heCgwLHQubGVuZ3RoLTEwKTtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXTtvLmRpcj09biYmIWUudG91Y2hlc1JhbmdlKG8uZnJvbSxvLnRvKSYmaS5wdXNoKG5ldyBDdChlLm1hcFBvcyhvLmZyb20sMSksZS5tYXBQb3Moby50bywtMSksby5kaXIsby5vcmRlcikpfXJldHVybiBpfX07ZnVuY3Rpb24gWGkocyx0LGUpe2ZvcihsZXQgaT1zLnN0YXRlLmZhY2V0KHQpLG49aS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IHI9aVtuXSxvPXR5cGVvZiByPT1cImZ1bmN0aW9uXCI/cihzKTpyO28mJldlKG8sZSl9cmV0dXJuIGV9dmFyIHByPXkubWFjP1wibWFjXCI6eS53aW5kb3dzP1wid2luXCI6eS5saW51eD9cImxpbnV4XCI6XCJrZXlcIjtmdW5jdGlvbiBtcihzLHQpe2xldCBlPXMuc3BsaXQoLy0oPyEkKS8pLGk9ZVtlLmxlbmd0aC0xXTtpPT1cIlNwYWNlXCImJihpPVwiIFwiKTtsZXQgbixyLG8sbDtmb3IobGV0IGg9MDtoPGUubGVuZ3RoLTE7KytoKXtsZXQgYT1lW2hdO2lmKC9eKGNtZHxtZXRhfG0pJC9pLnRlc3QoYSkpbD0hMDtlbHNlIGlmKC9eYShsdCk/JC9pLnRlc3QoYSkpbj0hMDtlbHNlIGlmKC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KGEpKXI9ITA7ZWxzZSBpZigvXnMoaGlmdCk/JC9pLnRlc3QoYSkpbz0hMDtlbHNlIGlmKC9ebW9kJC9pLnRlc3QoYSkpdD09XCJtYWNcIj9sPSEwOnI9ITA7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbW9kaWZpZXIgbmFtZTogXCIrYSl9cmV0dXJuIG4mJihpPVwiQWx0LVwiK2kpLHImJihpPVwiQ3RybC1cIitpKSxsJiYoaT1cIk1ldGEtXCIraSksbyYmKGk9XCJTaGlmdC1cIitpKSxpfWZ1bmN0aW9uIEp0KHMsdCxlKXtyZXR1cm4gdC5hbHRLZXkmJihzPVwiQWx0LVwiK3MpLHQuY3RybEtleSYmKHM9XCJDdHJsLVwiK3MpLHQubWV0YUtleSYmKHM9XCJNZXRhLVwiK3MpLGUhPT0hMSYmdC5zaGlmdEtleSYmKHM9XCJTaGlmdC1cIitzKSxzfXZhciBncj1taS5kZWZhdWx0KE0uZG9tRXZlbnRIYW5kbGVycyh7a2V5ZG93bihzLHQpe3JldHVybiBacyhKcyh0LnN0YXRlKSxzLHQsXCJlZGl0b3JcIil9fSkpLGJyPUMuZGVmaW5lKHtlbmFibGVzOmdyfSksVWk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gSnMocyl7bGV0IHQ9cy5mYWNldChiciksZT1VaS5nZXQodCk7cmV0dXJuIGV8fFVpLnNldCh0LGU9d3IodC5yZWR1Y2UoKGksbik9PmkuY29uY2F0KG4pLFtdKSkpLGV9ZnVuY3Rpb24gZW8ocyx0LGUpe3JldHVybiBacyhKcyhzLnN0YXRlKSx0LHMsZSl9dmFyIGl0PW51bGwseXI9NGUzO2Z1bmN0aW9uIHdyKHMsdD1wcil7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSxpPU9iamVjdC5jcmVhdGUobnVsbCksbj0obyxsKT0+e2xldCBoPWlbb107aWYoaD09bnVsbClpW29dPWw7ZWxzZSBpZihoIT1sKXRocm93IG5ldyBFcnJvcihcIktleSBiaW5kaW5nIFwiK28rXCIgaXMgdXNlZCBib3RoIGFzIGEgcmVndWxhciBiaW5kaW5nIGFuZCBhcyBhIG11bHRpLXN0cm9rZSBwcmVmaXhcIil9LHI9KG8sbCxoLGEpPT57dmFyIGMsZjtsZXQgZD1lW29dfHwoZVtvXT1PYmplY3QuY3JlYXRlKG51bGwpKSx1PWwuc3BsaXQoLyAoPyEkKS8pLm1hcChtPT5tcihtLHQpKTtmb3IobGV0IG09MTttPHUubGVuZ3RoO20rKyl7bGV0IGc9dS5zbGljZSgwLG0pLmpvaW4oXCIgXCIpO24oZywhMCksZFtnXXx8KGRbZ109e3ByZXZlbnREZWZhdWx0OiEwLHJ1bjpbUz0+e2xldCB3PWl0PXt2aWV3OlMscHJlZml4Omcsc2NvcGU6b307cmV0dXJuIHNldFRpbWVvdXQoKCk9PntpdD09dyYmKGl0PW51bGwpfSx5ciksITB9XX0pfWxldCBwPXUuam9pbihcIiBcIik7bihwLCExKTtsZXQgYj1kW3BdfHwoZFtwXT17cHJldmVudERlZmF1bHQ6ITEscnVuOigoZj0oYz1kLl9hbnkpPT09bnVsbHx8Yz09PXZvaWQgMD92b2lkIDA6Yy5ydW4pPT09bnVsbHx8Zj09PXZvaWQgMD92b2lkIDA6Zi5zbGljZSgpKXx8W119KTtoJiZiLnJ1bi5wdXNoKGgpLGEmJihiLnByZXZlbnREZWZhdWx0PSEwKX07Zm9yKGxldCBvIG9mIHMpe2xldCBsPW8uc2NvcGU/by5zY29wZS5zcGxpdChcIiBcIik6W1wiZWRpdG9yXCJdO2lmKG8uYW55KWZvcihsZXQgYSBvZiBsKXtsZXQgYz1lW2FdfHwoZVthXT1PYmplY3QuY3JlYXRlKG51bGwpKTtjLl9hbnl8fChjLl9hbnk9e3ByZXZlbnREZWZhdWx0OiExLHJ1bjpbXX0pO2ZvcihsZXQgZiBpbiBjKWNbZl0ucnVuLnB1c2goby5hbnkpfWxldCBoPW9bdF18fG8ua2V5O2lmKCEhaClmb3IobGV0IGEgb2YgbClyKGEsaCxvLnJ1bixvLnByZXZlbnREZWZhdWx0KSxvLnNoaWZ0JiZyKGEsXCJTaGlmdC1cIitoLG8uc2hpZnQsby5wcmV2ZW50RGVmYXVsdCl9cmV0dXJuIGV9ZnVuY3Rpb24gWnMocyx0LGUsaSl7bGV0IG49dW4odCkscj1hcyhuLDApLG89Zm4ocik9PW4ubGVuZ3RoJiZuIT1cIiBcIixsPVwiXCIsaD0hMTtpdCYmaXQudmlldz09ZSYmaXQuc2NvcGU9PWkmJihsPWl0LnByZWZpeCtcIiBcIiwoaD1xcy5pbmRleE9mKHQua2V5Q29kZSk8MCkmJihpdD1udWxsKSk7bGV0IGE9bmV3IFNldCxjPXA9PntpZihwKXtmb3IobGV0IGIgb2YgcC5ydW4paWYoIWEuaGFzKGIpJiYoYS5hZGQoYiksYihlLHQpKSlyZXR1cm4hMDtwLnByZXZlbnREZWZhdWx0JiYoaD0hMCl9cmV0dXJuITF9LGY9c1tpXSxkLHU7aWYoZil7aWYoYyhmW2wrSnQobix0LCFvKV0pKXJldHVybiEwO2lmKG8mJih0LnNoaWZ0S2V5fHx0LmFsdEtleXx8dC5tZXRhS2V5fHxyPjEyNykmJihkPXBuW3Qua2V5Q29kZV0pJiZkIT1uKXtpZihjKGZbbCtKdChkLHQsITApXSkpcmV0dXJuITA7aWYodC5zaGlmdEtleSYmKHU9bW5bdC5rZXlDb2RlXSkhPW4mJnUhPWQmJmMoZltsK0p0KHUsdCwhMSldKSlyZXR1cm4hMH1lbHNlIGlmKG8mJnQuc2hpZnRLZXkmJmMoZltsK0p0KG4sdCwhMCldKSlyZXR1cm4hMDtpZihjKGYuX2FueSkpcmV0dXJuITB9cmV0dXJuIGh9dmFyIFFzPSF5LmlvcyxPdD1DLmRlZmluZSh7Y29tYmluZShzKXtyZXR1cm4gZ2kocyx7Y3Vyc29yQmxpbmtSYXRlOjEyMDAsZHJhd1JhbmdlQ3Vyc29yOiEwfSx7Y3Vyc29yQmxpbmtSYXRlOih0LGUpPT5NYXRoLm1pbih0LGUpLGRyYXdSYW5nZUN1cnNvcjoodCxlKT0+dHx8ZX0pfX0pO2Z1bmN0aW9uIGlvKHM9e30pe3JldHVybltPdC5vZihzKSx2cix4cl19dmFyIGJlPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLG4scil7dGhpcy5sZWZ0PXQsdGhpcy50b3A9ZSx0aGlzLndpZHRoPWksdGhpcy5oZWlnaHQ9bix0aGlzLmNsYXNzTmFtZT1yfWRyYXcoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiB0LmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZSx0aGlzLmFkanVzdCh0KSx0fWFkanVzdCh0KXt0LnN0eWxlLmxlZnQ9dGhpcy5sZWZ0K1wicHhcIix0LnN0eWxlLnRvcD10aGlzLnRvcCtcInB4XCIsdGhpcy53aWR0aD49MCYmKHQuc3R5bGUud2lkdGg9dGhpcy53aWR0aCtcInB4XCIpLHQuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0K1wicHhcIn1lcSh0KXtyZXR1cm4gdGhpcy5sZWZ0PT10LmxlZnQmJnRoaXMudG9wPT10LnRvcCYmdGhpcy53aWR0aD09dC53aWR0aCYmdGhpcy5oZWlnaHQ9PXQuaGVpZ2h0JiZ0aGlzLmNsYXNzTmFtZT09dC5jbGFzc05hbWV9fSx2cj1WLmZyb21DbGFzcyhjbGFzc3tjb25zdHJ1Y3RvcihzKXt0aGlzLnZpZXc9cyx0aGlzLnJhbmdlUGllY2VzPVtdLHRoaXMuY3Vyc29ycz1bXSx0aGlzLm1lYXN1cmVSZXE9e3JlYWQ6dGhpcy5yZWFkUG9zLmJpbmQodGhpcyksd3JpdGU6dGhpcy5kcmF3U2VsLmJpbmQodGhpcyl9LHRoaXMuc2VsZWN0aW9uTGF5ZXI9cy5zY3JvbGxET00uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSksdGhpcy5zZWxlY3Rpb25MYXllci5jbGFzc05hbWU9XCJjbS1zZWxlY3Rpb25MYXllclwiLHRoaXMuc2VsZWN0aW9uTGF5ZXIuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIiksdGhpcy5jdXJzb3JMYXllcj1zLnNjcm9sbERPTS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSx0aGlzLmN1cnNvckxheWVyLmNsYXNzTmFtZT1cImNtLWN1cnNvckxheWVyXCIsdGhpcy5jdXJzb3JMYXllci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSxzLnJlcXVlc3RNZWFzdXJlKHRoaXMubWVhc3VyZVJlcSksdGhpcy5zZXRCbGlua1JhdGUoKX1zZXRCbGlua1JhdGUoKXt0aGlzLmN1cnNvckxheWVyLnN0eWxlLmFuaW1hdGlvbkR1cmF0aW9uPXRoaXMudmlldy5zdGF0ZS5mYWNldChPdCkuY3Vyc29yQmxpbmtSYXRlK1wibXNcIn11cGRhdGUocyl7bGV0IHQ9cy5zdGFydFN0YXRlLmZhY2V0KE90KSE9cy5zdGF0ZS5mYWNldChPdCk7KHR8fHMuc2VsZWN0aW9uU2V0fHxzLmdlb21ldHJ5Q2hhbmdlZHx8cy52aWV3cG9ydENoYW5nZWQpJiZ0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5tZWFzdXJlUmVxKSxzLnRyYW5zYWN0aW9ucy5zb21lKGU9PmUuc2Nyb2xsSW50b1ZpZXcpJiYodGhpcy5jdXJzb3JMYXllci5zdHlsZS5hbmltYXRpb25OYW1lPXRoaXMuY3Vyc29yTGF5ZXIuc3R5bGUuYW5pbWF0aW9uTmFtZT09XCJjbS1ibGlua1wiP1wiY20tYmxpbmsyXCI6XCJjbS1ibGlua1wiKSx0JiZ0aGlzLnNldEJsaW5rUmF0ZSgpfXJlYWRQb3MoKXtsZXR7c3RhdGU6c309dGhpcy52aWV3LHQ9cy5mYWNldChPdCksZT1zLnNlbGVjdGlvbi5yYW5nZXMubWFwKG49Pm4uZW1wdHk/W106U3IodGhpcy52aWV3LG4pKS5yZWR1Y2UoKG4scik9Pm4uY29uY2F0KHIpKSxpPVtdO2ZvcihsZXQgbiBvZiBzLnNlbGVjdGlvbi5yYW5nZXMpe2xldCByPW49PXMuc2VsZWN0aW9uLm1haW47aWYobi5lbXB0eT8hcnx8UXM6dC5kcmF3UmFuZ2VDdXJzb3Ipe2xldCBvPUNyKHRoaXMudmlldyxuLHIpO28mJmkucHVzaChvKX19cmV0dXJue3JhbmdlUGllY2VzOmUsY3Vyc29yczppfX1kcmF3U2VsKHtyYW5nZVBpZWNlczpzLGN1cnNvcnM6dH0pe2lmKHMubGVuZ3RoIT10aGlzLnJhbmdlUGllY2VzLmxlbmd0aHx8cy5zb21lKChlLGkpPT4hZS5lcSh0aGlzLnJhbmdlUGllY2VzW2ldKSkpe3RoaXMuc2VsZWN0aW9uTGF5ZXIudGV4dENvbnRlbnQ9XCJcIjtmb3IobGV0IGUgb2Ygcyl0aGlzLnNlbGVjdGlvbkxheWVyLmFwcGVuZENoaWxkKGUuZHJhdygpKTt0aGlzLnJhbmdlUGllY2VzPXN9aWYodC5sZW5ndGghPXRoaXMuY3Vyc29ycy5sZW5ndGh8fHQuc29tZSgoZSxpKT0+IWUuZXEodGhpcy5jdXJzb3JzW2ldKSkpe2xldCBlPXRoaXMuY3Vyc29yTGF5ZXIuY2hpbGRyZW47aWYoZS5sZW5ndGghPT10Lmxlbmd0aCl7dGhpcy5jdXJzb3JMYXllci50ZXh0Q29udGVudD1cIlwiO2ZvcihsZXQgaSBvZiB0KXRoaXMuY3Vyc29yTGF5ZXIuYXBwZW5kQ2hpbGQoaS5kcmF3KCkpfWVsc2UgdC5mb3JFYWNoKChpLG4pPT5pLmFkanVzdChlW25dKSk7dGhpcy5jdXJzb3JzPXR9fWRlc3Ryb3koKXt0aGlzLnNlbGVjdGlvbkxheWVyLnJlbW92ZSgpLHRoaXMuY3Vyc29yTGF5ZXIucmVtb3ZlKCl9fSksdG49e1wiLmNtLWxpbmVcIjp7XCImIDo6c2VsZWN0aW9uXCI6e2JhY2tncm91bmRDb2xvcjpcInRyYW5zcGFyZW50ICFpbXBvcnRhbnRcIn0sXCImOjpzZWxlY3Rpb25cIjp7YmFja2dyb3VuZENvbG9yOlwidHJhbnNwYXJlbnQgIWltcG9ydGFudFwifX19O1FzJiYodG5bXCIuY20tbGluZVwiXS5jYXJldENvbG9yPVwidHJhbnNwYXJlbnQgIWltcG9ydGFudFwiKTt2YXIgeHI9bWkuaGlnaGVzdChNLnRoZW1lKHRuKSk7ZnVuY3Rpb24gZW4ocyl7bGV0IHQ9cy5zY3JvbGxET00uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue2xlZnQ6KHMudGV4dERpcmVjdGlvbj09Ui5MVFI/dC5sZWZ0OnQucmlnaHQtcy5zY3JvbGxET00uY2xpZW50V2lkdGgpLXMuc2Nyb2xsRE9NLnNjcm9sbExlZnQsdG9wOnQudG9wLXMuc2Nyb2xsRE9NLnNjcm9sbFRvcH19ZnVuY3Rpb24gSmkocyx0LGUpe2xldCBpPXguY3Vyc29yKHQpO3JldHVybntmcm9tOk1hdGgubWF4KGUuZnJvbSxzLm1vdmVUb0xpbmVCb3VuZGFyeShpLCExLCEwKS5mcm9tKSx0bzpNYXRoLm1pbihlLnRvLHMubW92ZVRvTGluZUJvdW5kYXJ5KGksITAsITApLmZyb20pLHR5cGU6VC5UZXh0fX1mdW5jdGlvbiBaaShzLHQpe2xldCBlPXMubGluZUJsb2NrQXQodCk7aWYoQXJyYXkuaXNBcnJheShlLnR5cGUpKXtmb3IobGV0IGkgb2YgZS50eXBlKWlmKGkudG8+dHx8aS50bz09dCYmKGkudG89PWUudG98fGkudHlwZT09VC5UZXh0KSlyZXR1cm4gaX1yZXR1cm4gZX1mdW5jdGlvbiBTcihzLHQpe2lmKHQudG88PXMudmlld3BvcnQuZnJvbXx8dC5mcm9tPj1zLnZpZXdwb3J0LnRvKXJldHVybltdO2xldCBlPU1hdGgubWF4KHQuZnJvbSxzLnZpZXdwb3J0LmZyb20pLGk9TWF0aC5taW4odC50byxzLnZpZXdwb3J0LnRvKSxuPXMudGV4dERpcmVjdGlvbj09Ui5MVFIscj1zLmNvbnRlbnRET00sbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9ZW4ocyksaD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyLmZpcnN0Q2hpbGQpLGE9by5sZWZ0K3BhcnNlSW50KGgucGFkZGluZ0xlZnQpK01hdGgubWluKDAscGFyc2VJbnQoaC50ZXh0SW5kZW50KSksYz1vLnJpZ2h0LXBhcnNlSW50KGgucGFkZGluZ1JpZ2h0KSxmPVppKHMsZSksZD1aaShzLGkpLHU9Zi50eXBlPT1ULlRleHQ/ZjpudWxsLHA9ZC50eXBlPT1ULlRleHQ/ZDpudWxsO2lmKHMubGluZVdyYXBwaW5nJiYodSYmKHU9SmkocyxlLHUpKSxwJiYocD1KaShzLGkscCkpKSx1JiZwJiZ1LmZyb209PXAuZnJvbSlyZXR1cm4gbShnKHQuZnJvbSx0LnRvLHUpKTt7bGV0IHc9dT9nKHQuZnJvbSxudWxsLHUpOlMoZiwhMSksdj1wP2cobnVsbCx0LnRvLHApOlMoZCwhMCksTD1bXTtyZXR1cm4odXx8ZikudG88KHB8fGQpLmZyb20tMT9MLnB1c2goYihhLHcuYm90dG9tLGMsdi50b3ApKTp3LmJvdHRvbTx2LnRvcCYmcy5lbGVtZW50QXRIZWlnaHQoKHcuYm90dG9tK3YudG9wKS8yKS50eXBlPT1ULlRleHQmJih3LmJvdHRvbT12LnRvcD0ody5ib3R0b20rdi50b3ApLzIpLG0odykuY29uY2F0KEwpLmNvbmNhdChtKHYpKX1mdW5jdGlvbiBiKHcsdixMLEope3JldHVybiBuZXcgYmUody1sLmxlZnQsdi1sLnRvcC0uMDEsTC13LEotdisuMDEsXCJjbS1zZWxlY3Rpb25CYWNrZ3JvdW5kXCIpfWZ1bmN0aW9uIG0oe3RvcDp3LGJvdHRvbTp2LGhvcml6b250YWw6TH0pe2xldCBKPVtdO2ZvcihsZXQgWj0wO1o8TC5sZW5ndGg7Wis9MilKLnB1c2goYihMW1pdLHcsTFtaKzFdLHYpKTtyZXR1cm4gSn1mdW5jdGlvbiBnKHcsdixMKXtsZXQgSj0xZTksWj0tMWU5LF90PVtdO2Z1bmN0aW9uIHhpKGh0LFEsZnQsYXQsTXQpe2xldCB0dD1zLmNvb3Jkc0F0UG9zKGh0LGh0PT1MLnRvPy0yOjIpLGV0PXMuY29vcmRzQXRQb3MoZnQsZnQ9PUwuZnJvbT8yOi0yKTtKPU1hdGgubWluKHR0LnRvcCxldC50b3AsSiksWj1NYXRoLm1heCh0dC5ib3R0b20sZXQuYm90dG9tLFopLE10PT1SLkxUUj9fdC5wdXNoKG4mJlE/YTp0dC5sZWZ0LG4mJmF0P2M6ZXQucmlnaHQpOl90LnB1c2goIW4mJmF0P2E6ZXQubGVmdCwhbiYmUT9jOnR0LnJpZ2h0KX1sZXQgJHQ9dz8/TC5mcm9tLEd0PXY/P0wudG87Zm9yKGxldCBodCBvZiBzLnZpc2libGVSYW5nZXMpaWYoaHQudG8+JHQmJmh0LmZyb208R3QpZm9yKGxldCBRPU1hdGgubWF4KGh0LmZyb20sJHQpLGZ0PU1hdGgubWluKGh0LnRvLEd0KTs7KXtsZXQgYXQ9cy5zdGF0ZS5kb2MubGluZUF0KFEpO2ZvcihsZXQgTXQgb2Ygcy5iaWRpU3BhbnMoYXQpKXtsZXQgdHQ9TXQuZnJvbSthdC5mcm9tLGV0PU10LnRvK2F0LmZyb207aWYodHQ+PWZ0KWJyZWFrO2V0PlEmJnhpKE1hdGgubWF4KHR0LFEpLHc9PW51bGwmJnR0PD0kdCxNYXRoLm1pbihldCxmdCksdj09bnVsbCYmZXQ+PUd0LE10LmRpcil9aWYoUT1hdC50bysxLFE+PWZ0KWJyZWFrfXJldHVybiBfdC5sZW5ndGg9PTAmJnhpKCR0LHc9PW51bGwsR3Qsdj09bnVsbCxzLnRleHREaXJlY3Rpb24pLHt0b3A6Sixib3R0b206Wixob3Jpem9udGFsOl90fX1mdW5jdGlvbiBTKHcsdil7bGV0IEw9by50b3ArKHY/dy50b3A6dy5ib3R0b20pO3JldHVybnt0b3A6TCxib3R0b206TCxob3Jpem9udGFsOltdfX19ZnVuY3Rpb24gQ3Iocyx0LGUpe2xldCBpPXMuY29vcmRzQXRQb3ModC5oZWFkLHQuYXNzb2N8fDEpO2lmKCFpKXJldHVybiBudWxsO2xldCBuPWVuKHMpO3JldHVybiBuZXcgYmUoaS5sZWZ0LW4ubGVmdCxpLnRvcC1uLnRvcCwtMSxpLmJvdHRvbS1pLnRvcCxlP1wiY20tY3Vyc29yIGNtLWN1cnNvci1wcmltYXJ5XCI6XCJjbS1jdXJzb3IgY20tY3Vyc29yLXNlY29uZGFyeVwiKX12YXIgc249anQuZGVmaW5lKHttYXAocyx0KXtyZXR1cm4gcz09bnVsbD9udWxsOnQubWFwUG9zKHMpfX0pLFJ0PWNzLmRlZmluZSh7Y3JlYXRlKCl7cmV0dXJuIG51bGx9LHVwZGF0ZShzLHQpe3JldHVybiBzIT1udWxsJiYocz10LmNoYW5nZXMubWFwUG9zKHMpKSx0LmVmZmVjdHMucmVkdWNlKChlLGkpPT5pLmlzKHNuKT9pLnZhbHVlOmUscyl9fSksTXI9Vi5mcm9tQ2xhc3MoY2xhc3N7Y29uc3RydWN0b3Iocyl7dGhpcy52aWV3PXMsdGhpcy5jdXJzb3I9bnVsbCx0aGlzLm1lYXN1cmVSZXE9e3JlYWQ6dGhpcy5yZWFkUG9zLmJpbmQodGhpcyksd3JpdGU6dGhpcy5kcmF3Q3Vyc29yLmJpbmQodGhpcyl9fXVwZGF0ZShzKXt2YXIgdDtsZXQgZT1zLnN0YXRlLmZpZWxkKFJ0KTtlPT1udWxsP3RoaXMuY3Vyc29yIT1udWxsJiYoKHQ9dGhpcy5jdXJzb3IpPT09bnVsbHx8dD09PXZvaWQgMHx8dC5yZW1vdmUoKSx0aGlzLmN1cnNvcj1udWxsKToodGhpcy5jdXJzb3J8fCh0aGlzLmN1cnNvcj10aGlzLnZpZXcuc2Nyb2xsRE9NLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLHRoaXMuY3Vyc29yLmNsYXNzTmFtZT1cImNtLWRyb3BDdXJzb3JcIiksKHMuc3RhcnRTdGF0ZS5maWVsZChSdCkhPWV8fHMuZG9jQ2hhbmdlZHx8cy5nZW9tZXRyeUNoYW5nZWQpJiZ0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5tZWFzdXJlUmVxKSl9cmVhZFBvcygpe2xldCBzPXRoaXMudmlldy5zdGF0ZS5maWVsZChSdCksdD1zIT1udWxsJiZ0aGlzLnZpZXcuY29vcmRzQXRQb3Mocyk7aWYoIXQpcmV0dXJuIG51bGw7bGV0IGU9dGhpcy52aWV3LnNjcm9sbERPTS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57bGVmdDp0LmxlZnQtZS5sZWZ0K3RoaXMudmlldy5zY3JvbGxET00uc2Nyb2xsTGVmdCx0b3A6dC50b3AtZS50b3ArdGhpcy52aWV3LnNjcm9sbERPTS5zY3JvbGxUb3AsaGVpZ2h0OnQuYm90dG9tLXQudG9wfX1kcmF3Q3Vyc29yKHMpe3RoaXMuY3Vyc29yJiYocz8odGhpcy5jdXJzb3Iuc3R5bGUubGVmdD1zLmxlZnQrXCJweFwiLHRoaXMuY3Vyc29yLnN0eWxlLnRvcD1zLnRvcCtcInB4XCIsdGhpcy5jdXJzb3Iuc3R5bGUuaGVpZ2h0PXMuaGVpZ2h0K1wicHhcIik6dGhpcy5jdXJzb3Iuc3R5bGUubGVmdD1cIi0xMDAwMDBweFwiKX1kZXN0cm95KCl7dGhpcy5jdXJzb3ImJnRoaXMuY3Vyc29yLnJlbW92ZSgpfXNldERyb3BQb3Mocyl7dGhpcy52aWV3LnN0YXRlLmZpZWxkKFJ0KSE9cyYmdGhpcy52aWV3LmRpc3BhdGNoKHtlZmZlY3RzOnNuLm9mKHMpfSl9fSx7ZXZlbnRIYW5kbGVyczp7ZHJhZ292ZXIocyl7dGhpcy5zZXREcm9wUG9zKHRoaXMudmlldy5wb3NBdENvb3Jkcyh7eDpzLmNsaWVudFgseTpzLmNsaWVudFl9KSl9LGRyYWdsZWF2ZShzKXsocy50YXJnZXQ9PXRoaXMudmlldy5jb250ZW50RE9NfHwhdGhpcy52aWV3LmNvbnRlbnRET00uY29udGFpbnMocy5yZWxhdGVkVGFyZ2V0KSkmJnRoaXMuc2V0RHJvcFBvcyhudWxsKX0sZHJhZ2VuZCgpe3RoaXMuc2V0RHJvcFBvcyhudWxsKX0sZHJvcCgpe3RoaXMuc2V0RHJvcFBvcyhudWxsKX19fSk7ZnVuY3Rpb24gc28oKXtyZXR1cm5bUnQsTXJdfWZ1bmN0aW9uIFFpKHMsdCxlLGksbil7dC5sYXN0SW5kZXg9MDtmb3IobGV0IHI9cy5pdGVyUmFuZ2UoZSxpKSxvPWUsbDshci5uZXh0KCkuZG9uZTtvKz1yLnZhbHVlLmxlbmd0aClpZighci5saW5lQnJlYWspZm9yKDtsPXQuZXhlYyhyLnZhbHVlKTspbihvK2wuaW5kZXgsbCl9ZnVuY3Rpb24ga3Iocyx0KXtsZXQgZT1zLnZpc2libGVSYW5nZXM7aWYoZS5sZW5ndGg9PTEmJmVbMF0uZnJvbT09cy52aWV3cG9ydC5mcm9tJiZlWzBdLnRvPT1zLnZpZXdwb3J0LnRvKXJldHVybiBlO2xldCBpPVtdO2ZvcihsZXR7ZnJvbTpuLHRvOnJ9b2YgZSluPU1hdGgubWF4KHMuc3RhdGUuZG9jLmxpbmVBdChuKS5mcm9tLG4tdCkscj1NYXRoLm1pbihzLnN0YXRlLmRvYy5saW5lQXQocikudG8scit0KSxpLmxlbmd0aCYmaVtpLmxlbmd0aC0xXS50bz49bj9pW2kubGVuZ3RoLTFdLnRvPXI6aS5wdXNoKHtmcm9tOm4sdG86cn0pO3JldHVybiBpfXZhciByaT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtsZXR7cmVnZXhwOmUsZGVjb3JhdGlvbjppLGRlY29yYXRlOm4sYm91bmRhcnk6cixtYXhMZW5ndGg6bz0xZTN9PXQ7aWYoIWUuZ2xvYmFsKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBnaXZlbiB0byBNYXRjaERlY29yYXRvciBzaG91bGQgaGF2ZSBpdHMgJ2cnIGZsYWcgc2V0XCIpO2lmKHRoaXMucmVnZXhwPWUsbil0aGlzLmFkZE1hdGNoPShsLGgsYSxjKT0+bihjLGEsYStsWzBdLmxlbmd0aCxsLGgpO2Vsc2UgaWYodHlwZW9mIGk9PVwiZnVuY3Rpb25cIil0aGlzLmFkZE1hdGNoPShsLGgsYSxjKT0+e2xldCBmPWkobCxoLGEpO2YmJmMoYSxhK2xbMF0ubGVuZ3RoLGYpfTtlbHNlIGlmKGkpdGhpcy5hZGRNYXRjaD0obCxoLGEsYyk9PmMoYSxhK2xbMF0ubGVuZ3RoLGkpO2Vsc2UgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJFaXRoZXIgJ2RlY29yYXRlJyBvciAnZGVjb3JhdGlvbicgc2hvdWxkIGJlIHByb3ZpZGVkIHRvIE1hdGNoRGVjb3JhdG9yXCIpO3RoaXMuYm91bmRhcnk9cix0aGlzLm1heExlbmd0aD1vfWNyZWF0ZURlY28odCl7bGV0IGU9bmV3IGRuLGk9ZS5hZGQuYmluZChlKTtmb3IobGV0e2Zyb206bix0bzpyfW9mIGtyKHQsdGhpcy5tYXhMZW5ndGgpKVFpKHQuc3RhdGUuZG9jLHRoaXMucmVnZXhwLG4sciwobyxsKT0+dGhpcy5hZGRNYXRjaChsLHQsbyxpKSk7cmV0dXJuIGUuZmluaXNoKCl9dXBkYXRlRGVjbyh0LGUpe2xldCBpPTFlOSxuPS0xO3JldHVybiB0LmRvY0NoYW5nZWQmJnQuY2hhbmdlcy5pdGVyQ2hhbmdlcygocixvLGwsaCk9PntoPnQudmlldy52aWV3cG9ydC5mcm9tJiZsPHQudmlldy52aWV3cG9ydC50byYmKGk9TWF0aC5taW4obCxpKSxuPU1hdGgubWF4KGgsbikpfSksdC52aWV3cG9ydENoYW5nZWR8fG4taT4xZTM/dGhpcy5jcmVhdGVEZWNvKHQudmlldyk6bj4tMT90aGlzLnVwZGF0ZVJhbmdlKHQudmlldyxlLm1hcCh0LmNoYW5nZXMpLGksbik6ZX11cGRhdGVSYW5nZSh0LGUsaSxuKXtmb3IobGV0IHIgb2YgdC52aXNpYmxlUmFuZ2VzKXtsZXQgbz1NYXRoLm1heChyLmZyb20saSksbD1NYXRoLm1pbihyLnRvLG4pO2lmKGw+byl7bGV0IGg9dC5zdGF0ZS5kb2MubGluZUF0KG8pLGE9aC50bzxsP3Quc3RhdGUuZG9jLmxpbmVBdChsKTpoLGM9TWF0aC5tYXgoci5mcm9tLGguZnJvbSksZj1NYXRoLm1pbihyLnRvLGEudG8pO2lmKHRoaXMuYm91bmRhcnkpe2Zvcig7bz5oLmZyb207by0tKWlmKHRoaXMuYm91bmRhcnkudGVzdChoLnRleHRbby0xLWguZnJvbV0pKXtjPW87YnJlYWt9Zm9yKDtsPGEudG87bCsrKWlmKHRoaXMuYm91bmRhcnkudGVzdChhLnRleHRbbC1hLmZyb21dKSl7Zj1sO2JyZWFrfX1sZXQgZD1bXSx1LHA9KGIsbSxnKT0+ZC5wdXNoKGcucmFuZ2UoYixtKSk7aWYoaD09YSlmb3IodGhpcy5yZWdleHAubGFzdEluZGV4PWMtaC5mcm9tOyh1PXRoaXMucmVnZXhwLmV4ZWMoaC50ZXh0KSkmJnUuaW5kZXg8Zi1oLmZyb207KXRoaXMuYWRkTWF0Y2godSx0LHUuaW5kZXgraC5mcm9tLHApO2Vsc2UgUWkodC5zdGF0ZS5kb2MsdGhpcy5yZWdleHAsYyxmLChiLG0pPT50aGlzLmFkZE1hdGNoKG0sdCxiLHApKTtlPWUudXBkYXRlKHtmaWx0ZXJGcm9tOmMsZmlsdGVyVG86ZixmaWx0ZXI6KGIsbSk9PmI8Y3x8bT5mLGFkZDpkfSl9fXJldHVybiBlfX0sb2k9L3gvLnVuaWNvZGUhPW51bGw/XCJndVwiOlwiZ1wiLEFyPW5ldyBSZWdFeHAoYFtcXDAtXFxiXG4tXHUwMDFGXFx4N0YtXFx4OUZcXHhBRFxcdTA2MUNcXHUyMDBCXFx1MjAwRVxcdTIwMEZcXHUyMDI4XFx1MjAyOVxcdTIwMkRcXHUyMDJFXFx1MjA2NlxcdTIwNjdcXHUyMDY5XFx1RkVGRlxcdUZGRjktXFx1RkZGQ11gLG9pKSxEcj17MDpcIm51bGxcIiw3OlwiYmVsbFwiLDg6XCJiYWNrc3BhY2VcIiwxMDpcIm5ld2xpbmVcIiwxMTpcInZlcnRpY2FsIHRhYlwiLDEzOlwiY2FycmlhZ2UgcmV0dXJuXCIsMjc6XCJlc2NhcGVcIiw4MjAzOlwiemVybyB3aWR0aCBzcGFjZVwiLDgyMDQ6XCJ6ZXJvIHdpZHRoIG5vbi1qb2luZXJcIiw4MjA1OlwiemVybyB3aWR0aCBqb2luZXJcIiw4MjA2OlwibGVmdC10by1yaWdodCBtYXJrXCIsODIwNzpcInJpZ2h0LXRvLWxlZnQgbWFya1wiLDgyMzI6XCJsaW5lIHNlcGFyYXRvclwiLDgyMzc6XCJsZWZ0LXRvLXJpZ2h0IG92ZXJyaWRlXCIsODIzODpcInJpZ2h0LXRvLWxlZnQgb3ZlcnJpZGVcIiw4Mjk0OlwibGVmdC10by1yaWdodCBpc29sYXRlXCIsODI5NTpcInJpZ2h0LXRvLWxlZnQgaXNvbGF0ZVwiLDgyOTc6XCJwb3AgZGlyZWN0aW9uYWwgaXNvbGF0ZVwiLDgyMzM6XCJwYXJhZ3JhcGggc2VwYXJhdG9yXCIsNjUyNzk6XCJ6ZXJvIHdpZHRoIG5vLWJyZWFrIHNwYWNlXCIsNjU1MzI6XCJvYmplY3QgcmVwbGFjZW1lbnRcIn0sVGU9bnVsbDtmdW5jdGlvbiBUcigpe3ZhciBzO2lmKFRlPT1udWxsJiZ0eXBlb2YgZG9jdW1lbnQ8XCJ1XCImJmRvY3VtZW50LmJvZHkpe2xldCB0PWRvY3VtZW50LmJvZHkuc3R5bGU7VGU9KChzPXQudGFiU2l6ZSkhPT1udWxsJiZzIT09dm9pZCAwP3M6dC5Nb3pUYWJTaXplKSE9bnVsbH1yZXR1cm4gVGV8fCExfXZhciB0ZT1DLmRlZmluZSh7Y29tYmluZShzKXtsZXQgdD1naShzLHtyZW5kZXI6bnVsbCxzcGVjaWFsQ2hhcnM6QXIsYWRkU3BlY2lhbENoYXJzOm51bGx9KTtyZXR1cm4odC5yZXBsYWNlVGFicz0hVHIoKSkmJih0LnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKFwiXHR8XCIrdC5zcGVjaWFsQ2hhcnMuc291cmNlLG9pKSksdC5hZGRTcGVjaWFsQ2hhcnMmJih0LnNwZWNpYWxDaGFycz1uZXcgUmVnRXhwKHQuc3BlY2lhbENoYXJzLnNvdXJjZStcInxcIit0LmFkZFNwZWNpYWxDaGFycy5zb3VyY2Usb2kpKSx0fX0pO2Z1bmN0aW9uIG5vKHM9e30pe3JldHVyblt0ZS5vZihzKSxPcigpXX12YXIgdHM9bnVsbDtmdW5jdGlvbiBPcigpe3JldHVybiB0c3x8KHRzPVYuZnJvbUNsYXNzKGNsYXNze2NvbnN0cnVjdG9yKHMpe3RoaXMudmlldz1zLHRoaXMuZGVjb3JhdGlvbnM9ay5ub25lLHRoaXMuZGVjb3JhdGlvbkNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5kZWNvcmF0b3I9dGhpcy5tYWtlRGVjb3JhdG9yKHMuc3RhdGUuZmFjZXQodGUpKSx0aGlzLmRlY29yYXRpb25zPXRoaXMuZGVjb3JhdG9yLmNyZWF0ZURlY28ocyl9bWFrZURlY29yYXRvcihzKXtyZXR1cm4gbmV3IHJpKHtyZWdleHA6cy5zcGVjaWFsQ2hhcnMsZGVjb3JhdGlvbjoodCxlLGkpPT57bGV0e2RvYzpufT1lLnN0YXRlLHI9YXModFswXSwwKTtpZihyPT05KXtsZXQgbz1uLmxpbmVBdChpKSxsPWUuc3RhdGUudGFiU2l6ZSxoPWZzKG8udGV4dCxsLGktby5mcm9tKTtyZXR1cm4gay5yZXBsYWNlKHt3aWRnZXQ6bmV3IGhpKChsLWglbCkqdGhpcy52aWV3LmRlZmF1bHRDaGFyYWN0ZXJXaWR0aCl9KX1yZXR1cm4gdGhpcy5kZWNvcmF0aW9uQ2FjaGVbcl18fCh0aGlzLmRlY29yYXRpb25DYWNoZVtyXT1rLnJlcGxhY2Uoe3dpZGdldDpuZXcgbGkocyxyKX0pKX0sYm91bmRhcnk6cy5yZXBsYWNlVGFicz92b2lkIDA6L1teXS99KX11cGRhdGUocyl7bGV0IHQ9cy5zdGF0ZS5mYWNldCh0ZSk7cy5zdGFydFN0YXRlLmZhY2V0KHRlKSE9dD8odGhpcy5kZWNvcmF0b3I9dGhpcy5tYWtlRGVjb3JhdG9yKHQpLHRoaXMuZGVjb3JhdGlvbnM9dGhpcy5kZWNvcmF0b3IuY3JlYXRlRGVjbyhzLnZpZXcpKTp0aGlzLmRlY29yYXRpb25zPXRoaXMuZGVjb3JhdG9yLnVwZGF0ZURlY28ocyx0aGlzLmRlY29yYXRpb25zKX19LHtkZWNvcmF0aW9uczpzPT5zLmRlY29yYXRpb25zfSkpfXZhciBScj1cIlxcdTIwMjJcIjtmdW5jdGlvbiBMcihzKXtyZXR1cm4gcz49MzI/UnI6cz09MTA/XCJcXHUyNDI0XCI6U3RyaW5nLmZyb21DaGFyQ29kZSg5MjE2K3MpfXZhciBsaT1jbGFzcyBleHRlbmRzIFh7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMub3B0aW9ucz10LHRoaXMuY29kZT1lfWVxKHQpe3JldHVybiB0LmNvZGU9PXRoaXMuY29kZX10b0RPTSh0KXtsZXQgZT1Mcih0aGlzLmNvZGUpLGk9dC5zdGF0ZS5waHJhc2UoXCJDb250cm9sIGNoYXJhY3RlclwiKStcIiBcIisoRHJbdGhpcy5jb2RlXXx8XCIweFwiK3RoaXMuY29kZS50b1N0cmluZygxNikpLG49dGhpcy5vcHRpb25zLnJlbmRlciYmdGhpcy5vcHRpb25zLnJlbmRlcih0aGlzLmNvZGUsaSxlKTtpZihuKXJldHVybiBuO2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3JldHVybiByLnRleHRDb250ZW50PWUsci50aXRsZT1pLHIuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLGkpLHIuY2xhc3NOYW1lPVwiY20tc3BlY2lhbENoYXJcIixyfWlnbm9yZUV2ZW50KCl7cmV0dXJuITF9fSxoaT1jbGFzcyBleHRlbmRzIFh7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLndpZHRoPXR9ZXEodCl7cmV0dXJuIHQud2lkdGg9PXRoaXMud2lkdGh9dG9ET00oKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtyZXR1cm4gdC50ZXh0Q29udGVudD1cIlx0XCIsdC5jbGFzc05hbWU9XCJjbS10YWJcIix0LnN0eWxlLndpZHRoPXRoaXMud2lkdGgrXCJweFwiLHR9aWdub3JlRXZlbnQoKXtyZXR1cm4hMX19LGVzPVYuZnJvbUNsYXNzKGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oZWlnaHQ9MWUzLHRoaXMuYXR0cnM9e3N0eWxlOlwicGFkZGluZy1ib3R0b206IDEwMDBweFwifX11cGRhdGUocyl7bGV0IHQ9cy52aWV3LnZpZXdTdGF0ZS5lZGl0b3JIZWlnaHQtcy52aWV3LmRlZmF1bHRMaW5lSGVpZ2h0O3QhPXRoaXMuaGVpZ2h0JiYodGhpcy5oZWlnaHQ9dCx0aGlzLmF0dHJzPXtzdHlsZTpgcGFkZGluZy1ib3R0b206ICR7dH1weGB9KX19KTtmdW5jdGlvbiBybygpe3JldHVybltlcyx3aS5vZihzPT57dmFyIHQ7cmV0dXJuKCh0PXMucGx1Z2luKGVzKSk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LmF0dHJzKXx8bnVsbH0pXX1mdW5jdGlvbiBvbygpe3JldHVybiBCcn12YXIgRXI9ay5saW5lKHtjbGFzczpcImNtLWFjdGl2ZUxpbmVcIn0pLEJyPVYuZnJvbUNsYXNzKGNsYXNze2NvbnN0cnVjdG9yKHMpe3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5nZXREZWNvKHMpfXVwZGF0ZShzKXsocy5kb2NDaGFuZ2VkfHxzLnNlbGVjdGlvblNldCkmJih0aGlzLmRlY29yYXRpb25zPXRoaXMuZ2V0RGVjbyhzLnZpZXcpKX1nZXREZWNvKHMpe2xldCB0PS0xLGU9W107Zm9yKGxldCBpIG9mIHMuc3RhdGUuc2VsZWN0aW9uLnJhbmdlcyl7bGV0IG49cy5saW5lQmxvY2tBdChpLmhlYWQpO24uZnJvbT50JiYoZS5wdXNoKEVyLnJhbmdlKG4uZnJvbSkpLHQ9bi5mcm9tKX1yZXR1cm4gay5zZXQoZSl9fSx7ZGVjb3JhdGlvbnM6cz0+cy5kZWNvcmF0aW9uc30pLGFpPWNsYXNzIGV4dGVuZHMgWHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuY29udGVudD10fXRvRE9NKCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7cmV0dXJuIHQuY2xhc3NOYW1lPVwiY20tcGxhY2Vob2xkZXJcIix0LnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCIsdC5hcHBlbmRDaGlsZCh0eXBlb2YgdGhpcy5jb250ZW50PT1cInN0cmluZ1wiP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuY29udGVudCk6dGhpcy5jb250ZW50KSx0eXBlb2YgdGhpcy5jb250ZW50PT1cInN0cmluZ1wiP3Quc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLFwicGxhY2Vob2xkZXIgXCIrdGhpcy5jb250ZW50KTp0LnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLHR9aWdub3JlRXZlbnQoKXtyZXR1cm4hMX19O2Z1bmN0aW9uIGxvKHMpe3JldHVybiBWLmZyb21DbGFzcyhjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnZpZXc9dCx0aGlzLnBsYWNlaG9sZGVyPWsuc2V0KFtrLndpZGdldCh7d2lkZ2V0Om5ldyBhaShzKSxzaWRlOjF9KS5yYW5nZSgwKV0pfWdldCBkZWNvcmF0aW9ucygpe3JldHVybiB0aGlzLnZpZXcuc3RhdGUuZG9jLmxlbmd0aD9rLm5vbmU6dGhpcy5wbGFjZWhvbGRlcn19LHtkZWNvcmF0aW9uczp0PT50LmRlY29yYXRpb25zfSl9dmFyIGNpPTJlMztmdW5jdGlvbiBQcihzLHQsZSl7bGV0IGk9TWF0aC5taW4odC5saW5lLGUubGluZSksbj1NYXRoLm1heCh0LmxpbmUsZS5saW5lKSxyPVtdO2lmKHQub2ZmPmNpfHxlLm9mZj5jaXx8dC5jb2w8MHx8ZS5jb2w8MCl7bGV0IG89TWF0aC5taW4odC5vZmYsZS5vZmYpLGw9TWF0aC5tYXgodC5vZmYsZS5vZmYpO2ZvcihsZXQgaD1pO2g8PW47aCsrKXtsZXQgYT1zLmRvYy5saW5lKGgpO2EubGVuZ3RoPD1sJiZyLnB1c2goeC5yYW5nZShhLmZyb20rbyxhLnRvK2wpKX19ZWxzZXtsZXQgbz1NYXRoLm1pbih0LmNvbCxlLmNvbCksbD1NYXRoLm1heCh0LmNvbCxlLmNvbCk7Zm9yKGxldCBoPWk7aDw9bjtoKyspe2xldCBhPXMuZG9jLmxpbmUoaCksYz1MZShhLnRleHQsbyxzLnRhYlNpemUsITApO2lmKGM+LTEpe2xldCBmPUxlKGEudGV4dCxsLHMudGFiU2l6ZSk7ci5wdXNoKHgucmFuZ2UoYS5mcm9tK2MsYS5mcm9tK2YpKX19fXJldHVybiByfWZ1bmN0aW9uIEhyKHMsdCl7bGV0IGU9cy5jb29yZHNBdFBvcyhzLnZpZXdwb3J0LmZyb20pO3JldHVybiBlP01hdGgucm91bmQoTWF0aC5hYnMoKGUubGVmdC10KS9zLmRlZmF1bHRDaGFyYWN0ZXJXaWR0aCkpOi0xfWZ1bmN0aW9uIGlzKHMsdCl7bGV0IGU9cy5wb3NBdENvb3Jkcyh7eDp0LmNsaWVudFgseTp0LmNsaWVudFl9LCExKSxpPXMuc3RhdGUuZG9jLmxpbmVBdChlKSxuPWUtaS5mcm9tLHI9bj5jaT8tMTpuPT1pLmxlbmd0aD9IcihzLHQuY2xpZW50WCk6ZnMoaS50ZXh0LHMuc3RhdGUudGFiU2l6ZSxlLWkuZnJvbSk7cmV0dXJue2xpbmU6aS5udW1iZXIsY29sOnIsb2ZmOm59fWZ1bmN0aW9uIE5yKHMsdCl7bGV0IGU9aXMocyx0KSxpPXMuc3RhdGUuc2VsZWN0aW9uO3JldHVybiBlP3t1cGRhdGUobil7aWYobi5kb2NDaGFuZ2VkKXtsZXQgcj1uLmNoYW5nZXMubWFwUG9zKG4uc3RhcnRTdGF0ZS5kb2MubGluZShlLmxpbmUpLmZyb20pLG89bi5zdGF0ZS5kb2MubGluZUF0KHIpO2U9e2xpbmU6by5udW1iZXIsY29sOmUuY29sLG9mZjpNYXRoLm1pbihlLm9mZixvLmxlbmd0aCl9LGk9aS5tYXAobi5jaGFuZ2VzKX19LGdldChuLHIsbyl7bGV0IGw9aXMocyxuKTtpZighbClyZXR1cm4gaTtsZXQgaD1QcihzLnN0YXRlLGUsbCk7cmV0dXJuIGgubGVuZ3RoP28/eC5jcmVhdGUoaC5jb25jYXQoaS5yYW5nZXMpKTp4LmNyZWF0ZShoKTppfX06bnVsbH1mdW5jdGlvbiBobyhzKXtsZXQgdD1zPy5ldmVudEZpbHRlcnx8KGU9PmUuYWx0S2V5JiZlLmJ1dHRvbj09MCk7cmV0dXJuIE0ubW91c2VTZWxlY3Rpb25TdHlsZS5vZigoZSxpKT0+dChpKT9OcihlLGkpOm51bGwpfXZhciBWcj17QWx0OlsxOCxzPT5zLmFsdEtleV0sQ29udHJvbDpbMTcscz0+cy5jdHJsS2V5XSxTaGlmdDpbMTYscz0+cy5zaGlmdEtleV0sTWV0YTpbOTEscz0+cy5tZXRhS2V5XX0sV3I9e3N0eWxlOlwiY3Vyc29yOiBjcm9zc2hhaXJcIn07ZnVuY3Rpb24gYW8ocz17fSl7bGV0W3QsZV09VnJbcy5rZXl8fFwiQWx0XCJdLGk9Vi5mcm9tQ2xhc3MoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy52aWV3PW4sdGhpcy5pc0Rvd249ITF9c2V0KG4pe3RoaXMuaXNEb3duIT1uJiYodGhpcy5pc0Rvd249bix0aGlzLnZpZXcudXBkYXRlKFtdKSl9fSx7ZXZlbnRIYW5kbGVyczp7a2V5ZG93bihuKXt0aGlzLnNldChuLmtleUNvZGU9PXR8fGUobikpfSxrZXl1cChuKXsobi5rZXlDb2RlPT10fHwhZShuKSkmJnRoaXMuc2V0KCExKX19fSk7cmV0dXJuW2ksTS5jb250ZW50QXR0cmlidXRlcy5vZihuPT57dmFyIHI7cmV0dXJuISgocj1uLnBsdWdpbihpKSk9PT1udWxsfHxyPT09dm9pZCAwKSYmci5pc0Rvd24/V3I6bnVsbH0pXX12YXIgT2U9XCItMTAwMDBweFwiLHllPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmZhY2V0PWUsdGhpcy5jcmVhdGVUb29sdGlwVmlldz1pLHRoaXMuaW5wdXQ9dC5zdGF0ZS5mYWNldChlKSx0aGlzLnRvb2x0aXBzPXRoaXMuaW5wdXQuZmlsdGVyKG49Pm4pLHRoaXMudG9vbHRpcFZpZXdzPXRoaXMudG9vbHRpcHMubWFwKGkpfXVwZGF0ZSh0KXtsZXQgZT10LnN0YXRlLmZhY2V0KHRoaXMuZmFjZXQpLGk9ZS5maWx0ZXIocj0+cik7aWYoZT09PXRoaXMuaW5wdXQpe2ZvcihsZXQgciBvZiB0aGlzLnRvb2x0aXBWaWV3cylyLnVwZGF0ZSYmci51cGRhdGUodCk7cmV0dXJuITF9bGV0IG49W107Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl0sbD0tMTtpZighIW8pe2ZvcihsZXQgaD0wO2g8dGhpcy50b29sdGlwcy5sZW5ndGg7aCsrKXtsZXQgYT10aGlzLnRvb2x0aXBzW2hdO2EmJmEuY3JlYXRlPT1vLmNyZWF0ZSYmKGw9aCl9aWYobDwwKW5bcl09dGhpcy5jcmVhdGVUb29sdGlwVmlldyhvKTtlbHNle2xldCBoPW5bcl09dGhpcy50b29sdGlwVmlld3NbbF07aC51cGRhdGUmJmgudXBkYXRlKHQpfX19Zm9yKGxldCByIG9mIHRoaXMudG9vbHRpcFZpZXdzKW4uaW5kZXhPZihyKTwwJiZyLmRvbS5yZW1vdmUoKTtyZXR1cm4gdGhpcy5pbnB1dD1lLHRoaXMudG9vbHRpcHM9aSx0aGlzLnRvb2x0aXBWaWV3cz1uLCEwfX07ZnVuY3Rpb24gY28ocz17fSl7cmV0dXJuIGVlLm9mKHMpfWZ1bmN0aW9uIEZyKHMpe2xldHt3aW46dH09cztyZXR1cm57dG9wOjAsbGVmdDowLGJvdHRvbTp0LmlubmVySGVpZ2h0LHJpZ2h0OnQuaW5uZXJXaWR0aH19dmFyIGVlPUMuZGVmaW5lKHtjb21iaW5lOnM9Pnt2YXIgdCxlLGk7cmV0dXJue3Bvc2l0aW9uOnkuaW9zP1wiYWJzb2x1dGVcIjooKHQ9cy5maW5kKG49Pm4ucG9zaXRpb24pKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQucG9zaXRpb24pfHxcImZpeGVkXCIscGFyZW50OigoZT1zLmZpbmQobj0+bi5wYXJlbnQpKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUucGFyZW50KXx8bnVsbCx0b29sdGlwU3BhY2U6KChpPXMuZmluZChuPT5uLnRvb2x0aXBTcGFjZSkpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS50b29sdGlwU3BhY2UpfHxGcn19fSksdmk9Vi5mcm9tQ2xhc3MoY2xhc3N7Y29uc3RydWN0b3Iocyl7dGhpcy52aWV3PXMsdGhpcy5pblZpZXc9ITAsdGhpcy5sYXN0VHJhbnNhY3Rpb249MCx0aGlzLm1lYXN1cmVUaW1lb3V0PS0xO2xldCB0PXMuc3RhdGUuZmFjZXQoZWUpO3RoaXMucG9zaXRpb249dC5wb3NpdGlvbix0aGlzLnBhcmVudD10LnBhcmVudCx0aGlzLmNsYXNzZXM9cy50aGVtZUNsYXNzZXMsdGhpcy5jcmVhdGVDb250YWluZXIoKSx0aGlzLm1lYXN1cmVSZXE9e3JlYWQ6dGhpcy5yZWFkTWVhc3VyZS5iaW5kKHRoaXMpLHdyaXRlOnRoaXMud3JpdGVNZWFzdXJlLmJpbmQodGhpcyksa2V5OnRoaXN9LHRoaXMubWFuYWdlcj1uZXcgeWUocyxubixlPT50aGlzLmNyZWF0ZVRvb2x0aXAoZSkpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9dHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyPT1cImZ1bmN0aW9uXCI/bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGU9PntEYXRlLm5vdygpPnRoaXMubGFzdFRyYW5zYWN0aW9uLTUwJiZlLmxlbmd0aD4wJiZlW2UubGVuZ3RoLTFdLmludGVyc2VjdGlvblJhdGlvPDEmJnRoaXMubWVhc3VyZVNvb24oKX0se3RocmVzaG9sZDpbMV19KTpudWxsLHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpLHMud2luLmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLm1lYXN1cmVTb29uPXRoaXMubWVhc3VyZVNvb24uYmluZCh0aGlzKSksdGhpcy5tYXliZU1lYXN1cmUoKX1jcmVhdGVDb250YWluZXIoKXt0aGlzLnBhcmVudD8odGhpcy5jb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIsdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMudmlldy50aGVtZUNsYXNzZXMsdGhpcy5wYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpKTp0aGlzLmNvbnRhaW5lcj10aGlzLnZpZXcuZG9tfW9ic2VydmVJbnRlcnNlY3Rpb24oKXtpZih0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtmb3IobGV0IHMgb2YgdGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3cyl0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUocy5kb20pfX1tZWFzdXJlU29vbigpe3RoaXMubWVhc3VyZVRpbWVvdXQ8MCYmKHRoaXMubWVhc3VyZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMubWVhc3VyZVRpbWVvdXQ9LTEsdGhpcy5tYXliZU1lYXN1cmUoKX0sNTApKX11cGRhdGUocyl7cy50cmFuc2FjdGlvbnMubGVuZ3RoJiYodGhpcy5sYXN0VHJhbnNhY3Rpb249RGF0ZS5ub3coKSk7bGV0IHQ9dGhpcy5tYW5hZ2VyLnVwZGF0ZShzKTt0JiZ0aGlzLm9ic2VydmVJbnRlcnNlY3Rpb24oKTtsZXQgZT10fHxzLmdlb21ldHJ5Q2hhbmdlZCxpPXMuc3RhdGUuZmFjZXQoZWUpO2lmKGkucG9zaXRpb24hPXRoaXMucG9zaXRpb24pe3RoaXMucG9zaXRpb249aS5wb3NpdGlvbjtmb3IobGV0IG4gb2YgdGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3cyluLmRvbS5zdHlsZS5wb3NpdGlvbj10aGlzLnBvc2l0aW9uO2U9ITB9aWYoaS5wYXJlbnQhPXRoaXMucGFyZW50KXt0aGlzLnBhcmVudCYmdGhpcy5jb250YWluZXIucmVtb3ZlKCksdGhpcy5wYXJlbnQ9aS5wYXJlbnQsdGhpcy5jcmVhdGVDb250YWluZXIoKTtmb3IobGV0IG4gb2YgdGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3cyl0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuLmRvbSk7ZT0hMH1lbHNlIHRoaXMucGFyZW50JiZ0aGlzLnZpZXcudGhlbWVDbGFzc2VzIT10aGlzLmNsYXNzZXMmJih0aGlzLmNsYXNzZXM9dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMudmlldy50aGVtZUNsYXNzZXMpO2UmJnRoaXMubWF5YmVNZWFzdXJlKCl9Y3JlYXRlVG9vbHRpcChzKXtsZXQgdD1zLmNyZWF0ZSh0aGlzLnZpZXcpO2lmKHQuZG9tLmNsYXNzTGlzdC5hZGQoXCJjbS10b29sdGlwXCIpLHMuYXJyb3cmJiF0LmRvbS5xdWVyeVNlbGVjdG9yKFwiLmNtLXRvb2x0aXAgPiAuY20tdG9vbHRpcC1hcnJvd1wiKSl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtlLmNsYXNzTmFtZT1cImNtLXRvb2x0aXAtYXJyb3dcIix0LmRvbS5hcHBlbmRDaGlsZChlKX1yZXR1cm4gdC5kb20uc3R5bGUucG9zaXRpb249dGhpcy5wb3NpdGlvbix0LmRvbS5zdHlsZS50b3A9T2UsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5kb20pLHQubW91bnQmJnQubW91bnQodGhpcy52aWV3KSx0fWRlc3Ryb3koKXt2YXIgczt0aGlzLnZpZXcud2luLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLm1lYXN1cmVTb29uKTtmb3IobGV0e2RvbTp0fW9mIHRoaXMubWFuYWdlci50b29sdGlwVmlld3MpdC5yZW1vdmUoKTsocz10aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKT09PW51bGx8fHM9PT12b2lkIDB8fHMuZGlzY29ubmVjdCgpLGNsZWFyVGltZW91dCh0aGlzLm1lYXN1cmVUaW1lb3V0KX1yZWFkTWVhc3VyZSgpe2xldCBzPXRoaXMudmlldy5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue2VkaXRvcjpzLHBhcmVudDp0aGlzLnBhcmVudD90aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTpzLHBvczp0aGlzLm1hbmFnZXIudG9vbHRpcHMubWFwKCh0LGUpPT57bGV0IGk9dGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3c1tlXTtyZXR1cm4gaS5nZXRDb29yZHM/aS5nZXRDb29yZHModC5wb3MpOnRoaXMudmlldy5jb29yZHNBdFBvcyh0LnBvcyl9KSxzaXplOnRoaXMubWFuYWdlci50b29sdGlwVmlld3MubWFwKCh7ZG9tOnR9KT0+dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksc3BhY2U6dGhpcy52aWV3LnN0YXRlLmZhY2V0KGVlKS50b29sdGlwU3BhY2UodGhpcy52aWV3KX19d3JpdGVNZWFzdXJlKHMpe2xldHtlZGl0b3I6dCxzcGFjZTplfT1zLGk9W107Zm9yKGxldCBuPTA7bjx0aGlzLm1hbmFnZXIudG9vbHRpcHMubGVuZ3RoO24rKyl7bGV0IHI9dGhpcy5tYW5hZ2VyLnRvb2x0aXBzW25dLG89dGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3c1tuXSx7ZG9tOmx9PW8saD1zLnBvc1tuXSxhPXMuc2l6ZVtuXTtpZighaHx8aC5ib3R0b208PU1hdGgubWF4KHQudG9wLGUudG9wKXx8aC50b3A+PU1hdGgubWluKHQuYm90dG9tLGUuYm90dG9tKXx8aC5yaWdodDxNYXRoLm1heCh0LmxlZnQsZS5sZWZ0KS0uMXx8aC5sZWZ0Pk1hdGgubWluKHQucmlnaHQsZS5yaWdodCkrLjEpe2wuc3R5bGUudG9wPU9lO2NvbnRpbnVlfWxldCBjPXIuYXJyb3c/by5kb20ucXVlcnlTZWxlY3RvcihcIi5jbS10b29sdGlwLWFycm93XCIpOm51bGwsZj1jPzc6MCxkPWEucmlnaHQtYS5sZWZ0LHU9YS5ib3R0b20tYS50b3AscD1vLm9mZnNldHx8SXIsYj10aGlzLnZpZXcudGV4dERpcmVjdGlvbj09Ui5MVFIsbT1hLndpZHRoPmUucmlnaHQtZS5sZWZ0P2I/ZS5sZWZ0OmUucmlnaHQtYS53aWR0aDpiP01hdGgubWluKGgubGVmdC0oYz8xNDowKStwLngsZS5yaWdodC1kKTpNYXRoLm1heChlLmxlZnQsaC5sZWZ0LWQrKGM/MTQ6MCktcC54KSxnPSEhci5hYm92ZTshci5zdHJpY3RTaWRlJiYoZz9oLnRvcC0oYS5ib3R0b20tYS50b3ApLXAueTxlLnRvcDpoLmJvdHRvbSsoYS5ib3R0b20tYS50b3ApK3AueT5lLmJvdHRvbSkmJmc9PWUuYm90dG9tLWguYm90dG9tPmgudG9wLWUudG9wJiYoZz0hZyk7bGV0IFM9Zz9oLnRvcC11LWYtcC55OmguYm90dG9tK2YrcC55LHc9bStkO2lmKG8ub3ZlcmxhcCE9PSEwKWZvcihsZXQgdiBvZiBpKXYubGVmdDx3JiZ2LnJpZ2h0Pm0mJnYudG9wPFMrdSYmdi5ib3R0b20+UyYmKFM9Zz92LnRvcC11LTItZjp2LmJvdHRvbStmKzIpO3RoaXMucG9zaXRpb249PVwiYWJzb2x1dGVcIj8obC5zdHlsZS50b3A9Uy1zLnBhcmVudC50b3ArXCJweFwiLGwuc3R5bGUubGVmdD1tLXMucGFyZW50LmxlZnQrXCJweFwiKToobC5zdHlsZS50b3A9UytcInB4XCIsbC5zdHlsZS5sZWZ0PW0rXCJweFwiKSxjJiYoYy5zdHlsZS5sZWZ0PWAke2gubGVmdCsoYj9wLng6LXAueCktKG0rMTQtNyl9cHhgKSxvLm92ZXJsYXAhPT0hMCYmaS5wdXNoKHtsZWZ0Om0sdG9wOlMscmlnaHQ6dyxib3R0b206Uyt1fSksbC5jbGFzc0xpc3QudG9nZ2xlKFwiY20tdG9vbHRpcC1hYm92ZVwiLGcpLGwuY2xhc3NMaXN0LnRvZ2dsZShcImNtLXRvb2x0aXAtYmVsb3dcIiwhZyksby5wb3NpdGlvbmVkJiZvLnBvc2l0aW9uZWQoKX19bWF5YmVNZWFzdXJlKCl7aWYodGhpcy5tYW5hZ2VyLnRvb2x0aXBzLmxlbmd0aCYmKHRoaXMudmlldy5pblZpZXcmJnRoaXMudmlldy5yZXF1ZXN0TWVhc3VyZSh0aGlzLm1lYXN1cmVSZXEpLHRoaXMuaW5WaWV3IT10aGlzLnZpZXcuaW5WaWV3JiYodGhpcy5pblZpZXc9dGhpcy52aWV3LmluVmlldywhdGhpcy5pblZpZXcpKSlmb3IobGV0IHMgb2YgdGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3cylzLmRvbS5zdHlsZS50b3A9T2V9fSx7ZXZlbnRIYW5kbGVyczp7c2Nyb2xsKCl7dGhpcy5tYXliZU1lYXN1cmUoKX19fSksenI9TS5iYXNlVGhlbWUoe1wiLmNtLXRvb2x0aXBcIjp7ekluZGV4OjEwMH0sXCImbGlnaHQgLmNtLXRvb2x0aXBcIjp7Ym9yZGVyOlwiMXB4IHNvbGlkICNiYmJcIixiYWNrZ3JvdW5kQ29sb3I6XCIjZjVmNWY1XCJ9LFwiJmxpZ2h0IC5jbS10b29sdGlwLXNlY3Rpb246bm90KDpmaXJzdC1jaGlsZClcIjp7Ym9yZGVyVG9wOlwiMXB4IHNvbGlkICNiYmJcIn0sXCImZGFyayAuY20tdG9vbHRpcFwiOntiYWNrZ3JvdW5kQ29sb3I6XCIjMzMzMzM4XCIsY29sb3I6XCJ3aGl0ZVwifSxcIi5jbS10b29sdGlwLWFycm93XCI6e2hlaWdodDpgJHs3fXB4YCx3aWR0aDpgJHs3KjJ9cHhgLHBvc2l0aW9uOlwiYWJzb2x1dGVcIix6SW5kZXg6LTEsb3ZlcmZsb3c6XCJoaWRkZW5cIixcIiY6YmVmb3JlLCAmOmFmdGVyXCI6e2NvbnRlbnQ6XCInJ1wiLHBvc2l0aW9uOlwiYWJzb2x1dGVcIix3aWR0aDowLGhlaWdodDowLGJvcmRlckxlZnQ6YCR7N31weCBzb2xpZCB0cmFuc3BhcmVudGAsYm9yZGVyUmlnaHQ6YCR7N31weCBzb2xpZCB0cmFuc3BhcmVudGB9LFwiLmNtLXRvb2x0aXAtYWJvdmUgJlwiOntib3R0b206YC0kezd9cHhgLFwiJjpiZWZvcmVcIjp7Ym9yZGVyVG9wOmAkezd9cHggc29saWQgI2JiYmB9LFwiJjphZnRlclwiOntib3JkZXJUb3A6YCR7N31weCBzb2xpZCAjZjVmNWY1YCxib3R0b206XCIxcHhcIn19LFwiLmNtLXRvb2x0aXAtYmVsb3cgJlwiOnt0b3A6YC0kezd9cHhgLFwiJjpiZWZvcmVcIjp7Ym9yZGVyQm90dG9tOmAkezd9cHggc29saWQgI2JiYmB9LFwiJjphZnRlclwiOntib3JkZXJCb3R0b206YCR7N31weCBzb2xpZCAjZjVmNWY1YCx0b3A6XCIxcHhcIn19fSxcIiZkYXJrIC5jbS10b29sdGlwIC5jbS10b29sdGlwLWFycm93XCI6e1wiJjpiZWZvcmVcIjp7Ym9yZGVyVG9wQ29sb3I6XCIjMzMzMzM4XCIsYm9yZGVyQm90dG9tQ29sb3I6XCIjMzMzMzM4XCJ9LFwiJjphZnRlclwiOntib3JkZXJUb3BDb2xvcjpcInRyYW5zcGFyZW50XCIsYm9yZGVyQm90dG9tQ29sb3I6XCJ0cmFuc3BhcmVudFwifX19KSxJcj17eDowLHk6MH0sbm49Qy5kZWZpbmUoe2VuYWJsZXM6W3ZpLHpyXX0pLHF0PUMuZGVmaW5lKCksS3Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52aWV3PXQsdGhpcy5tb3VudGVkPSExLHRoaXMuZG9tPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy5kb20uY2xhc3NMaXN0LmFkZChcImNtLXRvb2x0aXAtaG92ZXJcIiksdGhpcy5tYW5hZ2VyPW5ldyB5ZSh0LHF0LGU9PnRoaXMuY3JlYXRlSG9zdGVkVmlldyhlKSl9c3RhdGljIGNyZWF0ZSh0KXtyZXR1cm4gbmV3IEt0KHQpfWNyZWF0ZUhvc3RlZFZpZXcodCl7bGV0IGU9dC5jcmVhdGUodGhpcy52aWV3KTtyZXR1cm4gZS5kb20uY2xhc3NMaXN0LmFkZChcImNtLXRvb2x0aXAtc2VjdGlvblwiKSx0aGlzLmRvbS5hcHBlbmRDaGlsZChlLmRvbSksdGhpcy5tb3VudGVkJiZlLm1vdW50JiZlLm1vdW50KHRoaXMudmlldyksZX1tb3VudCh0KXtmb3IobGV0IGUgb2YgdGhpcy5tYW5hZ2VyLnRvb2x0aXBWaWV3cyllLm1vdW50JiZlLm1vdW50KHQpO3RoaXMubW91bnRlZD0hMH1wb3NpdGlvbmVkKCl7Zm9yKGxldCB0IG9mIHRoaXMubWFuYWdlci50b29sdGlwVmlld3MpdC5wb3NpdGlvbmVkJiZ0LnBvc2l0aW9uZWQoKX11cGRhdGUodCl7dGhpcy5tYW5hZ2VyLnVwZGF0ZSh0KX19LHFyPW5uLmNvbXB1dGUoW3F0XSxzPT57bGV0IHQ9cy5mYWNldChxdCkuZmlsdGVyKGU9PmUpO3JldHVybiB0Lmxlbmd0aD09PTA/bnVsbDp7cG9zOk1hdGgubWluKC4uLnQubWFwKGU9PmUucG9zKSksZW5kOk1hdGgubWF4KC4uLnQuZmlsdGVyKGU9PmUuZW5kIT1udWxsKS5tYXAoZT0+ZS5lbmQpKSxjcmVhdGU6S3QuY3JlYXRlLGFib3ZlOnRbMF0uYWJvdmUsYXJyb3c6dC5zb21lKGU9PmUuYXJyb3cpfX0pLGZpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLG4scil7dGhpcy52aWV3PXQsdGhpcy5zb3VyY2U9ZSx0aGlzLmZpZWxkPWksdGhpcy5zZXRIb3Zlcj1uLHRoaXMuaG92ZXJUaW1lPXIsdGhpcy5ob3ZlclRpbWVvdXQ9LTEsdGhpcy5yZXN0YXJ0VGltZW91dD0tMSx0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLmxhc3RNb3ZlPXt4OjAseTowLHRhcmdldDp0LmRvbSx0aW1lOjB9LHRoaXMuY2hlY2tIb3Zlcj10aGlzLmNoZWNrSG92ZXIuYmluZCh0aGlzKSx0LmRvbS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLHRoaXMubW91c2VsZWF2ZT10aGlzLm1vdXNlbGVhdmUuYmluZCh0aGlzKSksdC5kb20uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMubW91c2Vtb3ZlPXRoaXMubW91c2Vtb3ZlLmJpbmQodGhpcykpfXVwZGF0ZSgpe3RoaXMucGVuZGluZyYmKHRoaXMucGVuZGluZz1udWxsLGNsZWFyVGltZW91dCh0aGlzLnJlc3RhcnRUaW1lb3V0KSx0aGlzLnJlc3RhcnRUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuc3RhcnRIb3ZlcigpLDIwKSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLnZpZXcuc3RhdGUuZmllbGQodGhpcy5maWVsZCl9Y2hlY2tIb3Zlcigpe2lmKHRoaXMuaG92ZXJUaW1lb3V0PS0xLHRoaXMuYWN0aXZlKXJldHVybjtsZXQgdD1EYXRlLm5vdygpLXRoaXMubGFzdE1vdmUudGltZTt0PHRoaXMuaG92ZXJUaW1lP3RoaXMuaG92ZXJUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5jaGVja0hvdmVyLHRoaXMuaG92ZXJUaW1lLXQpOnRoaXMuc3RhcnRIb3ZlcigpfXN0YXJ0SG92ZXIoKXtjbGVhclRpbWVvdXQodGhpcy5yZXN0YXJ0VGltZW91dCk7bGV0e2xhc3RNb3ZlOnR9PXRoaXMsZT10aGlzLnZpZXcuY29udGVudERPTS5jb250YWlucyh0LnRhcmdldCk/dGhpcy52aWV3LnBvc0F0Q29vcmRzKHQpOm51bGw7aWYoZT09bnVsbClyZXR1cm47bGV0IGk9dGhpcy52aWV3LmNvb3Jkc0F0UG9zKGUpO2lmKGk9PW51bGx8fHQueTxpLnRvcHx8dC55PmkuYm90dG9tfHx0Lng8aS5sZWZ0LXRoaXMudmlldy5kZWZhdWx0Q2hhcmFjdGVyV2lkdGh8fHQueD5pLnJpZ2h0K3RoaXMudmlldy5kZWZhdWx0Q2hhcmFjdGVyV2lkdGgpcmV0dXJuO2xldCBuPXRoaXMudmlldy5iaWRpU3BhbnModGhpcy52aWV3LnN0YXRlLmRvYy5saW5lQXQoZSkpLmZpbmQobD0+bC5mcm9tPD1lJiZsLnRvPj1lKSxyPW4mJm4uZGlyPT1SLlJUTD8tMToxLG89dGhpcy5zb3VyY2UodGhpcy52aWV3LGUsdC54PGkubGVmdD8tcjpyKTtpZihvPy50aGVuKXtsZXQgbD10aGlzLnBlbmRpbmc9e3BvczplfTtvLnRoZW4oaD0+e3RoaXMucGVuZGluZz09bCYmKHRoaXMucGVuZGluZz1udWxsLGgmJnRoaXMudmlldy5kaXNwYXRjaCh7ZWZmZWN0czp0aGlzLnNldEhvdmVyLm9mKGgpfSkpfSxoPT5udCh0aGlzLnZpZXcuc3RhdGUsaCxcImhvdmVyIHRvb2x0aXBcIikpfWVsc2UgbyYmdGhpcy52aWV3LmRpc3BhdGNoKHtlZmZlY3RzOnRoaXMuc2V0SG92ZXIub2Yobyl9KX1tb3VzZW1vdmUodCl7dmFyIGU7dGhpcy5sYXN0TW92ZT17eDp0LmNsaWVudFgseTp0LmNsaWVudFksdGFyZ2V0OnQudGFyZ2V0LHRpbWU6RGF0ZS5ub3coKX0sdGhpcy5ob3ZlclRpbWVvdXQ8MCYmKHRoaXMuaG92ZXJUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5jaGVja0hvdmVyLHRoaXMuaG92ZXJUaW1lKSk7bGV0IGk9dGhpcy5hY3RpdmU7aWYoaSYmIUtyKHRoaXMubGFzdE1vdmUudGFyZ2V0KXx8dGhpcy5wZW5kaW5nKXtsZXR7cG9zOm59PWl8fHRoaXMucGVuZGluZyxyPShlPWk/LmVuZCkhPT1udWxsJiZlIT09dm9pZCAwP2U6bjsobj09cj90aGlzLnZpZXcucG9zQXRDb29yZHModGhpcy5sYXN0TW92ZSkhPW46IWpyKHRoaXMudmlldyxuLHIsdC5jbGllbnRYLHQuY2xpZW50WSw2KSkmJih0aGlzLnZpZXcuZGlzcGF0Y2goe2VmZmVjdHM6dGhpcy5zZXRIb3Zlci5vZihudWxsKX0pLHRoaXMucGVuZGluZz1udWxsKX19bW91c2VsZWF2ZSgpe2NsZWFyVGltZW91dCh0aGlzLmhvdmVyVGltZW91dCksdGhpcy5ob3ZlclRpbWVvdXQ9LTEsdGhpcy5hY3RpdmUmJnRoaXMudmlldy5kaXNwYXRjaCh7ZWZmZWN0czp0aGlzLnNldEhvdmVyLm9mKG51bGwpfSl9ZGVzdHJveSgpe2NsZWFyVGltZW91dCh0aGlzLmhvdmVyVGltZW91dCksdGhpcy52aWV3LmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLHRoaXMubW91c2VsZWF2ZSksdGhpcy52aWV3LmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5tb3VzZW1vdmUpfX07ZnVuY3Rpb24gS3Iocyl7Zm9yKGxldCB0PXM7dDt0PXQucGFyZW50Tm9kZSlpZih0Lm5vZGVUeXBlPT0xJiZ0LmNsYXNzTGlzdC5jb250YWlucyhcImNtLXRvb2x0aXBcIikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24ganIocyx0LGUsaSxuLHIpe2xldCBvPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksbD1zLmRvbUF0UG9zKHQpLGg9cy5kb21BdFBvcyhlKTtvLnNldEVuZChoLm5vZGUsaC5vZmZzZXQpLG8uc2V0U3RhcnQobC5ub2RlLGwub2Zmc2V0KTtsZXQgYT1vLmdldENsaWVudFJlY3RzKCk7by5kZXRhY2goKTtmb3IobGV0IGM9MDtjPGEubGVuZ3RoO2MrKyl7bGV0IGY9YVtjXTtpZihNYXRoLm1heChmLnRvcC1uLG4tZi5ib3R0b20sZi5sZWZ0LWksaS1mLnJpZ2h0KTw9cilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBmbyhzLHQ9e30pe2xldCBlPWp0LmRlZmluZSgpLGk9Y3MuZGVmaW5lKHtjcmVhdGUoKXtyZXR1cm4gbnVsbH0sdXBkYXRlKG4scil7aWYobiYmKHQuaGlkZU9uQ2hhbmdlJiYoci5kb2NDaGFuZ2VkfHxyLnNlbGVjdGlvbil8fHQuaGlkZU9uJiZ0LmhpZGVPbihyLG4pKSlyZXR1cm4gbnVsbDtpZihuJiZyLmRvY0NoYW5nZWQpe2xldCBvPXIuY2hhbmdlcy5tYXBQb3Mobi5wb3MsLTEsZ3QuVHJhY2tEZWwpO2lmKG89PW51bGwpcmV0dXJuIG51bGw7bGV0IGw9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLG4pO2wucG9zPW8sbi5lbmQhPW51bGwmJihsLmVuZD1yLmNoYW5nZXMubWFwUG9zKG4uZW5kKSksbj1sfWZvcihsZXQgbyBvZiByLmVmZmVjdHMpby5pcyhlKSYmKG49by52YWx1ZSksby5pcyhybikmJihuPW51bGwpO3JldHVybiBufSxwcm92aWRlOm49PnF0LmZyb20obil9KTtyZXR1cm5baSxWLmRlZmluZShuPT5uZXcgZmkobixzLGksZSx0LmhvdmVyVGltZXx8MzAwKSkscXJdfWZ1bmN0aW9uIHVvKHMsdCl7bGV0IGU9cy5wbHVnaW4odmkpO2lmKCFlKXJldHVybiBudWxsO2xldCBpPWUubWFuYWdlci50b29sdGlwcy5pbmRleE9mKHQpO3JldHVybiBpPDA/bnVsbDplLm1hbmFnZXIudG9vbHRpcFZpZXdzW2ldfWZ1bmN0aW9uIHBvKHMpe3JldHVybiBzLmZhY2V0KHF0KS5zb21lKHQ9PnQpfXZhciBybj1qdC5kZWZpbmUoKSxtbz1ybi5vZihudWxsKTtmdW5jdGlvbiBnbyhzKXt2YXIgdDsodD1zLnBsdWdpbih2aSkpPT09bnVsbHx8dD09PXZvaWQgMHx8dC5tYXliZU1lYXN1cmUoKX12YXIgZGk9Qy5kZWZpbmUoe2NvbWJpbmUocyl7bGV0IHQsZTtmb3IobGV0IGkgb2Ygcyl0PXR8fGkudG9wQ29udGFpbmVyLGU9ZXx8aS5ib3R0b21Db250YWluZXI7cmV0dXJue3RvcENvbnRhaW5lcjp0LGJvdHRvbUNvbnRhaW5lcjplfX19KTtmdW5jdGlvbiBibyhzKXtyZXR1cm4gcz9bZGkub2YocyldOltdfWZ1bmN0aW9uIHlvKHMsdCl7bGV0IGU9cy5wbHVnaW4ob24pLGk9ZT9lLnNwZWNzLmluZGV4T2YodCk6LTE7cmV0dXJuIGk+LTE/ZS5wYW5lbHNbaV06bnVsbH12YXIgb249Vi5mcm9tQ2xhc3MoY2xhc3N7Y29uc3RydWN0b3Iocyl7dGhpcy5pbnB1dD1zLnN0YXRlLmZhY2V0KG5zKSx0aGlzLnNwZWNzPXRoaXMuaW5wdXQuZmlsdGVyKGU9PmUpLHRoaXMucGFuZWxzPXRoaXMuc3BlY3MubWFwKGU9PmUocykpO2xldCB0PXMuc3RhdGUuZmFjZXQoZGkpO3RoaXMudG9wPW5ldyBwdChzLCEwLHQudG9wQ29udGFpbmVyKSx0aGlzLmJvdHRvbT1uZXcgcHQocywhMSx0LmJvdHRvbUNvbnRhaW5lciksdGhpcy50b3Auc3luYyh0aGlzLnBhbmVscy5maWx0ZXIoZT0+ZS50b3ApKSx0aGlzLmJvdHRvbS5zeW5jKHRoaXMucGFuZWxzLmZpbHRlcihlPT4hZS50b3ApKTtmb3IobGV0IGUgb2YgdGhpcy5wYW5lbHMpZS5kb20uY2xhc3NMaXN0LmFkZChcImNtLXBhbmVsXCIpLGUubW91bnQmJmUubW91bnQoKX11cGRhdGUocyl7bGV0IHQ9cy5zdGF0ZS5mYWNldChkaSk7dGhpcy50b3AuY29udGFpbmVyIT10LnRvcENvbnRhaW5lciYmKHRoaXMudG9wLnN5bmMoW10pLHRoaXMudG9wPW5ldyBwdChzLnZpZXcsITAsdC50b3BDb250YWluZXIpKSx0aGlzLmJvdHRvbS5jb250YWluZXIhPXQuYm90dG9tQ29udGFpbmVyJiYodGhpcy5ib3R0b20uc3luYyhbXSksdGhpcy5ib3R0b209bmV3IHB0KHMudmlldywhMSx0LmJvdHRvbUNvbnRhaW5lcikpLHRoaXMudG9wLnN5bmNDbGFzc2VzKCksdGhpcy5ib3R0b20uc3luY0NsYXNzZXMoKTtsZXQgZT1zLnN0YXRlLmZhY2V0KG5zKTtpZihlIT10aGlzLmlucHV0KXtsZXQgaT1lLmZpbHRlcihoPT5oKSxuPVtdLHI9W10sbz1bXSxsPVtdO2ZvcihsZXQgaCBvZiBpKXtsZXQgYT10aGlzLnNwZWNzLmluZGV4T2YoaCksYzthPDA/KGM9aChzLnZpZXcpLGwucHVzaChjKSk6KGM9dGhpcy5wYW5lbHNbYV0sYy51cGRhdGUmJmMudXBkYXRlKHMpKSxuLnB1c2goYyksKGMudG9wP3I6bykucHVzaChjKX10aGlzLnNwZWNzPWksdGhpcy5wYW5lbHM9bix0aGlzLnRvcC5zeW5jKHIpLHRoaXMuYm90dG9tLnN5bmMobyk7Zm9yKGxldCBoIG9mIGwpaC5kb20uY2xhc3NMaXN0LmFkZChcImNtLXBhbmVsXCIpLGgubW91bnQmJmgubW91bnQoKX1lbHNlIGZvcihsZXQgaSBvZiB0aGlzLnBhbmVscylpLnVwZGF0ZSYmaS51cGRhdGUocyl9ZGVzdHJveSgpe3RoaXMudG9wLnN5bmMoW10pLHRoaXMuYm90dG9tLnN5bmMoW10pfX0se3Byb3ZpZGU6cz0+TS5zY3JvbGxNYXJnaW5zLm9mKHQ9PntsZXQgZT10LnBsdWdpbihzKTtyZXR1cm4gZSYme3RvcDplLnRvcC5zY3JvbGxNYXJnaW4oKSxib3R0b206ZS5ib3R0b20uc2Nyb2xsTWFyZ2luKCl9fSl9KSxwdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy52aWV3PXQsdGhpcy50b3A9ZSx0aGlzLmNvbnRhaW5lcj1pLHRoaXMuZG9tPXZvaWQgMCx0aGlzLmNsYXNzZXM9XCJcIix0aGlzLnBhbmVscz1bXSx0aGlzLnN5bmNDbGFzc2VzKCl9c3luYyh0KXtmb3IobGV0IGUgb2YgdGhpcy5wYW5lbHMpZS5kZXN0cm95JiZ0LmluZGV4T2YoZSk8MCYmZS5kZXN0cm95KCk7dGhpcy5wYW5lbHM9dCx0aGlzLnN5bmNET00oKX1zeW5jRE9NKCl7aWYodGhpcy5wYW5lbHMubGVuZ3RoPT0wKXt0aGlzLmRvbSYmKHRoaXMuZG9tLnJlbW92ZSgpLHRoaXMuZG9tPXZvaWQgMCk7cmV0dXJufWlmKCF0aGlzLmRvbSl7dGhpcy5kb209ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLmRvbS5jbGFzc05hbWU9dGhpcy50b3A/XCJjbS1wYW5lbHMgY20tcGFuZWxzLXRvcFwiOlwiY20tcGFuZWxzIGNtLXBhbmVscy1ib3R0b21cIix0aGlzLmRvbS5zdHlsZVt0aGlzLnRvcD9cInRvcFwiOlwiYm90dG9tXCJdPVwiMFwiO2xldCBlPXRoaXMuY29udGFpbmVyfHx0aGlzLnZpZXcuZG9tO2UuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tLHRoaXMudG9wP2UuZmlyc3RDaGlsZDpudWxsKX1sZXQgdD10aGlzLmRvbS5maXJzdENoaWxkO2ZvcihsZXQgZSBvZiB0aGlzLnBhbmVscylpZihlLmRvbS5wYXJlbnROb2RlPT10aGlzLmRvbSl7Zm9yKDt0IT1lLmRvbTspdD1zcyh0KTt0PXQubmV4dFNpYmxpbmd9ZWxzZSB0aGlzLmRvbS5pbnNlcnRCZWZvcmUoZS5kb20sdCk7Zm9yKDt0Oyl0PXNzKHQpfXNjcm9sbE1hcmdpbigpe3JldHVybiF0aGlzLmRvbXx8dGhpcy5jb250YWluZXI/MDpNYXRoLm1heCgwLHRoaXMudG9wP3RoaXMuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbS1NYXRoLm1heCgwLHRoaXMudmlldy5zY3JvbGxET00uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKTpNYXRoLm1pbihpbm5lckhlaWdodCx0aGlzLnZpZXcuc2Nyb2xsRE9NLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSktdGhpcy5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKX1zeW5jQ2xhc3Nlcygpe2lmKCEoIXRoaXMuY29udGFpbmVyfHx0aGlzLmNsYXNzZXM9PXRoaXMudmlldy50aGVtZUNsYXNzZXMpKXtmb3IobGV0IHQgb2YgdGhpcy5jbGFzc2VzLnNwbGl0KFwiIFwiKSl0JiZ0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKHQpO2ZvcihsZXQgdCBvZih0aGlzLmNsYXNzZXM9dGhpcy52aWV3LnRoZW1lQ2xhc3Nlcykuc3BsaXQoXCIgXCIpKXQmJnRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQodCl9fX07ZnVuY3Rpb24gc3Mocyl7bGV0IHQ9cy5uZXh0U2libGluZztyZXR1cm4gcy5yZW1vdmUoKSx0fXZhciBucz1DLmRlZmluZSh7ZW5hYmxlczpvbn0pLEc9Y2xhc3MgZXh0ZW5kcyBsc3tjb21wYXJlKHQpe3JldHVybiB0aGlzPT10fHx0aGlzLmNvbnN0cnVjdG9yPT10LmNvbnN0cnVjdG9yJiZ0aGlzLmVxKHQpfWVxKHQpe3JldHVybiExfWRlc3Ryb3kodCl7fX07Ry5wcm90b3R5cGUuZWxlbWVudENsYXNzPVwiXCI7Ry5wcm90b3R5cGUudG9ET009dm9pZCAwO0cucHJvdG90eXBlLm1hcE1vZGU9Z3QuVHJhY2tCZWZvcmU7Ry5wcm90b3R5cGUuc3RhcnRTaWRlPUcucHJvdG90eXBlLmVuZFNpZGU9LTE7Ry5wcm90b3R5cGUucG9pbnQ9ITA7dmFyIGllPUMuZGVmaW5lKCksX3I9e2NsYXNzOlwiXCIscmVuZGVyRW1wdHlFbGVtZW50czohMSxlbGVtZW50U3R5bGU6XCJcIixtYXJrZXJzOigpPT5GLmVtcHR5LGxpbmVNYXJrZXI6KCk9Pm51bGwsbGluZU1hcmtlckNoYW5nZTpudWxsLGluaXRpYWxTcGFjZXI6bnVsbCx1cGRhdGVTcGFjZXI6bnVsbCxkb21FdmVudEhhbmRsZXJzOnt9fSxIdD1DLmRlZmluZSgpO2Z1bmN0aW9uIHdvKHMpe3JldHVybltsbigpLEh0Lm9mKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxfcikscykpXX12YXIgdWk9Qy5kZWZpbmUoe2NvbWJpbmU6cz0+cy5zb21lKHQ9PnQpfSk7ZnVuY3Rpb24gbG4ocyl7bGV0IHQ9WyRyXTtyZXR1cm4gcyYmcy5maXhlZD09PSExJiZ0LnB1c2godWkub2YoITApKSx0fXZhciAkcj1WLmZyb21DbGFzcyhjbGFzc3tjb25zdHJ1Y3RvcihzKXt0aGlzLnZpZXc9cyx0aGlzLnByZXZWaWV3cG9ydD1zLnZpZXdwb3J0LHRoaXMuZG9tPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy5kb20uY2xhc3NOYW1lPVwiY20tZ3V0dGVyc1wiLHRoaXMuZG9tLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLHRoaXMuZG9tLnN0eWxlLm1pbkhlaWdodD10aGlzLnZpZXcuY29udGVudEhlaWdodCtcInB4XCIsdGhpcy5ndXR0ZXJzPXMuc3RhdGUuZmFjZXQoSHQpLm1hcCh0PT5uZXcgd2Uocyx0KSk7Zm9yKGxldCB0IG9mIHRoaXMuZ3V0dGVycyl0aGlzLmRvbS5hcHBlbmRDaGlsZCh0LmRvbSk7dGhpcy5maXhlZD0hcy5zdGF0ZS5mYWNldCh1aSksdGhpcy5maXhlZCYmKHRoaXMuZG9tLnN0eWxlLnBvc2l0aW9uPVwic3RpY2t5XCIpLHRoaXMuc3luY0d1dHRlcnMoITEpLHMuc2Nyb2xsRE9NLmluc2VydEJlZm9yZSh0aGlzLmRvbSxzLmNvbnRlbnRET00pfXVwZGF0ZShzKXtpZih0aGlzLnVwZGF0ZUd1dHRlcnMocykpe2xldCB0PXRoaXMucHJldlZpZXdwb3J0LGU9cy52aWV3LnZpZXdwb3J0LGk9TWF0aC5taW4odC50byxlLnRvKS1NYXRoLm1heCh0LmZyb20sZS5mcm9tKTt0aGlzLnN5bmNHdXR0ZXJzKGk8KGUudG8tZS5mcm9tKSouOCl9cy5nZW9tZXRyeUNoYW5nZWQmJih0aGlzLmRvbS5zdHlsZS5taW5IZWlnaHQ9dGhpcy52aWV3LmNvbnRlbnRIZWlnaHQrXCJweFwiKSx0aGlzLnZpZXcuc3RhdGUuZmFjZXQodWkpIT0hdGhpcy5maXhlZCYmKHRoaXMuZml4ZWQ9IXRoaXMuZml4ZWQsdGhpcy5kb20uc3R5bGUucG9zaXRpb249dGhpcy5maXhlZD9cInN0aWNreVwiOlwiXCIpLHRoaXMucHJldlZpZXdwb3J0PXMudmlldy52aWV3cG9ydH1zeW5jR3V0dGVycyhzKXtsZXQgdD10aGlzLmRvbS5uZXh0U2libGluZztzJiZ0aGlzLmRvbS5yZW1vdmUoKTtsZXQgZT1GLml0ZXIodGhpcy52aWV3LnN0YXRlLmZhY2V0KGllKSx0aGlzLnZpZXcudmlld3BvcnQuZnJvbSksaT1bXSxuPXRoaXMuZ3V0dGVycy5tYXAocj0+bmV3IHBpKHIsdGhpcy52aWV3LnZpZXdwb3J0LC10aGlzLnZpZXcuZG9jdW1lbnRQYWRkaW5nLnRvcCkpO2ZvcihsZXQgciBvZiB0aGlzLnZpZXcudmlld3BvcnRMaW5lQmxvY2tzKXtsZXQgbztpZihBcnJheS5pc0FycmF5KHIudHlwZSkpe2ZvcihsZXQgbCBvZiByLnR5cGUpaWYobC50eXBlPT1ULlRleHQpe289bDticmVha319ZWxzZSBvPXIudHlwZT09VC5UZXh0P3I6dm9pZCAwO2lmKCEhbyl7aS5sZW5ndGgmJihpPVtdKSxobihlLGksci5mcm9tKTtmb3IobGV0IGwgb2YgbilsLmxpbmUodGhpcy52aWV3LG8saSl9fWZvcihsZXQgciBvZiBuKXIuZmluaXNoKCk7cyYmdGhpcy52aWV3LnNjcm9sbERPTS5pbnNlcnRCZWZvcmUodGhpcy5kb20sdCl9dXBkYXRlR3V0dGVycyhzKXtsZXQgdD1zLnN0YXJ0U3RhdGUuZmFjZXQoSHQpLGU9cy5zdGF0ZS5mYWNldChIdCksaT1zLmRvY0NoYW5nZWR8fHMuaGVpZ2h0Q2hhbmdlZHx8cy52aWV3cG9ydENoYW5nZWR8fCFGLmVxKHMuc3RhcnRTdGF0ZS5mYWNldChpZSkscy5zdGF0ZS5mYWNldChpZSkscy52aWV3LnZpZXdwb3J0LmZyb20scy52aWV3LnZpZXdwb3J0LnRvKTtpZih0PT1lKWZvcihsZXQgbiBvZiB0aGlzLmd1dHRlcnMpbi51cGRhdGUocykmJihpPSEwKTtlbHNle2k9ITA7bGV0IG49W107Zm9yKGxldCByIG9mIGUpe2xldCBvPXQuaW5kZXhPZihyKTtvPDA/bi5wdXNoKG5ldyB3ZSh0aGlzLnZpZXcscikpOih0aGlzLmd1dHRlcnNbb10udXBkYXRlKHMpLG4ucHVzaCh0aGlzLmd1dHRlcnNbb10pKX1mb3IobGV0IHIgb2YgdGhpcy5ndXR0ZXJzKXIuZG9tLnJlbW92ZSgpLG4uaW5kZXhPZihyKTwwJiZyLmRlc3Ryb3koKTtmb3IobGV0IHIgb2Ygbil0aGlzLmRvbS5hcHBlbmRDaGlsZChyLmRvbSk7dGhpcy5ndXR0ZXJzPW59cmV0dXJuIGl9ZGVzdHJveSgpe2ZvcihsZXQgcyBvZiB0aGlzLmd1dHRlcnMpcy5kZXN0cm95KCk7dGhpcy5kb20ucmVtb3ZlKCl9fSx7cHJvdmlkZTpzPT5NLnNjcm9sbE1hcmdpbnMub2YodD0+e2xldCBlPXQucGx1Z2luKHMpO3JldHVybiFlfHxlLmd1dHRlcnMubGVuZ3RoPT0wfHwhZS5maXhlZD9udWxsOnQudGV4dERpcmVjdGlvbj09Ui5MVFI/e2xlZnQ6ZS5kb20ub2Zmc2V0V2lkdGh9OntyaWdodDplLmRvbS5vZmZzZXRXaWR0aH19KX0pO2Z1bmN0aW9uIHJzKHMpe3JldHVybiBBcnJheS5pc0FycmF5KHMpP3M6W3NdfWZ1bmN0aW9uIGhuKHMsdCxlKXtmb3IoO3MudmFsdWUmJnMuZnJvbTw9ZTspcy5mcm9tPT1lJiZ0LnB1c2gocy52YWx1ZSkscy5uZXh0KCl9dmFyIHBpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmd1dHRlcj10LHRoaXMuaGVpZ2h0PWksdGhpcy5sb2NhbE1hcmtlcnM9W10sdGhpcy5pPTAsdGhpcy5jdXJzb3I9Ri5pdGVyKHQubWFya2VycyxlLmZyb20pfWxpbmUodCxlLGkpe3RoaXMubG9jYWxNYXJrZXJzLmxlbmd0aCYmKHRoaXMubG9jYWxNYXJrZXJzPVtdKSxobih0aGlzLmN1cnNvcix0aGlzLmxvY2FsTWFya2VycyxlLmZyb20pO2xldCBuPWkubGVuZ3RoP3RoaXMubG9jYWxNYXJrZXJzLmNvbmNhdChpKTp0aGlzLmxvY2FsTWFya2VycyxyPXRoaXMuZ3V0dGVyLmNvbmZpZy5saW5lTWFya2VyKHQsZSxuKTtyJiZuLnVuc2hpZnQocik7bGV0IG89dGhpcy5ndXR0ZXI7aWYobi5sZW5ndGg9PTAmJiFvLmNvbmZpZy5yZW5kZXJFbXB0eUVsZW1lbnRzKXJldHVybjtsZXQgbD1lLnRvcC10aGlzLmhlaWdodDtpZih0aGlzLmk9PW8uZWxlbWVudHMubGVuZ3RoKXtsZXQgaD1uZXcgdmUodCxlLmhlaWdodCxsLG4pO28uZWxlbWVudHMucHVzaChoKSxvLmRvbS5hcHBlbmRDaGlsZChoLmRvbSl9ZWxzZSBvLmVsZW1lbnRzW3RoaXMuaV0udXBkYXRlKHQsZS5oZWlnaHQsbCxuKTt0aGlzLmhlaWdodD1lLmJvdHRvbSx0aGlzLmkrK31maW5pc2goKXtsZXQgdD10aGlzLmd1dHRlcjtmb3IoO3QuZWxlbWVudHMubGVuZ3RoPnRoaXMuaTspe2xldCBlPXQuZWxlbWVudHMucG9wKCk7dC5kb20ucmVtb3ZlQ2hpbGQoZS5kb20pLGUuZGVzdHJveSgpfX19LHdlPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52aWV3PXQsdGhpcy5jb25maWc9ZSx0aGlzLmVsZW1lbnRzPVtdLHRoaXMuc3BhY2VyPW51bGwsdGhpcy5kb209ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLmRvbS5jbGFzc05hbWU9XCJjbS1ndXR0ZXJcIisodGhpcy5jb25maWcuY2xhc3M/XCIgXCIrdGhpcy5jb25maWcuY2xhc3M6XCJcIik7Zm9yKGxldCBpIGluIGUuZG9tRXZlbnRIYW5kbGVycyl0aGlzLmRvbS5hZGRFdmVudExpc3RlbmVyKGksbj0+e2xldCByPXQubGluZUJsb2NrQXRIZWlnaHQobi5jbGllbnRZLXQuZG9jdW1lbnRUb3ApO2UuZG9tRXZlbnRIYW5kbGVyc1tpXSh0LHIsbikmJm4ucHJldmVudERlZmF1bHQoKX0pO3RoaXMubWFya2Vycz1ycyhlLm1hcmtlcnModCkpLGUuaW5pdGlhbFNwYWNlciYmKHRoaXMuc3BhY2VyPW5ldyB2ZSh0LDAsMCxbZS5pbml0aWFsU3BhY2VyKHQpXSksdGhpcy5kb20uYXBwZW5kQ2hpbGQodGhpcy5zcGFjZXIuZG9tKSx0aGlzLnNwYWNlci5kb20uc3R5bGUuY3NzVGV4dCs9XCJ2aXNpYmlsaXR5OiBoaWRkZW47IHBvaW50ZXItZXZlbnRzOiBub25lXCIpfXVwZGF0ZSh0KXtsZXQgZT10aGlzLm1hcmtlcnM7aWYodGhpcy5tYXJrZXJzPXJzKHRoaXMuY29uZmlnLm1hcmtlcnModC52aWV3KSksdGhpcy5zcGFjZXImJnRoaXMuY29uZmlnLnVwZGF0ZVNwYWNlcil7bGV0IG49dGhpcy5jb25maWcudXBkYXRlU3BhY2VyKHRoaXMuc3BhY2VyLm1hcmtlcnNbMF0sdCk7biE9dGhpcy5zcGFjZXIubWFya2Vyc1swXSYmdGhpcy5zcGFjZXIudXBkYXRlKHQudmlldywwLDAsW25dKX1sZXQgaT10LnZpZXcudmlld3BvcnQ7cmV0dXJuIUYuZXEodGhpcy5tYXJrZXJzLGUsaS5mcm9tLGkudG8pfHwodGhpcy5jb25maWcubGluZU1hcmtlckNoYW5nZT90aGlzLmNvbmZpZy5saW5lTWFya2VyQ2hhbmdlKHQpOiExKX1kZXN0cm95KCl7Zm9yKGxldCB0IG9mIHRoaXMuZWxlbWVudHMpdC5kZXN0cm95KCl9fSx2ZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxuKXt0aGlzLmhlaWdodD0tMSx0aGlzLmFib3ZlPTAsdGhpcy5tYXJrZXJzPVtdLHRoaXMuZG9tPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy5kb20uY2xhc3NOYW1lPVwiY20tZ3V0dGVyRWxlbWVudFwiLHRoaXMudXBkYXRlKHQsZSxpLG4pfXVwZGF0ZSh0LGUsaSxuKXt0aGlzLmhlaWdodCE9ZSYmKHRoaXMuZG9tLnN0eWxlLmhlaWdodD0odGhpcy5oZWlnaHQ9ZSkrXCJweFwiKSx0aGlzLmFib3ZlIT1pJiYodGhpcy5kb20uc3R5bGUubWFyZ2luVG9wPSh0aGlzLmFib3ZlPWkpP2krXCJweFwiOlwiXCIpLEdyKHRoaXMubWFya2VycyxuKXx8dGhpcy5zZXRNYXJrZXJzKHQsbil9c2V0TWFya2Vycyh0LGUpe2xldCBpPVwiY20tZ3V0dGVyRWxlbWVudFwiLG49dGhpcy5kb20uZmlyc3RDaGlsZDtmb3IobGV0IHI9MCxvPTA7Oyl7bGV0IGw9byxoPXI8ZS5sZW5ndGg/ZVtyKytdOm51bGwsYT0hMTtpZihoKXtsZXQgYz1oLmVsZW1lbnRDbGFzcztjJiYoaSs9XCIgXCIrYyk7Zm9yKGxldCBmPW87Zjx0aGlzLm1hcmtlcnMubGVuZ3RoO2YrKylpZih0aGlzLm1hcmtlcnNbZl0uY29tcGFyZShoKSl7bD1mLGE9ITA7YnJlYWt9fWVsc2UgbD10aGlzLm1hcmtlcnMubGVuZ3RoO2Zvcig7bzxsOyl7bGV0IGM9dGhpcy5tYXJrZXJzW28rK107aWYoYy50b0RPTSl7Yy5kZXN0cm95KG4pO2xldCBmPW4ubmV4dFNpYmxpbmc7bi5yZW1vdmUoKSxuPWZ9fWlmKCFoKWJyZWFrO2gudG9ET00mJihhP249bi5uZXh0U2libGluZzp0aGlzLmRvbS5pbnNlcnRCZWZvcmUoaC50b0RPTSh0KSxuKSksYSYmbysrfXRoaXMuZG9tLmNsYXNzTmFtZT1pLHRoaXMubWFya2Vycz1lfWRlc3Ryb3koKXt0aGlzLnNldE1hcmtlcnMobnVsbCxbXSl9fTtmdW5jdGlvbiBHcihzLHQpe2lmKHMubGVuZ3RoIT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPHMubGVuZ3RoO2UrKylpZighc1tlXS5jb21wYXJlKHRbZV0pKXJldHVybiExO3JldHVybiEwfXZhciBZcj1DLmRlZmluZSgpLG10PUMuZGVmaW5lKHtjb21iaW5lKHMpe3JldHVybiBnaShzLHtmb3JtYXROdW1iZXI6U3RyaW5nLGRvbUV2ZW50SGFuZGxlcnM6e319LHtkb21FdmVudEhhbmRsZXJzKHQsZSl7bGV0IGk9T2JqZWN0LmFzc2lnbih7fSx0KTtmb3IobGV0IG4gaW4gZSl7bGV0IHI9aVtuXSxvPWVbbl07aVtuXT1yPyhsLGgsYSk9PnIobCxoLGEpfHxvKGwsaCxhKTpvfXJldHVybiBpfX0pfX0pLE50PWNsYXNzIGV4dGVuZHMgR3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubnVtYmVyPXR9ZXEodCl7cmV0dXJuIHRoaXMubnVtYmVyPT10Lm51bWJlcn10b0RPTSgpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLm51bWJlcil9fTtmdW5jdGlvbiBSZShzLHQpe3JldHVybiBzLnN0YXRlLmZhY2V0KG10KS5mb3JtYXROdW1iZXIodCxzLnN0YXRlKX12YXIgWHI9SHQuY29tcHV0ZShbbXRdLHM9Pih7Y2xhc3M6XCJjbS1saW5lTnVtYmVyc1wiLHJlbmRlckVtcHR5RWxlbWVudHM6ITEsbWFya2Vycyh0KXtyZXR1cm4gdC5zdGF0ZS5mYWNldChZcil9LGxpbmVNYXJrZXIodCxlLGkpe3JldHVybiBpLnNvbWUobj0+bi50b0RPTSk/bnVsbDpuZXcgTnQoUmUodCx0LnN0YXRlLmRvYy5saW5lQXQoZS5mcm9tKS5udW1iZXIpKX0sbGluZU1hcmtlckNoYW5nZTp0PT50LnN0YXJ0U3RhdGUuZmFjZXQobXQpIT10LnN0YXRlLmZhY2V0KG10KSxpbml0aWFsU3BhY2VyKHQpe3JldHVybiBuZXcgTnQoUmUodCxvcyh0LnN0YXRlLmRvYy5saW5lcykpKX0sdXBkYXRlU3BhY2VyKHQsZSl7bGV0IGk9UmUoZS52aWV3LG9zKGUudmlldy5zdGF0ZS5kb2MubGluZXMpKTtyZXR1cm4gaT09dC5udW1iZXI/dDpuZXcgTnQoaSl9LGRvbUV2ZW50SGFuZGxlcnM6cy5mYWNldChtdCkuZG9tRXZlbnRIYW5kbGVyc30pKTtmdW5jdGlvbiB2byhzPXt9KXtyZXR1cm5bbXQub2YocyksbG4oKSxYcl19ZnVuY3Rpb24gb3Mocyl7bGV0IHQ9OTtmb3IoO3Q8czspdD10KjEwKzk7cmV0dXJuIHR9dmFyIFVyPW5ldyBjbGFzcyBleHRlbmRzIEd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZWxlbWVudENsYXNzPVwiY20tYWN0aXZlTGluZUd1dHRlclwifX0sSnI9aWUuY29tcHV0ZShbXCJzZWxlY3Rpb25cIl0scz0+e2xldCB0PVtdLGU9LTE7Zm9yKGxldCBpIG9mIHMuc2VsZWN0aW9uLnJhbmdlcyl7bGV0IG49cy5kb2MubGluZUF0KGkuaGVhZCkuZnJvbTtuPmUmJihlPW4sdC5wdXNoKFVyLnJhbmdlKG4pKSl9cmV0dXJuIEYub2YodCl9KTtmdW5jdGlvbiB4bygpe3JldHVybiBKcn12YXIgU289e0hlaWdodE1hcDpOLEhlaWdodE9yYWNsZTp1ZSxNZWFzdXJlZEhlaWdodHM6cGUsUXVlcnlUeXBlOkQsQ2hhbmdlZFJhbmdlOkksY29tcHV0ZU9yZGVyOlBzLG1vdmVWaXN1YWxseTpWc307ZXhwb3J0e3J0IGFzIEJpZGlTcGFuLF8gYXMgQmxvY2tJbmZvLFQgYXMgQmxvY2tUeXBlLGsgYXMgRGVjb3JhdGlvbixSIGFzIERpcmVjdGlvbixNIGFzIEVkaXRvclZpZXcsRyBhcyBHdXR0ZXJNYXJrZXIscmkgYXMgTWF0Y2hEZWNvcmF0b3IsViBhcyBWaWV3UGx1Z2luLFN0IGFzIFZpZXdVcGRhdGUsWCBhcyBXaWRnZXRUeXBlLFNvIGFzIF9fdGVzdCxtbyBhcyBjbG9zZUhvdmVyVG9vbHRpcHMsYW8gYXMgY3Jvc3NoYWlyQ3Vyc29yLGlvIGFzIGRyYXdTZWxlY3Rpb24sc28gYXMgZHJvcEN1cnNvcix5byBhcyBnZXRQYW5lbCx1byBhcyBnZXRUb29sdGlwLHdvIGFzIGd1dHRlcixpZSBhcyBndXR0ZXJMaW5lQ2xhc3MsbG4gYXMgZ3V0dGVycyxwbyBhcyBoYXNIb3ZlclRvb2x0aXBzLG9vIGFzIGhpZ2hsaWdodEFjdGl2ZUxpbmUseG8gYXMgaGlnaGxpZ2h0QWN0aXZlTGluZUd1dHRlcixubyBhcyBoaWdobGlnaHRTcGVjaWFsQ2hhcnMsZm8gYXMgaG92ZXJUb29sdGlwLGJyIGFzIGtleW1hcCxZciBhcyBsaW5lTnVtYmVyTWFya2Vycyx2byBhcyBsaW5lTnVtYmVycyxudCBhcyBsb2dFeGNlcHRpb24sYm8gYXMgcGFuZWxzLGxvIGFzIHBsYWNlaG9sZGVyLGhvIGFzIHJlY3Rhbmd1bGFyU2VsZWN0aW9uLGdvIGFzIHJlcG9zaXRpb25Ub29sdGlwcyxlbyBhcyBydW5TY29wZUhhbmRsZXJzLHJvIGFzIHNjcm9sbFBhc3RFbmQsbnMgYXMgc2hvd1BhbmVsLG5uIGFzIHNob3dUb29sdGlwLGNvIGFzIHRvb2x0aXBzfTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShAbGV6ZXIvY29tbW9uQDEuMC4xKSBkZW5vIHByb2R1Y3Rpb24gKi9cbnZhciBJZT0xMDI0LENlPTAsQj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZnJvbT1lLHRoaXMudG89dH19LHc9Y2xhc3N7Y29uc3RydWN0b3IoZT17fSl7dGhpcy5pZD1DZSsrLHRoaXMucGVyTm9kZT0hIWUucGVyTm9kZSx0aGlzLmRlc2VyaWFsaXplPWUuZGVzZXJpYWxpemV8fCgoKT0+e3Rocm93IG5ldyBFcnJvcihcIlRoaXMgbm9kZSB0eXBlIGRvZXNuJ3QgZGVmaW5lIGEgZGVzZXJpYWxpemUgZnVuY3Rpb25cIil9KX1hZGQoZSl7aWYodGhpcy5wZXJOb2RlKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuJ3QgYWRkIHBlci1ub2RlIHByb3BzIHRvIG5vZGUgdHlwZXNcIik7cmV0dXJuIHR5cGVvZiBlIT1cImZ1bmN0aW9uXCImJihlPU4ubWF0Y2goZSkpLHQ9PntsZXQgcj1lKHQpO3JldHVybiByPT09dm9pZCAwP251bGw6W3RoaXMscl19fX07dy5jbG9zZWRCeT1uZXcgdyh7ZGVzZXJpYWxpemU6aD0+aC5zcGxpdChcIiBcIil9KTt3Lm9wZW5lZEJ5PW5ldyB3KHtkZXNlcmlhbGl6ZTpoPT5oLnNwbGl0KFwiIFwiKX0pO3cuZ3JvdXA9bmV3IHcoe2Rlc2VyaWFsaXplOmg9Pmguc3BsaXQoXCIgXCIpfSk7dy5jb250ZXh0SGFzaD1uZXcgdyh7cGVyTm9kZTohMH0pO3cubG9va0FoZWFkPW5ldyB3KHtwZXJOb2RlOiEwfSk7dy5tb3VudGVkPW5ldyB3KHtwZXJOb2RlOiEwfSk7dmFyIG5lPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLnRyZWU9ZSx0aGlzLm92ZXJsYXk9dCx0aGlzLnBhcnNlcj1yfX0sX2U9T2JqZWN0LmNyZWF0ZShudWxsKSxOPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLGk9MCl7dGhpcy5uYW1lPWUsdGhpcy5wcm9wcz10LHRoaXMuaWQ9cix0aGlzLmZsYWdzPWl9c3RhdGljIGRlZmluZShlKXtsZXQgdD1lLnByb3BzJiZlLnByb3BzLmxlbmd0aD9PYmplY3QuY3JlYXRlKG51bGwpOl9lLHI9KGUudG9wPzE6MCl8KGUuc2tpcHBlZD8yOjApfChlLmVycm9yPzQ6MCl8KGUubmFtZT09bnVsbD84OjApLGk9bmV3IE4oZS5uYW1lfHxcIlwiLHQsZS5pZCxyKTtpZihlLnByb3BzKXtmb3IobGV0IG4gb2YgZS5wcm9wcylpZihBcnJheS5pc0FycmF5KG4pfHwobj1uKGkpKSxuKXtpZihuWzBdLnBlck5vZGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDYW4ndCBzdG9yZSBhIHBlci1ub2RlIHByb3Agb24gYSBub2RlIHR5cGVcIik7dFtuWzBdLmlkXT1uWzFdfX1yZXR1cm4gaX1wcm9wKGUpe3JldHVybiB0aGlzLnByb3BzW2UuaWRdfWdldCBpc1RvcCgpe3JldHVybih0aGlzLmZsYWdzJjEpPjB9Z2V0IGlzU2tpcHBlZCgpe3JldHVybih0aGlzLmZsYWdzJjIpPjB9Z2V0IGlzRXJyb3IoKXtyZXR1cm4odGhpcy5mbGFncyY0KT4wfWdldCBpc0Fub255bW91cygpe3JldHVybih0aGlzLmZsYWdzJjgpPjB9aXMoZSl7aWYodHlwZW9mIGU9PVwic3RyaW5nXCIpe2lmKHRoaXMubmFtZT09ZSlyZXR1cm4hMDtsZXQgdD10aGlzLnByb3Aody5ncm91cCk7cmV0dXJuIHQ/dC5pbmRleE9mKGUpPi0xOiExfXJldHVybiB0aGlzLmlkPT1lfXN0YXRpYyBtYXRjaChlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgciBpbiBlKWZvcihsZXQgaSBvZiByLnNwbGl0KFwiIFwiKSl0W2ldPWVbcl07cmV0dXJuIHI9Pntmb3IobGV0IGk9ci5wcm9wKHcuZ3JvdXApLG49LTE7bjwoaT9pLmxlbmd0aDowKTtuKyspe2xldCBzPXRbbjwwP3IubmFtZTppW25dXTtpZihzKXJldHVybiBzfX19fTtOLm5vbmU9bmV3IE4oXCJcIixPYmplY3QuY3JlYXRlKG51bGwpLDAsOCk7dmFyIFo9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy50eXBlcz1lO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKGVbdF0uaWQhPXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJOb2RlIHR5cGUgaWRzIHNob3VsZCBjb3JyZXNwb25kIHRvIGFycmF5IHBvc2l0aW9ucyB3aGVuIGNyZWF0aW5nIGEgbm9kZSBzZXRcIil9ZXh0ZW5kKC4uLmUpe2xldCB0PVtdO2ZvcihsZXQgciBvZiB0aGlzLnR5cGVzKXtsZXQgaT1udWxsO2ZvcihsZXQgbiBvZiBlKXtsZXQgcz1uKHIpO3MmJihpfHwoaT1PYmplY3QuYXNzaWduKHt9LHIucHJvcHMpKSxpW3NbMF0uaWRdPXNbMV0pfXQucHVzaChpP25ldyBOKHIubmFtZSxpLHIuaWQsci5mbGFncyk6cil9cmV0dXJuIG5ldyBaKHQpfX0sWD1uZXcgV2Vha01hcCxnZT1uZXcgV2Vha01hcCxBOyhmdW5jdGlvbihoKXtoW2guRXhjbHVkZUJ1ZmZlcnM9MV09XCJFeGNsdWRlQnVmZmVyc1wiLGhbaC5JbmNsdWRlQW5vbnltb3VzPTJdPVwiSW5jbHVkZUFub255bW91c1wiLGhbaC5JZ25vcmVNb3VudHM9NF09XCJJZ25vcmVNb3VudHNcIixoW2guSWdub3JlT3ZlcmxheXM9OF09XCJJZ25vcmVPdmVybGF5c1wifSkoQXx8KEE9e30pKTt2YXIgUD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixpLG4pe2lmKHRoaXMudHlwZT1lLHRoaXMuY2hpbGRyZW49dCx0aGlzLnBvc2l0aW9ucz1yLHRoaXMubGVuZ3RoPWksdGhpcy5wcm9wcz1udWxsLG4mJm4ubGVuZ3RoKXt0aGlzLnByb3BzPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldFtzLGxdb2Ygbil0aGlzLnByb3BzW3R5cGVvZiBzPT1cIm51bWJlclwiP3M6cy5pZF09bH19dG9TdHJpbmcoKXtsZXQgZT10aGlzLnByb3Aody5tb3VudGVkKTtpZihlJiYhZS5vdmVybGF5KXJldHVybiBlLnRyZWUudG9TdHJpbmcoKTtsZXQgdD1cIlwiO2ZvcihsZXQgciBvZiB0aGlzLmNoaWxkcmVuKXtsZXQgaT1yLnRvU3RyaW5nKCk7aSYmKHQmJih0Kz1cIixcIiksdCs9aSl9cmV0dXJuIHRoaXMudHlwZS5uYW1lPygvXFxXLy50ZXN0KHRoaXMudHlwZS5uYW1lKSYmIXRoaXMudHlwZS5pc0Vycm9yP0pTT04uc3RyaW5naWZ5KHRoaXMudHlwZS5uYW1lKTp0aGlzLnR5cGUubmFtZSkrKHQubGVuZ3RoP1wiKFwiK3QrXCIpXCI6XCJcIik6dH1jdXJzb3IoZT0wKXtyZXR1cm4gbmV3IFYodGhpcy50b3BOb2RlLGUpfWN1cnNvckF0KGUsdD0wLHI9MCl7bGV0IGk9WC5nZXQodGhpcyl8fHRoaXMudG9wTm9kZSxuPW5ldyBWKGkpO3JldHVybiBuLm1vdmVUbyhlLHQpLFguc2V0KHRoaXMsbi5fdHJlZSksbn1nZXQgdG9wTm9kZSgpe3JldHVybiBuZXcgSSh0aGlzLDAsMCxudWxsKX1yZXNvbHZlKGUsdD0wKXtsZXQgcj1xKFguZ2V0KHRoaXMpfHx0aGlzLnRvcE5vZGUsZSx0LCExKTtyZXR1cm4gWC5zZXQodGhpcyxyKSxyfXJlc29sdmVJbm5lcihlLHQ9MCl7bGV0IHI9cShnZS5nZXQodGhpcyl8fHRoaXMudG9wTm9kZSxlLHQsITApO3JldHVybiBnZS5zZXQodGhpcyxyKSxyfWl0ZXJhdGUoZSl7bGV0e2VudGVyOnQsbGVhdmU6cixmcm9tOmk9MCx0bzpuPXRoaXMubGVuZ3RofT1lO2ZvcihsZXQgcz10aGlzLmN1cnNvcigoZS5tb2RlfHwwKXxBLkluY2x1ZGVBbm9ueW1vdXMpOzspe2xldCBsPSExO2lmKHMuZnJvbTw9biYmcy50bz49aSYmKHMudHlwZS5pc0Fub255bW91c3x8dChzKSE9PSExKSl7aWYocy5maXJzdENoaWxkKCkpY29udGludWU7bD0hMH1mb3IoO2wmJnImJiFzLnR5cGUuaXNBbm9ueW1vdXMmJnIocyksIXMubmV4dFNpYmxpbmcoKTspe2lmKCFzLnBhcmVudCgpKXJldHVybjtsPSEwfX19cHJvcChlKXtyZXR1cm4gZS5wZXJOb2RlP3RoaXMucHJvcHM/dGhpcy5wcm9wc1tlLmlkXTp2b2lkIDA6dGhpcy50eXBlLnByb3AoZSl9Z2V0IHByb3BWYWx1ZXMoKXtsZXQgZT1bXTtpZih0aGlzLnByb3BzKWZvcihsZXQgdCBpbiB0aGlzLnByb3BzKWUucHVzaChbK3QsdGhpcy5wcm9wc1t0XV0pO3JldHVybiBlfWJhbGFuY2UoZT17fSl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPD04P3RoaXM6cGUoTi5ub25lLHRoaXMuY2hpbGRyZW4sdGhpcy5wb3NpdGlvbnMsMCx0aGlzLmNoaWxkcmVuLmxlbmd0aCwwLHRoaXMubGVuZ3RoLCh0LHIsaSk9Pm5ldyBQKHRoaXMudHlwZSx0LHIsaSx0aGlzLnByb3BWYWx1ZXMpLGUubWFrZVRyZWV8fCgodCxyLGkpPT5uZXcgUChOLm5vbmUsdCxyLGkpKSl9c3RhdGljIGJ1aWxkKGUpe3JldHVybiBTZShlKX19O1AuZW1wdHk9bmV3IFAoTi5ub25lLFtdLFtdLDApO3ZhciBLPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5idWZmZXI9ZSx0aGlzLmluZGV4PXR9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtNF19Z2V0IHN0YXJ0KCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtM119Z2V0IGVuZCgpe3JldHVybiB0aGlzLmJ1ZmZlclt0aGlzLmluZGV4LTJdfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtMV19Z2V0IHBvcygpe3JldHVybiB0aGlzLmluZGV4fW5leHQoKXt0aGlzLmluZGV4LT00fWZvcmsoKXtyZXR1cm4gbmV3IEsodGhpcy5idWZmZXIsdGhpcy5pbmRleCl9fSxUPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLmJ1ZmZlcj1lLHRoaXMubGVuZ3RoPXQsdGhpcy5zZXQ9cn1nZXQgdHlwZSgpe3JldHVybiBOLm5vbmV9dG9TdHJpbmcoKXtsZXQgZT1bXTtmb3IobGV0IHQ9MDt0PHRoaXMuYnVmZmVyLmxlbmd0aDspZS5wdXNoKHRoaXMuY2hpbGRTdHJpbmcodCkpLHQ9dGhpcy5idWZmZXJbdCszXTtyZXR1cm4gZS5qb2luKFwiLFwiKX1jaGlsZFN0cmluZyhlKXtsZXQgdD10aGlzLmJ1ZmZlcltlXSxyPXRoaXMuYnVmZmVyW2UrM10saT10aGlzLnNldC50eXBlc1t0XSxuPWkubmFtZTtpZigvXFxXLy50ZXN0KG4pJiYhaS5pc0Vycm9yJiYobj1KU09OLnN0cmluZ2lmeShuKSksZSs9NCxyPT1lKXJldHVybiBuO2xldCBzPVtdO2Zvcig7ZTxyOylzLnB1c2godGhpcy5jaGlsZFN0cmluZyhlKSksZT10aGlzLmJ1ZmZlcltlKzNdO3JldHVybiBuK1wiKFwiK3Muam9pbihcIixcIikrXCIpXCJ9ZmluZENoaWxkKGUsdCxyLGksbil7bGV0e2J1ZmZlcjpzfT10aGlzLGw9LTE7Zm9yKGxldCBmPWU7ZiE9dCYmIShrZShuLGksc1tmKzFdLHNbZisyXSkmJihsPWYscj4wKSk7Zj1zW2YrM10pO3JldHVybiBsfXNsaWNlKGUsdCxyLGkpe2xldCBuPXRoaXMuYnVmZmVyLHM9bmV3IFVpbnQxNkFycmF5KHQtZSk7Zm9yKGxldCBsPWUsZj0wO2w8dDspc1tmKytdPW5bbCsrXSxzW2YrK109bltsKytdLXIsc1tmKytdPW5bbCsrXS1yLHNbZisrXT1uW2wrK10tZTtyZXR1cm4gbmV3IFQocyxpLXIsdGhpcy5zZXQpfX07ZnVuY3Rpb24ga2UoaCxlLHQscil7c3dpdGNoKGgpe2Nhc2UtMjpyZXR1cm4gdDxlO2Nhc2UtMTpyZXR1cm4gcj49ZSYmdDxlO2Nhc2UgMDpyZXR1cm4gdDxlJiZyPmU7Y2FzZSAxOnJldHVybiB0PD1lJiZyPmU7Y2FzZSAyOnJldHVybiByPmU7Y2FzZSA0OnJldHVybiEwfX1mdW5jdGlvbiBBZShoLGUpe2xldCB0PWguY2hpbGRCZWZvcmUoZSk7Zm9yKDt0Oyl7bGV0IHI9dC5sYXN0Q2hpbGQ7aWYoIXJ8fHIudG8hPXQudG8pYnJlYWs7ci50eXBlLmlzRXJyb3ImJnIuZnJvbT09ci50bz8oaD10LHQ9ci5wcmV2U2libGluZyk6dD1yfXJldHVybiBofWZ1bmN0aW9uIHEoaCxlLHQscil7Zm9yKHZhciBpO2guZnJvbT09aC50b3x8KHQ8MT9oLmZyb20+PWU6aC5mcm9tPmUpfHwodD4tMT9oLnRvPD1lOmgudG88ZSk7KXtsZXQgcz0hciYmaCBpbnN0YW5jZW9mIEkmJmguaW5kZXg8MD9udWxsOmgucGFyZW50O2lmKCFzKXJldHVybiBoO2g9c31sZXQgbj1yPzA6QS5JZ25vcmVPdmVybGF5cztpZihyKWZvcihsZXQgcz1oLGw9cy5wYXJlbnQ7bDtzPWwsbD1zLnBhcmVudClzIGluc3RhbmNlb2YgSSYmcy5pbmRleDwwJiYoKGk9bC5lbnRlcihlLHQsbikpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5mcm9tKSE9cy5mcm9tJiYoaD1sKTtmb3IoOzspe2xldCBzPWguZW50ZXIoZSx0LG4pO2lmKCFzKXJldHVybiBoO2g9c319dmFyIEk9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIsaSl7dGhpcy5fdHJlZT1lLHRoaXMuZnJvbT10LHRoaXMuaW5kZXg9cix0aGlzLl9wYXJlbnQ9aX1nZXQgdHlwZSgpe3JldHVybiB0aGlzLl90cmVlLnR5cGV9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fdHJlZS50eXBlLm5hbWV9Z2V0IHRvKCl7cmV0dXJuIHRoaXMuZnJvbSt0aGlzLl90cmVlLmxlbmd0aH1uZXh0Q2hpbGQoZSx0LHIsaSxuPTApe2ZvcihsZXQgcz10aGlzOzspe2ZvcihsZXR7Y2hpbGRyZW46bCxwb3NpdGlvbnM6Zn09cy5fdHJlZSx1PXQ+MD9sLmxlbmd0aDotMTtlIT11O2UrPXQpe2xldCBvPWxbZV0sYz1mW2VdK3MuZnJvbTtpZighIWtlKGkscixjLGMrby5sZW5ndGgpKXtpZihvIGluc3RhbmNlb2YgVCl7aWYobiZBLkV4Y2x1ZGVCdWZmZXJzKWNvbnRpbnVlO2xldCBhPW8uZmluZENoaWxkKDAsby5idWZmZXIubGVuZ3RoLHQsci1jLGkpO2lmKGE+LTEpcmV0dXJuIG5ldyBNKG5ldyBzZShzLG8sZSxjKSxudWxsLGEpfWVsc2UgaWYobiZBLkluY2x1ZGVBbm9ueW1vdXN8fCFvLnR5cGUuaXNBbm9ueW1vdXN8fGFlKG8pKXtsZXQgYTtpZighKG4mQS5JZ25vcmVNb3VudHMpJiZvLnByb3BzJiYoYT1vLnByb3Aody5tb3VudGVkKSkmJiFhLm92ZXJsYXkpcmV0dXJuIG5ldyBJKGEudHJlZSxjLGUscyk7bGV0IHk9bmV3IEkobyxjLGUscyk7cmV0dXJuIG4mQS5JbmNsdWRlQW5vbnltb3VzfHwheS50eXBlLmlzQW5vbnltb3VzP3k6eS5uZXh0Q2hpbGQodDwwP28uY2hpbGRyZW4ubGVuZ3RoLTE6MCx0LHIsaSl9fX1pZihuJkEuSW5jbHVkZUFub255bW91c3x8IXMudHlwZS5pc0Fub255bW91c3x8KHMuaW5kZXg+PTA/ZT1zLmluZGV4K3Q6ZT10PDA/LTE6cy5fcGFyZW50Ll90cmVlLmNoaWxkcmVuLmxlbmd0aCxzPXMuX3BhcmVudCwhcykpcmV0dXJuIG51bGx9fWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubmV4dENoaWxkKDAsMSwwLDQpfWdldCBsYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5uZXh0Q2hpbGQodGhpcy5fdHJlZS5jaGlsZHJlbi5sZW5ndGgtMSwtMSwwLDQpfWNoaWxkQWZ0ZXIoZSl7cmV0dXJuIHRoaXMubmV4dENoaWxkKDAsMSxlLDIpfWNoaWxkQmVmb3JlKGUpe3JldHVybiB0aGlzLm5leHRDaGlsZCh0aGlzLl90cmVlLmNoaWxkcmVuLmxlbmd0aC0xLC0xLGUsLTIpfWVudGVyKGUsdCxyPTApe2xldCBpO2lmKCEociZBLklnbm9yZU92ZXJsYXlzKSYmKGk9dGhpcy5fdHJlZS5wcm9wKHcubW91bnRlZCkpJiZpLm92ZXJsYXkpe2xldCBuPWUtdGhpcy5mcm9tO2ZvcihsZXR7ZnJvbTpzLHRvOmx9b2YgaS5vdmVybGF5KWlmKCh0PjA/czw9bjpzPG4pJiYodDwwP2w+PW46bD5uKSlyZXR1cm4gbmV3IEkoaS50cmVlLGkub3ZlcmxheVswXS5mcm9tK3RoaXMuZnJvbSwtMSx0aGlzKX1yZXR1cm4gdGhpcy5uZXh0Q2hpbGQoMCwxLGUsdCxyKX1uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKXtsZXQgZT10aGlzO2Zvcig7ZS50eXBlLmlzQW5vbnltb3VzJiZlLl9wYXJlbnQ7KWU9ZS5fcGFyZW50O3JldHVybiBlfWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKTpudWxsfWdldCBuZXh0U2libGluZygpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuaW5kZXg+PTA/dGhpcy5fcGFyZW50Lm5leHRDaGlsZCh0aGlzLmluZGV4KzEsMSwwLDQpOm51bGx9Z2V0IHByZXZTaWJsaW5nKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5pbmRleD49MD90aGlzLl9wYXJlbnQubmV4dENoaWxkKHRoaXMuaW5kZXgtMSwtMSwwLDQpOm51bGx9Y3Vyc29yKGU9MCl7cmV0dXJuIG5ldyBWKHRoaXMsZSl9Z2V0IHRyZWUoKXtyZXR1cm4gdGhpcy5fdHJlZX10b1RyZWUoKXtyZXR1cm4gdGhpcy5fdHJlZX1yZXNvbHZlKGUsdD0wKXtyZXR1cm4gcSh0aGlzLGUsdCwhMSl9cmVzb2x2ZUlubmVyKGUsdD0wKXtyZXR1cm4gcSh0aGlzLGUsdCwhMCl9ZW50ZXJVbmZpbmlzaGVkTm9kZXNCZWZvcmUoZSl7cmV0dXJuIEFlKHRoaXMsZSl9Z2V0Q2hpbGQoZSx0PW51bGwscj1udWxsKXtsZXQgaT1lZSh0aGlzLGUsdCxyKTtyZXR1cm4gaS5sZW5ndGg/aVswXTpudWxsfWdldENoaWxkcmVuKGUsdD1udWxsLHI9bnVsbCl7cmV0dXJuIGVlKHRoaXMsZSx0LHIpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3RyZWUudG9TdHJpbmcoKX1nZXQgbm9kZSgpe3JldHVybiB0aGlzfW1hdGNoQ29udGV4dChlKXtyZXR1cm4gdGUodGhpcyxlKX19O2Z1bmN0aW9uIGVlKGgsZSx0LHIpe2xldCBpPWguY3Vyc29yKCksbj1bXTtpZighaS5maXJzdENoaWxkKCkpcmV0dXJuIG47aWYodCE9bnVsbCl7Zm9yKDshaS50eXBlLmlzKHQpOylpZighaS5uZXh0U2libGluZygpKXJldHVybiBufWZvcig7Oyl7aWYociE9bnVsbCYmaS50eXBlLmlzKHIpKXJldHVybiBuO2lmKGkudHlwZS5pcyhlKSYmbi5wdXNoKGkubm9kZSksIWkubmV4dFNpYmxpbmcoKSlyZXR1cm4gcj09bnVsbD9uOltdfX1mdW5jdGlvbiB0ZShoLGUsdD1lLmxlbmd0aC0xKXtmb3IobGV0IHI9aC5wYXJlbnQ7dD49MDtyPXIucGFyZW50KXtpZighcilyZXR1cm4hMTtpZighci50eXBlLmlzQW5vbnltb3VzKXtpZihlW3RdJiZlW3RdIT1yLm5hbWUpcmV0dXJuITE7dC0tfX1yZXR1cm4hMH12YXIgc2U9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIsaSl7dGhpcy5wYXJlbnQ9ZSx0aGlzLmJ1ZmZlcj10LHRoaXMuaW5kZXg9cix0aGlzLnN0YXJ0PWl9fSxNPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLmNvbnRleHQ9ZSx0aGlzLl9wYXJlbnQ9dCx0aGlzLmluZGV4PXIsdGhpcy50eXBlPWUuYnVmZmVyLnNldC50eXBlc1tlLmJ1ZmZlci5idWZmZXJbcl1dfWdldCBuYW1lKCl7cmV0dXJuIHRoaXMudHlwZS5uYW1lfWdldCBmcm9tKCl7cmV0dXJuIHRoaXMuY29udGV4dC5zdGFydCt0aGlzLmNvbnRleHQuYnVmZmVyLmJ1ZmZlclt0aGlzLmluZGV4KzFdfWdldCB0bygpe3JldHVybiB0aGlzLmNvbnRleHQuc3RhcnQrdGhpcy5jb250ZXh0LmJ1ZmZlci5idWZmZXJbdGhpcy5pbmRleCsyXX1jaGlsZChlLHQscil7bGV0e2J1ZmZlcjppfT10aGlzLmNvbnRleHQsbj1pLmZpbmRDaGlsZCh0aGlzLmluZGV4KzQsaS5idWZmZXJbdGhpcy5pbmRleCszXSxlLHQtdGhpcy5jb250ZXh0LnN0YXJ0LHIpO3JldHVybiBuPDA/bnVsbDpuZXcgTSh0aGlzLmNvbnRleHQsdGhpcyxuKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkKDEsMCw0KX1nZXQgbGFzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGQoLTEsMCw0KX1jaGlsZEFmdGVyKGUpe3JldHVybiB0aGlzLmNoaWxkKDEsZSwyKX1jaGlsZEJlZm9yZShlKXtyZXR1cm4gdGhpcy5jaGlsZCgtMSxlLC0yKX1lbnRlcihlLHQscj0wKXtpZihyJkEuRXhjbHVkZUJ1ZmZlcnMpcmV0dXJuIG51bGw7bGV0e2J1ZmZlcjppfT10aGlzLmNvbnRleHQsbj1pLmZpbmRDaGlsZCh0aGlzLmluZGV4KzQsaS5idWZmZXJbdGhpcy5pbmRleCszXSx0PjA/MTotMSxlLXRoaXMuY29udGV4dC5zdGFydCx0KTtyZXR1cm4gbjwwP251bGw6bmV3IE0odGhpcy5jb250ZXh0LHRoaXMsbil9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR8fHRoaXMuY29udGV4dC5wYXJlbnQubmV4dFNpZ25pZmljYW50UGFyZW50KCl9ZXh0ZXJuYWxTaWJsaW5nKGUpe3JldHVybiB0aGlzLl9wYXJlbnQ/bnVsbDp0aGlzLmNvbnRleHQucGFyZW50Lm5leHRDaGlsZCh0aGlzLmNvbnRleHQuaW5kZXgrZSxlLDAsNCl9Z2V0IG5leHRTaWJsaW5nKCl7bGV0e2J1ZmZlcjplfT10aGlzLmNvbnRleHQsdD1lLmJ1ZmZlclt0aGlzLmluZGV4KzNdO3JldHVybiB0PCh0aGlzLl9wYXJlbnQ/ZS5idWZmZXJbdGhpcy5fcGFyZW50LmluZGV4KzNdOmUuYnVmZmVyLmxlbmd0aCk/bmV3IE0odGhpcy5jb250ZXh0LHRoaXMuX3BhcmVudCx0KTp0aGlzLmV4dGVybmFsU2libGluZygxKX1nZXQgcHJldlNpYmxpbmcoKXtsZXR7YnVmZmVyOmV9PXRoaXMuY29udGV4dCx0PXRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuaW5kZXgrNDowO3JldHVybiB0aGlzLmluZGV4PT10P3RoaXMuZXh0ZXJuYWxTaWJsaW5nKC0xKTpuZXcgTSh0aGlzLmNvbnRleHQsdGhpcy5fcGFyZW50LGUuZmluZENoaWxkKHQsdGhpcy5pbmRleCwtMSwwLDQpKX1jdXJzb3IoZT0wKXtyZXR1cm4gbmV3IFYodGhpcyxlKX1nZXQgdHJlZSgpe3JldHVybiBudWxsfXRvVHJlZSgpe2xldCBlPVtdLHQ9W10se2J1ZmZlcjpyfT10aGlzLmNvbnRleHQsaT10aGlzLmluZGV4KzQsbj1yLmJ1ZmZlclt0aGlzLmluZGV4KzNdO2lmKG4+aSl7bGV0IHM9ci5idWZmZXJbdGhpcy5pbmRleCsxXSxsPXIuYnVmZmVyW3RoaXMuaW5kZXgrMl07ZS5wdXNoKHIuc2xpY2UoaSxuLHMsbCkpLHQucHVzaCgwKX1yZXR1cm4gbmV3IFAodGhpcy50eXBlLGUsdCx0aGlzLnRvLXRoaXMuZnJvbSl9cmVzb2x2ZShlLHQ9MCl7cmV0dXJuIHEodGhpcyxlLHQsITEpfXJlc29sdmVJbm5lcihlLHQ9MCl7cmV0dXJuIHEodGhpcyxlLHQsITApfWVudGVyVW5maW5pc2hlZE5vZGVzQmVmb3JlKGUpe3JldHVybiBBZSh0aGlzLGUpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29udGV4dC5idWZmZXIuY2hpbGRTdHJpbmcodGhpcy5pbmRleCl9Z2V0Q2hpbGQoZSx0PW51bGwscj1udWxsKXtsZXQgaT1lZSh0aGlzLGUsdCxyKTtyZXR1cm4gaS5sZW5ndGg/aVswXTpudWxsfWdldENoaWxkcmVuKGUsdD1udWxsLHI9bnVsbCl7cmV0dXJuIGVlKHRoaXMsZSx0LHIpfWdldCBub2RlKCl7cmV0dXJuIHRoaXN9bWF0Y2hDb250ZXh0KGUpe3JldHVybiB0ZSh0aGlzLGUpfX0sVj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQ9MCl7aWYodGhpcy5tb2RlPXQsdGhpcy5idWZmZXI9bnVsbCx0aGlzLnN0YWNrPVtdLHRoaXMuaW5kZXg9MCx0aGlzLmJ1ZmZlck5vZGU9bnVsbCxlIGluc3RhbmNlb2YgSSl0aGlzLnlpZWxkTm9kZShlKTtlbHNle3RoaXMuX3RyZWU9ZS5jb250ZXh0LnBhcmVudCx0aGlzLmJ1ZmZlcj1lLmNvbnRleHQ7Zm9yKGxldCByPWUuX3BhcmVudDtyO3I9ci5fcGFyZW50KXRoaXMuc3RhY2sudW5zaGlmdChyLmluZGV4KTt0aGlzLmJ1ZmZlck5vZGU9ZSx0aGlzLnlpZWxkQnVmKGUuaW5kZXgpfX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLnR5cGUubmFtZX15aWVsZE5vZGUoZSl7cmV0dXJuIGU/KHRoaXMuX3RyZWU9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuZnJvbT1lLmZyb20sdGhpcy50bz1lLnRvLCEwKTohMX15aWVsZEJ1ZihlLHQpe3RoaXMuaW5kZXg9ZTtsZXR7c3RhcnQ6cixidWZmZXI6aX09dGhpcy5idWZmZXI7cmV0dXJuIHRoaXMudHlwZT10fHxpLnNldC50eXBlc1tpLmJ1ZmZlcltlXV0sdGhpcy5mcm9tPXIraS5idWZmZXJbZSsxXSx0aGlzLnRvPXIraS5idWZmZXJbZSsyXSwhMH15aWVsZChlKXtyZXR1cm4gZT9lIGluc3RhbmNlb2YgST8odGhpcy5idWZmZXI9bnVsbCx0aGlzLnlpZWxkTm9kZShlKSk6KHRoaXMuYnVmZmVyPWUuY29udGV4dCx0aGlzLnlpZWxkQnVmKGUuaW5kZXgsZS50eXBlKSk6ITF9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5idWZmZXI/dGhpcy5idWZmZXIuYnVmZmVyLmNoaWxkU3RyaW5nKHRoaXMuaW5kZXgpOnRoaXMuX3RyZWUudG9TdHJpbmcoKX1lbnRlckNoaWxkKGUsdCxyKXtpZighdGhpcy5idWZmZXIpcmV0dXJuIHRoaXMueWllbGQodGhpcy5fdHJlZS5uZXh0Q2hpbGQoZTwwP3RoaXMuX3RyZWUuX3RyZWUuY2hpbGRyZW4ubGVuZ3RoLTE6MCxlLHQscix0aGlzLm1vZGUpKTtsZXR7YnVmZmVyOml9PXRoaXMuYnVmZmVyLG49aS5maW5kQ2hpbGQodGhpcy5pbmRleCs0LGkuYnVmZmVyW3RoaXMuaW5kZXgrM10sZSx0LXRoaXMuYnVmZmVyLnN0YXJ0LHIpO3JldHVybiBuPDA/ITE6KHRoaXMuc3RhY2sucHVzaCh0aGlzLmluZGV4KSx0aGlzLnlpZWxkQnVmKG4pKX1maXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuZW50ZXJDaGlsZCgxLDAsNCl9bGFzdENoaWxkKCl7cmV0dXJuIHRoaXMuZW50ZXJDaGlsZCgtMSwwLDQpfWNoaWxkQWZ0ZXIoZSl7cmV0dXJuIHRoaXMuZW50ZXJDaGlsZCgxLGUsMil9Y2hpbGRCZWZvcmUoZSl7cmV0dXJuIHRoaXMuZW50ZXJDaGlsZCgtMSxlLC0yKX1lbnRlcihlLHQscj10aGlzLm1vZGUpe3JldHVybiB0aGlzLmJ1ZmZlcj9yJkEuRXhjbHVkZUJ1ZmZlcnM/ITE6dGhpcy5lbnRlckNoaWxkKDEsZSx0KTp0aGlzLnlpZWxkKHRoaXMuX3RyZWUuZW50ZXIoZSx0LHIpKX1wYXJlbnQoKXtpZighdGhpcy5idWZmZXIpcmV0dXJuIHRoaXMueWllbGROb2RlKHRoaXMubW9kZSZBLkluY2x1ZGVBbm9ueW1vdXM/dGhpcy5fdHJlZS5fcGFyZW50OnRoaXMuX3RyZWUucGFyZW50KTtpZih0aGlzLnN0YWNrLmxlbmd0aClyZXR1cm4gdGhpcy55aWVsZEJ1Zih0aGlzLnN0YWNrLnBvcCgpKTtsZXQgZT10aGlzLm1vZGUmQS5JbmNsdWRlQW5vbnltb3VzP3RoaXMuYnVmZmVyLnBhcmVudDp0aGlzLmJ1ZmZlci5wYXJlbnQubmV4dFNpZ25pZmljYW50UGFyZW50KCk7cmV0dXJuIHRoaXMuYnVmZmVyPW51bGwsdGhpcy55aWVsZE5vZGUoZSl9c2libGluZyhlKXtpZighdGhpcy5idWZmZXIpcmV0dXJuIHRoaXMuX3RyZWUuX3BhcmVudD90aGlzLnlpZWxkKHRoaXMuX3RyZWUuaW5kZXg8MD9udWxsOnRoaXMuX3RyZWUuX3BhcmVudC5uZXh0Q2hpbGQodGhpcy5fdHJlZS5pbmRleCtlLGUsMCw0LHRoaXMubW9kZSkpOiExO2xldHtidWZmZXI6dH09dGhpcy5idWZmZXIscj10aGlzLnN0YWNrLmxlbmd0aC0xO2lmKGU8MCl7bGV0IGk9cjwwPzA6dGhpcy5zdGFja1tyXSs0O2lmKHRoaXMuaW5kZXghPWkpcmV0dXJuIHRoaXMueWllbGRCdWYodC5maW5kQ2hpbGQoaSx0aGlzLmluZGV4LC0xLDAsNCkpfWVsc2V7bGV0IGk9dC5idWZmZXJbdGhpcy5pbmRleCszXTtpZihpPChyPDA/dC5idWZmZXIubGVuZ3RoOnQuYnVmZmVyW3RoaXMuc3RhY2tbcl0rM10pKXJldHVybiB0aGlzLnlpZWxkQnVmKGkpfXJldHVybiByPDA/dGhpcy55aWVsZCh0aGlzLmJ1ZmZlci5wYXJlbnQubmV4dENoaWxkKHRoaXMuYnVmZmVyLmluZGV4K2UsZSwwLDQsdGhpcy5tb2RlKSk6ITF9bmV4dFNpYmxpbmcoKXtyZXR1cm4gdGhpcy5zaWJsaW5nKDEpfXByZXZTaWJsaW5nKCl7cmV0dXJuIHRoaXMuc2libGluZygtMSl9YXRMYXN0Tm9kZShlKXtsZXQgdCxyLHtidWZmZXI6aX09dGhpcztpZihpKXtpZihlPjApe2lmKHRoaXMuaW5kZXg8aS5idWZmZXIuYnVmZmVyLmxlbmd0aClyZXR1cm4hMX1lbHNlIGZvcihsZXQgbj0wO248dGhpcy5pbmRleDtuKyspaWYoaS5idWZmZXIuYnVmZmVyW24rM108dGhpcy5pbmRleClyZXR1cm4hMTsoe2luZGV4OnQscGFyZW50OnJ9PWkpfWVsc2Uoe2luZGV4OnQsX3BhcmVudDpyfT10aGlzLl90cmVlKTtmb3IoO3I7e2luZGV4OnQsX3BhcmVudDpyfT1yKWlmKHQ+LTEpZm9yKGxldCBuPXQrZSxzPWU8MD8tMTpyLl90cmVlLmNoaWxkcmVuLmxlbmd0aDtuIT1zO24rPWUpe2xldCBsPXIuX3RyZWUuY2hpbGRyZW5bbl07aWYodGhpcy5tb2RlJkEuSW5jbHVkZUFub255bW91c3x8bCBpbnN0YW5jZW9mIFR8fCFsLnR5cGUuaXNBbm9ueW1vdXN8fGFlKGwpKXJldHVybiExfXJldHVybiEwfW1vdmUoZSx0KXtpZih0JiZ0aGlzLmVudGVyQ2hpbGQoZSwwLDQpKXJldHVybiEwO2Zvcig7Oyl7aWYodGhpcy5zaWJsaW5nKGUpKXJldHVybiEwO2lmKHRoaXMuYXRMYXN0Tm9kZShlKXx8IXRoaXMucGFyZW50KCkpcmV0dXJuITF9fW5leHQoZT0hMCl7cmV0dXJuIHRoaXMubW92ZSgxLGUpfXByZXYoZT0hMCl7cmV0dXJuIHRoaXMubW92ZSgtMSxlKX1tb3ZlVG8oZSx0PTApe2Zvcig7KHRoaXMuZnJvbT09dGhpcy50b3x8KHQ8MT90aGlzLmZyb20+PWU6dGhpcy5mcm9tPmUpfHwodD4tMT90aGlzLnRvPD1lOnRoaXMudG88ZSkpJiZ0aGlzLnBhcmVudCgpOyk7Zm9yKDt0aGlzLmVudGVyQ2hpbGQoMSxlLHQpOyk7cmV0dXJuIHRoaXN9Z2V0IG5vZGUoKXtpZighdGhpcy5idWZmZXIpcmV0dXJuIHRoaXMuX3RyZWU7bGV0IGU9dGhpcy5idWZmZXJOb2RlLHQ9bnVsbCxyPTA7aWYoZSYmZS5jb250ZXh0PT10aGlzLmJ1ZmZlcil7ZTpmb3IobGV0IGk9dGhpcy5pbmRleCxuPXRoaXMuc3RhY2subGVuZ3RoO24+PTA7KXtmb3IobGV0IHM9ZTtzO3M9cy5fcGFyZW50KWlmKHMuaW5kZXg9PWkpe2lmKGk9PXRoaXMuaW5kZXgpcmV0dXJuIHM7dD1zLHI9bisxO2JyZWFrIGV9aT10aGlzLnN0YWNrWy0tbl19fWZvcihsZXQgaT1yO2k8dGhpcy5zdGFjay5sZW5ndGg7aSsrKXQ9bmV3IE0odGhpcy5idWZmZXIsdCx0aGlzLnN0YWNrW2ldKTtyZXR1cm4gdGhpcy5idWZmZXJOb2RlPW5ldyBNKHRoaXMuYnVmZmVyLHQsdGhpcy5pbmRleCl9Z2V0IHRyZWUoKXtyZXR1cm4gdGhpcy5idWZmZXI/bnVsbDp0aGlzLl90cmVlLl90cmVlfWl0ZXJhdGUoZSx0KXtmb3IobGV0IHI9MDs7KXtsZXQgaT0hMTtpZih0aGlzLnR5cGUuaXNBbm9ueW1vdXN8fGUodGhpcykhPT0hMSl7aWYodGhpcy5maXJzdENoaWxkKCkpe3IrKztjb250aW51ZX10aGlzLnR5cGUuaXNBbm9ueW1vdXN8fChpPSEwKX1mb3IoO2kmJnQmJnQodGhpcyksaT10aGlzLnR5cGUuaXNBbm9ueW1vdXMsIXRoaXMubmV4dFNpYmxpbmcoKTspe2lmKCFyKXJldHVybjt0aGlzLnBhcmVudCgpLHItLSxpPSEwfX19bWF0Y2hDb250ZXh0KGUpe2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gdGUodGhpcy5ub2RlLGUpO2xldHtidWZmZXI6dH09dGhpcy5idWZmZXIse3R5cGVzOnJ9PXQuc2V0O2ZvcihsZXQgaT1lLmxlbmd0aC0xLG49dGhpcy5zdGFjay5sZW5ndGgtMTtpPj0wO24tLSl7aWYobjwwKXJldHVybiB0ZSh0aGlzLm5vZGUsZSxpKTtsZXQgcz1yW3QuYnVmZmVyW3RoaXMuc3RhY2tbbl1dXTtpZighcy5pc0Fub255bW91cyl7aWYoZVtpXSYmZVtpXSE9cy5uYW1lKXJldHVybiExO2ktLX19cmV0dXJuITB9fTtmdW5jdGlvbiBhZShoKXtyZXR1cm4gaC5jaGlsZHJlbi5zb21lKGU9PmUgaW5zdGFuY2VvZiBUfHwhZS50eXBlLmlzQW5vbnltb3VzfHxhZShlKSl9ZnVuY3Rpb24gU2UoaCl7dmFyIGU7bGV0e2J1ZmZlcjp0LG5vZGVTZXQ6cixtYXhCdWZmZXJMZW5ndGg6aT0xMDI0LHJldXNlZDpuPVtdLG1pblJlcGVhdFR5cGU6cz1yLnR5cGVzLmxlbmd0aH09aCxsPUFycmF5LmlzQXJyYXkodCk/bmV3IEsodCx0Lmxlbmd0aCk6dCxmPXIudHlwZXMsdT0wLG89MDtmdW5jdGlvbiBjKHgsdixwLG0sQyl7bGV0e2lkOmIsc3RhcnQ6ZyxlbmQ6ayxzaXplOnp9PWwsTz1vO2Zvcig7ejwwOylpZihsLm5leHQoKSx6PT0tMSl7bGV0IFc9bltiXTtwLnB1c2goVyksbS5wdXNoKGcteCk7cmV0dXJufWVsc2UgaWYoej09LTMpe3U9YjtyZXR1cm59ZWxzZSBpZih6PT0tNCl7bz1iO3JldHVybn1lbHNlIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbnJlY29nbml6ZWQgcmVjb3JkIHNpemU6ICR7en1gKTtsZXQgSj1mW2JdLFUsTCxjZT1nLXg7aWYoay1nPD1pJiYoTD1TKGwucG9zLXYsQykpKXtsZXQgVz1uZXcgVWludDE2QXJyYXkoTC5zaXplLUwuc2tpcCksaj1sLnBvcy1MLnNpemUsUj1XLmxlbmd0aDtmb3IoO2wucG9zPmo7KVI9RChMLnN0YXJ0LFcsUik7VT1uZXcgVChXLGstTC5zdGFydCxyKSxjZT1MLnN0YXJ0LXh9ZWxzZXtsZXQgVz1sLnBvcy16O2wubmV4dCgpO2xldCBqPVtdLFI9W10sSD1iPj1zP2I6LTEsJD0wLFE9aztmb3IoO2wucG9zPlc7KUg+PTAmJmwuaWQ9PUgmJmwuc2l6ZT49MD8obC5lbmQ8PVEtaSYmKHkoaixSLGcsJCxsLmVuZCxRLEgsTyksJD1qLmxlbmd0aCxRPWwuZW5kKSxsLm5leHQoKSk6YyhnLFcsaixSLEgpO2lmKEg+PTAmJiQ+MCYmJDxqLmxlbmd0aCYmeShqLFIsZywkLGcsUSxILE8pLGoucmV2ZXJzZSgpLFIucmV2ZXJzZSgpLEg+LTEmJiQ+MCl7bGV0IGRlPWEoSik7VT1wZShKLGosUiwwLGoubGVuZ3RoLDAsay1nLGRlLGRlKX1lbHNlIFU9ZChKLGosUixrLWcsTy1rKX1wLnB1c2goVSksbS5wdXNoKGNlKX1mdW5jdGlvbiBhKHgpe3JldHVybih2LHAsbSk9PntsZXQgQz0wLGI9di5sZW5ndGgtMSxnLGs7aWYoYj49MCYmKGc9dltiXSlpbnN0YW5jZW9mIFApe2lmKCFiJiZnLnR5cGU9PXgmJmcubGVuZ3RoPT1tKXJldHVybiBnOyhrPWcucHJvcCh3Lmxvb2tBaGVhZCkpJiYoQz1wW2JdK2cubGVuZ3RoK2spfXJldHVybiBkKHgsdixwLG0sQyl9fWZ1bmN0aW9uIHkoeCx2LHAsbSxDLGIsZyxrKXtsZXQgej1bXSxPPVtdO2Zvcig7eC5sZW5ndGg+bTspei5wdXNoKHgucG9wKCkpLE8ucHVzaCh2LnBvcCgpK3AtQyk7eC5wdXNoKGQoci50eXBlc1tnXSx6LE8sYi1DLGstYikpLHYucHVzaChDLXApfWZ1bmN0aW9uIGQoeCx2LHAsbSxDPTAsYil7aWYodSl7bGV0IGc9W3cuY29udGV4dEhhc2gsdV07Yj1iP1tnXS5jb25jYXQoYik6W2ddfWlmKEM+MjUpe2xldCBnPVt3Lmxvb2tBaGVhZCxDXTtiPWI/W2ddLmNvbmNhdChiKTpbZ119cmV0dXJuIG5ldyBQKHgsdixwLG0sYil9ZnVuY3Rpb24gUyh4LHYpe2xldCBwPWwuZm9yaygpLG09MCxDPTAsYj0wLGc9cC5lbmQtaSxrPXtzaXplOjAsc3RhcnQ6MCxza2lwOjB9O2U6Zm9yKGxldCB6PXAucG9zLXg7cC5wb3M+ejspe2xldCBPPXAuc2l6ZTtpZihwLmlkPT12JiZPPj0wKXtrLnNpemU9bSxrLnN0YXJ0PUMsay5za2lwPWIsYis9NCxtKz00LHAubmV4dCgpO2NvbnRpbnVlfWxldCBKPXAucG9zLU87aWYoTzwwfHxKPHp8fHAuc3RhcnQ8ZylicmVhaztsZXQgVT1wLmlkPj1zPzQ6MCxMPXAuc3RhcnQ7Zm9yKHAubmV4dCgpO3AucG9zPko7KXtpZihwLnNpemU8MClpZihwLnNpemU9PS0zKVUrPTQ7ZWxzZSBicmVhayBlO2Vsc2UgcC5pZD49cyYmKFUrPTQpO3AubmV4dCgpfUM9TCxtKz1PLGIrPVV9cmV0dXJuKHY8MHx8bT09eCkmJihrLnNpemU9bSxrLnN0YXJ0PUMsay5za2lwPWIpLGsuc2l6ZT40P2s6dm9pZCAwfWZ1bmN0aW9uIEQoeCx2LHApe2xldHtpZDptLHN0YXJ0OkMsZW5kOmIsc2l6ZTpnfT1sO2lmKGwubmV4dCgpLGc+PTAmJm08cyl7bGV0IGs9cDtpZihnPjQpe2xldCB6PWwucG9zLShnLTQpO2Zvcig7bC5wb3M+ejspcD1EKHgsdixwKX12Wy0tcF09ayx2Wy0tcF09Yi14LHZbLS1wXT1DLXgsdlstLXBdPW19ZWxzZSBnPT0tMz91PW06Zz09LTQmJihvPW0pO3JldHVybiBwfWxldCBFPVtdLEY9W107Zm9yKDtsLnBvcz4wOyljKGguc3RhcnR8fDAsaC5idWZmZXJTdGFydHx8MCxFLEYsLTEpO2xldCBfPShlPWgubGVuZ3RoKSE9PW51bGwmJmUhPT12b2lkIDA/ZTpFLmxlbmd0aD9GWzBdK0VbMF0ubGVuZ3RoOjA7cmV0dXJuIG5ldyBQKGZbaC50b3BJRF0sRS5yZXZlcnNlKCksRi5yZXZlcnNlKCksXyl9dmFyIG1lPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFkoaCxlKXtpZighaC5pc0Fub255bW91c3x8ZSBpbnN0YW5jZW9mIFR8fGUudHlwZSE9aClyZXR1cm4gMTtsZXQgdD1tZS5nZXQoZSk7aWYodD09bnVsbCl7dD0xO2ZvcihsZXQgciBvZiBlLmNoaWxkcmVuKXtpZihyLnR5cGUhPWh8fCEociBpbnN0YW5jZW9mIFApKXt0PTE7YnJlYWt9dCs9WShoLHIpfW1lLnNldChlLHQpfXJldHVybiB0fWZ1bmN0aW9uIHBlKGgsZSx0LHIsaSxuLHMsbCxmKXtsZXQgdT0wO2ZvcihsZXQgZD1yO2Q8aTtkKyspdSs9WShoLGVbZF0pO2xldCBvPU1hdGguY2VpbCh1KjEuNS84KSxjPVtdLGE9W107ZnVuY3Rpb24geShkLFMsRCxFLEYpe2ZvcihsZXQgXz1EO188RTspe2xldCB4PV8sdj1TW19dLHA9WShoLGRbX10pO2ZvcihfKys7XzxFO18rKyl7bGV0IG09WShoLGRbX10pO2lmKHArbT49bylicmVhaztwKz1tfWlmKF89PXgrMSl7aWYocD5vKXtsZXQgbT1kW3hdO3kobS5jaGlsZHJlbixtLnBvc2l0aW9ucywwLG0uY2hpbGRyZW4ubGVuZ3RoLFNbeF0rRik7Y29udGludWV9Yy5wdXNoKGRbeF0pfWVsc2V7bGV0IG09U1tfLTFdK2RbXy0xXS5sZW5ndGgtdjtjLnB1c2gocGUoaCxkLFMseCxfLHYsbSxudWxsLGYpKX1hLnB1c2goditGLW4pfX1yZXR1cm4geShlLHQscixpLDApLChsfHxmKShjLGEscyl9dmFyIGJlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IFdlYWtNYXB9c2V0QnVmZmVyKGUsdCxyKXtsZXQgaT10aGlzLm1hcC5nZXQoZSk7aXx8dGhpcy5tYXAuc2V0KGUsaT1uZXcgTWFwKSxpLnNldCh0LHIpfWdldEJ1ZmZlcihlLHQpe2xldCByPXRoaXMubWFwLmdldChlKTtyZXR1cm4gciYmci5nZXQodCl9c2V0KGUsdCl7ZSBpbnN0YW5jZW9mIE0/dGhpcy5zZXRCdWZmZXIoZS5jb250ZXh0LmJ1ZmZlcixlLmluZGV4LHQpOmUgaW5zdGFuY2VvZiBJJiZ0aGlzLm1hcC5zZXQoZS50cmVlLHQpfWdldChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE0/dGhpcy5nZXRCdWZmZXIoZS5jb250ZXh0LmJ1ZmZlcixlLmluZGV4KTplIGluc3RhbmNlb2YgST90aGlzLm1hcC5nZXQoZS50cmVlKTp2b2lkIDB9Y3Vyc29yU2V0KGUsdCl7ZS5idWZmZXI/dGhpcy5zZXRCdWZmZXIoZS5idWZmZXIuYnVmZmVyLGUuaW5kZXgsdCk6dGhpcy5tYXAuc2V0KGUudHJlZSx0KX1jdXJzb3JHZXQoZSl7cmV0dXJuIGUuYnVmZmVyP3RoaXMuZ2V0QnVmZmVyKGUuYnVmZmVyLmJ1ZmZlcixlLmluZGV4KTp0aGlzLm1hcC5nZXQoZS50cmVlKX19LEc9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIsaSxuPSExLHM9ITEpe3RoaXMuZnJvbT1lLHRoaXMudG89dCx0aGlzLnRyZWU9cix0aGlzLm9mZnNldD1pLHRoaXMub3Blbj0obj8xOjApfChzPzI6MCl9Z2V0IG9wZW5TdGFydCgpe3JldHVybih0aGlzLm9wZW4mMSk+MH1nZXQgb3BlbkVuZCgpe3JldHVybih0aGlzLm9wZW4mMik+MH1zdGF0aWMgYWRkVHJlZShlLHQ9W10scj0hMSl7bGV0IGk9W25ldyBHKDAsZS5sZW5ndGgsZSwwLCExLHIpXTtmb3IobGV0IG4gb2YgdCluLnRvPmUubGVuZ3RoJiZpLnB1c2gobik7cmV0dXJuIGl9c3RhdGljIGFwcGx5Q2hhbmdlcyhlLHQscj0xMjgpe2lmKCF0Lmxlbmd0aClyZXR1cm4gZTtsZXQgaT1bXSxuPTEscz1lLmxlbmd0aD9lWzBdOm51bGw7Zm9yKGxldCBsPTAsZj0wLHU9MDs7bCsrKXtsZXQgbz1sPHQubGVuZ3RoP3RbbF06bnVsbCxjPW8/by5mcm9tQToxZTk7aWYoYy1mPj1yKWZvcig7cyYmcy5mcm9tPGM7KXtsZXQgYT1zO2lmKGY+PWEuZnJvbXx8Yzw9YS50b3x8dSl7bGV0IHk9TWF0aC5tYXgoYS5mcm9tLGYpLXUsZD1NYXRoLm1pbihhLnRvLGMpLXU7YT15Pj1kP251bGw6bmV3IEcoeSxkLGEudHJlZSxhLm9mZnNldCt1LGw+MCwhIW8pfWlmKGEmJmkucHVzaChhKSxzLnRvPmMpYnJlYWs7cz1uPGUubGVuZ3RoP2VbbisrXTpudWxsfWlmKCFvKWJyZWFrO2Y9by50b0EsdT1vLnRvQS1vLnRvQn1yZXR1cm4gaX19LHllPWNsYXNze3N0YXJ0UGFyc2UoZSx0LHIpe3JldHVybiB0eXBlb2YgZT09XCJzdHJpbmdcIiYmKGU9bmV3IGxlKGUpKSxyPXI/ci5sZW5ndGg/ci5tYXAoaT0+bmV3IEIoaS5mcm9tLGkudG8pKTpbbmV3IEIoMCwwKV06W25ldyBCKDAsZS5sZW5ndGgpXSx0aGlzLmNyZWF0ZVBhcnNlKGUsdHx8W10scil9cGFyc2UoZSx0LHIpe2xldCBpPXRoaXMuc3RhcnRQYXJzZShlLHQscik7Zm9yKDs7KXtsZXQgbj1pLmFkdmFuY2UoKTtpZihuKXJldHVybiBufX19LGxlPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RyaW5nPWV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnN0cmluZy5sZW5ndGh9Y2h1bmsoZSl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKGUpfWdldCBsaW5lQ2h1bmtzKCl7cmV0dXJuITF9cmVhZChlLHQpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZShlLHQpfX07ZnVuY3Rpb24gTmUoaCl7cmV0dXJuKGUsdCxyLGkpPT5uZXcgb2UoZSxoLHQscixpKX12YXIgcmU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIsaSxuKXt0aGlzLnBhcnNlcj1lLHRoaXMucGFyc2U9dCx0aGlzLm92ZXJsYXk9cix0aGlzLnRhcmdldD1pLHRoaXMucmFuZ2VzPW59fSxoZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixpLG4scyxsKXt0aGlzLnBhcnNlcj1lLHRoaXMucHJlZGljYXRlPXQsdGhpcy5tb3VudHM9cix0aGlzLmluZGV4PWksdGhpcy5zdGFydD1uLHRoaXMudGFyZ2V0PXMsdGhpcy5wcmV2PWwsdGhpcy5kZXB0aD0wLHRoaXMucmFuZ2VzPVtdfX0sZmU9bmV3IHcoe3Blck5vZGU6ITB9KSxvZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixpLG4pe3RoaXMubmVzdD10LHRoaXMuaW5wdXQ9cix0aGlzLmZyYWdtZW50cz1pLHRoaXMucmFuZ2VzPW4sdGhpcy5pbm5lcj1bXSx0aGlzLmlubmVyRG9uZT0wLHRoaXMuYmFzZVRyZWU9bnVsbCx0aGlzLnN0b3BwZWRBdD1udWxsLHRoaXMuYmFzZVBhcnNlPWV9YWR2YW5jZSgpe2lmKHRoaXMuYmFzZVBhcnNlKXtsZXQgcj10aGlzLmJhc2VQYXJzZS5hZHZhbmNlKCk7aWYoIXIpcmV0dXJuIG51bGw7aWYodGhpcy5iYXNlUGFyc2U9bnVsbCx0aGlzLmJhc2VUcmVlPXIsdGhpcy5zdGFydElubmVyKCksdGhpcy5zdG9wcGVkQXQhPW51bGwpZm9yKGxldCBpIG9mIHRoaXMuaW5uZXIpaS5wYXJzZS5zdG9wQXQodGhpcy5zdG9wcGVkQXQpfWlmKHRoaXMuaW5uZXJEb25lPT10aGlzLmlubmVyLmxlbmd0aCl7bGV0IHI9dGhpcy5iYXNlVHJlZTtyZXR1cm4gdGhpcy5zdG9wcGVkQXQhPW51bGwmJihyPW5ldyBQKHIudHlwZSxyLmNoaWxkcmVuLHIucG9zaXRpb25zLHIubGVuZ3RoLHIucHJvcFZhbHVlcy5jb25jYXQoW1tmZSx0aGlzLnN0b3BwZWRBdF1dKSkpLHJ9bGV0IGU9dGhpcy5pbm5lclt0aGlzLmlubmVyRG9uZV0sdD1lLnBhcnNlLmFkdmFuY2UoKTtpZih0KXt0aGlzLmlubmVyRG9uZSsrO2xldCByPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSxlLnRhcmdldC5wcm9wcyk7clt3Lm1vdW50ZWQuaWRdPW5ldyBuZSh0LGUub3ZlcmxheSxlLnBhcnNlciksZS50YXJnZXQucHJvcHM9cn1yZXR1cm4gbnVsbH1nZXQgcGFyc2VkUG9zKCl7aWYodGhpcy5iYXNlUGFyc2UpcmV0dXJuIDA7bGV0IGU9dGhpcy5pbnB1dC5sZW5ndGg7Zm9yKGxldCB0PXRoaXMuaW5uZXJEb25lO3Q8dGhpcy5pbm5lci5sZW5ndGg7dCsrKXRoaXMuaW5uZXJbdF0ucmFuZ2VzWzBdLmZyb208ZSYmKGU9TWF0aC5taW4oZSx0aGlzLmlubmVyW3RdLnBhcnNlLnBhcnNlZFBvcykpO3JldHVybiBlfXN0b3BBdChlKXtpZih0aGlzLnN0b3BwZWRBdD1lLHRoaXMuYmFzZVBhcnNlKXRoaXMuYmFzZVBhcnNlLnN0b3BBdChlKTtlbHNlIGZvcihsZXQgdD10aGlzLmlubmVyRG9uZTt0PHRoaXMuaW5uZXIubGVuZ3RoO3QrKyl0aGlzLmlubmVyW3RdLnBhcnNlLnN0b3BBdChlKX1zdGFydElubmVyKCl7bGV0IGU9bmV3IHVlKHRoaXMuZnJhZ21lbnRzKSx0PW51bGwscj1udWxsLGk9bmV3IFYobmV3IEkodGhpcy5iYXNlVHJlZSx0aGlzLnJhbmdlc1swXS5mcm9tLDAsbnVsbCksQS5JbmNsdWRlQW5vbnltb3VzfEEuSWdub3JlTW91bnRzKTtlOmZvcihsZXQgbixzO3RoaXMuc3RvcHBlZEF0PT1udWxsfHxpLmZyb208dGhpcy5zdG9wcGVkQXQ7KXtsZXQgbD0hMCxmO2lmKGUuaGFzTm9kZShpKSl7aWYodCl7bGV0IHU9dC5tb3VudHMuZmluZChvPT5vLmZyYWcuZnJvbTw9aS5mcm9tJiZvLmZyYWcudG8+PWkudG8mJm8ubW91bnQub3ZlcmxheSk7aWYodSlmb3IobGV0IG8gb2YgdS5tb3VudC5vdmVybGF5KXtsZXQgYz1vLmZyb20rdS5wb3MsYT1vLnRvK3UucG9zO2M+PWkuZnJvbSYmYTw9aS50byYmIXQucmFuZ2VzLnNvbWUoeT0+eS5mcm9tPGEmJnkudG8+YykmJnQucmFuZ2VzLnB1c2goe2Zyb206Yyx0bzphfSl9fWw9ITF9ZWxzZSBpZihyJiYocz1QZShyLnJhbmdlcyxpLmZyb20saS50bykpKWw9cyE9MjtlbHNlIGlmKCFpLnR5cGUuaXNBbm9ueW1vdXMmJmkuZnJvbTxpLnRvJiYobj10aGlzLm5lc3QoaSx0aGlzLmlucHV0KSkpe2kudHJlZXx8emUoaSk7bGV0IHU9ZS5maW5kTW91bnRzKGkuZnJvbSxuLnBhcnNlcik7aWYodHlwZW9mIG4ub3ZlcmxheT09XCJmdW5jdGlvblwiKXQ9bmV3IGhlKG4ucGFyc2VyLG4ub3ZlcmxheSx1LHRoaXMuaW5uZXIubGVuZ3RoLGkuZnJvbSxpLnRyZWUsdCk7ZWxzZXtsZXQgbz13ZSh0aGlzLnJhbmdlcyxuLm92ZXJsYXl8fFtuZXcgQihpLmZyb20saS50byldKTtvLmxlbmd0aCYmdGhpcy5pbm5lci5wdXNoKG5ldyByZShuLnBhcnNlcixuLnBhcnNlci5zdGFydFBhcnNlKHRoaXMuaW5wdXQsdmUodSxvKSxvKSxuLm92ZXJsYXk/bi5vdmVybGF5Lm1hcChjPT5uZXcgQihjLmZyb20taS5mcm9tLGMudG8taS5mcm9tKSk6bnVsbCxpLnRyZWUsbykpLG4ub3ZlcmxheT9vLmxlbmd0aCYmKHI9e3JhbmdlczpvLGRlcHRoOjAscHJldjpyfSk6bD0hMX19ZWxzZSB0JiYoZj10LnByZWRpY2F0ZShpKSkmJihmPT09ITAmJihmPW5ldyBCKGkuZnJvbSxpLnRvKSksZi5mcm9tPGYudG8mJnQucmFuZ2VzLnB1c2goZikpO2lmKGwmJmkuZmlyc3RDaGlsZCgpKXQmJnQuZGVwdGgrKyxyJiZyLmRlcHRoKys7ZWxzZSBmb3IoOyFpLm5leHRTaWJsaW5nKCk7KXtpZighaS5wYXJlbnQoKSlicmVhayBlO2lmKHQmJiEtLXQuZGVwdGgpe2xldCB1PXdlKHRoaXMucmFuZ2VzLHQucmFuZ2VzKTt1Lmxlbmd0aCYmdGhpcy5pbm5lci5zcGxpY2UodC5pbmRleCwwLG5ldyByZSh0LnBhcnNlcix0LnBhcnNlci5zdGFydFBhcnNlKHRoaXMuaW5wdXQsdmUodC5tb3VudHMsdSksdSksdC5yYW5nZXMubWFwKG89Pm5ldyBCKG8uZnJvbS10LnN0YXJ0LG8udG8tdC5zdGFydCkpLHQudGFyZ2V0LHUpKSx0PXQucHJldn1yJiYhLS1yLmRlcHRoJiYocj1yLnByZXYpfX19fTtmdW5jdGlvbiBQZShoLGUsdCl7Zm9yKGxldCByIG9mIGgpe2lmKHIuZnJvbT49dClicmVhaztpZihyLnRvPmUpcmV0dXJuIHIuZnJvbTw9ZSYmci50bz49dD8yOjF9cmV0dXJuIDB9ZnVuY3Rpb24geGUoaCxlLHQscixpLG4pe2lmKGU8dCl7bGV0IHM9aC5idWZmZXJbZSsxXSxsPWguYnVmZmVyW3QtMl07ci5wdXNoKGguc2xpY2UoZSx0LHMsbCkpLGkucHVzaChzLW4pfX1mdW5jdGlvbiB6ZShoKXtsZXR7bm9kZTplfT1oLHQ9MDtkbyBoLnBhcmVudCgpLHQrKzt3aGlsZSghaC50cmVlKTtsZXQgcj0wLGk9aC50cmVlLG49MDtmb3IoO249aS5wb3NpdGlvbnNbcl0raC5mcm9tLCEobjw9ZS5mcm9tJiZuK2kuY2hpbGRyZW5bcl0ubGVuZ3RoPj1lLnRvKTtyKyspO2xldCBzPWkuY2hpbGRyZW5bcl0sbD1zLmJ1ZmZlcjtmdW5jdGlvbiBmKHUsbyxjLGEseSl7bGV0IGQ9dTtmb3IoO2xbZCsyXStuPD1lLmZyb207KWQ9bFtkKzNdO2xldCBTPVtdLEQ9W107eGUocyx1LGQsUyxELGEpO2xldCBFPWxbZCsxXSxGPWxbZCsyXSxfPUUrbj09ZS5mcm9tJiZGK249PWUudG8mJmxbZF09PWUudHlwZS5pZDtyZXR1cm4gUy5wdXNoKF8/ZS50b1RyZWUoKTpmKGQrNCxsW2QrM10scy5zZXQudHlwZXNbbFtkXV0sRSxGLUUpKSxELnB1c2goRS1hKSx4ZShzLGxbZCszXSxvLFMsRCxhKSxuZXcgUChjLFMsRCx5KX1pLmNoaWxkcmVuW3JdPWYoMCxsLmxlbmd0aCxOLm5vbmUsMCxzLmxlbmd0aCk7Zm9yKGxldCB1PTA7dTw9dDt1KyspaC5jaGlsZEFmdGVyKGUuZnJvbSl9dmFyIGllPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5vZmZzZXQ9dCx0aGlzLmRvbmU9ITEsdGhpcy5jdXJzb3I9ZS5jdXJzb3IoQS5JbmNsdWRlQW5vbnltb3VzfEEuSWdub3JlTW91bnRzKX1tb3ZlVG8oZSl7bGV0e2N1cnNvcjp0fT10aGlzLHI9ZS10aGlzLm9mZnNldDtmb3IoOyF0aGlzLmRvbmUmJnQuZnJvbTxyOyl0LnRvPj1lJiZ0LmVudGVyKHIsMSxBLklnbm9yZU92ZXJsYXlzfEEuRXhjbHVkZUJ1ZmZlcnMpfHx0Lm5leHQoITEpfHwodGhpcy5kb25lPSEwKX1oYXNOb2RlKGUpe2lmKHRoaXMubW92ZVRvKGUuZnJvbSksIXRoaXMuZG9uZSYmdGhpcy5jdXJzb3IuZnJvbSt0aGlzLm9mZnNldD09ZS5mcm9tJiZ0aGlzLmN1cnNvci50cmVlKWZvcihsZXQgdD10aGlzLmN1cnNvci50cmVlOzspe2lmKHQ9PWUudHJlZSlyZXR1cm4hMDtpZih0LmNoaWxkcmVuLmxlbmd0aCYmdC5wb3NpdGlvbnNbMF09PTAmJnQuY2hpbGRyZW5bMF1pbnN0YW5jZW9mIFApdD10LmNoaWxkcmVuWzBdO2Vsc2UgYnJlYWt9cmV0dXJuITF9fSx1ZT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt2YXIgdDtpZih0aGlzLmZyYWdtZW50cz1lLHRoaXMuY3VyVG89MCx0aGlzLmZyYWdJPTAsZS5sZW5ndGgpe2xldCByPXRoaXMuY3VyRnJhZz1lWzBdO3RoaXMuY3VyVG89KHQ9ci50cmVlLnByb3AoZmUpKSE9PW51bGwmJnQhPT12b2lkIDA/dDpyLnRvLHRoaXMuaW5uZXI9bmV3IGllKHIudHJlZSwtci5vZmZzZXQpfWVsc2UgdGhpcy5jdXJGcmFnPXRoaXMuaW5uZXI9bnVsbH1oYXNOb2RlKGUpe2Zvcig7dGhpcy5jdXJGcmFnJiZlLmZyb20+PXRoaXMuY3VyVG87KXRoaXMubmV4dEZyYWcoKTtyZXR1cm4gdGhpcy5jdXJGcmFnJiZ0aGlzLmN1ckZyYWcuZnJvbTw9ZS5mcm9tJiZ0aGlzLmN1clRvPj1lLnRvJiZ0aGlzLmlubmVyLmhhc05vZGUoZSl9bmV4dEZyYWcoKXt2YXIgZTtpZih0aGlzLmZyYWdJKyssdGhpcy5mcmFnST09dGhpcy5mcmFnbWVudHMubGVuZ3RoKXRoaXMuY3VyRnJhZz10aGlzLmlubmVyPW51bGw7ZWxzZXtsZXQgdD10aGlzLmN1ckZyYWc9dGhpcy5mcmFnbWVudHNbdGhpcy5mcmFnSV07dGhpcy5jdXJUbz0oZT10LnRyZWUucHJvcChmZSkpIT09bnVsbCYmZSE9PXZvaWQgMD9lOnQudG8sdGhpcy5pbm5lcj1uZXcgaWUodC50cmVlLC10Lm9mZnNldCl9fWZpbmRNb3VudHMoZSx0KXt2YXIgcjtsZXQgaT1bXTtpZih0aGlzLmlubmVyKXt0aGlzLmlubmVyLmN1cnNvci5tb3ZlVG8oZSwxKTtmb3IobGV0IG49dGhpcy5pbm5lci5jdXJzb3Iubm9kZTtuO249bi5wYXJlbnQpe2xldCBzPShyPW4udHJlZSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnByb3Aody5tb3VudGVkKTtpZihzJiZzLnBhcnNlcj09dClmb3IobGV0IGw9dGhpcy5mcmFnSTtsPHRoaXMuZnJhZ21lbnRzLmxlbmd0aDtsKyspe2xldCBmPXRoaXMuZnJhZ21lbnRzW2xdO2lmKGYuZnJvbT49bi50bylicmVhaztmLnRyZWU9PXRoaXMuY3VyRnJhZy50cmVlJiZpLnB1c2goe2ZyYWc6Zixwb3M6bi5mcm9tLWYub2Zmc2V0LG1vdW50OnN9KX19fXJldHVybiBpfX07ZnVuY3Rpb24gd2UoaCxlKXtsZXQgdD1udWxsLHI9ZTtmb3IobGV0IGk9MSxuPTA7aTxoLmxlbmd0aDtpKyspe2xldCBzPWhbaS0xXS50byxsPWhbaV0uZnJvbTtmb3IoO248ci5sZW5ndGg7bisrKXtsZXQgZj1yW25dO2lmKGYuZnJvbT49bClicmVhaztmLnRvPD1zfHwodHx8KHI9dD1lLnNsaWNlKCkpLGYuZnJvbTxzPyh0W25dPW5ldyBCKGYuZnJvbSxzKSxmLnRvPmwmJnQuc3BsaWNlKG4rMSwwLG5ldyBCKGwsZi50bykpKTpmLnRvPmw/dFtuLS1dPW5ldyBCKGwsZi50byk6dC5zcGxpY2Uobi0tLDEpKX19cmV0dXJuIHJ9ZnVuY3Rpb24gQmUoaCxlLHQscil7bGV0IGk9MCxuPTAscz0hMSxsPSExLGY9LTFlOSx1PVtdO2Zvcig7Oyl7bGV0IG89aT09aC5sZW5ndGg/MWU5OnM/aFtpXS50bzpoW2ldLmZyb20sYz1uPT1lLmxlbmd0aD8xZTk6bD9lW25dLnRvOmVbbl0uZnJvbTtpZihzIT1sKXtsZXQgYT1NYXRoLm1heChmLHQpLHk9TWF0aC5taW4obyxjLHIpO2E8eSYmdS5wdXNoKG5ldyBCKGEseSkpfWlmKGY9TWF0aC5taW4obyxjKSxmPT0xZTkpYnJlYWs7bz09ZiYmKHM/KHM9ITEsaSsrKTpzPSEwKSxjPT1mJiYobD8obD0hMSxuKyspOmw9ITApfXJldHVybiB1fWZ1bmN0aW9uIHZlKGgsZSl7bGV0IHQ9W107Zm9yKGxldHtwb3M6cixtb3VudDppLGZyYWc6bn1vZiBoKXtsZXQgcz1yKyhpLm92ZXJsYXk/aS5vdmVybGF5WzBdLmZyb206MCksbD1zK2kudHJlZS5sZW5ndGgsZj1NYXRoLm1heChuLmZyb20scyksdT1NYXRoLm1pbihuLnRvLGwpO2lmKGkub3ZlcmxheSl7bGV0IG89aS5vdmVybGF5Lm1hcChhPT5uZXcgQihhLmZyb20rcixhLnRvK3IpKSxjPUJlKGUsbyxmLHUpO2ZvcihsZXQgYT0wLHk9Zjs7YSsrKXtsZXQgZD1hPT1jLmxlbmd0aCxTPWQ/dTpjW2FdLmZyb207aWYoUz55JiZ0LnB1c2gobmV3IEcoeSxTLGkudHJlZSwtcyxuLmZyb20+PXl8fG4ub3BlblN0YXJ0LG4udG88PVN8fG4ub3BlbkVuZCkpLGQpYnJlYWs7eT1jW2FdLnRvfX1lbHNlIHQucHVzaChuZXcgRyhmLHUsaS50cmVlLC1zLG4uZnJvbT49c3x8bi5vcGVuU3RhcnQsbi50bzw9bHx8bi5vcGVuRW5kKSl9cmV0dXJuIHR9ZXhwb3J0e0llIGFzIERlZmF1bHRCdWZmZXJMZW5ndGgsQSBhcyBJdGVyTW9kZSxuZSBhcyBNb3VudGVkVHJlZSx3IGFzIE5vZGVQcm9wLFogYXMgTm9kZVNldCxOIGFzIE5vZGVUeXBlLGJlIGFzIE5vZGVXZWFrTWFwLHllIGFzIFBhcnNlcixQIGFzIFRyZWUsVCBhcyBUcmVlQnVmZmVyLFYgYXMgVHJlZUN1cnNvcixHIGFzIFRyZWVGcmFnbWVudCxOZSBhcyBwYXJzZU1peGVkfTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShAbGV6ZXIvaGlnaGxpZ2h0QDEuMS4xKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydHtOb2RlUHJvcCBhcyBKfWZyb21cIkBsZXplci9jb21tb25cIjt2YXIgTD0wLGY9Y2xhc3N7Y29uc3RydWN0b3IodCxhLGkpe3RoaXMuc2V0PXQsdGhpcy5iYXNlPWEsdGhpcy5tb2RpZmllZD1pLHRoaXMuaWQ9TCsrfXN0YXRpYyBkZWZpbmUodCl7aWYodD8uYmFzZSl0aHJvdyBuZXcgRXJyb3IoXCJDYW4gbm90IGRlcml2ZSBmcm9tIGEgbW9kaWZpZWQgdGFnXCIpO2xldCBhPW5ldyBmKFtdLG51bGwsW10pO2lmKGEuc2V0LnB1c2goYSksdClmb3IobGV0IGkgb2YgdC5zZXQpYS5zZXQucHVzaChpKTtyZXR1cm4gYX1zdGF0aWMgZGVmaW5lTW9kaWZpZXIoKXtsZXQgdD1uZXcgdjtyZXR1cm4gYT0+YS5tb2RpZmllZC5pbmRleE9mKHQpPi0xP2E6di5nZXQoYS5iYXNlfHxhLGEubW9kaWZpZWQuY29uY2F0KHQpLnNvcnQoKGksbCk9PmkuaWQtbC5pZCkpfX0sUT0wLHY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmluc3RhbmNlcz1bXSx0aGlzLmlkPVErK31zdGF0aWMgZ2V0KHQsYSl7aWYoIWEubGVuZ3RoKXJldHVybiB0O2xldCBpPWFbMF0uaW5zdGFuY2VzLmZpbmQobz0+by5iYXNlPT10JiZVKGEsby5tb2RpZmllZCkpO2lmKGkpcmV0dXJuIGk7bGV0IGw9W10scz1uZXcgZihsLHQsYSk7Zm9yKGxldCBvIG9mIGEpby5pbnN0YW5jZXMucHVzaChzKTtsZXQgYz1WKGEpO2ZvcihsZXQgbyBvZiB0LnNldClmb3IobGV0IGQgb2YgYylsLnB1c2godi5nZXQobyxkKSk7cmV0dXJuIHN9fTtmdW5jdGlvbiBVKHIsdCl7cmV0dXJuIHIubGVuZ3RoPT10Lmxlbmd0aCYmci5ldmVyeSgoYSxpKT0+YT09dFtpXSl9ZnVuY3Rpb24gVihyKXtsZXQgdD1bcl07Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspZm9yKGxldCBpIG9mIFYoci5zbGljZSgwLGEpLmNvbmNhdChyLnNsaWNlKGErMSkpKSl0LnB1c2goaSk7cmV0dXJuIHR9ZnVuY3Rpb24gJChyKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgYSBpbiByKXtsZXQgaT1yW2FdO0FycmF5LmlzQXJyYXkoaSl8fChpPVtpXSk7Zm9yKGxldCBsIG9mIGEuc3BsaXQoXCIgXCIpKWlmKGwpe2xldCBzPVtdLGM9MixvPWw7Zm9yKGxldCBwPTA7Oyl7aWYobz09XCIuLi5cIiYmcD4wJiZwKzM9PWwubGVuZ3RoKXtjPTE7YnJlYWt9bGV0IGg9L15cIig/OlteXCJcXFxcXXxcXFxcLikqP1wifFteXFwvIV0rLy5leGVjKG8pO2lmKCFoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBwYXRoOiBcIitsKTtpZihzLnB1c2goaFswXT09XCIqXCI/XCJcIjpoWzBdWzBdPT0nXCInP0pTT04ucGFyc2UoaFswXSk6aFswXSkscCs9aFswXS5sZW5ndGgscD09bC5sZW5ndGgpYnJlYWs7bGV0IE49bFtwKytdO2lmKHA9PWwubGVuZ3RoJiZOPT1cIiFcIil7Yz0wO2JyZWFrfWlmKE4hPVwiL1wiKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBwYXRoOiBcIitsKTtvPWwuc2xpY2UocCl9bGV0IGQ9cy5sZW5ndGgtMSxnPXNbZF07aWYoIWcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHBhdGg6IFwiK2wpO2xldCBPPW5ldyBNKGksYyxkPjA/cy5zbGljZSgwLGQpOm51bGwpO3RbZ109Ty5zb3J0KHRbZ10pfX1yZXR1cm4gei5hZGQodCl9dmFyIHo9bmV3IEosTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGEsaSxsKXt0aGlzLnRhZ3M9dCx0aGlzLm1vZGU9YSx0aGlzLmNvbnRleHQ9aSx0aGlzLm5leHQ9bH1nZXQgb3BhcXVlKCl7cmV0dXJuIHRoaXMubW9kZT09MH1nZXQgaW5oZXJpdCgpe3JldHVybiB0aGlzLm1vZGU9PTF9c29ydCh0KXtyZXR1cm4hdHx8dC5kZXB0aDx0aGlzLmRlcHRoPyh0aGlzLm5leHQ9dCx0aGlzKToodC5uZXh0PXRoaXMuc29ydCh0Lm5leHQpLHQpfWdldCBkZXB0aCgpe3JldHVybiB0aGlzLmNvbnRleHQ/dGhpcy5jb250ZXh0Lmxlbmd0aDowfX07TS5lbXB0eT1uZXcgTShbXSwyLG51bGwpO2Z1bmN0aW9uIFcocix0KXtsZXQgYT1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgcyBvZiByKWlmKCFBcnJheS5pc0FycmF5KHMudGFnKSlhW3MudGFnLmlkXT1zLmNsYXNzO2Vsc2UgZm9yKGxldCBjIG9mIHMudGFnKWFbYy5pZF09cy5jbGFzcztsZXR7c2NvcGU6aSxhbGw6bD1udWxsfT10fHx7fTtyZXR1cm57c3R5bGU6cz0+e2xldCBjPWw7Zm9yKGxldCBvIG9mIHMpZm9yKGxldCBkIG9mIG8uc2V0KXtsZXQgZz1hW2QuaWRdO2lmKGcpe2M9Yz9jK1wiIFwiK2c6ZzticmVha319cmV0dXJuIGN9LHNjb3BlOml9fWZ1bmN0aW9uIFgocix0KXtsZXQgYT1udWxsO2ZvcihsZXQgaSBvZiByKXtsZXQgbD1pLnN0eWxlKHQpO2wmJihhPWE/YStcIiBcIitsOmwpfXJldHVybiBhfWZ1bmN0aW9uIF8ocix0LGEsaT0wLGw9ci5sZW5ndGgpe2xldCBzPW5ldyBQKGksQXJyYXkuaXNBcnJheSh0KT90Olt0XSxhKTtzLmhpZ2hsaWdodFJhbmdlKHIuY3Vyc29yKCksaSxsLFwiXCIscy5oaWdobGlnaHRlcnMpLHMuZmx1c2gobCl9dmFyIFA9Y2xhc3N7Y29uc3RydWN0b3IodCxhLGkpe3RoaXMuYXQ9dCx0aGlzLmhpZ2hsaWdodGVycz1hLHRoaXMuc3Bhbj1pLHRoaXMuY2xhc3M9XCJcIn1zdGFydFNwYW4odCxhKXthIT10aGlzLmNsYXNzJiYodGhpcy5mbHVzaCh0KSx0PnRoaXMuYXQmJih0aGlzLmF0PXQpLHRoaXMuY2xhc3M9YSl9Zmx1c2godCl7dD50aGlzLmF0JiZ0aGlzLmNsYXNzJiZ0aGlzLnNwYW4odGhpcy5hdCx0LHRoaXMuY2xhc3MpfWhpZ2hsaWdodFJhbmdlKHQsYSxpLGwscyl7bGV0e3R5cGU6Yyxmcm9tOm8sdG86ZH09dDtpZihvPj1pfHxkPD1hKXJldHVybjtjLmlzVG9wJiYocz10aGlzLmhpZ2hsaWdodGVycy5maWx0ZXIoTj0+IU4uc2NvcGV8fE4uc2NvcGUoYykpKTtsZXQgZz1sLE89WSh0KXx8TS5lbXB0eSxwPVgocyxPLnRhZ3MpO2lmKHAmJihnJiYoZys9XCIgXCIpLGcrPXAsTy5tb2RlPT0xJiYobCs9KGw/XCIgXCI6XCJcIikrcCkpLHRoaXMuc3RhcnRTcGFuKHQuZnJvbSxnKSxPLm9wYXF1ZSlyZXR1cm47bGV0IGg9dC50cmVlJiZ0LnRyZWUucHJvcChKLm1vdW50ZWQpO2lmKGgmJmgub3ZlcmxheSl7bGV0IE49dC5ub2RlLmVudGVyKGgub3ZlcmxheVswXS5mcm9tK28sMSksRz10aGlzLmhpZ2hsaWdodGVycy5maWx0ZXIoeD0+IXguc2NvcGV8fHguc2NvcGUoaC50cmVlLnR5cGUpKSxEPXQuZmlyc3RDaGlsZCgpO2ZvcihsZXQgeD0wLFM9bzs7eCsrKXtsZXQgQT14PGgub3ZlcmxheS5sZW5ndGg/aC5vdmVybGF5W3hdOm51bGwscT1BP0EuZnJvbStvOmQsSD1NYXRoLm1heChhLFMpLEU9TWF0aC5taW4oaSxxKTtpZihIPEUmJkQpZm9yKDt0LmZyb208RSYmKHRoaXMuaGlnaGxpZ2h0UmFuZ2UodCxILEUsbCxzKSx0aGlzLnN0YXJ0U3BhbihNYXRoLm1pbihpLHQudG8pLGcpLCEodC50bz49cXx8IXQubmV4dFNpYmxpbmcoKSkpOyk7aWYoIUF8fHE+aSlicmVhaztTPUEudG8rbyxTPmEmJih0aGlzLmhpZ2hsaWdodFJhbmdlKE4uY3Vyc29yKCksTWF0aC5tYXgoYSxBLmZyb20rbyksTWF0aC5taW4oaSxTKSxsLEcpLHRoaXMuc3RhcnRTcGFuKFMsZykpfUQmJnQucGFyZW50KCl9ZWxzZSBpZih0LmZpcnN0Q2hpbGQoKSl7ZG8gaWYoISh0LnRvPD1hKSl7aWYodC5mcm9tPj1pKWJyZWFrO3RoaXMuaGlnaGxpZ2h0UmFuZ2UodCxhLGksbCxzKSx0aGlzLnN0YXJ0U3BhbihNYXRoLm1pbihpLHQudG8pLGcpfXdoaWxlKHQubmV4dFNpYmxpbmcoKSk7dC5wYXJlbnQoKX19fTtmdW5jdGlvbiBZKHIpe2xldCB0PXIudHlwZS5wcm9wKHopO2Zvcig7dCYmdC5jb250ZXh0JiYhci5tYXRjaENvbnRleHQodC5jb250ZXh0KTspdD10Lm5leHQ7cmV0dXJuIHR8fG51bGx9dmFyIGU9Zi5kZWZpbmUsST1lKCksYj1lKCksQj1lKGIpLEY9ZShiKSx5PWUoKSxDPWUoeSksSz1lKHkpLGs9ZSgpLHc9ZShrKSxtPWUoKSx1PWUoKSxqPWUoKSxSPWUoaiksVD1lKCksbj17Y29tbWVudDpJLGxpbmVDb21tZW50OmUoSSksYmxvY2tDb21tZW50OmUoSSksZG9jQ29tbWVudDplKEkpLG5hbWU6Yix2YXJpYWJsZU5hbWU6ZShiKSx0eXBlTmFtZTpCLHRhZ05hbWU6ZShCKSxwcm9wZXJ0eU5hbWU6RixhdHRyaWJ1dGVOYW1lOmUoRiksY2xhc3NOYW1lOmUoYiksbGFiZWxOYW1lOmUoYiksbmFtZXNwYWNlOmUoYiksbWFjcm9OYW1lOmUoYiksbGl0ZXJhbDp5LHN0cmluZzpDLGRvY1N0cmluZzplKEMpLGNoYXJhY3RlcjplKEMpLGF0dHJpYnV0ZVZhbHVlOmUoQyksbnVtYmVyOkssaW50ZWdlcjplKEspLGZsb2F0OmUoSyksYm9vbDplKHkpLHJlZ2V4cDplKHkpLGVzY2FwZTplKHkpLGNvbG9yOmUoeSksdXJsOmUoeSksa2V5d29yZDptLHNlbGY6ZShtKSxudWxsOmUobSksYXRvbTplKG0pLHVuaXQ6ZShtKSxtb2RpZmllcjplKG0pLG9wZXJhdG9yS2V5d29yZDplKG0pLGNvbnRyb2xLZXl3b3JkOmUobSksZGVmaW5pdGlvbktleXdvcmQ6ZShtKSxtb2R1bGVLZXl3b3JkOmUobSksb3BlcmF0b3I6dSxkZXJlZk9wZXJhdG9yOmUodSksYXJpdGhtZXRpY09wZXJhdG9yOmUodSksbG9naWNPcGVyYXRvcjplKHUpLGJpdHdpc2VPcGVyYXRvcjplKHUpLGNvbXBhcmVPcGVyYXRvcjplKHUpLHVwZGF0ZU9wZXJhdG9yOmUodSksZGVmaW5pdGlvbk9wZXJhdG9yOmUodSksdHlwZU9wZXJhdG9yOmUodSksY29udHJvbE9wZXJhdG9yOmUodSkscHVuY3R1YXRpb246aixzZXBhcmF0b3I6ZShqKSxicmFja2V0OlIsYW5nbGVCcmFja2V0OmUoUiksc3F1YXJlQnJhY2tldDplKFIpLHBhcmVuOmUoUiksYnJhY2U6ZShSKSxjb250ZW50OmssaGVhZGluZzp3LGhlYWRpbmcxOmUodyksaGVhZGluZzI6ZSh3KSxoZWFkaW5nMzplKHcpLGhlYWRpbmc0OmUodyksaGVhZGluZzU6ZSh3KSxoZWFkaW5nNjplKHcpLGNvbnRlbnRTZXBhcmF0b3I6ZShrKSxsaXN0OmUoaykscXVvdGU6ZShrKSxlbXBoYXNpczplKGspLHN0cm9uZzplKGspLGxpbms6ZShrKSxtb25vc3BhY2U6ZShrKSxzdHJpa2V0aHJvdWdoOmUoayksaW5zZXJ0ZWQ6ZSgpLGRlbGV0ZWQ6ZSgpLGNoYW5nZWQ6ZSgpLGludmFsaWQ6ZSgpLG1ldGE6VCxkb2N1bWVudE1ldGE6ZShUKSxhbm5vdGF0aW9uOmUoVCkscHJvY2Vzc2luZ0luc3RydWN0aW9uOmUoVCksZGVmaW5pdGlvbjpmLmRlZmluZU1vZGlmaWVyKCksY29uc3RhbnQ6Zi5kZWZpbmVNb2RpZmllcigpLGZ1bmN0aW9uOmYuZGVmaW5lTW9kaWZpZXIoKSxzdGFuZGFyZDpmLmRlZmluZU1vZGlmaWVyKCksbG9jYWw6Zi5kZWZpbmVNb2RpZmllcigpLHNwZWNpYWw6Zi5kZWZpbmVNb2RpZmllcigpfSx0dD1XKFt7dGFnOm4ubGluayxjbGFzczpcInRvay1saW5rXCJ9LHt0YWc6bi5oZWFkaW5nLGNsYXNzOlwidG9rLWhlYWRpbmdcIn0se3RhZzpuLmVtcGhhc2lzLGNsYXNzOlwidG9rLWVtcGhhc2lzXCJ9LHt0YWc6bi5zdHJvbmcsY2xhc3M6XCJ0b2stc3Ryb25nXCJ9LHt0YWc6bi5rZXl3b3JkLGNsYXNzOlwidG9rLWtleXdvcmRcIn0se3RhZzpuLmF0b20sY2xhc3M6XCJ0b2stYXRvbVwifSx7dGFnOm4uYm9vbCxjbGFzczpcInRvay1ib29sXCJ9LHt0YWc6bi51cmwsY2xhc3M6XCJ0b2stdXJsXCJ9LHt0YWc6bi5sYWJlbE5hbWUsY2xhc3M6XCJ0b2stbGFiZWxOYW1lXCJ9LHt0YWc6bi5pbnNlcnRlZCxjbGFzczpcInRvay1pbnNlcnRlZFwifSx7dGFnOm4uZGVsZXRlZCxjbGFzczpcInRvay1kZWxldGVkXCJ9LHt0YWc6bi5saXRlcmFsLGNsYXNzOlwidG9rLWxpdGVyYWxcIn0se3RhZzpuLnN0cmluZyxjbGFzczpcInRvay1zdHJpbmdcIn0se3RhZzpuLm51bWJlcixjbGFzczpcInRvay1udW1iZXJcIn0se3RhZzpbbi5yZWdleHAsbi5lc2NhcGUsbi5zcGVjaWFsKG4uc3RyaW5nKV0sY2xhc3M6XCJ0b2stc3RyaW5nMlwifSx7dGFnOm4udmFyaWFibGVOYW1lLGNsYXNzOlwidG9rLXZhcmlhYmxlTmFtZVwifSx7dGFnOm4ubG9jYWwobi52YXJpYWJsZU5hbWUpLGNsYXNzOlwidG9rLXZhcmlhYmxlTmFtZSB0b2stbG9jYWxcIn0se3RhZzpuLmRlZmluaXRpb24obi52YXJpYWJsZU5hbWUpLGNsYXNzOlwidG9rLXZhcmlhYmxlTmFtZSB0b2stZGVmaW5pdGlvblwifSx7dGFnOm4uc3BlY2lhbChuLnZhcmlhYmxlTmFtZSksY2xhc3M6XCJ0b2stdmFyaWFibGVOYW1lMlwifSx7dGFnOm4uZGVmaW5pdGlvbihuLnByb3BlcnR5TmFtZSksY2xhc3M6XCJ0b2stcHJvcGVydHlOYW1lIHRvay1kZWZpbml0aW9uXCJ9LHt0YWc6bi50eXBlTmFtZSxjbGFzczpcInRvay10eXBlTmFtZVwifSx7dGFnOm4ubmFtZXNwYWNlLGNsYXNzOlwidG9rLW5hbWVzcGFjZVwifSx7dGFnOm4uY2xhc3NOYW1lLGNsYXNzOlwidG9rLWNsYXNzTmFtZVwifSx7dGFnOm4ubWFjcm9OYW1lLGNsYXNzOlwidG9rLW1hY3JvTmFtZVwifSx7dGFnOm4ucHJvcGVydHlOYW1lLGNsYXNzOlwidG9rLXByb3BlcnR5TmFtZVwifSx7dGFnOm4ub3BlcmF0b3IsY2xhc3M6XCJ0b2stb3BlcmF0b3JcIn0se3RhZzpuLmNvbW1lbnQsY2xhc3M6XCJ0b2stY29tbWVudFwifSx7dGFnOm4ubWV0YSxjbGFzczpcInRvay1tZXRhXCJ9LHt0YWc6bi5pbnZhbGlkLGNsYXNzOlwidG9rLWludmFsaWRcIn0se3RhZzpuLnB1bmN0dWF0aW9uLGNsYXNzOlwidG9rLXB1bmN0dWF0aW9uXCJ9XSk7ZXhwb3J0e2YgYXMgVGFnLHR0IGFzIGNsYXNzSGlnaGxpZ2h0ZXIsWSBhcyBnZXRTdHlsZVRhZ3MsXyBhcyBoaWdobGlnaHRUcmVlLCQgYXMgc3R5bGVUYWdzLFcgYXMgdGFnSGlnaGxpZ2h0ZXIsbiBhcyB0YWdzfTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShAY29kZW1pcnJvci9sYW5ndWFnZUA2LjIuMSkgZGVubyBwcm9kdWN0aW9uICovXG5pbXBvcnR7Tm9kZVByb3AgYXMgdixUcmVlIGFzIHAsSXRlck1vZGUgYXMgcXQsVHJlZUZyYWdtZW50IGFzIFcsUGFyc2VyIGFzIGt0LE5vZGVUeXBlIGFzIEosTm9kZVNldCBhcyBIdH1mcm9tXCJAbGV6ZXIvY29tbW9uXCI7aW1wb3J0e1N0YXRlRWZmZWN0IGFzIEssU3RhdGVGaWVsZCBhcyBvdCxGYWNldCBhcyBiLEVkaXRvclN0YXRlIGFzIE8sY291bnRDb2x1bW4gYXMgSnQsY29tYmluZUNvbmZpZyBhcyBidCxSYW5nZVNldCBhcyB3dCxSYW5nZVNldEJ1aWxkZXIgYXMgeXQsUHJlYyBhcyBLdH1mcm9tXCJAY29kZW1pcnJvci9zdGF0ZVwiO2ltcG9ydHtWaWV3UGx1Z2luIGFzIGx0LGxvZ0V4Y2VwdGlvbiBhcyBfdCxEZWNvcmF0aW9uIGFzIGssRWRpdG9yVmlldyBhcyB5LFdpZGdldFR5cGUgYXMgUXQsZ3V0dGVyIGFzIFh0LEd1dHRlck1hcmtlciBhcyBZdH1mcm9tXCIvdjk2L0Bjb2RlbWlycm9yL3ZpZXdANi4zLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBYkdWNlpYSXZZMjl0Ylc5dS9kZW5vL3ZpZXcuanNcIjtpbXBvcnR7dGFncyBhcyBmLHRhZ0hpZ2hsaWdodGVyIGFzIFp0LGhpZ2hsaWdodFRyZWUgYXMgdGUsc3R5bGVUYWdzIGFzIGVlfWZyb21cIi92OTYvQGxlemVyL2hpZ2hsaWdodEAxLjEuMS9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFiR1Y2WlhJdlkyOXRiVzl1L2Rlbm8vaGlnaGxpZ2h0LmpzXCI7aW1wb3J0e1N0eWxlTW9kdWxlIGFzIGZ0fWZyb21cIi92OTYvc3R5bGUtbW9kQDQuMC4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QWJHVjZaWEl2WTI5dGJXOXUvZGVuby9zdHlsZS1tb2QuanNcIjt2YXIgWSxUPW5ldyB2O2Z1bmN0aW9uIHZ0KG4pe3JldHVybiBiLmRlZmluZSh7Y29tYmluZTpuP3Q9PnQuY29uY2F0KG4pOnZvaWQgMH0pfXZhciBjPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxyPVtdKXt0aGlzLmRhdGE9dCxPLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShcInRyZWVcIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSxcInRyZWVcIix7Z2V0KCl7cmV0dXJuIG0odGhpcyl9fSksdGhpcy5wYXJzZXI9ZSx0aGlzLmV4dGVuc2lvbj1bUC5vZih0aGlzKSxPLmxhbmd1YWdlRGF0YS5vZigoaSxzLG8pPT5pLmZhY2V0KHV0KGkscyxvKSkpXS5jb25jYXQocil9aXNBY3RpdmVBdCh0LGUscj0tMSl7cmV0dXJuIHV0KHQsZSxyKT09dGhpcy5kYXRhfWZpbmRSZWdpb25zKHQpe2xldCBlPXQuZmFjZXQoUCk7aWYoZT8uZGF0YT09dGhpcy5kYXRhKXJldHVyblt7ZnJvbTowLHRvOnQuZG9jLmxlbmd0aH1dO2lmKCFlfHwhZS5hbGxvd3NOZXN0aW5nKXJldHVybltdO2xldCByPVtdLGk9KHMsbyk9PntpZihzLnByb3AoVCk9PXRoaXMuZGF0YSl7ci5wdXNoKHtmcm9tOm8sdG86bytzLmxlbmd0aH0pO3JldHVybn1sZXQgbD1zLnByb3Aodi5tb3VudGVkKTtpZihsKXtpZihsLnRyZWUucHJvcChUKT09dGhpcy5kYXRhKXtpZihsLm92ZXJsYXkpZm9yKGxldCBhIG9mIGwub3ZlcmxheSlyLnB1c2goe2Zyb206YS5mcm9tK28sdG86YS50bytvfSk7ZWxzZSByLnB1c2goe2Zyb206byx0bzpvK3MubGVuZ3RofSk7cmV0dXJufWVsc2UgaWYobC5vdmVybGF5KXtsZXQgYT1yLmxlbmd0aDtpZihpKGwudHJlZSxsLm92ZXJsYXlbMF0uZnJvbStvKSxyLmxlbmd0aD5hKXJldHVybn19Zm9yKGxldCBhPTA7YTxzLmNoaWxkcmVuLmxlbmd0aDthKyspe2xldCBoPXMuY2hpbGRyZW5bYV07aCBpbnN0YW5jZW9mIHAmJmkoaCxzLnBvc2l0aW9uc1thXStvKX19O3JldHVybiBpKG0odCksMCkscn1nZXQgYWxsb3dzTmVzdGluZygpe3JldHVybiEwfX07Yy5zZXRTdGF0ZT1LLmRlZmluZSgpO2Z1bmN0aW9uIHV0KG4sdCxlKXtsZXQgcj1uLmZhY2V0KFApO2lmKCFyKXJldHVybiBudWxsO2xldCBpPXIuZGF0YTtpZihyLmFsbG93c05lc3RpbmcpZm9yKGxldCBzPW0obikudG9wTm9kZTtzO3M9cy5lbnRlcih0LGUscXQuRXhjbHVkZUJ1ZmZlcnMpKWk9cy50eXBlLnByb3AoVCl8fGk7cmV0dXJuIGl9dmFyIEI9Y2xhc3MgZXh0ZW5kcyBje2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnBhcnNlcj1lfXN0YXRpYyBkZWZpbmUodCl7bGV0IGU9dnQodC5sYW5ndWFnZURhdGEpO3JldHVybiBuZXcgQihlLHQucGFyc2VyLmNvbmZpZ3VyZSh7cHJvcHM6W1QuYWRkKHI9PnIuaXNUb3A/ZTp2b2lkIDApXX0pKX1jb25maWd1cmUodCl7cmV0dXJuIG5ldyBCKHRoaXMuZGF0YSx0aGlzLnBhcnNlci5jb25maWd1cmUodCkpfWdldCBhbGxvd3NOZXN0aW5nKCl7cmV0dXJuIHRoaXMucGFyc2VyLmhhc1dyYXBwZXJzKCl9fTtmdW5jdGlvbiBtKG4pe2xldCB0PW4uZmllbGQoYy5zdGF0ZSwhMSk7cmV0dXJuIHQ/dC50cmVlOnAuZW1wdHl9ZnVuY3Rpb24gbmUobix0LGU9NTApe3ZhciByO2xldCBpPShyPW4uZmllbGQoYy5zdGF0ZSwhMSkpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5jb250ZXh0O3JldHVybiBpJiYoaS5pc0RvbmUodCl8fGkud29yayhlLHQpKT9pLnRyZWU6bnVsbH1mdW5jdGlvbiB6ZShuLHQ9bi5kb2MubGVuZ3RoKXt2YXIgZTtyZXR1cm4oKGU9bi5maWVsZChjLnN0YXRlLCExKSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLmNvbnRleHQuaXNEb25lKHQpKXx8ITF9ZnVuY3Rpb24gR2Uobix0PW4udmlld3BvcnQudG8sZT0xMDApe2xldCByPW5lKG4uc3RhdGUsdCxlKTtyZXR1cm4gciE9bShuLnN0YXRlKSYmbi5kaXNwYXRjaCh7fSksISFyfWZ1bmN0aW9uIHFlKG4pe3ZhciB0O3JldHVybigodD1uLnBsdWdpbihTdCkpPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dC5pc1dvcmtpbmcoKSl8fCExfXZhciBldD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9dC5sZW5ndGgpe3RoaXMuZG9jPXQsdGhpcy5sZW5ndGg9ZSx0aGlzLmN1cnNvclBvcz0wLHRoaXMuc3RyaW5nPVwiXCIsdGhpcy5jdXJzb3I9dC5pdGVyKCl9c3luY1RvKHQpe3JldHVybiB0aGlzLnN0cmluZz10aGlzLmN1cnNvci5uZXh0KHQtdGhpcy5jdXJzb3JQb3MpLnZhbHVlLHRoaXMuY3Vyc29yUG9zPXQrdGhpcy5zdHJpbmcubGVuZ3RoLHRoaXMuY3Vyc29yUG9zLXRoaXMuc3RyaW5nLmxlbmd0aH1jaHVuayh0KXtyZXR1cm4gdGhpcy5zeW5jVG8odCksdGhpcy5zdHJpbmd9Z2V0IGxpbmVDaHVua3MoKXtyZXR1cm4hMH1yZWFkKHQsZSl7bGV0IHI9dGhpcy5jdXJzb3JQb3MtdGhpcy5zdHJpbmcubGVuZ3RoO3JldHVybiB0PHJ8fGU+PXRoaXMuY3Vyc29yUG9zP3RoaXMuZG9jLnNsaWNlU3RyaW5nKHQsZSk6dGhpcy5zdHJpbmcuc2xpY2UodC1yLGUtcil9fSxJPW51bGwseD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUscj1bXSxpLHMsbyxsLGEpe3RoaXMucGFyc2VyPXQsdGhpcy5zdGF0ZT1lLHRoaXMuZnJhZ21lbnRzPXIsdGhpcy50cmVlPWksdGhpcy50cmVlTGVuPXMsdGhpcy52aWV3cG9ydD1vLHRoaXMuc2tpcHBlZD1sLHRoaXMuc2NoZWR1bGVPbj1hLHRoaXMucGFyc2U9bnVsbCx0aGlzLnRlbXBTa2lwcGVkPVtdfXN0YXRpYyBjcmVhdGUodCxlLHIpe3JldHVybiBuZXcgeCh0LGUsW10scC5lbXB0eSwwLHIsW10sbnVsbCl9c3RhcnRQYXJzZSgpe3JldHVybiB0aGlzLnBhcnNlci5zdGFydFBhcnNlKG5ldyBldCh0aGlzLnN0YXRlLmRvYyksdGhpcy5mcmFnbWVudHMpfXdvcmsodCxlKXtyZXR1cm4gZSE9bnVsbCYmZT49dGhpcy5zdGF0ZS5kb2MubGVuZ3RoJiYoZT12b2lkIDApLHRoaXMudHJlZSE9cC5lbXB0eSYmdGhpcy5pc0RvbmUoZT8/dGhpcy5zdGF0ZS5kb2MubGVuZ3RoKT8odGhpcy50YWtlVHJlZSgpLCEwKTp0aGlzLndpdGhDb250ZXh0KCgpPT57dmFyIHI7aWYodHlwZW9mIHQ9PVwibnVtYmVyXCIpe2xldCBpPURhdGUubm93KCkrdDt0PSgpPT5EYXRlLm5vdygpPml9Zm9yKHRoaXMucGFyc2V8fCh0aGlzLnBhcnNlPXRoaXMuc3RhcnRQYXJzZSgpKSxlIT1udWxsJiYodGhpcy5wYXJzZS5zdG9wcGVkQXQ9PW51bGx8fHRoaXMucGFyc2Uuc3RvcHBlZEF0PmUpJiZlPHRoaXMuc3RhdGUuZG9jLmxlbmd0aCYmdGhpcy5wYXJzZS5zdG9wQXQoZSk7Oyl7bGV0IGk9dGhpcy5wYXJzZS5hZHZhbmNlKCk7aWYoaSlpZih0aGlzLmZyYWdtZW50cz10aGlzLndpdGhvdXRUZW1wU2tpcHBlZChXLmFkZFRyZWUoaSx0aGlzLmZyYWdtZW50cyx0aGlzLnBhcnNlLnN0b3BwZWRBdCE9bnVsbCkpLHRoaXMudHJlZUxlbj0ocj10aGlzLnBhcnNlLnN0b3BwZWRBdCkhPT1udWxsJiZyIT09dm9pZCAwP3I6dGhpcy5zdGF0ZS5kb2MubGVuZ3RoLHRoaXMudHJlZT1pLHRoaXMucGFyc2U9bnVsbCx0aGlzLnRyZWVMZW48KGU/P3RoaXMuc3RhdGUuZG9jLmxlbmd0aCkpdGhpcy5wYXJzZT10aGlzLnN0YXJ0UGFyc2UoKTtlbHNlIHJldHVybiEwO2lmKHQoKSlyZXR1cm4hMX19KX10YWtlVHJlZSgpe2xldCB0LGU7dGhpcy5wYXJzZSYmKHQ9dGhpcy5wYXJzZS5wYXJzZWRQb3MpPj10aGlzLnRyZWVMZW4mJigodGhpcy5wYXJzZS5zdG9wcGVkQXQ9PW51bGx8fHRoaXMucGFyc2Uuc3RvcHBlZEF0PnQpJiZ0aGlzLnBhcnNlLnN0b3BBdCh0KSx0aGlzLndpdGhDb250ZXh0KCgpPT57Zm9yKDshKGU9dGhpcy5wYXJzZS5hZHZhbmNlKCkpOyk7fSksdGhpcy50cmVlTGVuPXQsdGhpcy50cmVlPWUsdGhpcy5mcmFnbWVudHM9dGhpcy53aXRob3V0VGVtcFNraXBwZWQoVy5hZGRUcmVlKHRoaXMudHJlZSx0aGlzLmZyYWdtZW50cywhMCkpLHRoaXMucGFyc2U9bnVsbCl9d2l0aENvbnRleHQodCl7bGV0IGU9STtJPXRoaXM7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtJPWV9fXdpdGhvdXRUZW1wU2tpcHBlZCh0KXtmb3IobGV0IGU7ZT10aGlzLnRlbXBTa2lwcGVkLnBvcCgpOyl0PWN0KHQsZS5mcm9tLGUudG8pO3JldHVybiB0fWNoYW5nZXModCxlKXtsZXR7ZnJhZ21lbnRzOnIsdHJlZTppLHRyZWVMZW46cyx2aWV3cG9ydDpvLHNraXBwZWQ6bH09dGhpcztpZih0aGlzLnRha2VUcmVlKCksIXQuZW1wdHkpe2xldCBhPVtdO2lmKHQuaXRlckNoYW5nZWRSYW5nZXMoKGgsdSxkLGcpPT5hLnB1c2goe2Zyb21BOmgsdG9BOnUsZnJvbUI6ZCx0b0I6Z30pKSxyPVcuYXBwbHlDaGFuZ2VzKHIsYSksaT1wLmVtcHR5LHM9MCxvPXtmcm9tOnQubWFwUG9zKG8uZnJvbSwtMSksdG86dC5tYXBQb3Moby50bywxKX0sdGhpcy5za2lwcGVkLmxlbmd0aCl7bD1bXTtmb3IobGV0IGggb2YgdGhpcy5za2lwcGVkKXtsZXQgdT10Lm1hcFBvcyhoLmZyb20sMSksZD10Lm1hcFBvcyhoLnRvLC0xKTt1PGQmJmwucHVzaCh7ZnJvbTp1LHRvOmR9KX19fXJldHVybiBuZXcgeCh0aGlzLnBhcnNlcixlLHIsaSxzLG8sbCx0aGlzLnNjaGVkdWxlT24pfXVwZGF0ZVZpZXdwb3J0KHQpe2lmKHRoaXMudmlld3BvcnQuZnJvbT09dC5mcm9tJiZ0aGlzLnZpZXdwb3J0LnRvPT10LnRvKXJldHVybiExO3RoaXMudmlld3BvcnQ9dDtsZXQgZT10aGlzLnNraXBwZWQubGVuZ3RoO2ZvcihsZXQgcj0wO3I8dGhpcy5za2lwcGVkLmxlbmd0aDtyKyspe2xldHtmcm9tOmksdG86c309dGhpcy5za2lwcGVkW3JdO2k8dC50byYmcz50LmZyb20mJih0aGlzLmZyYWdtZW50cz1jdCh0aGlzLmZyYWdtZW50cyxpLHMpLHRoaXMuc2tpcHBlZC5zcGxpY2Uoci0tLDEpKX1yZXR1cm4gdGhpcy5za2lwcGVkLmxlbmd0aD49ZT8hMToodGhpcy5yZXNldCgpLCEwKX1yZXNldCgpe3RoaXMucGFyc2UmJih0aGlzLnRha2VUcmVlKCksdGhpcy5wYXJzZT1udWxsKX1za2lwVW50aWxJblZpZXcodCxlKXt0aGlzLnNraXBwZWQucHVzaCh7ZnJvbTp0LHRvOmV9KX1zdGF0aWMgZ2V0U2tpcHBpbmdQYXJzZXIodCl7cmV0dXJuIG5ldyBjbGFzcyBleHRlbmRzIGt0e2NyZWF0ZVBhcnNlKGUscixpKXtsZXQgcz1pWzBdLmZyb20sbz1pW2kubGVuZ3RoLTFdLnRvO3JldHVybntwYXJzZWRQb3M6cyxhZHZhbmNlKCl7bGV0IGE9STtpZihhKXtmb3IobGV0IGggb2YgaSlhLnRlbXBTa2lwcGVkLnB1c2goaCk7dCYmKGEuc2NoZWR1bGVPbj1hLnNjaGVkdWxlT24/UHJvbWlzZS5hbGwoW2Euc2NoZWR1bGVPbix0XSk6dCl9cmV0dXJuIHRoaXMucGFyc2VkUG9zPW8sbmV3IHAoSi5ub25lLFtdLFtdLG8tcyl9LHN0b3BwZWRBdDpudWxsLHN0b3BBdCgpe319fX19aXNEb25lKHQpe3Q9TWF0aC5taW4odCx0aGlzLnN0YXRlLmRvYy5sZW5ndGgpO2xldCBlPXRoaXMuZnJhZ21lbnRzO3JldHVybiB0aGlzLnRyZWVMZW4+PXQmJmUubGVuZ3RoJiZlWzBdLmZyb209PTAmJmVbMF0udG8+PXR9c3RhdGljIGdldCgpe3JldHVybiBJfX07ZnVuY3Rpb24gY3Qobix0LGUpe3JldHVybiBXLmFwcGx5Q2hhbmdlcyhuLFt7ZnJvbUE6dCx0b0E6ZSxmcm9tQjp0LHRvQjplfV0pfXZhciBTPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY29udGV4dD10LHRoaXMudHJlZT10LnRyZWV9YXBwbHkodCl7aWYoIXQuZG9jQ2hhbmdlZCYmdGhpcy50cmVlPT10aGlzLmNvbnRleHQudHJlZSlyZXR1cm4gdGhpcztsZXQgZT10aGlzLmNvbnRleHQuY2hhbmdlcyh0LmNoYW5nZXMsdC5zdGF0ZSkscj10aGlzLmNvbnRleHQudHJlZUxlbj09dC5zdGFydFN0YXRlLmRvYy5sZW5ndGg/dm9pZCAwOk1hdGgubWF4KHQuY2hhbmdlcy5tYXBQb3ModGhpcy5jb250ZXh0LnRyZWVMZW4pLGUudmlld3BvcnQudG8pO3JldHVybiBlLndvcmsoMjAscil8fGUudGFrZVRyZWUoKSxuZXcgUyhlKX1zdGF0aWMgaW5pdCh0KXtsZXQgZT1NYXRoLm1pbigzZTMsdC5kb2MubGVuZ3RoKSxyPXguY3JlYXRlKHQuZmFjZXQoUCkucGFyc2VyLHQse2Zyb206MCx0bzplfSk7cmV0dXJuIHIud29yaygyMCxlKXx8ci50YWtlVHJlZSgpLG5ldyBTKHIpfX07Yy5zdGF0ZT1vdC5kZWZpbmUoe2NyZWF0ZTpTLmluaXQsdXBkYXRlKG4sdCl7Zm9yKGxldCBlIG9mIHQuZWZmZWN0cylpZihlLmlzKGMuc2V0U3RhdGUpKXJldHVybiBlLnZhbHVlO3JldHVybiB0LnN0YXJ0U3RhdGUuZmFjZXQoUCkhPXQuc3RhdGUuZmFjZXQoUCk/Uy5pbml0KHQuc3RhdGUpOm4uYXBwbHkodCl9fSk7dmFyIHh0PW49PntsZXQgdD1zZXRUaW1lb3V0KCgpPT5uKCksNTAwKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KHQpfTt0eXBlb2YgcmVxdWVzdElkbGVDYWxsYmFjazxcInVcIiYmKHh0PW49PntsZXQgdD0tMSxlPXNldFRpbWVvdXQoKCk9Pnt0PXJlcXVlc3RJZGxlQ2FsbGJhY2sobix7dGltZW91dDo1MDAtMTAwfSl9LDEwMCk7cmV0dXJuKCk9PnQ8MD9jbGVhclRpbWVvdXQoZSk6Y2FuY2VsSWRsZUNhbGxiYWNrKHQpfSk7dmFyIFo9dHlwZW9mIG5hdmlnYXRvcjxcInVcIiYmKChZPW5hdmlnYXRvci5zY2hlZHVsaW5nKT09PW51bGx8fFk9PT12b2lkIDA/dm9pZCAwOlkuaXNJbnB1dFBlbmRpbmcpPygpPT5uYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZygpOm51bGwsU3Q9bHQuZnJvbUNsYXNzKGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmlldz10LHRoaXMud29ya2luZz1udWxsLHRoaXMud29ya1NjaGVkdWxlZD0wLHRoaXMuY2h1bmtFbmQ9LTEsdGhpcy5jaHVua0J1ZGdldD0tMSx0aGlzLndvcms9dGhpcy53b3JrLmJpbmQodGhpcyksdGhpcy5zY2hlZHVsZVdvcmsoKX11cGRhdGUodCl7bGV0IGU9dGhpcy52aWV3LnN0YXRlLmZpZWxkKGMuc3RhdGUpLmNvbnRleHQ7KGUudXBkYXRlVmlld3BvcnQodC52aWV3LnZpZXdwb3J0KXx8dGhpcy52aWV3LnZpZXdwb3J0LnRvPmUudHJlZUxlbikmJnRoaXMuc2NoZWR1bGVXb3JrKCksdC5kb2NDaGFuZ2VkJiYodGhpcy52aWV3Lmhhc0ZvY3VzJiYodGhpcy5jaHVua0J1ZGdldCs9NTApLHRoaXMuc2NoZWR1bGVXb3JrKCkpLHRoaXMuY2hlY2tBc3luY1NjaGVkdWxlKGUpfXNjaGVkdWxlV29yaygpe2lmKHRoaXMud29ya2luZylyZXR1cm47bGV0e3N0YXRlOnR9PXRoaXMudmlldyxlPXQuZmllbGQoYy5zdGF0ZSk7KGUudHJlZSE9ZS5jb250ZXh0LnRyZWV8fCFlLmNvbnRleHQuaXNEb25lKHQuZG9jLmxlbmd0aCkpJiYodGhpcy53b3JraW5nPXh0KHRoaXMud29yaykpfXdvcmsodCl7dGhpcy53b3JraW5nPW51bGw7bGV0IGU9RGF0ZS5ub3coKTtpZih0aGlzLmNodW5rRW5kPGUmJih0aGlzLmNodW5rRW5kPDB8fHRoaXMudmlldy5oYXNGb2N1cykmJih0aGlzLmNodW5rRW5kPWUrM2U0LHRoaXMuY2h1bmtCdWRnZXQ9M2UzKSx0aGlzLmNodW5rQnVkZ2V0PD0wKXJldHVybjtsZXR7c3RhdGU6cix2aWV3cG9ydDp7dG86aX19PXRoaXMudmlldyxzPXIuZmllbGQoYy5zdGF0ZSk7aWYocy50cmVlPT1zLmNvbnRleHQudHJlZSYmcy5jb250ZXh0LmlzRG9uZShpKzFlNSkpcmV0dXJuO2xldCBvPURhdGUubm93KCkrTWF0aC5taW4odGhpcy5jaHVua0J1ZGdldCwxMDAsdCYmIVo/TWF0aC5tYXgoMjUsdC50aW1lUmVtYWluaW5nKCktNSk6MWU5KSxsPXMuY29udGV4dC50cmVlTGVuPGkmJnIuZG9jLmxlbmd0aD5pKzFlMyxhPXMuY29udGV4dC53b3JrKCgpPT5aJiZaKCl8fERhdGUubm93KCk+byxpKyhsPzA6MWU1KSk7dGhpcy5jaHVua0J1ZGdldC09RGF0ZS5ub3coKS1lLChhfHx0aGlzLmNodW5rQnVkZ2V0PD0wKSYmKHMuY29udGV4dC50YWtlVHJlZSgpLHRoaXMudmlldy5kaXNwYXRjaCh7ZWZmZWN0czpjLnNldFN0YXRlLm9mKG5ldyBTKHMuY29udGV4dCkpfSkpLHRoaXMuY2h1bmtCdWRnZXQ+MCYmIShhJiYhbCkmJnRoaXMuc2NoZWR1bGVXb3JrKCksdGhpcy5jaGVja0FzeW5jU2NoZWR1bGUocy5jb250ZXh0KX1jaGVja0FzeW5jU2NoZWR1bGUodCl7dC5zY2hlZHVsZU9uJiYodGhpcy53b3JrU2NoZWR1bGVkKyssdC5zY2hlZHVsZU9uLnRoZW4oKCk9PnRoaXMuc2NoZWR1bGVXb3JrKCkpLmNhdGNoKGU9Pl90KHRoaXMudmlldy5zdGF0ZSxlKSkudGhlbigoKT0+dGhpcy53b3JrU2NoZWR1bGVkLS0pLHQuc2NoZWR1bGVPbj1udWxsKX1kZXN0cm95KCl7dGhpcy53b3JraW5nJiZ0aGlzLndvcmtpbmcoKX1pc1dvcmtpbmcoKXtyZXR1cm4hISh0aGlzLndvcmtpbmd8fHRoaXMud29ya1NjaGVkdWxlZD4wKX19LHtldmVudEhhbmRsZXJzOntmb2N1cygpe3RoaXMuc2NoZWR1bGVXb3JrKCl9fX0pLFA9Yi5kZWZpbmUoe2NvbWJpbmUobil7cmV0dXJuIG4ubGVuZ3RoP25bMF06bnVsbH0sZW5hYmxlczpbYy5zdGF0ZSxTdF19KSxkdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9W10pe3RoaXMubGFuZ3VhZ2U9dCx0aGlzLnN1cHBvcnQ9ZSx0aGlzLmV4dGVuc2lvbj1bdCxlXX19LGo9Y2xhc3N7Y29uc3RydWN0b3IodCxlLHIsaSxzLG89dm9pZCAwKXt0aGlzLm5hbWU9dCx0aGlzLmFsaWFzPWUsdGhpcy5leHRlbnNpb25zPXIsdGhpcy5maWxlbmFtZT1pLHRoaXMubG9hZEZ1bmM9cyx0aGlzLnN1cHBvcnQ9byx0aGlzLmxvYWRpbmc9bnVsbH1sb2FkKCl7cmV0dXJuIHRoaXMubG9hZGluZ3x8KHRoaXMubG9hZGluZz10aGlzLmxvYWRGdW5jKCkudGhlbih0PT50aGlzLnN1cHBvcnQ9dCx0PT57dGhyb3cgdGhpcy5sb2FkaW5nPW51bGwsdH0pKX1zdGF0aWMgb2YodCl7bGV0e2xvYWQ6ZSxzdXBwb3J0OnJ9PXQ7aWYoIWUpe2lmKCFyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiTXVzdCBwYXNzIGVpdGhlciAnbG9hZCcgb3IgJ3N1cHBvcnQnIHRvIExhbmd1YWdlRGVzY3JpcHRpb24ub2ZcIik7ZT0oKT0+UHJvbWlzZS5yZXNvbHZlKHIpfXJldHVybiBuZXcgaih0Lm5hbWUsKHQuYWxpYXN8fFtdKS5jb25jYXQodC5uYW1lKS5tYXAoaT0+aS50b0xvd2VyQ2FzZSgpKSx0LmV4dGVuc2lvbnN8fFtdLHQuZmlsZW5hbWUsZSxyKX1zdGF0aWMgbWF0Y2hGaWxlbmFtZSh0LGUpe2ZvcihsZXQgaSBvZiB0KWlmKGkuZmlsZW5hbWUmJmkuZmlsZW5hbWUudGVzdChlKSlyZXR1cm4gaTtsZXQgcj0vXFwuKFteLl0rKSQvLmV4ZWMoZSk7aWYocil7Zm9yKGxldCBpIG9mIHQpaWYoaS5leHRlbnNpb25zLmluZGV4T2YoclsxXSk+LTEpcmV0dXJuIGl9cmV0dXJuIG51bGx9c3RhdGljIG1hdGNoTGFuZ3VhZ2VOYW1lKHQsZSxyPSEwKXtlPWUudG9Mb3dlckNhc2UoKTtmb3IobGV0IGkgb2YgdClpZihpLmFsaWFzLnNvbWUocz0+cz09ZSkpcmV0dXJuIGk7aWYocilmb3IobGV0IGkgb2YgdClmb3IobGV0IHMgb2YgaS5hbGlhcyl7bGV0IG89ZS5pbmRleE9mKHMpO2lmKG8+LTEmJihzLmxlbmd0aD4yfHwhL1xcdy8udGVzdChlW28tMV0pJiYhL1xcdy8udGVzdChlW28rcy5sZW5ndGhdKSkpcmV0dXJuIGl9cmV0dXJuIG51bGx9fSxQdD1iLmRlZmluZSgpLEF0PWIuZGVmaW5lKHtjb21iaW5lOm49PntpZighbi5sZW5ndGgpcmV0dXJuXCIgIFwiO2lmKCEvXig/OiArfFxcdCspJC8udGVzdChuWzBdKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGluZGVudCB1bml0OiBcIitKU09OLnN0cmluZ2lmeShuWzBdKSk7cmV0dXJuIG5bMF19fSk7ZnVuY3Rpb24gJChuKXtsZXQgdD1uLmZhY2V0KEF0KTtyZXR1cm4gdC5jaGFyQ29kZUF0KDApPT05P24udGFiU2l6ZSp0Lmxlbmd0aDp0Lmxlbmd0aH1mdW5jdGlvbiBDdChuLHQpe2xldCBlPVwiXCIscj1uLnRhYlNpemU7aWYobi5mYWNldChBdCkuY2hhckNvZGVBdCgwKT09OSlmb3IoO3Q+PXI7KWUrPVwiXHRcIix0LT1yO2ZvcihsZXQgaT0wO2k8dDtpKyspZSs9XCIgXCI7cmV0dXJuIGV9ZnVuY3Rpb24gVHQobix0KXtuIGluc3RhbmNlb2YgTyYmKG49bmV3IE0obikpO2ZvcihsZXQgciBvZiBuLnN0YXRlLmZhY2V0KFB0KSl7bGV0IGk9cihuLHQpO2lmKGkhPW51bGwpcmV0dXJuIGl9bGV0IGU9bShuLnN0YXRlKTtyZXR1cm4gZT9pZShuLGUsdCk6bnVsbH1mdW5jdGlvbiBKZShuLHQsZSl7bGV0IHI9T2JqZWN0LmNyZWF0ZShudWxsKSxpPW5ldyBNKG4se292ZXJyaWRlSW5kZW50YXRpb246bz0+e3ZhciBsO3JldHVybihsPXJbb10pIT09bnVsbCYmbCE9PXZvaWQgMD9sOi0xfX0pLHM9W107Zm9yKGxldCBvPXQ7bzw9ZTspe2xldCBsPW4uZG9jLmxpbmVBdChvKTtvPWwudG8rMTtsZXQgYT1UdChpLGwuZnJvbSk7aWYoYT09bnVsbCljb250aW51ZTsvXFxTLy50ZXN0KGwudGV4dCl8fChhPTApO2xldCBoPS9eXFxzKi8uZXhlYyhsLnRleHQpWzBdLHU9Q3QobixhKTtoIT11JiYocltsLmZyb21dPWEscy5wdXNoKHtmcm9tOmwuZnJvbSx0bzpsLmZyb20raC5sZW5ndGgsaW5zZXJ0OnV9KSl9cmV0dXJuIG4uY2hhbmdlcyhzKX12YXIgTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9e30pe3RoaXMuc3RhdGU9dCx0aGlzLm9wdGlvbnM9ZSx0aGlzLnVuaXQ9JCh0KX1saW5lQXQodCxlPTEpe2xldCByPXRoaXMuc3RhdGUuZG9jLmxpbmVBdCh0KSx7c2ltdWxhdGVCcmVhazppLHNpbXVsYXRlRG91YmxlQnJlYWs6c309dGhpcy5vcHRpb25zO3JldHVybiBpIT1udWxsJiZpPj1yLmZyb20mJmk8PXIudG8/cyYmaT09dD97dGV4dDpcIlwiLGZyb206dH06KGU8MD9pPHQ6aTw9dCk/e3RleHQ6ci50ZXh0LnNsaWNlKGktci5mcm9tKSxmcm9tOml9Ont0ZXh0OnIudGV4dC5zbGljZSgwLGktci5mcm9tKSxmcm9tOnIuZnJvbX06cn10ZXh0QWZ0ZXJQb3ModCxlPTEpe2lmKHRoaXMub3B0aW9ucy5zaW11bGF0ZURvdWJsZUJyZWFrJiZ0PT10aGlzLm9wdGlvbnMuc2ltdWxhdGVCcmVhaylyZXR1cm5cIlwiO2xldHt0ZXh0OnIsZnJvbTppfT10aGlzLmxpbmVBdCh0LGUpO3JldHVybiByLnNsaWNlKHQtaSxNYXRoLm1pbihyLmxlbmd0aCx0KzEwMC1pKSl9Y29sdW1uKHQsZT0xKXtsZXR7dGV4dDpyLGZyb206aX09dGhpcy5saW5lQXQodCxlKSxzPXRoaXMuY291bnRDb2x1bW4ocix0LWkpLG89dGhpcy5vcHRpb25zLm92ZXJyaWRlSW5kZW50YXRpb24/dGhpcy5vcHRpb25zLm92ZXJyaWRlSW5kZW50YXRpb24oaSk6LTE7cmV0dXJuIG8+LTEmJihzKz1vLXRoaXMuY291bnRDb2x1bW4ocixyLnNlYXJjaCgvXFxTfCQvKSkpLHN9Y291bnRDb2x1bW4odCxlPXQubGVuZ3RoKXtyZXR1cm4gSnQodCx0aGlzLnN0YXRlLnRhYlNpemUsZSl9bGluZUluZGVudCh0LGU9MSl7bGV0e3RleHQ6cixmcm9tOml9PXRoaXMubGluZUF0KHQsZSkscz10aGlzLm9wdGlvbnMub3ZlcnJpZGVJbmRlbnRhdGlvbjtpZihzKXtsZXQgbz1zKGkpO2lmKG8+LTEpcmV0dXJuIG99cmV0dXJuIHRoaXMuY291bnRDb2x1bW4ocixyLnNlYXJjaCgvXFxTfCQvKSl9Z2V0IHNpbXVsYXRlZEJyZWFrKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5zaW11bGF0ZUJyZWFrfHxudWxsfX0scmU9bmV3IHY7ZnVuY3Rpb24gaWUobix0LGUpe3JldHVybiBEdCh0LnJlc29sdmVJbm5lcihlKS5lbnRlclVuZmluaXNoZWROb2Rlc0JlZm9yZShlKSxlLG4pfWZ1bmN0aW9uIHNlKG4pe3JldHVybiBuLnBvcz09bi5vcHRpb25zLnNpbXVsYXRlQnJlYWsmJm4ub3B0aW9ucy5zaW11bGF0ZURvdWJsZUJyZWFrfWZ1bmN0aW9uIG9lKG4pe2xldCB0PW4udHlwZS5wcm9wKHJlKTtpZih0KXJldHVybiB0O2xldCBlPW4uZmlyc3RDaGlsZCxyO2lmKGUmJihyPWUudHlwZS5wcm9wKHYuY2xvc2VkQnkpKSl7bGV0IGk9bi5sYXN0Q2hpbGQscz1pJiZyLmluZGV4T2YoaS5uYW1lKT4tMTtyZXR1cm4gbz0+SXQobywhMCwxLHZvaWQgMCxzJiYhc2Uobyk/aS5mcm9tOnZvaWQgMCl9cmV0dXJuIG4ucGFyZW50PT1udWxsP2xlOm51bGx9ZnVuY3Rpb24gRHQobix0LGUpe2Zvcig7bjtuPW4ucGFyZW50KXtsZXQgcj1vZShuKTtpZihyKXJldHVybiByKEUuY3JlYXRlKGUsdCxuKSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbGUoKXtyZXR1cm4gMH12YXIgRT1jbGFzcyBleHRlbmRzIE17Y29uc3RydWN0b3IodCxlLHIpe3N1cGVyKHQuc3RhdGUsdC5vcHRpb25zKSx0aGlzLmJhc2U9dCx0aGlzLnBvcz1lLHRoaXMubm9kZT1yfXN0YXRpYyBjcmVhdGUodCxlLHIpe3JldHVybiBuZXcgRSh0LGUscil9Z2V0IHRleHRBZnRlcigpe3JldHVybiB0aGlzLnRleHRBZnRlclBvcyh0aGlzLnBvcyl9Z2V0IGJhc2VJbmRlbnQoKXtsZXQgdD10aGlzLnN0YXRlLmRvYy5saW5lQXQodGhpcy5ub2RlLmZyb20pO2Zvcig7Oyl7bGV0IGU9dGhpcy5ub2RlLnJlc29sdmUodC5mcm9tKTtmb3IoO2UucGFyZW50JiZlLnBhcmVudC5mcm9tPT1lLmZyb207KWU9ZS5wYXJlbnQ7aWYoYWUoZSx0aGlzLm5vZGUpKWJyZWFrO3Q9dGhpcy5zdGF0ZS5kb2MubGluZUF0KGUuZnJvbSl9cmV0dXJuIHRoaXMubGluZUluZGVudCh0LmZyb20pfWNvbnRpbnVlKCl7bGV0IHQ9dGhpcy5ub2RlLnBhcmVudDtyZXR1cm4gdD9EdCh0LHRoaXMucG9zLHRoaXMuYmFzZSk6MH19O2Z1bmN0aW9uIGFlKG4sdCl7Zm9yKGxldCBlPXQ7ZTtlPWUucGFyZW50KWlmKG49PWUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaGUobil7bGV0IHQ9bi5ub2RlLGU9dC5jaGlsZEFmdGVyKHQuZnJvbSkscj10Lmxhc3RDaGlsZDtpZighZSlyZXR1cm4gbnVsbDtsZXQgaT1uLm9wdGlvbnMuc2ltdWxhdGVCcmVhayxzPW4uc3RhdGUuZG9jLmxpbmVBdChlLmZyb20pLG89aT09bnVsbHx8aTw9cy5mcm9tP3MudG86TWF0aC5taW4ocy50byxpKTtmb3IobGV0IGw9ZS50bzs7KXtsZXQgYT10LmNoaWxkQWZ0ZXIobCk7aWYoIWF8fGE9PXIpcmV0dXJuIG51bGw7aWYoIWEudHlwZS5pc1NraXBwZWQpcmV0dXJuIGEuZnJvbTxvP2U6bnVsbDtsPWEudG99fWZ1bmN0aW9uIEtlKHtjbG9zaW5nOm4sYWxpZ246dD0hMCx1bml0czplPTF9KXtyZXR1cm4gcj0+SXQocix0LGUsbil9ZnVuY3Rpb24gSXQobix0LGUscixpKXtsZXQgcz1uLnRleHRBZnRlcixvPXMubWF0Y2goL15cXHMqLylbMF0ubGVuZ3RoLGw9ciYmcy5zbGljZShvLG8rci5sZW5ndGgpPT1yfHxpPT1uLnBvcytvLGE9dD9oZShuKTpudWxsO3JldHVybiBhP2w/bi5jb2x1bW4oYS5mcm9tKTpuLmNvbHVtbihhLnRvKTpuLmJhc2VJbmRlbnQrKGw/MDpuLnVuaXQqZSl9dmFyIF9lPW49Pm4uYmFzZUluZGVudDtmdW5jdGlvbiBRZSh7ZXhjZXB0Om4sdW5pdHM6dD0xfT17fSl7cmV0dXJuIGU9PntsZXQgcj1uJiZuLnRlc3QoZS50ZXh0QWZ0ZXIpO3JldHVybiBlLmJhc2VJbmRlbnQrKHI/MDp0KmUudW5pdCl9fXZhciBmZT0yMDA7ZnVuY3Rpb24gWGUoKXtyZXR1cm4gTy50cmFuc2FjdGlvbkZpbHRlci5vZihuPT57aWYoIW4uZG9jQ2hhbmdlZHx8IW4uaXNVc2VyRXZlbnQoXCJpbnB1dC50eXBlXCIpJiYhbi5pc1VzZXJFdmVudChcImlucHV0LmNvbXBsZXRlXCIpKXJldHVybiBuO2xldCB0PW4uc3RhcnRTdGF0ZS5sYW5ndWFnZURhdGFBdChcImluZGVudE9uSW5wdXRcIixuLnN0YXJ0U3RhdGUuc2VsZWN0aW9uLm1haW4uaGVhZCk7aWYoIXQubGVuZ3RoKXJldHVybiBuO2xldCBlPW4ubmV3RG9jLHtoZWFkOnJ9PW4ubmV3U2VsZWN0aW9uLm1haW4saT1lLmxpbmVBdChyKTtpZihyPmkuZnJvbStmZSlyZXR1cm4gbjtsZXQgcz1lLnNsaWNlU3RyaW5nKGkuZnJvbSxyKTtpZighdC5zb21lKGg9PmgudGVzdChzKSkpcmV0dXJuIG47bGV0e3N0YXRlOm99PW4sbD0tMSxhPVtdO2ZvcihsZXR7aGVhZDpofW9mIG8uc2VsZWN0aW9uLnJhbmdlcyl7bGV0IHU9by5kb2MubGluZUF0KGgpO2lmKHUuZnJvbT09bCljb250aW51ZTtsPXUuZnJvbTtsZXQgZD1UdChvLHUuZnJvbSk7aWYoZD09bnVsbCljb250aW51ZTtsZXQgZz0vXlxccyovLmV4ZWModS50ZXh0KVswXSx3PUN0KG8sZCk7ZyE9dyYmYS5wdXNoKHtmcm9tOnUuZnJvbSx0bzp1LmZyb20rZy5sZW5ndGgsaW5zZXJ0Ond9KX1yZXR1cm4gYS5sZW5ndGg/W24se2NoYW5nZXM6YSxzZXF1ZW50aWFsOiEwfV06bn0pfXZhciB1ZT1iLmRlZmluZSgpLGNlPW5ldyB2O2Z1bmN0aW9uIFllKG4pe2xldCB0PW4uZmlyc3RDaGlsZCxlPW4ubGFzdENoaWxkO3JldHVybiB0JiZ0LnRvPGUuZnJvbT97ZnJvbTp0LnRvLHRvOmUudHlwZS5pc0Vycm9yP24udG86ZS5mcm9tfTpudWxsfWZ1bmN0aW9uIGRlKG4sdCxlKXtsZXQgcj1tKG4pO2lmKHIubGVuZ3RoPGUpcmV0dXJuIG51bGw7bGV0IGk9ci5yZXNvbHZlSW5uZXIoZSkscz1udWxsO2ZvcihsZXQgbz1pO287bz1vLnBhcmVudCl7aWYoby50bzw9ZXx8by5mcm9tPmUpY29udGludWU7aWYocyYmby5mcm9tPHQpYnJlYWs7bGV0IGw9by50eXBlLnByb3AoY2UpO2lmKGwmJihvLnRvPHIubGVuZ3RoLTUwfHxyLmxlbmd0aD09bi5kb2MubGVuZ3RofHwhcGUobykpKXtsZXQgYT1sKG8sbik7YSYmYS5mcm9tPD1lJiZhLmZyb20+PXQmJmEudG8+ZSYmKHM9YSl9fXJldHVybiBzfWZ1bmN0aW9uIHBlKG4pe2xldCB0PW4ubGFzdENoaWxkO3JldHVybiB0JiZ0LnRvPT1uLnRvJiZ0LnR5cGUuaXNFcnJvcn1mdW5jdGlvbiBWKG4sdCxlKXtmb3IobGV0IHIgb2Ygbi5mYWNldCh1ZSkpe2xldCBpPXIobix0LGUpO2lmKGkpcmV0dXJuIGl9cmV0dXJuIGRlKG4sdCxlKX1mdW5jdGlvbiBPdChuLHQpe2xldCBlPXQubWFwUG9zKG4uZnJvbSwxKSxyPXQubWFwUG9zKG4udG8sLTEpO3JldHVybiBlPj1yP3ZvaWQgMDp7ZnJvbTplLHRvOnJ9fXZhciBfPUsuZGVmaW5lKHttYXA6T3R9KSxSPUsuZGVmaW5lKHttYXA6T3R9KTtmdW5jdGlvbiBOdChuKXtsZXQgdD1bXTtmb3IobGV0e2hlYWQ6ZX1vZiBuLnN0YXRlLnNlbGVjdGlvbi5yYW5nZXMpdC5zb21lKHI9PnIuZnJvbTw9ZSYmci50bz49ZSl8fHQucHVzaChuLmxpbmVCbG9ja0F0KGUpKTtyZXR1cm4gdH12YXIgQT1vdC5kZWZpbmUoe2NyZWF0ZSgpe3JldHVybiBrLm5vbmV9LHVwZGF0ZShuLHQpe249bi5tYXAodC5jaGFuZ2VzKTtmb3IobGV0IGUgb2YgdC5lZmZlY3RzKWUuaXMoXykmJiFtZShuLGUudmFsdWUuZnJvbSxlLnZhbHVlLnRvKT9uPW4udXBkYXRlKHthZGQ6W3B0LnJhbmdlKGUudmFsdWUuZnJvbSxlLnZhbHVlLnRvKV19KTplLmlzKFIpJiYobj1uLnVwZGF0ZSh7ZmlsdGVyOihyLGkpPT5lLnZhbHVlLmZyb20hPXJ8fGUudmFsdWUudG8hPWksZmlsdGVyRnJvbTplLnZhbHVlLmZyb20sZmlsdGVyVG86ZS52YWx1ZS50b30pKTtpZih0LnNlbGVjdGlvbil7bGV0IGU9ITEse2hlYWQ6cn09dC5zZWxlY3Rpb24ubWFpbjtuLmJldHdlZW4ocixyLChpLHMpPT57aTxyJiZzPnImJihlPSEwKX0pLGUmJihuPW4udXBkYXRlKHtmaWx0ZXJGcm9tOnIsZmlsdGVyVG86cixmaWx0ZXI6KGkscyk9PnM8PXJ8fGk+PXJ9KSl9cmV0dXJuIG59LHByb3ZpZGU6bj0+eS5kZWNvcmF0aW9ucy5mcm9tKG4pLHRvSlNPTihuLHQpe2xldCBlPVtdO3JldHVybiBuLmJldHdlZW4oMCx0LmRvYy5sZW5ndGgsKHIsaSk9PntlLnB1c2gocixpKX0pLGV9LGZyb21KU09OKG4pe2lmKCFBcnJheS5pc0FycmF5KG4pfHxuLmxlbmd0aCUyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBKU09OIGZvciBmb2xkIHN0YXRlXCIpO2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7KXtsZXQgcj1uW2UrK10saT1uW2UrK107aWYodHlwZW9mIHIhPVwibnVtYmVyXCJ8fHR5cGVvZiBpIT1cIm51bWJlclwiKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBKU09OIGZvciBmb2xkIHN0YXRlXCIpO3QucHVzaChwdC5yYW5nZShyLGkpKX1yZXR1cm4gay5zZXQodCwhMCl9fSk7ZnVuY3Rpb24gWmUobil7cmV0dXJuIG4uZmllbGQoQSwhMSl8fHd0LmVtcHR5fWZ1bmN0aW9uIHoobix0LGUpe3ZhciByO2xldCBpPW51bGw7cmV0dXJuKHI9bi5maWVsZChBLCExKSk9PT1udWxsfHxyPT09dm9pZCAwfHxyLmJldHdlZW4odCxlLChzLG8pPT57KCFpfHxpLmZyb20+cykmJihpPXtmcm9tOnMsdG86b30pfSksaX1mdW5jdGlvbiBtZShuLHQsZSl7bGV0IHI9ITE7cmV0dXJuIG4uYmV0d2Vlbih0LHQsKGkscyk9PntpPT10JiZzPT1lJiYocj0hMCl9KSxyfWZ1bmN0aW9uIEJ0KG4sdCl7cmV0dXJuIG4uZmllbGQoQSwhMSk/dDp0LmNvbmNhdChLLmFwcGVuZENvbmZpZy5vZihGdCgpKSl9dmFyIGdlPW49Pntmb3IobGV0IHQgb2YgTnQobikpe2xldCBlPVYobi5zdGF0ZSx0LmZyb20sdC50byk7aWYoZSlyZXR1cm4gbi5kaXNwYXRjaCh7ZWZmZWN0czpCdChuLnN0YXRlLFtfLm9mKGUpLE10KG4sZSldKX0pLCEwfXJldHVybiExfSxrZT1uPT57aWYoIW4uc3RhdGUuZmllbGQoQSwhMSkpcmV0dXJuITE7bGV0IHQ9W107Zm9yKGxldCBlIG9mIE50KG4pKXtsZXQgcj16KG4uc3RhdGUsZS5mcm9tLGUudG8pO3ImJnQucHVzaChSLm9mKHIpLE10KG4sciwhMSkpfXJldHVybiB0Lmxlbmd0aCYmbi5kaXNwYXRjaCh7ZWZmZWN0czp0fSksdC5sZW5ndGg+MH07ZnVuY3Rpb24gTXQobix0LGU9ITApe2xldCByPW4uc3RhdGUuZG9jLmxpbmVBdCh0LmZyb20pLm51bWJlcixpPW4uc3RhdGUuZG9jLmxpbmVBdCh0LnRvKS5udW1iZXI7cmV0dXJuIHkuYW5ub3VuY2Uub2YoYCR7bi5zdGF0ZS5waHJhc2UoZT9cIkZvbGRlZCBsaW5lc1wiOlwiVW5mb2xkZWQgbGluZXNcIil9ICR7cn0gJHtuLnN0YXRlLnBocmFzZShcInRvXCIpfSAke2l9LmApfXZhciBiZT1uPT57bGV0e3N0YXRlOnR9PW4sZT1bXTtmb3IobGV0IHI9MDtyPHQuZG9jLmxlbmd0aDspe2xldCBpPW4ubGluZUJsb2NrQXQocikscz1WKHQsaS5mcm9tLGkudG8pO3MmJmUucHVzaChfLm9mKHMpKSxyPShzP24ubGluZUJsb2NrQXQocy50byk6aSkudG8rMX1yZXR1cm4gZS5sZW5ndGgmJm4uZGlzcGF0Y2goe2VmZmVjdHM6QnQobi5zdGF0ZSxlKX0pLCEhZS5sZW5ndGh9LHdlPW49PntsZXQgdD1uLnN0YXRlLmZpZWxkKEEsITEpO2lmKCF0fHwhdC5zaXplKXJldHVybiExO2xldCBlPVtdO3JldHVybiB0LmJldHdlZW4oMCxuLnN0YXRlLmRvYy5sZW5ndGgsKHIsaSk9PntlLnB1c2goUi5vZih7ZnJvbTpyLHRvOml9KSl9KSxuLmRpc3BhdGNoKHtlZmZlY3RzOmV9KSwhMH0sdG49W3trZXk6XCJDdHJsLVNoaWZ0LVtcIixtYWM6XCJDbWQtQWx0LVtcIixydW46Z2V9LHtrZXk6XCJDdHJsLVNoaWZ0LV1cIixtYWM6XCJDbWQtQWx0LV1cIixydW46a2V9LHtrZXk6XCJDdHJsLUFsdC1bXCIscnVuOmJlfSx7a2V5OlwiQ3RybC1BbHQtXVwiLHJ1bjp3ZX1dLHllPXtwbGFjZWhvbGRlckRPTTpudWxsLHBsYWNlaG9sZGVyVGV4dDpcIlxcdTIwMjZcIn0sRXQ9Yi5kZWZpbmUoe2NvbWJpbmUobil7cmV0dXJuIGJ0KG4seWUpfX0pO2Z1bmN0aW9uIEZ0KG4pe2xldCB0PVtBLHhlXTtyZXR1cm4gbiYmdC5wdXNoKEV0Lm9mKG4pKSx0fXZhciBwdD1rLnJlcGxhY2Uoe3dpZGdldDpuZXcgY2xhc3MgZXh0ZW5kcyBRdHt0b0RPTShuKXtsZXR7c3RhdGU6dH09bixlPXQuZmFjZXQoRXQpLHI9cz0+e2xldCBvPW4ubGluZUJsb2NrQXQobi5wb3NBdERPTShzLnRhcmdldCkpLGw9eihuLnN0YXRlLG8uZnJvbSxvLnRvKTtsJiZuLmRpc3BhdGNoKHtlZmZlY3RzOlIub2YobCl9KSxzLnByZXZlbnREZWZhdWx0KCl9O2lmKGUucGxhY2Vob2xkZXJET00pcmV0dXJuIGUucGxhY2Vob2xkZXJET00obixyKTtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtyZXR1cm4gaS50ZXh0Q29udGVudD1lLnBsYWNlaG9sZGVyVGV4dCxpLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIix0LnBocmFzZShcImZvbGRlZCBjb2RlXCIpKSxpLnRpdGxlPXQucGhyYXNlKFwidW5mb2xkXCIpLGkuY2xhc3NOYW1lPVwiY20tZm9sZFBsYWNlaG9sZGVyXCIsaS5vbmNsaWNrPXIsaX19fSksdmU9e29wZW5UZXh0OlwiXFx1MjMwNFwiLGNsb3NlZFRleHQ6XCJcXHUyMDNBXCIsbWFya2VyRE9NOm51bGwsZG9tRXZlbnRIYW5kbGVyczp7fSxmb2xkaW5nQ2hhbmdlZDooKT0+ITF9LE49Y2xhc3MgZXh0ZW5kcyBZdHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5jb25maWc9dCx0aGlzLm9wZW49ZX1lcSh0KXtyZXR1cm4gdGhpcy5jb25maWc9PXQuY29uZmlnJiZ0aGlzLm9wZW49PXQub3Blbn10b0RPTSh0KXtpZih0aGlzLmNvbmZpZy5tYXJrZXJET00pcmV0dXJuIHRoaXMuY29uZmlnLm1hcmtlckRPTSh0aGlzLm9wZW4pO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3JldHVybiBlLnRleHRDb250ZW50PXRoaXMub3Blbj90aGlzLmNvbmZpZy5vcGVuVGV4dDp0aGlzLmNvbmZpZy5jbG9zZWRUZXh0LGUudGl0bGU9dC5zdGF0ZS5waHJhc2UodGhpcy5vcGVuP1wiRm9sZCBsaW5lXCI6XCJVbmZvbGQgbGluZVwiKSxlfX07ZnVuY3Rpb24gZW4obj17fSl7bGV0IHQ9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHZlKSxuKSxlPW5ldyBOKHQsITApLHI9bmV3IE4odCwhMSksaT1sdC5mcm9tQ2xhc3MoY2xhc3N7Y29uc3RydWN0b3Iobyl7dGhpcy5mcm9tPW8udmlld3BvcnQuZnJvbSx0aGlzLm1hcmtlcnM9dGhpcy5idWlsZE1hcmtlcnMobyl9dXBkYXRlKG8peyhvLmRvY0NoYW5nZWR8fG8udmlld3BvcnRDaGFuZ2VkfHxvLnN0YXJ0U3RhdGUuZmFjZXQoUCkhPW8uc3RhdGUuZmFjZXQoUCl8fG8uc3RhcnRTdGF0ZS5maWVsZChBLCExKSE9by5zdGF0ZS5maWVsZChBLCExKXx8bShvLnN0YXJ0U3RhdGUpIT1tKG8uc3RhdGUpfHx0LmZvbGRpbmdDaGFuZ2VkKG8pKSYmKHRoaXMubWFya2Vycz10aGlzLmJ1aWxkTWFya2VycyhvLnZpZXcpKX1idWlsZE1hcmtlcnMobyl7bGV0IGw9bmV3IHl0O2ZvcihsZXQgYSBvZiBvLnZpZXdwb3J0TGluZUJsb2Nrcyl7bGV0IGg9eihvLnN0YXRlLGEuZnJvbSxhLnRvKT9yOlYoby5zdGF0ZSxhLmZyb20sYS50byk/ZTpudWxsO2gmJmwuYWRkKGEuZnJvbSxhLmZyb20saCl9cmV0dXJuIGwuZmluaXNoKCl9fSkse2RvbUV2ZW50SGFuZGxlcnM6c309dDtyZXR1cm5baSxYdCh7Y2xhc3M6XCJjbS1mb2xkR3V0dGVyXCIsbWFya2VycyhvKXt2YXIgbDtyZXR1cm4oKGw9by5wbHVnaW4oaSkpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5tYXJrZXJzKXx8d3QuZW1wdHl9LGluaXRpYWxTcGFjZXIoKXtyZXR1cm4gbmV3IE4odCwhMSl9LGRvbUV2ZW50SGFuZGxlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtjbGljazoobyxsLGEpPT57aWYocy5jbGljayYmcy5jbGljayhvLGwsYSkpcmV0dXJuITA7bGV0IGg9eihvLnN0YXRlLGwuZnJvbSxsLnRvKTtpZihoKXJldHVybiBvLmRpc3BhdGNoKHtlZmZlY3RzOlIub2YoaCl9KSwhMDtsZXQgdT1WKG8uc3RhdGUsbC5mcm9tLGwudG8pO3JldHVybiB1PyhvLmRpc3BhdGNoKHtlZmZlY3RzOl8ub2YodSl9KSwhMCk6ITF9fSl9KSxGdCgpXX12YXIgeGU9eS5iYXNlVGhlbWUoe1wiLmNtLWZvbGRQbGFjZWhvbGRlclwiOntiYWNrZ3JvdW5kQ29sb3I6XCIjZWVlXCIsYm9yZGVyOlwiMXB4IHNvbGlkICNkZGRcIixjb2xvcjpcIiM4ODhcIixib3JkZXJSYWRpdXM6XCIuMmVtXCIsbWFyZ2luOlwiMCAxcHhcIixwYWRkaW5nOlwiMCAxcHhcIixjdXJzb3I6XCJwb2ludGVyXCJ9LFwiLmNtLWZvbGRHdXR0ZXIgc3BhblwiOntwYWRkaW5nOlwiMCAxcHhcIixjdXJzb3I6XCJwb2ludGVyXCJ9fSksRD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe2xldCByO2Z1bmN0aW9uIGkobCl7bGV0IGE9ZnQubmV3TmFtZSgpO3JldHVybihyfHwocj1PYmplY3QuY3JlYXRlKG51bGwpKSlbXCIuXCIrYV09bCxhfWxldCBzPXR5cGVvZiBlLmFsbD09XCJzdHJpbmdcIj9lLmFsbDplLmFsbD9pKGUuYWxsKTp2b2lkIDAsbz1lLnNjb3BlO3RoaXMuc2NvcGU9byBpbnN0YW5jZW9mIGM/bD0+bC5wcm9wKFQpPT1vLmRhdGE6bz9sPT5sPT1vOnZvaWQgMCx0aGlzLnN0eWxlPVp0KHQubWFwKGw9Pih7dGFnOmwudGFnLGNsYXNzOmwuY2xhc3N8fGkoT2JqZWN0LmFzc2lnbih7fSxsLHt0YWc6bnVsbH0pKX0pKSx7YWxsOnN9KS5zdHlsZSx0aGlzLm1vZHVsZT1yP25ldyBmdChyKTpudWxsLHRoaXMudGhlbWVUeXBlPWUudGhlbWVUeXBlfXN0YXRpYyBkZWZpbmUodCxlKXtyZXR1cm4gbmV3IEQodCxlfHx7fSl9fSxudD1iLmRlZmluZSgpLFJ0PWIuZGVmaW5lKHtjb21iaW5lKG4pe3JldHVybiBuLmxlbmd0aD9bblswXV06bnVsbH19KTtmdW5jdGlvbiBMKG4pe2xldCB0PW4uZmFjZXQobnQpO3JldHVybiB0Lmxlbmd0aD90Om4uZmFjZXQoUnQpfWZ1bmN0aW9uIG5uKG4sdCl7bGV0IGU9W1NlXSxyO3JldHVybiBuIGluc3RhbmNlb2YgRCYmKG4ubW9kdWxlJiZlLnB1c2goeS5zdHlsZU1vZHVsZS5vZihuLm1vZHVsZSkpLHI9bi50aGVtZVR5cGUpLHQ/LmZhbGxiYWNrP2UucHVzaChSdC5vZihuKSk6cj9lLnB1c2gobnQuY29tcHV0ZU4oW3kuZGFya1RoZW1lXSxpPT5pLmZhY2V0KHkuZGFya1RoZW1lKT09KHI9PVwiZGFya1wiKT9bbl06W10pKTplLnB1c2gobnQub2YobikpLGV9ZnVuY3Rpb24gcm4obix0LGUpe2xldCByPUwobiksaT1udWxsO2lmKHIpe2ZvcihsZXQgcyBvZiByKWlmKCFzLnNjb3BlfHxlJiZzLnNjb3BlKGUpKXtsZXQgbz1zLnN0eWxlKHQpO28mJihpPWk/aStcIiBcIitvOm8pfX1yZXR1cm4gaX12YXIgcnQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tYXJrQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnRyZWU9bSh0LnN0YXRlKSx0aGlzLmRlY29yYXRpb25zPXRoaXMuYnVpbGREZWNvKHQsTCh0LnN0YXRlKSl9dXBkYXRlKHQpe2xldCBlPW0odC5zdGF0ZSkscj1MKHQuc3RhdGUpLGk9ciE9TCh0LnN0YXJ0U3RhdGUpO2UubGVuZ3RoPHQudmlldy52aWV3cG9ydC50byYmIWkmJmUudHlwZT09dGhpcy50cmVlLnR5cGU/dGhpcy5kZWNvcmF0aW9ucz10aGlzLmRlY29yYXRpb25zLm1hcCh0LmNoYW5nZXMpOihlIT10aGlzLnRyZWV8fHQudmlld3BvcnRDaGFuZ2VkfHxpKSYmKHRoaXMudHJlZT1lLHRoaXMuZGVjb3JhdGlvbnM9dGhpcy5idWlsZERlY28odC52aWV3LHIpKX1idWlsZERlY28odCxlKXtpZighZXx8IXRoaXMudHJlZS5sZW5ndGgpcmV0dXJuIGsubm9uZTtsZXQgcj1uZXcgeXQ7Zm9yKGxldHtmcm9tOmksdG86c31vZiB0LnZpc2libGVSYW5nZXMpdGUodGhpcy50cmVlLGUsKG8sbCxhKT0+e3IuYWRkKG8sbCx0aGlzLm1hcmtDYWNoZVthXXx8KHRoaXMubWFya0NhY2hlW2FdPWsubWFyayh7Y2xhc3M6YX0pKSl9LGkscyk7cmV0dXJuIHIuZmluaXNoKCl9fSxTZT1LdC5oaWdoKGx0LmZyb21DbGFzcyhydCx7ZGVjb3JhdGlvbnM6bj0+bi5kZWNvcmF0aW9uc30pKSxzbj1ELmRlZmluZShbe3RhZzpmLm1ldGEsY29sb3I6XCIjN2E3NTdhXCJ9LHt0YWc6Zi5saW5rLHRleHREZWNvcmF0aW9uOlwidW5kZXJsaW5lXCJ9LHt0YWc6Zi5oZWFkaW5nLHRleHREZWNvcmF0aW9uOlwidW5kZXJsaW5lXCIsZm9udFdlaWdodDpcImJvbGRcIn0se3RhZzpmLmVtcGhhc2lzLGZvbnRTdHlsZTpcIml0YWxpY1wifSx7dGFnOmYuc3Ryb25nLGZvbnRXZWlnaHQ6XCJib2xkXCJ9LHt0YWc6Zi5zdHJpa2V0aHJvdWdoLHRleHREZWNvcmF0aW9uOlwibGluZS10aHJvdWdoXCJ9LHt0YWc6Zi5rZXl3b3JkLGNvbG9yOlwiIzcwOFwifSx7dGFnOltmLmF0b20sZi5ib29sLGYudXJsLGYuY29udGVudFNlcGFyYXRvcixmLmxhYmVsTmFtZV0sY29sb3I6XCIjMjE5XCJ9LHt0YWc6W2YubGl0ZXJhbCxmLmluc2VydGVkXSxjb2xvcjpcIiMxNjRcIn0se3RhZzpbZi5zdHJpbmcsZi5kZWxldGVkXSxjb2xvcjpcIiNhMTFcIn0se3RhZzpbZi5yZWdleHAsZi5lc2NhcGUsZi5zcGVjaWFsKGYuc3RyaW5nKV0sY29sb3I6XCIjZTQwXCJ9LHt0YWc6Zi5kZWZpbml0aW9uKGYudmFyaWFibGVOYW1lKSxjb2xvcjpcIiMwMGZcIn0se3RhZzpmLmxvY2FsKGYudmFyaWFibGVOYW1lKSxjb2xvcjpcIiMzMGFcIn0se3RhZzpbZi50eXBlTmFtZSxmLm5hbWVzcGFjZV0sY29sb3I6XCIjMDg1XCJ9LHt0YWc6Zi5jbGFzc05hbWUsY29sb3I6XCIjMTY3XCJ9LHt0YWc6W2Yuc3BlY2lhbChmLnZhcmlhYmxlTmFtZSksZi5tYWNyb05hbWVdLGNvbG9yOlwiIzI1NlwifSx7dGFnOmYuZGVmaW5pdGlvbihmLnByb3BlcnR5TmFtZSksY29sb3I6XCIjMDBjXCJ9LHt0YWc6Zi5jb21tZW50LGNvbG9yOlwiIzk0MFwifSx7dGFnOmYuaW52YWxpZCxjb2xvcjpcIiNmMDBcIn1dKSxQZT15LmJhc2VUaGVtZSh7XCImLmNtLWZvY3VzZWQgLmNtLW1hdGNoaW5nQnJhY2tldFwiOntiYWNrZ3JvdW5kQ29sb3I6XCIjMzI4YzgyNTJcIn0sXCImLmNtLWZvY3VzZWQgLmNtLW5vbm1hdGNoaW5nQnJhY2tldFwiOntiYWNrZ3JvdW5kQ29sb3I6XCIjYmI1NTU1NDRcIn19KSxVdD0xZTQsV3Q9XCIoKVtde31cIixMdD1iLmRlZmluZSh7Y29tYmluZShuKXtyZXR1cm4gYnQobix7YWZ0ZXJDdXJzb3I6ITAsYnJhY2tldHM6V3QsbWF4U2NhbkRpc3RhbmNlOlV0LHJlbmRlck1hdGNoOlRlfSl9fSksQWU9ay5tYXJrKHtjbGFzczpcImNtLW1hdGNoaW5nQnJhY2tldFwifSksQ2U9ay5tYXJrKHtjbGFzczpcImNtLW5vbm1hdGNoaW5nQnJhY2tldFwifSk7ZnVuY3Rpb24gVGUobil7bGV0IHQ9W10sZT1uLm1hdGNoZWQ/QWU6Q2U7cmV0dXJuIHQucHVzaChlLnJhbmdlKG4uc3RhcnQuZnJvbSxuLnN0YXJ0LnRvKSksbi5lbmQmJnQucHVzaChlLnJhbmdlKG4uZW5kLmZyb20sbi5lbmQudG8pKSx0fXZhciBEZT1vdC5kZWZpbmUoe2NyZWF0ZSgpe3JldHVybiBrLm5vbmV9LHVwZGF0ZShuLHQpe2lmKCF0LmRvY0NoYW5nZWQmJiF0LnNlbGVjdGlvbilyZXR1cm4gbjtsZXQgZT1bXSxyPXQuc3RhdGUuZmFjZXQoTHQpO2ZvcihsZXQgaSBvZiB0LnN0YXRlLnNlbGVjdGlvbi5yYW5nZXMpe2lmKCFpLmVtcHR5KWNvbnRpbnVlO2xldCBzPVUodC5zdGF0ZSxpLmhlYWQsLTEscil8fGkuaGVhZD4wJiZVKHQuc3RhdGUsaS5oZWFkLTEsMSxyKXx8ci5hZnRlckN1cnNvciYmKFUodC5zdGF0ZSxpLmhlYWQsMSxyKXx8aS5oZWFkPHQuc3RhdGUuZG9jLmxlbmd0aCYmVSh0LnN0YXRlLGkuaGVhZCsxLC0xLHIpKTtzJiYoZT1lLmNvbmNhdChyLnJlbmRlck1hdGNoKHMsdC5zdGF0ZSkpKX1yZXR1cm4gay5zZXQoZSwhMCl9LHByb3ZpZGU6bj0+eS5kZWNvcmF0aW9ucy5mcm9tKG4pfSksSWU9W0RlLFBlXTtmdW5jdGlvbiBvbihuPXt9KXtyZXR1cm5bTHQub2YobiksSWVdfWZ1bmN0aW9uIGl0KG4sdCxlKXtsZXQgcj1uLnByb3AodDwwP3Yub3BlbmVkQnk6di5jbG9zZWRCeSk7aWYocilyZXR1cm4gcjtpZihuLm5hbWUubGVuZ3RoPT0xKXtsZXQgaT1lLmluZGV4T2Yobi5uYW1lKTtpZihpPi0xJiZpJTI9PSh0PDA/MTowKSlyZXR1cm5bZVtpK3RdXX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBVKG4sdCxlLHI9e30pe2xldCBpPXIubWF4U2NhbkRpc3RhbmNlfHxVdCxzPXIuYnJhY2tldHN8fFd0LG89bShuKSxsPW8ucmVzb2x2ZUlubmVyKHQsZSk7Zm9yKGxldCBhPWw7YTthPWEucGFyZW50KXtsZXQgaD1pdChhLnR5cGUsZSxzKTtpZihoJiZhLmZyb208YS50bylyZXR1cm4gT2Uobix0LGUsYSxoLHMpfXJldHVybiBOZShuLHQsZSxvLGwudHlwZSxpLHMpfWZ1bmN0aW9uIE9lKG4sdCxlLHIsaSxzKXtsZXQgbz1yLnBhcmVudCxsPXtmcm9tOnIuZnJvbSx0bzpyLnRvfSxhPTAsaD1vPy5jdXJzb3IoKTtpZihoJiYoZTwwP2guY2hpbGRCZWZvcmUoci5mcm9tKTpoLmNoaWxkQWZ0ZXIoci50bykpKWRvIGlmKGU8MD9oLnRvPD1yLmZyb206aC5mcm9tPj1yLnRvKXtpZihhPT0wJiZpLmluZGV4T2YoaC50eXBlLm5hbWUpPi0xJiZoLmZyb208aC50bylyZXR1cm57c3RhcnQ6bCxlbmQ6e2Zyb206aC5mcm9tLHRvOmgudG99LG1hdGNoZWQ6ITB9O2lmKGl0KGgudHlwZSxlLHMpKWErKztlbHNlIGlmKGl0KGgudHlwZSwtZSxzKSl7aWYoYT09MClyZXR1cm57c3RhcnQ6bCxlbmQ6aC5mcm9tPT1oLnRvP3ZvaWQgMDp7ZnJvbTpoLmZyb20sdG86aC50b30sbWF0Y2hlZDohMX07YS0tfX13aGlsZShlPDA/aC5wcmV2U2libGluZygpOmgubmV4dFNpYmxpbmcoKSk7cmV0dXJue3N0YXJ0OmwsbWF0Y2hlZDohMX19ZnVuY3Rpb24gTmUobix0LGUscixpLHMsbyl7bGV0IGw9ZTwwP24uc2xpY2VEb2ModC0xLHQpOm4uc2xpY2VEb2ModCx0KzEpLGE9by5pbmRleE9mKGwpO2lmKGE8MHx8YSUyPT0wIT1lPjApcmV0dXJuIG51bGw7bGV0IGg9e2Zyb206ZTwwP3QtMTp0LHRvOmU+MD90KzE6dH0sdT1uLmRvYy5pdGVyUmFuZ2UodCxlPjA/bi5kb2MubGVuZ3RoOjApLGQ9MDtmb3IobGV0IGc9MDshdS5uZXh0KCkuZG9uZSYmZzw9czspe2xldCB3PXUudmFsdWU7ZTwwJiYoZys9dy5sZW5ndGgpO2xldCBRPXQrZyplO2ZvcihsZXQgQz1lPjA/MDp3Lmxlbmd0aC0xLEd0PWU+MD93Lmxlbmd0aDotMTtDIT1HdDtDKz1lKXtsZXQgWD1vLmluZGV4T2Yod1tDXSk7aWYoIShYPDB8fHIucmVzb2x2ZUlubmVyKFErQywxKS50eXBlIT1pKSlpZihYJTI9PTA9PWU+MClkKys7ZWxzZXtpZihkPT0xKXJldHVybntzdGFydDpoLGVuZDp7ZnJvbTpRK0MsdG86UStDKzF9LG1hdGNoZWQ6WD4+MT09YT4+MX07ZC0tfX1lPjAmJihnKz13Lmxlbmd0aCl9cmV0dXJuIHUuZG9uZT97c3RhcnQ6aCxtYXRjaGVkOiExfTpudWxsfWZ1bmN0aW9uIG10KG4sdCxlLHI9MCxpPTApe3Q9PW51bGwmJih0PW4uc2VhcmNoKC9bXlxcc1xcdTAwYTBdLyksdD09LTEmJih0PW4ubGVuZ3RoKSk7bGV0IHM9aTtmb3IobGV0IG89cjtvPHQ7bysrKW4uY2hhckNvZGVBdChvKT09OT9zKz1lLXMlZTpzKys7cmV0dXJuIHN9dmFyIEc9Y2xhc3N7Y29uc3RydWN0b3IodCxlLHIpe3RoaXMuc3RyaW5nPXQsdGhpcy50YWJTaXplPWUsdGhpcy5pbmRlbnRVbml0PXIsdGhpcy5wb3M9MCx0aGlzLnN0YXJ0PTAsdGhpcy5sYXN0Q29sdW1uUG9zPTAsdGhpcy5sYXN0Q29sdW1uVmFsdWU9MH1lb2woKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuc3RyaW5nLmxlbmd0aH1zb2woKXtyZXR1cm4gdGhpcy5wb3M9PTB9cGVlaygpe3JldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpfHx2b2lkIDB9bmV4dCgpe2lmKHRoaXMucG9zPHRoaXMuc3RyaW5nLmxlbmd0aClyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspfWVhdCh0KXtsZXQgZT10aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpLHI7aWYodHlwZW9mIHQ9PVwic3RyaW5nXCI/cj1lPT10OnI9ZSYmKHQgaW5zdGFuY2VvZiBSZWdFeHA/dC50ZXN0KGUpOnQoZSkpLHIpcmV0dXJuKyt0aGlzLnBvcyxlfWVhdFdoaWxlKHQpe2xldCBlPXRoaXMucG9zO2Zvcig7dGhpcy5lYXQodCk7KTtyZXR1cm4gdGhpcy5wb3M+ZX1lYXRTcGFjZSgpe2xldCB0PXRoaXMucG9zO2Zvcig7L1tcXHNcXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKTspKyt0aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M+dH1za2lwVG9FbmQoKXt0aGlzLnBvcz10aGlzLnN0cmluZy5sZW5ndGh9c2tpcFRvKHQpe2xldCBlPXRoaXMuc3RyaW5nLmluZGV4T2YodCx0aGlzLnBvcyk7aWYoZT4tMSlyZXR1cm4gdGhpcy5wb3M9ZSwhMH1iYWNrVXAodCl7dGhpcy5wb3MtPXR9Y29sdW1uKCl7cmV0dXJuIHRoaXMubGFzdENvbHVtblBvczx0aGlzLnN0YXJ0JiYodGhpcy5sYXN0Q29sdW1uVmFsdWU9bXQodGhpcy5zdHJpbmcsdGhpcy5zdGFydCx0aGlzLnRhYlNpemUsdGhpcy5sYXN0Q29sdW1uUG9zLHRoaXMubGFzdENvbHVtblZhbHVlKSx0aGlzLmxhc3RDb2x1bW5Qb3M9dGhpcy5zdGFydCksdGhpcy5sYXN0Q29sdW1uVmFsdWV9aW5kZW50YXRpb24oKXtyZXR1cm4gbXQodGhpcy5zdHJpbmcsbnVsbCx0aGlzLnRhYlNpemUpfW1hdGNoKHQsZSxyKXtpZih0eXBlb2YgdD09XCJzdHJpbmdcIil7bGV0IGk9bz0+cj9vLnRvTG93ZXJDYXNlKCk6byxzPXRoaXMuc3RyaW5nLnN1YnN0cih0aGlzLnBvcyx0Lmxlbmd0aCk7cmV0dXJuIGkocyk9PWkodCk/KGUhPT0hMSYmKHRoaXMucG9zKz10Lmxlbmd0aCksITApOm51bGx9ZWxzZXtsZXQgaT10aGlzLnN0cmluZy5zbGljZSh0aGlzLnBvcykubWF0Y2godCk7cmV0dXJuIGkmJmkuaW5kZXg+MD9udWxsOihpJiZlIT09ITEmJih0aGlzLnBvcys9aVswXS5sZW5ndGgpLGkpfX1jdXJyZW50KCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsdGhpcy5wb3MpfX07ZnVuY3Rpb24gQmUobil7cmV0dXJue3Rva2VuOm4udG9rZW4sYmxhbmtMaW5lOm4uYmxhbmtMaW5lfHwoKCk9Pnt9KSxzdGFydFN0YXRlOm4uc3RhcnRTdGF0ZXx8KCgpPT4hMCksY29weVN0YXRlOm4uY29weVN0YXRlfHxNZSxpbmRlbnQ6bi5pbmRlbnR8fCgoKT0+bnVsbCksbGFuZ3VhZ2VEYXRhOm4ubGFuZ3VhZ2VEYXRhfHx7fSx0b2tlblRhYmxlOm4udG9rZW5UYWJsZXx8aHR9fWZ1bmN0aW9uIE1lKG4pe2lmKHR5cGVvZiBuIT1cIm9iamVjdFwiKXJldHVybiBuO2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuKXtsZXQgcj1uW2VdO3RbZV09ciBpbnN0YW5jZW9mIEFycmF5P3Iuc2xpY2UoKTpyfXJldHVybiB0fXZhciBxPWNsYXNzIGV4dGVuZHMgY3tjb25zdHJ1Y3Rvcih0KXtsZXQgZT12dCh0Lmxhbmd1YWdlRGF0YSkscj1CZSh0KSxpLHM9bmV3IGNsYXNzIGV4dGVuZHMga3R7Y3JlYXRlUGFyc2UobyxsLGEpe3JldHVybiBuZXcgc3QoaSxvLGwsYSl9fTtzdXBlcihlLHMsW1B0Lm9mKChvLGwpPT50aGlzLmdldEluZGVudChvLGwpKV0pLHRoaXMudG9wTm9kZT1VZShlKSxpPXRoaXMsdGhpcy5zdHJlYW1QYXJzZXI9cix0aGlzLnN0YXRlQWZ0ZXI9bmV3IHYoe3Blck5vZGU6ITB9KSx0aGlzLnRva2VuVGFibGU9dC50b2tlblRhYmxlP25ldyBIKHIudG9rZW5UYWJsZSk6UmV9c3RhdGljIGRlZmluZSh0KXtyZXR1cm4gbmV3IHEodCl9Z2V0SW5kZW50KHQsZSl7bGV0IHI9bSh0LnN0YXRlKSxpPXIucmVzb2x2ZShlKTtmb3IoO2kmJmkudHlwZSE9dGhpcy50b3BOb2RlOylpPWkucGFyZW50O2lmKCFpKXJldHVybiBudWxsO2xldCBzPWF0KHRoaXMsciwwLGkuZnJvbSxlKSxvLGw7aWYocz8obD1zLnN0YXRlLG89cy5wb3MrMSk6KGw9dGhpcy5zdHJlYW1QYXJzZXIuc3RhcnRTdGF0ZSh0LnVuaXQpLG89MCksZS1vPjFlNClyZXR1cm4gbnVsbDtmb3IoO288ZTspe2xldCBoPXQuc3RhdGUuZG9jLmxpbmVBdChvKSx1PU1hdGgubWluKGUsaC50byk7aWYoaC5sZW5ndGgpe2xldCBkPW5ldyBHKGgudGV4dCx0LnN0YXRlLnRhYlNpemUsdC51bml0KTtmb3IoO2QucG9zPHUtaC5mcm9tOykkdCh0aGlzLnN0cmVhbVBhcnNlci50b2tlbixkLGwpfWVsc2UgdGhpcy5zdHJlYW1QYXJzZXIuYmxhbmtMaW5lKGwsdC51bml0KTtpZih1PT1lKWJyZWFrO289aC50bysxfWxldHt0ZXh0OmF9PXQubGluZUF0KGUpO3JldHVybiB0aGlzLnN0cmVhbVBhcnNlci5pbmRlbnQobCwvXlxccyooLiopLy5leGVjKGEpWzFdLHQpfWdldCBhbGxvd3NOZXN0aW5nKCl7cmV0dXJuITF9fTtmdW5jdGlvbiBhdChuLHQsZSxyLGkpe2xldCBzPWU+PXImJmUrdC5sZW5ndGg8PWkmJnQucHJvcChuLnN0YXRlQWZ0ZXIpO2lmKHMpcmV0dXJue3N0YXRlOm4uc3RyZWFtUGFyc2VyLmNvcHlTdGF0ZShzKSxwb3M6ZSt0Lmxlbmd0aH07Zm9yKGxldCBvPXQuY2hpbGRyZW4ubGVuZ3RoLTE7bz49MDtvLS0pe2xldCBsPXQuY2hpbGRyZW5bb10sYT1lK3QucG9zaXRpb25zW29dLGg9bCBpbnN0YW5jZW9mIHAmJmE8aSYmYXQobixsLGEscixpKTtpZihoKXJldHVybiBofXJldHVybiBudWxsfWZ1bmN0aW9uIGp0KG4sdCxlLHIsaSl7aWYoaSYmZTw9MCYmcj49dC5sZW5ndGgpcmV0dXJuIHQ7IWkmJnQudHlwZT09bi50b3BOb2RlJiYoaT0hMCk7Zm9yKGxldCBzPXQuY2hpbGRyZW4ubGVuZ3RoLTE7cz49MDtzLS0pe2xldCBvPXQucG9zaXRpb25zW3NdLGw9dC5jaGlsZHJlbltzXSxhO2lmKG88ciYmbCBpbnN0YW5jZW9mIHApe2lmKCEoYT1qdChuLGwsZS1vLHItbyxpKSkpYnJlYWs7cmV0dXJuIGk/bmV3IHAodC50eXBlLHQuY2hpbGRyZW4uc2xpY2UoMCxzKS5jb25jYXQoYSksdC5wb3NpdGlvbnMuc2xpY2UoMCxzKzEpLG8rYS5sZW5ndGgpOmF9fXJldHVybiBudWxsfWZ1bmN0aW9uIEVlKG4sdCxlLHIpe2ZvcihsZXQgaSBvZiB0KXtsZXQgcz1pLmZyb20rKGkub3BlblN0YXJ0PzI1OjApLG89aS50by0oaS5vcGVuRW5kPzI1OjApLGw9czw9ZSYmbz5lJiZhdChuLGkudHJlZSwwLWkub2Zmc2V0LGUsbyksYTtpZihsJiYoYT1qdChuLGkudHJlZSxlK2kub2Zmc2V0LGwucG9zK2kub2Zmc2V0LCExKSkpcmV0dXJue3N0YXRlOmwuc3RhdGUsdHJlZTphfX1yZXR1cm57c3RhdGU6bi5zdHJlYW1QYXJzZXIuc3RhcnRTdGF0ZShyPyQocik6NCksdHJlZTpwLmVtcHR5fX12YXIgc3Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlLHIsaSl7dGhpcy5sYW5nPXQsdGhpcy5pbnB1dD1lLHRoaXMuZnJhZ21lbnRzPXIsdGhpcy5yYW5nZXM9aSx0aGlzLnN0b3BwZWRBdD1udWxsLHRoaXMuY2h1bmtzPVtdLHRoaXMuY2h1bmtQb3M9W10sdGhpcy5jaHVuaz1bXSx0aGlzLmNodW5rUmV1c2VkPXZvaWQgMCx0aGlzLnJhbmdlSW5kZXg9MCx0aGlzLnRvPWlbaS5sZW5ndGgtMV0udG87bGV0IHM9eC5nZXQoKSxvPWlbMF0uZnJvbSx7c3RhdGU6bCx0cmVlOmF9PUVlKHQscixvLHM/LnN0YXRlKTt0aGlzLnN0YXRlPWwsdGhpcy5wYXJzZWRQb3M9dGhpcy5jaHVua1N0YXJ0PW8rYS5sZW5ndGg7Zm9yKGxldCBoPTA7aDxhLmNoaWxkcmVuLmxlbmd0aDtoKyspdGhpcy5jaHVua3MucHVzaChhLmNoaWxkcmVuW2hdKSx0aGlzLmNodW5rUG9zLnB1c2goYS5wb3NpdGlvbnNbaF0pO3MmJnRoaXMucGFyc2VkUG9zPHMudmlld3BvcnQuZnJvbS0xZTUmJih0aGlzLnN0YXRlPXRoaXMubGFuZy5zdHJlYW1QYXJzZXIuc3RhcnRTdGF0ZSgkKHMuc3RhdGUpKSxzLnNraXBVbnRpbEluVmlldyh0aGlzLnBhcnNlZFBvcyxzLnZpZXdwb3J0LmZyb20pLHRoaXMucGFyc2VkUG9zPXMudmlld3BvcnQuZnJvbSksdGhpcy5tb3ZlUmFuZ2VJbmRleCgpfWFkdmFuY2UoKXtsZXQgdD14LmdldCgpLGU9dGhpcy5zdG9wcGVkQXQ9PW51bGw/dGhpcy50bzpNYXRoLm1pbih0aGlzLnRvLHRoaXMuc3RvcHBlZEF0KSxyPU1hdGgubWluKGUsdGhpcy5jaHVua1N0YXJ0KzIwNDgpO2Zvcih0JiYocj1NYXRoLm1pbihyLHQudmlld3BvcnQudG8pKTt0aGlzLnBhcnNlZFBvczxyOyl0aGlzLnBhcnNlTGluZSh0KTtyZXR1cm4gdGhpcy5jaHVua1N0YXJ0PHRoaXMucGFyc2VkUG9zJiZ0aGlzLmZpbmlzaENodW5rKCksdGhpcy5wYXJzZWRQb3M+PWU/dGhpcy5maW5pc2goKTp0JiZ0aGlzLnBhcnNlZFBvcz49dC52aWV3cG9ydC50bz8odC5za2lwVW50aWxJblZpZXcodGhpcy5wYXJzZWRQb3MsZSksdGhpcy5maW5pc2goKSk6bnVsbH1zdG9wQXQodCl7dGhpcy5zdG9wcGVkQXQ9dH1saW5lQWZ0ZXIodCl7bGV0IGU9dGhpcy5pbnB1dC5jaHVuayh0KTtpZih0aGlzLmlucHV0LmxpbmVDaHVua3MpZT09YFxuYCYmKGU9XCJcIik7ZWxzZXtsZXQgcj1lLmluZGV4T2YoYFxuYCk7cj4tMSYmKGU9ZS5zbGljZSgwLHIpKX1yZXR1cm4gdCtlLmxlbmd0aDw9dGhpcy50bz9lOmUuc2xpY2UoMCx0aGlzLnRvLXQpfW5leHRMaW5lKCl7bGV0IHQ9dGhpcy5wYXJzZWRQb3MsZT10aGlzLmxpbmVBZnRlcih0KSxyPXQrZS5sZW5ndGg7Zm9yKGxldCBpPXRoaXMucmFuZ2VJbmRleDs7KXtsZXQgcz10aGlzLnJhbmdlc1tpXS50bztpZihzPj1yfHwoZT1lLnNsaWNlKDAscy0oci1lLmxlbmd0aCkpLGkrKyxpPT10aGlzLnJhbmdlcy5sZW5ndGgpKWJyZWFrO2xldCBvPXRoaXMucmFuZ2VzW2ldLmZyb20sbD10aGlzLmxpbmVBZnRlcihvKTtlKz1sLHI9bytsLmxlbmd0aH1yZXR1cm57bGluZTplLGVuZDpyfX1za2lwR2Fwc1RvKHQsZSxyKXtmb3IoOzspe2xldCBpPXRoaXMucmFuZ2VzW3RoaXMucmFuZ2VJbmRleF0udG8scz10K2U7aWYocj4wP2k+czppPj1zKWJyZWFrO2UrPXRoaXMucmFuZ2VzWysrdGhpcy5yYW5nZUluZGV4XS5mcm9tLWl9cmV0dXJuIGV9bW92ZVJhbmdlSW5kZXgoKXtmb3IoO3RoaXMucmFuZ2VzW3RoaXMucmFuZ2VJbmRleF0udG88dGhpcy5wYXJzZWRQb3M7KXRoaXMucmFuZ2VJbmRleCsrfWVtaXRUb2tlbih0LGUscixpLHMpe2lmKHRoaXMucmFuZ2VzLmxlbmd0aD4xKXtzPXRoaXMuc2tpcEdhcHNUbyhlLHMsMSksZSs9cztsZXQgbz10aGlzLmNodW5rLmxlbmd0aDtzPXRoaXMuc2tpcEdhcHNUbyhyLHMsLTEpLHIrPXMsaSs9dGhpcy5jaHVuay5sZW5ndGgtb31yZXR1cm4gdGhpcy5jaHVuay5wdXNoKHQsZSxyLGkpLHN9cGFyc2VMaW5lKHQpe2xldHtsaW5lOmUsZW5kOnJ9PXRoaXMubmV4dExpbmUoKSxpPTAse3N0cmVhbVBhcnNlcjpzfT10aGlzLmxhbmcsbz1uZXcgRyhlLHQ/dC5zdGF0ZS50YWJTaXplOjQsdD8kKHQuc3RhdGUpOjIpO2lmKG8uZW9sKCkpcy5ibGFua0xpbmUodGhpcy5zdGF0ZSxvLmluZGVudFVuaXQpO2Vsc2UgZm9yKDshby5lb2woKTspe2xldCBsPSR0KHMudG9rZW4sbyx0aGlzLnN0YXRlKTtpZihsJiYoaT10aGlzLmVtaXRUb2tlbih0aGlzLmxhbmcudG9rZW5UYWJsZS5yZXNvbHZlKGwpLHRoaXMucGFyc2VkUG9zK28uc3RhcnQsdGhpcy5wYXJzZWRQb3Mrby5wb3MsNCxpKSksby5zdGFydD4xZTQpYnJlYWt9dGhpcy5wYXJzZWRQb3M9cix0aGlzLm1vdmVSYW5nZUluZGV4KCksdGhpcy5wYXJzZWRQb3M8dGhpcy50byYmdGhpcy5wYXJzZWRQb3MrK31maW5pc2hDaHVuaygpe2xldCB0PXAuYnVpbGQoe2J1ZmZlcjp0aGlzLmNodW5rLHN0YXJ0OnRoaXMuY2h1bmtTdGFydCxsZW5ndGg6dGhpcy5wYXJzZWRQb3MtdGhpcy5jaHVua1N0YXJ0LG5vZGVTZXQ6RmUsdG9wSUQ6MCxtYXhCdWZmZXJMZW5ndGg6MjA0OCxyZXVzZWQ6dGhpcy5jaHVua1JldXNlZH0pO3Q9bmV3IHAodC50eXBlLHQuY2hpbGRyZW4sdC5wb3NpdGlvbnMsdC5sZW5ndGgsW1t0aGlzLmxhbmcuc3RhdGVBZnRlcix0aGlzLmxhbmcuc3RyZWFtUGFyc2VyLmNvcHlTdGF0ZSh0aGlzLnN0YXRlKV1dKSx0aGlzLmNodW5rcy5wdXNoKHQpLHRoaXMuY2h1bmtQb3MucHVzaCh0aGlzLmNodW5rU3RhcnQtdGhpcy5yYW5nZXNbMF0uZnJvbSksdGhpcy5jaHVuaz1bXSx0aGlzLmNodW5rUmV1c2VkPXZvaWQgMCx0aGlzLmNodW5rU3RhcnQ9dGhpcy5wYXJzZWRQb3N9ZmluaXNoKCl7cmV0dXJuIG5ldyBwKHRoaXMubGFuZy50b3BOb2RlLHRoaXMuY2h1bmtzLHRoaXMuY2h1bmtQb3MsdGhpcy5wYXJzZWRQb3MtdGhpcy5yYW5nZXNbMF0uZnJvbSkuYmFsYW5jZSgpfX07ZnVuY3Rpb24gJHQobix0LGUpe3Quc3RhcnQ9dC5wb3M7Zm9yKGxldCByPTA7cjwxMDtyKyspe2xldCBpPW4odCxlKTtpZih0LnBvcz50LnN0YXJ0KXJldHVybiBpfXRocm93IG5ldyBFcnJvcihcIlN0cmVhbSBwYXJzZXIgZmFpbGVkIHRvIGFkdmFuY2Ugc3RyZWFtLlwiKX12YXIgaHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxGPVtKLm5vbmVdLEZlPW5ldyBIdChGKSxndD1bXSxWdD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXRbbix0XW9mW1tcInZhcmlhYmxlXCIsXCJ2YXJpYWJsZU5hbWVcIl0sW1widmFyaWFibGUtMlwiLFwidmFyaWFibGVOYW1lLnNwZWNpYWxcIl0sW1wic3RyaW5nLTJcIixcInN0cmluZy5zcGVjaWFsXCJdLFtcImRlZlwiLFwidmFyaWFibGVOYW1lLmRlZmluaXRpb25cIl0sW1widGFnXCIsXCJ0YWdOYW1lXCJdLFtcImF0dHJpYnV0ZVwiLFwiYXR0cmlidXRlTmFtZVwiXSxbXCJ0eXBlXCIsXCJ0eXBlTmFtZVwiXSxbXCJidWlsdGluXCIsXCJ2YXJpYWJsZU5hbWUuc3RhbmRhcmRcIl0sW1wicXVhbGlmaWVyXCIsXCJtb2RpZmllclwiXSxbXCJlcnJvclwiLFwiaW52YWxpZFwiXSxbXCJoZWFkZXJcIixcImhlYWRpbmdcIl0sW1wicHJvcGVydHlcIixcInByb3BlcnR5TmFtZVwiXV0pVnRbbl09enQoaHQsdCk7dmFyIEg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5leHRyYT10LHRoaXMudGFibGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLFZ0KX1yZXNvbHZlKHQpe3JldHVybiB0P3RoaXMudGFibGVbdF18fCh0aGlzLnRhYmxlW3RdPXp0KHRoaXMuZXh0cmEsdCkpOjB9fSxSZT1uZXcgSChodCk7ZnVuY3Rpb24gdHQobix0KXtndC5pbmRleE9mKG4pPi0xfHwoZ3QucHVzaChuKSxjb25zb2xlLndhcm4odCkpfWZ1bmN0aW9uIHp0KG4sdCl7bGV0IGU9bnVsbDtmb3IobGV0IHMgb2YgdC5zcGxpdChcIi5cIikpe2xldCBvPW5bc118fGZbc107bz90eXBlb2Ygbz09XCJmdW5jdGlvblwiP2U/ZT1vKGUpOnR0KHMsYE1vZGlmaWVyICR7c30gdXNlZCBhdCBzdGFydCBvZiB0YWdgKTplP3R0KHMsYFRhZyAke3N9IHVzZWQgYXMgbW9kaWZpZXJgKTplPW86dHQocyxgVW5rbm93biBoaWdobGlnaHRpbmcgdGFnICR7c31gKX1pZighZSlyZXR1cm4gMDtsZXQgcj10LnJlcGxhY2UoLyAvZyxcIl9cIiksaT1KLmRlZmluZSh7aWQ6Ri5sZW5ndGgsbmFtZTpyLHByb3BzOltlZSh7W3JdOmV9KV19KTtyZXR1cm4gRi5wdXNoKGkpLGkuaWR9ZnVuY3Rpb24gVWUobil7bGV0IHQ9Si5kZWZpbmUoe2lkOkYubGVuZ3RoLG5hbWU6XCJEb2N1bWVudFwiLHByb3BzOltULmFkZCgoKT0+bildfSk7cmV0dXJuIEYucHVzaCh0KSx0fWV4cG9ydHtEIGFzIEhpZ2hsaWdodFN0eWxlLE0gYXMgSW5kZW50Q29udGV4dCxCIGFzIExSTGFuZ3VhZ2UsYyBhcyBMYW5ndWFnZSxqIGFzIExhbmd1YWdlRGVzY3JpcHRpb24sZHQgYXMgTGFuZ3VhZ2VTdXBwb3J0LHggYXMgUGFyc2VDb250ZXh0LHEgYXMgU3RyZWFtTGFuZ3VhZ2UsRyBhcyBTdHJpbmdTdHJlYW0sRSBhcyBUcmVlSW5kZW50Q29udGV4dCxvbiBhcyBicmFja2V0TWF0Y2hpbmcsRnQgYXMgY29kZUZvbGRpbmcsUWUgYXMgY29udGludWVkSW5kZW50LHNuIGFzIGRlZmF1bHRIaWdobGlnaHRTdHlsZSx2dCBhcyBkZWZpbmVMYW5ndWFnZUZhY2V0LEtlIGFzIGRlbGltaXRlZEluZGVudCxuZSBhcyBlbnN1cmVTeW50YXhUcmVlLF9lIGFzIGZsYXRJbmRlbnQsYmUgYXMgZm9sZEFsbCxnZSBhcyBmb2xkQ29kZSxfIGFzIGZvbGRFZmZlY3QsZW4gYXMgZm9sZEd1dHRlcixZZSBhcyBmb2xkSW5zaWRlLHRuIGFzIGZvbGRLZXltYXAsY2UgYXMgZm9sZE5vZGVQcm9wLHVlIGFzIGZvbGRTZXJ2aWNlLEEgYXMgZm9sZFN0YXRlLFYgYXMgZm9sZGFibGUsWmUgYXMgZm9sZGVkUmFuZ2VzLEdlIGFzIGZvcmNlUGFyc2luZywkIGFzIGdldEluZGVudFVuaXQsVHQgYXMgZ2V0SW5kZW50YXRpb24scm4gYXMgaGlnaGxpZ2h0aW5nRm9yLHJlIGFzIGluZGVudE5vZGVQcm9wLFhlIGFzIGluZGVudE9uSW5wdXQsSmUgYXMgaW5kZW50UmFuZ2UsUHQgYXMgaW5kZW50U2VydmljZSxDdCBhcyBpbmRlbnRTdHJpbmcsQXQgYXMgaW5kZW50VW5pdCxQIGFzIGxhbmd1YWdlLFQgYXMgbGFuZ3VhZ2VEYXRhUHJvcCxVIGFzIG1hdGNoQnJhY2tldHMsbm4gYXMgc3ludGF4SGlnaGxpZ2h0aW5nLHFlIGFzIHN5bnRheFBhcnNlclJ1bm5pbmcsbSBhcyBzeW50YXhUcmVlLHplIGFzIHN5bnRheFRyZWVBdmFpbGFibGUsd2UgYXMgdW5mb2xkQWxsLGtlIGFzIHVuZm9sZENvZGUsUiBhcyB1bmZvbGRFZmZlY3R9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBjb2RlbWlycm9yL2F1dG9jb21wbGV0ZUA2LjMuMCkgZGVubyBwcm9kdWN0aW9uICovXG5pbXBvcnR7QW5ub3RhdGlvbiBhcyBVZSxFZGl0b3JTZWxlY3Rpb24gYXMgZyxjb2RlUG9pbnRBdCBhcyB5LGNvZGVQb2ludFNpemUgYXMgdyxmcm9tQ29kZVBvaW50IGFzIFNlLEZhY2V0IGFzIEVlLGNvbWJpbmVDb25maWcgYXMgRmUsU3RhdGVFZmZlY3QgYXMgdixTdGF0ZUZpZWxkIGFzIG9lLFByZWMgYXMgUGUsVGV4dCBhcyBOZSxNYXBNb2RlIGFzIEcsUmFuZ2VWYWx1ZSBhcyBIZSxSYW5nZVNldCBhcyBmZSxDaGFyQ2F0ZWdvcnkgYXMgSn1mcm9tXCJAY29kZW1pcnJvci9zdGF0ZVwiO2ltcG9ydHtsb2dFeGNlcHRpb24gYXMgWixEaXJlY3Rpb24gYXMgVmUsc2hvd1Rvb2x0aXAgYXMgcWUsRWRpdG9yVmlldyBhcyBrLFZpZXdQbHVnaW4gYXMgS2UsZ2V0VG9vbHRpcCBhcyB6ZSxEZWNvcmF0aW9uIGFzIFYsV2lkZ2V0VHlwZSBhcyBRZSxrZXltYXAgYXMgT2V9ZnJvbVwiL3Y5Ni9AY29kZW1pcnJvci92aWV3QDYuMy4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QWJHVjZaWEl2WTI5dGJXOXUvZGVuby92aWV3LmpzXCI7aW1wb3J0e3N5bnRheFRyZWUgYXMgVyxpbmRlbnRVbml0IGFzIFhlfWZyb21cIi92OTYvQGNvZGVtaXJyb3IvbGFuZ3VhZ2VANi4yLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBYkdWNlpYSXZZMjl0Ylc5dS9kZW5vL2xhbmd1YWdlLmpzXCI7dmFyIEY9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMuc3RhdGU9ZSx0aGlzLnBvcz10LHRoaXMuZXhwbGljaXQ9aSx0aGlzLmFib3J0TGlzdGVuZXJzPVtdfXRva2VuQmVmb3JlKGUpe2xldCB0PVcodGhpcy5zdGF0ZSkucmVzb2x2ZUlubmVyKHRoaXMucG9zLC0xKTtmb3IoO3QmJmUuaW5kZXhPZih0Lm5hbWUpPDA7KXQ9dC5wYXJlbnQ7cmV0dXJuIHQ/e2Zyb206dC5mcm9tLHRvOnRoaXMucG9zLHRleHQ6dGhpcy5zdGF0ZS5zbGljZURvYyh0LmZyb20sdGhpcy5wb3MpLHR5cGU6dC50eXBlfTpudWxsfW1hdGNoQmVmb3JlKGUpe2xldCB0PXRoaXMuc3RhdGUuZG9jLmxpbmVBdCh0aGlzLnBvcyksaT1NYXRoLm1heCh0LmZyb20sdGhpcy5wb3MtMjUwKSxvPXQudGV4dC5zbGljZShpLXQuZnJvbSx0aGlzLnBvcy10LmZyb20pLHM9by5zZWFyY2goQWUoZSwhMSkpO3JldHVybiBzPDA/bnVsbDp7ZnJvbTppK3MsdG86dGhpcy5wb3MsdGV4dDpvLnNsaWNlKHMpfX1nZXQgYWJvcnRlZCgpe3JldHVybiB0aGlzLmFib3J0TGlzdGVuZXJzPT1udWxsfWFkZEV2ZW50TGlzdGVuZXIoZSx0KXtlPT1cImFib3J0XCImJnRoaXMuYWJvcnRMaXN0ZW5lcnMmJnRoaXMuYWJvcnRMaXN0ZW5lcnMucHVzaCh0KX19O2Z1bmN0aW9uIHVlKG4pe2xldCBlPU9iamVjdC5rZXlzKG4pLmpvaW4oXCJcIiksdD0vXFx3Ly50ZXN0KGUpO3JldHVybiB0JiYoZT1lLnJlcGxhY2UoL1xcdy9nLFwiXCIpKSxgWyR7dD9cIlxcXFx3XCI6XCJcIn0ke2UucmVwbGFjZSgvW15cXHdcXHNdL2csXCJcXFxcJCZcIil9XWB9ZnVuY3Rpb24gWWUobil7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldHtsYWJlbDpvfW9mIG4pe2Vbb1swXV09ITA7Zm9yKGxldCBzPTE7czxvLmxlbmd0aDtzKyspdFtvW3NdXT0hMH1sZXQgaT11ZShlKSt1ZSh0KStcIiokXCI7cmV0dXJuW25ldyBSZWdFeHAoXCJeXCIraSksbmV3IFJlZ0V4cChpKV19ZnVuY3Rpb24gR2Uobil7bGV0IGU9bi5tYXAobz0+dHlwZW9mIG89PVwic3RyaW5nXCI/e2xhYmVsOm99Om8pLFt0LGldPWUuZXZlcnkobz0+L15cXHcrJC8udGVzdChvLmxhYmVsKSk/Wy9cXHcqJC8sL1xcdyskL106WWUoZSk7cmV0dXJuIG89PntsZXQgcz1vLm1hdGNoQmVmb3JlKGkpO3JldHVybiBzfHxvLmV4cGxpY2l0P3tmcm9tOnM/cy5mcm9tOm8ucG9zLG9wdGlvbnM6ZSx2YWxpZEZvcjp0fTpudWxsfX1mdW5jdGlvbiBGdChuLGUpe3JldHVybiB0PT57Zm9yKGxldCBpPVcodC5zdGF0ZSkucmVzb2x2ZUlubmVyKHQucG9zLC0xKTtpO2k9aS5wYXJlbnQpaWYobi5pbmRleE9mKGkubmFtZSk+LTEpcmV0dXJuIGUodCk7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIE50KG4sZSl7cmV0dXJuIHQ9Pntmb3IobGV0IGk9Vyh0LnN0YXRlKS5yZXNvbHZlSW5uZXIodC5wb3MsLTEpO2k7aT1pLnBhcmVudClpZihuLmluZGV4T2YoaS5uYW1lKT4tMSlyZXR1cm4gbnVsbDtyZXR1cm4gZSh0KX19dmFyIE49Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMuY29tcGxldGlvbj1lLHRoaXMuc291cmNlPXQsdGhpcy5tYXRjaD1pfX07ZnVuY3Rpb24gSShuKXtyZXR1cm4gbi5zZWxlY3Rpb24ubWFpbi5oZWFkfWZ1bmN0aW9uIEFlKG4sZSl7dmFyIHQ7bGV0e3NvdXJjZTppfT1uLG89ZSYmaVswXSE9XCJeXCIscz1pW2kubGVuZ3RoLTFdIT1cIiRcIjtyZXR1cm4hbyYmIXM/bjpuZXcgUmVnRXhwKGAke28/XCJeXCI6XCJcIn0oPzoke2l9KSR7cz9cIiRcIjpcIlwifWAsKHQ9bi5mbGFncykhPT1udWxsJiZ0IT09dm9pZCAwP3Q6bi5pZ25vcmVDYXNlP1wiaVwiOlwiXCIpfXZhciBIdD1VZS5kZWZpbmUoKTtmdW5jdGlvbiBKZShuLGUsdCxpKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4uY2hhbmdlQnlSYW5nZShvPT57aWYobz09bi5zZWxlY3Rpb24ubWFpbilyZXR1cm57Y2hhbmdlczp7ZnJvbTp0LHRvOmksaW5zZXJ0OmV9LHJhbmdlOmcuY3Vyc29yKHQrZS5sZW5ndGgpfTtsZXQgcz1pLXQ7cmV0dXJuIW8uZW1wdHl8fHMmJm4uc2xpY2VEb2Moby5mcm9tLXMsby5mcm9tKSE9bi5zbGljZURvYyh0LGkpP3tyYW5nZTpvfTp7Y2hhbmdlczp7ZnJvbTpvLmZyb20tcyx0bzpvLmZyb20saW5zZXJ0OmV9LHJhbmdlOmcuY3Vyc29yKG8uZnJvbS1zK2UubGVuZ3RoKX19KSkse3VzZXJFdmVudDpcImlucHV0LmNvbXBsZXRlXCJ9KX1mdW5jdGlvbiBUZShuLGUpe2xldCB0PWUuY29tcGxldGlvbi5hcHBseXx8ZS5jb21wbGV0aW9uLmxhYmVsLGk9ZS5zb3VyY2U7dHlwZW9mIHQ9PVwic3RyaW5nXCI/bi5kaXNwYXRjaChKZShuLnN0YXRlLHQsaS5mcm9tLGkudG8pKTp0KG4sZS5jb21wbGV0aW9uLGkuZnJvbSxpLnRvKX12YXIgaGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gWmUobil7aWYoIUFycmF5LmlzQXJyYXkobikpcmV0dXJuIG47bGV0IGU9aGUuZ2V0KG4pO3JldHVybiBlfHxoZS5zZXQobixlPUdlKG4pKSxlfXZhciBfPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMucGF0dGVybj1lLHRoaXMuY2hhcnM9W10sdGhpcy5mb2xkZWQ9W10sdGhpcy5hbnk9W10sdGhpcy5wcmVjaXNlPVtdLHRoaXMuYnlXb3JkPVtdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7KXtsZXQgaT15KGUsdCksbz13KGkpO3RoaXMuY2hhcnMucHVzaChpKTtsZXQgcz1lLnNsaWNlKHQsdCtvKSxyPXMudG9VcHBlckNhc2UoKTt0aGlzLmZvbGRlZC5wdXNoKHkocj09cz9zLnRvTG93ZXJDYXNlKCk6ciwwKSksdCs9b310aGlzLmFzdHJhbD1lLmxlbmd0aCE9dGhpcy5jaGFycy5sZW5ndGh9bWF0Y2goZSl7aWYodGhpcy5wYXR0ZXJuLmxlbmd0aD09MClyZXR1cm5bMF07aWYoZS5sZW5ndGg8dGhpcy5wYXR0ZXJuLmxlbmd0aClyZXR1cm4gbnVsbDtsZXR7Y2hhcnM6dCxmb2xkZWQ6aSxhbnk6byxwcmVjaXNlOnMsYnlXb3JkOnJ9PXRoaXM7aWYodC5sZW5ndGg9PTEpe2xldCBoPXkoZSwwKTtyZXR1cm4gaD09dFswXT9bMCwwLHcoaCldOmg9PWlbMF0/Wy0yMDAsMCx3KGgpXTpudWxsfWxldCBsPWUuaW5kZXhPZih0aGlzLnBhdHRlcm4pO2lmKGw9PTApcmV0dXJuWzAsMCx0aGlzLnBhdHRlcm4ubGVuZ3RoXTtsZXQgYz10Lmxlbmd0aCxhPTA7aWYobDwwKXtmb3IobGV0IGg9MCxRPU1hdGgubWluKGUubGVuZ3RoLDIwMCk7aDxRJiZhPGM7KXtsZXQgVD15KGUsaCk7KFQ9PXRbYV18fFQ9PWlbYV0pJiYob1thKytdPWgpLGgrPXcoVCl9aWYoYTxjKXJldHVybiBudWxsfWxldCBmPTAsdT0wLEM9ITEsYj0wLEE9LTEsSz0tMSxqZT0vW2Etel0vLnRlc3QoZSksej0hMDtmb3IobGV0IGg9MCxRPU1hdGgubWluKGUubGVuZ3RoLDIwMCksVD0wO2g8USYmdTxjOyl7bGV0IG09eShlLGgpO2w8MCYmKGY8YyYmbT09dFtmXSYmKHNbZisrXT1oKSxiPGMmJihtPT10W2JdfHxtPT1pW2JdPyhiPT0wJiYoQT1oKSxLPWgrMSxiKyspOmI9MCkpO2xldCBqLFg9bTwyNTU/bT49NDgmJm08PTU3fHxtPj05NyYmbTw9MTIyPzI6bT49NjUmJm08PTkwPzE6MDooaj1TZShtKSkhPWoudG9Mb3dlckNhc2UoKT8xOmohPWoudG9VcHBlckNhc2UoKT8yOjA7KCFofHxYPT0xJiZqZXx8VD09MCYmWCE9MCkmJih0W3VdPT1tfHxpW3VdPT1tJiYoQz0hMCk/clt1KytdPWg6ci5sZW5ndGgmJih6PSExKSksVD1YLGgrPXcobSl9cmV0dXJuIHU9PWMmJnJbMF09PTAmJno/dGhpcy5yZXN1bHQoLTEwMCsoQz8tMjAwOjApLHIsZSk6Yj09YyYmQT09MD9bLTIwMC1lLmxlbmd0aCwwLEtdOmw+LTE/Wy03MDAtZS5sZW5ndGgsbCxsK3RoaXMucGF0dGVybi5sZW5ndGhdOmI9PWM/Wy0yMDArLTcwMC1lLmxlbmd0aCxBLEtdOnU9PWM/dGhpcy5yZXN1bHQoLTEwMCsoQz8tMjAwOjApKy03MDArKHo/MDotMTEwMCkscixlKTp0Lmxlbmd0aD09Mj9udWxsOnRoaXMucmVzdWx0KChvWzBdPy03MDA6MCkrLTIwMCstMTEwMCxvLGUpfXJlc3VsdChlLHQsaSl7bGV0IG89W2UtaS5sZW5ndGhdLHM9MTtmb3IobGV0IHIgb2YgdCl7bGV0IGw9cisodGhpcy5hc3RyYWw/dyh5KGkscikpOjEpO3M+MSYmb1tzLTFdPT1yP29bcy0xXT1sOihvW3MrK109cixvW3MrK109bCl9cmV0dXJuIG99fSx4PUVlLmRlZmluZSh7Y29tYmluZShuKXtyZXR1cm4gRmUobix7YWN0aXZhdGVPblR5cGluZzohMCxzZWxlY3RPbk9wZW46ITAsb3ZlcnJpZGU6bnVsbCxjbG9zZU9uQmx1cjohMCxtYXhSZW5kZXJlZE9wdGlvbnM6MTAwLGRlZmF1bHRLZXltYXA6ITAsb3B0aW9uQ2xhc3M6KCk9PlwiXCIsYWJvdmVDdXJzb3I6ITEsaWNvbnM6ITAsYWRkVG9PcHRpb25zOltdLGNvbXBhcmVDb21wbGV0aW9uczooZSx0KT0+ZS5sYWJlbC5sb2NhbGVDb21wYXJlKHQubGFiZWwpLGludGVyYWN0aW9uRGVsYXk6NzV9LHtkZWZhdWx0S2V5bWFwOihlLHQpPT5lJiZ0LGNsb3NlT25CbHVyOihlLHQpPT5lJiZ0LGljb25zOihlLHQpPT5lJiZ0LG9wdGlvbkNsYXNzOihlLHQpPT5pPT5fZShlKGkpLHQoaSkpLGFkZFRvT3B0aW9uczooZSx0KT0+ZS5jb25jYXQodCl9KX19KTtmdW5jdGlvbiBfZShuLGUpe3JldHVybiBuP2U/bitcIiBcIitlOm46ZX1mdW5jdGlvbiBldChuKXtsZXQgZT1uLmFkZFRvT3B0aW9ucy5zbGljZSgpO3JldHVybiBuLmljb25zJiZlLnB1c2goe3JlbmRlcih0KXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBpLmNsYXNzTGlzdC5hZGQoXCJjbS1jb21wbGV0aW9uSWNvblwiKSx0LnR5cGUmJmkuY2xhc3NMaXN0LmFkZCguLi50LnR5cGUuc3BsaXQoL1xccysvZykubWFwKG89PlwiY20tY29tcGxldGlvbkljb24tXCIrbykpLGkuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIiksaX0scG9zaXRpb246MjB9KSxlLnB1c2goe3JlbmRlcih0LGksbyl7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7cy5jbGFzc05hbWU9XCJjbS1jb21wbGV0aW9uTGFiZWxcIjtsZXR7bGFiZWw6cn09dCxsPTA7Zm9yKGxldCBjPTE7YzxvLmxlbmd0aDspe2xldCBhPW9bYysrXSxmPW9bYysrXTthPmwmJnMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoci5zbGljZShsLGEpKSk7bGV0IHU9cy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSk7dS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyLnNsaWNlKGEsZikpKSx1LmNsYXNzTmFtZT1cImNtLWNvbXBsZXRpb25NYXRjaGVkVGV4dFwiLGw9Zn1yZXR1cm4gbDxyLmxlbmd0aCYmcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyLnNsaWNlKGwpKSksc30scG9zaXRpb246NTB9LHtyZW5kZXIodCl7aWYoIXQuZGV0YWlsKXJldHVybiBudWxsO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3JldHVybiBpLmNsYXNzTmFtZT1cImNtLWNvbXBsZXRpb25EZXRhaWxcIixpLnRleHRDb250ZW50PXQuZGV0YWlsLGl9LHBvc2l0aW9uOjgwfSksZS5zb3J0KCh0LGkpPT50LnBvc2l0aW9uLWkucG9zaXRpb24pLm1hcCh0PT50LnJlbmRlcil9ZnVuY3Rpb24gcGUobixlLHQpe2lmKG48PXQpcmV0dXJue2Zyb206MCx0bzpufTtpZihlPDAmJihlPTApLGU8PW4+PjEpe2xldCBvPU1hdGguZmxvb3IoZS90KTtyZXR1cm57ZnJvbTpvKnQsdG86KG8rMSkqdH19bGV0IGk9TWF0aC5mbG9vcigobi1lKS90KTtyZXR1cm57ZnJvbTpuLShpKzEpKnQsdG86bi1pKnR9fXZhciBlZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMudmlldz1lLHRoaXMuc3RhdGVGaWVsZD10LHRoaXMuaW5mbz1udWxsLHRoaXMucGxhY2VJbmZvPXtyZWFkOigpPT50aGlzLm1lYXN1cmVJbmZvKCksd3JpdGU6bD0+dGhpcy5wb3NpdGlvbkluZm8obCksa2V5OnRoaXN9O2xldCBpPWUuc3RhdGUuZmllbGQodCkse29wdGlvbnM6byxzZWxlY3RlZDpzfT1pLm9wZW4scj1lLnN0YXRlLmZhY2V0KHgpO3RoaXMub3B0aW9uQ29udGVudD1ldChyKSx0aGlzLm9wdGlvbkNsYXNzPXIub3B0aW9uQ2xhc3MsdGhpcy5yYW5nZT1wZShvLmxlbmd0aCxzLHIubWF4UmVuZGVyZWRPcHRpb25zKSx0aGlzLmRvbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMuZG9tLmNsYXNzTmFtZT1cImNtLXRvb2x0aXAtYXV0b2NvbXBsZXRlXCIsdGhpcy5kb20uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGw9Pntmb3IobGV0IGM9bC50YXJnZXQsYTtjJiZjIT10aGlzLmRvbTtjPWMucGFyZW50Tm9kZSlpZihjLm5vZGVOYW1lPT1cIkxJXCImJihhPS8tKFxcZCspJC8uZXhlYyhjLmlkKSkmJithWzFdPG8ubGVuZ3RoKXtUZShlLG9bK2FbMV1dKSxsLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufX0pLHRoaXMubGlzdD10aGlzLmRvbS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUxpc3RCb3gobyxpLmlkLHRoaXMucmFuZ2UpKSx0aGlzLmxpc3QuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCgpPT57dGhpcy5pbmZvJiZ0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pfSl9bW91bnQoKXt0aGlzLnVwZGF0ZVNlbCgpfXVwZGF0ZShlKXtlLnN0YXRlLmZpZWxkKHRoaXMuc3RhdGVGaWVsZCkhPWUuc3RhcnRTdGF0ZS5maWVsZCh0aGlzLnN0YXRlRmllbGQpJiZ0aGlzLnVwZGF0ZVNlbCgpfXBvc2l0aW9uZWQoKXt0aGlzLmluZm8mJnRoaXMudmlldy5yZXF1ZXN0TWVhc3VyZSh0aGlzLnBsYWNlSW5mbyl9dXBkYXRlU2VsKCl7bGV0IGU9dGhpcy52aWV3LnN0YXRlLmZpZWxkKHRoaXMuc3RhdGVGaWVsZCksdD1lLm9wZW47aWYoKHQuc2VsZWN0ZWQ+LTEmJnQuc2VsZWN0ZWQ8dGhpcy5yYW5nZS5mcm9tfHx0LnNlbGVjdGVkPj10aGlzLnJhbmdlLnRvKSYmKHRoaXMucmFuZ2U9cGUodC5vcHRpb25zLmxlbmd0aCx0LnNlbGVjdGVkLHRoaXMudmlldy5zdGF0ZS5mYWNldCh4KS5tYXhSZW5kZXJlZE9wdGlvbnMpLHRoaXMubGlzdC5yZW1vdmUoKSx0aGlzLmxpc3Q9dGhpcy5kb20uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVMaXN0Qm94KHQub3B0aW9ucyxlLmlkLHRoaXMucmFuZ2UpKSx0aGlzLmxpc3QuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCgpPT57dGhpcy5pbmZvJiZ0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pfSkpLHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24odC5zZWxlY3RlZCkpe3RoaXMuaW5mbyYmKHRoaXMuaW5mby5yZW1vdmUoKSx0aGlzLmluZm89bnVsbCk7bGV0e2NvbXBsZXRpb246aX09dC5vcHRpb25zW3Quc2VsZWN0ZWRdLHtpbmZvOm99PWk7aWYoIW8pcmV0dXJuO2xldCBzPXR5cGVvZiBvPT1cInN0cmluZ1wiP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKG8pOm8oaSk7aWYoIXMpcmV0dXJuO1widGhlblwiaW4gcz9zLnRoZW4ocj0+e3ImJnRoaXMudmlldy5zdGF0ZS5maWVsZCh0aGlzLnN0YXRlRmllbGQsITEpPT1lJiZ0aGlzLmFkZEluZm9QYW5lKHIpfSkuY2F0Y2gocj0+Wih0aGlzLnZpZXcuc3RhdGUscixcImNvbXBsZXRpb24gaW5mb1wiKSk6dGhpcy5hZGRJbmZvUGFuZShzKX19YWRkSW5mb1BhbmUoZSl7bGV0IHQ9dGhpcy5pbmZvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dC5jbGFzc05hbWU9XCJjbS10b29sdGlwIGNtLWNvbXBsZXRpb25JbmZvXCIsdC5hcHBlbmRDaGlsZChlKSx0aGlzLmRvbS5hcHBlbmRDaGlsZCh0KSx0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pfXVwZGF0ZVNlbGVjdGVkT3B0aW9uKGUpe2xldCB0PW51bGw7Zm9yKGxldCBpPXRoaXMubGlzdC5maXJzdENoaWxkLG89dGhpcy5yYW5nZS5mcm9tO2k7aT1pLm5leHRTaWJsaW5nLG8rKylvPT1lP2kuaGFzQXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiKXx8KGkuc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLFwidHJ1ZVwiKSx0PWkpOmkuaGFzQXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiKSYmaS5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIpO3JldHVybiB0JiZudCh0aGlzLmxpc3QsdCksdH1tZWFzdXJlSW5mbygpe2xldCBlPXRoaXMuZG9tLnF1ZXJ5U2VsZWN0b3IoXCJbYXJpYS1zZWxlY3RlZF1cIik7aWYoIWV8fCF0aGlzLmluZm8pcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5kb20ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93LGk9dGhpcy5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10aGlzLmluZm8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHMudG9wPk1hdGgubWluKHQuaW5uZXJIZWlnaHQsaS5ib3R0b20pLTEwfHxzLmJvdHRvbTxNYXRoLm1heCgwLGkudG9wKSsxMClyZXR1cm4gbnVsbDtsZXQgcj10aGlzLnZpZXcudGV4dERpcmVjdGlvbj09VmUuUlRMLGw9cixjPSExLGEsZj1cIlwiLHU9XCJcIixDPWkubGVmdCxiPXQuaW5uZXJXaWR0aC1pLnJpZ2h0O2lmKGwmJkM8TWF0aC5taW4oby53aWR0aCxiKT9sPSExOiFsJiZiPE1hdGgubWluKG8ud2lkdGgsQykmJihsPSEwKSxvLndpZHRoPD0obD9DOmIpKWY9TWF0aC5tYXgoMCxNYXRoLm1pbihzLnRvcCx0LmlubmVySGVpZ2h0LW8uaGVpZ2h0KSktaS50b3ArXCJweFwiLGE9TWF0aC5taW4oNDAwLGw/QzpiKStcInB4XCI7ZWxzZXtjPSEwLGE9TWF0aC5taW4oNDAwLChyP2kucmlnaHQ6dC5pbm5lcldpZHRoLWkubGVmdCktMzApK1wicHhcIjtsZXQgQT10LmlubmVySGVpZ2h0LWkuYm90dG9tO0E+PW8uaGVpZ2h0fHxBPmkudG9wP2Y9cy5ib3R0b20taS50b3ArXCJweFwiOnU9aS5ib3R0b20tcy50b3ArXCJweFwifXJldHVybnt0b3A6Zixib3R0b206dSxtYXhXaWR0aDphLGNsYXNzOmM/cj9cImxlZnQtbmFycm93XCI6XCJyaWdodC1uYXJyb3dcIjpsP1wibGVmdFwiOlwicmlnaHRcIn19cG9zaXRpb25JbmZvKGUpe3RoaXMuaW5mbyYmKGU/KHRoaXMuaW5mby5zdHlsZS50b3A9ZS50b3AsdGhpcy5pbmZvLnN0eWxlLmJvdHRvbT1lLmJvdHRvbSx0aGlzLmluZm8uc3R5bGUubWF4V2lkdGg9ZS5tYXhXaWR0aCx0aGlzLmluZm8uY2xhc3NOYW1lPVwiY20tdG9vbHRpcCBjbS1jb21wbGV0aW9uSW5mbyBjbS1jb21wbGV0aW9uSW5mby1cIitlLmNsYXNzKTp0aGlzLmluZm8uc3R5bGUudG9wPVwiLTFlNnB4XCIpfWNyZWF0ZUxpc3RCb3goZSx0LGkpe2xldCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiKTtvLmlkPXQsby5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJsaXN0Ym94XCIpLG8uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLFwidHJ1ZVwiKSxvLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIix0aGlzLnZpZXcuc3RhdGUucGhyYXNlKFwiQ29tcGxldGlvbnNcIikpO2ZvcihsZXQgcz1pLmZyb207czxpLnRvO3MrKyl7bGV0e2NvbXBsZXRpb246cixtYXRjaDpsfT1lW3NdLGM9by5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIikpO2MuaWQ9dCtcIi1cIitzLGMuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwib3B0aW9uXCIpO2xldCBhPXRoaXMub3B0aW9uQ2xhc3Mocik7YSYmKGMuY2xhc3NOYW1lPWEpO2ZvcihsZXQgZiBvZiB0aGlzLm9wdGlvbkNvbnRlbnQpe2xldCB1PWYocix0aGlzLnZpZXcuc3RhdGUsbCk7dSYmYy5hcHBlbmRDaGlsZCh1KX19cmV0dXJuIGkuZnJvbSYmby5jbGFzc0xpc3QuYWRkKFwiY20tY29tcGxldGlvbkxpc3RJbmNvbXBsZXRlVG9wXCIpLGkudG88ZS5sZW5ndGgmJm8uY2xhc3NMaXN0LmFkZChcImNtLWNvbXBsZXRpb25MaXN0SW5jb21wbGV0ZUJvdHRvbVwiKSxvfX07ZnVuY3Rpb24gdHQobil7cmV0dXJuIGU9Pm5ldyBlZShlLG4pfWZ1bmN0aW9uIG50KG4sZSl7bGV0IHQ9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aS50b3A8dC50b3A/bi5zY3JvbGxUb3AtPXQudG9wLWkudG9wOmkuYm90dG9tPnQuYm90dG9tJiYobi5zY3JvbGxUb3ArPWkuYm90dG9tLXQuYm90dG9tKX1mdW5jdGlvbiBkZShuKXtyZXR1cm4obi5ib29zdHx8MCkqMTAwKyhuLmFwcGx5PzEwOjApKyhuLmluZm8/NTowKSsobi50eXBlPzE6MCl9ZnVuY3Rpb24gaXQobixlKXtsZXQgdD1bXSxpPTA7Zm9yKGxldCBsIG9mIG4paWYobC5oYXNSZXN1bHQoKSlpZihsLnJlc3VsdC5maWx0ZXI9PT0hMSl7bGV0IGM9bC5yZXN1bHQuZ2V0TWF0Y2g7Zm9yKGxldCBhIG9mIGwucmVzdWx0Lm9wdGlvbnMpe2xldCBmPVsxZTktaSsrXTtpZihjKWZvcihsZXQgdSBvZiBjKGEpKWYucHVzaCh1KTt0LnB1c2gobmV3IE4oYSxsLGYpKX19ZWxzZXtsZXQgYz1uZXcgXyhlLnNsaWNlRG9jKGwuZnJvbSxsLnRvKSksYTtmb3IobGV0IGYgb2YgbC5yZXN1bHQub3B0aW9ucykoYT1jLm1hdGNoKGYubGFiZWwpKSYmKGYuYm9vc3QhPW51bGwmJihhWzBdKz1mLmJvb3N0KSx0LnB1c2gobmV3IE4oZixsLGEpKSl9bGV0IG89W10scz1udWxsLHI9ZS5mYWNldCh4KS5jb21wYXJlQ29tcGxldGlvbnM7Zm9yKGxldCBsIG9mIHQuc29ydCgoYyxhKT0+YS5tYXRjaFswXS1jLm1hdGNoWzBdfHxyKGMuY29tcGxldGlvbixhLmNvbXBsZXRpb24pKSkhc3x8cy5sYWJlbCE9bC5jb21wbGV0aW9uLmxhYmVsfHxzLmRldGFpbCE9bC5jb21wbGV0aW9uLmRldGFpbHx8cy50eXBlIT1udWxsJiZsLmNvbXBsZXRpb24udHlwZSE9bnVsbCYmcy50eXBlIT1sLmNvbXBsZXRpb24udHlwZXx8cy5hcHBseSE9bC5jb21wbGV0aW9uLmFwcGx5P28ucHVzaChsKTpkZShsLmNvbXBsZXRpb24pPmRlKHMpJiYob1tvLmxlbmd0aC0xXT1sKSxzPWwuY29tcGxldGlvbjtyZXR1cm4gb312YXIgUD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsaSxvLHMpe3RoaXMub3B0aW9ucz1lLHRoaXMuYXR0cnM9dCx0aGlzLnRvb2x0aXA9aSx0aGlzLnRpbWVzdGFtcD1vLHRoaXMuc2VsZWN0ZWQ9c31zZXRTZWxlY3RlZChlLHQpe3JldHVybiBlPT10aGlzLnNlbGVjdGVkfHxlPj10aGlzLm9wdGlvbnMubGVuZ3RoP3RoaXM6bmV3IFAodGhpcy5vcHRpb25zLG1lKHQsZSksdGhpcy50b29sdGlwLHRoaXMudGltZXN0YW1wLGUpfXN0YXRpYyBidWlsZChlLHQsaSxvLHMpe2xldCByPWl0KGUsdCk7aWYoIXIubGVuZ3RoKXJldHVybiBudWxsO2xldCBsPXQuZmFjZXQoeCkuc2VsZWN0T25PcGVuPzA6LTE7aWYobyYmby5zZWxlY3RlZCE9bCYmby5zZWxlY3RlZCE9LTEpe2xldCBjPW8ub3B0aW9uc1tvLnNlbGVjdGVkXS5jb21wbGV0aW9uO2ZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKWlmKHJbYV0uY29tcGxldGlvbj09Yyl7bD1hO2JyZWFrfX1yZXR1cm4gbmV3IFAocixtZShpLGwpLHtwb3M6ZS5yZWR1Y2UoKGMsYSk9PmEuaGFzUmVzdWx0KCk/TWF0aC5taW4oYyxhLmZyb20pOmMsMWU4KSxjcmVhdGU6dHQoZCksYWJvdmU6cy5hYm92ZUN1cnNvcn0sbz9vLnRpbWVzdGFtcDpEYXRlLm5vdygpLGwpfW1hcChlKXtyZXR1cm4gbmV3IFAodGhpcy5vcHRpb25zLHRoaXMuYXR0cnMsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMudG9vbHRpcCkse3BvczplLm1hcFBvcyh0aGlzLnRvb2x0aXAucG9zKX0pLHRoaXMudGltZXN0YW1wLHRoaXMuc2VsZWN0ZWQpfX0sTT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsaSl7dGhpcy5hY3RpdmU9ZSx0aGlzLmlkPXQsdGhpcy5vcGVuPWl9c3RhdGljIHN0YXJ0KCl7cmV0dXJuIG5ldyBNKGx0LFwiY20tYWMtXCIrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjJlNikudG9TdHJpbmcoMzYpLG51bGwpfXVwZGF0ZShlKXtsZXR7c3RhdGU6dH09ZSxpPXQuZmFjZXQoeCkscz0oaS5vdmVycmlkZXx8dC5sYW5ndWFnZURhdGFBdChcImF1dG9jb21wbGV0ZVwiLEkodCkpLm1hcChaZSkpLm1hcChsPT4odGhpcy5hY3RpdmUuZmluZChhPT5hLnNvdXJjZT09bCl8fG5ldyBwKGwsdGhpcy5hY3RpdmUuc29tZShhPT5hLnN0YXRlIT0wKT8xOjApKS51cGRhdGUoZSxpKSk7cy5sZW5ndGg9PXRoaXMuYWN0aXZlLmxlbmd0aCYmcy5ldmVyeSgobCxjKT0+bD09dGhpcy5hY3RpdmVbY10pJiYocz10aGlzLmFjdGl2ZSk7bGV0IHI9ZS5zZWxlY3Rpb258fHMuc29tZShsPT5sLmhhc1Jlc3VsdCgpJiZlLmNoYW5nZXMudG91Y2hlc1JhbmdlKGwuZnJvbSxsLnRvKSl8fCFvdChzLHRoaXMuYWN0aXZlKT9QLmJ1aWxkKHMsdCx0aGlzLmlkLHRoaXMub3BlbixpKTp0aGlzLm9wZW4mJmUuZG9jQ2hhbmdlZD90aGlzLm9wZW4ubWFwKGUuY2hhbmdlcyk6dGhpcy5vcGVuOyFyJiZzLmV2ZXJ5KGw9Pmwuc3RhdGUhPTEpJiZzLnNvbWUobD0+bC5oYXNSZXN1bHQoKSkmJihzPXMubWFwKGw9PmwuaGFzUmVzdWx0KCk/bmV3IHAobC5zb3VyY2UsMCk6bCkpO2ZvcihsZXQgbCBvZiBlLmVmZmVjdHMpbC5pcyhsZSkmJihyPXImJnIuc2V0U2VsZWN0ZWQobC52YWx1ZSx0aGlzLmlkKSk7cmV0dXJuIHM9PXRoaXMuYWN0aXZlJiZyPT10aGlzLm9wZW4/dGhpczpuZXcgTShzLHRoaXMuaWQscil9Z2V0IHRvb2x0aXAoKXtyZXR1cm4gdGhpcy5vcGVuP3RoaXMub3Blbi50b29sdGlwOm51bGx9Z2V0IGF0dHJzKCl7cmV0dXJuIHRoaXMub3Blbj90aGlzLm9wZW4uYXR0cnM6c3R9fTtmdW5jdGlvbiBvdChuLGUpe2lmKG49PWUpcmV0dXJuITA7Zm9yKGxldCB0PTAsaT0wOzspe2Zvcig7dDxuLmxlbmd0aCYmIW5bdF0uaGFzUmVzdWx0Oyl0Kys7Zm9yKDtpPGUubGVuZ3RoJiYhZVtpXS5oYXNSZXN1bHQ7KWkrKztsZXQgbz10PT1uLmxlbmd0aCxzPWk9PWUubGVuZ3RoO2lmKG98fHMpcmV0dXJuIG89PXM7aWYoblt0KytdLnJlc3VsdCE9ZVtpKytdLnJlc3VsdClyZXR1cm4hMX19dmFyIHN0PXtcImFyaWEtYXV0b2NvbXBsZXRlXCI6XCJsaXN0XCJ9O2Z1bmN0aW9uIG1lKG4sZSl7bGV0IHQ9e1wiYXJpYS1hdXRvY29tcGxldGVcIjpcImxpc3RcIixcImFyaWEtaGFzcG9wdXBcIjpcImxpc3Rib3hcIixcImFyaWEtY29udHJvbHNcIjpufTtyZXR1cm4gZT4tMSYmKHRbXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIl09bitcIi1cIitlKSx0fXZhciBsdD1bXTtmdW5jdGlvbiB0ZShuKXtyZXR1cm4gbi5pc1VzZXJFdmVudChcImlucHV0LnR5cGVcIik/XCJpbnB1dFwiOm4uaXNVc2VyRXZlbnQoXCJkZWxldGUuYmFja3dhcmRcIik/XCJkZWxldGVcIjpudWxsfXZhciBwPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxpPS0xKXt0aGlzLnNvdXJjZT1lLHRoaXMuc3RhdGU9dCx0aGlzLmV4cGxpY2l0UG9zPWl9aGFzUmVzdWx0KCl7cmV0dXJuITF9dXBkYXRlKGUsdCl7bGV0IGk9dGUoZSksbz10aGlzO2k/bz1vLmhhbmRsZVVzZXJFdmVudChlLGksdCk6ZS5kb2NDaGFuZ2VkP289by5oYW5kbGVDaGFuZ2UoZSk6ZS5zZWxlY3Rpb24mJm8uc3RhdGUhPTAmJihvPW5ldyBwKG8uc291cmNlLDApKTtmb3IobGV0IHMgb2YgZS5lZmZlY3RzKWlmKHMuaXMoc2UpKW89bmV3IHAoby5zb3VyY2UsMSxzLnZhbHVlP0koZS5zdGF0ZSk6LTEpO2Vsc2UgaWYocy5pcyhIKSlvPW5ldyBwKG8uc291cmNlLDApO2Vsc2UgaWYocy5pcyhNZSkpZm9yKGxldCByIG9mIHMudmFsdWUpci5zb3VyY2U9PW8uc291cmNlJiYobz1yKTtyZXR1cm4gb31oYW5kbGVVc2VyRXZlbnQoZSx0LGkpe3JldHVybiB0PT1cImRlbGV0ZVwifHwhaS5hY3RpdmF0ZU9uVHlwaW5nP3RoaXMubWFwKGUuY2hhbmdlcyk6bmV3IHAodGhpcy5zb3VyY2UsMSl9aGFuZGxlQ2hhbmdlKGUpe3JldHVybiBlLmNoYW5nZXMudG91Y2hlc1JhbmdlKEkoZS5zdGFydFN0YXRlKSk/bmV3IHAodGhpcy5zb3VyY2UsMCk6dGhpcy5tYXAoZS5jaGFuZ2VzKX1tYXAoZSl7cmV0dXJuIGUuZW1wdHl8fHRoaXMuZXhwbGljaXRQb3M8MD90aGlzOm5ldyBwKHRoaXMuc291cmNlLHRoaXMuc3RhdGUsZS5tYXBQb3ModGhpcy5leHBsaWNpdFBvcykpfX0sTz1jbGFzcyBleHRlbmRzIHB7Y29uc3RydWN0b3IoZSx0LGksbyxzKXtzdXBlcihlLDIsdCksdGhpcy5yZXN1bHQ9aSx0aGlzLmZyb209byx0aGlzLnRvPXN9aGFzUmVzdWx0KCl7cmV0dXJuITB9aGFuZGxlVXNlckV2ZW50KGUsdCxpKXt2YXIgbztsZXQgcz1lLmNoYW5nZXMubWFwUG9zKHRoaXMuZnJvbSkscj1lLmNoYW5nZXMubWFwUG9zKHRoaXMudG8sMSksbD1JKGUuc3RhdGUpO2lmKCh0aGlzLmV4cGxpY2l0UG9zPDA/bDw9czpsPHRoaXMuZnJvbSl8fGw+cnx8dD09XCJkZWxldGVcIiYmSShlLnN0YXJ0U3RhdGUpPT10aGlzLmZyb20pcmV0dXJuIG5ldyBwKHRoaXMuc291cmNlLHQ9PVwiaW5wdXRcIiYmaS5hY3RpdmF0ZU9uVHlwaW5nPzE6MCk7bGV0IGM9dGhpcy5leHBsaWNpdFBvczwwPy0xOmUuY2hhbmdlcy5tYXBQb3ModGhpcy5leHBsaWNpdFBvcyksYTtyZXR1cm4gcnQodGhpcy5yZXN1bHQudmFsaWRGb3IsZS5zdGF0ZSxzLHIpP25ldyBPKHRoaXMuc291cmNlLGMsdGhpcy5yZXN1bHQscyxyKTp0aGlzLnJlc3VsdC51cGRhdGUmJihhPXRoaXMucmVzdWx0LnVwZGF0ZSh0aGlzLnJlc3VsdCxzLHIsbmV3IEYoZS5zdGF0ZSxsLGM+PTApKSk/bmV3IE8odGhpcy5zb3VyY2UsYyxhLGEuZnJvbSwobz1hLnRvKSE9PW51bGwmJm8hPT12b2lkIDA/bzpJKGUuc3RhdGUpKTpuZXcgcCh0aGlzLnNvdXJjZSwxLGMpfWhhbmRsZUNoYW5nZShlKXtyZXR1cm4gZS5jaGFuZ2VzLnRvdWNoZXNSYW5nZSh0aGlzLmZyb20sdGhpcy50byk/bmV3IHAodGhpcy5zb3VyY2UsMCk6dGhpcy5tYXAoZS5jaGFuZ2VzKX1tYXAoZSl7cmV0dXJuIGUuZW1wdHk/dGhpczpuZXcgTyh0aGlzLnNvdXJjZSx0aGlzLmV4cGxpY2l0UG9zPDA/LTE6ZS5tYXBQb3ModGhpcy5leHBsaWNpdFBvcyksdGhpcy5yZXN1bHQsZS5tYXBQb3ModGhpcy5mcm9tKSxlLm1hcFBvcyh0aGlzLnRvLDEpKX19O2Z1bmN0aW9uIHJ0KG4sZSx0LGkpe2lmKCFuKXJldHVybiExO2xldCBvPWUuc2xpY2VEb2ModCxpKTtyZXR1cm4gdHlwZW9mIG49PVwiZnVuY3Rpb25cIj9uKG8sdCxpLGUpOkFlKG4sITApLnRlc3Qobyl9dmFyIHNlPXYuZGVmaW5lKCksSD12LmRlZmluZSgpLE1lPXYuZGVmaW5lKHttYXAobixlKXtyZXR1cm4gbi5tYXAodD0+dC5tYXAoZSkpfX0pLGxlPXYuZGVmaW5lKCksZD1vZS5kZWZpbmUoe2NyZWF0ZSgpe3JldHVybiBNLnN0YXJ0KCl9LHVwZGF0ZShuLGUpe3JldHVybiBuLnVwZGF0ZShlKX0scHJvdmlkZTpuPT5bcWUuZnJvbShuLGU9PmUudG9vbHRpcCksay5jb250ZW50QXR0cmlidXRlcy5mcm9tKG4sZT0+ZS5hdHRycyldfSk7ZnVuY3Rpb24gVShuLGU9XCJvcHRpb25cIil7cmV0dXJuIHQ9PntsZXQgaT10LnN0YXRlLmZpZWxkKGQsITEpO2lmKCFpfHwhaS5vcGVufHxEYXRlLm5vdygpLWkub3Blbi50aW1lc3RhbXA8dC5zdGF0ZS5mYWNldCh4KS5pbnRlcmFjdGlvbkRlbGF5KXJldHVybiExO2xldCBvPTEscztlPT1cInBhZ2VcIiYmKHM9emUodCxpLm9wZW4udG9vbHRpcCkpJiYobz1NYXRoLm1heCgyLE1hdGguZmxvb3Iocy5kb20ub2Zmc2V0SGVpZ2h0L3MuZG9tLnF1ZXJ5U2VsZWN0b3IoXCJsaVwiKS5vZmZzZXRIZWlnaHQpLTEpKTtsZXR7bGVuZ3RoOnJ9PWkub3Blbi5vcHRpb25zLGw9aS5vcGVuLnNlbGVjdGVkPi0xP2kub3Blbi5zZWxlY3RlZCtvKihuPzE6LTEpOm4/MDpyLTE7cmV0dXJuIGw8MD9sPWU9PVwicGFnZVwiPzA6ci0xOmw+PXImJihsPWU9PVwicGFnZVwiP3ItMTowKSx0LmRpc3BhdGNoKHtlZmZlY3RzOmxlLm9mKGwpfSksITB9fXZhciBjdD1uPT57bGV0IGU9bi5zdGF0ZS5maWVsZChkLCExKTtyZXR1cm4gbi5zdGF0ZS5yZWFkT25seXx8IWV8fCFlLm9wZW58fGUub3Blbi5zZWxlY3RlZDwwfHxEYXRlLm5vdygpLWUub3Blbi50aW1lc3RhbXA8bi5zdGF0ZS5mYWNldCh4KS5pbnRlcmFjdGlvbkRlbGF5PyExOihUZShuLGUub3Blbi5vcHRpb25zW2Uub3Blbi5zZWxlY3RlZF0pLCEwKX0sYXQ9bj0+bi5zdGF0ZS5maWVsZChkLCExKT8obi5kaXNwYXRjaCh7ZWZmZWN0czpzZS5vZighMCl9KSwhMCk6ITEsZnQ9bj0+e2xldCBlPW4uc3RhdGUuZmllbGQoZCwhMSk7cmV0dXJuIWV8fCFlLmFjdGl2ZS5zb21lKHQ9PnQuc3RhdGUhPTApPyExOihuLmRpc3BhdGNoKHtlZmZlY3RzOkgub2YobnVsbCl9KSwhMCl9LG5lPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5hY3RpdmU9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnRpbWU9RGF0ZS5ub3coKSx0aGlzLnVwZGF0ZXM9W10sdGhpcy5kb25lPXZvaWQgMH19LGdlPTUwLHV0PTUwLGh0PTFlMyxwdD1LZS5mcm9tQ2xhc3MoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy52aWV3PW4sdGhpcy5kZWJvdW5jZVVwZGF0ZT0tMSx0aGlzLnJ1bm5pbmc9W10sdGhpcy5kZWJvdW5jZUFjY2VwdD0tMSx0aGlzLmNvbXBvc2luZz0wO2ZvcihsZXQgZSBvZiBuLnN0YXRlLmZpZWxkKGQpLmFjdGl2ZSllLnN0YXRlPT0xJiZ0aGlzLnN0YXJ0UXVlcnkoZSl9dXBkYXRlKG4pe2xldCBlPW4uc3RhdGUuZmllbGQoZCk7aWYoIW4uc2VsZWN0aW9uU2V0JiYhbi5kb2NDaGFuZ2VkJiZuLnN0YXJ0U3RhdGUuZmllbGQoZCk9PWUpcmV0dXJuO2xldCB0PW4udHJhbnNhY3Rpb25zLnNvbWUoaT0+KGkuc2VsZWN0aW9ufHxpLmRvY0NoYW5nZWQpJiYhdGUoaSkpO2ZvcihsZXQgaT0wO2k8dGhpcy5ydW5uaW5nLmxlbmd0aDtpKyspe2xldCBvPXRoaXMucnVubmluZ1tpXTtpZih0fHxvLnVwZGF0ZXMubGVuZ3RoK24udHJhbnNhY3Rpb25zLmxlbmd0aD51dCYmRGF0ZS5ub3coKS1vLnRpbWU+aHQpe2ZvcihsZXQgcyBvZiBvLmNvbnRleHQuYWJvcnRMaXN0ZW5lcnMpdHJ5e3MoKX1jYXRjaChyKXtaKHRoaXMudmlldy5zdGF0ZSxyKX1vLmNvbnRleHQuYWJvcnRMaXN0ZW5lcnM9bnVsbCx0aGlzLnJ1bm5pbmcuc3BsaWNlKGktLSwxKX1lbHNlIG8udXBkYXRlcy5wdXNoKC4uLm4udHJhbnNhY3Rpb25zKX1pZih0aGlzLmRlYm91bmNlVXBkYXRlPi0xJiZjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVVwZGF0ZSksdGhpcy5kZWJvdW5jZVVwZGF0ZT1lLmFjdGl2ZS5zb21lKGk9Pmkuc3RhdGU9PTEmJiF0aGlzLnJ1bm5pbmcuc29tZShvPT5vLmFjdGl2ZS5zb3VyY2U9PWkuc291cmNlKSk/c2V0VGltZW91dCgoKT0+dGhpcy5zdGFydFVwZGF0ZSgpLGdlKTotMSx0aGlzLmNvbXBvc2luZyE9MClmb3IobGV0IGkgb2Ygbi50cmFuc2FjdGlvbnMpdGUoaSk9PVwiaW5wdXRcIj90aGlzLmNvbXBvc2luZz0yOnRoaXMuY29tcG9zaW5nPT0yJiZpLnNlbGVjdGlvbiYmKHRoaXMuY29tcG9zaW5nPTMpfXN0YXJ0VXBkYXRlKCl7dGhpcy5kZWJvdW5jZVVwZGF0ZT0tMTtsZXR7c3RhdGU6bn09dGhpcy52aWV3LGU9bi5maWVsZChkKTtmb3IobGV0IHQgb2YgZS5hY3RpdmUpdC5zdGF0ZT09MSYmIXRoaXMucnVubmluZy5zb21lKGk9PmkuYWN0aXZlLnNvdXJjZT09dC5zb3VyY2UpJiZ0aGlzLnN0YXJ0UXVlcnkodCl9c3RhcnRRdWVyeShuKXtsZXR7c3RhdGU6ZX09dGhpcy52aWV3LHQ9SShlKSxpPW5ldyBGKGUsdCxuLmV4cGxpY2l0UG9zPT10KSxvPW5ldyBuZShuLGkpO3RoaXMucnVubmluZy5wdXNoKG8pLFByb21pc2UucmVzb2x2ZShuLnNvdXJjZShpKSkudGhlbihzPT57by5jb250ZXh0LmFib3J0ZWR8fChvLmRvbmU9c3x8bnVsbCx0aGlzLnNjaGVkdWxlQWNjZXB0KCkpfSxzPT57dGhpcy52aWV3LmRpc3BhdGNoKHtlZmZlY3RzOkgub2YobnVsbCl9KSxaKHRoaXMudmlldy5zdGF0ZSxzKX0pfXNjaGVkdWxlQWNjZXB0KCl7dGhpcy5ydW5uaW5nLmV2ZXJ5KG49Pm4uZG9uZSE9PXZvaWQgMCk/dGhpcy5hY2NlcHQoKTp0aGlzLmRlYm91bmNlQWNjZXB0PDAmJih0aGlzLmRlYm91bmNlQWNjZXB0PXNldFRpbWVvdXQoKCk9PnRoaXMuYWNjZXB0KCksZ2UpKX1hY2NlcHQoKXt2YXIgbjt0aGlzLmRlYm91bmNlQWNjZXB0Pi0xJiZjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZUFjY2VwdCksdGhpcy5kZWJvdW5jZUFjY2VwdD0tMTtsZXQgZT1bXSx0PXRoaXMudmlldy5zdGF0ZS5mYWNldCh4KTtmb3IobGV0IGk9MDtpPHRoaXMucnVubmluZy5sZW5ndGg7aSsrKXtsZXQgbz10aGlzLnJ1bm5pbmdbaV07aWYoby5kb25lPT09dm9pZCAwKWNvbnRpbnVlO2lmKHRoaXMucnVubmluZy5zcGxpY2UoaS0tLDEpLG8uZG9uZSl7bGV0IHI9bmV3IE8oby5hY3RpdmUuc291cmNlLG8uYWN0aXZlLmV4cGxpY2l0UG9zLG8uZG9uZSxvLmRvbmUuZnJvbSwobj1vLmRvbmUudG8pIT09bnVsbCYmbiE9PXZvaWQgMD9uOkkoby51cGRhdGVzLmxlbmd0aD9vLnVwZGF0ZXNbMF0uc3RhcnRTdGF0ZTp0aGlzLnZpZXcuc3RhdGUpKTtmb3IobGV0IGwgb2Ygby51cGRhdGVzKXI9ci51cGRhdGUobCx0KTtpZihyLmhhc1Jlc3VsdCgpKXtlLnB1c2gocik7Y29udGludWV9fWxldCBzPXRoaXMudmlldy5zdGF0ZS5maWVsZChkKS5hY3RpdmUuZmluZChyPT5yLnNvdXJjZT09by5hY3RpdmUuc291cmNlKTtpZihzJiZzLnN0YXRlPT0xKWlmKG8uZG9uZT09bnVsbCl7bGV0IHI9bmV3IHAoby5hY3RpdmUuc291cmNlLDApO2ZvcihsZXQgbCBvZiBvLnVwZGF0ZXMpcj1yLnVwZGF0ZShsLHQpO3Iuc3RhdGUhPTEmJmUucHVzaChyKX1lbHNlIHRoaXMuc3RhcnRRdWVyeShzKX1lLmxlbmd0aCYmdGhpcy52aWV3LmRpc3BhdGNoKHtlZmZlY3RzOk1lLm9mKGUpfSl9fSx7ZXZlbnRIYW5kbGVyczp7Ymx1cigpe2xldCBuPXRoaXMudmlldy5zdGF0ZS5maWVsZChkLCExKTtuJiZuLnRvb2x0aXAmJnRoaXMudmlldy5zdGF0ZS5mYWNldCh4KS5jbG9zZU9uQmx1ciYmdGhpcy52aWV3LmRpc3BhdGNoKHtlZmZlY3RzOkgub2YobnVsbCl9KX0sY29tcG9zaXRpb25zdGFydCgpe3RoaXMuY29tcG9zaW5nPTF9LGNvbXBvc2l0aW9uZW5kKCl7dGhpcy5jb21wb3Npbmc9PTMmJnNldFRpbWVvdXQoKCk9PnRoaXMudmlldy5kaXNwYXRjaCh7ZWZmZWN0czpzZS5vZighMSl9KSwyMCksdGhpcy5jb21wb3Npbmc9MH19fSksUmU9ay5iYXNlVGhlbWUoe1wiLmNtLXRvb2x0aXAuY20tdG9vbHRpcC1hdXRvY29tcGxldGVcIjp7XCImID4gdWxcIjp7Zm9udEZhbWlseTpcIm1vbm9zcGFjZVwiLHdoaXRlU3BhY2U6XCJub3dyYXBcIixvdmVyZmxvdzpcImhpZGRlbiBhdXRvXCIsbWF4V2lkdGhfZmFsbGJhY2s6XCI3MDBweFwiLG1heFdpZHRoOlwibWluKDcwMHB4LCA5NXZ3KVwiLG1pbldpZHRoOlwiMjUwcHhcIixtYXhIZWlnaHQ6XCIxMGVtXCIsbGlzdFN0eWxlOlwibm9uZVwiLG1hcmdpbjowLHBhZGRpbmc6MCxcIiYgPiBsaVwiOntvdmVyZmxvd1g6XCJoaWRkZW5cIix0ZXh0T3ZlcmZsb3c6XCJlbGxpcHNpc1wiLGN1cnNvcjpcInBvaW50ZXJcIixwYWRkaW5nOlwiMXB4IDNweFwiLGxpbmVIZWlnaHQ6MS4yfX19LFwiJmxpZ2h0IC5jbS10b29sdGlwLWF1dG9jb21wbGV0ZSB1bCBsaVthcmlhLXNlbGVjdGVkXVwiOntiYWNrZ3JvdW5kOlwiIzE3Y1wiLGNvbG9yOlwid2hpdGVcIn0sXCImZGFyayAuY20tdG9vbHRpcC1hdXRvY29tcGxldGUgdWwgbGlbYXJpYS1zZWxlY3RlZF1cIjp7YmFja2dyb3VuZDpcIiMzNDdcIixjb2xvcjpcIndoaXRlXCJ9LFwiLmNtLWNvbXBsZXRpb25MaXN0SW5jb21wbGV0ZVRvcDpiZWZvcmUsIC5jbS1jb21wbGV0aW9uTGlzdEluY29tcGxldGVCb3R0b206YWZ0ZXJcIjp7Y29udGVudDonXCJcXHhCN1xceEI3XFx4QjdcIicsb3BhY2l0eTouNSxkaXNwbGF5OlwiYmxvY2tcIix0ZXh0QWxpZ246XCJjZW50ZXJcIn0sXCIuY20tdG9vbHRpcC5jbS1jb21wbGV0aW9uSW5mb1wiOntwb3NpdGlvbjpcImFic29sdXRlXCIscGFkZGluZzpcIjNweCA5cHhcIix3aWR0aDpcIm1heC1jb250ZW50XCIsbWF4V2lkdGg6YCR7NDAwfXB4YCxib3hTaXppbmc6XCJib3JkZXItYm94XCJ9LFwiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLWxlZnRcIjp7cmlnaHQ6XCIxMDAlXCJ9LFwiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLXJpZ2h0XCI6e2xlZnQ6XCIxMDAlXCJ9LFwiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLWxlZnQtbmFycm93XCI6e3JpZ2h0OmAkezMwfXB4YH0sXCIuY20tY29tcGxldGlvbkluZm8uY20tY29tcGxldGlvbkluZm8tcmlnaHQtbmFycm93XCI6e2xlZnQ6YCR7MzB9cHhgfSxcIiZsaWdodCAuY20tc25pcHBldEZpZWxkXCI6e2JhY2tncm91bmRDb2xvcjpcIiMwMDAwMDAyMlwifSxcIiZkYXJrIC5jbS1zbmlwcGV0RmllbGRcIjp7YmFja2dyb3VuZENvbG9yOlwiI2ZmZmZmZjIyXCJ9LFwiLmNtLXNuaXBwZXRGaWVsZFBvc2l0aW9uXCI6e3ZlcnRpY2FsQWxpZ246XCJ0ZXh0LXRvcFwiLHdpZHRoOjAsaGVpZ2h0OlwiMS4xNWVtXCIsZGlzcGxheTpcImlubGluZS1ibG9ja1wiLG1hcmdpbjpcIjAgLTAuN3B4IC0uN2VtXCIsYm9yZGVyTGVmdDpcIjEuNHB4IGRvdHRlZCAjODg4XCJ9LFwiLmNtLWNvbXBsZXRpb25NYXRjaGVkVGV4dFwiOnt0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwifSxcIi5jbS1jb21wbGV0aW9uRGV0YWlsXCI6e21hcmdpbkxlZnQ6XCIwLjVlbVwiLGZvbnRTdHlsZTpcIml0YWxpY1wifSxcIi5jbS1jb21wbGV0aW9uSWNvblwiOntmb250U2l6ZTpcIjkwJVwiLHdpZHRoOlwiLjhlbVwiLGRpc3BsYXk6XCJpbmxpbmUtYmxvY2tcIix0ZXh0QWxpZ246XCJjZW50ZXJcIixwYWRkaW5nUmlnaHQ6XCIuNmVtXCIsb3BhY2l0eTpcIjAuNlwifSxcIi5jbS1jb21wbGV0aW9uSWNvbi1mdW5jdGlvbiwgLmNtLWNvbXBsZXRpb25JY29uLW1ldGhvZFwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHUwMTkyJ1wifX0sXCIuY20tY29tcGxldGlvbkljb24tY2xhc3NcIjp7XCImOmFmdGVyXCI6e2NvbnRlbnQ6XCInXFx1MjVDQidcIn19LFwiLmNtLWNvbXBsZXRpb25JY29uLWludGVyZmFjZVwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHUyNUNDJ1wifX0sXCIuY20tY29tcGxldGlvbkljb24tdmFyaWFibGVcIjp7XCImOmFmdGVyXCI6e2NvbnRlbnQ6XCInXFx1ezFENDY1fSdcIn19LFwiLmNtLWNvbXBsZXRpb25JY29uLWNvbnN0YW50XCI6e1wiJjphZnRlclwiOntjb250ZW50OlwiJ1xcdXsxRDQzNn0nXCJ9fSxcIi5jbS1jb21wbGV0aW9uSWNvbi10eXBlXCI6e1wiJjphZnRlclwiOntjb250ZW50OlwiJ1xcdXsxRDQ2MX0nXCJ9fSxcIi5jbS1jb21wbGV0aW9uSWNvbi1lbnVtXCI6e1wiJjphZnRlclwiOntjb250ZW50OlwiJ1xcdTIyMkEnXCJ9fSxcIi5jbS1jb21wbGV0aW9uSWNvbi1wcm9wZXJ0eVwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHUyNUExJ1wifX0sXCIuY20tY29tcGxldGlvbkljb24ta2V5d29yZFwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHV7MUY1MTF9XFx1RkUwRSdcIn19LFwiLmNtLWNvbXBsZXRpb25JY29uLW5hbWVzcGFjZVwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHUyNUEyJ1wifX0sXCIuY20tY29tcGxldGlvbkljb24tdGV4dFwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidhYmMnXCIsZm9udFNpemU6XCI1MCVcIix2ZXJ0aWNhbEFsaWduOlwibWlkZGxlXCJ9fX0pLGllPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxpLG8pe3RoaXMuZmllbGQ9ZSx0aGlzLmxpbmU9dCx0aGlzLmZyb209aSx0aGlzLnRvPW99fSxSPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLmZpZWxkPWUsdGhpcy5mcm9tPXQsdGhpcy50bz1pfW1hcChlKXtsZXQgdD1lLm1hcFBvcyh0aGlzLmZyb20sLTEsRy5UcmFja0RlbCksaT1lLm1hcFBvcyh0aGlzLnRvLDEsRy5UcmFja0RlbCk7cmV0dXJuIHQ9PW51bGx8fGk9PW51bGw/bnVsbDpuZXcgUih0aGlzLmZpZWxkLHQsaSl9fSxCPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5saW5lcz1lLHRoaXMuZmllbGRQb3NpdGlvbnM9dH1pbnN0YW50aWF0ZShlLHQpe2xldCBpPVtdLG89W3RdLHM9ZS5kb2MubGluZUF0KHQpLHI9L15cXHMqLy5leGVjKHMudGV4dClbMF07Zm9yKGxldCBjIG9mIHRoaXMubGluZXMpe2lmKGkubGVuZ3RoKXtsZXQgYT1yLGY9L15cXHQqLy5leGVjKGMpWzBdLmxlbmd0aDtmb3IobGV0IHU9MDt1PGY7dSsrKWErPWUuZmFjZXQoWGUpO28ucHVzaCh0K2EubGVuZ3RoLWYpLGM9YStjLnNsaWNlKGYpfWkucHVzaChjKSx0Kz1jLmxlbmd0aCsxfWxldCBsPXRoaXMuZmllbGRQb3NpdGlvbnMubWFwKGM9Pm5ldyBSKGMuZmllbGQsb1tjLmxpbmVdK2MuZnJvbSxvW2MubGluZV0rYy50bykpO3JldHVybnt0ZXh0OmkscmFuZ2VzOmx9fXN0YXRpYyBwYXJzZShlKXtsZXQgdD1bXSxpPVtdLG89W10scztmb3IobGV0IHIgb2YgZS5zcGxpdCgvXFxyXFxuP3xcXG4vKSl7Zm9yKDtzPS9bIyRdXFx7KD86KFxcZCspKD86OihbXn1dKikpP3woW159XSopKVxcfS8uZXhlYyhyKTspe2xldCBsPXNbMV0/K3NbMV06bnVsbCxjPXNbMl18fHNbM118fFwiXCIsYT0tMTtmb3IobGV0IGY9MDtmPHQubGVuZ3RoO2YrKykobCE9bnVsbD90W2ZdLnNlcT09bDpjP3RbZl0ubmFtZT09YzohMSkmJihhPWYpO2lmKGE8MCl7bGV0IGY9MDtmb3IoO2Y8dC5sZW5ndGgmJihsPT1udWxsfHx0W2ZdLnNlcSE9bnVsbCYmdFtmXS5zZXE8bCk7KWYrKzt0LnNwbGljZShmLDAse3NlcTpsLG5hbWU6Y30pLGE9Zjtmb3IobGV0IHUgb2Ygbyl1LmZpZWxkPj1hJiZ1LmZpZWxkKyt9by5wdXNoKG5ldyBpZShhLGkubGVuZ3RoLHMuaW5kZXgscy5pbmRleCtjLmxlbmd0aCkpLHI9ci5zbGljZSgwLHMuaW5kZXgpK2Mrci5zbGljZShzLmluZGV4K3NbMF0ubGVuZ3RoKX1mb3IobGV0IGw7bD0vKFskI10pXFxcXHsvLmV4ZWMocik7KXtyPXIuc2xpY2UoMCxsLmluZGV4KStsWzFdK1wie1wiK3Iuc2xpY2UobC5pbmRleCtsWzBdLmxlbmd0aCk7Zm9yKGxldCBjIG9mIG8pYy5saW5lPT1pLmxlbmd0aCYmYy5mcm9tPmwuaW5kZXgmJihjLmZyb20tLSxjLnRvLS0pfWkucHVzaChyKX1yZXR1cm4gbmV3IEIoaSxvKX19LGR0PVYud2lkZ2V0KHt3aWRnZXQ6bmV3IGNsYXNzIGV4dGVuZHMgUWV7dG9ET00oKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtyZXR1cm4gbi5jbGFzc05hbWU9XCJjbS1zbmlwcGV0RmllbGRQb3NpdGlvblwiLG59aWdub3JlRXZlbnQoKXtyZXR1cm4hMX19fSksbXQ9Vi5tYXJrKHtjbGFzczpcImNtLXNuaXBwZXRGaWVsZFwifSksUz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMucmFuZ2VzPWUsdGhpcy5hY3RpdmU9dCx0aGlzLmRlY289Vi5zZXQoZS5tYXAoaT0+KGkuZnJvbT09aS50bz9kdDptdCkucmFuZ2UoaS5mcm9tLGkudG8pKSl9bWFwKGUpe2xldCB0PVtdO2ZvcihsZXQgaSBvZiB0aGlzLnJhbmdlcyl7bGV0IG89aS5tYXAoZSk7aWYoIW8pcmV0dXJuIG51bGw7dC5wdXNoKG8pfXJldHVybiBuZXcgUyh0LHRoaXMuYWN0aXZlKX1zZWxlY3Rpb25JbnNpZGVGaWVsZChlKXtyZXR1cm4gZS5yYW5nZXMuZXZlcnkodD0+dGhpcy5yYW5nZXMuc29tZShpPT5pLmZpZWxkPT10aGlzLmFjdGl2ZSYmaS5mcm9tPD10LmZyb20mJmkudG8+PXQudG8pKX19LCQ9di5kZWZpbmUoe21hcChuLGUpe3JldHVybiBuJiZuLm1hcChlKX19KSxndD12LmRlZmluZSgpLEQ9b2UuZGVmaW5lKHtjcmVhdGUoKXtyZXR1cm4gbnVsbH0sdXBkYXRlKG4sZSl7Zm9yKGxldCB0IG9mIGUuZWZmZWN0cyl7aWYodC5pcygkKSlyZXR1cm4gdC52YWx1ZTtpZih0LmlzKGd0KSYmbilyZXR1cm4gbmV3IFMobi5yYW5nZXMsdC52YWx1ZSl9cmV0dXJuIG4mJmUuZG9jQ2hhbmdlZCYmKG49bi5tYXAoZS5jaGFuZ2VzKSksbiYmZS5zZWxlY3Rpb24mJiFuLnNlbGVjdGlvbkluc2lkZUZpZWxkKGUuc2VsZWN0aW9uKSYmKG49bnVsbCksbn0scHJvdmlkZTpuPT5rLmRlY29yYXRpb25zLmZyb20obixlPT5lP2UuZGVjbzpWLm5vbmUpfSk7ZnVuY3Rpb24gcmUobixlKXtyZXR1cm4gZy5jcmVhdGUobi5maWx0ZXIodD0+dC5maWVsZD09ZSkubWFwKHQ9PmcucmFuZ2UodC5mcm9tLHQudG8pKSl9ZnVuY3Rpb24gYnQobil7bGV0IGU9Qi5wYXJzZShuKTtyZXR1cm4odCxpLG8scyk9PntsZXR7dGV4dDpyLHJhbmdlczpsfT1lLmluc3RhbnRpYXRlKHQuc3RhdGUsbyksYz17Y2hhbmdlczp7ZnJvbTpvLHRvOnMsaW5zZXJ0Ok5lLm9mKHIpfSxzY3JvbGxJbnRvVmlldzohMH07aWYobC5sZW5ndGgmJihjLnNlbGVjdGlvbj1yZShsLDApKSxsLmxlbmd0aD4xKXtsZXQgYT1uZXcgUyhsLDApLGY9Yy5lZmZlY3RzPVskLm9mKGEpXTt0LnN0YXRlLmZpZWxkKEQsITEpPT09dm9pZCAwJiZmLnB1c2godi5hcHBlbmRDb25maWcub2YoW0QsQ3QsSXQsUmVdKSl9dC5kaXNwYXRjaCh0LnN0YXRlLnVwZGF0ZShjKSl9fWZ1bmN0aW9uIEJlKG4pe3JldHVybih7c3RhdGU6ZSxkaXNwYXRjaDp0fSk9PntsZXQgaT1lLmZpZWxkKEQsITEpO2lmKCFpfHxuPDAmJmkuYWN0aXZlPT0wKXJldHVybiExO2xldCBvPWkuYWN0aXZlK24scz1uPjAmJiFpLnJhbmdlcy5zb21lKHI9PnIuZmllbGQ9PW8rbik7cmV0dXJuIHQoZS51cGRhdGUoe3NlbGVjdGlvbjpyZShpLnJhbmdlcyxvKSxlZmZlY3RzOiQub2Yocz9udWxsOm5ldyBTKGkucmFuZ2VzLG8pKX0pKSwhMH19dmFyIHh0PSh7c3RhdGU6bixkaXNwYXRjaDplfSk9Pm4uZmllbGQoRCwhMSk/KGUobi51cGRhdGUoe2VmZmVjdHM6JC5vZihudWxsKX0pKSwhMCk6ITEseXQ9QmUoMSksd3Q9QmUoLTEpLHZ0PVt7a2V5OlwiVGFiXCIscnVuOnl0LHNoaWZ0Ond0fSx7a2V5OlwiRXNjYXBlXCIscnVuOnh0fV0sYmU9RWUuZGVmaW5lKHtjb21iaW5lKG4pe3JldHVybiBuLmxlbmd0aD9uWzBdOnZ0fX0pLEN0PVBlLmhpZ2hlc3QoT2UuY29tcHV0ZShbYmVdLG49Pm4uZmFjZXQoYmUpKSk7ZnVuY3Rpb24gVnQobixlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHthcHBseTpidChuKX0pfXZhciBJdD1rLmRvbUV2ZW50SGFuZGxlcnMoe21vdXNlZG93bihuLGUpe2xldCB0PWUuc3RhdGUuZmllbGQoRCwhMSksaTtpZighdHx8KGk9ZS5wb3NBdENvb3Jkcyh7eDpuLmNsaWVudFgseTpuLmNsaWVudFl9KSk9PW51bGwpcmV0dXJuITE7bGV0IG89dC5yYW5nZXMuZmluZChzPT5zLmZyb208PWkmJnMudG8+PWkpO3JldHVybiFvfHxvLmZpZWxkPT10LmFjdGl2ZT8hMTooZS5kaXNwYXRjaCh7c2VsZWN0aW9uOnJlKHQucmFuZ2VzLG8uZmllbGQpLGVmZmVjdHM6JC5vZih0LnJhbmdlcy5zb21lKHM9PnMuZmllbGQ+by5maWVsZCk/bmV3IFModC5yYW5nZXMsby5maWVsZCk6bnVsbCl9KSwhMCl9fSk7ZnVuY3Rpb24gU3Qobil7bGV0IGU9bi5yZXBsYWNlKC9bXFxcXFsuKyo/KCl7fF4kXS9nLFwiXFxcXCQmXCIpO3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChgW1xcXFxwe0FscGhhYmV0aWN9XFxcXHB7TnVtYmVyfV8ke2V9XStgLFwidWdcIil9Y2F0Y2h7cmV0dXJuIG5ldyBSZWdFeHAoYFt3JHtlfV1gLFwiZ1wiKX19ZnVuY3Rpb24geGUobixlKXtyZXR1cm4gbmV3IFJlZ0V4cChlKG4uc291cmNlKSxuLnVuaWNvZGU/XCJ1XCI6XCJcIil9dmFyIHllPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gRXQobil7cmV0dXJuIHllW25dfHwoeWVbbl09bmV3IFdlYWtNYXApfWZ1bmN0aW9uIHdlKG4sZSx0LGksbyl7Zm9yKGxldCBzPW4uaXRlckxpbmVzKCkscj0wOyFzLm5leHQoKS5kb25lOyl7bGV0e3ZhbHVlOmx9PXMsYztmb3IoZS5sYXN0SW5kZXg9MDtjPWUuZXhlYyhsKTspaWYoIWlbY1swXV0mJnIrYy5pbmRleCE9byYmKHQucHVzaCh7dHlwZTpcInRleHRcIixsYWJlbDpjWzBdfSksaVtjWzBdXT0hMCx0Lmxlbmd0aD49MmUzKSlyZXR1cm47cis9bC5sZW5ndGgrMX19ZnVuY3Rpb24gRGUobixlLHQsaSxvKXtsZXQgcz1uLmxlbmd0aD49MWUzLHI9cyYmZS5nZXQobik7aWYocilyZXR1cm4gcjtsZXQgbD1bXSxjPU9iamVjdC5jcmVhdGUobnVsbCk7aWYobi5jaGlsZHJlbil7bGV0IGE9MDtmb3IobGV0IGYgb2Ygbi5jaGlsZHJlbil7aWYoZi5sZW5ndGg+PTFlMylmb3IobGV0IHUgb2YgRGUoZixlLHQsaS1hLG8tYSkpY1t1LmxhYmVsXXx8KGNbdS5sYWJlbF09ITAsbC5wdXNoKHUpKTtlbHNlIHdlKGYsdCxsLGMsby1hKTthKz1mLmxlbmd0aCsxfX1lbHNlIHdlKG4sdCxsLGMsbyk7cmV0dXJuIHMmJmwubGVuZ3RoPDJlMyYmZS5zZXQobixsKSxsfXZhciBxdD1uPT57bGV0IGU9bi5zdGF0ZS5sYW5ndWFnZURhdGFBdChcIndvcmRDaGFyc1wiLG4ucG9zKS5qb2luKFwiXCIpLHQ9U3QoZSksaT1uLm1hdGNoQmVmb3JlKHhlKHQscj0+citcIiRcIikpO2lmKCFpJiYhbi5leHBsaWNpdClyZXR1cm4gbnVsbDtsZXQgbz1pP2kuZnJvbTpuLnBvcyxzPURlKG4uc3RhdGUuZG9jLEV0KGUpLHQsNWU0LG8pO3JldHVybntmcm9tOm8sb3B0aW9uczpzLHZhbGlkRm9yOnhlKHQscj0+XCJeXCIrcil9fSxMPXticmFja2V0czpbXCIoXCIsXCJbXCIsXCJ7XCIsXCInXCIsJ1wiJ10sYmVmb3JlOlwiKV19Ojs+XCIsc3RyaW5nUHJlZml4ZXM6W119LEU9di5kZWZpbmUoe21hcChuLGUpe2xldCB0PWUubWFwUG9zKG4sLTEsRy5UcmFja0FmdGVyKTtyZXR1cm4gdD8/dm9pZCAwfX0pLGNlPXYuZGVmaW5lKHttYXAobixlKXtyZXR1cm4gZS5tYXBQb3Mobil9fSksYWU9bmV3IGNsYXNzIGV4dGVuZHMgSGV7fTthZS5zdGFydFNpZGU9MTthZS5lbmRTaWRlPS0xO3ZhciBMZT1vZS5kZWZpbmUoe2NyZWF0ZSgpe3JldHVybiBmZS5lbXB0eX0sdXBkYXRlKG4sZSl7aWYoZS5zZWxlY3Rpb24pe2xldCB0PWUuc3RhdGUuZG9jLmxpbmVBdChlLnNlbGVjdGlvbi5tYWluLmhlYWQpLmZyb20saT1lLnN0YXJ0U3RhdGUuZG9jLmxpbmVBdChlLnN0YXJ0U3RhdGUuc2VsZWN0aW9uLm1haW4uaGVhZCkuZnJvbTt0IT1lLmNoYW5nZXMubWFwUG9zKGksLTEpJiYobj1mZS5lbXB0eSl9bj1uLm1hcChlLmNoYW5nZXMpO2ZvcihsZXQgdCBvZiBlLmVmZmVjdHMpdC5pcyhFKT9uPW4udXBkYXRlKHthZGQ6W2FlLnJhbmdlKHQudmFsdWUsdC52YWx1ZSsxKV19KTp0LmlzKGNlKSYmKG49bi51cGRhdGUoe2ZpbHRlcjppPT5pIT10LnZhbHVlfSkpO3JldHVybiBufX0pO2Z1bmN0aW9uIEt0KCl7cmV0dXJuW090LExlXX12YXIgWT1cIigpW117fTw+XCI7ZnVuY3Rpb24ga2Uobil7Zm9yKGxldCBlPTA7ZTxZLmxlbmd0aDtlKz0yKWlmKFkuY2hhckNvZGVBdChlKT09bilyZXR1cm4gWS5jaGFyQXQoZSsxKTtyZXR1cm4gU2UobjwxMjg/bjpuKzEpfWZ1bmN0aW9uIFdlKG4sZSl7cmV0dXJuIG4ubGFuZ3VhZ2VEYXRhQXQoXCJjbG9zZUJyYWNrZXRzXCIsZSlbMF18fEx9dmFyIFB0PXR5cGVvZiBuYXZpZ2F0b3I9PVwib2JqZWN0XCImJi9BbmRyb2lkXFxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLE90PWsuaW5wdXRIYW5kbGVyLm9mKChuLGUsdCxpKT0+e2lmKChQdD9uLmNvbXBvc2luZzpuLmNvbXBvc2l0aW9uU3RhcnRlZCl8fG4uc3RhdGUucmVhZE9ubHkpcmV0dXJuITE7bGV0IG89bi5zdGF0ZS5zZWxlY3Rpb24ubWFpbjtpZihpLmxlbmd0aD4yfHxpLmxlbmd0aD09MiYmdyh5KGksMCkpPT0xfHxlIT1vLmZyb218fHQhPW8udG8pcmV0dXJuITE7bGV0IHM9VHQobi5zdGF0ZSxpKTtyZXR1cm4gcz8obi5kaXNwYXRjaChzKSwhMCk6ITF9KSxBdD0oe3N0YXRlOm4sZGlzcGF0Y2g6ZX0pPT57aWYobi5yZWFkT25seSlyZXR1cm4hMTtsZXQgaT1XZShuLG4uc2VsZWN0aW9uLm1haW4uaGVhZCkuYnJhY2tldHN8fEwuYnJhY2tldHMsbz1udWxsLHM9bi5jaGFuZ2VCeVJhbmdlKHI9PntpZihyLmVtcHR5KXtsZXQgbD1NdChuLmRvYyxyLmhlYWQpO2ZvcihsZXQgYyBvZiBpKWlmKGM9PWwmJnEobi5kb2Msci5oZWFkKT09a2UoeShjLDApKSlyZXR1cm57Y2hhbmdlczp7ZnJvbTpyLmhlYWQtYy5sZW5ndGgsdG86ci5oZWFkK2MubGVuZ3RofSxyYW5nZTpnLmN1cnNvcihyLmhlYWQtYy5sZW5ndGgpfX1yZXR1cm57cmFuZ2U6bz1yfX0pO3JldHVybiBvfHxlKG4udXBkYXRlKHMse3Njcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpcImRlbGV0ZS5iYWNrd2FyZFwifSkpLCFvfSx6dD1be2tleTpcIkJhY2tzcGFjZVwiLHJ1bjpBdH1dO2Z1bmN0aW9uIFR0KG4sZSl7bGV0IHQ9V2UobixuLnNlbGVjdGlvbi5tYWluLmhlYWQpLGk9dC5icmFja2V0c3x8TC5icmFja2V0cztmb3IobGV0IG8gb2YgaSl7bGV0IHM9a2UoeShvLDApKTtpZihlPT1vKXJldHVybiBzPT1vP0R0KG4sbyxpLmluZGV4T2YobytvK28pPi0xLHQpOlJ0KG4sbyxzLHQuYmVmb3JlfHxMLmJlZm9yZSk7aWYoZT09cyYmJGUobixuLnNlbGVjdGlvbi5tYWluLmZyb20pKXJldHVybiBCdChuLG8scyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gJGUobixlKXtsZXQgdD0hMTtyZXR1cm4gbi5maWVsZChMZSkuYmV0d2VlbigwLG4uZG9jLmxlbmd0aCxpPT57aT09ZSYmKHQ9ITApfSksdH1mdW5jdGlvbiBxKG4sZSl7bGV0IHQ9bi5zbGljZVN0cmluZyhlLGUrMik7cmV0dXJuIHQuc2xpY2UoMCx3KHkodCwwKSkpfWZ1bmN0aW9uIE10KG4sZSl7bGV0IHQ9bi5zbGljZVN0cmluZyhlLTIsZSk7cmV0dXJuIHcoeSh0LDApKT09dC5sZW5ndGg/dDp0LnNsaWNlKDEpfWZ1bmN0aW9uIFJ0KG4sZSx0LGkpe2xldCBvPW51bGwscz1uLmNoYW5nZUJ5UmFuZ2Uocj0+e2lmKCFyLmVtcHR5KXJldHVybntjaGFuZ2VzOlt7aW5zZXJ0OmUsZnJvbTpyLmZyb219LHtpbnNlcnQ6dCxmcm9tOnIudG99XSxlZmZlY3RzOkUub2Yoci50bytlLmxlbmd0aCkscmFuZ2U6Zy5yYW5nZShyLmFuY2hvcitlLmxlbmd0aCxyLmhlYWQrZS5sZW5ndGgpfTtsZXQgbD1xKG4uZG9jLHIuaGVhZCk7cmV0dXJuIWx8fC9cXHMvLnRlc3QobCl8fGkuaW5kZXhPZihsKT4tMT97Y2hhbmdlczp7aW5zZXJ0OmUrdCxmcm9tOnIuaGVhZH0sZWZmZWN0czpFLm9mKHIuaGVhZCtlLmxlbmd0aCkscmFuZ2U6Zy5jdXJzb3Ioci5oZWFkK2UubGVuZ3RoKX06e3JhbmdlOm89cn19KTtyZXR1cm4gbz9udWxsOm4udXBkYXRlKHMse3Njcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpcImlucHV0LnR5cGVcIn0pfWZ1bmN0aW9uIEJ0KG4sZSx0KXtsZXQgaT1udWxsLG89bi5zZWxlY3Rpb24ucmFuZ2VzLm1hcChzPT5zLmVtcHR5JiZxKG4uZG9jLHMuaGVhZCk9PXQ/Zy5jdXJzb3Iocy5oZWFkK3QubGVuZ3RoKTppPXMpO3JldHVybiBpP251bGw6bi51cGRhdGUoe3NlbGVjdGlvbjpnLmNyZWF0ZShvLG4uc2VsZWN0aW9uLm1haW5JbmRleCksc2Nyb2xsSW50b1ZpZXc6ITAsZWZmZWN0czpuLnNlbGVjdGlvbi5yYW5nZXMubWFwKCh7ZnJvbTpzfSk9PmNlLm9mKHMpKX0pfWZ1bmN0aW9uIER0KG4sZSx0LGkpe2xldCBvPWkuc3RyaW5nUHJlZml4ZXN8fEwuc3RyaW5nUHJlZml4ZXMscz1udWxsLHI9bi5jaGFuZ2VCeVJhbmdlKGw9PntpZighbC5lbXB0eSlyZXR1cm57Y2hhbmdlczpbe2luc2VydDplLGZyb206bC5mcm9tfSx7aW5zZXJ0OmUsZnJvbTpsLnRvfV0sZWZmZWN0czpFLm9mKGwudG8rZS5sZW5ndGgpLHJhbmdlOmcucmFuZ2UobC5hbmNob3IrZS5sZW5ndGgsbC5oZWFkK2UubGVuZ3RoKX07bGV0IGM9bC5oZWFkLGE9cShuLmRvYyxjKSxmO2lmKGE9PWUpe2lmKHZlKG4sYykpcmV0dXJue2NoYW5nZXM6e2luc2VydDplK2UsZnJvbTpjfSxlZmZlY3RzOkUub2YoYytlLmxlbmd0aCkscmFuZ2U6Zy5jdXJzb3IoYytlLmxlbmd0aCl9O2lmKCRlKG4sYykpe2xldCB1PXQmJm4uc2xpY2VEb2MoYyxjK2UubGVuZ3RoKjMpPT1lK2UrZTtyZXR1cm57cmFuZ2U6Zy5jdXJzb3IoYytlLmxlbmd0aCoodT8zOjEpKSxlZmZlY3RzOmNlLm9mKGMpfX19ZWxzZXtpZih0JiZuLnNsaWNlRG9jKGMtMiplLmxlbmd0aCxjKT09ZStlJiYoZj1DZShuLGMtMiplLmxlbmd0aCxvKSk+LTEmJnZlKG4sZikpcmV0dXJue2NoYW5nZXM6e2luc2VydDplK2UrZStlLGZyb206Y30sZWZmZWN0czpFLm9mKGMrZS5sZW5ndGgpLHJhbmdlOmcuY3Vyc29yKGMrZS5sZW5ndGgpfTtpZihuLmNoYXJDYXRlZ29yaXplcihjKShhKSE9Si5Xb3JkJiZDZShuLGMsbyk+LTEmJiFMdChuLGMsZSxvKSlyZXR1cm57Y2hhbmdlczp7aW5zZXJ0OmUrZSxmcm9tOmN9LGVmZmVjdHM6RS5vZihjK2UubGVuZ3RoKSxyYW5nZTpnLmN1cnNvcihjK2UubGVuZ3RoKX19cmV0dXJue3JhbmdlOnM9bH19KTtyZXR1cm4gcz9udWxsOm4udXBkYXRlKHIse3Njcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpcImlucHV0LnR5cGVcIn0pfWZ1bmN0aW9uIHZlKG4sZSl7bGV0IHQ9VyhuKS5yZXNvbHZlSW5uZXIoZSsxKTtyZXR1cm4gdC5wYXJlbnQmJnQuZnJvbT09ZX1mdW5jdGlvbiBMdChuLGUsdCxpKXtsZXQgbz1XKG4pLnJlc29sdmVJbm5lcihlLC0xKSxzPWkucmVkdWNlKChyLGwpPT5NYXRoLm1heChyLGwubGVuZ3RoKSwwKTtmb3IobGV0IHI9MDtyPDU7cisrKXtsZXQgbD1uLnNsaWNlRG9jKG8uZnJvbSxNYXRoLm1pbihvLnRvLG8uZnJvbSt0Lmxlbmd0aCtzKSksYz1sLmluZGV4T2YodCk7aWYoIWN8fGM+LTEmJmkuaW5kZXhPZihsLnNsaWNlKDAsYykpPi0xKXtsZXQgZj1vLmZpcnN0Q2hpbGQ7Zm9yKDtmJiZmLmZyb209PW8uZnJvbSYmZi50by1mLmZyb20+dC5sZW5ndGgrYzspe2lmKG4uc2xpY2VEb2MoZi50by10Lmxlbmd0aCxmLnRvKT09dClyZXR1cm4hMTtmPWYuZmlyc3RDaGlsZH1yZXR1cm4hMH1sZXQgYT1vLnRvPT1lJiZvLnBhcmVudDtpZighYSlicmVhaztvPWF9cmV0dXJuITF9ZnVuY3Rpb24gQ2UobixlLHQpe2xldCBpPW4uY2hhckNhdGVnb3JpemVyKGUpO2lmKGkobi5zbGljZURvYyhlLTEsZSkpIT1KLldvcmQpcmV0dXJuIGU7Zm9yKGxldCBvIG9mIHQpe2xldCBzPWUtby5sZW5ndGg7aWYobi5zbGljZURvYyhzLGUpPT1vJiZpKG4uc2xpY2VEb2Mocy0xLHMpKSE9Si5Xb3JkKXJldHVybiBzfXJldHVybi0xfWZ1bmN0aW9uIFF0KG49e30pe3JldHVybltkLHgub2YobikscHQsV3QsUmVdfXZhciBrdD1be2tleTpcIkN0cmwtU3BhY2VcIixydW46YXR9LHtrZXk6XCJFc2NhcGVcIixydW46ZnR9LHtrZXk6XCJBcnJvd0Rvd25cIixydW46VSghMCl9LHtrZXk6XCJBcnJvd1VwXCIscnVuOlUoITEpfSx7a2V5OlwiUGFnZURvd25cIixydW46VSghMCxcInBhZ2VcIil9LHtrZXk6XCJQYWdlVXBcIixydW46VSghMSxcInBhZ2VcIil9LHtrZXk6XCJFbnRlclwiLHJ1bjpjdH1dLFd0PVBlLmhpZ2hlc3QoT2UuY29tcHV0ZU4oW3hdLG49Pm4uZmFjZXQoeCkuZGVmYXVsdEtleW1hcD9ba3RdOltdKSk7ZnVuY3Rpb24gWHQobil7bGV0IGU9bi5maWVsZChkLCExKTtyZXR1cm4gZSYmZS5hY3RpdmUuc29tZSh0PT50LnN0YXRlPT0xKT9cInBlbmRpbmdcIjplJiZlLmFjdGl2ZS5zb21lKHQ9PnQuc3RhdGUhPTApP1wiYWN0aXZlXCI6bnVsbH12YXIgSWU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gWXQobil7dmFyIGU7bGV0IHQ9KGU9bi5maWVsZChkLCExKSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm9wZW47aWYoIXQpcmV0dXJuW107bGV0IGk9SWUuZ2V0KHQub3B0aW9ucyk7cmV0dXJuIGl8fEllLnNldCh0Lm9wdGlvbnMsaT10Lm9wdGlvbnMubWFwKG89Pm8uY29tcGxldGlvbikpLGl9ZnVuY3Rpb24gR3Qobil7dmFyIGU7bGV0IHQ9KGU9bi5maWVsZChkLCExKSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm9wZW47cmV0dXJuIHQmJnQuc2VsZWN0ZWQ+PTA/dC5vcHRpb25zW3Quc2VsZWN0ZWRdLmNvbXBsZXRpb246bnVsbH1mdW5jdGlvbiBKdChuKXt2YXIgZTtsZXQgdD0oZT1uLmZpZWxkKGQsITEpKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUub3BlbjtyZXR1cm4gdCYmdC5zZWxlY3RlZD49MD90LnNlbGVjdGVkOm51bGx9ZnVuY3Rpb24gWnQobil7cmV0dXJuIGxlLm9mKG4pfWV4cG9ydHtGIGFzIENvbXBsZXRpb25Db250ZXh0LGN0IGFzIGFjY2VwdENvbXBsZXRpb24sUXQgYXMgYXV0b2NvbXBsZXRpb24seHQgYXMgY2xlYXJTbmlwcGV0LEt0IGFzIGNsb3NlQnJhY2tldHMsenQgYXMgY2xvc2VCcmFja2V0c0tleW1hcCxmdCBhcyBjbG9zZUNvbXBsZXRpb24scXQgYXMgY29tcGxldGVBbnlXb3JkLEdlIGFzIGNvbXBsZXRlRnJvbUxpc3Qsa3QgYXMgY29tcGxldGlvbktleW1hcCxYdCBhcyBjb21wbGV0aW9uU3RhdHVzLFl0IGFzIGN1cnJlbnRDb21wbGV0aW9ucyxBdCBhcyBkZWxldGVCcmFja2V0UGFpcixGdCBhcyBpZkluLE50IGFzIGlmTm90SW4sVHQgYXMgaW5zZXJ0QnJhY2tldCxKZSBhcyBpbnNlcnRDb21wbGV0aW9uVGV4dCxVIGFzIG1vdmVDb21wbGV0aW9uU2VsZWN0aW9uLHl0IGFzIG5leHRTbmlwcGV0RmllbGQsSHQgYXMgcGlja2VkQ29tcGxldGlvbix3dCBhcyBwcmV2U25pcHBldEZpZWxkLEd0IGFzIHNlbGVjdGVkQ29tcGxldGlvbixKdCBhcyBzZWxlY3RlZENvbXBsZXRpb25JbmRleCxadCBhcyBzZXRTZWxlY3RlZENvbXBsZXRpb24sYnQgYXMgc25pcHBldCxWdCBhcyBzbmlwcGV0Q29tcGxldGlvbixiZSBhcyBzbmlwcGV0S2V5bWFwLGF0IGFzIHN0YXJ0Q29tcGxldGlvbn07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbi8qKiB7QGxpbmtjb2RlIHBhcnNlfSBhbmQge0BsaW5rY29kZSBzdHJpbmdpZnl9IGZvciBoYW5kbGluZ1xuICogW1lBTUxdKGh0dHBzOi8veWFtbC5vcmcvKSBlbmNvZGVkIGRhdGEuXG4gKlxuICogUG9ydGVkIGZyb21cbiAqIFtqcy15YW1sIHYzLjEzLjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYSlcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBQYXJzZU9wdGlvbnMgfSBmcm9tIFwiLi9feWFtbC9wYXJzZS50c1wiO1xuZXhwb3J0IHsgcGFyc2UsIHBhcnNlQWxsIH0gZnJvbSBcIi4vX3lhbWwvcGFyc2UudHNcIjtcbmV4cG9ydCB0eXBlIHsgRHVtcE9wdGlvbnMgYXMgU3RyaW5naWZ5T3B0aW9ucyB9IGZyb20gXCIuL195YW1sL3N0cmluZ2lmeS50c1wiO1xuZXhwb3J0IHsgc3RyaW5naWZ5IH0gZnJvbSBcIi4vX3lhbWwvc3RyaW5naWZ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IFNjaGVtYURlZmluaXRpb24gfSBmcm9tIFwiLi9feWFtbC9zY2hlbWEudHNcIjtcbmV4cG9ydCB7IFR5cGUgfSBmcm9tIFwiLi9feWFtbC90eXBlLnRzXCI7XG5leHBvcnQgdHlwZSB7IEtpbmRUeXBlLCBSZXByZXNlbnRGbiwgU3R5bGVWYXJpYW50IH0gZnJvbSBcIi4vX3lhbWwvdHlwZS50c1wiO1xuZXhwb3J0IHtcbiAgQ09SRV9TQ0hFTUEsXG4gIERFRkFVTFRfU0NIRU1BLFxuICBFWFRFTkRFRF9TQ0hFTUEsXG4gIEZBSUxTQUZFX1NDSEVNQSxcbiAgSlNPTl9TQ0hFTUEsXG59IGZyb20gXCIuL195YW1sL3NjaGVtYS9tb2QudHNcIjtcbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgdHlwZSB7IE1hcmsgfSBmcm9tIFwiLi9tYXJrLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBZQU1MRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2UgPSBcIih1bmtub3duIHJlYXNvbilcIixcbiAgICBwcm90ZWN0ZWQgbWFyazogTWFyayB8IHN0cmluZyA9IFwiXCIsXG4gICkge1xuICAgIHN1cGVyKGAke21lc3NhZ2V9ICR7bWFya31gKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgdG9TdHJpbmcoX2NvbXBhY3Q6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9OiAke3RoaXMubWVzc2FnZX0gJHt0aGlzLm1hcmt9YDtcbiAgfVxufVxuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBBbnkgPSBhbnk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdGhpbmcoc3ViamVjdDogdW5rbm93bik6IHN1YmplY3QgaXMgbmV2ZXIge1xuICByZXR1cm4gdHlwZW9mIHN1YmplY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgc3ViamVjdCA9PT0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBbnlbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudW1iZXIge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTeW1ib2wodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBzeW1ib2wge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN5bWJvbFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvcihlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgKCkgPT4gdm9pZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVnRXhwIHtcbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9BcnJheTxUPihzZXF1ZW5jZTogVCk6IFQgfCBbXSB8IFtUXSB7XG4gIGlmIChpc0FycmF5KHNlcXVlbmNlKSkgcmV0dXJuIHNlcXVlbmNlO1xuICBpZiAoaXNOb3RoaW5nKHNlcXVlbmNlKSkgcmV0dXJuIFtdO1xuXG4gIHJldHVybiBbc2VxdWVuY2VdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0KHN0cjogc3RyaW5nLCBjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG5cbiAgZm9yIChsZXQgY3ljbGUgPSAwOyBjeWNsZSA8IGNvdW50OyBjeWNsZSsrKSB7XG4gICAgcmVzdWx0ICs9IHN0cjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lZ2F0aXZlWmVybyhpOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGkgPT09IDAgJiYgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZID09PSAxIC8gaTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcnJheU9iamVjdDxUID0gQW55PiB7XG4gIFtQOiBzdHJpbmddOiBUO1xufVxuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gXCIuL3V0aWxzLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBNYXJrIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgYnVmZmVyOiBzdHJpbmcsXG4gICAgcHVibGljIHBvc2l0aW9uOiBudW1iZXIsXG4gICAgcHVibGljIGxpbmU6IG51bWJlcixcbiAgICBwdWJsaWMgY29sdW1uOiBudW1iZXIsXG4gICkge31cblxuICBwdWJsaWMgZ2V0U25pcHBldChpbmRlbnQgPSA0LCBtYXhMZW5ndGggPSA3NSk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5idWZmZXIpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IGhlYWQgPSBcIlwiO1xuICAgIGxldCBzdGFydCA9IHRoaXMucG9zaXRpb247XG5cbiAgICB3aGlsZSAoXG4gICAgICBzdGFydCA+IDAgJiZcbiAgICAgIFwiXFx4MDBcXHJcXG5cXHg4NVxcdTIwMjhcXHUyMDI5XCIuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoc3RhcnQgLSAxKSkgPT09IC0xXG4gICAgKSB7XG4gICAgICBzdGFydCAtPSAxO1xuICAgICAgaWYgKHRoaXMucG9zaXRpb24gLSBzdGFydCA+IG1heExlbmd0aCAvIDIgLSAxKSB7XG4gICAgICAgIGhlYWQgPSBcIiAuLi4gXCI7XG4gICAgICAgIHN0YXJ0ICs9IDU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0YWlsID0gXCJcIjtcbiAgICBsZXQgZW5kID0gdGhpcy5wb3NpdGlvbjtcblxuICAgIHdoaWxlIChcbiAgICAgIGVuZCA8IHRoaXMuYnVmZmVyLmxlbmd0aCAmJlxuICAgICAgXCJcXHgwMFxcclxcblxceDg1XFx1MjAyOFxcdTIwMjlcIi5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChlbmQpKSA9PT0gLTFcbiAgICApIHtcbiAgICAgIGVuZCArPSAxO1xuICAgICAgaWYgKGVuZCAtIHRoaXMucG9zaXRpb24gPiBtYXhMZW5ndGggLyAyIC0gMSkge1xuICAgICAgICB0YWlsID0gXCIgLi4uIFwiO1xuICAgICAgICBlbmQgLT0gNTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc25pcHBldCA9IHRoaXMuYnVmZmVyLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIHJldHVybiBgJHtyZXBlYXQoXCIgXCIsIGluZGVudCl9JHtoZWFkfSR7c25pcHBldH0ke3RhaWx9XFxuJHtcbiAgICAgIHJlcGVhdChcbiAgICAgICAgXCIgXCIsXG4gICAgICAgIGluZGVudCArIHRoaXMucG9zaXRpb24gLSBzdGFydCArIGhlYWQubGVuZ3RoLFxuICAgICAgKVxuICAgIH1eYDtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZyhjb21wYWN0PzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgbGV0IHNuaXBwZXQsXG4gICAgICB3aGVyZSA9IFwiXCI7XG5cbiAgICBpZiAodGhpcy5uYW1lKSB7XG4gICAgICB3aGVyZSArPSBgaW4gXCIke3RoaXMubmFtZX1cIiBgO1xuICAgIH1cblxuICAgIHdoZXJlICs9IGBhdCBsaW5lICR7dGhpcy5saW5lICsgMX0sIGNvbHVtbiAke3RoaXMuY29sdW1uICsgMX1gO1xuXG4gICAgaWYgKCFjb21wYWN0KSB7XG4gICAgICBzbmlwcGV0ID0gdGhpcy5nZXRTbmlwcGV0KCk7XG5cbiAgICAgIGlmIChzbmlwcGV0KSB7XG4gICAgICAgIHdoZXJlICs9IGA6XFxuJHtzbmlwcGV0fWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHdoZXJlO1xuICB9XG59XG4iLCAiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHsgWUFNTEVycm9yIH0gZnJvbSBcIi4vZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgS2luZFR5cGUsIFR5cGUgfSBmcm9tIFwiLi90eXBlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFueSwgQXJyYXlPYmplY3QgfSBmcm9tIFwiLi91dGlscy50c1wiO1xuXG5mdW5jdGlvbiBjb21waWxlTGlzdChcbiAgc2NoZW1hOiBTY2hlbWEsXG4gIG5hbWU6IFwiaW1wbGljaXRcIiB8IFwiZXhwbGljaXRcIixcbiAgcmVzdWx0OiBUeXBlW10sXG4pOiBUeXBlW10ge1xuICBjb25zdCBleGNsdWRlOiBudW1iZXJbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgaW5jbHVkZWRTY2hlbWEgb2Ygc2NoZW1hLmluY2x1ZGUpIHtcbiAgICByZXN1bHQgPSBjb21waWxlTGlzdChpbmNsdWRlZFNjaGVtYSwgbmFtZSwgcmVzdWx0KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY3VycmVudFR5cGUgb2Ygc2NoZW1hW25hbWVdKSB7XG4gICAgZm9yIChcbiAgICAgIGxldCBwcmV2aW91c0luZGV4ID0gMDtcbiAgICAgIHByZXZpb3VzSW5kZXggPCByZXN1bHQubGVuZ3RoO1xuICAgICAgcHJldmlvdXNJbmRleCsrXG4gICAgKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1R5cGUgPSByZXN1bHRbcHJldmlvdXNJbmRleF07XG4gICAgICBpZiAoXG4gICAgICAgIHByZXZpb3VzVHlwZS50YWcgPT09IGN1cnJlbnRUeXBlLnRhZyAmJlxuICAgICAgICBwcmV2aW91c1R5cGUua2luZCA9PT0gY3VycmVudFR5cGUua2luZFxuICAgICAgKSB7XG4gICAgICAgIGV4Y2x1ZGUucHVzaChwcmV2aW91c0luZGV4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQucHVzaChjdXJyZW50VHlwZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmZpbHRlcigoX3R5cGUsIGluZGV4KTogdW5rbm93biA9PiAhZXhjbHVkZS5pbmNsdWRlcyhpbmRleCkpO1xufVxuXG5leHBvcnQgdHlwZSBUeXBlTWFwID0geyBbayBpbiBLaW5kVHlwZSB8IFwiZmFsbGJhY2tcIl06IEFycmF5T2JqZWN0PFR5cGU+IH07XG5mdW5jdGlvbiBjb21waWxlTWFwKC4uLnR5cGVzTGlzdDogVHlwZVtdW10pOiBUeXBlTWFwIHtcbiAgY29uc3QgcmVzdWx0OiBUeXBlTWFwID0ge1xuICAgIGZhbGxiYWNrOiB7fSxcbiAgICBtYXBwaW5nOiB7fSxcbiAgICBzY2FsYXI6IHt9LFxuICAgIHNlcXVlbmNlOiB7fSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHR5cGVzIG9mIHR5cGVzTGlzdCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGUua2luZCAhPT0gbnVsbCkge1xuICAgICAgICByZXN1bHRbdHlwZS5raW5kXVt0eXBlLnRhZ10gPSByZXN1bHRbXCJmYWxsYmFja1wiXVt0eXBlLnRhZ10gPSB0eXBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY2xhc3MgU2NoZW1hIGltcGxlbWVudHMgU2NoZW1hRGVmaW5pdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgU0NIRU1BX0RFRkFVTFQ/OiBTY2hlbWE7XG5cbiAgcHVibGljIGltcGxpY2l0OiBUeXBlW107XG4gIHB1YmxpYyBleHBsaWNpdDogVHlwZVtdO1xuICBwdWJsaWMgaW5jbHVkZTogU2NoZW1hW107XG5cbiAgcHVibGljIGNvbXBpbGVkSW1wbGljaXQ6IFR5cGVbXTtcbiAgcHVibGljIGNvbXBpbGVkRXhwbGljaXQ6IFR5cGVbXTtcbiAgcHVibGljIGNvbXBpbGVkVHlwZU1hcDogVHlwZU1hcDtcblxuICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBTY2hlbWFEZWZpbml0aW9uKSB7XG4gICAgdGhpcy5leHBsaWNpdCA9IGRlZmluaXRpb24uZXhwbGljaXQgfHwgW107XG4gICAgdGhpcy5pbXBsaWNpdCA9IGRlZmluaXRpb24uaW1wbGljaXQgfHwgW107XG4gICAgdGhpcy5pbmNsdWRlID0gZGVmaW5pdGlvbi5pbmNsdWRlIHx8IFtdO1xuXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHRoaXMuaW1wbGljaXQpIHtcbiAgICAgIGlmICh0eXBlLmxvYWRLaW5kICYmIHR5cGUubG9hZEtpbmQgIT09IFwic2NhbGFyXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFlBTUxFcnJvcihcbiAgICAgICAgICBcIlRoZXJlIGlzIGEgbm9uLXNjYWxhciB0eXBlIGluIHRoZSBpbXBsaWNpdCBsaXN0IG9mIGEgc2NoZW1hLiBJbXBsaWNpdCByZXNvbHZpbmcgb2Ygc3VjaCB0eXBlcyBpcyBub3Qgc3VwcG9ydGVkLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29tcGlsZWRJbXBsaWNpdCA9IGNvbXBpbGVMaXN0KHRoaXMsIFwiaW1wbGljaXRcIiwgW10pO1xuICAgIHRoaXMuY29tcGlsZWRFeHBsaWNpdCA9IGNvbXBpbGVMaXN0KHRoaXMsIFwiZXhwbGljaXRcIiwgW10pO1xuICAgIHRoaXMuY29tcGlsZWRUeXBlTWFwID0gY29tcGlsZU1hcChcbiAgICAgIHRoaXMuY29tcGlsZWRJbXBsaWNpdCxcbiAgICAgIHRoaXMuY29tcGlsZWRFeHBsaWNpdCxcbiAgICApO1xuICB9XG5cbiAgLyogUmV0dXJucyBhIG5ldyBleHRlbmRlZCBzY2hlbWEgZnJvbSBjdXJyZW50IHNjaGVtYSAqL1xuICBwdWJsaWMgZXh0ZW5kKGRlZmluaXRpb246IFNjaGVtYURlZmluaXRpb24pIHtcbiAgICByZXR1cm4gbmV3IFNjaGVtYSh7XG4gICAgICBpbXBsaWNpdDogW1xuICAgICAgICAuLi5uZXcgU2V0KFsuLi50aGlzLmltcGxpY2l0LCAuLi4oZGVmaW5pdGlvbj8uaW1wbGljaXQgPz8gW10pXSksXG4gICAgICBdLFxuICAgICAgZXhwbGljaXQ6IFtcbiAgICAgICAgLi4ubmV3IFNldChbLi4udGhpcy5leHBsaWNpdCwgLi4uKGRlZmluaXRpb24/LmV4cGxpY2l0ID8/IFtdKV0pLFxuICAgICAgXSxcbiAgICAgIGluY2x1ZGU6IFsuLi5uZXcgU2V0KFsuLi50aGlzLmluY2x1ZGUsIC4uLihkZWZpbml0aW9uPy5pbmNsdWRlID8/IFtdKV0pXSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKCkge31cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFEZWZpbml0aW9uIHtcbiAgaW1wbGljaXQ/OiBBbnlbXTtcbiAgZXhwbGljaXQ/OiBUeXBlW107XG4gIGluY2x1ZGU/OiBTY2hlbWFbXTtcbn1cbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgdHlwZSB7IEFueSwgQXJyYXlPYmplY3QgfSBmcm9tIFwiLi91dGlscy50c1wiO1xuXG5leHBvcnQgdHlwZSBLaW5kVHlwZSA9IFwic2VxdWVuY2VcIiB8IFwic2NhbGFyXCIgfCBcIm1hcHBpbmdcIjtcbmV4cG9ydCB0eXBlIFN0eWxlVmFyaWFudCA9IFwibG93ZXJjYXNlXCIgfCBcInVwcGVyY2FzZVwiIHwgXCJjYW1lbGNhc2VcIiB8IFwiZGVjaW1hbFwiO1xuZXhwb3J0IHR5cGUgUmVwcmVzZW50Rm4gPSAoZGF0YTogQW55LCBzdHlsZT86IFN0eWxlVmFyaWFudCkgPT4gQW55O1xuXG5jb25zdCBERUZBVUxUX1JFU09MVkUgPSAoKTogYm9vbGVhbiA9PiB0cnVlO1xuY29uc3QgREVGQVVMVF9DT05TVFJVQ1QgPSAoZGF0YTogQW55KTogQW55ID0+IGRhdGE7XG5cbmludGVyZmFjZSBUeXBlT3B0aW9ucyB7XG4gIGtpbmQ6IEtpbmRUeXBlO1xuICByZXNvbHZlPzogKGRhdGE6IEFueSkgPT4gYm9vbGVhbjtcbiAgY29uc3RydWN0PzogKGRhdGE6IHN0cmluZykgPT4gQW55O1xuICBpbnN0YW5jZU9mPzogQW55O1xuICBwcmVkaWNhdGU/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IGJvb2xlYW47XG4gIHJlcHJlc2VudD86IFJlcHJlc2VudEZuIHwgQXJyYXlPYmplY3Q8UmVwcmVzZW50Rm4+O1xuICBkZWZhdWx0U3R5bGU/OiBTdHlsZVZhcmlhbnQ7XG4gIHN0eWxlQWxpYXNlcz86IEFycmF5T2JqZWN0O1xufVxuXG5mdW5jdGlvbiBjaGVja1RhZ0Zvcm1hdCh0YWc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0YWc7XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBlIHtcbiAgcHVibGljIHRhZzogc3RyaW5nO1xuICBwdWJsaWMga2luZDogS2luZFR5cGUgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGluc3RhbmNlT2Y6IEFueTtcbiAgcHVibGljIHByZWRpY2F0ZT86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gYm9vbGVhbjtcbiAgcHVibGljIHJlcHJlc2VudD86IFJlcHJlc2VudEZuIHwgQXJyYXlPYmplY3Q8UmVwcmVzZW50Rm4+O1xuICBwdWJsaWMgZGVmYXVsdFN0eWxlPzogU3R5bGVWYXJpYW50O1xuICBwdWJsaWMgc3R5bGVBbGlhc2VzPzogQXJyYXlPYmplY3Q7XG4gIHB1YmxpYyBsb2FkS2luZD86IEtpbmRUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHRhZzogc3RyaW5nLCBvcHRpb25zPzogVHlwZU9wdGlvbnMpIHtcbiAgICB0aGlzLnRhZyA9IGNoZWNrVGFnRm9ybWF0KHRhZyk7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMua2luZCA9IG9wdGlvbnMua2luZDtcbiAgICAgIHRoaXMucmVzb2x2ZSA9IG9wdGlvbnMucmVzb2x2ZSB8fCBERUZBVUxUX1JFU09MVkU7XG4gICAgICB0aGlzLmNvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0IHx8IERFRkFVTFRfQ09OU1RSVUNUO1xuICAgICAgdGhpcy5pbnN0YW5jZU9mID0gb3B0aW9ucy5pbnN0YW5jZU9mO1xuICAgICAgdGhpcy5wcmVkaWNhdGUgPSBvcHRpb25zLnByZWRpY2F0ZTtcbiAgICAgIHRoaXMucmVwcmVzZW50ID0gb3B0aW9ucy5yZXByZXNlbnQ7XG4gICAgICB0aGlzLmRlZmF1bHRTdHlsZSA9IG9wdGlvbnMuZGVmYXVsdFN0eWxlO1xuICAgICAgdGhpcy5zdHlsZUFsaWFzZXMgPSBvcHRpb25zLnN0eWxlQWxpYXNlcztcbiAgICB9XG4gIH1cbiAgcHVibGljIHJlc29sdmU6IChkYXRhPzogQW55KSA9PiBib29sZWFuID0gKCk6IGJvb2xlYW4gPT4gdHJ1ZTtcbiAgcHVibGljIGNvbnN0cnVjdDogKGRhdGE/OiBBbnkpID0+IEFueSA9IChkYXRhKTogQW55ID0+IGRhdGE7XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuZXhwb3J0IGNsYXNzIERlbm9TdGRJbnRlcm5hbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSBcIkRlbm9TdGRJbnRlcm5hbEVycm9yXCI7XG4gIH1cbn1cblxuLyoqIE1ha2UgYW4gYXNzZXJ0aW9uLCBpZiBub3QgYHRydWVgLCB0aGVuIHRocm93LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydChleHByOiB1bmtub3duLCBtc2cgPSBcIlwiKTogYXNzZXJ0cyBleHByIHtcbiAgaWYgKCFleHByKSB7XG4gICAgdGhyb3cgbmV3IERlbm9TdGRJbnRlcm5hbEVycm9yKG1zZyk7XG4gIH1cbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIFByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBgVWludDhBcnJheWAgYnl0ZSBzbGljZXMgdGhhdCBhcmUgbm90XG4gKiBpbmNsdWRlZCBvbiB0aGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLyoqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBuZWVkbGUgYXJyYXkgaW4gdGhlIHNvdXJjZVxuICogYXJyYXksIG9yIC0xIGlmIGl0IGlzIG5vdCBwcmVzZW50LlxuICpcbiAqIEEgc3RhcnQgaW5kZXggY2FuIGJlIHNwZWNpZmllZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQgdGhhdCBiZWdpbnMgdGhlIHNlYXJjaFxuICogYXQgdGhhdCBnaXZlbiBpbmRleC4gVGhlIHN0YXJ0IGluZGV4IGRlZmF1bHRzIHRvIHRoZSBzdGFydCBvZiB0aGUgYXJyYXkuXG4gKlxuICogVGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBPKHNvdXJjZS5sZW50aCAqIG5lZWRsZS5sZW5ndGgpLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbmRleE9mTmVlZGxlIH0gZnJvbSBcIi4vbW9kLnRzXCI7XG4gKiBjb25zdCBzb3VyY2UgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMiwgMSwgMiwgMSwgMiwgM10pO1xuICogY29uc3QgbmVlZGxlID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDJdKTtcbiAqIGNvbnNvbGUubG9nKGluZGV4T2ZOZWVkbGUoc291cmNlLCBuZWVkbGUpKTsgLy8gMVxuICogY29uc29sZS5sb2coaW5kZXhPZk5lZWRsZShzb3VyY2UsIG5lZWRsZSwgMikpOyAvLyAzXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2ZOZWVkbGUoXG4gIHNvdXJjZTogVWludDhBcnJheSxcbiAgbmVlZGxlOiBVaW50OEFycmF5LFxuICBzdGFydCA9IDAsXG4pOiBudW1iZXIge1xuICBpZiAoc3RhcnQgPj0gc291cmNlLmxlbmd0aCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSBNYXRoLm1heCgwLCBzb3VyY2UubGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGNvbnN0IHMgPSBuZWVkbGVbMF07XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VbaV0gIT09IHMpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHBpbiA9IGk7XG4gICAgbGV0IG1hdGNoZWQgPSAxO1xuICAgIGxldCBqID0gaTtcbiAgICB3aGlsZSAobWF0Y2hlZCA8IG5lZWRsZS5sZW5ndGgpIHtcbiAgICAgIGorKztcbiAgICAgIGlmIChzb3VyY2Vbal0gIT09IG5lZWRsZVtqIC0gcGluXSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1hdGNoZWQrKztcbiAgICB9XG4gICAgaWYgKG1hdGNoZWQgPT09IG5lZWRsZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBwaW47XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuLyoqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIG5lZWRsZSBhcnJheSBpbiB0aGUgc291cmNlXG4gKiBhcnJheSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKlxuICogQSBzdGFydCBpbmRleCBjYW4gYmUgc3BlY2lmaWVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudCB0aGF0IGJlZ2lucyB0aGUgc2VhcmNoXG4gKiBhdCB0aGF0IGdpdmVuIGluZGV4LiBUaGUgc3RhcnQgaW5kZXggZGVmYXVsdHMgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuXG4gKlxuICogVGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBPKHNvdXJjZS5sZW50aCAqIG5lZWRsZS5sZW5ndGgpLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBsYXN0SW5kZXhPZk5lZWRsZSB9IGZyb20gXCIuL21vZC50c1wiO1xuICogY29uc3Qgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDEsIDIsIDEsIDIsIDNdKTtcbiAqIGNvbnN0IG5lZWRsZSA9IG5ldyBVaW50OEFycmF5KFsxLCAyXSk7XG4gKiBjb25zb2xlLmxvZyhsYXN0SW5kZXhPZk5lZWRsZShzb3VyY2UsIG5lZWRsZSkpOyAvLyA1XG4gKiBjb25zb2xlLmxvZyhsYXN0SW5kZXhPZk5lZWRsZShzb3VyY2UsIG5lZWRsZSwgNCkpOyAvLyAzXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3RJbmRleE9mTmVlZGxlKFxuICBzb3VyY2U6IFVpbnQ4QXJyYXksXG4gIG5lZWRsZTogVWludDhBcnJheSxcbiAgc3RhcnQgPSBzb3VyY2UubGVuZ3RoIC0gMSxcbik6IG51bWJlciB7XG4gIGlmIChzdGFydCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKHN0YXJ0ID49IHNvdXJjZS5sZW5ndGgpIHtcbiAgICBzdGFydCA9IHNvdXJjZS5sZW5ndGggLSAxO1xuICB9XG4gIGNvbnN0IGUgPSBuZWVkbGVbbmVlZGxlLmxlbmd0aCAtIDFdO1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHNvdXJjZVtpXSAhPT0gZSkgY29udGludWU7XG4gICAgY29uc3QgcGluID0gaTtcbiAgICBsZXQgbWF0Y2hlZCA9IDE7XG4gICAgbGV0IGogPSBpO1xuICAgIHdoaWxlIChtYXRjaGVkIDwgbmVlZGxlLmxlbmd0aCkge1xuICAgICAgai0tO1xuICAgICAgaWYgKHNvdXJjZVtqXSAhPT0gbmVlZGxlW25lZWRsZS5sZW5ndGggLSAxIC0gKHBpbiAtIGopXSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1hdGNoZWQrKztcbiAgICB9XG4gICAgaWYgKG1hdGNoZWQgPT09IG5lZWRsZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBwaW4gLSBuZWVkbGUubGVuZ3RoICsgMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBwcmVmaXggYXJyYXkgYXBwZWFycyBhdCB0aGUgc3RhcnQgb2YgdGhlIHNvdXJjZSBhcnJheSxcbiAqIGZhbHNlIG90aGVyd2lzZS5cbiAqXG4gKiBUaGUgY29tcGxleGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGlzIE8ocHJlZml4Lmxlbmd0aCkuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHN0YXJ0c1dpdGggfSBmcm9tIFwiLi9tb2QudHNcIjtcbiAqIGNvbnN0IHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAxLCAyLCAxLCAyLCAzXSk7XG4gKiBjb25zdCBwcmVmaXggPSBuZXcgVWludDhBcnJheShbMCwgMSwgMl0pO1xuICogY29uc29sZS5sb2coc3RhcnRzV2l0aChzb3VyY2UsIHByZWZpeCkpOyAvLyB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc291cmNlOiBVaW50OEFycmF5LCBwcmVmaXg6IFVpbnQ4QXJyYXkpOiBib29sZWFuIHtcbiAgZm9yIChsZXQgaSA9IDAsIG1heCA9IHByZWZpeC5sZW5ndGg7IGkgPCBtYXg7IGkrKykge1xuICAgIGlmIChzb3VyY2VbaV0gIT09IHByZWZpeFtpXSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBzdWZmaXggYXJyYXkgYXBwZWFycyBhdCB0aGUgZW5kIG9mIHRoZSBzb3VyY2UgYXJyYXksXG4gKiBmYWxzZSBvdGhlcndpc2UuXG4gKlxuICogVGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBPKHN1ZmZpeC5sZW5ndGgpLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBlbmRzV2l0aCB9IGZyb20gXCIuL21vZC50c1wiO1xuICogY29uc3Qgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDEsIDIsIDEsIDIsIDNdKTtcbiAqIGNvbnN0IHN1ZmZpeCA9IG5ldyBVaW50OEFycmF5KFsxLCAyLCAzXSk7XG4gKiBjb25zb2xlLmxvZyhlbmRzV2l0aChzb3VyY2UsIHN1ZmZpeCkpOyAvLyB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZHNXaXRoKHNvdXJjZTogVWludDhBcnJheSwgc3VmZml4OiBVaW50OEFycmF5KTogYm9vbGVhbiB7XG4gIGZvciAoXG4gICAgbGV0IHNyY2kgPSBzb3VyY2UubGVuZ3RoIC0gMSwgc2Z4aSA9IHN1ZmZpeC5sZW5ndGggLSAxO1xuICAgIHNmeGkgPj0gMDtcbiAgICBzcmNpLS0sIHNmeGktLVxuICApIHtcbiAgICBpZiAoc291cmNlW3NyY2ldICE9PSBzdWZmaXhbc2Z4aV0pIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIFJldHVybnMgYSBuZXcgVWludDhBcnJheSBjb21wb3NlZCBvZiBgY291bnRgIHJlcGV0aXRpb25zIG9mIHRoZSBgc291cmNlYFxuICogYXJyYXkuXG4gKlxuICogSWYgYGNvdW50YCBpcyBuZWdhdGl2ZSwgYSBgUmFuZ2VFcnJvcmAgaXMgdGhyb3duLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyByZXBlYXQgfSBmcm9tIFwiLi9tb2QudHNcIjtcbiAqIGNvbnN0IHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyXSk7XG4gKiBjb25zb2xlLmxvZyhyZXBlYXQoc291cmNlLCAzKSk7IC8vIFswLCAxLCAyLCAwLCAxLCAyLCAwLCAxLCAyXVxuICogY29uc29sZS5sb2cocmVwZWF0KHNvdXJjZSwgMCkpOyAvLyBbXVxuICogY29uc29sZS5sb2cocmVwZWF0KHNvdXJjZSwgLTEpKTsgLy8gUmFuZ2VFcnJvclxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBlYXQoc291cmNlOiBVaW50OEFycmF5LCBjb3VudDogbnVtYmVyKTogVWludDhBcnJheSB7XG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheSgpO1xuICB9XG5cbiAgaWYgKGNvdW50IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiYnl0ZXM6IG5lZ2F0aXZlIHJlcGVhdCBjb3VudFwiKTtcbiAgfSBlbHNlIGlmICgoc291cmNlLmxlbmd0aCAqIGNvdW50KSAvIGNvdW50ICE9PSBzb3VyY2UubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYnl0ZXM6IHJlcGVhdCBjb3VudCBjYXVzZXMgb3ZlcmZsb3dcIik7XG4gIH1cblxuICBjb25zdCBpbnQgPSBNYXRoLmZsb29yKGNvdW50KTtcblxuICBpZiAoaW50ICE9PSBjb3VudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImJ5dGVzOiByZXBlYXQgY291bnQgbXVzdCBiZSBhbiBpbnRlZ2VyXCIpO1xuICB9XG5cbiAgY29uc3QgbmIgPSBuZXcgVWludDhBcnJheShzb3VyY2UubGVuZ3RoICogY291bnQpO1xuXG4gIGxldCBicCA9IGNvcHkoc291cmNlLCBuYik7XG5cbiAgZm9yICg7IGJwIDwgbmIubGVuZ3RoOyBicCAqPSAyKSB7XG4gICAgY29weShuYi5zbGljZSgwLCBicCksIG5iLCBicCk7XG4gIH1cblxuICByZXR1cm4gbmI7XG59XG5cbi8qKiBDb25jYXRlbmF0ZSB0aGUgZ2l2ZW4gYXJyYXlzIGludG8gYSBuZXcgVWludDhBcnJheS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY29uY2F0IH0gZnJvbSBcIi4vbW9kLnRzXCI7XG4gKiBjb25zdCBhID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDJdKTtcbiAqIGNvbnN0IGIgPSBuZXcgVWludDhBcnJheShbMywgNCwgNV0pO1xuICogY29uc29sZS5sb2coY29uY2F0KGEsIGIpKTsgLy8gWzAsIDEsIDIsIDMsIDQsIDVdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoLi4uYnVmOiBVaW50OEFycmF5W10pOiBVaW50OEFycmF5IHtcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIGZvciAoY29uc3QgYiBvZiBidWYpIHtcbiAgICBsZW5ndGggKz0gYi5sZW5ndGg7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICBsZXQgaW5kZXggPSAwO1xuICBmb3IgKGNvbnN0IGIgb2YgYnVmKSB7XG4gICAgb3V0cHV0LnNldChiLCBpbmRleCk7XG4gICAgaW5kZXggKz0gYi5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBzb3VyY2UgYXJyYXkgY29udGFpbnMgdGhlIG5lZWRsZSBhcnJheSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICpcbiAqIEEgc3RhcnQgaW5kZXggY2FuIGJlIHNwZWNpZmllZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQgdGhhdCBiZWdpbnMgdGhlIHNlYXJjaFxuICogYXQgdGhhdCBnaXZlbiBpbmRleC4gVGhlIHN0YXJ0IGluZGV4IGRlZmF1bHRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LlxuICpcbiAqIFRoZSBjb21wbGV4aXR5IG9mIHRoaXMgZnVuY3Rpb24gaXMgTyhzb3VyY2UubGVuZ3RoICogbmVlZGxlLmxlbmd0aCkuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGluY2x1ZGVzTmVlZGxlIH0gZnJvbSBcIi4vbW9kLnRzXCI7XG4gKiBjb25zdCBzb3VyY2UgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMiwgMSwgMiwgMSwgMiwgM10pO1xuICogY29uc3QgbmVlZGxlID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDJdKTtcbiAqIGNvbnNvbGUubG9nKGluY2x1ZGVzTmVlZGxlKHNvdXJjZSwgbmVlZGxlKSk7IC8vIHRydWVcbiAqIGNvbnNvbGUubG9nKGluY2x1ZGVzTmVlZGxlKHNvdXJjZSwgbmVlZGxlLCA2KSk7IC8vIGZhbHNlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzTmVlZGxlKFxuICBzb3VyY2U6IFVpbnQ4QXJyYXksXG4gIG5lZWRsZTogVWludDhBcnJheSxcbiAgc3RhcnQgPSAwLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBpbmRleE9mTmVlZGxlKHNvdXJjZSwgbmVlZGxlLCBzdGFydCkgIT09IC0xO1xufVxuXG4vKiogQ29weSBieXRlcyBmcm9tIHRoZSBgc3JjYCBhcnJheSB0byB0aGUgYGRzdGAgYXJyYXkuIFJldHVybnMgdGhlIG51bWJlciBvZlxuICogYnl0ZXMgY29waWVkLlxuICpcbiAqIElmIHRoZSBgc3JjYCBhcnJheSBpcyBsYXJnZXIgdGhhbiB3aGF0IHRoZSBgZHN0YCBhcnJheSBjYW4gaG9sZCwgb25seSB0aGVcbiAqIGFtb3VudCBvZiBieXRlcyB0aGF0IGZpdCBpbiB0aGUgYGRzdGAgYXJyYXkgYXJlIGNvcGllZC5cbiAqXG4gKiBBbiBvZmZzZXQgY2FuIGJlIHNwZWNpZmllZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQgdGhhdCBiZWdpbnMgdGhlIGNvcHkgYXRcbiAqIHRoYXQgZ2l2ZW4gaW5kZXggaW4gdGhlIGBkc3RgIGFycmF5LiBUaGUgb2Zmc2V0IGRlZmF1bHRzIHRvIHRoZSBiZWdpbm5pbmcgb2ZcbiAqIHRoZSBhcnJheS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY29weSB9IGZyb20gXCIuL21vZC50c1wiO1xuICogY29uc3Qgc3JjID0gbmV3IFVpbnQ4QXJyYXkoWzksIDgsIDddKTtcbiAqIGNvbnN0IGRzdCA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAzLCA0LCA1XSk7XG4gKiBjb25zb2xlLmxvZyhjb3B5KHNyYywgZHN0KSk7IC8vIDNcbiAqIGNvbnNvbGUubG9nKGRzdCk7IC8vIFs5LCA4LCA3LCAzLCA0LCA1XVxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNvcHkgfSBmcm9tIFwiLi9tb2QudHNcIjtcbiAqIGNvbnN0IHNyYyA9IG5ldyBVaW50OEFycmF5KFsxLCAxLCAxLCAxXSk7XG4gKiBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMF0pO1xuICogY29uc29sZS5sb2coY29weShzcmMsIGRzdCwgMSkpOyAvLyAzXG4gKiBjb25zb2xlLmxvZyhkc3QpOyAvLyBbMCwgMSwgMSwgMV1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weShzcmM6IFVpbnQ4QXJyYXksIGRzdDogVWludDhBcnJheSwgb2ZmID0gMCk6IG51bWJlciB7XG4gIG9mZiA9IE1hdGgubWF4KDAsIE1hdGgubWluKG9mZiwgZHN0LmJ5dGVMZW5ndGgpKTtcbiAgY29uc3QgZHN0Qnl0ZXNBdmFpbGFibGUgPSBkc3QuYnl0ZUxlbmd0aCAtIG9mZjtcbiAgaWYgKHNyYy5ieXRlTGVuZ3RoID4gZHN0Qnl0ZXNBdmFpbGFibGUpIHtcbiAgICBzcmMgPSBzcmMuc3ViYXJyYXkoMCwgZHN0Qnl0ZXNBdmFpbGFibGUpO1xuICB9XG4gIGRzdC5zZXQoc3JjLCBvZmYpO1xuICByZXR1cm4gc3JjLmJ5dGVMZW5ndGg7XG59XG5cbmV4cG9ydCB7IGVxdWFscyB9IGZyb20gXCIuL2VxdWFscy50c1wiO1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiLi4vX3V0aWwvYXNzZXJ0LnRzXCI7XG5pbXBvcnQgeyBCeXRlc0xpc3QgfSBmcm9tIFwiLi4vYnl0ZXMvYnl0ZXNfbGlzdC50c1wiO1xuaW1wb3J0IHsgY29uY2F0LCBjb3B5IH0gZnJvbSBcIi4uL2J5dGVzL21vZC50c1wiO1xuaW1wb3J0IHR5cGUgeyBSZWFkZXIsIFJlYWRlclN5bmMsIFdyaXRlciwgV3JpdGVyU3luYyB9IGZyb20gXCIuL3R5cGVzLmQudHNcIjtcblxuLy8gTUlOX1JFQUQgaXMgdGhlIG1pbmltdW0gQXJyYXlCdWZmZXIgc2l6ZSBwYXNzZWQgdG8gYSByZWFkIGNhbGwgYnlcbi8vIGJ1ZmZlci5SZWFkRnJvbS4gQXMgbG9uZyBhcyB0aGUgQnVmZmVyIGhhcyBhdCBsZWFzdCBNSU5fUkVBRCBieXRlcyBiZXlvbmRcbi8vIHdoYXQgaXMgcmVxdWlyZWQgdG8gaG9sZCB0aGUgY29udGVudHMgb2YgciwgcmVhZEZyb20oKSB3aWxsIG5vdCBncm93IHRoZVxuLy8gdW5kZXJseWluZyBidWZmZXIuXG5jb25zdCBNSU5fUkVBRCA9IDMyICogMTAyNDtcbmNvbnN0IE1BWF9TSVpFID0gMiAqKiAzMiAtIDI7XG5cbi8qKiBBIHZhcmlhYmxlLXNpemVkIGJ1ZmZlciBvZiBieXRlcyB3aXRoIGByZWFkKClgIGFuZCBgd3JpdGUoKWAgbWV0aG9kcy5cbiAqXG4gKiBCdWZmZXIgaXMgYWxtb3N0IGFsd2F5cyB1c2VkIHdpdGggc29tZSBJL08gbGlrZSBmaWxlcyBhbmQgc29ja2V0cy4gSXQgYWxsb3dzXG4gKiBvbmUgdG8gYnVmZmVyIHVwIGEgZG93bmxvYWQgZnJvbSBhIHNvY2tldC4gQnVmZmVyIGdyb3dzIGFuZCBzaHJpbmtzIGFzXG4gKiBuZWNlc3NhcnkuXG4gKlxuICogQnVmZmVyIGlzIE5PVCB0aGUgc2FtZSB0aGluZyBhcyBOb2RlJ3MgQnVmZmVyLiBOb2RlJ3MgQnVmZmVyIHdhcyBjcmVhdGVkIGluXG4gKiAyMDA5IGJlZm9yZSBKYXZhU2NyaXB0IGhhZCB0aGUgY29uY2VwdCBvZiBBcnJheUJ1ZmZlcnMuIEl0J3Mgc2ltcGx5IGFcbiAqIG5vbi1zdGFuZGFyZCBBcnJheUJ1ZmZlci5cbiAqXG4gKiBBcnJheUJ1ZmZlciBpcyBhIGZpeGVkIG1lbW9yeSBhbGxvY2F0aW9uLiBCdWZmZXIgaXMgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gKiBBcnJheUJ1ZmZlci5cbiAqXG4gKiBCYXNlZCBvbiBbR28gQnVmZmVyXShodHRwczovL2dvbGFuZy5vcmcvcGtnL2J5dGVzLyNCdWZmZXIpLiAqL1xuXG5leHBvcnQgY2xhc3MgQnVmZmVyIHtcbiAgI2J1ZjogVWludDhBcnJheTsgLy8gY29udGVudHMgYXJlIHRoZSBieXRlcyBidWZbb2ZmIDogbGVuKGJ1ZildXG4gICNvZmYgPSAwOyAvLyByZWFkIGF0IGJ1ZltvZmZdLCB3cml0ZSBhdCBidWZbYnVmLmJ5dGVMZW5ndGhdXG5cbiAgY29uc3RydWN0b3IoYWI/OiBBcnJheUJ1ZmZlckxpa2UgfCBBcnJheUxpa2U8bnVtYmVyPikge1xuICAgIHRoaXMuI2J1ZiA9IGFiID09PSB1bmRlZmluZWQgPyBuZXcgVWludDhBcnJheSgwKSA6IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGEgc2xpY2UgaG9sZGluZyB0aGUgdW5yZWFkIHBvcnRpb24gb2YgdGhlIGJ1ZmZlci5cbiAgICpcbiAgICogVGhlIHNsaWNlIGlzIHZhbGlkIGZvciB1c2Ugb25seSB1bnRpbCB0aGUgbmV4dCBidWZmZXIgbW9kaWZpY2F0aW9uICh0aGF0XG4gICAqIGlzLCBvbmx5IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gYSBtZXRob2QgbGlrZSBgcmVhZCgpYCwgYHdyaXRlKClgLFxuICAgKiBgcmVzZXQoKWAsIG9yIGB0cnVuY2F0ZSgpYCkuIElmIGBvcHRpb25zLmNvcHlgIGlzIGZhbHNlIHRoZSBzbGljZSBhbGlhc2VzIHRoZSBidWZmZXIgY29udGVudCBhdFxuICAgKiBsZWFzdCB1bnRpbCB0aGUgbmV4dCBidWZmZXIgbW9kaWZpY2F0aW9uLCBzbyBpbW1lZGlhdGUgY2hhbmdlcyB0byB0aGVcbiAgICogc2xpY2Ugd2lsbCBhZmZlY3QgdGhlIHJlc3VsdCBvZiBmdXR1cmUgcmVhZHMuXG4gICAqIEBwYXJhbSBvcHRpb25zIERlZmF1bHRzIHRvIGB7IGNvcHk6IHRydWUgfWBcbiAgICovXG4gIGJ5dGVzKG9wdGlvbnMgPSB7IGNvcHk6IHRydWUgfSk6IFVpbnQ4QXJyYXkge1xuICAgIGlmIChvcHRpb25zLmNvcHkgPT09IGZhbHNlKSByZXR1cm4gdGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI29mZik7XG4gICAgcmV0dXJuIHRoaXMuI2J1Zi5zbGljZSh0aGlzLiNvZmYpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgdW5yZWFkIHBvcnRpb24gb2YgdGhlIGJ1ZmZlciBpcyBlbXB0eS4gKi9cbiAgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2J1Zi5ieXRlTGVuZ3RoIDw9IHRoaXMuI29mZjtcbiAgfVxuXG4gIC8qKiBBIHJlYWQgb25seSBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIHVucmVhZCBwb3J0aW9uIG9mIHRoZSBidWZmZXIuICovXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jYnVmLmJ5dGVMZW5ndGggLSB0aGlzLiNvZmY7XG4gIH1cblxuICAvKiogVGhlIHJlYWQgb25seSBjYXBhY2l0eSBvZiB0aGUgYnVmZmVyJ3MgdW5kZXJseWluZyBieXRlIHNsaWNlLCB0aGF0IGlzLFxuICAgKiB0aGUgdG90YWwgc3BhY2UgYWxsb2NhdGVkIGZvciB0aGUgYnVmZmVyJ3MgZGF0YS4gKi9cbiAgZ2V0IGNhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2J1Zi5idWZmZXIuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIC8qKiBEaXNjYXJkcyBhbGwgYnV0IHRoZSBmaXJzdCBgbmAgdW5yZWFkIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlciBidXRcbiAgICogY29udGludWVzIHRvIHVzZSB0aGUgc2FtZSBhbGxvY2F0ZWQgc3RvcmFnZS4gSXQgdGhyb3dzIGlmIGBuYCBpc1xuICAgKiBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLiAqL1xuICB0cnVuY2F0ZShuOiBudW1iZXIpIHtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobiA8IDAgfHwgbiA+IHRoaXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBFcnJvcihcImJ5dGVzLkJ1ZmZlcjogdHJ1bmNhdGlvbiBvdXQgb2YgcmFuZ2VcIik7XG4gICAgfVxuICAgIHRoaXMuI3Jlc2xpY2UodGhpcy4jb2ZmICsgbik7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLiNyZXNsaWNlKDApO1xuICAgIHRoaXMuI29mZiA9IDA7XG4gIH1cblxuICAjdHJ5R3Jvd0J5UmVzbGljZShuOiBudW1iZXIpIHtcbiAgICBjb25zdCBsID0gdGhpcy4jYnVmLmJ5dGVMZW5ndGg7XG4gICAgaWYgKG4gPD0gdGhpcy5jYXBhY2l0eSAtIGwpIHtcbiAgICAgIHRoaXMuI3Jlc2xpY2UobCArIG4pO1xuICAgICAgcmV0dXJuIGw7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gICNyZXNsaWNlKGxlbjogbnVtYmVyKSB7XG4gICAgYXNzZXJ0KGxlbiA8PSB0aGlzLiNidWYuYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgIHRoaXMuI2J1ZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuI2J1Zi5idWZmZXIsIDAsIGxlbik7XG4gIH1cblxuICAvKiogUmVhZHMgdGhlIG5leHQgYHAubGVuZ3RoYCBieXRlcyBmcm9tIHRoZSBidWZmZXIgb3IgdW50aWwgdGhlIGJ1ZmZlciBpc1xuICAgKiBkcmFpbmVkLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gSWYgdGhlIGJ1ZmZlciBoYXMgbm8gZGF0YSB0b1xuICAgKiByZXR1cm4sIHRoZSByZXR1cm4gaXMgRU9GIChgbnVsbGApLiAqL1xuICByZWFkU3luYyhwOiBVaW50OEFycmF5KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZW1wdHkoKSkge1xuICAgICAgLy8gQnVmZmVyIGlzIGVtcHR5LCByZXNldCB0byByZWNvdmVyIHNwYWNlLlxuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgaWYgKHAuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyB0aGlzIGVkZ2UgY2FzZSBpcyB0ZXN0ZWQgaW4gJ2J1ZmZlclJlYWRFbXB0eUF0RU9GJyB0ZXN0XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG5yZWFkID0gY29weSh0aGlzLiNidWYuc3ViYXJyYXkodGhpcy4jb2ZmKSwgcCk7XG4gICAgdGhpcy4jb2ZmICs9IG5yZWFkO1xuICAgIHJldHVybiBucmVhZDtcbiAgfVxuXG4gIC8qKiBSZWFkcyB0aGUgbmV4dCBgcC5sZW5ndGhgIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlciBvciB1bnRpbCB0aGUgYnVmZmVyIGlzXG4gICAqIGRyYWluZWQuIFJlc29sdmVzIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gSWYgdGhlIGJ1ZmZlciBoYXMgbm9cbiAgICogZGF0YSB0byByZXR1cm4sIHJlc29sdmVzIHRvIEVPRiAoYG51bGxgKS5cbiAgICpcbiAgICogTk9URTogVGhpcyBtZXRob2RzIHJlYWRzIGJ5dGVzIHN5bmNocm9ub3VzbHk7IGl0J3MgcHJvdmlkZWQgZm9yXG4gICAqIGNvbXBhdGliaWxpdHkgd2l0aCBgUmVhZGVyYCBpbnRlcmZhY2VzLlxuICAgKi9cbiAgcmVhZChwOiBVaW50OEFycmF5KTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgY29uc3QgcnIgPSB0aGlzLnJlYWRTeW5jKHApO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocnIpO1xuICB9XG5cbiAgd3JpdGVTeW5jKHA6IFVpbnQ4QXJyYXkpOiBudW1iZXIge1xuICAgIGNvbnN0IG0gPSB0aGlzLiNncm93KHAuYnl0ZUxlbmd0aCk7XG4gICAgcmV0dXJuIGNvcHkocCwgdGhpcy4jYnVmLCBtKTtcbiAgfVxuXG4gIC8qKiBOT1RFOiBUaGlzIG1ldGhvZHMgd3JpdGVzIGJ5dGVzIHN5bmNocm9ub3VzbHk7IGl0J3MgcHJvdmlkZWQgZm9yXG4gICAqIGNvbXBhdGliaWxpdHkgd2l0aCBgV3JpdGVyYCBpbnRlcmZhY2UuICovXG4gIHdyaXRlKHA6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IG4gPSB0aGlzLndyaXRlU3luYyhwKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4pO1xuICB9XG5cbiAgI2dyb3cobjogbnVtYmVyKSB7XG4gICAgY29uc3QgbSA9IHRoaXMubGVuZ3RoO1xuICAgIC8vIElmIGJ1ZmZlciBpcyBlbXB0eSwgcmVzZXQgdG8gcmVjb3ZlciBzcGFjZS5cbiAgICBpZiAobSA9PT0gMCAmJiB0aGlzLiNvZmYgIT09IDApIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gICAgLy8gRmFzdDogVHJ5IHRvIGdyb3cgYnkgbWVhbnMgb2YgYSByZXNsaWNlLlxuICAgIGNvbnN0IGkgPSB0aGlzLiN0cnlHcm93QnlSZXNsaWNlKG4pO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICBjb25zdCBjID0gdGhpcy5jYXBhY2l0eTtcbiAgICBpZiAobiA8PSBNYXRoLmZsb29yKGMgLyAyKSAtIG0pIHtcbiAgICAgIC8vIFdlIGNhbiBzbGlkZSB0aGluZ3MgZG93biBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYSBuZXdcbiAgICAgIC8vIEFycmF5QnVmZmVyLiBXZSBvbmx5IG5lZWQgbStuIDw9IGMgdG8gc2xpZGUsIGJ1dFxuICAgICAgLy8gd2UgaW5zdGVhZCBsZXQgY2FwYWNpdHkgZ2V0IHR3aWNlIGFzIGxhcmdlIHNvIHdlXG4gICAgICAvLyBkb24ndCBzcGVuZCBhbGwgb3VyIHRpbWUgY29weWluZy5cbiAgICAgIGNvcHkodGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI29mZiksIHRoaXMuI2J1Zik7XG4gICAgfSBlbHNlIGlmIChjICsgbiA+IE1BWF9TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYnVmZmVyIGNhbm5vdCBiZSBncm93biBiZXlvbmQgdGhlIG1heGltdW0gc2l6ZS5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vdCBlbm91Z2ggc3BhY2UgYW55d2hlcmUsIHdlIG5lZWQgdG8gYWxsb2NhdGUuXG4gICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShNYXRoLm1pbigyICogYyArIG4sIE1BWF9TSVpFKSk7XG4gICAgICBjb3B5KHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNvZmYpLCBidWYpO1xuICAgICAgdGhpcy4jYnVmID0gYnVmO1xuICAgIH1cbiAgICAvLyBSZXN0b3JlIHRoaXMuI29mZiBhbmQgbGVuKHRoaXMuI2J1ZikuXG4gICAgdGhpcy4jb2ZmID0gMDtcbiAgICB0aGlzLiNyZXNsaWNlKE1hdGgubWluKG0gKyBuLCBNQVhfU0laRSkpO1xuICAgIHJldHVybiBtO1xuICB9XG5cbiAgLyoqIEdyb3dzIHRoZSBidWZmZXIncyBjYXBhY2l0eSwgaWYgbmVjZXNzYXJ5LCB0byBndWFyYW50ZWUgc3BhY2UgZm9yXG4gICAqIGFub3RoZXIgYG5gIGJ5dGVzLiBBZnRlciBgLmdyb3cobilgLCBhdCBsZWFzdCBgbmAgYnl0ZXMgY2FuIGJlIHdyaXR0ZW4gdG9cbiAgICogdGhlIGJ1ZmZlciB3aXRob3V0IGFub3RoZXIgYWxsb2NhdGlvbi4gSWYgYG5gIGlzIG5lZ2F0aXZlLCBgLmdyb3coKWAgd2lsbFxuICAgKiB0aHJvdy4gSWYgdGhlIGJ1ZmZlciBjYW4ndCBncm93IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAqXG4gICAqIEJhc2VkIG9uIEdvIExhbmcnc1xuICAgKiBbQnVmZmVyLkdyb3ddKGh0dHBzOi8vZ29sYW5nLm9yZy9wa2cvYnl0ZXMvI0J1ZmZlci5Hcm93KS4gKi9cbiAgZ3JvdyhuOiBudW1iZXIpIHtcbiAgICBpZiAobiA8IDApIHtcbiAgICAgIHRocm93IEVycm9yKFwiQnVmZmVyLmdyb3c6IG5lZ2F0aXZlIGNvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBtID0gdGhpcy4jZ3JvdyhuKTtcbiAgICB0aGlzLiNyZXNsaWNlKG0pO1xuICB9XG5cbiAgLyoqIFJlYWRzIGRhdGEgZnJvbSBgcmAgdW50aWwgRU9GIChgbnVsbGApIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBidWZmZXIsXG4gICAqIGdyb3dpbmcgdGhlIGJ1ZmZlciBhcyBuZWVkZWQuIEl0IHJlc29sdmVzIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC5cbiAgICogSWYgdGhlIGJ1ZmZlciBiZWNvbWVzIHRvbyBsYXJnZSwgYC5yZWFkRnJvbSgpYCB3aWxsIHJlamVjdCB3aXRoIGFuIGVycm9yLlxuICAgKlxuICAgKiBCYXNlZCBvbiBHbyBMYW5nJ3NcbiAgICogW0J1ZmZlci5SZWFkRnJvbV0oaHR0cHM6Ly9nb2xhbmcub3JnL3BrZy9ieXRlcy8jQnVmZmVyLlJlYWRGcm9tKS4gKi9cbiAgYXN5bmMgcmVhZEZyb20ocjogUmVhZGVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgbiA9IDA7XG4gICAgY29uc3QgdG1wID0gbmV3IFVpbnQ4QXJyYXkoTUlOX1JFQUQpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBzaG91bGRHcm93ID0gdGhpcy5jYXBhY2l0eSAtIHRoaXMubGVuZ3RoIDwgTUlOX1JFQUQ7XG4gICAgICAvLyByZWFkIGludG8gdG1wIGJ1ZmZlciBpZiB0aGVyZSdzIG5vdCBlbm91Z2ggcm9vbVxuICAgICAgLy8gb3RoZXJ3aXNlIHJlYWQgZGlyZWN0bHkgaW50byB0aGUgaW50ZXJuYWwgYnVmZmVyXG4gICAgICBjb25zdCBidWYgPSBzaG91bGRHcm93XG4gICAgICAgID8gdG1wXG4gICAgICAgIDogbmV3IFVpbnQ4QXJyYXkodGhpcy4jYnVmLmJ1ZmZlciwgdGhpcy5sZW5ndGgpO1xuXG4gICAgICBjb25zdCBucmVhZCA9IGF3YWl0IHIucmVhZChidWYpO1xuICAgICAgaWYgKG5yZWFkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuXG4gICAgICAvLyB3cml0ZSB3aWxsIGdyb3cgaWYgbmVlZGVkXG4gICAgICBpZiAoc2hvdWxkR3JvdykgdGhpcy53cml0ZVN5bmMoYnVmLnN1YmFycmF5KDAsIG5yZWFkKSk7XG4gICAgICBlbHNlIHRoaXMuI3Jlc2xpY2UodGhpcy5sZW5ndGggKyBucmVhZCk7XG5cbiAgICAgIG4gKz0gbnJlYWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlYWRzIGRhdGEgZnJvbSBgcmAgdW50aWwgRU9GIChgbnVsbGApIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBidWZmZXIsXG4gICAqIGdyb3dpbmcgdGhlIGJ1ZmZlciBhcyBuZWVkZWQuIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLiBJZiB0aGVcbiAgICogYnVmZmVyIGJlY29tZXMgdG9vIGxhcmdlLCBgLnJlYWRGcm9tU3luYygpYCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgKlxuICAgKiBCYXNlZCBvbiBHbyBMYW5nJ3NcbiAgICogW0J1ZmZlci5SZWFkRnJvbV0oaHR0cHM6Ly9nb2xhbmcub3JnL3BrZy9ieXRlcy8jQnVmZmVyLlJlYWRGcm9tKS4gKi9cbiAgcmVhZEZyb21TeW5jKHI6IFJlYWRlclN5bmMpOiBudW1iZXIge1xuICAgIGxldCBuID0gMDtcbiAgICBjb25zdCB0bXAgPSBuZXcgVWludDhBcnJheShNSU5fUkVBRCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHNob3VsZEdyb3cgPSB0aGlzLmNhcGFjaXR5IC0gdGhpcy5sZW5ndGggPCBNSU5fUkVBRDtcbiAgICAgIC8vIHJlYWQgaW50byB0bXAgYnVmZmVyIGlmIHRoZXJlJ3Mgbm90IGVub3VnaCByb29tXG4gICAgICAvLyBvdGhlcndpc2UgcmVhZCBkaXJlY3RseSBpbnRvIHRoZSBpbnRlcm5hbCBidWZmZXJcbiAgICAgIGNvbnN0IGJ1ZiA9IHNob3VsZEdyb3dcbiAgICAgICAgPyB0bXBcbiAgICAgICAgOiBuZXcgVWludDhBcnJheSh0aGlzLiNidWYuYnVmZmVyLCB0aGlzLmxlbmd0aCk7XG5cbiAgICAgIGNvbnN0IG5yZWFkID0gci5yZWFkU3luYyhidWYpO1xuICAgICAgaWYgKG5yZWFkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuXG4gICAgICAvLyB3cml0ZSB3aWxsIGdyb3cgaWYgbmVlZGVkXG4gICAgICBpZiAoc2hvdWxkR3JvdykgdGhpcy53cml0ZVN5bmMoYnVmLnN1YmFycmF5KDAsIG5yZWFkKSk7XG4gICAgICBlbHNlIHRoaXMuI3Jlc2xpY2UodGhpcy5sZW5ndGggKyBucmVhZCk7XG5cbiAgICAgIG4gKz0gbnJlYWQ7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfQlVGX1NJWkUgPSA0MDk2O1xuY29uc3QgTUlOX0JVRl9TSVpFID0gMTY7XG5jb25zdCBNQVhfQ09OU0VDVVRJVkVfRU1QVFlfUkVBRFMgPSAxMDA7XG5jb25zdCBDUiA9IFwiXFxyXCIuY2hhckNvZGVBdCgwKTtcbmNvbnN0IExGID0gXCJcXG5cIi5jaGFyQ29kZUF0KDApO1xuXG5leHBvcnQgY2xhc3MgQnVmZmVyRnVsbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBvdmVycmlkZSBuYW1lID0gXCJCdWZmZXJGdWxsRXJyb3JcIjtcbiAgY29uc3RydWN0b3IocHVibGljIHBhcnRpYWw6IFVpbnQ4QXJyYXkpIHtcbiAgICBzdXBlcihcIkJ1ZmZlciBmdWxsXCIpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJ0aWFsUmVhZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBvdmVycmlkZSBuYW1lID0gXCJQYXJ0aWFsUmVhZEVycm9yXCI7XG4gIHBhcnRpYWw/OiBVaW50OEFycmF5O1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVuY291bnRlcmVkIFVuZXhwZWN0ZWRFb2YsIGRhdGEgb25seSBwYXJ0aWFsbHkgcmVhZFwiKTtcbiAgfVxufVxuXG4vKiogUmVzdWx0IHR5cGUgcmV0dXJuZWQgYnkgb2YgQnVmUmVhZGVyLnJlYWRMaW5lKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRMaW5lUmVzdWx0IHtcbiAgbGluZTogVWludDhBcnJheTtcbiAgbW9yZTogYm9vbGVhbjtcbn1cblxuLyoqIEJ1ZlJlYWRlciBpbXBsZW1lbnRzIGJ1ZmZlcmluZyBmb3IgYSBSZWFkZXIgb2JqZWN0LiAqL1xuZXhwb3J0IGNsYXNzIEJ1ZlJlYWRlciBpbXBsZW1lbnRzIFJlYWRlciB7XG4gICNidWYhOiBVaW50OEFycmF5O1xuICAjcmQhOiBSZWFkZXI7IC8vIFJlYWRlciBwcm92aWRlZCBieSBjYWxsZXIuXG4gICNyID0gMDsgLy8gYnVmIHJlYWQgcG9zaXRpb24uXG4gICN3ID0gMDsgLy8gYnVmIHdyaXRlIHBvc2l0aW9uLlxuICAjZW9mID0gZmFsc2U7XG4gIC8vIHByaXZhdGUgbGFzdEJ5dGU6IG51bWJlcjtcbiAgLy8gcHJpdmF0ZSBsYXN0Q2hhclNpemU6IG51bWJlcjtcblxuICAvKiogcmV0dXJuIG5ldyBCdWZSZWFkZXIgdW5sZXNzIHIgaXMgQnVmUmVhZGVyICovXG4gIHN0YXRpYyBjcmVhdGUocjogUmVhZGVyLCBzaXplOiBudW1iZXIgPSBERUZBVUxUX0JVRl9TSVpFKTogQnVmUmVhZGVyIHtcbiAgICByZXR1cm4gciBpbnN0YW5jZW9mIEJ1ZlJlYWRlciA/IHIgOiBuZXcgQnVmUmVhZGVyKHIsIHNpemUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocmQ6IFJlYWRlciwgc2l6ZTogbnVtYmVyID0gREVGQVVMVF9CVUZfU0laRSkge1xuICAgIGlmIChzaXplIDwgTUlOX0JVRl9TSVpFKSB7XG4gICAgICBzaXplID0gTUlOX0JVRl9TSVpFO1xuICAgIH1cbiAgICB0aGlzLiNyZXNldChuZXcgVWludDhBcnJheShzaXplKSwgcmQpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHVuZGVybHlpbmcgYnVmZmVyIGluIGJ5dGVzLiAqL1xuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2J1Zi5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgYnVmZmVyZWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jdyAtIHRoaXMuI3I7XG4gIH1cblxuICAvLyBSZWFkcyBhIG5ldyBjaHVuayBpbnRvIHRoZSBidWZmZXIuXG4gICNmaWxsID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIFNsaWRlIGV4aXN0aW5nIGRhdGEgdG8gYmVnaW5uaW5nLlxuICAgIGlmICh0aGlzLiNyID4gMCkge1xuICAgICAgdGhpcy4jYnVmLmNvcHlXaXRoaW4oMCwgdGhpcy4jciwgdGhpcy4jdyk7XG4gICAgICB0aGlzLiN3IC09IHRoaXMuI3I7XG4gICAgICB0aGlzLiNyID0gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jdyA+PSB0aGlzLiNidWYuYnl0ZUxlbmd0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJidWZpbzogdHJpZWQgdG8gZmlsbCBmdWxsIGJ1ZmZlclwiKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIG5ldyBkYXRhOiB0cnkgYSBsaW1pdGVkIG51bWJlciBvZiB0aW1lcy5cbiAgICBmb3IgKGxldCBpID0gTUFYX0NPTlNFQ1VUSVZFX0VNUFRZX1JFQURTOyBpID4gMDsgaS0tKSB7XG4gICAgICBjb25zdCByciA9IGF3YWl0IHRoaXMuI3JkLnJlYWQodGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI3cpKTtcbiAgICAgIGlmIChyciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLiNlb2YgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhc3NlcnQocnIgPj0gMCwgXCJuZWdhdGl2ZSByZWFkXCIpO1xuICAgICAgdGhpcy4jdyArPSBycjtcbiAgICAgIGlmIChyciA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBObyBwcm9ncmVzcyBhZnRlciAke01BWF9DT05TRUNVVElWRV9FTVBUWV9SRUFEU30gcmVhZCgpIGNhbGxzYCxcbiAgICApO1xuICB9O1xuXG4gIC8qKiBEaXNjYXJkcyBhbnkgYnVmZmVyZWQgZGF0YSwgcmVzZXRzIGFsbCBzdGF0ZSwgYW5kIHN3aXRjaGVzXG4gICAqIHRoZSBidWZmZXJlZCByZWFkZXIgdG8gcmVhZCBmcm9tIHIuXG4gICAqL1xuICByZXNldChyOiBSZWFkZXIpIHtcbiAgICB0aGlzLiNyZXNldCh0aGlzLiNidWYsIHIpO1xuICB9XG5cbiAgI3Jlc2V0ID0gKGJ1ZjogVWludDhBcnJheSwgcmQ6IFJlYWRlcikgPT4ge1xuICAgIHRoaXMuI2J1ZiA9IGJ1ZjtcbiAgICB0aGlzLiNyZCA9IHJkO1xuICAgIHRoaXMuI2VvZiA9IGZhbHNlO1xuICAgIC8vIHRoaXMubGFzdEJ5dGUgPSAtMTtcbiAgICAvLyB0aGlzLmxhc3RDaGFyU2l6ZSA9IC0xO1xuICB9O1xuXG4gIC8qKiByZWFkcyBkYXRhIGludG8gcC5cbiAgICogSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byBwLlxuICAgKiBUaGUgYnl0ZXMgYXJlIHRha2VuIGZyb20gYXQgbW9zdCBvbmUgUmVhZCBvbiB0aGUgdW5kZXJseWluZyBSZWFkZXIsXG4gICAqIGhlbmNlIG4gbWF5IGJlIGxlc3MgdGhhbiBsZW4ocCkuXG4gICAqIFRvIHJlYWQgZXhhY3RseSBsZW4ocCkgYnl0ZXMsIHVzZSBpby5SZWFkRnVsbChiLCBwKS5cbiAgICovXG4gIGFzeW5jIHJlYWQocDogVWludDhBcnJheSk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuICAgIGxldCBycjogbnVtYmVyIHwgbnVsbCA9IHAuYnl0ZUxlbmd0aDtcbiAgICBpZiAocC5ieXRlTGVuZ3RoID09PSAwKSByZXR1cm4gcnI7XG5cbiAgICBpZiAodGhpcy4jciA9PT0gdGhpcy4jdykge1xuICAgICAgaWYgKHAuYnl0ZUxlbmd0aCA+PSB0aGlzLiNidWYuYnl0ZUxlbmd0aCkge1xuICAgICAgICAvLyBMYXJnZSByZWFkLCBlbXB0eSBidWZmZXIuXG4gICAgICAgIC8vIFJlYWQgZGlyZWN0bHkgaW50byBwIHRvIGF2b2lkIGNvcHkuXG4gICAgICAgIGNvbnN0IHJyID0gYXdhaXQgdGhpcy4jcmQucmVhZChwKTtcbiAgICAgICAgY29uc3QgbnJlYWQgPSByciA/PyAwO1xuICAgICAgICBhc3NlcnQobnJlYWQgPj0gMCwgXCJuZWdhdGl2ZSByZWFkXCIpO1xuICAgICAgICAvLyBpZiAocnIubnJlYWQgPiAwKSB7XG4gICAgICAgIC8vICAgdGhpcy5sYXN0Qnl0ZSA9IHBbcnIubnJlYWQgLSAxXTtcbiAgICAgICAgLy8gICB0aGlzLmxhc3RDaGFyU2l6ZSA9IC0xO1xuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiBycjtcbiAgICAgIH1cblxuICAgICAgLy8gT25lIHJlYWQuXG4gICAgICAvLyBEbyBub3QgdXNlIHRoaXMuZmlsbCwgd2hpY2ggd2lsbCBsb29wLlxuICAgICAgdGhpcy4jciA9IDA7XG4gICAgICB0aGlzLiN3ID0gMDtcbiAgICAgIHJyID0gYXdhaXQgdGhpcy4jcmQucmVhZCh0aGlzLiNidWYpO1xuICAgICAgaWYgKHJyID09PSAwIHx8IHJyID09PSBudWxsKSByZXR1cm4gcnI7XG4gICAgICBhc3NlcnQocnIgPj0gMCwgXCJuZWdhdGl2ZSByZWFkXCIpO1xuICAgICAgdGhpcy4jdyArPSBycjtcbiAgICB9XG5cbiAgICAvLyBjb3B5IGFzIG11Y2ggYXMgd2UgY2FuXG4gICAgY29uc3QgY29waWVkID0gY29weSh0aGlzLiNidWYuc3ViYXJyYXkodGhpcy4jciwgdGhpcy4jdyksIHAsIDApO1xuICAgIHRoaXMuI3IgKz0gY29waWVkO1xuICAgIC8vIHRoaXMubGFzdEJ5dGUgPSB0aGlzLmJ1Zlt0aGlzLnIgLSAxXTtcbiAgICAvLyB0aGlzLmxhc3RDaGFyU2l6ZSA9IC0xO1xuICAgIHJldHVybiBjb3BpZWQ7XG4gIH1cblxuICAvKiogcmVhZHMgZXhhY3RseSBgcC5sZW5ndGhgIGJ5dGVzIGludG8gYHBgLlxuICAgKlxuICAgKiBJZiBzdWNjZXNzZnVsLCBgcGAgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIElmIHRoZSBlbmQgb2YgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGhhcyBiZWVuIHJlYWNoZWQsIGFuZCB0aGVyZSBhcmUgbm8gbW9yZVxuICAgKiBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlciwgYHJlYWRGdWxsKClgIHJldHVybnMgYG51bGxgIGluc3RlYWQuXG4gICAqXG4gICAqIEFuIGVycm9yIGlzIHRocm93biBpZiBzb21lIGJ5dGVzIGNvdWxkIGJlIHJlYWQsIGJ1dCBub3QgZW5vdWdoIHRvIGZpbGwgYHBgXG4gICAqIGVudGlyZWx5IGJlZm9yZSB0aGUgdW5kZXJseWluZyBzdHJlYW0gcmVwb3J0ZWQgYW4gZXJyb3Igb3IgRU9GLiBBbnkgZXJyb3JcbiAgICogdGhyb3duIHdpbGwgaGF2ZSBhIGBwYXJ0aWFsYCBwcm9wZXJ0eSB0aGF0IGluZGljYXRlcyB0aGUgc2xpY2Ugb2YgdGhlXG4gICAqIGJ1ZmZlciB0aGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBmaWxsZWQgd2l0aCBkYXRhLlxuICAgKlxuICAgKiBQb3J0ZWQgZnJvbSBodHRwczovL2dvbGFuZy5vcmcvcGtnL2lvLyNSZWFkRnVsbFxuICAgKi9cbiAgYXN5bmMgcmVhZEZ1bGwocDogVWludDhBcnJheSk6IFByb21pc2U8VWludDhBcnJheSB8IG51bGw+IHtcbiAgICBsZXQgYnl0ZXNSZWFkID0gMDtcbiAgICB3aGlsZSAoYnl0ZXNSZWFkIDwgcC5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJyID0gYXdhaXQgdGhpcy5yZWFkKHAuc3ViYXJyYXkoYnl0ZXNSZWFkKSk7XG4gICAgICAgIGlmIChyciA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmIChieXRlc1JlYWQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFydGlhbFJlYWRFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBieXRlc1JlYWQgKz0gcnI7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFBhcnRpYWxSZWFkRXJyb3IpIHtcbiAgICAgICAgICBlcnIucGFydGlhbCA9IHAuc3ViYXJyYXkoMCwgYnl0ZXNSZWFkKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGNvbnN0IGUgPSBuZXcgUGFydGlhbFJlYWRFcnJvcigpO1xuICAgICAgICAgIGUucGFydGlhbCA9IHAuc3ViYXJyYXkoMCwgYnl0ZXNSZWFkKTtcbiAgICAgICAgICBlLnN0YWNrID0gZXJyLnN0YWNrO1xuICAgICAgICAgIGUubWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGUuY2F1c2UgPSBlcnIuY2F1c2U7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgbmV4dCBieXRlIFswLCAyNTVdIG9yIGBudWxsYC4gKi9cbiAgYXN5bmMgcmVhZEJ5dGUoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgd2hpbGUgKHRoaXMuI3IgPT09IHRoaXMuI3cpIHtcbiAgICAgIGlmICh0aGlzLiNlb2YpIHJldHVybiBudWxsO1xuICAgICAgYXdhaXQgdGhpcy4jZmlsbCgpOyAvLyBidWZmZXIgaXMgZW1wdHkuXG4gICAgfVxuICAgIGNvbnN0IGMgPSB0aGlzLiNidWZbdGhpcy4jcl07XG4gICAgdGhpcy4jcisrO1xuICAgIC8vIHRoaXMubGFzdEJ5dGUgPSBjO1xuICAgIHJldHVybiBjO1xuICB9XG5cbiAgLyoqIHJlYWRTdHJpbmcoKSByZWFkcyB1bnRpbCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBkZWxpbSBpbiB0aGUgaW5wdXQsXG4gICAqIHJldHVybmluZyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkYXRhIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGRlbGltaXRlci5cbiAgICogSWYgUmVhZFN0cmluZyBlbmNvdW50ZXJzIGFuIGVycm9yIGJlZm9yZSBmaW5kaW5nIGEgZGVsaW1pdGVyLFxuICAgKiBpdCByZXR1cm5zIHRoZSBkYXRhIHJlYWQgYmVmb3JlIHRoZSBlcnJvciBhbmQgdGhlIGVycm9yIGl0c2VsZlxuICAgKiAob2Z0ZW4gYG51bGxgKS5cbiAgICogUmVhZFN0cmluZyByZXR1cm5zIGVyciAhPSBuaWwgaWYgYW5kIG9ubHkgaWYgdGhlIHJldHVybmVkIGRhdGEgZG9lcyBub3QgZW5kXG4gICAqIGluIGRlbGltLlxuICAgKiBGb3Igc2ltcGxlIHVzZXMsIGEgU2Nhbm5lciBtYXkgYmUgbW9yZSBjb252ZW5pZW50LlxuICAgKi9cbiAgYXN5bmMgcmVhZFN0cmluZyhkZWxpbTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKGRlbGltLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVsaW1pdGVyIHNob3VsZCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXJcIik7XG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMucmVhZFNsaWNlKGRlbGltLmNoYXJDb2RlQXQoMCkpO1xuICAgIGlmIChidWZmZXIgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnVmZmVyKTtcbiAgfVxuXG4gIC8qKiBgcmVhZExpbmUoKWAgaXMgYSBsb3ctbGV2ZWwgbGluZS1yZWFkaW5nIHByaW1pdGl2ZS4gTW9zdCBjYWxsZXJzIHNob3VsZFxuICAgKiB1c2UgYHJlYWRTdHJpbmcoJ1xcbicpYCBpbnN0ZWFkIG9yIHVzZSBhIFNjYW5uZXIuXG4gICAqXG4gICAqIGByZWFkTGluZSgpYCB0cmllcyB0byByZXR1cm4gYSBzaW5nbGUgbGluZSwgbm90IGluY2x1ZGluZyB0aGUgZW5kLW9mLWxpbmVcbiAgICogYnl0ZXMuIElmIHRoZSBsaW5lIHdhcyB0b28gbG9uZyBmb3IgdGhlIGJ1ZmZlciB0aGVuIGBtb3JlYCBpcyBzZXQgYW5kIHRoZVxuICAgKiBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgaXMgcmV0dXJuZWQuIFRoZSByZXN0IG9mIHRoZSBsaW5lIHdpbGwgYmUgcmV0dXJuZWRcbiAgICogZnJvbSBmdXR1cmUgY2FsbHMuIGBtb3JlYCB3aWxsIGJlIGZhbHNlIHdoZW4gcmV0dXJuaW5nIHRoZSBsYXN0IGZyYWdtZW50XG4gICAqIG9mIHRoZSBsaW5lLiBUaGUgcmV0dXJuZWQgYnVmZmVyIGlzIG9ubHkgdmFsaWQgdW50aWwgdGhlIG5leHQgY2FsbCB0b1xuICAgKiBgcmVhZExpbmUoKWAuXG4gICAqXG4gICAqIFRoZSB0ZXh0IHJldHVybmVkIGZyb20gUmVhZExpbmUgZG9lcyBub3QgaW5jbHVkZSB0aGUgbGluZSBlbmQgKFwiXFxyXFxuXCIgb3JcbiAgICogXCJcXG5cIikuXG4gICAqXG4gICAqIFdoZW4gdGhlIGVuZCBvZiB0aGUgdW5kZXJseWluZyBzdHJlYW0gaXMgcmVhY2hlZCwgdGhlIGZpbmFsIGJ5dGVzIGluIHRoZVxuICAgKiBzdHJlYW0gYXJlIHJldHVybmVkLiBObyBpbmRpY2F0aW9uIG9yIGVycm9yIGlzIGdpdmVuIGlmIHRoZSBpbnB1dCBlbmRzXG4gICAqIHdpdGhvdXQgYSBmaW5hbCBsaW5lIGVuZC4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB0cmFpbGluZyBieXRlcyB0byByZWFkLFxuICAgKiBgcmVhZExpbmUoKWAgcmV0dXJucyBgbnVsbGAuXG4gICAqXG4gICAqIENhbGxpbmcgYHVucmVhZEJ5dGUoKWAgYWZ0ZXIgYHJlYWRMaW5lKClgIHdpbGwgYWx3YXlzIHVucmVhZCB0aGUgbGFzdCBieXRlXG4gICAqIHJlYWQgKHBvc3NpYmx5IGEgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0aGUgbGluZSBlbmQpIGV2ZW4gaWYgdGhhdCBieXRlIGlzXG4gICAqIG5vdCBwYXJ0IG9mIHRoZSBsaW5lIHJldHVybmVkIGJ5IGByZWFkTGluZSgpYC5cbiAgICovXG4gIGFzeW5jIHJlYWRMaW5lKCk6IFByb21pc2U8UmVhZExpbmVSZXN1bHQgfCBudWxsPiB7XG4gICAgbGV0IGxpbmU6IFVpbnQ4QXJyYXkgfCBudWxsID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBsaW5lID0gYXdhaXQgdGhpcy5yZWFkU2xpY2UoTEYpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbGV0IHBhcnRpYWw7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgUGFydGlhbFJlYWRFcnJvcikge1xuICAgICAgICBwYXJ0aWFsID0gZXJyLnBhcnRpYWw7XG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBwYXJ0aWFsIGluc3RhbmNlb2YgVWludDhBcnJheSxcbiAgICAgICAgICBcImJ1ZmlvOiBjYXVnaHQgZXJyb3IgZnJvbSBgcmVhZFNsaWNlKClgIHdpdGhvdXQgYHBhcnRpYWxgIHByb3BlcnR5XCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIERvbid0IHRocm93IGlmIGByZWFkU2xpY2UoKWAgZmFpbGVkIHdpdGggYEJ1ZmZlckZ1bGxFcnJvcmAsIGluc3RlYWQgd2VcbiAgICAgIC8vIGp1c3QgcmV0dXJuIHdoYXRldmVyIGlzIGF2YWlsYWJsZSBhbmQgc2V0IHRoZSBgbW9yZWAgZmxhZy5cbiAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEJ1ZmZlckZ1bGxFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICBwYXJ0aWFsID0gZXJyLnBhcnRpYWw7XG5cbiAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBcIlxcclxcblwiIHN0cmFkZGxlcyB0aGUgYnVmZmVyLlxuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy4jZW9mICYmIHBhcnRpYWwgJiZcbiAgICAgICAgcGFydGlhbC5ieXRlTGVuZ3RoID4gMCAmJlxuICAgICAgICBwYXJ0aWFsW3BhcnRpYWwuYnl0ZUxlbmd0aCAtIDFdID09PSBDUlxuICAgICAgKSB7XG4gICAgICAgIC8vIFB1dCB0aGUgJ1xccicgYmFjayBvbiBidWYgYW5kIGRyb3AgaXQgZnJvbSBsaW5lLlxuICAgICAgICAvLyBMZXQgdGhlIG5leHQgY2FsbCB0byBSZWFkTGluZSBjaGVjayBmb3IgXCJcXHJcXG5cIi5cbiAgICAgICAgYXNzZXJ0KHRoaXMuI3IgPiAwLCBcImJ1ZmlvOiB0cmllZCB0byByZXdpbmQgcGFzdCBzdGFydCBvZiBidWZmZXJcIik7XG4gICAgICAgIHRoaXMuI3ItLTtcbiAgICAgICAgcGFydGlhbCA9IHBhcnRpYWwuc3ViYXJyYXkoMCwgcGFydGlhbC5ieXRlTGVuZ3RoIC0gMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiB7IGxpbmU6IHBhcnRpYWwsIG1vcmU6ICF0aGlzLiNlb2YgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGluZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGxpbmUuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHsgbGluZSwgbW9yZTogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBpZiAobGluZVtsaW5lLmJ5dGVMZW5ndGggLSAxXSA9PSBMRikge1xuICAgICAgbGV0IGRyb3AgPSAxO1xuICAgICAgaWYgKGxpbmUuYnl0ZUxlbmd0aCA+IDEgJiYgbGluZVtsaW5lLmJ5dGVMZW5ndGggLSAyXSA9PT0gQ1IpIHtcbiAgICAgICAgZHJvcCA9IDI7XG4gICAgICB9XG4gICAgICBsaW5lID0gbGluZS5zdWJhcnJheSgwLCBsaW5lLmJ5dGVMZW5ndGggLSBkcm9wKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbGluZSwgbW9yZTogZmFsc2UgfTtcbiAgfVxuXG4gIC8qKiBgcmVhZFNsaWNlKClgIHJlYWRzIHVudGlsIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGBkZWxpbWAgaW4gdGhlIGlucHV0LFxuICAgKiByZXR1cm5pbmcgYSBzbGljZSBwb2ludGluZyBhdCB0aGUgYnl0ZXMgaW4gdGhlIGJ1ZmZlci4gVGhlIGJ5dGVzIHN0b3BcbiAgICogYmVpbmcgdmFsaWQgYXQgdGhlIG5leHQgcmVhZC5cbiAgICpcbiAgICogSWYgYHJlYWRTbGljZSgpYCBlbmNvdW50ZXJzIGFuIGVycm9yIGJlZm9yZSBmaW5kaW5nIGEgZGVsaW1pdGVyLCBvciB0aGVcbiAgICogYnVmZmVyIGZpbGxzIHdpdGhvdXQgZmluZGluZyBhIGRlbGltaXRlciwgaXQgdGhyb3dzIGFuIGVycm9yIHdpdGggYVxuICAgKiBgcGFydGlhbGAgcHJvcGVydHkgdGhhdCBjb250YWlucyB0aGUgZW50aXJlIGJ1ZmZlci5cbiAgICpcbiAgICogSWYgYHJlYWRTbGljZSgpYCBlbmNvdW50ZXJzIHRoZSBlbmQgb2YgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGFuZCB0aGVyZSBhcmVcbiAgICogYW55IGJ5dGVzIGxlZnQgaW4gdGhlIGJ1ZmZlciwgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlciBpcyByZXR1cm5lZC4gSW4gb3RoZXJcbiAgICogd29yZHMsIEVPRiBpcyBhbHdheXMgdHJlYXRlZCBhcyBhIGRlbGltaXRlci4gT25jZSB0aGUgYnVmZmVyIGlzIGVtcHR5LFxuICAgKiBpdCByZXR1cm5zIGBudWxsYC5cbiAgICpcbiAgICogQmVjYXVzZSB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIGByZWFkU2xpY2UoKWAgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGVcbiAgICogbmV4dCBJL08gb3BlcmF0aW9uLCBtb3N0IGNsaWVudHMgc2hvdWxkIHVzZSBgcmVhZFN0cmluZygpYCBpbnN0ZWFkLlxuICAgKi9cbiAgYXN5bmMgcmVhZFNsaWNlKGRlbGltOiBudW1iZXIpOiBQcm9taXNlPFVpbnQ4QXJyYXkgfCBudWxsPiB7XG4gICAgbGV0IHMgPSAwOyAvLyBzZWFyY2ggc3RhcnQgaW5kZXhcbiAgICBsZXQgc2xpY2U6IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gU2VhcmNoIGJ1ZmZlci5cbiAgICAgIGxldCBpID0gdGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI3IgKyBzLCB0aGlzLiN3KS5pbmRleE9mKGRlbGltKTtcbiAgICAgIGlmIChpID49IDApIHtcbiAgICAgICAgaSArPSBzO1xuICAgICAgICBzbGljZSA9IHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNyLCB0aGlzLiNyICsgaSArIDEpO1xuICAgICAgICB0aGlzLiNyICs9IGkgKyAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gRU9GP1xuICAgICAgaWYgKHRoaXMuI2VvZikge1xuICAgICAgICBpZiAodGhpcy4jciA9PT0gdGhpcy4jdykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHNsaWNlID0gdGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI3IsIHRoaXMuI3cpO1xuICAgICAgICB0aGlzLiNyID0gdGhpcy4jdztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1ZmZlciBmdWxsP1xuICAgICAgaWYgKHRoaXMuYnVmZmVyZWQoKSA+PSB0aGlzLiNidWYuYnl0ZUxlbmd0aCkge1xuICAgICAgICB0aGlzLiNyID0gdGhpcy4jdztcbiAgICAgICAgLy8gIzQ1MjEgVGhlIGludGVybmFsIGJ1ZmZlciBzaG91bGQgbm90IGJlIHJldXNlZCBhY3Jvc3MgcmVhZHMgYmVjYXVzZSBpdCBjYXVzZXMgY29ycnVwdGlvbiBvZiBkYXRhLlxuICAgICAgICBjb25zdCBvbGRidWYgPSB0aGlzLiNidWY7XG4gICAgICAgIGNvbnN0IG5ld2J1ZiA9IHRoaXMuI2J1Zi5zbGljZSgwKTtcbiAgICAgICAgdGhpcy4jYnVmID0gbmV3YnVmO1xuICAgICAgICB0aHJvdyBuZXcgQnVmZmVyRnVsbEVycm9yKG9sZGJ1Zik7XG4gICAgICB9XG5cbiAgICAgIHMgPSB0aGlzLiN3IC0gdGhpcy4jcjsgLy8gZG8gbm90IHJlc2NhbiBhcmVhIHdlIHNjYW5uZWQgYmVmb3JlXG5cbiAgICAgIC8vIEJ1ZmZlciBpcyBub3QgZnVsbC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI2ZpbGwoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgUGFydGlhbFJlYWRFcnJvcikge1xuICAgICAgICAgIGVyci5wYXJ0aWFsID0gc2xpY2U7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBlID0gbmV3IFBhcnRpYWxSZWFkRXJyb3IoKTtcbiAgICAgICAgICBlLnBhcnRpYWwgPSBzbGljZTtcbiAgICAgICAgICBlLnN0YWNrID0gZXJyLnN0YWNrO1xuICAgICAgICAgIGUubWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGUuY2F1c2UgPSBlcnIuY2F1c2U7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgbGFzdCBieXRlLCBpZiBhbnkuXG4gICAgLy8gY29uc3QgaSA9IHNsaWNlLmJ5dGVMZW5ndGggLSAxO1xuICAgIC8vIGlmIChpID49IDApIHtcbiAgICAvLyAgIHRoaXMubGFzdEJ5dGUgPSBzbGljZVtpXTtcbiAgICAvLyAgIHRoaXMubGFzdENoYXJTaXplID0gLTFcbiAgICAvLyB9XG5cbiAgICByZXR1cm4gc2xpY2U7XG4gIH1cblxuICAvKiogYHBlZWsoKWAgcmV0dXJucyB0aGUgbmV4dCBgbmAgYnl0ZXMgd2l0aG91dCBhZHZhbmNpbmcgdGhlIHJlYWRlci4gVGhlXG4gICAqIGJ5dGVzIHN0b3AgYmVpbmcgdmFsaWQgYXQgdGhlIG5leHQgcmVhZCBjYWxsLlxuICAgKlxuICAgKiBXaGVuIHRoZSBlbmQgb2YgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGlzIHJlYWNoZWQsIGJ1dCB0aGVyZSBhcmUgdW5yZWFkXG4gICAqIGJ5dGVzIGxlZnQgaW4gdGhlIGJ1ZmZlciwgdGhvc2UgYnl0ZXMgYXJlIHJldHVybmVkLiBJZiB0aGVyZSBhcmUgbm8gYnl0ZXNcbiAgICogbGVmdCBpbiB0aGUgYnVmZmVyLCBpdCByZXR1cm5zIGBudWxsYC5cbiAgICpcbiAgICogSWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgYmVmb3JlIGBuYCBieXRlcyBhcmUgYXZhaWxhYmxlLCBgcGVlaygpYCB0aHJvd3NcbiAgICogYW4gZXJyb3Igd2l0aCB0aGUgYHBhcnRpYWxgIHByb3BlcnR5IHNldCB0byBhIHNsaWNlIG9mIHRoZSBidWZmZXIgdGhhdFxuICAgKiBjb250YWlucyB0aGUgYnl0ZXMgdGhhdCB3ZXJlIGF2YWlsYWJsZSBiZWZvcmUgdGhlIGVycm9yIG9jY3VycmVkLlxuICAgKi9cbiAgYXN5bmMgcGVlayhuOiBudW1iZXIpOiBQcm9taXNlPFVpbnQ4QXJyYXkgfCBudWxsPiB7XG4gICAgaWYgKG4gPCAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIm5lZ2F0aXZlIGNvdW50XCIpO1xuICAgIH1cblxuICAgIGxldCBhdmFpbCA9IHRoaXMuI3cgLSB0aGlzLiNyO1xuICAgIHdoaWxlIChhdmFpbCA8IG4gJiYgYXZhaWwgPCB0aGlzLiNidWYuYnl0ZUxlbmd0aCAmJiAhdGhpcy4jZW9mKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLiNmaWxsKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFBhcnRpYWxSZWFkRXJyb3IpIHtcbiAgICAgICAgICBlcnIucGFydGlhbCA9IHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNyLCB0aGlzLiN3KTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGNvbnN0IGUgPSBuZXcgUGFydGlhbFJlYWRFcnJvcigpO1xuICAgICAgICAgIGUucGFydGlhbCA9IHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNyLCB0aGlzLiN3KTtcbiAgICAgICAgICBlLnN0YWNrID0gZXJyLnN0YWNrO1xuICAgICAgICAgIGUubWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGUuY2F1c2UgPSBlcnIuY2F1c2U7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIGF2YWlsID0gdGhpcy4jdyAtIHRoaXMuI3I7XG4gICAgfVxuXG4gICAgaWYgKGF2YWlsID09PSAwICYmIHRoaXMuI2VvZikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChhdmFpbCA8IG4gJiYgdGhpcy4jZW9mKSB7XG4gICAgICByZXR1cm4gdGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI3IsIHRoaXMuI3IgKyBhdmFpbCk7XG4gICAgfSBlbHNlIGlmIChhdmFpbCA8IG4pIHtcbiAgICAgIHRocm93IG5ldyBCdWZmZXJGdWxsRXJyb3IodGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI3IsIHRoaXMuI3cpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI3IsIHRoaXMuI3IgKyBuKTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEJ1ZkJhc2Uge1xuICBidWY6IFVpbnQ4QXJyYXk7XG4gIHVzZWRCdWZmZXJCeXRlcyA9IDA7XG4gIGVycjogRXJyb3IgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihidWY6IFVpbnQ4QXJyYXkpIHtcbiAgICB0aGlzLmJ1ZiA9IGJ1ZjtcbiAgfVxuXG4gIC8qKiBTaXplIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIHVuZGVybHlpbmcgYnVmZmVyIGluIGJ5dGVzLiAqL1xuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYnVmLmJ5dGVMZW5ndGg7XG4gIH1cblxuICAvKiogUmV0dXJucyBob3cgbWFueSBieXRlcyBhcmUgdW51c2VkIGluIHRoZSBidWZmZXIuICovXG4gIGF2YWlsYWJsZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJ1Zi5ieXRlTGVuZ3RoIC0gdGhpcy51c2VkQnVmZmVyQnl0ZXM7XG4gIH1cblxuICAvKiogYnVmZmVyZWQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHdyaXR0ZW4gaW50byB0aGVcbiAgICogY3VycmVudCBidWZmZXIuXG4gICAqL1xuICBidWZmZXJlZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnVzZWRCdWZmZXJCeXRlcztcbiAgfVxufVxuXG4vKiogQnVmV3JpdGVyIGltcGxlbWVudHMgYnVmZmVyaW5nIGZvciBhbiBkZW5vLldyaXRlciBvYmplY3QuXG4gKiBJZiBhbiBlcnJvciBvY2N1cnMgd3JpdGluZyB0byBhIFdyaXRlciwgbm8gbW9yZSBkYXRhIHdpbGwgYmVcbiAqIGFjY2VwdGVkIGFuZCBhbGwgc3Vic2VxdWVudCB3cml0ZXMsIGFuZCBmbHVzaCgpLCB3aWxsIHJldHVybiB0aGUgZXJyb3IuXG4gKiBBZnRlciBhbGwgZGF0YSBoYXMgYmVlbiB3cml0dGVuLCB0aGUgY2xpZW50IHNob3VsZCBjYWxsIHRoZVxuICogZmx1c2goKSBtZXRob2QgdG8gZ3VhcmFudGVlIGFsbCBkYXRhIGhhcyBiZWVuIGZvcndhcmRlZCB0b1xuICogdGhlIHVuZGVybHlpbmcgZGVuby5Xcml0ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdWZXcml0ZXIgZXh0ZW5kcyBBYnN0cmFjdEJ1ZkJhc2UgaW1wbGVtZW50cyBXcml0ZXIge1xuICAjd3JpdGVyOiBXcml0ZXI7XG5cbiAgLyoqIHJldHVybiBuZXcgQnVmV3JpdGVyIHVubGVzcyB3cml0ZXIgaXMgQnVmV3JpdGVyICovXG4gIHN0YXRpYyBjcmVhdGUod3JpdGVyOiBXcml0ZXIsIHNpemU6IG51bWJlciA9IERFRkFVTFRfQlVGX1NJWkUpOiBCdWZXcml0ZXIge1xuICAgIHJldHVybiB3cml0ZXIgaW5zdGFuY2VvZiBCdWZXcml0ZXIgPyB3cml0ZXIgOiBuZXcgQnVmV3JpdGVyKHdyaXRlciwgc2l6ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3cml0ZXI6IFdyaXRlciwgc2l6ZTogbnVtYmVyID0gREVGQVVMVF9CVUZfU0laRSkge1xuICAgIHN1cGVyKG5ldyBVaW50OEFycmF5KHNpemUgPD0gMCA/IERFRkFVTFRfQlVGX1NJWkUgOiBzaXplKSk7XG4gICAgdGhpcy4jd3JpdGVyID0gd3JpdGVyO1xuICB9XG5cbiAgLyoqIERpc2NhcmRzIGFueSB1bmZsdXNoZWQgYnVmZmVyZWQgZGF0YSwgY2xlYXJzIGFueSBlcnJvciwgYW5kXG4gICAqIHJlc2V0cyBidWZmZXIgdG8gd3JpdGUgaXRzIG91dHB1dCB0byB3LlxuICAgKi9cbiAgcmVzZXQodzogV3JpdGVyKSB7XG4gICAgdGhpcy5lcnIgPSBudWxsO1xuICAgIHRoaXMudXNlZEJ1ZmZlckJ5dGVzID0gMDtcbiAgICB0aGlzLiN3cml0ZXIgPSB3O1xuICB9XG5cbiAgLyoqIEZsdXNoIHdyaXRlcyBhbnkgYnVmZmVyZWQgZGF0YSB0byB0aGUgdW5kZXJseWluZyBpby5Xcml0ZXIuICovXG4gIGFzeW5jIGZsdXNoKCkge1xuICAgIGlmICh0aGlzLmVyciAhPT0gbnVsbCkgdGhyb3cgdGhpcy5lcnI7XG4gICAgaWYgKHRoaXMudXNlZEJ1ZmZlckJ5dGVzID09PSAwKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcCA9IHRoaXMuYnVmLnN1YmFycmF5KDAsIHRoaXMudXNlZEJ1ZmZlckJ5dGVzKTtcbiAgICAgIGxldCBud3JpdHRlbiA9IDA7XG4gICAgICB3aGlsZSAobndyaXR0ZW4gPCBwLmxlbmd0aCkge1xuICAgICAgICBud3JpdHRlbiArPSBhd2FpdCB0aGlzLiN3cml0ZXIud3JpdGUocC5zdWJhcnJheShud3JpdHRlbikpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhpcy5lcnIgPSBlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmLmxlbmd0aCk7XG4gICAgdGhpcy51c2VkQnVmZmVyQnl0ZXMgPSAwO1xuICB9XG5cbiAgLyoqIFdyaXRlcyB0aGUgY29udGVudHMgb2YgYGRhdGFgIGludG8gdGhlIGJ1ZmZlci4gIElmIHRoZSBjb250ZW50cyB3b24ndCBmdWxseVxuICAgKiBmaXQgaW50byB0aGUgYnVmZmVyLCB0aG9zZSBieXRlcyB0aGF0IGNhbiBhcmUgY29waWVkIGludG8gdGhlIGJ1ZmZlciwgdGhlXG4gICAqIGJ1ZmZlciBpcyB0aGUgZmx1c2hlZCB0byB0aGUgd3JpdGVyIGFuZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGFyZSBjb3BpZWQgaW50b1xuICAgKiB0aGUgbm93IGVtcHR5IGJ1ZmZlci5cbiAgICpcbiAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlci5cbiAgICovXG4gIGFzeW5jIHdyaXRlKGRhdGE6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLmVyciAhPT0gbnVsbCkgdGhyb3cgdGhpcy5lcnI7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcblxuICAgIGxldCB0b3RhbEJ5dGVzV3JpdHRlbiA9IDA7XG4gICAgbGV0IG51bUJ5dGVzV3JpdHRlbiA9IDA7XG4gICAgd2hpbGUgKGRhdGEuYnl0ZUxlbmd0aCA+IHRoaXMuYXZhaWxhYmxlKCkpIHtcbiAgICAgIGlmICh0aGlzLmJ1ZmZlcmVkKCkgPT09IDApIHtcbiAgICAgICAgLy8gTGFyZ2Ugd3JpdGUsIGVtcHR5IGJ1ZmZlci5cbiAgICAgICAgLy8gV3JpdGUgZGlyZWN0bHkgZnJvbSBkYXRhIHRvIGF2b2lkIGNvcHkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbnVtQnl0ZXNXcml0dGVuID0gYXdhaXQgdGhpcy4jd3JpdGVyLndyaXRlKGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5lcnIgPSBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBudW1CeXRlc1dyaXR0ZW4gPSBjb3B5KGRhdGEsIHRoaXMuYnVmLCB0aGlzLnVzZWRCdWZmZXJCeXRlcyk7XG4gICAgICAgIHRoaXMudXNlZEJ1ZmZlckJ5dGVzICs9IG51bUJ5dGVzV3JpdHRlbjtcbiAgICAgICAgYXdhaXQgdGhpcy5mbHVzaCgpO1xuICAgICAgfVxuICAgICAgdG90YWxCeXRlc1dyaXR0ZW4gKz0gbnVtQnl0ZXNXcml0dGVuO1xuICAgICAgZGF0YSA9IGRhdGEuc3ViYXJyYXkobnVtQnl0ZXNXcml0dGVuKTtcbiAgICB9XG5cbiAgICBudW1CeXRlc1dyaXR0ZW4gPSBjb3B5KGRhdGEsIHRoaXMuYnVmLCB0aGlzLnVzZWRCdWZmZXJCeXRlcyk7XG4gICAgdGhpcy51c2VkQnVmZmVyQnl0ZXMgKz0gbnVtQnl0ZXNXcml0dGVuO1xuICAgIHRvdGFsQnl0ZXNXcml0dGVuICs9IG51bUJ5dGVzV3JpdHRlbjtcbiAgICByZXR1cm4gdG90YWxCeXRlc1dyaXR0ZW47XG4gIH1cbn1cblxuLyoqIEJ1ZldyaXRlclN5bmMgaW1wbGVtZW50cyBidWZmZXJpbmcgZm9yIGEgZGVuby5Xcml0ZXJTeW5jIG9iamVjdC5cbiAqIElmIGFuIGVycm9yIG9jY3VycyB3cml0aW5nIHRvIGEgV3JpdGVyU3luYywgbm8gbW9yZSBkYXRhIHdpbGwgYmVcbiAqIGFjY2VwdGVkIGFuZCBhbGwgc3Vic2VxdWVudCB3cml0ZXMsIGFuZCBmbHVzaCgpLCB3aWxsIHJldHVybiB0aGUgZXJyb3IuXG4gKiBBZnRlciBhbGwgZGF0YSBoYXMgYmVlbiB3cml0dGVuLCB0aGUgY2xpZW50IHNob3VsZCBjYWxsIHRoZVxuICogZmx1c2goKSBtZXRob2QgdG8gZ3VhcmFudGVlIGFsbCBkYXRhIGhhcyBiZWVuIGZvcndhcmRlZCB0b1xuICogdGhlIHVuZGVybHlpbmcgZGVuby5Xcml0ZXJTeW5jLlxuICovXG5leHBvcnQgY2xhc3MgQnVmV3JpdGVyU3luYyBleHRlbmRzIEFic3RyYWN0QnVmQmFzZSBpbXBsZW1lbnRzIFdyaXRlclN5bmMge1xuICAjd3JpdGVyOiBXcml0ZXJTeW5jO1xuXG4gIC8qKiByZXR1cm4gbmV3IEJ1ZldyaXRlclN5bmMgdW5sZXNzIHdyaXRlciBpcyBCdWZXcml0ZXJTeW5jICovXG4gIHN0YXRpYyBjcmVhdGUoXG4gICAgd3JpdGVyOiBXcml0ZXJTeW5jLFxuICAgIHNpemU6IG51bWJlciA9IERFRkFVTFRfQlVGX1NJWkUsXG4gICk6IEJ1ZldyaXRlclN5bmMge1xuICAgIHJldHVybiB3cml0ZXIgaW5zdGFuY2VvZiBCdWZXcml0ZXJTeW5jXG4gICAgICA/IHdyaXRlclxuICAgICAgOiBuZXcgQnVmV3JpdGVyU3luYyh3cml0ZXIsIHNpemUpO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod3JpdGVyOiBXcml0ZXJTeW5jLCBzaXplOiBudW1iZXIgPSBERUZBVUxUX0JVRl9TSVpFKSB7XG4gICAgc3VwZXIobmV3IFVpbnQ4QXJyYXkoc2l6ZSA8PSAwID8gREVGQVVMVF9CVUZfU0laRSA6IHNpemUpKTtcbiAgICB0aGlzLiN3cml0ZXIgPSB3cml0ZXI7XG4gIH1cblxuICAvKiogRGlzY2FyZHMgYW55IHVuZmx1c2hlZCBidWZmZXJlZCBkYXRhLCBjbGVhcnMgYW55IGVycm9yLCBhbmRcbiAgICogcmVzZXRzIGJ1ZmZlciB0byB3cml0ZSBpdHMgb3V0cHV0IHRvIHcuXG4gICAqL1xuICByZXNldCh3OiBXcml0ZXJTeW5jKSB7XG4gICAgdGhpcy5lcnIgPSBudWxsO1xuICAgIHRoaXMudXNlZEJ1ZmZlckJ5dGVzID0gMDtcbiAgICB0aGlzLiN3cml0ZXIgPSB3O1xuICB9XG5cbiAgLyoqIEZsdXNoIHdyaXRlcyBhbnkgYnVmZmVyZWQgZGF0YSB0byB0aGUgdW5kZXJseWluZyBpby5Xcml0ZXJTeW5jLiAqL1xuICBmbHVzaCgpIHtcbiAgICBpZiAodGhpcy5lcnIgIT09IG51bGwpIHRocm93IHRoaXMuZXJyO1xuICAgIGlmICh0aGlzLnVzZWRCdWZmZXJCeXRlcyA9PT0gMCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLmJ1Zi5zdWJhcnJheSgwLCB0aGlzLnVzZWRCdWZmZXJCeXRlcyk7XG4gICAgICBsZXQgbndyaXR0ZW4gPSAwO1xuICAgICAgd2hpbGUgKG53cml0dGVuIDwgcC5sZW5ndGgpIHtcbiAgICAgICAgbndyaXR0ZW4gKz0gdGhpcy4jd3JpdGVyLndyaXRlU3luYyhwLnN1YmFycmF5KG53cml0dGVuKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aGlzLmVyciA9IGU7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHRoaXMuYnVmID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5idWYubGVuZ3RoKTtcbiAgICB0aGlzLnVzZWRCdWZmZXJCeXRlcyA9IDA7XG4gIH1cblxuICAvKiogV3JpdGVzIHRoZSBjb250ZW50cyBvZiBgZGF0YWAgaW50byB0aGUgYnVmZmVyLiAgSWYgdGhlIGNvbnRlbnRzIHdvbid0IGZ1bGx5XG4gICAqIGZpdCBpbnRvIHRoZSBidWZmZXIsIHRob3NlIGJ5dGVzIHRoYXQgY2FuIGFyZSBjb3BpZWQgaW50byB0aGUgYnVmZmVyLCB0aGVcbiAgICogYnVmZmVyIGlzIHRoZSBmbHVzaGVkIHRvIHRoZSB3cml0ZXIgYW5kIHRoZSByZW1haW5pbmcgYnl0ZXMgYXJlIGNvcGllZCBpbnRvXG4gICAqIHRoZSBub3cgZW1wdHkgYnVmZmVyLlxuICAgKlxuICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGUgYnVmZmVyLlxuICAgKi9cbiAgd3JpdGVTeW5jKGRhdGE6IFVpbnQ4QXJyYXkpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmVyciAhPT0gbnVsbCkgdGhyb3cgdGhpcy5lcnI7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcblxuICAgIGxldCB0b3RhbEJ5dGVzV3JpdHRlbiA9IDA7XG4gICAgbGV0IG51bUJ5dGVzV3JpdHRlbiA9IDA7XG4gICAgd2hpbGUgKGRhdGEuYnl0ZUxlbmd0aCA+IHRoaXMuYXZhaWxhYmxlKCkpIHtcbiAgICAgIGlmICh0aGlzLmJ1ZmZlcmVkKCkgPT09IDApIHtcbiAgICAgICAgLy8gTGFyZ2Ugd3JpdGUsIGVtcHR5IGJ1ZmZlci5cbiAgICAgICAgLy8gV3JpdGUgZGlyZWN0bHkgZnJvbSBkYXRhIHRvIGF2b2lkIGNvcHkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbnVtQnl0ZXNXcml0dGVuID0gdGhpcy4jd3JpdGVyLndyaXRlU3luYyhkYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyID0gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtQnl0ZXNXcml0dGVuID0gY29weShkYXRhLCB0aGlzLmJ1ZiwgdGhpcy51c2VkQnVmZmVyQnl0ZXMpO1xuICAgICAgICB0aGlzLnVzZWRCdWZmZXJCeXRlcyArPSBudW1CeXRlc1dyaXR0ZW47XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH1cbiAgICAgIHRvdGFsQnl0ZXNXcml0dGVuICs9IG51bUJ5dGVzV3JpdHRlbjtcbiAgICAgIGRhdGEgPSBkYXRhLnN1YmFycmF5KG51bUJ5dGVzV3JpdHRlbik7XG4gICAgfVxuXG4gICAgbnVtQnl0ZXNXcml0dGVuID0gY29weShkYXRhLCB0aGlzLmJ1ZiwgdGhpcy51c2VkQnVmZmVyQnl0ZXMpO1xuICAgIHRoaXMudXNlZEJ1ZmZlckJ5dGVzICs9IG51bUJ5dGVzV3JpdHRlbjtcbiAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBudW1CeXRlc1dyaXR0ZW47XG4gICAgcmV0dXJuIHRvdGFsQnl0ZXNXcml0dGVuO1xuICB9XG59XG5cbi8qKiBHZW5lcmF0ZSBsb25nZXN0IHByb3BlciBwcmVmaXggd2hpY2ggaXMgYWxzbyBzdWZmaXggYXJyYXkuICovXG5mdW5jdGlvbiBjcmVhdGVMUFMocGF0OiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gIGNvbnN0IGxwcyA9IG5ldyBVaW50OEFycmF5KHBhdC5sZW5ndGgpO1xuICBscHNbMF0gPSAwO1xuICBsZXQgcHJlZml4RW5kID0gMDtcbiAgbGV0IGkgPSAxO1xuICB3aGlsZSAoaSA8IGxwcy5sZW5ndGgpIHtcbiAgICBpZiAocGF0W2ldID09IHBhdFtwcmVmaXhFbmRdKSB7XG4gICAgICBwcmVmaXhFbmQrKztcbiAgICAgIGxwc1tpXSA9IHByZWZpeEVuZDtcbiAgICAgIGkrKztcbiAgICB9IGVsc2UgaWYgKHByZWZpeEVuZCA9PT0gMCkge1xuICAgICAgbHBzW2ldID0gMDtcbiAgICAgIGkrKztcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4RW5kID0gbHBzW3ByZWZpeEVuZCAtIDFdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbHBzO1xufVxuXG4vKiogUmVhZCBkZWxpbWl0ZWQgYnl0ZXMgZnJvbSBhIFJlYWRlci4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogcmVhZERlbGltKFxuICByZWFkZXI6IFJlYWRlcixcbiAgZGVsaW06IFVpbnQ4QXJyYXksXG4pOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VWludDhBcnJheT4ge1xuICAvLyBBdm9pZCB1bmljb2RlIHByb2JsZW1zXG4gIGNvbnN0IGRlbGltTGVuID0gZGVsaW0ubGVuZ3RoO1xuICBjb25zdCBkZWxpbUxQUyA9IGNyZWF0ZUxQUyhkZWxpbSk7XG4gIGNvbnN0IGNodW5rcyA9IG5ldyBCeXRlc0xpc3QoKTtcbiAgY29uc3QgYnVmU2l6ZSA9IE1hdGgubWF4KDEwMjQsIGRlbGltTGVuICsgMSk7XG5cbiAgLy8gTW9kaWZpZWQgS01QXG4gIGxldCBpbnNwZWN0SW5kZXggPSAwO1xuICBsZXQgbWF0Y2hJbmRleCA9IDA7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgaW5zcGVjdEFyciA9IG5ldyBVaW50OEFycmF5KGJ1ZlNpemUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRlci5yZWFkKGluc3BlY3RBcnIpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIC8vIFlpZWxkIGxhc3QgY2h1bmsuXG4gICAgICB5aWVsZCBjaHVua3MuY29uY2F0KCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChyZXN1bHQgPCAwKSB7XG4gICAgICAvLyBEaXNjYXJkIGFsbCByZW1haW5pbmcgYW5kIHNpbGVudGx5IGZhaWwuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNodW5rcy5hZGQoaW5zcGVjdEFyciwgMCwgcmVzdWx0KTtcbiAgICBsZXQgbG9jYWxJbmRleCA9IDA7XG4gICAgd2hpbGUgKGluc3BlY3RJbmRleCA8IGNodW5rcy5zaXplKCkpIHtcbiAgICAgIGlmIChpbnNwZWN0QXJyW2xvY2FsSW5kZXhdID09PSBkZWxpbVttYXRjaEluZGV4XSkge1xuICAgICAgICBpbnNwZWN0SW5kZXgrKztcbiAgICAgICAgbG9jYWxJbmRleCsrO1xuICAgICAgICBtYXRjaEluZGV4Kys7XG4gICAgICAgIGlmIChtYXRjaEluZGV4ID09PSBkZWxpbUxlbikge1xuICAgICAgICAgIC8vIEZ1bGwgbWF0Y2hcbiAgICAgICAgICBjb25zdCBtYXRjaEVuZCA9IGluc3BlY3RJbmRleCAtIGRlbGltTGVuO1xuICAgICAgICAgIGNvbnN0IHJlYWR5Qnl0ZXMgPSBjaHVua3Muc2xpY2UoMCwgbWF0Y2hFbmQpO1xuICAgICAgICAgIHlpZWxkIHJlYWR5Qnl0ZXM7XG4gICAgICAgICAgLy8gUmVzZXQgbWF0Y2gsIGRpZmZlcmVudCBmcm9tIEtNUC5cbiAgICAgICAgICBjaHVua3Muc2hpZnQoaW5zcGVjdEluZGV4KTtcbiAgICAgICAgICBpbnNwZWN0SW5kZXggPSAwO1xuICAgICAgICAgIG1hdGNoSW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWF0Y2hJbmRleCA9PT0gMCkge1xuICAgICAgICAgIGluc3BlY3RJbmRleCsrO1xuICAgICAgICAgIGxvY2FsSW5kZXgrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRjaEluZGV4ID0gZGVsaW1MUFNbbWF0Y2hJbmRleCAtIDFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKiBSZWFkIGRlbGltaXRlZCBzdHJpbmdzIGZyb20gYSBSZWFkZXIuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIHJlYWRTdHJpbmdEZWxpbShcbiAgcmVhZGVyOiBSZWFkZXIsXG4gIGRlbGltOiBzdHJpbmcsXG4gIGRlY29kZXJPcHRzPzoge1xuICAgIGVuY29kaW5nPzogc3RyaW5nO1xuICAgIGZhdGFsPzogYm9vbGVhbjtcbiAgICBpZ25vcmVCT00/OiBib29sZWFuO1xuICB9LFxuKTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPHN0cmluZz4ge1xuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoZGVjb2Rlck9wdHM/LmVuY29kaW5nLCBkZWNvZGVyT3B0cyk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZERlbGltKHJlYWRlciwgZW5jb2Rlci5lbmNvZGUoZGVsaW0pKSkge1xuICAgIHlpZWxkIGRlY29kZXIuZGVjb2RlKGNodW5rKTtcbiAgfVxufVxuXG4vKiogUmVhZCBzdHJpbmdzIGxpbmUtYnktbGluZSBmcm9tIGEgUmVhZGVyLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiByZWFkTGluZXMoXG4gIHJlYWRlcjogUmVhZGVyLFxuICBkZWNvZGVyT3B0cz86IHtcbiAgICBlbmNvZGluZz86IHN0cmluZztcbiAgICBmYXRhbD86IGJvb2xlYW47XG4gICAgaWdub3JlQk9NPzogYm9vbGVhbjtcbiAgfSxcbik6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxzdHJpbmc+IHtcbiAgY29uc3QgYnVmUmVhZGVyID0gbmV3IEJ1ZlJlYWRlcihyZWFkZXIpO1xuICBsZXQgY2h1bmtzOiBVaW50OEFycmF5W10gPSBbXTtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcihkZWNvZGVyT3B0cz8uZW5jb2RpbmcsIGRlY29kZXJPcHRzKTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBidWZSZWFkZXIucmVhZExpbmUoKTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgaWYgKGNodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHlpZWxkIGRlY29kZXIuZGVjb2RlKGNvbmNhdCguLi5jaHVua3MpKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjaHVua3MucHVzaChyZXMubGluZSk7XG4gICAgaWYgKCFyZXMubW9yZSkge1xuICAgICAgeWllbGQgZGVjb2Rlci5kZWNvZGUoY29uY2F0KC4uLmNodW5rcykpO1xuICAgICAgY2h1bmtzID0gW107XG4gICAgfVxuICB9XG59XG4iLCAiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vdHlwZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBBbnkgfSBmcm9tIFwiLi4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCIuLi8uLi8uLi9pby9idWZmZXIudHNcIjtcblxuLy8gWyA2NCwgNjUsIDY2IF0gLT4gWyBwYWRkaW5nLCBDUiwgTEYgXVxuY29uc3QgQkFTRTY0X01BUCA9XG4gIFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cXG5cXHJcIjtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxCaW5hcnkoZGF0YTogQW55KTogYm9vbGVhbiB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgbGV0IGNvZGU6IG51bWJlcjtcbiAgbGV0IGJpdGxlbiA9IDA7XG4gIGNvbnN0IG1heCA9IGRhdGEubGVuZ3RoO1xuICBjb25zdCBtYXAgPSBCQVNFNjRfTUFQO1xuXG4gIC8vIENvbnZlcnQgb25lIGJ5IG9uZS5cbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGNvZGUgPSBtYXAuaW5kZXhPZihkYXRhLmNoYXJBdChpZHgpKTtcblxuICAgIC8vIFNraXAgQ1IvTEZcbiAgICBpZiAoY29kZSA+IDY0KSBjb250aW51ZTtcblxuICAgIC8vIEZhaWwgb24gaWxsZWdhbCBjaGFyYWN0ZXJzXG4gICAgaWYgKGNvZGUgPCAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICBiaXRsZW4gKz0gNjtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgYml0cyBsZWZ0LCBzb3VyY2Ugd2FzIGNvcnJ1cHRlZFxuICByZXR1cm4gYml0bGVuICUgOCA9PT0gMDtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEJpbmFyeShkYXRhOiBzdHJpbmcpOiBCdWZmZXIge1xuICAvLyByZW1vdmUgQ1IvTEYgJiBwYWRkaW5nIHRvIHNpbXBsaWZ5IHNjYW5cbiAgY29uc3QgaW5wdXQgPSBkYXRhLnJlcGxhY2UoL1tcXHJcXG49XS9nLCBcIlwiKTtcbiAgY29uc3QgbWF4ID0gaW5wdXQubGVuZ3RoO1xuICBjb25zdCBtYXAgPSBCQVNFNjRfTUFQO1xuXG4gIC8vIENvbGxlY3QgYnkgNio0IGJpdHMgKDMgYnl0ZXMpXG5cbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGxldCBiaXRzID0gMDtcbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgbWF4OyBpZHgrKykge1xuICAgIGlmIChpZHggJSA0ID09PSAwICYmIGlkeCkge1xuICAgICAgcmVzdWx0LnB1c2goKGJpdHMgPj4gMTYpICYgMHhmZik7XG4gICAgICByZXN1bHQucHVzaCgoYml0cyA+PiA4KSAmIDB4ZmYpO1xuICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDB4ZmYpO1xuICAgIH1cblxuICAgIGJpdHMgPSAoYml0cyA8PCA2KSB8IG1hcC5pbmRleE9mKGlucHV0LmNoYXJBdChpZHgpKTtcbiAgfVxuXG4gIC8vIER1bXAgdGFpbFxuXG4gIGNvbnN0IHRhaWxiaXRzID0gKG1heCAlIDQpICogNjtcblxuICBpZiAodGFpbGJpdHMgPT09IDApIHtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxNikgJiAweGZmKTtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiA4KSAmIDB4ZmYpO1xuICAgIHJlc3VsdC5wdXNoKGJpdHMgJiAweGZmKTtcbiAgfSBlbHNlIGlmICh0YWlsYml0cyA9PT0gMTgpIHtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiAxMCkgJiAweGZmKTtcbiAgICByZXN1bHQucHVzaCgoYml0cyA+PiAyKSAmIDB4ZmYpO1xuICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxMikge1xuICAgIHJlc3VsdC5wdXNoKChiaXRzID4+IDQpICYgMHhmZik7XG4gIH1cblxuICByZXR1cm4gbmV3IEJ1ZmZlcihuZXcgVWludDhBcnJheShyZXN1bHQpKTtcbn1cblxuZnVuY3Rpb24gcmVwcmVzZW50WWFtbEJpbmFyeShvYmplY3Q6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICBjb25zdCBtYXggPSBvYmplY3QubGVuZ3RoO1xuICBjb25zdCBtYXAgPSBCQVNFNjRfTUFQO1xuXG4gIC8vIENvbnZlcnQgZXZlcnkgdGhyZWUgYnl0ZXMgdG8gNCBBU0NJSSBjaGFyYWN0ZXJzLlxuXG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBsZXQgYml0cyA9IDA7XG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IG1heDsgaWR4KyspIHtcbiAgICBpZiAoaWR4ICUgMyA9PT0gMCAmJiBpZHgpIHtcbiAgICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTgpICYgMHgzZl07XG4gICAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDEyKSAmIDB4M2ZdO1xuICAgICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiA2KSAmIDB4M2ZdO1xuICAgICAgcmVzdWx0ICs9IG1hcFtiaXRzICYgMHgzZl07XG4gICAgfVxuXG4gICAgYml0cyA9IChiaXRzIDw8IDgpICsgb2JqZWN0W2lkeF07XG4gIH1cblxuICAvLyBEdW1wIHRhaWxcblxuICBjb25zdCB0YWlsID0gbWF4ICUgMztcblxuICBpZiAodGFpbCA9PT0gMCkge1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTgpICYgMHgzZl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAxMikgJiAweDNmXTtcbiAgICByZXN1bHQgKz0gbWFwWyhiaXRzID4+IDYpICYgMHgzZl07XG4gICAgcmVzdWx0ICs9IG1hcFtiaXRzICYgMHgzZl07XG4gIH0gZWxzZSBpZiAodGFpbCA9PT0gMikge1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPj4gMTApICYgMHgzZl07XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiA0KSAmIDB4M2ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPDwgMikgJiAweDNmXTtcbiAgICByZXN1bHQgKz0gbWFwWzY0XTtcbiAgfSBlbHNlIGlmICh0YWlsID09PSAxKSB7XG4gICAgcmVzdWx0ICs9IG1hcFsoYml0cyA+PiAyKSAmIDB4M2ZdO1xuICAgIHJlc3VsdCArPSBtYXBbKGJpdHMgPDwgNCkgJiAweDNmXTtcbiAgICByZXN1bHQgKz0gbWFwWzY0XTtcbiAgICByZXN1bHQgKz0gbWFwWzY0XTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzQmluYXJ5KG9iajogQW55KTogb2JqIGlzIEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZiA9IG5ldyBCdWZmZXIoKTtcbiAgdHJ5IHtcbiAgICBpZiAoMCA+IGJ1Zi5yZWFkRnJvbVN5bmMob2JqIGFzIEJ1ZmZlcikpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGZpbmFsbHkge1xuICAgIGJ1Zi5yZXNldCgpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBiaW5hcnkgPSBuZXcgVHlwZShcInRhZzp5YW1sLm9yZywyMDAyOmJpbmFyeVwiLCB7XG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJpbmFyeSxcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcHJlZGljYXRlOiBpc0JpbmFyeSxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sQmluYXJ5LFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJpbmFyeSxcbn0pO1xuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vdHlwZS50c1wiO1xuaW1wb3J0IHsgaXNCb29sZWFuIH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sQm9vbGVhbihkYXRhOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbWF4ID0gZGF0YS5sZW5ndGg7XG5cbiAgcmV0dXJuIChcbiAgICAobWF4ID09PSA0ICYmIChkYXRhID09PSBcInRydWVcIiB8fCBkYXRhID09PSBcIlRydWVcIiB8fCBkYXRhID09PSBcIlRSVUVcIikpIHx8XG4gICAgKG1heCA9PT0gNSAmJiAoZGF0YSA9PT0gXCJmYWxzZVwiIHx8IGRhdGEgPT09IFwiRmFsc2VcIiB8fCBkYXRhID09PSBcIkZBTFNFXCIpKVxuICApO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQm9vbGVhbihkYXRhOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGRhdGEgPT09IFwidHJ1ZVwiIHx8IGRhdGEgPT09IFwiVHJ1ZVwiIHx8IGRhdGEgPT09IFwiVFJVRVwiO1xufVxuXG5leHBvcnQgY29uc3QgYm9vbCA9IG5ldyBUeXBlKFwidGFnOnlhbWwub3JnLDIwMDI6Ym9vbFwiLCB7XG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEJvb2xlYW4sXG4gIGRlZmF1bHRTdHlsZTogXCJsb3dlcmNhc2VcIixcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcHJlZGljYXRlOiBpc0Jvb2xlYW4sXG4gIHJlcHJlc2VudDoge1xuICAgIGxvd2VyY2FzZShvYmplY3Q6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIG9iamVjdCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgIH0sXG4gICAgdXBwZXJjYXNlKG9iamVjdDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICByZXR1cm4gb2JqZWN0ID8gXCJUUlVFXCIgOiBcIkZBTFNFXCI7XG4gICAgfSxcbiAgICBjYW1lbGNhc2Uob2JqZWN0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBvYmplY3QgPyBcIlRydWVcIiA6IFwiRmFsc2VcIjtcbiAgICB9LFxuICB9LFxuICByZXNvbHZlOiByZXNvbHZlWWFtbEJvb2xlYW4sXG59KTtcbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBTdHlsZVZhcmlhbnQsIFR5cGUgfSBmcm9tIFwiLi4vdHlwZS50c1wiO1xuaW1wb3J0IHsgQW55LCBpc05lZ2F0aXZlWmVybyB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG5jb25zdCBZQU1MX0ZMT0FUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFxuICAvLyAyLjVlNCwgMi41IGFuZCBpbnRlZ2Vyc1xuICBcIl4oPzpbLStdPyg/OjB8WzEtOV1bMC05X10qKSg/OlxcXFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT9cIiArXG4gICAgLy8gLjJlNCwgLjJcbiAgICAvLyBzcGVjaWFsIGNhc2UsIHNlZW1zIG5vdCBmcm9tIHNwZWNcbiAgICBcInxcXFxcLlswLTlfXSsoPzpbZUVdWy0rXT9bMC05XSspP1wiICtcbiAgICAvLyAyMDo1OVxuICAgIFwifFstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXFxcLlswLTlfXSpcIiArXG4gICAgLy8gLmluZlxuICAgIFwifFstK10/XFxcXC4oPzppbmZ8SW5mfElORilcIiArXG4gICAgLy8gLm5hblxuICAgIFwifFxcXFwuKD86bmFufE5hTnxOQU4pKSRcIixcbik7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sRmxvYXQoZGF0YTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChcbiAgICAhWUFNTF9GTE9BVF9QQVRURVJOLnRlc3QoZGF0YSkgfHxcbiAgICAvLyBRdWljayBoYWNrIHRvIG5vdCBhbGxvdyBpbnRlZ2VycyBlbmQgd2l0aCBgX2BcbiAgICAvLyBQcm9iYWJseSBzaG91bGQgdXBkYXRlIHJlZ2V4cCAmIGNoZWNrIHNwZWVkXG4gICAgZGF0YVtkYXRhLmxlbmd0aCAtIDFdID09PSBcIl9cIlxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbEZsb2F0KGRhdGE6IHN0cmluZyk6IG51bWJlciB7XG4gIGxldCB2YWx1ZSA9IGRhdGEucmVwbGFjZSgvXy9nLCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBzaWduID0gdmFsdWVbMF0gPT09IFwiLVwiID8gLTEgOiAxO1xuICBjb25zdCBkaWdpdHM6IG51bWJlcltdID0gW107XG5cbiAgaWYgKFwiKy1cIi5pbmRleE9mKHZhbHVlWzBdKSA+PSAwKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gXCIuaW5mXCIpIHtcbiAgICByZXR1cm4gc2lnbiA9PT0gMSA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgfVxuICBpZiAodmFsdWUgPT09IFwiLm5hblwiKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuICBpZiAodmFsdWUuaW5kZXhPZihcIjpcIikgPj0gMCkge1xuICAgIHZhbHVlLnNwbGl0KFwiOlwiKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICBkaWdpdHMudW5zaGlmdChwYXJzZUZsb2F0KHYpKTtcbiAgICB9KTtcblxuICAgIGxldCB2YWx1ZU5iID0gMC4wO1xuICAgIGxldCBiYXNlID0gMTtcblxuICAgIGRpZ2l0cy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICB2YWx1ZU5iICs9IGQgKiBiYXNlO1xuICAgICAgYmFzZSAqPSA2MDtcbiAgICB9KTtcblxuICAgIHJldHVybiBzaWduICogdmFsdWVOYjtcbiAgfVxuICByZXR1cm4gc2lnbiAqIHBhcnNlRmxvYXQodmFsdWUpO1xufVxuXG5jb25zdCBTQ0lFTlRJRklDX1dJVEhPVVRfRE9UID0gL15bLStdP1swLTldK2UvO1xuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sRmxvYXQob2JqZWN0OiBBbnksIHN0eWxlPzogU3R5bGVWYXJpYW50KTogQW55IHtcbiAgaWYgKGlzTmFOKG9iamVjdCkpIHtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlIFwibG93ZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi5uYW5cIjtcbiAgICAgIGNhc2UgXCJ1cHBlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLk5BTlwiO1xuICAgICAgY2FzZSBcImNhbWVsY2FzZVwiOlxuICAgICAgICByZXR1cm4gXCIuTmFOXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7XG4gICAgc3dpdGNoIChzdHlsZSkge1xuICAgICAgY2FzZSBcImxvd2VyY2FzZVwiOlxuICAgICAgICByZXR1cm4gXCIuaW5mXCI7XG4gICAgICBjYXNlIFwidXBwZXJjYXNlXCI6XG4gICAgICAgIHJldHVybiBcIi5JTkZcIjtcbiAgICAgIGNhc2UgXCJjYW1lbGNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLkluZlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkge1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgXCJsb3dlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLS5pbmZcIjtcbiAgICAgIGNhc2UgXCJ1cHBlcmNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLS5JTkZcIjtcbiAgICAgIGNhc2UgXCJjYW1lbGNhc2VcIjpcbiAgICAgICAgcmV0dXJuIFwiLS5JbmZcIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSkge1xuICAgIHJldHVybiBcIi0wLjBcIjtcbiAgfVxuXG4gIGNvbnN0IHJlcyA9IG9iamVjdC50b1N0cmluZygxMCk7XG5cbiAgLy8gSlMgc3RyaW5naWZpZXIgY2FuIGJ1aWxkIHNjaWVudGlmaWMgZm9ybWF0IHdpdGhvdXQgZG90czogNWUtMTAwLFxuICAvLyB3aGlsZSBZQU1MIHJlcXVpcmVzIGRvdDogNS5lLTEwMC4gRml4IGl0IHdpdGggc2ltcGxlIGhhY2tcblxuICByZXR1cm4gU0NJRU5USUZJQ19XSVRIT1VUX0RPVC50ZXN0KHJlcykgPyByZXMucmVwbGFjZShcImVcIiwgXCIuZVwiKSA6IHJlcztcbn1cblxuZnVuY3Rpb24gaXNGbG9hdChvYmplY3Q6IEFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSBcIltvYmplY3QgTnVtYmVyXVwiICYmXG4gICAgKG9iamVjdCAlIDEgIT09IDAgfHwgaXNOZWdhdGl2ZVplcm8ob2JqZWN0KSlcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGZsb2F0ID0gbmV3IFR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdFwiLCB7XG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEZsb2F0LFxuICBkZWZhdWx0U3R5bGU6IFwibG93ZXJjYXNlXCIsXG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHByZWRpY2F0ZTogaXNGbG9hdCxcbiAgcmVwcmVzZW50OiByZXByZXNlbnRZYW1sRmxvYXQsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sRmxvYXQsXG59KTtcbiIsICIvLyBQb3J0ZWQgYW5kIGFkYXB0ZWQgZnJvbSBqcy15YW1sLWpzLXR5cGVzIHYxLjAuMDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC1qcy10eXBlcy90cmVlL2FjNTM3ZTdiYmRkM2MyY2JiZDk4ODJjYTM5MTljNTIwYzJkYzAyMmJcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3R5cGUudHNcIjtcbmltcG9ydCB0eXBlIHsgQW55IH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5cbi8vIE5vdGU6IG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIHVzZWQgRXNwcmltYSB0byBoYW5kbGUgZnVuY3Rpb25zXG4vLyBUbyBhdm9pZCBkZXBlbmRlbmNpZXMsIHdlJ2xsIGp1c3QgdHJ5IHRvIGNoZWNrIGlmIHdlIGNhbiBjb25zdHJ1Y3QgYSBmdW5jdGlvbiBmcm9tIGdpdmVuIHN0cmluZ1xuZnVuY3Rpb24gcmVjb25zdHJ1Y3RGdW5jdGlvbihjb2RlOiBzdHJpbmcpIHtcbiAgY29uc3QgZnVuYyA9IG5ldyBGdW5jdGlvbihgcmV0dXJuICR7Y29kZX1gKSgpO1xuICBpZiAoIShmdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgZnVuY3Rpb24gYnV0IGdvdCAke3R5cGVvZiBmdW5jfTogJHtjb2RlfWApO1xuICB9XG4gIHJldHVybiBmdW5jO1xufVxuXG5leHBvcnQgY29uc3QgZnVuYyA9IG5ldyBUeXBlKFwidGFnOnlhbWwub3JnLDIwMDI6anMvZnVuY3Rpb25cIiwge1xuICBraW5kOiBcInNjYWxhclwiLFxuICByZXNvbHZlKGRhdGE6IEFueSkge1xuICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZWNvbnN0cnVjdEZ1bmN0aW9uKGAke2RhdGF9YCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuICBjb25zdHJ1Y3QoZGF0YTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlY29uc3RydWN0RnVuY3Rpb24oZGF0YSk7XG4gIH0sXG4gIHByZWRpY2F0ZShvYmplY3Q6IHVua25vd24pIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgRnVuY3Rpb247XG4gIH0sXG4gIHJlcHJlc2VudChvYmplY3Q6ICguLi5hcmdzOiBBbnlbXSkgPT4gQW55KSB7XG4gICAgcmV0dXJuIG9iamVjdC50b1N0cmluZygpO1xuICB9LFxufSk7XG4iLCAiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi90eXBlLnRzXCI7XG5pbXBvcnQgeyBBbnksIGlzTmVnYXRpdmVaZXJvIH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5cbmZ1bmN0aW9uIGlzSGV4Q29kZShjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAoMHgzMCA8PSAvKiAwICovIGMgJiYgYyA8PSAweDM5KSAvKiA5ICovIHx8XG4gICAgKDB4NDEgPD0gLyogQSAqLyBjICYmIGMgPD0gMHg0NikgLyogRiAqLyB8fFxuICAgICgweDYxIDw9IC8qIGEgKi8gYyAmJiBjIDw9IDB4NjYpIC8qIGYgKi9cbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNPY3RDb2RlKGM6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gMHgzMCA8PSAvKiAwICovIGMgJiYgYyA8PSAweDM3IC8qIDcgKi87XG59XG5cbmZ1bmN0aW9uIGlzRGVjQ29kZShjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIDB4MzAgPD0gLyogMCAqLyBjICYmIGMgPD0gMHgzOSAvKiA5ICovO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlWWFtbEludGVnZXIoZGF0YTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1heCA9IGRhdGEubGVuZ3RoO1xuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgaGFzRGlnaXRzID0gZmFsc2U7XG5cbiAgaWYgKCFtYXgpIHJldHVybiBmYWxzZTtcblxuICBsZXQgY2ggPSBkYXRhW2luZGV4XTtcblxuICAvLyBzaWduXG4gIGlmIChjaCA9PT0gXCItXCIgfHwgY2ggPT09IFwiK1wiKSB7XG4gICAgY2ggPSBkYXRhWysraW5kZXhdO1xuICB9XG5cbiAgaWYgKGNoID09PSBcIjBcIikge1xuICAgIC8vIDBcbiAgICBpZiAoaW5kZXggKyAxID09PSBtYXgpIHJldHVybiB0cnVlO1xuICAgIGNoID0gZGF0YVsrK2luZGV4XTtcblxuICAgIC8vIGJhc2UgMiwgYmFzZSA4LCBiYXNlIDE2XG5cbiAgICBpZiAoY2ggPT09IFwiYlwiKSB7XG4gICAgICAvLyBiYXNlIDJcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09IFwiX1wiKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGNoICE9PSBcIjBcIiAmJiBjaCAhPT0gXCIxXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09IFwiX1wiO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gXCJ4XCIpIHtcbiAgICAgIC8vIGJhc2UgMTZcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgICBjaCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoY2ggPT09IFwiX1wiKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFpc0hleENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaGFzRGlnaXRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09IFwiX1wiO1xuICAgIH1cblxuICAgIC8vIGJhc2UgOFxuICAgIGZvciAoOyBpbmRleCA8IG1heDsgaW5kZXgrKykge1xuICAgICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICAgIGlmIChjaCA9PT0gXCJfXCIpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFpc09jdENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4KSkpIHJldHVybiBmYWxzZTtcbiAgICAgIGhhc0RpZ2l0cyA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09IFwiX1wiO1xuICB9XG5cbiAgLy8gYmFzZSAxMCAoZXhjZXB0IDApIG9yIGJhc2UgNjBcblxuICAvLyB2YWx1ZSBzaG91bGQgbm90IHN0YXJ0IHdpdGggYF9gO1xuICBpZiAoY2ggPT09IFwiX1wiKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yICg7IGluZGV4IDwgbWF4OyBpbmRleCsrKSB7XG4gICAgY2ggPSBkYXRhW2luZGV4XTtcbiAgICBpZiAoY2ggPT09IFwiX1wiKSBjb250aW51ZTtcbiAgICBpZiAoY2ggPT09IFwiOlwiKSBicmVhaztcbiAgICBpZiAoIWlzRGVjQ29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBoYXNEaWdpdHMgPSB0cnVlO1xuICB9XG5cbiAgLy8gU2hvdWxkIGhhdmUgZGlnaXRzIGFuZCBzaG91bGQgbm90IGVuZCB3aXRoIGBfYFxuICBpZiAoIWhhc0RpZ2l0cyB8fCBjaCA9PT0gXCJfXCIpIHJldHVybiBmYWxzZTtcblxuICAvLyBpZiAhYmFzZTYwIC0gZG9uZTtcbiAgaWYgKGNoICE9PSBcIjpcIikgcmV0dXJuIHRydWU7XG5cbiAgLy8gYmFzZTYwIGFsbW9zdCBub3QgdXNlZCwgbm8gbmVlZHMgdG8gb3B0aW1pemVcbiAgcmV0dXJuIC9eKDpbMC01XT9bMC05XSkrJC8udGVzdChkYXRhLnNsaWNlKGluZGV4KSk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxJbnRlZ2VyKGRhdGE6IHN0cmluZyk6IG51bWJlciB7XG4gIGxldCB2YWx1ZSA9IGRhdGE7XG4gIGNvbnN0IGRpZ2l0czogbnVtYmVyW10gPSBbXTtcblxuICBpZiAodmFsdWUuaW5kZXhPZihcIl9cIikgIT09IC0xKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9fL2csIFwiXCIpO1xuICB9XG5cbiAgbGV0IHNpZ24gPSAxO1xuICBsZXQgY2ggPSB2YWx1ZVswXTtcbiAgaWYgKGNoID09PSBcIi1cIiB8fCBjaCA9PT0gXCIrXCIpIHtcbiAgICBpZiAoY2ggPT09IFwiLVwiKSBzaWduID0gLTE7XG4gICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKTtcbiAgICBjaCA9IHZhbHVlWzBdO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSBcIjBcIikgcmV0dXJuIDA7XG5cbiAgaWYgKGNoID09PSBcIjBcIikge1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gXCJiXCIpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDIpO1xuICAgIGlmICh2YWx1ZVsxXSA9PT0gXCJ4XCIpIHJldHVybiBzaWduICogcGFyc2VJbnQodmFsdWUsIDE2KTtcbiAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCA4KTtcbiAgfVxuXG4gIGlmICh2YWx1ZS5pbmRleE9mKFwiOlwiKSAhPT0gLTEpIHtcbiAgICB2YWx1ZS5zcGxpdChcIjpcIikuZm9yRWFjaCgodikgPT4ge1xuICAgICAgZGlnaXRzLnVuc2hpZnQocGFyc2VJbnQodiwgMTApKTtcbiAgICB9KTtcblxuICAgIGxldCB2YWx1ZUludCA9IDA7XG4gICAgbGV0IGJhc2UgPSAxO1xuXG4gICAgZGlnaXRzLmZvckVhY2goKGQpID0+IHtcbiAgICAgIHZhbHVlSW50ICs9IGQgKiBiYXNlO1xuICAgICAgYmFzZSAqPSA2MDtcbiAgICB9KTtcblxuICAgIHJldHVybiBzaWduICogdmFsdWVJbnQ7XG4gIH1cblxuICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlLCAxMCk7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcihvYmplY3Q6IEFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSBcIltvYmplY3QgTnVtYmVyXVwiICYmXG4gICAgb2JqZWN0ICUgMSA9PT0gMCAmJlxuICAgICFpc05lZ2F0aXZlWmVybyhvYmplY3QpXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBpbnQgPSBuZXcgVHlwZShcInRhZzp5YW1sLm9yZywyMDAyOmludFwiLCB7XG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEludGVnZXIsXG4gIGRlZmF1bHRTdHlsZTogXCJkZWNpbWFsXCIsXG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHByZWRpY2F0ZTogaXNJbnRlZ2VyLFxuICByZXByZXNlbnQ6IHtcbiAgICBiaW5hcnkob2JqOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIG9iaiA+PSAwXG4gICAgICAgID8gYDBiJHtvYmoudG9TdHJpbmcoMil9YFxuICAgICAgICA6IGAtMGIke29iai50b1N0cmluZygyKS5zbGljZSgxKX1gO1xuICAgIH0sXG4gICAgb2N0YWwob2JqOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIG9iaiA+PSAwID8gYDAke29iai50b1N0cmluZyg4KX1gIDogYC0wJHtvYmoudG9TdHJpbmcoOCkuc2xpY2UoMSl9YDtcbiAgICB9LFxuICAgIGRlY2ltYWwob2JqOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIG9iai50b1N0cmluZygxMCk7XG4gICAgfSxcbiAgICBoZXhhZGVjaW1hbChvYmo6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICByZXR1cm4gb2JqID49IDBcbiAgICAgICAgPyBgMHgke29iai50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1gXG4gICAgICAgIDogYC0weCR7b2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfWA7XG4gICAgfSxcbiAgfSxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxJbnRlZ2VyLFxuICBzdHlsZUFsaWFzZXM6IHtcbiAgICBiaW5hcnk6IFsyLCBcImJpblwiXSxcbiAgICBkZWNpbWFsOiBbMTAsIFwiZGVjXCJdLFxuICAgIGhleGFkZWNpbWFsOiBbMTYsIFwiaGV4XCJdLFxuICAgIG9jdGFsOiBbOCwgXCJvY3RcIl0sXG4gIH0sXG59KTtcbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3R5cGUudHNcIjtcbmltcG9ydCB0eXBlIHsgQW55IH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBtYXAgPSBuZXcgVHlwZShcInRhZzp5YW1sLm9yZywyMDAyOm1hcFwiLCB7XG4gIGNvbnN0cnVjdChkYXRhKTogQW55IHtcbiAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTtcbiAgfSxcbiAga2luZDogXCJtYXBwaW5nXCIsXG59KTtcbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3R5cGUudHNcIjtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxNZXJnZShkYXRhOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGRhdGEgPT09IFwiPDxcIiB8fCBkYXRhID09PSBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBuZXcgVHlwZShcInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlXCIsIHtcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxNZXJnZSxcbn0pO1xuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vdHlwZS50c1wiO1xuXG5mdW5jdGlvbiByZXNvbHZlWWFtbE51bGwoZGF0YTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1heCA9IGRhdGEubGVuZ3RoO1xuXG4gIHJldHVybiAoXG4gICAgKG1heCA9PT0gMSAmJiBkYXRhID09PSBcIn5cIikgfHxcbiAgICAobWF4ID09PSA0ICYmIChkYXRhID09PSBcIm51bGxcIiB8fCBkYXRhID09PSBcIk51bGxcIiB8fCBkYXRhID09PSBcIk5VTExcIikpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxOdWxsKCk6IG51bGwge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKG9iamVjdDogdW5rbm93bik6IG9iamVjdCBpcyBudWxsIHtcbiAgcmV0dXJuIG9iamVjdCA9PT0gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IG5pbCA9IG5ldyBUeXBlKFwidGFnOnlhbWwub3JnLDIwMDI6bnVsbFwiLCB7XG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE51bGwsXG4gIGRlZmF1bHRTdHlsZTogXCJsb3dlcmNhc2VcIixcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcHJlZGljYXRlOiBpc051bGwsXG4gIHJlcHJlc2VudDoge1xuICAgIGNhbm9uaWNhbCgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIFwiflwiO1xuICAgIH0sXG4gICAgbG93ZXJjYXNlKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgfSxcbiAgICB1cHBlcmNhc2UoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBcIk5VTExcIjtcbiAgICB9LFxuICAgIGNhbWVsY2FzZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIFwiTnVsbFwiO1xuICAgIH0sXG4gIH0sXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sTnVsbCxcbn0pO1xuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vdHlwZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBBbnkgfSBmcm9tIFwiLi4vdXRpbHMudHNcIjtcblxuY29uc3QgeyBoYXNPd24gfSA9IE9iamVjdDtcbmNvbnN0IF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sT21hcChkYXRhOiBBbnkpOiBib29sZWFuIHtcbiAgY29uc3Qgb2JqZWN0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IHBhaXJLZXkgPSBcIlwiO1xuICBsZXQgcGFpckhhc0tleSA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgcGFpciBvZiBkYXRhKSB7XG4gICAgcGFpckhhc0tleSA9IGZhbHNlO1xuXG4gICAgaWYgKF90b1N0cmluZy5jYWxsKHBhaXIpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKHBhaXJLZXkgaW4gcGFpcikge1xuICAgICAgaWYgKGhhc093bihwYWlyLCBwYWlyS2V5KSkge1xuICAgICAgICBpZiAoIXBhaXJIYXNLZXkpIHBhaXJIYXNLZXkgPSB0cnVlO1xuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhaXJIYXNLZXkpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChvYmplY3RLZXlzLmluZGV4T2YocGFpcktleSkgPT09IC0xKSBvYmplY3RLZXlzLnB1c2gocGFpcktleSk7XG4gICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YTogQW55KTogQW55IHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogW107XG59XG5cbmV4cG9ydCBjb25zdCBvbWFwID0gbmV3IFR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwXCIsIHtcbiAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sT21hcCxcbiAga2luZDogXCJzZXF1ZW5jZVwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsXG59KTtcbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3R5cGUudHNcIjtcbmltcG9ydCB0eXBlIHsgQW55IH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5cbmNvbnN0IF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHJlc29sdmVZYW1sUGFpcnMoZGF0YTogQW55W11bXSk6IGJvb2xlYW4ge1xuICBjb25zdCByZXN1bHQgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXRhLmxlbmd0aCB9KTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBwYWlyID0gZGF0YVtpbmRleF07XG5cbiAgICBpZiAoX3RvU3RyaW5nLmNhbGwocGFpcikgIT09IFwiW29iamVjdCBPYmplY3RdXCIpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYWlyKTtcblxuICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmVzdWx0W2luZGV4XSA9IFtrZXlzWzBdLCBwYWlyW2tleXNbMF0gYXMgQW55XV07XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29uc3RydWN0WWFtbFBhaXJzKGRhdGE6IHN0cmluZyk6IEFueVtdIHtcbiAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBbXTtcblxuICBjb25zdCByZXN1bHQgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXRhLmxlbmd0aCB9KTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBwYWlyID0gZGF0YVtpbmRleF07XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFpcik7XG5cbiAgICByZXN1bHRbaW5kZXhdID0gW2tleXNbMF0sIHBhaXJba2V5c1swXSBhcyBBbnldXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBwYWlycyA9IG5ldyBUeXBlKFwidGFnOnlhbWwub3JnLDIwMDI6cGFpcnNcIiwge1xuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxQYWlycyxcbiAga2luZDogXCJzZXF1ZW5jZVwiLFxuICByZXNvbHZlOiByZXNvbHZlWWFtbFBhaXJzLFxufSk7XG4iLCAiLy8gUG9ydGVkIGFuZCBhZGFwdGVkIGZyb20ganMteWFtbC1qcy10eXBlcyB2MS4wLjA6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwtanMtdHlwZXMvdHJlZS9hYzUzN2U3YmJkZDNjMmNiYmQ5ODgyY2EzOTE5YzUyMGMyZGMwMjJiXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi90eXBlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFueSB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG5jb25zdCBSRUdFWFAgPSAvXlxcLyg/PHJlZ2V4cD5bXFxzXFxTXSspXFwvKD88bW9kaWZpZXJzPltnaXNtdXldKikkLztcblxuZXhwb3J0IGNvbnN0IHJlZ2V4cCA9IG5ldyBUeXBlKFwidGFnOnlhbWwub3JnLDIwMDI6anMvcmVnZXhwXCIsIHtcbiAga2luZDogXCJzY2FsYXJcIixcbiAgcmVzb2x2ZShkYXRhOiBBbnkpIHtcbiAgICBpZiAoKGRhdGEgPT09IG51bGwpIHx8ICghZGF0YS5sZW5ndGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVnZXhwID0gYCR7ZGF0YX1gO1xuICAgIGlmIChyZWdleHAuY2hhckF0KDApID09PSBcIi9cIikge1xuICAgICAgLy8gRW5zdXJlIHJlZ2V4IGlzIHByb3Blcmx5IHRlcm1pbmF0ZWRcbiAgICAgIGlmICghUkVHRVhQLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgbm8gZHVwbGljYXRlIG1vZGlmaWVyc1xuICAgICAgY29uc3QgbW9kaWZpZXJzID0gWy4uLihyZWdleHAubWF0Y2goUkVHRVhQKT8uZ3JvdXBzPy5tb2RpZmllcnMgPz8gXCJcIildO1xuICAgICAgaWYgKG5ldyBTZXQobW9kaWZpZXJzKS5zaXplIDwgbW9kaWZpZXJzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGNvbnN0cnVjdChkYXRhOiBzdHJpbmcpIHtcbiAgICBjb25zdCB7IHJlZ2V4cCA9IGAke2RhdGF9YCwgbW9kaWZpZXJzID0gXCJcIiB9ID1cbiAgICAgIGAke2RhdGF9YC5tYXRjaChSRUdFWFApPy5ncm91cHMgPz8ge307XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXhwLCBtb2RpZmllcnMpO1xuICB9LFxuICBwcmVkaWNhdGUob2JqZWN0OiB1bmtub3duKSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIFJlZ0V4cDtcbiAgfSxcbiAgcmVwcmVzZW50KG9iamVjdDogUmVnRXhwKSB7XG4gICAgcmV0dXJuIG9iamVjdC50b1N0cmluZygpO1xuICB9LFxufSk7XG4iLCAiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi90eXBlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFueSB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG5leHBvcnQgY29uc3Qgc2VxID0gbmV3IFR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjpzZXFcIiwge1xuICBjb25zdHJ1Y3QoZGF0YSk6IEFueSB7XG4gICAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDogW107XG4gIH0sXG4gIGtpbmQ6IFwic2VxdWVuY2VcIixcbn0pO1xuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vdHlwZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBBbnkgfSBmcm9tIFwiLi4vdXRpbHMudHNcIjtcblxuY29uc3QgeyBoYXNPd24gfSA9IE9iamVjdDtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxTZXQoZGF0YTogQW55KTogYm9vbGVhbiB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgaWYgKGhhc093bihkYXRhLCBrZXkpKSB7XG4gICAgICBpZiAoZGF0YVtrZXldICE9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxTZXQoZGF0YTogc3RyaW5nKTogQW55IHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgPyBkYXRhIDoge307XG59XG5cbmV4cG9ydCBjb25zdCBzZXQgPSBuZXcgVHlwZShcInRhZzp5YW1sLm9yZywyMDAyOnNldFwiLCB7XG4gIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFNldCxcbiAga2luZDogXCJtYXBwaW5nXCIsXG4gIHJlc29sdmU6IHJlc29sdmVZYW1sU2V0LFxufSk7XG4iLCAiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3R5cGUudHNcIjtcblxuZXhwb3J0IGNvbnN0IHN0ciA9IG5ldyBUeXBlKFwidGFnOnlhbWwub3JnLDIwMDI6c3RyXCIsIHtcbiAgY29uc3RydWN0KGRhdGEpOiBzdHJpbmcge1xuICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IFwiXCI7XG4gIH0sXG4gIGtpbmQ6IFwic2NhbGFyXCIsXG59KTtcbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3R5cGUudHNcIjtcblxuY29uc3QgWUFNTF9EQVRFX1JFR0VYUCA9IG5ldyBSZWdFeHAoXG4gIFwiXihbMC05XVswLTldWzAtOV1bMC05XSlcIiArIC8vIFsxXSB5ZWFyXG4gICAgXCItKFswLTldWzAtOV0pXCIgKyAvLyBbMl0gbW9udGhcbiAgICBcIi0oWzAtOV1bMC05XSkkXCIsIC8vIFszXSBkYXlcbik7XG5cbmNvbnN0IFlBTUxfVElNRVNUQU1QX1JFR0VYUCA9IG5ldyBSZWdFeHAoXG4gIFwiXihbMC05XVswLTldWzAtOV1bMC05XSlcIiArIC8vIFsxXSB5ZWFyXG4gICAgXCItKFswLTldWzAtOV0/KVwiICsgLy8gWzJdIG1vbnRoXG4gICAgXCItKFswLTldWzAtOV0/KVwiICsgLy8gWzNdIGRheVxuICAgIFwiKD86W1R0XXxbIFxcXFx0XSspXCIgKyAvLyAuLi5cbiAgICBcIihbMC05XVswLTldPylcIiArIC8vIFs0XSBob3VyXG4gICAgXCI6KFswLTldWzAtOV0pXCIgKyAvLyBbNV0gbWludXRlXG4gICAgXCI6KFswLTldWzAtOV0pXCIgKyAvLyBbNl0gc2Vjb25kXG4gICAgXCIoPzpcXFxcLihbMC05XSopKT9cIiArIC8vIFs3XSBmcmFjdGlvblxuICAgIFwiKD86WyBcXFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KVwiICsgLy8gWzhdIHR6IFs5XSB0el9zaWduIFsxMF0gdHpfaG91clxuICAgIFwiKD86OihbMC05XVswLTldKSk/KSk/JFwiLCAvLyBbMTFdIHR6X21pbnV0ZVxuKTtcblxuZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSkgIT09IG51bGwpIHJldHVybiB0cnVlO1xuICBpZiAoWUFNTF9USU1FU1RBTVBfUkVHRVhQLmV4ZWMoZGF0YSkgIT09IG51bGwpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAoZGF0YTogc3RyaW5nKTogRGF0ZSB7XG4gIGxldCBtYXRjaCA9IFlBTUxfREFURV9SRUdFWFAuZXhlYyhkYXRhKTtcbiAgaWYgKG1hdGNoID09PSBudWxsKSBtYXRjaCA9IFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpO1xuXG4gIGlmIChtYXRjaCA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKFwiRGF0ZSByZXNvbHZlIGVycm9yXCIpO1xuXG4gIC8vIG1hdGNoOiBbMV0geWVhciBbMl0gbW9udGggWzNdIGRheVxuXG4gIGNvbnN0IHllYXIgPSArbWF0Y2hbMV07XG4gIGNvbnN0IG1vbnRoID0gK21hdGNoWzJdIC0gMTsgLy8gSlMgbW9udGggc3RhcnRzIHdpdGggMFxuICBjb25zdCBkYXkgPSArbWF0Y2hbM107XG5cbiAgaWYgKCFtYXRjaFs0XSkge1xuICAgIC8vIG5vIGhvdXJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpO1xuICB9XG5cbiAgLy8gbWF0Y2g6IFs0XSBob3VyIFs1XSBtaW51dGUgWzZdIHNlY29uZCBbN10gZnJhY3Rpb25cblxuICBjb25zdCBob3VyID0gK21hdGNoWzRdO1xuICBjb25zdCBtaW51dGUgPSArbWF0Y2hbNV07XG4gIGNvbnN0IHNlY29uZCA9ICttYXRjaFs2XTtcblxuICBsZXQgZnJhY3Rpb24gPSAwO1xuICBpZiAobWF0Y2hbN10pIHtcbiAgICBsZXQgcGFydEZyYWN0aW9uID0gbWF0Y2hbN10uc2xpY2UoMCwgMyk7XG4gICAgd2hpbGUgKHBhcnRGcmFjdGlvbi5sZW5ndGggPCAzKSB7XG4gICAgICAvLyBtaWxsaS1zZWNvbmRzXG4gICAgICBwYXJ0RnJhY3Rpb24gKz0gXCIwXCI7XG4gICAgfVxuICAgIGZyYWN0aW9uID0gK3BhcnRGcmFjdGlvbjtcbiAgfVxuXG4gIC8vIG1hdGNoOiBbOF0gdHogWzldIHR6X3NpZ24gWzEwXSB0el9ob3VyIFsxMV0gdHpfbWludXRlXG5cbiAgbGV0IGRlbHRhID0gbnVsbDtcbiAgaWYgKG1hdGNoWzldKSB7XG4gICAgY29uc3QgdHpIb3VyID0gK21hdGNoWzEwXTtcbiAgICBjb25zdCB0ek1pbnV0ZSA9ICsobWF0Y2hbMTFdIHx8IDApO1xuICAgIGRlbHRhID0gKHR6SG91ciAqIDYwICsgdHpNaW51dGUpICogNjAwMDA7IC8vIGRlbHRhIGluIG1pbGxpLXNlY29uZHNcbiAgICBpZiAobWF0Y2hbOV0gPT09IFwiLVwiKSBkZWx0YSA9IC1kZWx0YTtcbiAgfVxuXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShcbiAgICBEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24pLFxuICApO1xuXG4gIGlmIChkZWx0YSkgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpIC0gZGVsdGEpO1xuXG4gIHJldHVybiBkYXRlO1xufVxuXG5mdW5jdGlvbiByZXByZXNlbnRZYW1sVGltZXN0YW1wKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xufVxuXG5leHBvcnQgY29uc3QgdGltZXN0YW1wID0gbmV3IFR5cGUoXCJ0YWc6eWFtbC5vcmcsMjAwMjp0aW1lc3RhbXBcIiwge1xuICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAsXG4gIGluc3RhbmNlT2Y6IERhdGUsXG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbFRpbWVzdGFtcCxcbiAgcmVzb2x2ZTogcmVzb2x2ZVlhbWxUaW1lc3RhbXAsXG59KTtcbiIsICIvLyBQb3J0ZWQgYW5kIGFkYXB0ZWQgZnJvbSBqcy15YW1sLWpzLXR5cGVzIHYxLjAuMDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC1qcy10eXBlcy90cmVlL2FjNTM3ZTdiYmRkM2MyY2JiZDk4ODJjYTM5MTljNTIwYzJkYzAyMmJcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3R5cGUudHNcIjtcblxuZXhwb3J0IGNvbnN0IHVuZGVmaW5lZFR5cGUgPSBuZXcgVHlwZShcInRhZzp5YW1sLm9yZywyMDAyOmpzL3VuZGVmaW5lZFwiLCB7XG4gIGtpbmQ6IFwic2NhbGFyXCIsXG4gIHJlc29sdmUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGNvbnN0cnVjdCgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LFxuICBwcmVkaWNhdGUob2JqZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09IFwidW5kZWZpbmVkXCI7XG4gIH0sXG4gIHJlcHJlc2VudCgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfSxcbn0pO1xuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gXCIuLi9zY2hlbWEudHNcIjtcbmltcG9ydCB7IG1hcCwgc2VxLCBzdHIgfSBmcm9tIFwiLi4vdHlwZS9tb2QudHNcIjtcblxuLy8gU3RhbmRhcmQgWUFNTCdzIEZhaWxzYWZlIHNjaGVtYS5cbi8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjgwMjM0NlxuZXhwb3J0IGNvbnN0IGZhaWxzYWZlID0gbmV3IFNjaGVtYSh7XG4gIGV4cGxpY2l0OiBbc3RyLCBzZXEsIG1hcF0sXG59KTtcbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBTY2hlbWEgfSBmcm9tIFwiLi4vc2NoZW1hLnRzXCI7XG5pbXBvcnQgeyBib29sLCBmbG9hdCwgaW50LCBuaWwgfSBmcm9tIFwiLi4vdHlwZS9tb2QudHNcIjtcbmltcG9ydCB7IGZhaWxzYWZlIH0gZnJvbSBcIi4vZmFpbHNhZmUudHNcIjtcblxuLy8gU3RhbmRhcmQgWUFNTCdzIEpTT04gc2NoZW1hLlxuLy8gaHR0cDovL3d3dy55YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjaWQyODAzMjMxXG5leHBvcnQgY29uc3QganNvbiA9IG5ldyBTY2hlbWEoe1xuICBpbXBsaWNpdDogW25pbCwgYm9vbCwgaW50LCBmbG9hdF0sXG4gIGluY2x1ZGU6IFtmYWlsc2FmZV0sXG59KTtcbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBTY2hlbWEgfSBmcm9tIFwiLi4vc2NoZW1hLnRzXCI7XG5pbXBvcnQgeyBqc29uIH0gZnJvbSBcIi4vanNvbi50c1wiO1xuXG4vLyBTdGFuZGFyZCBZQU1MJ3MgQ29yZSBzY2hlbWEuXG4vLyBodHRwOi8vd3d3LnlhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNpZDI4MDQ5MjNcbmV4cG9ydCBjb25zdCBjb3JlID0gbmV3IFNjaGVtYSh7XG4gIGluY2x1ZGU6IFtqc29uXSxcbn0pO1xuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gXCIuLi9zY2hlbWEudHNcIjtcbmltcG9ydCB7IGJpbmFyeSwgbWVyZ2UsIG9tYXAsIHBhaXJzLCBzZXQsIHRpbWVzdGFtcCB9IGZyb20gXCIuLi90eXBlL21vZC50c1wiO1xuaW1wb3J0IHsgY29yZSB9IGZyb20gXCIuL2NvcmUudHNcIjtcblxuLy8gSlMtWUFNTCdzIGRlZmF1bHQgc2NoZW1hIGZvciBgc2FmZUxvYWRgIGZ1bmN0aW9uLlxuLy8gSXQgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgWUFNTCBzcGVjaWZpY2F0aW9uLlxuZXhwb3J0IGNvbnN0IGRlZiA9IG5ldyBTY2hlbWEoe1xuICBleHBsaWNpdDogW2JpbmFyeSwgb21hcCwgcGFpcnMsIHNldF0sXG4gIGltcGxpY2l0OiBbdGltZXN0YW1wLCBtZXJnZV0sXG4gIGluY2x1ZGU6IFtjb3JlXSxcbn0pO1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gXCIuLi9zY2hlbWEudHNcIjtcbmltcG9ydCB7IHJlZ2V4cCwgdW5kZWZpbmVkVHlwZSB9IGZyb20gXCIuLi90eXBlL21vZC50c1wiO1xuaW1wb3J0IHsgZGVmIH0gZnJvbSBcIi4vZGVmYXVsdC50c1wiO1xuXG4vLyBFeHRlbmRzIEpTLVlBTUwgZGVmYXVsdCBzY2hlbWEgd2l0aCBhZGRpdGlvbmFsIEphdmFTY3JpcHQgdHlwZXNcbi8vIEl0IGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIFlBTUwgc3BlY2lmaWNhdGlvbi5cbmV4cG9ydCBjb25zdCBleHRlbmRlZCA9IG5ldyBTY2hlbWEoe1xuICBleHBsaWNpdDogW3JlZ2V4cCwgdW5kZWZpbmVkVHlwZV0sXG4gIGluY2x1ZGU6IFtkZWZdLFxufSk7XG4iLCAiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHR5cGUgeyBTY2hlbWFEZWZpbml0aW9uIH0gZnJvbSBcIi4vc2NoZW1hLnRzXCI7XG5pbXBvcnQgeyBERUZBVUxUX1NDSEVNQSB9IGZyb20gXCIuL3NjaGVtYS9tb2QudHNcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0YXRlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHNjaGVtYTogU2NoZW1hRGVmaW5pdGlvbiA9IERFRkFVTFRfU0NIRU1BKSB7fVxufVxuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB0eXBlIHsgWUFNTEVycm9yIH0gZnJvbSBcIi4uL2Vycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNjaGVtYSwgU2NoZW1hRGVmaW5pdGlvbiwgVHlwZU1hcCB9IGZyb20gXCIuLi9zY2hlbWEudHNcIjtcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSBcIi4uL3N0YXRlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tIFwiLi4vdHlwZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBBbnksIEFycmF5T2JqZWN0IH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGVyU3RhdGVPcHRpb25zIHtcbiAgbGVnYWN5PzogYm9vbGVhbjtcbiAgbGlzdGVuZXI/OiAoKC4uLmFyZ3M6IEFueVtdKSA9PiB2b2lkKSB8IG51bGw7XG4gIC8qKiBzdHJpbmcgdG8gYmUgdXNlZCBhcyBhIGZpbGUgcGF0aCBpbiBlcnJvci93YXJuaW5nIG1lc3NhZ2VzLiAqL1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgLyoqIHNwZWNpZmllcyBhIHNjaGVtYSB0byB1c2UuICovXG4gIHNjaGVtYT86IFNjaGVtYURlZmluaXRpb247XG4gIC8qKiBjb21wYXRpYmlsaXR5IHdpdGggSlNPTi5wYXJzZSBiZWhhdmlvdXIuICovXG4gIGpzb24/OiBib29sZWFuO1xuICAvKiogZnVuY3Rpb24gdG8gY2FsbCBvbiB3YXJuaW5nIG1lc3NhZ2VzLiAqL1xuICBvbldhcm5pbmc/KHRoaXM6IG51bGwsIGU/OiBZQU1MRXJyb3IpOiB2b2lkO1xufVxuXG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuZXhwb3J0IHR5cGUgUmVzdWx0VHlwZSA9IGFueVtdIHwgUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcblxuZXhwb3J0IGNsYXNzIExvYWRlclN0YXRlIGV4dGVuZHMgU3RhdGUge1xuICBwdWJsaWMgZG9jdW1lbnRzOiBBbnlbXSA9IFtdO1xuICBwdWJsaWMgbGVuZ3RoOiBudW1iZXI7XG4gIHB1YmxpYyBsaW5lSW5kZW50ID0gMDtcbiAgcHVibGljIGxpbmVTdGFydCA9IDA7XG4gIHB1YmxpYyBwb3NpdGlvbiA9IDA7XG4gIHB1YmxpYyBsaW5lID0gMDtcbiAgcHVibGljIGZpbGVuYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgb25XYXJuaW5nPzogKC4uLmFyZ3M6IEFueVtdKSA9PiB2b2lkO1xuICBwdWJsaWMgbGVnYWN5OiBib29sZWFuO1xuICBwdWJsaWMganNvbjogYm9vbGVhbjtcbiAgcHVibGljIGxpc3RlbmVyPzogKCguLi5hcmdzOiBBbnlbXSkgPT4gdm9pZCkgfCBudWxsO1xuICBwdWJsaWMgaW1wbGljaXRUeXBlczogVHlwZVtdO1xuICBwdWJsaWMgdHlwZU1hcDogVHlwZU1hcDtcblxuICBwdWJsaWMgdmVyc2lvbj86IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBjaGVja0xpbmVCcmVha3M/OiBib29sZWFuO1xuICBwdWJsaWMgdGFnTWFwPzogQXJyYXlPYmplY3Q7XG4gIHB1YmxpYyBhbmNob3JNYXA/OiBBcnJheU9iamVjdDtcbiAgcHVibGljIHRhZz86IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBhbmNob3I/OiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaWMga2luZD86IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyByZXN1bHQ6IFJlc3VsdFR5cGUgfCBudWxsID0gXCJcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5wdXQ6IHN0cmluZyxcbiAgICB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG9uV2FybmluZyxcbiAgICAgIGxlZ2FjeSA9IGZhbHNlLFxuICAgICAganNvbiA9IGZhbHNlLFxuICAgICAgbGlzdGVuZXIgPSBudWxsLFxuICAgIH06IExvYWRlclN0YXRlT3B0aW9ucyxcbiAgKSB7XG4gICAgc3VwZXIoc2NoZW1hKTtcbiAgICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWU7XG4gICAgdGhpcy5vbldhcm5pbmcgPSBvbldhcm5pbmc7XG4gICAgdGhpcy5sZWdhY3kgPSBsZWdhY3k7XG4gICAgdGhpcy5qc29uID0ganNvbjtcbiAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7XG5cbiAgICB0aGlzLmltcGxpY2l0VHlwZXMgPSAodGhpcy5zY2hlbWEgYXMgU2NoZW1hKS5jb21waWxlZEltcGxpY2l0O1xuICAgIHRoaXMudHlwZU1hcCA9ICh0aGlzLnNjaGVtYSBhcyBTY2hlbWEpLmNvbXBpbGVkVHlwZU1hcDtcblxuICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICB9XG59XG4iLCAiLy8gUG9ydGVkIGZyb20ganMteWFtbCB2My4xMy4xOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9qcy15YW1sL2NvbW1pdC82NjVhYWRkYTQyMzQ5ZGNhZTg2OWYxMjA0MGQ5YjEwZWYxOGQxMmRhXG4vLyBDb3B5cmlnaHQgMjAxMS0yMDE1IGJ5IFZpdGFseSBQdXpyaW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHsgWUFNTEVycm9yIH0gZnJvbSBcIi4uL2Vycm9yLnRzXCI7XG5pbXBvcnQgeyBNYXJrIH0gZnJvbSBcIi4uL21hcmsudHNcIjtcbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gXCIuLi90eXBlLnRzXCI7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBMb2FkZXJTdGF0ZSwgTG9hZGVyU3RhdGVPcHRpb25zLCBSZXN1bHRUeXBlIH0gZnJvbSBcIi4vbG9hZGVyX3N0YXRlLnRzXCI7XG5cbnR5cGUgQW55ID0gY29tbW9uLkFueTtcbnR5cGUgQXJyYXlPYmplY3Q8VCA9IEFueT4gPSBjb21tb24uQXJyYXlPYmplY3Q8VD47XG5cbmNvbnN0IHsgaGFzT3duIH0gPSBPYmplY3Q7XG5cbmNvbnN0IENPTlRFWFRfRkxPV19JTiA9IDE7XG5jb25zdCBDT05URVhUX0ZMT1dfT1VUID0gMjtcbmNvbnN0IENPTlRFWFRfQkxPQ0tfSU4gPSAzO1xuY29uc3QgQ09OVEVYVF9CTE9DS19PVVQgPSA0O1xuXG5jb25zdCBDSE9NUElOR19DTElQID0gMTtcbmNvbnN0IENIT01QSU5HX1NUUklQID0gMjtcbmNvbnN0IENIT01QSU5HX0tFRVAgPSAzO1xuXG5jb25zdCBQQVRURVJOX05PTl9QUklOVEFCTEUgPVxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNvbnRyb2wtcmVnZXhcbiAgL1tcXHgwMC1cXHgwOFxceDBCXFx4MENcXHgwRS1cXHgxRlxceDdGLVxceDg0XFx4ODYtXFx4OUZcXHVGRkZFXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0vO1xuY29uc3QgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MgPSAvW1xceDg1XFx1MjAyOFxcdTIwMjldLztcbmNvbnN0IFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTID0gL1ssXFxbXFxdXFx7XFx9XS87XG5jb25zdCBQQVRURVJOX1RBR19IQU5ETEUgPSAvXig/OiF8ISF8IVthLXpcXC1dKyEpJC9pO1xuY29uc3QgUEFUVEVSTl9UQUdfVVJJID1cbiAgL14oPzohfFteLFxcW1xcXVxce1xcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcXC0jO1xcL1xcPzpAJj1cXCtcXCQsX1xcLiF+XFwqJ1xcKFxcKVxcW1xcXV0pKiQvaTtcblxuZnVuY3Rpb24gX2NsYXNzKG9iajogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gaXNFT0woYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBjID09PSAweDBhIHx8IC8qIExGICovIGMgPT09IDB4MGQgLyogQ1IgKi87XG59XG5cbmZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGMgPT09IDB4MDkgfHwgLyogVGFiICovIGMgPT09IDB4MjAgLyogU3BhY2UgKi87XG59XG5cbmZ1bmN0aW9uIGlzV3NPckVvbChjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBjID09PSAweDA5IC8qIFRhYiAqLyB8fFxuICAgIGMgPT09IDB4MjAgLyogU3BhY2UgKi8gfHxcbiAgICBjID09PSAweDBhIC8qIExGICovIHx8XG4gICAgYyA9PT0gMHgwZCAvKiBDUiAqL1xuICApO1xufVxuXG5mdW5jdGlvbiBpc0Zsb3dJbmRpY2F0b3IoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgYyA9PT0gMHgyYyAvKiAsICovIHx8XG4gICAgYyA9PT0gMHg1YiAvKiBbICovIHx8XG4gICAgYyA9PT0gMHg1ZCAvKiBdICovIHx8XG4gICAgYyA9PT0gMHg3YiAvKiB7ICovIHx8XG4gICAgYyA9PT0gMHg3ZCAvKiB9ICovXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZyb21IZXhDb2RlKGM6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICgweDMwIDw9IC8qIDAgKi8gYyAmJiBjIDw9IDB4MzkgLyogOSAqLykge1xuICAgIHJldHVybiBjIC0gMHgzMDtcbiAgfVxuXG4gIGNvbnN0IGxjID0gYyB8IDB4MjA7XG5cbiAgaWYgKDB4NjEgPD0gLyogYSAqLyBsYyAmJiBsYyA8PSAweDY2IC8qIGYgKi8pIHtcbiAgICByZXR1cm4gbGMgLSAweDYxICsgMTA7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZWRIZXhMZW4oYzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGMgPT09IDB4NzggLyogeCAqLykge1xuICAgIHJldHVybiAyO1xuICB9XG4gIGlmIChjID09PSAweDc1IC8qIHUgKi8pIHtcbiAgICByZXR1cm4gNDtcbiAgfVxuICBpZiAoYyA9PT0gMHg1NSAvKiBVICovKSB7XG4gICAgcmV0dXJuIDg7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGZyb21EZWNpbWFsQ29kZShjOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoMHgzMCA8PSAvKiAwICovIGMgJiYgYyA8PSAweDM5IC8qIDkgKi8pIHtcbiAgICByZXR1cm4gYyAtIDB4MzA7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVzY2FwZVNlcXVlbmNlKGM6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBjID09PSAweDMwIC8qIDAgKi9cbiAgICA/IFwiXFx4MDBcIlxuICAgIDogYyA9PT0gMHg2MSAvKiBhICovXG4gICAgPyBcIlxceDA3XCJcbiAgICA6IGMgPT09IDB4NjIgLyogYiAqL1xuICAgID8gXCJcXHgwOFwiXG4gICAgOiBjID09PSAweDc0IC8qIHQgKi9cbiAgICA/IFwiXFx4MDlcIlxuICAgIDogYyA9PT0gMHgwOSAvKiBUYWIgKi9cbiAgICA/IFwiXFx4MDlcIlxuICAgIDogYyA9PT0gMHg2ZSAvKiBuICovXG4gICAgPyBcIlxceDBBXCJcbiAgICA6IGMgPT09IDB4NzYgLyogdiAqL1xuICAgID8gXCJcXHgwQlwiXG4gICAgOiBjID09PSAweDY2IC8qIGYgKi9cbiAgICA/IFwiXFx4MENcIlxuICAgIDogYyA9PT0gMHg3MiAvKiByICovXG4gICAgPyBcIlxceDBEXCJcbiAgICA6IGMgPT09IDB4NjUgLyogZSAqL1xuICAgID8gXCJcXHgxQlwiXG4gICAgOiBjID09PSAweDIwIC8qIFNwYWNlICovXG4gICAgPyBcIiBcIlxuICAgIDogYyA9PT0gMHgyMiAvKiBcIiAqL1xuICAgID8gXCJcXHgyMlwiXG4gICAgOiBjID09PSAweDJmIC8qIC8gKi9cbiAgICA/IFwiL1wiXG4gICAgOiBjID09PSAweDVjIC8qIFxcICovXG4gICAgPyBcIlxceDVDXCJcbiAgICA6IGMgPT09IDB4NGUgLyogTiAqL1xuICAgID8gXCJcXHg4NVwiXG4gICAgOiBjID09PSAweDVmIC8qIF8gKi9cbiAgICA/IFwiXFx4QTBcIlxuICAgIDogYyA9PT0gMHg0YyAvKiBMICovXG4gICAgPyBcIlxcdTIwMjhcIlxuICAgIDogYyA9PT0gMHg1MCAvKiBQICovXG4gICAgPyBcIlxcdTIwMjlcIlxuICAgIDogXCJcIjtcbn1cblxuZnVuY3Rpb24gY2hhckZyb21Db2RlcG9pbnQoYzogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGMgPD0gMHhmZmZmKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gIH1cbiAgLy8gRW5jb2RlIFVURi0xNiBzdXJyb2dhdGUgcGFpclxuICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtMTYjQ29kZV9wb2ludHNfVS4yQjAxMDAwMF90b19VLjJCMTBGRkZGXG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICgoYyAtIDB4MDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsXG4gICAgKChjIC0gMHgwMTAwMDApICYgMHgwM2ZmKSArIDB4ZGMwMCxcbiAgKTtcbn1cblxuY29uc3Qgc2ltcGxlRXNjYXBlQ2hlY2sgPSBBcnJheS5mcm9tPG51bWJlcj4oeyBsZW5ndGg6IDI1NiB9KTsgLy8gaW50ZWdlciwgZm9yIGZhc3QgYWNjZXNzXG5jb25zdCBzaW1wbGVFc2NhcGVNYXAgPSBBcnJheS5mcm9tPHN0cmluZz4oeyBsZW5ndGg6IDI1NiB9KTtcbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgc2ltcGxlRXNjYXBlQ2hlY2tbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKSA/IDEgOiAwO1xuICBzaW1wbGVFc2NhcGVNYXBbaV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVFcnJvcihzdGF0ZTogTG9hZGVyU3RhdGUsIG1lc3NhZ2U6IHN0cmluZyk6IFlBTUxFcnJvciB7XG4gIHJldHVybiBuZXcgWUFNTEVycm9yKFxuICAgIG1lc3NhZ2UsXG4gICAgbmV3IE1hcmsoXG4gICAgICBzdGF0ZS5maWxlbmFtZSBhcyBzdHJpbmcsXG4gICAgICBzdGF0ZS5pbnB1dCxcbiAgICAgIHN0YXRlLnBvc2l0aW9uLFxuICAgICAgc3RhdGUubGluZSxcbiAgICAgIHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0LFxuICAgICksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3Ioc3RhdGU6IExvYWRlclN0YXRlLCBtZXNzYWdlOiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiB0aHJvd1dhcm5pbmcoc3RhdGU6IExvYWRlclN0YXRlLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgaWYgKHN0YXRlLm9uV2FybmluZykge1xuICAgIHN0YXRlLm9uV2FybmluZy5jYWxsKG51bGwsIGdlbmVyYXRlRXJyb3Ioc3RhdGUsIG1lc3NhZ2UpKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgRGlyZWN0aXZlSGFuZGxlcnMge1xuICBbZGlyZWN0aXZlOiBzdHJpbmddOiAoXG4gICAgc3RhdGU6IExvYWRlclN0YXRlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBzdHJpbmdbXVxuICApID0+IHZvaWQ7XG59XG5cbmNvbnN0IGRpcmVjdGl2ZUhhbmRsZXJzOiBEaXJlY3RpdmVIYW5kbGVycyA9IHtcbiAgWUFNTChzdGF0ZSwgX25hbWUsIC4uLmFyZ3M6IHN0cmluZ1tdKSB7XG4gICAgaWYgKHN0YXRlLnZlcnNpb24gIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBcImR1cGxpY2F0aW9uIG9mICVZQU1MIGRpcmVjdGl2ZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBcIllBTUwgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSBvbmUgYXJndW1lbnRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSAvXihbMC05XSspXFwuKFswLTldKykkLy5leGVjKGFyZ3NbMF0pO1xuICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsIFwiaWxsLWZvcm1lZCBhcmd1bWVudCBvZiB0aGUgWUFNTCBkaXJlY3RpdmVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgIGNvbnN0IG1pbm9yID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcbiAgICBpZiAobWFqb3IgIT09IDEpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBcInVuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50XCIpO1xuICAgIH1cblxuICAgIHN0YXRlLnZlcnNpb24gPSBhcmdzWzBdO1xuICAgIHN0YXRlLmNoZWNrTGluZUJyZWFrcyA9IG1pbm9yIDwgMjtcbiAgICBpZiAobWlub3IgIT09IDEgJiYgbWlub3IgIT09IDIpIHtcbiAgICAgIHJldHVybiB0aHJvd1dhcm5pbmcoc3RhdGUsIFwidW5zdXBwb3J0ZWQgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudFwiKTtcbiAgICB9XG4gIH0sXG5cbiAgVEFHKHN0YXRlLCBfbmFtZSwgLi4uYXJnczogc3RyaW5nW10pIHtcbiAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBcIlRBRyBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IHR3byBhcmd1bWVudHNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlID0gYXJnc1swXTtcbiAgICBjb25zdCBwcmVmaXggPSBhcmdzWzFdO1xuXG4gICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdChoYW5kbGUpKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIFwiaWxsLWZvcm1lZCB0YWcgaGFuZGxlIChmaXJzdCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmVcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnRhZ01hcCAmJiBoYXNPd24oc3RhdGUudGFnTWFwLCBoYW5kbGUpKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGB0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciBcIiR7aGFuZGxlfVwiIHRhZyBoYW5kbGVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHByZWZpeCkpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgXCJpbGwtZm9ybWVkIHRhZyBwcmVmaXggKHNlY29uZCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmVcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzdGF0ZS50YWdNYXAgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHN0YXRlLnRhZ01hcCA9IHt9O1xuICAgIH1cbiAgICBzdGF0ZS50YWdNYXBbaGFuZGxlXSA9IHByZWZpeDtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGNhcHR1cmVTZWdtZW50KFxuICBzdGF0ZTogTG9hZGVyU3RhdGUsXG4gIHN0YXJ0OiBudW1iZXIsXG4gIGVuZDogbnVtYmVyLFxuICBjaGVja0pzb246IGJvb2xlYW4sXG4pIHtcbiAgbGV0IHJlc3VsdDogc3RyaW5nO1xuICBpZiAoc3RhcnQgPCBlbmQpIHtcbiAgICByZXN1bHQgPSBzdGF0ZS5pbnB1dC5zbGljZShzdGFydCwgZW5kKTtcblxuICAgIGlmIChjaGVja0pzb24pIHtcbiAgICAgIGZvciAoXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG4gICAgICAgIHBvc2l0aW9uIDwgbGVuZ3RoO1xuICAgICAgICBwb3NpdGlvbisrXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gcmVzdWx0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIShjaGFyYWN0ZXIgPT09IDB4MDkgfHwgKDB4MjAgPD0gY2hhcmFjdGVyICYmIGNoYXJhY3RlciA8PSAweDEwZmZmZikpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBcImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChQQVRURVJOX05PTl9QUklOVEFCTEUudGVzdChyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgXCJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVyc1wiKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5yZXN1bHQgKz0gcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlTWFwcGluZ3MoXG4gIHN0YXRlOiBMb2FkZXJTdGF0ZSxcbiAgZGVzdGluYXRpb246IEFycmF5T2JqZWN0LFxuICBzb3VyY2U6IEFycmF5T2JqZWN0LFxuICBvdmVycmlkYWJsZUtleXM6IEFycmF5T2JqZWN0PGJvb2xlYW4+LFxuKSB7XG4gIGlmICghY29tbW9uLmlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgIHN0YXRlLFxuICAgICAgXCJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZVwiLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGtleXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKGRlc3RpbmF0aW9uLCBrZXkpKSB7XG4gICAgICBkZXN0aW5hdGlvbltrZXldID0gKHNvdXJjZSBhcyBBcnJheU9iamVjdClba2V5XTtcbiAgICAgIG92ZXJyaWRhYmxlS2V5c1trZXldID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RvcmVNYXBwaW5nUGFpcihcbiAgc3RhdGU6IExvYWRlclN0YXRlLFxuICByZXN1bHQ6IEFycmF5T2JqZWN0IHwgbnVsbCxcbiAgb3ZlcnJpZGFibGVLZXlzOiBBcnJheU9iamVjdDxib29sZWFuPixcbiAga2V5VGFnOiBzdHJpbmcgfCBudWxsLFxuICBrZXlOb2RlOiBBbnksXG4gIHZhbHVlTm9kZTogdW5rbm93bixcbiAgc3RhcnRMaW5lPzogbnVtYmVyLFxuICBzdGFydFBvcz86IG51bWJlcixcbik6IEFycmF5T2JqZWN0IHtcbiAgLy8gVGhlIG91dHB1dCBpcyBhIHBsYWluIG9iamVjdCBoZXJlLCBzbyBrZXlzIGNhbiBvbmx5IGJlIHN0cmluZ3MuXG4gIC8vIFdlIG5lZWQgdG8gY29udmVydCBrZXlOb2RlIHRvIGEgc3RyaW5nLCBidXQgZG9pbmcgc28gY2FuIGhhbmcgdGhlIHByb2Nlc3NcbiAgLy8gKGRlZXBseSBuZXN0ZWQgYXJyYXlzIHRoYXQgZXhwbG9kZSBleHBvbmVudGlhbGx5IHVzaW5nIGFsaWFzZXMpLlxuICBpZiAoQXJyYXkuaXNBcnJheShrZXlOb2RlKSkge1xuICAgIGtleU5vZGUgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChrZXlOb2RlKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMCwgcXVhbnRpdHkgPSBrZXlOb2RlLmxlbmd0aDsgaW5kZXggPCBxdWFudGl0eTsgaW5kZXgrKykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZVtpbmRleF0pKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBcIm5lc3RlZCBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGtleXNcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGtleU5vZGUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgX2NsYXNzKGtleU5vZGVbaW5kZXhdKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICAgICAgKSB7XG4gICAgICAgIGtleU5vZGVbaW5kZXhdID0gXCJbb2JqZWN0IE9iamVjdF1cIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBdm9pZCBjb2RlIGV4ZWN1dGlvbiBpbiBsb2FkKCkgdmlhIHRvU3RyaW5nIHByb3BlcnR5XG4gIC8vIChzdGlsbCB1c2UgaXRzIG93biB0b1N0cmluZyBmb3IgYXJyYXlzLCB0aW1lc3RhbXBzLFxuICAvLyBhbmQgd2hhdGV2ZXIgdXNlciBzY2hlbWEgZXh0ZW5zaW9ucyBoYXBwZW4gdG8gaGF2ZSBAQHRvU3RyaW5nVGFnKVxuICBpZiAodHlwZW9mIGtleU5vZGUgPT09IFwib2JqZWN0XCIgJiYgX2NsYXNzKGtleU5vZGUpID09PSBcIltvYmplY3QgT2JqZWN0XVwiKSB7XG4gICAga2V5Tm9kZSA9IFwiW29iamVjdCBPYmplY3RdXCI7XG4gIH1cblxuICBrZXlOb2RlID0gU3RyaW5nKGtleU5vZGUpO1xuXG4gIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICByZXN1bHQgPSB7fTtcbiAgfVxuXG4gIGlmIChrZXlUYWcgPT09IFwidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2VcIikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlTm9kZSkpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIGxldCBpbmRleCA9IDAsIHF1YW50aXR5ID0gdmFsdWVOb2RlLmxlbmd0aDtcbiAgICAgICAgaW5kZXggPCBxdWFudGl0eTtcbiAgICAgICAgaW5kZXgrK1xuICAgICAgKSB7XG4gICAgICAgIG1lcmdlTWFwcGluZ3Moc3RhdGUsIHJlc3VsdCwgdmFsdWVOb2RlW2luZGV4XSwgb3ZlcnJpZGFibGVLZXlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZSwgcmVzdWx0LCB2YWx1ZU5vZGUgYXMgQXJyYXlPYmplY3QsIG92ZXJyaWRhYmxlS2V5cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChcbiAgICAgICFzdGF0ZS5qc29uICYmXG4gICAgICAhaGFzT3duKG92ZXJyaWRhYmxlS2V5cywga2V5Tm9kZSkgJiZcbiAgICAgIGhhc093bihyZXN1bHQsIGtleU5vZGUpXG4gICAgKSB7XG4gICAgICBzdGF0ZS5saW5lID0gc3RhcnRMaW5lIHx8IHN0YXRlLmxpbmU7XG4gICAgICBzdGF0ZS5wb3NpdGlvbiA9IHN0YXJ0UG9zIHx8IHN0YXRlLnBvc2l0aW9uO1xuICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsIFwiZHVwbGljYXRlZCBtYXBwaW5nIGtleVwiKTtcbiAgICB9XG4gICAgcmVzdWx0W2tleU5vZGVdID0gdmFsdWVOb2RlO1xuICAgIGRlbGV0ZSBvdmVycmlkYWJsZUtleXNba2V5Tm9kZV07XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiByZWFkTGluZUJyZWFrKHN0YXRlOiBMb2FkZXJTdGF0ZSkge1xuICBjb25zdCBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCA9PT0gMHgwYSAvKiBMRiAqLykge1xuICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4MGQgLyogQ1IgKi8pIHtcbiAgICBzdGF0ZS5wb3NpdGlvbisrO1xuICAgIGlmIChzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSA9PT0gMHgwYSAvKiBMRiAqLykge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsIFwiYSBsaW5lIGJyZWFrIGlzIGV4cGVjdGVkXCIpO1xuICB9XG5cbiAgc3RhdGUubGluZSArPSAxO1xuICBzdGF0ZS5saW5lU3RhcnQgPSBzdGF0ZS5wb3NpdGlvbjtcbn1cblxuZnVuY3Rpb24gc2tpcFNlcGFyYXRpb25TcGFjZShcbiAgc3RhdGU6IExvYWRlclN0YXRlLFxuICBhbGxvd0NvbW1lbnRzOiBib29sZWFuLFxuICBjaGVja0luZGVudDogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgbGV0IGxpbmVCcmVha3MgPSAwLFxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgd2hpbGUgKGlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dDb21tZW50cyAmJiBjaCA9PT0gMHgyMyAvKiAjICovKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICAgIH0gd2hpbGUgKGNoICE9PSAweDBhICYmIC8qIExGICovIGNoICE9PSAweDBkICYmIC8qIENSICovIGNoICE9PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoaXNFT0woY2gpKSB7XG4gICAgICByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICAgIGxpbmVCcmVha3MrKztcbiAgICAgIHN0YXRlLmxpbmVJbmRlbnQgPSAwO1xuXG4gICAgICB3aGlsZSAoY2ggPT09IDB4MjAgLyogU3BhY2UgKi8pIHtcbiAgICAgICAgc3RhdGUubGluZUluZGVudCsrO1xuICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICBjaGVja0luZGVudCAhPT0gLTEgJiZcbiAgICBsaW5lQnJlYWtzICE9PSAwICYmXG4gICAgc3RhdGUubGluZUluZGVudCA8IGNoZWNrSW5kZW50XG4gICkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgXCJkZWZpY2llbnQgaW5kZW50YXRpb25cIik7XG4gIH1cblxuICByZXR1cm4gbGluZUJyZWFrcztcbn1cblxuZnVuY3Rpb24gdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlOiBMb2FkZXJTdGF0ZSk6IGJvb2xlYW4ge1xuICBsZXQgX3Bvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG4gIGxldCBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTtcblxuICAvLyBDb25kaXRpb24gc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCBpcyB0ZXN0ZWRcbiAgLy8gaW4gcGFyZW50IG9uIGVhY2ggY2FsbCwgZm9yIGVmZmljaWVuY3kuIE5vIG5lZWRzIHRvIHRlc3QgaGVyZSBhZ2Fpbi5cbiAgaWYgKFxuICAgIChjaCA9PT0gMHgyZCB8fCAvKiAtICovIGNoID09PSAweDJlKSAvKiAuICovICYmXG4gICAgY2ggPT09IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uICsgMSkgJiZcbiAgICBjaCA9PT0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAyKVxuICApIHtcbiAgICBfcG9zaXRpb24gKz0gMztcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24pO1xuXG4gICAgaWYgKGNoID09PSAwIHx8IGlzV3NPckVvbChjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZTogTG9hZGVyU3RhdGUsIGNvdW50OiBudW1iZXIpIHtcbiAgaWYgKGNvdW50ID09PSAxKSB7XG4gICAgc3RhdGUucmVzdWx0ICs9IFwiIFwiO1xuICB9IGVsc2UgaWYgKGNvdW50ID4gMSkge1xuICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiXFxuXCIsIGNvdW50IC0gMSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhZFBsYWluU2NhbGFyKFxuICBzdGF0ZTogTG9hZGVyU3RhdGUsXG4gIG5vZGVJbmRlbnQ6IG51bWJlcixcbiAgd2l0aGluRmxvd0NvbGxlY3Rpb246IGJvb2xlYW4sXG4pOiBib29sZWFuIHtcbiAgY29uc3Qga2luZCA9IHN0YXRlLmtpbmQ7XG4gIGNvbnN0IHJlc3VsdCA9IHN0YXRlLnJlc3VsdDtcbiAgbGV0IGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgaWYgKFxuICAgIGlzV3NPckVvbChjaCkgfHxcbiAgICBpc0Zsb3dJbmRpY2F0b3IoY2gpIHx8XG4gICAgY2ggPT09IDB4MjMgLyogIyAqLyB8fFxuICAgIGNoID09PSAweDI2IC8qICYgKi8gfHxcbiAgICBjaCA9PT0gMHgyYSAvKiAqICovIHx8XG4gICAgY2ggPT09IDB4MjEgLyogISAqLyB8fFxuICAgIGNoID09PSAweDdjIC8qIHwgKi8gfHxcbiAgICBjaCA9PT0gMHgzZSAvKiA+ICovIHx8XG4gICAgY2ggPT09IDB4MjcgLyogJyAqLyB8fFxuICAgIGNoID09PSAweDIyIC8qIFwiICovIHx8XG4gICAgY2ggPT09IDB4MjUgLyogJSAqLyB8fFxuICAgIGNoID09PSAweDQwIC8qIEAgKi8gfHxcbiAgICBjaCA9PT0gMHg2MCAvKiBgICovXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBmb2xsb3dpbmc6IG51bWJlcjtcbiAgaWYgKGNoID09PSAweDNmIHx8IC8qID8gKi8gY2ggPT09IDB4MmQgLyogLSAqLykge1xuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgIGlmIChcbiAgICAgIGlzV3NPckVvbChmb2xsb3dpbmcpIHx8XG4gICAgICAod2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNGbG93SW5kaWNhdG9yKGZvbGxvd2luZykpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUua2luZCA9IFwic2NhbGFyXCI7XG4gIHN0YXRlLnJlc3VsdCA9IFwiXCI7XG4gIGxldCBjYXB0dXJlRW5kOiBudW1iZXIsXG4gICAgY2FwdHVyZVN0YXJ0ID0gKGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbik7XG4gIGxldCBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuICBsZXQgbGluZSA9IDA7XG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmIChjaCA9PT0gMHgzYSAvKiA6ICovKSB7XG4gICAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXNXc09yRW9sKGZvbGxvd2luZykgfHxcbiAgICAgICAgKHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzRmxvd0luZGljYXRvcihmb2xsb3dpbmcpKVxuICAgICAgKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjMgLyogIyAqLykge1xuICAgICAgY29uc3QgcHJlY2VkaW5nID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiAtIDEpO1xuXG4gICAgICBpZiAoaXNXc09yRW9sKHByZWNlZGluZykpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHx8XG4gICAgICAod2l0aGluRmxvd0NvbGxlY3Rpb24gJiYgaXNGbG93SW5kaWNhdG9yKGNoKSlcbiAgICApIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoaXNFT0woY2gpKSB7XG4gICAgICBsaW5lID0gc3RhdGUubGluZTtcbiAgICAgIGNvbnN0IGxpbmVTdGFydCA9IHN0YXRlLmxpbmVTdGFydDtcbiAgICAgIGNvbnN0IGxpbmVJbmRlbnQgPSBzdGF0ZS5saW5lSW5kZW50O1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIC0xKTtcblxuICAgICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPj0gbm9kZUluZGVudCkge1xuICAgICAgICBoYXNQZW5kaW5nQ29udGVudCA9IHRydWU7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUucG9zaXRpb24gPSBjYXB0dXJlRW5kO1xuICAgICAgICBzdGF0ZS5saW5lID0gbGluZTtcbiAgICAgICAgc3RhdGUubGluZVN0YXJ0ID0gbGluZVN0YXJ0O1xuICAgICAgICBzdGF0ZS5saW5lSW5kZW50ID0gbGluZUluZGVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1BlbmRpbmdDb250ZW50KSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7XG4gICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlLCBzdGF0ZS5saW5lIC0gbGluZSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlLnBvc2l0aW9uICsgMTtcbiAgICB9XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIH1cblxuICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBmYWxzZSk7XG5cbiAgaWYgKHN0YXRlLnJlc3VsdCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9IGtpbmQ7XG4gIHN0YXRlLnJlc3VsdCA9IHJlc3VsdDtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZWFkU2luZ2xlUXVvdGVkU2NhbGFyKFxuICBzdGF0ZTogTG9hZGVyU3RhdGUsXG4gIG5vZGVJbmRlbnQ6IG51bWJlcixcbik6IGJvb2xlYW4ge1xuICBsZXQgY2gsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZDtcblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyNyAvKiAnICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9IFwic2NhbGFyXCI7XG4gIHN0YXRlLnJlc3VsdCA9IFwiXCI7XG4gIHN0YXRlLnBvc2l0aW9uKys7XG4gIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcblxuICB3aGlsZSAoKGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikpICE9PSAwKSB7XG4gICAgaWYgKGNoID09PSAweDI3IC8qICcgKi8pIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgaWYgKGNoID09PSAweDI3IC8qICcgKi8pIHtcbiAgICAgICAgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNFT0woY2gpKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCB0cnVlKTtcbiAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIGZhbHNlLCBub2RlSW5kZW50KSk7XG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHN0YXRlLnBvc2l0aW9uID09PSBzdGF0ZS5saW5lU3RhcnQgJiZcbiAgICAgIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgXCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXJcIixcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgc3RhdGUsXG4gICAgXCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHNpbmdsZSBxdW90ZWQgc2NhbGFyXCIsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlYWREb3VibGVRdW90ZWRTY2FsYXIoXG4gIHN0YXRlOiBMb2FkZXJTdGF0ZSxcbiAgbm9kZUluZGVudDogbnVtYmVyLFxuKTogYm9vbGVhbiB7XG4gIGxldCBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyMiAvKiBcIiAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRlLmtpbmQgPSBcInNjYWxhclwiO1xuICBzdGF0ZS5yZXN1bHQgPSBcIlwiO1xuICBzdGF0ZS5wb3NpdGlvbisrO1xuICBsZXQgY2FwdHVyZUVuZDogbnVtYmVyLFxuICAgIGNhcHR1cmVTdGFydCA9IChjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb24pO1xuICBsZXQgdG1wOiBudW1iZXI7XG4gIHdoaWxlICgoY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKSkgIT09IDApIHtcbiAgICBpZiAoY2ggPT09IDB4MjIgLyogXCIgKi8pIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGNoID09PSAweDVjIC8qIFxcICovKSB7XG4gICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZSwgY2FwdHVyZVN0YXJ0LCBzdGF0ZS5wb3NpdGlvbiwgdHJ1ZSk7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgIGlmIChpc0VPTChjaCkpIHtcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpO1xuXG4gICAgICAgIC8vIFRPRE8oYmFydGxvbWllanUpOiByZXdvcmsgdG8gaW5saW5lIGZuIHdpdGggbm8gdHlwZSBjYXN0P1xuICAgICAgfSBlbHNlIGlmIChjaCA8IDI1NiAmJiBzaW1wbGVFc2NhcGVDaGVja1tjaF0pIHtcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IHNpbXBsZUVzY2FwZU1hcFtjaF07XG4gICAgICAgIHN0YXRlLnBvc2l0aW9uKys7XG4gICAgICB9IGVsc2UgaWYgKCh0bXAgPSBlc2NhcGVkSGV4TGVuKGNoKSkgPiAwKSB7XG4gICAgICAgIGxldCBoZXhMZW5ndGggPSB0bXA7XG4gICAgICAgIGxldCBoZXhSZXN1bHQgPSAwO1xuXG4gICAgICAgIGZvciAoOyBoZXhMZW5ndGggPiAwOyBoZXhMZW5ndGgtLSkge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICAgIGlmICgodG1wID0gZnJvbUhleENvZGUoY2gpKSA+PSAwKSB7XG4gICAgICAgICAgICBoZXhSZXN1bHQgPSAoaGV4UmVzdWx0IDw8IDQpICsgdG1wO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgXCJleHBlY3RlZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXJcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNoYXJGcm9tQ29kZXBvaW50KGhleFJlc3VsdCk7XG5cbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBcInVua25vd24gZXNjYXBlIHNlcXVlbmNlXCIpO1xuICAgICAgfVxuXG4gICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUucG9zaXRpb247XG4gICAgfSBlbHNlIGlmIChpc0VPTChjaCkpIHtcbiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpO1xuICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZSwgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgZmFsc2UsIG5vZGVJbmRlbnQpKTtcbiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc3RhdGUucG9zaXRpb24gPT09IHN0YXRlLmxpbmVTdGFydCAmJlxuICAgICAgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBcInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhclwiLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZS5wb3NpdGlvbjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICBzdGF0ZSxcbiAgICBcInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgZG91YmxlIHF1b3RlZCBzY2FsYXJcIixcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlOiBMb2FkZXJTdGF0ZSwgbm9kZUluZGVudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGxldCBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICBsZXQgdGVybWluYXRvcjogbnVtYmVyO1xuICBsZXQgaXNNYXBwaW5nID0gdHJ1ZTtcbiAgbGV0IHJlc3VsdDogUmVzdWx0VHlwZSA9IHt9O1xuICBpZiAoY2ggPT09IDB4NWIgLyogWyAqLykge1xuICAgIHRlcm1pbmF0b3IgPSAweDVkOyAvKiBdICovXG4gICAgaXNNYXBwaW5nID0gZmFsc2U7XG4gICAgcmVzdWx0ID0gW107XG4gIH0gZWxzZSBpZiAoY2ggPT09IDB4N2IgLyogeyAqLykge1xuICAgIHRlcm1pbmF0b3IgPSAweDdkOyAvKiB9ICovXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgIHN0YXRlLmFuY2hvciAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiBzdGF0ZS5hbmNob3IgIT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBzdGF0ZS5hbmNob3JNYXAgIT0gXCJ1bmRlZmluZWRcIlxuICApIHtcbiAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHJlc3VsdDtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICBjb25zdCB0YWcgPSBzdGF0ZS50YWcsXG4gICAgYW5jaG9yID0gc3RhdGUuYW5jaG9yO1xuICBsZXQgcmVhZE5leHQgPSB0cnVlO1xuICBsZXQgdmFsdWVOb2RlLFxuICAgIGtleU5vZGUsXG4gICAga2V5VGFnOiBzdHJpbmcgfCBudWxsID0gKGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsKSxcbiAgICBpc0V4cGxpY2l0UGFpcjogYm9vbGVhbixcbiAgICBpc1BhaXIgPSAoaXNFeHBsaWNpdFBhaXIgPSBmYWxzZSk7XG4gIGxldCBmb2xsb3dpbmcgPSAwLFxuICAgIGxpbmUgPSAwO1xuICBjb25zdCBvdmVycmlkYWJsZUtleXM6IEFycmF5T2JqZWN0PGJvb2xlYW4+ID0ge307XG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gdGVybWluYXRvcikge1xuICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgIHN0YXRlLnRhZyA9IHRhZztcbiAgICAgIHN0YXRlLmFuY2hvciA9IGFuY2hvcjtcbiAgICAgIHN0YXRlLmtpbmQgPSBpc01hcHBpbmcgPyBcIm1hcHBpbmdcIiA6IFwic2VxdWVuY2VcIjtcbiAgICAgIHN0YXRlLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXJlYWROZXh0KSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgXCJtaXNzZWQgY29tbWEgYmV0d2VlbiBmbG93IGNvbGxlY3Rpb24gZW50cmllc1wiKTtcbiAgICB9XG5cbiAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICBpc1BhaXIgPSBpc0V4cGxpY2l0UGFpciA9IGZhbHNlO1xuXG4gICAgaWYgKGNoID09PSAweDNmIC8qID8gKi8pIHtcbiAgICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcblxuICAgICAgaWYgKGlzV3NPckVvbChmb2xsb3dpbmcpKSB7XG4gICAgICAgIGlzUGFpciA9IGlzRXhwbGljaXRQYWlyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucG9zaXRpb24rKztcbiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGluZSA9IHN0YXRlLmxpbmU7XG4gICAgY29tcG9zZU5vZGUoc3RhdGUsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpO1xuICAgIGtleVRhZyA9IHN0YXRlLnRhZyB8fCBudWxsO1xuICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKChpc0V4cGxpY2l0UGFpciB8fCBzdGF0ZS5saW5lID09PSBsaW5lKSAmJiBjaCA9PT0gMHgzYSAvKiA6ICovKSB7XG4gICAgICBpc1BhaXIgPSB0cnVlO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgbm9kZUluZGVudCk7XG4gICAgICBjb21wb3NlTm9kZShzdGF0ZSwgbm9kZUluZGVudCwgQ09OVEVYVF9GTE9XX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKGlzTWFwcGluZykge1xuICAgICAgc3RvcmVNYXBwaW5nUGFpcihcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgb3ZlcnJpZGFibGVLZXlzLFxuICAgICAgICBrZXlUYWcsXG4gICAgICAgIGtleU5vZGUsXG4gICAgICAgIHZhbHVlTm9kZSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChpc1BhaXIpIHtcbiAgICAgIChyZXN1bHQgYXMgQXJyYXlPYmplY3RbXSkucHVzaChcbiAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIG92ZXJyaWRhYmxlS2V5cyxcbiAgICAgICAgICBrZXlUYWcsXG4gICAgICAgICAga2V5Tm9kZSxcbiAgICAgICAgICB2YWx1ZU5vZGUsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAocmVzdWx0IGFzIFJlc3VsdFR5cGVbXSkucHVzaChrZXlOb2RlIGFzIFJlc3VsdFR5cGUpO1xuICAgIH1cblxuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIG5vZGVJbmRlbnQpO1xuXG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gMHgyYyAvKiAsICovKSB7XG4gICAgICByZWFkTmV4dCA9IHRydWU7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYWROZXh0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgc3RhdGUsXG4gICAgXCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvblwiLFxuICApO1xufVxuXG5mdW5jdGlvbiByZWFkQmxvY2tTY2FsYXIoc3RhdGU6IExvYWRlclN0YXRlLCBub2RlSW5kZW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgbGV0IGNob21waW5nID0gQ0hPTVBJTkdfQ0xJUCxcbiAgICBkaWRSZWFkQ29udGVudCA9IGZhbHNlLFxuICAgIGRldGVjdGVkSW5kZW50ID0gZmFsc2UsXG4gICAgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQsXG4gICAgZW1wdHlMaW5lcyA9IDAsXG4gICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZTtcblxuICBsZXQgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBsZXQgZm9sZGluZyA9IGZhbHNlO1xuICBpZiAoY2ggPT09IDB4N2MgLyogfCAqLykge1xuICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHgzZSAvKiA+ICovKSB7XG4gICAgZm9sZGluZyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGUua2luZCA9IFwic2NhbGFyXCI7XG4gIHN0YXRlLnJlc3VsdCA9IFwiXCI7XG5cbiAgbGV0IHRtcCA9IDA7XG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgIGlmIChjaCA9PT0gMHgyYiB8fCAvKiArICovIGNoID09PSAweDJkIC8qIC0gKi8pIHtcbiAgICAgIGlmIChDSE9NUElOR19DTElQID09PSBjaG9tcGluZykge1xuICAgICAgICBjaG9tcGluZyA9IGNoID09PSAweDJiIC8qICsgKi8gPyBDSE9NUElOR19LRUVQIDogQ0hPTVBJTkdfU1RSSVA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgXCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgodG1wID0gZnJvbURlY2ltYWxDb2RlKGNoKSkgPj0gMCkge1xuICAgICAgaWYgKHRtcCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBcImJhZCBleHBsaWNpdCBpbmRlbnRhdGlvbiB3aWR0aCBvZiBhIGJsb2NrIHNjYWxhcjsgaXQgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmVcIixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIWRldGVjdGVkSW5kZW50KSB7XG4gICAgICAgIHRleHRJbmRlbnQgPSBub2RlSW5kZW50ICsgdG1wIC0gMTtcbiAgICAgICAgZGV0ZWN0ZWRJbmRlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsIFwicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7XG4gICAgZG8ge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH0gd2hpbGUgKGlzV2hpdGVTcGFjZShjaCkpO1xuXG4gICAgaWYgKGNoID09PSAweDIzIC8qICMgKi8pIHtcbiAgICAgIGRvIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgfSB3aGlsZSAoIWlzRU9MKGNoKSAmJiBjaCAhPT0gMCk7XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKGNoICE9PSAwKSB7XG4gICAgcmVhZExpbmVCcmVhayhzdGF0ZSk7XG4gICAgc3RhdGUubGluZUluZGVudCA9IDA7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgd2hpbGUgKFxuICAgICAgKCFkZXRlY3RlZEluZGVudCB8fCBzdGF0ZS5saW5lSW5kZW50IDwgdGV4dEluZGVudCkgJiZcbiAgICAgIGNoID09PSAweDIwIC8qIFNwYWNlICovXG4gICAgKSB7XG4gICAgICBzdGF0ZS5saW5lSW5kZW50Kys7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKCFkZXRlY3RlZEluZGVudCAmJiBzdGF0ZS5saW5lSW5kZW50ID4gdGV4dEluZGVudCkge1xuICAgICAgdGV4dEluZGVudCA9IHN0YXRlLmxpbmVJbmRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRU9MKGNoKSkge1xuICAgICAgZW1wdHlMaW5lcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRW5kIG9mIHRoZSBzY2FsYXIuXG4gICAgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCB0ZXh0SW5kZW50KSB7XG4gICAgICAvLyBQZXJmb3JtIHRoZSBjaG9tcGluZy5cbiAgICAgIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfS0VFUCkge1xuICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcbiAgICAgICAgICBcIlxcblwiLFxuICAgICAgICAgIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfQ0xJUCkge1xuICAgICAgICBpZiAoZGlkUmVhZENvbnRlbnQpIHtcbiAgICAgICAgICAvLyBpLmUuIG9ubHkgaWYgdGhlIHNjYWxhciBpcyBub3QgZW1wdHkuXG4gICAgICAgICAgc3RhdGUucmVzdWx0ICs9IFwiXFxuXCI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQnJlYWsgdGhpcyBgd2hpbGVgIGN5Y2xlIGFuZCBnbyB0byB0aGUgZnVuY3Rpb24ncyBlcGlsb2d1ZS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIEZvbGRlZCBzdHlsZTogdXNlIGZhbmN5IHJ1bGVzIHRvIGhhbmRsZSBsaW5lIGJyZWFrcy5cbiAgICBpZiAoZm9sZGluZykge1xuICAgICAgLy8gTGluZXMgc3RhcnRpbmcgd2l0aCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIChtb3JlLWluZGVudGVkIGxpbmVzKSBhcmUgbm90IGZvbGRlZC5cbiAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gdHJ1ZTtcbiAgICAgICAgLy8gZXhjZXB0IGZvciB0aGUgZmlyc3QgY29udGVudCBsaW5lIChjZi4gRXhhbXBsZSA4LjEpXG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFxuICAgICAgICAgIFwiXFxuXCIsXG4gICAgICAgICAgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRW5kIG9mIG1vcmUtaW5kZW50ZWQgYmxvY2suXG4gICAgICB9IGVsc2UgaWYgKGF0TW9yZUluZGVudGVkKSB7XG4gICAgICAgIGF0TW9yZUluZGVudGVkID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KFwiXFxuXCIsIGVtcHR5TGluZXMgKyAxKTtcblxuICAgICAgICAvLyBKdXN0IG9uZSBsaW5lIGJyZWFrIC0gcGVyY2VpdmUgYXMgdGhlIHNhbWUgbGluZS5cbiAgICAgIH0gZWxzZSBpZiAoZW1wdHlMaW5lcyA9PT0gMCkge1xuICAgICAgICBpZiAoZGlkUmVhZENvbnRlbnQpIHtcbiAgICAgICAgICAvLyBpLmUuIG9ubHkgaWYgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgc29tZSBzY2FsYXIgY29udGVudC5cbiAgICAgICAgICBzdGF0ZS5yZXN1bHQgKz0gXCIgXCI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXZlcmFsIGxpbmUgYnJlYWtzIC0gcGVyY2VpdmUgYXMgZGlmZmVyZW50IGxpbmVzLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoXCJcXG5cIiwgZW1wdHlMaW5lcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIExpdGVyYWwgc3R5bGU6IGp1c3QgYWRkIGV4YWN0IG51bWJlciBvZiBsaW5lIGJyZWFrcyBiZXR3ZWVuIGNvbnRlbnQgbGluZXMuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEtlZXAgYWxsIGxpbmUgYnJlYWtzIGV4Y2VwdCB0aGUgaGVhZGVyIGxpbmUgYnJlYWsuXG4gICAgICBzdGF0ZS5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdChcbiAgICAgICAgXCJcXG5cIixcbiAgICAgICAgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGRpZFJlYWRDb250ZW50ID0gdHJ1ZTtcbiAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7XG4gICAgZW1wdHlMaW5lcyA9IDA7XG4gICAgY29uc3QgY2FwdHVyZVN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoIWlzRU9MKGNoKSAmJiBjaCAhPT0gMCkge1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlLCBjYXB0dXJlU3RhcnQsIHN0YXRlLnBvc2l0aW9uLCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2NrU2VxdWVuY2Uoc3RhdGU6IExvYWRlclN0YXRlLCBub2RlSW5kZW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgbGV0IGxpbmU6IG51bWJlcixcbiAgICBmb2xsb3dpbmc6IG51bWJlcixcbiAgICBkZXRlY3RlZCA9IGZhbHNlLFxuICAgIGNoOiBudW1iZXI7XG4gIGNvbnN0IHRhZyA9IHN0YXRlLnRhZyxcbiAgICBhbmNob3IgPSBzdGF0ZS5hbmNob3IsXG4gICAgcmVzdWx0OiB1bmtub3duW10gPSBbXTtcblxuICBpZiAoXG4gICAgc3RhdGUuYW5jaG9yICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHN0YXRlLmFuY2hvciAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBzdGF0ZS5hbmNob3JNYXAgIT09IFwidW5kZWZpbmVkXCJcbiAgKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSByZXN1bHQ7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGlmIChjaCAhPT0gMHgyZCAvKiAtICovKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBmb2xsb3dpbmcgPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uICsgMSk7XG5cbiAgICBpZiAoIWlzV3NPckVvbChmb2xsb3dpbmcpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZXRlY3RlZCA9IHRydWU7XG4gICAgc3RhdGUucG9zaXRpb24rKztcblxuICAgIGlmIChza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSkpIHtcbiAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50IDw9IG5vZGVJbmRlbnQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpbmUgPSBzdGF0ZS5saW5lO1xuICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX0lOLCBmYWxzZSwgdHJ1ZSk7XG4gICAgcmVzdWx0LnB1c2goc3RhdGUucmVzdWx0KTtcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG5cbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKChzdGF0ZS5saW5lID09PSBsaW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiBjaCAhPT0gMCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsIFwiYmFkIGluZGVudGF0aW9uIG9mIGEgc2VxdWVuY2UgZW50cnlcIik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRldGVjdGVkKSB7XG4gICAgc3RhdGUudGFnID0gdGFnO1xuICAgIHN0YXRlLmFuY2hvciA9IGFuY2hvcjtcbiAgICBzdGF0ZS5raW5kID0gXCJzZXF1ZW5jZVwiO1xuICAgIHN0YXRlLnJlc3VsdCA9IHJlc3VsdDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9ja01hcHBpbmcoXG4gIHN0YXRlOiBMb2FkZXJTdGF0ZSxcbiAgbm9kZUluZGVudDogbnVtYmVyLFxuICBmbG93SW5kZW50OiBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgY29uc3QgdGFnID0gc3RhdGUudGFnLFxuICAgIGFuY2hvciA9IHN0YXRlLmFuY2hvcixcbiAgICByZXN1bHQgPSB7fSxcbiAgICBvdmVycmlkYWJsZUtleXMgPSB7fTtcbiAgbGV0IGZvbGxvd2luZzogbnVtYmVyLFxuICAgIGFsbG93Q29tcGFjdCA9IGZhbHNlLFxuICAgIGxpbmU6IG51bWJlcixcbiAgICBwb3M6IG51bWJlcixcbiAgICBrZXlUYWcgPSBudWxsLFxuICAgIGtleU5vZGUgPSBudWxsLFxuICAgIHZhbHVlTm9kZSA9IG51bGwsXG4gICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlLFxuICAgIGRldGVjdGVkID0gZmFsc2UsXG4gICAgY2g6IG51bWJlcjtcblxuICBpZiAoXG4gICAgc3RhdGUuYW5jaG9yICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHN0YXRlLmFuY2hvciAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBzdGF0ZS5hbmNob3JNYXAgIT09IFwidW5kZWZpbmVkXCJcbiAgKSB7XG4gICAgc3RhdGUuYW5jaG9yTWFwW3N0YXRlLmFuY2hvcl0gPSByZXN1bHQ7XG4gIH1cblxuICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIHdoaWxlIChjaCAhPT0gMCkge1xuICAgIGZvbGxvd2luZyA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKTtcbiAgICBsaW5lID0gc3RhdGUubGluZTsgLy8gU2F2ZSB0aGUgY3VycmVudCBsaW5lLlxuICAgIHBvcyA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgLy9cbiAgICAvLyBFeHBsaWNpdCBub3RhdGlvbiBjYXNlLiBUaGVyZSBhcmUgdHdvIHNlcGFyYXRlIGJsb2NrczpcbiAgICAvLyBmaXJzdCBmb3IgdGhlIGtleSAoZGVub3RlZCBieSBcIj9cIikgYW5kIHNlY29uZCBmb3IgdGhlIHZhbHVlIChkZW5vdGVkIGJ5IFwiOlwiKVxuICAgIC8vXG4gICAgaWYgKChjaCA9PT0gMHgzZiB8fCAvKiA/ICovIGNoID09PSAweDNhKSAmJiAvKiA6ICovIGlzV3NPckVvbChmb2xsb3dpbmcpKSB7XG4gICAgICBpZiAoY2ggPT09IDB4M2YgLyogPyAqLykge1xuICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgIG92ZXJyaWRhYmxlS2V5cyxcbiAgICAgICAgICAgIGtleVRhZyBhcyBzdHJpbmcsXG4gICAgICAgICAgICBrZXlOb2RlLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICBhdEV4cGxpY2l0S2V5ID0gdHJ1ZTtcbiAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAvLyBpLmUuIDB4M0EvKiA6ICovID09PSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGV4cGxpY2l0IGtleS5cbiAgICAgICAgYXRFeHBsaWNpdEtleSA9IGZhbHNlO1xuICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgXCJpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLnBvc2l0aW9uICs9IDE7XG4gICAgICBjaCA9IGZvbGxvd2luZztcblxuICAgICAgLy9cbiAgICAgIC8vIEltcGxpY2l0IG5vdGF0aW9uIGNhc2UuIEZsb3ctc3R5bGUgbm9kZSBhcyB0aGUga2V5IGZpcnN0LCB0aGVuIFwiOlwiLCBhbmQgdGhlIHZhbHVlLlxuICAgICAgLy9cbiAgICB9IGVsc2UgaWYgKGNvbXBvc2VOb2RlKHN0YXRlLCBmbG93SW5kZW50LCBDT05URVhUX0ZMT1dfT1VULCBmYWxzZSwgdHJ1ZSkpIHtcbiAgICAgIGlmIChzdGF0ZS5saW5lID09PSBsaW5lKSB7XG4gICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICAgICAgd2hpbGUgKGlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2ggPT09IDB4M2EgLyogOiAqLykge1xuICAgICAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICAgICAgICAgIGlmICghaXNXc09yRW9sKGNoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBcImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZ1wiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkge1xuICAgICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihcbiAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgb3ZlcnJpZGFibGVLZXlzLFxuICAgICAgICAgICAgICBrZXlUYWcgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICBrZXlOb2RlLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGtleVRhZyA9IGtleU5vZGUgPSB2YWx1ZU5vZGUgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRldGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBhdEV4cGxpY2l0S2V5ID0gZmFsc2U7XG4gICAgICAgICAgYWxsb3dDb21wYWN0ID0gZmFsc2U7XG4gICAgICAgICAga2V5VGFnID0gc3RhdGUudGFnO1xuICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgXCJjYW4gbm90IHJlYWQgYW4gaW1wbGljaXQgbWFwcGluZyBwYWlyOyBhIGNvbG9uIGlzIG1pc3NlZFwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUudGFnID0gdGFnO1xuICAgICAgICAgIHN0YXRlLmFuY2hvciA9IGFuY2hvcjtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgXCJjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXlcIixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnRhZyA9IHRhZztcbiAgICAgICAgc3RhdGUuYW5jaG9yID0gYW5jaG9yO1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gS2VlcCB0aGUgcmVzdWx0IG9mIGBjb21wb3NlTm9kZWAuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrOyAvLyBSZWFkaW5nIGlzIGRvbmUuIEdvIHRvIHRoZSBlcGlsb2d1ZS5cbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIENvbW1vbiByZWFkaW5nIGNvZGUgZm9yIGJvdGggZXhwbGljaXQgYW5kIGltcGxpY2l0IG5vdGF0aW9ucy5cbiAgICAvL1xuICAgIGlmIChzdGF0ZS5saW5lID09PSBsaW5lIHx8IHN0YXRlLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbXBvc2VOb2RlKHN0YXRlLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX09VVCwgdHJ1ZSwgYWxsb3dDb21wYWN0KVxuICAgICAgKSB7XG4gICAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgICAga2V5Tm9kZSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZS5yZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhdEV4cGxpY2l0S2V5KSB7XG4gICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIG92ZXJyaWRhYmxlS2V5cyxcbiAgICAgICAgICBrZXlUYWcgYXMgc3RyaW5nLFxuICAgICAgICAgIGtleU5vZGUsXG4gICAgICAgICAgdmFsdWVOb2RlLFxuICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgcG9zLFxuICAgICAgICApO1xuICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IG5vZGVJbmRlbnQgJiYgY2ggIT09IDApIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBcImJhZCBpbmRlbnRhdGlvbiBvZiBhIG1hcHBpbmcgZW50cnlcIik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50IDwgbm9kZUluZGVudCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy9cbiAgLy8gRXBpbG9ndWUuXG4gIC8vXG5cbiAgLy8gU3BlY2lhbCBjYXNlOiBsYXN0IG1hcHBpbmcncyBub2RlIGNvbnRhaW5zIG9ubHkgdGhlIGtleSBpbiBleHBsaWNpdCBub3RhdGlvbi5cbiAgaWYgKGF0RXhwbGljaXRLZXkpIHtcbiAgICBzdG9yZU1hcHBpbmdQYWlyKFxuICAgICAgc3RhdGUsXG4gICAgICByZXN1bHQsXG4gICAgICBvdmVycmlkYWJsZUtleXMsXG4gICAgICBrZXlUYWcgYXMgc3RyaW5nLFxuICAgICAga2V5Tm9kZSxcbiAgICAgIG51bGwsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEV4cG9zZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcuXG4gIGlmIChkZXRlY3RlZCkge1xuICAgIHN0YXRlLnRhZyA9IHRhZztcbiAgICBzdGF0ZS5hbmNob3IgPSBhbmNob3I7XG4gICAgc3RhdGUua2luZCA9IFwibWFwcGluZ1wiO1xuICAgIHN0YXRlLnJlc3VsdCA9IHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RlZDtcbn1cblxuZnVuY3Rpb24gcmVhZFRhZ1Byb3BlcnR5KHN0YXRlOiBMb2FkZXJTdGF0ZSk6IGJvb2xlYW4ge1xuICBsZXQgcG9zaXRpb246IG51bWJlcixcbiAgICBpc1ZlcmJhdGltID0gZmFsc2UsXG4gICAgaXNOYW1lZCA9IGZhbHNlLFxuICAgIHRhZ0hhbmRsZSA9IFwiXCIsXG4gICAgdGFnTmFtZTogc3RyaW5nLFxuICAgIGNoOiBudW1iZXI7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggIT09IDB4MjEgLyogISAqLykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS50YWcgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgXCJkdXBsaWNhdGlvbiBvZiBhIHRhZyBwcm9wZXJ0eVwiKTtcbiAgfVxuXG4gIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcblxuICBpZiAoY2ggPT09IDB4M2MgLyogPCAqLykge1xuICAgIGlzVmVyYmF0aW0gPSB0cnVlO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfSBlbHNlIGlmIChjaCA9PT0gMHgyMSAvKiAhICovKSB7XG4gICAgaXNOYW1lZCA9IHRydWU7XG4gICAgdGFnSGFuZGxlID0gXCIhIVwiO1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfSBlbHNlIHtcbiAgICB0YWdIYW5kbGUgPSBcIiFcIjtcbiAgfVxuXG4gIHBvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgaWYgKGlzVmVyYmF0aW0pIHtcbiAgICBkbyB7XG4gICAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gICAgfSB3aGlsZSAoY2ggIT09IDAgJiYgY2ggIT09IDB4M2UgLyogPiAqLyk7XG5cbiAgICBpZiAoc3RhdGUucG9zaXRpb24gPCBzdGF0ZS5sZW5ndGgpIHtcbiAgICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShwb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIFwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWdcIixcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNXc09yRW9sKGNoKSkge1xuICAgICAgaWYgKGNoID09PSAweDIxIC8qICEgKi8pIHtcbiAgICAgICAgaWYgKCFpc05hbWVkKSB7XG4gICAgICAgICAgdGFnSGFuZGxlID0gc3RhdGUuaW5wdXQuc2xpY2UocG9zaXRpb24gLSAxLCBzdGF0ZS5wb3NpdGlvbiArIDEpO1xuXG4gICAgICAgICAgaWYgKCFQQVRURVJOX1RBR19IQU5ETEUudGVzdCh0YWdIYW5kbGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgIFwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnNcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaXNOYW1lZCA9IHRydWU7XG4gICAgICAgICAgcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbiArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIFwidGFnIHN1ZmZpeCBjYW5ub3QgY29udGFpbiBleGNsYW1hdGlvbiBtYXJrc1wiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIHRhZ05hbWUgPSBzdGF0ZS5pbnB1dC5zbGljZShwb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuXG4gICAgaWYgKFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTLnRlc3QodGFnTmFtZSkpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgXCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnNcIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRhZ05hbWUgJiYgIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHRhZ05hbWUpKSB7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICBzdGF0ZSxcbiAgICAgIGB0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICR7dGFnTmFtZX1gLFxuICAgICk7XG4gIH1cblxuICBpZiAoaXNWZXJiYXRpbSkge1xuICAgIHN0YXRlLnRhZyA9IHRhZ05hbWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgdHlwZW9mIHN0YXRlLnRhZ01hcCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIGhhc093bihzdGF0ZS50YWdNYXAsIHRhZ0hhbmRsZSlcbiAgKSB7XG4gICAgc3RhdGUudGFnID0gc3RhdGUudGFnTWFwW3RhZ0hhbmRsZV0gKyB0YWdOYW1lO1xuICB9IGVsc2UgaWYgKHRhZ0hhbmRsZSA9PT0gXCIhXCIpIHtcbiAgICBzdGF0ZS50YWcgPSBgISR7dGFnTmFtZX1gO1xuICB9IGVsc2UgaWYgKHRhZ0hhbmRsZSA9PT0gXCIhIVwiKSB7XG4gICAgc3RhdGUudGFnID0gYHRhZzp5YW1sLm9yZywyMDAyOiR7dGFnTmFtZX1gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBgdW5kZWNsYXJlZCB0YWcgaGFuZGxlIFwiJHt0YWdIYW5kbGV9XCJgKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQW5jaG9yUHJvcGVydHkoc3RhdGU6IExvYWRlclN0YXRlKTogYm9vbGVhbiB7XG4gIGxldCBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuICBpZiAoY2ggIT09IDB4MjYgLyogJiAqLykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZSwgXCJkdXBsaWNhdGlvbiBvZiBhbiBhbmNob3IgcHJvcGVydHlcIik7XG4gIH1cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuXG4gIGNvbnN0IHBvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG4gIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNXc09yRW9sKGNoKSAmJiAhaXNGbG93SW5kaWNhdG9yKGNoKSkge1xuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gcG9zaXRpb24pIHtcbiAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgIHN0YXRlLFxuICAgICAgXCJuYW1lIG9mIGFuIGFuY2hvciBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyXCIsXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRlLmFuY2hvciA9IHN0YXRlLmlucHV0LnNsaWNlKHBvc2l0aW9uLCBzdGF0ZS5wb3NpdGlvbik7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWFkQWxpYXMoc3RhdGU6IExvYWRlclN0YXRlKTogYm9vbGVhbiB7XG4gIGxldCBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pO1xuXG4gIGlmIChjaCAhPT0gMHgyYSAvKiAqICovKSByZXR1cm4gZmFsc2U7XG5cbiAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICBjb25zdCBfcG9zaXRpb24gPSBzdGF0ZS5wb3NpdGlvbjtcblxuICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzV3NPckVvbChjaCkgJiYgIWlzRmxvd0luZGljYXRvcihjaCkpIHtcbiAgICBjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZS5wb3NpdGlvbik7XG4gIH1cblxuICBpZiAoc3RhdGUucG9zaXRpb24gPT09IF9wb3NpdGlvbikge1xuICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgc3RhdGUsXG4gICAgICBcIm5hbWUgb2YgYW4gYWxpYXMgbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlclwiLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBhbGlhcyA9IHN0YXRlLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUucG9zaXRpb24pO1xuICBpZiAoXG4gICAgdHlwZW9mIHN0YXRlLmFuY2hvck1hcCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICFoYXNPd24oc3RhdGUuYW5jaG9yTWFwLCBhbGlhcylcbiAgKSB7XG4gICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUsIGB1bmlkZW50aWZpZWQgYWxpYXMgXCIke2FsaWFzfVwiYCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHN0YXRlLmFuY2hvck1hcCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHN0YXRlLnJlc3VsdCA9IHN0YXRlLmFuY2hvck1hcFthbGlhc107XG4gIH1cbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29tcG9zZU5vZGUoXG4gIHN0YXRlOiBMb2FkZXJTdGF0ZSxcbiAgcGFyZW50SW5kZW50OiBudW1iZXIsXG4gIG5vZGVDb250ZXh0OiBudW1iZXIsXG4gIGFsbG93VG9TZWVrOiBib29sZWFuLFxuICBhbGxvd0NvbXBhY3Q6IGJvb2xlYW4sXG4pOiBib29sZWFuIHtcbiAgbGV0IGFsbG93QmxvY2tTY2FsYXJzOiBib29sZWFuLFxuICAgIGFsbG93QmxvY2tDb2xsZWN0aW9uczogYm9vbGVhbixcbiAgICBpbmRlbnRTdGF0dXMgPSAxLCAvLyAxOiB0aGlzPnBhcmVudCwgMDogdGhpcz1wYXJlbnQsIC0xOiB0aGlzPHBhcmVudFxuICAgIGF0TmV3TGluZSA9IGZhbHNlLFxuICAgIGhhc0NvbnRlbnQgPSBmYWxzZSxcbiAgICB0eXBlOiBUeXBlLFxuICAgIGZsb3dJbmRlbnQ6IG51bWJlcixcbiAgICBibG9ja0luZGVudDogbnVtYmVyO1xuXG4gIGlmIChzdGF0ZS5saXN0ZW5lciAmJiBzdGF0ZS5saXN0ZW5lciAhPT0gbnVsbCkge1xuICAgIHN0YXRlLmxpc3RlbmVyKFwib3BlblwiLCBzdGF0ZSk7XG4gIH1cblxuICBzdGF0ZS50YWcgPSBudWxsO1xuICBzdGF0ZS5hbmNob3IgPSBudWxsO1xuICBzdGF0ZS5raW5kID0gbnVsbDtcbiAgc3RhdGUucmVzdWx0ID0gbnVsbDtcblxuICBjb25zdCBhbGxvd0Jsb2NrU3R5bGVzID0gKGFsbG93QmxvY2tTY2FsYXJzID1cbiAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPVxuICAgICAgQ09OVEVYVF9CTE9DS19PVVQgPT09IG5vZGVDb250ZXh0IHx8IENPTlRFWFRfQkxPQ0tfSU4gPT09IG5vZGVDb250ZXh0KTtcblxuICBpZiAoYWxsb3dUb1NlZWspIHtcbiAgICBpZiAoc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpKSB7XG4gICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuXG4gICAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgaW5kZW50U3RhdHVzID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUubGluZUluZGVudCA8IHBhcmVudEluZGVudCkge1xuICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7XG4gICAgd2hpbGUgKHJlYWRUYWdQcm9wZXJ0eShzdGF0ZSkgfHwgcmVhZEFuY2hvclByb3BlcnR5KHN0YXRlKSkge1xuICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKSkge1xuICAgICAgICBhdE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhbGxvd0Jsb2NrU3R5bGVzO1xuXG4gICAgICAgIGlmIChzdGF0ZS5saW5lSW5kZW50ID4gcGFyZW50SW5kZW50KSB7XG4gICAgICAgICAgaW5kZW50U3RhdHVzID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5saW5lSW5kZW50ID09PSBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHtcbiAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbG93QmxvY2tDb2xsZWN0aW9ucykge1xuICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGF0TmV3TGluZSB8fCBhbGxvd0NvbXBhY3Q7XG4gIH1cblxuICBpZiAoaW5kZW50U3RhdHVzID09PSAxIHx8IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCkge1xuICAgIGNvbnN0IGNvbmQgPSBDT05URVhUX0ZMT1dfSU4gPT09IG5vZGVDb250ZXh0IHx8XG4gICAgICBDT05URVhUX0ZMT1dfT1VUID09PSBub2RlQ29udGV4dDtcbiAgICBmbG93SW5kZW50ID0gY29uZCA/IHBhcmVudEluZGVudCA6IHBhcmVudEluZGVudCArIDE7XG5cbiAgICBibG9ja0luZGVudCA9IHN0YXRlLnBvc2l0aW9uIC0gc3RhdGUubGluZVN0YXJ0O1xuXG4gICAgaWYgKGluZGVudFN0YXR1cyA9PT0gMSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zICYmXG4gICAgICAgICAgKHJlYWRCbG9ja1NlcXVlbmNlKHN0YXRlLCBibG9ja0luZGVudCkgfHxcbiAgICAgICAgICAgIHJlYWRCbG9ja01hcHBpbmcoc3RhdGUsIGJsb2NrSW5kZW50LCBmbG93SW5kZW50KSkpIHx8XG4gICAgICAgIHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZSwgZmxvd0luZGVudClcbiAgICAgICkge1xuICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoYWxsb3dCbG9ja1NjYWxhcnMgJiYgcmVhZEJsb2NrU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSkgfHxcbiAgICAgICAgICByZWFkU2luZ2xlUXVvdGVkU2NhbGFyKHN0YXRlLCBmbG93SW5kZW50KSB8fFxuICAgICAgICAgIHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUsIGZsb3dJbmRlbnQpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc0NvbnRlbnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHJlYWRBbGlhcyhzdGF0ZSkpIHtcbiAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChzdGF0ZS50YWcgIT09IG51bGwgfHwgc3RhdGUuYW5jaG9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgIFwiYWxpYXMgbm9kZSBzaG91bGQgbm90IGhhdmUgQW55IHByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHJlYWRQbGFpblNjYWxhcihzdGF0ZSwgZmxvd0luZGVudCwgQ09OVEVYVF9GTE9XX0lOID09PSBub2RlQ29udGV4dClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc3RhdGUudGFnID09PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS50YWcgPSBcIj9cIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsICYmIHR5cGVvZiBzdGF0ZS5hbmNob3JNYXAgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBzdGF0ZS5hbmNob3JNYXBbc3RhdGUuYW5jaG9yXSA9IHN0YXRlLnJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5kZW50U3RhdHVzID09PSAwKSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2U6IGJsb2NrIHNlcXVlbmNlcyBhcmUgYWxsb3dlZCB0byBoYXZlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwgYXMgdGhlIHBhcmVudC5cbiAgICAgIC8vIGh0dHA6Ly93d3cueWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2lkMjc5OTc4NFxuICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJlxuICAgICAgICByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYmxvY2tJbmRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS50YWcgIT09IG51bGwgJiYgc3RhdGUudGFnICE9PSBcIiFcIikge1xuICAgIGlmIChzdGF0ZS50YWcgPT09IFwiP1wiKSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgdHlwZUluZGV4ID0gMCwgdHlwZVF1YW50aXR5ID0gc3RhdGUuaW1wbGljaXRUeXBlcy5sZW5ndGg7XG4gICAgICAgIHR5cGVJbmRleCA8IHR5cGVRdWFudGl0eTtcbiAgICAgICAgdHlwZUluZGV4KytcbiAgICAgICkge1xuICAgICAgICB0eXBlID0gc3RhdGUuaW1wbGljaXRUeXBlc1t0eXBlSW5kZXhdO1xuXG4gICAgICAgIC8vIEltcGxpY2l0IHJlc29sdmluZyBpcyBub3QgYWxsb3dlZCBmb3Igbm9uLXNjYWxhciB0eXBlcywgYW5kICc/J1xuICAgICAgICAvLyBub24tc3BlY2lmaWMgdGFnIGlzIG9ubHkgYXNzaWduZWQgdG8gcGxhaW4gc2NhbGFycy4gU28sIGl0IGlzbid0XG4gICAgICAgIC8vIG5lZWRlZCB0byBjaGVjayBmb3IgJ2tpbmQnIGNvbmZvcm1pdHkuXG5cbiAgICAgICAgaWYgKHR5cGUucmVzb2x2ZShzdGF0ZS5yZXN1bHQpKSB7XG4gICAgICAgICAgLy8gYHN0YXRlLnJlc3VsdGAgdXBkYXRlZCBpbiByZXNvbHZlciBpZiBtYXRjaGVkXG4gICAgICAgICAgc3RhdGUucmVzdWx0ID0gdHlwZS5jb25zdHJ1Y3Qoc3RhdGUucmVzdWx0KTtcbiAgICAgICAgICBzdGF0ZS50YWcgPSB0eXBlLnRhZztcbiAgICAgICAgICBpZiAoc3RhdGUuYW5jaG9yICE9PSBudWxsICYmIHR5cGVvZiBzdGF0ZS5hbmNob3JNYXAgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBoYXNPd24oc3RhdGUudHlwZU1hcFtzdGF0ZS5raW5kIHx8IFwiZmFsbGJhY2tcIl0sIHN0YXRlLnRhZylcbiAgICApIHtcbiAgICAgIHR5cGUgPSBzdGF0ZS50eXBlTWFwW3N0YXRlLmtpbmQgfHwgXCJmYWxsYmFja1wiXVtzdGF0ZS50YWddO1xuXG4gICAgICBpZiAoc3RhdGUucmVzdWx0ICE9PSBudWxsICYmIHR5cGUua2luZCAhPT0gc3RhdGUua2luZCkge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBgdW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwke3N0YXRlLnRhZ30+IHRhZzsgaXQgc2hvdWxkIGJlIFwiJHt0eXBlLmtpbmR9XCIsIG5vdCBcIiR7c3RhdGUua2luZH1cImAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdHlwZS5yZXNvbHZlKHN0YXRlLnJlc3VsdCkpIHtcbiAgICAgICAgLy8gYHN0YXRlLnJlc3VsdGAgdXBkYXRlZCBpbiByZXNvbHZlciBpZiBtYXRjaGVkXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGBjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCR7c3RhdGUudGFnfT4gZXhwbGljaXQgdGFnYCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLnJlc3VsdCA9IHR5cGUuY29uc3RydWN0KHN0YXRlLnJlc3VsdCk7XG4gICAgICAgIGlmIChzdGF0ZS5hbmNob3IgIT09IG51bGwgJiYgdHlwZW9mIHN0YXRlLmFuY2hvck1hcCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHN0YXRlLmFuY2hvck1hcFtzdGF0ZS5hbmNob3JdID0gc3RhdGUucmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBgdW5rbm93biB0YWcgITwke3N0YXRlLnRhZ30+YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLmxpc3RlbmVyICYmIHN0YXRlLmxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgc3RhdGUubGlzdGVuZXIoXCJjbG9zZVwiLCBzdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLnRhZyAhPT0gbnVsbCB8fCBzdGF0ZS5hbmNob3IgIT09IG51bGwgfHwgaGFzQ29udGVudDtcbn1cblxuZnVuY3Rpb24gcmVhZERvY3VtZW50KHN0YXRlOiBMb2FkZXJTdGF0ZSkge1xuICBjb25zdCBkb2N1bWVudFN0YXJ0ID0gc3RhdGUucG9zaXRpb247XG4gIGxldCBwb3NpdGlvbjogbnVtYmVyLFxuICAgIGRpcmVjdGl2ZU5hbWU6IHN0cmluZyxcbiAgICBkaXJlY3RpdmVBcmdzOiBzdHJpbmdbXSxcbiAgICBoYXNEaXJlY3RpdmVzID0gZmFsc2UsXG4gICAgY2g6IG51bWJlcjtcblxuICBzdGF0ZS52ZXJzaW9uID0gbnVsbDtcbiAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzID0gc3RhdGUubGVnYWN5O1xuICBzdGF0ZS50YWdNYXAgPSB7fTtcbiAgc3RhdGUuYW5jaG9yTWFwID0ge307XG5cbiAgd2hpbGUgKChjaCA9IHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24pKSAhPT0gMCkge1xuICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbik7XG5cbiAgICBpZiAoc3RhdGUubGluZUluZGVudCA+IDAgfHwgY2ggIT09IDB4MjUgLyogJSAqLykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaGFzRGlyZWN0aXZlcyA9IHRydWU7XG4gICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgIHBvc2l0aW9uID0gc3RhdGUucG9zaXRpb247XG5cbiAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzV3NPckVvbChjaCkpIHtcbiAgICAgIGNoID0gc3RhdGUuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBkaXJlY3RpdmVOYW1lID0gc3RhdGUuaW5wdXQuc2xpY2UocG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKTtcbiAgICBkaXJlY3RpdmVBcmdzID0gW107XG5cbiAgICBpZiAoZGlyZWN0aXZlTmFtZS5sZW5ndGggPCAxKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIFwiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIHdoaWxlIChjaCAhPT0gMCkge1xuICAgICAgd2hpbGUgKGlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2ggPT09IDB4MjMgLyogIyAqLykge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgICB9IHdoaWxlIChjaCAhPT0gMCAmJiAhaXNFT0woY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0VPTChjaCkpIGJyZWFrO1xuXG4gICAgICBwb3NpdGlvbiA9IHN0YXRlLnBvc2l0aW9uO1xuXG4gICAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzV3NPckVvbChjaCkpIHtcbiAgICAgICAgY2ggPSBzdGF0ZS5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUucG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBkaXJlY3RpdmVBcmdzLnB1c2goc3RhdGUuaW5wdXQuc2xpY2UocG9zaXRpb24sIHN0YXRlLnBvc2l0aW9uKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoICE9PSAwKSByZWFkTGluZUJyZWFrKHN0YXRlKTtcblxuICAgIGlmIChoYXNPd24oZGlyZWN0aXZlSGFuZGxlcnMsIGRpcmVjdGl2ZU5hbWUpKSB7XG4gICAgICBkaXJlY3RpdmVIYW5kbGVyc1tkaXJlY3RpdmVOYW1lXShzdGF0ZSwgZGlyZWN0aXZlTmFtZSwgLi4uZGlyZWN0aXZlQXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93V2FybmluZyhzdGF0ZSwgYHVua25vd24gZG9jdW1lbnQgZGlyZWN0aXZlIFwiJHtkaXJlY3RpdmVOYW1lfVwiYCk7XG4gICAgfVxuICB9XG5cbiAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZSwgdHJ1ZSwgLTEpO1xuXG4gIGlmIChcbiAgICBzdGF0ZS5saW5lSW5kZW50ID09PSAwICYmXG4gICAgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MmQgLyogLSAqLyAmJlxuICAgIHN0YXRlLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUucG9zaXRpb24gKyAxKSA9PT0gMHgyZCAvKiAtICovICYmXG4gICAgc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbiArIDIpID09PSAweDJkIC8qIC0gKi9cbiAgKSB7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlLCB0cnVlLCAtMSk7XG4gIH0gZWxzZSBpZiAoaGFzRGlyZWN0aXZlcykge1xuICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLCBcImRpcmVjdGl2ZXMgZW5kIG1hcmsgaXMgZXhwZWN0ZWRcIik7XG4gIH1cblxuICBjb21wb3NlTm9kZShzdGF0ZSwgc3RhdGUubGluZUluZGVudCAtIDEsIENPTlRFWFRfQkxPQ0tfT1VULCBmYWxzZSwgdHJ1ZSk7XG4gIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcblxuICBpZiAoXG4gICAgc3RhdGUuY2hlY2tMaW5lQnJlYWtzICYmXG4gICAgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MudGVzdChcbiAgICAgIHN0YXRlLmlucHV0LnNsaWNlKGRvY3VtZW50U3RhcnQsIHN0YXRlLnBvc2l0aW9uKSxcbiAgICApXG4gICkge1xuICAgIHRocm93V2FybmluZyhzdGF0ZSwgXCJub24tQVNDSUkgbGluZSBicmVha3MgYXJlIGludGVycHJldGVkIGFzIGNvbnRlbnRcIik7XG4gIH1cblxuICBzdGF0ZS5kb2N1bWVudHMucHVzaChzdGF0ZS5yZXN1bHQpO1xuXG4gIGlmIChzdGF0ZS5wb3NpdGlvbiA9PT0gc3RhdGUubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZSkpIHtcbiAgICBpZiAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MmUgLyogLiAqLykge1xuICAgICAgc3RhdGUucG9zaXRpb24gKz0gMztcbiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUsIHRydWUsIC0xKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHN0YXRlLnBvc2l0aW9uIDwgc3RhdGUubGVuZ3RoIC0gMSkge1xuICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgc3RhdGUsXG4gICAgICBcImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkXCIsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZERvY3VtZW50cyhpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogTG9hZGVyU3RhdGVPcHRpb25zKTogdW5rbm93bltdIHtcbiAgaW5wdXQgPSBTdHJpbmcoaW5wdXQpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBpZiAoaW5wdXQubGVuZ3RoICE9PSAwKSB7XG4gICAgLy8gQWRkIHRhaWxpbmcgYFxcbmAgaWYgbm90IGV4aXN0c1xuICAgIGlmIChcbiAgICAgIGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT09IDB4MGEgLyogTEYgKi8gJiZcbiAgICAgIGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT09IDB4MGQgLyogQ1IgKi9cbiAgICApIHtcbiAgICAgIGlucHV0ICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgLy8gU3RyaXAgQk9NXG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoMCkgPT09IDB4ZmVmZikge1xuICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZSgxKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IG5ldyBMb2FkZXJTdGF0ZShpbnB1dCwgb3B0aW9ucyk7XG5cbiAgLy8gVXNlIDAgYXMgc3RyaW5nIHRlcm1pbmF0b3IuIFRoYXQgc2lnbmlmaWNhbnRseSBzaW1wbGlmaWVzIGJvdW5kcyBjaGVjay5cbiAgc3RhdGUuaW5wdXQgKz0gXCJcXDBcIjtcblxuICB3aGlsZSAoc3RhdGUuaW5wdXQuY2hhckNvZGVBdChzdGF0ZS5wb3NpdGlvbikgPT09IDB4MjAgLyogU3BhY2UgKi8pIHtcbiAgICBzdGF0ZS5saW5lSW5kZW50ICs9IDE7XG4gICAgc3RhdGUucG9zaXRpb24gKz0gMTtcbiAgfVxuXG4gIHdoaWxlIChzdGF0ZS5wb3NpdGlvbiA8IHN0YXRlLmxlbmd0aCAtIDEpIHtcbiAgICByZWFkRG9jdW1lbnQoc3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlLmRvY3VtZW50cztcbn1cblxuZXhwb3J0IHR5cGUgQ2JGdW5jdGlvbiA9IChkb2M6IHVua25vd24pID0+IHZvaWQ7XG5mdW5jdGlvbiBpc0NiRnVuY3Rpb24oZm46IHVua25vd24pOiBmbiBpcyBDYkZ1bmN0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiBmbiA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFsbDxUIGV4dGVuZHMgQ2JGdW5jdGlvbiB8IExvYWRlclN0YXRlT3B0aW9ucz4oXG4gIGlucHV0OiBzdHJpbmcsXG4gIGl0ZXJhdG9yT3JPcHRpb24/OiBULFxuICBvcHRpb25zPzogTG9hZGVyU3RhdGVPcHRpb25zLFxuKTogVCBleHRlbmRzIENiRnVuY3Rpb24gPyB2b2lkIDogdW5rbm93bltdIHtcbiAgaWYgKCFpc0NiRnVuY3Rpb24oaXRlcmF0b3JPck9wdGlvbikpIHtcbiAgICByZXR1cm4gbG9hZERvY3VtZW50cyhpbnB1dCwgaXRlcmF0b3JPck9wdGlvbiBhcyBMb2FkZXJTdGF0ZU9wdGlvbnMpIGFzIEFueTtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpO1xuICBjb25zdCBpdGVyYXRvciA9IGl0ZXJhdG9yT3JPcHRpb247XG4gIGZvciAobGV0IGluZGV4ID0gMCwgbGVuZ3RoID0gZG9jdW1lbnRzLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICBpdGVyYXRvcihkb2N1bWVudHNbaW5kZXhdKTtcbiAgfVxuXG4gIHJldHVybiB2b2lkIDAgYXMgQW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZChpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogTG9hZGVyU3RhdGVPcHRpb25zKTogdW5rbm93biB7XG4gIGNvbnN0IGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpO1xuXG4gIGlmIChkb2N1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChkb2N1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50c1swXTtcbiAgfVxuICB0aHJvdyBuZXcgWUFNTEVycm9yKFxuICAgIFwiZXhwZWN0ZWQgYSBzaW5nbGUgZG9jdW1lbnQgaW4gdGhlIHN0cmVhbSwgYnV0IGZvdW5kIG1vcmVcIixcbiAgKTtcbn1cbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBDYkZ1bmN0aW9uLCBsb2FkLCBsb2FkQWxsIH0gZnJvbSBcIi4vbG9hZGVyL2xvYWRlci50c1wiO1xuaW1wb3J0IHR5cGUgeyBMb2FkZXJTdGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi9sb2FkZXIvbG9hZGVyX3N0YXRlLnRzXCI7XG5cbmV4cG9ydCB0eXBlIFBhcnNlT3B0aW9ucyA9IExvYWRlclN0YXRlT3B0aW9ucztcblxuLyoqXG4gKiBQYXJzZXMgYGNvbnRlbnRgIGFzIHNpbmdsZSBZQU1MIGRvY3VtZW50LlxuICpcbiAqIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCBvciB0aHJvd3MgYFlBTUxFeGNlcHRpb25gIG9uIGVycm9yLlxuICogQnkgZGVmYXVsdCwgZG9lcyBub3Qgc3VwcG9ydCByZWdleHBzLCBmdW5jdGlvbnMgYW5kIHVuZGVmaW5lZC4gVGhpcyBtZXRob2QgaXMgc2FmZSBmb3IgdW50cnVzdGVkIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShjb250ZW50OiBzdHJpbmcsIG9wdGlvbnM/OiBQYXJzZU9wdGlvbnMpOiB1bmtub3duIHtcbiAgcmV0dXJuIGxvYWQoY29udGVudCwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogU2FtZSBhcyBgcGFyc2UoKWAsIGJ1dCB1bmRlcnN0YW5kcyBtdWx0aS1kb2N1bWVudCBzb3VyY2VzLlxuICogQXBwbGllcyBpdGVyYXRvciB0byBlYWNoIGRvY3VtZW50IGlmIHNwZWNpZmllZCwgb3IgcmV0dXJucyBhcnJheSBvZiBkb2N1bWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFsbChcbiAgY29udGVudDogc3RyaW5nLFxuICBpdGVyYXRvcjogQ2JGdW5jdGlvbixcbiAgb3B0aW9ucz86IFBhcnNlT3B0aW9ucyxcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBbGwoY29udGVudDogc3RyaW5nLCBvcHRpb25zPzogUGFyc2VPcHRpb25zKTogdW5rbm93bjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFsbChcbiAgY29udGVudDogc3RyaW5nLFxuICBpdGVyYXRvcj86IENiRnVuY3Rpb24gfCBQYXJzZU9wdGlvbnMsXG4gIG9wdGlvbnM/OiBQYXJzZU9wdGlvbnMsXG4pOiB1bmtub3duIHtcbiAgcmV0dXJuIGxvYWRBbGwoY29udGVudCwgaXRlcmF0b3IsIG9wdGlvbnMpO1xufVxuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB0eXBlIHsgU2NoZW1hLCBTY2hlbWFEZWZpbml0aW9uIH0gZnJvbSBcIi4uL3NjaGVtYS50c1wiO1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tIFwiLi4vc3RhdGUudHNcIjtcbmltcG9ydCB0eXBlIHsgU3R5bGVWYXJpYW50LCBUeXBlIH0gZnJvbSBcIi4uL3R5cGUudHNcIjtcbmltcG9ydCB0eXBlIHsgQW55LCBBcnJheU9iamVjdCB9IGZyb20gXCIuLi91dGlscy50c1wiO1xuXG5jb25zdCB7IGhhc093biB9ID0gT2JqZWN0O1xuXG5mdW5jdGlvbiBjb21waWxlU3R5bGVNYXAoXG4gIHNjaGVtYTogU2NoZW1hLFxuICBtYXA/OiBBcnJheU9iamVjdDxTdHlsZVZhcmlhbnQ+IHwgbnVsbCxcbik6IEFycmF5T2JqZWN0PFN0eWxlVmFyaWFudD4ge1xuICBpZiAodHlwZW9mIG1hcCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBtYXAgPT09IG51bGwpIHJldHVybiB7fTtcblxuICBsZXQgdHlwZTogVHlwZTtcbiAgY29uc3QgcmVzdWx0OiBBcnJheU9iamVjdDxTdHlsZVZhcmlhbnQ+ID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhtYXApO1xuICBsZXQgdGFnOiBzdHJpbmcsIHN0eWxlOiBTdHlsZVZhcmlhbnQ7XG4gIGZvciAobGV0IGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgdGFnID0ga2V5c1tpbmRleF07XG4gICAgc3R5bGUgPSBTdHJpbmcobWFwW3RhZ10pIGFzIFN0eWxlVmFyaWFudDtcbiAgICBpZiAodGFnLnNsaWNlKDAsIDIpID09PSBcIiEhXCIpIHtcbiAgICAgIHRhZyA9IGB0YWc6eWFtbC5vcmcsMjAwMjoke3RhZy5zbGljZSgyKX1gO1xuICAgIH1cbiAgICB0eXBlID0gc2NoZW1hLmNvbXBpbGVkVHlwZU1hcC5mYWxsYmFja1t0YWddO1xuXG4gICAgaWYgKFxuICAgICAgdHlwZSAmJlxuICAgICAgdHlwZW9mIHR5cGUuc3R5bGVBbGlhc2VzICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICBoYXNPd24odHlwZS5zdHlsZUFsaWFzZXMsIHN0eWxlKVxuICAgICkge1xuICAgICAgc3R5bGUgPSB0eXBlLnN0eWxlQWxpYXNlc1tzdHlsZV07XG4gICAgfVxuXG4gICAgcmVzdWx0W3RhZ10gPSBzdHlsZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVtcGVyU3RhdGVPcHRpb25zIHtcbiAgLyoqIGluZGVudGF0aW9uIHdpZHRoIHRvIHVzZSAoaW4gc3BhY2VzKS4gKi9cbiAgaW5kZW50PzogbnVtYmVyO1xuICAvKiogd2hlbiB0cnVlLCB3aWxsIG5vdCBhZGQgYW4gaW5kZW50YXRpb24gbGV2ZWwgdG8gYXJyYXkgZWxlbWVudHMgKi9cbiAgbm9BcnJheUluZGVudD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBkbyBub3QgdGhyb3cgb24gaW52YWxpZCB0eXBlcyAobGlrZSBmdW5jdGlvbiBpbiB0aGUgc2FmZSBzY2hlbWEpXG4gICAqIGFuZCBza2lwIHBhaXJzIGFuZCBzaW5nbGUgdmFsdWVzIHdpdGggc3VjaCB0eXBlcy5cbiAgICovXG4gIHNraXBJbnZhbGlkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIHNwZWNpZmllcyBsZXZlbCBvZiBuZXN0aW5nLCB3aGVuIHRvIHN3aXRjaCBmcm9tXG4gICAqIGJsb2NrIHRvIGZsb3cgc3R5bGUgZm9yIGNvbGxlY3Rpb25zLiAtMSBtZWFucyBibG9jayBzdHlsZSBldmVyeXdoZXJlXG4gICAqL1xuICBmbG93TGV2ZWw/OiBudW1iZXI7XG4gIC8qKiBFYWNoIHRhZyBtYXkgaGF2ZSBvd24gc2V0IG9mIHN0eWxlcy5cdC0gXCJ0YWdcIiA9PiBcInN0eWxlXCIgbWFwLiAqL1xuICBzdHlsZXM/OiBBcnJheU9iamVjdDxTdHlsZVZhcmlhbnQ+IHwgbnVsbDtcbiAgLyoqIHNwZWNpZmllcyBhIHNjaGVtYSB0byB1c2UuICovXG4gIHNjaGVtYT86IFNjaGVtYURlZmluaXRpb247XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBzb3J0IGtleXMgd2hlbiBkdW1waW5nIFlBTUwgaW4gYXNjZW5kaW5nLCBBU0NJSSBjaGFyYWN0ZXIgb3JkZXIuXG4gICAqIElmIGEgZnVuY3Rpb24sIHVzZSB0aGUgZnVuY3Rpb24gdG8gc29ydCB0aGUga2V5cy4gKGRlZmF1bHQ6IGZhbHNlKVxuICAgKiBJZiBhIGZ1bmN0aW9uIGlzIHNwZWNpZmllZCwgdGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWVcbiAgICogaWYgZmlyc3QgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHNlY29uZCBhcmd1bWVudCwgemVybyBpZiB0aGV5J3JlIGVxdWFsXG4gICAqIGFuZCBhIHBvc2l0aXZlIHZhbHVlIG90aGVyd2lzZS5cbiAgICovXG4gIHNvcnRLZXlzPzogYm9vbGVhbiB8ICgoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IG51bWJlcik7XG4gIC8qKiBzZXQgbWF4IGxpbmUgd2lkdGguIChkZWZhdWx0OiA4MCkgKi9cbiAgbGluZVdpZHRoPzogbnVtYmVyO1xuICAvKipcbiAgICogaWYgdHJ1ZSwgZG9uJ3QgY29udmVydCBkdXBsaWNhdGUgb2JqZWN0c1xuICAgKiBpbnRvIHJlZmVyZW5jZXMgKGRlZmF1bHQ6IGZhbHNlKVxuICAgKi9cbiAgbm9SZWZzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGlmIHRydWUgZG9uJ3QgdHJ5IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvbGRlciB5YW1sIHZlcnNpb25zLlxuICAgKiBDdXJyZW50bHk6IGRvbid0IHF1b3RlIFwieWVzXCIsIFwibm9cIiBhbmQgc28gb24sXG4gICAqIGFzIHJlcXVpcmVkIGZvciBZQU1MIDEuMSAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBub0NvbXBhdE1vZGU/OiBib29sZWFuO1xuICAvKipcbiAgICogaWYgdHJ1ZSBmbG93IHNlcXVlbmNlcyB3aWxsIGJlIGNvbmRlbnNlZCwgb21pdHRpbmcgdGhlXG4gICAqIHNwYWNlIGJldHdlZW4gYGtleTogdmFsdWVgIG9yIGBhLCBiYC4gRWcuIGAnW2EsYl0nYCBvciBge2E6e2I6Y319YC5cbiAgICogQ2FuIGJlIHVzZWZ1bCB3aGVuIHVzaW5nIHlhbWwgZm9yIHByZXR0eSBVUkwgcXVlcnkgcGFyYW1zXG4gICAqIGFzIHNwYWNlcyBhcmUgJS1lbmNvZGVkLiAoZGVmYXVsdDogZmFsc2UpLlxuICAgKi9cbiAgY29uZGVuc2VGbG93PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIER1bXBlclN0YXRlIGV4dGVuZHMgU3RhdGUge1xuICBwdWJsaWMgaW5kZW50OiBudW1iZXI7XG4gIHB1YmxpYyBub0FycmF5SW5kZW50OiBib29sZWFuO1xuICBwdWJsaWMgc2tpcEludmFsaWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBmbG93TGV2ZWw6IG51bWJlcjtcbiAgcHVibGljIHNvcnRLZXlzOiBib29sZWFuIHwgKChhOiBBbnksIGI6IEFueSkgPT4gbnVtYmVyKTtcbiAgcHVibGljIGxpbmVXaWR0aDogbnVtYmVyO1xuICBwdWJsaWMgbm9SZWZzOiBib29sZWFuO1xuICBwdWJsaWMgbm9Db21wYXRNb2RlOiBib29sZWFuO1xuICBwdWJsaWMgY29uZGVuc2VGbG93OiBib29sZWFuO1xuICBwdWJsaWMgaW1wbGljaXRUeXBlczogVHlwZVtdO1xuICBwdWJsaWMgZXhwbGljaXRUeXBlczogVHlwZVtdO1xuICBwdWJsaWMgdGFnOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIHJlc3VsdCA9IFwiXCI7XG4gIHB1YmxpYyBkdXBsaWNhdGVzOiBBbnlbXSA9IFtdO1xuICBwdWJsaWMgdXNlZER1cGxpY2F0ZXM6IEFueVtdID0gW107IC8vIGNoYW5nZWQgZnJvbSBudWxsIHRvIFtdXG4gIHB1YmxpYyBzdHlsZU1hcDogQXJyYXlPYmplY3Q8U3R5bGVWYXJpYW50PjtcbiAgcHVibGljIGR1bXA6IEFueTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc2NoZW1hLFxuICAgIGluZGVudCA9IDIsXG4gICAgbm9BcnJheUluZGVudCA9IGZhbHNlLFxuICAgIHNraXBJbnZhbGlkID0gZmFsc2UsXG4gICAgZmxvd0xldmVsID0gLTEsXG4gICAgc3R5bGVzID0gbnVsbCxcbiAgICBzb3J0S2V5cyA9IGZhbHNlLFxuICAgIGxpbmVXaWR0aCA9IDgwLFxuICAgIG5vUmVmcyA9IGZhbHNlLFxuICAgIG5vQ29tcGF0TW9kZSA9IGZhbHNlLFxuICAgIGNvbmRlbnNlRmxvdyA9IGZhbHNlLFxuICB9OiBEdW1wZXJTdGF0ZU9wdGlvbnMpIHtcbiAgICBzdXBlcihzY2hlbWEpO1xuICAgIHRoaXMuaW5kZW50ID0gTWF0aC5tYXgoMSwgaW5kZW50KTtcbiAgICB0aGlzLm5vQXJyYXlJbmRlbnQgPSBub0FycmF5SW5kZW50O1xuICAgIHRoaXMuc2tpcEludmFsaWQgPSBza2lwSW52YWxpZDtcbiAgICB0aGlzLmZsb3dMZXZlbCA9IGZsb3dMZXZlbDtcbiAgICB0aGlzLnN0eWxlTWFwID0gY29tcGlsZVN0eWxlTWFwKHRoaXMuc2NoZW1hIGFzIFNjaGVtYSwgc3R5bGVzKTtcbiAgICB0aGlzLnNvcnRLZXlzID0gc29ydEtleXM7XG4gICAgdGhpcy5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgdGhpcy5ub1JlZnMgPSBub1JlZnM7XG4gICAgdGhpcy5ub0NvbXBhdE1vZGUgPSBub0NvbXBhdE1vZGU7XG4gICAgdGhpcy5jb25kZW5zZUZsb3cgPSBjb25kZW5zZUZsb3c7XG5cbiAgICB0aGlzLmltcGxpY2l0VHlwZXMgPSAodGhpcy5zY2hlbWEgYXMgU2NoZW1hKS5jb21waWxlZEltcGxpY2l0O1xuICAgIHRoaXMuZXhwbGljaXRUeXBlcyA9ICh0aGlzLnNjaGVtYSBhcyBTY2hlbWEpLmNvbXBpbGVkRXhwbGljaXQ7XG4gIH1cbn1cbiIsICIvLyBQb3J0ZWQgZnJvbSBqcy15YW1sIHYzLjEzLjE6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL2pzLXlhbWwvY29tbWl0LzY2NWFhZGRhNDIzNDlkY2FlODY5ZjEyMDQwZDliMTBlZjE4ZDEyZGFcbi8vIENvcHlyaWdodCAyMDExLTIwMTUgYnkgVml0YWx5IFB1enJpbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBZQU1MRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgUmVwcmVzZW50Rm4sIFN0eWxlVmFyaWFudCwgVHlwZSB9IGZyb20gXCIuLi90eXBlLnRzXCI7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBEdW1wZXJTdGF0ZSwgRHVtcGVyU3RhdGVPcHRpb25zIH0gZnJvbSBcIi4vZHVtcGVyX3N0YXRlLnRzXCI7XG5cbnR5cGUgQW55ID0gY29tbW9uLkFueTtcbnR5cGUgQXJyYXlPYmplY3Q8VCA9IEFueT4gPSBjb21tb24uQXJyYXlPYmplY3Q8VD47XG5cbmNvbnN0IF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5jb25zdCB7IGhhc093biB9ID0gT2JqZWN0O1xuXG5jb25zdCBDSEFSX1RBQiA9IDB4MDk7IC8qIFRhYiAqL1xuY29uc3QgQ0hBUl9MSU5FX0ZFRUQgPSAweDBhOyAvKiBMRiAqL1xuY29uc3QgQ0hBUl9TUEFDRSA9IDB4MjA7IC8qIFNwYWNlICovXG5jb25zdCBDSEFSX0VYQ0xBTUFUSU9OID0gMHgyMTsgLyogISAqL1xuY29uc3QgQ0hBUl9ET1VCTEVfUVVPVEUgPSAweDIyOyAvKiBcIiAqL1xuY29uc3QgQ0hBUl9TSEFSUCA9IDB4MjM7IC8qICMgKi9cbmNvbnN0IENIQVJfUEVSQ0VOVCA9IDB4MjU7IC8qICUgKi9cbmNvbnN0IENIQVJfQU1QRVJTQU5EID0gMHgyNjsgLyogJiAqL1xuY29uc3QgQ0hBUl9TSU5HTEVfUVVPVEUgPSAweDI3OyAvKiAnICovXG5jb25zdCBDSEFSX0FTVEVSSVNLID0gMHgyYTsgLyogKiAqL1xuY29uc3QgQ0hBUl9DT01NQSA9IDB4MmM7IC8qICwgKi9cbmNvbnN0IENIQVJfTUlOVVMgPSAweDJkOyAvKiAtICovXG5jb25zdCBDSEFSX0NPTE9OID0gMHgzYTsgLyogOiAqL1xuY29uc3QgQ0hBUl9HUkVBVEVSX1RIQU4gPSAweDNlOyAvKiA+ICovXG5jb25zdCBDSEFSX1FVRVNUSU9OID0gMHgzZjsgLyogPyAqL1xuY29uc3QgQ0hBUl9DT01NRVJDSUFMX0FUID0gMHg0MDsgLyogQCAqL1xuY29uc3QgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUID0gMHg1YjsgLyogWyAqL1xuY29uc3QgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCA9IDB4NWQ7IC8qIF0gKi9cbmNvbnN0IENIQVJfR1JBVkVfQUNDRU5UID0gMHg2MDsgLyogYCAqL1xuY29uc3QgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgPSAweDdiOyAvKiB7ICovXG5jb25zdCBDSEFSX1ZFUlRJQ0FMX0xJTkUgPSAweDdjOyAvKiB8ICovXG5jb25zdCBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgPSAweDdkOyAvKiB9ICovXG5cbmNvbnN0IEVTQ0FQRV9TRVFVRU5DRVM6IHsgW2NoYXI6IG51bWJlcl06IHN0cmluZyB9ID0ge307XG5cbkVTQ0FQRV9TRVFVRU5DRVNbMHgwMF0gPSBcIlxcXFwwXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MDddID0gXCJcXFxcYVwiO1xuRVNDQVBFX1NFUVVFTkNFU1sweDA4XSA9IFwiXFxcXGJcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwOV0gPSBcIlxcXFx0XCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MGFdID0gXCJcXFxcblwiO1xuRVNDQVBFX1NFUVVFTkNFU1sweDBiXSA9IFwiXFxcXHZcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMHgwY10gPSBcIlxcXFxmXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4MGRdID0gXCJcXFxcclwiO1xuRVNDQVBFX1NFUVVFTkNFU1sweDFiXSA9IFwiXFxcXGVcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMHgyMl0gPSAnXFxcXFwiJztcbkVTQ0FQRV9TRVFVRU5DRVNbMHg1Y10gPSBcIlxcXFxcXFxcXCI7XG5FU0NBUEVfU0VRVUVOQ0VTWzB4ODVdID0gXCJcXFxcTlwiO1xuRVNDQVBFX1NFUVVFTkNFU1sweGEwXSA9IFwiXFxcXF9cIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMHgyMDI4XSA9IFwiXFxcXExcIjtcbkVTQ0FQRV9TRVFVRU5DRVNbMHgyMDI5XSA9IFwiXFxcXFBcIjtcblxuY29uc3QgREVQUkVDQVRFRF9CT09MRUFOU19TWU5UQVggPSBbXG4gIFwieVwiLFxuICBcIllcIixcbiAgXCJ5ZXNcIixcbiAgXCJZZXNcIixcbiAgXCJZRVNcIixcbiAgXCJvblwiLFxuICBcIk9uXCIsXG4gIFwiT05cIixcbiAgXCJuXCIsXG4gIFwiTlwiLFxuICBcIm5vXCIsXG4gIFwiTm9cIixcbiAgXCJOT1wiLFxuICBcIm9mZlwiLFxuICBcIk9mZlwiLFxuICBcIk9GRlwiLFxuXTtcblxuZnVuY3Rpb24gZW5jb2RlSGV4KGNoYXJhY3RlcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RyaW5nID0gY2hhcmFjdGVyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXG4gIGxldCBoYW5kbGU6IHN0cmluZztcbiAgbGV0IGxlbmd0aDogbnVtYmVyO1xuICBpZiAoY2hhcmFjdGVyIDw9IDB4ZmYpIHtcbiAgICBoYW5kbGUgPSBcInhcIjtcbiAgICBsZW5ndGggPSAyO1xuICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSAweGZmZmYpIHtcbiAgICBoYW5kbGUgPSBcInVcIjtcbiAgICBsZW5ndGggPSA0O1xuICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSAweGZmZmZmZmZmKSB7XG4gICAgaGFuZGxlID0gXCJVXCI7XG4gICAgbGVuZ3RoID0gODtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgWUFNTEVycm9yKFxuICAgICAgXCJjb2RlIHBvaW50IHdpdGhpbiBhIHN0cmluZyBtYXkgbm90IGJlIGdyZWF0ZXIgdGhhbiAweEZGRkZGRkZGXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBgXFxcXCR7aGFuZGxlfSR7Y29tbW9uLnJlcGVhdChcIjBcIiwgbGVuZ3RoIC0gc3RyaW5nLmxlbmd0aCl9JHtzdHJpbmd9YDtcbn1cblxuLy8gSW5kZW50cyBldmVyeSBsaW5lIGluIGEgc3RyaW5nLiBFbXB0eSBsaW5lcyAoXFxuIG9ubHkpIGFyZSBub3QgaW5kZW50ZWQuXG5mdW5jdGlvbiBpbmRlbnRTdHJpbmcoc3RyaW5nOiBzdHJpbmcsIHNwYWNlczogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaW5kID0gY29tbW9uLnJlcGVhdChcIiBcIiwgc3BhY2VzKSxcbiAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICBsZXQgcG9zaXRpb24gPSAwLFxuICAgIG5leHQgPSAtMSxcbiAgICByZXN1bHQgPSBcIlwiLFxuICAgIGxpbmU6IHN0cmluZztcblxuICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICBuZXh0ID0gc3RyaW5nLmluZGV4T2YoXCJcXG5cIiwgcG9zaXRpb24pO1xuICAgIGlmIChuZXh0ID09PSAtMSkge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiA9IGxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZSA9IHN0cmluZy5zbGljZShwb3NpdGlvbiwgbmV4dCArIDEpO1xuICAgICAgcG9zaXRpb24gPSBuZXh0ICsgMTtcbiAgICB9XG5cbiAgICBpZiAobGluZS5sZW5ndGggJiYgbGluZSAhPT0gXCJcXG5cIikgcmVzdWx0ICs9IGluZDtcblxuICAgIHJlc3VsdCArPSBsaW5lO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZTogRHVtcGVyU3RhdGUsIGxldmVsOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYFxcbiR7Y29tbW9uLnJlcGVhdChcIiBcIiwgc3RhdGUuaW5kZW50ICogbGV2ZWwpfWA7XG59XG5cbmZ1bmN0aW9uIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZTogRHVtcGVyU3RhdGUsIHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCB0eXBlOiBUeXBlO1xuICBmb3IgKFxuICAgIGxldCBpbmRleCA9IDAsIGxlbmd0aCA9IHN0YXRlLmltcGxpY2l0VHlwZXMubGVuZ3RoO1xuICAgIGluZGV4IDwgbGVuZ3RoO1xuICAgIGluZGV4ICs9IDFcbiAgKSB7XG4gICAgdHlwZSA9IHN0YXRlLmltcGxpY2l0VHlwZXNbaW5kZXhdO1xuXG4gICAgaWYgKHR5cGUucmVzb2x2ZShzdHIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFszM10gcy13aGl0ZSA6Oj0gcy1zcGFjZSB8IHMtdGFiXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBjID09PSBDSEFSX1NQQUNFIHx8IGMgPT09IENIQVJfVEFCO1xufVxuXG4vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNoYXJhY3RlciBjYW4gYmUgcHJpbnRlZCB3aXRob3V0IGVzY2FwaW5nLlxuLy8gRnJvbSBZQU1MIDEuMjogXCJhbnkgYWxsb3dlZCBjaGFyYWN0ZXJzIGtub3duIHRvIGJlIG5vbi1wcmludGFibGVcbi8vIHNob3VsZCBhbHNvIGJlIGVzY2FwZWQuIFtIb3dldmVyLF0gVGhpcyBpc25cdTIwMTl0IG1hbmRhdG9yeVwiXG4vLyBEZXJpdmVkIGZyb20gbmItY2hhciAtIFxcdCAtICN4ODUgLSAjeEEwIC0gI3gyMDI4IC0gI3gyMDI5LlxuZnVuY3Rpb24gaXNQcmludGFibGUoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgKDB4MDAwMjAgPD0gYyAmJiBjIDw9IDB4MDAwMDdlKSB8fFxuICAgICgweDAwMGExIDw9IGMgJiYgYyA8PSAweDAwZDdmZiAmJiBjICE9PSAweDIwMjggJiYgYyAhPT0gMHgyMDI5KSB8fFxuICAgICgweDBlMDAwIDw9IGMgJiYgYyA8PSAweDAwZmZmZCAmJiBjICE9PSAweGZlZmYpIC8qIEJPTSAqLyB8fFxuICAgICgweDEwMDAwIDw9IGMgJiYgYyA8PSAweDEwZmZmZilcbiAgKTtcbn1cblxuLy8gU2ltcGxpZmllZCB0ZXN0IGZvciB2YWx1ZXMgYWxsb3dlZCBhZnRlciB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHBsYWluIHN0eWxlLlxuZnVuY3Rpb24gaXNQbGFpblNhZmUoYzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIC8vIFVzZXMgYSBzdWJzZXQgb2YgbmItY2hhciAtIGMtZmxvdy1pbmRpY2F0b3IgLSBcIjpcIiAtIFwiI1wiXG4gIC8vIHdoZXJlIG5iLWNoYXIgOjo9IGMtcHJpbnRhYmxlIC0gYi1jaGFyIC0gYy1ieXRlLW9yZGVyLW1hcmsuXG4gIHJldHVybiAoXG4gICAgaXNQcmludGFibGUoYykgJiZcbiAgICBjICE9PSAweGZlZmYgJiZcbiAgICAvLyAtIGMtZmxvdy1pbmRpY2F0b3JcbiAgICBjICE9PSBDSEFSX0NPTU1BICYmXG4gICAgYyAhPT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUICYmXG4gICAgYyAhPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAmJlxuICAgIGMgIT09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICYmXG4gICAgYyAhPT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUICYmXG4gICAgLy8gLSBcIjpcIiAtIFwiI1wiXG4gICAgYyAhPT0gQ0hBUl9DT0xPTiAmJlxuICAgIGMgIT09IENIQVJfU0hBUlBcbiAgKTtcbn1cblxuLy8gU2ltcGxpZmllZCB0ZXN0IGZvciB2YWx1ZXMgYWxsb3dlZCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHBsYWluIHN0eWxlLlxuZnVuY3Rpb24gaXNQbGFpblNhZmVGaXJzdChjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgLy8gVXNlcyBhIHN1YnNldCBvZiBucy1jaGFyIC0gYy1pbmRpY2F0b3JcbiAgLy8gd2hlcmUgbnMtY2hhciA9IG5iLWNoYXIgLSBzLXdoaXRlLlxuICByZXR1cm4gKFxuICAgIGlzUHJpbnRhYmxlKGMpICYmXG4gICAgYyAhPT0gMHhmZWZmICYmXG4gICAgIWlzV2hpdGVzcGFjZShjKSAmJiAvLyAtIHMtd2hpdGVcbiAgICAvLyAtIChjLWluZGljYXRvciA6Oj1cbiAgICAvLyBcdTIwMUMtXHUyMDFEIHwgXHUyMDFDP1x1MjAxRCB8IFx1MjAxQzpcdTIwMUQgfCBcdTIwMUMsXHUyMDFEIHwgXHUyMDFDW1x1MjAxRCB8IFx1MjAxQ11cdTIwMUQgfCBcdTIwMUN7XHUyMDFEIHwgXHUyMDFDfVx1MjAxRFxuICAgIGMgIT09IENIQVJfTUlOVVMgJiZcbiAgICBjICE9PSBDSEFSX1FVRVNUSU9OICYmXG4gICAgYyAhPT0gQ0hBUl9DT0xPTiAmJlxuICAgIGMgIT09IENIQVJfQ09NTUEgJiZcbiAgICBjICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiZcbiAgICBjICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmXG4gICAgYyAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgJiZcbiAgICBjICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgJiZcbiAgICAvLyB8IFx1MjAxQyNcdTIwMUQgfCBcdTIwMUMmXHUyMDFEIHwgXHUyMDFDKlx1MjAxRCB8IFx1MjAxQyFcdTIwMUQgfCBcdTIwMUN8XHUyMDFEIHwgXHUyMDFDPlx1MjAxRCB8IFx1MjAxQydcdTIwMUQgfCBcdTIwMUNcIlx1MjAxRFxuICAgIGMgIT09IENIQVJfU0hBUlAgJiZcbiAgICBjICE9PSBDSEFSX0FNUEVSU0FORCAmJlxuICAgIGMgIT09IENIQVJfQVNURVJJU0sgJiZcbiAgICBjICE9PSBDSEFSX0VYQ0xBTUFUSU9OICYmXG4gICAgYyAhPT0gQ0hBUl9WRVJUSUNBTF9MSU5FICYmXG4gICAgYyAhPT0gQ0hBUl9HUkVBVEVSX1RIQU4gJiZcbiAgICBjICE9PSBDSEFSX1NJTkdMRV9RVU9URSAmJlxuICAgIGMgIT09IENIQVJfRE9VQkxFX1FVT1RFICYmXG4gICAgLy8gfCBcdTIwMUMlXHUyMDFEIHwgXHUyMDFDQFx1MjAxRCB8IFx1MjAxQ2BcdTIwMUQpXG4gICAgYyAhPT0gQ0hBUl9QRVJDRU5UICYmXG4gICAgYyAhPT0gQ0hBUl9DT01NRVJDSUFMX0FUICYmXG4gICAgYyAhPT0gQ0hBUl9HUkFWRV9BQ0NFTlRcbiAgKTtcbn1cblxuLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGJsb2NrIGluZGVudGF0aW9uIGluZGljYXRvciBpcyByZXF1aXJlZC5cbmZ1bmN0aW9uIG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbGVhZGluZ1NwYWNlUmUgPSAvXlxcbiogLztcbiAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nKTtcbn1cblxuY29uc3QgU1RZTEVfUExBSU4gPSAxLFxuICBTVFlMRV9TSU5HTEUgPSAyLFxuICBTVFlMRV9MSVRFUkFMID0gMyxcbiAgU1RZTEVfRk9MREVEID0gNCxcbiAgU1RZTEVfRE9VQkxFID0gNTtcblxuLy8gRGV0ZXJtaW5lcyB3aGljaCBzY2FsYXIgc3R5bGVzIGFyZSBwb3NzaWJsZSBhbmQgcmV0dXJucyB0aGUgcHJlZmVycmVkIHN0eWxlLlxuLy8gbGluZVdpZHRoID0gLTEgPT4gbm8gbGltaXQuXG4vLyBQcmUtY29uZGl0aW9uczogc3RyLmxlbmd0aCA+IDAuXG4vLyBQb3N0LWNvbmRpdGlvbnM6XG4vLyAgU1RZTEVfUExBSU4gb3IgU1RZTEVfU0lOR0xFID0+IG5vIFxcbiBhcmUgaW4gdGhlIHN0cmluZy5cbi8vICBTVFlMRV9MSVRFUkFMID0+IG5vIGxpbmVzIGFyZSBzdWl0YWJsZSBmb3IgZm9sZGluZyAob3IgbGluZVdpZHRoIGlzIC0xKS5cbi8vICBTVFlMRV9GT0xERUQgPT4gYSBsaW5lID4gbGluZVdpZHRoIGFuZCBjYW4gYmUgZm9sZGVkIChhbmQgbGluZVdpZHRoICE9IC0xKS5cbmZ1bmN0aW9uIGNob29zZVNjYWxhclN0eWxlKFxuICBzdHJpbmc6IHN0cmluZyxcbiAgc2luZ2xlTGluZU9ubHk6IGJvb2xlYW4sXG4gIGluZGVudFBlckxldmVsOiBudW1iZXIsXG4gIGxpbmVXaWR0aDogbnVtYmVyLFxuICB0ZXN0QW1iaWd1b3VzVHlwZTogKC4uLmFyZ3M6IEFueVtdKSA9PiBBbnksXG4pOiBudW1iZXIge1xuICBjb25zdCBzaG91bGRUcmFja1dpZHRoID0gbGluZVdpZHRoICE9PSAtMTtcbiAgbGV0IGhhc0xpbmVCcmVhayA9IGZhbHNlLFxuICAgIGhhc0ZvbGRhYmxlTGluZSA9IGZhbHNlLCAvLyBvbmx5IGNoZWNrZWQgaWYgc2hvdWxkVHJhY2tXaWR0aFxuICAgIHByZXZpb3VzTGluZUJyZWFrID0gLTEsIC8vIGNvdW50IHRoZSBmaXJzdCBsaW5lIGNvcnJlY3RseVxuICAgIHBsYWluID0gaXNQbGFpblNhZmVGaXJzdChzdHJpbmcuY2hhckNvZGVBdCgwKSkgJiZcbiAgICAgICFpc1doaXRlc3BhY2Uoc3RyaW5nLmNoYXJDb2RlQXQoc3RyaW5nLmxlbmd0aCAtIDEpKTtcblxuICBsZXQgY2hhcjogbnVtYmVyLCBpOiBudW1iZXI7XG4gIGlmIChzaW5nbGVMaW5lT25seSkge1xuICAgIC8vIENhc2U6IG5vIGJsb2NrIHN0eWxlcy5cbiAgICAvLyBDaGVjayBmb3IgZGlzYWxsb3dlZCBjaGFyYWN0ZXJzIHRvIHJ1bGUgb3V0IHBsYWluIGFuZCBzaW5nbGUuXG4gICAgZm9yIChpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhciA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkge1xuICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFO1xuICAgICAgfVxuICAgICAgcGxhaW4gPSBwbGFpbiAmJiBpc1BsYWluU2FmZShjaGFyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2FzZTogYmxvY2sgc3R5bGVzIHBlcm1pdHRlZC5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGFyID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoY2hhciA9PT0gQ0hBUl9MSU5FX0ZFRUQpIHtcbiAgICAgICAgaGFzTGluZUJyZWFrID0gdHJ1ZTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgYW55IGxpbmUgY2FuIGJlIGZvbGRlZC5cbiAgICAgICAgaWYgKHNob3VsZFRyYWNrV2lkdGgpIHtcbiAgICAgICAgICBoYXNGb2xkYWJsZUxpbmUgPSBoYXNGb2xkYWJsZUxpbmUgfHxcbiAgICAgICAgICAgIC8vIEZvbGRhYmxlIGxpbmUgPSB0b28gbG9uZywgYW5kIG5vdCBtb3JlLWluZGVudGVkLlxuICAgICAgICAgICAgKGkgLSBwcmV2aW91c0xpbmVCcmVhayAtIDEgPiBsaW5lV2lkdGggJiZcbiAgICAgICAgICAgICAgc3RyaW5nW3ByZXZpb3VzTGluZUJyZWFrICsgMV0gIT09IFwiIFwiKTtcbiAgICAgICAgICBwcmV2aW91c0xpbmVCcmVhayA9IGk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWlzUHJpbnRhYmxlKGNoYXIpKSB7XG4gICAgICAgIHJldHVybiBTVFlMRV9ET1VCTEU7XG4gICAgICB9XG4gICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIpO1xuICAgIH1cbiAgICAvLyBpbiBjYXNlIHRoZSBlbmQgaXMgbWlzc2luZyBhIFxcblxuICAgIGhhc0ZvbGRhYmxlTGluZSA9IGhhc0ZvbGRhYmxlTGluZSB8fFxuICAgICAgKHNob3VsZFRyYWNrV2lkdGggJiZcbiAgICAgICAgaSAtIHByZXZpb3VzTGluZUJyZWFrIC0gMSA+IGxpbmVXaWR0aCAmJlxuICAgICAgICBzdHJpbmdbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gXCIgXCIpO1xuICB9XG4gIC8vIEFsdGhvdWdoIGV2ZXJ5IHN0eWxlIGNhbiByZXByZXNlbnQgXFxuIHdpdGhvdXQgZXNjYXBpbmcsIHByZWZlciBibG9jayBzdHlsZXNcbiAgLy8gZm9yIG11bHRpbGluZSwgc2luY2UgdGhleSdyZSBtb3JlIHJlYWRhYmxlIGFuZCB0aGV5IGRvbid0IGFkZCBlbXB0eSBsaW5lcy5cbiAgLy8gQWxzbyBwcmVmZXIgZm9sZGluZyBhIHN1cGVyLWxvbmcgbGluZS5cbiAgaWYgKCFoYXNMaW5lQnJlYWsgJiYgIWhhc0ZvbGRhYmxlTGluZSkge1xuICAgIC8vIFN0cmluZ3MgaW50ZXJwcmV0YWJsZSBhcyBhbm90aGVyIHR5cGUgaGF2ZSB0byBiZSBxdW90ZWQ7XG4gICAgLy8gZS5nLiB0aGUgc3RyaW5nICd0cnVlJyB2cy4gdGhlIGJvb2xlYW4gdHJ1ZS5cbiAgICByZXR1cm4gcGxhaW4gJiYgIXRlc3RBbWJpZ3VvdXNUeXBlKHN0cmluZykgPyBTVFlMRV9QTEFJTiA6IFNUWUxFX1NJTkdMRTtcbiAgfVxuICAvLyBFZGdlIGNhc2U6IGJsb2NrIGluZGVudGF0aW9uIGluZGljYXRvciBjYW4gb25seSBoYXZlIG9uZSBkaWdpdC5cbiAgaWYgKGluZGVudFBlckxldmVsID4gOSAmJiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZykpIHtcbiAgICByZXR1cm4gU1RZTEVfRE9VQkxFO1xuICB9XG4gIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyBibG9jayBzdHlsZXMgYXJlIHZhbGlkLlxuICAvLyBQcmVmZXIgbGl0ZXJhbCBzdHlsZSB1bmxlc3Mgd2Ugd2FudCB0byBmb2xkLlxuICByZXR1cm4gaGFzRm9sZGFibGVMaW5lID8gU1RZTEVfRk9MREVEIDogU1RZTEVfTElURVJBTDtcbn1cblxuLy8gR3JlZWR5IGxpbmUgYnJlYWtpbmcuXG4vLyBQaWNrcyB0aGUgbG9uZ2VzdCBsaW5lIHVuZGVyIHRoZSBsaW1pdCBlYWNoIHRpbWUsXG4vLyBvdGhlcndpc2Ugc2V0dGxlcyBmb3IgdGhlIHNob3J0ZXN0IGxpbmUgb3ZlciB0aGUgbGltaXQuXG4vLyBOQi4gTW9yZS1pbmRlbnRlZCBsaW5lcyAqY2Fubm90KiBiZSBmb2xkZWQsIGFzIHRoYXQgd291bGQgYWRkIGFuIGV4dHJhIFxcbi5cbmZ1bmN0aW9uIGZvbGRMaW5lKGxpbmU6IHN0cmluZywgd2lkdGg6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChsaW5lID09PSBcIlwiIHx8IGxpbmVbMF0gPT09IFwiIFwiKSByZXR1cm4gbGluZTtcblxuICAvLyBTaW5jZSBhIG1vcmUtaW5kZW50ZWQgbGluZSBhZGRzIGEgXFxuLCBicmVha3MgY2FuJ3QgYmUgZm9sbG93ZWQgYnkgYSBzcGFjZS5cbiAgY29uc3QgYnJlYWtSZSA9IC8gW14gXS9nOyAvLyBub3RlOiB0aGUgbWF0Y2ggaW5kZXggd2lsbCBhbHdheXMgYmUgPD0gbGVuZ3RoLTIuXG4gIGxldCBtYXRjaDtcbiAgLy8gc3RhcnQgaXMgYW4gaW5jbHVzaXZlIGluZGV4LiBlbmQsIGN1cnIsIGFuZCBuZXh0IGFyZSBleGNsdXNpdmUuXG4gIGxldCBzdGFydCA9IDAsXG4gICAgZW5kLFxuICAgIGN1cnIgPSAwLFxuICAgIG5leHQgPSAwO1xuICBsZXQgcmVzdWx0ID0gXCJcIjtcblxuICAvLyBJbnZhcmlhbnRzOiAwIDw9IHN0YXJ0IDw9IGxlbmd0aC0xLlxuICAvLyAgIDAgPD0gY3VyciA8PSBuZXh0IDw9IG1heCgwLCBsZW5ndGgtMikuIGN1cnIgLSBzdGFydCA8PSB3aWR0aC5cbiAgLy8gSW5zaWRlIHRoZSBsb29wOlxuICAvLyAgIEEgbWF0Y2ggaW1wbGllcyBsZW5ndGggPj0gMiwgc28gY3VyciBhbmQgbmV4dCBhcmUgPD0gbGVuZ3RoLTIuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25kaXRpb25hbC1hc3NpZ25tZW50XG4gIHdoaWxlICgobWF0Y2ggPSBicmVha1JlLmV4ZWMobGluZSkpKSB7XG4gICAgbmV4dCA9IG1hdGNoLmluZGV4O1xuICAgIC8vIG1haW50YWluIGludmFyaWFudDogY3VyciAtIHN0YXJ0IDw9IHdpZHRoXG4gICAgaWYgKG5leHQgLSBzdGFydCA+IHdpZHRoKSB7XG4gICAgICBlbmQgPSBjdXJyID4gc3RhcnQgPyBjdXJyIDogbmV4dDsgLy8gZGVyaXZlIGVuZCA8PSBsZW5ndGgtMlxuICAgICAgcmVzdWx0ICs9IGBcXG4ke2xpbmUuc2xpY2Uoc3RhcnQsIGVuZCl9YDtcbiAgICAgIC8vIHNraXAgdGhlIHNwYWNlIHRoYXQgd2FzIG91dHB1dCBhcyBcXG5cbiAgICAgIHN0YXJ0ID0gZW5kICsgMTsgLy8gZGVyaXZlIHN0YXJ0IDw9IGxlbmd0aC0xXG4gICAgfVxuICAgIGN1cnIgPSBuZXh0O1xuICB9XG5cbiAgLy8gQnkgdGhlIGludmFyaWFudHMsIHN0YXJ0IDw9IGxlbmd0aC0xLCBzbyB0aGVyZSBpcyBzb21ldGhpbmcgbGVmdCBvdmVyLlxuICAvLyBJdCBpcyBlaXRoZXIgdGhlIHdob2xlIHN0cmluZyBvciBhIHBhcnQgc3RhcnRpbmcgZnJvbSBub24td2hpdGVzcGFjZS5cbiAgcmVzdWx0ICs9IFwiXFxuXCI7XG4gIC8vIEluc2VydCBhIGJyZWFrIGlmIHRoZSByZW1haW5kZXIgaXMgdG9vIGxvbmcgYW5kIHRoZXJlIGlzIGEgYnJlYWsgYXZhaWxhYmxlLlxuICBpZiAobGluZS5sZW5ndGggLSBzdGFydCA+IHdpZHRoICYmIGN1cnIgPiBzdGFydCkge1xuICAgIHJlc3VsdCArPSBgJHtsaW5lLnNsaWNlKHN0YXJ0LCBjdXJyKX1cXG4ke2xpbmUuc2xpY2UoY3VyciArIDEpfWA7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ICs9IGxpbmUuc2xpY2Uoc3RhcnQpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5zbGljZSgxKTsgLy8gZHJvcCBleHRyYSBcXG4gam9pbmVyXG59XG5cbi8vIChTZWUgdGhlIG5vdGUgZm9yIHdyaXRlU2NhbGFyLilcbmZ1bmN0aW9uIGRyb3BFbmRpbmdOZXdsaW5lKHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ1tzdHJpbmcubGVuZ3RoIC0gMV0gPT09IFwiXFxuXCIgPyBzdHJpbmcuc2xpY2UoMCwgLTEpIDogc3RyaW5nO1xufVxuXG4vLyBOb3RlOiBhIGxvbmcgbGluZSB3aXRob3V0IGEgc3VpdGFibGUgYnJlYWsgcG9pbnQgd2lsbCBleGNlZWQgdGhlIHdpZHRoIGxpbWl0LlxuLy8gUHJlLWNvbmRpdGlvbnM6IGV2ZXJ5IGNoYXIgaW4gc3RyIGlzUHJpbnRhYmxlLCBzdHIubGVuZ3RoID4gMCwgd2lkdGggPiAwLlxuZnVuY3Rpb24gZm9sZFN0cmluZyhzdHJpbmc6IHN0cmluZywgd2lkdGg6IG51bWJlcik6IHN0cmluZyB7XG4gIC8vIEluIGZvbGRlZCBzdHlsZSwgJGskIGNvbnNlY3V0aXZlIG5ld2xpbmVzIG91dHB1dCBhcyAkaysxJCBuZXdsaW5lc1x1MjAxNFxuICAvLyB1bmxlc3MgdGhleSdyZSBiZWZvcmUgb3IgYWZ0ZXIgYSBtb3JlLWluZGVudGVkIGxpbmUsIG9yIGF0IHRoZSB2ZXJ5XG4gIC8vIGJlZ2lubmluZyBvciBlbmQsIGluIHdoaWNoIGNhc2UgJGskIG1hcHMgdG8gJGskLlxuICAvLyBUaGVyZWZvcmUsIHBhcnNlIGVhY2ggY2h1bmsgYXMgbmV3bGluZShzKSBmb2xsb3dlZCBieSBhIGNvbnRlbnQgbGluZS5cbiAgY29uc3QgbGluZVJlID0gLyhcXG4rKShbXlxcbl0qKS9nO1xuXG4gIC8vIGZpcnN0IGxpbmUgKHBvc3NpYmx5IGFuIGVtcHR5IGxpbmUpXG4gIGxldCByZXN1bHQgPSAoKCk6IHN0cmluZyA9PiB7XG4gICAgbGV0IG5leHRMRiA9IHN0cmluZy5pbmRleE9mKFwiXFxuXCIpO1xuICAgIG5leHRMRiA9IG5leHRMRiAhPT0gLTEgPyBuZXh0TEYgOiBzdHJpbmcubGVuZ3RoO1xuICAgIGxpbmVSZS5sYXN0SW5kZXggPSBuZXh0TEY7XG4gICAgcmV0dXJuIGZvbGRMaW5lKHN0cmluZy5zbGljZSgwLCBuZXh0TEYpLCB3aWR0aCk7XG4gIH0pKCk7XG4gIC8vIElmIHdlIGhhdmVuJ3QgcmVhY2hlZCB0aGUgZmlyc3QgY29udGVudCBsaW5lIHlldCwgZG9uJ3QgYWRkIGFuIGV4dHJhIFxcbi5cbiAgbGV0IHByZXZNb3JlSW5kZW50ZWQgPSBzdHJpbmdbMF0gPT09IFwiXFxuXCIgfHwgc3RyaW5nWzBdID09PSBcIiBcIjtcbiAgbGV0IG1vcmVJbmRlbnRlZDtcblxuICAvLyByZXN0IG9mIHRoZSBsaW5lc1xuICBsZXQgbWF0Y2g7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25kaXRpb25hbC1hc3NpZ25tZW50XG4gIHdoaWxlICgobWF0Y2ggPSBsaW5lUmUuZXhlYyhzdHJpbmcpKSkge1xuICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLFxuICAgICAgbGluZSA9IG1hdGNoWzJdO1xuICAgIG1vcmVJbmRlbnRlZCA9IGxpbmVbMF0gPT09IFwiIFwiO1xuICAgIHJlc3VsdCArPSBwcmVmaXggK1xuICAgICAgKCFwcmV2TW9yZUluZGVudGVkICYmICFtb3JlSW5kZW50ZWQgJiYgbGluZSAhPT0gXCJcIiA/IFwiXFxuXCIgOiBcIlwiKSArXG4gICAgICBmb2xkTGluZShsaW5lLCB3aWR0aCk7XG4gICAgcHJldk1vcmVJbmRlbnRlZCA9IG1vcmVJbmRlbnRlZDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEVzY2FwZXMgYSBkb3VibGUtcXVvdGVkIHN0cmluZy5cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBsZXQgY2hhciwgbmV4dENoYXI7XG4gIGxldCBlc2NhcGVTZXE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgLy8gQ2hlY2sgZm9yIHN1cnJvZ2F0ZSBwYWlycyAocmVmZXJlbmNlIFVuaWNvZGUgMy4wIHNlY3Rpb24gXCIzLjcgU3Vycm9nYXRlc1wiKS5cbiAgICBpZiAoY2hhciA+PSAweGQ4MDAgJiYgY2hhciA8PSAweGRiZmYgLyogaGlnaCBzdXJyb2dhdGUgKi8pIHtcbiAgICAgIG5leHRDaGFyID0gc3RyaW5nLmNoYXJDb2RlQXQoaSArIDEpO1xuICAgICAgaWYgKG5leHRDaGFyID49IDB4ZGMwMCAmJiBuZXh0Q2hhciA8PSAweGRmZmYgLyogbG93IHN1cnJvZ2F0ZSAqLykge1xuICAgICAgICAvLyBDb21iaW5lIHRoZSBzdXJyb2dhdGUgcGFpciBhbmQgc3RvcmUgaXQgZXNjYXBlZC5cbiAgICAgICAgcmVzdWx0ICs9IGVuY29kZUhleChcbiAgICAgICAgICAoY2hhciAtIDB4ZDgwMCkgKiAweDQwMCArIG5leHRDaGFyIC0gMHhkYzAwICsgMHgxMDAwMCxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gQWR2YW5jZSBpbmRleCBvbmUgZXh0cmEgc2luY2Ugd2UgYWxyZWFkeSB1c2VkIHRoYXQgY2hhciBoZXJlLlxuICAgICAgICBpKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBlc2NhcGVTZXEgPSBFU0NBUEVfU0VRVUVOQ0VTW2NoYXJdO1xuICAgIHJlc3VsdCArPSAhZXNjYXBlU2VxICYmIGlzUHJpbnRhYmxlKGNoYXIpXG4gICAgICA/IHN0cmluZ1tpXVxuICAgICAgOiBlc2NhcGVTZXEgfHwgZW5jb2RlSGV4KGNoYXIpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gUHJlLWNvbmRpdGlvbnM6IHN0cmluZyBpcyB2YWxpZCBmb3IgYSBibG9jayBzY2FsYXIsIDEgPD0gaW5kZW50UGVyTGV2ZWwgPD0gOS5cbmZ1bmN0aW9uIGJsb2NrSGVhZGVyKHN0cmluZzogc3RyaW5nLCBpbmRlbnRQZXJMZXZlbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaW5kZW50SW5kaWNhdG9yID0gbmVlZEluZGVudEluZGljYXRvcihzdHJpbmcpXG4gICAgPyBTdHJpbmcoaW5kZW50UGVyTGV2ZWwpXG4gICAgOiBcIlwiO1xuXG4gIC8vIG5vdGUgdGhlIHNwZWNpYWwgY2FzZTogdGhlIHN0cmluZyAnXFxuJyBjb3VudHMgYXMgYSBcInRyYWlsaW5nXCIgZW1wdHkgbGluZS5cbiAgY29uc3QgY2xpcCA9IHN0cmluZ1tzdHJpbmcubGVuZ3RoIC0gMV0gPT09IFwiXFxuXCI7XG4gIGNvbnN0IGtlZXAgPSBjbGlwICYmIChzdHJpbmdbc3RyaW5nLmxlbmd0aCAtIDJdID09PSBcIlxcblwiIHx8IHN0cmluZyA9PT0gXCJcXG5cIik7XG4gIGNvbnN0IGNob21wID0ga2VlcCA/IFwiK1wiIDogY2xpcCA/IFwiXCIgOiBcIi1cIjtcblxuICByZXR1cm4gYCR7aW5kZW50SW5kaWNhdG9yfSR7Y2hvbXB9XFxuYDtcbn1cblxuLy8gTm90ZTogbGluZSBicmVha2luZy9mb2xkaW5nIGlzIGltcGxlbWVudGVkIGZvciBvbmx5IHRoZSBmb2xkZWQgc3R5bGUuXG4vLyBOQi4gV2UgZHJvcCB0aGUgbGFzdCB0cmFpbGluZyBuZXdsaW5lIChpZiBhbnkpIG9mIGEgcmV0dXJuZWQgYmxvY2sgc2NhbGFyXG4vLyAgc2luY2UgdGhlIGR1bXBlciBhZGRzIGl0cyBvd24gbmV3bGluZS4gVGhpcyBhbHdheXMgd29ya3M6XG4vLyAgICBcdTIwMjIgTm8gZW5kaW5nIG5ld2xpbmUgPT4gdW5hZmZlY3RlZDsgYWxyZWFkeSB1c2luZyBzdHJpcCBcIi1cIiBjaG9tcGluZy5cbi8vICAgIFx1MjAyMiBFbmRpbmcgbmV3bGluZSAgICA9PiByZW1vdmVkIHRoZW4gcmVzdG9yZWQuXG4vLyAgSW1wb3J0YW50bHksIHRoaXMga2VlcHMgdGhlIFwiK1wiIGNob21wIGluZGljYXRvciBmcm9tIGdhaW5pbmcgYW4gZXh0cmEgbGluZS5cbmZ1bmN0aW9uIHdyaXRlU2NhbGFyKFxuICBzdGF0ZTogRHVtcGVyU3RhdGUsXG4gIHN0cmluZzogc3RyaW5nLFxuICBsZXZlbDogbnVtYmVyLFxuICBpc2tleTogYm9vbGVhbixcbikge1xuICBzdGF0ZS5kdW1wID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgIGlmIChzdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gXCInJ1wiO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhc3RhdGUubm9Db21wYXRNb2RlICYmXG4gICAgICBERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWC5pbmRleE9mKHN0cmluZykgIT09IC0xXG4gICAgKSB7XG4gICAgICByZXR1cm4gYCcke3N0cmluZ30nYDtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRlbnQgPSBzdGF0ZS5pbmRlbnQgKiBNYXRoLm1heCgxLCBsZXZlbCk7IC8vIG5vIDAtaW5kZW50IHNjYWxhcnNcbiAgICAvLyBBcyBpbmRlbnRhdGlvbiBnZXRzIGRlZXBlciwgbGV0IHRoZSB3aWR0aCBkZWNyZWFzZSBtb25vdG9uaWNhbGx5XG4gICAgLy8gdG8gdGhlIGxvd2VyIGJvdW5kIG1pbihzdGF0ZS5saW5lV2lkdGgsIDQwKS5cbiAgICAvLyBOb3RlIHRoYXQgdGhpcyBpbXBsaWVzXG4gICAgLy8gIHN0YXRlLmxpbmVXaWR0aCBcdTIyNjQgNDAgKyBzdGF0ZS5pbmRlbnQ6IHdpZHRoIGlzIGZpeGVkIGF0IHRoZSBsb3dlciBib3VuZC5cbiAgICAvLyAgc3RhdGUubGluZVdpZHRoID4gNDAgKyBzdGF0ZS5pbmRlbnQ6IHdpZHRoIGRlY3JlYXNlcyB1bnRpbCB0aGUgbG93ZXJcbiAgICAvLyAgYm91bmQuXG4gICAgLy8gVGhpcyBiZWhhdmVzIGJldHRlciB0aGFuIGEgY29uc3RhbnQgbWluaW11bSB3aWR0aCB3aGljaCBkaXNhbGxvd3NcbiAgICAvLyBuYXJyb3dlciBvcHRpb25zLCBvciBhbiBpbmRlbnQgdGhyZXNob2xkIHdoaWNoIGNhdXNlcyB0aGUgd2lkdGhcbiAgICAvLyB0byBzdWRkZW5seSBpbmNyZWFzZS5cbiAgICBjb25zdCBsaW5lV2lkdGggPSBzdGF0ZS5saW5lV2lkdGggPT09IC0xXG4gICAgICA/IC0xXG4gICAgICA6IE1hdGgubWF4KE1hdGgubWluKHN0YXRlLmxpbmVXaWR0aCwgNDApLCBzdGF0ZS5saW5lV2lkdGggLSBpbmRlbnQpO1xuXG4gICAgLy8gV2l0aG91dCBrbm93aW5nIGlmIGtleXMgYXJlIGltcGxpY2l0L2V4cGxpY2l0LFxuICAgIC8vIGFzc3VtZSBpbXBsaWNpdCBmb3Igc2FmZXR5LlxuICAgIGNvbnN0IHNpbmdsZUxpbmVPbmx5ID0gaXNrZXkgfHxcbiAgICAgIC8vIE5vIGJsb2NrIHN0eWxlcyBpbiBmbG93IG1vZGUuXG4gICAgICAoc3RhdGUuZmxvd0xldmVsID4gLTEgJiYgbGV2ZWwgPj0gc3RhdGUuZmxvd0xldmVsKTtcbiAgICBmdW5jdGlvbiB0ZXN0QW1iaWd1aXR5KHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGVzdEltcGxpY2l0UmVzb2x2aW5nKHN0YXRlLCBzdHIpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoXG4gICAgICBjaG9vc2VTY2FsYXJTdHlsZShcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBzaW5nbGVMaW5lT25seSxcbiAgICAgICAgc3RhdGUuaW5kZW50LFxuICAgICAgICBsaW5lV2lkdGgsXG4gICAgICAgIHRlc3RBbWJpZ3VpdHksXG4gICAgICApXG4gICAgKSB7XG4gICAgICBjYXNlIFNUWUxFX1BMQUlOOlxuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgY2FzZSBTVFlMRV9TSU5HTEU6XG4gICAgICAgIHJldHVybiBgJyR7c3RyaW5nLnJlcGxhY2UoLycvZywgXCInJ1wiKX0nYDtcbiAgICAgIGNhc2UgU1RZTEVfTElURVJBTDpcbiAgICAgICAgcmV0dXJuIGB8JHtibG9ja0hlYWRlcihzdHJpbmcsIHN0YXRlLmluZGVudCl9JHtcbiAgICAgICAgICBkcm9wRW5kaW5nTmV3bGluZShcbiAgICAgICAgICAgIGluZGVudFN0cmluZyhzdHJpbmcsIGluZGVudCksXG4gICAgICAgICAgKVxuICAgICAgICB9YDtcbiAgICAgIGNhc2UgU1RZTEVfRk9MREVEOlxuICAgICAgICByZXR1cm4gYD4ke2Jsb2NrSGVhZGVyKHN0cmluZywgc3RhdGUuaW5kZW50KX0ke1xuICAgICAgICAgIGRyb3BFbmRpbmdOZXdsaW5lKFxuICAgICAgICAgICAgaW5kZW50U3RyaW5nKGZvbGRTdHJpbmcoc3RyaW5nLCBsaW5lV2lkdGgpLCBpbmRlbnQpLFxuICAgICAgICAgIClcbiAgICAgICAgfWA7XG4gICAgICBjYXNlIFNUWUxFX0RPVUJMRTpcbiAgICAgICAgcmV0dXJuIGBcIiR7ZXNjYXBlU3RyaW5nKHN0cmluZyl9XCJgO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFlBTUxFcnJvcihcImltcG9zc2libGUgZXJyb3I6IGludmFsaWQgc2NhbGFyIHN0eWxlXCIpO1xuICAgIH1cbiAgfSkoKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG93U2VxdWVuY2UoXG4gIHN0YXRlOiBEdW1wZXJTdGF0ZSxcbiAgbGV2ZWw6IG51bWJlcixcbiAgb2JqZWN0OiBBbnksXG4pIHtcbiAgbGV0IF9yZXN1bHQgPSBcIlwiO1xuICBjb25zdCBfdGFnID0gc3RhdGUudGFnO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAvLyBXcml0ZSBvbmx5IHZhbGlkIGVsZW1lbnRzLlxuICAgIGlmICh3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3RbaW5kZXhdLCBmYWxzZSwgZmFsc2UpKSB7XG4gICAgICBpZiAoaW5kZXggIT09IDApIF9yZXN1bHQgKz0gYCwkeyFzdGF0ZS5jb25kZW5zZUZsb3cgPyBcIiBcIiA6IFwiXCJ9YDtcbiAgICAgIF9yZXN1bHQgKz0gc3RhdGUuZHVtcDtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS50YWcgPSBfdGFnO1xuICBzdGF0ZS5kdW1wID0gYFske19yZXN1bHR9XWA7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmxvY2tTZXF1ZW5jZShcbiAgc3RhdGU6IER1bXBlclN0YXRlLFxuICBsZXZlbDogbnVtYmVyLFxuICBvYmplY3Q6IEFueSxcbiAgY29tcGFjdCA9IGZhbHNlLFxuKSB7XG4gIGxldCBfcmVzdWx0ID0gXCJcIjtcbiAgY29uc3QgX3RhZyA9IHN0YXRlLnRhZztcblxuICBmb3IgKGxldCBpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgLy8gV3JpdGUgb25seSB2YWxpZCBlbGVtZW50cy5cbiAgICBpZiAod3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG9iamVjdFtpbmRleF0sIHRydWUsIHRydWUpKSB7XG4gICAgICBpZiAoIWNvbXBhY3QgfHwgaW5kZXggIT09IDApIHtcbiAgICAgICAgX3Jlc3VsdCArPSBnZW5lcmF0ZU5leHRMaW5lKHN0YXRlLCBsZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZS5kdW1wLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgICAgX3Jlc3VsdCArPSBcIi1cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9yZXN1bHQgKz0gXCItIFwiO1xuICAgICAgfVxuXG4gICAgICBfcmVzdWx0ICs9IHN0YXRlLmR1bXA7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgXCJbXVwiOyAvLyBFbXB0eSBzZXF1ZW5jZSBpZiBubyB2YWxpZCB2YWx1ZXMuXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvd01hcHBpbmcoXG4gIHN0YXRlOiBEdW1wZXJTdGF0ZSxcbiAgbGV2ZWw6IG51bWJlcixcbiAgb2JqZWN0OiBBbnksXG4pIHtcbiAgbGV0IF9yZXN1bHQgPSBcIlwiO1xuICBjb25zdCBfdGFnID0gc3RhdGUudGFnLFxuICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGxldCBwYWlyQnVmZmVyOiBzdHJpbmcsIG9iamVjdEtleTogc3RyaW5nLCBvYmplY3RWYWx1ZTogQW55O1xuICBmb3IgKFxuICAgIGxldCBpbmRleCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoO1xuICAgIGluZGV4IDwgbGVuZ3RoO1xuICAgIGluZGV4ICs9IDFcbiAgKSB7XG4gICAgcGFpckJ1ZmZlciA9IHN0YXRlLmNvbmRlbnNlRmxvdyA/ICdcIicgOiBcIlwiO1xuXG4gICAgaWYgKGluZGV4ICE9PSAwKSBwYWlyQnVmZmVyICs9IFwiLCBcIjtcblxuICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXhdO1xuICAgIG9iamVjdFZhbHVlID0gb2JqZWN0W29iamVjdEtleV07XG5cbiAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZSwgbGV2ZWwsIG9iamVjdEtleSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmR1bXAubGVuZ3RoID4gMTAyNCkgcGFpckJ1ZmZlciArPSBcIj8gXCI7XG5cbiAgICBwYWlyQnVmZmVyICs9IGAke3N0YXRlLmR1bXB9JHtzdGF0ZS5jb25kZW5zZUZsb3cgPyAnXCInIDogXCJcIn06JHtcbiAgICAgIHN0YXRlLmNvbmRlbnNlRmxvdyA/IFwiXCIgOiBcIiBcIlxuICAgIH1gO1xuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsLCBvYmplY3RWYWx1ZSwgZmFsc2UsIGZhbHNlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCB2YWx1ZS5cbiAgICB9XG5cbiAgICBwYWlyQnVmZmVyICs9IHN0YXRlLmR1bXA7XG5cbiAgICAvLyBCb3RoIGtleSBhbmQgdmFsdWUgYXJlIHZhbGlkLlxuICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRlLnRhZyA9IF90YWc7XG4gIHN0YXRlLmR1bXAgPSBgeyR7X3Jlc3VsdH19YDtcbn1cblxuZnVuY3Rpb24gd3JpdGVCbG9ja01hcHBpbmcoXG4gIHN0YXRlOiBEdW1wZXJTdGF0ZSxcbiAgbGV2ZWw6IG51bWJlcixcbiAgb2JqZWN0OiBBbnksXG4gIGNvbXBhY3QgPSBmYWxzZSxcbikge1xuICBjb25zdCBfdGFnID0gc3RhdGUudGFnLFxuICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuICBsZXQgX3Jlc3VsdCA9IFwiXCI7XG5cbiAgLy8gQWxsb3cgc29ydGluZyBrZXlzIHNvIHRoYXQgdGhlIG91dHB1dCBmaWxlIGlzIGRldGVybWluaXN0aWNcbiAgaWYgKHN0YXRlLnNvcnRLZXlzID09PSB0cnVlKSB7XG4gICAgLy8gRGVmYXVsdCBzb3J0aW5nXG4gICAgb2JqZWN0S2V5TGlzdC5zb3J0KCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHN0YXRlLnNvcnRLZXlzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvLyBDdXN0b20gc29ydCBmdW5jdGlvblxuICAgIG9iamVjdEtleUxpc3Quc29ydChzdGF0ZS5zb3J0S2V5cyk7XG4gIH0gZWxzZSBpZiAoc3RhdGUuc29ydEtleXMpIHtcbiAgICAvLyBTb21ldGhpbmcgaXMgd3JvbmdcbiAgICB0aHJvdyBuZXcgWUFNTEVycm9yKFwic29ydEtleXMgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIGxldCBwYWlyQnVmZmVyID0gXCJcIixcbiAgICBvYmplY3RLZXk6IHN0cmluZyxcbiAgICBvYmplY3RWYWx1ZTogQW55LFxuICAgIGV4cGxpY2l0UGFpcjogYm9vbGVhbjtcbiAgZm9yIChcbiAgICBsZXQgaW5kZXggPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDtcbiAgICBpbmRleCA8IGxlbmd0aDtcbiAgICBpbmRleCArPSAxXG4gICkge1xuICAgIHBhaXJCdWZmZXIgPSBcIlwiO1xuXG4gICAgaWYgKCFjb21wYWN0IHx8IGluZGV4ICE9PSAwKSB7XG4gICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4XTtcbiAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldO1xuXG4gICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUsIGxldmVsICsgMSwgb2JqZWN0S2V5LCB0cnVlLCB0cnVlLCB0cnVlKSkge1xuICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBwYWlyIGJlY2F1c2Ugb2YgaW52YWxpZCBrZXkuXG4gICAgfVxuXG4gICAgZXhwbGljaXRQYWlyID0gKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09IFwiP1wiKSB8fFxuICAgICAgKHN0YXRlLmR1bXAgJiYgc3RhdGUuZHVtcC5sZW5ndGggPiAxMDI0KTtcblxuICAgIGlmIChleHBsaWNpdFBhaXIpIHtcbiAgICAgIGlmIChzdGF0ZS5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZS5kdW1wLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgICAgcGFpckJ1ZmZlciArPSBcIj9cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhaXJCdWZmZXIgKz0gXCI/IFwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcblxuICAgIGlmIChleHBsaWNpdFBhaXIpIHtcbiAgICAgIHBhaXJCdWZmZXIgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZSwgbGV2ZWwpO1xuICAgIH1cblxuICAgIGlmICghd3JpdGVOb2RlKHN0YXRlLCBsZXZlbCArIDEsIG9iamVjdFZhbHVlLCB0cnVlLCBleHBsaWNpdFBhaXIpKSB7XG4gICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIHBhaXIgYmVjYXVzZSBvZiBpbnZhbGlkIHZhbHVlLlxuICAgIH1cblxuICAgIGlmIChzdGF0ZS5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZS5kdW1wLmNoYXJDb2RlQXQoMCkpIHtcbiAgICAgIHBhaXJCdWZmZXIgKz0gXCI6XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhaXJCdWZmZXIgKz0gXCI6IFwiO1xuICAgIH1cblxuICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUuZHVtcDtcblxuICAgIC8vIEJvdGgga2V5IGFuZCB2YWx1ZSBhcmUgdmFsaWQuXG4gICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyO1xuICB9XG5cbiAgc3RhdGUudGFnID0gX3RhZztcbiAgc3RhdGUuZHVtcCA9IF9yZXN1bHQgfHwgXCJ7fVwiOyAvLyBFbXB0eSBtYXBwaW5nIGlmIG5vIHZhbGlkIHBhaXJzLlxufVxuXG5mdW5jdGlvbiBkZXRlY3RUeXBlKFxuICBzdGF0ZTogRHVtcGVyU3RhdGUsXG4gIG9iamVjdDogQW55LFxuICBleHBsaWNpdCA9IGZhbHNlLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHR5cGVMaXN0ID0gZXhwbGljaXQgPyBzdGF0ZS5leHBsaWNpdFR5cGVzIDogc3RhdGUuaW1wbGljaXRUeXBlcztcblxuICBsZXQgdHlwZTogVHlwZTtcbiAgbGV0IHN0eWxlOiBTdHlsZVZhcmlhbnQ7XG4gIGxldCBfcmVzdWx0OiBzdHJpbmc7XG4gIGZvciAobGV0IGluZGV4ID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHR5cGUgPSB0eXBlTGlzdFtpbmRleF07XG5cbiAgICBpZiAoXG4gICAgICAodHlwZS5pbnN0YW5jZU9mIHx8IHR5cGUucHJlZGljYXRlKSAmJlxuICAgICAgKCF0eXBlLmluc3RhbmNlT2YgfHxcbiAgICAgICAgKHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIgJiYgb2JqZWN0IGluc3RhbmNlb2YgdHlwZS5pbnN0YW5jZU9mKSkgJiZcbiAgICAgICghdHlwZS5wcmVkaWNhdGUgfHwgdHlwZS5wcmVkaWNhdGUob2JqZWN0KSlcbiAgICApIHtcbiAgICAgIHN0YXRlLnRhZyA9IGV4cGxpY2l0ID8gdHlwZS50YWcgOiBcIj9cIjtcblxuICAgICAgaWYgKHR5cGUucmVwcmVzZW50KSB7XG4gICAgICAgIHN0eWxlID0gc3RhdGUuc3R5bGVNYXBbdHlwZS50YWddIHx8IHR5cGUuZGVmYXVsdFN0eWxlO1xuXG4gICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbCh0eXBlLnJlcHJlc2VudCkgPT09IFwiW29iamVjdCBGdW5jdGlvbl1cIikge1xuICAgICAgICAgIF9yZXN1bHQgPSAodHlwZS5yZXByZXNlbnQgYXMgUmVwcmVzZW50Rm4pKG9iamVjdCwgc3R5bGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhc093bih0eXBlLnJlcHJlc2VudCwgc3R5bGUpKSB7XG4gICAgICAgICAgX3Jlc3VsdCA9ICh0eXBlLnJlcHJlc2VudCBhcyBBcnJheU9iamVjdDxSZXByZXNlbnRGbj4pW3N0eWxlXShcbiAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFlBTUxFcnJvcihcbiAgICAgICAgICAgIGAhPCR7dHlwZS50YWd9PiB0YWcgcmVzb2x2ZXIgYWNjZXB0cyBub3QgXCIke3N0eWxlfVwiIHN0eWxlYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUuZHVtcCA9IF9yZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gU2VyaWFsaXplcyBgb2JqZWN0YCBhbmQgd3JpdGVzIGl0IHRvIGdsb2JhbCBgcmVzdWx0YC5cbi8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbiBpbnZhbGlkIG9iamVjdC5cbi8vXG5mdW5jdGlvbiB3cml0ZU5vZGUoXG4gIHN0YXRlOiBEdW1wZXJTdGF0ZSxcbiAgbGV2ZWw6IG51bWJlcixcbiAgb2JqZWN0OiBBbnksXG4gIGJsb2NrOiBib29sZWFuLFxuICBjb21wYWN0OiBib29sZWFuLFxuICBpc2tleSA9IGZhbHNlLFxuKTogYm9vbGVhbiB7XG4gIHN0YXRlLnRhZyA9IG51bGw7XG4gIHN0YXRlLmR1bXAgPSBvYmplY3Q7XG5cbiAgaWYgKCFkZXRlY3RUeXBlKHN0YXRlLCBvYmplY3QsIGZhbHNlKSkge1xuICAgIGRldGVjdFR5cGUoc3RhdGUsIG9iamVjdCwgdHJ1ZSk7XG4gIH1cblxuICBjb25zdCB0eXBlID0gX3RvU3RyaW5nLmNhbGwoc3RhdGUuZHVtcCk7XG5cbiAgaWYgKGJsb2NrKSB7XG4gICAgYmxvY2sgPSBzdGF0ZS5mbG93TGV2ZWwgPCAwIHx8IHN0YXRlLmZsb3dMZXZlbCA+IGxldmVsO1xuICB9XG5cbiAgY29uc3Qgb2JqZWN0T3JBcnJheSA9IHR5cGUgPT09IFwiW29iamVjdCBPYmplY3RdXCIgfHwgdHlwZSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiO1xuXG4gIGxldCBkdXBsaWNhdGVJbmRleCA9IC0xO1xuICBsZXQgZHVwbGljYXRlID0gZmFsc2U7XG4gIGlmIChvYmplY3RPckFycmF5KSB7XG4gICAgZHVwbGljYXRlSW5kZXggPSBzdGF0ZS5kdXBsaWNhdGVzLmluZGV4T2Yob2JqZWN0KTtcbiAgICBkdXBsaWNhdGUgPSBkdXBsaWNhdGVJbmRleCAhPT0gLTE7XG4gIH1cblxuICBpZiAoXG4gICAgKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09IFwiP1wiKSB8fFxuICAgIGR1cGxpY2F0ZSB8fFxuICAgIChzdGF0ZS5pbmRlbnQgIT09IDIgJiYgbGV2ZWwgPiAwKVxuICApIHtcbiAgICBjb21wYWN0ID0gZmFsc2U7XG4gIH1cblxuICBpZiAoZHVwbGljYXRlICYmIHN0YXRlLnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSkge1xuICAgIHN0YXRlLmR1bXAgPSBgKnJlZl8ke2R1cGxpY2F0ZUluZGV4fWA7XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9iamVjdE9yQXJyYXkgJiYgZHVwbGljYXRlICYmICFzdGF0ZS51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0pIHtcbiAgICAgIHN0YXRlLnVzZWREdXBsaWNhdGVzW2R1cGxpY2F0ZUluZGV4XSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBcIltvYmplY3QgT2JqZWN0XVwiKSB7XG4gICAgICBpZiAoYmxvY2sgJiYgT2JqZWN0LmtleXMoc3RhdGUuZHVtcCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlLCBsZXZlbCwgc3RhdGUuZHVtcCwgY29tcGFjdCk7XG4gICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICBzdGF0ZS5kdW1wID0gYCZyZWZfJHtkdXBsaWNhdGVJbmRleH0ke3N0YXRlLmR1bXB9YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVGbG93TWFwcGluZyhzdGF0ZSwgbGV2ZWwsIHN0YXRlLmR1bXApO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9IGAmcmVmXyR7ZHVwbGljYXRlSW5kZXh9ICR7c3RhdGUuZHVtcH1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIltvYmplY3QgQXJyYXldXCIpIHtcbiAgICAgIGNvbnN0IGFycmF5TGV2ZWwgPSBzdGF0ZS5ub0FycmF5SW5kZW50ICYmIGxldmVsID4gMCA/IGxldmVsIC0gMSA6IGxldmVsO1xuICAgICAgaWYgKGJsb2NrICYmIHN0YXRlLmR1bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHdyaXRlQmxvY2tTZXF1ZW5jZShzdGF0ZSwgYXJyYXlMZXZlbCwgc3RhdGUuZHVtcCwgY29tcGFjdCk7XG4gICAgICAgIGlmIChkdXBsaWNhdGUpIHtcbiAgICAgICAgICBzdGF0ZS5kdW1wID0gYCZyZWZfJHtkdXBsaWNhdGVJbmRleH0ke3N0YXRlLmR1bXB9YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUsIGFycmF5TGV2ZWwsIHN0YXRlLmR1bXApO1xuICAgICAgICBpZiAoZHVwbGljYXRlKSB7XG4gICAgICAgICAgc3RhdGUuZHVtcCA9IGAmcmVmXyR7ZHVwbGljYXRlSW5kZXh9ICR7c3RhdGUuZHVtcH1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcIltvYmplY3QgU3RyaW5nXVwiKSB7XG4gICAgICBpZiAoc3RhdGUudGFnICE9PSBcIj9cIikge1xuICAgICAgICB3cml0ZVNjYWxhcihzdGF0ZSwgc3RhdGUuZHVtcCwgbGV2ZWwsIGlza2V5KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXRlLnNraXBJbnZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgICB0aHJvdyBuZXcgWUFNTEVycm9yKGB1bmFjY2VwdGFibGUga2luZCBvZiBhbiBvYmplY3QgdG8gZHVtcCAke3R5cGV9YCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZS50YWcgIT09IFwiP1wiKSB7XG4gICAgICBzdGF0ZS5kdW1wID0gYCE8JHtzdGF0ZS50YWd9PiAke3N0YXRlLmR1bXB9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaW5zcGVjdE5vZGUoXG4gIG9iamVjdDogQW55LFxuICBvYmplY3RzOiBBbnlbXSxcbiAgZHVwbGljYXRlc0luZGV4ZXM6IG51bWJlcltdLFxuKSB7XG4gIGlmIChvYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IGluZGV4ID0gb2JqZWN0cy5pbmRleE9mKG9iamVjdCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKGR1cGxpY2F0ZXNJbmRleGVzLmluZGV4T2YoaW5kZXgpID09PSAtMSkge1xuICAgICAgICBkdXBsaWNhdGVzSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0cy5wdXNoKG9iamVjdCk7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHggKz0gMSkge1xuICAgICAgICAgIGluc3BlY3ROb2RlKG9iamVjdFtpZHhdLCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgbGV0IGlkeCA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoO1xuICAgICAgICAgIGlkeCA8IGxlbmd0aDtcbiAgICAgICAgICBpZHggKz0gMVxuICAgICAgICApIHtcbiAgICAgICAgICBpbnNwZWN0Tm9kZShvYmplY3Rbb2JqZWN0S2V5TGlzdFtpZHhdXSwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldER1cGxpY2F0ZVJlZmVyZW5jZXMoXG4gIG9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHN0YXRlOiBEdW1wZXJTdGF0ZSxcbikge1xuICBjb25zdCBvYmplY3RzOiBBbnlbXSA9IFtdLFxuICAgIGR1cGxpY2F0ZXNJbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpO1xuXG4gIGNvbnN0IGxlbmd0aCA9IGR1cGxpY2F0ZXNJbmRleGVzLmxlbmd0aDtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIHN0YXRlLmR1cGxpY2F0ZXMucHVzaChvYmplY3RzW2R1cGxpY2F0ZXNJbmRleGVzW2luZGV4XV0pO1xuICB9XG4gIHN0YXRlLnVzZWREdXBsaWNhdGVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGR1bXAoaW5wdXQ6IEFueSwgb3B0aW9ucz86IER1bXBlclN0YXRlT3B0aW9ucyk6IHN0cmluZyB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIGNvbnN0IHN0YXRlID0gbmV3IER1bXBlclN0YXRlKG9wdGlvbnMpO1xuXG4gIGlmICghc3RhdGUubm9SZWZzKSBnZXREdXBsaWNhdGVSZWZlcmVuY2VzKGlucHV0LCBzdGF0ZSk7XG5cbiAgaWYgKHdyaXRlTm9kZShzdGF0ZSwgMCwgaW5wdXQsIHRydWUsIHRydWUpKSByZXR1cm4gYCR7c3RhdGUuZHVtcH1cXG5gO1xuXG4gIHJldHVybiBcIlwiO1xufVxuIiwgIi8vIFBvcnRlZCBmcm9tIGpzLXlhbWwgdjMuMTMuMTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvanMteWFtbC9jb21taXQvNjY1YWFkZGE0MjM0OWRjYWU4NjlmMTIwNDBkOWIxMGVmMThkMTJkYVxuLy8gQ29weXJpZ2h0IDIwMTEtMjAxNSBieSBWaXRhbHkgUHV6cmluLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7IGR1bXAgfSBmcm9tIFwiLi9kdW1wZXIvZHVtcGVyLnRzXCI7XG5pbXBvcnQgdHlwZSB7IER1bXBlclN0YXRlT3B0aW9ucyB9IGZyb20gXCIuL2R1bXBlci9kdW1wZXJfc3RhdGUudHNcIjtcblxuZXhwb3J0IHR5cGUgRHVtcE9wdGlvbnMgPSBEdW1wZXJTdGF0ZU9wdGlvbnM7XG5cbi8qKlxuICogU2VyaWFsaXplcyBgb2JqZWN0YCBhcyBhIFlBTUwgZG9jdW1lbnQuXG4gKlxuICogWW91IGNhbiBkaXNhYmxlIGV4Y2VwdGlvbnMgYnkgc2V0dGluZyB0aGUgc2tpcEludmFsaWQgb3B0aW9uIHRvIHRydWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG9wdGlvbnM/OiBEdW1wT3B0aW9ucyxcbik6IHN0cmluZyB7XG4gIHJldHVybiBkdW1wKG9iaiwgb3B0aW9ucyk7XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuZXhwb3J0IHR5cGUgT1NUeXBlID0gXCJ3aW5kb3dzXCIgfCBcImxpbnV4XCIgfCBcImRhcndpblwiIHwgXCJmcmVlYnNkXCI7XG5cbmV4cG9ydCBjb25zdCBvc1R5cGU6IE9TVHlwZSA9ICgoKSA9PiB7XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IHsgRGVubyB9ID0gZ2xvYmFsVGhpcyBhcyBhbnk7XG4gIGlmICh0eXBlb2YgRGVubz8uYnVpbGQ/Lm9zID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIERlbm8uYnVpbGQub3M7XG4gIH1cblxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBjb25zdCB7IG5hdmlnYXRvciB9ID0gZ2xvYmFsVGhpcyBhcyBhbnk7XG4gIGlmIChuYXZpZ2F0b3I/LmFwcFZlcnNpb24/LmluY2x1ZGVzPy4oXCJXaW5cIikpIHtcbiAgICByZXR1cm4gXCJ3aW5kb3dzXCI7XG4gIH1cblxuICByZXR1cm4gXCJsaW51eFwiO1xufSkoKTtcblxuZXhwb3J0IGNvbnN0IGlzV2luZG93cyA9IG9zVHlwZSA9PT0gXCJ3aW5kb3dzXCI7XG5leHBvcnQgY29uc3QgaXNMaW51eCA9IG9zVHlwZSA9PT0gXCJsaW51eFwiO1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgdGhlIEJyb3dzZXJpZnkgYXV0aG9ycy4gTUlUIExpY2Vuc2UuXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkvXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgRm9ybWF0SW5wdXRQYXRoT2JqZWN0LCBQYXJzZWRQYXRoIH0gZnJvbSBcIi4vX2ludGVyZmFjZS50c1wiO1xuaW1wb3J0IHtcbiAgQ0hBUl9CQUNLV0FSRF9TTEFTSCxcbiAgQ0hBUl9DT0xPTixcbiAgQ0hBUl9ET1QsXG4gIENIQVJfUVVFU1RJT05fTUFSSyxcbn0gZnJvbSBcIi4vX2NvbnN0YW50cy50c1wiO1xuXG5pbXBvcnQge1xuICBfZm9ybWF0LFxuICBhc3NlcnRQYXRoLFxuICBlbmNvZGVXaGl0ZXNwYWNlLFxuICBpc1BhdGhTZXBhcmF0b3IsXG4gIGlzV2luZG93c0RldmljZVJvb3QsXG4gIG5vcm1hbGl6ZVN0cmluZyxcbn0gZnJvbSBcIi4vX3V0aWwudHNcIjtcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gXCIuLi9fdXRpbC9hc3NlcnQudHNcIjtcblxuZXhwb3J0IGNvbnN0IHNlcCA9IFwiXFxcXFwiO1xuZXhwb3J0IGNvbnN0IGRlbGltaXRlciA9IFwiO1wiO1xuXG4vKipcbiAqIFJlc29sdmVzIHBhdGggc2VnbWVudHMgaW50byBhIGBwYXRoYFxuICogQHBhcmFtIHBhdGhTZWdtZW50cyB0byBwcm9jZXNzIHRvIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUoLi4ucGF0aFNlZ21lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGxldCByZXNvbHZlZERldmljZSA9IFwiXCI7XG4gIGxldCByZXNvbHZlZFRhaWwgPSBcIlwiO1xuICBsZXQgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSBwYXRoU2VnbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMTsgaS0tKSB7XG4gICAgbGV0IHBhdGg6IHN0cmluZztcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHsgRGVubyB9ID0gZ2xvYmFsVGhpcyBhcyBhbnk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgcGF0aCA9IHBhdGhTZWdtZW50c1tpXTtcbiAgICB9IGVsc2UgaWYgKCFyZXNvbHZlZERldmljZSkge1xuICAgICAgaWYgKHR5cGVvZiBEZW5vPy5jd2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVzb2x2ZWQgYSBkcml2ZS1sZXR0ZXItbGVzcyBwYXRoIHdpdGhvdXQgYSBDV0QuXCIpO1xuICAgICAgfVxuICAgICAgcGF0aCA9IERlbm8uY3dkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIERlbm8/LmVudj8uZ2V0ICE9PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIERlbm8/LmN3ZCAhPT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlc29sdmVkIGEgcmVsYXRpdmUgcGF0aCB3aXRob3V0IGEgQ1dELlwiKTtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBEZW5vLmN3ZCgpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhhdCBhIGN3ZCB3YXMgZm91bmQgYW5kIHRoYXQgaXQgYWN0dWFsbHkgcG9pbnRzXG4gICAgICAvLyB0byBvdXIgZHJpdmUuIElmIG5vdCwgZGVmYXVsdCB0byB0aGUgZHJpdmUncyByb290LlxuICAgICAgaWYgKFxuICAgICAgICBwYXRoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgcGF0aC5zbGljZSgwLCAzKS50b0xvd2VyQ2FzZSgpICE9PSBgJHtyZXNvbHZlZERldmljZS50b0xvd2VyQ2FzZSgpfVxcXFxgXG4gICAgICApIHtcbiAgICAgICAgcGF0aCA9IGAke3Jlc29sdmVkRGV2aWNlfVxcXFxgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcblxuICAgIC8vIFNraXAgZW1wdHkgZW50cmllc1xuICAgIGlmIChsZW4gPT09IDApIGNvbnRpbnVlO1xuXG4gICAgbGV0IHJvb3RFbmQgPSAwO1xuICAgIGxldCBkZXZpY2UgPSBcIlwiO1xuICAgIGxldCBpc0Fic29sdXRlID0gZmFsc2U7XG4gICAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcblxuICAgIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgICBpZiAobGVuID4gMSkge1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICAgIC8vIElmIHdlIHN0YXJ0ZWQgd2l0aCBhIHNlcGFyYXRvciwgd2Uga25vdyB3ZSBhdCBsZWFzdCBoYXZlIGFuXG4gICAgICAgIC8vIGFic29sdXRlIHBhdGggb2Ygc29tZSBraW5kIChVTkMgb3Igb3RoZXJ3aXNlKVxuICAgICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcblxuICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdCgxKSkpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgICBsZXQgaiA9IDI7XG4gICAgICAgICAgbGV0IGxhc3QgPSBqO1xuICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RQYXJ0ID0gcGF0aC5zbGljZShsYXN0LCBqKTtcbiAgICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgICBsYXN0ID0gajtcbiAgICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBwYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaiA9PT0gbGVuKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyByb290IG9ubHlcbiAgICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXFxcXFwke2ZpcnN0UGFydH1cXFxcJHtwYXRoLnNsaWNlKGxhc3QpfWA7XG4gICAgICAgICAgICAgICAgcm9vdEVuZCA9IGo7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCB3aXRoIGxlZnRvdmVyc1xuXG4gICAgICAgICAgICAgICAgZGV2aWNlID0gYFxcXFxcXFxcJHtmaXJzdFBhcnR9XFxcXCR7cGF0aC5zbGljZShsYXN0LCBqKX1gO1xuICAgICAgICAgICAgICAgIHJvb3RFbmQgPSBqO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RFbmQgPSAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzV2luZG93c0RldmljZVJvb3QoY29kZSkpIHtcbiAgICAgICAgLy8gUG9zc2libGUgZGV2aWNlIHJvb3RcblxuICAgICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgICAgZGV2aWNlID0gcGF0aC5zbGljZSgwLCAyKTtcbiAgICAgICAgICByb290RW5kID0gMjtcbiAgICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMikpKSB7XG4gICAgICAgICAgICAgIC8vIFRyZWF0IHNlcGFyYXRvciBmb2xsb3dpbmcgZHJpdmUgbmFtZSBhcyBhbiBhYnNvbHV0ZSBwYXRoXG4gICAgICAgICAgICAgIC8vIGluZGljYXRvclxuICAgICAgICAgICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcm9vdEVuZCA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAgIC8vIGBwYXRoYCBjb250YWlucyBqdXN0IGEgcGF0aCBzZXBhcmF0b3JcbiAgICAgIHJvb3RFbmQgPSAxO1xuICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZGV2aWNlLmxlbmd0aCA+IDAgJiZcbiAgICAgIHJlc29sdmVkRGV2aWNlLmxlbmd0aCA+IDAgJiZcbiAgICAgIGRldmljZS50b0xvd2VyQ2FzZSgpICE9PSByZXNvbHZlZERldmljZS50b0xvd2VyQ2FzZSgpXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIHBhdGggcG9pbnRzIHRvIGFub3RoZXIgZGV2aWNlIHNvIGl0IGlzIG5vdCBhcHBsaWNhYmxlXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZWREZXZpY2UubGVuZ3RoID09PSAwICYmIGRldmljZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXNvbHZlZERldmljZSA9IGRldmljZTtcbiAgICB9XG4gICAgaWYgKCFyZXNvbHZlZEFic29sdXRlKSB7XG4gICAgICByZXNvbHZlZFRhaWwgPSBgJHtwYXRoLnNsaWNlKHJvb3RFbmQpfVxcXFwke3Jlc29sdmVkVGFpbH1gO1xuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzQWJzb2x1dGU7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVkQWJzb2x1dGUgJiYgcmVzb2x2ZWREZXZpY2UubGVuZ3RoID4gMCkgYnJlYWs7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCxcbiAgLy8gYnV0IGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpXG4gIC8vIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgdGFpbCBwYXRoXG4gIHJlc29sdmVkVGFpbCA9IG5vcm1hbGl6ZVN0cmluZyhcbiAgICByZXNvbHZlZFRhaWwsXG4gICAgIXJlc29sdmVkQWJzb2x1dGUsXG4gICAgXCJcXFxcXCIsXG4gICAgaXNQYXRoU2VwYXJhdG9yLFxuICApO1xuXG4gIHJldHVybiByZXNvbHZlZERldmljZSArIChyZXNvbHZlZEFic29sdXRlID8gXCJcXFxcXCIgOiBcIlwiKSArIHJlc29sdmVkVGFpbCB8fCBcIi5cIjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgYHBhdGhgXG4gKiBAcGFyYW0gcGF0aCB0byBub3JtYWxpemVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIFwiLlwiO1xuICBsZXQgcm9vdEVuZCA9IDA7XG4gIGxldCBkZXZpY2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGlzQWJzb2x1dGUgPSBmYWxzZTtcbiAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcblxuICAvLyBUcnkgdG8gbWF0Y2ggYSByb290XG4gIGlmIChsZW4gPiAxKSB7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gUG9zc2libGUgVU5DIHJvb3RcblxuICAgICAgLy8gSWYgd2Ugc3RhcnRlZCB3aXRoIGEgc2VwYXJhdG9yLCB3ZSBrbm93IHdlIGF0IGxlYXN0IGhhdmUgYW4gYWJzb2x1dGVcbiAgICAgIC8vIHBhdGggb2Ygc29tZSBraW5kIChVTkMgb3Igb3RoZXJ3aXNlKVxuICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG5cbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgbGV0IGogPSAyO1xuICAgICAgICBsZXQgbGFzdCA9IGo7XG4gICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICBjb25zdCBmaXJzdFBhcnQgPSBwYXRoLnNsaWNlKGxhc3QsIGopO1xuICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIHBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPT09IGxlbikge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgb25seVxuICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgVU5DIHJvb3Qgc2luY2UgdGhlcmVcbiAgICAgICAgICAgICAgLy8gaXMgbm90aGluZyBsZWZ0IHRvIHByb2Nlc3NcblxuICAgICAgICAgICAgICByZXR1cm4gYFxcXFxcXFxcJHtmaXJzdFBhcnR9XFxcXCR7cGF0aC5zbGljZShsYXN0KX1cXFxcYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgd2l0aCBsZWZ0b3ZlcnNcblxuICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXFxcXFwke2ZpcnN0UGFydH1cXFxcJHtwYXRoLnNsaWNlKGxhc3QsIGopfWA7XG4gICAgICAgICAgICAgIHJvb3RFbmQgPSBqO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdEVuZCA9IDE7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIGRldmljZSA9IHBhdGguc2xpY2UoMCwgMik7XG4gICAgICAgIHJvb3RFbmQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkge1xuICAgICAgICAgICAgLy8gVHJlYXQgc2VwYXJhdG9yIGZvbGxvd2luZyBkcml2ZSBuYW1lIGFzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgICAgICAgIC8vIGluZGljYXRvclxuICAgICAgICAgICAgaXNBYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgICAgICByb290RW5kID0gMztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZCB1bm5lY2Vzc2FyeVxuICAgIC8vIHdvcmtcbiAgICByZXR1cm4gXCJcXFxcXCI7XG4gIH1cblxuICBsZXQgdGFpbDogc3RyaW5nO1xuICBpZiAocm9vdEVuZCA8IGxlbikge1xuICAgIHRhaWwgPSBub3JtYWxpemVTdHJpbmcoXG4gICAgICBwYXRoLnNsaWNlKHJvb3RFbmQpLFxuICAgICAgIWlzQWJzb2x1dGUsXG4gICAgICBcIlxcXFxcIixcbiAgICAgIGlzUGF0aFNlcGFyYXRvcixcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRhaWwgPSBcIlwiO1xuICB9XG4gIGlmICh0YWlsLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZSkgdGFpbCA9IFwiLlwiO1xuICBpZiAodGFpbC5sZW5ndGggPiAwICYmIGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQobGVuIC0gMSkpKSB7XG4gICAgdGFpbCArPSBcIlxcXFxcIjtcbiAgfVxuICBpZiAoZGV2aWNlID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaXNBYnNvbHV0ZSkge1xuICAgICAgaWYgKHRhaWwubGVuZ3RoID4gMCkgcmV0dXJuIGBcXFxcJHt0YWlsfWA7XG4gICAgICBlbHNlIHJldHVybiBcIlxcXFxcIjtcbiAgICB9IGVsc2UgaWYgKHRhaWwubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRhaWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0Fic29sdXRlKSB7XG4gICAgaWYgKHRhaWwubGVuZ3RoID4gMCkgcmV0dXJuIGAke2RldmljZX1cXFxcJHt0YWlsfWA7XG4gICAgZWxzZSByZXR1cm4gYCR7ZGV2aWNlfVxcXFxgO1xuICB9IGVsc2UgaWYgKHRhaWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkZXZpY2UgKyB0YWlsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkZXZpY2U7XG4gIH1cbn1cblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHBhdGggaXMgYWJzb2x1dGVcbiAqIEBwYXJhbSBwYXRoIHRvIHZlcmlmeVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgY29uc3QgbGVuID0gcGF0aC5sZW5ndGg7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlKSkge1xuICAgIC8vIFBvc3NpYmxlIGRldmljZSByb290XG5cbiAgICBpZiAobGVuID4gMiAmJiBwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04pIHtcbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBKb2luIGFsbCBnaXZlbiBhIHNlcXVlbmNlIG9mIGBwYXRoc2AsdGhlbiBub3JtYWxpemVzIHRoZSByZXN1bHRpbmcgcGF0aC5cbiAqIEBwYXJhbSBwYXRocyB0byBiZSBqb2luZWQgYW5kIG5vcm1hbGl6ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW4oLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgcGF0aHNDb3VudCA9IHBhdGhzLmxlbmd0aDtcbiAgaWYgKHBhdGhzQ291bnQgPT09IDApIHJldHVybiBcIi5cIjtcblxuICBsZXQgam9pbmVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBmaXJzdFBhcnQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhzQ291bnQ7ICsraSkge1xuICAgIGNvbnN0IHBhdGggPSBwYXRoc1tpXTtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChqb2luZWQgPT09IHVuZGVmaW5lZCkgam9pbmVkID0gZmlyc3RQYXJ0ID0gcGF0aDtcbiAgICAgIGVsc2Ugam9pbmVkICs9IGBcXFxcJHtwYXRofWA7XG4gICAgfVxuICB9XG5cbiAgaWYgKGpvaW5lZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCIuXCI7XG5cbiAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGpvaW5lZCBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCB0d28gc2xhc2hlcywgYmVjYXVzZVxuICAvLyBub3JtYWxpemUoKSB3aWxsIG1pc3Rha2UgaXQgZm9yIGFuIFVOQyBwYXRoIHRoZW4uXG4gIC8vXG4gIC8vIFRoaXMgc3RlcCBpcyBza2lwcGVkIHdoZW4gaXQgaXMgdmVyeSBjbGVhciB0aGF0IHRoZSB1c2VyIGFjdHVhbGx5XG4gIC8vIGludGVuZGVkIHRvIHBvaW50IGF0IGFuIFVOQyBwYXRoLiBUaGlzIGlzIGFzc3VtZWQgd2hlbiB0aGUgZmlyc3RcbiAgLy8gbm9uLWVtcHR5IHN0cmluZyBhcmd1bWVudHMgc3RhcnRzIHdpdGggZXhhY3RseSB0d28gc2xhc2hlcyBmb2xsb3dlZCBieVxuICAvLyBhdCBsZWFzdCBvbmUgbW9yZSBub24tc2xhc2ggY2hhcmFjdGVyLlxuICAvL1xuICAvLyBOb3RlIHRoYXQgZm9yIG5vcm1hbGl6ZSgpIHRvIHRyZWF0IGEgcGF0aCBhcyBhbiBVTkMgcGF0aCBpdCBuZWVkcyB0b1xuICAvLyBoYXZlIGF0IGxlYXN0IDIgY29tcG9uZW50cywgc28gd2UgZG9uJ3QgZmlsdGVyIGZvciB0aGF0IGhlcmUuXG4gIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdXNlciBjYW4gdXNlIGpvaW4gdG8gY29uc3RydWN0IFVOQyBwYXRocyBmcm9tXG4gIC8vIGEgc2VydmVyIG5hbWUgYW5kIGEgc2hhcmUgbmFtZTsgZm9yIGV4YW1wbGU6XG4gIC8vICAgcGF0aC5qb2luKCcvL3NlcnZlcicsICdzaGFyZScpIC0+ICdcXFxcXFxcXHNlcnZlclxcXFxzaGFyZVxcXFwnKVxuICBsZXQgbmVlZHNSZXBsYWNlID0gdHJ1ZTtcbiAgbGV0IHNsYXNoQ291bnQgPSAwO1xuICBhc3NlcnQoZmlyc3RQYXJ0ICE9IG51bGwpO1xuICBpZiAoaXNQYXRoU2VwYXJhdG9yKGZpcnN0UGFydC5jaGFyQ29kZUF0KDApKSkge1xuICAgICsrc2xhc2hDb3VudDtcbiAgICBjb25zdCBmaXJzdExlbiA9IGZpcnN0UGFydC5sZW5ndGg7XG4gICAgaWYgKGZpcnN0TGVuID4gMSkge1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihmaXJzdFBhcnQuY2hhckNvZGVBdCgxKSkpIHtcbiAgICAgICAgKytzbGFzaENvdW50O1xuICAgICAgICBpZiAoZmlyc3RMZW4gPiAyKSB7XG4gICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihmaXJzdFBhcnQuY2hhckNvZGVBdCgyKSkpICsrc2xhc2hDb3VudDtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcGF0aCBpbiB0aGUgZmlyc3QgcGFydFxuICAgICAgICAgICAgbmVlZHNSZXBsYWNlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChuZWVkc1JlcGxhY2UpIHtcbiAgICAvLyBGaW5kIGFueSBtb3JlIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2UgbmVlZCB0byByZXBsYWNlXG4gICAgZm9yICg7IHNsYXNoQ291bnQgPCBqb2luZWQubGVuZ3RoOyArK3NsYXNoQ291bnQpIHtcbiAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKGpvaW5lZC5jaGFyQ29kZUF0KHNsYXNoQ291bnQpKSkgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUmVwbGFjZSB0aGUgc2xhc2hlcyBpZiBuZWVkZWRcbiAgICBpZiAoc2xhc2hDb3VudCA+PSAyKSBqb2luZWQgPSBgXFxcXCR7am9pbmVkLnNsaWNlKHNsYXNoQ291bnQpfWA7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplKGpvaW5lZCk7XG59XG5cbi8qKlxuICogSXQgd2lsbCBzb2x2ZSB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIGBmcm9tYCB0byBgdG9gLCBmb3IgaW5zdGFuY2U6XG4gKiAgZnJvbSA9ICdDOlxcXFxvcmFuZGVhXFxcXHRlc3RcXFxcYWFhJ1xuICogIHRvID0gJ0M6XFxcXG9yYW5kZWFcXFxcaW1wbFxcXFxiYmInXG4gKiBUaGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbiBzaG91bGQgYmU6ICcuLlxcXFwuLlxcXFxpbXBsXFxcXGJiYidcbiAqIEBwYXJhbSBmcm9tIHJlbGF0aXZlIHBhdGhcbiAqIEBwYXJhbSB0byByZWxhdGl2ZSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKGZyb20pO1xuICBhc3NlcnRQYXRoKHRvKTtcblxuICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiBcIlwiO1xuXG4gIGNvbnN0IGZyb21PcmlnID0gcmVzb2x2ZShmcm9tKTtcbiAgY29uc3QgdG9PcmlnID0gcmVzb2x2ZSh0byk7XG5cbiAgaWYgKGZyb21PcmlnID09PSB0b09yaWcpIHJldHVybiBcIlwiO1xuXG4gIGZyb20gPSBmcm9tT3JpZy50b0xvd2VyQ2FzZSgpO1xuICB0byA9IHRvT3JpZy50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIFwiXCI7XG5cbiAgLy8gVHJpbSBhbnkgbGVhZGluZyBiYWNrc2xhc2hlc1xuICBsZXQgZnJvbVN0YXJ0ID0gMDtcbiAgbGV0IGZyb21FbmQgPSBmcm9tLmxlbmd0aDtcbiAgZm9yICg7IGZyb21TdGFydCA8IGZyb21FbmQ7ICsrZnJvbVN0YXJ0KSB7XG4gICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICAvLyBUcmltIHRyYWlsaW5nIGJhY2tzbGFzaGVzIChhcHBsaWNhYmxlIHRvIFVOQyBwYXRocyBvbmx5KVxuICBmb3IgKDsgZnJvbUVuZCAtIDEgPiBmcm9tU3RhcnQ7IC0tZnJvbUVuZCkge1xuICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbUVuZCAtIDEpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICBjb25zdCBmcm9tTGVuID0gZnJvbUVuZCAtIGZyb21TdGFydDtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCB0b1N0YXJ0ID0gMDtcbiAgbGV0IHRvRW5kID0gdG8ubGVuZ3RoO1xuICBmb3IgKDsgdG9TdGFydCA8IHRvRW5kOyArK3RvU3RhcnQpIHtcbiAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSAhPT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkgYnJlYWs7XG4gIH1cbiAgLy8gVHJpbSB0cmFpbGluZyBiYWNrc2xhc2hlcyAoYXBwbGljYWJsZSB0byBVTkMgcGF0aHMgb25seSlcbiAgZm9yICg7IHRvRW5kIC0gMSA+IHRvU3RhcnQ7IC0tdG9FbmQpIHtcbiAgICBpZiAodG8uY2hhckNvZGVBdCh0b0VuZCAtIDEpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICBjb25zdCB0b0xlbiA9IHRvRW5kIC0gdG9TdGFydDtcblxuICAvLyBDb21wYXJlIHBhdGhzIHRvIGZpbmQgdGhlIGxvbmdlc3QgY29tbW9uIHBhdGggZnJvbSByb290XG4gIGNvbnN0IGxlbmd0aCA9IGZyb21MZW4gPCB0b0xlbiA/IGZyb21MZW4gOiB0b0xlbjtcbiAgbGV0IGxhc3RDb21tb25TZXAgPSAtMTtcbiAgbGV0IGkgPSAwO1xuICBmb3IgKDsgaSA8PSBsZW5ndGg7ICsraSkge1xuICAgIGlmIChpID09PSBsZW5ndGgpIHtcbiAgICAgIGlmICh0b0xlbiA+IGxlbmd0aCkge1xuICAgICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYHRvYC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nQzpcXFxcZm9vXFxcXGJhcic7IHRvPSdDOlxcXFxmb29cXFxcYmFyXFxcXGJheidcbiAgICAgICAgICByZXR1cm4gdG9PcmlnLnNsaWNlKHRvU3RhcnQgKyBpICsgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMikge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgZGV2aWNlIHJvb3QuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209J0M6XFxcXCc7IHRvPSdDOlxcXFxmb28nXG4gICAgICAgICAgcmV0dXJuIHRvT3JpZy5zbGljZSh0b1N0YXJ0ICsgaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmcm9tTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgdG9gIGlzIHRoZSBleGFjdCBiYXNlIHBhdGggZm9yIGBmcm9tYC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nQzpcXFxcZm9vXFxcXGJhcic7IHRvPSdDOlxcXFxmb28nXG4gICAgICAgICAgbGFzdENvbW1vblNlcCA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMikge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGRldmljZSByb290LlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPSdDOlxcXFxmb29cXFxcYmFyJzsgdG89J0M6XFxcXCdcbiAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGZyb21Db2RlID0gZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpO1xuICAgIGNvbnN0IHRvQ29kZSA9IHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpO1xuICAgIGlmIChmcm9tQ29kZSAhPT0gdG9Db2RlKSBicmVhaztcbiAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkgbGFzdENvbW1vblNlcCA9IGk7XG4gIH1cblxuICAvLyBXZSBmb3VuZCBhIG1pc21hdGNoIGJlZm9yZSB0aGUgZmlyc3QgY29tbW9uIHBhdGggc2VwYXJhdG9yIHdhcyBzZWVuLCBzb1xuICAvLyByZXR1cm4gdGhlIG9yaWdpbmFsIGB0b2AuXG4gIGlmIChpICE9PSBsZW5ndGggJiYgbGFzdENvbW1vblNlcCA9PT0gLTEpIHtcbiAgICByZXR1cm4gdG9PcmlnO1xuICB9XG5cbiAgbGV0IG91dCA9IFwiXCI7XG4gIGlmIChsYXN0Q29tbW9uU2VwID09PSAtMSkgbGFzdENvbW1vblNlcCA9IDA7XG4gIC8vIEdlbmVyYXRlIHRoZSByZWxhdGl2ZSBwYXRoIGJhc2VkIG9uIHRoZSBwYXRoIGRpZmZlcmVuY2UgYmV0d2VlbiBgdG9gIGFuZFxuICAvLyBgZnJvbWBcbiAgZm9yIChpID0gZnJvbVN0YXJ0ICsgbGFzdENvbW1vblNlcCArIDE7IGkgPD0gZnJvbUVuZDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGZyb21FbmQgfHwgZnJvbS5jaGFyQ29kZUF0KGkpID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICBpZiAob3V0Lmxlbmd0aCA9PT0gMCkgb3V0ICs9IFwiLi5cIjtcbiAgICAgIGVsc2Ugb3V0ICs9IFwiXFxcXC4uXCI7XG4gICAgfVxuICB9XG5cbiAgLy8gTGFzdGx5LCBhcHBlbmQgdGhlIHJlc3Qgb2YgdGhlIGRlc3RpbmF0aW9uIChgdG9gKSBwYXRoIHRoYXQgY29tZXMgYWZ0ZXJcbiAgLy8gdGhlIGNvbW1vbiBwYXRoIHBhcnRzXG4gIGlmIChvdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBvdXQgKyB0b09yaWcuc2xpY2UodG9TdGFydCArIGxhc3RDb21tb25TZXAsIHRvRW5kKTtcbiAgfSBlbHNlIHtcbiAgICB0b1N0YXJ0ICs9IGxhc3RDb21tb25TZXA7XG4gICAgaWYgKHRvT3JpZy5jaGFyQ29kZUF0KHRvU3RhcnQpID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSArK3RvU3RhcnQ7XG4gICAgcmV0dXJuIHRvT3JpZy5zbGljZSh0b1N0YXJ0LCB0b0VuZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBwYXRoIHRvIGEgbmFtZXNwYWNlIHBhdGhcbiAqIEBwYXJhbSBwYXRoIHRvIHJlc29sdmUgdG8gbmFtZXNwYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hbWVzcGFjZWRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIE5vdGU6IHRoaXMgd2lsbCAqcHJvYmFibHkqIHRocm93IHNvbWV3aGVyZS5cbiAgaWYgKHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiKSByZXR1cm4gcGF0aDtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcblxuICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlKHBhdGgpO1xuXG4gIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID49IDMpIHtcbiAgICBpZiAocmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIC8vIFBvc3NpYmxlIFVOQyByb290XG5cbiAgICAgIGlmIChyZXNvbHZlZFBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICBjb25zdCBjb2RlID0gcmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMik7XG4gICAgICAgIGlmIChjb2RlICE9PSBDSEFSX1FVRVNUSU9OX01BUksgJiYgY29kZSAhPT0gQ0hBUl9ET1QpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIG5vbi1sb25nIFVOQyByb290LCBjb252ZXJ0IHRoZSBwYXRoIHRvIGEgbG9uZyBVTkMgcGF0aFxuICAgICAgICAgIHJldHVybiBgXFxcXFxcXFw/XFxcXFVOQ1xcXFwke3Jlc29sdmVkUGF0aC5zbGljZSgyKX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgLy8gUG9zc2libGUgZGV2aWNlIHJvb3RcblxuICAgICAgaWYgKFxuICAgICAgICByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTiAmJlxuICAgICAgICByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgyKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSFxuICAgICAgKSB7XG4gICAgICAgIC8vIE1hdGNoZWQgZGV2aWNlIHJvb3QsIGNvbnZlcnQgdGhlIHBhdGggdG8gYSBsb25nIFVOQyBwYXRoXG4gICAgICAgIHJldHVybiBgXFxcXFxcXFw/XFxcXCR7cmVzb2x2ZWRQYXRofWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBkaXJlY3RvcnkgcGF0aCBvZiBhIGBwYXRoYC5cbiAqIEBwYXJhbSBwYXRoIHRvIGRldGVybWluZSB0aGUgZGlyZWN0b3J5IHBhdGggZm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG4gIGNvbnN0IGxlbiA9IHBhdGgubGVuZ3RoO1xuICBpZiAobGVuID09PSAwKSByZXR1cm4gXCIuXCI7XG4gIGxldCByb290RW5kID0gLTE7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuXG4gIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICByb290RW5kID0gb2Zmc2V0ID0gMTtcblxuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMSkpKSB7XG4gICAgICAgIC8vIE1hdGNoZWQgZG91YmxlIHBhdGggc2VwYXJhdG9yIGF0IGJlZ2lubmluZ1xuICAgICAgICBsZXQgaiA9IDI7XG4gICAgICAgIGxldCBsYXN0ID0gajtcbiAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIHBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPT09IGxlbikge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgb25seVxuICAgICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCB3aXRoIGxlZnRvdmVyc1xuXG4gICAgICAgICAgICAgIC8vIE9mZnNldCBieSAxIHRvIGluY2x1ZGUgdGhlIHNlcGFyYXRvciBhZnRlciB0aGUgVU5DIHJvb3QgdG9cbiAgICAgICAgICAgICAgLy8gdHJlYXQgaXQgYXMgYSBcIm5vcm1hbCByb290XCIgb24gdG9wIG9mIGEgKFVOQykgcm9vdFxuICAgICAgICAgICAgICByb290RW5kID0gb2Zmc2V0ID0gaiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHJvb3RFbmQgPSBvZmZzZXQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkgcm9vdEVuZCA9IG9mZnNldCA9IDM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSBsZW4gLSAxOyBpID49IG9mZnNldDsgLS1pKSB7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBlbmQgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3JcbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbmQgPT09IC0xKSB7XG4gICAgaWYgKHJvb3RFbmQgPT09IC0xKSByZXR1cm4gXCIuXCI7XG4gICAgZWxzZSBlbmQgPSByb290RW5kO1xuICB9XG4gIHJldHVybiBwYXRoLnNsaWNlKDAsIGVuZCk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXN0IHBvcnRpb24gb2YgYSBgcGF0aGAuIFRyYWlsaW5nIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGFyZSBpZ25vcmVkLlxuICogQHBhcmFtIHBhdGggdG8gcHJvY2Vzc1xuICogQHBhcmFtIGV4dCBvZiBwYXRoIGRpcmVjdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFzZW5hbWUocGF0aDogc3RyaW5nLCBleHQgPSBcIlwiKTogc3RyaW5nIHtcbiAgaWYgKGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBleHQgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgbGV0IGk6IG51bWJlcjtcblxuICAvLyBDaGVjayBmb3IgYSBkcml2ZSBsZXR0ZXIgcHJlZml4IHNvIGFzIG5vdCB0byBtaXN0YWtlIHRoZSBmb2xsb3dpbmdcbiAgLy8gcGF0aCBzZXBhcmF0b3IgYXMgYW4gZXh0cmEgc2VwYXJhdG9yIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggdGhhdCBjYW4gYmVcbiAgLy8gZGlzcmVnYXJkZWRcbiAgaWYgKHBhdGgubGVuZ3RoID49IDIpIHtcbiAgICBjb25zdCBkcml2ZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcbiAgICBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChkcml2ZSkpIHtcbiAgICAgIGlmIChwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04pIHN0YXJ0ID0gMjtcbiAgICB9XG4gIH1cblxuICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgZXh0Lmxlbmd0aCA+IDAgJiYgZXh0Lmxlbmd0aCA8PSBwYXRoLmxlbmd0aCkge1xuICAgIGlmIChleHQubGVuZ3RoID09PSBwYXRoLmxlbmd0aCAmJiBleHQgPT09IHBhdGgpIHJldHVybiBcIlwiO1xuICAgIGxldCBleHRJZHggPSBleHQubGVuZ3RoIC0gMTtcbiAgICBsZXQgZmlyc3ROb25TbGFzaEVuZCA9IC0xO1xuICAgIGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSBzdGFydDsgLS1pKSB7XG4gICAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA9PT0gLTEpIHtcbiAgICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgcmVtZW1iZXIgdGhpcyBpbmRleCBpbiBjYXNlXG4gICAgICAgICAgLy8gd2UgbmVlZCBpdCBpZiB0aGUgZXh0ZW5zaW9uIGVuZHMgdXAgbm90IG1hdGNoaW5nXG4gICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgICAgZmlyc3ROb25TbGFzaEVuZCA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRJZHggPj0gMCkge1xuICAgICAgICAgIC8vIFRyeSB0byBtYXRjaCB0aGUgZXhwbGljaXQgZXh0ZW5zaW9uXG4gICAgICAgICAgaWYgKGNvZGUgPT09IGV4dC5jaGFyQ29kZUF0KGV4dElkeCkpIHtcbiAgICAgICAgICAgIGlmICgtLWV4dElkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgZXh0ZW5zaW9uLCBzbyBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXIgcGF0aFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRXh0ZW5zaW9uIGRvZXMgbm90IG1hdGNoLCBzbyBvdXIgcmVzdWx0IGlzIHRoZSBlbnRpcmUgcGF0aFxuICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICBleHRJZHggPSAtMTtcbiAgICAgICAgICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID09PSBlbmQpIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7XG4gICAgZWxzZSBpZiAoZW5kID09PSAtMSkgZW5kID0gcGF0aC5sZW5ndGg7XG4gICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IHN0YXJ0OyAtLWkpIHtcbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAvLyBwYXRoIGNvbXBvbmVudFxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBleHRlbnNpb24gb2YgdGhlIGBwYXRoYCB3aXRoIGxlYWRpbmcgcGVyaW9kLlxuICogQHBhcmFtIHBhdGggd2l0aCBleHRlbnNpb25cbiAqIEByZXR1cm5zIGV4dGVuc2lvbiAoZXguIGZvciBgZmlsZS50c2AgcmV0dXJucyBgLnRzYClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dG5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IHN0YXJ0RG90ID0gLTE7XG4gIGxldCBzdGFydFBhcnQgPSAwO1xuICBsZXQgZW5kID0gLTE7XG4gIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gIC8vIGFmdGVyIGFueSBwYXRoIHNlcGFyYXRvciB3ZSBmaW5kXG4gIGxldCBwcmVEb3RTdGF0ZSA9IDA7XG5cbiAgLy8gQ2hlY2sgZm9yIGEgZHJpdmUgbGV0dGVyIHByZWZpeCBzbyBhcyBub3QgdG8gbWlzdGFrZSB0aGUgZm9sbG93aW5nXG4gIC8vIHBhdGggc2VwYXJhdG9yIGFzIGFuIGV4dHJhIHNlcGFyYXRvciBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoIHRoYXQgY2FuIGJlXG4gIC8vIGRpc3JlZ2FyZGVkXG5cbiAgaWYgKFxuICAgIHBhdGgubGVuZ3RoID49IDIgJiZcbiAgICBwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04gJiZcbiAgICBpc1dpbmRvd3NEZXZpY2VSb290KHBhdGguY2hhckNvZGVBdCgwKSlcbiAgKSB7XG4gICAgc3RhcnQgPSBzdGFydFBhcnQgPSAyO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSBzdGFydDsgLS1pKSB7XG4gICAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICBlbmQgPSBpICsgMTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IENIQVJfRE9UKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpIHN0YXJ0RG90ID0gaTtcbiAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAvLyBoYXZlIGEgZ29vZCBjaGFuY2UgYXQgaGF2aW5nIGEgbm9uLWVtcHR5IGV4dGVuc2lvblxuICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICB9XG4gIH1cblxuICBpZiAoXG4gICAgc3RhcnREb3QgPT09IC0xIHx8XG4gICAgZW5kID09PSAtMSB8fFxuICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZG90XG4gICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSAnLi4nXG4gICAgKHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKVxuICApIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICByZXR1cm4gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHBhdGggZnJvbSBgRm9ybWF0SW5wdXRQYXRoT2JqZWN0YCBvYmplY3QuXG4gKiBAcGFyYW0gcGF0aE9iamVjdCB3aXRoIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdChwYXRoT2JqZWN0OiBGb3JtYXRJbnB1dFBhdGhPYmplY3QpOiBzdHJpbmcge1xuICBpZiAocGF0aE9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2YgcGF0aE9iamVjdCAhPT0gXCJvYmplY3RcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgcGF0aE9iamVjdH1gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIF9mb3JtYXQoXCJcXFxcXCIsIHBhdGhPYmplY3QpO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGBQYXJzZWRQYXRoYCBvYmplY3Qgb2YgdGhlIGBwYXRoYC5cbiAqIEBwYXJhbSBwYXRoIHRvIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHBhdGg6IHN0cmluZyk6IFBhcnNlZFBhdGgge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gIGNvbnN0IHJldDogUGFyc2VkUGF0aCA9IHsgcm9vdDogXCJcIiwgZGlyOiBcIlwiLCBiYXNlOiBcIlwiLCBleHQ6IFwiXCIsIG5hbWU6IFwiXCIgfTtcblxuICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIHJldDtcblxuICBsZXQgcm9vdEVuZCA9IDA7XG4gIGxldCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuXG4gIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICByb290RW5kID0gMTtcbiAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICAvLyBNYXRjaGVkIGRvdWJsZSBwYXRoIHNlcGFyYXRvciBhdCBiZWdpbm5pbmdcbiAgICAgICAgbGV0IGogPSAyO1xuICAgICAgICBsZXQgbGFzdCA9IGo7XG4gICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBwYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgLy8gTWF0Y2hlZCFcbiAgICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqID09PSBsZW4pIHtcbiAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyByb290IG9ubHlcblxuICAgICAgICAgICAgICByb290RW5kID0gajtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gbGFzdCkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgd2l0aCBsZWZ0b3ZlcnNcblxuICAgICAgICAgICAgICByb290RW5kID0gaiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHJvb3RFbmQgPSAyO1xuICAgICAgICBpZiAobGVuID4gMikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDIpKSkge1xuICAgICAgICAgICAgaWYgKGxlbiA9PT0gMykge1xuICAgICAgICAgICAgICAvLyBgcGF0aGAgY29udGFpbnMganVzdCBhIGRyaXZlIHJvb3QsIGV4aXQgZWFybHkgdG8gYXZvaWRcbiAgICAgICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgd29ya1xuICAgICAgICAgICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm9vdEVuZCA9IDM7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGBwYXRoYCBjb250YWlucyBqdXN0IGEgZHJpdmUgcm9vdCwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICAgICAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvciwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgIC8vIHVubmVjZXNzYXJ5IHdvcmtcbiAgICByZXQucm9vdCA9IHJldC5kaXIgPSBwYXRoO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBpZiAocm9vdEVuZCA+IDApIHJldC5yb290ID0gcGF0aC5zbGljZSgwLCByb290RW5kKTtcblxuICBsZXQgc3RhcnREb3QgPSAtMTtcbiAgbGV0IHN0YXJ0UGFydCA9IHJvb3RFbmQ7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGxldCBpID0gcGF0aC5sZW5ndGggLSAxO1xuXG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgbGV0IHByZURvdFN0YXRlID0gMDtcblxuICAvLyBHZXQgbm9uLWRpciBpbmZvXG4gIGZvciAoOyBpID49IHJvb3RFbmQ7IC0taSkge1xuICAgIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7XG4gICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90ID09PSAtMSB8fFxuICAgIGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgaWYgKGVuZCAhPT0gLTEpIHtcbiAgICAgIHJldC5iYXNlID0gcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgc3RhcnREb3QpO1xuICAgIHJldC5iYXNlID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgcmV0LmV4dCA9IHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG4gIH1cblxuICAvLyBJZiB0aGUgZGlyZWN0b3J5IGlzIHRoZSByb290LCB1c2UgdGhlIGVudGlyZSByb290IGFzIHRoZSBgZGlyYCBpbmNsdWRpbmdcbiAgLy8gdGhlIHRyYWlsaW5nIHNsYXNoIGlmIGFueSAoYEM6XFxhYmNgIC0+IGBDOlxcYCkuIE90aGVyd2lzZSwgc3RyaXAgb3V0IHRoZVxuICAvLyB0cmFpbGluZyBzbGFzaCAoYEM6XFxhYmNcXGRlZmAgLT4gYEM6XFxhYmNgKS5cbiAgaWYgKHN0YXJ0UGFydCA+IDAgJiYgc3RhcnRQYXJ0ICE9PSByb290RW5kKSB7XG4gICAgcmV0LmRpciA9IHBhdGguc2xpY2UoMCwgc3RhcnRQYXJ0IC0gMSk7XG4gIH0gZWxzZSByZXQuZGlyID0gcmV0LnJvb3Q7XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGZpbGUgVVJMIHRvIGEgcGF0aCBzdHJpbmcuXG4gKlxuICogYGBgdHNcbiAqICAgICAgaW1wb3J0IHsgZnJvbUZpbGVVcmwgfSBmcm9tIFwiLi93aW4zMi50c1wiO1xuICogICAgICBmcm9tRmlsZVVybChcImZpbGU6Ly8vaG9tZS9mb29cIik7IC8vIFwiXFxcXGhvbWVcXFxcZm9vXCJcbiAqICAgICAgZnJvbUZpbGVVcmwoXCJmaWxlOi8vL0M6L1VzZXJzL2Zvb1wiKTsgLy8gXCJDOlxcXFxVc2Vyc1xcXFxmb29cIlxuICogICAgICBmcm9tRmlsZVVybChcImZpbGU6Ly9sb2NhbGhvc3QvaG9tZS9mb29cIik7IC8vIFwiXFxcXFxcXFxsb2NhbGhvc3RcXFxcaG9tZVxcXFxmb29cIlxuICogYGBgXG4gKiBAcGFyYW0gdXJsIG9mIGEgZmlsZSBVUkxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21GaWxlVXJsKHVybDogc3RyaW5nIHwgVVJMKTogc3RyaW5nIHtcbiAgdXJsID0gdXJsIGluc3RhbmNlb2YgVVJMID8gdXJsIDogbmV3IFVSTCh1cmwpO1xuICBpZiAodXJsLnByb3RvY29sICE9IFwiZmlsZTpcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGEgZmlsZSBVUkwuXCIpO1xuICB9XG4gIGxldCBwYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KFxuICAgIHVybC5wYXRobmFtZS5yZXBsYWNlKC9cXC8vZywgXCJcXFxcXCIpLnJlcGxhY2UoLyUoPyFbMC05QS1GYS1mXXsyfSkvZywgXCIlMjVcIiksXG4gICkucmVwbGFjZSgvXlxcXFwqKFtBLVphLXpdOikoXFxcXHwkKS8sIFwiJDFcXFxcXCIpO1xuICBpZiAodXJsLmhvc3RuYW1lICE9IFwiXCIpIHtcbiAgICAvLyBOb3RlOiBUaGUgYFVSTGAgaW1wbGVtZW50YXRpb24gZ3VhcmFudGVlcyB0aGF0IHRoZSBkcml2ZSBsZXR0ZXIgYW5kXG4gICAgLy8gaG9zdG5hbWUgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gT3RoZXJ3aXNlIGl0IHdvdWxkIG5vdCBoYXZlIGJlZW4gdmFsaWRcbiAgICAvLyB0byBhcHBlbmQgdGhlIGhvc3RuYW1lIGFuZCBwYXRoIGxpa2UgdGhpcy5cbiAgICBwYXRoID0gYFxcXFxcXFxcJHt1cmwuaG9zdG5hbWV9JHtwYXRofWA7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBwYXRoIHN0cmluZyB0byBhIGZpbGUgVVJMLlxuICpcbiAqIGBgYHRzXG4gKiAgICAgIGltcG9ydCB7IHRvRmlsZVVybCB9IGZyb20gXCIuL3dpbjMyLnRzXCI7XG4gKiAgICAgIHRvRmlsZVVybChcIlxcXFxob21lXFxcXGZvb1wiKTsgLy8gbmV3IFVSTChcImZpbGU6Ly8vaG9tZS9mb29cIilcbiAqICAgICAgdG9GaWxlVXJsKFwiQzpcXFxcVXNlcnNcXFxcZm9vXCIpOyAvLyBuZXcgVVJMKFwiZmlsZTovLy9DOi9Vc2Vycy9mb29cIilcbiAqICAgICAgdG9GaWxlVXJsKFwiXFxcXFxcXFwxMjcuMC4wLjFcXFxcaG9tZVxcXFxmb29cIik7IC8vIG5ldyBVUkwoXCJmaWxlOi8vMTI3LjAuMC4xL2hvbWUvZm9vXCIpXG4gKiBgYGBcbiAqIEBwYXJhbSBwYXRoIHRvIGNvbnZlcnQgdG8gZmlsZSBVUkxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRmlsZVVybChwYXRoOiBzdHJpbmcpOiBVUkwge1xuICBpZiAoIWlzQWJzb2x1dGUocGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLlwiKTtcbiAgfVxuICBjb25zdCBbLCBob3N0bmFtZSwgcGF0aG5hbWVdID0gcGF0aC5tYXRjaChcbiAgICAvXig/OlsvXFxcXF17Mn0oW14vXFxcXF0rKSg/PVsvXFxcXF0oPzpbXi9cXFxcXXwkKSkpPyguKikvLFxuICApITtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChcImZpbGU6Ly8vXCIpO1xuICB1cmwucGF0aG5hbWUgPSBlbmNvZGVXaGl0ZXNwYWNlKHBhdGhuYW1lLnJlcGxhY2UoLyUvZywgXCIlMjVcIikpO1xuICBpZiAoaG9zdG5hbWUgIT0gbnVsbCAmJiBob3N0bmFtZSAhPSBcImxvY2FsaG9zdFwiKSB7XG4gICAgdXJsLmhvc3RuYW1lID0gaG9zdG5hbWU7XG4gICAgaWYgKCF1cmwuaG9zdG5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGhvc3RuYW1lLlwiKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IHRoZSBCcm93c2VyaWZ5IGF1dGhvcnMuIE1JVCBMaWNlbnNlLlxuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcGF0aC1icm93c2VyaWZ5L1xuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vLyBBbHBoYWJldCBjaGFycy5cbmV4cG9ydCBjb25zdCBDSEFSX1VQUEVSQ0FTRV9BID0gNjU7IC8qIEEgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xPV0VSQ0FTRV9BID0gOTc7IC8qIGEgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1VQUEVSQ0FTRV9aID0gOTA7IC8qIFogKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xPV0VSQ0FTRV9aID0gMTIyOyAvKiB6ICovXG5cbi8vIE5vbi1hbHBoYWJldGljIGNoYXJzLlxuZXhwb3J0IGNvbnN0IENIQVJfRE9UID0gNDY7IC8qIC4gKi9cbmV4cG9ydCBjb25zdCBDSEFSX0ZPUldBUkRfU0xBU0ggPSA0NzsgLyogLyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQkFDS1dBUkRfU0xBU0ggPSA5MjsgLyogXFwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1ZFUlRJQ0FMX0xJTkUgPSAxMjQ7IC8qIHwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0NPTE9OID0gNTg7IC8qIDogKi9cbmV4cG9ydCBjb25zdCBDSEFSX1FVRVNUSU9OX01BUksgPSA2MzsgLyogPyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfVU5ERVJTQ09SRSA9IDk1OyAvKiBfICovXG5leHBvcnQgY29uc3QgQ0hBUl9MSU5FX0ZFRUQgPSAxMDsgLyogXFxuICovXG5leHBvcnQgY29uc3QgQ0hBUl9DQVJSSUFHRV9SRVRVUk4gPSAxMzsgLyogXFxyICovXG5leHBvcnQgY29uc3QgQ0hBUl9UQUIgPSA5OyAvKiBcXHQgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0ZPUk1fRkVFRCA9IDEyOyAvKiBcXGYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0VYQ0xBTUFUSU9OX01BUksgPSAzMzsgLyogISAqL1xuZXhwb3J0IGNvbnN0IENIQVJfSEFTSCA9IDM1OyAvKiAjICovXG5leHBvcnQgY29uc3QgQ0hBUl9TUEFDRSA9IDMyOyAvKiAgICovXG5leHBvcnQgY29uc3QgQ0hBUl9OT19CUkVBS19TUEFDRSA9IDE2MDsgLyogXFx1MDBBMCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfWkVST19XSURUSF9OT0JSRUFLX1NQQUNFID0gNjUyNzk7IC8qIFxcdUZFRkYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgPSA5MTsgLyogWyAqL1xuZXhwb3J0IGNvbnN0IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgPSA5MzsgLyogXSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTEVGVF9BTkdMRV9CUkFDS0VUID0gNjA7IC8qIDwgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1JJR0hUX0FOR0xFX0JSQUNLRVQgPSA2MjsgLyogPiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUID0gMTIzOyAvKiB7ICovXG5leHBvcnQgY29uc3QgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUID0gMTI1OyAvKiB9ICovXG5leHBvcnQgY29uc3QgQ0hBUl9IWVBIRU5fTUlOVVMgPSA0NTsgLyogLSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfUExVUyA9IDQzOyAvKiArICovXG5leHBvcnQgY29uc3QgQ0hBUl9ET1VCTEVfUVVPVEUgPSAzNDsgLyogXCIgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1NJTkdMRV9RVU9URSA9IDM5OyAvKiAnICovXG5leHBvcnQgY29uc3QgQ0hBUl9QRVJDRU5UID0gMzc7IC8qICUgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1NFTUlDT0xPTiA9IDU5OyAvKiA7ICovXG5leHBvcnQgY29uc3QgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVCA9IDk0OyAvKiBeICovXG5leHBvcnQgY29uc3QgQ0hBUl9HUkFWRV9BQ0NFTlQgPSA5NjsgLyogYCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQVQgPSA2NDsgLyogQCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQU1QRVJTQU5EID0gMzg7IC8qICYgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0VRVUFMID0gNjE7IC8qID0gKi9cblxuLy8gRGlnaXRzXG5leHBvcnQgY29uc3QgQ0hBUl8wID0gNDg7IC8qIDAgKi9cbmV4cG9ydCBjb25zdCBDSEFSXzkgPSA1NzsgLyogOSAqL1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgdGhlIEJyb3dzZXJpZnkgYXV0aG9ycy4gTUlUIExpY2Vuc2UuXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkvXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgRm9ybWF0SW5wdXRQYXRoT2JqZWN0IH0gZnJvbSBcIi4vX2ludGVyZmFjZS50c1wiO1xuaW1wb3J0IHtcbiAgQ0hBUl9CQUNLV0FSRF9TTEFTSCxcbiAgQ0hBUl9ET1QsXG4gIENIQVJfRk9SV0FSRF9TTEFTSCxcbiAgQ0hBUl9MT1dFUkNBU0VfQSxcbiAgQ0hBUl9MT1dFUkNBU0VfWixcbiAgQ0hBUl9VUFBFUkNBU0VfQSxcbiAgQ0hBUl9VUFBFUkNBU0VfWixcbn0gZnJvbSBcIi4vX2NvbnN0YW50cy50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkocGF0aCl9YCxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Bvc2l4UGF0aFNlcGFyYXRvcihjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvZGUgPT09IENIQVJfRk9SV0FSRF9TTEFTSDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFNlcGFyYXRvcihjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzUG9zaXhQYXRoU2VwYXJhdG9yKGNvZGUpIHx8IGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dpbmRvd3NEZXZpY2VSb290KGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIChjb2RlID49IENIQVJfTE9XRVJDQVNFX0EgJiYgY29kZSA8PSBDSEFSX0xPV0VSQ0FTRV9aKSB8fFxuICAgIChjb2RlID49IENIQVJfVVBQRVJDQVNFX0EgJiYgY29kZSA8PSBDSEFSX1VQUEVSQ0FTRV9aKVxuICApO1xufVxuXG4vLyBSZXNvbHZlcyAuIGFuZCAuLiBlbGVtZW50cyBpbiBhIHBhdGggd2l0aCBkaXJlY3RvcnkgbmFtZXNcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTdHJpbmcoXG4gIHBhdGg6IHN0cmluZyxcbiAgYWxsb3dBYm92ZVJvb3Q6IGJvb2xlYW4sXG4gIHNlcGFyYXRvcjogc3RyaW5nLFxuICBpc1BhdGhTZXBhcmF0b3I6IChjb2RlOiBudW1iZXIpID0+IGJvb2xlYW4sXG4pOiBzdHJpbmcge1xuICBsZXQgcmVzID0gXCJcIjtcbiAgbGV0IGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgbGV0IGxhc3RTbGFzaCA9IC0xO1xuICBsZXQgZG90cyA9IDA7XG4gIGxldCBjb2RlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXRoLmxlbmd0aDsgaSA8PSBsZW47ICsraSkge1xuICAgIGlmIChpIDwgbGVuKSBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGVsc2UgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlISkpIGJyZWFrO1xuICAgIGVsc2UgY29kZSA9IENIQVJfRk9SV0FSRF9TTEFTSDtcblxuICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSEpKSB7XG4gICAgICBpZiAobGFzdFNsYXNoID09PSBpIC0gMSB8fCBkb3RzID09PSAxKSB7XG4gICAgICAgIC8vIE5PT1BcbiAgICAgIH0gZWxzZSBpZiAobGFzdFNsYXNoICE9PSBpIC0gMSAmJiBkb3RzID09PSAyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXMubGVuZ3RoIDwgMiB8fFxuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8XG4gICAgICAgICAgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDEpICE9PSBDSEFSX0RPVCB8fFxuICAgICAgICAgIHJlcy5jaGFyQ29kZUF0KHJlcy5sZW5ndGggLSAyKSAhPT0gQ0hBUl9ET1RcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0U2xhc2hJbmRleCA9IHJlcy5sYXN0SW5kZXhPZihzZXBhcmF0b3IpO1xuICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICByZXMgPSBcIlwiO1xuICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpO1xuICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKHNlcGFyYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPT09IDIgfHwgcmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmVzID0gXCJcIjtcbiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHJlcyArPSBgJHtzZXBhcmF0b3J9Li5gO1xuICAgICAgICAgIGVsc2UgcmVzID0gXCIuLlwiO1xuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKSByZXMgKz0gc2VwYXJhdG9yICsgcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgZWxzZSByZXMgPSBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IGkgLSBsYXN0U2xhc2ggLSAxO1xuICAgICAgfVxuICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgIGRvdHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gQ0hBUl9ET1QgJiYgZG90cyAhPT0gLTEpIHtcbiAgICAgICsrZG90cztcbiAgICB9IGVsc2Uge1xuICAgICAgZG90cyA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2Zvcm1hdChcbiAgc2VwOiBzdHJpbmcsXG4gIHBhdGhPYmplY3Q6IEZvcm1hdElucHV0UGF0aE9iamVjdCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGRpcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gcGF0aE9iamVjdC5kaXIgfHwgcGF0aE9iamVjdC5yb290O1xuICBjb25zdCBiYXNlOiBzdHJpbmcgPSBwYXRoT2JqZWN0LmJhc2UgfHxcbiAgICAocGF0aE9iamVjdC5uYW1lIHx8IFwiXCIpICsgKHBhdGhPYmplY3QuZXh0IHx8IFwiXCIpO1xuICBpZiAoIWRpcikgcmV0dXJuIGJhc2U7XG4gIGlmIChkaXIgPT09IHBhdGhPYmplY3Qucm9vdCkgcmV0dXJuIGRpciArIGJhc2U7XG4gIHJldHVybiBkaXIgKyBzZXAgKyBiYXNlO1xufVxuXG5jb25zdCBXSElURVNQQUNFX0VOQ09ESU5HUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgXCJcXHUwMDA5XCI6IFwiJTA5XCIsXG4gIFwiXFx1MDAwQVwiOiBcIiUwQVwiLFxuICBcIlxcdTAwMEJcIjogXCIlMEJcIixcbiAgXCJcXHUwMDBDXCI6IFwiJTBDXCIsXG4gIFwiXFx1MDAwRFwiOiBcIiUwRFwiLFxuICBcIlxcdTAwMjBcIjogXCIlMjBcIixcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVXaGl0ZXNwYWNlKHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlQWxsKC9bXFxzXS9nLCAoYykgPT4ge1xuICAgIHJldHVybiBXSElURVNQQUNFX0VOQ09ESU5HU1tjXSA/PyBjO1xuICB9KTtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IHRoZSBCcm93c2VyaWZ5IGF1dGhvcnMuIE1JVCBMaWNlbnNlLlxuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcGF0aC1icm93c2VyaWZ5L1xuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgdHlwZSB7IEZvcm1hdElucHV0UGF0aE9iamVjdCwgUGFyc2VkUGF0aCB9IGZyb20gXCIuL19pbnRlcmZhY2UudHNcIjtcbmltcG9ydCB7IENIQVJfRE9ULCBDSEFSX0ZPUldBUkRfU0xBU0ggfSBmcm9tIFwiLi9fY29uc3RhbnRzLnRzXCI7XG5cbmltcG9ydCB7XG4gIF9mb3JtYXQsXG4gIGFzc2VydFBhdGgsXG4gIGVuY29kZVdoaXRlc3BhY2UsXG4gIGlzUG9zaXhQYXRoU2VwYXJhdG9yLFxuICBub3JtYWxpemVTdHJpbmcsXG59IGZyb20gXCIuL191dGlsLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBzZXAgPSBcIi9cIjtcbmV4cG9ydCBjb25zdCBkZWxpbWl0ZXIgPSBcIjpcIjtcblxuLy8gcGF0aC5yZXNvbHZlKFtmcm9tIC4uLl0sIHRvKVxuLyoqXG4gKiBSZXNvbHZlcyBgcGF0aFNlZ21lbnRzYCBpbnRvIGFuIGFic29sdXRlIHBhdGguXG4gKiBAcGFyYW0gcGF0aFNlZ21lbnRzIGFuIGFycmF5IG9mIHBhdGggc2VnbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUoLi4ucGF0aFNlZ21lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGxldCByZXNvbHZlZFBhdGggPSBcIlwiO1xuICBsZXQgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSBwYXRoU2VnbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgbGV0IHBhdGg6IHN0cmluZztcblxuICAgIGlmIChpID49IDApIHBhdGggPSBwYXRoU2VnbWVudHNbaV07XG4gICAgZWxzZSB7XG4gICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgICAgY29uc3QgeyBEZW5vIH0gPSBnbG9iYWxUaGlzIGFzIGFueTtcbiAgICAgIGlmICh0eXBlb2YgRGVubz8uY3dkICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlc29sdmVkIGEgcmVsYXRpdmUgcGF0aCB3aXRob3V0IGEgQ1dELlwiKTtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBEZW5vLmN3ZCgpO1xuICAgIH1cblxuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGVudHJpZXNcbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IGAke3BhdGh9LyR7cmVzb2x2ZWRQYXRofWA7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckNvZGVBdCgwKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xuICB9XG5cbiAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcGF0aCBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gYSBmdWxsIGFic29sdXRlIHBhdGgsIGJ1dFxuICAvLyBoYW5kbGUgcmVsYXRpdmUgcGF0aHMgdG8gYmUgc2FmZSAobWlnaHQgaGFwcGVuIHdoZW4gcHJvY2Vzcy5jd2QoKSBmYWlscylcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplU3RyaW5nKFxuICAgIHJlc29sdmVkUGF0aCxcbiAgICAhcmVzb2x2ZWRBYnNvbHV0ZSxcbiAgICBcIi9cIixcbiAgICBpc1Bvc2l4UGF0aFNlcGFyYXRvcixcbiAgKTtcblxuICBpZiAocmVzb2x2ZWRBYnNvbHV0ZSkge1xuICAgIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID4gMCkgcmV0dXJuIGAvJHtyZXNvbHZlZFBhdGh9YDtcbiAgICBlbHNlIHJldHVybiBcIi9cIjtcbiAgfSBlbHNlIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmVkUGF0aDtcbiAgZWxzZSByZXR1cm4gXCIuXCI7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBgcGF0aGAsIHJlc29sdmluZyBgJy4uJ2AgYW5kIGAnLidgIHNlZ21lbnRzLlxuICogQHBhcmFtIHBhdGggdG8gYmUgbm9ybWFsaXplZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gXCIuXCI7XG5cbiAgY29uc3QgaXNBYnNvbHV0ZSA9IHBhdGguY2hhckNvZGVBdCgwKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xuICBjb25zdCB0cmFpbGluZ1NlcGFyYXRvciA9XG4gICAgcGF0aC5jaGFyQ29kZUF0KHBhdGgubGVuZ3RoIC0gMSkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDtcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcGF0aCA9IG5vcm1hbGl6ZVN0cmluZyhwYXRoLCAhaXNBYnNvbHV0ZSwgXCIvXCIsIGlzUG9zaXhQYXRoU2VwYXJhdG9yKTtcblxuICBpZiAocGF0aC5sZW5ndGggPT09IDAgJiYgIWlzQWJzb2x1dGUpIHBhdGggPSBcIi5cIjtcbiAgaWYgKHBhdGgubGVuZ3RoID4gMCAmJiB0cmFpbGluZ1NlcGFyYXRvcikgcGF0aCArPSBcIi9cIjtcblxuICBpZiAoaXNBYnNvbHV0ZSkgcmV0dXJuIGAvJHtwYXRofWA7XG4gIHJldHVybiBwYXRoO1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHdoZXRoZXIgcHJvdmlkZWQgcGF0aCBpcyBhYnNvbHV0ZVxuICogQHBhcmFtIHBhdGggdG8gYmUgdmVyaWZpZWQgYXMgYWJzb2x1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzb2x1dGUocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA+IDAgJiYgcGF0aC5jaGFyQ29kZUF0KDApID09PSBDSEFSX0ZPUldBUkRfU0xBU0g7XG59XG5cbi8qKlxuICogSm9pbiBhbGwgZ2l2ZW4gYSBzZXF1ZW5jZSBvZiBgcGF0aHNgLHRoZW4gbm9ybWFsaXplcyB0aGUgcmVzdWx0aW5nIHBhdGguXG4gKiBAcGFyYW0gcGF0aHMgdG8gYmUgam9pbmVkIGFuZCBub3JtYWxpemVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqb2luKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChwYXRocy5sZW5ndGggPT09IDApIHJldHVybiBcIi5cIjtcbiAgbGV0IGpvaW5lZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gcGF0aHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBjb25zdCBwYXRoID0gcGF0aHNbaV07XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIWpvaW5lZCkgam9pbmVkID0gcGF0aDtcbiAgICAgIGVsc2Ugam9pbmVkICs9IGAvJHtwYXRofWA7XG4gICAgfVxuICB9XG4gIGlmICgham9pbmVkKSByZXR1cm4gXCIuXCI7XG4gIHJldHVybiBub3JtYWxpemUoam9pbmVkKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHJlbGF0aXZlIHBhdGggZnJvbSBgZnJvbWAgdG8gYHRvYCBiYXNlZCBvbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICogQHBhcmFtIGZyb20gcGF0aCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gKiBAcGFyYW0gdG8gcGF0aCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZShmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKGZyb20pO1xuICBhc3NlcnRQYXRoKHRvKTtcblxuICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiBcIlwiO1xuXG4gIGZyb20gPSByZXNvbHZlKGZyb20pO1xuICB0byA9IHJlc29sdmUodG8pO1xuXG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIFwiXCI7XG5cbiAgLy8gVHJpbSBhbnkgbGVhZGluZyBiYWNrc2xhc2hlc1xuICBsZXQgZnJvbVN0YXJ0ID0gMTtcbiAgY29uc3QgZnJvbUVuZCA9IGZyb20ubGVuZ3RoO1xuICBmb3IgKDsgZnJvbVN0YXJ0IDwgZnJvbUVuZDsgKytmcm9tU3RhcnQpIHtcbiAgICBpZiAoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCkgIT09IENIQVJfRk9SV0FSRF9TTEFTSCkgYnJlYWs7XG4gIH1cbiAgY29uc3QgZnJvbUxlbiA9IGZyb21FbmQgLSBmcm9tU3RhcnQ7XG5cbiAgLy8gVHJpbSBhbnkgbGVhZGluZyBiYWNrc2xhc2hlc1xuICBsZXQgdG9TdGFydCA9IDE7XG4gIGNvbnN0IHRvRW5kID0gdG8ubGVuZ3RoO1xuICBmb3IgKDsgdG9TdGFydCA8IHRvRW5kOyArK3RvU3RhcnQpIHtcbiAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSAhPT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICBjb25zdCB0b0xlbiA9IHRvRW5kIC0gdG9TdGFydDtcblxuICAvLyBDb21wYXJlIHBhdGhzIHRvIGZpbmQgdGhlIGxvbmdlc3QgY29tbW9uIHBhdGggZnJvbSByb290XG4gIGNvbnN0IGxlbmd0aCA9IGZyb21MZW4gPCB0b0xlbiA/IGZyb21MZW4gOiB0b0xlbjtcbiAgbGV0IGxhc3RDb21tb25TZXAgPSAtMTtcbiAgbGV0IGkgPSAwO1xuICBmb3IgKDsgaSA8PSBsZW5ndGg7ICsraSkge1xuICAgIGlmIChpID09PSBsZW5ndGgpIHtcbiAgICAgIGlmICh0b0xlbiA+IGxlbmd0aCkge1xuICAgICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSkgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgZXhhY3QgYmFzZSBwYXRoIGZvciBgdG9gLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vL2Jhcic7IHRvPScvZm9vL2Jhci9iYXonXG4gICAgICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQgKyBpICsgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgcm9vdFxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvJzsgdG89Jy9mb28nXG4gICAgICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQgKyBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmcm9tTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSkgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYGZyb21gLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vL2Jhci9iYXonOyB0bz0nL2Zvby9iYXInXG4gICAgICAgICAgbGFzdENvbW1vblNlcCA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIHJvb3QuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28nOyB0bz0nLydcbiAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGZyb21Db2RlID0gZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpO1xuICAgIGNvbnN0IHRvQ29kZSA9IHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpO1xuICAgIGlmIChmcm9tQ29kZSAhPT0gdG9Db2RlKSBicmVhaztcbiAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSBsYXN0Q29tbW9uU2VwID0gaTtcbiAgfVxuXG4gIGxldCBvdXQgPSBcIlwiO1xuICAvLyBHZW5lcmF0ZSB0aGUgcmVsYXRpdmUgcGF0aCBiYXNlZCBvbiB0aGUgcGF0aCBkaWZmZXJlbmNlIGJldHdlZW4gYHRvYFxuICAvLyBhbmQgYGZyb21gXG4gIGZvciAoaSA9IGZyb21TdGFydCArIGxhc3RDb21tb25TZXAgKyAxOyBpIDw9IGZyb21FbmQ7ICsraSkge1xuICAgIGlmIChpID09PSBmcm9tRW5kIHx8IGZyb20uY2hhckNvZGVBdChpKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICBpZiAob3V0Lmxlbmd0aCA9PT0gMCkgb3V0ICs9IFwiLi5cIjtcbiAgICAgIGVsc2Ugb3V0ICs9IFwiLy4uXCI7XG4gICAgfVxuICB9XG5cbiAgLy8gTGFzdGx5LCBhcHBlbmQgdGhlIHJlc3Qgb2YgdGhlIGRlc3RpbmF0aW9uIChgdG9gKSBwYXRoIHRoYXQgY29tZXMgYWZ0ZXJcbiAgLy8gdGhlIGNvbW1vbiBwYXRoIHBhcnRzXG4gIGlmIChvdXQubGVuZ3RoID4gMCkgcmV0dXJuIG91dCArIHRvLnNsaWNlKHRvU3RhcnQgKyBsYXN0Q29tbW9uU2VwKTtcbiAgZWxzZSB7XG4gICAgdG9TdGFydCArPSBsYXN0Q29tbW9uU2VwO1xuICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQpID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpICsrdG9TdGFydDtcbiAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBwYXRoIHRvIGEgbmFtZXNwYWNlIHBhdGhcbiAqIEBwYXJhbSBwYXRoIHRvIHJlc29sdmUgdG8gbmFtZXNwYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b05hbWVzcGFjZWRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIE5vbi1vcCBvbiBwb3NpeCBzeXN0ZW1zXG4gIHJldHVybiBwYXRoO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZGlyZWN0b3J5IHBhdGggb2YgYSBgcGF0aGAuXG4gKiBAcGFyYW0gcGF0aCB0byBkZXRlcm1pbmUgdGhlIGRpcmVjdG9yeSBwYXRoIGZvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlybmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiBcIi5cIjtcbiAgY29uc3QgaGFzUm9vdCA9IHBhdGguY2hhckNvZGVBdCgwKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xuICBsZXQgZW5kID0gLTE7XG4gIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICBmb3IgKGxldCBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDE7IC0taSkge1xuICAgIGlmIChwYXRoLmNoYXJDb2RlQXQoaSkgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkge1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgZW5kID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yXG4gICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW5kID09PSAtMSkgcmV0dXJuIGhhc1Jvb3QgPyBcIi9cIiA6IFwiLlwiO1xuICBpZiAoaGFzUm9vdCAmJiBlbmQgPT09IDEpIHJldHVybiBcIi8vXCI7XG4gIHJldHVybiBwYXRoLnNsaWNlKDAsIGVuZCk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXN0IHBvcnRpb24gb2YgYSBgcGF0aGAuIFRyYWlsaW5nIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGFyZSBpZ25vcmVkLlxuICogQHBhcmFtIHBhdGggdG8gcHJvY2Vzc1xuICogQHBhcmFtIGV4dCBvZiBwYXRoIGRpcmVjdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFzZW5hbWUocGF0aDogc3RyaW5nLCBleHQgPSBcIlwiKTogc3RyaW5nIHtcbiAgaWYgKGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBleHQgIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gIGxldCBzdGFydCA9IDA7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGxldCBpOiBudW1iZXI7XG5cbiAgaWYgKGV4dCAhPT0gdW5kZWZpbmVkICYmIGV4dC5sZW5ndGggPiAwICYmIGV4dC5sZW5ndGggPD0gcGF0aC5sZW5ndGgpIHtcbiAgICBpZiAoZXh0Lmxlbmd0aCA9PT0gcGF0aC5sZW5ndGggJiYgZXh0ID09PSBwYXRoKSByZXR1cm4gXCJcIjtcbiAgICBsZXQgZXh0SWR4ID0gZXh0Lmxlbmd0aCAtIDE7XG4gICAgbGV0IGZpcnN0Tm9uU2xhc2hFbmQgPSAtMTtcbiAgICBmb3IgKGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGNvZGUgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkge1xuICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA9PT0gLTEpIHtcbiAgICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgcmVtZW1iZXIgdGhpcyBpbmRleCBpbiBjYXNlXG4gICAgICAgICAgLy8gd2UgbmVlZCBpdCBpZiB0aGUgZXh0ZW5zaW9uIGVuZHMgdXAgbm90IG1hdGNoaW5nXG4gICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgICAgZmlyc3ROb25TbGFzaEVuZCA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRJZHggPj0gMCkge1xuICAgICAgICAgIC8vIFRyeSB0byBtYXRjaCB0aGUgZXhwbGljaXQgZXh0ZW5zaW9uXG4gICAgICAgICAgaWYgKGNvZGUgPT09IGV4dC5jaGFyQ29kZUF0KGV4dElkeCkpIHtcbiAgICAgICAgICAgIGlmICgtLWV4dElkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgZXh0ZW5zaW9uLCBzbyBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXIgcGF0aFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRXh0ZW5zaW9uIGRvZXMgbm90IG1hdGNoLCBzbyBvdXIgcmVzdWx0IGlzIHRoZSBlbnRpcmUgcGF0aFxuICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICBleHRJZHggPSAtMTtcbiAgICAgICAgICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID09PSBlbmQpIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7XG4gICAgZWxzZSBpZiAoZW5kID09PSAtMSkgZW5kID0gcGF0aC5sZW5ndGg7XG4gICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgaWYgKHBhdGguY2hhckNvZGVBdChpKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZW5kID09PSAtMSkge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAgIC8vIHBhdGggY29tcG9uZW50XG4gICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICBlbmQgPSBpICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW5kID09PSAtMSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4dGVuc2lvbiBvZiB0aGUgYHBhdGhgIHdpdGggbGVhZGluZyBwZXJpb2QuXG4gKiBAcGFyYW0gcGF0aCB3aXRoIGV4dGVuc2lvblxuICogQHJldHVybnMgZXh0ZW5zaW9uIChleC4gZm9yIGBmaWxlLnRzYCByZXR1cm5zIGAudHNgKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0bmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuICBsZXQgc3RhcnREb3QgPSAtMTtcbiAgbGV0IHN0YXJ0UGFydCA9IDA7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgbGV0IHByZURvdFN0YXRlID0gMDtcbiAgZm9yIChsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHtcbiAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZW5kID09PSAtMSkge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgLy8gZXh0ZW5zaW9uXG4gICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgIGVuZCA9IGkgKyAxO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9ET1QpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgb3VyIGZpcnN0IGRvdCwgbWFyayBpdCBhcyB0aGUgc3RhcnQgb2Ygb3VyIGV4dGVuc2lvblxuICAgICAgaWYgKHN0YXJ0RG90ID09PSAtMSkgc3RhcnREb3QgPSBpO1xuICAgICAgZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpIHByZURvdFN0YXRlID0gMTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkge1xuICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgIC8vIGhhdmUgYSBnb29kIGNoYW5jZSBhdCBoYXZpbmcgYSBub24tZW1wdHkgZXh0ZW5zaW9uXG4gICAgICBwcmVEb3RTdGF0ZSA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICBzdGFydERvdCA9PT0gLTEgfHxcbiAgICBlbmQgPT09IC0xIHx8XG4gICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3RcbiAgICBwcmVEb3RTdGF0ZSA9PT0gMCB8fFxuICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLidcbiAgICAocHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpXG4gICkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcGF0aCBmcm9tIGBGb3JtYXRJbnB1dFBhdGhPYmplY3RgIG9iamVjdC5cbiAqIEBwYXJhbSBwYXRoT2JqZWN0IHdpdGggcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KHBhdGhPYmplY3Q6IEZvcm1hdElucHV0UGF0aE9iamVjdCk6IHN0cmluZyB7XG4gIGlmIChwYXRoT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiBwYXRoT2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBUaGUgXCJwYXRoT2JqZWN0XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBwYXRoT2JqZWN0fWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gX2Zvcm1hdChcIi9cIiwgcGF0aE9iamVjdCk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgYFBhcnNlZFBhdGhgIG9iamVjdCBvZiB0aGUgYHBhdGhgLlxuICogQHBhcmFtIHBhdGggdG8gcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UocGF0aDogc3RyaW5nKTogUGFyc2VkUGF0aCB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgY29uc3QgcmV0OiBQYXJzZWRQYXRoID0geyByb290OiBcIlwiLCBkaXI6IFwiXCIsIGJhc2U6IFwiXCIsIGV4dDogXCJcIiwgbmFtZTogXCJcIiB9O1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiByZXQ7XG4gIGNvbnN0IGlzQWJzb2x1dGUgPSBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDtcbiAgbGV0IHN0YXJ0OiBudW1iZXI7XG4gIGlmIChpc0Fic29sdXRlKSB7XG4gICAgcmV0LnJvb3QgPSBcIi9cIjtcbiAgICBzdGFydCA9IDE7XG4gIH0gZWxzZSB7XG4gICAgc3RhcnQgPSAwO1xuICB9XG4gIGxldCBzdGFydERvdCA9IC0xO1xuICBsZXQgc3RhcnRQYXJ0ID0gMDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgbGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7XG5cbiAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICBsZXQgcHJlRG90U3RhdGUgPSAwO1xuXG4gIC8vIEdldCBub24tZGlyIGluZm9cbiAgZm9yICg7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgIGNvbnN0IGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGNvZGUgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7XG4gICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90ID09PSAtMSB8fFxuICAgIGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgaWYgKGVuZCAhPT0gLTEpIHtcbiAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aC5zbGljZSgxLCBlbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoc3RhcnRQYXJ0ID09PSAwICYmIGlzQWJzb2x1dGUpIHtcbiAgICAgIHJldC5uYW1lID0gcGF0aC5zbGljZSgxLCBzdGFydERvdCk7XG4gICAgICByZXQuYmFzZSA9IHBhdGguc2xpY2UoMSwgZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgc3RhcnREb3QpO1xuICAgICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICB9XG4gICAgcmV0LmV4dCA9IHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG4gIH1cblxuICBpZiAoc3RhcnRQYXJ0ID4gMCkgcmV0LmRpciA9IHBhdGguc2xpY2UoMCwgc3RhcnRQYXJ0IC0gMSk7XG4gIGVsc2UgaWYgKGlzQWJzb2x1dGUpIHJldC5kaXIgPSBcIi9cIjtcblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgZmlsZSBVUkwgdG8gYSBwYXRoIHN0cmluZy5cbiAqXG4gKiBgYGB0c1xuICogICAgICBpbXBvcnQgeyBmcm9tRmlsZVVybCB9IGZyb20gXCIuL3Bvc2l4LnRzXCI7XG4gKiAgICAgIGZyb21GaWxlVXJsKFwiZmlsZTovLy9ob21lL2Zvb1wiKTsgLy8gXCIvaG9tZS9mb29cIlxuICogYGBgXG4gKiBAcGFyYW0gdXJsIG9mIGEgZmlsZSBVUkxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21GaWxlVXJsKHVybDogc3RyaW5nIHwgVVJMKTogc3RyaW5nIHtcbiAgdXJsID0gdXJsIGluc3RhbmNlb2YgVVJMID8gdXJsIDogbmV3IFVSTCh1cmwpO1xuICBpZiAodXJsLnByb3RvY29sICE9IFwiZmlsZTpcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGEgZmlsZSBVUkwuXCIpO1xuICB9XG4gIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoXG4gICAgdXJsLnBhdGhuYW1lLnJlcGxhY2UoLyUoPyFbMC05QS1GYS1mXXsyfSkvZywgXCIlMjVcIiksXG4gICk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBwYXRoIHN0cmluZyB0byBhIGZpbGUgVVJMLlxuICpcbiAqIGBgYHRzXG4gKiAgICAgIGltcG9ydCB7IHRvRmlsZVVybCB9IGZyb20gXCIuL3Bvc2l4LnRzXCI7XG4gKiAgICAgIHRvRmlsZVVybChcIi9ob21lL2Zvb1wiKTsgLy8gbmV3IFVSTChcImZpbGU6Ly8vaG9tZS9mb29cIilcbiAqIGBgYFxuICogQHBhcmFtIHBhdGggdG8gY29udmVydCB0byBmaWxlIFVSTFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlVXJsKHBhdGg6IHN0cmluZyk6IFVSTCB7XG4gIGlmICghaXNBYnNvbHV0ZShwYXRoKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXCIpO1xuICB9XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoXCJmaWxlOi8vL1wiKTtcbiAgdXJsLnBhdGhuYW1lID0gZW5jb2RlV2hpdGVzcGFjZShcbiAgICBwYXRoLnJlcGxhY2UoLyUvZywgXCIlMjVcIikucmVwbGFjZSgvXFxcXC9nLCBcIiU1Q1wiKSxcbiAgKTtcbiAgcmV0dXJuIHVybDtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBpc1dpbmRvd3MsIG9zVHlwZSB9IGZyb20gXCIuLi9fdXRpbC9vcy50c1wiO1xuaW1wb3J0IHsgU0VQLCBTRVBfUEFUVEVSTiB9IGZyb20gXCIuL3NlcGFyYXRvci50c1wiO1xuaW1wb3J0ICogYXMgX3dpbjMyIGZyb20gXCIuL3dpbjMyLnRzXCI7XG5pbXBvcnQgKiBhcyBfcG9zaXggZnJvbSBcIi4vcG9zaXgudHNcIjtcbmltcG9ydCB0eXBlIHsgT1NUeXBlIH0gZnJvbSBcIi4uL191dGlsL29zLnRzXCI7XG5cbmNvbnN0IHBhdGggPSBpc1dpbmRvd3MgPyBfd2luMzIgOiBfcG9zaXg7XG5jb25zdCB7IGpvaW4sIG5vcm1hbGl6ZSB9ID0gcGF0aDtcblxuZXhwb3J0IGludGVyZmFjZSBHbG9iT3B0aW9ucyB7XG4gIC8qKiBFeHRlbmRlZCBnbG9iIHN5bnRheC5cbiAgICogU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9iYXNoLWV4dGVuZGVkLWdsb2JiaW5nLiBEZWZhdWx0c1xuICAgKiB0byB0cnVlLiAqL1xuICBleHRlbmRlZD86IGJvb2xlYW47XG4gIC8qKiBHbG9ic3RhciBzeW50YXguXG4gICAqIFNlZSBodHRwczovL3d3dy5saW51eGpvdXJuYWwuY29tL2NvbnRlbnQvZ2xvYnN0YXItbmV3LWJhc2gtZ2xvYmJpbmctb3B0aW9uLlxuICAgKiBJZiBmYWxzZSwgYCoqYCBpcyB0cmVhdGVkIGxpa2UgYCpgLiBEZWZhdWx0cyB0byB0cnVlLiAqL1xuICBnbG9ic3Rhcj86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIGdsb2JzdGFyIHNob3VsZCBiZSBjYXNlIGluc2Vuc2l0aXZlLiAqL1xuICBjYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuO1xuICAvKiogT3BlcmF0aW5nIHN5c3RlbS4gRGVmYXVsdHMgdG8gdGhlIG5hdGl2ZSBPUy4gKi9cbiAgb3M/OiBPU1R5cGU7XG59XG5cbmV4cG9ydCB0eXBlIEdsb2JUb1JlZ0V4cE9wdGlvbnMgPSBHbG9iT3B0aW9ucztcblxuY29uc3QgcmVnRXhwRXNjYXBlQ2hhcnMgPSBbXG4gIFwiIVwiLFxuICBcIiRcIixcbiAgXCIoXCIsXG4gIFwiKVwiLFxuICBcIipcIixcbiAgXCIrXCIsXG4gIFwiLlwiLFxuICBcIj1cIixcbiAgXCI/XCIsXG4gIFwiW1wiLFxuICBcIlxcXFxcIixcbiAgXCJeXCIsXG4gIFwie1wiLFxuICBcInxcIixcbl07XG5jb25zdCByYW5nZUVzY2FwZUNoYXJzID0gW1wiLVwiLCBcIlxcXFxcIiwgXCJdXCJdO1xuXG4vKiogQ29udmVydCBhIGdsb2Igc3RyaW5nIHRvIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIFRyaWVzIHRvIG1hdGNoIGJhc2ggZ2xvYiBleHBhbnNpb24gYXMgY2xvc2VseSBhcyBwb3NzaWJsZS5cbiAqXG4gKiBCYXNpYyBnbG9iIHN5bnRheDpcbiAqIC0gYCpgIC0gTWF0Y2hlcyBldmVyeXRoaW5nIHdpdGhvdXQgbGVhdmluZyB0aGUgcGF0aCBzZWdtZW50LlxuICogLSBgP2AgLSBNYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyLlxuICogLSBge2ZvbyxiYXJ9YCAtIE1hdGNoZXMgYGZvb2Agb3IgYGJhcmAuXG4gKiAtIGBbYWJjZF1gIC0gTWF0Y2hlcyBgYWAsIGBiYCwgYGNgIG9yIGBkYC5cbiAqIC0gYFthLWRdYCAtIE1hdGNoZXMgYGFgLCBgYmAsIGBjYCBvciBgZGAuXG4gKiAtIGBbIWFiY2RdYCAtIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgYmVzaWRlcyBgYWAsIGBiYCwgYGNgIG9yIGBkYC5cbiAqIC0gYFtbOjxjbGFzcz46XV1gIC0gTWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byBgPGNsYXNzPmAuXG4gKiAgICAgLSBgW1s6YWxudW06XV1gIC0gTWF0Y2hlcyBhbnkgZGlnaXQgb3IgbGV0dGVyLlxuICogICAgIC0gYFtbOmRpZ2l0Ol1hYmNdYCAtIE1hdGNoZXMgYW55IGRpZ2l0LCBgYWAsIGBiYCBvciBgY2AuXG4gKiAgICAgLSBTZWUgaHR0cHM6Ly9mYWNlbGVzc3VzZXIuZ2l0aHViLmlvL3djbWF0Y2gvZ2xvYi8jcG9zaXgtY2hhcmFjdGVyLWNsYXNzZXNcbiAqICAgICAgIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIGNoYXJhY3RlciBjbGFzc2VzLlxuICogLSBgXFxgIC0gRXNjYXBlcyB0aGUgbmV4dCBjaGFyYWN0ZXIgZm9yIGFuIGBvc2Agb3RoZXIgdGhhbiBgXCJ3aW5kb3dzXCJgLlxuICogLSBcXGAgLSBFc2NhcGVzIHRoZSBuZXh0IGNoYXJhY3RlciBmb3IgYG9zYCBzZXQgdG8gYFwid2luZG93c1wiYC5cbiAqIC0gYC9gIC0gUGF0aCBzZXBhcmF0b3IuXG4gKiAtIGBcXGAgLSBBZGRpdGlvbmFsIHBhdGggc2VwYXJhdG9yIG9ubHkgZm9yIGBvc2Agc2V0IHRvIGBcIndpbmRvd3NcImAuXG4gKlxuICogRXh0ZW5kZWQgc3ludGF4OlxuICogLSBSZXF1aXJlcyBgeyBleHRlbmRlZDogdHJ1ZSB9YC5cbiAqIC0gYD8oZm9vfGJhcilgIC0gTWF0Y2hlcyAwIG9yIDEgaW5zdGFuY2Ugb2YgYHtmb28sYmFyfWAuXG4gKiAtIGBAKGZvb3xiYXIpYCAtIE1hdGNoZXMgMSBpbnN0YW5jZSBvZiBge2ZvbyxiYXJ9YC4gVGhleSBiZWhhdmUgdGhlIHNhbWUuXG4gKiAtIGAqKGZvb3xiYXIpYCAtIE1hdGNoZXMgX25fIGluc3RhbmNlcyBvZiBge2ZvbyxiYXJ9YC5cbiAqIC0gYCsoZm9vfGJhcilgIC0gTWF0Y2hlcyBfbiA+IDBfIGluc3RhbmNlcyBvZiBge2ZvbyxiYXJ9YC5cbiAqIC0gYCEoZm9vfGJhcilgIC0gTWF0Y2hlcyBhbnl0aGluZyBvdGhlciB0aGFuIGB7Zm9vLGJhcn1gLlxuICogLSBTZWUgaHR0cHM6Ly93d3cubGludXhqb3VybmFsLmNvbS9jb250ZW50L2Jhc2gtZXh0ZW5kZWQtZ2xvYmJpbmcuXG4gKlxuICogR2xvYnN0YXIgc3ludGF4OlxuICogLSBSZXF1aXJlcyBgeyBnbG9ic3RhcjogdHJ1ZSB9YC5cbiAqIC0gYCoqYCAtIE1hdGNoZXMgYW55IG51bWJlciBvZiBhbnkgcGF0aCBzZWdtZW50cy5cbiAqICAgICAtIE11c3QgY29tcHJpc2UgaXRzIGVudGlyZSBwYXRoIHNlZ21lbnQgaW4gdGhlIHByb3ZpZGVkIGdsb2IuXG4gKiAtIFNlZSBodHRwczovL3d3dy5saW51eGpvdXJuYWwuY29tL2NvbnRlbnQvZ2xvYnN0YXItbmV3LWJhc2gtZ2xvYmJpbmctb3B0aW9uLlxuICpcbiAqIE5vdGUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBUaGUgZ2VuZXJhdGVkIGBSZWdFeHBgIGlzIGFuY2hvcmVkIGF0IGJvdGggc3RhcnQgYW5kIGVuZC5cbiAqIC0gUmVwZWF0aW5nIGFuZCB0cmFpbGluZyBzZXBhcmF0b3JzIGFyZSB0b2xlcmF0ZWQuIFRyYWlsaW5nIHNlcGFyYXRvcnMgaW4gdGhlXG4gKiAgIHByb3ZpZGVkIGdsb2IgaGF2ZSBubyBtZWFuaW5nIGFuZCBhcmUgZGlzY2FyZGVkLlxuICogLSBBYnNvbHV0ZSBnbG9icyB3aWxsIG9ubHkgbWF0Y2ggYWJzb2x1dGUgcGF0aHMsIGV0Yy5cbiAqIC0gRW1wdHkgZ2xvYnMgd2lsbCBtYXRjaCBub3RoaW5nLlxuICogLSBBbnkgc3BlY2lhbCBnbG9iIHN5bnRheCBtdXN0IGJlIGNvbnRhaW5lZCB0byBvbmUgcGF0aCBzZWdtZW50LiBGb3IgZXhhbXBsZSxcbiAqICAgYD8oZm9vfGJhci9iYXopYCBpcyBpbnZhbGlkLiBUaGUgc2VwYXJhdG9yIHdpbGwgdGFrZSBwcmVjZWRlbmNlIGFuZCB0aGVcbiAqICAgZmlyc3Qgc2VnbWVudCBlbmRzIHdpdGggYW4gdW5jbG9zZWQgZ3JvdXAuXG4gKiAtIElmIGEgcGF0aCBzZWdtZW50IGVuZHMgd2l0aCB1bmNsb3NlZCBncm91cHMgb3IgYSBkYW5nbGluZyBlc2NhcGUgcHJlZml4LCBhXG4gKiAgIHBhcnNlIGVycm9yIGhhcyBvY2N1cnJlZC4gRXZlcnkgY2hhcmFjdGVyIGZvciB0aGF0IHNlZ21lbnQgaXMgdGFrZW5cbiAqICAgbGl0ZXJhbGx5IGluIHRoaXMgZXZlbnQuXG4gKlxuICogTGltaXRhdGlvbnM6XG4gKiAtIEEgbmVnYXRpdmUgZ3JvdXAgbGlrZSBgIShmb298YmFyKWAgd2lsbCB3cm9uZ2x5IGJlIGNvbnZlcnRlZCB0byBhIG5lZ2F0aXZlXG4gKiAgIGxvb2stYWhlYWQgZm9sbG93ZWQgYnkgYSB3aWxkY2FyZC4gVGhpcyBtZWFucyB0aGF0IGAhKGZvbykuanNgIHdpbGwgd3JvbmdseVxuICogICBmYWlsIHRvIG1hdGNoIGBmb29iYXIuanNgLCBldmVuIHRob3VnaCBgZm9vYmFyYCBpcyBub3QgYGZvb2AuIEVmZmVjdGl2ZWx5LFxuICogICBgIShmb298YmFyKWAgaXMgdHJlYXRlZCBsaWtlIGAhKEAoZm9vfGJhcikqKWAuIFRoaXMgd2lsbCB3b3JrIGNvcnJlY3RseSBpZlxuICogICB0aGUgZ3JvdXAgb2NjdXJzIG5vdCBuZXN0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2VnbWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnbG9iVG9SZWdFeHAoXG4gIGdsb2I6IHN0cmluZyxcbiAge1xuICAgIGV4dGVuZGVkID0gdHJ1ZSxcbiAgICBnbG9ic3RhcjogZ2xvYnN0YXJPcHRpb24gPSB0cnVlLFxuICAgIG9zID0gb3NUeXBlLFxuICAgIGNhc2VJbnNlbnNpdGl2ZSA9IGZhbHNlLFxuICB9OiBHbG9iVG9SZWdFeHBPcHRpb25zID0ge30sXG4pOiBSZWdFeHAge1xuICBpZiAoZ2xvYiA9PSBcIlwiKSB7XG4gICAgcmV0dXJuIC8oPyEpLztcbiAgfVxuXG4gIGNvbnN0IHNlcCA9IG9zID09IFwid2luZG93c1wiID8gXCIoPzpcXFxcXFxcXHwvKStcIiA6IFwiLytcIjtcbiAgY29uc3Qgc2VwTWF5YmUgPSBvcyA9PSBcIndpbmRvd3NcIiA/IFwiKD86XFxcXFxcXFx8LykqXCIgOiBcIi8qXCI7XG4gIGNvbnN0IHNlcHMgPSBvcyA9PSBcIndpbmRvd3NcIiA/IFtcIlxcXFxcIiwgXCIvXCJdIDogW1wiL1wiXTtcbiAgY29uc3QgZ2xvYnN0YXIgPSBvcyA9PSBcIndpbmRvd3NcIlxuICAgID8gXCIoPzpbXlxcXFxcXFxcL10qKD86XFxcXFxcXFx8L3wkKSspKlwiXG4gICAgOiBcIig/OlteL10qKD86L3wkKSspKlwiO1xuICBjb25zdCB3aWxkY2FyZCA9IG9zID09IFwid2luZG93c1wiID8gXCJbXlxcXFxcXFxcL10qXCIgOiBcIlteL10qXCI7XG4gIGNvbnN0IGVzY2FwZVByZWZpeCA9IG9zID09IFwid2luZG93c1wiID8gXCJgXCIgOiBcIlxcXFxcIjtcblxuICAvLyBSZW1vdmUgdHJhaWxpbmcgc2VwYXJhdG9ycy5cbiAgbGV0IG5ld0xlbmd0aCA9IGdsb2IubGVuZ3RoO1xuICBmb3IgKDsgbmV3TGVuZ3RoID4gMSAmJiBzZXBzLmluY2x1ZGVzKGdsb2JbbmV3TGVuZ3RoIC0gMV0pOyBuZXdMZW5ndGgtLSk7XG4gIGdsb2IgPSBnbG9iLnNsaWNlKDAsIG5ld0xlbmd0aCk7XG5cbiAgbGV0IHJlZ0V4cFN0cmluZyA9IFwiXCI7XG5cbiAgLy8gVGVybWluYXRlcyBjb3JyZWN0bHkuIFRydXN0IHRoYXQgYGpgIGlzIGluY3JlbWVudGVkIGV2ZXJ5IGl0ZXJhdGlvbi5cbiAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iLmxlbmd0aDspIHtcbiAgICBsZXQgc2VnbWVudCA9IFwiXCI7XG4gICAgY29uc3QgZ3JvdXBTdGFjazogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgaW5SYW5nZSA9IGZhbHNlO1xuICAgIGxldCBpbkVzY2FwZSA9IGZhbHNlO1xuICAgIGxldCBlbmRzV2l0aFNlcCA9IGZhbHNlO1xuICAgIGxldCBpID0gajtcblxuICAgIC8vIFRlcm1pbmF0ZXMgd2l0aCBgaWAgYXQgdGhlIG5vbi1pbmNsdXNpdmUgZW5kIG9mIHRoZSBjdXJyZW50IHNlZ21lbnQuXG4gICAgZm9yICg7IGkgPCBnbG9iLmxlbmd0aCAmJiAhc2Vwcy5pbmNsdWRlcyhnbG9iW2ldKTsgaSsrKSB7XG4gICAgICBpZiAoaW5Fc2NhcGUpIHtcbiAgICAgICAgaW5Fc2NhcGUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZXNjYXBlQ2hhcnMgPSBpblJhbmdlID8gcmFuZ2VFc2NhcGVDaGFycyA6IHJlZ0V4cEVzY2FwZUNoYXJzO1xuICAgICAgICBzZWdtZW50ICs9IGVzY2FwZUNoYXJzLmluY2x1ZGVzKGdsb2JbaV0pID8gYFxcXFwke2dsb2JbaV19YCA6IGdsb2JbaV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBlc2NhcGVQcmVmaXgpIHtcbiAgICAgICAgaW5Fc2NhcGUgPSB0cnVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gXCJbXCIpIHtcbiAgICAgICAgaWYgKCFpblJhbmdlKSB7XG4gICAgICAgICAgaW5SYW5nZSA9IHRydWU7XG4gICAgICAgICAgc2VnbWVudCArPSBcIltcIjtcbiAgICAgICAgICBpZiAoZ2xvYltpICsgMV0gPT0gXCIhXCIpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIHNlZ21lbnQgKz0gXCJeXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChnbG9iW2kgKyAxXSA9PSBcIl5cIikge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgc2VnbWVudCArPSBcIlxcXFxeXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGdsb2JbaSArIDFdID09IFwiOlwiKSB7XG4gICAgICAgICAgbGV0IGsgPSBpICsgMTtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIHdoaWxlIChnbG9iW2sgKyAxXSAhPSBudWxsICYmIGdsb2JbayArIDFdICE9IFwiOlwiKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBnbG9iW2sgKyAxXTtcbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGdsb2JbayArIDFdID09IFwiOlwiICYmIGdsb2JbayArIDJdID09IFwiXVwiKSB7XG4gICAgICAgICAgICBpID0gayArIDI7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJhbG51bVwiKSBzZWdtZW50ICs9IFwiXFxcXGRBLVphLXpcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwiYWxwaGFcIikgc2VnbWVudCArPSBcIkEtWmEtelwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJhc2NpaVwiKSBzZWdtZW50ICs9IFwiXFx4MDAtXFx4N0ZcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwiYmxhbmtcIikgc2VnbWVudCArPSBcIlxcdCBcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwiY250cmxcIikgc2VnbWVudCArPSBcIlxceDAwLVxceDFGXFx4N0ZcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwiZGlnaXRcIikgc2VnbWVudCArPSBcIlxcXFxkXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcImdyYXBoXCIpIHNlZ21lbnQgKz0gXCJcXHgyMS1cXHg3RVwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJsb3dlclwiKSBzZWdtZW50ICs9IFwiYS16XCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcInByaW50XCIpIHNlZ21lbnQgKz0gXCJcXHgyMC1cXHg3RVwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJwdW5jdFwiKSB7XG4gICAgICAgICAgICAgIHNlZ21lbnQgKz0gXCIhXFxcIiMkJSYnKCkqKyxcXFxcLS4vOjs8PT4/QFtcXFxcXFxcXFxcXFxdXl9cdTIwMTh7fH1+XCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09IFwic3BhY2VcIikgc2VnbWVudCArPSBcIlxcXFxzXFx2XCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcInVwcGVyXCIpIHNlZ21lbnQgKz0gXCJBLVpcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwid29yZFwiKSBzZWdtZW50ICs9IFwiXFxcXHdcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwieGRpZ2l0XCIpIHNlZ21lbnQgKz0gXCJcXFxcZEEtRmEtZlwiO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IFwiXVwiICYmIGluUmFuZ2UpIHtcbiAgICAgICAgaW5SYW5nZSA9IGZhbHNlO1xuICAgICAgICBzZWdtZW50ICs9IFwiXVwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluUmFuZ2UpIHtcbiAgICAgICAgaWYgKGdsb2JbaV0gPT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICBzZWdtZW50ICs9IGBcXFxcXFxcXGA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCArPSBnbG9iW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGdsb2JbaV0gPT0gXCIpXCIgJiYgZ3JvdXBTdGFjay5sZW5ndGggPiAwICYmXG4gICAgICAgIGdyb3VwU3RhY2tbZ3JvdXBTdGFjay5sZW5ndGggLSAxXSAhPSBcIkJSQUNFXCJcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50ICs9IFwiKVwiO1xuICAgICAgICBjb25zdCB0eXBlID0gZ3JvdXBTdGFjay5wb3AoKSE7XG4gICAgICAgIGlmICh0eXBlID09IFwiIVwiKSB7XG4gICAgICAgICAgc2VnbWVudCArPSB3aWxkY2FyZDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9IFwiQFwiKSB7XG4gICAgICAgICAgc2VnbWVudCArPSB0eXBlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGdsb2JbaV0gPT0gXCJ8XCIgJiYgZ3JvdXBTdGFjay5sZW5ndGggPiAwICYmXG4gICAgICAgIGdyb3VwU3RhY2tbZ3JvdXBTdGFjay5sZW5ndGggLSAxXSAhPSBcIkJSQUNFXCJcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50ICs9IFwifFwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gXCIrXCIgJiYgZXh0ZW5kZWQgJiYgZ2xvYltpICsgMV0gPT0gXCIoXCIpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBncm91cFN0YWNrLnB1c2goXCIrXCIpO1xuICAgICAgICBzZWdtZW50ICs9IFwiKD86XCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBcIkBcIiAmJiBleHRlbmRlZCAmJiBnbG9iW2kgKyAxXSA9PSBcIihcIikge1xuICAgICAgICBpKys7XG4gICAgICAgIGdyb3VwU3RhY2sucHVzaChcIkBcIik7XG4gICAgICAgIHNlZ21lbnQgKz0gXCIoPzpcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IFwiP1wiKSB7XG4gICAgICAgIGlmIChleHRlbmRlZCAmJiBnbG9iW2kgKyAxXSA9PSBcIihcIikge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgICBncm91cFN0YWNrLnB1c2goXCI/XCIpO1xuICAgICAgICAgIHNlZ21lbnQgKz0gXCIoPzpcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWdtZW50ICs9IFwiLlwiO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBcIiFcIiAmJiBleHRlbmRlZCAmJiBnbG9iW2kgKyAxXSA9PSBcIihcIikge1xuICAgICAgICBpKys7XG4gICAgICAgIGdyb3VwU3RhY2sucHVzaChcIiFcIik7XG4gICAgICAgIHNlZ21lbnQgKz0gXCIoPyFcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IFwie1wiKSB7XG4gICAgICAgIGdyb3VwU3RhY2sucHVzaChcIkJSQUNFXCIpO1xuICAgICAgICBzZWdtZW50ICs9IFwiKD86XCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBcIn1cIiAmJiBncm91cFN0YWNrW2dyb3VwU3RhY2subGVuZ3RoIC0gMV0gPT0gXCJCUkFDRVwiKSB7XG4gICAgICAgIGdyb3VwU3RhY2sucG9wKCk7XG4gICAgICAgIHNlZ21lbnQgKz0gXCIpXCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBcIixcIiAmJiBncm91cFN0YWNrW2dyb3VwU3RhY2subGVuZ3RoIC0gMV0gPT0gXCJCUkFDRVwiKSB7XG4gICAgICAgIHNlZ21lbnQgKz0gXCJ8XCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBcIipcIikge1xuICAgICAgICBpZiAoZXh0ZW5kZWQgJiYgZ2xvYltpICsgMV0gPT0gXCIoXCIpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgZ3JvdXBTdGFjay5wdXNoKFwiKlwiKTtcbiAgICAgICAgICBzZWdtZW50ICs9IFwiKD86XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcHJldkNoYXIgPSBnbG9iW2kgLSAxXTtcbiAgICAgICAgICBsZXQgbnVtU3RhcnMgPSAxO1xuICAgICAgICAgIHdoaWxlIChnbG9iW2kgKyAxXSA9PSBcIipcIikge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgbnVtU3RhcnMrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbmV4dENoYXIgPSBnbG9iW2kgKyAxXTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBnbG9ic3Rhck9wdGlvbiAmJiBudW1TdGFycyA9PSAyICYmXG4gICAgICAgICAgICBbLi4uc2VwcywgdW5kZWZpbmVkXS5pbmNsdWRlcyhwcmV2Q2hhcikgJiZcbiAgICAgICAgICAgIFsuLi5zZXBzLCB1bmRlZmluZWRdLmluY2x1ZGVzKG5leHRDaGFyKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2VnbWVudCArPSBnbG9ic3RhcjtcbiAgICAgICAgICAgIGVuZHNXaXRoU2VwID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VnbWVudCArPSB3aWxkY2FyZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnQgKz0gcmVnRXhwRXNjYXBlQ2hhcnMuaW5jbHVkZXMoZ2xvYltpXSkgPyBgXFxcXCR7Z2xvYltpXX1gIDogZ2xvYltpXTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgdW5jbG9zZWQgZ3JvdXBzIG9yIGEgZGFuZ2xpbmcgYmFja3NsYXNoLlxuICAgIGlmIChncm91cFN0YWNrLmxlbmd0aCA+IDAgfHwgaW5SYW5nZSB8fCBpbkVzY2FwZSkge1xuICAgICAgLy8gUGFyc2UgZmFpbHVyZS4gVGFrZSBhbGwgY2hhcmFjdGVycyBmcm9tIHRoaXMgc2VnbWVudCBsaXRlcmFsbHkuXG4gICAgICBzZWdtZW50ID0gXCJcIjtcbiAgICAgIGZvciAoY29uc3QgYyBvZiBnbG9iLnNsaWNlKGosIGkpKSB7XG4gICAgICAgIHNlZ21lbnQgKz0gcmVnRXhwRXNjYXBlQ2hhcnMuaW5jbHVkZXMoYykgPyBgXFxcXCR7Y31gIDogYztcbiAgICAgICAgZW5kc1dpdGhTZXAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZWdFeHBTdHJpbmcgKz0gc2VnbWVudDtcbiAgICBpZiAoIWVuZHNXaXRoU2VwKSB7XG4gICAgICByZWdFeHBTdHJpbmcgKz0gaSA8IGdsb2IubGVuZ3RoID8gc2VwIDogc2VwTWF5YmU7XG4gICAgICBlbmRzV2l0aFNlcCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gVGVybWluYXRlcyB3aXRoIGBpYCBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgc2VnbWVudC5cbiAgICB3aGlsZSAoc2Vwcy5pbmNsdWRlcyhnbG9iW2ldKSkgaSsrO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCB0aGUgbmV4dCB2YWx1ZSBvZiBgamAgaXMgaW5kZWVkIGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgIGlmICghKGkgPiBqKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXNzZXJ0aW9uIGZhaWx1cmU6IGkgPiBqIChwb3RlbnRpYWwgaW5maW5pdGUgbG9vcClcIik7XG4gICAgfVxuICAgIGogPSBpO1xuICB9XG5cbiAgcmVnRXhwU3RyaW5nID0gYF4ke3JlZ0V4cFN0cmluZ30kYDtcbiAgcmV0dXJuIG5ldyBSZWdFeHAocmVnRXhwU3RyaW5nLCBjYXNlSW5zZW5zaXRpdmUgPyBcImlcIiA6IFwiXCIpO1xufVxuXG4vKiogVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSBnbG9iICovXG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNoYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBcIntcIjogXCJ9XCIsIFwiKFwiOiBcIilcIiwgXCJbXCI6IFwiXVwiIH07XG4gIGNvbnN0IHJlZ2V4ID1cbiAgICAvXFxcXCguKXwoXiF8XFwqfFxcP3xbXFxdLispXVxcP3xcXFtbXlxcXFxcXF1dK1xcXXxcXHtbXlxcXFx9XStcXH18XFwoXFw/WzohPV1bXlxcXFwpXStcXCl8XFwoW158XStcXHxbXlxcXFwpXStcXCkpLztcblxuICBpZiAoc3RyID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuXG4gIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHN0cikpKSB7XG4gICAgaWYgKG1hdGNoWzJdKSByZXR1cm4gdHJ1ZTtcbiAgICBsZXQgaWR4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG5cbiAgICAvLyBpZiBhbiBvcGVuIGJyYWNrZXQvYnJhY2UvcGFyZW4gaXMgZXNjYXBlZCxcbiAgICAvLyBzZXQgdGhlIGluZGV4IHRvIHRoZSBuZXh0IGNsb3NpbmcgY2hhcmFjdGVyXG4gICAgY29uc3Qgb3BlbiA9IG1hdGNoWzFdO1xuICAgIGNvbnN0IGNsb3NlID0gb3BlbiA/IGNoYXJzW29wZW5dIDogbnVsbDtcbiAgICBpZiAob3BlbiAmJiBjbG9zZSkge1xuICAgICAgY29uc3QgbiA9IHN0ci5pbmRleE9mKGNsb3NlLCBpZHgpO1xuICAgICAgaWYgKG4gIT09IC0xKSB7XG4gICAgICAgIGlkeCA9IG4gKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0ciA9IHN0ci5zbGljZShpZHgpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiogTGlrZSBub3JtYWxpemUoKSwgYnV0IGRvZXNuJ3QgY29sbGFwc2UgXCIqKlxcLy4uXCIgd2hlbiBgZ2xvYnN0YXJgIGlzIHRydWUuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplR2xvYihcbiAgZ2xvYjogc3RyaW5nLFxuICB7IGdsb2JzdGFyID0gZmFsc2UgfTogR2xvYk9wdGlvbnMgPSB7fSxcbik6IHN0cmluZyB7XG4gIGlmIChnbG9iLm1hdGNoKC9cXDAvZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdsb2IgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiBcIiR7Z2xvYn1cImApO1xuICB9XG4gIGlmICghZ2xvYnN0YXIpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKGdsb2IpO1xuICB9XG4gIGNvbnN0IHMgPSBTRVBfUEFUVEVSTi5zb3VyY2U7XG4gIGNvbnN0IGJhZFBhcmVudFBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgIGAoPzw9KCR7c318XilcXFxcKlxcXFwqJHtzfSlcXFxcLlxcXFwuKD89JHtzfXwkKWAsXG4gICAgXCJnXCIsXG4gICk7XG4gIHJldHVybiBub3JtYWxpemUoZ2xvYi5yZXBsYWNlKGJhZFBhcmVudFBhdHRlcm4sIFwiXFwwXCIpKS5yZXBsYWNlKC9cXDAvZywgXCIuLlwiKTtcbn1cblxuLyoqIExpa2Ugam9pbigpLCBidXQgZG9lc24ndCBjb2xsYXBzZSBcIioqXFwvLi5cIiB3aGVuIGBnbG9ic3RhcmAgaXMgdHJ1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqb2luR2xvYnMoXG4gIGdsb2JzOiBzdHJpbmdbXSxcbiAgeyBleHRlbmRlZCA9IHRydWUsIGdsb2JzdGFyID0gZmFsc2UgfTogR2xvYk9wdGlvbnMgPSB7fSxcbik6IHN0cmluZyB7XG4gIGlmICghZ2xvYnN0YXIgfHwgZ2xvYnMubGVuZ3RoID09IDApIHtcbiAgICByZXR1cm4gam9pbiguLi5nbG9icyk7XG4gIH1cbiAgaWYgKGdsb2JzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiLlwiO1xuICBsZXQgam9pbmVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZ2xvYiBvZiBnbG9icykge1xuICAgIGNvbnN0IHBhdGggPSBnbG9iO1xuICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICgham9pbmVkKSBqb2luZWQgPSBwYXRoO1xuICAgICAgZWxzZSBqb2luZWQgKz0gYCR7U0VQfSR7cGF0aH1gO1xuICAgIH1cbiAgfVxuICBpZiAoIWpvaW5lZCkgcmV0dXJuIFwiLlwiO1xuICByZXR1cm4gbm9ybWFsaXplR2xvYihqb2luZWQsIHsgZXh0ZW5kZWQsIGdsb2JzdGFyIH0pO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgdGhlIEJyb3dzZXJpZnkgYXV0aG9ycy4gTUlUIExpY2Vuc2UuXG4vLyBQb3J0ZWQgbW9zdGx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcGF0aC1icm93c2VyaWZ5L1xuXG4vKipcbiAqIFV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIE9TLXNwZWNpZmljIGZpbGUgcGF0aHMuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi4vX3V0aWwvb3MudHNcIjtcbmltcG9ydCAqIGFzIF93aW4zMiBmcm9tIFwiLi93aW4zMi50c1wiO1xuaW1wb3J0ICogYXMgX3Bvc2l4IGZyb20gXCIuL3Bvc2l4LnRzXCI7XG5cbmNvbnN0IHBhdGggPSBpc1dpbmRvd3MgPyBfd2luMzIgOiBfcG9zaXg7XG5cbmV4cG9ydCBjb25zdCB3aW4zMiA9IF93aW4zMjtcbmV4cG9ydCBjb25zdCBwb3NpeCA9IF9wb3NpeDtcbmV4cG9ydCBjb25zdCB7XG4gIGJhc2VuYW1lLFxuICBkZWxpbWl0ZXIsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGZvcm1hdCxcbiAgZnJvbUZpbGVVcmwsXG4gIGlzQWJzb2x1dGUsXG4gIGpvaW4sXG4gIG5vcm1hbGl6ZSxcbiAgcGFyc2UsXG4gIHJlbGF0aXZlLFxuICByZXNvbHZlLFxuICBzZXAsXG4gIHRvRmlsZVVybCxcbiAgdG9OYW1lc3BhY2VkUGF0aCxcbn0gPSBwYXRoO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9jb21tb24udHNcIjtcbmV4cG9ydCB7IFNFUCwgU0VQX1BBVFRFUk4gfSBmcm9tIFwiLi9zZXBhcmF0b3IudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL19pbnRlcmZhY2UudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dsb2IudHNcIjtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiLi4vaW8vYnVmZmVyLnRzXCI7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDE2XzY0MDtcbmNvbnN0IERFRkFVTFRfQlVGRkVSX1NJWkUgPSAzMiAqIDEwMjQ7XG5cbmZ1bmN0aW9uIGlzQ2xvc2VyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRGVuby5DbG9zZXIge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9IG51bGwgJiYgXCJjbG9zZVwiIGluIHZhbHVlICYmXG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICB0eXBlb2YgKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW1wiY2xvc2VcIl0gPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuLyoqIENyZWF0ZSBhIGBEZW5vLlJlYWRlcmAgZnJvbSBhbiBpdGVyYWJsZSBvZiBgVWludDhBcnJheWBzLlxuICpcbiAqIGBgYHRzXG4gKiAgICAgIGltcG9ydCB7IHJlYWRlckZyb21JdGVyYWJsZSwgY29weSB9IGZyb20gXCIuL2NvbnZlcnNpb24udHNcIjtcbiAqXG4gKiAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBEZW5vLm9wZW4oXCJtZXRyaWNzLnR4dFwiLCB7IHdyaXRlOiB0cnVlIH0pO1xuICogICAgICBjb25zdCByZWFkZXIgPSByZWFkZXJGcm9tSXRlcmFibGUoKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gKiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAqICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMDApKTtcbiAqICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgZGF0YTogJHtKU09OLnN0cmluZ2lmeShEZW5vLm1ldHJpY3MoKSl9XFxuXFxuYDtcbiAqICAgICAgICAgIHlpZWxkIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShtZXNzYWdlKTtcbiAqICAgICAgICB9XG4gKiAgICAgIH0pKCkpO1xuICogICAgICBhd2FpdCBjb3B5KHJlYWRlciwgZmlsZSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRlckZyb21JdGVyYWJsZShcbiAgaXRlcmFibGU6IEl0ZXJhYmxlPFVpbnQ4QXJyYXk+IHwgQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5Pixcbik6IERlbm8uUmVhZGVyIHtcbiAgY29uc3QgaXRlcmF0b3I6IEl0ZXJhdG9yPFVpbnQ4QXJyYXk+IHwgQXN5bmNJdGVyYXRvcjxVaW50OEFycmF5PiA9XG4gICAgKGl0ZXJhYmxlIGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT8uKCkgPz9cbiAgICAgIChpdGVyYWJsZSBhcyBJdGVyYWJsZTxVaW50OEFycmF5PilbU3ltYm9sLml0ZXJhdG9yXT8uKCk7XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBCdWZmZXIoKTtcbiAgcmV0dXJuIHtcbiAgICBhc3luYyByZWFkKHA6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcbiAgICAgIGlmIChidWZmZXIubGVuZ3RoID09IDApIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlLmJ5dGVMZW5ndGggPD0gcC5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICBwLnNldChyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwLnNldChyZXN1bHQudmFsdWUuc3ViYXJyYXkoMCwgcC5ieXRlTGVuZ3RoKSk7XG4gICAgICAgICAgYXdhaXQgd3JpdGVBbGwoYnVmZmVyLCByZXN1bHQudmFsdWUuc3ViYXJyYXkocC5ieXRlTGVuZ3RoKSk7XG4gICAgICAgICAgcmV0dXJuIHAuYnl0ZUxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbiA9IGF3YWl0IGJ1ZmZlci5yZWFkKHApO1xuICAgICAgICBpZiAobiA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVhZChwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG4vKiogQ3JlYXRlIGEgYFdyaXRlcmAgZnJvbSBhIGBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlckZyb21TdHJlYW1Xcml0ZXIoXG4gIHN0cmVhbVdyaXRlcjogV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyPFVpbnQ4QXJyYXk+LFxuKTogRGVuby5Xcml0ZXIge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIHdyaXRlKHA6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgYXdhaXQgc3RyZWFtV3JpdGVyLnJlYWR5O1xuICAgICAgYXdhaXQgc3RyZWFtV3JpdGVyLndyaXRlKHApO1xuICAgICAgcmV0dXJuIHAubGVuZ3RoO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBDcmVhdGUgYSBgUmVhZGVyYCBmcm9tIGEgYFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcmAuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZGVyRnJvbVN0cmVhbVJlYWRlcihcbiAgc3RyZWFtUmVhZGVyOiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXI8VWludDhBcnJheT4sXG4pOiBEZW5vLlJlYWRlciB7XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBCdWZmZXIoKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIHJlYWQocDogVWludDhBcnJheSk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuICAgICAgaWYgKGJ1ZmZlci5lbXB0eSgpKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN0cmVhbVJlYWRlci5yZWFkKCk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkge1xuICAgICAgICAgIHJldHVybiBudWxsOyAvLyBFT0ZcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHdyaXRlQWxsKGJ1ZmZlciwgcmVzLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZmZlci5yZWFkKHApO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGFibGVTdHJlYW1Gcm9tV3JpdGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiB0aGUgYHdyaXRlcmAgaXMgYWxzbyBhIGBEZW5vLkNsb3NlcmAsIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGB3cml0ZXJgXG4gICAqIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQsIGFib3J0ZWQsIG9yIGEgd3JpdGUgZXJyb3Igb2NjdXJzLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIGF1dG9DbG9zZT86IGJvb2xlYW47XG59XG5cbi8qKiBDcmVhdGUgYSBgV3JpdGFibGVTdHJlYW1gIGZyb20gYSBgV3JpdGVyYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0YWJsZVN0cmVhbUZyb21Xcml0ZXIoXG4gIHdyaXRlcjogRGVuby5Xcml0ZXIsXG4gIG9wdGlvbnM6IFdyaXRhYmxlU3RyZWFtRnJvbVdyaXRlck9wdGlvbnMgPSB7fSxcbik6IFdyaXRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3QgeyBhdXRvQ2xvc2UgPSB0cnVlIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiBuZXcgV3JpdGFibGVTdHJlYW0oe1xuICAgIGFzeW5jIHdyaXRlKGNodW5rLCBjb250cm9sbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB3cml0ZUFsbCh3cml0ZXIsIGNodW5rKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29udHJvbGxlci5lcnJvcihlKTtcbiAgICAgICAgaWYgKGlzQ2xvc2VyKHdyaXRlcikgJiYgYXV0b0Nsb3NlKSB7XG4gICAgICAgICAgd3JpdGVyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNsb3NlKCkge1xuICAgICAgaWYgKGlzQ2xvc2VyKHdyaXRlcikgJiYgYXV0b0Nsb3NlKSB7XG4gICAgICAgIHdyaXRlci5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWJvcnQoKSB7XG4gICAgICBpZiAoaXNDbG9zZXIod3JpdGVyKSAmJiBhdXRvQ2xvc2UpIHtcbiAgICAgICAgd3JpdGVyLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBDcmVhdGUgYSBgUmVhZGFibGVTdHJlYW1gIGZyb20gYW55IGtpbmQgb2YgaXRlcmFibGUuXG4gKlxuICogYGBgdHNcbiAqICAgICAgaW1wb3J0IHsgcmVhZGFibGVTdHJlYW1Gcm9tSXRlcmFibGUgfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG4gKlxuICogICAgICBjb25zdCByMSA9IHJlYWRhYmxlU3RyZWFtRnJvbUl0ZXJhYmxlKFtcImZvbywgYmFyLCBiYXpcIl0pO1xuICogICAgICBjb25zdCByMiA9IHJlYWRhYmxlU3RyZWFtRnJvbUl0ZXJhYmxlKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gKiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMDApKSk7XG4gKiAgICAgICAgeWllbGQgXCJmb29cIjtcbiAqICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgoKHIpID0+IHNldFRpbWVvdXQociwgMTAwMCkpKTtcbiAqICAgICAgICB5aWVsZCBcImJhclwiO1xuICogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKCgocikgPT4gc2V0VGltZW91dChyLCAxMDAwKSkpO1xuICogICAgICAgIHlpZWxkIFwiYmF6XCI7XG4gKiAgICAgIH0oKSk7XG4gKiBgYGBcbiAqXG4gKiBJZiB0aGUgcHJvZHVjZWQgaXRlcmF0b3IgKGBpdGVyYWJsZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKWAgb3JcbiAqIGBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKClgKSBpcyBhIGdlbmVyYXRvciwgb3IgbW9yZSBzcGVjaWZpY2FsbHkgaXMgZm91bmRcbiAqIHRvIGhhdmUgYSBgLnRocm93KClgIG1ldGhvZCBvbiBpdCwgdGhhdCB3aWxsIGJlIGNhbGxlZCB1cG9uXG4gKiBgcmVhZGFibGVTdHJlYW0uY2FuY2VsKClgLiBUaGlzIGlzIHRoZSBjYXNlIGZvciB0aGUgc2Vjb25kIGlucHV0IHR5cGUgYWJvdmU6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlYWRhYmxlU3RyZWFtRnJvbUl0ZXJhYmxlIH0gZnJvbSBcIi4vY29udmVyc2lvbi50c1wiO1xuICpcbiAqIGNvbnN0IHIzID0gcmVhZGFibGVTdHJlYW1Gcm9tSXRlcmFibGUoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAqICAgdHJ5IHtcbiAqICAgICB5aWVsZCBcImZvb1wiO1xuICogICB9IGNhdGNoIChlcnJvcikge1xuICogICAgIGNvbnNvbGUubG9nKGVycm9yKTsgLy8gRXJyb3I6IENhbmNlbGxlZCBieSBjb25zdW1lci5cbiAqICAgfVxuICogfSgpKTtcbiAqIGNvbnN0IHJlYWRlciA9IHIzLmdldFJlYWRlcigpO1xuICogY29uc29sZS5sb2coYXdhaXQgcmVhZGVyLnJlYWQoKSk7IC8vIHsgdmFsdWU6IFwiZm9vXCIsIGRvbmU6IGZhbHNlIH1cbiAqIGF3YWl0IHJlYWRlci5jYW5jZWwobmV3IEVycm9yKFwiQ2FuY2VsbGVkIGJ5IGNvbnN1bWVyLlwiKSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtRnJvbUl0ZXJhYmxlPFQ+KFxuICBpdGVyYWJsZTogSXRlcmFibGU8VD4gfCBBc3luY0l0ZXJhYmxlPFQ+LFxuKTogUmVhZGFibGVTdHJlYW08VD4ge1xuICBjb25zdCBpdGVyYXRvcjogSXRlcmF0b3I8VD4gfCBBc3luY0l0ZXJhdG9yPFQ+ID1cbiAgICAoaXRlcmFibGUgYXMgQXN5bmNJdGVyYWJsZTxUPilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPy4oKSA/P1xuICAgICAgKGl0ZXJhYmxlIGFzIEl0ZXJhYmxlPFQ+KVtTeW1ib2wuaXRlcmF0b3JdPy4oKTtcbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgY2FuY2VsKHJlYXNvbikge1xuICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvci50aHJvdyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBpdGVyYXRvci50aHJvdyhyZWFzb24pO1xuICAgICAgICB9IGNhdGNoIHsgLyogYGl0ZXJhdG9yLnRocm93KClgIGFsd2F5cyB0aHJvd3Mgb24gc2l0ZS4gV2UgY2F0Y2ggaXQuICovIH1cbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaW50byBhIFRyYW5zZm9ybVN0cmVhbS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVhZGFibGVTdHJlYW1Gcm9tSXRlcmFibGUsIHRvVHJhbnNmb3JtU3RyZWFtIH0gZnJvbSBcIi4vY29udmVyc2lvbi50c1wiO1xuICpcbiAqIGNvbnN0IHJlYWRhYmxlID0gcmVhZGFibGVTdHJlYW1Gcm9tSXRlcmFibGUoWzAsIDEsIDJdKVxuICogICAucGlwZVRocm91Z2godG9UcmFuc2Zvcm1TdHJlYW0oYXN5bmMgZnVuY3Rpb24qIChzcmMpIHtcbiAqICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHNyYykge1xuICogICAgICAgeWllbGQgY2h1bmsgKiAxMDA7XG4gKiAgICAgfVxuICogICB9KSk7XG4gKlxuICogZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZWFkYWJsZSkge1xuICogICBjb25zb2xlLmxvZyhjaHVuayk7XG4gKiB9XG4gKiAvLyBvdXRwdXQ6IDAsIDEwMCwgMjAwXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdHJhbnNmb3JtZXIgQSBmdW5jdGlvbiB0byB0cmFuc2Zvcm0uXG4gKiBAcGFyYW0gd3JpdGFibGVTdHJhdGVneSBBbiBvYmplY3QgdGhhdCBvcHRpb25hbGx5IGRlZmluZXMgYSBxdWV1aW5nIHN0cmF0ZWd5IGZvciB0aGUgc3RyZWFtLlxuICogQHBhcmFtIHJlYWRhYmxlU3RyYXRlZ3kgQW4gb2JqZWN0IHRoYXQgb3B0aW9uYWxseSBkZWZpbmVzIGEgcXVldWluZyBzdHJhdGVneSBmb3IgdGhlIHN0cmVhbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVHJhbnNmb3JtU3RyZWFtPEksIE8+KFxuICB0cmFuc2Zvcm1lcjogKHNyYzogUmVhZGFibGVTdHJlYW08ST4pID0+IEl0ZXJhYmxlPE8+IHwgQXN5bmNJdGVyYWJsZTxPPixcbiAgd3JpdGFibGVTdHJhdGVneT86IFF1ZXVpbmdTdHJhdGVneTxJPixcbiAgcmVhZGFibGVTdHJhdGVneT86IFF1ZXVpbmdTdHJhdGVneTxPPixcbik6IFRyYW5zZm9ybVN0cmVhbTxJLCBPPiB7XG4gIGNvbnN0IHtcbiAgICB3cml0YWJsZSxcbiAgICByZWFkYWJsZSxcbiAgfSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW08SSwgST4odW5kZWZpbmVkLCB3cml0YWJsZVN0cmF0ZWd5KTtcblxuICBjb25zdCBpdGVyYWJsZSA9IHRyYW5zZm9ybWVyKHJlYWRhYmxlKTtcbiAgY29uc3QgaXRlcmF0b3I6IEl0ZXJhdG9yPE8+IHwgQXN5bmNJdGVyYXRvcjxPPiA9XG4gICAgKGl0ZXJhYmxlIGFzIEFzeW5jSXRlcmFibGU8Tz4pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT8uKCkgPz9cbiAgICAgIChpdGVyYWJsZSBhcyBJdGVyYWJsZTxPPilbU3ltYm9sLml0ZXJhdG9yXT8uKCk7XG4gIHJldHVybiB7XG4gICAgd3JpdGFibGUsXG4gICAgcmVhZGFibGU6IG5ldyBSZWFkYWJsZVN0cmVhbTxPPih7XG4gICAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgbGV0IHJlc3VsdDogSXRlcmF0b3JSZXN1bHQ8Tz47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIFByb3BhZ2F0ZSBlcnJvciB0byBzdHJlYW0gZnJvbSBpdGVyYXRvclxuICAgICAgICAgIC8vIElmIHRoZSBzdHJlYW0gc3RhdHVzIGlzIFwiZXJyb3JlZFwiLCBpdCB3aWxsIGJlIHRocm93biwgYnV0IGlnbm9yZS5cbiAgICAgICAgICBhd2FpdCByZWFkYWJsZS5jYW5jZWwoZXJyb3IpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgICBjb250cm9sbGVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUocmVzdWx0LnZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwocmVhc29uKSB7XG4gICAgICAgIC8vIFByb3BhZ2F0ZSBjYW5jZWxsYXRpb24gdG8gcmVhZGFibGUgYW5kIGl0ZXJhdG9yXG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3IudGhyb3cgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnRocm93KHJlYXNvbik7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvKiBgaXRlcmF0b3IudGhyb3coKWAgYWx3YXlzIHRocm93cyBvbiBzaXRlLiBXZSBjYXRjaCBpdC4gKi9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcmVhZGFibGUuY2FuY2VsKHJlYXNvbik7XG4gICAgICB9LFxuICAgIH0sIHJlYWRhYmxlU3RyYXRlZ3kpLFxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRhYmxlU3RyZWFtRnJvbVJlYWRlck9wdGlvbnMge1xuICAvKiogSWYgdGhlIGByZWFkZXJgIGlzIGFsc28gYSBgRGVuby5DbG9zZXJgLCBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZSBgcmVhZGVyYFxuICAgKiB3aGVuIGBFT0ZgIGlzIGVuY291bnRlcmVkLCBvciBhIHJlYWQgZXJyb3Igb2NjdXJzLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIGF1dG9DbG9zZT86IGJvb2xlYW47XG5cbiAgLyoqIFRoZSBzaXplIG9mIGNodW5rcyB0byBhbGxvY2F0ZSB0byByZWFkLCB0aGUgZGVmYXVsdCBpcyB+MTZLaUIsIHdoaWNoIGlzXG4gICAqIHRoZSBtYXhpbXVtIHNpemUgdGhhdCBEZW5vIG9wZXJhdGlvbnMgY2FuIGN1cnJlbnRseSBzdXBwb3J0LiAqL1xuICBjaHVua1NpemU/OiBudW1iZXI7XG5cbiAgLyoqIFRoZSBxdWV1aW5nIHN0cmF0ZWd5IHRvIGNyZWF0ZSB0aGUgYFJlYWRhYmxlU3RyZWFtYCB3aXRoLiAqL1xuICBzdHJhdGVneT86IHsgaGlnaFdhdGVyTWFyaz86IG51bWJlciB8IHVuZGVmaW5lZDsgc2l6ZT86IHVuZGVmaW5lZCB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PmAgZnJvbSBmcm9tIGEgYERlbm8uUmVhZGVyYC5cbiAqXG4gKiBXaGVuIHRoZSBwdWxsIGFsZ29yaXRobSBpcyBjYWxsZWQgb24gdGhlIHN0cmVhbSwgYSBjaHVuayBmcm9tIHRoZSByZWFkZXJcbiAqIHdpbGwgYmUgcmVhZC4gIFdoZW4gYG51bGxgIGlzIHJldHVybmVkIGZyb20gdGhlIHJlYWRlciwgdGhlIHN0cmVhbSB3aWxsIGJlXG4gKiBjbG9zZWQgYWxvbmcgd2l0aCB0aGUgcmVhZGVyIChpZiBpdCBpcyBhbHNvIGEgYERlbm8uQ2xvc2VyYCkuXG4gKlxuICogQW4gZXhhbXBsZSBjb252ZXJ0aW5nIGEgYERlbm8uRnNGaWxlYCBpbnRvIGEgcmVhZGFibGUgc3RyZWFtOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyByZWFkYWJsZVN0cmVhbUZyb21SZWFkZXIgfSBmcm9tIFwiLi9tb2QudHNcIjtcbiAqXG4gKiBjb25zdCBmaWxlID0gYXdhaXQgRGVuby5vcGVuKFwiLi9maWxlLnR4dFwiLCB7IHJlYWQ6IHRydWUgfSk7XG4gKiBjb25zdCBmaWxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW1Gcm9tUmVhZGVyKGZpbGUpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUZyb21SZWFkZXIoXG4gIHJlYWRlcjogRGVuby5SZWFkZXIgfCAoRGVuby5SZWFkZXIgJiBEZW5vLkNsb3NlciksXG4gIG9wdGlvbnM6IFJlYWRhYmxlU3RyZWFtRnJvbVJlYWRlck9wdGlvbnMgPSB7fSxcbik6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3Qge1xuICAgIGF1dG9DbG9zZSA9IHRydWUsXG4gICAgY2h1bmtTaXplID0gREVGQVVMVF9DSFVOS19TSVpFLFxuICAgIHN0cmF0ZWd5LFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoY2h1bmtTaXplKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlYWQgPSBhd2FpdCByZWFkZXIucmVhZChjaHVuayk7XG4gICAgICAgIGlmIChyZWFkID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKGlzQ2xvc2VyKHJlYWRlcikgJiYgYXV0b0Nsb3NlKSB7XG4gICAgICAgICAgICByZWFkZXIuY2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmsuc3ViYXJyYXkoMCwgcmVhZCkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb250cm9sbGVyLmVycm9yKGUpO1xuICAgICAgICBpZiAoaXNDbG9zZXIocmVhZGVyKSkge1xuICAgICAgICAgIHJlYWRlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5jZWwoKSB7XG4gICAgICBpZiAoaXNDbG9zZXIocmVhZGVyKSAmJiBhdXRvQ2xvc2UpIHtcbiAgICAgICAgcmVhZGVyLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgfSwgc3RyYXRlZ3kpO1xufVxuXG4vKiogUmVhZCBSZWFkZXIgYHJgIHVudGlsIEVPRiAoYG51bGxgKSBhbmQgcmVzb2x2ZSB0byB0aGUgY29udGVudCBhc1xuICogVWludDhBcnJheWAuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCIuLi9pby9idWZmZXIudHNcIjtcbiAqIGltcG9ydCB7IHJlYWRBbGwgfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG4gKlxuICogLy8gRXhhbXBsZSBmcm9tIHN0ZGluXG4gKiBjb25zdCBzdGRpbkNvbnRlbnQgPSBhd2FpdCByZWFkQWxsKERlbm8uc3RkaW4pO1xuICpcbiAqIC8vIEV4YW1wbGUgZnJvbSBmaWxlXG4gKiBjb25zdCBmaWxlID0gYXdhaXQgRGVuby5vcGVuKFwibXlfZmlsZS50eHRcIiwge3JlYWQ6IHRydWV9KTtcbiAqIGNvbnN0IG15RmlsZUNvbnRlbnQgPSBhd2FpdCByZWFkQWxsKGZpbGUpO1xuICogRGVuby5jbG9zZShmaWxlLnJpZCk7XG4gKlxuICogLy8gRXhhbXBsZSBmcm9tIGJ1ZmZlclxuICogY29uc3QgbXlEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMTAwKTtcbiAqIC8vIC4uLiBmaWxsIG15RGF0YSBhcnJheSB3aXRoIGRhdGFcbiAqIGNvbnN0IHJlYWRlciA9IG5ldyBCdWZmZXIobXlEYXRhLmJ1ZmZlcik7XG4gKiBjb25zdCBidWZmZXJDb250ZW50ID0gYXdhaXQgcmVhZEFsbChyZWFkZXIpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQWxsKHI6IERlbm8uUmVhZGVyKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGNvbnN0IGJ1ZiA9IG5ldyBCdWZmZXIoKTtcbiAgYXdhaXQgYnVmLnJlYWRGcm9tKHIpO1xuICByZXR1cm4gYnVmLmJ5dGVzKCk7XG59XG5cbi8qKiBTeW5jaHJvbm91c2x5IHJlYWRzIFJlYWRlciBgcmAgdW50aWwgRU9GIChgbnVsbGApIGFuZCByZXR1cm5zIHRoZSBjb250ZW50XG4gKiBhcyBgVWludDhBcnJheWAuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCIuLi9pby9idWZmZXIudHNcIjtcbiAqIGltcG9ydCB7IHJlYWRBbGxTeW5jIH0gZnJvbSBcIi4vY29udmVyc2lvbi50c1wiO1xuICpcbiAqIC8vIEV4YW1wbGUgZnJvbSBzdGRpblxuICogY29uc3Qgc3RkaW5Db250ZW50ID0gcmVhZEFsbFN5bmMoRGVuby5zdGRpbik7XG4gKlxuICogLy8gRXhhbXBsZSBmcm9tIGZpbGVcbiAqIGNvbnN0IGZpbGUgPSBEZW5vLm9wZW5TeW5jKFwibXlfZmlsZS50eHRcIiwge3JlYWQ6IHRydWV9KTtcbiAqIGNvbnN0IG15RmlsZUNvbnRlbnQgPSByZWFkQWxsU3luYyhmaWxlKTtcbiAqIERlbm8uY2xvc2UoZmlsZS5yaWQpO1xuICpcbiAqIC8vIEV4YW1wbGUgZnJvbSBidWZmZXJcbiAqIGNvbnN0IG15RGF0YSA9IG5ldyBVaW50OEFycmF5KDEwMCk7XG4gKiAvLyAuLi4gZmlsbCBteURhdGEgYXJyYXkgd2l0aCBkYXRhXG4gKiBjb25zdCByZWFkZXIgPSBuZXcgQnVmZmVyKG15RGF0YS5idWZmZXIpO1xuICogY29uc3QgYnVmZmVyQ29udGVudCA9IHJlYWRBbGxTeW5jKHJlYWRlcik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRBbGxTeW5jKHI6IERlbm8uUmVhZGVyU3luYyk6IFVpbnQ4QXJyYXkge1xuICBjb25zdCBidWYgPSBuZXcgQnVmZmVyKCk7XG4gIGJ1Zi5yZWFkRnJvbVN5bmMocik7XG4gIHJldHVybiBidWYuYnl0ZXMoKTtcbn1cblxuLyoqIFdyaXRlIGFsbCB0aGUgY29udGVudCBvZiB0aGUgYXJyYXkgYnVmZmVyIChgYXJyYCkgdG8gdGhlIHdyaXRlciAoYHdgKS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIi4uL2lvL2J1ZmZlci50c1wiO1xuICogaW1wb3J0IHsgd3JpdGVBbGwgfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG5cbiAqIC8vIEV4YW1wbGUgd3JpdGluZyB0byBzdGRvdXRcbiAqIGxldCBjb250ZW50Qnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJIZWxsbyBXb3JsZFwiKTtcbiAqIGF3YWl0IHdyaXRlQWxsKERlbm8uc3Rkb3V0LCBjb250ZW50Qnl0ZXMpO1xuICpcbiAqIC8vIEV4YW1wbGUgd3JpdGluZyB0byBmaWxlXG4gKiBjb250ZW50Qnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJIZWxsbyBXb3JsZFwiKTtcbiAqIGNvbnN0IGZpbGUgPSBhd2FpdCBEZW5vLm9wZW4oJ3Rlc3QuZmlsZScsIHt3cml0ZTogdHJ1ZX0pO1xuICogYXdhaXQgd3JpdGVBbGwoZmlsZSwgY29udGVudEJ5dGVzKTtcbiAqIERlbm8uY2xvc2UoZmlsZS5yaWQpO1xuICpcbiAqIC8vIEV4YW1wbGUgd3JpdGluZyB0byBidWZmZXJcbiAqIGNvbnRlbnRCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcIkhlbGxvIFdvcmxkXCIpO1xuICogY29uc3Qgd3JpdGVyID0gbmV3IEJ1ZmZlcigpO1xuICogYXdhaXQgd3JpdGVBbGwod3JpdGVyLCBjb250ZW50Qnl0ZXMpO1xuICogY29uc29sZS5sb2cod3JpdGVyLmJ5dGVzKCkubGVuZ3RoKTsgIC8vIDExXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlQWxsKHc6IERlbm8uV3JpdGVyLCBhcnI6IFVpbnQ4QXJyYXkpIHtcbiAgbGV0IG53cml0dGVuID0gMDtcbiAgd2hpbGUgKG53cml0dGVuIDwgYXJyLmxlbmd0aCkge1xuICAgIG53cml0dGVuICs9IGF3YWl0IHcud3JpdGUoYXJyLnN1YmFycmF5KG53cml0dGVuKSk7XG4gIH1cbn1cblxuLyoqIFN5bmNocm9ub3VzbHkgd3JpdGUgYWxsIHRoZSBjb250ZW50IG9mIHRoZSBhcnJheSBidWZmZXIgKGBhcnJgKSB0byB0aGVcbiAqIHdyaXRlciAoYHdgKS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIi4uL2lvL2J1ZmZlci50c1wiO1xuICogaW1wb3J0IHsgd3JpdGVBbGxTeW5jIH0gZnJvbSBcIi4vY29udmVyc2lvbi50c1wiO1xuICpcbiAqIC8vIEV4YW1wbGUgd3JpdGluZyB0byBzdGRvdXRcbiAqIGxldCBjb250ZW50Qnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJIZWxsbyBXb3JsZFwiKTtcbiAqIHdyaXRlQWxsU3luYyhEZW5vLnN0ZG91dCwgY29udGVudEJ5dGVzKTtcbiAqXG4gKiAvLyBFeGFtcGxlIHdyaXRpbmcgdG8gZmlsZVxuICogY29udGVudEJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFwiSGVsbG8gV29ybGRcIik7XG4gKiBjb25zdCBmaWxlID0gRGVuby5vcGVuU3luYygndGVzdC5maWxlJywge3dyaXRlOiB0cnVlfSk7XG4gKiB3cml0ZUFsbFN5bmMoZmlsZSwgY29udGVudEJ5dGVzKTtcbiAqIERlbm8uY2xvc2UoZmlsZS5yaWQpO1xuICpcbiAqIC8vIEV4YW1wbGUgd3JpdGluZyB0byBidWZmZXJcbiAqIGNvbnRlbnRCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcIkhlbGxvIFdvcmxkXCIpO1xuICogY29uc3Qgd3JpdGVyID0gbmV3IEJ1ZmZlcigpO1xuICogd3JpdGVBbGxTeW5jKHdyaXRlciwgY29udGVudEJ5dGVzKTtcbiAqIGNvbnNvbGUubG9nKHdyaXRlci5ieXRlcygpLmxlbmd0aCk7ICAvLyAxMVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUFsbFN5bmModzogRGVuby5Xcml0ZXJTeW5jLCBhcnI6IFVpbnQ4QXJyYXkpIHtcbiAgbGV0IG53cml0dGVuID0gMDtcbiAgd2hpbGUgKG53cml0dGVuIDwgYXJyLmxlbmd0aCkge1xuICAgIG53cml0dGVuICs9IHcud3JpdGVTeW5jKGFyci5zdWJhcnJheShud3JpdHRlbikpO1xuICB9XG59XG5cbi8qKiBUdXJucyBhIFJlYWRlciwgYHJgLCBpbnRvIGFuIGFzeW5jIGl0ZXJhdG9yLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpdGVyYXRlUmVhZGVyIH0gZnJvbSBcIi4vY29udmVyc2lvbi50c1wiO1xuICpcbiAqIGxldCBmID0gYXdhaXQgRGVuby5vcGVuKFwiL2V0Yy9wYXNzd2RcIik7XG4gKiBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhdGVSZWFkZXIoZikpIHtcbiAqICAgY29uc29sZS5sb2coY2h1bmspO1xuICogfVxuICogZi5jbG9zZSgpO1xuICogYGBgXG4gKlxuICogU2Vjb25kIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHR1bmUgc2l6ZSBvZiBhIGJ1ZmZlci5cbiAqIERlZmF1bHQgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIDMya0IuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGl0ZXJhdGVSZWFkZXIgfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG4gKlxuICogbGV0IGYgPSBhd2FpdCBEZW5vLm9wZW4oXCIvZXRjL3Bhc3N3ZFwiKTtcbiAqIGNvbnN0IGl0ID0gaXRlcmF0ZVJlYWRlcihmLCB7XG4gKiAgIGJ1ZlNpemU6IDEwMjQgKiAxMDI0XG4gKiB9KTtcbiAqIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXQpIHtcbiAqICAgY29uc29sZS5sb2coY2h1bmspO1xuICogfVxuICogZi5jbG9zZSgpO1xuICogYGBgXG4gKlxuICogSXRlcmF0b3IgdXNlcyBhbiBpbnRlcm5hbCBidWZmZXIgb2YgZml4ZWQgc2l6ZSBmb3IgZWZmaWNpZW5jeTsgaXQgcmV0dXJuc1xuICogYSB2aWV3IG9uIHRoYXQgYnVmZmVyIG9uIGVhY2ggaXRlcmF0aW9uLiBJdCBpcyB0aGVyZWZvcmUgY2FsbGVyJ3NcbiAqIHJlc3BvbnNpYmlsaXR5IHRvIGNvcHkgY29udGVudHMgb2YgdGhlIGJ1ZmZlciBpZiBuZWVkZWQ7IG90aGVyd2lzZSB0aGVcbiAqIG5leHQgaXRlcmF0aW9uIHdpbGwgb3ZlcndyaXRlIGNvbnRlbnRzIG9mIHByZXZpb3VzbHkgcmV0dXJuZWQgY2h1bmsuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogaXRlcmF0ZVJlYWRlcihcbiAgcjogRGVuby5SZWFkZXIsXG4gIG9wdGlvbnM/OiB7XG4gICAgYnVmU2l6ZT86IG51bWJlcjtcbiAgfSxcbik6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxVaW50OEFycmF5PiB7XG4gIGNvbnN0IGJ1ZlNpemUgPSBvcHRpb25zPy5idWZTaXplID8/IERFRkFVTFRfQlVGRkVSX1NJWkU7XG4gIGNvbnN0IGIgPSBuZXcgVWludDhBcnJheShidWZTaXplKTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByLnJlYWQoYik7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgeWllbGQgYi5zdWJhcnJheSgwLCByZXN1bHQpO1xuICB9XG59XG5cbi8qKiBUdXJucyBhIFJlYWRlclN5bmMsIGByYCwgaW50byBhbiBpdGVyYXRvci5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXRlcmF0ZVJlYWRlclN5bmMgfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG4gKlxuICogbGV0IGYgPSBEZW5vLm9wZW5TeW5jKFwiL2V0Yy9wYXNzd2RcIik7XG4gKiBmb3IgKGNvbnN0IGNodW5rIG9mIGl0ZXJhdGVSZWFkZXJTeW5jKGYpKSB7XG4gKiAgIGNvbnNvbGUubG9nKGNodW5rKTtcbiAqIH1cbiAqIGYuY2xvc2UoKTtcbiAqIGBgYFxuICpcbiAqIFNlY29uZCBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byB0dW5lIHNpemUgb2YgYSBidWZmZXIuXG4gKiBEZWZhdWx0IHNpemUgb2YgdGhlIGJ1ZmZlciBpcyAzMmtCLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpdGVyYXRlUmVhZGVyU3luYyB9IGZyb20gXCIuL2NvbnZlcnNpb24udHNcIjtcblxuICogbGV0IGYgPSBhd2FpdCBEZW5vLm9wZW4oXCIvZXRjL3Bhc3N3ZFwiKTtcbiAqIGNvbnN0IGl0ZXIgPSBpdGVyYXRlUmVhZGVyU3luYyhmLCB7XG4gKiAgIGJ1ZlNpemU6IDEwMjQgKiAxMDI0XG4gKiB9KTtcbiAqIGZvciAoY29uc3QgY2h1bmsgb2YgaXRlcikge1xuICogICBjb25zb2xlLmxvZyhjaHVuayk7XG4gKiB9XG4gKiBmLmNsb3NlKCk7XG4gKiBgYGBcbiAqXG4gKiBJdGVyYXRvciB1c2VzIGFuIGludGVybmFsIGJ1ZmZlciBvZiBmaXhlZCBzaXplIGZvciBlZmZpY2llbmN5OyBpdCByZXR1cm5zXG4gKiBhIHZpZXcgb24gdGhhdCBidWZmZXIgb24gZWFjaCBpdGVyYXRpb24uIEl0IGlzIHRoZXJlZm9yZSBjYWxsZXInc1xuICogcmVzcG9uc2liaWxpdHkgdG8gY29weSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGlmIG5lZWRlZDsgb3RoZXJ3aXNlIHRoZVxuICogbmV4dCBpdGVyYXRpb24gd2lsbCBvdmVyd3JpdGUgY29udGVudHMgb2YgcHJldmlvdXNseSByZXR1cm5lZCBjaHVuay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyYXRlUmVhZGVyU3luYyhcbiAgcjogRGVuby5SZWFkZXJTeW5jLFxuICBvcHRpb25zPzoge1xuICAgIGJ1ZlNpemU/OiBudW1iZXI7XG4gIH0sXG4pOiBJdGVyYWJsZUl0ZXJhdG9yPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3QgYnVmU2l6ZSA9IG9wdGlvbnM/LmJ1ZlNpemUgPz8gREVGQVVMVF9CVUZGRVJfU0laRTtcbiAgY29uc3QgYiA9IG5ldyBVaW50OEFycmF5KGJ1ZlNpemUpO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHIucmVhZFN5bmMoYik7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgeWllbGQgYi5zdWJhcnJheSgwLCByZXN1bHQpO1xuICB9XG59XG5cbi8qKiBDb3BpZXMgZnJvbSBgc3JjYCB0byBgZHN0YCB1bnRpbCBlaXRoZXIgRU9GIChgbnVsbGApIGlzIHJlYWQgZnJvbSBgc3JjYCBvclxuICogYW4gZXJyb3Igb2NjdXJzLiBJdCByZXNvbHZlcyB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBvciByZWplY3RzIHdpdGhcbiAqIHRoZSBmaXJzdCBlcnJvciBlbmNvdW50ZXJlZCB3aGlsZSBjb3B5aW5nLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjb3B5IH0gZnJvbSBcIi4vY29udmVyc2lvbi50c1wiO1xuICpcbiAqIGNvbnN0IHNvdXJjZSA9IGF3YWl0IERlbm8ub3BlbihcIm15X2ZpbGUudHh0XCIpO1xuICogY29uc3QgYnl0ZXNDb3BpZWQxID0gYXdhaXQgY29weShzb3VyY2UsIERlbm8uc3Rkb3V0KTtcbiAqIGNvbnN0IGRlc3RpbmF0aW9uID0gYXdhaXQgRGVuby5jcmVhdGUoXCJteV9maWxlXzIudHh0XCIpO1xuICogY29uc3QgYnl0ZXNDb3BpZWQyID0gYXdhaXQgY29weShzb3VyY2UsIGRlc3RpbmF0aW9uKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzcmMgVGhlIHNvdXJjZSB0byBjb3B5IGZyb21cbiAqIEBwYXJhbSBkc3QgVGhlIGRlc3RpbmF0aW9uIHRvIGNvcHkgdG9cbiAqIEBwYXJhbSBvcHRpb25zIENhbiBiZSB1c2VkIHRvIHR1bmUgc2l6ZSBvZiB0aGUgYnVmZmVyLiBEZWZhdWx0IHNpemUgaXMgMzJrQlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weShcbiAgc3JjOiBEZW5vLlJlYWRlcixcbiAgZHN0OiBEZW5vLldyaXRlcixcbiAgb3B0aW9ucz86IHtcbiAgICBidWZTaXplPzogbnVtYmVyO1xuICB9LFxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgbGV0IG4gPSAwO1xuICBjb25zdCBidWZTaXplID0gb3B0aW9ucz8uYnVmU2l6ZSA/PyBERUZBVUxUX0JVRkZFUl9TSVpFO1xuICBjb25zdCBiID0gbmV3IFVpbnQ4QXJyYXkoYnVmU2l6ZSk7XG4gIGxldCBnb3RFT0YgPSBmYWxzZTtcbiAgd2hpbGUgKGdvdEVPRiA9PT0gZmFsc2UpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzcmMucmVhZChiKTtcbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICBnb3RFT0YgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbndyaXR0ZW4gPSAwO1xuICAgICAgd2hpbGUgKG53cml0dGVuIDwgcmVzdWx0KSB7XG4gICAgICAgIG53cml0dGVuICs9IGF3YWl0IGRzdC53cml0ZShiLnN1YmFycmF5KG53cml0dGVuLCByZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIG4gKz0gbndyaXR0ZW47XG4gICAgfVxuICB9XG4gIHJldHVybiBuO1xufVxuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBsZXplci9jb21tb25AMS4wLjEpIGRlbm8gcHJvZHVjdGlvbiAqL1xudmFyIEllPTEwMjQsQ2U9MCxCPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mcm9tPWUsdGhpcy50bz10fX0sdz1jbGFzc3tjb25zdHJ1Y3RvcihlPXt9KXt0aGlzLmlkPUNlKyssdGhpcy5wZXJOb2RlPSEhZS5wZXJOb2RlLHRoaXMuZGVzZXJpYWxpemU9ZS5kZXNlcmlhbGl6ZXx8KCgpPT57dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBub2RlIHR5cGUgZG9lc24ndCBkZWZpbmUgYSBkZXNlcmlhbGl6ZSBmdW5jdGlvblwiKX0pfWFkZChlKXtpZih0aGlzLnBlck5vZGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDYW4ndCBhZGQgcGVyLW5vZGUgcHJvcHMgdG8gbm9kZSB0eXBlc1wiKTtyZXR1cm4gdHlwZW9mIGUhPVwiZnVuY3Rpb25cIiYmKGU9Ti5tYXRjaChlKSksdD0+e2xldCByPWUodCk7cmV0dXJuIHI9PT12b2lkIDA/bnVsbDpbdGhpcyxyXX19fTt3LmNsb3NlZEJ5PW5ldyB3KHtkZXNlcmlhbGl6ZTpoPT5oLnNwbGl0KFwiIFwiKX0pO3cub3BlbmVkQnk9bmV3IHcoe2Rlc2VyaWFsaXplOmg9Pmguc3BsaXQoXCIgXCIpfSk7dy5ncm91cD1uZXcgdyh7ZGVzZXJpYWxpemU6aD0+aC5zcGxpdChcIiBcIil9KTt3LmNvbnRleHRIYXNoPW5ldyB3KHtwZXJOb2RlOiEwfSk7dy5sb29rQWhlYWQ9bmV3IHcoe3Blck5vZGU6ITB9KTt3Lm1vdW50ZWQ9bmV3IHcoe3Blck5vZGU6ITB9KTt2YXIgbmU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMudHJlZT1lLHRoaXMub3ZlcmxheT10LHRoaXMucGFyc2VyPXJ9fSxfZT1PYmplY3QuY3JlYXRlKG51bGwpLE49Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIsaT0wKXt0aGlzLm5hbWU9ZSx0aGlzLnByb3BzPXQsdGhpcy5pZD1yLHRoaXMuZmxhZ3M9aX1zdGF0aWMgZGVmaW5lKGUpe2xldCB0PWUucHJvcHMmJmUucHJvcHMubGVuZ3RoP09iamVjdC5jcmVhdGUobnVsbCk6X2Uscj0oZS50b3A/MTowKXwoZS5za2lwcGVkPzI6MCl8KGUuZXJyb3I/NDowKXwoZS5uYW1lPT1udWxsPzg6MCksaT1uZXcgTihlLm5hbWV8fFwiXCIsdCxlLmlkLHIpO2lmKGUucHJvcHMpe2ZvcihsZXQgbiBvZiBlLnByb3BzKWlmKEFycmF5LmlzQXJyYXkobil8fChuPW4oaSkpLG4pe2lmKG5bMF0ucGVyTm9kZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbid0IHN0b3JlIGEgcGVyLW5vZGUgcHJvcCBvbiBhIG5vZGUgdHlwZVwiKTt0W25bMF0uaWRdPW5bMV19fXJldHVybiBpfXByb3AoZSl7cmV0dXJuIHRoaXMucHJvcHNbZS5pZF19Z2V0IGlzVG9wKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMSk+MH1nZXQgaXNTa2lwcGVkKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMik+MH1nZXQgaXNFcnJvcigpe3JldHVybih0aGlzLmZsYWdzJjQpPjB9Z2V0IGlzQW5vbnltb3VzKCl7cmV0dXJuKHRoaXMuZmxhZ3MmOCk+MH1pcyhlKXtpZih0eXBlb2YgZT09XCJzdHJpbmdcIil7aWYodGhpcy5uYW1lPT1lKXJldHVybiEwO2xldCB0PXRoaXMucHJvcCh3Lmdyb3VwKTtyZXR1cm4gdD90LmluZGV4T2YoZSk+LTE6ITF9cmV0dXJuIHRoaXMuaWQ9PWV9c3RhdGljIG1hdGNoKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCByIGluIGUpZm9yKGxldCBpIG9mIHIuc3BsaXQoXCIgXCIpKXRbaV09ZVtyXTtyZXR1cm4gcj0+e2ZvcihsZXQgaT1yLnByb3Aody5ncm91cCksbj0tMTtuPChpP2kubGVuZ3RoOjApO24rKyl7bGV0IHM9dFtuPDA/ci5uYW1lOmlbbl1dO2lmKHMpcmV0dXJuIHN9fX19O04ubm9uZT1uZXcgTihcIlwiLE9iamVjdC5jcmVhdGUobnVsbCksMCw4KTt2YXIgWj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnR5cGVzPWU7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5pZCE9dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk5vZGUgdHlwZSBpZHMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gYXJyYXkgcG9zaXRpb25zIHdoZW4gY3JlYXRpbmcgYSBub2RlIHNldFwiKX1leHRlbmQoLi4uZSl7bGV0IHQ9W107Zm9yKGxldCByIG9mIHRoaXMudHlwZXMpe2xldCBpPW51bGw7Zm9yKGxldCBuIG9mIGUpe2xldCBzPW4ocik7cyYmKGl8fChpPU9iamVjdC5hc3NpZ24oe30sci5wcm9wcykpLGlbc1swXS5pZF09c1sxXSl9dC5wdXNoKGk/bmV3IE4oci5uYW1lLGksci5pZCxyLmZsYWdzKTpyKX1yZXR1cm4gbmV3IFoodCl9fSxYPW5ldyBXZWFrTWFwLGdlPW5ldyBXZWFrTWFwLEE7KGZ1bmN0aW9uKGgpe2hbaC5FeGNsdWRlQnVmZmVycz0xXT1cIkV4Y2x1ZGVCdWZmZXJzXCIsaFtoLkluY2x1ZGVBbm9ueW1vdXM9Ml09XCJJbmNsdWRlQW5vbnltb3VzXCIsaFtoLklnbm9yZU1vdW50cz00XT1cIklnbm9yZU1vdW50c1wiLGhbaC5JZ25vcmVPdmVybGF5cz04XT1cIklnbm9yZU92ZXJsYXlzXCJ9KShBfHwoQT17fSkpO3ZhciBQPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLGksbil7aWYodGhpcy50eXBlPWUsdGhpcy5jaGlsZHJlbj10LHRoaXMucG9zaXRpb25zPXIsdGhpcy5sZW5ndGg9aSx0aGlzLnByb3BzPW51bGwsbiYmbi5sZW5ndGgpe3RoaXMucHJvcHM9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0W3MsbF1vZiBuKXRoaXMucHJvcHNbdHlwZW9mIHM9PVwibnVtYmVyXCI/czpzLmlkXT1sfX10b1N0cmluZygpe2xldCBlPXRoaXMucHJvcCh3Lm1vdW50ZWQpO2lmKGUmJiFlLm92ZXJsYXkpcmV0dXJuIGUudHJlZS50b1N0cmluZygpO2xldCB0PVwiXCI7Zm9yKGxldCByIG9mIHRoaXMuY2hpbGRyZW4pe2xldCBpPXIudG9TdHJpbmcoKTtpJiYodCYmKHQrPVwiLFwiKSx0Kz1pKX1yZXR1cm4gdGhpcy50eXBlLm5hbWU/KC9cXFcvLnRlc3QodGhpcy50eXBlLm5hbWUpJiYhdGhpcy50eXBlLmlzRXJyb3I/SlNPTi5zdHJpbmdpZnkodGhpcy50eXBlLm5hbWUpOnRoaXMudHlwZS5uYW1lKSsodC5sZW5ndGg/XCIoXCIrdCtcIilcIjpcIlwiKTp0fWN1cnNvcihlPTApe3JldHVybiBuZXcgVih0aGlzLnRvcE5vZGUsZSl9Y3Vyc29yQXQoZSx0PTAscj0wKXtsZXQgaT1YLmdldCh0aGlzKXx8dGhpcy50b3BOb2RlLG49bmV3IFYoaSk7cmV0dXJuIG4ubW92ZVRvKGUsdCksWC5zZXQodGhpcyxuLl90cmVlKSxufWdldCB0b3BOb2RlKCl7cmV0dXJuIG5ldyBJKHRoaXMsMCwwLG51bGwpfXJlc29sdmUoZSx0PTApe2xldCByPXEoWC5nZXQodGhpcyl8fHRoaXMudG9wTm9kZSxlLHQsITEpO3JldHVybiBYLnNldCh0aGlzLHIpLHJ9cmVzb2x2ZUlubmVyKGUsdD0wKXtsZXQgcj1xKGdlLmdldCh0aGlzKXx8dGhpcy50b3BOb2RlLGUsdCwhMCk7cmV0dXJuIGdlLnNldCh0aGlzLHIpLHJ9aXRlcmF0ZShlKXtsZXR7ZW50ZXI6dCxsZWF2ZTpyLGZyb206aT0wLHRvOm49dGhpcy5sZW5ndGh9PWU7Zm9yKGxldCBzPXRoaXMuY3Vyc29yKChlLm1vZGV8fDApfEEuSW5jbHVkZUFub255bW91cyk7Oyl7bGV0IGw9ITE7aWYocy5mcm9tPD1uJiZzLnRvPj1pJiYocy50eXBlLmlzQW5vbnltb3VzfHx0KHMpIT09ITEpKXtpZihzLmZpcnN0Q2hpbGQoKSljb250aW51ZTtsPSEwfWZvcig7bCYmciYmIXMudHlwZS5pc0Fub255bW91cyYmcihzKSwhcy5uZXh0U2libGluZygpOyl7aWYoIXMucGFyZW50KCkpcmV0dXJuO2w9ITB9fX1wcm9wKGUpe3JldHVybiBlLnBlck5vZGU/dGhpcy5wcm9wcz90aGlzLnByb3BzW2UuaWRdOnZvaWQgMDp0aGlzLnR5cGUucHJvcChlKX1nZXQgcHJvcFZhbHVlcygpe2xldCBlPVtdO2lmKHRoaXMucHJvcHMpZm9yKGxldCB0IGluIHRoaXMucHJvcHMpZS5wdXNoKFsrdCx0aGlzLnByb3BzW3RdXSk7cmV0dXJuIGV9YmFsYW5jZShlPXt9KXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg8PTg/dGhpczpwZShOLm5vbmUsdGhpcy5jaGlsZHJlbix0aGlzLnBvc2l0aW9ucywwLHRoaXMuY2hpbGRyZW4ubGVuZ3RoLDAsdGhpcy5sZW5ndGgsKHQscixpKT0+bmV3IFAodGhpcy50eXBlLHQscixpLHRoaXMucHJvcFZhbHVlcyksZS5tYWtlVHJlZXx8KCh0LHIsaSk9Pm5ldyBQKE4ubm9uZSx0LHIsaSkpKX1zdGF0aWMgYnVpbGQoZSl7cmV0dXJuIFNlKGUpfX07UC5lbXB0eT1uZXcgUChOLm5vbmUsW10sW10sMCk7dmFyIEs9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmJ1ZmZlcj1lLHRoaXMuaW5kZXg9dH1nZXQgaWQoKXtyZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleC00XX1nZXQgc3RhcnQoKXtyZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleC0zXX1nZXQgZW5kKCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtMl19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleC0xXX1nZXQgcG9zKCl7cmV0dXJuIHRoaXMuaW5kZXh9bmV4dCgpe3RoaXMuaW5kZXgtPTR9Zm9yaygpe3JldHVybiBuZXcgSyh0aGlzLmJ1ZmZlcix0aGlzLmluZGV4KX19LFQ9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuYnVmZmVyPWUsdGhpcy5sZW5ndGg9dCx0aGlzLnNldD1yfWdldCB0eXBlKCl7cmV0dXJuIE4ubm9uZX10b1N0cmluZygpe2xldCBlPVtdO2ZvcihsZXQgdD0wO3Q8dGhpcy5idWZmZXIubGVuZ3RoOyllLnB1c2godGhpcy5jaGlsZFN0cmluZyh0KSksdD10aGlzLmJ1ZmZlclt0KzNdO3JldHVybiBlLmpvaW4oXCIsXCIpfWNoaWxkU3RyaW5nKGUpe2xldCB0PXRoaXMuYnVmZmVyW2VdLHI9dGhpcy5idWZmZXJbZSszXSxpPXRoaXMuc2V0LnR5cGVzW3RdLG49aS5uYW1lO2lmKC9cXFcvLnRlc3QobikmJiFpLmlzRXJyb3ImJihuPUpTT04uc3RyaW5naWZ5KG4pKSxlKz00LHI9PWUpcmV0dXJuIG47bGV0IHM9W107Zm9yKDtlPHI7KXMucHVzaCh0aGlzLmNoaWxkU3RyaW5nKGUpKSxlPXRoaXMuYnVmZmVyW2UrM107cmV0dXJuIG4rXCIoXCIrcy5qb2luKFwiLFwiKStcIilcIn1maW5kQ2hpbGQoZSx0LHIsaSxuKXtsZXR7YnVmZmVyOnN9PXRoaXMsbD0tMTtmb3IobGV0IGY9ZTtmIT10JiYhKGtlKG4saSxzW2YrMV0sc1tmKzJdKSYmKGw9ZixyPjApKTtmPXNbZiszXSk7cmV0dXJuIGx9c2xpY2UoZSx0LHIsaSl7bGV0IG49dGhpcy5idWZmZXIscz1uZXcgVWludDE2QXJyYXkodC1lKTtmb3IobGV0IGw9ZSxmPTA7bDx0OylzW2YrK109bltsKytdLHNbZisrXT1uW2wrK10tcixzW2YrK109bltsKytdLXIsc1tmKytdPW5bbCsrXS1lO3JldHVybiBuZXcgVChzLGktcix0aGlzLnNldCl9fTtmdW5jdGlvbiBrZShoLGUsdCxyKXtzd2l0Y2goaCl7Y2FzZS0yOnJldHVybiB0PGU7Y2FzZS0xOnJldHVybiByPj1lJiZ0PGU7Y2FzZSAwOnJldHVybiB0PGUmJnI+ZTtjYXNlIDE6cmV0dXJuIHQ8PWUmJnI+ZTtjYXNlIDI6cmV0dXJuIHI+ZTtjYXNlIDQ6cmV0dXJuITB9fWZ1bmN0aW9uIEFlKGgsZSl7bGV0IHQ9aC5jaGlsZEJlZm9yZShlKTtmb3IoO3Q7KXtsZXQgcj10Lmxhc3RDaGlsZDtpZighcnx8ci50byE9dC50bylicmVhaztyLnR5cGUuaXNFcnJvciYmci5mcm9tPT1yLnRvPyhoPXQsdD1yLnByZXZTaWJsaW5nKTp0PXJ9cmV0dXJuIGh9ZnVuY3Rpb24gcShoLGUsdCxyKXtmb3IodmFyIGk7aC5mcm9tPT1oLnRvfHwodDwxP2guZnJvbT49ZTpoLmZyb20+ZSl8fCh0Pi0xP2gudG88PWU6aC50bzxlKTspe2xldCBzPSFyJiZoIGluc3RhbmNlb2YgSSYmaC5pbmRleDwwP251bGw6aC5wYXJlbnQ7aWYoIXMpcmV0dXJuIGg7aD1zfWxldCBuPXI/MDpBLklnbm9yZU92ZXJsYXlzO2lmKHIpZm9yKGxldCBzPWgsbD1zLnBhcmVudDtsO3M9bCxsPXMucGFyZW50KXMgaW5zdGFuY2VvZiBJJiZzLmluZGV4PDAmJigoaT1sLmVudGVyKGUsdCxuKSk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLmZyb20pIT1zLmZyb20mJihoPWwpO2Zvcig7Oyl7bGV0IHM9aC5lbnRlcihlLHQsbik7aWYoIXMpcmV0dXJuIGg7aD1zfX12YXIgST1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixpKXt0aGlzLl90cmVlPWUsdGhpcy5mcm9tPXQsdGhpcy5pbmRleD1yLHRoaXMuX3BhcmVudD1pfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX3RyZWUudHlwZX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl90cmVlLnR5cGUubmFtZX1nZXQgdG8oKXtyZXR1cm4gdGhpcy5mcm9tK3RoaXMuX3RyZWUubGVuZ3RofW5leHRDaGlsZChlLHQscixpLG49MCl7Zm9yKGxldCBzPXRoaXM7Oyl7Zm9yKGxldHtjaGlsZHJlbjpsLHBvc2l0aW9uczpmfT1zLl90cmVlLHU9dD4wP2wubGVuZ3RoOi0xO2UhPXU7ZSs9dCl7bGV0IG89bFtlXSxjPWZbZV0rcy5mcm9tO2lmKCEha2UoaSxyLGMsYytvLmxlbmd0aCkpe2lmKG8gaW5zdGFuY2VvZiBUKXtpZihuJkEuRXhjbHVkZUJ1ZmZlcnMpY29udGludWU7bGV0IGE9by5maW5kQ2hpbGQoMCxvLmJ1ZmZlci5sZW5ndGgsdCxyLWMsaSk7aWYoYT4tMSlyZXR1cm4gbmV3IE0obmV3IHNlKHMsbyxlLGMpLG51bGwsYSl9ZWxzZSBpZihuJkEuSW5jbHVkZUFub255bW91c3x8IW8udHlwZS5pc0Fub255bW91c3x8YWUobykpe2xldCBhO2lmKCEobiZBLklnbm9yZU1vdW50cykmJm8ucHJvcHMmJihhPW8ucHJvcCh3Lm1vdW50ZWQpKSYmIWEub3ZlcmxheSlyZXR1cm4gbmV3IEkoYS50cmVlLGMsZSxzKTtsZXQgeT1uZXcgSShvLGMsZSxzKTtyZXR1cm4gbiZBLkluY2x1ZGVBbm9ueW1vdXN8fCF5LnR5cGUuaXNBbm9ueW1vdXM/eTp5Lm5leHRDaGlsZCh0PDA/by5jaGlsZHJlbi5sZW5ndGgtMTowLHQscixpKX19fWlmKG4mQS5JbmNsdWRlQW5vbnltb3VzfHwhcy50eXBlLmlzQW5vbnltb3VzfHwocy5pbmRleD49MD9lPXMuaW5kZXgrdDplPXQ8MD8tMTpzLl9wYXJlbnQuX3RyZWUuY2hpbGRyZW4ubGVuZ3RoLHM9cy5fcGFyZW50LCFzKSlyZXR1cm4gbnVsbH19Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5uZXh0Q2hpbGQoMCwxLDAsNCl9Z2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLm5leHRDaGlsZCh0aGlzLl90cmVlLmNoaWxkcmVuLmxlbmd0aC0xLC0xLDAsNCl9Y2hpbGRBZnRlcihlKXtyZXR1cm4gdGhpcy5uZXh0Q2hpbGQoMCwxLGUsMil9Y2hpbGRCZWZvcmUoZSl7cmV0dXJuIHRoaXMubmV4dENoaWxkKHRoaXMuX3RyZWUuY2hpbGRyZW4ubGVuZ3RoLTEsLTEsZSwtMil9ZW50ZXIoZSx0LHI9MCl7bGV0IGk7aWYoIShyJkEuSWdub3JlT3ZlcmxheXMpJiYoaT10aGlzLl90cmVlLnByb3Aody5tb3VudGVkKSkmJmkub3ZlcmxheSl7bGV0IG49ZS10aGlzLmZyb207Zm9yKGxldHtmcm9tOnMsdG86bH1vZiBpLm92ZXJsYXkpaWYoKHQ+MD9zPD1uOnM8bikmJih0PDA/bD49bjpsPm4pKXJldHVybiBuZXcgSShpLnRyZWUsaS5vdmVybGF5WzBdLmZyb20rdGhpcy5mcm9tLC0xLHRoaXMpfXJldHVybiB0aGlzLm5leHRDaGlsZCgwLDEsZSx0LHIpfW5leHRTaWduaWZpY2FudFBhcmVudCgpe2xldCBlPXRoaXM7Zm9yKDtlLnR5cGUuaXNBbm9ueW1vdXMmJmUuX3BhcmVudDspZT1lLl9wYXJlbnQ7cmV0dXJuIGV9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50Lm5leHRTaWduaWZpY2FudFBhcmVudCgpOm51bGx9Z2V0IG5leHRTaWJsaW5nKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5pbmRleD49MD90aGlzLl9wYXJlbnQubmV4dENoaWxkKHRoaXMuaW5kZXgrMSwxLDAsNCk6bnVsbH1nZXQgcHJldlNpYmxpbmcoKXtyZXR1cm4gdGhpcy5fcGFyZW50JiZ0aGlzLmluZGV4Pj0wP3RoaXMuX3BhcmVudC5uZXh0Q2hpbGQodGhpcy5pbmRleC0xLC0xLDAsNCk6bnVsbH1jdXJzb3IoZT0wKXtyZXR1cm4gbmV3IFYodGhpcyxlKX1nZXQgdHJlZSgpe3JldHVybiB0aGlzLl90cmVlfXRvVHJlZSgpe3JldHVybiB0aGlzLl90cmVlfXJlc29sdmUoZSx0PTApe3JldHVybiBxKHRoaXMsZSx0LCExKX1yZXNvbHZlSW5uZXIoZSx0PTApe3JldHVybiBxKHRoaXMsZSx0LCEwKX1lbnRlclVuZmluaXNoZWROb2Rlc0JlZm9yZShlKXtyZXR1cm4gQWUodGhpcyxlKX1nZXRDaGlsZChlLHQ9bnVsbCxyPW51bGwpe2xldCBpPWVlKHRoaXMsZSx0LHIpO3JldHVybiBpLmxlbmd0aD9pWzBdOm51bGx9Z2V0Q2hpbGRyZW4oZSx0PW51bGwscj1udWxsKXtyZXR1cm4gZWUodGhpcyxlLHQscil9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5fdHJlZS50b1N0cmluZygpfWdldCBub2RlKCl7cmV0dXJuIHRoaXN9bWF0Y2hDb250ZXh0KGUpe3JldHVybiB0ZSh0aGlzLGUpfX07ZnVuY3Rpb24gZWUoaCxlLHQscil7bGV0IGk9aC5jdXJzb3IoKSxuPVtdO2lmKCFpLmZpcnN0Q2hpbGQoKSlyZXR1cm4gbjtpZih0IT1udWxsKXtmb3IoOyFpLnR5cGUuaXModCk7KWlmKCFpLm5leHRTaWJsaW5nKCkpcmV0dXJuIG59Zm9yKDs7KXtpZihyIT1udWxsJiZpLnR5cGUuaXMocikpcmV0dXJuIG47aWYoaS50eXBlLmlzKGUpJiZuLnB1c2goaS5ub2RlKSwhaS5uZXh0U2libGluZygpKXJldHVybiByPT1udWxsP246W119fWZ1bmN0aW9uIHRlKGgsZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgcj1oLnBhcmVudDt0Pj0wO3I9ci5wYXJlbnQpe2lmKCFyKXJldHVybiExO2lmKCFyLnR5cGUuaXNBbm9ueW1vdXMpe2lmKGVbdF0mJmVbdF0hPXIubmFtZSlyZXR1cm4hMTt0LS19fXJldHVybiEwfXZhciBzZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixpKXt0aGlzLnBhcmVudD1lLHRoaXMuYnVmZmVyPXQsdGhpcy5pbmRleD1yLHRoaXMuc3RhcnQ9aX19LE09Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuY29udGV4dD1lLHRoaXMuX3BhcmVudD10LHRoaXMuaW5kZXg9cix0aGlzLnR5cGU9ZS5idWZmZXIuc2V0LnR5cGVzW2UuYnVmZmVyLmJ1ZmZlcltyXV19Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy50eXBlLm5hbWV9Z2V0IGZyb20oKXtyZXR1cm4gdGhpcy5jb250ZXh0LnN0YXJ0K3RoaXMuY29udGV4dC5idWZmZXIuYnVmZmVyW3RoaXMuaW5kZXgrMV19Z2V0IHRvKCl7cmV0dXJuIHRoaXMuY29udGV4dC5zdGFydCt0aGlzLmNvbnRleHQuYnVmZmVyLmJ1ZmZlclt0aGlzLmluZGV4KzJdfWNoaWxkKGUsdCxyKXtsZXR7YnVmZmVyOml9PXRoaXMuY29udGV4dCxuPWkuZmluZENoaWxkKHRoaXMuaW5kZXgrNCxpLmJ1ZmZlclt0aGlzLmluZGV4KzNdLGUsdC10aGlzLmNvbnRleHQuc3RhcnQscik7cmV0dXJuIG48MD9udWxsOm5ldyBNKHRoaXMuY29udGV4dCx0aGlzLG4pfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGQoMSwwLDQpfWdldCBsYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5jaGlsZCgtMSwwLDQpfWNoaWxkQWZ0ZXIoZSl7cmV0dXJuIHRoaXMuY2hpbGQoMSxlLDIpfWNoaWxkQmVmb3JlKGUpe3JldHVybiB0aGlzLmNoaWxkKC0xLGUsLTIpfWVudGVyKGUsdCxyPTApe2lmKHImQS5FeGNsdWRlQnVmZmVycylyZXR1cm4gbnVsbDtsZXR7YnVmZmVyOml9PXRoaXMuY29udGV4dCxuPWkuZmluZENoaWxkKHRoaXMuaW5kZXgrNCxpLmJ1ZmZlclt0aGlzLmluZGV4KzNdLHQ+MD8xOi0xLGUtdGhpcy5jb250ZXh0LnN0YXJ0LHQpO3JldHVybiBuPDA/bnVsbDpuZXcgTSh0aGlzLmNvbnRleHQsdGhpcyxuKX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudHx8dGhpcy5jb250ZXh0LnBhcmVudC5uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKX1leHRlcm5hbFNpYmxpbmcoZSl7cmV0dXJuIHRoaXMuX3BhcmVudD9udWxsOnRoaXMuY29udGV4dC5wYXJlbnQubmV4dENoaWxkKHRoaXMuY29udGV4dC5pbmRleCtlLGUsMCw0KX1nZXQgbmV4dFNpYmxpbmcoKXtsZXR7YnVmZmVyOmV9PXRoaXMuY29udGV4dCx0PWUuYnVmZmVyW3RoaXMuaW5kZXgrM107cmV0dXJuIHQ8KHRoaXMuX3BhcmVudD9lLmJ1ZmZlclt0aGlzLl9wYXJlbnQuaW5kZXgrM106ZS5idWZmZXIubGVuZ3RoKT9uZXcgTSh0aGlzLmNvbnRleHQsdGhpcy5fcGFyZW50LHQpOnRoaXMuZXh0ZXJuYWxTaWJsaW5nKDEpfWdldCBwcmV2U2libGluZygpe2xldHtidWZmZXI6ZX09dGhpcy5jb250ZXh0LHQ9dGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5pbmRleCs0OjA7cmV0dXJuIHRoaXMuaW5kZXg9PXQ/dGhpcy5leHRlcm5hbFNpYmxpbmcoLTEpOm5ldyBNKHRoaXMuY29udGV4dCx0aGlzLl9wYXJlbnQsZS5maW5kQ2hpbGQodCx0aGlzLmluZGV4LC0xLDAsNCkpfWN1cnNvcihlPTApe3JldHVybiBuZXcgVih0aGlzLGUpfWdldCB0cmVlKCl7cmV0dXJuIG51bGx9dG9UcmVlKCl7bGV0IGU9W10sdD1bXSx7YnVmZmVyOnJ9PXRoaXMuY29udGV4dCxpPXRoaXMuaW5kZXgrNCxuPXIuYnVmZmVyW3RoaXMuaW5kZXgrM107aWYobj5pKXtsZXQgcz1yLmJ1ZmZlclt0aGlzLmluZGV4KzFdLGw9ci5idWZmZXJbdGhpcy5pbmRleCsyXTtlLnB1c2goci5zbGljZShpLG4scyxsKSksdC5wdXNoKDApfXJldHVybiBuZXcgUCh0aGlzLnR5cGUsZSx0LHRoaXMudG8tdGhpcy5mcm9tKX1yZXNvbHZlKGUsdD0wKXtyZXR1cm4gcSh0aGlzLGUsdCwhMSl9cmVzb2x2ZUlubmVyKGUsdD0wKXtyZXR1cm4gcSh0aGlzLGUsdCwhMCl9ZW50ZXJVbmZpbmlzaGVkTm9kZXNCZWZvcmUoZSl7cmV0dXJuIEFlKHRoaXMsZSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jb250ZXh0LmJ1ZmZlci5jaGlsZFN0cmluZyh0aGlzLmluZGV4KX1nZXRDaGlsZChlLHQ9bnVsbCxyPW51bGwpe2xldCBpPWVlKHRoaXMsZSx0LHIpO3JldHVybiBpLmxlbmd0aD9pWzBdOm51bGx9Z2V0Q2hpbGRyZW4oZSx0PW51bGwscj1udWxsKXtyZXR1cm4gZWUodGhpcyxlLHQscil9Z2V0IG5vZGUoKXtyZXR1cm4gdGhpc31tYXRjaENvbnRleHQoZSl7cmV0dXJuIHRlKHRoaXMsZSl9fSxWPWNsYXNze2NvbnN0cnVjdG9yKGUsdD0wKXtpZih0aGlzLm1vZGU9dCx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuc3RhY2s9W10sdGhpcy5pbmRleD0wLHRoaXMuYnVmZmVyTm9kZT1udWxsLGUgaW5zdGFuY2VvZiBJKXRoaXMueWllbGROb2RlKGUpO2Vsc2V7dGhpcy5fdHJlZT1lLmNvbnRleHQucGFyZW50LHRoaXMuYnVmZmVyPWUuY29udGV4dDtmb3IobGV0IHI9ZS5fcGFyZW50O3I7cj1yLl9wYXJlbnQpdGhpcy5zdGFjay51bnNoaWZ0KHIuaW5kZXgpO3RoaXMuYnVmZmVyTm9kZT1lLHRoaXMueWllbGRCdWYoZS5pbmRleCl9fWdldCBuYW1lKCl7cmV0dXJuIHRoaXMudHlwZS5uYW1lfXlpZWxkTm9kZShlKXtyZXR1cm4gZT8odGhpcy5fdHJlZT1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5mcm9tPWUuZnJvbSx0aGlzLnRvPWUudG8sITApOiExfXlpZWxkQnVmKGUsdCl7dGhpcy5pbmRleD1lO2xldHtzdGFydDpyLGJ1ZmZlcjppfT10aGlzLmJ1ZmZlcjtyZXR1cm4gdGhpcy50eXBlPXR8fGkuc2V0LnR5cGVzW2kuYnVmZmVyW2VdXSx0aGlzLmZyb209citpLmJ1ZmZlcltlKzFdLHRoaXMudG89citpLmJ1ZmZlcltlKzJdLCEwfXlpZWxkKGUpe3JldHVybiBlP2UgaW5zdGFuY2VvZiBJPyh0aGlzLmJ1ZmZlcj1udWxsLHRoaXMueWllbGROb2RlKGUpKToodGhpcy5idWZmZXI9ZS5jb250ZXh0LHRoaXMueWllbGRCdWYoZS5pbmRleCxlLnR5cGUpKTohMX10b1N0cmluZygpe3JldHVybiB0aGlzLmJ1ZmZlcj90aGlzLmJ1ZmZlci5idWZmZXIuY2hpbGRTdHJpbmcodGhpcy5pbmRleCk6dGhpcy5fdHJlZS50b1N0cmluZygpfWVudGVyQ2hpbGQoZSx0LHIpe2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gdGhpcy55aWVsZCh0aGlzLl90cmVlLm5leHRDaGlsZChlPDA/dGhpcy5fdHJlZS5fdHJlZS5jaGlsZHJlbi5sZW5ndGgtMTowLGUsdCxyLHRoaXMubW9kZSkpO2xldHtidWZmZXI6aX09dGhpcy5idWZmZXIsbj1pLmZpbmRDaGlsZCh0aGlzLmluZGV4KzQsaS5idWZmZXJbdGhpcy5pbmRleCszXSxlLHQtdGhpcy5idWZmZXIuc3RhcnQscik7cmV0dXJuIG48MD8hMToodGhpcy5zdGFjay5wdXNoKHRoaXMuaW5kZXgpLHRoaXMueWllbGRCdWYobikpfWZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5lbnRlckNoaWxkKDEsMCw0KX1sYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5lbnRlckNoaWxkKC0xLDAsNCl9Y2hpbGRBZnRlcihlKXtyZXR1cm4gdGhpcy5lbnRlckNoaWxkKDEsZSwyKX1jaGlsZEJlZm9yZShlKXtyZXR1cm4gdGhpcy5lbnRlckNoaWxkKC0xLGUsLTIpfWVudGVyKGUsdCxyPXRoaXMubW9kZSl7cmV0dXJuIHRoaXMuYnVmZmVyP3ImQS5FeGNsdWRlQnVmZmVycz8hMTp0aGlzLmVudGVyQ2hpbGQoMSxlLHQpOnRoaXMueWllbGQodGhpcy5fdHJlZS5lbnRlcihlLHQscikpfXBhcmVudCgpe2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gdGhpcy55aWVsZE5vZGUodGhpcy5tb2RlJkEuSW5jbHVkZUFub255bW91cz90aGlzLl90cmVlLl9wYXJlbnQ6dGhpcy5fdHJlZS5wYXJlbnQpO2lmKHRoaXMuc3RhY2subGVuZ3RoKXJldHVybiB0aGlzLnlpZWxkQnVmKHRoaXMuc3RhY2sucG9wKCkpO2xldCBlPXRoaXMubW9kZSZBLkluY2x1ZGVBbm9ueW1vdXM/dGhpcy5idWZmZXIucGFyZW50OnRoaXMuYnVmZmVyLnBhcmVudC5uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKTtyZXR1cm4gdGhpcy5idWZmZXI9bnVsbCx0aGlzLnlpZWxkTm9kZShlKX1zaWJsaW5nKGUpe2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gdGhpcy5fdHJlZS5fcGFyZW50P3RoaXMueWllbGQodGhpcy5fdHJlZS5pbmRleDwwP251bGw6dGhpcy5fdHJlZS5fcGFyZW50Lm5leHRDaGlsZCh0aGlzLl90cmVlLmluZGV4K2UsZSwwLDQsdGhpcy5tb2RlKSk6ITE7bGV0e2J1ZmZlcjp0fT10aGlzLmJ1ZmZlcixyPXRoaXMuc3RhY2subGVuZ3RoLTE7aWYoZTwwKXtsZXQgaT1yPDA/MDp0aGlzLnN0YWNrW3JdKzQ7aWYodGhpcy5pbmRleCE9aSlyZXR1cm4gdGhpcy55aWVsZEJ1Zih0LmZpbmRDaGlsZChpLHRoaXMuaW5kZXgsLTEsMCw0KSl9ZWxzZXtsZXQgaT10LmJ1ZmZlclt0aGlzLmluZGV4KzNdO2lmKGk8KHI8MD90LmJ1ZmZlci5sZW5ndGg6dC5idWZmZXJbdGhpcy5zdGFja1tyXSszXSkpcmV0dXJuIHRoaXMueWllbGRCdWYoaSl9cmV0dXJuIHI8MD90aGlzLnlpZWxkKHRoaXMuYnVmZmVyLnBhcmVudC5uZXh0Q2hpbGQodGhpcy5idWZmZXIuaW5kZXgrZSxlLDAsNCx0aGlzLm1vZGUpKTohMX1uZXh0U2libGluZygpe3JldHVybiB0aGlzLnNpYmxpbmcoMSl9cHJldlNpYmxpbmcoKXtyZXR1cm4gdGhpcy5zaWJsaW5nKC0xKX1hdExhc3ROb2RlKGUpe2xldCB0LHIse2J1ZmZlcjppfT10aGlzO2lmKGkpe2lmKGU+MCl7aWYodGhpcy5pbmRleDxpLmJ1ZmZlci5idWZmZXIubGVuZ3RoKXJldHVybiExfWVsc2UgZm9yKGxldCBuPTA7bjx0aGlzLmluZGV4O24rKylpZihpLmJ1ZmZlci5idWZmZXJbbiszXTx0aGlzLmluZGV4KXJldHVybiExOyh7aW5kZXg6dCxwYXJlbnQ6cn09aSl9ZWxzZSh7aW5kZXg6dCxfcGFyZW50OnJ9PXRoaXMuX3RyZWUpO2Zvcig7cjt7aW5kZXg6dCxfcGFyZW50OnJ9PXIpaWYodD4tMSlmb3IobGV0IG49dCtlLHM9ZTwwPy0xOnIuX3RyZWUuY2hpbGRyZW4ubGVuZ3RoO24hPXM7bis9ZSl7bGV0IGw9ci5fdHJlZS5jaGlsZHJlbltuXTtpZih0aGlzLm1vZGUmQS5JbmNsdWRlQW5vbnltb3VzfHxsIGluc3RhbmNlb2YgVHx8IWwudHlwZS5pc0Fub255bW91c3x8YWUobCkpcmV0dXJuITF9cmV0dXJuITB9bW92ZShlLHQpe2lmKHQmJnRoaXMuZW50ZXJDaGlsZChlLDAsNCkpcmV0dXJuITA7Zm9yKDs7KXtpZih0aGlzLnNpYmxpbmcoZSkpcmV0dXJuITA7aWYodGhpcy5hdExhc3ROb2RlKGUpfHwhdGhpcy5wYXJlbnQoKSlyZXR1cm4hMX19bmV4dChlPSEwKXtyZXR1cm4gdGhpcy5tb3ZlKDEsZSl9cHJldihlPSEwKXtyZXR1cm4gdGhpcy5tb3ZlKC0xLGUpfW1vdmVUbyhlLHQ9MCl7Zm9yKDsodGhpcy5mcm9tPT10aGlzLnRvfHwodDwxP3RoaXMuZnJvbT49ZTp0aGlzLmZyb20+ZSl8fCh0Pi0xP3RoaXMudG88PWU6dGhpcy50bzxlKSkmJnRoaXMucGFyZW50KCk7KTtmb3IoO3RoaXMuZW50ZXJDaGlsZCgxLGUsdCk7KTtyZXR1cm4gdGhpc31nZXQgbm9kZSgpe2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gdGhpcy5fdHJlZTtsZXQgZT10aGlzLmJ1ZmZlck5vZGUsdD1udWxsLHI9MDtpZihlJiZlLmNvbnRleHQ9PXRoaXMuYnVmZmVyKXtlOmZvcihsZXQgaT10aGlzLmluZGV4LG49dGhpcy5zdGFjay5sZW5ndGg7bj49MDspe2ZvcihsZXQgcz1lO3M7cz1zLl9wYXJlbnQpaWYocy5pbmRleD09aSl7aWYoaT09dGhpcy5pbmRleClyZXR1cm4gczt0PXMscj1uKzE7YnJlYWsgZX1pPXRoaXMuc3RhY2tbLS1uXX19Zm9yKGxldCBpPXI7aTx0aGlzLnN0YWNrLmxlbmd0aDtpKyspdD1uZXcgTSh0aGlzLmJ1ZmZlcix0LHRoaXMuc3RhY2tbaV0pO3JldHVybiB0aGlzLmJ1ZmZlck5vZGU9bmV3IE0odGhpcy5idWZmZXIsdCx0aGlzLmluZGV4KX1nZXQgdHJlZSgpe3JldHVybiB0aGlzLmJ1ZmZlcj9udWxsOnRoaXMuX3RyZWUuX3RyZWV9aXRlcmF0ZShlLHQpe2ZvcihsZXQgcj0wOzspe2xldCBpPSExO2lmKHRoaXMudHlwZS5pc0Fub255bW91c3x8ZSh0aGlzKSE9PSExKXtpZih0aGlzLmZpcnN0Q2hpbGQoKSl7cisrO2NvbnRpbnVlfXRoaXMudHlwZS5pc0Fub255bW91c3x8KGk9ITApfWZvcig7aSYmdCYmdCh0aGlzKSxpPXRoaXMudHlwZS5pc0Fub255bW91cywhdGhpcy5uZXh0U2libGluZygpOyl7aWYoIXIpcmV0dXJuO3RoaXMucGFyZW50KCksci0tLGk9ITB9fX1tYXRjaENvbnRleHQoZSl7aWYoIXRoaXMuYnVmZmVyKXJldHVybiB0ZSh0aGlzLm5vZGUsZSk7bGV0e2J1ZmZlcjp0fT10aGlzLmJ1ZmZlcix7dHlwZXM6cn09dC5zZXQ7Zm9yKGxldCBpPWUubGVuZ3RoLTEsbj10aGlzLnN0YWNrLmxlbmd0aC0xO2k+PTA7bi0tKXtpZihuPDApcmV0dXJuIHRlKHRoaXMubm9kZSxlLGkpO2xldCBzPXJbdC5idWZmZXJbdGhpcy5zdGFja1tuXV1dO2lmKCFzLmlzQW5vbnltb3VzKXtpZihlW2ldJiZlW2ldIT1zLm5hbWUpcmV0dXJuITE7aS0tfX1yZXR1cm4hMH19O2Z1bmN0aW9uIGFlKGgpe3JldHVybiBoLmNoaWxkcmVuLnNvbWUoZT0+ZSBpbnN0YW5jZW9mIFR8fCFlLnR5cGUuaXNBbm9ueW1vdXN8fGFlKGUpKX1mdW5jdGlvbiBTZShoKXt2YXIgZTtsZXR7YnVmZmVyOnQsbm9kZVNldDpyLG1heEJ1ZmZlckxlbmd0aDppPTEwMjQscmV1c2VkOm49W10sbWluUmVwZWF0VHlwZTpzPXIudHlwZXMubGVuZ3RofT1oLGw9QXJyYXkuaXNBcnJheSh0KT9uZXcgSyh0LHQubGVuZ3RoKTp0LGY9ci50eXBlcyx1PTAsbz0wO2Z1bmN0aW9uIGMoeCx2LHAsbSxDKXtsZXR7aWQ6YixzdGFydDpnLGVuZDprLHNpemU6en09bCxPPW87Zm9yKDt6PDA7KWlmKGwubmV4dCgpLHo9PS0xKXtsZXQgVz1uW2JdO3AucHVzaChXKSxtLnB1c2goZy14KTtyZXR1cm59ZWxzZSBpZih6PT0tMyl7dT1iO3JldHVybn1lbHNlIGlmKHo9PS00KXtvPWI7cmV0dXJufWVsc2UgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVucmVjb2duaXplZCByZWNvcmQgc2l6ZTogJHt6fWApO2xldCBKPWZbYl0sVSxMLGNlPWcteDtpZihrLWc8PWkmJihMPVMobC5wb3MtdixDKSkpe2xldCBXPW5ldyBVaW50MTZBcnJheShMLnNpemUtTC5za2lwKSxqPWwucG9zLUwuc2l6ZSxSPVcubGVuZ3RoO2Zvcig7bC5wb3M+ajspUj1EKEwuc3RhcnQsVyxSKTtVPW5ldyBUKFcsay1MLnN0YXJ0LHIpLGNlPUwuc3RhcnQteH1lbHNle2xldCBXPWwucG9zLXo7bC5uZXh0KCk7bGV0IGo9W10sUj1bXSxIPWI+PXM/YjotMSwkPTAsUT1rO2Zvcig7bC5wb3M+VzspSD49MCYmbC5pZD09SCYmbC5zaXplPj0wPyhsLmVuZDw9US1pJiYoeShqLFIsZywkLGwuZW5kLFEsSCxPKSwkPWoubGVuZ3RoLFE9bC5lbmQpLGwubmV4dCgpKTpjKGcsVyxqLFIsSCk7aWYoSD49MCYmJD4wJiYkPGoubGVuZ3RoJiZ5KGosUixnLCQsZyxRLEgsTyksai5yZXZlcnNlKCksUi5yZXZlcnNlKCksSD4tMSYmJD4wKXtsZXQgZGU9YShKKTtVPXBlKEosaixSLDAsai5sZW5ndGgsMCxrLWcsZGUsZGUpfWVsc2UgVT1kKEosaixSLGstZyxPLWspfXAucHVzaChVKSxtLnB1c2goY2UpfWZ1bmN0aW9uIGEoeCl7cmV0dXJuKHYscCxtKT0+e2xldCBDPTAsYj12Lmxlbmd0aC0xLGcsaztpZihiPj0wJiYoZz12W2JdKWluc3RhbmNlb2YgUCl7aWYoIWImJmcudHlwZT09eCYmZy5sZW5ndGg9PW0pcmV0dXJuIGc7KGs9Zy5wcm9wKHcubG9va0FoZWFkKSkmJihDPXBbYl0rZy5sZW5ndGgrayl9cmV0dXJuIGQoeCx2LHAsbSxDKX19ZnVuY3Rpb24geSh4LHYscCxtLEMsYixnLGspe2xldCB6PVtdLE89W107Zm9yKDt4Lmxlbmd0aD5tOyl6LnB1c2goeC5wb3AoKSksTy5wdXNoKHYucG9wKCkrcC1DKTt4LnB1c2goZChyLnR5cGVzW2ddLHosTyxiLUMsay1iKSksdi5wdXNoKEMtcCl9ZnVuY3Rpb24gZCh4LHYscCxtLEM9MCxiKXtpZih1KXtsZXQgZz1bdy5jb250ZXh0SGFzaCx1XTtiPWI/W2ddLmNvbmNhdChiKTpbZ119aWYoQz4yNSl7bGV0IGc9W3cubG9va0FoZWFkLENdO2I9Yj9bZ10uY29uY2F0KGIpOltnXX1yZXR1cm4gbmV3IFAoeCx2LHAsbSxiKX1mdW5jdGlvbiBTKHgsdil7bGV0IHA9bC5mb3JrKCksbT0wLEM9MCxiPTAsZz1wLmVuZC1pLGs9e3NpemU6MCxzdGFydDowLHNraXA6MH07ZTpmb3IobGV0IHo9cC5wb3MteDtwLnBvcz56Oyl7bGV0IE89cC5zaXplO2lmKHAuaWQ9PXYmJk8+PTApe2suc2l6ZT1tLGsuc3RhcnQ9QyxrLnNraXA9YixiKz00LG0rPTQscC5uZXh0KCk7Y29udGludWV9bGV0IEo9cC5wb3MtTztpZihPPDB8fEo8enx8cC5zdGFydDxnKWJyZWFrO2xldCBVPXAuaWQ+PXM/NDowLEw9cC5zdGFydDtmb3IocC5uZXh0KCk7cC5wb3M+Sjspe2lmKHAuc2l6ZTwwKWlmKHAuc2l6ZT09LTMpVSs9NDtlbHNlIGJyZWFrIGU7ZWxzZSBwLmlkPj1zJiYoVSs9NCk7cC5uZXh0KCl9Qz1MLG0rPU8sYis9VX1yZXR1cm4odjwwfHxtPT14KSYmKGsuc2l6ZT1tLGsuc3RhcnQ9QyxrLnNraXA9Yiksay5zaXplPjQ/azp2b2lkIDB9ZnVuY3Rpb24gRCh4LHYscCl7bGV0e2lkOm0sc3RhcnQ6QyxlbmQ6YixzaXplOmd9PWw7aWYobC5uZXh0KCksZz49MCYmbTxzKXtsZXQgaz1wO2lmKGc+NCl7bGV0IHo9bC5wb3MtKGctNCk7Zm9yKDtsLnBvcz56OylwPUQoeCx2LHApfXZbLS1wXT1rLHZbLS1wXT1iLXgsdlstLXBdPUMteCx2Wy0tcF09bX1lbHNlIGc9PS0zP3U9bTpnPT0tNCYmKG89bSk7cmV0dXJuIHB9bGV0IEU9W10sRj1bXTtmb3IoO2wucG9zPjA7KWMoaC5zdGFydHx8MCxoLmJ1ZmZlclN0YXJ0fHwwLEUsRiwtMSk7bGV0IF89KGU9aC5sZW5ndGgpIT09bnVsbCYmZSE9PXZvaWQgMD9lOkUubGVuZ3RoP0ZbMF0rRVswXS5sZW5ndGg6MDtyZXR1cm4gbmV3IFAoZltoLnRvcElEXSxFLnJldmVyc2UoKSxGLnJldmVyc2UoKSxfKX12YXIgbWU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gWShoLGUpe2lmKCFoLmlzQW5vbnltb3VzfHxlIGluc3RhbmNlb2YgVHx8ZS50eXBlIT1oKXJldHVybiAxO2xldCB0PW1lLmdldChlKTtpZih0PT1udWxsKXt0PTE7Zm9yKGxldCByIG9mIGUuY2hpbGRyZW4pe2lmKHIudHlwZSE9aHx8IShyIGluc3RhbmNlb2YgUCkpe3Q9MTticmVha310Kz1ZKGgscil9bWUuc2V0KGUsdCl9cmV0dXJuIHR9ZnVuY3Rpb24gcGUoaCxlLHQscixpLG4scyxsLGYpe2xldCB1PTA7Zm9yKGxldCBkPXI7ZDxpO2QrKyl1Kz1ZKGgsZVtkXSk7bGV0IG89TWF0aC5jZWlsKHUqMS41LzgpLGM9W10sYT1bXTtmdW5jdGlvbiB5KGQsUyxELEUsRil7Zm9yKGxldCBfPUQ7XzxFOyl7bGV0IHg9Xyx2PVNbX10scD1ZKGgsZFtfXSk7Zm9yKF8rKztfPEU7XysrKXtsZXQgbT1ZKGgsZFtfXSk7aWYocCttPj1vKWJyZWFrO3ArPW19aWYoXz09eCsxKXtpZihwPm8pe2xldCBtPWRbeF07eShtLmNoaWxkcmVuLG0ucG9zaXRpb25zLDAsbS5jaGlsZHJlbi5sZW5ndGgsU1t4XStGKTtjb250aW51ZX1jLnB1c2goZFt4XSl9ZWxzZXtsZXQgbT1TW18tMV0rZFtfLTFdLmxlbmd0aC12O2MucHVzaChwZShoLGQsUyx4LF8sdixtLG51bGwsZikpfWEucHVzaCh2K0Ytbil9fXJldHVybiB5KGUsdCxyLGksMCksKGx8fGYpKGMsYSxzKX12YXIgYmU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgV2Vha01hcH1zZXRCdWZmZXIoZSx0LHIpe2xldCBpPXRoaXMubWFwLmdldChlKTtpfHx0aGlzLm1hcC5zZXQoZSxpPW5ldyBNYXApLGkuc2V0KHQscil9Z2V0QnVmZmVyKGUsdCl7bGV0IHI9dGhpcy5tYXAuZ2V0KGUpO3JldHVybiByJiZyLmdldCh0KX1zZXQoZSx0KXtlIGluc3RhbmNlb2YgTT90aGlzLnNldEJ1ZmZlcihlLmNvbnRleHQuYnVmZmVyLGUuaW5kZXgsdCk6ZSBpbnN0YW5jZW9mIEkmJnRoaXMubWFwLnNldChlLnRyZWUsdCl9Z2V0KGUpe3JldHVybiBlIGluc3RhbmNlb2YgTT90aGlzLmdldEJ1ZmZlcihlLmNvbnRleHQuYnVmZmVyLGUuaW5kZXgpOmUgaW5zdGFuY2VvZiBJP3RoaXMubWFwLmdldChlLnRyZWUpOnZvaWQgMH1jdXJzb3JTZXQoZSx0KXtlLmJ1ZmZlcj90aGlzLnNldEJ1ZmZlcihlLmJ1ZmZlci5idWZmZXIsZS5pbmRleCx0KTp0aGlzLm1hcC5zZXQoZS50cmVlLHQpfWN1cnNvckdldChlKXtyZXR1cm4gZS5idWZmZXI/dGhpcy5nZXRCdWZmZXIoZS5idWZmZXIuYnVmZmVyLGUuaW5kZXgpOnRoaXMubWFwLmdldChlLnRyZWUpfX0sRz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixpLG49ITEscz0hMSl7dGhpcy5mcm9tPWUsdGhpcy50bz10LHRoaXMudHJlZT1yLHRoaXMub2Zmc2V0PWksdGhpcy5vcGVuPShuPzE6MCl8KHM/MjowKX1nZXQgb3BlblN0YXJ0KCl7cmV0dXJuKHRoaXMub3BlbiYxKT4wfWdldCBvcGVuRW5kKCl7cmV0dXJuKHRoaXMub3BlbiYyKT4wfXN0YXRpYyBhZGRUcmVlKGUsdD1bXSxyPSExKXtsZXQgaT1bbmV3IEcoMCxlLmxlbmd0aCxlLDAsITEscildO2ZvcihsZXQgbiBvZiB0KW4udG8+ZS5sZW5ndGgmJmkucHVzaChuKTtyZXR1cm4gaX1zdGF0aWMgYXBwbHlDaGFuZ2VzKGUsdCxyPTEyOCl7aWYoIXQubGVuZ3RoKXJldHVybiBlO2xldCBpPVtdLG49MSxzPWUubGVuZ3RoP2VbMF06bnVsbDtmb3IobGV0IGw9MCxmPTAsdT0wOztsKyspe2xldCBvPWw8dC5sZW5ndGg/dFtsXTpudWxsLGM9bz9vLmZyb21BOjFlOTtpZihjLWY+PXIpZm9yKDtzJiZzLmZyb208Yzspe2xldCBhPXM7aWYoZj49YS5mcm9tfHxjPD1hLnRvfHx1KXtsZXQgeT1NYXRoLm1heChhLmZyb20sZiktdSxkPU1hdGgubWluKGEudG8sYyktdTthPXk+PWQ/bnVsbDpuZXcgRyh5LGQsYS50cmVlLGEub2Zmc2V0K3UsbD4wLCEhbyl9aWYoYSYmaS5wdXNoKGEpLHMudG8+YylicmVhaztzPW48ZS5sZW5ndGg/ZVtuKytdOm51bGx9aWYoIW8pYnJlYWs7Zj1vLnRvQSx1PW8udG9BLW8udG9CfXJldHVybiBpfX0seWU9Y2xhc3N7c3RhcnRQYXJzZShlLHQscil7cmV0dXJuIHR5cGVvZiBlPT1cInN0cmluZ1wiJiYoZT1uZXcgbGUoZSkpLHI9cj9yLmxlbmd0aD9yLm1hcChpPT5uZXcgQihpLmZyb20saS50bykpOltuZXcgQigwLDApXTpbbmV3IEIoMCxlLmxlbmd0aCldLHRoaXMuY3JlYXRlUGFyc2UoZSx0fHxbXSxyKX1wYXJzZShlLHQscil7bGV0IGk9dGhpcy5zdGFydFBhcnNlKGUsdCxyKTtmb3IoOzspe2xldCBuPWkuYWR2YW5jZSgpO2lmKG4pcmV0dXJuIG59fX0sbGU9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5zdHJpbmc9ZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmxlbmd0aH1jaHVuayhlKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UoZSl9Z2V0IGxpbmVDaHVua3MoKXtyZXR1cm4hMX1yZWFkKGUsdCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKGUsdCl9fTtmdW5jdGlvbiBOZShoKXtyZXR1cm4oZSx0LHIsaSk9Pm5ldyBvZShlLGgsdCxyLGkpfXZhciByZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixpLG4pe3RoaXMucGFyc2VyPWUsdGhpcy5wYXJzZT10LHRoaXMub3ZlcmxheT1yLHRoaXMudGFyZ2V0PWksdGhpcy5yYW5nZXM9bn19LGhlPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLGksbixzLGwpe3RoaXMucGFyc2VyPWUsdGhpcy5wcmVkaWNhdGU9dCx0aGlzLm1vdW50cz1yLHRoaXMuaW5kZXg9aSx0aGlzLnN0YXJ0PW4sdGhpcy50YXJnZXQ9cyx0aGlzLnByZXY9bCx0aGlzLmRlcHRoPTAsdGhpcy5yYW5nZXM9W119fSxmZT1uZXcgdyh7cGVyTm9kZTohMH0pLG9lPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLGksbil7dGhpcy5uZXN0PXQsdGhpcy5pbnB1dD1yLHRoaXMuZnJhZ21lbnRzPWksdGhpcy5yYW5nZXM9bix0aGlzLmlubmVyPVtdLHRoaXMuaW5uZXJEb25lPTAsdGhpcy5iYXNlVHJlZT1udWxsLHRoaXMuc3RvcHBlZEF0PW51bGwsdGhpcy5iYXNlUGFyc2U9ZX1hZHZhbmNlKCl7aWYodGhpcy5iYXNlUGFyc2Upe2xldCByPXRoaXMuYmFzZVBhcnNlLmFkdmFuY2UoKTtpZighcilyZXR1cm4gbnVsbDtpZih0aGlzLmJhc2VQYXJzZT1udWxsLHRoaXMuYmFzZVRyZWU9cix0aGlzLnN0YXJ0SW5uZXIoKSx0aGlzLnN0b3BwZWRBdCE9bnVsbClmb3IobGV0IGkgb2YgdGhpcy5pbm5lcilpLnBhcnNlLnN0b3BBdCh0aGlzLnN0b3BwZWRBdCl9aWYodGhpcy5pbm5lckRvbmU9PXRoaXMuaW5uZXIubGVuZ3RoKXtsZXQgcj10aGlzLmJhc2VUcmVlO3JldHVybiB0aGlzLnN0b3BwZWRBdCE9bnVsbCYmKHI9bmV3IFAoci50eXBlLHIuY2hpbGRyZW4sci5wb3NpdGlvbnMsci5sZW5ndGgsci5wcm9wVmFsdWVzLmNvbmNhdChbW2ZlLHRoaXMuc3RvcHBlZEF0XV0pKSkscn1sZXQgZT10aGlzLmlubmVyW3RoaXMuaW5uZXJEb25lXSx0PWUucGFyc2UuYWR2YW5jZSgpO2lmKHQpe3RoaXMuaW5uZXJEb25lKys7bGV0IHI9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLGUudGFyZ2V0LnByb3BzKTtyW3cubW91bnRlZC5pZF09bmV3IG5lKHQsZS5vdmVybGF5LGUucGFyc2VyKSxlLnRhcmdldC5wcm9wcz1yfXJldHVybiBudWxsfWdldCBwYXJzZWRQb3MoKXtpZih0aGlzLmJhc2VQYXJzZSlyZXR1cm4gMDtsZXQgZT10aGlzLmlucHV0Lmxlbmd0aDtmb3IobGV0IHQ9dGhpcy5pbm5lckRvbmU7dDx0aGlzLmlubmVyLmxlbmd0aDt0KyspdGhpcy5pbm5lclt0XS5yYW5nZXNbMF0uZnJvbTxlJiYoZT1NYXRoLm1pbihlLHRoaXMuaW5uZXJbdF0ucGFyc2UucGFyc2VkUG9zKSk7cmV0dXJuIGV9c3RvcEF0KGUpe2lmKHRoaXMuc3RvcHBlZEF0PWUsdGhpcy5iYXNlUGFyc2UpdGhpcy5iYXNlUGFyc2Uuc3RvcEF0KGUpO2Vsc2UgZm9yKGxldCB0PXRoaXMuaW5uZXJEb25lO3Q8dGhpcy5pbm5lci5sZW5ndGg7dCsrKXRoaXMuaW5uZXJbdF0ucGFyc2Uuc3RvcEF0KGUpfXN0YXJ0SW5uZXIoKXtsZXQgZT1uZXcgdWUodGhpcy5mcmFnbWVudHMpLHQ9bnVsbCxyPW51bGwsaT1uZXcgVihuZXcgSSh0aGlzLmJhc2VUcmVlLHRoaXMucmFuZ2VzWzBdLmZyb20sMCxudWxsKSxBLkluY2x1ZGVBbm9ueW1vdXN8QS5JZ25vcmVNb3VudHMpO2U6Zm9yKGxldCBuLHM7dGhpcy5zdG9wcGVkQXQ9PW51bGx8fGkuZnJvbTx0aGlzLnN0b3BwZWRBdDspe2xldCBsPSEwLGY7aWYoZS5oYXNOb2RlKGkpKXtpZih0KXtsZXQgdT10Lm1vdW50cy5maW5kKG89Pm8uZnJhZy5mcm9tPD1pLmZyb20mJm8uZnJhZy50bz49aS50byYmby5tb3VudC5vdmVybGF5KTtpZih1KWZvcihsZXQgbyBvZiB1Lm1vdW50Lm92ZXJsYXkpe2xldCBjPW8uZnJvbSt1LnBvcyxhPW8udG8rdS5wb3M7Yz49aS5mcm9tJiZhPD1pLnRvJiYhdC5yYW5nZXMuc29tZSh5PT55LmZyb208YSYmeS50bz5jKSYmdC5yYW5nZXMucHVzaCh7ZnJvbTpjLHRvOmF9KX19bD0hMX1lbHNlIGlmKHImJihzPVBlKHIucmFuZ2VzLGkuZnJvbSxpLnRvKSkpbD1zIT0yO2Vsc2UgaWYoIWkudHlwZS5pc0Fub255bW91cyYmaS5mcm9tPGkudG8mJihuPXRoaXMubmVzdChpLHRoaXMuaW5wdXQpKSl7aS50cmVlfHx6ZShpKTtsZXQgdT1lLmZpbmRNb3VudHMoaS5mcm9tLG4ucGFyc2VyKTtpZih0eXBlb2Ygbi5vdmVybGF5PT1cImZ1bmN0aW9uXCIpdD1uZXcgaGUobi5wYXJzZXIsbi5vdmVybGF5LHUsdGhpcy5pbm5lci5sZW5ndGgsaS5mcm9tLGkudHJlZSx0KTtlbHNle2xldCBvPXdlKHRoaXMucmFuZ2VzLG4ub3ZlcmxheXx8W25ldyBCKGkuZnJvbSxpLnRvKV0pO28ubGVuZ3RoJiZ0aGlzLmlubmVyLnB1c2gobmV3IHJlKG4ucGFyc2VyLG4ucGFyc2VyLnN0YXJ0UGFyc2UodGhpcy5pbnB1dCx2ZSh1LG8pLG8pLG4ub3ZlcmxheT9uLm92ZXJsYXkubWFwKGM9Pm5ldyBCKGMuZnJvbS1pLmZyb20sYy50by1pLmZyb20pKTpudWxsLGkudHJlZSxvKSksbi5vdmVybGF5P28ubGVuZ3RoJiYocj17cmFuZ2VzOm8sZGVwdGg6MCxwcmV2OnJ9KTpsPSExfX1lbHNlIHQmJihmPXQucHJlZGljYXRlKGkpKSYmKGY9PT0hMCYmKGY9bmV3IEIoaS5mcm9tLGkudG8pKSxmLmZyb208Zi50byYmdC5yYW5nZXMucHVzaChmKSk7aWYobCYmaS5maXJzdENoaWxkKCkpdCYmdC5kZXB0aCsrLHImJnIuZGVwdGgrKztlbHNlIGZvcig7IWkubmV4dFNpYmxpbmcoKTspe2lmKCFpLnBhcmVudCgpKWJyZWFrIGU7aWYodCYmIS0tdC5kZXB0aCl7bGV0IHU9d2UodGhpcy5yYW5nZXMsdC5yYW5nZXMpO3UubGVuZ3RoJiZ0aGlzLmlubmVyLnNwbGljZSh0LmluZGV4LDAsbmV3IHJlKHQucGFyc2VyLHQucGFyc2VyLnN0YXJ0UGFyc2UodGhpcy5pbnB1dCx2ZSh0Lm1vdW50cyx1KSx1KSx0LnJhbmdlcy5tYXAobz0+bmV3IEIoby5mcm9tLXQuc3RhcnQsby50by10LnN0YXJ0KSksdC50YXJnZXQsdSkpLHQ9dC5wcmV2fXImJiEtLXIuZGVwdGgmJihyPXIucHJldil9fX19O2Z1bmN0aW9uIFBlKGgsZSx0KXtmb3IobGV0IHIgb2YgaCl7aWYoci5mcm9tPj10KWJyZWFrO2lmKHIudG8+ZSlyZXR1cm4gci5mcm9tPD1lJiZyLnRvPj10PzI6MX1yZXR1cm4gMH1mdW5jdGlvbiB4ZShoLGUsdCxyLGksbil7aWYoZTx0KXtsZXQgcz1oLmJ1ZmZlcltlKzFdLGw9aC5idWZmZXJbdC0yXTtyLnB1c2goaC5zbGljZShlLHQscyxsKSksaS5wdXNoKHMtbil9fWZ1bmN0aW9uIHplKGgpe2xldHtub2RlOmV9PWgsdD0wO2RvIGgucGFyZW50KCksdCsrO3doaWxlKCFoLnRyZWUpO2xldCByPTAsaT1oLnRyZWUsbj0wO2Zvcig7bj1pLnBvc2l0aW9uc1tyXStoLmZyb20sIShuPD1lLmZyb20mJm4raS5jaGlsZHJlbltyXS5sZW5ndGg+PWUudG8pO3IrKyk7bGV0IHM9aS5jaGlsZHJlbltyXSxsPXMuYnVmZmVyO2Z1bmN0aW9uIGYodSxvLGMsYSx5KXtsZXQgZD11O2Zvcig7bFtkKzJdK248PWUuZnJvbTspZD1sW2QrM107bGV0IFM9W10sRD1bXTt4ZShzLHUsZCxTLEQsYSk7bGV0IEU9bFtkKzFdLEY9bFtkKzJdLF89RStuPT1lLmZyb20mJkYrbj09ZS50byYmbFtkXT09ZS50eXBlLmlkO3JldHVybiBTLnB1c2goXz9lLnRvVHJlZSgpOmYoZCs0LGxbZCszXSxzLnNldC50eXBlc1tsW2RdXSxFLEYtRSkpLEQucHVzaChFLWEpLHhlKHMsbFtkKzNdLG8sUyxELGEpLG5ldyBQKGMsUyxELHkpfWkuY2hpbGRyZW5bcl09ZigwLGwubGVuZ3RoLE4ubm9uZSwwLHMubGVuZ3RoKTtmb3IobGV0IHU9MDt1PD10O3UrKyloLmNoaWxkQWZ0ZXIoZS5mcm9tKX12YXIgaWU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLm9mZnNldD10LHRoaXMuZG9uZT0hMSx0aGlzLmN1cnNvcj1lLmN1cnNvcihBLkluY2x1ZGVBbm9ueW1vdXN8QS5JZ25vcmVNb3VudHMpfW1vdmVUbyhlKXtsZXR7Y3Vyc29yOnR9PXRoaXMscj1lLXRoaXMub2Zmc2V0O2Zvcig7IXRoaXMuZG9uZSYmdC5mcm9tPHI7KXQudG8+PWUmJnQuZW50ZXIociwxLEEuSWdub3JlT3ZlcmxheXN8QS5FeGNsdWRlQnVmZmVycyl8fHQubmV4dCghMSl8fCh0aGlzLmRvbmU9ITApfWhhc05vZGUoZSl7aWYodGhpcy5tb3ZlVG8oZS5mcm9tKSwhdGhpcy5kb25lJiZ0aGlzLmN1cnNvci5mcm9tK3RoaXMub2Zmc2V0PT1lLmZyb20mJnRoaXMuY3Vyc29yLnRyZWUpZm9yKGxldCB0PXRoaXMuY3Vyc29yLnRyZWU7Oyl7aWYodD09ZS50cmVlKXJldHVybiEwO2lmKHQuY2hpbGRyZW4ubGVuZ3RoJiZ0LnBvc2l0aW9uc1swXT09MCYmdC5jaGlsZHJlblswXWluc3RhbmNlb2YgUCl0PXQuY2hpbGRyZW5bMF07ZWxzZSBicmVha31yZXR1cm4hMX19LHVlPWNsYXNze2NvbnN0cnVjdG9yKGUpe3ZhciB0O2lmKHRoaXMuZnJhZ21lbnRzPWUsdGhpcy5jdXJUbz0wLHRoaXMuZnJhZ0k9MCxlLmxlbmd0aCl7bGV0IHI9dGhpcy5jdXJGcmFnPWVbMF07dGhpcy5jdXJUbz0odD1yLnRyZWUucHJvcChmZSkpIT09bnVsbCYmdCE9PXZvaWQgMD90OnIudG8sdGhpcy5pbm5lcj1uZXcgaWUoci50cmVlLC1yLm9mZnNldCl9ZWxzZSB0aGlzLmN1ckZyYWc9dGhpcy5pbm5lcj1udWxsfWhhc05vZGUoZSl7Zm9yKDt0aGlzLmN1ckZyYWcmJmUuZnJvbT49dGhpcy5jdXJUbzspdGhpcy5uZXh0RnJhZygpO3JldHVybiB0aGlzLmN1ckZyYWcmJnRoaXMuY3VyRnJhZy5mcm9tPD1lLmZyb20mJnRoaXMuY3VyVG8+PWUudG8mJnRoaXMuaW5uZXIuaGFzTm9kZShlKX1uZXh0RnJhZygpe3ZhciBlO2lmKHRoaXMuZnJhZ0krKyx0aGlzLmZyYWdJPT10aGlzLmZyYWdtZW50cy5sZW5ndGgpdGhpcy5jdXJGcmFnPXRoaXMuaW5uZXI9bnVsbDtlbHNle2xldCB0PXRoaXMuY3VyRnJhZz10aGlzLmZyYWdtZW50c1t0aGlzLmZyYWdJXTt0aGlzLmN1clRvPShlPXQudHJlZS5wcm9wKGZlKSkhPT1udWxsJiZlIT09dm9pZCAwP2U6dC50byx0aGlzLmlubmVyPW5ldyBpZSh0LnRyZWUsLXQub2Zmc2V0KX19ZmluZE1vdW50cyhlLHQpe3ZhciByO2xldCBpPVtdO2lmKHRoaXMuaW5uZXIpe3RoaXMuaW5uZXIuY3Vyc29yLm1vdmVUbyhlLDEpO2ZvcihsZXQgbj10aGlzLmlubmVyLmN1cnNvci5ub2RlO247bj1uLnBhcmVudCl7bGV0IHM9KHI9bi50cmVlKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIucHJvcCh3Lm1vdW50ZWQpO2lmKHMmJnMucGFyc2VyPT10KWZvcihsZXQgbD10aGlzLmZyYWdJO2w8dGhpcy5mcmFnbWVudHMubGVuZ3RoO2wrKyl7bGV0IGY9dGhpcy5mcmFnbWVudHNbbF07aWYoZi5mcm9tPj1uLnRvKWJyZWFrO2YudHJlZT09dGhpcy5jdXJGcmFnLnRyZWUmJmkucHVzaCh7ZnJhZzpmLHBvczpuLmZyb20tZi5vZmZzZXQsbW91bnQ6c30pfX19cmV0dXJuIGl9fTtmdW5jdGlvbiB3ZShoLGUpe2xldCB0PW51bGwscj1lO2ZvcihsZXQgaT0xLG49MDtpPGgubGVuZ3RoO2krKyl7bGV0IHM9aFtpLTFdLnRvLGw9aFtpXS5mcm9tO2Zvcig7bjxyLmxlbmd0aDtuKyspe2xldCBmPXJbbl07aWYoZi5mcm9tPj1sKWJyZWFrO2YudG88PXN8fCh0fHwocj10PWUuc2xpY2UoKSksZi5mcm9tPHM/KHRbbl09bmV3IEIoZi5mcm9tLHMpLGYudG8+bCYmdC5zcGxpY2UobisxLDAsbmV3IEIobCxmLnRvKSkpOmYudG8+bD90W24tLV09bmV3IEIobCxmLnRvKTp0LnNwbGljZShuLS0sMSkpfX1yZXR1cm4gcn1mdW5jdGlvbiBCZShoLGUsdCxyKXtsZXQgaT0wLG49MCxzPSExLGw9ITEsZj0tMWU5LHU9W107Zm9yKDs7KXtsZXQgbz1pPT1oLmxlbmd0aD8xZTk6cz9oW2ldLnRvOmhbaV0uZnJvbSxjPW49PWUubGVuZ3RoPzFlOTpsP2Vbbl0udG86ZVtuXS5mcm9tO2lmKHMhPWwpe2xldCBhPU1hdGgubWF4KGYsdCkseT1NYXRoLm1pbihvLGMscik7YTx5JiZ1LnB1c2gobmV3IEIoYSx5KSl9aWYoZj1NYXRoLm1pbihvLGMpLGY9PTFlOSlicmVhaztvPT1mJiYocz8ocz0hMSxpKyspOnM9ITApLGM9PWYmJihsPyhsPSExLG4rKyk6bD0hMCl9cmV0dXJuIHV9ZnVuY3Rpb24gdmUoaCxlKXtsZXQgdD1bXTtmb3IobGV0e3BvczpyLG1vdW50OmksZnJhZzpufW9mIGgpe2xldCBzPXIrKGkub3ZlcmxheT9pLm92ZXJsYXlbMF0uZnJvbTowKSxsPXMraS50cmVlLmxlbmd0aCxmPU1hdGgubWF4KG4uZnJvbSxzKSx1PU1hdGgubWluKG4udG8sbCk7aWYoaS5vdmVybGF5KXtsZXQgbz1pLm92ZXJsYXkubWFwKGE9Pm5ldyBCKGEuZnJvbStyLGEudG8rcikpLGM9QmUoZSxvLGYsdSk7Zm9yKGxldCBhPTAseT1mOzthKyspe2xldCBkPWE9PWMubGVuZ3RoLFM9ZD91OmNbYV0uZnJvbTtpZihTPnkmJnQucHVzaChuZXcgRyh5LFMsaS50cmVlLC1zLG4uZnJvbT49eXx8bi5vcGVuU3RhcnQsbi50bzw9U3x8bi5vcGVuRW5kKSksZClicmVhazt5PWNbYV0udG99fWVsc2UgdC5wdXNoKG5ldyBHKGYsdSxpLnRyZWUsLXMsbi5mcm9tPj1zfHxuLm9wZW5TdGFydCxuLnRvPD1sfHxuLm9wZW5FbmQpKX1yZXR1cm4gdH1leHBvcnR7SWUgYXMgRGVmYXVsdEJ1ZmZlckxlbmd0aCxBIGFzIEl0ZXJNb2RlLG5lIGFzIE1vdW50ZWRUcmVlLHcgYXMgTm9kZVByb3AsWiBhcyBOb2RlU2V0LE4gYXMgTm9kZVR5cGUsYmUgYXMgTm9kZVdlYWtNYXAseWUgYXMgUGFyc2VyLFAgYXMgVHJlZSxUIGFzIFRyZWVCdWZmZXIsViBhcyBUcmVlQ3Vyc29yLEcgYXMgVHJlZUZyYWdtZW50LE5lIGFzIHBhcnNlTWl4ZWR9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBsZXplci9oaWdobGlnaHRAMS4xLjEpIGRlbm8gcHJvZHVjdGlvbiAqL1xuaW1wb3J0e05vZGVQcm9wIGFzIEp9ZnJvbVwiL3Y5Ni9AbGV6ZXIvY29tbW9uQDEuMC4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzL2Rlbm8vY29tbW9uLmpzXCI7dmFyIEw9MCxmPWNsYXNze2NvbnN0cnVjdG9yKHQsYSxpKXt0aGlzLnNldD10LHRoaXMuYmFzZT1hLHRoaXMubW9kaWZpZWQ9aSx0aGlzLmlkPUwrK31zdGF0aWMgZGVmaW5lKHQpe2lmKHQ/LmJhc2UpdGhyb3cgbmV3IEVycm9yKFwiQ2FuIG5vdCBkZXJpdmUgZnJvbSBhIG1vZGlmaWVkIHRhZ1wiKTtsZXQgYT1uZXcgZihbXSxudWxsLFtdKTtpZihhLnNldC5wdXNoKGEpLHQpZm9yKGxldCBpIG9mIHQuc2V0KWEuc2V0LnB1c2goaSk7cmV0dXJuIGF9c3RhdGljIGRlZmluZU1vZGlmaWVyKCl7bGV0IHQ9bmV3IHY7cmV0dXJuIGE9PmEubW9kaWZpZWQuaW5kZXhPZih0KT4tMT9hOnYuZ2V0KGEuYmFzZXx8YSxhLm1vZGlmaWVkLmNvbmNhdCh0KS5zb3J0KChpLGwpPT5pLmlkLWwuaWQpKX19LFE9MCx2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pbnN0YW5jZXM9W10sdGhpcy5pZD1RKyt9c3RhdGljIGdldCh0LGEpe2lmKCFhLmxlbmd0aClyZXR1cm4gdDtsZXQgaT1hWzBdLmluc3RhbmNlcy5maW5kKG89Pm8uYmFzZT09dCYmVShhLG8ubW9kaWZpZWQpKTtpZihpKXJldHVybiBpO2xldCBsPVtdLHM9bmV3IGYobCx0LGEpO2ZvcihsZXQgbyBvZiBhKW8uaW5zdGFuY2VzLnB1c2gocyk7bGV0IGM9VihhKTtmb3IobGV0IG8gb2YgdC5zZXQpZm9yKGxldCBkIG9mIGMpbC5wdXNoKHYuZ2V0KG8sZCkpO3JldHVybiBzfX07ZnVuY3Rpb24gVShyLHQpe3JldHVybiByLmxlbmd0aD09dC5sZW5ndGgmJnIuZXZlcnkoKGEsaSk9PmE9PXRbaV0pfWZ1bmN0aW9uIFYocil7bGV0IHQ9W3JdO2ZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKWZvcihsZXQgaSBvZiBWKHIuc2xpY2UoMCxhKS5jb25jYXQoci5zbGljZShhKzEpKSkpdC5wdXNoKGkpO3JldHVybiB0fWZ1bmN0aW9uICQocil7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IGEgaW4gcil7bGV0IGk9clthXTtBcnJheS5pc0FycmF5KGkpfHwoaT1baV0pO2ZvcihsZXQgbCBvZiBhLnNwbGl0KFwiIFwiKSlpZihsKXtsZXQgcz1bXSxjPTIsbz1sO2ZvcihsZXQgcD0wOzspe2lmKG89PVwiLi4uXCImJnA+MCYmcCszPT1sLmxlbmd0aCl7Yz0xO2JyZWFrfWxldCBoPS9eXCIoPzpbXlwiXFxcXF18XFxcXC4pKj9cInxbXlxcLyFdKy8uZXhlYyhvKTtpZighaCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgcGF0aDogXCIrbCk7aWYocy5wdXNoKGhbMF09PVwiKlwiP1wiXCI6aFswXVswXT09J1wiJz9KU09OLnBhcnNlKGhbMF0pOmhbMF0pLHArPWhbMF0ubGVuZ3RoLHA9PWwubGVuZ3RoKWJyZWFrO2xldCBOPWxbcCsrXTtpZihwPT1sLmxlbmd0aCYmTj09XCIhXCIpe2M9MDticmVha31pZihOIT1cIi9cIil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgcGF0aDogXCIrbCk7bz1sLnNsaWNlKHApfWxldCBkPXMubGVuZ3RoLTEsZz1zW2RdO2lmKCFnKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBwYXRoOiBcIitsKTtsZXQgTz1uZXcgTShpLGMsZD4wP3Muc2xpY2UoMCxkKTpudWxsKTt0W2ddPU8uc29ydCh0W2ddKX19cmV0dXJuIHouYWRkKHQpfXZhciB6PW5ldyBKLE09Y2xhc3N7Y29uc3RydWN0b3IodCxhLGksbCl7dGhpcy50YWdzPXQsdGhpcy5tb2RlPWEsdGhpcy5jb250ZXh0PWksdGhpcy5uZXh0PWx9Z2V0IG9wYXF1ZSgpe3JldHVybiB0aGlzLm1vZGU9PTB9Z2V0IGluaGVyaXQoKXtyZXR1cm4gdGhpcy5tb2RlPT0xfXNvcnQodCl7cmV0dXJuIXR8fHQuZGVwdGg8dGhpcy5kZXB0aD8odGhpcy5uZXh0PXQsdGhpcyk6KHQubmV4dD10aGlzLnNvcnQodC5uZXh0KSx0KX1nZXQgZGVwdGgoKXtyZXR1cm4gdGhpcy5jb250ZXh0P3RoaXMuY29udGV4dC5sZW5ndGg6MH19O00uZW1wdHk9bmV3IE0oW10sMixudWxsKTtmdW5jdGlvbiBXKHIsdCl7bGV0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHMgb2YgcilpZighQXJyYXkuaXNBcnJheShzLnRhZykpYVtzLnRhZy5pZF09cy5jbGFzcztlbHNlIGZvcihsZXQgYyBvZiBzLnRhZylhW2MuaWRdPXMuY2xhc3M7bGV0e3Njb3BlOmksYWxsOmw9bnVsbH09dHx8e307cmV0dXJue3N0eWxlOnM9PntsZXQgYz1sO2ZvcihsZXQgbyBvZiBzKWZvcihsZXQgZCBvZiBvLnNldCl7bGV0IGc9YVtkLmlkXTtpZihnKXtjPWM/YytcIiBcIitnOmc7YnJlYWt9fXJldHVybiBjfSxzY29wZTppfX1mdW5jdGlvbiBYKHIsdCl7bGV0IGE9bnVsbDtmb3IobGV0IGkgb2Ygcil7bGV0IGw9aS5zdHlsZSh0KTtsJiYoYT1hP2ErXCIgXCIrbDpsKX1yZXR1cm4gYX1mdW5jdGlvbiBfKHIsdCxhLGk9MCxsPXIubGVuZ3RoKXtsZXQgcz1uZXcgUChpLEFycmF5LmlzQXJyYXkodCk/dDpbdF0sYSk7cy5oaWdobGlnaHRSYW5nZShyLmN1cnNvcigpLGksbCxcIlwiLHMuaGlnaGxpZ2h0ZXJzKSxzLmZsdXNoKGwpfXZhciBQPWNsYXNze2NvbnN0cnVjdG9yKHQsYSxpKXt0aGlzLmF0PXQsdGhpcy5oaWdobGlnaHRlcnM9YSx0aGlzLnNwYW49aSx0aGlzLmNsYXNzPVwiXCJ9c3RhcnRTcGFuKHQsYSl7YSE9dGhpcy5jbGFzcyYmKHRoaXMuZmx1c2godCksdD50aGlzLmF0JiYodGhpcy5hdD10KSx0aGlzLmNsYXNzPWEpfWZsdXNoKHQpe3Q+dGhpcy5hdCYmdGhpcy5jbGFzcyYmdGhpcy5zcGFuKHRoaXMuYXQsdCx0aGlzLmNsYXNzKX1oaWdobGlnaHRSYW5nZSh0LGEsaSxsLHMpe2xldHt0eXBlOmMsZnJvbTpvLHRvOmR9PXQ7aWYobz49aXx8ZDw9YSlyZXR1cm47Yy5pc1RvcCYmKHM9dGhpcy5oaWdobGlnaHRlcnMuZmlsdGVyKE49PiFOLnNjb3BlfHxOLnNjb3BlKGMpKSk7bGV0IGc9bCxPPVkodCl8fE0uZW1wdHkscD1YKHMsTy50YWdzKTtpZihwJiYoZyYmKGcrPVwiIFwiKSxnKz1wLE8ubW9kZT09MSYmKGwrPShsP1wiIFwiOlwiXCIpK3ApKSx0aGlzLnN0YXJ0U3Bhbih0LmZyb20sZyksTy5vcGFxdWUpcmV0dXJuO2xldCBoPXQudHJlZSYmdC50cmVlLnByb3AoSi5tb3VudGVkKTtpZihoJiZoLm92ZXJsYXkpe2xldCBOPXQubm9kZS5lbnRlcihoLm92ZXJsYXlbMF0uZnJvbStvLDEpLEc9dGhpcy5oaWdobGlnaHRlcnMuZmlsdGVyKHg9PiF4LnNjb3BlfHx4LnNjb3BlKGgudHJlZS50eXBlKSksRD10LmZpcnN0Q2hpbGQoKTtmb3IobGV0IHg9MCxTPW87O3grKyl7bGV0IEE9eDxoLm92ZXJsYXkubGVuZ3RoP2gub3ZlcmxheVt4XTpudWxsLHE9QT9BLmZyb20rbzpkLEg9TWF0aC5tYXgoYSxTKSxFPU1hdGgubWluKGkscSk7aWYoSDxFJiZEKWZvcig7dC5mcm9tPEUmJih0aGlzLmhpZ2hsaWdodFJhbmdlKHQsSCxFLGwscyksdGhpcy5zdGFydFNwYW4oTWF0aC5taW4oaSx0LnRvKSxnKSwhKHQudG8+PXF8fCF0Lm5leHRTaWJsaW5nKCkpKTspO2lmKCFBfHxxPmkpYnJlYWs7Uz1BLnRvK28sUz5hJiYodGhpcy5oaWdobGlnaHRSYW5nZShOLmN1cnNvcigpLE1hdGgubWF4KGEsQS5mcm9tK28pLE1hdGgubWluKGksUyksbCxHKSx0aGlzLnN0YXJ0U3BhbihTLGcpKX1EJiZ0LnBhcmVudCgpfWVsc2UgaWYodC5maXJzdENoaWxkKCkpe2RvIGlmKCEodC50bzw9YSkpe2lmKHQuZnJvbT49aSlicmVhazt0aGlzLmhpZ2hsaWdodFJhbmdlKHQsYSxpLGwscyksdGhpcy5zdGFydFNwYW4oTWF0aC5taW4oaSx0LnRvKSxnKX13aGlsZSh0Lm5leHRTaWJsaW5nKCkpO3QucGFyZW50KCl9fX07ZnVuY3Rpb24gWShyKXtsZXQgdD1yLnR5cGUucHJvcCh6KTtmb3IoO3QmJnQuY29udGV4dCYmIXIubWF0Y2hDb250ZXh0KHQuY29udGV4dCk7KXQ9dC5uZXh0O3JldHVybiB0fHxudWxsfXZhciBlPWYuZGVmaW5lLEk9ZSgpLGI9ZSgpLEI9ZShiKSxGPWUoYikseT1lKCksQz1lKHkpLEs9ZSh5KSxrPWUoKSx3PWUoayksbT1lKCksdT1lKCksaj1lKCksUj1lKGopLFQ9ZSgpLG49e2NvbW1lbnQ6SSxsaW5lQ29tbWVudDplKEkpLGJsb2NrQ29tbWVudDplKEkpLGRvY0NvbW1lbnQ6ZShJKSxuYW1lOmIsdmFyaWFibGVOYW1lOmUoYiksdHlwZU5hbWU6Qix0YWdOYW1lOmUoQikscHJvcGVydHlOYW1lOkYsYXR0cmlidXRlTmFtZTplKEYpLGNsYXNzTmFtZTplKGIpLGxhYmVsTmFtZTplKGIpLG5hbWVzcGFjZTplKGIpLG1hY3JvTmFtZTplKGIpLGxpdGVyYWw6eSxzdHJpbmc6Qyxkb2NTdHJpbmc6ZShDKSxjaGFyYWN0ZXI6ZShDKSxhdHRyaWJ1dGVWYWx1ZTplKEMpLG51bWJlcjpLLGludGVnZXI6ZShLKSxmbG9hdDplKEspLGJvb2w6ZSh5KSxyZWdleHA6ZSh5KSxlc2NhcGU6ZSh5KSxjb2xvcjplKHkpLHVybDplKHkpLGtleXdvcmQ6bSxzZWxmOmUobSksbnVsbDplKG0pLGF0b206ZShtKSx1bml0OmUobSksbW9kaWZpZXI6ZShtKSxvcGVyYXRvcktleXdvcmQ6ZShtKSxjb250cm9sS2V5d29yZDplKG0pLGRlZmluaXRpb25LZXl3b3JkOmUobSksbW9kdWxlS2V5d29yZDplKG0pLG9wZXJhdG9yOnUsZGVyZWZPcGVyYXRvcjplKHUpLGFyaXRobWV0aWNPcGVyYXRvcjplKHUpLGxvZ2ljT3BlcmF0b3I6ZSh1KSxiaXR3aXNlT3BlcmF0b3I6ZSh1KSxjb21wYXJlT3BlcmF0b3I6ZSh1KSx1cGRhdGVPcGVyYXRvcjplKHUpLGRlZmluaXRpb25PcGVyYXRvcjplKHUpLHR5cGVPcGVyYXRvcjplKHUpLGNvbnRyb2xPcGVyYXRvcjplKHUpLHB1bmN0dWF0aW9uOmosc2VwYXJhdG9yOmUoaiksYnJhY2tldDpSLGFuZ2xlQnJhY2tldDplKFIpLHNxdWFyZUJyYWNrZXQ6ZShSKSxwYXJlbjplKFIpLGJyYWNlOmUoUiksY29udGVudDprLGhlYWRpbmc6dyxoZWFkaW5nMTplKHcpLGhlYWRpbmcyOmUodyksaGVhZGluZzM6ZSh3KSxoZWFkaW5nNDplKHcpLGhlYWRpbmc1OmUodyksaGVhZGluZzY6ZSh3KSxjb250ZW50U2VwYXJhdG9yOmUoayksbGlzdDplKGspLHF1b3RlOmUoayksZW1waGFzaXM6ZShrKSxzdHJvbmc6ZShrKSxsaW5rOmUoayksbW9ub3NwYWNlOmUoayksc3RyaWtldGhyb3VnaDplKGspLGluc2VydGVkOmUoKSxkZWxldGVkOmUoKSxjaGFuZ2VkOmUoKSxpbnZhbGlkOmUoKSxtZXRhOlQsZG9jdW1lbnRNZXRhOmUoVCksYW5ub3RhdGlvbjplKFQpLHByb2Nlc3NpbmdJbnN0cnVjdGlvbjplKFQpLGRlZmluaXRpb246Zi5kZWZpbmVNb2RpZmllcigpLGNvbnN0YW50OmYuZGVmaW5lTW9kaWZpZXIoKSxmdW5jdGlvbjpmLmRlZmluZU1vZGlmaWVyKCksc3RhbmRhcmQ6Zi5kZWZpbmVNb2RpZmllcigpLGxvY2FsOmYuZGVmaW5lTW9kaWZpZXIoKSxzcGVjaWFsOmYuZGVmaW5lTW9kaWZpZXIoKX0sdHQ9Vyhbe3RhZzpuLmxpbmssY2xhc3M6XCJ0b2stbGlua1wifSx7dGFnOm4uaGVhZGluZyxjbGFzczpcInRvay1oZWFkaW5nXCJ9LHt0YWc6bi5lbXBoYXNpcyxjbGFzczpcInRvay1lbXBoYXNpc1wifSx7dGFnOm4uc3Ryb25nLGNsYXNzOlwidG9rLXN0cm9uZ1wifSx7dGFnOm4ua2V5d29yZCxjbGFzczpcInRvay1rZXl3b3JkXCJ9LHt0YWc6bi5hdG9tLGNsYXNzOlwidG9rLWF0b21cIn0se3RhZzpuLmJvb2wsY2xhc3M6XCJ0b2stYm9vbFwifSx7dGFnOm4udXJsLGNsYXNzOlwidG9rLXVybFwifSx7dGFnOm4ubGFiZWxOYW1lLGNsYXNzOlwidG9rLWxhYmVsTmFtZVwifSx7dGFnOm4uaW5zZXJ0ZWQsY2xhc3M6XCJ0b2staW5zZXJ0ZWRcIn0se3RhZzpuLmRlbGV0ZWQsY2xhc3M6XCJ0b2stZGVsZXRlZFwifSx7dGFnOm4ubGl0ZXJhbCxjbGFzczpcInRvay1saXRlcmFsXCJ9LHt0YWc6bi5zdHJpbmcsY2xhc3M6XCJ0b2stc3RyaW5nXCJ9LHt0YWc6bi5udW1iZXIsY2xhc3M6XCJ0b2stbnVtYmVyXCJ9LHt0YWc6W24ucmVnZXhwLG4uZXNjYXBlLG4uc3BlY2lhbChuLnN0cmluZyldLGNsYXNzOlwidG9rLXN0cmluZzJcIn0se3RhZzpuLnZhcmlhYmxlTmFtZSxjbGFzczpcInRvay12YXJpYWJsZU5hbWVcIn0se3RhZzpuLmxvY2FsKG4udmFyaWFibGVOYW1lKSxjbGFzczpcInRvay12YXJpYWJsZU5hbWUgdG9rLWxvY2FsXCJ9LHt0YWc6bi5kZWZpbml0aW9uKG4udmFyaWFibGVOYW1lKSxjbGFzczpcInRvay12YXJpYWJsZU5hbWUgdG9rLWRlZmluaXRpb25cIn0se3RhZzpuLnNwZWNpYWwobi52YXJpYWJsZU5hbWUpLGNsYXNzOlwidG9rLXZhcmlhYmxlTmFtZTJcIn0se3RhZzpuLmRlZmluaXRpb24obi5wcm9wZXJ0eU5hbWUpLGNsYXNzOlwidG9rLXByb3BlcnR5TmFtZSB0b2stZGVmaW5pdGlvblwifSx7dGFnOm4udHlwZU5hbWUsY2xhc3M6XCJ0b2stdHlwZU5hbWVcIn0se3RhZzpuLm5hbWVzcGFjZSxjbGFzczpcInRvay1uYW1lc3BhY2VcIn0se3RhZzpuLmNsYXNzTmFtZSxjbGFzczpcInRvay1jbGFzc05hbWVcIn0se3RhZzpuLm1hY3JvTmFtZSxjbGFzczpcInRvay1tYWNyb05hbWVcIn0se3RhZzpuLnByb3BlcnR5TmFtZSxjbGFzczpcInRvay1wcm9wZXJ0eU5hbWVcIn0se3RhZzpuLm9wZXJhdG9yLGNsYXNzOlwidG9rLW9wZXJhdG9yXCJ9LHt0YWc6bi5jb21tZW50LGNsYXNzOlwidG9rLWNvbW1lbnRcIn0se3RhZzpuLm1ldGEsY2xhc3M6XCJ0b2stbWV0YVwifSx7dGFnOm4uaW52YWxpZCxjbGFzczpcInRvay1pbnZhbGlkXCJ9LHt0YWc6bi5wdW5jdHVhdGlvbixjbGFzczpcInRvay1wdW5jdHVhdGlvblwifV0pO2V4cG9ydHtmIGFzIFRhZyx0dCBhcyBjbGFzc0hpZ2hsaWdodGVyLFkgYXMgZ2V0U3R5bGVUYWdzLF8gYXMgaGlnaGxpZ2h0VHJlZSwkIGFzIHN0eWxlVGFncyxXIGFzIHRhZ0hpZ2hsaWdodGVyLG4gYXMgdGFnc307XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoc3R5bGUtbW9kQDQuMC4wKSBkZW5vIHByb2R1Y3Rpb24gKi9cbnZhciBTPVwiXFx1MDM3Q1wiLHc9dHlwZW9mIFN5bWJvbD5cInVcIj9cIl9fXCIrUzpTeW1ib2wuZm9yKFMpLGM9dHlwZW9mIFN5bWJvbD5cInVcIj9cIl9fc3R5bGVTZXRcIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU4KTpTeW1ib2woXCJzdHlsZVNldFwiKSxiPXR5cGVvZiBnbG9iYWxUaGlzPFwidVwiP2dsb2JhbFRoaXM6dHlwZW9mIGRvY3VtZW50PFwidVwiP3dpbmRvdzp7fSxUPWNsYXNze2NvbnN0cnVjdG9yKGUsbCl7dGhpcy5ydWxlcz1bXTtsZXR7ZmluaXNoOnV9PWx8fHt9O2Z1bmN0aW9uIG4odCl7cmV0dXJuL15ALy50ZXN0KHQpP1t0XTp0LnNwbGl0KC8sXFxzKi8pfWZ1bmN0aW9uIHModCxpLGgseCl7bGV0IGQ9W10scj0vXkAoXFx3KylcXGIvLmV4ZWModFswXSksZz1yJiZyWzFdPT1cImtleWZyYW1lc1wiO2lmKHImJmk9PW51bGwpcmV0dXJuIGgucHVzaCh0WzBdK1wiO1wiKTtmb3IobGV0IGEgaW4gaSl7bGV0IG89aVthXTtpZigvJi8udGVzdChhKSlzKGEuc3BsaXQoLyxcXHMqLykubWFwKGY9PnQubWFwKHk9PmYucmVwbGFjZSgvJi8seSkpKS5yZWR1Y2UoKGYseSk9PmYuY29uY2F0KHkpKSxvLGgpO2Vsc2UgaWYobyYmdHlwZW9mIG89PVwib2JqZWN0XCIpe2lmKCFyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgKFwiK2ErXCIpIHNob3VsZCBiZSBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7cyhuKGEpLG8sZCxnKX1lbHNlIG8hPW51bGwmJmQucHVzaChhLnJlcGxhY2UoL18uKi8sXCJcIikucmVwbGFjZSgvW0EtWl0vZyxmPT5cIi1cIitmLnRvTG93ZXJDYXNlKCkpK1wiOiBcIitvK1wiO1wiKX0oZC5sZW5ndGh8fGcpJiZoLnB1c2goKHUmJiFyJiYheD90Lm1hcCh1KTp0KS5qb2luKFwiLCBcIikrXCIge1wiK2Quam9pbihcIiBcIikrXCJ9XCIpfWZvcihsZXQgdCBpbiBlKXMobih0KSxlW3RdLHRoaXMucnVsZXMpfWdldFJ1bGVzKCl7cmV0dXJuIHRoaXMucnVsZXMuam9pbihgXG5gKX1zdGF0aWMgbmV3TmFtZSgpe2xldCBlPWJbd118fDE7cmV0dXJuIGJbd109ZSsxLFMrZS50b1N0cmluZygzNil9c3RhdGljIG1vdW50KGUsbCl7KGVbY118fG5ldyBtKGUpKS5tb3VudChBcnJheS5pc0FycmF5KGwpP2w6W2xdKX19LHA9bnVsbCxtPWNsYXNze2NvbnN0cnVjdG9yKGUpe2lmKCFlLmhlYWQmJmUuYWRvcHRlZFN0eWxlU2hlZXRzJiZ0eXBlb2YgQ1NTU3R5bGVTaGVldDxcInVcIil7aWYocClyZXR1cm4gZS5hZG9wdGVkU3R5bGVTaGVldHM9W3Auc2hlZXRdLmNvbmNhdChlLmFkb3B0ZWRTdHlsZVNoZWV0cyksZVtjXT1wO3RoaXMuc2hlZXQ9bmV3IENTU1N0eWxlU2hlZXQsZS5hZG9wdGVkU3R5bGVTaGVldHM9W3RoaXMuc2hlZXRdLmNvbmNhdChlLmFkb3B0ZWRTdHlsZVNoZWV0cykscD10aGlzfWVsc2V7dGhpcy5zdHlsZVRhZz0oZS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7bGV0IGw9ZS5oZWFkfHxlO2wuaW5zZXJ0QmVmb3JlKHRoaXMuc3R5bGVUYWcsbC5maXJzdENoaWxkKX10aGlzLm1vZHVsZXM9W10sZVtjXT10aGlzfW1vdW50KGUpe2xldCBsPXRoaXMuc2hlZXQsdT0wLG49MDtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyl7bGV0IHQ9ZVtzXSxpPXRoaXMubW9kdWxlcy5pbmRleE9mKHQpO2lmKGk8biYmaT4tMSYmKHRoaXMubW9kdWxlcy5zcGxpY2UoaSwxKSxuLS0saT0tMSksaT09LTEpe2lmKHRoaXMubW9kdWxlcy5zcGxpY2UobisrLDAsdCksbClmb3IobGV0IGg9MDtoPHQucnVsZXMubGVuZ3RoO2grKylsLmluc2VydFJ1bGUodC5ydWxlc1toXSx1KyspfWVsc2V7Zm9yKDtuPGk7KXUrPXRoaXMubW9kdWxlc1tuKytdLnJ1bGVzLmxlbmd0aDt1Kz10LnJ1bGVzLmxlbmd0aCxuKyt9fWlmKCFsKXtsZXQgcz1cIlwiO2ZvcihsZXQgdD0wO3Q8dGhpcy5tb2R1bGVzLmxlbmd0aDt0Kyspcys9dGhpcy5tb2R1bGVzW3RdLmdldFJ1bGVzKCkrYFxuYDt0aGlzLnN0eWxlVGFnLnRleHRDb250ZW50PXN9fX07ZXhwb3J0e1QgYXMgU3R5bGVNb2R1bGV9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBjb2RlbWlycm9yL2xhbmd1YWdlQDYuMi4xKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydHtOb2RlUHJvcCBhcyB2LFRyZWUgYXMgcCxJdGVyTW9kZSBhcyBxdCxUcmVlRnJhZ21lbnQgYXMgVyxQYXJzZXIgYXMga3QsTm9kZVR5cGUgYXMgSixOb2RlU2V0IGFzIEh0fWZyb21cIi92OTYvQGxlemVyL2NvbW1vbkAxLjAuMS9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWMy9kZW5vL2NvbW1vbi5qc1wiO2ltcG9ydHtTdGF0ZUVmZmVjdCBhcyBLLFN0YXRlRmllbGQgYXMgb3QsRmFjZXQgYXMgYixFZGl0b3JTdGF0ZSBhcyBPLGNvdW50Q29sdW1uIGFzIEp0LGNvbWJpbmVDb25maWcgYXMgYnQsUmFuZ2VTZXQgYXMgd3QsUmFuZ2VTZXRCdWlsZGVyIGFzIHl0LFByZWMgYXMgS3R9ZnJvbVwiQGNvZGVtaXJyb3Ivc3RhdGVcIjtpbXBvcnR7Vmlld1BsdWdpbiBhcyBsdCxsb2dFeGNlcHRpb24gYXMgX3QsRGVjb3JhdGlvbiBhcyBrLEVkaXRvclZpZXcgYXMgeSxXaWRnZXRUeXBlIGFzIFF0LGd1dHRlciBhcyBYdCxHdXR0ZXJNYXJrZXIgYXMgWXR9ZnJvbVwiQGNvZGVtaXJyb3Ivdmlld1wiO2ltcG9ydHt0YWdzIGFzIGYsdGFnSGlnaGxpZ2h0ZXIgYXMgWnQsaGlnaGxpZ2h0VHJlZSBhcyB0ZSxzdHlsZVRhZ3MgYXMgZWV9ZnJvbVwiL3Y5Ni9AbGV6ZXIvaGlnaGxpZ2h0QDEuMS4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzL2Rlbm8vaGlnaGxpZ2h0LmpzXCI7aW1wb3J0e1N0eWxlTW9kdWxlIGFzIGZ0fWZyb21cIi92OTYvc3R5bGUtbW9kQDQuMC4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzL2Rlbm8vc3R5bGUtbW9kLmpzXCI7dmFyIFksVD1uZXcgdjtmdW5jdGlvbiB2dChuKXtyZXR1cm4gYi5kZWZpbmUoe2NvbWJpbmU6bj90PT50LmNvbmNhdChuKTp2b2lkIDB9KX12YXIgYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUscj1bXSl7dGhpcy5kYXRhPXQsTy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJ0cmVlXCIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsXCJ0cmVlXCIse2dldCgpe3JldHVybiBtKHRoaXMpfX0pLHRoaXMucGFyc2VyPWUsdGhpcy5leHRlbnNpb249W1Aub2YodGhpcyksTy5sYW5ndWFnZURhdGEub2YoKGkscyxvKT0+aS5mYWNldCh1dChpLHMsbykpKV0uY29uY2F0KHIpfWlzQWN0aXZlQXQodCxlLHI9LTEpe3JldHVybiB1dCh0LGUscik9PXRoaXMuZGF0YX1maW5kUmVnaW9ucyh0KXtsZXQgZT10LmZhY2V0KFApO2lmKGU/LmRhdGE9PXRoaXMuZGF0YSlyZXR1cm5be2Zyb206MCx0bzp0LmRvYy5sZW5ndGh9XTtpZighZXx8IWUuYWxsb3dzTmVzdGluZylyZXR1cm5bXTtsZXQgcj1bXSxpPShzLG8pPT57aWYocy5wcm9wKFQpPT10aGlzLmRhdGEpe3IucHVzaCh7ZnJvbTpvLHRvOm8rcy5sZW5ndGh9KTtyZXR1cm59bGV0IGw9cy5wcm9wKHYubW91bnRlZCk7aWYobCl7aWYobC50cmVlLnByb3AoVCk9PXRoaXMuZGF0YSl7aWYobC5vdmVybGF5KWZvcihsZXQgYSBvZiBsLm92ZXJsYXkpci5wdXNoKHtmcm9tOmEuZnJvbStvLHRvOmEudG8rb30pO2Vsc2Ugci5wdXNoKHtmcm9tOm8sdG86bytzLmxlbmd0aH0pO3JldHVybn1lbHNlIGlmKGwub3ZlcmxheSl7bGV0IGE9ci5sZW5ndGg7aWYoaShsLnRyZWUsbC5vdmVybGF5WzBdLmZyb20rbyksci5sZW5ndGg+YSlyZXR1cm59fWZvcihsZXQgYT0wO2E8cy5jaGlsZHJlbi5sZW5ndGg7YSsrKXtsZXQgaD1zLmNoaWxkcmVuW2FdO2ggaW5zdGFuY2VvZiBwJiZpKGgscy5wb3NpdGlvbnNbYV0rbyl9fTtyZXR1cm4gaShtKHQpLDApLHJ9Z2V0IGFsbG93c05lc3RpbmcoKXtyZXR1cm4hMH19O2Muc2V0U3RhdGU9Sy5kZWZpbmUoKTtmdW5jdGlvbiB1dChuLHQsZSl7bGV0IHI9bi5mYWNldChQKTtpZighcilyZXR1cm4gbnVsbDtsZXQgaT1yLmRhdGE7aWYoci5hbGxvd3NOZXN0aW5nKWZvcihsZXQgcz1tKG4pLnRvcE5vZGU7cztzPXMuZW50ZXIodCxlLHF0LkV4Y2x1ZGVCdWZmZXJzKSlpPXMudHlwZS5wcm9wKFQpfHxpO3JldHVybiBpfXZhciBCPWNsYXNzIGV4dGVuZHMgY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5wYXJzZXI9ZX1zdGF0aWMgZGVmaW5lKHQpe2xldCBlPXZ0KHQubGFuZ3VhZ2VEYXRhKTtyZXR1cm4gbmV3IEIoZSx0LnBhcnNlci5jb25maWd1cmUoe3Byb3BzOltULmFkZChyPT5yLmlzVG9wP2U6dm9pZCAwKV19KSl9Y29uZmlndXJlKHQpe3JldHVybiBuZXcgQih0aGlzLmRhdGEsdGhpcy5wYXJzZXIuY29uZmlndXJlKHQpKX1nZXQgYWxsb3dzTmVzdGluZygpe3JldHVybiB0aGlzLnBhcnNlci5oYXNXcmFwcGVycygpfX07ZnVuY3Rpb24gbShuKXtsZXQgdD1uLmZpZWxkKGMuc3RhdGUsITEpO3JldHVybiB0P3QudHJlZTpwLmVtcHR5fWZ1bmN0aW9uIG5lKG4sdCxlPTUwKXt2YXIgcjtsZXQgaT0ocj1uLmZpZWxkKGMuc3RhdGUsITEpKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY29udGV4dDtyZXR1cm4gaSYmKGkuaXNEb25lKHQpfHxpLndvcmsoZSx0KSk/aS50cmVlOm51bGx9ZnVuY3Rpb24gemUobix0PW4uZG9jLmxlbmd0aCl7dmFyIGU7cmV0dXJuKChlPW4uZmllbGQoYy5zdGF0ZSwhMSkpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5jb250ZXh0LmlzRG9uZSh0KSl8fCExfWZ1bmN0aW9uIEdlKG4sdD1uLnZpZXdwb3J0LnRvLGU9MTAwKXtsZXQgcj1uZShuLnN0YXRlLHQsZSk7cmV0dXJuIHIhPW0obi5zdGF0ZSkmJm4uZGlzcGF0Y2goe30pLCEhcn1mdW5jdGlvbiBxZShuKXt2YXIgdDtyZXR1cm4oKHQ9bi5wbHVnaW4oU3QpKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQuaXNXb3JraW5nKCkpfHwhMX12YXIgZXQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlPXQubGVuZ3RoKXt0aGlzLmRvYz10LHRoaXMubGVuZ3RoPWUsdGhpcy5jdXJzb3JQb3M9MCx0aGlzLnN0cmluZz1cIlwiLHRoaXMuY3Vyc29yPXQuaXRlcigpfXN5bmNUbyh0KXtyZXR1cm4gdGhpcy5zdHJpbmc9dGhpcy5jdXJzb3IubmV4dCh0LXRoaXMuY3Vyc29yUG9zKS52YWx1ZSx0aGlzLmN1cnNvclBvcz10K3RoaXMuc3RyaW5nLmxlbmd0aCx0aGlzLmN1cnNvclBvcy10aGlzLnN0cmluZy5sZW5ndGh9Y2h1bmsodCl7cmV0dXJuIHRoaXMuc3luY1RvKHQpLHRoaXMuc3RyaW5nfWdldCBsaW5lQ2h1bmtzKCl7cmV0dXJuITB9cmVhZCh0LGUpe2xldCByPXRoaXMuY3Vyc29yUG9zLXRoaXMuc3RyaW5nLmxlbmd0aDtyZXR1cm4gdDxyfHxlPj10aGlzLmN1cnNvclBvcz90aGlzLmRvYy5zbGljZVN0cmluZyh0LGUpOnRoaXMuc3RyaW5nLnNsaWNlKHQtcixlLXIpfX0sST1udWxsLHg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLHI9W10saSxzLG8sbCxhKXt0aGlzLnBhcnNlcj10LHRoaXMuc3RhdGU9ZSx0aGlzLmZyYWdtZW50cz1yLHRoaXMudHJlZT1pLHRoaXMudHJlZUxlbj1zLHRoaXMudmlld3BvcnQ9byx0aGlzLnNraXBwZWQ9bCx0aGlzLnNjaGVkdWxlT249YSx0aGlzLnBhcnNlPW51bGwsdGhpcy50ZW1wU2tpcHBlZD1bXX1zdGF0aWMgY3JlYXRlKHQsZSxyKXtyZXR1cm4gbmV3IHgodCxlLFtdLHAuZW1wdHksMCxyLFtdLG51bGwpfXN0YXJ0UGFyc2UoKXtyZXR1cm4gdGhpcy5wYXJzZXIuc3RhcnRQYXJzZShuZXcgZXQodGhpcy5zdGF0ZS5kb2MpLHRoaXMuZnJhZ21lbnRzKX13b3JrKHQsZSl7cmV0dXJuIGUhPW51bGwmJmU+PXRoaXMuc3RhdGUuZG9jLmxlbmd0aCYmKGU9dm9pZCAwKSx0aGlzLnRyZWUhPXAuZW1wdHkmJnRoaXMuaXNEb25lKGU/P3RoaXMuc3RhdGUuZG9jLmxlbmd0aCk/KHRoaXMudGFrZVRyZWUoKSwhMCk6dGhpcy53aXRoQ29udGV4dCgoKT0+e3ZhciByO2lmKHR5cGVvZiB0PT1cIm51bWJlclwiKXtsZXQgaT1EYXRlLm5vdygpK3Q7dD0oKT0+RGF0ZS5ub3coKT5pfWZvcih0aGlzLnBhcnNlfHwodGhpcy5wYXJzZT10aGlzLnN0YXJ0UGFyc2UoKSksZSE9bnVsbCYmKHRoaXMucGFyc2Uuc3RvcHBlZEF0PT1udWxsfHx0aGlzLnBhcnNlLnN0b3BwZWRBdD5lKSYmZTx0aGlzLnN0YXRlLmRvYy5sZW5ndGgmJnRoaXMucGFyc2Uuc3RvcEF0KGUpOzspe2xldCBpPXRoaXMucGFyc2UuYWR2YW5jZSgpO2lmKGkpaWYodGhpcy5mcmFnbWVudHM9dGhpcy53aXRob3V0VGVtcFNraXBwZWQoVy5hZGRUcmVlKGksdGhpcy5mcmFnbWVudHMsdGhpcy5wYXJzZS5zdG9wcGVkQXQhPW51bGwpKSx0aGlzLnRyZWVMZW49KHI9dGhpcy5wYXJzZS5zdG9wcGVkQXQpIT09bnVsbCYmciE9PXZvaWQgMD9yOnRoaXMuc3RhdGUuZG9jLmxlbmd0aCx0aGlzLnRyZWU9aSx0aGlzLnBhcnNlPW51bGwsdGhpcy50cmVlTGVuPChlPz90aGlzLnN0YXRlLmRvYy5sZW5ndGgpKXRoaXMucGFyc2U9dGhpcy5zdGFydFBhcnNlKCk7ZWxzZSByZXR1cm4hMDtpZih0KCkpcmV0dXJuITF9fSl9dGFrZVRyZWUoKXtsZXQgdCxlO3RoaXMucGFyc2UmJih0PXRoaXMucGFyc2UucGFyc2VkUG9zKT49dGhpcy50cmVlTGVuJiYoKHRoaXMucGFyc2Uuc3RvcHBlZEF0PT1udWxsfHx0aGlzLnBhcnNlLnN0b3BwZWRBdD50KSYmdGhpcy5wYXJzZS5zdG9wQXQodCksdGhpcy53aXRoQ29udGV4dCgoKT0+e2Zvcig7IShlPXRoaXMucGFyc2UuYWR2YW5jZSgpKTspO30pLHRoaXMudHJlZUxlbj10LHRoaXMudHJlZT1lLHRoaXMuZnJhZ21lbnRzPXRoaXMud2l0aG91dFRlbXBTa2lwcGVkKFcuYWRkVHJlZSh0aGlzLnRyZWUsdGhpcy5mcmFnbWVudHMsITApKSx0aGlzLnBhcnNlPW51bGwpfXdpdGhDb250ZXh0KHQpe2xldCBlPUk7ST10aGlzO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7ST1lfX13aXRob3V0VGVtcFNraXBwZWQodCl7Zm9yKGxldCBlO2U9dGhpcy50ZW1wU2tpcHBlZC5wb3AoKTspdD1jdCh0LGUuZnJvbSxlLnRvKTtyZXR1cm4gdH1jaGFuZ2VzKHQsZSl7bGV0e2ZyYWdtZW50czpyLHRyZWU6aSx0cmVlTGVuOnMsdmlld3BvcnQ6byxza2lwcGVkOmx9PXRoaXM7aWYodGhpcy50YWtlVHJlZSgpLCF0LmVtcHR5KXtsZXQgYT1bXTtpZih0Lml0ZXJDaGFuZ2VkUmFuZ2VzKChoLHUsZCxnKT0+YS5wdXNoKHtmcm9tQTpoLHRvQTp1LGZyb21COmQsdG9COmd9KSkscj1XLmFwcGx5Q2hhbmdlcyhyLGEpLGk9cC5lbXB0eSxzPTAsbz17ZnJvbTp0Lm1hcFBvcyhvLmZyb20sLTEpLHRvOnQubWFwUG9zKG8udG8sMSl9LHRoaXMuc2tpcHBlZC5sZW5ndGgpe2w9W107Zm9yKGxldCBoIG9mIHRoaXMuc2tpcHBlZCl7bGV0IHU9dC5tYXBQb3MoaC5mcm9tLDEpLGQ9dC5tYXBQb3MoaC50bywtMSk7dTxkJiZsLnB1c2goe2Zyb206dSx0bzpkfSl9fX1yZXR1cm4gbmV3IHgodGhpcy5wYXJzZXIsZSxyLGkscyxvLGwsdGhpcy5zY2hlZHVsZU9uKX11cGRhdGVWaWV3cG9ydCh0KXtpZih0aGlzLnZpZXdwb3J0LmZyb209PXQuZnJvbSYmdGhpcy52aWV3cG9ydC50bz09dC50bylyZXR1cm4hMTt0aGlzLnZpZXdwb3J0PXQ7bGV0IGU9dGhpcy5za2lwcGVkLmxlbmd0aDtmb3IobGV0IHI9MDtyPHRoaXMuc2tpcHBlZC5sZW5ndGg7cisrKXtsZXR7ZnJvbTppLHRvOnN9PXRoaXMuc2tpcHBlZFtyXTtpPHQudG8mJnM+dC5mcm9tJiYodGhpcy5mcmFnbWVudHM9Y3QodGhpcy5mcmFnbWVudHMsaSxzKSx0aGlzLnNraXBwZWQuc3BsaWNlKHItLSwxKSl9cmV0dXJuIHRoaXMuc2tpcHBlZC5sZW5ndGg+PWU/ITE6KHRoaXMucmVzZXQoKSwhMCl9cmVzZXQoKXt0aGlzLnBhcnNlJiYodGhpcy50YWtlVHJlZSgpLHRoaXMucGFyc2U9bnVsbCl9c2tpcFVudGlsSW5WaWV3KHQsZSl7dGhpcy5za2lwcGVkLnB1c2goe2Zyb206dCx0bzplfSl9c3RhdGljIGdldFNraXBwaW5nUGFyc2VyKHQpe3JldHVybiBuZXcgY2xhc3MgZXh0ZW5kcyBrdHtjcmVhdGVQYXJzZShlLHIsaSl7bGV0IHM9aVswXS5mcm9tLG89aVtpLmxlbmd0aC0xXS50bztyZXR1cm57cGFyc2VkUG9zOnMsYWR2YW5jZSgpe2xldCBhPUk7aWYoYSl7Zm9yKGxldCBoIG9mIGkpYS50ZW1wU2tpcHBlZC5wdXNoKGgpO3QmJihhLnNjaGVkdWxlT249YS5zY2hlZHVsZU9uP1Byb21pc2UuYWxsKFthLnNjaGVkdWxlT24sdF0pOnQpfXJldHVybiB0aGlzLnBhcnNlZFBvcz1vLG5ldyBwKEoubm9uZSxbXSxbXSxvLXMpfSxzdG9wcGVkQXQ6bnVsbCxzdG9wQXQoKXt9fX19fWlzRG9uZSh0KXt0PU1hdGgubWluKHQsdGhpcy5zdGF0ZS5kb2MubGVuZ3RoKTtsZXQgZT10aGlzLmZyYWdtZW50cztyZXR1cm4gdGhpcy50cmVlTGVuPj10JiZlLmxlbmd0aCYmZVswXS5mcm9tPT0wJiZlWzBdLnRvPj10fXN0YXRpYyBnZXQoKXtyZXR1cm4gSX19O2Z1bmN0aW9uIGN0KG4sdCxlKXtyZXR1cm4gVy5hcHBseUNoYW5nZXMobixbe2Zyb21BOnQsdG9BOmUsZnJvbUI6dCx0b0I6ZX1dKX12YXIgUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLnRyZWU9dC50cmVlfWFwcGx5KHQpe2lmKCF0LmRvY0NoYW5nZWQmJnRoaXMudHJlZT09dGhpcy5jb250ZXh0LnRyZWUpcmV0dXJuIHRoaXM7bGV0IGU9dGhpcy5jb250ZXh0LmNoYW5nZXModC5jaGFuZ2VzLHQuc3RhdGUpLHI9dGhpcy5jb250ZXh0LnRyZWVMZW49PXQuc3RhcnRTdGF0ZS5kb2MubGVuZ3RoP3ZvaWQgMDpNYXRoLm1heCh0LmNoYW5nZXMubWFwUG9zKHRoaXMuY29udGV4dC50cmVlTGVuKSxlLnZpZXdwb3J0LnRvKTtyZXR1cm4gZS53b3JrKDIwLHIpfHxlLnRha2VUcmVlKCksbmV3IFMoZSl9c3RhdGljIGluaXQodCl7bGV0IGU9TWF0aC5taW4oM2UzLHQuZG9jLmxlbmd0aCkscj14LmNyZWF0ZSh0LmZhY2V0KFApLnBhcnNlcix0LHtmcm9tOjAsdG86ZX0pO3JldHVybiByLndvcmsoMjAsZSl8fHIudGFrZVRyZWUoKSxuZXcgUyhyKX19O2Muc3RhdGU9b3QuZGVmaW5lKHtjcmVhdGU6Uy5pbml0LHVwZGF0ZShuLHQpe2ZvcihsZXQgZSBvZiB0LmVmZmVjdHMpaWYoZS5pcyhjLnNldFN0YXRlKSlyZXR1cm4gZS52YWx1ZTtyZXR1cm4gdC5zdGFydFN0YXRlLmZhY2V0KFApIT10LnN0YXRlLmZhY2V0KFApP1MuaW5pdCh0LnN0YXRlKTpuLmFwcGx5KHQpfX0pO3ZhciB4dD1uPT57bGV0IHQ9c2V0VGltZW91dCgoKT0+bigpLDUwMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dCh0KX07dHlwZW9mIHJlcXVlc3RJZGxlQ2FsbGJhY2s8XCJ1XCImJih4dD1uPT57bGV0IHQ9LTEsZT1zZXRUaW1lb3V0KCgpPT57dD1yZXF1ZXN0SWRsZUNhbGxiYWNrKG4se3RpbWVvdXQ6NTAwLTEwMH0pfSwxMDApO3JldHVybigpPT50PDA/Y2xlYXJUaW1lb3V0KGUpOmNhbmNlbElkbGVDYWxsYmFjayh0KX0pO3ZhciBaPXR5cGVvZiBuYXZpZ2F0b3I8XCJ1XCImJigoWT1uYXZpZ2F0b3Iuc2NoZWR1bGluZyk9PT1udWxsfHxZPT09dm9pZCAwP3ZvaWQgMDpZLmlzSW5wdXRQZW5kaW5nKT8oKT0+bmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcoKTpudWxsLFN0PWx0LmZyb21DbGFzcyhjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnZpZXc9dCx0aGlzLndvcmtpbmc9bnVsbCx0aGlzLndvcmtTY2hlZHVsZWQ9MCx0aGlzLmNodW5rRW5kPS0xLHRoaXMuY2h1bmtCdWRnZXQ9LTEsdGhpcy53b3JrPXRoaXMud29yay5iaW5kKHRoaXMpLHRoaXMuc2NoZWR1bGVXb3JrKCl9dXBkYXRlKHQpe2xldCBlPXRoaXMudmlldy5zdGF0ZS5maWVsZChjLnN0YXRlKS5jb250ZXh0OyhlLnVwZGF0ZVZpZXdwb3J0KHQudmlldy52aWV3cG9ydCl8fHRoaXMudmlldy52aWV3cG9ydC50bz5lLnRyZWVMZW4pJiZ0aGlzLnNjaGVkdWxlV29yaygpLHQuZG9jQ2hhbmdlZCYmKHRoaXMudmlldy5oYXNGb2N1cyYmKHRoaXMuY2h1bmtCdWRnZXQrPTUwKSx0aGlzLnNjaGVkdWxlV29yaygpKSx0aGlzLmNoZWNrQXN5bmNTY2hlZHVsZShlKX1zY2hlZHVsZVdvcmsoKXtpZih0aGlzLndvcmtpbmcpcmV0dXJuO2xldHtzdGF0ZTp0fT10aGlzLnZpZXcsZT10LmZpZWxkKGMuc3RhdGUpOyhlLnRyZWUhPWUuY29udGV4dC50cmVlfHwhZS5jb250ZXh0LmlzRG9uZSh0LmRvYy5sZW5ndGgpKSYmKHRoaXMud29ya2luZz14dCh0aGlzLndvcmspKX13b3JrKHQpe3RoaXMud29ya2luZz1udWxsO2xldCBlPURhdGUubm93KCk7aWYodGhpcy5jaHVua0VuZDxlJiYodGhpcy5jaHVua0VuZDwwfHx0aGlzLnZpZXcuaGFzRm9jdXMpJiYodGhpcy5jaHVua0VuZD1lKzNlNCx0aGlzLmNodW5rQnVkZ2V0PTNlMyksdGhpcy5jaHVua0J1ZGdldDw9MClyZXR1cm47bGV0e3N0YXRlOnIsdmlld3BvcnQ6e3RvOml9fT10aGlzLnZpZXcscz1yLmZpZWxkKGMuc3RhdGUpO2lmKHMudHJlZT09cy5jb250ZXh0LnRyZWUmJnMuY29udGV4dC5pc0RvbmUoaSsxZTUpKXJldHVybjtsZXQgbz1EYXRlLm5vdygpK01hdGgubWluKHRoaXMuY2h1bmtCdWRnZXQsMTAwLHQmJiFaP01hdGgubWF4KDI1LHQudGltZVJlbWFpbmluZygpLTUpOjFlOSksbD1zLmNvbnRleHQudHJlZUxlbjxpJiZyLmRvYy5sZW5ndGg+aSsxZTMsYT1zLmNvbnRleHQud29yaygoKT0+WiYmWigpfHxEYXRlLm5vdygpPm8saSsobD8wOjFlNSkpO3RoaXMuY2h1bmtCdWRnZXQtPURhdGUubm93KCktZSwoYXx8dGhpcy5jaHVua0J1ZGdldDw9MCkmJihzLmNvbnRleHQudGFrZVRyZWUoKSx0aGlzLnZpZXcuZGlzcGF0Y2goe2VmZmVjdHM6Yy5zZXRTdGF0ZS5vZihuZXcgUyhzLmNvbnRleHQpKX0pKSx0aGlzLmNodW5rQnVkZ2V0PjAmJiEoYSYmIWwpJiZ0aGlzLnNjaGVkdWxlV29yaygpLHRoaXMuY2hlY2tBc3luY1NjaGVkdWxlKHMuY29udGV4dCl9Y2hlY2tBc3luY1NjaGVkdWxlKHQpe3Quc2NoZWR1bGVPbiYmKHRoaXMud29ya1NjaGVkdWxlZCsrLHQuc2NoZWR1bGVPbi50aGVuKCgpPT50aGlzLnNjaGVkdWxlV29yaygpKS5jYXRjaChlPT5fdCh0aGlzLnZpZXcuc3RhdGUsZSkpLnRoZW4oKCk9PnRoaXMud29ya1NjaGVkdWxlZC0tKSx0LnNjaGVkdWxlT249bnVsbCl9ZGVzdHJveSgpe3RoaXMud29ya2luZyYmdGhpcy53b3JraW5nKCl9aXNXb3JraW5nKCl7cmV0dXJuISEodGhpcy53b3JraW5nfHx0aGlzLndvcmtTY2hlZHVsZWQ+MCl9fSx7ZXZlbnRIYW5kbGVyczp7Zm9jdXMoKXt0aGlzLnNjaGVkdWxlV29yaygpfX19KSxQPWIuZGVmaW5lKHtjb21iaW5lKG4pe3JldHVybiBuLmxlbmd0aD9uWzBdOm51bGx9LGVuYWJsZXM6W2Muc3RhdGUsU3RdfSksZHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlPVtdKXt0aGlzLmxhbmd1YWdlPXQsdGhpcy5zdXBwb3J0PWUsdGhpcy5leHRlbnNpb249W3QsZV19fSxqPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxyLGkscyxvPXZvaWQgMCl7dGhpcy5uYW1lPXQsdGhpcy5hbGlhcz1lLHRoaXMuZXh0ZW5zaW9ucz1yLHRoaXMuZmlsZW5hbWU9aSx0aGlzLmxvYWRGdW5jPXMsdGhpcy5zdXBwb3J0PW8sdGhpcy5sb2FkaW5nPW51bGx9bG9hZCgpe3JldHVybiB0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9dGhpcy5sb2FkRnVuYygpLnRoZW4odD0+dGhpcy5zdXBwb3J0PXQsdD0+e3Rocm93IHRoaXMubG9hZGluZz1udWxsLHR9KSl9c3RhdGljIG9mKHQpe2xldHtsb2FkOmUsc3VwcG9ydDpyfT10O2lmKCFlKXtpZighcil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcGFzcyBlaXRoZXIgJ2xvYWQnIG9yICdzdXBwb3J0JyB0byBMYW5ndWFnZURlc2NyaXB0aW9uLm9mXCIpO2U9KCk9PlByb21pc2UucmVzb2x2ZShyKX1yZXR1cm4gbmV3IGoodC5uYW1lLCh0LmFsaWFzfHxbXSkuY29uY2F0KHQubmFtZSkubWFwKGk9PmkudG9Mb3dlckNhc2UoKSksdC5leHRlbnNpb25zfHxbXSx0LmZpbGVuYW1lLGUscil9c3RhdGljIG1hdGNoRmlsZW5hbWUodCxlKXtmb3IobGV0IGkgb2YgdClpZihpLmZpbGVuYW1lJiZpLmZpbGVuYW1lLnRlc3QoZSkpcmV0dXJuIGk7bGV0IHI9L1xcLihbXi5dKykkLy5leGVjKGUpO2lmKHIpe2ZvcihsZXQgaSBvZiB0KWlmKGkuZXh0ZW5zaW9ucy5pbmRleE9mKHJbMV0pPi0xKXJldHVybiBpfXJldHVybiBudWxsfXN0YXRpYyBtYXRjaExhbmd1YWdlTmFtZSh0LGUscj0hMCl7ZT1lLnRvTG93ZXJDYXNlKCk7Zm9yKGxldCBpIG9mIHQpaWYoaS5hbGlhcy5zb21lKHM9PnM9PWUpKXJldHVybiBpO2lmKHIpZm9yKGxldCBpIG9mIHQpZm9yKGxldCBzIG9mIGkuYWxpYXMpe2xldCBvPWUuaW5kZXhPZihzKTtpZihvPi0xJiYocy5sZW5ndGg+Mnx8IS9cXHcvLnRlc3QoZVtvLTFdKSYmIS9cXHcvLnRlc3QoZVtvK3MubGVuZ3RoXSkpKXJldHVybiBpfXJldHVybiBudWxsfX0sUHQ9Yi5kZWZpbmUoKSxBdD1iLmRlZmluZSh7Y29tYmluZTpuPT57aWYoIW4ubGVuZ3RoKXJldHVyblwiICBcIjtpZighL14oPzogK3xcXHQrKSQvLnRlc3QoblswXSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbmRlbnQgdW5pdDogXCIrSlNPTi5zdHJpbmdpZnkoblswXSkpO3JldHVybiBuWzBdfX0pO2Z1bmN0aW9uICQobil7bGV0IHQ9bi5mYWNldChBdCk7cmV0dXJuIHQuY2hhckNvZGVBdCgwKT09OT9uLnRhYlNpemUqdC5sZW5ndGg6dC5sZW5ndGh9ZnVuY3Rpb24gQ3Qobix0KXtsZXQgZT1cIlwiLHI9bi50YWJTaXplO2lmKG4uZmFjZXQoQXQpLmNoYXJDb2RlQXQoMCk9PTkpZm9yKDt0Pj1yOyllKz1cIlx0XCIsdC09cjtmb3IobGV0IGk9MDtpPHQ7aSsrKWUrPVwiIFwiO3JldHVybiBlfWZ1bmN0aW9uIFR0KG4sdCl7biBpbnN0YW5jZW9mIE8mJihuPW5ldyBNKG4pKTtmb3IobGV0IHIgb2Ygbi5zdGF0ZS5mYWNldChQdCkpe2xldCBpPXIobix0KTtpZihpIT1udWxsKXJldHVybiBpfWxldCBlPW0obi5zdGF0ZSk7cmV0dXJuIGU/aWUobixlLHQpOm51bGx9ZnVuY3Rpb24gSmUobix0LGUpe2xldCByPU9iamVjdC5jcmVhdGUobnVsbCksaT1uZXcgTShuLHtvdmVycmlkZUluZGVudGF0aW9uOm89Pnt2YXIgbDtyZXR1cm4obD1yW29dKSE9PW51bGwmJmwhPT12b2lkIDA/bDotMX19KSxzPVtdO2ZvcihsZXQgbz10O288PWU7KXtsZXQgbD1uLmRvYy5saW5lQXQobyk7bz1sLnRvKzE7bGV0IGE9VHQoaSxsLmZyb20pO2lmKGE9PW51bGwpY29udGludWU7L1xcUy8udGVzdChsLnRleHQpfHwoYT0wKTtsZXQgaD0vXlxccyovLmV4ZWMobC50ZXh0KVswXSx1PUN0KG4sYSk7aCE9dSYmKHJbbC5mcm9tXT1hLHMucHVzaCh7ZnJvbTpsLmZyb20sdG86bC5mcm9tK2gubGVuZ3RoLGluc2VydDp1fSkpfXJldHVybiBuLmNoYW5nZXMocyl9dmFyIE09Y2xhc3N7Y29uc3RydWN0b3IodCxlPXt9KXt0aGlzLnN0YXRlPXQsdGhpcy5vcHRpb25zPWUsdGhpcy51bml0PSQodCl9bGluZUF0KHQsZT0xKXtsZXQgcj10aGlzLnN0YXRlLmRvYy5saW5lQXQodCkse3NpbXVsYXRlQnJlYWs6aSxzaW11bGF0ZURvdWJsZUJyZWFrOnN9PXRoaXMub3B0aW9ucztyZXR1cm4gaSE9bnVsbCYmaT49ci5mcm9tJiZpPD1yLnRvP3MmJmk9PXQ/e3RleHQ6XCJcIixmcm9tOnR9OihlPDA/aTx0Omk8PXQpP3t0ZXh0OnIudGV4dC5zbGljZShpLXIuZnJvbSksZnJvbTppfTp7dGV4dDpyLnRleHQuc2xpY2UoMCxpLXIuZnJvbSksZnJvbTpyLmZyb219OnJ9dGV4dEFmdGVyUG9zKHQsZT0xKXtpZih0aGlzLm9wdGlvbnMuc2ltdWxhdGVEb3VibGVCcmVhayYmdD09dGhpcy5vcHRpb25zLnNpbXVsYXRlQnJlYWspcmV0dXJuXCJcIjtsZXR7dGV4dDpyLGZyb206aX09dGhpcy5saW5lQXQodCxlKTtyZXR1cm4gci5zbGljZSh0LWksTWF0aC5taW4oci5sZW5ndGgsdCsxMDAtaSkpfWNvbHVtbih0LGU9MSl7bGV0e3RleHQ6cixmcm9tOml9PXRoaXMubGluZUF0KHQsZSkscz10aGlzLmNvdW50Q29sdW1uKHIsdC1pKSxvPXRoaXMub3B0aW9ucy5vdmVycmlkZUluZGVudGF0aW9uP3RoaXMub3B0aW9ucy5vdmVycmlkZUluZGVudGF0aW9uKGkpOi0xO3JldHVybiBvPi0xJiYocys9by10aGlzLmNvdW50Q29sdW1uKHIsci5zZWFyY2goL1xcU3wkLykpKSxzfWNvdW50Q29sdW1uKHQsZT10Lmxlbmd0aCl7cmV0dXJuIEp0KHQsdGhpcy5zdGF0ZS50YWJTaXplLGUpfWxpbmVJbmRlbnQodCxlPTEpe2xldHt0ZXh0OnIsZnJvbTppfT10aGlzLmxpbmVBdCh0LGUpLHM9dGhpcy5vcHRpb25zLm92ZXJyaWRlSW5kZW50YXRpb247aWYocyl7bGV0IG89cyhpKTtpZihvPi0xKXJldHVybiBvfXJldHVybiB0aGlzLmNvdW50Q29sdW1uKHIsci5zZWFyY2goL1xcU3wkLykpfWdldCBzaW11bGF0ZWRCcmVhaygpe3JldHVybiB0aGlzLm9wdGlvbnMuc2ltdWxhdGVCcmVha3x8bnVsbH19LHJlPW5ldyB2O2Z1bmN0aW9uIGllKG4sdCxlKXtyZXR1cm4gRHQodC5yZXNvbHZlSW5uZXIoZSkuZW50ZXJVbmZpbmlzaGVkTm9kZXNCZWZvcmUoZSksZSxuKX1mdW5jdGlvbiBzZShuKXtyZXR1cm4gbi5wb3M9PW4ub3B0aW9ucy5zaW11bGF0ZUJyZWFrJiZuLm9wdGlvbnMuc2ltdWxhdGVEb3VibGVCcmVha31mdW5jdGlvbiBvZShuKXtsZXQgdD1uLnR5cGUucHJvcChyZSk7aWYodClyZXR1cm4gdDtsZXQgZT1uLmZpcnN0Q2hpbGQscjtpZihlJiYocj1lLnR5cGUucHJvcCh2LmNsb3NlZEJ5KSkpe2xldCBpPW4ubGFzdENoaWxkLHM9aSYmci5pbmRleE9mKGkubmFtZSk+LTE7cmV0dXJuIG89Pkl0KG8sITAsMSx2b2lkIDAscyYmIXNlKG8pP2kuZnJvbTp2b2lkIDApfXJldHVybiBuLnBhcmVudD09bnVsbD9sZTpudWxsfWZ1bmN0aW9uIER0KG4sdCxlKXtmb3IoO247bj1uLnBhcmVudCl7bGV0IHI9b2Uobik7aWYocilyZXR1cm4gcihFLmNyZWF0ZShlLHQsbikpfXJldHVybiBudWxsfWZ1bmN0aW9uIGxlKCl7cmV0dXJuIDB9dmFyIEU9Y2xhc3MgZXh0ZW5kcyBNe2NvbnN0cnVjdG9yKHQsZSxyKXtzdXBlcih0LnN0YXRlLHQub3B0aW9ucyksdGhpcy5iYXNlPXQsdGhpcy5wb3M9ZSx0aGlzLm5vZGU9cn1zdGF0aWMgY3JlYXRlKHQsZSxyKXtyZXR1cm4gbmV3IEUodCxlLHIpfWdldCB0ZXh0QWZ0ZXIoKXtyZXR1cm4gdGhpcy50ZXh0QWZ0ZXJQb3ModGhpcy5wb3MpfWdldCBiYXNlSW5kZW50KCl7bGV0IHQ9dGhpcy5zdGF0ZS5kb2MubGluZUF0KHRoaXMubm9kZS5mcm9tKTtmb3IoOzspe2xldCBlPXRoaXMubm9kZS5yZXNvbHZlKHQuZnJvbSk7Zm9yKDtlLnBhcmVudCYmZS5wYXJlbnQuZnJvbT09ZS5mcm9tOyllPWUucGFyZW50O2lmKGFlKGUsdGhpcy5ub2RlKSlicmVhazt0PXRoaXMuc3RhdGUuZG9jLmxpbmVBdChlLmZyb20pfXJldHVybiB0aGlzLmxpbmVJbmRlbnQodC5mcm9tKX1jb250aW51ZSgpe2xldCB0PXRoaXMubm9kZS5wYXJlbnQ7cmV0dXJuIHQ/RHQodCx0aGlzLnBvcyx0aGlzLmJhc2UpOjB9fTtmdW5jdGlvbiBhZShuLHQpe2ZvcihsZXQgZT10O2U7ZT1lLnBhcmVudClpZihuPT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGhlKG4pe2xldCB0PW4ubm9kZSxlPXQuY2hpbGRBZnRlcih0LmZyb20pLHI9dC5sYXN0Q2hpbGQ7aWYoIWUpcmV0dXJuIG51bGw7bGV0IGk9bi5vcHRpb25zLnNpbXVsYXRlQnJlYWsscz1uLnN0YXRlLmRvYy5saW5lQXQoZS5mcm9tKSxvPWk9PW51bGx8fGk8PXMuZnJvbT9zLnRvOk1hdGgubWluKHMudG8saSk7Zm9yKGxldCBsPWUudG87Oyl7bGV0IGE9dC5jaGlsZEFmdGVyKGwpO2lmKCFhfHxhPT1yKXJldHVybiBudWxsO2lmKCFhLnR5cGUuaXNTa2lwcGVkKXJldHVybiBhLmZyb208bz9lOm51bGw7bD1hLnRvfX1mdW5jdGlvbiBLZSh7Y2xvc2luZzpuLGFsaWduOnQ9ITAsdW5pdHM6ZT0xfSl7cmV0dXJuIHI9Pkl0KHIsdCxlLG4pfWZ1bmN0aW9uIEl0KG4sdCxlLHIsaSl7bGV0IHM9bi50ZXh0QWZ0ZXIsbz1zLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aCxsPXImJnMuc2xpY2UobyxvK3IubGVuZ3RoKT09cnx8aT09bi5wb3MrbyxhPXQ/aGUobik6bnVsbDtyZXR1cm4gYT9sP24uY29sdW1uKGEuZnJvbSk6bi5jb2x1bW4oYS50byk6bi5iYXNlSW5kZW50KyhsPzA6bi51bml0KmUpfXZhciBfZT1uPT5uLmJhc2VJbmRlbnQ7ZnVuY3Rpb24gUWUoe2V4Y2VwdDpuLHVuaXRzOnQ9MX09e30pe3JldHVybiBlPT57bGV0IHI9biYmbi50ZXN0KGUudGV4dEFmdGVyKTtyZXR1cm4gZS5iYXNlSW5kZW50KyhyPzA6dCplLnVuaXQpfX12YXIgZmU9MjAwO2Z1bmN0aW9uIFhlKCl7cmV0dXJuIE8udHJhbnNhY3Rpb25GaWx0ZXIub2Yobj0+e2lmKCFuLmRvY0NoYW5nZWR8fCFuLmlzVXNlckV2ZW50KFwiaW5wdXQudHlwZVwiKSYmIW4uaXNVc2VyRXZlbnQoXCJpbnB1dC5jb21wbGV0ZVwiKSlyZXR1cm4gbjtsZXQgdD1uLnN0YXJ0U3RhdGUubGFuZ3VhZ2VEYXRhQXQoXCJpbmRlbnRPbklucHV0XCIsbi5zdGFydFN0YXRlLnNlbGVjdGlvbi5tYWluLmhlYWQpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbjtsZXQgZT1uLm5ld0RvYyx7aGVhZDpyfT1uLm5ld1NlbGVjdGlvbi5tYWluLGk9ZS5saW5lQXQocik7aWYocj5pLmZyb20rZmUpcmV0dXJuIG47bGV0IHM9ZS5zbGljZVN0cmluZyhpLmZyb20scik7aWYoIXQuc29tZShoPT5oLnRlc3QocykpKXJldHVybiBuO2xldHtzdGF0ZTpvfT1uLGw9LTEsYT1bXTtmb3IobGV0e2hlYWQ6aH1vZiBvLnNlbGVjdGlvbi5yYW5nZXMpe2xldCB1PW8uZG9jLmxpbmVBdChoKTtpZih1LmZyb209PWwpY29udGludWU7bD11LmZyb207bGV0IGQ9VHQobyx1LmZyb20pO2lmKGQ9PW51bGwpY29udGludWU7bGV0IGc9L15cXHMqLy5leGVjKHUudGV4dClbMF0sdz1DdChvLGQpO2chPXcmJmEucHVzaCh7ZnJvbTp1LmZyb20sdG86dS5mcm9tK2cubGVuZ3RoLGluc2VydDp3fSl9cmV0dXJuIGEubGVuZ3RoP1tuLHtjaGFuZ2VzOmEsc2VxdWVudGlhbDohMH1dOm59KX12YXIgdWU9Yi5kZWZpbmUoKSxjZT1uZXcgdjtmdW5jdGlvbiBZZShuKXtsZXQgdD1uLmZpcnN0Q2hpbGQsZT1uLmxhc3RDaGlsZDtyZXR1cm4gdCYmdC50bzxlLmZyb20/e2Zyb206dC50byx0bzplLnR5cGUuaXNFcnJvcj9uLnRvOmUuZnJvbX06bnVsbH1mdW5jdGlvbiBkZShuLHQsZSl7bGV0IHI9bShuKTtpZihyLmxlbmd0aDxlKXJldHVybiBudWxsO2xldCBpPXIucmVzb2x2ZUlubmVyKGUpLHM9bnVsbDtmb3IobGV0IG89aTtvO289by5wYXJlbnQpe2lmKG8udG88PWV8fG8uZnJvbT5lKWNvbnRpbnVlO2lmKHMmJm8uZnJvbTx0KWJyZWFrO2xldCBsPW8udHlwZS5wcm9wKGNlKTtpZihsJiYoby50bzxyLmxlbmd0aC01MHx8ci5sZW5ndGg9PW4uZG9jLmxlbmd0aHx8IXBlKG8pKSl7bGV0IGE9bChvLG4pO2EmJmEuZnJvbTw9ZSYmYS5mcm9tPj10JiZhLnRvPmUmJihzPWEpfX1yZXR1cm4gc31mdW5jdGlvbiBwZShuKXtsZXQgdD1uLmxhc3RDaGlsZDtyZXR1cm4gdCYmdC50bz09bi50byYmdC50eXBlLmlzRXJyb3J9ZnVuY3Rpb24gVihuLHQsZSl7Zm9yKGxldCByIG9mIG4uZmFjZXQodWUpKXtsZXQgaT1yKG4sdCxlKTtpZihpKXJldHVybiBpfXJldHVybiBkZShuLHQsZSl9ZnVuY3Rpb24gT3Qobix0KXtsZXQgZT10Lm1hcFBvcyhuLmZyb20sMSkscj10Lm1hcFBvcyhuLnRvLC0xKTtyZXR1cm4gZT49cj92b2lkIDA6e2Zyb206ZSx0bzpyfX12YXIgXz1LLmRlZmluZSh7bWFwOk90fSksUj1LLmRlZmluZSh7bWFwOk90fSk7ZnVuY3Rpb24gTnQobil7bGV0IHQ9W107Zm9yKGxldHtoZWFkOmV9b2Ygbi5zdGF0ZS5zZWxlY3Rpb24ucmFuZ2VzKXQuc29tZShyPT5yLmZyb208PWUmJnIudG8+PWUpfHx0LnB1c2gobi5saW5lQmxvY2tBdChlKSk7cmV0dXJuIHR9dmFyIEE9b3QuZGVmaW5lKHtjcmVhdGUoKXtyZXR1cm4gay5ub25lfSx1cGRhdGUobix0KXtuPW4ubWFwKHQuY2hhbmdlcyk7Zm9yKGxldCBlIG9mIHQuZWZmZWN0cyllLmlzKF8pJiYhbWUobixlLnZhbHVlLmZyb20sZS52YWx1ZS50byk/bj1uLnVwZGF0ZSh7YWRkOltwdC5yYW5nZShlLnZhbHVlLmZyb20sZS52YWx1ZS50byldfSk6ZS5pcyhSKSYmKG49bi51cGRhdGUoe2ZpbHRlcjoocixpKT0+ZS52YWx1ZS5mcm9tIT1yfHxlLnZhbHVlLnRvIT1pLGZpbHRlckZyb206ZS52YWx1ZS5mcm9tLGZpbHRlclRvOmUudmFsdWUudG99KSk7aWYodC5zZWxlY3Rpb24pe2xldCBlPSExLHtoZWFkOnJ9PXQuc2VsZWN0aW9uLm1haW47bi5iZXR3ZWVuKHIsciwoaSxzKT0+e2k8ciYmcz5yJiYoZT0hMCl9KSxlJiYobj1uLnVwZGF0ZSh7ZmlsdGVyRnJvbTpyLGZpbHRlclRvOnIsZmlsdGVyOihpLHMpPT5zPD1yfHxpPj1yfSkpfXJldHVybiBufSxwcm92aWRlOm49PnkuZGVjb3JhdGlvbnMuZnJvbShuKSx0b0pTT04obix0KXtsZXQgZT1bXTtyZXR1cm4gbi5iZXR3ZWVuKDAsdC5kb2MubGVuZ3RoLChyLGkpPT57ZS5wdXNoKHIsaSl9KSxlfSxmcm9tSlNPTihuKXtpZighQXJyYXkuaXNBcnJheShuKXx8bi5sZW5ndGglMil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgSlNPTiBmb3IgZm9sZCBzdGF0ZVwiKTtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoOyl7bGV0IHI9bltlKytdLGk9bltlKytdO2lmKHR5cGVvZiByIT1cIm51bWJlclwifHx0eXBlb2YgaSE9XCJudW1iZXJcIil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgSlNPTiBmb3IgZm9sZCBzdGF0ZVwiKTt0LnB1c2gocHQucmFuZ2UocixpKSl9cmV0dXJuIGsuc2V0KHQsITApfX0pO2Z1bmN0aW9uIFplKG4pe3JldHVybiBuLmZpZWxkKEEsITEpfHx3dC5lbXB0eX1mdW5jdGlvbiB6KG4sdCxlKXt2YXIgcjtsZXQgaT1udWxsO3JldHVybihyPW4uZmllbGQoQSwhMSkpPT09bnVsbHx8cj09PXZvaWQgMHx8ci5iZXR3ZWVuKHQsZSwocyxvKT0+eyghaXx8aS5mcm9tPnMpJiYoaT17ZnJvbTpzLHRvOm99KX0pLGl9ZnVuY3Rpb24gbWUobix0LGUpe2xldCByPSExO3JldHVybiBuLmJldHdlZW4odCx0LChpLHMpPT57aT09dCYmcz09ZSYmKHI9ITApfSkscn1mdW5jdGlvbiBCdChuLHQpe3JldHVybiBuLmZpZWxkKEEsITEpP3Q6dC5jb25jYXQoSy5hcHBlbmRDb25maWcub2YoRnQoKSkpfXZhciBnZT1uPT57Zm9yKGxldCB0IG9mIE50KG4pKXtsZXQgZT1WKG4uc3RhdGUsdC5mcm9tLHQudG8pO2lmKGUpcmV0dXJuIG4uZGlzcGF0Y2goe2VmZmVjdHM6QnQobi5zdGF0ZSxbXy5vZihlKSxNdChuLGUpXSl9KSwhMH1yZXR1cm4hMX0sa2U9bj0+e2lmKCFuLnN0YXRlLmZpZWxkKEEsITEpKXJldHVybiExO2xldCB0PVtdO2ZvcihsZXQgZSBvZiBOdChuKSl7bGV0IHI9eihuLnN0YXRlLGUuZnJvbSxlLnRvKTtyJiZ0LnB1c2goUi5vZihyKSxNdChuLHIsITEpKX1yZXR1cm4gdC5sZW5ndGgmJm4uZGlzcGF0Y2goe2VmZmVjdHM6dH0pLHQubGVuZ3RoPjB9O2Z1bmN0aW9uIE10KG4sdCxlPSEwKXtsZXQgcj1uLnN0YXRlLmRvYy5saW5lQXQodC5mcm9tKS5udW1iZXIsaT1uLnN0YXRlLmRvYy5saW5lQXQodC50bykubnVtYmVyO3JldHVybiB5LmFubm91bmNlLm9mKGAke24uc3RhdGUucGhyYXNlKGU/XCJGb2xkZWQgbGluZXNcIjpcIlVuZm9sZGVkIGxpbmVzXCIpfSAke3J9ICR7bi5zdGF0ZS5waHJhc2UoXCJ0b1wiKX0gJHtpfS5gKX12YXIgYmU9bj0+e2xldHtzdGF0ZTp0fT1uLGU9W107Zm9yKGxldCByPTA7cjx0LmRvYy5sZW5ndGg7KXtsZXQgaT1uLmxpbmVCbG9ja0F0KHIpLHM9Vih0LGkuZnJvbSxpLnRvKTtzJiZlLnB1c2goXy5vZihzKSkscj0ocz9uLmxpbmVCbG9ja0F0KHMudG8pOmkpLnRvKzF9cmV0dXJuIGUubGVuZ3RoJiZuLmRpc3BhdGNoKHtlZmZlY3RzOkJ0KG4uc3RhdGUsZSl9KSwhIWUubGVuZ3RofSx3ZT1uPT57bGV0IHQ9bi5zdGF0ZS5maWVsZChBLCExKTtpZighdHx8IXQuc2l6ZSlyZXR1cm4hMTtsZXQgZT1bXTtyZXR1cm4gdC5iZXR3ZWVuKDAsbi5zdGF0ZS5kb2MubGVuZ3RoLChyLGkpPT57ZS5wdXNoKFIub2Yoe2Zyb206cix0bzppfSkpfSksbi5kaXNwYXRjaCh7ZWZmZWN0czplfSksITB9LHRuPVt7a2V5OlwiQ3RybC1TaGlmdC1bXCIsbWFjOlwiQ21kLUFsdC1bXCIscnVuOmdlfSx7a2V5OlwiQ3RybC1TaGlmdC1dXCIsbWFjOlwiQ21kLUFsdC1dXCIscnVuOmtlfSx7a2V5OlwiQ3RybC1BbHQtW1wiLHJ1bjpiZX0se2tleTpcIkN0cmwtQWx0LV1cIixydW46d2V9XSx5ZT17cGxhY2Vob2xkZXJET006bnVsbCxwbGFjZWhvbGRlclRleHQ6XCJcXHUyMDI2XCJ9LEV0PWIuZGVmaW5lKHtjb21iaW5lKG4pe3JldHVybiBidChuLHllKX19KTtmdW5jdGlvbiBGdChuKXtsZXQgdD1bQSx4ZV07cmV0dXJuIG4mJnQucHVzaChFdC5vZihuKSksdH12YXIgcHQ9ay5yZXBsYWNlKHt3aWRnZXQ6bmV3IGNsYXNzIGV4dGVuZHMgUXR7dG9ET00obil7bGV0e3N0YXRlOnR9PW4sZT10LmZhY2V0KEV0KSxyPXM9PntsZXQgbz1uLmxpbmVCbG9ja0F0KG4ucG9zQXRET00ocy50YXJnZXQpKSxsPXoobi5zdGF0ZSxvLmZyb20sby50byk7bCYmbi5kaXNwYXRjaCh7ZWZmZWN0czpSLm9mKGwpfSkscy5wcmV2ZW50RGVmYXVsdCgpfTtpZihlLnBsYWNlaG9sZGVyRE9NKXJldHVybiBlLnBsYWNlaG9sZGVyRE9NKG4scik7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7cmV0dXJuIGkudGV4dENvbnRlbnQ9ZS5wbGFjZWhvbGRlclRleHQsaS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsdC5waHJhc2UoXCJmb2xkZWQgY29kZVwiKSksaS50aXRsZT10LnBocmFzZShcInVuZm9sZFwiKSxpLmNsYXNzTmFtZT1cImNtLWZvbGRQbGFjZWhvbGRlclwiLGkub25jbGljaz1yLGl9fX0pLHZlPXtvcGVuVGV4dDpcIlxcdTIzMDRcIixjbG9zZWRUZXh0OlwiXFx1MjAzQVwiLG1hcmtlckRPTTpudWxsLGRvbUV2ZW50SGFuZGxlcnM6e30sZm9sZGluZ0NoYW5nZWQ6KCk9PiExfSxOPWNsYXNzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuY29uZmlnPXQsdGhpcy5vcGVuPWV9ZXEodCl7cmV0dXJuIHRoaXMuY29uZmlnPT10LmNvbmZpZyYmdGhpcy5vcGVuPT10Lm9wZW59dG9ET00odCl7aWYodGhpcy5jb25maWcubWFya2VyRE9NKXJldHVybiB0aGlzLmNvbmZpZy5tYXJrZXJET00odGhpcy5vcGVuKTtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtyZXR1cm4gZS50ZXh0Q29udGVudD10aGlzLm9wZW4/dGhpcy5jb25maWcub3BlblRleHQ6dGhpcy5jb25maWcuY2xvc2VkVGV4dCxlLnRpdGxlPXQuc3RhdGUucGhyYXNlKHRoaXMub3Blbj9cIkZvbGQgbGluZVwiOlwiVW5mb2xkIGxpbmVcIiksZX19O2Z1bmN0aW9uIGVuKG49e30pe2xldCB0PU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx2ZSksbiksZT1uZXcgTih0LCEwKSxyPW5ldyBOKHQsITEpLGk9bHQuZnJvbUNsYXNzKGNsYXNze2NvbnN0cnVjdG9yKG8pe3RoaXMuZnJvbT1vLnZpZXdwb3J0LmZyb20sdGhpcy5tYXJrZXJzPXRoaXMuYnVpbGRNYXJrZXJzKG8pfXVwZGF0ZShvKXsoby5kb2NDaGFuZ2VkfHxvLnZpZXdwb3J0Q2hhbmdlZHx8by5zdGFydFN0YXRlLmZhY2V0KFApIT1vLnN0YXRlLmZhY2V0KFApfHxvLnN0YXJ0U3RhdGUuZmllbGQoQSwhMSkhPW8uc3RhdGUuZmllbGQoQSwhMSl8fG0oby5zdGFydFN0YXRlKSE9bShvLnN0YXRlKXx8dC5mb2xkaW5nQ2hhbmdlZChvKSkmJih0aGlzLm1hcmtlcnM9dGhpcy5idWlsZE1hcmtlcnMoby52aWV3KSl9YnVpbGRNYXJrZXJzKG8pe2xldCBsPW5ldyB5dDtmb3IobGV0IGEgb2Ygby52aWV3cG9ydExpbmVCbG9ja3Mpe2xldCBoPXooby5zdGF0ZSxhLmZyb20sYS50byk/cjpWKG8uc3RhdGUsYS5mcm9tLGEudG8pP2U6bnVsbDtoJiZsLmFkZChhLmZyb20sYS5mcm9tLGgpfXJldHVybiBsLmZpbmlzaCgpfX0pLHtkb21FdmVudEhhbmRsZXJzOnN9PXQ7cmV0dXJuW2ksWHQoe2NsYXNzOlwiY20tZm9sZEd1dHRlclwiLG1hcmtlcnMobyl7dmFyIGw7cmV0dXJuKChsPW8ucGx1Z2luKGkpKT09PW51bGx8fGw9PT12b2lkIDA/dm9pZCAwOmwubWFya2Vycyl8fHd0LmVtcHR5fSxpbml0aWFsU3BhY2VyKCl7cmV0dXJuIG5ldyBOKHQsITEpfSxkb21FdmVudEhhbmRsZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7Y2xpY2s6KG8sbCxhKT0+e2lmKHMuY2xpY2smJnMuY2xpY2sobyxsLGEpKXJldHVybiEwO2xldCBoPXooby5zdGF0ZSxsLmZyb20sbC50byk7aWYoaClyZXR1cm4gby5kaXNwYXRjaCh7ZWZmZWN0czpSLm9mKGgpfSksITA7bGV0IHU9VihvLnN0YXRlLGwuZnJvbSxsLnRvKTtyZXR1cm4gdT8oby5kaXNwYXRjaCh7ZWZmZWN0czpfLm9mKHUpfSksITApOiExfX0pfSksRnQoKV19dmFyIHhlPXkuYmFzZVRoZW1lKHtcIi5jbS1mb2xkUGxhY2Vob2xkZXJcIjp7YmFja2dyb3VuZENvbG9yOlwiI2VlZVwiLGJvcmRlcjpcIjFweCBzb2xpZCAjZGRkXCIsY29sb3I6XCIjODg4XCIsYm9yZGVyUmFkaXVzOlwiLjJlbVwiLG1hcmdpbjpcIjAgMXB4XCIscGFkZGluZzpcIjAgMXB4XCIsY3Vyc29yOlwicG9pbnRlclwifSxcIi5jbS1mb2xkR3V0dGVyIHNwYW5cIjp7cGFkZGluZzpcIjAgMXB4XCIsY3Vyc29yOlwicG9pbnRlclwifX0pLEQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXtsZXQgcjtmdW5jdGlvbiBpKGwpe2xldCBhPWZ0Lm5ld05hbWUoKTtyZXR1cm4ocnx8KHI9T2JqZWN0LmNyZWF0ZShudWxsKSkpW1wiLlwiK2FdPWwsYX1sZXQgcz10eXBlb2YgZS5hbGw9PVwic3RyaW5nXCI/ZS5hbGw6ZS5hbGw/aShlLmFsbCk6dm9pZCAwLG89ZS5zY29wZTt0aGlzLnNjb3BlPW8gaW5zdGFuY2VvZiBjP2w9PmwucHJvcChUKT09by5kYXRhOm8/bD0+bD09bzp2b2lkIDAsdGhpcy5zdHlsZT1adCh0Lm1hcChsPT4oe3RhZzpsLnRhZyxjbGFzczpsLmNsYXNzfHxpKE9iamVjdC5hc3NpZ24oe30sbCx7dGFnOm51bGx9KSl9KSkse2FsbDpzfSkuc3R5bGUsdGhpcy5tb2R1bGU9cj9uZXcgZnQocik6bnVsbCx0aGlzLnRoZW1lVHlwZT1lLnRoZW1lVHlwZX1zdGF0aWMgZGVmaW5lKHQsZSl7cmV0dXJuIG5ldyBEKHQsZXx8e30pfX0sbnQ9Yi5kZWZpbmUoKSxSdD1iLmRlZmluZSh7Y29tYmluZShuKXtyZXR1cm4gbi5sZW5ndGg/W25bMF1dOm51bGx9fSk7ZnVuY3Rpb24gTChuKXtsZXQgdD1uLmZhY2V0KG50KTtyZXR1cm4gdC5sZW5ndGg/dDpuLmZhY2V0KFJ0KX1mdW5jdGlvbiBubihuLHQpe2xldCBlPVtTZV0scjtyZXR1cm4gbiBpbnN0YW5jZW9mIEQmJihuLm1vZHVsZSYmZS5wdXNoKHkuc3R5bGVNb2R1bGUub2Yobi5tb2R1bGUpKSxyPW4udGhlbWVUeXBlKSx0Py5mYWxsYmFjaz9lLnB1c2goUnQub2YobikpOnI/ZS5wdXNoKG50LmNvbXB1dGVOKFt5LmRhcmtUaGVtZV0saT0+aS5mYWNldCh5LmRhcmtUaGVtZSk9PShyPT1cImRhcmtcIik/W25dOltdKSk6ZS5wdXNoKG50Lm9mKG4pKSxlfWZ1bmN0aW9uIHJuKG4sdCxlKXtsZXQgcj1MKG4pLGk9bnVsbDtpZihyKXtmb3IobGV0IHMgb2YgcilpZighcy5zY29wZXx8ZSYmcy5zY29wZShlKSl7bGV0IG89cy5zdHlsZSh0KTtvJiYoaT1pP2krXCIgXCIrbzpvKX19cmV0dXJuIGl9dmFyIHJ0PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFya0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy50cmVlPW0odC5zdGF0ZSksdGhpcy5kZWNvcmF0aW9ucz10aGlzLmJ1aWxkRGVjbyh0LEwodC5zdGF0ZSkpfXVwZGF0ZSh0KXtsZXQgZT1tKHQuc3RhdGUpLHI9TCh0LnN0YXRlKSxpPXIhPUwodC5zdGFydFN0YXRlKTtlLmxlbmd0aDx0LnZpZXcudmlld3BvcnQudG8mJiFpJiZlLnR5cGU9PXRoaXMudHJlZS50eXBlP3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5kZWNvcmF0aW9ucy5tYXAodC5jaGFuZ2VzKTooZSE9dGhpcy50cmVlfHx0LnZpZXdwb3J0Q2hhbmdlZHx8aSkmJih0aGlzLnRyZWU9ZSx0aGlzLmRlY29yYXRpb25zPXRoaXMuYnVpbGREZWNvKHQudmlldyxyKSl9YnVpbGREZWNvKHQsZSl7aWYoIWV8fCF0aGlzLnRyZWUubGVuZ3RoKXJldHVybiBrLm5vbmU7bGV0IHI9bmV3IHl0O2ZvcihsZXR7ZnJvbTppLHRvOnN9b2YgdC52aXNpYmxlUmFuZ2VzKXRlKHRoaXMudHJlZSxlLChvLGwsYSk9PntyLmFkZChvLGwsdGhpcy5tYXJrQ2FjaGVbYV18fCh0aGlzLm1hcmtDYWNoZVthXT1rLm1hcmsoe2NsYXNzOmF9KSkpfSxpLHMpO3JldHVybiByLmZpbmlzaCgpfX0sU2U9S3QuaGlnaChsdC5mcm9tQ2xhc3MocnQse2RlY29yYXRpb25zOm49Pm4uZGVjb3JhdGlvbnN9KSksc249RC5kZWZpbmUoW3t0YWc6Zi5tZXRhLGNvbG9yOlwiIzdhNzU3YVwifSx7dGFnOmYubGluayx0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwifSx7dGFnOmYuaGVhZGluZyx0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwiLGZvbnRXZWlnaHQ6XCJib2xkXCJ9LHt0YWc6Zi5lbXBoYXNpcyxmb250U3R5bGU6XCJpdGFsaWNcIn0se3RhZzpmLnN0cm9uZyxmb250V2VpZ2h0OlwiYm9sZFwifSx7dGFnOmYuc3RyaWtldGhyb3VnaCx0ZXh0RGVjb3JhdGlvbjpcImxpbmUtdGhyb3VnaFwifSx7dGFnOmYua2V5d29yZCxjb2xvcjpcIiM3MDhcIn0se3RhZzpbZi5hdG9tLGYuYm9vbCxmLnVybCxmLmNvbnRlbnRTZXBhcmF0b3IsZi5sYWJlbE5hbWVdLGNvbG9yOlwiIzIxOVwifSx7dGFnOltmLmxpdGVyYWwsZi5pbnNlcnRlZF0sY29sb3I6XCIjMTY0XCJ9LHt0YWc6W2Yuc3RyaW5nLGYuZGVsZXRlZF0sY29sb3I6XCIjYTExXCJ9LHt0YWc6W2YucmVnZXhwLGYuZXNjYXBlLGYuc3BlY2lhbChmLnN0cmluZyldLGNvbG9yOlwiI2U0MFwifSx7dGFnOmYuZGVmaW5pdGlvbihmLnZhcmlhYmxlTmFtZSksY29sb3I6XCIjMDBmXCJ9LHt0YWc6Zi5sb2NhbChmLnZhcmlhYmxlTmFtZSksY29sb3I6XCIjMzBhXCJ9LHt0YWc6W2YudHlwZU5hbWUsZi5uYW1lc3BhY2VdLGNvbG9yOlwiIzA4NVwifSx7dGFnOmYuY2xhc3NOYW1lLGNvbG9yOlwiIzE2N1wifSx7dGFnOltmLnNwZWNpYWwoZi52YXJpYWJsZU5hbWUpLGYubWFjcm9OYW1lXSxjb2xvcjpcIiMyNTZcIn0se3RhZzpmLmRlZmluaXRpb24oZi5wcm9wZXJ0eU5hbWUpLGNvbG9yOlwiIzAwY1wifSx7dGFnOmYuY29tbWVudCxjb2xvcjpcIiM5NDBcIn0se3RhZzpmLmludmFsaWQsY29sb3I6XCIjZjAwXCJ9XSksUGU9eS5iYXNlVGhlbWUoe1wiJi5jbS1mb2N1c2VkIC5jbS1tYXRjaGluZ0JyYWNrZXRcIjp7YmFja2dyb3VuZENvbG9yOlwiIzMyOGM4MjUyXCJ9LFwiJi5jbS1mb2N1c2VkIC5jbS1ub25tYXRjaGluZ0JyYWNrZXRcIjp7YmFja2dyb3VuZENvbG9yOlwiI2JiNTU1NTQ0XCJ9fSksVXQ9MWU0LFd0PVwiKClbXXt9XCIsTHQ9Yi5kZWZpbmUoe2NvbWJpbmUobil7cmV0dXJuIGJ0KG4se2FmdGVyQ3Vyc29yOiEwLGJyYWNrZXRzOld0LG1heFNjYW5EaXN0YW5jZTpVdCxyZW5kZXJNYXRjaDpUZX0pfX0pLEFlPWsubWFyayh7Y2xhc3M6XCJjbS1tYXRjaGluZ0JyYWNrZXRcIn0pLENlPWsubWFyayh7Y2xhc3M6XCJjbS1ub25tYXRjaGluZ0JyYWNrZXRcIn0pO2Z1bmN0aW9uIFRlKG4pe2xldCB0PVtdLGU9bi5tYXRjaGVkP0FlOkNlO3JldHVybiB0LnB1c2goZS5yYW5nZShuLnN0YXJ0LmZyb20sbi5zdGFydC50bykpLG4uZW5kJiZ0LnB1c2goZS5yYW5nZShuLmVuZC5mcm9tLG4uZW5kLnRvKSksdH12YXIgRGU9b3QuZGVmaW5lKHtjcmVhdGUoKXtyZXR1cm4gay5ub25lfSx1cGRhdGUobix0KXtpZighdC5kb2NDaGFuZ2VkJiYhdC5zZWxlY3Rpb24pcmV0dXJuIG47bGV0IGU9W10scj10LnN0YXRlLmZhY2V0KEx0KTtmb3IobGV0IGkgb2YgdC5zdGF0ZS5zZWxlY3Rpb24ucmFuZ2VzKXtpZighaS5lbXB0eSljb250aW51ZTtsZXQgcz1VKHQuc3RhdGUsaS5oZWFkLC0xLHIpfHxpLmhlYWQ+MCYmVSh0LnN0YXRlLGkuaGVhZC0xLDEscil8fHIuYWZ0ZXJDdXJzb3ImJihVKHQuc3RhdGUsaS5oZWFkLDEscil8fGkuaGVhZDx0LnN0YXRlLmRvYy5sZW5ndGgmJlUodC5zdGF0ZSxpLmhlYWQrMSwtMSxyKSk7cyYmKGU9ZS5jb25jYXQoci5yZW5kZXJNYXRjaChzLHQuc3RhdGUpKSl9cmV0dXJuIGsuc2V0KGUsITApfSxwcm92aWRlOm49PnkuZGVjb3JhdGlvbnMuZnJvbShuKX0pLEllPVtEZSxQZV07ZnVuY3Rpb24gb24obj17fSl7cmV0dXJuW0x0Lm9mKG4pLEllXX1mdW5jdGlvbiBpdChuLHQsZSl7bGV0IHI9bi5wcm9wKHQ8MD92Lm9wZW5lZEJ5OnYuY2xvc2VkQnkpO2lmKHIpcmV0dXJuIHI7aWYobi5uYW1lLmxlbmd0aD09MSl7bGV0IGk9ZS5pbmRleE9mKG4ubmFtZSk7aWYoaT4tMSYmaSUyPT0odDwwPzE6MCkpcmV0dXJuW2VbaSt0XV19cmV0dXJuIG51bGx9ZnVuY3Rpb24gVShuLHQsZSxyPXt9KXtsZXQgaT1yLm1heFNjYW5EaXN0YW5jZXx8VXQscz1yLmJyYWNrZXRzfHxXdCxvPW0obiksbD1vLnJlc29sdmVJbm5lcih0LGUpO2ZvcihsZXQgYT1sO2E7YT1hLnBhcmVudCl7bGV0IGg9aXQoYS50eXBlLGUscyk7aWYoaCYmYS5mcm9tPGEudG8pcmV0dXJuIE9lKG4sdCxlLGEsaCxzKX1yZXR1cm4gTmUobix0LGUsbyxsLnR5cGUsaSxzKX1mdW5jdGlvbiBPZShuLHQsZSxyLGkscyl7bGV0IG89ci5wYXJlbnQsbD17ZnJvbTpyLmZyb20sdG86ci50b30sYT0wLGg9bz8uY3Vyc29yKCk7aWYoaCYmKGU8MD9oLmNoaWxkQmVmb3JlKHIuZnJvbSk6aC5jaGlsZEFmdGVyKHIudG8pKSlkbyBpZihlPDA/aC50bzw9ci5mcm9tOmguZnJvbT49ci50byl7aWYoYT09MCYmaS5pbmRleE9mKGgudHlwZS5uYW1lKT4tMSYmaC5mcm9tPGgudG8pcmV0dXJue3N0YXJ0OmwsZW5kOntmcm9tOmguZnJvbSx0bzpoLnRvfSxtYXRjaGVkOiEwfTtpZihpdChoLnR5cGUsZSxzKSlhKys7ZWxzZSBpZihpdChoLnR5cGUsLWUscykpe2lmKGE9PTApcmV0dXJue3N0YXJ0OmwsZW5kOmguZnJvbT09aC50bz92b2lkIDA6e2Zyb206aC5mcm9tLHRvOmgudG99LG1hdGNoZWQ6ITF9O2EtLX19d2hpbGUoZTwwP2gucHJldlNpYmxpbmcoKTpoLm5leHRTaWJsaW5nKCkpO3JldHVybntzdGFydDpsLG1hdGNoZWQ6ITF9fWZ1bmN0aW9uIE5lKG4sdCxlLHIsaSxzLG8pe2xldCBsPWU8MD9uLnNsaWNlRG9jKHQtMSx0KTpuLnNsaWNlRG9jKHQsdCsxKSxhPW8uaW5kZXhPZihsKTtpZihhPDB8fGElMj09MCE9ZT4wKXJldHVybiBudWxsO2xldCBoPXtmcm9tOmU8MD90LTE6dCx0bzplPjA/dCsxOnR9LHU9bi5kb2MuaXRlclJhbmdlKHQsZT4wP24uZG9jLmxlbmd0aDowKSxkPTA7Zm9yKGxldCBnPTA7IXUubmV4dCgpLmRvbmUmJmc8PXM7KXtsZXQgdz11LnZhbHVlO2U8MCYmKGcrPXcubGVuZ3RoKTtsZXQgUT10K2cqZTtmb3IobGV0IEM9ZT4wPzA6dy5sZW5ndGgtMSxHdD1lPjA/dy5sZW5ndGg6LTE7QyE9R3Q7Qys9ZSl7bGV0IFg9by5pbmRleE9mKHdbQ10pO2lmKCEoWDwwfHxyLnJlc29sdmVJbm5lcihRK0MsMSkudHlwZSE9aSkpaWYoWCUyPT0wPT1lPjApZCsrO2Vsc2V7aWYoZD09MSlyZXR1cm57c3RhcnQ6aCxlbmQ6e2Zyb206UStDLHRvOlErQysxfSxtYXRjaGVkOlg+PjE9PWE+PjF9O2QtLX19ZT4wJiYoZys9dy5sZW5ndGgpfXJldHVybiB1LmRvbmU/e3N0YXJ0OmgsbWF0Y2hlZDohMX06bnVsbH1mdW5jdGlvbiBtdChuLHQsZSxyPTAsaT0wKXt0PT1udWxsJiYodD1uLnNlYXJjaCgvW15cXHNcXHUwMGEwXS8pLHQ9PS0xJiYodD1uLmxlbmd0aCkpO2xldCBzPWk7Zm9yKGxldCBvPXI7bzx0O28rKyluLmNoYXJDb2RlQXQobyk9PTk/cys9ZS1zJWU6cysrO3JldHVybiBzfXZhciBHPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxyKXt0aGlzLnN0cmluZz10LHRoaXMudGFiU2l6ZT1lLHRoaXMuaW5kZW50VW5pdD1yLHRoaXMucG9zPTAsdGhpcy5zdGFydD0wLHRoaXMubGFzdENvbHVtblBvcz0wLHRoaXMubGFzdENvbHVtblZhbHVlPTB9ZW9sKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLnN0cmluZy5sZW5ndGh9c29sKCl7cmV0dXJuIHRoaXMucG9zPT0wfXBlZWsoKXtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKXx8dm9pZCAwfW5leHQoKXtpZih0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGgpcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKX1lYXQodCl7bGV0IGU9dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSxyO2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiP3I9ZT09dDpyPWUmJih0IGluc3RhbmNlb2YgUmVnRXhwP3QudGVzdChlKTp0KGUpKSxyKXJldHVybisrdGhpcy5wb3MsZX1lYXRXaGlsZSh0KXtsZXQgZT10aGlzLnBvcztmb3IoO3RoaXMuZWF0KHQpOyk7cmV0dXJuIHRoaXMucG9zPmV9ZWF0U3BhY2UoKXtsZXQgdD10aGlzLnBvcztmb3IoOy9bXFxzXFx1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSk7KSsrdGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPnR9c2tpcFRvRW5kKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofXNraXBUbyh0KXtsZXQgZT10aGlzLnN0cmluZy5pbmRleE9mKHQsdGhpcy5wb3MpO2lmKGU+LTEpcmV0dXJuIHRoaXMucG9zPWUsITB9YmFja1VwKHQpe3RoaXMucG9zLT10fWNvbHVtbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPW10KHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlfWluZGVudGF0aW9uKCl7cmV0dXJuIG10KHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKX1tYXRjaCh0LGUscil7aWYodHlwZW9mIHQ9PVwic3RyaW5nXCIpe2xldCBpPW89PnI/by50b0xvd2VyQ2FzZSgpOm8scz10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsdC5sZW5ndGgpO3JldHVybiBpKHMpPT1pKHQpPyhlIT09ITEmJih0aGlzLnBvcys9dC5sZW5ndGgpLCEwKTpudWxsfWVsc2V7bGV0IGk9dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHQpO3JldHVybiBpJiZpLmluZGV4PjA/bnVsbDooaSYmZSE9PSExJiYodGhpcy5wb3MrPWlbMF0ubGVuZ3RoKSxpKX19Y3VycmVudCgpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LHRoaXMucG9zKX19O2Z1bmN0aW9uIEJlKG4pe3JldHVybnt0b2tlbjpuLnRva2VuLGJsYW5rTGluZTpuLmJsYW5rTGluZXx8KCgpPT57fSksc3RhcnRTdGF0ZTpuLnN0YXJ0U3RhdGV8fCgoKT0+ITApLGNvcHlTdGF0ZTpuLmNvcHlTdGF0ZXx8TWUsaW5kZW50Om4uaW5kZW50fHwoKCk9Pm51bGwpLGxhbmd1YWdlRGF0YTpuLmxhbmd1YWdlRGF0YXx8e30sdG9rZW5UYWJsZTpuLnRva2VuVGFibGV8fGh0fX1mdW5jdGlvbiBNZShuKXtpZih0eXBlb2YgbiE9XCJvYmplY3RcIilyZXR1cm4gbjtsZXQgdD17fTtmb3IobGV0IGUgaW4gbil7bGV0IHI9bltlXTt0W2VdPXIgaW5zdGFuY2VvZiBBcnJheT9yLnNsaWNlKCk6cn1yZXR1cm4gdH12YXIgcT1jbGFzcyBleHRlbmRzIGN7Y29uc3RydWN0b3IodCl7bGV0IGU9dnQodC5sYW5ndWFnZURhdGEpLHI9QmUodCksaSxzPW5ldyBjbGFzcyBleHRlbmRzIGt0e2NyZWF0ZVBhcnNlKG8sbCxhKXtyZXR1cm4gbmV3IHN0KGksbyxsLGEpfX07c3VwZXIoZSxzLFtQdC5vZigobyxsKT0+dGhpcy5nZXRJbmRlbnQobyxsKSldKSx0aGlzLnRvcE5vZGU9VWUoZSksaT10aGlzLHRoaXMuc3RyZWFtUGFyc2VyPXIsdGhpcy5zdGF0ZUFmdGVyPW5ldyB2KHtwZXJOb2RlOiEwfSksdGhpcy50b2tlblRhYmxlPXQudG9rZW5UYWJsZT9uZXcgSChyLnRva2VuVGFibGUpOlJlfXN0YXRpYyBkZWZpbmUodCl7cmV0dXJuIG5ldyBxKHQpfWdldEluZGVudCh0LGUpe2xldCByPW0odC5zdGF0ZSksaT1yLnJlc29sdmUoZSk7Zm9yKDtpJiZpLnR5cGUhPXRoaXMudG9wTm9kZTspaT1pLnBhcmVudDtpZighaSlyZXR1cm4gbnVsbDtsZXQgcz1hdCh0aGlzLHIsMCxpLmZyb20sZSksbyxsO2lmKHM/KGw9cy5zdGF0ZSxvPXMucG9zKzEpOihsPXRoaXMuc3RyZWFtUGFyc2VyLnN0YXJ0U3RhdGUodC51bml0KSxvPTApLGUtbz4xZTQpcmV0dXJuIG51bGw7Zm9yKDtvPGU7KXtsZXQgaD10LnN0YXRlLmRvYy5saW5lQXQobyksdT1NYXRoLm1pbihlLGgudG8pO2lmKGgubGVuZ3RoKXtsZXQgZD1uZXcgRyhoLnRleHQsdC5zdGF0ZS50YWJTaXplLHQudW5pdCk7Zm9yKDtkLnBvczx1LWguZnJvbTspJHQodGhpcy5zdHJlYW1QYXJzZXIudG9rZW4sZCxsKX1lbHNlIHRoaXMuc3RyZWFtUGFyc2VyLmJsYW5rTGluZShsLHQudW5pdCk7aWYodT09ZSlicmVhaztvPWgudG8rMX1sZXR7dGV4dDphfT10LmxpbmVBdChlKTtyZXR1cm4gdGhpcy5zdHJlYW1QYXJzZXIuaW5kZW50KGwsL15cXHMqKC4qKS8uZXhlYyhhKVsxXSx0KX1nZXQgYWxsb3dzTmVzdGluZygpe3JldHVybiExfX07ZnVuY3Rpb24gYXQobix0LGUscixpKXtsZXQgcz1lPj1yJiZlK3QubGVuZ3RoPD1pJiZ0LnByb3Aobi5zdGF0ZUFmdGVyKTtpZihzKXJldHVybntzdGF0ZTpuLnN0cmVhbVBhcnNlci5jb3B5U3RhdGUocykscG9zOmUrdC5sZW5ndGh9O2ZvcihsZXQgbz10LmNoaWxkcmVuLmxlbmd0aC0xO28+PTA7by0tKXtsZXQgbD10LmNoaWxkcmVuW29dLGE9ZSt0LnBvc2l0aW9uc1tvXSxoPWwgaW5zdGFuY2VvZiBwJiZhPGkmJmF0KG4sbCxhLHIsaSk7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBqdChuLHQsZSxyLGkpe2lmKGkmJmU8PTAmJnI+PXQubGVuZ3RoKXJldHVybiB0OyFpJiZ0LnR5cGU9PW4udG9wTm9kZSYmKGk9ITApO2ZvcihsZXQgcz10LmNoaWxkcmVuLmxlbmd0aC0xO3M+PTA7cy0tKXtsZXQgbz10LnBvc2l0aW9uc1tzXSxsPXQuY2hpbGRyZW5bc10sYTtpZihvPHImJmwgaW5zdGFuY2VvZiBwKXtpZighKGE9anQobixsLGUtbyxyLW8saSkpKWJyZWFrO3JldHVybiBpP25ldyBwKHQudHlwZSx0LmNoaWxkcmVuLnNsaWNlKDAscykuY29uY2F0KGEpLHQucG9zaXRpb25zLnNsaWNlKDAscysxKSxvK2EubGVuZ3RoKTphfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBFZShuLHQsZSxyKXtmb3IobGV0IGkgb2YgdCl7bGV0IHM9aS5mcm9tKyhpLm9wZW5TdGFydD8yNTowKSxvPWkudG8tKGkub3BlbkVuZD8yNTowKSxsPXM8PWUmJm8+ZSYmYXQobixpLnRyZWUsMC1pLm9mZnNldCxlLG8pLGE7aWYobCYmKGE9anQobixpLnRyZWUsZStpLm9mZnNldCxsLnBvcytpLm9mZnNldCwhMSkpKXJldHVybntzdGF0ZTpsLnN0YXRlLHRyZWU6YX19cmV0dXJue3N0YXRlOm4uc3RyZWFtUGFyc2VyLnN0YXJ0U3RhdGUocj8kKHIpOjQpLHRyZWU6cC5lbXB0eX19dmFyIHN0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxyLGkpe3RoaXMubGFuZz10LHRoaXMuaW5wdXQ9ZSx0aGlzLmZyYWdtZW50cz1yLHRoaXMucmFuZ2VzPWksdGhpcy5zdG9wcGVkQXQ9bnVsbCx0aGlzLmNodW5rcz1bXSx0aGlzLmNodW5rUG9zPVtdLHRoaXMuY2h1bms9W10sdGhpcy5jaHVua1JldXNlZD12b2lkIDAsdGhpcy5yYW5nZUluZGV4PTAsdGhpcy50bz1pW2kubGVuZ3RoLTFdLnRvO2xldCBzPXguZ2V0KCksbz1pWzBdLmZyb20se3N0YXRlOmwsdHJlZTphfT1FZSh0LHIsbyxzPy5zdGF0ZSk7dGhpcy5zdGF0ZT1sLHRoaXMucGFyc2VkUG9zPXRoaXMuY2h1bmtTdGFydD1vK2EubGVuZ3RoO2ZvcihsZXQgaD0wO2g8YS5jaGlsZHJlbi5sZW5ndGg7aCsrKXRoaXMuY2h1bmtzLnB1c2goYS5jaGlsZHJlbltoXSksdGhpcy5jaHVua1Bvcy5wdXNoKGEucG9zaXRpb25zW2hdKTtzJiZ0aGlzLnBhcnNlZFBvczxzLnZpZXdwb3J0LmZyb20tMWU1JiYodGhpcy5zdGF0ZT10aGlzLmxhbmcuc3RyZWFtUGFyc2VyLnN0YXJ0U3RhdGUoJChzLnN0YXRlKSkscy5za2lwVW50aWxJblZpZXcodGhpcy5wYXJzZWRQb3Mscy52aWV3cG9ydC5mcm9tKSx0aGlzLnBhcnNlZFBvcz1zLnZpZXdwb3J0LmZyb20pLHRoaXMubW92ZVJhbmdlSW5kZXgoKX1hZHZhbmNlKCl7bGV0IHQ9eC5nZXQoKSxlPXRoaXMuc3RvcHBlZEF0PT1udWxsP3RoaXMudG86TWF0aC5taW4odGhpcy50byx0aGlzLnN0b3BwZWRBdCkscj1NYXRoLm1pbihlLHRoaXMuY2h1bmtTdGFydCsyMDQ4KTtmb3IodCYmKHI9TWF0aC5taW4ocix0LnZpZXdwb3J0LnRvKSk7dGhpcy5wYXJzZWRQb3M8cjspdGhpcy5wYXJzZUxpbmUodCk7cmV0dXJuIHRoaXMuY2h1bmtTdGFydDx0aGlzLnBhcnNlZFBvcyYmdGhpcy5maW5pc2hDaHVuaygpLHRoaXMucGFyc2VkUG9zPj1lP3RoaXMuZmluaXNoKCk6dCYmdGhpcy5wYXJzZWRQb3M+PXQudmlld3BvcnQudG8/KHQuc2tpcFVudGlsSW5WaWV3KHRoaXMucGFyc2VkUG9zLGUpLHRoaXMuZmluaXNoKCkpOm51bGx9c3RvcEF0KHQpe3RoaXMuc3RvcHBlZEF0PXR9bGluZUFmdGVyKHQpe2xldCBlPXRoaXMuaW5wdXQuY2h1bmsodCk7aWYodGhpcy5pbnB1dC5saW5lQ2h1bmtzKWU9PWBcbmAmJihlPVwiXCIpO2Vsc2V7bGV0IHI9ZS5pbmRleE9mKGBcbmApO3I+LTEmJihlPWUuc2xpY2UoMCxyKSl9cmV0dXJuIHQrZS5sZW5ndGg8PXRoaXMudG8/ZTplLnNsaWNlKDAsdGhpcy50by10KX1uZXh0TGluZSgpe2xldCB0PXRoaXMucGFyc2VkUG9zLGU9dGhpcy5saW5lQWZ0ZXIodCkscj10K2UubGVuZ3RoO2ZvcihsZXQgaT10aGlzLnJhbmdlSW5kZXg7Oyl7bGV0IHM9dGhpcy5yYW5nZXNbaV0udG87aWYocz49cnx8KGU9ZS5zbGljZSgwLHMtKHItZS5sZW5ndGgpKSxpKyssaT09dGhpcy5yYW5nZXMubGVuZ3RoKSlicmVhaztsZXQgbz10aGlzLnJhbmdlc1tpXS5mcm9tLGw9dGhpcy5saW5lQWZ0ZXIobyk7ZSs9bCxyPW8rbC5sZW5ndGh9cmV0dXJue2xpbmU6ZSxlbmQ6cn19c2tpcEdhcHNUbyh0LGUscil7Zm9yKDs7KXtsZXQgaT10aGlzLnJhbmdlc1t0aGlzLnJhbmdlSW5kZXhdLnRvLHM9dCtlO2lmKHI+MD9pPnM6aT49cylicmVhaztlKz10aGlzLnJhbmdlc1srK3RoaXMucmFuZ2VJbmRleF0uZnJvbS1pfXJldHVybiBlfW1vdmVSYW5nZUluZGV4KCl7Zm9yKDt0aGlzLnJhbmdlc1t0aGlzLnJhbmdlSW5kZXhdLnRvPHRoaXMucGFyc2VkUG9zOyl0aGlzLnJhbmdlSW5kZXgrK31lbWl0VG9rZW4odCxlLHIsaSxzKXtpZih0aGlzLnJhbmdlcy5sZW5ndGg+MSl7cz10aGlzLnNraXBHYXBzVG8oZSxzLDEpLGUrPXM7bGV0IG89dGhpcy5jaHVuay5sZW5ndGg7cz10aGlzLnNraXBHYXBzVG8ocixzLC0xKSxyKz1zLGkrPXRoaXMuY2h1bmsubGVuZ3RoLW99cmV0dXJuIHRoaXMuY2h1bmsucHVzaCh0LGUscixpKSxzfXBhcnNlTGluZSh0KXtsZXR7bGluZTplLGVuZDpyfT10aGlzLm5leHRMaW5lKCksaT0wLHtzdHJlYW1QYXJzZXI6c309dGhpcy5sYW5nLG89bmV3IEcoZSx0P3Quc3RhdGUudGFiU2l6ZTo0LHQ/JCh0LnN0YXRlKToyKTtpZihvLmVvbCgpKXMuYmxhbmtMaW5lKHRoaXMuc3RhdGUsby5pbmRlbnRVbml0KTtlbHNlIGZvcig7IW8uZW9sKCk7KXtsZXQgbD0kdChzLnRva2VuLG8sdGhpcy5zdGF0ZSk7aWYobCYmKGk9dGhpcy5lbWl0VG9rZW4odGhpcy5sYW5nLnRva2VuVGFibGUucmVzb2x2ZShsKSx0aGlzLnBhcnNlZFBvcytvLnN0YXJ0LHRoaXMucGFyc2VkUG9zK28ucG9zLDQsaSkpLG8uc3RhcnQ+MWU0KWJyZWFrfXRoaXMucGFyc2VkUG9zPXIsdGhpcy5tb3ZlUmFuZ2VJbmRleCgpLHRoaXMucGFyc2VkUG9zPHRoaXMudG8mJnRoaXMucGFyc2VkUG9zKyt9ZmluaXNoQ2h1bmsoKXtsZXQgdD1wLmJ1aWxkKHtidWZmZXI6dGhpcy5jaHVuayxzdGFydDp0aGlzLmNodW5rU3RhcnQsbGVuZ3RoOnRoaXMucGFyc2VkUG9zLXRoaXMuY2h1bmtTdGFydCxub2RlU2V0OkZlLHRvcElEOjAsbWF4QnVmZmVyTGVuZ3RoOjIwNDgscmV1c2VkOnRoaXMuY2h1bmtSZXVzZWR9KTt0PW5ldyBwKHQudHlwZSx0LmNoaWxkcmVuLHQucG9zaXRpb25zLHQubGVuZ3RoLFtbdGhpcy5sYW5nLnN0YXRlQWZ0ZXIsdGhpcy5sYW5nLnN0cmVhbVBhcnNlci5jb3B5U3RhdGUodGhpcy5zdGF0ZSldXSksdGhpcy5jaHVua3MucHVzaCh0KSx0aGlzLmNodW5rUG9zLnB1c2godGhpcy5jaHVua1N0YXJ0LXRoaXMucmFuZ2VzWzBdLmZyb20pLHRoaXMuY2h1bms9W10sdGhpcy5jaHVua1JldXNlZD12b2lkIDAsdGhpcy5jaHVua1N0YXJ0PXRoaXMucGFyc2VkUG9zfWZpbmlzaCgpe3JldHVybiBuZXcgcCh0aGlzLmxhbmcudG9wTm9kZSx0aGlzLmNodW5rcyx0aGlzLmNodW5rUG9zLHRoaXMucGFyc2VkUG9zLXRoaXMucmFuZ2VzWzBdLmZyb20pLmJhbGFuY2UoKX19O2Z1bmN0aW9uICR0KG4sdCxlKXt0LnN0YXJ0PXQucG9zO2ZvcihsZXQgcj0wO3I8MTA7cisrKXtsZXQgaT1uKHQsZSk7aWYodC5wb3M+dC5zdGFydClyZXR1cm4gaX10aHJvdyBuZXcgRXJyb3IoXCJTdHJlYW0gcGFyc2VyIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS5cIil9dmFyIGh0PU9iamVjdC5jcmVhdGUobnVsbCksRj1bSi5ub25lXSxGZT1uZXcgSHQoRiksZ3Q9W10sVnQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0W24sdF1vZltbXCJ2YXJpYWJsZVwiLFwidmFyaWFibGVOYW1lXCJdLFtcInZhcmlhYmxlLTJcIixcInZhcmlhYmxlTmFtZS5zcGVjaWFsXCJdLFtcInN0cmluZy0yXCIsXCJzdHJpbmcuc3BlY2lhbFwiXSxbXCJkZWZcIixcInZhcmlhYmxlTmFtZS5kZWZpbml0aW9uXCJdLFtcInRhZ1wiLFwidGFnTmFtZVwiXSxbXCJhdHRyaWJ1dGVcIixcImF0dHJpYnV0ZU5hbWVcIl0sW1widHlwZVwiLFwidHlwZU5hbWVcIl0sW1wiYnVpbHRpblwiLFwidmFyaWFibGVOYW1lLnN0YW5kYXJkXCJdLFtcInF1YWxpZmllclwiLFwibW9kaWZpZXJcIl0sW1wiZXJyb3JcIixcImludmFsaWRcIl0sW1wiaGVhZGVyXCIsXCJoZWFkaW5nXCJdLFtcInByb3BlcnR5XCIsXCJwcm9wZXJ0eU5hbWVcIl1dKVZ0W25dPXp0KGh0LHQpO3ZhciBIPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXh0cmE9dCx0aGlzLnRhYmxlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSxWdCl9cmVzb2x2ZSh0KXtyZXR1cm4gdD90aGlzLnRhYmxlW3RdfHwodGhpcy50YWJsZVt0XT16dCh0aGlzLmV4dHJhLHQpKTowfX0sUmU9bmV3IEgoaHQpO2Z1bmN0aW9uIHR0KG4sdCl7Z3QuaW5kZXhPZihuKT4tMXx8KGd0LnB1c2gobiksY29uc29sZS53YXJuKHQpKX1mdW5jdGlvbiB6dChuLHQpe2xldCBlPW51bGw7Zm9yKGxldCBzIG9mIHQuc3BsaXQoXCIuXCIpKXtsZXQgbz1uW3NdfHxmW3NdO28/dHlwZW9mIG89PVwiZnVuY3Rpb25cIj9lP2U9byhlKTp0dChzLGBNb2RpZmllciAke3N9IHVzZWQgYXQgc3RhcnQgb2YgdGFnYCk6ZT90dChzLGBUYWcgJHtzfSB1c2VkIGFzIG1vZGlmaWVyYCk6ZT1vOnR0KHMsYFVua25vd24gaGlnaGxpZ2h0aW5nIHRhZyAke3N9YCl9aWYoIWUpcmV0dXJuIDA7bGV0IHI9dC5yZXBsYWNlKC8gL2csXCJfXCIpLGk9Si5kZWZpbmUoe2lkOkYubGVuZ3RoLG5hbWU6cixwcm9wczpbZWUoe1tyXTplfSldfSk7cmV0dXJuIEYucHVzaChpKSxpLmlkfWZ1bmN0aW9uIFVlKG4pe2xldCB0PUouZGVmaW5lKHtpZDpGLmxlbmd0aCxuYW1lOlwiRG9jdW1lbnRcIixwcm9wczpbVC5hZGQoKCk9Pm4pXX0pO3JldHVybiBGLnB1c2godCksdH1leHBvcnR7RCBhcyBIaWdobGlnaHRTdHlsZSxNIGFzIEluZGVudENvbnRleHQsQiBhcyBMUkxhbmd1YWdlLGMgYXMgTGFuZ3VhZ2UsaiBhcyBMYW5ndWFnZURlc2NyaXB0aW9uLGR0IGFzIExhbmd1YWdlU3VwcG9ydCx4IGFzIFBhcnNlQ29udGV4dCxxIGFzIFN0cmVhbUxhbmd1YWdlLEcgYXMgU3RyaW5nU3RyZWFtLEUgYXMgVHJlZUluZGVudENvbnRleHQsb24gYXMgYnJhY2tldE1hdGNoaW5nLEZ0IGFzIGNvZGVGb2xkaW5nLFFlIGFzIGNvbnRpbnVlZEluZGVudCxzbiBhcyBkZWZhdWx0SGlnaGxpZ2h0U3R5bGUsdnQgYXMgZGVmaW5lTGFuZ3VhZ2VGYWNldCxLZSBhcyBkZWxpbWl0ZWRJbmRlbnQsbmUgYXMgZW5zdXJlU3ludGF4VHJlZSxfZSBhcyBmbGF0SW5kZW50LGJlIGFzIGZvbGRBbGwsZ2UgYXMgZm9sZENvZGUsXyBhcyBmb2xkRWZmZWN0LGVuIGFzIGZvbGRHdXR0ZXIsWWUgYXMgZm9sZEluc2lkZSx0biBhcyBmb2xkS2V5bWFwLGNlIGFzIGZvbGROb2RlUHJvcCx1ZSBhcyBmb2xkU2VydmljZSxBIGFzIGZvbGRTdGF0ZSxWIGFzIGZvbGRhYmxlLFplIGFzIGZvbGRlZFJhbmdlcyxHZSBhcyBmb3JjZVBhcnNpbmcsJCBhcyBnZXRJbmRlbnRVbml0LFR0IGFzIGdldEluZGVudGF0aW9uLHJuIGFzIGhpZ2hsaWdodGluZ0ZvcixyZSBhcyBpbmRlbnROb2RlUHJvcCxYZSBhcyBpbmRlbnRPbklucHV0LEplIGFzIGluZGVudFJhbmdlLFB0IGFzIGluZGVudFNlcnZpY2UsQ3QgYXMgaW5kZW50U3RyaW5nLEF0IGFzIGluZGVudFVuaXQsUCBhcyBsYW5ndWFnZSxUIGFzIGxhbmd1YWdlRGF0YVByb3AsVSBhcyBtYXRjaEJyYWNrZXRzLG5uIGFzIHN5bnRheEhpZ2hsaWdodGluZyxxZSBhcyBzeW50YXhQYXJzZXJSdW5uaW5nLG0gYXMgc3ludGF4VHJlZSx6ZSBhcyBzeW50YXhUcmVlQXZhaWxhYmxlLHdlIGFzIHVuZm9sZEFsbCxrZSBhcyB1bmZvbGRDb2RlLFIgYXMgdW5mb2xkRWZmZWN0fTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShAY29kZW1pcnJvci9jb21tYW5kc0A2LjEuMSkgZGVubyBwcm9kdWN0aW9uICovXG5pbXBvcnR7QW5ub3RhdGlvbiBhcyBhZSxGYWNldCBhcyBoZSxjb21iaW5lQ29uZmlnIGFzIFFlLFN0YXRlRmllbGQgYXMgWGUsRWRpdG9yU2VsZWN0aW9uIGFzIGgsVHJhbnNhY3Rpb24gYXMgSyxDaGFuZ2VTZXQgYXMgWWUsQ2hhbmdlRGVzYyBhcyBaZSxTdGF0ZUVmZmVjdCBhcyBfZSxUZXh0IGFzIGRlLGZpbmRDbHVzdGVyQnJlYWsgYXMgSSxjb3VudENvbHVtbiBhcyBtZSxDaGFyQ2F0ZWdvcnkgYXMgVH1mcm9tXCJAY29kZW1pcnJvci9zdGF0ZVwiO2ltcG9ydHtFZGl0b3JWaWV3IGFzIEUsRGlyZWN0aW9uIGFzIGplfWZyb21cIkBjb2RlbWlycm9yL3ZpZXdcIjtpbXBvcnR7SW5kZW50Q29udGV4dCBhcyBwZSxnZXRJbmRlbnRhdGlvbiBhcyBnZSxpbmRlbnRTdHJpbmcgYXMgVSxpbmRlbnRVbml0IGFzIGV0LGdldEluZGVudFVuaXQgYXMgSCxtYXRjaEJyYWNrZXRzIGFzIEwsc3ludGF4VHJlZSBhcyBqfWZyb21cIi92OTYvQGNvZGVtaXJyb3IvbGFuZ3VhZ2VANi4yLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjMvZGVuby9sYW5ndWFnZS5qc1wiO2ltcG9ydHtOb2RlUHJvcCBhcyBRfWZyb21cIi92OTYvQGxlemVyL2NvbW1vbkAxLjAuMS9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWMy9kZW5vL2NvbW1vbi5qc1wiO3ZhciB0dD1lPT57bGV0IHQ9ZWUoZS5zdGF0ZSk7cmV0dXJuIHQubGluZT9udChlKTp0LmJsb2NrP290KGUpOiExfTtmdW5jdGlvbiBEKGUsdCl7cmV0dXJuKHtzdGF0ZTpyLGRpc3BhdGNoOm59KT0+e2lmKHIucmVhZE9ubHkpcmV0dXJuITE7bGV0IGw9ZSh0LHIpO3JldHVybiBsPyhuKHIudXBkYXRlKGwpKSwhMCk6ITF9fXZhciBudD1EKHRlLDApLGZuPUQodGUsMSksYW49RCh0ZSwyKSxydD1EKHcsMCksaG49RCh3LDEpLGRuPUQodywyKSxvdD1EKChlLHQpPT53KGUsdCxjdCh0KSksMCk7ZnVuY3Rpb24gZWUoZSx0PWUuc2VsZWN0aW9uLm1haW4uaGVhZCl7bGV0IHI9ZS5sYW5ndWFnZURhdGFBdChcImNvbW1lbnRUb2tlbnNcIix0KTtyZXR1cm4gci5sZW5ndGg/clswXTp7fX12YXIgTz01MDtmdW5jdGlvbiBsdChlLHtvcGVuOnQsY2xvc2U6cn0sbixsKXtsZXQgbz1lLnNsaWNlRG9jKG4tTyxuKSxjPWUuc2xpY2VEb2MobCxsK08pLHM9L1xccyokLy5leGVjKG8pWzBdLmxlbmd0aCxpPS9eXFxzKi8uZXhlYyhjKVswXS5sZW5ndGgsdT1vLmxlbmd0aC1zO2lmKG8uc2xpY2UodS10Lmxlbmd0aCx1KT09dCYmYy5zbGljZShpLGkrci5sZW5ndGgpPT1yKXJldHVybntvcGVuOntwb3M6bi1zLG1hcmdpbjpzJiYxfSxjbG9zZTp7cG9zOmwraSxtYXJnaW46aSYmMX19O2xldCBmLGE7bC1uPD0yKk8/Zj1hPWUuc2xpY2VEb2MobixsKTooZj1lLnNsaWNlRG9jKG4sbitPKSxhPWUuc2xpY2VEb2MobC1PLGwpKTtsZXQgZD0vXlxccyovLmV4ZWMoZilbMF0ubGVuZ3RoLFM9L1xccyokLy5leGVjKGEpWzBdLmxlbmd0aCxNPWEubGVuZ3RoLVMtci5sZW5ndGg7cmV0dXJuIGYuc2xpY2UoZCxkK3QubGVuZ3RoKT09dCYmYS5zbGljZShNLE0rci5sZW5ndGgpPT1yP3tvcGVuOntwb3M6bitkK3QubGVuZ3RoLG1hcmdpbjovXFxzLy50ZXN0KGYuY2hhckF0KGQrdC5sZW5ndGgpKT8xOjB9LGNsb3NlOntwb3M6bC1TLXIubGVuZ3RoLG1hcmdpbjovXFxzLy50ZXN0KGEuY2hhckF0KE0tMSkpPzE6MH19Om51bGx9ZnVuY3Rpb24gY3QoZSl7bGV0IHQ9W107Zm9yKGxldCByIG9mIGUuc2VsZWN0aW9uLnJhbmdlcyl7bGV0IG49ZS5kb2MubGluZUF0KHIuZnJvbSksbD1yLnRvPD1uLnRvP246ZS5kb2MubGluZUF0KHIudG8pLG89dC5sZW5ndGgtMTtvPj0wJiZ0W29dLnRvPm4uZnJvbT90W29dLnRvPWwudG86dC5wdXNoKHtmcm9tOm4uZnJvbSx0bzpsLnRvfSl9cmV0dXJuIHR9ZnVuY3Rpb24gdyhlLHQscj10LnNlbGVjdGlvbi5yYW5nZXMpe2xldCBuPXIubWFwKG89PmVlKHQsby5mcm9tKS5ibG9jayk7aWYoIW4uZXZlcnkobz0+bykpcmV0dXJuIG51bGw7bGV0IGw9ci5tYXAoKG8sYyk9Pmx0KHQsbltjXSxvLmZyb20sby50bykpO2lmKGUhPTImJiFsLmV2ZXJ5KG89Pm8pKXJldHVybntjaGFuZ2VzOnQuY2hhbmdlcyhyLm1hcCgobyxjKT0+bFtjXT9bXTpbe2Zyb206by5mcm9tLGluc2VydDpuW2NdLm9wZW4rXCIgXCJ9LHtmcm9tOm8udG8saW5zZXJ0OlwiIFwiK25bY10uY2xvc2V9XSkpfTtpZihlIT0xJiZsLnNvbWUobz0+bykpe2xldCBvPVtdO2ZvcihsZXQgYz0wLHM7YzxsLmxlbmd0aDtjKyspaWYocz1sW2NdKXtsZXQgaT1uW2NdLHtvcGVuOnUsY2xvc2U6Zn09cztvLnB1c2goe2Zyb206dS5wb3MtaS5vcGVuLmxlbmd0aCx0bzp1LnBvcyt1Lm1hcmdpbn0se2Zyb206Zi5wb3MtZi5tYXJnaW4sdG86Zi5wb3MraS5jbG9zZS5sZW5ndGh9KX1yZXR1cm57Y2hhbmdlczpvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB0ZShlLHQscj10LnNlbGVjdGlvbi5yYW5nZXMpe2xldCBuPVtdLGw9LTE7Zm9yKGxldHtmcm9tOm8sdG86Y31vZiByKXtsZXQgcz1uLmxlbmd0aCxpPTFlOTtmb3IobGV0IHU9bzt1PD1jOyl7bGV0IGY9dC5kb2MubGluZUF0KHUpO2lmKGYuZnJvbT5sJiYobz09Y3x8Yz5mLmZyb20pKXtsPWYuZnJvbTtsZXQgYT1lZSh0LHUpLmxpbmU7aWYoIWEpY29udGludWU7bGV0IGQ9L15cXHMqLy5leGVjKGYudGV4dClbMF0ubGVuZ3RoLFM9ZD09Zi5sZW5ndGgsTT1mLnRleHQuc2xpY2UoZCxkK2EubGVuZ3RoKT09YT9kOi0xO2Q8Zi50ZXh0Lmxlbmd0aCYmZDxpJiYoaT1kKSxuLnB1c2goe2xpbmU6Zixjb21tZW50Ok0sdG9rZW46YSxpbmRlbnQ6ZCxlbXB0eTpTLHNpbmdsZTohMX0pfXU9Zi50bysxfWlmKGk8MWU5KWZvcihsZXQgdT1zO3U8bi5sZW5ndGg7dSsrKW5bdV0uaW5kZW50PG5bdV0ubGluZS50ZXh0Lmxlbmd0aCYmKG5bdV0uaW5kZW50PWkpO24ubGVuZ3RoPT1zKzEmJihuW3NdLnNpbmdsZT0hMCl9aWYoZSE9MiYmbi5zb21lKG89Pm8uY29tbWVudDwwJiYoIW8uZW1wdHl8fG8uc2luZ2xlKSkpe2xldCBvPVtdO2ZvcihsZXR7bGluZTpzLHRva2VuOmksaW5kZW50OnUsZW1wdHk6ZixzaW5nbGU6YX1vZiBuKShhfHwhZikmJm8ucHVzaCh7ZnJvbTpzLmZyb20rdSxpbnNlcnQ6aStcIiBcIn0pO2xldCBjPXQuY2hhbmdlcyhvKTtyZXR1cm57Y2hhbmdlczpjLHNlbGVjdGlvbjp0LnNlbGVjdGlvbi5tYXAoYywxKX19ZWxzZSBpZihlIT0xJiZuLnNvbWUobz0+by5jb21tZW50Pj0wKSl7bGV0IG89W107Zm9yKGxldHtsaW5lOmMsY29tbWVudDpzLHRva2VuOml9b2YgbilpZihzPj0wKXtsZXQgdT1jLmZyb20rcyxmPXUraS5sZW5ndGg7Yy50ZXh0W2YtYy5mcm9tXT09XCIgXCImJmYrKyxvLnB1c2goe2Zyb206dSx0bzpmfSl9cmV0dXJue2NoYW5nZXM6b319cmV0dXJuIG51bGx9dmFyIFg9YWUuZGVmaW5lKCksc3Q9YWUuZGVmaW5lKCksaXQ9aGUuZGVmaW5lKCkseWU9aGUuZGVmaW5lKHtjb21iaW5lKGUpe3JldHVybiBRZShlLHttaW5EZXB0aDoxMDAsbmV3R3JvdXBEZWxheTo1MDB9LHttaW5EZXB0aDpNYXRoLm1heCxuZXdHcm91cERlbGF5Ok1hdGgubWlufSl9fSk7ZnVuY3Rpb24gdXQoZSl7bGV0IHQ9MDtyZXR1cm4gZS5pdGVyQ2hhbmdlZFJhbmdlcygocixuKT0+dD1uKSx0fXZhciBHPVhlLmRlZmluZSh7Y3JlYXRlKCl7cmV0dXJuIGsuZW1wdHl9LHVwZGF0ZShlLHQpe2xldCByPXQuc3RhdGUuZmFjZXQoeWUpLG49dC5hbm5vdGF0aW9uKFgpO2lmKG4pe2xldCBpPXQuZG9jQ2hhbmdlZD9oLnNpbmdsZSh1dCh0LmNoYW5nZXMpKTp2b2lkIDAsdT1tLmZyb21UcmFuc2FjdGlvbih0LGkpLGY9bi5zaWRlLGE9Zj09MD9lLnVuZG9uZTplLmRvbmU7cmV0dXJuIHU/YT1OKGEsYS5sZW5ndGgsci5taW5EZXB0aCx1KTphPVNlKGEsdC5zdGFydFN0YXRlLnNlbGVjdGlvbiksbmV3IGsoZj09MD9uLnJlc3Q6YSxmPT0wP2E6bi5yZXN0KX1sZXQgbD10LmFubm90YXRpb24oc3QpO2lmKChsPT1cImZ1bGxcInx8bD09XCJiZWZvcmVcIikmJihlPWUuaXNvbGF0ZSgpKSx0LmFubm90YXRpb24oSy5hZGRUb0hpc3RvcnkpPT09ITEpcmV0dXJuIHQuY2hhbmdlcy5lbXB0eT9lOmUuYWRkTWFwcGluZyh0LmNoYW5nZXMuZGVzYyk7bGV0IG89bS5mcm9tVHJhbnNhY3Rpb24odCksYz10LmFubm90YXRpb24oSy50aW1lKSxzPXQuYW5ub3RhdGlvbihLLnVzZXJFdmVudCk7cmV0dXJuIG8/ZT1lLmFkZENoYW5nZXMobyxjLHMsci5uZXdHcm91cERlbGF5LHIubWluRGVwdGgpOnQuc2VsZWN0aW9uJiYoZT1lLmFkZFNlbGVjdGlvbih0LnN0YXJ0U3RhdGUuc2VsZWN0aW9uLGMscyxyLm5ld0dyb3VwRGVsYXkpKSwobD09XCJmdWxsXCJ8fGw9PVwiYWZ0ZXJcIikmJihlPWUuaXNvbGF0ZSgpKSxlfSx0b0pTT04oZSl7cmV0dXJue2RvbmU6ZS5kb25lLm1hcCh0PT50LnRvSlNPTigpKSx1bmRvbmU6ZS51bmRvbmUubWFwKHQ9PnQudG9KU09OKCkpfX0sZnJvbUpTT04oZSl7cmV0dXJuIG5ldyBrKGUuZG9uZS5tYXAobS5mcm9tSlNPTiksZS51bmRvbmUubWFwKG0uZnJvbUpTT04pKX19KTtmdW5jdGlvbiBtbihlPXt9KXtyZXR1cm5bRyx5ZS5vZihlKSxFLmRvbUV2ZW50SGFuZGxlcnMoe2JlZm9yZWlucHV0KHQscil7bGV0IG49dC5pbnB1dFR5cGU9PVwiaGlzdG9yeVVuZG9cIj9rZTp0LmlucHV0VHlwZT09XCJoaXN0b3J5UmVkb1wiP1k6bnVsbDtyZXR1cm4gbj8odC5wcmV2ZW50RGVmYXVsdCgpLG4ocikpOiExfX0pXX12YXIgcG49RztmdW5jdGlvbiBWKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHtzdGF0ZTpyLGRpc3BhdGNoOm59KXtpZighdCYmci5yZWFkT25seSlyZXR1cm4hMTtsZXQgbD1yLmZpZWxkKEcsITEpO2lmKCFsKXJldHVybiExO2xldCBvPWwucG9wKGUscix0KTtyZXR1cm4gbz8obihvKSwhMCk6ITF9fXZhciBrZT1WKDAsITEpLFk9VigxLCExKSxmdD1WKDAsITApLGF0PVYoMSwhMCk7ZnVuY3Rpb24gQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2xldCByPXQuZmllbGQoRywhMSk7aWYoIXIpcmV0dXJuIDA7bGV0IG49ZT09MD9yLmRvbmU6ci51bmRvbmU7cmV0dXJuIG4ubGVuZ3RoLShuLmxlbmd0aCYmIW5bMF0uY2hhbmdlcz8xOjApfX12YXIgZ249QWUoMCkseW49QWUoMSksbT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixsLG8pe3RoaXMuY2hhbmdlcz10LHRoaXMuZWZmZWN0cz1yLHRoaXMubWFwcGVkPW4sdGhpcy5zdGFydFNlbGVjdGlvbj1sLHRoaXMuc2VsZWN0aW9uc0FmdGVyPW99c2V0U2VsQWZ0ZXIodCl7cmV0dXJuIG5ldyBtKHRoaXMuY2hhbmdlcyx0aGlzLmVmZmVjdHMsdGhpcy5tYXBwZWQsdGhpcy5zdGFydFNlbGVjdGlvbix0KX10b0pTT04oKXt2YXIgdCxyLG47cmV0dXJue2NoYW5nZXM6KHQ9dGhpcy5jaGFuZ2VzKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQudG9KU09OKCksbWFwcGVkOihyPXRoaXMubWFwcGVkKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIudG9KU09OKCksc3RhcnRTZWxlY3Rpb246KG49dGhpcy5zdGFydFNlbGVjdGlvbik9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLnRvSlNPTigpLHNlbGVjdGlvbnNBZnRlcjp0aGlzLnNlbGVjdGlvbnNBZnRlci5tYXAobD0+bC50b0pTT04oKSl9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IG0odC5jaGFuZ2VzJiZZZS5mcm9tSlNPTih0LmNoYW5nZXMpLFtdLHQubWFwcGVkJiZaZS5mcm9tSlNPTih0Lm1hcHBlZCksdC5zdGFydFNlbGVjdGlvbiYmaC5mcm9tSlNPTih0LnN0YXJ0U2VsZWN0aW9uKSx0LnNlbGVjdGlvbnNBZnRlci5tYXAoaC5mcm9tSlNPTikpfXN0YXRpYyBmcm9tVHJhbnNhY3Rpb24odCxyKXtsZXQgbj15O2ZvcihsZXQgbCBvZiB0LnN0YXJ0U3RhdGUuZmFjZXQoaXQpKXtsZXQgbz1sKHQpO28ubGVuZ3RoJiYobj1uLmNvbmNhdChvKSl9cmV0dXJuIW4ubGVuZ3RoJiZ0LmNoYW5nZXMuZW1wdHk/bnVsbDpuZXcgbSh0LmNoYW5nZXMuaW52ZXJ0KHQuc3RhcnRTdGF0ZS5kb2MpLG4sdm9pZCAwLHJ8fHQuc3RhcnRTdGF0ZS5zZWxlY3Rpb24seSl9c3RhdGljIHNlbGVjdGlvbih0KXtyZXR1cm4gbmV3IG0odm9pZCAwLHksdm9pZCAwLHZvaWQgMCx0KX19O2Z1bmN0aW9uIE4oZSx0LHIsbil7bGV0IGw9dCsxPnIrMjA/dC1yLTE6MCxvPWUuc2xpY2UobCx0KTtyZXR1cm4gby5wdXNoKG4pLG99ZnVuY3Rpb24gaHQoZSx0KXtsZXQgcj1bXSxuPSExO3JldHVybiBlLml0ZXJDaGFuZ2VkUmFuZ2VzKChsLG8pPT5yLnB1c2gobCxvKSksdC5pdGVyQ2hhbmdlZFJhbmdlcygobCxvLGMscyk9Pntmb3IobGV0IGk9MDtpPHIubGVuZ3RoOyl7bGV0IHU9cltpKytdLGY9cltpKytdO3M+PXUmJmM8PWYmJihuPSEwKX19KSxufWZ1bmN0aW9uIGR0KGUsdCl7cmV0dXJuIGUucmFuZ2VzLmxlbmd0aD09dC5yYW5nZXMubGVuZ3RoJiZlLnJhbmdlcy5maWx0ZXIoKHIsbik9PnIuZW1wdHkhPXQucmFuZ2VzW25dLmVtcHR5KS5sZW5ndGg9PT0wfWZ1bmN0aW9uIEJlKGUsdCl7cmV0dXJuIGUubGVuZ3RoP3QubGVuZ3RoP2UuY29uY2F0KHQpOmU6dH12YXIgeT1bXSxtdD0yMDA7ZnVuY3Rpb24gU2UoZSx0KXtpZihlLmxlbmd0aCl7bGV0IHI9ZVtlLmxlbmd0aC0xXSxuPXIuc2VsZWN0aW9uc0FmdGVyLnNsaWNlKE1hdGgubWF4KDAsci5zZWxlY3Rpb25zQWZ0ZXIubGVuZ3RoLW10KSk7cmV0dXJuIG4ubGVuZ3RoJiZuW24ubGVuZ3RoLTFdLmVxKHQpP2U6KG4ucHVzaCh0KSxOKGUsZS5sZW5ndGgtMSwxZTksci5zZXRTZWxBZnRlcihuKSkpfWVsc2UgcmV0dXJuW20uc2VsZWN0aW9uKFt0XSldfWZ1bmN0aW9uIHB0KGUpe2xldCB0PWVbZS5sZW5ndGgtMV0scj1lLnNsaWNlKCk7cmV0dXJuIHJbZS5sZW5ndGgtMV09dC5zZXRTZWxBZnRlcih0LnNlbGVjdGlvbnNBZnRlci5zbGljZSgwLHQuc2VsZWN0aW9uc0FmdGVyLmxlbmd0aC0xKSkscn1mdW5jdGlvbiBXKGUsdCl7aWYoIWUubGVuZ3RoKXJldHVybiBlO2xldCByPWUubGVuZ3RoLG49eTtmb3IoO3I7KXtsZXQgbD1ndChlW3ItMV0sdCxuKTtpZihsLmNoYW5nZXMmJiFsLmNoYW5nZXMuZW1wdHl8fGwuZWZmZWN0cy5sZW5ndGgpe2xldCBvPWUuc2xpY2UoMCxyKTtyZXR1cm4gb1tyLTFdPWwsb31lbHNlIHQ9bC5tYXBwZWQsci0tLG49bC5zZWxlY3Rpb25zQWZ0ZXJ9cmV0dXJuIG4ubGVuZ3RoP1ttLnNlbGVjdGlvbihuKV06eX1mdW5jdGlvbiBndChlLHQscil7bGV0IG49QmUoZS5zZWxlY3Rpb25zQWZ0ZXIubGVuZ3RoP2Uuc2VsZWN0aW9uc0FmdGVyLm1hcChzPT5zLm1hcCh0KSk6eSxyKTtpZighZS5jaGFuZ2VzKXJldHVybiBtLnNlbGVjdGlvbihuKTtsZXQgbD1lLmNoYW5nZXMubWFwKHQpLG89dC5tYXBEZXNjKGUuY2hhbmdlcywhMCksYz1lLm1hcHBlZD9lLm1hcHBlZC5jb21wb3NlRGVzYyhvKTpvO3JldHVybiBuZXcgbShsLF9lLm1hcEVmZmVjdHMoZS5lZmZlY3RzLHQpLGMsZS5zdGFydFNlbGVjdGlvbi5tYXAobyksbil9dmFyIHl0PS9eKGlucHV0XFwudHlwZXxkZWxldGUpKCR8XFwuKS8saz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbj0wLGw9dm9pZCAwKXt0aGlzLmRvbmU9dCx0aGlzLnVuZG9uZT1yLHRoaXMucHJldlRpbWU9bix0aGlzLnByZXZVc2VyRXZlbnQ9bH1pc29sYXRlKCl7cmV0dXJuIHRoaXMucHJldlRpbWU/bmV3IGsodGhpcy5kb25lLHRoaXMudW5kb25lKTp0aGlzfWFkZENoYW5nZXModCxyLG4sbCxvKXtsZXQgYz10aGlzLmRvbmUscz1jW2MubGVuZ3RoLTFdO3JldHVybiBzJiZzLmNoYW5nZXMmJiFzLmNoYW5nZXMuZW1wdHkmJnQuY2hhbmdlcyYmKCFufHx5dC50ZXN0KG4pKSYmKCFzLnNlbGVjdGlvbnNBZnRlci5sZW5ndGgmJnItdGhpcy5wcmV2VGltZTxsJiZodChzLmNoYW5nZXMsdC5jaGFuZ2VzKXx8bj09XCJpbnB1dC50eXBlLmNvbXBvc2VcIik/Yz1OKGMsYy5sZW5ndGgtMSxvLG5ldyBtKHQuY2hhbmdlcy5jb21wb3NlKHMuY2hhbmdlcyksQmUodC5lZmZlY3RzLHMuZWZmZWN0cykscy5tYXBwZWQscy5zdGFydFNlbGVjdGlvbix5KSk6Yz1OKGMsYy5sZW5ndGgsbyx0KSxuZXcgayhjLHkscixuKX1hZGRTZWxlY3Rpb24odCxyLG4sbCl7bGV0IG89dGhpcy5kb25lLmxlbmd0aD90aGlzLmRvbmVbdGhpcy5kb25lLmxlbmd0aC0xXS5zZWxlY3Rpb25zQWZ0ZXI6eTtyZXR1cm4gby5sZW5ndGg+MCYmci10aGlzLnByZXZUaW1lPGwmJm49PXRoaXMucHJldlVzZXJFdmVudCYmbiYmL15zZWxlY3QoJHxcXC4pLy50ZXN0KG4pJiZkdChvW28ubGVuZ3RoLTFdLHQpP3RoaXM6bmV3IGsoU2UodGhpcy5kb25lLHQpLHRoaXMudW5kb25lLHIsbil9YWRkTWFwcGluZyh0KXtyZXR1cm4gbmV3IGsoVyh0aGlzLmRvbmUsdCksVyh0aGlzLnVuZG9uZSx0KSx0aGlzLnByZXZUaW1lLHRoaXMucHJldlVzZXJFdmVudCl9cG9wKHQscixuKXtsZXQgbD10PT0wP3RoaXMuZG9uZTp0aGlzLnVuZG9uZTtpZihsLmxlbmd0aD09MClyZXR1cm4gbnVsbDtsZXQgbz1sW2wubGVuZ3RoLTFdO2lmKG4mJm8uc2VsZWN0aW9uc0FmdGVyLmxlbmd0aClyZXR1cm4gci51cGRhdGUoe3NlbGVjdGlvbjpvLnNlbGVjdGlvbnNBZnRlcltvLnNlbGVjdGlvbnNBZnRlci5sZW5ndGgtMV0sYW5ub3RhdGlvbnM6WC5vZih7c2lkZTp0LHJlc3Q6cHQobCl9KSx1c2VyRXZlbnQ6dD09MD9cInNlbGVjdC51bmRvXCI6XCJzZWxlY3QucmVkb1wiLHNjcm9sbEludG9WaWV3OiEwfSk7aWYoby5jaGFuZ2VzKXtsZXQgYz1sLmxlbmd0aD09MT95Omwuc2xpY2UoMCxsLmxlbmd0aC0xKTtyZXR1cm4gby5tYXBwZWQmJihjPVcoYyxvLm1hcHBlZCkpLHIudXBkYXRlKHtjaGFuZ2VzOm8uY2hhbmdlcyxzZWxlY3Rpb246by5zdGFydFNlbGVjdGlvbixlZmZlY3RzOm8uZWZmZWN0cyxhbm5vdGF0aW9uczpYLm9mKHtzaWRlOnQscmVzdDpjfSksZmlsdGVyOiExLHVzZXJFdmVudDp0PT0wP1widW5kb1wiOlwicmVkb1wiLHNjcm9sbEludG9WaWV3OiEwfSl9ZWxzZSByZXR1cm4gbnVsbH19O2suZW1wdHk9bmV3IGsoeSx5KTt2YXIga249W3trZXk6XCJNb2QtelwiLHJ1bjprZSxwcmV2ZW50RGVmYXVsdDohMH0se2tleTpcIk1vZC15XCIsbWFjOlwiTW9kLVNoaWZ0LXpcIixydW46WSxwcmV2ZW50RGVmYXVsdDohMH0se2xpbnV4OlwiQ3RybC1TaGlmdC16XCIscnVuOlkscHJldmVudERlZmF1bHQ6ITB9LHtrZXk6XCJNb2QtdVwiLHJ1bjpmdCxwcmV2ZW50RGVmYXVsdDohMH0se2tleTpcIkFsdC11XCIsbWFjOlwiTW9kLVNoaWZ0LXVcIixydW46YXQscHJldmVudERlZmF1bHQ6ITB9XTtmdW5jdGlvbiB4KGUsdCl7cmV0dXJuIGguY3JlYXRlKGUucmFuZ2VzLm1hcCh0KSxlLm1haW5JbmRleCl9ZnVuY3Rpb24gQihlLHQpe3JldHVybiBlLnVwZGF0ZSh7c2VsZWN0aW9uOnQsc2Nyb2xsSW50b1ZpZXc6ITAsdXNlckV2ZW50Olwic2VsZWN0XCJ9KX1mdW5jdGlvbiBBKHtzdGF0ZTplLGRpc3BhdGNoOnR9LHIpe2xldCBuPXgoZS5zZWxlY3Rpb24scik7cmV0dXJuIG4uZXEoZS5zZWxlY3Rpb24pPyExOih0KEIoZSxuKSksITApfWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gaC5jdXJzb3IodD9lLnRvOmUuZnJvbSl9ZnVuY3Rpb24gUChlLHQpe3JldHVybiBBKGUscj0+ci5lbXB0eT9lLm1vdmVCeUNoYXIocix0KTpiKHIsdCkpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUudGV4dERpcmVjdGlvbkF0KGUuc3RhdGUuc2VsZWN0aW9uLm1haW4uaGVhZCk9PWplLkxUUn12YXIgQ2U9ZT0+UChlLCFwKGUpKSxEZT1lPT5QKGUscChlKSksQW49ZT0+UChlLCEwKSxCbj1lPT5QKGUsITEpO2Z1bmN0aW9uIHYoZSx0KXtyZXR1cm4gQShlLHI9PnIuZW1wdHk/ZS5tb3ZlQnlHcm91cChyLHQpOmIocix0KSl9dmFyIGt0PWU9PnYoZSwhcChlKSksQXQ9ZT0+dihlLHAoZSkpLFNuPWU9PnYoZSwhMCksQ249ZT0+dihlLCExKTtmdW5jdGlvbiBMZShlLHQscil7bGV0IG49ZS5zdGF0ZS5jaGFyQ2F0ZWdvcml6ZXIodC5mcm9tKTtyZXR1cm4gZS5tb3ZlQnlDaGFyKHQscixsPT57bGV0IG89VC5TcGFjZSxjPXQuZnJvbSxzPSExLGk9ITEsdT0hMSxmPWE9PntpZihzKXJldHVybiExO2MrPXI/YS5sZW5ndGg6LWEubGVuZ3RoO2xldCBkPW4oYSksUztpZihvPT1ULlNwYWNlJiYobz1kKSxvIT1kKXJldHVybiExO2lmKG89PVQuV29yZClpZihhLnRvTG93ZXJDYXNlKCk9PWEpe2lmKCFyJiZpKXJldHVybiExO3U9ITB9ZWxzZSBpZih1KXtpZihyKXJldHVybiExO3M9ITB9ZWxzZXtpZihpJiZyJiZuKFM9ZS5zdGF0ZS5zbGljZURvYyhjLGMrMSkpPT1ULldvcmQmJlMudG9Mb3dlckNhc2UoKT09UylyZXR1cm4hMTtpPSEwfXJldHVybiEwfTtyZXR1cm4gZihsKSxmfSl9ZnVuY3Rpb24geGUoZSx0KXtyZXR1cm4gQShlLHI9PnIuZW1wdHk/TGUoZSxyLHQpOmIocix0KSl9dmFyIERuPWU9PnhlKGUsITApLExuPWU9PnhlKGUsITEpO2Z1bmN0aW9uIEJ0KGUsdCxyKXtpZih0LnR5cGUucHJvcChyKSlyZXR1cm4hMDtsZXQgbj10LnRvLXQuZnJvbTtyZXR1cm4gbiYmKG4+Mnx8L1teXFxzLC47Ol0vLnRlc3QoZS5zbGljZURvYyh0LmZyb20sdC50bykpKXx8dC5maXJzdENoaWxkfWZ1bmN0aW9uIEooZSx0LHIpe2xldCBuPWooZSkucmVzb2x2ZUlubmVyKHQuaGVhZCksbD1yP1EuY2xvc2VkQnk6US5vcGVuZWRCeTtmb3IobGV0IGk9dC5oZWFkOzspe2xldCB1PXI/bi5jaGlsZEFmdGVyKGkpOm4uY2hpbGRCZWZvcmUoaSk7aWYoIXUpYnJlYWs7QnQoZSx1LGwpP249dTppPXI/dS50bzp1LmZyb219bGV0IG89bi50eXBlLnByb3AobCksYyxzO3JldHVybiBvJiYoYz1yP0woZSxuLmZyb20sMSk6TChlLG4udG8sLTEpKSYmYy5tYXRjaGVkP3M9cj9jLmVuZC50bzpjLmVuZC5mcm9tOnM9cj9uLnRvOm4uZnJvbSxoLmN1cnNvcihzLHI/LTE6MSl9dmFyIFN0PWU9PkEoZSx0PT5KKGUuc3RhdGUsdCwhcChlKSkpLEN0PWU9PkEoZSx0PT5KKGUuc3RhdGUsdCxwKGUpKSk7ZnVuY3Rpb24gTWUoZSx0KXtyZXR1cm4gQShlLHI9PntpZighci5lbXB0eSlyZXR1cm4gYihyLHQpO2xldCBuPWUubW92ZVZlcnRpY2FsbHkocix0KTtyZXR1cm4gbi5oZWFkIT1yLmhlYWQ/bjplLm1vdmVUb0xpbmVCb3VuZGFyeShyLHQpfSl9dmFyIE9lPWU9Pk1lKGUsITEpLEVlPWU9Pk1lKGUsITApO2Z1bmN0aW9uIGJlKGUpe3JldHVybiBNYXRoLm1heChlLmRlZmF1bHRMaW5lSGVpZ2h0LE1hdGgubWluKGUuZG9tLmNsaWVudEhlaWdodCxpbm5lckhlaWdodCktNSl9ZnVuY3Rpb24gVGUoZSx0KXtsZXR7c3RhdGU6cn09ZSxuPXgoci5zZWxlY3Rpb24scz0+cy5lbXB0eT9lLm1vdmVWZXJ0aWNhbGx5KHMsdCxiZShlKSk6YihzLHQpKTtpZihuLmVxKHIuc2VsZWN0aW9uKSlyZXR1cm4hMTtsZXQgbD1lLmNvb3Jkc0F0UG9zKHIuc2VsZWN0aW9uLm1haW4uaGVhZCksbz1lLnNjcm9sbERPTS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjO3JldHVybiBsJiZsLnRvcD5vLnRvcCYmbC5ib3R0b208by5ib3R0b20mJmwudG9wLW8udG9wPD1lLnNjcm9sbERPTS5zY3JvbGxIZWlnaHQtZS5zY3JvbGxET00uc2Nyb2xsVG9wLWUuc2Nyb2xsRE9NLmNsaWVudEhlaWdodCYmKGM9RS5zY3JvbGxJbnRvVmlldyhuLm1haW4uaGVhZCx7eTpcInN0YXJ0XCIseU1hcmdpbjpsLnRvcC1vLnRvcH0pKSxlLmRpc3BhdGNoKEIocixuKSx7ZWZmZWN0czpjfSksITB9dmFyIG9lPWU9PlRlKGUsITEpLFo9ZT0+VGUoZSwhMCk7ZnVuY3Rpb24gQyhlLHQscil7bGV0IG49ZS5saW5lQmxvY2tBdCh0LmhlYWQpLGw9ZS5tb3ZlVG9MaW5lQm91bmRhcnkodCxyKTtpZihsLmhlYWQ9PXQuaGVhZCYmbC5oZWFkIT0ocj9uLnRvOm4uZnJvbSkmJihsPWUubW92ZVRvTGluZUJvdW5kYXJ5KHQsciwhMSkpLCFyJiZsLmhlYWQ9PW4uZnJvbSYmbi5sZW5ndGgpe2xldCBvPS9eXFxzKi8uZXhlYyhlLnN0YXRlLnNsaWNlRG9jKG4uZnJvbSxNYXRoLm1pbihuLmZyb20rMTAwLG4udG8pKSlbMF0ubGVuZ3RoO28mJnQuaGVhZCE9bi5mcm9tK28mJihsPWguY3Vyc29yKG4uZnJvbStvKSl9cmV0dXJuIGx9dmFyIER0PWU9PkEoZSx0PT5DKGUsdCwhMCkpLEx0PWU9PkEoZSx0PT5DKGUsdCwhMSkpLHh0PWU9PkEoZSx0PT5DKGUsdCwhcChlKSkpLE10PWU9PkEoZSx0PT5DKGUsdCxwKGUpKSksT3Q9ZT0+QShlLHQ9PmguY3Vyc29yKGUubGluZUJsb2NrQXQodC5oZWFkKS5mcm9tLDEpKSxFdD1lPT5BKGUsdD0+aC5jdXJzb3IoZS5saW5lQmxvY2tBdCh0LmhlYWQpLnRvLC0xKSk7ZnVuY3Rpb24gUmUoZSx0LHIpe2xldCBuPSExLGw9eChlLnNlbGVjdGlvbixvPT57bGV0IGM9TChlLG8uaGVhZCwtMSl8fEwoZSxvLmhlYWQsMSl8fG8uaGVhZD4wJiZMKGUsby5oZWFkLTEsMSl8fG8uaGVhZDxlLmRvYy5sZW5ndGgmJkwoZSxvLmhlYWQrMSwtMSk7aWYoIWN8fCFjLmVuZClyZXR1cm4gbztuPSEwO2xldCBzPWMuc3RhcnQuZnJvbT09by5oZWFkP2MuZW5kLnRvOmMuZW5kLmZyb207cmV0dXJuIHI/aC5yYW5nZShvLmFuY2hvcixzKTpoLmN1cnNvcihzKX0pO3JldHVybiBuPyh0KEIoZSxsKSksITApOiExfXZhciBidD0oe3N0YXRlOmUsZGlzcGF0Y2g6dH0pPT5SZShlLHQsITEpLHhuPSh7c3RhdGU6ZSxkaXNwYXRjaDp0fSk9PlJlKGUsdCwhMCk7ZnVuY3Rpb24gZyhlLHQpe2xldCByPXgoZS5zdGF0ZS5zZWxlY3Rpb24sbj0+e2xldCBsPXQobik7cmV0dXJuIGgucmFuZ2Uobi5hbmNob3IsbC5oZWFkLGwuZ29hbENvbHVtbil9KTtyZXR1cm4gci5lcShlLnN0YXRlLnNlbGVjdGlvbik/ITE6KGUuZGlzcGF0Y2goQihlLnN0YXRlLHIpKSwhMCl9ZnVuY3Rpb24gRihlLHQpe3JldHVybiBnKGUscj0+ZS5tb3ZlQnlDaGFyKHIsdCkpfXZhciBJZT1lPT5GKGUsIXAoZSkpLFVlPWU9PkYoZSxwKGUpKSxNbj1lPT5GKGUsITApLE9uPWU9PkYoZSwhMSk7ZnVuY3Rpb24geihlLHQpe3JldHVybiBnKGUscj0+ZS5tb3ZlQnlHcm91cChyLHQpKX12YXIgVHQ9ZT0+eihlLCFwKGUpKSxSdD1lPT56KGUscChlKSksRW49ZT0+eihlLCEwKSxibj1lPT56KGUsITEpO2Z1bmN0aW9uIE5lKGUsdCl7cmV0dXJuIGcoZSxyPT5MZShlLHIsdCkpfXZhciBUbj1lPT5OZShlLCEwKSxSbj1lPT5OZShlLCExKSxJdD1lPT5nKGUsdD0+SihlLnN0YXRlLHQsIXAoZSkpKSxVdD1lPT5nKGUsdD0+SihlLnN0YXRlLHQscChlKSkpO2Z1bmN0aW9uIHdlKGUsdCl7cmV0dXJuIGcoZSxyPT5lLm1vdmVWZXJ0aWNhbGx5KHIsdCkpfXZhciBHZT1lPT53ZShlLCExKSxWZT1lPT53ZShlLCEwKTtmdW5jdGlvbiBQZShlLHQpe3JldHVybiBnKGUscj0+ZS5tb3ZlVmVydGljYWxseShyLHQsYmUoZSkpKX12YXIgbGU9ZT0+UGUoZSwhMSksY2U9ZT0+UGUoZSwhMCksTnQ9ZT0+ZyhlLHQ9PkMoZSx0LCEwKSksd3Q9ZT0+ZyhlLHQ9PkMoZSx0LCExKSksR3Q9ZT0+ZyhlLHQ9PkMoZSx0LCFwKGUpKSksVnQ9ZT0+ZyhlLHQ9PkMoZSx0LHAoZSkpKSxQdD1lPT5nKGUsdD0+aC5jdXJzb3IoZS5saW5lQmxvY2tBdCh0LmhlYWQpLmZyb20pKSx2dD1lPT5nKGUsdD0+aC5jdXJzb3IoZS5saW5lQmxvY2tBdCh0LmhlYWQpLnRvKSksc2U9KHtzdGF0ZTplLGRpc3BhdGNoOnR9KT0+KHQoQihlLHthbmNob3I6MH0pKSwhMCksaWU9KHtzdGF0ZTplLGRpc3BhdGNoOnR9KT0+KHQoQihlLHthbmNob3I6ZS5kb2MubGVuZ3RofSkpLCEwKSx1ZT0oe3N0YXRlOmUsZGlzcGF0Y2g6dH0pPT4odChCKGUse2FuY2hvcjplLnNlbGVjdGlvbi5tYWluLmFuY2hvcixoZWFkOjB9KSksITApLGZlPSh7c3RhdGU6ZSxkaXNwYXRjaDp0fSk9Pih0KEIoZSx7YW5jaG9yOmUuc2VsZWN0aW9uLm1haW4uYW5jaG9yLGhlYWQ6ZS5kb2MubGVuZ3RofSkpLCEwKSxKdD0oe3N0YXRlOmUsZGlzcGF0Y2g6dH0pPT4odChlLnVwZGF0ZSh7c2VsZWN0aW9uOnthbmNob3I6MCxoZWFkOmUuZG9jLmxlbmd0aH0sdXNlckV2ZW50Olwic2VsZWN0XCJ9KSksITApLEZ0PSh7c3RhdGU6ZSxkaXNwYXRjaDp0fSk9PntsZXQgcj0kKGUpLm1hcCgoe2Zyb206bix0bzpsfSk9PmgucmFuZ2UobixNYXRoLm1pbihsKzEsZS5kb2MubGVuZ3RoKSkpO3JldHVybiB0KGUudXBkYXRlKHtzZWxlY3Rpb246aC5jcmVhdGUociksdXNlckV2ZW50Olwic2VsZWN0XCJ9KSksITB9LHp0PSh7c3RhdGU6ZSxkaXNwYXRjaDp0fSk9PntsZXQgcj14KGUuc2VsZWN0aW9uLG49Pnt2YXIgbDtsZXQgbz1qKGUpLnJlc29sdmVJbm5lcihuLmhlYWQsMSk7Zm9yKDshKG8uZnJvbTxuLmZyb20mJm8udG8+PW4udG98fG8udG8+bi50byYmby5mcm9tPD1uLmZyb218fCEoISgobD1vLnBhcmVudCk9PT1udWxsfHxsPT09dm9pZCAwKSYmbC5wYXJlbnQpKTspbz1vLnBhcmVudDtyZXR1cm4gaC5yYW5nZShvLnRvLG8uZnJvbSl9KTtyZXR1cm4gdChCKGUscikpLCEwfSxxdD0oe3N0YXRlOmUsZGlzcGF0Y2g6dH0pPT57bGV0IHI9ZS5zZWxlY3Rpb24sbj1udWxsO3JldHVybiByLnJhbmdlcy5sZW5ndGg+MT9uPWguY3JlYXRlKFtyLm1haW5dKTpyLm1haW4uZW1wdHl8fChuPWguY3JlYXRlKFtoLmN1cnNvcihyLm1haW4uaGVhZCldKSksbj8odChCKGUsbikpLCEwKTohMX07ZnVuY3Rpb24gcShlLHQpe2lmKGUuc3RhdGUucmVhZE9ubHkpcmV0dXJuITE7bGV0IHI9XCJkZWxldGUuc2VsZWN0aW9uXCIse3N0YXRlOm59PWUsbD1uLmNoYW5nZUJ5UmFuZ2Uobz0+e2xldHtmcm9tOmMsdG86c309bztpZihjPT1zKXtsZXQgaT10KGMpO2k8Yz8ocj1cImRlbGV0ZS5iYWNrd2FyZFwiLGk9UihlLGksITEpKTppPmMmJihyPVwiZGVsZXRlLmZvcndhcmRcIixpPVIoZSxpLCEwKSksYz1NYXRoLm1pbihjLGkpLHM9TWF0aC5tYXgocyxpKX1lbHNlIGM9UihlLGMsITEpLHM9UihlLGMsITApO3JldHVybiBjPT1zP3tyYW5nZTpvfTp7Y2hhbmdlczp7ZnJvbTpjLHRvOnN9LHJhbmdlOmguY3Vyc29yKGMpfX0pO3JldHVybiBsLmNoYW5nZXMuZW1wdHk/ITE6KGUuZGlzcGF0Y2gobi51cGRhdGUobCx7c2Nyb2xsSW50b1ZpZXc6ITAsdXNlckV2ZW50OnIsZWZmZWN0czpyPT1cImRlbGV0ZS5zZWxlY3Rpb25cIj9FLmFubm91bmNlLm9mKG4ucGhyYXNlKFwiU2VsZWN0aW9uIGRlbGV0ZWRcIikpOnZvaWQgMH0pKSwhMCl9ZnVuY3Rpb24gUihlLHQscil7aWYoZSBpbnN0YW5jZW9mIEUpZm9yKGxldCBuIG9mIGUuc3RhdGUuZmFjZXQoRS5hdG9taWNSYW5nZXMpLm1hcChsPT5sKGUpKSluLmJldHdlZW4odCx0LChsLG8pPT57bDx0JiZvPnQmJih0PXI/bzpsKX0pO3JldHVybiB0fXZhciB2ZT0oZSx0KT0+cShlLHI9PntsZXR7c3RhdGU6bn09ZSxsPW4uZG9jLmxpbmVBdChyKSxvLGM7aWYoIXQmJnI+bC5mcm9tJiZyPGwuZnJvbSsyMDAmJiEvW14gXFx0XS8udGVzdChvPWwudGV4dC5zbGljZSgwLHItbC5mcm9tKSkpe2lmKG9bby5sZW5ndGgtMV09PVwiXHRcIilyZXR1cm4gci0xO2xldCBzPW1lKG8sbi50YWJTaXplKSxpPXMlSChuKXx8SChuKTtmb3IobGV0IHU9MDt1PGkmJm9bby5sZW5ndGgtMS11XT09XCIgXCI7dSsrKXItLTtjPXJ9ZWxzZSBjPUkobC50ZXh0LHItbC5mcm9tLHQsdCkrbC5mcm9tLGM9PXImJmwubnVtYmVyIT0odD9uLmRvYy5saW5lczoxKSYmKGMrPXQ/MTotMSk7cmV0dXJuIGN9KSxfPWU9PnZlKGUsITEpLEplPWU9PnZlKGUsITApLEZlPShlLHQpPT5xKGUscj0+e2xldCBuPXIse3N0YXRlOmx9PWUsbz1sLmRvYy5saW5lQXQobiksYz1sLmNoYXJDYXRlZ29yaXplcihuKTtmb3IobGV0IHM9bnVsbDs7KXtpZihuPT0odD9vLnRvOm8uZnJvbSkpe249PXImJm8ubnVtYmVyIT0odD9sLmRvYy5saW5lczoxKSYmKG4rPXQ/MTotMSk7YnJlYWt9bGV0IGk9SShvLnRleHQsbi1vLmZyb20sdCkrby5mcm9tLHU9by50ZXh0LnNsaWNlKE1hdGgubWluKG4saSktby5mcm9tLE1hdGgubWF4KG4saSktby5mcm9tKSxmPWModSk7aWYocyE9bnVsbCYmZiE9cylicmVhazsodSE9XCIgXCJ8fG4hPXIpJiYocz1mKSxuPWl9cmV0dXJuIG59KSx6ZT1lPT5GZShlLCExKSwkdD1lPT5GZShlLCEwKSxxZT1lPT5xKGUsdD0+e2xldCByPWUubGluZUJsb2NrQXQodCkudG87cmV0dXJuIHQ8cj9yOk1hdGgubWluKGUuc3RhdGUuZG9jLmxlbmd0aCx0KzEpfSksS3Q9ZT0+cShlLHQ9PntsZXQgcj1lLmxpbmVCbG9ja0F0KHQpLmZyb207cmV0dXJuIHQ+cj9yOk1hdGgubWF4KDAsdC0xKX0pLEluPSh7c3RhdGU6ZSxkaXNwYXRjaDp0fSk9PntpZihlLnJlYWRPbmx5KXJldHVybiExO2xldCByPVtdO2ZvcihsZXQgbj0wLGw9XCJcIixvPWUuZG9jLml0ZXIoKTs7KXtpZihvLm5leHQoKSxvLmxpbmVCcmVha3x8by5kb25lKXtsZXQgYz1sLnNlYXJjaCgvXFxzKyQvKTtpZihjPi0xJiZyLnB1c2goe2Zyb206bi0obC5sZW5ndGgtYyksdG86bn0pLG8uZG9uZSlicmVhaztsPVwiXCJ9ZWxzZSBsPW8udmFsdWU7bis9by52YWx1ZS5sZW5ndGh9cmV0dXJuIHIubGVuZ3RoPyh0KGUudXBkYXRlKHtjaGFuZ2VzOnIsdXNlckV2ZW50OlwiZGVsZXRlXCJ9KSksITApOiExfSxXdD0oe3N0YXRlOmUsZGlzcGF0Y2g6dH0pPT57aWYoZS5yZWFkT25seSlyZXR1cm4hMTtsZXQgcj1lLmNoYW5nZUJ5UmFuZ2Uobj0+KHtjaGFuZ2VzOntmcm9tOm4uZnJvbSx0bzpuLnRvLGluc2VydDpkZS5vZihbXCJcIixcIlwiXSl9LHJhbmdlOmguY3Vyc29yKG4uZnJvbSl9KSk7cmV0dXJuIHQoZS51cGRhdGUocix7c2Nyb2xsSW50b1ZpZXc6ITAsdXNlckV2ZW50OlwiaW5wdXRcIn0pKSwhMH0sSHQ9KHtzdGF0ZTplLGRpc3BhdGNoOnR9KT0+e2lmKGUucmVhZE9ubHkpcmV0dXJuITE7bGV0IHI9ZS5jaGFuZ2VCeVJhbmdlKG49PntpZighbi5lbXB0eXx8bi5mcm9tPT0wfHxuLmZyb209PWUuZG9jLmxlbmd0aClyZXR1cm57cmFuZ2U6bn07bGV0IGw9bi5mcm9tLG89ZS5kb2MubGluZUF0KGwpLGM9bD09by5mcm9tP2wtMTpJKG8udGV4dCxsLW8uZnJvbSwhMSkrby5mcm9tLHM9bD09by50bz9sKzE6SShvLnRleHQsbC1vLmZyb20sITApK28uZnJvbTtyZXR1cm57Y2hhbmdlczp7ZnJvbTpjLHRvOnMsaW5zZXJ0OmUuZG9jLnNsaWNlKGwscykuYXBwZW5kKGUuZG9jLnNsaWNlKGMsbCkpfSxyYW5nZTpoLmN1cnNvcihzKX19KTtyZXR1cm4gci5jaGFuZ2VzLmVtcHR5PyExOih0KGUudXBkYXRlKHIse3Njcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpcIm1vdmUuY2hhcmFjdGVyXCJ9KSksITApfTtmdW5jdGlvbiAkKGUpe2xldCB0PVtdLHI9LTE7Zm9yKGxldCBuIG9mIGUuc2VsZWN0aW9uLnJhbmdlcyl7bGV0IGw9ZS5kb2MubGluZUF0KG4uZnJvbSksbz1lLmRvYy5saW5lQXQobi50byk7aWYoIW4uZW1wdHkmJm4udG89PW8uZnJvbSYmKG89ZS5kb2MubGluZUF0KG4udG8tMSkpLHI+PWwubnVtYmVyKXtsZXQgYz10W3QubGVuZ3RoLTFdO2MudG89by50byxjLnJhbmdlcy5wdXNoKG4pfWVsc2UgdC5wdXNoKHtmcm9tOmwuZnJvbSx0bzpvLnRvLHJhbmdlczpbbl19KTtyPW8ubnVtYmVyKzF9cmV0dXJuIHR9ZnVuY3Rpb24gJGUoZSx0LHIpe2lmKGUucmVhZE9ubHkpcmV0dXJuITE7bGV0IG49W10sbD1bXTtmb3IobGV0IG8gb2YgJChlKSl7aWYocj9vLnRvPT1lLmRvYy5sZW5ndGg6by5mcm9tPT0wKWNvbnRpbnVlO2xldCBjPWUuZG9jLmxpbmVBdChyP28udG8rMTpvLmZyb20tMSkscz1jLmxlbmd0aCsxO2lmKHIpe24ucHVzaCh7ZnJvbTpvLnRvLHRvOmMudG99LHtmcm9tOm8uZnJvbSxpbnNlcnQ6Yy50ZXh0K2UubGluZUJyZWFrfSk7Zm9yKGxldCBpIG9mIG8ucmFuZ2VzKWwucHVzaChoLnJhbmdlKE1hdGgubWluKGUuZG9jLmxlbmd0aCxpLmFuY2hvcitzKSxNYXRoLm1pbihlLmRvYy5sZW5ndGgsaS5oZWFkK3MpKSl9ZWxzZXtuLnB1c2goe2Zyb206Yy5mcm9tLHRvOm8uZnJvbX0se2Zyb206by50byxpbnNlcnQ6ZS5saW5lQnJlYWsrYy50ZXh0fSk7Zm9yKGxldCBpIG9mIG8ucmFuZ2VzKWwucHVzaChoLnJhbmdlKGkuYW5jaG9yLXMsaS5oZWFkLXMpKX19cmV0dXJuIG4ubGVuZ3RoPyh0KGUudXBkYXRlKHtjaGFuZ2VzOm4sc2Nyb2xsSW50b1ZpZXc6ITAsc2VsZWN0aW9uOmguY3JlYXRlKGwsZS5zZWxlY3Rpb24ubWFpbkluZGV4KSx1c2VyRXZlbnQ6XCJtb3ZlLmxpbmVcIn0pKSwhMCk6ITF9dmFyIFF0PSh7c3RhdGU6ZSxkaXNwYXRjaDp0fSk9PiRlKGUsdCwhMSksWHQ9KHtzdGF0ZTplLGRpc3BhdGNoOnR9KT0+JGUoZSx0LCEwKTtmdW5jdGlvbiBLZShlLHQscil7aWYoZS5yZWFkT25seSlyZXR1cm4hMTtsZXQgbj1bXTtmb3IobGV0IGwgb2YgJChlKSlyP24ucHVzaCh7ZnJvbTpsLmZyb20saW5zZXJ0OmUuZG9jLnNsaWNlKGwuZnJvbSxsLnRvKStlLmxpbmVCcmVha30pOm4ucHVzaCh7ZnJvbTpsLnRvLGluc2VydDplLmxpbmVCcmVhaytlLmRvYy5zbGljZShsLmZyb20sbC50byl9KTtyZXR1cm4gdChlLnVwZGF0ZSh7Y2hhbmdlczpuLHNjcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpcImlucHV0LmNvcHlsaW5lXCJ9KSksITB9dmFyIFl0PSh7c3RhdGU6ZSxkaXNwYXRjaDp0fSk9PktlKGUsdCwhMSksWnQ9KHtzdGF0ZTplLGRpc3BhdGNoOnR9KT0+S2UoZSx0LCEwKSxfdD1lPT57aWYoZS5zdGF0ZS5yZWFkT25seSlyZXR1cm4hMTtsZXR7c3RhdGU6dH09ZSxyPXQuY2hhbmdlcygkKHQpLm1hcCgoe2Zyb206bCx0bzpvfSk9PihsPjA/bC0tOm88dC5kb2MubGVuZ3RoJiZvKysse2Zyb206bCx0bzpvfSkpKSxuPXgodC5zZWxlY3Rpb24sbD0+ZS5tb3ZlVmVydGljYWxseShsLCEwKSkubWFwKHIpO3JldHVybiBlLmRpc3BhdGNoKHtjaGFuZ2VzOnIsc2VsZWN0aW9uOm4sc2Nyb2xsSW50b1ZpZXc6ITAsdXNlckV2ZW50OlwiZGVsZXRlLmxpbmVcIn0pLCEwfSxVbj0oe3N0YXRlOmUsZGlzcGF0Y2g6dH0pPT4odChlLnVwZGF0ZShlLnJlcGxhY2VTZWxlY3Rpb24oZS5saW5lQnJlYWspLHtzY3JvbGxJbnRvVmlldzohMCx1c2VyRXZlbnQ6XCJpbnB1dFwifSkpLCEwKTtmdW5jdGlvbiBqdChlLHQpe2lmKC9cXChcXCl8XFxbXFxdfFxce1xcfS8udGVzdChlLnNsaWNlRG9jKHQtMSx0KzEpKSlyZXR1cm57ZnJvbTp0LHRvOnR9O2xldCByPWooZSkucmVzb2x2ZUlubmVyKHQpLG49ci5jaGlsZEJlZm9yZSh0KSxsPXIuY2hpbGRBZnRlcih0KSxvO3JldHVybiBuJiZsJiZuLnRvPD10JiZsLmZyb20+PXQmJihvPW4udHlwZS5wcm9wKFEuY2xvc2VkQnkpKSYmby5pbmRleE9mKGwubmFtZSk+LTEmJmUuZG9jLmxpbmVBdChuLnRvKS5mcm9tPT1lLmRvYy5saW5lQXQobC5mcm9tKS5mcm9tP3tmcm9tOm4udG8sdG86bC5mcm9tfTpudWxsfXZhciBlbj1XZSghMSksdG49V2UoITApO2Z1bmN0aW9uIFdlKGUpe3JldHVybih7c3RhdGU6dCxkaXNwYXRjaDpyfSk9PntpZih0LnJlYWRPbmx5KXJldHVybiExO2xldCBuPXQuY2hhbmdlQnlSYW5nZShsPT57bGV0e2Zyb206byx0bzpjfT1sLHM9dC5kb2MubGluZUF0KG8pLGk9IWUmJm89PWMmJmp0KHQsbyk7ZSYmKG89Yz0oYzw9cy50bz9zOnQuZG9jLmxpbmVBdChjKSkudG8pO2xldCB1PW5ldyBwZSh0LHtzaW11bGF0ZUJyZWFrOm8sc2ltdWxhdGVEb3VibGVCcmVhazohIWl9KSxmPWdlKHUsbyk7Zm9yKGY9PW51bGwmJihmPS9eXFxzKi8uZXhlYyh0LmRvYy5saW5lQXQobykudGV4dClbMF0ubGVuZ3RoKTtjPHMudG8mJi9cXHMvLnRlc3Qocy50ZXh0W2Mtcy5mcm9tXSk7KWMrKztpP3tmcm9tOm8sdG86Y309aTpvPnMuZnJvbSYmbzxzLmZyb20rMTAwJiYhL1xcUy8udGVzdChzLnRleHQuc2xpY2UoMCxvKSkmJihvPXMuZnJvbSk7bGV0IGE9W1wiXCIsVSh0LGYpXTtyZXR1cm4gaSYmYS5wdXNoKFUodCx1LmxpbmVJbmRlbnQocy5mcm9tLC0xKSkpLHtjaGFuZ2VzOntmcm9tOm8sdG86YyxpbnNlcnQ6ZGUub2YoYSl9LHJhbmdlOmguY3Vyc29yKG8rMSthWzFdLmxlbmd0aCl9fSk7cmV0dXJuIHIodC51cGRhdGUobix7c2Nyb2xsSW50b1ZpZXc6ITAsdXNlckV2ZW50OlwiaW5wdXRcIn0pKSwhMH19ZnVuY3Rpb24gbmUoZSx0KXtsZXQgcj0tMTtyZXR1cm4gZS5jaGFuZ2VCeVJhbmdlKG49PntsZXQgbD1bXTtmb3IobGV0IGM9bi5mcm9tO2M8PW4udG87KXtsZXQgcz1lLmRvYy5saW5lQXQoYyk7cy5udW1iZXI+ciYmKG4uZW1wdHl8fG4udG8+cy5mcm9tKSYmKHQocyxsLG4pLHI9cy5udW1iZXIpLGM9cy50bysxfWxldCBvPWUuY2hhbmdlcyhsKTtyZXR1cm57Y2hhbmdlczpsLHJhbmdlOmgucmFuZ2Uoby5tYXBQb3Mobi5hbmNob3IsMSksby5tYXBQb3Mobi5oZWFkLDEpKX19KX12YXIgbm49KHtzdGF0ZTplLGRpc3BhdGNoOnR9KT0+e2lmKGUucmVhZE9ubHkpcmV0dXJuITE7bGV0IHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPW5ldyBwZShlLHtvdmVycmlkZUluZGVudGF0aW9uOm89PntsZXQgYz1yW29dO3JldHVybiBjPz8tMX19KSxsPW5lKGUsKG8sYyxzKT0+e2xldCBpPWdlKG4sby5mcm9tKTtpZihpPT1udWxsKXJldHVybjsvXFxTLy50ZXN0KG8udGV4dCl8fChpPTApO2xldCB1PS9eXFxzKi8uZXhlYyhvLnRleHQpWzBdLGY9VShlLGkpOyh1IT1mfHxzLmZyb208by5mcm9tK3UubGVuZ3RoKSYmKHJbby5mcm9tXT1pLGMucHVzaCh7ZnJvbTpvLmZyb20sdG86by5mcm9tK3UubGVuZ3RoLGluc2VydDpmfSkpfSk7cmV0dXJuIGwuY2hhbmdlcy5lbXB0eXx8dChlLnVwZGF0ZShsLHt1c2VyRXZlbnQ6XCJpbmRlbnRcIn0pKSwhMH0scmU9KHtzdGF0ZTplLGRpc3BhdGNoOnR9KT0+ZS5yZWFkT25seT8hMToodChlLnVwZGF0ZShuZShlLChyLG4pPT57bi5wdXNoKHtmcm9tOnIuZnJvbSxpbnNlcnQ6ZS5mYWNldChldCl9KX0pLHt1c2VyRXZlbnQ6XCJpbnB1dC5pbmRlbnRcIn0pKSwhMCksSGU9KHtzdGF0ZTplLGRpc3BhdGNoOnR9KT0+ZS5yZWFkT25seT8hMToodChlLnVwZGF0ZShuZShlLChyLG4pPT57bGV0IGw9L15cXHMqLy5leGVjKHIudGV4dClbMF07aWYoIWwpcmV0dXJuO2xldCBvPW1lKGwsZS50YWJTaXplKSxjPTAscz1VKGUsTWF0aC5tYXgoMCxvLUgoZSkpKTtmb3IoO2M8bC5sZW5ndGgmJmM8cy5sZW5ndGgmJmwuY2hhckNvZGVBdChjKT09cy5jaGFyQ29kZUF0KGMpOyljKys7bi5wdXNoKHtmcm9tOnIuZnJvbStjLHRvOnIuZnJvbStsLmxlbmd0aCxpbnNlcnQ6cy5zbGljZShjKX0pfSkse3VzZXJFdmVudDpcImRlbGV0ZS5kZWRlbnRcIn0pKSwhMCksTm49KHtzdGF0ZTplLGRpc3BhdGNoOnR9KT0+ZS5zZWxlY3Rpb24ucmFuZ2VzLnNvbWUocj0+IXIuZW1wdHkpP3JlKHtzdGF0ZTplLGRpc3BhdGNoOnR9KToodChlLnVwZGF0ZShlLnJlcGxhY2VTZWxlY3Rpb24oXCJcdFwiKSx7c2Nyb2xsSW50b1ZpZXc6ITAsdXNlckV2ZW50OlwiaW5wdXRcIn0pKSwhMCkscm49W3trZXk6XCJDdHJsLWJcIixydW46Q2Usc2hpZnQ6SWUscHJldmVudERlZmF1bHQ6ITB9LHtrZXk6XCJDdHJsLWZcIixydW46RGUsc2hpZnQ6VWV9LHtrZXk6XCJDdHJsLXBcIixydW46T2Usc2hpZnQ6R2V9LHtrZXk6XCJDdHJsLW5cIixydW46RWUsc2hpZnQ6VmV9LHtrZXk6XCJDdHJsLWFcIixydW46T3Qsc2hpZnQ6UHR9LHtrZXk6XCJDdHJsLWVcIixydW46RXQsc2hpZnQ6dnR9LHtrZXk6XCJDdHJsLWRcIixydW46SmV9LHtrZXk6XCJDdHJsLWhcIixydW46X30se2tleTpcIkN0cmwta1wiLHJ1bjpxZX0se2tleTpcIkN0cmwtQWx0LWhcIixydW46emV9LHtrZXk6XCJDdHJsLW9cIixydW46V3R9LHtrZXk6XCJDdHJsLXRcIixydW46SHR9LHtrZXk6XCJDdHJsLXZcIixydW46Wn1dLG9uPVt7a2V5OlwiQXJyb3dMZWZ0XCIscnVuOkNlLHNoaWZ0OkllLHByZXZlbnREZWZhdWx0OiEwfSx7a2V5OlwiTW9kLUFycm93TGVmdFwiLG1hYzpcIkFsdC1BcnJvd0xlZnRcIixydW46a3Qsc2hpZnQ6VHQscHJldmVudERlZmF1bHQ6ITB9LHttYWM6XCJDbWQtQXJyb3dMZWZ0XCIscnVuOnh0LHNoaWZ0Okd0LHByZXZlbnREZWZhdWx0OiEwfSx7a2V5OlwiQXJyb3dSaWdodFwiLHJ1bjpEZSxzaGlmdDpVZSxwcmV2ZW50RGVmYXVsdDohMH0se2tleTpcIk1vZC1BcnJvd1JpZ2h0XCIsbWFjOlwiQWx0LUFycm93UmlnaHRcIixydW46QXQsc2hpZnQ6UnQscHJldmVudERlZmF1bHQ6ITB9LHttYWM6XCJDbWQtQXJyb3dSaWdodFwiLHJ1bjpNdCxzaGlmdDpWdCxwcmV2ZW50RGVmYXVsdDohMH0se2tleTpcIkFycm93VXBcIixydW46T2Usc2hpZnQ6R2UscHJldmVudERlZmF1bHQ6ITB9LHttYWM6XCJDbWQtQXJyb3dVcFwiLHJ1bjpzZSxzaGlmdDp1ZX0se21hYzpcIkN0cmwtQXJyb3dVcFwiLHJ1bjpvZSxzaGlmdDpsZX0se2tleTpcIkFycm93RG93blwiLHJ1bjpFZSxzaGlmdDpWZSxwcmV2ZW50RGVmYXVsdDohMH0se21hYzpcIkNtZC1BcnJvd0Rvd25cIixydW46aWUsc2hpZnQ6ZmV9LHttYWM6XCJDdHJsLUFycm93RG93blwiLHJ1bjpaLHNoaWZ0OmNlfSx7a2V5OlwiUGFnZVVwXCIscnVuOm9lLHNoaWZ0OmxlfSx7a2V5OlwiUGFnZURvd25cIixydW46WixzaGlmdDpjZX0se2tleTpcIkhvbWVcIixydW46THQsc2hpZnQ6d3QscHJldmVudERlZmF1bHQ6ITB9LHtrZXk6XCJNb2QtSG9tZVwiLHJ1bjpzZSxzaGlmdDp1ZX0se2tleTpcIkVuZFwiLHJ1bjpEdCxzaGlmdDpOdCxwcmV2ZW50RGVmYXVsdDohMH0se2tleTpcIk1vZC1FbmRcIixydW46aWUsc2hpZnQ6ZmV9LHtrZXk6XCJFbnRlclwiLHJ1bjplbn0se2tleTpcIk1vZC1hXCIscnVuOkp0fSx7a2V5OlwiQmFja3NwYWNlXCIscnVuOl8sc2hpZnQ6X30se2tleTpcIkRlbGV0ZVwiLHJ1bjpKZX0se2tleTpcIk1vZC1CYWNrc3BhY2VcIixtYWM6XCJBbHQtQmFja3NwYWNlXCIscnVuOnplfSx7a2V5OlwiTW9kLURlbGV0ZVwiLG1hYzpcIkFsdC1EZWxldGVcIixydW46JHR9LHttYWM6XCJNb2QtQmFja3NwYWNlXCIscnVuOkt0fSx7bWFjOlwiTW9kLURlbGV0ZVwiLHJ1bjpxZX1dLmNvbmNhdChybi5tYXAoZT0+KHttYWM6ZS5rZXkscnVuOmUucnVuLHNoaWZ0OmUuc2hpZnR9KSkpLHduPVt7a2V5OlwiQWx0LUFycm93TGVmdFwiLG1hYzpcIkN0cmwtQXJyb3dMZWZ0XCIscnVuOlN0LHNoaWZ0Okl0fSx7a2V5OlwiQWx0LUFycm93UmlnaHRcIixtYWM6XCJDdHJsLUFycm93UmlnaHRcIixydW46Q3Qsc2hpZnQ6VXR9LHtrZXk6XCJBbHQtQXJyb3dVcFwiLHJ1bjpRdH0se2tleTpcIlNoaWZ0LUFsdC1BcnJvd1VwXCIscnVuOll0fSx7a2V5OlwiQWx0LUFycm93RG93blwiLHJ1bjpYdH0se2tleTpcIlNoaWZ0LUFsdC1BcnJvd0Rvd25cIixydW46WnR9LHtrZXk6XCJFc2NhcGVcIixydW46cXR9LHtrZXk6XCJNb2QtRW50ZXJcIixydW46dG59LHtrZXk6XCJBbHQtbFwiLG1hYzpcIkN0cmwtbFwiLHJ1bjpGdH0se2tleTpcIk1vZC1pXCIscnVuOnp0LHByZXZlbnREZWZhdWx0OiEwfSx7a2V5OlwiTW9kLVtcIixydW46SGV9LHtrZXk6XCJNb2QtXVwiLHJ1bjpyZX0se2tleTpcIk1vZC1BbHQtXFxcXFwiLHJ1bjpubn0se2tleTpcIlNoaWZ0LU1vZC1rXCIscnVuOl90fSx7a2V5OlwiU2hpZnQtTW9kLVxcXFxcIixydW46YnR9LHtrZXk6XCJNb2QtL1wiLHJ1bjp0dH0se2tleTpcIkFsdC1BXCIscnVuOnJ0fV0uY29uY2F0KG9uKSxHbj17a2V5OlwiVGFiXCIscnVuOnJlLHNoaWZ0OkhlfTtleHBvcnR7aG4gYXMgYmxvY2tDb21tZW50LGRuIGFzIGJsb2NrVW5jb21tZW50LFp0IGFzIGNvcHlMaW5lRG93bixZdCBhcyBjb3B5TGluZVVwLEJuIGFzIGN1cnNvckNoYXJCYWNrd2FyZCxBbiBhcyBjdXJzb3JDaGFyRm9yd2FyZCxDZSBhcyBjdXJzb3JDaGFyTGVmdCxEZSBhcyBjdXJzb3JDaGFyUmlnaHQsaWUgYXMgY3Vyc29yRG9jRW5kLHNlIGFzIGN1cnNvckRvY1N0YXJ0LENuIGFzIGN1cnNvckdyb3VwQmFja3dhcmQsU24gYXMgY3Vyc29yR3JvdXBGb3J3YXJkLGt0IGFzIGN1cnNvckdyb3VwTGVmdCxBdCBhcyBjdXJzb3JHcm91cFJpZ2h0LEx0IGFzIGN1cnNvckxpbmVCb3VuZGFyeUJhY2t3YXJkLER0IGFzIGN1cnNvckxpbmVCb3VuZGFyeUZvcndhcmQseHQgYXMgY3Vyc29yTGluZUJvdW5kYXJ5TGVmdCxNdCBhcyBjdXJzb3JMaW5lQm91bmRhcnlSaWdodCxFZSBhcyBjdXJzb3JMaW5lRG93bixFdCBhcyBjdXJzb3JMaW5lRW5kLE90IGFzIGN1cnNvckxpbmVTdGFydCxPZSBhcyBjdXJzb3JMaW5lVXAsYnQgYXMgY3Vyc29yTWF0Y2hpbmdCcmFja2V0LFogYXMgY3Vyc29yUGFnZURvd24sb2UgYXMgY3Vyc29yUGFnZVVwLExuIGFzIGN1cnNvclN1YndvcmRCYWNrd2FyZCxEbiBhcyBjdXJzb3JTdWJ3b3JkRm9yd2FyZCxTdCBhcyBjdXJzb3JTeW50YXhMZWZ0LEN0IGFzIGN1cnNvclN5bnRheFJpZ2h0LHduIGFzIGRlZmF1bHRLZXltYXAsXyBhcyBkZWxldGVDaGFyQmFja3dhcmQsSmUgYXMgZGVsZXRlQ2hhckZvcndhcmQsemUgYXMgZGVsZXRlR3JvdXBCYWNrd2FyZCwkdCBhcyBkZWxldGVHcm91cEZvcndhcmQsX3QgYXMgZGVsZXRlTGluZSxxZSBhcyBkZWxldGVUb0xpbmVFbmQsS3QgYXMgZGVsZXRlVG9MaW5lU3RhcnQsSW4gYXMgZGVsZXRlVHJhaWxpbmdXaGl0ZXNwYWNlLHJuIGFzIGVtYWNzU3R5bGVLZXltYXAsbW4gYXMgaGlzdG9yeSxwbiBhcyBoaXN0b3J5RmllbGQsa24gYXMgaGlzdG9yeUtleW1hcCxIZSBhcyBpbmRlbnRMZXNzLHJlIGFzIGluZGVudE1vcmUsbm4gYXMgaW5kZW50U2VsZWN0aW9uLEduIGFzIGluZGVudFdpdGhUYWIsdG4gYXMgaW5zZXJ0QmxhbmtMaW5lLFVuIGFzIGluc2VydE5ld2xpbmUsZW4gYXMgaW5zZXJ0TmV3bGluZUFuZEluZGVudCxObiBhcyBpbnNlcnRUYWIsaXQgYXMgaW52ZXJ0ZWRFZmZlY3RzLHN0IGFzIGlzb2xhdGVIaXN0b3J5LGZuIGFzIGxpbmVDb21tZW50LGFuIGFzIGxpbmVVbmNvbW1lbnQsWHQgYXMgbW92ZUxpbmVEb3duLFF0IGFzIG1vdmVMaW5lVXAsWSBhcyByZWRvLHluIGFzIHJlZG9EZXB0aCxhdCBhcyByZWRvU2VsZWN0aW9uLEp0IGFzIHNlbGVjdEFsbCxPbiBhcyBzZWxlY3RDaGFyQmFja3dhcmQsTW4gYXMgc2VsZWN0Q2hhckZvcndhcmQsSWUgYXMgc2VsZWN0Q2hhckxlZnQsVWUgYXMgc2VsZWN0Q2hhclJpZ2h0LGZlIGFzIHNlbGVjdERvY0VuZCx1ZSBhcyBzZWxlY3REb2NTdGFydCxibiBhcyBzZWxlY3RHcm91cEJhY2t3YXJkLEVuIGFzIHNlbGVjdEdyb3VwRm9yd2FyZCxUdCBhcyBzZWxlY3RHcm91cExlZnQsUnQgYXMgc2VsZWN0R3JvdXBSaWdodCxGdCBhcyBzZWxlY3RMaW5lLHd0IGFzIHNlbGVjdExpbmVCb3VuZGFyeUJhY2t3YXJkLE50IGFzIHNlbGVjdExpbmVCb3VuZGFyeUZvcndhcmQsR3QgYXMgc2VsZWN0TGluZUJvdW5kYXJ5TGVmdCxWdCBhcyBzZWxlY3RMaW5lQm91bmRhcnlSaWdodCxWZSBhcyBzZWxlY3RMaW5lRG93bix2dCBhcyBzZWxlY3RMaW5lRW5kLFB0IGFzIHNlbGVjdExpbmVTdGFydCxHZSBhcyBzZWxlY3RMaW5lVXAseG4gYXMgc2VsZWN0TWF0Y2hpbmdCcmFja2V0LGNlIGFzIHNlbGVjdFBhZ2VEb3duLGxlIGFzIHNlbGVjdFBhZ2VVcCx6dCBhcyBzZWxlY3RQYXJlbnRTeW50YXgsUm4gYXMgc2VsZWN0U3Vid29yZEJhY2t3YXJkLFRuIGFzIHNlbGVjdFN1YndvcmRGb3J3YXJkLEl0IGFzIHNlbGVjdFN5bnRheExlZnQsVXQgYXMgc2VsZWN0U3ludGF4UmlnaHQscXQgYXMgc2ltcGxpZnlTZWxlY3Rpb24sV3QgYXMgc3BsaXRMaW5lLG9uIGFzIHN0YW5kYXJkS2V5bWFwLHJ0IGFzIHRvZ2dsZUJsb2NrQ29tbWVudCxvdCBhcyB0b2dnbGVCbG9ja0NvbW1lbnRCeUxpbmUsdHQgYXMgdG9nZ2xlQ29tbWVudCxudCBhcyB0b2dnbGVMaW5lQ29tbWVudCxIdCBhcyB0cmFuc3Bvc2VDaGFycyxrZSBhcyB1bmRvLGduIGFzIHVuZG9EZXB0aCxmdCBhcyB1bmRvU2VsZWN0aW9ufTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShAbGV6ZXIvaGlnaGxpZ2h0QDEuMS4xKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydHtOb2RlUHJvcCBhcyBKfWZyb21cIkBsZXplci9jb21tb25cIjt2YXIgTD0wLGY9Y2xhc3N7Y29uc3RydWN0b3IodCxhLGkpe3RoaXMuc2V0PXQsdGhpcy5iYXNlPWEsdGhpcy5tb2RpZmllZD1pLHRoaXMuaWQ9TCsrfXN0YXRpYyBkZWZpbmUodCl7aWYodD8uYmFzZSl0aHJvdyBuZXcgRXJyb3IoXCJDYW4gbm90IGRlcml2ZSBmcm9tIGEgbW9kaWZpZWQgdGFnXCIpO2xldCBhPW5ldyBmKFtdLG51bGwsW10pO2lmKGEuc2V0LnB1c2goYSksdClmb3IobGV0IGkgb2YgdC5zZXQpYS5zZXQucHVzaChpKTtyZXR1cm4gYX1zdGF0aWMgZGVmaW5lTW9kaWZpZXIoKXtsZXQgdD1uZXcgdjtyZXR1cm4gYT0+YS5tb2RpZmllZC5pbmRleE9mKHQpPi0xP2E6di5nZXQoYS5iYXNlfHxhLGEubW9kaWZpZWQuY29uY2F0KHQpLnNvcnQoKGksbCk9PmkuaWQtbC5pZCkpfX0sUT0wLHY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmluc3RhbmNlcz1bXSx0aGlzLmlkPVErK31zdGF0aWMgZ2V0KHQsYSl7aWYoIWEubGVuZ3RoKXJldHVybiB0O2xldCBpPWFbMF0uaW5zdGFuY2VzLmZpbmQobz0+by5iYXNlPT10JiZVKGEsby5tb2RpZmllZCkpO2lmKGkpcmV0dXJuIGk7bGV0IGw9W10scz1uZXcgZihsLHQsYSk7Zm9yKGxldCBvIG9mIGEpby5pbnN0YW5jZXMucHVzaChzKTtsZXQgYz1WKGEpO2ZvcihsZXQgbyBvZiB0LnNldClmb3IobGV0IGQgb2YgYylsLnB1c2godi5nZXQobyxkKSk7cmV0dXJuIHN9fTtmdW5jdGlvbiBVKHIsdCl7cmV0dXJuIHIubGVuZ3RoPT10Lmxlbmd0aCYmci5ldmVyeSgoYSxpKT0+YT09dFtpXSl9ZnVuY3Rpb24gVihyKXtsZXQgdD1bcl07Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspZm9yKGxldCBpIG9mIFYoci5zbGljZSgwLGEpLmNvbmNhdChyLnNsaWNlKGErMSkpKSl0LnB1c2goaSk7cmV0dXJuIHR9ZnVuY3Rpb24gJChyKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgYSBpbiByKXtsZXQgaT1yW2FdO0FycmF5LmlzQXJyYXkoaSl8fChpPVtpXSk7Zm9yKGxldCBsIG9mIGEuc3BsaXQoXCIgXCIpKWlmKGwpe2xldCBzPVtdLGM9MixvPWw7Zm9yKGxldCBwPTA7Oyl7aWYobz09XCIuLi5cIiYmcD4wJiZwKzM9PWwubGVuZ3RoKXtjPTE7YnJlYWt9bGV0IGg9L15cIig/OlteXCJcXFxcXXxcXFxcLikqP1wifFteXFwvIV0rLy5leGVjKG8pO2lmKCFoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBwYXRoOiBcIitsKTtpZihzLnB1c2goaFswXT09XCIqXCI/XCJcIjpoWzBdWzBdPT0nXCInP0pTT04ucGFyc2UoaFswXSk6aFswXSkscCs9aFswXS5sZW5ndGgscD09bC5sZW5ndGgpYnJlYWs7bGV0IE49bFtwKytdO2lmKHA9PWwubGVuZ3RoJiZOPT1cIiFcIil7Yz0wO2JyZWFrfWlmKE4hPVwiL1wiKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBwYXRoOiBcIitsKTtvPWwuc2xpY2UocCl9bGV0IGQ9cy5sZW5ndGgtMSxnPXNbZF07aWYoIWcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHBhdGg6IFwiK2wpO2xldCBPPW5ldyBNKGksYyxkPjA/cy5zbGljZSgwLGQpOm51bGwpO3RbZ109Ty5zb3J0KHRbZ10pfX1yZXR1cm4gei5hZGQodCl9dmFyIHo9bmV3IEosTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGEsaSxsKXt0aGlzLnRhZ3M9dCx0aGlzLm1vZGU9YSx0aGlzLmNvbnRleHQ9aSx0aGlzLm5leHQ9bH1nZXQgb3BhcXVlKCl7cmV0dXJuIHRoaXMubW9kZT09MH1nZXQgaW5oZXJpdCgpe3JldHVybiB0aGlzLm1vZGU9PTF9c29ydCh0KXtyZXR1cm4hdHx8dC5kZXB0aDx0aGlzLmRlcHRoPyh0aGlzLm5leHQ9dCx0aGlzKToodC5uZXh0PXRoaXMuc29ydCh0Lm5leHQpLHQpfWdldCBkZXB0aCgpe3JldHVybiB0aGlzLmNvbnRleHQ/dGhpcy5jb250ZXh0Lmxlbmd0aDowfX07TS5lbXB0eT1uZXcgTShbXSwyLG51bGwpO2Z1bmN0aW9uIFcocix0KXtsZXQgYT1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgcyBvZiByKWlmKCFBcnJheS5pc0FycmF5KHMudGFnKSlhW3MudGFnLmlkXT1zLmNsYXNzO2Vsc2UgZm9yKGxldCBjIG9mIHMudGFnKWFbYy5pZF09cy5jbGFzcztsZXR7c2NvcGU6aSxhbGw6bD1udWxsfT10fHx7fTtyZXR1cm57c3R5bGU6cz0+e2xldCBjPWw7Zm9yKGxldCBvIG9mIHMpZm9yKGxldCBkIG9mIG8uc2V0KXtsZXQgZz1hW2QuaWRdO2lmKGcpe2M9Yz9jK1wiIFwiK2c6ZzticmVha319cmV0dXJuIGN9LHNjb3BlOml9fWZ1bmN0aW9uIFgocix0KXtsZXQgYT1udWxsO2ZvcihsZXQgaSBvZiByKXtsZXQgbD1pLnN0eWxlKHQpO2wmJihhPWE/YStcIiBcIitsOmwpfXJldHVybiBhfWZ1bmN0aW9uIF8ocix0LGEsaT0wLGw9ci5sZW5ndGgpe2xldCBzPW5ldyBQKGksQXJyYXkuaXNBcnJheSh0KT90Olt0XSxhKTtzLmhpZ2hsaWdodFJhbmdlKHIuY3Vyc29yKCksaSxsLFwiXCIscy5oaWdobGlnaHRlcnMpLHMuZmx1c2gobCl9dmFyIFA9Y2xhc3N7Y29uc3RydWN0b3IodCxhLGkpe3RoaXMuYXQ9dCx0aGlzLmhpZ2hsaWdodGVycz1hLHRoaXMuc3Bhbj1pLHRoaXMuY2xhc3M9XCJcIn1zdGFydFNwYW4odCxhKXthIT10aGlzLmNsYXNzJiYodGhpcy5mbHVzaCh0KSx0PnRoaXMuYXQmJih0aGlzLmF0PXQpLHRoaXMuY2xhc3M9YSl9Zmx1c2godCl7dD50aGlzLmF0JiZ0aGlzLmNsYXNzJiZ0aGlzLnNwYW4odGhpcy5hdCx0LHRoaXMuY2xhc3MpfWhpZ2hsaWdodFJhbmdlKHQsYSxpLGwscyl7bGV0e3R5cGU6Yyxmcm9tOm8sdG86ZH09dDtpZihvPj1pfHxkPD1hKXJldHVybjtjLmlzVG9wJiYocz10aGlzLmhpZ2hsaWdodGVycy5maWx0ZXIoTj0+IU4uc2NvcGV8fE4uc2NvcGUoYykpKTtsZXQgZz1sLE89WSh0KXx8TS5lbXB0eSxwPVgocyxPLnRhZ3MpO2lmKHAmJihnJiYoZys9XCIgXCIpLGcrPXAsTy5tb2RlPT0xJiYobCs9KGw/XCIgXCI6XCJcIikrcCkpLHRoaXMuc3RhcnRTcGFuKHQuZnJvbSxnKSxPLm9wYXF1ZSlyZXR1cm47bGV0IGg9dC50cmVlJiZ0LnRyZWUucHJvcChKLm1vdW50ZWQpO2lmKGgmJmgub3ZlcmxheSl7bGV0IE49dC5ub2RlLmVudGVyKGgub3ZlcmxheVswXS5mcm9tK28sMSksRz10aGlzLmhpZ2hsaWdodGVycy5maWx0ZXIoeD0+IXguc2NvcGV8fHguc2NvcGUoaC50cmVlLnR5cGUpKSxEPXQuZmlyc3RDaGlsZCgpO2ZvcihsZXQgeD0wLFM9bzs7eCsrKXtsZXQgQT14PGgub3ZlcmxheS5sZW5ndGg/aC5vdmVybGF5W3hdOm51bGwscT1BP0EuZnJvbStvOmQsSD1NYXRoLm1heChhLFMpLEU9TWF0aC5taW4oaSxxKTtpZihIPEUmJkQpZm9yKDt0LmZyb208RSYmKHRoaXMuaGlnaGxpZ2h0UmFuZ2UodCxILEUsbCxzKSx0aGlzLnN0YXJ0U3BhbihNYXRoLm1pbihpLHQudG8pLGcpLCEodC50bz49cXx8IXQubmV4dFNpYmxpbmcoKSkpOyk7aWYoIUF8fHE+aSlicmVhaztTPUEudG8rbyxTPmEmJih0aGlzLmhpZ2hsaWdodFJhbmdlKE4uY3Vyc29yKCksTWF0aC5tYXgoYSxBLmZyb20rbyksTWF0aC5taW4oaSxTKSxsLEcpLHRoaXMuc3RhcnRTcGFuKFMsZykpfUQmJnQucGFyZW50KCl9ZWxzZSBpZih0LmZpcnN0Q2hpbGQoKSl7ZG8gaWYoISh0LnRvPD1hKSl7aWYodC5mcm9tPj1pKWJyZWFrO3RoaXMuaGlnaGxpZ2h0UmFuZ2UodCxhLGksbCxzKSx0aGlzLnN0YXJ0U3BhbihNYXRoLm1pbihpLHQudG8pLGcpfXdoaWxlKHQubmV4dFNpYmxpbmcoKSk7dC5wYXJlbnQoKX19fTtmdW5jdGlvbiBZKHIpe2xldCB0PXIudHlwZS5wcm9wKHopO2Zvcig7dCYmdC5jb250ZXh0JiYhci5tYXRjaENvbnRleHQodC5jb250ZXh0KTspdD10Lm5leHQ7cmV0dXJuIHR8fG51bGx9dmFyIGU9Zi5kZWZpbmUsST1lKCksYj1lKCksQj1lKGIpLEY9ZShiKSx5PWUoKSxDPWUoeSksSz1lKHkpLGs9ZSgpLHc9ZShrKSxtPWUoKSx1PWUoKSxqPWUoKSxSPWUoaiksVD1lKCksbj17Y29tbWVudDpJLGxpbmVDb21tZW50OmUoSSksYmxvY2tDb21tZW50OmUoSSksZG9jQ29tbWVudDplKEkpLG5hbWU6Yix2YXJpYWJsZU5hbWU6ZShiKSx0eXBlTmFtZTpCLHRhZ05hbWU6ZShCKSxwcm9wZXJ0eU5hbWU6RixhdHRyaWJ1dGVOYW1lOmUoRiksY2xhc3NOYW1lOmUoYiksbGFiZWxOYW1lOmUoYiksbmFtZXNwYWNlOmUoYiksbWFjcm9OYW1lOmUoYiksbGl0ZXJhbDp5LHN0cmluZzpDLGRvY1N0cmluZzplKEMpLGNoYXJhY3RlcjplKEMpLGF0dHJpYnV0ZVZhbHVlOmUoQyksbnVtYmVyOkssaW50ZWdlcjplKEspLGZsb2F0OmUoSyksYm9vbDplKHkpLHJlZ2V4cDplKHkpLGVzY2FwZTplKHkpLGNvbG9yOmUoeSksdXJsOmUoeSksa2V5d29yZDptLHNlbGY6ZShtKSxudWxsOmUobSksYXRvbTplKG0pLHVuaXQ6ZShtKSxtb2RpZmllcjplKG0pLG9wZXJhdG9yS2V5d29yZDplKG0pLGNvbnRyb2xLZXl3b3JkOmUobSksZGVmaW5pdGlvbktleXdvcmQ6ZShtKSxtb2R1bGVLZXl3b3JkOmUobSksb3BlcmF0b3I6dSxkZXJlZk9wZXJhdG9yOmUodSksYXJpdGhtZXRpY09wZXJhdG9yOmUodSksbG9naWNPcGVyYXRvcjplKHUpLGJpdHdpc2VPcGVyYXRvcjplKHUpLGNvbXBhcmVPcGVyYXRvcjplKHUpLHVwZGF0ZU9wZXJhdG9yOmUodSksZGVmaW5pdGlvbk9wZXJhdG9yOmUodSksdHlwZU9wZXJhdG9yOmUodSksY29udHJvbE9wZXJhdG9yOmUodSkscHVuY3R1YXRpb246aixzZXBhcmF0b3I6ZShqKSxicmFja2V0OlIsYW5nbGVCcmFja2V0OmUoUiksc3F1YXJlQnJhY2tldDplKFIpLHBhcmVuOmUoUiksYnJhY2U6ZShSKSxjb250ZW50OmssaGVhZGluZzp3LGhlYWRpbmcxOmUodyksaGVhZGluZzI6ZSh3KSxoZWFkaW5nMzplKHcpLGhlYWRpbmc0OmUodyksaGVhZGluZzU6ZSh3KSxoZWFkaW5nNjplKHcpLGNvbnRlbnRTZXBhcmF0b3I6ZShrKSxsaXN0OmUoaykscXVvdGU6ZShrKSxlbXBoYXNpczplKGspLHN0cm9uZzplKGspLGxpbms6ZShrKSxtb25vc3BhY2U6ZShrKSxzdHJpa2V0aHJvdWdoOmUoayksaW5zZXJ0ZWQ6ZSgpLGRlbGV0ZWQ6ZSgpLGNoYW5nZWQ6ZSgpLGludmFsaWQ6ZSgpLG1ldGE6VCxkb2N1bWVudE1ldGE6ZShUKSxhbm5vdGF0aW9uOmUoVCkscHJvY2Vzc2luZ0luc3RydWN0aW9uOmUoVCksZGVmaW5pdGlvbjpmLmRlZmluZU1vZGlmaWVyKCksY29uc3RhbnQ6Zi5kZWZpbmVNb2RpZmllcigpLGZ1bmN0aW9uOmYuZGVmaW5lTW9kaWZpZXIoKSxzdGFuZGFyZDpmLmRlZmluZU1vZGlmaWVyKCksbG9jYWw6Zi5kZWZpbmVNb2RpZmllcigpLHNwZWNpYWw6Zi5kZWZpbmVNb2RpZmllcigpfSx0dD1XKFt7dGFnOm4ubGluayxjbGFzczpcInRvay1saW5rXCJ9LHt0YWc6bi5oZWFkaW5nLGNsYXNzOlwidG9rLWhlYWRpbmdcIn0se3RhZzpuLmVtcGhhc2lzLGNsYXNzOlwidG9rLWVtcGhhc2lzXCJ9LHt0YWc6bi5zdHJvbmcsY2xhc3M6XCJ0b2stc3Ryb25nXCJ9LHt0YWc6bi5rZXl3b3JkLGNsYXNzOlwidG9rLWtleXdvcmRcIn0se3RhZzpuLmF0b20sY2xhc3M6XCJ0b2stYXRvbVwifSx7dGFnOm4uYm9vbCxjbGFzczpcInRvay1ib29sXCJ9LHt0YWc6bi51cmwsY2xhc3M6XCJ0b2stdXJsXCJ9LHt0YWc6bi5sYWJlbE5hbWUsY2xhc3M6XCJ0b2stbGFiZWxOYW1lXCJ9LHt0YWc6bi5pbnNlcnRlZCxjbGFzczpcInRvay1pbnNlcnRlZFwifSx7dGFnOm4uZGVsZXRlZCxjbGFzczpcInRvay1kZWxldGVkXCJ9LHt0YWc6bi5saXRlcmFsLGNsYXNzOlwidG9rLWxpdGVyYWxcIn0se3RhZzpuLnN0cmluZyxjbGFzczpcInRvay1zdHJpbmdcIn0se3RhZzpuLm51bWJlcixjbGFzczpcInRvay1udW1iZXJcIn0se3RhZzpbbi5yZWdleHAsbi5lc2NhcGUsbi5zcGVjaWFsKG4uc3RyaW5nKV0sY2xhc3M6XCJ0b2stc3RyaW5nMlwifSx7dGFnOm4udmFyaWFibGVOYW1lLGNsYXNzOlwidG9rLXZhcmlhYmxlTmFtZVwifSx7dGFnOm4ubG9jYWwobi52YXJpYWJsZU5hbWUpLGNsYXNzOlwidG9rLXZhcmlhYmxlTmFtZSB0b2stbG9jYWxcIn0se3RhZzpuLmRlZmluaXRpb24obi52YXJpYWJsZU5hbWUpLGNsYXNzOlwidG9rLXZhcmlhYmxlTmFtZSB0b2stZGVmaW5pdGlvblwifSx7dGFnOm4uc3BlY2lhbChuLnZhcmlhYmxlTmFtZSksY2xhc3M6XCJ0b2stdmFyaWFibGVOYW1lMlwifSx7dGFnOm4uZGVmaW5pdGlvbihuLnByb3BlcnR5TmFtZSksY2xhc3M6XCJ0b2stcHJvcGVydHlOYW1lIHRvay1kZWZpbml0aW9uXCJ9LHt0YWc6bi50eXBlTmFtZSxjbGFzczpcInRvay10eXBlTmFtZVwifSx7dGFnOm4ubmFtZXNwYWNlLGNsYXNzOlwidG9rLW5hbWVzcGFjZVwifSx7dGFnOm4uY2xhc3NOYW1lLGNsYXNzOlwidG9rLWNsYXNzTmFtZVwifSx7dGFnOm4ubWFjcm9OYW1lLGNsYXNzOlwidG9rLW1hY3JvTmFtZVwifSx7dGFnOm4ucHJvcGVydHlOYW1lLGNsYXNzOlwidG9rLXByb3BlcnR5TmFtZVwifSx7dGFnOm4ub3BlcmF0b3IsY2xhc3M6XCJ0b2stb3BlcmF0b3JcIn0se3RhZzpuLmNvbW1lbnQsY2xhc3M6XCJ0b2stY29tbWVudFwifSx7dGFnOm4ubWV0YSxjbGFzczpcInRvay1tZXRhXCJ9LHt0YWc6bi5pbnZhbGlkLGNsYXNzOlwidG9rLWludmFsaWRcIn0se3RhZzpuLnB1bmN0dWF0aW9uLGNsYXNzOlwidG9rLXB1bmN0dWF0aW9uXCJ9XSk7ZXhwb3J0e2YgYXMgVGFnLHR0IGFzIGNsYXNzSGlnaGxpZ2h0ZXIsWSBhcyBnZXRTdHlsZVRhZ3MsXyBhcyBoaWdobGlnaHRUcmVlLCQgYXMgc3R5bGVUYWdzLFcgYXMgdGFnSGlnaGxpZ2h0ZXIsbiBhcyB0YWdzfTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShzdHlsZS1tb2RANC4wLjApIGRlbm8gcHJvZHVjdGlvbiAqL1xudmFyIFM9XCJcXHUwMzdDXCIsdz10eXBlb2YgU3ltYm9sPlwidVwiP1wiX19cIitTOlN5bWJvbC5mb3IoUyksYz10eXBlb2YgU3ltYm9sPlwidVwiP1wiX19zdHlsZVNldFwiK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTgpOlN5bWJvbChcInN0eWxlU2V0XCIpLGI9dHlwZW9mIGdsb2JhbFRoaXM8XCJ1XCI/Z2xvYmFsVGhpczp0eXBlb2YgZG9jdW1lbnQ8XCJ1XCI/d2luZG93Ont9LFQ9Y2xhc3N7Y29uc3RydWN0b3IoZSxsKXt0aGlzLnJ1bGVzPVtdO2xldHtmaW5pc2g6dX09bHx8e307ZnVuY3Rpb24gbih0KXtyZXR1cm4vXkAvLnRlc3QodCk/W3RdOnQuc3BsaXQoLyxcXHMqLyl9ZnVuY3Rpb24gcyh0LGksaCx4KXtsZXQgZD1bXSxyPS9eQChcXHcrKVxcYi8uZXhlYyh0WzBdKSxnPXImJnJbMV09PVwia2V5ZnJhbWVzXCI7aWYociYmaT09bnVsbClyZXR1cm4gaC5wdXNoKHRbMF0rXCI7XCIpO2ZvcihsZXQgYSBpbiBpKXtsZXQgbz1pW2FdO2lmKC8mLy50ZXN0KGEpKXMoYS5zcGxpdCgvLFxccyovKS5tYXAoZj0+dC5tYXAoeT0+Zi5yZXBsYWNlKC8mLyx5KSkpLnJlZHVjZSgoZix5KT0+Zi5jb25jYXQoeSkpLG8saCk7ZWxzZSBpZihvJiZ0eXBlb2Ygbz09XCJvYmplY3RcIil7aWYoIXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUaGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSAoXCIrYStcIikgc2hvdWxkIGJlIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtzKG4oYSksbyxkLGcpfWVsc2UgbyE9bnVsbCYmZC5wdXNoKGEucmVwbGFjZSgvXy4qLyxcIlwiKS5yZXBsYWNlKC9bQS1aXS9nLGY9PlwiLVwiK2YudG9Mb3dlckNhc2UoKSkrXCI6IFwiK28rXCI7XCIpfShkLmxlbmd0aHx8ZykmJmgucHVzaCgodSYmIXImJiF4P3QubWFwKHUpOnQpLmpvaW4oXCIsIFwiKStcIiB7XCIrZC5qb2luKFwiIFwiKStcIn1cIil9Zm9yKGxldCB0IGluIGUpcyhuKHQpLGVbdF0sdGhpcy5ydWxlcyl9Z2V0UnVsZXMoKXtyZXR1cm4gdGhpcy5ydWxlcy5qb2luKGBcbmApfXN0YXRpYyBuZXdOYW1lKCl7bGV0IGU9Ylt3XXx8MTtyZXR1cm4gYlt3XT1lKzEsUytlLnRvU3RyaW5nKDM2KX1zdGF0aWMgbW91bnQoZSxsKXsoZVtjXXx8bmV3IG0oZSkpLm1vdW50KEFycmF5LmlzQXJyYXkobCk/bDpbbF0pfX0scD1udWxsLG09Y2xhc3N7Y29uc3RydWN0b3IoZSl7aWYoIWUuaGVhZCYmZS5hZG9wdGVkU3R5bGVTaGVldHMmJnR5cGVvZiBDU1NTdHlsZVNoZWV0PFwidVwiKXtpZihwKXJldHVybiBlLmFkb3B0ZWRTdHlsZVNoZWV0cz1bcC5zaGVldF0uY29uY2F0KGUuYWRvcHRlZFN0eWxlU2hlZXRzKSxlW2NdPXA7dGhpcy5zaGVldD1uZXcgQ1NTU3R5bGVTaGVldCxlLmFkb3B0ZWRTdHlsZVNoZWV0cz1bdGhpcy5zaGVldF0uY29uY2F0KGUuYWRvcHRlZFN0eWxlU2hlZXRzKSxwPXRoaXN9ZWxzZXt0aGlzLnN0eWxlVGFnPShlLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtsZXQgbD1lLmhlYWR8fGU7bC5pbnNlcnRCZWZvcmUodGhpcy5zdHlsZVRhZyxsLmZpcnN0Q2hpbGQpfXRoaXMubW9kdWxlcz1bXSxlW2NdPXRoaXN9bW91bnQoZSl7bGV0IGw9dGhpcy5zaGVldCx1PTAsbj0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKXtsZXQgdD1lW3NdLGk9dGhpcy5tb2R1bGVzLmluZGV4T2YodCk7aWYoaTxuJiZpPi0xJiYodGhpcy5tb2R1bGVzLnNwbGljZShpLDEpLG4tLSxpPS0xKSxpPT0tMSl7aWYodGhpcy5tb2R1bGVzLnNwbGljZShuKyssMCx0KSxsKWZvcihsZXQgaD0wO2g8dC5ydWxlcy5sZW5ndGg7aCsrKWwuaW5zZXJ0UnVsZSh0LnJ1bGVzW2hdLHUrKyl9ZWxzZXtmb3IoO248aTspdSs9dGhpcy5tb2R1bGVzW24rK10ucnVsZXMubGVuZ3RoO3UrPXQucnVsZXMubGVuZ3RoLG4rK319aWYoIWwpe2xldCBzPVwiXCI7Zm9yKGxldCB0PTA7dDx0aGlzLm1vZHVsZXMubGVuZ3RoO3QrKylzKz10aGlzLm1vZHVsZXNbdF0uZ2V0UnVsZXMoKStgXG5gO3RoaXMuc3R5bGVUYWcudGV4dENvbnRlbnQ9c319fTtleHBvcnR7VCBhcyBTdHlsZU1vZHVsZX07XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGNvZGVtaXJyb3IvbGFuZ3VhZ2VANi4yLjEpIGRlbm8gcHJvZHVjdGlvbiAqL1xuaW1wb3J0e05vZGVQcm9wIGFzIHYsVHJlZSBhcyBwLEl0ZXJNb2RlIGFzIHF0LFRyZWVGcmFnbWVudCBhcyBXLFBhcnNlciBhcyBrdCxOb2RlVHlwZSBhcyBKLE5vZGVTZXQgYXMgSHR9ZnJvbVwiQGxlemVyL2NvbW1vblwiO2ltcG9ydHtTdGF0ZUVmZmVjdCBhcyBLLFN0YXRlRmllbGQgYXMgb3QsRmFjZXQgYXMgYixFZGl0b3JTdGF0ZSBhcyBPLGNvdW50Q29sdW1uIGFzIEp0LGNvbWJpbmVDb25maWcgYXMgYnQsUmFuZ2VTZXQgYXMgd3QsUmFuZ2VTZXRCdWlsZGVyIGFzIHl0LFByZWMgYXMgS3R9ZnJvbVwiQGNvZGVtaXJyb3Ivc3RhdGVcIjtpbXBvcnR7Vmlld1BsdWdpbiBhcyBsdCxsb2dFeGNlcHRpb24gYXMgX3QsRGVjb3JhdGlvbiBhcyBrLEVkaXRvclZpZXcgYXMgeSxXaWRnZXRUeXBlIGFzIFF0LGd1dHRlciBhcyBYdCxHdXR0ZXJNYXJrZXIgYXMgWXR9ZnJvbVwiQGNvZGVtaXJyb3Ivdmlld1wiO2ltcG9ydHt0YWdzIGFzIGYsdGFnSGlnaGxpZ2h0ZXIgYXMgWnQsaGlnaGxpZ2h0VHJlZSBhcyB0ZSxzdHlsZVRhZ3MgYXMgZWV9ZnJvbVwiL3Y5Ni9AbGV6ZXIvaGlnaGxpZ2h0QDEuMS4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOWpiMjF0WVc1a2N5eEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjQvZGVuby9oaWdobGlnaHQuanNcIjtpbXBvcnR7U3R5bGVNb2R1bGUgYXMgZnR9ZnJvbVwiL3Y5Ni9zdHlsZS1tb2RANC4wLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5amIyMXRZVzVrY3l4QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzTEVCc1pYcGxjaTlqYjIxdGIyNC9kZW5vL3N0eWxlLW1vZC5qc1wiO3ZhciBZLFQ9bmV3IHY7ZnVuY3Rpb24gdnQobil7cmV0dXJuIGIuZGVmaW5lKHtjb21iaW5lOm4/dD0+dC5jb25jYXQobik6dm9pZCAwfSl9dmFyIGM9Y2xhc3N7Y29uc3RydWN0b3IodCxlLHI9W10pe3RoaXMuZGF0YT10LE8ucHJvdG90eXBlLmhhc093blByb3BlcnR5KFwidHJlZVwiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLFwidHJlZVwiLHtnZXQoKXtyZXR1cm4gbSh0aGlzKX19KSx0aGlzLnBhcnNlcj1lLHRoaXMuZXh0ZW5zaW9uPVtQLm9mKHRoaXMpLE8ubGFuZ3VhZ2VEYXRhLm9mKChpLHMsbyk9PmkuZmFjZXQodXQoaSxzLG8pKSldLmNvbmNhdChyKX1pc0FjdGl2ZUF0KHQsZSxyPS0xKXtyZXR1cm4gdXQodCxlLHIpPT10aGlzLmRhdGF9ZmluZFJlZ2lvbnModCl7bGV0IGU9dC5mYWNldChQKTtpZihlPy5kYXRhPT10aGlzLmRhdGEpcmV0dXJuW3tmcm9tOjAsdG86dC5kb2MubGVuZ3RofV07aWYoIWV8fCFlLmFsbG93c05lc3RpbmcpcmV0dXJuW107bGV0IHI9W10saT0ocyxvKT0+e2lmKHMucHJvcChUKT09dGhpcy5kYXRhKXtyLnB1c2goe2Zyb206byx0bzpvK3MubGVuZ3RofSk7cmV0dXJufWxldCBsPXMucHJvcCh2Lm1vdW50ZWQpO2lmKGwpe2lmKGwudHJlZS5wcm9wKFQpPT10aGlzLmRhdGEpe2lmKGwub3ZlcmxheSlmb3IobGV0IGEgb2YgbC5vdmVybGF5KXIucHVzaCh7ZnJvbTphLmZyb20rbyx0bzphLnRvK299KTtlbHNlIHIucHVzaCh7ZnJvbTpvLHRvOm8rcy5sZW5ndGh9KTtyZXR1cm59ZWxzZSBpZihsLm92ZXJsYXkpe2xldCBhPXIubGVuZ3RoO2lmKGkobC50cmVlLGwub3ZlcmxheVswXS5mcm9tK28pLHIubGVuZ3RoPmEpcmV0dXJufX1mb3IobGV0IGE9MDthPHMuY2hpbGRyZW4ubGVuZ3RoO2ErKyl7bGV0IGg9cy5jaGlsZHJlblthXTtoIGluc3RhbmNlb2YgcCYmaShoLHMucG9zaXRpb25zW2FdK28pfX07cmV0dXJuIGkobSh0KSwwKSxyfWdldCBhbGxvd3NOZXN0aW5nKCl7cmV0dXJuITB9fTtjLnNldFN0YXRlPUsuZGVmaW5lKCk7ZnVuY3Rpb24gdXQobix0LGUpe2xldCByPW4uZmFjZXQoUCk7aWYoIXIpcmV0dXJuIG51bGw7bGV0IGk9ci5kYXRhO2lmKHIuYWxsb3dzTmVzdGluZylmb3IobGV0IHM9bShuKS50b3BOb2RlO3M7cz1zLmVudGVyKHQsZSxxdC5FeGNsdWRlQnVmZmVycykpaT1zLnR5cGUucHJvcChUKXx8aTtyZXR1cm4gaX12YXIgQj1jbGFzcyBleHRlbmRzIGN7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMucGFyc2VyPWV9c3RhdGljIGRlZmluZSh0KXtsZXQgZT12dCh0Lmxhbmd1YWdlRGF0YSk7cmV0dXJuIG5ldyBCKGUsdC5wYXJzZXIuY29uZmlndXJlKHtwcm9wczpbVC5hZGQocj0+ci5pc1RvcD9lOnZvaWQgMCldfSkpfWNvbmZpZ3VyZSh0KXtyZXR1cm4gbmV3IEIodGhpcy5kYXRhLHRoaXMucGFyc2VyLmNvbmZpZ3VyZSh0KSl9Z2V0IGFsbG93c05lc3RpbmcoKXtyZXR1cm4gdGhpcy5wYXJzZXIuaGFzV3JhcHBlcnMoKX19O2Z1bmN0aW9uIG0obil7bGV0IHQ9bi5maWVsZChjLnN0YXRlLCExKTtyZXR1cm4gdD90LnRyZWU6cC5lbXB0eX1mdW5jdGlvbiBuZShuLHQsZT01MCl7dmFyIHI7bGV0IGk9KHI9bi5maWVsZChjLnN0YXRlLCExKSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLmNvbnRleHQ7cmV0dXJuIGkmJihpLmlzRG9uZSh0KXx8aS53b3JrKGUsdCkpP2kudHJlZTpudWxsfWZ1bmN0aW9uIHplKG4sdD1uLmRvYy5sZW5ndGgpe3ZhciBlO3JldHVybigoZT1uLmZpZWxkKGMuc3RhdGUsITEpKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUuY29udGV4dC5pc0RvbmUodCkpfHwhMX1mdW5jdGlvbiBHZShuLHQ9bi52aWV3cG9ydC50byxlPTEwMCl7bGV0IHI9bmUobi5zdGF0ZSx0LGUpO3JldHVybiByIT1tKG4uc3RhdGUpJiZuLmRpc3BhdGNoKHt9KSwhIXJ9ZnVuY3Rpb24gcWUobil7dmFyIHQ7cmV0dXJuKCh0PW4ucGx1Z2luKFN0KSk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LmlzV29ya2luZygpKXx8ITF9dmFyIGV0PWNsYXNze2NvbnN0cnVjdG9yKHQsZT10Lmxlbmd0aCl7dGhpcy5kb2M9dCx0aGlzLmxlbmd0aD1lLHRoaXMuY3Vyc29yUG9zPTAsdGhpcy5zdHJpbmc9XCJcIix0aGlzLmN1cnNvcj10Lml0ZXIoKX1zeW5jVG8odCl7cmV0dXJuIHRoaXMuc3RyaW5nPXRoaXMuY3Vyc29yLm5leHQodC10aGlzLmN1cnNvclBvcykudmFsdWUsdGhpcy5jdXJzb3JQb3M9dCt0aGlzLnN0cmluZy5sZW5ndGgsdGhpcy5jdXJzb3JQb3MtdGhpcy5zdHJpbmcubGVuZ3RofWNodW5rKHQpe3JldHVybiB0aGlzLnN5bmNUbyh0KSx0aGlzLnN0cmluZ31nZXQgbGluZUNodW5rcygpe3JldHVybiEwfXJlYWQodCxlKXtsZXQgcj10aGlzLmN1cnNvclBvcy10aGlzLnN0cmluZy5sZW5ndGg7cmV0dXJuIHQ8cnx8ZT49dGhpcy5jdXJzb3JQb3M/dGhpcy5kb2Muc2xpY2VTdHJpbmcodCxlKTp0aGlzLnN0cmluZy5zbGljZSh0LXIsZS1yKX19LEk9bnVsbCx4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxyPVtdLGkscyxvLGwsYSl7dGhpcy5wYXJzZXI9dCx0aGlzLnN0YXRlPWUsdGhpcy5mcmFnbWVudHM9cix0aGlzLnRyZWU9aSx0aGlzLnRyZWVMZW49cyx0aGlzLnZpZXdwb3J0PW8sdGhpcy5za2lwcGVkPWwsdGhpcy5zY2hlZHVsZU9uPWEsdGhpcy5wYXJzZT1udWxsLHRoaXMudGVtcFNraXBwZWQ9W119c3RhdGljIGNyZWF0ZSh0LGUscil7cmV0dXJuIG5ldyB4KHQsZSxbXSxwLmVtcHR5LDAscixbXSxudWxsKX1zdGFydFBhcnNlKCl7cmV0dXJuIHRoaXMucGFyc2VyLnN0YXJ0UGFyc2UobmV3IGV0KHRoaXMuc3RhdGUuZG9jKSx0aGlzLmZyYWdtZW50cyl9d29yayh0LGUpe3JldHVybiBlIT1udWxsJiZlPj10aGlzLnN0YXRlLmRvYy5sZW5ndGgmJihlPXZvaWQgMCksdGhpcy50cmVlIT1wLmVtcHR5JiZ0aGlzLmlzRG9uZShlPz90aGlzLnN0YXRlLmRvYy5sZW5ndGgpPyh0aGlzLnRha2VUcmVlKCksITApOnRoaXMud2l0aENvbnRleHQoKCk9Pnt2YXIgcjtpZih0eXBlb2YgdD09XCJudW1iZXJcIil7bGV0IGk9RGF0ZS5ub3coKSt0O3Q9KCk9PkRhdGUubm93KCk+aX1mb3IodGhpcy5wYXJzZXx8KHRoaXMucGFyc2U9dGhpcy5zdGFydFBhcnNlKCkpLGUhPW51bGwmJih0aGlzLnBhcnNlLnN0b3BwZWRBdD09bnVsbHx8dGhpcy5wYXJzZS5zdG9wcGVkQXQ+ZSkmJmU8dGhpcy5zdGF0ZS5kb2MubGVuZ3RoJiZ0aGlzLnBhcnNlLnN0b3BBdChlKTs7KXtsZXQgaT10aGlzLnBhcnNlLmFkdmFuY2UoKTtpZihpKWlmKHRoaXMuZnJhZ21lbnRzPXRoaXMud2l0aG91dFRlbXBTa2lwcGVkKFcuYWRkVHJlZShpLHRoaXMuZnJhZ21lbnRzLHRoaXMucGFyc2Uuc3RvcHBlZEF0IT1udWxsKSksdGhpcy50cmVlTGVuPShyPXRoaXMucGFyc2Uuc3RvcHBlZEF0KSE9PW51bGwmJnIhPT12b2lkIDA/cjp0aGlzLnN0YXRlLmRvYy5sZW5ndGgsdGhpcy50cmVlPWksdGhpcy5wYXJzZT1udWxsLHRoaXMudHJlZUxlbjwoZT8/dGhpcy5zdGF0ZS5kb2MubGVuZ3RoKSl0aGlzLnBhcnNlPXRoaXMuc3RhcnRQYXJzZSgpO2Vsc2UgcmV0dXJuITA7aWYodCgpKXJldHVybiExfX0pfXRha2VUcmVlKCl7bGV0IHQsZTt0aGlzLnBhcnNlJiYodD10aGlzLnBhcnNlLnBhcnNlZFBvcyk+PXRoaXMudHJlZUxlbiYmKCh0aGlzLnBhcnNlLnN0b3BwZWRBdD09bnVsbHx8dGhpcy5wYXJzZS5zdG9wcGVkQXQ+dCkmJnRoaXMucGFyc2Uuc3RvcEF0KHQpLHRoaXMud2l0aENvbnRleHQoKCk9Pntmb3IoOyEoZT10aGlzLnBhcnNlLmFkdmFuY2UoKSk7KTt9KSx0aGlzLnRyZWVMZW49dCx0aGlzLnRyZWU9ZSx0aGlzLmZyYWdtZW50cz10aGlzLndpdGhvdXRUZW1wU2tpcHBlZChXLmFkZFRyZWUodGhpcy50cmVlLHRoaXMuZnJhZ21lbnRzLCEwKSksdGhpcy5wYXJzZT1udWxsKX13aXRoQ29udGV4dCh0KXtsZXQgZT1JO0k9dGhpczt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e0k9ZX19d2l0aG91dFRlbXBTa2lwcGVkKHQpe2ZvcihsZXQgZTtlPXRoaXMudGVtcFNraXBwZWQucG9wKCk7KXQ9Y3QodCxlLmZyb20sZS50byk7cmV0dXJuIHR9Y2hhbmdlcyh0LGUpe2xldHtmcmFnbWVudHM6cix0cmVlOmksdHJlZUxlbjpzLHZpZXdwb3J0Om8sc2tpcHBlZDpsfT10aGlzO2lmKHRoaXMudGFrZVRyZWUoKSwhdC5lbXB0eSl7bGV0IGE9W107aWYodC5pdGVyQ2hhbmdlZFJhbmdlcygoaCx1LGQsZyk9PmEucHVzaCh7ZnJvbUE6aCx0b0E6dSxmcm9tQjpkLHRvQjpnfSkpLHI9Vy5hcHBseUNoYW5nZXMocixhKSxpPXAuZW1wdHkscz0wLG89e2Zyb206dC5tYXBQb3Moby5mcm9tLC0xKSx0bzp0Lm1hcFBvcyhvLnRvLDEpfSx0aGlzLnNraXBwZWQubGVuZ3RoKXtsPVtdO2ZvcihsZXQgaCBvZiB0aGlzLnNraXBwZWQpe2xldCB1PXQubWFwUG9zKGguZnJvbSwxKSxkPXQubWFwUG9zKGgudG8sLTEpO3U8ZCYmbC5wdXNoKHtmcm9tOnUsdG86ZH0pfX19cmV0dXJuIG5ldyB4KHRoaXMucGFyc2VyLGUscixpLHMsbyxsLHRoaXMuc2NoZWR1bGVPbil9dXBkYXRlVmlld3BvcnQodCl7aWYodGhpcy52aWV3cG9ydC5mcm9tPT10LmZyb20mJnRoaXMudmlld3BvcnQudG89PXQudG8pcmV0dXJuITE7dGhpcy52aWV3cG9ydD10O2xldCBlPXRoaXMuc2tpcHBlZC5sZW5ndGg7Zm9yKGxldCByPTA7cjx0aGlzLnNraXBwZWQubGVuZ3RoO3IrKyl7bGV0e2Zyb206aSx0bzpzfT10aGlzLnNraXBwZWRbcl07aTx0LnRvJiZzPnQuZnJvbSYmKHRoaXMuZnJhZ21lbnRzPWN0KHRoaXMuZnJhZ21lbnRzLGkscyksdGhpcy5za2lwcGVkLnNwbGljZShyLS0sMSkpfXJldHVybiB0aGlzLnNraXBwZWQubGVuZ3RoPj1lPyExOih0aGlzLnJlc2V0KCksITApfXJlc2V0KCl7dGhpcy5wYXJzZSYmKHRoaXMudGFrZVRyZWUoKSx0aGlzLnBhcnNlPW51bGwpfXNraXBVbnRpbEluVmlldyh0LGUpe3RoaXMuc2tpcHBlZC5wdXNoKHtmcm9tOnQsdG86ZX0pfXN0YXRpYyBnZXRTa2lwcGluZ1BhcnNlcih0KXtyZXR1cm4gbmV3IGNsYXNzIGV4dGVuZHMga3R7Y3JlYXRlUGFyc2UoZSxyLGkpe2xldCBzPWlbMF0uZnJvbSxvPWlbaS5sZW5ndGgtMV0udG87cmV0dXJue3BhcnNlZFBvczpzLGFkdmFuY2UoKXtsZXQgYT1JO2lmKGEpe2ZvcihsZXQgaCBvZiBpKWEudGVtcFNraXBwZWQucHVzaChoKTt0JiYoYS5zY2hlZHVsZU9uPWEuc2NoZWR1bGVPbj9Qcm9taXNlLmFsbChbYS5zY2hlZHVsZU9uLHRdKTp0KX1yZXR1cm4gdGhpcy5wYXJzZWRQb3M9byxuZXcgcChKLm5vbmUsW10sW10sby1zKX0sc3RvcHBlZEF0Om51bGwsc3RvcEF0KCl7fX19fX1pc0RvbmUodCl7dD1NYXRoLm1pbih0LHRoaXMuc3RhdGUuZG9jLmxlbmd0aCk7bGV0IGU9dGhpcy5mcmFnbWVudHM7cmV0dXJuIHRoaXMudHJlZUxlbj49dCYmZS5sZW5ndGgmJmVbMF0uZnJvbT09MCYmZVswXS50bz49dH1zdGF0aWMgZ2V0KCl7cmV0dXJuIEl9fTtmdW5jdGlvbiBjdChuLHQsZSl7cmV0dXJuIFcuYXBwbHlDaGFuZ2VzKG4sW3tmcm9tQTp0LHRvQTplLGZyb21COnQsdG9COmV9XSl9dmFyIFM9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jb250ZXh0PXQsdGhpcy50cmVlPXQudHJlZX1hcHBseSh0KXtpZighdC5kb2NDaGFuZ2VkJiZ0aGlzLnRyZWU9PXRoaXMuY29udGV4dC50cmVlKXJldHVybiB0aGlzO2xldCBlPXRoaXMuY29udGV4dC5jaGFuZ2VzKHQuY2hhbmdlcyx0LnN0YXRlKSxyPXRoaXMuY29udGV4dC50cmVlTGVuPT10LnN0YXJ0U3RhdGUuZG9jLmxlbmd0aD92b2lkIDA6TWF0aC5tYXgodC5jaGFuZ2VzLm1hcFBvcyh0aGlzLmNvbnRleHQudHJlZUxlbiksZS52aWV3cG9ydC50byk7cmV0dXJuIGUud29yaygyMCxyKXx8ZS50YWtlVHJlZSgpLG5ldyBTKGUpfXN0YXRpYyBpbml0KHQpe2xldCBlPU1hdGgubWluKDNlMyx0LmRvYy5sZW5ndGgpLHI9eC5jcmVhdGUodC5mYWNldChQKS5wYXJzZXIsdCx7ZnJvbTowLHRvOmV9KTtyZXR1cm4gci53b3JrKDIwLGUpfHxyLnRha2VUcmVlKCksbmV3IFMocil9fTtjLnN0YXRlPW90LmRlZmluZSh7Y3JlYXRlOlMuaW5pdCx1cGRhdGUobix0KXtmb3IobGV0IGUgb2YgdC5lZmZlY3RzKWlmKGUuaXMoYy5zZXRTdGF0ZSkpcmV0dXJuIGUudmFsdWU7cmV0dXJuIHQuc3RhcnRTdGF0ZS5mYWNldChQKSE9dC5zdGF0ZS5mYWNldChQKT9TLmluaXQodC5zdGF0ZSk6bi5hcHBseSh0KX19KTt2YXIgeHQ9bj0+e2xldCB0PXNldFRpbWVvdXQoKCk9Pm4oKSw1MDApO3JldHVybigpPT5jbGVhclRpbWVvdXQodCl9O3R5cGVvZiByZXF1ZXN0SWRsZUNhbGxiYWNrPFwidVwiJiYoeHQ9bj0+e2xldCB0PS0xLGU9c2V0VGltZW91dCgoKT0+e3Q9cmVxdWVzdElkbGVDYWxsYmFjayhuLHt0aW1lb3V0OjUwMC0xMDB9KX0sMTAwKTtyZXR1cm4oKT0+dDwwP2NsZWFyVGltZW91dChlKTpjYW5jZWxJZGxlQ2FsbGJhY2sodCl9KTt2YXIgWj10eXBlb2YgbmF2aWdhdG9yPFwidVwiJiYoKFk9bmF2aWdhdG9yLnNjaGVkdWxpbmcpPT09bnVsbHx8WT09PXZvaWQgMD92b2lkIDA6WS5pc0lucHV0UGVuZGluZyk/KCk9Pm5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nKCk6bnVsbCxTdD1sdC5mcm9tQ2xhc3MoY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52aWV3PXQsdGhpcy53b3JraW5nPW51bGwsdGhpcy53b3JrU2NoZWR1bGVkPTAsdGhpcy5jaHVua0VuZD0tMSx0aGlzLmNodW5rQnVkZ2V0PS0xLHRoaXMud29yaz10aGlzLndvcmsuYmluZCh0aGlzKSx0aGlzLnNjaGVkdWxlV29yaygpfXVwZGF0ZSh0KXtsZXQgZT10aGlzLnZpZXcuc3RhdGUuZmllbGQoYy5zdGF0ZSkuY29udGV4dDsoZS51cGRhdGVWaWV3cG9ydCh0LnZpZXcudmlld3BvcnQpfHx0aGlzLnZpZXcudmlld3BvcnQudG8+ZS50cmVlTGVuKSYmdGhpcy5zY2hlZHVsZVdvcmsoKSx0LmRvY0NoYW5nZWQmJih0aGlzLnZpZXcuaGFzRm9jdXMmJih0aGlzLmNodW5rQnVkZ2V0Kz01MCksdGhpcy5zY2hlZHVsZVdvcmsoKSksdGhpcy5jaGVja0FzeW5jU2NoZWR1bGUoZSl9c2NoZWR1bGVXb3JrKCl7aWYodGhpcy53b3JraW5nKXJldHVybjtsZXR7c3RhdGU6dH09dGhpcy52aWV3LGU9dC5maWVsZChjLnN0YXRlKTsoZS50cmVlIT1lLmNvbnRleHQudHJlZXx8IWUuY29udGV4dC5pc0RvbmUodC5kb2MubGVuZ3RoKSkmJih0aGlzLndvcmtpbmc9eHQodGhpcy53b3JrKSl9d29yayh0KXt0aGlzLndvcmtpbmc9bnVsbDtsZXQgZT1EYXRlLm5vdygpO2lmKHRoaXMuY2h1bmtFbmQ8ZSYmKHRoaXMuY2h1bmtFbmQ8MHx8dGhpcy52aWV3Lmhhc0ZvY3VzKSYmKHRoaXMuY2h1bmtFbmQ9ZSszZTQsdGhpcy5jaHVua0J1ZGdldD0zZTMpLHRoaXMuY2h1bmtCdWRnZXQ8PTApcmV0dXJuO2xldHtzdGF0ZTpyLHZpZXdwb3J0Ont0bzppfX09dGhpcy52aWV3LHM9ci5maWVsZChjLnN0YXRlKTtpZihzLnRyZWU9PXMuY29udGV4dC50cmVlJiZzLmNvbnRleHQuaXNEb25lKGkrMWU1KSlyZXR1cm47bGV0IG89RGF0ZS5ub3coKStNYXRoLm1pbih0aGlzLmNodW5rQnVkZ2V0LDEwMCx0JiYhWj9NYXRoLm1heCgyNSx0LnRpbWVSZW1haW5pbmcoKS01KToxZTkpLGw9cy5jb250ZXh0LnRyZWVMZW48aSYmci5kb2MubGVuZ3RoPmkrMWUzLGE9cy5jb250ZXh0LndvcmsoKCk9PlomJlooKXx8RGF0ZS5ub3coKT5vLGkrKGw/MDoxZTUpKTt0aGlzLmNodW5rQnVkZ2V0LT1EYXRlLm5vdygpLWUsKGF8fHRoaXMuY2h1bmtCdWRnZXQ8PTApJiYocy5jb250ZXh0LnRha2VUcmVlKCksdGhpcy52aWV3LmRpc3BhdGNoKHtlZmZlY3RzOmMuc2V0U3RhdGUub2YobmV3IFMocy5jb250ZXh0KSl9KSksdGhpcy5jaHVua0J1ZGdldD4wJiYhKGEmJiFsKSYmdGhpcy5zY2hlZHVsZVdvcmsoKSx0aGlzLmNoZWNrQXN5bmNTY2hlZHVsZShzLmNvbnRleHQpfWNoZWNrQXN5bmNTY2hlZHVsZSh0KXt0LnNjaGVkdWxlT24mJih0aGlzLndvcmtTY2hlZHVsZWQrKyx0LnNjaGVkdWxlT24udGhlbigoKT0+dGhpcy5zY2hlZHVsZVdvcmsoKSkuY2F0Y2goZT0+X3QodGhpcy52aWV3LnN0YXRlLGUpKS50aGVuKCgpPT50aGlzLndvcmtTY2hlZHVsZWQtLSksdC5zY2hlZHVsZU9uPW51bGwpfWRlc3Ryb3koKXt0aGlzLndvcmtpbmcmJnRoaXMud29ya2luZygpfWlzV29ya2luZygpe3JldHVybiEhKHRoaXMud29ya2luZ3x8dGhpcy53b3JrU2NoZWR1bGVkPjApfX0se2V2ZW50SGFuZGxlcnM6e2ZvY3VzKCl7dGhpcy5zY2hlZHVsZVdvcmsoKX19fSksUD1iLmRlZmluZSh7Y29tYmluZShuKXtyZXR1cm4gbi5sZW5ndGg/blswXTpudWxsfSxlbmFibGVzOltjLnN0YXRlLFN0XX0pLGR0PWNsYXNze2NvbnN0cnVjdG9yKHQsZT1bXSl7dGhpcy5sYW5ndWFnZT10LHRoaXMuc3VwcG9ydD1lLHRoaXMuZXh0ZW5zaW9uPVt0LGVdfX0saj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUscixpLHMsbz12b2lkIDApe3RoaXMubmFtZT10LHRoaXMuYWxpYXM9ZSx0aGlzLmV4dGVuc2lvbnM9cix0aGlzLmZpbGVuYW1lPWksdGhpcy5sb2FkRnVuYz1zLHRoaXMuc3VwcG9ydD1vLHRoaXMubG9hZGluZz1udWxsfWxvYWQoKXtyZXR1cm4gdGhpcy5sb2FkaW5nfHwodGhpcy5sb2FkaW5nPXRoaXMubG9hZEZ1bmMoKS50aGVuKHQ9PnRoaXMuc3VwcG9ydD10LHQ9Pnt0aHJvdyB0aGlzLmxvYWRpbmc9bnVsbCx0fSkpfXN0YXRpYyBvZih0KXtsZXR7bG9hZDplLHN1cHBvcnQ6cn09dDtpZighZSl7aWYoIXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJNdXN0IHBhc3MgZWl0aGVyICdsb2FkJyBvciAnc3VwcG9ydCcgdG8gTGFuZ3VhZ2VEZXNjcmlwdGlvbi5vZlwiKTtlPSgpPT5Qcm9taXNlLnJlc29sdmUocil9cmV0dXJuIG5ldyBqKHQubmFtZSwodC5hbGlhc3x8W10pLmNvbmNhdCh0Lm5hbWUpLm1hcChpPT5pLnRvTG93ZXJDYXNlKCkpLHQuZXh0ZW5zaW9uc3x8W10sdC5maWxlbmFtZSxlLHIpfXN0YXRpYyBtYXRjaEZpbGVuYW1lKHQsZSl7Zm9yKGxldCBpIG9mIHQpaWYoaS5maWxlbmFtZSYmaS5maWxlbmFtZS50ZXN0KGUpKXJldHVybiBpO2xldCByPS9cXC4oW14uXSspJC8uZXhlYyhlKTtpZihyKXtmb3IobGV0IGkgb2YgdClpZihpLmV4dGVuc2lvbnMuaW5kZXhPZihyWzFdKT4tMSlyZXR1cm4gaX1yZXR1cm4gbnVsbH1zdGF0aWMgbWF0Y2hMYW5ndWFnZU5hbWUodCxlLHI9ITApe2U9ZS50b0xvd2VyQ2FzZSgpO2ZvcihsZXQgaSBvZiB0KWlmKGkuYWxpYXMuc29tZShzPT5zPT1lKSlyZXR1cm4gaTtpZihyKWZvcihsZXQgaSBvZiB0KWZvcihsZXQgcyBvZiBpLmFsaWFzKXtsZXQgbz1lLmluZGV4T2Yocyk7aWYobz4tMSYmKHMubGVuZ3RoPjJ8fCEvXFx3Ly50ZXN0KGVbby0xXSkmJiEvXFx3Ly50ZXN0KGVbbytzLmxlbmd0aF0pKSlyZXR1cm4gaX1yZXR1cm4gbnVsbH19LFB0PWIuZGVmaW5lKCksQXQ9Yi5kZWZpbmUoe2NvbWJpbmU6bj0+e2lmKCFuLmxlbmd0aClyZXR1cm5cIiAgXCI7aWYoIS9eKD86ICt8XFx0KykkLy50ZXN0KG5bMF0pKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5kZW50IHVuaXQ6IFwiK0pTT04uc3RyaW5naWZ5KG5bMF0pKTtyZXR1cm4gblswXX19KTtmdW5jdGlvbiAkKG4pe2xldCB0PW4uZmFjZXQoQXQpO3JldHVybiB0LmNoYXJDb2RlQXQoMCk9PTk/bi50YWJTaXplKnQubGVuZ3RoOnQubGVuZ3RofWZ1bmN0aW9uIEN0KG4sdCl7bGV0IGU9XCJcIixyPW4udGFiU2l6ZTtpZihuLmZhY2V0KEF0KS5jaGFyQ29kZUF0KDApPT05KWZvcig7dD49cjspZSs9XCJcdFwiLHQtPXI7Zm9yKGxldCBpPTA7aTx0O2krKyllKz1cIiBcIjtyZXR1cm4gZX1mdW5jdGlvbiBUdChuLHQpe24gaW5zdGFuY2VvZiBPJiYobj1uZXcgTShuKSk7Zm9yKGxldCByIG9mIG4uc3RhdGUuZmFjZXQoUHQpKXtsZXQgaT1yKG4sdCk7aWYoaSE9bnVsbClyZXR1cm4gaX1sZXQgZT1tKG4uc3RhdGUpO3JldHVybiBlP2llKG4sZSx0KTpudWxsfWZ1bmN0aW9uIEplKG4sdCxlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpLGk9bmV3IE0obix7b3ZlcnJpZGVJbmRlbnRhdGlvbjpvPT57dmFyIGw7cmV0dXJuKGw9cltvXSkhPT1udWxsJiZsIT09dm9pZCAwP2w6LTF9fSkscz1bXTtmb3IobGV0IG89dDtvPD1lOyl7bGV0IGw9bi5kb2MubGluZUF0KG8pO289bC50bysxO2xldCBhPVR0KGksbC5mcm9tKTtpZihhPT1udWxsKWNvbnRpbnVlOy9cXFMvLnRlc3QobC50ZXh0KXx8KGE9MCk7bGV0IGg9L15cXHMqLy5leGVjKGwudGV4dClbMF0sdT1DdChuLGEpO2ghPXUmJihyW2wuZnJvbV09YSxzLnB1c2goe2Zyb206bC5mcm9tLHRvOmwuZnJvbStoLmxlbmd0aCxpbnNlcnQ6dX0pKX1yZXR1cm4gbi5jaGFuZ2VzKHMpfXZhciBNPWNsYXNze2NvbnN0cnVjdG9yKHQsZT17fSl7dGhpcy5zdGF0ZT10LHRoaXMub3B0aW9ucz1lLHRoaXMudW5pdD0kKHQpfWxpbmVBdCh0LGU9MSl7bGV0IHI9dGhpcy5zdGF0ZS5kb2MubGluZUF0KHQpLHtzaW11bGF0ZUJyZWFrOmksc2ltdWxhdGVEb3VibGVCcmVhazpzfT10aGlzLm9wdGlvbnM7cmV0dXJuIGkhPW51bGwmJmk+PXIuZnJvbSYmaTw9ci50bz9zJiZpPT10P3t0ZXh0OlwiXCIsZnJvbTp0fTooZTwwP2k8dDppPD10KT97dGV4dDpyLnRleHQuc2xpY2UoaS1yLmZyb20pLGZyb206aX06e3RleHQ6ci50ZXh0LnNsaWNlKDAsaS1yLmZyb20pLGZyb206ci5mcm9tfTpyfXRleHRBZnRlclBvcyh0LGU9MSl7aWYodGhpcy5vcHRpb25zLnNpbXVsYXRlRG91YmxlQnJlYWsmJnQ9PXRoaXMub3B0aW9ucy5zaW11bGF0ZUJyZWFrKXJldHVyblwiXCI7bGV0e3RleHQ6cixmcm9tOml9PXRoaXMubGluZUF0KHQsZSk7cmV0dXJuIHIuc2xpY2UodC1pLE1hdGgubWluKHIubGVuZ3RoLHQrMTAwLWkpKX1jb2x1bW4odCxlPTEpe2xldHt0ZXh0OnIsZnJvbTppfT10aGlzLmxpbmVBdCh0LGUpLHM9dGhpcy5jb3VudENvbHVtbihyLHQtaSksbz10aGlzLm9wdGlvbnMub3ZlcnJpZGVJbmRlbnRhdGlvbj90aGlzLm9wdGlvbnMub3ZlcnJpZGVJbmRlbnRhdGlvbihpKTotMTtyZXR1cm4gbz4tMSYmKHMrPW8tdGhpcy5jb3VudENvbHVtbihyLHIuc2VhcmNoKC9cXFN8JC8pKSksc31jb3VudENvbHVtbih0LGU9dC5sZW5ndGgpe3JldHVybiBKdCh0LHRoaXMuc3RhdGUudGFiU2l6ZSxlKX1saW5lSW5kZW50KHQsZT0xKXtsZXR7dGV4dDpyLGZyb206aX09dGhpcy5saW5lQXQodCxlKSxzPXRoaXMub3B0aW9ucy5vdmVycmlkZUluZGVudGF0aW9uO2lmKHMpe2xldCBvPXMoaSk7aWYobz4tMSlyZXR1cm4gb31yZXR1cm4gdGhpcy5jb3VudENvbHVtbihyLHIuc2VhcmNoKC9cXFN8JC8pKX1nZXQgc2ltdWxhdGVkQnJlYWsoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNpbXVsYXRlQnJlYWt8fG51bGx9fSxyZT1uZXcgdjtmdW5jdGlvbiBpZShuLHQsZSl7cmV0dXJuIER0KHQucmVzb2x2ZUlubmVyKGUpLmVudGVyVW5maW5pc2hlZE5vZGVzQmVmb3JlKGUpLGUsbil9ZnVuY3Rpb24gc2Uobil7cmV0dXJuIG4ucG9zPT1uLm9wdGlvbnMuc2ltdWxhdGVCcmVhayYmbi5vcHRpb25zLnNpbXVsYXRlRG91YmxlQnJlYWt9ZnVuY3Rpb24gb2Uobil7bGV0IHQ9bi50eXBlLnByb3AocmUpO2lmKHQpcmV0dXJuIHQ7bGV0IGU9bi5maXJzdENoaWxkLHI7aWYoZSYmKHI9ZS50eXBlLnByb3Aodi5jbG9zZWRCeSkpKXtsZXQgaT1uLmxhc3RDaGlsZCxzPWkmJnIuaW5kZXhPZihpLm5hbWUpPi0xO3JldHVybiBvPT5JdChvLCEwLDEsdm9pZCAwLHMmJiFzZShvKT9pLmZyb206dm9pZCAwKX1yZXR1cm4gbi5wYXJlbnQ9PW51bGw/bGU6bnVsbH1mdW5jdGlvbiBEdChuLHQsZSl7Zm9yKDtuO249bi5wYXJlbnQpe2xldCByPW9lKG4pO2lmKHIpcmV0dXJuIHIoRS5jcmVhdGUoZSx0LG4pKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBsZSgpe3JldHVybiAwfXZhciBFPWNsYXNzIGV4dGVuZHMgTXtjb25zdHJ1Y3Rvcih0LGUscil7c3VwZXIodC5zdGF0ZSx0Lm9wdGlvbnMpLHRoaXMuYmFzZT10LHRoaXMucG9zPWUsdGhpcy5ub2RlPXJ9c3RhdGljIGNyZWF0ZSh0LGUscil7cmV0dXJuIG5ldyBFKHQsZSxyKX1nZXQgdGV4dEFmdGVyKCl7cmV0dXJuIHRoaXMudGV4dEFmdGVyUG9zKHRoaXMucG9zKX1nZXQgYmFzZUluZGVudCgpe2xldCB0PXRoaXMuc3RhdGUuZG9jLmxpbmVBdCh0aGlzLm5vZGUuZnJvbSk7Zm9yKDs7KXtsZXQgZT10aGlzLm5vZGUucmVzb2x2ZSh0LmZyb20pO2Zvcig7ZS5wYXJlbnQmJmUucGFyZW50LmZyb209PWUuZnJvbTspZT1lLnBhcmVudDtpZihhZShlLHRoaXMubm9kZSkpYnJlYWs7dD10aGlzLnN0YXRlLmRvYy5saW5lQXQoZS5mcm9tKX1yZXR1cm4gdGhpcy5saW5lSW5kZW50KHQuZnJvbSl9Y29udGludWUoKXtsZXQgdD10aGlzLm5vZGUucGFyZW50O3JldHVybiB0P0R0KHQsdGhpcy5wb3MsdGhpcy5iYXNlKTowfX07ZnVuY3Rpb24gYWUobix0KXtmb3IobGV0IGU9dDtlO2U9ZS5wYXJlbnQpaWYobj09ZSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBoZShuKXtsZXQgdD1uLm5vZGUsZT10LmNoaWxkQWZ0ZXIodC5mcm9tKSxyPXQubGFzdENoaWxkO2lmKCFlKXJldHVybiBudWxsO2xldCBpPW4ub3B0aW9ucy5zaW11bGF0ZUJyZWFrLHM9bi5zdGF0ZS5kb2MubGluZUF0KGUuZnJvbSksbz1pPT1udWxsfHxpPD1zLmZyb20/cy50bzpNYXRoLm1pbihzLnRvLGkpO2ZvcihsZXQgbD1lLnRvOzspe2xldCBhPXQuY2hpbGRBZnRlcihsKTtpZighYXx8YT09cilyZXR1cm4gbnVsbDtpZighYS50eXBlLmlzU2tpcHBlZClyZXR1cm4gYS5mcm9tPG8/ZTpudWxsO2w9YS50b319ZnVuY3Rpb24gS2Uoe2Nsb3Npbmc6bixhbGlnbjp0PSEwLHVuaXRzOmU9MX0pe3JldHVybiByPT5JdChyLHQsZSxuKX1mdW5jdGlvbiBJdChuLHQsZSxyLGkpe2xldCBzPW4udGV4dEFmdGVyLG89cy5tYXRjaCgvXlxccyovKVswXS5sZW5ndGgsbD1yJiZzLnNsaWNlKG8sbytyLmxlbmd0aCk9PXJ8fGk9PW4ucG9zK28sYT10P2hlKG4pOm51bGw7cmV0dXJuIGE/bD9uLmNvbHVtbihhLmZyb20pOm4uY29sdW1uKGEudG8pOm4uYmFzZUluZGVudCsobD8wOm4udW5pdCplKX12YXIgX2U9bj0+bi5iYXNlSW5kZW50O2Z1bmN0aW9uIFFlKHtleGNlcHQ6bix1bml0czp0PTF9PXt9KXtyZXR1cm4gZT0+e2xldCByPW4mJm4udGVzdChlLnRleHRBZnRlcik7cmV0dXJuIGUuYmFzZUluZGVudCsocj8wOnQqZS51bml0KX19dmFyIGZlPTIwMDtmdW5jdGlvbiBYZSgpe3JldHVybiBPLnRyYW5zYWN0aW9uRmlsdGVyLm9mKG49PntpZighbi5kb2NDaGFuZ2VkfHwhbi5pc1VzZXJFdmVudChcImlucHV0LnR5cGVcIikmJiFuLmlzVXNlckV2ZW50KFwiaW5wdXQuY29tcGxldGVcIikpcmV0dXJuIG47bGV0IHQ9bi5zdGFydFN0YXRlLmxhbmd1YWdlRGF0YUF0KFwiaW5kZW50T25JbnB1dFwiLG4uc3RhcnRTdGF0ZS5zZWxlY3Rpb24ubWFpbi5oZWFkKTtpZighdC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9bi5uZXdEb2Mse2hlYWQ6cn09bi5uZXdTZWxlY3Rpb24ubWFpbixpPWUubGluZUF0KHIpO2lmKHI+aS5mcm9tK2ZlKXJldHVybiBuO2xldCBzPWUuc2xpY2VTdHJpbmcoaS5mcm9tLHIpO2lmKCF0LnNvbWUoaD0+aC50ZXN0KHMpKSlyZXR1cm4gbjtsZXR7c3RhdGU6b309bixsPS0xLGE9W107Zm9yKGxldHtoZWFkOmh9b2Ygby5zZWxlY3Rpb24ucmFuZ2VzKXtsZXQgdT1vLmRvYy5saW5lQXQoaCk7aWYodS5mcm9tPT1sKWNvbnRpbnVlO2w9dS5mcm9tO2xldCBkPVR0KG8sdS5mcm9tKTtpZihkPT1udWxsKWNvbnRpbnVlO2xldCBnPS9eXFxzKi8uZXhlYyh1LnRleHQpWzBdLHc9Q3QobyxkKTtnIT13JiZhLnB1c2goe2Zyb206dS5mcm9tLHRvOnUuZnJvbStnLmxlbmd0aCxpbnNlcnQ6d30pfXJldHVybiBhLmxlbmd0aD9bbix7Y2hhbmdlczphLHNlcXVlbnRpYWw6ITB9XTpufSl9dmFyIHVlPWIuZGVmaW5lKCksY2U9bmV3IHY7ZnVuY3Rpb24gWWUobil7bGV0IHQ9bi5maXJzdENoaWxkLGU9bi5sYXN0Q2hpbGQ7cmV0dXJuIHQmJnQudG88ZS5mcm9tP3tmcm9tOnQudG8sdG86ZS50eXBlLmlzRXJyb3I/bi50bzplLmZyb219Om51bGx9ZnVuY3Rpb24gZGUobix0LGUpe2xldCByPW0obik7aWYoci5sZW5ndGg8ZSlyZXR1cm4gbnVsbDtsZXQgaT1yLnJlc29sdmVJbm5lcihlKSxzPW51bGw7Zm9yKGxldCBvPWk7bztvPW8ucGFyZW50KXtpZihvLnRvPD1lfHxvLmZyb20+ZSljb250aW51ZTtpZihzJiZvLmZyb208dClicmVhaztsZXQgbD1vLnR5cGUucHJvcChjZSk7aWYobCYmKG8udG88ci5sZW5ndGgtNTB8fHIubGVuZ3RoPT1uLmRvYy5sZW5ndGh8fCFwZShvKSkpe2xldCBhPWwobyxuKTthJiZhLmZyb208PWUmJmEuZnJvbT49dCYmYS50bz5lJiYocz1hKX19cmV0dXJuIHN9ZnVuY3Rpb24gcGUobil7bGV0IHQ9bi5sYXN0Q2hpbGQ7cmV0dXJuIHQmJnQudG89PW4udG8mJnQudHlwZS5pc0Vycm9yfWZ1bmN0aW9uIFYobix0LGUpe2ZvcihsZXQgciBvZiBuLmZhY2V0KHVlKSl7bGV0IGk9cihuLHQsZSk7aWYoaSlyZXR1cm4gaX1yZXR1cm4gZGUobix0LGUpfWZ1bmN0aW9uIE90KG4sdCl7bGV0IGU9dC5tYXBQb3Mobi5mcm9tLDEpLHI9dC5tYXBQb3Mobi50bywtMSk7cmV0dXJuIGU+PXI/dm9pZCAwOntmcm9tOmUsdG86cn19dmFyIF89Sy5kZWZpbmUoe21hcDpPdH0pLFI9Sy5kZWZpbmUoe21hcDpPdH0pO2Z1bmN0aW9uIE50KG4pe2xldCB0PVtdO2ZvcihsZXR7aGVhZDplfW9mIG4uc3RhdGUuc2VsZWN0aW9uLnJhbmdlcyl0LnNvbWUocj0+ci5mcm9tPD1lJiZyLnRvPj1lKXx8dC5wdXNoKG4ubGluZUJsb2NrQXQoZSkpO3JldHVybiB0fXZhciBBPW90LmRlZmluZSh7Y3JlYXRlKCl7cmV0dXJuIGsubm9uZX0sdXBkYXRlKG4sdCl7bj1uLm1hcCh0LmNoYW5nZXMpO2ZvcihsZXQgZSBvZiB0LmVmZmVjdHMpZS5pcyhfKSYmIW1lKG4sZS52YWx1ZS5mcm9tLGUudmFsdWUudG8pP249bi51cGRhdGUoe2FkZDpbcHQucmFuZ2UoZS52YWx1ZS5mcm9tLGUudmFsdWUudG8pXX0pOmUuaXMoUikmJihuPW4udXBkYXRlKHtmaWx0ZXI6KHIsaSk9PmUudmFsdWUuZnJvbSE9cnx8ZS52YWx1ZS50byE9aSxmaWx0ZXJGcm9tOmUudmFsdWUuZnJvbSxmaWx0ZXJUbzplLnZhbHVlLnRvfSkpO2lmKHQuc2VsZWN0aW9uKXtsZXQgZT0hMSx7aGVhZDpyfT10LnNlbGVjdGlvbi5tYWluO24uYmV0d2VlbihyLHIsKGkscyk9PntpPHImJnM+ciYmKGU9ITApfSksZSYmKG49bi51cGRhdGUoe2ZpbHRlckZyb206cixmaWx0ZXJUbzpyLGZpbHRlcjooaSxzKT0+czw9cnx8aT49cn0pKX1yZXR1cm4gbn0scHJvdmlkZTpuPT55LmRlY29yYXRpb25zLmZyb20obiksdG9KU09OKG4sdCl7bGV0IGU9W107cmV0dXJuIG4uYmV0d2VlbigwLHQuZG9jLmxlbmd0aCwocixpKT0+e2UucHVzaChyLGkpfSksZX0sZnJvbUpTT04obil7aWYoIUFycmF5LmlzQXJyYXkobil8fG4ubGVuZ3RoJTIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIEpTT04gZm9yIGZvbGQgc3RhdGVcIik7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDspe2xldCByPW5bZSsrXSxpPW5bZSsrXTtpZih0eXBlb2YgciE9XCJudW1iZXJcInx8dHlwZW9mIGkhPVwibnVtYmVyXCIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIEpTT04gZm9yIGZvbGQgc3RhdGVcIik7dC5wdXNoKHB0LnJhbmdlKHIsaSkpfXJldHVybiBrLnNldCh0LCEwKX19KTtmdW5jdGlvbiBaZShuKXtyZXR1cm4gbi5maWVsZChBLCExKXx8d3QuZW1wdHl9ZnVuY3Rpb24geihuLHQsZSl7dmFyIHI7bGV0IGk9bnVsbDtyZXR1cm4ocj1uLmZpZWxkKEEsITEpKT09PW51bGx8fHI9PT12b2lkIDB8fHIuYmV0d2Vlbih0LGUsKHMsbyk9PnsoIWl8fGkuZnJvbT5zKSYmKGk9e2Zyb206cyx0bzpvfSl9KSxpfWZ1bmN0aW9uIG1lKG4sdCxlKXtsZXQgcj0hMTtyZXR1cm4gbi5iZXR3ZWVuKHQsdCwoaSxzKT0+e2k9PXQmJnM9PWUmJihyPSEwKX0pLHJ9ZnVuY3Rpb24gQnQobix0KXtyZXR1cm4gbi5maWVsZChBLCExKT90OnQuY29uY2F0KEsuYXBwZW5kQ29uZmlnLm9mKEZ0KCkpKX12YXIgZ2U9bj0+e2ZvcihsZXQgdCBvZiBOdChuKSl7bGV0IGU9VihuLnN0YXRlLHQuZnJvbSx0LnRvKTtpZihlKXJldHVybiBuLmRpc3BhdGNoKHtlZmZlY3RzOkJ0KG4uc3RhdGUsW18ub2YoZSksTXQobixlKV0pfSksITB9cmV0dXJuITF9LGtlPW49PntpZighbi5zdGF0ZS5maWVsZChBLCExKSlyZXR1cm4hMTtsZXQgdD1bXTtmb3IobGV0IGUgb2YgTnQobikpe2xldCByPXoobi5zdGF0ZSxlLmZyb20sZS50byk7ciYmdC5wdXNoKFIub2YociksTXQobixyLCExKSl9cmV0dXJuIHQubGVuZ3RoJiZuLmRpc3BhdGNoKHtlZmZlY3RzOnR9KSx0Lmxlbmd0aD4wfTtmdW5jdGlvbiBNdChuLHQsZT0hMCl7bGV0IHI9bi5zdGF0ZS5kb2MubGluZUF0KHQuZnJvbSkubnVtYmVyLGk9bi5zdGF0ZS5kb2MubGluZUF0KHQudG8pLm51bWJlcjtyZXR1cm4geS5hbm5vdW5jZS5vZihgJHtuLnN0YXRlLnBocmFzZShlP1wiRm9sZGVkIGxpbmVzXCI6XCJVbmZvbGRlZCBsaW5lc1wiKX0gJHtyfSAke24uc3RhdGUucGhyYXNlKFwidG9cIil9ICR7aX0uYCl9dmFyIGJlPW49PntsZXR7c3RhdGU6dH09bixlPVtdO2ZvcihsZXQgcj0wO3I8dC5kb2MubGVuZ3RoOyl7bGV0IGk9bi5saW5lQmxvY2tBdChyKSxzPVYodCxpLmZyb20saS50byk7cyYmZS5wdXNoKF8ub2YocykpLHI9KHM/bi5saW5lQmxvY2tBdChzLnRvKTppKS50bysxfXJldHVybiBlLmxlbmd0aCYmbi5kaXNwYXRjaCh7ZWZmZWN0czpCdChuLnN0YXRlLGUpfSksISFlLmxlbmd0aH0sd2U9bj0+e2xldCB0PW4uc3RhdGUuZmllbGQoQSwhMSk7aWYoIXR8fCF0LnNpemUpcmV0dXJuITE7bGV0IGU9W107cmV0dXJuIHQuYmV0d2VlbigwLG4uc3RhdGUuZG9jLmxlbmd0aCwocixpKT0+e2UucHVzaChSLm9mKHtmcm9tOnIsdG86aX0pKX0pLG4uZGlzcGF0Y2goe2VmZmVjdHM6ZX0pLCEwfSx0bj1be2tleTpcIkN0cmwtU2hpZnQtW1wiLG1hYzpcIkNtZC1BbHQtW1wiLHJ1bjpnZX0se2tleTpcIkN0cmwtU2hpZnQtXVwiLG1hYzpcIkNtZC1BbHQtXVwiLHJ1bjprZX0se2tleTpcIkN0cmwtQWx0LVtcIixydW46YmV9LHtrZXk6XCJDdHJsLUFsdC1dXCIscnVuOndlfV0seWU9e3BsYWNlaG9sZGVyRE9NOm51bGwscGxhY2Vob2xkZXJUZXh0OlwiXFx1MjAyNlwifSxFdD1iLmRlZmluZSh7Y29tYmluZShuKXtyZXR1cm4gYnQobix5ZSl9fSk7ZnVuY3Rpb24gRnQobil7bGV0IHQ9W0EseGVdO3JldHVybiBuJiZ0LnB1c2goRXQub2YobikpLHR9dmFyIHB0PWsucmVwbGFjZSh7d2lkZ2V0Om5ldyBjbGFzcyBleHRlbmRzIFF0e3RvRE9NKG4pe2xldHtzdGF0ZTp0fT1uLGU9dC5mYWNldChFdCkscj1zPT57bGV0IG89bi5saW5lQmxvY2tBdChuLnBvc0F0RE9NKHMudGFyZ2V0KSksbD16KG4uc3RhdGUsby5mcm9tLG8udG8pO2wmJm4uZGlzcGF0Y2goe2VmZmVjdHM6Ui5vZihsKX0pLHMucHJldmVudERlZmF1bHQoKX07aWYoZS5wbGFjZWhvbGRlckRPTSlyZXR1cm4gZS5wbGFjZWhvbGRlckRPTShuLHIpO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3JldHVybiBpLnRleHRDb250ZW50PWUucGxhY2Vob2xkZXJUZXh0LGkuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLHQucGhyYXNlKFwiZm9sZGVkIGNvZGVcIikpLGkudGl0bGU9dC5waHJhc2UoXCJ1bmZvbGRcIiksaS5jbGFzc05hbWU9XCJjbS1mb2xkUGxhY2Vob2xkZXJcIixpLm9uY2xpY2s9cixpfX19KSx2ZT17b3BlblRleHQ6XCJcXHUyMzA0XCIsY2xvc2VkVGV4dDpcIlxcdTIwM0FcIixtYXJrZXJET006bnVsbCxkb21FdmVudEhhbmRsZXJzOnt9LGZvbGRpbmdDaGFuZ2VkOigpPT4hMX0sTj1jbGFzcyBleHRlbmRzIFl0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmNvbmZpZz10LHRoaXMub3Blbj1lfWVxKHQpe3JldHVybiB0aGlzLmNvbmZpZz09dC5jb25maWcmJnRoaXMub3Blbj09dC5vcGVufXRvRE9NKHQpe2lmKHRoaXMuY29uZmlnLm1hcmtlckRPTSlyZXR1cm4gdGhpcy5jb25maWcubWFya2VyRE9NKHRoaXMub3Blbik7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7cmV0dXJuIGUudGV4dENvbnRlbnQ9dGhpcy5vcGVuP3RoaXMuY29uZmlnLm9wZW5UZXh0OnRoaXMuY29uZmlnLmNsb3NlZFRleHQsZS50aXRsZT10LnN0YXRlLnBocmFzZSh0aGlzLm9wZW4/XCJGb2xkIGxpbmVcIjpcIlVuZm9sZCBsaW5lXCIpLGV9fTtmdW5jdGlvbiBlbihuPXt9KXtsZXQgdD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdmUpLG4pLGU9bmV3IE4odCwhMCkscj1uZXcgTih0LCExKSxpPWx0LmZyb21DbGFzcyhjbGFzc3tjb25zdHJ1Y3RvcihvKXt0aGlzLmZyb209by52aWV3cG9ydC5mcm9tLHRoaXMubWFya2Vycz10aGlzLmJ1aWxkTWFya2VycyhvKX11cGRhdGUobyl7KG8uZG9jQ2hhbmdlZHx8by52aWV3cG9ydENoYW5nZWR8fG8uc3RhcnRTdGF0ZS5mYWNldChQKSE9by5zdGF0ZS5mYWNldChQKXx8by5zdGFydFN0YXRlLmZpZWxkKEEsITEpIT1vLnN0YXRlLmZpZWxkKEEsITEpfHxtKG8uc3RhcnRTdGF0ZSkhPW0oby5zdGF0ZSl8fHQuZm9sZGluZ0NoYW5nZWQobykpJiYodGhpcy5tYXJrZXJzPXRoaXMuYnVpbGRNYXJrZXJzKG8udmlldykpfWJ1aWxkTWFya2VycyhvKXtsZXQgbD1uZXcgeXQ7Zm9yKGxldCBhIG9mIG8udmlld3BvcnRMaW5lQmxvY2tzKXtsZXQgaD16KG8uc3RhdGUsYS5mcm9tLGEudG8pP3I6VihvLnN0YXRlLGEuZnJvbSxhLnRvKT9lOm51bGw7aCYmbC5hZGQoYS5mcm9tLGEuZnJvbSxoKX1yZXR1cm4gbC5maW5pc2goKX19KSx7ZG9tRXZlbnRIYW5kbGVyczpzfT10O3JldHVybltpLFh0KHtjbGFzczpcImNtLWZvbGRHdXR0ZXJcIixtYXJrZXJzKG8pe3ZhciBsO3JldHVybigobD1vLnBsdWdpbihpKSk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLm1hcmtlcnMpfHx3dC5lbXB0eX0saW5pdGlhbFNwYWNlcigpe3JldHVybiBuZXcgTih0LCExKX0sZG9tRXZlbnRIYW5kbGVyczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2NsaWNrOihvLGwsYSk9PntpZihzLmNsaWNrJiZzLmNsaWNrKG8sbCxhKSlyZXR1cm4hMDtsZXQgaD16KG8uc3RhdGUsbC5mcm9tLGwudG8pO2lmKGgpcmV0dXJuIG8uZGlzcGF0Y2goe2VmZmVjdHM6Ui5vZihoKX0pLCEwO2xldCB1PVYoby5zdGF0ZSxsLmZyb20sbC50byk7cmV0dXJuIHU/KG8uZGlzcGF0Y2goe2VmZmVjdHM6Xy5vZih1KX0pLCEwKTohMX19KX0pLEZ0KCldfXZhciB4ZT15LmJhc2VUaGVtZSh7XCIuY20tZm9sZFBsYWNlaG9sZGVyXCI6e2JhY2tncm91bmRDb2xvcjpcIiNlZWVcIixib3JkZXI6XCIxcHggc29saWQgI2RkZFwiLGNvbG9yOlwiIzg4OFwiLGJvcmRlclJhZGl1czpcIi4yZW1cIixtYXJnaW46XCIwIDFweFwiLHBhZGRpbmc6XCIwIDFweFwiLGN1cnNvcjpcInBvaW50ZXJcIn0sXCIuY20tZm9sZEd1dHRlciBzcGFuXCI6e3BhZGRpbmc6XCIwIDFweFwiLGN1cnNvcjpcInBvaW50ZXJcIn19KSxEPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7bGV0IHI7ZnVuY3Rpb24gaShsKXtsZXQgYT1mdC5uZXdOYW1lKCk7cmV0dXJuKHJ8fChyPU9iamVjdC5jcmVhdGUobnVsbCkpKVtcIi5cIithXT1sLGF9bGV0IHM9dHlwZW9mIGUuYWxsPT1cInN0cmluZ1wiP2UuYWxsOmUuYWxsP2koZS5hbGwpOnZvaWQgMCxvPWUuc2NvcGU7dGhpcy5zY29wZT1vIGluc3RhbmNlb2YgYz9sPT5sLnByb3AoVCk9PW8uZGF0YTpvP2w9Pmw9PW86dm9pZCAwLHRoaXMuc3R5bGU9WnQodC5tYXAobD0+KHt0YWc6bC50YWcsY2xhc3M6bC5jbGFzc3x8aShPYmplY3QuYXNzaWduKHt9LGwse3RhZzpudWxsfSkpfSkpLHthbGw6c30pLnN0eWxlLHRoaXMubW9kdWxlPXI/bmV3IGZ0KHIpOm51bGwsdGhpcy50aGVtZVR5cGU9ZS50aGVtZVR5cGV9c3RhdGljIGRlZmluZSh0LGUpe3JldHVybiBuZXcgRCh0LGV8fHt9KX19LG50PWIuZGVmaW5lKCksUnQ9Yi5kZWZpbmUoe2NvbWJpbmUobil7cmV0dXJuIG4ubGVuZ3RoP1tuWzBdXTpudWxsfX0pO2Z1bmN0aW9uIEwobil7bGV0IHQ9bi5mYWNldChudCk7cmV0dXJuIHQubGVuZ3RoP3Q6bi5mYWNldChSdCl9ZnVuY3Rpb24gbm4obix0KXtsZXQgZT1bU2VdLHI7cmV0dXJuIG4gaW5zdGFuY2VvZiBEJiYobi5tb2R1bGUmJmUucHVzaCh5LnN0eWxlTW9kdWxlLm9mKG4ubW9kdWxlKSkscj1uLnRoZW1lVHlwZSksdD8uZmFsbGJhY2s/ZS5wdXNoKFJ0Lm9mKG4pKTpyP2UucHVzaChudC5jb21wdXRlTihbeS5kYXJrVGhlbWVdLGk9PmkuZmFjZXQoeS5kYXJrVGhlbWUpPT0ocj09XCJkYXJrXCIpP1tuXTpbXSkpOmUucHVzaChudC5vZihuKSksZX1mdW5jdGlvbiBybihuLHQsZSl7bGV0IHI9TChuKSxpPW51bGw7aWYocil7Zm9yKGxldCBzIG9mIHIpaWYoIXMuc2NvcGV8fGUmJnMuc2NvcGUoZSkpe2xldCBvPXMuc3R5bGUodCk7byYmKGk9aT9pK1wiIFwiK286byl9fXJldHVybiBpfXZhciBydD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm1hcmtDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMudHJlZT1tKHQuc3RhdGUpLHRoaXMuZGVjb3JhdGlvbnM9dGhpcy5idWlsZERlY28odCxMKHQuc3RhdGUpKX11cGRhdGUodCl7bGV0IGU9bSh0LnN0YXRlKSxyPUwodC5zdGF0ZSksaT1yIT1MKHQuc3RhcnRTdGF0ZSk7ZS5sZW5ndGg8dC52aWV3LnZpZXdwb3J0LnRvJiYhaSYmZS50eXBlPT10aGlzLnRyZWUudHlwZT90aGlzLmRlY29yYXRpb25zPXRoaXMuZGVjb3JhdGlvbnMubWFwKHQuY2hhbmdlcyk6KGUhPXRoaXMudHJlZXx8dC52aWV3cG9ydENoYW5nZWR8fGkpJiYodGhpcy50cmVlPWUsdGhpcy5kZWNvcmF0aW9ucz10aGlzLmJ1aWxkRGVjbyh0LnZpZXcscikpfWJ1aWxkRGVjbyh0LGUpe2lmKCFlfHwhdGhpcy50cmVlLmxlbmd0aClyZXR1cm4gay5ub25lO2xldCByPW5ldyB5dDtmb3IobGV0e2Zyb206aSx0bzpzfW9mIHQudmlzaWJsZVJhbmdlcyl0ZSh0aGlzLnRyZWUsZSwobyxsLGEpPT57ci5hZGQobyxsLHRoaXMubWFya0NhY2hlW2FdfHwodGhpcy5tYXJrQ2FjaGVbYV09ay5tYXJrKHtjbGFzczphfSkpKX0saSxzKTtyZXR1cm4gci5maW5pc2goKX19LFNlPUt0LmhpZ2gobHQuZnJvbUNsYXNzKHJ0LHtkZWNvcmF0aW9uczpuPT5uLmRlY29yYXRpb25zfSkpLHNuPUQuZGVmaW5lKFt7dGFnOmYubWV0YSxjb2xvcjpcIiM3YTc1N2FcIn0se3RhZzpmLmxpbmssdGV4dERlY29yYXRpb246XCJ1bmRlcmxpbmVcIn0se3RhZzpmLmhlYWRpbmcsdGV4dERlY29yYXRpb246XCJ1bmRlcmxpbmVcIixmb250V2VpZ2h0OlwiYm9sZFwifSx7dGFnOmYuZW1waGFzaXMsZm9udFN0eWxlOlwiaXRhbGljXCJ9LHt0YWc6Zi5zdHJvbmcsZm9udFdlaWdodDpcImJvbGRcIn0se3RhZzpmLnN0cmlrZXRocm91Z2gsdGV4dERlY29yYXRpb246XCJsaW5lLXRocm91Z2hcIn0se3RhZzpmLmtleXdvcmQsY29sb3I6XCIjNzA4XCJ9LHt0YWc6W2YuYXRvbSxmLmJvb2wsZi51cmwsZi5jb250ZW50U2VwYXJhdG9yLGYubGFiZWxOYW1lXSxjb2xvcjpcIiMyMTlcIn0se3RhZzpbZi5saXRlcmFsLGYuaW5zZXJ0ZWRdLGNvbG9yOlwiIzE2NFwifSx7dGFnOltmLnN0cmluZyxmLmRlbGV0ZWRdLGNvbG9yOlwiI2ExMVwifSx7dGFnOltmLnJlZ2V4cCxmLmVzY2FwZSxmLnNwZWNpYWwoZi5zdHJpbmcpXSxjb2xvcjpcIiNlNDBcIn0se3RhZzpmLmRlZmluaXRpb24oZi52YXJpYWJsZU5hbWUpLGNvbG9yOlwiIzAwZlwifSx7dGFnOmYubG9jYWwoZi52YXJpYWJsZU5hbWUpLGNvbG9yOlwiIzMwYVwifSx7dGFnOltmLnR5cGVOYW1lLGYubmFtZXNwYWNlXSxjb2xvcjpcIiMwODVcIn0se3RhZzpmLmNsYXNzTmFtZSxjb2xvcjpcIiMxNjdcIn0se3RhZzpbZi5zcGVjaWFsKGYudmFyaWFibGVOYW1lKSxmLm1hY3JvTmFtZV0sY29sb3I6XCIjMjU2XCJ9LHt0YWc6Zi5kZWZpbml0aW9uKGYucHJvcGVydHlOYW1lKSxjb2xvcjpcIiMwMGNcIn0se3RhZzpmLmNvbW1lbnQsY29sb3I6XCIjOTQwXCJ9LHt0YWc6Zi5pbnZhbGlkLGNvbG9yOlwiI2YwMFwifV0pLFBlPXkuYmFzZVRoZW1lKHtcIiYuY20tZm9jdXNlZCAuY20tbWF0Y2hpbmdCcmFja2V0XCI6e2JhY2tncm91bmRDb2xvcjpcIiMzMjhjODI1MlwifSxcIiYuY20tZm9jdXNlZCAuY20tbm9ubWF0Y2hpbmdCcmFja2V0XCI6e2JhY2tncm91bmRDb2xvcjpcIiNiYjU1NTU0NFwifX0pLFV0PTFlNCxXdD1cIigpW117fVwiLEx0PWIuZGVmaW5lKHtjb21iaW5lKG4pe3JldHVybiBidChuLHthZnRlckN1cnNvcjohMCxicmFja2V0czpXdCxtYXhTY2FuRGlzdGFuY2U6VXQscmVuZGVyTWF0Y2g6VGV9KX19KSxBZT1rLm1hcmsoe2NsYXNzOlwiY20tbWF0Y2hpbmdCcmFja2V0XCJ9KSxDZT1rLm1hcmsoe2NsYXNzOlwiY20tbm9ubWF0Y2hpbmdCcmFja2V0XCJ9KTtmdW5jdGlvbiBUZShuKXtsZXQgdD1bXSxlPW4ubWF0Y2hlZD9BZTpDZTtyZXR1cm4gdC5wdXNoKGUucmFuZ2Uobi5zdGFydC5mcm9tLG4uc3RhcnQudG8pKSxuLmVuZCYmdC5wdXNoKGUucmFuZ2Uobi5lbmQuZnJvbSxuLmVuZC50bykpLHR9dmFyIERlPW90LmRlZmluZSh7Y3JlYXRlKCl7cmV0dXJuIGsubm9uZX0sdXBkYXRlKG4sdCl7aWYoIXQuZG9jQ2hhbmdlZCYmIXQuc2VsZWN0aW9uKXJldHVybiBuO2xldCBlPVtdLHI9dC5zdGF0ZS5mYWNldChMdCk7Zm9yKGxldCBpIG9mIHQuc3RhdGUuc2VsZWN0aW9uLnJhbmdlcyl7aWYoIWkuZW1wdHkpY29udGludWU7bGV0IHM9VSh0LnN0YXRlLGkuaGVhZCwtMSxyKXx8aS5oZWFkPjAmJlUodC5zdGF0ZSxpLmhlYWQtMSwxLHIpfHxyLmFmdGVyQ3Vyc29yJiYoVSh0LnN0YXRlLGkuaGVhZCwxLHIpfHxpLmhlYWQ8dC5zdGF0ZS5kb2MubGVuZ3RoJiZVKHQuc3RhdGUsaS5oZWFkKzEsLTEscikpO3MmJihlPWUuY29uY2F0KHIucmVuZGVyTWF0Y2gocyx0LnN0YXRlKSkpfXJldHVybiBrLnNldChlLCEwKX0scHJvdmlkZTpuPT55LmRlY29yYXRpb25zLmZyb20obil9KSxJZT1bRGUsUGVdO2Z1bmN0aW9uIG9uKG49e30pe3JldHVybltMdC5vZihuKSxJZV19ZnVuY3Rpb24gaXQobix0LGUpe2xldCByPW4ucHJvcCh0PDA/di5vcGVuZWRCeTp2LmNsb3NlZEJ5KTtpZihyKXJldHVybiByO2lmKG4ubmFtZS5sZW5ndGg9PTEpe2xldCBpPWUuaW5kZXhPZihuLm5hbWUpO2lmKGk+LTEmJmklMj09KHQ8MD8xOjApKXJldHVybltlW2krdF1dfXJldHVybiBudWxsfWZ1bmN0aW9uIFUobix0LGUscj17fSl7bGV0IGk9ci5tYXhTY2FuRGlzdGFuY2V8fFV0LHM9ci5icmFja2V0c3x8V3Qsbz1tKG4pLGw9by5yZXNvbHZlSW5uZXIodCxlKTtmb3IobGV0IGE9bDthO2E9YS5wYXJlbnQpe2xldCBoPWl0KGEudHlwZSxlLHMpO2lmKGgmJmEuZnJvbTxhLnRvKXJldHVybiBPZShuLHQsZSxhLGgscyl9cmV0dXJuIE5lKG4sdCxlLG8sbC50eXBlLGkscyl9ZnVuY3Rpb24gT2Uobix0LGUscixpLHMpe2xldCBvPXIucGFyZW50LGw9e2Zyb206ci5mcm9tLHRvOnIudG99LGE9MCxoPW8/LmN1cnNvcigpO2lmKGgmJihlPDA/aC5jaGlsZEJlZm9yZShyLmZyb20pOmguY2hpbGRBZnRlcihyLnRvKSkpZG8gaWYoZTwwP2gudG88PXIuZnJvbTpoLmZyb20+PXIudG8pe2lmKGE9PTAmJmkuaW5kZXhPZihoLnR5cGUubmFtZSk+LTEmJmguZnJvbTxoLnRvKXJldHVybntzdGFydDpsLGVuZDp7ZnJvbTpoLmZyb20sdG86aC50b30sbWF0Y2hlZDohMH07aWYoaXQoaC50eXBlLGUscykpYSsrO2Vsc2UgaWYoaXQoaC50eXBlLC1lLHMpKXtpZihhPT0wKXJldHVybntzdGFydDpsLGVuZDpoLmZyb209PWgudG8/dm9pZCAwOntmcm9tOmguZnJvbSx0bzpoLnRvfSxtYXRjaGVkOiExfTthLS19fXdoaWxlKGU8MD9oLnByZXZTaWJsaW5nKCk6aC5uZXh0U2libGluZygpKTtyZXR1cm57c3RhcnQ6bCxtYXRjaGVkOiExfX1mdW5jdGlvbiBOZShuLHQsZSxyLGkscyxvKXtsZXQgbD1lPDA/bi5zbGljZURvYyh0LTEsdCk6bi5zbGljZURvYyh0LHQrMSksYT1vLmluZGV4T2YobCk7aWYoYTwwfHxhJTI9PTAhPWU+MClyZXR1cm4gbnVsbDtsZXQgaD17ZnJvbTplPDA/dC0xOnQsdG86ZT4wP3QrMTp0fSx1PW4uZG9jLml0ZXJSYW5nZSh0LGU+MD9uLmRvYy5sZW5ndGg6MCksZD0wO2ZvcihsZXQgZz0wOyF1Lm5leHQoKS5kb25lJiZnPD1zOyl7bGV0IHc9dS52YWx1ZTtlPDAmJihnKz13Lmxlbmd0aCk7bGV0IFE9dCtnKmU7Zm9yKGxldCBDPWU+MD8wOncubGVuZ3RoLTEsR3Q9ZT4wP3cubGVuZ3RoOi0xO0MhPUd0O0MrPWUpe2xldCBYPW8uaW5kZXhPZih3W0NdKTtpZighKFg8MHx8ci5yZXNvbHZlSW5uZXIoUStDLDEpLnR5cGUhPWkpKWlmKFglMj09MD09ZT4wKWQrKztlbHNle2lmKGQ9PTEpcmV0dXJue3N0YXJ0OmgsZW5kOntmcm9tOlErQyx0bzpRK0MrMX0sbWF0Y2hlZDpYPj4xPT1hPj4xfTtkLS19fWU+MCYmKGcrPXcubGVuZ3RoKX1yZXR1cm4gdS5kb25lP3tzdGFydDpoLG1hdGNoZWQ6ITF9Om51bGx9ZnVuY3Rpb24gbXQobix0LGUscj0wLGk9MCl7dD09bnVsbCYmKHQ9bi5zZWFyY2goL1teXFxzXFx1MDBhMF0vKSx0PT0tMSYmKHQ9bi5sZW5ndGgpKTtsZXQgcz1pO2ZvcihsZXQgbz1yO288dDtvKyspbi5jaGFyQ29kZUF0KG8pPT05P3MrPWUtcyVlOnMrKztyZXR1cm4gc312YXIgRz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUscil7dGhpcy5zdHJpbmc9dCx0aGlzLnRhYlNpemU9ZSx0aGlzLmluZGVudFVuaXQ9cix0aGlzLnBvcz0wLHRoaXMuc3RhcnQ9MCx0aGlzLmxhc3RDb2x1bW5Qb3M9MCx0aGlzLmxhc3RDb2x1bW5WYWx1ZT0wfWVvbCgpe3JldHVybiB0aGlzLnBvcz49dGhpcy5zdHJpbmcubGVuZ3RofXNvbCgpe3JldHVybiB0aGlzLnBvcz09MH1wZWVrKCl7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyl8fHZvaWQgMH1uZXh0KCl7aWYodGhpcy5wb3M8dGhpcy5zdHJpbmcubGVuZ3RoKXJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyl9ZWF0KHQpe2xldCBlPXRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykscjtpZih0eXBlb2YgdD09XCJzdHJpbmdcIj9yPWU9PXQ6cj1lJiYodCBpbnN0YW5jZW9mIFJlZ0V4cD90LnRlc3QoZSk6dChlKSkscilyZXR1cm4rK3RoaXMucG9zLGV9ZWF0V2hpbGUodCl7bGV0IGU9dGhpcy5wb3M7Zm9yKDt0aGlzLmVhdCh0KTspO3JldHVybiB0aGlzLnBvcz5lfWVhdFNwYWNlKCl7bGV0IHQ9dGhpcy5wb3M7Zm9yKDsvW1xcc1xcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpOykrK3RoaXMucG9zO3JldHVybiB0aGlzLnBvcz50fXNraXBUb0VuZCgpe3RoaXMucG9zPXRoaXMuc3RyaW5nLmxlbmd0aH1za2lwVG8odCl7bGV0IGU9dGhpcy5zdHJpbmcuaW5kZXhPZih0LHRoaXMucG9zKTtpZihlPi0xKXJldHVybiB0aGlzLnBvcz1lLCEwfWJhY2tVcCh0KXt0aGlzLnBvcy09dH1jb2x1bW4oKXtyZXR1cm4gdGhpcy5sYXN0Q29sdW1uUG9zPHRoaXMuc3RhcnQmJih0aGlzLmxhc3RDb2x1bW5WYWx1ZT1tdCh0aGlzLnN0cmluZyx0aGlzLnN0YXJ0LHRoaXMudGFiU2l6ZSx0aGlzLmxhc3RDb2x1bW5Qb3MsdGhpcy5sYXN0Q29sdW1uVmFsdWUpLHRoaXMubGFzdENvbHVtblBvcz10aGlzLnN0YXJ0KSx0aGlzLmxhc3RDb2x1bW5WYWx1ZX1pbmRlbnRhdGlvbigpe3JldHVybiBtdCh0aGlzLnN0cmluZyxudWxsLHRoaXMudGFiU2l6ZSl9bWF0Y2godCxlLHIpe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXtsZXQgaT1vPT5yP28udG9Mb3dlckNhc2UoKTpvLHM9dGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLHQubGVuZ3RoKTtyZXR1cm4gaShzKT09aSh0KT8oZSE9PSExJiYodGhpcy5wb3MrPXQubGVuZ3RoKSwhMCk6bnVsbH1lbHNle2xldCBpPXRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaCh0KTtyZXR1cm4gaSYmaS5pbmRleD4wP251bGw6KGkmJmUhPT0hMSYmKHRoaXMucG9zKz1pWzBdLmxlbmd0aCksaSl9fWN1cnJlbnQoKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCx0aGlzLnBvcyl9fTtmdW5jdGlvbiBCZShuKXtyZXR1cm57dG9rZW46bi50b2tlbixibGFua0xpbmU6bi5ibGFua0xpbmV8fCgoKT0+e30pLHN0YXJ0U3RhdGU6bi5zdGFydFN0YXRlfHwoKCk9PiEwKSxjb3B5U3RhdGU6bi5jb3B5U3RhdGV8fE1lLGluZGVudDpuLmluZGVudHx8KCgpPT5udWxsKSxsYW5ndWFnZURhdGE6bi5sYW5ndWFnZURhdGF8fHt9LHRva2VuVGFibGU6bi50b2tlblRhYmxlfHxodH19ZnVuY3Rpb24gTWUobil7aWYodHlwZW9mIG4hPVwib2JqZWN0XCIpcmV0dXJuIG47bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe2xldCByPW5bZV07dFtlXT1yIGluc3RhbmNlb2YgQXJyYXk/ci5zbGljZSgpOnJ9cmV0dXJuIHR9dmFyIHE9Y2xhc3MgZXh0ZW5kcyBje2NvbnN0cnVjdG9yKHQpe2xldCBlPXZ0KHQubGFuZ3VhZ2VEYXRhKSxyPUJlKHQpLGkscz1uZXcgY2xhc3MgZXh0ZW5kcyBrdHtjcmVhdGVQYXJzZShvLGwsYSl7cmV0dXJuIG5ldyBzdChpLG8sbCxhKX19O3N1cGVyKGUscyxbUHQub2YoKG8sbCk9PnRoaXMuZ2V0SW5kZW50KG8sbCkpXSksdGhpcy50b3BOb2RlPVVlKGUpLGk9dGhpcyx0aGlzLnN0cmVhbVBhcnNlcj1yLHRoaXMuc3RhdGVBZnRlcj1uZXcgdih7cGVyTm9kZTohMH0pLHRoaXMudG9rZW5UYWJsZT10LnRva2VuVGFibGU/bmV3IEgoci50b2tlblRhYmxlKTpSZX1zdGF0aWMgZGVmaW5lKHQpe3JldHVybiBuZXcgcSh0KX1nZXRJbmRlbnQodCxlKXtsZXQgcj1tKHQuc3RhdGUpLGk9ci5yZXNvbHZlKGUpO2Zvcig7aSYmaS50eXBlIT10aGlzLnRvcE5vZGU7KWk9aS5wYXJlbnQ7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHM9YXQodGhpcyxyLDAsaS5mcm9tLGUpLG8sbDtpZihzPyhsPXMuc3RhdGUsbz1zLnBvcysxKToobD10aGlzLnN0cmVhbVBhcnNlci5zdGFydFN0YXRlKHQudW5pdCksbz0wKSxlLW8+MWU0KXJldHVybiBudWxsO2Zvcig7bzxlOyl7bGV0IGg9dC5zdGF0ZS5kb2MubGluZUF0KG8pLHU9TWF0aC5taW4oZSxoLnRvKTtpZihoLmxlbmd0aCl7bGV0IGQ9bmV3IEcoaC50ZXh0LHQuc3RhdGUudGFiU2l6ZSx0LnVuaXQpO2Zvcig7ZC5wb3M8dS1oLmZyb207KSR0KHRoaXMuc3RyZWFtUGFyc2VyLnRva2VuLGQsbCl9ZWxzZSB0aGlzLnN0cmVhbVBhcnNlci5ibGFua0xpbmUobCx0LnVuaXQpO2lmKHU9PWUpYnJlYWs7bz1oLnRvKzF9bGV0e3RleHQ6YX09dC5saW5lQXQoZSk7cmV0dXJuIHRoaXMuc3RyZWFtUGFyc2VyLmluZGVudChsLC9eXFxzKiguKikvLmV4ZWMoYSlbMV0sdCl9Z2V0IGFsbG93c05lc3RpbmcoKXtyZXR1cm4hMX19O2Z1bmN0aW9uIGF0KG4sdCxlLHIsaSl7bGV0IHM9ZT49ciYmZSt0Lmxlbmd0aDw9aSYmdC5wcm9wKG4uc3RhdGVBZnRlcik7aWYocylyZXR1cm57c3RhdGU6bi5zdHJlYW1QYXJzZXIuY29weVN0YXRlKHMpLHBvczplK3QubGVuZ3RofTtmb3IobGV0IG89dC5jaGlsZHJlbi5sZW5ndGgtMTtvPj0wO28tLSl7bGV0IGw9dC5jaGlsZHJlbltvXSxhPWUrdC5wb3NpdGlvbnNbb10saD1sIGluc3RhbmNlb2YgcCYmYTxpJiZhdChuLGwsYSxyLGkpO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9ZnVuY3Rpb24ganQobix0LGUscixpKXtpZihpJiZlPD0wJiZyPj10Lmxlbmd0aClyZXR1cm4gdDshaSYmdC50eXBlPT1uLnRvcE5vZGUmJihpPSEwKTtmb3IobGV0IHM9dC5jaGlsZHJlbi5sZW5ndGgtMTtzPj0wO3MtLSl7bGV0IG89dC5wb3NpdGlvbnNbc10sbD10LmNoaWxkcmVuW3NdLGE7aWYobzxyJiZsIGluc3RhbmNlb2YgcCl7aWYoIShhPWp0KG4sbCxlLW8sci1vLGkpKSlicmVhaztyZXR1cm4gaT9uZXcgcCh0LnR5cGUsdC5jaGlsZHJlbi5zbGljZSgwLHMpLmNvbmNhdChhKSx0LnBvc2l0aW9ucy5zbGljZSgwLHMrMSksbythLmxlbmd0aCk6YX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gRWUobix0LGUscil7Zm9yKGxldCBpIG9mIHQpe2xldCBzPWkuZnJvbSsoaS5vcGVuU3RhcnQ/MjU6MCksbz1pLnRvLShpLm9wZW5FbmQ/MjU6MCksbD1zPD1lJiZvPmUmJmF0KG4saS50cmVlLDAtaS5vZmZzZXQsZSxvKSxhO2lmKGwmJihhPWp0KG4saS50cmVlLGUraS5vZmZzZXQsbC5wb3MraS5vZmZzZXQsITEpKSlyZXR1cm57c3RhdGU6bC5zdGF0ZSx0cmVlOmF9fXJldHVybntzdGF0ZTpuLnN0cmVhbVBhcnNlci5zdGFydFN0YXRlKHI/JChyKTo0KSx0cmVlOnAuZW1wdHl9fXZhciBzdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUscixpKXt0aGlzLmxhbmc9dCx0aGlzLmlucHV0PWUsdGhpcy5mcmFnbWVudHM9cix0aGlzLnJhbmdlcz1pLHRoaXMuc3RvcHBlZEF0PW51bGwsdGhpcy5jaHVua3M9W10sdGhpcy5jaHVua1Bvcz1bXSx0aGlzLmNodW5rPVtdLHRoaXMuY2h1bmtSZXVzZWQ9dm9pZCAwLHRoaXMucmFuZ2VJbmRleD0wLHRoaXMudG89aVtpLmxlbmd0aC0xXS50bztsZXQgcz14LmdldCgpLG89aVswXS5mcm9tLHtzdGF0ZTpsLHRyZWU6YX09RWUodCxyLG8scz8uc3RhdGUpO3RoaXMuc3RhdGU9bCx0aGlzLnBhcnNlZFBvcz10aGlzLmNodW5rU3RhcnQ9bythLmxlbmd0aDtmb3IobGV0IGg9MDtoPGEuY2hpbGRyZW4ubGVuZ3RoO2grKyl0aGlzLmNodW5rcy5wdXNoKGEuY2hpbGRyZW5baF0pLHRoaXMuY2h1bmtQb3MucHVzaChhLnBvc2l0aW9uc1toXSk7cyYmdGhpcy5wYXJzZWRQb3M8cy52aWV3cG9ydC5mcm9tLTFlNSYmKHRoaXMuc3RhdGU9dGhpcy5sYW5nLnN0cmVhbVBhcnNlci5zdGFydFN0YXRlKCQocy5zdGF0ZSkpLHMuc2tpcFVudGlsSW5WaWV3KHRoaXMucGFyc2VkUG9zLHMudmlld3BvcnQuZnJvbSksdGhpcy5wYXJzZWRQb3M9cy52aWV3cG9ydC5mcm9tKSx0aGlzLm1vdmVSYW5nZUluZGV4KCl9YWR2YW5jZSgpe2xldCB0PXguZ2V0KCksZT10aGlzLnN0b3BwZWRBdD09bnVsbD90aGlzLnRvOk1hdGgubWluKHRoaXMudG8sdGhpcy5zdG9wcGVkQXQpLHI9TWF0aC5taW4oZSx0aGlzLmNodW5rU3RhcnQrMjA0OCk7Zm9yKHQmJihyPU1hdGgubWluKHIsdC52aWV3cG9ydC50bykpO3RoaXMucGFyc2VkUG9zPHI7KXRoaXMucGFyc2VMaW5lKHQpO3JldHVybiB0aGlzLmNodW5rU3RhcnQ8dGhpcy5wYXJzZWRQb3MmJnRoaXMuZmluaXNoQ2h1bmsoKSx0aGlzLnBhcnNlZFBvcz49ZT90aGlzLmZpbmlzaCgpOnQmJnRoaXMucGFyc2VkUG9zPj10LnZpZXdwb3J0LnRvPyh0LnNraXBVbnRpbEluVmlldyh0aGlzLnBhcnNlZFBvcyxlKSx0aGlzLmZpbmlzaCgpKTpudWxsfXN0b3BBdCh0KXt0aGlzLnN0b3BwZWRBdD10fWxpbmVBZnRlcih0KXtsZXQgZT10aGlzLmlucHV0LmNodW5rKHQpO2lmKHRoaXMuaW5wdXQubGluZUNodW5rcyllPT1gXG5gJiYoZT1cIlwiKTtlbHNle2xldCByPWUuaW5kZXhPZihgXG5gKTtyPi0xJiYoZT1lLnNsaWNlKDAscikpfXJldHVybiB0K2UubGVuZ3RoPD10aGlzLnRvP2U6ZS5zbGljZSgwLHRoaXMudG8tdCl9bmV4dExpbmUoKXtsZXQgdD10aGlzLnBhcnNlZFBvcyxlPXRoaXMubGluZUFmdGVyKHQpLHI9dCtlLmxlbmd0aDtmb3IobGV0IGk9dGhpcy5yYW5nZUluZGV4Ozspe2xldCBzPXRoaXMucmFuZ2VzW2ldLnRvO2lmKHM+PXJ8fChlPWUuc2xpY2UoMCxzLShyLWUubGVuZ3RoKSksaSsrLGk9PXRoaXMucmFuZ2VzLmxlbmd0aCkpYnJlYWs7bGV0IG89dGhpcy5yYW5nZXNbaV0uZnJvbSxsPXRoaXMubGluZUFmdGVyKG8pO2UrPWwscj1vK2wubGVuZ3RofXJldHVybntsaW5lOmUsZW5kOnJ9fXNraXBHYXBzVG8odCxlLHIpe2Zvcig7Oyl7bGV0IGk9dGhpcy5yYW5nZXNbdGhpcy5yYW5nZUluZGV4XS50byxzPXQrZTtpZihyPjA/aT5zOmk+PXMpYnJlYWs7ZSs9dGhpcy5yYW5nZXNbKyt0aGlzLnJhbmdlSW5kZXhdLmZyb20taX1yZXR1cm4gZX1tb3ZlUmFuZ2VJbmRleCgpe2Zvcig7dGhpcy5yYW5nZXNbdGhpcy5yYW5nZUluZGV4XS50bzx0aGlzLnBhcnNlZFBvczspdGhpcy5yYW5nZUluZGV4Kyt9ZW1pdFRva2VuKHQsZSxyLGkscyl7aWYodGhpcy5yYW5nZXMubGVuZ3RoPjEpe3M9dGhpcy5za2lwR2Fwc1RvKGUscywxKSxlKz1zO2xldCBvPXRoaXMuY2h1bmsubGVuZ3RoO3M9dGhpcy5za2lwR2Fwc1RvKHIscywtMSkscis9cyxpKz10aGlzLmNodW5rLmxlbmd0aC1vfXJldHVybiB0aGlzLmNodW5rLnB1c2godCxlLHIsaSksc31wYXJzZUxpbmUodCl7bGV0e2xpbmU6ZSxlbmQ6cn09dGhpcy5uZXh0TGluZSgpLGk9MCx7c3RyZWFtUGFyc2VyOnN9PXRoaXMubGFuZyxvPW5ldyBHKGUsdD90LnN0YXRlLnRhYlNpemU6NCx0PyQodC5zdGF0ZSk6Mik7aWYoby5lb2woKSlzLmJsYW5rTGluZSh0aGlzLnN0YXRlLG8uaW5kZW50VW5pdCk7ZWxzZSBmb3IoOyFvLmVvbCgpOyl7bGV0IGw9JHQocy50b2tlbixvLHRoaXMuc3RhdGUpO2lmKGwmJihpPXRoaXMuZW1pdFRva2VuKHRoaXMubGFuZy50b2tlblRhYmxlLnJlc29sdmUobCksdGhpcy5wYXJzZWRQb3Mrby5zdGFydCx0aGlzLnBhcnNlZFBvcytvLnBvcyw0LGkpKSxvLnN0YXJ0PjFlNClicmVha310aGlzLnBhcnNlZFBvcz1yLHRoaXMubW92ZVJhbmdlSW5kZXgoKSx0aGlzLnBhcnNlZFBvczx0aGlzLnRvJiZ0aGlzLnBhcnNlZFBvcysrfWZpbmlzaENodW5rKCl7bGV0IHQ9cC5idWlsZCh7YnVmZmVyOnRoaXMuY2h1bmssc3RhcnQ6dGhpcy5jaHVua1N0YXJ0LGxlbmd0aDp0aGlzLnBhcnNlZFBvcy10aGlzLmNodW5rU3RhcnQsbm9kZVNldDpGZSx0b3BJRDowLG1heEJ1ZmZlckxlbmd0aDoyMDQ4LHJldXNlZDp0aGlzLmNodW5rUmV1c2VkfSk7dD1uZXcgcCh0LnR5cGUsdC5jaGlsZHJlbix0LnBvc2l0aW9ucyx0Lmxlbmd0aCxbW3RoaXMubGFuZy5zdGF0ZUFmdGVyLHRoaXMubGFuZy5zdHJlYW1QYXJzZXIuY29weVN0YXRlKHRoaXMuc3RhdGUpXV0pLHRoaXMuY2h1bmtzLnB1c2godCksdGhpcy5jaHVua1Bvcy5wdXNoKHRoaXMuY2h1bmtTdGFydC10aGlzLnJhbmdlc1swXS5mcm9tKSx0aGlzLmNodW5rPVtdLHRoaXMuY2h1bmtSZXVzZWQ9dm9pZCAwLHRoaXMuY2h1bmtTdGFydD10aGlzLnBhcnNlZFBvc31maW5pc2goKXtyZXR1cm4gbmV3IHAodGhpcy5sYW5nLnRvcE5vZGUsdGhpcy5jaHVua3MsdGhpcy5jaHVua1Bvcyx0aGlzLnBhcnNlZFBvcy10aGlzLnJhbmdlc1swXS5mcm9tKS5iYWxhbmNlKCl9fTtmdW5jdGlvbiAkdChuLHQsZSl7dC5zdGFydD10LnBvcztmb3IobGV0IHI9MDtyPDEwO3IrKyl7bGV0IGk9bih0LGUpO2lmKHQucG9zPnQuc3RhcnQpcmV0dXJuIGl9dGhyb3cgbmV3IEVycm9yKFwiU3RyZWFtIHBhcnNlciBmYWlsZWQgdG8gYWR2YW5jZSBzdHJlYW0uXCIpfXZhciBodD1PYmplY3QuY3JlYXRlKG51bGwpLEY9W0oubm9uZV0sRmU9bmV3IEh0KEYpLGd0PVtdLFZ0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldFtuLHRdb2ZbW1widmFyaWFibGVcIixcInZhcmlhYmxlTmFtZVwiXSxbXCJ2YXJpYWJsZS0yXCIsXCJ2YXJpYWJsZU5hbWUuc3BlY2lhbFwiXSxbXCJzdHJpbmctMlwiLFwic3RyaW5nLnNwZWNpYWxcIl0sW1wiZGVmXCIsXCJ2YXJpYWJsZU5hbWUuZGVmaW5pdGlvblwiXSxbXCJ0YWdcIixcInRhZ05hbWVcIl0sW1wiYXR0cmlidXRlXCIsXCJhdHRyaWJ1dGVOYW1lXCJdLFtcInR5cGVcIixcInR5cGVOYW1lXCJdLFtcImJ1aWx0aW5cIixcInZhcmlhYmxlTmFtZS5zdGFuZGFyZFwiXSxbXCJxdWFsaWZpZXJcIixcIm1vZGlmaWVyXCJdLFtcImVycm9yXCIsXCJpbnZhbGlkXCJdLFtcImhlYWRlclwiLFwiaGVhZGluZ1wiXSxbXCJwcm9wZXJ0eVwiLFwicHJvcGVydHlOYW1lXCJdXSlWdFtuXT16dChodCx0KTt2YXIgSD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV4dHJhPXQsdGhpcy50YWJsZT1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksVnQpfXJlc29sdmUodCl7cmV0dXJuIHQ/dGhpcy50YWJsZVt0XXx8KHRoaXMudGFibGVbdF09enQodGhpcy5leHRyYSx0KSk6MH19LFJlPW5ldyBIKGh0KTtmdW5jdGlvbiB0dChuLHQpe2d0LmluZGV4T2Yobik+LTF8fChndC5wdXNoKG4pLGNvbnNvbGUud2Fybih0KSl9ZnVuY3Rpb24genQobix0KXtsZXQgZT1udWxsO2ZvcihsZXQgcyBvZiB0LnNwbGl0KFwiLlwiKSl7bGV0IG89bltzXXx8ZltzXTtvP3R5cGVvZiBvPT1cImZ1bmN0aW9uXCI/ZT9lPW8oZSk6dHQocyxgTW9kaWZpZXIgJHtzfSB1c2VkIGF0IHN0YXJ0IG9mIHRhZ2ApOmU/dHQocyxgVGFnICR7c30gdXNlZCBhcyBtb2RpZmllcmApOmU9bzp0dChzLGBVbmtub3duIGhpZ2hsaWdodGluZyB0YWcgJHtzfWApfWlmKCFlKXJldHVybiAwO2xldCByPXQucmVwbGFjZSgvIC9nLFwiX1wiKSxpPUouZGVmaW5lKHtpZDpGLmxlbmd0aCxuYW1lOnIscHJvcHM6W2VlKHtbcl06ZX0pXX0pO3JldHVybiBGLnB1c2goaSksaS5pZH1mdW5jdGlvbiBVZShuKXtsZXQgdD1KLmRlZmluZSh7aWQ6Ri5sZW5ndGgsbmFtZTpcIkRvY3VtZW50XCIscHJvcHM6W1QuYWRkKCgpPT5uKV19KTtyZXR1cm4gRi5wdXNoKHQpLHR9ZXhwb3J0e0QgYXMgSGlnaGxpZ2h0U3R5bGUsTSBhcyBJbmRlbnRDb250ZXh0LEIgYXMgTFJMYW5ndWFnZSxjIGFzIExhbmd1YWdlLGogYXMgTGFuZ3VhZ2VEZXNjcmlwdGlvbixkdCBhcyBMYW5ndWFnZVN1cHBvcnQseCBhcyBQYXJzZUNvbnRleHQscSBhcyBTdHJlYW1MYW5ndWFnZSxHIGFzIFN0cmluZ1N0cmVhbSxFIGFzIFRyZWVJbmRlbnRDb250ZXh0LG9uIGFzIGJyYWNrZXRNYXRjaGluZyxGdCBhcyBjb2RlRm9sZGluZyxRZSBhcyBjb250aW51ZWRJbmRlbnQsc24gYXMgZGVmYXVsdEhpZ2hsaWdodFN0eWxlLHZ0IGFzIGRlZmluZUxhbmd1YWdlRmFjZXQsS2UgYXMgZGVsaW1pdGVkSW5kZW50LG5lIGFzIGVuc3VyZVN5bnRheFRyZWUsX2UgYXMgZmxhdEluZGVudCxiZSBhcyBmb2xkQWxsLGdlIGFzIGZvbGRDb2RlLF8gYXMgZm9sZEVmZmVjdCxlbiBhcyBmb2xkR3V0dGVyLFllIGFzIGZvbGRJbnNpZGUsdG4gYXMgZm9sZEtleW1hcCxjZSBhcyBmb2xkTm9kZVByb3AsdWUgYXMgZm9sZFNlcnZpY2UsQSBhcyBmb2xkU3RhdGUsViBhcyBmb2xkYWJsZSxaZSBhcyBmb2xkZWRSYW5nZXMsR2UgYXMgZm9yY2VQYXJzaW5nLCQgYXMgZ2V0SW5kZW50VW5pdCxUdCBhcyBnZXRJbmRlbnRhdGlvbixybiBhcyBoaWdobGlnaHRpbmdGb3IscmUgYXMgaW5kZW50Tm9kZVByb3AsWGUgYXMgaW5kZW50T25JbnB1dCxKZSBhcyBpbmRlbnRSYW5nZSxQdCBhcyBpbmRlbnRTZXJ2aWNlLEN0IGFzIGluZGVudFN0cmluZyxBdCBhcyBpbmRlbnRVbml0LFAgYXMgbGFuZ3VhZ2UsVCBhcyBsYW5ndWFnZURhdGFQcm9wLFUgYXMgbWF0Y2hCcmFja2V0cyxubiBhcyBzeW50YXhIaWdobGlnaHRpbmcscWUgYXMgc3ludGF4UGFyc2VyUnVubmluZyxtIGFzIHN5bnRheFRyZWUsemUgYXMgc3ludGF4VHJlZUF2YWlsYWJsZSx3ZSBhcyB1bmZvbGRBbGwsa2UgYXMgdW5mb2xkQ29kZSxSIGFzIHVuZm9sZEVmZmVjdH07XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlQDYuMy4wKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydHtBbm5vdGF0aW9uIGFzIFVlLEVkaXRvclNlbGVjdGlvbiBhcyBnLGNvZGVQb2ludEF0IGFzIHksY29kZVBvaW50U2l6ZSBhcyB3LGZyb21Db2RlUG9pbnQgYXMgU2UsRmFjZXQgYXMgRWUsY29tYmluZUNvbmZpZyBhcyBGZSxTdGF0ZUVmZmVjdCBhcyB2LFN0YXRlRmllbGQgYXMgb2UsUHJlYyBhcyBQZSxUZXh0IGFzIE5lLE1hcE1vZGUgYXMgRyxSYW5nZVZhbHVlIGFzIEhlLFJhbmdlU2V0IGFzIGZlLENoYXJDYXRlZ29yeSBhcyBKfWZyb21cIkBjb2RlbWlycm9yL3N0YXRlXCI7aW1wb3J0e2xvZ0V4Y2VwdGlvbiBhcyBaLERpcmVjdGlvbiBhcyBWZSxzaG93VG9vbHRpcCBhcyBxZSxFZGl0b3JWaWV3IGFzIGssVmlld1BsdWdpbiBhcyBLZSxnZXRUb29sdGlwIGFzIHplLERlY29yYXRpb24gYXMgVixXaWRnZXRUeXBlIGFzIFFlLGtleW1hcCBhcyBPZX1mcm9tXCJAY29kZW1pcnJvci92aWV3XCI7aW1wb3J0e3N5bnRheFRyZWUgYXMgVyxpbmRlbnRVbml0IGFzIFhlfWZyb21cIi92OTYvQGNvZGVtaXJyb3IvbGFuZ3VhZ2VANi4yLjEvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5amIyMXRZVzVrY3l4QVkyOWtaVzFwY25KdmNpOXpkR0YwWlN4QVkyOWtaVzFwY25KdmNpOTJhV1YzTEVCc1pYcGxjaTlqYjIxdGIyNC9kZW5vL2xhbmd1YWdlLmpzXCI7dmFyIEY9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMuc3RhdGU9ZSx0aGlzLnBvcz10LHRoaXMuZXhwbGljaXQ9aSx0aGlzLmFib3J0TGlzdGVuZXJzPVtdfXRva2VuQmVmb3JlKGUpe2xldCB0PVcodGhpcy5zdGF0ZSkucmVzb2x2ZUlubmVyKHRoaXMucG9zLC0xKTtmb3IoO3QmJmUuaW5kZXhPZih0Lm5hbWUpPDA7KXQ9dC5wYXJlbnQ7cmV0dXJuIHQ/e2Zyb206dC5mcm9tLHRvOnRoaXMucG9zLHRleHQ6dGhpcy5zdGF0ZS5zbGljZURvYyh0LmZyb20sdGhpcy5wb3MpLHR5cGU6dC50eXBlfTpudWxsfW1hdGNoQmVmb3JlKGUpe2xldCB0PXRoaXMuc3RhdGUuZG9jLmxpbmVBdCh0aGlzLnBvcyksaT1NYXRoLm1heCh0LmZyb20sdGhpcy5wb3MtMjUwKSxvPXQudGV4dC5zbGljZShpLXQuZnJvbSx0aGlzLnBvcy10LmZyb20pLHM9by5zZWFyY2goQWUoZSwhMSkpO3JldHVybiBzPDA/bnVsbDp7ZnJvbTppK3MsdG86dGhpcy5wb3MsdGV4dDpvLnNsaWNlKHMpfX1nZXQgYWJvcnRlZCgpe3JldHVybiB0aGlzLmFib3J0TGlzdGVuZXJzPT1udWxsfWFkZEV2ZW50TGlzdGVuZXIoZSx0KXtlPT1cImFib3J0XCImJnRoaXMuYWJvcnRMaXN0ZW5lcnMmJnRoaXMuYWJvcnRMaXN0ZW5lcnMucHVzaCh0KX19O2Z1bmN0aW9uIHVlKG4pe2xldCBlPU9iamVjdC5rZXlzKG4pLmpvaW4oXCJcIiksdD0vXFx3Ly50ZXN0KGUpO3JldHVybiB0JiYoZT1lLnJlcGxhY2UoL1xcdy9nLFwiXCIpKSxgWyR7dD9cIlxcXFx3XCI6XCJcIn0ke2UucmVwbGFjZSgvW15cXHdcXHNdL2csXCJcXFxcJCZcIil9XWB9ZnVuY3Rpb24gWWUobil7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldHtsYWJlbDpvfW9mIG4pe2Vbb1swXV09ITA7Zm9yKGxldCBzPTE7czxvLmxlbmd0aDtzKyspdFtvW3NdXT0hMH1sZXQgaT11ZShlKSt1ZSh0KStcIiokXCI7cmV0dXJuW25ldyBSZWdFeHAoXCJeXCIraSksbmV3IFJlZ0V4cChpKV19ZnVuY3Rpb24gR2Uobil7bGV0IGU9bi5tYXAobz0+dHlwZW9mIG89PVwic3RyaW5nXCI/e2xhYmVsOm99Om8pLFt0LGldPWUuZXZlcnkobz0+L15cXHcrJC8udGVzdChvLmxhYmVsKSk/Wy9cXHcqJC8sL1xcdyskL106WWUoZSk7cmV0dXJuIG89PntsZXQgcz1vLm1hdGNoQmVmb3JlKGkpO3JldHVybiBzfHxvLmV4cGxpY2l0P3tmcm9tOnM/cy5mcm9tOm8ucG9zLG9wdGlvbnM6ZSx2YWxpZEZvcjp0fTpudWxsfX1mdW5jdGlvbiBGdChuLGUpe3JldHVybiB0PT57Zm9yKGxldCBpPVcodC5zdGF0ZSkucmVzb2x2ZUlubmVyKHQucG9zLC0xKTtpO2k9aS5wYXJlbnQpaWYobi5pbmRleE9mKGkubmFtZSk+LTEpcmV0dXJuIGUodCk7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIE50KG4sZSl7cmV0dXJuIHQ9Pntmb3IobGV0IGk9Vyh0LnN0YXRlKS5yZXNvbHZlSW5uZXIodC5wb3MsLTEpO2k7aT1pLnBhcmVudClpZihuLmluZGV4T2YoaS5uYW1lKT4tMSlyZXR1cm4gbnVsbDtyZXR1cm4gZSh0KX19dmFyIE49Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMuY29tcGxldGlvbj1lLHRoaXMuc291cmNlPXQsdGhpcy5tYXRjaD1pfX07ZnVuY3Rpb24gSShuKXtyZXR1cm4gbi5zZWxlY3Rpb24ubWFpbi5oZWFkfWZ1bmN0aW9uIEFlKG4sZSl7dmFyIHQ7bGV0e3NvdXJjZTppfT1uLG89ZSYmaVswXSE9XCJeXCIscz1pW2kubGVuZ3RoLTFdIT1cIiRcIjtyZXR1cm4hbyYmIXM/bjpuZXcgUmVnRXhwKGAke28/XCJeXCI6XCJcIn0oPzoke2l9KSR7cz9cIiRcIjpcIlwifWAsKHQ9bi5mbGFncykhPT1udWxsJiZ0IT09dm9pZCAwP3Q6bi5pZ25vcmVDYXNlP1wiaVwiOlwiXCIpfXZhciBIdD1VZS5kZWZpbmUoKTtmdW5jdGlvbiBKZShuLGUsdCxpKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG4uY2hhbmdlQnlSYW5nZShvPT57aWYobz09bi5zZWxlY3Rpb24ubWFpbilyZXR1cm57Y2hhbmdlczp7ZnJvbTp0LHRvOmksaW5zZXJ0OmV9LHJhbmdlOmcuY3Vyc29yKHQrZS5sZW5ndGgpfTtsZXQgcz1pLXQ7cmV0dXJuIW8uZW1wdHl8fHMmJm4uc2xpY2VEb2Moby5mcm9tLXMsby5mcm9tKSE9bi5zbGljZURvYyh0LGkpP3tyYW5nZTpvfTp7Y2hhbmdlczp7ZnJvbTpvLmZyb20tcyx0bzpvLmZyb20saW5zZXJ0OmV9LHJhbmdlOmcuY3Vyc29yKG8uZnJvbS1zK2UubGVuZ3RoKX19KSkse3VzZXJFdmVudDpcImlucHV0LmNvbXBsZXRlXCJ9KX1mdW5jdGlvbiBUZShuLGUpe2xldCB0PWUuY29tcGxldGlvbi5hcHBseXx8ZS5jb21wbGV0aW9uLmxhYmVsLGk9ZS5zb3VyY2U7dHlwZW9mIHQ9PVwic3RyaW5nXCI/bi5kaXNwYXRjaChKZShuLnN0YXRlLHQsaS5mcm9tLGkudG8pKTp0KG4sZS5jb21wbGV0aW9uLGkuZnJvbSxpLnRvKX12YXIgaGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gWmUobil7aWYoIUFycmF5LmlzQXJyYXkobikpcmV0dXJuIG47bGV0IGU9aGUuZ2V0KG4pO3JldHVybiBlfHxoZS5zZXQobixlPUdlKG4pKSxlfXZhciBfPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMucGF0dGVybj1lLHRoaXMuY2hhcnM9W10sdGhpcy5mb2xkZWQ9W10sdGhpcy5hbnk9W10sdGhpcy5wcmVjaXNlPVtdLHRoaXMuYnlXb3JkPVtdO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7KXtsZXQgaT15KGUsdCksbz13KGkpO3RoaXMuY2hhcnMucHVzaChpKTtsZXQgcz1lLnNsaWNlKHQsdCtvKSxyPXMudG9VcHBlckNhc2UoKTt0aGlzLmZvbGRlZC5wdXNoKHkocj09cz9zLnRvTG93ZXJDYXNlKCk6ciwwKSksdCs9b310aGlzLmFzdHJhbD1lLmxlbmd0aCE9dGhpcy5jaGFycy5sZW5ndGh9bWF0Y2goZSl7aWYodGhpcy5wYXR0ZXJuLmxlbmd0aD09MClyZXR1cm5bMF07aWYoZS5sZW5ndGg8dGhpcy5wYXR0ZXJuLmxlbmd0aClyZXR1cm4gbnVsbDtsZXR7Y2hhcnM6dCxmb2xkZWQ6aSxhbnk6byxwcmVjaXNlOnMsYnlXb3JkOnJ9PXRoaXM7aWYodC5sZW5ndGg9PTEpe2xldCBoPXkoZSwwKTtyZXR1cm4gaD09dFswXT9bMCwwLHcoaCldOmg9PWlbMF0/Wy0yMDAsMCx3KGgpXTpudWxsfWxldCBsPWUuaW5kZXhPZih0aGlzLnBhdHRlcm4pO2lmKGw9PTApcmV0dXJuWzAsMCx0aGlzLnBhdHRlcm4ubGVuZ3RoXTtsZXQgYz10Lmxlbmd0aCxhPTA7aWYobDwwKXtmb3IobGV0IGg9MCxRPU1hdGgubWluKGUubGVuZ3RoLDIwMCk7aDxRJiZhPGM7KXtsZXQgVD15KGUsaCk7KFQ9PXRbYV18fFQ9PWlbYV0pJiYob1thKytdPWgpLGgrPXcoVCl9aWYoYTxjKXJldHVybiBudWxsfWxldCBmPTAsdT0wLEM9ITEsYj0wLEE9LTEsSz0tMSxqZT0vW2Etel0vLnRlc3QoZSksej0hMDtmb3IobGV0IGg9MCxRPU1hdGgubWluKGUubGVuZ3RoLDIwMCksVD0wO2g8USYmdTxjOyl7bGV0IG09eShlLGgpO2w8MCYmKGY8YyYmbT09dFtmXSYmKHNbZisrXT1oKSxiPGMmJihtPT10W2JdfHxtPT1pW2JdPyhiPT0wJiYoQT1oKSxLPWgrMSxiKyspOmI9MCkpO2xldCBqLFg9bTwyNTU/bT49NDgmJm08PTU3fHxtPj05NyYmbTw9MTIyPzI6bT49NjUmJm08PTkwPzE6MDooaj1TZShtKSkhPWoudG9Mb3dlckNhc2UoKT8xOmohPWoudG9VcHBlckNhc2UoKT8yOjA7KCFofHxYPT0xJiZqZXx8VD09MCYmWCE9MCkmJih0W3VdPT1tfHxpW3VdPT1tJiYoQz0hMCk/clt1KytdPWg6ci5sZW5ndGgmJih6PSExKSksVD1YLGgrPXcobSl9cmV0dXJuIHU9PWMmJnJbMF09PTAmJno/dGhpcy5yZXN1bHQoLTEwMCsoQz8tMjAwOjApLHIsZSk6Yj09YyYmQT09MD9bLTIwMC1lLmxlbmd0aCwwLEtdOmw+LTE/Wy03MDAtZS5sZW5ndGgsbCxsK3RoaXMucGF0dGVybi5sZW5ndGhdOmI9PWM/Wy0yMDArLTcwMC1lLmxlbmd0aCxBLEtdOnU9PWM/dGhpcy5yZXN1bHQoLTEwMCsoQz8tMjAwOjApKy03MDArKHo/MDotMTEwMCkscixlKTp0Lmxlbmd0aD09Mj9udWxsOnRoaXMucmVzdWx0KChvWzBdPy03MDA6MCkrLTIwMCstMTEwMCxvLGUpfXJlc3VsdChlLHQsaSl7bGV0IG89W2UtaS5sZW5ndGhdLHM9MTtmb3IobGV0IHIgb2YgdCl7bGV0IGw9cisodGhpcy5hc3RyYWw/dyh5KGkscikpOjEpO3M+MSYmb1tzLTFdPT1yP29bcy0xXT1sOihvW3MrK109cixvW3MrK109bCl9cmV0dXJuIG99fSx4PUVlLmRlZmluZSh7Y29tYmluZShuKXtyZXR1cm4gRmUobix7YWN0aXZhdGVPblR5cGluZzohMCxzZWxlY3RPbk9wZW46ITAsb3ZlcnJpZGU6bnVsbCxjbG9zZU9uQmx1cjohMCxtYXhSZW5kZXJlZE9wdGlvbnM6MTAwLGRlZmF1bHRLZXltYXA6ITAsb3B0aW9uQ2xhc3M6KCk9PlwiXCIsYWJvdmVDdXJzb3I6ITEsaWNvbnM6ITAsYWRkVG9PcHRpb25zOltdLGNvbXBhcmVDb21wbGV0aW9uczooZSx0KT0+ZS5sYWJlbC5sb2NhbGVDb21wYXJlKHQubGFiZWwpLGludGVyYWN0aW9uRGVsYXk6NzV9LHtkZWZhdWx0S2V5bWFwOihlLHQpPT5lJiZ0LGNsb3NlT25CbHVyOihlLHQpPT5lJiZ0LGljb25zOihlLHQpPT5lJiZ0LG9wdGlvbkNsYXNzOihlLHQpPT5pPT5fZShlKGkpLHQoaSkpLGFkZFRvT3B0aW9uczooZSx0KT0+ZS5jb25jYXQodCl9KX19KTtmdW5jdGlvbiBfZShuLGUpe3JldHVybiBuP2U/bitcIiBcIitlOm46ZX1mdW5jdGlvbiBldChuKXtsZXQgZT1uLmFkZFRvT3B0aW9ucy5zbGljZSgpO3JldHVybiBuLmljb25zJiZlLnB1c2goe3JlbmRlcih0KXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBpLmNsYXNzTGlzdC5hZGQoXCJjbS1jb21wbGV0aW9uSWNvblwiKSx0LnR5cGUmJmkuY2xhc3NMaXN0LmFkZCguLi50LnR5cGUuc3BsaXQoL1xccysvZykubWFwKG89PlwiY20tY29tcGxldGlvbkljb24tXCIrbykpLGkuc2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIiksaX0scG9zaXRpb246MjB9KSxlLnB1c2goe3JlbmRlcih0LGksbyl7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7cy5jbGFzc05hbWU9XCJjbS1jb21wbGV0aW9uTGFiZWxcIjtsZXR7bGFiZWw6cn09dCxsPTA7Zm9yKGxldCBjPTE7YzxvLmxlbmd0aDspe2xldCBhPW9bYysrXSxmPW9bYysrXTthPmwmJnMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoci5zbGljZShsLGEpKSk7bGV0IHU9cy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSk7dS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyLnNsaWNlKGEsZikpKSx1LmNsYXNzTmFtZT1cImNtLWNvbXBsZXRpb25NYXRjaGVkVGV4dFwiLGw9Zn1yZXR1cm4gbDxyLmxlbmd0aCYmcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyLnNsaWNlKGwpKSksc30scG9zaXRpb246NTB9LHtyZW5kZXIodCl7aWYoIXQuZGV0YWlsKXJldHVybiBudWxsO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3JldHVybiBpLmNsYXNzTmFtZT1cImNtLWNvbXBsZXRpb25EZXRhaWxcIixpLnRleHRDb250ZW50PXQuZGV0YWlsLGl9LHBvc2l0aW9uOjgwfSksZS5zb3J0KCh0LGkpPT50LnBvc2l0aW9uLWkucG9zaXRpb24pLm1hcCh0PT50LnJlbmRlcil9ZnVuY3Rpb24gcGUobixlLHQpe2lmKG48PXQpcmV0dXJue2Zyb206MCx0bzpufTtpZihlPDAmJihlPTApLGU8PW4+PjEpe2xldCBvPU1hdGguZmxvb3IoZS90KTtyZXR1cm57ZnJvbTpvKnQsdG86KG8rMSkqdH19bGV0IGk9TWF0aC5mbG9vcigobi1lKS90KTtyZXR1cm57ZnJvbTpuLShpKzEpKnQsdG86bi1pKnR9fXZhciBlZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMudmlldz1lLHRoaXMuc3RhdGVGaWVsZD10LHRoaXMuaW5mbz1udWxsLHRoaXMucGxhY2VJbmZvPXtyZWFkOigpPT50aGlzLm1lYXN1cmVJbmZvKCksd3JpdGU6bD0+dGhpcy5wb3NpdGlvbkluZm8obCksa2V5OnRoaXN9O2xldCBpPWUuc3RhdGUuZmllbGQodCkse29wdGlvbnM6byxzZWxlY3RlZDpzfT1pLm9wZW4scj1lLnN0YXRlLmZhY2V0KHgpO3RoaXMub3B0aW9uQ29udGVudD1ldChyKSx0aGlzLm9wdGlvbkNsYXNzPXIub3B0aW9uQ2xhc3MsdGhpcy5yYW5nZT1wZShvLmxlbmd0aCxzLHIubWF4UmVuZGVyZWRPcHRpb25zKSx0aGlzLmRvbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMuZG9tLmNsYXNzTmFtZT1cImNtLXRvb2x0aXAtYXV0b2NvbXBsZXRlXCIsdGhpcy5kb20uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGw9Pntmb3IobGV0IGM9bC50YXJnZXQsYTtjJiZjIT10aGlzLmRvbTtjPWMucGFyZW50Tm9kZSlpZihjLm5vZGVOYW1lPT1cIkxJXCImJihhPS8tKFxcZCspJC8uZXhlYyhjLmlkKSkmJithWzFdPG8ubGVuZ3RoKXtUZShlLG9bK2FbMV1dKSxsLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufX0pLHRoaXMubGlzdD10aGlzLmRvbS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUxpc3RCb3gobyxpLmlkLHRoaXMucmFuZ2UpKSx0aGlzLmxpc3QuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCgpPT57dGhpcy5pbmZvJiZ0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pfSl9bW91bnQoKXt0aGlzLnVwZGF0ZVNlbCgpfXVwZGF0ZShlKXtlLnN0YXRlLmZpZWxkKHRoaXMuc3RhdGVGaWVsZCkhPWUuc3RhcnRTdGF0ZS5maWVsZCh0aGlzLnN0YXRlRmllbGQpJiZ0aGlzLnVwZGF0ZVNlbCgpfXBvc2l0aW9uZWQoKXt0aGlzLmluZm8mJnRoaXMudmlldy5yZXF1ZXN0TWVhc3VyZSh0aGlzLnBsYWNlSW5mbyl9dXBkYXRlU2VsKCl7bGV0IGU9dGhpcy52aWV3LnN0YXRlLmZpZWxkKHRoaXMuc3RhdGVGaWVsZCksdD1lLm9wZW47aWYoKHQuc2VsZWN0ZWQ+LTEmJnQuc2VsZWN0ZWQ8dGhpcy5yYW5nZS5mcm9tfHx0LnNlbGVjdGVkPj10aGlzLnJhbmdlLnRvKSYmKHRoaXMucmFuZ2U9cGUodC5vcHRpb25zLmxlbmd0aCx0LnNlbGVjdGVkLHRoaXMudmlldy5zdGF0ZS5mYWNldCh4KS5tYXhSZW5kZXJlZE9wdGlvbnMpLHRoaXMubGlzdC5yZW1vdmUoKSx0aGlzLmxpc3Q9dGhpcy5kb20uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVMaXN0Qm94KHQub3B0aW9ucyxlLmlkLHRoaXMucmFuZ2UpKSx0aGlzLmxpc3QuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCgpPT57dGhpcy5pbmZvJiZ0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pfSkpLHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24odC5zZWxlY3RlZCkpe3RoaXMuaW5mbyYmKHRoaXMuaW5mby5yZW1vdmUoKSx0aGlzLmluZm89bnVsbCk7bGV0e2NvbXBsZXRpb246aX09dC5vcHRpb25zW3Quc2VsZWN0ZWRdLHtpbmZvOm99PWk7aWYoIW8pcmV0dXJuO2xldCBzPXR5cGVvZiBvPT1cInN0cmluZ1wiP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKG8pOm8oaSk7aWYoIXMpcmV0dXJuO1widGhlblwiaW4gcz9zLnRoZW4ocj0+e3ImJnRoaXMudmlldy5zdGF0ZS5maWVsZCh0aGlzLnN0YXRlRmllbGQsITEpPT1lJiZ0aGlzLmFkZEluZm9QYW5lKHIpfSkuY2F0Y2gocj0+Wih0aGlzLnZpZXcuc3RhdGUscixcImNvbXBsZXRpb24gaW5mb1wiKSk6dGhpcy5hZGRJbmZvUGFuZShzKX19YWRkSW5mb1BhbmUoZSl7bGV0IHQ9dGhpcy5pbmZvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dC5jbGFzc05hbWU9XCJjbS10b29sdGlwIGNtLWNvbXBsZXRpb25JbmZvXCIsdC5hcHBlbmRDaGlsZChlKSx0aGlzLmRvbS5hcHBlbmRDaGlsZCh0KSx0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pfXVwZGF0ZVNlbGVjdGVkT3B0aW9uKGUpe2xldCB0PW51bGw7Zm9yKGxldCBpPXRoaXMubGlzdC5maXJzdENoaWxkLG89dGhpcy5yYW5nZS5mcm9tO2k7aT1pLm5leHRTaWJsaW5nLG8rKylvPT1lP2kuaGFzQXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiKXx8KGkuc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLFwidHJ1ZVwiKSx0PWkpOmkuaGFzQXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiKSYmaS5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIpO3JldHVybiB0JiZudCh0aGlzLmxpc3QsdCksdH1tZWFzdXJlSW5mbygpe2xldCBlPXRoaXMuZG9tLnF1ZXJ5U2VsZWN0b3IoXCJbYXJpYS1zZWxlY3RlZF1cIik7aWYoIWV8fCF0aGlzLmluZm8pcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5kb20ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93LGk9dGhpcy5kb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz10aGlzLmluZm8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHMudG9wPk1hdGgubWluKHQuaW5uZXJIZWlnaHQsaS5ib3R0b20pLTEwfHxzLmJvdHRvbTxNYXRoLm1heCgwLGkudG9wKSsxMClyZXR1cm4gbnVsbDtsZXQgcj10aGlzLnZpZXcudGV4dERpcmVjdGlvbj09VmUuUlRMLGw9cixjPSExLGEsZj1cIlwiLHU9XCJcIixDPWkubGVmdCxiPXQuaW5uZXJXaWR0aC1pLnJpZ2h0O2lmKGwmJkM8TWF0aC5taW4oby53aWR0aCxiKT9sPSExOiFsJiZiPE1hdGgubWluKG8ud2lkdGgsQykmJihsPSEwKSxvLndpZHRoPD0obD9DOmIpKWY9TWF0aC5tYXgoMCxNYXRoLm1pbihzLnRvcCx0LmlubmVySGVpZ2h0LW8uaGVpZ2h0KSktaS50b3ArXCJweFwiLGE9TWF0aC5taW4oNDAwLGw/QzpiKStcInB4XCI7ZWxzZXtjPSEwLGE9TWF0aC5taW4oNDAwLChyP2kucmlnaHQ6dC5pbm5lcldpZHRoLWkubGVmdCktMzApK1wicHhcIjtsZXQgQT10LmlubmVySGVpZ2h0LWkuYm90dG9tO0E+PW8uaGVpZ2h0fHxBPmkudG9wP2Y9cy5ib3R0b20taS50b3ArXCJweFwiOnU9aS5ib3R0b20tcy50b3ArXCJweFwifXJldHVybnt0b3A6Zixib3R0b206dSxtYXhXaWR0aDphLGNsYXNzOmM/cj9cImxlZnQtbmFycm93XCI6XCJyaWdodC1uYXJyb3dcIjpsP1wibGVmdFwiOlwicmlnaHRcIn19cG9zaXRpb25JbmZvKGUpe3RoaXMuaW5mbyYmKGU/KHRoaXMuaW5mby5zdHlsZS50b3A9ZS50b3AsdGhpcy5pbmZvLnN0eWxlLmJvdHRvbT1lLmJvdHRvbSx0aGlzLmluZm8uc3R5bGUubWF4V2lkdGg9ZS5tYXhXaWR0aCx0aGlzLmluZm8uY2xhc3NOYW1lPVwiY20tdG9vbHRpcCBjbS1jb21wbGV0aW9uSW5mbyBjbS1jb21wbGV0aW9uSW5mby1cIitlLmNsYXNzKTp0aGlzLmluZm8uc3R5bGUudG9wPVwiLTFlNnB4XCIpfWNyZWF0ZUxpc3RCb3goZSx0LGkpe2xldCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiKTtvLmlkPXQsby5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJsaXN0Ym94XCIpLG8uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLFwidHJ1ZVwiKSxvLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIix0aGlzLnZpZXcuc3RhdGUucGhyYXNlKFwiQ29tcGxldGlvbnNcIikpO2ZvcihsZXQgcz1pLmZyb207czxpLnRvO3MrKyl7bGV0e2NvbXBsZXRpb246cixtYXRjaDpsfT1lW3NdLGM9by5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIikpO2MuaWQ9dCtcIi1cIitzLGMuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwib3B0aW9uXCIpO2xldCBhPXRoaXMub3B0aW9uQ2xhc3Mocik7YSYmKGMuY2xhc3NOYW1lPWEpO2ZvcihsZXQgZiBvZiB0aGlzLm9wdGlvbkNvbnRlbnQpe2xldCB1PWYocix0aGlzLnZpZXcuc3RhdGUsbCk7dSYmYy5hcHBlbmRDaGlsZCh1KX19cmV0dXJuIGkuZnJvbSYmby5jbGFzc0xpc3QuYWRkKFwiY20tY29tcGxldGlvbkxpc3RJbmNvbXBsZXRlVG9wXCIpLGkudG88ZS5sZW5ndGgmJm8uY2xhc3NMaXN0LmFkZChcImNtLWNvbXBsZXRpb25MaXN0SW5jb21wbGV0ZUJvdHRvbVwiKSxvfX07ZnVuY3Rpb24gdHQobil7cmV0dXJuIGU9Pm5ldyBlZShlLG4pfWZ1bmN0aW9uIG50KG4sZSl7bGV0IHQ9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aS50b3A8dC50b3A/bi5zY3JvbGxUb3AtPXQudG9wLWkudG9wOmkuYm90dG9tPnQuYm90dG9tJiYobi5zY3JvbGxUb3ArPWkuYm90dG9tLXQuYm90dG9tKX1mdW5jdGlvbiBkZShuKXtyZXR1cm4obi5ib29zdHx8MCkqMTAwKyhuLmFwcGx5PzEwOjApKyhuLmluZm8/NTowKSsobi50eXBlPzE6MCl9ZnVuY3Rpb24gaXQobixlKXtsZXQgdD1bXSxpPTA7Zm9yKGxldCBsIG9mIG4paWYobC5oYXNSZXN1bHQoKSlpZihsLnJlc3VsdC5maWx0ZXI9PT0hMSl7bGV0IGM9bC5yZXN1bHQuZ2V0TWF0Y2g7Zm9yKGxldCBhIG9mIGwucmVzdWx0Lm9wdGlvbnMpe2xldCBmPVsxZTktaSsrXTtpZihjKWZvcihsZXQgdSBvZiBjKGEpKWYucHVzaCh1KTt0LnB1c2gobmV3IE4oYSxsLGYpKX19ZWxzZXtsZXQgYz1uZXcgXyhlLnNsaWNlRG9jKGwuZnJvbSxsLnRvKSksYTtmb3IobGV0IGYgb2YgbC5yZXN1bHQub3B0aW9ucykoYT1jLm1hdGNoKGYubGFiZWwpKSYmKGYuYm9vc3QhPW51bGwmJihhWzBdKz1mLmJvb3N0KSx0LnB1c2gobmV3IE4oZixsLGEpKSl9bGV0IG89W10scz1udWxsLHI9ZS5mYWNldCh4KS5jb21wYXJlQ29tcGxldGlvbnM7Zm9yKGxldCBsIG9mIHQuc29ydCgoYyxhKT0+YS5tYXRjaFswXS1jLm1hdGNoWzBdfHxyKGMuY29tcGxldGlvbixhLmNvbXBsZXRpb24pKSkhc3x8cy5sYWJlbCE9bC5jb21wbGV0aW9uLmxhYmVsfHxzLmRldGFpbCE9bC5jb21wbGV0aW9uLmRldGFpbHx8cy50eXBlIT1udWxsJiZsLmNvbXBsZXRpb24udHlwZSE9bnVsbCYmcy50eXBlIT1sLmNvbXBsZXRpb24udHlwZXx8cy5hcHBseSE9bC5jb21wbGV0aW9uLmFwcGx5P28ucHVzaChsKTpkZShsLmNvbXBsZXRpb24pPmRlKHMpJiYob1tvLmxlbmd0aC0xXT1sKSxzPWwuY29tcGxldGlvbjtyZXR1cm4gb312YXIgUD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsaSxvLHMpe3RoaXMub3B0aW9ucz1lLHRoaXMuYXR0cnM9dCx0aGlzLnRvb2x0aXA9aSx0aGlzLnRpbWVzdGFtcD1vLHRoaXMuc2VsZWN0ZWQ9c31zZXRTZWxlY3RlZChlLHQpe3JldHVybiBlPT10aGlzLnNlbGVjdGVkfHxlPj10aGlzLm9wdGlvbnMubGVuZ3RoP3RoaXM6bmV3IFAodGhpcy5vcHRpb25zLG1lKHQsZSksdGhpcy50b29sdGlwLHRoaXMudGltZXN0YW1wLGUpfXN0YXRpYyBidWlsZChlLHQsaSxvLHMpe2xldCByPWl0KGUsdCk7aWYoIXIubGVuZ3RoKXJldHVybiBudWxsO2xldCBsPXQuZmFjZXQoeCkuc2VsZWN0T25PcGVuPzA6LTE7aWYobyYmby5zZWxlY3RlZCE9bCYmby5zZWxlY3RlZCE9LTEpe2xldCBjPW8ub3B0aW9uc1tvLnNlbGVjdGVkXS5jb21wbGV0aW9uO2ZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKWlmKHJbYV0uY29tcGxldGlvbj09Yyl7bD1hO2JyZWFrfX1yZXR1cm4gbmV3IFAocixtZShpLGwpLHtwb3M6ZS5yZWR1Y2UoKGMsYSk9PmEuaGFzUmVzdWx0KCk/TWF0aC5taW4oYyxhLmZyb20pOmMsMWU4KSxjcmVhdGU6dHQoZCksYWJvdmU6cy5hYm92ZUN1cnNvcn0sbz9vLnRpbWVzdGFtcDpEYXRlLm5vdygpLGwpfW1hcChlKXtyZXR1cm4gbmV3IFAodGhpcy5vcHRpb25zLHRoaXMuYXR0cnMsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMudG9vbHRpcCkse3BvczplLm1hcFBvcyh0aGlzLnRvb2x0aXAucG9zKX0pLHRoaXMudGltZXN0YW1wLHRoaXMuc2VsZWN0ZWQpfX0sTT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsaSl7dGhpcy5hY3RpdmU9ZSx0aGlzLmlkPXQsdGhpcy5vcGVuPWl9c3RhdGljIHN0YXJ0KCl7cmV0dXJuIG5ldyBNKGx0LFwiY20tYWMtXCIrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjJlNikudG9TdHJpbmcoMzYpLG51bGwpfXVwZGF0ZShlKXtsZXR7c3RhdGU6dH09ZSxpPXQuZmFjZXQoeCkscz0oaS5vdmVycmlkZXx8dC5sYW5ndWFnZURhdGFBdChcImF1dG9jb21wbGV0ZVwiLEkodCkpLm1hcChaZSkpLm1hcChsPT4odGhpcy5hY3RpdmUuZmluZChhPT5hLnNvdXJjZT09bCl8fG5ldyBwKGwsdGhpcy5hY3RpdmUuc29tZShhPT5hLnN0YXRlIT0wKT8xOjApKS51cGRhdGUoZSxpKSk7cy5sZW5ndGg9PXRoaXMuYWN0aXZlLmxlbmd0aCYmcy5ldmVyeSgobCxjKT0+bD09dGhpcy5hY3RpdmVbY10pJiYocz10aGlzLmFjdGl2ZSk7bGV0IHI9ZS5zZWxlY3Rpb258fHMuc29tZShsPT5sLmhhc1Jlc3VsdCgpJiZlLmNoYW5nZXMudG91Y2hlc1JhbmdlKGwuZnJvbSxsLnRvKSl8fCFvdChzLHRoaXMuYWN0aXZlKT9QLmJ1aWxkKHMsdCx0aGlzLmlkLHRoaXMub3BlbixpKTp0aGlzLm9wZW4mJmUuZG9jQ2hhbmdlZD90aGlzLm9wZW4ubWFwKGUuY2hhbmdlcyk6dGhpcy5vcGVuOyFyJiZzLmV2ZXJ5KGw9Pmwuc3RhdGUhPTEpJiZzLnNvbWUobD0+bC5oYXNSZXN1bHQoKSkmJihzPXMubWFwKGw9PmwuaGFzUmVzdWx0KCk/bmV3IHAobC5zb3VyY2UsMCk6bCkpO2ZvcihsZXQgbCBvZiBlLmVmZmVjdHMpbC5pcyhsZSkmJihyPXImJnIuc2V0U2VsZWN0ZWQobC52YWx1ZSx0aGlzLmlkKSk7cmV0dXJuIHM9PXRoaXMuYWN0aXZlJiZyPT10aGlzLm9wZW4/dGhpczpuZXcgTShzLHRoaXMuaWQscil9Z2V0IHRvb2x0aXAoKXtyZXR1cm4gdGhpcy5vcGVuP3RoaXMub3Blbi50b29sdGlwOm51bGx9Z2V0IGF0dHJzKCl7cmV0dXJuIHRoaXMub3Blbj90aGlzLm9wZW4uYXR0cnM6c3R9fTtmdW5jdGlvbiBvdChuLGUpe2lmKG49PWUpcmV0dXJuITA7Zm9yKGxldCB0PTAsaT0wOzspe2Zvcig7dDxuLmxlbmd0aCYmIW5bdF0uaGFzUmVzdWx0Oyl0Kys7Zm9yKDtpPGUubGVuZ3RoJiYhZVtpXS5oYXNSZXN1bHQ7KWkrKztsZXQgbz10PT1uLmxlbmd0aCxzPWk9PWUubGVuZ3RoO2lmKG98fHMpcmV0dXJuIG89PXM7aWYoblt0KytdLnJlc3VsdCE9ZVtpKytdLnJlc3VsdClyZXR1cm4hMX19dmFyIHN0PXtcImFyaWEtYXV0b2NvbXBsZXRlXCI6XCJsaXN0XCJ9O2Z1bmN0aW9uIG1lKG4sZSl7bGV0IHQ9e1wiYXJpYS1hdXRvY29tcGxldGVcIjpcImxpc3RcIixcImFyaWEtaGFzcG9wdXBcIjpcImxpc3Rib3hcIixcImFyaWEtY29udHJvbHNcIjpufTtyZXR1cm4gZT4tMSYmKHRbXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIl09bitcIi1cIitlKSx0fXZhciBsdD1bXTtmdW5jdGlvbiB0ZShuKXtyZXR1cm4gbi5pc1VzZXJFdmVudChcImlucHV0LnR5cGVcIik/XCJpbnB1dFwiOm4uaXNVc2VyRXZlbnQoXCJkZWxldGUuYmFja3dhcmRcIik/XCJkZWxldGVcIjpudWxsfXZhciBwPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxpPS0xKXt0aGlzLnNvdXJjZT1lLHRoaXMuc3RhdGU9dCx0aGlzLmV4cGxpY2l0UG9zPWl9aGFzUmVzdWx0KCl7cmV0dXJuITF9dXBkYXRlKGUsdCl7bGV0IGk9dGUoZSksbz10aGlzO2k/bz1vLmhhbmRsZVVzZXJFdmVudChlLGksdCk6ZS5kb2NDaGFuZ2VkP289by5oYW5kbGVDaGFuZ2UoZSk6ZS5zZWxlY3Rpb24mJm8uc3RhdGUhPTAmJihvPW5ldyBwKG8uc291cmNlLDApKTtmb3IobGV0IHMgb2YgZS5lZmZlY3RzKWlmKHMuaXMoc2UpKW89bmV3IHAoby5zb3VyY2UsMSxzLnZhbHVlP0koZS5zdGF0ZSk6LTEpO2Vsc2UgaWYocy5pcyhIKSlvPW5ldyBwKG8uc291cmNlLDApO2Vsc2UgaWYocy5pcyhNZSkpZm9yKGxldCByIG9mIHMudmFsdWUpci5zb3VyY2U9PW8uc291cmNlJiYobz1yKTtyZXR1cm4gb31oYW5kbGVVc2VyRXZlbnQoZSx0LGkpe3JldHVybiB0PT1cImRlbGV0ZVwifHwhaS5hY3RpdmF0ZU9uVHlwaW5nP3RoaXMubWFwKGUuY2hhbmdlcyk6bmV3IHAodGhpcy5zb3VyY2UsMSl9aGFuZGxlQ2hhbmdlKGUpe3JldHVybiBlLmNoYW5nZXMudG91Y2hlc1JhbmdlKEkoZS5zdGFydFN0YXRlKSk/bmV3IHAodGhpcy5zb3VyY2UsMCk6dGhpcy5tYXAoZS5jaGFuZ2VzKX1tYXAoZSl7cmV0dXJuIGUuZW1wdHl8fHRoaXMuZXhwbGljaXRQb3M8MD90aGlzOm5ldyBwKHRoaXMuc291cmNlLHRoaXMuc3RhdGUsZS5tYXBQb3ModGhpcy5leHBsaWNpdFBvcykpfX0sTz1jbGFzcyBleHRlbmRzIHB7Y29uc3RydWN0b3IoZSx0LGksbyxzKXtzdXBlcihlLDIsdCksdGhpcy5yZXN1bHQ9aSx0aGlzLmZyb209byx0aGlzLnRvPXN9aGFzUmVzdWx0KCl7cmV0dXJuITB9aGFuZGxlVXNlckV2ZW50KGUsdCxpKXt2YXIgbztsZXQgcz1lLmNoYW5nZXMubWFwUG9zKHRoaXMuZnJvbSkscj1lLmNoYW5nZXMubWFwUG9zKHRoaXMudG8sMSksbD1JKGUuc3RhdGUpO2lmKCh0aGlzLmV4cGxpY2l0UG9zPDA/bDw9czpsPHRoaXMuZnJvbSl8fGw+cnx8dD09XCJkZWxldGVcIiYmSShlLnN0YXJ0U3RhdGUpPT10aGlzLmZyb20pcmV0dXJuIG5ldyBwKHRoaXMuc291cmNlLHQ9PVwiaW5wdXRcIiYmaS5hY3RpdmF0ZU9uVHlwaW5nPzE6MCk7bGV0IGM9dGhpcy5leHBsaWNpdFBvczwwPy0xOmUuY2hhbmdlcy5tYXBQb3ModGhpcy5leHBsaWNpdFBvcyksYTtyZXR1cm4gcnQodGhpcy5yZXN1bHQudmFsaWRGb3IsZS5zdGF0ZSxzLHIpP25ldyBPKHRoaXMuc291cmNlLGMsdGhpcy5yZXN1bHQscyxyKTp0aGlzLnJlc3VsdC51cGRhdGUmJihhPXRoaXMucmVzdWx0LnVwZGF0ZSh0aGlzLnJlc3VsdCxzLHIsbmV3IEYoZS5zdGF0ZSxsLGM+PTApKSk/bmV3IE8odGhpcy5zb3VyY2UsYyxhLGEuZnJvbSwobz1hLnRvKSE9PW51bGwmJm8hPT12b2lkIDA/bzpJKGUuc3RhdGUpKTpuZXcgcCh0aGlzLnNvdXJjZSwxLGMpfWhhbmRsZUNoYW5nZShlKXtyZXR1cm4gZS5jaGFuZ2VzLnRvdWNoZXNSYW5nZSh0aGlzLmZyb20sdGhpcy50byk/bmV3IHAodGhpcy5zb3VyY2UsMCk6dGhpcy5tYXAoZS5jaGFuZ2VzKX1tYXAoZSl7cmV0dXJuIGUuZW1wdHk/dGhpczpuZXcgTyh0aGlzLnNvdXJjZSx0aGlzLmV4cGxpY2l0UG9zPDA/LTE6ZS5tYXBQb3ModGhpcy5leHBsaWNpdFBvcyksdGhpcy5yZXN1bHQsZS5tYXBQb3ModGhpcy5mcm9tKSxlLm1hcFBvcyh0aGlzLnRvLDEpKX19O2Z1bmN0aW9uIHJ0KG4sZSx0LGkpe2lmKCFuKXJldHVybiExO2xldCBvPWUuc2xpY2VEb2ModCxpKTtyZXR1cm4gdHlwZW9mIG49PVwiZnVuY3Rpb25cIj9uKG8sdCxpLGUpOkFlKG4sITApLnRlc3Qobyl9dmFyIHNlPXYuZGVmaW5lKCksSD12LmRlZmluZSgpLE1lPXYuZGVmaW5lKHttYXAobixlKXtyZXR1cm4gbi5tYXAodD0+dC5tYXAoZSkpfX0pLGxlPXYuZGVmaW5lKCksZD1vZS5kZWZpbmUoe2NyZWF0ZSgpe3JldHVybiBNLnN0YXJ0KCl9LHVwZGF0ZShuLGUpe3JldHVybiBuLnVwZGF0ZShlKX0scHJvdmlkZTpuPT5bcWUuZnJvbShuLGU9PmUudG9vbHRpcCksay5jb250ZW50QXR0cmlidXRlcy5mcm9tKG4sZT0+ZS5hdHRycyldfSk7ZnVuY3Rpb24gVShuLGU9XCJvcHRpb25cIil7cmV0dXJuIHQ9PntsZXQgaT10LnN0YXRlLmZpZWxkKGQsITEpO2lmKCFpfHwhaS5vcGVufHxEYXRlLm5vdygpLWkub3Blbi50aW1lc3RhbXA8dC5zdGF0ZS5mYWNldCh4KS5pbnRlcmFjdGlvbkRlbGF5KXJldHVybiExO2xldCBvPTEscztlPT1cInBhZ2VcIiYmKHM9emUodCxpLm9wZW4udG9vbHRpcCkpJiYobz1NYXRoLm1heCgyLE1hdGguZmxvb3Iocy5kb20ub2Zmc2V0SGVpZ2h0L3MuZG9tLnF1ZXJ5U2VsZWN0b3IoXCJsaVwiKS5vZmZzZXRIZWlnaHQpLTEpKTtsZXR7bGVuZ3RoOnJ9PWkub3Blbi5vcHRpb25zLGw9aS5vcGVuLnNlbGVjdGVkPi0xP2kub3Blbi5zZWxlY3RlZCtvKihuPzE6LTEpOm4/MDpyLTE7cmV0dXJuIGw8MD9sPWU9PVwicGFnZVwiPzA6ci0xOmw+PXImJihsPWU9PVwicGFnZVwiP3ItMTowKSx0LmRpc3BhdGNoKHtlZmZlY3RzOmxlLm9mKGwpfSksITB9fXZhciBjdD1uPT57bGV0IGU9bi5zdGF0ZS5maWVsZChkLCExKTtyZXR1cm4gbi5zdGF0ZS5yZWFkT25seXx8IWV8fCFlLm9wZW58fGUub3Blbi5zZWxlY3RlZDwwfHxEYXRlLm5vdygpLWUub3Blbi50aW1lc3RhbXA8bi5zdGF0ZS5mYWNldCh4KS5pbnRlcmFjdGlvbkRlbGF5PyExOihUZShuLGUub3Blbi5vcHRpb25zW2Uub3Blbi5zZWxlY3RlZF0pLCEwKX0sYXQ9bj0+bi5zdGF0ZS5maWVsZChkLCExKT8obi5kaXNwYXRjaCh7ZWZmZWN0czpzZS5vZighMCl9KSwhMCk6ITEsZnQ9bj0+e2xldCBlPW4uc3RhdGUuZmllbGQoZCwhMSk7cmV0dXJuIWV8fCFlLmFjdGl2ZS5zb21lKHQ9PnQuc3RhdGUhPTApPyExOihuLmRpc3BhdGNoKHtlZmZlY3RzOkgub2YobnVsbCl9KSwhMCl9LG5lPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5hY3RpdmU9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnRpbWU9RGF0ZS5ub3coKSx0aGlzLnVwZGF0ZXM9W10sdGhpcy5kb25lPXZvaWQgMH19LGdlPTUwLHV0PTUwLGh0PTFlMyxwdD1LZS5mcm9tQ2xhc3MoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy52aWV3PW4sdGhpcy5kZWJvdW5jZVVwZGF0ZT0tMSx0aGlzLnJ1bm5pbmc9W10sdGhpcy5kZWJvdW5jZUFjY2VwdD0tMSx0aGlzLmNvbXBvc2luZz0wO2ZvcihsZXQgZSBvZiBuLnN0YXRlLmZpZWxkKGQpLmFjdGl2ZSllLnN0YXRlPT0xJiZ0aGlzLnN0YXJ0UXVlcnkoZSl9dXBkYXRlKG4pe2xldCBlPW4uc3RhdGUuZmllbGQoZCk7aWYoIW4uc2VsZWN0aW9uU2V0JiYhbi5kb2NDaGFuZ2VkJiZuLnN0YXJ0U3RhdGUuZmllbGQoZCk9PWUpcmV0dXJuO2xldCB0PW4udHJhbnNhY3Rpb25zLnNvbWUoaT0+KGkuc2VsZWN0aW9ufHxpLmRvY0NoYW5nZWQpJiYhdGUoaSkpO2ZvcihsZXQgaT0wO2k8dGhpcy5ydW5uaW5nLmxlbmd0aDtpKyspe2xldCBvPXRoaXMucnVubmluZ1tpXTtpZih0fHxvLnVwZGF0ZXMubGVuZ3RoK24udHJhbnNhY3Rpb25zLmxlbmd0aD51dCYmRGF0ZS5ub3coKS1vLnRpbWU+aHQpe2ZvcihsZXQgcyBvZiBvLmNvbnRleHQuYWJvcnRMaXN0ZW5lcnMpdHJ5e3MoKX1jYXRjaChyKXtaKHRoaXMudmlldy5zdGF0ZSxyKX1vLmNvbnRleHQuYWJvcnRMaXN0ZW5lcnM9bnVsbCx0aGlzLnJ1bm5pbmcuc3BsaWNlKGktLSwxKX1lbHNlIG8udXBkYXRlcy5wdXNoKC4uLm4udHJhbnNhY3Rpb25zKX1pZih0aGlzLmRlYm91bmNlVXBkYXRlPi0xJiZjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVVwZGF0ZSksdGhpcy5kZWJvdW5jZVVwZGF0ZT1lLmFjdGl2ZS5zb21lKGk9Pmkuc3RhdGU9PTEmJiF0aGlzLnJ1bm5pbmcuc29tZShvPT5vLmFjdGl2ZS5zb3VyY2U9PWkuc291cmNlKSk/c2V0VGltZW91dCgoKT0+dGhpcy5zdGFydFVwZGF0ZSgpLGdlKTotMSx0aGlzLmNvbXBvc2luZyE9MClmb3IobGV0IGkgb2Ygbi50cmFuc2FjdGlvbnMpdGUoaSk9PVwiaW5wdXRcIj90aGlzLmNvbXBvc2luZz0yOnRoaXMuY29tcG9zaW5nPT0yJiZpLnNlbGVjdGlvbiYmKHRoaXMuY29tcG9zaW5nPTMpfXN0YXJ0VXBkYXRlKCl7dGhpcy5kZWJvdW5jZVVwZGF0ZT0tMTtsZXR7c3RhdGU6bn09dGhpcy52aWV3LGU9bi5maWVsZChkKTtmb3IobGV0IHQgb2YgZS5hY3RpdmUpdC5zdGF0ZT09MSYmIXRoaXMucnVubmluZy5zb21lKGk9PmkuYWN0aXZlLnNvdXJjZT09dC5zb3VyY2UpJiZ0aGlzLnN0YXJ0UXVlcnkodCl9c3RhcnRRdWVyeShuKXtsZXR7c3RhdGU6ZX09dGhpcy52aWV3LHQ9SShlKSxpPW5ldyBGKGUsdCxuLmV4cGxpY2l0UG9zPT10KSxvPW5ldyBuZShuLGkpO3RoaXMucnVubmluZy5wdXNoKG8pLFByb21pc2UucmVzb2x2ZShuLnNvdXJjZShpKSkudGhlbihzPT57by5jb250ZXh0LmFib3J0ZWR8fChvLmRvbmU9c3x8bnVsbCx0aGlzLnNjaGVkdWxlQWNjZXB0KCkpfSxzPT57dGhpcy52aWV3LmRpc3BhdGNoKHtlZmZlY3RzOkgub2YobnVsbCl9KSxaKHRoaXMudmlldy5zdGF0ZSxzKX0pfXNjaGVkdWxlQWNjZXB0KCl7dGhpcy5ydW5uaW5nLmV2ZXJ5KG49Pm4uZG9uZSE9PXZvaWQgMCk/dGhpcy5hY2NlcHQoKTp0aGlzLmRlYm91bmNlQWNjZXB0PDAmJih0aGlzLmRlYm91bmNlQWNjZXB0PXNldFRpbWVvdXQoKCk9PnRoaXMuYWNjZXB0KCksZ2UpKX1hY2NlcHQoKXt2YXIgbjt0aGlzLmRlYm91bmNlQWNjZXB0Pi0xJiZjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZUFjY2VwdCksdGhpcy5kZWJvdW5jZUFjY2VwdD0tMTtsZXQgZT1bXSx0PXRoaXMudmlldy5zdGF0ZS5mYWNldCh4KTtmb3IobGV0IGk9MDtpPHRoaXMucnVubmluZy5sZW5ndGg7aSsrKXtsZXQgbz10aGlzLnJ1bm5pbmdbaV07aWYoby5kb25lPT09dm9pZCAwKWNvbnRpbnVlO2lmKHRoaXMucnVubmluZy5zcGxpY2UoaS0tLDEpLG8uZG9uZSl7bGV0IHI9bmV3IE8oby5hY3RpdmUuc291cmNlLG8uYWN0aXZlLmV4cGxpY2l0UG9zLG8uZG9uZSxvLmRvbmUuZnJvbSwobj1vLmRvbmUudG8pIT09bnVsbCYmbiE9PXZvaWQgMD9uOkkoby51cGRhdGVzLmxlbmd0aD9vLnVwZGF0ZXNbMF0uc3RhcnRTdGF0ZTp0aGlzLnZpZXcuc3RhdGUpKTtmb3IobGV0IGwgb2Ygby51cGRhdGVzKXI9ci51cGRhdGUobCx0KTtpZihyLmhhc1Jlc3VsdCgpKXtlLnB1c2gocik7Y29udGludWV9fWxldCBzPXRoaXMudmlldy5zdGF0ZS5maWVsZChkKS5hY3RpdmUuZmluZChyPT5yLnNvdXJjZT09by5hY3RpdmUuc291cmNlKTtpZihzJiZzLnN0YXRlPT0xKWlmKG8uZG9uZT09bnVsbCl7bGV0IHI9bmV3IHAoby5hY3RpdmUuc291cmNlLDApO2ZvcihsZXQgbCBvZiBvLnVwZGF0ZXMpcj1yLnVwZGF0ZShsLHQpO3Iuc3RhdGUhPTEmJmUucHVzaChyKX1lbHNlIHRoaXMuc3RhcnRRdWVyeShzKX1lLmxlbmd0aCYmdGhpcy52aWV3LmRpc3BhdGNoKHtlZmZlY3RzOk1lLm9mKGUpfSl9fSx7ZXZlbnRIYW5kbGVyczp7Ymx1cigpe2xldCBuPXRoaXMudmlldy5zdGF0ZS5maWVsZChkLCExKTtuJiZuLnRvb2x0aXAmJnRoaXMudmlldy5zdGF0ZS5mYWNldCh4KS5jbG9zZU9uQmx1ciYmdGhpcy52aWV3LmRpc3BhdGNoKHtlZmZlY3RzOkgub2YobnVsbCl9KX0sY29tcG9zaXRpb25zdGFydCgpe3RoaXMuY29tcG9zaW5nPTF9LGNvbXBvc2l0aW9uZW5kKCl7dGhpcy5jb21wb3Npbmc9PTMmJnNldFRpbWVvdXQoKCk9PnRoaXMudmlldy5kaXNwYXRjaCh7ZWZmZWN0czpzZS5vZighMSl9KSwyMCksdGhpcy5jb21wb3Npbmc9MH19fSksUmU9ay5iYXNlVGhlbWUoe1wiLmNtLXRvb2x0aXAuY20tdG9vbHRpcC1hdXRvY29tcGxldGVcIjp7XCImID4gdWxcIjp7Zm9udEZhbWlseTpcIm1vbm9zcGFjZVwiLHdoaXRlU3BhY2U6XCJub3dyYXBcIixvdmVyZmxvdzpcImhpZGRlbiBhdXRvXCIsbWF4V2lkdGhfZmFsbGJhY2s6XCI3MDBweFwiLG1heFdpZHRoOlwibWluKDcwMHB4LCA5NXZ3KVwiLG1pbldpZHRoOlwiMjUwcHhcIixtYXhIZWlnaHQ6XCIxMGVtXCIsbGlzdFN0eWxlOlwibm9uZVwiLG1hcmdpbjowLHBhZGRpbmc6MCxcIiYgPiBsaVwiOntvdmVyZmxvd1g6XCJoaWRkZW5cIix0ZXh0T3ZlcmZsb3c6XCJlbGxpcHNpc1wiLGN1cnNvcjpcInBvaW50ZXJcIixwYWRkaW5nOlwiMXB4IDNweFwiLGxpbmVIZWlnaHQ6MS4yfX19LFwiJmxpZ2h0IC5jbS10b29sdGlwLWF1dG9jb21wbGV0ZSB1bCBsaVthcmlhLXNlbGVjdGVkXVwiOntiYWNrZ3JvdW5kOlwiIzE3Y1wiLGNvbG9yOlwid2hpdGVcIn0sXCImZGFyayAuY20tdG9vbHRpcC1hdXRvY29tcGxldGUgdWwgbGlbYXJpYS1zZWxlY3RlZF1cIjp7YmFja2dyb3VuZDpcIiMzNDdcIixjb2xvcjpcIndoaXRlXCJ9LFwiLmNtLWNvbXBsZXRpb25MaXN0SW5jb21wbGV0ZVRvcDpiZWZvcmUsIC5jbS1jb21wbGV0aW9uTGlzdEluY29tcGxldGVCb3R0b206YWZ0ZXJcIjp7Y29udGVudDonXCJcXHhCN1xceEI3XFx4QjdcIicsb3BhY2l0eTouNSxkaXNwbGF5OlwiYmxvY2tcIix0ZXh0QWxpZ246XCJjZW50ZXJcIn0sXCIuY20tdG9vbHRpcC5jbS1jb21wbGV0aW9uSW5mb1wiOntwb3NpdGlvbjpcImFic29sdXRlXCIscGFkZGluZzpcIjNweCA5cHhcIix3aWR0aDpcIm1heC1jb250ZW50XCIsbWF4V2lkdGg6YCR7NDAwfXB4YCxib3hTaXppbmc6XCJib3JkZXItYm94XCJ9LFwiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLWxlZnRcIjp7cmlnaHQ6XCIxMDAlXCJ9LFwiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLXJpZ2h0XCI6e2xlZnQ6XCIxMDAlXCJ9LFwiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLWxlZnQtbmFycm93XCI6e3JpZ2h0OmAkezMwfXB4YH0sXCIuY20tY29tcGxldGlvbkluZm8uY20tY29tcGxldGlvbkluZm8tcmlnaHQtbmFycm93XCI6e2xlZnQ6YCR7MzB9cHhgfSxcIiZsaWdodCAuY20tc25pcHBldEZpZWxkXCI6e2JhY2tncm91bmRDb2xvcjpcIiMwMDAwMDAyMlwifSxcIiZkYXJrIC5jbS1zbmlwcGV0RmllbGRcIjp7YmFja2dyb3VuZENvbG9yOlwiI2ZmZmZmZjIyXCJ9LFwiLmNtLXNuaXBwZXRGaWVsZFBvc2l0aW9uXCI6e3ZlcnRpY2FsQWxpZ246XCJ0ZXh0LXRvcFwiLHdpZHRoOjAsaGVpZ2h0OlwiMS4xNWVtXCIsZGlzcGxheTpcImlubGluZS1ibG9ja1wiLG1hcmdpbjpcIjAgLTAuN3B4IC0uN2VtXCIsYm9yZGVyTGVmdDpcIjEuNHB4IGRvdHRlZCAjODg4XCJ9LFwiLmNtLWNvbXBsZXRpb25NYXRjaGVkVGV4dFwiOnt0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwifSxcIi5jbS1jb21wbGV0aW9uRGV0YWlsXCI6e21hcmdpbkxlZnQ6XCIwLjVlbVwiLGZvbnRTdHlsZTpcIml0YWxpY1wifSxcIi5jbS1jb21wbGV0aW9uSWNvblwiOntmb250U2l6ZTpcIjkwJVwiLHdpZHRoOlwiLjhlbVwiLGRpc3BsYXk6XCJpbmxpbmUtYmxvY2tcIix0ZXh0QWxpZ246XCJjZW50ZXJcIixwYWRkaW5nUmlnaHQ6XCIuNmVtXCIsb3BhY2l0eTpcIjAuNlwifSxcIi5jbS1jb21wbGV0aW9uSWNvbi1mdW5jdGlvbiwgLmNtLWNvbXBsZXRpb25JY29uLW1ldGhvZFwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHUwMTkyJ1wifX0sXCIuY20tY29tcGxldGlvbkljb24tY2xhc3NcIjp7XCImOmFmdGVyXCI6e2NvbnRlbnQ6XCInXFx1MjVDQidcIn19LFwiLmNtLWNvbXBsZXRpb25JY29uLWludGVyZmFjZVwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHUyNUNDJ1wifX0sXCIuY20tY29tcGxldGlvbkljb24tdmFyaWFibGVcIjp7XCImOmFmdGVyXCI6e2NvbnRlbnQ6XCInXFx1ezFENDY1fSdcIn19LFwiLmNtLWNvbXBsZXRpb25JY29uLWNvbnN0YW50XCI6e1wiJjphZnRlclwiOntjb250ZW50OlwiJ1xcdXsxRDQzNn0nXCJ9fSxcIi5jbS1jb21wbGV0aW9uSWNvbi10eXBlXCI6e1wiJjphZnRlclwiOntjb250ZW50OlwiJ1xcdXsxRDQ2MX0nXCJ9fSxcIi5jbS1jb21wbGV0aW9uSWNvbi1lbnVtXCI6e1wiJjphZnRlclwiOntjb250ZW50OlwiJ1xcdTIyMkEnXCJ9fSxcIi5jbS1jb21wbGV0aW9uSWNvbi1wcm9wZXJ0eVwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHUyNUExJ1wifX0sXCIuY20tY29tcGxldGlvbkljb24ta2V5d29yZFwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHV7MUY1MTF9XFx1RkUwRSdcIn19LFwiLmNtLWNvbXBsZXRpb25JY29uLW5hbWVzcGFjZVwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHUyNUEyJ1wifX0sXCIuY20tY29tcGxldGlvbkljb24tdGV4dFwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidhYmMnXCIsZm9udFNpemU6XCI1MCVcIix2ZXJ0aWNhbEFsaWduOlwibWlkZGxlXCJ9fX0pLGllPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxpLG8pe3RoaXMuZmllbGQ9ZSx0aGlzLmxpbmU9dCx0aGlzLmZyb209aSx0aGlzLnRvPW99fSxSPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLmZpZWxkPWUsdGhpcy5mcm9tPXQsdGhpcy50bz1pfW1hcChlKXtsZXQgdD1lLm1hcFBvcyh0aGlzLmZyb20sLTEsRy5UcmFja0RlbCksaT1lLm1hcFBvcyh0aGlzLnRvLDEsRy5UcmFja0RlbCk7cmV0dXJuIHQ9PW51bGx8fGk9PW51bGw/bnVsbDpuZXcgUih0aGlzLmZpZWxkLHQsaSl9fSxCPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5saW5lcz1lLHRoaXMuZmllbGRQb3NpdGlvbnM9dH1pbnN0YW50aWF0ZShlLHQpe2xldCBpPVtdLG89W3RdLHM9ZS5kb2MubGluZUF0KHQpLHI9L15cXHMqLy5leGVjKHMudGV4dClbMF07Zm9yKGxldCBjIG9mIHRoaXMubGluZXMpe2lmKGkubGVuZ3RoKXtsZXQgYT1yLGY9L15cXHQqLy5leGVjKGMpWzBdLmxlbmd0aDtmb3IobGV0IHU9MDt1PGY7dSsrKWErPWUuZmFjZXQoWGUpO28ucHVzaCh0K2EubGVuZ3RoLWYpLGM9YStjLnNsaWNlKGYpfWkucHVzaChjKSx0Kz1jLmxlbmd0aCsxfWxldCBsPXRoaXMuZmllbGRQb3NpdGlvbnMubWFwKGM9Pm5ldyBSKGMuZmllbGQsb1tjLmxpbmVdK2MuZnJvbSxvW2MubGluZV0rYy50bykpO3JldHVybnt0ZXh0OmkscmFuZ2VzOmx9fXN0YXRpYyBwYXJzZShlKXtsZXQgdD1bXSxpPVtdLG89W10scztmb3IobGV0IHIgb2YgZS5zcGxpdCgvXFxyXFxuP3xcXG4vKSl7Zm9yKDtzPS9bIyRdXFx7KD86KFxcZCspKD86OihbXn1dKikpP3woW159XSopKVxcfS8uZXhlYyhyKTspe2xldCBsPXNbMV0/K3NbMV06bnVsbCxjPXNbMl18fHNbM118fFwiXCIsYT0tMTtmb3IobGV0IGY9MDtmPHQubGVuZ3RoO2YrKykobCE9bnVsbD90W2ZdLnNlcT09bDpjP3RbZl0ubmFtZT09YzohMSkmJihhPWYpO2lmKGE8MCl7bGV0IGY9MDtmb3IoO2Y8dC5sZW5ndGgmJihsPT1udWxsfHx0W2ZdLnNlcSE9bnVsbCYmdFtmXS5zZXE8bCk7KWYrKzt0LnNwbGljZShmLDAse3NlcTpsLG5hbWU6Y30pLGE9Zjtmb3IobGV0IHUgb2Ygbyl1LmZpZWxkPj1hJiZ1LmZpZWxkKyt9by5wdXNoKG5ldyBpZShhLGkubGVuZ3RoLHMuaW5kZXgscy5pbmRleCtjLmxlbmd0aCkpLHI9ci5zbGljZSgwLHMuaW5kZXgpK2Mrci5zbGljZShzLmluZGV4K3NbMF0ubGVuZ3RoKX1mb3IobGV0IGw7bD0vKFskI10pXFxcXHsvLmV4ZWMocik7KXtyPXIuc2xpY2UoMCxsLmluZGV4KStsWzFdK1wie1wiK3Iuc2xpY2UobC5pbmRleCtsWzBdLmxlbmd0aCk7Zm9yKGxldCBjIG9mIG8pYy5saW5lPT1pLmxlbmd0aCYmYy5mcm9tPmwuaW5kZXgmJihjLmZyb20tLSxjLnRvLS0pfWkucHVzaChyKX1yZXR1cm4gbmV3IEIoaSxvKX19LGR0PVYud2lkZ2V0KHt3aWRnZXQ6bmV3IGNsYXNzIGV4dGVuZHMgUWV7dG9ET00oKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtyZXR1cm4gbi5jbGFzc05hbWU9XCJjbS1zbmlwcGV0RmllbGRQb3NpdGlvblwiLG59aWdub3JlRXZlbnQoKXtyZXR1cm4hMX19fSksbXQ9Vi5tYXJrKHtjbGFzczpcImNtLXNuaXBwZXRGaWVsZFwifSksUz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMucmFuZ2VzPWUsdGhpcy5hY3RpdmU9dCx0aGlzLmRlY289Vi5zZXQoZS5tYXAoaT0+KGkuZnJvbT09aS50bz9kdDptdCkucmFuZ2UoaS5mcm9tLGkudG8pKSl9bWFwKGUpe2xldCB0PVtdO2ZvcihsZXQgaSBvZiB0aGlzLnJhbmdlcyl7bGV0IG89aS5tYXAoZSk7aWYoIW8pcmV0dXJuIG51bGw7dC5wdXNoKG8pfXJldHVybiBuZXcgUyh0LHRoaXMuYWN0aXZlKX1zZWxlY3Rpb25JbnNpZGVGaWVsZChlKXtyZXR1cm4gZS5yYW5nZXMuZXZlcnkodD0+dGhpcy5yYW5nZXMuc29tZShpPT5pLmZpZWxkPT10aGlzLmFjdGl2ZSYmaS5mcm9tPD10LmZyb20mJmkudG8+PXQudG8pKX19LCQ9di5kZWZpbmUoe21hcChuLGUpe3JldHVybiBuJiZuLm1hcChlKX19KSxndD12LmRlZmluZSgpLEQ9b2UuZGVmaW5lKHtjcmVhdGUoKXtyZXR1cm4gbnVsbH0sdXBkYXRlKG4sZSl7Zm9yKGxldCB0IG9mIGUuZWZmZWN0cyl7aWYodC5pcygkKSlyZXR1cm4gdC52YWx1ZTtpZih0LmlzKGd0KSYmbilyZXR1cm4gbmV3IFMobi5yYW5nZXMsdC52YWx1ZSl9cmV0dXJuIG4mJmUuZG9jQ2hhbmdlZCYmKG49bi5tYXAoZS5jaGFuZ2VzKSksbiYmZS5zZWxlY3Rpb24mJiFuLnNlbGVjdGlvbkluc2lkZUZpZWxkKGUuc2VsZWN0aW9uKSYmKG49bnVsbCksbn0scHJvdmlkZTpuPT5rLmRlY29yYXRpb25zLmZyb20obixlPT5lP2UuZGVjbzpWLm5vbmUpfSk7ZnVuY3Rpb24gcmUobixlKXtyZXR1cm4gZy5jcmVhdGUobi5maWx0ZXIodD0+dC5maWVsZD09ZSkubWFwKHQ9PmcucmFuZ2UodC5mcm9tLHQudG8pKSl9ZnVuY3Rpb24gYnQobil7bGV0IGU9Qi5wYXJzZShuKTtyZXR1cm4odCxpLG8scyk9PntsZXR7dGV4dDpyLHJhbmdlczpsfT1lLmluc3RhbnRpYXRlKHQuc3RhdGUsbyksYz17Y2hhbmdlczp7ZnJvbTpvLHRvOnMsaW5zZXJ0Ok5lLm9mKHIpfSxzY3JvbGxJbnRvVmlldzohMH07aWYobC5sZW5ndGgmJihjLnNlbGVjdGlvbj1yZShsLDApKSxsLmxlbmd0aD4xKXtsZXQgYT1uZXcgUyhsLDApLGY9Yy5lZmZlY3RzPVskLm9mKGEpXTt0LnN0YXRlLmZpZWxkKEQsITEpPT09dm9pZCAwJiZmLnB1c2godi5hcHBlbmRDb25maWcub2YoW0QsQ3QsSXQsUmVdKSl9dC5kaXNwYXRjaCh0LnN0YXRlLnVwZGF0ZShjKSl9fWZ1bmN0aW9uIEJlKG4pe3JldHVybih7c3RhdGU6ZSxkaXNwYXRjaDp0fSk9PntsZXQgaT1lLmZpZWxkKEQsITEpO2lmKCFpfHxuPDAmJmkuYWN0aXZlPT0wKXJldHVybiExO2xldCBvPWkuYWN0aXZlK24scz1uPjAmJiFpLnJhbmdlcy5zb21lKHI9PnIuZmllbGQ9PW8rbik7cmV0dXJuIHQoZS51cGRhdGUoe3NlbGVjdGlvbjpyZShpLnJhbmdlcyxvKSxlZmZlY3RzOiQub2Yocz9udWxsOm5ldyBTKGkucmFuZ2VzLG8pKX0pKSwhMH19dmFyIHh0PSh7c3RhdGU6bixkaXNwYXRjaDplfSk9Pm4uZmllbGQoRCwhMSk/KGUobi51cGRhdGUoe2VmZmVjdHM6JC5vZihudWxsKX0pKSwhMCk6ITEseXQ9QmUoMSksd3Q9QmUoLTEpLHZ0PVt7a2V5OlwiVGFiXCIscnVuOnl0LHNoaWZ0Ond0fSx7a2V5OlwiRXNjYXBlXCIscnVuOnh0fV0sYmU9RWUuZGVmaW5lKHtjb21iaW5lKG4pe3JldHVybiBuLmxlbmd0aD9uWzBdOnZ0fX0pLEN0PVBlLmhpZ2hlc3QoT2UuY29tcHV0ZShbYmVdLG49Pm4uZmFjZXQoYmUpKSk7ZnVuY3Rpb24gVnQobixlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGUpLHthcHBseTpidChuKX0pfXZhciBJdD1rLmRvbUV2ZW50SGFuZGxlcnMoe21vdXNlZG93bihuLGUpe2xldCB0PWUuc3RhdGUuZmllbGQoRCwhMSksaTtpZighdHx8KGk9ZS5wb3NBdENvb3Jkcyh7eDpuLmNsaWVudFgseTpuLmNsaWVudFl9KSk9PW51bGwpcmV0dXJuITE7bGV0IG89dC5yYW5nZXMuZmluZChzPT5zLmZyb208PWkmJnMudG8+PWkpO3JldHVybiFvfHxvLmZpZWxkPT10LmFjdGl2ZT8hMTooZS5kaXNwYXRjaCh7c2VsZWN0aW9uOnJlKHQucmFuZ2VzLG8uZmllbGQpLGVmZmVjdHM6JC5vZih0LnJhbmdlcy5zb21lKHM9PnMuZmllbGQ+by5maWVsZCk/bmV3IFModC5yYW5nZXMsby5maWVsZCk6bnVsbCl9KSwhMCl9fSk7ZnVuY3Rpb24gU3Qobil7bGV0IGU9bi5yZXBsYWNlKC9bXFxcXFsuKyo/KCl7fF4kXS9nLFwiXFxcXCQmXCIpO3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChgW1xcXFxwe0FscGhhYmV0aWN9XFxcXHB7TnVtYmVyfV8ke2V9XStgLFwidWdcIil9Y2F0Y2h7cmV0dXJuIG5ldyBSZWdFeHAoYFt3JHtlfV1gLFwiZ1wiKX19ZnVuY3Rpb24geGUobixlKXtyZXR1cm4gbmV3IFJlZ0V4cChlKG4uc291cmNlKSxuLnVuaWNvZGU/XCJ1XCI6XCJcIil9dmFyIHllPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gRXQobil7cmV0dXJuIHllW25dfHwoeWVbbl09bmV3IFdlYWtNYXApfWZ1bmN0aW9uIHdlKG4sZSx0LGksbyl7Zm9yKGxldCBzPW4uaXRlckxpbmVzKCkscj0wOyFzLm5leHQoKS5kb25lOyl7bGV0e3ZhbHVlOmx9PXMsYztmb3IoZS5sYXN0SW5kZXg9MDtjPWUuZXhlYyhsKTspaWYoIWlbY1swXV0mJnIrYy5pbmRleCE9byYmKHQucHVzaCh7dHlwZTpcInRleHRcIixsYWJlbDpjWzBdfSksaVtjWzBdXT0hMCx0Lmxlbmd0aD49MmUzKSlyZXR1cm47cis9bC5sZW5ndGgrMX19ZnVuY3Rpb24gRGUobixlLHQsaSxvKXtsZXQgcz1uLmxlbmd0aD49MWUzLHI9cyYmZS5nZXQobik7aWYocilyZXR1cm4gcjtsZXQgbD1bXSxjPU9iamVjdC5jcmVhdGUobnVsbCk7aWYobi5jaGlsZHJlbil7bGV0IGE9MDtmb3IobGV0IGYgb2Ygbi5jaGlsZHJlbil7aWYoZi5sZW5ndGg+PTFlMylmb3IobGV0IHUgb2YgRGUoZixlLHQsaS1hLG8tYSkpY1t1LmxhYmVsXXx8KGNbdS5sYWJlbF09ITAsbC5wdXNoKHUpKTtlbHNlIHdlKGYsdCxsLGMsby1hKTthKz1mLmxlbmd0aCsxfX1lbHNlIHdlKG4sdCxsLGMsbyk7cmV0dXJuIHMmJmwubGVuZ3RoPDJlMyYmZS5zZXQobixsKSxsfXZhciBxdD1uPT57bGV0IGU9bi5zdGF0ZS5sYW5ndWFnZURhdGFBdChcIndvcmRDaGFyc1wiLG4ucG9zKS5qb2luKFwiXCIpLHQ9U3QoZSksaT1uLm1hdGNoQmVmb3JlKHhlKHQscj0+citcIiRcIikpO2lmKCFpJiYhbi5leHBsaWNpdClyZXR1cm4gbnVsbDtsZXQgbz1pP2kuZnJvbTpuLnBvcyxzPURlKG4uc3RhdGUuZG9jLEV0KGUpLHQsNWU0LG8pO3JldHVybntmcm9tOm8sb3B0aW9uczpzLHZhbGlkRm9yOnhlKHQscj0+XCJeXCIrcil9fSxMPXticmFja2V0czpbXCIoXCIsXCJbXCIsXCJ7XCIsXCInXCIsJ1wiJ10sYmVmb3JlOlwiKV19Ojs+XCIsc3RyaW5nUHJlZml4ZXM6W119LEU9di5kZWZpbmUoe21hcChuLGUpe2xldCB0PWUubWFwUG9zKG4sLTEsRy5UcmFja0FmdGVyKTtyZXR1cm4gdD8/dm9pZCAwfX0pLGNlPXYuZGVmaW5lKHttYXAobixlKXtyZXR1cm4gZS5tYXBQb3Mobil9fSksYWU9bmV3IGNsYXNzIGV4dGVuZHMgSGV7fTthZS5zdGFydFNpZGU9MTthZS5lbmRTaWRlPS0xO3ZhciBMZT1vZS5kZWZpbmUoe2NyZWF0ZSgpe3JldHVybiBmZS5lbXB0eX0sdXBkYXRlKG4sZSl7aWYoZS5zZWxlY3Rpb24pe2xldCB0PWUuc3RhdGUuZG9jLmxpbmVBdChlLnNlbGVjdGlvbi5tYWluLmhlYWQpLmZyb20saT1lLnN0YXJ0U3RhdGUuZG9jLmxpbmVBdChlLnN0YXJ0U3RhdGUuc2VsZWN0aW9uLm1haW4uaGVhZCkuZnJvbTt0IT1lLmNoYW5nZXMubWFwUG9zKGksLTEpJiYobj1mZS5lbXB0eSl9bj1uLm1hcChlLmNoYW5nZXMpO2ZvcihsZXQgdCBvZiBlLmVmZmVjdHMpdC5pcyhFKT9uPW4udXBkYXRlKHthZGQ6W2FlLnJhbmdlKHQudmFsdWUsdC52YWx1ZSsxKV19KTp0LmlzKGNlKSYmKG49bi51cGRhdGUoe2ZpbHRlcjppPT5pIT10LnZhbHVlfSkpO3JldHVybiBufX0pO2Z1bmN0aW9uIEt0KCl7cmV0dXJuW090LExlXX12YXIgWT1cIigpW117fTw+XCI7ZnVuY3Rpb24ga2Uobil7Zm9yKGxldCBlPTA7ZTxZLmxlbmd0aDtlKz0yKWlmKFkuY2hhckNvZGVBdChlKT09bilyZXR1cm4gWS5jaGFyQXQoZSsxKTtyZXR1cm4gU2UobjwxMjg/bjpuKzEpfWZ1bmN0aW9uIFdlKG4sZSl7cmV0dXJuIG4ubGFuZ3VhZ2VEYXRhQXQoXCJjbG9zZUJyYWNrZXRzXCIsZSlbMF18fEx9dmFyIFB0PXR5cGVvZiBuYXZpZ2F0b3I9PVwib2JqZWN0XCImJi9BbmRyb2lkXFxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLE90PWsuaW5wdXRIYW5kbGVyLm9mKChuLGUsdCxpKT0+e2lmKChQdD9uLmNvbXBvc2luZzpuLmNvbXBvc2l0aW9uU3RhcnRlZCl8fG4uc3RhdGUucmVhZE9ubHkpcmV0dXJuITE7bGV0IG89bi5zdGF0ZS5zZWxlY3Rpb24ubWFpbjtpZihpLmxlbmd0aD4yfHxpLmxlbmd0aD09MiYmdyh5KGksMCkpPT0xfHxlIT1vLmZyb218fHQhPW8udG8pcmV0dXJuITE7bGV0IHM9VHQobi5zdGF0ZSxpKTtyZXR1cm4gcz8obi5kaXNwYXRjaChzKSwhMCk6ITF9KSxBdD0oe3N0YXRlOm4sZGlzcGF0Y2g6ZX0pPT57aWYobi5yZWFkT25seSlyZXR1cm4hMTtsZXQgaT1XZShuLG4uc2VsZWN0aW9uLm1haW4uaGVhZCkuYnJhY2tldHN8fEwuYnJhY2tldHMsbz1udWxsLHM9bi5jaGFuZ2VCeVJhbmdlKHI9PntpZihyLmVtcHR5KXtsZXQgbD1NdChuLmRvYyxyLmhlYWQpO2ZvcihsZXQgYyBvZiBpKWlmKGM9PWwmJnEobi5kb2Msci5oZWFkKT09a2UoeShjLDApKSlyZXR1cm57Y2hhbmdlczp7ZnJvbTpyLmhlYWQtYy5sZW5ndGgsdG86ci5oZWFkK2MubGVuZ3RofSxyYW5nZTpnLmN1cnNvcihyLmhlYWQtYy5sZW5ndGgpfX1yZXR1cm57cmFuZ2U6bz1yfX0pO3JldHVybiBvfHxlKG4udXBkYXRlKHMse3Njcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpcImRlbGV0ZS5iYWNrd2FyZFwifSkpLCFvfSx6dD1be2tleTpcIkJhY2tzcGFjZVwiLHJ1bjpBdH1dO2Z1bmN0aW9uIFR0KG4sZSl7bGV0IHQ9V2UobixuLnNlbGVjdGlvbi5tYWluLmhlYWQpLGk9dC5icmFja2V0c3x8TC5icmFja2V0cztmb3IobGV0IG8gb2YgaSl7bGV0IHM9a2UoeShvLDApKTtpZihlPT1vKXJldHVybiBzPT1vP0R0KG4sbyxpLmluZGV4T2YobytvK28pPi0xLHQpOlJ0KG4sbyxzLHQuYmVmb3JlfHxMLmJlZm9yZSk7aWYoZT09cyYmJGUobixuLnNlbGVjdGlvbi5tYWluLmZyb20pKXJldHVybiBCdChuLG8scyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gJGUobixlKXtsZXQgdD0hMTtyZXR1cm4gbi5maWVsZChMZSkuYmV0d2VlbigwLG4uZG9jLmxlbmd0aCxpPT57aT09ZSYmKHQ9ITApfSksdH1mdW5jdGlvbiBxKG4sZSl7bGV0IHQ9bi5zbGljZVN0cmluZyhlLGUrMik7cmV0dXJuIHQuc2xpY2UoMCx3KHkodCwwKSkpfWZ1bmN0aW9uIE10KG4sZSl7bGV0IHQ9bi5zbGljZVN0cmluZyhlLTIsZSk7cmV0dXJuIHcoeSh0LDApKT09dC5sZW5ndGg/dDp0LnNsaWNlKDEpfWZ1bmN0aW9uIFJ0KG4sZSx0LGkpe2xldCBvPW51bGwscz1uLmNoYW5nZUJ5UmFuZ2Uocj0+e2lmKCFyLmVtcHR5KXJldHVybntjaGFuZ2VzOlt7aW5zZXJ0OmUsZnJvbTpyLmZyb219LHtpbnNlcnQ6dCxmcm9tOnIudG99XSxlZmZlY3RzOkUub2Yoci50bytlLmxlbmd0aCkscmFuZ2U6Zy5yYW5nZShyLmFuY2hvcitlLmxlbmd0aCxyLmhlYWQrZS5sZW5ndGgpfTtsZXQgbD1xKG4uZG9jLHIuaGVhZCk7cmV0dXJuIWx8fC9cXHMvLnRlc3QobCl8fGkuaW5kZXhPZihsKT4tMT97Y2hhbmdlczp7aW5zZXJ0OmUrdCxmcm9tOnIuaGVhZH0sZWZmZWN0czpFLm9mKHIuaGVhZCtlLmxlbmd0aCkscmFuZ2U6Zy5jdXJzb3Ioci5oZWFkK2UubGVuZ3RoKX06e3JhbmdlOm89cn19KTtyZXR1cm4gbz9udWxsOm4udXBkYXRlKHMse3Njcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpcImlucHV0LnR5cGVcIn0pfWZ1bmN0aW9uIEJ0KG4sZSx0KXtsZXQgaT1udWxsLG89bi5zZWxlY3Rpb24ucmFuZ2VzLm1hcChzPT5zLmVtcHR5JiZxKG4uZG9jLHMuaGVhZCk9PXQ/Zy5jdXJzb3Iocy5oZWFkK3QubGVuZ3RoKTppPXMpO3JldHVybiBpP251bGw6bi51cGRhdGUoe3NlbGVjdGlvbjpnLmNyZWF0ZShvLG4uc2VsZWN0aW9uLm1haW5JbmRleCksc2Nyb2xsSW50b1ZpZXc6ITAsZWZmZWN0czpuLnNlbGVjdGlvbi5yYW5nZXMubWFwKCh7ZnJvbTpzfSk9PmNlLm9mKHMpKX0pfWZ1bmN0aW9uIER0KG4sZSx0LGkpe2xldCBvPWkuc3RyaW5nUHJlZml4ZXN8fEwuc3RyaW5nUHJlZml4ZXMscz1udWxsLHI9bi5jaGFuZ2VCeVJhbmdlKGw9PntpZighbC5lbXB0eSlyZXR1cm57Y2hhbmdlczpbe2luc2VydDplLGZyb206bC5mcm9tfSx7aW5zZXJ0OmUsZnJvbTpsLnRvfV0sZWZmZWN0czpFLm9mKGwudG8rZS5sZW5ndGgpLHJhbmdlOmcucmFuZ2UobC5hbmNob3IrZS5sZW5ndGgsbC5oZWFkK2UubGVuZ3RoKX07bGV0IGM9bC5oZWFkLGE9cShuLmRvYyxjKSxmO2lmKGE9PWUpe2lmKHZlKG4sYykpcmV0dXJue2NoYW5nZXM6e2luc2VydDplK2UsZnJvbTpjfSxlZmZlY3RzOkUub2YoYytlLmxlbmd0aCkscmFuZ2U6Zy5jdXJzb3IoYytlLmxlbmd0aCl9O2lmKCRlKG4sYykpe2xldCB1PXQmJm4uc2xpY2VEb2MoYyxjK2UubGVuZ3RoKjMpPT1lK2UrZTtyZXR1cm57cmFuZ2U6Zy5jdXJzb3IoYytlLmxlbmd0aCoodT8zOjEpKSxlZmZlY3RzOmNlLm9mKGMpfX19ZWxzZXtpZih0JiZuLnNsaWNlRG9jKGMtMiplLmxlbmd0aCxjKT09ZStlJiYoZj1DZShuLGMtMiplLmxlbmd0aCxvKSk+LTEmJnZlKG4sZikpcmV0dXJue2NoYW5nZXM6e2luc2VydDplK2UrZStlLGZyb206Y30sZWZmZWN0czpFLm9mKGMrZS5sZW5ndGgpLHJhbmdlOmcuY3Vyc29yKGMrZS5sZW5ndGgpfTtpZihuLmNoYXJDYXRlZ29yaXplcihjKShhKSE9Si5Xb3JkJiZDZShuLGMsbyk+LTEmJiFMdChuLGMsZSxvKSlyZXR1cm57Y2hhbmdlczp7aW5zZXJ0OmUrZSxmcm9tOmN9LGVmZmVjdHM6RS5vZihjK2UubGVuZ3RoKSxyYW5nZTpnLmN1cnNvcihjK2UubGVuZ3RoKX19cmV0dXJue3JhbmdlOnM9bH19KTtyZXR1cm4gcz9udWxsOm4udXBkYXRlKHIse3Njcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpcImlucHV0LnR5cGVcIn0pfWZ1bmN0aW9uIHZlKG4sZSl7bGV0IHQ9VyhuKS5yZXNvbHZlSW5uZXIoZSsxKTtyZXR1cm4gdC5wYXJlbnQmJnQuZnJvbT09ZX1mdW5jdGlvbiBMdChuLGUsdCxpKXtsZXQgbz1XKG4pLnJlc29sdmVJbm5lcihlLC0xKSxzPWkucmVkdWNlKChyLGwpPT5NYXRoLm1heChyLGwubGVuZ3RoKSwwKTtmb3IobGV0IHI9MDtyPDU7cisrKXtsZXQgbD1uLnNsaWNlRG9jKG8uZnJvbSxNYXRoLm1pbihvLnRvLG8uZnJvbSt0Lmxlbmd0aCtzKSksYz1sLmluZGV4T2YodCk7aWYoIWN8fGM+LTEmJmkuaW5kZXhPZihsLnNsaWNlKDAsYykpPi0xKXtsZXQgZj1vLmZpcnN0Q2hpbGQ7Zm9yKDtmJiZmLmZyb209PW8uZnJvbSYmZi50by1mLmZyb20+dC5sZW5ndGgrYzspe2lmKG4uc2xpY2VEb2MoZi50by10Lmxlbmd0aCxmLnRvKT09dClyZXR1cm4hMTtmPWYuZmlyc3RDaGlsZH1yZXR1cm4hMH1sZXQgYT1vLnRvPT1lJiZvLnBhcmVudDtpZighYSlicmVhaztvPWF9cmV0dXJuITF9ZnVuY3Rpb24gQ2UobixlLHQpe2xldCBpPW4uY2hhckNhdGVnb3JpemVyKGUpO2lmKGkobi5zbGljZURvYyhlLTEsZSkpIT1KLldvcmQpcmV0dXJuIGU7Zm9yKGxldCBvIG9mIHQpe2xldCBzPWUtby5sZW5ndGg7aWYobi5zbGljZURvYyhzLGUpPT1vJiZpKG4uc2xpY2VEb2Mocy0xLHMpKSE9Si5Xb3JkKXJldHVybiBzfXJldHVybi0xfWZ1bmN0aW9uIFF0KG49e30pe3JldHVybltkLHgub2YobikscHQsV3QsUmVdfXZhciBrdD1be2tleTpcIkN0cmwtU3BhY2VcIixydW46YXR9LHtrZXk6XCJFc2NhcGVcIixydW46ZnR9LHtrZXk6XCJBcnJvd0Rvd25cIixydW46VSghMCl9LHtrZXk6XCJBcnJvd1VwXCIscnVuOlUoITEpfSx7a2V5OlwiUGFnZURvd25cIixydW46VSghMCxcInBhZ2VcIil9LHtrZXk6XCJQYWdlVXBcIixydW46VSghMSxcInBhZ2VcIil9LHtrZXk6XCJFbnRlclwiLHJ1bjpjdH1dLFd0PVBlLmhpZ2hlc3QoT2UuY29tcHV0ZU4oW3hdLG49Pm4uZmFjZXQoeCkuZGVmYXVsdEtleW1hcD9ba3RdOltdKSk7ZnVuY3Rpb24gWHQobil7bGV0IGU9bi5maWVsZChkLCExKTtyZXR1cm4gZSYmZS5hY3RpdmUuc29tZSh0PT50LnN0YXRlPT0xKT9cInBlbmRpbmdcIjplJiZlLmFjdGl2ZS5zb21lKHQ9PnQuc3RhdGUhPTApP1wiYWN0aXZlXCI6bnVsbH12YXIgSWU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gWXQobil7dmFyIGU7bGV0IHQ9KGU9bi5maWVsZChkLCExKSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm9wZW47aWYoIXQpcmV0dXJuW107bGV0IGk9SWUuZ2V0KHQub3B0aW9ucyk7cmV0dXJuIGl8fEllLnNldCh0Lm9wdGlvbnMsaT10Lm9wdGlvbnMubWFwKG89Pm8uY29tcGxldGlvbikpLGl9ZnVuY3Rpb24gR3Qobil7dmFyIGU7bGV0IHQ9KGU9bi5maWVsZChkLCExKSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm9wZW47cmV0dXJuIHQmJnQuc2VsZWN0ZWQ+PTA/dC5vcHRpb25zW3Quc2VsZWN0ZWRdLmNvbXBsZXRpb246bnVsbH1mdW5jdGlvbiBKdChuKXt2YXIgZTtsZXQgdD0oZT1uLmZpZWxkKGQsITEpKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUub3BlbjtyZXR1cm4gdCYmdC5zZWxlY3RlZD49MD90LnNlbGVjdGVkOm51bGx9ZnVuY3Rpb24gWnQobil7cmV0dXJuIGxlLm9mKG4pfWV4cG9ydHtGIGFzIENvbXBsZXRpb25Db250ZXh0LGN0IGFzIGFjY2VwdENvbXBsZXRpb24sUXQgYXMgYXV0b2NvbXBsZXRpb24seHQgYXMgY2xlYXJTbmlwcGV0LEt0IGFzIGNsb3NlQnJhY2tldHMsenQgYXMgY2xvc2VCcmFja2V0c0tleW1hcCxmdCBhcyBjbG9zZUNvbXBsZXRpb24scXQgYXMgY29tcGxldGVBbnlXb3JkLEdlIGFzIGNvbXBsZXRlRnJvbUxpc3Qsa3QgYXMgY29tcGxldGlvbktleW1hcCxYdCBhcyBjb21wbGV0aW9uU3RhdHVzLFl0IGFzIGN1cnJlbnRDb21wbGV0aW9ucyxBdCBhcyBkZWxldGVCcmFja2V0UGFpcixGdCBhcyBpZkluLE50IGFzIGlmTm90SW4sVHQgYXMgaW5zZXJ0QnJhY2tldCxKZSBhcyBpbnNlcnRDb21wbGV0aW9uVGV4dCxVIGFzIG1vdmVDb21wbGV0aW9uU2VsZWN0aW9uLHl0IGFzIG5leHRTbmlwcGV0RmllbGQsSHQgYXMgcGlja2VkQ29tcGxldGlvbix3dCBhcyBwcmV2U25pcHBldEZpZWxkLEd0IGFzIHNlbGVjdGVkQ29tcGxldGlvbixKdCBhcyBzZWxlY3RlZENvbXBsZXRpb25JbmRleCxadCBhcyBzZXRTZWxlY3RlZENvbXBsZXRpb24sYnQgYXMgc25pcHBldCxWdCBhcyBzbmlwcGV0Q29tcGxldGlvbixiZSBhcyBzbmlwcGV0S2V5bWFwLGF0IGFzIHN0YXJ0Q29tcGxldGlvbn07XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGxlemVyL2hpZ2hsaWdodEAxLjEuMSkgZGVubyBwcm9kdWN0aW9uICovXG5pbXBvcnR7Tm9kZVByb3AgYXMgSn1mcm9tXCJAbGV6ZXIvY29tbW9uXCI7dmFyIEw9MCxmPWNsYXNze2NvbnN0cnVjdG9yKHQsYSxpKXt0aGlzLnNldD10LHRoaXMuYmFzZT1hLHRoaXMubW9kaWZpZWQ9aSx0aGlzLmlkPUwrK31zdGF0aWMgZGVmaW5lKHQpe2lmKHQ/LmJhc2UpdGhyb3cgbmV3IEVycm9yKFwiQ2FuIG5vdCBkZXJpdmUgZnJvbSBhIG1vZGlmaWVkIHRhZ1wiKTtsZXQgYT1uZXcgZihbXSxudWxsLFtdKTtpZihhLnNldC5wdXNoKGEpLHQpZm9yKGxldCBpIG9mIHQuc2V0KWEuc2V0LnB1c2goaSk7cmV0dXJuIGF9c3RhdGljIGRlZmluZU1vZGlmaWVyKCl7bGV0IHQ9bmV3IHY7cmV0dXJuIGE9PmEubW9kaWZpZWQuaW5kZXhPZih0KT4tMT9hOnYuZ2V0KGEuYmFzZXx8YSxhLm1vZGlmaWVkLmNvbmNhdCh0KS5zb3J0KChpLGwpPT5pLmlkLWwuaWQpKX19LFE9MCx2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pbnN0YW5jZXM9W10sdGhpcy5pZD1RKyt9c3RhdGljIGdldCh0LGEpe2lmKCFhLmxlbmd0aClyZXR1cm4gdDtsZXQgaT1hWzBdLmluc3RhbmNlcy5maW5kKG89Pm8uYmFzZT09dCYmVShhLG8ubW9kaWZpZWQpKTtpZihpKXJldHVybiBpO2xldCBsPVtdLHM9bmV3IGYobCx0LGEpO2ZvcihsZXQgbyBvZiBhKW8uaW5zdGFuY2VzLnB1c2gocyk7bGV0IGM9VihhKTtmb3IobGV0IG8gb2YgdC5zZXQpZm9yKGxldCBkIG9mIGMpbC5wdXNoKHYuZ2V0KG8sZCkpO3JldHVybiBzfX07ZnVuY3Rpb24gVShyLHQpe3JldHVybiByLmxlbmd0aD09dC5sZW5ndGgmJnIuZXZlcnkoKGEsaSk9PmE9PXRbaV0pfWZ1bmN0aW9uIFYocil7bGV0IHQ9W3JdO2ZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKWZvcihsZXQgaSBvZiBWKHIuc2xpY2UoMCxhKS5jb25jYXQoci5zbGljZShhKzEpKSkpdC5wdXNoKGkpO3JldHVybiB0fWZ1bmN0aW9uICQocil7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IGEgaW4gcil7bGV0IGk9clthXTtBcnJheS5pc0FycmF5KGkpfHwoaT1baV0pO2ZvcihsZXQgbCBvZiBhLnNwbGl0KFwiIFwiKSlpZihsKXtsZXQgcz1bXSxjPTIsbz1sO2ZvcihsZXQgcD0wOzspe2lmKG89PVwiLi4uXCImJnA+MCYmcCszPT1sLmxlbmd0aCl7Yz0xO2JyZWFrfWxldCBoPS9eXCIoPzpbXlwiXFxcXF18XFxcXC4pKj9cInxbXlxcLyFdKy8uZXhlYyhvKTtpZighaCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgcGF0aDogXCIrbCk7aWYocy5wdXNoKGhbMF09PVwiKlwiP1wiXCI6aFswXVswXT09J1wiJz9KU09OLnBhcnNlKGhbMF0pOmhbMF0pLHArPWhbMF0ubGVuZ3RoLHA9PWwubGVuZ3RoKWJyZWFrO2xldCBOPWxbcCsrXTtpZihwPT1sLmxlbmd0aCYmTj09XCIhXCIpe2M9MDticmVha31pZihOIT1cIi9cIil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgcGF0aDogXCIrbCk7bz1sLnNsaWNlKHApfWxldCBkPXMubGVuZ3RoLTEsZz1zW2RdO2lmKCFnKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBwYXRoOiBcIitsKTtsZXQgTz1uZXcgTShpLGMsZD4wP3Muc2xpY2UoMCxkKTpudWxsKTt0W2ddPU8uc29ydCh0W2ddKX19cmV0dXJuIHouYWRkKHQpfXZhciB6PW5ldyBKLE09Y2xhc3N7Y29uc3RydWN0b3IodCxhLGksbCl7dGhpcy50YWdzPXQsdGhpcy5tb2RlPWEsdGhpcy5jb250ZXh0PWksdGhpcy5uZXh0PWx9Z2V0IG9wYXF1ZSgpe3JldHVybiB0aGlzLm1vZGU9PTB9Z2V0IGluaGVyaXQoKXtyZXR1cm4gdGhpcy5tb2RlPT0xfXNvcnQodCl7cmV0dXJuIXR8fHQuZGVwdGg8dGhpcy5kZXB0aD8odGhpcy5uZXh0PXQsdGhpcyk6KHQubmV4dD10aGlzLnNvcnQodC5uZXh0KSx0KX1nZXQgZGVwdGgoKXtyZXR1cm4gdGhpcy5jb250ZXh0P3RoaXMuY29udGV4dC5sZW5ndGg6MH19O00uZW1wdHk9bmV3IE0oW10sMixudWxsKTtmdW5jdGlvbiBXKHIsdCl7bGV0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHMgb2YgcilpZighQXJyYXkuaXNBcnJheShzLnRhZykpYVtzLnRhZy5pZF09cy5jbGFzcztlbHNlIGZvcihsZXQgYyBvZiBzLnRhZylhW2MuaWRdPXMuY2xhc3M7bGV0e3Njb3BlOmksYWxsOmw9bnVsbH09dHx8e307cmV0dXJue3N0eWxlOnM9PntsZXQgYz1sO2ZvcihsZXQgbyBvZiBzKWZvcihsZXQgZCBvZiBvLnNldCl7bGV0IGc9YVtkLmlkXTtpZihnKXtjPWM/YytcIiBcIitnOmc7YnJlYWt9fXJldHVybiBjfSxzY29wZTppfX1mdW5jdGlvbiBYKHIsdCl7bGV0IGE9bnVsbDtmb3IobGV0IGkgb2Ygcil7bGV0IGw9aS5zdHlsZSh0KTtsJiYoYT1hP2ErXCIgXCIrbDpsKX1yZXR1cm4gYX1mdW5jdGlvbiBfKHIsdCxhLGk9MCxsPXIubGVuZ3RoKXtsZXQgcz1uZXcgUChpLEFycmF5LmlzQXJyYXkodCk/dDpbdF0sYSk7cy5oaWdobGlnaHRSYW5nZShyLmN1cnNvcigpLGksbCxcIlwiLHMuaGlnaGxpZ2h0ZXJzKSxzLmZsdXNoKGwpfXZhciBQPWNsYXNze2NvbnN0cnVjdG9yKHQsYSxpKXt0aGlzLmF0PXQsdGhpcy5oaWdobGlnaHRlcnM9YSx0aGlzLnNwYW49aSx0aGlzLmNsYXNzPVwiXCJ9c3RhcnRTcGFuKHQsYSl7YSE9dGhpcy5jbGFzcyYmKHRoaXMuZmx1c2godCksdD50aGlzLmF0JiYodGhpcy5hdD10KSx0aGlzLmNsYXNzPWEpfWZsdXNoKHQpe3Q+dGhpcy5hdCYmdGhpcy5jbGFzcyYmdGhpcy5zcGFuKHRoaXMuYXQsdCx0aGlzLmNsYXNzKX1oaWdobGlnaHRSYW5nZSh0LGEsaSxsLHMpe2xldHt0eXBlOmMsZnJvbTpvLHRvOmR9PXQ7aWYobz49aXx8ZDw9YSlyZXR1cm47Yy5pc1RvcCYmKHM9dGhpcy5oaWdobGlnaHRlcnMuZmlsdGVyKE49PiFOLnNjb3BlfHxOLnNjb3BlKGMpKSk7bGV0IGc9bCxPPVkodCl8fE0uZW1wdHkscD1YKHMsTy50YWdzKTtpZihwJiYoZyYmKGcrPVwiIFwiKSxnKz1wLE8ubW9kZT09MSYmKGwrPShsP1wiIFwiOlwiXCIpK3ApKSx0aGlzLnN0YXJ0U3Bhbih0LmZyb20sZyksTy5vcGFxdWUpcmV0dXJuO2xldCBoPXQudHJlZSYmdC50cmVlLnByb3AoSi5tb3VudGVkKTtpZihoJiZoLm92ZXJsYXkpe2xldCBOPXQubm9kZS5lbnRlcihoLm92ZXJsYXlbMF0uZnJvbStvLDEpLEc9dGhpcy5oaWdobGlnaHRlcnMuZmlsdGVyKHg9PiF4LnNjb3BlfHx4LnNjb3BlKGgudHJlZS50eXBlKSksRD10LmZpcnN0Q2hpbGQoKTtmb3IobGV0IHg9MCxTPW87O3grKyl7bGV0IEE9eDxoLm92ZXJsYXkubGVuZ3RoP2gub3ZlcmxheVt4XTpudWxsLHE9QT9BLmZyb20rbzpkLEg9TWF0aC5tYXgoYSxTKSxFPU1hdGgubWluKGkscSk7aWYoSDxFJiZEKWZvcig7dC5mcm9tPEUmJih0aGlzLmhpZ2hsaWdodFJhbmdlKHQsSCxFLGwscyksdGhpcy5zdGFydFNwYW4oTWF0aC5taW4oaSx0LnRvKSxnKSwhKHQudG8+PXF8fCF0Lm5leHRTaWJsaW5nKCkpKTspO2lmKCFBfHxxPmkpYnJlYWs7Uz1BLnRvK28sUz5hJiYodGhpcy5oaWdobGlnaHRSYW5nZShOLmN1cnNvcigpLE1hdGgubWF4KGEsQS5mcm9tK28pLE1hdGgubWluKGksUyksbCxHKSx0aGlzLnN0YXJ0U3BhbihTLGcpKX1EJiZ0LnBhcmVudCgpfWVsc2UgaWYodC5maXJzdENoaWxkKCkpe2RvIGlmKCEodC50bzw9YSkpe2lmKHQuZnJvbT49aSlicmVhazt0aGlzLmhpZ2hsaWdodFJhbmdlKHQsYSxpLGwscyksdGhpcy5zdGFydFNwYW4oTWF0aC5taW4oaSx0LnRvKSxnKX13aGlsZSh0Lm5leHRTaWJsaW5nKCkpO3QucGFyZW50KCl9fX07ZnVuY3Rpb24gWShyKXtsZXQgdD1yLnR5cGUucHJvcCh6KTtmb3IoO3QmJnQuY29udGV4dCYmIXIubWF0Y2hDb250ZXh0KHQuY29udGV4dCk7KXQ9dC5uZXh0O3JldHVybiB0fHxudWxsfXZhciBlPWYuZGVmaW5lLEk9ZSgpLGI9ZSgpLEI9ZShiKSxGPWUoYikseT1lKCksQz1lKHkpLEs9ZSh5KSxrPWUoKSx3PWUoayksbT1lKCksdT1lKCksaj1lKCksUj1lKGopLFQ9ZSgpLG49e2NvbW1lbnQ6SSxsaW5lQ29tbWVudDplKEkpLGJsb2NrQ29tbWVudDplKEkpLGRvY0NvbW1lbnQ6ZShJKSxuYW1lOmIsdmFyaWFibGVOYW1lOmUoYiksdHlwZU5hbWU6Qix0YWdOYW1lOmUoQikscHJvcGVydHlOYW1lOkYsYXR0cmlidXRlTmFtZTplKEYpLGNsYXNzTmFtZTplKGIpLGxhYmVsTmFtZTplKGIpLG5hbWVzcGFjZTplKGIpLG1hY3JvTmFtZTplKGIpLGxpdGVyYWw6eSxzdHJpbmc6Qyxkb2NTdHJpbmc6ZShDKSxjaGFyYWN0ZXI6ZShDKSxhdHRyaWJ1dGVWYWx1ZTplKEMpLG51bWJlcjpLLGludGVnZXI6ZShLKSxmbG9hdDplKEspLGJvb2w6ZSh5KSxyZWdleHA6ZSh5KSxlc2NhcGU6ZSh5KSxjb2xvcjplKHkpLHVybDplKHkpLGtleXdvcmQ6bSxzZWxmOmUobSksbnVsbDplKG0pLGF0b206ZShtKSx1bml0OmUobSksbW9kaWZpZXI6ZShtKSxvcGVyYXRvcktleXdvcmQ6ZShtKSxjb250cm9sS2V5d29yZDplKG0pLGRlZmluaXRpb25LZXl3b3JkOmUobSksbW9kdWxlS2V5d29yZDplKG0pLG9wZXJhdG9yOnUsZGVyZWZPcGVyYXRvcjplKHUpLGFyaXRobWV0aWNPcGVyYXRvcjplKHUpLGxvZ2ljT3BlcmF0b3I6ZSh1KSxiaXR3aXNlT3BlcmF0b3I6ZSh1KSxjb21wYXJlT3BlcmF0b3I6ZSh1KSx1cGRhdGVPcGVyYXRvcjplKHUpLGRlZmluaXRpb25PcGVyYXRvcjplKHUpLHR5cGVPcGVyYXRvcjplKHUpLGNvbnRyb2xPcGVyYXRvcjplKHUpLHB1bmN0dWF0aW9uOmosc2VwYXJhdG9yOmUoaiksYnJhY2tldDpSLGFuZ2xlQnJhY2tldDplKFIpLHNxdWFyZUJyYWNrZXQ6ZShSKSxwYXJlbjplKFIpLGJyYWNlOmUoUiksY29udGVudDprLGhlYWRpbmc6dyxoZWFkaW5nMTplKHcpLGhlYWRpbmcyOmUodyksaGVhZGluZzM6ZSh3KSxoZWFkaW5nNDplKHcpLGhlYWRpbmc1OmUodyksaGVhZGluZzY6ZSh3KSxjb250ZW50U2VwYXJhdG9yOmUoayksbGlzdDplKGspLHF1b3RlOmUoayksZW1waGFzaXM6ZShrKSxzdHJvbmc6ZShrKSxsaW5rOmUoayksbW9ub3NwYWNlOmUoayksc3RyaWtldGhyb3VnaDplKGspLGluc2VydGVkOmUoKSxkZWxldGVkOmUoKSxjaGFuZ2VkOmUoKSxpbnZhbGlkOmUoKSxtZXRhOlQsZG9jdW1lbnRNZXRhOmUoVCksYW5ub3RhdGlvbjplKFQpLHByb2Nlc3NpbmdJbnN0cnVjdGlvbjplKFQpLGRlZmluaXRpb246Zi5kZWZpbmVNb2RpZmllcigpLGNvbnN0YW50OmYuZGVmaW5lTW9kaWZpZXIoKSxmdW5jdGlvbjpmLmRlZmluZU1vZGlmaWVyKCksc3RhbmRhcmQ6Zi5kZWZpbmVNb2RpZmllcigpLGxvY2FsOmYuZGVmaW5lTW9kaWZpZXIoKSxzcGVjaWFsOmYuZGVmaW5lTW9kaWZpZXIoKX0sdHQ9Vyhbe3RhZzpuLmxpbmssY2xhc3M6XCJ0b2stbGlua1wifSx7dGFnOm4uaGVhZGluZyxjbGFzczpcInRvay1oZWFkaW5nXCJ9LHt0YWc6bi5lbXBoYXNpcyxjbGFzczpcInRvay1lbXBoYXNpc1wifSx7dGFnOm4uc3Ryb25nLGNsYXNzOlwidG9rLXN0cm9uZ1wifSx7dGFnOm4ua2V5d29yZCxjbGFzczpcInRvay1rZXl3b3JkXCJ9LHt0YWc6bi5hdG9tLGNsYXNzOlwidG9rLWF0b21cIn0se3RhZzpuLmJvb2wsY2xhc3M6XCJ0b2stYm9vbFwifSx7dGFnOm4udXJsLGNsYXNzOlwidG9rLXVybFwifSx7dGFnOm4ubGFiZWxOYW1lLGNsYXNzOlwidG9rLWxhYmVsTmFtZVwifSx7dGFnOm4uaW5zZXJ0ZWQsY2xhc3M6XCJ0b2staW5zZXJ0ZWRcIn0se3RhZzpuLmRlbGV0ZWQsY2xhc3M6XCJ0b2stZGVsZXRlZFwifSx7dGFnOm4ubGl0ZXJhbCxjbGFzczpcInRvay1saXRlcmFsXCJ9LHt0YWc6bi5zdHJpbmcsY2xhc3M6XCJ0b2stc3RyaW5nXCJ9LHt0YWc6bi5udW1iZXIsY2xhc3M6XCJ0b2stbnVtYmVyXCJ9LHt0YWc6W24ucmVnZXhwLG4uZXNjYXBlLG4uc3BlY2lhbChuLnN0cmluZyldLGNsYXNzOlwidG9rLXN0cmluZzJcIn0se3RhZzpuLnZhcmlhYmxlTmFtZSxjbGFzczpcInRvay12YXJpYWJsZU5hbWVcIn0se3RhZzpuLmxvY2FsKG4udmFyaWFibGVOYW1lKSxjbGFzczpcInRvay12YXJpYWJsZU5hbWUgdG9rLWxvY2FsXCJ9LHt0YWc6bi5kZWZpbml0aW9uKG4udmFyaWFibGVOYW1lKSxjbGFzczpcInRvay12YXJpYWJsZU5hbWUgdG9rLWRlZmluaXRpb25cIn0se3RhZzpuLnNwZWNpYWwobi52YXJpYWJsZU5hbWUpLGNsYXNzOlwidG9rLXZhcmlhYmxlTmFtZTJcIn0se3RhZzpuLmRlZmluaXRpb24obi5wcm9wZXJ0eU5hbWUpLGNsYXNzOlwidG9rLXByb3BlcnR5TmFtZSB0b2stZGVmaW5pdGlvblwifSx7dGFnOm4udHlwZU5hbWUsY2xhc3M6XCJ0b2stdHlwZU5hbWVcIn0se3RhZzpuLm5hbWVzcGFjZSxjbGFzczpcInRvay1uYW1lc3BhY2VcIn0se3RhZzpuLmNsYXNzTmFtZSxjbGFzczpcInRvay1jbGFzc05hbWVcIn0se3RhZzpuLm1hY3JvTmFtZSxjbGFzczpcInRvay1tYWNyb05hbWVcIn0se3RhZzpuLnByb3BlcnR5TmFtZSxjbGFzczpcInRvay1wcm9wZXJ0eU5hbWVcIn0se3RhZzpuLm9wZXJhdG9yLGNsYXNzOlwidG9rLW9wZXJhdG9yXCJ9LHt0YWc6bi5jb21tZW50LGNsYXNzOlwidG9rLWNvbW1lbnRcIn0se3RhZzpuLm1ldGEsY2xhc3M6XCJ0b2stbWV0YVwifSx7dGFnOm4uaW52YWxpZCxjbGFzczpcInRvay1pbnZhbGlkXCJ9LHt0YWc6bi5wdW5jdHVhdGlvbixjbGFzczpcInRvay1wdW5jdHVhdGlvblwifV0pO2V4cG9ydHtmIGFzIFRhZyx0dCBhcyBjbGFzc0hpZ2hsaWdodGVyLFkgYXMgZ2V0U3R5bGVUYWdzLF8gYXMgaGlnaGxpZ2h0VHJlZSwkIGFzIHN0eWxlVGFncyxXIGFzIHRhZ0hpZ2hsaWdodGVyLG4gYXMgdGFnc307XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGxlemVyL21hcmtkb3duQDEuMC4yKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydHtOb2RlVHlwZSBhcyBULE5vZGVQcm9wIGFzIFAsTm9kZVNldCBhcyBwdCxUcmVlIGFzIEEsUGFyc2VyIGFzIHl0LHBhcnNlTWl4ZWQgYXMgWHR9ZnJvbVwiQGxlemVyL2NvbW1vblwiO2ltcG9ydHtzdHlsZVRhZ3MgYXMgY3QsdGFncyBhcyBwLFRhZyBhcyBqdH1mcm9tXCJAbGV6ZXIvaGlnaGxpZ2h0XCI7dmFyIEU9Y2xhc3N7Y29uc3RydWN0b3IodCxzLHIsbixpLG8sYSl7dGhpcy50eXBlPXQsdGhpcy52YWx1ZT1zLHRoaXMuZnJvbT1yLHRoaXMuaGFzaD1uLHRoaXMuZW5kPWksdGhpcy5jaGlsZHJlbj1vLHRoaXMucG9zaXRpb25zPWEsdGhpcy5oYXNoUHJvcD1bW1AuY29udGV4dEhhc2gsbl1dfXN0YXRpYyBjcmVhdGUodCxzLHIsbixpKXtsZXQgbz1uKyhuPDw4KSt0KyhzPDw0KXwwO3JldHVybiBuZXcgRSh0LHMscixvLGksW10sW10pfWFkZENoaWxkKHQscyl7dC5wcm9wKFAuY29udGV4dEhhc2gpIT10aGlzLmhhc2gmJih0PW5ldyBBKHQudHlwZSx0LmNoaWxkcmVuLHQucG9zaXRpb25zLHQubGVuZ3RoLHRoaXMuaGFzaFByb3ApKSx0aGlzLmNoaWxkcmVuLnB1c2godCksdGhpcy5wb3NpdGlvbnMucHVzaChzKX10b1RyZWUodCxzPXRoaXMuZW5kKXtsZXQgcj10aGlzLmNoaWxkcmVuLmxlbmd0aC0xO3JldHVybiByPj0wJiYocz1NYXRoLm1heChzLHRoaXMucG9zaXRpb25zW3JdK3RoaXMuY2hpbGRyZW5bcl0ubGVuZ3RoK3RoaXMuZnJvbSkpLG5ldyBBKHQudHlwZXNbdGhpcy50eXBlXSx0aGlzLmNoaWxkcmVuLHRoaXMucG9zaXRpb25zLHMtdGhpcy5mcm9tKS5iYWxhbmNlKHttYWtlVHJlZTooaSxvLGEpPT5uZXcgQShULm5vbmUsaSxvLGEsdGhpcy5oYXNoUHJvcCl9KX19LGg7KGZ1bmN0aW9uKGUpe2VbZS5Eb2N1bWVudD0xXT1cIkRvY3VtZW50XCIsZVtlLkNvZGVCbG9jaz0yXT1cIkNvZGVCbG9ja1wiLGVbZS5GZW5jZWRDb2RlPTNdPVwiRmVuY2VkQ29kZVwiLGVbZS5CbG9ja3F1b3RlPTRdPVwiQmxvY2txdW90ZVwiLGVbZS5Ib3Jpem9udGFsUnVsZT01XT1cIkhvcml6b250YWxSdWxlXCIsZVtlLkJ1bGxldExpc3Q9Nl09XCJCdWxsZXRMaXN0XCIsZVtlLk9yZGVyZWRMaXN0PTddPVwiT3JkZXJlZExpc3RcIixlW2UuTGlzdEl0ZW09OF09XCJMaXN0SXRlbVwiLGVbZS5BVFhIZWFkaW5nMT05XT1cIkFUWEhlYWRpbmcxXCIsZVtlLkFUWEhlYWRpbmcyPTEwXT1cIkFUWEhlYWRpbmcyXCIsZVtlLkFUWEhlYWRpbmczPTExXT1cIkFUWEhlYWRpbmczXCIsZVtlLkFUWEhlYWRpbmc0PTEyXT1cIkFUWEhlYWRpbmc0XCIsZVtlLkFUWEhlYWRpbmc1PTEzXT1cIkFUWEhlYWRpbmc1XCIsZVtlLkFUWEhlYWRpbmc2PTE0XT1cIkFUWEhlYWRpbmc2XCIsZVtlLlNldGV4dEhlYWRpbmcxPTE1XT1cIlNldGV4dEhlYWRpbmcxXCIsZVtlLlNldGV4dEhlYWRpbmcyPTE2XT1cIlNldGV4dEhlYWRpbmcyXCIsZVtlLkhUTUxCbG9jaz0xN109XCJIVE1MQmxvY2tcIixlW2UuTGlua1JlZmVyZW5jZT0xOF09XCJMaW5rUmVmZXJlbmNlXCIsZVtlLlBhcmFncmFwaD0xOV09XCJQYXJhZ3JhcGhcIixlW2UuQ29tbWVudEJsb2NrPTIwXT1cIkNvbW1lbnRCbG9ja1wiLGVbZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25CbG9jaz0yMV09XCJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25CbG9ja1wiLGVbZS5Fc2NhcGU9MjJdPVwiRXNjYXBlXCIsZVtlLkVudGl0eT0yM109XCJFbnRpdHlcIixlW2UuSGFyZEJyZWFrPTI0XT1cIkhhcmRCcmVha1wiLGVbZS5FbXBoYXNpcz0yNV09XCJFbXBoYXNpc1wiLGVbZS5TdHJvbmdFbXBoYXNpcz0yNl09XCJTdHJvbmdFbXBoYXNpc1wiLGVbZS5MaW5rPTI3XT1cIkxpbmtcIixlW2UuSW1hZ2U9MjhdPVwiSW1hZ2VcIixlW2UuSW5saW5lQ29kZT0yOV09XCJJbmxpbmVDb2RlXCIsZVtlLkhUTUxUYWc9MzBdPVwiSFRNTFRhZ1wiLGVbZS5Db21tZW50PTMxXT1cIkNvbW1lbnRcIixlW2UuUHJvY2Vzc2luZ0luc3RydWN0aW9uPTMyXT1cIlByb2Nlc3NpbmdJbnN0cnVjdGlvblwiLGVbZS5VUkw9MzNdPVwiVVJMXCIsZVtlLkhlYWRlck1hcms9MzRdPVwiSGVhZGVyTWFya1wiLGVbZS5RdW90ZU1hcms9MzVdPVwiUXVvdGVNYXJrXCIsZVtlLkxpc3RNYXJrPTM2XT1cIkxpc3RNYXJrXCIsZVtlLkxpbmtNYXJrPTM3XT1cIkxpbmtNYXJrXCIsZVtlLkVtcGhhc2lzTWFyaz0zOF09XCJFbXBoYXNpc01hcmtcIixlW2UuQ29kZU1hcms9MzldPVwiQ29kZU1hcmtcIixlW2UuQ29kZVRleHQ9NDBdPVwiQ29kZVRleHRcIixlW2UuQ29kZUluZm89NDFdPVwiQ29kZUluZm9cIixlW2UuTGlua1RpdGxlPTQyXT1cIkxpbmtUaXRsZVwiLGVbZS5MaW5rTGFiZWw9NDNdPVwiTGlua0xhYmVsXCJ9KShofHwoaD17fSkpO3ZhciBxPWNsYXNze2NvbnN0cnVjdG9yKHQscyl7dGhpcy5zdGFydD10LHRoaXMuY29udGVudD1zLHRoaXMubWFya3M9W10sdGhpcy5wYXJzZXJzPVtdfX0sUT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudGV4dD1cIlwiLHRoaXMuYmFzZUluZGVudD0wLHRoaXMuYmFzZVBvcz0wLHRoaXMuZGVwdGg9MCx0aGlzLm1hcmtlcnM9W10sdGhpcy5wb3M9MCx0aGlzLmluZGVudD0wLHRoaXMubmV4dD0tMX1mb3J3YXJkKCl7dGhpcy5iYXNlUG9zPnRoaXMucG9zJiZ0aGlzLmZvcndhcmRJbm5lcigpfWZvcndhcmRJbm5lcigpe2xldCB0PXRoaXMuc2tpcFNwYWNlKHRoaXMuYmFzZVBvcyk7dGhpcy5pbmRlbnQ9dGhpcy5jb3VudEluZGVudCh0LHRoaXMucG9zLHRoaXMuaW5kZW50KSx0aGlzLnBvcz10LHRoaXMubmV4dD10PT10aGlzLnRleHQubGVuZ3RoPy0xOnRoaXMudGV4dC5jaGFyQ29kZUF0KHQpfXNraXBTcGFjZSh0KXtyZXR1cm4geCh0aGlzLnRleHQsdCl9cmVzZXQodCl7Zm9yKHRoaXMudGV4dD10LHRoaXMuYmFzZUluZGVudD10aGlzLmJhc2VQb3M9dGhpcy5wb3M9dGhpcy5pbmRlbnQ9MCx0aGlzLmZvcndhcmRJbm5lcigpLHRoaXMuZGVwdGg9MTt0aGlzLm1hcmtlcnMubGVuZ3RoOyl0aGlzLm1hcmtlcnMucG9wKCl9bW92ZUJhc2UodCl7dGhpcy5iYXNlUG9zPXQsdGhpcy5iYXNlSW5kZW50PXRoaXMuY291bnRJbmRlbnQodCx0aGlzLnBvcyx0aGlzLmluZGVudCl9bW92ZUJhc2VDb2x1bW4odCl7dGhpcy5iYXNlSW5kZW50PXQsdGhpcy5iYXNlUG9zPXRoaXMuZmluZENvbHVtbih0KX1hZGRNYXJrZXIodCl7dGhpcy5tYXJrZXJzLnB1c2godCl9Y291bnRJbmRlbnQodCxzPTAscj0wKXtmb3IobGV0IG49cztuPHQ7bisrKXIrPXRoaXMudGV4dC5jaGFyQ29kZUF0KG4pPT05PzQtciU0OjE7cmV0dXJuIHJ9ZmluZENvbHVtbih0KXtsZXQgcz0wO2ZvcihsZXQgcj0wO3M8dGhpcy50ZXh0Lmxlbmd0aCYmcjx0O3MrKylyKz10aGlzLnRleHQuY2hhckNvZGVBdChzKT09OT80LXIlNDoxO3JldHVybiBzfXNjcnViKCl7aWYoIXRoaXMuYmFzZUluZGVudClyZXR1cm4gdGhpcy50ZXh0O2xldCB0PVwiXCI7Zm9yKGxldCBzPTA7czx0aGlzLmJhc2VQb3M7cysrKXQrPVwiIFwiO3JldHVybiB0K3RoaXMudGV4dC5zbGljZSh0aGlzLmJhc2VQb3MpfX07ZnVuY3Rpb24gb3QoZSx0LHMpe2lmKHMucG9zPT1zLnRleHQubGVuZ3RofHxlIT10LmJsb2NrJiZzLmluZGVudD49dC5zdGFja1tzLmRlcHRoKzFdLnZhbHVlK3MuYmFzZUluZGVudClyZXR1cm4hMDtpZihzLmluZGVudD49cy5iYXNlSW5kZW50KzQpcmV0dXJuITE7bGV0IHI9KGUudHlwZT09aC5PcmRlcmVkTGlzdD9pdDpudCkocyx0LCExKTtyZXR1cm4gcj4wJiYoZS50eXBlIT1oLkJ1bGxldExpc3R8fHJ0KHMsdCwhMSk8MCkmJnMudGV4dC5jaGFyQ29kZUF0KHMucG9zK3ItMSk9PWUudmFsdWV9dmFyIGd0PXtbaC5CbG9ja3F1b3RlXShlLHQscyl7cmV0dXJuIHMubmV4dCE9NjI/ITE6KHMubWFya2Vycy5wdXNoKGMoaC5RdW90ZU1hcmssdC5saW5lU3RhcnQrcy5wb3MsdC5saW5lU3RhcnQrcy5wb3MrMSkpLHMubW92ZUJhc2Uocy5wb3MrKFMocy50ZXh0LmNoYXJDb2RlQXQocy5wb3MrMSkpPzI6MSkpLGUuZW5kPXQubGluZVN0YXJ0K3MudGV4dC5sZW5ndGgsITApfSxbaC5MaXN0SXRlbV0oZSx0LHMpe3JldHVybiBzLmluZGVudDxzLmJhc2VJbmRlbnQrZS52YWx1ZSYmcy5uZXh0Pi0xPyExOihzLm1vdmVCYXNlQ29sdW1uKHMuYmFzZUluZGVudCtlLnZhbHVlKSwhMCl9LFtoLk9yZGVyZWRMaXN0XTpvdCxbaC5CdWxsZXRMaXN0XTpvdCxbaC5Eb2N1bWVudF0oKXtyZXR1cm4hMH19O2Z1bmN0aW9uIFMoZSl7cmV0dXJuIGU9PTMyfHxlPT05fHxlPT0xMHx8ZT09MTN9ZnVuY3Rpb24geChlLHQ9MCl7Zm9yKDt0PGUubGVuZ3RoJiZTKGUuY2hhckNvZGVBdCh0KSk7KXQrKztyZXR1cm4gdH1mdW5jdGlvbiBodChlLHQscyl7Zm9yKDt0PnMmJlMoZS5jaGFyQ29kZUF0KHQtMSkpOyl0LS07cmV0dXJuIHR9ZnVuY3Rpb24gbXQoZSl7aWYoZS5uZXh0IT05NiYmZS5uZXh0IT0xMjYpcmV0dXJuLTE7bGV0IHQ9ZS5wb3MrMTtmb3IoO3Q8ZS50ZXh0Lmxlbmd0aCYmZS50ZXh0LmNoYXJDb2RlQXQodCk9PWUubmV4dDspdCsrO2lmKHQ8ZS5wb3MrMylyZXR1cm4tMTtpZihlLm5leHQ9PTk2KXtmb3IobGV0IHM9dDtzPGUudGV4dC5sZW5ndGg7cysrKWlmKGUudGV4dC5jaGFyQ29kZUF0KHMpPT05NilyZXR1cm4tMX1yZXR1cm4gdH1mdW5jdGlvbiBrdChlKXtyZXR1cm4gZS5uZXh0IT02Mj8tMTplLnRleHQuY2hhckNvZGVBdChlLnBvcysxKT09MzI/MjoxfWZ1bmN0aW9uIHJ0KGUsdCxzKXtpZihlLm5leHQhPTQyJiZlLm5leHQhPTQ1JiZlLm5leHQhPTk1KXJldHVybi0xO2xldCByPTE7Zm9yKGxldCBuPWUucG9zKzE7bjxlLnRleHQubGVuZ3RoO24rKyl7bGV0IGk9ZS50ZXh0LmNoYXJDb2RlQXQobik7aWYoaT09ZS5uZXh0KXIrKztlbHNlIGlmKCFTKGkpKXJldHVybi0xfXJldHVybiBzJiZlLm5leHQ9PTQ1JiZTdChlKT4tMSYmZS5kZXB0aD09dC5zdGFjay5sZW5ndGh8fHI8Mz8tMToxfWZ1bmN0aW9uIEx0KGUsdCl7Zm9yKGxldCBzPWUuc3RhY2subGVuZ3RoLTE7cz49MDtzLS0paWYoZS5zdGFja1tzXS50eXBlPT10KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIG50KGUsdCxzKXtyZXR1cm4oZS5uZXh0PT00NXx8ZS5uZXh0PT00M3x8ZS5uZXh0PT00MikmJihlLnBvcz09ZS50ZXh0Lmxlbmd0aC0xfHxTKGUudGV4dC5jaGFyQ29kZUF0KGUucG9zKzEpKSkmJighc3x8THQodCxoLkJ1bGxldExpc3QpfHxlLnNraXBTcGFjZShlLnBvcysyKTxlLnRleHQubGVuZ3RoKT8xOi0xfWZ1bmN0aW9uIGl0KGUsdCxzKXtsZXQgcj1lLnBvcyxuPWUubmV4dDtmb3IoO24+PTQ4JiZuPD01Nzspe3IrKztpZihyPT1lLnRleHQubGVuZ3RoKXJldHVybi0xO249ZS50ZXh0LmNoYXJDb2RlQXQocil9cmV0dXJuIHI9PWUucG9zfHxyPmUucG9zKzl8fG4hPTQ2JiZuIT00MXx8cjxlLnRleHQubGVuZ3RoLTEmJiFTKGUudGV4dC5jaGFyQ29kZUF0KHIrMSkpfHxzJiYhTHQodCxoLk9yZGVyZWRMaXN0KSYmKGUuc2tpcFNwYWNlKHIrMSk9PWUudGV4dC5sZW5ndGh8fHI+ZS5wb3MrMXx8ZS5uZXh0IT00OSk/LTE6cisxLWUucG9zfWZ1bmN0aW9uIGJ0KGUpe2lmKGUubmV4dCE9MzUpcmV0dXJuLTE7bGV0IHQ9ZS5wb3MrMTtmb3IoO3Q8ZS50ZXh0Lmxlbmd0aCYmZS50ZXh0LmNoYXJDb2RlQXQodCk9PTM1Oyl0Kys7aWYodDxlLnRleHQubGVuZ3RoJiZlLnRleHQuY2hhckNvZGVBdCh0KSE9MzIpcmV0dXJuLTE7bGV0IHM9dC1lLnBvcztyZXR1cm4gcz42Py0xOnN9ZnVuY3Rpb24gU3QoZSl7aWYoZS5uZXh0IT00NSYmZS5uZXh0IT02MXx8ZS5pbmRlbnQ+PWUuYmFzZUluZGVudCs0KXJldHVybi0xO2xldCB0PWUucG9zKzE7Zm9yKDt0PGUudGV4dC5sZW5ndGgmJmUudGV4dC5jaGFyQ29kZUF0KHQpPT1lLm5leHQ7KXQrKztsZXQgcz10O2Zvcig7dDxlLnRleHQubGVuZ3RoJiZTKGUudGV4dC5jaGFyQ29kZUF0KHQpKTspdCsrO3JldHVybiB0PT1lLnRleHQubGVuZ3RoP3M6LTF9dmFyIFo9L15bIFxcdF0qJC8sQ3Q9Ly0tPi8sd3Q9L1xcPz4vLEc9W1svXjwoPzpzY3JpcHR8cHJlfHN0eWxlKSg/Olxcc3w+fCQpL2ksLzxcXC8oPzpzY3JpcHR8cHJlfHN0eWxlKT4vaV0sWy9eXFxzKjwhLS0vLEN0XSxbL15cXHMqPFxcPy8sd3RdLFsvXlxccyo8IVtBLVpdLywvPi9dLFsvXlxccyo8IVxcW0NEQVRBXFxbLywvXFxdXFxdPi9dLFsvXlxccyo8XFwvPyg/OmFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoMXxoMnxoM3xoNHxoNXxoNnxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwpKD86XFxzfFxcLz8+fCQpL2ksWl0sWy9eXFxzKig/OjxcXC9bYS16XVtcXHctXSpcXHMqPnw8W2Etel1bXFx3LV0qKFxccytbYS16Ol9dW1xcdy0uXSooPzpcXHMqPVxccyooPzpbXlxcc1wiJz08PmBdK3wnW14nXSonfFwiW15cIl0qXCIpKT8pKlxccyo+KVxccyokL2ksWl1dO2Z1bmN0aW9uIEF0KGUsdCxzKXtpZihlLm5leHQhPTYwKXJldHVybi0xO2xldCByPWUudGV4dC5zbGljZShlLnBvcyk7Zm9yKGxldCBuPTAsaT1HLmxlbmd0aC0ocz8xOjApO248aTtuKyspaWYoR1tuXVswXS50ZXN0KHIpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIGx0KGUsdCl7bGV0IHM9ZS5jb3VudEluZGVudCh0LGUucG9zLGUuaW5kZW50KSxyPWUuY291bnRJbmRlbnQoZS5za2lwU3BhY2UodCksdCxzKTtyZXR1cm4gcj49cys1P3MrMTpyfWZ1bmN0aW9uIEMoZSx0LHMpe2xldCByPWUubGVuZ3RoLTE7cj49MCYmZVtyXS50bz09dCYmZVtyXS50eXBlPT1oLkNvZGVUZXh0P2Vbcl0udG89czplLnB1c2goYyhoLkNvZGVUZXh0LHQscykpfXZhciBPPXtMaW5rUmVmZXJlbmNlOnZvaWQgMCxJbmRlbnRlZENvZGUoZSx0KXtsZXQgcz10LmJhc2VJbmRlbnQrNDtpZih0LmluZGVudDxzKXJldHVybiExO2xldCByPXQuZmluZENvbHVtbihzKSxuPWUubGluZVN0YXJ0K3IsaT1lLmxpbmVTdGFydCt0LnRleHQubGVuZ3RoLG89W10sYT1bXTtmb3IoQyhvLG4saSk7ZS5uZXh0TGluZSgpJiZ0LmRlcHRoPj1lLnN0YWNrLmxlbmd0aDspaWYodC5wb3M9PXQudGV4dC5sZW5ndGgpe0MoYSxlLmxpbmVTdGFydC0xLGUubGluZVN0YXJ0KTtmb3IobGV0IGwgb2YgdC5tYXJrZXJzKWEucHVzaChsKX1lbHNle2lmKHQuaW5kZW50PHMpYnJlYWs7e2lmKGEubGVuZ3RoKXtmb3IobGV0IGQgb2YgYSlkLnR5cGU9PWguQ29kZVRleHQ/QyhvLGQuZnJvbSxkLnRvKTpvLnB1c2goZCk7YT1bXX1DKG8sZS5saW5lU3RhcnQtMSxlLmxpbmVTdGFydCk7Zm9yKGxldCBkIG9mIHQubWFya2VycylvLnB1c2goZCk7aT1lLmxpbmVTdGFydCt0LnRleHQubGVuZ3RoO2xldCBsPWUubGluZVN0YXJ0K3QuZmluZENvbHVtbih0LmJhc2VJbmRlbnQrNCk7bDxpJiZDKG8sbCxpKX19cmV0dXJuIGEubGVuZ3RoJiYoYT1hLmZpbHRlcihsPT5sLnR5cGUhPWguQ29kZVRleHQpLGEubGVuZ3RoJiYodC5tYXJrZXJzPWEuY29uY2F0KHQubWFya2VycykpKSxlLmFkZE5vZGUoZS5idWZmZXIud3JpdGVFbGVtZW50cyhvLC1uKS5maW5pc2goaC5Db2RlQmxvY2ssaS1uKSxuKSwhMH0sRmVuY2VkQ29kZShlLHQpe2xldCBzPW10KHQpO2lmKHM8MClyZXR1cm4hMTtsZXQgcj1lLmxpbmVTdGFydCt0LnBvcyxuPXQubmV4dCxpPXMtdC5wb3Msbz10LnNraXBTcGFjZShzKSxhPWh0KHQudGV4dCx0LnRleHQubGVuZ3RoLG8pLGw9W2MoaC5Db2RlTWFyayxyLHIraSldO288YSYmbC5wdXNoKGMoaC5Db2RlSW5mbyxlLmxpbmVTdGFydCtvLGUubGluZVN0YXJ0K2EpKTtmb3IobGV0IGQ9ITA7ZS5uZXh0TGluZSgpJiZ0LmRlcHRoPj1lLnN0YWNrLmxlbmd0aDtkPSExKXtsZXQgdT10LnBvcztpZih0LmluZGVudC10LmJhc2VJbmRlbnQ8NClmb3IoO3U8dC50ZXh0Lmxlbmd0aCYmdC50ZXh0LmNoYXJDb2RlQXQodSk9PW47KXUrKztpZih1LXQucG9zPj1pJiZ0LnNraXBTcGFjZSh1KT09dC50ZXh0Lmxlbmd0aCl7Zm9yKGxldCBnIG9mIHQubWFya2VycylsLnB1c2goZyk7bC5wdXNoKGMoaC5Db2RlTWFyayxlLmxpbmVTdGFydCt0LnBvcyxlLmxpbmVTdGFydCt1KSksZS5uZXh0TGluZSgpO2JyZWFrfWVsc2V7ZHx8QyhsLGUubGluZVN0YXJ0LTEsZS5saW5lU3RhcnQpO2ZvcihsZXQgbSBvZiB0Lm1hcmtlcnMpbC5wdXNoKG0pO2xldCBnPWUubGluZVN0YXJ0K3QuYmFzZVBvcyxmPWUubGluZVN0YXJ0K3QudGV4dC5sZW5ndGg7ZzxmJiZDKGwsZyxmKX19cmV0dXJuIGUuYWRkTm9kZShlLmJ1ZmZlci53cml0ZUVsZW1lbnRzKGwsLXIpLmZpbmlzaChoLkZlbmNlZENvZGUsZS5wcmV2TGluZUVuZCgpLXIpLHIpLCEwfSxCbG9ja3F1b3RlKGUsdCl7bGV0IHM9a3QodCk7cmV0dXJuIHM8MD8hMTooZS5zdGFydENvbnRleHQoaC5CbG9ja3F1b3RlLHQucG9zKSxlLmFkZE5vZGUoaC5RdW90ZU1hcmssZS5saW5lU3RhcnQrdC5wb3MsZS5saW5lU3RhcnQrdC5wb3MrMSksdC5tb3ZlQmFzZSh0LnBvcytzKSxudWxsKX0sSG9yaXpvbnRhbFJ1bGUoZSx0KXtpZihydCh0LGUsITEpPDApcmV0dXJuITE7bGV0IHM9ZS5saW5lU3RhcnQrdC5wb3M7cmV0dXJuIGUubmV4dExpbmUoKSxlLmFkZE5vZGUoaC5Ib3Jpem9udGFsUnVsZSxzKSwhMH0sQnVsbGV0TGlzdChlLHQpe2xldCBzPW50KHQsZSwhMSk7aWYoczwwKXJldHVybiExO2UuYmxvY2sudHlwZSE9aC5CdWxsZXRMaXN0JiZlLnN0YXJ0Q29udGV4dChoLkJ1bGxldExpc3QsdC5iYXNlUG9zLHQubmV4dCk7bGV0IHI9bHQodCx0LnBvcysxKTtyZXR1cm4gZS5zdGFydENvbnRleHQoaC5MaXN0SXRlbSx0LmJhc2VQb3Msci10LmJhc2VJbmRlbnQpLGUuYWRkTm9kZShoLkxpc3RNYXJrLGUubGluZVN0YXJ0K3QucG9zLGUubGluZVN0YXJ0K3QucG9zK3MpLHQubW92ZUJhc2VDb2x1bW4ociksbnVsbH0sT3JkZXJlZExpc3QoZSx0KXtsZXQgcz1pdCh0LGUsITEpO2lmKHM8MClyZXR1cm4hMTtlLmJsb2NrLnR5cGUhPWguT3JkZXJlZExpc3QmJmUuc3RhcnRDb250ZXh0KGguT3JkZXJlZExpc3QsdC5iYXNlUG9zLHQudGV4dC5jaGFyQ29kZUF0KHQucG9zK3MtMSkpO2xldCByPWx0KHQsdC5wb3Mrcyk7cmV0dXJuIGUuc3RhcnRDb250ZXh0KGguTGlzdEl0ZW0sdC5iYXNlUG9zLHItdC5iYXNlSW5kZW50KSxlLmFkZE5vZGUoaC5MaXN0TWFyayxlLmxpbmVTdGFydCt0LnBvcyxlLmxpbmVTdGFydCt0LnBvcytzKSx0Lm1vdmVCYXNlQ29sdW1uKHIpLG51bGx9LEFUWEhlYWRpbmcoZSx0KXtsZXQgcz1idCh0KTtpZihzPDApcmV0dXJuITE7bGV0IHI9dC5wb3Msbj1lLmxpbmVTdGFydCtyLGk9aHQodC50ZXh0LHQudGV4dC5sZW5ndGgsciksbz1pO2Zvcig7bz5yJiZ0LnRleHQuY2hhckNvZGVBdChvLTEpPT10Lm5leHQ7KW8tLTsobz09aXx8bz09cnx8IVModC50ZXh0LmNoYXJDb2RlQXQoby0xKSkpJiYobz10LnRleHQubGVuZ3RoKTtsZXQgYT1lLmJ1ZmZlci53cml0ZShoLkhlYWRlck1hcmssMCxzKS53cml0ZUVsZW1lbnRzKGUucGFyc2VyLnBhcnNlSW5saW5lKHQudGV4dC5zbGljZShyK3MrMSxvKSxuK3MrMSksLW4pO288dC50ZXh0Lmxlbmd0aCYmYS53cml0ZShoLkhlYWRlck1hcmssby1yLGktcik7bGV0IGw9YS5maW5pc2goaC5BVFhIZWFkaW5nMS0xK3MsdC50ZXh0Lmxlbmd0aC1yKTtyZXR1cm4gZS5uZXh0TGluZSgpLGUuYWRkTm9kZShsLG4pLCEwfSxIVE1MQmxvY2soZSx0KXtsZXQgcz1BdCh0LGUsITEpO2lmKHM8MClyZXR1cm4hMTtsZXQgcj1lLmxpbmVTdGFydCt0LnBvcyxuPUdbc11bMV0saT1bXSxvPW4hPVo7Zm9yKDshbi50ZXN0KHQudGV4dCkmJmUubmV4dExpbmUoKTspe2lmKHQuZGVwdGg8ZS5zdGFjay5sZW5ndGgpe289ITE7YnJlYWt9Zm9yKGxldCBkIG9mIHQubWFya2VycylpLnB1c2goZCl9byYmZS5uZXh0TGluZSgpO2xldCBhPW49PUN0P2guQ29tbWVudEJsb2NrOm49PXd0P2guUHJvY2Vzc2luZ0luc3RydWN0aW9uQmxvY2s6aC5IVE1MQmxvY2ssbD1lLnByZXZMaW5lRW5kKCk7cmV0dXJuIGUuYWRkTm9kZShlLmJ1ZmZlci53cml0ZUVsZW1lbnRzKGksLXIpLmZpbmlzaChhLGwtciksciksITB9LFNldGV4dEhlYWRpbmc6dm9pZCAwfSxWPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RhZ2U9MCx0aGlzLmVsdHM9W10sdGhpcy5wb3M9MCx0aGlzLnN0YXJ0PXQuc3RhcnQsdGhpcy5hZHZhbmNlKHQuY29udGVudCl9bmV4dExpbmUodCxzLHIpe2lmKHRoaXMuc3RhZ2U9PS0xKXJldHVybiExO2xldCBuPXIuY29udGVudCtgXG5gK3Muc2NydWIoKSxpPXRoaXMuYWR2YW5jZShuKTtyZXR1cm4gaT4tMSYmaTxuLmxlbmd0aD90aGlzLmNvbXBsZXRlKHQscixpKTohMX1maW5pc2godCxzKXtyZXR1cm4odGhpcy5zdGFnZT09Mnx8dGhpcy5zdGFnZT09MykmJngocy5jb250ZW50LHRoaXMucG9zKT09cy5jb250ZW50Lmxlbmd0aD90aGlzLmNvbXBsZXRlKHQscyxzLmNvbnRlbnQubGVuZ3RoKTohMX1jb21wbGV0ZSh0LHMscil7cmV0dXJuIHQuYWRkTGVhZkVsZW1lbnQocyxjKGguTGlua1JlZmVyZW5jZSx0aGlzLnN0YXJ0LHRoaXMuc3RhcnQrcix0aGlzLmVsdHMpKSwhMH1uZXh0U3RhZ2UodCl7cmV0dXJuIHQ/KHRoaXMucG9zPXQudG8tdGhpcy5zdGFydCx0aGlzLmVsdHMucHVzaCh0KSx0aGlzLnN0YWdlKyssITApOih0PT09ITEmJih0aGlzLnN0YWdlPS0xKSwhMSl9YWR2YW5jZSh0KXtmb3IoOzspe2lmKHRoaXMuc3RhZ2U9PS0xKXJldHVybi0xO2lmKHRoaXMuc3RhZ2U9PTApe2lmKCF0aGlzLm5leHRTdGFnZSh2dCh0LHRoaXMucG9zLHRoaXMuc3RhcnQsITApKSlyZXR1cm4tMTtpZih0LmNoYXJDb2RlQXQodGhpcy5wb3MpIT01OClyZXR1cm4gdGhpcy5zdGFnZT0tMTt0aGlzLmVsdHMucHVzaChjKGguTGlua01hcmssdGhpcy5wb3MrdGhpcy5zdGFydCx0aGlzLnBvcyt0aGlzLnN0YXJ0KzEpKSx0aGlzLnBvcysrfWVsc2UgaWYodGhpcy5zdGFnZT09MSl7aWYoIXRoaXMubmV4dFN0YWdlKE10KHQseCh0LHRoaXMucG9zKSx0aGlzLnN0YXJ0KSkpcmV0dXJuLTF9ZWxzZSBpZih0aGlzLnN0YWdlPT0yKXtsZXQgcz14KHQsdGhpcy5wb3MpLHI9MDtpZihzPnRoaXMucG9zKXtsZXQgbj14dCh0LHMsdGhpcy5zdGFydCk7aWYobil7bGV0IGk9Xyh0LG4udG8tdGhpcy5zdGFydCk7aT4wJiYodGhpcy5uZXh0U3RhZ2Uobikscj1pKX19cmV0dXJuIHJ8fChyPV8odCx0aGlzLnBvcykpLHI+MCYmcjx0Lmxlbmd0aD9yOi0xfWVsc2UgcmV0dXJuIF8odCx0aGlzLnBvcyl9fX07ZnVuY3Rpb24gXyhlLHQpe2Zvcig7dDxlLmxlbmd0aDt0Kyspe2xldCBzPWUuY2hhckNvZGVBdCh0KTtpZihzPT0xMClicmVhaztpZighUyhzKSlyZXR1cm4tMX1yZXR1cm4gdH12YXIgSj1jbGFzc3tuZXh0TGluZSh0LHMscil7bGV0IG49cy5kZXB0aDx0LnN0YWNrLmxlbmd0aD8tMTpTdChzKSxpPXMubmV4dDtpZihuPDApcmV0dXJuITE7bGV0IG89YyhoLkhlYWRlck1hcmssdC5saW5lU3RhcnQrcy5wb3MsdC5saW5lU3RhcnQrbik7cmV0dXJuIHQubmV4dExpbmUoKSx0LmFkZExlYWZFbGVtZW50KHIsYyhpPT02MT9oLlNldGV4dEhlYWRpbmcxOmguU2V0ZXh0SGVhZGluZzIsci5zdGFydCx0LnByZXZMaW5lRW5kKCksWy4uLnQucGFyc2VyLnBhcnNlSW5saW5lKHIuY29udGVudCxyLnN0YXJ0KSxvXSkpLCEwfWZpbmlzaCgpe3JldHVybiExfX0sVHQ9e0xpbmtSZWZlcmVuY2UoZSx0KXtyZXR1cm4gdC5jb250ZW50LmNoYXJDb2RlQXQoMCk9PTkxP25ldyBWKHQpOm51bGx9LFNldGV4dEhlYWRpbmcoKXtyZXR1cm4gbmV3IEp9fSxEdD1bKGUsdCk9PmJ0KHQpPj0wLChlLHQpPT5tdCh0KT49MCwoZSx0KT0+a3QodCk+PTAsKGUsdCk9Pm50KHQsZSwhMCk+PTAsKGUsdCk9Pml0KHQsZSwhMCk+PTAsKGUsdCk9PnJ0KHQsZSwhMCk+PTAsKGUsdCk9PkF0KHQsZSwhMCk+PTBdLEZ0PXt0ZXh0OlwiXCIsZW5kOjB9LEs9Y2xhc3N7Y29uc3RydWN0b3IodCxzLHIsbil7dGhpcy5wYXJzZXI9dCx0aGlzLmlucHV0PXMsdGhpcy5yYW5nZXM9bix0aGlzLmxpbmU9bmV3IFEsdGhpcy5hdEVuZD0hMSx0aGlzLmRvbnRJbmplY3Q9bmV3IFNldCx0aGlzLnN0b3BwZWRBdD1udWxsLHRoaXMucmFuZ2VJPTAsdGhpcy50bz1uW24ubGVuZ3RoLTFdLnRvLHRoaXMubGluZVN0YXJ0PXRoaXMuYWJzb2x1dGVMaW5lU3RhcnQ9dGhpcy5hYnNvbHV0ZUxpbmVFbmQ9blswXS5mcm9tLHRoaXMuYmxvY2s9RS5jcmVhdGUoaC5Eb2N1bWVudCwwLHRoaXMubGluZVN0YXJ0LDAsMCksdGhpcy5zdGFjaz1bdGhpcy5ibG9ja10sdGhpcy5mcmFnbWVudHM9ci5sZW5ndGg/bmV3IGV0KHIscyk6bnVsbCx0aGlzLnJlYWRMaW5lKCl9Z2V0IHBhcnNlZFBvcygpe3JldHVybiB0aGlzLmFic29sdXRlTGluZVN0YXJ0fWFkdmFuY2UoKXtpZih0aGlzLnN0b3BwZWRBdCE9bnVsbCYmdGhpcy5hYnNvbHV0ZUxpbmVTdGFydD50aGlzLnN0b3BwZWRBdClyZXR1cm4gdGhpcy5maW5pc2goKTtsZXR7bGluZTp0fT10aGlzO2Zvcig7Oyl7Zm9yKDt0LmRlcHRoPHRoaXMuc3RhY2subGVuZ3RoOyl0aGlzLmZpbmlzaENvbnRleHQoKTtmb3IobGV0IHIgb2YgdC5tYXJrZXJzKXRoaXMuYWRkTm9kZShyLnR5cGUsci5mcm9tLHIudG8pO2lmKHQucG9zPHQudGV4dC5sZW5ndGgpYnJlYWs7aWYoIXRoaXMubmV4dExpbmUoKSlyZXR1cm4gdGhpcy5maW5pc2goKX1pZih0aGlzLmZyYWdtZW50cyYmdGhpcy5yZXVzZUZyYWdtZW50KHQuYmFzZVBvcykpcmV0dXJuIG51bGw7dDpmb3IoOzspe2ZvcihsZXQgciBvZiB0aGlzLnBhcnNlci5ibG9ja1BhcnNlcnMpaWYocil7bGV0IG49cih0aGlzLHQpO2lmKG4hPSExKXtpZihuPT0hMClyZXR1cm4gbnVsbDt0LmZvcndhcmQoKTtjb250aW51ZSB0fX1icmVha31sZXQgcz1uZXcgcSh0aGlzLmxpbmVTdGFydCt0LnBvcyx0LnRleHQuc2xpY2UodC5wb3MpKTtmb3IobGV0IHIgb2YgdGhpcy5wYXJzZXIubGVhZkJsb2NrUGFyc2VycylpZihyKXtsZXQgbj1yKHRoaXMscyk7biYmcy5wYXJzZXJzLnB1c2gobil9dDpmb3IoO3RoaXMubmV4dExpbmUoKSYmdC5wb3MhPXQudGV4dC5sZW5ndGg7KXtpZih0LmluZGVudDx0LmJhc2VJbmRlbnQrNCl7Zm9yKGxldCByIG9mIHRoaXMucGFyc2VyLmVuZExlYWZCbG9jaylpZihyKHRoaXMsdCxzKSlicmVhayB0fWZvcihsZXQgciBvZiBzLnBhcnNlcnMpaWYoci5uZXh0TGluZSh0aGlzLHQscykpcmV0dXJuIG51bGw7cy5jb250ZW50Kz1gXG5gK3Quc2NydWIoKTtmb3IobGV0IHIgb2YgdC5tYXJrZXJzKXMubWFya3MucHVzaChyKX1yZXR1cm4gdGhpcy5maW5pc2hMZWFmKHMpLG51bGx9c3RvcEF0KHQpe2lmKHRoaXMuc3RvcHBlZEF0IT1udWxsJiZ0aGlzLnN0b3BwZWRBdDx0KXRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuJ3QgbW92ZSBzdG9wcGVkQXQgZm9yd2FyZFwiKTt0aGlzLnN0b3BwZWRBdD10fXJldXNlRnJhZ21lbnQodCl7aWYoIXRoaXMuZnJhZ21lbnRzLm1vdmVUbyh0aGlzLmFic29sdXRlTGluZVN0YXJ0K3QsdGhpcy5hYnNvbHV0ZUxpbmVTdGFydCl8fCF0aGlzLmZyYWdtZW50cy5tYXRjaGVzKHRoaXMuYmxvY2suaGFzaCkpcmV0dXJuITE7bGV0IHM9dGhpcy5mcmFnbWVudHMudGFrZU5vZGVzKHRoaXMpO2lmKCFzKXJldHVybiExO2xldCByPXMsbj10aGlzLmFic29sdXRlTGluZVN0YXJ0K3M7Zm9yKGxldCBpPTE7aTx0aGlzLnJhbmdlcy5sZW5ndGg7aSsrKXtsZXQgbz10aGlzLnJhbmdlc1tpLTFdLnRvLGE9dGhpcy5yYW5nZXNbaV0uZnJvbTtvPj10aGlzLmxpbmVTdGFydCYmYTxuJiYoci09YS1vKX1yZXR1cm4gdGhpcy5saW5lU3RhcnQrPXIsdGhpcy5hYnNvbHV0ZUxpbmVTdGFydCs9cyx0aGlzLm1vdmVSYW5nZUkoKSx0aGlzLmFic29sdXRlTGluZVN0YXJ0PHRoaXMudG8/KHRoaXMubGluZVN0YXJ0KyssdGhpcy5hYnNvbHV0ZUxpbmVTdGFydCsrLHRoaXMucmVhZExpbmUoKSk6KHRoaXMuYXRFbmQ9ITAsdGhpcy5yZWFkTGluZSgpKSwhMH1nZXQgZGVwdGgoKXtyZXR1cm4gdGhpcy5zdGFjay5sZW5ndGh9cGFyZW50VHlwZSh0PXRoaXMuZGVwdGgtMSl7cmV0dXJuIHRoaXMucGFyc2VyLm5vZGVTZXQudHlwZXNbdGhpcy5zdGFja1t0XS50eXBlXX1uZXh0TGluZSgpe3JldHVybiB0aGlzLmxpbmVTdGFydCs9dGhpcy5saW5lLnRleHQubGVuZ3RoLHRoaXMuYWJzb2x1dGVMaW5lRW5kPj10aGlzLnRvPyh0aGlzLmFic29sdXRlTGluZVN0YXJ0PXRoaXMuYWJzb2x1dGVMaW5lRW5kLHRoaXMuYXRFbmQ9ITAsdGhpcy5yZWFkTGluZSgpLCExKToodGhpcy5saW5lU3RhcnQrKyx0aGlzLmFic29sdXRlTGluZVN0YXJ0PXRoaXMuYWJzb2x1dGVMaW5lRW5kKzEsdGhpcy5tb3ZlUmFuZ2VJKCksdGhpcy5yZWFkTGluZSgpLCEwKX1tb3ZlUmFuZ2VJKCl7Zm9yKDt0aGlzLnJhbmdlSTx0aGlzLnJhbmdlcy5sZW5ndGgtMSYmdGhpcy5hYnNvbHV0ZUxpbmVTdGFydD49dGhpcy5yYW5nZXNbdGhpcy5yYW5nZUldLnRvOyl0aGlzLnJhbmdlSSsrLHRoaXMuYWJzb2x1dGVMaW5lU3RhcnQ9TWF0aC5tYXgodGhpcy5hYnNvbHV0ZUxpbmVTdGFydCx0aGlzLnJhbmdlc1t0aGlzLnJhbmdlSV0uZnJvbSl9c2NhbkxpbmUodCl7bGV0IHM9RnQ7aWYocy5lbmQ9dCx0Pj10aGlzLnRvKXMudGV4dD1cIlwiO2Vsc2UgaWYocy50ZXh0PXRoaXMubGluZUNodW5rQXQodCkscy5lbmQrPXMudGV4dC5sZW5ndGgsdGhpcy5yYW5nZXMubGVuZ3RoPjEpe2xldCByPXRoaXMuYWJzb2x1dGVMaW5lU3RhcnQsbj10aGlzLnJhbmdlSTtmb3IoO3RoaXMucmFuZ2VzW25dLnRvPHMuZW5kOyl7bisrO2xldCBpPXRoaXMucmFuZ2VzW25dLmZyb20sbz10aGlzLmxpbmVDaHVua0F0KGkpO3MuZW5kPWkrby5sZW5ndGgscy50ZXh0PXMudGV4dC5zbGljZSgwLHRoaXMucmFuZ2VzW24tMV0udG8tcikrbyxyPXMuZW5kLXMudGV4dC5sZW5ndGh9fXJldHVybiBzfXJlYWRMaW5lKCl7bGV0e2xpbmU6dH09dGhpcyx7dGV4dDpzLGVuZDpyfT10aGlzLnNjYW5MaW5lKHRoaXMuYWJzb2x1dGVMaW5lU3RhcnQpO2Zvcih0aGlzLmFic29sdXRlTGluZUVuZD1yLHQucmVzZXQocyk7dC5kZXB0aDx0aGlzLnN0YWNrLmxlbmd0aDt0LmRlcHRoKyspe2xldCBuPXRoaXMuc3RhY2tbdC5kZXB0aF0saT10aGlzLnBhcnNlci5za2lwQ29udGV4dE1hcmt1cFtuLnR5cGVdO2lmKCFpKXRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBibG9jayBjb250ZXh0IFwiK2hbbi50eXBlXSk7aWYoIWkobix0aGlzLHQpKWJyZWFrO3QuZm9yd2FyZCgpfX1saW5lQ2h1bmtBdCh0KXtsZXQgcz10aGlzLmlucHV0LmNodW5rKHQpLHI7aWYodGhpcy5pbnB1dC5saW5lQ2h1bmtzKXI9cz09YFxuYD9cIlwiOnM7ZWxzZXtsZXQgbj1zLmluZGV4T2YoYFxuYCk7cj1uPDA/czpzLnNsaWNlKDAsbil9cmV0dXJuIHQrci5sZW5ndGg+dGhpcy50bz9yLnNsaWNlKDAsdGhpcy50by10KTpyfXByZXZMaW5lRW5kKCl7cmV0dXJuIHRoaXMuYXRFbmQ/dGhpcy5saW5lU3RhcnQ6dGhpcy5saW5lU3RhcnQtMX1zdGFydENvbnRleHQodCxzLHI9MCl7dGhpcy5ibG9jaz1FLmNyZWF0ZSh0LHIsdGhpcy5saW5lU3RhcnQrcyx0aGlzLmJsb2NrLmhhc2gsdGhpcy5saW5lU3RhcnQrdGhpcy5saW5lLnRleHQubGVuZ3RoKSx0aGlzLnN0YWNrLnB1c2godGhpcy5ibG9jayl9c3RhcnRDb21wb3NpdGUodCxzLHI9MCl7dGhpcy5zdGFydENvbnRleHQodGhpcy5wYXJzZXIuZ2V0Tm9kZVR5cGUodCkscyxyKX1hZGROb2RlKHQscyxyKXt0eXBlb2YgdD09XCJudW1iZXJcIiYmKHQ9bmV3IEEodGhpcy5wYXJzZXIubm9kZVNldC50eXBlc1t0XSxJLEksKHI/P3RoaXMucHJldkxpbmVFbmQoKSktcykpLHRoaXMuYmxvY2suYWRkQ2hpbGQodCxzLXRoaXMuYmxvY2suZnJvbSl9YWRkRWxlbWVudCh0KXt0aGlzLmJsb2NrLmFkZENoaWxkKHQudG9UcmVlKHRoaXMucGFyc2VyLm5vZGVTZXQpLHQuZnJvbS10aGlzLmJsb2NrLmZyb20pfWFkZExlYWZFbGVtZW50KHQscyl7dGhpcy5hZGROb2RlKHRoaXMuYnVmZmVyLndyaXRlRWxlbWVudHModHQocy5jaGlsZHJlbix0Lm1hcmtzKSwtcy5mcm9tKS5maW5pc2gocy50eXBlLHMudG8tcy5mcm9tKSxzLmZyb20pfWZpbmlzaENvbnRleHQoKXtsZXQgdD10aGlzLnN0YWNrLnBvcCgpLHM9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtzLmFkZENoaWxkKHQudG9UcmVlKHRoaXMucGFyc2VyLm5vZGVTZXQpLHQuZnJvbS1zLmZyb20pLHRoaXMuYmxvY2s9c31maW5pc2goKXtmb3IoO3RoaXMuc3RhY2subGVuZ3RoPjE7KXRoaXMuZmluaXNoQ29udGV4dCgpO3JldHVybiB0aGlzLmFkZEdhcHModGhpcy5ibG9jay50b1RyZWUodGhpcy5wYXJzZXIubm9kZVNldCx0aGlzLmxpbmVTdGFydCkpfWFkZEdhcHModCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD4xP0V0KHRoaXMucmFuZ2VzLDAsdC50b3BOb2RlLHRoaXMucmFuZ2VzWzBdLmZyb20sdGhpcy5kb250SW5qZWN0KTp0fWZpbmlzaExlYWYodCl7Zm9yKGxldCByIG9mIHQucGFyc2VycylpZihyLmZpbmlzaCh0aGlzLHQpKXJldHVybjtsZXQgcz10dCh0aGlzLnBhcnNlci5wYXJzZUlubGluZSh0LmNvbnRlbnQsdC5zdGFydCksdC5tYXJrcyk7dGhpcy5hZGROb2RlKHRoaXMuYnVmZmVyLndyaXRlRWxlbWVudHMocywtdC5zdGFydCkuZmluaXNoKGguUGFyYWdyYXBoLHQuY29udGVudC5sZW5ndGgpLHQuc3RhcnQpfWVsdCh0LHMscixuKXtyZXR1cm4gdHlwZW9mIHQ9PVwic3RyaW5nXCI/Yyh0aGlzLnBhcnNlci5nZXROb2RlVHlwZSh0KSxzLHIsbik6bmV3IFgodCxzKX1nZXQgYnVmZmVyKCl7cmV0dXJuIG5ldyB5KHRoaXMucGFyc2VyLm5vZGVTZXQpfX07ZnVuY3Rpb24gRXQoZSx0LHMscixuKXtpZihuLmhhcyhzLnRyZWUpKXJldHVybiBzLnRyZWU7bGV0IGk9ZVt0XS50byxvPVtdLGE9W10sbD1zLmZyb20rcjtmdW5jdGlvbiBkKHUsZyl7Zm9yKDtnP3U+PWk6dT5pOyl7bGV0IGY9ZVt0KzFdLmZyb20taTtyKz1mLHUrPWYsdCsrLGk9ZVt0XS50b319Zm9yKGxldCB1PXMuZmlyc3RDaGlsZDt1O3U9dS5uZXh0U2libGluZyl7ZCh1LmZyb20rciwhMCk7bGV0IGc9dS5mcm9tK3IsZjt1LnRvK3I+aT8oZj1FdChlLHQsdSxyLG4pLGQodS50bytyLCExKSk6Zj11LnRvVHJlZSgpLG8ucHVzaChmKSxhLnB1c2goZy1sKX1yZXR1cm4gZChzLnRvK3IsITEpLG5ldyBBKHMudHlwZSxvLGEscy50bytyLWwscy50cmVlP3MudHJlZS5wcm9wVmFsdWVzOnZvaWQgMCl9dmFyIE49Y2xhc3MgZXh0ZW5kcyB5dHtjb25zdHJ1Y3Rvcih0LHMscixuLGksbyxhLGwsZCl7c3VwZXIoKSx0aGlzLm5vZGVTZXQ9dCx0aGlzLmJsb2NrUGFyc2Vycz1zLHRoaXMubGVhZkJsb2NrUGFyc2Vycz1yLHRoaXMuYmxvY2tOYW1lcz1uLHRoaXMuZW5kTGVhZkJsb2NrPWksdGhpcy5za2lwQ29udGV4dE1hcmt1cD1vLHRoaXMuaW5saW5lUGFyc2Vycz1hLHRoaXMuaW5saW5lTmFtZXM9bCx0aGlzLndyYXBwZXJzPWQsdGhpcy5ub2RlVHlwZXM9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHUgb2YgdC50eXBlcyl0aGlzLm5vZGVUeXBlc1t1Lm5hbWVdPXUuaWR9Y3JlYXRlUGFyc2UodCxzLHIpe2xldCBuPW5ldyBLKHRoaXMsdCxzLHIpO2ZvcihsZXQgaSBvZiB0aGlzLndyYXBwZXJzKW49aShuLHQscyxyKTtyZXR1cm4gbn1jb25maWd1cmUodCl7bGV0IHM9WSh0KTtpZighcylyZXR1cm4gdGhpcztsZXR7bm9kZVNldDpyLHNraXBDb250ZXh0TWFya3VwOm59PXRoaXMsaT10aGlzLmJsb2NrUGFyc2Vycy5zbGljZSgpLG89dGhpcy5sZWFmQmxvY2tQYXJzZXJzLnNsaWNlKCksYT10aGlzLmJsb2NrTmFtZXMuc2xpY2UoKSxsPXRoaXMuaW5saW5lUGFyc2Vycy5zbGljZSgpLGQ9dGhpcy5pbmxpbmVOYW1lcy5zbGljZSgpLHU9dGhpcy5lbmRMZWFmQmxvY2suc2xpY2UoKSxnPXRoaXMud3JhcHBlcnM7aWYoSChzLmRlZmluZU5vZGVzKSl7bj1PYmplY3QuYXNzaWduKHt9LG4pO2xldCBmPXIudHlwZXMuc2xpY2UoKSxtO2ZvcihsZXQgTCBvZiBzLmRlZmluZU5vZGVzKXtsZXR7bmFtZTprLGJsb2NrOnp0LGNvbXBvc2l0ZTpELHN0eWxlOkJ9PXR5cGVvZiBMPT1cInN0cmluZ1wiP3tuYW1lOkx9Okw7aWYoZi5zb21lKCQ9PiQubmFtZT09aykpY29udGludWU7RCYmKG5bZi5sZW5ndGhdPSgkLE90LFJ0KT0+RChPdCxSdCwkLnZhbHVlKSk7bGV0IEY9Zi5sZW5ndGgsYXQ9RD9bXCJCbG9ja1wiLFwiQmxvY2tDb250ZXh0XCJdOnp0P0Y+PWguQVRYSGVhZGluZzEmJkY8PWguU2V0ZXh0SGVhZGluZzI/W1wiQmxvY2tcIixcIkxlYWZCbG9ja1wiLFwiSGVhZGluZ1wiXTpbXCJCbG9ja1wiLFwiTGVhZkJsb2NrXCJdOnZvaWQgMDtmLnB1c2goVC5kZWZpbmUoe2lkOkYsbmFtZTprLHByb3BzOmF0JiZbW1AuZ3JvdXAsYXRdXX0pKSxCJiYobXx8KG09e30pLEFycmF5LmlzQXJyYXkoQil8fEIgaW5zdGFuY2VvZiBqdD9tW2tdPUI6T2JqZWN0LmFzc2lnbihtLEIpKX1yPW5ldyBwdChmKSxtJiYocj1yLmV4dGVuZChjdChtKSkpfWlmKEgocy5wcm9wcykmJihyPXIuZXh0ZW5kKC4uLnMucHJvcHMpKSxIKHMucmVtb3ZlKSlmb3IobGV0IGYgb2Ygcy5yZW1vdmUpe2xldCBtPXRoaXMuYmxvY2tOYW1lcy5pbmRleE9mKGYpLEw9dGhpcy5pbmxpbmVOYW1lcy5pbmRleE9mKGYpO20+LTEmJihpW21dPW9bbV09dm9pZCAwKSxMPi0xJiYobFtMXT12b2lkIDApfWlmKEgocy5wYXJzZUJsb2NrKSlmb3IobGV0IGYgb2Ygcy5wYXJzZUJsb2NrKXtsZXQgbT1hLmluZGV4T2YoZi5uYW1lKTtpZihtPi0xKWlbbV09Zi5wYXJzZSxvW21dPWYubGVhZjtlbHNle2xldCBMPWYuYmVmb3JlP1IoYSxmLmJlZm9yZSk6Zi5hZnRlcj9SKGEsZi5hZnRlcikrMTphLmxlbmd0aC0xO2kuc3BsaWNlKEwsMCxmLnBhcnNlKSxvLnNwbGljZShMLDAsZi5sZWFmKSxhLnNwbGljZShMLDAsZi5uYW1lKX1mLmVuZExlYWYmJnUucHVzaChmLmVuZExlYWYpfWlmKEgocy5wYXJzZUlubGluZSkpZm9yKGxldCBmIG9mIHMucGFyc2VJbmxpbmUpe2xldCBtPWQuaW5kZXhPZihmLm5hbWUpO2lmKG0+LTEpbFttXT1mLnBhcnNlO2Vsc2V7bGV0IEw9Zi5iZWZvcmU/UihkLGYuYmVmb3JlKTpmLmFmdGVyP1IoZCxmLmFmdGVyKSsxOmQubGVuZ3RoLTE7bC5zcGxpY2UoTCwwLGYucGFyc2UpLGQuc3BsaWNlKEwsMCxmLm5hbWUpfX1yZXR1cm4gcy53cmFwJiYoZz1nLmNvbmNhdChzLndyYXApKSxuZXcgTihyLGksbyxhLHUsbixsLGQsZyl9Z2V0Tm9kZVR5cGUodCl7bGV0IHM9dGhpcy5ub2RlVHlwZXNbdF07aWYocz09bnVsbCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVW5rbm93biBub2RlIHR5cGUgJyR7dH0nYCk7cmV0dXJuIHN9cGFyc2VJbmxpbmUodCxzKXtsZXQgcj1uZXcgVyh0aGlzLHQscyk7dDpmb3IobGV0IG49cztuPHIuZW5kOyl7bGV0IGk9ci5jaGFyKG4pO2ZvcihsZXQgbyBvZiB0aGlzLmlubGluZVBhcnNlcnMpaWYobyl7bGV0IGE9byhyLGksbik7aWYoYT49MCl7bj1hO2NvbnRpbnVlIHR9fW4rK31yZXR1cm4gci5yZXNvbHZlTWFya2VycygwKX19O2Z1bmN0aW9uIEgoZSl7cmV0dXJuIGUhPW51bGwmJmUubGVuZ3RoPjB9ZnVuY3Rpb24gWShlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZTtpZihlLmxlbmd0aD09MClyZXR1cm4gbnVsbDtsZXQgdD1ZKGVbMF0pO2lmKGUubGVuZ3RoPT0xKXJldHVybiB0O2xldCBzPVkoZS5zbGljZSgxKSk7aWYoIXN8fCF0KXJldHVybiB0fHxzO2xldCByPShvLGEpPT4ob3x8SSkuY29uY2F0KGF8fEkpLG49dC53cmFwLGk9cy53cmFwO3JldHVybntwcm9wczpyKHQucHJvcHMscy5wcm9wcyksZGVmaW5lTm9kZXM6cih0LmRlZmluZU5vZGVzLHMuZGVmaW5lTm9kZXMpLHBhcnNlQmxvY2s6cih0LnBhcnNlQmxvY2sscy5wYXJzZUJsb2NrKSxwYXJzZUlubGluZTpyKHQucGFyc2VJbmxpbmUscy5wYXJzZUlubGluZSkscmVtb3ZlOnIodC5yZW1vdmUscy5yZW1vdmUpLHdyYXA6bj9pPyhvLGEsbCxkKT0+bihpKG8sYSxsLGQpLGEsbCxkKTpuOml9fWZ1bmN0aW9uIFIoZSx0KXtsZXQgcz1lLmluZGV4T2YodCk7aWYoczwwKXRocm93IG5ldyBSYW5nZUVycm9yKGBQb3NpdGlvbiBzcGVjaWZpZWQgcmVsYXRpdmUgdG8gdW5rbm93biBwYXJzZXIgJHt0fWApO3JldHVybiBzfXZhciBJdD1bVC5ub25lXTtmb3IobGV0IGU9MSx0O3Q9aFtlXTtlKyspSXRbZV09VC5kZWZpbmUoe2lkOmUsbmFtZTp0LHByb3BzOmU+PWguRXNjYXBlP1tdOltbUC5ncm91cCxlIGluIGd0P1tcIkJsb2NrXCIsXCJCbG9ja0NvbnRleHRcIl06W1wiQmxvY2tcIixcIkxlYWZCbG9ja1wiXV1dfSk7dmFyIEk9W10seT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm5vZGVTZXQ9dCx0aGlzLmNvbnRlbnQ9W10sdGhpcy5ub2Rlcz1bXX13cml0ZSh0LHMscixuPTApe3JldHVybiB0aGlzLmNvbnRlbnQucHVzaCh0LHMsciw0K24qNCksdGhpc313cml0ZUVsZW1lbnRzKHQscz0wKXtmb3IobGV0IHIgb2YgdClyLndyaXRlVG8odGhpcyxzKTtyZXR1cm4gdGhpc31maW5pc2godCxzKXtyZXR1cm4gQS5idWlsZCh7YnVmZmVyOnRoaXMuY29udGVudCxub2RlU2V0OnRoaXMubm9kZVNldCxyZXVzZWQ6dGhpcy5ub2Rlcyx0b3BJRDp0LGxlbmd0aDpzfSl9fSx3PWNsYXNze2NvbnN0cnVjdG9yKHQscyxyLG49SSl7dGhpcy50eXBlPXQsdGhpcy5mcm9tPXMsdGhpcy50bz1yLHRoaXMuY2hpbGRyZW49bn13cml0ZVRvKHQscyl7bGV0IHI9dC5jb250ZW50Lmxlbmd0aDt0LndyaXRlRWxlbWVudHModGhpcy5jaGlsZHJlbixzKSx0LmNvbnRlbnQucHVzaCh0aGlzLnR5cGUsdGhpcy5mcm9tK3MsdGhpcy50bytzLHQuY29udGVudC5sZW5ndGgrNC1yKX10b1RyZWUodCl7cmV0dXJuIG5ldyB5KHQpLndyaXRlRWxlbWVudHModGhpcy5jaGlsZHJlbiwtdGhpcy5mcm9tKS5maW5pc2godGhpcy50eXBlLHRoaXMudG8tdGhpcy5mcm9tKX19LFg9Y2xhc3N7Y29uc3RydWN0b3IodCxzKXt0aGlzLnRyZWU9dCx0aGlzLmZyb209c31nZXQgdG8oKXtyZXR1cm4gdGhpcy5mcm9tK3RoaXMudHJlZS5sZW5ndGh9Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy50cmVlLnR5cGUuaWR9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIEl9d3JpdGVUbyh0LHMpe3Qubm9kZXMucHVzaCh0aGlzLnRyZWUpLHQuY29udGVudC5wdXNoKHQubm9kZXMubGVuZ3RoLTEsdGhpcy5mcm9tK3MsdGhpcy50bytzLC0xKX10b1RyZWUoKXtyZXR1cm4gdGhpcy50cmVlfX07ZnVuY3Rpb24gYyhlLHQscyxyKXtyZXR1cm4gbmV3IHcoZSx0LHMscil9dmFyIEJ0PXtyZXNvbHZlOlwiRW1waGFzaXNcIixtYXJrOlwiRW1waGFzaXNNYXJrXCJ9LEh0PXtyZXNvbHZlOlwiRW1waGFzaXNcIixtYXJrOlwiRW1waGFzaXNNYXJrXCJ9LE09e30sZnQ9e30sYj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHMscixuKXt0aGlzLnR5cGU9dCx0aGlzLmZyb209cyx0aGlzLnRvPXIsdGhpcy5zaWRlPW59fSxkdD1cIiFcXFwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxcXF1eX2B7fH1+XCIsej0vWyFcIiMkJSYnKCkqKyxcXC0uXFwvOjs8PT4/QFxcW1xcXFxcXF1eX2B7fH1+XFx4QTFcXHUyMDEwLVxcdTIwMjddLzt0cnl7ej1uZXcgUmVnRXhwKFwiW1xcXFxwe1BjfXxcXFxccHtQZH18XFxcXHB7UGV9fFxcXFxwe1BmfXxcXFxccHtQaX18XFxcXHB7UG99fFxcXFxwe1BzfV1cIixcInVcIil9Y2F0Y2h7fXZhciBVPXtFc2NhcGUoZSx0LHMpe2lmKHQhPTkyfHxzPT1lLmVuZC0xKXJldHVybi0xO2xldCByPWUuY2hhcihzKzEpO2ZvcihsZXQgbj0wO248ZHQubGVuZ3RoO24rKylpZihkdC5jaGFyQ29kZUF0KG4pPT1yKXJldHVybiBlLmFwcGVuZChjKGguRXNjYXBlLHMscysyKSk7cmV0dXJuLTF9LEVudGl0eShlLHQscyl7aWYodCE9MzgpcmV0dXJuLTE7bGV0IHI9L14oPzojXFxkK3wjeFthLWZcXGRdK3xcXHcrKTsvaS5leGVjKGUuc2xpY2UocysxLHMrMzEpKTtyZXR1cm4gcj9lLmFwcGVuZChjKGguRW50aXR5LHMscysxK3JbMF0ubGVuZ3RoKSk6LTF9LElubGluZUNvZGUoZSx0LHMpe2lmKHQhPTk2fHxzJiZlLmNoYXIocy0xKT09OTYpcmV0dXJuLTE7bGV0IHI9cysxO2Zvcig7cjxlLmVuZCYmZS5jaGFyKHIpPT05NjspcisrO2xldCBuPXItcyxpPTA7Zm9yKDtyPGUuZW5kO3IrKylpZihlLmNoYXIocik9PTk2KXtpZihpKyssaT09biYmZS5jaGFyKHIrMSkhPTk2KXJldHVybiBlLmFwcGVuZChjKGguSW5saW5lQ29kZSxzLHIrMSxbYyhoLkNvZGVNYXJrLHMscytuKSxjKGguQ29kZU1hcmsscisxLW4scisxKV0pKX1lbHNlIGk9MDtyZXR1cm4tMX0sSFRNTFRhZyhlLHQscyl7aWYodCE9NjB8fHM9PWUuZW5kLTEpcmV0dXJuLTE7bGV0IHI9ZS5zbGljZShzKzEsZS5lbmQpLG49L14oPzpbYS16XVstXFx3Ky5dKzpbXlxccz5dK3xbYS16XFxkLiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16XFxkXSg/OlthLXpcXGQtXXswLDYxfVthLXpcXGRdKT8oPzpcXC5bYS16XFxkXSg/OlthLXpcXGQtXXswLDYxfVthLXpcXGRdKT8pKik+L2kuZXhlYyhyKTtpZihuKXJldHVybiBlLmFwcGVuZChjKGguVVJMLHMscysxK25bMF0ubGVuZ3RoKSk7bGV0IGk9L14hLS1bXj5dKD86LVteLV18W14tXSkqPy0tPi9pLmV4ZWMocik7aWYoaSlyZXR1cm4gZS5hcHBlbmQoYyhoLkNvbW1lbnQscyxzKzEraVswXS5sZW5ndGgpKTtsZXQgbz0vXlxcP1teXSo/XFw/Pi8uZXhlYyhyKTtpZihvKXJldHVybiBlLmFwcGVuZChjKGguUHJvY2Vzc2luZ0luc3RydWN0aW9uLHMscysxK29bMF0ubGVuZ3RoKSk7bGV0IGE9L14oPzohW0EtWl1bXl0qPz58IVxcW0NEQVRBXFxbW15dKj9cXF1cXF0+fFxcL1xccypbYS16QS1aXVtcXHctXSpcXHMqPnxcXHMqW2EtekEtWl1bXFx3LV0qKFxccytbYS16QS1aOl9dW1xcdy0uOl0qKD86XFxzKj1cXHMqKD86W15cXHNcIic9PD5gXSt8J1teJ10qJ3xcIlteXCJdKlwiKSk/KSpcXHMqKFxcL1xccyopPz4pLy5leGVjKHIpO3JldHVybiBhP2UuYXBwZW5kKGMoaC5IVE1MVGFnLHMscysxK2FbMF0ubGVuZ3RoKSk6LTF9LEVtcGhhc2lzKGUsdCxzKXtpZih0IT05NSYmdCE9NDIpcmV0dXJuLTE7bGV0IHI9cysxO2Zvcig7ZS5jaGFyKHIpPT10OylyKys7bGV0IG49ZS5zbGljZShzLTEscyksaT1lLnNsaWNlKHIscisxKSxvPXoudGVzdChuKSxhPXoudGVzdChpKSxsPS9cXHN8XiQvLnRlc3QobiksZD0vXFxzfF4kLy50ZXN0KGkpLHU9IWQmJighYXx8bHx8byksZz0hbCYmKCFvfHxkfHxhKSxmPXUmJih0PT00Mnx8IWd8fG8pLG09ZyYmKHQ9PTQyfHwhdXx8YSk7cmV0dXJuIGUuYXBwZW5kKG5ldyBiKHQ9PTk1P0J0Okh0LHMsciwoZj8xOjApfChtPzI6MCkpKX0sSGFyZEJyZWFrKGUsdCxzKXtpZih0PT05MiYmZS5jaGFyKHMrMSk9PTEwKXJldHVybiBlLmFwcGVuZChjKGguSGFyZEJyZWFrLHMscysyKSk7aWYodD09MzIpe2xldCByPXMrMTtmb3IoO2UuY2hhcihyKT09MzI7KXIrKztpZihlLmNoYXIocik9PTEwJiZyPj1zKzIpcmV0dXJuIGUuYXBwZW5kKGMoaC5IYXJkQnJlYWsscyxyKzEpKX1yZXR1cm4tMX0sTGluayhlLHQscyl7cmV0dXJuIHQ9PTkxP2UuYXBwZW5kKG5ldyBiKE0scyxzKzEsMSkpOi0xfSxJbWFnZShlLHQscyl7cmV0dXJuIHQ9PTMzJiZlLmNoYXIocysxKT09OTE/ZS5hcHBlbmQobmV3IGIoZnQscyxzKzIsMSkpOi0xfSxMaW5rRW5kKGUsdCxzKXtpZih0IT05MylyZXR1cm4tMTtmb3IobGV0IHI9ZS5wYXJ0cy5sZW5ndGgtMTtyPj0wO3ItLSl7bGV0IG49ZS5wYXJ0c1tyXTtpZihuIGluc3RhbmNlb2YgYiYmKG4udHlwZT09TXx8bi50eXBlPT1mdCkpe2lmKCFuLnNpZGV8fGUuc2tpcFNwYWNlKG4udG8pPT1zJiYhL1soXFxbXS8udGVzdChlLnNsaWNlKHMrMSxzKzIpKSlyZXR1cm4gZS5wYXJ0c1tyXT1udWxsLC0xO2xldCBpPWUudGFrZUNvbnRlbnQociksbz1lLnBhcnRzW3JdPSR0KGUsaSxuLnR5cGU9PU0/aC5MaW5rOmguSW1hZ2Usbi5mcm9tLHMrMSk7aWYobi50eXBlPT1NKWZvcihsZXQgYT0wO2E8cjthKyspe2xldCBsPWUucGFydHNbYV07bCBpbnN0YW5jZW9mIGImJmwudHlwZT09TSYmKGwuc2lkZT0wKX1yZXR1cm4gby50b319cmV0dXJuLTF9fTtmdW5jdGlvbiAkdChlLHQscyxyLG4pe2xldHt0ZXh0Oml9PWUsbz1lLmNoYXIobiksYT1uO2lmKHQudW5zaGlmdChjKGguTGlua01hcmsscixyKyhzPT1oLkltYWdlPzI6MSkpKSx0LnB1c2goYyhoLkxpbmtNYXJrLG4tMSxuKSksbz09NDApe2xldCBsPWUuc2tpcFNwYWNlKG4rMSksZD1NdChpLGwtZS5vZmZzZXQsZS5vZmZzZXQpLHU7ZCYmKGw9ZS5za2lwU3BhY2UoZC50byksdT14dChpLGwtZS5vZmZzZXQsZS5vZmZzZXQpLHUmJihsPWUuc2tpcFNwYWNlKHUudG8pKSksZS5jaGFyKGwpPT00MSYmKHQucHVzaChjKGguTGlua01hcmssbixuKzEpKSxhPWwrMSxkJiZ0LnB1c2goZCksdSYmdC5wdXNoKHUpLHQucHVzaChjKGguTGlua01hcmssbCxhKSkpfWVsc2UgaWYobz09OTEpe2xldCBsPXZ0KGksbi1lLm9mZnNldCxlLm9mZnNldCwhMSk7bCYmKHQucHVzaChsKSxhPWwudG8pfXJldHVybiBjKHMscixhLHQpfWZ1bmN0aW9uIE10KGUsdCxzKXtpZihlLmNoYXJDb2RlQXQodCk9PTYwKXtmb3IobGV0IG49dCsxO248ZS5sZW5ndGg7bisrKXtsZXQgaT1lLmNoYXJDb2RlQXQobik7aWYoaT09NjIpcmV0dXJuIGMoaC5VUkwsdCtzLG4rMStzKTtpZihpPT02MHx8aT09MTApcmV0dXJuITF9cmV0dXJuIG51bGx9ZWxzZXtsZXQgbj0wLGk9dDtmb3IobGV0IG89ITE7aTxlLmxlbmd0aDtpKyspe2xldCBhPWUuY2hhckNvZGVBdChpKTtpZihTKGEpKWJyZWFrO2lmKG8pbz0hMTtlbHNlIGlmKGE9PTQwKW4rKztlbHNlIGlmKGE9PTQxKXtpZighbilicmVhaztuLS19ZWxzZSBhPT05MiYmKG89ITApfXJldHVybiBpPnQ/YyhoLlVSTCx0K3MsaStzKTppPT1lLmxlbmd0aD9udWxsOiExfX1mdW5jdGlvbiB4dChlLHQscyl7bGV0IHI9ZS5jaGFyQ29kZUF0KHQpO2lmKHIhPTM5JiZyIT0zNCYmciE9NDApcmV0dXJuITE7bGV0IG49cj09NDA/NDE6cjtmb3IobGV0IGk9dCsxLG89ITE7aTxlLmxlbmd0aDtpKyspe2xldCBhPWUuY2hhckNvZGVBdChpKTtpZihvKW89ITE7ZWxzZXtpZihhPT1uKXJldHVybiBjKGguTGlua1RpdGxlLHQrcyxpKzErcyk7YT09OTImJihvPSEwKX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gdnQoZSx0LHMscil7Zm9yKGxldCBuPSExLGk9dCsxLG89TWF0aC5taW4oZS5sZW5ndGgsaSs5OTkpO2k8bztpKyspe2xldCBhPWUuY2hhckNvZGVBdChpKTtpZihuKW49ITE7ZWxzZXtpZihhPT05MylyZXR1cm4gcj8hMTpjKGguTGlua0xhYmVsLHQrcyxpKzErcyk7aWYociYmIVMoYSkmJihyPSExKSxhPT05MSlyZXR1cm4hMTthPT05MiYmKG49ITApfX1yZXR1cm4gbnVsbH12YXIgVz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHMscil7dGhpcy5wYXJzZXI9dCx0aGlzLnRleHQ9cyx0aGlzLm9mZnNldD1yLHRoaXMucGFydHM9W119Y2hhcih0KXtyZXR1cm4gdD49dGhpcy5lbmQ/LTE6dGhpcy50ZXh0LmNoYXJDb2RlQXQodC10aGlzLm9mZnNldCl9Z2V0IGVuZCgpe3JldHVybiB0aGlzLm9mZnNldCt0aGlzLnRleHQubGVuZ3RofXNsaWNlKHQscyl7cmV0dXJuIHRoaXMudGV4dC5zbGljZSh0LXRoaXMub2Zmc2V0LHMtdGhpcy5vZmZzZXQpfWFwcGVuZCh0KXtyZXR1cm4gdGhpcy5wYXJ0cy5wdXNoKHQpLHQudG99YWRkRGVsaW1pdGVyKHQscyxyLG4saSl7cmV0dXJuIHRoaXMuYXBwZW5kKG5ldyBiKHQscyxyLChuPzE6MCl8KGk/MjowKSkpfWFkZEVsZW1lbnQodCl7cmV0dXJuIHRoaXMuYXBwZW5kKHQpfXJlc29sdmVNYXJrZXJzKHQpe2ZvcihsZXQgcj10O3I8dGhpcy5wYXJ0cy5sZW5ndGg7cisrKXtsZXQgbj10aGlzLnBhcnRzW3JdO2lmKCEobiBpbnN0YW5jZW9mIGImJm4udHlwZS5yZXNvbHZlJiZuLnNpZGUmMikpY29udGludWU7bGV0IGk9bi50eXBlPT1CdHx8bi50eXBlPT1IdCxvPW4udG8tbi5mcm9tLGEsbD1yLTE7Zm9yKDtsPj10O2wtLSl7bGV0IGs9dGhpcy5wYXJ0c1tsXTtpZihrIGluc3RhbmNlb2YgYiYmay5zaWRlJjEmJmsudHlwZT09bi50eXBlJiYhKGkmJihuLnNpZGUmMXx8ay5zaWRlJjIpJiYoay50by1rLmZyb20rbyklMz09MCYmKChrLnRvLWsuZnJvbSklM3x8byUzKSkpe2E9azticmVha319aWYoIWEpY29udGludWU7bGV0IGQ9bi50eXBlLnJlc29sdmUsdT1bXSxnPWEuZnJvbSxmPW4udG87aWYoaSl7bGV0IGs9TWF0aC5taW4oMixhLnRvLWEuZnJvbSxvKTtnPWEudG8tayxmPW4uZnJvbStrLGQ9az09MT9cIkVtcGhhc2lzXCI6XCJTdHJvbmdFbXBoYXNpc1wifWEudHlwZS5tYXJrJiZ1LnB1c2godGhpcy5lbHQoYS50eXBlLm1hcmssZyxhLnRvKSk7Zm9yKGxldCBrPWwrMTtrPHI7aysrKXRoaXMucGFydHNba11pbnN0YW5jZW9mIHcmJnUucHVzaCh0aGlzLnBhcnRzW2tdKSx0aGlzLnBhcnRzW2tdPW51bGw7bi50eXBlLm1hcmsmJnUucHVzaCh0aGlzLmVsdChuLnR5cGUubWFyayxuLmZyb20sZikpO2xldCBtPXRoaXMuZWx0KGQsZyxmLHUpO3RoaXMucGFydHNbbF09aSYmYS5mcm9tIT1nP25ldyBiKGEudHlwZSxhLmZyb20sZyxhLnNpZGUpOm51bGwsKHRoaXMucGFydHNbcl09aSYmbi50byE9Zj9uZXcgYihuLnR5cGUsZixuLnRvLG4uc2lkZSk6bnVsbCk/dGhpcy5wYXJ0cy5zcGxpY2UociwwLG0pOnRoaXMucGFydHNbcl09bX1sZXQgcz1bXTtmb3IobGV0IHI9dDtyPHRoaXMucGFydHMubGVuZ3RoO3IrKyl7bGV0IG49dGhpcy5wYXJ0c1tyXTtuIGluc3RhbmNlb2YgdyYmcy5wdXNoKG4pfXJldHVybiBzfWZpbmRPcGVuaW5nRGVsaW1pdGVyKHQpe2ZvcihsZXQgcz10aGlzLnBhcnRzLmxlbmd0aC0xO3M+PTA7cy0tKXtsZXQgcj10aGlzLnBhcnRzW3NdO2lmKHIgaW5zdGFuY2VvZiBiJiZyLnR5cGU9PXQpcmV0dXJuIHN9cmV0dXJuIG51bGx9dGFrZUNvbnRlbnQodCl7bGV0IHM9dGhpcy5yZXNvbHZlTWFya2Vycyh0KTtyZXR1cm4gdGhpcy5wYXJ0cy5sZW5ndGg9dCxzfXNraXBTcGFjZSh0KXtyZXR1cm4geCh0aGlzLnRleHQsdC10aGlzLm9mZnNldCkrdGhpcy5vZmZzZXR9ZWx0KHQscyxyLG4pe3JldHVybiB0eXBlb2YgdD09XCJzdHJpbmdcIj9jKHRoaXMucGFyc2VyLmdldE5vZGVUeXBlKHQpLHMscixuKTpuZXcgWCh0LHMpfX07ZnVuY3Rpb24gdHQoZSx0KXtpZighdC5sZW5ndGgpcmV0dXJuIGU7aWYoIWUubGVuZ3RoKXJldHVybiB0O2xldCBzPWUuc2xpY2UoKSxyPTA7Zm9yKGxldCBuIG9mIHQpe2Zvcig7cjxzLmxlbmd0aCYmc1tyXS50bzxuLnRvOylyKys7aWYocjxzLmxlbmd0aCYmc1tyXS5mcm9tPG4uZnJvbSl7bGV0IGk9c1tyXTtpIGluc3RhbmNlb2YgdyYmKHNbcl09bmV3IHcoaS50eXBlLGkuZnJvbSxpLnRvLHR0KGkuY2hpbGRyZW4sW25dKSkpfWVsc2Ugcy5zcGxpY2UocisrLDAsbil9cmV0dXJuIHN9dmFyIF90PVtoLkNvZGVCbG9jayxoLkxpc3RJdGVtLGguT3JkZXJlZExpc3QsaC5CdWxsZXRMaXN0XSxldD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHMpe3RoaXMuZnJhZ21lbnRzPXQsdGhpcy5pbnB1dD1zLHRoaXMuaT0wLHRoaXMuZnJhZ21lbnQ9bnVsbCx0aGlzLmZyYWdtZW50RW5kPS0xLHRoaXMuY3Vyc29yPW51bGwsdC5sZW5ndGgmJih0aGlzLmZyYWdtZW50PXRbdGhpcy5pKytdKX1uZXh0RnJhZ21lbnQoKXt0aGlzLmZyYWdtZW50PXRoaXMuaTx0aGlzLmZyYWdtZW50cy5sZW5ndGg/dGhpcy5mcmFnbWVudHNbdGhpcy5pKytdOm51bGwsdGhpcy5jdXJzb3I9bnVsbCx0aGlzLmZyYWdtZW50RW5kPS0xfW1vdmVUbyh0LHMpe2Zvcig7dGhpcy5mcmFnbWVudCYmdGhpcy5mcmFnbWVudC50bzw9dDspdGhpcy5uZXh0RnJhZ21lbnQoKTtpZighdGhpcy5mcmFnbWVudHx8dGhpcy5mcmFnbWVudC5mcm9tPih0P3QtMTowKSlyZXR1cm4hMTtpZih0aGlzLmZyYWdtZW50RW5kPDApe2xldCBpPXRoaXMuZnJhZ21lbnQudG87Zm9yKDtpPjAmJnRoaXMuaW5wdXQucmVhZChpLTEsaSkhPWBcbmA7KWktLTt0aGlzLmZyYWdtZW50RW5kPWk/aS0xOjB9bGV0IHI9dGhpcy5jdXJzb3I7cnx8KHI9dGhpcy5jdXJzb3I9dGhpcy5mcmFnbWVudC50cmVlLmN1cnNvcigpLHIuZmlyc3RDaGlsZCgpKTtsZXQgbj10K3RoaXMuZnJhZ21lbnQub2Zmc2V0O2Zvcig7ci50bzw9bjspaWYoIXIucGFyZW50KCkpcmV0dXJuITE7Zm9yKDs7KXtpZihyLmZyb20+PW4pcmV0dXJuIHRoaXMuZnJhZ21lbnQuZnJvbTw9cztpZighci5jaGlsZEFmdGVyKG4pKXJldHVybiExfX1tYXRjaGVzKHQpe2xldCBzPXRoaXMuY3Vyc29yLnRyZWU7cmV0dXJuIHMmJnMucHJvcChQLmNvbnRleHRIYXNoKT09dH10YWtlTm9kZXModCl7bGV0IHM9dGhpcy5jdXJzb3Iscj10aGlzLmZyYWdtZW50Lm9mZnNldCxuPXRoaXMuZnJhZ21lbnRFbmQtKHRoaXMuZnJhZ21lbnQub3BlbkVuZD8xOjApLGk9dC5hYnNvbHV0ZUxpbmVTdGFydCxvPWksYT10LmJsb2NrLmNoaWxkcmVuLmxlbmd0aCxsPW8sZD1hO2Zvcig7Oyl7aWYocy50by1yPm4pe2lmKHMudHlwZS5pc0Fub255bW91cyYmcy5maXJzdENoaWxkKCkpY29udGludWU7YnJlYWt9aWYodC5kb250SW5qZWN0LmFkZChzLnRyZWUpLHQuYWRkTm9kZShzLnRyZWUscy5mcm9tLXIpLHMudHlwZS5pcyhcIkJsb2NrXCIpJiYoX3QuaW5kZXhPZihzLnR5cGUuaWQpPDA/KG89cy50by1yLGE9dC5ibG9jay5jaGlsZHJlbi5sZW5ndGgpOihvPWwsYT1kLGw9cy50by1yLGQ9dC5ibG9jay5jaGlsZHJlbi5sZW5ndGgpKSwhcy5uZXh0U2libGluZygpKWJyZWFrfWZvcig7dC5ibG9jay5jaGlsZHJlbi5sZW5ndGg+YTspdC5ibG9jay5jaGlsZHJlbi5wb3AoKSx0LmJsb2NrLnBvc2l0aW9ucy5wb3AoKTtyZXR1cm4gby1pfX0sVXQ9Y3Qoe1wiQmxvY2txdW90ZS8uLi5cIjpwLnF1b3RlLEhvcml6b250YWxSdWxlOnAuY29udGVudFNlcGFyYXRvcixcIkFUWEhlYWRpbmcxLy4uLiBTZXRleHRIZWFkaW5nMS8uLi5cIjpwLmhlYWRpbmcxLFwiQVRYSGVhZGluZzIvLi4uIFNldGV4dEhlYWRpbmcyLy4uLlwiOnAuaGVhZGluZzIsXCJBVFhIZWFkaW5nMy8uLi5cIjpwLmhlYWRpbmczLFwiQVRYSGVhZGluZzQvLi4uXCI6cC5oZWFkaW5nNCxcIkFUWEhlYWRpbmc1Ly4uLlwiOnAuaGVhZGluZzUsXCJBVFhIZWFkaW5nNi8uLi5cIjpwLmhlYWRpbmc2LFwiQ29tbWVudCBDb21tZW50QmxvY2tcIjpwLmNvbW1lbnQsRXNjYXBlOnAuZXNjYXBlLEVudGl0eTpwLmNoYXJhY3RlcixcIkVtcGhhc2lzLy4uLlwiOnAuZW1waGFzaXMsXCJTdHJvbmdFbXBoYXNpcy8uLi5cIjpwLnN0cm9uZyxcIkxpbmsvLi4uIEltYWdlLy4uLlwiOnAubGluayxcIk9yZGVyZWRMaXN0Ly4uLiBCdWxsZXRMaXN0Ly4uLlwiOnAubGlzdCxcIkJsb2NrUXVvdGUvLi4uXCI6cC5xdW90ZSxcIklubGluZUNvZGUgQ29kZVRleHRcIjpwLm1vbm9zcGFjZSxVUkw6cC51cmwsXCJIZWFkZXJNYXJrIEhhcmRCcmVhayBRdW90ZU1hcmsgTGlzdE1hcmsgTGlua01hcmsgRW1waGFzaXNNYXJrIENvZGVNYXJrXCI6cC5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sXCJDb2RlSW5mbyBMaW5rTGFiZWxcIjpwLmxhYmVsTmFtZSxMaW5rVGl0bGU6cC5zdHJpbmcsUGFyYWdyYXBoOnAuY29udGVudH0pLFl0PW5ldyBOKG5ldyBwdChJdCkuZXh0ZW5kKFV0KSxPYmplY3Qua2V5cyhPKS5tYXAoZT0+T1tlXSksT2JqZWN0LmtleXMoTykubWFwKGU9PlR0W2VdKSxPYmplY3Qua2V5cyhPKSxEdCxndCxPYmplY3Qua2V5cyhVKS5tYXAoZT0+VVtlXSksT2JqZWN0LmtleXMoVSksW10pO2Z1bmN0aW9uIHF0KGUsdCxzKXtsZXQgcj1bXTtmb3IobGV0IG49ZS5maXJzdENoaWxkLGk9dDs7bj1uLm5leHRTaWJsaW5nKXtsZXQgbz1uP24uZnJvbTpzO2lmKG8+aSYmci5wdXNoKHtmcm9tOmksdG86b30pLCFuKWJyZWFrO2k9bi50b31yZXR1cm4gcn1mdW5jdGlvbiBXdChlKXtsZXR7Y29kZVBhcnNlcjp0LGh0bWxQYXJzZXI6c309ZTtyZXR1cm57d3JhcDpYdCgobixpKT0+e2xldCBvPW4udHlwZS5pZDtpZih0JiYobz09aC5Db2RlQmxvY2t8fG89PWguRmVuY2VkQ29kZSkpe2xldCBhPVwiXCI7aWYobz09aC5GZW5jZWRDb2RlKXtsZXQgZD1uLm5vZGUuZ2V0Q2hpbGQoaC5Db2RlSW5mbyk7ZCYmKGE9aS5yZWFkKGQuZnJvbSxkLnRvKSl9bGV0IGw9dChhKTtpZihsKXJldHVybntwYXJzZXI6bCxvdmVybGF5OmQ9PmQudHlwZS5pZD09aC5Db2RlVGV4dH19ZWxzZSBpZihzJiYobz09aC5IVE1MQmxvY2t8fG89PWguSFRNTFRhZykpcmV0dXJue3BhcnNlcjpzLG92ZXJsYXk6cXQobi5ub2RlLG4uZnJvbSxuLnRvKX07cmV0dXJuIG51bGx9KX19dmFyIFF0PXtyZXNvbHZlOlwiU3RyaWtldGhyb3VnaFwiLG1hcms6XCJTdHJpa2V0aHJvdWdoTWFya1wifSxadD17ZGVmaW5lTm9kZXM6W3tuYW1lOlwiU3RyaWtldGhyb3VnaFwiLHN0eWxlOntcIlN0cmlrZXRocm91Z2gvLi4uXCI6cC5zdHJpa2V0aHJvdWdofX0se25hbWU6XCJTdHJpa2V0aHJvdWdoTWFya1wiLHN0eWxlOnAucHJvY2Vzc2luZ0luc3RydWN0aW9ufV0scGFyc2VJbmxpbmU6W3tuYW1lOlwiU3RyaWtldGhyb3VnaFwiLHBhcnNlKGUsdCxzKXtpZih0IT0xMjZ8fGUuY2hhcihzKzEpIT0xMjZ8fGUuY2hhcihzKzIpPT0xMjYpcmV0dXJuLTE7bGV0IHI9ZS5zbGljZShzLTEscyksbj1lLnNsaWNlKHMrMixzKzMpLGk9L1xcc3xeJC8udGVzdChyKSxvPS9cXHN8XiQvLnRlc3QobiksYT16LnRlc3QociksbD16LnRlc3Qobik7cmV0dXJuIGUuYWRkRGVsaW1pdGVyKFF0LHMscysyLCFvJiYoIWx8fGl8fGEpLCFpJiYoIWF8fG98fGwpKX0sYWZ0ZXI6XCJFbXBoYXNpc1wifV19O2Z1bmN0aW9uIHYoZSx0LHM9MCxyLG49MCl7bGV0IGk9MCxvPSEwLGE9LTEsbD0tMSxkPSExLHU9KCk9PntyLnB1c2goZS5lbHQoXCJUYWJsZUNlbGxcIixuK2EsbitsLGUucGFyc2VyLnBhcnNlSW5saW5lKHQuc2xpY2UoYSxsKSxuK2EpKSl9O2ZvcihsZXQgZz1zO2c8dC5sZW5ndGg7ZysrKXtsZXQgZj10LmNoYXJDb2RlQXQoZyk7Zj09MTI0JiYhZD8oKCFvfHxhPi0xKSYmaSsrLG89ITEsciYmKGE+LTEmJnUoKSxyLnB1c2goZS5lbHQoXCJUYWJsZURlbGltaXRlclwiLGcrbixnK24rMSkpKSxhPWw9LTEpOihkfHxmIT0zMiYmZiE9OSkmJihhPDAmJihhPWcpLGw9ZysxKSxkPSFkJiZmPT05Mn1yZXR1cm4gYT4tMSYmKGkrKyxyJiZ1KCkpLGl9ZnVuY3Rpb24gdXQoZSx0KXtmb3IobGV0IHM9dDtzPGUubGVuZ3RoO3MrKyl7bGV0IHI9ZS5jaGFyQ29kZUF0KHMpO2lmKHI9PTEyNClyZXR1cm4hMDtyPT05MiYmcysrfXJldHVybiExfXZhciBQdD0vXlxcfD8oXFxzKjo/LSs6P1xccypcXHwpKyhcXHMqOj8tKzo/XFxzKik/JC8saj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucm93cz1udWxsfW5leHRMaW5lKHQscyxyKXtpZih0aGlzLnJvd3M9PW51bGwpe3RoaXMucm93cz0hMTtsZXQgbjtpZigocy5uZXh0PT00NXx8cy5uZXh0PT01OHx8cy5uZXh0PT0xMjQpJiZQdC50ZXN0KG49cy50ZXh0LnNsaWNlKHMucG9zKSkpe2xldCBpPVtdO3YodCxyLmNvbnRlbnQsMCxpLHIuc3RhcnQpPT12KHQsbixzLnBvcykmJih0aGlzLnJvd3M9W3QuZWx0KFwiVGFibGVIZWFkZXJcIixyLnN0YXJ0LHIuc3RhcnQrci5jb250ZW50Lmxlbmd0aCxpKSx0LmVsdChcIlRhYmxlRGVsaW1pdGVyXCIsdC5saW5lU3RhcnQrcy5wb3MsdC5saW5lU3RhcnQrcy50ZXh0Lmxlbmd0aCldKX19ZWxzZSBpZih0aGlzLnJvd3Mpe2xldCBuPVtdO3YodCxzLnRleHQscy5wb3Msbix0LmxpbmVTdGFydCksdGhpcy5yb3dzLnB1c2godC5lbHQoXCJUYWJsZVJvd1wiLHQubGluZVN0YXJ0K3MucG9zLHQubGluZVN0YXJ0K3MudGV4dC5sZW5ndGgsbikpfXJldHVybiExfWZpbmlzaCh0LHMpe3JldHVybiB0aGlzLnJvd3M/KHQuYWRkTGVhZkVsZW1lbnQocyx0LmVsdChcIlRhYmxlXCIscy5zdGFydCxzLnN0YXJ0K3MuY29udGVudC5sZW5ndGgsdGhpcy5yb3dzKSksITApOiExfX0sR3Q9e2RlZmluZU5vZGVzOlt7bmFtZTpcIlRhYmxlXCIsYmxvY2s6ITB9LHtuYW1lOlwiVGFibGVIZWFkZXJcIixzdHlsZTp7XCJUYWJsZUhlYWRlci8uLi5cIjpwLmhlYWRpbmd9fSxcIlRhYmxlUm93XCIse25hbWU6XCJUYWJsZUNlbGxcIixzdHlsZTpwLmNvbnRlbnR9LHtuYW1lOlwiVGFibGVEZWxpbWl0ZXJcIixzdHlsZTpwLnByb2Nlc3NpbmdJbnN0cnVjdGlvbn1dLHBhcnNlQmxvY2s6W3tuYW1lOlwiVGFibGVcIixsZWFmKGUsdCl7cmV0dXJuIHV0KHQuY29udGVudCwwKT9uZXcgajpudWxsfSxlbmRMZWFmKGUsdCxzKXtpZihzLnBhcnNlcnMuc29tZShuPT5uIGluc3RhbmNlb2Ygail8fCF1dCh0LnRleHQsdC5iYXNlUG9zKSlyZXR1cm4hMTtsZXQgcj1lLnNjYW5MaW5lKGUuYWJzb2x1dGVMaW5lRW5kKzEpLnRleHQ7cmV0dXJuIFB0LnRlc3QocikmJnYoZSx0LnRleHQsdC5iYXNlUG9zKT09dihlLHIsdC5iYXNlUG9zKX0sYmVmb3JlOlwiU2V0ZXh0SGVhZGluZ1wifV19LHN0PWNsYXNze25leHRMaW5lKCl7cmV0dXJuITF9ZmluaXNoKHQscyl7cmV0dXJuIHQuYWRkTGVhZkVsZW1lbnQocyx0LmVsdChcIlRhc2tcIixzLnN0YXJ0LHMuc3RhcnQrcy5jb250ZW50Lmxlbmd0aCxbdC5lbHQoXCJUYXNrTWFya2VyXCIscy5zdGFydCxzLnN0YXJ0KzMpLC4uLnQucGFyc2VyLnBhcnNlSW5saW5lKHMuY29udGVudC5zbGljZSgzKSxzLnN0YXJ0KzMpXSkpLCEwfX0sVnQ9e2RlZmluZU5vZGVzOlt7bmFtZTpcIlRhc2tcIixibG9jazohMCxzdHlsZTpwLmxpc3R9LHtuYW1lOlwiVGFza01hcmtlclwiLHN0eWxlOnAuYXRvbX1dLHBhcnNlQmxvY2s6W3tuYW1lOlwiVGFza0xpc3RcIixsZWFmKGUsdCl7cmV0dXJuL15cXFtbIHhYXVxcXS8udGVzdCh0LmNvbnRlbnQpJiZlLnBhcmVudFR5cGUoKS5uYW1lPT1cIkxpc3RJdGVtXCI/bmV3IHN0Om51bGx9LGFmdGVyOlwiU2V0ZXh0SGVhZGluZ1wifV19LHRlPVtHdCxWdCxadF07ZnVuY3Rpb24gTnQoZSx0LHMpe3JldHVybihyLG4saSk9PntpZihuIT1lfHxyLmNoYXIoaSsxKT09ZSlyZXR1cm4tMTtsZXQgbz1bci5lbHQocyxpLGkrMSldO2ZvcihsZXQgYT1pKzE7YTxyLmVuZDthKyspe2xldCBsPXIuY2hhcihhKTtpZihsPT1lKXJldHVybiByLmFkZEVsZW1lbnQoci5lbHQodCxpLGErMSxvLmNvbmNhdChyLmVsdChzLGEsYSsxKSkpKTtpZihsPT05MiYmby5wdXNoKHIuZWx0KFwiRXNjYXBlXCIsYSxhKysrMikpLFMobCkpYnJlYWt9cmV0dXJuLTF9fXZhciBlZT17ZGVmaW5lTm9kZXM6W3tuYW1lOlwiU3VwZXJzY3JpcHRcIixzdHlsZTpwLnNwZWNpYWwocC5jb250ZW50KX0se25hbWU6XCJTdXBlcnNjcmlwdE1hcmtcIixzdHlsZTpwLnByb2Nlc3NpbmdJbnN0cnVjdGlvbn1dLHBhcnNlSW5saW5lOlt7bmFtZTpcIlN1cGVyc2NyaXB0XCIscGFyc2U6TnQoOTQsXCJTdXBlcnNjcmlwdFwiLFwiU3VwZXJzY3JpcHRNYXJrXCIpfV19LHNlPXtkZWZpbmVOb2Rlczpbe25hbWU6XCJTdWJzY3JpcHRcIixzdHlsZTpwLnNwZWNpYWwocC5jb250ZW50KX0se25hbWU6XCJTdWJzY3JpcHRNYXJrXCIsc3R5bGU6cC5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb259XSxwYXJzZUlubGluZTpbe25hbWU6XCJTdWJzY3JpcHRcIixwYXJzZTpOdCgxMjYsXCJTdWJzY3JpcHRcIixcIlN1YnNjcmlwdE1hcmtcIil9XX0scmU9e2RlZmluZU5vZGVzOlt7bmFtZTpcIkVtb2ppXCIsc3R5bGU6cC5jaGFyYWN0ZXJ9XSxwYXJzZUlubGluZTpbe25hbWU6XCJFbW9qaVwiLHBhcnNlKGUsdCxzKXtsZXQgcjtyZXR1cm4gdCE9NTh8fCEocj0vXlthLXpBLVpfMC05XSs6Ly5leGVjKGUuc2xpY2UocysxLGUuZW5kKSkpPy0xOmUuYWRkRWxlbWVudChlLmVsdChcIkVtb2ppXCIscyxzKzErclswXS5sZW5ndGgpKX19XX07ZXhwb3J0e0sgYXMgQmxvY2tDb250ZXh0LHcgYXMgRWxlbWVudCxyZSBhcyBFbW9qaSx0ZSBhcyBHRk0sVyBhcyBJbmxpbmVDb250ZXh0LHEgYXMgTGVhZkJsb2NrLFEgYXMgTGluZSxOIGFzIE1hcmtkb3duUGFyc2VyLFp0IGFzIFN0cmlrZXRocm91Z2gsc2UgYXMgU3Vic2NyaXB0LGVlIGFzIFN1cGVyc2NyaXB0LEd0IGFzIFRhYmxlLFZ0IGFzIFRhc2tMaXN0LFd0IGFzIHBhcnNlQ29kZSxZdCBhcyBwYXJzZXJ9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKGNyZWx0QDEuMC41KSBkZW5vIHByb2R1Y3Rpb24gKi9cbmZ1bmN0aW9uIHMoKXt2YXIgcj1hcmd1bWVudHNbMF07dHlwZW9mIHI9PVwic3RyaW5nXCImJihyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocikpO3ZhciBlPTEsdD1hcmd1bWVudHNbMV07aWYodCYmdHlwZW9mIHQ9PVwib2JqZWN0XCImJnQubm9kZVR5cGU9PW51bGwmJiFBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIG4gaW4gdClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSl7dmFyIG89dFtuXTt0eXBlb2Ygbz09XCJzdHJpbmdcIj9yLnNldEF0dHJpYnV0ZShuLG8pOm8hPW51bGwmJihyW25dPW8pfWUrK31mb3IoO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspZihyLGFyZ3VtZW50c1tlXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZihyLGUpe2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiKXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpO2Vsc2UgaWYoZSE9bnVsbClpZihlLm5vZGVUeXBlIT1udWxsKXIuYXBwZW5kQ2hpbGQoZSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWYocixlW3RdKTtlbHNlIHRocm93IG5ldyBSYW5nZUVycm9yKFwiVW5zdXBwb3J0ZWQgY2hpbGQgbm9kZTogXCIrZSl9ZXhwb3J0e3MgYXMgZGVmYXVsdH07XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGNvZGVtaXJyb3Ivc2VhcmNoQDYuMi4xKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydHtzaG93UGFuZWwgYXMgc2UsRWRpdG9yVmlldyBhcyBTLGdldFBhbmVsIGFzIEQsRGVjb3JhdGlvbiBhcyBmLFZpZXdQbHVnaW4gYXMgbGUscnVuU2NvcGVIYW5kbGVycyBhcyBwZX1mcm9tXCJAY29kZW1pcnJvci92aWV3XCI7aW1wb3J0e2NvZGVQb2ludEF0IGFzIGdlLGZyb21Db2RlUG9pbnQgYXMgeGUsY29kZVBvaW50U2l6ZSBhcyB2ZSxTdGF0ZUVmZmVjdCBhcyBXLFN0YXRlRmllbGQgYXMgb2UsRWRpdG9yU2VsZWN0aW9uIGFzIHksRmFjZXQgYXMgY2UsY29tYmluZUNvbmZpZyBhcyBhZSxDaGFyQ2F0ZWdvcnkgYXMgbSxSYW5nZVNldEJ1aWxkZXIgYXMgeWUsUHJlYyBhcyBNZSxFZGl0b3JTdGF0ZSBhcyBTZSxmaW5kQ2x1c3RlckJyZWFrIGFzIGhlfWZyb21cIkBjb2RlbWlycm9yL3N0YXRlXCI7aW1wb3J0IGEgZnJvbVwiL3Y5Ni9jcmVsdEAxLjAuNS9YLVpTOUFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWMy9kZW5vL2NyZWx0LmpzXCI7dmFyIHRlPXR5cGVvZiBTdHJpbmcucHJvdG90eXBlLm5vcm1hbGl6ZT09XCJmdW5jdGlvblwiP249Pm4ubm9ybWFsaXplKFwiTkZLRFwiKTpuPT5uLE09Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHI9MCxpPWUubGVuZ3RoLHMsbCl7dGhpcy50ZXN0PWwsdGhpcy52YWx1ZT17ZnJvbTowLHRvOjB9LHRoaXMuZG9uZT0hMSx0aGlzLm1hdGNoZXM9W10sdGhpcy5idWZmZXI9XCJcIix0aGlzLmJ1ZmZlclBvcz0wLHRoaXMuaXRlcj1lLml0ZXJSYW5nZShyLGkpLHRoaXMuYnVmZmVyU3RhcnQ9cix0aGlzLm5vcm1hbGl6ZT1zP289PnModGUobykpOnRlLHRoaXMucXVlcnk9dGhpcy5ub3JtYWxpemUodCl9cGVlaygpe2lmKHRoaXMuYnVmZmVyUG9zPT10aGlzLmJ1ZmZlci5sZW5ndGgpe2lmKHRoaXMuYnVmZmVyU3RhcnQrPXRoaXMuYnVmZmVyLmxlbmd0aCx0aGlzLml0ZXIubmV4dCgpLHRoaXMuaXRlci5kb25lKXJldHVybi0xO3RoaXMuYnVmZmVyUG9zPTAsdGhpcy5idWZmZXI9dGhpcy5pdGVyLnZhbHVlfXJldHVybiBnZSh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlclBvcyl9bmV4dCgpe2Zvcig7dGhpcy5tYXRjaGVzLmxlbmd0aDspdGhpcy5tYXRjaGVzLnBvcCgpO3JldHVybiB0aGlzLm5leHRPdmVybGFwcGluZygpfW5leHRPdmVybGFwcGluZygpe2Zvcig7Oyl7bGV0IGU9dGhpcy5wZWVrKCk7aWYoZTwwKXJldHVybiB0aGlzLmRvbmU9ITAsdGhpcztsZXQgdD14ZShlKSxyPXRoaXMuYnVmZmVyU3RhcnQrdGhpcy5idWZmZXJQb3M7dGhpcy5idWZmZXJQb3MrPXZlKGUpO2xldCBpPXRoaXMubm9ybWFsaXplKHQpO2ZvcihsZXQgcz0wLGw9cjs7cysrKXtsZXQgbz1pLmNoYXJDb2RlQXQocyksYz10aGlzLm1hdGNoKG8sbCk7aWYoYylyZXR1cm4gdGhpcy52YWx1ZT1jLHRoaXM7aWYocz09aS5sZW5ndGgtMSlicmVhaztsPT1yJiZzPHQubGVuZ3RoJiZ0LmNoYXJDb2RlQXQocyk9PW8mJmwrK319fW1hdGNoKGUsdCl7bGV0IHI9bnVsbDtmb3IobGV0IGk9MDtpPHRoaXMubWF0Y2hlcy5sZW5ndGg7aSs9Mil7bGV0IHM9dGhpcy5tYXRjaGVzW2ldLGw9ITE7dGhpcy5xdWVyeS5jaGFyQ29kZUF0KHMpPT1lJiYocz09dGhpcy5xdWVyeS5sZW5ndGgtMT9yPXtmcm9tOnRoaXMubWF0Y2hlc1tpKzFdLHRvOnQrMX06KHRoaXMubWF0Y2hlc1tpXSsrLGw9ITApKSxsfHwodGhpcy5tYXRjaGVzLnNwbGljZShpLDIpLGktPTIpfXJldHVybiB0aGlzLnF1ZXJ5LmNoYXJDb2RlQXQoMCk9PWUmJih0aGlzLnF1ZXJ5Lmxlbmd0aD09MT9yPXtmcm9tOnQsdG86dCsxfTp0aGlzLm1hdGNoZXMucHVzaCgxLHQpKSxyJiZ0aGlzLnRlc3QmJiF0aGlzLnRlc3Qoci5mcm9tLHIudG8sdGhpcy5idWZmZXIsdGhpcy5idWZmZXJQb3MpJiYocj1udWxsKSxyfX07dHlwZW9mIFN5bWJvbDxcInVcIiYmKE0ucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pO3ZhciB1ZT17ZnJvbTotMSx0bzotMSxtYXRjaDovLiovLmV4ZWMoXCJcIil9LFU9XCJnbVwiKygveC8udW5pY29kZT09bnVsbD9cIlwiOlwidVwiKSxFPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLGk9MCxzPWUubGVuZ3RoKXtpZih0aGlzLnRleHQ9ZSx0aGlzLnRvPXMsdGhpcy5jdXJMaW5lPVwiXCIsdGhpcy5kb25lPSExLHRoaXMudmFsdWU9dWUsL1xcXFxbc1dEbnJdfFxcbnxcXHJ8XFxbXFxeLy50ZXN0KHQpKXJldHVybiBuZXcgUChlLHQscixpLHMpO3RoaXMucmU9bmV3IFJlZ0V4cCh0LFUrKHI/Lmlnbm9yZUNhc2U/XCJpXCI6XCJcIikpLHRoaXMudGVzdD1yPy50ZXN0LHRoaXMuaXRlcj1lLml0ZXIoKTtsZXQgbD1lLmxpbmVBdChpKTt0aGlzLmN1ckxpbmVTdGFydD1sLmZyb20sdGhpcy5tYXRjaFBvcz1xKGUsaSksdGhpcy5nZXRMaW5lKHRoaXMuY3VyTGluZVN0YXJ0KX1nZXRMaW5lKGUpe3RoaXMuaXRlci5uZXh0KGUpLHRoaXMuaXRlci5saW5lQnJlYWs/dGhpcy5jdXJMaW5lPVwiXCI6KHRoaXMuY3VyTGluZT10aGlzLml0ZXIudmFsdWUsdGhpcy5jdXJMaW5lU3RhcnQrdGhpcy5jdXJMaW5lLmxlbmd0aD50aGlzLnRvJiYodGhpcy5jdXJMaW5lPXRoaXMuY3VyTGluZS5zbGljZSgwLHRoaXMudG8tdGhpcy5jdXJMaW5lU3RhcnQpKSx0aGlzLml0ZXIubmV4dCgpKX1uZXh0TGluZSgpe3RoaXMuY3VyTGluZVN0YXJ0PXRoaXMuY3VyTGluZVN0YXJ0K3RoaXMuY3VyTGluZS5sZW5ndGgrMSx0aGlzLmN1ckxpbmVTdGFydD50aGlzLnRvP3RoaXMuY3VyTGluZT1cIlwiOnRoaXMuZ2V0TGluZSgwKX1uZXh0KCl7Zm9yKGxldCBlPXRoaXMubWF0Y2hQb3MtdGhpcy5jdXJMaW5lU3RhcnQ7Oyl7dGhpcy5yZS5sYXN0SW5kZXg9ZTtsZXQgdD10aGlzLm1hdGNoUG9zPD10aGlzLnRvJiZ0aGlzLnJlLmV4ZWModGhpcy5jdXJMaW5lKTtpZih0KXtsZXQgcj10aGlzLmN1ckxpbmVTdGFydCt0LmluZGV4LGk9cit0WzBdLmxlbmd0aDtpZih0aGlzLm1hdGNoUG9zPXEodGhpcy50ZXh0LGkrKHI9PWk/MTowKSkscj09dGhpcy5jdXJMaW5lLmxlbmd0aCYmdGhpcy5uZXh0TGluZSgpLChyPGl8fHI+dGhpcy52YWx1ZS50bykmJighdGhpcy50ZXN0fHx0aGlzLnRlc3QocixpLHQpKSlyZXR1cm4gdGhpcy52YWx1ZT17ZnJvbTpyLHRvOmksbWF0Y2g6dH0sdGhpcztlPXRoaXMubWF0Y2hQb3MtdGhpcy5jdXJMaW5lU3RhcnR9ZWxzZSBpZih0aGlzLmN1ckxpbmVTdGFydCt0aGlzLmN1ckxpbmUubGVuZ3RoPHRoaXMudG8pdGhpcy5uZXh0TGluZSgpLGU9MDtlbHNlIHJldHVybiB0aGlzLmRvbmU9ITAsdGhpc319fSxIPW5ldyBXZWFrTWFwLHY9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZyb209ZSx0aGlzLnRleHQ9dH1nZXQgdG8oKXtyZXR1cm4gdGhpcy5mcm9tK3RoaXMudGV4dC5sZW5ndGh9c3RhdGljIGdldChlLHQscil7bGV0IGk9SC5nZXQoZSk7aWYoIWl8fGkuZnJvbT49cnx8aS50bzw9dCl7bGV0IG89bmV3IHYodCxlLnNsaWNlU3RyaW5nKHQscikpO3JldHVybiBILnNldChlLG8pLG99aWYoaS5mcm9tPT10JiZpLnRvPT1yKXJldHVybiBpO2xldHt0ZXh0OnMsZnJvbTpsfT1pO3JldHVybiBsPnQmJihzPWUuc2xpY2VTdHJpbmcodCxsKStzLGw9dCksaS50bzxyJiYocys9ZS5zbGljZVN0cmluZyhpLnRvLHIpKSxILnNldChlLG5ldyB2KGwscykpLG5ldyB2KHQscy5zbGljZSh0LWwsci1sKSl9fSxQPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLGkscyl7dGhpcy50ZXh0PWUsdGhpcy50bz1zLHRoaXMuZG9uZT0hMSx0aGlzLnZhbHVlPXVlLHRoaXMubWF0Y2hQb3M9cShlLGkpLHRoaXMucmU9bmV3IFJlZ0V4cCh0LFUrKHI/Lmlnbm9yZUNhc2U/XCJpXCI6XCJcIikpLHRoaXMudGVzdD1yPy50ZXN0LHRoaXMuZmxhdD12LmdldChlLGksdGhpcy5jaHVua0VuZChpKzVlMykpfWNodW5rRW5kKGUpe3JldHVybiBlPj10aGlzLnRvP3RoaXMudG86dGhpcy50ZXh0LmxpbmVBdChlKS50b31uZXh0KCl7Zm9yKDs7KXtsZXQgZT10aGlzLnJlLmxhc3RJbmRleD10aGlzLm1hdGNoUG9zLXRoaXMuZmxhdC5mcm9tLHQ9dGhpcy5yZS5leGVjKHRoaXMuZmxhdC50ZXh0KTtpZih0JiYhdFswXSYmdC5pbmRleD09ZSYmKHRoaXMucmUubGFzdEluZGV4PWUrMSx0PXRoaXMucmUuZXhlYyh0aGlzLmZsYXQudGV4dCkpLHQpe2xldCByPXRoaXMuZmxhdC5mcm9tK3QuaW5kZXgsaT1yK3RbMF0ubGVuZ3RoO2lmKCh0aGlzLmZsYXQudG8+PXRoaXMudG98fHQuaW5kZXgrdFswXS5sZW5ndGg8PXRoaXMuZmxhdC50ZXh0Lmxlbmd0aC0xMCkmJighdGhpcy50ZXN0fHx0aGlzLnRlc3QocixpLHQpKSlyZXR1cm4gdGhpcy52YWx1ZT17ZnJvbTpyLHRvOmksbWF0Y2g6dH0sdGhpcy5tYXRjaFBvcz1xKHRoaXMudGV4dCxpKyhyPT1pPzE6MCkpLHRoaXN9aWYodGhpcy5mbGF0LnRvPT10aGlzLnRvKXJldHVybiB0aGlzLmRvbmU9ITAsdGhpczt0aGlzLmZsYXQ9di5nZXQodGhpcy50ZXh0LHRoaXMuZmxhdC5mcm9tLHRoaXMuY2h1bmtFbmQodGhpcy5mbGF0LmZyb20rdGhpcy5mbGF0LnRleHQubGVuZ3RoKjIpKX19fTt0eXBlb2YgU3ltYm9sPFwidVwiJiYoRS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1QLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTtmdW5jdGlvbiBiZShuKXt0cnl7cmV0dXJuIG5ldyBSZWdFeHAobixVKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gcShuLGUpe2lmKGU+PW4ubGVuZ3RoKXJldHVybiBlO2xldCB0PW4ubGluZUF0KGUpLHI7Zm9yKDtlPHQudG8mJihyPXQudGV4dC5jaGFyQ29kZUF0KGUtdC5mcm9tKSk+PTU2MzIwJiZyPDU3MzQ0OyllKys7cmV0dXJuIGV9ZnVuY3Rpb24gSyhuKXtsZXQgZT1hKFwiaW5wdXRcIix7Y2xhc3M6XCJjbS10ZXh0ZmllbGRcIixuYW1lOlwibGluZVwifSksdD1hKFwiZm9ybVwiLHtjbGFzczpcImNtLWdvdG9MaW5lXCIsb25rZXlkb3duOmk9PntpLmtleUNvZGU9PTI3PyhpLnByZXZlbnREZWZhdWx0KCksbi5kaXNwYXRjaCh7ZWZmZWN0czpSLm9mKCExKX0pLG4uZm9jdXMoKSk6aS5rZXlDb2RlPT0xMyYmKGkucHJldmVudERlZmF1bHQoKSxyKCkpfSxvbnN1Ym1pdDppPT57aS5wcmV2ZW50RGVmYXVsdCgpLHIoKX19LGEoXCJsYWJlbFwiLG4uc3RhdGUucGhyYXNlKFwiR28gdG8gbGluZVwiKSxcIjogXCIsZSksXCIgXCIsYShcImJ1dHRvblwiLHtjbGFzczpcImNtLWJ1dHRvblwiLHR5cGU6XCJzdWJtaXRcIn0sbi5zdGF0ZS5waHJhc2UoXCJnb1wiKSkpO2Z1bmN0aW9uIHIoKXtsZXQgaT0vXihbKy1dKT8oXFxkKyk/KDpcXGQrKT8oJSk/JC8uZXhlYyhlLnZhbHVlKTtpZighaSlyZXR1cm47bGV0e3N0YXRlOnN9PW4sbD1zLmRvYy5saW5lQXQocy5zZWxlY3Rpb24ubWFpbi5oZWFkKSxbLG8sYyxkLGhdPWksZz1kPytkLnNsaWNlKDEpOjAseD1jPytjOmwubnVtYmVyO2lmKGMmJmgpe2xldCBOPXgvMTAwO28mJihOPU4qKG89PVwiLVwiPy0xOjEpK2wubnVtYmVyL3MuZG9jLmxpbmVzKSx4PU1hdGgucm91bmQocy5kb2MubGluZXMqTil9ZWxzZSBjJiZvJiYoeD14KihvPT1cIi1cIj8tMToxKStsLm51bWJlcik7bGV0IGVlPXMuZG9jLmxpbmUoTWF0aC5tYXgoMSxNYXRoLm1pbihzLmRvYy5saW5lcyx4KSkpO24uZGlzcGF0Y2goe2VmZmVjdHM6Ui5vZighMSksc2VsZWN0aW9uOnkuY3Vyc29yKGVlLmZyb20rTWF0aC5tYXgoMCxNYXRoLm1pbihnLGVlLmxlbmd0aCkpKSxzY3JvbGxJbnRvVmlldzohMH0pLG4uZm9jdXMoKX1yZXR1cm57ZG9tOnR9fXZhciBSPVcuZGVmaW5lKCksbmU9b2UuZGVmaW5lKHtjcmVhdGUoKXtyZXR1cm4hMH0sdXBkYXRlKG4sZSl7Zm9yKGxldCB0IG9mIGUuZWZmZWN0cyl0LmlzKFIpJiYobj10LnZhbHVlKTtyZXR1cm4gbn0scHJvdmlkZTpuPT5zZS5mcm9tKG4sZT0+ZT9LOm51bGwpfSksa2U9bj0+e2xldCBlPUQobixLKTtpZighZSl7bGV0IHQ9W1Iub2YoITApXTtuLnN0YXRlLmZpZWxkKG5lLCExKT09bnVsbCYmdC5wdXNoKFcuYXBwZW5kQ29uZmlnLm9mKFtuZSxDZV0pKSxuLmRpc3BhdGNoKHtlZmZlY3RzOnR9KSxlPUQobixLKX1yZXR1cm4gZSYmZS5kb20ucXVlcnlTZWxlY3RvcihcImlucHV0XCIpLmZvY3VzKCksITB9LENlPVMuYmFzZVRoZW1lKHtcIi5jbS1wYW5lbC5jbS1nb3RvTGluZVwiOntwYWRkaW5nOlwiMnB4IDZweCA0cHhcIixcIiYgbGFiZWxcIjp7Zm9udFNpemU6XCI4MCVcIn19fSksTGU9e2hpZ2hsaWdodFdvcmRBcm91bmRDdXJzb3I6ITEsbWluU2VsZWN0aW9uTGVuZ3RoOjEsbWF4TWF0Y2hlczoxMDAsd2hvbGVXb3JkczohMX0sZmU9Y2UuZGVmaW5lKHtjb21iaW5lKG4pe3JldHVybiBhZShuLExlLHtoaWdobGlnaHRXb3JkQXJvdW5kQ3Vyc29yOihlLHQpPT5lfHx0LG1pblNlbGVjdGlvbkxlbmd0aDpNYXRoLm1pbixtYXhNYXRjaGVzOk1hdGgubWlufSl9fSk7ZnVuY3Rpb24gR2Uobil7bGV0IGU9W0RlLHdlXTtyZXR1cm4gbiYmZS5wdXNoKGZlLm9mKG4pKSxlfXZhciBXZT1mLm1hcmsoe2NsYXNzOlwiY20tc2VsZWN0aW9uTWF0Y2hcIn0pLEFlPWYubWFyayh7Y2xhc3M6XCJjbS1zZWxlY3Rpb25NYXRjaCBjbS1zZWxlY3Rpb25NYXRjaC1tYWluXCJ9KTtmdW5jdGlvbiByZShuLGUsdCxyKXtyZXR1cm4odD09MHx8bihlLnNsaWNlRG9jKHQtMSx0KSkhPW0uV29yZCkmJihyPT1lLmRvYy5sZW5ndGh8fG4oZS5zbGljZURvYyhyLHIrMSkpIT1tLldvcmQpfWZ1bmN0aW9uIEZlKG4sZSx0LHIpe3JldHVybiBuKGUuc2xpY2VEb2ModCx0KzEpKT09bS5Xb3JkJiZuKGUuc2xpY2VEb2Moci0xLHIpKT09bS5Xb3JkfXZhciB3ZT1sZS5mcm9tQ2xhc3MoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5kZWNvcmF0aW9ucz10aGlzLmdldERlY28obil9dXBkYXRlKG4peyhuLnNlbGVjdGlvblNldHx8bi5kb2NDaGFuZ2VkfHxuLnZpZXdwb3J0Q2hhbmdlZCkmJih0aGlzLmRlY29yYXRpb25zPXRoaXMuZ2V0RGVjbyhuLnZpZXcpKX1nZXREZWNvKG4pe2xldCBlPW4uc3RhdGUuZmFjZXQoZmUpLHtzdGF0ZTp0fT1uLHI9dC5zZWxlY3Rpb247aWYoci5yYW5nZXMubGVuZ3RoPjEpcmV0dXJuIGYubm9uZTtsZXQgaT1yLm1haW4scyxsPW51bGw7aWYoaS5lbXB0eSl7aWYoIWUuaGlnaGxpZ2h0V29yZEFyb3VuZEN1cnNvcilyZXR1cm4gZi5ub25lO2xldCBjPXQud29yZEF0KGkuaGVhZCk7aWYoIWMpcmV0dXJuIGYubm9uZTtsPXQuY2hhckNhdGVnb3JpemVyKGkuaGVhZCkscz10LnNsaWNlRG9jKGMuZnJvbSxjLnRvKX1lbHNle2xldCBjPWkudG8taS5mcm9tO2lmKGM8ZS5taW5TZWxlY3Rpb25MZW5ndGh8fGM+MjAwKXJldHVybiBmLm5vbmU7aWYoZS53aG9sZVdvcmRzKXtpZihzPXQuc2xpY2VEb2MoaS5mcm9tLGkudG8pLGw9dC5jaGFyQ2F0ZWdvcml6ZXIoaS5oZWFkKSwhKHJlKGwsdCxpLmZyb20saS50bykmJkZlKGwsdCxpLmZyb20saS50bykpKXJldHVybiBmLm5vbmV9ZWxzZSBpZihzPXQuc2xpY2VEb2MoaS5mcm9tLGkudG8pLnRyaW0oKSwhcylyZXR1cm4gZi5ub25lfWxldCBvPVtdO2ZvcihsZXQgYyBvZiBuLnZpc2libGVSYW5nZXMpe2xldCBkPW5ldyBNKHQuZG9jLHMsYy5mcm9tLGMudG8pO2Zvcig7IWQubmV4dCgpLmRvbmU7KXtsZXR7ZnJvbTpoLHRvOmd9PWQudmFsdWU7aWYoKCFsfHxyZShsLHQsaCxnKSkmJihpLmVtcHR5JiZoPD1pLmZyb20mJmc+PWkudG8/by5wdXNoKEFlLnJhbmdlKGgsZykpOihoPj1pLnRvfHxnPD1pLmZyb20pJiZvLnB1c2goV2UucmFuZ2UoaCxnKSksby5sZW5ndGg+ZS5tYXhNYXRjaGVzKSlyZXR1cm4gZi5ub25lfX1yZXR1cm4gZi5zZXQobyl9fSx7ZGVjb3JhdGlvbnM6bj0+bi5kZWNvcmF0aW9uc30pLERlPVMuYmFzZVRoZW1lKHtcIi5jbS1zZWxlY3Rpb25NYXRjaFwiOntiYWNrZ3JvdW5kQ29sb3I6XCIjOTlmZjc3ODBcIn0sXCIuY20tc2VhcmNoTWF0Y2ggLmNtLXNlbGVjdGlvbk1hdGNoXCI6e2JhY2tncm91bmRDb2xvcjpcInRyYW5zcGFyZW50XCJ9fSksRWU9KHtzdGF0ZTpuLGRpc3BhdGNoOmV9KT0+e2xldHtzZWxlY3Rpb246dH09bixyPXkuY3JlYXRlKHQucmFuZ2VzLm1hcChpPT5uLndvcmRBdChpLmhlYWQpfHx5LmN1cnNvcihpLmhlYWQpKSx0Lm1haW5JbmRleCk7cmV0dXJuIHIuZXEodCk/ITE6KGUobi51cGRhdGUoe3NlbGVjdGlvbjpyfSkpLCEwKX07ZnVuY3Rpb24gUGUobixlKXtsZXR7bWFpbjp0LHJhbmdlczpyfT1uLnNlbGVjdGlvbixpPW4ud29yZEF0KHQuaGVhZCkscz1pJiZpLmZyb209PXQuZnJvbSYmaS50bz09dC50bztmb3IobGV0IGw9ITEsbz1uZXcgTShuLmRvYyxlLHJbci5sZW5ndGgtMV0udG8pOzspaWYoby5uZXh0KCksby5kb25lKXtpZihsKXJldHVybiBudWxsO289bmV3IE0obi5kb2MsZSwwLE1hdGgubWF4KDAscltyLmxlbmd0aC0xXS5mcm9tLTEpKSxsPSEwfWVsc2V7aWYobCYmci5zb21lKGM9PmMuZnJvbT09by52YWx1ZS5mcm9tKSljb250aW51ZTtpZihzKXtsZXQgYz1uLndvcmRBdChvLnZhbHVlLmZyb20pO2lmKCFjfHxjLmZyb20hPW8udmFsdWUuZnJvbXx8Yy50byE9by52YWx1ZS50byljb250aW51ZX1yZXR1cm4gby52YWx1ZX19dmFyIHFlPSh7c3RhdGU6bixkaXNwYXRjaDplfSk9PntsZXR7cmFuZ2VzOnR9PW4uc2VsZWN0aW9uO2lmKHQuc29tZShzPT5zLmZyb209PT1zLnRvKSlyZXR1cm4gRWUoe3N0YXRlOm4sZGlzcGF0Y2g6ZX0pO2xldCByPW4uc2xpY2VEb2ModFswXS5mcm9tLHRbMF0udG8pO2lmKG4uc2VsZWN0aW9uLnJhbmdlcy5zb21lKHM9Pm4uc2xpY2VEb2Mocy5mcm9tLHMudG8pIT1yKSlyZXR1cm4hMTtsZXQgaT1QZShuLHIpO3JldHVybiBpPyhlKG4udXBkYXRlKHtzZWxlY3Rpb246bi5zZWxlY3Rpb24uYWRkUmFuZ2UoeS5yYW5nZShpLmZyb20saS50byksITEpLGVmZmVjdHM6Uy5zY3JvbGxJbnRvVmlldyhpLnRvKX0pKSwhMCk6ITF9LEI9Y2UuZGVmaW5lKHtjb21iaW5lKG4pe3JldHVybiBhZShuLHt0b3A6ITEsY2FzZVNlbnNpdGl2ZTohMSxsaXRlcmFsOiExLHdob2xlV29yZDohMSxjcmVhdGVQYW5lbDplPT5uZXcgaihlKX0pfX0pO2Z1bmN0aW9uIFFlKG4pe3JldHVybiBuP1tCLm9mKG4pLEpdOkp9dmFyIEk9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5zZWFyY2g9ZS5zZWFyY2gsdGhpcy5jYXNlU2Vuc2l0aXZlPSEhZS5jYXNlU2Vuc2l0aXZlLHRoaXMubGl0ZXJhbD0hIWUubGl0ZXJhbCx0aGlzLnJlZ2V4cD0hIWUucmVnZXhwLHRoaXMucmVwbGFjZT1lLnJlcGxhY2V8fFwiXCIsdGhpcy52YWxpZD0hIXRoaXMuc2VhcmNoJiYoIXRoaXMucmVnZXhwfHxiZSh0aGlzLnNlYXJjaCkpLHRoaXMudW5xdW90ZWQ9dGhpcy5saXRlcmFsP3RoaXMuc2VhcmNoOnRoaXMuc2VhcmNoLnJlcGxhY2UoL1xcXFwoW25ydFxcXFxdKS9nLCh0LHIpPT5yPT1cIm5cIj9gXG5gOnI9PVwiclwiP1wiXFxyXCI6cj09XCJ0XCI/XCJcdFwiOlwiXFxcXFwiKSx0aGlzLndob2xlV29yZD0hIWUud2hvbGVXb3JkfWVxKGUpe3JldHVybiB0aGlzLnNlYXJjaD09ZS5zZWFyY2gmJnRoaXMucmVwbGFjZT09ZS5yZXBsYWNlJiZ0aGlzLmNhc2VTZW5zaXRpdmU9PWUuY2FzZVNlbnNpdGl2ZSYmdGhpcy5yZWdleHA9PWUucmVnZXhwJiZ0aGlzLndob2xlV29yZD09ZS53aG9sZVdvcmR9Y3JlYXRlKCl7cmV0dXJuIHRoaXMucmVnZXhwP25ldyBRKHRoaXMpOm5ldyBHKHRoaXMpfWdldEN1cnNvcihlLHQ9MCxyKXtsZXQgaT1lLmRvYz9lOlNlLmNyZWF0ZSh7ZG9jOmV9KTtyZXR1cm4gcj09bnVsbCYmKHI9aS5kb2MubGVuZ3RoKSx0aGlzLnJlZ2V4cD9rKHRoaXMsaSx0LHIpOmIodGhpcyxpLHQscil9fSxPPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuc3BlYz1lfX07ZnVuY3Rpb24gYihuLGUsdCxyKXtyZXR1cm4gbmV3IE0oZS5kb2Msbi51bnF1b3RlZCx0LHIsbi5jYXNlU2Vuc2l0aXZlP3ZvaWQgMDppPT5pLnRvTG93ZXJDYXNlKCksbi53aG9sZVdvcmQ/UmUoZS5kb2MsZS5jaGFyQ2F0ZWdvcml6ZXIoZS5zZWxlY3Rpb24ubWFpbi5oZWFkKSk6dm9pZCAwKX1mdW5jdGlvbiBSZShuLGUpe3JldHVybih0LHIsaSxzKT0+KChzPnR8fHMraS5sZW5ndGg8cikmJihzPU1hdGgubWF4KDAsdC0yKSxpPW4uc2xpY2VTdHJpbmcocyxNYXRoLm1pbihuLmxlbmd0aCxyKzIpKSksKGUoJChpLHQtcykpIT1tLldvcmR8fGUoVChpLHQtcykpIT1tLldvcmQpJiYoZShUKGksci1zKSkhPW0uV29yZHx8ZSgkKGksci1zKSkhPW0uV29yZCkpfXZhciBHPWNsYXNzIGV4dGVuZHMgT3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX1uZXh0TWF0Y2goZSx0LHIpe2xldCBpPWIodGhpcy5zcGVjLGUscixlLmRvYy5sZW5ndGgpLm5leHRPdmVybGFwcGluZygpO3JldHVybiBpLmRvbmUmJihpPWIodGhpcy5zcGVjLGUsMCx0KS5uZXh0T3ZlcmxhcHBpbmcoKSksaS5kb25lP251bGw6aS52YWx1ZX1wcmV2TWF0Y2hJblJhbmdlKGUsdCxyKXtmb3IobGV0IGk9cjs7KXtsZXQgcz1NYXRoLm1heCh0LGktMWU0LXRoaXMuc3BlYy51bnF1b3RlZC5sZW5ndGgpLGw9Yih0aGlzLnNwZWMsZSxzLGkpLG89bnVsbDtmb3IoOyFsLm5leHRPdmVybGFwcGluZygpLmRvbmU7KW89bC52YWx1ZTtpZihvKXJldHVybiBvO2lmKHM9PXQpcmV0dXJuIG51bGw7aS09MWU0fX1wcmV2TWF0Y2goZSx0LHIpe3JldHVybiB0aGlzLnByZXZNYXRjaEluUmFuZ2UoZSwwLHQpfHx0aGlzLnByZXZNYXRjaEluUmFuZ2UoZSxyLGUuZG9jLmxlbmd0aCl9Z2V0UmVwbGFjZW1lbnQoZSl7cmV0dXJuIHRoaXMuc3BlYy5yZXBsYWNlfW1hdGNoQWxsKGUsdCl7bGV0IHI9Yih0aGlzLnNwZWMsZSwwLGUuZG9jLmxlbmd0aCksaT1bXTtmb3IoOyFyLm5leHQoKS5kb25lOyl7aWYoaS5sZW5ndGg+PXQpcmV0dXJuIG51bGw7aS5wdXNoKHIudmFsdWUpfXJldHVybiBpfWhpZ2hsaWdodChlLHQscixpKXtsZXQgcz1iKHRoaXMuc3BlYyxlLE1hdGgubWF4KDAsdC10aGlzLnNwZWMudW5xdW90ZWQubGVuZ3RoKSxNYXRoLm1pbihyK3RoaXMuc3BlYy51bnF1b3RlZC5sZW5ndGgsZS5kb2MubGVuZ3RoKSk7Zm9yKDshcy5uZXh0KCkuZG9uZTspaShzLnZhbHVlLmZyb20scy52YWx1ZS50byl9fTtmdW5jdGlvbiBrKG4sZSx0LHIpe3JldHVybiBuZXcgRShlLmRvYyxuLnNlYXJjaCx7aWdub3JlQ2FzZTohbi5jYXNlU2Vuc2l0aXZlLHRlc3Q6bi53aG9sZVdvcmQ/SWUoZS5jaGFyQ2F0ZWdvcml6ZXIoZS5zZWxlY3Rpb24ubWFpbi5oZWFkKSk6dm9pZCAwfSx0LHIpfWZ1bmN0aW9uICQobixlKXtyZXR1cm4gbi5zbGljZShoZShuLGUsITEpLGUpfWZ1bmN0aW9uIFQobixlKXtyZXR1cm4gbi5zbGljZShlLGhlKG4sZSkpfWZ1bmN0aW9uIEllKG4pe3JldHVybihlLHQscik9PiFyWzBdLmxlbmd0aHx8KG4oJChyLmlucHV0LHIuaW5kZXgpKSE9bS5Xb3JkfHxuKFQoci5pbnB1dCxyLmluZGV4KSkhPW0uV29yZCkmJihuKFQoci5pbnB1dCxyLmluZGV4K3JbMF0ubGVuZ3RoKSkhPW0uV29yZHx8bigkKHIuaW5wdXQsci5pbmRleCtyWzBdLmxlbmd0aCkpIT1tLldvcmQpfXZhciBRPWNsYXNzIGV4dGVuZHMgT3tuZXh0TWF0Y2goZSx0LHIpe2xldCBpPWsodGhpcy5zcGVjLGUscixlLmRvYy5sZW5ndGgpLm5leHQoKTtyZXR1cm4gaS5kb25lJiYoaT1rKHRoaXMuc3BlYyxlLDAsdCkubmV4dCgpKSxpLmRvbmU/bnVsbDppLnZhbHVlfXByZXZNYXRjaEluUmFuZ2UoZSx0LHIpe2ZvcihsZXQgaT0xOztpKyspe2xldCBzPU1hdGgubWF4KHQsci1pKjFlNCksbD1rKHRoaXMuc3BlYyxlLHMsciksbz1udWxsO2Zvcig7IWwubmV4dCgpLmRvbmU7KW89bC52YWx1ZTtpZihvJiYocz09dHx8by5mcm9tPnMrMTApKXJldHVybiBvO2lmKHM9PXQpcmV0dXJuIG51bGx9fXByZXZNYXRjaChlLHQscil7cmV0dXJuIHRoaXMucHJldk1hdGNoSW5SYW5nZShlLDAsdCl8fHRoaXMucHJldk1hdGNoSW5SYW5nZShlLHIsZS5kb2MubGVuZ3RoKX1nZXRSZXBsYWNlbWVudChlKXtyZXR1cm4gdGhpcy5zcGVjLnJlcGxhY2UucmVwbGFjZSgvXFwkKFskJlxcZCtdKS9nLCh0LHIpPT5yPT1cIiRcIj9cIiRcIjpyPT1cIiZcIj9lLm1hdGNoWzBdOnIhPVwiMFwiJiYrcjxlLm1hdGNoLmxlbmd0aD9lLm1hdGNoW3JdOnQpfW1hdGNoQWxsKGUsdCl7bGV0IHI9ayh0aGlzLnNwZWMsZSwwLGUuZG9jLmxlbmd0aCksaT1bXTtmb3IoOyFyLm5leHQoKS5kb25lOyl7aWYoaS5sZW5ndGg+PXQpcmV0dXJuIG51bGw7aS5wdXNoKHIudmFsdWUpfXJldHVybiBpfWhpZ2hsaWdodChlLHQscixpKXtsZXQgcz1rKHRoaXMuc3BlYyxlLE1hdGgubWF4KDAsdC0yNTApLE1hdGgubWluKHIrMjUwLGUuZG9jLmxlbmd0aCkpO2Zvcig7IXMubmV4dCgpLmRvbmU7KWkocy52YWx1ZS5mcm9tLHMudmFsdWUudG8pfX0sTD1XLmRlZmluZSgpLFg9Vy5kZWZpbmUoKSxwPW9lLmRlZmluZSh7Y3JlYXRlKG4pe3JldHVybiBuZXcgQyhfKG4pLmNyZWF0ZSgpLG51bGwpfSx1cGRhdGUobixlKXtmb3IobGV0IHQgb2YgZS5lZmZlY3RzKXQuaXMoTCk/bj1uZXcgQyh0LnZhbHVlLmNyZWF0ZSgpLG4ucGFuZWwpOnQuaXMoWCkmJihuPW5ldyBDKG4ucXVlcnksdC52YWx1ZT9ZOm51bGwpKTtyZXR1cm4gbn0scHJvdmlkZTpuPT5zZS5mcm9tKG4sZT0+ZS5wYW5lbCl9KTtmdW5jdGlvbiBqZShuKXtsZXQgZT1uLmZpZWxkKHAsITEpO3JldHVybiBlP2UucXVlcnkuc3BlYzpfKG4pfWZ1bmN0aW9uIEplKG4pe3ZhciBlO3JldHVybigoZT1uLmZpZWxkKHAsITEpKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmUucGFuZWwpIT1udWxsfXZhciBDPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5xdWVyeT1lLHRoaXMucGFuZWw9dH19LE9lPWYubWFyayh7Y2xhc3M6XCJjbS1zZWFyY2hNYXRjaFwifSksJGU9Zi5tYXJrKHtjbGFzczpcImNtLXNlYXJjaE1hdGNoIGNtLXNlYXJjaE1hdGNoLXNlbGVjdGVkXCJ9KSxUZT1sZS5mcm9tQ2xhc3MoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy52aWV3PW4sdGhpcy5kZWNvcmF0aW9ucz10aGlzLmhpZ2hsaWdodChuLnN0YXRlLmZpZWxkKHApKX11cGRhdGUobil7bGV0IGU9bi5zdGF0ZS5maWVsZChwKTsoZSE9bi5zdGFydFN0YXRlLmZpZWxkKHApfHxuLmRvY0NoYW5nZWR8fG4uc2VsZWN0aW9uU2V0fHxuLnZpZXdwb3J0Q2hhbmdlZCkmJih0aGlzLmRlY29yYXRpb25zPXRoaXMuaGlnaGxpZ2h0KGUpKX1oaWdobGlnaHQoe3F1ZXJ5Om4scGFuZWw6ZX0pe2lmKCFlfHwhbi5zcGVjLnZhbGlkKXJldHVybiBmLm5vbmU7bGV0e3ZpZXc6dH09dGhpcyxyPW5ldyB5ZTtmb3IobGV0IGk9MCxzPXQudmlzaWJsZVJhbmdlcyxsPXMubGVuZ3RoO2k8bDtpKyspe2xldHtmcm9tOm8sdG86Y309c1tpXTtmb3IoO2k8bC0xJiZjPnNbaSsxXS5mcm9tLTIqMjUwOyljPXNbKytpXS50bztuLmhpZ2hsaWdodCh0LnN0YXRlLG8sYywoZCxoKT0+e2xldCBnPXQuc3RhdGUuc2VsZWN0aW9uLnJhbmdlcy5zb21lKHg9PnguZnJvbT09ZCYmeC50bz09aCk7ci5hZGQoZCxoLGc/JGU6T2UpfSl9cmV0dXJuIHIuZmluaXNoKCl9fSx7ZGVjb3JhdGlvbnM6bj0+bi5kZWNvcmF0aW9uc30pO2Z1bmN0aW9uIEEobil7cmV0dXJuIGU9PntsZXQgdD1lLnN0YXRlLmZpZWxkKHAsITEpO3JldHVybiB0JiZ0LnF1ZXJ5LnNwZWMudmFsaWQ/bihlLHQpOmRlKGUpfX12YXIgej1BKChuLHtxdWVyeTplfSk9PntsZXR7dG86dH09bi5zdGF0ZS5zZWxlY3Rpb24ubWFpbixyPWUubmV4dE1hdGNoKG4uc3RhdGUsdCx0KTtyZXR1cm4gcj8obi5kaXNwYXRjaCh7c2VsZWN0aW9uOnthbmNob3I6ci5mcm9tLGhlYWQ6ci50b30sc2Nyb2xsSW50b1ZpZXc6ITAsZWZmZWN0czpaKG4sciksdXNlckV2ZW50Olwic2VsZWN0LnNlYXJjaFwifSksITApOiExfSksVj1BKChuLHtxdWVyeTplfSk9PntsZXR7c3RhdGU6dH09bix7ZnJvbTpyfT10LnNlbGVjdGlvbi5tYWluLGk9ZS5wcmV2TWF0Y2godCxyLHIpO3JldHVybiBpPyhuLmRpc3BhdGNoKHtzZWxlY3Rpb246e2FuY2hvcjppLmZyb20saGVhZDppLnRvfSxzY3JvbGxJbnRvVmlldzohMCxlZmZlY3RzOloobixpKSx1c2VyRXZlbnQ6XCJzZWxlY3Quc2VhcmNoXCJ9KSwhMCk6ITF9KSx6ZT1BKChuLHtxdWVyeTplfSk9PntsZXQgdD1lLm1hdGNoQWxsKG4uc3RhdGUsMWUzKTtyZXR1cm4hdHx8IXQubGVuZ3RoPyExOihuLmRpc3BhdGNoKHtzZWxlY3Rpb246eS5jcmVhdGUodC5tYXAocj0+eS5yYW5nZShyLmZyb20sci50bykpKSx1c2VyRXZlbnQ6XCJzZWxlY3Quc2VhcmNoLm1hdGNoZXNcIn0pLCEwKX0pLFZlPSh7c3RhdGU6bixkaXNwYXRjaDplfSk9PntsZXQgdD1uLnNlbGVjdGlvbjtpZih0LnJhbmdlcy5sZW5ndGg+MXx8dC5tYWluLmVtcHR5KXJldHVybiExO2xldHtmcm9tOnIsdG86aX09dC5tYWluLHM9W10sbD0wO2ZvcihsZXQgbz1uZXcgTShuLmRvYyxuLnNsaWNlRG9jKHIsaSkpOyFvLm5leHQoKS5kb25lOyl7aWYocy5sZW5ndGg+MWUzKXJldHVybiExO28udmFsdWUuZnJvbT09ciYmKGw9cy5sZW5ndGgpLHMucHVzaCh5LnJhbmdlKG8udmFsdWUuZnJvbSxvLnZhbHVlLnRvKSl9cmV0dXJuIGUobi51cGRhdGUoe3NlbGVjdGlvbjp5LmNyZWF0ZShzLGwpLHVzZXJFdmVudDpcInNlbGVjdC5zZWFyY2gubWF0Y2hlc1wifSkpLCEwfSxpZT1BKChuLHtxdWVyeTplfSk9PntsZXR7c3RhdGU6dH09bix7ZnJvbTpyLHRvOml9PXQuc2VsZWN0aW9uLm1haW47aWYodC5yZWFkT25seSlyZXR1cm4hMTtsZXQgcz1lLm5leHRNYXRjaCh0LHIscik7aWYoIXMpcmV0dXJuITE7bGV0IGw9W10sbyxjLGQ9W107aWYocy5mcm9tPT1yJiZzLnRvPT1pJiYoYz10LnRvVGV4dChlLmdldFJlcGxhY2VtZW50KHMpKSxsLnB1c2goe2Zyb206cy5mcm9tLHRvOnMudG8saW5zZXJ0OmN9KSxzPWUubmV4dE1hdGNoKHQscy5mcm9tLHMudG8pLGQucHVzaChTLmFubm91bmNlLm9mKHQucGhyYXNlKFwicmVwbGFjZWQgbWF0Y2ggb24gbGluZSAkXCIsdC5kb2MubGluZUF0KHIpLm51bWJlcikrXCIuXCIpKSkscyl7bGV0IGg9bC5sZW5ndGg9PTB8fGxbMF0uZnJvbT49cy50bz8wOnMudG8tcy5mcm9tLWMubGVuZ3RoO289e2FuY2hvcjpzLmZyb20taCxoZWFkOnMudG8taH0sZC5wdXNoKFoobixzKSl9cmV0dXJuIG4uZGlzcGF0Y2goe2NoYW5nZXM6bCxzZWxlY3Rpb246byxzY3JvbGxJbnRvVmlldzohIW8sZWZmZWN0czpkLHVzZXJFdmVudDpcImlucHV0LnJlcGxhY2VcIn0pLCEwfSksX2U9QSgobix7cXVlcnk6ZX0pPT57aWYobi5zdGF0ZS5yZWFkT25seSlyZXR1cm4hMTtsZXQgdD1lLm1hdGNoQWxsKG4uc3RhdGUsMWU5KS5tYXAoaT0+e2xldHtmcm9tOnMsdG86bH09aTtyZXR1cm57ZnJvbTpzLHRvOmwsaW5zZXJ0OmUuZ2V0UmVwbGFjZW1lbnQoaSl9fSk7aWYoIXQubGVuZ3RoKXJldHVybiExO2xldCByPW4uc3RhdGUucGhyYXNlKFwicmVwbGFjZWQgJCBtYXRjaGVzXCIsdC5sZW5ndGgpK1wiLlwiO3JldHVybiBuLmRpc3BhdGNoKHtjaGFuZ2VzOnQsZWZmZWN0czpTLmFubm91bmNlLm9mKHIpLHVzZXJFdmVudDpcImlucHV0LnJlcGxhY2UuYWxsXCJ9KSwhMH0pO2Z1bmN0aW9uIFkobil7cmV0dXJuIG4uc3RhdGUuZmFjZXQoQikuY3JlYXRlUGFuZWwobil9ZnVuY3Rpb24gXyhuLGUpe3ZhciB0LHIsaSxzO2xldCBsPW4uc2VsZWN0aW9uLm1haW4sbz1sLmVtcHR5fHxsLnRvPmwuZnJvbSsxMDA/XCJcIjpuLnNsaWNlRG9jKGwuZnJvbSxsLnRvKTtpZihlJiYhbylyZXR1cm4gZTtsZXQgYz1uLmZhY2V0KEIpO3JldHVybiBuZXcgSSh7c2VhcmNoOigodD1lPy5saXRlcmFsKSE9PW51bGwmJnQhPT12b2lkIDA/dDpjLmxpdGVyYWwpP286by5yZXBsYWNlKC9cXG4vZyxcIlxcXFxuXCIpLGNhc2VTZW5zaXRpdmU6KHI9ZT8uY2FzZVNlbnNpdGl2ZSkhPT1udWxsJiZyIT09dm9pZCAwP3I6Yy5jYXNlU2Vuc2l0aXZlLGxpdGVyYWw6KGk9ZT8ubGl0ZXJhbCkhPT1udWxsJiZpIT09dm9pZCAwP2k6Yy5saXRlcmFsLHdob2xlV29yZDoocz1lPy53aG9sZVdvcmQpIT09bnVsbCYmcyE9PXZvaWQgMD9zOmMud2hvbGVXb3JkfSl9dmFyIGRlPW49PntsZXQgZT1uLnN0YXRlLmZpZWxkKHAsITEpO2lmKGUmJmUucGFuZWwpe2xldCB0PUQobixZKTtpZighdClyZXR1cm4hMTtsZXQgcj10LmRvbS5xdWVyeVNlbGVjdG9yKFwiW21haW4tZmllbGRdXCIpO2lmKHImJnIhPW4ucm9vdC5hY3RpdmVFbGVtZW50KXtsZXQgaT1fKG4uc3RhdGUsZS5xdWVyeS5zcGVjKTtpLnZhbGlkJiZuLmRpc3BhdGNoKHtlZmZlY3RzOkwub2YoaSl9KSxyLmZvY3VzKCksci5zZWxlY3QoKX19ZWxzZSBuLmRpc3BhdGNoKHtlZmZlY3RzOltYLm9mKCEwKSxlP0wub2YoXyhuLnN0YXRlLGUucXVlcnkuc3BlYykpOlcuYXBwZW5kQ29uZmlnLm9mKEopXX0pO3JldHVybiEwfSxtZT1uPT57bGV0IGU9bi5zdGF0ZS5maWVsZChwLCExKTtpZighZXx8IWUucGFuZWwpcmV0dXJuITE7bGV0IHQ9RChuLFkpO3JldHVybiB0JiZ0LmRvbS5jb250YWlucyhuLnJvb3QuYWN0aXZlRWxlbWVudCkmJm4uZm9jdXMoKSxuLmRpc3BhdGNoKHtlZmZlY3RzOlgub2YoITEpfSksITB9LFVlPVt7a2V5OlwiTW9kLWZcIixydW46ZGUsc2NvcGU6XCJlZGl0b3Igc2VhcmNoLXBhbmVsXCJ9LHtrZXk6XCJGM1wiLHJ1bjp6LHNoaWZ0OlYsc2NvcGU6XCJlZGl0b3Igc2VhcmNoLXBhbmVsXCIscHJldmVudERlZmF1bHQ6ITB9LHtrZXk6XCJNb2QtZ1wiLHJ1bjp6LHNoaWZ0OlYsc2NvcGU6XCJlZGl0b3Igc2VhcmNoLXBhbmVsXCIscHJldmVudERlZmF1bHQ6ITB9LHtrZXk6XCJFc2NhcGVcIixydW46bWUsc2NvcGU6XCJlZGl0b3Igc2VhcmNoLXBhbmVsXCJ9LHtrZXk6XCJNb2QtU2hpZnQtbFwiLHJ1bjpWZX0se2tleTpcIkFsdC1nXCIscnVuOmtlfSx7a2V5OlwiTW9kLWRcIixydW46cWUscHJldmVudERlZmF1bHQ6ITB9XSxqPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMudmlldz1lO2xldCB0PXRoaXMucXVlcnk9ZS5zdGF0ZS5maWVsZChwKS5xdWVyeS5zcGVjO3RoaXMuY29tbWl0PXRoaXMuY29tbWl0LmJpbmQodGhpcyksdGhpcy5zZWFyY2hGaWVsZD1hKFwiaW5wdXRcIix7dmFsdWU6dC5zZWFyY2gscGxhY2Vob2xkZXI6dShlLFwiRmluZFwiKSxcImFyaWEtbGFiZWxcIjp1KGUsXCJGaW5kXCIpLGNsYXNzOlwiY20tdGV4dGZpZWxkXCIsbmFtZTpcInNlYXJjaFwiLFwibWFpbi1maWVsZFwiOlwidHJ1ZVwiLG9uY2hhbmdlOnRoaXMuY29tbWl0LG9ua2V5dXA6dGhpcy5jb21taXR9KSx0aGlzLnJlcGxhY2VGaWVsZD1hKFwiaW5wdXRcIix7dmFsdWU6dC5yZXBsYWNlLHBsYWNlaG9sZGVyOnUoZSxcIlJlcGxhY2VcIiksXCJhcmlhLWxhYmVsXCI6dShlLFwiUmVwbGFjZVwiKSxjbGFzczpcImNtLXRleHRmaWVsZFwiLG5hbWU6XCJyZXBsYWNlXCIsb25jaGFuZ2U6dGhpcy5jb21taXQsb25rZXl1cDp0aGlzLmNvbW1pdH0pLHRoaXMuY2FzZUZpZWxkPWEoXCJpbnB1dFwiLHt0eXBlOlwiY2hlY2tib3hcIixuYW1lOlwiY2FzZVwiLGNoZWNrZWQ6dC5jYXNlU2Vuc2l0aXZlLG9uY2hhbmdlOnRoaXMuY29tbWl0fSksdGhpcy5yZUZpZWxkPWEoXCJpbnB1dFwiLHt0eXBlOlwiY2hlY2tib3hcIixuYW1lOlwicmVcIixjaGVja2VkOnQucmVnZXhwLG9uY2hhbmdlOnRoaXMuY29tbWl0fSksdGhpcy53b3JkRmllbGQ9YShcImlucHV0XCIse3R5cGU6XCJjaGVja2JveFwiLG5hbWU6XCJ3b3JkXCIsY2hlY2tlZDp0Lndob2xlV29yZCxvbmNoYW5nZTp0aGlzLmNvbW1pdH0pO2Z1bmN0aW9uIHIoaSxzLGwpe3JldHVybiBhKFwiYnV0dG9uXCIse2NsYXNzOlwiY20tYnV0dG9uXCIsbmFtZTppLG9uY2xpY2s6cyx0eXBlOlwiYnV0dG9uXCJ9LGwpfXRoaXMuZG9tPWEoXCJkaXZcIix7b25rZXlkb3duOmk9PnRoaXMua2V5ZG93bihpKSxjbGFzczpcImNtLXNlYXJjaFwifSxbdGhpcy5zZWFyY2hGaWVsZCxyKFwibmV4dFwiLCgpPT56KGUpLFt1KGUsXCJuZXh0XCIpXSkscihcInByZXZcIiwoKT0+VihlKSxbdShlLFwicHJldmlvdXNcIildKSxyKFwic2VsZWN0XCIsKCk9PnplKGUpLFt1KGUsXCJhbGxcIildKSxhKFwibGFiZWxcIixudWxsLFt0aGlzLmNhc2VGaWVsZCx1KGUsXCJtYXRjaCBjYXNlXCIpXSksYShcImxhYmVsXCIsbnVsbCxbdGhpcy5yZUZpZWxkLHUoZSxcInJlZ2V4cFwiKV0pLGEoXCJsYWJlbFwiLG51bGwsW3RoaXMud29yZEZpZWxkLHUoZSxcImJ5IHdvcmRcIildKSwuLi5lLnN0YXRlLnJlYWRPbmx5P1tdOlthKFwiYnJcIiksdGhpcy5yZXBsYWNlRmllbGQscihcInJlcGxhY2VcIiwoKT0+aWUoZSksW3UoZSxcInJlcGxhY2VcIildKSxyKFwicmVwbGFjZUFsbFwiLCgpPT5fZShlKSxbdShlLFwicmVwbGFjZSBhbGxcIildKSxhKFwiYnV0dG9uXCIse25hbWU6XCJjbG9zZVwiLG9uY2xpY2s6KCk9Pm1lKGUpLFwiYXJpYS1sYWJlbFwiOnUoZSxcImNsb3NlXCIpLHR5cGU6XCJidXR0b25cIn0sW1wiXFx4RDdcIl0pXV0pfWNvbW1pdCgpe2xldCBlPW5ldyBJKHtzZWFyY2g6dGhpcy5zZWFyY2hGaWVsZC52YWx1ZSxjYXNlU2Vuc2l0aXZlOnRoaXMuY2FzZUZpZWxkLmNoZWNrZWQscmVnZXhwOnRoaXMucmVGaWVsZC5jaGVja2VkLHdob2xlV29yZDp0aGlzLndvcmRGaWVsZC5jaGVja2VkLHJlcGxhY2U6dGhpcy5yZXBsYWNlRmllbGQudmFsdWV9KTtlLmVxKHRoaXMucXVlcnkpfHwodGhpcy5xdWVyeT1lLHRoaXMudmlldy5kaXNwYXRjaCh7ZWZmZWN0czpMLm9mKGUpfSkpfWtleWRvd24oZSl7cGUodGhpcy52aWV3LGUsXCJzZWFyY2gtcGFuZWxcIik/ZS5wcmV2ZW50RGVmYXVsdCgpOmUua2V5Q29kZT09MTMmJmUudGFyZ2V0PT10aGlzLnNlYXJjaEZpZWxkPyhlLnByZXZlbnREZWZhdWx0KCksKGUuc2hpZnRLZXk/Vjp6KSh0aGlzLnZpZXcpKTplLmtleUNvZGU9PTEzJiZlLnRhcmdldD09dGhpcy5yZXBsYWNlRmllbGQmJihlLnByZXZlbnREZWZhdWx0KCksaWUodGhpcy52aWV3KSl9dXBkYXRlKGUpe2ZvcihsZXQgdCBvZiBlLnRyYW5zYWN0aW9ucylmb3IobGV0IHIgb2YgdC5lZmZlY3RzKXIuaXMoTCkmJiFyLnZhbHVlLmVxKHRoaXMucXVlcnkpJiZ0aGlzLnNldFF1ZXJ5KHIudmFsdWUpfXNldFF1ZXJ5KGUpe3RoaXMucXVlcnk9ZSx0aGlzLnNlYXJjaEZpZWxkLnZhbHVlPWUuc2VhcmNoLHRoaXMucmVwbGFjZUZpZWxkLnZhbHVlPWUucmVwbGFjZSx0aGlzLmNhc2VGaWVsZC5jaGVja2VkPWUuY2FzZVNlbnNpdGl2ZSx0aGlzLnJlRmllbGQuY2hlY2tlZD1lLnJlZ2V4cCx0aGlzLndvcmRGaWVsZC5jaGVja2VkPWUud2hvbGVXb3JkfW1vdW50KCl7dGhpcy5zZWFyY2hGaWVsZC5zZWxlY3QoKX1nZXQgcG9zKCl7cmV0dXJuIDgwfWdldCB0b3AoKXtyZXR1cm4gdGhpcy52aWV3LnN0YXRlLmZhY2V0KEIpLnRvcH19O2Z1bmN0aW9uIHUobixlKXtyZXR1cm4gbi5zdGF0ZS5waHJhc2UoZSl9dmFyIEY9MzAsdz0vW1xcc1xcLiw6Oz8hXS87ZnVuY3Rpb24gWihuLHtmcm9tOmUsdG86dH0pe2xldCByPW4uc3RhdGUuZG9jLmxpbmVBdChlKSxpPW4uc3RhdGUuZG9jLmxpbmVBdCh0KS50byxzPU1hdGgubWF4KHIuZnJvbSxlLUYpLGw9TWF0aC5taW4oaSx0K0YpLG89bi5zdGF0ZS5zbGljZURvYyhzLGwpO2lmKHMhPXIuZnJvbSl7Zm9yKGxldCBjPTA7YzxGO2MrKylpZighdy50ZXN0KG9bYysxXSkmJncudGVzdChvW2NdKSl7bz1vLnNsaWNlKGMpO2JyZWFrfX1pZihsIT1pKXtmb3IobGV0IGM9by5sZW5ndGgtMTtjPm8ubGVuZ3RoLUY7Yy0tKWlmKCF3LnRlc3Qob1tjLTFdKSYmdy50ZXN0KG9bY10pKXtvPW8uc2xpY2UoMCxjKTticmVha319cmV0dXJuIFMuYW5ub3VuY2Uub2YoYCR7bi5zdGF0ZS5waHJhc2UoXCJjdXJyZW50IG1hdGNoXCIpfS4gJHtvfSAke24uc3RhdGUucGhyYXNlKFwib24gbGluZVwiKX0gJHtyLm51bWJlcn0uYCl9dmFyIEJlPVMuYmFzZVRoZW1lKHtcIi5jbS1wYW5lbC5jbS1zZWFyY2hcIjp7cGFkZGluZzpcIjJweCA2cHggNHB4XCIscG9zaXRpb246XCJyZWxhdGl2ZVwiLFwiJiBbbmFtZT1jbG9zZV1cIjp7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHRvcDpcIjBcIixyaWdodDpcIjRweFwiLGJhY2tncm91bmRDb2xvcjpcImluaGVyaXRcIixib3JkZXI6XCJub25lXCIsZm9udDpcImluaGVyaXRcIixwYWRkaW5nOjAsbWFyZ2luOjB9LFwiJiBpbnB1dCwgJiBidXR0b24sICYgbGFiZWxcIjp7bWFyZ2luOlwiLjJlbSAuNmVtIC4yZW0gMFwifSxcIiYgaW5wdXRbdHlwZT1jaGVja2JveF1cIjp7bWFyZ2luUmlnaHQ6XCIuMmVtXCJ9LFwiJiBsYWJlbFwiOntmb250U2l6ZTpcIjgwJVwiLHdoaXRlU3BhY2U6XCJwcmVcIn19LFwiJmxpZ2h0IC5jbS1zZWFyY2hNYXRjaFwiOntiYWNrZ3JvdW5kQ29sb3I6XCIjZmZmZjAwNTRcIn0sXCImZGFyayAuY20tc2VhcmNoTWF0Y2hcIjp7YmFja2dyb3VuZENvbG9yOlwiIzAwZmZmZjhhXCJ9LFwiJmxpZ2h0IC5jbS1zZWFyY2hNYXRjaC1zZWxlY3RlZFwiOntiYWNrZ3JvdW5kQ29sb3I6XCIjZmY2YTAwNTRcIn0sXCImZGFyayAuY20tc2VhcmNoTWF0Y2gtc2VsZWN0ZWRcIjp7YmFja2dyb3VuZENvbG9yOlwiI2ZmMDBmZjhhXCJ9fSksSj1bcCxNZS5sb3dlc3QoVGUpLEJlXTtleHBvcnR7RSBhcyBSZWdFeHBDdXJzb3IsTSBhcyBTZWFyY2hDdXJzb3IsSSBhcyBTZWFyY2hRdWVyeSxtZSBhcyBjbG9zZVNlYXJjaFBhbmVsLHogYXMgZmluZE5leHQsViBhcyBmaW5kUHJldmlvdXMsamUgYXMgZ2V0U2VhcmNoUXVlcnksa2UgYXMgZ290b0xpbmUsR2UgYXMgaGlnaGxpZ2h0U2VsZWN0aW9uTWF0Y2hlcyxkZSBhcyBvcGVuU2VhcmNoUGFuZWwsX2UgYXMgcmVwbGFjZUFsbCxpZSBhcyByZXBsYWNlTmV4dCxRZSBhcyBzZWFyY2gsVWUgYXMgc2VhcmNoS2V5bWFwLEplIGFzIHNlYXJjaFBhbmVsT3Blbix6ZSBhcyBzZWxlY3RNYXRjaGVzLHFlIGFzIHNlbGVjdE5leHRPY2N1cnJlbmNlLFZlIGFzIHNlbGVjdFNlbGVjdGlvbk1hdGNoZXMsTCBhcyBzZXRTZWFyY2hRdWVyeX07XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoc3R5bGUtbW9kQDQuMC4wKSBkZW5vIHByb2R1Y3Rpb24gKi9cbnZhciBTPVwiXFx1MDM3Q1wiLHc9dHlwZW9mIFN5bWJvbD5cInVcIj9cIl9fXCIrUzpTeW1ib2wuZm9yKFMpLGM9dHlwZW9mIFN5bWJvbD5cInVcIj9cIl9fc3R5bGVTZXRcIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU4KTpTeW1ib2woXCJzdHlsZVNldFwiKSxiPXR5cGVvZiBnbG9iYWxUaGlzPFwidVwiP2dsb2JhbFRoaXM6dHlwZW9mIGRvY3VtZW50PFwidVwiP3dpbmRvdzp7fSxUPWNsYXNze2NvbnN0cnVjdG9yKGUsbCl7dGhpcy5ydWxlcz1bXTtsZXR7ZmluaXNoOnV9PWx8fHt9O2Z1bmN0aW9uIG4odCl7cmV0dXJuL15ALy50ZXN0KHQpP1t0XTp0LnNwbGl0KC8sXFxzKi8pfWZ1bmN0aW9uIHModCxpLGgseCl7bGV0IGQ9W10scj0vXkAoXFx3KylcXGIvLmV4ZWModFswXSksZz1yJiZyWzFdPT1cImtleWZyYW1lc1wiO2lmKHImJmk9PW51bGwpcmV0dXJuIGgucHVzaCh0WzBdK1wiO1wiKTtmb3IobGV0IGEgaW4gaSl7bGV0IG89aVthXTtpZigvJi8udGVzdChhKSlzKGEuc3BsaXQoLyxcXHMqLykubWFwKGY9PnQubWFwKHk9PmYucmVwbGFjZSgvJi8seSkpKS5yZWR1Y2UoKGYseSk9PmYuY29uY2F0KHkpKSxvLGgpO2Vsc2UgaWYobyYmdHlwZW9mIG89PVwib2JqZWN0XCIpe2lmKCFyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiVGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgKFwiK2ErXCIpIHNob3VsZCBiZSBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7cyhuKGEpLG8sZCxnKX1lbHNlIG8hPW51bGwmJmQucHVzaChhLnJlcGxhY2UoL18uKi8sXCJcIikucmVwbGFjZSgvW0EtWl0vZyxmPT5cIi1cIitmLnRvTG93ZXJDYXNlKCkpK1wiOiBcIitvK1wiO1wiKX0oZC5sZW5ndGh8fGcpJiZoLnB1c2goKHUmJiFyJiYheD90Lm1hcCh1KTp0KS5qb2luKFwiLCBcIikrXCIge1wiK2Quam9pbihcIiBcIikrXCJ9XCIpfWZvcihsZXQgdCBpbiBlKXMobih0KSxlW3RdLHRoaXMucnVsZXMpfWdldFJ1bGVzKCl7cmV0dXJuIHRoaXMucnVsZXMuam9pbihgXG5gKX1zdGF0aWMgbmV3TmFtZSgpe2xldCBlPWJbd118fDE7cmV0dXJuIGJbd109ZSsxLFMrZS50b1N0cmluZygzNil9c3RhdGljIG1vdW50KGUsbCl7KGVbY118fG5ldyBtKGUpKS5tb3VudChBcnJheS5pc0FycmF5KGwpP2w6W2xdKX19LHA9bnVsbCxtPWNsYXNze2NvbnN0cnVjdG9yKGUpe2lmKCFlLmhlYWQmJmUuYWRvcHRlZFN0eWxlU2hlZXRzJiZ0eXBlb2YgQ1NTU3R5bGVTaGVldDxcInVcIil7aWYocClyZXR1cm4gZS5hZG9wdGVkU3R5bGVTaGVldHM9W3Auc2hlZXRdLmNvbmNhdChlLmFkb3B0ZWRTdHlsZVNoZWV0cyksZVtjXT1wO3RoaXMuc2hlZXQ9bmV3IENTU1N0eWxlU2hlZXQsZS5hZG9wdGVkU3R5bGVTaGVldHM9W3RoaXMuc2hlZXRdLmNvbmNhdChlLmFkb3B0ZWRTdHlsZVNoZWV0cykscD10aGlzfWVsc2V7dGhpcy5zdHlsZVRhZz0oZS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7bGV0IGw9ZS5oZWFkfHxlO2wuaW5zZXJ0QmVmb3JlKHRoaXMuc3R5bGVUYWcsbC5maXJzdENoaWxkKX10aGlzLm1vZHVsZXM9W10sZVtjXT10aGlzfW1vdW50KGUpe2xldCBsPXRoaXMuc2hlZXQsdT0wLG49MDtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyl7bGV0IHQ9ZVtzXSxpPXRoaXMubW9kdWxlcy5pbmRleE9mKHQpO2lmKGk8biYmaT4tMSYmKHRoaXMubW9kdWxlcy5zcGxpY2UoaSwxKSxuLS0saT0tMSksaT09LTEpe2lmKHRoaXMubW9kdWxlcy5zcGxpY2UobisrLDAsdCksbClmb3IobGV0IGg9MDtoPHQucnVsZXMubGVuZ3RoO2grKylsLmluc2VydFJ1bGUodC5ydWxlc1toXSx1KyspfWVsc2V7Zm9yKDtuPGk7KXUrPXRoaXMubW9kdWxlc1tuKytdLnJ1bGVzLmxlbmd0aDt1Kz10LnJ1bGVzLmxlbmd0aCxuKyt9fWlmKCFsKXtsZXQgcz1cIlwiO2ZvcihsZXQgdD0wO3Q8dGhpcy5tb2R1bGVzLmxlbmd0aDt0Kyspcys9dGhpcy5tb2R1bGVzW3RdLmdldFJ1bGVzKCkrYFxuYDt0aGlzLnN0eWxlVGFnLnRleHRDb250ZW50PXN9fX07ZXhwb3J0e1QgYXMgU3R5bGVNb2R1bGV9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBjb2RlbWlycm9yL2xhbmd1YWdlQDYuMi4xKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydHtOb2RlUHJvcCBhcyB2LFRyZWUgYXMgcCxJdGVyTW9kZSBhcyBxdCxUcmVlRnJhZ21lbnQgYXMgVyxQYXJzZXIgYXMga3QsTm9kZVR5cGUgYXMgSixOb2RlU2V0IGFzIEh0fWZyb21cIkBsZXplci9jb21tb25cIjtpbXBvcnR7U3RhdGVFZmZlY3QgYXMgSyxTdGF0ZUZpZWxkIGFzIG90LEZhY2V0IGFzIGIsRWRpdG9yU3RhdGUgYXMgTyxjb3VudENvbHVtbiBhcyBKdCxjb21iaW5lQ29uZmlnIGFzIGJ0LFJhbmdlU2V0IGFzIHd0LFJhbmdlU2V0QnVpbGRlciBhcyB5dCxQcmVjIGFzIEt0fWZyb21cIkBjb2RlbWlycm9yL3N0YXRlXCI7aW1wb3J0e1ZpZXdQbHVnaW4gYXMgbHQsbG9nRXhjZXB0aW9uIGFzIF90LERlY29yYXRpb24gYXMgayxFZGl0b3JWaWV3IGFzIHksV2lkZ2V0VHlwZSBhcyBRdCxndXR0ZXIgYXMgWHQsR3V0dGVyTWFya2VyIGFzIFl0fWZyb21cIkBjb2RlbWlycm9yL3ZpZXdcIjtpbXBvcnR7dGFncyBhcyBmLHRhZ0hpZ2hsaWdodGVyIGFzIFp0LGhpZ2hsaWdodFRyZWUgYXMgdGUsc3R5bGVUYWdzIGFzIGVlfWZyb21cIkBsZXplci9oaWdobGlnaHRcIjtpbXBvcnR7U3R5bGVNb2R1bGUgYXMgZnR9ZnJvbVwiL3Y5Ni9zdHlsZS1tb2RANC4wLjAvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YkhJL2Rlbm8vc3R5bGUtbW9kLmpzXCI7dmFyIFksVD1uZXcgdjtmdW5jdGlvbiB2dChuKXtyZXR1cm4gYi5kZWZpbmUoe2NvbWJpbmU6bj90PT50LmNvbmNhdChuKTp2b2lkIDB9KX12YXIgYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUscj1bXSl7dGhpcy5kYXRhPXQsTy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJ0cmVlXCIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsXCJ0cmVlXCIse2dldCgpe3JldHVybiBtKHRoaXMpfX0pLHRoaXMucGFyc2VyPWUsdGhpcy5leHRlbnNpb249W1Aub2YodGhpcyksTy5sYW5ndWFnZURhdGEub2YoKGkscyxvKT0+aS5mYWNldCh1dChpLHMsbykpKV0uY29uY2F0KHIpfWlzQWN0aXZlQXQodCxlLHI9LTEpe3JldHVybiB1dCh0LGUscik9PXRoaXMuZGF0YX1maW5kUmVnaW9ucyh0KXtsZXQgZT10LmZhY2V0KFApO2lmKGU/LmRhdGE9PXRoaXMuZGF0YSlyZXR1cm5be2Zyb206MCx0bzp0LmRvYy5sZW5ndGh9XTtpZighZXx8IWUuYWxsb3dzTmVzdGluZylyZXR1cm5bXTtsZXQgcj1bXSxpPShzLG8pPT57aWYocy5wcm9wKFQpPT10aGlzLmRhdGEpe3IucHVzaCh7ZnJvbTpvLHRvOm8rcy5sZW5ndGh9KTtyZXR1cm59bGV0IGw9cy5wcm9wKHYubW91bnRlZCk7aWYobCl7aWYobC50cmVlLnByb3AoVCk9PXRoaXMuZGF0YSl7aWYobC5vdmVybGF5KWZvcihsZXQgYSBvZiBsLm92ZXJsYXkpci5wdXNoKHtmcm9tOmEuZnJvbStvLHRvOmEudG8rb30pO2Vsc2Ugci5wdXNoKHtmcm9tOm8sdG86bytzLmxlbmd0aH0pO3JldHVybn1lbHNlIGlmKGwub3ZlcmxheSl7bGV0IGE9ci5sZW5ndGg7aWYoaShsLnRyZWUsbC5vdmVybGF5WzBdLmZyb20rbyksci5sZW5ndGg+YSlyZXR1cm59fWZvcihsZXQgYT0wO2E8cy5jaGlsZHJlbi5sZW5ndGg7YSsrKXtsZXQgaD1zLmNoaWxkcmVuW2FdO2ggaW5zdGFuY2VvZiBwJiZpKGgscy5wb3NpdGlvbnNbYV0rbyl9fTtyZXR1cm4gaShtKHQpLDApLHJ9Z2V0IGFsbG93c05lc3RpbmcoKXtyZXR1cm4hMH19O2Muc2V0U3RhdGU9Sy5kZWZpbmUoKTtmdW5jdGlvbiB1dChuLHQsZSl7bGV0IHI9bi5mYWNldChQKTtpZighcilyZXR1cm4gbnVsbDtsZXQgaT1yLmRhdGE7aWYoci5hbGxvd3NOZXN0aW5nKWZvcihsZXQgcz1tKG4pLnRvcE5vZGU7cztzPXMuZW50ZXIodCxlLHF0LkV4Y2x1ZGVCdWZmZXJzKSlpPXMudHlwZS5wcm9wKFQpfHxpO3JldHVybiBpfXZhciBCPWNsYXNzIGV4dGVuZHMgY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5wYXJzZXI9ZX1zdGF0aWMgZGVmaW5lKHQpe2xldCBlPXZ0KHQubGFuZ3VhZ2VEYXRhKTtyZXR1cm4gbmV3IEIoZSx0LnBhcnNlci5jb25maWd1cmUoe3Byb3BzOltULmFkZChyPT5yLmlzVG9wP2U6dm9pZCAwKV19KSl9Y29uZmlndXJlKHQpe3JldHVybiBuZXcgQih0aGlzLmRhdGEsdGhpcy5wYXJzZXIuY29uZmlndXJlKHQpKX1nZXQgYWxsb3dzTmVzdGluZygpe3JldHVybiB0aGlzLnBhcnNlci5oYXNXcmFwcGVycygpfX07ZnVuY3Rpb24gbShuKXtsZXQgdD1uLmZpZWxkKGMuc3RhdGUsITEpO3JldHVybiB0P3QudHJlZTpwLmVtcHR5fWZ1bmN0aW9uIG5lKG4sdCxlPTUwKXt2YXIgcjtsZXQgaT0ocj1uLmZpZWxkKGMuc3RhdGUsITEpKT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY29udGV4dDtyZXR1cm4gaSYmKGkuaXNEb25lKHQpfHxpLndvcmsoZSx0KSk/aS50cmVlOm51bGx9ZnVuY3Rpb24gemUobix0PW4uZG9jLmxlbmd0aCl7dmFyIGU7cmV0dXJuKChlPW4uZmllbGQoYy5zdGF0ZSwhMSkpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5jb250ZXh0LmlzRG9uZSh0KSl8fCExfWZ1bmN0aW9uIEdlKG4sdD1uLnZpZXdwb3J0LnRvLGU9MTAwKXtsZXQgcj1uZShuLnN0YXRlLHQsZSk7cmV0dXJuIHIhPW0obi5zdGF0ZSkmJm4uZGlzcGF0Y2goe30pLCEhcn1mdW5jdGlvbiBxZShuKXt2YXIgdDtyZXR1cm4oKHQ9bi5wbHVnaW4oU3QpKT09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQuaXNXb3JraW5nKCkpfHwhMX12YXIgZXQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlPXQubGVuZ3RoKXt0aGlzLmRvYz10LHRoaXMubGVuZ3RoPWUsdGhpcy5jdXJzb3JQb3M9MCx0aGlzLnN0cmluZz1cIlwiLHRoaXMuY3Vyc29yPXQuaXRlcigpfXN5bmNUbyh0KXtyZXR1cm4gdGhpcy5zdHJpbmc9dGhpcy5jdXJzb3IubmV4dCh0LXRoaXMuY3Vyc29yUG9zKS52YWx1ZSx0aGlzLmN1cnNvclBvcz10K3RoaXMuc3RyaW5nLmxlbmd0aCx0aGlzLmN1cnNvclBvcy10aGlzLnN0cmluZy5sZW5ndGh9Y2h1bmsodCl7cmV0dXJuIHRoaXMuc3luY1RvKHQpLHRoaXMuc3RyaW5nfWdldCBsaW5lQ2h1bmtzKCl7cmV0dXJuITB9cmVhZCh0LGUpe2xldCByPXRoaXMuY3Vyc29yUG9zLXRoaXMuc3RyaW5nLmxlbmd0aDtyZXR1cm4gdDxyfHxlPj10aGlzLmN1cnNvclBvcz90aGlzLmRvYy5zbGljZVN0cmluZyh0LGUpOnRoaXMuc3RyaW5nLnNsaWNlKHQtcixlLXIpfX0sST1udWxsLHg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLHI9W10saSxzLG8sbCxhKXt0aGlzLnBhcnNlcj10LHRoaXMuc3RhdGU9ZSx0aGlzLmZyYWdtZW50cz1yLHRoaXMudHJlZT1pLHRoaXMudHJlZUxlbj1zLHRoaXMudmlld3BvcnQ9byx0aGlzLnNraXBwZWQ9bCx0aGlzLnNjaGVkdWxlT249YSx0aGlzLnBhcnNlPW51bGwsdGhpcy50ZW1wU2tpcHBlZD1bXX1zdGF0aWMgY3JlYXRlKHQsZSxyKXtyZXR1cm4gbmV3IHgodCxlLFtdLHAuZW1wdHksMCxyLFtdLG51bGwpfXN0YXJ0UGFyc2UoKXtyZXR1cm4gdGhpcy5wYXJzZXIuc3RhcnRQYXJzZShuZXcgZXQodGhpcy5zdGF0ZS5kb2MpLHRoaXMuZnJhZ21lbnRzKX13b3JrKHQsZSl7cmV0dXJuIGUhPW51bGwmJmU+PXRoaXMuc3RhdGUuZG9jLmxlbmd0aCYmKGU9dm9pZCAwKSx0aGlzLnRyZWUhPXAuZW1wdHkmJnRoaXMuaXNEb25lKGU/P3RoaXMuc3RhdGUuZG9jLmxlbmd0aCk/KHRoaXMudGFrZVRyZWUoKSwhMCk6dGhpcy53aXRoQ29udGV4dCgoKT0+e3ZhciByO2lmKHR5cGVvZiB0PT1cIm51bWJlclwiKXtsZXQgaT1EYXRlLm5vdygpK3Q7dD0oKT0+RGF0ZS5ub3coKT5pfWZvcih0aGlzLnBhcnNlfHwodGhpcy5wYXJzZT10aGlzLnN0YXJ0UGFyc2UoKSksZSE9bnVsbCYmKHRoaXMucGFyc2Uuc3RvcHBlZEF0PT1udWxsfHx0aGlzLnBhcnNlLnN0b3BwZWRBdD5lKSYmZTx0aGlzLnN0YXRlLmRvYy5sZW5ndGgmJnRoaXMucGFyc2Uuc3RvcEF0KGUpOzspe2xldCBpPXRoaXMucGFyc2UuYWR2YW5jZSgpO2lmKGkpaWYodGhpcy5mcmFnbWVudHM9dGhpcy53aXRob3V0VGVtcFNraXBwZWQoVy5hZGRUcmVlKGksdGhpcy5mcmFnbWVudHMsdGhpcy5wYXJzZS5zdG9wcGVkQXQhPW51bGwpKSx0aGlzLnRyZWVMZW49KHI9dGhpcy5wYXJzZS5zdG9wcGVkQXQpIT09bnVsbCYmciE9PXZvaWQgMD9yOnRoaXMuc3RhdGUuZG9jLmxlbmd0aCx0aGlzLnRyZWU9aSx0aGlzLnBhcnNlPW51bGwsdGhpcy50cmVlTGVuPChlPz90aGlzLnN0YXRlLmRvYy5sZW5ndGgpKXRoaXMucGFyc2U9dGhpcy5zdGFydFBhcnNlKCk7ZWxzZSByZXR1cm4hMDtpZih0KCkpcmV0dXJuITF9fSl9dGFrZVRyZWUoKXtsZXQgdCxlO3RoaXMucGFyc2UmJih0PXRoaXMucGFyc2UucGFyc2VkUG9zKT49dGhpcy50cmVlTGVuJiYoKHRoaXMucGFyc2Uuc3RvcHBlZEF0PT1udWxsfHx0aGlzLnBhcnNlLnN0b3BwZWRBdD50KSYmdGhpcy5wYXJzZS5zdG9wQXQodCksdGhpcy53aXRoQ29udGV4dCgoKT0+e2Zvcig7IShlPXRoaXMucGFyc2UuYWR2YW5jZSgpKTspO30pLHRoaXMudHJlZUxlbj10LHRoaXMudHJlZT1lLHRoaXMuZnJhZ21lbnRzPXRoaXMud2l0aG91dFRlbXBTa2lwcGVkKFcuYWRkVHJlZSh0aGlzLnRyZWUsdGhpcy5mcmFnbWVudHMsITApKSx0aGlzLnBhcnNlPW51bGwpfXdpdGhDb250ZXh0KHQpe2xldCBlPUk7ST10aGlzO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7ST1lfX13aXRob3V0VGVtcFNraXBwZWQodCl7Zm9yKGxldCBlO2U9dGhpcy50ZW1wU2tpcHBlZC5wb3AoKTspdD1jdCh0LGUuZnJvbSxlLnRvKTtyZXR1cm4gdH1jaGFuZ2VzKHQsZSl7bGV0e2ZyYWdtZW50czpyLHRyZWU6aSx0cmVlTGVuOnMsdmlld3BvcnQ6byxza2lwcGVkOmx9PXRoaXM7aWYodGhpcy50YWtlVHJlZSgpLCF0LmVtcHR5KXtsZXQgYT1bXTtpZih0Lml0ZXJDaGFuZ2VkUmFuZ2VzKChoLHUsZCxnKT0+YS5wdXNoKHtmcm9tQTpoLHRvQTp1LGZyb21COmQsdG9COmd9KSkscj1XLmFwcGx5Q2hhbmdlcyhyLGEpLGk9cC5lbXB0eSxzPTAsbz17ZnJvbTp0Lm1hcFBvcyhvLmZyb20sLTEpLHRvOnQubWFwUG9zKG8udG8sMSl9LHRoaXMuc2tpcHBlZC5sZW5ndGgpe2w9W107Zm9yKGxldCBoIG9mIHRoaXMuc2tpcHBlZCl7bGV0IHU9dC5tYXBQb3MoaC5mcm9tLDEpLGQ9dC5tYXBQb3MoaC50bywtMSk7dTxkJiZsLnB1c2goe2Zyb206dSx0bzpkfSl9fX1yZXR1cm4gbmV3IHgodGhpcy5wYXJzZXIsZSxyLGkscyxvLGwsdGhpcy5zY2hlZHVsZU9uKX11cGRhdGVWaWV3cG9ydCh0KXtpZih0aGlzLnZpZXdwb3J0LmZyb209PXQuZnJvbSYmdGhpcy52aWV3cG9ydC50bz09dC50bylyZXR1cm4hMTt0aGlzLnZpZXdwb3J0PXQ7bGV0IGU9dGhpcy5za2lwcGVkLmxlbmd0aDtmb3IobGV0IHI9MDtyPHRoaXMuc2tpcHBlZC5sZW5ndGg7cisrKXtsZXR7ZnJvbTppLHRvOnN9PXRoaXMuc2tpcHBlZFtyXTtpPHQudG8mJnM+dC5mcm9tJiYodGhpcy5mcmFnbWVudHM9Y3QodGhpcy5mcmFnbWVudHMsaSxzKSx0aGlzLnNraXBwZWQuc3BsaWNlKHItLSwxKSl9cmV0dXJuIHRoaXMuc2tpcHBlZC5sZW5ndGg+PWU/ITE6KHRoaXMucmVzZXQoKSwhMCl9cmVzZXQoKXt0aGlzLnBhcnNlJiYodGhpcy50YWtlVHJlZSgpLHRoaXMucGFyc2U9bnVsbCl9c2tpcFVudGlsSW5WaWV3KHQsZSl7dGhpcy5za2lwcGVkLnB1c2goe2Zyb206dCx0bzplfSl9c3RhdGljIGdldFNraXBwaW5nUGFyc2VyKHQpe3JldHVybiBuZXcgY2xhc3MgZXh0ZW5kcyBrdHtjcmVhdGVQYXJzZShlLHIsaSl7bGV0IHM9aVswXS5mcm9tLG89aVtpLmxlbmd0aC0xXS50bztyZXR1cm57cGFyc2VkUG9zOnMsYWR2YW5jZSgpe2xldCBhPUk7aWYoYSl7Zm9yKGxldCBoIG9mIGkpYS50ZW1wU2tpcHBlZC5wdXNoKGgpO3QmJihhLnNjaGVkdWxlT249YS5zY2hlZHVsZU9uP1Byb21pc2UuYWxsKFthLnNjaGVkdWxlT24sdF0pOnQpfXJldHVybiB0aGlzLnBhcnNlZFBvcz1vLG5ldyBwKEoubm9uZSxbXSxbXSxvLXMpfSxzdG9wcGVkQXQ6bnVsbCxzdG9wQXQoKXt9fX19fWlzRG9uZSh0KXt0PU1hdGgubWluKHQsdGhpcy5zdGF0ZS5kb2MubGVuZ3RoKTtsZXQgZT10aGlzLmZyYWdtZW50cztyZXR1cm4gdGhpcy50cmVlTGVuPj10JiZlLmxlbmd0aCYmZVswXS5mcm9tPT0wJiZlWzBdLnRvPj10fXN0YXRpYyBnZXQoKXtyZXR1cm4gSX19O2Z1bmN0aW9uIGN0KG4sdCxlKXtyZXR1cm4gVy5hcHBseUNoYW5nZXMobixbe2Zyb21BOnQsdG9BOmUsZnJvbUI6dCx0b0I6ZX1dKX12YXIgUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmNvbnRleHQ9dCx0aGlzLnRyZWU9dC50cmVlfWFwcGx5KHQpe2lmKCF0LmRvY0NoYW5nZWQmJnRoaXMudHJlZT09dGhpcy5jb250ZXh0LnRyZWUpcmV0dXJuIHRoaXM7bGV0IGU9dGhpcy5jb250ZXh0LmNoYW5nZXModC5jaGFuZ2VzLHQuc3RhdGUpLHI9dGhpcy5jb250ZXh0LnRyZWVMZW49PXQuc3RhcnRTdGF0ZS5kb2MubGVuZ3RoP3ZvaWQgMDpNYXRoLm1heCh0LmNoYW5nZXMubWFwUG9zKHRoaXMuY29udGV4dC50cmVlTGVuKSxlLnZpZXdwb3J0LnRvKTtyZXR1cm4gZS53b3JrKDIwLHIpfHxlLnRha2VUcmVlKCksbmV3IFMoZSl9c3RhdGljIGluaXQodCl7bGV0IGU9TWF0aC5taW4oM2UzLHQuZG9jLmxlbmd0aCkscj14LmNyZWF0ZSh0LmZhY2V0KFApLnBhcnNlcix0LHtmcm9tOjAsdG86ZX0pO3JldHVybiByLndvcmsoMjAsZSl8fHIudGFrZVRyZWUoKSxuZXcgUyhyKX19O2Muc3RhdGU9b3QuZGVmaW5lKHtjcmVhdGU6Uy5pbml0LHVwZGF0ZShuLHQpe2ZvcihsZXQgZSBvZiB0LmVmZmVjdHMpaWYoZS5pcyhjLnNldFN0YXRlKSlyZXR1cm4gZS52YWx1ZTtyZXR1cm4gdC5zdGFydFN0YXRlLmZhY2V0KFApIT10LnN0YXRlLmZhY2V0KFApP1MuaW5pdCh0LnN0YXRlKTpuLmFwcGx5KHQpfX0pO3ZhciB4dD1uPT57bGV0IHQ9c2V0VGltZW91dCgoKT0+bigpLDUwMCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dCh0KX07dHlwZW9mIHJlcXVlc3RJZGxlQ2FsbGJhY2s8XCJ1XCImJih4dD1uPT57bGV0IHQ9LTEsZT1zZXRUaW1lb3V0KCgpPT57dD1yZXF1ZXN0SWRsZUNhbGxiYWNrKG4se3RpbWVvdXQ6NTAwLTEwMH0pfSwxMDApO3JldHVybigpPT50PDA/Y2xlYXJUaW1lb3V0KGUpOmNhbmNlbElkbGVDYWxsYmFjayh0KX0pO3ZhciBaPXR5cGVvZiBuYXZpZ2F0b3I8XCJ1XCImJigoWT1uYXZpZ2F0b3Iuc2NoZWR1bGluZyk9PT1udWxsfHxZPT09dm9pZCAwP3ZvaWQgMDpZLmlzSW5wdXRQZW5kaW5nKT8oKT0+bmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcoKTpudWxsLFN0PWx0LmZyb21DbGFzcyhjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnZpZXc9dCx0aGlzLndvcmtpbmc9bnVsbCx0aGlzLndvcmtTY2hlZHVsZWQ9MCx0aGlzLmNodW5rRW5kPS0xLHRoaXMuY2h1bmtCdWRnZXQ9LTEsdGhpcy53b3JrPXRoaXMud29yay5iaW5kKHRoaXMpLHRoaXMuc2NoZWR1bGVXb3JrKCl9dXBkYXRlKHQpe2xldCBlPXRoaXMudmlldy5zdGF0ZS5maWVsZChjLnN0YXRlKS5jb250ZXh0OyhlLnVwZGF0ZVZpZXdwb3J0KHQudmlldy52aWV3cG9ydCl8fHRoaXMudmlldy52aWV3cG9ydC50bz5lLnRyZWVMZW4pJiZ0aGlzLnNjaGVkdWxlV29yaygpLHQuZG9jQ2hhbmdlZCYmKHRoaXMudmlldy5oYXNGb2N1cyYmKHRoaXMuY2h1bmtCdWRnZXQrPTUwKSx0aGlzLnNjaGVkdWxlV29yaygpKSx0aGlzLmNoZWNrQXN5bmNTY2hlZHVsZShlKX1zY2hlZHVsZVdvcmsoKXtpZih0aGlzLndvcmtpbmcpcmV0dXJuO2xldHtzdGF0ZTp0fT10aGlzLnZpZXcsZT10LmZpZWxkKGMuc3RhdGUpOyhlLnRyZWUhPWUuY29udGV4dC50cmVlfHwhZS5jb250ZXh0LmlzRG9uZSh0LmRvYy5sZW5ndGgpKSYmKHRoaXMud29ya2luZz14dCh0aGlzLndvcmspKX13b3JrKHQpe3RoaXMud29ya2luZz1udWxsO2xldCBlPURhdGUubm93KCk7aWYodGhpcy5jaHVua0VuZDxlJiYodGhpcy5jaHVua0VuZDwwfHx0aGlzLnZpZXcuaGFzRm9jdXMpJiYodGhpcy5jaHVua0VuZD1lKzNlNCx0aGlzLmNodW5rQnVkZ2V0PTNlMyksdGhpcy5jaHVua0J1ZGdldDw9MClyZXR1cm47bGV0e3N0YXRlOnIsdmlld3BvcnQ6e3RvOml9fT10aGlzLnZpZXcscz1yLmZpZWxkKGMuc3RhdGUpO2lmKHMudHJlZT09cy5jb250ZXh0LnRyZWUmJnMuY29udGV4dC5pc0RvbmUoaSsxZTUpKXJldHVybjtsZXQgbz1EYXRlLm5vdygpK01hdGgubWluKHRoaXMuY2h1bmtCdWRnZXQsMTAwLHQmJiFaP01hdGgubWF4KDI1LHQudGltZVJlbWFpbmluZygpLTUpOjFlOSksbD1zLmNvbnRleHQudHJlZUxlbjxpJiZyLmRvYy5sZW5ndGg+aSsxZTMsYT1zLmNvbnRleHQud29yaygoKT0+WiYmWigpfHxEYXRlLm5vdygpPm8saSsobD8wOjFlNSkpO3RoaXMuY2h1bmtCdWRnZXQtPURhdGUubm93KCktZSwoYXx8dGhpcy5jaHVua0J1ZGdldDw9MCkmJihzLmNvbnRleHQudGFrZVRyZWUoKSx0aGlzLnZpZXcuZGlzcGF0Y2goe2VmZmVjdHM6Yy5zZXRTdGF0ZS5vZihuZXcgUyhzLmNvbnRleHQpKX0pKSx0aGlzLmNodW5rQnVkZ2V0PjAmJiEoYSYmIWwpJiZ0aGlzLnNjaGVkdWxlV29yaygpLHRoaXMuY2hlY2tBc3luY1NjaGVkdWxlKHMuY29udGV4dCl9Y2hlY2tBc3luY1NjaGVkdWxlKHQpe3Quc2NoZWR1bGVPbiYmKHRoaXMud29ya1NjaGVkdWxlZCsrLHQuc2NoZWR1bGVPbi50aGVuKCgpPT50aGlzLnNjaGVkdWxlV29yaygpKS5jYXRjaChlPT5fdCh0aGlzLnZpZXcuc3RhdGUsZSkpLnRoZW4oKCk9PnRoaXMud29ya1NjaGVkdWxlZC0tKSx0LnNjaGVkdWxlT249bnVsbCl9ZGVzdHJveSgpe3RoaXMud29ya2luZyYmdGhpcy53b3JraW5nKCl9aXNXb3JraW5nKCl7cmV0dXJuISEodGhpcy53b3JraW5nfHx0aGlzLndvcmtTY2hlZHVsZWQ+MCl9fSx7ZXZlbnRIYW5kbGVyczp7Zm9jdXMoKXt0aGlzLnNjaGVkdWxlV29yaygpfX19KSxQPWIuZGVmaW5lKHtjb21iaW5lKG4pe3JldHVybiBuLmxlbmd0aD9uWzBdOm51bGx9LGVuYWJsZXM6W2Muc3RhdGUsU3RdfSksZHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlPVtdKXt0aGlzLmxhbmd1YWdlPXQsdGhpcy5zdXBwb3J0PWUsdGhpcy5leHRlbnNpb249W3QsZV19fSxqPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxyLGkscyxvPXZvaWQgMCl7dGhpcy5uYW1lPXQsdGhpcy5hbGlhcz1lLHRoaXMuZXh0ZW5zaW9ucz1yLHRoaXMuZmlsZW5hbWU9aSx0aGlzLmxvYWRGdW5jPXMsdGhpcy5zdXBwb3J0PW8sdGhpcy5sb2FkaW5nPW51bGx9bG9hZCgpe3JldHVybiB0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9dGhpcy5sb2FkRnVuYygpLnRoZW4odD0+dGhpcy5zdXBwb3J0PXQsdD0+e3Rocm93IHRoaXMubG9hZGluZz1udWxsLHR9KSl9c3RhdGljIG9mKHQpe2xldHtsb2FkOmUsc3VwcG9ydDpyfT10O2lmKCFlKXtpZighcil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk11c3QgcGFzcyBlaXRoZXIgJ2xvYWQnIG9yICdzdXBwb3J0JyB0byBMYW5ndWFnZURlc2NyaXB0aW9uLm9mXCIpO2U9KCk9PlByb21pc2UucmVzb2x2ZShyKX1yZXR1cm4gbmV3IGoodC5uYW1lLCh0LmFsaWFzfHxbXSkuY29uY2F0KHQubmFtZSkubWFwKGk9PmkudG9Mb3dlckNhc2UoKSksdC5leHRlbnNpb25zfHxbXSx0LmZpbGVuYW1lLGUscil9c3RhdGljIG1hdGNoRmlsZW5hbWUodCxlKXtmb3IobGV0IGkgb2YgdClpZihpLmZpbGVuYW1lJiZpLmZpbGVuYW1lLnRlc3QoZSkpcmV0dXJuIGk7bGV0IHI9L1xcLihbXi5dKykkLy5leGVjKGUpO2lmKHIpe2ZvcihsZXQgaSBvZiB0KWlmKGkuZXh0ZW5zaW9ucy5pbmRleE9mKHJbMV0pPi0xKXJldHVybiBpfXJldHVybiBudWxsfXN0YXRpYyBtYXRjaExhbmd1YWdlTmFtZSh0LGUscj0hMCl7ZT1lLnRvTG93ZXJDYXNlKCk7Zm9yKGxldCBpIG9mIHQpaWYoaS5hbGlhcy5zb21lKHM9PnM9PWUpKXJldHVybiBpO2lmKHIpZm9yKGxldCBpIG9mIHQpZm9yKGxldCBzIG9mIGkuYWxpYXMpe2xldCBvPWUuaW5kZXhPZihzKTtpZihvPi0xJiYocy5sZW5ndGg+Mnx8IS9cXHcvLnRlc3QoZVtvLTFdKSYmIS9cXHcvLnRlc3QoZVtvK3MubGVuZ3RoXSkpKXJldHVybiBpfXJldHVybiBudWxsfX0sUHQ9Yi5kZWZpbmUoKSxBdD1iLmRlZmluZSh7Y29tYmluZTpuPT57aWYoIW4ubGVuZ3RoKXJldHVyblwiICBcIjtpZighL14oPzogK3xcXHQrKSQvLnRlc3QoblswXSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbmRlbnQgdW5pdDogXCIrSlNPTi5zdHJpbmdpZnkoblswXSkpO3JldHVybiBuWzBdfX0pO2Z1bmN0aW9uICQobil7bGV0IHQ9bi5mYWNldChBdCk7cmV0dXJuIHQuY2hhckNvZGVBdCgwKT09OT9uLnRhYlNpemUqdC5sZW5ndGg6dC5sZW5ndGh9ZnVuY3Rpb24gQ3Qobix0KXtsZXQgZT1cIlwiLHI9bi50YWJTaXplO2lmKG4uZmFjZXQoQXQpLmNoYXJDb2RlQXQoMCk9PTkpZm9yKDt0Pj1yOyllKz1cIlx0XCIsdC09cjtmb3IobGV0IGk9MDtpPHQ7aSsrKWUrPVwiIFwiO3JldHVybiBlfWZ1bmN0aW9uIFR0KG4sdCl7biBpbnN0YW5jZW9mIE8mJihuPW5ldyBNKG4pKTtmb3IobGV0IHIgb2Ygbi5zdGF0ZS5mYWNldChQdCkpe2xldCBpPXIobix0KTtpZihpIT1udWxsKXJldHVybiBpfWxldCBlPW0obi5zdGF0ZSk7cmV0dXJuIGU/aWUobixlLHQpOm51bGx9ZnVuY3Rpb24gSmUobix0LGUpe2xldCByPU9iamVjdC5jcmVhdGUobnVsbCksaT1uZXcgTShuLHtvdmVycmlkZUluZGVudGF0aW9uOm89Pnt2YXIgbDtyZXR1cm4obD1yW29dKSE9PW51bGwmJmwhPT12b2lkIDA/bDotMX19KSxzPVtdO2ZvcihsZXQgbz10O288PWU7KXtsZXQgbD1uLmRvYy5saW5lQXQobyk7bz1sLnRvKzE7bGV0IGE9VHQoaSxsLmZyb20pO2lmKGE9PW51bGwpY29udGludWU7L1xcUy8udGVzdChsLnRleHQpfHwoYT0wKTtsZXQgaD0vXlxccyovLmV4ZWMobC50ZXh0KVswXSx1PUN0KG4sYSk7aCE9dSYmKHJbbC5mcm9tXT1hLHMucHVzaCh7ZnJvbTpsLmZyb20sdG86bC5mcm9tK2gubGVuZ3RoLGluc2VydDp1fSkpfXJldHVybiBuLmNoYW5nZXMocyl9dmFyIE09Y2xhc3N7Y29uc3RydWN0b3IodCxlPXt9KXt0aGlzLnN0YXRlPXQsdGhpcy5vcHRpb25zPWUsdGhpcy51bml0PSQodCl9bGluZUF0KHQsZT0xKXtsZXQgcj10aGlzLnN0YXRlLmRvYy5saW5lQXQodCkse3NpbXVsYXRlQnJlYWs6aSxzaW11bGF0ZURvdWJsZUJyZWFrOnN9PXRoaXMub3B0aW9ucztyZXR1cm4gaSE9bnVsbCYmaT49ci5mcm9tJiZpPD1yLnRvP3MmJmk9PXQ/e3RleHQ6XCJcIixmcm9tOnR9OihlPDA/aTx0Omk8PXQpP3t0ZXh0OnIudGV4dC5zbGljZShpLXIuZnJvbSksZnJvbTppfTp7dGV4dDpyLnRleHQuc2xpY2UoMCxpLXIuZnJvbSksZnJvbTpyLmZyb219OnJ9dGV4dEFmdGVyUG9zKHQsZT0xKXtpZih0aGlzLm9wdGlvbnMuc2ltdWxhdGVEb3VibGVCcmVhayYmdD09dGhpcy5vcHRpb25zLnNpbXVsYXRlQnJlYWspcmV0dXJuXCJcIjtsZXR7dGV4dDpyLGZyb206aX09dGhpcy5saW5lQXQodCxlKTtyZXR1cm4gci5zbGljZSh0LWksTWF0aC5taW4oci5sZW5ndGgsdCsxMDAtaSkpfWNvbHVtbih0LGU9MSl7bGV0e3RleHQ6cixmcm9tOml9PXRoaXMubGluZUF0KHQsZSkscz10aGlzLmNvdW50Q29sdW1uKHIsdC1pKSxvPXRoaXMub3B0aW9ucy5vdmVycmlkZUluZGVudGF0aW9uP3RoaXMub3B0aW9ucy5vdmVycmlkZUluZGVudGF0aW9uKGkpOi0xO3JldHVybiBvPi0xJiYocys9by10aGlzLmNvdW50Q29sdW1uKHIsci5zZWFyY2goL1xcU3wkLykpKSxzfWNvdW50Q29sdW1uKHQsZT10Lmxlbmd0aCl7cmV0dXJuIEp0KHQsdGhpcy5zdGF0ZS50YWJTaXplLGUpfWxpbmVJbmRlbnQodCxlPTEpe2xldHt0ZXh0OnIsZnJvbTppfT10aGlzLmxpbmVBdCh0LGUpLHM9dGhpcy5vcHRpb25zLm92ZXJyaWRlSW5kZW50YXRpb247aWYocyl7bGV0IG89cyhpKTtpZihvPi0xKXJldHVybiBvfXJldHVybiB0aGlzLmNvdW50Q29sdW1uKHIsci5zZWFyY2goL1xcU3wkLykpfWdldCBzaW11bGF0ZWRCcmVhaygpe3JldHVybiB0aGlzLm9wdGlvbnMuc2ltdWxhdGVCcmVha3x8bnVsbH19LHJlPW5ldyB2O2Z1bmN0aW9uIGllKG4sdCxlKXtyZXR1cm4gRHQodC5yZXNvbHZlSW5uZXIoZSkuZW50ZXJVbmZpbmlzaGVkTm9kZXNCZWZvcmUoZSksZSxuKX1mdW5jdGlvbiBzZShuKXtyZXR1cm4gbi5wb3M9PW4ub3B0aW9ucy5zaW11bGF0ZUJyZWFrJiZuLm9wdGlvbnMuc2ltdWxhdGVEb3VibGVCcmVha31mdW5jdGlvbiBvZShuKXtsZXQgdD1uLnR5cGUucHJvcChyZSk7aWYodClyZXR1cm4gdDtsZXQgZT1uLmZpcnN0Q2hpbGQscjtpZihlJiYocj1lLnR5cGUucHJvcCh2LmNsb3NlZEJ5KSkpe2xldCBpPW4ubGFzdENoaWxkLHM9aSYmci5pbmRleE9mKGkubmFtZSk+LTE7cmV0dXJuIG89Pkl0KG8sITAsMSx2b2lkIDAscyYmIXNlKG8pP2kuZnJvbTp2b2lkIDApfXJldHVybiBuLnBhcmVudD09bnVsbD9sZTpudWxsfWZ1bmN0aW9uIER0KG4sdCxlKXtmb3IoO247bj1uLnBhcmVudCl7bGV0IHI9b2Uobik7aWYocilyZXR1cm4gcihFLmNyZWF0ZShlLHQsbikpfXJldHVybiBudWxsfWZ1bmN0aW9uIGxlKCl7cmV0dXJuIDB9dmFyIEU9Y2xhc3MgZXh0ZW5kcyBNe2NvbnN0cnVjdG9yKHQsZSxyKXtzdXBlcih0LnN0YXRlLHQub3B0aW9ucyksdGhpcy5iYXNlPXQsdGhpcy5wb3M9ZSx0aGlzLm5vZGU9cn1zdGF0aWMgY3JlYXRlKHQsZSxyKXtyZXR1cm4gbmV3IEUodCxlLHIpfWdldCB0ZXh0QWZ0ZXIoKXtyZXR1cm4gdGhpcy50ZXh0QWZ0ZXJQb3ModGhpcy5wb3MpfWdldCBiYXNlSW5kZW50KCl7bGV0IHQ9dGhpcy5zdGF0ZS5kb2MubGluZUF0KHRoaXMubm9kZS5mcm9tKTtmb3IoOzspe2xldCBlPXRoaXMubm9kZS5yZXNvbHZlKHQuZnJvbSk7Zm9yKDtlLnBhcmVudCYmZS5wYXJlbnQuZnJvbT09ZS5mcm9tOyllPWUucGFyZW50O2lmKGFlKGUsdGhpcy5ub2RlKSlicmVhazt0PXRoaXMuc3RhdGUuZG9jLmxpbmVBdChlLmZyb20pfXJldHVybiB0aGlzLmxpbmVJbmRlbnQodC5mcm9tKX1jb250aW51ZSgpe2xldCB0PXRoaXMubm9kZS5wYXJlbnQ7cmV0dXJuIHQ/RHQodCx0aGlzLnBvcyx0aGlzLmJhc2UpOjB9fTtmdW5jdGlvbiBhZShuLHQpe2ZvcihsZXQgZT10O2U7ZT1lLnBhcmVudClpZihuPT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGhlKG4pe2xldCB0PW4ubm9kZSxlPXQuY2hpbGRBZnRlcih0LmZyb20pLHI9dC5sYXN0Q2hpbGQ7aWYoIWUpcmV0dXJuIG51bGw7bGV0IGk9bi5vcHRpb25zLnNpbXVsYXRlQnJlYWsscz1uLnN0YXRlLmRvYy5saW5lQXQoZS5mcm9tKSxvPWk9PW51bGx8fGk8PXMuZnJvbT9zLnRvOk1hdGgubWluKHMudG8saSk7Zm9yKGxldCBsPWUudG87Oyl7bGV0IGE9dC5jaGlsZEFmdGVyKGwpO2lmKCFhfHxhPT1yKXJldHVybiBudWxsO2lmKCFhLnR5cGUuaXNTa2lwcGVkKXJldHVybiBhLmZyb208bz9lOm51bGw7bD1hLnRvfX1mdW5jdGlvbiBLZSh7Y2xvc2luZzpuLGFsaWduOnQ9ITAsdW5pdHM6ZT0xfSl7cmV0dXJuIHI9Pkl0KHIsdCxlLG4pfWZ1bmN0aW9uIEl0KG4sdCxlLHIsaSl7bGV0IHM9bi50ZXh0QWZ0ZXIsbz1zLm1hdGNoKC9eXFxzKi8pWzBdLmxlbmd0aCxsPXImJnMuc2xpY2UobyxvK3IubGVuZ3RoKT09cnx8aT09bi5wb3MrbyxhPXQ/aGUobik6bnVsbDtyZXR1cm4gYT9sP24uY29sdW1uKGEuZnJvbSk6bi5jb2x1bW4oYS50byk6bi5iYXNlSW5kZW50KyhsPzA6bi51bml0KmUpfXZhciBfZT1uPT5uLmJhc2VJbmRlbnQ7ZnVuY3Rpb24gUWUoe2V4Y2VwdDpuLHVuaXRzOnQ9MX09e30pe3JldHVybiBlPT57bGV0IHI9biYmbi50ZXN0KGUudGV4dEFmdGVyKTtyZXR1cm4gZS5iYXNlSW5kZW50KyhyPzA6dCplLnVuaXQpfX12YXIgZmU9MjAwO2Z1bmN0aW9uIFhlKCl7cmV0dXJuIE8udHJhbnNhY3Rpb25GaWx0ZXIub2Yobj0+e2lmKCFuLmRvY0NoYW5nZWR8fCFuLmlzVXNlckV2ZW50KFwiaW5wdXQudHlwZVwiKSYmIW4uaXNVc2VyRXZlbnQoXCJpbnB1dC5jb21wbGV0ZVwiKSlyZXR1cm4gbjtsZXQgdD1uLnN0YXJ0U3RhdGUubGFuZ3VhZ2VEYXRhQXQoXCJpbmRlbnRPbklucHV0XCIsbi5zdGFydFN0YXRlLnNlbGVjdGlvbi5tYWluLmhlYWQpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbjtsZXQgZT1uLm5ld0RvYyx7aGVhZDpyfT1uLm5ld1NlbGVjdGlvbi5tYWluLGk9ZS5saW5lQXQocik7aWYocj5pLmZyb20rZmUpcmV0dXJuIG47bGV0IHM9ZS5zbGljZVN0cmluZyhpLmZyb20scik7aWYoIXQuc29tZShoPT5oLnRlc3QocykpKXJldHVybiBuO2xldHtzdGF0ZTpvfT1uLGw9LTEsYT1bXTtmb3IobGV0e2hlYWQ6aH1vZiBvLnNlbGVjdGlvbi5yYW5nZXMpe2xldCB1PW8uZG9jLmxpbmVBdChoKTtpZih1LmZyb209PWwpY29udGludWU7bD11LmZyb207bGV0IGQ9VHQobyx1LmZyb20pO2lmKGQ9PW51bGwpY29udGludWU7bGV0IGc9L15cXHMqLy5leGVjKHUudGV4dClbMF0sdz1DdChvLGQpO2chPXcmJmEucHVzaCh7ZnJvbTp1LmZyb20sdG86dS5mcm9tK2cubGVuZ3RoLGluc2VydDp3fSl9cmV0dXJuIGEubGVuZ3RoP1tuLHtjaGFuZ2VzOmEsc2VxdWVudGlhbDohMH1dOm59KX12YXIgdWU9Yi5kZWZpbmUoKSxjZT1uZXcgdjtmdW5jdGlvbiBZZShuKXtsZXQgdD1uLmZpcnN0Q2hpbGQsZT1uLmxhc3RDaGlsZDtyZXR1cm4gdCYmdC50bzxlLmZyb20/e2Zyb206dC50byx0bzplLnR5cGUuaXNFcnJvcj9uLnRvOmUuZnJvbX06bnVsbH1mdW5jdGlvbiBkZShuLHQsZSl7bGV0IHI9bShuKTtpZihyLmxlbmd0aDxlKXJldHVybiBudWxsO2xldCBpPXIucmVzb2x2ZUlubmVyKGUpLHM9bnVsbDtmb3IobGV0IG89aTtvO289by5wYXJlbnQpe2lmKG8udG88PWV8fG8uZnJvbT5lKWNvbnRpbnVlO2lmKHMmJm8uZnJvbTx0KWJyZWFrO2xldCBsPW8udHlwZS5wcm9wKGNlKTtpZihsJiYoby50bzxyLmxlbmd0aC01MHx8ci5sZW5ndGg9PW4uZG9jLmxlbmd0aHx8IXBlKG8pKSl7bGV0IGE9bChvLG4pO2EmJmEuZnJvbTw9ZSYmYS5mcm9tPj10JiZhLnRvPmUmJihzPWEpfX1yZXR1cm4gc31mdW5jdGlvbiBwZShuKXtsZXQgdD1uLmxhc3RDaGlsZDtyZXR1cm4gdCYmdC50bz09bi50byYmdC50eXBlLmlzRXJyb3J9ZnVuY3Rpb24gVihuLHQsZSl7Zm9yKGxldCByIG9mIG4uZmFjZXQodWUpKXtsZXQgaT1yKG4sdCxlKTtpZihpKXJldHVybiBpfXJldHVybiBkZShuLHQsZSl9ZnVuY3Rpb24gT3Qobix0KXtsZXQgZT10Lm1hcFBvcyhuLmZyb20sMSkscj10Lm1hcFBvcyhuLnRvLC0xKTtyZXR1cm4gZT49cj92b2lkIDA6e2Zyb206ZSx0bzpyfX12YXIgXz1LLmRlZmluZSh7bWFwOk90fSksUj1LLmRlZmluZSh7bWFwOk90fSk7ZnVuY3Rpb24gTnQobil7bGV0IHQ9W107Zm9yKGxldHtoZWFkOmV9b2Ygbi5zdGF0ZS5zZWxlY3Rpb24ucmFuZ2VzKXQuc29tZShyPT5yLmZyb208PWUmJnIudG8+PWUpfHx0LnB1c2gobi5saW5lQmxvY2tBdChlKSk7cmV0dXJuIHR9dmFyIEE9b3QuZGVmaW5lKHtjcmVhdGUoKXtyZXR1cm4gay5ub25lfSx1cGRhdGUobix0KXtuPW4ubWFwKHQuY2hhbmdlcyk7Zm9yKGxldCBlIG9mIHQuZWZmZWN0cyllLmlzKF8pJiYhbWUobixlLnZhbHVlLmZyb20sZS52YWx1ZS50byk/bj1uLnVwZGF0ZSh7YWRkOltwdC5yYW5nZShlLnZhbHVlLmZyb20sZS52YWx1ZS50byldfSk6ZS5pcyhSKSYmKG49bi51cGRhdGUoe2ZpbHRlcjoocixpKT0+ZS52YWx1ZS5mcm9tIT1yfHxlLnZhbHVlLnRvIT1pLGZpbHRlckZyb206ZS52YWx1ZS5mcm9tLGZpbHRlclRvOmUudmFsdWUudG99KSk7aWYodC5zZWxlY3Rpb24pe2xldCBlPSExLHtoZWFkOnJ9PXQuc2VsZWN0aW9uLm1haW47bi5iZXR3ZWVuKHIsciwoaSxzKT0+e2k8ciYmcz5yJiYoZT0hMCl9KSxlJiYobj1uLnVwZGF0ZSh7ZmlsdGVyRnJvbTpyLGZpbHRlclRvOnIsZmlsdGVyOihpLHMpPT5zPD1yfHxpPj1yfSkpfXJldHVybiBufSxwcm92aWRlOm49PnkuZGVjb3JhdGlvbnMuZnJvbShuKSx0b0pTT04obix0KXtsZXQgZT1bXTtyZXR1cm4gbi5iZXR3ZWVuKDAsdC5kb2MubGVuZ3RoLChyLGkpPT57ZS5wdXNoKHIsaSl9KSxlfSxmcm9tSlNPTihuKXtpZighQXJyYXkuaXNBcnJheShuKXx8bi5sZW5ndGglMil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgSlNPTiBmb3IgZm9sZCBzdGF0ZVwiKTtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoOyl7bGV0IHI9bltlKytdLGk9bltlKytdO2lmKHR5cGVvZiByIT1cIm51bWJlclwifHx0eXBlb2YgaSE9XCJudW1iZXJcIil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgSlNPTiBmb3IgZm9sZCBzdGF0ZVwiKTt0LnB1c2gocHQucmFuZ2UocixpKSl9cmV0dXJuIGsuc2V0KHQsITApfX0pO2Z1bmN0aW9uIFplKG4pe3JldHVybiBuLmZpZWxkKEEsITEpfHx3dC5lbXB0eX1mdW5jdGlvbiB6KG4sdCxlKXt2YXIgcjtsZXQgaT1udWxsO3JldHVybihyPW4uZmllbGQoQSwhMSkpPT09bnVsbHx8cj09PXZvaWQgMHx8ci5iZXR3ZWVuKHQsZSwocyxvKT0+eyghaXx8aS5mcm9tPnMpJiYoaT17ZnJvbTpzLHRvOm99KX0pLGl9ZnVuY3Rpb24gbWUobix0LGUpe2xldCByPSExO3JldHVybiBuLmJldHdlZW4odCx0LChpLHMpPT57aT09dCYmcz09ZSYmKHI9ITApfSkscn1mdW5jdGlvbiBCdChuLHQpe3JldHVybiBuLmZpZWxkKEEsITEpP3Q6dC5jb25jYXQoSy5hcHBlbmRDb25maWcub2YoRnQoKSkpfXZhciBnZT1uPT57Zm9yKGxldCB0IG9mIE50KG4pKXtsZXQgZT1WKG4uc3RhdGUsdC5mcm9tLHQudG8pO2lmKGUpcmV0dXJuIG4uZGlzcGF0Y2goe2VmZmVjdHM6QnQobi5zdGF0ZSxbXy5vZihlKSxNdChuLGUpXSl9KSwhMH1yZXR1cm4hMX0sa2U9bj0+e2lmKCFuLnN0YXRlLmZpZWxkKEEsITEpKXJldHVybiExO2xldCB0PVtdO2ZvcihsZXQgZSBvZiBOdChuKSl7bGV0IHI9eihuLnN0YXRlLGUuZnJvbSxlLnRvKTtyJiZ0LnB1c2goUi5vZihyKSxNdChuLHIsITEpKX1yZXR1cm4gdC5sZW5ndGgmJm4uZGlzcGF0Y2goe2VmZmVjdHM6dH0pLHQubGVuZ3RoPjB9O2Z1bmN0aW9uIE10KG4sdCxlPSEwKXtsZXQgcj1uLnN0YXRlLmRvYy5saW5lQXQodC5mcm9tKS5udW1iZXIsaT1uLnN0YXRlLmRvYy5saW5lQXQodC50bykubnVtYmVyO3JldHVybiB5LmFubm91bmNlLm9mKGAke24uc3RhdGUucGhyYXNlKGU/XCJGb2xkZWQgbGluZXNcIjpcIlVuZm9sZGVkIGxpbmVzXCIpfSAke3J9ICR7bi5zdGF0ZS5waHJhc2UoXCJ0b1wiKX0gJHtpfS5gKX12YXIgYmU9bj0+e2xldHtzdGF0ZTp0fT1uLGU9W107Zm9yKGxldCByPTA7cjx0LmRvYy5sZW5ndGg7KXtsZXQgaT1uLmxpbmVCbG9ja0F0KHIpLHM9Vih0LGkuZnJvbSxpLnRvKTtzJiZlLnB1c2goXy5vZihzKSkscj0ocz9uLmxpbmVCbG9ja0F0KHMudG8pOmkpLnRvKzF9cmV0dXJuIGUubGVuZ3RoJiZuLmRpc3BhdGNoKHtlZmZlY3RzOkJ0KG4uc3RhdGUsZSl9KSwhIWUubGVuZ3RofSx3ZT1uPT57bGV0IHQ9bi5zdGF0ZS5maWVsZChBLCExKTtpZighdHx8IXQuc2l6ZSlyZXR1cm4hMTtsZXQgZT1bXTtyZXR1cm4gdC5iZXR3ZWVuKDAsbi5zdGF0ZS5kb2MubGVuZ3RoLChyLGkpPT57ZS5wdXNoKFIub2Yoe2Zyb206cix0bzppfSkpfSksbi5kaXNwYXRjaCh7ZWZmZWN0czplfSksITB9LHRuPVt7a2V5OlwiQ3RybC1TaGlmdC1bXCIsbWFjOlwiQ21kLUFsdC1bXCIscnVuOmdlfSx7a2V5OlwiQ3RybC1TaGlmdC1dXCIsbWFjOlwiQ21kLUFsdC1dXCIscnVuOmtlfSx7a2V5OlwiQ3RybC1BbHQtW1wiLHJ1bjpiZX0se2tleTpcIkN0cmwtQWx0LV1cIixydW46d2V9XSx5ZT17cGxhY2Vob2xkZXJET006bnVsbCxwbGFjZWhvbGRlclRleHQ6XCJcXHUyMDI2XCJ9LEV0PWIuZGVmaW5lKHtjb21iaW5lKG4pe3JldHVybiBidChuLHllKX19KTtmdW5jdGlvbiBGdChuKXtsZXQgdD1bQSx4ZV07cmV0dXJuIG4mJnQucHVzaChFdC5vZihuKSksdH12YXIgcHQ9ay5yZXBsYWNlKHt3aWRnZXQ6bmV3IGNsYXNzIGV4dGVuZHMgUXR7dG9ET00obil7bGV0e3N0YXRlOnR9PW4sZT10LmZhY2V0KEV0KSxyPXM9PntsZXQgbz1uLmxpbmVCbG9ja0F0KG4ucG9zQXRET00ocy50YXJnZXQpKSxsPXoobi5zdGF0ZSxvLmZyb20sby50byk7bCYmbi5kaXNwYXRjaCh7ZWZmZWN0czpSLm9mKGwpfSkscy5wcmV2ZW50RGVmYXVsdCgpfTtpZihlLnBsYWNlaG9sZGVyRE9NKXJldHVybiBlLnBsYWNlaG9sZGVyRE9NKG4scik7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7cmV0dXJuIGkudGV4dENvbnRlbnQ9ZS5wbGFjZWhvbGRlclRleHQsaS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsdC5waHJhc2UoXCJmb2xkZWQgY29kZVwiKSksaS50aXRsZT10LnBocmFzZShcInVuZm9sZFwiKSxpLmNsYXNzTmFtZT1cImNtLWZvbGRQbGFjZWhvbGRlclwiLGkub25jbGljaz1yLGl9fX0pLHZlPXtvcGVuVGV4dDpcIlxcdTIzMDRcIixjbG9zZWRUZXh0OlwiXFx1MjAzQVwiLG1hcmtlckRPTTpudWxsLGRvbUV2ZW50SGFuZGxlcnM6e30sZm9sZGluZ0NoYW5nZWQ6KCk9PiExfSxOPWNsYXNzIGV4dGVuZHMgWXR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuY29uZmlnPXQsdGhpcy5vcGVuPWV9ZXEodCl7cmV0dXJuIHRoaXMuY29uZmlnPT10LmNvbmZpZyYmdGhpcy5vcGVuPT10Lm9wZW59dG9ET00odCl7aWYodGhpcy5jb25maWcubWFya2VyRE9NKXJldHVybiB0aGlzLmNvbmZpZy5tYXJrZXJET00odGhpcy5vcGVuKTtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtyZXR1cm4gZS50ZXh0Q29udGVudD10aGlzLm9wZW4/dGhpcy5jb25maWcub3BlblRleHQ6dGhpcy5jb25maWcuY2xvc2VkVGV4dCxlLnRpdGxlPXQuc3RhdGUucGhyYXNlKHRoaXMub3Blbj9cIkZvbGQgbGluZVwiOlwiVW5mb2xkIGxpbmVcIiksZX19O2Z1bmN0aW9uIGVuKG49e30pe2xldCB0PU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx2ZSksbiksZT1uZXcgTih0LCEwKSxyPW5ldyBOKHQsITEpLGk9bHQuZnJvbUNsYXNzKGNsYXNze2NvbnN0cnVjdG9yKG8pe3RoaXMuZnJvbT1vLnZpZXdwb3J0LmZyb20sdGhpcy5tYXJrZXJzPXRoaXMuYnVpbGRNYXJrZXJzKG8pfXVwZGF0ZShvKXsoby5kb2NDaGFuZ2VkfHxvLnZpZXdwb3J0Q2hhbmdlZHx8by5zdGFydFN0YXRlLmZhY2V0KFApIT1vLnN0YXRlLmZhY2V0KFApfHxvLnN0YXJ0U3RhdGUuZmllbGQoQSwhMSkhPW8uc3RhdGUuZmllbGQoQSwhMSl8fG0oby5zdGFydFN0YXRlKSE9bShvLnN0YXRlKXx8dC5mb2xkaW5nQ2hhbmdlZChvKSkmJih0aGlzLm1hcmtlcnM9dGhpcy5idWlsZE1hcmtlcnMoby52aWV3KSl9YnVpbGRNYXJrZXJzKG8pe2xldCBsPW5ldyB5dDtmb3IobGV0IGEgb2Ygby52aWV3cG9ydExpbmVCbG9ja3Mpe2xldCBoPXooby5zdGF0ZSxhLmZyb20sYS50byk/cjpWKG8uc3RhdGUsYS5mcm9tLGEudG8pP2U6bnVsbDtoJiZsLmFkZChhLmZyb20sYS5mcm9tLGgpfXJldHVybiBsLmZpbmlzaCgpfX0pLHtkb21FdmVudEhhbmRsZXJzOnN9PXQ7cmV0dXJuW2ksWHQoe2NsYXNzOlwiY20tZm9sZEd1dHRlclwiLG1hcmtlcnMobyl7dmFyIGw7cmV0dXJuKChsPW8ucGx1Z2luKGkpKT09PW51bGx8fGw9PT12b2lkIDA/dm9pZCAwOmwubWFya2Vycyl8fHd0LmVtcHR5fSxpbml0aWFsU3BhY2VyKCl7cmV0dXJuIG5ldyBOKHQsITEpfSxkb21FdmVudEhhbmRsZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7Y2xpY2s6KG8sbCxhKT0+e2lmKHMuY2xpY2smJnMuY2xpY2sobyxsLGEpKXJldHVybiEwO2xldCBoPXooby5zdGF0ZSxsLmZyb20sbC50byk7aWYoaClyZXR1cm4gby5kaXNwYXRjaCh7ZWZmZWN0czpSLm9mKGgpfSksITA7bGV0IHU9VihvLnN0YXRlLGwuZnJvbSxsLnRvKTtyZXR1cm4gdT8oby5kaXNwYXRjaCh7ZWZmZWN0czpfLm9mKHUpfSksITApOiExfX0pfSksRnQoKV19dmFyIHhlPXkuYmFzZVRoZW1lKHtcIi5jbS1mb2xkUGxhY2Vob2xkZXJcIjp7YmFja2dyb3VuZENvbG9yOlwiI2VlZVwiLGJvcmRlcjpcIjFweCBzb2xpZCAjZGRkXCIsY29sb3I6XCIjODg4XCIsYm9yZGVyUmFkaXVzOlwiLjJlbVwiLG1hcmdpbjpcIjAgMXB4XCIscGFkZGluZzpcIjAgMXB4XCIsY3Vyc29yOlwicG9pbnRlclwifSxcIi5jbS1mb2xkR3V0dGVyIHNwYW5cIjp7cGFkZGluZzpcIjAgMXB4XCIsY3Vyc29yOlwicG9pbnRlclwifX0pLEQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXtsZXQgcjtmdW5jdGlvbiBpKGwpe2xldCBhPWZ0Lm5ld05hbWUoKTtyZXR1cm4ocnx8KHI9T2JqZWN0LmNyZWF0ZShudWxsKSkpW1wiLlwiK2FdPWwsYX1sZXQgcz10eXBlb2YgZS5hbGw9PVwic3RyaW5nXCI/ZS5hbGw6ZS5hbGw/aShlLmFsbCk6dm9pZCAwLG89ZS5zY29wZTt0aGlzLnNjb3BlPW8gaW5zdGFuY2VvZiBjP2w9PmwucHJvcChUKT09by5kYXRhOm8/bD0+bD09bzp2b2lkIDAsdGhpcy5zdHlsZT1adCh0Lm1hcChsPT4oe3RhZzpsLnRhZyxjbGFzczpsLmNsYXNzfHxpKE9iamVjdC5hc3NpZ24oe30sbCx7dGFnOm51bGx9KSl9KSkse2FsbDpzfSkuc3R5bGUsdGhpcy5tb2R1bGU9cj9uZXcgZnQocik6bnVsbCx0aGlzLnRoZW1lVHlwZT1lLnRoZW1lVHlwZX1zdGF0aWMgZGVmaW5lKHQsZSl7cmV0dXJuIG5ldyBEKHQsZXx8e30pfX0sbnQ9Yi5kZWZpbmUoKSxSdD1iLmRlZmluZSh7Y29tYmluZShuKXtyZXR1cm4gbi5sZW5ndGg/W25bMF1dOm51bGx9fSk7ZnVuY3Rpb24gTChuKXtsZXQgdD1uLmZhY2V0KG50KTtyZXR1cm4gdC5sZW5ndGg/dDpuLmZhY2V0KFJ0KX1mdW5jdGlvbiBubihuLHQpe2xldCBlPVtTZV0scjtyZXR1cm4gbiBpbnN0YW5jZW9mIEQmJihuLm1vZHVsZSYmZS5wdXNoKHkuc3R5bGVNb2R1bGUub2Yobi5tb2R1bGUpKSxyPW4udGhlbWVUeXBlKSx0Py5mYWxsYmFjaz9lLnB1c2goUnQub2YobikpOnI/ZS5wdXNoKG50LmNvbXB1dGVOKFt5LmRhcmtUaGVtZV0saT0+aS5mYWNldCh5LmRhcmtUaGVtZSk9PShyPT1cImRhcmtcIik/W25dOltdKSk6ZS5wdXNoKG50Lm9mKG4pKSxlfWZ1bmN0aW9uIHJuKG4sdCxlKXtsZXQgcj1MKG4pLGk9bnVsbDtpZihyKXtmb3IobGV0IHMgb2YgcilpZighcy5zY29wZXx8ZSYmcy5zY29wZShlKSl7bGV0IG89cy5zdHlsZSh0KTtvJiYoaT1pP2krXCIgXCIrbzpvKX19cmV0dXJuIGl9dmFyIHJ0PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFya0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy50cmVlPW0odC5zdGF0ZSksdGhpcy5kZWNvcmF0aW9ucz10aGlzLmJ1aWxkRGVjbyh0LEwodC5zdGF0ZSkpfXVwZGF0ZSh0KXtsZXQgZT1tKHQuc3RhdGUpLHI9TCh0LnN0YXRlKSxpPXIhPUwodC5zdGFydFN0YXRlKTtlLmxlbmd0aDx0LnZpZXcudmlld3BvcnQudG8mJiFpJiZlLnR5cGU9PXRoaXMudHJlZS50eXBlP3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5kZWNvcmF0aW9ucy5tYXAodC5jaGFuZ2VzKTooZSE9dGhpcy50cmVlfHx0LnZpZXdwb3J0Q2hhbmdlZHx8aSkmJih0aGlzLnRyZWU9ZSx0aGlzLmRlY29yYXRpb25zPXRoaXMuYnVpbGREZWNvKHQudmlldyxyKSl9YnVpbGREZWNvKHQsZSl7aWYoIWV8fCF0aGlzLnRyZWUubGVuZ3RoKXJldHVybiBrLm5vbmU7bGV0IHI9bmV3IHl0O2ZvcihsZXR7ZnJvbTppLHRvOnN9b2YgdC52aXNpYmxlUmFuZ2VzKXRlKHRoaXMudHJlZSxlLChvLGwsYSk9PntyLmFkZChvLGwsdGhpcy5tYXJrQ2FjaGVbYV18fCh0aGlzLm1hcmtDYWNoZVthXT1rLm1hcmsoe2NsYXNzOmF9KSkpfSxpLHMpO3JldHVybiByLmZpbmlzaCgpfX0sU2U9S3QuaGlnaChsdC5mcm9tQ2xhc3MocnQse2RlY29yYXRpb25zOm49Pm4uZGVjb3JhdGlvbnN9KSksc249RC5kZWZpbmUoW3t0YWc6Zi5tZXRhLGNvbG9yOlwiIzdhNzU3YVwifSx7dGFnOmYubGluayx0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwifSx7dGFnOmYuaGVhZGluZyx0ZXh0RGVjb3JhdGlvbjpcInVuZGVybGluZVwiLGZvbnRXZWlnaHQ6XCJib2xkXCJ9LHt0YWc6Zi5lbXBoYXNpcyxmb250U3R5bGU6XCJpdGFsaWNcIn0se3RhZzpmLnN0cm9uZyxmb250V2VpZ2h0OlwiYm9sZFwifSx7dGFnOmYuc3RyaWtldGhyb3VnaCx0ZXh0RGVjb3JhdGlvbjpcImxpbmUtdGhyb3VnaFwifSx7dGFnOmYua2V5d29yZCxjb2xvcjpcIiM3MDhcIn0se3RhZzpbZi5hdG9tLGYuYm9vbCxmLnVybCxmLmNvbnRlbnRTZXBhcmF0b3IsZi5sYWJlbE5hbWVdLGNvbG9yOlwiIzIxOVwifSx7dGFnOltmLmxpdGVyYWwsZi5pbnNlcnRlZF0sY29sb3I6XCIjMTY0XCJ9LHt0YWc6W2Yuc3RyaW5nLGYuZGVsZXRlZF0sY29sb3I6XCIjYTExXCJ9LHt0YWc6W2YucmVnZXhwLGYuZXNjYXBlLGYuc3BlY2lhbChmLnN0cmluZyldLGNvbG9yOlwiI2U0MFwifSx7dGFnOmYuZGVmaW5pdGlvbihmLnZhcmlhYmxlTmFtZSksY29sb3I6XCIjMDBmXCJ9LHt0YWc6Zi5sb2NhbChmLnZhcmlhYmxlTmFtZSksY29sb3I6XCIjMzBhXCJ9LHt0YWc6W2YudHlwZU5hbWUsZi5uYW1lc3BhY2VdLGNvbG9yOlwiIzA4NVwifSx7dGFnOmYuY2xhc3NOYW1lLGNvbG9yOlwiIzE2N1wifSx7dGFnOltmLnNwZWNpYWwoZi52YXJpYWJsZU5hbWUpLGYubWFjcm9OYW1lXSxjb2xvcjpcIiMyNTZcIn0se3RhZzpmLmRlZmluaXRpb24oZi5wcm9wZXJ0eU5hbWUpLGNvbG9yOlwiIzAwY1wifSx7dGFnOmYuY29tbWVudCxjb2xvcjpcIiM5NDBcIn0se3RhZzpmLmludmFsaWQsY29sb3I6XCIjZjAwXCJ9XSksUGU9eS5iYXNlVGhlbWUoe1wiJi5jbS1mb2N1c2VkIC5jbS1tYXRjaGluZ0JyYWNrZXRcIjp7YmFja2dyb3VuZENvbG9yOlwiIzMyOGM4MjUyXCJ9LFwiJi5jbS1mb2N1c2VkIC5jbS1ub25tYXRjaGluZ0JyYWNrZXRcIjp7YmFja2dyb3VuZENvbG9yOlwiI2JiNTU1NTQ0XCJ9fSksVXQ9MWU0LFd0PVwiKClbXXt9XCIsTHQ9Yi5kZWZpbmUoe2NvbWJpbmUobil7cmV0dXJuIGJ0KG4se2FmdGVyQ3Vyc29yOiEwLGJyYWNrZXRzOld0LG1heFNjYW5EaXN0YW5jZTpVdCxyZW5kZXJNYXRjaDpUZX0pfX0pLEFlPWsubWFyayh7Y2xhc3M6XCJjbS1tYXRjaGluZ0JyYWNrZXRcIn0pLENlPWsubWFyayh7Y2xhc3M6XCJjbS1ub25tYXRjaGluZ0JyYWNrZXRcIn0pO2Z1bmN0aW9uIFRlKG4pe2xldCB0PVtdLGU9bi5tYXRjaGVkP0FlOkNlO3JldHVybiB0LnB1c2goZS5yYW5nZShuLnN0YXJ0LmZyb20sbi5zdGFydC50bykpLG4uZW5kJiZ0LnB1c2goZS5yYW5nZShuLmVuZC5mcm9tLG4uZW5kLnRvKSksdH12YXIgRGU9b3QuZGVmaW5lKHtjcmVhdGUoKXtyZXR1cm4gay5ub25lfSx1cGRhdGUobix0KXtpZighdC5kb2NDaGFuZ2VkJiYhdC5zZWxlY3Rpb24pcmV0dXJuIG47bGV0IGU9W10scj10LnN0YXRlLmZhY2V0KEx0KTtmb3IobGV0IGkgb2YgdC5zdGF0ZS5zZWxlY3Rpb24ucmFuZ2VzKXtpZighaS5lbXB0eSljb250aW51ZTtsZXQgcz1VKHQuc3RhdGUsaS5oZWFkLC0xLHIpfHxpLmhlYWQ+MCYmVSh0LnN0YXRlLGkuaGVhZC0xLDEscil8fHIuYWZ0ZXJDdXJzb3ImJihVKHQuc3RhdGUsaS5oZWFkLDEscil8fGkuaGVhZDx0LnN0YXRlLmRvYy5sZW5ndGgmJlUodC5zdGF0ZSxpLmhlYWQrMSwtMSxyKSk7cyYmKGU9ZS5jb25jYXQoci5yZW5kZXJNYXRjaChzLHQuc3RhdGUpKSl9cmV0dXJuIGsuc2V0KGUsITApfSxwcm92aWRlOm49PnkuZGVjb3JhdGlvbnMuZnJvbShuKX0pLEllPVtEZSxQZV07ZnVuY3Rpb24gb24obj17fSl7cmV0dXJuW0x0Lm9mKG4pLEllXX1mdW5jdGlvbiBpdChuLHQsZSl7bGV0IHI9bi5wcm9wKHQ8MD92Lm9wZW5lZEJ5OnYuY2xvc2VkQnkpO2lmKHIpcmV0dXJuIHI7aWYobi5uYW1lLmxlbmd0aD09MSl7bGV0IGk9ZS5pbmRleE9mKG4ubmFtZSk7aWYoaT4tMSYmaSUyPT0odDwwPzE6MCkpcmV0dXJuW2VbaSt0XV19cmV0dXJuIG51bGx9ZnVuY3Rpb24gVShuLHQsZSxyPXt9KXtsZXQgaT1yLm1heFNjYW5EaXN0YW5jZXx8VXQscz1yLmJyYWNrZXRzfHxXdCxvPW0obiksbD1vLnJlc29sdmVJbm5lcih0LGUpO2ZvcihsZXQgYT1sO2E7YT1hLnBhcmVudCl7bGV0IGg9aXQoYS50eXBlLGUscyk7aWYoaCYmYS5mcm9tPGEudG8pcmV0dXJuIE9lKG4sdCxlLGEsaCxzKX1yZXR1cm4gTmUobix0LGUsbyxsLnR5cGUsaSxzKX1mdW5jdGlvbiBPZShuLHQsZSxyLGkscyl7bGV0IG89ci5wYXJlbnQsbD17ZnJvbTpyLmZyb20sdG86ci50b30sYT0wLGg9bz8uY3Vyc29yKCk7aWYoaCYmKGU8MD9oLmNoaWxkQmVmb3JlKHIuZnJvbSk6aC5jaGlsZEFmdGVyKHIudG8pKSlkbyBpZihlPDA/aC50bzw9ci5mcm9tOmguZnJvbT49ci50byl7aWYoYT09MCYmaS5pbmRleE9mKGgudHlwZS5uYW1lKT4tMSYmaC5mcm9tPGgudG8pcmV0dXJue3N0YXJ0OmwsZW5kOntmcm9tOmguZnJvbSx0bzpoLnRvfSxtYXRjaGVkOiEwfTtpZihpdChoLnR5cGUsZSxzKSlhKys7ZWxzZSBpZihpdChoLnR5cGUsLWUscykpe2lmKGE9PTApcmV0dXJue3N0YXJ0OmwsZW5kOmguZnJvbT09aC50bz92b2lkIDA6e2Zyb206aC5mcm9tLHRvOmgudG99LG1hdGNoZWQ6ITF9O2EtLX19d2hpbGUoZTwwP2gucHJldlNpYmxpbmcoKTpoLm5leHRTaWJsaW5nKCkpO3JldHVybntzdGFydDpsLG1hdGNoZWQ6ITF9fWZ1bmN0aW9uIE5lKG4sdCxlLHIsaSxzLG8pe2xldCBsPWU8MD9uLnNsaWNlRG9jKHQtMSx0KTpuLnNsaWNlRG9jKHQsdCsxKSxhPW8uaW5kZXhPZihsKTtpZihhPDB8fGElMj09MCE9ZT4wKXJldHVybiBudWxsO2xldCBoPXtmcm9tOmU8MD90LTE6dCx0bzplPjA/dCsxOnR9LHU9bi5kb2MuaXRlclJhbmdlKHQsZT4wP24uZG9jLmxlbmd0aDowKSxkPTA7Zm9yKGxldCBnPTA7IXUubmV4dCgpLmRvbmUmJmc8PXM7KXtsZXQgdz11LnZhbHVlO2U8MCYmKGcrPXcubGVuZ3RoKTtsZXQgUT10K2cqZTtmb3IobGV0IEM9ZT4wPzA6dy5sZW5ndGgtMSxHdD1lPjA/dy5sZW5ndGg6LTE7QyE9R3Q7Qys9ZSl7bGV0IFg9by5pbmRleE9mKHdbQ10pO2lmKCEoWDwwfHxyLnJlc29sdmVJbm5lcihRK0MsMSkudHlwZSE9aSkpaWYoWCUyPT0wPT1lPjApZCsrO2Vsc2V7aWYoZD09MSlyZXR1cm57c3RhcnQ6aCxlbmQ6e2Zyb206UStDLHRvOlErQysxfSxtYXRjaGVkOlg+PjE9PWE+PjF9O2QtLX19ZT4wJiYoZys9dy5sZW5ndGgpfXJldHVybiB1LmRvbmU/e3N0YXJ0OmgsbWF0Y2hlZDohMX06bnVsbH1mdW5jdGlvbiBtdChuLHQsZSxyPTAsaT0wKXt0PT1udWxsJiYodD1uLnNlYXJjaCgvW15cXHNcXHUwMGEwXS8pLHQ9PS0xJiYodD1uLmxlbmd0aCkpO2xldCBzPWk7Zm9yKGxldCBvPXI7bzx0O28rKyluLmNoYXJDb2RlQXQobyk9PTk/cys9ZS1zJWU6cysrO3JldHVybiBzfXZhciBHPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxyKXt0aGlzLnN0cmluZz10LHRoaXMudGFiU2l6ZT1lLHRoaXMuaW5kZW50VW5pdD1yLHRoaXMucG9zPTAsdGhpcy5zdGFydD0wLHRoaXMubGFzdENvbHVtblBvcz0wLHRoaXMubGFzdENvbHVtblZhbHVlPTB9ZW9sKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLnN0cmluZy5sZW5ndGh9c29sKCl7cmV0dXJuIHRoaXMucG9zPT0wfXBlZWsoKXtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKXx8dm9pZCAwfW5leHQoKXtpZih0aGlzLnBvczx0aGlzLnN0cmluZy5sZW5ndGgpcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKX1lYXQodCl7bGV0IGU9dGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSxyO2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiP3I9ZT09dDpyPWUmJih0IGluc3RhbmNlb2YgUmVnRXhwP3QudGVzdChlKTp0KGUpKSxyKXJldHVybisrdGhpcy5wb3MsZX1lYXRXaGlsZSh0KXtsZXQgZT10aGlzLnBvcztmb3IoO3RoaXMuZWF0KHQpOyk7cmV0dXJuIHRoaXMucG9zPmV9ZWF0U3BhY2UoKXtsZXQgdD10aGlzLnBvcztmb3IoOy9bXFxzXFx1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSk7KSsrdGhpcy5wb3M7cmV0dXJuIHRoaXMucG9zPnR9c2tpcFRvRW5kKCl7dGhpcy5wb3M9dGhpcy5zdHJpbmcubGVuZ3RofXNraXBUbyh0KXtsZXQgZT10aGlzLnN0cmluZy5pbmRleE9mKHQsdGhpcy5wb3MpO2lmKGU+LTEpcmV0dXJuIHRoaXMucG9zPWUsITB9YmFja1VwKHQpe3RoaXMucG9zLT10fWNvbHVtbigpe3JldHVybiB0aGlzLmxhc3RDb2x1bW5Qb3M8dGhpcy5zdGFydCYmKHRoaXMubGFzdENvbHVtblZhbHVlPW10KHRoaXMuc3RyaW5nLHRoaXMuc3RhcnQsdGhpcy50YWJTaXplLHRoaXMubGFzdENvbHVtblBvcyx0aGlzLmxhc3RDb2x1bW5WYWx1ZSksdGhpcy5sYXN0Q29sdW1uUG9zPXRoaXMuc3RhcnQpLHRoaXMubGFzdENvbHVtblZhbHVlfWluZGVudGF0aW9uKCl7cmV0dXJuIG10KHRoaXMuc3RyaW5nLG51bGwsdGhpcy50YWJTaXplKX1tYXRjaCh0LGUscil7aWYodHlwZW9mIHQ9PVwic3RyaW5nXCIpe2xldCBpPW89PnI/by50b0xvd2VyQ2FzZSgpOm8scz10aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsdC5sZW5ndGgpO3JldHVybiBpKHMpPT1pKHQpPyhlIT09ITEmJih0aGlzLnBvcys9dC5sZW5ndGgpLCEwKTpudWxsfWVsc2V7bGV0IGk9dGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHQpO3JldHVybiBpJiZpLmluZGV4PjA/bnVsbDooaSYmZSE9PSExJiYodGhpcy5wb3MrPWlbMF0ubGVuZ3RoKSxpKX19Y3VycmVudCgpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LHRoaXMucG9zKX19O2Z1bmN0aW9uIEJlKG4pe3JldHVybnt0b2tlbjpuLnRva2VuLGJsYW5rTGluZTpuLmJsYW5rTGluZXx8KCgpPT57fSksc3RhcnRTdGF0ZTpuLnN0YXJ0U3RhdGV8fCgoKT0+ITApLGNvcHlTdGF0ZTpuLmNvcHlTdGF0ZXx8TWUsaW5kZW50Om4uaW5kZW50fHwoKCk9Pm51bGwpLGxhbmd1YWdlRGF0YTpuLmxhbmd1YWdlRGF0YXx8e30sdG9rZW5UYWJsZTpuLnRva2VuVGFibGV8fGh0fX1mdW5jdGlvbiBNZShuKXtpZih0eXBlb2YgbiE9XCJvYmplY3RcIilyZXR1cm4gbjtsZXQgdD17fTtmb3IobGV0IGUgaW4gbil7bGV0IHI9bltlXTt0W2VdPXIgaW5zdGFuY2VvZiBBcnJheT9yLnNsaWNlKCk6cn1yZXR1cm4gdH12YXIgcT1jbGFzcyBleHRlbmRzIGN7Y29uc3RydWN0b3IodCl7bGV0IGU9dnQodC5sYW5ndWFnZURhdGEpLHI9QmUodCksaSxzPW5ldyBjbGFzcyBleHRlbmRzIGt0e2NyZWF0ZVBhcnNlKG8sbCxhKXtyZXR1cm4gbmV3IHN0KGksbyxsLGEpfX07c3VwZXIoZSxzLFtQdC5vZigobyxsKT0+dGhpcy5nZXRJbmRlbnQobyxsKSldKSx0aGlzLnRvcE5vZGU9VWUoZSksaT10aGlzLHRoaXMuc3RyZWFtUGFyc2VyPXIsdGhpcy5zdGF0ZUFmdGVyPW5ldyB2KHtwZXJOb2RlOiEwfSksdGhpcy50b2tlblRhYmxlPXQudG9rZW5UYWJsZT9uZXcgSChyLnRva2VuVGFibGUpOlJlfXN0YXRpYyBkZWZpbmUodCl7cmV0dXJuIG5ldyBxKHQpfWdldEluZGVudCh0LGUpe2xldCByPW0odC5zdGF0ZSksaT1yLnJlc29sdmUoZSk7Zm9yKDtpJiZpLnR5cGUhPXRoaXMudG9wTm9kZTspaT1pLnBhcmVudDtpZighaSlyZXR1cm4gbnVsbDtsZXQgcz1hdCh0aGlzLHIsMCxpLmZyb20sZSksbyxsO2lmKHM/KGw9cy5zdGF0ZSxvPXMucG9zKzEpOihsPXRoaXMuc3RyZWFtUGFyc2VyLnN0YXJ0U3RhdGUodC51bml0KSxvPTApLGUtbz4xZTQpcmV0dXJuIG51bGw7Zm9yKDtvPGU7KXtsZXQgaD10LnN0YXRlLmRvYy5saW5lQXQobyksdT1NYXRoLm1pbihlLGgudG8pO2lmKGgubGVuZ3RoKXtsZXQgZD1uZXcgRyhoLnRleHQsdC5zdGF0ZS50YWJTaXplLHQudW5pdCk7Zm9yKDtkLnBvczx1LWguZnJvbTspJHQodGhpcy5zdHJlYW1QYXJzZXIudG9rZW4sZCxsKX1lbHNlIHRoaXMuc3RyZWFtUGFyc2VyLmJsYW5rTGluZShsLHQudW5pdCk7aWYodT09ZSlicmVhaztvPWgudG8rMX1sZXR7dGV4dDphfT10LmxpbmVBdChlKTtyZXR1cm4gdGhpcy5zdHJlYW1QYXJzZXIuaW5kZW50KGwsL15cXHMqKC4qKS8uZXhlYyhhKVsxXSx0KX1nZXQgYWxsb3dzTmVzdGluZygpe3JldHVybiExfX07ZnVuY3Rpb24gYXQobix0LGUscixpKXtsZXQgcz1lPj1yJiZlK3QubGVuZ3RoPD1pJiZ0LnByb3Aobi5zdGF0ZUFmdGVyKTtpZihzKXJldHVybntzdGF0ZTpuLnN0cmVhbVBhcnNlci5jb3B5U3RhdGUocykscG9zOmUrdC5sZW5ndGh9O2ZvcihsZXQgbz10LmNoaWxkcmVuLmxlbmd0aC0xO28+PTA7by0tKXtsZXQgbD10LmNoaWxkcmVuW29dLGE9ZSt0LnBvc2l0aW9uc1tvXSxoPWwgaW5zdGFuY2VvZiBwJiZhPGkmJmF0KG4sbCxhLHIsaSk7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBqdChuLHQsZSxyLGkpe2lmKGkmJmU8PTAmJnI+PXQubGVuZ3RoKXJldHVybiB0OyFpJiZ0LnR5cGU9PW4udG9wTm9kZSYmKGk9ITApO2ZvcihsZXQgcz10LmNoaWxkcmVuLmxlbmd0aC0xO3M+PTA7cy0tKXtsZXQgbz10LnBvc2l0aW9uc1tzXSxsPXQuY2hpbGRyZW5bc10sYTtpZihvPHImJmwgaW5zdGFuY2VvZiBwKXtpZighKGE9anQobixsLGUtbyxyLW8saSkpKWJyZWFrO3JldHVybiBpP25ldyBwKHQudHlwZSx0LmNoaWxkcmVuLnNsaWNlKDAscykuY29uY2F0KGEpLHQucG9zaXRpb25zLnNsaWNlKDAscysxKSxvK2EubGVuZ3RoKTphfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBFZShuLHQsZSxyKXtmb3IobGV0IGkgb2YgdCl7bGV0IHM9aS5mcm9tKyhpLm9wZW5TdGFydD8yNTowKSxvPWkudG8tKGkub3BlbkVuZD8yNTowKSxsPXM8PWUmJm8+ZSYmYXQobixpLnRyZWUsMC1pLm9mZnNldCxlLG8pLGE7aWYobCYmKGE9anQobixpLnRyZWUsZStpLm9mZnNldCxsLnBvcytpLm9mZnNldCwhMSkpKXJldHVybntzdGF0ZTpsLnN0YXRlLHRyZWU6YX19cmV0dXJue3N0YXRlOm4uc3RyZWFtUGFyc2VyLnN0YXJ0U3RhdGUocj8kKHIpOjQpLHRyZWU6cC5lbXB0eX19dmFyIHN0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxyLGkpe3RoaXMubGFuZz10LHRoaXMuaW5wdXQ9ZSx0aGlzLmZyYWdtZW50cz1yLHRoaXMucmFuZ2VzPWksdGhpcy5zdG9wcGVkQXQ9bnVsbCx0aGlzLmNodW5rcz1bXSx0aGlzLmNodW5rUG9zPVtdLHRoaXMuY2h1bms9W10sdGhpcy5jaHVua1JldXNlZD12b2lkIDAsdGhpcy5yYW5nZUluZGV4PTAsdGhpcy50bz1pW2kubGVuZ3RoLTFdLnRvO2xldCBzPXguZ2V0KCksbz1pWzBdLmZyb20se3N0YXRlOmwsdHJlZTphfT1FZSh0LHIsbyxzPy5zdGF0ZSk7dGhpcy5zdGF0ZT1sLHRoaXMucGFyc2VkUG9zPXRoaXMuY2h1bmtTdGFydD1vK2EubGVuZ3RoO2ZvcihsZXQgaD0wO2g8YS5jaGlsZHJlbi5sZW5ndGg7aCsrKXRoaXMuY2h1bmtzLnB1c2goYS5jaGlsZHJlbltoXSksdGhpcy5jaHVua1Bvcy5wdXNoKGEucG9zaXRpb25zW2hdKTtzJiZ0aGlzLnBhcnNlZFBvczxzLnZpZXdwb3J0LmZyb20tMWU1JiYodGhpcy5zdGF0ZT10aGlzLmxhbmcuc3RyZWFtUGFyc2VyLnN0YXJ0U3RhdGUoJChzLnN0YXRlKSkscy5za2lwVW50aWxJblZpZXcodGhpcy5wYXJzZWRQb3Mscy52aWV3cG9ydC5mcm9tKSx0aGlzLnBhcnNlZFBvcz1zLnZpZXdwb3J0LmZyb20pLHRoaXMubW92ZVJhbmdlSW5kZXgoKX1hZHZhbmNlKCl7bGV0IHQ9eC5nZXQoKSxlPXRoaXMuc3RvcHBlZEF0PT1udWxsP3RoaXMudG86TWF0aC5taW4odGhpcy50byx0aGlzLnN0b3BwZWRBdCkscj1NYXRoLm1pbihlLHRoaXMuY2h1bmtTdGFydCsyMDQ4KTtmb3IodCYmKHI9TWF0aC5taW4ocix0LnZpZXdwb3J0LnRvKSk7dGhpcy5wYXJzZWRQb3M8cjspdGhpcy5wYXJzZUxpbmUodCk7cmV0dXJuIHRoaXMuY2h1bmtTdGFydDx0aGlzLnBhcnNlZFBvcyYmdGhpcy5maW5pc2hDaHVuaygpLHRoaXMucGFyc2VkUG9zPj1lP3RoaXMuZmluaXNoKCk6dCYmdGhpcy5wYXJzZWRQb3M+PXQudmlld3BvcnQudG8/KHQuc2tpcFVudGlsSW5WaWV3KHRoaXMucGFyc2VkUG9zLGUpLHRoaXMuZmluaXNoKCkpOm51bGx9c3RvcEF0KHQpe3RoaXMuc3RvcHBlZEF0PXR9bGluZUFmdGVyKHQpe2xldCBlPXRoaXMuaW5wdXQuY2h1bmsodCk7aWYodGhpcy5pbnB1dC5saW5lQ2h1bmtzKWU9PWBcbmAmJihlPVwiXCIpO2Vsc2V7bGV0IHI9ZS5pbmRleE9mKGBcbmApO3I+LTEmJihlPWUuc2xpY2UoMCxyKSl9cmV0dXJuIHQrZS5sZW5ndGg8PXRoaXMudG8/ZTplLnNsaWNlKDAsdGhpcy50by10KX1uZXh0TGluZSgpe2xldCB0PXRoaXMucGFyc2VkUG9zLGU9dGhpcy5saW5lQWZ0ZXIodCkscj10K2UubGVuZ3RoO2ZvcihsZXQgaT10aGlzLnJhbmdlSW5kZXg7Oyl7bGV0IHM9dGhpcy5yYW5nZXNbaV0udG87aWYocz49cnx8KGU9ZS5zbGljZSgwLHMtKHItZS5sZW5ndGgpKSxpKyssaT09dGhpcy5yYW5nZXMubGVuZ3RoKSlicmVhaztsZXQgbz10aGlzLnJhbmdlc1tpXS5mcm9tLGw9dGhpcy5saW5lQWZ0ZXIobyk7ZSs9bCxyPW8rbC5sZW5ndGh9cmV0dXJue2xpbmU6ZSxlbmQ6cn19c2tpcEdhcHNUbyh0LGUscil7Zm9yKDs7KXtsZXQgaT10aGlzLnJhbmdlc1t0aGlzLnJhbmdlSW5kZXhdLnRvLHM9dCtlO2lmKHI+MD9pPnM6aT49cylicmVhaztlKz10aGlzLnJhbmdlc1srK3RoaXMucmFuZ2VJbmRleF0uZnJvbS1pfXJldHVybiBlfW1vdmVSYW5nZUluZGV4KCl7Zm9yKDt0aGlzLnJhbmdlc1t0aGlzLnJhbmdlSW5kZXhdLnRvPHRoaXMucGFyc2VkUG9zOyl0aGlzLnJhbmdlSW5kZXgrK31lbWl0VG9rZW4odCxlLHIsaSxzKXtpZih0aGlzLnJhbmdlcy5sZW5ndGg+MSl7cz10aGlzLnNraXBHYXBzVG8oZSxzLDEpLGUrPXM7bGV0IG89dGhpcy5jaHVuay5sZW5ndGg7cz10aGlzLnNraXBHYXBzVG8ocixzLC0xKSxyKz1zLGkrPXRoaXMuY2h1bmsubGVuZ3RoLW99cmV0dXJuIHRoaXMuY2h1bmsucHVzaCh0LGUscixpKSxzfXBhcnNlTGluZSh0KXtsZXR7bGluZTplLGVuZDpyfT10aGlzLm5leHRMaW5lKCksaT0wLHtzdHJlYW1QYXJzZXI6c309dGhpcy5sYW5nLG89bmV3IEcoZSx0P3Quc3RhdGUudGFiU2l6ZTo0LHQ/JCh0LnN0YXRlKToyKTtpZihvLmVvbCgpKXMuYmxhbmtMaW5lKHRoaXMuc3RhdGUsby5pbmRlbnRVbml0KTtlbHNlIGZvcig7IW8uZW9sKCk7KXtsZXQgbD0kdChzLnRva2VuLG8sdGhpcy5zdGF0ZSk7aWYobCYmKGk9dGhpcy5lbWl0VG9rZW4odGhpcy5sYW5nLnRva2VuVGFibGUucmVzb2x2ZShsKSx0aGlzLnBhcnNlZFBvcytvLnN0YXJ0LHRoaXMucGFyc2VkUG9zK28ucG9zLDQsaSkpLG8uc3RhcnQ+MWU0KWJyZWFrfXRoaXMucGFyc2VkUG9zPXIsdGhpcy5tb3ZlUmFuZ2VJbmRleCgpLHRoaXMucGFyc2VkUG9zPHRoaXMudG8mJnRoaXMucGFyc2VkUG9zKyt9ZmluaXNoQ2h1bmsoKXtsZXQgdD1wLmJ1aWxkKHtidWZmZXI6dGhpcy5jaHVuayxzdGFydDp0aGlzLmNodW5rU3RhcnQsbGVuZ3RoOnRoaXMucGFyc2VkUG9zLXRoaXMuY2h1bmtTdGFydCxub2RlU2V0OkZlLHRvcElEOjAsbWF4QnVmZmVyTGVuZ3RoOjIwNDgscmV1c2VkOnRoaXMuY2h1bmtSZXVzZWR9KTt0PW5ldyBwKHQudHlwZSx0LmNoaWxkcmVuLHQucG9zaXRpb25zLHQubGVuZ3RoLFtbdGhpcy5sYW5nLnN0YXRlQWZ0ZXIsdGhpcy5sYW5nLnN0cmVhbVBhcnNlci5jb3B5U3RhdGUodGhpcy5zdGF0ZSldXSksdGhpcy5jaHVua3MucHVzaCh0KSx0aGlzLmNodW5rUG9zLnB1c2godGhpcy5jaHVua1N0YXJ0LXRoaXMucmFuZ2VzWzBdLmZyb20pLHRoaXMuY2h1bms9W10sdGhpcy5jaHVua1JldXNlZD12b2lkIDAsdGhpcy5jaHVua1N0YXJ0PXRoaXMucGFyc2VkUG9zfWZpbmlzaCgpe3JldHVybiBuZXcgcCh0aGlzLmxhbmcudG9wTm9kZSx0aGlzLmNodW5rcyx0aGlzLmNodW5rUG9zLHRoaXMucGFyc2VkUG9zLXRoaXMucmFuZ2VzWzBdLmZyb20pLmJhbGFuY2UoKX19O2Z1bmN0aW9uICR0KG4sdCxlKXt0LnN0YXJ0PXQucG9zO2ZvcihsZXQgcj0wO3I8MTA7cisrKXtsZXQgaT1uKHQsZSk7aWYodC5wb3M+dC5zdGFydClyZXR1cm4gaX10aHJvdyBuZXcgRXJyb3IoXCJTdHJlYW0gcGFyc2VyIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS5cIil9dmFyIGh0PU9iamVjdC5jcmVhdGUobnVsbCksRj1bSi5ub25lXSxGZT1uZXcgSHQoRiksZ3Q9W10sVnQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0W24sdF1vZltbXCJ2YXJpYWJsZVwiLFwidmFyaWFibGVOYW1lXCJdLFtcInZhcmlhYmxlLTJcIixcInZhcmlhYmxlTmFtZS5zcGVjaWFsXCJdLFtcInN0cmluZy0yXCIsXCJzdHJpbmcuc3BlY2lhbFwiXSxbXCJkZWZcIixcInZhcmlhYmxlTmFtZS5kZWZpbml0aW9uXCJdLFtcInRhZ1wiLFwidGFnTmFtZVwiXSxbXCJhdHRyaWJ1dGVcIixcImF0dHJpYnV0ZU5hbWVcIl0sW1widHlwZVwiLFwidHlwZU5hbWVcIl0sW1wiYnVpbHRpblwiLFwidmFyaWFibGVOYW1lLnN0YW5kYXJkXCJdLFtcInF1YWxpZmllclwiLFwibW9kaWZpZXJcIl0sW1wiZXJyb3JcIixcImludmFsaWRcIl0sW1wiaGVhZGVyXCIsXCJoZWFkaW5nXCJdLFtcInByb3BlcnR5XCIsXCJwcm9wZXJ0eU5hbWVcIl1dKVZ0W25dPXp0KGh0LHQpO3ZhciBIPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXh0cmE9dCx0aGlzLnRhYmxlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSxWdCl9cmVzb2x2ZSh0KXtyZXR1cm4gdD90aGlzLnRhYmxlW3RdfHwodGhpcy50YWJsZVt0XT16dCh0aGlzLmV4dHJhLHQpKTowfX0sUmU9bmV3IEgoaHQpO2Z1bmN0aW9uIHR0KG4sdCl7Z3QuaW5kZXhPZihuKT4tMXx8KGd0LnB1c2gobiksY29uc29sZS53YXJuKHQpKX1mdW5jdGlvbiB6dChuLHQpe2xldCBlPW51bGw7Zm9yKGxldCBzIG9mIHQuc3BsaXQoXCIuXCIpKXtsZXQgbz1uW3NdfHxmW3NdO28/dHlwZW9mIG89PVwiZnVuY3Rpb25cIj9lP2U9byhlKTp0dChzLGBNb2RpZmllciAke3N9IHVzZWQgYXQgc3RhcnQgb2YgdGFnYCk6ZT90dChzLGBUYWcgJHtzfSB1c2VkIGFzIG1vZGlmaWVyYCk6ZT1vOnR0KHMsYFVua25vd24gaGlnaGxpZ2h0aW5nIHRhZyAke3N9YCl9aWYoIWUpcmV0dXJuIDA7bGV0IHI9dC5yZXBsYWNlKC8gL2csXCJfXCIpLGk9Si5kZWZpbmUoe2lkOkYubGVuZ3RoLG5hbWU6cixwcm9wczpbZWUoe1tyXTplfSldfSk7cmV0dXJuIEYucHVzaChpKSxpLmlkfWZ1bmN0aW9uIFVlKG4pe2xldCB0PUouZGVmaW5lKHtpZDpGLmxlbmd0aCxuYW1lOlwiRG9jdW1lbnRcIixwcm9wczpbVC5hZGQoKCk9Pm4pXX0pO3JldHVybiBGLnB1c2godCksdH1leHBvcnR7RCBhcyBIaWdobGlnaHRTdHlsZSxNIGFzIEluZGVudENvbnRleHQsQiBhcyBMUkxhbmd1YWdlLGMgYXMgTGFuZ3VhZ2UsaiBhcyBMYW5ndWFnZURlc2NyaXB0aW9uLGR0IGFzIExhbmd1YWdlU3VwcG9ydCx4IGFzIFBhcnNlQ29udGV4dCxxIGFzIFN0cmVhbUxhbmd1YWdlLEcgYXMgU3RyaW5nU3RyZWFtLEUgYXMgVHJlZUluZGVudENvbnRleHQsb24gYXMgYnJhY2tldE1hdGNoaW5nLEZ0IGFzIGNvZGVGb2xkaW5nLFFlIGFzIGNvbnRpbnVlZEluZGVudCxzbiBhcyBkZWZhdWx0SGlnaGxpZ2h0U3R5bGUsdnQgYXMgZGVmaW5lTGFuZ3VhZ2VGYWNldCxLZSBhcyBkZWxpbWl0ZWRJbmRlbnQsbmUgYXMgZW5zdXJlU3ludGF4VHJlZSxfZSBhcyBmbGF0SW5kZW50LGJlIGFzIGZvbGRBbGwsZ2UgYXMgZm9sZENvZGUsXyBhcyBmb2xkRWZmZWN0LGVuIGFzIGZvbGRHdXR0ZXIsWWUgYXMgZm9sZEluc2lkZSx0biBhcyBmb2xkS2V5bWFwLGNlIGFzIGZvbGROb2RlUHJvcCx1ZSBhcyBmb2xkU2VydmljZSxBIGFzIGZvbGRTdGF0ZSxWIGFzIGZvbGRhYmxlLFplIGFzIGZvbGRlZFJhbmdlcyxHZSBhcyBmb3JjZVBhcnNpbmcsJCBhcyBnZXRJbmRlbnRVbml0LFR0IGFzIGdldEluZGVudGF0aW9uLHJuIGFzIGhpZ2hsaWdodGluZ0ZvcixyZSBhcyBpbmRlbnROb2RlUHJvcCxYZSBhcyBpbmRlbnRPbklucHV0LEplIGFzIGluZGVudFJhbmdlLFB0IGFzIGluZGVudFNlcnZpY2UsQ3QgYXMgaW5kZW50U3RyaW5nLEF0IGFzIGluZGVudFVuaXQsUCBhcyBsYW5ndWFnZSxUIGFzIGxhbmd1YWdlRGF0YVByb3AsVSBhcyBtYXRjaEJyYWNrZXRzLG5uIGFzIHN5bnRheEhpZ2hsaWdodGluZyxxZSBhcyBzeW50YXhQYXJzZXJSdW5uaW5nLG0gYXMgc3ludGF4VHJlZSx6ZSBhcyBzeW50YXhUcmVlQXZhaWxhYmxlLHdlIGFzIHVuZm9sZEFsbCxrZSBhcyB1bmZvbGRDb2RlLFIgYXMgdW5mb2xkRWZmZWN0fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQHRzLW5vY2hlY2sgQnlwYXNzIHN0YXRpYyBlcnJvcnMgZm9yIG1pc3NpbmcgLS11bnN0YWJsZS5cblxuZXhwb3J0IHR5cGUgSHR0cENsaWVudCA9IERlbm8uSHR0cENsaWVudDtcbmV4cG9ydCB0eXBlIFVuaXhDb25uZWN0T3B0aW9ucyA9IERlbm8uVW5peENvbm5lY3RPcHRpb25zO1xuZXhwb3J0IHR5cGUgVW5peExpc3Rlbk9wdGlvbnMgPSBEZW5vLlVuaXhMaXN0ZW5PcHRpb25zO1xuZXhwb3J0IHR5cGUgRGF0YWdyYW1Db25uID0gRGVuby5EYXRhZ3JhbUNvbm47XG5leHBvcnQgdHlwZSBTZXJ2ZUhhbmRsZXIgPSBEZW5vLlNlcnZlSGFuZGxlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBEZW5vLnNlcnZlPlxuKTogUmV0dXJuVHlwZTx0eXBlb2YgRGVuby5zZXJ2ZT4ge1xuICBpZiAodHlwZW9mIERlbm8uc2VydmUgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIERlbm8uc2VydmUoLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZ3JhZGVIdHRwUmF3KFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBEZW5vLnVwZ3JhZGVIdHRwUmF3PlxuKTogUmV0dXJuVHlwZTx0eXBlb2YgRGVuby51cGdyYWRlSHR0cFJhdz4ge1xuICBpZiAodHlwZW9mIERlbm8udXBncmFkZUh0dHBSYXcgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIERlbm8udXBncmFkZUh0dHBSYXcoLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFNpZ25hbExpc3RlbmVyKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBEZW5vLmFkZFNpZ25hbExpc3RlbmVyPlxuKTogUmV0dXJuVHlwZTx0eXBlb2YgRGVuby5hZGRTaWduYWxMaXN0ZW5lcj4ge1xuICBpZiAodHlwZW9mIERlbm8uYWRkU2lnbmFsTGlzdGVuZXIgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIERlbm8uYWRkU2lnbmFsTGlzdGVuZXIoLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUh0dHBDbGllbnQoXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIERlbm8uY3JlYXRlSHR0cENsaWVudD5cbik6IFJldHVyblR5cGU8dHlwZW9mIERlbm8uY3JlYXRlSHR0cENsaWVudD4ge1xuICBpZiAodHlwZW9mIERlbm8uY3JlYXRlSHR0cENsaWVudCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gRGVuby5jcmVhdGVIdHRwQ2xpZW50KC4uLmFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSZXF1aXJlcyAtLXVuc3RhYmxlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zb2xlU2l6ZShcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgRGVuby5jb25zb2xlU2l6ZT5cbik6IFJldHVyblR5cGU8dHlwZW9mIERlbm8uY29uc29sZVNpemU+IHtcbiAgaWYgKHR5cGVvZiBEZW5vLmNvbnNvbGVTaXplID09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBEZW5vLmNvbnNvbGVTaXplKC4uLmFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSZXF1aXJlcyAtLXVuc3RhYmxlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmdXRpbWUoXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIERlbm8uZnV0aW1lPlxuKTogUmV0dXJuVHlwZTx0eXBlb2YgRGVuby5mdXRpbWU+IHtcbiAgaWYgKHR5cGVvZiBEZW5vLmZ1dGltZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gRGVuby5mdXRpbWUoLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJSZXF1aXJlcyAtLXVuc3RhYmxlXCIpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnV0aW1lU3luYyhcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgRGVuby5mdXRpbWVTeW5jPlxuKTogUmV0dXJuVHlwZTx0eXBlb2YgRGVuby5mdXRpbWVTeW5jPiB7XG4gIGlmICh0eXBlb2YgRGVuby5mdXRpbWVTeW5jID09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBEZW5vLmZ1dGltZVN5bmMoLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgRGVuby5nZXRVaWQ+XG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBEZW5vLmdldFVpZD4ge1xuICBpZiAodHlwZW9mIERlbm8uZ2V0VWlkID09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBEZW5vLmdldFVpZCguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaG9zdG5hbWUoXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIERlbm8uaG9zdG5hbWU+XG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBEZW5vLmhvc3RuYW1lPiB7XG4gIGlmICh0eXBlb2YgRGVuby5ob3N0bmFtZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gRGVuby5ob3N0bmFtZSguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZGF2ZyhcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgRGVuby5sb2FkYXZnPlxuKTogUmV0dXJuVHlwZTx0eXBlb2YgRGVuby5sb2FkYXZnPiB7XG4gIGlmICh0eXBlb2YgRGVuby5sb2FkYXZnID09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBEZW5vLmxvYWRhdmcoLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9zUmVsZWFzZShcbiAgLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgRGVuby5vc1JlbGVhc2U+XG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBEZW5vLm9zUmVsZWFzZT4ge1xuICBpZiAodHlwZW9mIERlbm8ub3NSZWxlYXNlID09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBEZW5vLm9zUmVsZWFzZSguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU2lnbmFsTGlzdGVuZXIoXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIERlbm8ucmVtb3ZlU2lnbmFsTGlzdGVuZXI+XG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBEZW5vLnJlbW92ZVNpZ25hbExpc3RlbmVyPiB7XG4gIGlmICh0eXBlb2YgRGVuby5yZW1vdmVTaWduYWxMaXN0ZW5lciA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gRGVuby5yZW1vdmVTaWduYWxMaXN0ZW5lciguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UmF3KFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBEZW5vLnNldFJhdz5cbik6IFJldHVyblR5cGU8dHlwZW9mIERlbm8uc2V0UmF3PiB7XG4gIGlmICh0eXBlb2YgRGVuby5zZXRSYXcgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIERlbm8uc2V0UmF3KC4uLmFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSZXF1aXJlcyAtLXVuc3RhYmxlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzeXN0ZW1NZW1vcnlJbmZvKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBEZW5vLnN5c3RlbU1lbW9yeUluZm8+XG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBEZW5vLnN5c3RlbU1lbW9yeUluZm8+IHtcbiAgaWYgKHR5cGVvZiBEZW5vLnN5c3RlbU1lbW9yeUluZm8gPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIERlbm8uc3lzdGVtTWVtb3J5SW5mbyguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXRpbWUoXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIERlbm8udXRpbWU+XG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBEZW5vLnV0aW1lPiB7XG4gIGlmICh0eXBlb2YgRGVuby51dGltZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gRGVuby51dGltZSguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIikpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1dGltZVN5bmMoXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIERlbm8udXRpbWVTeW5jPlxuKTogUmV0dXJuVHlwZTx0eXBlb2YgRGVuby51dGltZVN5bmM+IHtcbiAgaWYgKHR5cGVvZiBEZW5vLnV0aW1lU3luYyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gRGVuby51dGltZVN5bmMoLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ldHdvcmtJbnRlcmZhY2VzKFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBEZW5vLm5ldHdvcmtJbnRlcmZhY2VzPlxuKTogUmV0dXJuVHlwZTx0eXBlb2YgRGVuby5uZXR3b3JrSW50ZXJmYWNlcz4ge1xuICBpZiAodHlwZW9mIERlbm8ubmV0d29ya0ludGVyZmFjZXMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIERlbm8ubmV0d29ya0ludGVyZmFjZXMoLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QoXG4gIG9wdGlvbnM6IFVuaXhDb25uZWN0T3B0aW9ucyxcbik6IFByb21pc2U8RGVuby5Vbml4Q29ubj4ge1xuICByZXR1cm4gYXdhaXQgRGVuby5jb25uZWN0KG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuKFxuICBvcHRpb25zOiBVbml4TGlzdGVuT3B0aW9ucyAmIHsgdHJhbnNwb3J0OiBcInVuaXhcIiB9LFxuKTogUmV0dXJuVHlwZTx0eXBlb2YgRGVuby5saXN0ZW4+IHtcbiAgcmV0dXJuIERlbm8ubGlzdGVuKG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuRGF0YWdyYW0oXG4gIG9wdGlvbnM6IERlbm8uTGlzdGVuT3B0aW9ucyAmIHsgdHJhbnNwb3J0OiBcInVkcFwiIH0sXG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBEZW5vLmxpc3RlbkRhdGFncmFtPiB7XG4gIHJldHVybiBEZW5vLmxpc3RlbkRhdGFncmFtKG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTGlzdGVuZXJSZWYoXG4gIGxpc3RlbmVyOiBEZW5vLkxpc3RlbmVyLFxuICAuLi5hcmdzOiBQYXJhbWV0ZXJzPERlbm8uTGlzdGVuZXJbXCJyZWZcIl0+XG4pOiBSZXR1cm5UeXBlPERlbm8uTGlzdGVuZXJbXCJyZWZcIl0+IHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lci5yZWYgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLnJlZiguLi5hcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTGlzdGVuZXJVbnJlZihcbiAgbGlzdGVuZXI6IERlbm8uTGlzdGVuZXIsXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8RGVuby5MaXN0ZW5lcltcInVucmVmXCJdPlxuKTogUmV0dXJuVHlwZTxEZW5vLkxpc3RlbmVyW1widW5yZWZcIl0+IHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lci51bnJlZiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gbGlzdGVuZXIudW5yZWYoLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVucmVmVGltZXIoXG4gIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIERlbm8udW5yZWZUaW1lcj5cbik6IFJldHVyblR5cGU8dHlwZW9mIERlbm8udW5yZWZUaW1lcj4ge1xuICBpZiAodHlwZW9mIERlbm8udW5yZWZUaW1lciA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gRGVuby51bnJlZlRpbWVyKC4uLmFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSZXF1aXJlcyAtLXVuc3RhYmxlXCIpO1xuICB9XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuLy8gVE9ETyhyeSkgSXQnZCBiZSBiZXR0ZXIgdG8gbWFrZSBEZWZlcnJlZCBhIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbVxuLy8gUHJvbWlzZSwgcmF0aGVyIHRoYW4gYW4gaW50ZXJmYWNlLiBUaGlzIGlzIHBvc3NpYmxlIGluIEVTMjAxNiwgaG93ZXZlclxuLy8gdHlwZXNjcmlwdCBwcm9kdWNlcyBicm9rZW4gY29kZSB3aGVuIHRhcmdldGluZyBFUzUgY29kZS5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE1MjAyXG4vLyBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGUgZ2l0aHViIGlzc3VlIGlzIGNsb3NlZCBidXQgdGhlIHByb2JsZW0gcmVtYWlucy5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmZXJyZWQ8VD4gZXh0ZW5kcyBQcm9taXNlPFQ+IHtcbiAgcmVhZG9ubHkgc3RhdGU6IFwicGVuZGluZ1wiIHwgXCJmdWxmaWxsZWRcIiB8IFwicmVqZWN0ZWRcIjtcbiAgcmVzb2x2ZSh2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPik6IHZvaWQ7XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIHJlamVjdChyZWFzb24/OiBhbnkpOiB2b2lkO1xufVxuXG4vKiogQ3JlYXRlcyBhIFByb21pc2Ugd2l0aCB0aGUgYHJlamVjdGAgYW5kIGByZXNvbHZlYCBmdW5jdGlvbnNcbiAqIHBsYWNlZCBhcyBtZXRob2RzIG9uIHRoZSBwcm9taXNlIG9iamVjdCBpdHNlbGYuIEl0IGFsbG93cyB5b3UgdG8gZG86XG4gKlxuICogYGBgdHNcbiAqICAgICBpbXBvcnQgeyBkZWZlcnJlZCB9IGZyb20gXCIuL2RlZmVycmVkLnRzXCI7XG4gKlxuICogICAgIGNvbnN0IHAgPSBkZWZlcnJlZDxudW1iZXI+KCk7XG4gKiAgICAgLy8gLi4uXG4gKiAgICAgcC5yZXNvbHZlKDQyKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmZXJyZWQ8VD4oKTogRGVmZXJyZWQ8VD4ge1xuICBsZXQgbWV0aG9kcztcbiAgbGV0IHN0YXRlID0gXCJwZW5kaW5nXCI7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIGFzeW5jIHJlc29sdmUodmFsdWU6IFQgfCBQcm9taXNlTGlrZTxUPikge1xuICAgICAgICBhd2FpdCB2YWx1ZTtcbiAgICAgICAgc3RhdGUgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgICAgcmVqZWN0KHJlYXNvbj86IGFueSkge1xuICAgICAgICBzdGF0ZSA9IFwicmVqZWN0ZWRcIjtcbiAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICB9LFxuICAgIH07XG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgXCJzdGF0ZVwiLCB7IGdldDogKCkgPT4gc3RhdGUgfSk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHByb21pc2UsIG1ldGhvZHMpIGFzIERlZmVycmVkPFQ+O1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5pbXBvcnQgeyB1bnJlZlRpbWVyIH0gZnJvbSBcIi4uL19kZW5vX3Vuc3RhYmxlLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsYXlPcHRpb25zIHtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvY2VzcyBzaG91bGQgY29udGludWUgdG8gcnVuIGFzIGxvbmcgYXMgdGhlIHRpbWVyIGV4aXN0cy4gVGhpcyBpcyBgdHJ1ZWAgYnkgZGVmYXVsdC4gKi9cbiAgcGVyc2lzdGVudD86IGJvb2xlYW47XG59XG5cbi8qIFJlc29sdmVzIGFmdGVyIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIsIG9wdGlvbnM6IERlbGF5T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc2lnbmFsLCBwZXJzaXN0ZW50IH0gPSBvcHRpb25zO1xuICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oXCJEZWxheSB3YXMgYWJvcnRlZC5cIiwgXCJBYm9ydEVycm9yXCIpKTtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGFib3J0ID0gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KGkpO1xuICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oXCJEZWxheSB3YXMgYWJvcnRlZC5cIiwgXCJBYm9ydEVycm9yXCIpKTtcbiAgICB9O1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICBzaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICBjb25zdCBpID0gc2V0VGltZW91dChkb25lLCBtcyk7XG4gICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAocGVyc2lzdGVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHVucmVmVGltZXIoaSk7XG4gICAgfVxuICB9KTtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG5pbXBvcnQgeyBEZWZlcnJlZCwgZGVmZXJyZWQgfSBmcm9tIFwiLi9kZWZlcnJlZC50c1wiO1xuXG5pbnRlcmZhY2UgVGFnZ2VkWWllbGRlZFZhbHVlPFQ+IHtcbiAgaXRlcmF0b3I6IEFzeW5jSXRlcmF0b3I8VD47XG4gIHZhbHVlOiBUO1xufVxuXG4vKiogVGhlIE11eEFzeW5jSXRlcmF0b3IgY2xhc3MgbXVsdGlwbGV4ZXMgbXVsdGlwbGUgYXN5bmMgaXRlcmF0b3JzIGludG8gYVxuICogc2luZ2xlIHN0cmVhbS4gSXQgY3VycmVudGx5IG1ha2VzIGFuIGFzc3VtcHRpb246XG4gKiAtIFRoZSBmaW5hbCByZXN1bHQgKHRoZSB2YWx1ZSByZXR1cm5lZCBhbmQgbm90IHlpZWxkZWQgZnJvbSB0aGUgaXRlcmF0b3IpXG4gKiAgIGRvZXMgbm90IG1hdHRlcjsgaWYgdGhlcmUgaXMgYW55LCBpdCBpcyBkaXNjYXJkZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBNdXhBc3luY0l0ZXJhdG9yPFQ+IGltcGxlbWVudHMgQXN5bmNJdGVyYWJsZTxUPiB7XG4gICNpdGVyYXRvckNvdW50ID0gMDtcbiAgI3lpZWxkczogQXJyYXk8VGFnZ2VkWWllbGRlZFZhbHVlPFQ+PiA9IFtdO1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAjdGhyb3dzOiBhbnlbXSA9IFtdO1xuICAjc2lnbmFsOiBEZWZlcnJlZDx2b2lkPiA9IGRlZmVycmVkKCk7XG5cbiAgYWRkKGl0ZXJhYmxlOiBBc3luY0l0ZXJhYmxlPFQ+KSB7XG4gICAgKyt0aGlzLiNpdGVyYXRvckNvdW50O1xuICAgIHRoaXMuI2NhbGxJdGVyYXRvck5leHQoaXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkpO1xuICB9XG5cbiAgYXN5bmMgI2NhbGxJdGVyYXRvck5leHQoXG4gICAgaXRlcmF0b3I6IEFzeW5jSXRlcmF0b3I8VD4sXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICAtLXRoaXMuI2l0ZXJhdG9yQ291bnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiN5aWVsZHMucHVzaCh7IGl0ZXJhdG9yLCB2YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLiN0aHJvd3MucHVzaChlKTtcbiAgICB9XG4gICAgdGhpcy4jc2lnbmFsLnJlc29sdmUoKTtcbiAgfVxuXG4gIGFzeW5jICppdGVyYXRlKCk6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxUPiB7XG4gICAgd2hpbGUgKHRoaXMuI2l0ZXJhdG9yQ291bnQgPiAwKSB7XG4gICAgICAvLyBTbGVlcCB1bnRpbCBhbnkgb2YgdGhlIHdyYXBwZWQgaXRlcmF0b3JzIHlpZWxkcy5cbiAgICAgIGF3YWl0IHRoaXMuI3NpZ25hbDtcblxuICAgICAgLy8gTm90ZSB0aGF0IHdoaWxlIHdlJ3JlIGxvb3Bpbmcgb3ZlciBgeWllbGRzYCwgbmV3IGl0ZW1zIG1heSBiZSBhZGRlZC5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy4jeWllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHsgaXRlcmF0b3IsIHZhbHVlIH0gPSB0aGlzLiN5aWVsZHNbaV07XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgICB0aGlzLiNjYWxsSXRlcmF0b3JOZXh0KGl0ZXJhdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuI3Rocm93cy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBlIG9mIHRoaXMuI3Rocm93cykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jdGhyb3dzLmxlbmd0aCA9IDA7XG4gICAgICB9XG4gICAgICAvLyBDbGVhciB0aGUgYHlpZWxkc2AgbGlzdCBhbmQgcmVzZXQgdGhlIGBzaWduYWxgIHByb21pc2UuXG4gICAgICB0aGlzLiN5aWVsZHMubGVuZ3RoID0gMDtcbiAgICAgIHRoaXMuI3NpZ25hbCA9IGRlZmVycmVkKCk7XG4gICAgfVxuICB9XG5cbiAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpOiBBc3luY0l0ZXJhdG9yPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVyYXRlKCk7XG4gIH1cbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQSBtb2R1bGUgdG8gcHJpbnQgQU5TSSB0ZXJtaW5hbCBjb2xvcnMuIEluc3BpcmVkIGJ5IGNoYWxrLCBrbGV1ciwgYW5kIGNvbG9yc1xuLy8gb24gbnBtLlxuXG4vKipcbiAqIFN0cmluZyBmb3JtYXR0ZXJzIGFuZCB1dGlsaXRpZXMgZm9yIGRlYWxpbmcgd2l0aCBBTlNJIGNvbG9yIGNvZGVzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgYmdCbHVlLCByZWQsIGJvbGQgfSBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQCRTVERfVkVSU0lPTi9mbXQvY29sb3JzLnRzXCI7XG4gKiBjb25zb2xlLmxvZyhiZ0JsdWUocmVkKGJvbGQoXCJIZWxsbyB3b3JsZCFcIikpKSk7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBgTk9fQ09MT1JgIGVudmlyb25tZW50YWwgdmFyaWFibGUgZGlzYWJsaW5nIGFueSBjb2xvcmluZ1xuICogaWYgYE5PX0NPTE9SYCBpcyBzZXQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG5jb25zdCB7IERlbm8gfSA9IGdsb2JhbFRoaXMgYXMgYW55O1xuY29uc3Qgbm9Db2xvciA9IHR5cGVvZiBEZW5vPy5ub0NvbG9yID09PSBcImJvb2xlYW5cIlxuICA/IERlbm8ubm9Db2xvciBhcyBib29sZWFuXG4gIDogdHJ1ZTtcblxuaW50ZXJmYWNlIENvZGUge1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIHJlZ2V4cDogUmVnRXhwO1xufVxuXG4vKiogUkdCIDgtYml0cyBwZXIgY2hhbm5lbC4gRWFjaCBpbiByYW5nZSBgMC0+MjU1YCBvciBgMHgwMC0+MHhmZmAgKi9cbmludGVyZmFjZSBSZ2Ige1xuICByOiBudW1iZXI7XG4gIGc6IG51bWJlcjtcbiAgYjogbnVtYmVyO1xufVxuXG5sZXQgZW5hYmxlZCA9ICFub0NvbG9yO1xuXG4vKipcbiAqIFNldCBjaGFuZ2luZyB0ZXh0IGNvbG9yIHRvIGVuYWJsZWQgb3IgZGlzYWJsZWRcbiAqIEBwYXJhbSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sb3JFbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gIGlmIChub0NvbG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZW5hYmxlZCA9IHZhbHVlO1xufVxuXG4vKiogR2V0IHdoZXRoZXIgdGV4dCBjb2xvciBjaGFuZ2UgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvckVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbmFibGVkO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBjb2xvciBjb2RlXG4gKiBAcGFyYW0gb3BlblxuICogQHBhcmFtIGNsb3NlXG4gKi9cbmZ1bmN0aW9uIGNvZGUob3BlbjogbnVtYmVyW10sIGNsb3NlOiBudW1iZXIpOiBDb2RlIHtcbiAgcmV0dXJuIHtcbiAgICBvcGVuOiBgXFx4MWJbJHtvcGVuLmpvaW4oXCI7XCIpfW1gLFxuICAgIGNsb3NlOiBgXFx4MWJbJHtjbG9zZX1tYCxcbiAgICByZWdleHA6IG5ldyBSZWdFeHAoYFxcXFx4MWJcXFxcWyR7Y2xvc2V9bWAsIFwiZ1wiKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGNvbG9yIGFuZCBiYWNrZ3JvdW5kIGJhc2VkIG9uIGNvbG9yIGNvZGUgYW5kIGl0cyBhc3NvY2lhdGVkIHRleHRcbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBhcHBseSBjb2xvciBzZXR0aW5ncyB0b1xuICogQHBhcmFtIGNvZGUgY29sb3IgY29kZSB0byBhcHBseVxuICovXG5mdW5jdGlvbiBydW4oc3RyOiBzdHJpbmcsIGNvZGU6IENvZGUpOiBzdHJpbmcge1xuICByZXR1cm4gZW5hYmxlZFxuICAgID8gYCR7Y29kZS5vcGVufSR7c3RyLnJlcGxhY2UoY29kZS5yZWdleHAsIGNvZGUub3Blbil9JHtjb2RlLmNsb3NlfWBcbiAgICA6IHN0cjtcbn1cblxuLyoqXG4gKiBSZXNldCB0aGUgdGV4dCBtb2RpZmllZFxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIHJlc2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFswXSwgMCkpO1xufVxuXG4vKipcbiAqIE1ha2UgdGhlIHRleHQgYm9sZC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJvbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvbGQoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMV0sIDIyKSk7XG59XG5cbi8qKlxuICogVGhlIHRleHQgZW1pdHMgb25seSBhIHNtYWxsIGFtb3VudCBvZiBsaWdodC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBkaW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpbShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFsyXSwgMjIpKTtcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSB0ZXh0IGl0YWxpYy5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0YWxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXRhbGljKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzNdLCAyMykpO1xufVxuXG4vKipcbiAqIE1ha2UgdGhlIHRleHQgdW5kZXJsaW5lLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIHVuZGVybGluZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5kZXJsaW5lKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzRdLCAyNCkpO1xufVxuXG4vKipcbiAqIEludmVydCBiYWNrZ3JvdW5kIGNvbG9yIGFuZCB0ZXh0IGNvbG9yLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIGludmVydCBpdHMgY29sb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbN10sIDI3KSk7XG59XG5cbi8qKlxuICogTWFrZSB0aGUgdGV4dCBoaWRkZW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gaGlkZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZGVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzhdLCAyOCkpO1xufVxuXG4vKipcbiAqIFB1dCBob3Jpem9udGFsIGxpbmUgdGhyb3VnaCB0aGUgY2VudGVyIG9mIHRoZSB0ZXh0LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIHN0cmlrZSB0aHJvdWdoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpa2V0aHJvdWdoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzldLCAyOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGJsYWNrLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJsYWNrKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMwXSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byByZWQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSByZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszMV0sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gZ3JlZW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBncmVlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JlZW4oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzJdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIHllbGxvdy5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIHllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24geWVsbG93KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzMzXSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBibHVlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYmx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmx1ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszNF0sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gbWFnZW50YS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIG1hZ2VudGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hZ2VudGEoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcnVuKHN0ciwgY29kZShbMzVdLCAzOSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHRvIGN5YW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBjeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjeWFuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM2XSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byB3aGl0ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIHdoaXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGl0ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFszN10sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdG8gZ3JheS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGdyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyYXkoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYnJpZ2h0QmxhY2soc3RyKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgYmxhY2suXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtYmxhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodEJsYWNrKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzkwXSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgcmVkLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LXJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0UmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzkxXSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgZ3JlZW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtZ3JlZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodEdyZWVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzkyXSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgeWVsbG93LlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgYnJpZ2h0LXllbGxvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gYnJpZ2h0WWVsbG93KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzkzXSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgYmx1ZS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC1ibHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRCbHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzk0XSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgbWFnZW50YS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC1tYWdlbnRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRNYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzk1XSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgY3lhbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGJyaWdodC1jeWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicmlnaHRDeWFuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzk2XSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgdGV4dCBjb2xvciB0byBicmlnaHQgd2hpdGUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBicmlnaHQtd2hpdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJyaWdodFdoaXRlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzk3XSwgMzkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBibGFjay5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJsYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JsYWNrKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQwXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byByZWQuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCByZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnUmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQxXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBncmVlbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGdyZWVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0dyZWVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQyXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byB5ZWxsb3cuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCB5ZWxsb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnWWVsbG93KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQzXSwgNDkpKTtcbn1cblxuLyoqXG4gKiBTZXQgYmFja2dyb3VuZCBjb2xvciB0byBibHVlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYmx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCbHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzQ0XSwgNDkpKTtcbn1cblxuLyoqXG4gKiAgU2V0IGJhY2tncm91bmQgY29sb3IgdG8gbWFnZW50YS5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIG1hZ2VudGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnTWFnZW50YShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0NV0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gY3lhbi5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGN5YW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQ3lhbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0Nl0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gd2hpdGUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCB3aGl0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdXaGl0ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0N10sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IGJsYWNrLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LWJsYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEJsYWNrKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwMF0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IHJlZC5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC1yZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0UmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwMV0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IGdyZWVuLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LWdyZWVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodEdyZWVuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwMl0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IHllbGxvdy5cbiAqIEBwYXJhbSBzdHIgdGV4dCB0byBtYWtlIGl0cyBiYWNrZ3JvdW5kIGJyaWdodC15ZWxsb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnQnJpZ2h0WWVsbG93KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwM10sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IGJsdWUuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtYmx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRCbHVlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwNF0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IG1hZ2VudGEuXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtbWFnZW50YVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRNYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwNV0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IGN5YW4uXG4gKiBAcGFyYW0gc3RyIHRleHQgdG8gbWFrZSBpdHMgYmFja2dyb3VuZCBicmlnaHQtY3lhblxuICovXG5leHBvcnQgZnVuY3Rpb24gYmdCcmlnaHRDeWFuKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwNl0sIDQ5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdG8gYnJpZ2h0IHdoaXRlLlxuICogQHBhcmFtIHN0ciB0ZXh0IHRvIG1ha2UgaXRzIGJhY2tncm91bmQgYnJpZ2h0LXdoaXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ0JyaWdodFdoaXRlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzEwN10sIDQ5KSk7XG59XG5cbi8qIFNwZWNpYWwgQ29sb3IgU2VxdWVuY2VzICovXG5cbi8qKlxuICogQ2xhbSBhbmQgdHJ1bmNhdGUgY29sb3IgY29kZXNcbiAqIEBwYXJhbSBuXG4gKiBAcGFyYW0gbWF4IG51bWJlciB0byB0cnVuY2F0ZSB0b1xuICogQHBhcmFtIG1pbiBudW1iZXIgdG8gdHJ1bmNhdGUgZnJvbVxuICovXG5mdW5jdGlvbiBjbGFtcEFuZFRydW5jYXRlKG46IG51bWJlciwgbWF4ID0gMjU1LCBtaW4gPSAwKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgudHJ1bmMoTWF0aC5tYXgoTWF0aC5taW4obiwgbWF4KSwgbWluKSk7XG59XG5cbi8qKlxuICogU2V0IHRleHQgY29sb3IgdXNpbmcgcGFsZXR0ZWQgOGJpdCBjb2xvcnMuXG4gKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlIzgtYml0XG4gKiBAcGFyYW0gc3RyIHRleHQgY29sb3IgdG8gYXBwbHkgcGFsZXR0ZWQgOGJpdCBjb2xvcnMgdG9cbiAqIEBwYXJhbSBjb2xvciBjb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZ2I4KHN0cjogc3RyaW5nLCBjb2xvcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJ1bihzdHIsIGNvZGUoWzM4LCA1LCBjbGFtcEFuZFRydW5jYXRlKGNvbG9yKV0sIDM5KSk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdXNpbmcgcGFsZXR0ZWQgOGJpdCBjb2xvcnMuXG4gKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlIzgtYml0XG4gKiBAcGFyYW0gc3RyIHRleHQgY29sb3IgdG8gYXBwbHkgcGFsZXR0ZWQgOGJpdCBiYWNrZ3JvdW5kIGNvbG9ycyB0b1xuICogQHBhcmFtIGNvbG9yIGNvZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJnUmdiOChzdHI6IHN0cmluZywgY29sb3I6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBydW4oc3RyLCBjb2RlKFs0OCwgNSwgY2xhbXBBbmRUcnVuY2F0ZShjb2xvcildLCA0OSkpO1xufVxuXG4vKipcbiAqIFNldCB0ZXh0IGNvbG9yIHVzaW5nIDI0Yml0IHJnYi5cbiAqIGBjb2xvcmAgY2FuIGJlIGEgbnVtYmVyIGluIHJhbmdlIGAweDAwMDAwMGAgdG8gYDB4ZmZmZmZmYCBvclxuICogYW4gYFJnYmAuXG4gKlxuICogVG8gcHJvZHVjZSB0aGUgY29sb3IgbWFnZW50YTpcbiAqXG4gKiBgYGB0c1xuICogICAgICBpbXBvcnQgeyByZ2IyNCB9IGZyb20gXCIuL2NvbG9ycy50c1wiO1xuICogICAgICByZ2IyNChcImZvb1wiLCAweGZmMDBmZik7XG4gKiAgICAgIHJnYjI0KFwiZm9vXCIsIHtyOiAyNTUsIGc6IDAsIGI6IDI1NX0pO1xuICogYGBgXG4gKiBAcGFyYW0gc3RyIHRleHQgY29sb3IgdG8gYXBwbHkgMjRiaXQgcmdiIHRvXG4gKiBAcGFyYW0gY29sb3IgY29kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmdiMjQoc3RyOiBzdHJpbmcsIGNvbG9yOiBudW1iZXIgfCBSZ2IpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGNvbG9yID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIHJ1bihcbiAgICAgIHN0cixcbiAgICAgIGNvZGUoXG4gICAgICAgIFszOCwgMiwgKGNvbG9yID4+IDE2KSAmIDB4ZmYsIChjb2xvciA+PiA4KSAmIDB4ZmYsIGNvbG9yICYgMHhmZl0sXG4gICAgICAgIDM5LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBydW4oXG4gICAgc3RyLFxuICAgIGNvZGUoXG4gICAgICBbXG4gICAgICAgIDM4LFxuICAgICAgICAyLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLnIpLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmcpLFxuICAgICAgICBjbGFtcEFuZFRydW5jYXRlKGNvbG9yLmIpLFxuICAgICAgXSxcbiAgICAgIDM5LFxuICAgICksXG4gICk7XG59XG5cbi8qKlxuICogU2V0IGJhY2tncm91bmQgY29sb3IgdXNpbmcgMjRiaXQgcmdiLlxuICogYGNvbG9yYCBjYW4gYmUgYSBudW1iZXIgaW4gcmFuZ2UgYDB4MDAwMDAwYCB0byBgMHhmZmZmZmZgIG9yXG4gKiBhbiBgUmdiYC5cbiAqXG4gKiBUbyBwcm9kdWNlIHRoZSBjb2xvciBtYWdlbnRhOlxuICpcbiAqIGBgYHRzXG4gKiAgICAgIGltcG9ydCB7IGJnUmdiMjQgfSBmcm9tIFwiLi9jb2xvcnMudHNcIjtcbiAqICAgICAgYmdSZ2IyNChcImZvb1wiLCAweGZmMDBmZik7XG4gKiAgICAgIGJnUmdiMjQoXCJmb29cIiwge3I6IDI1NSwgZzogMCwgYjogMjU1fSk7XG4gKiBgYGBcbiAqIEBwYXJhbSBzdHIgdGV4dCBjb2xvciB0byBhcHBseSAyNGJpdCByZ2IgdG9cbiAqIEBwYXJhbSBjb2xvciBjb2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiZ1JnYjI0KHN0cjogc3RyaW5nLCBjb2xvcjogbnVtYmVyIHwgUmdiKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBjb2xvciA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBydW4oXG4gICAgICBzdHIsXG4gICAgICBjb2RlKFxuICAgICAgICBbNDgsIDIsIChjb2xvciA+PiAxNikgJiAweGZmLCAoY29sb3IgPj4gOCkgJiAweGZmLCBjb2xvciAmIDB4ZmZdLFxuICAgICAgICA0OSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcnVuKFxuICAgIHN0cixcbiAgICBjb2RlKFxuICAgICAgW1xuICAgICAgICA0OCxcbiAgICAgICAgMixcbiAgICAgICAgY2xhbXBBbmRUcnVuY2F0ZShjb2xvci5yKSxcbiAgICAgICAgY2xhbXBBbmRUcnVuY2F0ZShjb2xvci5nKSxcbiAgICAgICAgY2xhbXBBbmRUcnVuY2F0ZShjb2xvci5iKSxcbiAgICAgIF0sXG4gICAgICA0OSxcbiAgICApLFxuICApO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1yZWdleC9ibG9iLzAyZmE4OTNkNjE5ZDNkYTg1NDExYWNjOGZkNGUyZWVhMGU5NWE5ZDkvaW5kZXguanNcbmNvbnN0IEFOU0lfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXG4gIFtcbiAgICBcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNylcIixcbiAgICBcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkpXCIsXG4gIF0uam9pbihcInxcIiksXG4gIFwiZ1wiLFxuKTtcblxuLyoqXG4gKiBSZW1vdmUgQU5TSSBlc2NhcGUgY29kZXMgZnJvbSB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHN0cmluZyB0byByZW1vdmUgQU5TSSBlc2NhcGUgY29kZXMgZnJvbVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBDb2xvcihzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShBTlNJX1BBVFRFUk4sIFwiXCIpO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbi8qKiBBIGxpYnJhcnkgb2YgYXNzZXJ0aW9uIGZ1bmN0aW9ucy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUsIGJ1dCBkbyBub3QgcmVseSBvbiBnb29kIGZvcm1hdHRpbmcgb2ZcbiAqIHZhbHVlcyBmb3IgQXNzZXJ0aW9uRXJyb3IgbWVzc2FnZXMgaW4gYnJvd3NlcnMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHJlZCwgc3RyaXBDb2xvciB9IGZyb20gXCIuLi9mbXQvY29sb3JzLnRzXCI7XG5pbXBvcnQgeyBidWlsZE1lc3NhZ2UsIGRpZmYsIGRpZmZzdHIgfSBmcm9tIFwiLi9fZGlmZi50c1wiO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcIi4vX2Zvcm1hdC50c1wiO1xuXG5jb25zdCBDQU5fTk9UX0RJU1BMQVkgPSBcIltDYW5ub3QgZGlzcGxheV1cIjtcblxuZXhwb3J0IGNsYXNzIEFzc2VydGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBvdmVycmlkZSBuYW1lID0gXCJBc3NlcnRpb25FcnJvclwiO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0tleWVkQ29sbGVjdGlvbih4OiB1bmtub3duKTogeCBpcyBTZXQ8dW5rbm93bj4ge1xuICByZXR1cm4gW1N5bWJvbC5pdGVyYXRvciwgXCJzaXplXCJdLmV2ZXJ5KChrKSA9PiBrIGluICh4IGFzIFNldDx1bmtub3duPikpO1xufVxuXG4vKipcbiAqIERlZXAgZXF1YWxpdHkgY29tcGFyaXNvbiB1c2VkIGluIGFzc2VydGlvbnNcbiAqIEBwYXJhbSBjIGFjdHVhbCB2YWx1ZVxuICogQHBhcmFtIGQgZXhwZWN0ZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsKGM6IHVua25vd24sIGQ6IHVua25vd24pOiBib29sZWFuIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXAoKTtcbiAgcmV0dXJuIChmdW5jdGlvbiBjb21wYXJlKGE6IHVua25vd24sIGI6IHVua25vd24pOiBib29sZWFuIHtcbiAgICAvLyBIYXZlIHRvIHJlbmRlciBSZWdFeHAgJiBEYXRlIGZvciBzdHJpbmcgY29tcGFyaXNvblxuICAgIC8vIHVubGVzcyBpdCdzIG1pc3RyZWF0ZWQgYXMgb2JqZWN0XG4gICAgaWYgKFxuICAgICAgYSAmJlxuICAgICAgYiAmJlxuICAgICAgKChhIGluc3RhbmNlb2YgUmVnRXhwICYmIGIgaW5zdGFuY2VvZiBSZWdFeHApIHx8XG4gICAgICAgIChhIGluc3RhbmNlb2YgVVJMICYmIGIgaW5zdGFuY2VvZiBVUkwpKVxuICAgICkge1xuICAgICAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpO1xuICAgIH1cbiAgICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IGFUaW1lID0gYS5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiVGltZSA9IGIuZ2V0VGltZSgpO1xuICAgICAgLy8gQ2hlY2sgZm9yIE5hTiBlcXVhbGl0eSBtYW51YWxseSBzaW5jZSBOYU4gaXMgbm90XG4gICAgICAvLyBlcXVhbCB0byBpdHNlbGYuXG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKGFUaW1lKSAmJiBOdW1iZXIuaXNOYU4oYlRpbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFUaW1lID09PSBiVGltZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhID09PSBcIm51bWJlclwiICYmIHR5cGVvZiBiID09PSBcIm51bWJlclwiKSB7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKGEpICYmIE51bWJlci5pc05hTihiKSB8fCBhID09PSBiO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmlzKGEsIGIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGEgJiYgdHlwZW9mIGEgPT09IFwib2JqZWN0XCIgJiYgYiAmJiB0eXBlb2YgYiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWYgKGEgJiYgYiAmJiAhY29uc3RydWN0b3JzRXF1YWwoYSwgYikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGEgaW5zdGFuY2VvZiBXZWFrTWFwIHx8IGIgaW5zdGFuY2VvZiBXZWFrTWFwKSB7XG4gICAgICAgIGlmICghKGEgaW5zdGFuY2VvZiBXZWFrTWFwICYmIGIgaW5zdGFuY2VvZiBXZWFrTWFwKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2Fubm90IGNvbXBhcmUgV2Vha01hcCBpbnN0YW5jZXNcIik7XG4gICAgICB9XG4gICAgICBpZiAoYSBpbnN0YW5jZW9mIFdlYWtTZXQgfHwgYiBpbnN0YW5jZW9mIFdlYWtTZXQpIHtcbiAgICAgICAgaWYgKCEoYSBpbnN0YW5jZW9mIFdlYWtTZXQgJiYgYiBpbnN0YW5jZW9mIFdlYWtTZXQpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYW5ub3QgY29tcGFyZSBXZWFrU2V0IGluc3RhbmNlc1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWVuLmdldChhKSA9PT0gYikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhhIHx8IHt9KS5sZW5ndGggIT09IE9iamVjdC5rZXlzKGIgfHwge30pLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzZWVuLnNldChhLCBiKTtcbiAgICAgIGlmIChpc0tleWVkQ29sbGVjdGlvbihhKSAmJiBpc0tleWVkQ29sbGVjdGlvbihiKSkge1xuICAgICAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdW5tYXRjaGVkRW50cmllcyA9IGEuc2l6ZTtcblxuICAgICAgICBmb3IgKGNvbnN0IFthS2V5LCBhVmFsdWVdIG9mIGEuZW50cmllcygpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbYktleSwgYlZhbHVlXSBvZiBiLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgLyogR2l2ZW4gdGhhdCBNYXAga2V5cyBjYW4gYmUgcmVmZXJlbmNlcywgd2UgbmVlZFxuICAgICAgICAgICAgICogdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgYWxzbyBkZWVwbHkgZXF1YWwgKi9cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGFLZXkgPT09IGFWYWx1ZSAmJiBiS2V5ID09PSBiVmFsdWUgJiYgY29tcGFyZShhS2V5LCBiS2V5KSkgfHxcbiAgICAgICAgICAgICAgKGNvbXBhcmUoYUtleSwgYktleSkgJiYgY29tcGFyZShhVmFsdWUsIGJWYWx1ZSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdW5tYXRjaGVkRW50cmllcy0tO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5tYXRjaGVkRW50cmllcyA9PT0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1lcmdlZCA9IHsgLi4uYSwgLi4uYiB9O1xuICAgICAgZm9yIChcbiAgICAgICAgY29uc3Qga2V5IG9mIFtcbiAgICAgICAgICAuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtZXJnZWQpLFxuICAgICAgICAgIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobWVyZ2VkKSxcbiAgICAgICAgXVxuICAgICAgKSB7XG4gICAgICAgIHR5cGUgS2V5ID0ga2V5b2YgdHlwZW9mIG1lcmdlZDtcbiAgICAgICAgaWYgKCFjb21wYXJlKGEgJiYgYVtrZXkgYXMgS2V5XSwgYiAmJiBiW2tleSBhcyBLZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKChrZXkgaW4gYSkgJiYgKCEoa2V5IGluIGIpKSkgfHwgKChrZXkgaW4gYikgJiYgKCEoa2V5IGluIGEpKSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhIGluc3RhbmNlb2YgV2Vha1JlZiB8fCBiIGluc3RhbmNlb2YgV2Vha1JlZikge1xuICAgICAgICBpZiAoIShhIGluc3RhbmNlb2YgV2Vha1JlZiAmJiBiIGluc3RhbmNlb2YgV2Vha1JlZikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmUoYS5kZXJlZigpLCBiLmRlcmVmKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSkoYywgZCk7XG59XG5cbi8vIGRlbm8tbGludC1pZ25vcmUgYmFuLXR5cGVzXG5mdW5jdGlvbiBjb25zdHJ1Y3RvcnNFcXVhbChhOiBvYmplY3QsIGI6IG9iamVjdCkge1xuICByZXR1cm4gYS5jb25zdHJ1Y3RvciA9PT0gYi5jb25zdHJ1Y3RvciB8fFxuICAgIGEuY29uc3RydWN0b3IgPT09IE9iamVjdCAmJiAhYi5jb25zdHJ1Y3RvciB8fFxuICAgICFhLmNvbnN0cnVjdG9yICYmIGIuY29uc3RydWN0b3IgPT09IE9iamVjdDtcbn1cblxuLyoqIE1ha2UgYW4gYXNzZXJ0aW9uLCBlcnJvciB3aWxsIGJlIHRocm93biBpZiBgZXhwcmAgZG9lcyBub3QgaGF2ZSB0cnV0aHkgdmFsdWUuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGV4cHI6IHVua25vd24sIG1zZyA9IFwiXCIpOiBhc3NlcnRzIGV4cHIge1xuICBpZiAoIWV4cHIpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnKTtcbiAgfVxufVxuXG4vKiogTWFrZSBhbiBhc3NlcnRpb24sIGVycm9yIHdpbGwgYmUgdGhyb3duIGlmIGBleHByYCBoYXZlIHRydXRoeSB2YWx1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRGYWxzZShleHByOiB1bmtub3duLCBtc2cgPSBcIlwiKTogYXNzZXJ0cyBleHByIGlzIGZhbHNlIHtcbiAgaWYgKGV4cHIpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnKTtcbiAgfVxufVxuXG4vKipcbiAqIE1ha2UgYW4gYXNzZXJ0aW9uIHRoYXQgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAgYXJlIGVxdWFsLCBkZWVwbHkuIElmIG5vdFxuICogZGVlcGx5IGVxdWFsLCB0aGVuIHRocm93LlxuICpcbiAqIFR5cGUgcGFyYW1ldGVyIGNhbiBiZSBzcGVjaWZpZWQgdG8gZW5zdXJlIHZhbHVlcyB1bmRlciBjb21wYXJpc29uIGhhdmUgdGhlIHNhbWUgdHlwZS5cbiAqIEZvciBleGFtcGxlOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGFzc2VydEVxdWFscyB9IGZyb20gXCIuL2Fzc2VydHMudHNcIjtcbiAqXG4gKiBhc3NlcnRFcXVhbHM8bnVtYmVyPigxLCAyKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFcXVhbHM8VD4oYWN0dWFsOiBULCBleHBlY3RlZDogVCwgbXNnPzogc3RyaW5nKSB7XG4gIGlmIChlcXVhbChhY3R1YWwsIGV4cGVjdGVkKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgbWVzc2FnZSA9IFwiXCI7XG4gIGNvbnN0IGFjdHVhbFN0cmluZyA9IGZvcm1hdChhY3R1YWwpO1xuICBjb25zdCBleHBlY3RlZFN0cmluZyA9IGZvcm1hdChleHBlY3RlZCk7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RyaW5nRGlmZiA9ICh0eXBlb2YgYWN0dWFsID09PSBcInN0cmluZ1wiKSAmJlxuICAgICAgKHR5cGVvZiBleHBlY3RlZCA9PT0gXCJzdHJpbmdcIik7XG4gICAgY29uc3QgZGlmZlJlc3VsdCA9IHN0cmluZ0RpZmZcbiAgICAgID8gZGlmZnN0cihhY3R1YWwgYXMgc3RyaW5nLCBleHBlY3RlZCBhcyBzdHJpbmcpXG4gICAgICA6IGRpZmYoYWN0dWFsU3RyaW5nLnNwbGl0KFwiXFxuXCIpLCBleHBlY3RlZFN0cmluZy5zcGxpdChcIlxcblwiKSk7XG4gICAgY29uc3QgZGlmZk1zZyA9IGJ1aWxkTWVzc2FnZShkaWZmUmVzdWx0LCB7IHN0cmluZ0RpZmYgfSkuam9pbihcIlxcblwiKTtcbiAgICBtZXNzYWdlID0gYFZhbHVlcyBhcmUgbm90IGVxdWFsOlxcbiR7ZGlmZk1zZ31gO1xuICB9IGNhdGNoIHtcbiAgICBtZXNzYWdlID0gYFxcbiR7cmVkKENBTl9OT1RfRElTUExBWSl9ICsgXFxuXFxuYDtcbiAgfVxuICBpZiAobXNnKSB7XG4gICAgbWVzc2FnZSA9IG1zZztcbiAgfVxuICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSk7XG59XG5cbi8qKlxuICogTWFrZSBhbiBhc3NlcnRpb24gdGhhdCBgYWN0dWFsYCBhbmQgYGV4cGVjdGVkYCBhcmUgbm90IGVxdWFsLCBkZWVwbHkuXG4gKiBJZiBub3QgdGhlbiB0aHJvdy5cbiAqXG4gKiBUeXBlIHBhcmFtZXRlciBjYW4gYmUgc3BlY2lmaWVkIHRvIGVuc3VyZSB2YWx1ZXMgdW5kZXIgY29tcGFyaXNvbiBoYXZlIHRoZSBzYW1lIHR5cGUuXG4gKiBGb3IgZXhhbXBsZTpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBhc3NlcnROb3RFcXVhbHMgfSBmcm9tIFwiLi9hc3NlcnRzLnRzXCI7XG4gKlxuICogYXNzZXJ0Tm90RXF1YWxzPG51bWJlcj4oMSwgMilcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm90RXF1YWxzPFQ+KGFjdHVhbDogVCwgZXhwZWN0ZWQ6IFQsIG1zZz86IHN0cmluZykge1xuICBpZiAoIWVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBhY3R1YWxTdHJpbmc6IHN0cmluZztcbiAgbGV0IGV4cGVjdGVkU3RyaW5nOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgYWN0dWFsU3RyaW5nID0gU3RyaW5nKGFjdHVhbCk7XG4gIH0gY2F0Y2gge1xuICAgIGFjdHVhbFN0cmluZyA9IFwiW0Nhbm5vdCBkaXNwbGF5XVwiO1xuICB9XG4gIHRyeSB7XG4gICAgZXhwZWN0ZWRTdHJpbmcgPSBTdHJpbmcoZXhwZWN0ZWQpO1xuICB9IGNhdGNoIHtcbiAgICBleHBlY3RlZFN0cmluZyA9IFwiW0Nhbm5vdCBkaXNwbGF5XVwiO1xuICB9XG4gIGlmICghbXNnKSB7XG4gICAgbXNnID0gYGFjdHVhbDogJHthY3R1YWxTdHJpbmd9IGV4cGVjdGVkIG5vdCB0byBiZTogJHtleHBlY3RlZFN0cmluZ31gO1xuICB9XG4gIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2cpO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gYXNzZXJ0aW9uIHRoYXQgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAgYXJlIHN0cmljdGx5IGVxdWFsLiBJZlxuICogbm90IHRoZW4gdGhyb3cuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGFzc2VydFN0cmljdEVxdWFscyB9IGZyb20gXCIuL2Fzc2VydHMudHNcIjtcbiAqXG4gKiBhc3NlcnRTdHJpY3RFcXVhbHMoMSwgMilcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U3RyaWN0RXF1YWxzPFQ+KFxuICBhY3R1YWw6IHVua25vd24sXG4gIGV4cGVjdGVkOiBULFxuICBtc2c/OiBzdHJpbmcsXG4pOiBhc3NlcnRzIGFjdHVhbCBpcyBUIHtcbiAgaWYgKE9iamVjdC5pcyhhY3R1YWwsIGV4cGVjdGVkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgaWYgKG1zZykge1xuICAgIG1lc3NhZ2UgPSBtc2c7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYWN0dWFsU3RyaW5nID0gZm9ybWF0KGFjdHVhbCk7XG4gICAgY29uc3QgZXhwZWN0ZWRTdHJpbmcgPSBmb3JtYXQoZXhwZWN0ZWQpO1xuXG4gICAgaWYgKGFjdHVhbFN0cmluZyA9PT0gZXhwZWN0ZWRTdHJpbmcpIHtcbiAgICAgIGNvbnN0IHdpdGhPZmZzZXQgPSBhY3R1YWxTdHJpbmdcbiAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgIC5tYXAoKGwpID0+IGAgICAgJHtsfWApXG4gICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgICAgbWVzc2FnZSA9XG4gICAgICAgIGBWYWx1ZXMgaGF2ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgYnV0IGFyZSBub3QgcmVmZXJlbmNlLWVxdWFsOlxcblxcbiR7XG4gICAgICAgICAgcmVkKHdpdGhPZmZzZXQpXG4gICAgICAgIH1cXG5gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdHJpbmdEaWZmID0gKHR5cGVvZiBhY3R1YWwgPT09IFwic3RyaW5nXCIpICYmXG4gICAgICAgICAgKHR5cGVvZiBleHBlY3RlZCA9PT0gXCJzdHJpbmdcIik7XG4gICAgICAgIGNvbnN0IGRpZmZSZXN1bHQgPSBzdHJpbmdEaWZmXG4gICAgICAgICAgPyBkaWZmc3RyKGFjdHVhbCBhcyBzdHJpbmcsIGV4cGVjdGVkIGFzIHN0cmluZylcbiAgICAgICAgICA6IGRpZmYoYWN0dWFsU3RyaW5nLnNwbGl0KFwiXFxuXCIpLCBleHBlY3RlZFN0cmluZy5zcGxpdChcIlxcblwiKSk7XG4gICAgICAgIGNvbnN0IGRpZmZNc2cgPSBidWlsZE1lc3NhZ2UoZGlmZlJlc3VsdCwgeyBzdHJpbmdEaWZmIH0pLmpvaW4oXCJcXG5cIik7XG4gICAgICAgIG1lc3NhZ2UgPSBgVmFsdWVzIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWw6XFxuJHtkaWZmTXNnfWA7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbWVzc2FnZSA9IGBcXG4ke3JlZChDQU5fTk9UX0RJU1BMQVkpfSArIFxcblxcbmA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gYXNzZXJ0aW9uIHRoYXQgYGFjdHVhbGAgYW5kIGBleHBlY3RlZGAgYXJlIG5vdCBzdHJpY3RseSBlcXVhbC5cbiAqIElmIHRoZSB2YWx1ZXMgYXJlIHN0cmljdGx5IGVxdWFsIHRoZW4gdGhyb3cuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGFzc2VydE5vdFN0cmljdEVxdWFscyB9IGZyb20gXCIuL2Fzc2VydHMudHNcIjtcbiAqXG4gKiBhc3NlcnROb3RTdHJpY3RFcXVhbHMoMSwgMSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm90U3RyaWN0RXF1YWxzPFQ+KFxuICBhY3R1YWw6IFQsXG4gIGV4cGVjdGVkOiBULFxuICBtc2c/OiBzdHJpbmcsXG4pIHtcbiAgaWYgKCFPYmplY3QuaXMoYWN0dWFsLCBleHBlY3RlZCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgbXNnID8/IGBFeHBlY3RlZCBcImFjdHVhbFwiIHRvIGJlIHN0cmljdGx5IHVuZXF1YWwgdG86ICR7Zm9ybWF0KGFjdHVhbCl9XFxuYCxcbiAgKTtcbn1cblxuLyoqXG4gKiBNYWtlIGFuIGFzc2VydGlvbiB0aGF0IGBhY3R1YWxgIGFuZCBgZXhwZWN0ZWRgIGFyZSBhbG1vc3QgZXF1YWwgbnVtYmVycyB0aHJvdWdoXG4gKiBhIGdpdmVuIHRvbGVyYW5jZS4gSXQgY2FuIGJlIHVzZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgSUVFRS03NTQgZG91YmxlLXByZWNpc2lvblxuICogZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gbGltaXRhdGlvbnMuXG4gKiBJZiB0aGUgdmFsdWVzIGFyZSBub3QgYWxtb3N0IGVxdWFsIHRoZW4gdGhyb3cuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGFzc2VydEFsbW9zdEVxdWFscywgYXNzZXJ0VGhyb3dzIH0gZnJvbSBcIi4vYXNzZXJ0cy50c1wiO1xuICpcbiAqIGFzc2VydEFsbW9zdEVxdWFscygwLjEsIDAuMik7XG4gKlxuICogLy8gVXNpbmcgYSBjdXN0b20gdG9sZXJhbmNlIHZhbHVlXG4gKiBhc3NlcnRBbG1vc3RFcXVhbHMoMC4xICsgMC4yLCAwLjMsIDFlLTE2KTtcbiAqIGFzc2VydFRocm93cygoKSA9PiBhc3NlcnRBbG1vc3RFcXVhbHMoMC4xICsgMC4yLCAwLjMsIDFlLTE3KSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFsbW9zdEVxdWFscyhcbiAgYWN0dWFsOiBudW1iZXIsXG4gIGV4cGVjdGVkOiBudW1iZXIsXG4gIHRvbGVyYW5jZSA9IDFlLTcsXG4gIG1zZz86IHN0cmluZyxcbikge1xuICBpZiAoT2JqZWN0LmlzKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGRlbHRhID0gTWF0aC5hYnMoZXhwZWN0ZWQgLSBhY3R1YWwpO1xuICBpZiAoZGVsdGEgPD0gdG9sZXJhbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGYgPSAobjogbnVtYmVyKSA9PiBOdW1iZXIuaXNJbnRlZ2VyKG4pID8gbiA6IG4udG9FeHBvbmVudGlhbCgpO1xuICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgbXNnID8/XG4gICAgICBgYWN0dWFsOiBcIiR7ZihhY3R1YWwpfVwiIGV4cGVjdGVkIHRvIGJlIGNsb3NlIHRvIFwiJHtmKGV4cGVjdGVkKX1cIjogXFxcbmRlbHRhIFwiJHtmKGRlbHRhKX1cIiBpcyBncmVhdGVyIHRoYW4gXCIke2YodG9sZXJhbmNlKX1cImAsXG4gICk7XG59XG5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG50eXBlIEFueUNvbnN0cnVjdG9yID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xudHlwZSBHZXRDb25zdHJ1Y3RvclR5cGU8VCBleHRlbmRzIEFueUNvbnN0cnVjdG9yPiA9IFQgZXh0ZW5kcyAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxubmV3ICguLi5hcmdzOiBhbnkpID0+IGluZmVyIEMgPyBDXG4gIDogbmV2ZXI7XG5cbi8qKlxuICogTWFrZSBhbiBhc3NlcnRpb24gdGhhdCBgb2JqYCBpcyBhbiBpbnN0YW5jZSBvZiBgdHlwZWAuXG4gKiBJZiBub3QgdGhlbiB0aHJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEluc3RhbmNlT2Y8VCBleHRlbmRzIEFueUNvbnN0cnVjdG9yPihcbiAgYWN0dWFsOiB1bmtub3duLFxuICBleHBlY3RlZFR5cGU6IFQsXG4gIG1zZyA9IFwiXCIsXG4pOiBhc3NlcnRzIGFjdHVhbCBpcyBHZXRDb25zdHJ1Y3RvclR5cGU8VD4ge1xuICBpZiAoIW1zZykge1xuICAgIGNvbnN0IGV4cGVjdGVkVHlwZVN0ciA9IGV4cGVjdGVkVHlwZS5uYW1lO1xuXG4gICAgbGV0IGFjdHVhbFR5cGVTdHIgPSBcIlwiO1xuICAgIGlmIChhY3R1YWwgPT09IG51bGwpIHtcbiAgICAgIGFjdHVhbFR5cGVTdHIgPSBcIm51bGxcIjtcbiAgICB9IGVsc2UgaWYgKGFjdHVhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhY3R1YWxUeXBlU3RyID0gXCJ1bmRlZmluZWRcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhY3R1YWwgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGFjdHVhbFR5cGVTdHIgPSBhY3R1YWwuY29uc3RydWN0b3I/Lm5hbWUgPz8gXCJPYmplY3RcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0dWFsVHlwZVN0ciA9IHR5cGVvZiBhY3R1YWw7XG4gICAgfVxuXG4gICAgaWYgKGV4cGVjdGVkVHlwZVN0ciA9PSBhY3R1YWxUeXBlU3RyKSB7XG4gICAgICBtc2cgPSBgRXhwZWN0ZWQgb2JqZWN0IHRvIGJlIGFuIGluc3RhbmNlIG9mIFwiJHtleHBlY3RlZFR5cGVTdHJ9XCIuYDtcbiAgICB9IGVsc2UgaWYgKGFjdHVhbFR5cGVTdHIgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBtc2cgPVxuICAgICAgICBgRXhwZWN0ZWQgb2JqZWN0IHRvIGJlIGFuIGluc3RhbmNlIG9mIFwiJHtleHBlY3RlZFR5cGVTdHJ9XCIgYnV0IHdhcyBub3QgYW4gaW5zdGFuY2VkIG9iamVjdC5gO1xuICAgIH0gZWxzZSB7XG4gICAgICBtc2cgPVxuICAgICAgICBgRXhwZWN0ZWQgb2JqZWN0IHRvIGJlIGFuIGluc3RhbmNlIG9mIFwiJHtleHBlY3RlZFR5cGVTdHJ9XCIgYnV0IHdhcyBcIiR7YWN0dWFsVHlwZVN0cn1cIi5gO1xuICAgIH1cbiAgfVxuICBhc3NlcnQoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWRUeXBlLCBtc2cpO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gYXNzZXJ0aW9uIHRoYXQgYG9iamAgaXMgbm90IGFuIGluc3RhbmNlIG9mIGB0eXBlYC5cbiAqIElmIHNvLCB0aGVuIHRocm93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm90SW5zdGFuY2VPZjxUIGV4dGVuZHMgQW55Q29uc3RydWN0b3I+KFxuICBhY3R1YWw6IHVua25vd24sXG4gIHVuZXhwZWN0ZWRUeXBlOiBULFxuICBtc2cgPSBgRXhwZWN0ZWQgb2JqZWN0IHRvIG5vdCBiZSBhbiBpbnN0YW5jZSBvZiBcIiR7dHlwZW9mIHVuZXhwZWN0ZWRUeXBlfVwiYCxcbikge1xuICBhc3NlcnRGYWxzZShhY3R1YWwgaW5zdGFuY2VvZiB1bmV4cGVjdGVkVHlwZSwgbXNnKTtcbn1cblxuLyoqXG4gKiBNYWtlIGFuIGFzc2VydGlvbiB0aGF0IGFjdHVhbCBpcyBub3QgbnVsbCBvciB1bmRlZmluZWQuXG4gKiBJZiBub3QgdGhlbiB0aHJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEV4aXN0czxUPihcbiAgYWN0dWFsOiBULFxuICBtc2c/OiBzdHJpbmcsXG4pOiBhc3NlcnRzIGFjdHVhbCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gIGlmIChhY3R1YWwgPT09IHVuZGVmaW5lZCB8fCBhY3R1YWwgPT09IG51bGwpIHtcbiAgICBpZiAoIW1zZykge1xuICAgICAgbXNnID0gYGFjdHVhbDogXCIke2FjdHVhbH1cIiBleHBlY3RlZCB0byBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRgO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnKTtcbiAgfVxufVxuXG4vKipcbiAqIE1ha2UgYW4gYXNzZXJ0aW9uIHRoYXQgYWN0dWFsIGluY2x1ZGVzIGV4cGVjdGVkLiBJZiBub3RcbiAqIHRoZW4gdGhyb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRTdHJpbmdJbmNsdWRlcyhcbiAgYWN0dWFsOiBzdHJpbmcsXG4gIGV4cGVjdGVkOiBzdHJpbmcsXG4gIG1zZz86IHN0cmluZyxcbikge1xuICBpZiAoIWFjdHVhbC5pbmNsdWRlcyhleHBlY3RlZCkpIHtcbiAgICBpZiAoIW1zZykge1xuICAgICAgbXNnID0gYGFjdHVhbDogXCIke2FjdHVhbH1cIiBleHBlY3RlZCB0byBjb250YWluOiBcIiR7ZXhwZWN0ZWR9XCJgO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnKTtcbiAgfVxufVxuXG4vKipcbiAqIE1ha2UgYW4gYXNzZXJ0aW9uIHRoYXQgYGFjdHVhbGAgaW5jbHVkZXMgdGhlIGBleHBlY3RlZGAgdmFsdWVzLlxuICogSWYgbm90IHRoZW4gYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKlxuICogVHlwZSBwYXJhbWV0ZXIgY2FuIGJlIHNwZWNpZmllZCB0byBlbnN1cmUgdmFsdWVzIHVuZGVyIGNvbXBhcmlzb24gaGF2ZSB0aGUgc2FtZSB0eXBlLlxuICogRm9yIGV4YW1wbGU6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGFzc2VydEFycmF5SW5jbHVkZXMgfSBmcm9tIFwiLi9hc3NlcnRzLnRzXCI7XG4gKlxuICogYXNzZXJ0QXJyYXlJbmNsdWRlczxudW1iZXI+KFsxLCAyXSwgWzJdKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRBcnJheUluY2x1ZGVzPFQ+KFxuICBhY3R1YWw6IEFycmF5TGlrZTxUPixcbiAgZXhwZWN0ZWQ6IEFycmF5TGlrZTxUPixcbiAgbXNnPzogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IG1pc3Npbmc6IHVua25vd25bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBhY3R1YWwubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChlcXVhbChleHBlY3RlZFtpXSwgYWN0dWFsW2pdKSkge1xuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICBtaXNzaW5nLnB1c2goZXhwZWN0ZWRbaV0pO1xuICAgIH1cbiAgfVxuICBpZiAobWlzc2luZy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFtc2cpIHtcbiAgICBtc2cgPSBgYWN0dWFsOiBcIiR7Zm9ybWF0KGFjdHVhbCl9XCIgZXhwZWN0ZWQgdG8gaW5jbHVkZTogXCIke1xuICAgICAgZm9ybWF0KGV4cGVjdGVkKVxuICAgIH1cIlxcbm1pc3Npbmc6ICR7Zm9ybWF0KG1pc3NpbmcpfWA7XG4gIH1cbiAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZyk7XG59XG5cbi8qKlxuICogTWFrZSBhbiBhc3NlcnRpb24gdGhhdCBgYWN0dWFsYCBtYXRjaCBSZWdFeHAgYGV4cGVjdGVkYC4gSWYgbm90XG4gKiB0aGVuIHRocm93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0TWF0Y2goXG4gIGFjdHVhbDogc3RyaW5nLFxuICBleHBlY3RlZDogUmVnRXhwLFxuICBtc2c/OiBzdHJpbmcsXG4pIHtcbiAgaWYgKCFleHBlY3RlZC50ZXN0KGFjdHVhbCkpIHtcbiAgICBpZiAoIW1zZykge1xuICAgICAgbXNnID0gYGFjdHVhbDogXCIke2FjdHVhbH1cIiBleHBlY3RlZCB0byBtYXRjaDogXCIke2V4cGVjdGVkfVwiYDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYWtlIGFuIGFzc2VydGlvbiB0aGF0IGBhY3R1YWxgIG5vdCBtYXRjaCBSZWdFeHAgYGV4cGVjdGVkYC4gSWYgbWF0Y2hcbiAqIHRoZW4gdGhyb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb3RNYXRjaChcbiAgYWN0dWFsOiBzdHJpbmcsXG4gIGV4cGVjdGVkOiBSZWdFeHAsXG4gIG1zZz86IHN0cmluZyxcbikge1xuICBpZiAoZXhwZWN0ZWQudGVzdChhY3R1YWwpKSB7XG4gICAgaWYgKCFtc2cpIHtcbiAgICAgIG1zZyA9IGBhY3R1YWw6IFwiJHthY3R1YWx9XCIgZXhwZWN0ZWQgdG8gbm90IG1hdGNoOiBcIiR7ZXhwZWN0ZWR9XCJgO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnKTtcbiAgfVxufVxuXG4vKipcbiAqIE1ha2UgYW4gYXNzZXJ0aW9uIHRoYXQgYGFjdHVhbGAgb2JqZWN0IGlzIGEgc3Vic2V0IG9mIGBleHBlY3RlZGAgb2JqZWN0LCBkZWVwbHkuXG4gKiBJZiBub3QsIHRoZW4gdGhyb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRPYmplY3RNYXRjaChcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgYWN0dWFsOiBSZWNvcmQ8UHJvcGVydHlLZXksIGFueT4sXG4gIGV4cGVjdGVkOiBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+LFxuKSB7XG4gIHR5cGUgbG9vc2UgPSBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+O1xuXG4gIGZ1bmN0aW9uIGZpbHRlcihhOiBsb29zZSwgYjogbG9vc2UpIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtNYXAoKTtcbiAgICByZXR1cm4gZm4oYSwgYik7XG5cbiAgICBmdW5jdGlvbiBmbihhOiBsb29zZSwgYjogbG9vc2UpOiBsb29zZSB7XG4gICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3Agd2l0aCBjaXJjdWxhciByZWZlcmVuY2VzIHdpdGggc2FtZSBmaWx0ZXJcbiAgICAgIGlmICgoc2Vlbi5oYXMoYSkpICYmIChzZWVuLmdldChhKSA9PT0gYikpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG4gICAgICBzZWVuLnNldChhLCBiKTtcbiAgICAgIC8vIEZpbHRlciBrZXlzIGFuZCBzeW1ib2xzIHdoaWNoIGFyZSBwcmVzZW50IGluIGJvdGggYWN0dWFsIGFuZCBleHBlY3RlZFxuICAgICAgY29uc3QgZmlsdGVyZWQgPSB7fSBhcyBsb29zZTtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXG4gICAgICAgIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLFxuICAgICAgICAuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGEpLFxuICAgICAgXVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSBpbiBiKVxuICAgICAgICAubWFwKChrZXkpID0+IFtrZXksIGFba2V5IGFzIHN0cmluZ11dKSBhcyBBcnJheTxbc3RyaW5nLCB1bmtub3duXT47XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIC8vIE9uIGFycmF5IHJlZmVyZW5jZXMsIGJ1aWxkIGEgZmlsdGVyZWQgYXJyYXkgYW5kIGZpbHRlciBuZXN0ZWQgb2JqZWN0cyBpbnNpZGVcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3Qgc3Vic2V0ID0gKGIgYXMgbG9vc2UpW2tleV07XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3Vic2V0KSkge1xuICAgICAgICAgICAgZmlsdGVyZWRba2V5XSA9IGZuKHsgLi4udmFsdWUgfSwgeyAuLi5zdWJzZXQgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gT24gcmVnZXhwIHJlZmVyZW5jZXMsIGtlZXAgdmFsdWUgYXMgaXQgdG8gYXZvaWQgbG9vc2luZyBwYXR0ZXJuIGFuZCBmbGFnc1xuICAgICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgIGZpbHRlcmVkW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBPbiBuZXN0ZWQgb2JqZWN0cyByZWZlcmVuY2VzLCBidWlsZCBhIGZpbHRlcmVkIG9iamVjdCByZWN1cnNpdmVseVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICBjb25zdCBzdWJzZXQgPSAoYiBhcyBsb29zZSlba2V5XTtcbiAgICAgICAgICBpZiAoKHR5cGVvZiBzdWJzZXQgPT09IFwib2JqZWN0XCIpICYmIChzdWJzZXQpKSB7XG4gICAgICAgICAgICAvLyBXaGVuIGJvdGggb3BlcmFuZHMgYXJlIG1hcHMsIGJ1aWxkIGEgZmlsdGVyZWQgbWFwIHdpdGggY29tbW9uIGtleXMgYW5kIGZpbHRlciBuZXN0ZWQgb2JqZWN0cyBpbnNpZGVcbiAgICAgICAgICAgIGlmICgodmFsdWUgaW5zdGFuY2VvZiBNYXApICYmIChzdWJzZXQgaW5zdGFuY2VvZiBNYXApKSB7XG4gICAgICAgICAgICAgIGZpbHRlcmVkW2tleV0gPSBuZXcgTWFwKFxuICAgICAgICAgICAgICAgIFsuLi52YWx1ZV0uZmlsdGVyKChba10pID0+IHN1YnNldC5oYXMoaykpLm1hcCgoXG4gICAgICAgICAgICAgICAgICBbaywgdl0sXG4gICAgICAgICAgICAgICAgKSA9PiBbaywgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgPyBmbih2LCBzdWJzZXQuZ2V0KGspKSA6IHZdKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaGVuIGJvdGggb3BlcmFuZHMgYXJlIHNldCwgYnVpbGQgYSBmaWx0ZXJlZCBzZXQgd2l0aCBjb21tb24gdmFsdWVzXG4gICAgICAgICAgICBpZiAoKHZhbHVlIGluc3RhbmNlb2YgU2V0KSAmJiAoc3Vic2V0IGluc3RhbmNlb2YgU2V0KSkge1xuICAgICAgICAgICAgICBmaWx0ZXJlZFtrZXldID0gbmV3IFNldChbLi4udmFsdWVdLmZpbHRlcigodikgPT4gc3Vic2V0Lmhhcyh2KSkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbHRlcmVkW2tleV0gPSBmbih2YWx1ZSBhcyBsb29zZSwgc3Vic2V0IGFzIGxvb3NlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaWx0ZXJlZFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBhc3NlcnRFcXVhbHMoXG4gICAgLy8gZ2V0IHRoZSBpbnRlcnNlY3Rpb24gb2YgXCJhY3R1YWxcIiBhbmQgXCJleHBlY3RlZFwiXG4gICAgLy8gc2lkZSBlZmZlY3Q6IGFsbCB0aGUgaW5zdGFuY2VzJyBjb25zdHJ1Y3RvciBmaWVsZCBpcyBcIk9iamVjdFwiIG5vdy5cbiAgICBmaWx0ZXIoYWN0dWFsLCBleHBlY3RlZCksXG4gICAgLy8gc2V0IChuZXN0ZWQpIGluc3RhbmNlcycgY29uc3RydWN0b3IgZmllbGQgdG8gYmUgXCJPYmplY3RcIiB3aXRob3V0IGNoYW5naW5nIGV4cGVjdGVkIHZhbHVlLlxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVub19zdGQvcHVsbC8xNDE5XG4gICAgZmlsdGVyKGV4cGVjdGVkLCBleHBlY3RlZCksXG4gICk7XG59XG5cbi8qKlxuICogRm9yY2VmdWxseSB0aHJvd3MgYSBmYWlsZWQgYXNzZXJ0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWlsKG1zZz86IHN0cmluZyk6IG5ldmVyIHtcbiAgYXNzZXJ0KGZhbHNlLCBgRmFpbGVkIGFzc2VydGlvbiR7bXNnID8gYDogJHttc2d9YCA6IFwiLlwifWApO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gYXNzZXJ0aW9uIHRoYXQgYGVycm9yYCBpcyBhbiBgRXJyb3JgLlxuICogSWYgbm90IHRoZW4gYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKiBBbiBlcnJvciBjbGFzcyBhbmQgYSBzdHJpbmcgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlXG4gKiBlcnJvciBtZXNzYWdlIGNhbiBhbHNvIGJlIGFzc2VydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXNFcnJvcjxFIGV4dGVuZHMgRXJyb3IgPSBFcnJvcj4oXG4gIGVycm9yOiB1bmtub3duLFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBFcnJvckNsYXNzPzogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gRSxcbiAgbXNnSW5jbHVkZXM/OiBzdHJpbmcsXG4gIG1zZz86IHN0cmluZyxcbik6IGFzc2VydHMgZXJyb3IgaXMgRSB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yID09PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihgRXhwZWN0ZWQgXCJlcnJvclwiIHRvIGJlIGFuIEVycm9yIG9iamVjdC5gKTtcbiAgfVxuICBpZiAoRXJyb3JDbGFzcyAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3JDbGFzcykpIHtcbiAgICBtc2cgPSBgRXhwZWN0ZWQgZXJyb3IgdG8gYmUgaW5zdGFuY2Ugb2YgXCIke0Vycm9yQ2xhc3MubmFtZX1cIiwgYnV0IHdhcyBcIiR7XG4gICAgICB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgPyBlcnJvcj8uY29uc3RydWN0b3I/Lm5hbWUgOiBcIltub3QgYW4gb2JqZWN0XVwiXG4gICAgfVwiJHttc2cgPyBgOiAke21zZ31gIDogXCIuXCJ9YDtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnKTtcbiAgfVxuICBpZiAoXG4gICAgbXNnSW5jbHVkZXMgJiYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgfHxcbiAgICAgICFzdHJpcENvbG9yKGVycm9yLm1lc3NhZ2UpLmluY2x1ZGVzKHN0cmlwQ29sb3IobXNnSW5jbHVkZXMpKSlcbiAgKSB7XG4gICAgbXNnID0gYEV4cGVjdGVkIGVycm9yIG1lc3NhZ2UgdG8gaW5jbHVkZSBcIiR7bXNnSW5jbHVkZXN9XCIsIGJ1dCBnb3QgXCIke1xuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIltub3QgYW4gRXJyb3JdXCJcbiAgICB9XCIke21zZyA/IGA6ICR7bXNnfWAgOiBcIi5cIn1gO1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtc2cpO1xuICB9XG59XG5cbi8qKiBFeGVjdXRlcyBhIGZ1bmN0aW9uLCBleHBlY3RpbmcgaXQgdG8gdGhyb3cuIElmIGl0IGRvZXMgbm90LCB0aGVuIGl0XG4gKiB0aHJvd3MuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VGhyb3dzKFxuICBmbjogKCkgPT4gdW5rbm93bixcbiAgbXNnPzogc3RyaW5nLFxuKTogdW5rbm93bjtcbi8qKiBFeGVjdXRlcyBhIGZ1bmN0aW9uLCBleHBlY3RpbmcgaXQgdG8gdGhyb3cuIElmIGl0IGRvZXMgbm90LCB0aGVuIGl0XG4gKiB0aHJvd3MuIEFuIGVycm9yIGNsYXNzIGFuZCBhIHN0cmluZyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGVcbiAqIGVycm9yIG1lc3NhZ2UgY2FuIGFsc28gYmUgYXNzZXJ0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VGhyb3dzPEUgZXh0ZW5kcyBFcnJvciA9IEVycm9yPihcbiAgZm46ICgpID0+IHVua25vd24sXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIEVycm9yQ2xhc3M6IG5ldyAoLi4uYXJnczogYW55W10pID0+IEUsXG4gIG1zZ0luY2x1ZGVzPzogc3RyaW5nLFxuICBtc2c/OiBzdHJpbmcsXG4pOiBFO1xuLyoqIEBkZXByZWNhdGVkIFVzZSBhc3NlcnRUaHJvd3MoZm4sIG1zZykgaW5zdGVhZCwgd2hpY2ggbm93IHJldHVybnMgdGhyb3duXG4gKiB2YWx1ZSBhbmQgeW91IGNhbiBhc3NlcnQgb24gaXQuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VGhyb3dzKFxuICBmbjogKCkgPT4gdW5rbm93bixcbiAgZXJyb3JDYWxsYmFjazogKGU6IEVycm9yKSA9PiB1bmtub3duLFxuICBtc2c/OiBzdHJpbmcsXG4pOiBFcnJvcjtcbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRUaHJvd3M8RSBleHRlbmRzIEVycm9yID0gRXJyb3I+KFxuICBmbjogKCkgPT4gdW5rbm93bixcbiAgZXJyb3JDbGFzc09yQ2FsbGJhY2tPck1zZz86XG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICB8IChuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBFKVxuICAgIHwgKChlOiBFcnJvcikgPT4gdW5rbm93bilcbiAgICB8IHN0cmluZyxcbiAgbXNnSW5jbHVkZXNPck1zZz86IHN0cmluZyxcbiAgbXNnPzogc3RyaW5nLFxuKTogRSB8IEVycm9yIHwgdW5rbm93biB7XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIGxldCBFcnJvckNsYXNzOiAobmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gRSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBtc2dJbmNsdWRlczogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBsZXQgZXJyb3JDYWxsYmFjazogKChlOiBFcnJvcikgPT4gdW5rbm93bikgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBlcnI7XG5cbiAgaWYgKHR5cGVvZiBlcnJvckNsYXNzT3JDYWxsYmFja09yTXNnICE9PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKFxuICAgICAgZXJyb3JDbGFzc09yQ2FsbGJhY2tPck1zZyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBlcnJvckNsYXNzT3JDYWxsYmFja09yTXNnLnByb3RvdHlwZSBpbnN0YW5jZW9mIEVycm9yIHx8XG4gICAgICBlcnJvckNsYXNzT3JDYWxsYmFja09yTXNnLnByb3RvdHlwZSA9PT0gRXJyb3IucHJvdG90eXBlXG4gICAgKSB7XG4gICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgICAgRXJyb3JDbGFzcyA9IGVycm9yQ2xhc3NPckNhbGxiYWNrT3JNc2cgYXMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gRTtcbiAgICAgIG1zZ0luY2x1ZGVzID0gbXNnSW5jbHVkZXNPck1zZztcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JDYWxsYmFjayA9IGVycm9yQ2xhc3NPckNhbGxiYWNrT3JNc2cgYXMgKGU6IEVycm9yKSA9PiB1bmtub3duO1xuICAgICAgbXNnID0gbXNnSW5jbHVkZXNPck1zZztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbXNnID0gZXJyb3JDbGFzc09yQ2FsbGJhY2tPck1zZztcbiAgfVxuICBsZXQgZG9lc1Rocm93ID0gZmFsc2U7XG4gIGNvbnN0IG1zZ1RvQXBwZW5kVG9FcnJvciA9IG1zZyA/IGA6ICR7bXNnfWAgOiBcIi5cIjtcbiAgdHJ5IHtcbiAgICBmbigpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChFcnJvckNsYXNzIHx8IGVycm9yQ2FsbGJhY2spIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXCJBIG5vbi1FcnJvciBvYmplY3Qgd2FzIHRocm93bi5cIik7XG4gICAgICB9XG4gICAgICBhc3NlcnRJc0Vycm9yKFxuICAgICAgICBlcnJvcixcbiAgICAgICAgRXJyb3JDbGFzcyxcbiAgICAgICAgbXNnSW5jbHVkZXMsXG4gICAgICAgIG1zZyxcbiAgICAgICk7XG4gICAgICBpZiAodHlwZW9mIGVycm9yQ2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBlcnJvckNhbGxiYWNrKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZXJyID0gZXJyb3I7XG4gICAgZG9lc1Rocm93ID0gdHJ1ZTtcbiAgfVxuICBpZiAoIWRvZXNUaHJvdykge1xuICAgIG1zZyA9IGBFeHBlY3RlZCBmdW5jdGlvbiB0byB0aHJvdyR7bXNnVG9BcHBlbmRUb0Vycm9yfWA7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZyk7XG4gIH1cbiAgcmV0dXJuIGVycjtcbn1cblxuLyoqIEV4ZWN1dGVzIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIHByb21pc2UsIGV4cGVjdGluZyBpdCB0byByZWplY3QuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0UmVqZWN0cyhcbiAgZm46ICgpID0+IFByb21pc2VMaWtlPHVua25vd24+LFxuICBtc2c/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHVua25vd24+O1xuLyoqIEV4ZWN1dGVzIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhIHByb21pc2UsIGV4cGVjdGluZyBpdCB0byByZWplY3QuXG4gKiBJZiBpdCBkb2VzIG5vdCwgdGhlbiBpdCB0aHJvd3MuIEFuIGVycm9yIGNsYXNzIGFuZCBhIHN0cmluZyB0aGF0IHNob3VsZCBiZVxuICogaW5jbHVkZWQgaW4gdGhlIGVycm9yIG1lc3NhZ2UgY2FuIGFsc28gYmUgYXNzZXJ0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0UmVqZWN0czxFIGV4dGVuZHMgRXJyb3IgPSBFcnJvcj4oXG4gIGZuOiAoKSA9PiBQcm9taXNlTGlrZTx1bmtub3duPixcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgRXJyb3JDbGFzczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gRSxcbiAgbXNnSW5jbHVkZXM/OiBzdHJpbmcsXG4gIG1zZz86IHN0cmluZyxcbik6IFByb21pc2U8RT47XG4vKiogQGRlcHJlY2F0ZWQgVXNlIGFzc2VydFJlamVjdHMoZm4sIG1zZykgaW5zdGVhZCwgd2hpY2ggbm93IHJldHVybnMgcmVqZWN0ZWQgdmFsdWVcbiAqIGFuZCB5b3UgY2FuIGFzc2VydCBvbiBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRSZWplY3RzKFxuICBmbjogKCkgPT4gUHJvbWlzZUxpa2U8dW5rbm93bj4sXG4gIGVycm9yQ2FsbGJhY2s6IChlOiBFcnJvcikgPT4gdW5rbm93bixcbiAgbXNnPzogc3RyaW5nLFxuKTogUHJvbWlzZTxFcnJvcj47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0UmVqZWN0czxFIGV4dGVuZHMgRXJyb3IgPSBFcnJvcj4oXG4gIGZuOiAoKSA9PiBQcm9taXNlTGlrZTx1bmtub3duPixcbiAgZXJyb3JDbGFzc09yQ2FsbGJhY2tPck1zZz86XG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICB8IChuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBFKVxuICAgIHwgKChlOiBFcnJvcikgPT4gdW5rbm93bilcbiAgICB8IHN0cmluZyxcbiAgbXNnSW5jbHVkZXNPck1zZz86IHN0cmluZyxcbiAgbXNnPzogc3RyaW5nLFxuKTogUHJvbWlzZTxFIHwgRXJyb3IgfCB1bmtub3duPiB7XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIGxldCBFcnJvckNsYXNzOiAobmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gRSkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBtc2dJbmNsdWRlczogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBsZXQgZXJyb3JDYWxsYmFjazogKChlOiBFcnJvcikgPT4gdW5rbm93bikgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBlcnI7XG5cbiAgaWYgKHR5cGVvZiBlcnJvckNsYXNzT3JDYWxsYmFja09yTXNnICE9PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKFxuICAgICAgZXJyb3JDbGFzc09yQ2FsbGJhY2tPck1zZyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBlcnJvckNsYXNzT3JDYWxsYmFja09yTXNnLnByb3RvdHlwZSBpbnN0YW5jZW9mIEVycm9yIHx8XG4gICAgICBlcnJvckNsYXNzT3JDYWxsYmFja09yTXNnLnByb3RvdHlwZSA9PT0gRXJyb3IucHJvdG90eXBlXG4gICAgKSB7XG4gICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgICAgRXJyb3JDbGFzcyA9IGVycm9yQ2xhc3NPckNhbGxiYWNrT3JNc2cgYXMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gRTtcbiAgICAgIG1zZ0luY2x1ZGVzID0gbXNnSW5jbHVkZXNPck1zZztcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3JDYWxsYmFjayA9IGVycm9yQ2xhc3NPckNhbGxiYWNrT3JNc2cgYXMgKGU6IEVycm9yKSA9PiB1bmtub3duO1xuICAgICAgbXNnID0gbXNnSW5jbHVkZXNPck1zZztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbXNnID0gZXJyb3JDbGFzc09yQ2FsbGJhY2tPck1zZztcbiAgfVxuICBsZXQgZG9lc1Rocm93ID0gZmFsc2U7XG4gIGxldCBpc1Byb21pc2VSZXR1cm5lZCA9IGZhbHNlO1xuICBjb25zdCBtc2dUb0FwcGVuZFRvRXJyb3IgPSBtc2cgPyBgOiAke21zZ31gIDogXCIuXCI7XG4gIHRyeSB7XG4gICAgY29uc3QgcG9zc2libGVQcm9taXNlID0gZm4oKTtcbiAgICBpZiAoXG4gICAgICBwb3NzaWJsZVByb21pc2UgJiZcbiAgICAgIHR5cGVvZiBwb3NzaWJsZVByb21pc2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIHR5cGVvZiBwb3NzaWJsZVByb21pc2UudGhlbiA9PT0gXCJmdW5jdGlvblwiXG4gICAgKSB7XG4gICAgICBpc1Byb21pc2VSZXR1cm5lZCA9IHRydWU7XG4gICAgICBhd2FpdCBwb3NzaWJsZVByb21pc2U7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghaXNQcm9taXNlUmV0dXJuZWQpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgYEZ1bmN0aW9uIHRocm93cyB3aGVuIGV4cGVjdGVkIHRvIHJlamVjdCR7bXNnVG9BcHBlbmRUb0Vycm9yfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoRXJyb3JDbGFzcyB8fCBlcnJvckNhbGxiYWNrKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFwiQSBub24tRXJyb3Igb2JqZWN0IHdhcyByZWplY3RlZC5cIik7XG4gICAgICB9XG4gICAgICBhc3NlcnRJc0Vycm9yKFxuICAgICAgICBlcnJvcixcbiAgICAgICAgRXJyb3JDbGFzcyxcbiAgICAgICAgbXNnSW5jbHVkZXMsXG4gICAgICAgIG1zZyxcbiAgICAgICk7XG4gICAgICBpZiAodHlwZW9mIGVycm9yQ2FsbGJhY2sgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGVycm9yQ2FsbGJhY2soZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBlcnIgPSBlcnJvcjtcbiAgICBkb2VzVGhyb3cgPSB0cnVlO1xuICB9XG4gIGlmICghZG9lc1Rocm93KSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgYEV4cGVjdGVkIGZ1bmN0aW9uIHRvIHJlamVjdCR7bXNnVG9BcHBlbmRUb0Vycm9yfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZXJyO1xufVxuXG4vKiogVXNlIHRoaXMgdG8gc3R1YiBvdXQgbWV0aG9kcyB0aGF0IHdpbGwgdGhyb3cgd2hlbiBpbnZva2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW1wbGVtZW50ZWQobXNnPzogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnIHx8IFwidW5pbXBsZW1lbnRlZFwiKTtcbn1cblxuLyoqIFVzZSB0aGlzIHRvIGFzc2VydCB1bnJlYWNoYWJsZSBjb2RlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVhY2hhYmxlKCk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFwidW5yZWFjaGFibGVcIik7XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuZXhwb3J0IGNsYXNzIERlbm9TdGRJbnRlcm5hbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSBcIkRlbm9TdGRJbnRlcm5hbEVycm9yXCI7XG4gIH1cbn1cblxuLyoqIE1ha2UgYW4gYXNzZXJ0aW9uLCBpZiBub3QgYHRydWVgLCB0aGVuIHRocm93LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydChleHByOiB1bmtub3duLCBtc2cgPSBcIlwiKTogYXNzZXJ0cyBleHByIHtcbiAgaWYgKCFleHByKSB7XG4gICAgdGhyb3cgbmV3IERlbm9TdGRJbnRlcm5hbEVycm9yKG1zZyk7XG4gIH1cbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuXG4vKipcbiAqIFByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBgVWludDhBcnJheWAgYnl0ZSBzbGljZXMgdGhhdCBhcmUgbm90XG4gKiBpbmNsdWRlZCBvbiB0aGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLyoqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBuZWVkbGUgYXJyYXkgaW4gdGhlIHNvdXJjZVxuICogYXJyYXksIG9yIC0xIGlmIGl0IGlzIG5vdCBwcmVzZW50LlxuICpcbiAqIEEgc3RhcnQgaW5kZXggY2FuIGJlIHNwZWNpZmllZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQgdGhhdCBiZWdpbnMgdGhlIHNlYXJjaFxuICogYXQgdGhhdCBnaXZlbiBpbmRleC4gVGhlIHN0YXJ0IGluZGV4IGRlZmF1bHRzIHRvIHRoZSBzdGFydCBvZiB0aGUgYXJyYXkuXG4gKlxuICogVGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBPKHNvdXJjZS5sZW50aCAqIG5lZWRsZS5sZW5ndGgpLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbmRleE9mTmVlZGxlIH0gZnJvbSBcIi4vbW9kLnRzXCI7XG4gKiBjb25zdCBzb3VyY2UgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMiwgMSwgMiwgMSwgMiwgM10pO1xuICogY29uc3QgbmVlZGxlID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDJdKTtcbiAqIGNvbnNvbGUubG9nKGluZGV4T2ZOZWVkbGUoc291cmNlLCBuZWVkbGUpKTsgLy8gMVxuICogY29uc29sZS5sb2coaW5kZXhPZk5lZWRsZShzb3VyY2UsIG5lZWRsZSwgMikpOyAvLyAzXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2ZOZWVkbGUoXG4gIHNvdXJjZTogVWludDhBcnJheSxcbiAgbmVlZGxlOiBVaW50OEFycmF5LFxuICBzdGFydCA9IDAsXG4pOiBudW1iZXIge1xuICBpZiAoc3RhcnQgPj0gc291cmNlLmxlbmd0aCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSBNYXRoLm1heCgwLCBzb3VyY2UubGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGNvbnN0IHMgPSBuZWVkbGVbMF07XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VbaV0gIT09IHMpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHBpbiA9IGk7XG4gICAgbGV0IG1hdGNoZWQgPSAxO1xuICAgIGxldCBqID0gaTtcbiAgICB3aGlsZSAobWF0Y2hlZCA8IG5lZWRsZS5sZW5ndGgpIHtcbiAgICAgIGorKztcbiAgICAgIGlmIChzb3VyY2Vbal0gIT09IG5lZWRsZVtqIC0gcGluXSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1hdGNoZWQrKztcbiAgICB9XG4gICAgaWYgKG1hdGNoZWQgPT09IG5lZWRsZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBwaW47XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuLyoqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIG5lZWRsZSBhcnJheSBpbiB0aGUgc291cmNlXG4gKiBhcnJheSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKlxuICogQSBzdGFydCBpbmRleCBjYW4gYmUgc3BlY2lmaWVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudCB0aGF0IGJlZ2lucyB0aGUgc2VhcmNoXG4gKiBhdCB0aGF0IGdpdmVuIGluZGV4LiBUaGUgc3RhcnQgaW5kZXggZGVmYXVsdHMgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuXG4gKlxuICogVGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBPKHNvdXJjZS5sZW50aCAqIG5lZWRsZS5sZW5ndGgpLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBsYXN0SW5kZXhPZk5lZWRsZSB9IGZyb20gXCIuL21vZC50c1wiO1xuICogY29uc3Qgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDEsIDIsIDEsIDIsIDNdKTtcbiAqIGNvbnN0IG5lZWRsZSA9IG5ldyBVaW50OEFycmF5KFsxLCAyXSk7XG4gKiBjb25zb2xlLmxvZyhsYXN0SW5kZXhPZk5lZWRsZShzb3VyY2UsIG5lZWRsZSkpOyAvLyA1XG4gKiBjb25zb2xlLmxvZyhsYXN0SW5kZXhPZk5lZWRsZShzb3VyY2UsIG5lZWRsZSwgNCkpOyAvLyAzXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3RJbmRleE9mTmVlZGxlKFxuICBzb3VyY2U6IFVpbnQ4QXJyYXksXG4gIG5lZWRsZTogVWludDhBcnJheSxcbiAgc3RhcnQgPSBzb3VyY2UubGVuZ3RoIC0gMSxcbik6IG51bWJlciB7XG4gIGlmIChzdGFydCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKHN0YXJ0ID49IHNvdXJjZS5sZW5ndGgpIHtcbiAgICBzdGFydCA9IHNvdXJjZS5sZW5ndGggLSAxO1xuICB9XG4gIGNvbnN0IGUgPSBuZWVkbGVbbmVlZGxlLmxlbmd0aCAtIDFdO1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHNvdXJjZVtpXSAhPT0gZSkgY29udGludWU7XG4gICAgY29uc3QgcGluID0gaTtcbiAgICBsZXQgbWF0Y2hlZCA9IDE7XG4gICAgbGV0IGogPSBpO1xuICAgIHdoaWxlIChtYXRjaGVkIDwgbmVlZGxlLmxlbmd0aCkge1xuICAgICAgai0tO1xuICAgICAgaWYgKHNvdXJjZVtqXSAhPT0gbmVlZGxlW25lZWRsZS5sZW5ndGggLSAxIC0gKHBpbiAtIGopXSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIG1hdGNoZWQrKztcbiAgICB9XG4gICAgaWYgKG1hdGNoZWQgPT09IG5lZWRsZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBwaW4gLSBuZWVkbGUubGVuZ3RoICsgMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBwcmVmaXggYXJyYXkgYXBwZWFycyBhdCB0aGUgc3RhcnQgb2YgdGhlIHNvdXJjZSBhcnJheSxcbiAqIGZhbHNlIG90aGVyd2lzZS5cbiAqXG4gKiBUaGUgY29tcGxleGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGlzIE8ocHJlZml4Lmxlbmd0aCkuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHN0YXJ0c1dpdGggfSBmcm9tIFwiLi9tb2QudHNcIjtcbiAqIGNvbnN0IHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAxLCAyLCAxLCAyLCAzXSk7XG4gKiBjb25zdCBwcmVmaXggPSBuZXcgVWludDhBcnJheShbMCwgMSwgMl0pO1xuICogY29uc29sZS5sb2coc3RhcnRzV2l0aChzb3VyY2UsIHByZWZpeCkpOyAvLyB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc291cmNlOiBVaW50OEFycmF5LCBwcmVmaXg6IFVpbnQ4QXJyYXkpOiBib29sZWFuIHtcbiAgZm9yIChsZXQgaSA9IDAsIG1heCA9IHByZWZpeC5sZW5ndGg7IGkgPCBtYXg7IGkrKykge1xuICAgIGlmIChzb3VyY2VbaV0gIT09IHByZWZpeFtpXSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBzdWZmaXggYXJyYXkgYXBwZWFycyBhdCB0aGUgZW5kIG9mIHRoZSBzb3VyY2UgYXJyYXksXG4gKiBmYWxzZSBvdGhlcndpc2UuXG4gKlxuICogVGhlIGNvbXBsZXhpdHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBPKHN1ZmZpeC5sZW5ndGgpLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBlbmRzV2l0aCB9IGZyb20gXCIuL21vZC50c1wiO1xuICogY29uc3Qgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDIsIDEsIDIsIDEsIDIsIDNdKTtcbiAqIGNvbnN0IHN1ZmZpeCA9IG5ldyBVaW50OEFycmF5KFsxLCAyLCAzXSk7XG4gKiBjb25zb2xlLmxvZyhlbmRzV2l0aChzb3VyY2UsIHN1ZmZpeCkpOyAvLyB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZHNXaXRoKHNvdXJjZTogVWludDhBcnJheSwgc3VmZml4OiBVaW50OEFycmF5KTogYm9vbGVhbiB7XG4gIGZvciAoXG4gICAgbGV0IHNyY2kgPSBzb3VyY2UubGVuZ3RoIC0gMSwgc2Z4aSA9IHN1ZmZpeC5sZW5ndGggLSAxO1xuICAgIHNmeGkgPj0gMDtcbiAgICBzcmNpLS0sIHNmeGktLVxuICApIHtcbiAgICBpZiAoc291cmNlW3NyY2ldICE9PSBzdWZmaXhbc2Z4aV0pIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIFJldHVybnMgYSBuZXcgVWludDhBcnJheSBjb21wb3NlZCBvZiBgY291bnRgIHJlcGV0aXRpb25zIG9mIHRoZSBgc291cmNlYFxuICogYXJyYXkuXG4gKlxuICogSWYgYGNvdW50YCBpcyBuZWdhdGl2ZSwgYSBgUmFuZ2VFcnJvcmAgaXMgdGhyb3duLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyByZXBlYXQgfSBmcm9tIFwiLi9tb2QudHNcIjtcbiAqIGNvbnN0IHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyXSk7XG4gKiBjb25zb2xlLmxvZyhyZXBlYXQoc291cmNlLCAzKSk7IC8vIFswLCAxLCAyLCAwLCAxLCAyLCAwLCAxLCAyXVxuICogY29uc29sZS5sb2cocmVwZWF0KHNvdXJjZSwgMCkpOyAvLyBbXVxuICogY29uc29sZS5sb2cocmVwZWF0KHNvdXJjZSwgLTEpKTsgLy8gUmFuZ2VFcnJvclxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBlYXQoc291cmNlOiBVaW50OEFycmF5LCBjb3VudDogbnVtYmVyKTogVWludDhBcnJheSB7XG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheSgpO1xuICB9XG5cbiAgaWYgKGNvdW50IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiYnl0ZXM6IG5lZ2F0aXZlIHJlcGVhdCBjb3VudFwiKTtcbiAgfSBlbHNlIGlmICgoc291cmNlLmxlbmd0aCAqIGNvdW50KSAvIGNvdW50ICE9PSBzb3VyY2UubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiYnl0ZXM6IHJlcGVhdCBjb3VudCBjYXVzZXMgb3ZlcmZsb3dcIik7XG4gIH1cblxuICBjb25zdCBpbnQgPSBNYXRoLmZsb29yKGNvdW50KTtcblxuICBpZiAoaW50ICE9PSBjb3VudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImJ5dGVzOiByZXBlYXQgY291bnQgbXVzdCBiZSBhbiBpbnRlZ2VyXCIpO1xuICB9XG5cbiAgY29uc3QgbmIgPSBuZXcgVWludDhBcnJheShzb3VyY2UubGVuZ3RoICogY291bnQpO1xuXG4gIGxldCBicCA9IGNvcHkoc291cmNlLCBuYik7XG5cbiAgZm9yICg7IGJwIDwgbmIubGVuZ3RoOyBicCAqPSAyKSB7XG4gICAgY29weShuYi5zbGljZSgwLCBicCksIG5iLCBicCk7XG4gIH1cblxuICByZXR1cm4gbmI7XG59XG5cbi8qKiBDb25jYXRlbmF0ZSB0aGUgZ2l2ZW4gYXJyYXlzIGludG8gYSBuZXcgVWludDhBcnJheS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY29uY2F0IH0gZnJvbSBcIi4vbW9kLnRzXCI7XG4gKiBjb25zdCBhID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDJdKTtcbiAqIGNvbnN0IGIgPSBuZXcgVWludDhBcnJheShbMywgNCwgNV0pO1xuICogY29uc29sZS5sb2coY29uY2F0KGEsIGIpKTsgLy8gWzAsIDEsIDIsIDMsIDQsIDVdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoLi4uYnVmOiBVaW50OEFycmF5W10pOiBVaW50OEFycmF5IHtcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIGZvciAoY29uc3QgYiBvZiBidWYpIHtcbiAgICBsZW5ndGggKz0gYi5sZW5ndGg7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICBsZXQgaW5kZXggPSAwO1xuICBmb3IgKGNvbnN0IGIgb2YgYnVmKSB7XG4gICAgb3V0cHV0LnNldChiLCBpbmRleCk7XG4gICAgaW5kZXggKz0gYi5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIHRoZSBzb3VyY2UgYXJyYXkgY29udGFpbnMgdGhlIG5lZWRsZSBhcnJheSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICpcbiAqIEEgc3RhcnQgaW5kZXggY2FuIGJlIHNwZWNpZmllZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQgdGhhdCBiZWdpbnMgdGhlIHNlYXJjaFxuICogYXQgdGhhdCBnaXZlbiBpbmRleC4gVGhlIHN0YXJ0IGluZGV4IGRlZmF1bHRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LlxuICpcbiAqIFRoZSBjb21wbGV4aXR5IG9mIHRoaXMgZnVuY3Rpb24gaXMgTyhzb3VyY2UubGVuZ3RoICogbmVlZGxlLmxlbmd0aCkuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGluY2x1ZGVzTmVlZGxlIH0gZnJvbSBcIi4vbW9kLnRzXCI7XG4gKiBjb25zdCBzb3VyY2UgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMiwgMSwgMiwgMSwgMiwgM10pO1xuICogY29uc3QgbmVlZGxlID0gbmV3IFVpbnQ4QXJyYXkoWzEsIDJdKTtcbiAqIGNvbnNvbGUubG9nKGluY2x1ZGVzTmVlZGxlKHNvdXJjZSwgbmVlZGxlKSk7IC8vIHRydWVcbiAqIGNvbnNvbGUubG9nKGluY2x1ZGVzTmVlZGxlKHNvdXJjZSwgbmVlZGxlLCA2KSk7IC8vIGZhbHNlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzTmVlZGxlKFxuICBzb3VyY2U6IFVpbnQ4QXJyYXksXG4gIG5lZWRsZTogVWludDhBcnJheSxcbiAgc3RhcnQgPSAwLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBpbmRleE9mTmVlZGxlKHNvdXJjZSwgbmVlZGxlLCBzdGFydCkgIT09IC0xO1xufVxuXG4vKiogQ29weSBieXRlcyBmcm9tIHRoZSBgc3JjYCBhcnJheSB0byB0aGUgYGRzdGAgYXJyYXkuIFJldHVybnMgdGhlIG51bWJlciBvZlxuICogYnl0ZXMgY29waWVkLlxuICpcbiAqIElmIHRoZSBgc3JjYCBhcnJheSBpcyBsYXJnZXIgdGhhbiB3aGF0IHRoZSBgZHN0YCBhcnJheSBjYW4gaG9sZCwgb25seSB0aGVcbiAqIGFtb3VudCBvZiBieXRlcyB0aGF0IGZpdCBpbiB0aGUgYGRzdGAgYXJyYXkgYXJlIGNvcGllZC5cbiAqXG4gKiBBbiBvZmZzZXQgY2FuIGJlIHNwZWNpZmllZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQgdGhhdCBiZWdpbnMgdGhlIGNvcHkgYXRcbiAqIHRoYXQgZ2l2ZW4gaW5kZXggaW4gdGhlIGBkc3RgIGFycmF5LiBUaGUgb2Zmc2V0IGRlZmF1bHRzIHRvIHRoZSBiZWdpbm5pbmcgb2ZcbiAqIHRoZSBhcnJheS5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY29weSB9IGZyb20gXCIuL21vZC50c1wiO1xuICogY29uc3Qgc3JjID0gbmV3IFVpbnQ4QXJyYXkoWzksIDgsIDddKTtcbiAqIGNvbnN0IGRzdCA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAzLCA0LCA1XSk7XG4gKiBjb25zb2xlLmxvZyhjb3B5KHNyYywgZHN0KSk7IC8vIDNcbiAqIGNvbnNvbGUubG9nKGRzdCk7IC8vIFs5LCA4LCA3LCAzLCA0LCA1XVxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNvcHkgfSBmcm9tIFwiLi9tb2QudHNcIjtcbiAqIGNvbnN0IHNyYyA9IG5ldyBVaW50OEFycmF5KFsxLCAxLCAxLCAxXSk7XG4gKiBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMF0pO1xuICogY29uc29sZS5sb2coY29weShzcmMsIGRzdCwgMSkpOyAvLyAzXG4gKiBjb25zb2xlLmxvZyhkc3QpOyAvLyBbMCwgMSwgMSwgMV1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weShzcmM6IFVpbnQ4QXJyYXksIGRzdDogVWludDhBcnJheSwgb2ZmID0gMCk6IG51bWJlciB7XG4gIG9mZiA9IE1hdGgubWF4KDAsIE1hdGgubWluKG9mZiwgZHN0LmJ5dGVMZW5ndGgpKTtcbiAgY29uc3QgZHN0Qnl0ZXNBdmFpbGFibGUgPSBkc3QuYnl0ZUxlbmd0aCAtIG9mZjtcbiAgaWYgKHNyYy5ieXRlTGVuZ3RoID4gZHN0Qnl0ZXNBdmFpbGFibGUpIHtcbiAgICBzcmMgPSBzcmMuc3ViYXJyYXkoMCwgZHN0Qnl0ZXNBdmFpbGFibGUpO1xuICB9XG4gIGRzdC5zZXQoc3JjLCBvZmYpO1xuICByZXR1cm4gc3JjLmJ5dGVMZW5ndGg7XG59XG5cbmV4cG9ydCB7IGVxdWFscyB9IGZyb20gXCIuL2VxdWFscy50c1wiO1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiLi4vX3V0aWwvYXNzZXJ0LnRzXCI7XG5pbXBvcnQgeyBCeXRlc0xpc3QgfSBmcm9tIFwiLi4vYnl0ZXMvYnl0ZXNfbGlzdC50c1wiO1xuaW1wb3J0IHsgY29uY2F0LCBjb3B5IH0gZnJvbSBcIi4uL2J5dGVzL21vZC50c1wiO1xuaW1wb3J0IHR5cGUgeyBSZWFkZXIsIFJlYWRlclN5bmMsIFdyaXRlciwgV3JpdGVyU3luYyB9IGZyb20gXCIuL3R5cGVzLmQudHNcIjtcblxuLy8gTUlOX1JFQUQgaXMgdGhlIG1pbmltdW0gQXJyYXlCdWZmZXIgc2l6ZSBwYXNzZWQgdG8gYSByZWFkIGNhbGwgYnlcbi8vIGJ1ZmZlci5SZWFkRnJvbS4gQXMgbG9uZyBhcyB0aGUgQnVmZmVyIGhhcyBhdCBsZWFzdCBNSU5fUkVBRCBieXRlcyBiZXlvbmRcbi8vIHdoYXQgaXMgcmVxdWlyZWQgdG8gaG9sZCB0aGUgY29udGVudHMgb2YgciwgcmVhZEZyb20oKSB3aWxsIG5vdCBncm93IHRoZVxuLy8gdW5kZXJseWluZyBidWZmZXIuXG5jb25zdCBNSU5fUkVBRCA9IDMyICogMTAyNDtcbmNvbnN0IE1BWF9TSVpFID0gMiAqKiAzMiAtIDI7XG5cbi8qKiBBIHZhcmlhYmxlLXNpemVkIGJ1ZmZlciBvZiBieXRlcyB3aXRoIGByZWFkKClgIGFuZCBgd3JpdGUoKWAgbWV0aG9kcy5cbiAqXG4gKiBCdWZmZXIgaXMgYWxtb3N0IGFsd2F5cyB1c2VkIHdpdGggc29tZSBJL08gbGlrZSBmaWxlcyBhbmQgc29ja2V0cy4gSXQgYWxsb3dzXG4gKiBvbmUgdG8gYnVmZmVyIHVwIGEgZG93bmxvYWQgZnJvbSBhIHNvY2tldC4gQnVmZmVyIGdyb3dzIGFuZCBzaHJpbmtzIGFzXG4gKiBuZWNlc3NhcnkuXG4gKlxuICogQnVmZmVyIGlzIE5PVCB0aGUgc2FtZSB0aGluZyBhcyBOb2RlJ3MgQnVmZmVyLiBOb2RlJ3MgQnVmZmVyIHdhcyBjcmVhdGVkIGluXG4gKiAyMDA5IGJlZm9yZSBKYXZhU2NyaXB0IGhhZCB0aGUgY29uY2VwdCBvZiBBcnJheUJ1ZmZlcnMuIEl0J3Mgc2ltcGx5IGFcbiAqIG5vbi1zdGFuZGFyZCBBcnJheUJ1ZmZlci5cbiAqXG4gKiBBcnJheUJ1ZmZlciBpcyBhIGZpeGVkIG1lbW9yeSBhbGxvY2F0aW9uLiBCdWZmZXIgaXMgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gKiBBcnJheUJ1ZmZlci5cbiAqXG4gKiBCYXNlZCBvbiBbR28gQnVmZmVyXShodHRwczovL2dvbGFuZy5vcmcvcGtnL2J5dGVzLyNCdWZmZXIpLiAqL1xuXG5leHBvcnQgY2xhc3MgQnVmZmVyIHtcbiAgI2J1ZjogVWludDhBcnJheTsgLy8gY29udGVudHMgYXJlIHRoZSBieXRlcyBidWZbb2ZmIDogbGVuKGJ1ZildXG4gICNvZmYgPSAwOyAvLyByZWFkIGF0IGJ1ZltvZmZdLCB3cml0ZSBhdCBidWZbYnVmLmJ5dGVMZW5ndGhdXG5cbiAgY29uc3RydWN0b3IoYWI/OiBBcnJheUJ1ZmZlckxpa2UgfCBBcnJheUxpa2U8bnVtYmVyPikge1xuICAgIHRoaXMuI2J1ZiA9IGFiID09PSB1bmRlZmluZWQgPyBuZXcgVWludDhBcnJheSgwKSA6IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGEgc2xpY2UgaG9sZGluZyB0aGUgdW5yZWFkIHBvcnRpb24gb2YgdGhlIGJ1ZmZlci5cbiAgICpcbiAgICogVGhlIHNsaWNlIGlzIHZhbGlkIGZvciB1c2Ugb25seSB1bnRpbCB0aGUgbmV4dCBidWZmZXIgbW9kaWZpY2F0aW9uICh0aGF0XG4gICAqIGlzLCBvbmx5IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gYSBtZXRob2QgbGlrZSBgcmVhZCgpYCwgYHdyaXRlKClgLFxuICAgKiBgcmVzZXQoKWAsIG9yIGB0cnVuY2F0ZSgpYCkuIElmIGBvcHRpb25zLmNvcHlgIGlzIGZhbHNlIHRoZSBzbGljZSBhbGlhc2VzIHRoZSBidWZmZXIgY29udGVudCBhdFxuICAgKiBsZWFzdCB1bnRpbCB0aGUgbmV4dCBidWZmZXIgbW9kaWZpY2F0aW9uLCBzbyBpbW1lZGlhdGUgY2hhbmdlcyB0byB0aGVcbiAgICogc2xpY2Ugd2lsbCBhZmZlY3QgdGhlIHJlc3VsdCBvZiBmdXR1cmUgcmVhZHMuXG4gICAqIEBwYXJhbSBvcHRpb25zIERlZmF1bHRzIHRvIGB7IGNvcHk6IHRydWUgfWBcbiAgICovXG4gIGJ5dGVzKG9wdGlvbnMgPSB7IGNvcHk6IHRydWUgfSk6IFVpbnQ4QXJyYXkge1xuICAgIGlmIChvcHRpb25zLmNvcHkgPT09IGZhbHNlKSByZXR1cm4gdGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI29mZik7XG4gICAgcmV0dXJuIHRoaXMuI2J1Zi5zbGljZSh0aGlzLiNvZmYpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgdW5yZWFkIHBvcnRpb24gb2YgdGhlIGJ1ZmZlciBpcyBlbXB0eS4gKi9cbiAgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI2J1Zi5ieXRlTGVuZ3RoIDw9IHRoaXMuI29mZjtcbiAgfVxuXG4gIC8qKiBBIHJlYWQgb25seSBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIHVucmVhZCBwb3J0aW9uIG9mIHRoZSBidWZmZXIuICovXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jYnVmLmJ5dGVMZW5ndGggLSB0aGlzLiNvZmY7XG4gIH1cblxuICAvKiogVGhlIHJlYWQgb25seSBjYXBhY2l0eSBvZiB0aGUgYnVmZmVyJ3MgdW5kZXJseWluZyBieXRlIHNsaWNlLCB0aGF0IGlzLFxuICAgKiB0aGUgdG90YWwgc3BhY2UgYWxsb2NhdGVkIGZvciB0aGUgYnVmZmVyJ3MgZGF0YS4gKi9cbiAgZ2V0IGNhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2J1Zi5idWZmZXIuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIC8qKiBEaXNjYXJkcyBhbGwgYnV0IHRoZSBmaXJzdCBgbmAgdW5yZWFkIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlciBidXRcbiAgICogY29udGludWVzIHRvIHVzZSB0aGUgc2FtZSBhbGxvY2F0ZWQgc3RvcmFnZS4gSXQgdGhyb3dzIGlmIGBuYCBpc1xuICAgKiBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLiAqL1xuICB0cnVuY2F0ZShuOiBudW1iZXIpIHtcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobiA8IDAgfHwgbiA+IHRoaXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBFcnJvcihcImJ5dGVzLkJ1ZmZlcjogdHJ1bmNhdGlvbiBvdXQgb2YgcmFuZ2VcIik7XG4gICAgfVxuICAgIHRoaXMuI3Jlc2xpY2UodGhpcy4jb2ZmICsgbik7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLiNyZXNsaWNlKDApO1xuICAgIHRoaXMuI29mZiA9IDA7XG4gIH1cblxuICAjdHJ5R3Jvd0J5UmVzbGljZShuOiBudW1iZXIpIHtcbiAgICBjb25zdCBsID0gdGhpcy4jYnVmLmJ5dGVMZW5ndGg7XG4gICAgaWYgKG4gPD0gdGhpcy5jYXBhY2l0eSAtIGwpIHtcbiAgICAgIHRoaXMuI3Jlc2xpY2UobCArIG4pO1xuICAgICAgcmV0dXJuIGw7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gICNyZXNsaWNlKGxlbjogbnVtYmVyKSB7XG4gICAgYXNzZXJ0KGxlbiA8PSB0aGlzLiNidWYuYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgIHRoaXMuI2J1ZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuI2J1Zi5idWZmZXIsIDAsIGxlbik7XG4gIH1cblxuICAvKiogUmVhZHMgdGhlIG5leHQgYHAubGVuZ3RoYCBieXRlcyBmcm9tIHRoZSBidWZmZXIgb3IgdW50aWwgdGhlIGJ1ZmZlciBpc1xuICAgKiBkcmFpbmVkLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gSWYgdGhlIGJ1ZmZlciBoYXMgbm8gZGF0YSB0b1xuICAgKiByZXR1cm4sIHRoZSByZXR1cm4gaXMgRU9GIChgbnVsbGApLiAqL1xuICByZWFkU3luYyhwOiBVaW50OEFycmF5KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZW1wdHkoKSkge1xuICAgICAgLy8gQnVmZmVyIGlzIGVtcHR5LCByZXNldCB0byByZWNvdmVyIHNwYWNlLlxuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgaWYgKHAuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyB0aGlzIGVkZ2UgY2FzZSBpcyB0ZXN0ZWQgaW4gJ2J1ZmZlclJlYWRFbXB0eUF0RU9GJyB0ZXN0XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG5yZWFkID0gY29weSh0aGlzLiNidWYuc3ViYXJyYXkodGhpcy4jb2ZmKSwgcCk7XG4gICAgdGhpcy4jb2ZmICs9IG5yZWFkO1xuICAgIHJldHVybiBucmVhZDtcbiAgfVxuXG4gIC8qKiBSZWFkcyB0aGUgbmV4dCBgcC5sZW5ndGhgIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlciBvciB1bnRpbCB0aGUgYnVmZmVyIGlzXG4gICAqIGRyYWluZWQuIFJlc29sdmVzIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gSWYgdGhlIGJ1ZmZlciBoYXMgbm9cbiAgICogZGF0YSB0byByZXR1cm4sIHJlc29sdmVzIHRvIEVPRiAoYG51bGxgKS5cbiAgICpcbiAgICogTk9URTogVGhpcyBtZXRob2RzIHJlYWRzIGJ5dGVzIHN5bmNocm9ub3VzbHk7IGl0J3MgcHJvdmlkZWQgZm9yXG4gICAqIGNvbXBhdGliaWxpdHkgd2l0aCBgUmVhZGVyYCBpbnRlcmZhY2VzLlxuICAgKi9cbiAgcmVhZChwOiBVaW50OEFycmF5KTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgY29uc3QgcnIgPSB0aGlzLnJlYWRTeW5jKHApO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocnIpO1xuICB9XG5cbiAgd3JpdGVTeW5jKHA6IFVpbnQ4QXJyYXkpOiBudW1iZXIge1xuICAgIGNvbnN0IG0gPSB0aGlzLiNncm93KHAuYnl0ZUxlbmd0aCk7XG4gICAgcmV0dXJuIGNvcHkocCwgdGhpcy4jYnVmLCBtKTtcbiAgfVxuXG4gIC8qKiBOT1RFOiBUaGlzIG1ldGhvZHMgd3JpdGVzIGJ5dGVzIHN5bmNocm9ub3VzbHk7IGl0J3MgcHJvdmlkZWQgZm9yXG4gICAqIGNvbXBhdGliaWxpdHkgd2l0aCBgV3JpdGVyYCBpbnRlcmZhY2UuICovXG4gIHdyaXRlKHA6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IG4gPSB0aGlzLndyaXRlU3luYyhwKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4pO1xuICB9XG5cbiAgI2dyb3cobjogbnVtYmVyKSB7XG4gICAgY29uc3QgbSA9IHRoaXMubGVuZ3RoO1xuICAgIC8vIElmIGJ1ZmZlciBpcyBlbXB0eSwgcmVzZXQgdG8gcmVjb3ZlciBzcGFjZS5cbiAgICBpZiAobSA9PT0gMCAmJiB0aGlzLiNvZmYgIT09IDApIHtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gICAgLy8gRmFzdDogVHJ5IHRvIGdyb3cgYnkgbWVhbnMgb2YgYSByZXNsaWNlLlxuICAgIGNvbnN0IGkgPSB0aGlzLiN0cnlHcm93QnlSZXNsaWNlKG4pO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgICBjb25zdCBjID0gdGhpcy5jYXBhY2l0eTtcbiAgICBpZiAobiA8PSBNYXRoLmZsb29yKGMgLyAyKSAtIG0pIHtcbiAgICAgIC8vIFdlIGNhbiBzbGlkZSB0aGluZ3MgZG93biBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYSBuZXdcbiAgICAgIC8vIEFycmF5QnVmZmVyLiBXZSBvbmx5IG5lZWQgbStuIDw9IGMgdG8gc2xpZGUsIGJ1dFxuICAgICAgLy8gd2UgaW5zdGVhZCBsZXQgY2FwYWNpdHkgZ2V0IHR3aWNlIGFzIGxhcmdlIHNvIHdlXG4gICAgICAvLyBkb24ndCBzcGVuZCBhbGwgb3VyIHRpbWUgY29weWluZy5cbiAgICAgIGNvcHkodGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI29mZiksIHRoaXMuI2J1Zik7XG4gICAgfSBlbHNlIGlmIChjICsgbiA+IE1BWF9TSVpFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYnVmZmVyIGNhbm5vdCBiZSBncm93biBiZXlvbmQgdGhlIG1heGltdW0gc2l6ZS5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vdCBlbm91Z2ggc3BhY2UgYW55d2hlcmUsIHdlIG5lZWQgdG8gYWxsb2NhdGUuXG4gICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShNYXRoLm1pbigyICogYyArIG4sIE1BWF9TSVpFKSk7XG4gICAgICBjb3B5KHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNvZmYpLCBidWYpO1xuICAgICAgdGhpcy4jYnVmID0gYnVmO1xuICAgIH1cbiAgICAvLyBSZXN0b3JlIHRoaXMuI29mZiBhbmQgbGVuKHRoaXMuI2J1ZikuXG4gICAgdGhpcy4jb2ZmID0gMDtcbiAgICB0aGlzLiNyZXNsaWNlKE1hdGgubWluKG0gKyBuLCBNQVhfU0laRSkpO1xuICAgIHJldHVybiBtO1xuICB9XG5cbiAgLyoqIEdyb3dzIHRoZSBidWZmZXIncyBjYXBhY2l0eSwgaWYgbmVjZXNzYXJ5LCB0byBndWFyYW50ZWUgc3BhY2UgZm9yXG4gICAqIGFub3RoZXIgYG5gIGJ5dGVzLiBBZnRlciBgLmdyb3cobilgLCBhdCBsZWFzdCBgbmAgYnl0ZXMgY2FuIGJlIHdyaXR0ZW4gdG9cbiAgICogdGhlIGJ1ZmZlciB3aXRob3V0IGFub3RoZXIgYWxsb2NhdGlvbi4gSWYgYG5gIGlzIG5lZ2F0aXZlLCBgLmdyb3coKWAgd2lsbFxuICAgKiB0aHJvdy4gSWYgdGhlIGJ1ZmZlciBjYW4ndCBncm93IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAqXG4gICAqIEJhc2VkIG9uIEdvIExhbmcnc1xuICAgKiBbQnVmZmVyLkdyb3ddKGh0dHBzOi8vZ29sYW5nLm9yZy9wa2cvYnl0ZXMvI0J1ZmZlci5Hcm93KS4gKi9cbiAgZ3JvdyhuOiBudW1iZXIpIHtcbiAgICBpZiAobiA8IDApIHtcbiAgICAgIHRocm93IEVycm9yKFwiQnVmZmVyLmdyb3c6IG5lZ2F0aXZlIGNvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBtID0gdGhpcy4jZ3JvdyhuKTtcbiAgICB0aGlzLiNyZXNsaWNlKG0pO1xuICB9XG5cbiAgLyoqIFJlYWRzIGRhdGEgZnJvbSBgcmAgdW50aWwgRU9GIChgbnVsbGApIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBidWZmZXIsXG4gICAqIGdyb3dpbmcgdGhlIGJ1ZmZlciBhcyBuZWVkZWQuIEl0IHJlc29sdmVzIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC5cbiAgICogSWYgdGhlIGJ1ZmZlciBiZWNvbWVzIHRvbyBsYXJnZSwgYC5yZWFkRnJvbSgpYCB3aWxsIHJlamVjdCB3aXRoIGFuIGVycm9yLlxuICAgKlxuICAgKiBCYXNlZCBvbiBHbyBMYW5nJ3NcbiAgICogW0J1ZmZlci5SZWFkRnJvbV0oaHR0cHM6Ly9nb2xhbmcub3JnL3BrZy9ieXRlcy8jQnVmZmVyLlJlYWRGcm9tKS4gKi9cbiAgYXN5bmMgcmVhZEZyb20ocjogUmVhZGVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgbiA9IDA7XG4gICAgY29uc3QgdG1wID0gbmV3IFVpbnQ4QXJyYXkoTUlOX1JFQUQpO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBzaG91bGRHcm93ID0gdGhpcy5jYXBhY2l0eSAtIHRoaXMubGVuZ3RoIDwgTUlOX1JFQUQ7XG4gICAgICAvLyByZWFkIGludG8gdG1wIGJ1ZmZlciBpZiB0aGVyZSdzIG5vdCBlbm91Z2ggcm9vbVxuICAgICAgLy8gb3RoZXJ3aXNlIHJlYWQgZGlyZWN0bHkgaW50byB0aGUgaW50ZXJuYWwgYnVmZmVyXG4gICAgICBjb25zdCBidWYgPSBzaG91bGRHcm93XG4gICAgICAgID8gdG1wXG4gICAgICAgIDogbmV3IFVpbnQ4QXJyYXkodGhpcy4jYnVmLmJ1ZmZlciwgdGhpcy5sZW5ndGgpO1xuXG4gICAgICBjb25zdCBucmVhZCA9IGF3YWl0IHIucmVhZChidWYpO1xuICAgICAgaWYgKG5yZWFkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuXG4gICAgICAvLyB3cml0ZSB3aWxsIGdyb3cgaWYgbmVlZGVkXG4gICAgICBpZiAoc2hvdWxkR3JvdykgdGhpcy53cml0ZVN5bmMoYnVmLnN1YmFycmF5KDAsIG5yZWFkKSk7XG4gICAgICBlbHNlIHRoaXMuI3Jlc2xpY2UodGhpcy5sZW5ndGggKyBucmVhZCk7XG5cbiAgICAgIG4gKz0gbnJlYWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlYWRzIGRhdGEgZnJvbSBgcmAgdW50aWwgRU9GIChgbnVsbGApIGFuZCBhcHBlbmRzIGl0IHRvIHRoZSBidWZmZXIsXG4gICAqIGdyb3dpbmcgdGhlIGJ1ZmZlciBhcyBuZWVkZWQuIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLiBJZiB0aGVcbiAgICogYnVmZmVyIGJlY29tZXMgdG9vIGxhcmdlLCBgLnJlYWRGcm9tU3luYygpYCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgKlxuICAgKiBCYXNlZCBvbiBHbyBMYW5nJ3NcbiAgICogW0J1ZmZlci5SZWFkRnJvbV0oaHR0cHM6Ly9nb2xhbmcub3JnL3BrZy9ieXRlcy8jQnVmZmVyLlJlYWRGcm9tKS4gKi9cbiAgcmVhZEZyb21TeW5jKHI6IFJlYWRlclN5bmMpOiBudW1iZXIge1xuICAgIGxldCBuID0gMDtcbiAgICBjb25zdCB0bXAgPSBuZXcgVWludDhBcnJheShNSU5fUkVBRCk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHNob3VsZEdyb3cgPSB0aGlzLmNhcGFjaXR5IC0gdGhpcy5sZW5ndGggPCBNSU5fUkVBRDtcbiAgICAgIC8vIHJlYWQgaW50byB0bXAgYnVmZmVyIGlmIHRoZXJlJ3Mgbm90IGVub3VnaCByb29tXG4gICAgICAvLyBvdGhlcndpc2UgcmVhZCBkaXJlY3RseSBpbnRvIHRoZSBpbnRlcm5hbCBidWZmZXJcbiAgICAgIGNvbnN0IGJ1ZiA9IHNob3VsZEdyb3dcbiAgICAgICAgPyB0bXBcbiAgICAgICAgOiBuZXcgVWludDhBcnJheSh0aGlzLiNidWYuYnVmZmVyLCB0aGlzLmxlbmd0aCk7XG5cbiAgICAgIGNvbnN0IG5yZWFkID0gci5yZWFkU3luYyhidWYpO1xuICAgICAgaWYgKG5yZWFkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuXG4gICAgICAvLyB3cml0ZSB3aWxsIGdyb3cgaWYgbmVlZGVkXG4gICAgICBpZiAoc2hvdWxkR3JvdykgdGhpcy53cml0ZVN5bmMoYnVmLnN1YmFycmF5KDAsIG5yZWFkKSk7XG4gICAgICBlbHNlIHRoaXMuI3Jlc2xpY2UodGhpcy5sZW5ndGggKyBucmVhZCk7XG5cbiAgICAgIG4gKz0gbnJlYWQ7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfQlVGX1NJWkUgPSA0MDk2O1xuY29uc3QgTUlOX0JVRl9TSVpFID0gMTY7XG5jb25zdCBNQVhfQ09OU0VDVVRJVkVfRU1QVFlfUkVBRFMgPSAxMDA7XG5jb25zdCBDUiA9IFwiXFxyXCIuY2hhckNvZGVBdCgwKTtcbmNvbnN0IExGID0gXCJcXG5cIi5jaGFyQ29kZUF0KDApO1xuXG5leHBvcnQgY2xhc3MgQnVmZmVyRnVsbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBvdmVycmlkZSBuYW1lID0gXCJCdWZmZXJGdWxsRXJyb3JcIjtcbiAgY29uc3RydWN0b3IocHVibGljIHBhcnRpYWw6IFVpbnQ4QXJyYXkpIHtcbiAgICBzdXBlcihcIkJ1ZmZlciBmdWxsXCIpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXJ0aWFsUmVhZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBvdmVycmlkZSBuYW1lID0gXCJQYXJ0aWFsUmVhZEVycm9yXCI7XG4gIHBhcnRpYWw/OiBVaW50OEFycmF5O1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVuY291bnRlcmVkIFVuZXhwZWN0ZWRFb2YsIGRhdGEgb25seSBwYXJ0aWFsbHkgcmVhZFwiKTtcbiAgfVxufVxuXG4vKiogUmVzdWx0IHR5cGUgcmV0dXJuZWQgYnkgb2YgQnVmUmVhZGVyLnJlYWRMaW5lKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRMaW5lUmVzdWx0IHtcbiAgbGluZTogVWludDhBcnJheTtcbiAgbW9yZTogYm9vbGVhbjtcbn1cblxuLyoqIEJ1ZlJlYWRlciBpbXBsZW1lbnRzIGJ1ZmZlcmluZyBmb3IgYSBSZWFkZXIgb2JqZWN0LiAqL1xuZXhwb3J0IGNsYXNzIEJ1ZlJlYWRlciBpbXBsZW1lbnRzIFJlYWRlciB7XG4gICNidWYhOiBVaW50OEFycmF5O1xuICAjcmQhOiBSZWFkZXI7IC8vIFJlYWRlciBwcm92aWRlZCBieSBjYWxsZXIuXG4gICNyID0gMDsgLy8gYnVmIHJlYWQgcG9zaXRpb24uXG4gICN3ID0gMDsgLy8gYnVmIHdyaXRlIHBvc2l0aW9uLlxuICAjZW9mID0gZmFsc2U7XG4gIC8vIHByaXZhdGUgbGFzdEJ5dGU6IG51bWJlcjtcbiAgLy8gcHJpdmF0ZSBsYXN0Q2hhclNpemU6IG51bWJlcjtcblxuICAvKiogcmV0dXJuIG5ldyBCdWZSZWFkZXIgdW5sZXNzIHIgaXMgQnVmUmVhZGVyICovXG4gIHN0YXRpYyBjcmVhdGUocjogUmVhZGVyLCBzaXplOiBudW1iZXIgPSBERUZBVUxUX0JVRl9TSVpFKTogQnVmUmVhZGVyIHtcbiAgICByZXR1cm4gciBpbnN0YW5jZW9mIEJ1ZlJlYWRlciA/IHIgOiBuZXcgQnVmUmVhZGVyKHIsIHNpemUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocmQ6IFJlYWRlciwgc2l6ZTogbnVtYmVyID0gREVGQVVMVF9CVUZfU0laRSkge1xuICAgIGlmIChzaXplIDwgTUlOX0JVRl9TSVpFKSB7XG4gICAgICBzaXplID0gTUlOX0JVRl9TSVpFO1xuICAgIH1cbiAgICB0aGlzLiNyZXNldChuZXcgVWludDhBcnJheShzaXplKSwgcmQpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHVuZGVybHlpbmcgYnVmZmVyIGluIGJ5dGVzLiAqL1xuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2J1Zi5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgYnVmZmVyZWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jdyAtIHRoaXMuI3I7XG4gIH1cblxuICAvLyBSZWFkcyBhIG5ldyBjaHVuayBpbnRvIHRoZSBidWZmZXIuXG4gICNmaWxsID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIFNsaWRlIGV4aXN0aW5nIGRhdGEgdG8gYmVnaW5uaW5nLlxuICAgIGlmICh0aGlzLiNyID4gMCkge1xuICAgICAgdGhpcy4jYnVmLmNvcHlXaXRoaW4oMCwgdGhpcy4jciwgdGhpcy4jdyk7XG4gICAgICB0aGlzLiN3IC09IHRoaXMuI3I7XG4gICAgICB0aGlzLiNyID0gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jdyA+PSB0aGlzLiNidWYuYnl0ZUxlbmd0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJidWZpbzogdHJpZWQgdG8gZmlsbCBmdWxsIGJ1ZmZlclwiKTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIG5ldyBkYXRhOiB0cnkgYSBsaW1pdGVkIG51bWJlciBvZiB0aW1lcy5cbiAgICBmb3IgKGxldCBpID0gTUFYX0NPTlNFQ1VUSVZFX0VNUFRZX1JFQURTOyBpID4gMDsgaS0tKSB7XG4gICAgICBjb25zdCByciA9IGF3YWl0IHRoaXMuI3JkLnJlYWQodGhpcy4jYnVmLnN1YmFycmF5KHRoaXMuI3cpKTtcbiAgICAgIGlmIChyciA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLiNlb2YgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhc3NlcnQocnIgPj0gMCwgXCJuZWdhdGl2ZSByZWFkXCIpO1xuICAgICAgdGhpcy4jdyArPSBycjtcbiAgICAgIGlmIChyciA+IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBObyBwcm9ncmVzcyBhZnRlciAke01BWF9DT05TRUNVVElWRV9FTVBUWV9SRUFEU30gcmVhZCgpIGNhbGxzYCxcbiAgICApO1xuICB9O1xuXG4gIC8qKiBEaXNjYXJkcyBhbnkgYnVmZmVyZWQgZGF0YSwgcmVzZXRzIGFsbCBzdGF0ZSwgYW5kIHN3aXRjaGVzXG4gICAqIHRoZSBidWZmZXJlZCByZWFkZXIgdG8gcmVhZCBmcm9tIHIuXG4gICAqL1xuICByZXNldChyOiBSZWFkZXIpIHtcbiAgICB0aGlzLiNyZXNldCh0aGlzLiNidWYsIHIpO1xuICB9XG5cbiAgI3Jlc2V0ID0gKGJ1ZjogVWludDhBcnJheSwgcmQ6IFJlYWRlcikgPT4ge1xuICAgIHRoaXMuI2J1ZiA9IGJ1ZjtcbiAgICB0aGlzLiNyZCA9IHJkO1xuICAgIHRoaXMuI2VvZiA9IGZhbHNlO1xuICAgIC8vIHRoaXMubGFzdEJ5dGUgPSAtMTtcbiAgICAvLyB0aGlzLmxhc3RDaGFyU2l6ZSA9IC0xO1xuICB9O1xuXG4gIC8qKiByZWFkcyBkYXRhIGludG8gcC5cbiAgICogSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgaW50byBwLlxuICAgKiBUaGUgYnl0ZXMgYXJlIHRha2VuIGZyb20gYXQgbW9zdCBvbmUgUmVhZCBvbiB0aGUgdW5kZXJseWluZyBSZWFkZXIsXG4gICAqIGhlbmNlIG4gbWF5IGJlIGxlc3MgdGhhbiBsZW4ocCkuXG4gICAqIFRvIHJlYWQgZXhhY3RseSBsZW4ocCkgYnl0ZXMsIHVzZSBpby5SZWFkRnVsbChiLCBwKS5cbiAgICovXG4gIGFzeW5jIHJlYWQocDogVWludDhBcnJheSk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuICAgIGxldCBycjogbnVtYmVyIHwgbnVsbCA9IHAuYnl0ZUxlbmd0aDtcbiAgICBpZiAocC5ieXRlTGVuZ3RoID09PSAwKSByZXR1cm4gcnI7XG5cbiAgICBpZiAodGhpcy4jciA9PT0gdGhpcy4jdykge1xuICAgICAgaWYgKHAuYnl0ZUxlbmd0aCA+PSB0aGlzLiNidWYuYnl0ZUxlbmd0aCkge1xuICAgICAgICAvLyBMYXJnZSByZWFkLCBlbXB0eSBidWZmZXIuXG4gICAgICAgIC8vIFJlYWQgZGlyZWN0bHkgaW50byBwIHRvIGF2b2lkIGNvcHkuXG4gICAgICAgIGNvbnN0IHJyID0gYXdhaXQgdGhpcy4jcmQucmVhZChwKTtcbiAgICAgICAgY29uc3QgbnJlYWQgPSByciA/PyAwO1xuICAgICAgICBhc3NlcnQobnJlYWQgPj0gMCwgXCJuZWdhdGl2ZSByZWFkXCIpO1xuICAgICAgICAvLyBpZiAocnIubnJlYWQgPiAwKSB7XG4gICAgICAgIC8vICAgdGhpcy5sYXN0Qnl0ZSA9IHBbcnIubnJlYWQgLSAxXTtcbiAgICAgICAgLy8gICB0aGlzLmxhc3RDaGFyU2l6ZSA9IC0xO1xuICAgICAgICAvLyB9XG4gICAgICAgIHJldHVybiBycjtcbiAgICAgIH1cblxuICAgICAgLy8gT25lIHJlYWQuXG4gICAgICAvLyBEbyBub3QgdXNlIHRoaXMuZmlsbCwgd2hpY2ggd2lsbCBsb29wLlxuICAgICAgdGhpcy4jciA9IDA7XG4gICAgICB0aGlzLiN3ID0gMDtcbiAgICAgIHJyID0gYXdhaXQgdGhpcy4jcmQucmVhZCh0aGlzLiNidWYpO1xuICAgICAgaWYgKHJyID09PSAwIHx8IHJyID09PSBudWxsKSByZXR1cm4gcnI7XG4gICAgICBhc3NlcnQocnIgPj0gMCwgXCJuZWdhdGl2ZSByZWFkXCIpO1xuICAgICAgdGhpcy4jdyArPSBycjtcbiAgICB9XG5cbiAgICAvLyBjb3B5IGFzIG11Y2ggYXMgd2UgY2FuXG4gICAgY29uc3QgY29waWVkID0gY29weSh0aGlzLiNidWYuc3ViYXJyYXkodGhpcy4jciwgdGhpcy4jdyksIHAsIDApO1xuICAgIHRoaXMuI3IgKz0gY29waWVkO1xuICAgIC8vIHRoaXMubGFzdEJ5dGUgPSB0aGlzLmJ1Zlt0aGlzLnIgLSAxXTtcbiAgICAvLyB0aGlzLmxhc3RDaGFyU2l6ZSA9IC0xO1xuICAgIHJldHVybiBjb3BpZWQ7XG4gIH1cblxuICAvKiogcmVhZHMgZXhhY3RseSBgcC5sZW5ndGhgIGJ5dGVzIGludG8gYHBgLlxuICAgKlxuICAgKiBJZiBzdWNjZXNzZnVsLCBgcGAgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIElmIHRoZSBlbmQgb2YgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGhhcyBiZWVuIHJlYWNoZWQsIGFuZCB0aGVyZSBhcmUgbm8gbW9yZVxuICAgKiBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlciwgYHJlYWRGdWxsKClgIHJldHVybnMgYG51bGxgIGluc3RlYWQuXG4gICAqXG4gICAqIEFuIGVycm9yIGlzIHRocm93biBpZiBzb21lIGJ5dGVzIGNvdWxkIGJlIHJlYWQsIGJ1dCBub3QgZW5vdWdoIHRvIGZpbGwgYHBgXG4gICAqIGVudGlyZWx5IGJlZm9yZSB0aGUgdW5kZXJseWluZyBzdHJlYW0gcmVwb3J0ZWQgYW4gZXJyb3Igb3IgRU9GLiBBbnkgZXJyb3JcbiAgICogdGhyb3duIHdpbGwgaGF2ZSBhIGBwYXJ0aWFsYCBwcm9wZXJ0eSB0aGF0IGluZGljYXRlcyB0aGUgc2xpY2Ugb2YgdGhlXG4gICAqIGJ1ZmZlciB0aGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBmaWxsZWQgd2l0aCBkYXRhLlxuICAgKlxuICAgKiBQb3J0ZWQgZnJvbSBodHRwczovL2dvbGFuZy5vcmcvcGtnL2lvLyNSZWFkRnVsbFxuICAgKi9cbiAgYXN5bmMgcmVhZEZ1bGwocDogVWludDhBcnJheSk6IFByb21pc2U8VWludDhBcnJheSB8IG51bGw+IHtcbiAgICBsZXQgYnl0ZXNSZWFkID0gMDtcbiAgICB3aGlsZSAoYnl0ZXNSZWFkIDwgcC5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJyID0gYXdhaXQgdGhpcy5yZWFkKHAuc3ViYXJyYXkoYnl0ZXNSZWFkKSk7XG4gICAgICAgIGlmIChyciA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmIChieXRlc1JlYWQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFydGlhbFJlYWRFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBieXRlc1JlYWQgKz0gcnI7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFBhcnRpYWxSZWFkRXJyb3IpIHtcbiAgICAgICAgICBlcnIucGFydGlhbCA9IHAuc3ViYXJyYXkoMCwgYnl0ZXNSZWFkKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGNvbnN0IGUgPSBuZXcgUGFydGlhbFJlYWRFcnJvcigpO1xuICAgICAgICAgIGUucGFydGlhbCA9IHAuc3ViYXJyYXkoMCwgYnl0ZXNSZWFkKTtcbiAgICAgICAgICBlLnN0YWNrID0gZXJyLnN0YWNrO1xuICAgICAgICAgIGUubWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGUuY2F1c2UgPSBlcnIuY2F1c2U7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgbmV4dCBieXRlIFswLCAyNTVdIG9yIGBudWxsYC4gKi9cbiAgYXN5bmMgcmVhZEJ5dGUoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgd2hpbGUgKHRoaXMuI3IgPT09IHRoaXMuI3cpIHtcbiAgICAgIGlmICh0aGlzLiNlb2YpIHJldHVybiBudWxsO1xuICAgICAgYXdhaXQgdGhpcy4jZmlsbCgpOyAvLyBidWZmZXIgaXMgZW1wdHkuXG4gICAgfVxuICAgIGNvbnN0IGMgPSB0aGlzLiNidWZbdGhpcy4jcl07XG4gICAgdGhpcy4jcisrO1xuICAgIC8vIHRoaXMubGFzdEJ5dGUgPSBjO1xuICAgIHJldHVybiBjO1xuICB9XG5cbiAgLyoqIHJlYWRTdHJpbmcoKSByZWFkcyB1bnRpbCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBkZWxpbSBpbiB0aGUgaW5wdXQsXG4gICAqIHJldHVybmluZyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBkYXRhIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGRlbGltaXRlci5cbiAgICogSWYgUmVhZFN0cmluZyBlbmNvdW50ZXJzIGFuIGVycm9yIGJlZm9yZSBmaW5kaW5nIGEgZGVsaW1pdGVyLFxuICAgKiBpdCByZXR1cm5zIHRoZSBkYXRhIHJlYWQgYmVmb3JlIHRoZSBlcnJvciBhbmQgdGhlIGVycm9yIGl0c2VsZlxuICAgKiAob2Z0ZW4gYG51bGxgKS5cbiAgICogUmVhZFN0cmluZyByZXR1cm5zIGVyciAhPSBuaWwgaWYgYW5kIG9ubHkgaWYgdGhlIHJldHVybmVkIGRhdGEgZG9lcyBub3QgZW5kXG4gICAqIGluIGRlbGltLlxuICAgKiBGb3Igc2ltcGxlIHVzZXMsIGEgU2Nhbm5lciBtYXkgYmUgbW9yZSBjb252ZW5pZW50LlxuICAgKi9cbiAgYXN5bmMgcmVhZFN0cmluZyhkZWxpbTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKGRlbGltLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVsaW1pdGVyIHNob3VsZCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXJcIik7XG4gICAgfVxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMucmVhZFNsaWNlKGRlbGltLmNoYXJDb2RlQXQoMCkpO1xuICAgIGlmIChidWZmZXIgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnVmZmVyKTtcbiAgfVxuXG4gIC8qKiBgcmVhZExpbmUoKWAgaXMgYSBsb3ctbGV2ZWwgbGluZS1yZWFkaW5nIHByaW1pdGl2ZS4gTW9zdCBjYWxsZXJzIHNob3VsZFxuICAgKiB1c2UgYHJlYWRTdHJpbmcoJ1xcbicpYCBpbnN0ZWFkIG9yIHVzZSBhIFNjYW5uZXIuXG4gICAqXG4gICAqIGByZWFkTGluZSgpYCB0cmllcyB0byByZXR1cm4gYSBzaW5nbGUgbGluZSwgbm90IGluY2x1ZGluZyB0aGUgZW5kLW9mLWxpbmVcbiAgICogYnl0ZXMuIElmIHRoZSBsaW5lIHdhcyB0b28gbG9uZyBmb3IgdGhlIGJ1ZmZlciB0aGVuIGBtb3JlYCBpcyBzZXQgYW5kIHRoZVxuICAgKiBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgaXMgcmV0dXJuZWQuIFRoZSByZXN0IG9mIHRoZSBsaW5lIHdpbGwgYmUgcmV0dXJuZWRcbiAgICogZnJvbSBmdXR1cmUgY2FsbHMuIGBtb3JlYCB3aWxsIGJlIGZhbHNlIHdoZW4gcmV0dXJuaW5nIHRoZSBsYXN0IGZyYWdtZW50XG4gICAqIG9mIHRoZSBsaW5lLiBUaGUgcmV0dXJuZWQgYnVmZmVyIGlzIG9ubHkgdmFsaWQgdW50aWwgdGhlIG5leHQgY2FsbCB0b1xuICAgKiBgcmVhZExpbmUoKWAuXG4gICAqXG4gICAqIFRoZSB0ZXh0IHJldHVybmVkIGZyb20gUmVhZExpbmUgZG9lcyBub3QgaW5jbHVkZSB0aGUgbGluZSBlbmQgKFwiXFxyXFxuXCIgb3JcbiAgICogXCJcXG5cIikuXG4gICAqXG4gICAqIFdoZW4gdGhlIGVuZCBvZiB0aGUgdW5kZXJseWluZyBzdHJlYW0gaXMgcmVhY2hlZCwgdGhlIGZpbmFsIGJ5dGVzIGluIHRoZVxuICAgKiBzdHJlYW0gYXJlIHJldHVybmVkLiBObyBpbmRpY2F0aW9uIG9yIGVycm9yIGlzIGdpdmVuIGlmIHRoZSBpbnB1dCBlbmRzXG4gICAqIHdpdGhvdXQgYSBmaW5hbCBsaW5lIGVuZC4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB0cmFpbGluZyBieXRlcyB0byByZWFkLFxuICAgKiBgcmVhZExpbmUoKWAgcmV0dXJucyBgbnVsbGAuXG4gICAqXG4gICAqIENhbGxpbmcgYHVucmVhZEJ5dGUoKWAgYWZ0ZXIgYHJlYWRMaW5lKClgIHdpbGwgYWx3YXlzIHVucmVhZCB0aGUgbGFzdCBieXRlXG4gICAqIHJlYWQgKHBvc3NpYmx5IGEgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0aGUgbGluZSBlbmQpIGV2ZW4gaWYgdGhhdCBieXRlIGlzXG4gICAqIG5vdCBwYXJ0IG9mIHRoZSBsaW5lIHJldHVybmVkIGJ5IGByZWFkTGluZSgpYC5cbiAgICovXG4gIGFzeW5jIHJlYWRMaW5lKCk6IFByb21pc2U8UmVhZExpbmVSZXN1bHQgfCBudWxsPiB7XG4gICAgbGV0IGxpbmU6IFVpbnQ4QXJyYXkgfCBudWxsID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBsaW5lID0gYXdhaXQgdGhpcy5yZWFkU2xpY2UoTEYpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJ0aWFsO1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFBhcnRpYWxSZWFkRXJyb3IpIHtcbiAgICAgICAgcGFydGlhbCA9IGVyci5wYXJ0aWFsO1xuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgcGFydGlhbCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXksXG4gICAgICAgICAgXCJidWZpbzogY2F1Z2h0IGVycm9yIGZyb20gYHJlYWRTbGljZSgpYCB3aXRob3V0IGBwYXJ0aWFsYCBwcm9wZXJ0eVwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBEb24ndCB0aHJvdyBpZiBgcmVhZFNsaWNlKClgIGZhaWxlZCB3aXRoIGBCdWZmZXJGdWxsRXJyb3JgLCBpbnN0ZWFkIHdlXG4gICAgICAvLyBqdXN0IHJldHVybiB3aGF0ZXZlciBpcyBhdmFpbGFibGUgYW5kIHNldCB0aGUgYG1vcmVgIGZsYWcuXG4gICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBCdWZmZXJGdWxsRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgcGFydGlhbCA9IGVyci5wYXJ0aWFsO1xuXG4gICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgXCJcXHJcXG5cIiBzdHJhZGRsZXMgdGhlIGJ1ZmZlci5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuI2VvZiAmJiBwYXJ0aWFsICYmXG4gICAgICAgIHBhcnRpYWwuYnl0ZUxlbmd0aCA+IDAgJiZcbiAgICAgICAgcGFydGlhbFtwYXJ0aWFsLmJ5dGVMZW5ndGggLSAxXSA9PT0gQ1JcbiAgICAgICkge1xuICAgICAgICAvLyBQdXQgdGhlICdcXHInIGJhY2sgb24gYnVmIGFuZCBkcm9wIGl0IGZyb20gbGluZS5cbiAgICAgICAgLy8gTGV0IHRoZSBuZXh0IGNhbGwgdG8gUmVhZExpbmUgY2hlY2sgZm9yIFwiXFxyXFxuXCIuXG4gICAgICAgIGFzc2VydCh0aGlzLiNyID4gMCwgXCJidWZpbzogdHJpZWQgdG8gcmV3aW5kIHBhc3Qgc3RhcnQgb2YgYnVmZmVyXCIpO1xuICAgICAgICB0aGlzLiNyLS07XG4gICAgICAgIHBhcnRpYWwgPSBwYXJ0aWFsLnN1YmFycmF5KDAsIHBhcnRpYWwuYnl0ZUxlbmd0aCAtIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFydGlhbCkge1xuICAgICAgICByZXR1cm4geyBsaW5lOiBwYXJ0aWFsLCBtb3JlOiAhdGhpcy4jZW9mIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxpbmUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChsaW5lLmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IGxpbmUsIG1vcmU6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgaWYgKGxpbmVbbGluZS5ieXRlTGVuZ3RoIC0gMV0gPT0gTEYpIHtcbiAgICAgIGxldCBkcm9wID0gMTtcbiAgICAgIGlmIChsaW5lLmJ5dGVMZW5ndGggPiAxICYmIGxpbmVbbGluZS5ieXRlTGVuZ3RoIC0gMl0gPT09IENSKSB7XG4gICAgICAgIGRyb3AgPSAyO1xuICAgICAgfVxuICAgICAgbGluZSA9IGxpbmUuc3ViYXJyYXkoMCwgbGluZS5ieXRlTGVuZ3RoIC0gZHJvcCk7XG4gICAgfVxuICAgIHJldHVybiB7IGxpbmUsIG1vcmU6IGZhbHNlIH07XG4gIH1cblxuICAvKiogYHJlYWRTbGljZSgpYCByZWFkcyB1bnRpbCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBgZGVsaW1gIGluIHRoZSBpbnB1dCxcbiAgICogcmV0dXJuaW5nIGEgc2xpY2UgcG9pbnRpbmcgYXQgdGhlIGJ5dGVzIGluIHRoZSBidWZmZXIuIFRoZSBieXRlcyBzdG9wXG4gICAqIGJlaW5nIHZhbGlkIGF0IHRoZSBuZXh0IHJlYWQuXG4gICAqXG4gICAqIElmIGByZWFkU2xpY2UoKWAgZW5jb3VudGVycyBhbiBlcnJvciBiZWZvcmUgZmluZGluZyBhIGRlbGltaXRlciwgb3IgdGhlXG4gICAqIGJ1ZmZlciBmaWxscyB3aXRob3V0IGZpbmRpbmcgYSBkZWxpbWl0ZXIsIGl0IHRocm93cyBhbiBlcnJvciB3aXRoIGFcbiAgICogYHBhcnRpYWxgIHByb3BlcnR5IHRoYXQgY29udGFpbnMgdGhlIGVudGlyZSBidWZmZXIuXG4gICAqXG4gICAqIElmIGByZWFkU2xpY2UoKWAgZW5jb3VudGVycyB0aGUgZW5kIG9mIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBhbmQgdGhlcmUgYXJlXG4gICAqIGFueSBieXRlcyBsZWZ0IGluIHRoZSBidWZmZXIsIHRoZSByZXN0IG9mIHRoZSBidWZmZXIgaXMgcmV0dXJuZWQuIEluIG90aGVyXG4gICAqIHdvcmRzLCBFT0YgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgYSBkZWxpbWl0ZXIuIE9uY2UgdGhlIGJ1ZmZlciBpcyBlbXB0eSxcbiAgICogaXQgcmV0dXJucyBgbnVsbGAuXG4gICAqXG4gICAqIEJlY2F1c2UgdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSBgcmVhZFNsaWNlKClgIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlXG4gICAqIG5leHQgSS9PIG9wZXJhdGlvbiwgbW9zdCBjbGllbnRzIHNob3VsZCB1c2UgYHJlYWRTdHJpbmcoKWAgaW5zdGVhZC5cbiAgICovXG4gIGFzeW5jIHJlYWRTbGljZShkZWxpbTogbnVtYmVyKTogUHJvbWlzZTxVaW50OEFycmF5IHwgbnVsbD4ge1xuICAgIGxldCBzID0gMDsgLy8gc2VhcmNoIHN0YXJ0IGluZGV4XG4gICAgbGV0IHNsaWNlOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIFNlYXJjaCBidWZmZXIuXG4gICAgICBsZXQgaSA9IHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNyICsgcywgdGhpcy4jdykuaW5kZXhPZihkZWxpbSk7XG4gICAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgIGkgKz0gcztcbiAgICAgICAgc2xpY2UgPSB0aGlzLiNidWYuc3ViYXJyYXkodGhpcy4jciwgdGhpcy4jciArIGkgKyAxKTtcbiAgICAgICAgdGhpcy4jciArPSBpICsgMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIEVPRj9cbiAgICAgIGlmICh0aGlzLiNlb2YpIHtcbiAgICAgICAgaWYgKHRoaXMuI3IgPT09IHRoaXMuI3cpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzbGljZSA9IHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNyLCB0aGlzLiN3KTtcbiAgICAgICAgdGhpcy4jciA9IHRoaXMuI3c7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWZmZXIgZnVsbD9cbiAgICAgIGlmICh0aGlzLmJ1ZmZlcmVkKCkgPj0gdGhpcy4jYnVmLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgdGhpcy4jciA9IHRoaXMuI3c7XG4gICAgICAgIC8vICM0NTIxIFRoZSBpbnRlcm5hbCBidWZmZXIgc2hvdWxkIG5vdCBiZSByZXVzZWQgYWNyb3NzIHJlYWRzIGJlY2F1c2UgaXQgY2F1c2VzIGNvcnJ1cHRpb24gb2YgZGF0YS5cbiAgICAgICAgY29uc3Qgb2xkYnVmID0gdGhpcy4jYnVmO1xuICAgICAgICBjb25zdCBuZXdidWYgPSB0aGlzLiNidWYuc2xpY2UoMCk7XG4gICAgICAgIHRoaXMuI2J1ZiA9IG5ld2J1ZjtcbiAgICAgICAgdGhyb3cgbmV3IEJ1ZmZlckZ1bGxFcnJvcihvbGRidWYpO1xuICAgICAgfVxuXG4gICAgICBzID0gdGhpcy4jdyAtIHRoaXMuI3I7IC8vIGRvIG5vdCByZXNjYW4gYXJlYSB3ZSBzY2FubmVkIGJlZm9yZVxuXG4gICAgICAvLyBCdWZmZXIgaXMgbm90IGZ1bGwuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLiNmaWxsKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFBhcnRpYWxSZWFkRXJyb3IpIHtcbiAgICAgICAgICBlcnIucGFydGlhbCA9IHNsaWNlO1xuICAgICAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgZSA9IG5ldyBQYXJ0aWFsUmVhZEVycm9yKCk7XG4gICAgICAgICAgZS5wYXJ0aWFsID0gc2xpY2U7XG4gICAgICAgICAgZS5zdGFjayA9IGVyci5zdGFjaztcbiAgICAgICAgICBlLm1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlLmNhdXNlID0gZXJyLmNhdXNlO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGxhc3QgYnl0ZSwgaWYgYW55LlxuICAgIC8vIGNvbnN0IGkgPSBzbGljZS5ieXRlTGVuZ3RoIC0gMTtcbiAgICAvLyBpZiAoaSA+PSAwKSB7XG4gICAgLy8gICB0aGlzLmxhc3RCeXRlID0gc2xpY2VbaV07XG4gICAgLy8gICB0aGlzLmxhc3RDaGFyU2l6ZSA9IC0xXG4gICAgLy8gfVxuXG4gICAgcmV0dXJuIHNsaWNlO1xuICB9XG5cbiAgLyoqIGBwZWVrKClgIHJldHVybnMgdGhlIG5leHQgYG5gIGJ5dGVzIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSByZWFkZXIuIFRoZVxuICAgKiBieXRlcyBzdG9wIGJlaW5nIHZhbGlkIGF0IHRoZSBuZXh0IHJlYWQgY2FsbC5cbiAgICpcbiAgICogV2hlbiB0aGUgZW5kIG9mIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBpcyByZWFjaGVkLCBidXQgdGhlcmUgYXJlIHVucmVhZFxuICAgKiBieXRlcyBsZWZ0IGluIHRoZSBidWZmZXIsIHRob3NlIGJ5dGVzIGFyZSByZXR1cm5lZC4gSWYgdGhlcmUgYXJlIG5vIGJ5dGVzXG4gICAqIGxlZnQgaW4gdGhlIGJ1ZmZlciwgaXQgcmV0dXJucyBgbnVsbGAuXG4gICAqXG4gICAqIElmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIGJlZm9yZSBgbmAgYnl0ZXMgYXJlIGF2YWlsYWJsZSwgYHBlZWsoKWAgdGhyb3dzXG4gICAqIGFuIGVycm9yIHdpdGggdGhlIGBwYXJ0aWFsYCBwcm9wZXJ0eSBzZXQgdG8gYSBzbGljZSBvZiB0aGUgYnVmZmVyIHRoYXRcbiAgICogY29udGFpbnMgdGhlIGJ5dGVzIHRoYXQgd2VyZSBhdmFpbGFibGUgYmVmb3JlIHRoZSBlcnJvciBvY2N1cnJlZC5cbiAgICovXG4gIGFzeW5jIHBlZWsobjogbnVtYmVyKTogUHJvbWlzZTxVaW50OEFycmF5IHwgbnVsbD4ge1xuICAgIGlmIChuIDwgMCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJuZWdhdGl2ZSBjb3VudFwiKTtcbiAgICB9XG5cbiAgICBsZXQgYXZhaWwgPSB0aGlzLiN3IC0gdGhpcy4jcjtcbiAgICB3aGlsZSAoYXZhaWwgPCBuICYmIGF2YWlsIDwgdGhpcy4jYnVmLmJ5dGVMZW5ndGggJiYgIXRoaXMuI2VvZikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy4jZmlsbCgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBQYXJ0aWFsUmVhZEVycm9yKSB7XG4gICAgICAgICAgZXJyLnBhcnRpYWwgPSB0aGlzLiNidWYuc3ViYXJyYXkodGhpcy4jciwgdGhpcy4jdyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBlID0gbmV3IFBhcnRpYWxSZWFkRXJyb3IoKTtcbiAgICAgICAgICBlLnBhcnRpYWwgPSB0aGlzLiNidWYuc3ViYXJyYXkodGhpcy4jciwgdGhpcy4jdyk7XG4gICAgICAgICAgZS5zdGFjayA9IGVyci5zdGFjaztcbiAgICAgICAgICBlLm1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlLmNhdXNlID0gZXJyLmNhdXNlO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgICBhdmFpbCA9IHRoaXMuI3cgLSB0aGlzLiNyO1xuICAgIH1cblxuICAgIGlmIChhdmFpbCA9PT0gMCAmJiB0aGlzLiNlb2YpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoYXZhaWwgPCBuICYmIHRoaXMuI2VvZikge1xuICAgICAgcmV0dXJuIHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNyLCB0aGlzLiNyICsgYXZhaWwpO1xuICAgIH0gZWxzZSBpZiAoYXZhaWwgPCBuKSB7XG4gICAgICB0aHJvdyBuZXcgQnVmZmVyRnVsbEVycm9yKHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNyLCB0aGlzLiN3KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1Zi5zdWJhcnJheSh0aGlzLiNyLCB0aGlzLiNyICsgbik7XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RCdWZCYXNlIHtcbiAgYnVmOiBVaW50OEFycmF5O1xuICB1c2VkQnVmZmVyQnl0ZXMgPSAwO1xuICBlcnI6IEVycm9yIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoYnVmOiBVaW50OEFycmF5KSB7XG4gICAgdGhpcy5idWYgPSBidWY7XG4gIH1cblxuICAvKiogU2l6ZSByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBpbiBieXRlcy4gKi9cbiAgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJ1Zi5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgLyoqIFJldHVybnMgaG93IG1hbnkgYnl0ZXMgYXJlIHVudXNlZCBpbiB0aGUgYnVmZmVyLiAqL1xuICBhdmFpbGFibGUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWYuYnl0ZUxlbmd0aCAtIHRoaXMudXNlZEJ1ZmZlckJ5dGVzO1xuICB9XG5cbiAgLyoqIGJ1ZmZlcmVkIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiB3cml0dGVuIGludG8gdGhlXG4gICAqIGN1cnJlbnQgYnVmZmVyLlxuICAgKi9cbiAgYnVmZmVyZWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy51c2VkQnVmZmVyQnl0ZXM7XG4gIH1cbn1cblxuLyoqIEJ1ZldyaXRlciBpbXBsZW1lbnRzIGJ1ZmZlcmluZyBmb3IgYW4gZGVuby5Xcml0ZXIgb2JqZWN0LlxuICogSWYgYW4gZXJyb3Igb2NjdXJzIHdyaXRpbmcgdG8gYSBXcml0ZXIsIG5vIG1vcmUgZGF0YSB3aWxsIGJlXG4gKiBhY2NlcHRlZCBhbmQgYWxsIHN1YnNlcXVlbnQgd3JpdGVzLCBhbmQgZmx1c2goKSwgd2lsbCByZXR1cm4gdGhlIGVycm9yLlxuICogQWZ0ZXIgYWxsIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiwgdGhlIGNsaWVudCBzaG91bGQgY2FsbCB0aGVcbiAqIGZsdXNoKCkgbWV0aG9kIHRvIGd1YXJhbnRlZSBhbGwgZGF0YSBoYXMgYmVlbiBmb3J3YXJkZWQgdG9cbiAqIHRoZSB1bmRlcmx5aW5nIGRlbm8uV3JpdGVyLlxuICovXG5leHBvcnQgY2xhc3MgQnVmV3JpdGVyIGV4dGVuZHMgQWJzdHJhY3RCdWZCYXNlIGltcGxlbWVudHMgV3JpdGVyIHtcbiAgI3dyaXRlcjogV3JpdGVyO1xuXG4gIC8qKiByZXR1cm4gbmV3IEJ1ZldyaXRlciB1bmxlc3Mgd3JpdGVyIGlzIEJ1ZldyaXRlciAqL1xuICBzdGF0aWMgY3JlYXRlKHdyaXRlcjogV3JpdGVyLCBzaXplOiBudW1iZXIgPSBERUZBVUxUX0JVRl9TSVpFKTogQnVmV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyIGluc3RhbmNlb2YgQnVmV3JpdGVyID8gd3JpdGVyIDogbmV3IEJ1ZldyaXRlcih3cml0ZXIsIHNpemUpO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod3JpdGVyOiBXcml0ZXIsIHNpemU6IG51bWJlciA9IERFRkFVTFRfQlVGX1NJWkUpIHtcbiAgICBzdXBlcihuZXcgVWludDhBcnJheShzaXplIDw9IDAgPyBERUZBVUxUX0JVRl9TSVpFIDogc2l6ZSkpO1xuICAgIHRoaXMuI3dyaXRlciA9IHdyaXRlcjtcbiAgfVxuXG4gIC8qKiBEaXNjYXJkcyBhbnkgdW5mbHVzaGVkIGJ1ZmZlcmVkIGRhdGEsIGNsZWFycyBhbnkgZXJyb3IsIGFuZFxuICAgKiByZXNldHMgYnVmZmVyIHRvIHdyaXRlIGl0cyBvdXRwdXQgdG8gdy5cbiAgICovXG4gIHJlc2V0KHc6IFdyaXRlcikge1xuICAgIHRoaXMuZXJyID0gbnVsbDtcbiAgICB0aGlzLnVzZWRCdWZmZXJCeXRlcyA9IDA7XG4gICAgdGhpcy4jd3JpdGVyID0gdztcbiAgfVxuXG4gIC8qKiBGbHVzaCB3cml0ZXMgYW55IGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIHVuZGVybHlpbmcgaW8uV3JpdGVyLiAqL1xuICBhc3luYyBmbHVzaCgpIHtcbiAgICBpZiAodGhpcy5lcnIgIT09IG51bGwpIHRocm93IHRoaXMuZXJyO1xuICAgIGlmICh0aGlzLnVzZWRCdWZmZXJCeXRlcyA9PT0gMCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLmJ1Zi5zdWJhcnJheSgwLCB0aGlzLnVzZWRCdWZmZXJCeXRlcyk7XG4gICAgICBsZXQgbndyaXR0ZW4gPSAwO1xuICAgICAgd2hpbGUgKG53cml0dGVuIDwgcC5sZW5ndGgpIHtcbiAgICAgICAgbndyaXR0ZW4gKz0gYXdhaXQgdGhpcy4jd3JpdGVyLndyaXRlKHAuc3ViYXJyYXkobndyaXR0ZW4pKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRoaXMuZXJyID0gZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdGhpcy5idWYgPSBuZXcgVWludDhBcnJheSh0aGlzLmJ1Zi5sZW5ndGgpO1xuICAgIHRoaXMudXNlZEJ1ZmZlckJ5dGVzID0gMDtcbiAgfVxuXG4gIC8qKiBXcml0ZXMgdGhlIGNvbnRlbnRzIG9mIGBkYXRhYCBpbnRvIHRoZSBidWZmZXIuICBJZiB0aGUgY29udGVudHMgd29uJ3QgZnVsbHlcbiAgICogZml0IGludG8gdGhlIGJ1ZmZlciwgdGhvc2UgYnl0ZXMgdGhhdCBjYW4gYXJlIGNvcGllZCBpbnRvIHRoZSBidWZmZXIsIHRoZVxuICAgKiBidWZmZXIgaXMgdGhlIGZsdXNoZWQgdG8gdGhlIHdyaXRlciBhbmQgdGhlIHJlbWFpbmluZyBieXRlcyBhcmUgY29waWVkIGludG9cbiAgICogdGhlIG5vdyBlbXB0eSBidWZmZXIuXG4gICAqXG4gICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoZSBidWZmZXIuXG4gICAqL1xuICBhc3luYyB3cml0ZShkYXRhOiBVaW50OEFycmF5KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAodGhpcy5lcnIgIT09IG51bGwpIHRocm93IHRoaXMuZXJyO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgICBsZXQgdG90YWxCeXRlc1dyaXR0ZW4gPSAwO1xuICAgIGxldCBudW1CeXRlc1dyaXR0ZW4gPSAwO1xuICAgIHdoaWxlIChkYXRhLmJ5dGVMZW5ndGggPiB0aGlzLmF2YWlsYWJsZSgpKSB7XG4gICAgICBpZiAodGhpcy5idWZmZXJlZCgpID09PSAwKSB7XG4gICAgICAgIC8vIExhcmdlIHdyaXRlLCBlbXB0eSBidWZmZXIuXG4gICAgICAgIC8vIFdyaXRlIGRpcmVjdGx5IGZyb20gZGF0YSB0byBhdm9pZCBjb3B5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIG51bUJ5dGVzV3JpdHRlbiA9IGF3YWl0IHRoaXMuI3dyaXRlci53cml0ZShkYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyID0gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtQnl0ZXNXcml0dGVuID0gY29weShkYXRhLCB0aGlzLmJ1ZiwgdGhpcy51c2VkQnVmZmVyQnl0ZXMpO1xuICAgICAgICB0aGlzLnVzZWRCdWZmZXJCeXRlcyArPSBudW1CeXRlc1dyaXR0ZW47XG4gICAgICAgIGF3YWl0IHRoaXMuZmx1c2goKTtcbiAgICAgIH1cbiAgICAgIHRvdGFsQnl0ZXNXcml0dGVuICs9IG51bUJ5dGVzV3JpdHRlbjtcbiAgICAgIGRhdGEgPSBkYXRhLnN1YmFycmF5KG51bUJ5dGVzV3JpdHRlbik7XG4gICAgfVxuXG4gICAgbnVtQnl0ZXNXcml0dGVuID0gY29weShkYXRhLCB0aGlzLmJ1ZiwgdGhpcy51c2VkQnVmZmVyQnl0ZXMpO1xuICAgIHRoaXMudXNlZEJ1ZmZlckJ5dGVzICs9IG51bUJ5dGVzV3JpdHRlbjtcbiAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBudW1CeXRlc1dyaXR0ZW47XG4gICAgcmV0dXJuIHRvdGFsQnl0ZXNXcml0dGVuO1xuICB9XG59XG5cbi8qKiBCdWZXcml0ZXJTeW5jIGltcGxlbWVudHMgYnVmZmVyaW5nIGZvciBhIGRlbm8uV3JpdGVyU3luYyBvYmplY3QuXG4gKiBJZiBhbiBlcnJvciBvY2N1cnMgd3JpdGluZyB0byBhIFdyaXRlclN5bmMsIG5vIG1vcmUgZGF0YSB3aWxsIGJlXG4gKiBhY2NlcHRlZCBhbmQgYWxsIHN1YnNlcXVlbnQgd3JpdGVzLCBhbmQgZmx1c2goKSwgd2lsbCByZXR1cm4gdGhlIGVycm9yLlxuICogQWZ0ZXIgYWxsIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiwgdGhlIGNsaWVudCBzaG91bGQgY2FsbCB0aGVcbiAqIGZsdXNoKCkgbWV0aG9kIHRvIGd1YXJhbnRlZSBhbGwgZGF0YSBoYXMgYmVlbiBmb3J3YXJkZWQgdG9cbiAqIHRoZSB1bmRlcmx5aW5nIGRlbm8uV3JpdGVyU3luYy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJ1ZldyaXRlclN5bmMgZXh0ZW5kcyBBYnN0cmFjdEJ1ZkJhc2UgaW1wbGVtZW50cyBXcml0ZXJTeW5jIHtcbiAgI3dyaXRlcjogV3JpdGVyU3luYztcblxuICAvKiogcmV0dXJuIG5ldyBCdWZXcml0ZXJTeW5jIHVubGVzcyB3cml0ZXIgaXMgQnVmV3JpdGVyU3luYyAqL1xuICBzdGF0aWMgY3JlYXRlKFxuICAgIHdyaXRlcjogV3JpdGVyU3luYyxcbiAgICBzaXplOiBudW1iZXIgPSBERUZBVUxUX0JVRl9TSVpFLFxuICApOiBCdWZXcml0ZXJTeW5jIHtcbiAgICByZXR1cm4gd3JpdGVyIGluc3RhbmNlb2YgQnVmV3JpdGVyU3luY1xuICAgICAgPyB3cml0ZXJcbiAgICAgIDogbmV3IEJ1ZldyaXRlclN5bmMod3JpdGVyLCBzaXplKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHdyaXRlcjogV3JpdGVyU3luYywgc2l6ZTogbnVtYmVyID0gREVGQVVMVF9CVUZfU0laRSkge1xuICAgIHN1cGVyKG5ldyBVaW50OEFycmF5KHNpemUgPD0gMCA/IERFRkFVTFRfQlVGX1NJWkUgOiBzaXplKSk7XG4gICAgdGhpcy4jd3JpdGVyID0gd3JpdGVyO1xuICB9XG5cbiAgLyoqIERpc2NhcmRzIGFueSB1bmZsdXNoZWQgYnVmZmVyZWQgZGF0YSwgY2xlYXJzIGFueSBlcnJvciwgYW5kXG4gICAqIHJlc2V0cyBidWZmZXIgdG8gd3JpdGUgaXRzIG91dHB1dCB0byB3LlxuICAgKi9cbiAgcmVzZXQodzogV3JpdGVyU3luYykge1xuICAgIHRoaXMuZXJyID0gbnVsbDtcbiAgICB0aGlzLnVzZWRCdWZmZXJCeXRlcyA9IDA7XG4gICAgdGhpcy4jd3JpdGVyID0gdztcbiAgfVxuXG4gIC8qKiBGbHVzaCB3cml0ZXMgYW55IGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIHVuZGVybHlpbmcgaW8uV3JpdGVyU3luYy4gKi9cbiAgZmx1c2goKSB7XG4gICAgaWYgKHRoaXMuZXJyICE9PSBudWxsKSB0aHJvdyB0aGlzLmVycjtcbiAgICBpZiAodGhpcy51c2VkQnVmZmVyQnl0ZXMgPT09IDApIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwID0gdGhpcy5idWYuc3ViYXJyYXkoMCwgdGhpcy51c2VkQnVmZmVyQnl0ZXMpO1xuICAgICAgbGV0IG53cml0dGVuID0gMDtcbiAgICAgIHdoaWxlIChud3JpdHRlbiA8IHAubGVuZ3RoKSB7XG4gICAgICAgIG53cml0dGVuICs9IHRoaXMuI3dyaXRlci53cml0ZVN5bmMocC5zdWJhcnJheShud3JpdHRlbikpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhpcy5lcnIgPSBlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZiA9IG5ldyBVaW50OEFycmF5KHRoaXMuYnVmLmxlbmd0aCk7XG4gICAgdGhpcy51c2VkQnVmZmVyQnl0ZXMgPSAwO1xuICB9XG5cbiAgLyoqIFdyaXRlcyB0aGUgY29udGVudHMgb2YgYGRhdGFgIGludG8gdGhlIGJ1ZmZlci4gIElmIHRoZSBjb250ZW50cyB3b24ndCBmdWxseVxuICAgKiBmaXQgaW50byB0aGUgYnVmZmVyLCB0aG9zZSBieXRlcyB0aGF0IGNhbiBhcmUgY29waWVkIGludG8gdGhlIGJ1ZmZlciwgdGhlXG4gICAqIGJ1ZmZlciBpcyB0aGUgZmx1c2hlZCB0byB0aGUgd3JpdGVyIGFuZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGFyZSBjb3BpZWQgaW50b1xuICAgKiB0aGUgbm93IGVtcHR5IGJ1ZmZlci5cbiAgICpcbiAgICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlci5cbiAgICovXG4gIHdyaXRlU3luYyhkYXRhOiBVaW50OEFycmF5KTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5lcnIgIT09IG51bGwpIHRocm93IHRoaXMuZXJyO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgICBsZXQgdG90YWxCeXRlc1dyaXR0ZW4gPSAwO1xuICAgIGxldCBudW1CeXRlc1dyaXR0ZW4gPSAwO1xuICAgIHdoaWxlIChkYXRhLmJ5dGVMZW5ndGggPiB0aGlzLmF2YWlsYWJsZSgpKSB7XG4gICAgICBpZiAodGhpcy5idWZmZXJlZCgpID09PSAwKSB7XG4gICAgICAgIC8vIExhcmdlIHdyaXRlLCBlbXB0eSBidWZmZXIuXG4gICAgICAgIC8vIFdyaXRlIGRpcmVjdGx5IGZyb20gZGF0YSB0byBhdm9pZCBjb3B5LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIG51bUJ5dGVzV3JpdHRlbiA9IHRoaXMuI3dyaXRlci53cml0ZVN5bmMoZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmVyciA9IGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG51bUJ5dGVzV3JpdHRlbiA9IGNvcHkoZGF0YSwgdGhpcy5idWYsIHRoaXMudXNlZEJ1ZmZlckJ5dGVzKTtcbiAgICAgICAgdGhpcy51c2VkQnVmZmVyQnl0ZXMgKz0gbnVtQnl0ZXNXcml0dGVuO1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgICB0b3RhbEJ5dGVzV3JpdHRlbiArPSBudW1CeXRlc1dyaXR0ZW47XG4gICAgICBkYXRhID0gZGF0YS5zdWJhcnJheShudW1CeXRlc1dyaXR0ZW4pO1xuICAgIH1cblxuICAgIG51bUJ5dGVzV3JpdHRlbiA9IGNvcHkoZGF0YSwgdGhpcy5idWYsIHRoaXMudXNlZEJ1ZmZlckJ5dGVzKTtcbiAgICB0aGlzLnVzZWRCdWZmZXJCeXRlcyArPSBudW1CeXRlc1dyaXR0ZW47XG4gICAgdG90YWxCeXRlc1dyaXR0ZW4gKz0gbnVtQnl0ZXNXcml0dGVuO1xuICAgIHJldHVybiB0b3RhbEJ5dGVzV3JpdHRlbjtcbiAgfVxufVxuXG4vKiogR2VuZXJhdGUgbG9uZ2VzdCBwcm9wZXIgcHJlZml4IHdoaWNoIGlzIGFsc28gc3VmZml4IGFycmF5LiAqL1xuZnVuY3Rpb24gY3JlYXRlTFBTKHBhdDogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICBjb25zdCBscHMgPSBuZXcgVWludDhBcnJheShwYXQubGVuZ3RoKTtcbiAgbHBzWzBdID0gMDtcbiAgbGV0IHByZWZpeEVuZCA9IDA7XG4gIGxldCBpID0gMTtcbiAgd2hpbGUgKGkgPCBscHMubGVuZ3RoKSB7XG4gICAgaWYgKHBhdFtpXSA9PSBwYXRbcHJlZml4RW5kXSkge1xuICAgICAgcHJlZml4RW5kKys7XG4gICAgICBscHNbaV0gPSBwcmVmaXhFbmQ7XG4gICAgICBpKys7XG4gICAgfSBlbHNlIGlmIChwcmVmaXhFbmQgPT09IDApIHtcbiAgICAgIGxwc1tpXSA9IDA7XG4gICAgICBpKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWZpeEVuZCA9IGxwc1twcmVmaXhFbmQgLSAxXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxwcztcbn1cblxuLyoqIFJlYWQgZGVsaW1pdGVkIGJ5dGVzIGZyb20gYSBSZWFkZXIuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIHJlYWREZWxpbShcbiAgcmVhZGVyOiBSZWFkZXIsXG4gIGRlbGltOiBVaW50OEFycmF5LFxuKTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFVpbnQ4QXJyYXk+IHtcbiAgLy8gQXZvaWQgdW5pY29kZSBwcm9ibGVtc1xuICBjb25zdCBkZWxpbUxlbiA9IGRlbGltLmxlbmd0aDtcbiAgY29uc3QgZGVsaW1MUFMgPSBjcmVhdGVMUFMoZGVsaW0pO1xuICBjb25zdCBjaHVua3MgPSBuZXcgQnl0ZXNMaXN0KCk7XG4gIGNvbnN0IGJ1ZlNpemUgPSBNYXRoLm1heCgxMDI0LCBkZWxpbUxlbiArIDEpO1xuXG4gIC8vIE1vZGlmaWVkIEtNUFxuICBsZXQgaW5zcGVjdEluZGV4ID0gMDtcbiAgbGV0IG1hdGNoSW5kZXggPSAwO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGluc3BlY3RBcnIgPSBuZXcgVWludDhBcnJheShidWZTaXplKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkZXIucmVhZChpbnNwZWN0QXJyKTtcbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAvLyBZaWVsZCBsYXN0IGNodW5rLlxuICAgICAgeWllbGQgY2h1bmtzLmNvbmNhdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAocmVzdWx0IDwgMCkge1xuICAgICAgLy8gRGlzY2FyZCBhbGwgcmVtYWluaW5nIGFuZCBzaWxlbnRseSBmYWlsLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjaHVua3MuYWRkKGluc3BlY3RBcnIsIDAsIHJlc3VsdCk7XG4gICAgbGV0IGxvY2FsSW5kZXggPSAwO1xuICAgIHdoaWxlIChpbnNwZWN0SW5kZXggPCBjaHVua3Muc2l6ZSgpKSB7XG4gICAgICBpZiAoaW5zcGVjdEFycltsb2NhbEluZGV4XSA9PT0gZGVsaW1bbWF0Y2hJbmRleF0pIHtcbiAgICAgICAgaW5zcGVjdEluZGV4Kys7XG4gICAgICAgIGxvY2FsSW5kZXgrKztcbiAgICAgICAgbWF0Y2hJbmRleCsrO1xuICAgICAgICBpZiAobWF0Y2hJbmRleCA9PT0gZGVsaW1MZW4pIHtcbiAgICAgICAgICAvLyBGdWxsIG1hdGNoXG4gICAgICAgICAgY29uc3QgbWF0Y2hFbmQgPSBpbnNwZWN0SW5kZXggLSBkZWxpbUxlbjtcbiAgICAgICAgICBjb25zdCByZWFkeUJ5dGVzID0gY2h1bmtzLnNsaWNlKDAsIG1hdGNoRW5kKTtcbiAgICAgICAgICB5aWVsZCByZWFkeUJ5dGVzO1xuICAgICAgICAgIC8vIFJlc2V0IG1hdGNoLCBkaWZmZXJlbnQgZnJvbSBLTVAuXG4gICAgICAgICAgY2h1bmtzLnNoaWZ0KGluc3BlY3RJbmRleCk7XG4gICAgICAgICAgaW5zcGVjdEluZGV4ID0gMDtcbiAgICAgICAgICBtYXRjaEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1hdGNoSW5kZXggPT09IDApIHtcbiAgICAgICAgICBpbnNwZWN0SW5kZXgrKztcbiAgICAgICAgICBsb2NhbEluZGV4Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF0Y2hJbmRleCA9IGRlbGltTFBTW21hdGNoSW5kZXggLSAxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiogUmVhZCBkZWxpbWl0ZWQgc3RyaW5ncyBmcm9tIGEgUmVhZGVyLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiByZWFkU3RyaW5nRGVsaW0oXG4gIHJlYWRlcjogUmVhZGVyLFxuICBkZWxpbTogc3RyaW5nLFxuICBkZWNvZGVyT3B0cz86IHtcbiAgICBlbmNvZGluZz86IHN0cmluZztcbiAgICBmYXRhbD86IGJvb2xlYW47XG4gICAgaWdub3JlQk9NPzogYm9vbGVhbjtcbiAgfSxcbik6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxzdHJpbmc+IHtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKGRlY29kZXJPcHRzPy5lbmNvZGluZywgZGVjb2Rlck9wdHMpO1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWREZWxpbShyZWFkZXIsIGVuY29kZXIuZW5jb2RlKGRlbGltKSkpIHtcbiAgICB5aWVsZCBkZWNvZGVyLmRlY29kZShjaHVuayk7XG4gIH1cbn1cblxuLyoqIFJlYWQgc3RyaW5ncyBsaW5lLWJ5LWxpbmUgZnJvbSBhIFJlYWRlci4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogcmVhZExpbmVzKFxuICByZWFkZXI6IFJlYWRlcixcbiAgZGVjb2Rlck9wdHM/OiB7XG4gICAgZW5jb2Rpbmc/OiBzdHJpbmc7XG4gICAgZmF0YWw/OiBib29sZWFuO1xuICAgIGlnbm9yZUJPTT86IGJvb2xlYW47XG4gIH0sXG4pOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8c3RyaW5nPiB7XG4gIGNvbnN0IGJ1ZlJlYWRlciA9IG5ldyBCdWZSZWFkZXIocmVhZGVyKTtcbiAgbGV0IGNodW5rczogVWludDhBcnJheVtdID0gW107XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoZGVjb2Rlck9wdHM/LmVuY29kaW5nLCBkZWNvZGVyT3B0cyk7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgYnVmUmVhZGVyLnJlYWRMaW5lKCk7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIGlmIChjaHVua3MubGVuZ3RoID4gMCkge1xuICAgICAgICB5aWVsZCBkZWNvZGVyLmRlY29kZShjb25jYXQoLi4uY2h1bmtzKSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2h1bmtzLnB1c2gocmVzLmxpbmUpO1xuICAgIGlmICghcmVzLm1vcmUpIHtcbiAgICAgIHlpZWxkIGRlY29kZXIuZGVjb2RlKGNvbmNhdCguLi5jaHVua3MpKTtcbiAgICAgIGNodW5rcyA9IFtdO1xuICAgIH1cbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCIuLi9pby9idWZmZXIudHNcIjtcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gMTZfNjQwO1xuY29uc3QgREVGQVVMVF9CVUZGRVJfU0laRSA9IDMyICogMTAyNDtcblxuZnVuY3Rpb24gaXNDbG9zZXIodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBEZW5vLkNsb3NlciB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT0gbnVsbCAmJiBcImNsb3NlXCIgaW4gdmFsdWUgJiZcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgIHR5cGVvZiAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYW55PilbXCJjbG9zZVwiXSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG4vKiogQ3JlYXRlIGEgYERlbm8uUmVhZGVyYCBmcm9tIGFuIGl0ZXJhYmxlIG9mIGBVaW50OEFycmF5YHMuXG4gKlxuICogYGBgdHNcbiAqICAgICAgaW1wb3J0IHsgcmVhZGVyRnJvbUl0ZXJhYmxlLCBjb3B5IH0gZnJvbSBcIi4vY29udmVyc2lvbi50c1wiO1xuICpcbiAqICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IERlbm8ub3BlbihcIm1ldHJpY3MudHh0XCIsIHsgd3JpdGU6IHRydWUgfSk7XG4gKiAgICAgIGNvbnN0IHJlYWRlciA9IHJlYWRlckZyb21JdGVyYWJsZSgoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAqICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwMCkpO1xuICogICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBkYXRhOiAke0pTT04uc3RyaW5naWZ5KERlbm8ubWV0cmljcygpKX1cXG5cXG5gO1xuICogICAgICAgICAgeWllbGQgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKG1lc3NhZ2UpO1xuICogICAgICAgIH1cbiAqICAgICAgfSkoKSk7XG4gKiAgICAgIGF3YWl0IGNvcHkocmVhZGVyLCBmaWxlKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZGVyRnJvbUl0ZXJhYmxlKFxuICBpdGVyYWJsZTogSXRlcmFibGU8VWludDhBcnJheT4gfCBBc3luY0l0ZXJhYmxlPFVpbnQ4QXJyYXk+LFxuKTogRGVuby5SZWFkZXIge1xuICBjb25zdCBpdGVyYXRvcjogSXRlcmF0b3I8VWludDhBcnJheT4gfCBBc3luY0l0ZXJhdG9yPFVpbnQ4QXJyYXk+ID1cbiAgICAoaXRlcmFibGUgYXMgQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPy4oKSA/P1xuICAgICAgKGl0ZXJhYmxlIGFzIEl0ZXJhYmxlPFVpbnQ4QXJyYXk+KVtTeW1ib2wuaXRlcmF0b3JdPy4oKTtcbiAgY29uc3QgYnVmZmVyID0gbmV3IEJ1ZmZlcigpO1xuICByZXR1cm4ge1xuICAgIGFzeW5jIHJlYWQocDogVWludDhBcnJheSk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT0gMCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUuYnl0ZUxlbmd0aCA8PSBwLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHAuc2V0KHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHAuc2V0KHJlc3VsdC52YWx1ZS5zdWJhcnJheSgwLCBwLmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICBhd2FpdCB3cml0ZUFsbChidWZmZXIsIHJlc3VsdC52YWx1ZS5zdWJhcnJheShwLmJ5dGVMZW5ndGgpKTtcbiAgICAgICAgICByZXR1cm4gcC5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuID0gYXdhaXQgYnVmZmVyLnJlYWQocCk7XG4gICAgICAgIGlmIChuID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZWFkKHApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbi8qKiBDcmVhdGUgYSBgV3JpdGVyYCBmcm9tIGEgYFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcmAuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVyRnJvbVN0cmVhbVdyaXRlcihcbiAgc3RyZWFtV3JpdGVyOiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI8VWludDhBcnJheT4sXG4pOiBEZW5vLldyaXRlciB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgd3JpdGUocDogVWludDhBcnJheSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICBhd2FpdCBzdHJlYW1Xcml0ZXIucmVhZHk7XG4gICAgICBhd2FpdCBzdHJlYW1Xcml0ZXIud3JpdGUocCk7XG4gICAgICByZXR1cm4gcC5sZW5ndGg7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIENyZWF0ZSBhIGBSZWFkZXJgIGZyb20gYSBgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkZXJGcm9tU3RyZWFtUmVhZGVyKFxuICBzdHJlYW1SZWFkZXI6IFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcjxVaW50OEFycmF5Pixcbik6IERlbm8uUmVhZGVyIHtcbiAgY29uc3QgYnVmZmVyID0gbmV3IEJ1ZmZlcigpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgcmVhZChwOiBVaW50OEFycmF5KTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgICBpZiAoYnVmZmVyLmVtcHR5KCkpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3RyZWFtUmVhZGVyLnJlYWQoKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7IC8vIEVPRlxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgd3JpdGVBbGwoYnVmZmVyLCByZXMudmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYnVmZmVyLnJlYWQocCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXcml0YWJsZVN0cmVhbUZyb21Xcml0ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIHRoZSBgd3JpdGVyYCBpcyBhbHNvIGEgYERlbm8uQ2xvc2VyYCwgYXV0b21hdGljYWxseSBjbG9zZSB0aGUgYHdyaXRlcmBcbiAgICogd2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZCwgYWJvcnRlZCwgb3IgYSB3cml0ZSBlcnJvciBvY2N1cnMuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgYXV0b0Nsb3NlPzogYm9vbGVhbjtcbn1cblxuLyoqIENyZWF0ZSBhIGBXcml0YWJsZVN0cmVhbWAgZnJvbSBhIGBXcml0ZXJgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRhYmxlU3RyZWFtRnJvbVdyaXRlcihcbiAgd3JpdGVyOiBEZW5vLldyaXRlcixcbiAgb3B0aW9uczogV3JpdGFibGVTdHJlYW1Gcm9tV3JpdGVyT3B0aW9ucyA9IHt9LFxuKTogV3JpdGFibGVTdHJlYW08VWludDhBcnJheT4ge1xuICBjb25zdCB7IGF1dG9DbG9zZSA9IHRydWUgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIG5ldyBXcml0YWJsZVN0cmVhbSh7XG4gICAgYXN5bmMgd3JpdGUoY2h1bmssIGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdyaXRlQWxsKHdyaXRlciwgY2h1bmspO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb250cm9sbGVyLmVycm9yKGUpO1xuICAgICAgICBpZiAoaXNDbG9zZXIod3JpdGVyKSAmJiBhdXRvQ2xvc2UpIHtcbiAgICAgICAgICB3cml0ZXIuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY2xvc2UoKSB7XG4gICAgICBpZiAoaXNDbG9zZXIod3JpdGVyKSAmJiBhdXRvQ2xvc2UpIHtcbiAgICAgICAgd3JpdGVyLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhYm9ydCgpIHtcbiAgICAgIGlmIChpc0Nsb3Nlcih3cml0ZXIpICYmIGF1dG9DbG9zZSkge1xuICAgICAgICB3cml0ZXIuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIENyZWF0ZSBhIGBSZWFkYWJsZVN0cmVhbWAgZnJvbSBhbnkga2luZCBvZiBpdGVyYWJsZS5cbiAqXG4gKiBgYGB0c1xuICogICAgICBpbXBvcnQgeyByZWFkYWJsZVN0cmVhbUZyb21JdGVyYWJsZSB9IGZyb20gXCIuL2NvbnZlcnNpb24udHNcIjtcbiAqXG4gKiAgICAgIGNvbnN0IHIxID0gcmVhZGFibGVTdHJlYW1Gcm9tSXRlcmFibGUoW1wiZm9vLCBiYXIsIGJhelwiXSk7XG4gKiAgICAgIGNvbnN0IHIyID0gcmVhZGFibGVTdHJlYW1Gcm9tSXRlcmFibGUoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAqICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgoKHIpID0+IHNldFRpbWVvdXQociwgMTAwMCkpKTtcbiAqICAgICAgICB5aWVsZCBcImZvb1wiO1xuICogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKCgocikgPT4gc2V0VGltZW91dChyLCAxMDAwKSkpO1xuICogICAgICAgIHlpZWxkIFwiYmFyXCI7XG4gKiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMDApKSk7XG4gKiAgICAgICAgeWllbGQgXCJiYXpcIjtcbiAqICAgICAgfSgpKTtcbiAqIGBgYFxuICpcbiAqIElmIHRoZSBwcm9kdWNlZCBpdGVyYXRvciAoYGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpYCBvclxuICogYGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKWApIGlzIGEgZ2VuZXJhdG9yLCBvciBtb3JlIHNwZWNpZmljYWxseSBpcyBmb3VuZFxuICogdG8gaGF2ZSBhIGAudGhyb3coKWAgbWV0aG9kIG9uIGl0LCB0aGF0IHdpbGwgYmUgY2FsbGVkIHVwb25cbiAqIGByZWFkYWJsZVN0cmVhbS5jYW5jZWwoKWAuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIHRoZSBzZWNvbmQgaW5wdXQgdHlwZSBhYm92ZTpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVhZGFibGVTdHJlYW1Gcm9tSXRlcmFibGUgfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG4gKlxuICogY29uc3QgcjMgPSByZWFkYWJsZVN0cmVhbUZyb21JdGVyYWJsZShhc3luYyBmdW5jdGlvbiogKCkge1xuICogICB0cnkge1xuICogICAgIHlpZWxkIFwiZm9vXCI7XG4gKiAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgICAgY29uc29sZS5sb2coZXJyb3IpOyAvLyBFcnJvcjogQ2FuY2VsbGVkIGJ5IGNvbnN1bWVyLlxuICogICB9XG4gKiB9KCkpO1xuICogY29uc3QgcmVhZGVyID0gcjMuZ2V0UmVhZGVyKCk7XG4gKiBjb25zb2xlLmxvZyhhd2FpdCByZWFkZXIucmVhZCgpKTsgLy8geyB2YWx1ZTogXCJmb29cIiwgZG9uZTogZmFsc2UgfVxuICogYXdhaXQgcmVhZGVyLmNhbmNlbChuZXcgRXJyb3IoXCJDYW5jZWxsZWQgYnkgY29uc3VtZXIuXCIpKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1Gcm9tSXRlcmFibGU8VD4oXG4gIGl0ZXJhYmxlOiBJdGVyYWJsZTxUPiB8IEFzeW5jSXRlcmFibGU8VD4sXG4pOiBSZWFkYWJsZVN0cmVhbTxUPiB7XG4gIGNvbnN0IGl0ZXJhdG9yOiBJdGVyYXRvcjxUPiB8IEFzeW5jSXRlcmF0b3I8VD4gPVxuICAgIChpdGVyYWJsZSBhcyBBc3luY0l0ZXJhYmxlPFQ+KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0/LigpID8/XG4gICAgICAoaXRlcmFibGUgYXMgSXRlcmFibGU8VD4pW1N5bWJvbC5pdGVyYXRvcl0/LigpO1xuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBjYW5jZWwocmVhc29uKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yLnRocm93ID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnRocm93KHJlYXNvbik7XG4gICAgICAgIH0gY2F0Y2ggeyAvKiBgaXRlcmF0b3IudGhyb3coKWAgYWx3YXlzIHRocm93cyBvbiBzaXRlLiBXZSBjYXRjaCBpdC4gKi8gfVxuICAgICAgfVxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBpbnRvIGEgVHJhbnNmb3JtU3RyZWFtLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyByZWFkYWJsZVN0cmVhbUZyb21JdGVyYWJsZSwgdG9UcmFuc2Zvcm1TdHJlYW0gfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG4gKlxuICogY29uc3QgcmVhZGFibGUgPSByZWFkYWJsZVN0cmVhbUZyb21JdGVyYWJsZShbMCwgMSwgMl0pXG4gKiAgIC5waXBlVGhyb3VnaCh0b1RyYW5zZm9ybVN0cmVhbShhc3luYyBmdW5jdGlvbiogKHNyYykge1xuICogICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3JjKSB7XG4gKiAgICAgICB5aWVsZCBjaHVuayAqIDEwMDtcbiAqICAgICB9XG4gKiAgIH0pKTtcbiAqXG4gKiBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRhYmxlKSB7XG4gKiAgIGNvbnNvbGUubG9nKGNodW5rKTtcbiAqIH1cbiAqIC8vIG91dHB1dDogMCwgMTAwLCAyMDBcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB0cmFuc2Zvcm1lciBBIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybS5cbiAqIEBwYXJhbSB3cml0YWJsZVN0cmF0ZWd5IEFuIG9iamVjdCB0aGF0IG9wdGlvbmFsbHkgZGVmaW5lcyBhIHF1ZXVpbmcgc3RyYXRlZ3kgZm9yIHRoZSBzdHJlYW0uXG4gKiBAcGFyYW0gcmVhZGFibGVTdHJhdGVneSBBbiBvYmplY3QgdGhhdCBvcHRpb25hbGx5IGRlZmluZXMgYSBxdWV1aW5nIHN0cmF0ZWd5IGZvciB0aGUgc3RyZWFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UcmFuc2Zvcm1TdHJlYW08SSwgTz4oXG4gIHRyYW5zZm9ybWVyOiAoc3JjOiBSZWFkYWJsZVN0cmVhbTxJPikgPT4gSXRlcmFibGU8Tz4gfCBBc3luY0l0ZXJhYmxlPE8+LFxuICB3cml0YWJsZVN0cmF0ZWd5PzogUXVldWluZ1N0cmF0ZWd5PEk+LFxuICByZWFkYWJsZVN0cmF0ZWd5PzogUXVldWluZ1N0cmF0ZWd5PE8+LFxuKTogVHJhbnNmb3JtU3RyZWFtPEksIE8+IHtcbiAgY29uc3Qge1xuICAgIHdyaXRhYmxlLFxuICAgIHJlYWRhYmxlLFxuICB9ID0gbmV3IFRyYW5zZm9ybVN0cmVhbTxJLCBJPih1bmRlZmluZWQsIHdyaXRhYmxlU3RyYXRlZ3kpO1xuXG4gIGNvbnN0IGl0ZXJhYmxlID0gdHJhbnNmb3JtZXIocmVhZGFibGUpO1xuICBjb25zdCBpdGVyYXRvcjogSXRlcmF0b3I8Tz4gfCBBc3luY0l0ZXJhdG9yPE8+ID1cbiAgICAoaXRlcmFibGUgYXMgQXN5bmNJdGVyYWJsZTxPPilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPy4oKSA/P1xuICAgICAgKGl0ZXJhYmxlIGFzIEl0ZXJhYmxlPE8+KVtTeW1ib2wuaXRlcmF0b3JdPy4oKTtcbiAgcmV0dXJuIHtcbiAgICB3cml0YWJsZSxcbiAgICByZWFkYWJsZTogbmV3IFJlYWRhYmxlU3RyZWFtPE8+KHtcbiAgICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgICBsZXQgcmVzdWx0OiBJdGVyYXRvclJlc3VsdDxPPjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gUHJvcGFnYXRlIGVycm9yIHRvIHN0cmVhbSBmcm9tIGl0ZXJhdG9yXG4gICAgICAgICAgLy8gSWYgdGhlIHN0cmVhbSBzdGF0dXMgaXMgXCJlcnJvcmVkXCIsIGl0IHdpbGwgYmUgdGhyb3duLCBidXQgaWdub3JlLlxuICAgICAgICAgIGF3YWl0IHJlYWRhYmxlLmNhbmNlbChlcnJvcikuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgICAgIGNvbnRyb2xsZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0LmRvbmUpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShyZXN1bHQudmFsdWUpO1xuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgLy8gUHJvcGFnYXRlIGNhbmNlbGxhdGlvbiB0byByZWFkYWJsZSBhbmQgaXRlcmF0b3JcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvci50aHJvdyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgaXRlcmF0b3IudGhyb3cocmVhc29uKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8qIGBpdGVyYXRvci50aHJvdygpYCBhbHdheXMgdGhyb3dzIG9uIHNpdGUuIFdlIGNhdGNoIGl0LiAqL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCByZWFkYWJsZS5jYW5jZWwocmVhc29uKTtcbiAgICAgIH0sXG4gICAgfSwgcmVhZGFibGVTdHJhdGVneSksXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZGFibGVTdHJlYW1Gcm9tUmVhZGVyT3B0aW9ucyB7XG4gIC8qKiBJZiB0aGUgYHJlYWRlcmAgaXMgYWxzbyBhIGBEZW5vLkNsb3NlcmAsIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGByZWFkZXJgXG4gICAqIHdoZW4gYEVPRmAgaXMgZW5jb3VudGVyZWQsIG9yIGEgcmVhZCBlcnJvciBvY2N1cnMuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgYXV0b0Nsb3NlPzogYm9vbGVhbjtcblxuICAvKiogVGhlIHNpemUgb2YgY2h1bmtzIHRvIGFsbG9jYXRlIHRvIHJlYWQsIHRoZSBkZWZhdWx0IGlzIH4xNktpQiwgd2hpY2ggaXNcbiAgICogdGhlIG1heGltdW0gc2l6ZSB0aGF0IERlbm8gb3BlcmF0aW9ucyBjYW4gY3VycmVudGx5IHN1cHBvcnQuICovXG4gIGNodW5rU2l6ZT86IG51bWJlcjtcblxuICAvKiogVGhlIHF1ZXVpbmcgc3RyYXRlZ3kgdG8gY3JlYXRlIHRoZSBgUmVhZGFibGVTdHJlYW1gIHdpdGguICovXG4gIHN0cmF0ZWd5PzogeyBoaWdoV2F0ZXJNYXJrPzogbnVtYmVyIHwgdW5kZWZpbmVkOyBzaXplPzogdW5kZWZpbmVkIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+YCBmcm9tIGZyb20gYSBgRGVuby5SZWFkZXJgLlxuICpcbiAqIFdoZW4gdGhlIHB1bGwgYWxnb3JpdGhtIGlzIGNhbGxlZCBvbiB0aGUgc3RyZWFtLCBhIGNodW5rIGZyb20gdGhlIHJlYWRlclxuICogd2lsbCBiZSByZWFkLiAgV2hlbiBgbnVsbGAgaXMgcmV0dXJuZWQgZnJvbSB0aGUgcmVhZGVyLCB0aGUgc3RyZWFtIHdpbGwgYmVcbiAqIGNsb3NlZCBhbG9uZyB3aXRoIHRoZSByZWFkZXIgKGlmIGl0IGlzIGFsc28gYSBgRGVuby5DbG9zZXJgKS5cbiAqXG4gKiBBbiBleGFtcGxlIGNvbnZlcnRpbmcgYSBgRGVuby5Gc0ZpbGVgIGludG8gYSByZWFkYWJsZSBzdHJlYW06XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlYWRhYmxlU3RyZWFtRnJvbVJlYWRlciB9IGZyb20gXCIuL21vZC50c1wiO1xuICpcbiAqIGNvbnN0IGZpbGUgPSBhd2FpdCBEZW5vLm9wZW4oXCIuL2ZpbGUudHh0XCIsIHsgcmVhZDogdHJ1ZSB9KTtcbiAqIGNvbnN0IGZpbGVTdHJlYW0gPSByZWFkYWJsZVN0cmVhbUZyb21SZWFkZXIoZmlsZSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtRnJvbVJlYWRlcihcbiAgcmVhZGVyOiBEZW5vLlJlYWRlciB8IChEZW5vLlJlYWRlciAmIERlbm8uQ2xvc2VyKSxcbiAgb3B0aW9uczogUmVhZGFibGVTdHJlYW1Gcm9tUmVhZGVyT3B0aW9ucyA9IHt9LFxuKTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4ge1xuICBjb25zdCB7XG4gICAgYXV0b0Nsb3NlID0gdHJ1ZSxcbiAgICBjaHVua1NpemUgPSBERUZBVUxUX0NIVU5LX1NJWkUsXG4gICAgc3RyYXRlZ3ksXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgY29uc3QgY2h1bmsgPSBuZXcgVWludDhBcnJheShjaHVua1NpemUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVhZCA9IGF3YWl0IHJlYWRlci5yZWFkKGNodW5rKTtcbiAgICAgICAgaWYgKHJlYWQgPT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoaXNDbG9zZXIocmVhZGVyKSAmJiBhdXRvQ2xvc2UpIHtcbiAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuay5zdWJhcnJheSgwLCByZWFkKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZXJyb3IoZSk7XG4gICAgICAgIGlmIChpc0Nsb3NlcihyZWFkZXIpKSB7XG4gICAgICAgICAgcmVhZGVyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbCgpIHtcbiAgICAgIGlmIChpc0Nsb3NlcihyZWFkZXIpICYmIGF1dG9DbG9zZSkge1xuICAgICAgICByZWFkZXIuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LCBzdHJhdGVneSk7XG59XG5cbi8qKiBSZWFkIFJlYWRlciBgcmAgdW50aWwgRU9GIChgbnVsbGApIGFuZCByZXNvbHZlIHRvIHRoZSBjb250ZW50IGFzXG4gKiBVaW50OEFycmF5YC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIi4uL2lvL2J1ZmZlci50c1wiO1xuICogaW1wb3J0IHsgcmVhZEFsbCB9IGZyb20gXCIuL2NvbnZlcnNpb24udHNcIjtcbiAqXG4gKiAvLyBFeGFtcGxlIGZyb20gc3RkaW5cbiAqIGNvbnN0IHN0ZGluQ29udGVudCA9IGF3YWl0IHJlYWRBbGwoRGVuby5zdGRpbik7XG4gKlxuICogLy8gRXhhbXBsZSBmcm9tIGZpbGVcbiAqIGNvbnN0IGZpbGUgPSBhd2FpdCBEZW5vLm9wZW4oXCJteV9maWxlLnR4dFwiLCB7cmVhZDogdHJ1ZX0pO1xuICogY29uc3QgbXlGaWxlQ29udGVudCA9IGF3YWl0IHJlYWRBbGwoZmlsZSk7XG4gKiBEZW5vLmNsb3NlKGZpbGUucmlkKTtcbiAqXG4gKiAvLyBFeGFtcGxlIGZyb20gYnVmZmVyXG4gKiBjb25zdCBteURhdGEgPSBuZXcgVWludDhBcnJheSgxMDApO1xuICogLy8gLi4uIGZpbGwgbXlEYXRhIGFycmF5IHdpdGggZGF0YVxuICogY29uc3QgcmVhZGVyID0gbmV3IEJ1ZmZlcihteURhdGEuYnVmZmVyKTtcbiAqIGNvbnN0IGJ1ZmZlckNvbnRlbnQgPSBhd2FpdCByZWFkQWxsKHJlYWRlcik7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBbGwocjogRGVuby5SZWFkZXIpOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3QgYnVmID0gbmV3IEJ1ZmZlcigpO1xuICBhd2FpdCBidWYucmVhZEZyb20ocik7XG4gIHJldHVybiBidWYuYnl0ZXMoKTtcbn1cblxuLyoqIFN5bmNocm9ub3VzbHkgcmVhZHMgUmVhZGVyIGByYCB1bnRpbCBFT0YgKGBudWxsYCkgYW5kIHJldHVybnMgdGhlIGNvbnRlbnRcbiAqIGFzIGBVaW50OEFycmF5YC5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIi4uL2lvL2J1ZmZlci50c1wiO1xuICogaW1wb3J0IHsgcmVhZEFsbFN5bmMgfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG4gKlxuICogLy8gRXhhbXBsZSBmcm9tIHN0ZGluXG4gKiBjb25zdCBzdGRpbkNvbnRlbnQgPSByZWFkQWxsU3luYyhEZW5vLnN0ZGluKTtcbiAqXG4gKiAvLyBFeGFtcGxlIGZyb20gZmlsZVxuICogY29uc3QgZmlsZSA9IERlbm8ub3BlblN5bmMoXCJteV9maWxlLnR4dFwiLCB7cmVhZDogdHJ1ZX0pO1xuICogY29uc3QgbXlGaWxlQ29udGVudCA9IHJlYWRBbGxTeW5jKGZpbGUpO1xuICogRGVuby5jbG9zZShmaWxlLnJpZCk7XG4gKlxuICogLy8gRXhhbXBsZSBmcm9tIGJ1ZmZlclxuICogY29uc3QgbXlEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMTAwKTtcbiAqIC8vIC4uLiBmaWxsIG15RGF0YSBhcnJheSB3aXRoIGRhdGFcbiAqIGNvbnN0IHJlYWRlciA9IG5ldyBCdWZmZXIobXlEYXRhLmJ1ZmZlcik7XG4gKiBjb25zdCBidWZmZXJDb250ZW50ID0gcmVhZEFsbFN5bmMocmVhZGVyKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZEFsbFN5bmMocjogRGVuby5SZWFkZXJTeW5jKTogVWludDhBcnJheSB7XG4gIGNvbnN0IGJ1ZiA9IG5ldyBCdWZmZXIoKTtcbiAgYnVmLnJlYWRGcm9tU3luYyhyKTtcbiAgcmV0dXJuIGJ1Zi5ieXRlcygpO1xufVxuXG4vKiogV3JpdGUgYWxsIHRoZSBjb250ZW50IG9mIHRoZSBhcnJheSBidWZmZXIgKGBhcnJgKSB0byB0aGUgd3JpdGVyIChgd2ApLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiLi4vaW8vYnVmZmVyLnRzXCI7XG4gKiBpbXBvcnQgeyB3cml0ZUFsbCB9IGZyb20gXCIuL2NvbnZlcnNpb24udHNcIjtcblxuICogLy8gRXhhbXBsZSB3cml0aW5nIHRvIHN0ZG91dFxuICogbGV0IGNvbnRlbnRCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcIkhlbGxvIFdvcmxkXCIpO1xuICogYXdhaXQgd3JpdGVBbGwoRGVuby5zdGRvdXQsIGNvbnRlbnRCeXRlcyk7XG4gKlxuICogLy8gRXhhbXBsZSB3cml0aW5nIHRvIGZpbGVcbiAqIGNvbnRlbnRCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcIkhlbGxvIFdvcmxkXCIpO1xuICogY29uc3QgZmlsZSA9IGF3YWl0IERlbm8ub3BlbigndGVzdC5maWxlJywge3dyaXRlOiB0cnVlfSk7XG4gKiBhd2FpdCB3cml0ZUFsbChmaWxlLCBjb250ZW50Qnl0ZXMpO1xuICogRGVuby5jbG9zZShmaWxlLnJpZCk7XG4gKlxuICogLy8gRXhhbXBsZSB3cml0aW5nIHRvIGJ1ZmZlclxuICogY29udGVudEJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFwiSGVsbG8gV29ybGRcIik7XG4gKiBjb25zdCB3cml0ZXIgPSBuZXcgQnVmZmVyKCk7XG4gKiBhd2FpdCB3cml0ZUFsbCh3cml0ZXIsIGNvbnRlbnRCeXRlcyk7XG4gKiBjb25zb2xlLmxvZyh3cml0ZXIuYnl0ZXMoKS5sZW5ndGgpOyAgLy8gMTFcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVBbGwodzogRGVuby5Xcml0ZXIsIGFycjogVWludDhBcnJheSkge1xuICBsZXQgbndyaXR0ZW4gPSAwO1xuICB3aGlsZSAobndyaXR0ZW4gPCBhcnIubGVuZ3RoKSB7XG4gICAgbndyaXR0ZW4gKz0gYXdhaXQgdy53cml0ZShhcnIuc3ViYXJyYXkobndyaXR0ZW4pKTtcbiAgfVxufVxuXG4vKiogU3luY2hyb25vdXNseSB3cml0ZSBhbGwgdGhlIGNvbnRlbnQgb2YgdGhlIGFycmF5IGJ1ZmZlciAoYGFycmApIHRvIHRoZVxuICogd3JpdGVyIChgd2ApLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiLi4vaW8vYnVmZmVyLnRzXCI7XG4gKiBpbXBvcnQgeyB3cml0ZUFsbFN5bmMgfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG4gKlxuICogLy8gRXhhbXBsZSB3cml0aW5nIHRvIHN0ZG91dFxuICogbGV0IGNvbnRlbnRCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcIkhlbGxvIFdvcmxkXCIpO1xuICogd3JpdGVBbGxTeW5jKERlbm8uc3Rkb3V0LCBjb250ZW50Qnl0ZXMpO1xuICpcbiAqIC8vIEV4YW1wbGUgd3JpdGluZyB0byBmaWxlXG4gKiBjb250ZW50Qnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoXCJIZWxsbyBXb3JsZFwiKTtcbiAqIGNvbnN0IGZpbGUgPSBEZW5vLm9wZW5TeW5jKCd0ZXN0LmZpbGUnLCB7d3JpdGU6IHRydWV9KTtcbiAqIHdyaXRlQWxsU3luYyhmaWxlLCBjb250ZW50Qnl0ZXMpO1xuICogRGVuby5jbG9zZShmaWxlLnJpZCk7XG4gKlxuICogLy8gRXhhbXBsZSB3cml0aW5nIHRvIGJ1ZmZlclxuICogY29udGVudEJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKFwiSGVsbG8gV29ybGRcIik7XG4gKiBjb25zdCB3cml0ZXIgPSBuZXcgQnVmZmVyKCk7XG4gKiB3cml0ZUFsbFN5bmMod3JpdGVyLCBjb250ZW50Qnl0ZXMpO1xuICogY29uc29sZS5sb2cod3JpdGVyLmJ5dGVzKCkubGVuZ3RoKTsgIC8vIDExXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQWxsU3luYyh3OiBEZW5vLldyaXRlclN5bmMsIGFycjogVWludDhBcnJheSkge1xuICBsZXQgbndyaXR0ZW4gPSAwO1xuICB3aGlsZSAobndyaXR0ZW4gPCBhcnIubGVuZ3RoKSB7XG4gICAgbndyaXR0ZW4gKz0gdy53cml0ZVN5bmMoYXJyLnN1YmFycmF5KG53cml0dGVuKSk7XG4gIH1cbn1cblxuLyoqIFR1cm5zIGEgUmVhZGVyLCBgcmAsIGludG8gYW4gYXN5bmMgaXRlcmF0b3IuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGl0ZXJhdGVSZWFkZXIgfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG4gKlxuICogbGV0IGYgPSBhd2FpdCBEZW5vLm9wZW4oXCIvZXRjL3Bhc3N3ZFwiKTtcbiAqIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXRlcmF0ZVJlYWRlcihmKSkge1xuICogICBjb25zb2xlLmxvZyhjaHVuayk7XG4gKiB9XG4gKiBmLmNsb3NlKCk7XG4gKiBgYGBcbiAqXG4gKiBTZWNvbmQgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gdHVuZSBzaXplIG9mIGEgYnVmZmVyLlxuICogRGVmYXVsdCBzaXplIG9mIHRoZSBidWZmZXIgaXMgMzJrQi5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaXRlcmF0ZVJlYWRlciB9IGZyb20gXCIuL2NvbnZlcnNpb24udHNcIjtcbiAqXG4gKiBsZXQgZiA9IGF3YWl0IERlbm8ub3BlbihcIi9ldGMvcGFzc3dkXCIpO1xuICogY29uc3QgaXQgPSBpdGVyYXRlUmVhZGVyKGYsIHtcbiAqICAgYnVmU2l6ZTogMTAyNCAqIDEwMjRcbiAqIH0pO1xuICogZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdCkge1xuICogICBjb25zb2xlLmxvZyhjaHVuayk7XG4gKiB9XG4gKiBmLmNsb3NlKCk7XG4gKiBgYGBcbiAqXG4gKiBJdGVyYXRvciB1c2VzIGFuIGludGVybmFsIGJ1ZmZlciBvZiBmaXhlZCBzaXplIGZvciBlZmZpY2llbmN5OyBpdCByZXR1cm5zXG4gKiBhIHZpZXcgb24gdGhhdCBidWZmZXIgb24gZWFjaCBpdGVyYXRpb24uIEl0IGlzIHRoZXJlZm9yZSBjYWxsZXInc1xuICogcmVzcG9uc2liaWxpdHkgdG8gY29weSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGlmIG5lZWRlZDsgb3RoZXJ3aXNlIHRoZVxuICogbmV4dCBpdGVyYXRpb24gd2lsbCBvdmVyd3JpdGUgY29udGVudHMgb2YgcHJldmlvdXNseSByZXR1cm5lZCBjaHVuay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBpdGVyYXRlUmVhZGVyKFxuICByOiBEZW5vLlJlYWRlcixcbiAgb3B0aW9ucz86IHtcbiAgICBidWZTaXplPzogbnVtYmVyO1xuICB9LFxuKTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFVpbnQ4QXJyYXk+IHtcbiAgY29uc3QgYnVmU2l6ZSA9IG9wdGlvbnM/LmJ1ZlNpemUgPz8gREVGQVVMVF9CVUZGRVJfU0laRTtcbiAgY29uc3QgYiA9IG5ldyBVaW50OEFycmF5KGJ1ZlNpemUpO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHIucmVhZChiKTtcbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB5aWVsZCBiLnN1YmFycmF5KDAsIHJlc3VsdCk7XG4gIH1cbn1cblxuLyoqIFR1cm5zIGEgUmVhZGVyU3luYywgYHJgLCBpbnRvIGFuIGl0ZXJhdG9yLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpdGVyYXRlUmVhZGVyU3luYyB9IGZyb20gXCIuL2NvbnZlcnNpb24udHNcIjtcbiAqXG4gKiBsZXQgZiA9IERlbm8ub3BlblN5bmMoXCIvZXRjL3Bhc3N3ZFwiKTtcbiAqIGZvciAoY29uc3QgY2h1bmsgb2YgaXRlcmF0ZVJlYWRlclN5bmMoZikpIHtcbiAqICAgY29uc29sZS5sb2coY2h1bmspO1xuICogfVxuICogZi5jbG9zZSgpO1xuICogYGBgXG4gKlxuICogU2Vjb25kIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHR1bmUgc2l6ZSBvZiBhIGJ1ZmZlci5cbiAqIERlZmF1bHQgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIDMya0IuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGl0ZXJhdGVSZWFkZXJTeW5jIH0gZnJvbSBcIi4vY29udmVyc2lvbi50c1wiO1xuXG4gKiBsZXQgZiA9IGF3YWl0IERlbm8ub3BlbihcIi9ldGMvcGFzc3dkXCIpO1xuICogY29uc3QgaXRlciA9IGl0ZXJhdGVSZWFkZXJTeW5jKGYsIHtcbiAqICAgYnVmU2l6ZTogMTAyNCAqIDEwMjRcbiAqIH0pO1xuICogZm9yIChjb25zdCBjaHVuayBvZiBpdGVyKSB7XG4gKiAgIGNvbnNvbGUubG9nKGNodW5rKTtcbiAqIH1cbiAqIGYuY2xvc2UoKTtcbiAqIGBgYFxuICpcbiAqIEl0ZXJhdG9yIHVzZXMgYW4gaW50ZXJuYWwgYnVmZmVyIG9mIGZpeGVkIHNpemUgZm9yIGVmZmljaWVuY3k7IGl0IHJldHVybnNcbiAqIGEgdmlldyBvbiB0aGF0IGJ1ZmZlciBvbiBlYWNoIGl0ZXJhdGlvbi4gSXQgaXMgdGhlcmVmb3JlIGNhbGxlcidzXG4gKiByZXNwb25zaWJpbGl0eSB0byBjb3B5IGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgaWYgbmVlZGVkOyBvdGhlcndpc2UgdGhlXG4gKiBuZXh0IGl0ZXJhdGlvbiB3aWxsIG92ZXJ3cml0ZSBjb250ZW50cyBvZiBwcmV2aW91c2x5IHJldHVybmVkIGNodW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJhdGVSZWFkZXJTeW5jKFxuICByOiBEZW5vLlJlYWRlclN5bmMsXG4gIG9wdGlvbnM/OiB7XG4gICAgYnVmU2l6ZT86IG51bWJlcjtcbiAgfSxcbik6IEl0ZXJhYmxlSXRlcmF0b3I8VWludDhBcnJheT4ge1xuICBjb25zdCBidWZTaXplID0gb3B0aW9ucz8uYnVmU2l6ZSA/PyBERUZBVUxUX0JVRkZFUl9TSVpFO1xuICBjb25zdCBiID0gbmV3IFVpbnQ4QXJyYXkoYnVmU2l6ZSk7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gci5yZWFkU3luYyhiKTtcbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB5aWVsZCBiLnN1YmFycmF5KDAsIHJlc3VsdCk7XG4gIH1cbn1cblxuLyoqIENvcGllcyBmcm9tIGBzcmNgIHRvIGBkc3RgIHVudGlsIGVpdGhlciBFT0YgKGBudWxsYCkgaXMgcmVhZCBmcm9tIGBzcmNgIG9yXG4gKiBhbiBlcnJvciBvY2N1cnMuIEl0IHJlc29sdmVzIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgY29waWVkIG9yIHJlamVjdHMgd2l0aFxuICogdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkIHdoaWxlIGNvcHlpbmcuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNvcHkgfSBmcm9tIFwiLi9jb252ZXJzaW9uLnRzXCI7XG4gKlxuICogY29uc3Qgc291cmNlID0gYXdhaXQgRGVuby5vcGVuKFwibXlfZmlsZS50eHRcIik7XG4gKiBjb25zdCBieXRlc0NvcGllZDEgPSBhd2FpdCBjb3B5KHNvdXJjZSwgRGVuby5zdGRvdXQpO1xuICogY29uc3QgZGVzdGluYXRpb24gPSBhd2FpdCBEZW5vLmNyZWF0ZShcIm15X2ZpbGVfMi50eHRcIik7XG4gKiBjb25zdCBieXRlc0NvcGllZDIgPSBhd2FpdCBjb3B5KHNvdXJjZSwgZGVzdGluYXRpb24pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNyYyBUaGUgc291cmNlIHRvIGNvcHkgZnJvbVxuICogQHBhcmFtIGRzdCBUaGUgZGVzdGluYXRpb24gdG8gY29weSB0b1xuICogQHBhcmFtIG9wdGlvbnMgQ2FuIGJlIHVzZWQgdG8gdHVuZSBzaXplIG9mIHRoZSBidWZmZXIuIERlZmF1bHQgc2l6ZSBpcyAzMmtCXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5KFxuICBzcmM6IERlbm8uUmVhZGVyLFxuICBkc3Q6IERlbm8uV3JpdGVyLFxuICBvcHRpb25zPzoge1xuICAgIGJ1ZlNpemU/OiBudW1iZXI7XG4gIH0sXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBsZXQgbiA9IDA7XG4gIGNvbnN0IGJ1ZlNpemUgPSBvcHRpb25zPy5idWZTaXplID8/IERFRkFVTFRfQlVGRkVSX1NJWkU7XG4gIGNvbnN0IGIgPSBuZXcgVWludDhBcnJheShidWZTaXplKTtcbiAgbGV0IGdvdEVPRiA9IGZhbHNlO1xuICB3aGlsZSAoZ290RU9GID09PSBmYWxzZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNyYy5yZWFkKGIpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIGdvdEVPRiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBud3JpdHRlbiA9IDA7XG4gICAgICB3aGlsZSAobndyaXR0ZW4gPCByZXN1bHQpIHtcbiAgICAgICAgbndyaXR0ZW4gKz0gYXdhaXQgZHN0LndyaXRlKGIuc3ViYXJyYXkobndyaXR0ZW4sIHJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgbiArPSBud3JpdHRlbjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG47XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbmltcG9ydCB7IGRlZmVycmVkIH0gZnJvbSBcIi4uL2FzeW5jL21vZC50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0LCBhc3NlcnRTdHJpbmdJbmNsdWRlcywgZmFpbCB9IGZyb20gXCIuLi90ZXN0aW5nL2Fzc2VydHMudHNcIjtcbmltcG9ydCB7IHJlYWRBbGwgfSBmcm9tIFwiLi4vc3RyZWFtcy9jb252ZXJzaW9uLnRzXCI7XG5cbmV4cG9ydCB0eXBlIEJpbmFyeUVuY29kaW5ncyA9IFwiYmluYXJ5XCI7XG5cbmV4cG9ydCB0eXBlIFRleHRFbmNvZGluZ3MgPVxuICB8IFwiYXNjaWlcIlxuICB8IFwidXRmOFwiXG4gIHwgXCJ1dGYtOFwiXG4gIHwgXCJ1dGYxNmxlXCJcbiAgfCBcInVjczJcIlxuICB8IFwidWNzLTJcIlxuICB8IFwiYmFzZTY0XCJcbiAgfCBcImxhdGluMVwiXG4gIHwgXCJoZXhcIjtcblxuZXhwb3J0IHR5cGUgRW5jb2RpbmdzID0gQmluYXJ5RW5jb2RpbmdzIHwgVGV4dEVuY29kaW5ncztcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdEltcGxlbWVudGVkKG1zZzogc3RyaW5nKTogbmV2ZXIge1xuICBjb25zdCBtZXNzYWdlID0gbXNnID8gYE5vdCBpbXBsZW1lbnRlZDogJHttc2d9YCA6IFwiTm90IGltcGxlbWVudGVkXCI7XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5Ob3RJbXBsZW1lbnRlZChtc2c/OiBzdHJpbmcpIHtcbiAgY29uc3QgbWVzc2FnZSA9IG1zZyA/IGBOb3QgaW1wbGVtZW50ZWQ6ICR7bXNnfWAgOiBcIk5vdCBpbXBsZW1lbnRlZFwiO1xuICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG59XG5cbmV4cG9ydCB0eXBlIF9UZXh0RGVjb2RlciA9IHR5cGVvZiBUZXh0RGVjb2Rlci5wcm90b3R5cGU7XG5leHBvcnQgY29uc3QgX1RleHREZWNvZGVyID0gVGV4dERlY29kZXI7XG5cbmV4cG9ydCB0eXBlIF9UZXh0RW5jb2RlciA9IHR5cGVvZiBUZXh0RW5jb2Rlci5wcm90b3R5cGU7XG5leHBvcnQgY29uc3QgX1RleHRFbmNvZGVyID0gVGV4dEVuY29kZXI7XG5cbi8vIEFQSSBoZWxwZXJzXG5cbmV4cG9ydCB0eXBlIE1heWJlTnVsbDxUPiA9IFQgfCBudWxsO1xuZXhwb3J0IHR5cGUgTWF5YmVEZWZpbmVkPFQ+ID0gVCB8IHVuZGVmaW5lZDtcbmV4cG9ydCB0eXBlIE1heWJlRW1wdHk8VD4gPSBUIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGludG9DYWxsYmFja0FQSTxUPihcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgZnVuYzogKC4uLmFyZ3M6IGFueVtdKSA9PiBQcm9taXNlPFQ+LFxuICBjYjogTWF5YmVFbXB0eTwoZXJyOiBNYXliZU51bGw8RXJyb3I+LCB2YWx1ZT86IE1heWJlRW1wdHk8VD4pID0+IHZvaWQ+LFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAuLi5hcmdzOiBhbnlbXVxuKSB7XG4gIGZ1bmMoLi4uYXJncykudGhlbihcbiAgICAodmFsdWUpID0+IGNiICYmIGNiKG51bGwsIHZhbHVlKSxcbiAgICAoZXJyKSA9PiBjYiAmJiBjYihlcnIpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW50b0NhbGxiYWNrQVBJV2l0aEludGVyY2VwdDxUMSwgVDI+KFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBmdW5jOiAoLi4uYXJnczogYW55W10pID0+IFByb21pc2U8VDE+LFxuICBpbnRlcmNlcHRvcjogKHY6IFQxKSA9PiBUMixcbiAgY2I6IE1heWJlRW1wdHk8KGVycjogTWF5YmVOdWxsPEVycm9yPiwgdmFsdWU/OiBNYXliZUVtcHR5PFQyPikgPT4gdm9pZD4sXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIC4uLmFyZ3M6IGFueVtdXG4pIHtcbiAgZnVuYyguLi5hcmdzKS50aGVuKFxuICAgICh2YWx1ZSkgPT4gY2IgJiYgY2IobnVsbCwgaW50ZXJjZXB0b3IodmFsdWUpKSxcbiAgICAoZXJyKSA9PiBjYiAmJiBjYihlcnIpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaWNlT25lKGxpc3Q6IHN0cmluZ1tdLCBpbmRleDogbnVtYmVyKSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKykgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbi8vIFRha2VuIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2JhNjg0ODA1YjZjMGVkZWQ3NmU1Y2Q4OWVlMDAzMjhhYzdhNTkzNjUvbGliL2ludGVybmFsL3V0aWwuanMjTDEyNVxuLy8gUmV0dXJuIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBubyBtYXRjaC5cbi8vIE1vdmUgdGhlIFwic2xvdyBjYXNlc1wiIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZ2V0c1xuLy8gaW5saW5lZCBwcm9wZXJseS4gVGhhdCBwcmlvcml0aXplcyB0aGUgY29tbW9uIGNhc2UuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRW5jb2RpbmcoXG4gIGVuYzogc3RyaW5nIHwgbnVsbCxcbik6IFRleHRFbmNvZGluZ3MgfCB1bmRlZmluZWQge1xuICBpZiAoZW5jID09IG51bGwgfHwgZW5jID09PSBcInV0ZjhcIiB8fCBlbmMgPT09IFwidXRmLThcIikgcmV0dXJuIFwidXRmOFwiO1xuICByZXR1cm4gc2xvd0Nhc2VzKGVuYyk7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2JhNjg0ODA1YjZjMGVkZWQ3NmU1Y2Q4OWVlMDAzMjhhYzdhNTkzNjUvbGliL2ludGVybmFsL3V0aWwuanMjTDEzMFxuZnVuY3Rpb24gc2xvd0Nhc2VzKGVuYzogc3RyaW5nKTogVGV4dEVuY29kaW5ncyB8IHVuZGVmaW5lZCB7XG4gIHN3aXRjaCAoZW5jLmxlbmd0aCkge1xuICAgIGNhc2UgNDpcbiAgICAgIGlmIChlbmMgPT09IFwiVVRGOFwiKSByZXR1cm4gXCJ1dGY4XCI7XG4gICAgICBpZiAoZW5jID09PSBcInVjczJcIiB8fCBlbmMgPT09IFwiVUNTMlwiKSByZXR1cm4gXCJ1dGYxNmxlXCI7XG4gICAgICBlbmMgPSBgJHtlbmN9YC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGVuYyA9PT0gXCJ1dGY4XCIpIHJldHVybiBcInV0ZjhcIjtcbiAgICAgIGlmIChlbmMgPT09IFwidWNzMlwiKSByZXR1cm4gXCJ1dGYxNmxlXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBpZiAoZW5jID09PSBcImhleFwiIHx8IGVuYyA9PT0gXCJIRVhcIiB8fCBgJHtlbmN9YC50b0xvd2VyQ2FzZSgpID09PSBcImhleFwiKSB7XG4gICAgICAgIHJldHVybiBcImhleFwiO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgaWYgKGVuYyA9PT0gXCJhc2NpaVwiKSByZXR1cm4gXCJhc2NpaVwiO1xuICAgICAgaWYgKGVuYyA9PT0gXCJ1Y3MtMlwiKSByZXR1cm4gXCJ1dGYxNmxlXCI7XG4gICAgICBpZiAoZW5jID09PSBcIlVURi04XCIpIHJldHVybiBcInV0ZjhcIjtcbiAgICAgIGlmIChlbmMgPT09IFwiQVNDSUlcIikgcmV0dXJuIFwiYXNjaWlcIjtcbiAgICAgIGlmIChlbmMgPT09IFwiVUNTLTJcIikgcmV0dXJuIFwidXRmMTZsZVwiO1xuICAgICAgZW5jID0gYCR7ZW5jfWAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChlbmMgPT09IFwidXRmLThcIikgcmV0dXJuIFwidXRmOFwiO1xuICAgICAgaWYgKGVuYyA9PT0gXCJhc2NpaVwiKSByZXR1cm4gXCJhc2NpaVwiO1xuICAgICAgaWYgKGVuYyA9PT0gXCJ1Y3MtMlwiKSByZXR1cm4gXCJ1dGYxNmxlXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6XG4gICAgICBpZiAoZW5jID09PSBcImJhc2U2NFwiKSByZXR1cm4gXCJiYXNlNjRcIjtcbiAgICAgIGlmIChlbmMgPT09IFwibGF0aW4xXCIgfHwgZW5jID09PSBcImJpbmFyeVwiKSByZXR1cm4gXCJsYXRpbjFcIjtcbiAgICAgIGlmIChlbmMgPT09IFwiQkFTRTY0XCIpIHJldHVybiBcImJhc2U2NFwiO1xuICAgICAgaWYgKGVuYyA9PT0gXCJMQVRJTjFcIiB8fCBlbmMgPT09IFwiQklOQVJZXCIpIHJldHVybiBcImxhdGluMVwiO1xuICAgICAgZW5jID0gYCR7ZW5jfWAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChlbmMgPT09IFwiYmFzZTY0XCIpIHJldHVybiBcImJhc2U2NFwiO1xuICAgICAgaWYgKGVuYyA9PT0gXCJsYXRpbjFcIiB8fCBlbmMgPT09IFwiYmluYXJ5XCIpIHJldHVybiBcImxhdGluMVwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OlxuICAgICAgaWYgKFxuICAgICAgICBlbmMgPT09IFwidXRmMTZsZVwiIHx8XG4gICAgICAgIGVuYyA9PT0gXCJVVEYxNkxFXCIgfHxcbiAgICAgICAgYCR7ZW5jfWAudG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYxNmxlXCJcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gXCJ1dGYxNmxlXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6XG4gICAgICBpZiAoXG4gICAgICAgIGVuYyA9PT0gXCJ1dGYtMTZsZVwiIHx8XG4gICAgICAgIGVuYyA9PT0gXCJVVEYtMTZMRVwiIHx8XG4gICAgICAgIGAke2VuY31gLnRvTG93ZXJDYXNlKCkgPT09IFwidXRmLTE2bGVcIlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBcInV0ZjE2bGVcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoZW5jID09PSBcIlwiKSByZXR1cm4gXCJ1dGY4XCI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW50ZWdlclJhbmdlKFxuICB2YWx1ZTogbnVtYmVyLFxuICBuYW1lOiBzdHJpbmcsXG4gIG1pbiA9IC0yMTQ3NDgzNjQ4LFxuICBtYXggPSAyMTQ3NDgzNjQ3LFxuKSB7XG4gIC8vIFRoZSBkZWZhdWx0cyBmb3IgbWluIGFuZCBtYXggY29ycmVzcG9uZCB0byB0aGUgbGltaXRzIG9mIDMyLWJpdCBpbnRlZ2Vycy5cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBtdXN0IGJlICdhbiBpbnRlZ2VyJyBidXQgd2FzICR7dmFsdWV9YCk7XG4gIH1cblxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtuYW1lfSBtdXN0IGJlID49ICR7bWlufSAmJiA8PSAke21heH0uIFZhbHVlIHdhcyAke3ZhbHVlfWAsXG4gICAgKTtcbiAgfVxufVxuXG50eXBlIE9wdGlvbmFsU3ByZWFkPFQ+ID0gVCBleHRlbmRzIHVuZGVmaW5lZCA/IFtdXG4gIDogW1RdO1xuXG5leHBvcnQgZnVuY3Rpb24gb25jZTxUID0gdW5kZWZpbmVkPihcbiAgY2FsbGJhY2s6ICguLi5hcmdzOiBPcHRpb25hbFNwcmVhZDxUPikgPT4gdm9pZCxcbikge1xuICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogdW5rbm93biwgLi4uYXJnczogT3B0aW9uYWxTcHJlYWQ8VD4pIHtcbiAgICBpZiAoY2FsbGVkKSByZXR1cm47XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gW2V4cGVjdGVkRXhlY3V0aW9ucyA9IDFdXG4gKiBAcGFyYW0gW3RpbWVvdXQgPSAxMDAwXSBNaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgdGhlIHByb21pc2UgaXMgZm9yY2VmdWxseSBleGl0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBtdXN0Q2FsbDxUIGV4dGVuZHMgdW5rbm93bltdPihcbiAgZm46ICguLi5hcmdzOiBUKSA9PiB2b2lkID0gKCkgPT4ge30sXG4gIGV4cGVjdGVkRXhlY3V0aW9ucyA9IDEsXG4gIHRpbWVvdXQgPSAxMDAwLFxuKTogW1Byb21pc2U8dm9pZD4sICguLi5hcmdzOiBUKSA9PiB2b2lkXSB7XG4gIGlmIChleHBlY3RlZEV4ZWN1dGlvbnMgPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgZXhlY3V0aW9ucyBjYW4ndCBiZSBsb3dlciB0aGFuIDFcIik7XG4gIH1cbiAgbGV0IHRpbWVzRXhlY3V0ZWQgPSAwO1xuICBjb25zdCBjb21wbGV0ZWQgPSBkZWZlcnJlZCgpO1xuXG4gIGNvbnN0IGFib3J0ID0gc2V0VGltZW91dCgoKSA9PiBjb21wbGV0ZWQucmVqZWN0KCksIHRpbWVvdXQpO1xuXG4gIGZ1bmN0aW9uIGNhbGxiYWNrKHRoaXM6IHVua25vd24sIC4uLmFyZ3M6IFQpIHtcbiAgICB0aW1lc0V4ZWN1dGVkKys7XG4gICAgaWYgKHRpbWVzRXhlY3V0ZWQgPT09IGV4cGVjdGVkRXhlY3V0aW9ucykge1xuICAgICAgY29tcGxldGVkLnJlc29sdmUoKTtcbiAgICB9XG4gICAgZm4uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBjb21wbGV0ZWRcbiAgICAudGhlbigoKSA9PiBjbGVhclRpbWVvdXQoYWJvcnQpKVxuICAgIC5jYXRjaCgoKSA9PlxuICAgICAgZmFpbChcbiAgICAgICAgYEFzeW5jIG9wZXJhdGlvbiBub3QgY29tcGxldGVkOiBFeHBlY3RlZCAke2V4cGVjdGVkRXhlY3V0aW9uc30sIGV4ZWN1dGVkICR7dGltZXNFeGVjdXRlZH1gLFxuICAgICAgKVxuICAgICk7XG5cbiAgcmV0dXJuIFtcbiAgICByZXN1bHQsXG4gICAgY2FsbGJhY2ssXG4gIF07XG59XG4vKiogQXNzZXJ0cyB0aGF0IGFuIGVycm9yIHRocm93biBpbiBhIGNhbGxiYWNrIHdpbGwgbm90IGJlIHdyb25nbHkgY2F1Z2h0LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydENhbGxiYWNrRXJyb3JVbmNhdWdodChcbiAgeyBwcmVsdWRlLCBpbnZvY2F0aW9uLCBjbGVhbnVwIH06IHtcbiAgICAvKiogQW55IGNvZGUgd2hpY2ggbmVlZHMgdG8gcnVuIGJlZm9yZSB0aGUgYWN0dWFsIGludm9jYXRpb24gKG5vdGFibHksIGFueSBpbXBvcnQgc3RhdGVtZW50cykuICovXG4gICAgcHJlbHVkZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgc3RhcnQgb2YgdGhlIGludm9jYXRpb24gb2YgdGhlIGZ1bmN0aW9uLCBlLmcuIGBvcGVuKFwiZm9vLnR4dFwiLCBgLlxuICAgICAqIFRoZSBjYWxsYmFjayB3aWxsIGJlIGFkZGVkIGFmdGVyIGl0LlxuICAgICAqL1xuICAgIGludm9jYXRpb246IHN0cmluZztcbiAgICAvKiogQ2FsbGVkIGFmdGVyIHRoZSBzdWJwcm9jZXNzIGlzIGZpbmlzaGVkIGJ1dCBiZWZvcmUgcnVubmluZyB0aGUgYXNzZXJ0aW9ucywgZS5nLiB0byBjbGVhbiB1cCBjcmVhdGVkIGZpbGVzLiAqL1xuICAgIGNsZWFudXA/OiAoKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgfSxcbikge1xuICAvLyBTaW5jZSB0aGUgZXJyb3IgaGFzIHRvIGJlIHVuY2F1Z2h0LCBhbmQgdGhhdCB3aWxsIGtpbGwgdGhlIERlbm8gcHJvY2VzcyxcbiAgLy8gdGhlIG9ubHkgd2F5IHRvIHRlc3QgdGhpcyBpcyB0byBzcGF3biBhIHN1YnByb2Nlc3MuXG4gIGNvbnN0IHAgPSBEZW5vLnJ1bih7XG4gICAgY21kOiBbXG4gICAgICBEZW5vLmV4ZWNQYXRoKCksXG4gICAgICBcImV2YWxcIixcbiAgICAgIFwiLS1uby1jaGVja1wiLCAvLyBSdW5uaW5nIFRTQyBmb3IgZXZlcnkgb25lIG9mIHRoZXNlIHRlc3RzIHdvdWxkIHRha2Ugd2F5IHRvbyBsb25nXG4gICAgICBcIi0tdW5zdGFibGVcIixcbiAgICAgIGAke3ByZWx1ZGUgPz8gXCJcIn1cblxuICAgICAgJHtpbnZvY2F0aW9ufShlcnIpID0+IHtcbiAgICAgICAgLy8gSWYgdGhlIGJ1ZyBpcyBwcmVzZW50IGFuZCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIGFnYWluIHdpdGggYW4gZXJyb3IsXG4gICAgICAgIC8vIGRvbid0IHRocm93IGFub3RoZXIgZXJyb3IsIHNvIGlmIHRoZSBzdWJwcm9jZXNzIGZhaWxzIHdlIGtub3cgaXQgaGFkIHRoZSBjb3JyZWN0IGJlaGF2aW91ci5cbiAgICAgICAgaWYgKCFlcnIpIHRocm93IG5ldyBFcnJvcihcInN1Y2Nlc3NcIik7XG4gICAgICB9KTtgLFxuICAgIF0sXG4gICAgc3RkZXJyOiBcInBpcGVkXCIsXG4gIH0pO1xuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwLnN0YXR1cygpO1xuICBjb25zdCBzdGRlcnIgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYXdhaXQgcmVhZEFsbChwLnN0ZGVycikpO1xuICBwLmNsb3NlKCk7XG4gIHAuc3RkZXJyLmNsb3NlKCk7XG4gIGF3YWl0IGNsZWFudXA/LigpO1xuICBhc3NlcnQoIXN0YXR1cy5zdWNjZXNzKTtcbiAgYXNzZXJ0U3RyaW5nSW5jbHVkZXMoc3RkZXJyLCBcIkVycm9yOiBzdWNjZXNzXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZU1ldGhvZHNFbnVtZXJhYmxlKGtsYXNzOiB7IG5ldyAoKTogdW5rbm93biB9KSB7XG4gIGNvbnN0IHByb3RvID0ga2xhc3MucHJvdG90eXBlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3RvW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjb25zdCBkZXNjID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGtleSk7XG4gICAgICBpZiAoZGVzYykge1xuICAgICAgICBkZXNjLmVudW1lcmFibGUgPSB0cnVlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIGtleSwgZGVzYyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vXG4vLyBBZGFwdGVkIGZyb20gTm9kZS5qcy4gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCAqIGFzIGJpbmRpbmdUeXBlcyBmcm9tIFwiLi4vLi4vaW50ZXJuYWxfYmluZGluZy90eXBlcy50c1wiO1xuZXhwb3J0IHsgaXNDcnlwdG9LZXksIGlzS2V5T2JqZWN0IH0gZnJvbSBcIi4uL2NyeXB0by9fa2V5cy50c1wiO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC0ldHlwZWRhcnJheSUucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbmNvbnN0IF9nZXRUeXBlZEFycmF5VG9TdHJpbmdUYWcgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkucHJvdG90eXBlLFxuICBTeW1ib2wudG9TdHJpbmdUYWcsXG4pIS5nZXQhO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0JpZ0ludDY0QXJyYXkodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIF9nZXRUeXBlZEFycmF5VG9TdHJpbmdUYWcuY2FsbCh2YWx1ZSkgPT09IFwiQmlnSW50NjRBcnJheVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCaWdVaW50NjRBcnJheSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gX2dldFR5cGVkQXJyYXlUb1N0cmluZ1RhZy5jYWxsKHZhbHVlKSA9PT0gXCJCaWdVaW50NjRBcnJheVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGbG9hdDMyQXJyYXkodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIF9nZXRUeXBlZEFycmF5VG9TdHJpbmdUYWcuY2FsbCh2YWx1ZSkgPT09IFwiRmxvYXQzMkFycmF5XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zsb2F0NjRBcnJheSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gX2dldFR5cGVkQXJyYXlUb1N0cmluZ1RhZy5jYWxsKHZhbHVlKSA9PT0gXCJGbG9hdDY0QXJyYXlcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50OEFycmF5KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLmNhbGwodmFsdWUpID09PSBcIkludDhBcnJheVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnQxNkFycmF5KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLmNhbGwodmFsdWUpID09PSBcIkludDE2QXJyYXlcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50MzJBcnJheSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gX2dldFR5cGVkQXJyYXlUb1N0cmluZ1RhZy5jYWxsKHZhbHVlKSA9PT0gXCJJbnQzMkFycmF5XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVkQXJyYXkodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIF9nZXRUeXBlZEFycmF5VG9TdHJpbmdUYWcuY2FsbCh2YWx1ZSkgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFVpbnQ4QXJyYXkge1xuICByZXR1cm4gX2dldFR5cGVkQXJyYXlUb1N0cmluZ1RhZy5jYWxsKHZhbHVlKSA9PT0gXCJVaW50OEFycmF5XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VpbnQ4Q2xhbXBlZEFycmF5KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLmNhbGwodmFsdWUpID09PSBcIlVpbnQ4Q2xhbXBlZEFycmF5XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VpbnQxNkFycmF5KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLmNhbGwodmFsdWUpID09PSBcIlVpbnQxNkFycmF5XCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VpbnQzMkFycmF5KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLmNhbGwodmFsdWUpID09PSBcIlVpbnQzMkFycmF5XCI7XG59XG5cbmV4cG9ydCBjb25zdCB7XG4gIC8vIGlzRXh0ZXJuYWwsXG4gIGlzRGF0ZSxcbiAgaXNBcmd1bWVudHNPYmplY3QsXG4gIGlzQmlnSW50T2JqZWN0LFxuICBpc0Jvb2xlYW5PYmplY3QsXG4gIGlzTnVtYmVyT2JqZWN0LFxuICBpc1N0cmluZ09iamVjdCxcbiAgaXNTeW1ib2xPYmplY3QsXG4gIGlzTmF0aXZlRXJyb3IsXG4gIGlzUmVnRXhwLFxuICBpc0FzeW5jRnVuY3Rpb24sXG4gIGlzR2VuZXJhdG9yRnVuY3Rpb24sXG4gIGlzR2VuZXJhdG9yT2JqZWN0LFxuICBpc1Byb21pc2UsXG4gIGlzTWFwLFxuICBpc1NldCxcbiAgaXNNYXBJdGVyYXRvcixcbiAgaXNTZXRJdGVyYXRvcixcbiAgaXNXZWFrTWFwLFxuICBpc1dlYWtTZXQsXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzRGF0YVZpZXcsXG4gIGlzU2hhcmVkQXJyYXlCdWZmZXIsXG4gIC8vIGlzUHJveHksXG4gIGlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0LFxuICBpc0FueUFycmF5QnVmZmVyLFxuICBpc0JveGVkUHJpbWl0aXZlLFxufSA9IGJpbmRpbmdUeXBlcztcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy9cbi8vIEFkYXB0ZWQgZnJvbSBOb2RlLmpzLiBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuY29uc3QgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuY29uc3QgX2lzT2JqZWN0TGlrZSA9ICh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4gPT5cbiAgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xuXG5jb25zdCBfaXNGdW5jdGlvbkxpa2UgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+XG4gIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNBbnlBcnJheUJ1ZmZlcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIF9pc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgKF90b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiIHx8XG4gICAgICBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl1cIilcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJndW1lbnRzT2JqZWN0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgQXJyYXlCdWZmZXJdXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNGdW5jdGlvbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIF9pc0Z1bmN0aW9uTGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgQXN5bmNGdW5jdGlvbl1cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuT2JqZWN0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBCb29sZWFuXVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb3hlZFByaW1pdGl2ZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGlzQm9vbGVhbk9iamVjdCh2YWx1ZSkgfHxcbiAgICBpc1N0cmluZ09iamVjdCh2YWx1ZSkgfHxcbiAgICBpc051bWJlck9iamVjdCh2YWx1ZSkgfHxcbiAgICBpc1N5bWJvbE9iamVjdCh2YWx1ZSkgfHxcbiAgICBpc0JpZ0ludE9iamVjdCh2YWx1ZSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVZpZXcodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IERhdGFWaWV3XVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBEYXRlXVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNHZW5lcmF0b3JGdW5jdGlvbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIF9pc0Z1bmN0aW9uTGlrZSh2YWx1ZSkgJiZcbiAgICBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNHZW5lcmF0b3JPYmplY3QodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFwKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBNYXBdXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01hcEl0ZXJhdG9yKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgTWFwIEl0ZXJhdG9yXVwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vZHVsZU5hbWVzcGFjZU9iamVjdCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgTW9kdWxlXVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOYXRpdmVFcnJvcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgRXJyb3JdXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlck9iamVjdCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgTnVtYmVyXVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCaWdJbnRPYmplY3QodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IEJpZ0ludF1cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgUHJvbWlzZV1cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBSZWdFeHBdXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NldCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgU2V0XVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTZXRJdGVyYXRvcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIF9pc09iamVjdExpa2UodmFsdWUpICYmIF90b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IFNldCBJdGVyYXRvcl1cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaGFyZWRBcnJheUJ1ZmZlcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIF9pc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgX3RvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgU2hhcmVkQXJyYXlCdWZmZXJdXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nT2JqZWN0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBTdHJpbmddXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N5bWJvbE9iamVjdCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gX2lzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgX3RvU3RyaW5nLmNhbGwodmFsdWUpID09PSBcIltvYmplY3QgU3ltYm9sXVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXZWFrTWFwKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBXZWFrTWFwXVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXZWFrU2V0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBfaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBfdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBXZWFrU2V0XVwiO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQXN5bmNGdW5jdGlvbixcbiAgaXNHZW5lcmF0b3JGdW5jdGlvbixcbiAgaXNBbnlBcnJheUJ1ZmZlcixcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNBcmd1bWVudHNPYmplY3QsXG4gIGlzQm94ZWRQcmltaXRpdmUsXG4gIGlzRGF0YVZpZXcsXG4gIC8vIGlzRXh0ZXJuYWwsXG4gIGlzTWFwLFxuICBpc01hcEl0ZXJhdG9yLFxuICBpc01vZHVsZU5hbWVzcGFjZU9iamVjdCxcbiAgaXNOYXRpdmVFcnJvcixcbiAgaXNQcm9taXNlLFxuICBpc1NldCxcbiAgaXNTZXRJdGVyYXRvcixcbiAgaXNXZWFrTWFwLFxuICBpc1dlYWtTZXQsXG4gIGlzUmVnRXhwLFxuICBpc0RhdGUsXG4gIGlzU3RyaW5nT2JqZWN0LFxuICBpc051bWJlck9iamVjdCxcbiAgaXNCb29sZWFuT2JqZWN0LFxuICBpc0JpZ0ludE9iamVjdCxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIE5vZGUuanMgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IGNvbnN0IGtIYW5kbGUgPSBTeW1ib2woXCJrSGFuZGxlXCIpO1xuZXhwb3J0IGNvbnN0IGtLZXlPYmplY3QgPSBTeW1ib2woXCJrS2V5T2JqZWN0XCIpO1xuIiwgIi8vIENvcHlyaWdodCAyMDIyLTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgeyBrS2V5T2JqZWN0IH0gZnJvbSBcIi4vY29uc3RhbnRzLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBrS2V5VHlwZSA9IFN5bWJvbChcImtLZXlUeXBlXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNLZXlPYmplY3Qob2JqOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgb2JqICE9IG51bGwgJiYgKG9iaiBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilba0tleVR5cGVdICE9PSB1bmRlZmluZWRcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3J5cHRvS2V5KG9iajogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIG9iaiAhPSBudWxsICYmIChvYmogYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW2tLZXlPYmplY3RdICE9PSB1bmRlZmluZWRcbiAgKTtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG4vLyBMYXppbHkgaW5pdGlhbGl6ZXMgdGhlIGVycm9yIGNsYXNzZXMgaW4gdGhpcyBvYmplY3QuXG4vLyBUaGlzIHRyaWNrIGlzIG5lY2Vzc2FyeSBmb3IgYXZvaWRpbmcgY2lyY3VsYXIgZGVuZGVuY2llcyBiZXR3ZWVuXG4vLyBgaW50ZXJuYWwvZXJyb3JzYCBhbmQgb3RoZXIgbW9kdWxlcy5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY29uc3QgY29kZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxudHlwZSBHZW5lcmljRnVuY3Rpb24gPSAoLi4uYXJnczogYW55W10pID0+IGFueTtcblxuLyoqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB1bm5lY2Vzc2FyeSBmcmFtZXMgZnJvbSBOb2RlLmpzIGNvcmUgZXJyb3JzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZGVTdGFja0ZyYW1lczxUIGV4dGVuZHMgR2VuZXJpY0Z1bmN0aW9uID0gR2VuZXJpY0Z1bmN0aW9uPihcbiAgZm46IFQsXG4pOiBUIHtcbiAgLy8gV2UgcmVuYW1lIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGJlIGhpZGRlbiB0byBjdXQgb2ZmIHRoZSBzdGFja3RyYWNlXG4gIC8vIGF0IHRoZSBvdXRlcm1vc3Qgb25lLlxuICBjb25zdCBoaWRkZW4gPSBcIl9fbm9kZV9pbnRlcm5hbF9cIiArIGZuLm5hbWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgXCJuYW1lXCIsIHsgdmFsdWU6IGhpZGRlbiB9KTtcblxuICByZXR1cm4gZm47XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICBpZiAoZW5jID09IG51bGwgfHwgZW5jID09PSBcInV0ZjhcIiB8fCBlbmMgPT09IFwidXRmLThcIikgcmV0dXJuIFwidXRmOFwiO1xuICByZXR1cm4gc2xvd0Nhc2VzKGVuYyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbG93Q2FzZXMoZW5jKSB7XG4gIHN3aXRjaCAoZW5jLmxlbmd0aCkge1xuICAgIGNhc2UgNDpcbiAgICAgIGlmIChlbmMgPT09IFwiVVRGOFwiKSByZXR1cm4gXCJ1dGY4XCI7XG4gICAgICBpZiAoZW5jID09PSBcInVjczJcIiB8fCBlbmMgPT09IFwiVUNTMlwiKSByZXR1cm4gXCJ1dGYxNmxlXCI7XG4gICAgICBlbmMgPSBgJHtlbmN9YC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGVuYyA9PT0gXCJ1dGY4XCIpIHJldHVybiBcInV0ZjhcIjtcbiAgICAgIGlmIChlbmMgPT09IFwidWNzMlwiKSByZXR1cm4gXCJ1dGYxNmxlXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDM6XG4gICAgICBpZiAoXG4gICAgICAgIGVuYyA9PT0gXCJoZXhcIiB8fCBlbmMgPT09IFwiSEVYXCIgfHxcbiAgICAgICAgYCR7ZW5jfWAudG9Mb3dlckNhc2UoKSA9PT0gXCJoZXhcIlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBcImhleFwiO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA1OlxuICAgICAgaWYgKGVuYyA9PT0gXCJhc2NpaVwiKSByZXR1cm4gXCJhc2NpaVwiO1xuICAgICAgaWYgKGVuYyA9PT0gXCJ1Y3MtMlwiKSByZXR1cm4gXCJ1dGYxNmxlXCI7XG4gICAgICBpZiAoZW5jID09PSBcIlVURi04XCIpIHJldHVybiBcInV0ZjhcIjtcbiAgICAgIGlmIChlbmMgPT09IFwiQVNDSUlcIikgcmV0dXJuIFwiYXNjaWlcIjtcbiAgICAgIGlmIChlbmMgPT09IFwiVUNTLTJcIikgcmV0dXJuIFwidXRmMTZsZVwiO1xuICAgICAgZW5jID0gYCR7ZW5jfWAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChlbmMgPT09IFwidXRmLThcIikgcmV0dXJuIFwidXRmOFwiO1xuICAgICAgaWYgKGVuYyA9PT0gXCJhc2NpaVwiKSByZXR1cm4gXCJhc2NpaVwiO1xuICAgICAgaWYgKGVuYyA9PT0gXCJ1Y3MtMlwiKSByZXR1cm4gXCJ1dGYxNmxlXCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDY6XG4gICAgICBpZiAoZW5jID09PSBcImJhc2U2NFwiKSByZXR1cm4gXCJiYXNlNjRcIjtcbiAgICAgIGlmIChlbmMgPT09IFwibGF0aW4xXCIgfHwgZW5jID09PSBcImJpbmFyeVwiKSByZXR1cm4gXCJsYXRpbjFcIjtcbiAgICAgIGlmIChlbmMgPT09IFwiQkFTRTY0XCIpIHJldHVybiBcImJhc2U2NFwiO1xuICAgICAgaWYgKGVuYyA9PT0gXCJMQVRJTjFcIiB8fCBlbmMgPT09IFwiQklOQVJZXCIpIHJldHVybiBcImxhdGluMVwiO1xuICAgICAgZW5jID0gYCR7ZW5jfWAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChlbmMgPT09IFwiYmFzZTY0XCIpIHJldHVybiBcImJhc2U2NFwiO1xuICAgICAgaWYgKGVuYyA9PT0gXCJsYXRpbjFcIiB8fCBlbmMgPT09IFwiYmluYXJ5XCIpIHJldHVybiBcImxhdGluMVwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSA3OlxuICAgICAgaWYgKFxuICAgICAgICBlbmMgPT09IFwidXRmMTZsZVwiIHx8IGVuYyA9PT0gXCJVVEYxNkxFXCIgfHxcbiAgICAgICAgYCR7ZW5jfWAudG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYxNmxlXCJcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gXCJ1dGYxNmxlXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDg6XG4gICAgICBpZiAoXG4gICAgICAgIGVuYyA9PT0gXCJ1dGYtMTZsZVwiIHx8IGVuYyA9PT0gXCJVVEYtMTZMRVwiIHx8XG4gICAgICAgIGAke2VuY31gLnRvTG93ZXJDYXNlKCkgPT09IFwidXRmLTE2bGVcIlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBcInV0ZjE2bGVcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgOTpcbiAgICAgIGlmIChcbiAgICAgICAgZW5jID09PSBcImJhc2U2NHVybFwiIHx8IGVuYyA9PT0gXCJCQVNFNjRVUkxcIiB8fFxuICAgICAgICBgJHtlbmN9YC50b0xvd2VyQ2FzZSgpID09PSBcImJhc2U2NHVybFwiXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIFwiYmFzZTY0dXJsXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKGVuYyA9PT0gXCJcIikgcmV0dXJuIFwidXRmOFwiO1xuICB9XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQgYW5kIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHsgY29kZXMgfSBmcm9tIFwiLi9lcnJvcl9jb2Rlcy50c1wiO1xuaW1wb3J0IHsgaGlkZVN0YWNrRnJhbWVzIH0gZnJvbSBcIi4vaGlkZV9zdGFja19mcmFtZXMudHNcIjtcbmltcG9ydCB7IGlzQXJyYXlCdWZmZXJWaWV3IH0gZnJvbSBcIi4vdXRpbC90eXBlcy50c1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplRW5jb2RpbmcgfSBmcm9tIFwiLi9ub3JtYWxpemVfZW5jb2RpbmcubWpzXCI7XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNJbnQzMih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09ICh2YWx1ZSB8IDApO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1VpbnQzMih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09ICh2YWx1ZSA+Pj4gMCk7XG59XG5cbmNvbnN0IG9jdGFsUmVnID0gL15bMC03XSskLztcbmNvbnN0IG1vZGVEZXNjID0gXCJtdXN0IGJlIGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgb3IgYW4gb2N0YWwgc3RyaW5nXCI7XG5cbi8qKlxuICogUGFyc2UgYW5kIHZhbGlkYXRlIHZhbHVlcyB0aGF0IHdpbGwgYmUgY29udmVydGVkIGludG8gbW9kZV90ICh0aGUgU18qXG4gKiBjb25zdGFudHMpLiBPbmx5IHZhbGlkIG51bWJlcnMgYW5kIG9jdGFsIHN0cmluZ3MgYXJlIGFsbG93ZWQuIFRoZXkgY291bGQgYmVcbiAqIGNvbnZlcnRlZCB0byAzMi1iaXQgdW5zaWduZWQgaW50ZWdlcnMgb3Igbm9uLW5lZ2F0aXZlIHNpZ25lZCBpbnRlZ2VycyBpbiB0aGVcbiAqIEMrKyBsYW5kLCBidXQgYW55IHZhbHVlIGhpZ2hlciB0aGFuIDBvNzc3IHdpbGwgcmVzdWx0IGluIHBsYXRmb3JtLXNwZWNpZmljXG4gKiBiZWhhdmlvcnMuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZXMgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBhcmd1bWVudFxuICogQHBhcmFtIHtudW1iZXJ9IFtkZWZdIElmIHNwZWNpZmllZCwgd2lsbCBiZSByZXR1cm5lZCBmb3IgaW52YWxpZCB2YWx1ZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlRmlsZU1vZGUodmFsdWUsIG5hbWUsIGRlZikge1xuICB2YWx1ZSA/Pz0gZGVmO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKCFvY3RhbFJlZy50ZXN0KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19WQUxVRShuYW1lLCB2YWx1ZSwgbW9kZURlc2MpO1xuICAgIH1cbiAgICB2YWx1ZSA9IE51bWJlci5wYXJzZUludCh2YWx1ZSwgOCk7XG4gIH1cblxuICB2YWxpZGF0ZUludDMyKHZhbHVlLCBuYW1lLCAwLCAyICoqIDMyIC0gMSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuY29uc3QgdmFsaWRhdGVCdWZmZXIgPSBoaWRlU3RhY2tGcmFtZXMoKGJ1ZmZlciwgbmFtZSA9IFwiYnVmZmVyXCIpID0+IHtcbiAgaWYgKCFpc0FycmF5QnVmZmVyVmlldyhidWZmZXIpKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgbmFtZSxcbiAgICAgIFtcIkJ1ZmZlclwiLCBcIlR5cGVkQXJyYXlcIiwgXCJEYXRhVmlld1wiXSxcbiAgICAgIGJ1ZmZlcixcbiAgICApO1xuICB9XG59KTtcblxuY29uc3QgdmFsaWRhdGVJbnRlZ2VyID0gaGlkZVN0YWNrRnJhbWVzKFxuICAoXG4gICAgdmFsdWUsXG4gICAgbmFtZSxcbiAgICBtaW4gPSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgICBtYXggPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsIFwibnVtYmVyXCIsIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgXCJhbiBpbnRlZ2VyXCIsIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKTtcbiAgICB9XG4gIH0sXG4pO1xuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3tcbiAqICAgYWxsb3dBcnJheT86IGJvb2xlYW4sXG4gKiAgIGFsbG93RnVuY3Rpb24/OiBib29sZWFuLFxuICogICBudWxsYWJsZT86IGJvb2xlYW5cbiAqIH19IFtvcHRpb25zXVxuICovXG5jb25zdCB2YWxpZGF0ZU9iamVjdCA9IGhpZGVTdGFja0ZyYW1lcygodmFsdWUsIG5hbWUsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgdXNlRGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zID09IG51bGw7XG4gIGNvbnN0IGFsbG93QXJyYXkgPSB1c2VEZWZhdWx0T3B0aW9ucyA/IGZhbHNlIDogb3B0aW9ucy5hbGxvd0FycmF5O1xuICBjb25zdCBhbGxvd0Z1bmN0aW9uID0gdXNlRGVmYXVsdE9wdGlvbnMgPyBmYWxzZSA6IG9wdGlvbnMuYWxsb3dGdW5jdGlvbjtcbiAgY29uc3QgbnVsbGFibGUgPSB1c2VEZWZhdWx0T3B0aW9ucyA/IGZhbHNlIDogb3B0aW9ucy5udWxsYWJsZTtcbiAgaWYgKFxuICAgICghbnVsbGFibGUgJiYgdmFsdWUgPT09IG51bGwpIHx8XG4gICAgKCFhbGxvd0FycmF5ICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB8fFxuICAgICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgKFxuICAgICAgIWFsbG93RnVuY3Rpb24gfHwgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCJcbiAgICApKVxuICApIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgXCJPYmplY3RcIiwgdmFsdWUpO1xuICB9XG59KTtcblxuY29uc3QgdmFsaWRhdGVJbnQzMiA9IGhpZGVTdGFja0ZyYW1lcyhcbiAgKHZhbHVlLCBuYW1lLCBtaW4gPSAtMjE0NzQ4MzY0OCwgbWF4ID0gMjE0NzQ4MzY0NykgPT4ge1xuICAgIC8vIFRoZSBkZWZhdWx0cyBmb3IgbWluIGFuZCBtYXggY29ycmVzcG9uZCB0byB0aGUgbGltaXRzIG9mIDMyLWJpdCBpbnRlZ2Vycy5cbiAgICBpZiAoIWlzSW50MzIodmFsdWUpKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCBcIm51bWJlclwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgXCJhbiBpbnRlZ2VyXCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgYD49ICR7bWlufSAmJiA8PSAke21heH1gLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKTtcbiAgICB9XG4gIH0sXG4pO1xuXG5jb25zdCB2YWxpZGF0ZVVpbnQzMiA9IGhpZGVTdGFja0ZyYW1lcyhcbiAgKHZhbHVlLCBuYW1lLCBwb3NpdGl2ZSkgPT4ge1xuICAgIGlmICghaXNVaW50MzIodmFsdWUpKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCBcIm51bWJlclwiLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKG5hbWUsIFwiYW4gaW50ZWdlclwiLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBtaW4gPSBwb3NpdGl2ZSA/IDEgOiAwO1xuICAgICAgLy8gMiAqKiAzMiA9PT0gNDI5NDk2NzI5NlxuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UoXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGA+PSAke21pbn0gJiYgPCA0Mjk0OTY3Mjk2YCxcbiAgICAgICAgdmFsdWUsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocG9zaXRpdmUgJiYgdmFsdWUgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKG5hbWUsIFwiPj0gMSAmJiA8IDQyOTQ5NjcyOTZcIiwgdmFsdWUpO1xuICAgIH1cbiAgfSxcbik7XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCBcInN0cmluZ1wiLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsIFwibnVtYmVyXCIsIHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbih2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImJvb2xlYW5cIikge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCBcImJvb2xlYW5cIiwgdmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBvbmVPZlxuICovXG5jb25zdCB2YWxpZGF0ZU9uZU9mID0gaGlkZVN0YWNrRnJhbWVzKFxuICAodmFsdWUsIG5hbWUsIG9uZU9mKSA9PiB7XG4gICAgaWYgKCFBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMuY2FsbChvbmVPZiwgdmFsdWUpKSB7XG4gICAgICBjb25zdCBhbGxvd2VkID0gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKFxuICAgICAgICAgIG9uZU9mLFxuICAgICAgICAgICh2KSA9PiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyBgJyR7dn0nYCA6IFN0cmluZyh2KSksXG4gICAgICAgICksXG4gICAgICAgIFwiLCBcIixcbiAgICAgICk7XG4gICAgICBjb25zdCByZWFzb24gPSBcIm11c3QgYmUgb25lIG9mOiBcIiArIGFsbG93ZWQ7XG5cbiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgdmFsdWUsIHJlYXNvbik7XG4gICAgfVxuICB9LFxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRW5jb2RpbmcoZGF0YSwgZW5jb2RpbmcpIHtcbiAgY29uc3Qgbm9ybWFsaXplZEVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuICBjb25zdCBsZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICBpZiAobm9ybWFsaXplZEVuY29kaW5nID09PSBcImhleFwiICYmIGxlbmd0aCAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1ZBTFVFKFxuICAgICAgXCJlbmNvZGluZ1wiLFxuICAgICAgZW5jb2RpbmcsXG4gICAgICBgaXMgaW52YWxpZCBmb3IgZGF0YSBvZiBsZW5ndGggJHtsZW5ndGh9YCxcbiAgICApO1xuICB9XG59XG5cbi8vIENoZWNrIHRoYXQgdGhlIHBvcnQgbnVtYmVyIGlzIG5vdCBOYU4gd2hlbiBjb2VyY2VkIHRvIGEgbnVtYmVyLFxuLy8gaXMgYW4gaW50ZWdlciBhbmQgdGhhdCBpdCBmYWxscyB3aXRoaW4gdGhlIGxlZ2FsIHJhbmdlIG9mIHBvcnQgbnVtYmVycy5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUG9ydChwb3J0LCBuYW1lID0gXCJQb3J0XCIsIGFsbG93WmVybyA9IHRydWUpIHtcbiAgaWYgKFxuICAgICh0eXBlb2YgcG9ydCAhPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgcG9ydCAhPT0gXCJzdHJpbmdcIikgfHxcbiAgICAodHlwZW9mIHBvcnQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIFN0cmluZy5wcm90b3R5cGUudHJpbS5jYWxsKHBvcnQpLmxlbmd0aCA9PT0gMCkgfHxcbiAgICArcG9ydCAhPT0gKCtwb3J0ID4+PiAwKSB8fFxuICAgIHBvcnQgPiAweEZGRkYgfHxcbiAgICAocG9ydCA9PT0gMCAmJiAhYWxsb3daZXJvKVxuICApIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX1NPQ0tFVF9CQURfUE9SVChuYW1lLCBwb3J0LCBhbGxvd1plcm8pO1xuICB9XG5cbiAgcmV0dXJuIHBvcnQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSBjYWxsYmFja1xuICovXG5jb25zdCB2YWxpZGF0ZUNhbGxiYWNrID0gaGlkZVN0YWNrRnJhbWVzKChjYWxsYmFjaykgPT4ge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQ0FMTEJBQ0soY2FsbGJhY2spO1xuICB9XG59KTtcblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd259IHNpZ25hbFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuY29uc3QgdmFsaWRhdGVBYm9ydFNpZ25hbCA9IGhpZGVTdGFja0ZyYW1lcyhcbiAgKHNpZ25hbCwgbmFtZSkgPT4ge1xuICAgIGlmIChcbiAgICAgIHNpZ25hbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAoc2lnbmFsID09PSBudWxsIHx8XG4gICAgICAgIHR5cGVvZiBzaWduYWwgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICAgIShcImFib3J0ZWRcIiBpbiBzaWduYWwpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsIFwiQWJvcnRTaWduYWxcIiwgc2lnbmFsKTtcbiAgICB9XG4gIH0sXG4pO1xuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmNvbnN0IHZhbGlkYXRlRnVuY3Rpb24gPSBoaWRlU3RhY2tGcmFtZXMoXG4gICh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsIFwiRnVuY3Rpb25cIiwgdmFsdWUpO1xuICAgIH1cbiAgfSxcbik7XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqL1xuY29uc3QgdmFsaWRhdGVBcnJheSA9IGhpZGVTdGFja0ZyYW1lcyhcbiAgKHZhbHVlLCBuYW1lLCBtaW5MZW5ndGggPSAwKSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsIFwiQXJyYXlcIiwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAodmFsdWUubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgICBjb25zdCByZWFzb24gPSBgbXVzdCBiZSBsb25nZXIgdGhhbiAke21pbkxlbmd0aH1gO1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19WQUxVRShuYW1lLCB2YWx1ZSwgcmVhc29uKTtcbiAgICB9XG4gIH0sXG4pO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzSW50MzIsXG4gIGlzVWludDMyLFxuICBwYXJzZUZpbGVNb2RlLFxuICB2YWxpZGF0ZUFib3J0U2lnbmFsLFxuICB2YWxpZGF0ZUFycmF5LFxuICB2YWxpZGF0ZUJvb2xlYW4sXG4gIHZhbGlkYXRlQnVmZmVyLFxuICB2YWxpZGF0ZUNhbGxiYWNrLFxuICB2YWxpZGF0ZUZ1bmN0aW9uLFxuICB2YWxpZGF0ZUludDMyLFxuICB2YWxpZGF0ZUludGVnZXIsXG4gIHZhbGlkYXRlTnVtYmVyLFxuICB2YWxpZGF0ZU9iamVjdCxcbiAgdmFsaWRhdGVPbmVPZixcbiAgdmFsaWRhdGVQb3J0LFxuICB2YWxpZGF0ZVN0cmluZyxcbiAgdmFsaWRhdGVVaW50MzIsXG59O1xuZXhwb3J0IHtcbiAgaXNJbnQzMixcbiAgaXNVaW50MzIsXG4gIHBhcnNlRmlsZU1vZGUsXG4gIHZhbGlkYXRlQWJvcnRTaWduYWwsXG4gIHZhbGlkYXRlQXJyYXksXG4gIHZhbGlkYXRlQm9vbGVhbixcbiAgdmFsaWRhdGVCdWZmZXIsXG4gIHZhbGlkYXRlQ2FsbGJhY2ssXG4gIHZhbGlkYXRlRnVuY3Rpb24sXG4gIHZhbGlkYXRlSW50MzIsXG4gIHZhbGlkYXRlSW50ZWdlcixcbiAgdmFsaWRhdGVOdW1iZXIsXG4gIHZhbGlkYXRlT2JqZWN0LFxuICB2YWxpZGF0ZU9uZU9mLFxuICB2YWxpZGF0ZVBvcnQsXG4gIHZhbGlkYXRlU3RyaW5nLFxuICB2YWxpZGF0ZVVpbnQzMixcbn07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBUaGlzIG1vZHVsZSBwb3J0czpcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL3NyYy91dGlsLWlubC5oXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvdXRpbC5jY1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvc3JjL3V0aWwuaFxuXG5pbXBvcnQgeyBub3RJbXBsZW1lbnRlZCB9IGZyb20gXCIuLi9fdXRpbHMudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGd1ZXNzSGFuZGxlVHlwZShfZmQ6IG51bWJlcik6IHN0cmluZyB7XG4gIG5vdEltcGxlbWVudGVkKFwidXRpbC5ndWVzc0hhbmRsZVR5cGVcIik7XG59XG5cbmV4cG9ydCBjb25zdCBBTExfUFJPUEVSVElFUyA9IDA7XG5leHBvcnQgY29uc3QgT05MWV9XUklUQUJMRSA9IDE7XG5leHBvcnQgY29uc3QgT05MWV9FTlVNRVJBQkxFID0gMjtcbmV4cG9ydCBjb25zdCBPTkxZX0NPTkZJR1VSQUJMRSA9IDQ7XG5leHBvcnQgY29uc3QgT05MWV9FTlVNX1dSSVRBQkxFID0gNjtcbmV4cG9ydCBjb25zdCBTS0lQX1NUUklOR1MgPSA4O1xuZXhwb3J0IGNvbnN0IFNLSVBfU1lNQk9MUyA9IDE2O1xuXG4vKipcbiAqIEVmZmljaWVudGx5IGRldGVybWluZSB3aGV0aGVyIHRoZSBwcm92aWRlZCBwcm9wZXJ0eSBrZXkgaXMgbnVtZXJpY1xuICogKGFuZCB0aHVzIGNvdWxkIGJlIGFuIGFycmF5IGluZGV4ZXIpIG9yIG5vdC5cbiAqXG4gKiBBbHdheXMgcmV0dXJucyB0cnVlIGZvciB2YWx1ZXMgb2YgdHlwZSBgJ251bWJlcidgLlxuICpcbiAqIE90aGVyd2lzZSwgb25seSByZXR1cm5zIHRydWUgZm9yIHN0cmluZ3MgdGhhdCBjb25zaXN0IG9ubHkgb2YgcG9zaXRpdmUgaW50ZWdlcnMuXG4gKlxuICogUmVzdWx0cyBhcmUgY2FjaGVkLlxuICovXG5jb25zdCBpc051bWVyaWNMb29rdXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUluZGV4KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgbnVtYmVyIHwgc3RyaW5nIHtcbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gdmFsdWUgPj0gMCAmJiAodmFsdWUgfCAwKSA9PT0gdmFsdWU7XG4gICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc051bWVyaWNMb29rdXBbdmFsdWVdO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBjb25zdCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpc051bWVyaWNMb29rdXBbdmFsdWVdID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBsZXQgY2ggPSAwO1xuICAgICAgbGV0IGkgPSAwO1xuICAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBjaCA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpID09PSAwICYmIGNoID09PSAweDMwICYmIGxlbmd0aCA+IDEgLyogbXVzdCBub3Qgc3RhcnQgd2l0aCAwICovIHx8XG4gICAgICAgICAgY2ggPCAweDMwIC8qIDAgKi8gfHwgY2ggPiAweDM5IC8qIDkgKi9cbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGlzTnVtZXJpY0xvb2t1cFt2YWx1ZV0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzTnVtZXJpY0xvb2t1cFt2YWx1ZV0gPSB0cnVlO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPd25Ob25JbmRleFByb3BlcnRpZXMoXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgYmFuLXR5cGVzXG4gIG9iajogb2JqZWN0LFxuICBmaWx0ZXI6IG51bWJlcixcbik6IChzdHJpbmcgfCBzeW1ib2wpW10ge1xuICBsZXQgYWxsUHJvcGVydGllcyA9IFtcbiAgICAuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLFxuICAgIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKSxcbiAgXTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgYWxsUHJvcGVydGllcyA9IGFsbFByb3BlcnRpZXMuZmlsdGVyKChrKSA9PiAhaXNBcnJheUluZGV4KGspKTtcbiAgfVxuXG4gIGlmIChmaWx0ZXIgPT09IEFMTF9QUk9QRVJUSUVTKSB7XG4gICAgcmV0dXJuIGFsbFByb3BlcnRpZXM7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IChzdHJpbmcgfCBzeW1ib2wpW10gPSBbXTtcbiAgZm9yIChjb25zdCBrZXkgb2YgYWxsUHJvcGVydGllcykge1xuICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcbiAgICBpZiAoZGVzYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlciAmIE9OTFlfV1JJVEFCTEUgJiYgIWRlc2Mud3JpdGFibGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyICYgT05MWV9FTlVNRVJBQkxFICYmICFkZXNjLmVudW1lcmFibGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyICYgT05MWV9DT05GSUdVUkFCTEUgJiYgIWRlc2MuY29uZmlndXJhYmxlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlciAmIFNLSVBfU1RSSU5HUyAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlciAmIFNLSVBfU1lNQk9MUyAmJiB0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSBcIi4vdHlwZXMudHNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi92YWxpZGF0b3JzLm1qc1wiO1xuaW1wb3J0IHsgY29kZXMgfSBmcm9tIFwiLi4vZXJyb3JfY29kZXMudHNcIjtcblxuaW1wb3J0IHtcbiAgQUxMX1BST1BFUlRJRVMsXG4gIGdldE93bk5vbkluZGV4UHJvcGVydGllcyxcbiAgT05MWV9FTlVNRVJBQkxFLFxufSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxfYmluZGluZy91dGlsLnRzXCI7XG5cbmNvbnN0IGtPYmplY3RUeXBlID0gMDtcbmNvbnN0IGtBcnJheVR5cGUgPSAxO1xuY29uc3Qga0FycmF5RXh0cmFzVHlwZSA9IDI7XG5cbmNvbnN0IGtNaW5MaW5lTGVuZ3RoID0gMTY7XG5cbi8vIENvbnN0YW50cyB0byBtYXAgdGhlIGl0ZXJhdG9yIHN0YXRlLlxuY29uc3Qga1dlYWsgPSAwO1xuY29uc3Qga0l0ZXJhdG9yID0gMTtcbmNvbnN0IGtNYXBFbnRyaWVzID0gMjtcblxuY29uc3Qga1BlbmRpbmcgPSAwO1xuY29uc3Qga1JlamVjdGVkID0gMjtcblxuLy8gRXNjYXBlZCBjb250cm9sIGNoYXJhY3RlcnMgKHBsdXMgdGhlIHNpbmdsZSBxdW90ZSBhbmQgdGhlIGJhY2tzbGFzaCkuIFVzZVxuLy8gZW1wdHkgc3RyaW5ncyB0byBmaWxsIHVwIHVudXNlZCBlbnRyaWVzLlxuLy8gZGVuby1mbXQtaWdub3JlXG5jb25zdCBtZXRhID0gW1xuICAnXFxcXHgwMCcsICdcXFxceDAxJywgJ1xcXFx4MDInLCAnXFxcXHgwMycsICdcXFxceDA0JywgJ1xcXFx4MDUnLCAnXFxcXHgwNicsICdcXFxceDA3JywgLy8geDA3XG4gICdcXFxcYicsICdcXFxcdCcsICdcXFxcbicsICdcXFxceDBCJywgJ1xcXFxmJywgJ1xcXFxyJywgJ1xcXFx4MEUnLCAnXFxcXHgwRicsICAgICAgICAgICAvLyB4MEZcbiAgJ1xcXFx4MTAnLCAnXFxcXHgxMScsICdcXFxceDEyJywgJ1xcXFx4MTMnLCAnXFxcXHgxNCcsICdcXFxceDE1JywgJ1xcXFx4MTYnLCAnXFxcXHgxNycsIC8vIHgxN1xuICAnXFxcXHgxOCcsICdcXFxceDE5JywgJ1xcXFx4MUEnLCAnXFxcXHgxQicsICdcXFxceDFDJywgJ1xcXFx4MUQnLCAnXFxcXHgxRScsICdcXFxceDFGJywgLy8geDFGXG4gICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCBcIlxcXFwnXCIsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgICAgICAvLyB4MkZcbiAgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICAgICAgICAgLy8geDNGXG4gICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAgICAgICAgIC8vIHg0RlxuICAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnXFxcXFxcXFwnLCAnJywgJycsICcnLCAgICAgLy8geDVGXG4gICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAgICAgICAgIC8vIHg2RlxuICAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnXFxcXHg3RicsICAgIC8vIHg3RlxuICAnXFxcXHg4MCcsICdcXFxceDgxJywgJ1xcXFx4ODInLCAnXFxcXHg4MycsICdcXFxceDg0JywgJ1xcXFx4ODUnLCAnXFxcXHg4NicsICdcXFxceDg3JywgLy8geDg3XG4gICdcXFxceDg4JywgJ1xcXFx4ODknLCAnXFxcXHg4QScsICdcXFxceDhCJywgJ1xcXFx4OEMnLCAnXFxcXHg4RCcsICdcXFxceDhFJywgJ1xcXFx4OEYnLCAvLyB4OEZcbiAgJ1xcXFx4OTAnLCAnXFxcXHg5MScsICdcXFxceDkyJywgJ1xcXFx4OTMnLCAnXFxcXHg5NCcsICdcXFxceDk1JywgJ1xcXFx4OTYnLCAnXFxcXHg5NycsIC8vIHg5N1xuICAnXFxcXHg5OCcsICdcXFxceDk5JywgJ1xcXFx4OUEnLCAnXFxcXHg5QicsICdcXFxceDlDJywgJ1xcXFx4OUQnLCAnXFxcXHg5RScsICdcXFxceDlGJywgLy8geDlGXG5dO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90XG5jb25zdCBpc1VuZGV0ZWN0YWJsZU9iamVjdCA9ICh2KSA9PiB0eXBlb2YgdiA9PT0gXCJ1bmRlZmluZWRcIiAmJiB2ICE9PSB1bmRlZmluZWQ7XG5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tY29udHJvbC1yZWdleFxuY29uc3Qgc3RyRXNjYXBlU2VxdWVuY2VzUmVnRXhwID0gL1tcXHgwMC1cXHgxZlxceDI3XFx4NWNcXHg3Zi1cXHg5Zl0vO1xuLy8gZGVuby1saW50LWlnbm9yZSBuby1jb250cm9sLXJlZ2V4XG5jb25zdCBzdHJFc2NhcGVTZXF1ZW5jZXNSZXBsYWNlciA9IC9bXFx4MDAtXFx4MWZcXHgyN1xceDVjXFx4N2YtXFx4OWZdL2c7XG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNvbnRyb2wtcmVnZXhcbmNvbnN0IHN0ckVzY2FwZVNlcXVlbmNlc1JlZ0V4cFNpbmdsZSA9IC9bXFx4MDAtXFx4MWZcXHg1Y1xceDdmLVxceDlmXS87XG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNvbnRyb2wtcmVnZXhcbmNvbnN0IHN0ckVzY2FwZVNlcXVlbmNlc1JlcGxhY2VyU2luZ2xlID0gL1tcXHgwMC1cXHgxZlxceDVjXFx4N2YtXFx4OWZdL2c7XG5cbmNvbnN0IGtleVN0clJlZ0V4cCA9IC9eW2EtekEtWl9dW2EtekEtWl8wLTldKiQvO1xuY29uc3QgbnVtYmVyUmVnRXhwID0gL14oMHxbMS05XVswLTldKikkLztcbmNvbnN0IG5vZGVNb2R1bGVzUmVnRXhwID0gL1svXFxcXF1ub2RlX21vZHVsZXNbL1xcXFxdKC4rPykoPz1bL1xcXFxdKS9nO1xuXG5jb25zdCBjbGFzc1JlZ0V4cCA9IC9eKFxccytbXihdKj8pXFxzKnsvO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vZGUtY29yZS9uby11bmVzY2FwZWQtcmVnZXhwLWRvdFxuY29uc3Qgc3RyaXBDb21tZW50c1JlZ0V4cCA9IC8oXFwvXFwvLio/XFxuKXwoXFwvXFwqKC58XFxuKSo/XFwqXFwvKS9nO1xuXG5jb25zdCBpbnNwZWN0RGVmYXVsdE9wdGlvbnMgPSB7XG4gIHNob3dIaWRkZW46IGZhbHNlLFxuICBkZXB0aDogMixcbiAgY29sb3JzOiBmYWxzZSxcbiAgY3VzdG9tSW5zcGVjdDogdHJ1ZSxcbiAgc2hvd1Byb3h5OiBmYWxzZSxcbiAgbWF4QXJyYXlMZW5ndGg6IDEwMCxcbiAgbWF4U3RyaW5nTGVuZ3RoOiAxMDAwMCxcbiAgYnJlYWtMZW5ndGg6IDgwLFxuICBjb21wYWN0OiAzLFxuICBzb3J0ZWQ6IGZhbHNlLFxuICBnZXR0ZXJzOiBmYWxzZSxcbn07XG5cbmZ1bmN0aW9uIGdldFVzZXJPcHRpb25zKGN0eCwgaXNDcm9zc0NvbnRleHQpIHtcbiAgY29uc3QgcmV0ID0ge1xuICAgIHN0eWxpemU6IGN0eC5zdHlsaXplLFxuICAgIHNob3dIaWRkZW46IGN0eC5zaG93SGlkZGVuLFxuICAgIGRlcHRoOiBjdHguZGVwdGgsXG4gICAgY29sb3JzOiBjdHguY29sb3JzLFxuICAgIGN1c3RvbUluc3BlY3Q6IGN0eC5jdXN0b21JbnNwZWN0LFxuICAgIHNob3dQcm94eTogY3R4LnNob3dQcm94eSxcbiAgICBtYXhBcnJheUxlbmd0aDogY3R4Lm1heEFycmF5TGVuZ3RoLFxuICAgIG1heFN0cmluZ0xlbmd0aDogY3R4Lm1heFN0cmluZ0xlbmd0aCxcbiAgICBicmVha0xlbmd0aDogY3R4LmJyZWFrTGVuZ3RoLFxuICAgIGNvbXBhY3Q6IGN0eC5jb21wYWN0LFxuICAgIHNvcnRlZDogY3R4LnNvcnRlZCxcbiAgICBnZXR0ZXJzOiBjdHguZ2V0dGVycyxcbiAgICAuLi5jdHgudXNlck9wdGlvbnMsXG4gIH07XG5cbiAgLy8gVHlwaWNhbGx5LCB0aGUgdGFyZ2V0IHZhbHVlIHdpbGwgYmUgYW4gaW5zdGFuY2Ugb2YgYE9iamVjdGAuIElmIHRoYXQgaXNcbiAgLy8gKm5vdCogdGhlIGNhc2UsIHRoZSBvYmplY3QgbWF5IGNvbWUgZnJvbSBhbm90aGVyIHZtLkNvbnRleHQsIGFuZCB3ZSB3YW50XG4gIC8vIHRvIGF2b2lkIHBhc3NpbmcgaXQgb2JqZWN0cyBmcm9tIHRoaXMgQ29udGV4dCBpbiB0aGF0IGNhc2UsIHNvIHdlIHJlbW92ZVxuICAvLyB0aGUgcHJvdG90eXBlIGZyb20gdGhlIHJldHVybmVkIG9iamVjdCBpdHNlbGYgKyB0aGUgYHN0eWxpemUoKWAgZnVuY3Rpb24sXG4gIC8vIGFuZCByZW1vdmUgYWxsIG90aGVyIG5vbi1wcmltaXRpdmVzLCBpbmNsdWRpbmcgbm9uLXByaW1pdGl2ZSB1c2VyIG9wdGlvbnMuXG4gIGlmIChpc0Nyb3NzQ29udGV4dCkge1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZXQsIG51bGwpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJldCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHR5cGVvZiByZXRba2V5XSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgcmV0W2tleV0gPT09IFwiZnVuY3Rpb25cIikgJiZcbiAgICAgICAgcmV0W2tleV0gIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBkZWxldGUgcmV0W2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldC5zdHlsaXplID0gT2JqZWN0LnNldFByb3RvdHlwZU9mKCh2YWx1ZSwgZmxhdm91cikgPT4ge1xuICAgICAgbGV0IHN0eWxpemVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3R5bGl6ZWQgPSBgJHtjdHguc3R5bGl6ZSh2YWx1ZSwgZmxhdm91cil9YDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBub29wXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGl6ZWQgIT09IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgIC8vIGBzdHlsaXplZGAgaXMgYSBzdHJpbmcgYXMgaXQgc2hvdWxkIGJlLCB3aGljaCBpcyBzYWZlIHRvIHBhc3MgYWxvbmcuXG4gICAgICByZXR1cm4gc3R5bGl6ZWQ7XG4gICAgfSwgbnVsbCk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEVjaG9zIHRoZSB2YWx1ZSBvZiBhbnkgaW5wdXQuIFRyaWVzIHRvIHByaW50IHRoZSB2YWx1ZSBvdXRcbiAqIGluIHRoZSBiZXN0IHdheSBwb3NzaWJsZSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzLlxuICovXG4vKiBMZWdhY3k6IHZhbHVlLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzICovXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgb3B0cykge1xuICAvLyBEZWZhdWx0IG9wdGlvbnNcbiAgY29uc3QgY3R4ID0ge1xuICAgIGJ1ZGdldDoge30sXG4gICAgaW5kZW50YXRpb25Mdmw6IDAsXG4gICAgc2VlbjogW10sXG4gICAgY3VycmVudERlcHRoOiAwLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yLFxuICAgIHNob3dIaWRkZW46IGluc3BlY3REZWZhdWx0T3B0aW9ucy5zaG93SGlkZGVuLFxuICAgIGRlcHRoOiBpbnNwZWN0RGVmYXVsdE9wdGlvbnMuZGVwdGgsXG4gICAgY29sb3JzOiBpbnNwZWN0RGVmYXVsdE9wdGlvbnMuY29sb3JzLFxuICAgIGN1c3RvbUluc3BlY3Q6IGluc3BlY3REZWZhdWx0T3B0aW9ucy5jdXN0b21JbnNwZWN0LFxuICAgIHNob3dQcm94eTogaW5zcGVjdERlZmF1bHRPcHRpb25zLnNob3dQcm94eSxcbiAgICBtYXhBcnJheUxlbmd0aDogaW5zcGVjdERlZmF1bHRPcHRpb25zLm1heEFycmF5TGVuZ3RoLFxuICAgIG1heFN0cmluZ0xlbmd0aDogaW5zcGVjdERlZmF1bHRPcHRpb25zLm1heFN0cmluZ0xlbmd0aCxcbiAgICBicmVha0xlbmd0aDogaW5zcGVjdERlZmF1bHRPcHRpb25zLmJyZWFrTGVuZ3RoLFxuICAgIGNvbXBhY3Q6IGluc3BlY3REZWZhdWx0T3B0aW9ucy5jb21wYWN0LFxuICAgIHNvcnRlZDogaW5zcGVjdERlZmF1bHRPcHRpb25zLnNvcnRlZCxcbiAgICBnZXR0ZXJzOiBpbnNwZWN0RGVmYXVsdE9wdGlvbnMuZ2V0dGVycyxcbiAgfTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgLy8gTGVnYWN5Li4uXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgICBpZiAoYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3R4LmRlcHRoID0gYXJndW1lbnRzWzJdO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFNldCB1c2VyLXNwZWNpZmllZCBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSBcImJvb2xlYW5cIikge1xuICAgICAgY3R4LnNob3dIaWRkZW4gPSBvcHRzO1xuICAgIH0gZWxzZSBpZiAob3B0cykge1xuICAgICAgY29uc3Qgb3B0S2V5cyA9IE9iamVjdC5rZXlzKG9wdHMpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG9wdEtleXNbaV07XG4gICAgICAgIC8vIFRPRE8oQnJpZGdlQVIpOiBGaW5kIGEgc29sdXRpb24gd2hhdCB0byBkbyBhYm91dCBzdHlsaXplLiBFaXRoZXIgbWFrZVxuICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHB1YmxpYyBvciBhZGQgYSBuZXcgQVBJIHdpdGggYSBzaW1pbGFyIG9yIGJldHRlclxuICAgICAgICAvLyBmdW5jdGlvbmFsaXR5LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgICBpbnNwZWN0RGVmYXVsdE9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSB8fFxuICAgICAgICAgIGtleSA9PT0gXCJzdHlsaXplXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgY3R4W2tleV0gPSBvcHRzW2tleV07XG4gICAgICAgIH0gZWxzZSBpZiAoY3R4LnVzZXJPcHRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIHBhc3MgdGhyb3VnaCB0aGUgYWN0dWFsIHVzZXIgaW5wdXQuXG4gICAgICAgICAgY3R4LnVzZXJPcHRpb25zID0gb3B0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICBpZiAoY3R4Lm1heEFycmF5TGVuZ3RoID09PSBudWxsKSBjdHgubWF4QXJyYXlMZW5ndGggPSBJbmZpbml0eTtcbiAgaWYgKGN0eC5tYXhTdHJpbmdMZW5ndGggPT09IG51bGwpIGN0eC5tYXhTdHJpbmdMZW5ndGggPSBJbmZpbml0eTtcbiAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgdmFsdWUsIDApO1xufVxuY29uc3QgY3VzdG9tSW5zcGVjdFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKTtcbmluc3BlY3QuY3VzdG9tID0gY3VzdG9tSW5zcGVjdFN5bWJvbDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3BlY3QsIFwiZGVmYXVsdE9wdGlvbnNcIiwge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIGluc3BlY3REZWZhdWx0T3B0aW9ucztcbiAgfSxcbiAgc2V0KG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCBcIm9wdGlvbnNcIik7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oaW5zcGVjdERlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgfSxcbn0pO1xuXG4vLyBTZXQgR3JhcGhpY3MgUmVuZGl0aW9uIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3Ncbi8vIEVhY2ggY29sb3IgY29uc2lzdHMgb2YgYW4gYXJyYXkgd2l0aCB0aGUgY29sb3IgY29kZSBhcyBmaXJzdCBlbnRyeSBhbmQgdGhlXG4vLyByZXNldCBjb2RlIGFzIHNlY29uZCBlbnRyeS5cbmNvbnN0IGRlZmF1bHRGRyA9IDM5O1xuY29uc3QgZGVmYXVsdEJHID0gNDk7XG5pbnNwZWN0LmNvbG9ycyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwge1xuICByZXNldDogWzAsIDBdLFxuICBib2xkOiBbMSwgMjJdLFxuICBkaW06IFsyLCAyMl0sIC8vIEFsaWFzOiBmYWludFxuICBpdGFsaWM6IFszLCAyM10sXG4gIHVuZGVybGluZTogWzQsIDI0XSxcbiAgYmxpbms6IFs1LCAyNV0sXG4gIC8vIFN3YXAgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnNcbiAgaW52ZXJzZTogWzcsIDI3XSwgLy8gQWxpYXM6IHN3YXBjb2xvcnMsIHN3YXBDb2xvcnNcbiAgaGlkZGVuOiBbOCwgMjhdLCAvLyBBbGlhczogY29uY2VhbFxuICBzdHJpa2V0aHJvdWdoOiBbOSwgMjldLCAvLyBBbGlhczogc3RyaWtlVGhyb3VnaCwgY3Jvc3NlZG91dCwgY3Jvc3NlZE91dFxuICBkb3VibGV1bmRlcmxpbmU6IFsyMSwgMjRdLCAvLyBBbGlhczogZG91YmxlVW5kZXJsaW5lXG4gIGJsYWNrOiBbMzAsIGRlZmF1bHRGR10sXG4gIHJlZDogWzMxLCBkZWZhdWx0RkddLFxuICBncmVlbjogWzMyLCBkZWZhdWx0RkddLFxuICB5ZWxsb3c6IFszMywgZGVmYXVsdEZHXSxcbiAgYmx1ZTogWzM0LCBkZWZhdWx0RkddLFxuICBtYWdlbnRhOiBbMzUsIGRlZmF1bHRGR10sXG4gIGN5YW46IFszNiwgZGVmYXVsdEZHXSxcbiAgd2hpdGU6IFszNywgZGVmYXVsdEZHXSxcbiAgYmdCbGFjazogWzQwLCBkZWZhdWx0QkddLFxuICBiZ1JlZDogWzQxLCBkZWZhdWx0QkddLFxuICBiZ0dyZWVuOiBbNDIsIGRlZmF1bHRCR10sXG4gIGJnWWVsbG93OiBbNDMsIGRlZmF1bHRCR10sXG4gIGJnQmx1ZTogWzQ0LCBkZWZhdWx0QkddLFxuICBiZ01hZ2VudGE6IFs0NSwgZGVmYXVsdEJHXSxcbiAgYmdDeWFuOiBbNDYsIGRlZmF1bHRCR10sXG4gIGJnV2hpdGU6IFs0NywgZGVmYXVsdEJHXSxcbiAgZnJhbWVkOiBbNTEsIDU0XSxcbiAgb3ZlcmxpbmVkOiBbNTMsIDU1XSxcbiAgZ3JheTogWzkwLCBkZWZhdWx0RkddLCAvLyBBbGlhczogZ3JleSwgYmxhY2tCcmlnaHRcbiAgcmVkQnJpZ2h0OiBbOTEsIGRlZmF1bHRGR10sXG4gIGdyZWVuQnJpZ2h0OiBbOTIsIGRlZmF1bHRGR10sXG4gIHllbGxvd0JyaWdodDogWzkzLCBkZWZhdWx0RkddLFxuICBibHVlQnJpZ2h0OiBbOTQsIGRlZmF1bHRGR10sXG4gIG1hZ2VudGFCcmlnaHQ6IFs5NSwgZGVmYXVsdEZHXSxcbiAgY3lhbkJyaWdodDogWzk2LCBkZWZhdWx0RkddLFxuICB3aGl0ZUJyaWdodDogWzk3LCBkZWZhdWx0RkddLFxuICBiZ0dyYXk6IFsxMDAsIGRlZmF1bHRCR10sIC8vIEFsaWFzOiBiZ0dyZXksIGJnQmxhY2tCcmlnaHRcbiAgYmdSZWRCcmlnaHQ6IFsxMDEsIGRlZmF1bHRCR10sXG4gIGJnR3JlZW5CcmlnaHQ6IFsxMDIsIGRlZmF1bHRCR10sXG4gIGJnWWVsbG93QnJpZ2h0OiBbMTAzLCBkZWZhdWx0QkddLFxuICBiZ0JsdWVCcmlnaHQ6IFsxMDQsIGRlZmF1bHRCR10sXG4gIGJnTWFnZW50YUJyaWdodDogWzEwNSwgZGVmYXVsdEJHXSxcbiAgYmdDeWFuQnJpZ2h0OiBbMTA2LCBkZWZhdWx0QkddLFxuICBiZ1doaXRlQnJpZ2h0OiBbMTA3LCBkZWZhdWx0QkddLFxufSk7XG5cbmZ1bmN0aW9uIGRlZmluZUNvbG9yQWxpYXModGFyZ2V0LCBhbGlhcykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zcGVjdC5jb2xvcnMsIGFsaWFzLCB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXNbdGFyZ2V0XTtcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgdGhpc1t0YXJnZXRdID0gdmFsdWU7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gIH0pO1xufVxuXG5kZWZpbmVDb2xvckFsaWFzKFwiZ3JheVwiLCBcImdyZXlcIik7XG5kZWZpbmVDb2xvckFsaWFzKFwiZ3JheVwiLCBcImJsYWNrQnJpZ2h0XCIpO1xuZGVmaW5lQ29sb3JBbGlhcyhcImJnR3JheVwiLCBcImJnR3JleVwiKTtcbmRlZmluZUNvbG9yQWxpYXMoXCJiZ0dyYXlcIiwgXCJiZ0JsYWNrQnJpZ2h0XCIpO1xuZGVmaW5lQ29sb3JBbGlhcyhcImRpbVwiLCBcImZhaW50XCIpO1xuZGVmaW5lQ29sb3JBbGlhcyhcInN0cmlrZXRocm91Z2hcIiwgXCJjcm9zc2Vkb3V0XCIpO1xuZGVmaW5lQ29sb3JBbGlhcyhcInN0cmlrZXRocm91Z2hcIiwgXCJzdHJpa2VUaHJvdWdoXCIpO1xuZGVmaW5lQ29sb3JBbGlhcyhcInN0cmlrZXRocm91Z2hcIiwgXCJjcm9zc2VkT3V0XCIpO1xuZGVmaW5lQ29sb3JBbGlhcyhcImhpZGRlblwiLCBcImNvbmNlYWxcIik7XG5kZWZpbmVDb2xvckFsaWFzKFwiaW52ZXJzZVwiLCBcInN3YXBDb2xvcnNcIik7XG5kZWZpbmVDb2xvckFsaWFzKFwiaW52ZXJzZVwiLCBcInN3YXBjb2xvcnNcIik7XG5kZWZpbmVDb2xvckFsaWFzKFwiZG91YmxldW5kZXJsaW5lXCIsIFwiZG91YmxlVW5kZXJsaW5lXCIpO1xuXG4vLyBUT0RPKEJyaWRnZUFSKTogQWRkIGZ1bmN0aW9uIHN0eWxlIHN1cHBvcnQgZm9yIG1vcmUgY29tcGxleCBzdHlsZXMuXG4vLyBEb24ndCB1c2UgJ2JsdWUnIG5vdCB2aXNpYmxlIG9uIGNtZC5leGVcbmluc3BlY3Quc3R5bGVzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCB7XG4gIHNwZWNpYWw6IFwiY3lhblwiLFxuICBudW1iZXI6IFwieWVsbG93XCIsXG4gIGJpZ2ludDogXCJ5ZWxsb3dcIixcbiAgYm9vbGVhbjogXCJ5ZWxsb3dcIixcbiAgdW5kZWZpbmVkOiBcImdyZXlcIixcbiAgbnVsbDogXCJib2xkXCIsXG4gIHN0cmluZzogXCJncmVlblwiLFxuICBzeW1ib2w6IFwiZ3JlZW5cIixcbiAgZGF0ZTogXCJtYWdlbnRhXCIsXG4gIC8vIFwibmFtZVwiOiBpbnRlbnRpb25hbGx5IG5vdCBzdHlsaW5nXG4gIC8vIFRPRE8oQnJpZGdlQVIpOiBIaWdobGlnaHQgcmVndWxhciBleHByZXNzaW9ucyBwcm9wZXJseS5cbiAgcmVnZXhwOiBcInJlZFwiLFxuICBtb2R1bGU6IFwidW5kZXJsaW5lXCIsXG59KTtcblxuZnVuY3Rpb24gYWRkUXVvdGVzKHN0ciwgcXVvdGVzKSB7XG4gIGlmIChxdW90ZXMgPT09IC0xKSB7XG4gICAgcmV0dXJuIGBcIiR7c3RyfVwiYDtcbiAgfVxuICBpZiAocXVvdGVzID09PSAtMikge1xuICAgIHJldHVybiBgXFxgJHtzdHJ9XFxgYDtcbiAgfVxuICByZXR1cm4gYCcke3N0cn0nYDtcbn1cblxuLy8gVE9ETyh3YWZ1d2FmdTEzKTogRmlndXJlIG91dFxuY29uc3QgZXNjYXBlRm4gPSAoc3RyKSA9PiBtZXRhW3N0ci5jaGFyQ29kZUF0KDApXTtcblxuLy8gRXNjYXBlIGNvbnRyb2wgY2hhcmFjdGVycywgc2luZ2xlIHF1b3RlcyBhbmQgdGhlIGJhY2tzbGFzaC5cbi8vIFRoaXMgaXMgc2ltaWxhciB0byBKU09OIHN0cmluZ2lmeSBlc2NhcGluZy5cbmZ1bmN0aW9uIHN0ckVzY2FwZShzdHIpIHtcbiAgbGV0IGVzY2FwZVRlc3QgPSBzdHJFc2NhcGVTZXF1ZW5jZXNSZWdFeHA7XG4gIGxldCBlc2NhcGVSZXBsYWNlID0gc3RyRXNjYXBlU2VxdWVuY2VzUmVwbGFjZXI7XG4gIGxldCBzaW5nbGVRdW90ZSA9IDM5O1xuXG4gIC8vIENoZWNrIGZvciBkb3VibGUgcXVvdGVzLiBJZiBub3QgcHJlc2VudCwgZG8gbm90IGVzY2FwZSBzaW5nbGUgcXVvdGVzIGFuZFxuICAvLyBpbnN0ZWFkIHdyYXAgdGhlIHRleHQgaW4gZG91YmxlIHF1b3Rlcy4gSWYgZG91YmxlIHF1b3RlcyBleGlzdCwgY2hlY2sgZm9yXG4gIC8vIGJhY2t0aWNrcy4gSWYgdGhleSBkbyBub3QgZXhpc3QsIHVzZSB0aG9zZSBhcyBmYWxsYmFjayBpbnN0ZWFkIG9mIHRoZVxuICAvLyBkb3VibGUgcXVvdGVzLlxuICBpZiAoc3RyLmluY2x1ZGVzKFwiJ1wiKSkge1xuICAgIC8vIFRoaXMgaW52YWxpZGF0ZXMgdGhlIGNoYXJDb2RlIGFuZCB0aGVyZWZvcmUgY2FuIG5vdCBiZSBtYXRjaGVkIGZvclxuICAgIC8vIGFueW1vcmUuXG4gICAgaWYgKCFzdHIuaW5jbHVkZXMoJ1wiJykpIHtcbiAgICAgIHNpbmdsZVF1b3RlID0gLTE7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICFzdHIuaW5jbHVkZXMoXCJgXCIpICYmXG4gICAgICAhc3RyLmluY2x1ZGVzKFwiJHtcIilcbiAgICApIHtcbiAgICAgIHNpbmdsZVF1b3RlID0gLTI7XG4gICAgfVxuICAgIGlmIChzaW5nbGVRdW90ZSAhPT0gMzkpIHtcbiAgICAgIGVzY2FwZVRlc3QgPSBzdHJFc2NhcGVTZXF1ZW5jZXNSZWdFeHBTaW5nbGU7XG4gICAgICBlc2NhcGVSZXBsYWNlID0gc3RyRXNjYXBlU2VxdWVuY2VzUmVwbGFjZXJTaW5nbGU7XG4gICAgfVxuICB9XG5cbiAgLy8gU29tZSBtYWdpYyBudW1iZXJzIHRoYXQgd29ya2VkIG91dCBmaW5lIHdoaWxlIGJlbmNobWFya2luZyB3aXRoIHY4IDYuMFxuICBpZiAoc3RyLmxlbmd0aCA8IDUwMDAgJiYgIWVzY2FwZVRlc3QudGVzdChzdHIpKSB7XG4gICAgcmV0dXJuIGFkZFF1b3RlcyhzdHIsIHNpbmdsZVF1b3RlKTtcbiAgfVxuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKGVzY2FwZVJlcGxhY2UsIGVzY2FwZUZuKTtcbiAgICByZXR1cm4gYWRkUXVvdGVzKHN0ciwgc2luZ2xlUXVvdGUpO1xuICB9XG5cbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gIGxldCBsYXN0ID0gMDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXN0SW5kZXg7IGkrKykge1xuICAgIGNvbnN0IHBvaW50ID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKFxuICAgICAgcG9pbnQgPT09IHNpbmdsZVF1b3RlIHx8XG4gICAgICBwb2ludCA9PT0gOTIgfHxcbiAgICAgIHBvaW50IDwgMzIgfHxcbiAgICAgIChwb2ludCA+IDEyNiAmJiBwb2ludCA8IDE2MClcbiAgICApIHtcbiAgICAgIGlmIChsYXN0ID09PSBpKSB7XG4gICAgICAgIHJlc3VsdCArPSBtZXRhW3BvaW50XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBgJHtzdHIuc2xpY2UobGFzdCwgaSl9JHttZXRhW3BvaW50XX1gO1xuICAgICAgfVxuICAgICAgbGFzdCA9IGkgKyAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsYXN0ICE9PSBsYXN0SW5kZXgpIHtcbiAgICByZXN1bHQgKz0gc3RyLnNsaWNlKGxhc3QpO1xuICB9XG4gIHJldHVybiBhZGRRdW90ZXMocmVzdWx0LCBzaW5nbGVRdW90ZSk7XG59XG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgY29uc3Qgc3R5bGUgPSBpbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO1xuICBpZiAoc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGNvbG9yID0gaW5zcGVjdC5jb2xvcnNbc3R5bGVdO1xuICAgIGlmIChjb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYFxcdTAwMWJbJHtjb2xvclswXX1tJHtzdHJ9XFx1MDAxYlske2NvbG9yWzFdfW1gO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiBzdHlsaXplTm9Db2xvcihzdHIpIHtcbiAgcmV0dXJuIHN0cjtcbn1cblxuLy8gTm90ZTogdXNpbmcgYGZvcm1hdFZhbHVlYCBkaXJlY3RseSByZXF1aXJlcyB0aGUgaW5kZW50YXRpb24gbGV2ZWwgdG8gYmVcbi8vIGNvcnJlY3RlZCBieSBzZXR0aW5nIGBjdHguaW5kZW50YXRpb25MdkwgKz0gZGlmZmAgYW5kIHRoZW4gdG8gZGVjcmVhc2UgdGhlXG4vLyB2YWx1ZSBhZnRlcndhcmRzIGFnYWluLlxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoXG4gIGN0eCxcbiAgdmFsdWUsXG4gIHJlY3Vyc2VUaW1lcyxcbiAgdHlwZWRBcnJheSxcbikge1xuICAvLyBQcmltaXRpdmUgdHlwZXMgY2Fubm90IGhhdmUgcHJvcGVydGllcy5cbiAgaWYgKFxuICAgIHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiICYmXG4gICAgIWlzVW5kZXRlY3RhYmxlT2JqZWN0KHZhbHVlKVxuICApIHtcbiAgICByZXR1cm4gZm9ybWF0UHJpbWl0aXZlKGN0eC5zdHlsaXplLCB2YWx1ZSwgY3R4KTtcbiAgfVxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoXCJudWxsXCIsIFwibnVsbFwiKTtcbiAgfVxuXG4gIC8vIE1lbW9yaXplIHRoZSBjb250ZXh0IGZvciBjdXN0b20gaW5zcGVjdGlvbiBvbiBwcm94aWVzLlxuICBjb25zdCBjb250ZXh0ID0gdmFsdWU7XG4gIC8vIEFsd2F5cyBjaGVjayBmb3IgcHJveGllcyB0byBwcmV2ZW50IHNpZGUgZWZmZWN0cyBhbmQgdG8gcHJldmVudCB0cmlnZ2VyaW5nXG4gIC8vIGFueSBwcm94eSBoYW5kbGVycy5cbiAgLy8gVE9ETyh3YWZ1d2FmdTEzKTogU2V0IFByb3h5XG4gIGNvbnN0IHByb3h5ID0gdW5kZWZpbmVkO1xuICAvLyBjb25zdCBwcm94eSA9IGdldFByb3h5RGV0YWlscyh2YWx1ZSwgISFjdHguc2hvd1Byb3h5KTtcbiAgLy8gaWYgKHByb3h5ICE9PSB1bmRlZmluZWQpIHtcbiAgLy8gICBpZiAoY3R4LnNob3dQcm94eSkge1xuICAvLyAgICAgcmV0dXJuIGZvcm1hdFByb3h5KGN0eCwgcHJveHksIHJlY3Vyc2VUaW1lcyk7XG4gIC8vICAgfVxuICAvLyAgIHZhbHVlID0gcHJveHk7XG4gIC8vIH1cblxuICAvLyBQcm92aWRlIGEgaG9vayBmb3IgdXNlci1zcGVjaWZpZWQgaW5zcGVjdCBmdW5jdGlvbnMuXG4gIC8vIENoZWNrIHRoYXQgdmFsdWUgaXMgYW4gb2JqZWN0IHdpdGggYW4gaW5zcGVjdCBmdW5jdGlvbiBvbiBpdC5cbiAgaWYgKGN0eC5jdXN0b21JbnNwZWN0KSB7XG4gICAgY29uc3QgbWF5YmVDdXN0b20gPSB2YWx1ZVtjdXN0b21JbnNwZWN0U3ltYm9sXTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbWF5YmVDdXN0b20gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdXRpbCBtb2R1bGUsIGl0cyBpbnNwZWN0IGZ1bmN0aW9uIGlzIHNwZWNpYWwuXG4gICAgICBtYXliZUN1c3RvbSAhPT0gaW5zcGVjdCAmJlxuICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IGFueSBwcm90b3R5cGUgb2JqZWN0cyB1c2luZyB0aGUgY2lyY3VsYXIgY2hlY2suXG4gICAgICAhKHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSA9PT0gdmFsdWUpXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIG1ha2VzIHN1cmUgdGhlIHJlY3Vyc2VUaW1lcyBhcmUgcmVwb3J0ZWQgYXMgYmVmb3JlIHdoaWxlIHVzaW5nXG4gICAgICAvLyBhIGNvdW50ZXIgaW50ZXJuYWxseS5cbiAgICAgIGNvbnN0IGRlcHRoID0gY3R4LmRlcHRoID09PSBudWxsID8gbnVsbCA6IGN0eC5kZXB0aCAtIHJlY3Vyc2VUaW1lcztcbiAgICAgIGNvbnN0IGlzQ3Jvc3NDb250ZXh0ID0gcHJveHkgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAhKGNvbnRleHQgaW5zdGFuY2VvZiBPYmplY3QpO1xuICAgICAgY29uc3QgcmV0ID0gbWF5YmVDdXN0b20uY2FsbChcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIGdldFVzZXJPcHRpb25zKGN0eCwgaXNDcm9zc0NvbnRleHQpLFxuICAgICAgKTtcbiAgICAgIC8vIElmIHRoZSBjdXN0b20gaW5zcGVjdGlvbiBtZXRob2QgcmV0dXJuZWQgYHRoaXNgLCBkb24ndCBnbyBpbnRvXG4gICAgICAvLyBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICBpZiAocmV0ICE9PSBjb250ZXh0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQucmVwbGFjZSgvXFxuL2csIGBcXG4ke1wiIFwiLnJlcGVhdChjdHguaW5kZW50YXRpb25MdmwpfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFVzaW5nIGFuIGFycmF5IGhlcmUgaXMgYWN0dWFsbHkgYmV0dGVyIGZvciB0aGUgYXZlcmFnZSBjYXNlIHRoYW4gdXNpbmdcbiAgLy8gYSBTZXQuIGBzZWVuYCB3aWxsIG9ubHkgY2hlY2sgZm9yIHRoZSBkZXB0aCBhbmQgd2lsbCBuZXZlciBncm93IHRvbyBsYXJnZS5cbiAgaWYgKGN0eC5zZWVuLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgIGxldCBpbmRleCA9IDE7XG4gICAgaWYgKGN0eC5jaXJjdWxhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguY2lyY3VsYXIgPSBuZXcgTWFwKCk7XG4gICAgICBjdHguY2lyY3VsYXIuc2V0KHZhbHVlLCBpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4ID0gY3R4LmNpcmN1bGFyLmdldCh2YWx1ZSk7XG4gICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmRleCA9IGN0eC5jaXJjdWxhci5zaXplICsgMTtcbiAgICAgICAgY3R4LmNpcmN1bGFyLnNldCh2YWx1ZSwgaW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4LnN0eWxpemUoYFtDaXJjdWxhciAqJHtpbmRleH1dYCwgXCJzcGVjaWFsXCIpO1xuICB9XG5cbiAgcmV0dXJuIGZvcm1hdFJhdyhjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHR5cGVkQXJyYXkpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSYXcoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB0eXBlZEFycmF5KSB7XG4gIGxldCBrZXlzO1xuICBsZXQgcHJvdG9Qcm9wcztcbiAgaWYgKGN0eC5zaG93SGlkZGVuICYmIChyZWN1cnNlVGltZXMgPD0gY3R4LmRlcHRoIHx8IGN0eC5kZXB0aCA9PT0gbnVsbCkpIHtcbiAgICBwcm90b1Byb3BzID0gW107XG4gIH1cblxuICBjb25zdCBjb25zdHJ1Y3RvciA9IGdldENvbnN0cnVjdG9yTmFtZSh2YWx1ZSwgY3R4LCByZWN1cnNlVGltZXMsIHByb3RvUHJvcHMpO1xuICAvLyBSZXNldCB0aGUgdmFyaWFibGUgdG8gY2hlY2sgZm9yIHRoaXMgbGF0ZXIgb24uXG4gIGlmIChwcm90b1Byb3BzICE9PSB1bmRlZmluZWQgJiYgcHJvdG9Qcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICBwcm90b1Byb3BzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IHRhZyA9IHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ107XG4gIC8vIE9ubHkgbGlzdCB0aGUgdGFnIGluIGNhc2UgaXQncyBub24tZW51bWVyYWJsZSAvIG5vdCBhbiBvd24gcHJvcGVydHkuXG4gIC8vIE90aGVyd2lzZSB3ZSdkIHByaW50IHRoaXMgdHdpY2UuXG4gIGlmIChcbiAgICB0eXBlb2YgdGFnICE9PSBcInN0cmluZ1wiXG4gICAgLy8gVE9ETyh3YWZ1d2FmdTEzKTogSW1wbGVtZW50XG4gICAgLy8gKHRhZyAhPT0gXCJcIiAmJlxuICAgIC8vICAgKGN0eC5zaG93SGlkZGVuXG4gICAgLy8gICAgID8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAgIC8vICAgICA6IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUpKFxuICAgIC8vICAgICAgIHZhbHVlLFxuICAgIC8vICAgICAgIFN5bWJvbC50b1N0cmluZ1RhZyxcbiAgICAvLyAgICAgKSlcbiAgKSB7XG4gICAgdGFnID0gXCJcIjtcbiAgfVxuICBsZXQgYmFzZSA9IFwiXCI7XG4gIGxldCBmb3JtYXR0ZXIgPSBnZXRFbXB0eUZvcm1hdEFycmF5O1xuICBsZXQgYnJhY2VzO1xuICBsZXQgbm9JdGVyYXRvciA9IHRydWU7XG4gIGxldCBpID0gMDtcbiAgY29uc3QgZmlsdGVyID0gY3R4LnNob3dIaWRkZW4gPyBBTExfUFJPUEVSVElFUyA6IE9OTFlfRU5VTUVSQUJMRTtcblxuICBsZXQgZXh0cmFzVHlwZSA9IGtPYmplY3RUeXBlO1xuXG4gIC8vIEl0ZXJhdG9ycyBhbmQgdGhlIHJlc3QgYXJlIHNwbGl0IHRvIHJlZHVjZSBjaGVja3MuXG4gIC8vIFdlIGhhdmUgdG8gY2hlY2sgYWxsIHZhbHVlcyBpbiBjYXNlIHRoZSBjb25zdHJ1Y3RvciBpcyBzZXQgdG8gbnVsbC5cbiAgLy8gT3RoZXJ3aXNlIGl0IHdvdWxkIG5vdCBwb3NzaWJsZSB0byBpZGVudGlmeSBhbGwgdHlwZXMgcHJvcGVybHkuXG4gIGlmICh2YWx1ZVtTeW1ib2wuaXRlcmF0b3JdIHx8IGNvbnN0cnVjdG9yID09PSBudWxsKSB7XG4gICAgbm9JdGVyYXRvciA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gT25seSBzZXQgdGhlIGNvbnN0cnVjdG9yIGZvciBub24gb3JkaW5hcnkgKFwiQXJyYXkgWy4uLl1cIikgYXJyYXlzLlxuICAgICAgY29uc3QgcHJlZml4ID0gKGNvbnN0cnVjdG9yICE9PSBcIkFycmF5XCIgfHwgdGFnICE9PSBcIlwiKVxuICAgICAgICA/IGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBcIkFycmF5XCIsIGAoJHt2YWx1ZS5sZW5ndGh9KWApXG4gICAgICAgIDogXCJcIjtcbiAgICAgIGtleXMgPSBnZXRPd25Ob25JbmRleFByb3BlcnRpZXModmFsdWUsIGZpbHRlcik7XG4gICAgICBicmFjZXMgPSBbYCR7cHJlZml4fVtgLCBcIl1cIl07XG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwICYmIGtleXMubGVuZ3RoID09PSAwICYmIHByb3RvUHJvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYCR7YnJhY2VzWzBdfV1gO1xuICAgICAgfVxuICAgICAgZXh0cmFzVHlwZSA9IGtBcnJheUV4dHJhc1R5cGU7XG4gICAgICBmb3JtYXR0ZXIgPSBmb3JtYXRBcnJheTtcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzU2V0KHZhbHVlKSkge1xuICAgICAgY29uc3Qgc2l6ZSA9IHZhbHVlLnNpemU7XG4gICAgICBjb25zdCBwcmVmaXggPSBnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgXCJTZXRcIiwgYCgke3NpemV9KWApO1xuICAgICAga2V5cyA9IGdldEtleXModmFsdWUsIGN0eC5zaG93SGlkZGVuKTtcbiAgICAgIGZvcm1hdHRlciA9IGNvbnN0cnVjdG9yICE9PSBudWxsXG4gICAgICAgID8gZm9ybWF0U2V0LmJpbmQobnVsbCwgdmFsdWUpXG4gICAgICAgIDogZm9ybWF0U2V0LmJpbmQobnVsbCwgdmFsdWUudmFsdWVzKCkpO1xuICAgICAgaWYgKHNpemUgPT09IDAgJiYga2V5cy5sZW5ndGggPT09IDAgJiYgcHJvdG9Qcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9e31gO1xuICAgICAgfVxuICAgICAgYnJhY2VzID0gW2Ake3ByZWZpeH17YCwgXCJ9XCJdO1xuICAgIH0gZWxzZSBpZiAodHlwZXMuaXNNYXAodmFsdWUpKSB7XG4gICAgICBjb25zdCBzaXplID0gdmFsdWUuc2l6ZTtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBcIk1hcFwiLCBgKCR7c2l6ZX0pYCk7XG4gICAgICBrZXlzID0gZ2V0S2V5cyh2YWx1ZSwgY3R4LnNob3dIaWRkZW4pO1xuICAgICAgZm9ybWF0dGVyID0gY29uc3RydWN0b3IgIT09IG51bGxcbiAgICAgICAgPyBmb3JtYXRNYXAuYmluZChudWxsLCB2YWx1ZSlcbiAgICAgICAgOiBmb3JtYXRNYXAuYmluZChudWxsLCB2YWx1ZS5lbnRyaWVzKCkpO1xuICAgICAgaWYgKHNpemUgPT09IDAgJiYga2V5cy5sZW5ndGggPT09IDAgJiYgcHJvdG9Qcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9e31gO1xuICAgICAgfVxuICAgICAgYnJhY2VzID0gW2Ake3ByZWZpeH17YCwgXCJ9XCJdO1xuICAgIH0gZWxzZSBpZiAodHlwZXMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAga2V5cyA9IGdldE93bk5vbkluZGV4UHJvcGVydGllcyh2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGNvbnN0IGJvdW5kID0gdmFsdWU7XG4gICAgICBjb25zdCBmYWxsYmFjayA9IFwiXCI7XG4gICAgICBpZiAoY29uc3RydWN0b3IgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETyh3YWZ1d2FmdTEzKTogSW1wbGVtZW50XG4gICAgICAgIC8vIGZhbGxiYWNrID0gVHlwZWRBcnJheVByb3RvdHlwZUdldFN5bWJvbFRvU3RyaW5nVGFnKHZhbHVlKTtcbiAgICAgICAgLy8gLy8gUmVjb25zdHJ1Y3QgdGhlIGFycmF5IGluZm9ybWF0aW9uLlxuICAgICAgICAvLyBib3VuZCA9IG5ldyBwcmltb3JkaWFsc1tmYWxsYmFja10odmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2l6ZSA9IHZhbHVlLmxlbmd0aDtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBmYWxsYmFjaywgYCgke3NpemV9KWApO1xuICAgICAgYnJhY2VzID0gW2Ake3ByZWZpeH1bYCwgXCJdXCJdO1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCAmJiBrZXlzLmxlbmd0aCA9PT0gMCAmJiAhY3R4LnNob3dIaWRkZW4pIHtcbiAgICAgICAgcmV0dXJuIGAke2JyYWNlc1swXX1dYDtcbiAgICAgIH1cbiAgICAgIC8vIFNwZWNpYWwgaGFuZGxlIHRoZSB2YWx1ZS4gVGhlIG9yaWdpbmFsIHZhbHVlIGlzIHJlcXVpcmVkIGJlbG93LiBUaGVcbiAgICAgIC8vIGJvdW5kIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIHRvIHJlY29uc3RydWN0IG1pc3NpbmcgaW5mb3JtYXRpb24uXG4gICAgICAoZm9ybWF0dGVyKSA9IGZvcm1hdFR5cGVkQXJyYXkuYmluZChudWxsLCBib3VuZCwgc2l6ZSk7XG4gICAgICBleHRyYXNUeXBlID0ga0FycmF5RXh0cmFzVHlwZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzTWFwSXRlcmF0b3IodmFsdWUpKSB7XG4gICAgICBrZXlzID0gZ2V0S2V5cyh2YWx1ZSwgY3R4LnNob3dIaWRkZW4pO1xuICAgICAgYnJhY2VzID0gZ2V0SXRlcmF0b3JCcmFjZXMoXCJNYXBcIiwgdGFnKTtcbiAgICAgIC8vIEFkZCBicmFjZXMgdG8gdGhlIGZvcm1hdHRlciBwYXJhbWV0ZXJzLlxuICAgICAgKGZvcm1hdHRlcikgPSBmb3JtYXRJdGVyYXRvci5iaW5kKG51bGwsIGJyYWNlcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc1NldEl0ZXJhdG9yKHZhbHVlKSkge1xuICAgICAga2V5cyA9IGdldEtleXModmFsdWUsIGN0eC5zaG93SGlkZGVuKTtcbiAgICAgIGJyYWNlcyA9IGdldEl0ZXJhdG9yQnJhY2VzKFwiU2V0XCIsIHRhZyk7XG4gICAgICAvLyBBZGQgYnJhY2VzIHRvIHRoZSBmb3JtYXR0ZXIgcGFyYW1ldGVycy5cbiAgICAgIChmb3JtYXR0ZXIpID0gZm9ybWF0SXRlcmF0b3IuYmluZChudWxsLCBicmFjZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub0l0ZXJhdG9yID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKG5vSXRlcmF0b3IpIHtcbiAgICBrZXlzID0gZ2V0S2V5cyh2YWx1ZSwgY3R4LnNob3dIaWRkZW4pO1xuICAgIGJyYWNlcyA9IFtcIntcIiwgXCJ9XCJdO1xuICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gXCJPYmplY3RcIikge1xuICAgICAgaWYgKHR5cGVzLmlzQXJndW1lbnRzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBicmFjZXNbMF0gPSBcIltBcmd1bWVudHNdIHtcIjtcbiAgICAgIH0gZWxzZSBpZiAodGFnICE9PSBcIlwiKSB7XG4gICAgICAgIGJyYWNlc1swXSA9IGAke2dldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBcIk9iamVjdFwiKX17YDtcbiAgICAgIH1cbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiBwcm90b1Byb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGAke2JyYWNlc1swXX19YDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBiYXNlID0gZ2V0RnVuY3Rpb25CYXNlKHZhbHVlLCBjb25zdHJ1Y3RvciwgdGFnKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiBwcm90b1Byb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKGJhc2UsIFwic3BlY2lhbFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgLy8gTWFrZSBSZWdFeHBzIHNheSB0aGF0IHRoZXkgYXJlIFJlZ0V4cHNcbiAgICAgIGJhc2UgPSBSZWdFeHAoY29uc3RydWN0b3IgIT09IG51bGwgPyB2YWx1ZSA6IG5ldyBSZWdFeHAodmFsdWUpKVxuICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBcIlJlZ0V4cFwiKTtcbiAgICAgIGlmIChwcmVmaXggIT09IFwiUmVnRXhwIFwiKSB7XG4gICAgICAgIGJhc2UgPSBgJHtwcmVmaXh9JHtiYXNlfWA7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChrZXlzLmxlbmd0aCA9PT0gMCAmJiBwcm90b1Byb3BzID09PSB1bmRlZmluZWQpIHx8XG4gICAgICAgIChyZWN1cnNlVGltZXMgPiBjdHguZGVwdGggJiYgY3R4LmRlcHRoICE9PSBudWxsKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBjdHguc3R5bGl6ZShiYXNlLCBcInJlZ2V4cFwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIC8vIE1ha2UgZGF0ZXMgd2l0aCBwcm9wZXJ0aWVzIGZpcnN0IHNheSB0aGUgZGF0ZVxuICAgICAgYmFzZSA9IE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpXG4gICAgICAgID8gdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICA6IHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgICBjb25zdCBwcmVmaXggPSBnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgXCJEYXRlXCIpO1xuICAgICAgaWYgKHByZWZpeCAhPT0gXCJEYXRlIFwiKSB7XG4gICAgICAgIGJhc2UgPSBgJHtwcmVmaXh9JHtiYXNlfWA7XG4gICAgICB9XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgcHJvdG9Qcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjdHguc3R5bGl6ZShiYXNlLCBcImRhdGVcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBiYXNlID0gZm9ybWF0RXJyb3IodmFsdWUsIGNvbnN0cnVjdG9yLCB0YWcsIGN0eCwga2V5cyk7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgcHJvdG9Qcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBiYXNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIC8vIEZhc3QgcGF0aCBmb3IgQXJyYXlCdWZmZXIgYW5kIFNoYXJlZEFycmF5QnVmZmVyLlxuICAgICAgLy8gQ2FuJ3QgZG8gdGhlIHNhbWUgZm9yIERhdGFWaWV3IGJlY2F1c2UgaXQgaGFzIGEgbm9uLXByaW1pdGl2ZVxuICAgICAgLy8gLmJ1ZmZlciBwcm9wZXJ0eSB0aGF0IHdlIG5lZWQgdG8gcmVjdXJzZSBmb3IuXG4gICAgICBjb25zdCBhcnJheVR5cGUgPSB0eXBlcy5pc0FycmF5QnVmZmVyKHZhbHVlKVxuICAgICAgICA/IFwiQXJyYXlCdWZmZXJcIlxuICAgICAgICA6IFwiU2hhcmVkQXJyYXlCdWZmZXJcIjtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBhcnJheVR5cGUpO1xuICAgICAgaWYgKHR5cGVkQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAoZm9ybWF0dGVyKSA9IGZvcm1hdEFycmF5QnVmZmVyO1xuICAgICAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiBwcm90b1Byb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArXG4gICAgICAgICAgYHsgYnl0ZUxlbmd0aDogJHtmb3JtYXROdW1iZXIoY3R4LnN0eWxpemUsIHZhbHVlLmJ5dGVMZW5ndGgpfSB9YDtcbiAgICAgIH1cbiAgICAgIGJyYWNlc1swXSA9IGAke3ByZWZpeH17YDtcbiAgICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoa2V5cywgXCJieXRlTGVuZ3RoXCIpO1xuICAgIH0gZWxzZSBpZiAodHlwZXMuaXNEYXRhVmlldyh2YWx1ZSkpIHtcbiAgICAgIGJyYWNlc1swXSA9IGAke2dldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBcIkRhdGFWaWV3XCIpfXtgO1xuICAgICAgLy8gLmJ1ZmZlciBnb2VzIGxhc3QsIGl0J3Mgbm90IGEgcHJpbWl0aXZlIGxpa2UgdGhlIG90aGVycy5cbiAgICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwoa2V5cywgXCJieXRlTGVuZ3RoXCIsIFwiYnl0ZU9mZnNldFwiLCBcImJ1ZmZlclwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICAgIGJyYWNlc1swXSA9IGAke2dldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBcIlByb21pc2VcIil9e2A7XG4gICAgICAoZm9ybWF0dGVyKSA9IGZvcm1hdFByb21pc2U7XG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc1dlYWtTZXQodmFsdWUpKSB7XG4gICAgICBicmFjZXNbMF0gPSBgJHtnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgXCJXZWFrU2V0XCIpfXtgO1xuICAgICAgKGZvcm1hdHRlcikgPSBjdHguc2hvd0hpZGRlbiA/IGZvcm1hdFdlYWtTZXQgOiBmb3JtYXRXZWFrQ29sbGVjdGlvbjtcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzV2Vha01hcCh2YWx1ZSkpIHtcbiAgICAgIGJyYWNlc1swXSA9IGAke2dldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBcIldlYWtNYXBcIil9e2A7XG4gICAgICAoZm9ybWF0dGVyKSA9IGN0eC5zaG93SGlkZGVuID8gZm9ybWF0V2Vha01hcCA6IGZvcm1hdFdlYWtDb2xsZWN0aW9uO1xuICAgIH0gZWxzZSBpZiAodHlwZXMuaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QodmFsdWUpKSB7XG4gICAgICBicmFjZXNbMF0gPSBgJHtnZXRQcmVmaXgoY29uc3RydWN0b3IsIHRhZywgXCJNb2R1bGVcIil9e2A7XG4gICAgICAvLyBTcGVjaWFsIGhhbmRsZSBrZXlzIGZvciBuYW1lc3BhY2Ugb2JqZWN0cy5cbiAgICAgIChmb3JtYXR0ZXIpID0gZm9ybWF0TmFtZXNwYWNlT2JqZWN0LmJpbmQobnVsbCwga2V5cyk7XG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0JveGVkUHJpbWl0aXZlKHZhbHVlKSkge1xuICAgICAgYmFzZSA9IGdldEJveGVkQmFzZSh2YWx1ZSwgY3R4LCBrZXlzLCBjb25zdHJ1Y3RvciwgdGFnKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiBwcm90b1Byb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiBwcm90b1Byb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVE9ETyh3YWZ1d2FmdTEzKTogSW1wbGVtZW50XG4gICAgICAgIC8vIGlmICh0eXBlcy5pc0V4dGVybmFsKHZhbHVlKSkge1xuICAgICAgICAvLyAgIGNvbnN0IGFkZHJlc3MgPSBnZXRFeHRlcm5hbFZhbHVlKHZhbHVlKS50b1N0cmluZygxNik7XG4gICAgICAgIC8vICAgcmV0dXJuIGN0eC5zdHlsaXplKGBbRXh0ZXJuYWw6ICR7YWRkcmVzc31dYCwgJ3NwZWNpYWwnKTtcbiAgICAgICAgLy8gfVxuICAgICAgICByZXR1cm4gYCR7Z2V0Q3R4U3R5bGUodmFsdWUsIGNvbnN0cnVjdG9yLCB0YWcpfXt9YDtcbiAgICAgIH1cbiAgICAgIGJyYWNlc1swXSA9IGAke2dldEN0eFN0eWxlKHZhbHVlLCBjb25zdHJ1Y3RvciwgdGFnKX17YDtcbiAgICB9XG4gIH1cblxuICBpZiAocmVjdXJzZVRpbWVzID4gY3R4LmRlcHRoICYmIGN0eC5kZXB0aCAhPT0gbnVsbCkge1xuICAgIGxldCBjb25zdHJ1Y3Rvck5hbWUgPSBnZXRDdHhTdHlsZSh2YWx1ZSwgY29uc3RydWN0b3IsIHRhZykuc2xpY2UoMCwgLTEpO1xuICAgIGlmIChjb25zdHJ1Y3RvciAhPT0gbnVsbCkge1xuICAgICAgY29uc3RydWN0b3JOYW1lID0gYFske2NvbnN0cnVjdG9yTmFtZX1dYDtcbiAgICB9XG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKGNvbnN0cnVjdG9yTmFtZSwgXCJzcGVjaWFsXCIpO1xuICB9XG4gIHJlY3Vyc2VUaW1lcyArPSAxO1xuXG4gIGN0eC5zZWVuLnB1c2godmFsdWUpO1xuICBjdHguY3VycmVudERlcHRoID0gcmVjdXJzZVRpbWVzO1xuICBsZXQgb3V0cHV0O1xuICBjb25zdCBpbmRlbnRhdGlvbkx2bCA9IGN0eC5pbmRlbnRhdGlvbkx2bDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBmb3JtYXR0ZXIoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgb3V0cHV0LnB1c2goXG4gICAgICAgIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywga2V5c1tpXSwgZXh0cmFzVHlwZSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvdG9Qcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRwdXQucHVzaCguLi5wcm90b1Byb3BzKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IGdldEN0eFN0eWxlKHZhbHVlLCBjb25zdHJ1Y3RvciwgdGFnKS5zbGljZSgwLCAtMSk7XG4gICAgcmV0dXJuIGhhbmRsZU1heENhbGxTdGFja1NpemUoY3R4LCBlcnIsIGNvbnN0cnVjdG9yTmFtZSwgaW5kZW50YXRpb25MdmwpO1xuICB9XG4gIGlmIChjdHguY2lyY3VsYXIgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGluZGV4ID0gY3R4LmNpcmN1bGFyLmdldCh2YWx1ZSk7XG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IGN0eC5zdHlsaXplKGA8cmVmICoke2luZGV4fT5gLCBcInNwZWNpYWxcIik7XG4gICAgICAvLyBBZGQgcmVmZXJlbmNlIGFsd2F5cyB0byB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dC5cbiAgICAgIGlmIChjdHguY29tcGFjdCAhPT0gdHJ1ZSkge1xuICAgICAgICBiYXNlID0gYmFzZSA9PT0gXCJcIiA/IHJlZmVyZW5jZSA6IGAke3JlZmVyZW5jZX0gJHtiYXNlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmFjZXNbMF0gPSBgJHtyZWZlcmVuY2V9ICR7YnJhY2VzWzBdfWA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGN0eC5zZWVuLnBvcCgpO1xuXG4gIGlmIChjdHguc29ydGVkKSB7XG4gICAgY29uc3QgY29tcGFyYXRvciA9IGN0eC5zb3J0ZWQgPT09IHRydWUgPyB1bmRlZmluZWQgOiBjdHguc29ydGVkO1xuICAgIGlmIChleHRyYXNUeXBlID09PSBrT2JqZWN0VHlwZSkge1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LnNvcnQoY29tcGFyYXRvcik7XG4gICAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IHNvcnRlZCA9IG91dHB1dC5zbGljZShvdXRwdXQubGVuZ3RoIC0ga2V5cy5sZW5ndGgpLnNvcnQoY29tcGFyYXRvcik7XG4gICAgICBvdXRwdXQuc3BsaWNlKG91dHB1dC5sZW5ndGggLSBrZXlzLmxlbmd0aCwga2V5cy5sZW5ndGgsIC4uLnNvcnRlZCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzID0gcmVkdWNlVG9TaW5nbGVTdHJpbmcoXG4gICAgY3R4LFxuICAgIG91dHB1dCxcbiAgICBiYXNlLFxuICAgIGJyYWNlcyxcbiAgICBleHRyYXNUeXBlLFxuICAgIHJlY3Vyc2VUaW1lcyxcbiAgICB2YWx1ZSxcbiAgKTtcbiAgY29uc3QgYnVkZ2V0ID0gY3R4LmJ1ZGdldFtjdHguaW5kZW50YXRpb25MdmxdIHx8IDA7XG4gIGNvbnN0IG5ld0xlbmd0aCA9IGJ1ZGdldCArIHJlcy5sZW5ndGg7XG4gIGN0eC5idWRnZXRbY3R4LmluZGVudGF0aW9uTHZsXSA9IG5ld0xlbmd0aDtcbiAgLy8gSWYgYW55IGluZGVudGF0aW9uTHZsIGV4Y2VlZHMgdGhpcyBsaW1pdCwgbGltaXQgZnVydGhlciBpbnNwZWN0aW5nIHRvIHRoZVxuICAvLyBtaW5pbXVtLiBPdGhlcndpc2UgdGhlIHJlY3Vyc2l2ZSBhbGdvcml0aG0gbWlnaHQgY29udGludWUgaW5zcGVjdGluZyB0aGVcbiAgLy8gb2JqZWN0IGV2ZW4gdGhvdWdoIHRoZSBtYXhpbXVtIHN0cmluZyBzaXplICh+MiAqKiAyOCBvbiAzMiBiaXQgc3lzdGVtcyBhbmRcbiAgLy8gfjIgKiogMzAgb24gNjQgYml0IHN5c3RlbXMpIGV4Y2VlZGVkLiBUaGUgYWN0dWFsIG91dHB1dCBpcyBub3QgbGltaXRlZCBhdFxuICAvLyBleGFjdGx5IDIgKiogMjcgYnV0IGEgYml0IGhpZ2hlci4gVGhpcyBkZXBlbmRzIG9uIHRoZSBvYmplY3Qgc2hhcGUuXG4gIC8vIFRoaXMgbGltaXQgYWxzbyBtYWtlcyBzdXJlIHRoYXQgaHVnZSBvYmplY3RzIGRvbid0IGJsb2NrIHRoZSBldmVudCBsb29wXG4gIC8vIHNpZ25pZmljYW50bHkuXG4gIGlmIChuZXdMZW5ndGggPiAyICoqIDI3KSB7XG4gICAgY3R4LmRlcHRoID0gLTE7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuY29uc3QgYnVpbHRJbk9iamVjdHMgPSBuZXcgU2V0KFxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhnbG9iYWxUaGlzKS5maWx0ZXIoKGUpID0+XG4gICAgL15bQS1aXVthLXpBLVowLTldKyQvLnRlc3QoZSlcbiAgKSxcbik7XG5cbmZ1bmN0aW9uIGFkZFByb3RvdHlwZVByb3BlcnRpZXMoXG4gIGN0eCxcbiAgbWFpbixcbiAgb2JqLFxuICByZWN1cnNlVGltZXMsXG4gIG91dHB1dCxcbikge1xuICBsZXQgZGVwdGggPSAwO1xuICBsZXQga2V5cztcbiAgbGV0IGtleVNldDtcbiAgZG8ge1xuICAgIGlmIChkZXB0aCAhPT0gMCB8fCBtYWluID09PSBvYmopIHtcbiAgICAgIG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICAgICAgLy8gU3RvcCBhcyBzb29uIGFzIGEgbnVsbCBwcm90b3R5cGUgaXMgZW5jb3VudGVyZWQuXG4gICAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3AgYXMgc29vbiBhcyBhIGJ1aWx0LWluIG9iamVjdCB0eXBlIGlzIGRldGVjdGVkLlxuICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBcImNvbnN0cnVjdG9yXCIpO1xuICAgICAgaWYgKFxuICAgICAgICBkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICBidWlsdEluT2JqZWN0cy5oYXMoZGVzY3JpcHRvci52YWx1ZS5uYW1lKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgIGtleVNldCA9IG5ldyBTZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChrZXlzLCAoa2V5KSA9PiBrZXlTZXQuYWRkKGtleSkpO1xuICAgIH1cbiAgICAvLyBHZXQgYWxsIG93biBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAgICBrZXlzID0gUmVmbGVjdC5vd25LZXlzKG9iaik7XG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChjdHguc2VlbiwgbWFpbik7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gSWdub3JlIHRoZSBgY29uc3RydWN0b3JgIHByb3BlcnR5IGFuZCBrZXlzIHRoYXQgZXhpc3Qgb24gbGF5ZXJzIGFib3ZlLlxuICAgICAgaWYgKFxuICAgICAgICBrZXkgPT09IFwiY29uc3RydWN0b3JcIiB8fFxuICAgICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICBtYWluLmhhc093blByb3BlcnR5KGtleSkgfHxcbiAgICAgICAgKGRlcHRoICE9PSAwICYmIGtleVNldC5oYXMoa2V5KSlcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcbiAgICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBmb3JtYXRQcm9wZXJ0eShcbiAgICAgICAgY3R4LFxuICAgICAgICBvYmosXG4gICAgICAgIHJlY3Vyc2VUaW1lcyxcbiAgICAgICAga2V5LFxuICAgICAgICBrT2JqZWN0VHlwZSxcbiAgICAgICAgZGVzYyxcbiAgICAgICAgbWFpbixcbiAgICAgICk7XG4gICAgICBpZiAoY3R4LmNvbG9ycykge1xuICAgICAgICAvLyBGYWludCFcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChvdXRwdXQsIGBcXHUwMDFiWzJtJHt2YWx1ZX1cXHUwMDFiWzIybWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChvdXRwdXQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQXJyYXkucHJvdG90eXBlLnBvcC5jYWxsKGN0eC5zZWVuKTtcbiAgICAvLyBMaW1pdCB0aGUgaW5zcGVjdGlvbiB0byB1cCB0byB0aHJlZSBwcm90b3R5cGUgbGF5ZXJzLiBVc2luZyBgcmVjdXJzZVRpbWVzYFxuICAgIC8vIGlzIG5vdCBhIGdvb2QgY2hvaWNlIGhlcmUsIGJlY2F1c2UgaXQncyBhcyBpZiB0aGUgcHJvcGVydGllcyBhcmUgZGVjbGFyZWRcbiAgICAvLyBvbiB0aGUgY3VycmVudCBvYmplY3QgZnJvbSB0aGUgdXNlcnMgcGVyc3BlY3RpdmUuXG4gIH0gd2hpbGUgKCsrZGVwdGggIT09IDMpO1xufVxuXG5mdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUoXG4gIG9iaixcbiAgY3R4LFxuICByZWN1cnNlVGltZXMsXG4gIHByb3RvUHJvcHMsXG4pIHtcbiAgbGV0IGZpcnN0UHJvdG87XG4gIGNvbnN0IHRtcCA9IG9iajtcbiAgd2hpbGUgKG9iaiB8fCBpc1VuZGV0ZWN0YWJsZU9iamVjdChvYmopKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBcImNvbnN0cnVjdG9yXCIpO1xuICAgIGlmIChcbiAgICAgIGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgZGVzY3JpcHRvci52YWx1ZS5uYW1lICE9PSBcIlwiICYmXG4gICAgICBpc0luc3RhbmNlb2YodG1wLCBkZXNjcmlwdG9yLnZhbHVlKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBwcm90b1Byb3BzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgKGZpcnN0UHJvdG8gIT09IG9iaiB8fFxuICAgICAgICAgICFidWlsdEluT2JqZWN0cy5oYXMoZGVzY3JpcHRvci52YWx1ZS5uYW1lKSlcbiAgICAgICkge1xuICAgICAgICBhZGRQcm90b3R5cGVQcm9wZXJ0aWVzKFxuICAgICAgICAgIGN0eCxcbiAgICAgICAgICB0bXAsXG4gICAgICAgICAgZmlyc3RQcm90byB8fCB0bXAsXG4gICAgICAgICAgcmVjdXJzZVRpbWVzLFxuICAgICAgICAgIHByb3RvUHJvcHMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVzY3JpcHRvci52YWx1ZS5uYW1lO1xuICAgIH1cblxuICAgIG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICAgIGlmIChmaXJzdFByb3RvID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZpcnN0UHJvdG8gPSBvYmo7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZpcnN0UHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFRPRE8od2FmdXdhZnUxMyk6IEltcGxlbWVudFxuICAvLyBjb25zdCByZXMgPSBpbnRlcm5hbEdldENvbnN0cnVjdG9yTmFtZSh0bXApO1xuICBjb25zdCByZXMgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKHJlY3Vyc2VUaW1lcyA+IGN0eC5kZXB0aCAmJiBjdHguZGVwdGggIT09IG51bGwpIHtcbiAgICByZXR1cm4gYCR7cmVzfSA8Q29tcGxleCBwcm90b3R5cGU+YDtcbiAgfVxuXG4gIGNvbnN0IHByb3RvQ29uc3RyID0gZ2V0Q29uc3RydWN0b3JOYW1lKFxuICAgIGZpcnN0UHJvdG8sXG4gICAgY3R4LFxuICAgIHJlY3Vyc2VUaW1lcyArIDEsXG4gICAgcHJvdG9Qcm9wcyxcbiAgKTtcblxuICBpZiAocHJvdG9Db25zdHIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYCR7cmVzfSA8JHtcbiAgICAgIGluc3BlY3QoZmlyc3RQcm90bywge1xuICAgICAgICAuLi5jdHgsXG4gICAgICAgIGN1c3RvbUluc3BlY3Q6IGZhbHNlLFxuICAgICAgICBkZXB0aDogLTEsXG4gICAgICB9KVxuICAgIH0+YDtcbiAgfVxuXG4gIHJldHVybiBgJHtyZXN9IDwke3Byb3RvQ29uc3RyfT5gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoZm4sIHZhbHVlLCBjdHgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGxldCB0cmFpbGVyID0gXCJcIjtcbiAgICBpZiAodmFsdWUubGVuZ3RoID4gY3R4Lm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gdmFsdWUubGVuZ3RoIC0gY3R4Lm1heFN0cmluZ0xlbmd0aDtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgY3R4Lm1heFN0cmluZ0xlbmd0aCk7XG4gICAgICB0cmFpbGVyID0gYC4uLiAke3JlbWFpbmluZ30gbW9yZSBjaGFyYWN0ZXIke3JlbWFpbmluZyA+IDEgPyBcInNcIiA6IFwiXCJ9YDtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY3R4LmNvbXBhY3QgIT09IHRydWUgJiZcbiAgICAgIC8vIFRPRE8oQnJpZGdlQVIpOiBBZGQgdW5pY29kZSBzdXBwb3J0LiBVc2UgdGhlIHJlYWRsaW5lIGdldFN0cmluZ1dpZHRoXG4gICAgICAvLyBmdW5jdGlvbi5cbiAgICAgIHZhbHVlLmxlbmd0aCA+IGtNaW5MaW5lTGVuZ3RoICYmXG4gICAgICB2YWx1ZS5sZW5ndGggPiBjdHguYnJlYWtMZW5ndGggLSBjdHguaW5kZW50YXRpb25MdmwgLSA0XG4gICAgKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgLnNwbGl0KC8oPzw9XFxuKS8pXG4gICAgICAgIC5tYXAoKGxpbmUpID0+IGZuKHN0ckVzY2FwZShsaW5lKSwgXCJzdHJpbmdcIikpXG4gICAgICAgIC5qb2luKGAgK1xcbiR7XCIgXCIucmVwZWF0KGN0eC5pbmRlbnRhdGlvbkx2bCArIDIpfWApICsgdHJhaWxlcjtcbiAgICB9XG4gICAgcmV0dXJuIGZuKHN0ckVzY2FwZSh2YWx1ZSksIFwic3RyaW5nXCIpICsgdHJhaWxlcjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIGZvcm1hdE51bWJlcihmbiwgdmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIpIHtcbiAgICByZXR1cm4gZm9ybWF0QmlnSW50KGZuLCB2YWx1ZSk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICByZXR1cm4gZm4oYCR7dmFsdWV9YCwgXCJib29sZWFuXCIpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gZm4oXCJ1bmRlZmluZWRcIiwgXCJ1bmRlZmluZWRcIik7XG4gIH1cbiAgLy8gZXM2IHN5bWJvbCBwcmltaXRpdmVcbiAgcmV0dXJuIGZuKHZhbHVlLnRvU3RyaW5nKCksIFwic3ltYm9sXCIpO1xufVxuXG4vLyBSZXR1cm4gYSBuZXcgZW1wdHkgYXJyYXkgdG8gcHVzaCBpbiB0aGUgcmVzdWx0cyBvZiB0aGUgZGVmYXVsdCBmb3JtYXR0ZXIuXG5mdW5jdGlvbiBnZXRFbXB0eUZvcm1hdEFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbmZ1bmN0aW9uIGlzSW5zdGFuY2VvZihvYmplY3QsIHByb3RvKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIHByb3RvO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UHJlZml4KGNvbnN0cnVjdG9yLCB0YWcsIGZhbGxiYWNrLCBzaXplID0gXCJcIikge1xuICBpZiAoY29uc3RydWN0b3IgPT09IG51bGwpIHtcbiAgICBpZiAodGFnICE9PSBcIlwiICYmIGZhbGxiYWNrICE9PSB0YWcpIHtcbiAgICAgIHJldHVybiBgWyR7ZmFsbGJhY2t9JHtzaXplfTogbnVsbCBwcm90b3R5cGVdIFske3RhZ31dIGA7XG4gICAgfVxuICAgIHJldHVybiBgWyR7ZmFsbGJhY2t9JHtzaXplfTogbnVsbCBwcm90b3R5cGVdIGA7XG4gIH1cblxuICBpZiAodGFnICE9PSBcIlwiICYmIGNvbnN0cnVjdG9yICE9PSB0YWcpIHtcbiAgICByZXR1cm4gYCR7Y29uc3RydWN0b3J9JHtzaXplfSBbJHt0YWd9XSBgO1xuICB9XG4gIHJldHVybiBgJHtjb25zdHJ1Y3Rvcn0ke3NpemV9IGA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICBjb25zdCB2YWxMZW4gPSB2YWx1ZS5sZW5ndGg7XG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKE1hdGgubWF4KDAsIGN0eC5tYXhBcnJheUxlbmd0aCksIHZhbExlbik7XG5cbiAgY29uc3QgcmVtYWluaW5nID0gdmFsTGVuIC0gbGVuO1xuICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIC8vIFNwZWNpYWwgaGFuZGxlIHNwYXJzZSBhcnJheXMuXG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICBpZiAoIXZhbHVlLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICByZXR1cm4gZm9ybWF0U3BlY2lhbEFycmF5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgbGVuLCBvdXRwdXQsIGkpO1xuICAgIH1cbiAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIGksIGtBcnJheVR5cGUpKTtcbiAgfVxuICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgIG91dHB1dC5wdXNoKGAuLi4gJHtyZW1haW5pbmd9IG1vcmUgaXRlbSR7cmVtYWluaW5nID4gMSA/IFwic1wiIDogXCJcIn1gKTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBnZXRDdHhTdHlsZShfdmFsdWUsIGNvbnN0cnVjdG9yLCB0YWcpIHtcbiAgbGV0IGZhbGxiYWNrID0gXCJcIjtcbiAgaWYgKGNvbnN0cnVjdG9yID09PSBudWxsKSB7XG4gICAgLy8gVE9ETyh3YWZ1d2FmdTEzKTogSW1wbGVtZW50XG4gICAgLy8gZmFsbGJhY2sgPSBpbnRlcm5hbEdldENvbnN0cnVjdG9yTmFtZSh2YWx1ZSk7XG4gICAgaWYgKGZhbGxiYWNrID09PSB0YWcpIHtcbiAgICAgIGZhbGxiYWNrID0gXCJPYmplY3RcIjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBmYWxsYmFjayk7XG59XG5cbi8vIExvb2sgdXAgdGhlIGtleXMgb2YgdGhlIG9iamVjdC5cbmZ1bmN0aW9uIGdldEtleXModmFsdWUsIHNob3dIaWRkZW4pIHtcbiAgbGV0IGtleXM7XG4gIGNvbnN0IHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbHVlKTtcbiAgaWYgKHNob3dIaWRkZW4pIHtcbiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpO1xuICAgIGlmIChzeW1ib2xzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgbWlnaHQgdGhyb3cgaWYgYHZhbHVlYCBpcyBhIE1vZHVsZSBOYW1lc3BhY2UgT2JqZWN0IGZyb20gYW5cbiAgICAvLyB1bmV2YWx1YXRlZCBtb2R1bGUsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHBlcmZvcm0gdGhlIGFjdHVhbCB0eXBlXG4gICAgLy8gY2hlY2sgYmVjYXVzZSBpdCdzIGV4cGVuc2l2ZS5cbiAgICAvLyBUT0RPKGRldnNuZWspOiB0cmFjayBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9lY21hMjYyL2lzc3Vlcy8xMjA5XG4gICAgLy8gYW5kIG1vZGlmeSB0aGlzIGxvZ2ljIGFzIG5lZWRlZC5cbiAgICB0cnkge1xuICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAvLyBUT0RPKHdhZnV3YWZ1MTMpOiBJbXBsZW1lbnRcbiAgICAgIC8vIGFzc2VydChpc05hdGl2ZUVycm9yKGVycikgJiYgZXJyLm5hbWUgPT09ICdSZWZlcmVuY2VFcnJvcicgJiZcbiAgICAgIC8vICAgICAgICBpc01vZHVsZU5hbWVzcGFjZU9iamVjdCh2YWx1ZSkpO1xuICAgICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHN5bWJvbHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAvLyBUT0RPKHdhZnV3YWZ1MTMpOiBJbXBsZW1lbnRcbiAgICAgIC8vIGNvbnN0IGZpbHRlciA9IChrZXk6IGFueSkgPT5cbiAgICAgIC8vXG4gICAgICAvLyAgIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUodmFsdWUsIGtleSk7XG4gICAgICAvLyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShcbiAgICAgIC8vICAga2V5cyxcbiAgICAgIC8vICAgc3ltYm9scy5maWx0ZXIoZmlsdGVyKSxcbiAgICAgIC8vICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZXQodmFsdWUsIGN0eCwgX2lnbm9yZWQsIHJlY3Vyc2VUaW1lcykge1xuICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgY3R4LmluZGVudGF0aW9uTHZsICs9IDI7XG4gIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkge1xuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwob3V0cHV0LCBmb3JtYXRWYWx1ZShjdHgsIHYsIHJlY3Vyc2VUaW1lcykpO1xuICB9XG4gIGN0eC5pbmRlbnRhdGlvbkx2bCAtPSAyO1xuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNYXAodmFsdWUsIGN0eCwgX2dub3JlZCwgcmVjdXJzZVRpbWVzKSB7XG4gIGNvbnN0IG91dHB1dCA9IFtdO1xuICBjdHguaW5kZW50YXRpb25MdmwgKz0gMjtcbiAgZm9yIChjb25zdCB7IDA6IGssIDE6IHYgfSBvZiB2YWx1ZSkge1xuICAgIG91dHB1dC5wdXNoKFxuICAgICAgYCR7Zm9ybWF0VmFsdWUoY3R4LCBrLCByZWN1cnNlVGltZXMpfSA9PiAke1xuICAgICAgICBmb3JtYXRWYWx1ZShjdHgsIHYsIHJlY3Vyc2VUaW1lcylcbiAgICAgIH1gLFxuICAgICk7XG4gIH1cbiAgY3R4LmluZGVudGF0aW9uTHZsIC09IDI7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFR5cGVkQXJyYXkoXG4gIHZhbHVlLFxuICBsZW5ndGgsXG4gIGN0eCxcbiAgX2lnbm9yZWQsXG4gIHJlY3Vyc2VUaW1lcyxcbikge1xuICBjb25zdCBtYXhMZW5ndGggPSBNYXRoLm1pbihNYXRoLm1heCgwLCBjdHgubWF4QXJyYXlMZW5ndGgpLCBsZW5ndGgpO1xuICBjb25zdCByZW1haW5pbmcgPSB2YWx1ZS5sZW5ndGggLSBtYXhMZW5ndGg7XG4gIGNvbnN0IG91dHB1dCA9IG5ldyBBcnJheShtYXhMZW5ndGgpO1xuICBjb25zdCBlbGVtZW50Rm9ybWF0dGVyID0gdmFsdWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdmFsdWVbMF0gPT09IFwibnVtYmVyXCJcbiAgICA/IGZvcm1hdE51bWJlclxuICAgIDogZm9ybWF0QmlnSW50O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG1heExlbmd0aDsgKytpKSB7XG4gICAgb3V0cHV0W2ldID0gZWxlbWVudEZvcm1hdHRlcihjdHguc3R5bGl6ZSwgdmFsdWVbaV0pO1xuICB9XG4gIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgb3V0cHV0W21heExlbmd0aF0gPSBgLi4uICR7cmVtYWluaW5nfSBtb3JlIGl0ZW0ke3JlbWFpbmluZyA+IDEgPyBcInNcIiA6IFwiXCJ9YDtcbiAgfVxuICBpZiAoY3R4LnNob3dIaWRkZW4pIHtcbiAgICAvLyAuYnVmZmVyIGdvZXMgbGFzdCwgaXQncyBub3QgYSBwcmltaXRpdmUgbGlrZSB0aGUgb3RoZXJzLlxuICAgIC8vIEFsbCBiZXNpZGVzIGBCWVRFU19QRVJfRUxFTUVOVGAgYXJlIGFjdHVhbGx5IGdldHRlcnMuXG4gICAgY3R4LmluZGVudGF0aW9uTHZsICs9IDI7XG4gICAgZm9yIChcbiAgICAgIGNvbnN0IGtleSBvZiBbXG4gICAgICAgIFwiQllURVNfUEVSX0VMRU1FTlRcIixcbiAgICAgICAgXCJsZW5ndGhcIixcbiAgICAgICAgXCJieXRlTGVuZ3RoXCIsXG4gICAgICAgIFwiYnl0ZU9mZnNldFwiLFxuICAgICAgICBcImJ1ZmZlclwiLFxuICAgICAgXVxuICAgICkge1xuICAgICAgY29uc3Qgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZVtrZXldLCByZWN1cnNlVGltZXMsIHRydWUpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChvdXRwdXQsIGBbJHtrZXl9XTogJHtzdHJ9YCk7XG4gICAgfVxuICAgIGN0eC5pbmRlbnRhdGlvbkx2bCAtPSAyO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yQnJhY2VzKHR5cGUsIHRhZykge1xuICBpZiAodGFnICE9PSBgJHt0eXBlfSBJdGVyYXRvcmApIHtcbiAgICBpZiAodGFnICE9PSBcIlwiKSB7XG4gICAgICB0YWcgKz0gXCJdIFtcIjtcbiAgICB9XG4gICAgdGFnICs9IGAke3R5cGV9IEl0ZXJhdG9yYDtcbiAgfVxuICByZXR1cm4gW2BbJHt0YWd9XSB7YCwgXCJ9XCJdO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRJdGVyYXRvcihicmFjZXMsIGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBUT0RPKHdhZnV3YWZ1MTMpOiBJbXBsZW1lbnRcbiAgLy8gY29uc3QgeyAwOiBlbnRyaWVzLCAxOiBpc0tleVZhbHVlIH0gPSBwcmV2aWV3RW50cmllcyh2YWx1ZSwgdHJ1ZSk7XG4gIGNvbnN0IHsgMDogZW50cmllcywgMTogaXNLZXlWYWx1ZSB9ID0gdmFsdWU7XG4gIGlmIChpc0tleVZhbHVlKSB7XG4gICAgLy8gTWFyayBlbnRyeSBpdGVyYXRvcnMgYXMgc3VjaC5cbiAgICBicmFjZXNbMF0gPSBicmFjZXNbMF0ucmVwbGFjZSgvIEl0ZXJhdG9yXSB7JC8sIFwiIEVudHJpZXNdIHtcIik7XG4gICAgcmV0dXJuIGZvcm1hdE1hcEl0ZXJJbm5lcihjdHgsIHJlY3Vyc2VUaW1lcywgZW50cmllcywga01hcEVudHJpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGZvcm1hdFNldEl0ZXJJbm5lcihjdHgsIHJlY3Vyc2VUaW1lcywgZW50cmllcywga0l0ZXJhdG9yKTtcbn1cblxuZnVuY3Rpb24gZ2V0RnVuY3Rpb25CYXNlKHZhbHVlLCBjb25zdHJ1Y3RvciwgdGFnKSB7XG4gIGNvbnN0IHN0cmluZ2lmaWVkID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAoc3RyaW5naWZpZWQuc2xpY2UoMCwgNSkgPT09IFwiY2xhc3NcIiAmJiBzdHJpbmdpZmllZC5lbmRzV2l0aChcIn1cIikpIHtcbiAgICBjb25zdCBzbGljZSA9IHN0cmluZ2lmaWVkLnNsaWNlKDUsIC0xKTtcbiAgICBjb25zdCBicmFja2V0SW5kZXggPSBzbGljZS5pbmRleE9mKFwie1wiKTtcbiAgICBpZiAoXG4gICAgICBicmFja2V0SW5kZXggIT09IC0xICYmXG4gICAgICAoIXNsaWNlLnNsaWNlKDAsIGJyYWNrZXRJbmRleCkuaW5jbHVkZXMoXCIoXCIpIHx8XG4gICAgICAgIC8vIFNsb3cgcGF0aCB0byBndWFyYW50ZWUgdGhhdCBpdCdzIGluZGVlZCBhIGNsYXNzLlxuICAgICAgICBjbGFzc1JlZ0V4cC50ZXN0KHNsaWNlLnJlcGxhY2Uoc3RyaXBDb21tZW50c1JlZ0V4cCkpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGdldENsYXNzQmFzZSh2YWx1ZSwgY29uc3RydWN0b3IsIHRhZyk7XG4gICAgfVxuICB9XG4gIGxldCB0eXBlID0gXCJGdW5jdGlvblwiO1xuICBpZiAodHlwZXMuaXNHZW5lcmF0b3JGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB0eXBlID0gYEdlbmVyYXRvciR7dHlwZX1gO1xuICB9XG4gIGlmICh0eXBlcy5pc0FzeW5jRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgdHlwZSA9IGBBc3luYyR7dHlwZX1gO1xuICB9XG4gIGxldCBiYXNlID0gYFske3R5cGV9YDtcbiAgaWYgKGNvbnN0cnVjdG9yID09PSBudWxsKSB7XG4gICAgYmFzZSArPSBcIiAobnVsbCBwcm90b3R5cGUpXCI7XG4gIH1cbiAgaWYgKHZhbHVlLm5hbWUgPT09IFwiXCIpIHtcbiAgICBiYXNlICs9IFwiIChhbm9ueW1vdXMpXCI7XG4gIH0gZWxzZSB7XG4gICAgYmFzZSArPSBgOiAke3ZhbHVlLm5hbWV9YDtcbiAgfVxuICBiYXNlICs9IFwiXVwiO1xuICBpZiAoY29uc3RydWN0b3IgIT09IHR5cGUgJiYgY29uc3RydWN0b3IgIT09IG51bGwpIHtcbiAgICBiYXNlICs9IGAgJHtjb25zdHJ1Y3Rvcn1gO1xuICB9XG4gIGlmICh0YWcgIT09IFwiXCIgJiYgY29uc3RydWN0b3IgIT09IHRhZykge1xuICAgIGJhc2UgKz0gYCBbJHt0YWd9XWA7XG4gIH1cbiAgcmV0dXJuIGJhc2U7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKFxuICBlcnIsXG4gIGNvbnN0cnVjdG9yLFxuICB0YWcsXG4gIGN0eCxcbiAga2V5cyxcbikge1xuICBjb25zdCBuYW1lID0gZXJyLm5hbWUgIT0gbnVsbCA/IFN0cmluZyhlcnIubmFtZSkgOiBcIkVycm9yXCI7XG4gIGxldCBsZW4gPSBuYW1lLmxlbmd0aDtcbiAgbGV0IHN0YWNrID0gZXJyLnN0YWNrID8gU3RyaW5nKGVyci5zdGFjaykgOiBlcnIudG9TdHJpbmcoKTtcblxuICAvLyBEbyBub3QgXCJkdXBsaWNhdGVcIiBlcnJvciBwcm9wZXJ0aWVzIHRoYXQgYXJlIGFscmVhZHkgaW5jbHVkZWQgaW4gdGhlIG91dHB1dFxuICAvLyBvdGhlcndpc2UuXG4gIGlmICghY3R4LnNob3dIaWRkZW4gJiYga2V5cy5sZW5ndGggIT09IDApIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW1wibmFtZVwiLCBcIm1lc3NhZ2VcIiwgXCJzdGFja1wiXSkge1xuICAgICAgY29uc3QgaW5kZXggPSBrZXlzLmluZGV4T2YobmFtZSk7XG4gICAgICAvLyBPbmx5IGhpZGUgdGhlIHByb3BlcnR5IGluIGNhc2UgaXQncyBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBzdGFja1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSAmJiBzdGFjay5pbmNsdWRlcyhlcnJbbmFtZV0pKSB7XG4gICAgICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBIHN0YWNrIHRyYWNlIG1heSBjb250YWluIGFyYml0cmFyeSBkYXRhLiBPbmx5IG1hbmlwdWxhdGUgdGhlIG91dHB1dFxuICAvLyBmb3IgXCJyZWd1bGFyIGVycm9yc1wiIChlcnJvcnMgdGhhdCBcImxvb2sgbm9ybWFsXCIpIGZvciBub3cuXG4gIGlmIChcbiAgICBjb25zdHJ1Y3RvciA9PT0gbnVsbCB8fFxuICAgIChuYW1lLmVuZHNXaXRoKFwiRXJyb3JcIikgJiZcbiAgICAgIHN0YWNrLnN0YXJ0c1dpdGgobmFtZSkgJiZcbiAgICAgIChzdGFjay5sZW5ndGggPT09IGxlbiB8fCBzdGFja1tsZW5dID09PSBcIjpcIiB8fCBzdGFja1tsZW5dID09PSBcIlxcblwiKSlcbiAgKSB7XG4gICAgbGV0IGZhbGxiYWNrID0gXCJFcnJvclwiO1xuICAgIGlmIChjb25zdHJ1Y3RvciA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBzdGFjay5tYXRjaCgvXihbQS1aXVthLXpfIEEtWjAtOVtcXF0oKS1dKykoPzo6fFxcbiB7NH1hdCkvKSB8fFxuICAgICAgICBzdGFjay5tYXRjaCgvXihbYS16X0EtWjAtOS1dKkVycm9yKSQvKTtcbiAgICAgIGZhbGxiYWNrID0gKHN0YXJ0ICYmIHN0YXJ0WzFdKSB8fCBcIlwiO1xuICAgICAgbGVuID0gZmFsbGJhY2subGVuZ3RoO1xuICAgICAgZmFsbGJhY2sgPSBmYWxsYmFjayB8fCBcIkVycm9yXCI7XG4gICAgfVxuICAgIGNvbnN0IHByZWZpeCA9IGdldFByZWZpeChjb25zdHJ1Y3RvciwgdGFnLCBmYWxsYmFjaykuc2xpY2UoMCwgLTEpO1xuICAgIGlmIChuYW1lICE9PSBwcmVmaXgpIHtcbiAgICAgIGlmIChwcmVmaXguaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgICAgIHN0YWNrID0gYCR7cHJlZml4fTogJHtzdGFja31gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YWNrID0gYCR7cHJlZml4fSR7c3RhY2suc2xpY2UobGVuKX1gO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFjayA9IGAke3ByZWZpeH0gWyR7bmFtZX1dJHtzdGFjay5zbGljZShsZW4pfWA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIElnbm9yZSB0aGUgZXJyb3IgbWVzc2FnZSBpZiBpdCdzIGNvbnRhaW5lZCBpbiB0aGUgc3RhY2suXG4gIGxldCBwb3MgPSAoZXJyLm1lc3NhZ2UgJiYgc3RhY2suaW5kZXhPZihlcnIubWVzc2FnZSkpIHx8IC0xO1xuICBpZiAocG9zICE9PSAtMSkge1xuICAgIHBvcyArPSBlcnIubWVzc2FnZS5sZW5ndGg7XG4gIH1cbiAgLy8gV3JhcCB0aGUgZXJyb3IgaW4gYnJhY2tldHMgaW4gY2FzZSBpdCBoYXMgbm8gc3RhY2sgdHJhY2UuXG4gIGNvbnN0IHN0YWNrU3RhcnQgPSBzdGFjay5pbmRleE9mKFwiXFxuICAgIGF0XCIsIHBvcyk7XG4gIGlmIChzdGFja1N0YXJ0ID09PSAtMSkge1xuICAgIHN0YWNrID0gYFske3N0YWNrfV1gO1xuICB9IGVsc2UgaWYgKGN0eC5jb2xvcnMpIHtcbiAgICAvLyBIaWdobGlnaHQgdXNlcmxhbmQgY29kZSBhbmQgbm9kZSBtb2R1bGVzLlxuICAgIGxldCBuZXdTdGFjayA9IHN0YWNrLnNsaWNlKDAsIHN0YWNrU3RhcnQpO1xuICAgIGNvbnN0IGxpbmVzID0gc3RhY2suc2xpY2Uoc3RhY2tTdGFydCArIDEpLnNwbGl0KFwiXFxuXCIpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgLy8gY29uc3QgY29yZSA9IGxpbmUubWF0Y2goY29yZU1vZHVsZVJlZ0V4cCk7XG4gICAgICAvLyBUT0RPKHdhZnV3YWZ1MTMpOiBJbXBsZW1lbnRcbiAgICAgIC8vIGlmIChjb3JlICE9PSBudWxsICYmIE5hdGl2ZU1vZHVsZS5leGlzdHMoY29yZVsxXSkpIHtcbiAgICAgIC8vICAgbmV3U3RhY2sgKz0gYFxcbiR7Y3R4LnN0eWxpemUobGluZSwgJ3VuZGVmaW5lZCcpfWA7XG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBhZGRzIHVuZGVyc2NvcmVzIHRvIGFsbCBub2RlX21vZHVsZXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGVtLlxuICAgICAgbGV0IG5vZGVNb2R1bGU7XG4gICAgICBuZXdTdGFjayArPSBcIlxcblwiO1xuICAgICAgbGV0IHBvcyA9IDA7XG4gICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNvbmQtYXNzaWduXG4gICAgICB3aGlsZSAobm9kZU1vZHVsZSA9IG5vZGVNb2R1bGVzUmVnRXhwLmV4ZWMobGluZSkpIHtcbiAgICAgICAgLy8gJy9ub2RlX21vZHVsZXMvJy5sZW5ndGggPT09IDE0XG4gICAgICAgIG5ld1N0YWNrICs9IGxpbmUuc2xpY2UocG9zLCBub2RlTW9kdWxlLmluZGV4ICsgMTQpO1xuICAgICAgICBuZXdTdGFjayArPSBjdHguc3R5bGl6ZShub2RlTW9kdWxlWzFdLCBcIm1vZHVsZVwiKTtcbiAgICAgICAgcG9zID0gbm9kZU1vZHVsZS5pbmRleCArIG5vZGVNb2R1bGVbMF0ubGVuZ3RoO1xuICAgICAgfVxuICAgICAgbmV3U3RhY2sgKz0gcG9zID09PSAwID8gbGluZSA6IGxpbmUuc2xpY2UocG9zKTtcbiAgICAgIC8vIH1cbiAgICB9XG4gICAgc3RhY2sgPSBuZXdTdGFjaztcbiAgfVxuICAvLyBUaGUgbWVzc2FnZSBhbmQgdGhlIHN0YWNrIGhhdmUgdG8gYmUgaW5kZW50ZWQgYXMgd2VsbCFcbiAgaWYgKGN0eC5pbmRlbnRhdGlvbkx2bCAhPT0gMCkge1xuICAgIGNvbnN0IGluZGVudGF0aW9uID0gXCIgXCIucmVwZWF0KGN0eC5pbmRlbnRhdGlvbkx2bCk7XG4gICAgc3RhY2sgPSBzdGFjay5yZXBsYWNlKC9cXG4vZywgYFxcbiR7aW5kZW50YXRpb259YCk7XG4gIH1cbiAgcmV0dXJuIHN0YWNrO1xufVxuXG5sZXQgaGV4U2xpY2U7XG5cbmZ1bmN0aW9uIGZvcm1hdEFycmF5QnVmZmVyKGN0eCwgdmFsdWUpIHtcbiAgbGV0IGJ1ZmZlcjtcbiAgdHJ5IHtcbiAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBbY3R4LnN0eWxpemUoXCIoZGV0YWNoZWQpXCIsIFwic3BlY2lhbFwiKV07XG4gIH1cbiAgLy8gVE9ETyh3YWZ1d2FmdTEzKTogSW1wbGVtZW50XG4gIC8vIGlmIChoZXhTbGljZSA9PT0gdW5kZWZpbmVkKVxuICAvLyAgIGhleFNsaWNlID0gdW5jdXJyeVRoaXMocmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyLnByb3RvdHlwZS5oZXhTbGljZSk7XG4gIGxldCBzdHIgPSBoZXhTbGljZShidWZmZXIsIDAsIE1hdGgubWluKGN0eC5tYXhBcnJheUxlbmd0aCwgYnVmZmVyLmxlbmd0aCkpXG4gICAgLnJlcGxhY2UoLyguezJ9KS9nLCBcIiQxIFwiKS50cmltKCk7XG5cbiAgY29uc3QgcmVtYWluaW5nID0gYnVmZmVyLmxlbmd0aCAtIGN0eC5tYXhBcnJheUxlbmd0aDtcbiAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICBzdHIgKz0gYCAuLi4gJHtyZW1haW5pbmd9IG1vcmUgYnl0ZSR7cmVtYWluaW5nID4gMSA/IFwic1wiIDogXCJcIn1gO1xuICB9XG4gIHJldHVybiBbYCR7Y3R4LnN0eWxpemUoXCJbVWludDhDb250ZW50c11cIiwgXCJzcGVjaWFsXCIpfTogPCR7c3RyfT5gXTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TnVtYmVyKGZuLCB2YWx1ZSkge1xuICAvLyBGb3JtYXQgLTAgYXMgJy0wJy4gQ2hlY2tpbmcgYHZhbHVlID09PSAtMGAgd29uJ3QgZGlzdGluZ3Vpc2ggMCBmcm9tIC0wLlxuICByZXR1cm4gZm4oT2JqZWN0LmlzKHZhbHVlLCAtMCkgPyBcIi0wXCIgOiBgJHt2YWx1ZX1gLCBcIm51bWJlclwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UHJvbWlzZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgbGV0IG91dHB1dDtcbiAgLy8gVE9ETyh3YWZ1d2FmdTEzKTogSW1wbGVtZW50XG4gIC8vIGNvbnN0IHsgMDogc3RhdGUsIDE6IHJlc3VsdCB9ID0gZ2V0UHJvbWlzZURldGFpbHModmFsdWUpO1xuICBjb25zdCB7IDA6IHN0YXRlLCAxOiByZXN1bHQgfSA9IHZhbHVlO1xuICBpZiAoc3RhdGUgPT09IGtQZW5kaW5nKSB7XG4gICAgb3V0cHV0ID0gW2N0eC5zdHlsaXplKFwiPHBlbmRpbmc+XCIsIFwic3BlY2lhbFwiKV07XG4gIH0gZWxzZSB7XG4gICAgY3R4LmluZGVudGF0aW9uTHZsICs9IDI7XG4gICAgY29uc3Qgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCByZXN1bHQsIHJlY3Vyc2VUaW1lcyk7XG4gICAgY3R4LmluZGVudGF0aW9uTHZsIC09IDI7XG4gICAgb3V0cHV0ID0gW1xuICAgICAgc3RhdGUgPT09IGtSZWplY3RlZFxuICAgICAgICA/IGAke2N0eC5zdHlsaXplKFwiPHJlamVjdGVkPlwiLCBcInNwZWNpYWxcIil9ICR7c3RyfWBcbiAgICAgICAgOiBzdHIsXG4gICAgXTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWFrQ29sbGVjdGlvbihjdHgpIHtcbiAgcmV0dXJuIFtjdHguc3R5bGl6ZShcIjxpdGVtcyB1bmtub3duPlwiLCBcInNwZWNpYWxcIildO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWFrU2V0KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcykge1xuICAvLyBUT0RPKHdhZnV3YWZ1MTMpOiBJbXBsZW1lbnRcbiAgLy8gY29uc3QgZW50cmllcyA9IHByZXZpZXdFbnRyaWVzKHZhbHVlKTtcbiAgY29uc3QgZW50cmllcyA9IHZhbHVlO1xuICByZXR1cm4gZm9ybWF0U2V0SXRlcklubmVyKGN0eCwgcmVjdXJzZVRpbWVzLCBlbnRyaWVzLCBrV2Vhayk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlYWtNYXAoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFRPRE8od2FmdXdhZnUxMyk6IEltcGxlbWVudFxuICAvLyBjb25zdCBlbnRyaWVzID0gcHJldmlld0VudHJpZXModmFsdWUpO1xuICBjb25zdCBlbnRyaWVzID0gdmFsdWU7XG4gIHJldHVybiBmb3JtYXRNYXBJdGVySW5uZXIoY3R4LCByZWN1cnNlVGltZXMsIGVudHJpZXMsIGtXZWFrKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkoXG4gIGN0eCxcbiAgdmFsdWUsXG4gIHJlY3Vyc2VUaW1lcyxcbiAga2V5LFxuICB0eXBlLFxuICBkZXNjLFxuICBvcmlnaW5hbCA9IHZhbHVlLFxuKSB7XG4gIGxldCBuYW1lLCBzdHI7XG4gIGxldCBleHRyYSA9IFwiIFwiO1xuICBkZXNjID0gZGVzYyB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8XG4gICAgeyB2YWx1ZTogdmFsdWVba2V5XSwgZW51bWVyYWJsZTogdHJ1ZSB9O1xuICBpZiAoZGVzYy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZGlmZiA9IChjdHguY29tcGFjdCAhPT0gdHJ1ZSB8fCB0eXBlICE9PSBrT2JqZWN0VHlwZSkgPyAyIDogMztcbiAgICBjdHguaW5kZW50YXRpb25MdmwgKz0gZGlmZjtcbiAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyk7XG4gICAgaWYgKGRpZmYgPT09IDMgJiYgY3R4LmJyZWFrTGVuZ3RoIDwgZ2V0U3RyaW5nV2lkdGgoc3RyLCBjdHguY29sb3JzKSkge1xuICAgICAgZXh0cmEgPSBgXFxuJHtcIiBcIi5yZXBlYXQoY3R4LmluZGVudGF0aW9uTHZsKX1gO1xuICAgIH1cbiAgICBjdHguaW5kZW50YXRpb25MdmwgLT0gZGlmZjtcbiAgfSBlbHNlIGlmIChkZXNjLmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbGFiZWwgPSBkZXNjLnNldCAhPT0gdW5kZWZpbmVkID8gXCJHZXR0ZXIvU2V0dGVyXCIgOiBcIkdldHRlclwiO1xuICAgIGNvbnN0IHMgPSBjdHguc3R5bGl6ZTtcbiAgICBjb25zdCBzcCA9IFwic3BlY2lhbFwiO1xuICAgIGlmIChcbiAgICAgIGN0eC5nZXR0ZXJzICYmIChjdHguZ2V0dGVycyA9PT0gdHJ1ZSB8fFxuICAgICAgICAoY3R4LmdldHRlcnMgPT09IFwiZ2V0XCIgJiYgZGVzYy5zZXQgPT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgKGN0eC5nZXR0ZXJzID09PSBcInNldFwiICYmIGRlc2Muc2V0ICE9PSB1bmRlZmluZWQpKVxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdG1wID0gZGVzYy5nZXQuY2FsbChvcmlnaW5hbCk7XG4gICAgICAgIGN0eC5pbmRlbnRhdGlvbkx2bCArPSAyO1xuICAgICAgICBpZiAodG1wID09PSBudWxsKSB7XG4gICAgICAgICAgc3RyID0gYCR7cyhgWyR7bGFiZWx9OmAsIHNwKX0gJHtzKFwibnVsbFwiLCBcIm51bGxcIil9JHtzKFwiXVwiLCBzcCl9YDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdG1wID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgc3RyID0gYCR7cyhgWyR7bGFiZWx9XWAsIHNwKX0gJHtmb3JtYXRWYWx1ZShjdHgsIHRtcCwgcmVjdXJzZVRpbWVzKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShzLCB0bXAsIGN0eCk7XG4gICAgICAgICAgc3RyID0gYCR7cyhgWyR7bGFiZWx9OmAsIHNwKX0gJHtwcmltaXRpdmV9JHtzKFwiXVwiLCBzcCl9YDtcbiAgICAgICAgfVxuICAgICAgICBjdHguaW5kZW50YXRpb25MdmwgLT0gMjtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gYDxJbnNwZWN0aW9uIHRocmV3ICgke2Vyci5tZXNzYWdlfSk+YDtcbiAgICAgICAgc3RyID0gYCR7cyhgWyR7bGFiZWx9OmAsIHNwKX0gJHttZXNzYWdlfSR7cyhcIl1cIiwgc3ApfWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKGBbJHtsYWJlbH1dYCwgc3ApO1xuICAgIH1cbiAgfSBlbHNlIGlmIChkZXNjLnNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc3RyID0gY3R4LnN0eWxpemUoXCJbU2V0dGVyXVwiLCBcInNwZWNpYWxcIik7XG4gIH0gZWxzZSB7XG4gICAgc3RyID0gY3R4LnN0eWxpemUoXCJ1bmRlZmluZWRcIiwgXCJ1bmRlZmluZWRcIik7XG4gIH1cbiAgaWYgKHR5cGUgPT09IGtBcnJheVR5cGUpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGlmICh0eXBlb2Yga2V5ID09PSBcInN5bWJvbFwiKSB7XG4gICAgY29uc3QgdG1wID0ga2V5LnRvU3RyaW5nKCkucmVwbGFjZShzdHJFc2NhcGVTZXF1ZW5jZXNSZXBsYWNlciwgZXNjYXBlRm4pO1xuXG4gICAgbmFtZSA9IGBbJHtjdHguc3R5bGl6ZSh0bXAsIFwic3ltYm9sXCIpfV1gO1xuICB9IGVsc2UgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIikge1xuICAgIG5hbWUgPSBcIlsnX19wcm90b19fJ11cIjtcbiAgfSBlbHNlIGlmIChkZXNjLmVudW1lcmFibGUgPT09IGZhbHNlKSB7XG4gICAgY29uc3QgdG1wID0ga2V5LnJlcGxhY2Uoc3RyRXNjYXBlU2VxdWVuY2VzUmVwbGFjZXIsIGVzY2FwZUZuKTtcblxuICAgIG5hbWUgPSBgWyR7dG1wfV1gO1xuICB9IGVsc2UgaWYgKGtleVN0clJlZ0V4cC50ZXN0KGtleSkpIHtcbiAgICBuYW1lID0gY3R4LnN0eWxpemUoa2V5LCBcIm5hbWVcIik7XG4gIH0gZWxzZSB7XG4gICAgbmFtZSA9IGN0eC5zdHlsaXplKHN0ckVzY2FwZShrZXkpLCBcInN0cmluZ1wiKTtcbiAgfVxuICByZXR1cm4gYCR7bmFtZX06JHtleHRyYX0ke3N0cn1gO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXhDYWxsU3RhY2tTaXplKFxuICBfY3R4LFxuICBfZXJyLFxuICBfY29uc3RydWN0b3JOYW1lLFxuICBfaW5kZW50YXRpb25MdmwsXG4pIHtcbiAgLy8gVE9ETyh3YWZ1d2FmdTEzKTogSW1wbGVtZW50XG4gIC8vIGlmICh0eXBlcy5pc1N0YWNrT3ZlcmZsb3dFcnJvcihlcnIpKSB7XG4gIC8vICAgY3R4LnNlZW4ucG9wKCk7XG4gIC8vICAgY3R4LmluZGVudGF0aW9uTHZsID0gaW5kZW50YXRpb25Mdmw7XG4gIC8vICAgcmV0dXJuIGN0eC5zdHlsaXplKFxuICAvLyAgICAgYFske2NvbnN0cnVjdG9yTmFtZX06IEluc3BlY3Rpb24gaW50ZXJydXB0ZWQgYCArXG4gIC8vICAgICAgICdwcmVtYXR1cmVseS4gTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuXScsXG4gIC8vICAgICAnc3BlY2lhbCdcbiAgLy8gICApO1xuICAvLyB9XG4gIC8vIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gIC8vIGFzc2VydC5mYWlsKGVyci5zdGFjayk7XG59XG5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tY29udHJvbC1yZWdleFxuY29uc3QgY29sb3JSZWdFeHAgPSAvXFx1MDAxYlxcW1xcZFxcZD9tL2c7XG5mdW5jdGlvbiByZW1vdmVDb2xvcnMoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShjb2xvclJlZ0V4cCwgXCJcIik7XG59XG5cbmZ1bmN0aW9uIGlzQmVsb3dCcmVha0xlbmd0aChjdHgsIG91dHB1dCwgc3RhcnQsIGJhc2UpIHtcbiAgLy8gRWFjaCBlbnRyeSBpcyBzZXBhcmF0ZWQgYnkgYXQgbGVhc3QgYSBjb21tYS4gVGh1cywgd2Ugc3RhcnQgd2l0aCBhIHRvdGFsXG4gIC8vIGxlbmd0aCBvZiBhdCBsZWFzdCBgb3V0cHV0Lmxlbmd0aGAuIEluIGFkZGl0aW9uLCBzb21lIGNhc2VzIGhhdmUgYVxuICAvLyB3aGl0ZXNwYWNlIGluLWJldHdlZW4gZWFjaCBvdGhlciB0aGF0IGlzIGFkZGVkIHRvIHRoZSB0b3RhbCBhcyB3ZWxsLlxuICAvLyBUT0RPKEJyaWRnZUFSKTogQWRkIHVuaWNvZGUgc3VwcG9ydC4gVXNlIHRoZSByZWFkbGluZSBnZXRTdHJpbmdXaWR0aFxuICAvLyBmdW5jdGlvbi4gQ2hlY2sgdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIGFuZCBtYWtlIGl0IGFuIG9wdC1pbiBpbiBjYXNlIGl0J3NcbiAgLy8gc2lnbmlmaWNhbnQuXG4gIGxldCB0b3RhbExlbmd0aCA9IG91dHB1dC5sZW5ndGggKyBzdGFydDtcbiAgaWYgKHRvdGFsTGVuZ3RoICsgb3V0cHV0Lmxlbmd0aCA+IGN0eC5icmVha0xlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjdHguY29sb3JzKSB7XG4gICAgICB0b3RhbExlbmd0aCArPSByZW1vdmVDb2xvcnMob3V0cHV0W2ldKS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvdGFsTGVuZ3RoICs9IG91dHB1dFtpXS5sZW5ndGg7XG4gICAgfVxuICAgIGlmICh0b3RhbExlbmd0aCA+IGN0eC5icmVha0xlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBEbyBub3QgbGluZSB1cCBwcm9wZXJ0aWVzIG9uIHRoZSBzYW1lIGxpbmUgaWYgYGJhc2VgIGNvbnRhaW5zIGxpbmUgYnJlYWtzLlxuICByZXR1cm4gYmFzZSA9PT0gXCJcIiB8fCAhYmFzZS5pbmNsdWRlcyhcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0QmlnSW50KGZuLCB2YWx1ZSkge1xuICByZXR1cm4gZm4oYCR7dmFsdWV9bmAsIFwiYmlnaW50XCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXROYW1lc3BhY2VPYmplY3QoXG4gIGtleXMsXG4gIGN0eCxcbiAgdmFsdWUsXG4gIHJlY3Vyc2VUaW1lcyxcbikge1xuICBjb25zdCBvdXRwdXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB0cnkge1xuICAgICAgb3V0cHV0W2ldID0gZm9ybWF0UHJvcGVydHkoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHJlY3Vyc2VUaW1lcyxcbiAgICAgICAga2V5c1tpXSxcbiAgICAgICAga09iamVjdFR5cGUsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgIC8vIFRPRE8od2FmdXdmdTEzKTogSW1wbGVtZW50XG4gICAgICAvLyBhc3NlcnQoaXNOYXRpdmVFcnJvcihlcnIpICYmIGVyci5uYW1lID09PSAnUmVmZXJlbmNlRXJyb3InKTtcbiAgICAgIC8vIFVzZSB0aGUgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBtYWtlcyBzdXJlIHRoZSBpbmRlbnRhdGlvbiBhbmRcbiAgICAgIC8vIGxpbmUgYnJlYWtzIGFyZSBhbHdheXMgY29ycmVjdC4gT3RoZXJ3aXNlIGl0IGlzIHZlcnkgZGlmZmljdWx0IHRvIGtlZXBcbiAgICAgIC8vIHRoaXMgYWxpZ25lZCwgZXZlbiB0aG91Z2ggdGhpcyBpcyBhIGhhY2t5IHdheSBvZiBkZWFsaW5nIHdpdGggdGhpcy5cbiAgICAgIGNvbnN0IHRtcCA9IHsgW2tleXNbaV1dOiBcIlwiIH07XG4gICAgICBvdXRwdXRbaV0gPSBmb3JtYXRQcm9wZXJ0eShjdHgsIHRtcCwgcmVjdXJzZVRpbWVzLCBrZXlzW2ldLCBrT2JqZWN0VHlwZSk7XG4gICAgICBjb25zdCBwb3MgPSBvdXRwdXRbaV0ubGFzdEluZGV4T2YoXCIgXCIpO1xuICAgICAgLy8gV2UgaGF2ZSB0byBmaW5kIHRoZSBsYXN0IHdoaXRlc3BhY2UgYW5kIGhhdmUgdG8gcmVwbGFjZSB0aGF0IHZhbHVlIGFzXG4gICAgICAvLyBpdCB3aWxsIGJlIHZpc3VhbGl6ZWQgYXMgYSByZWd1bGFyIHN0cmluZy5cbiAgICAgIG91dHB1dFtpXSA9IG91dHB1dFtpXS5zbGljZSgwLCBwb3MgKyAxKSArXG4gICAgICAgIGN0eC5zdHlsaXplKFwiPHVuaW5pdGlhbGl6ZWQ+XCIsIFwic3BlY2lhbFwiKTtcbiAgICB9XG4gIH1cbiAgLy8gUmVzZXQgdGhlIGtleXMgdG8gYW4gZW1wdHkgYXJyYXkuIFRoaXMgcHJldmVudHMgZHVwbGljYXRlZCBpbnNwZWN0aW9uLlxuICBrZXlzLmxlbmd0aCA9IDA7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8vIFRoZSBhcnJheSBpcyBzcGFyc2UgYW5kL29yIGhhcyBleHRyYSBrZXlzXG5mdW5jdGlvbiBmb3JtYXRTcGVjaWFsQXJyYXkoXG4gIGN0eCxcbiAgdmFsdWUsXG4gIHJlY3Vyc2VUaW1lcyxcbiAgbWF4TGVuZ3RoLFxuICBvdXRwdXQsXG4gIGksXG4pIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgbGV0IGluZGV4ID0gaTtcbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aCAmJiBvdXRwdXQubGVuZ3RoIDwgbWF4TGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHRtcCA9ICtrZXk7XG4gICAgLy8gQXJyYXlzIGNhbiBvbmx5IGhhdmUgdXAgdG8gMl4zMiAtIDEgZW50cmllc1xuICAgIGlmICh0bXAgPiAyICoqIDMyIC0gMikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChgJHtpbmRleH1gICE9PSBrZXkpIHtcbiAgICAgIGlmICghbnVtYmVyUmVnRXhwLnRlc3Qoa2V5KSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVtcHR5SXRlbXMgPSB0bXAgLSBpbmRleDtcbiAgICAgIGNvbnN0IGVuZGluZyA9IGVtcHR5SXRlbXMgPiAxID8gXCJzXCIgOiBcIlwiO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGA8JHtlbXB0eUl0ZW1zfSBlbXB0eSBpdGVtJHtlbmRpbmd9PmA7XG4gICAgICBvdXRwdXQucHVzaChjdHguc3R5bGl6ZShtZXNzYWdlLCBcInVuZGVmaW5lZFwiKSk7XG4gICAgICBpbmRleCA9IHRtcDtcbiAgICAgIGlmIChvdXRwdXQubGVuZ3RoID09PSBtYXhMZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywga2V5LCBrQXJyYXlUeXBlKSk7XG4gICAgaW5kZXgrKztcbiAgfVxuICBjb25zdCByZW1haW5pbmcgPSB2YWx1ZS5sZW5ndGggLSBpbmRleDtcbiAgaWYgKG91dHB1dC5sZW5ndGggIT09IG1heExlbmd0aCkge1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBjb25zdCBlbmRpbmcgPSByZW1haW5pbmcgPiAxID8gXCJzXCIgOiBcIlwiO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGA8JHtyZW1haW5pbmd9IGVtcHR5IGl0ZW0ke2VuZGluZ30+YDtcbiAgICAgIG91dHB1dC5wdXNoKGN0eC5zdHlsaXplKG1lc3NhZ2UsIFwidW5kZWZpbmVkXCIpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocmVtYWluaW5nID4gMCkge1xuICAgIG91dHB1dC5wdXNoKGAuLi4gJHtyZW1haW5pbmd9IG1vcmUgaXRlbSR7cmVtYWluaW5nID4gMSA/IFwic1wiIDogXCJcIn1gKTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBnZXRCb3hlZEJhc2UoXG4gIHZhbHVlLFxuICBjdHgsXG4gIGtleXMsXG4gIGNvbnN0cnVjdG9yLFxuICB0YWcsXG4pIHtcbiAgbGV0IHR5cGU7XG4gIGlmICh0eXBlcy5pc051bWJlck9iamVjdCh2YWx1ZSkpIHtcbiAgICB0eXBlID0gXCJOdW1iZXJcIjtcbiAgfSBlbHNlIGlmICh0eXBlcy5pc1N0cmluZ09iamVjdCh2YWx1ZSkpIHtcbiAgICB0eXBlID0gXCJTdHJpbmdcIjtcbiAgICAvLyBGb3IgYm94ZWQgU3RyaW5ncywgd2UgaGF2ZSB0byByZW1vdmUgdGhlIDAtbiBpbmRleGVkIGVudHJpZXMsXG4gICAgLy8gc2luY2UgdGhleSBqdXN0IG5vaXN5IHVwIHRoZSBvdXRwdXQgYW5kIGFyZSByZWR1bmRhbnRcbiAgICAvLyBNYWtlIGJveGVkIHByaW1pdGl2ZSBTdHJpbmdzIGxvb2sgbGlrZSBzdWNoXG4gICAga2V5cy5zcGxpY2UoMCwgdmFsdWUubGVuZ3RoKTtcbiAgfSBlbHNlIGlmICh0eXBlcy5pc0Jvb2xlYW5PYmplY3QodmFsdWUpKSB7XG4gICAgdHlwZSA9IFwiQm9vbGVhblwiO1xuICB9IGVsc2UgaWYgKHR5cGVzLmlzQmlnSW50T2JqZWN0KHZhbHVlKSkge1xuICAgIHR5cGUgPSBcIkJpZ0ludFwiO1xuICB9IGVsc2Uge1xuICAgIHR5cGUgPSBcIlN5bWJvbFwiO1xuICB9XG4gIGxldCBiYXNlID0gYFske3R5cGV9YDtcbiAgaWYgKHR5cGUgIT09IGNvbnN0cnVjdG9yKSB7XG4gICAgaWYgKGNvbnN0cnVjdG9yID09PSBudWxsKSB7XG4gICAgICBiYXNlICs9IFwiIChudWxsIHByb3RvdHlwZSlcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZSArPSBgICgke2NvbnN0cnVjdG9yfSlgO1xuICAgIH1cbiAgfVxuXG4gIGJhc2UgKz0gYDogJHtmb3JtYXRQcmltaXRpdmUoc3R5bGl6ZU5vQ29sb3IsIHZhbHVlLnZhbHVlT2YoKSwgY3R4KX1dYDtcbiAgaWYgKHRhZyAhPT0gXCJcIiAmJiB0YWcgIT09IGNvbnN0cnVjdG9yKSB7XG4gICAgYmFzZSArPSBgIFske3RhZ31dYDtcbiAgfVxuICBpZiAoa2V5cy5sZW5ndGggIT09IDAgfHwgY3R4LnN0eWxpemUgPT09IHN0eWxpemVOb0NvbG9yKSB7XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cbiAgcmV0dXJuIGN0eC5zdHlsaXplKGJhc2UsIHR5cGUudG9Mb3dlckNhc2UoKSk7XG59XG5cbmZ1bmN0aW9uIGdldENsYXNzQmFzZSh2YWx1ZSwgY29uc3RydWN0b3IsIHRhZykge1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBjb25zdCBoYXNOYW1lID0gdmFsdWUuaGFzT3duUHJvcGVydHkoXCJuYW1lXCIpO1xuICBjb25zdCBuYW1lID0gKGhhc05hbWUgJiYgdmFsdWUubmFtZSkgfHwgXCIoYW5vbnltb3VzKVwiO1xuICBsZXQgYmFzZSA9IGBjbGFzcyAke25hbWV9YDtcbiAgaWYgKGNvbnN0cnVjdG9yICE9PSBcIkZ1bmN0aW9uXCIgJiYgY29uc3RydWN0b3IgIT09IG51bGwpIHtcbiAgICBiYXNlICs9IGAgWyR7Y29uc3RydWN0b3J9XWA7XG4gIH1cbiAgaWYgKHRhZyAhPT0gXCJcIiAmJiBjb25zdHJ1Y3RvciAhPT0gdGFnKSB7XG4gICAgYmFzZSArPSBgIFske3RhZ31dYDtcbiAgfVxuICBpZiAoY29uc3RydWN0b3IgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdXBlck5hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpLm5hbWU7XG4gICAgaWYgKHN1cGVyTmFtZSkge1xuICAgICAgYmFzZSArPSBgIGV4dGVuZHMgJHtzdXBlck5hbWV9YDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmFzZSArPSBcIiBleHRlbmRzIFtudWxsIHByb3RvdHlwZV1cIjtcbiAgfVxuICByZXR1cm4gYFske2Jhc2V9XWA7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKFxuICBjdHgsXG4gIG91dHB1dCxcbiAgYmFzZSxcbiAgYnJhY2VzLFxuICBleHRyYXNUeXBlLFxuICByZWN1cnNlVGltZXMsXG4gIHZhbHVlLFxuKSB7XG4gIGlmIChjdHguY29tcGFjdCAhPT0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2YgY3R4LmNvbXBhY3QgPT09IFwibnVtYmVyXCIgJiYgY3R4LmNvbXBhY3QgPj0gMSkge1xuICAgICAgLy8gTWVtb3JpemUgdGhlIG9yaWdpbmFsIG91dHB1dCBsZW5ndGguIEluIGNhc2UgdGhlIG91dHB1dCBpcyBncm91cGVkLFxuICAgICAgLy8gcHJldmVudCBsaW5pbmcgdXAgdGhlIGVudHJpZXMgb24gYSBzaW5nbGUgbGluZS5cbiAgICAgIGNvbnN0IGVudHJpZXMgPSBvdXRwdXQubGVuZ3RoO1xuICAgICAgLy8gR3JvdXAgYXJyYXkgZWxlbWVudHMgdG9nZXRoZXIgaWYgdGhlIGFycmF5IGNvbnRhaW5zIGF0IGxlYXN0IHNpeFxuICAgICAgLy8gc2VwYXJhdGUgZW50cmllcy5cbiAgICAgIGlmIChleHRyYXNUeXBlID09PSBrQXJyYXlFeHRyYXNUeXBlICYmIGVudHJpZXMgPiA2KSB7XG4gICAgICAgIG91dHB1dCA9IGdyb3VwQXJyYXlFbGVtZW50cyhjdHgsIG91dHB1dCwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgLy8gYGN0eC5jdXJyZW50RGVwdGhgIGlzIHNldCB0byB0aGUgbW9zdCBpbm5lciBkZXB0aCBvZiB0aGUgY3VycmVudGx5XG4gICAgICAvLyBpbnNwZWN0ZWQgb2JqZWN0IHBhcnQgd2hpbGUgYHJlY3Vyc2VUaW1lc2AgaXMgdGhlIGFjdHVhbCBjdXJyZW50IGRlcHRoXG4gICAgICAvLyB0aGF0IGlzIGluc3BlY3RlZC5cbiAgICAgIC8vXG4gICAgICAvLyBFeGFtcGxlOlxuICAgICAgLy9cbiAgICAgIC8vIGNvbnN0IGEgPSB7IGZpcnN0OiBbIDEsIDIsIDMgXSwgc2Vjb25kOiB7IGlubmVyOiBbIDEsIDIsIDMgXSB9IH1cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgZGVlcGVzdCBkZXB0aCBvZiBgYWAgaXMgMiAoYS5zZWNvbmQuaW5uZXIpIGFuZCBgYS5maXJzdGAgaGFzIGEgbWF4XG4gICAgICAvLyBkZXB0aCBvZiAxLlxuICAgICAgLy9cbiAgICAgIC8vIENvbnNvbGlkYXRlIGFsbCBlbnRyaWVzIG9mIHRoZSBsb2NhbCBtb3N0IGlubmVyIGRlcHRoIHVwIHRvXG4gICAgICAvLyBgY3R4LmNvbXBhY3RgLCBhcyBsb25nIGFzIHRoZSBwcm9wZXJ0aWVzIGFyZSBzbWFsbGVyIHRoYW5cbiAgICAgIC8vIGBjdHguYnJlYWtMZW5ndGhgLlxuICAgICAgaWYgKFxuICAgICAgICBjdHguY3VycmVudERlcHRoIC0gcmVjdXJzZVRpbWVzIDwgY3R4LmNvbXBhY3QgJiZcbiAgICAgICAgZW50cmllcyA9PT0gb3V0cHV0Lmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIC8vIExpbmUgdXAgYWxsIGVudHJpZXMgb24gYSBzaW5nbGUgbGluZSBpbiBjYXNlIHRoZSBlbnRyaWVzIGRvIG5vdFxuICAgICAgICAvLyBleGNlZWQgYGJyZWFrTGVuZ3RoYC4gQWRkIDEwIGFzIGNvbnN0YW50IHRvIHN0YXJ0IG5leHQgdG8gYWxsIG90aGVyXG4gICAgICAgIC8vIGZhY3RvcnMgdGhhdCBtYXkgcmVkdWNlIGBicmVha0xlbmd0aGAuXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gb3V0cHV0Lmxlbmd0aCArIGN0eC5pbmRlbnRhdGlvbkx2bCArXG4gICAgICAgICAgYnJhY2VzWzBdLmxlbmd0aCArIGJhc2UubGVuZ3RoICsgMTA7XG4gICAgICAgIGlmIChpc0JlbG93QnJlYWtMZW5ndGgoY3R4LCBvdXRwdXQsIHN0YXJ0LCBiYXNlKSkge1xuICAgICAgICAgIHJldHVybiBgJHtiYXNlID8gYCR7YmFzZX0gYCA6IFwiXCJ9JHticmFjZXNbMF19ICR7am9pbihvdXRwdXQsIFwiLCBcIil9YCArXG4gICAgICAgICAgICBgICR7YnJhY2VzWzFdfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTGluZSB1cCBlYWNoIGVudHJ5IG9uIGFuIGluZGl2aWR1YWwgbGluZS5cbiAgICBjb25zdCBpbmRlbnRhdGlvbiA9IGBcXG4ke1wiIFwiLnJlcGVhdChjdHguaW5kZW50YXRpb25MdmwpfWA7XG4gICAgcmV0dXJuIGAke2Jhc2UgPyBgJHtiYXNlfSBgIDogXCJcIn0ke2JyYWNlc1swXX0ke2luZGVudGF0aW9ufSAgYCArXG4gICAgICBgJHtqb2luKG91dHB1dCwgYCwke2luZGVudGF0aW9ufSAgYCl9JHtpbmRlbnRhdGlvbn0ke2JyYWNlc1sxXX1gO1xuICB9XG4gIC8vIExpbmUgdXAgYWxsIGVudHJpZXMgb24gYSBzaW5nbGUgbGluZSBpbiBjYXNlIHRoZSBlbnRyaWVzIGRvIG5vdCBleGNlZWRcbiAgLy8gYGJyZWFrTGVuZ3RoYC5cbiAgaWYgKGlzQmVsb3dCcmVha0xlbmd0aChjdHgsIG91dHB1dCwgMCwgYmFzZSkpIHtcbiAgICByZXR1cm4gYCR7YnJhY2VzWzBdfSR7YmFzZSA/IGAgJHtiYXNlfWAgOiBcIlwifSAke2pvaW4ob3V0cHV0LCBcIiwgXCIpfSBgICtcbiAgICAgIGJyYWNlc1sxXTtcbiAgfVxuICBjb25zdCBpbmRlbnRhdGlvbiA9IFwiIFwiLnJlcGVhdChjdHguaW5kZW50YXRpb25MdmwpO1xuICAvLyBJZiB0aGUgb3BlbmluZyBcImJyYWNlXCIgaXMgdG9vIGxhcmdlLCBsaWtlIGluIHRoZSBjYXNlIG9mIFwiU2V0IHtcIixcbiAgLy8gd2UgbmVlZCB0byBmb3JjZSB0aGUgZmlyc3QgaXRlbSB0byBiZSBvbiB0aGUgbmV4dCBsaW5lIG9yIHRoZVxuICAvLyBpdGVtcyB3aWxsIG5vdCBsaW5lIHVwIGNvcnJlY3RseS5cbiAgY29uc3QgbG4gPSBiYXNlID09PSBcIlwiICYmIGJyYWNlc1swXS5sZW5ndGggPT09IDFcbiAgICA/IFwiIFwiXG4gICAgOiBgJHtiYXNlID8gYCAke2Jhc2V9YCA6IFwiXCJ9XFxuJHtpbmRlbnRhdGlvbn0gIGA7XG4gIC8vIExpbmUgdXAgZWFjaCBlbnRyeSBvbiBhbiBpbmRpdmlkdWFsIGxpbmUuXG4gIHJldHVybiBgJHticmFjZXNbMF19JHtsbn0ke2pvaW4ob3V0cHV0LCBgLFxcbiR7aW5kZW50YXRpb259ICBgKX0gJHticmFjZXNbMV19YDtcbn1cblxuLy8gVGhlIGJ1aWx0LWluIEFycmF5I2pvaW4gaXMgc2xvd2VyIGluIHY4IDYuMFxuZnVuY3Rpb24gam9pbihvdXRwdXQsIHNlcGFyYXRvcikge1xuICBsZXQgc3RyID0gXCJcIjtcbiAgaWYgKG91dHB1dC5sZW5ndGggIT09IDApIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBvdXRwdXQubGVuZ3RoIC0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxhc3RJbmRleDsgaSsrKSB7XG4gICAgICAvLyBJdCBpcyBmYXN0ZXIgbm90IHRvIHVzZSBhIHRlbXBsYXRlIHN0cmluZyBoZXJlXG4gICAgICBzdHIgKz0gb3V0cHV0W2ldO1xuICAgICAgc3RyICs9IHNlcGFyYXRvcjtcbiAgICB9XG4gICAgc3RyICs9IG91dHB1dFtsYXN0SW5kZXhdO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIGdyb3VwQXJyYXlFbGVtZW50cyhjdHgsIG91dHB1dCwgdmFsdWUpIHtcbiAgbGV0IHRvdGFsTGVuZ3RoID0gMDtcbiAgbGV0IG1heExlbmd0aCA9IDA7XG4gIGxldCBpID0gMDtcbiAgbGV0IG91dHB1dExlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG4gIGlmIChjdHgubWF4QXJyYXlMZW5ndGggPCBvdXRwdXQubGVuZ3RoKSB7XG4gICAgLy8gVGhpcyBtYWtlcyBzdXJlIHRoZSBcIi4uLiBuIG1vcmUgaXRlbXNcIiBwYXJ0IGlzIG5vdCB0YWtlbiBpbnRvIGFjY291bnQuXG4gICAgb3V0cHV0TGVuZ3RoLS07XG4gIH1cbiAgY29uc3Qgc2VwYXJhdG9yU3BhY2UgPSAyOyAvLyBBZGQgMSBmb3IgdGhlIHNwYWNlIGFuZCAxIGZvciB0aGUgc2VwYXJhdG9yLlxuICBjb25zdCBkYXRhTGVuID0gbmV3IEFycmF5KG91dHB1dExlbmd0aCk7XG4gIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgbGVuZ3RoIG9mIGFsbCBvdXRwdXQgZW50cmllcyBhbmQgdGhlIGluZGl2aWR1YWwgbWF4XG4gIC8vIGVudHJpZXMgbGVuZ3RoIG9mIGFsbCBvdXRwdXQgZW50cmllcy4gV2UgaGF2ZSB0byByZW1vdmUgY29sb3JzIGZpcnN0LFxuICAvLyBvdGhlcndpc2UgdGhlIGxlbmd0aCB3b3VsZCBub3QgYmUgY2FsY3VsYXRlZCBwcm9wZXJseS5cbiAgZm9yICg7IGkgPCBvdXRwdXRMZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxlbiA9IGdldFN0cmluZ1dpZHRoKG91dHB1dFtpXSwgY3R4LmNvbG9ycyk7XG4gICAgZGF0YUxlbltpXSA9IGxlbjtcbiAgICB0b3RhbExlbmd0aCArPSBsZW4gKyBzZXBhcmF0b3JTcGFjZTtcbiAgICBpZiAobWF4TGVuZ3RoIDwgbGVuKSB7XG4gICAgICBtYXhMZW5ndGggPSBsZW47XG4gICAgfVxuICB9XG4gIC8vIEFkZCB0d28gdG8gYG1heExlbmd0aGAgYXMgd2UgYWRkIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyIHBsdXMgYSBjb21tYVxuICAvLyBpbi1iZXR3ZWVuIHR3byBlbnRyaWVzLlxuICBjb25zdCBhY3R1YWxNYXggPSBtYXhMZW5ndGggKyBzZXBhcmF0b3JTcGFjZTtcbiAgLy8gQ2hlY2sgaWYgYXQgbGVhc3QgdGhyZWUgZW50cmllcyBmaXQgbmV4dCB0byBlYWNoIG90aGVyIGFuZCBwcmV2ZW50IGdyb3VwaW5nXG4gIC8vIG9mIGFycmF5cyB0aGF0IGNvbnRhaW5zIGVudHJpZXMgb2YgdmVyeSBkaWZmZXJlbnQgbGVuZ3RoIChpLmUuLCBpZiBhIHNpbmdsZVxuICAvLyBlbnRyeSBpcyBsb25nZXIgdGhhbiAxLzUgb2YgYWxsIG90aGVyIGVudHJpZXMgY29tYmluZWQpLiBPdGhlcndpc2UgdGhlXG4gIC8vIHNwYWNlIGluLWJldHdlZW4gc21hbGwgZW50cmllcyB3b3VsZCBiZSBlbm9ybW91cy5cbiAgaWYgKFxuICAgIGFjdHVhbE1heCAqIDMgKyBjdHguaW5kZW50YXRpb25MdmwgPCBjdHguYnJlYWtMZW5ndGggJiZcbiAgICAodG90YWxMZW5ndGggLyBhY3R1YWxNYXggPiA1IHx8IG1heExlbmd0aCA8PSA2KVxuICApIHtcbiAgICBjb25zdCBhcHByb3hDaGFySGVpZ2h0cyA9IDIuNTtcbiAgICBjb25zdCBhdmVyYWdlQmlhcyA9IE1hdGguc3FydChhY3R1YWxNYXggLSB0b3RhbExlbmd0aCAvIG91dHB1dC5sZW5ndGgpO1xuICAgIGNvbnN0IGJpYXNlZE1heCA9IE1hdGgubWF4KGFjdHVhbE1heCAtIDMgLSBhdmVyYWdlQmlhcywgMSk7XG4gICAgLy8gRHluYW1pY2FsbHkgY2hlY2sgaG93IG1hbnkgY29sdW1ucyBzZWVtIHBvc3NpYmxlLlxuICAgIGNvbnN0IGNvbHVtbnMgPSBNYXRoLm1pbihcbiAgICAgIC8vIElkZWFsbHkgYSBzcXVhcmUgc2hvdWxkIGJlIGRyYXduLiBXZSBleHBlY3QgYSBjaGFyYWN0ZXIgdG8gYmUgYWJvdXQgMi41XG4gICAgICAvLyB0aW1lcyBhcyBoaWdoIGFzIHdpZGUuIFRoaXMgaXMgdGhlIGFyZWEgZm9ybXVsYSB0byBjYWxjdWxhdGUgYSBzcXVhcmVcbiAgICAgIC8vIHdoaWNoIGNvbnRhaW5zIG4gcmVjdGFuZ2xlcyBvZiBzaXplIGBhY3R1YWxNYXggKiBhcHByb3hDaGFySGVpZ2h0c2AuXG4gICAgICAvLyBEaXZpZGUgdGhhdCBieSBgYWN0dWFsTWF4YCB0byByZWNlaXZlIHRoZSBjb3JyZWN0IG51bWJlciBvZiBjb2x1bW5zLlxuICAgICAgLy8gVGhlIGFkZGVkIGJpYXMgaW5jcmVhc2VzIHRoZSBjb2x1bW5zIGZvciBzaG9ydCBlbnRyaWVzLlxuICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgTWF0aC5zcXJ0KFxuICAgICAgICAgIGFwcHJveENoYXJIZWlnaHRzICogYmlhc2VkTWF4ICogb3V0cHV0TGVuZ3RoLFxuICAgICAgICApIC8gYmlhc2VkTWF4LFxuICAgICAgKSxcbiAgICAgIC8vIERvIG5vdCBleGNlZWQgdGhlIGJyZWFrTGVuZ3RoLlxuICAgICAgTWF0aC5mbG9vcigoY3R4LmJyZWFrTGVuZ3RoIC0gY3R4LmluZGVudGF0aW9uTHZsKSAvIGFjdHVhbE1heCksXG4gICAgICAvLyBMaW1pdCBhcnJheSBncm91cGluZyBmb3Igc21hbGwgYGNvbXBhY3RgIG1vZGVzIGFzIHRoZSB1c2VyIHJlcXVlc3RlZFxuICAgICAgLy8gbWluaW1hbCBncm91cGluZy5cbiAgICAgIGN0eC5jb21wYWN0ICogNCxcbiAgICAgIC8vIExpbWl0IHRoZSBjb2x1bW5zIHRvIGEgbWF4aW11bSBvZiBmaWZ0ZWVuLlxuICAgICAgMTUsXG4gICAgKTtcbiAgICAvLyBSZXR1cm4gd2l0aCB0aGUgb3JpZ2luYWwgb3V0cHV0IGlmIG5vIGdyb3VwaW5nIHNob3VsZCBoYXBwZW4uXG4gICAgaWYgKGNvbHVtbnMgPD0gMSkge1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG4gICAgY29uc3QgdG1wID0gW107XG4gICAgY29uc3QgbWF4TGluZUxlbmd0aCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uczsgaSsrKSB7XG4gICAgICBsZXQgbGluZU1heExlbmd0aCA9IDA7XG4gICAgICBmb3IgKGxldCBqID0gaTsgaiA8IG91dHB1dC5sZW5ndGg7IGogKz0gY29sdW1ucykge1xuICAgICAgICBpZiAoZGF0YUxlbltqXSA+IGxpbmVNYXhMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lTWF4TGVuZ3RoID0gZGF0YUxlbltqXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGluZU1heExlbmd0aCArPSBzZXBhcmF0b3JTcGFjZTtcbiAgICAgIG1heExpbmVMZW5ndGhbaV0gPSBsaW5lTWF4TGVuZ3RoO1xuICAgIH1cbiAgICBsZXQgb3JkZXIgPSBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0O1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlW2ldICE9PSBcIm51bWJlclwiICYmIHR5cGVvZiB2YWx1ZVtpXSAhPT0gXCJiaWdpbnRcIikge1xuICAgICAgICAgIG9yZGVyID0gU3RyaW5nLnByb3RvdHlwZS5wYWRFbmQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRWFjaCBpdGVyYXRpb24gY3JlYXRlcyBhIHNpbmdsZSBsaW5lIG9mIGdyb3VwZWQgZW50cmllcy5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dExlbmd0aDsgaSArPSBjb2x1bW5zKSB7XG4gICAgICAvLyBUaGUgbGFzdCBsaW5lcyBtYXkgY29udGFpbiBsZXNzIGVudHJpZXMgdGhhbiBjb2x1bW5zLlxuICAgICAgY29uc3QgbWF4ID0gTWF0aC5taW4oaSArIGNvbHVtbnMsIG91dHB1dExlbmd0aCk7XG4gICAgICBsZXQgc3RyID0gXCJcIjtcbiAgICAgIGxldCBqID0gaTtcbiAgICAgIGZvciAoOyBqIDwgbWF4IC0gMTsgaisrKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBleHRyYSBjb2xvciBwYWRkaW5nIGluIGNhc2UgaXQncyBhY3RpdmUuIFRoaXMgaGFzIHRvIGJlXG4gICAgICAgIC8vIGRvbmUgbGluZSBieSBsaW5lIGFzIHNvbWUgbGluZXMgbWlnaHQgY29udGFpbiBtb3JlIGNvbG9ycyB0aGFuXG4gICAgICAgIC8vIG90aGVycy5cbiAgICAgICAgY29uc3QgcGFkZGluZyA9IG1heExpbmVMZW5ndGhbaiAtIGldICsgb3V0cHV0W2pdLmxlbmd0aCAtIGRhdGFMZW5bal07XG4gICAgICAgIHN0ciArPSBgJHtvdXRwdXRbal19LCBgLnBhZFN0YXJ0KHBhZGRpbmcsIFwiIFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcmRlciA9PT0gU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCkge1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gbWF4TGluZUxlbmd0aFtqIC0gaV0gK1xuICAgICAgICAgIG91dHB1dFtqXS5sZW5ndGggLVxuICAgICAgICAgIGRhdGFMZW5bal0gLVxuICAgICAgICAgIHNlcGFyYXRvclNwYWNlO1xuICAgICAgICBzdHIgKz0gb3V0cHV0W2pdLnBhZFN0YXJ0KHBhZGRpbmcsIFwiIFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciArPSBvdXRwdXRbal07XG4gICAgICB9XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHRtcCwgc3RyKTtcbiAgICB9XG4gICAgaWYgKGN0eC5tYXhBcnJheUxlbmd0aCA8IG91dHB1dC5sZW5ndGgpIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwodG1wLCBvdXRwdXRbb3V0cHV0TGVuZ3RoXSk7XG4gICAgfVxuICAgIG91dHB1dCA9IHRtcDtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNYXBJdGVySW5uZXIoXG4gIGN0eCxcbiAgcmVjdXJzZVRpbWVzLFxuICBlbnRyaWVzLFxuICBzdGF0ZSxcbikge1xuICBjb25zdCBtYXhBcnJheUxlbmd0aCA9IE1hdGgubWF4KGN0eC5tYXhBcnJheUxlbmd0aCwgMCk7XG4gIC8vIEVudHJpZXMgZXhpc3QgYXMgW2tleTEsIHZhbDEsIGtleTIsIHZhbDIsIC4uLl1cbiAgY29uc3QgbGVuID0gZW50cmllcy5sZW5ndGggLyAyO1xuICBjb25zdCByZW1haW5pbmcgPSBsZW4gLSBtYXhBcnJheUxlbmd0aDtcbiAgY29uc3QgbWF4TGVuZ3RoID0gTWF0aC5taW4obWF4QXJyYXlMZW5ndGgsIGxlbik7XG4gIGxldCBvdXRwdXQgPSBuZXcgQXJyYXkobWF4TGVuZ3RoKTtcbiAgbGV0IGkgPSAwO1xuICBjdHguaW5kZW50YXRpb25MdmwgKz0gMjtcbiAgaWYgKHN0YXRlID09PSBrV2Vhaykge1xuICAgIGZvciAoOyBpIDwgbWF4TGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBvcyA9IGkgKiAyO1xuICAgICAgb3V0cHV0W2ldID0gYCR7Zm9ybWF0VmFsdWUoY3R4LCBlbnRyaWVzW3Bvc10sIHJlY3Vyc2VUaW1lcyl9ID0+ICR7XG4gICAgICAgIGZvcm1hdFZhbHVlKGN0eCwgZW50cmllc1twb3MgKyAxXSwgcmVjdXJzZVRpbWVzKVxuICAgICAgfWA7XG4gICAgfVxuICAgIC8vIFNvcnQgYWxsIGVudHJpZXMgdG8gaGF2ZSBhIGhhbGZ3YXkgcmVsaWFibGUgb3V0cHV0IChpZiBtb3JlIGVudHJpZXMgdGhhblxuICAgIC8vIHJldHJpZXZlZCBvbmVzIGV4aXN0LCB3ZSBjYW4gbm90IHJlbGlhYmx5IHJldHVybiB0aGUgc2FtZSBvdXRwdXQpIGlmIHRoZVxuICAgIC8vIG91dHB1dCBpcyBub3Qgc29ydGVkIGFueXdheS5cbiAgICBpZiAoIWN0eC5zb3J0ZWQpIHtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5zb3J0KCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoOyBpIDwgbWF4TGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBvcyA9IGkgKiAyO1xuICAgICAgY29uc3QgcmVzID0gW1xuICAgICAgICBmb3JtYXRWYWx1ZShjdHgsIGVudHJpZXNbcG9zXSwgcmVjdXJzZVRpbWVzKSxcbiAgICAgICAgZm9ybWF0VmFsdWUoY3R4LCBlbnRyaWVzW3BvcyArIDFdLCByZWN1cnNlVGltZXMpLFxuICAgICAgXTtcbiAgICAgIG91dHB1dFtpXSA9IHJlZHVjZVRvU2luZ2xlU3RyaW5nKFxuICAgICAgICBjdHgsXG4gICAgICAgIHJlcyxcbiAgICAgICAgXCJcIixcbiAgICAgICAgW1wiW1wiLCBcIl1cIl0sXG4gICAgICAgIGtBcnJheUV4dHJhc1R5cGUsXG4gICAgICAgIHJlY3Vyc2VUaW1lcyxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGN0eC5pbmRlbnRhdGlvbkx2bCAtPSAyO1xuICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgIG91dHB1dC5wdXNoKGAuLi4gJHtyZW1haW5pbmd9IG1vcmUgaXRlbSR7cmVtYWluaW5nID4gMSA/IFwic1wiIDogXCJcIn1gKTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZXRJdGVySW5uZXIoXG4gIGN0eCxcbiAgcmVjdXJzZVRpbWVzLFxuICBlbnRyaWVzLFxuICBzdGF0ZSxcbikge1xuICBjb25zdCBtYXhBcnJheUxlbmd0aCA9IE1hdGgubWF4KGN0eC5tYXhBcnJheUxlbmd0aCwgMCk7XG4gIGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWluKG1heEFycmF5TGVuZ3RoLCBlbnRyaWVzLmxlbmd0aCk7XG4gIGNvbnN0IG91dHB1dCA9IG5ldyBBcnJheShtYXhMZW5ndGgpO1xuICBjdHguaW5kZW50YXRpb25MdmwgKz0gMjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7IGkrKykge1xuICAgIG91dHB1dFtpXSA9IGZvcm1hdFZhbHVlKGN0eCwgZW50cmllc1tpXSwgcmVjdXJzZVRpbWVzKTtcbiAgfVxuICBjdHguaW5kZW50YXRpb25MdmwgLT0gMjtcbiAgaWYgKHN0YXRlID09PSBrV2VhayAmJiAhY3R4LnNvcnRlZCkge1xuICAgIC8vIFNvcnQgYWxsIGVudHJpZXMgdG8gaGF2ZSBhIGhhbGZ3YXkgcmVsaWFibGUgb3V0cHV0IChpZiBtb3JlIGVudHJpZXMgdGhhblxuICAgIC8vIHJldHJpZXZlZCBvbmVzIGV4aXN0LCB3ZSBjYW4gbm90IHJlbGlhYmx5IHJldHVybiB0aGUgc2FtZSBvdXRwdXQpIGlmIHRoZVxuICAgIC8vIG91dHB1dCBpcyBub3Qgc29ydGVkIGFueXdheS5cbiAgICBvdXRwdXQuc29ydCgpO1xuICB9XG4gIGNvbnN0IHJlbWFpbmluZyA9IGVudHJpZXMubGVuZ3RoIC0gbWF4TGVuZ3RoO1xuICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoXG4gICAgICBvdXRwdXQsXG4gICAgICBgLi4uICR7cmVtYWluaW5nfSBtb3JlIGl0ZW0ke3JlbWFpbmluZyA+IDEgPyBcInNcIiA6IFwiXCJ9YCxcbiAgICApO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8vIFJlZ2V4IHVzZWQgZm9yIGFuc2kgZXNjYXBlIGNvZGUgc3BsaXR0aW5nXG4vLyBBZG9wdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktcmVnZXgvYmxvYi9IRUFEL2luZGV4LmpzXG4vLyBMaWNlbnNlOiBNSVQsIGF1dGhvcnM6IEBzaW5kcmVzb3JodXMsIFFpeC0sIGFyanVubWVodGEgYW5kIExpdG9Nb3JlXG4vLyBNYXRjaGVzIGFsbCBhbnNpIGVzY2FwZSBjb2RlIHNlcXVlbmNlcyBpbiBhIHN0cmluZ1xuY29uc3QgYW5zaVBhdHRlcm4gPSBcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSpcIiArXG4gIFwiKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqXCIgK1xuICBcInxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KVwiICtcbiAgXCJ8KD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSlcIjtcbmNvbnN0IGFuc2kgPSBuZXcgUmVnRXhwKGFuc2lQYXR0ZXJuLCBcImdcIik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgcmVxdWlyZWQgdG8gZGlzcGxheSB0aGUgZ2l2ZW4gc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RyaW5nV2lkdGgoc3RyLCByZW1vdmVDb250cm9sQ2hhcnMgPSB0cnVlKSB7XG4gIGxldCB3aWR0aCA9IDA7XG5cbiAgaWYgKHJlbW92ZUNvbnRyb2xDaGFycykge1xuICAgIHN0ciA9IHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyhzdHIpO1xuICB9XG4gIHN0ciA9IHN0ci5ub3JtYWxpemUoXCJORkNcIik7XG4gIGZvciAoY29uc3QgY2hhciBvZiBzdHJbU3ltYm9sLml0ZXJhdG9yXSgpKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY29kZVBvaW50QXQoMCk7XG4gICAgaWYgKGlzRnVsbFdpZHRoQ29kZVBvaW50KGNvZGUpKSB7XG4gICAgICB3aWR0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoIWlzWmVyb1dpZHRoQ29kZVBvaW50KGNvZGUpKSB7XG4gICAgICB3aWR0aCsrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aWR0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNoYXJhY3RlciByZXByZXNlbnRlZCBieSBhIGdpdmVuXG4gKiBVbmljb2RlIGNvZGUgcG9pbnQgaXMgZnVsbC13aWR0aC4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gKi9cbmNvbnN0IGlzRnVsbFdpZHRoQ29kZVBvaW50ID0gKGNvZGUpID0+IHtcbiAgLy8gQ29kZSBwb2ludHMgYXJlIHBhcnRpYWxseSBkZXJpdmVkIGZyb206XG4gIC8vIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9VTklEQVRBL0Vhc3RBc2lhbldpZHRoLnR4dFxuICByZXR1cm4gY29kZSA+PSAweDExMDAgJiYgKFxuICAgIGNvZGUgPD0gMHgxMTVmIHx8IC8vIEhhbmd1bCBKYW1vXG4gICAgY29kZSA9PT0gMHgyMzI5IHx8IC8vIExFRlQtUE9JTlRJTkcgQU5HTEUgQlJBQ0tFVFxuICAgIGNvZGUgPT09IDB4MjMyYSB8fCAvLyBSSUdIVC1QT0lOVElORyBBTkdMRSBCUkFDS0VUXG4gICAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQgLi4gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRoc1xuICAgIChjb2RlID49IDB4MmU4MCAmJiBjb2RlIDw9IDB4MzI0NyAmJiBjb2RlICE9PSAweDMwM2YpIHx8XG4gICAgLy8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyAuLiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBXG4gICAgKGNvZGUgPj0gMHgzMjUwICYmIGNvZGUgPD0gMHg0ZGJmKSB8fFxuICAgIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgLi4gWWkgUmFkaWNhbHNcbiAgICAoY29kZSA+PSAweDRlMDAgJiYgY29kZSA8PSAweGE0YzYpIHx8XG4gICAgLy8gSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQVxuICAgIChjb2RlID49IDB4YTk2MCAmJiBjb2RlIDw9IDB4YTk3YykgfHxcbiAgICAvLyBIYW5ndWwgU3lsbGFibGVzXG4gICAgKGNvZGUgPj0gMHhhYzAwICYmIGNvZGUgPD0gMHhkN2EzKSB8fFxuICAgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHNcbiAgICAoY29kZSA+PSAweGY5MDAgJiYgY29kZSA8PSAweGZhZmYpIHx8XG4gICAgLy8gVmVydGljYWwgRm9ybXNcbiAgICAoY29kZSA+PSAweGZlMTAgJiYgY29kZSA8PSAweGZlMTkpIHx8XG4gICAgLy8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMgLi4gU21hbGwgRm9ybSBWYXJpYW50c1xuICAgIChjb2RlID49IDB4ZmUzMCAmJiBjb2RlIDw9IDB4ZmU2YikgfHxcbiAgICAvLyBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtc1xuICAgIChjb2RlID49IDB4ZmYwMSAmJiBjb2RlIDw9IDB4ZmY2MCkgfHxcbiAgICAoY29kZSA+PSAweGZmZTAgJiYgY29kZSA8PSAweGZmZTYpIHx8XG4gICAgLy8gS2FuYSBTdXBwbGVtZW50XG4gICAgKGNvZGUgPj0gMHgxYjAwMCAmJiBjb2RlIDw9IDB4MWIwMDEpIHx8XG4gICAgLy8gRW5jbG9zZWQgSWRlb2dyYXBoaWMgU3VwcGxlbWVudFxuICAgIChjb2RlID49IDB4MWYyMDAgJiYgY29kZSA8PSAweDFmMjUxKSB8fFxuICAgIC8vIE1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgUGljdG9ncmFwaHMgMHgxZjMwMCAtIDB4MWY1ZmZcbiAgICAvLyBFbW90aWNvbnMgMHgxZjYwMCAtIDB4MWY2NGZcbiAgICAoY29kZSA+PSAweDFmMzAwICYmIGNvZGUgPD0gMHgxZjY0ZikgfHxcbiAgICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCIC4uIFRlcnRpYXJ5IElkZW9ncmFwaGljIFBsYW5lXG4gICAgKGNvZGUgPj0gMHgyMDAwMCAmJiBjb2RlIDw9IDB4M2ZmZmQpXG4gICk7XG59O1xuXG5jb25zdCBpc1plcm9XaWR0aENvZGVQb2ludCA9IChjb2RlKSA9PiB7XG4gIHJldHVybiBjb2RlIDw9IDB4MUYgfHwgLy8gQzAgY29udHJvbCBjb2Rlc1xuICAgIChjb2RlID49IDB4N0YgJiYgY29kZSA8PSAweDlGKSB8fCAvLyBDMSBjb250cm9sIGNvZGVzXG4gICAgKGNvZGUgPj0gMHgzMDAgJiYgY29kZSA8PSAweDM2RikgfHwgLy8gQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzXG4gICAgKGNvZGUgPj0gMHgyMDBCICYmIGNvZGUgPD0gMHgyMDBGKSB8fCAvLyBNb2RpZnlpbmcgSW52aXNpYmxlIENoYXJhY3RlcnNcbiAgICAvLyBDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgZm9yIFN5bWJvbHNcbiAgICAoY29kZSA+PSAweDIwRDAgJiYgY29kZSA8PSAweDIwRkYpIHx8XG4gICAgKGNvZGUgPj0gMHhGRTAwICYmIGNvZGUgPD0gMHhGRTBGKSB8fCAvLyBWYXJpYXRpb24gU2VsZWN0b3JzXG4gICAgKGNvZGUgPj0gMHhGRTIwICYmIGNvZGUgPD0gMHhGRTJGKSB8fCAvLyBDb21iaW5pbmcgSGFsZiBNYXJrc1xuICAgIChjb2RlID49IDB4RTAxMDAgJiYgY29kZSA8PSAweEUwMUVGKTsgLy8gVmFyaWF0aW9uIFNlbGVjdG9yc1xufTtcblxuZnVuY3Rpb24gaGFzQnVpbHRJblRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIFRPRE8od2FmdXdhZnUxMyk6IEltcGxlbWVudFxuICAvLyAvLyBQcmV2ZW50IHRyaWdnZXJpbmcgcHJveHkgdHJhcHMuXG4gIC8vIGNvbnN0IGdldEZ1bGxQcm94eSA9IGZhbHNlO1xuICAvLyBjb25zdCBwcm94eVRhcmdldCA9IGdldFByb3h5RGV0YWlscyh2YWx1ZSwgZ2V0RnVsbFByb3h5KTtcbiAgY29uc3QgcHJveHlUYXJnZXQgPSB1bmRlZmluZWQ7XG4gIGlmIChwcm94eVRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSBwcm94eVRhcmdldDtcbiAgfVxuXG4gIC8vIENvdW50IG9iamVjdHMgdGhhdCBoYXZlIG5vIGB0b1N0cmluZ2AgZnVuY3Rpb24gYXMgYnVpbHQtaW4uXG4gIGlmICh0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gVGhlIG9iamVjdCBoYXMgYSBvd24gYHRvU3RyaW5nYCBwcm9wZXJ0eS4gVGh1cyBpdCdzIG5vdCBub3QgYSBidWlsdC1pbiBvbmUuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIFwidG9TdHJpbmdcIikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBGaW5kIHRoZSBvYmplY3QgdGhhdCBoYXMgdGhlIGB0b1N0cmluZ2AgcHJvcGVydHkgYXMgb3duIHByb3BlcnR5IGluIHRoZVxuICAvLyBwcm90b3R5cGUgY2hhaW4uXG4gIGxldCBwb2ludGVyID0gdmFsdWU7XG4gIGRvIHtcbiAgICBwb2ludGVyID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBvaW50ZXIpO1xuICB9IHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBvaW50ZXIsIFwidG9TdHJpbmdcIikpO1xuXG4gIC8vIENoZWNrIGNsb3NlciBpZiB0aGUgb2JqZWN0IGlzIGEgYnVpbHQtaW4uXG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBvaW50ZXIsIFwiY29uc3RydWN0b3JcIik7XG4gIHJldHVybiBkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICB0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgYnVpbHRJbk9iamVjdHMuaGFzKGRlc2NyaXB0b3IudmFsdWUubmFtZSk7XG59XG5cbmNvbnN0IGZpcnN0RXJyb3JMaW5lID0gKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlLnNwbGl0KFwiXFxuXCIsIDEpWzBdO1xubGV0IENJUkNVTEFSX0VSUk9SX01FU1NBR0U7XG5mdW5jdGlvbiB0cnlTdHJpbmdpZnkoYXJnKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFBvcHVsYXRlIHRoZSBjaXJjdWxhciBlcnJvciBtZXNzYWdlIGxhemlseVxuICAgIGlmICghQ0lSQ1VMQVJfRVJST1JfTUVTU0FHRSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYSA9IHt9O1xuICAgICAgICBhLmEgPSBhO1xuICAgICAgICBKU09OLnN0cmluZ2lmeShhKTtcbiAgICAgIH0gY2F0Y2ggKGNpcmN1bGFyRXJyb3IpIHtcbiAgICAgICAgQ0lSQ1VMQVJfRVJST1JfTUVTU0FHRSA9IGZpcnN0RXJyb3JMaW5lKGNpcmN1bGFyRXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBlcnIubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJlxuICAgICAgZmlyc3RFcnJvckxpbmUoZXJyKSA9PT0gQ0lSQ1VMQVJfRVJST1JfTUVTU0FHRVxuICAgICkge1xuICAgICAgcmV0dXJuIFwiW0NpcmN1bGFyXVwiO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdCguLi5hcmdzKSB7XG4gIHJldHVybiBmb3JtYXRXaXRoT3B0aW9uc0ludGVybmFsKHVuZGVmaW5lZCwgYXJncyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRXaXRoT3B0aW9ucyhpbnNwZWN0T3B0aW9ucywgLi4uYXJncykge1xuICBpZiAodHlwZW9mIGluc3BlY3RPcHRpb25zICE9PSBcIm9iamVjdFwiIHx8IGluc3BlY3RPcHRpb25zID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgXCJpbnNwZWN0T3B0aW9uc1wiLFxuICAgICAgXCJvYmplY3RcIixcbiAgICAgIGluc3BlY3RPcHRpb25zLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFdpdGhPcHRpb25zSW50ZXJuYWwoaW5zcGVjdE9wdGlvbnMsIGFyZ3MpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXROdW1iZXJOb0NvbG9yKG51bWJlciwgb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0TnVtYmVyKFxuICAgIHN0eWxpemVOb0NvbG9yLFxuICAgIG51bWJlcixcbiAgICBvcHRpb25zPy5udW1lcmljU2VwYXJhdG9yID8/IGluc3BlY3REZWZhdWx0T3B0aW9ucy5udW1lcmljU2VwYXJhdG9yLFxuICApO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRCaWdJbnROb0NvbG9yKGJpZ2ludCwgb3B0aW9ucykge1xuICByZXR1cm4gZm9ybWF0QmlnSW50KFxuICAgIHN0eWxpemVOb0NvbG9yLFxuICAgIGJpZ2ludCxcbiAgICBvcHRpb25zPy5udW1lcmljU2VwYXJhdG9yID8/IGluc3BlY3REZWZhdWx0T3B0aW9ucy5udW1lcmljU2VwYXJhdG9yLFxuICApO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXaXRoT3B0aW9uc0ludGVybmFsKGluc3BlY3RPcHRpb25zLCBhcmdzKSB7XG4gIGNvbnN0IGZpcnN0ID0gYXJnc1swXTtcbiAgbGV0IGEgPSAwO1xuICBsZXQgc3RyID0gXCJcIjtcbiAgbGV0IGpvaW4gPSBcIlwiO1xuXG4gIGlmICh0eXBlb2YgZmlyc3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBmaXJzdDtcbiAgICB9XG4gICAgbGV0IHRlbXBTdHI7XG4gICAgbGV0IGxhc3RQb3MgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXJzdC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGlmIChmaXJzdC5jaGFyQ29kZUF0KGkpID09PSAzNykgeyAvLyAnJSdcbiAgICAgICAgY29uc3QgbmV4dENoYXIgPSBmaXJzdC5jaGFyQ29kZUF0KCsraSk7XG4gICAgICAgIGlmIChhICsgMSAhPT0gYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5leHRDaGFyKSB7XG4gICAgICAgICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICBjYXNlIDExNTogLy8gJ3MnXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBBcmcgPSBhcmdzWysrYV07XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcEFyZyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHRlbXBTdHIgPSBmb3JtYXROdW1iZXJOb0NvbG9yKHRlbXBBcmcsIGluc3BlY3RPcHRpb25zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGVtcEFyZyA9PT0gXCJiaWdpbnRcIikge1xuICAgICAgICAgICAgICAgIHRlbXBTdHIgPSBmb3JtYXRCaWdJbnROb0NvbG9yKHRlbXBBcmcsIGluc3BlY3RPcHRpb25zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGVtcEFyZyAhPT0gXCJvYmplY3RcIiB8fFxuICAgICAgICAgICAgICAgIHRlbXBBcmcgPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAhaGFzQnVpbHRJblRvU3RyaW5nKHRlbXBBcmcpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRlbXBTdHIgPSBTdHJpbmcodGVtcEFyZyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGVtcFN0ciA9IGluc3BlY3QodGVtcEFyZywge1xuICAgICAgICAgICAgICAgICAgLi4uaW5zcGVjdE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICBjb21wYWN0OiAzLFxuICAgICAgICAgICAgICAgICAgY29sb3JzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMDY6IC8vICdqJ1xuICAgICAgICAgICAgICB0ZW1wU3RyID0gdHJ5U3RyaW5naWZ5KGFyZ3NbKythXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuICAgICAgICAgICAgY2FzZSAxMDA6IC8vICdkJ1xuICAgICAgICAgICAgICBjb25zdCB0ZW1wTnVtID0gYXJnc1srK2FdO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHRlbXBOdW0gPT09IFwiYmlnaW50XCIpIHtcbiAgICAgICAgICAgICAgICB0ZW1wU3RyID0gZm9ybWF0QmlnSW50Tm9Db2xvcih0ZW1wTnVtLCBpbnNwZWN0T3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlbXBOdW0gPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgICAgICAgICB0ZW1wU3RyID0gXCJOYU5cIjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZW1wU3RyID0gZm9ybWF0TnVtYmVyTm9Db2xvcihOdW1iZXIodGVtcE51bSksIGluc3BlY3RPcHRpb25zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNzk6IC8vICdPJ1xuICAgICAgICAgICAgICB0ZW1wU3RyID0gaW5zcGVjdChhcmdzWysrYV0sIGluc3BlY3RPcHRpb25zKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDExMTogLy8gJ28nXG4gICAgICAgICAgICAgIHRlbXBTdHIgPSBpbnNwZWN0KGFyZ3NbKythXSwge1xuICAgICAgICAgICAgICAgIC4uLmluc3BlY3RPcHRpb25zLFxuICAgICAgICAgICAgICAgIHNob3dIaWRkZW46IHRydWUsXG4gICAgICAgICAgICAgICAgc2hvd1Byb3h5OiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlcHRoOiA0LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICBjYXNlIDEwNTogLy8gJ2knXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBJbnRlZ2VyID0gYXJnc1srK2FdO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHRlbXBJbnRlZ2VyID09PSBcImJpZ2ludFwiKSB7XG4gICAgICAgICAgICAgICAgdGVtcFN0ciA9IGZvcm1hdEJpZ0ludE5vQ29sb3IodGVtcEludGVnZXIsIGluc3BlY3RPcHRpb25zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGVtcEludGVnZXIgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgICAgICAgICB0ZW1wU3RyID0gXCJOYU5cIjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZW1wU3RyID0gZm9ybWF0TnVtYmVyTm9Db2xvcihcbiAgICAgICAgICAgICAgICAgIE51bWJlci5wYXJzZUludCh0ZW1wSW50ZWdlciksXG4gICAgICAgICAgICAgICAgICBpbnNwZWN0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuICAgICAgICAgICAgY2FzZSAxMDI6IC8vICdmJ1xuICAgICAgICAgICAgICBjb25zdCB0ZW1wRmxvYXQgPSBhcmdzWysrYV07XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcEZsb2F0ID09PSBcInN5bWJvbFwiKSB7XG4gICAgICAgICAgICAgICAgdGVtcFN0ciA9IFwiTmFOXCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGVtcFN0ciA9IGZvcm1hdE51bWJlck5vQ29sb3IoXG4gICAgICAgICAgICAgICAgICBOdW1iZXIucGFyc2VGbG9hdCh0ZW1wRmxvYXQpLFxuICAgICAgICAgICAgICAgICAgaW5zcGVjdE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgOTk6IC8vICdjJ1xuICAgICAgICAgICAgICBhICs9IDE7XG4gICAgICAgICAgICAgIHRlbXBTdHIgPSBcIlwiO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vICclJ1xuICAgICAgICAgICAgICBzdHIgKz0gZmlyc3Quc2xpY2UobGFzdFBvcywgaSk7XG4gICAgICAgICAgICAgIGxhc3RQb3MgPSBpICsgMTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBkZWZhdWx0OiAvLyBBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIG5vdCBhIGNvcnJlY3QgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsYXN0UG9zICE9PSBpIC0gMSkge1xuICAgICAgICAgICAgc3RyICs9IGZpcnN0LnNsaWNlKGxhc3RQb3MsIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RyICs9IHRlbXBTdHI7XG4gICAgICAgICAgbGFzdFBvcyA9IGkgKyAxO1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRDaGFyID09PSAzNykge1xuICAgICAgICAgIHN0ciArPSBmaXJzdC5zbGljZShsYXN0UG9zLCBpKTtcbiAgICAgICAgICBsYXN0UG9zID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGxhc3RQb3MgIT09IDApIHtcbiAgICAgIGErKztcbiAgICAgIGpvaW4gPSBcIiBcIjtcbiAgICAgIGlmIChsYXN0UG9zIDwgZmlyc3QubGVuZ3RoKSB7XG4gICAgICAgIHN0ciArPSBmaXJzdC5zbGljZShsYXN0UG9zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3aGlsZSAoYSA8IGFyZ3MubGVuZ3RoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBhcmdzW2FdO1xuICAgIHN0ciArPSBqb2luO1xuICAgIHN0ciArPSB0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgPyBpbnNwZWN0KHZhbHVlLCBpbnNwZWN0T3B0aW9ucykgOiB2YWx1ZTtcbiAgICBqb2luID0gXCIgXCI7XG4gICAgYSsrO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogUmVtb3ZlIGFsbCBWVCBjb250cm9sIGNoYXJhY3RlcnMuIFVzZSB0byBlc3RpbWF0ZSBkaXNwbGF5ZWQgc3RyaW5nIHdpZHRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzKHN0cikge1xuICB2YWxpZGF0ZVN0cmluZyhzdHIsIFwic3RyXCIpO1xuXG4gIHJldHVybiBzdHIucmVwbGFjZShhbnNpLCBcIlwiKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmb3JtYXQsXG4gIGdldFN0cmluZ1dpZHRoLFxuICBpbnNwZWN0LFxuICBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMsXG4gIGZvcm1hdFdpdGhPcHRpb25zLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0b3JzLm1qc1wiO1xuaW1wb3J0IHsgbm9ybWFsaXplRW5jb2RpbmcsIHNsb3dDYXNlcyB9IGZyb20gXCIuL25vcm1hbGl6ZV9lbmNvZGluZy5tanNcIjtcbmV4cG9ydCB7IG5vcm1hbGl6ZUVuY29kaW5nLCBzbG93Q2FzZXMgfTtcblxuZXhwb3J0IGNvbnN0IGN1c3RvbUluc3BlY3RTeW1ib2wgPSBTeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b21cIik7XG5leHBvcnQgY29uc3Qga0VudW1lcmFibGVQcm9wZXJ0eSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gb25jZShjYWxsYmFjaykge1xuICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmIChjYWxsZWQpIHJldHVybjtcbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIFJlZmxlY3QuYXBwbHkoY2FsbGJhY2ssIHRoaXMsIGFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlKCkge1xuICBsZXQgcmVzb2x2ZTtcbiAgbGV0IHJlamVjdDtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgIHJlc29sdmUgPSByZXM7XG4gICAgcmVqZWN0ID0gcmVqO1xuICB9KTtcblxuICByZXR1cm4geyBwcm9taXNlLCByZXNvbHZlLCByZWplY3QgfTtcbn1cblxuLy8gS2VlcCBhIGxpc3Qgb2YgZGVwcmVjYXRpb24gY29kZXMgdGhhdCBoYXZlIGJlZW4gd2FybmVkIG9uIHNvIHdlIG9ubHkgd2FybiBvblxuLy8gZWFjaCBvbmUgb25jZS5cbmNvbnN0IGNvZGVzV2FybmVkID0gbmV3IFNldCgpO1xuXG4vLyBNYXJrIHRoYXQgYSBtZXRob2Qgc2hvdWxkIG5vdCBiZSB1c2VkLlxuLy8gUmV0dXJucyBhIG1vZGlmaWVkIGZ1bmN0aW9uIHdoaWNoIHdhcm5zIG9uY2UgYnkgZGVmYXVsdC5cbi8vIElmIC0tbm8tZGVwcmVjYXRpb24gaXMgc2V0LCB0aGVuIGl0IGlzIGEgbm8tb3AuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlKGZuLCBtc2csIGNvZGUpIHtcbiAgLy8gVE9ETyhrdDNrKTogVW5jb21tZW50IHRoaXNcbiAgLy8gaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbiA9PT0gdHJ1ZSkge1xuICAvLyAgcmV0dXJuIGZuO1xuICAvLyB9XG5cbiAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRlU3RyaW5nKGNvZGUsIFwiY29kZVwiKTtcbiAgfVxuXG4gIGxldCB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCguLi5hcmdzKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghY29kZXNXYXJuZWQuaGFzKGNvZGUpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhtc2csIFwiRGVwcmVjYXRpb25XYXJuaW5nXCIsIGNvZGUsIGRlcHJlY2F0ZWQpO1xuICAgICAgICAgIGNvZGVzV2FybmVkLmFkZChjb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhtc2csIFwiRGVwcmVjYXRpb25XYXJuaW5nXCIsIGRlcHJlY2F0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobmV3LnRhcmdldCkge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KGZuLCBhcmdzLCBuZXcudGFyZ2V0KTtcbiAgICB9XG4gICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgLy8gVGhlIHdyYXBwZXIgd2lsbCBrZWVwIHRoZSBzYW1lIHByb3RvdHlwZSBhcyBmbiB0byBtYWludGFpbiBwcm90b3R5cGUgY2hhaW5cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGRlcHJlY2F0ZWQsIGZuKTtcbiAgaWYgKGZuLnByb3RvdHlwZSkge1xuICAgIC8vIFNldHRpbmcgdGhpcyAocmF0aGVyIHRoYW4gdXNpbmcgT2JqZWN0LnNldFByb3RvdHlwZSwgYXMgYWJvdmUpIGVuc3VyZXNcbiAgICAvLyB0aGF0IGNhbGxpbmcgdGhlIHVud3JhcHBlZCBjb25zdHJ1Y3RvciBnaXZlcyBhbiBpbnN0YW5jZW9mIHRoZSB3cmFwcGVkXG4gICAgLy8gY29uc3RydWN0b3IuXG4gICAgZGVwcmVjYXRlZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIH1cblxuICByZXR1cm4gZGVwcmVjYXRlZDtcbn1cblxuLy8gSW4gYWRkaXRpb24gdG8gYmVpbmcgYWNjZXNzaWJsZSB0aHJvdWdoIHV0aWwucHJvbWlzaWZ5LmN1c3RvbSxcbi8vIHRoaXMgc3ltYm9sIGlzIHJlZ2lzdGVyZWQgZ2xvYmFsbHkgYW5kIGNhbiBiZSBhY2Nlc3NlZCBpbiBhbnkgZW52aXJvbm1lbnQgYXNcbi8vIFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLnByb21pc2lmeS5jdXN0b20nKS5cbmNvbnN0IGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJub2RlanMudXRpbC5wcm9taXNpZnkuY3VzdG9tXCIpO1xuLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCBOb2RlIHN5bWJvbCB1c2VkIGJ5IGZ1bmN0aW9ucyByZXR1cm5pbmcgbXVsdGlwbGVcbi8vIGFyZ3VtZW50cywgZS5nLiBbJ2J5dGVzUmVhZCcsICdidWZmZXInXSBmb3IgZnMucmVhZCgpLlxuY29uc3Qga0N1c3RvbVByb21pc2lmeUFyZ3NTeW1ib2wgPSBTeW1ib2wuZm9yKFxuICBcIm5vZGVqcy51dGlsLnByb21pc2lmeS5jdXN0b21BcmdzXCIsXG4pO1xuXG5leHBvcnQgY29uc3QgY3VzdG9tUHJvbWlzaWZ5QXJncyA9IGtDdXN0b21Qcm9taXNpZnlBcmdzU3ltYm9sO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzaWZ5KFxuICBvcmlnaW5hbCxcbikge1xuICB2YWxpZGF0ZUZ1bmN0aW9uKG9yaWdpbmFsLCBcIm9yaWdpbmFsXCIpO1xuICBpZiAob3JpZ2luYWxba0N1c3RvbVByb21pc2lmaWVkU3ltYm9sXSkge1xuICAgIGNvbnN0IGZuID0gb3JpZ2luYWxba0N1c3RvbVByb21pc2lmaWVkU3ltYm9sXTtcblxuICAgIHZhbGlkYXRlRnVuY3Rpb24oZm4sIFwidXRpbC5wcm9taXNpZnkuY3VzdG9tXCIpO1xuXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwga0N1c3RvbVByb21pc2lmaWVkU3ltYm9sLCB7XG4gICAgICB2YWx1ZTogZm4sXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE5hbWVzIHRvIGNyZWF0ZSBhbiBvYmplY3QgZnJvbSBpbiBjYXNlIHRoZSBjYWxsYmFjayByZWNlaXZlcyBtdWx0aXBsZVxuICAvLyBhcmd1bWVudHMsIGUuZy4gWydieXRlc1JlYWQnLCAnYnVmZmVyJ10gZm9yIGZzLnJlYWQuXG4gIGNvbnN0IGFyZ3VtZW50TmFtZXMgPSBvcmlnaW5hbFtrQ3VzdG9tUHJvbWlzaWZ5QXJnc1N5bWJvbF07XG4gIGZ1bmN0aW9uIGZuKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgYXJncy5wdXNoKChlcnIsIC4uLnZhbHVlcykgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmd1bWVudE5hbWVzICE9PSB1bmRlZmluZWQgJiYgdmFsdWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG9ialthcmd1bWVudE5hbWVzW2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUodmFsdWVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsLCB0aGlzLCBhcmdzKTtcbiAgICB9KTtcbiAgfVxuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihmbiwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG9yaWdpbmFsKSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2wsIHtcbiAgICB2YWx1ZTogZm4sXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgfSk7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhcbiAgICBmbixcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvcmlnaW5hbCksXG4gICk7XG59XG5cbnByb21pc2lmeS5jdXN0b20gPSBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2w7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBjdXN0b21JbnNwZWN0U3ltYm9sLFxuICBjdXN0b21Qcm9taXNpZnlBcmdzLFxuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3JtYWxpemVFbmNvZGluZyxcbiAgb25jZSxcbiAgZGVwcmVjYXRlLFxuICBwcm9taXNpZnksXG4gIHNsb3dDYXNlcyxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuLy8gVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIGBEZW5vLmNvcmVgLiBGb3IgZW52aXJvbm1lbnRzXG4vLyB0aGF0IGRvbid0IGhhdmUgYWNjZXNzIHRvIGBEZW5vLmNvcmVgIHNvbWUgQVBJcyBhcmUgcG9seWZpbGxlZCwgd2hpbGVcbi8vIHNvbWUgYXJlIHVuYXZhaWxibGUgYW5kIHRocm93IG9uIGNhbGwuXG5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG5leHBvcnQgbGV0IGNvcmU6IGFueTtcblxuLy8gQHRzLWlnbm9yZSBEZW5vLmNvcmUgaXMgbm90IGRlZmluZWQgaW4gdHlwZXNcbmlmIChEZW5vPy5jb3JlKSB7XG4gIC8vIEB0cy1pZ25vcmUgRGVuby5jb3JlIGlzIG5vdCBkZWZpbmVkIGluIHR5cGVzXG4gIGNvcmUgPSBEZW5vLmNvcmU7XG59IGVsc2Uge1xuICBjb3JlID0ge1xuICAgIHNldE5leHRUaWNrQ2FsbGJhY2s6IHVuZGVmaW5lZCxcbiAgICBldmFsQ29udGV4dChfY29kZTogc3RyaW5nLCBfZmlsZW5hbWU6IHN0cmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkRlbm8uY29yZS5ldmFsQ29udGV4dCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnRcIixcbiAgICAgICk7XG4gICAgfSxcbiAgICBlbmNvZGUoY2h1bms6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgICAgcmV0dXJuIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShjaHVuayk7XG4gICAgfSxcbiAgICBldmVudExvb3BIYXNNb3JlV29yaygpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICB9O1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbi8vIGRlbm8tbGludC1pZ25vcmUgcHJlZmVyLWNvbnN0XG5leHBvcnQgbGV0IF9leGl0aW5nID0gZmFsc2U7XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuXG4vLyBDdXJyZW50bHkgb3B0aW1hbCBxdWV1ZSBzaXplLCB0ZXN0ZWQgb24gVjggNi4wIC0gNi42LiBNdXN0IGJlIHBvd2VyIG9mIHR3by5cbmNvbnN0IGtTaXplID0gMjA0ODtcbmNvbnN0IGtNYXNrID0ga1NpemUgLSAxO1xuXG4vLyBUaGUgRml4ZWRRdWV1ZSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBmaXhlZC1zaXplXG4vLyBjaXJjdWxhciBidWZmZXJzLiBJdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuLy9cbi8vICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxcbi8vICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLy8gICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2XG4vLyArLS0tLS0tLS0tLS0rIDwtLS0tLVxcICAgICAgICstLS0tLS0tLS0tLSsgPC0tLS0tLVxcICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgXFwtLS0tLSB8ICAgbmV4dCAgICB8ICAgICAgICAgXFwtLS0tLS0tIHwgICBuZXh0ICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8IDwtLSB0b3AgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gT3IsIGlmIHRoZXJlIGlzIG9ubHkgb25lIGNpcmN1bGFyIGJ1ZmZlciwgaXQgbG9va3Mgc29tZXRoaW5nXG4vLyBsaWtlIGVpdGhlciBvZiB0aGVzZTpcbi8vXG4vLyAgaGVhZCAgIHRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICAgdGFpbFxuLy8gICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8XG4vLyAgICB2ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbbnVsbF0gICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgICAgICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIEFkZGluZyBhIHZhbHVlIG1lYW5zIG1vdmluZyBgdG9wYCBmb3J3YXJkIGJ5IG9uZSwgcmVtb3ZpbmcgbWVhbnNcbi8vIG1vdmluZyBgYm90dG9tYCBmb3J3YXJkIGJ5IG9uZS4gQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCwgdGhlIHF1ZXVlXG4vLyB3cmFwcyBhcm91bmQuXG4vL1xuLy8gV2hlbiBgdG9wID09PSBib3R0b21gIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGVtcHR5IGFuZCB3aGVuXG4vLyBgdG9wICsgMSA9PT0gYm90dG9tYCBpdCdzIGZ1bGwuIFRoaXMgd2FzdGVzIGEgc2luZ2xlIHNwYWNlIG9mIHN0b3JhZ2Vcbi8vIGJ1dCBhbGxvd3MgbXVjaCBxdWlja2VyIGNoZWNrcy5cblxuY2xhc3MgRml4ZWRDaXJjdWxhckJ1ZmZlciB7XG4gIGJvdHRvbTogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgbGlzdDogdW5kZWZpbmVkIHwgQXJyYXk8dW5rbm93bj47XG4gIG5leHQ6IEZpeGVkQ2lyY3VsYXJCdWZmZXIgfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYm90dG9tID0gMDtcbiAgICB0aGlzLnRvcCA9IDA7XG4gICAgdGhpcy5saXN0ID0gbmV3IEFycmF5KGtTaXplKTtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy50b3AgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgaXNGdWxsKCkge1xuICAgIHJldHVybiAoKHRoaXMudG9wICsgMSkgJiBrTWFzaykgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgcHVzaChkYXRhOiB1bmtub3duKSB7XG4gICAgdGhpcy5saXN0IVt0aGlzLnRvcF0gPSBkYXRhO1xuICAgIHRoaXMudG9wID0gKHRoaXMudG9wICsgMSkgJiBrTWFzaztcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IG5leHRJdGVtID0gdGhpcy5saXN0IVt0aGlzLmJvdHRvbV07XG4gICAgaWYgKG5leHRJdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0aGlzLmxpc3QhW3RoaXMuYm90dG9tXSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJvdHRvbSA9ICh0aGlzLmJvdHRvbSArIDEpICYga01hc2s7XG4gICAgcmV0dXJuIG5leHRJdGVtO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaXhlZFF1ZXVlIHtcbiAgaGVhZDogRml4ZWRDaXJjdWxhckJ1ZmZlcjtcbiAgdGFpbDogRml4ZWRDaXJjdWxhckJ1ZmZlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkLmlzRW1wdHkoKTtcbiAgfVxuXG4gIHB1c2goZGF0YTogdW5rbm93bikge1xuICAgIGlmICh0aGlzLmhlYWQuaXNGdWxsKCkpIHtcbiAgICAgIC8vIEhlYWQgaXMgZnVsbDogQ3JlYXRlcyBhIG5ldyBxdWV1ZSwgc2V0cyB0aGUgb2xkIHF1ZXVlJ3MgYC5uZXh0YCB0byBpdCxcbiAgICAgIC8vIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgbWFpbiBxdWV1ZS5cbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0ID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgICB9XG4gICAgdGhpcy5oZWFkLnB1c2goZGF0YSk7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCB0YWlsID0gdGhpcy50YWlsO1xuICAgIGNvbnN0IG5leHQgPSB0YWlsLnNoaWZ0KCk7XG4gICAgaWYgKHRhaWwuaXNFbXB0eSgpICYmIHRhaWwubmV4dCAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYW5vdGhlciBxdWV1ZSwgaXQgZm9ybXMgdGhlIG5ldyB0YWlsLlxuICAgICAgdGhpcy50YWlsID0gdGFpbC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cblxuLy8gZGVuby1saW50LWlnbm9yZS1maWxlIG5vLWlubmVyLWRlY2xhcmF0aW9uc1xuXG5pbXBvcnQgeyBjb3JlIH0gZnJvbSBcIi4vX2NvcmUudHNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQ2FsbGJhY2sgfSBmcm9tIFwiLi9pbnRlcm5hbC92YWxpZGF0b3JzLm1qc1wiO1xuaW1wb3J0IHsgX2V4aXRpbmcgfSBmcm9tIFwiLi9fcHJvY2Vzcy9leGl0aW5nLnRzXCI7XG5pbXBvcnQgeyBGaXhlZFF1ZXVlIH0gZnJvbSBcIi4vaW50ZXJuYWwvZml4ZWRfcXVldWUudHNcIjtcblxuaW50ZXJmYWNlIFRvY2sge1xuICBjYWxsYmFjazogKC4uLmFyZ3M6IEFycmF5PHVua25vd24+KSA9PiB2b2lkO1xuICBhcmdzOiBBcnJheTx1bmtub3duPjtcbn1cblxuY29uc3QgcXVldWUgPSBuZXcgRml4ZWRRdWV1ZSgpO1xuXG4vLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxubGV0IF9uZXh0VGljazogYW55O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1RpY2tzQW5kUmVqZWN0aW9ucygpIHtcbiAgbGV0IHRvY2s7XG4gIGRvIHtcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWNvbmQtYXNzaWduXG4gICAgd2hpbGUgKHRvY2sgPSBxdWV1ZS5zaGlmdCgpKSB7XG4gICAgICAvLyBGSVhNRShiYXJ0bG9taWVqdSk6IERlbm8gY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBhc3luYyBob29rc1xuICAgICAgLy8gY29uc3QgYXN5bmNJZCA9IHRvY2tbYXN5bmNfaWRfc3ltYm9sXTtcbiAgICAgIC8vIGVtaXRCZWZvcmUoYXN5bmNJZCwgdG9ja1t0cmlnZ2VyX2FzeW5jX2lkX3N5bWJvbF0sIHRvY2spO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9ICh0b2NrIGFzIFRvY2spLmNhbGxiYWNrO1xuICAgICAgICBpZiAoKHRvY2sgYXMgVG9jaykuYXJncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBhcmdzID0gKHRvY2sgYXMgVG9jaykuYXJncztcbiAgICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBjYWxsYmFjayhhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNhbGxiYWNrKC4uLmFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gRklYTUUoYmFydGxvbWllanUpOiBEZW5vIGN1cnJlbnRseSBkb2Vzbid0IHN1cHBvcnQgYXN5bmMgaG9va3NcbiAgICAgICAgLy8gaWYgKGRlc3Ryb3lIb29rc0V4aXN0KCkpXG4gICAgICAgIC8vIGVtaXREZXN0cm95KGFzeW5jSWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBGSVhNRShiYXJ0bG9taWVqdSk6IERlbm8gY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBhc3luYyBob29rc1xuICAgICAgLy8gZW1pdEFmdGVyKGFzeW5jSWQpO1xuICAgIH1cbiAgICBjb3JlLnJ1bk1pY3JvdGFza3MoKTtcbiAgICAvLyBGSVhNRShiYXJ0bG9taWVqdSk6IERlbm8gY3VycmVudGx5IGRvZXNuJ3QgdW5oYW5kbGVkIHJlamVjdGlvbnNcbiAgICAvLyB9IHdoaWxlICghcXVldWUuaXNFbXB0eSgpIHx8IHByb2Nlc3NQcm9taXNlUmVqZWN0aW9ucygpKTtcbiAgfSB3aGlsZSAoIXF1ZXVlLmlzRW1wdHkoKSk7XG4gIGNvcmUuc2V0SGFzVGlja1NjaGVkdWxlZChmYWxzZSk7XG4gIC8vIEZJWE1FKGJhcnRsb21pZWp1KTogRGVubyBjdXJyZW50bHkgZG9lc24ndCB1bmhhbmRsZWQgcmVqZWN0aW9uc1xuICAvLyBzZXRIYXNSZWplY3Rpb25Ub1dhcm4oZmFsc2UpO1xufVxuXG5pZiAodHlwZW9mIGNvcmUuc2V0TmV4dFRpY2tDYWxsYmFjayAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBmdW5jdGlvbiBydW5OZXh0VGlja3MoKSB7XG4gICAgLy8gRklYTUUoYmFydGxvbWllanUpOiBEZW5vIGN1cnJlbnRseSBkb2Vzbid0IHVuaGFuZGxlZCByZWplY3Rpb25zXG4gICAgLy8gaWYgKCFoYXNUaWNrU2NoZWR1bGVkKCkgJiYgIWhhc1JlamVjdGlvblRvV2FybigpKVxuICAgIC8vICAgcnVuTWljcm90YXNrcygpO1xuICAgIC8vIGlmICghaGFzVGlja1NjaGVkdWxlZCgpICYmICFoYXNSZWplY3Rpb25Ub1dhcm4oKSlcbiAgICAvLyAgIHJldHVybjtcbiAgICBpZiAoIWNvcmUuaGFzVGlja1NjaGVkdWxlZCgpKSB7XG4gICAgICBjb3JlLnJ1bk1pY3JvdGFza3MoKTtcbiAgICB9XG4gICAgaWYgKCFjb3JlLmhhc1RpY2tTY2hlZHVsZWQoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJvY2Vzc1RpY2tzQW5kUmVqZWN0aW9ucygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29yZS5zZXROZXh0VGlja0NhbGxiYWNrKHByb2Nlc3NUaWNrc0FuZFJlamVjdGlvbnMpO1xuICBjb3JlLnNldE1hY3JvdGFza0NhbGxiYWNrKHJ1bk5leHRUaWNrcyk7XG5cbiAgZnVuY3Rpb24gX19uZXh0VGlja05hdGl2ZTxUIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4+KFxuICAgIHRoaXM6IHVua25vd24sXG4gICAgY2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuICAgIC4uLmFyZ3M6IFRcbiAgKSB7XG4gICAgdmFsaWRhdGVDYWxsYmFjayhjYWxsYmFjayk7XG5cbiAgICBpZiAoX2V4aXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUT0RPKGJhcnRsb21pZWp1KTogc2VlbXMgc3VwZXJmbHVvdXMgaWYgd2UgZG9uJ3QgZGVwZW5kIG9uIGBhcmd1bWVudHNgXG4gICAgbGV0IGFyZ3NfO1xuICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGFyZ3NfID0gW2FyZ3NbMF1dO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgYXJnc18gPSBbYXJnc1swXSwgYXJnc1sxXV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBhcmdzXyA9IFthcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhcmdzXyA9IG5ldyBBcnJheShhcmdzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NfW2ldID0gYXJnc1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgIGNvcmUuc2V0SGFzVGlja1NjaGVkdWxlZCh0cnVlKTtcbiAgICB9XG4gICAgLy8gRklYTUUoYmFydGxvbWllanUpOiBEZW5vIGN1cnJlbnRseSBkb2Vzbid0IHN1cHBvcnQgYXN5bmMgaG9va3NcbiAgICAvLyBjb25zdCBhc3luY0lkID0gbmV3QXN5bmNJZCgpO1xuICAgIC8vIGNvbnN0IHRyaWdnZXJBc3luY0lkID0gZ2V0RGVmYXVsdFRyaWdnZXJBc3luY0lkKCk7XG4gICAgY29uc3QgdGlja09iamVjdCA9IHtcbiAgICAgIC8vIEZJWE1FKGJhcnRsb21pZWp1KTogRGVubyBjdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IGFzeW5jIGhvb2tzXG4gICAgICAvLyBbYXN5bmNfaWRfc3ltYm9sXTogYXN5bmNJZCxcbiAgICAgIC8vIFt0cmlnZ2VyX2FzeW5jX2lkX3N5bWJvbF06IHRyaWdnZXJBc3luY0lkLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBhcmdzOiBhcmdzXyxcbiAgICB9O1xuICAgIC8vIEZJWE1FKGJhcnRsb21pZWp1KTogRGVubyBjdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IGFzeW5jIGhvb2tzXG4gICAgLy8gaWYgKGluaXRIb29rc0V4aXN0KCkpXG4gICAgLy8gICBlbWl0SW5pdChhc3luY0lkLCAnVGlja09iamVjdCcsIHRyaWdnZXJBc3luY0lkLCB0aWNrT2JqZWN0KTtcbiAgICBxdWV1ZS5wdXNoKHRpY2tPYmplY3QpO1xuICB9XG4gIF9uZXh0VGljayA9IF9fbmV4dFRpY2tOYXRpdmU7XG59IGVsc2Uge1xuICBmdW5jdGlvbiBfX25leHRUaWNrUXVldWVNaWNyb3Rhc2s8VCBleHRlbmRzIEFycmF5PHVua25vd24+PihcbiAgICB0aGlzOiB1bmtub3duLFxuICAgIGNhbGxiYWNrOiAoLi4uYXJnczogVCkgPT4gdm9pZCxcbiAgICAuLi5hcmdzOiBUXG4gICkge1xuICAgIGlmIChhcmdzKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjay5jYWxsKHRoaXMsIC4uLmFyZ3MpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIF9uZXh0VGljayA9IF9fbmV4dFRpY2tRdWV1ZU1pY3JvdGFzaztcbn1cblxuLy8gYG5leHRUaWNrKClgIHdpbGwgbm90IGVucXVldWUgYW55IGNhbGxiYWNrIHdoZW4gdGhlIHByb2Nlc3MgaXMgYWJvdXQgdG9cbi8vIGV4aXQgc2luY2UgdGhlIGNhbGxiYWNrIHdvdWxkIG5vdCBoYXZlIGEgY2hhbmNlIHRvIGJlIGV4ZWN1dGVkLlxuZXhwb3J0IGZ1bmN0aW9uIG5leHRUaWNrKHRoaXM6IHVua25vd24sIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZDtcbmV4cG9ydCBmdW5jdGlvbiBuZXh0VGljazxUIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4+KFxuICB0aGlzOiB1bmtub3duLFxuICBjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG4gIC4uLmFyZ3M6IFRcbik6IHZvaWQ7XG5leHBvcnQgZnVuY3Rpb24gbmV4dFRpY2s8VCBleHRlbmRzIEFycmF5PHVua25vd24+PihcbiAgdGhpczogdW5rbm93bixcbiAgY2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuICAuLi5hcmdzOiBUXG4pIHtcbiAgX25leHRUaWNrKGNhbGxiYWNrLCAuLi5hcmdzKTtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG4vKipcbiAqIHtAbGlua2NvZGUgc3ByaW50Zn0gYW5kIHtAbGlua2NvZGUgcHJpbnRmfSBmb3IgcHJpbnRpbmcgZm9ybWF0dGVkIHN0cmluZ3MgdG9cbiAqIHN0ZG91dC5cbiAqXG4gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGluc3BpcmVkIGJ5IFBPU0lYIGFuZCBHb2xhbmcgYnV0IGRvZXMgbm90IHBvcnRcbiAqIGltcGxlbWVudGF0aW9uIGNvZGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmVudW0gU3RhdGUge1xuICBQQVNTVEhST1VHSCxcbiAgUEVSQ0VOVCxcbiAgUE9TSVRJT05BTCxcbiAgUFJFQ0lTSU9OLFxuICBXSURUSCxcbn1cblxuZW51bSBXb3JQIHtcbiAgV0lEVEgsXG4gIFBSRUNJU0lPTixcbn1cblxuY2xhc3MgRmxhZ3Mge1xuICBwbHVzPzogYm9vbGVhbjtcbiAgZGFzaD86IGJvb2xlYW47XG4gIHNoYXJwPzogYm9vbGVhbjtcbiAgc3BhY2U/OiBib29sZWFuO1xuICB6ZXJvPzogYm9vbGVhbjtcbiAgbGVzc3RoYW4/OiBib29sZWFuO1xuICB3aWR0aCA9IC0xO1xuICBwcmVjaXNpb24gPSAtMTtcbn1cblxuY29uc3QgbWluID0gTWF0aC5taW47XG5jb25zdCBVTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUiA9IFwiXFx1ZmZmZFwiO1xuY29uc3QgREVGQVVMVF9QUkVDSVNJT04gPSA2O1xuY29uc3QgRkxPQVRfUkVHRVhQID0gLygtPykoXFxkKVxcLj8oXFxkKillKFsrLV0pKFxcZCspLztcblxuZW51bSBGIHtcbiAgc2lnbiA9IDEsXG4gIG1hbnRpc3NhLFxuICBmcmFjdGlvbmFsLFxuICBlc2lnbixcbiAgZXhwb25lbnQsXG59XG5cbmNsYXNzIFByaW50ZiB7XG4gIGZvcm1hdDogc3RyaW5nO1xuICBhcmdzOiB1bmtub3duW107XG4gIGk6IG51bWJlcjtcblxuICBzdGF0ZTogU3RhdGUgPSBTdGF0ZS5QQVNTVEhST1VHSDtcbiAgdmVyYiA9IFwiXCI7XG4gIGJ1ZiA9IFwiXCI7XG4gIGFyZ051bSA9IDA7XG4gIGZsYWdzOiBGbGFncyA9IG5ldyBGbGFncygpO1xuXG4gIGhhdmVTZWVuOiBib29sZWFuW107XG5cbiAgLy8gYmFyZiwgc3RvcmUgcHJlY2lzaW9uIGFuZCB3aWR0aCBlcnJvcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcgLi4uXG4gIHRtcEVycm9yPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGZvcm1hdDogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuaGF2ZVNlZW4gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBhcmdzLmxlbmd0aCB9KTtcbiAgICB0aGlzLmkgPSAwO1xuICB9XG5cbiAgZG9QcmludGYoKTogc3RyaW5nIHtcbiAgICBmb3IgKDsgdGhpcy5pIDwgdGhpcy5mb3JtYXQubGVuZ3RoOyArK3RoaXMuaSkge1xuICAgICAgY29uc3QgYyA9IHRoaXMuZm9ybWF0W3RoaXMuaV07XG4gICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgY2FzZSBTdGF0ZS5QQVNTVEhST1VHSDpcbiAgICAgICAgICBpZiAoYyA9PT0gXCIlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5QRVJDRU5UO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZiArPSBjO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTdGF0ZS5QRVJDRU5UOlxuICAgICAgICAgIGlmIChjID09PSBcIiVcIikge1xuICAgICAgICAgICAgdGhpcy5idWYgKz0gYztcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5QQVNTVEhST1VHSDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVGb3JtYXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgYmUgdW5yZWFjaGFibGUsIGNlcnRhaW5seSBhIGJ1ZyBpbiB0aGUgbGliLlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY2hlY2sgZm9yIHVuaGFuZGxlZCBhcmdzXG4gICAgbGV0IGV4dHJhcyA9IGZhbHNlO1xuICAgIGxldCBlcnIgPSBcIiUhKEVYVFJBXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgIT09IHRoaXMuaGF2ZVNlZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmICghdGhpcy5oYXZlU2VlbltpXSkge1xuICAgICAgICBleHRyYXMgPSB0cnVlO1xuICAgICAgICBlcnIgKz0gYCAnJHtEZW5vLmluc3BlY3QodGhpcy5hcmdzW2ldKX0nYDtcbiAgICAgIH1cbiAgICB9XG4gICAgZXJyICs9IFwiKVwiO1xuICAgIGlmIChleHRyYXMpIHtcbiAgICAgIHRoaXMuYnVmICs9IGVycjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYnVmO1xuICB9XG5cbiAgLy8gJVs8cG9zaXRpb25hbD5dPGZsYWc+Li4uPHZlcmI+XG4gIGhhbmRsZUZvcm1hdCgpIHtcbiAgICB0aGlzLmZsYWdzID0gbmV3IEZsYWdzKCk7XG4gICAgY29uc3QgZmxhZ3MgPSB0aGlzLmZsYWdzO1xuICAgIGZvciAoOyB0aGlzLmkgPCB0aGlzLmZvcm1hdC5sZW5ndGg7ICsrdGhpcy5pKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5mb3JtYXRbdGhpcy5pXTtcbiAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIFN0YXRlLlBFUkNFTlQ6XG4gICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICBjYXNlIFwiW1wiOlxuICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBvc2l0aW9uYWwoKTtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlBPU0lUSU9OQUw7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIitcIjpcbiAgICAgICAgICAgICAgZmxhZ3MucGx1cyA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIjxcIjpcbiAgICAgICAgICAgICAgZmxhZ3MubGVzc3RoYW4gPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgIGZsYWdzLmRhc2ggPSB0cnVlO1xuICAgICAgICAgICAgICBmbGFncy56ZXJvID0gZmFsc2U7IC8vIG9ubHkgbGVmdCBwYWQgemVyb3MsIGRhc2ggdGFrZXMgcHJlY2VkZW5jZVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCIjXCI6XG4gICAgICAgICAgICAgIGZsYWdzLnNoYXJwID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiIFwiOlxuICAgICAgICAgICAgICBmbGFncy5zcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIjBcIjpcbiAgICAgICAgICAgICAgLy8gb25seSBsZWZ0IHBhZCB6ZXJvcywgZGFzaCB0YWtlcyBwcmVjZWRlbmNlXG4gICAgICAgICAgICAgIGZsYWdzLnplcm8gPSAhZmxhZ3MuZGFzaDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBpZiAoKFwiMVwiIDw9IGMgJiYgYyA8PSBcIjlcIikgfHwgYyA9PT0gXCIuXCIgfHwgYyA9PT0gXCIqXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gXCIuXCIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3MucHJlY2lzaW9uID0gMDtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5QUkVDSVNJT047XG4gICAgICAgICAgICAgICAgICB0aGlzLmkrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLldJRFRIO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVdpZHRoQW5kUHJlY2lzaW9uKGZsYWdzKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVZlcmIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIGFsd2F5cyBlbmQgaW4gdmVyYlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBzd2l0Y2ggY1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFN0YXRlLlBPU0lUSU9OQUw6XG4gICAgICAgICAgLy8gVE9ETyhiYXJ0bG9taWVqdSk6IGVpdGhlciBhIHZlcmIgb3IgKiBvbmx5IHZlcmIgZm9yIG5vd1xuICAgICAgICAgIGlmIChjID09PSBcIipcIikge1xuICAgICAgICAgICAgY29uc3Qgd29ycCA9IHRoaXMuZmxhZ3MucHJlY2lzaW9uID09PSAtMVxuICAgICAgICAgICAgICA/IFdvclAuV0lEVEhcbiAgICAgICAgICAgICAgOiBXb3JQLlBSRUNJU0lPTjtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlV2lkdGhPclByZWNpc2lvblJlZih3b3JwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5QRVJDRU5UO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmVyYigpO1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBhbHdheXMgZW5kIGluIHZlcmJcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaG91bGQgbm90IGJlIGhlcmUgJHt0aGlzLnN0YXRlfSwgbGlicmFyeSBidWchYCk7XG4gICAgICB9IC8vIHN3aXRjaCBzdGF0ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgd2lkdGggb3IgcHJlY2lzaW9uXG4gICAqIEBwYXJhbSB3T3JQXG4gICAqL1xuICBoYW5kbGVXaWR0aE9yUHJlY2lzaW9uUmVmKHdPclA6IFdvclApIHtcbiAgICBpZiAodGhpcy5hcmdOdW0gPj0gdGhpcy5hcmdzLmxlbmd0aCkge1xuICAgICAgLy8gaGFuZGxlIFBvc2l0aW9uYWwgc2hvdWxkIGhhdmUgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIGl0Li4uXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFyZyA9IHRoaXMuYXJnc1t0aGlzLmFyZ051bV07XG4gICAgdGhpcy5oYXZlU2Vlblt0aGlzLmFyZ051bV0gPSB0cnVlO1xuICAgIGlmICh0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSB7XG4gICAgICBzd2l0Y2ggKHdPclApIHtcbiAgICAgICAgY2FzZSBXb3JQLldJRFRIOlxuICAgICAgICAgIHRoaXMuZmxhZ3Mud2lkdGggPSBhcmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5mbGFncy5wcmVjaXNpb24gPSBhcmc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRtcCA9IHdPclAgPT09IFdvclAuV0lEVEggPyBcIldJRFRIXCIgOiBcIlBSRUNcIjtcbiAgICAgIHRoaXMudG1wRXJyb3IgPSBgJSEoQkFEICR7dG1wfSAnJHt0aGlzLmFyZ3NbdGhpcy5hcmdOdW1dfScpYDtcbiAgICB9XG4gICAgdGhpcy5hcmdOdW0rKztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgd2lkdGggYW5kIHByZWNpc2lvblxuICAgKiBAcGFyYW0gZmxhZ3NcbiAgICovXG4gIGhhbmRsZVdpZHRoQW5kUHJlY2lzaW9uKGZsYWdzOiBGbGFncykge1xuICAgIGNvbnN0IGZtdCA9IHRoaXMuZm9ybWF0O1xuICAgIGZvciAoOyB0aGlzLmkgIT09IHRoaXMuZm9ybWF0Lmxlbmd0aDsgKyt0aGlzLmkpIHtcbiAgICAgIGNvbnN0IGMgPSBmbXRbdGhpcy5pXTtcbiAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICBjYXNlIFN0YXRlLldJRFRIOlxuICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgY2FzZSBcIi5cIjpcbiAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwcmVjaXNpb24sICU5LmYgLT4gcHJlY2lzaW9uPTBcbiAgICAgICAgICAgICAgdGhpcy5mbGFncy5wcmVjaXNpb24gPSAwO1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUFJFQ0lTSU9OO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCIqXCI6XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlV2lkdGhPclByZWNpc2lvblJlZihXb3JQLldJRFRIKTtcbiAgICAgICAgICAgICAgLy8gZm9yY2UgLiBvciBmbGFnIGF0IHRoaXMgcG9pbnRcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlSW50KGMpO1xuICAgICAgICAgICAgICAvLyBtb3N0IGxpa2VseSBwYXJzZUludCBkb2VzIHNvbWV0aGluZyBzdHVwaWQgdGhhdCBtYWtlc1xuICAgICAgICAgICAgICAvLyBpdCB1bnVzYWJsZSBmb3IgdGhpcyBzY2VuYXJpbyAuLi5cbiAgICAgICAgICAgICAgLy8gaWYgd2UgZW5jb3VudGVyIGEgbm9uIChudW1iZXJ8KnwuKSB3ZSdyZSBkb25lIHdpdGggcHJlYyAmIHdpZFxuICAgICAgICAgICAgICBpZiAoaXNOYU4odmFsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaS0tO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5QRVJDRU5UO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmbGFncy53aWR0aCA9IGZsYWdzLndpZHRoID09IC0xID8gMCA6IGZsYWdzLndpZHRoO1xuICAgICAgICAgICAgICBmbGFncy53aWR0aCAqPSAxMDtcbiAgICAgICAgICAgICAgZmxhZ3Mud2lkdGggKz0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gc3dpdGNoIGNcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBTdGF0ZS5QUkVDSVNJT046IHtcbiAgICAgICAgICBpZiAoYyA9PT0gXCIqXCIpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlV2lkdGhPclByZWNpc2lvblJlZihXb3JQLlBSRUNJU0lPTik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdmFsID0gcGFyc2VJbnQoYyk7XG4gICAgICAgICAgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgIC8vIG9uZSB0b28gZmFyLCByZXdpbmRcbiAgICAgICAgICAgIHRoaXMuaS0tO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlBFUkNFTlQ7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsYWdzLnByZWNpc2lvbiAqPSAxMDtcbiAgICAgICAgICBmbGFncy5wcmVjaXNpb24gKz0gdmFsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3QgYmUgaGVyZS4gYnVnLlwiKTtcbiAgICAgIH0gLy8gc3dpdGNoIHN0YXRlXG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZSBwb3NpdGlvbmFsICovXG4gIGhhbmRsZVBvc2l0aW9uYWwoKSB7XG4gICAgaWYgKHRoaXMuZm9ybWF0W3RoaXMuaV0gIT09IFwiW1wiKSB7XG4gICAgICAvLyBzYW5pdHkgb25seVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgaGFwcGVuPyBCdWcuXCIpO1xuICAgIH1cbiAgICBsZXQgcG9zaXRpb25hbCA9IDA7XG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5mb3JtYXQ7XG4gICAgdGhpcy5pKys7XG4gICAgbGV0IGVyciA9IGZhbHNlO1xuICAgIGZvciAoOyB0aGlzLmkgIT09IHRoaXMuZm9ybWF0Lmxlbmd0aDsgKyt0aGlzLmkpIHtcbiAgICAgIGlmIChmb3JtYXRbdGhpcy5pXSA9PT0gXCJdXCIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwb3NpdGlvbmFsICo9IDEwO1xuICAgICAgY29uc3QgdmFsID0gcGFyc2VJbnQoZm9ybWF0W3RoaXMuaV0pO1xuICAgICAgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICAgICAgLy90aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIC8vICBgaW52YWxpZCBjaGFyYWN0ZXIgaW4gcG9zaXRpb25hbDogJHtmb3JtYXR9WyR7Zm9ybWF0W3RoaXMuaV19XWBcbiAgICAgICAgLy8pO1xuICAgICAgICB0aGlzLnRtcEVycm9yID0gXCIlIShCQUQgSU5ERVgpXCI7XG4gICAgICAgIGVyciA9IHRydWU7XG4gICAgICB9XG4gICAgICBwb3NpdGlvbmFsICs9IHZhbDtcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uYWwgLSAxID49IHRoaXMuYXJncy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudG1wRXJyb3IgPSBcIiUhKEJBRCBJTkRFWClcIjtcbiAgICAgIGVyciA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuYXJnTnVtID0gZXJyID8gdGhpcy5hcmdOdW0gOiBwb3NpdGlvbmFsIC0gMTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKiogSGFuZGxlIGxlc3MgdGhhbiAqL1xuICBoYW5kbGVMZXNzVGhhbigpOiBzdHJpbmcge1xuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgYXJnID0gdGhpcy5hcmdzW3RoaXMuYXJnTnVtXSBhcyBhbnk7XG4gICAgaWYgKChhcmcgfHwge30pLmNvbnN0cnVjdG9yLm5hbWUgIT09IFwiQXJyYXlcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhcmcgJHthcmd9IGlzIG5vdCBhbiBhcnJheS4gVG9kbyBiZXR0ZXIgZXJyb3IgaGFuZGxpbmdgKTtcbiAgICB9XG4gICAgbGV0IHN0ciA9IFwiWyBcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSAhPT0gYXJnLmxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoaSAhPT0gMCkgc3RyICs9IFwiLCBcIjtcbiAgICAgIHN0ciArPSB0aGlzLl9oYW5kbGVWZXJiKGFyZ1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBzdHIgKyBcIiBdXCI7XG4gIH1cblxuICAvKiogSGFuZGxlIHZlcmIgKi9cbiAgaGFuZGxlVmVyYigpIHtcbiAgICBjb25zdCB2ZXJiID0gdGhpcy5mb3JtYXRbdGhpcy5pXTtcbiAgICB0aGlzLnZlcmIgPSB2ZXJiO1xuICAgIGlmICh0aGlzLnRtcEVycm9yKSB7XG4gICAgICB0aGlzLmJ1ZiArPSB0aGlzLnRtcEVycm9yO1xuICAgICAgdGhpcy50bXBFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLmFyZ051bSA8IHRoaXMuaGF2ZVNlZW4ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuaGF2ZVNlZW5bdGhpcy5hcmdOdW1dID0gdHJ1ZTsgLy8ga2VlcCB0cmFjayBvZiB1c2VkIGFyZ3NcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYXJncy5sZW5ndGggPD0gdGhpcy5hcmdOdW0pIHtcbiAgICAgIHRoaXMuYnVmICs9IGAlIShNSVNTSU5HICcke3ZlcmJ9JylgO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhcmcgPSB0aGlzLmFyZ3NbdGhpcy5hcmdOdW1dOyAvLyBjaGVjayBvdXQgb2YgcmFuZ2VcbiAgICAgIHRoaXMuaGF2ZVNlZW5bdGhpcy5hcmdOdW1dID0gdHJ1ZTsgLy8ga2VlcCB0cmFjayBvZiB1c2VkIGFyZ3NcbiAgICAgIGlmICh0aGlzLmZsYWdzLmxlc3N0aGFuKSB7XG4gICAgICAgIHRoaXMuYnVmICs9IHRoaXMuaGFuZGxlTGVzc1RoYW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYnVmICs9IHRoaXMuX2hhbmRsZVZlcmIoYXJnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hcmdOdW0rKzsgLy8gaWYgdGhlcmUgaXMgYSBmdXJ0aGVyIHBvc2l0aW9uYWwsIGl0IHdpbGwgcmVzZXQuXG4gICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlBBU1NUSFJPVUdIO1xuICB9XG5cbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgX2hhbmRsZVZlcmIoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy52ZXJiKSB7XG4gICAgICBjYXNlIFwidFwiOlxuICAgICAgICByZXR1cm4gdGhpcy5wYWQoYXJnLnRvU3RyaW5nKCkpO1xuICAgICAgY2FzZSBcImJcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10TnVtYmVyKGFyZyBhcyBudW1iZXIsIDIpO1xuICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10TnVtYmVyQ29kZVBvaW50KGFyZyBhcyBudW1iZXIpO1xuICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10TnVtYmVyKGFyZyBhcyBudW1iZXIsIDEwKTtcbiAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgIHJldHVybiB0aGlzLmZtdE51bWJlcihhcmcgYXMgbnVtYmVyLCA4KTtcbiAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgIHJldHVybiB0aGlzLmZtdEhleChhcmcpO1xuICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10SGV4KGFyZywgdHJ1ZSk7XG4gICAgICBjYXNlIFwiZVwiOlxuICAgICAgICByZXR1cm4gdGhpcy5mbXRGbG9hdEUoYXJnIGFzIG51bWJlcik7XG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgICByZXR1cm4gdGhpcy5mbXRGbG9hdEUoYXJnIGFzIG51bWJlciwgdHJ1ZSk7XG4gICAgICBjYXNlIFwiZlwiOlxuICAgICAgY2FzZSBcIkZcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10RmxvYXRGKGFyZyBhcyBudW1iZXIpO1xuICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10RmxvYXRHKGFyZyBhcyBudW1iZXIpO1xuICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10RmxvYXRHKGFyZyBhcyBudW1iZXIsIHRydWUpO1xuICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10U3RyaW5nKGFyZyBhcyBzdHJpbmcpO1xuICAgICAgY2FzZSBcIlRcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10U3RyaW5nKHR5cGVvZiBhcmcpO1xuICAgICAgY2FzZSBcInZcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10VihhcmcpO1xuICAgICAgY2FzZSBcImpcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10SihhcmcpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGAlIShCQUQgVkVSQiAnJHt0aGlzLnZlcmJ9JylgO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYWQgYSBzdHJpbmdcbiAgICogQHBhcmFtIHMgdGV4dCB0byBwYWRcbiAgICovXG4gIHBhZChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhZGRpbmcgPSB0aGlzLmZsYWdzLnplcm8gPyBcIjBcIiA6IFwiIFwiO1xuXG4gICAgaWYgKHRoaXMuZmxhZ3MuZGFzaCkge1xuICAgICAgcmV0dXJuIHMucGFkRW5kKHRoaXMuZmxhZ3Mud2lkdGgsIHBhZGRpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBzLnBhZFN0YXJ0KHRoaXMuZmxhZ3Mud2lkdGgsIHBhZGRpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhZCBhIG51bWJlclxuICAgKiBAcGFyYW0gblN0clxuICAgKiBAcGFyYW0gbmVnXG4gICAqL1xuICBwYWROdW0oblN0cjogc3RyaW5nLCBuZWc6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGxldCBzaWduOiBzdHJpbmc7XG4gICAgaWYgKG5lZykge1xuICAgICAgc2lnbiA9IFwiLVwiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mbGFncy5wbHVzIHx8IHRoaXMuZmxhZ3Muc3BhY2UpIHtcbiAgICAgIHNpZ24gPSB0aGlzLmZsYWdzLnBsdXMgPyBcIitcIiA6IFwiIFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaWduID0gXCJcIjtcbiAgICB9XG4gICAgY29uc3QgemVybyA9IHRoaXMuZmxhZ3MuemVybztcbiAgICBpZiAoIXplcm8pIHtcbiAgICAgIC8vIHNpZ24gY29tZXMgaW4gZnJvbnQgb2YgcGFkZGluZyB3aGVuIHBhZGRpbmcgdy8gemVybyxcbiAgICAgIC8vIGluIGZyb20gb2YgdmFsdWUgaWYgcGFkZGluZyB3aXRoIHNwYWNlcy5cbiAgICAgIG5TdHIgPSBzaWduICsgblN0cjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWQgPSB6ZXJvID8gXCIwXCIgOiBcIiBcIjtcbiAgICBjb25zdCBsZW4gPSB6ZXJvID8gdGhpcy5mbGFncy53aWR0aCAtIHNpZ24ubGVuZ3RoIDogdGhpcy5mbGFncy53aWR0aDtcblxuICAgIGlmICh0aGlzLmZsYWdzLmRhc2gpIHtcbiAgICAgIG5TdHIgPSBuU3RyLnBhZEVuZChsZW4sIHBhZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5TdHIgPSBuU3RyLnBhZFN0YXJ0KGxlbiwgcGFkKTtcbiAgICB9XG5cbiAgICBpZiAoemVybykge1xuICAgICAgLy8gc2VlIGFib3ZlXG4gICAgICBuU3RyID0gc2lnbiArIG5TdHI7XG4gICAgfVxuICAgIHJldHVybiBuU3RyO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBhIG51bWJlclxuICAgKiBAcGFyYW0gblxuICAgKiBAcGFyYW0gcmFkaXhcbiAgICogQHBhcmFtIHVwY2FzZVxuICAgKi9cbiAgZm10TnVtYmVyKG46IG51bWJlciwgcmFkaXg6IG51bWJlciwgdXBjYXNlID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGxldCBudW0gPSBNYXRoLmFicyhuKS50b1N0cmluZyhyYWRpeCk7XG4gICAgY29uc3QgcHJlYyA9IHRoaXMuZmxhZ3MucHJlY2lzaW9uO1xuICAgIGlmIChwcmVjICE9PSAtMSkge1xuICAgICAgdGhpcy5mbGFncy56ZXJvID0gZmFsc2U7XG4gICAgICBudW0gPSBuID09PSAwICYmIHByZWMgPT09IDAgPyBcIlwiIDogbnVtO1xuICAgICAgd2hpbGUgKG51bS5sZW5ndGggPCBwcmVjKSB7XG4gICAgICAgIG51bSA9IFwiMFwiICsgbnVtO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgcHJlZml4ID0gXCJcIjtcbiAgICBpZiAodGhpcy5mbGFncy5zaGFycCkge1xuICAgICAgc3dpdGNoIChyYWRpeCkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcHJlZml4ICs9IFwiMGJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIC8vIGRvbid0IGFubm90YXRlIG9jdGFsIDAgd2l0aCAwLi4uXG4gICAgICAgICAgcHJlZml4ICs9IG51bS5zdGFydHNXaXRoKFwiMFwiKSA/IFwiXCIgOiBcIjBcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBwcmVmaXggKz0gXCIweFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbm5vdCBoYW5kbGUgYmFzZTogXCIgKyByYWRpeCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGRvbid0IGFkZCBwcmVmaXggaW4gZnJvbnQgb2YgdmFsdWUgdHJ1bmNhdGVkIGJ5IHByZWNpc2lvbj0wLCB2YWw9MFxuICAgIG51bSA9IG51bS5sZW5ndGggPT09IDAgPyBudW0gOiBwcmVmaXggKyBudW07XG4gICAgaWYgKHVwY2FzZSkge1xuICAgICAgbnVtID0gbnVtLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBhZE51bShudW0sIG4gPCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgbnVtYmVyIHdpdGggY29kZSBwb2ludHNcbiAgICogQHBhcmFtIG5cbiAgICovXG4gIGZtdE51bWJlckNvZGVQb2ludChuOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGxldCBzID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgcyA9IFN0cmluZy5mcm9tQ29kZVBvaW50KG4pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcyA9IFVOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYWQocyk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHNwZWNpYWwgZmxvYXRcbiAgICogQHBhcmFtIG5cbiAgICovXG4gIGZtdEZsb2F0U3BlY2lhbChuOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIC8vIGZvcm1hdHRpbmcgb2YgTmFOIGFuZCBJbmYgYXJlIHBhbnRzLW9uLWhlYWRcbiAgICAvLyBzdHVwaWQgYW5kIG1vcmUgb3IgbGVzcyBhcmJpdHJhcnkuXG5cbiAgICBpZiAoaXNOYU4obikpIHtcbiAgICAgIHRoaXMuZmxhZ3MuemVybyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMucGFkTnVtKFwiTmFOXCIsIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKG4gPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgdGhpcy5mbGFncy56ZXJvID0gZmFsc2U7XG4gICAgICB0aGlzLmZsYWdzLnBsdXMgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMucGFkTnVtKFwiSW5mXCIsIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKG4gPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkge1xuICAgICAgdGhpcy5mbGFncy56ZXJvID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5wYWROdW0oXCJJbmZcIiwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdW5kIGZyYWN0aW9uIHRvIHByZWNpc2lvblxuICAgKiBAcGFyYW0gZnJhY3Rpb25hbFxuICAgKiBAcGFyYW0gcHJlY2lzaW9uXG4gICAqIEByZXR1cm5zIHR1cGxlIG9mIGZyYWN0aW9uYWwgYW5kIHJvdW5kXG4gICAqL1xuICByb3VuZEZyYWN0aW9uVG9QcmVjaXNpb24oXG4gICAgZnJhY3Rpb25hbDogc3RyaW5nLFxuICAgIHByZWNpc2lvbjogbnVtYmVyLFxuICApOiBbc3RyaW5nLCBib29sZWFuXSB7XG4gICAgbGV0IHJvdW5kID0gZmFsc2U7XG4gICAgaWYgKGZyYWN0aW9uYWwubGVuZ3RoID4gcHJlY2lzaW9uKSB7XG4gICAgICBmcmFjdGlvbmFsID0gXCIxXCIgKyBmcmFjdGlvbmFsOyAvLyBwcmVwZW5kIGEgMSBpbiBjYXNlIG9mIGxlYWRpbmcgMFxuICAgICAgbGV0IHRtcCA9IHBhcnNlSW50KGZyYWN0aW9uYWwuc3Vic3RyKDAsIHByZWNpc2lvbiArIDIpKSAvIDEwO1xuICAgICAgdG1wID0gTWF0aC5yb3VuZCh0bXApO1xuICAgICAgZnJhY3Rpb25hbCA9IE1hdGguZmxvb3IodG1wKS50b1N0cmluZygpO1xuICAgICAgcm91bmQgPSBmcmFjdGlvbmFsWzBdID09PSBcIjJcIjtcbiAgICAgIGZyYWN0aW9uYWwgPSBmcmFjdGlvbmFsLnN1YnN0cigxKTsgLy8gcmVtb3ZlIGV4dHJhIDFcbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGZyYWN0aW9uYWwubGVuZ3RoIDwgcHJlY2lzaW9uKSB7XG4gICAgICAgIGZyYWN0aW9uYWwgKz0gXCIwXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbZnJhY3Rpb25hbCwgcm91bmRdO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBmbG9hdCBFXG4gICAqIEBwYXJhbSBuXG4gICAqIEBwYXJhbSB1cGNhc2VcbiAgICovXG4gIGZtdEZsb2F0RShuOiBudW1iZXIsIHVwY2FzZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcGVjaWFsID0gdGhpcy5mbXRGbG9hdFNwZWNpYWwobik7XG4gICAgaWYgKHNwZWNpYWwgIT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBzcGVjaWFsO1xuICAgIH1cblxuICAgIGNvbnN0IG0gPSBuLnRvRXhwb25lbnRpYWwoKS5tYXRjaChGTE9BVF9SRUdFWFApO1xuICAgIGlmICghbSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJjYW4ndCBoYXBwZW4sIGJ1Z1wiKTtcbiAgICB9XG4gICAgbGV0IGZyYWN0aW9uYWwgPSBtW0YuZnJhY3Rpb25hbF07XG4gICAgY29uc3QgcHJlY2lzaW9uID0gdGhpcy5mbGFncy5wcmVjaXNpb24gIT09IC0xXG4gICAgICA/IHRoaXMuZmxhZ3MucHJlY2lzaW9uXG4gICAgICA6IERFRkFVTFRfUFJFQ0lTSU9OO1xuICAgIGxldCByb3VuZGluZyA9IGZhbHNlO1xuICAgIFtmcmFjdGlvbmFsLCByb3VuZGluZ10gPSB0aGlzLnJvdW5kRnJhY3Rpb25Ub1ByZWNpc2lvbihcbiAgICAgIGZyYWN0aW9uYWwsXG4gICAgICBwcmVjaXNpb24sXG4gICAgKTtcblxuICAgIGxldCBlID0gbVtGLmV4cG9uZW50XTtcbiAgICBsZXQgZXNpZ24gPSBtW0YuZXNpZ25dO1xuICAgIC8vIHNjaWVudGlmaWMgbm90YXRpb24gb3V0cHV0IHdpdGggZXhwb25lbnQgcGFkZGVkIHRvIG1pbmxlbiAyXG4gICAgbGV0IG1hbnRpc3NhID0gcGFyc2VJbnQobVtGLm1hbnRpc3NhXSk7XG4gICAgaWYgKHJvdW5kaW5nKSB7XG4gICAgICBtYW50aXNzYSArPSAxO1xuICAgICAgaWYgKDEwIDw9IG1hbnRpc3NhKSB7XG4gICAgICAgIG1hbnRpc3NhID0gMTtcbiAgICAgICAgY29uc3QgciA9IHBhcnNlSW50KGVzaWduICsgZSkgKyAxO1xuICAgICAgICBlID0gci50b1N0cmluZygpO1xuICAgICAgICBlc2lnbiA9IHIgPCAwID8gXCItXCIgOiBcIitcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZSA9IGUubGVuZ3RoID09IDEgPyBcIjBcIiArIGUgOiBlO1xuICAgIGNvbnN0IHZhbCA9IGAke21hbnRpc3NhfS4ke2ZyYWN0aW9uYWx9JHt1cGNhc2UgPyBcIkVcIiA6IFwiZVwifSR7ZXNpZ259JHtlfWA7XG4gICAgcmV0dXJuIHRoaXMucGFkTnVtKHZhbCwgbiA8IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBmbG9hdCBGXG4gICAqIEBwYXJhbSBuXG4gICAqL1xuICBmbXRGbG9hdEYobjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcGVjaWFsID0gdGhpcy5mbXRGbG9hdFNwZWNpYWwobik7XG4gICAgaWYgKHNwZWNpYWwgIT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBzcGVjaWFsO1xuICAgIH1cblxuICAgIC8vIHN0dXBpZCBoZWxwZXIgdGhhdCB0dXJucyBhIG51bWJlciBpbnRvIGEgKHBvdGVudGlhbGx5KVxuICAgIC8vIFZFUlkgbG9uZyBzdHJpbmcuXG4gICAgZnVuY3Rpb24gZXhwYW5kTnVtYmVyKG46IG51bWJlcik6IHN0cmluZyB7XG4gICAgICBpZiAoTnVtYmVyLmlzU2FmZUludGVnZXIobikpIHtcbiAgICAgICAgcmV0dXJuIG4udG9TdHJpbmcoKSArIFwiLlwiO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ID0gbi50b0V4cG9uZW50aWFsKCkuc3BsaXQoXCJlXCIpO1xuICAgICAgbGV0IG0gPSB0WzBdLnJlcGxhY2UoXCIuXCIsIFwiXCIpO1xuICAgICAgY29uc3QgZSA9IHBhcnNlSW50KHRbMV0pO1xuICAgICAgaWYgKGUgPCAwKSB7XG4gICAgICAgIGxldCBuU3RyID0gXCIwLlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSAhPT0gTWF0aC5hYnMoZSkgLSAxOyArK2kpIHtcbiAgICAgICAgICBuU3RyICs9IFwiMFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoblN0ciArPSBtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNwbElkeCA9IGUgKyAxO1xuICAgICAgICB3aGlsZSAobS5sZW5ndGggPCBzcGxJZHgpIHtcbiAgICAgICAgICBtICs9IFwiMFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLnN1YnN0cigwLCBzcGxJZHgpICsgXCIuXCIgKyBtLnN1YnN0cihzcGxJZHgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhdm9pZGluZyBzaWduIG1ha2VzIHBhZGRpbmcgZWFzaWVyXG4gICAgY29uc3QgdmFsID0gZXhwYW5kTnVtYmVyKE1hdGguYWJzKG4pKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgYXJyID0gdmFsLnNwbGl0KFwiLlwiKTtcbiAgICBsZXQgZGlnID0gYXJyWzBdO1xuICAgIGxldCBmcmFjdGlvbmFsID0gYXJyWzFdO1xuXG4gICAgY29uc3QgcHJlY2lzaW9uID0gdGhpcy5mbGFncy5wcmVjaXNpb24gIT09IC0xXG4gICAgICA/IHRoaXMuZmxhZ3MucHJlY2lzaW9uXG4gICAgICA6IERFRkFVTFRfUFJFQ0lTSU9OO1xuICAgIGxldCByb3VuZCA9IGZhbHNlO1xuICAgIFtmcmFjdGlvbmFsLCByb3VuZF0gPSB0aGlzLnJvdW5kRnJhY3Rpb25Ub1ByZWNpc2lvbihmcmFjdGlvbmFsLCBwcmVjaXNpb24pO1xuICAgIGlmIChyb3VuZCkge1xuICAgICAgZGlnID0gKHBhcnNlSW50KGRpZykgKyAxKS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYWROdW0oYCR7ZGlnfS4ke2ZyYWN0aW9uYWx9YCwgbiA8IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBmbG9hdCBHXG4gICAqIEBwYXJhbSBuXG4gICAqIEBwYXJhbSB1cGNhc2VcbiAgICovXG4gIGZtdEZsb2F0RyhuOiBudW1iZXIsIHVwY2FzZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcGVjaWFsID0gdGhpcy5mbXRGbG9hdFNwZWNpYWwobik7XG4gICAgaWYgKHNwZWNpYWwgIT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBzcGVjaWFsO1xuICAgIH1cblxuICAgIC8vIFRoZSBkb3VibGUgYXJndW1lbnQgcmVwcmVzZW50aW5nIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHNoYWxsIGJlXG4gICAgLy8gY29udmVydGVkIGluIHRoZSBzdHlsZSBmIG9yIGUgKG9yIGluIHRoZSBzdHlsZSBGIG9yIEUgaW5cbiAgICAvLyB0aGUgY2FzZSBvZiBhIEcgY29udmVyc2lvbiBzcGVjaWZpZXIpLCBkZXBlbmRpbmcgb24gdGhlXG4gICAgLy8gdmFsdWUgY29udmVydGVkIGFuZCB0aGUgcHJlY2lzaW9uLiBMZXQgUCBlcXVhbCB0aGVcbiAgICAvLyBwcmVjaXNpb24gaWYgbm9uLXplcm8sIDYgaWYgdGhlIHByZWNpc2lvbiBpcyBvbWl0dGVkLCBvciAxXG4gICAgLy8gaWYgdGhlIHByZWNpc2lvbiBpcyB6ZXJvLiBUaGVuLCBpZiBhIGNvbnZlcnNpb24gd2l0aCBzdHlsZSBFIHdvdWxkXG4gICAgLy8gaGF2ZSBhbiBleHBvbmVudCBvZiBYOlxuXG4gICAgLy8gICAgIC0gSWYgUCA+IFg+PS00LCB0aGUgY29udmVyc2lvbiBzaGFsbCBiZSB3aXRoIHN0eWxlIGYgKG9yIEYgKVxuICAgIC8vICAgICBhbmQgcHJlY2lzaW9uIFAgLSggWCsxKS5cblxuICAgIC8vICAgICAtIE90aGVyd2lzZSwgdGhlIGNvbnZlcnNpb24gc2hhbGwgYmUgd2l0aCBzdHlsZSBlIChvciBFIClcbiAgICAvLyAgICAgYW5kIHByZWNpc2lvbiBQIC0xLlxuXG4gICAgLy8gRmluYWxseSwgdW5sZXNzIHRoZSAnIycgZmxhZyBpcyB1c2VkLCBhbnkgdHJhaWxpbmcgemVyb3Mgc2hhbGwgYmVcbiAgICAvLyByZW1vdmVkIGZyb20gdGhlIGZyYWN0aW9uYWwgcG9ydGlvbiBvZiB0aGUgcmVzdWx0IGFuZCB0aGVcbiAgICAvLyBkZWNpbWFsLXBvaW50IGNoYXJhY3RlciBzaGFsbCBiZSByZW1vdmVkIGlmIHRoZXJlIGlzIG5vXG4gICAgLy8gZnJhY3Rpb25hbCBwb3J0aW9uIHJlbWFpbmluZy5cblxuICAgIC8vIEEgZG91YmxlIGFyZ3VtZW50IHJlcHJlc2VudGluZyBhbiBpbmZpbml0eSBvciBOYU4gc2hhbGwgYmVcbiAgICAvLyBjb252ZXJ0ZWQgaW4gdGhlIHN0eWxlIG9mIGFuIGYgb3IgRiBjb252ZXJzaW9uIHNwZWNpZmllci5cbiAgICAvLyBodHRwczovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2ZwcmludGYuaHRtbFxuXG4gICAgbGV0IFAgPSB0aGlzLmZsYWdzLnByZWNpc2lvbiAhPT0gLTFcbiAgICAgID8gdGhpcy5mbGFncy5wcmVjaXNpb25cbiAgICAgIDogREVGQVVMVF9QUkVDSVNJT047XG4gICAgUCA9IFAgPT09IDAgPyAxIDogUDtcblxuICAgIGNvbnN0IG0gPSBuLnRvRXhwb25lbnRpYWwoKS5tYXRjaChGTE9BVF9SRUdFWFApO1xuICAgIGlmICghbSkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJjYW4ndCBoYXBwZW5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgWCA9IHBhcnNlSW50KG1bRi5leHBvbmVudF0pICogKG1bRi5lc2lnbl0gPT09IFwiLVwiID8gLTEgOiAxKTtcbiAgICBsZXQgblN0ciA9IFwiXCI7XG4gICAgaWYgKFAgPiBYICYmIFggPj0gLTQpIHtcbiAgICAgIHRoaXMuZmxhZ3MucHJlY2lzaW9uID0gUCAtIChYICsgMSk7XG4gICAgICBuU3RyID0gdGhpcy5mbXRGbG9hdEYobik7XG4gICAgICBpZiAoIXRoaXMuZmxhZ3Muc2hhcnApIHtcbiAgICAgICAgblN0ciA9IG5TdHIucmVwbGFjZSgvXFwuPzAqJC8sIFwiXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZsYWdzLnByZWNpc2lvbiA9IFAgLSAxO1xuICAgICAgblN0ciA9IHRoaXMuZm10RmxvYXRFKG4pO1xuICAgICAgaWYgKCF0aGlzLmZsYWdzLnNoYXJwKSB7XG4gICAgICAgIG5TdHIgPSBuU3RyLnJlcGxhY2UoL1xcLj8wKmUvLCB1cGNhc2UgPyBcIkVcIiA6IFwiZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5TdHI7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0gc1xuICAgKi9cbiAgZm10U3RyaW5nKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmxhZ3MucHJlY2lzaW9uICE9PSAtMSkge1xuICAgICAgcyA9IHMuc3Vic3RyKDAsIHRoaXMuZmxhZ3MucHJlY2lzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFkKHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBoZXhcbiAgICogQHBhcmFtIHZhbFxuICAgKiBAcGFyYW0gdXBwZXJcbiAgICovXG4gIGZtdEhleCh2YWw6IHN0cmluZyB8IG51bWJlciwgdXBwZXIgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgLy8gYWxsb3cgb3RoZXJzIHR5cGVzID9cbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm10TnVtYmVyKHZhbCBhcyBudW1iZXIsIDE2LCB1cHBlcik7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6IHtcbiAgICAgICAgY29uc3Qgc2hhcnAgPSB0aGlzLmZsYWdzLnNoYXJwICYmIHZhbC5sZW5ndGggIT09IDA7XG4gICAgICAgIGxldCBoZXggPSBzaGFycCA/IFwiMHhcIiA6IFwiXCI7XG4gICAgICAgIGNvbnN0IHByZWMgPSB0aGlzLmZsYWdzLnByZWNpc2lvbjtcbiAgICAgICAgY29uc3QgZW5kID0gcHJlYyAhPT0gLTEgPyBtaW4ocHJlYywgdmFsLmxlbmd0aCkgOiB2YWwubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSAhPT0gZW5kOyArK2kpIHtcbiAgICAgICAgICBpZiAoaSAhPT0gMCAmJiB0aGlzLmZsYWdzLnNwYWNlKSB7XG4gICAgICAgICAgICBoZXggKz0gc2hhcnAgPyBcIiAweFwiIDogXCIgXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRPRE8oYmFydGxvbWllanUpOiBmb3Igbm93IG9ubHkgdGFraW5nIGludG8gYWNjb3VudCB0aGVcbiAgICAgICAgICAvLyBsb3dlciBoYWxmIG9mIHRoZSBjb2RlUG9pbnQsIGllLiBhcyBpZiBhIHN0cmluZ1xuICAgICAgICAgIC8vIGlzIGEgbGlzdCBvZiA4Yml0IHZhbHVlcyBpbnN0ZWFkIG9mIFVDUzIgcnVuZXNcbiAgICAgICAgICBjb25zdCBjID0gKHZhbC5jaGFyQ29kZUF0KGkpICYgMHhmZikudG9TdHJpbmcoMTYpO1xuICAgICAgICAgIGhleCArPSBjLmxlbmd0aCA9PT0gMSA/IGAwJHtjfWAgOiBjO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cHBlcikge1xuICAgICAgICAgIGhleCA9IGhleC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhZChoZXgpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiY3VycmVudGx5IG9ubHkgbnVtYmVyIGFuZCBzdHJpbmcgYXJlIGltcGxlbWVudGVkIGZvciBoZXhcIixcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHZhbHVlXG4gICAqIEBwYXJhbSB2YWxcbiAgICovXG4gIGZtdFYodmFsOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmxhZ3Muc2hhcnApIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmZsYWdzLnByZWNpc2lvbiAhPT0gLTFcbiAgICAgICAgPyB7IGRlcHRoOiB0aGlzLmZsYWdzLnByZWNpc2lvbiB9XG4gICAgICAgIDoge307XG4gICAgICByZXR1cm4gdGhpcy5wYWQoRGVuby5pbnNwZWN0KHZhbCwgb3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwID0gdGhpcy5mbGFncy5wcmVjaXNpb247XG4gICAgICByZXR1cm4gcCA9PT0gLTEgPyB2YWwudG9TdHJpbmcoKSA6IHZhbC50b1N0cmluZygpLnN1YnN0cigwLCBwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IEpTT05cbiAgICogQHBhcmFtIHZhbFxuICAgKi9cbiAgZm10Sih2YWw6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWwpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYW5kIGZvcm1hdCBhIHZhcmlhYmxlIG51bWJlciBvZiBgYXJnc2AgYXMgaXMgc3BlY2lmaWVkIGJ5IGBmb3JtYXRgLlxuICogYHNwcmludGZgIHJldHVybnMgdGhlIGZvcm1hdHRlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGZvcm1hdFxuICogQHBhcmFtIGFyZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwcmludGYoZm9ybWF0OiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHN0cmluZyB7XG4gIGNvbnN0IHByaW50ZiA9IG5ldyBQcmludGYoZm9ybWF0LCAuLi5hcmdzKTtcbiAgcmV0dXJuIHByaW50Zi5kb1ByaW50ZigpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuZCBmb3JtYXQgYSB2YXJpYWJsZSBudW1iZXIgb2YgYGFyZ3NgIGFzIGlzIHNwZWNpZmllZCBieSBgZm9ybWF0YC5cbiAqIGBwcmludGZgIHdyaXRlcyB0aGUgZm9ybWF0dGVkIHN0cmluZyB0byBzdGFuZGFyZCBvdXRwdXQuXG4gKiBAcGFyYW0gZm9ybWF0XG4gKiBAcGFyYW0gYXJnc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRmKGZvcm1hdDogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgY29uc3QgcyA9IHNwcmludGYoZm9ybWF0LCAuLi5hcmdzKTtcbiAgRGVuby5zdGRvdXQud3JpdGVTeW5jKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzKSk7XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQgYW5kIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbmltcG9ydCB7IHNwcmludGYgfSBmcm9tIFwiLi4vLi4vLi4vZm10L3ByaW50Zi50c1wiO1xuaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gXCIuL2luc3BlY3QubWpzXCI7XG5cbi8vIGBkZWJ1Z0ltcGxzYCBhbmQgYHRlc3RFbmFibGVkYCBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBpbml0aWFsaXplZCBzbyBhbnkgY2FsbFxuLy8gdG8gYGRlYnVnbG9nKClgIGJlZm9yZSBgaW5pdGlhbGl6ZURlYnVnRW52KClgIGlzIGNhbGxlZCB3aWxsIHRocm93LlxubGV0IGRlYnVnSW1wbHM6IFJlY29yZDxzdHJpbmcsICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQ+O1xubGV0IHRlc3RFbmFibGVkOiAoc3RyOiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbi8vIGBkZWJ1Z0VudmAgaXMgaW5pdGlhbCB2YWx1ZSBvZiBwcm9jZXNzLmVudi5OT0RFX0RFQlVHXG5mdW5jdGlvbiBpbml0aWFsaXplRGVidWdFbnYoZGVidWdFbnY6IHN0cmluZykge1xuICBkZWJ1Z0ltcGxzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGRlYnVnRW52KSB7XG4gICAgLy8gVGhpcyBpcyBydW4gYmVmb3JlIGFueSB1c2VyIGNvZGUsIGl0J3MgT0sgbm90IHRvIHVzZSBwcmltb3JkaWFscy5cbiAgICBkZWJ1Z0VudiA9IGRlYnVnRW52LnJlcGxhY2UoL1t8XFxcXHt9KClbXFxdXiQrPy5dL2csIFwiXFxcXCQmXCIpXG4gICAgICAucmVwbGFjZUFsbChcIipcIiwgXCIuKlwiKVxuICAgICAgLnJlcGxhY2VBbGwoXCIsXCIsIFwiJHxeXCIpO1xuICAgIGNvbnN0IGRlYnVnRW52UmVnZXggPSBuZXcgUmVnRXhwKGBeJHtkZWJ1Z0Vudn0kYCwgXCJpXCIpO1xuICAgIHRlc3RFbmFibGVkID0gKHN0cikgPT4gZGVidWdFbnZSZWdleC5leGVjKHN0cikgIT09IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgdGVzdEVuYWJsZWQgPSAoKSA9PiBmYWxzZTtcbiAgfVxufVxuXG4vLyBFbWl0cyB3YXJuaW5nIHdoZW4gdXNlciBzZXRzXG4vLyBOT0RFX0RFQlVHPWh0dHAgb3IgTk9ERV9ERUJVRz1odHRwMi5cbmZ1bmN0aW9uIGVtaXRXYXJuaW5nSWZOZWVkZWQoc2V0OiBzdHJpbmcpIHtcbiAgaWYgKFwiSFRUUFwiID09PSBzZXQgfHwgXCJIVFRQMlwiID09PSBzZXQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlNldHRpbmcgdGhlIE5PREVfREVCVUcgZW52aXJvbm1lbnQgdmFyaWFibGUgXCIgK1xuICAgICAgICBcInRvICdcIiArIHNldC50b0xvd2VyQ2FzZSgpICsgXCInIGNhbiBleHBvc2Ugc2Vuc2l0aXZlIFwiICtcbiAgICAgICAgXCJkYXRhIChzdWNoIGFzIHBhc3N3b3JkcywgdG9rZW5zIGFuZCBhdXRoZW50aWNhdGlvbiBoZWFkZXJzKSBcIiArXG4gICAgICAgIFwiaW4gdGhlIHJlc3VsdGluZyBsb2cuXCIsXG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmZ1bmN0aW9uIGRlYnVnbG9nSW1wbChcbiAgZW5hYmxlZDogYm9vbGVhbixcbiAgc2V0OiBzdHJpbmcsXG4pOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkIHtcbiAgaWYgKGRlYnVnSW1wbHNbc2V0XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIGVtaXRXYXJuaW5nSWZOZWVkZWQoc2V0KTtcbiAgICAgIGRlYnVnSW1wbHNbc2V0XSA9IGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgICBjb25zdCBtc2cgPSBhcmdzLm1hcCgoYXJnKSA9PiBpbnNwZWN0KGFyZykpLmpvaW4oXCIgXCIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKHNwcmludGYoXCIlcyAlczogJXNcIiwgc2V0LCBTdHJpbmcoRGVuby5waWQpLCBtc2cpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnSW1wbHNbc2V0XSA9IG5vb3A7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlYnVnSW1wbHNbc2V0XTtcbn1cblxuLy8gZGVidWdsb2dJbXBsIGRlcGVuZHMgb24gcHJvY2Vzcy5waWQgYW5kIHByb2Nlc3MuZW52Lk5PREVfREVCVUcsXG4vLyBzbyBpdCBuZWVkcyB0byBiZSBjYWxsZWQgbGF6aWx5IGluIHRvcCBzY29wZXMgb2YgaW50ZXJuYWwgbW9kdWxlc1xuLy8gdGhhdCBtYXkgYmUgbG9hZGVkIGJlZm9yZSB0aGVzZSBydW4gdGltZSBzdGF0ZXMgYXJlIGFsbG93ZWQgdG9cbi8vIGJlIGFjY2Vzc2VkLlxuZXhwb3J0IGZ1bmN0aW9uIGRlYnVnbG9nKFxuICBzZXQ6IHN0cmluZyxcbiAgY2I6IChkZWJ1ZzogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCkgPT4gdm9pZCxcbikge1xuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHNldCA9IHNldC50b1VwcGVyQ2FzZSgpO1xuICAgIGVuYWJsZWQgPSB0ZXN0RW5hYmxlZChzZXQpO1xuICB9XG5cbiAgbGV0IGRlYnVnID0gKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQgPT4ge1xuICAgIGluaXQoKTtcbiAgICAvLyBPbmx5IGludm9rZXMgZGVidWdsb2dJbXBsKCkgd2hlbiB0aGUgZGVidWcgZnVuY3Rpb24gaXNcbiAgICAvLyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgIGRlYnVnID0gZGVidWdsb2dJbXBsKGVuYWJsZWQsIHNldCk7XG5cbiAgICBpZiAodHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGNiKGRlYnVnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVidWcoLi4uYXJncyk7XG4gIH07XG5cbiAgbGV0IGVuYWJsZWQ6IGJvb2xlYW47XG4gIGxldCB0ZXN0ID0gKCkgPT4ge1xuICAgIGluaXQoKTtcbiAgICB0ZXN0ID0gKCkgPT4gZW5hYmxlZDtcbiAgICByZXR1cm4gZW5hYmxlZDtcbiAgfTtcblxuICBjb25zdCBsb2dnZXIgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiBkZWJ1ZyguLi5hcmdzKTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobG9nZ2VyLCBcImVuYWJsZWRcIiwge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0ZXN0KCk7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgfSk7XG5cbiAgcmV0dXJuIGxvZ2dlcjtcbn1cblxubGV0IGRlYnVnRW52O1xudHJ5IHtcbiAgZGVidWdFbnYgPSBEZW5vLmVudi5nZXQoXCJOT0RFX0RFQlVHXCIpID8/IFwiXCI7XG59IGNhdGNoIChlcnJvcikge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5QZXJtaXNzaW9uRGVuaWVkKSB7XG4gICAgZGVidWdFbnYgPSBcIlwiO1xuICB9IGVsc2Uge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5pbml0aWFsaXplRGVidWdFbnYoZGVidWdFbnYpO1xuXG5leHBvcnQgZGVmYXVsdCB7IGRlYnVnbG9nIH07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBUaGlzIG1vZHVsZSBwb3J0czpcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL3NyYy91di5jY1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvZGVwcy91dlxuLy9cbi8vIFNlZSBhbHNvOiBodHRwOi8vZG9jcy5saWJ1di5vcmcvZW4vdjEueC9lcnJvcnMuaHRtbCNlcnJvci1jb25zdGFudHNcblxuaW1wb3J0IHsgdW5yZWFjaGFibGUgfSBmcm9tIFwiLi4vLi4vdGVzdGluZy9hc3NlcnRzLnRzXCI7XG5pbXBvcnQgeyBvc1R5cGUgfSBmcm9tIFwiLi4vLi4vX3V0aWwvb3MudHNcIjtcbmltcG9ydCB7IHV2VHJhbnNsYXRlU3lzRXJyb3IgfSBmcm9tIFwiLi9fbGlidXZfd2luZXJyb3IudHNcIjtcbmltcG9ydCB7IG9zIH0gZnJvbSBcIi4vY29uc3RhbnRzLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBVVl9FRVhJU1QgPSBvcy5lcnJuby5FRVhJU1Q7XG5leHBvcnQgY29uc3QgVVZfRU5PRU5UID0gb3MuZXJybm8uRU5PRU5UO1xuXG4vLyBJbiBOb2RlIHRoZXNlIHZhbHVlcyBhcmUgY29taW5nIGZyb20gbGlidXY6XG4vLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9saWJ1di9saWJ1di9ibG9iL3YxLngvaW5jbHVkZS91di9lcnJuby5oXG4vLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzUyNDEyM2ZiZjA2NGZmNjRiYjZmY2Q4MzQ4NWNmYzI3ZGI5MzJmNjgvbGliL2ludGVybmFsL2Vycm9ycy5qcyNMMzgzXG4vLyBTaW5jZSB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBwb3J0IGNvZGUgZnJvbSBsaWJ1diBhbmQgdGhlc2UgbWFwcyBhcmVcbi8vIGNoYW5naW5nIHZlcnkgcmFyZWx5LCB3ZSBzaW1wbHkgZXh0cmFjdCB0aGVtIGZyb20gTm9kZSBhbmQgc3RvcmUgaGVyZS5cblxuLy8gTm90ZVxuLy8gUnVuIHRoZSBmb2xsb3dpbmcgdG8gZ2V0IHRoZSBtYXA6XG4vLyAkIG5vZGUgLWUgXCJjb25zb2xlLmxvZyhwcm9jZXNzLmJpbmRpbmcoJ3V2JykuZ2V0RXJyb3JNYXAoKSlcIlxuLy8gVGhpcyBzZXR1cCBhdXRvbWF0aWNhbGx5IGV4cG9ydHMgbWFwcyBmcm9tIGJvdGggXCJ3aW5cIiwgXCJsaW51eFwiICYgZGFyd2luOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NjaHdhcnprb3BmYi9ub2RlX2Vycm5vX21hcFxuXG50eXBlIEVycm9yTWFwRGF0YSA9IEFycmF5PFtudW1iZXIsIFtzdHJpbmcsIHN0cmluZ11dPjtcbnR5cGUgQ29kZU1hcERhdGEgPSBBcnJheTxbc3RyaW5nLCBudW1iZXJdPjtcblxuY29uc3QgY29kZVRvRXJyb3JXaW5kb3dzOiBFcnJvck1hcERhdGEgPSBbXG4gIFstNDA5MywgW1wiRTJCSUdcIiwgXCJhcmd1bWVudCBsaXN0IHRvbyBsb25nXCJdXSxcbiAgWy00MDkyLCBbXCJFQUNDRVNcIiwgXCJwZXJtaXNzaW9uIGRlbmllZFwiXV0sXG4gIFstNDA5MSwgW1wiRUFERFJJTlVTRVwiLCBcImFkZHJlc3MgYWxyZWFkeSBpbiB1c2VcIl1dLFxuICBbLTQwOTAsIFtcIkVBRERSTk9UQVZBSUxcIiwgXCJhZGRyZXNzIG5vdCBhdmFpbGFibGVcIl1dLFxuICBbLTQwODksIFtcIkVBRk5PU1VQUE9SVFwiLCBcImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFxuICBbLTQwODgsIFtcIkVBR0FJTlwiLCBcInJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlXCJdXSxcbiAgWy0zMDAwLCBbXCJFQUlfQUREUkZBTUlMWVwiLCBcImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFxuICBbLTMwMDEsIFtcIkVBSV9BR0FJTlwiLCBcInRlbXBvcmFyeSBmYWlsdXJlXCJdXSxcbiAgWy0zMDAyLCBbXCJFQUlfQkFERkxBR1NcIiwgXCJiYWQgYWlfZmxhZ3MgdmFsdWVcIl1dLFxuICBbLTMwMTMsIFtcIkVBSV9CQURISU5UU1wiLCBcImludmFsaWQgdmFsdWUgZm9yIGhpbnRzXCJdXSxcbiAgWy0zMDAzLCBbXCJFQUlfQ0FOQ0VMRURcIiwgXCJyZXF1ZXN0IGNhbmNlbGVkXCJdXSxcbiAgWy0zMDA0LCBbXCJFQUlfRkFJTFwiLCBcInBlcm1hbmVudCBmYWlsdXJlXCJdXSxcbiAgWy0zMDA1LCBbXCJFQUlfRkFNSUxZXCIsIFwiYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFxuICBbLTMwMDYsIFtcIkVBSV9NRU1PUllcIiwgXCJvdXQgb2YgbWVtb3J5XCJdXSxcbiAgWy0zMDA3LCBbXCJFQUlfTk9EQVRBXCIsIFwibm8gYWRkcmVzc1wiXV0sXG4gIFstMzAwOCwgW1wiRUFJX05PTkFNRVwiLCBcInVua25vd24gbm9kZSBvciBzZXJ2aWNlXCJdXSxcbiAgWy0zMDA5LCBbXCJFQUlfT1ZFUkZMT1dcIiwgXCJhcmd1bWVudCBidWZmZXIgb3ZlcmZsb3dcIl1dLFxuICBbLTMwMTQsIFtcIkVBSV9QUk9UT0NPTFwiLCBcInJlc29sdmVkIHByb3RvY29sIGlzIHVua25vd25cIl1dLFxuICBbLTMwMTAsIFtcIkVBSV9TRVJWSUNFXCIsIFwic2VydmljZSBub3QgYXZhaWxhYmxlIGZvciBzb2NrZXQgdHlwZVwiXV0sXG4gIFstMzAxMSwgW1wiRUFJX1NPQ0tUWVBFXCIsIFwic29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZFwiXV0sXG4gIFstNDA4NCwgW1wiRUFMUkVBRFlcIiwgXCJjb25uZWN0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIl1dLFxuICBbLTQwODMsIFtcIkVCQURGXCIsIFwiYmFkIGZpbGUgZGVzY3JpcHRvclwiXV0sXG4gIFstNDA4MiwgW1wiRUJVU1lcIiwgXCJyZXNvdXJjZSBidXN5IG9yIGxvY2tlZFwiXV0sXG4gIFstNDA4MSwgW1wiRUNBTkNFTEVEXCIsIFwib3BlcmF0aW9uIGNhbmNlbGVkXCJdXSxcbiAgWy00MDgwLCBbXCJFQ0hBUlNFVFwiLCBcImludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXJcIl1dLFxuICBbLTQwNzksIFtcIkVDT05OQUJPUlRFRFwiLCBcInNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0XCJdXSxcbiAgWy00MDc4LCBbXCJFQ09OTlJFRlVTRURcIiwgXCJjb25uZWN0aW9uIHJlZnVzZWRcIl1dLFxuICBbLTQwNzcsIFtcIkVDT05OUkVTRVRcIiwgXCJjb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXJcIl1dLFxuICBbLTQwNzYsIFtcIkVERVNUQUREUlJFUVwiLCBcImRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWRcIl1dLFxuICBbLTQwNzUsIFtcIkVFWElTVFwiLCBcImZpbGUgYWxyZWFkeSBleGlzdHNcIl1dLFxuICBbLTQwNzQsIFtcIkVGQVVMVFwiLCBcImJhZCBhZGRyZXNzIGluIHN5c3RlbSBjYWxsIGFyZ3VtZW50XCJdXSxcbiAgWy00MDM2LCBbXCJFRkJJR1wiLCBcImZpbGUgdG9vIGxhcmdlXCJdXSxcbiAgWy00MDczLCBbXCJFSE9TVFVOUkVBQ0hcIiwgXCJob3N0IGlzIHVucmVhY2hhYmxlXCJdXSxcbiAgWy00MDcyLCBbXCJFSU5UUlwiLCBcImludGVycnVwdGVkIHN5c3RlbSBjYWxsXCJdXSxcbiAgWy00MDcxLCBbXCJFSU5WQUxcIiwgXCJpbnZhbGlkIGFyZ3VtZW50XCJdXSxcbiAgWy00MDcwLCBbXCJFSU9cIiwgXCJpL28gZXJyb3JcIl1dLFxuICBbLTQwNjksIFtcIkVJU0NPTk5cIiwgXCJzb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWRcIl1dLFxuICBbLTQwNjgsIFtcIkVJU0RJUlwiLCBcImlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5XCJdXSxcbiAgWy00MDY3LCBbXCJFTE9PUFwiLCBcInRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkXCJdXSxcbiAgWy00MDY2LCBbXCJFTUZJTEVcIiwgXCJ0b28gbWFueSBvcGVuIGZpbGVzXCJdXSxcbiAgWy00MDY1LCBbXCJFTVNHU0laRVwiLCBcIm1lc3NhZ2UgdG9vIGxvbmdcIl1dLFxuICBbLTQwNjQsIFtcIkVOQU1FVE9PTE9OR1wiLCBcIm5hbWUgdG9vIGxvbmdcIl1dLFxuICBbLTQwNjMsIFtcIkVORVRET1dOXCIsIFwibmV0d29yayBpcyBkb3duXCJdXSxcbiAgWy00MDYyLCBbXCJFTkVUVU5SRUFDSFwiLCBcIm5ldHdvcmsgaXMgdW5yZWFjaGFibGVcIl1dLFxuICBbLTQwNjEsIFtcIkVORklMRVwiLCBcImZpbGUgdGFibGUgb3ZlcmZsb3dcIl1dLFxuICBbLTQwNjAsIFtcIkVOT0JVRlNcIiwgXCJubyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlXCJdXSxcbiAgWy00MDU5LCBbXCJFTk9ERVZcIiwgXCJubyBzdWNoIGRldmljZVwiXV0sXG4gIFstNDA1OCwgW1wiRU5PRU5UXCIsIFwibm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiXV0sXG4gIFstNDA1NywgW1wiRU5PTUVNXCIsIFwibm90IGVub3VnaCBtZW1vcnlcIl1dLFxuICBbLTQwNTYsIFtcIkVOT05FVFwiLCBcIm1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrXCJdXSxcbiAgWy00MDM1LCBbXCJFTk9QUk9UT09QVFwiLCBcInByb3RvY29sIG5vdCBhdmFpbGFibGVcIl1dLFxuICBbLTQwNTUsIFtcIkVOT1NQQ1wiLCBcIm5vIHNwYWNlIGxlZnQgb24gZGV2aWNlXCJdXSxcbiAgWy00MDU0LCBbXCJFTk9TWVNcIiwgXCJmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWRcIl1dLFxuICBbLTQwNTMsIFtcIkVOT1RDT05OXCIsIFwic29ja2V0IGlzIG5vdCBjb25uZWN0ZWRcIl1dLFxuICBbLTQwNTIsIFtcIkVOT1RESVJcIiwgXCJub3QgYSBkaXJlY3RvcnlcIl1dLFxuICBbLTQwNTEsIFtcIkVOT1RFTVBUWVwiLCBcImRpcmVjdG9yeSBub3QgZW1wdHlcIl1dLFxuICBbLTQwNTAsIFtcIkVOT1RTT0NLXCIsIFwic29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0XCJdXSxcbiAgWy00MDQ5LCBbXCJFTk9UU1VQXCIsIFwib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gc29ja2V0XCJdXSxcbiAgWy00MDQ4LCBbXCJFUEVSTVwiLCBcIm9wZXJhdGlvbiBub3QgcGVybWl0dGVkXCJdXSxcbiAgWy00MDQ3LCBbXCJFUElQRVwiLCBcImJyb2tlbiBwaXBlXCJdXSxcbiAgWy00MDQ2LCBbXCJFUFJPVE9cIiwgXCJwcm90b2NvbCBlcnJvclwiXV0sXG4gIFstNDA0NSwgW1wiRVBST1RPTk9TVVBQT1JUXCIsIFwicHJvdG9jb2wgbm90IHN1cHBvcnRlZFwiXV0sXG4gIFstNDA0NCwgW1wiRVBST1RPVFlQRVwiLCBcInByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldFwiXV0sXG4gIFstNDAzNCwgW1wiRVJBTkdFXCIsIFwicmVzdWx0IHRvbyBsYXJnZVwiXV0sXG4gIFstNDA0MywgW1wiRVJPRlNcIiwgXCJyZWFkLW9ubHkgZmlsZSBzeXN0ZW1cIl1dLFxuICBbLTQwNDIsIFtcIkVTSFVURE9XTlwiLCBcImNhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93blwiXV0sXG4gIFstNDA0MSwgW1wiRVNQSVBFXCIsIFwiaW52YWxpZCBzZWVrXCJdXSxcbiAgWy00MDQwLCBbXCJFU1JDSFwiLCBcIm5vIHN1Y2ggcHJvY2Vzc1wiXV0sXG4gIFstNDAzOSwgW1wiRVRJTUVET1VUXCIsIFwiY29ubmVjdGlvbiB0aW1lZCBvdXRcIl1dLFxuICBbLTQwMzgsIFtcIkVUWFRCU1lcIiwgXCJ0ZXh0IGZpbGUgaXMgYnVzeVwiXV0sXG4gIFstNDAzNywgW1wiRVhERVZcIiwgXCJjcm9zcy1kZXZpY2UgbGluayBub3QgcGVybWl0dGVkXCJdXSxcbiAgWy00MDk0LCBbXCJVTktOT1dOXCIsIFwidW5rbm93biBlcnJvclwiXV0sXG4gIFstNDA5NSwgW1wiRU9GXCIsIFwiZW5kIG9mIGZpbGVcIl1dLFxuICBbLTQwMzMsIFtcIkVOWElPXCIsIFwibm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzc1wiXV0sXG4gIFstNDAzMiwgW1wiRU1MSU5LXCIsIFwidG9vIG1hbnkgbGlua3NcIl1dLFxuICBbLTQwMzEsIFtcIkVIT1NURE9XTlwiLCBcImhvc3QgaXMgZG93blwiXV0sXG4gIFstNDAzMCwgW1wiRVJFTU9URUlPXCIsIFwicmVtb3RlIEkvTyBlcnJvclwiXV0sXG4gIFstNDAyOSwgW1wiRU5PVFRZXCIsIFwiaW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlXCJdXSxcbiAgWy00MDI4LCBbXCJFRlRZUEVcIiwgXCJpbmFwcHJvcHJpYXRlIGZpbGUgdHlwZSBvciBmb3JtYXRcIl1dLFxuICBbLTQwMjcsIFtcIkVJTFNFUVwiLCBcImlsbGVnYWwgYnl0ZSBzZXF1ZW5jZVwiXV0sXG5dO1xuXG5jb25zdCBlcnJvclRvQ29kZVdpbmRvd3M6IENvZGVNYXBEYXRhID0gY29kZVRvRXJyb3JXaW5kb3dzLm1hcCgoXG4gIFtzdGF0dXMsIFtlcnJvcl1dLFxuKSA9PiBbZXJyb3IsIHN0YXR1c10pO1xuXG5jb25zdCBjb2RlVG9FcnJvckRhcndpbjogRXJyb3JNYXBEYXRhID0gW1xuICBbLTcsIFtcIkUyQklHXCIsIFwiYXJndW1lbnQgbGlzdCB0b28gbG9uZ1wiXV0sXG4gIFstMTMsIFtcIkVBQ0NFU1wiLCBcInBlcm1pc3Npb24gZGVuaWVkXCJdXSxcbiAgWy00OCwgW1wiRUFERFJJTlVTRVwiLCBcImFkZHJlc3MgYWxyZWFkeSBpbiB1c2VcIl1dLFxuICBbLTQ5LCBbXCJFQUREUk5PVEFWQUlMXCIsIFwiYWRkcmVzcyBub3QgYXZhaWxhYmxlXCJdXSxcbiAgWy00NywgW1wiRUFGTk9TVVBQT1JUXCIsIFwiYWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZFwiXV0sXG4gIFstMzUsIFtcIkVBR0FJTlwiLCBcInJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlXCJdXSxcbiAgWy0zMDAwLCBbXCJFQUlfQUREUkZBTUlMWVwiLCBcImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFxuICBbLTMwMDEsIFtcIkVBSV9BR0FJTlwiLCBcInRlbXBvcmFyeSBmYWlsdXJlXCJdXSxcbiAgWy0zMDAyLCBbXCJFQUlfQkFERkxBR1NcIiwgXCJiYWQgYWlfZmxhZ3MgdmFsdWVcIl1dLFxuICBbLTMwMTMsIFtcIkVBSV9CQURISU5UU1wiLCBcImludmFsaWQgdmFsdWUgZm9yIGhpbnRzXCJdXSxcbiAgWy0zMDAzLCBbXCJFQUlfQ0FOQ0VMRURcIiwgXCJyZXF1ZXN0IGNhbmNlbGVkXCJdXSxcbiAgWy0zMDA0LCBbXCJFQUlfRkFJTFwiLCBcInBlcm1hbmVudCBmYWlsdXJlXCJdXSxcbiAgWy0zMDA1LCBbXCJFQUlfRkFNSUxZXCIsIFwiYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFxuICBbLTMwMDYsIFtcIkVBSV9NRU1PUllcIiwgXCJvdXQgb2YgbWVtb3J5XCJdXSxcbiAgWy0zMDA3LCBbXCJFQUlfTk9EQVRBXCIsIFwibm8gYWRkcmVzc1wiXV0sXG4gIFstMzAwOCwgW1wiRUFJX05PTkFNRVwiLCBcInVua25vd24gbm9kZSBvciBzZXJ2aWNlXCJdXSxcbiAgWy0zMDA5LCBbXCJFQUlfT1ZFUkZMT1dcIiwgXCJhcmd1bWVudCBidWZmZXIgb3ZlcmZsb3dcIl1dLFxuICBbLTMwMTQsIFtcIkVBSV9QUk9UT0NPTFwiLCBcInJlc29sdmVkIHByb3RvY29sIGlzIHVua25vd25cIl1dLFxuICBbLTMwMTAsIFtcIkVBSV9TRVJWSUNFXCIsIFwic2VydmljZSBub3QgYXZhaWxhYmxlIGZvciBzb2NrZXQgdHlwZVwiXV0sXG4gIFstMzAxMSwgW1wiRUFJX1NPQ0tUWVBFXCIsIFwic29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZFwiXV0sXG4gIFstMzcsIFtcIkVBTFJFQURZXCIsIFwiY29ubmVjdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzXCJdXSxcbiAgWy05LCBbXCJFQkFERlwiLCBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIl1dLFxuICBbLTE2LCBbXCJFQlVTWVwiLCBcInJlc291cmNlIGJ1c3kgb3IgbG9ja2VkXCJdXSxcbiAgWy04OSwgW1wiRUNBTkNFTEVEXCIsIFwib3BlcmF0aW9uIGNhbmNlbGVkXCJdXSxcbiAgWy00MDgwLCBbXCJFQ0hBUlNFVFwiLCBcImludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXJcIl1dLFxuICBbLTUzLCBbXCJFQ09OTkFCT1JURURcIiwgXCJzb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydFwiXV0sXG4gIFstNjEsIFtcIkVDT05OUkVGVVNFRFwiLCBcImNvbm5lY3Rpb24gcmVmdXNlZFwiXV0sXG4gIFstNTQsIFtcIkVDT05OUkVTRVRcIiwgXCJjb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXJcIl1dLFxuICBbLTM5LCBbXCJFREVTVEFERFJSRVFcIiwgXCJkZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkXCJdXSxcbiAgWy0xNywgW1wiRUVYSVNUXCIsIFwiZmlsZSBhbHJlYWR5IGV4aXN0c1wiXV0sXG4gIFstMTQsIFtcIkVGQVVMVFwiLCBcImJhZCBhZGRyZXNzIGluIHN5c3RlbSBjYWxsIGFyZ3VtZW50XCJdXSxcbiAgWy0yNywgW1wiRUZCSUdcIiwgXCJmaWxlIHRvbyBsYXJnZVwiXV0sXG4gIFstNjUsIFtcIkVIT1NUVU5SRUFDSFwiLCBcImhvc3QgaXMgdW5yZWFjaGFibGVcIl1dLFxuICBbLTQsIFtcIkVJTlRSXCIsIFwiaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGxcIl1dLFxuICBbLTIyLCBbXCJFSU5WQUxcIiwgXCJpbnZhbGlkIGFyZ3VtZW50XCJdXSxcbiAgWy01LCBbXCJFSU9cIiwgXCJpL28gZXJyb3JcIl1dLFxuICBbLTU2LCBbXCJFSVNDT05OXCIsIFwic29ja2V0IGlzIGFscmVhZHkgY29ubmVjdGVkXCJdXSxcbiAgWy0yMSwgW1wiRUlTRElSXCIsIFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIl1dLFxuICBbLTYyLCBbXCJFTE9PUFwiLCBcInRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkXCJdXSxcbiAgWy0yNCwgW1wiRU1GSUxFXCIsIFwidG9vIG1hbnkgb3BlbiBmaWxlc1wiXV0sXG4gIFstNDAsIFtcIkVNU0dTSVpFXCIsIFwibWVzc2FnZSB0b28gbG9uZ1wiXV0sXG4gIFstNjMsIFtcIkVOQU1FVE9PTE9OR1wiLCBcIm5hbWUgdG9vIGxvbmdcIl1dLFxuICBbLTUwLCBbXCJFTkVURE9XTlwiLCBcIm5ldHdvcmsgaXMgZG93blwiXV0sXG4gIFstNTEsIFtcIkVORVRVTlJFQUNIXCIsIFwibmV0d29yayBpcyB1bnJlYWNoYWJsZVwiXV0sXG4gIFstMjMsIFtcIkVORklMRVwiLCBcImZpbGUgdGFibGUgb3ZlcmZsb3dcIl1dLFxuICBbLTU1LCBbXCJFTk9CVUZTXCIsIFwibm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZVwiXV0sXG4gIFstMTksIFtcIkVOT0RFVlwiLCBcIm5vIHN1Y2ggZGV2aWNlXCJdXSxcbiAgWy0yLCBbXCJFTk9FTlRcIiwgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCJdXSxcbiAgWy0xMiwgW1wiRU5PTUVNXCIsIFwibm90IGVub3VnaCBtZW1vcnlcIl1dLFxuICBbLTQwNTYsIFtcIkVOT05FVFwiLCBcIm1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrXCJdXSxcbiAgWy00MiwgW1wiRU5PUFJPVE9PUFRcIiwgXCJwcm90b2NvbCBub3QgYXZhaWxhYmxlXCJdXSxcbiAgWy0yOCwgW1wiRU5PU1BDXCIsIFwibm8gc3BhY2UgbGVmdCBvbiBkZXZpY2VcIl1dLFxuICBbLTc4LCBbXCJFTk9TWVNcIiwgXCJmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWRcIl1dLFxuICBbLTU3LCBbXCJFTk9UQ09OTlwiLCBcInNvY2tldCBpcyBub3QgY29ubmVjdGVkXCJdXSxcbiAgWy0yMCwgW1wiRU5PVERJUlwiLCBcIm5vdCBhIGRpcmVjdG9yeVwiXV0sXG4gIFstNjYsIFtcIkVOT1RFTVBUWVwiLCBcImRpcmVjdG9yeSBub3QgZW1wdHlcIl1dLFxuICBbLTM4LCBbXCJFTk9UU09DS1wiLCBcInNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldFwiXV0sXG4gIFstNDUsIFtcIkVOT1RTVVBcIiwgXCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiBzb2NrZXRcIl1dLFxuICBbLTEsIFtcIkVQRVJNXCIsIFwib3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWRcIl1dLFxuICBbLTMyLCBbXCJFUElQRVwiLCBcImJyb2tlbiBwaXBlXCJdXSxcbiAgWy0xMDAsIFtcIkVQUk9UT1wiLCBcInByb3RvY29sIGVycm9yXCJdXSxcbiAgWy00MywgW1wiRVBST1RPTk9TVVBQT1JUXCIsIFwicHJvdG9jb2wgbm90IHN1cHBvcnRlZFwiXV0sXG4gIFstNDEsIFtcIkVQUk9UT1RZUEVcIiwgXCJwcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXRcIl1dLFxuICBbLTM0LCBbXCJFUkFOR0VcIiwgXCJyZXN1bHQgdG9vIGxhcmdlXCJdXSxcbiAgWy0zMCwgW1wiRVJPRlNcIiwgXCJyZWFkLW9ubHkgZmlsZSBzeXN0ZW1cIl1dLFxuICBbLTU4LCBbXCJFU0hVVERPV05cIiwgXCJjYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd25cIl1dLFxuICBbLTI5LCBbXCJFU1BJUEVcIiwgXCJpbnZhbGlkIHNlZWtcIl1dLFxuICBbLTMsIFtcIkVTUkNIXCIsIFwibm8gc3VjaCBwcm9jZXNzXCJdXSxcbiAgWy02MCwgW1wiRVRJTUVET1VUXCIsIFwiY29ubmVjdGlvbiB0aW1lZCBvdXRcIl1dLFxuICBbLTI2LCBbXCJFVFhUQlNZXCIsIFwidGV4dCBmaWxlIGlzIGJ1c3lcIl1dLFxuICBbLTE4LCBbXCJFWERFVlwiLCBcImNyb3NzLWRldmljZSBsaW5rIG5vdCBwZXJtaXR0ZWRcIl1dLFxuICBbLTQwOTQsIFtcIlVOS05PV05cIiwgXCJ1bmtub3duIGVycm9yXCJdXSxcbiAgWy00MDk1LCBbXCJFT0ZcIiwgXCJlbmQgb2YgZmlsZVwiXV0sXG4gIFstNiwgW1wiRU5YSU9cIiwgXCJubyBzdWNoIGRldmljZSBvciBhZGRyZXNzXCJdXSxcbiAgWy0zMSwgW1wiRU1MSU5LXCIsIFwidG9vIG1hbnkgbGlua3NcIl1dLFxuICBbLTY0LCBbXCJFSE9TVERPV05cIiwgXCJob3N0IGlzIGRvd25cIl1dLFxuICBbLTQwMzAsIFtcIkVSRU1PVEVJT1wiLCBcInJlbW90ZSBJL08gZXJyb3JcIl1dLFxuICBbLTI1LCBbXCJFTk9UVFlcIiwgXCJpbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2VcIl1dLFxuICBbLTc5LCBbXCJFRlRZUEVcIiwgXCJpbmFwcHJvcHJpYXRlIGZpbGUgdHlwZSBvciBmb3JtYXRcIl1dLFxuICBbLTkyLCBbXCJFSUxTRVFcIiwgXCJpbGxlZ2FsIGJ5dGUgc2VxdWVuY2VcIl1dLFxuXTtcblxuY29uc3QgZXJyb3JUb0NvZGVEYXJ3aW46IENvZGVNYXBEYXRhID0gY29kZVRvRXJyb3JEYXJ3aW4ubWFwKChcbiAgW3N0YXR1cywgW2NvZGVdXSxcbikgPT4gW2NvZGUsIHN0YXR1c10pO1xuXG5jb25zdCBjb2RlVG9FcnJvckxpbnV4OiBFcnJvck1hcERhdGEgPSBbXG4gIFstNywgW1wiRTJCSUdcIiwgXCJhcmd1bWVudCBsaXN0IHRvbyBsb25nXCJdXSxcbiAgWy0xMywgW1wiRUFDQ0VTXCIsIFwicGVybWlzc2lvbiBkZW5pZWRcIl1dLFxuICBbLTk4LCBbXCJFQUREUklOVVNFXCIsIFwiYWRkcmVzcyBhbHJlYWR5IGluIHVzZVwiXV0sXG4gIFstOTksIFtcIkVBRERSTk9UQVZBSUxcIiwgXCJhZGRyZXNzIG5vdCBhdmFpbGFibGVcIl1dLFxuICBbLTk3LCBbXCJFQUZOT1NVUFBPUlRcIiwgXCJhZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkXCJdXSxcbiAgWy0xMSwgW1wiRUFHQUlOXCIsIFwicmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGVcIl1dLFxuICBbLTMwMDAsIFtcIkVBSV9BRERSRkFNSUxZXCIsIFwiYWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZFwiXV0sXG4gIFstMzAwMSwgW1wiRUFJX0FHQUlOXCIsIFwidGVtcG9yYXJ5IGZhaWx1cmVcIl1dLFxuICBbLTMwMDIsIFtcIkVBSV9CQURGTEFHU1wiLCBcImJhZCBhaV9mbGFncyB2YWx1ZVwiXV0sXG4gIFstMzAxMywgW1wiRUFJX0JBREhJTlRTXCIsIFwiaW52YWxpZCB2YWx1ZSBmb3IgaGludHNcIl1dLFxuICBbLTMwMDMsIFtcIkVBSV9DQU5DRUxFRFwiLCBcInJlcXVlc3QgY2FuY2VsZWRcIl1dLFxuICBbLTMwMDQsIFtcIkVBSV9GQUlMXCIsIFwicGVybWFuZW50IGZhaWx1cmVcIl1dLFxuICBbLTMwMDUsIFtcIkVBSV9GQU1JTFlcIiwgXCJhaV9mYW1pbHkgbm90IHN1cHBvcnRlZFwiXV0sXG4gIFstMzAwNiwgW1wiRUFJX01FTU9SWVwiLCBcIm91dCBvZiBtZW1vcnlcIl1dLFxuICBbLTMwMDcsIFtcIkVBSV9OT0RBVEFcIiwgXCJubyBhZGRyZXNzXCJdXSxcbiAgWy0zMDA4LCBbXCJFQUlfTk9OQU1FXCIsIFwidW5rbm93biBub2RlIG9yIHNlcnZpY2VcIl1dLFxuICBbLTMwMDksIFtcIkVBSV9PVkVSRkxPV1wiLCBcImFyZ3VtZW50IGJ1ZmZlciBvdmVyZmxvd1wiXV0sXG4gIFstMzAxNCwgW1wiRUFJX1BST1RPQ09MXCIsIFwicmVzb2x2ZWQgcHJvdG9jb2wgaXMgdW5rbm93blwiXV0sXG4gIFstMzAxMCwgW1wiRUFJX1NFUlZJQ0VcIiwgXCJzZXJ2aWNlIG5vdCBhdmFpbGFibGUgZm9yIHNvY2tldCB0eXBlXCJdXSxcbiAgWy0zMDExLCBbXCJFQUlfU09DS1RZUEVcIiwgXCJzb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkXCJdXSxcbiAgWy0xMTQsIFtcIkVBTFJFQURZXCIsIFwiY29ubmVjdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzXCJdXSxcbiAgWy05LCBbXCJFQkFERlwiLCBcImJhZCBmaWxlIGRlc2NyaXB0b3JcIl1dLFxuICBbLTE2LCBbXCJFQlVTWVwiLCBcInJlc291cmNlIGJ1c3kgb3IgbG9ja2VkXCJdXSxcbiAgWy0xMjUsIFtcIkVDQU5DRUxFRFwiLCBcIm9wZXJhdGlvbiBjYW5jZWxlZFwiXV0sXG4gIFstNDA4MCwgW1wiRUNIQVJTRVRcIiwgXCJpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyXCJdXSxcbiAgWy0xMDMsIFtcIkVDT05OQUJPUlRFRFwiLCBcInNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0XCJdXSxcbiAgWy0xMTEsIFtcIkVDT05OUkVGVVNFRFwiLCBcImNvbm5lY3Rpb24gcmVmdXNlZFwiXV0sXG4gIFstMTA0LCBbXCJFQ09OTlJFU0VUXCIsIFwiY29ubmVjdGlvbiByZXNldCBieSBwZWVyXCJdXSxcbiAgWy04OSwgW1wiRURFU1RBRERSUkVRXCIsIFwiZGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZFwiXV0sXG4gIFstMTcsIFtcIkVFWElTVFwiLCBcImZpbGUgYWxyZWFkeSBleGlzdHNcIl1dLFxuICBbLTE0LCBbXCJFRkFVTFRcIiwgXCJiYWQgYWRkcmVzcyBpbiBzeXN0ZW0gY2FsbCBhcmd1bWVudFwiXV0sXG4gIFstMjcsIFtcIkVGQklHXCIsIFwiZmlsZSB0b28gbGFyZ2VcIl1dLFxuICBbLTExMywgW1wiRUhPU1RVTlJFQUNIXCIsIFwiaG9zdCBpcyB1bnJlYWNoYWJsZVwiXV0sXG4gIFstNCwgW1wiRUlOVFJcIiwgXCJpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbFwiXV0sXG4gIFstMjIsIFtcIkVJTlZBTFwiLCBcImludmFsaWQgYXJndW1lbnRcIl1dLFxuICBbLTUsIFtcIkVJT1wiLCBcImkvbyBlcnJvclwiXV0sXG4gIFstMTA2LCBbXCJFSVNDT05OXCIsIFwic29ja2V0IGlzIGFscmVhZHkgY29ubmVjdGVkXCJdXSxcbiAgWy0yMSwgW1wiRUlTRElSXCIsIFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIl1dLFxuICBbLTQwLCBbXCJFTE9PUFwiLCBcInRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkXCJdXSxcbiAgWy0yNCwgW1wiRU1GSUxFXCIsIFwidG9vIG1hbnkgb3BlbiBmaWxlc1wiXV0sXG4gIFstOTAsIFtcIkVNU0dTSVpFXCIsIFwibWVzc2FnZSB0b28gbG9uZ1wiXV0sXG4gIFstMzYsIFtcIkVOQU1FVE9PTE9OR1wiLCBcIm5hbWUgdG9vIGxvbmdcIl1dLFxuICBbLTEwMCwgW1wiRU5FVERPV05cIiwgXCJuZXR3b3JrIGlzIGRvd25cIl1dLFxuICBbLTEwMSwgW1wiRU5FVFVOUkVBQ0hcIiwgXCJuZXR3b3JrIGlzIHVucmVhY2hhYmxlXCJdXSxcbiAgWy0yMywgW1wiRU5GSUxFXCIsIFwiZmlsZSB0YWJsZSBvdmVyZmxvd1wiXV0sXG4gIFstMTA1LCBbXCJFTk9CVUZTXCIsIFwibm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZVwiXV0sXG4gIFstMTksIFtcIkVOT0RFVlwiLCBcIm5vIHN1Y2ggZGV2aWNlXCJdXSxcbiAgWy0yLCBbXCJFTk9FTlRcIiwgXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCJdXSxcbiAgWy0xMiwgW1wiRU5PTUVNXCIsIFwibm90IGVub3VnaCBtZW1vcnlcIl1dLFxuICBbLTY0LCBbXCJFTk9ORVRcIiwgXCJtYWNoaW5lIGlzIG5vdCBvbiB0aGUgbmV0d29ya1wiXV0sXG4gIFstOTIsIFtcIkVOT1BST1RPT1BUXCIsIFwicHJvdG9jb2wgbm90IGF2YWlsYWJsZVwiXV0sXG4gIFstMjgsIFtcIkVOT1NQQ1wiLCBcIm5vIHNwYWNlIGxlZnQgb24gZGV2aWNlXCJdXSxcbiAgWy0zOCwgW1wiRU5PU1lTXCIsIFwiZnVuY3Rpb24gbm90IGltcGxlbWVudGVkXCJdXSxcbiAgWy0xMDcsIFtcIkVOT1RDT05OXCIsIFwic29ja2V0IGlzIG5vdCBjb25uZWN0ZWRcIl1dLFxuICBbLTIwLCBbXCJFTk9URElSXCIsIFwibm90IGEgZGlyZWN0b3J5XCJdXSxcbiAgWy0zOSwgW1wiRU5PVEVNUFRZXCIsIFwiZGlyZWN0b3J5IG5vdCBlbXB0eVwiXV0sXG4gIFstODgsIFtcIkVOT1RTT0NLXCIsIFwic29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0XCJdXSxcbiAgWy05NSwgW1wiRU5PVFNVUFwiLCBcIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHNvY2tldFwiXV0sXG4gIFstMSwgW1wiRVBFUk1cIiwgXCJvcGVyYXRpb24gbm90IHBlcm1pdHRlZFwiXV0sXG4gIFstMzIsIFtcIkVQSVBFXCIsIFwiYnJva2VuIHBpcGVcIl1dLFxuICBbLTcxLCBbXCJFUFJPVE9cIiwgXCJwcm90b2NvbCBlcnJvclwiXV0sXG4gIFstOTMsIFtcIkVQUk9UT05PU1VQUE9SVFwiLCBcInByb3RvY29sIG5vdCBzdXBwb3J0ZWRcIl1dLFxuICBbLTkxLCBbXCJFUFJPVE9UWVBFXCIsIFwicHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0XCJdXSxcbiAgWy0zNCwgW1wiRVJBTkdFXCIsIFwicmVzdWx0IHRvbyBsYXJnZVwiXV0sXG4gIFstMzAsIFtcIkVST0ZTXCIsIFwicmVhZC1vbmx5IGZpbGUgc3lzdGVtXCJdXSxcbiAgWy0xMDgsIFtcIkVTSFVURE9XTlwiLCBcImNhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93blwiXV0sXG4gIFstMjksIFtcIkVTUElQRVwiLCBcImludmFsaWQgc2Vla1wiXV0sXG4gIFstMywgW1wiRVNSQ0hcIiwgXCJubyBzdWNoIHByb2Nlc3NcIl1dLFxuICBbLTExMCwgW1wiRVRJTUVET1VUXCIsIFwiY29ubmVjdGlvbiB0aW1lZCBvdXRcIl1dLFxuICBbLTI2LCBbXCJFVFhUQlNZXCIsIFwidGV4dCBmaWxlIGlzIGJ1c3lcIl1dLFxuICBbLTE4LCBbXCJFWERFVlwiLCBcImNyb3NzLWRldmljZSBsaW5rIG5vdCBwZXJtaXR0ZWRcIl1dLFxuICBbLTQwOTQsIFtcIlVOS05PV05cIiwgXCJ1bmtub3duIGVycm9yXCJdXSxcbiAgWy00MDk1LCBbXCJFT0ZcIiwgXCJlbmQgb2YgZmlsZVwiXV0sXG4gIFstNiwgW1wiRU5YSU9cIiwgXCJubyBzdWNoIGRldmljZSBvciBhZGRyZXNzXCJdXSxcbiAgWy0zMSwgW1wiRU1MSU5LXCIsIFwidG9vIG1hbnkgbGlua3NcIl1dLFxuICBbLTExMiwgW1wiRUhPU1RET1dOXCIsIFwiaG9zdCBpcyBkb3duXCJdXSxcbiAgWy0xMjEsIFtcIkVSRU1PVEVJT1wiLCBcInJlbW90ZSBJL08gZXJyb3JcIl1dLFxuICBbLTI1LCBbXCJFTk9UVFlcIiwgXCJpbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2VcIl1dLFxuICBbLTQwMjgsIFtcIkVGVFlQRVwiLCBcImluYXBwcm9wcmlhdGUgZmlsZSB0eXBlIG9yIGZvcm1hdFwiXV0sXG4gIFstODQsIFtcIkVJTFNFUVwiLCBcImlsbGVnYWwgYnl0ZSBzZXF1ZW5jZVwiXV0sXG5dO1xuXG5jb25zdCBlcnJvclRvQ29kZUxpbnV4OiBDb2RlTWFwRGF0YSA9IGNvZGVUb0Vycm9yTGludXgubWFwKChcbiAgW3N0YXR1cywgW2NvZGVdXSxcbikgPT4gW2NvZGUsIHN0YXR1c10pO1xuXG5leHBvcnQgY29uc3QgZXJyb3JNYXAgPSBuZXcgTWFwPG51bWJlciwgW3N0cmluZywgc3RyaW5nXT4oXG4gIG9zVHlwZSA9PT0gXCJ3aW5kb3dzXCJcbiAgICA/IGNvZGVUb0Vycm9yV2luZG93c1xuICAgIDogb3NUeXBlID09PSBcImRhcndpblwiXG4gICAgPyBjb2RlVG9FcnJvckRhcndpblxuICAgIDogb3NUeXBlID09PSBcImxpbnV4XCJcbiAgICA/IGNvZGVUb0Vycm9yTGludXhcbiAgICA6IHVucmVhY2hhYmxlKCksXG4pO1xuXG5leHBvcnQgY29uc3QgY29kZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KFxuICBvc1R5cGUgPT09IFwid2luZG93c1wiXG4gICAgPyBlcnJvclRvQ29kZVdpbmRvd3NcbiAgICA6IG9zVHlwZSA9PT0gXCJkYXJ3aW5cIlxuICAgID8gZXJyb3JUb0NvZGVEYXJ3aW5cbiAgICA6IG9zVHlwZSA9PT0gXCJsaW51eFwiXG4gICAgPyBlcnJvclRvQ29kZUxpbnV4XG4gICAgOiB1bnJlYWNoYWJsZSgpLFxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFN5c0Vycm5vVG9VdkVycm5vKHN5c0Vycm5vOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAob3NUeXBlID09PSBcIndpbmRvd3NcIikge1xuICAgIGNvbnN0IGNvZGUgPSB1dlRyYW5zbGF0ZVN5c0Vycm9yKHN5c0Vycm5vKTtcbiAgICByZXR1cm4gY29kZU1hcC5nZXQoY29kZSkgPz8gLXN5c0Vycm5vO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAtc3lzRXJybm87XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFVWX0VBSV9NRU1PUlkgPSBjb2RlTWFwLmdldChcIkVBSV9NRU1PUllcIikhO1xuZXhwb3J0IGNvbnN0IFVWX1VOS05PV04gPSBjb2RlTWFwLmdldChcIlVOS05PV05cIikhO1xuZXhwb3J0IGNvbnN0IFVWX0VCQURGID0gY29kZU1hcC5nZXQoXCJFQkFERlwiKSE7XG5leHBvcnQgY29uc3QgVVZfRUlOVkFMID0gY29kZU1hcC5nZXQoXCJFSU5WQUxcIikhO1xuZXhwb3J0IGNvbnN0IFVWX0VOT1RTT0NLID0gY29kZU1hcC5nZXQoXCJFTk9UU09DS1wiKSE7XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuZXhwb3J0IHR5cGUgT1NUeXBlID0gXCJ3aW5kb3dzXCIgfCBcImxpbnV4XCIgfCBcImRhcndpblwiO1xuXG5leHBvcnQgY29uc3Qgb3NUeXBlOiBPU1R5cGUgPSAoKCkgPT4ge1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBjb25zdCB7IERlbm8gfSA9IGdsb2JhbFRoaXMgYXMgYW55O1xuICBpZiAodHlwZW9mIERlbm8/LmJ1aWxkPy5vcyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBEZW5vLmJ1aWxkLm9zO1xuICB9XG5cbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgY29uc3QgeyBuYXZpZ2F0b3IgfSA9IGdsb2JhbFRoaXMgYXMgYW55O1xuICBpZiAobmF2aWdhdG9yPy5hcHBWZXJzaW9uPy5pbmNsdWRlcz8uKFwiV2luXCIpKSB7XG4gICAgcmV0dXJuIFwid2luZG93c1wiO1xuICB9XG5cbiAgcmV0dXJuIFwibGludXhcIjtcbn0pKCk7XG5cbmV4cG9ydCBjb25zdCBpc1dpbmRvd3MgPSBvc1R5cGUgPT09IFwid2luZG93c1wiO1xuZXhwb3J0IGNvbnN0IGlzTGludXggPSBvc1R5cGUgPT09IFwibGludXhcIjtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLyorK1xuXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuWW91IG1heSBvbmx5IHVzZSB0aGlzIGNvZGUgaWYgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGUgV2luZG93cyBSZXNlYXJjaCBLZXJuZWwgU291cmNlIENvZGUgTGljZW5zZSBhZ3JlZW1lbnQgKHNlZSBMaWNlbnNlLnR4dCkuXG5JZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZSB0ZXJtcywgZG8gbm90IHVzZSB0aGUgY29kZS5cblxuTW9kdWxlOlxuXG4gICAgd2luZGVycm9yLmhcblxuQWJzdHJhY3Q6XG5cbiAgICBXaW4zMiBBUEkgZnVuY3Rpb25zXG5cbi0tKi9cblxuLy8gVGhpcyBtb2R1bGUgcG9ydHM6XG4vLyAtIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9taWMxMDEvd2luZG93cy9tYXN0ZXIvV1JLLXYxLjIvcHVibGljL3Nkay9pbmMvd2luZXJyb3IuaFxuXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NVQ0NFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TVUNDRVNTID0gMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9GVU5DVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbmNvcnJlY3QgZnVuY3Rpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRlVOQ1RJT04gPSAxOyAvLyBkZGVycm9yXG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gY2Fubm90IGZpbmQgdGhlIGZpbGUgc3BlY2lmaWVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9GSUxFX05PVF9GT1VORCA9IDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BBVEhfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gY2Fubm90IGZpbmQgdGhlIHBhdGggc3BlY2lmaWVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QQVRIX05PVF9GT1VORCA9IDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1RPT19NQU5ZX09QRU5fRklMRVNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN5c3RlbSBjYW5ub3Qgb3BlbiB0aGUgZmlsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUyA9IDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FDQ0VTU19ERU5JRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQWNjZXNzIGlzIGRlbmllZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUNDRVNTX0RFTklFRCA9IDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfSEFORExFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBoYW5kbGUgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9IQU5ETEUgPSA2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9BUkVOQV9UUkFTSEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzdG9yYWdlIGNvbnRyb2wgYmxvY2tzIHdlcmUgZGVzdHJveWVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BUkVOQV9UUkFTSEVEID0gNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX0VOT1VHSF9NRU1PUllcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm90IGVub3VnaCBzdG9yYWdlIGlzIGF2YWlsYWJsZSB0byBwcm9jZXNzIHRoaXMgY29tbWFuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlkgPSA4OyAvLyBkZGVycm9yXG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfQkxPQ0tcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN0b3JhZ2UgY29udHJvbCBibG9jayBhZGRyZXNzIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfQkxPQ0sgPSA5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfRU5WSVJPTk1FTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGVudmlyb25tZW50IGlzIGluY29ycmVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkFEX0VOVklST05NRU5UID0gMTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9GT1JNQVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBsb2FkIGEgcHJvZ3JhbSB3aXRoIGFuIGluY29ycmVjdCBmb3JtYXQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9GT1JNQVQgPSAxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9BQ0NFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGFjY2VzcyBjb2RlIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfQUNDRVNTID0gMTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfREFUQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGF0YSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0RBVEEgPSAxMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfT1VUT0ZNRU1PUllcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm90IGVub3VnaCBzdG9yYWdlIGlzIGF2YWlsYWJsZSB0byBjb21wbGV0ZSB0aGlzIG9wZXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfT1VUT0ZNRU1PUlkgPSAxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9EUklWRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3lzdGVtIGNhbm5vdCBmaW5kIHRoZSBkcml2ZSBzcGVjaWZpZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRFJJVkUgPSAxNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1VSUkVOVF9ESVJFQ1RPUllcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBjYW5ub3QgYmUgcmVtb3ZlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1VSUkVOVF9ESVJFQ1RPUlkgPSAxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX1NBTUVfREVWSUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gY2Fubm90IG1vdmUgdGhlIGZpbGUgdG8gYSBkaWZmZXJlbnQgZGlzayBkcml2ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX1NBTUVfREVWSUNFID0gMTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX01PUkVfRklMRVNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgYXJlIG5vIG1vcmUgZmlsZXMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX01PUkVfRklMRVMgPSAxODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV1JJVEVfUFJPVEVDVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWVkaWEgaXMgd3JpdGUgcHJvdGVjdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XUklURV9QUk9URUNUID0gMTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9VTklUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gY2Fubm90IGZpbmQgdGhlIGRldmljZSBzcGVjaWZpZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9VTklUID0gMjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9SRUFEWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGV2aWNlIGlzIG5vdCByZWFkeS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX1JFQURZID0gMjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9DT01NQU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkZXZpY2UgZG9lcyBub3QgcmVjb2duaXplIHRoZSBjb21tYW5kLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfQ09NTUFORCA9IDIyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DUkNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRGF0YSBlcnJvciAoY3ljbGljIHJlZHVuZGFuY3kgY2hlY2spLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DUkMgPSAyMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQkFEX0xFTkdUSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcHJvZ3JhbSBpc3N1ZWQgYSBjb21tYW5kIGJ1dCB0aGUgY29tbWFuZCBsZW5ndGggaXMgaW5jb3JyZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfTEVOR1RIID0gMjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFRUtcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRyaXZlIGNhbm5vdCBsb2NhdGUgYSBzcGVjaWZpYyBhcmVhIG9yIHRyYWNrIG9uIHRoZSBkaXNrLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRUVLID0gMjU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9ET1NfRElTS1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGRpc2sgb3IgZGlza2V0dGUgY2Fubm90IGJlIGFjY2Vzc2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RfRE9TX0RJU0sgPSAyNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VDVE9SX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZHJpdmUgY2Fubm90IGZpbmQgdGhlIHNlY3RvciByZXF1ZXN0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFQ1RPUl9OT1RfRk9VTkQgPSAyNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfT1VUX09GX1BBUEVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBwcmludGVyIGlzIG91dCBvZiBwYXBlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfT1VUX09GX1BBUEVSID0gMjg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1dSSVRFX0ZBVUxUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gY2Fubm90IHdyaXRlIHRvIHRoZSBzcGVjaWZpZWQgZGV2aWNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XUklURV9GQVVMVCA9IDI5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRUFEX0ZBVUxUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gY2Fubm90IHJlYWQgZnJvbSB0aGUgc3BlY2lmaWVkIGRldmljZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUkVBRF9GQVVMVCA9IDMwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9HRU5fRkFJTFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGRldmljZSBhdHRhY2hlZCB0byB0aGUgc3lzdGVtIGlzIG5vdCBmdW5jdGlvbmluZy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfR0VOX0ZBSUxVUkUgPSAzMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0hBUklOR19WSU9MQVRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByb2Nlc3MgY2Fubm90IGFjY2VzcyB0aGUgZmlsZSBiZWNhdXNlIGl0IGlzIGJlaW5nIHVzZWQgYnkgYW5vdGhlciBwcm9jZXNzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTiA9IDMyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9MT0NLX1ZJT0xBVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcHJvY2VzcyBjYW5ub3QgYWNjZXNzIHRoZSBmaWxlIGJlY2F1c2UgYW5vdGhlciBwcm9jZXNzIGhhcyBsb2NrZWQgYSBwb3J0aW9uIG9mIHRoZSBmaWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9MT0NLX1ZJT0xBVElPTiA9IDMzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9XUk9OR19ESVNLXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB3cm9uZyBkaXNrZXR0ZSBpcyBpbiB0aGUgZHJpdmUuXG4vLyAgSW5zZXJ0ICUyIChWb2x1bWUgU2VyaWFsIE51bWJlcjogJTMpIGludG8gZHJpdmUgJTEuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1dST05HX0RJU0sgPSAzNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0hBUklOR19CVUZGRVJfRVhDRUVERURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVG9vIG1hbnkgZmlsZXMgb3BlbmVkIGZvciBzaGFyaW5nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TSEFSSU5HX0JVRkZFUl9FWENFRURFRCA9IDM2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9IQU5ETEVfRU9GXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSEFORExFX0VPRiA9IDM4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9IQU5ETEVfRElTS19GVUxMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkaXNrIGlzIGZ1bGwuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0hBTkRMRV9ESVNLX0ZVTEwgPSAzOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX1NVUFBPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdCBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RfU1VQUE9SVEVEID0gNTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFTV9OT1RfTElTVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBXaW5kb3dzIGNhbm5vdCBmaW5kIHRoZSBuZXR3b3JrIHBhdGguIFZlcmlmeSB0aGF0IHRoZSBuZXR3b3JrIHBhdGggaXMgY29ycmVjdCBhbmQgdGhlIGRlc3RpbmF0aW9uIGNvbXB1dGVyIGlzIG5vdCBidXN5IG9yIHR1cm5lZCBvZmYuIElmIFdpbmRvd3Mgc3RpbGwgY2Fubm90IGZpbmQgdGhlIG5ldHdvcmsgcGF0aCwgY29udGFjdCB5b3VyIG5ldHdvcmsgYWRtaW5pc3RyYXRvci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUkVNX05PVF9MSVNUID0gNTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RVUF9OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFlvdSB3ZXJlIG5vdCBjb25uZWN0ZWQgYmVjYXVzZSBhIGR1cGxpY2F0ZSBuYW1lIGV4aXN0cyBvbiB0aGUgbmV0d29yay4gR28gdG8gU3lzdGVtIGluIENvbnRyb2wgUGFuZWwgdG8gY2hhbmdlIHRoZSBjb21wdXRlciBuYW1lIGFuZCB0cnkgYWdhaW4uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RVUF9OQU1FID0gNTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9ORVRQQVRIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIHBhdGggd2FzIG5vdCBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkFEX05FVFBBVEggPSA1MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTkVUV09SS19CVVNZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIGlzIGJ1c3kuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05FVFdPUktfQlVTWSA9IDU0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ERVZfTk9UX0VYSVNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgbmV0d29yayByZXNvdXJjZSBvciBkZXZpY2UgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVWX05PVF9FWElTVCA9IDU1OyAvLyBkZGVycm9yXG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1RPT19NQU5ZX0NNRFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5ldHdvcmsgQklPUyBjb21tYW5kIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RPT19NQU5ZX0NNRFMgPSA1NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQURBUF9IRFdfRVJSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgbmV0d29yayBhZGFwdGVyIGhhcmR3YXJlIGVycm9yIG9jY3VycmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BREFQX0hEV19FUlIgPSA1NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQkFEX05FVF9SRVNQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgc2VydmVyIGNhbm5vdCBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfTkVUX1JFU1AgPSA1ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5FWFBfTkVUX0VSUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiB1bmV4cGVjdGVkIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VORVhQX05FVF9FUlIgPSA1OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQkFEX1JFTV9BREFQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZW1vdGUgYWRhcHRlciBpcyBub3QgY29tcGF0aWJsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkFEX1JFTV9BREFQID0gNjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BSSU5UUV9GVUxMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBwcmludGVyIHF1ZXVlIGlzIGZ1bGwuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BSSU5UUV9GVUxMID0gNjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX1NQT09MX1NQQUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNwYWNlIHRvIHN0b3JlIHRoZSBmaWxlIHdhaXRpbmcgdG8gYmUgcHJpbnRlZCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1NQT09MX1NQQUNFID0gNjI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BSSU5UX0NBTkNFTExFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBZb3VyIGZpbGUgd2FpdGluZyB0byBiZSBwcmludGVkIHdhcyBkZWxldGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUklOVF9DQU5DRUxMRUQgPSA2MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTkVUTkFNRV9ERUxFVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgbmV0d29yayBuYW1lIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05FVE5BTUVfREVMRVRFRCA9IDY0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ORVRXT1JLX0FDQ0VTU19ERU5JRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTmV0d29yayBhY2Nlc3MgaXMgZGVuaWVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ORVRXT1JLX0FDQ0VTU19ERU5JRUQgPSA2NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQkFEX0RFVl9UWVBFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIHJlc291cmNlIHR5cGUgaXMgbm90IGNvcnJlY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9ERVZfVFlQRSA9IDY2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfTkVUX05BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5ldHdvcmsgbmFtZSBjYW5ub3QgYmUgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9ORVRfTkFNRSA9IDY3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9UT09fTUFOWV9OQU1FU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbmFtZSBsaW1pdCBmb3IgdGhlIGxvY2FsIGNvbXB1dGVyIG5ldHdvcmsgYWRhcHRlciBjYXJkIHdhcyBleGNlZWRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVE9PX01BTllfTkFNRVMgPSA2ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVE9PX01BTllfU0VTU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbmV0d29yayBCSU9TIHNlc3Npb24gbGltaXQgd2FzIGV4Y2VlZGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9UT09fTUFOWV9TRVNTID0gNjk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NIQVJJTkdfUEFVU0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZW1vdGUgc2VydmVyIGhhcyBiZWVuIHBhdXNlZCBvciBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzdGFydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TSEFSSU5HX1BBVVNFRCA9IDcwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRVFfTk9UX0FDQ0VQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIG1vcmUgY29ubmVjdGlvbnMgY2FuIGJlIG1hZGUgdG8gdGhpcyByZW1vdGUgY29tcHV0ZXIgYXQgdGhpcyB0aW1lIGJlY2F1c2UgdGhlcmUgYXJlIGFscmVhZHkgYXMgbWFueSBjb25uZWN0aW9ucyBhcyB0aGUgY29tcHV0ZXIgY2FuIGFjY2VwdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUkVRX05PVF9BQ0NFUCA9IDcxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRURJUl9QQVVTRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBwcmludGVyIG9yIGRpc2sgZGV2aWNlIGhhcyBiZWVuIHBhdXNlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUkVESVJfUEFVU0VEID0gNzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0ZJTEVfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRklMRV9FWElTVFMgPSA4MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0FOTk9UX01BS0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBvciBmaWxlIGNhbm5vdCBiZSBjcmVhdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DQU5OT1RfTUFLRSA9IDgyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9GQUlMX0kyNFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBGYWlsIG9uIElOVCAyNC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRkFJTF9JMjQgPSA4MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfT1VUX09GX1NUUlVDVFVSRVNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU3RvcmFnZSB0byBwcm9jZXNzIHRoaXMgcmVxdWVzdCBpcyBub3QgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9PVVRfT0ZfU1RSVUNUVVJFUyA9IDg0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9BTFJFQURZX0FTU0lHTkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBsb2NhbCBkZXZpY2UgbmFtZSBpcyBhbHJlYWR5IGluIHVzZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUxSRUFEWV9BU1NJR05FRCA9IDg1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1BBU1NXT1JEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgbmV0d29yayBwYXNzd29yZCBpcyBub3QgY29ycmVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9QQVNTV09SRCA9IDg2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcGFyYW1ldGVyIGlzIGluY29ycmVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIgPSA4NzsgLy8gZGRlcnJvclxuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ORVRfV1JJVEVfRkFVTFRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSB3cml0ZSBmYXVsdCBvY2N1cnJlZCBvbiB0aGUgbmV0d29yay5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTkVUX1dSSVRFX0ZBVUxUID0gODg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX1BST0NfU0xPVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN5c3RlbSBjYW5ub3Qgc3RhcnQgYW5vdGhlciBwcm9jZXNzIGF0IHRoaXMgdGltZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fUFJPQ19TTE9UUyA9IDg5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9UT09fTUFOWV9TRU1BUEhPUkVTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCBjcmVhdGUgYW5vdGhlciBzeXN0ZW0gc2VtYXBob3JlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9UT09fTUFOWV9TRU1BUEhPUkVTID0gMTAwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9FWENMX1NFTV9BTFJFQURZX09XTkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBleGNsdXNpdmUgc2VtYXBob3JlIGlzIG93bmVkIGJ5IGFub3RoZXIgcHJvY2Vzcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRVhDTF9TRU1fQUxSRUFEWV9PV05FRCA9IDEwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VNX0lTX1NFVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2VtYXBob3JlIGlzIHNldCBhbmQgY2Fubm90IGJlIGNsb3NlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VNX0lTX1NFVCA9IDEwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVE9PX01BTllfU0VNX1JFUVVFU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZW1hcGhvcmUgY2Fubm90IGJlIHNldCBhZ2Fpbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVE9PX01BTllfU0VNX1JFUVVFU1RTID0gMTAzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0FUX0lOVEVSUlVQVF9USU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCByZXF1ZXN0IGV4Y2x1c2l2ZSBzZW1hcGhvcmVzIGF0IGludGVycnVwdCB0aW1lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0FUX0lOVEVSUlVQVF9USU1FID0gMTA0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRU1fT1dORVJfRElFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcHJldmlvdXMgb3duZXJzaGlwIG9mIHRoaXMgc2VtYXBob3JlIGhhcyBlbmRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VNX09XTkVSX0RJRUQgPSAxMDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFTV9VU0VSX0xJTUlUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEluc2VydCB0aGUgZGlza2V0dGUgZm9yIGRyaXZlICUxLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRU1fVVNFUl9MSU1JVCA9IDEwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRElTS19DSEFOR0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByb2dyYW0gc3RvcHBlZCBiZWNhdXNlIGFuIGFsdGVybmF0ZSBkaXNrZXR0ZSB3YXMgbm90IGluc2VydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ESVNLX0NIQU5HRSA9IDEwNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFJJVkVfTE9DS0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkaXNrIGlzIGluIHVzZSBvciBsb2NrZWQgYnkgYW5vdGhlciBwcm9jZXNzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EUklWRV9MT0NLRUQgPSAxMDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JST0tFTl9QSVBFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBwaXBlIGhhcyBiZWVuIGVuZGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CUk9LRU5fUElQRSA9IDEwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfT1BFTl9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN5c3RlbSBjYW5ub3Qgb3BlbiB0aGUgZGV2aWNlIG9yIGZpbGUgc3BlY2lmaWVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9PUEVOX0ZBSUxFRCA9IDExMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQlVGRkVSX09WRVJGTE9XXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIG5hbWUgaXMgdG9vIGxvbmcuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JVRkZFUl9PVkVSRkxPVyA9IDExMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRElTS19GVUxMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2Ugb24gdGhlIGRpc2suXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RJU0tfRlVMTCA9IDExMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fTU9SRV9TRUFSQ0hfSEFORExFU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBtb3JlIGludGVybmFsIGZpbGUgaWRlbnRpZmllcnMgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19NT1JFX1NFQVJDSF9IQU5ETEVTID0gMTEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1RBUkdFVF9IQU5ETEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHRhcmdldCBpbnRlcm5hbCBmaWxlIGlkZW50aWZpZXIgaXMgaW5jb3JyZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX1RBUkdFVF9IQU5ETEUgPSAxMTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfQ0FURUdPUllcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIElPQ1RMIGNhbGwgbWFkZSBieSB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbSBpcyBub3QgY29ycmVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9DQVRFR09SWSA9IDExNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9WRVJJRllfU1dJVENIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB2ZXJpZnktb24td3JpdGUgc3dpdGNoIHBhcmFtZXRlciB2YWx1ZSBpcyBub3QgY29ycmVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9WRVJJRllfU1dJVENIID0gMTE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfRFJJVkVSX0xFVkVMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29tbWFuZCByZXF1ZXN0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9EUklWRVJfTEVWRUwgPSAxMTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NBTExfTk9UX0lNUExFTUVOVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0FMTF9OT1RfSU1QTEVNRU5URUQgPSAxMjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFTV9USU1FT1VUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZW1hcGhvcmUgdGltZW91dCBwZXJpb2QgaGFzIGV4cGlyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFTV9USU1FT1VUID0gMTIxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkYXRhIGFyZWEgcGFzc2VkIHRvIGEgc3lzdGVtIGNhbGwgaXMgdG9vIHNtYWxsLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSID0gMTIyOyAvLyBkZGVycm9yXG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZW5hbWUsIGRpcmVjdG9yeSBuYW1lLCBvciB2b2x1bWUgbGFiZWwgc3ludGF4IGlzIGluY29ycmVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9OQU1FID0gMTIzOyAvLyBkZGVycm9yXG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfTEVWRUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN5c3RlbSBjYWxsIGxldmVsIGlzIG5vdCBjb3JyZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0xFVkVMID0gMTI0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19WT0xVTUVfTEFCRUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpc2sgaGFzIG5vIHZvbHVtZSBsYWJlbC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fVk9MVU1FX0xBQkVMID0gMTI1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NT0RfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgbW9kdWxlIGNvdWxkIG5vdCBiZSBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTU9EX05PVF9GT1VORCA9IDEyNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUFJPQ19OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBwcm9jZWR1cmUgY291bGQgbm90IGJlIGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUk9DX05PVF9GT1VORCA9IDEyNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV0FJVF9OT19DSElMRFJFTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGVyZSBhcmUgbm8gY2hpbGQgcHJvY2Vzc2VzIHRvIHdhaXQgZm9yLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XQUlUX05PX0NISUxEUkVOID0gMTI4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DSElMRF9OT1RfQ09NUExFVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlICUxIGFwcGxpY2F0aW9uIGNhbm5vdCBiZSBydW4gaW4gV2luMzIgbW9kZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0hJTERfTk9UX0NPTVBMRVRFID0gMTI5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ESVJFQ1RfQUNDRVNTX0hBTkRMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBdHRlbXB0IHRvIHVzZSBhIGZpbGUgaGFuZGxlIHRvIGFuIG9wZW4gZGlzayBwYXJ0aXRpb24gZm9yIGFuIG9wZXJhdGlvbiBvdGhlciB0aGFuIHJhdyBkaXNrIEkvTy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRElSRUNUX0FDQ0VTU19IQU5ETEUgPSAxMzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05FR0FUSVZFX1NFRUtcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBtb3ZlIHRoZSBmaWxlIHBvaW50ZXIgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05FR0FUSVZFX1NFRUsgPSAxMzE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFRUtfT05fREVWSUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIHBvaW50ZXIgY2Fubm90IGJlIHNldCBvbiB0aGUgc3BlY2lmaWVkIGRldmljZSBvciBmaWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRUVLX09OX0RFVklDRSA9IDEzMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVNfSk9JTl9UQVJHRVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBKT0lOIG9yIFNVQlNUIGNvbW1hbmQgY2Fubm90IGJlIHVzZWQgZm9yIGEgZHJpdmUgdGhhdCBjb250YWlucyBwcmV2aW91c2x5IGpvaW5lZCBkcml2ZXMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lTX0pPSU5fVEFSR0VUID0gMTMzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JU19KT0lORURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byB1c2UgYSBKT0lOIG9yIFNVQlNUIGNvbW1hbmQgb24gYSBkcml2ZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gam9pbmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JU19KT0lORUQgPSAxMzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lTX1NVQlNURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byB1c2UgYSBKT0lOIG9yIFNVQlNUIGNvbW1hbmQgb24gYSBkcml2ZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gc3Vic3RpdHV0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lTX1NVQlNURUQgPSAxMzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9KT0lORURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN5c3RlbSB0cmllZCB0byBkZWxldGUgdGhlIEpPSU4gb2YgYSBkcml2ZSB0aGF0IGlzIG5vdCBqb2luZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PVF9KT0lORUQgPSAxMzY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9TVUJTVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gdHJpZWQgdG8gZGVsZXRlIHRoZSBzdWJzdGl0dXRpb24gb2YgYSBkcml2ZSB0aGF0IGlzIG5vdCBzdWJzdGl0dXRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX1NVQlNURUQgPSAxMzc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0pPSU5fVE9fSk9JTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3lzdGVtIHRyaWVkIHRvIGpvaW4gYSBkcml2ZSB0byBhIGRpcmVjdG9yeSBvbiBhIGpvaW5lZCBkcml2ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSk9JTl9UT19KT0lOID0gMTM4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TVUJTVF9UT19TVUJTVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3lzdGVtIHRyaWVkIHRvIHN1YnN0aXR1dGUgYSBkcml2ZSB0byBhIGRpcmVjdG9yeSBvbiBhIHN1YnN0aXR1dGVkIGRyaXZlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TVUJTVF9UT19TVUJTVCA9IDEzOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSk9JTl9UT19TVUJTVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3lzdGVtIHRyaWVkIHRvIGpvaW4gYSBkcml2ZSB0byBhIGRpcmVjdG9yeSBvbiBhIHN1YnN0aXR1dGVkIGRyaXZlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9KT0lOX1RPX1NVQlNUID0gMTQwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TVUJTVF9UT19KT0lOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gdHJpZWQgdG8gU1VCU1QgYSBkcml2ZSB0byBhIGRpcmVjdG9yeSBvbiBhIGpvaW5lZCBkcml2ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1VCU1RfVE9fSk9JTiA9IDE0MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQlVTWV9EUklWRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3lzdGVtIGNhbm5vdCBwZXJmb3JtIGEgSk9JTiBvciBTVUJTVCBhdCB0aGlzIHRpbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JVU1lfRFJJVkUgPSAxNDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NBTUVfRFJJVkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN5c3RlbSBjYW5ub3Qgam9pbiBvciBzdWJzdGl0dXRlIGEgZHJpdmUgdG8gb3IgZm9yIGEgZGlyZWN0b3J5IG9uIHRoZSBzYW1lIGRyaXZlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TQU1FX0RSSVZFID0gMTQzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ESVJfTk9UX1JPT1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBpcyBub3QgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHJvb3QgZGlyZWN0b3J5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ESVJfTk9UX1JPT1QgPSAxNDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RJUl9OT1RfRU1QVFlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBpcyBub3QgZW1wdHkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RJUl9OT1RfRU1QVFkgPSAxNDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lTX1NVQlNUX1BBVEhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHBhdGggc3BlY2lmaWVkIGlzIGJlaW5nIHVzZWQgaW4gYSBzdWJzdGl0dXRlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JU19TVUJTVF9QQVRIID0gMTQ2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JU19KT0lOX1BBVEhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm90IGVub3VnaCByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSB0byBwcm9jZXNzIHRoaXMgY29tbWFuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVNfSk9JTl9QQVRIID0gMTQ3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9QQVRIX0JVU1lcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHBhdGggc3BlY2lmaWVkIGNhbm5vdCBiZSB1c2VkIGF0IHRoaXMgdGltZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUEFUSF9CVVNZID0gMTQ4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JU19TVUJTVF9UQVJHRVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBqb2luIG9yIHN1YnN0aXR1dGUgYSBkcml2ZSBmb3Igd2hpY2ggYSBkaXJlY3Rvcnkgb24gdGhlIGRyaXZlIGlzIHRoZSB0YXJnZXQgb2YgYSBwcmV2aW91cyBzdWJzdGl0dXRlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JU19TVUJTVF9UQVJHRVQgPSAxNDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NZU1RFTV9UUkFDRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTeXN0ZW0gdHJhY2UgaW5mb3JtYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQgaW4geW91ciBDT05GSUcuU1lTIGZpbGUsIG9yIHRyYWNpbmcgaXMgZGlzYWxsb3dlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1lTVEVNX1RSQUNFID0gMTUwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0VWRU5UX0NPVU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBudW1iZXIgb2Ygc3BlY2lmaWVkIHNlbWFwaG9yZSBldmVudHMgZm9yIERvc011eFNlbVdhaXQgaXMgbm90IGNvcnJlY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRVZFTlRfQ09VTlQgPSAxNTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1RPT19NQU5ZX01VWFdBSVRFUlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRG9zTXV4U2VtV2FpdCBkaWQgbm90IGV4ZWN1dGU7IHRvbyBtYW55IHNlbWFwaG9yZXMgYXJlIGFscmVhZHkgc2V0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9UT09fTUFOWV9NVVhXQUlURVJTID0gMTUyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0xJU1RfRk9STUFUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBEb3NNdXhTZW1XYWl0IGxpc3QgaXMgbm90IGNvcnJlY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfTElTVF9GT1JNQVQgPSAxNTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0xBQkVMX1RPT19MT05HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB2b2x1bWUgbGFiZWwgeW91IGVudGVyZWQgZXhjZWVkcyB0aGUgbGFiZWwgY2hhcmFjdGVyIGxpbWl0IG9mIHRoZSB0YXJnZXQgZmlsZSBzeXN0ZW0uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xBQkVMX1RPT19MT05HID0gMTU0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9UT09fTUFOWV9UQ0JTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCBjcmVhdGUgYW5vdGhlciB0aHJlYWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RPT19NQU5ZX1RDQlMgPSAxNTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NJR05BTF9SRUZVU0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZWNpcGllbnQgcHJvY2VzcyBoYXMgcmVmdXNlZCB0aGUgc2lnbmFsLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TSUdOQUxfUkVGVVNFRCA9IDE1NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRElTQ0FSREVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZWdtZW50IGlzIGFscmVhZHkgZGlzY2FyZGVkIGFuZCBjYW5ub3QgYmUgbG9ja2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ESVNDQVJERUQgPSAxNTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9MT0NLRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlZ21lbnQgaXMgYWxyZWFkeSB1bmxvY2tlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX0xPQ0tFRCA9IDE1ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQkFEX1RIUkVBRElEX0FERFJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGFkZHJlc3MgZm9yIHRoZSB0aHJlYWQgSUQgaXMgbm90IGNvcnJlY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9USFJFQURJRF9BRERSID0gMTU5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfQVJHVU1FTlRTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE9uZSBvciBtb3JlIGFyZ3VtZW50cyBhcmUgbm90IGNvcnJlY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9BUkdVTUVOVFMgPSAxNjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9QQVRITkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHBhdGggaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkFEX1BBVEhOQU1FID0gMTYxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TSUdOQUxfUEVORElOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHNpZ25hbCBpcyBhbHJlYWR5IHBlbmRpbmcuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NJR05BTF9QRU5ESU5HID0gMTYyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NQVhfVEhSRFNfUkVBQ0hFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBtb3JlIHRocmVhZHMgY2FuIGJlIGNyZWF0ZWQgaW4gdGhlIHN5c3RlbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTUFYX1RIUkRTX1JFQUNIRUQgPSAxNjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0xPQ0tfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuYWJsZSB0byBsb2NrIGEgcmVnaW9uIG9mIGEgZmlsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTE9DS19GQUlMRUQgPSAxNjc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JVU1lcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBpcyBpbiB1c2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JVU1kgPSAxNzA7IC8vIGRkZXJyb3JcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0FOQ0VMX1ZJT0xBVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGxvY2sgcmVxdWVzdCB3YXMgbm90IG91dHN0YW5kaW5nIGZvciB0aGUgc3VwcGxpZWQgY2FuY2VsIHJlZ2lvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0FOQ0VMX1ZJT0xBVElPTiA9IDE3MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQVRPTUlDX0xPQ0tTX05PVF9TVVBQT1JURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZpbGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgYXRvbWljIGNoYW5nZXMgdG8gdGhlIGxvY2sgdHlwZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQVRPTUlDX0xPQ0tTX05PVF9TVVBQT1JURUQgPSAxNzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfU0VHTUVOVF9OVU1CRVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN5c3RlbSBkZXRlY3RlZCBhIHNlZ21lbnQgbnVtYmVyIHRoYXQgd2FzIG5vdCBjb3JyZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX1NFR01FTlRfTlVNQkVSID0gMTgwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX09SRElOQUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gY2Fubm90IHJ1biAlMS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9PUkRJTkFMID0gMTgyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9BTFJFQURZX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgY3JlYXRlIGEgZmlsZSB3aGVuIHRoYXQgZmlsZSBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUxSRUFEWV9FWElTVFMgPSAxODM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfRkxBR19OVU1CRVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZsYWcgcGFzc2VkIGlzIG5vdCBjb3JyZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0ZMQUdfTlVNQkVSID0gMTg2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRU1fTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgc3lzdGVtIHNlbWFwaG9yZSBuYW1lIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFTV9OT1RfRk9VTkQgPSAxODc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfU1RBUlRJTkdfQ09ERVNFR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb3BlcmF0aW5nIHN5c3RlbSBjYW5ub3QgcnVuICUxLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX1NUQVJUSU5HX0NPREVTRUcgPSAxODg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfU1RBQ0tTRUdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gY2Fubm90IHJ1biAlMS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9TVEFDS1NFRyA9IDE4OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9NT0RVTEVUWVBFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbm5vdCBydW4gJTEuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfTU9EVUxFVFlQRSA9IDE5MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9FWEVfU0lHTkFUVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCBydW4gJTEgaW4gV2luMzIgbW9kZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9FWEVfU0lHTkFUVVJFID0gMTkxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9FWEVfTUFSS0VEX0lOVkFMSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gY2Fubm90IHJ1biAlMS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRVhFX01BUktFRF9JTlZBTElEID0gMTkyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfRVhFX0ZPUk1BVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICAlMSBpcyBub3QgYSB2YWxpZCBXaW4zMiBhcHBsaWNhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkFEX0VYRV9GT1JNQVQgPSAxOTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lURVJBVEVEX0RBVEFfRVhDRUVEU182NGtcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gY2Fubm90IHJ1biAlMS5cbi8vXG4vLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuZXhwb3J0IGNvbnN0IEVSUk9SX0lURVJBVEVEX0RBVEFfRVhDRUVEU182NGsgPSAxOTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfTUlOQUxMT0NTSVpFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbm5vdCBydW4gJTEuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfTUlOQUxMT0NTSVpFID0gMTk1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EWU5MSU5LX0ZST01fSU5WQUxJRF9SSU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbm5vdCBydW4gdGhpcyBhcHBsaWNhdGlvbiBwcm9ncmFtLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EWU5MSU5LX0ZST01fSU5WQUxJRF9SSU5HID0gMTk2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JT1BMX05PVF9FTkFCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIG5vdCBwcmVzZW50bHkgY29uZmlndXJlZCB0byBydW4gdGhpcyBhcHBsaWNhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU9QTF9OT1RfRU5BQkxFRCA9IDE5NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9TRUdEUExcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gY2Fubm90IHJ1biAlMS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9TRUdEUEwgPSAxOTg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FVVE9EQVRBU0VHX0VYQ0VFRFNfNjRrXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpbmcgc3lzdGVtIGNhbm5vdCBydW4gdGhpcyBhcHBsaWNhdGlvbiBwcm9ncmFtLlxuLy9cbi8vIGRlbm8tbGludC1pZ25vcmUgY2FtZWxjYXNlXG5leHBvcnQgY29uc3QgRVJST1JfQVVUT0RBVEFTRUdfRVhDRUVEU182NGsgPSAxOTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JJTkcyU0VHX01VU1RfQkVfTU9WQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY29kZSBzZWdtZW50IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gNjRLLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SSU5HMlNFR19NVVNUX0JFX01PVkFCTEUgPSAyMDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFTE9DX0NIQUlOX1hFRURTX1NFR0xJTVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb3BlcmF0aW5nIHN5c3RlbSBjYW5ub3QgcnVuICUxLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRUxPQ19DSEFJTl9YRUVEU19TRUdMSU0gPSAyMDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lORkxPT1BfSU5fUkVMT0NfQ0hBSU5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGluZyBzeXN0ZW0gY2Fubm90IHJ1biAlMS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5GTE9PUF9JTl9SRUxPQ19DSEFJTiA9IDIwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRU5WVkFSX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3lzdGVtIGNvdWxkIG5vdCBmaW5kIHRoZSBlbnZpcm9ubWVudCBvcHRpb24gdGhhdCB3YXMgZW50ZXJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRU5WVkFSX05PVF9GT1VORCA9IDIwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fU0lHTkFMX1NFTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gcHJvY2VzcyBpbiB0aGUgY29tbWFuZCBzdWJ0cmVlIGhhcyBhIHNpZ25hbCBoYW5kbGVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19TSUdOQUxfU0VOVCA9IDIwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRklMRU5BTUVfRVhDRURfUkFOR0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZpbGVuYW1lIG9yIGV4dGVuc2lvbiBpcyB0b28gbG9uZy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRklMRU5BTUVfRVhDRURfUkFOR0UgPSAyMDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JJTkcyX1NUQUNLX0lOX1VTRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmluZyAyIHN0YWNrIGlzIGluIHVzZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUklORzJfU1RBQ0tfSU5fVVNFID0gMjA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NRVRBX0VYUEFOU0lPTl9UT09fTE9OR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZ2xvYmFsIGZpbGVuYW1lIGNoYXJhY3RlcnMsICogb3IgPywgYXJlIGVudGVyZWQgaW5jb3JyZWN0bHkgb3IgdG9vIG1hbnkgZ2xvYmFsIGZpbGVuYW1lIGNoYXJhY3RlcnMgYXJlIHNwZWNpZmllZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTUVUQV9FWFBBTlNJT05fVE9PX0xPTkcgPSAyMDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfU0lHTkFMX05VTUJFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2lnbmFsIGJlaW5nIHBvc3RlZCBpcyBub3QgY29ycmVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9TSUdOQUxfTlVNQkVSID0gMjA5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9USFJFQURfMV9JTkFDVElWRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2lnbmFsIGhhbmRsZXIgY2Fubm90IGJlIHNldC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVEhSRUFEXzFfSU5BQ1RJVkUgPSAyMTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0xPQ0tFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2VnbWVudCBpcyBsb2NrZWQgYW5kIGNhbm5vdCBiZSByZWFsbG9jYXRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTE9DS0VEID0gMjEyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9UT09fTUFOWV9NT0RVTEVTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRvbyBtYW55IGR5bmFtaWMtbGluayBtb2R1bGVzIGFyZSBhdHRhY2hlZCB0byB0aGlzIHByb2dyYW0gb3IgZHluYW1pYy1saW5rIG1vZHVsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVE9PX01BTllfTU9EVUxFUyA9IDIxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTkVTVElOR19OT1RfQUxMT1dFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgbmVzdCBjYWxscyB0byBMb2FkTW9kdWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ORVNUSU5HX05PVF9BTExPV0VEID0gMjE1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9FWEVfTUFDSElORV9UWVBFX01JU01BVENIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBpbWFnZSBmaWxlICUxIGlzIHZhbGlkLCBidXQgaXMgZm9yIGEgbWFjaGluZSB0eXBlIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgbWFjaGluZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRVhFX01BQ0hJTkVfVFlQRV9NSVNNQVRDSCA9IDIxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRVhFX0NBTk5PVF9NT0RJRllfU0lHTkVEX0JJTkFSWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgaW1hZ2UgZmlsZSAlMSBpcyBzaWduZWQsIHVuYWJsZSB0byBtb2RpZnkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VYRV9DQU5OT1RfTU9ESUZZX1NJR05FRF9CSU5BUlkgPSAyMTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0VYRV9DQU5OT1RfTU9ESUZZX1NUUk9OR19TSUdORURfQklOQVJZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBpbWFnZSBmaWxlICUxIGlzIHN0cm9uZyBzaWduZWQsIHVuYWJsZSB0byBtb2RpZnkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VYRV9DQU5OT1RfTU9ESUZZX1NUUk9OR19TSUdORURfQklOQVJZID0gMjE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfUElQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcGlwZSBzdGF0ZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfUElQRSA9IDIzMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUElQRV9CVVNZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFsbCBwaXBlIGluc3RhbmNlcyBhcmUgYnVzeS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUElQRV9CVVNZID0gMjMxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19EQVRBXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBwaXBlIGlzIGJlaW5nIGNsb3NlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fREFUQSA9IDIzMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUElQRV9OT1RfQ09OTkVDVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIHByb2Nlc3MgaXMgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUgcGlwZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUElQRV9OT1RfQ09OTkVDVEVEID0gMjMzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NT1JFX0RBVEFcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTW9yZSBkYXRhIGlzIGF2YWlsYWJsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTU9SRV9EQVRBID0gMjM0OyAvLyBkZGVycm9yXG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1ZDX0RJU0NPTk5FQ1RFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2Vzc2lvbiB3YXMgY2FuY2VsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1ZDX0RJU0NPTk5FQ1RFRCA9IDI0MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9FQV9OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWUgd2FzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRUFfTkFNRSA9IDI1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRUFfTElTVF9JTkNPTlNJU1RFTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIGluY29uc2lzdGVudC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRUFfTElTVF9JTkNPTlNJU1RFTlQgPSAyNTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdBSVRfVElNRU9VVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgd2FpdCBvcGVyYXRpb24gdGltZWQgb3V0LlxuLy9cbmV4cG9ydCBjb25zdCBXQUlUX1RJTUVPVVQgPSAyNTg7IC8vIGRkZXJyb3JcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fTU9SRV9JVEVNU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19NT1JFX0lURU1TID0gMjU5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DQU5OT1RfQ09QWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY29weSBmdW5jdGlvbnMgY2Fubm90IGJlIHVzZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NBTk5PVF9DT1BZID0gMjY2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ESVJFQ1RPUllcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBuYW1lIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RJUkVDVE9SWSA9IDI2NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRUFTX0RJRE5UX0ZJVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZXh0ZW5kZWQgYXR0cmlidXRlcyBkaWQgbm90IGZpdCBpbiB0aGUgYnVmZmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9FQVNfRElETlRfRklUID0gMjc1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9FQV9GSUxFX0NPUlJVUFRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGV4dGVuZGVkIGF0dHJpYnV0ZSBmaWxlIG9uIHRoZSBtb3VudGVkIGZpbGUgc3lzdGVtIGlzIGNvcnJ1cHQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VBX0ZJTEVfQ09SUlVQVCA9IDI3NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRUFfVEFCTEVfRlVMTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZXh0ZW5kZWQgYXR0cmlidXRlIHRhYmxlIGZpbGUgaXMgZnVsbC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRUFfVEFCTEVfRlVMTCA9IDI3NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9FQV9IQU5ETEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRUFfSEFORExFID0gMjc4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9FQVNfTk9UX1NVUFBPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbW91bnRlZCBmaWxlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuZGVkIGF0dHJpYnV0ZXMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VBU19OT1RfU1VQUE9SVEVEID0gMjgyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT1RfT1dORVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQXR0ZW1wdCB0byByZWxlYXNlIG11dGV4IG5vdCBvd25lZCBieSBjYWxsZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PVF9PV05FUiA9IDI4ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVE9PX01BTllfUE9TVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVG9vIG1hbnkgcG9zdHMgd2VyZSBtYWRlIHRvIGEgc2VtYXBob3JlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9UT09fTUFOWV9QT1NUUyA9IDI5ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUEFSVElBTF9DT1BZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE9ubHkgcGFydCBvZiBhIFJlYWRQcm9jZXNzTWVtb3J5IG9yIFdyaXRlUHJvY2Vzc01lbW9yeSByZXF1ZXN0IHdhcyBjb21wbGV0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BBUlRJQUxfQ09QWSA9IDI5OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfT1BMT0NLX05PVF9HUkFOVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGxvY2sgcmVxdWVzdCBpcyBkZW5pZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX09QTE9DS19OT1RfR1JBTlRFRCA9IDMwMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9PUExPQ0tfUFJPVE9DT0xcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gaW52YWxpZCBvcGxvY2sgYWNrbm93bGVkZ21lbnQgd2FzIHJlY2VpdmVkIGJ5IHRoZSBzeXN0ZW0uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfT1BMT0NLX1BST1RPQ09MID0gMzAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ESVNLX1RPT19GUkFHTUVOVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB2b2x1bWUgaXMgdG9vIGZyYWdtZW50ZWQgdG8gY29tcGxldGUgdGhpcyBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RJU0tfVE9PX0ZSQUdNRU5URUQgPSAzMDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RFTEVURV9QRU5ESU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQgYmVjYXVzZSBpdCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZWxldGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ERUxFVEVfUEVORElORyA9IDMwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTVJfTUlEX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3lzdGVtIGNhbm5vdCBmaW5kIG1lc3NhZ2UgdGV4dCBmb3IgbWVzc2FnZSBudW1iZXIgMHglMSBpbiB0aGUgbWVzc2FnZSBmaWxlIGZvciAlMi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTVJfTUlEX05PVF9GT1VORCA9IDMxNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0NPUEVfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzY29wZSBzcGVjaWZpZWQgd2FzIG5vdCBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0NPUEVfTk9UX0ZPVU5EID0gMzE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0FERFJFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQXR0ZW1wdCB0byBhY2Nlc3MgaW52YWxpZCBhZGRyZXNzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0FERFJFU1MgPSA0ODc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FSSVRITUVUSUNfT1ZFUkZMT1dcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQXJpdGhtZXRpYyByZXN1bHQgZXhjZWVkZWQgMzIgYml0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQVJJVEhNRVRJQ19PVkVSRkxPVyA9IDUzNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUElQRV9DT05ORUNURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgaXMgYSBwcm9jZXNzIG9uIG90aGVyIGVuZCBvZiB0aGUgcGlwZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUElQRV9DT05ORUNURUQgPSA1MzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BJUEVfTElTVEVOSU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFdhaXRpbmcgZm9yIGEgcHJvY2VzcyB0byBvcGVuIHRoZSBvdGhlciBlbmQgb2YgdGhlIHBpcGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BJUEVfTElTVEVOSU5HID0gNTM2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9FQV9BQ0NFU1NfREVOSUVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFjY2VzcyB0byB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIHdhcyBkZW5pZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VBX0FDQ0VTU19ERU5JRUQgPSA5OTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX09QRVJBVElPTl9BQk9SVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBJL08gb3BlcmF0aW9uIGhhcyBiZWVuIGFib3J0ZWQgYmVjYXVzZSBvZiBlaXRoZXIgYSB0aHJlYWQgZXhpdCBvciBhbiBhcHBsaWNhdGlvbiByZXF1ZXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9PUEVSQVRJT05fQUJPUlRFRCA9IDk5NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU9fSU5DT01QTEVURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBPdmVybGFwcGVkIEkvTyBldmVudCBpcyBub3QgaW4gYSBzaWduYWxlZCBzdGF0ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU9fSU5DT01QTEVURSA9IDk5NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU9fUEVORElOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBPdmVybGFwcGVkIEkvTyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lPX1BFTkRJTkcgPSA5OTc7IC8vIGRkZXJyb3JcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9BQ0NFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBhY2Nlc3MgdG8gbWVtb3J5IGxvY2F0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT0FDQ0VTUyA9IDk5ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1dBUEVSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVycm9yIHBlcmZvcm1pbmcgaW5wYWdlIG9wZXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1dBUEVSUk9SID0gOTk5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TVEFDS19PVkVSRkxPV1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBSZWN1cnNpb24gdG9vIGRlZXA7IHRoZSBzdGFjayBvdmVyZmxvd2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TVEFDS19PVkVSRkxPVyA9IDEwMDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfTUVTU0FHRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgd2luZG93IGNhbm5vdCBhY3Qgb24gdGhlIHNlbnQgbWVzc2FnZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9NRVNTQUdFID0gMTAwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0FOX05PVF9DT01QTEVURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgY29tcGxldGUgdGhpcyBmdW5jdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0FOX05PVF9DT01QTEVURSA9IDEwMDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfRkxBR1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBmbGFncy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9GTEFHUyA9IDEwMDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VOUkVDT0dOSVpFRF9WT0xVTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHZvbHVtZSBkb2VzIG5vdCBjb250YWluIGEgcmVjb2duaXplZCBmaWxlIHN5c3RlbS5cbi8vICBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgYWxsIHJlcXVpcmVkIGZpbGUgc3lzdGVtIGRyaXZlcnMgYXJlIGxvYWRlZCBhbmQgdGhhdCB0aGUgdm9sdW1lIGlzIG5vdCBjb3JydXB0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOUkVDT0dOSVpFRF9WT0xVTUUgPSAxMDA1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9GSUxFX0lOVkFMSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHZvbHVtZSBmb3IgYSBmaWxlIGhhcyBiZWVuIGV4dGVybmFsbHkgYWx0ZXJlZCBzbyB0aGF0IHRoZSBvcGVuZWQgZmlsZSBpcyBubyBsb25nZXIgdmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0ZJTEVfSU5WQUxJRCA9IDEwMDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0ZVTExTQ1JFRU5fTU9ERVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkIGluIGZ1bGwtc2NyZWVuIG1vZGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0ZVTExTQ1JFRU5fTU9ERSA9IDEwMDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX1RPS0VOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gcmVmZXJlbmNlIGEgdG9rZW4gdGhhdCBkb2VzIG5vdCBleGlzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fVE9LRU4gPSAxMDA4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQUREQlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY29uZmlndXJhdGlvbiByZWdpc3RyeSBkYXRhYmFzZSBpcyBjb3JydXB0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQUREQiA9IDEwMDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBREtFWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY29uZmlndXJhdGlvbiByZWdpc3RyeSBrZXkgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkFES0VZID0gMTAxMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0FOVE9QRU5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0cnkga2V5IGNvdWxkIG5vdCBiZSBvcGVuZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NBTlRPUEVOID0gMTAxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0FOVFJFQURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0cnkga2V5IGNvdWxkIG5vdCBiZSByZWFkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DQU5UUkVBRCA9IDEwMTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NBTlRXUklURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY29uZmlndXJhdGlvbiByZWdpc3RyeSBrZXkgY291bGQgbm90IGJlIHdyaXR0ZW4uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NBTlRXUklURSA9IDEwMTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFR0lTVFJZX1JFQ09WRVJFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBPbmUgb2YgdGhlIGZpbGVzIGluIHRoZSByZWdpc3RyeSBkYXRhYmFzZSBoYWQgdG8gYmUgcmVjb3ZlcmVkIGJ5IHVzZSBvZiBhIGxvZyBvciBhbHRlcm5hdGUgY29weS4gVGhlIHJlY292ZXJ5IHdhcyBzdWNjZXNzZnVsLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRUdJU1RSWV9SRUNPVkVSRUQgPSAxMDE0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRUdJU1RSWV9DT1JSVVBUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZWdpc3RyeSBpcyBjb3JydXB0ZWQuIFRoZSBzdHJ1Y3R1cmUgb2Ygb25lIG9mIHRoZSBmaWxlcyBjb250YWluaW5nIHJlZ2lzdHJ5IGRhdGEgaXMgY29ycnVwdGVkLCBvciB0aGUgc3lzdGVtJ3MgbWVtb3J5IGltYWdlIG9mIHRoZSBmaWxlIGlzIGNvcnJ1cHRlZCwgb3IgdGhlIGZpbGUgY291bGQgbm90IGJlIHJlY292ZXJlZCBiZWNhdXNlIHRoZSBhbHRlcm5hdGUgY29weSBvciBsb2cgd2FzIGFic2VudCBvciBjb3JydXB0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFR0lTVFJZX0NPUlJVUFQgPSAxMDE1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRUdJU1RSWV9JT19GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gSS9PIG9wZXJhdGlvbiBpbml0aWF0ZWQgYnkgdGhlIHJlZ2lzdHJ5IGZhaWxlZCB1bnJlY292ZXJhYmx5LiBUaGUgcmVnaXN0cnkgY291bGQgbm90IHJlYWQgaW4sIG9yIHdyaXRlIG91dCwgb3IgZmx1c2gsIG9uZSBvZiB0aGUgZmlsZXMgdGhhdCBjb250YWluIHRoZSBzeXN0ZW0ncyBpbWFnZSBvZiB0aGUgcmVnaXN0cnkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFR0lTVFJZX0lPX0ZBSUxFRCA9IDEwMTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9SRUdJU1RSWV9GSUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gaGFzIGF0dGVtcHRlZCB0byBsb2FkIG9yIHJlc3RvcmUgYSBmaWxlIGludG8gdGhlIHJlZ2lzdHJ5LCBidXQgdGhlIHNwZWNpZmllZCBmaWxlIGlzIG5vdCBpbiBhIHJlZ2lzdHJ5IGZpbGUgZm9ybWF0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RfUkVHSVNUUllfRklMRSA9IDEwMTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0tFWV9ERUxFVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIElsbGVnYWwgb3BlcmF0aW9uIGF0dGVtcHRlZCBvbiBhIHJlZ2lzdHJ5IGtleSB0aGF0IGhhcyBiZWVuIG1hcmtlZCBmb3IgZGVsZXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0tFWV9ERUxFVEVEID0gMTAxODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fTE9HX1NQQUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFN5c3RlbSBjb3VsZCBub3QgYWxsb2NhdGUgdGhlIHJlcXVpcmVkIHNwYWNlIGluIGEgcmVnaXN0cnkgbG9nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19MT0dfU1BBQ0UgPSAxMDE5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9LRVlfSEFTX0NISUxEUkVOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCBjcmVhdGUgYSBzeW1ib2xpYyBsaW5rIGluIGEgcmVnaXN0cnkga2V5IHRoYXQgYWxyZWFkeSBoYXMgc3Via2V5cyBvciB2YWx1ZXMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0tFWV9IQVNfQ0hJTERSRU4gPSAxMDIwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DSElMRF9NVVNUX0JFX1ZPTEFUSUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCBjcmVhdGUgYSBzdGFibGUgc3Via2V5IHVuZGVyIGEgdm9sYXRpbGUgcGFyZW50IGtleS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0hJTERfTVVTVF9CRV9WT0xBVElMRSA9IDEwMjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVElGWV9FTlVNX0RJUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIG5vdGlmeSBjaGFuZ2UgcmVxdWVzdCBpcyBiZWluZyBjb21wbGV0ZWQgYW5kIHRoZSBpbmZvcm1hdGlvbiBpcyBub3QgYmVpbmcgcmV0dXJuZWQgaW4gdGhlIGNhbGxlcidzIGJ1ZmZlci4gVGhlIGNhbGxlciBub3cgbmVlZHMgdG8gZW51bWVyYXRlIHRoZSBmaWxlcyB0byBmaW5kIHRoZSBjaGFuZ2VzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RJRllfRU5VTV9ESVIgPSAxMDIyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ERVBFTkRFTlRfU0VSVklDRVNfUlVOTklOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHN0b3AgY29udHJvbCBoYXMgYmVlbiBzZW50IHRvIGEgc2VydmljZSB0aGF0IG90aGVyIHJ1bm5pbmcgc2VydmljZXMgYXJlIGRlcGVuZGVudCBvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVQRU5ERU5UX1NFUlZJQ0VTX1JVTk5JTkcgPSAxMDUxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1NFUlZJQ0VfQ09OVFJPTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIGNvbnRyb2wgaXMgbm90IHZhbGlkIGZvciB0aGlzIHNlcnZpY2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfU0VSVklDRV9DT05UUk9MID0gMTA1MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VSVklDRV9SRVFVRVNUX1RJTUVPVVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZpY2UgZGlkIG5vdCByZXNwb25kIHRvIHRoZSBzdGFydCBvciBjb250cm9sIHJlcXVlc3QgaW4gYSB0aW1lbHkgZmFzaGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VSVklDRV9SRVFVRVNUX1RJTUVPVVQgPSAxMDUzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRVJWSUNFX05PX1RIUkVBRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHRocmVhZCBjb3VsZCBub3QgYmUgY3JlYXRlZCBmb3IgdGhlIHNlcnZpY2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFUlZJQ0VfTk9fVEhSRUFEID0gMTA1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VSVklDRV9EQVRBQkFTRV9MT0NLRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZpY2UgZGF0YWJhc2UgaXMgbG9ja2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRVJWSUNFX0RBVEFCQVNFX0xPQ0tFRCA9IDEwNTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFUlZJQ0VfQUxSRUFEWV9SVU5OSU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlIGlzIGFscmVhZHkgcnVubmluZy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VSVklDRV9BTFJFQURZX1JVTk5JTkcgPSAxMDU2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1NFUlZJQ0VfQUNDT1VOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYWNjb3VudCBuYW1lIGlzIGludmFsaWQgb3IgZG9lcyBub3QgZXhpc3QsIG9yIHRoZSBwYXNzd29yZCBpcyBpbnZhbGlkIGZvciB0aGUgYWNjb3VudCBuYW1lIHNwZWNpZmllZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9TRVJWSUNFX0FDQ09VTlQgPSAxMDU3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRVJWSUNFX0RJU0FCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZXJ2aWNlIGNhbm5vdCBiZSBzdGFydGVkLCBlaXRoZXIgYmVjYXVzZSBpdCBpcyBkaXNhYmxlZCBvciBiZWNhdXNlIGl0IGhhcyBubyBlbmFibGVkIGRldmljZXMgYXNzb2NpYXRlZCB3aXRoIGl0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRVJWSUNFX0RJU0FCTEVEID0gMTA1ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0lSQ1VMQVJfREVQRU5ERU5DWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDaXJjdWxhciBzZXJ2aWNlIGRlcGVuZGVuY3kgd2FzIHNwZWNpZmllZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0lSQ1VMQVJfREVQRU5ERU5DWSA9IDEwNTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFUlZJQ0VfRE9FU19OT1RfRVhJU1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBzZXJ2aWNlIGRvZXMgbm90IGV4aXN0IGFzIGFuIGluc3RhbGxlZCBzZXJ2aWNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRVJWSUNFX0RPRVNfTk9UX0VYSVNUID0gMTA2MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VSVklDRV9DQU5OT1RfQUNDRVBUX0NUUkxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZpY2UgY2Fubm90IGFjY2VwdCBjb250cm9sIG1lc3NhZ2VzIGF0IHRoaXMgdGltZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VSVklDRV9DQU5OT1RfQUNDRVBUX0NUUkwgPSAxMDYxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRVJWSUNFX05PVF9BQ1RJVkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZpY2UgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFUlZJQ0VfTk9UX0FDVElWRSA9IDEwNjI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0ZBSUxFRF9TRVJWSUNFX0NPTlRST0xMRVJfQ09OTkVDVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2VydmljZSBwcm9jZXNzIGNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBzZXJ2aWNlIGNvbnRyb2xsZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0ZBSUxFRF9TRVJWSUNFX0NPTlRST0xMRVJfQ09OTkVDVCA9IDEwNjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0VYQ0VQVElPTl9JTl9TRVJWSUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiB0aGUgc2VydmljZSB3aGVuIGhhbmRsaW5nIHRoZSBjb250cm9sIHJlcXVlc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VYQ0VQVElPTl9JTl9TRVJWSUNFID0gMTA2NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREFUQUJBU0VfRE9FU19OT1RfRVhJU1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRhdGFiYXNlIHNwZWNpZmllZCBkb2VzIG5vdCBleGlzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREFUQUJBU0VfRE9FU19OT1RfRVhJU1QgPSAxMDY1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRVJWSUNFX1NQRUNJRklDX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZXJ2aWNlIGhhcyByZXR1cm5lZCBhIHNlcnZpY2Utc3BlY2lmaWMgZXJyb3IgY29kZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VSVklDRV9TUEVDSUZJQ19FUlJPUiA9IDEwNjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BST0NFU1NfQUJPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcHJvY2VzcyB0ZXJtaW5hdGVkIHVuZXhwZWN0ZWRseS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUFJPQ0VTU19BQk9SVEVEID0gMTA2NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VSVklDRV9ERVBFTkRFTkNZX0ZBSUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRlcGVuZGVuY3kgc2VydmljZSBvciBncm91cCBmYWlsZWQgdG8gc3RhcnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFUlZJQ0VfREVQRU5ERU5DWV9GQUlMID0gMTA2ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VSVklDRV9MT0dPTl9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZpY2UgZGlkIG5vdCBzdGFydCBkdWUgdG8gYSBsb2dvbiBmYWlsdXJlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRVJWSUNFX0xPR09OX0ZBSUxFRCA9IDEwNjk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFUlZJQ0VfU1RBUlRfSEFOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBZnRlciBzdGFydGluZywgdGhlIHNlcnZpY2UgaHVuZyBpbiBhIHN0YXJ0LXBlbmRpbmcgc3RhdGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFUlZJQ0VfU1RBUlRfSEFORyA9IDEwNzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfU0VSVklDRV9MT0NLXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgc2VydmljZSBkYXRhYmFzZSBsb2NrIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfU0VSVklDRV9MT0NLID0gMTA3MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VSVklDRV9NQVJLRURfRk9SX0RFTEVURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHNlcnZpY2UgaGFzIGJlZW4gbWFya2VkIGZvciBkZWxldGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VSVklDRV9NQVJLRURfRk9SX0RFTEVURSA9IDEwNzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFUlZJQ0VfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgc2VydmljZSBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VSVklDRV9FWElTVFMgPSAxMDczO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9BTFJFQURZX1JVTk5JTkdfTEtHXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gaXMgY3VycmVudGx5IHJ1bm5pbmcgd2l0aCB0aGUgbGFzdC1rbm93bi1nb29kIGNvbmZpZ3VyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0FMUkVBRFlfUlVOTklOR19MS0cgPSAxMDc0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRVJWSUNFX0RFUEVOREVOQ1lfREVMRVRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGVwZW5kZW5jeSBzZXJ2aWNlIGRvZXMgbm90IGV4aXN0IG9yIGhhcyBiZWVuIG1hcmtlZCBmb3IgZGVsZXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFUlZJQ0VfREVQRU5ERU5DWV9ERUxFVEVEID0gMTA3NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQk9PVF9BTFJFQURZX0FDQ0VQVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjdXJyZW50IGJvb3QgaGFzIGFscmVhZHkgYmVlbiBhY2NlcHRlZCBmb3IgdXNlIGFzIHRoZSBsYXN0LWtub3duLWdvb2QgY29udHJvbCBzZXQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JPT1RfQUxSRUFEWV9BQ0NFUFRFRCA9IDEwNzY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFUlZJQ0VfTkVWRVJfU1RBUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBhdHRlbXB0cyB0byBzdGFydCB0aGUgc2VydmljZSBoYXZlIGJlZW4gbWFkZSBzaW5jZSB0aGUgbGFzdCBib290LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRVJWSUNFX05FVkVSX1NUQVJURUQgPSAxMDc3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EVVBMSUNBVEVfU0VSVklDRV9OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuYW1lIGlzIGFscmVhZHkgaW4gdXNlIGFzIGVpdGhlciBhIHNlcnZpY2UgbmFtZSBvciBhIHNlcnZpY2UgZGlzcGxheSBuYW1lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EVVBMSUNBVEVfU0VSVklDRV9OQU1FID0gMTA3ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRElGRkVSRU5UX1NFUlZJQ0VfQUNDT1VOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYWNjb3VudCBzcGVjaWZpZWQgZm9yIHRoaXMgc2VydmljZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgYWNjb3VudCBzcGVjaWZpZWQgZm9yIG90aGVyIHNlcnZpY2VzIHJ1bm5pbmcgaW4gdGhlIHNhbWUgcHJvY2Vzcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRElGRkVSRU5UX1NFUlZJQ0VfQUNDT1VOVCA9IDEwNzk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NBTk5PVF9ERVRFQ1RfRFJJVkVSX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRmFpbHVyZSBhY3Rpb25zIGNhbiBvbmx5IGJlIHNldCBmb3IgV2luMzIgc2VydmljZXMsIG5vdCBmb3IgZHJpdmVycy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0FOTk9UX0RFVEVDVF9EUklWRVJfRkFJTFVSRSA9IDEwODA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NBTk5PVF9ERVRFQ1RfUFJPQ0VTU19BQk9SVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIHNlcnZpY2UgcnVucyBpbiB0aGUgc2FtZSBwcm9jZXNzIGFzIHRoZSBzZXJ2aWNlIGNvbnRyb2wgbWFuYWdlci5cbi8vICBUaGVyZWZvcmUsIHRoZSBzZXJ2aWNlIGNvbnRyb2wgbWFuYWdlciBjYW5ub3QgdGFrZSBhY3Rpb24gaWYgdGhpcyBzZXJ2aWNlJ3MgcHJvY2VzcyB0ZXJtaW5hdGVzIHVuZXhwZWN0ZWRseS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0FOTk9UX0RFVEVDVF9QUk9DRVNTX0FCT1JUID0gMTA4MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fUkVDT1ZFUllfUFJPR1JBTVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyByZWNvdmVyeSBwcm9ncmFtIGhhcyBiZWVuIGNvbmZpZ3VyZWQgZm9yIHRoaXMgc2VydmljZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fUkVDT1ZFUllfUFJPR1JBTSA9IDEwODI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFUlZJQ0VfTk9UX0lOX0VYRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZXhlY3V0YWJsZSBwcm9ncmFtIHRoYXQgdGhpcyBzZXJ2aWNlIGlzIGNvbmZpZ3VyZWQgdG8gcnVuIGluIGRvZXMgbm90IGltcGxlbWVudCB0aGUgc2VydmljZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VSVklDRV9OT1RfSU5fRVhFID0gMTA4MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX1NBRkVCT09UX1NFUlZJQ0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBzZXJ2aWNlIGNhbm5vdCBiZSBzdGFydGVkIGluIFNhZmUgTW9kZVxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RfU0FGRUJPT1RfU0VSVklDRSA9IDEwODQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0VORF9PRl9NRURJQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcGh5c2ljYWwgZW5kIG9mIHRoZSB0YXBlIGhhcyBiZWVuIHJlYWNoZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VORF9PRl9NRURJQSA9IDExMDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0ZJTEVNQVJLX0RFVEVDVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgdGFwZSBhY2Nlc3MgcmVhY2hlZCBhIGZpbGVtYXJrLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9GSUxFTUFSS19ERVRFQ1RFRCA9IDExMDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JFR0lOTklOR19PRl9NRURJQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYmVnaW5uaW5nIG9mIHRoZSB0YXBlIG9yIGEgcGFydGl0aW9uIHdhcyBlbmNvdW50ZXJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkVHSU5OSU5HX09GX01FRElBID0gMTEwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VUTUFSS19ERVRFQ1RFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHRhcGUgYWNjZXNzIHJlYWNoZWQgdGhlIGVuZCBvZiBhIHNldCBvZiBmaWxlcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VUTUFSS19ERVRFQ1RFRCA9IDExMDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX0RBVEFfREVURUNURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gbW9yZSBkYXRhIGlzIG9uIHRoZSB0YXBlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19EQVRBX0RFVEVDVEVEID0gMTEwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUEFSVElUSU9OX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGFwZSBjb3VsZCBub3QgYmUgcGFydGl0aW9uZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BBUlRJVElPTl9GQUlMVVJFID0gMTEwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9CTE9DS19MRU5HVEhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgV2hlbiBhY2Nlc3NpbmcgYSBuZXcgdGFwZSBvZiBhIG11bHRpdm9sdW1lIHBhcnRpdGlvbiwgdGhlIGN1cnJlbnQgYmxvY2sgc2l6ZSBpcyBpbmNvcnJlY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfQkxPQ0tfTEVOR1RIID0gMTEwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVWSUNFX05PVF9QQVJUSVRJT05FRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUYXBlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbiBjb3VsZCBub3QgYmUgZm91bmQgd2hlbiBsb2FkaW5nIGEgdGFwZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVWSUNFX05PVF9QQVJUSVRJT05FRCA9IDExMDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VOQUJMRV9UT19MT0NLX01FRElBXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuYWJsZSB0byBsb2NrIHRoZSBtZWRpYSBlamVjdCBtZWNoYW5pc20uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOQUJMRV9UT19MT0NLX01FRElBID0gMTEwODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5BQkxFX1RPX1VOTE9BRF9NRURJQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBVbmFibGUgdG8gdW5sb2FkIHRoZSBtZWRpYS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVU5BQkxFX1RPX1VOTE9BRF9NRURJQSA9IDExMDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX01FRElBX0NIQU5HRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1lZGlhIGluIHRoZSBkcml2ZSBtYXkgaGF2ZSBjaGFuZ2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9NRURJQV9DSEFOR0VEID0gMTExMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQlVTX1JFU0VUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBJL08gYnVzIHdhcyByZXNldC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQlVTX1JFU0VUID0gMTExMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fTUVESUFfSU5fRFJJVkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gbWVkaWEgaW4gZHJpdmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX01FRElBX0lOX0RSSVZFID0gMTExMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fVU5JQ09ERV9UUkFOU0xBVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBtYXBwaW5nIGZvciB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgZXhpc3RzIGluIHRoZSB0YXJnZXQgbXVsdGktYnl0ZSBjb2RlIHBhZ2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1VOSUNPREVfVFJBTlNMQVRJT04gPSAxMTEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ETExfSU5JVF9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBkeW5hbWljIGxpbmsgbGlicmFyeSAoRExMKSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZhaWxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRExMX0lOSVRfRkFJTEVEID0gMTExNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0hVVERPV05fSU5fUFJPR1JFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBzeXN0ZW0gc2h1dGRvd24gaXMgaW4gcHJvZ3Jlc3MuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NIVVRET1dOX0lOX1BST0dSRVNTID0gMTExNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fU0hVVERPV05fSU5fUFJPR1JFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIGFib3J0IHRoZSBzeXN0ZW0gc2h1dGRvd24gYmVjYXVzZSBubyBzaHV0ZG93biB3YXMgaW4gcHJvZ3Jlc3MuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1NIVVRET1dOX0lOX1BST0dSRVNTID0gMTExNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU9fREVWSUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0IGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSBvZiBhbiBJL08gZGV2aWNlIGVycm9yLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JT19ERVZJQ0UgPSAxMTE3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRVJJQUxfTk9fREVWSUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIHNlcmlhbCBkZXZpY2Ugd2FzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4gVGhlIHNlcmlhbCBkcml2ZXIgd2lsbCB1bmxvYWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFUklBTF9OT19ERVZJQ0UgPSAxMTE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUlFfQlVTWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBVbmFibGUgdG8gb3BlbiBhIGRldmljZSB0aGF0IHdhcyBzaGFyaW5nIGFuIGludGVycnVwdCByZXF1ZXN0IChJUlEpIHdpdGggb3RoZXIgZGV2aWNlcy4gQXQgbGVhc3Qgb25lIG90aGVyIGRldmljZSB0aGF0IHVzZXMgdGhhdCBJUlEgd2FzIGFscmVhZHkgb3BlbmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUlFfQlVTWSA9IDExMTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX01PUkVfV1JJVEVTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgc2VyaWFsIEkvTyBvcGVyYXRpb24gd2FzIGNvbXBsZXRlZCBieSBhbm90aGVyIHdyaXRlIHRvIHRoZSBzZXJpYWwgcG9ydC5cbi8vICAoVGhlIElPQ1RMX1NFUklBTF9YT0ZGX0NPVU5URVIgcmVhY2hlZCB6ZXJvLilcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTU9SRV9XUklURVMgPSAxMTIwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DT1VOVEVSX1RJTUVPVVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBzZXJpYWwgSS9PIG9wZXJhdGlvbiBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgdGltZW91dCBwZXJpb2QgZXhwaXJlZC5cbi8vICAoVGhlIElPQ1RMX1NFUklBTF9YT0ZGX0NPVU5URVIgZGlkIG5vdCByZWFjaCB6ZXJvLilcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ09VTlRFUl9USU1FT1VUID0gMTEyMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRkxPUFBZX0lEX01BUktfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIElEIGFkZHJlc3MgbWFyayB3YXMgZm91bmQgb24gdGhlIGZsb3BweSBkaXNrLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9GTE9QUFlfSURfTUFSS19OT1RfRk9VTkQgPSAxMTIyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9GTE9QUFlfV1JPTkdfQ1lMSU5ERVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWlzbWF0Y2ggYmV0d2VlbiB0aGUgZmxvcHB5IGRpc2sgc2VjdG9yIElEIGZpZWxkIGFuZCB0aGUgZmxvcHB5IGRpc2sgY29udHJvbGxlciB0cmFjayBhZGRyZXNzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9GTE9QUFlfV1JPTkdfQ1lMSU5ERVIgPSAxMTIzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9GTE9QUFlfVU5LTk9XTl9FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmxvcHB5IGRpc2sgY29udHJvbGxlciByZXBvcnRlZCBhbiBlcnJvciB0aGF0IGlzIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBmbG9wcHkgZGlzayBkcml2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0ZMT1BQWV9VTktOT1dOX0VSUk9SID0gMTEyNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRkxPUFBZX0JBRF9SRUdJU1RFUlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZsb3BweSBkaXNrIGNvbnRyb2xsZXIgcmV0dXJuZWQgaW5jb25zaXN0ZW50IHJlc3VsdHMgaW4gaXRzIHJlZ2lzdGVycy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRkxPUFBZX0JBRF9SRUdJU1RFUlMgPSAxMTI1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ESVNLX1JFQ0FMSUJSQVRFX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBXaGlsZSBhY2Nlc3NpbmcgdGhlIGhhcmQgZGlzaywgYSByZWNhbGlicmF0ZSBvcGVyYXRpb24gZmFpbGVkLCBldmVuIGFmdGVyIHJldHJpZXMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RJU0tfUkVDQUxJQlJBVEVfRkFJTEVEID0gMTEyNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRElTS19PUEVSQVRJT05fRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFdoaWxlIGFjY2Vzc2luZyB0aGUgaGFyZCBkaXNrLCBhIGRpc2sgb3BlcmF0aW9uIGZhaWxlZCBldmVuIGFmdGVyIHJldHJpZXMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RJU0tfT1BFUkFUSU9OX0ZBSUxFRCA9IDExMjc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RJU0tfUkVTRVRfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFdoaWxlIGFjY2Vzc2luZyB0aGUgaGFyZCBkaXNrLCBhIGRpc2sgY29udHJvbGxlciByZXNldCB3YXMgbmVlZGVkLCBidXQgZXZlbiB0aGF0IGZhaWxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRElTS19SRVNFVF9GQUlMRUQgPSAxMTI4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9FT01fT1ZFUkZMT1dcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgUGh5c2ljYWwgZW5kIG9mIHRhcGUgZW5jb3VudGVyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VPTV9PVkVSRkxPVyA9IDExMjk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9FTk9VR0hfU0VSVkVSX01FTU9SWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOb3QgZW5vdWdoIHNlcnZlciBzdG9yYWdlIGlzIGF2YWlsYWJsZSB0byBwcm9jZXNzIHRoaXMgY29tbWFuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX0VOT1VHSF9TRVJWRVJfTUVNT1JZID0gMTEzMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUE9TU0lCTEVfREVBRExPQ0tcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBwb3RlbnRpYWwgZGVhZGxvY2sgY29uZGl0aW9uIGhhcyBiZWVuIGRldGVjdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QT1NTSUJMRV9ERUFETE9DSyA9IDExMzE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX01BUFBFRF9BTElHTk1FTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGJhc2UgYWRkcmVzcyBvciB0aGUgZmlsZSBvZmZzZXQgc3BlY2lmaWVkIGRvZXMgbm90IGhhdmUgdGhlIHByb3BlciBhbGlnbm1lbnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX01BUFBFRF9BTElHTk1FTlQgPSAxMTMyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRVRfUE9XRVJfU1RBVEVfVkVUT0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGF0dGVtcHQgdG8gY2hhbmdlIHRoZSBzeXN0ZW0gcG93ZXIgc3RhdGUgd2FzIHZldG9lZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uIG9yIGRyaXZlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VUX1BPV0VSX1NUQVRFX1ZFVE9FRCA9IDExNDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFVF9QT1dFUl9TVEFURV9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN5c3RlbSBCSU9TIGZhaWxlZCBhbiBhdHRlbXB0IHRvIGNoYW5nZSB0aGUgc3lzdGVtIHBvd2VyIHN0YXRlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRVRfUE9XRVJfU1RBVEVfRkFJTEVEID0gMTE0MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVE9PX01BTllfTElOS1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBjcmVhdGUgbW9yZSBsaW5rcyBvbiBhIGZpbGUgdGhhbiB0aGUgZmlsZSBzeXN0ZW0gc3VwcG9ydHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RPT19NQU5ZX0xJTktTID0gMTE0MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfT0xEX1dJTl9WRVJTSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcHJvZ3JhbSByZXF1aXJlcyBhIG5ld2VyIHZlcnNpb24gb2YgV2luZG93cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfT0xEX1dJTl9WRVJTSU9OID0gMTE1MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQVBQX1dST05HX09TXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcHJvZ3JhbSBpcyBub3QgYSBXaW5kb3dzIG9yIE1TLURPUyBwcm9ncmFtLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BUFBfV1JPTkdfT1MgPSAxMTUxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TSU5HTEVfSU5TVEFOQ0VfQVBQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCBzdGFydCBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0lOR0xFX0lOU1RBTkNFX0FQUCA9IDExNTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JNT0RFX0FQUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHByb2dyYW0gd2FzIHdyaXR0ZW4gZm9yIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiBXaW5kb3dzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9STU9ERV9BUFAgPSAxMTUzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0RMTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBPbmUgb2YgdGhlIGxpYnJhcnkgZmlsZXMgbmVlZGVkIHRvIHJ1biB0aGlzIGFwcGxpY2F0aW9uIGlzIGRhbWFnZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRExMID0gMTE1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fQVNTT0NJQVRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gYXBwbGljYXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZmlsZSBmb3IgdGhpcyBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX0FTU09DSUFUSU9OID0gMTE1NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRERFX0ZBSUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gZXJyb3Igb2NjdXJyZWQgaW4gc2VuZGluZyB0aGUgY29tbWFuZCB0byB0aGUgYXBwbGljYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RERV9GQUlMID0gMTE1NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRExMX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBPbmUgb2YgdGhlIGxpYnJhcnkgZmlsZXMgbmVlZGVkIHRvIHJ1biB0aGlzIGFwcGxpY2F0aW9uIGNhbm5vdCBiZSBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRExMX05PVF9GT1VORCA9IDExNTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX01PUkVfVVNFUl9IQU5ETEVTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjdXJyZW50IHByb2Nlc3MgaGFzIHVzZWQgYWxsIG9mIGl0cyBzeXN0ZW0gYWxsb3dhbmNlIG9mIGhhbmRsZXMgZm9yIFdpbmRvdyBNYW5hZ2VyIG9iamVjdHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX01PUkVfVVNFUl9IQU5ETEVTID0gMTE1ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTUVTU0FHRV9TWU5DX09OTFlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1lc3NhZ2UgY2FuIGJlIHVzZWQgb25seSB3aXRoIHN5bmNocm9ub3VzIG9wZXJhdGlvbnMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX01FU1NBR0VfU1lOQ19PTkxZID0gMTE1OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU09VUkNFX0VMRU1FTlRfRU1QVFlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGluZGljYXRlZCBzb3VyY2UgZWxlbWVudCBoYXMgbm8gbWVkaWEuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NPVVJDRV9FTEVNRU5UX0VNUFRZID0gMTE2MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVTVElOQVRJT05fRUxFTUVOVF9GVUxMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBpbmRpY2F0ZWQgZGVzdGluYXRpb24gZWxlbWVudCBhbHJlYWR5IGNvbnRhaW5zIG1lZGlhLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ERVNUSU5BVElPTl9FTEVNRU5UX0ZVTEwgPSAxMTYxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTExFR0FMX0VMRU1FTlRfQUREUkVTU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgaW5kaWNhdGVkIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lMTEVHQUxfRUxFTUVOVF9BRERSRVNTID0gMTE2MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTUFHQVpJTkVfTk9UX1BSRVNFTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGluZGljYXRlZCBlbGVtZW50IGlzIHBhcnQgb2YgYSBtYWdhemluZSB0aGF0IGlzIG5vdCBwcmVzZW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9NQUdBWklORV9OT1RfUFJFU0VOVCA9IDExNjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RFVklDRV9SRUlOSVRJQUxJWkFUSU9OX05FRURFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgaW5kaWNhdGVkIGRldmljZSByZXF1aXJlcyByZWluaXRpYWxpemF0aW9uIGR1ZSB0byBoYXJkd2FyZSBlcnJvcnMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RFVklDRV9SRUlOSVRJQUxJWkFUSU9OX05FRURFRCA9IDExNjQ7IC8vIGRkZXJyb3JcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVWSUNFX1JFUVVJUkVTX0NMRUFOSU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkZXZpY2UgaGFzIGluZGljYXRlZCB0aGF0IGNsZWFuaW5nIGlzIHJlcXVpcmVkIGJlZm9yZSBmdXJ0aGVyIG9wZXJhdGlvbnMgYXJlIGF0dGVtcHRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVWSUNFX1JFUVVJUkVTX0NMRUFOSU5HID0gMTE2NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVWSUNFX0RPT1JfT1BFTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGV2aWNlIGhhcyBpbmRpY2F0ZWQgdGhhdCBpdHMgZG9vciBpcyBvcGVuLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ERVZJQ0VfRE9PUl9PUEVOID0gMTE2NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVWSUNFX05PVF9DT05ORUNURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRldmljZSBpcyBub3QgY29ubmVjdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ERVZJQ0VfTk9UX0NPTk5FQ1RFRCA9IDExNjc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBFbGVtZW50IG5vdCBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX0ZPVU5EID0gMTE2ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fTUFUQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgd2FzIG5vIG1hdGNoIGZvciB0aGUgc3BlY2lmaWVkIGtleSBpbiB0aGUgaW5kZXguXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX01BVENIID0gMTE2OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VUX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcHJvcGVydHkgc2V0IHNwZWNpZmllZCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgb2JqZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRVRfTk9UX0ZPVU5EID0gMTE3MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUE9JTlRfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBwb2ludCBwYXNzZWQgdG8gR2V0TW91c2VNb3ZlUG9pbnRzIGlzIG5vdCBpbiB0aGUgYnVmZmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QT0lOVF9OT1RfRk9VTkQgPSAxMTcxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19UUkFDS0lOR19TRVJWSUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB0cmFja2luZyAod29ya3N0YXRpb24pIHNlcnZpY2UgaXMgbm90IHJ1bm5pbmcuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1RSQUNLSU5HX1NFUlZJQ0UgPSAxMTcyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19WT0xVTUVfSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIFZvbHVtZSBJRCBjb3VsZCBub3QgYmUgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1ZPTFVNRV9JRCA9IDExNzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VOQUJMRV9UT19SRU1PVkVfUkVQTEFDRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIHJlbW92ZSB0aGUgZmlsZSB0byBiZSByZXBsYWNlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVU5BQkxFX1RPX1JFTU9WRV9SRVBMQUNFRCA9IDExNzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VOQUJMRV9UT19NT1ZFX1JFUExBQ0VNRU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuYWJsZSB0byBtb3ZlIHRoZSByZXBsYWNlbWVudCBmaWxlIHRvIHRoZSBmaWxlIHRvIGJlIHJlcGxhY2VkLiBUaGUgZmlsZSB0byBiZSByZXBsYWNlZCBoYXMgcmV0YWluZWQgaXRzIG9yaWdpbmFsIG5hbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOQUJMRV9UT19NT1ZFX1JFUExBQ0VNRU5UID0gMTE3NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5BQkxFX1RPX01PVkVfUkVQTEFDRU1FTlRfMlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBVbmFibGUgdG8gbW92ZSB0aGUgcmVwbGFjZW1lbnQgZmlsZSB0byB0aGUgZmlsZSB0byBiZSByZXBsYWNlZC4gVGhlIGZpbGUgdG8gYmUgcmVwbGFjZWQgaGFzIGJlZW4gcmVuYW1lZCB1c2luZyB0aGUgYmFja3VwIG5hbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOQUJMRV9UT19NT1ZFX1JFUExBQ0VNRU5UXzIgPSAxMTc3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9KT1VSTkFMX0RFTEVURV9JTl9QUk9HUkVTU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdm9sdW1lIGNoYW5nZSBqb3VybmFsIGlzIGJlaW5nIGRlbGV0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0pPVVJOQUxfREVMRVRFX0lOX1BST0dSRVNTID0gMTE3ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSk9VUk5BTF9OT1RfQUNUSVZFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB2b2x1bWUgY2hhbmdlIGpvdXJuYWwgaXMgbm90IGFjdGl2ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSk9VUk5BTF9OT1RfQUNUSVZFID0gMTE3OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUE9URU5USUFMX0ZJTEVfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBmaWxlIHdhcyBmb3VuZCwgYnV0IGl0IG1heSBub3QgYmUgdGhlIGNvcnJlY3QgZmlsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUE9URU5USUFMX0ZJTEVfRk9VTkQgPSAxMTgwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9KT1VSTkFMX0VOVFJZX0RFTEVURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGpvdXJuYWwgZW50cnkgaGFzIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSBqb3VybmFsLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9KT1VSTkFMX0VOVFJZX0RFTEVURUQgPSAxMTgxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfREVWSUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgZGV2aWNlIG5hbWUgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkFEX0RFVklDRSA9IDEyMDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NPTk5FQ1RJT05fVU5BVkFJTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGV2aWNlIGlzIG5vdCBjdXJyZW50bHkgY29ubmVjdGVkIGJ1dCBpdCBpcyBhIHJlbWVtYmVyZWQgY29ubmVjdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ09OTkVDVElPTl9VTkFWQUlMID0gMTIwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVWSUNFX0FMUkVBRFlfUkVNRU1CRVJFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbG9jYWwgZGV2aWNlIG5hbWUgaGFzIGEgcmVtZW1iZXJlZCBjb25uZWN0aW9uIHRvIGFub3RoZXIgbmV0d29yayByZXNvdXJjZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVWSUNFX0FMUkVBRFlfUkVNRU1CRVJFRCA9IDEyMDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX05FVF9PUl9CQURfUEFUSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBuZXR3b3JrIHByb3ZpZGVyIGFjY2VwdGVkIHRoZSBnaXZlbiBuZXR3b3JrIHBhdGguXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX05FVF9PUl9CQURfUEFUSCA9IDEyMDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9QUk9WSURFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIG5ldHdvcmsgcHJvdmlkZXIgbmFtZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfUFJPVklERVIgPSAxMjA0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DQU5OT1RfT1BFTl9QUk9GSUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuYWJsZSB0byBvcGVuIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gcHJvZmlsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0FOTk9UX09QRU5fUFJPRklMRSA9IDEyMDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9QUk9GSUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gcHJvZmlsZSBpcyBjb3JydXB0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9QUk9GSUxFID0gMTIwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX0NPTlRBSU5FUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgZW51bWVyYXRlIGEgbm9uY29udGFpbmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RfQ09OVEFJTkVSID0gMTIwNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRVhURU5ERURfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gZXh0ZW5kZWQgZXJyb3IgaGFzIG9jY3VycmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9FWFRFTkRFRF9FUlJPUiA9IDEyMDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfR1JPVVBOQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmb3JtYXQgb2YgdGhlIHNwZWNpZmllZCBncm91cCBuYW1lIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfR1JPVVBOQU1FID0gMTIwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9DT01QVVRFUk5BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZvcm1hdCBvZiB0aGUgc3BlY2lmaWVkIGNvbXB1dGVyIG5hbWUgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9DT01QVVRFUk5BTUUgPSAxMjEwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0VWRU5UTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZm9ybWF0IG9mIHRoZSBzcGVjaWZpZWQgZXZlbnQgbmFtZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0VWRU5UTkFNRSA9IDEyMTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfRE9NQUlOTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZm9ybWF0IG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluIG5hbWUgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9ET01BSU5OQU1FID0gMTIxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9TRVJWSUNFTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZm9ybWF0IG9mIHRoZSBzcGVjaWZpZWQgc2VydmljZSBuYW1lIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfU0VSVklDRU5BTUUgPSAxMjEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX05FVE5BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZvcm1hdCBvZiB0aGUgc3BlY2lmaWVkIG5ldHdvcmsgbmFtZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX05FVE5BTUUgPSAxMjE0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1NIQVJFTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZm9ybWF0IG9mIHRoZSBzcGVjaWZpZWQgc2hhcmUgbmFtZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX1NIQVJFTkFNRSA9IDEyMTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfUEFTU1dPUkROQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmb3JtYXQgb2YgdGhlIHNwZWNpZmllZCBwYXNzd29yZCBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX1BBU1NXT1JETkFNRSA9IDEyMTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfTUVTU0FHRU5BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZvcm1hdCBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UgbmFtZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX01FU1NBR0VOQU1FID0gMTIxNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9NRVNTQUdFREVTVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZm9ybWF0IG9mIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSBkZXN0aW5hdGlvbiBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX01FU1NBR0VERVNUID0gMTIxODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VTU0lPTl9DUkVERU5USUFMX0NPTkZMSUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE11bHRpcGxlIGNvbm5lY3Rpb25zIHRvIGEgc2VydmVyIG9yIHNoYXJlZCByZXNvdXJjZSBieSB0aGUgc2FtZSB1c2VyLCB1c2luZyBtb3JlIHRoYW4gb25lIHVzZXIgbmFtZSwgYXJlIG5vdCBhbGxvd2VkLiBEaXNjb25uZWN0IGFsbCBwcmV2aW91cyBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVyIG9yIHNoYXJlZCByZXNvdXJjZSBhbmQgdHJ5IGFnYWluLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRVNTSU9OX0NSRURFTlRJQUxfQ09ORkxJQ1QgPSAxMjE5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRU1PVEVfU0VTU0lPTl9MSU1JVF9FWENFRURFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGVzdGFibGlzaCBhIHNlc3Npb24gdG8gYSBuZXR3b3JrIHNlcnZlciwgYnV0IHRoZXJlIGFyZSBhbHJlYWR5IHRvbyBtYW55IHNlc3Npb25zIGVzdGFibGlzaGVkIHRvIHRoYXQgc2VydmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRU1PVEVfU0VTU0lPTl9MSU1JVF9FWENFRURFRCA9IDEyMjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RVUF9ET01BSU5OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB3b3JrZ3JvdXAgb3IgZG9tYWluIG5hbWUgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBjb21wdXRlciBvbiB0aGUgbmV0d29yay5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFVQX0RPTUFJTk5BTUUgPSAxMjIxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19ORVRXT1JLXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIGlzIG5vdCBwcmVzZW50IG9yIG5vdCBzdGFydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19ORVRXT1JLID0gMTIyMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0FOQ0VMTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpb24gd2FzIGNhbmNlbGVkIGJ5IHRoZSB1c2VyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DQU5DRUxMRUQgPSAxMjIzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9VU0VSX01BUFBFRF9GSUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gYSBmaWxlIHdpdGggYSB1c2VyLW1hcHBlZCBzZWN0aW9uIG9wZW4uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VTRVJfTUFQUEVEX0ZJTEUgPSAxMjI0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DT05ORUNUSU9OX1JFRlVTRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlbW90ZSBzeXN0ZW0gcmVmdXNlZCB0aGUgbmV0d29yayBjb25uZWN0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQgPSAxMjI1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9HUkFDRUZVTF9ESVNDT05ORUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gd2FzIGdyYWNlZnVsbHkgY2xvc2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9HUkFDRUZVTF9ESVNDT05ORUNUID0gMTIyNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQUREUkVTU19BTFJFQURZX0FTU09DSUFURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5ldHdvcmsgdHJhbnNwb3J0IGVuZHBvaW50IGFscmVhZHkgaGFzIGFuIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIGl0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BRERSRVNTX0FMUkVBRFlfQVNTT0NJQVRFRCA9IDEyMjc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FERFJFU1NfTk9UX0FTU09DSUFURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYWRkcmVzcyBoYXMgbm90IHlldCBiZWVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV0d29yayBlbmRwb2ludC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUREUkVTU19OT1RfQVNTT0NJQVRFRCA9IDEyMjg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NPTk5FQ1RJT05fSU5WQUxJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhIG5vbmV4aXN0ZW50IG5ldHdvcmsgY29ubmVjdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ09OTkVDVElPTl9JTlZBTElEID0gMTIyOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ09OTkVDVElPTl9BQ1RJVkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gaW52YWxpZCBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhbiBhY3RpdmUgbmV0d29yayBjb25uZWN0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DT05ORUNUSU9OX0FDVElWRSA9IDEyMzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05FVFdPUktfVU5SRUFDSEFCTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5ldHdvcmsgbG9jYXRpb24gY2Fubm90IGJlIHJlYWNoZWQuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBuZXR3b3JrIHRyb3VibGVzaG9vdGluZywgc2VlIFdpbmRvd3MgSGVscC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTkVUV09SS19VTlJFQUNIQUJMRSA9IDEyMzE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0hPU1RfVU5SRUFDSEFCTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5ldHdvcmsgbG9jYXRpb24gY2Fubm90IGJlIHJlYWNoZWQuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBuZXR3b3JrIHRyb3VibGVzaG9vdGluZywgc2VlIFdpbmRvd3MgSGVscC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSE9TVF9VTlJFQUNIQUJMRSA9IDEyMzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BST1RPQ09MX1VOUkVBQ0hBQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIGxvY2F0aW9uIGNhbm5vdCBiZSByZWFjaGVkLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgbmV0d29yayB0cm91Ymxlc2hvb3RpbmcsIHNlZSBXaW5kb3dzIEhlbHAuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BST1RPQ09MX1VOUkVBQ0hBQkxFID0gMTIzMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUE9SVF9VTlJFQUNIQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBzZXJ2aWNlIGlzIG9wZXJhdGluZyBhdCB0aGUgZGVzdGluYXRpb24gbmV0d29yayBlbmRwb2ludCBvbiB0aGUgcmVtb3RlIHN5c3RlbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUE9SVF9VTlJFQUNIQUJMRSA9IDEyMzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFUVVFU1RfQUJPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdCB3YXMgYWJvcnRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUkVRVUVTVF9BQk9SVEVEID0gMTIzNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ09OTkVDVElPTl9BQk9SVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gd2FzIGFib3J0ZWQgYnkgdGhlIGxvY2FsIHN5c3RlbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ09OTkVDVElPTl9BQk9SVEVEID0gMTIzNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVUUllcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBjb3VsZCBub3QgYmUgY29tcGxldGVkLiBBIHJldHJ5IHNob3VsZCBiZSBwZXJmb3JtZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFVFJZID0gMTIzNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ09OTkVDVElPTl9DT1VOVF9MSU1JVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBjb3VsZCBub3QgYmUgbWFkZSBiZWNhdXNlIHRoZSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgZm9yIHRoaXMgYWNjb3VudCBoYXMgYmVlbiByZWFjaGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DT05ORUNUSU9OX0NPVU5UX0xJTUlUID0gMTIzODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTE9HSU5fVElNRV9SRVNUUklDVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBdHRlbXB0aW5nIHRvIGxvZyBpbiBkdXJpbmcgYW4gdW5hdXRob3JpemVkIHRpbWUgb2YgZGF5IGZvciB0aGlzIGFjY291bnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xPR0lOX1RJTUVfUkVTVFJJQ1RJT04gPSAxMjM5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9MT0dJTl9XS1NUQV9SRVNUUklDVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYWNjb3VudCBpcyBub3QgYXV0aG9yaXplZCB0byBsb2cgaW4gZnJvbSB0aGlzIHN0YXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xPR0lOX1dLU1RBX1JFU1RSSUNUSU9OID0gMTI0MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5DT1JSRUNUX0FERFJFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5ldHdvcmsgYWRkcmVzcyBjb3VsZCBub3QgYmUgdXNlZCBmb3IgdGhlIG9wZXJhdGlvbiByZXF1ZXN0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOQ09SUkVDVF9BRERSRVNTID0gMTI0MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQUxSRUFEWV9SRUdJU1RFUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZXJ2aWNlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUxSRUFEWV9SRUdJU1RFUkVEID0gMTI0MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VSVklDRV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBzZXJ2aWNlIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRVJWSUNFX05PVF9GT1VORCA9IDEyNDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9BVVRIRU5USUNBVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpb24gYmVpbmcgcmVxdWVzdGVkIHdhcyBub3QgcGVyZm9ybWVkIGJlY2F1c2UgdGhlIHVzZXIgaGFzIG5vdCBiZWVuIGF1dGhlbnRpY2F0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PVF9BVVRIRU5USUNBVEVEID0gMTI0NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX0xPR0dFRF9PTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb3BlcmF0aW9uIGJlaW5nIHJlcXVlc3RlZCB3YXMgbm90IHBlcmZvcm1lZCBiZWNhdXNlIHRoZSB1c2VyIGhhcyBub3QgbG9nZ2VkIG9uIHRvIHRoZSBuZXR3b3JrLlxuLy8gIFRoZSBzcGVjaWZpZWQgc2VydmljZSBkb2VzIG5vdCBleGlzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX0xPR0dFRF9PTiA9IDEyNDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NPTlRJTlVFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENvbnRpbnVlIHdpdGggd29yayBpbiBwcm9ncmVzcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ09OVElOVUUgPSAxMjQ2OyAvLyBkZGVycm9yXG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FMUkVBRFlfSU5JVElBTElaRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBwZXJmb3JtIGFuIGluaXRpYWxpemF0aW9uIG9wZXJhdGlvbiB3aGVuIGluaXRpYWxpemF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY29tcGxldGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BTFJFQURZX0lOSVRJQUxJWkVEID0gMTI0NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fTU9SRV9ERVZJQ0VTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIG1vcmUgbG9jYWwgZGV2aWNlcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fTU9SRV9ERVZJQ0VTID0gMTI0ODsgLy8gZGRlcnJvclxuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19TVUNIX1NJVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBzaXRlIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19TVUNIX1NJVEUgPSAxMjQ5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ET01BSU5fQ09OVFJPTExFUl9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBkb21haW4gY29udHJvbGxlciB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRE9NQUlOX0NPTlRST0xMRVJfRVhJU1RTID0gMTI1MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfT05MWV9JRl9DT05ORUNURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBvcGVyYXRpb24gaXMgc3VwcG9ydGVkIG9ubHkgd2hlbiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgc2VydmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9PTkxZX0lGX0NPTk5FQ1RFRCA9IDEyNTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX09WRVJSSURFX05PQ0hBTkdFU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZ3JvdXAgcG9saWN5IGZyYW1ld29yayBzaG91bGQgY2FsbCB0aGUgZXh0ZW5zaW9uIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGNoYW5nZXMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX09WRVJSSURFX05PQ0hBTkdFUyA9IDEyNTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9VU0VSX1BST0ZJTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCB1c2VyIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBwcm9maWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfVVNFUl9QUk9GSUxFID0gMTI1MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX1NVUFBPUlRFRF9PTl9TQlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBhIGNvbXB1dGVyIHJ1bm5pbmcgV2luZG93cyBTZXJ2ZXIgMjAwMyBmb3IgU21hbGwgQnVzaW5lc3MgU2VydmVyXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PVF9TVVBQT1JURURfT05fU0JTID0gMTI1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VSVkVSX1NIVVRET1dOX0lOX1BST0dSRVNTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZXJ2ZXIgbWFjaGluZSBpcyBzaHV0dGluZyBkb3duLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRVJWRVJfU0hVVERPV05fSU5fUFJPR1JFU1MgPSAxMjU1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9IT1NUX0RPV05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlbW90ZSBzeXN0ZW0gaXMgbm90IGF2YWlsYWJsZS4gRm9yIGluZm9ybWF0aW9uIGFib3V0IG5ldHdvcmsgdHJvdWJsZXNob290aW5nLCBzZWUgV2luZG93cyBIZWxwLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9IT1NUX0RPV04gPSAxMjU2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT05fQUNDT1VOVF9TSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlY3VyaXR5IGlkZW50aWZpZXIgcHJvdmlkZWQgaXMgbm90IGZyb20gYW4gYWNjb3VudCBkb21haW4uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PTl9BQ0NPVU5UX1NJRCA9IDEyNTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PTl9ET01BSU5fU0lEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZWN1cml0eSBpZGVudGlmaWVyIHByb3ZpZGVkIGRvZXMgbm90IGhhdmUgYSBkb21haW4gY29tcG9uZW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT05fRE9NQUlOX1NJRCA9IDEyNTg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FQUEhFTFBfQkxPQ0tcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQXBwSGVscCBkaWFsb2cgY2FuY2VsZWQgdGh1cyBwcmV2ZW50aW5nIHRoZSBhcHBsaWNhdGlvbiBmcm9tIHN0YXJ0aW5nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BUFBIRUxQX0JMT0NLID0gMTI1OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQUNDRVNTX0RJU0FCTEVEX0JZX1BPTElDWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBXaW5kb3dzIGNhbm5vdCBvcGVuIHRoaXMgcHJvZ3JhbSBiZWNhdXNlIGl0IGhhcyBiZWVuIHByZXZlbnRlZCBieSBhIHNvZnR3YXJlIHJlc3RyaWN0aW9uIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIG9wZW4gRXZlbnQgVmlld2VyIG9yIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUNDRVNTX0RJU0FCTEVEX0JZX1BPTElDWSA9IDEyNjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFR19OQVRfQ09OU1VNUFRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBwcm9ncmFtIGF0dGVtcHQgdG8gdXNlIGFuIGludmFsaWQgcmVnaXN0ZXIgdmFsdWUuICBOb3JtYWxseSBjYXVzZWQgYnkgYW4gdW5pbml0aWFsaXplZCByZWdpc3Rlci4gVGhpcyBlcnJvciBpcyBJdGFuaXVtIHNwZWNpZmljLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRUdfTkFUX0NPTlNVTVBUSU9OID0gMTI2MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1NDU0hBUkVfT0ZGTElORVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2hhcmUgaXMgY3VycmVudGx5IG9mZmxpbmUgb3IgZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NTQ1NIQVJFX09GRkxJTkUgPSAxMjYyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9QS0lOSVRfRkFJTFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUga2VyYmVyb3MgcHJvdG9jb2wgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgdmFsaWRhdGluZyB0aGVcbi8vICBLREMgY2VydGlmaWNhdGUgZHVyaW5nIHNtYXJ0Y2FyZCBsb2dvbi4gIFRoZXJlIGlzIG1vcmUgaW5mb3JtYXRpb24gaW4gdGhlXG4vLyAgc3lzdGVtIGV2ZW50IGxvZy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUEtJTklUX0ZBSUxVUkUgPSAxMjYzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TTUFSVENBUkRfU1VCU1lTVEVNX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGtlcmJlcm9zIHByb3RvY29sIGVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIGF0dGVtcHRpbmcgdG8gdXRpbGl6ZVxuLy8gIHRoZSBzbWFydGNhcmQgc3Vic3lzdGVtLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TTUFSVENBUkRfU1VCU1lTVEVNX0ZBSUxVUkUgPSAxMjY0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ET1dOR1JBREVfREVURUNURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN5c3RlbSBkZXRlY3RlZCBhIHBvc3NpYmxlIGF0dGVtcHQgdG8gY29tcHJvbWlzZSBzZWN1cml0eS4gUGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBjYW4gY29udGFjdCB0aGUgc2VydmVyIHRoYXQgYXV0aGVudGljYXRlZCB5b3UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RPV05HUkFERV9ERVRFQ1RFRCA9IDEyNjU7XG5cbi8vXG4vLyBEbyBub3QgdXNlIElEJ3MgMTI2NiAtIDEyNzAgYXMgdGhlIHN5bWJvbGljTmFtZXMgaGF2ZSBiZWVuIG1vdmVkIHRvIFNFQ19FXypcbi8vXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NQUNISU5FX0xPQ0tFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWFjaGluZSBpcyBsb2NrZWQgYW5kIGNhbiBub3QgYmUgc2h1dCBkb3duIHdpdGhvdXQgdGhlIGZvcmNlIG9wdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTUFDSElORV9MT0NLRUQgPSAxMjcxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DQUxMQkFDS19TVVBQTElFRF9JTlZBTElEX0RBVEFcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXBwbGljYXRpb24tZGVmaW5lZCBjYWxsYmFjayBnYXZlIGludmFsaWQgZGF0YSB3aGVuIGNhbGxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0FMTEJBQ0tfU1VQUExJRURfSU5WQUxJRF9EQVRBID0gMTI3MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1lOQ19GT1JFR1JPVU5EX1JFRlJFU0hfUkVRVUlSRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGdyb3VwIHBvbGljeSBmcmFtZXdvcmsgc2hvdWxkIGNhbGwgdGhlIGV4dGVuc2lvbiBpbiB0aGUgc3luY2hyb25vdXMgZm9yZWdyb3VuZCBwb2xpY3kgcmVmcmVzaC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1lOQ19GT1JFR1JPVU5EX1JFRlJFU0hfUkVRVUlSRUQgPSAxMjc0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EUklWRVJfQkxPQ0tFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIGRyaXZlciBoYXMgYmVlbiBibG9ja2VkIGZyb20gbG9hZGluZ1xuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EUklWRVJfQkxPQ0tFRCA9IDEyNzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfSU1QT1JUX09GX05PTl9ETExcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBkeW5hbWljIGxpbmsgbGlicmFyeSAoRExMKSByZWZlcmVuY2VkIGEgbW9kdWxlIHRoYXQgd2FzIG5laXRoZXIgYSBETEwgbm9yIHRoZSBwcm9jZXNzJ3MgZXhlY3V0YWJsZSBpbWFnZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9JTVBPUlRfT0ZfTk9OX0RMTCA9IDEyNzY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FDQ0VTU19ESVNBQkxFRF9XRUJCTEFERVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBXaW5kb3dzIGNhbm5vdCBvcGVuIHRoaXMgcHJvZ3JhbSBzaW5jZSBpdCBoYXMgYmVlbiBkaXNhYmxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUNDRVNTX0RJU0FCTEVEX1dFQkJMQURFID0gMTI3NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQUNDRVNTX0RJU0FCTEVEX1dFQkJMQURFX1RBTVBFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBXaW5kb3dzIGNhbm5vdCBvcGVuIHRoaXMgcHJvZ3JhbSBiZWNhdXNlIHRoZSBsaWNlbnNlIGVuZm9yY2VtZW50IHN5c3RlbSBoYXMgYmVlbiB0YW1wZXJlZCB3aXRoIG9yIGJlY29tZSBjb3JydXB0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0FDQ0VTU19ESVNBQkxFRF9XRUJCTEFERV9UQU1QRVIgPSAxMjc4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRUNPVkVSWV9GQUlMVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgdHJhbnNhY3Rpb24gcmVjb3ZlciBmYWlsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFQ09WRVJZX0ZBSUxVUkUgPSAxMjc5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9BTFJFQURZX0ZJQkVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjdXJyZW50IHRocmVhZCBoYXMgYWxyZWFkeSBiZWVuIGNvbnZlcnRlZCB0byBhIGZpYmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BTFJFQURZX0ZJQkVSID0gMTI4MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQUxSRUFEWV9USFJFQURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGN1cnJlbnQgdGhyZWFkIGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkIGZyb20gYSBmaWJlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUxSRUFEWV9USFJFQUQgPSAxMjgxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TVEFDS19CVUZGRVJfT1ZFUlJVTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3lzdGVtIGRldGVjdGVkIGFuIG92ZXJydW4gb2YgYSBzdGFjay1iYXNlZCBidWZmZXIgaW4gdGhpcyBhcHBsaWNhdGlvbi4gIFRoaXNcbi8vICBvdmVycnVuIGNvdWxkIHBvdGVudGlhbGx5IGFsbG93IGEgbWFsaWNpb3VzIHVzZXIgdG8gZ2FpbiBjb250cm9sIG9mIHRoaXMgYXBwbGljYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NUQUNLX0JVRkZFUl9PVkVSUlVOID0gMTI4MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUEFSQU1FVEVSX1FVT1RBX0VYQ0VFREVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIERhdGEgcHJlc2VudCBpbiBvbmUgb2YgdGhlIHBhcmFtZXRlcnMgaXMgbW9yZSB0aGFuIHRoZSBmdW5jdGlvbiBjYW4gb3BlcmF0ZSBvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUEFSQU1FVEVSX1FVT1RBX0VYQ0VFREVEID0gMTI4MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVCVUdHRVJfSU5BQ1RJVkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB0byBkbyBhbiBvcGVyYXRpb24gb24gYSBkZWJ1ZyBvYmplY3QgZmFpbGVkIGJlY2F1c2UgdGhlIG9iamVjdCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZWxldGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ERUJVR0dFUl9JTkFDVElWRSA9IDEyODQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RFTEFZX0xPQURfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGF0dGVtcHQgdG8gZGVsYXktbG9hZCBhIC5kbGwgb3IgZ2V0IGEgZnVuY3Rpb24gYWRkcmVzcyBpbiBhIGRlbGF5LWxvYWRlZCAuZGxsIGZhaWxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVMQVlfTE9BRF9GQUlMRUQgPSAxMjg1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9WRE1fRElTQUxMT1dFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICAlMSBpcyBhIDE2LWJpdCBhcHBsaWNhdGlvbi4gWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb25zIHRvIGV4ZWN1dGUgMTYtYml0IGFwcGxpY2F0aW9ucy4gQ2hlY2sgeW91ciBwZXJtaXNzaW9ucyB3aXRoIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1ZETV9ESVNBTExPV0VEID0gMTI4NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5JREVOVElGSUVEX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEluc3VmZmljaWVudCBpbmZvcm1hdGlvbiBleGlzdHMgdG8gaWRlbnRpZnkgdGhlIGNhdXNlIG9mIGZhaWx1cmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOSURFTlRJRklFRF9FUlJPUiA9IDEyODc7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy9cbi8vIEFkZCBuZXcgc3RhdHVzIGNvZGVzIGJlZm9yZSB0aGlzIHBvaW50IHVubGVzcyB0aGVyZSBpcyBhIGNvbXBvbmVudCBzcGVjaWZpYyBzZWN0aW9uIGJlbG93LlxuLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gU2VjdXJpdHkgU3RhdHVzIENvZGVzIC8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT1RfQUxMX0FTU0lHTkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vdCBhbGwgcHJpdmlsZWdlcyByZWZlcmVuY2VkIGFyZSBhc3NpZ25lZCB0byB0aGUgY2FsbGVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RfQUxMX0FTU0lHTkVEID0gMTMwMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU09NRV9OT1RfTUFQUEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNvbWUgbWFwcGluZyBiZXR3ZWVuIGFjY291bnQgbmFtZXMgYW5kIHNlY3VyaXR5IElEcyB3YXMgbm90IGRvbmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NPTUVfTk9UX01BUFBFRCA9IDEzMDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX1FVT1RBU19GT1JfQUNDT1VOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBzeXN0ZW0gcXVvdGEgbGltaXRzIGFyZSBzcGVjaWZpY2FsbHkgc2V0IGZvciB0aGlzIGFjY291bnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1FVT1RBU19GT1JfQUNDT1VOVCA9IDEzMDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0xPQ0FMX1VTRVJfU0VTU0lPTl9LRVlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gZW5jcnlwdGlvbiBrZXkgaXMgYXZhaWxhYmxlLiBBIHdlbGwta25vd24gZW5jcnlwdGlvbiBrZXkgd2FzIHJldHVybmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9MT0NBTF9VU0VSX1NFU1NJT05fS0VZID0gMTMwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTlVMTF9MTV9QQVNTV09SRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcGFzc3dvcmQgaXMgdG9vIGNvbXBsZXggdG8gYmUgY29udmVydGVkIHRvIGEgTEFOIE1hbmFnZXIgcGFzc3dvcmQuIFRoZSBMQU4gTWFuYWdlciBwYXNzd29yZCByZXR1cm5lZCBpcyBhIE5VTEwgc3RyaW5nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OVUxMX0xNX1BBU1NXT1JEID0gMTMwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5LTk9XTl9SRVZJU0lPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmV2aXNpb24gbGV2ZWwgaXMgdW5rbm93bi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVU5LTk9XTl9SRVZJU0lPTiA9IDEzMDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFVklTSU9OX01JU01BVENIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEluZGljYXRlcyB0d28gcmV2aXNpb24gbGV2ZWxzIGFyZSBpbmNvbXBhdGlibGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFVklTSU9OX01JU01BVENIID0gMTMwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9PV05FUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIHNlY3VyaXR5IElEIG1heSBub3QgYmUgYXNzaWduZWQgYXMgdGhlIG93bmVyIG9mIHRoaXMgb2JqZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX09XTkVSID0gMTMwNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9QUklNQVJZX0dST1VQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgc2VjdXJpdHkgSUQgbWF5IG5vdCBiZSBhc3NpZ25lZCBhcyB0aGUgcHJpbWFyeSBncm91cCBvZiBhbiBvYmplY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfUFJJTUFSWV9HUk9VUCA9IDEzMDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX0lNUEVSU09OQVRJT05fVE9LRU5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCBoYXMgYmVlbiBtYWRlIHRvIG9wZXJhdGUgb24gYW4gaW1wZXJzb25hdGlvbiB0b2tlbiBieSBhIHRocmVhZCB0aGF0IGlzIG5vdCBjdXJyZW50bHkgaW1wZXJzb25hdGluZyBhIGNsaWVudC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fSU1QRVJTT05BVElPTl9UT0tFTiA9IDEzMDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NBTlRfRElTQUJMRV9NQU5EQVRPUllcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGdyb3VwIG1heSBub3QgYmUgZGlzYWJsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NBTlRfRElTQUJMRV9NQU5EQVRPUlkgPSAxMzEwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19MT0dPTl9TRVJWRVJTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gbG9nb24gc2VydmVycyBhdmFpbGFibGUgdG8gc2VydmljZSB0aGUgbG9nb24gcmVxdWVzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fTE9HT05fU0VSVkVSUyA9IDEzMTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX1NVQ0hfTE9HT05fU0VTU0lPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHNwZWNpZmllZCBsb2dvbiBzZXNzaW9uIGRvZXMgbm90IGV4aXN0LiBJdCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gdGVybWluYXRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fU1VDSF9MT0dPTl9TRVNTSU9OID0gMTMxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fU1VDSF9QUklWSUxFR0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBzcGVjaWZpZWQgcHJpdmlsZWdlIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19TVUNIX1BSSVZJTEVHRSA9IDEzMTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BSSVZJTEVHRV9OT1RfSEVMRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHJlcXVpcmVkIHByaXZpbGVnZSBpcyBub3QgaGVsZCBieSB0aGUgY2xpZW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUklWSUxFR0VfTk9UX0hFTEQgPSAxMzE0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0FDQ09VTlRfTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbmFtZSBwcm92aWRlZCBpcyBub3QgYSBwcm9wZXJseSBmb3JtZWQgYWNjb3VudCBuYW1lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0FDQ09VTlRfTkFNRSA9IDEzMTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VTRVJfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgdXNlciBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVVNFUl9FWElTVFMgPSAxMzE2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19TVUNIX1VTRVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCB1c2VyIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19TVUNIX1VTRVIgPSAxMzE3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9HUk9VUF9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBncm91cCBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfR1JPVVBfRVhJU1RTID0gMTMxODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fU1VDSF9HUk9VUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGdyb3VwIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19TVUNIX0dST1VQID0gMTMxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTUVNQkVSX0lOX0dST1VQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVpdGhlciB0aGUgc3BlY2lmaWVkIHVzZXIgYWNjb3VudCBpcyBhbHJlYWR5IGEgbWVtYmVyIG9mIHRoZSBzcGVjaWZpZWQgZ3JvdXAsIG9yIHRoZSBzcGVjaWZpZWQgZ3JvdXAgY2Fubm90IGJlIGRlbGV0ZWQgYmVjYXVzZSBpdCBjb250YWlucyBhIG1lbWJlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTUVNQkVSX0lOX0dST1VQID0gMTMyMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTUVNQkVSX05PVF9JTl9HUk9VUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHVzZXIgYWNjb3VudCBpcyBub3QgYSBtZW1iZXIgb2YgdGhlIHNwZWNpZmllZCBncm91cCBhY2NvdW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9NRU1CRVJfTk9UX0lOX0dST1VQID0gMTMyMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTEFTVF9BRE1JTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbGFzdCByZW1haW5pbmcgYWRtaW5pc3RyYXRpb24gYWNjb3VudCBjYW5ub3QgYmUgZGlzYWJsZWQgb3IgZGVsZXRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTEFTVF9BRE1JTiA9IDEzMjI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1dST05HX1BBU1NXT1JEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuYWJsZSB0byB1cGRhdGUgdGhlIHBhc3N3b3JkLiBUaGUgdmFsdWUgcHJvdmlkZWQgYXMgdGhlIGN1cnJlbnQgcGFzc3dvcmQgaXMgaW5jb3JyZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XUk9OR19QQVNTV09SRCA9IDEzMjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lMTF9GT1JNRURfUEFTU1dPUkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIHVwZGF0ZSB0aGUgcGFzc3dvcmQuIFRoZSB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIG5ldyBwYXNzd29yZCBjb250YWlucyB2YWx1ZXMgdGhhdCBhcmUgbm90IGFsbG93ZWQgaW4gcGFzc3dvcmRzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTExfRk9STUVEX1BBU1NXT1JEID0gMTMyNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUEFTU1dPUkRfUkVTVFJJQ1RJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIHVwZGF0ZSB0aGUgcGFzc3dvcmQuIFRoZSB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIG5ldyBwYXNzd29yZCBkb2VzIG5vdCBtZWV0IHRoZSBsZW5ndGgsIGNvbXBsZXhpdHksIG9yIGhpc3RvcnkgcmVxdWlyZW1lbnQgb2YgdGhlIGRvbWFpbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUEFTU1dPUkRfUkVTVFJJQ1RJT04gPSAxMzI1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9MT0dPTl9GQUlMVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIExvZ29uIGZhaWx1cmU6IHVua25vd24gdXNlciBuYW1lIG9yIGJhZCBwYXNzd29yZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTE9HT05fRkFJTFVSRSA9IDEzMjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FDQ09VTlRfUkVTVFJJQ1RJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTG9nb24gZmFpbHVyZTogdXNlciBhY2NvdW50IHJlc3RyaWN0aW9uLiAgUG9zc2libGUgcmVhc29ucyBhcmUgYmxhbmsgcGFzc3dvcmRzIG5vdCBhbGxvd2VkLCBsb2dvbiBob3VyIHJlc3RyaWN0aW9ucywgb3IgYSBwb2xpY3kgcmVzdHJpY3Rpb24gaGFzIGJlZW4gZW5mb3JjZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0FDQ09VTlRfUkVTVFJJQ1RJT04gPSAxMzI3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0xPR09OX0hPVVJTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIExvZ29uIGZhaWx1cmU6IGFjY291bnQgbG9nb24gdGltZSByZXN0cmljdGlvbiB2aW9sYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfTE9HT05fSE9VUlMgPSAxMzI4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1dPUktTVEFUSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIExvZ29uIGZhaWx1cmU6IHVzZXIgbm90IGFsbG93ZWQgdG8gbG9nIG9uIHRvIHRoaXMgY29tcHV0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfV09SS1NUQVRJT04gPSAxMzI5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9QQVNTV09SRF9FWFBJUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIExvZ29uIGZhaWx1cmU6IHRoZSBzcGVjaWZpZWQgYWNjb3VudCBwYXNzd29yZCBoYXMgZXhwaXJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUEFTU1dPUkRfRVhQSVJFRCA9IDEzMzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FDQ09VTlRfRElTQUJMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTG9nb24gZmFpbHVyZTogYWNjb3VudCBjdXJyZW50bHkgZGlzYWJsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0FDQ09VTlRfRElTQUJMRUQgPSAxMzMxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT05FX01BUFBFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBtYXBwaW5nIGJldHdlZW4gYWNjb3VudCBuYW1lcyBhbmQgc2VjdXJpdHkgSURzIHdhcyBkb25lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT05FX01BUFBFRCA9IDEzMzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1RPT19NQU5ZX0xVSURTX1JFUVVFU1RFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUb28gbWFueSBsb2NhbCB1c2VyIGlkZW50aWZpZXJzIChMVUlEcykgd2VyZSByZXF1ZXN0ZWQgYXQgb25lIHRpbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RPT19NQU5ZX0xVSURTX1JFUVVFU1RFRCA9IDEzMzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0xVSURTX0VYSEFVU1RFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBtb3JlIGxvY2FsIHVzZXIgaWRlbnRpZmllcnMgKExVSURzKSBhcmUgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9MVUlEU19FWEhBVVNURUQgPSAxMzM0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1NVQl9BVVRIT1JJVFlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN1YmF1dGhvcml0eSBwYXJ0IG9mIGEgc2VjdXJpdHkgSUQgaXMgaW52YWxpZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHVzZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9TVUJfQVVUSE9SSVRZID0gMTMzNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9BQ0xcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGFjY2VzcyBjb250cm9sIGxpc3QgKEFDTCkgc3RydWN0dXJlIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfQUNMID0gMTMzNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9TSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlY3VyaXR5IElEIHN0cnVjdHVyZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX1NJRCA9IDEzMzc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfU0VDVVJJVFlfREVTQ1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlY3VyaXR5IGRlc2NyaXB0b3Igc3RydWN0dXJlIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfU0VDVVJJVFlfREVTQ1IgPSAxMzM4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfSU5IRVJJVEFOQ0VfQUNMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBpbmhlcml0ZWQgYWNjZXNzIGNvbnRyb2wgbGlzdCAoQUNMKSBvciBhY2Nlc3MgY29udHJvbCBlbnRyeSAoQUNFKSBjb3VsZCBub3QgYmUgYnVpbHQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9JTkhFUklUQU5DRV9BQ0wgPSAxMzQwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRVJWRVJfRElTQUJMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZlciBpcyBjdXJyZW50bHkgZGlzYWJsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFUlZFUl9ESVNBQkxFRCA9IDEzNDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFUlZFUl9OT1RfRElTQUJMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZlciBpcyBjdXJyZW50bHkgZW5hYmxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0VSVkVSX05PVF9ESVNBQkxFRCA9IDEzNDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfSURfQVVUSE9SSVRZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB2YWx1ZSBwcm92aWRlZCB3YXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgYW4gaWRlbnRpZmllciBhdXRob3JpdHkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfSURfQVVUSE9SSVRZID0gMTM0MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQUxMT1RURURfU1BBQ0VfRVhDRUVERURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gbW9yZSBtZW1vcnkgaXMgYXZhaWxhYmxlIGZvciBzZWN1cml0eSBpbmZvcm1hdGlvbiB1cGRhdGVzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BTExPVFRFRF9TUEFDRV9FWENFRURFRCA9IDEzNDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfR1JPVVBfQVRUUklCVVRFU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGF0dHJpYnV0ZXMgYXJlIGludmFsaWQsIG9yIGluY29tcGF0aWJsZSB3aXRoIHRoZSBhdHRyaWJ1dGVzIGZvciB0aGUgZ3JvdXAgYXMgYSB3aG9sZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9HUk9VUF9BVFRSSUJVVEVTID0gMTM0NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQkFEX0lNUEVSU09OQVRJT05fTEVWRUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRWl0aGVyIGEgcmVxdWlyZWQgaW1wZXJzb25hdGlvbiBsZXZlbCB3YXMgbm90IHByb3ZpZGVkLCBvciB0aGUgcHJvdmlkZWQgaW1wZXJzb25hdGlvbiBsZXZlbCBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfSU1QRVJTT05BVElPTl9MRVZFTCA9IDEzNDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NBTlRfT1BFTl9BTk9OWU1PVVNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQ2Fubm90IG9wZW4gYW4gYW5vbnltb3VzIGxldmVsIHNlY3VyaXR5IHRva2VuLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DQU5UX09QRU5fQU5PTllNT1VTID0gMTM0NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQkFEX1ZBTElEQVRJT05fQ0xBU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHZhbGlkYXRpb24gaW5mb3JtYXRpb24gY2xhc3MgcmVxdWVzdGVkIHdhcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfVkFMSURBVElPTl9DTEFTUyA9IDEzNDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9UT0tFTl9UWVBFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB0eXBlIG9mIHRoZSB0b2tlbiBpcyBpbmFwcHJvcHJpYXRlIGZvciBpdHMgYXR0ZW1wdGVkIHVzZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkFEX1RPS0VOX1RZUEUgPSAxMzQ5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19TRUNVUklUWV9PTl9PQkpFQ1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIHBlcmZvcm0gYSBzZWN1cml0eSBvcGVyYXRpb24gb24gYW4gb2JqZWN0IHRoYXQgaGFzIG5vIGFzc29jaWF0ZWQgc2VjdXJpdHkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1NFQ1VSSVRZX09OX09CSkVDVCA9IDEzNTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NBTlRfQUNDRVNTX0RPTUFJTl9JTkZPXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gY291bGQgbm90IGJlIHJlYWQgZnJvbSB0aGUgZG9tYWluIGNvbnRyb2xsZXIsIGVpdGhlciBiZWNhdXNlIHRoZSBtYWNoaW5lIGlzIHVuYXZhaWxhYmxlLCBvciBhY2Nlc3MgaGFzIGJlZW4gZGVuaWVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DQU5UX0FDQ0VTU19ET01BSU5fSU5GTyA9IDEzNTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfU0VSVkVSX1NUQVRFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZWN1cml0eSBhY2NvdW50IG1hbmFnZXIgKFNBTSkgb3IgbG9jYWwgc2VjdXJpdHkgYXV0aG9yaXR5IChMU0EpIHNlcnZlciB3YXMgaW4gdGhlIHdyb25nIHN0YXRlIHRvIHBlcmZvcm0gdGhlIHNlY3VyaXR5IG9wZXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9TRVJWRVJfU1RBVEUgPSAxMzUyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0RPTUFJTl9TVEFURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZG9tYWluIHdhcyBpbiB0aGUgd3Jvbmcgc3RhdGUgdG8gcGVyZm9ybSB0aGUgc2VjdXJpdHkgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0RPTUFJTl9TVEFURSA9IDEzNTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfRE9NQUlOX1JPTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBvcGVyYXRpb24gaXMgb25seSBhbGxvd2VkIGZvciB0aGUgUHJpbWFyeSBEb21haW4gQ29udHJvbGxlciBvZiB0aGUgZG9tYWluLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0RPTUFJTl9ST0xFID0gMTM1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fU1VDSF9ET01BSU5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBkb21haW4gZWl0aGVyIGRvZXMgbm90IGV4aXN0IG9yIGNvdWxkIG5vdCBiZSBjb250YWN0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1NVQ0hfRE9NQUlOID0gMTM1NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRE9NQUlOX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGRvbWFpbiBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRE9NQUlOX0VYSVNUUyA9IDEzNTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RPTUFJTl9MSU1JVF9FWENFRURFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGV4Y2VlZCB0aGUgbGltaXQgb24gdGhlIG51bWJlciBvZiBkb21haW5zIHBlciBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RPTUFJTl9MSU1JVF9FWENFRURFRCA9IDEzNTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVEVSTkFMX0RCX0NPUlJVUFRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIGNvbXBsZXRlIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGJlY2F1c2Ugb2YgZWl0aGVyIGEgY2F0YXN0cm9waGljIG1lZGlhIGZhaWx1cmUgb3IgYSBkYXRhIHN0cnVjdHVyZSBjb3JydXB0aW9uIG9uIHRoZSBkaXNrLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlRFUk5BTF9EQl9DT1JSVVBUSU9OID0gMTM1ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5URVJOQUxfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVEVSTkFMX0VSUk9SID0gMTM1OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfR0VORVJJQ19OT1RfTUFQUEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEdlbmVyaWMgYWNjZXNzIHR5cGVzIHdlcmUgY29udGFpbmVkIGluIGFuIGFjY2VzcyBtYXNrIHdoaWNoIHNob3VsZCBhbHJlYWR5IGJlIG1hcHBlZCB0byBub25nZW5lcmljIHR5cGVzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9HRU5FUklDX05PVF9NQVBQRUQgPSAxMzYwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfREVTQ1JJUFRPUl9GT1JNQVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBzZWN1cml0eSBkZXNjcmlwdG9yIGlzIG5vdCBpbiB0aGUgcmlnaHQgZm9ybWF0IChhYnNvbHV0ZSBvciBzZWxmLXJlbGF0aXZlKS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkFEX0RFU0NSSVBUT1JfRk9STUFUID0gMTM2MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX0xPR09OX1BST0NFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgcmVzdHJpY3RlZCBmb3IgdXNlIGJ5IGxvZ29uIHByb2Nlc3NlcyBvbmx5LiBUaGUgY2FsbGluZyBwcm9jZXNzIGhhcyBub3QgcmVnaXN0ZXJlZCBhcyBhIGxvZ29uIHByb2Nlc3MuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PVF9MT0dPTl9QUk9DRVNTID0gMTM2MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTE9HT05fU0VTU0lPTl9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQ2Fubm90IHN0YXJ0IGEgbmV3IGxvZ29uIHNlc3Npb24gd2l0aCBhbiBJRCB0aGF0IGlzIGFscmVhZHkgaW4gdXNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9MT0dPTl9TRVNTSU9OX0VYSVNUUyA9IDEzNjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX1NVQ0hfUEFDS0FHRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHNwZWNpZmllZCBhdXRoZW50aWNhdGlvbiBwYWNrYWdlIGlzIHVua25vd24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1NVQ0hfUEFDS0FHRSA9IDEzNjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9MT0dPTl9TRVNTSU9OX1NUQVRFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBsb2dvbiBzZXNzaW9uIGlzIG5vdCBpbiBhIHN0YXRlIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfTE9HT05fU0VTU0lPTl9TVEFURSA9IDEzNjU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0xPR09OX1NFU1NJT05fQ09MTElTSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBsb2dvbiBzZXNzaW9uIElEIGlzIGFscmVhZHkgaW4gdXNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9MT0dPTl9TRVNTSU9OX0NPTExJU0lPTiA9IDEzNjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfTE9HT05fVFlQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGxvZ29uIHJlcXVlc3QgY29udGFpbmVkIGFuIGludmFsaWQgbG9nb24gdHlwZSB2YWx1ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9MT0dPTl9UWVBFID0gMTM2NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0FOTk9UX0lNUEVSU09OQVRFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuYWJsZSB0byBpbXBlcnNvbmF0ZSB1c2luZyBhIG5hbWVkIHBpcGUgdW50aWwgZGF0YSBoYXMgYmVlbiByZWFkIGZyb20gdGhhdCBwaXBlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DQU5OT1RfSU1QRVJTT05BVEUgPSAxMzY4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SWEFDVF9JTlZBTElEX1NUQVRFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBvZiBhIHJlZ2lzdHJ5IHN1YnRyZWUgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JYQUNUX0lOVkFMSURfU1RBVEUgPSAxMzY5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SWEFDVF9DT01NSVRfRkFJTFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBpbnRlcm5hbCBzZWN1cml0eSBkYXRhYmFzZSBjb3JydXB0aW9uIGhhcyBiZWVuIGVuY291bnRlcmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SWEFDVF9DT01NSVRfRkFJTFVSRSA9IDEzNzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NQRUNJQUxfQUNDT1VOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBvbiBidWlsdC1pbiBhY2NvdW50cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1BFQ0lBTF9BQ0NPVU5UID0gMTM3MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1BFQ0lBTF9HUk9VUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBvbiB0aGlzIGJ1aWx0LWluIHNwZWNpYWwgZ3JvdXAuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NQRUNJQUxfR1JPVVAgPSAxMzcyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TUEVDSUFMX1VTRVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQ2Fubm90IHBlcmZvcm0gdGhpcyBvcGVyYXRpb24gb24gdGhpcyBidWlsdC1pbiBzcGVjaWFsIHVzZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NQRUNJQUxfVVNFUiA9IDEzNzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX01FTUJFUlNfUFJJTUFSWV9HUk9VUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdXNlciBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIGEgZ3JvdXAgYmVjYXVzZSB0aGUgZ3JvdXAgaXMgY3VycmVudGx5IHRoZSB1c2VyJ3MgcHJpbWFyeSBncm91cC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTUVNQkVSU19QUklNQVJZX0dST1VQID0gMTM3NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVE9LRU5fQUxSRUFEWV9JTl9VU0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHRva2VuIGlzIGFscmVhZHkgaW4gdXNlIGFzIGEgcHJpbWFyeSB0b2tlbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVE9LRU5fQUxSRUFEWV9JTl9VU0UgPSAxMzc1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19TVUNIX0FMSUFTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgbG9jYWwgZ3JvdXAgZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1NVQ0hfQUxJQVMgPSAxMzc2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NRU1CRVJfTk9UX0lOX0FMSUFTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgYWNjb3VudCBuYW1lIGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgbG9jYWwgZ3JvdXAuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX01FTUJFUl9OT1RfSU5fQUxJQVMgPSAxMzc3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NRU1CRVJfSU5fQUxJQVNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBhY2NvdW50IG5hbWUgaXMgYWxyZWFkeSBhIG1lbWJlciBvZiB0aGUgbG9jYWwgZ3JvdXAuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX01FTUJFUl9JTl9BTElBUyA9IDEzNzg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FMSUFTX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGxvY2FsIGdyb3VwIGFscmVhZHkgZXhpc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BTElBU19FWElTVFMgPSAxMzc5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9MT0dPTl9OT1RfR1JBTlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBMb2dvbiBmYWlsdXJlOiB0aGUgdXNlciBoYXMgbm90IGJlZW4gZ3JhbnRlZCB0aGUgcmVxdWVzdGVkIGxvZ29uIHR5cGUgYXQgdGhpcyBjb21wdXRlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTE9HT05fTk9UX0dSQU5URUQgPSAxMzgwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9UT09fTUFOWV9TRUNSRVRTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNyZXRzIHRoYXQgbWF5IGJlIHN0b3JlZCBpbiBhIHNpbmdsZSBzeXN0ZW0gaGFzIGJlZW4gZXhjZWVkZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RPT19NQU5ZX1NFQ1JFVFMgPSAxMzgxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TRUNSRVRfVE9PX0xPTkdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGxlbmd0aCBvZiBhIHNlY3JldCBleGNlZWRzIHRoZSBtYXhpbXVtIGxlbmd0aCBhbGxvd2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TRUNSRVRfVE9PX0xPTkcgPSAxMzgyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlRFUk5BTF9EQl9FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbG9jYWwgc2VjdXJpdHkgYXV0aG9yaXR5IGRhdGFiYXNlIGNvbnRhaW5zIGFuIGludGVybmFsIGluY29uc2lzdGVuY3kuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVEVSTkFMX0RCX0VSUk9SID0gMTM4MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVE9PX01BTllfQ09OVEVYVF9JRFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRHVyaW5nIGEgbG9nb24gYXR0ZW1wdCwgdGhlIHVzZXIncyBzZWN1cml0eSBjb250ZXh0IGFjY3VtdWxhdGVkIHRvbyBtYW55IHNlY3VyaXR5IElEcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVE9PX01BTllfQ09OVEVYVF9JRFMgPSAxMzg0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9MT0dPTl9UWVBFX05PVF9HUkFOVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIExvZ29uIGZhaWx1cmU6IHRoZSB1c2VyIGhhcyBub3QgYmVlbiBncmFudGVkIHRoZSByZXF1ZXN0ZWQgbG9nb24gdHlwZSBhdCB0aGlzIGNvbXB1dGVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9MT0dPTl9UWVBFX05PVF9HUkFOVEVEID0gMTM4NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTlRfQ1JPU1NfRU5DUllQVElPTl9SRVFVSVJFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGNyb3NzLWVuY3J5cHRlZCBwYXNzd29yZCBpcyBuZWNlc3NhcnkgdG8gY2hhbmdlIGEgdXNlciBwYXNzd29yZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTlRfQ1JPU1NfRU5DUllQVElPTl9SRVFVSVJFRCA9IDEzODY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX1NVQ0hfTUVNQkVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgbWVtYmVyIGNvdWxkIG5vdCBiZSBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlIGxvY2FsIGdyb3VwIGJlY2F1c2UgdGhlIG1lbWJlciBkb2VzIG5vdCBleGlzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fU1VDSF9NRU1CRVIgPSAxMzg3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX01FTUJFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIG5ldyBtZW1iZXIgY291bGQgbm90IGJlIGFkZGVkIHRvIGEgbG9jYWwgZ3JvdXAgYmVjYXVzZSB0aGUgbWVtYmVyIGhhcyB0aGUgd3JvbmcgYWNjb3VudCB0eXBlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX01FTUJFUiA9IDEzODg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1RPT19NQU5ZX1NJRFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVG9vIG1hbnkgc2VjdXJpdHkgSURzIGhhdmUgYmVlbiBzcGVjaWZpZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RPT19NQU5ZX1NJRFMgPSAxMzg5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9MTV9DUk9TU19FTkNSWVBUSU9OX1JFUVVJUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgY3Jvc3MtZW5jcnlwdGVkIHBhc3N3b3JkIGlzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhpcyB1c2VyIHBhc3N3b3JkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9MTV9DUk9TU19FTkNSWVBUSU9OX1JFUVVJUkVEID0gMTM5MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fSU5IRVJJVEFOQ0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW5kaWNhdGVzIGFuIEFDTCBjb250YWlucyBubyBpbmhlcml0YWJsZSBjb21wb25lbnRzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19JTkhFUklUQU5DRSA9IDEzOTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0ZJTEVfQ09SUlVQVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZSBvciBkaXJlY3RvcnkgaXMgY29ycnVwdGVkIGFuZCB1bnJlYWRhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9GSUxFX0NPUlJVUFQgPSAxMzkyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ESVNLX0NPUlJVUFRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpc2sgc3RydWN0dXJlIGlzIGNvcnJ1cHRlZCBhbmQgdW5yZWFkYWJsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRElTS19DT1JSVVBUID0gMTM5MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fVVNFUl9TRVNTSU9OX0tFWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGVyZSBpcyBubyB1c2VyIHNlc3Npb24ga2V5IGZvciB0aGUgc3BlY2lmaWVkIGxvZ29uIHNlc3Npb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1VTRVJfU0VTU0lPTl9LRVkgPSAxMzk0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9MSUNFTlNFX1FVT1RBX0VYQ0VFREVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZXJ2aWNlIGJlaW5nIGFjY2Vzc2VkIGlzIGxpY2Vuc2VkIGZvciBhIHBhcnRpY3VsYXIgbnVtYmVyIG9mIGNvbm5lY3Rpb25zLlxuLy8gIE5vIG1vcmUgY29ubmVjdGlvbnMgY2FuIGJlIG1hZGUgdG8gdGhlIHNlcnZpY2UgYXQgdGhpcyB0aW1lIGJlY2F1c2UgdGhlcmUgYXJlIGFscmVhZHkgYXMgbWFueSBjb25uZWN0aW9ucyBhcyB0aGUgc2VydmljZSBjYW4gYWNjZXB0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9MSUNFTlNFX1FVT1RBX0VYQ0VFREVEID0gMTM5NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV1JPTkdfVEFSR0VUX05BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTG9nb24gRmFpbHVyZTogVGhlIHRhcmdldCBhY2NvdW50IG5hbWUgaXMgaW5jb3JyZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XUk9OR19UQVJHRVRfTkFNRSA9IDEzOTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX01VVFVBTF9BVVRIX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNdXR1YWwgQXV0aGVudGljYXRpb24gZmFpbGVkLiBUaGUgc2VydmVyJ3MgcGFzc3dvcmQgaXMgb3V0IG9mIGRhdGUgYXQgdGhlIGRvbWFpbiBjb250cm9sbGVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9NVVRVQUxfQVVUSF9GQUlMRUQgPSAxMzk3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9USU1FX1NLRVdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgaXMgYSB0aW1lIGFuZC9vciBkYXRlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RJTUVfU0tFVyA9IDEzOTg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NVUlJFTlRfRE9NQUlOX05PVF9BTExPV0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgb3BlcmF0aW9uIGNhbiBub3QgYmUgcGVyZm9ybWVkIG9uIHRoZSBjdXJyZW50IGRvbWFpbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1VSUkVOVF9ET01BSU5fTk9UX0FMTE9XRUQgPSAxMzk5O1xuXG4vLyBFbmQgb2Ygc2VjdXJpdHkgZXJyb3IgY29kZXNcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vIFdpblVzZXIgRXJyb3IgQ29kZXMgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9XSU5ET1dfSEFORExFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgd2luZG93IGhhbmRsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9XSU5ET1dfSEFORExFID0gMTQwMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9NRU5VX0hBTkRMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIG1lbnUgaGFuZGxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX01FTlVfSEFORExFID0gMTQwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9DVVJTT1JfSEFORExFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgY3Vyc29yIGhhbmRsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9DVVJTT1JfSEFORExFID0gMTQwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9BQ0NFTF9IQU5ETEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBhY2NlbGVyYXRvciB0YWJsZSBoYW5kbGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfQUNDRUxfSEFORExFID0gMTQwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9IT09LX0hBTkRMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIGhvb2sgaGFuZGxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0hPT0tfSEFORExFID0gMTQwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9EV1BfSEFORExFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgaGFuZGxlIHRvIGEgbXVsdGlwbGUtd2luZG93IHBvc2l0aW9uIHN0cnVjdHVyZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9EV1BfSEFORExFID0gMTQwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVExXX1dJVEhfV1NDSElMRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgY3JlYXRlIGEgdG9wLWxldmVsIGNoaWxkIHdpbmRvdy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVExXX1dJVEhfV1NDSElMRCA9IDE0MDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NBTk5PVF9GSU5EX1dORF9DTEFTU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgZmluZCB3aW5kb3cgY2xhc3MuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NBTk5PVF9GSU5EX1dORF9DTEFTUyA9IDE0MDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1dJTkRPV19PRl9PVEhFUl9USFJFQURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCB3aW5kb3c7IGl0IGJlbG9uZ3MgdG8gb3RoZXIgdGhyZWFkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XSU5ET1dfT0ZfT1RIRVJfVEhSRUFEID0gMTQwODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSE9US0VZX0FMUkVBRFlfUkVHSVNURVJFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBIb3Qga2V5IGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSE9US0VZX0FMUkVBRFlfUkVHSVNURVJFRCA9IDE0MDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMQVNTX0FMUkVBRFlfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENsYXNzIGFscmVhZHkgZXhpc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTEFTU19BTFJFQURZX0VYSVNUUyA9IDE0MTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMQVNTX0RPRVNfTk9UX0VYSVNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENsYXNzIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTEFTU19ET0VTX05PVF9FWElTVCA9IDE0MTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMQVNTX0hBU19XSU5ET1dTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENsYXNzIHN0aWxsIGhhcyBvcGVuIHdpbmRvd3MuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMQVNTX0hBU19XSU5ET1dTID0gMTQxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9JTkRFWFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIGluZGV4LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0lOREVYID0gMTQxMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9JQ09OX0hBTkRMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIGljb24gaGFuZGxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0lDT05fSEFORExFID0gMTQxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUFJJVkFURV9ESUFMT0dfSU5ERVhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVXNpbmcgcHJpdmF0ZSBESUFMT0cgd2luZG93IHdvcmRzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUklWQVRFX0RJQUxPR19JTkRFWCA9IDE0MTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0xJU1RCT1hfSURfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBsaXN0IGJveCBpZGVudGlmaWVyIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xJU1RCT1hfSURfTk9UX0ZPVU5EID0gMTQxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fV0lMRENBUkRfQ0hBUkFDVEVSU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyB3aWxkY2FyZHMgd2VyZSBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fV0lMRENBUkRfQ0hBUkFDVEVSUyA9IDE0MTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMSVBCT0FSRF9OT1RfT1BFTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaHJlYWQgZG9lcyBub3QgaGF2ZSBhIGNsaXBib2FyZCBvcGVuLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTElQQk9BUkRfTk9UX09QRU4gPSAxNDE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9IT1RLRVlfTk9UX1JFR0lTVEVSRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSG90IGtleSBpcyBub3QgcmVnaXN0ZXJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSE9US0VZX05PVF9SRUdJU1RFUkVEID0gMTQxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV0lORE9XX05PVF9ESUFMT0dcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHdpbmRvdyBpcyBub3QgYSB2YWxpZCBkaWFsb2cgd2luZG93LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XSU5ET1dfTk9UX0RJQUxPRyA9IDE0MjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NPTlRST0xfSURfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENvbnRyb2wgSUQgbm90IGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DT05UUk9MX0lEX05PVF9GT1VORCA9IDE0MjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfQ09NQk9CT1hfTUVTU0FHRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIG1lc3NhZ2UgZm9yIGEgY29tYm8gYm94IGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBhbiBlZGl0IGNvbnRyb2wuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfQ09NQk9CT1hfTUVTU0FHRSA9IDE0MjI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1dJTkRPV19OT1RfQ09NQk9CT1hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHdpbmRvdyBpcyBub3QgYSBjb21ibyBib3guXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1dJTkRPV19OT1RfQ09NQk9CT1ggPSAxNDIzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0VESVRfSEVJR0hUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEhlaWdodCBtdXN0IGJlIGxlc3MgdGhhbiAyNTYuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRURJVF9IRUlHSFQgPSAxNDI0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EQ19OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBkZXZpY2UgY29udGV4dCAoREMpIGhhbmRsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRENfTk9UX0ZPVU5EID0gMTQyNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9IT09LX0ZJTFRFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIGhvb2sgcHJvY2VkdXJlIHR5cGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfSE9PS19GSUxURVIgPSAxNDI2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0ZJTFRFUl9QUk9DXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgaG9vayBwcm9jZWR1cmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRklMVEVSX1BST0MgPSAxNDI3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9IT09LX05FRURTX0hNT0Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQ2Fubm90IHNldCBub25sb2NhbCBob29rIHdpdGhvdXQgYSBtb2R1bGUgaGFuZGxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9IT09LX05FRURTX0hNT0QgPSAxNDI4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9HTE9CQUxfT05MWV9IT09LXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgaG9vayBwcm9jZWR1cmUgY2FuIG9ubHkgYmUgc2V0IGdsb2JhbGx5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9HTE9CQUxfT05MWV9IT09LID0gMTQyOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSk9VUk5BTF9IT09LX1NFVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgam91cm5hbCBob29rIHByb2NlZHVyZSBpcyBhbHJlYWR5IGluc3RhbGxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSk9VUk5BTF9IT09LX1NFVCA9IDE0MzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0hPT0tfTk9UX0lOU1RBTExFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgaG9vayBwcm9jZWR1cmUgaXMgbm90IGluc3RhbGxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSE9PS19OT1RfSU5TVEFMTEVEID0gMTQzMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9MQl9NRVNTQUdFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgbWVzc2FnZSBmb3Igc2luZ2xlLXNlbGVjdGlvbiBsaXN0IGJveC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9MQl9NRVNTQUdFID0gMTQzMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0VUQ09VTlRfT05fQkFEX0xCXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIExCX1NFVENPVU5UIHNlbnQgdG8gbm9uLWxhenkgbGlzdCBib3guXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFVENPVU5UX09OX0JBRF9MQiA9IDE0MzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0xCX1dJVEhPVVRfVEFCU1RPUFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBsaXN0IGJveCBkb2VzIG5vdCBzdXBwb3J0IHRhYiBzdG9wcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTEJfV0lUSE9VVF9UQUJTVE9QUyA9IDE0MzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RFU1RST1lfT0JKRUNUX09GX09USEVSX1RIUkVBRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgZGVzdHJveSBvYmplY3QgY3JlYXRlZCBieSBhbm90aGVyIHRocmVhZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVTVFJPWV9PQkpFQ1RfT0ZfT1RIRVJfVEhSRUFEID0gMTQzNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0hJTERfV0lORE9XX01FTlVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQ2hpbGQgd2luZG93cyBjYW5ub3QgaGF2ZSBtZW51cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0hJTERfV0lORE9XX01FTlUgPSAxNDM2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19TWVNURU1fTUVOVVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgd2luZG93IGRvZXMgbm90IGhhdmUgYSBzeXN0ZW0gbWVudS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fU1lTVEVNX01FTlUgPSAxNDM3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX01TR0JPWF9TVFlMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIG1lc3NhZ2UgYm94IHN0eWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX01TR0JPWF9TVFlMRSA9IDE0Mzg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfU1BJX1ZBTFVFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgc3lzdGVtLXdpZGUgKFNQSV8qKSBwYXJhbWV0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfU1BJX1ZBTFVFID0gMTQzOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0NSRUVOX0FMUkVBRFlfTE9DS0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNjcmVlbiBhbHJlYWR5IGxvY2tlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU0NSRUVOX0FMUkVBRFlfTE9DS0VEID0gMTQ0MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSFdORFNfSEFWRV9ESUZGX1BBUkVOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbGwgaGFuZGxlcyB0byB3aW5kb3dzIGluIGEgbXVsdGlwbGUtd2luZG93IHBvc2l0aW9uIHN0cnVjdHVyZSBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyZW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9IV05EU19IQVZFX0RJRkZfUEFSRU5UID0gMTQ0MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX0NISUxEX1dJTkRPV1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgd2luZG93IGlzIG5vdCBhIGNoaWxkIHdpbmRvdy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX0NISUxEX1dJTkRPVyA9IDE0NDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfR1dfQ09NTUFORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIEdXXyogY29tbWFuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9HV19DT01NQU5EID0gMTQ0MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9USFJFQURfSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCB0aHJlYWQgaWRlbnRpZmllci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9USFJFQURfSUQgPSAxNDQ0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT05fTURJQ0hJTERfV0lORE9XXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCBwcm9jZXNzIGEgbWVzc2FnZSBmcm9tIGEgd2luZG93IHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgZG9jdW1lbnQgaW50ZXJmYWNlIChNREkpIHdpbmRvdy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9OX01ESUNISUxEX1dJTkRPVyA9IDE0NDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BPUFVQX0FMUkVBRFlfQUNUSVZFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFBvcHVwIG1lbnUgYWxyZWFkeSBhY3RpdmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BPUFVQX0FMUkVBRFlfQUNUSVZFID0gMTQ0NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fU0NST0xMQkFSU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgd2luZG93IGRvZXMgbm90IGhhdmUgc2Nyb2xsIGJhcnMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1NDUk9MTEJBUlMgPSAxNDQ3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1NDUk9MTEJBUl9SQU5HRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY3JvbGwgYmFyIHJhbmdlIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTUFYTE9ORy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9TQ1JPTExCQVJfUkFOR0UgPSAxNDQ4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1NIT1dXSU5fQ09NTUFORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3Qgc2hvdyBvciByZW1vdmUgdGhlIHdpbmRvdyBpbiB0aGUgd2F5IHNwZWNpZmllZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9TSE9XV0lOX0NPTU1BTkQgPSAxNDQ5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19TWVNURU1fUkVTT1VSQ0VTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEluc3VmZmljaWVudCBzeXN0ZW0gcmVzb3VyY2VzIGV4aXN0IHRvIGNvbXBsZXRlIHRoZSByZXF1ZXN0ZWQgc2VydmljZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fU1lTVEVNX1JFU09VUkNFUyA9IDE0NTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PTlBBR0VEX1NZU1RFTV9SRVNPVVJDRVNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW5zdWZmaWNpZW50IHN5c3RlbSByZXNvdXJjZXMgZXhpc3QgdG8gY29tcGxldGUgdGhlIHJlcXVlc3RlZCBzZXJ2aWNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT05QQUdFRF9TWVNURU1fUkVTT1VSQ0VTID0gMTQ1MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUEFHRURfU1lTVEVNX1JFU09VUkNFU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnN1ZmZpY2llbnQgc3lzdGVtIHJlc291cmNlcyBleGlzdCB0byBjb21wbGV0ZSB0aGUgcmVxdWVzdGVkIHNlcnZpY2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BBR0VEX1NZU1RFTV9SRVNPVVJDRVMgPSAxNDUyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9XT1JLSU5HX1NFVF9RVU9UQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnN1ZmZpY2llbnQgcXVvdGEgdG8gY29tcGxldGUgdGhlIHJlcXVlc3RlZCBzZXJ2aWNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XT1JLSU5HX1NFVF9RVU9UQSA9IDE0NTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BBR0VGSUxFX1FVT1RBXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEluc3VmZmljaWVudCBxdW90YSB0byBjb21wbGV0ZSB0aGUgcmVxdWVzdGVkIHNlcnZpY2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BBR0VGSUxFX1FVT1RBID0gMTQ1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ09NTUlUTUVOVF9MSU1JVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcGFnaW5nIGZpbGUgaXMgdG9vIHNtYWxsIGZvciB0aGlzIG9wZXJhdGlvbiB0byBjb21wbGV0ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ09NTUlUTUVOVF9MSU1JVCA9IDE0NTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX01FTlVfSVRFTV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBtZW51IGl0ZW0gd2FzIG5vdCBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTUVOVV9JVEVNX05PVF9GT1VORCA9IDE0NTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfS0VZQk9BUkRfSEFORExFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQga2V5Ym9hcmQgbGF5b3V0IGhhbmRsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9LRVlCT0FSRF9IQU5ETEUgPSAxNDU3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9IT09LX1RZUEVfTk9UX0FMTE9XRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSG9vayB0eXBlIG5vdCBhbGxvd2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9IT09LX1RZUEVfTk9UX0FMTE9XRUQgPSAxNDU4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRVFVSVJFU19JTlRFUkFDVElWRV9XSU5ET1dTVEFUSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgb3BlcmF0aW9uIHJlcXVpcmVzIGFuIGludGVyYWN0aXZlIHdpbmRvdyBzdGF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVFVSVJFU19JTlRFUkFDVElWRV9XSU5ET1dTVEFUSU9OID0gMTQ1OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVElNRU9VVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIG9wZXJhdGlvbiByZXR1cm5lZCBiZWNhdXNlIHRoZSB0aW1lb3V0IHBlcmlvZCBleHBpcmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9USU1FT1VUID0gMTQ2MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9NT05JVE9SX0hBTkRMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIG1vbml0b3IgaGFuZGxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX01PTklUT1JfSEFORExFID0gMTQ2MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5DT1JSRUNUX1NJWkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW5jb3JyZWN0IHNpemUgYXJndW1lbnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOQ09SUkVDVF9TSVpFID0gMTQ2MjtcblxuLy8gRW5kIG9mIFdpblVzZXIgZXJyb3IgY29kZXNcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vIEV2ZW50bG9nIFN0YXR1cyBDb2RlcyAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRVZFTlRMT0dfRklMRV9DT1JSVVBUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBldmVudCBsb2cgZmlsZSBpcyBjb3JydXB0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VWRU5UTE9HX0ZJTEVfQ09SUlVQVCA9IDE1MDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0VWRU5UTE9HX0NBTlRfU1RBUlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gZXZlbnQgbG9nIGZpbGUgY291bGQgYmUgb3BlbmVkLCBzbyB0aGUgZXZlbnQgbG9nZ2luZyBzZXJ2aWNlIGRpZCBub3Qgc3RhcnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0VWRU5UTE9HX0NBTlRfU1RBUlQgPSAxNTAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9MT0dfRklMRV9GVUxMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBldmVudCBsb2cgZmlsZSBpcyBmdWxsLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9MT0dfRklMRV9GVUxMID0gMTUwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRVZFTlRMT0dfRklMRV9DSEFOR0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBldmVudCBsb2cgZmlsZSBoYXMgY2hhbmdlZCBiZXR3ZWVuIHJlYWQgb3BlcmF0aW9ucy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRVZFTlRMT0dfRklMRV9DSEFOR0VEID0gMTUwMztcblxuLy8gRW5kIG9mIGV2ZW50bG9nIGVycm9yIGNvZGVzXG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyBNU0kgRXJyb3IgQ29kZXMgICAgICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOU1RBTExfU0VSVklDRV9GQUlMVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBXaW5kb3dzIEluc3RhbGxlciBTZXJ2aWNlIGNvdWxkIG5vdCBiZSBhY2Nlc3NlZC4gVGhpcyBjYW4gb2NjdXIgaWYgeW91IGFyZSBydW5uaW5nIFdpbmRvd3MgaW4gc2FmZSBtb2RlLCBvciBpZiB0aGUgV2luZG93cyBJbnN0YWxsZXIgaXMgbm90IGNvcnJlY3RseSBpbnN0YWxsZWQuIENvbnRhY3QgeW91ciBzdXBwb3J0IHBlcnNvbm5lbCBmb3IgYXNzaXN0YW5jZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5TVEFMTF9TRVJWSUNFX0ZBSUxVUkUgPSAxNjAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNUQUxMX1VTRVJFWElUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVzZXIgY2FuY2VsbGVkIGluc3RhbGxhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5TVEFMTF9VU0VSRVhJVCA9IDE2MDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOU1RBTExfRkFJTFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBGYXRhbCBlcnJvciBkdXJpbmcgaW5zdGFsbGF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlNUQUxMX0ZBSUxVUkUgPSAxNjAzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNUQUxMX1NVU1BFTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW5zdGFsbGF0aW9uIHN1c3BlbmRlZCwgaW5jb21wbGV0ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5TVEFMTF9TVVNQRU5EID0gMTYwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5LTk9XTl9QUk9EVUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgYWN0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHByb2R1Y3RzIHRoYXQgYXJlIGN1cnJlbnRseSBpbnN0YWxsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOS05PV05fUFJPRFVDVCA9IDE2MDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VOS05PV05fRkVBVFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBGZWF0dXJlIElEIG5vdCByZWdpc3RlcmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9VTktOT1dOX0ZFQVRVUkUgPSAxNjA2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9VTktOT1dOX0NPTVBPTkVOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDb21wb25lbnQgSUQgbm90IHJlZ2lzdGVyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOS05PV05fQ09NUE9ORU5UID0gMTYwNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5LTk9XTl9QUk9QRVJUWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBVbmtub3duIHByb3BlcnR5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9VTktOT1dOX1BST1BFUlRZID0gMTYwODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9IQU5ETEVfU1RBVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSGFuZGxlIGlzIGluIGFuIGludmFsaWQgc3RhdGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfSEFORExFX1NUQVRFID0gMTYwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQkFEX0NPTkZJR1VSQVRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhpcyBwcm9kdWN0IGlzIGNvcnJ1cHQuICBDb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9DT05GSUdVUkFUSU9OID0gMTYxMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5ERVhfQUJTRU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENvbXBvbmVudCBxdWFsaWZpZXIgbm90IHByZXNlbnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOREVYX0FCU0VOVCA9IDE2MTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOU1RBTExfU09VUkNFX0FCU0VOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgaW5zdGFsbGF0aW9uIHNvdXJjZSBmb3IgdGhpcyBwcm9kdWN0IGlzIG5vdCBhdmFpbGFibGUuICBWZXJpZnkgdGhhdCB0aGUgc291cmNlIGV4aXN0cyBhbmQgdGhhdCB5b3UgY2FuIGFjY2VzcyBpdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5TVEFMTF9TT1VSQ0VfQUJTRU5UID0gMTYxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5TVEFMTF9QQUNLQUdFX1ZFUlNJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBpbnN0YWxsYXRpb24gcGFja2FnZSBjYW5ub3QgYmUgaW5zdGFsbGVkIGJ5IHRoZSBXaW5kb3dzIEluc3RhbGxlciBzZXJ2aWNlLiAgWW91IG11c3QgaW5zdGFsbCBhIFdpbmRvd3Mgc2VydmljZSBwYWNrIHRoYXQgY29udGFpbnMgYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBXaW5kb3dzIEluc3RhbGxlciBzZXJ2aWNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlNUQUxMX1BBQ0tBR0VfVkVSU0lPTiA9IDE2MTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BST0RVQ1RfVU5JTlNUQUxMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgUHJvZHVjdCBpcyB1bmluc3RhbGxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUFJPRFVDVF9VTklOU1RBTExFRCA9IDE2MTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0JBRF9RVUVSWV9TWU5UQVhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU1FMIHF1ZXJ5IHN5bnRheCBpbnZhbGlkIG9yIHVuc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfUVVFUllfU1lOVEFYID0gMTYxNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9GSUVMRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBSZWNvcmQgZmllbGQgZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRklFTEQgPSAxNjE2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ERVZJQ0VfUkVNT1ZFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RFVklDRV9SRU1PVkVEID0gMTYxNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5TVEFMTF9BTFJFQURZX1JVTk5JTkdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW5vdGhlciBpbnN0YWxsYXRpb24gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4gIENvbXBsZXRlIHRoYXQgaW5zdGFsbGF0aW9uIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggdGhpcyBpbnN0YWxsLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlNUQUxMX0FMUkVBRFlfUlVOTklORyA9IDE2MTg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOU1RBTExfUEFDS0FHRV9PUEVOX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIGluc3RhbGxhdGlvbiBwYWNrYWdlIGNvdWxkIG5vdCBiZSBvcGVuZWQuICBWZXJpZnkgdGhhdCB0aGUgcGFja2FnZSBleGlzdHMgYW5kIHRoYXQgeW91IGNhbiBhY2Nlc3MgaXQsIG9yIGNvbnRhY3QgdGhlIGFwcGxpY2F0aW9uIHZlbmRvciB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIGEgdmFsaWQgV2luZG93cyBJbnN0YWxsZXIgcGFja2FnZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5TVEFMTF9QQUNLQUdFX09QRU5fRkFJTEVEID0gMTYxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5TVEFMTF9QQUNLQUdFX0lOVkFMSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBpbnN0YWxsYXRpb24gcGFja2FnZSBjb3VsZCBub3QgYmUgb3BlbmVkLiAgQ29udGFjdCB0aGUgYXBwbGljYXRpb24gdmVuZG9yIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBXaW5kb3dzIEluc3RhbGxlciBwYWNrYWdlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlNUQUxMX1BBQ0tBR0VfSU5WQUxJRCA9IDE2MjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOU1RBTExfVUlfRkFJTFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGVyZSB3YXMgYW4gZXJyb3Igc3RhcnRpbmcgdGhlIFdpbmRvd3MgSW5zdGFsbGVyIHNlcnZpY2UgdXNlciBpbnRlcmZhY2UuICBDb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOU1RBTExfVUlfRkFJTFVSRSA9IDE2MjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOU1RBTExfTE9HX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRXJyb3Igb3BlbmluZyBpbnN0YWxsYXRpb24gbG9nIGZpbGUuIFZlcmlmeSB0aGF0IHRoZSBzcGVjaWZpZWQgbG9nIGZpbGUgbG9jYXRpb24gZXhpc3RzIGFuZCB0aGF0IHlvdSBjYW4gd3JpdGUgdG8gaXQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOU1RBTExfTE9HX0ZBSUxVUkUgPSAxNjIyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNUQUxMX0xBTkdVQUdFX1VOU1VQUE9SVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBsYW5ndWFnZSBvZiB0aGlzIGluc3RhbGxhdGlvbiBwYWNrYWdlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBzeXN0ZW0uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOU1RBTExfTEFOR1VBR0VfVU5TVVBQT1JURUQgPSAxNjIzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNUQUxMX1RSQU5TRk9STV9GQUlMVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVycm9yIGFwcGx5aW5nIHRyYW5zZm9ybXMuICBWZXJpZnkgdGhhdCB0aGUgc3BlY2lmaWVkIHRyYW5zZm9ybSBwYXRocyBhcmUgdmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOU1RBTExfVFJBTlNGT1JNX0ZBSUxVUkUgPSAxNjI0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNUQUxMX1BBQ0tBR0VfUkVKRUNURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBpbnN0YWxsYXRpb24gaXMgZm9yYmlkZGVuIGJ5IHN5c3RlbSBwb2xpY3kuICBDb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOU1RBTExfUEFDS0FHRV9SRUpFQ1RFRCA9IDE2MjU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0ZVTkNUSU9OX05PVF9DQUxMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRnVuY3Rpb24gY291bGQgbm90IGJlIGV4ZWN1dGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9GVU5DVElPTl9OT1RfQ0FMTEVEID0gMTYyNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRlVOQ1RJT05fRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEZ1bmN0aW9uIGZhaWxlZCBkdXJpbmcgZXhlY3V0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9GVU5DVElPTl9GQUlMRUQgPSAxNjI3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1RBQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgb3IgdW5rbm93biB0YWJsZSBzcGVjaWZpZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfVEFCTEUgPSAxNjI4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EQVRBVFlQRV9NSVNNQVRDSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBEYXRhIHN1cHBsaWVkIGlzIG9mIHdyb25nIHR5cGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RBVEFUWVBFX01JU01BVENIID0gMTYyOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5TVVBQT1JURURfVFlQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBEYXRhIG9mIHRoaXMgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9VTlNVUFBPUlRFRF9UWVBFID0gMTYzMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1JFQVRFX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgV2luZG93cyBJbnN0YWxsZXIgc2VydmljZSBmYWlsZWQgdG8gc3RhcnQuICBDb250YWN0IHlvdXIgc3VwcG9ydCBwZXJzb25uZWwuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NSRUFURV9GQUlMRUQgPSAxNjMxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNUQUxMX1RFTVBfVU5XUklUQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgVGVtcCBmb2xkZXIgaXMgb24gYSBkcml2ZSB0aGF0IGlzIGZ1bGwgb3IgaXMgaW5hY2Nlc3NpYmxlLiBGcmVlIHVwIHNwYWNlIG9uIHRoZSBkcml2ZSBvciB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSB3cml0ZSBwZXJtaXNzaW9uIG9uIHRoZSBUZW1wIGZvbGRlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5TVEFMTF9URU1QX1VOV1JJVEFCTEUgPSAxNjMyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNUQUxMX1BMQVRGT1JNX1VOU1VQUE9SVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgaW5zdGFsbGF0aW9uIHBhY2thZ2UgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHByb2Nlc3NvciB0eXBlLiBDb250YWN0IHlvdXIgcHJvZHVjdCB2ZW5kb3IuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOU1RBTExfUExBVEZPUk1fVU5TVVBQT1JURUQgPSAxNjMzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNUQUxMX05PVFVTRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQ29tcG9uZW50IG5vdCB1c2VkIG9uIHRoaXMgY29tcHV0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOU1RBTExfTk9UVVNFRCA9IDE2MzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BBVENIX1BBQ0tBR0VfT1BFTl9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBwYXRjaCBwYWNrYWdlIGNvdWxkIG5vdCBiZSBvcGVuZWQuICBWZXJpZnkgdGhhdCB0aGUgcGF0Y2ggcGFja2FnZSBleGlzdHMgYW5kIHRoYXQgeW91IGNhbiBhY2Nlc3MgaXQsIG9yIGNvbnRhY3QgdGhlIGFwcGxpY2F0aW9uIHZlbmRvciB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIGEgdmFsaWQgV2luZG93cyBJbnN0YWxsZXIgcGF0Y2ggcGFja2FnZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUEFUQ0hfUEFDS0FHRV9PUEVOX0ZBSUxFRCA9IDE2MzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BBVENIX1BBQ0tBR0VfSU5WQUxJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIHBhdGNoIHBhY2thZ2UgY291bGQgbm90IGJlIG9wZW5lZC4gIENvbnRhY3QgdGhlIGFwcGxpY2F0aW9uIHZlbmRvciB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIGEgdmFsaWQgV2luZG93cyBJbnN0YWxsZXIgcGF0Y2ggcGFja2FnZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUEFUQ0hfUEFDS0FHRV9JTlZBTElEID0gMTYzNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUEFUQ0hfUEFDS0FHRV9VTlNVUFBPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIHBhdGNoIHBhY2thZ2UgY2Fubm90IGJlIHByb2Nlc3NlZCBieSB0aGUgV2luZG93cyBJbnN0YWxsZXIgc2VydmljZS4gIFlvdSBtdXN0IGluc3RhbGwgYSBXaW5kb3dzIHNlcnZpY2UgcGFjayB0aGF0IGNvbnRhaW5zIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgV2luZG93cyBJbnN0YWxsZXIgc2VydmljZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUEFUQ0hfUEFDS0FHRV9VTlNVUFBPUlRFRCA9IDE2Mzc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BST0RVQ1RfVkVSU0lPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbm90aGVyIHZlcnNpb24gb2YgdGhpcyBwcm9kdWN0IGlzIGFscmVhZHkgaW5zdGFsbGVkLiAgSW5zdGFsbGF0aW9uIG9mIHRoaXMgdmVyc2lvbiBjYW5ub3QgY29udGludWUuICBUbyBjb25maWd1cmUgb3IgcmVtb3ZlIHRoZSBleGlzdGluZyB2ZXJzaW9uIG9mIHRoaXMgcHJvZHVjdCwgdXNlIEFkZC9SZW1vdmUgUHJvZ3JhbXMgb24gdGhlIENvbnRyb2wgUGFuZWwuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BST0RVQ1RfVkVSU0lPTiA9IDE2Mzg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfQ09NTUFORF9MSU5FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiAgQ29uc3VsdCB0aGUgV2luZG93cyBJbnN0YWxsZXIgU0RLIGZvciBkZXRhaWxlZCBjb21tYW5kIGxpbmUgaGVscC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9DT01NQU5EX0xJTkUgPSAxNjM5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNUQUxMX1JFTU9URV9ESVNBTExPV0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE9ubHkgYWRtaW5pc3RyYXRvcnMgaGF2ZSBwZXJtaXNzaW9uIHRvIGFkZCwgcmVtb3ZlLCBvciBjb25maWd1cmUgc2VydmVyIHNvZnR3YXJlIGR1cmluZyBhIFRlcm1pbmFsIHNlcnZpY2VzIHJlbW90ZSBzZXNzaW9uLiBJZiB5b3Ugd2FudCB0byBpbnN0YWxsIG9yIGNvbmZpZ3VyZSBzb2Z0d2FyZSBvbiB0aGUgc2VydmVyLCBjb250YWN0IHlvdXIgbmV0d29yayBhZG1pbmlzdHJhdG9yLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlNUQUxMX1JFTU9URV9ESVNBTExPV0VEID0gMTY0MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1VDQ0VTU19SRUJPT1RfSU5JVElBVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuICBUaGUgc3lzdGVtIHdpbGwgYmUgcmVzdGFydGVkIHNvIHRoZSBjaGFuZ2VzIGNhbiB0YWtlIGVmZmVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1VDQ0VTU19SRUJPT1RfSU5JVElBVEVEID0gMTY0MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUEFUQ0hfVEFSR0VUX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdXBncmFkZSBwYXRjaCBjYW5ub3QgYmUgaW5zdGFsbGVkIGJ5IHRoZSBXaW5kb3dzIEluc3RhbGxlciBzZXJ2aWNlIGJlY2F1c2UgdGhlIHByb2dyYW0gdG8gYmUgdXBncmFkZWQgbWF5IGJlIG1pc3NpbmcsIG9yIHRoZSB1cGdyYWRlIHBhdGNoIG1heSB1cGRhdGUgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUgcHJvZ3JhbS4gVmVyaWZ5IHRoYXQgdGhlIHByb2dyYW0gdG8gYmUgdXBncmFkZWQgZXhpc3RzIG9uIHlvdXIgY29tcHV0ZXIgYW5cbi8vICBkIHRoYXQgeW91IGhhdmUgdGhlIGNvcnJlY3QgdXBncmFkZSBwYXRjaC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUEFUQ0hfVEFSR0VUX05PVF9GT1VORCA9IDE2NDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BBVENIX1BBQ0tBR0VfUkVKRUNURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHBhdGNoIHBhY2thZ2UgaXMgbm90IHBlcm1pdHRlZCBieSBzb2Z0d2FyZSByZXN0cmljdGlvbiBwb2xpY3kuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BBVENIX1BBQ0tBR0VfUkVKRUNURUQgPSAxNjQzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlNUQUxMX1RSQU5TRk9STV9SRUpFQ1RFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBPbmUgb3IgbW9yZSBjdXN0b21pemF0aW9ucyBhcmUgbm90IHBlcm1pdHRlZCBieSBzb2Z0d2FyZSByZXN0cmljdGlvbiBwb2xpY3kuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOU1RBTExfVFJBTlNGT1JNX1JFSkVDVEVEID0gMTY0NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5TVEFMTF9SRU1PVEVfUFJPSElCSVRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgV2luZG93cyBJbnN0YWxsZXIgZG9lcyBub3QgcGVybWl0IGluc3RhbGxhdGlvbiBmcm9tIGEgUmVtb3RlIERlc2t0b3AgQ29ubmVjdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5TVEFMTF9SRU1PVEVfUFJPSElCSVRFRCA9IDE2NDU7XG5cbi8vIEVuZCBvZiBNU0kgZXJyb3IgY29kZXNcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vICAgUlBDIFN0YXR1cyBDb2RlcyAgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfSU5WQUxJRF9TVFJJTkdfQklORElOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3RyaW5nIGJpbmRpbmcgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfSU5WQUxJRF9TVFJJTkdfQklORElORyA9IDE3MDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1dST05HX0tJTkRfT0ZfQklORElOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYmluZGluZyBoYW5kbGUgaXMgbm90IHRoZSBjb3JyZWN0IHR5cGUuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX1dST05HX0tJTkRfT0ZfQklORElORyA9IDE3MDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0lOVkFMSURfQklORElOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYmluZGluZyBoYW5kbGUgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfSU5WQUxJRF9CSU5ESU5HID0gMTcwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfUFJPVFNFUV9OT1RfU1VQUE9SVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBSUEMgcHJvdG9jb2wgc2VxdWVuY2UgaXMgbm90IHN1cHBvcnRlZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfUFJPVFNFUV9OT1RfU1VQUE9SVEVEID0gMTcwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfSU5WQUxJRF9SUENfUFJPVFNFUVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgUlBDIHByb3RvY29sIHNlcXVlbmNlIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0lOVkFMSURfUlBDX1BST1RTRVEgPSAxNzA0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19JTlZBTElEX1NUUklOR19VVUlEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzdHJpbmcgdW5pdmVyc2FsIHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19JTlZBTElEX1NUUklOR19VVUlEID0gMTcwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfSU5WQUxJRF9FTkRQT0lOVF9GT1JNQVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGVuZHBvaW50IGZvcm1hdCBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19JTlZBTElEX0VORFBPSU5UX0ZPUk1BVCA9IDE3MDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0lOVkFMSURfTkVUX0FERFJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5ldHdvcmsgYWRkcmVzcyBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19JTlZBTElEX05FVF9BRERSID0gMTcwNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfTk9fRU5EUE9JTlRfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gZW5kcG9pbnQgd2FzIGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19OT19FTkRQT0lOVF9GT1VORCA9IDE3MDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0lOVkFMSURfVElNRU9VVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdGltZW91dCB2YWx1ZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19JTlZBTElEX1RJTUVPVVQgPSAxNzA5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19PQkpFQ1RfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvYmplY3QgdW5pdmVyc2FsIHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKSB3YXMgbm90IGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19PQkpFQ1RfTk9UX0ZPVU5EID0gMTcxMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfQUxSRUFEWV9SRUdJU1RFUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvYmplY3QgdW5pdmVyc2FsIHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKSBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0FMUkVBRFlfUkVHSVNURVJFRCA9IDE3MTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1RZUEVfQUxSRUFEWV9SRUdJU1RFUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB0eXBlIHVuaXZlcnNhbCB1bmlxdWUgaWRlbnRpZmllciAoVVVJRCkgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19UWVBFX0FMUkVBRFlfUkVHSVNURVJFRCA9IDE3MTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0FMUkVBRFlfTElTVEVOSU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBSUEMgc2VydmVyIGlzIGFscmVhZHkgbGlzdGVuaW5nLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19BTFJFQURZX0xJU1RFTklORyA9IDE3MTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX05PX1BST1RTRVFTX1JFR0lTVEVSRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gcHJvdG9jb2wgc2VxdWVuY2VzIGhhdmUgYmVlbiByZWdpc3RlcmVkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19OT19QUk9UU0VRU19SRUdJU1RFUkVEID0gMTcxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfTk9UX0xJU1RFTklOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgUlBDIHNlcnZlciBpcyBub3QgbGlzdGVuaW5nLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19OT1RfTElTVEVOSU5HID0gMTcxNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfVU5LTk9XTl9NR1JfVFlQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWFuYWdlciB0eXBlIGlzIHVua25vd24uXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX1VOS05PV05fTUdSX1RZUEUgPSAxNzE2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19VTktOT1dOX0lGXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBpbnRlcmZhY2UgaXMgdW5rbm93bi5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfVU5LTk9XTl9JRiA9IDE3MTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX05PX0JJTkRJTkdTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZXJlIGFyZSBubyBiaW5kaW5ncy5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfTk9fQklORElOR1MgPSAxNzE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19OT19QUk9UU0VRU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGVyZSBhcmUgbm8gcHJvdG9jb2wgc2VxdWVuY2VzLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19OT19QUk9UU0VRUyA9IDE3MTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0NBTlRfQ1JFQVRFX0VORFBPSU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBlbmRwb2ludCBjYW5ub3QgYmUgY3JlYXRlZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfQ0FOVF9DUkVBVEVfRU5EUE9JTlQgPSAxNzIwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19PVVRfT0ZfUkVTT1VSQ0VTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vdCBlbm91Z2ggcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgdG8gY29tcGxldGUgdGhpcyBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX09VVF9PRl9SRVNPVVJDRVMgPSAxNzIxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19TRVJWRVJfVU5BVkFJTEFCTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIFJQQyBzZXJ2ZXIgaXMgdW5hdmFpbGFibGUuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX1NFUlZFUl9VTkFWQUlMQUJMRSA9IDE3MjI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1NFUlZFUl9UT09fQlVTWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgUlBDIHNlcnZlciBpcyB0b28gYnVzeSB0byBjb21wbGV0ZSB0aGlzIG9wZXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfU0VSVkVSX1RPT19CVVNZID0gMTcyMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfSU5WQUxJRF9ORVRXT1JLX09QVElPTlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5ldHdvcmsgb3B0aW9ucyBhcmUgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfSU5WQUxJRF9ORVRXT1JLX09QVElPTlMgPSAxNzI0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19OT19DQUxMX0FDVElWRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGVyZSBhcmUgbm8gcmVtb3RlIHByb2NlZHVyZSBjYWxscyBhY3RpdmUgb24gdGhpcyB0aHJlYWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX05PX0NBTExfQUNUSVZFID0gMTcyNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfQ0FMTF9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBmYWlsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0NBTExfRkFJTEVEID0gMTcyNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfQ0FMTF9GQUlMRURfRE5FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgZmFpbGVkIGFuZCBkaWQgbm90IGV4ZWN1dGUuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0NBTExfRkFJTEVEX0RORSA9IDE3Mjc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1BST1RPQ09MX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpIHByb3RvY29sIGVycm9yIG9jY3VycmVkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19QUk9UT0NPTF9FUlJPUiA9IDE3Mjg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1VOU1VQUE9SVEVEX1RSQU5TX1NZTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdHJhbnNmZXIgc3ludGF4IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIFJQQyBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX1VOU1VQUE9SVEVEX1RSQU5TX1NZTiA9IDE3MzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1VOU1VQUE9SVEVEX1RZUEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHVuaXZlcnNhbCB1bmlxdWUgaWRlbnRpZmllciAoVVVJRCkgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19VTlNVUFBPUlRFRF9UWVBFID0gMTczMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfSU5WQUxJRF9UQUdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHRhZyBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19JTlZBTElEX1RBRyA9IDE3MzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0lOVkFMSURfQk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGFycmF5IGJvdW5kcyBhcmUgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfSU5WQUxJRF9CT1VORCA9IDE3MzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX05PX0VOVFJZX05BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGJpbmRpbmcgZG9lcyBub3QgY29udGFpbiBhbiBlbnRyeSBuYW1lLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19OT19FTlRSWV9OQU1FID0gMTczNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfSU5WQUxJRF9OQU1FX1NZTlRBWFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbmFtZSBzeW50YXggaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfSU5WQUxJRF9OQU1FX1NZTlRBWCA9IDE3MzY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1VOU1VQUE9SVEVEX05BTUVfU1lOVEFYXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuYW1lIHN5bnRheCBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19VTlNVUFBPUlRFRF9OQU1FX1NZTlRBWCA9IDE3Mzc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1VVSURfTk9fQUREUkVTU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBuZXR3b3JrIGFkZHJlc3MgaXMgYXZhaWxhYmxlIHRvIHVzZSB0byBleHBvcnQgY29uc3RydWN0IGEgdW5pdmVyc2FsIHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKS5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfVVVJRF9OT19BRERSRVNTID0gMTczOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfRFVQTElDQVRFX0VORFBPSU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBlbmRwb2ludCBpcyBhIGR1cGxpY2F0ZS5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfRFVQTElDQVRFX0VORFBPSU5UID0gMTc0MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfVU5LTk9XTl9BVVRITl9UWVBFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhdXRoZW50aWNhdGlvbiB0eXBlIGlzIHVua25vd24uXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX1VOS05PV05fQVVUSE5fVFlQRSA9IDE3NDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX01BWF9DQUxMU19UT09fU01BTExcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNhbGxzIGlzIHRvbyBzbWFsbC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfTUFYX0NBTExTX1RPT19TTUFMTCA9IDE3NDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1NUUklOR19UT09fTE9OR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3RyaW5nIGlzIHRvbyBsb25nLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19TVFJJTkdfVE9PX0xPTkcgPSAxNzQzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19QUk9UU0VRX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgUlBDIHByb3RvY29sIHNlcXVlbmNlIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX1BST1RTRVFfTk9UX0ZPVU5EID0gMTc0NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfUFJPQ05VTV9PVVRfT0ZfUkFOR0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByb2NlZHVyZSBudW1iZXIgaXMgb3V0IG9mIHJhbmdlLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19QUk9DTlVNX09VVF9PRl9SQU5HRSA9IDE3NDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0JJTkRJTkdfSEFTX05PX0FVVEhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGJpbmRpbmcgZG9lcyBub3QgY29udGFpbiBhbnkgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0JJTkRJTkdfSEFTX05PX0FVVEggPSAxNzQ2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19VTktOT1dOX0FVVEhOX1NFUlZJQ0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgaXMgdW5rbm93bi5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfVU5LTk9XTl9BVVRITl9TRVJWSUNFID0gMTc0NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfVU5LTk9XTl9BVVRITl9MRVZFTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYXV0aGVudGljYXRpb24gbGV2ZWwgaXMgdW5rbm93bi5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfVU5LTk9XTl9BVVRITl9MRVZFTCA9IDE3NDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0lOVkFMSURfQVVUSF9JREVOVElUWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2VjdXJpdHkgY29udGV4dCBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19JTlZBTElEX0FVVEhfSURFTlRJVFkgPSAxNzQ5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19VTktOT1dOX0FVVEhaX1NFUlZJQ0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGF1dGhvcml6YXRpb24gc2VydmljZSBpcyB1bmtub3duLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19VTktOT1dOX0FVVEhaX1NFUlZJQ0UgPSAxNzUwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUFRfU19JTlZBTElEX0VOVFJZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBlbnRyeSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUFRfU19JTlZBTElEX0VOVFJZID0gMTc1MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVBUX1NfQ0FOVF9QRVJGT1JNX09QXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZXJ2ZXIgZW5kcG9pbnQgY2Fubm90IHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVBUX1NfQ0FOVF9QRVJGT1JNX09QID0gMTc1MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVBUX1NfTk9UX1JFR0lTVEVSRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgYXJlIG5vIG1vcmUgZW5kcG9pbnRzIGF2YWlsYWJsZSBmcm9tIHRoZSBlbmRwb2ludCBtYXBwZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVQVF9TX05PVF9SRUdJU1RFUkVEID0gMTc1MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfTk9USElOR19UT19FWFBPUlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gaW50ZXJmYWNlcyBoYXZlIGJlZW4gZXhwb3J0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX05PVEhJTkdfVE9fRVhQT1JUID0gMTc1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfSU5DT01QTEVURV9OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBlbnRyeSBuYW1lIGlzIGluY29tcGxldGUuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0lOQ09NUExFVEVfTkFNRSA9IDE3NTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0lOVkFMSURfVkVSU19PUFRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHZlcnNpb24gb3B0aW9uIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0lOVkFMSURfVkVSU19PUFRJT04gPSAxNzU2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19OT19NT1JFX01FTUJFUlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgYXJlIG5vIG1vcmUgbWVtYmVycy5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfTk9fTU9SRV9NRU1CRVJTID0gMTc1NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfTk9UX0FMTF9PQkpTX1VORVhQT1JURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgaXMgbm90aGluZyB0byB1bmV4cG9ydC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfTk9UX0FMTF9PQkpTX1VORVhQT1JURUQgPSAxNzU4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19JTlRFUkZBQ0VfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBpbnRlcmZhY2Ugd2FzIG5vdCBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfSU5URVJGQUNFX05PVF9GT1VORCA9IDE3NTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0VOVFJZX0FMUkVBRFlfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBlbnRyeSBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfRU5UUllfQUxSRUFEWV9FWElTVFMgPSAxNzYwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19FTlRSWV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGVudHJ5IGlzIG5vdCBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfRU5UUllfTk9UX0ZPVU5EID0gMTc2MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfTkFNRV9TRVJWSUNFX1VOQVZBSUxBQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuYW1lIHNlcnZpY2UgaXMgdW5hdmFpbGFibGUuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX05BTUVfU0VSVklDRV9VTkFWQUlMQUJMRSA9IDE3NjI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0lOVkFMSURfTkFGX0lEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIGFkZHJlc3MgZmFtaWx5IGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0lOVkFMSURfTkFGX0lEID0gMTc2MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfQ0FOTk9UX1NVUFBPUlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfQ0FOTk9UX1NVUFBPUlQgPSAxNzY0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19OT19DT05URVhUX0FWQUlMQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBzZWN1cml0eSBjb250ZXh0IGlzIGF2YWlsYWJsZSB0byBhbGxvdyBpbXBlcnNvbmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19OT19DT05URVhUX0FWQUlMQUJMRSA9IDE3NjU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0lOVEVSTkFMX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkIGluIGEgcmVtb3RlIHByb2NlZHVyZSBjYWxsIChSUEMpLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19JTlRFUk5BTF9FUlJPUiA9IDE3NjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1pFUk9fRElWSURFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBSUEMgc2VydmVyIGF0dGVtcHRlZCBhbiBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8uXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX1pFUk9fRElWSURFID0gMTc2NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfQUREUkVTU19FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBhZGRyZXNzaW5nIGVycm9yIG9jY3VycmVkIGluIHRoZSBSUEMgc2VydmVyLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19BRERSRVNTX0VSUk9SID0gMTc2ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfRlBfRElWX1pFUk9cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gYXQgdGhlIFJQQyBzZXJ2ZXIgY2F1c2VkIGEgZGl2aXNpb24gYnkgemVyby5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfRlBfRElWX1pFUk8gPSAxNzY5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19GUF9VTkRFUkZMT1dcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBmbG9hdGluZy1wb2ludCB1bmRlcmZsb3cgb2NjdXJyZWQgYXQgdGhlIFJQQyBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0ZQX1VOREVSRkxPVyA9IDE3NzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0ZQX09WRVJGTE9XXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgZmxvYXRpbmctcG9pbnQgb3ZlcmZsb3cgb2NjdXJyZWQgYXQgdGhlIFJQQyBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0ZQX09WRVJGTE9XID0gMTc3MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1hfTk9fTU9SRV9FTlRSSUVTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBsaXN0IG9mIFJQQyBzZXJ2ZXJzIGF2YWlsYWJsZSBmb3IgdGhlIGJpbmRpbmcgb2YgYXV0byBoYW5kbGVzIGhhcyBiZWVuIGV4aGF1c3RlZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1hfTk9fTU9SRV9FTlRSSUVTID0gMTc3MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1hfU1NfQ0hBUl9UUkFOU19PUEVOX0ZBSUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIG9wZW4gdGhlIGNoYXJhY3RlciB0cmFuc2xhdGlvbiB0YWJsZSBmaWxlLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfWF9TU19DSEFSX1RSQU5TX09QRU5fRkFJTCA9IDE3NzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19YX1NTX0NIQVJfVFJBTlNfU0hPUlRfRklMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZSBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXIgdHJhbnNsYXRpb24gdGFibGUgaGFzIGZld2VyIHRoYW4gNTEyIGJ5dGVzLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfWF9TU19DSEFSX1RSQU5TX1NIT1JUX0ZJTEUgPSAxNzc0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfWF9TU19JTl9OVUxMX0NPTlRFWFRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBudWxsIGNvbnRleHQgaGFuZGxlIHdhcyBwYXNzZWQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBob3N0IGR1cmluZyBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1hfU1NfSU5fTlVMTF9DT05URVhUID0gMTc3NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1hfU1NfQ09OVEVYVF9EQU1BR0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjb250ZXh0IGhhbmRsZSBjaGFuZ2VkIGR1cmluZyBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1hfU1NfQ09OVEVYVF9EQU1BR0VEID0gMTc3NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1hfU1NfSEFORExFU19NSVNNQVRDSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYmluZGluZyBoYW5kbGVzIHBhc3NlZCB0byBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBkbyBub3QgbWF0Y2guXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19YX1NTX0hBTkRMRVNfTUlTTUFUQ0ggPSAxNzc4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfWF9TU19DQU5OT1RfR0VUX0NBTExfSEFORExFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzdHViIGlzIHVuYWJsZSB0byBnZXQgdGhlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBoYW5kbGUuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19YX1NTX0NBTk5PVF9HRVRfQ0FMTF9IQU5ETEUgPSAxNzc5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfWF9OVUxMX1JFRl9QT0lOVEVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgbnVsbCByZWZlcmVuY2UgcG9pbnRlciB3YXMgcGFzc2VkIHRvIHRoZSBzdHViLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfWF9OVUxMX1JFRl9QT0lOVEVSID0gMTc4MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1hfRU5VTV9WQUxVRV9PVVRfT0ZfUkFOR0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGVudW1lcmF0aW9uIHZhbHVlIGlzIG91dCBvZiByYW5nZS5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1hfRU5VTV9WQUxVRV9PVVRfT0ZfUkFOR0UgPSAxNzgxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfWF9CWVRFX0NPVU5UX1RPT19TTUFMTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYnl0ZSBjb3VudCBpcyB0b28gc21hbGwuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19YX0JZVEVfQ09VTlRfVE9PX1NNQUxMID0gMTc4MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1hfQkFEX1NUVUJfREFUQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3R1YiByZWNlaXZlZCBiYWQgZGF0YS5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1hfQkFEX1NUVUJfREFUQSA9IDE3ODM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfVVNFUl9CVUZGRVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN1cHBsaWVkIHVzZXIgYnVmZmVyIGlzIG5vdCB2YWxpZCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfVVNFUl9CVUZGRVIgPSAxNzg0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9VTlJFQ09HTklaRURfTUVESUFcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpc2sgbWVkaWEgaXMgbm90IHJlY29nbml6ZWQuIEl0IG1heSBub3QgYmUgZm9ybWF0dGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9VTlJFQ09HTklaRURfTUVESUEgPSAxNzg1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19UUlVTVF9MU0FfU0VDUkVUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB3b3Jrc3RhdGlvbiBkb2VzIG5vdCBoYXZlIGEgdHJ1c3Qgc2VjcmV0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19UUlVTVF9MU0FfU0VDUkVUID0gMTc4NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fVFJVU1RfU0FNX0FDQ09VTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlY3VyaXR5IGRhdGFiYXNlIG9uIHRoZSBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSBhIGNvbXB1dGVyIGFjY291bnQgZm9yIHRoaXMgd29ya3N0YXRpb24gdHJ1c3QgcmVsYXRpb25zaGlwLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19UUlVTVF9TQU1fQUNDT1VOVCA9IDE3ODc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1RSVVNURURfRE9NQUlOX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHRydXN0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBwcmltYXJ5IGRvbWFpbiBhbmQgdGhlIHRydXN0ZWQgZG9tYWluIGZhaWxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVFJVU1RFRF9ET01BSU5fRkFJTFVSRSA9IDE3ODg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1RSVVNURURfUkVMQVRJT05TSElQX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHRydXN0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgd29ya3N0YXRpb24gYW5kIHRoZSBwcmltYXJ5IGRvbWFpbiBmYWlsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RSVVNURURfUkVMQVRJT05TSElQX0ZBSUxVUkUgPSAxNzg5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9UUlVTVF9GQUlMVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIGxvZ29uIGZhaWxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVFJVU1RfRkFJTFVSRSA9IDE3OTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0NBTExfSU5fUFJPR1JFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyBmb3IgdGhpcyB0aHJlYWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0NBTExfSU5fUFJPR1JFU1MgPSAxNzkxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ORVRMT0dPTl9OT1RfU1RBUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGxvZ29uLCBidXQgdGhlIG5ldHdvcmsgbG9nb24gc2VydmljZSB3YXMgbm90IHN0YXJ0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05FVExPR09OX05PVF9TVEFSVEVEID0gMTc5MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQUNDT1VOVF9FWFBJUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB1c2VyJ3MgYWNjb3VudCBoYXMgZXhwaXJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUNDT1VOVF9FWFBJUkVEID0gMTc5MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVESVJFQ1RPUl9IQVNfT1BFTl9IQU5ETEVTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZWRpcmVjdG9yIGlzIGluIHVzZSBhbmQgY2Fubm90IGJlIHVubG9hZGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRURJUkVDVE9SX0hBU19PUEVOX0hBTkRMRVMgPSAxNzk0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9QUklOVEVSX0RSSVZFUl9BTFJFQURZX0lOU1RBTExFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHByaW50ZXIgZHJpdmVyIGlzIGFscmVhZHkgaW5zdGFsbGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUklOVEVSX0RSSVZFUl9BTFJFQURZX0lOU1RBTExFRCA9IDE3OTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VOS05PV05fUE9SVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHBvcnQgaXMgdW5rbm93bi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVU5LTk9XTl9QT1JUID0gMTc5NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5LTk9XTl9QUklOVEVSX0RSSVZFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcHJpbnRlciBkcml2ZXIgaXMgdW5rbm93bi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVU5LTk9XTl9QUklOVEVSX0RSSVZFUiA9IDE3OTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VOS05PV05fUFJJTlRQUk9DRVNTT1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByaW50IHByb2Nlc3NvciBpcyB1bmtub3duLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9VTktOT1dOX1BSSU5UUFJPQ0VTU09SID0gMTc5ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9TRVBBUkFUT1JfRklMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHNlcGFyYXRvciBmaWxlIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfU0VQQVJBVE9SX0ZJTEUgPSAxNzk5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1BSSU9SSVRZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcHJpb3JpdHkgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9QUklPUklUWSA9IDE4MDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfUFJJTlRFUl9OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBwcmludGVyIG5hbWUgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9QUklOVEVSX05BTUUgPSAxODAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9QUklOVEVSX0FMUkVBRFlfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBwcmludGVyIGFscmVhZHkgZXhpc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUklOVEVSX0FMUkVBRFlfRVhJU1RTID0gMTgwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9QUklOVEVSX0NPTU1BTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByaW50ZXIgY29tbWFuZCBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX1BSSU5URVJfQ09NTUFORCA9IDE4MDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfREFUQVRZUEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBkYXRhdHlwZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0RBVEFUWVBFID0gMTgwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9FTlZJUk9OTUVOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZW52aXJvbm1lbnQgc3BlY2lmaWVkIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRU5WSVJPTk1FTlQgPSAxODA1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19OT19NT1JFX0JJTkRJTkdTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZXJlIGFyZSBubyBtb3JlIGJpbmRpbmdzLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19OT19NT1JFX0JJTkRJTkdTID0gMTgwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9MT0dPTl9JTlRFUkRPTUFJTl9UUlVTVF9BQ0NPVU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhY2NvdW50IHVzZWQgaXMgYW4gaW50ZXJkb21haW4gdHJ1c3QgYWNjb3VudC4gVXNlIHlvdXIgZ2xvYmFsIHVzZXIgYWNjb3VudCBvciBsb2NhbCB1c2VyIGFjY291bnQgdG8gYWNjZXNzIHRoaXMgc2VydmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT0xPR09OX0lOVEVSRE9NQUlOX1RSVVNUX0FDQ09VTlQgPSAxODA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT0xPR09OX1dPUktTVEFUSU9OX1RSVVNUX0FDQ09VTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGFjY291bnQgdXNlZCBpcyBhIGNvbXB1dGVyIGFjY291bnQuIFVzZSB5b3VyIGdsb2JhbCB1c2VyIGFjY291bnQgb3IgbG9jYWwgdXNlciBhY2NvdW50IHRvIGFjY2VzcyB0aGlzIHNlcnZlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9MT0dPTl9XT1JLU1RBVElPTl9UUlVTVF9BQ0NPVU5UID0gMTgwODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9MT0dPTl9TRVJWRVJfVFJVU1RfQUNDT1VOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYWNjb3VudCB1c2VkIGlzIGEgc2VydmVyIHRydXN0IGFjY291bnQuIFVzZSB5b3VyIGdsb2JhbCB1c2VyIGFjY291bnQgb3IgbG9jYWwgdXNlciBhY2NvdW50IHRvIGFjY2VzcyB0aGlzIHNlcnZlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9MT0dPTl9TRVJWRVJfVFJVU1RfQUNDT1VOVCA9IDE4MDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RPTUFJTl9UUlVTVF9JTkNPTlNJU1RFTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5hbWUgb3Igc2VjdXJpdHkgSUQgKFNJRCkgb2YgdGhlIGRvbWFpbiBzcGVjaWZpZWQgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRydXN0IGluZm9ybWF0aW9uIGZvciB0aGF0IGRvbWFpbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRE9NQUlOX1RSVVNUX0lOQ09OU0lTVEVOVCA9IDE4MTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NFUlZFUl9IQVNfT1BFTl9IQU5ETEVTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZXJ2ZXIgaXMgaW4gdXNlIGFuZCBjYW5ub3QgYmUgdW5sb2FkZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NFUlZFUl9IQVNfT1BFTl9IQU5ETEVTID0gMTgxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVTT1VSQ0VfREFUQV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBpbWFnZSBmaWxlIGRpZCBub3QgY29udGFpbiBhIHJlc291cmNlIHNlY3Rpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFU09VUkNFX0RBVEFfTk9UX0ZPVU5EID0gMTgxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVTT1VSQ0VfVFlQRV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCByZXNvdXJjZSB0eXBlIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgaW1hZ2UgZmlsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUkVTT1VSQ0VfVFlQRV9OT1RfRk9VTkQgPSAxODEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRVNPVVJDRV9OQU1FX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHJlc291cmNlIG5hbWUgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBpbWFnZSBmaWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNPVVJDRV9OQU1FX05PVF9GT1VORCA9IDE4MTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFU09VUkNFX0xBTkdfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgbGFuZ3VhZ2UgSUQgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBpbWFnZSBmaWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNPVVJDRV9MQU5HX05PVF9GT1VORCA9IDE4MTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9FTk9VR0hfUVVPVEFcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm90IGVub3VnaCBxdW90YSBpcyBhdmFpbGFibGUgdG8gcHJvY2VzcyB0aGlzIGNvbW1hbmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PVF9FTk9VR0hfUVVPVEEgPSAxODE2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19OT19JTlRFUkZBQ0VTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIGludGVyZmFjZXMgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX05PX0lOVEVSRkFDRVMgPSAxODE3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19DQUxMX0NBTkNFTExFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVtb3RlIHByb2NlZHVyZSBjYWxsIHdhcyBjYW5jZWxsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0NBTExfQ0FOQ0VMTEVEID0gMTgxODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfQklORElOR19JTkNPTVBMRVRFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBiaW5kaW5nIGhhbmRsZSBkb2VzIG5vdCBjb250YWluIGFsbCByZXF1aXJlZCBpbmZvcm1hdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfQklORElOR19JTkNPTVBMRVRFID0gMTgxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfQ09NTV9GQUlMVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgY29tbXVuaWNhdGlvbnMgZmFpbHVyZSBvY2N1cnJlZCBkdXJpbmcgYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0NPTU1fRkFJTFVSRSA9IDE4MjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1VOU1VQUE9SVEVEX0FVVEhOX0xFVkVMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgYXV0aGVudGljYXRpb24gbGV2ZWwgaXMgbm90IHN1cHBvcnRlZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfVU5TVVBQT1JURURfQVVUSE5fTEVWRUwgPSAxODIxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19OT19QUklOQ19OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIHByaW5jaXBhbCBuYW1lIHJlZ2lzdGVyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX05PX1BSSU5DX05BTUUgPSAxODIyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19OT1RfUlBDX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBlcnJvciBzcGVjaWZpZWQgaXMgbm90IGEgdmFsaWQgV2luZG93cyBSUEMgZXJyb3IgY29kZS5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfTk9UX1JQQ19FUlJPUiA9IDE4MjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1VVSURfTE9DQUxfT05MWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIFVVSUQgdGhhdCBpcyB2YWxpZCBvbmx5IG9uIHRoaXMgY29tcHV0ZXIgaGFzIGJlZW4gYWxsb2NhdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19VVUlEX0xPQ0FMX09OTFkgPSAxODI0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19TRUNfUEtHX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgc2VjdXJpdHkgcGFja2FnZSBzcGVjaWZpYyBlcnJvciBvY2N1cnJlZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfU0VDX1BLR19FUlJPUiA9IDE4MjU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX05PVF9DQU5DRUxMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhyZWFkIGlzIG5vdCBjYW5jZWxlZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfTk9UX0NBTkNFTExFRCA9IDE4MjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19YX0lOVkFMSURfRVNfQUNUSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgb3BlcmF0aW9uIG9uIHRoZSBlbmNvZGluZy9kZWNvZGluZyBoYW5kbGUuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19YX0lOVkFMSURfRVNfQUNUSU9OID0gMTgyNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1hfV1JPTkdfRVNfVkVSU0lPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbmNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgc2VyaWFsaXppbmcgcGFja2FnZS5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1hfV1JPTkdfRVNfVkVSU0lPTiA9IDE4Mjg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19YX1dST05HX1NUVUJfVkVSU0lPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbmNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgUlBDIHN0dWIuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19YX1dST05HX1NUVUJfVkVSU0lPTiA9IDE4Mjk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19YX0lOVkFMSURfUElQRV9PQkpFQ1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIFJQQyBwaXBlIG9iamVjdCBpcyBpbnZhbGlkIG9yIGNvcnJ1cHRlZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1hfSU5WQUxJRF9QSVBFX09CSkVDVCA9IDE4MzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19YX1dST05HX1BJUEVfT1JERVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gaW52YWxpZCBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhbiBSUEMgcGlwZSBvYmplY3QuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19YX1dST05HX1BJUEVfT1JERVIgPSAxODMxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfWF9XUk9OR19QSVBFX1ZFUlNJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5zdXBwb3J0ZWQgUlBDIHBpcGUgdmVyc2lvbi5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1hfV1JPTkdfUElQRV9WRVJTSU9OID0gMTgzMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfR1JPVVBfTUVNQkVSX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZ3JvdXAgbWVtYmVyIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0dST1VQX01FTUJFUl9OT1RfRk9VTkQgPSAxODk4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUFRfU19DQU5UX0NSRUFURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZW5kcG9pbnQgbWFwcGVyIGRhdGFiYXNlIGVudHJ5IGNvdWxkIG5vdCBiZSBjcmVhdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUFRfU19DQU5UX0NSRUFURSA9IDE4OTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0lOVkFMSURfT0JKRUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvYmplY3QgdW5pdmVyc2FsIHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEKSBpcyB0aGUgbmlsIFVVSUQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0lOVkFMSURfT0JKRUNUID0gMTkwMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9USU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgdGltZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX1RJTUUgPSAxOTAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0ZPUk1fTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGZvcm0gbmFtZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0ZPUk1fTkFNRSA9IDE5MDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfRk9STV9TSVpFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgZm9ybSBzaXplIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfRk9STV9TSVpFID0gMTkwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQUxSRUFEWV9XQUlUSU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcHJpbnRlciBoYW5kbGUgaXMgYWxyZWFkeSBiZWluZyB3YWl0ZWQgb25cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUxSRUFEWV9XQUlUSU5HID0gMTkwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUFJJTlRFUl9ERUxFVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcHJpbnRlciBoYXMgYmVlbiBkZWxldGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUklOVEVSX0RFTEVURUQgPSAxOTA1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1BSSU5URVJfU1RBVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN0YXRlIG9mIHRoZSBwcmludGVyIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfUFJJTlRFUl9TVEFURSA9IDE5MDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BBU1NXT1JEX01VU1RfQ0hBTkdFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB1c2VyJ3MgcGFzc3dvcmQgbXVzdCBiZSBjaGFuZ2VkIGJlZm9yZSBsb2dnaW5nIG9uIHRoZSBmaXJzdCB0aW1lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QQVNTV09SRF9NVVNUX0NIQU5HRSA9IDE5MDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RPTUFJTl9DT05UUk9MTEVSX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDb3VsZCBub3QgZmluZCB0aGUgZG9tYWluIGNvbnRyb2xsZXIgZm9yIHRoaXMgZG9tYWluLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ET01BSU5fQ09OVFJPTExFUl9OT1RfRk9VTkQgPSAxOTA4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9BQ0NPVU5UX0xPQ0tFRF9PVVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlZmVyZW5jZWQgYWNjb3VudCBpcyBjdXJyZW50bHkgbG9ja2VkIG91dCBhbmQgbWF5IG5vdCBiZSBsb2dnZWQgb24gdG8uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0FDQ09VTlRfTE9DS0VEX09VVCA9IDE5MDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IE9SX0lOVkFMSURfT1hJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb2JqZWN0IGV4cG9ydGVyIHNwZWNpZmllZCB3YXMgbm90IGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBPUl9JTlZBTElEX09YSUQgPSAxOTEwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBPUl9JTlZBTElEX09JRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb2JqZWN0IHNwZWNpZmllZCB3YXMgbm90IGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBPUl9JTlZBTElEX09JRCA9IDE5MTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IE9SX0lOVkFMSURfU0VUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvYmplY3QgcmVzb2x2ZXIgc2V0IHNwZWNpZmllZCB3YXMgbm90IGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBPUl9JTlZBTElEX1NFVCA9IDE5MTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1NFTkRfSU5DT01QTEVURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTb21lIGRhdGEgcmVtYWlucyB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0IGJ1ZmZlci5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfU0VORF9JTkNPTVBMRVRFID0gMTkxMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfSU5WQUxJRF9BU1lOQ19IQU5ETEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBhc3luY2hyb25vdXMgcmVtb3RlIHByb2NlZHVyZSBjYWxsIGhhbmRsZS5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfSU5WQUxJRF9BU1lOQ19IQU5ETEUgPSAxOTE0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19JTlZBTElEX0FTWU5DX0NBTExcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBhc3luY2hyb25vdXMgUlBDIGNhbGwgaGFuZGxlIGZvciB0aGlzIG9wZXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfSU5WQUxJRF9BU1lOQ19DQUxMID0gMTkxNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1hfUElQRV9DTE9TRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIFJQQyBwaXBlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1hfUElQRV9DTE9TRUQgPSAxOTE2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfWF9QSVBFX0RJU0NJUExJTkVfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIFJQQyBjYWxsIGNvbXBsZXRlZCBiZWZvcmUgYWxsIHBpcGVzIHdlcmUgcHJvY2Vzc2VkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfWF9QSVBFX0RJU0NJUExJTkVfRVJST1IgPSAxOTE3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfWF9QSVBFX0VNUFRZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIG1vcmUgZGF0YSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgUlBDIHBpcGUuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19YX1BJUEVfRU1QVFkgPSAxOTE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19TSVRFTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBzaXRlIG5hbWUgaXMgYXZhaWxhYmxlIGZvciB0aGlzIG1hY2hpbmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PX1NJVEVOQU1FID0gMTkxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0FOVF9BQ0NFU1NfRklMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZSBjYW4gbm90IGJlIGFjY2Vzc2VkIGJ5IHRoZSBzeXN0ZW0uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NBTlRfQUNDRVNTX0ZJTEUgPSAxOTIwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DQU5UX1JFU09MVkVfRklMRU5BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5hbWUgb2YgdGhlIGZpbGUgY2Fubm90IGJlIHJlc29sdmVkIGJ5IHRoZSBzeXN0ZW0uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NBTlRfUkVTT0xWRV9GSUxFTkFNRSA9IDE5MjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX0VOVFJZX1RZUEVfTUlTTUFUQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGVudHJ5IGlzIG5vdCBvZiB0aGUgZXhwZWN0ZWQgdHlwZS5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfRU5UUllfVFlQRV9NSVNNQVRDSCA9IDE5MjI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX05PVF9BTExfT0JKU19FWFBPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOb3QgYWxsIG9iamVjdCBVVUlEcyBjb3VsZCBiZSBleHBvcnRlZCB0byB0aGUgc3BlY2lmaWVkIGVudHJ5LlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19OT1RfQUxMX09CSlNfRVhQT1JURUQgPSAxOTIzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19JTlRFUkZBQ0VfTk9UX0VYUE9SVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludGVyZmFjZSBjb3VsZCBub3QgYmUgZXhwb3J0ZWQgdG8gdGhlIHNwZWNpZmllZCBlbnRyeS5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfSU5URVJGQUNFX05PVF9FWFBPUlRFRCA9IDE5MjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1BST0ZJTEVfTk9UX0FEREVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcHJvZmlsZSBlbnRyeSBjb3VsZCBub3QgYmUgYWRkZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX1BST0ZJTEVfTk9UX0FEREVEID0gMTkyNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfUFJGX0VMVF9OT1RfQURERURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBwcm9maWxlIGVsZW1lbnQgY291bGQgbm90IGJlIGFkZGVkLlxuLy9cbmV4cG9ydCBjb25zdCBSUENfU19QUkZfRUxUX05PVF9BRERFRCA9IDE5MjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFJQQ19TX1BSRl9FTFRfTk9UX1JFTU9WRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBwcm9maWxlIGVsZW1lbnQgY291bGQgbm90IGJlIHJlbW92ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX1BSRl9FTFRfTk9UX1JFTU9WRUQgPSAxOTI3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBSUENfU19HUlBfRUxUX05PVF9BRERFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZ3JvdXAgZWxlbWVudCBjb3VsZCBub3QgYmUgYWRkZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFJQQ19TX0dSUF9FTFRfTk9UX0FEREVEID0gMTkyODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogUlBDX1NfR1JQX0VMVF9OT1RfUkVNT1ZFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZ3JvdXAgZWxlbWVudCBjb3VsZCBub3QgYmUgcmVtb3ZlZC5cbi8vXG5leHBvcnQgY29uc3QgUlBDX1NfR1JQX0VMVF9OT1RfUkVNT1ZFRCA9IDE5Mjk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0tNX0RSSVZFUl9CTE9DS0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBwcmludGVyIGRyaXZlciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGEgcG9saWN5IGVuYWJsZWQgb24geW91ciBjb21wdXRlciB0aGF0IGJsb2NrcyBOVCA0LjAgZHJpdmVycy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfS01fRFJJVkVSX0JMT0NLRUQgPSAxOTMwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DT05URVhUX0VYUElSRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNvbnRleHQgaGFzIGV4cGlyZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ09OVEVYVF9FWFBJUkVEID0gMTkzMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUEVSX1VTRVJfVFJVU1RfUVVPVEFfRVhDRUVERURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGN1cnJlbnQgdXNlcidzIGRlbGVnYXRlZCB0cnVzdCBjcmVhdGlvbiBxdW90YSBoYXMgYmVlbiBleGNlZWRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUEVSX1VTRVJfVFJVU1RfUVVPVEFfRVhDRUVERUQgPSAxOTMyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9BTExfVVNFUl9UUlVTVF9RVU9UQV9FWENFRURFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdG90YWwgZGVsZWdhdGVkIHRydXN0IGNyZWF0aW9uIHF1b3RhIGhhcyBiZWVuIGV4Y2VlZGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BTExfVVNFUl9UUlVTVF9RVU9UQV9FWENFRURFRCA9IDE5MzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VTRVJfREVMRVRFX1RSVVNUX1FVT1RBX0VYQ0VFREVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjdXJyZW50IHVzZXIncyBkZWxlZ2F0ZWQgdHJ1c3QgZGVsZXRpb24gcXVvdGEgaGFzIGJlZW4gZXhjZWVkZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VTRVJfREVMRVRFX1RSVVNUX1FVT1RBX0VYQ0VFREVEID0gMTkzNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQVVUSEVOVElDQVRJT05fRklSRVdBTExfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIExvZ29uIEZhaWx1cmU6IFRoZSBtYWNoaW5lIHlvdSBhcmUgbG9nZ2luZyBvbnRvIGlzIHByb3RlY3RlZCBieSBhbiBhdXRoZW50aWNhdGlvbiBmaXJld2FsbC4gIFRoZSBzcGVjaWZpZWQgYWNjb3VudCBpcyBub3QgYWxsb3dlZCB0byBhdXRoZW50aWNhdGUgdG8gdGhlIG1hY2hpbmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0FVVEhFTlRJQ0FUSU9OX0ZJUkVXQUxMX0ZBSUxFRCA9IDE5MzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFTU9URV9QUklOVF9DT05ORUNUSU9OU19CTE9DS0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFJlbW90ZSBjb25uZWN0aW9ucyB0byB0aGUgUHJpbnQgU3Bvb2xlciBhcmUgYmxvY2tlZCBieSBhIHBvbGljeSBzZXQgb24geW91ciBtYWNoaW5lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRU1PVEVfUFJJTlRfQ09OTkVDVElPTlNfQkxPQ0tFRCA9IDE5MzY7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgIE9wZW5HTCBFcnJvciBDb2RlICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfUElYRUxfRk9STUFUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBwaXhlbCBmb3JtYXQgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9QSVhFTF9GT1JNQVQgPSAyMDAwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfRFJJVkVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgZHJpdmVyIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0JBRF9EUklWRVIgPSAyMDAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX1dJTkRPV19TVFlMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgd2luZG93IHN0eWxlIG9yIGNsYXNzIGF0dHJpYnV0ZSBpcyBpbnZhbGlkIGZvciB0aGlzIG9wZXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9XSU5ET1dfU1RZTEUgPSAyMDAyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NRVRBRklMRV9OT1RfU1VQUE9SVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgbWV0YWZpbGUgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX01FVEFGSUxFX05PVF9TVVBQT1JURUQgPSAyMDAzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9UUkFOU0ZPUk1fTk9UX1NVUFBPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIHRyYW5zZm9ybWF0aW9uIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9UUkFOU0ZPUk1fTk9UX1NVUFBPUlRFRCA9IDIwMDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMSVBQSU5HX05PVF9TVVBQT1JURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBjbGlwcGluZyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xJUFBJTkdfTk9UX1NVUFBPUlRFRCA9IDIwMDU7XG5cbi8vIEVuZCBvZiBPcGVuR0wgZXJyb3IgY29kZXNcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICBJbWFnZSBDb2xvciBNYW5hZ2VtZW50IEVycm9yIENvZGUgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0NNTVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGNvbG9yIG1hbmFnZW1lbnQgbW9kdWxlIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfQ01NID0gMjAxMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9QUk9GSUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgY29sb3IgcHJvZmlsZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX1BST0ZJTEUgPSAyMDExO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9UQUdfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgdGFnIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RBR19OT1RfRk9VTkQgPSAyMDEyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9UQUdfTk9UX1BSRVNFTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSByZXF1aXJlZCB0YWcgaXMgbm90IHByZXNlbnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1RBR19OT1RfUFJFU0VOVCA9IDIwMTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RVUExJQ0FURV9UQUdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCB0YWcgaXMgYWxyZWFkeSBwcmVzZW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EVVBMSUNBVEVfVEFHID0gMjAxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUFJPRklMRV9OT1RfQVNTT0NJQVRFRF9XSVRIX0RFVklDRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGNvbG9yIHByb2ZpbGUgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgZGV2aWNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUk9GSUxFX05PVF9BU1NPQ0lBVEVEX1dJVEhfREVWSUNFID0gMjAxNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUFJPRklMRV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBjb2xvciBwcm9maWxlIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BST0ZJTEVfTk9UX0ZPVU5EID0gMjAxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9DT0xPUlNQQUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgY29sb3Igc3BhY2UgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9DT0xPUlNQQUNFID0gMjAxNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSUNNX05PVF9FTkFCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEltYWdlIENvbG9yIE1hbmFnZW1lbnQgaXMgbm90IGVuYWJsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lDTV9OT1RfRU5BQkxFRCA9IDIwMTg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RFTEVUSU5HX0lDTV9YRk9STVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZGVsZXRpbmcgdGhlIGNvbG9yIHRyYW5zZm9ybS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVMRVRJTkdfSUNNX1hGT1JNID0gMjAxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9UUkFOU0ZPUk1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBjb2xvciB0cmFuc2Zvcm0gaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9UUkFOU0ZPUk0gPSAyMDIwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DT0xPUlNQQUNFX01JU01BVENIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgdHJhbnNmb3JtIGRvZXMgbm90IG1hdGNoIHRoZSBiaXRtYXAncyBjb2xvciBzcGFjZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ09MT1JTUEFDRV9NSVNNQVRDSCA9IDIwMjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfQ09MT1JJTkRFWFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIG5hbWVkIGNvbG9yIGluZGV4IGlzIG5vdCBwcmVzZW50IGluIHRoZSBwcm9maWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0NPTE9SSU5ERVggPSAyMDIyO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gV2lubmV0MzIgU3RhdHVzIENvZGVzIC8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vIFRoZSByYW5nZSAyMTAwIHRocm91Z2ggMjk5OSBpcyByZXNlcnZlZCBmb3IgbmV0d29yayBzdGF0dXMgY29kZXMuXG4vLyBTZWUgbG1lcnIuaCBmb3IgYSBjb21wbGV0ZSBsaXN0aW5nXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ09OTkVDVEVEX09USEVSX1BBU1NXT1JEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gd2FzIG1hZGUgc3VjY2Vzc2Z1bGx5LCBidXQgdGhlIHVzZXIgaGFkIHRvIGJlIHByb21wdGVkIGZvciBhIHBhc3N3b3JkIG90aGVyIHRoYW4gdGhlIG9uZSBvcmlnaW5hbGx5IHNwZWNpZmllZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ09OTkVDVEVEX09USEVSX1BBU1NXT1JEID0gMjEwODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ09OTkVDVEVEX09USEVSX1BBU1NXT1JEX0RFRkFVTFRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5ldHdvcmsgY29ubmVjdGlvbiB3YXMgbWFkZSBzdWNjZXNzZnVsbHkgdXNpbmcgZGVmYXVsdCBjcmVkZW50aWFscy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ09OTkVDVEVEX09USEVSX1BBU1NXT1JEX0RFRkFVTFQgPSAyMTA5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9CQURfVVNFUk5BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCB1c2VybmFtZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9CQURfVVNFUk5BTUUgPSAyMjAyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT1RfQ09OTkVDVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgbmV0d29yayBjb25uZWN0aW9uIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RfQ09OTkVDVEVEID0gMjI1MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfT1BFTl9GSUxFU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIG5ldHdvcmsgY29ubmVjdGlvbiBoYXMgZmlsZXMgb3BlbiBvciByZXF1ZXN0cyBwZW5kaW5nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9PUEVOX0ZJTEVTID0gMjQwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQUNUSVZFX0NPTk5FQ1RJT05TXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFjdGl2ZSBjb25uZWN0aW9ucyBzdGlsbCBleGlzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUNUSVZFX0NPTk5FQ1RJT05TID0gMjQwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVWSUNFX0lOX1VTRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGV2aWNlIGlzIGluIHVzZSBieSBhbiBhY3RpdmUgcHJvY2VzcyBhbmQgY2Fubm90IGJlIGRpc2Nvbm5lY3RlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVWSUNFX0lOX1VTRSA9IDI0MDQ7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgICAgV2luMzIgU3Bvb2xlciBFcnJvciBDb2RlcyAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9VTktOT1dOX1BSSU5UX01PTklUT1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBwcmludCBtb25pdG9yIGlzIHVua25vd24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOS05PV05fUFJJTlRfTU9OSVRPUiA9IDMwMDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BSSU5URVJfRFJJVkVSX0lOX1VTRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHByaW50ZXIgZHJpdmVyIGlzIGN1cnJlbnRseSBpbiB1c2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BSSU5URVJfRFJJVkVSX0lOX1VTRSA9IDMwMDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NQT09MX0ZJTEVfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcG9vbCBmaWxlIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NQT09MX0ZJTEVfTk9UX0ZPVU5EID0gMzAwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1BMX05PX1NUQVJURE9DXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgU3RhcnREb2NQcmludGVyIGNhbGwgd2FzIG5vdCBpc3N1ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NQTF9OT19TVEFSVERPQyA9IDMwMDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NQTF9OT19BRERKT0Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gQWRkSm9iIGNhbGwgd2FzIG5vdCBpc3N1ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NQTF9OT19BRERKT0IgPSAzMDA0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9QUklOVF9QUk9DRVNTT1JfQUxSRUFEWV9JTlNUQUxMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBwcmludCBwcm9jZXNzb3IgaGFzIGFscmVhZHkgYmVlbiBpbnN0YWxsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BSSU5UX1BST0NFU1NPUl9BTFJFQURZX0lOU1RBTExFRCA9IDMwMDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BSSU5UX01PTklUT1JfQUxSRUFEWV9JTlNUQUxMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBwcmludCBtb25pdG9yIGhhcyBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUklOVF9NT05JVE9SX0FMUkVBRFlfSU5TVEFMTEVEID0gMzAwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9QUklOVF9NT05JVE9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcHJpbnQgbW9uaXRvciBkb2VzIG5vdCBoYXZlIHRoZSByZXF1aXJlZCBmdW5jdGlvbnMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfUFJJTlRfTU9OSVRPUiA9IDMwMDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BSSU5UX01PTklUT1JfSU5fVVNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcHJpbnQgbW9uaXRvciBpcyBjdXJyZW50bHkgaW4gdXNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUklOVF9NT05JVE9SX0lOX1VTRSA9IDMwMDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BSSU5URVJfSEFTX0pPQlNfUVVFVUVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIHdoZW4gdGhlcmUgYXJlIGpvYnMgcXVldWVkIHRvIHRoZSBwcmludGVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUklOVEVSX0hBU19KT0JTX1FVRVVFRCA9IDMwMDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NVQ0NFU1NfUkVCT09UX1JFUVVJUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwuIENoYW5nZXMgd2lsbCBub3QgYmUgZWZmZWN0aXZlIHVudGlsIHRoZSBzeXN0ZW0gaXMgcmVib290ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NVQ0NFU1NfUkVCT09UX1JFUVVJUkVEID0gMzAxMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1VDQ0VTU19SRVNUQVJUX1JFUVVJUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwuIENoYW5nZXMgd2lsbCBub3QgYmUgZWZmZWN0aXZlIHVudGlsIHRoZSBzZXJ2aWNlIGlzIHJlc3RhcnRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1VDQ0VTU19SRVNUQVJUX1JFUVVJUkVEID0gMzAxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUFJJTlRFUl9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gcHJpbnRlcnMgd2VyZSBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUFJJTlRFUl9OT1RfRk9VTkQgPSAzMDEyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9QUklOVEVSX0RSSVZFUl9XQVJORURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByaW50ZXIgZHJpdmVyIGlzIGtub3duIHRvIGJlIHVucmVsaWFibGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BSSU5URVJfRFJJVkVSX1dBUk5FRCA9IDMwMTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1BSSU5URVJfRFJJVkVSX0JMT0NLRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByaW50ZXIgZHJpdmVyIGlzIGtub3duIHRvIGhhcm0gdGhlIHN5c3RlbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUFJJTlRFUl9EUklWRVJfQkxPQ0tFRCA9IDMwMTQ7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgICAgV2lucyBFcnJvciBDb2RlcyAgICAgICAgICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9XSU5TX0lOVEVSTkFMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFdJTlMgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfV0lOU19JTlRFUk5BTCA9IDQwMDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NBTl9OT1RfREVMX0xPQ0FMX1dJTlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGxvY2FsIFdJTlMgY2FuIG5vdCBiZSBkZWxldGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DQU5fTk9UX0RFTF9MT0NBTF9XSU5TID0gNDAwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1RBVElDX0lOSVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGltcG9ydGF0aW9uIGZyb20gdGhlIGZpbGUgZmFpbGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TVEFUSUNfSU5JVCA9IDQwMDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOQ19CQUNLVVBcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGJhY2t1cCBmYWlsZWQuIFdhcyBhIGZ1bGwgYmFja3VwIGRvbmUgYmVmb3JlP1xuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTkNfQkFDS1VQID0gNDAwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRlVMTF9CQUNLVVBcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGJhY2t1cCBmYWlsZWQuIENoZWNrIHRoZSBkaXJlY3RvcnkgdG8gd2hpY2ggeW91IGFyZSBiYWNraW5nIHRoZSBkYXRhYmFzZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRlVMTF9CQUNLVVAgPSA0MDA0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRUNfTk9OX0VYSVNURU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuYW1lIGRvZXMgbm90IGV4aXN0IGluIHRoZSBXSU5TIGRhdGFiYXNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRUNfTk9OX0VYSVNURU5UID0gNDAwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUlBMX05PVF9BTExPV0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFJlcGxpY2F0aW9uIHdpdGggYSBub25jb25maWd1cmVkIHBhcnRuZXIgaXMgbm90IGFsbG93ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JQTF9OT1RfQUxMT1dFRCA9IDQwMDY7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgICAgREhDUCBFcnJvciBDb2RlcyAgICAgICAgICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ESENQX0FERFJFU1NfQ09ORkxJQ1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIERIQ1AgY2xpZW50IGhhcyBvYnRhaW5lZCBhbiBJUCBhZGRyZXNzIHRoYXQgaXMgYWxyZWFkeSBpbiB1c2Ugb24gdGhlIG5ldHdvcmsuIFRoZSBsb2NhbCBpbnRlcmZhY2Ugd2lsbCBiZSBkaXNhYmxlZCB1bnRpbCB0aGUgREhDUCBjbGllbnQgY2FuIG9idGFpbiBhIG5ldyBhZGRyZXNzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ESENQX0FERFJFU1NfQ09ORkxJQ1QgPSA0MTAwO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICAgIFdNSSBFcnJvciBDb2RlcyAgICAgICAgICAgIC8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV01JX0dVSURfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBHVUlEIHBhc3NlZCB3YXMgbm90IHJlY29nbml6ZWQgYXMgdmFsaWQgYnkgYSBXTUkgZGF0YSBwcm92aWRlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfV01JX0dVSURfTk9UX0ZPVU5EID0gNDIwMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV01JX0lOU1RBTkNFX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgaW5zdGFuY2UgbmFtZSBwYXNzZWQgd2FzIG5vdCByZWNvZ25pemVkIGFzIHZhbGlkIGJ5IGEgV01JIGRhdGEgcHJvdmlkZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1dNSV9JTlNUQU5DRV9OT1RfRk9VTkQgPSA0MjAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9XTUlfSVRFTUlEX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGF0YSBpdGVtIElEIHBhc3NlZCB3YXMgbm90IHJlY29nbml6ZWQgYXMgdmFsaWQgYnkgYSBXTUkgZGF0YSBwcm92aWRlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfV01JX0lURU1JRF9OT1RfRk9VTkQgPSA0MjAyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9XTUlfVFJZX0FHQUlOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBXTUkgcmVxdWVzdCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGFuZCBzaG91bGQgYmUgcmV0cmllZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfV01JX1RSWV9BR0FJTiA9IDQyMDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1dNSV9EUF9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIFdNSSBkYXRhIHByb3ZpZGVyIGNvdWxkIG5vdCBiZSBsb2NhdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XTUlfRFBfTk9UX0ZPVU5EID0gNDIwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV01JX1VOUkVTT0xWRURfSU5TVEFOQ0VfUkVGXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBXTUkgZGF0YSBwcm92aWRlciByZWZlcmVuY2VzIGFuIGluc3RhbmNlIHNldCB0aGF0IGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XTUlfVU5SRVNPTFZFRF9JTlNUQU5DRV9SRUYgPSA0MjA1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9XTUlfQUxSRUFEWV9FTkFCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBXTUkgZGF0YSBibG9jayBvciBldmVudCBub3RpZmljYXRpb24gaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XTUlfQUxSRUFEWV9FTkFCTEVEID0gNDIwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV01JX0dVSURfRElTQ09OTkVDVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBXTUkgZGF0YSBibG9jayBpcyBubyBsb25nZXIgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XTUlfR1VJRF9ESVNDT05ORUNURUQgPSA0MjA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9XTUlfU0VSVkVSX1VOQVZBSUxBQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBXTUkgZGF0YSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1dNSV9TRVJWRVJfVU5BVkFJTEFCTEUgPSA0MjA4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9XTUlfRFBfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBXTUkgZGF0YSBwcm92aWRlciBmYWlsZWQgdG8gY2Fycnkgb3V0IHRoZSByZXF1ZXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XTUlfRFBfRkFJTEVEID0gNDIwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV01JX0lOVkFMSURfTU9GXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBXTUkgTU9GIGluZm9ybWF0aW9uIGlzIG5vdCB2YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfV01JX0lOVkFMSURfTU9GID0gNDIxMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV01JX0lOVkFMSURfUkVHSU5GT1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgV01JIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgdmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1dNSV9JTlZBTElEX1JFR0lORk8gPSA0MjExO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9XTUlfQUxSRUFEWV9ESVNBQkxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgV01JIGRhdGEgYmxvY2sgb3IgZXZlbnQgbm90aWZpY2F0aW9uIGhhcyBhbHJlYWR5IGJlZW4gZGlzYWJsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1dNSV9BTFJFQURZX0RJU0FCTEVEID0gNDIxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfV01JX1JFQURfT05MWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgV01JIGRhdGEgaXRlbSBvciBkYXRhIGJsb2NrIGlzIHJlYWQgb25seS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfV01JX1JFQURfT05MWSA9IDQyMTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1dNSV9TRVRfRkFJTFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgV01JIGRhdGEgaXRlbSBvciBkYXRhIGJsb2NrIGNvdWxkIG5vdCBiZSBjaGFuZ2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9XTUlfU0VUX0ZBSUxVUkUgPSA0MjE0O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gTlQgTWVkaWEgU2VydmljZXMgKFJTTSkgRXJyb3IgQ29kZXMgIC8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9NRURJQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWVkaWEgaWRlbnRpZmllciBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBtZWRpdW0uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfTUVESUEgPSA0MzAwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX0xJQlJBUllcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGxpYnJhcnkgaWRlbnRpZmllciBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBsaWJyYXJ5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0xJQlJBUlkgPSA0MzAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX01FRElBX1BPT0xcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1lZGlhIHBvb2wgaWRlbnRpZmllciBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBtZWRpYSBwb29sLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX01FRElBX1BPT0wgPSA0MzAyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EUklWRV9NRURJQV9NSVNNQVRDSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZHJpdmUgYW5kIG1lZGl1bSBhcmUgbm90IGNvbXBhdGlibGUgb3IgZXhpc3QgaW4gZGlmZmVyZW50IGxpYnJhcmllcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFJJVkVfTUVESUFfTUlTTUFUQ0ggPSA0MzAzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NRURJQV9PRkZMSU5FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBtZWRpdW0gY3VycmVudGx5IGV4aXN0cyBpbiBhbiBvZmZsaW5lIGxpYnJhcnkgYW5kIG11c3QgYmUgb25saW5lIHRvIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX01FRElBX09GRkxJTkUgPSA0MzA0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9MSUJSQVJZX09GRkxJTkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkIG9uIGFuIG9mZmxpbmUgbGlicmFyeS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTElCUkFSWV9PRkZMSU5FID0gNDMwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRU1QVFlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGxpYnJhcnksIGRyaXZlLCBvciBtZWRpYSBwb29sIGlzIGVtcHR5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9FTVBUWSA9IDQzMDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9FTVBUWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbGlicmFyeSwgZHJpdmUsIG9yIG1lZGlhIHBvb2wgbXVzdCBiZSBlbXB0eSB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RfRU1QVFkgPSA0MzA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NRURJQV9VTkFWQUlMQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBtZWRpYSBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoaXMgbWVkaWEgcG9vbCBvciBsaWJyYXJ5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9NRURJQV9VTkFWQUlMQUJMRSA9IDQzMDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFU09VUkNFX0RJU0FCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgcmVzb3VyY2UgcmVxdWlyZWQgZm9yIHRoaXMgb3BlcmF0aW9uIGlzIGRpc2FibGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNPVVJDRV9ESVNBQkxFRCA9IDQzMDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfQ0xFQU5FUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWVkaWEgaWRlbnRpZmllciBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBjbGVhbmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0NMRUFORVIgPSA0MzEwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9VTkFCTEVfVE9fQ0xFQU5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRyaXZlIGNhbm5vdCBiZSBjbGVhbmVkIG9yIGRvZXMgbm90IHN1cHBvcnQgY2xlYW5pbmcuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOQUJMRV9UT19DTEVBTiA9IDQzMTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX09CSkVDVF9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9iamVjdCBpZGVudGlmaWVyIGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbGlkIG9iamVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfT0JKRUNUX05PVF9GT1VORCA9IDQzMTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RBVEFCQVNFX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0byB0aGUgZGF0YWJhc2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RBVEFCQVNFX0ZBSUxVUkUgPSA0MzEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EQVRBQkFTRV9GVUxMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkYXRhYmFzZSBpcyBmdWxsLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EQVRBQkFTRV9GVUxMID0gNDMxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTUVESUFfSU5DT01QQVRJQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBtZWRpdW0gaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgZGV2aWNlIG9yIG1lZGlhIHBvb2wuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX01FRElBX0lOQ09NUEFUSUJMRSA9IDQzMTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFU09VUkNFX05PVF9QUkVTRU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXNvdXJjZSByZXF1aXJlZCBmb3IgdGhpcyBvcGVyYXRpb24gZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFU09VUkNFX05PVF9QUkVTRU5UID0gNDMxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSU5WQUxJRF9PUEVSQVRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBpZGVudGlmaWVyIGlzIG5vdCB2YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9PUEVSQVRJT04gPSA0MzE3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NRURJQV9OT1RfQVZBSUxBQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBtZWRpYSBpcyBub3QgbW91bnRlZCBvciByZWFkeSBmb3IgdXNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9NRURJQV9OT1RfQVZBSUxBQkxFID0gNDMxODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVWSUNFX05PVF9BVkFJTEFCTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRldmljZSBpcyBub3QgcmVhZHkgZm9yIHVzZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVWSUNFX05PVF9BVkFJTEFCTEUgPSA0MzE5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRVFVRVNUX1JFRlVTRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdG9yIG9yIGFkbWluaXN0cmF0b3IgaGFzIHJlZnVzZWQgdGhlIHJlcXVlc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFUVVFU1RfUkVGVVNFRCA9IDQzMjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfRFJJVkVfT0JKRUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkcml2ZSBpZGVudGlmaWVyIGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbGlkIGRyaXZlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX0RSSVZFX09CSkVDVCA9IDQzMjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0xJQlJBUllfRlVMTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBMaWJyYXJ5IGlzIGZ1bGwuICBObyBzbG90IGlzIGF2YWlsYWJsZSBmb3IgdXNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9MSUJSQVJZX0ZVTEwgPSA0MzIyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NRURJVU1fTk9UX0FDQ0VTU0lCTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHRyYW5zcG9ydCBjYW5ub3QgYWNjZXNzIHRoZSBtZWRpdW0uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX01FRElVTV9OT1RfQUNDRVNTSUJMRSA9IDQzMjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VOQUJMRV9UT19MT0FEX01FRElVTVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBVbmFibGUgdG8gbG9hZCB0aGUgbWVkaXVtIGludG8gdGhlIGRyaXZlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9VTkFCTEVfVE9fTE9BRF9NRURJVU0gPSA0MzI0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9VTkFCTEVfVE9fSU5WRU5UT1JZX0RSSVZFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuYWJsZSB0byByZXRyaWV2ZSB0aGUgZHJpdmUgc3RhdHVzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9VTkFCTEVfVE9fSU5WRU5UT1JZX0RSSVZFID0gNDMyNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5BQkxFX1RPX0lOVkVOVE9SWV9TTE9UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuYWJsZSB0byByZXRyaWV2ZSB0aGUgc2xvdCBzdGF0dXMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOQUJMRV9UT19JTlZFTlRPUllfU0xPVCA9IDQzMjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1VOQUJMRV9UT19JTlZFTlRPUllfVFJBTlNQT1JUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuYWJsZSB0byByZXRyaWV2ZSBzdGF0dXMgYWJvdXQgdGhlIHRyYW5zcG9ydC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVU5BQkxFX1RPX0lOVkVOVE9SWV9UUkFOU1BPUlQgPSA0MzI3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9UUkFOU1BPUlRfRlVMTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgdXNlIHRoZSB0cmFuc3BvcnQgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGluIHVzZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVFJBTlNQT1JUX0ZVTEwgPSA0MzI4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DT05UUk9MTElOR19JRVBPUlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIG9wZW4gb3IgY2xvc2UgdGhlIGluamVjdC9lamVjdCBwb3J0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DT05UUk9MTElOR19JRVBPUlQgPSA0MzI5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9VTkFCTEVfVE9fRUpFQ1RfTU9VTlRFRF9NRURJQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBVbmFibGUgdG8gZWplY3QgdGhlIG1lZGl1bSBiZWNhdXNlIGl0IGlzIGluIGEgZHJpdmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VOQUJMRV9UT19FSkVDVF9NT1VOVEVEX01FRElBID0gNDMzMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xFQU5FUl9TTE9UX1NFVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGNsZWFuZXIgc2xvdCBpcyBhbHJlYWR5IHJlc2VydmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTEVBTkVSX1NMT1RfU0VUID0gNDMzMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xFQU5FUl9TTE9UX05PVF9TRVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBjbGVhbmVyIHNsb3QgaXMgbm90IHJlc2VydmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTEVBTkVSX1NMT1RfTk9UX1NFVCA9IDQzMzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMRUFORVJfQ0FSVFJJREdFX1NQRU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbGVhbmVyIGNhcnRyaWRnZSBoYXMgcGVyZm9ybWVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkcml2ZSBjbGVhbmluZ3MuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMRUFORVJfQ0FSVFJJREdFX1NQRU5UID0gNDMzMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfVU5FWFBFQ1RFRF9PTUlEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuZXhwZWN0ZWQgb24tbWVkaXVtIGlkZW50aWZpZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1VORVhQRUNURURfT01JRCA9IDQzMzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NBTlRfREVMRVRFX0xBU1RfSVRFTVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbGFzdCByZW1haW5pbmcgaXRlbSBpbiB0aGlzIGdyb3VwIG9yIHJlc291cmNlIGNhbm5vdCBiZSBkZWxldGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DQU5UX0RFTEVURV9MQVNUX0lURU0gPSA0MzM1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9NRVNTQUdFX0VYQ0VFRFNfTUFYX1NJWkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1lc3NhZ2UgcHJvdmlkZWQgZXhjZWVkcyB0aGUgbWF4aW11bSBzaXplIGFsbG93ZWQgZm9yIHRoaXMgcGFyYW1ldGVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9NRVNTQUdFX0VYQ0VFRFNfTUFYX1NJWkUgPSA0MzM2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9WT0xVTUVfQ09OVEFJTlNfU1lTX0ZJTEVTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB2b2x1bWUgY29udGFpbnMgc3lzdGVtIG9yIHBhZ2luZyBmaWxlcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVk9MVU1FX0NPTlRBSU5TX1NZU19GSUxFUyA9IDQzMzc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lORElHRU5PVVNfVFlQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWVkaWEgdHlwZSBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIHRoaXMgbGlicmFyeSBzaW5jZSBhdCBsZWFzdCBvbmUgZHJpdmUgaW4gdGhlIGxpYnJhcnkgcmVwb3J0cyBpdCBjYW4gc3VwcG9ydCB0aGlzIG1lZGlhIHR5cGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lORElHRU5PVVNfVFlQRSA9IDQzMzg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PX1NVUFBPUlRJTkdfRFJJVkVTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgb2ZmbGluZSBtZWRpYSBjYW5ub3QgYmUgbW91bnRlZCBvbiB0aGlzIHN5c3RlbSBzaW5jZSBubyBlbmFibGVkIGRyaXZlcyBhcmUgcHJlc2VudCB3aGljaCBjYW4gYmUgdXNlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fU1VQUE9SVElOR19EUklWRVMgPSA0MzM5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTEVBTkVSX0NBUlRSSURHRV9JTlNUQUxMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBjbGVhbmVyIGNhcnRyaWRnZSBpcyBwcmVzZW50IGluIHRoZSB0YXBlIGxpYnJhcnkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMRUFORVJfQ0FSVFJJREdFX0lOU1RBTExFRCA9IDQzNDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lFUE9SVF9GVUxMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCB1c2UgdGhlIGllcG9ydCBiZWNhdXNlIGl0IGlzIG5vdCBlbXB0eS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSUVQT1JUX0ZVTEwgPSA0MzQxO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vIE5UIFJlbW90ZSBTdG9yYWdlIFNlcnZpY2UgRXJyb3IgQ29kZXMgIC8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0ZJTEVfT0ZGTElORVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVtb3RlIHN0b3JhZ2Ugc2VydmljZSB3YXMgbm90IGFibGUgdG8gcmVjYWxsIHRoZSBmaWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9GSUxFX09GRkxJTkUgPSA0MzUwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRU1PVEVfU1RPUkFHRV9OT1RfQUNUSVZFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZW1vdGUgc3RvcmFnZSBzZXJ2aWNlIGlzIG5vdCBvcGVyYXRpb25hbCBhdCB0aGlzIHRpbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFTU9URV9TVE9SQUdFX05PVF9BQ1RJVkUgPSA0MzUxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRU1PVEVfU1RPUkFHRV9NRURJQV9FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVtb3RlIHN0b3JhZ2Ugc2VydmljZSBlbmNvdW50ZXJlZCBhIG1lZGlhIGVycm9yLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRU1PVEVfU1RPUkFHRV9NRURJQV9FUlJPUiA9IDQzNTI7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gTlQgUmVwYXJzZSBQb2ludHMgRXJyb3IgQ29kZXMgICAgICAgICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX0FfUkVQQVJTRV9QT0lOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZSBvciBkaXJlY3RvcnkgaXMgbm90IGEgcmVwYXJzZSBwb2ludC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX0FfUkVQQVJTRV9QT0lOVCA9IDQzOTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFUEFSU0VfQVRUUklCVVRFX0NPTkZMSUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXBhcnNlIHBvaW50IGF0dHJpYnV0ZSBjYW5ub3QgYmUgc2V0IGJlY2F1c2UgaXQgY29uZmxpY3RzIHdpdGggYW4gZXhpc3RpbmcgYXR0cmlidXRlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVBBUlNFX0FUVFJJQlVURV9DT05GTElDVCA9IDQzOTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfUkVQQVJTRV9EQVRBXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkYXRhIHByZXNlbnQgaW4gdGhlIHJlcGFyc2UgcG9pbnQgYnVmZmVyIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lOVkFMSURfUkVQQVJTRV9EQVRBID0gNDM5MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVQQVJTRV9UQUdfSU5WQUxJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdGFnIHByZXNlbnQgaW4gdGhlIHJlcGFyc2UgcG9pbnQgYnVmZmVyIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFUEFSU0VfVEFHX0lOVkFMSUQgPSA0MzkzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRVBBUlNFX1RBR19NSVNNQVRDSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIHRhZyBzcGVjaWZpZWQgaW4gdGhlIHJlcXVlc3QgYW5kIHRoZSB0YWcgcHJlc2VudCBpbiB0aGUgcmVwYXJzZSBwb2ludC5cbi8vXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1JFUEFSU0VfVEFHX01JU01BVENIID0gNDM5NDtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyBOVCBTaW5nbGUgSW5zdGFuY2UgU3RvcmUgRXJyb3IgQ29kZXMgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9WT0xVTUVfTk9UX1NJU19FTkFCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNpbmdsZSBJbnN0YW5jZSBTdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyB2b2x1bWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1ZPTFVNRV9OT1RfU0lTX0VOQUJMRUQgPSA0NTAwO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICAgIENsdXN0ZXIgRXJyb3IgQ29kZXMgICAgICAgIC8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVQRU5ERU5UX1JFU09VUkNFX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciByZXNvdXJjZSBjYW5ub3QgYmUgbW92ZWQgdG8gYW5vdGhlciBncm91cCBiZWNhdXNlIG90aGVyIHJlc291cmNlcyBhcmUgZGVwZW5kZW50IG9uIGl0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ERVBFTkRFTlRfUkVTT1VSQ0VfRVhJU1RTID0gNTAwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVQRU5ERU5DWV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgcmVzb3VyY2UgZGVwZW5kZW5jeSBjYW5ub3QgYmUgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RFUEVOREVOQ1lfTk9UX0ZPVU5EID0gNTAwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVQRU5ERU5DWV9BTFJFQURZX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciByZXNvdXJjZSBjYW5ub3QgYmUgbWFkZSBkZXBlbmRlbnQgb24gdGhlIHNwZWNpZmllZCByZXNvdXJjZSBiZWNhdXNlIGl0IGlzIGFscmVhZHkgZGVwZW5kZW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ERVBFTkRFTkNZX0FMUkVBRFlfRVhJU1RTID0gNTAwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVTT1VSQ0VfTk9UX09OTElORVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciByZXNvdXJjZSBpcyBub3Qgb25saW5lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNPVVJDRV9OT1RfT05MSU5FID0gNTAwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSE9TVF9OT0RFX05PVF9BVkFJTEFCTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBjbHVzdGVyIG5vZGUgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0hPU1RfTk9ERV9OT1RfQVZBSUxBQkxFID0gNTAwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVTT1VSQ0VfTk9UX0FWQUlMQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNPVVJDRV9OT1RfQVZBSUxBQkxFID0gNTAwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVTT1VSQ0VfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUkVTT1VSQ0VfTk9UX0ZPVU5EID0gNTAwNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0hVVERPV05fQ0xVU1RFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBpcyBiZWluZyBzaHV0IGRvd24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NIVVRET1dOX0NMVVNURVIgPSA1MDA4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DQU5UX0VWSUNUX0FDVElWRV9OT0RFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgY2x1c3RlciBub2RlIGNhbm5vdCBiZSBldmljdGVkIGZyb20gdGhlIGNsdXN0ZXIgdW5sZXNzIHRoZSBub2RlIGlzIGRvd24gb3IgaXQgaXMgdGhlIGxhc3Qgbm9kZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0FOVF9FVklDVF9BQ1RJVkVfTk9ERSA9IDUwMDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX09CSkVDVF9BTFJFQURZX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb2JqZWN0IGFscmVhZHkgZXhpc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9PQkpFQ1RfQUxSRUFEWV9FWElTVFMgPSA1MDEwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9PQkpFQ1RfSU5fTElTVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIGxpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX09CSkVDVF9JTl9MSVNUID0gNTAxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfR1JPVVBfTk9UX0FWQUlMQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBncm91cCBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnkgbmV3IHJlcXVlc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9HUk9VUF9OT1RfQVZBSUxBQkxFID0gNTAxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfR1JPVVBfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIGdyb3VwIGNvdWxkIG5vdCBiZSBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfR1JPVVBfTk9UX0ZPVU5EID0gNTAxMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfR1JPVVBfTk9UX09OTElORVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgY2x1c3RlciBncm91cCBpcyBub3Qgb25saW5lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9HUk9VUF9OT1RfT05MSU5FID0gNTAxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSE9TVF9OT0RFX05PVF9SRVNPVVJDRV9PV05FUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBub2RlIGlzIG5vdCB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9IT1NUX05PREVfTk9UX1JFU09VUkNFX09XTkVSID0gNTAxNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSE9TVF9OT0RFX05PVF9HUk9VUF9PV05FUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBub2RlIGlzIG5vdCB0aGUgb3duZXIgb2YgdGhlIGdyb3VwLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9IT1NUX05PREVfTk9UX0dST1VQX09XTkVSID0gNTAxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVTTU9OX0NSRUFURV9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgcmVzb3VyY2UgY291bGQgbm90IGJlIGNyZWF0ZWQgaW4gdGhlIHNwZWNpZmllZCByZXNvdXJjZSBtb25pdG9yLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNNT05fQ1JFQVRFX0ZBSUxFRCA9IDUwMTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFU01PTl9PTkxJTkVfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIHJlc291cmNlIGNvdWxkIG5vdCBiZSBicm91Z2h0IG9ubGluZSBieSB0aGUgcmVzb3VyY2UgbW9uaXRvci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUkVTTU9OX09OTElORV9GQUlMRUQgPSA1MDE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRVNPVVJDRV9PTkxJTkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGNsdXN0ZXIgcmVzb3VyY2UgaXMgb25saW5lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNPVVJDRV9PTkxJTkUgPSA1MDE5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9RVU9SVU1fUkVTT1VSQ0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgcmVzb3VyY2UgY291bGQgbm90IGJlIGRlbGV0ZWQgb3IgYnJvdWdodCBvZmZsaW5lIGJlY2F1c2UgaXQgaXMgdGhlIHF1b3J1bSByZXNvdXJjZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUVVPUlVNX1JFU09VUkNFID0gNTAyMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9UX1FVT1JVTV9DQVBBQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIGNvdWxkIG5vdCBtYWtlIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgYSBxdW9ydW0gcmVzb3VyY2UgYmVjYXVzZSBpdCBpcyBub3QgY2FwYWJsZSBvZiBiZWluZyBhIHF1b3J1bSByZXNvdXJjZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX1FVT1JVTV9DQVBBQkxFID0gNTAyMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9TSFVUVElOR19ET1dOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIHNvZnR3YXJlIGlzIHNodXR0aW5nIGRvd24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfU0hVVFRJTkdfRE9XTiA9IDUwMjI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lOVkFMSURfU1RBVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGdyb3VwIG9yIHJlc291cmNlIGlzIG5vdCBpbiB0aGUgY29ycmVjdCBzdGF0ZSB0byBwZXJmb3JtIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JTlZBTElEX1NUQVRFID0gNTAyMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVTT1VSQ0VfUFJPUEVSVElFU19TVE9SRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByb3BlcnRpZXMgd2VyZSBzdG9yZWQgYnV0IG5vdCBhbGwgY2hhbmdlcyB3aWxsIHRha2UgZWZmZWN0IHVudGlsIHRoZSBuZXh0IHRpbWUgdGhlIHJlc291cmNlIGlzIGJyb3VnaHQgb25saW5lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNPVVJDRV9QUk9QRVJUSUVTX1NUT1JFRCA9IDUwMjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PVF9RVU9SVU1fQ0xBU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgY291bGQgbm90IG1ha2UgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBhIHF1b3J1bSByZXNvdXJjZSBiZWNhdXNlIGl0IGRvZXMgbm90IGJlbG9uZyB0byBhIHNoYXJlZCBzdG9yYWdlIGNsYXNzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RfUVVPUlVNX0NMQVNTID0gNTAyNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ09SRV9SRVNPVVJDRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciByZXNvdXJjZSBjb3VsZCBub3QgYmUgZGVsZXRlZCBzaW5jZSBpdCBpcyBhIGNvcmUgcmVzb3VyY2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NPUkVfUkVTT1VSQ0UgPSA1MDI2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9RVU9SVU1fUkVTT1VSQ0VfT05MSU5FX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcXVvcnVtIHJlc291cmNlIGZhaWxlZCB0byBjb21lIG9ubGluZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUVVPUlVNX1JFU09VUkNFX09OTElORV9GQUlMRUQgPSA1MDI3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9RVU9SVU1MT0dfT1BFTl9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHF1b3J1bSBsb2cgY291bGQgbm90IGJlIGNyZWF0ZWQgb3IgbW91bnRlZCBzdWNjZXNzZnVsbHkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1FVT1JVTUxPR19PUEVOX0ZBSUxFRCA9IDUwMjg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJMT0dfQ09SUlVQVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBsb2cgaXMgY29ycnVwdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUkxPR19DT1JSVVBUID0gNTAyOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUkxPR19SRUNPUkRfRVhDRUVEU19NQVhTSVpFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZWNvcmQgY291bGQgbm90IGJlIHdyaXR0ZW4gdG8gdGhlIGNsdXN0ZXIgbG9nIHNpbmNlIGl0IGV4Y2VlZHMgdGhlIG1heGltdW0gc2l6ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUkxPR19SRUNPUkRfRVhDRUVEU19NQVhTSVpFID0gNTAzMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUkxPR19FWENFRURTX01BWFNJWkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbG9nIGV4Y2VlZHMgaXRzIG1heGltdW0gc2l6ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUkxPR19FWENFRURTX01BWFNJWkUgPSA1MDMxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSTE9HX0NIS1BPSU5UX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBjaGVja3BvaW50IHJlY29yZCB3YXMgZm91bmQgaW4gdGhlIGNsdXN0ZXIgbG9nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSTE9HX0NIS1BPSU5UX05PVF9GT1VORCA9IDUwMzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJMT0dfTk9UX0VOT1VHSF9TUEFDRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWluaW11bSByZXF1aXJlZCBkaXNrIHNwYWNlIG5lZWRlZCBmb3IgbG9nZ2luZyBpcyBub3QgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSTE9HX05PVF9FTk9VR0hfU1BBQ0UgPSA1MDMzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9RVU9SVU1fT1dORVJfQUxJVkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbm9kZSBmYWlsZWQgdG8gdGFrZSBjb250cm9sIG9mIHRoZSBxdW9ydW0gcmVzb3VyY2UgYmVjYXVzZSB0aGUgcmVzb3VyY2UgaXMgb3duZWQgYnkgYW5vdGhlciBhY3RpdmUgbm9kZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfUVVPUlVNX09XTkVSX0FMSVZFID0gNTAzNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTkVUV09SS19OT1RfQVZBSUxBQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgY2x1c3RlciBuZXR3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ORVRXT1JLX05PVF9BVkFJTEFCTEUgPSA1MDM1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT0RFX05PVF9BVkFJTEFCTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBjbHVzdGVyIG5vZGUgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX05PREVfTk9UX0FWQUlMQUJMRSA9IDUwMzY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0FMTF9OT0RFU19OT1RfQVZBSUxBQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFsbCBjbHVzdGVyIG5vZGVzIG11c3QgYmUgcnVubmluZyB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9BTExfTk9ERVNfTk9UX0FWQUlMQUJMRSA9IDUwMzc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1JFU09VUkNFX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGNsdXN0ZXIgcmVzb3VyY2UgZmFpbGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNPVVJDRV9GQUlMRUQgPSA1MDM4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX0lOVkFMSURfTk9ERVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBub2RlIGlzIG5vdCB2YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9JTlZBTElEX05PREUgPSA1MDM5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX05PREVfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIG5vZGUgYWxyZWFkeSBleGlzdHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTk9ERV9FWElTVFMgPSA1MDQwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX0pPSU5fSU5fUFJPR1JFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBub2RlIGlzIGluIHRoZSBwcm9jZXNzIG9mIGpvaW5pbmcgdGhlIGNsdXN0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfSk9JTl9JTl9QUk9HUkVTUyA9IDUwNDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTk9ERV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbm9kZSB3YXMgbm90IGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX05PREVfTk9UX0ZPVU5EID0gNTA0MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9MT0NBTF9OT0RFX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBsb2NhbCBub2RlIGluZm9ybWF0aW9uIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTE9DQUxfTk9ERV9OT1RfRk9VTkQgPSA1MDQzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX05FVFdPUktfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIG5ldHdvcmsgYWxyZWFkeSBleGlzdHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTkVUV09SS19FWElTVFMgPSA1MDQ0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX05FVFdPUktfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIG5ldHdvcmsgd2FzIG5vdCBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9ORVRXT1JLX05PVF9GT1VORCA9IDUwNDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTkVUSU5URVJGQUNFX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBuZXR3b3JrIGludGVyZmFjZSBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9ORVRJTlRFUkZBQ0VfRVhJU1RTID0gNTA0NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9ORVRJTlRFUkZBQ0VfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIG5ldHdvcmsgaW50ZXJmYWNlIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTkVUSU5URVJGQUNFX05PVF9GT1VORCA9IDUwNDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfSU5WQUxJRF9SRVFVRVNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIHJlcXVlc3QgaXMgbm90IHZhbGlkIGZvciB0aGlzIG9iamVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9JTlZBTElEX1JFUVVFU1QgPSA1MDQ4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX0lOVkFMSURfTkVUV09SS19QUk9WSURFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBuZXR3b3JrIHByb3ZpZGVyIGlzIG5vdCB2YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9JTlZBTElEX05FVFdPUktfUFJPVklERVIgPSA1MDQ5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX05PREVfRE9XTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBub2RlIGlzIGRvd24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTk9ERV9ET1dOID0gNTA1MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9OT0RFX1VOUkVBQ0hBQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIG5vZGUgaXMgbm90IHJlYWNoYWJsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9OT0RFX1VOUkVBQ0hBQkxFID0gNTA1MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9OT0RFX05PVF9NRU1CRVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbm9kZSBpcyBub3QgYSBtZW1iZXIgb2YgdGhlIGNsdXN0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTk9ERV9OT1RfTUVNQkVSID0gNTA1MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9KT0lOX05PVF9JTl9QUk9HUkVTU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGNsdXN0ZXIgam9pbiBvcGVyYXRpb24gaXMgbm90IGluIHByb2dyZXNzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX0pPSU5fTk9UX0lOX1BST0dSRVNTID0gNTA1MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9JTlZBTElEX05FVFdPUktcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbmV0d29yayBpcyBub3QgdmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfSU5WQUxJRF9ORVRXT1JLID0gNTA1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9OT0RFX1VQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIG5vZGUgaXMgdXAuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTk9ERV9VUCA9IDUwNTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfSVBBRERSX0lOX1VTRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBJUCBhZGRyZXNzIGlzIGFscmVhZHkgaW4gdXNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX0lQQUREUl9JTl9VU0UgPSA1MDU3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX05PREVfTk9UX1BBVVNFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBub2RlIGlzIG5vdCBwYXVzZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTk9ERV9OT1RfUEFVU0VEID0gNTA1ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9OT19TRUNVUklUWV9DT05URVhUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIGNsdXN0ZXIgc2VjdXJpdHkgY29udGV4dCBpcyBhdmFpbGFibGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTk9fU0VDVVJJVFlfQ09OVEVYVCA9IDUwNTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTkVUV09SS19OT1RfSU5URVJOQUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbmV0d29yayBpcyBub3QgY29uZmlndXJlZCBmb3IgaW50ZXJuYWwgY2x1c3RlciBjb21tdW5pY2F0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX05FVFdPUktfTk9UX0lOVEVSTkFMID0gNTA2MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9OT0RFX0FMUkVBRFlfVVBcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbm9kZSBpcyBhbHJlYWR5IHVwLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX05PREVfQUxSRUFEWV9VUCA9IDUwNjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTk9ERV9BTFJFQURZX0RPV05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbm9kZSBpcyBhbHJlYWR5IGRvd24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTk9ERV9BTFJFQURZX0RPV04gPSA1MDYyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX05FVFdPUktfQUxSRUFEWV9PTkxJTkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbmV0d29yayBpcyBhbHJlYWR5IG9ubGluZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9ORVRXT1JLX0FMUkVBRFlfT05MSU5FID0gNTA2MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9ORVRXT1JLX0FMUkVBRFlfT0ZGTElORVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBuZXR3b3JrIGlzIGFscmVhZHkgb2ZmbGluZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9ORVRXT1JLX0FMUkVBRFlfT0ZGTElORSA9IDUwNjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTk9ERV9BTFJFQURZX01FTUJFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBub2RlIGlzIGFscmVhZHkgYSBtZW1iZXIgb2YgdGhlIGNsdXN0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTk9ERV9BTFJFQURZX01FTUJFUiA9IDUwNjU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTEFTVF9JTlRFUk5BTF9ORVRXT1JLXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIG5ldHdvcmsgaXMgdGhlIG9ubHkgb25lIGNvbmZpZ3VyZWQgZm9yIGludGVybmFsIGNsdXN0ZXIgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHR3byBvciBtb3JlIGFjdGl2ZSBjbHVzdGVyIG5vZGVzLiBUaGUgaW50ZXJuYWwgY29tbXVuaWNhdGlvbiBjYXBhYmlsaXR5IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlIG5ldHdvcmsuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTEFTVF9JTlRFUk5BTF9ORVRXT1JLID0gNTA2NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9ORVRXT1JLX0hBU19ERVBFTkRFTlRTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE9uZSBvciBtb3JlIGNsdXN0ZXIgcmVzb3VyY2VzIGRlcGVuZCBvbiB0aGUgbmV0d29yayB0byBwcm92aWRlIHNlcnZpY2UgdG8gY2xpZW50cy4gVGhlIGNsaWVudCBhY2Nlc3MgY2FwYWJpbGl0eSBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBuZXR3b3JrLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX05FVFdPUktfSEFTX0RFUEVOREVOVFMgPSA1MDY3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JTlZBTElEX09QRVJBVElPTl9PTl9RVU9SVU1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBvcGVyYXRpb24gY2Fubm90IGJlIHBlcmZvcm1lZCBvbiB0aGUgY2x1c3RlciByZXNvdXJjZSBhcyBpdCB0aGUgcXVvcnVtIHJlc291cmNlLiBZb3UgbWF5IG5vdCBicmluZyB0aGUgcXVvcnVtIHJlc291cmNlIG9mZmxpbmUgb3IgbW9kaWZ5IGl0cyBwb3NzaWJsZSBvd25lcnMgbGlzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSU5WQUxJRF9PUEVSQVRJT05fT05fUVVPUlVNID0gNTA2ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfREVQRU5ERU5DWV9OT1RfQUxMT1dFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBxdW9ydW0gcmVzb3VyY2UgaXMgbm90IGFsbG93ZWQgdG8gaGF2ZSBhbnkgZGVwZW5kZW5jaWVzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9ERVBFTkRFTkNZX05PVF9BTExPV0VEID0gNTA2OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9OT0RFX1BBVVNFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBub2RlIGlzIHBhdXNlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9OT0RFX1BBVVNFRCA9IDUwNzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX05PREVfQ0FOVF9IT1NUX1JFU09VUkNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIHJlc291cmNlIGNhbm5vdCBiZSBicm91Z2h0IG9ubGluZS4gVGhlIG93bmVyIG5vZGUgY2Fubm90IHJ1biB0aGlzIHJlc291cmNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT0RFX0NBTlRfSE9TVF9SRVNPVVJDRSA9IDUwNzE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTk9ERV9OT1RfUkVBRFlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbm9kZSBpcyBub3QgcmVhZHkgdG8gcGVyZm9ybSB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9OT0RFX05PVF9SRUFEWSA9IDUwNzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTk9ERV9TSFVUVElOR19ET1dOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIG5vZGUgaXMgc2h1dHRpbmcgZG93bi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9OT0RFX1NIVVRUSU5HX0RPV04gPSA1MDczO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX0pPSU5fQUJPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBqb2luIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9KT0lOX0FCT1JURUQgPSA1MDc0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX0lOQ09NUEFUSUJMRV9WRVJTSU9OU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2x1c3RlciBqb2luIG9wZXJhdGlvbiBmYWlsZWQgZHVlIHRvIGluY29tcGF0aWJsZSBzb2Z0d2FyZSB2ZXJzaW9ucyBiZXR3ZWVuIHRoZSBqb2luaW5nIG5vZGUgYW5kIGl0cyBzcG9uc29yLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX0lOQ09NUEFUSUJMRV9WRVJTSU9OUyA9IDUwNzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTUFYTlVNX09GX1JFU09VUkNFU19FWENFRURFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIHJlc291cmNlIGNhbm5vdCBiZSBjcmVhdGVkIGJlY2F1c2UgdGhlIGNsdXN0ZXIgaGFzIHJlYWNoZWQgdGhlIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGl0IGNhbiBtb25pdG9yLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX01BWE5VTV9PRl9SRVNPVVJDRVNfRVhDRUVERUQgPSA1MDc2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX1NZU1RFTV9DT05GSUdfQ0hBTkdFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gY2hhbmdlZCBkdXJpbmcgdGhlIGNsdXN0ZXIgam9pbiBvciBmb3JtIG9wZXJhdGlvbi4gVGhlIGpvaW4gb3IgZm9ybSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfU1lTVEVNX0NPTkZJR19DSEFOR0VEID0gNTA3NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9SRVNPVVJDRV9UWVBFX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHJlc291cmNlIHR5cGUgd2FzIG5vdCBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9SRVNPVVJDRV9UWVBFX05PVF9GT1VORCA9IDUwNzg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfUkVTVFlQRV9OT1RfU1VQUE9SVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgbm9kZSBkb2VzIG5vdCBzdXBwb3J0IGEgcmVzb3VyY2Ugb2YgdGhpcyB0eXBlLiAgVGhpcyBtYXkgYmUgZHVlIHRvIHZlcnNpb24gaW5jb25zaXN0ZW5jaWVzIG9yIGR1ZSB0byB0aGUgYWJzZW5jZSBvZiB0aGUgcmVzb3VyY2UgRExMIG9uIHRoaXMgbm9kZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9SRVNUWVBFX05PVF9TVVBQT1JURUQgPSA1MDc5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX1JFU05BTUVfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgbmFtZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVzb3VyY2UgRExMLiBUaGlzIG1heSBiZSBkdWUgdG8gYSBiYWQgKG9yIGNoYW5nZWQpIG5hbWUgc3VwcGxpZWQgdG8gdGhlIHJlc291cmNlIERMTC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9SRVNOQU1FX05PVF9GT1VORCA9IDUwODA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTk9fUlBDX1BBQ0tBR0VTX1JFR0lTVEVSRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gYXV0aGVudGljYXRpb24gcGFja2FnZSBjb3VsZCBiZSByZWdpc3RlcmVkIHdpdGggdGhlIFJQQyBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTk9fUlBDX1BBQ0tBR0VTX1JFR0lTVEVSRUQgPSA1MDgxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX09XTkVSX05PVF9JTl9QUkVGTElTVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBZb3UgY2Fubm90IGJyaW5nIHRoZSBncm91cCBvbmxpbmUgYmVjYXVzZSB0aGUgb3duZXIgb2YgdGhlIGdyb3VwIGlzIG5vdCBpbiB0aGUgcHJlZmVycmVkIGxpc3QgZm9yIHRoZSBncm91cC4gVG8gY2hhbmdlIHRoZSBvd25lciBub2RlIGZvciB0aGUgZ3JvdXAsIG1vdmUgdGhlIGdyb3VwLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX09XTkVSX05PVF9JTl9QUkVGTElTVCA9IDUwODI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfREFUQUJBU0VfU0VRTUlTTUFUQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGpvaW4gb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBjbHVzdGVyIGRhdGFiYXNlIHNlcXVlbmNlIG51bWJlciBoYXMgY2hhbmdlZCBvciBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgbG9ja2VyIG5vZGUuIFRoaXMgbWF5IGhhcHBlbiBkdXJpbmcgYSBqb2luIG9wZXJhdGlvbiBpZiB0aGUgY2x1c3RlciBkYXRhYmFzZSB3YXMgY2hhbmdpbmcgZHVyaW5nIHRoZSBqb2luLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX0RBVEFCQVNFX1NFUU1JU01BVENIID0gNTA4MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUkVTTU9OX0lOVkFMSURfU1RBVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlc291cmNlIG1vbml0b3Igd2lsbCBub3QgYWxsb3cgdGhlIGZhaWwgb3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZCB3aGlsZSB0aGUgcmVzb3VyY2UgaXMgaW4gaXRzIGN1cnJlbnQgc3RhdGUuIFRoaXMgbWF5IGhhcHBlbiBpZiB0aGUgcmVzb3VyY2UgaXMgaW4gYSBwZW5kaW5nIHN0YXRlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNNT05fSU5WQUxJRF9TVEFURSA9IDUwODQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfR1VNX05PVF9MT0NLRVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBub24gbG9ja2VyIGNvZGUgZ290IGEgcmVxdWVzdCB0byByZXNlcnZlIHRoZSBsb2NrIGZvciBtYWtpbmcgZ2xvYmFsIHVwZGF0ZXMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfR1VNX05PVF9MT0NLRVIgPSA1MDg1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9RVU9SVU1fRElTS19OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHF1b3J1bSBkaXNrIGNvdWxkIG5vdCBiZSBsb2NhdGVkIGJ5IHRoZSBjbHVzdGVyIHNlcnZpY2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1FVT1JVTV9ESVNLX05PVF9GT1VORCA9IDUwODY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RBVEFCQVNFX0JBQ0tVUF9DT1JSVVBUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBiYWNrZWQgdXAgY2x1c3RlciBkYXRhYmFzZSBpcyBwb3NzaWJseSBjb3JydXB0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EQVRBQkFTRV9CQUNLVVBfQ09SUlVQVCA9IDUwODc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfTk9ERV9BTFJFQURZX0hBU19ERlNfUk9PVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIERGUyByb290IGFscmVhZHkgZXhpc3RzIGluIHRoaXMgY2x1c3RlciBub2RlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX05PREVfQUxSRUFEWV9IQVNfREZTX1JPT1QgPSA1MDg4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9SRVNPVVJDRV9QUk9QRVJUWV9VTkNIQU5HRUFCTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB0byBtb2RpZnkgYSByZXNvdXJjZSBwcm9wZXJ0eSBmYWlsZWQgYmVjYXVzZSBpdCBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIHByb3BlcnR5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9SRVNPVVJDRV9QUk9QRVJUWV9VTkNIQU5HRUFCTEUgPSA1MDg5O1xuXG4vKlxuIENvZGVzIGZyb20gNDMwMCB0aHJvdWdoIDU4ODkgb3ZlcmxhcCB3aXRoIGNvZGVzIGluIGRzXFxwdWJsaXNoZWRcXGluY1xcYXBwZXJyMi53LlxuIERvIG5vdCBhZGQgYW55IG1vcmUgZXJyb3IgY29kZXMgaW4gdGhhdCByYW5nZS5cbiovXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX01FTUJFUlNISVBfSU5WQUxJRF9TVEFURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCB0aGF0IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IG1lbWJlcnNoaXAgc3RhdGUgb2YgdGhlIG5vZGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTUVNQkVSU0hJUF9JTlZBTElEX1NUQVRFID0gNTg5MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9RVU9SVU1MT0dfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBxdW9ydW0gcmVzb3VyY2UgZG9lcyBub3QgY29udGFpbiB0aGUgcXVvcnVtIGxvZy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9RVU9SVU1MT0dfTk9UX0ZPVU5EID0gNTg5MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9NRU1CRVJTSElQX0hBTFRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1lbWJlcnNoaXAgZW5naW5lIHJlcXVlc3RlZCBzaHV0ZG93biBvZiB0aGUgY2x1c3RlciBzZXJ2aWNlIG9uIHRoaXMgbm9kZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9NRU1CRVJTSElQX0hBTFQgPSA1ODkyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX0lOU1RBTkNFX0lEX01JU01BVENIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBqb2luIG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgY2x1c3RlciBpbnN0YW5jZSBJRCBvZiB0aGUgam9pbmluZyBub2RlIGRvZXMgbm90IG1hdGNoIHRoZSBjbHVzdGVyIGluc3RhbmNlIElEIG9mIHRoZSBzcG9uc29yIG5vZGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfSU5TVEFOQ0VfSURfTUlTTUFUQ0ggPSA1ODkzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX05FVFdPUktfTk9UX0ZPVU5EX0ZPUl9JUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIG1hdGNoaW5nIG5ldHdvcmsgZm9yIHRoZSBzcGVjaWZpZWQgSVAgYWRkcmVzcyBjb3VsZCBub3QgYmUgZm91bmQuIFBsZWFzZSBhbHNvIHNwZWNpZnkgYSBzdWJuZXQgbWFzayBhbmQgYSBjbHVzdGVyIG5ldHdvcmsuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfTkVUV09SS19OT1RfRk9VTkRfRk9SX0lQID0gNTg5NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9QUk9QRVJUWV9EQVRBX1RZUEVfTUlTTUFUQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGFjdHVhbCBkYXRhIHR5cGUgb2YgdGhlIHByb3BlcnR5IGRpZCBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBvZiB0aGUgcHJvcGVydHkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfUFJPUEVSVFlfREFUQV9UWVBFX01JU01BVENIID0gNTg5NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9FVklDVF9XSVRIT1VUX0NMRUFOVVBcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgbm9kZSB3YXMgZXZpY3RlZCBmcm9tIHRoZSBjbHVzdGVyIHN1Y2Nlc3NmdWxseSwgYnV0IHRoZSBub2RlIHdhcyBub3QgY2xlYW5lZCB1cC4gIEV4dGVuZGVkIHN0YXR1cyBpbmZvcm1hdGlvbiBleHBsYWluaW5nIHdoeSB0aGUgbm9kZSB3YXMgbm90IGNsZWFuZWQgdXAgaXMgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX0VWSUNUX1dJVEhPVVRfQ0xFQU5VUCA9IDU4OTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfUEFSQU1FVEVSX01JU01BVENIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFR3byBvciBtb3JlIHBhcmFtZXRlciB2YWx1ZXMgc3BlY2lmaWVkIGZvciBhIHJlc291cmNlJ3MgcHJvcGVydGllcyBhcmUgaW4gY29uZmxpY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfUEFSQU1FVEVSX01JU01BVENIID0gNTg5NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9ERV9DQU5OT1RfQkVfQ0xVU1RFUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgY29tcHV0ZXIgY2Fubm90IGJlIG1hZGUgYSBtZW1iZXIgb2YgYSBjbHVzdGVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT0RFX0NBTk5PVF9CRV9DTFVTVEVSRUQgPSA1ODk4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTVEVSX1dST05HX09TX1ZFUlNJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBjb21wdXRlciBjYW5ub3QgYmUgbWFkZSBhIG1lbWJlciBvZiBhIGNsdXN0ZXIgYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIHRoZSBjb3JyZWN0IHZlcnNpb24gb2YgV2luZG93cyBpbnN0YWxsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NMVVNURVJfV1JPTkdfT1NfVkVSU0lPTiA9IDU4OTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfQ0FOVF9DUkVBVEVfRFVQX0NMVVNURVJfTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGNsdXN0ZXIgY2Fubm90IGJlIGNyZWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGNsdXN0ZXIgbmFtZSBiZWNhdXNlIHRoYXQgY2x1c3RlciBuYW1lIGlzIGFscmVhZHkgaW4gdXNlLiBTcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBjbHVzdGVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX0NBTlRfQ1JFQVRFX0RVUF9DTFVTVEVSX05BTUUgPSA1OTAwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DTFVTQ0ZHX0FMUkVBRFlfQ09NTUlUVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbHVzdGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY29tbWl0dGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTQ0ZHX0FMUkVBRFlfQ09NTUlUVEVEID0gNTkwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU0NGR19ST0xMQkFDS19GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNsdXN0ZXIgY29uZmlndXJhdGlvbiBhY3Rpb24gY291bGQgbm90IGJlIHJvbGxlZCBiYWNrLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTQ0ZHX1JPTExCQUNLX0ZBSUxFRCA9IDU5MDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNDRkdfU1lTVEVNX0RJU0tfRFJJVkVfTEVUVEVSX0NPTkZMSUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkcml2ZSBsZXR0ZXIgYXNzaWduZWQgdG8gYSBzeXN0ZW0gZGlzayBvbiBvbmUgbm9kZSBjb25mbGljdGVkIHdpdGggdGhlIGRyaXZlIGxldHRlciBhc3NpZ25lZCB0byBhIGRpc2sgb24gYW5vdGhlciBub2RlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTQ0ZHX1NZU1RFTV9ESVNLX0RSSVZFX0xFVFRFUl9DT05GTElDVCA9IDU5MDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NMVVNURVJfT0xEX1ZFUlNJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgT25lIG9yIG1vcmUgbm9kZXMgaW4gdGhlIGNsdXN0ZXIgYXJlIHJ1bm5pbmcgYSB2ZXJzaW9uIG9mIFdpbmRvd3MgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DTFVTVEVSX09MRF9WRVJTSU9OID0gNTkwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ0xVU1RFUl9NSVNNQVRDSEVEX0NPTVBVVEVSX0FDQ1RfTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBjb21wdXRlciBhY2NvdW50IGRvZXNuJ3QgbWF0Y2ggdGhlIE5ldHdvcmsgTmFtZSBmb3IgdGhpcyByZXNvdXJjZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ0xVU1RFUl9NSVNNQVRDSEVEX0NPTVBVVEVSX0FDQ1RfTkFNRSA9IDU5MDU7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgICAgRUZTIEVycm9yIENvZGVzICAgICAgICAgICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9FTkNSWVBUSU9OX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGZpbGUgY291bGQgbm90IGJlIGVuY3J5cHRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRU5DUllQVElPTl9GQUlMRUQgPSA2MDAwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9ERUNSWVBUSU9OX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGZpbGUgY291bGQgbm90IGJlIGRlY3J5cHRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfREVDUllQVElPTl9GQUlMRUQgPSA2MDAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9GSUxFX0VOQ1JZUFRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGZpbGUgaXMgZW5jcnlwdGVkIGFuZCB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHRoZSBhYmlsaXR5IHRvIGRlY3J5cHQgaXQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0ZJTEVfRU5DUllQVEVEID0gNjAwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fUkVDT1ZFUllfUE9MSUNZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZXJlIGlzIG5vIHZhbGlkIGVuY3J5cHRpb24gcmVjb3ZlcnkgcG9saWN5IGNvbmZpZ3VyZWQgZm9yIHRoaXMgc3lzdGVtLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19SRUNPVkVSWV9QT0xJQ1kgPSA2MDAzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19FRlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVpcmVkIGVuY3J5cHRpb24gZHJpdmVyIGlzIG5vdCBsb2FkZWQgZm9yIHRoaXMgc3lzdGVtLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19FRlMgPSA2MDA0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9XUk9OR19FRlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZpbGUgd2FzIGVuY3J5cHRlZCB3aXRoIGEgZGlmZmVyZW50IGVuY3J5cHRpb24gZHJpdmVyIHRoYW4gaXMgY3VycmVudGx5IGxvYWRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfV1JPTkdfRUZTID0gNjAwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fVVNFUl9LRVlTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZXJlIGFyZSBubyBFRlMga2V5cyBkZWZpbmVkIGZvciB0aGUgdXNlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fVVNFUl9LRVlTID0gNjAwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRklMRV9OT1RfRU5DUllQVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgZmlsZSBpcyBub3QgZW5jcnlwdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9GSUxFX05PVF9FTkNSWVBURUQgPSA2MDA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT1RfRVhQT1JUX0ZPUk1BVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGZpbGUgaXMgbm90IGluIHRoZSBkZWZpbmVkIEVGUyBleHBvcnQgZm9ybWF0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT1RfRVhQT1JUX0ZPUk1BVCA9IDYwMDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0ZJTEVfUkVBRF9PTkxZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgZmlsZSBpcyByZWFkIG9ubHkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0ZJTEVfUkVBRF9PTkxZID0gNjAwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRElSX0VGU19ESVNBTExPV0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkaXJlY3RvcnkgaGFzIGJlZW4gZGlzYWJsZWQgZm9yIGVuY3J5cHRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RJUl9FRlNfRElTQUxMT1dFRCA9IDYwMTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0VGU19TRVJWRVJfTk9UX1RSVVNURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZlciBpcyBub3QgdHJ1c3RlZCBmb3IgcmVtb3RlIGVuY3J5cHRpb24gb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9FRlNfU0VSVkVSX05PVF9UUlVTVEVEID0gNjAxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQkFEX1JFQ09WRVJZX1BPTElDWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBSZWNvdmVyeSBwb2xpY3kgY29uZmlndXJlZCBmb3IgdGhpcyBzeXN0ZW0gY29udGFpbnMgaW52YWxpZCByZWNvdmVyeSBjZXJ0aWZpY2F0ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQkFEX1JFQ09WRVJZX1BPTElDWSA9IDYwMTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0VGU19BTEdfQkxPQl9UT09fQklHXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSB1c2VkIG9uIHRoZSBzb3VyY2UgZmlsZSBuZWVkcyBhIGJpZ2dlciBrZXkgYnVmZmVyIHRoYW4gdGhlIG9uZSBvbiB0aGUgZGVzdGluYXRpb24gZmlsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRUZTX0FMR19CTE9CX1RPT19CSUcgPSA2MDEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9WT0xVTUVfTk9UX1NVUFBPUlRfRUZTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkaXNrIHBhcnRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgZW5jcnlwdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfVk9MVU1FX05PVF9TVVBQT1JUX0VGUyA9IDYwMTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0VGU19ESVNBQkxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIG1hY2hpbmUgaXMgZGlzYWJsZWQgZm9yIGZpbGUgZW5jcnlwdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRUZTX0RJU0FCTEVEID0gNjAxNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRUZTX1ZFUlNJT05fTk9UX1NVUFBPUlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBuZXdlciBzeXN0ZW0gaXMgcmVxdWlyZWQgdG8gZGVjcnlwdCB0aGlzIGVuY3J5cHRlZCBmaWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9FRlNfVkVSU0lPTl9OT1RfU1VQUE9SVCA9IDYwMTY7XG5cbi8vIFRoaXMgbWVzc2FnZSBudW1iZXIgaXMgZm9yIGhpc3RvcmljYWwgcHVycG9zZXMgYW5kIGNhbm5vdCBiZSBjaGFuZ2VkIG9yIHJlLXVzZWQuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT19CUk9XU0VSX1NFUlZFUlNfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGxpc3Qgb2Ygc2VydmVycyBmb3IgdGhpcyB3b3JrZ3JvdXAgaXMgbm90IGN1cnJlbnRseSBhdmFpbGFibGVcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9fQlJPV1NFUl9TRVJWRVJTX0ZPVU5EID0gNjExODtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vIFRhc2sgU2NoZWR1bGVyIEVycm9yIENvZGVzIHRoYXQgTkVUIFNUQVJUIG11c3QgdW5kZXJzdGFuZCAgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vXG4vLyBNZXNzYWdlSWQ6IFNDSEVEX0VfU0VSVklDRV9OT1RfTE9DQUxTWVNURU1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIFRhc2sgU2NoZWR1bGVyIHNlcnZpY2UgbXVzdCBiZSBjb25maWd1cmVkIHRvIHJ1biBpbiB0aGUgU3lzdGVtIGFjY291bnQgdG8gZnVuY3Rpb24gcHJvcGVybHkuICBJbmRpdmlkdWFsIHRhc2tzIG1heSBiZSBjb25maWd1cmVkIHRvIHJ1biBpbiBvdGhlciBhY2NvdW50cy5cbi8vXG5leHBvcnQgY29uc3QgU0NIRURfRV9TRVJWSUNFX05PVF9MT0NBTFNZU1RFTSA9IDYyMDA7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyBUZXJtaW5hbCBTZXJ2ZXIgRXJyb3IgQ29kZXMgICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfV0lOU1RBVElPTl9OQU1FX0lOVkFMSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBzZXNzaW9uIG5hbWUgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1RYX1dJTlNUQVRJT05fTkFNRV9JTlZBTElEID0gNzAwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX0lOVkFMSURfUERcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBwcm90b2NvbCBkcml2ZXIgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1RYX0lOVkFMSURfUEQgPSA3MDAyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfUERfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcHJvdG9jb2wgZHJpdmVyIHdhcyBub3QgZm91bmQgaW4gdGhlIHN5c3RlbSBwYXRoLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfUERfTk9UX0ZPVU5EID0gNzAwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX1dEX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHRlcm1pbmFsIGNvbm5lY3Rpb24gZHJpdmVyIHdhcyBub3QgZm91bmQgaW4gdGhlIHN5c3RlbSBwYXRoLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfV0RfTk9UX0ZPVU5EID0gNzAwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX0NBTk5PVF9NQUtFX0VWRU5UTE9HX0VOVFJZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgcmVnaXN0cnkga2V5IGZvciBldmVudCBsb2dnaW5nIGNvdWxkIG5vdCBiZSBjcmVhdGVkIGZvciB0aGlzIHNlc3Npb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9DQU5OT1RfTUFLRV9FVkVOVExPR19FTlRSWSA9IDcwMDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NUWF9TRVJWSUNFX05BTUVfQ09MTElTSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgc2VydmljZSB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgb24gdGhlIHN5c3RlbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1RYX1NFUlZJQ0VfTkFNRV9DT0xMSVNJT04gPSA3MDA2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfQ0xPU0VfUEVORElOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGNsb3NlIG9wZXJhdGlvbiBpcyBwZW5kaW5nIG9uIHRoZSBzZXNzaW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfQ0xPU0VfUEVORElORyA9IDcwMDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NUWF9OT19PVVRCVUZcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgYXJlIG5vIGZyZWUgb3V0cHV0IGJ1ZmZlcnMgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfTk9fT1VUQlVGID0gNzAwODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX01PREVNX0lORl9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIE1PREVNLklORiBmaWxlIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9NT0RFTV9JTkZfTk9UX0ZPVU5EID0gNzAwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX0lOVkFMSURfTU9ERU1OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBtb2RlbSBuYW1lIHdhcyBub3QgZm91bmQgaW4gTU9ERU0uSU5GLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfSU5WQUxJRF9NT0RFTU5BTUUgPSA3MDEwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfTU9ERU1fUkVTUE9OU0VfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1vZGVtIGRpZCBub3QgYWNjZXB0IHRoZSBjb21tYW5kIHNlbnQgdG8gaXQuIFZlcmlmeSB0aGF0IHRoZSBjb25maWd1cmVkIG1vZGVtIG5hbWUgbWF0Y2hlcyB0aGUgYXR0YWNoZWQgbW9kZW0uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9NT0RFTV9SRVNQT05TRV9FUlJPUiA9IDcwMTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NUWF9NT0RFTV9SRVNQT05TRV9USU1FT1VUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBtb2RlbSBkaWQgbm90IHJlc3BvbmQgdG8gdGhlIGNvbW1hbmQgc2VudCB0byBpdC4gVmVyaWZ5IHRoYXQgdGhlIG1vZGVtIGlzIHByb3Blcmx5IGNhYmxlZCBhbmQgcG93ZXJlZCBvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1RYX01PREVNX1JFU1BPTlNFX1RJTUVPVVQgPSA3MDEyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfTU9ERU1fUkVTUE9OU0VfTk9fQ0FSUklFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYXJyaWVyIGRldGVjdCBoYXMgZmFpbGVkIG9yIGNhcnJpZXIgaGFzIGJlZW4gZHJvcHBlZCBkdWUgdG8gZGlzY29ubmVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1RYX01PREVNX1JFU1BPTlNFX05PX0NBUlJJRVIgPSA3MDEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfTU9ERU1fUkVTUE9OU0VfTk9fRElBTFRPTkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRGlhbCB0b25lIG5vdCBkZXRlY3RlZCB3aXRoaW4gdGhlIHJlcXVpcmVkIHRpbWUuIFZlcmlmeSB0aGF0IHRoZSBwaG9uZSBjYWJsZSBpcyBwcm9wZXJseSBhdHRhY2hlZCBhbmQgZnVuY3Rpb25hbC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1RYX01PREVNX1JFU1BPTlNFX05PX0RJQUxUT05FID0gNzAxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX01PREVNX1JFU1BPTlNFX0JVU1lcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQnVzeSBzaWduYWwgZGV0ZWN0ZWQgYXQgcmVtb3RlIHNpdGUgb24gY2FsbGJhY2suXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9NT0RFTV9SRVNQT05TRV9CVVNZID0gNzAxNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX01PREVNX1JFU1BPTlNFX1ZPSUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFZvaWNlIGRldGVjdGVkIGF0IHJlbW90ZSBzaXRlIG9uIGNhbGxiYWNrLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfTU9ERU1fUkVTUE9OU0VfVk9JQ0UgPSA3MDE2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfVERfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVHJhbnNwb3J0IGRyaXZlciBlcnJvclxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfVERfRVJST1IgPSA3MDE3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfV0lOU1RBVElPTl9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBzZXNzaW9uIGNhbm5vdCBiZSBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1RYX1dJTlNUQVRJT05fTk9UX0ZPVU5EID0gNzAyMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX1dJTlNUQVRJT05fQUxSRUFEWV9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBzZXNzaW9uIG5hbWUgaXMgYWxyZWFkeSBpbiB1c2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9XSU5TVEFUSU9OX0FMUkVBRFlfRVhJU1RTID0gNzAyMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX1dJTlNUQVRJT05fQlVTWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBjYW5ub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIHRlcm1pbmFsIGNvbm5lY3Rpb24gaXMgY3VycmVudGx5IGJ1c3kgcHJvY2Vzc2luZyBhIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHJlc2V0LCBvciBkZWxldGUgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfV0lOU1RBVElPTl9CVVNZID0gNzAyNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX0JBRF9WSURFT19NT0RFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBjb25uZWN0IHRvIGEgc2Vzc2lvbiB3aG9zZSB2aWRlbyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgY2xpZW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfQkFEX1ZJREVPX01PREUgPSA3MDI1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfR1JBUEhJQ1NfSU5WQUxJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYXBwbGljYXRpb24gYXR0ZW1wdGVkIHRvIGVuYWJsZSBET1MgZ3JhcGhpY3MgbW9kZS5cbi8vICBET1MgZ3JhcGhpY3MgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfR1JBUEhJQ1NfSU5WQUxJRCA9IDcwMzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NUWF9MT0dPTl9ESVNBQkxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBZb3VyIGludGVyYWN0aXZlIGxvZ29uIHByaXZpbGVnZSBoYXMgYmVlbiBkaXNhYmxlZC5cbi8vICBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9MT0dPTl9ESVNBQkxFRCA9IDcwMzc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NUWF9OT1RfQ09OU09MRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBjYW4gYmUgcGVyZm9ybWVkIG9ubHkgb24gdGhlIHN5c3RlbSBjb25zb2xlLlxuLy8gIFRoaXMgaXMgbW9zdCBvZnRlbiB0aGUgcmVzdWx0IG9mIGEgZHJpdmVyIG9yIHN5c3RlbSBETEwgcmVxdWlyaW5nIGRpcmVjdCBjb25zb2xlIGFjY2Vzcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1RYX05PVF9DT05TT0xFID0gNzAzODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX0NMSUVOVF9RVUVSWV9USU1FT1VUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbGllbnQgZmFpbGVkIHRvIHJlc3BvbmQgdG8gdGhlIHNlcnZlciBjb25uZWN0IG1lc3NhZ2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9DTElFTlRfUVVFUllfVElNRU9VVCA9IDcwNDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NUWF9DT05TT0xFX0RJU0NPTk5FQ1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRGlzY29ubmVjdGluZyB0aGUgY29uc29sZSBzZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9DT05TT0xFX0RJU0NPTk5FQ1QgPSA3MDQxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfQ09OU09MRV9DT05ORUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFJlY29ubmVjdGluZyBhIGRpc2Nvbm5lY3RlZCBzZXNzaW9uIHRvIHRoZSBjb25zb2xlIGlzIG5vdCBzdXBwb3J0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9DT05TT0xFX0NPTk5FQ1QgPSA3MDQyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfU0hBRE9XX0RFTklFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdCB0byBjb250cm9sIGFub3RoZXIgc2Vzc2lvbiByZW1vdGVseSB3YXMgZGVuaWVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfU0hBRE9XX0RFTklFRCA9IDcwNDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NUWF9XSU5TVEFUSU9OX0FDQ0VTU19ERU5JRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBzZXNzaW9uIGFjY2VzcyBpcyBkZW5pZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9XSU5TVEFUSU9OX0FDQ0VTU19ERU5JRUQgPSA3MDQ1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfSU5WQUxJRF9XRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHRlcm1pbmFsIGNvbm5lY3Rpb24gZHJpdmVyIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9JTlZBTElEX1dEID0gNzA0OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX1NIQURPV19JTlZBTElEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgc2Vzc2lvbiBjYW5ub3QgYmUgY29udHJvbGxlZCByZW1vdGVseS5cbi8vICBUaGlzIG1heSBiZSBiZWNhdXNlIHRoZSBzZXNzaW9uIGlzIGRpc2Nvbm5lY3RlZCBvciBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhIHVzZXIgbG9nZ2VkIG9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfU0hBRE9XX0lOVkFMSUQgPSA3MDUwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfU0hBRE9XX0RJU0FCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgc2Vzc2lvbiBpcyBub3QgY29uZmlndXJlZCB0byBhbGxvdyByZW1vdGUgY29udHJvbC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1RYX1NIQURPV19ESVNBQkxFRCA9IDcwNTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0NUWF9DTElFTlRfTElDRU5TRV9JTl9VU0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgWW91ciByZXF1ZXN0IHRvIGNvbm5lY3QgdG8gdGhpcyBUZXJtaW5hbCBTZXJ2ZXIgaGFzIGJlZW4gcmVqZWN0ZWQuIFlvdXIgVGVybWluYWwgU2VydmVyIGNsaWVudCBsaWNlbnNlIG51bWJlciBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZCBieSBhbm90aGVyIHVzZXIuXG4vLyAgUGxlYXNlIGNhbGwgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byBvYnRhaW4gYSB1bmlxdWUgbGljZW5zZSBudW1iZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9DTElFTlRfTElDRU5TRV9JTl9VU0UgPSA3MDUyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfQ0xJRU5UX0xJQ0VOU0VfTk9UX1NFVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBZb3VyIHJlcXVlc3QgdG8gY29ubmVjdCB0byB0aGlzIFRlcm1pbmFsIFNlcnZlciBoYXMgYmVlbiByZWplY3RlZC4gWW91ciBUZXJtaW5hbCBTZXJ2ZXIgY2xpZW50IGxpY2Vuc2UgbnVtYmVyIGhhcyBub3QgYmVlbiBlbnRlcmVkIGZvciB0aGlzIGNvcHkgb2YgdGhlIFRlcm1pbmFsIFNlcnZlciBjbGllbnQuXG4vLyAgUGxlYXNlIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQ1RYX0NMSUVOVF9MSUNFTlNFX05PVF9TRVQgPSA3MDUzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfTElDRU5TRV9OT1RfQVZBSUxBQkxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gaGFzIHJlYWNoZWQgaXRzIGxpY2Vuc2VkIGxvZ29uIGxpbWl0LlxuLy8gIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9MSUNFTlNFX05PVF9BVkFJTEFCTEUgPSA3MDU0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfTElDRU5TRV9DTElFTlRfSU5WQUxJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2xpZW50IHlvdSBhcmUgdXNpbmcgaXMgbm90IGxpY2Vuc2VkIHRvIHVzZSB0aGlzIHN5c3RlbS4gIFlvdXIgbG9nb24gcmVxdWVzdCBpcyBkZW5pZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9MSUNFTlNFX0NMSUVOVF9JTlZBTElEID0gNzA1NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX0xJQ0VOU0VfRVhQSVJFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3lzdGVtIGxpY2Vuc2UgaGFzIGV4cGlyZWQuICBZb3VyIGxvZ29uIHJlcXVlc3QgaXMgZGVuaWVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9DVFhfTElDRU5TRV9FWFBJUkVEID0gNzA1NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfQ1RYX1NIQURPV19OT1RfUlVOTklOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBSZW1vdGUgY29udHJvbCBjb3VsZCBub3QgYmUgdGVybWluYXRlZCBiZWNhdXNlIHRoZSBzcGVjaWZpZWQgc2Vzc2lvbiBpcyBub3QgY3VycmVudGx5IGJlaW5nIHJlbW90ZWx5IGNvbnRyb2xsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9TSEFET1dfTk9UX1JVTk5JTkcgPSA3MDU3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9DVFhfU0hBRE9XX0VOREVEX0JZX01PREVfQ0hBTkdFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZW1vdGUgY29udHJvbCBvZiB0aGUgY29uc29sZSB3YXMgdGVybWluYXRlZCBiZWNhdXNlIHRoZSBkaXNwbGF5IG1vZGUgd2FzIGNoYW5nZWQuIENoYW5naW5nIHRoZSBkaXNwbGF5IG1vZGUgaW4gYSByZW1vdGUgY29udHJvbCBzZXNzaW9uIGlzIG5vdCBzdXBwb3J0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0NUWF9TSEFET1dfRU5ERURfQllfTU9ERV9DSEFOR0UgPSA3MDU4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9BQ1RJVkFUSU9OX0NPVU5UX0VYQ0VFREVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFjdGl2YXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgZm9yIHRoaXMgaW5zdGFsbGF0aW9uLiBZb3VyIGFjdGl2YXRpb24gdGltZXIgd2lsbCBub3QgYmUgY2xlYXJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfQUNUSVZBVElPTl9DT1VOVF9FWENFRURFRCA9IDcwNTk7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXG4vLyAgICAgICAgICAgICBUcmFmZmljIENvbnRyb2wgRXJyb3IgQ29kZXMgICAgICAgIC9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1xuLy8gICAgICAgICAgICAgICAgICA3NTAwIHRvICA3OTk5ICAgICAgICAgICAgICAgICAvXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9cbi8vICAgICAgICAgZGVmaW5lZCBpbjogdGNlcnJvci5oICAgICAgICAgICAgICAgICAgL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1xuLy8gICAgICAgICAgICAgQWN0aXZlIERpcmVjdG9yeSBFcnJvciBDb2RlcyAgICAgICAvXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9cbi8vICAgICAgICAgICAgICAgICAgODAwMCB0byAgODk5OSAgICAgICAgICAgICAgICAgL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAqKioqKioqKioqKioqKioqKlxuLy8gRkFDSUxJVFlfRklMRV9SRVBMSUNBVElPTl9TRVJWSUNFXG4vLyAqKioqKioqKioqKioqKioqKlxuLy9cbi8vIE1lc3NhZ2VJZDogRlJTX0VSUl9JTlZBTElEX0FQSV9TRVFVRU5DRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZSByZXBsaWNhdGlvbiBzZXJ2aWNlIEFQSSB3YXMgY2FsbGVkIGluY29ycmVjdGx5LlxuLy9cbmV4cG9ydCBjb25zdCBGUlNfRVJSX0lOVkFMSURfQVBJX1NFUVVFTkNFID0gODAwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRlJTX0VSUl9TVEFSVElOR19TRVJWSUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIHJlcGxpY2F0aW9uIHNlcnZpY2UgY2Fubm90IGJlIHN0YXJ0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEZSU19FUlJfU1RBUlRJTkdfU0VSVklDRSA9IDgwMDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEZSU19FUlJfU1RPUFBJTkdfU0VSVklDRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZSByZXBsaWNhdGlvbiBzZXJ2aWNlIGNhbm5vdCBiZSBzdG9wcGVkLlxuLy9cbmV4cG9ydCBjb25zdCBGUlNfRVJSX1NUT1BQSU5HX1NFUlZJQ0UgPSA4MDAzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBGUlNfRVJSX0lOVEVSTkFMX0FQSVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZSByZXBsaWNhdGlvbiBzZXJ2aWNlIEFQSSB0ZXJtaW5hdGVkIHRoZSByZXF1ZXN0LlxuLy8gIFRoZSBldmVudCBsb2cgbWF5IGhhdmUgbW9yZSBpbmZvcm1hdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRlJTX0VSUl9JTlRFUk5BTF9BUEkgPSA4MDA0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBGUlNfRVJSX0lOVEVSTkFMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIHJlcGxpY2F0aW9uIHNlcnZpY2UgdGVybWluYXRlZCB0aGUgcmVxdWVzdC5cbi8vICBUaGUgZXZlbnQgbG9nIG1heSBoYXZlIG1vcmUgaW5mb3JtYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEZSU19FUlJfSU5URVJOQUwgPSA4MDA1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBGUlNfRVJSX1NFUlZJQ0VfQ09NTVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZSByZXBsaWNhdGlvbiBzZXJ2aWNlIGNhbm5vdCBiZSBjb250YWN0ZWQuXG4vLyAgVGhlIGV2ZW50IGxvZyBtYXkgaGF2ZSBtb3JlIGluZm9ybWF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBGUlNfRVJSX1NFUlZJQ0VfQ09NTSA9IDgwMDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEZSU19FUlJfSU5TVUZGSUNJRU5UX1BSSVZcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZpbGUgcmVwbGljYXRpb24gc2VydmljZSBjYW5ub3Qgc2F0aXNmeSB0aGUgcmVxdWVzdCBiZWNhdXNlIHRoZSB1c2VyIGhhcyBpbnN1ZmZpY2llbnQgcHJpdmlsZWdlcy5cbi8vICBUaGUgZXZlbnQgbG9nIG1heSBoYXZlIG1vcmUgaW5mb3JtYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEZSU19FUlJfSU5TVUZGSUNJRU5UX1BSSVYgPSA4MDA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBGUlNfRVJSX0FVVEhFTlRJQ0FUSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIHJlcGxpY2F0aW9uIHNlcnZpY2UgY2Fubm90IHNhdGlzZnkgdGhlIHJlcXVlc3QgYmVjYXVzZSBhdXRoZW50aWNhdGVkIFJQQyBpcyBub3QgYXZhaWxhYmxlLlxuLy8gIFRoZSBldmVudCBsb2cgbWF5IGhhdmUgbW9yZSBpbmZvcm1hdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRlJTX0VSUl9BVVRIRU5USUNBVElPTiA9IDgwMDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEZSU19FUlJfUEFSRU5UX0lOU1VGRklDSUVOVF9QUklWXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIHJlcGxpY2F0aW9uIHNlcnZpY2UgY2Fubm90IHNhdGlzZnkgdGhlIHJlcXVlc3QgYmVjYXVzZSB0aGUgdXNlciBoYXMgaW5zdWZmaWNpZW50IHByaXZpbGVnZXMgb24gdGhlIGRvbWFpbiBjb250cm9sbGVyLlxuLy8gIFRoZSBldmVudCBsb2cgbWF5IGhhdmUgbW9yZSBpbmZvcm1hdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRlJTX0VSUl9QQVJFTlRfSU5TVUZGSUNJRU5UX1BSSVYgPSA4MDA5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBGUlNfRVJSX1BBUkVOVF9BVVRIRU5USUNBVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZSByZXBsaWNhdGlvbiBzZXJ2aWNlIGNhbm5vdCBzYXRpc2Z5IHRoZSByZXF1ZXN0IGJlY2F1c2UgYXV0aGVudGljYXRlZCBSUEMgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgZG9tYWluIGNvbnRyb2xsZXIuXG4vLyAgVGhlIGV2ZW50IGxvZyBtYXkgaGF2ZSBtb3JlIGluZm9ybWF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBGUlNfRVJSX1BBUkVOVF9BVVRIRU5USUNBVElPTiA9IDgwMTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEZSU19FUlJfQ0hJTERfVE9fUEFSRU5UX0NPTU1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZpbGUgcmVwbGljYXRpb24gc2VydmljZSBjYW5ub3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlsZSByZXBsaWNhdGlvbiBzZXJ2aWNlIG9uIHRoZSBkb21haW4gY29udHJvbGxlci5cbi8vICBUaGUgZXZlbnQgbG9nIG1heSBoYXZlIG1vcmUgaW5mb3JtYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEZSU19FUlJfQ0hJTERfVE9fUEFSRU5UX0NPTU0gPSA4MDExO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBGUlNfRVJSX1BBUkVOVF9UT19DSElMRF9DT01NXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIHJlcGxpY2F0aW9uIHNlcnZpY2Ugb24gdGhlIGRvbWFpbiBjb250cm9sbGVyIGNhbm5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBmaWxlIHJlcGxpY2F0aW9uIHNlcnZpY2Ugb24gdGhpcyBjb21wdXRlci5cbi8vICBUaGUgZXZlbnQgbG9nIG1heSBoYXZlIG1vcmUgaW5mb3JtYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEZSU19FUlJfUEFSRU5UX1RPX0NISUxEX0NPTU0gPSA4MDEyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBGUlNfRVJSX1NZU1ZPTF9QT1BVTEFURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZmlsZSByZXBsaWNhdGlvbiBzZXJ2aWNlIGNhbm5vdCBwb3B1bGF0ZSB0aGUgc3lzdGVtIHZvbHVtZSBiZWNhdXNlIG9mIGFuIGludGVybmFsIGVycm9yLlxuLy8gIFRoZSBldmVudCBsb2cgbWF5IGhhdmUgbW9yZSBpbmZvcm1hdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRlJTX0VSUl9TWVNWT0xfUE9QVUxBVEUgPSA4MDEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBGUlNfRVJSX1NZU1ZPTF9QT1BVTEFURV9USU1FT1VUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIHJlcGxpY2F0aW9uIHNlcnZpY2UgY2Fubm90IHBvcHVsYXRlIHRoZSBzeXN0ZW0gdm9sdW1lIGJlY2F1c2Ugb2YgYW4gaW50ZXJuYWwgdGltZW91dC5cbi8vICBUaGUgZXZlbnQgbG9nIG1heSBoYXZlIG1vcmUgaW5mb3JtYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEZSU19FUlJfU1lTVk9MX1BPUFVMQVRFX1RJTUVPVVQgPSA4MDE0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBGUlNfRVJSX1NZU1ZPTF9JU19CVVNZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIHJlcGxpY2F0aW9uIHNlcnZpY2UgY2Fubm90IHByb2Nlc3MgdGhlIHJlcXVlc3QuIFRoZSBzeXN0ZW0gdm9sdW1lIGlzIGJ1c3kgd2l0aCBhIHByZXZpb3VzIHJlcXVlc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEZSU19FUlJfU1lTVk9MX0lTX0JVU1kgPSA4MDE1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBGUlNfRVJSX1NZU1ZPTF9ERU1PVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZpbGUgcmVwbGljYXRpb24gc2VydmljZSBjYW5ub3Qgc3RvcCByZXBsaWNhdGluZyB0aGUgc3lzdGVtIHZvbHVtZSBiZWNhdXNlIG9mIGFuIGludGVybmFsIGVycm9yLlxuLy8gIFRoZSBldmVudCBsb2cgbWF5IGhhdmUgbW9yZSBpbmZvcm1hdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRlJTX0VSUl9TWVNWT0xfREVNT1RFID0gODAxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRlJTX0VSUl9JTlZBTElEX1NFUlZJQ0VfUEFSQU1FVEVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBmaWxlIHJlcGxpY2F0aW9uIHNlcnZpY2UgZGV0ZWN0ZWQgYW4gaW52YWxpZCBwYXJhbWV0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEZSU19FUlJfSU5WQUxJRF9TRVJWSUNFX1BBUkFNRVRFUiA9IDgwMTc7XG5cbi8vICoqKioqKioqKioqKioqKioqXG4vLyBGQUNJTElUWSBESVJFQ1RPUlkgU0VSVklDRVxuLy8gKioqKioqKioqKioqKioqKipcbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05PVF9JTlNUQUxMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5zdGFsbGluZyB0aGUgZGlyZWN0b3J5IHNlcnZpY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGV2ZW50IGxvZy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTk9UX0lOU1RBTExFRCA9IDgyMDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX01FTUJFUlNISVBfRVZBTFVBVEVEX0xPQ0FMTFlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBzZXJ2aWNlIGV2YWx1YXRlZCBncm91cCBtZW1iZXJzaGlwcyBsb2NhbGx5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19NRU1CRVJTSElQX0VWQUxVQVRFRF9MT0NBTExZID0gODIwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9fQVRUUklCVVRFX09SX1ZBTFVFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IHNlcnZpY2UgYXR0cmlidXRlIG9yIHZhbHVlIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT19BVFRSSUJVVEVfT1JfVkFMVUUgPSA4MjAyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19JTlZBTElEX0FUVFJJQlVURV9TWU5UQVhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGF0dHJpYnV0ZSBzeW50YXggc3BlY2lmaWVkIHRvIHRoZSBkaXJlY3Rvcnkgc2VydmljZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19JTlZBTElEX0FUVFJJQlVURV9TWU5UQVggPSA4MjAzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19BVFRSSUJVVEVfVFlQRV9VTkRFRklORURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGF0dHJpYnV0ZSB0eXBlIHNwZWNpZmllZCB0byB0aGUgZGlyZWN0b3J5IHNlcnZpY2UgaXMgbm90IGRlZmluZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0FUVFJJQlVURV9UWVBFX1VOREVGSU5FRCA9IDgyMDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FUVFJJQlVURV9PUl9WQUxVRV9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBkaXJlY3Rvcnkgc2VydmljZSBhdHRyaWJ1dGUgb3IgdmFsdWUgYWxyZWFkeSBleGlzdHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0FUVFJJQlVURV9PUl9WQUxVRV9FWElTVFMgPSA4MjA1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19CVVNZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkaXJlY3Rvcnkgc2VydmljZSBpcyBidXN5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19CVVNZID0gODIwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfVU5BVkFJTEFCTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBzZXJ2aWNlIGlzIHVuYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19VTkFWQUlMQUJMRSA9IDgyMDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05PX1JJRFNfQUxMT0NBVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkaXJlY3Rvcnkgc2VydmljZSB3YXMgdW5hYmxlIHRvIGFsbG9jYXRlIGEgcmVsYXRpdmUgaWRlbnRpZmllci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTk9fUklEU19BTExPQ0FURUQgPSA4MjA4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OT19NT1JFX1JJRFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBzZXJ2aWNlIGhhcyBleGhhdXN0ZWQgdGhlIHBvb2wgb2YgcmVsYXRpdmUgaWRlbnRpZmllcnMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PX01PUkVfUklEUyA9IDgyMDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lOQ09SUkVDVF9ST0xFX09XTkVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSB0aGUgZGlyZWN0b3J5IHNlcnZpY2UgaXMgbm90IHRoZSBtYXN0ZXIgZm9yIHRoYXQgdHlwZSBvZiBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lOQ09SUkVDVF9ST0xFX09XTkVSID0gODIxMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfUklETUdSX0lOSVRfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBzZXJ2aWNlIHdhcyB1bmFibGUgdG8gaW5pdGlhbGl6ZSB0aGUgc3Vic3lzdGVtIHRoYXQgYWxsb2NhdGVzIHJlbGF0aXZlIGlkZW50aWZpZXJzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19SSURNR1JfSU5JVF9FUlJPUiA9IDgyMTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX09CSl9DTEFTU19WSU9MQVRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gZGlkIG5vdCBzYXRpc2Z5IG9uZSBvciBtb3JlIGV4cG9ydCBjb25zdHJhaW50cyBhc3NvY2lhdGVkIHdpdGggdGhlIGNsYXNzIG9mIHRoZSBvYmplY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX09CSl9DTEFTU19WSU9MQVRJT04gPSA4MjEyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX09OX05PTl9MRUFGXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkaXJlY3Rvcnkgc2VydmljZSBjYW4gcGVyZm9ybSB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBvbmx5IG9uIGEgbGVhZiBvYmplY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfT05fTk9OX0xFQUYgPSA4MjEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX09OX1JETlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgY2Fubm90IHBlcmZvcm0gdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gb24gdGhlIFJETiBhdHRyaWJ1dGUgb2YgYW4gb2JqZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX09OX1JETiA9IDgyMTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfTU9EX09CSl9DTEFTU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgZGV0ZWN0ZWQgYW4gYXR0ZW1wdCB0byBtb2RpZnkgdGhlIG9iamVjdCBjbGFzcyBvZiBhbiBvYmplY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfTU9EX09CSl9DTEFTUyA9IDgyMTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NST1NTX0RPTV9NT1ZFX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgY3Jvc3MtZG9tYWluIG1vdmUgb3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NST1NTX0RPTV9NT1ZFX0VSUk9SID0gODIxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfR0NfTk9UX0FWQUlMQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBVbmFibGUgdG8gY29udGFjdCB0aGUgZ2xvYmFsIGNhdGFsb2cgc2VydmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19HQ19OT1RfQVZBSUxBQkxFID0gODIxNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0hBUkVEX1BPTElDWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcG9saWN5IG9iamVjdCBpcyBzaGFyZWQgYW5kIGNhbiBvbmx5IGJlIG1vZGlmaWVkIGF0IHRoZSByb290LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TSEFSRURfUE9MSUNZID0gODIxODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUE9MSUNZX09CSkVDVF9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHBvbGljeSBvYmplY3QgZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BPTElDWV9PQkpFQ1RfTk9UX0ZPVU5EID0gODIxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUE9MSUNZX09OTFlfSU5fRFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBwb2xpY3kgaW5mb3JtYXRpb24gaXMgb25seSBpbiB0aGUgZGlyZWN0b3J5IHNlcnZpY2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1BPTElDWV9PTkxZX0lOX0RTID0gODIyMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfUFJPTU9USU9OX0FDVElWRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGRvbWFpbiBjb250cm9sbGVyIHByb21vdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9QUk9NT1RJT05fQUNUSVZFID0gODIyMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfTk9fUFJPTU9USU9OX0FDVElWRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGRvbWFpbiBjb250cm9sbGVyIHByb21vdGlvbiBpcyBub3QgY3VycmVudGx5IGFjdGl2ZVxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9OT19QUk9NT1RJT05fQUNUSVZFID0gODIyMjtcblxuLy8gODIyMyB1bnVzZWRcbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX09QRVJBVElPTlNfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gb3BlcmF0aW9ucyBlcnJvciBvY2N1cnJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfT1BFUkFUSU9OU19FUlJPUiA9IDgyMjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1BST1RPQ09MX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgcHJvdG9jb2wgZXJyb3Igb2NjdXJyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1BST1RPQ09MX0VSUk9SID0gODIyNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfVElNRUxJTUlUX0VYQ0VFREVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB0aW1lIGxpbWl0IGZvciB0aGlzIHJlcXVlc3Qgd2FzIGV4Y2VlZGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19USU1FTElNSVRfRVhDRUVERUQgPSA4MjI2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TSVpFTElNSVRfRVhDRUVERURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNpemUgbGltaXQgZm9yIHRoaXMgcmVxdWVzdCB3YXMgZXhjZWVkZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NJWkVMSU1JVF9FWENFRURFRCA9IDgyMjc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FETUlOX0xJTUlUX0VYQ0VFREVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhZG1pbmlzdHJhdGl2ZSBsaW1pdCBmb3IgdGhpcyByZXF1ZXN0IHdhcyBleGNlZWRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQURNSU5fTElNSVRfRVhDRUVERUQgPSA4MjI4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DT01QQVJFX0ZBTFNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjb21wYXJlIHJlc3BvbnNlIHdhcyBmYWxzZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ09NUEFSRV9GQUxTRSA9IDgyMjk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NPTVBBUkVfVFJVRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY29tcGFyZSByZXNwb25zZSB3YXMgdHJ1ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ09NUEFSRV9UUlVFID0gODIzMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQVVUSF9NRVRIT0RfTk9UX1NVUFBPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0FVVEhfTUVUSE9EX05PVF9TVVBQT1JURUQgPSA4MjMxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TVFJPTkdfQVVUSF9SRVFVSVJFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIG1vcmUgc2VjdXJlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpcyByZXF1aXJlZCBmb3IgdGhpcyBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NUUk9OR19BVVRIX1JFUVVJUkVEID0gODIzMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfSU5BUFBST1BSSUFURV9BVVRIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEluYXBwcm9wcmlhdGUgYXV0aGVudGljYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lOQVBQUk9QUklBVEVfQVVUSCA9IDgyMzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FVVEhfVU5LTk9XTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGlzIHVua25vd24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0FVVEhfVU5LTk9XTiA9IDgyMzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1JFRkVSUkFMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgcmVmZXJyYWwgd2FzIHJldHVybmVkIGZyb20gdGhlIHNlcnZlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUkVGRVJSQUwgPSA4MjM1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19VTkFWQUlMQUJMRV9DUklUX0VYVEVOU0lPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBjcml0aWNhbCBleHRlbnNpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1VOQVZBSUxBQkxFX0NSSVRfRVhURU5TSU9OID0gODIzNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ09ORklERU5USUFMSVRZX1JFUVVJUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgcmVxdWVzdCByZXF1aXJlcyBhIHNlY3VyZSBjb25uZWN0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DT05GSURFTlRJQUxJVFlfUkVRVUlSRUQgPSA4MjM3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19JTkFQUFJPUFJJQVRFX01BVENISU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEluYXBwcm9wcmlhdGUgbWF0Y2hpbmcuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lOQVBQUk9QUklBVEVfTUFUQ0hJTkcgPSA4MjM4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OT19TVUNIX09CSkVDVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGVyZSBpcyBubyBzdWNoIG9iamVjdCBvbiB0aGUgc2VydmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT19TVUNIX09CSkVDVCA9IDgyNDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FMSUFTX1BST0JMRU1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgaXMgYW4gYWxpYXMgcHJvYmxlbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQUxJQVNfUFJPQkxFTSA9IDgyNDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lOVkFMSURfRE5fU1lOVEFYXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGludmFsaWQgZG4gc3ludGF4IGhhcyBiZWVuIHNwZWNpZmllZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSU5WQUxJRF9ETl9TWU5UQVggPSA4MjQyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19JU19MRUFGXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvYmplY3QgaXMgYSBsZWFmIG9iamVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSVNfTEVBRiA9IDgyNDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FMSUFTX0RFUkVGX1BST0JMRU1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgaXMgYW4gYWxpYXMgZGVyZWZlcmVuY2luZyBwcm9ibGVtLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19BTElBU19ERVJFRl9QUk9CTEVNID0gODI0NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfVU5XSUxMSU5HX1RPX1BFUkZPUk1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZlciBpcyB1bndpbGxpbmcgdG8gcHJvY2VzcyB0aGUgcmVxdWVzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfVU5XSUxMSU5HX1RPX1BFUkZPUk0gPSA4MjQ1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19MT09QX0RFVEVDVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGxvb3AgaGFzIGJlZW4gZGV0ZWN0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0xPT1BfREVURUNUID0gODI0NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTkFNSU5HX1ZJT0xBVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGVyZSBpcyBhIG5hbWluZyB2aW9sYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05BTUlOR19WSU9MQVRJT04gPSA4MjQ3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19PQkpFQ1RfUkVTVUxUU19UT09fTEFSR0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlc3VsdCBzZXQgaXMgdG9vIGxhcmdlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19PQkpFQ1RfUkVTVUxUU19UT09fTEFSR0UgPSA4MjQ4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19BRkZFQ1RTX01VTFRJUExFX0RTQVNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBhZmZlY3RzIG11bHRpcGxlIERTQXNcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQUZGRUNUU19NVUxUSVBMRV9EU0FTID0gODI0OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU0VSVkVSX0RPV05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZlciBpcyBub3Qgb3BlcmF0aW9uYWwuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NFUlZFUl9ET1dOID0gODI1MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTE9DQUxfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBsb2NhbCBlcnJvciBoYXMgb2NjdXJyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0xPQ0FMX0VSUk9SID0gODI1MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRU5DT0RJTkdfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gZW5jb2RpbmcgZXJyb3IgaGFzIG9jY3VycmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19FTkNPRElOR19FUlJPUiA9IDgyNTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RFQ09ESU5HX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgZGVjb2RpbmcgZXJyb3IgaGFzIG9jY3VycmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19ERUNPRElOR19FUlJPUiA9IDgyNTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0ZJTFRFUl9VTktOT1dOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZWFyY2ggZmlsdGVyIGNhbm5vdCBiZSByZWNvZ25pemVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19GSUxURVJfVU5LTk9XTiA9IDgyNTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1BBUkFNX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1BBUkFNX0VSUk9SID0gODI1NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9UX1NVUFBPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT1RfU1VQUE9SVEVEID0gODI1NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9fUkVTVUxUU19SRVRVUk5FRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyByZXN1bHRzIHdlcmUgcmV0dXJuZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PX1JFU1VMVFNfUkVUVVJORUQgPSA4MjU3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DT05UUk9MX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DT05UUk9MX05PVF9GT1VORCA9IDgyNTg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NMSUVOVF9MT09QXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgcmVmZXJyYWwgbG9vcCB3YXMgZGV0ZWN0ZWQgYnkgdGhlIGNsaWVudC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0xJRU5UX0xPT1AgPSA4MjU5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19SRUZFUlJBTF9MSU1JVF9FWENFRURFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcHJlc2V0IHJlZmVycmFsIGxpbWl0IHdhcyBleGNlZWRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUkVGRVJSQUxfTElNSVRfRVhDRUVERUQgPSA4MjYwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TT1JUX0NPTlRST0xfTUlTU0lOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2VhcmNoIHJlcXVpcmVzIGEgU09SVCBjb250cm9sLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19TT1JUX0NPTlRST0xfTUlTU0lORyA9IDgyNjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX09GRlNFVF9SQU5HRV9FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2VhcmNoIHJlc3VsdHMgZXhjZWVkIHRoZSBvZmZzZXQgcmFuZ2Ugc3BlY2lmaWVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19PRkZTRVRfUkFOR0VfRVJST1IgPSA4MjYyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19ST09UX01VU1RfQkVfTkNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJvb3Qgb2JqZWN0IG11c3QgYmUgdGhlIGhlYWQgb2YgYSBuYW1pbmcgY29udGV4dC4gVGhlIHJvb3Qgb2JqZWN0IGNhbm5vdCBoYXZlIGFuIGluc3RhbnRpYXRlZCBwYXJlbnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1JPT1RfTVVTVF9CRV9OQyA9IDgzMDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FERF9SRVBMSUNBX0lOSElCSVRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYWRkIHJlcGxpY2Egb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQuIFRoZSBuYW1pbmcgY29udGV4dCBtdXN0IGJlIHdyaXRlYWJsZSBpbiBvcmRlciB0byBjcmVhdGUgdGhlIHJlcGxpY2EuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0FERF9SRVBMSUNBX0lOSElCSVRFRCA9IDgzMDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FUVF9OT1RfREVGX0lOX1NDSEVNQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHJlZmVyZW5jZSB0byBhbiBhdHRyaWJ1dGUgdGhhdCBpcyBub3QgZGVmaW5lZCBpbiB0aGUgc2NoZW1hIG9jY3VycmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19BVFRfTk9UX0RFRl9JTl9TQ0hFTUEgPSA4MzAzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19NQVhfT0JKX1NJWkVfRVhDRUVERURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1heGltdW0gc2l6ZSBvZiBhbiBvYmplY3QgaGFzIGJlZW4gZXhjZWVkZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX01BWF9PQkpfU0laRV9FWENFRURFRCA9IDgzMDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX09CSl9TVFJJTkdfTkFNRV9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBhZGQgYW4gb2JqZWN0IHRvIHRoZSBkaXJlY3Rvcnkgd2l0aCBhIG5hbWUgdGhhdCBpcyBhbHJlYWR5IGluIHVzZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfT0JKX1NUUklOR19OQU1FX0VYSVNUUyA9IDgzMDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05PX1JETl9ERUZJTkVEX0lOX1NDSEVNQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGFkZCBhbiBvYmplY3Qgb2YgYSBjbGFzcyB0aGF0IGRvZXMgbm90IGhhdmUgYW4gUkROIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTk9fUkROX0RFRklORURfSU5fU0NIRU1BID0gODMwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfUkROX0RPRVNOVF9NQVRDSF9TQ0hFTUFcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBhZGQgYW4gb2JqZWN0IHVzaW5nIGFuIFJETiB0aGF0IGlzIG5vdCB0aGUgUkROIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUkROX0RPRVNOVF9NQVRDSF9TQ0hFTUEgPSA4MzA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OT19SRVFVRVNURURfQVRUU19GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOb25lIG9mIHRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlcyB3ZXJlIGZvdW5kIG9uIHRoZSBvYmplY3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT19SRVFVRVNURURfQVRUU19GT1VORCA9IDgzMDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1VTRVJfQlVGRkVSX1RPX1NNQUxMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB1c2VyIGJ1ZmZlciBpcyB0b28gc21hbGwuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1VTRVJfQlVGRkVSX1RPX1NNQUxMID0gODMwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQVRUX0lTX05PVF9PTl9PQkpcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgaW4gdGhlIG9wZXJhdGlvbiBpcyBub3QgcHJlc2VudCBvbiB0aGUgb2JqZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19BVFRfSVNfTk9UX09OX09CSiA9IDgzMTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lMTEVHQUxfTU9EX09QRVJBVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbGxlZ2FsIG1vZGlmeSBvcGVyYXRpb24uIFNvbWUgYXNwZWN0IG9mIHRoZSBtb2RpZmljYXRpb24gaXMgbm90IHBlcm1pdHRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSUxMRUdBTF9NT0RfT1BFUkFUSU9OID0gODMxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfT0JKX1RPT19MQVJHRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIG9iamVjdCBpcyB0b28gbGFyZ2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX09CSl9UT09fTEFSR0UgPSA4MzEyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19CQURfSU5TVEFOQ0VfVFlQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGluc3RhbmNlIHR5cGUgaXMgbm90IHZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19CQURfSU5TVEFOQ0VfVFlQRSA9IDgzMTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX01BU1RFUkRTQV9SRVFVSVJFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb3BlcmF0aW9uIG11c3QgYmUgcGVyZm9ybWVkIGF0IGEgbWFzdGVyIERTQS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTUFTVEVSRFNBX1JFUVVJUkVEID0gODMxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfT0JKRUNUX0NMQVNTX1JFUVVJUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvYmplY3QgY2xhc3MgYXR0cmlidXRlIG11c3QgYmUgc3BlY2lmaWVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19PQkpFQ1RfQ0xBU1NfUkVRVUlSRUQgPSA4MzE1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19NSVNTSU5HX1JFUVVJUkVEX0FUVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHJlcXVpcmVkIGF0dHJpYnV0ZSBpcyBtaXNzaW5nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19NSVNTSU5HX1JFUVVJUkVEX0FUVCA9IDgzMTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FUVF9OT1RfREVGX0ZPUl9DTEFTU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG1vZGlmeSBhbiBvYmplY3QgdG8gaW5jbHVkZSBhbiBhdHRyaWJ1dGUgdGhhdCBpcyBub3QgbGVnYWwgZm9yIGl0cyBjbGFzcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQVRUX05PVF9ERUZfRk9SX0NMQVNTID0gODMxNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQVRUX0FMUkVBRFlfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgb2JqZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19BVFRfQUxSRUFEWV9FWElTVFMgPSA4MzE4O1xuXG4vLyA4MzE5IHVudXNlZFxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9BRERfQVRUX1ZBTFVFU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudCwgb3IgaGFzIG5vIHZhbHVlcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0FOVF9BRERfQVRUX1ZBTFVFUyA9IDgzMjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FUVF9WQUxfQUxSRUFEWV9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCB2YWx1ZSBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQVRUX1ZBTF9BTFJFQURZX0VYSVNUUyA9IDgzMjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfUkVNX01JU1NJTkdfQVRUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhdHRyaWJ1dGUgY2Fubm90IGJlIHJlbW92ZWQgYmVjYXVzZSBpdCBpcyBub3QgcHJlc2VudCBvbiB0aGUgb2JqZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX1JFTV9NSVNTSU5HX0FUVCA9IDgzMjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfUkVNX01JU1NJTkdfQVRUX1ZBTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYXR0cmlidXRlIHZhbHVlIGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2UgaXQgaXMgbm90IHByZXNlbnQgb24gdGhlIG9iamVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0FOVF9SRU1fTUlTU0lOR19BVFRfVkFMID0gODMyNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfUk9PVF9DQU5UX0JFX1NVQlJFRlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHJvb3Qgb2JqZWN0IGNhbm5vdCBiZSBhIHN1YnJlZi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUk9PVF9DQU5UX0JFX1NVQlJFRiA9IDgzMjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05PX0NIQUlOSU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENoYWluaW5nIGlzIG5vdCBwZXJtaXR0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PX0NIQUlOSU5HID0gODMyNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9fQ0hBSU5FRF9FVkFMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENoYWluZWQgZXZhbHVhdGlvbiBpcyBub3QgcGVybWl0dGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT19DSEFJTkVEX0VWQUwgPSA4MzI4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OT19QQVJFTlRfT0JKRUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpb24gY291bGQgbm90IGJlIHBlcmZvcm1lZCBiZWNhdXNlIHRoZSBvYmplY3QncyBwYXJlbnQgaXMgZWl0aGVyIHVuaW5zdGFudGlhdGVkIG9yIGRlbGV0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PX1BBUkVOVF9PQkpFQ1QgPSA4MzI5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19QQVJFTlRfSVNfQU5fQUxJQVNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSGF2aW5nIGEgcGFyZW50IHRoYXQgaXMgYW4gYWxpYXMgaXMgbm90IHBlcm1pdHRlZC4gQWxpYXNlcyBhcmUgbGVhZiBvYmplY3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19QQVJFTlRfSVNfQU5fQUxJQVMgPSA4MzMwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX01JWF9NQVNURVJfQU5EX1JFUFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9iamVjdCBhbmQgcGFyZW50IG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZSwgZWl0aGVyIGJvdGggbWFzdGVycyBvciBib3RoIHJlcGxpY2FzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX01JWF9NQVNURVJfQU5EX1JFUFMgPSA4MzMxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DSElMRFJFTl9FWElTVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSBjaGlsZCBvYmplY3RzIGV4aXN0LiBUaGlzIG9wZXJhdGlvbiBjYW4gb25seSBiZSBwZXJmb3JtZWQgb24gYSBsZWFmIG9iamVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0hJTERSRU5fRVhJU1QgPSA4MzMyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19PQkpfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIERpcmVjdG9yeSBvYmplY3Qgbm90IGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19PQkpfTk9UX0ZPVU5EID0gODMzMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQUxJQVNFRF9PQkpfTUlTU0lOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYWxpYXNlZCBvYmplY3QgaXMgbWlzc2luZy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQUxJQVNFRF9PQkpfTUlTU0lORyA9IDgzMzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0JBRF9OQU1FX1NZTlRBWFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb2JqZWN0IG5hbWUgaGFzIGJhZCBzeW50YXguXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0JBRF9OQU1FX1NZTlRBWCA9IDgzMzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FMSUFTX1BPSU5UU19UT19BTElBU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJdCBpcyBub3QgcGVybWl0dGVkIGZvciBhbiBhbGlhcyB0byByZWZlciB0byBhbm90aGVyIGFsaWFzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19BTElBU19QT0lOVFNfVE9fQUxJQVMgPSA4MzM2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0RFUkVGX0FMSUFTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhbGlhcyBjYW5ub3QgYmUgZGVyZWZlcmVuY2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX0RFUkVGX0FMSUFTID0gODMzNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfT1VUX09GX1NDT1BFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpb24gaXMgb3V0IG9mIHNjb3BlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19PVVRfT0ZfU0NPUEUgPSA4MzM4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19PQkpFQ1RfQkVJTkdfUkVNT1ZFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb3BlcmF0aW9uIGNhbm5vdCBjb250aW51ZSBiZWNhdXNlIHRoZSBvYmplY3QgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVtb3ZlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfT0JKRUNUX0JFSU5HX1JFTU9WRUQgPSA4MzM5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0RFTEVURV9EU0FfT0JKXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBEU0Egb2JqZWN0IGNhbm5vdCBiZSBkZWxldGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX0RFTEVURV9EU0FfT0JKID0gODM0MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfR0VORVJJQ19FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGRpcmVjdG9yeSBzZXJ2aWNlIGVycm9yIGhhcyBvY2N1cnJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfR0VORVJJQ19FUlJPUiA9IDgzNDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RTQV9NVVNUX0JFX0lOVF9NQVNURVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBjYW4gb25seSBiZSBwZXJmb3JtZWQgb24gYW4gaW50ZXJuYWwgbWFzdGVyIERTQSBvYmplY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RTQV9NVVNUX0JFX0lOVF9NQVNURVIgPSA4MzQyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DTEFTU19OT1RfRFNBXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvYmplY3QgbXVzdCBiZSBvZiBjbGFzcyBEU0EuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NMQVNTX05PVF9EU0EgPSA4MzQzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19JTlNVRkZfQUNDRVNTX1JJR0hUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnN1ZmZpY2llbnQgYWNjZXNzIHJpZ2h0cyB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lOU1VGRl9BQ0NFU1NfUklHSFRTID0gODM0NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfSUxMRUdBTF9TVVBFUklPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb2JqZWN0IGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIHRoZSBwYXJlbnQgaXMgbm90IG9uIHRoZSBsaXN0IG9mIHBvc3NpYmxlIHN1cGVyaW9ycy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSUxMRUdBTF9TVVBFUklPUiA9IDgzNDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0FUVFJJQlVURV9PV05FRF9CWV9TQU1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQWNjZXNzIHRvIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHBlcm1pdHRlZCBiZWNhdXNlIHRoZSBhdHRyaWJ1dGUgaXMgb3duZWQgYnkgdGhlIFNlY3VyaXR5IEFjY291bnRzIE1hbmFnZXIgKFNBTSkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0FUVFJJQlVURV9PV05FRF9CWV9TQU0gPSA4MzQ2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OQU1FX1RPT19NQU5ZX1BBUlRTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuYW1lIGhhcyB0b28gbWFueSBwYXJ0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTkFNRV9UT09fTUFOWV9QQVJUUyA9IDgzNDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05BTUVfVE9PX0xPTkdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5hbWUgaXMgdG9vIGxvbmcuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05BTUVfVE9PX0xPTkcgPSA4MzQ4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OQU1FX1ZBTFVFX1RPT19MT05HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuYW1lIHZhbHVlIGlzIHRvbyBsb25nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OQU1FX1ZBTFVFX1RPT19MT05HID0gODM0OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTkFNRV9VTlBBUlNFQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgZW5jb3VudGVyZWQgYW4gZXJyb3IgcGFyc2luZyBhIG5hbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05BTUVfVU5QQVJTRUFCTEUgPSA4MzUwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OQU1FX1RZUEVfVU5LTk9XTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgY2Fubm90IGdldCB0aGUgYXR0cmlidXRlIHR5cGUgZm9yIGEgbmFtZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTkFNRV9UWVBFX1VOS05PV04gPSA4MzUxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OT1RfQU5fT0JKRUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuYW1lIGRvZXMgbm90IGlkZW50aWZ5IGFuIG9iamVjdDsgdGhlIG5hbWUgaWRlbnRpZmllcyBhIHBoYW50b20uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PVF9BTl9PQkpFQ1QgPSA4MzUyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TRUNfREVTQ19UT09fU0hPUlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlY3VyaXR5IGRlc2NyaXB0b3IgaXMgdG9vIHNob3J0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19TRUNfREVTQ19UT09fU0hPUlQgPSA4MzUzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TRUNfREVTQ19JTlZBTElEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZWN1cml0eSBkZXNjcmlwdG9yIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NFQ19ERVNDX0lOVkFMSUQgPSA4MzU0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OT19ERUxFVEVEX05BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRmFpbGVkIHRvIGNyZWF0ZSBuYW1lIGZvciBkZWxldGVkIG9iamVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTk9fREVMRVRFRF9OQU1FID0gODM1NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU1VCUkVGX01VU1RfSEFWRV9QQVJFTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHBhcmVudCBvZiBhIG5ldyBzdWJyZWYgbXVzdCBleGlzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfU1VCUkVGX01VU1RfSEFWRV9QQVJFTlQgPSA4MzU2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OQ05BTUVfTVVTVF9CRV9OQ1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgb2JqZWN0IG11c3QgYmUgYSBuYW1pbmcgY29udGV4dC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTkNOQU1FX01VU1RfQkVfTkMgPSA4MzU3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0FERF9TWVNURU1fT05MWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJdCBpcyBub3QgcGVybWl0dGVkIHRvIGFkZCBhbiBhdHRyaWJ1dGUgd2hpY2ggaXMgb3duZWQgYnkgdGhlIHN5c3RlbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0FOVF9BRERfU1lTVEVNX09OTFkgPSA4MzU4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DTEFTU19NVVNUX0JFX0NPTkNSRVRFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbGFzcyBvZiB0aGUgb2JqZWN0IG11c3QgYmUgc3RydWN0dXJhbDsgeW91IGNhbm5vdCBpbnN0YW50aWF0ZSBhbiBhYnN0cmFjdCBjbGFzcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0xBU1NfTVVTVF9CRV9DT05DUkVURSA9IDgzNTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lOVkFMSURfRE1EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzY2hlbWEgb2JqZWN0IGNvdWxkIG5vdCBiZSBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSU5WQUxJRF9ETUQgPSA4MzYwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19PQkpfR1VJRF9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBsb2NhbCBvYmplY3Qgd2l0aCB0aGlzIEdVSUQgKGRlYWQgb3IgYWxpdmUpIGFscmVhZHkgZXhpc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19PQkpfR1VJRF9FWElTVFMgPSA4MzYxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OT1RfT05fQkFDS0xJTktcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkIG9uIGEgYmFjayBsaW5rLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT1RfT05fQkFDS0xJTksgPSA4MzYyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OT19DUk9TU1JFRl9GT1JfTkNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGNyb3NzIHJlZmVyZW5jZSBmb3IgdGhlIHNwZWNpZmllZCBuYW1pbmcgY29udGV4dCBjb3VsZCBub3QgYmUgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PX0NST1NTUkVGX0ZPUl9OQyA9IDgzNjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1NIVVRUSU5HX0RPV05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBjb3VsZCBub3QgYmUgcGVyZm9ybWVkIGJlY2F1c2UgdGhlIGRpcmVjdG9yeSBzZXJ2aWNlIGlzIHNodXR0aW5nIGRvd24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NIVVRUSU5HX0RPV04gPSA4MzY0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19VTktOT1dOX09QRVJBVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgcmVxdWVzdCBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19VTktOT1dOX09QRVJBVElPTiA9IDgzNjU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lOVkFMSURfUk9MRV9PV05FUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcm9sZSBvd25lciBhdHRyaWJ1dGUgY291bGQgbm90IGJlIHJlYWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lOVkFMSURfUk9MRV9PV05FUiA9IDgzNjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NPVUxETlRfQ09OVEFDVF9GU01PXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgRlNNTyBvcGVyYXRpb24gZmFpbGVkLiBUaGUgY3VycmVudCBGU01PIGhvbGRlciBjb3VsZCBub3QgYmUgY29udGFjdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DT1VMRE5UX0NPTlRBQ1RfRlNNTyA9IDgzNjc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NST1NTX05DX0ROX1JFTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNb2RpZmljYXRpb24gb2YgYSBETiBhY3Jvc3MgYSBuYW1pbmcgY29udGV4dCBpcyBub3QgcGVybWl0dGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DUk9TU19OQ19ETl9SRU5BTUUgPSA4MzY4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX01PRF9TWVNURU1fT05MWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYXR0cmlidXRlIGNhbm5vdCBiZSBtb2RpZmllZCBiZWNhdXNlIGl0IGlzIG93bmVkIGJ5IHRoZSBzeXN0ZW0uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfTU9EX1NZU1RFTV9PTkxZID0gODM2OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfUkVQTElDQVRPUl9PTkxZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE9ubHkgdGhlIHJlcGxpY2F0b3IgY2FuIHBlcmZvcm0gdGhpcyBmdW5jdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUkVQTElDQVRPUl9PTkxZID0gODM3MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfT0JKX0NMQVNTX05PVF9ERUZJTkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgY2xhc3MgaXMgbm90IGRlZmluZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX09CSl9DTEFTU19OT1RfREVGSU5FRCA9IDgzNzE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX09CSl9DTEFTU19OT1RfU1VCQ0xBU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBjbGFzcyBpcyBub3QgYSBzdWJjbGFzcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfT0JKX0NMQVNTX05PVF9TVUJDTEFTUyA9IDgzNzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05BTUVfUkVGRVJFTkNFX0lOVkFMSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5hbWUgcmVmZXJlbmNlIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05BTUVfUkVGRVJFTkNFX0lOVkFMSUQgPSA4MzczO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DUk9TU19SRUZfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgY3Jvc3MgcmVmZXJlbmNlIGFscmVhZHkgZXhpc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DUk9TU19SRUZfRVhJU1RTID0gODM3NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9ERUxfTUFTVEVSX0NST1NTUkVGXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEl0IGlzIG5vdCBwZXJtaXR0ZWQgdG8gZGVsZXRlIGEgbWFzdGVyIGNyb3NzIHJlZmVyZW5jZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0FOVF9ERUxfTUFTVEVSX0NST1NTUkVGID0gODM3NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU1VCVFJFRV9OT1RJRllfTk9UX05DX0hFQURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU3VidHJlZSBub3RpZmljYXRpb25zIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiBOQyBoZWFkcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfU1VCVFJFRV9OT1RJRllfTk9UX05DX0hFQUQgPSA4Mzc2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OT1RJRllfRklMVEVSX1RPT19DT01QTEVYXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vdGlmaWNhdGlvbiBmaWx0ZXIgaXMgdG9vIGNvbXBsZXguXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PVElGWV9GSUxURVJfVE9PX0NPTVBMRVggPSA4Mzc3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EVVBfUkROXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNjaGVtYSB1cGRhdGUgZmFpbGVkOiBkdXBsaWNhdGUgUkROLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EVVBfUkROID0gODM3ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFVQX09JRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgdXBkYXRlIGZhaWxlZDogZHVwbGljYXRlIE9JRC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFVQX09JRCA9IDgzNzk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RVUF9NQVBJX0lEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNjaGVtYSB1cGRhdGUgZmFpbGVkOiBkdXBsaWNhdGUgTUFQSSBpZGVudGlmaWVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EVVBfTUFQSV9JRCA9IDgzODA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RVUF9TQ0hFTUFfSURfR1VJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgdXBkYXRlIGZhaWxlZDogZHVwbGljYXRlIHNjaGVtYS1pZCBHVUlELlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EVVBfU0NIRU1BX0lEX0dVSUQgPSA4MzgxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EVVBfTERBUF9ESVNQTEFZX05BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2NoZW1hIHVwZGF0ZSBmYWlsZWQ6IGR1cGxpY2F0ZSBMREFQIGRpc3BsYXkgbmFtZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFVQX0xEQVBfRElTUExBWV9OQU1FID0gODM4MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU0VNQU5USUNfQVRUX1RFU1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2NoZW1hIHVwZGF0ZSBmYWlsZWQ6IHJhbmdlLWxvd2VyIGxlc3MgdGhhbiByYW5nZSB1cHBlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfU0VNQU5USUNfQVRUX1RFU1QgPSA4MzgzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TWU5UQVhfTUlTTUFUQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2NoZW1hIHVwZGF0ZSBmYWlsZWQ6IHN5bnRheCBtaXNtYXRjaC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfU1lOVEFYX01JU01BVENIID0gODM4NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRVhJU1RTX0lOX01VU1RfSEFWRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgZGVsZXRpb24gZmFpbGVkOiBhdHRyaWJ1dGUgaXMgdXNlZCBpbiBtdXN0LWNvbnRhaW4uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0VYSVNUU19JTl9NVVNUX0hBVkUgPSA4Mzg1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19FWElTVFNfSU5fTUFZX0hBVkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2NoZW1hIGRlbGV0aW9uIGZhaWxlZDogYXR0cmlidXRlIGlzIHVzZWQgaW4gbWF5LWNvbnRhaW4uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0VYSVNUU19JTl9NQVlfSEFWRSA9IDgzODY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05PTkVYSVNURU5UX01BWV9IQVZFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNjaGVtYSB1cGRhdGUgZmFpbGVkOiBhdHRyaWJ1dGUgaW4gbWF5LWNvbnRhaW4gZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PTkVYSVNURU5UX01BWV9IQVZFID0gODM4NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9ORVhJU1RFTlRfTVVTVF9IQVZFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNjaGVtYSB1cGRhdGUgZmFpbGVkOiBhdHRyaWJ1dGUgaW4gbXVzdC1jb250YWluIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT05FWElTVEVOVF9NVVNUX0hBVkUgPSA4Mzg4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19BVVhfQ0xTX1RFU1RfRkFJTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgdXBkYXRlIGZhaWxlZDogY2xhc3MgaW4gYXV4LWNsYXNzIGxpc3QgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFuIGF1eGlsaWFyeSBjbGFzcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQVVYX0NMU19URVNUX0ZBSUwgPSA4Mzg5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OT05FWElTVEVOVF9QT1NTX1NVUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgdXBkYXRlIGZhaWxlZDogY2xhc3MgaW4gcG9zcy1zdXBlcmlvcnMgZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PTkVYSVNURU5UX1BPU1NfU1VQID0gODM5MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU1VCX0NMU19URVNUX0ZBSUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2NoZW1hIHVwZGF0ZSBmYWlsZWQ6IGNsYXNzIGluIHN1YmNsYXNzb2YgbGlzdCBkb2VzIG5vdCBleGlzdCBvciBkb2VzIG5vdCBzYXRpc2Z5IGhpZXJhcmNoeSBydWxlcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfU1VCX0NMU19URVNUX0ZBSUwgPSA4MzkxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19CQURfUkROX0FUVF9JRF9TWU5UQVhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2NoZW1hIHVwZGF0ZSBmYWlsZWQ6IFJkbi1BdHQtSWQgaGFzIHdyb25nIHN5bnRheC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQkFEX1JETl9BVFRfSURfU1lOVEFYID0gODM5MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRVhJU1RTX0lOX0FVWF9DTFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2NoZW1hIGRlbGV0aW9uIGZhaWxlZDogY2xhc3MgaXMgdXNlZCBhcyBhdXhpbGlhcnkgY2xhc3MuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0VYSVNUU19JTl9BVVhfQ0xTID0gODM5MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRVhJU1RTX0lOX1NVQl9DTFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2NoZW1hIGRlbGV0aW9uIGZhaWxlZDogY2xhc3MgaXMgdXNlZCBhcyBzdWIgY2xhc3MuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0VYSVNUU19JTl9TVUJfQ0xTID0gODM5NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRVhJU1RTX0lOX1BPU1NfU1VQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNjaGVtYSBkZWxldGlvbiBmYWlsZWQ6IGNsYXNzIGlzIHVzZWQgYXMgcG9zcy1zdXBlcmlvci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRVhJU1RTX0lOX1BPU1NfU1VQID0gODM5NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfUkVDQUxDU0NIRU1BX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgdXBkYXRlIGZhaWxlZCBpbiByZWNhbGN1bGF0aW5nIHZhbGlkYXRpb24gY2FjaGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1JFQ0FMQ1NDSEVNQV9GQUlMRUQgPSA4Mzk2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19UUkVFX0RFTEVURV9OT1RfRklOSVNIRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHRyZWUgZGVsZXRpb24gaXMgbm90IGZpbmlzaGVkLiAgVGhlIHJlcXVlc3QgbXVzdCBiZSBtYWRlIGFnYWluIHRvIGNvbnRpbnVlIGRlbGV0aW5nIHRoZSB0cmVlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19UUkVFX0RFTEVURV9OT1RfRklOSVNIRUQgPSA4Mzk3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0RFTEVURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIGRlbGV0ZSBvcGVyYXRpb24gY291bGQgbm90IGJlIHBlcmZvcm1lZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0FOVF9ERUxFVEUgPSA4Mzk4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19BVFRfU0NIRU1BX1JFUV9JRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDYW5ub3QgcmVhZCB0aGUgZ292ZXJucyBjbGFzcyBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hIHJlY29yZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQVRUX1NDSEVNQV9SRVFfSUQgPSA4Mzk5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19CQURfQVRUX1NDSEVNQV9TWU5UQVhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGF0dHJpYnV0ZSBzY2hlbWEgaGFzIGJhZCBzeW50YXguXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0JBRF9BVFRfU0NIRU1BX1NZTlRBWCA9IDg0MDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfQ0FDSEVfQVRUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhdHRyaWJ1dGUgY291bGQgbm90IGJlIGNhY2hlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0FOVF9DQUNIRV9BVFQgPSA4NDAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0NBQ0hFX0NMQVNTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbGFzcyBjb3VsZCBub3QgYmUgY2FjaGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX0NBQ0hFX0NMQVNTID0gODQwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9SRU1PVkVfQVRUX0NBQ0hFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhdHRyaWJ1dGUgY291bGQgbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfUkVNT1ZFX0FUVF9DQUNIRSA9IDg0MDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfUkVNT1ZFX0NMQVNTX0NBQ0hFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjbGFzcyBjb3VsZCBub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0FOVF9SRU1PVkVfQ0xBU1NfQ0FDSEUgPSA4NDA0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX1JFVFJJRVZFX0ROXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgYXR0cmlidXRlIGNvdWxkIG5vdCBiZSByZWFkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX1JFVFJJRVZFX0ROID0gODQwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTUlTU0lOR19TVVBSRUZcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gc3VwZXJpb3IgcmVmZXJlbmNlIGhhcyBiZWVuIGNvbmZpZ3VyZWQgZm9yIHRoZSBkaXJlY3Rvcnkgc2VydmljZS4gVGhlIGRpcmVjdG9yeSBzZXJ2aWNlIGlzIHRoZXJlZm9yZSB1bmFibGUgdG8gaXNzdWUgcmVmZXJyYWxzIHRvIG9iamVjdHMgb3V0c2lkZSB0aGlzIGZvcmVzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTUlTU0lOR19TVVBSRUYgPSA4NDA2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX1JFVFJJRVZFX0lOU1RBTkNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBpbnN0YW5jZSB0eXBlIGF0dHJpYnV0ZSBjb3VsZCBub3QgYmUgcmV0cmlldmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX1JFVFJJRVZFX0lOU1RBTkNFID0gODQwNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ09ERV9JTkNPTlNJU1RFTkNZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGludGVybmFsIGVycm9yIGhhcyBvY2N1cnJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ09ERV9JTkNPTlNJU1RFTkNZID0gODQwODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfREFUQUJBU0VfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBkYXRhYmFzZSBlcnJvciBoYXMgb2NjdXJyZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RBVEFCQVNFX0VSUk9SID0gODQwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfR09WRVJOU0lEX01JU1NJTkdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGF0dHJpYnV0ZSBHT1ZFUk5TSUQgaXMgbWlzc2luZy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfR09WRVJOU0lEX01JU1NJTkcgPSA4NDEwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19NSVNTSU5HX0VYUEVDVEVEX0FUVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBleHBlY3RlZCBhdHRyaWJ1dGUgaXMgbWlzc2luZy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTUlTU0lOR19FWFBFQ1RFRF9BVFQgPSA4NDExO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OQ05BTUVfTUlTU0lOR19DUl9SRUZcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBuYW1pbmcgY29udGV4dCBpcyBtaXNzaW5nIGEgY3Jvc3MgcmVmZXJlbmNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OQ05BTUVfTUlTU0lOR19DUl9SRUYgPSA4NDEyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TRUNVUklUWV9DSEVDS0lOR19FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHNlY3VyaXR5IGNoZWNraW5nIGVycm9yIGhhcyBvY2N1cnJlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfU0VDVVJJVFlfQ0hFQ0tJTkdfRVJST1IgPSA4NDEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TQ0hFTUFfTk9UX0xPQURFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2NoZW1hIGlzIG5vdCBsb2FkZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NDSEVNQV9OT1RfTE9BREVEID0gODQxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU0NIRU1BX0FMTE9DX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgYWxsb2NhdGlvbiBmYWlsZWQuIFBsZWFzZSBjaGVjayBpZiB0aGUgbWFjaGluZSBpcyBydW5uaW5nIGxvdyBvbiBtZW1vcnkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NDSEVNQV9BTExPQ19GQUlMRUQgPSA4NDE1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19BVFRfU0NIRU1BX1JFUV9TWU5UQVhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRmFpbGVkIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgc3ludGF4IGZvciB0aGUgYXR0cmlidXRlIHNjaGVtYS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQVRUX1NDSEVNQV9SRVFfU1lOVEFYID0gODQxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfR0NWRVJJRllfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGdsb2JhbCBjYXRhbG9nIHZlcmlmaWNhdGlvbiBmYWlsZWQuIFRoZSBnbG9iYWwgY2F0YWxvZyBpcyBub3QgYXZhaWxhYmxlIG9yIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbi4gU29tZSBwYXJ0IG9mIHRoZSBkaXJlY3RvcnkgaXMgY3VycmVudGx5IG5vdCBhdmFpbGFibGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0dDVkVSSUZZX0VSUk9SID0gODQxNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX1NDSEVNQV9NSVNNQVRDSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVwbGljYXRpb24gb3BlcmF0aW9uIGZhaWxlZCBiZWNhdXNlIG9mIGEgc2NoZW1hIG1pc21hdGNoIGJldHdlZW4gdGhlIHNlcnZlcnMgaW52b2x2ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9TQ0hFTUFfTUlTTUFUQ0ggPSA4NDE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0ZJTkRfRFNBX09CSlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgRFNBIG9iamVjdCBjb3VsZCBub3QgYmUgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfRklORF9EU0FfT0JKID0gODQxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9GSU5EX0VYUEVDVEVEX05DXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuYW1pbmcgY29udGV4dCBjb3VsZCBub3QgYmUgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfRklORF9FWFBFQ1RFRF9OQyA9IDg0MjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfRklORF9OQ19JTl9DQUNIRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbmFtaW5nIGNvbnRleHQgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSBjYWNoZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0FOVF9GSU5EX05DX0lOX0NBQ0hFID0gODQyMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9SRVRSSUVWRV9DSElMRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2hpbGQgb2JqZWN0IGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfUkVUUklFVkVfQ0hJTEQgPSA4NDIyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TRUNVUklUWV9JTExFR0FMX01PRElGWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbW9kaWZpY2F0aW9uIHdhcyBub3QgcGVybWl0dGVkIGZvciBzZWN1cml0eSByZWFzb25zLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19TRUNVUklUWV9JTExFR0FMX01PRElGWSA9IDg0MjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfUkVQTEFDRV9ISURERU5fUkVDXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpb24gY2Fubm90IHJlcGxhY2UgdGhlIGhpZGRlbiByZWNvcmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfUkVQTEFDRV9ISURERU5fUkVDID0gODQyNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQkFEX0hJRVJBUkNIWV9GSUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBoaWVyYXJjaHkgZmlsZSBpcyBpbnZhbGlkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19CQURfSElFUkFSQ0hZX0ZJTEUgPSA4NDI1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19CVUlMRF9ISUVSQVJDSFlfVEFCTEVfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhdHRlbXB0IHRvIGJ1aWxkIHRoZSBoaWVyYXJjaHkgdGFibGUgZmFpbGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19CVUlMRF9ISUVSQVJDSFlfVEFCTEVfRkFJTEVEID0gODQyNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ09ORklHX1BBUkFNX01JU1NJTkdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBpcyBtaXNzaW5nIGZyb20gdGhlIHJlZ2lzdHJ5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DT05GSUdfUEFSQU1fTUlTU0lORyA9IDg0Mjc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NPVU5USU5HX0FCX0lORElDRVNfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhdHRlbXB0IHRvIGNvdW50IHRoZSBhZGRyZXNzIGJvb2sgaW5kaWNlcyBmYWlsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NPVU5USU5HX0FCX0lORElDRVNfRkFJTEVEID0gODQyODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfSElFUkFSQ0hZX1RBQkxFX01BTExPQ19GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGFsbG9jYXRpb24gb2YgdGhlIGhpZXJhcmNoeSB0YWJsZSBmYWlsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0hJRVJBUkNIWV9UQUJMRV9NQUxMT0NfRkFJTEVEID0gODQyOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfSU5URVJOQUxfRkFJTFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgZW5jb3VudGVyZWQgYW4gaW50ZXJuYWwgZmFpbHVyZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSU5URVJOQUxfRkFJTFVSRSA9IDg0MzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1VOS05PV05fRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBzZXJ2aWNlIGVuY291bnRlcmVkIGFuIHVua25vd24gZmFpbHVyZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfVU5LTk9XTl9FUlJPUiA9IDg0MzE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1JPT1RfUkVRVUlSRVNfQ0xBU1NfVE9QXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgcm9vdCBvYmplY3QgcmVxdWlyZXMgYSBjbGFzcyBvZiAndG9wJy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUk9PVF9SRVFVSVJFU19DTEFTU19UT1AgPSA4NDMyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19SRUZVU0lOR19GU01PX1JPTEVTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgZGlyZWN0b3J5IHNlcnZlciBpcyBzaHV0dGluZyBkb3duLCBhbmQgY2Fubm90IHRha2Ugb3duZXJzaGlwIG9mIG5ldyBmbG9hdGluZyBzaW5nbGUtbWFzdGVyIG9wZXJhdGlvbiByb2xlcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUkVGVVNJTkdfRlNNT19ST0xFUyA9IDg0MzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX01JU1NJTkdfRlNNT19TRVRUSU5HU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgaXMgbWlzc2luZyBtYW5kYXRvcnkgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiwgYW5kIGlzIHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIG93bmVyc2hpcCBvZiBmbG9hdGluZyBzaW5nbGUtbWFzdGVyIG9wZXJhdGlvbiByb2xlcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTUlTU0lOR19GU01PX1NFVFRJTkdTID0gODQzNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfVU5BQkxFX1RPX1NVUlJFTkRFUl9ST0xFU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2Ugd2FzIHVuYWJsZSB0byB0cmFuc2ZlciBvd25lcnNoaXAgb2Ygb25lIG9yIG1vcmUgZmxvYXRpbmcgc2luZ2xlLW1hc3RlciBvcGVyYXRpb24gcm9sZXMgdG8gb3RoZXIgc2VydmVycy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfVU5BQkxFX1RPX1NVUlJFTkRFUl9ST0xFUyA9IDg0MzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9HRU5FUklDXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXBsaWNhdGlvbiBvcGVyYXRpb24gZmFpbGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfR0VORVJJQyA9IDg0MzY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9JTlZBTElEX1BBUkFNRVRFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBpbnZhbGlkIHBhcmFtZXRlciB3YXMgc3BlY2lmaWVkIGZvciB0aGlzIHJlcGxpY2F0aW9uIG9wZXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX0lOVkFMSURfUEFSQU1FVEVSID0gODQzNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX0JVU1lcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBzZXJ2aWNlIGlzIHRvbyBidXN5IHRvIGNvbXBsZXRlIHRoZSByZXBsaWNhdGlvbiBvcGVyYXRpb24gYXQgdGhpcyB0aW1lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfQlVTWSA9IDg0Mzg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9CQURfRE5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBzcGVjaWZpZWQgZm9yIHRoaXMgcmVwbGljYXRpb24gb3BlcmF0aW9uIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9CQURfRE4gPSA4NDM5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfQkFEX05DXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBuYW1pbmcgY29udGV4dCBzcGVjaWZpZWQgZm9yIHRoaXMgcmVwbGljYXRpb24gb3BlcmF0aW9uIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9CQURfTkMgPSA4NDQwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfRE5fRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgc3BlY2lmaWVkIGZvciB0aGlzIHJlcGxpY2F0aW9uIG9wZXJhdGlvbiBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX0ROX0VYSVNUUyA9IDg0NDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9JTlRFUk5BTF9FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVwbGljYXRpb24gc3lzdGVtIGVuY291bnRlcmVkIGFuIGludGVybmFsIGVycm9yLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfSU5URVJOQUxfRVJST1IgPSA4NDQyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfSU5DT05TSVNURU5UX0RJVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVwbGljYXRpb24gb3BlcmF0aW9uIGVuY291bnRlcmVkIGEgZGF0YWJhc2UgaW5jb25zaXN0ZW5jeS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX0lOQ09OU0lTVEVOVF9ESVQgPSA4NDQzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfQ09OTkVDVElPTl9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlcnZlciBzcGVjaWZpZWQgZm9yIHRoaXMgcmVwbGljYXRpb24gb3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBjb250YWN0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9DT05ORUNUSU9OX0ZBSUxFRCA9IDg0NDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9CQURfSU5TVEFOQ0VfVFlQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVwbGljYXRpb24gb3BlcmF0aW9uIGVuY291bnRlcmVkIGFuIG9iamVjdCB3aXRoIGFuIGludmFsaWQgaW5zdGFuY2UgdHlwZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX0JBRF9JTlNUQU5DRV9UWVBFID0gODQ0NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX09VVF9PRl9NRU1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcGxpY2F0aW9uIG9wZXJhdGlvbiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfT1VUX09GX01FTSA9IDg0NDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9NQUlMX1BST0JMRU1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcGxpY2F0aW9uIG9wZXJhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvciB3aXRoIHRoZSBtYWlsIHN5c3RlbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX01BSUxfUFJPQkxFTSA9IDg0NDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9SRUZfQUxSRUFEWV9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcGxpY2F0aW9uIHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRhcmdldCBzZXJ2ZXIgYWxyZWFkeSBleGlzdHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9SRUZfQUxSRUFEWV9FWElTVFMgPSA4NDQ4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfUkVGX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVwbGljYXRpb24gcmVmZXJlbmNlIGluZm9ybWF0aW9uIGZvciB0aGUgdGFyZ2V0IHNlcnZlciBkb2VzIG5vdCBleGlzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX1JFRl9OT1RfRk9VTkQgPSA4NDQ5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfT0JKX0lTX1JFUF9TT1VSQ0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5hbWluZyBjb250ZXh0IGNhbm5vdCBiZSByZW1vdmVkIGJlY2F1c2UgaXQgaXMgcmVwbGljYXRlZCB0byBhbm90aGVyIHNlcnZlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX09CSl9JU19SRVBfU09VUkNFID0gODQ1MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX0RCX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXBsaWNhdGlvbiBvcGVyYXRpb24gZW5jb3VudGVyZWQgYSBkYXRhYmFzZSBlcnJvci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX0RCX0VSUk9SID0gODQ1MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX05PX1JFUExJQ0Fcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG5hbWluZyBjb250ZXh0IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHJlbW92ZWQgb3IgaXMgbm90IHJlcGxpY2F0ZWQgZnJvbSB0aGUgc3BlY2lmaWVkIHNlcnZlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX05PX1JFUExJQ0EgPSA4NDUyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfQUNDRVNTX0RFTklFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBSZXBsaWNhdGlvbiBhY2Nlc3Mgd2FzIGRlbmllZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX0FDQ0VTU19ERU5JRUQgPSA4NDUzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfTk9UX1NVUFBPUlRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiB0aGUgZGlyZWN0b3J5IHNlcnZpY2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9OT1RfU1VQUE9SVEVEID0gODQ1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX1JQQ19DQU5DRUxMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcGxpY2F0aW9uIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCB3YXMgY2FuY2VsbGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfUlBDX0NBTkNFTExFRCA9IDg0NTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9TT1VSQ0VfRElTQUJMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNvdXJjZSBzZXJ2ZXIgaXMgY3VycmVudGx5IHJlamVjdGluZyByZXBsaWNhdGlvbiByZXF1ZXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX1NPVVJDRV9ESVNBQkxFRCA9IDg0NTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9TSU5LX0RJU0FCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkZXN0aW5hdGlvbiBzZXJ2ZXIgaXMgY3VycmVudGx5IHJlamVjdGluZyByZXBsaWNhdGlvbiByZXF1ZXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX1NJTktfRElTQUJMRUQgPSA4NDU3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfTkFNRV9DT0xMSVNJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcGxpY2F0aW9uIG9wZXJhdGlvbiBmYWlsZWQgZHVlIHRvIGEgY29sbGlzaW9uIG9mIG9iamVjdCBuYW1lcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX05BTUVfQ09MTElTSU9OID0gODQ1ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX1NPVVJDRV9SRUlOU1RBTExFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVwbGljYXRpb24gc291cmNlIGhhcyBiZWVuIHJlaW5zdGFsbGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfU09VUkNFX1JFSU5TVEFMTEVEID0gODQ1OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX01JU1NJTkdfUEFSRU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXBsaWNhdGlvbiBvcGVyYXRpb24gZmFpbGVkIGJlY2F1c2UgYSByZXF1aXJlZCBwYXJlbnQgb2JqZWN0IGlzIG1pc3NpbmcuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9NSVNTSU5HX1BBUkVOVCA9IDg0NjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9QUkVFTVBURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcGxpY2F0aW9uIG9wZXJhdGlvbiB3YXMgcHJlZW1wdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfUFJFRU1QVEVEID0gODQ2MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX0FCQU5ET05fU1lOQ1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVwbGljYXRpb24gc3luY2hyb25pemF0aW9uIGF0dGVtcHQgd2FzIGFiYW5kb25lZCBiZWNhdXNlIG9mIGEgbGFjayBvZiB1cGRhdGVzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfQUJBTkRPTl9TWU5DID0gODQ2MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX1NIVVRET1dOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXBsaWNhdGlvbiBvcGVyYXRpb24gd2FzIHRlcm1pbmF0ZWQgYmVjYXVzZSB0aGUgc3lzdGVtIGlzIHNodXR0aW5nIGRvd24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9TSFVURE9XTiA9IDg0NjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9JTkNPTVBBVElCTEVfUEFSVElBTF9TRVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU3luY2hyb25pemF0aW9uIGF0dGVtcHQgZmFpbGVkIGJlY2F1c2UgdGhlIGRlc3RpbmF0aW9uIERDIGlzIGN1cnJlbnRseSB3YWl0aW5nIHRvIHN5bmNocm9uaXplIG5ldyBwYXJ0aWFsIGF0dHJpYnV0ZXMgZnJvbSBzb3VyY2UuIFRoaXMgY29uZGl0aW9uIGlzIG5vcm1hbCBpZiBhIHJlY2VudCBzY2hlbWEgY2hhbmdlIG1vZGlmaWVkIHRoZSBwYXJ0aWFsIGF0dHJpYnV0ZSBzZXQuIFRoZSBkZXN0aW5hdGlvbiBwYXJ0aWFsIGF0dHJpYnV0ZSBzZXQgaXMgbm90IGEgc3Vic2V0IG9mIHNvdXJjZSBwYXJ0aWFsIGF0dHJpYnV0ZSBzZXQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9JTkNPTVBBVElCTEVfUEFSVElBTF9TRVQgPSA4NDY0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfU09VUkNFX0lTX1BBUlRJQUxfUkVQTElDQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVwbGljYXRpb24gc3luY2hyb25pemF0aW9uIGF0dGVtcHQgZmFpbGVkIGJlY2F1c2UgYSBtYXN0ZXIgcmVwbGljYSBhdHRlbXB0ZWQgdG8gc3luYyBmcm9tIGEgcGFydGlhbCByZXBsaWNhLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfU09VUkNFX0lTX1BBUlRJQUxfUkVQTElDQSA9IDg0NjU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9FWFROX0NPTk5FQ1RJT05fRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZXJ2ZXIgc3BlY2lmaWVkIGZvciB0aGlzIHJlcGxpY2F0aW9uIG9wZXJhdGlvbiB3YXMgY29udGFjdGVkLCBidXQgdGhhdCBzZXJ2ZXIgd2FzIHVuYWJsZSB0byBjb250YWN0IGFuIGFkZGl0aW9uYWwgc2VydmVyIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfRVhUTl9DT05ORUNUSU9OX0ZBSUxFRCA9IDg0NjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lOU1RBTExfU0NIRU1BX01JU01BVENIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB2ZXJzaW9uIG9mIHRoZSBBY3RpdmUgRGlyZWN0b3J5IHNjaGVtYSBvZiB0aGUgc291cmNlIGZvcmVzdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIG9mIEFjdGl2ZSBEaXJlY3Rvcnkgb24gdGhpcyBjb21wdXRlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSU5TVEFMTF9TQ0hFTUFfTUlTTUFUQ0ggPSA4NDY3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EVVBfTElOS19JRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgdXBkYXRlIGZhaWxlZDogQW4gYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbGluayBpZGVudGlmaWVyIGFscmVhZHkgZXhpc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EVVBfTElOS19JRCA9IDg0Njg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05BTUVfRVJST1JfUkVTT0xWSU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5hbWUgdHJhbnNsYXRpb246IEdlbmVyaWMgcHJvY2Vzc2luZyBlcnJvci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTkFNRV9FUlJPUl9SRVNPTFZJTkcgPSA4NDY5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OQU1FX0VSUk9SX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOYW1lIHRyYW5zbGF0aW9uOiBDb3VsZCBub3QgZmluZCB0aGUgbmFtZSBvciBpbnN1ZmZpY2llbnQgcmlnaHQgdG8gc2VlIG5hbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05BTUVfRVJST1JfTk9UX0ZPVU5EID0gODQ3MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTkFNRV9FUlJPUl9OT1RfVU5JUVVFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5hbWUgdHJhbnNsYXRpb246IElucHV0IG5hbWUgbWFwcGVkIHRvIG1vcmUgdGhhbiBvbmUgb3V0cHV0IG5hbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05BTUVfRVJST1JfTk9UX1VOSVFVRSA9IDg0NzE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05BTUVfRVJST1JfTk9fTUFQUElOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOYW1lIHRyYW5zbGF0aW9uOiBJbnB1dCBuYW1lIGZvdW5kLCBidXQgbm90IHRoZSBhc3NvY2lhdGVkIG91dHB1dCBmb3JtYXQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05BTUVfRVJST1JfTk9fTUFQUElORyA9IDg0NzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05BTUVfRVJST1JfRE9NQUlOX09OTFlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTmFtZSB0cmFuc2xhdGlvbjogVW5hYmxlIHRvIHJlc29sdmUgY29tcGxldGVseSwgb25seSB0aGUgZG9tYWluIHdhcyBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTkFNRV9FUlJPUl9ET01BSU5fT05MWSA9IDg0NzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05BTUVfRVJST1JfTk9fU1lOVEFDVElDQUxfTUFQUElOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOYW1lIHRyYW5zbGF0aW9uOiBVbmFibGUgdG8gcGVyZm9ybSBwdXJlbHkgc3ludGFjdGljYWwgbWFwcGluZyBhdCB0aGUgY2xpZW50IHdpdGhvdXQgZ29pbmcgb3V0IHRvIHRoZSB3aXJlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OQU1FX0VSUk9SX05PX1NZTlRBQ1RJQ0FMX01BUFBJTkcgPSA4NDc0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19XUk9OR19PTV9PQkpfQ0xBU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIE9NLU9iamVjdC1DbGFzcyBzcGVjaWZpZWQgaXMgaW5jb3JyZWN0IGZvciBhbiBhdHRyaWJ1dGUgd2l0aCB0aGUgc3BlY2lmaWVkIHN5bnRheC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfV1JPTkdfT01fT0JKX0NMQVNTID0gODQ3NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX1JFUExfUEVORElOR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVwbGljYXRpb24gcmVxdWVzdCBoYXMgYmVlbiBwb3N0ZWQ7IHdhaXRpbmcgZm9yIHJlcGx5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfUkVQTF9QRU5ESU5HID0gODQ3NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFNfUkVRVUlSRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gcmVxdWlyZXMgYSBkaXJlY3Rvcnkgc2VydmljZSwgYW5kIG5vbmUgd2FzIGF2YWlsYWJsZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFNfUkVRVUlSRUQgPSA4NDc4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19JTlZBTElEX0xEQVBfRElTUExBWV9OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBMREFQIGRpc3BsYXkgbmFtZSBvZiB0aGUgY2xhc3Mgb3IgYXR0cmlidXRlIGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19JTlZBTElEX0xEQVBfRElTUExBWV9OQU1FID0gODQ3OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9OX0JBU0VfU0VBUkNIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgc2VhcmNoIG9wZXJhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgYmFzZSBzZWFyY2hlcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTk9OX0JBU0VfU0VBUkNIID0gODQ4MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9SRVRSSUVWRV9BVFRTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzZWFyY2ggZmFpbGVkIHRvIHJldHJpZXZlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZGF0YWJhc2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfUkVUUklFVkVfQVRUUyA9IDg0ODE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0JBQ0tMSU5LX1dJVEhPVVRfTElOS1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc2NoZW1hIHVwZGF0ZSBvcGVyYXRpb24gdHJpZWQgdG8gYWRkIGEgYmFja3dhcmQgbGluayBhdHRyaWJ1dGUgdGhhdCBoYXMgbm8gY29ycmVzcG9uZGluZyBmb3J3YXJkIGxpbmsuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0JBQ0tMSU5LX1dJVEhPVVRfTElOSyA9IDg0ODI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0VQT0NIX01JU01BVENIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gb2YgYSBjcm9zcy1kb21haW4gbW92ZSBkbyBub3QgYWdyZWUgb24gdGhlIG9iamVjdCdzIGVwb2NoIG51bWJlci4gIEVpdGhlciBzb3VyY2Ugb3IgZGVzdGluYXRpb24gZG9lcyBub3QgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIG9iamVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRVBPQ0hfTUlTTUFUQ0ggPSA4NDgzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TUkNfTkFNRV9NSVNNQVRDSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG9mIGEgY3Jvc3MtZG9tYWluIG1vdmUgZG8gbm90IGFncmVlIG9uIHRoZSBvYmplY3QncyBjdXJyZW50IG5hbWUuICBFaXRoZXIgc291cmNlIG9yIGRlc3RpbmF0aW9uIGRvZXMgbm90IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBvYmplY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NSQ19OQU1FX01JU01BVENIID0gODQ4NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU1JDX0FORF9EU1RfTkNfSURFTlRJQ0FMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gZm9yIHRoZSBjcm9zcy1kb21haW4gbW92ZSBvcGVyYXRpb24gYXJlIGlkZW50aWNhbC4gIENhbGxlciBzaG91bGQgdXNlIGxvY2FsIG1vdmUgb3BlcmF0aW9uIGluc3RlYWQgb2YgY3Jvc3MtZG9tYWluIG1vdmUgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19TUkNfQU5EX0RTVF9OQ19JREVOVElDQUwgPSA4NDg1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EU1RfTkNfTUlTTUFUQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBmb3IgYSBjcm9zcy1kb21haW4gbW92ZSBhcmUgbm90IGluIGFncmVlbWVudCBvbiB0aGUgbmFtaW5nIGNvbnRleHRzIGluIHRoZSBmb3Jlc3QuICBFaXRoZXIgc291cmNlIG9yIGRlc3RpbmF0aW9uIGRvZXMgbm90IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBQYXJ0aXRpb25zIGNvbnRhaW5lci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFNUX05DX01JU01BVENIID0gODQ4NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9UX0FVVEhPUklUSVZFX0ZPUl9EU1RfTkNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRGVzdGluYXRpb24gb2YgYSBjcm9zcy1kb21haW4gbW92ZSBpcyBub3QgYXV0aG9yaXRhdGl2ZSBmb3IgdGhlIGRlc3RpbmF0aW9uIG5hbWluZyBjb250ZXh0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT1RfQVVUSE9SSVRJVkVfRk9SX0RTVF9OQyA9IDg0ODc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1NSQ19HVUlEX01JU01BVENIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gb2YgYSBjcm9zcy1kb21haW4gbW92ZSBkbyBub3QgYWdyZWUgb24gdGhlIGlkZW50aXR5IG9mIHRoZSBzb3VyY2Ugb2JqZWN0LiAgRWl0aGVyIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBkb2VzIG5vdCBoYXZlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgc291cmNlIG9iamVjdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfU1JDX0dVSURfTUlTTUFUQ0ggPSA4NDg4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX01PVkVfREVMRVRFRF9PQkpFQ1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgT2JqZWN0IGJlaW5nIG1vdmVkIGFjcm9zcy1kb21haW5zIGlzIGFscmVhZHkga25vd24gdG8gYmUgZGVsZXRlZCBieSB0aGUgZGVzdGluYXRpb24gc2VydmVyLiAgVGhlIHNvdXJjZSBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHNvdXJjZSBvYmplY3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfTU9WRV9ERUxFVEVEX09CSkVDVCA9IDg0ODk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1BEQ19PUEVSQVRJT05fSU5fUFJPR1JFU1Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW5vdGhlciBvcGVyYXRpb24gd2hpY2ggcmVxdWlyZXMgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgUERDIEZTTU8gaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUERDX09QRVJBVElPTl9JTl9QUk9HUkVTUyA9IDg0OTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NST1NTX0RPTUFJTl9DTEVBTlVQX1JFUURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBjcm9zcy1kb21haW4gbW92ZSBvcGVyYXRpb24gZmFpbGVkIHN1Y2ggdGhhdCB0d28gdmVyc2lvbnMgb2YgdGhlIG1vdmVkIG9iamVjdCBleGlzdCAtIG9uZSBlYWNoIGluIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvbWFpbnMuICBUaGUgZGVzdGluYXRpb24gb2JqZWN0IG5lZWRzIHRvIGJlIHJlbW92ZWQgdG8gcmVzdG9yZSB0aGUgc3lzdGVtIHRvIGEgY29uc2lzdGVudCBzdGF0ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ1JPU1NfRE9NQUlOX0NMRUFOVVBfUkVRRCA9IDg0OTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lMTEVHQUxfWERPTV9NT1ZFX09QRVJBVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIG9iamVjdCBtYXkgbm90IGJlIG1vdmVkIGFjcm9zcyBkb21haW4gYm91bmRhcmllcyBlaXRoZXIgYmVjYXVzZSBjcm9zcy1kb21haW4gbW92ZXMgZm9yIHRoaXMgY2xhc3MgYXJlIGRpc2FsbG93ZWQsIG9yIHRoZSBvYmplY3QgaGFzIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJpc3RpY3MsIGUuZy46IHRydXN0IGFjY291bnQgb3IgcmVzdHJpY3RlZCBSSUQsIHdoaWNoIHByZXZlbnQgaXRzIG1vdmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lMTEVHQUxfWERPTV9NT1ZFX09QRVJBVElPTiA9IDg0OTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfV0lUSF9BQ0NUX0dST1VQX01FTUJFUlNIUFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQ2FuJ3QgbW92ZSBvYmplY3RzIHdpdGggbWVtYmVyc2hpcHMgYWNyb3NzIGRvbWFpbiBib3VuZGFyaWVzIGFzIG9uY2UgbW92ZWQsIHRoaXMgd291bGQgdmlvbGF0ZSB0aGUgbWVtYmVyc2hpcCBjb25kaXRpb25zIG9mIHRoZSBhY2NvdW50IGdyb3VwLiAgUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSBhbnkgYWNjb3VudCBncm91cCBtZW1iZXJzaGlwcyBhbmQgcmV0cnkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfV0lUSF9BQ0NUX0dST1VQX01FTUJFUlNIUFMgPSA4NDkzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OQ19NVVNUX0hBVkVfTkNfUEFSRU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgbmFtaW5nIGNvbnRleHQgaGVhZCBtdXN0IGJlIHRoZSBpbW1lZGlhdGUgY2hpbGQgb2YgYW5vdGhlciBuYW1pbmcgY29udGV4dCBoZWFkLCBub3Qgb2YgYW4gaW50ZXJpb3Igbm9kZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTkNfTVVTVF9IQVZFX05DX1BBUkVOVCA9IDg0OTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NSX0lNUE9TU0lCTEVfVE9fVkFMSURBVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBjYW5ub3QgdmFsaWRhdGUgdGhlIHByb3Bvc2VkIG5hbWluZyBjb250ZXh0IG5hbWUgYmVjYXVzZSBpdCBkb2VzIG5vdCBob2xkIGEgcmVwbGljYSBvZiB0aGUgbmFtaW5nIGNvbnRleHQgYWJvdmUgdGhlIHByb3Bvc2VkIG5hbWluZyBjb250ZXh0LiAgUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkb21haW4gbmFtaW5nIG1hc3RlciByb2xlIGlzIGhlbGQgYnkgYSBzZXJ2ZXIgdGhhdCBpcyBjb25maWd1cmVkIGFzIGEgZ2xvYmFsIGNhdGFsb2cgc2VydmVyLCBhbmQgdGhhdCB0aGUgc2VydmVyIGlzIHVwIHRvIGRhdGUgd2l0aCBpdHMgcmVwbGljYXRpb24gcGFydG5lcnMuIChBcHBsaWVzIG9ubHkgdG8gV2luZG93cyAyMDAwIERvbWFpbiBOYW1pbmcgbWFzdGVycylcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ1JfSU1QT1NTSUJMRV9UT19WQUxJREFURSA9IDg0OTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RTVF9ET01BSU5fTk9UX05BVElWRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBEZXN0aW5hdGlvbiBkb21haW4gbXVzdCBiZSBpbiBuYXRpdmUgbW9kZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFNUX0RPTUFJTl9OT1RfTkFUSVZFID0gODQ5NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTUlTU0lOR19JTkZSQVNUUlVDVFVSRV9DT05UQUlORVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBjYW4gbm90IGJlIHBlcmZvcm1lZCBiZWNhdXNlIHRoZSBzZXJ2ZXIgZG9lcyBub3QgaGF2ZSBhbiBpbmZyYXN0cnVjdHVyZSBjb250YWluZXIgaW4gdGhlIGRvbWFpbiBvZiBpbnRlcmVzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTUlTU0lOR19JTkZSQVNUUlVDVFVSRV9DT05UQUlORVIgPSA4NDk3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX01PVkVfQUNDT1VOVF9HUk9VUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDcm9zcy1kb21haW4gbW92ZSBvZiBub24tZW1wdHkgYWNjb3VudCBncm91cHMgaXMgbm90IGFsbG93ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfTU9WRV9BQ0NPVU5UX0dST1VQID0gODQ5ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9NT1ZFX1JFU09VUkNFX0dST1VQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENyb3NzLWRvbWFpbiBtb3ZlIG9mIG5vbi1lbXB0eSByZXNvdXJjZSBncm91cHMgaXMgbm90IGFsbG93ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfTU9WRV9SRVNPVVJDRV9HUk9VUCA9IDg0OTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lOVkFMSURfU0VBUkNIX0ZMQUdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNlYXJjaCBmbGFncyBmb3IgdGhlIGF0dHJpYnV0ZSBhcmUgaW52YWxpZC4gVGhlIEFOUiBiaXQgaXMgdmFsaWQgb25seSBvbiBhdHRyaWJ1dGVzIG9mIFVuaWNvZGUgb3IgVGVsZXRleCBzdHJpbmdzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19JTlZBTElEX1NFQVJDSF9GTEFHID0gODUwMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9fVFJFRV9ERUxFVEVfQUJPVkVfTkNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVHJlZSBkZWxldGlvbnMgc3RhcnRpbmcgYXQgYW4gb2JqZWN0IHdoaWNoIGhhcyBhbiBOQyBoZWFkIGFzIGEgZGVzY2VuZGFudCBhcmUgbm90IGFsbG93ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PX1RSRUVfREVMRVRFX0FCT1ZFX05DID0gODUwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ09VTEROVF9MT0NLX1RSRUVfRk9SX0RFTEVURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgZmFpbGVkIHRvIGxvY2sgYSB0cmVlIGluIHByZXBhcmF0aW9uIGZvciBhIHRyZWUgZGVsZXRpb24gYmVjYXVzZSB0aGUgdHJlZSB3YXMgaW4gdXNlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DT1VMRE5UX0xPQ0tfVFJFRV9GT1JfREVMRVRFID0gODUwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ09VTEROVF9JREVOVElGWV9PQkpFQ1RTX0ZPUl9UUkVFX0RFTEVURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgZmFpbGVkIHRvIGlkZW50aWZ5IHRoZSBsaXN0IG9mIG9iamVjdHMgdG8gZGVsZXRlIHdoaWxlIGF0dGVtcHRpbmcgYSB0cmVlIGRlbGV0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DT1VMRE5UX0lERU5USUZZX09CSkVDVFNfRk9SX1RSRUVfREVMRVRFID0gODUwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU0FNX0lOSVRfRkFJTFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTZWN1cml0eSBBY2NvdW50cyBNYW5hZ2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZCBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3I6ICUxLlxuLy8gIEVycm9yIFN0YXR1czogMHglMi4gQ2xpY2sgT0sgdG8gc2h1dCBkb3duIHRoZSBzeXN0ZW0gYW5kIHJlYm9vdCBpbnRvIERpcmVjdG9yeSBTZXJ2aWNlcyBSZXN0b3JlIE1vZGUuIENoZWNrIHRoZSBldmVudCBsb2cgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19TQU1fSU5JVF9GQUlMVVJFID0gODUwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU0VOU0lUSVZFX0dST1VQX1ZJT0xBVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBPbmx5IGFuIGFkbWluaXN0cmF0b3IgY2FuIG1vZGlmeSB0aGUgbWVtYmVyc2hpcCBsaXN0IG9mIGFuIGFkbWluaXN0cmF0aXZlIGdyb3VwLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19TRU5TSVRJVkVfR1JPVVBfVklPTEFUSU9OID0gODUwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9NT0RfUFJJTUFSWUdST1VQSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQ2Fubm90IGNoYW5nZSB0aGUgcHJpbWFyeSBncm91cCBJRCBvZiBhIGRvbWFpbiBjb250cm9sbGVyIGFjY291bnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfTU9EX1BSSU1BUllHUk9VUElEID0gODUwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfSUxMRUdBTF9CQVNFX1NDSEVNQV9NT0Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG1vZGlmeSB0aGUgYmFzZSBzY2hlbWEuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lMTEVHQUxfQkFTRV9TQ0hFTUFfTU9EID0gODUwNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9OU0FGRV9TQ0hFTUFfQ0hBTkdFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFkZGluZyBhIG5ldyBtYW5kYXRvcnkgYXR0cmlidXRlIHRvIGFuIGV4aXN0aW5nIGNsYXNzLCBkZWxldGluZyBhIG1hbmRhdG9yeSBhdHRyaWJ1dGUgZnJvbSBhbiBleGlzdGluZyBjbGFzcywgb3IgYWRkaW5nIGFuIG9wdGlvbmFsIGF0dHJpYnV0ZSB0byB0aGUgc3BlY2lhbCBjbGFzcyBUb3AgdGhhdCBpcyBub3QgYSBiYWNrbGluayBhdHRyaWJ1dGUgKGRpcmVjdGx5IG9yIHRocm91Z2ggaW5oZXJpdGFuY2UsIGZvciBleGFtcGxlLCBieSBhZGRpbmcgb3IgZGVsZXRpbmcgYW4gYXV4aWxpYXJ5IGNsYXNzKSBpcyBub3QgYWxsb3dlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTk9OU0FGRV9TQ0hFTUFfQ0hBTkdFID0gODUwODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU0NIRU1BX1VQREFURV9ESVNBTExPV0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNjaGVtYSB1cGRhdGUgaXMgbm90IGFsbG93ZWQgb24gdGhpcyBEQyBiZWNhdXNlIHRoZSBEQyBpcyBub3QgdGhlIHNjaGVtYSBGU01PIFJvbGUgT3duZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NDSEVNQV9VUERBVEVfRElTQUxMT1dFRCA9IDg1MDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfQ1JFQVRFX1VOREVSX1NDSEVNQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBvYmplY3Qgb2YgdGhpcyBjbGFzcyBjYW5ub3QgYmUgY3JlYXRlZCB1bmRlciB0aGUgc2NoZW1hIGNvbnRhaW5lci4gWW91IGNhbiBvbmx5IGNyZWF0ZSBhdHRyaWJ1dGUtc2NoZW1hIGFuZCBjbGFzcy1zY2hlbWEgb2JqZWN0cyB1bmRlciB0aGUgc2NoZW1hIGNvbnRhaW5lci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0FOVF9DUkVBVEVfVU5ERVJfU0NIRU1BID0gODUxMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfSU5TVEFMTF9OT19TUkNfU0NIX1ZFUlNJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcGxpY2EvY2hpbGQgaW5zdGFsbCBmYWlsZWQgdG8gZ2V0IHRoZSBvYmplY3RWZXJzaW9uIGF0dHJpYnV0ZSBvbiB0aGUgc2NoZW1hIGNvbnRhaW5lciBvbiB0aGUgc291cmNlIERDLiBFaXRoZXIgdGhlIGF0dHJpYnV0ZSBpcyBtaXNzaW5nIG9uIHRoZSBzY2hlbWEgY29udGFpbmVyIG9yIHRoZSBjcmVkZW50aWFscyBzdXBwbGllZCBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHJlYWQgaXQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lOU1RBTExfTk9fU1JDX1NDSF9WRVJTSU9OID0gODUxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfSU5TVEFMTF9OT19TQ0hfVkVSU0lPTl9JTl9JTklGSUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXBsaWNhL2NoaWxkIGluc3RhbGwgZmFpbGVkIHRvIHJlYWQgdGhlIG9iamVjdFZlcnNpb24gYXR0cmlidXRlIGluIHRoZSBTQ0hFTUEgc2VjdGlvbiBvZiB0aGUgZmlsZSBzY2hlbWEuaW5pIGluIHRoZSBzeXN0ZW0zMiBkaXJlY3RvcnkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lOU1RBTExfTk9fU0NIX1ZFUlNJT05fSU5fSU5JRklMRSA9IDg1MTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lOVkFMSURfR1JPVVBfVFlQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGdyb3VwIHR5cGUgaXMgaW52YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSU5WQUxJRF9HUk9VUF9UWVBFID0gODUxMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9fTkVTVF9HTE9CQUxHUk9VUF9JTl9NSVhFRERPTUFJTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBZb3UgY2Fubm90IG5lc3QgZ2xvYmFsIGdyb3VwcyBpbiBhIG1peGVkIGRvbWFpbiBpZiB0aGUgZ3JvdXAgaXMgc2VjdXJpdHktZW5hYmxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTk9fTkVTVF9HTE9CQUxHUk9VUF9JTl9NSVhFRERPTUFJTiA9IDg1MTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05PX05FU1RfTE9DQUxHUk9VUF9JTl9NSVhFRERPTUFJTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBZb3UgY2Fubm90IG5lc3QgbG9jYWwgZ3JvdXBzIGluIGEgbWl4ZWQgZG9tYWluIGlmIHRoZSBncm91cCBpcyBzZWN1cml0eS1lbmFibGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT19ORVNUX0xPQ0FMR1JPVVBfSU5fTUlYRURET01BSU4gPSA4NTE1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19HTE9CQUxfQ0FOVF9IQVZFX0xPQ0FMX01FTUJFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGdsb2JhbCBncm91cCBjYW5ub3QgaGF2ZSBhIGxvY2FsIGdyb3VwIGFzIGEgbWVtYmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19HTE9CQUxfQ0FOVF9IQVZFX0xPQ0FMX01FTUJFUiA9IDg1MTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0dMT0JBTF9DQU5UX0hBVkVfVU5JVkVSU0FMX01FTUJFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGdsb2JhbCBncm91cCBjYW5ub3QgaGF2ZSBhIHVuaXZlcnNhbCBncm91cCBhcyBhIG1lbWJlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfR0xPQkFMX0NBTlRfSEFWRV9VTklWRVJTQUxfTUVNQkVSID0gODUxNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfVU5JVkVSU0FMX0NBTlRfSEFWRV9MT0NBTF9NRU1CRVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSB1bml2ZXJzYWwgZ3JvdXAgY2Fubm90IGhhdmUgYSBsb2NhbCBncm91cCBhcyBhIG1lbWJlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfVU5JVkVSU0FMX0NBTlRfSEFWRV9MT0NBTF9NRU1CRVIgPSA4NTE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19HTE9CQUxfQ0FOVF9IQVZFX0NST1NTRE9NQUlOX01FTUJFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGdsb2JhbCBncm91cCBjYW5ub3QgaGF2ZSBhIGNyb3NzLWRvbWFpbiBtZW1iZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0dMT0JBTF9DQU5UX0hBVkVfQ1JPU1NET01BSU5fTUVNQkVSID0gODUxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTE9DQUxfQ0FOVF9IQVZFX0NST1NTRE9NQUlOX0xPQ0FMX01FTUJFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGxvY2FsIGdyb3VwIGNhbm5vdCBoYXZlIGFub3RoZXIgY3Jvc3MgZG9tYWluIGxvY2FsIGdyb3VwIGFzIGEgbWVtYmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19MT0NBTF9DQU5UX0hBVkVfQ1JPU1NET01BSU5fTE9DQUxfTUVNQkVSID0gODUyMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfSEFWRV9QUklNQVJZX01FTUJFUlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBncm91cCB3aXRoIHByaW1hcnkgbWVtYmVycyBjYW5ub3QgY2hhbmdlIHRvIGEgc2VjdXJpdHktZGlzYWJsZWQgZ3JvdXAuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0hBVkVfUFJJTUFSWV9NRU1CRVJTID0gODUyMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU1RSSU5HX1NEX0NPTlZFUlNJT05fRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzY2hlbWEgY2FjaGUgbG9hZCBmYWlsZWQgdG8gY29udmVydCB0aGUgc3RyaW5nIGRlZmF1bHQgU0Qgb24gYSBjbGFzcy1zY2hlbWEgb2JqZWN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19TVFJJTkdfU0RfQ09OVkVSU0lPTl9GQUlMRUQgPSA4NTIyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OQU1JTkdfTUFTVEVSX0dDXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE9ubHkgRFNBcyBjb25maWd1cmVkIHRvIGJlIEdsb2JhbCBDYXRhbG9nIHNlcnZlcnMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gaG9sZCB0aGUgRG9tYWluIE5hbWluZyBNYXN0ZXIgRlNNTyByb2xlLiAoQXBwbGllcyBvbmx5IHRvIFdpbmRvd3MgMjAwMCBzZXJ2ZXJzKVxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OQU1JTkdfTUFTVEVSX0dDID0gODUyMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRE5TX0xPT0tVUF9GQUlMVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBEU0Egb3BlcmF0aW9uIGlzIHVuYWJsZSB0byBwcm9jZWVkIGJlY2F1c2Ugb2YgYSBETlMgbG9va3VwIGZhaWx1cmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0ROU19MT09LVVBfRkFJTFVSRSA9IDg1MjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NPVUxETlRfVVBEQVRFX1NQTlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgV2hpbGUgcHJvY2Vzc2luZyBhIGNoYW5nZSB0byB0aGUgRE5TIEhvc3QgTmFtZSBmb3IgYW4gb2JqZWN0LCB0aGUgU2VydmljZSBQcmluY2lwYWwgTmFtZSB2YWx1ZXMgY291bGQgbm90IGJlIGtlcHQgaW4gc3luYy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ09VTEROVF9VUERBVEVfU1BOUyA9IDg1MjU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfUkVUUklFVkVfU0Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIFNlY3VyaXR5IERlc2NyaXB0b3IgYXR0cmlidXRlIGNvdWxkIG5vdCBiZSByZWFkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX1JFVFJJRVZFX1NEID0gODUyNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfS0VZX05PVF9VTklRVUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9iamVjdCByZXF1ZXN0ZWQgd2FzIG5vdCBmb3VuZCwgYnV0IGFuIG9iamVjdCB3aXRoIHRoYXQga2V5IHdhcyBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfS0VZX05PVF9VTklRVUUgPSA4NTI3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19XUk9OR19MSU5LRURfQVRUX1NZTlRBWFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3ludGF4IG9mIHRoZSBsaW5rZWQgYXR0cmlidXRlIGJlaW5nIGFkZGVkIGlzIGluY29ycmVjdC4gRm9yd2FyZCBsaW5rcyBjYW4gb25seSBoYXZlIHN5bnRheCAyLjUuNS4xLCAyLjUuNS43LCBhbmQgMi41LjUuMTQsIGFuZCBiYWNrbGlua3MgY2FuIG9ubHkgaGF2ZSBzeW50YXggMi41LjUuMVxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19XUk9OR19MSU5LRURfQVRUX1NZTlRBWCA9IDg1Mjg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1NBTV9ORUVEX0JPT1RLRVlfUEFTU1dPUkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2VjdXJpdHkgQWNjb3VudCBNYW5hZ2VyIG5lZWRzIHRvIGdldCB0aGUgYm9vdCBwYXNzd29yZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfU0FNX05FRURfQk9PVEtFWV9QQVNTV09SRCA9IDg1Mjk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1NBTV9ORUVEX0JPT1RLRVlfRkxPUFBZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNlY3VyaXR5IEFjY291bnQgTWFuYWdlciBuZWVkcyB0byBnZXQgdGhlIGJvb3Qga2V5IGZyb20gZmxvcHB5IGRpc2suXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NBTV9ORUVEX0JPT1RLRVlfRkxPUFBZID0gODUzMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9TVEFSVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBEaXJlY3RvcnkgU2VydmljZSBjYW5ub3Qgc3RhcnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfU1RBUlQgPSA4NTMxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19JTklUX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRGlyZWN0b3J5IFNlcnZpY2VzIGNvdWxkIG5vdCBzdGFydC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSU5JVF9GQUlMVVJFID0gODUzMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9fUEtUX1BSSVZBQ1lfT05fQ09OTkVDVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY29ubmVjdGlvbiBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyIHJlcXVpcmVzIHBhY2tldCBwcml2YWN5IG9yIGJldHRlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTk9fUEtUX1BSSVZBQ1lfT05fQ09OTkVDVElPTiA9IDg1MzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1NPVVJDRV9ET01BSU5fSU5fRk9SRVNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzb3VyY2UgZG9tYWluIG1heSBub3QgYmUgaW4gdGhlIHNhbWUgZm9yZXN0IGFzIGRlc3RpbmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19TT1VSQ0VfRE9NQUlOX0lOX0ZPUkVTVCA9IDg1MzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RFU1RJTkFUSU9OX0RPTUFJTl9OT1RfSU5fRk9SRVNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkZXN0aW5hdGlvbiBkb21haW4gbXVzdCBiZSBpbiB0aGUgZm9yZXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19ERVNUSU5BVElPTl9ET01BSU5fTk9UX0lOX0ZPUkVTVCA9IDg1MzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RFU1RJTkFUSU9OX0FVRElUSU5HX05PVF9FTkFCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpb24gcmVxdWlyZXMgdGhhdCBkZXN0aW5hdGlvbiBkb21haW4gYXVkaXRpbmcgYmUgZW5hYmxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfREVTVElOQVRJT05fQVVESVRJTkdfTk9UX0VOQUJMRUQgPSA4NTM2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0ZJTkRfRENfRk9SX1NSQ19ET01BSU5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBjb3VsZG4ndCBsb2NhdGUgYSBEQyBmb3IgdGhlIHNvdXJjZSBkb21haW4uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfRklORF9EQ19GT1JfU1JDX0RPTUFJTiA9IDg1Mzc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1NSQ19PQkpfTk9UX0dST1VQX09SX1VTRVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNvdXJjZSBvYmplY3QgbXVzdCBiZSBhIGdyb3VwIG9yIHVzZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NSQ19PQkpfTk9UX0dST1VQX09SX1VTRVIgPSA4NTM4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TUkNfU0lEX0VYSVNUU19JTl9GT1JFU1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNvdXJjZSBvYmplY3QncyBTSUQgYWxyZWFkeSBleGlzdHMgaW4gZGVzdGluYXRpb24gZm9yZXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19TUkNfU0lEX0VYSVNUU19JTl9GT1JFU1QgPSA4NTM5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TUkNfQU5EX0RTVF9PQkpFQ1RfQ0xBU1NfTUlTTUFUQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gb2JqZWN0IG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfU1JDX0FORF9EU1RfT0JKRUNUX0NMQVNTX01JU01BVENIID0gODU0MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU0FNX0lOSVRfRkFJTFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTZWN1cml0eSBBY2NvdW50cyBNYW5hZ2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZCBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3I6ICUxLlxuLy8gIEVycm9yIFN0YXR1czogMHglMi4gQ2xpY2sgT0sgdG8gc2h1dCBkb3duIHRoZSBzeXN0ZW0gYW5kIHJlYm9vdCBpbnRvIFNhZmUgTW9kZS4gQ2hlY2sgdGhlIGV2ZW50IGxvZyBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NBTV9JTklUX0ZBSUxVUkUgPSA4NTQxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfU0NIRU1BX0lORk9fU0hJUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgaW5mb3JtYXRpb24gY291bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSByZXBsaWNhdGlvbiByZXF1ZXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfU0NIRU1BX0lORk9fU0hJUCA9IDg1NDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9TQ0hFTUFfQ09ORkxJQ1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcGxpY2F0aW9uIG9wZXJhdGlvbiBjb3VsZCBub3QgYmUgY29tcGxldGVkIGR1ZSB0byBhIHNjaGVtYSBpbmNvbXBhdGliaWxpdHkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9TQ0hFTUFfQ09ORkxJQ1QgPSA4NTQzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EUkFfRUFSTElFUl9TQ0hFTUFfQ09ORkxJQ1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcGxpY2F0aW9uIG9wZXJhdGlvbiBjb3VsZCBub3QgYmUgY29tcGxldGVkIGR1ZSB0byBhIHByZXZpb3VzIHNjaGVtYSBpbmNvbXBhdGliaWxpdHkuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RSQV9FQVJMSUVSX1NDSEVNQV9DT05GTElDVCA9IDg1NDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSQV9PQkpfTkNfTUlTTUFUQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcGxpY2F0aW9uIHVwZGF0ZSBjb3VsZCBub3QgYmUgYXBwbGllZCBiZWNhdXNlIGVpdGhlciB0aGUgc291cmNlIG9yIHRoZSBkZXN0aW5hdGlvbiBoYXMgbm90IHlldCByZWNlaXZlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYSByZWNlbnQgY3Jvc3MtZG9tYWluIG1vdmUgb3BlcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUkFfT0JKX05DX01JU01BVENIID0gODU0NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTkNfU1RJTExfSEFTX0RTQVNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBkb21haW4gY291bGQgbm90IGJlIGRlbGV0ZWQgYmVjYXVzZSB0aGVyZSBleGlzdCBkb21haW4gY29udHJvbGxlcnMgdGhhdCBzdGlsbCBob3N0IHRoaXMgZG9tYWluLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OQ19TVElMTF9IQVNfRFNBUyA9IDg1NDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0dDX1JFUVVJUkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGNhbiBiZSBwZXJmb3JtZWQgb25seSBvbiBhIGdsb2JhbCBjYXRhbG9nIHNlcnZlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfR0NfUkVRVUlSRUQgPSA4NTQ3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19MT0NBTF9NRU1CRVJfT0ZfTE9DQUxfT05MWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGxvY2FsIGdyb3VwIGNhbiBvbmx5IGJlIGEgbWVtYmVyIG9mIG90aGVyIGxvY2FsIGdyb3VwcyBpbiB0aGUgc2FtZSBkb21haW4uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0xPQ0FMX01FTUJFUl9PRl9MT0NBTF9PTkxZID0gODU0ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9fRlBPX0lOX1VOSVZFUlNBTF9HUk9VUFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRm9yZWlnbiBzZWN1cml0eSBwcmluY2lwYWxzIGNhbm5vdCBiZSBtZW1iZXJzIG9mIHVuaXZlcnNhbCBncm91cHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PX0ZQT19JTl9VTklWRVJTQUxfR1JPVVBTID0gODU0OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9BRERfVE9fR0Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGF0dHJpYnV0ZSBpcyBub3QgYWxsb3dlZCB0byBiZSByZXBsaWNhdGVkIHRvIHRoZSBHQyBiZWNhdXNlIG9mIHNlY3VyaXR5IHJlYXNvbnMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfQUREX1RPX0dDID0gODU1MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9fQ0hFQ0tQT0lOVF9XSVRIX1BEQ1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgY2hlY2twb2ludCB3aXRoIHRoZSBQREMgY291bGQgbm90IGJlIHRha2VuIGJlY2F1c2UgdGhlcmUgdG9vIG1hbnkgbW9kaWZpY2F0aW9ucyBiZWluZyBwcm9jZXNzZWQgY3VycmVudGx5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT19DSEVDS1BPSU5UX1dJVEhfUERDID0gODU1MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU09VUkNFX0FVRElUSU5HX05PVF9FTkFCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBvcGVyYXRpb24gcmVxdWlyZXMgdGhhdCBzb3VyY2UgZG9tYWluIGF1ZGl0aW5nIGJlIGVuYWJsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NPVVJDRV9BVURJVElOR19OT1RfRU5BQkxFRCA9IDg1NTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NBTlRfQ1JFQVRFX0lOX05PTkRPTUFJTl9OQ1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTZWN1cml0eSBwcmluY2lwYWwgb2JqZWN0cyBjYW4gb25seSBiZSBjcmVhdGVkIGluc2lkZSBkb21haW4gbmFtaW5nIGNvbnRleHRzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX0NSRUFURV9JTl9OT05ET01BSU5fTkMgPSA4NTUzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19JTlZBTElEX05BTUVfRk9SX1NQTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIFNlcnZpY2UgUHJpbmNpcGFsIE5hbWUgKFNQTikgY291bGQgbm90IGJlIGV4cG9ydCBjb25zdHJ1Y3RlZCBiZWNhdXNlIHRoZSBwcm92aWRlZCBob3N0bmFtZSBpcyBub3QgaW4gdGhlIG5lY2Vzc2FyeSBmb3JtYXQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lOVkFMSURfTkFNRV9GT1JfU1BOID0gODU1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRklMVEVSX1VTRVNfQ09OVFJVQ1RFRF9BVFRSU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIEZpbHRlciB3YXMgcGFzc2VkIHRoYXQgdXNlcyBleHBvcnQgY29uc3RydWN0ZWQgYXR0cmlidXRlcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRklMVEVSX1VTRVNfQ09OVFJVQ1RFRF9BVFRSUyA9IDg1NTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX1VOSUNPREVQV0RfTk9UX0lOX1FVT1RFU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdW5pY29kZVB3ZCBhdHRyaWJ1dGUgdmFsdWUgbXVzdCBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19VTklDT0RFUFdEX05PVF9JTl9RVU9URVMgPSA4NTU2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19NQUNISU5FX0FDQ09VTlRfUVVPVEFfRVhDRUVERURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgWW91ciBjb21wdXRlciBjb3VsZCBub3QgYmUgam9pbmVkIHRvIHRoZSBkb21haW4uIFlvdSBoYXZlIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb21wdXRlciBhY2NvdW50cyB5b3UgYXJlIGFsbG93ZWQgdG8gY3JlYXRlIGluIHRoaXMgZG9tYWluLiBDb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gaGF2ZSB0aGlzIGxpbWl0IHJlc2V0IG9yIGluY3JlYXNlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTUFDSElORV9BQ0NPVU5UX1FVT1RBX0VYQ0VFREVEID0gODU1NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTVVTVF9CRV9SVU5fT05fRFNUX0RDXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEZvciBzZWN1cml0eSByZWFzb25zLCB0aGUgb3BlcmF0aW9uIG11c3QgYmUgcnVuIG9uIHRoZSBkZXN0aW5hdGlvbiBEQy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTVVTVF9CRV9SVU5fT05fRFNUX0RDID0gODU1ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU1JDX0RDX01VU1RfQkVfU1A0X09SX0dSRUFURVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZSBzb3VyY2UgREMgbXVzdCBiZSBOVDRTUDQgb3IgZ3JlYXRlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfU1JDX0RDX01VU1RfQkVfU1A0X09SX0dSRUFURVIgPSA4NTU5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX1RSRUVfREVMRVRFX0NSSVRJQ0FMX09CSlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDcml0aWNhbCBEaXJlY3RvcnkgU2VydmljZSBTeXN0ZW0gb2JqZWN0cyBjYW5ub3QgYmUgZGVsZXRlZCBkdXJpbmcgdHJlZSBkZWxldGUgb3BlcmF0aW9ucy4gIFRoZSB0cmVlIGRlbGV0ZSBtYXkgaGF2ZSBiZWVuIHBhcnRpYWxseSBwZXJmb3JtZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfVFJFRV9ERUxFVEVfQ1JJVElDQUxfT0JKID0gODU2MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfSU5JVF9GQUlMVVJFX0NPTlNPTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRGlyZWN0b3J5IFNlcnZpY2VzIGNvdWxkIG5vdCBzdGFydCBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3I6ICUxLlxuLy8gIEVycm9yIFN0YXR1czogMHglMi4gUGxlYXNlIGNsaWNrIE9LIHRvIHNodXRkb3duIHRoZSBzeXN0ZW0uIFlvdSBjYW4gdXNlIHRoZSByZWNvdmVyeSBjb25zb2xlIHRvIGRpYWdub3NlIHRoZSBzeXN0ZW0gZnVydGhlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSU5JVF9GQUlMVVJFX0NPTlNPTEUgPSA4NTYxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19TQU1fSU5JVF9GQUlMVVJFX0NPTlNPTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2VjdXJpdHkgQWNjb3VudHMgTWFuYWdlciBpbml0aWFsaXphdGlvbiBmYWlsZWQgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGVycm9yOiAlMS5cbi8vICBFcnJvciBTdGF0dXM6IDB4JTIuIFBsZWFzZSBjbGljayBPSyB0byBzaHV0ZG93biB0aGUgc3lzdGVtLiBZb3UgY2FuIHVzZSB0aGUgcmVjb3ZlcnkgY29uc29sZSB0byBkaWFnbm9zZSB0aGUgc3lzdGVtIGZ1cnRoZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1NBTV9JTklUX0ZBSUxVUkVfQ09OU09MRSA9IDg1NjI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0ZPUkVTVF9WRVJTSU9OX1RPT19ISUdIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGluc3RhbGxlZCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBmb3Jlc3QgZnVuY3Rpb25hbCBsZXZlbC4gWW91IG11c3QgdXBncmFkZSB0byBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGJlZm9yZSB0aGlzIHNlcnZlciBjYW4gYmVjb21lIGEgZG9tYWluIGNvbnRyb2xsZXIgaW4gdGhpcyBmb3Jlc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0ZPUkVTVF9WRVJTSU9OX1RPT19ISUdIID0gODU2MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRE9NQUlOX1ZFUlNJT05fVE9PX0hJR0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHZlcnNpb24gb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaW5zdGFsbGVkIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IGRvbWFpbiBmdW5jdGlvbmFsIGxldmVsLiBZb3UgbXVzdCB1cGdyYWRlIHRvIGEgbmV3IHZlcnNpb24gb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gYmVmb3JlIHRoaXMgc2VydmVyIGNhbiBiZWNvbWUgYSBkb21haW4gY29udHJvbGxlciBpbiB0aGlzIGRvbWFpbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRE9NQUlOX1ZFUlNJT05fVE9PX0hJR0ggPSA4NTY0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19GT1JFU1RfVkVSU0lPTl9UT09fTE9XXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGluc3RhbGxlZCBvbiB0aGlzIHNlcnZlciBubyBsb25nZXIgc3VwcG9ydHMgdGhlIGN1cnJlbnQgZm9yZXN0IGZ1bmN0aW9uYWwgbGV2ZWwuIFlvdSBtdXN0IHJhaXNlIHRoZSBmb3Jlc3QgZnVuY3Rpb25hbCBsZXZlbCBiZWZvcmUgdGhpcyBzZXJ2ZXIgY2FuIGJlY29tZSBhIGRvbWFpbiBjb250cm9sbGVyIGluIHRoaXMgZm9yZXN0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19GT1JFU1RfVkVSU0lPTl9UT09fTE9XID0gODU2NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRE9NQUlOX1ZFUlNJT05fVE9PX0xPV1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbnN0YWxsZWQgb24gdGhpcyBzZXJ2ZXIgbm8gbG9uZ2VyIHN1cHBvcnRzIHRoZSBjdXJyZW50IGRvbWFpbiBmdW5jdGlvbmFsIGxldmVsLiBZb3UgbXVzdCByYWlzZSB0aGUgZG9tYWluIGZ1bmN0aW9uYWwgbGV2ZWwgYmVmb3JlIHRoaXMgc2VydmVyIGNhbiBiZWNvbWUgYSBkb21haW4gY29udHJvbGxlciBpbiB0aGlzIGRvbWFpbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRE9NQUlOX1ZFUlNJT05fVE9PX0xPVyA9IDg1NjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lOQ09NUEFUSUJMRV9WRVJTSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB2ZXJzaW9uIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGluc3RhbGxlZCBvbiB0aGlzIHNlcnZlciBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZnVuY3Rpb25hbCBsZXZlbCBvZiB0aGUgZG9tYWluIG9yIGZvcmVzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSU5DT01QQVRJQkxFX1ZFUlNJT04gPSA4NTY3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19MT1dfRFNBX1ZFUlNJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZ1bmN0aW9uYWwgbGV2ZWwgb2YgdGhlIGRvbWFpbiAob3IgZm9yZXN0KSBjYW5ub3QgYmUgcmFpc2VkIHRvIHRoZSByZXF1ZXN0ZWQgdmFsdWUsIGJlY2F1c2UgdGhlcmUgZXhpc3Qgb25lIG9yIG1vcmUgZG9tYWluIGNvbnRyb2xsZXJzIGluIHRoZSBkb21haW4gKG9yIGZvcmVzdCkgdGhhdCBhcmUgYXQgYSBsb3dlciBpbmNvbXBhdGlibGUgZnVuY3Rpb25hbCBsZXZlbC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTE9XX0RTQV9WRVJTSU9OID0gODU2ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9fQkVIQVZJT1JfVkVSU0lPTl9JTl9NSVhFRERPTUFJTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZm9yZXN0IGZ1bmN0aW9uYWwgbGV2ZWwgY2Fubm90IGJlIHJhaXNlZCB0byB0aGUgcmVxdWVzdGVkIHZhbHVlIHNpbmNlIG9uZSBvciBtb3JlIGRvbWFpbnMgYXJlIHN0aWxsIGluIG1peGVkIGRvbWFpbiBtb2RlLiBBbGwgZG9tYWlucyBpbiB0aGUgZm9yZXN0IG11c3QgYmUgaW4gbmF0aXZlIG1vZGUsIGZvciB5b3UgdG8gcmFpc2UgdGhlIGZvcmVzdCBmdW5jdGlvbmFsIGxldmVsLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT19CRUhBVklPUl9WRVJTSU9OX0lOX01JWEVERE9NQUlOID0gODU2OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9UX1NVUFBPUlRFRF9TT1JUX09SREVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzb3J0IG9yZGVyIHJlcXVlc3RlZCBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT1RfU1VQUE9SVEVEX1NPUlRfT1JERVIgPSA4NTcwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OQU1FX05PVF9VTklRVUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBuYW1lIGFscmVhZHkgZXhpc3RzIGFzIGEgdW5pcXVlIGlkZW50aWZpZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05BTUVfTk9UX1VOSVFVRSA9IDg1NzE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX01BQ0hJTkVfQUNDT1VOVF9DUkVBVEVEX1BSRU5UNFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWFjaGluZSBhY2NvdW50IHdhcyBjcmVhdGVkIHByZS1OVDQuICBUaGUgYWNjb3VudCBuZWVkcyB0byBiZSByZWNyZWF0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX01BQ0hJTkVfQUNDT1VOVF9DUkVBVEVEX1BSRU5UNCA9IDg1NzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX09VVF9PRl9WRVJTSU9OX1NUT1JFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkYXRhYmFzZSBpcyBvdXQgb2YgdmVyc2lvbiBzdG9yZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfT1VUX09GX1ZFUlNJT05fU1RPUkUgPSA4NTczO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19JTkNPTVBBVElCTEVfQ09OVFJPTFNfVVNFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBVbmFibGUgdG8gY29udGludWUgb3BlcmF0aW9uIGJlY2F1c2UgbXVsdGlwbGUgY29uZmxpY3RpbmcgY29udHJvbHMgd2VyZSB1c2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19JTkNPTVBBVElCTEVfQ09OVFJPTFNfVVNFRCA9IDg1NzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05PX1JFRl9ET01BSU5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIGZpbmQgYSB2YWxpZCBzZWN1cml0eSBkZXNjcmlwdG9yIHJlZmVyZW5jZSBkb21haW4gZm9yIHRoaXMgcGFydGl0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OT19SRUZfRE9NQUlOID0gODU3NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfUkVTRVJWRURfTElOS19JRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgdXBkYXRlIGZhaWxlZDogVGhlIGxpbmsgaWRlbnRpZmllciBpcyByZXNlcnZlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUkVTRVJWRURfTElOS19JRCA9IDg1NzY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0xJTktfSURfTk9UX0FWQUlMQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgdXBkYXRlIGZhaWxlZDogVGhlcmUgYXJlIG5vIGxpbmsgaWRlbnRpZmllcnMgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19MSU5LX0lEX05PVF9BVkFJTEFCTEUgPSA4NTc3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19BR19DQU5UX0hBVkVfVU5JVkVSU0FMX01FTUJFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBhY2NvdW50IGdyb3VwIGNhbiBub3QgaGF2ZSBhIHVuaXZlcnNhbCBncm91cCBhcyBhIG1lbWJlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQUdfQ0FOVF9IQVZFX1VOSVZFUlNBTF9NRU1CRVIgPSA4NTc4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19NT0RJRllETl9ESVNBTExPV0VEX0JZX0lOU1RBTkNFX1RZUEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgUmVuYW1lIG9yIG1vdmUgb3BlcmF0aW9ucyBvbiBuYW1pbmcgY29udGV4dCBoZWFkcyBvciByZWFkLW9ubHkgb2JqZWN0cyBhcmUgbm90IGFsbG93ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX01PRElGWUROX0RJU0FMTE9XRURfQllfSU5TVEFOQ0VfVFlQRSA9IDg1Nzk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05PX09CSkVDVF9NT1ZFX0lOX1NDSEVNQV9OQ1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNb3ZlIG9wZXJhdGlvbnMgb24gb2JqZWN0cyBpbiB0aGUgc2NoZW1hIG5hbWluZyBjb250ZXh0IGFyZSBub3QgYWxsb3dlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTk9fT0JKRUNUX01PVkVfSU5fU0NIRU1BX05DID0gODU4MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTU9ESUZZRE5fRElTQUxMT1dFRF9CWV9GTEFHXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgc3lzdGVtIGZsYWcgaGFzIGJlZW4gc2V0IG9uIHRoZSBvYmplY3QgYW5kIGRvZXMgbm90IGFsbG93IHRoZSBvYmplY3QgdG8gYmUgbW92ZWQgb3IgcmVuYW1lZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTU9ESUZZRE5fRElTQUxMT1dFRF9CWV9GTEFHID0gODU4MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTU9ESUZZRE5fV1JPTkdfR1JBTkRQQVJFTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBvYmplY3QgaXMgbm90IGFsbG93ZWQgdG8gY2hhbmdlIGl0cyBncmFuZHBhcmVudCBjb250YWluZXIuIE1vdmVzIGFyZSBub3QgZm9yYmlkZGVuIG9uIHRoaXMgb2JqZWN0LCBidXQgYXJlIHJlc3RyaWN0ZWQgdG8gc2libGluZyBjb250YWluZXJzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19NT0RJRllETl9XUk9OR19HUkFORFBBUkVOVCA9IDg1ODI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05BTUVfRVJST1JfVFJVU1RfUkVGRVJSQUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5hYmxlIHRvIHJlc29sdmUgY29tcGxldGVseSwgYSByZWZlcnJhbCB0byBhbm90aGVyIGZvcmVzdCBpcyBnZW5lcmF0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05BTUVfRVJST1JfVFJVU1RfUkVGRVJSQUwgPSA4NTgzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9OT1RfU1VQUE9SVEVEX09OX1NUQU5EQVJEX1NFUlZFUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIGFjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHN0YW5kYXJkIHNlcnZlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfTk9UX1NVUFBPUlRFRF9PTl9TVEFOREFSRF9TRVJWRVIgPSA4NTg0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0FDQ0VTU19SRU1PVEVfUEFSVF9PRl9BRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDb3VsZCBub3QgYWNjZXNzIGEgcGFydGl0aW9uIG9mIHRoZSBBY3RpdmUgRGlyZWN0b3J5IGxvY2F0ZWQgb24gYSByZW1vdGUgc2VydmVyLiAgTWFrZSBzdXJlIGF0IGxlYXN0IG9uZSBzZXJ2ZXIgaXMgcnVubmluZyBmb3IgdGhlIHBhcnRpdGlvbiBpbiBxdWVzdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ0FOVF9BQ0NFU1NfUkVNT1RFX1BBUlRfT0ZfQUQgPSA4NTg1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DUl9JTVBPU1NJQkxFX1RPX1ZBTElEQVRFX1YyXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBkaXJlY3RvcnkgY2Fubm90IHZhbGlkYXRlIHRoZSBwcm9wb3NlZCBuYW1pbmcgY29udGV4dCAob3IgcGFydGl0aW9uKSBuYW1lIGJlY2F1c2UgaXQgZG9lcyBub3QgaG9sZCBhIHJlcGxpY2Egbm9yIGNhbiBpdCBjb250YWN0IGEgcmVwbGljYSBvZiB0aGUgbmFtaW5nIGNvbnRleHQgYWJvdmUgdGhlIHByb3Bvc2VkIG5hbWluZyBjb250ZXh0LiAgUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBwYXJlbnQgbmFtaW5nIGNvbnRleHQgaXMgcHJvcGVybHkgcmVnaXN0ZXJlZCBpbiBETlMsIGFuZCBhdCBsZWFzdCBvbmUgcmVwbGljYSBvZiB0aGlzIG5hbWluZyBjb250ZXh0IGlzIHJlYWNoYWJsZSBieSB0aGUgRG9tYWluIE5hbWluZyBtYXN0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NSX0lNUE9TU0lCTEVfVE9fVkFMSURBVEVfVjIgPSA4NTg2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19USFJFQURfTElNSVRfRVhDRUVERURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHRocmVhZCBsaW1pdCBmb3IgdGhpcyByZXF1ZXN0IHdhcyBleGNlZWRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfVEhSRUFEX0xJTUlUX0VYQ0VFREVEID0gODU4NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9UX0NMT1NFU1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIEdsb2JhbCBjYXRhbG9nIHNlcnZlciBpcyBub3QgaW4gdGhlIGNsb3Nlc3Qgc2l0ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfTk9UX0NMT1NFU1QgPSA4NTg4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0RFUklWRV9TUE5fV0lUSE9VVF9TRVJWRVJfUkVGXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBEUyBjYW5ub3QgZGVyaXZlIGEgc2VydmljZSBwcmluY2lwYWwgbmFtZSAoU1BOKSB3aXRoIHdoaWNoIHRvIG11dHVhbGx5IGF1dGhlbnRpY2F0ZSB0aGUgdGFyZ2V0IHNlcnZlciBiZWNhdXNlIHRoZSBjb3JyZXNwb25kaW5nIHNlcnZlciBvYmplY3QgaW4gdGhlIGxvY2FsIERTIGRhdGFiYXNlIGhhcyBubyBzZXJ2ZXJSZWZlcmVuY2UgYXR0cmlidXRlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX0RFUklWRV9TUE5fV0lUSE9VVF9TRVJWRVJfUkVGID0gODU4OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfU0lOR0xFX1VTRVJfTU9ERV9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIERpcmVjdG9yeSBTZXJ2aWNlIGZhaWxlZCB0byBlbnRlciBzaW5nbGUgdXNlciBtb2RlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19TSU5HTEVfVVNFUl9NT0RFX0ZBSUxFRCA9IDg1OTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX05URFNDUklQVF9TWU5UQVhfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIERpcmVjdG9yeSBTZXJ2aWNlIGNhbm5vdCBwYXJzZSB0aGUgc2NyaXB0IGJlY2F1c2Ugb2YgYSBzeW50YXggZXJyb3IuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05URFNDUklQVF9TWU5UQVhfRVJST1IgPSA4NTkxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19OVERTQ1JJUFRfUFJPQ0VTU19FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgRGlyZWN0b3J5IFNlcnZpY2UgY2Fubm90IHByb2Nlc3MgdGhlIHNjcmlwdCBiZWNhdXNlIG9mIGFuIGVycm9yLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19OVERTQ1JJUFRfUFJPQ0VTU19FUlJPUiA9IDg1OTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RJRkZFUkVOVF9SRVBMX0VQT0NIU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgY2Fubm90IHBlcmZvcm0gdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gYmVjYXVzZSB0aGUgc2VydmVyc1xuLy8gIGludm9sdmVkIGFyZSBvZiBkaWZmZXJlbnQgcmVwbGljYXRpb24gZXBvY2hzICh3aGljaCBpcyB1c3VhbGx5IHJlbGF0ZWQgdG8gYVxuLy8gIGRvbWFpbiByZW5hbWUgdGhhdCBpcyBpbiBwcm9ncmVzcykuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RJRkZFUkVOVF9SRVBMX0VQT0NIUyA9IDg1OTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RSU19FWFRFTlNJT05TX0NIQU5HRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGRpcmVjdG9yeSBzZXJ2aWNlIGJpbmRpbmcgbXVzdCBiZSByZW5lZ290aWF0ZWQgZHVlIHRvIGEgY2hhbmdlIGluIHRoZSBzZXJ2ZXJcbi8vICBleHRlbnNpb25zIGluZm9ybWF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19EUlNfRVhURU5TSU9OU19DSEFOR0VEID0gODU5NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfUkVQTElDQV9TRVRfQ0hBTkdFX05PVF9BTExPV0VEX09OX0RJU0FCTEVEX0NSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE9wZXJhdGlvbiBub3QgYWxsb3dlZCBvbiBhIGRpc2FibGVkIGNyb3NzIHJlZi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUkVQTElDQV9TRVRfQ0hBTkdFX05PVF9BTExPV0VEX09OX0RJU0FCTEVEX0NSID0gODU5NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfTk9fTVNEU19JTlRJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgdXBkYXRlIGZhaWxlZDogTm8gdmFsdWVzIGZvciBtc0RTLUludElkIGFyZSBhdmFpbGFibGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX05PX01TRFNfSU5USUQgPSA4NTk2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19EVVBfTVNEU19JTlRJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTY2hlbWEgdXBkYXRlIGZhaWxlZDogRHVwbGljYXRlIG1zRFMtSU50SWQuIFJldHJ5IHRoZSBvcGVyYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RVUF9NU0RTX0lOVElEID0gODU5NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRVhJU1RTX0lOX1JETkFUVElEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNjaGVtYSBkZWxldGlvbiBmYWlsZWQ6IGF0dHJpYnV0ZSBpcyB1c2VkIGluIHJETkF0dElELlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19FWElTVFNfSU5fUkROQVRUSUQgPSA4NTk4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19BVVRIT1JJWkFUSU9OX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgZmFpbGVkIHRvIGF1dGhvcml6ZSB0aGUgcmVxdWVzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQVVUSE9SSVpBVElPTl9GQUlMRUQgPSA4NTk5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19JTlZBTElEX1NDUklQVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgRGlyZWN0b3J5IFNlcnZpY2UgY2Fubm90IHByb2Nlc3MgdGhlIHNjcmlwdCBiZWNhdXNlIGl0IGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0lOVkFMSURfU0NSSVBUID0gODYwMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfUkVNT1RFX0NST1NTUkVGX09QX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVtb3RlIGNyZWF0ZSBjcm9zcyByZWZlcmVuY2Ugb3BlcmF0aW9uIGZhaWxlZCBvbiB0aGUgRG9tYWluIE5hbWluZyBNYXN0ZXIgRlNNTy4gIFRoZSBvcGVyYXRpb24ncyBlcnJvciBpcyBpbiB0aGUgZXh0ZW5kZWQgZGF0YS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfUkVNT1RFX0NST1NTUkVGX09QX0ZBSUxFRCA9IDg2MDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0NST1NTX1JFRl9CVVNZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgY3Jvc3MgcmVmZXJlbmNlIGlzIGluIHVzZSBsb2NhbGx5IHdpdGggdGhlIHNhbWUgbmFtZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfQ1JPU1NfUkVGX0JVU1kgPSA4NjAyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0RFUklWRV9TUE5fRk9SX0RFTEVURURfRE9NQUlOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBEUyBjYW5ub3QgZGVyaXZlIGEgc2VydmljZSBwcmluY2lwYWwgbmFtZSAoU1BOKSB3aXRoIHdoaWNoIHRvIG11dHVhbGx5IGF1dGhlbnRpY2F0ZSB0aGUgdGFyZ2V0IHNlcnZlciBiZWNhdXNlIHRoZSBzZXJ2ZXIncyBkb21haW4gaGFzIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSBmb3Jlc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0NBTlRfREVSSVZFX1NQTl9GT1JfREVMRVRFRF9ET01BSU4gPSA4NjAzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19DQU5UX0RFTU9URV9XSVRIX1dSSVRFQUJMRV9OQ1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBXcml0ZWFibGUgTkNzIHByZXZlbnQgdGhpcyBEQyBmcm9tIGRlbW90aW5nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX0RFTU9URV9XSVRIX1dSSVRFQUJMRV9OQyA9IDg2MDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0RVUExJQ0FURV9JRF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIG9iamVjdCBoYXMgYSBub24tdW5pcXVlIGlkZW50aWZpZXIgYW5kIGNhbm5vdCBiZSByZXRyaWV2ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0RVUExJQ0FURV9JRF9GT1VORCA9IDg2MDU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0lOU1VGRklDSUVOVF9BVFRSX1RPX0NSRUFURV9PQkpFQ1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW5zdWZmaWNpZW50IGF0dHJpYnV0ZXMgd2VyZSBnaXZlbiB0byBjcmVhdGUgYW4gb2JqZWN0LiAgVGhpcyBvYmplY3QgbWF5IG5vdCBleGlzdCBiZWNhdXNlIGl0IG1heSBoYXZlIGJlZW4gZGVsZXRlZCBhbmQgYWxyZWFkeSBnYXJiYWdlIGNvbGxlY3RlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfSU5TVUZGSUNJRU5UX0FUVFJfVE9fQ1JFQVRFX09CSkVDVCA9IDg2MDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0RTX0dST1VQX0NPTlZFUlNJT05fRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGdyb3VwIGNhbm5vdCBiZSBjb252ZXJ0ZWQgZHVlIHRvIGF0dHJpYnV0ZSByZXN0cmljdGlvbnMgb24gdGhlIHJlcXVlc3RlZCBncm91cCB0eXBlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19HUk9VUF9DT05WRVJTSU9OX0VSUk9SID0gODYwNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9NT1ZFX0FQUF9CQVNJQ19HUk9VUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDcm9zcy1kb21haW4gbW92ZSBvZiBub24tZW1wdHkgYmFzaWMgYXBwbGljYXRpb24gZ3JvdXBzIGlzIG5vdCBhbGxvd2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX01PVkVfQVBQX0JBU0lDX0dST1VQID0gODYwODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfQ0FOVF9NT1ZFX0FQUF9RVUVSWV9HUk9VUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDcm9zcy1kb21haW4gbW92ZSBvZiBub24tZW1wdHkgcXVlcnkgYmFzZWQgYXBwbGljYXRpb24gZ3JvdXBzIGlzIG5vdCBhbGxvd2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19DQU5UX01PVkVfQVBQX1FVRVJZX0dST1VQID0gODYwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfUk9MRV9OT1RfVkVSSUZJRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIEZTTU8gcm9sZSBvd25lcnNoaXAgY291bGQgbm90IGJlIHZlcmlmaWVkIGJlY2F1c2UgaXRzIGRpcmVjdG9yeSBwYXJ0aXRpb24gaGFzIG5vdCByZXBsaWNhdGVkIHN1Y2Nlc3NmdWxseSB3aXRoIGF0bGVhc3Qgb25lIHJlcGxpY2F0aW9uIHBhcnRuZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1JPTEVfTk9UX1ZFUklGSUVEID0gODYxMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfV0tPX0NPTlRBSU5FUl9DQU5OT1RfQkVfU1BFQ0lBTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdGFyZ2V0IGNvbnRhaW5lciBmb3IgYSByZWRpcmVjdGlvbiBvZiBhIHdlbGwga25vd24gb2JqZWN0IGNvbnRhaW5lciBjYW5ub3QgYWxyZWFkeSBiZSBhIHNwZWNpYWwgY29udGFpbmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19XS09fQ09OVEFJTkVSX0NBTk5PVF9CRV9TUEVDSUFMID0gODYxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRE9NQUlOX1JFTkFNRV9JTl9QUk9HUkVTU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgRGlyZWN0b3J5IFNlcnZpY2UgY2Fubm90IHBlcmZvcm0gdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gYmVjYXVzZSBhIGRvbWFpbiByZW5hbWUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19ET01BSU5fUkVOQU1FX0lOX1BST0dSRVNTID0gODYxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRVhJU1RJTkdfQURfQ0hJTERfTkNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIEFjdGl2ZSBEaXJlY3RvcnkgZGV0ZWN0ZWQgYW4gQWN0aXZlIERpcmVjdG9yeSBjaGlsZCBwYXJ0aXRpb24gYmVsb3cgdGhlXG4vLyAgcmVxdWVzdGVkIG5ldyBwYXJ0aXRpb24gbmFtZS4gIFRoZSBBY3RpdmUgRGlyZWN0b3J5J3MgcGFydGl0aW9uIGhpZXJhcmNoeSBtdXN0XG4vLyAgYmUgY3JlYXRlZCBpbiBhIHRvcCBkb3duIG1ldGhvZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRVhJU1RJTkdfQURfQ0hJTERfTkMgPSA4NjEzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19SRVBMX0xJRkVUSU1FX0VYQ0VFREVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBBY3RpdmUgRGlyZWN0b3J5IGNhbm5vdCByZXBsaWNhdGUgd2l0aCB0aGlzIHNlcnZlciBiZWNhdXNlIHRoZSB0aW1lIHNpbmNlIHRoZSBsYXN0IHJlcGxpY2F0aW9uIHdpdGggdGhpcyBzZXJ2ZXIgaGFzIGV4Y2VlZGVkIHRoZSB0b21ic3RvbmUgbGlmZXRpbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX1JFUExfTElGRVRJTUVfRVhDRUVERUQgPSA4NjE0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19ESVNBTExPV0VEX0lOX1NZU1RFTV9DT05UQUlORVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgb24gYW4gb2JqZWN0IHVuZGVyIHRoZSBzeXN0ZW0gY29udGFpbmVyLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9EU19ESVNBTExPV0VEX0lOX1NZU1RFTV9DT05UQUlORVIgPSA4NjE1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9EU19MREFQX1NFTkRfUVVFVUVfRlVMTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgTERBUCBzZXJ2ZXJzIG5ldHdvcmsgc2VuZCBxdWV1ZSBoYXMgZmlsbGVkIHVwIGJlY2F1c2UgdGhlIGNsaWVudCBpcyBub3Rcbi8vICBwcm9jZXNzaW5nIHRoZSByZXN1bHRzIG9mIGl0J3MgcmVxdWVzdHMgZmFzdCBlbm91Z2guICBObyBtb3JlIHJlcXVlc3RzIHdpbGxcbi8vICBiZSBwcm9jZXNzZWQgdW50aWwgdGhlIGNsaWVudCBjYXRjaGVzIHVwLiAgSWYgdGhlIGNsaWVudCBkb2VzIG5vdCBjYXRjaCB1cFxuLy8gIHRoZW4gaXQgd2lsbCBiZSBkaXNjb25uZWN0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0RTX0xEQVBfU0VORF9RVUVVRV9GVUxMID0gODYxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfRFNfRFJBX09VVF9TQ0hFRFVMRV9XSU5ET1dcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNjaGVkdWxlZCByZXBsaWNhdGlvbiBkaWQgbm90IHRha2UgcGxhY2UgYmVjYXVzZSB0aGUgc3lzdGVtIHdhcyB0b28gYnVzeSB0byBleGVjdXRlIHRoZSByZXF1ZXN0IHdpdGhpbiB0aGUgc2NoZWR1bGUgd2luZG93LiAgVGhlIHJlcGxpY2F0aW9uIHF1ZXVlIGlzIG92ZXJsb2FkZWQuIENvbnNpZGVyIHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgcGFydG5lcnMgb3IgZGVjcmVhc2luZyB0aGUgc2NoZWR1bGVkIHJlcGxpY2F0aW9uIGZyZXF1ZW5jeS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfRFNfRFJBX09VVF9TQ0hFRFVMRV9XSU5ET1cgPSA4NjE3O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL1xuLy8gICAgIEVuZCBvZiBBY3RpdmUgRGlyZWN0b3J5IEVycm9yIENvZGVzICAgICAgICAvXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9cbi8vICAgICAgICAgICAgICAgICAgODAwMCB0byAgODk5OSAgICAgICAgICAgICAgICAgL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgICAgICAgICAgICAgICAgIEROUyBFcnJvciBDb2RlcyAgICAgICAgICAgICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgOTAwMCB0byA5OTk5ICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZhY2lsaXR5IEROUyBFcnJvciBNZXNzYWdlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vICBETlMgcmVzcG9uc2UgY29kZXMuXG4vL1xuXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1JFU1BPTlNFX0NPREVTX0JBU0UgPSA5MDAwO1xuXG4vLyBETlNfRVJST1JfUkNPREVfRk9STUFUX0VSUk9SICAgICAgICAgIDB4MDAwMDIzMjlcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9SQ09ERV9GT1JNQVRfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHNlcnZlciB1bmFibGUgdG8gaW50ZXJwcmV0IGZvcm1hdC5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1JDT0RFX0ZPUk1BVF9FUlJPUiA9IDkwMDE7XG5cbi8vIEROU19FUlJPUl9SQ09ERV9TRVJWRVJfRkFJTFVSRSAgICAgICAgMHgwMDAwMjMyYVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1JDT0RFX1NFUlZFUl9GQUlMVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEROUyBzZXJ2ZXIgZmFpbHVyZS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1JDT0RFX1NFUlZFUl9GQUlMVVJFID0gOTAwMjtcblxuLy8gRE5TX0VSUk9SX1JDT0RFX05BTUVfRVJST1IgICAgICAgICAgICAweDAwMDAyMzJiXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfUkNPREVfTkFNRV9FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgbmFtZSBkb2VzIG5vdCBleGlzdC5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1JDT0RFX05BTUVfRVJST1IgPSA5MDAzO1xuXG4vLyBETlNfRVJST1JfUkNPREVfTk9UX0lNUExFTUVOVEVEICAgICAgIDB4MDAwMDIzMmNcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9SQ09ERV9OT1RfSU1QTEVNRU5URURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHJlcXVlc3Qgbm90IHN1cHBvcnRlZCBieSBuYW1lIHNlcnZlci5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1JDT0RFX05PVF9JTVBMRU1FTlRFRCA9IDkwMDQ7XG5cbi8vIEROU19FUlJPUl9SQ09ERV9SRUZVU0VEICAgICAgICAgICAgICAgMHgwMDAwMjMyZFxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1JDT0RFX1JFRlVTRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIG9wZXJhdGlvbiByZWZ1c2VkLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfUkNPREVfUkVGVVNFRCA9IDkwMDU7XG5cbi8vIEROU19FUlJPUl9SQ09ERV9ZWERPTUFJTiAgICAgICAgICAgICAgMHgwMDAwMjMyZVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1JDT0RFX1lYRE9NQUlOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEROUyBuYW1lIHRoYXQgb3VnaHQgbm90IGV4aXN0LCBkb2VzIGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfUkNPREVfWVhET01BSU4gPSA5MDA2O1xuXG4vLyBETlNfRVJST1JfUkNPREVfWVhSUlNFVCAgICAgICAgICAgICAgIDB4MDAwMDIzMmZcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9SQ09ERV9ZWFJSU0VUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEROUyBSUiBzZXQgdGhhdCBvdWdodCBub3QgZXhpc3QsIGRvZXMgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9SQ09ERV9ZWFJSU0VUID0gOTAwNztcblxuLy8gRE5TX0VSUk9SX1JDT0RFX05YUlJTRVQgICAgICAgICAgICAgICAweDAwMDAyMzMwXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfUkNPREVfTlhSUlNFVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgUlIgc2V0IHRoYXQgb3VnaHQgdG8gZXhpc3QsIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfUkNPREVfTlhSUlNFVCA9IDkwMDg7XG5cbi8vIEROU19FUlJPUl9SQ09ERV9OT1RBVVRIICAgICAgICAgICAgICAgMHgwMDAwMjMzMVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1JDT0RFX05PVEFVVEhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHNlcnZlciBub3QgYXV0aG9yaXRhdGl2ZSBmb3Igem9uZS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1JDT0RFX05PVEFVVEggPSA5MDA5O1xuXG4vLyBETlNfRVJST1JfUkNPREVfTk9UWk9ORSAgICAgICAgICAgICAgIDB4MDAwMDIzMzJcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9SQ09ERV9OT1RaT05FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEROUyBuYW1lIGluIHVwZGF0ZSBvciBwcmVyZXEgaXMgbm90IGluIHpvbmUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9SQ09ERV9OT1RaT05FID0gOTAxMDtcblxuLy8gRE5TX0VSUk9SX1JDT0RFX0JBRFNJRyAgICAgICAgICAgICAgICAweDAwMDAyMzM4XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfUkNPREVfQkFEU0lHXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEROUyBzaWduYXR1cmUgZmFpbGVkIHRvIHZlcmlmeS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1JDT0RFX0JBRFNJRyA9IDkwMTY7XG5cbi8vIEROU19FUlJPUl9SQ09ERV9CQURLRVkgICAgICAgICAgICAgICAgMHgwMDAwMjMzOVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1JDT0RFX0JBREtFWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgYmFkIGtleS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1JDT0RFX0JBREtFWSA9IDkwMTc7XG5cbi8vIEROU19FUlJPUl9SQ09ERV9CQURUSU1FICAgICAgICAgICAgICAgMHgwMDAwMjMzYVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1JDT0RFX0JBRFRJTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHNpZ25hdHVyZSB2YWxpZGl0eSBleHBpcmVkLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfUkNPREVfQkFEVElNRSA9IDkwMTg7XG5cbi8vXG4vLyAgUGFja2V0IGZvcm1hdFxuLy9cblxuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9QQUNLRVRfRk1UX0JBU0UgPSA5NTAwO1xuXG4vLyBETlNfSU5GT19OT19SRUNPUkRTICAgICAgICAgICAgICAgICAgIDB4MDAwMDI1MWRcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19JTkZPX05PX1JFQ09SRFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gcmVjb3JkcyBmb3VuZCBmb3IgZ2l2ZW4gRE5TIHF1ZXJ5LlxuLy9cbmV4cG9ydCBjb25zdCBETlNfSU5GT19OT19SRUNPUkRTID0gOTUwMTtcblxuLy8gRE5TX0VSUk9SX0JBRF9QQUNLRVQgICAgICAgICAgICAgICAgICAweDAwMDAyNTFlXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfQkFEX1BBQ0tFVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBCYWQgRE5TIHBhY2tldC5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX0JBRF9QQUNLRVQgPSA5NTAyO1xuXG4vLyBETlNfRVJST1JfTk9fUEFDS0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDI1MWZcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9OT19QQUNLRVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gRE5TIHBhY2tldC5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX05PX1BBQ0tFVCA9IDk1MDM7XG5cbi8vIEROU19FUlJPUl9SQ09ERSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjUyMFxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1JDT0RFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEROUyBlcnJvciwgY2hlY2sgcmNvZGUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9SQ09ERSA9IDk1MDQ7XG5cbi8vIEROU19FUlJPUl9VTlNFQ1VSRV9QQUNLRVQgICAgICAgICAgICAgMHgwMDAwMjUyMVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1VOU0VDVVJFX1BBQ0tFVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBVbnNlY3VyZWQgRE5TIHBhY2tldC5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1VOU0VDVVJFX1BBQ0tFVCA9IDk1MDU7XG5cbi8vXG4vLyAgR2VuZXJhbCBBUEkgZXJyb3JzXG4vL1xuXG4vLyBETlNfRVJST1JfSU5WQUxJRF9UWVBFICAgICAgICAgICAgICAgIDB4MDAwMDI1NGZcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9JTlZBTElEX1RZUEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBETlMgdHlwZS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX0lOVkFMSURfVFlQRSA9IDk1NTE7XG5cbi8vIEROU19FUlJPUl9JTlZBTElEX0lQX0FERFJFU1MgICAgICAgICAgMHgwMDAwMjU1MFxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX0lOVkFMSURfSVBfQUREUkVTU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIElQIGFkZHJlc3MuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9JTlZBTElEX0lQX0FERFJFU1MgPSA5NTUyO1xuXG4vLyBETlNfRVJST1JfSU5WQUxJRF9QUk9QRVJUWSAgICAgICAgICAgIDB4MDAwMDI1NTFcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9JTlZBTElEX1BST1BFUlRZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgcHJvcGVydHkuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9JTlZBTElEX1BST1BFUlRZID0gOTU1MztcblxuLy8gRE5TX0VSUk9SX1RSWV9BR0FJTl9MQVRFUiAgICAgICAgICAgICAweDAwMDAyNTUyXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfVFJZX0FHQUlOX0xBVEVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRyeSBETlMgb3BlcmF0aW9uIGFnYWluIGxhdGVyLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfVFJZX0FHQUlOX0xBVEVSID0gOTU1NDtcblxuLy8gRE5TX0VSUk9SX05PVF9VTklRVUUgICAgICAgICAgICAgICAgICAweDAwMDAyNTUzXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfTk9UX1VOSVFVRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBSZWNvcmQgZm9yIGdpdmVuIG5hbWUgYW5kIHR5cGUgaXMgbm90IHVuaXF1ZS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX05PVF9VTklRVUUgPSA5NTU1O1xuXG4vLyBETlNfRVJST1JfTk9OX1JGQ19OQU1FICAgICAgICAgICAgICAgIDB4MDAwMDI1NTRcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9OT05fUkZDX05BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIG5hbWUgZG9lcyBub3QgY29tcGx5IHdpdGggUkZDIHNwZWNpZmljYXRpb25zLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfTk9OX1JGQ19OQU1FID0gOTU1NjtcblxuLy8gRE5TX1NUQVRVU19GUUROICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNTU1XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfU1RBVFVTX0ZRRE5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIG5hbWUgaXMgYSBmdWxseS1xdWFsaWZpZWQgRE5TIG5hbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19TVEFUVVNfRlFETiA9IDk1NTc7XG5cbi8vIEROU19TVEFUVVNfRE9UVEVEX05BTUUgICAgICAgICAgICAgICAgMHgwMDAwMjU1NlxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX1NUQVRVU19ET1RURURfTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgbmFtZSBpcyBkb3R0ZWQgKG11bHRpLWxhYmVsKS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX1NUQVRVU19ET1RURURfTkFNRSA9IDk1NTg7XG5cbi8vIEROU19TVEFUVVNfU0lOR0xFX1BBUlRfTkFNRSAgICAgICAgICAgMHgwMDAwMjU1N1xuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX1NUQVRVU19TSU5HTEVfUEFSVF9OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEROUyBuYW1lIGlzIGEgc2luZ2xlLXBhcnQgbmFtZS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX1NUQVRVU19TSU5HTEVfUEFSVF9OQU1FID0gOTU1OTtcblxuLy8gRE5TX0VSUk9SX0lOVkFMSURfTkFNRV9DSEFSICAgICAgICAgICAweDAwMDAyNTU4XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfSU5WQUxJRF9OQU1FX0NIQVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIG5hbWUgY29udGFpbnMgYW4gaW52YWxpZCBjaGFyYWN0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9JTlZBTElEX05BTUVfQ0hBUiA9IDk1NjA7XG5cbi8vIEROU19FUlJPUl9OVU1FUklDX05BTUUgICAgICAgICAgICAgICAgMHgwMDAwMjU1OVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX05VTUVSSUNfTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgbmFtZSBpcyBlbnRpcmVseSBudW1lcmljLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfTlVNRVJJQ19OQU1FID0gOTU2MTtcblxuLy8gRE5TX0VSUk9SX05PVF9BTExPV0VEX09OX1JPT1RfU0VSVkVSICAweDAwMDAyNTVBXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfTk9UX0FMTE9XRURfT05fUk9PVF9TRVJWRVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiByZXF1ZXN0ZWQgaXMgbm90IHBlcm1pdHRlZCBvbiBhIEROUyByb290IHNlcnZlci5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX05PVF9BTExPV0VEX09OX1JPT1RfU0VSVkVSID0gOTU2MjtcblxuLy8gRE5TX0VSUk9SX05PVF9BTExPV0VEX1VOREVSX0RFTEVHQVRJT04gIDB4MDAwMDI1NUJcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9OT1RfQUxMT1dFRF9VTkRFUl9ERUxFR0FUSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZWNvcmQgY291bGQgbm90IGJlIGNyZWF0ZWQgYmVjYXVzZSB0aGlzIHBhcnQgb2YgdGhlIEROUyBuYW1lc3BhY2UgaGFzXG4vLyAgYmVlbiBkZWxlZ2F0ZWQgdG8gYW5vdGhlciBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9OT1RfQUxMT1dFRF9VTkRFUl9ERUxFR0FUSU9OID0gOTU2MztcblxuLy8gRE5TX0VSUk9SX0NBTk5PVF9GSU5EX1JPT1RfSElOVFMgIDB4MDAwMDI1NUNcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9DQU5OT1RfRklORF9ST09UX0hJTlRTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBETlMgc2VydmVyIGNvdWxkIG5vdCBmaW5kIGEgc2V0IG9mIHJvb3QgaGludHMuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9DQU5OT1RfRklORF9ST09UX0hJTlRTID0gOTU2NDtcblxuLy8gRE5TX0VSUk9SX0lOQ09OU0lTVEVOVF9ST09UX0hJTlRTICAweDAwMDAyNTVEXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfSU5DT05TSVNURU5UX1JPT1RfSElOVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIEROUyBzZXJ2ZXIgZm91bmQgcm9vdCBoaW50cyBidXQgdGhleSB3ZXJlIG5vdCBjb25zaXN0ZW50IGFjcm9zc1xuLy8gIGFsbCBhZGFwdGVycy5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX0lOQ09OU0lTVEVOVF9ST09UX0hJTlRTID0gOTU2NTtcblxuLy9cbi8vICBab25lIGVycm9yc1xuLy9cblxuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9aT05FX0JBU0UgPSA5NjAwO1xuXG4vLyBETlNfRVJST1JfWk9ORV9ET0VTX05PVF9FWElTVCAgICAgICAgIDB4MDAwMDI1ODFcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9aT05FX0RPRVNfTk9UX0VYSVNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEROUyB6b25lIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfWk9ORV9ET0VTX05PVF9FWElTVCA9IDk2MDE7XG5cbi8vIEROU19FUlJPUl9OT19aT05FX0lORk8gICAgICAgICAgICAgICAgMHgwMDAwMjU4MlxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX05PX1pPTkVfSU5GT1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgem9uZSBpbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfTk9fWk9ORV9JTkZPID0gOTYwMjtcblxuLy8gRE5TX0VSUk9SX0lOVkFMSURfWk9ORV9PUEVSQVRJT04gICAgICAweDAwMDAyNTgzXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfSU5WQUxJRF9aT05FX09QRVJBVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIG9wZXJhdGlvbiBmb3IgRE5TIHpvbmUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9JTlZBTElEX1pPTkVfT1BFUkFUSU9OID0gOTYwMztcblxuLy8gRE5TX0VSUk9SX1pPTkVfQ09ORklHVVJBVElPTl9FUlJPUiAgICAweDAwMDAyNTg0XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfWk9ORV9DT05GSUdVUkFUSU9OX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgRE5TIHpvbmUgY29uZmlndXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1pPTkVfQ09ORklHVVJBVElPTl9FUlJPUiA9IDk2MDQ7XG5cbi8vIEROU19FUlJPUl9aT05FX0hBU19OT19TT0FfUkVDT1JEICAgICAgMHgwMDAwMjU4NVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1pPTkVfSEFTX05PX1NPQV9SRUNPUkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHpvbmUgaGFzIG5vIHN0YXJ0IG9mIGF1dGhvcml0eSAoU09BKSByZWNvcmQuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9aT05FX0hBU19OT19TT0FfUkVDT1JEID0gOTYwNTtcblxuLy8gRE5TX0VSUk9SX1pPTkVfSEFTX05PX05TX1JFQ09SRFMgICAgICAweDAwMDAyNTg2XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfWk9ORV9IQVNfTk9fTlNfUkVDT1JEU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgem9uZSBoYXMgbm8gTmFtZSBTZXJ2ZXIgKE5TKSByZWNvcmQuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9aT05FX0hBU19OT19OU19SRUNPUkRTID0gOTYwNjtcblxuLy8gRE5TX0VSUk9SX1pPTkVfTE9DS0VEICAgICAgICAgICAgICAgICAweDAwMDAyNTg3XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfWk9ORV9MT0NLRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHpvbmUgaXMgbG9ja2VkLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfWk9ORV9MT0NLRUQgPSA5NjA3O1xuXG4vLyBETlNfRVJST1JfWk9ORV9DUkVBVElPTl9GQUlMRUQgICAgICAgIDB4MDAwMDI1ODhcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9aT05FX0NSRUFUSU9OX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgem9uZSBjcmVhdGlvbiBmYWlsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9aT05FX0NSRUFUSU9OX0ZBSUxFRCA9IDk2MDg7XG5cbi8vIEROU19FUlJPUl9aT05FX0FMUkVBRFlfRVhJU1RTICAgICAgICAgMHgwMDAwMjU4OVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1pPTkVfQUxSRUFEWV9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHpvbmUgYWxyZWFkeSBleGlzdHMuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9aT05FX0FMUkVBRFlfRVhJU1RTID0gOTYwOTtcblxuLy8gRE5TX0VSUk9SX0FVVE9aT05FX0FMUkVBRFlfRVhJU1RTICAgICAweDAwMDAyNThhXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfQVVUT1pPTkVfQUxSRUFEWV9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIGF1dG9tYXRpYyB6b25lIGFscmVhZHkgZXhpc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfQVVUT1pPTkVfQUxSRUFEWV9FWElTVFMgPSA5NjEwO1xuXG4vLyBETlNfRVJST1JfSU5WQUxJRF9aT05FX1RZUEUgICAgICAgICAgIDB4MDAwMDI1OGJcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9JTlZBTElEX1pPTkVfVFlQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIEROUyB6b25lIHR5cGUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9JTlZBTElEX1pPTkVfVFlQRSA9IDk2MTE7XG5cbi8vIEROU19FUlJPUl9TRUNPTkRBUllfUkVRVUlSRVNfTUFTVEVSX0lQIDB4MDAwMDI1OGNcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9TRUNPTkRBUllfUkVRVUlSRVNfTUFTVEVSX0lQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFNlY29uZGFyeSBETlMgem9uZSByZXF1aXJlcyBtYXN0ZXIgSVAgYWRkcmVzcy5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1NFQ09OREFSWV9SRVFVSVJFU19NQVNURVJfSVAgPSA5NjEyO1xuXG4vLyBETlNfRVJST1JfWk9ORV9OT1RfU0VDT05EQVJZICAgICAgICAgIDB4MDAwMDI1OGRcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9aT05FX05PVF9TRUNPTkRBUllcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHpvbmUgbm90IHNlY29uZGFyeS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1pPTkVfTk9UX1NFQ09OREFSWSA9IDk2MTM7XG5cbi8vIEROU19FUlJPUl9ORUVEX1NFQ09OREFSWV9BRERSRVNTRVMgICAgMHgwMDAwMjU4ZVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX05FRURfU0VDT05EQVJZX0FERFJFU1NFU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOZWVkIHNlY29uZGFyeSBJUCBhZGRyZXNzLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfTkVFRF9TRUNPTkRBUllfQUREUkVTU0VTID0gOTYxNDtcblxuLy8gRE5TX0VSUk9SX1dJTlNfSU5JVF9GQUlMRUQgICAgICAgICAgICAweDAwMDAyNThmXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfV0lOU19JTklUX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBXSU5TIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1dJTlNfSU5JVF9GQUlMRUQgPSA5NjE1O1xuXG4vLyBETlNfRVJST1JfTkVFRF9XSU5TX1NFUlZFUlMgICAgICAgICAgIDB4MDAwMDI1OTBcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9ORUVEX1dJTlNfU0VSVkVSU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOZWVkIFdJTlMgc2VydmVycy5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX05FRURfV0lOU19TRVJWRVJTID0gOTYxNjtcblxuLy8gRE5TX0VSUk9SX05CU1RBVF9JTklUX0ZBSUxFRCAgICAgICAgICAweDAwMDAyNTkxXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfTkJTVEFUX0lOSVRfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5CVFNUQVQgaW5pdGlhbGl6YXRpb24gY2FsbCBmYWlsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9OQlNUQVRfSU5JVF9GQUlMRUQgPSA5NjE3O1xuXG4vLyBETlNfRVJST1JfU09BX0RFTEVURV9JTlZBTElEICAgICAgICAgIDB4MDAwMDI1OTJcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9TT0FfREVMRVRFX0lOVkFMSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBkZWxldGUgb2Ygc3RhcnQgb2YgYXV0aG9yaXR5IChTT0EpXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9TT0FfREVMRVRFX0lOVkFMSUQgPSA5NjE4O1xuXG4vLyBETlNfRVJST1JfRk9SV0FSREVSX0FMUkVBRFlfRVhJU1RTICAgIDB4MDAwMDI1OTNcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9GT1JXQVJERVJfQUxSRUFEWV9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBjb25kaXRpb25hbCBmb3J3YXJkaW5nIHpvbmUgYWxyZWFkeSBleGlzdHMgZm9yIHRoYXQgbmFtZS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX0ZPUldBUkRFUl9BTFJFQURZX0VYSVNUUyA9IDk2MTk7XG5cbi8vIEROU19FUlJPUl9aT05FX1JFUVVJUkVTX01BU1RFUl9JUCAgICAgMHgwMDAwMjU5NFxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1pPTkVfUkVRVUlSRVNfTUFTVEVSX0lQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgem9uZSBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCBvbmUgb3IgbW9yZSBtYXN0ZXIgRE5TIHNlcnZlciBJUCBhZGRyZXNzZXMuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9aT05FX1JFUVVJUkVTX01BU1RFUl9JUCA9IDk2MjA7XG5cbi8vIEROU19FUlJPUl9aT05FX0lTX1NIVVRET1dOICAgICAgICAgICAgMHgwMDAwMjU5NVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1pPTkVfSVNfU0hVVERPV05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG9wZXJhdGlvbiBjYW5ub3QgYmUgcGVyZm9ybWVkIGJlY2F1c2UgdGhpcyB6b25lIGlzIHNodXRkb3duLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfWk9ORV9JU19TSFVURE9XTiA9IDk2MjE7XG5cbi8vXG4vLyAgRGF0YWZpbGUgZXJyb3JzXG4vL1xuXG4vLyBETlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI1YjNcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9QUklNQVJZX1JFUVVJUkVTX0RBVEFGSUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFByaW1hcnkgRE5TIHpvbmUgcmVxdWlyZXMgZGF0YWZpbGUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9QUklNQVJZX1JFUVVJUkVTX0RBVEFGSUxFID0gOTY1MTtcblxuLy8gRE5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNWI0XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfSU5WQUxJRF9EQVRBRklMRV9OQU1FXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgZGF0YWZpbGUgbmFtZSBmb3IgRE5TIHpvbmUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9JTlZBTElEX0RBVEFGSUxFX05BTUUgPSA5NjUyO1xuXG4vLyBETlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI1YjVcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9EQVRBRklMRV9PUEVOX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRmFpbGVkIHRvIG9wZW4gZGF0YWZpbGUgZm9yIEROUyB6b25lLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfREFUQUZJTEVfT1BFTl9GQUlMVVJFID0gOTY1MztcblxuLy8gRE5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNWI2XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfRklMRV9XUklURUJBQ0tfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEZhaWxlZCB0byB3cml0ZSBkYXRhZmlsZSBmb3IgRE5TIHpvbmUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9GSUxFX1dSSVRFQkFDS19GQUlMRUQgPSA5NjU0O1xuXG4vLyBETlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDI1Yjdcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9EQVRBRklMRV9QQVJTSU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEZhaWx1cmUgd2hpbGUgcmVhZGluZyBkYXRhZmlsZSBmb3IgRE5TIHpvbmUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9EQVRBRklMRV9QQVJTSU5HID0gOTY1NTtcblxuLy9cbi8vICBEYXRhYmFzZSBlcnJvcnNcbi8vXG5cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfREFUQUJBU0VfQkFTRSA9IDk3MDA7XG5cbi8vIEROU19FUlJPUl9SRUNPUkRfRE9FU19OT1RfRVhJU1QgICAgICAgMHgwMDAwMjVlNVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1JFQ09SRF9ET0VTX05PVF9FWElTVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgcmVjb3JkIGRvZXMgbm90IGV4aXN0LlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfUkVDT1JEX0RPRVNfTk9UX0VYSVNUID0gOTcwMTtcblxuLy8gRE5TX0VSUk9SX1JFQ09SRF9GT1JNQVQgICAgICAgICAgICAgICAweDAwMDAyNWU2XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfUkVDT1JEX0ZPUk1BVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgcmVjb3JkIGZvcm1hdCBlcnJvci5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1JFQ09SRF9GT1JNQVQgPSA5NzAyO1xuXG4vLyBETlNfRVJST1JfTk9ERV9DUkVBVElPTl9GQUlMRUQgICAgICAgIDB4MDAwMDI1ZTdcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9OT0RFX0NSRUFUSU9OX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOb2RlIGNyZWF0aW9uIGZhaWx1cmUgaW4gRE5TLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfTk9ERV9DUkVBVElPTl9GQUlMRUQgPSA5NzAzO1xuXG4vLyBETlNfRVJST1JfVU5LTk9XTl9SRUNPUkRfVFlQRSAgICAgICAgIDB4MDAwMDI1ZThcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9VTktOT1dOX1JFQ09SRF9UWVBFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVua25vd24gRE5TIHJlY29yZCB0eXBlLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfVU5LTk9XTl9SRUNPUkRfVFlQRSA9IDk3MDQ7XG5cbi8vIEROU19FUlJPUl9SRUNPUkRfVElNRURfT1VUICAgICAgICAgICAgMHgwMDAwMjVlOVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1JFQ09SRF9USU1FRF9PVVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHJlY29yZCB0aW1lZCBvdXQuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9SRUNPUkRfVElNRURfT1VUID0gOTcwNTtcblxuLy8gRE5TX0VSUk9SX05BTUVfTk9UX0lOX1pPTkUgICAgICAgICAgICAweDAwMDAyNWVhXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfTkFNRV9OT1RfSU5fWk9ORVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOYW1lIG5vdCBpbiBETlMgem9uZS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX05BTUVfTk9UX0lOX1pPTkUgPSA5NzA2O1xuXG4vLyBETlNfRVJST1JfQ05BTUVfTE9PUCAgICAgICAgICAgICAgICAgIDB4MDAwMDI1ZWJcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9DTkFNRV9MT09QXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENOQU1FIGxvb3AgZGV0ZWN0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9DTkFNRV9MT09QID0gOTcwNztcblxuLy8gRE5TX0VSUk9SX05PREVfSVNfQ05BTUUgICAgICAgICAgICAgICAweDAwMDAyNWVjXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfTk9ERV9JU19DTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOb2RlIGlzIGEgQ05BTUUgRE5TIHJlY29yZC5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX05PREVfSVNfQ05BTUUgPSA5NzA4O1xuXG4vLyBETlNfRVJST1JfQ05BTUVfQ09MTElTSU9OICAgICAgICAgICAgIDB4MDAwMDI1ZWRcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9DTkFNRV9DT0xMSVNJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBDTkFNRSByZWNvcmQgYWxyZWFkeSBleGlzdHMgZm9yIGdpdmVuIG5hbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9DTkFNRV9DT0xMSVNJT04gPSA5NzA5O1xuXG4vLyBETlNfRVJST1JfUkVDT1JEX09OTFlfQVRfWk9ORV9ST09UICAgIDB4MDAwMDI1ZWVcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9SRUNPUkRfT05MWV9BVF9aT05FX1JPT1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgUmVjb3JkIG9ubHkgYXQgRE5TIHpvbmUgcm9vdC5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1JFQ09SRF9PTkxZX0FUX1pPTkVfUk9PVCA9IDk3MTA7XG5cbi8vIEROU19FUlJPUl9SRUNPUkRfQUxSRUFEWV9FWElTVFMgICAgICAgMHgwMDAwMjVlZlxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX1JFQ09SRF9BTFJFQURZX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgcmVjb3JkIGFscmVhZHkgZXhpc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfUkVDT1JEX0FMUkVBRFlfRVhJU1RTID0gOTcxMTtcblxuLy8gRE5TX0VSUk9SX1NFQ09OREFSWV9EQVRBICAgICAgICAgICAgICAweDAwMDAyNWYwXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfU0VDT05EQVJZX0RBVEFcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgU2Vjb25kYXJ5IEROUyB6b25lIGRhdGEgZXJyb3IuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9TRUNPTkRBUllfREFUQSA9IDk3MTI7XG5cbi8vIEROU19FUlJPUl9OT19DUkVBVEVfQ0FDSEVfREFUQSAgICAgICAgMHgwMDAwMjVmMVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX05PX0NSRUFURV9DQUNIRV9EQVRBXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENvdWxkIG5vdCBjcmVhdGUgRE5TIGNhY2hlIGRhdGEuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9OT19DUkVBVEVfQ0FDSEVfREFUQSA9IDk3MTM7XG5cbi8vIEROU19FUlJPUl9OQU1FX0RPRVNfTk9UX0VYSVNUICAgICAgICAgMHgwMDAwMjVmMlxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX05BTUVfRE9FU19OT1RfRVhJU1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIG5hbWUgZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9OQU1FX0RPRVNfTk9UX0VYSVNUID0gOTcxNDtcblxuLy8gRE5TX1dBUk5JTkdfUFRSX0NSRUFURV9GQUlMRUQgICAgICAgICAweDAwMDAyNWYzXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfV0FSTklOR19QVFJfQ1JFQVRFX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBDb3VsZCBub3QgY3JlYXRlIHBvaW50ZXIgKFBUUikgcmVjb3JkLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfV0FSTklOR19QVFJfQ1JFQVRFX0ZBSUxFRCA9IDk3MTU7XG5cbi8vIEROU19XQVJOSU5HX0RPTUFJTl9VTkRFTEVURUQgICAgICAgICAgMHgwMDAwMjVmNFxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX1dBUk5JTkdfRE9NQUlOX1VOREVMRVRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgZG9tYWluIHdhcyB1bmRlbGV0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19XQVJOSU5HX0RPTUFJTl9VTkRFTEVURUQgPSA5NzE2O1xuXG4vLyBETlNfRVJST1JfRFNfVU5BVkFJTEFCTEUgICAgICAgICAgICAgIDB4MDAwMDI1ZjVcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9EU19VTkFWQUlMQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHNlcnZpY2UgaXMgdW5hdmFpbGFibGUuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9EU19VTkFWQUlMQUJMRSA9IDk3MTc7XG5cbi8vIEROU19FUlJPUl9EU19aT05FX0FMUkVBRFlfRVhJU1RTICAgICAgMHgwMDAwMjVmNlxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX0RTX1pPTkVfQUxSRUFEWV9FWElTVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHpvbmUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGRpcmVjdG9yeSBzZXJ2aWNlLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfRFNfWk9ORV9BTFJFQURZX0VYSVNUUyA9IDk3MTg7XG5cbi8vIEROU19FUlJPUl9OT19CT09URklMRV9JRl9EU19aT05FICAgICAgMHgwMDAwMjVmN1xuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX05PX0JPT1RGSUxFX0lGX0RTX1pPTkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIHNlcnZlciBub3QgY3JlYXRpbmcgb3IgcmVhZGluZyB0aGUgYm9vdCBmaWxlIGZvciB0aGUgZGlyZWN0b3J5IHNlcnZpY2UgaW50ZWdyYXRlZCBETlMgem9uZS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX05PX0JPT1RGSUxFX0lGX0RTX1pPTkUgPSA5NzE5O1xuXG4vL1xuLy8gIE9wZXJhdGlvbiBlcnJvcnNcbi8vXG5cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfT1BFUkFUSU9OX0JBU0UgPSA5NzUwO1xuXG4vLyBETlNfSU5GT19BWEZSX0NPTVBMRVRFICAgICAgICAgICAgICAgIDB4MDAwMDI2MTdcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19JTkZPX0FYRlJfQ09NUExFVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRE5TIEFYRlIgKHpvbmUgdHJhbnNmZXIpIGNvbXBsZXRlLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfSU5GT19BWEZSX0NPTVBMRVRFID0gOTc1MTtcblxuLy8gRE5TX0VSUk9SX0FYRlIgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyNjE4XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfQVhGUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBETlMgem9uZSB0cmFuc2ZlciBmYWlsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9BWEZSID0gOTc1MjtcblxuLy8gRE5TX0lORk9fQURERURfTE9DQUxfV0lOUyAgICAgICAgICAgICAweDAwMDAyNjE5XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfSU5GT19BRERFRF9MT0NBTF9XSU5TXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFkZGVkIGxvY2FsIFdJTlMgc2VydmVyLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfSU5GT19BRERFRF9MT0NBTF9XSU5TID0gOTc1MztcblxuLy9cbi8vICBTZWN1cmUgdXBkYXRlXG4vL1xuXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX1NFQ1VSRV9CQVNFID0gOTgwMDtcblxuLy8gRE5TX1NUQVRVU19DT05USU5VRV9ORUVERUQgICAgICAgICAgICAweDAwMDAyNjQ5XG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfU1RBVFVTX0NPTlRJTlVFX05FRURFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTZWN1cmUgdXBkYXRlIGNhbGwgbmVlZHMgdG8gY29udGludWUgdXBkYXRlIHJlcXVlc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19TVEFUVVNfQ09OVElOVUVfTkVFREVEID0gOTgwMTtcblxuLy9cbi8vICBTZXR1cCBlcnJvcnNcbi8vXG5cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfU0VUVVBfQkFTRSA9IDk4NTA7XG5cbi8vIEROU19FUlJPUl9OT19UQ1BJUCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjY3YlxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX05PX1RDUElQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRDUC9JUCBuZXR3b3JrIHByb3RvY29sIG5vdCBpbnN0YWxsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9OT19UQ1BJUCA9IDk4NTE7XG5cbi8vIEROU19FUlJPUl9OT19ETlNfU0VSVkVSUyAgICAgICAgICAgICAgMHgwMDAwMjY3Y1xuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX05PX0ROU19TRVJWRVJTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIEROUyBzZXJ2ZXJzIGNvbmZpZ3VyZWQgZm9yIGxvY2FsIHN5c3RlbS5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX05PX0ROU19TRVJWRVJTID0gOTg1MjtcblxuLy9cbi8vICBEaXJlY3RvcnkgcGFydGl0aW9uIChEUCkgZXJyb3JzXG4vL1xuXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX0RQX0JBU0UgPSA5OTAwO1xuXG4vLyBETlNfRVJST1JfRFBfRE9FU19OT1RfRVhJU1QgICAgICAgICAgIDB4MDAwMDI2YWRcbi8vXG4vLyBNZXNzYWdlSWQ6IEROU19FUlJPUl9EUF9ET0VTX05PVF9FWElTVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBwYXJ0aXRpb24gZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9EUF9ET0VTX05PVF9FWElTVCA9IDk5MDE7XG5cbi8vIEROU19FUlJPUl9EUF9BTFJFQURZX0VYSVNUUyAgICAgICAgICAgMHgwMDAwMjZhZVxuLy9cbi8vIE1lc3NhZ2VJZDogRE5TX0VSUk9SX0RQX0FMUkVBRFlfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IHBhcnRpdGlvbiBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRE5TX0VSUk9SX0RQX0FMUkVBRFlfRVhJU1RTID0gOTkwMjtcblxuLy8gRE5TX0VSUk9SX0RQX05PVF9FTkxJU1RFRCAgICAgICAgICAgICAweDAwMDAyNmFmXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfRFBfTk9UX0VOTElTVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgRE5TIHNlcnZlciBpcyBub3QgZW5saXN0ZWQgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgcGFydGl0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfRFBfTk9UX0VOTElTVEVEID0gOTkwMztcblxuLy8gRE5TX0VSUk9SX0RQX0FMUkVBRFlfRU5MSVNURUQgICAgICAgICAweDAwMDAyNmIwXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfRFBfQUxSRUFEWV9FTkxJU1RFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGlzIEROUyBzZXJ2ZXIgaXMgYWxyZWFkeSBlbmxpc3RlZCBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBwYXJ0aXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9EUF9BTFJFQURZX0VOTElTVEVEID0gOTkwNDtcblxuLy8gRE5TX0VSUk9SX0RQX05PVF9BVkFJTEFCTEUgICAgICAgICAgICAweDAwMDAyNmIxXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfRFBfTk9UX0FWQUlMQUJMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgZGlyZWN0b3J5IHBhcnRpdGlvbiBpcyBub3QgYXZhaWxhYmxlIGF0IHRoaXMgdGltZS4gUGxlYXNlIHdhaXRcbi8vICBhIGZldyBtaW51dGVzIGFuZCB0cnkgYWdhaW4uXG4vL1xuZXhwb3J0IGNvbnN0IEROU19FUlJPUl9EUF9OT1RfQVZBSUxBQkxFID0gOTkwNTtcblxuLy8gRE5TX0VSUk9SX0RQX0ZTTU9fRVJST1IgICAgICAgICAgICAgICAweDAwMDAyNmIyXG4vL1xuLy8gTWVzc2FnZUlkOiBETlNfRVJST1JfRFBfRlNNT19FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYXBwbGljYXRpb24gZGlyZWN0b3J5IHBhcnRpdGlvbiBvcGVyYXRpb24gZmFpbGVkLiBUaGUgZG9tYWluIGNvbnRyb2xsZXJcbi8vICBob2xkaW5nIHRoZSBkb21haW4gbmFtaW5nIG1hc3RlciByb2xlIGlzIGRvd24gb3IgdW5hYmxlIHRvIHNlcnZpY2UgdGhlXG4vLyAgcmVxdWVzdCBvciBpcyBub3QgcnVubmluZyBXaW5kb3dzIFNlcnZlciAyMDAzLlxuLy9cbmV4cG9ydCBjb25zdCBETlNfRVJST1JfRFBfRlNNT19FUlJPUiA9IDk5MDY7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgICAgICAgICAgICBFbmQgb2YgRE5TIEVycm9yIENvZGVzICAgICAgICAgICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICAgICAgICAgICAgICAgICA5MDAwIHRvIDk5OTkgICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vICAgICAgICAgICAgICAgV2luU29jayBFcnJvciBDb2RlcyAgICAgICAgICAgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgICAgICAgICAgICAgICAgMTAwMDAgdG8gMTE5OTkgICAgICAgICAgICAgICAgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vL1xuLy8gV2luU29jayBlcnJvciBjb2RlcyBhcmUgYWxzbyBkZWZpbmVkIGluIFdpblNvY2suaFxuLy8gYW5kIFdpblNvY2syLmgsIGhlbmNlIHRoZSBJRkRFRlxuLy9cbmV4cG9ydCBjb25zdCBXU0FCQVNFRVJSID0gMTAwMDA7XG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FFSU5UUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGJsb2NraW5nIG9wZXJhdGlvbiB3YXMgaW50ZXJydXB0ZWQgYnkgYSBjYWxsIHRvIFdTQUNhbmNlbEJsb2NraW5nQ2FsbC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRUlOVFIgPSAxMDAwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRUJBREZcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGZpbGUgaGFuZGxlIHN1cHBsaWVkIGlzIG5vdCB2YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRUJBREYgPSAxMDAwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRUFDQ0VTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gYWNjZXNzIGEgc29ja2V0IGluIGEgd2F5IGZvcmJpZGRlbiBieSBpdHMgYWNjZXNzIHBlcm1pc3Npb25zLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFQUNDRVMgPSAxMDAxMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRUZBVUxUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzeXN0ZW0gZGV0ZWN0ZWQgYW4gaW52YWxpZCBwb2ludGVyIGFkZHJlc3MgaW4gYXR0ZW1wdGluZyB0byB1c2UgYSBwb2ludGVyIGFyZ3VtZW50IGluIGEgY2FsbC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRUZBVUxUID0gMTAwMTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVJTlZBTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBpbnZhbGlkIGFyZ3VtZW50IHdhcyBzdXBwbGllZC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRUlOVkFMID0gMTAwMjI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVNRklMRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUb28gbWFueSBvcGVuIHNvY2tldHMuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVNRklMRSA9IDEwMDI0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FFV09VTERCTE9DS1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIG5vbi1ibG9ja2luZyBzb2NrZXQgb3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgaW1tZWRpYXRlbHkuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVXT1VMREJMT0NLID0gMTAwMzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVJTlBST0dSRVNTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgYmxvY2tpbmcgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBleGVjdXRpbmcuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVJTlBST0dSRVNTID0gMTAwMzY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVBTFJFQURZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIG9wZXJhdGlvbiB3YXMgYXR0ZW1wdGVkIG9uIGEgbm9uLWJsb2NraW5nIHNvY2tldCB0aGF0IGFscmVhZHkgaGFkIGFuIG9wZXJhdGlvbiBpbiBwcm9ncmVzcy5cbi8vXG5leHBvcnQgY29uc3QgV1NBRUFMUkVBRFkgPSAxMDAzNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRU5PVFNPQ0tcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgb24gc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgc29ja2V0LlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFTk9UU09DSyA9IDEwMDM4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FFREVTVEFERFJSRVFcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSByZXF1aXJlZCBhZGRyZXNzIHdhcyBvbWl0dGVkIGZyb20gYW4gb3BlcmF0aW9uIG9uIGEgc29ja2V0LlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFREVTVEFERFJSRVEgPSAxMDAzOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRU1TR1NJWkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBtZXNzYWdlIHNlbnQgb24gYSBkYXRhZ3JhbSBzb2NrZXQgd2FzIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbCBtZXNzYWdlIGJ1ZmZlciBvciBzb21lIG90aGVyIG5ldHdvcmsgbGltaXQsIG9yIHRoZSBidWZmZXIgdXNlZCB0byByZWNlaXZlIGEgZGF0YWdyYW0gaW50byB3YXMgc21hbGxlciB0aGFuIHRoZSBkYXRhZ3JhbSBpdHNlbGYuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVNU0dTSVpFID0gMTAwNDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVQUk9UT1RZUEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBwcm90b2NvbCB3YXMgc3BlY2lmaWVkIGluIHRoZSBzb2NrZXQgZnVuY3Rpb24gY2FsbCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlbWFudGljcyBvZiB0aGUgc29ja2V0IHR5cGUgcmVxdWVzdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFUFJPVE9UWVBFID0gMTAwNDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVOT1BST1RPT1BUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIHVua25vd24sIGludmFsaWQsIG9yIHVuc3VwcG9ydGVkIG9wdGlvbiBvciBsZXZlbCB3YXMgc3BlY2lmaWVkIGluIGEgZ2V0c29ja29wdCBvciBzZXRzb2Nrb3B0IGNhbGwuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVOT1BST1RPT1BUID0gMTAwNDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVQUk9UT05PU1VQUE9SVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIHByb3RvY29sIGhhcyBub3QgYmVlbiBjb25maWd1cmVkIGludG8gdGhlIHN5c3RlbSwgb3Igbm8gaW1wbGVtZW50YXRpb24gZm9yIGl0IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgV1NBRVBST1RPTk9TVVBQT1JUID0gMTAwNDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVTT0NLVE5PU1VQUE9SVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3VwcG9ydCBmb3IgdGhlIHNwZWNpZmllZCBzb2NrZXQgdHlwZSBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIGFkZHJlc3MgZmFtaWx5LlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFU09DS1ROT1NVUFBPUlQgPSAxMDA0NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRU9QTk9UU1VQUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYXR0ZW1wdGVkIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgdHlwZSBvZiBvYmplY3QgcmVmZXJlbmNlZC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRU9QTk9UU1VQUCA9IDEwMDQ1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FFUEZOT1NVUFBPUlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByb3RvY29sIGZhbWlseSBoYXMgbm90IGJlZW4gY29uZmlndXJlZCBpbnRvIHRoZSBzeXN0ZW0gb3Igbm8gaW1wbGVtZW50YXRpb24gZm9yIGl0IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgV1NBRVBGTk9TVVBQT1JUID0gMTAwNDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVBRk5PU1VQUE9SVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBhZGRyZXNzIGluY29tcGF0aWJsZSB3aXRoIHRoZSByZXF1ZXN0ZWQgcHJvdG9jb2wgd2FzIHVzZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVBRk5PU1VQUE9SVCA9IDEwMDQ3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FFQUREUklOVVNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE9ubHkgb25lIHVzYWdlIG9mIGVhY2ggc29ja2V0IGFkZHJlc3MgKHByb3RvY29sL25ldHdvcmsgYWRkcmVzcy9wb3J0KSBpcyBub3JtYWxseSBwZXJtaXR0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVBRERSSU5VU0UgPSAxMDA0ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRUFERFJOT1RBVkFJTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIGFkZHJlc3MgaXMgbm90IHZhbGlkIGluIGl0cyBjb250ZXh0LlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFQUREUk5PVEFWQUlMID0gMTAwNDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVORVRET1dOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgc29ja2V0IG9wZXJhdGlvbiBlbmNvdW50ZXJlZCBhIGRlYWQgbmV0d29yay5cbi8vXG5leHBvcnQgY29uc3QgV1NBRU5FVERPV04gPSAxMDA1MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRU5FVFVOUkVBQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBzb2NrZXQgb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgdG8gYW4gdW5yZWFjaGFibGUgbmV0d29yay5cbi8vXG5leHBvcnQgY29uc3QgV1NBRU5FVFVOUkVBQ0ggPSAxMDA1MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRU5FVFJFU0VUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBjb25uZWN0aW9uIGhhcyBiZWVuIGJyb2tlbiBkdWUgdG8ga2VlcC1hbGl2ZSBhY3Rpdml0eSBkZXRlY3RpbmcgYSBmYWlsdXJlIHdoaWxlIHRoZSBvcGVyYXRpb24gd2FzIGluIHByb2dyZXNzLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFTkVUUkVTRVQgPSAxMDA1MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRUNPTk5BQk9SVEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24gd2FzIGFib3J0ZWQgYnkgdGhlIHNvZnR3YXJlIGluIHlvdXIgaG9zdCBtYWNoaW5lLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFQ09OTkFCT1JURUQgPSAxMDA1MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRUNPTk5SRVNFVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBleGlzdGluZyBjb25uZWN0aW9uIHdhcyBmb3JjaWJseSBjbG9zZWQgYnkgdGhlIHJlbW90ZSBob3N0LlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFQ09OTlJFU0VUID0gMTAwNTQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVOT0JVRlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gb3BlcmF0aW9uIG9uIGEgc29ja2V0IGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSB0aGUgc3lzdGVtIGxhY2tlZCBzdWZmaWNpZW50IGJ1ZmZlciBzcGFjZSBvciBiZWNhdXNlIGEgcXVldWUgd2FzIGZ1bGwuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVOT0JVRlMgPSAxMDA1NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRUlTQ09OTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGNvbm5lY3QgcmVxdWVzdCB3YXMgbWFkZSBvbiBhbiBhbHJlYWR5IGNvbm5lY3RlZCBzb2NrZXQuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVJU0NPTk4gPSAxMDA1NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRU5PVENPTk5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSByZXF1ZXN0IHRvIHNlbmQgb3IgcmVjZWl2ZSBkYXRhIHdhcyBkaXNhbGxvd2VkIGJlY2F1c2UgdGhlIHNvY2tldCBpcyBub3QgY29ubmVjdGVkIGFuZCAod2hlbiBzZW5kaW5nIG9uIGEgZGF0YWdyYW0gc29ja2V0IHVzaW5nIGEgc2VuZHRvIGNhbGwpIG5vIGFkZHJlc3Mgd2FzIHN1cHBsaWVkLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFTk9UQ09OTiA9IDEwMDU3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FFU0hVVERPV05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSByZXF1ZXN0IHRvIHNlbmQgb3IgcmVjZWl2ZSBkYXRhIHdhcyBkaXNhbGxvd2VkIGJlY2F1c2UgdGhlIHNvY2tldCBoYWQgYWxyZWFkeSBiZWVuIHNodXQgZG93biBpbiB0aGF0IGRpcmVjdGlvbiB3aXRoIGEgcHJldmlvdXMgc2h1dGRvd24gY2FsbC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRVNIVVRET1dOID0gMTAwNTg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVUT09NQU5ZUkVGU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUb28gbWFueSByZWZlcmVuY2VzIHRvIHNvbWUga2VybmVsIG9iamVjdC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRVRPT01BTllSRUZTID0gMTAwNTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVUSU1FRE9VVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGNvbm5lY3Rpb24gYXR0ZW1wdCBmYWlsZWQgYmVjYXVzZSB0aGUgY29ubmVjdGVkIHBhcnR5IGRpZCBub3QgcHJvcGVybHkgcmVzcG9uZCBhZnRlciBhIHBlcmlvZCBvZiB0aW1lLCBvciBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIGZhaWxlZCBiZWNhdXNlIGNvbm5lY3RlZCBob3N0IGhhcyBmYWlsZWQgdG8gcmVzcG9uZC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRVRJTUVET1VUID0gMTAwNjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVDT05OUkVGVVNFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBObyBjb25uZWN0aW9uIGNvdWxkIGJlIG1hZGUgYmVjYXVzZSB0aGUgdGFyZ2V0IG1hY2hpbmUgYWN0aXZlbHkgcmVmdXNlZCBpdC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRUNPTk5SRUZVU0VEID0gMTAwNjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVMT09QXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCB0cmFuc2xhdGUgbmFtZS5cbi8vXG5leHBvcnQgY29uc3QgV1NBRUxPT1AgPSAxMDA2MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRU5BTUVUT09MT05HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5hbWUgY29tcG9uZW50IG9yIG5hbWUgd2FzIHRvbyBsb25nLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFTkFNRVRPT0xPTkcgPSAxMDA2MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRUhPU1RET1dOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgc29ja2V0IG9wZXJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgZGVzdGluYXRpb24gaG9zdCB3YXMgZG93bi5cbi8vXG5leHBvcnQgY29uc3QgV1NBRUhPU1RET1dOID0gMTAwNjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVIT1NUVU5SRUFDSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHNvY2tldCBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCB0byBhbiB1bnJlYWNoYWJsZSBob3N0LlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFSE9TVFVOUkVBQ0ggPSAxMDA2NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRU5PVEVNUFRZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENhbm5vdCByZW1vdmUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgZW1wdHkuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVOT1RFTVBUWSA9IDEwMDY2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FFUFJPQ0xJTVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIFdpbmRvd3MgU29ja2V0cyBpbXBsZW1lbnRhdGlvbiBtYXkgaGF2ZSBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgYXBwbGljYXRpb25zIHRoYXQgbWF5IHVzZSBpdCBzaW11bHRhbmVvdXNseS5cbi8vXG5leHBvcnQgY29uc3QgV1NBRVBST0NMSU0gPSAxMDA2NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRVVTRVJTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFJhbiBvdXQgb2YgcXVvdGEuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVVU0VSUyA9IDEwMDY4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FFRFFVT1Rcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgUmFuIG91dCBvZiBkaXNrIHF1b3RhLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFRFFVT1QgPSAxMDA2OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRVNUQUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEZpbGUgaGFuZGxlIHJlZmVyZW5jZSBpcyBubyBsb25nZXIgYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFU1RBTEUgPSAxMDA3MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRVJFTU9URVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJdGVtIGlzIG5vdCBhdmFpbGFibGUgbG9jYWxseS5cbi8vXG5leHBvcnQgY29uc3QgV1NBRVJFTU9URSA9IDEwMDcxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FTWVNOT1RSRUFEWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBXU0FTdGFydHVwIGNhbm5vdCBmdW5jdGlvbiBhdCB0aGlzIHRpbWUgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBzeXN0ZW0gaXQgdXNlcyB0byBwcm92aWRlIG5ldHdvcmsgc2VydmljZXMgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FTWVNOT1RSRUFEWSA9IDEwMDkxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FWRVJOT1RTVVBQT1JURURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIFdpbmRvd3MgU29ja2V0cyB2ZXJzaW9uIHJlcXVlc3RlZCBpcyBub3Qgc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FWRVJOT1RTVVBQT1JURUQgPSAxMDA5MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBTk9USU5JVElBTElTRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRWl0aGVyIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm90IGNhbGxlZCBXU0FTdGFydHVwLCBvciBXU0FTdGFydHVwIGZhaWxlZC5cbi8vXG5leHBvcnQgY29uc3QgV1NBTk9USU5JVElBTElTRUQgPSAxMDA5MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRURJU0NPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBSZXR1cm5lZCBieSBXU0FSZWN2IG9yIFdTQVJlY3ZGcm9tIHRvIGluZGljYXRlIHRoZSByZW1vdGUgcGFydHkgaGFzIGluaXRpYXRlZCBhIGdyYWNlZnVsIHNodXRkb3duIHNlcXVlbmNlLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FFRElTQ09OID0gMTAxMDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVOT01PUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gbW9yZSByZXN1bHRzIGNhbiBiZSByZXR1cm5lZCBieSBXU0FMb29rdXBTZXJ2aWNlTmV4dC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRU5PTU9SRSA9IDEwMTAyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FFQ0FOQ0VMTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgY2FsbCB0byBXU0FMb29rdXBTZXJ2aWNlRW5kIHdhcyBtYWRlIHdoaWxlIHRoaXMgY2FsbCB3YXMgc3RpbGwgcHJvY2Vzc2luZy4gVGhlIGNhbGwgaGFzIGJlZW4gY2FuY2VsZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVDQU5DRUxMRUQgPSAxMDEwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRUlOVkFMSURQUk9DVEFCTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByb2NlZHVyZSBjYWxsIHRhYmxlIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVJTlZBTElEUFJPQ1RBQkxFID0gMTAxMDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVJTlZBTElEUFJPVklERVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBzZXJ2aWNlIHByb3ZpZGVyIGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVJTlZBTElEUFJPVklERVIgPSAxMDEwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBRVBST1ZJREVSRkFJTEVESU5JVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcmVxdWVzdGVkIHNlcnZpY2UgcHJvdmlkZXIgY291bGQgbm90IGJlIGxvYWRlZCBvciBpbml0aWFsaXplZC5cbi8vXG5leHBvcnQgY29uc3QgV1NBRVBST1ZJREVSRkFJTEVESU5JVCA9IDEwMTA2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FTWVNDQUxMRkFJTFVSRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIHN5c3RlbSBjYWxsIHRoYXQgc2hvdWxkIG5ldmVyIGZhaWwgaGFzIGZhaWxlZC5cbi8vXG5leHBvcnQgY29uc3QgV1NBU1lTQ0FMTEZBSUxVUkUgPSAxMDEwNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBU0VSVklDRV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gc3VjaCBzZXJ2aWNlIGlzIGtub3duLiBUaGUgc2VydmljZSBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIHNwZWNpZmllZCBuYW1lIHNwYWNlLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FTRVJWSUNFX05PVF9GT1VORCA9IDEwMTA4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FUWVBFX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIGNsYXNzIHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQVRZUEVfTk9UX0ZPVU5EID0gMTAxMDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9FX05PX01PUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gbW9yZSByZXN1bHRzIGNhbiBiZSByZXR1cm5lZCBieSBXU0FMb29rdXBTZXJ2aWNlTmV4dC5cbi8vXG5leHBvcnQgY29uc3QgV1NBX0VfTk9fTU9SRSA9IDEwMTEwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FfRV9DQU5DRUxMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBjYWxsIHRvIFdTQUxvb2t1cFNlcnZpY2VFbmQgd2FzIG1hZGUgd2hpbGUgdGhpcyBjYWxsIHdhcyBzdGlsbCBwcm9jZXNzaW5nLiBUaGUgY2FsbCBoYXMgYmVlbiBjYW5jZWxlZC5cbi8vXG5leHBvcnQgY29uc3QgV1NBX0VfQ0FOQ0VMTEVEID0gMTAxMTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUVSRUZVU0VEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgZGF0YWJhc2UgcXVlcnkgZmFpbGVkIGJlY2F1c2UgaXQgd2FzIGFjdGl2ZWx5IHJlZnVzZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQUVSRUZVU0VEID0gMTAxMTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQUhPU1RfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIHN1Y2ggaG9zdCBpcyBrbm93bi5cbi8vXG5leHBvcnQgY29uc3QgV1NBSE9TVF9OT1RfRk9VTkQgPSAxMTAwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBVFJZX0FHQUlOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoaXMgaXMgdXN1YWxseSBhIHRlbXBvcmFyeSBlcnJvciBkdXJpbmcgaG9zdG5hbWUgcmVzb2x1dGlvbiBhbmQgbWVhbnMgdGhhdCB0aGUgbG9jYWwgc2VydmVyIGRpZCBub3QgcmVjZWl2ZSBhIHJlc3BvbnNlIGZyb20gYW4gYXV0aG9yaXRhdGl2ZSBzZXJ2ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQVRSWV9BR0FJTiA9IDExMDAyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FOT19SRUNPVkVSWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIG5vbi1yZWNvdmVyYWJsZSBlcnJvciBvY2N1cnJlZCBkdXJpbmcgYSBkYXRhYmFzZSBsb29rdXAuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQU5PX1JFQ09WRVJZID0gMTEwMDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQU5PX0RBVEFcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlcXVlc3RlZCBuYW1lIGlzIHZhbGlkLCBidXQgbm8gZGF0YSBvZiB0aGUgcmVxdWVzdGVkIHR5cGUgd2FzIGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FOT19EQVRBID0gMTEwMDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9RT1NfUkVDRUlWRVJTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEF0IGxlYXN0IG9uZSByZXNlcnZlIGhhcyBhcnJpdmVkLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX1JFQ0VJVkVSUyA9IDExMDA1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FfUU9TX1NFTkRFUlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQXQgbGVhc3Qgb25lIHBhdGggaGFzIGFycml2ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQV9RT1NfU0VOREVSUyA9IDExMDA2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FfUU9TX05PX1NFTkRFUlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlcmUgYXJlIG5vIHNlbmRlcnMuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQV9RT1NfTk9fU0VOREVSUyA9IDExMDA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FfUU9TX05PX1JFQ0VJVkVSU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGVyZSBhcmUgbm8gcmVjZWl2ZXJzLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX05PX1JFQ0VJVkVSUyA9IDExMDA4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FfUU9TX1JFUVVFU1RfQ09ORklSTUVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFJlc2VydmUgaGFzIGJlZW4gY29uZmlybWVkLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX1JFUVVFU1RfQ09ORklSTUVEID0gMTEwMDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9RT1NfQURNSVNTSU9OX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRXJyb3IgZHVlIHRvIGxhY2sgb2YgcmVzb3VyY2VzLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX0FETUlTU0lPTl9GQUlMVVJFID0gMTEwMTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9RT1NfUE9MSUNZX0ZBSUxVUkVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgUmVqZWN0ZWQgZm9yIGFkbWluaXN0cmF0aXZlIHJlYXNvbnMgLSBiYWQgY3JlZGVudGlhbHMuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQV9RT1NfUE9MSUNZX0ZBSUxVUkUgPSAxMTAxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBX1FPU19CQURfU1RZTEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5rbm93biBvciBjb25mbGljdGluZyBzdHlsZS5cbi8vXG5leHBvcnQgY29uc3QgV1NBX1FPU19CQURfU1RZTEUgPSAxMTAxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBX1FPU19CQURfT0JKRUNUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFByb2JsZW0gd2l0aCBzb21lIHBhcnQgb2YgdGhlIGZpbHRlcnNwZWMgb3IgcHJvdmlkZXJzcGVjaWZpYyBidWZmZXIgaW4gZ2VuZXJhbC5cbi8vXG5leHBvcnQgY29uc3QgV1NBX1FPU19CQURfT0JKRUNUID0gMTEwMTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9RT1NfVFJBRkZJQ19DVFJMX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFByb2JsZW0gd2l0aCBzb21lIHBhcnQgb2YgdGhlIGZsb3dzcGVjLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX1RSQUZGSUNfQ1RSTF9FUlJPUiA9IDExMDE0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FfUU9TX0dFTkVSSUNfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgR2VuZXJhbCBRT1MgZXJyb3IuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQV9RT1NfR0VORVJJQ19FUlJPUiA9IDExMDE1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FfUU9TX0VTRVJWSUNFVFlQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBpbnZhbGlkIG9yIHVucmVjb2duaXplZCBzZXJ2aWNlIHR5cGUgd2FzIGZvdW5kIGluIHRoZSBmbG93c3BlYy5cbi8vXG5leHBvcnQgY29uc3QgV1NBX1FPU19FU0VSVklDRVRZUEUgPSAxMTAxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBX1FPU19FRkxPV1NQRUNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gaW52YWxpZCBvciBpbmNvbnNpc3RlbnQgZmxvd3NwZWMgd2FzIGZvdW5kIGluIHRoZSBRT1Mgc3RydWN0dXJlLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX0VGTE9XU1BFQyA9IDExMDE3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FfUU9TX0VQUk9WU1BFQ0JVRlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIFFPUyBwcm92aWRlci1zcGVjaWZpYyBidWZmZXIuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQV9RT1NfRVBST1ZTUEVDQlVGID0gMTEwMTg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9RT1NfRUZJTFRFUlNUWUxFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGludmFsaWQgUU9TIGZpbHRlciBzdHlsZSB3YXMgdXNlZC5cbi8vXG5leHBvcnQgY29uc3QgV1NBX1FPU19FRklMVEVSU1RZTEUgPSAxMTAxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBX1FPU19FRklMVEVSVFlQRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBpbnZhbGlkIFFPUyBmaWx0ZXIgdHlwZSB3YXMgdXNlZC5cbi8vXG5leHBvcnQgY29uc3QgV1NBX1FPU19FRklMVEVSVFlQRSA9IDExMDIwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FfUU9TX0VGSUxURVJDT1VOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBpbmNvcnJlY3QgbnVtYmVyIG9mIFFPUyBGSUxURVJTUEVDcyB3ZXJlIHNwZWNpZmllZCBpbiB0aGUgRkxPV0RFU0NSSVBUT1IuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQV9RT1NfRUZJTFRFUkNPVU5UID0gMTEwMjE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9RT1NfRU9CSkxFTkdUSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBvYmplY3Qgd2l0aCBhbiBpbnZhbGlkIE9iamVjdExlbmd0aCBmaWVsZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBRT1MgcHJvdmlkZXItc3BlY2lmaWMgYnVmZmVyLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX0VPQkpMRU5HVEggPSAxMTAyMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBX1FPU19FRkxPV0NPVU5UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGluY29ycmVjdCBudW1iZXIgb2YgZmxvdyBkZXNjcmlwdG9ycyB3YXMgc3BlY2lmaWVkIGluIHRoZSBRT1Mgc3RydWN0dXJlLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX0VGTE9XQ09VTlQgPSAxMTAyMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBX1FPU19FVU5LT1dOUFNPQkpcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gdW5yZWNvZ25pemVkIG9iamVjdCB3YXMgZm91bmQgaW4gdGhlIFFPUyBwcm92aWRlci1zcGVjaWZpYyBidWZmZXIuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQV9RT1NfRVVOS09XTlBTT0JKID0gMTEwMjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9RT1NfRVBPTElDWU9CSlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBpbnZhbGlkIHBvbGljeSBvYmplY3Qgd2FzIGZvdW5kIGluIHRoZSBRT1MgcHJvdmlkZXItc3BlY2lmaWMgYnVmZmVyLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX0VQT0xJQ1lPQkogPSAxMTAyNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBX1FPU19FRkxPV0RFU0Ncbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gaW52YWxpZCBRT1MgZmxvdyBkZXNjcmlwdG9yIHdhcyBmb3VuZCBpbiB0aGUgZmxvdyBkZXNjcmlwdG9yIGxpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQV9RT1NfRUZMT1dERVNDID0gMTEwMjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9RT1NfRVBTRkxPV1NQRUNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gaW52YWxpZCBvciBpbmNvbnNpc3RlbnQgZmxvd3NwZWMgd2FzIGZvdW5kIGluIHRoZSBRT1MgcHJvdmlkZXIgc3BlY2lmaWMgYnVmZmVyLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX0VQU0ZMT1dTUEVDID0gMTEwMjc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9RT1NfRVBTRklMVEVSU1BFQ1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBbiBpbnZhbGlkIEZJTFRFUlNQRUMgd2FzIGZvdW5kIGluIHRoZSBRT1MgcHJvdmlkZXItc3BlY2lmaWMgYnVmZmVyLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX0VQU0ZJTFRFUlNQRUMgPSAxMTAyODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV1NBX1FPU19FU0RNT0RFT0JKXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFuIGludmFsaWQgc2hhcGUgZGlzY2FyZCBtb2RlIG9iamVjdCB3YXMgZm91bmQgaW4gdGhlIFFPUyBwcm92aWRlciBzcGVjaWZpYyBidWZmZXIuXG4vL1xuZXhwb3J0IGNvbnN0IFdTQV9RT1NfRVNETU9ERU9CSiA9IDExMDI5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBXU0FfUU9TX0VTSEFQRVJBVEVPQkpcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gaW52YWxpZCBzaGFwaW5nIHJhdGUgb2JqZWN0IHdhcyBmb3VuZCBpbiB0aGUgUU9TIHByb3ZpZGVyLXNwZWNpZmljIGJ1ZmZlci5cbi8vXG5leHBvcnQgY29uc3QgV1NBX1FPU19FU0hBUEVSQVRFT0JKID0gMTEwMzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IFdTQV9RT1NfUkVTRVJWRURfUEVUWVBFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEEgcmVzZXJ2ZWQgcG9saWN5IGVsZW1lbnQgd2FzIGZvdW5kIGluIHRoZSBRT1MgcHJvdmlkZXItc3BlY2lmaWMgYnVmZmVyLlxuLy9cbmV4cG9ydCBjb25zdCBXU0FfUU9TX1JFU0VSVkVEX1BFVFlQRSA9IDExMDMxO1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICAgICAgICAgIEVuZCBvZiBXaW5Tb2NrIEVycm9yIENvZGVzICAgICAgICAgIC8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vICAgICAgICAgICAgICAgICAxMDAwMCB0byAxMTk5OSAgICAgICAgICAgICAgICAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgICAgICAgICAgICBTaWRlIEJ5IFNpZGUgRXJyb3IgQ29kZXMgICAgICAgICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICAgICAgICAgICAgICAgIDE0MDAwIHRvIDE0OTk5ICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1NFQ1RJT05fTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgc2VjdGlvbiB3YXMgbm90IHByZXNlbnQgaW4gdGhlIGFjdGl2YXRpb24gY29udGV4dC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1NFQ1RJT05fTk9UX0ZPVU5EID0gMTQwMDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19DQU5UX0dFTl9BQ1RDVFhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhpcyBhcHBsaWNhdGlvbiBoYXMgZmFpbGVkIHRvIHN0YXJ0IGJlY2F1c2UgdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gaXMgaW5jb3JyZWN0LiBSZWluc3RhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIG1heSBmaXggdGhpcyBwcm9ibGVtLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfQ0FOVF9HRU5fQUNUQ1RYID0gMTQwMDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19JTlZBTElEX0FDVENUWERBVEFfRk9STUFUXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhcHBsaWNhdGlvbiBiaW5kaW5nIGRhdGEgZm9ybWF0IGlzIGludmFsaWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19JTlZBTElEX0FDVENUWERBVEFfRk9STUFUID0gMTQwMDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19BU1NFTUJMWV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHJlZmVyZW5jZWQgYXNzZW1ibHkgaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX0FTU0VNQkxZX05PVF9GT1VORCA9IDE0MDAzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfTUFOSUZFU1RfRk9STUFUX0VSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBtYW5pZmVzdCBmaWxlIGRvZXMgbm90IGJlZ2luIHdpdGggdGhlIHJlcXVpcmVkIHRhZyBhbmQgZm9ybWF0IGluZm9ybWF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfTUFOSUZFU1RfRk9STUFUX0VSUk9SID0gMTQwMDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19NQU5JRkVTVF9QQVJTRV9FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWFuaWZlc3QgZmlsZSBjb250YWlucyBvbmUgb3IgbW9yZSBzeW50YXggZXJyb3JzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfTUFOSUZFU1RfUEFSU0VfRVJST1IgPSAxNDAwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX0FDVElWQVRJT05fQ09OVEVYVF9ESVNBQkxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgYXBwbGljYXRpb24gYXR0ZW1wdGVkIHRvIGFjdGl2YXRlIGEgZGlzYWJsZWQgYWN0aXZhdGlvbiBjb250ZXh0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfQUNUSVZBVElPTl9DT05URVhUX0RJU0FCTEVEID0gMTQwMDY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19LRVlfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgbG9va3VwIGtleSB3YXMgbm90IGZvdW5kIGluIGFueSBhY3RpdmUgYWN0aXZhdGlvbiBjb250ZXh0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfS0VZX05PVF9GT1VORCA9IDE0MDA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfVkVSU0lPTl9DT05GTElDVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBBIGNvbXBvbmVudCB2ZXJzaW9uIHJlcXVpcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBjb25mbGljdHMgd2l0aCBhbm90aGVyIGNvbXBvbmVudCB2ZXJzaW9uIGFscmVhZHkgYWN0aXZlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfVkVSU0lPTl9DT05GTElDVCA9IDE0MDA4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfV1JPTkdfU0VDVElPTl9UWVBFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSB0eXBlIHJlcXVlc3RlZCBhY3RpdmF0aW9uIGNvbnRleHQgc2VjdGlvbiBkb2VzIG5vdCBtYXRjaCB0aGUgcXVlcnkgQVBJIHVzZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19XUk9OR19TRUNUSU9OX1RZUEUgPSAxNDAwOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1RIUkVBRF9RVUVSSUVTX0RJU0FCTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIExhY2sgb2Ygc3lzdGVtIHJlc291cmNlcyBoYXMgcmVxdWlyZWQgaXNvbGF0ZWQgYWN0aXZhdGlvbiB0byBiZSBkaXNhYmxlZCBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkIG9mIGV4ZWN1dGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1RIUkVBRF9RVUVSSUVTX0RJU0FCTEVEID0gMTQwMTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19QUk9DRVNTX0RFRkFVTFRfQUxSRUFEWV9TRVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gYXR0ZW1wdCB0byBzZXQgdGhlIHByb2Nlc3MgZGVmYXVsdCBhY3RpdmF0aW9uIGNvbnRleHQgZmFpbGVkIGJlY2F1c2UgdGhlIHByb2Nlc3MgZGVmYXVsdCBhY3RpdmF0aW9uIGNvbnRleHQgd2FzIGFscmVhZHkgc2V0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfUFJPQ0VTU19ERUZBVUxUX0FMUkVBRFlfU0VUID0gMTQwMTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19VTktOT1dOX0VOQ09ESU5HX0dST1VQXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBlbmNvZGluZyBncm91cCBpZGVudGlmaWVyIHNwZWNpZmllZCBpcyBub3QgcmVjb2duaXplZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1VOS05PV05fRU5DT0RJTkdfR1JPVVAgPSAxNDAxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1VOS05PV05fRU5DT0RJTkdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGVuY29kaW5nIHJlcXVlc3RlZCBpcyBub3QgcmVjb2duaXplZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1VOS05PV05fRU5DT0RJTkcgPSAxNDAxMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX0lOVkFMSURfWE1MX05BTUVTUEFDRV9VUklcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1hbmlmZXN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGFuIGludmFsaWQgVVJJLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfSU5WQUxJRF9YTUxfTkFNRVNQQUNFX1VSSSA9IDE0MDE0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfUk9PVF9NQU5JRkVTVF9ERVBFTkRFTkNZX05PVF9JTlNUQUxMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGEgZGVwZW5kZW50IGFzc2VtYmx5IHdoaWNoIGlzIG5vdCBpbnN0YWxsZWRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1JPT1RfTUFOSUZFU1RfREVQRU5ERU5DWV9OT1RfSU5TVEFMTEVEID0gMTQwMTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19MRUFGX01BTklGRVNUX0RFUEVOREVOQ1lfTk9UX0lOU1RBTExFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWFuaWZlc3QgZm9yIGFuIGFzc2VtYmx5IHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGhhcyBhIHJlZmVyZW5jZSB0byBhIGRlcGVuZGVudCBhc3NlbWJseSB3aGljaCBpcyBub3QgaW5zdGFsbGVkXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19MRUFGX01BTklGRVNUX0RFUEVOREVOQ1lfTk9UX0lOU1RBTExFRCA9IDE0MDE2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfSU5WQUxJRF9BU1NFTUJMWV9JREVOVElUWV9BVFRSSUJVVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1hbmlmZXN0IGNvbnRhaW5zIGFuIGF0dHJpYnV0ZSBmb3IgdGhlIGFzc2VtYmx5IGlkZW50aXR5IHdoaWNoIGlzIG5vdCB2YWxpZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX0lOVkFMSURfQVNTRU1CTFlfSURFTlRJVFlfQVRUUklCVVRFID0gMTQwMTc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19NQU5JRkVTVF9NSVNTSU5HX1JFUVVJUkVEX0RFRkFVTFRfTkFNRVNQQUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBtYW5pZmVzdCBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCBkZWZhdWx0IG5hbWVzcGFjZSBzcGVjaWZpY2F0aW9uIG9uIHRoZSBhc3NlbWJseSBlbGVtZW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfTUFOSUZFU1RfTUlTU0lOR19SRVFVSVJFRF9ERUZBVUxUX05BTUVTUEFDRSA9IDE0MDE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfTUFOSUZFU1RfSU5WQUxJRF9SRVFVSVJFRF9ERUZBVUxUX05BTUVTUEFDRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgbWFuaWZlc3QgaGFzIGEgZGVmYXVsdCBuYW1lc3BhY2Ugc3BlY2lmaWVkIG9uIHRoZSBhc3NlbWJseSBlbGVtZW50IGJ1dCBpdHMgdmFsdWUgaXMgbm90IFwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjFcIi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX01BTklGRVNUX0lOVkFMSURfUkVRVUlSRURfREVGQVVMVF9OQU1FU1BBQ0UgPSAxNDAxOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1BSSVZBVEVfTUFOSUZFU1RfQ1JPU1NfUEFUSF9XSVRIX1JFUEFSU0VfUE9JTlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHByaXZhdGUgbWFuaWZlc3QgcHJvYmVkIGhhcyBjcm9zc2VkIHJlcGFyc2UtcG9pbnQtYXNzb2NpYXRlZCBwYXRoXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19QUklWQVRFX01BTklGRVNUX0NST1NTX1BBVEhfV0lUSF9SRVBBUlNFX1BPSU5UID0gMTQwMjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19EVVBMSUNBVEVfRExMX05BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVHdvIG9yIG1vcmUgY29tcG9uZW50cyByZWZlcmVuY2VkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0IGhhdmUgZmlsZXMgYnkgdGhlIHNhbWUgbmFtZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX0RVUExJQ0FURV9ETExfTkFNRSA9IDE0MDIxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfRFVQTElDQVRFX1dJTkRPV0NMQVNTX05BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVHdvIG9yIG1vcmUgY29tcG9uZW50cyByZWZlcmVuY2VkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0IGhhdmUgd2luZG93IGNsYXNzZXMgd2l0aCB0aGUgc2FtZSBuYW1lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfRFVQTElDQVRFX1dJTkRPV0NMQVNTX05BTUUgPSAxNDAyMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX0RVUExJQ0FURV9DTFNJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUd28gb3IgbW9yZSBjb21wb25lbnRzIHJlZmVyZW5jZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QgaGF2ZSB0aGUgc2FtZSBDT00gc2VydmVyIENMU0lEcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX0RVUExJQ0FURV9DTFNJRCA9IDE0MDIzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfRFVQTElDQVRFX0lJRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUd28gb3IgbW9yZSBjb21wb25lbnRzIHJlZmVyZW5jZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QgaGF2ZSBwcm94aWVzIGZvciB0aGUgc2FtZSBDT00gaW50ZXJmYWNlIElJRHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19EVVBMSUNBVEVfSUlEID0gMTQwMjQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19EVVBMSUNBVEVfVExCSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVHdvIG9yIG1vcmUgY29tcG9uZW50cyByZWZlcmVuY2VkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0IGhhdmUgdGhlIHNhbWUgQ09NIHR5cGUgbGlicmFyeSBUTEJJRHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19EVVBMSUNBVEVfVExCSUQgPSAxNDAyNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX0RVUExJQ0FURV9QUk9HSURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVHdvIG9yIG1vcmUgY29tcG9uZW50cyByZWZlcmVuY2VkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0IGhhdmUgdGhlIHNhbWUgQ09NIFByb2dJRHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19EVVBMSUNBVEVfUFJPR0lEID0gMTQwMjY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19EVVBMSUNBVEVfQVNTRU1CTFlfTkFNRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUd28gb3IgbW9yZSBjb21wb25lbnRzIHJlZmVyZW5jZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSB0aGUgYXBwbGljYXRpb24gbWFuaWZlc3QgYXJlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBjb21wb25lbnQgd2hpY2ggaXMgbm90IHBlcm1pdHRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX0RVUExJQ0FURV9BU1NFTUJMWV9OQU1FID0gMTQwMjc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19GSUxFX0hBU0hfTUlTTUFUQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQSBjb21wb25lbnQncyBmaWxlIGRvZXMgbm90IG1hdGNoIHRoZSB2ZXJpZmljYXRpb24gaW5mb3JtYXRpb24gcHJlc2VudCBpbiB0aGVcbi8vICBjb21wb25lbnQgbWFuaWZlc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19GSUxFX0hBU0hfTUlTTUFUQ0ggPSAxNDAyODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1BPTElDWV9QQVJTRV9FUlJPUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgcG9saWN5IG1hbmlmZXN0IGNvbnRhaW5zIG9uZSBvciBtb3JlIHN5bnRheCBlcnJvcnMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19QT0xJQ1lfUEFSU0VfRVJST1IgPSAxNDAyOTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX01JU1NJTkdRVU9URVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IEEgc3RyaW5nIGxpdGVyYWwgd2FzIGV4cGVjdGVkLCBidXQgbm8gb3BlbmluZyBxdW90ZSBjaGFyYWN0ZXIgd2FzIGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfTUlTU0lOR1FVT1RFID0gMTQwMzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9DT01NRU5UU1lOVEFYXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogSW5jb3JyZWN0IHN5bnRheCB3YXMgdXNlZCBpbiBhIGNvbW1lbnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9DT01NRU5UU1lOVEFYID0gMTQwMzE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9CQURTVEFSVE5BTUVDSEFSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogQSBuYW1lIHdhcyBzdGFydGVkIHdpdGggYW4gaW52YWxpZCBjaGFyYWN0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9CQURTVEFSVE5BTUVDSEFSID0gMTQwMzI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9CQUROQU1FQ0hBUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IEEgbmFtZSBjb250YWluZWQgYW4gaW52YWxpZCBjaGFyYWN0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9CQUROQU1FQ0hBUiA9IDE0MDMzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfQkFEQ0hBUklOU1RSSU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogQSBzdHJpbmcgbGl0ZXJhbCBjb250YWluZWQgYW4gaW52YWxpZCBjaGFyYWN0ZXIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9CQURDSEFSSU5TVFJJTkcgPSAxNDAzNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX1hNTERFQ0xTWU5UQVhcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWFuaWZlc3QgUGFyc2UgRXJyb3IgOiBJbnZhbGlkIHN5bnRheCBmb3IgYW4geG1sIGRlY2xhcmF0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfWE1MREVDTFNZTlRBWCA9IDE0MDM1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfQkFEQ0hBUkRBVEFcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWFuaWZlc3QgUGFyc2UgRXJyb3IgOiBBbiBJbnZhbGlkIGNoYXJhY3RlciB3YXMgZm91bmQgaW4gdGV4dCBjb250ZW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfQkFEQ0hBUkRBVEEgPSAxNDAzNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX01JU1NJTkdXSElURVNQQUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogUmVxdWlyZWQgd2hpdGUgc3BhY2Ugd2FzIG1pc3NpbmcuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9NSVNTSU5HV0hJVEVTUEFDRSA9IDE0MDM3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfRVhQRUNUSU5HVEFHRU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogVGhlIGNoYXJhY3RlciAnPicgd2FzIGV4cGVjdGVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfRVhQRUNUSU5HVEFHRU5EID0gMTQwMzg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9NSVNTSU5HU0VNSUNPTE9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogQSBzZW1pIGNvbG9uIGNoYXJhY3RlciB3YXMgZXhwZWN0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9NSVNTSU5HU0VNSUNPTE9OID0gMTQwMzk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9VTkJBTEFOQ0VEUEFSRU5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWFuaWZlc3QgUGFyc2UgRXJyb3IgOiBVbmJhbGFuY2VkIHBhcmVudGhlc2VzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfVU5CQUxBTkNFRFBBUkVOID0gMTQwNDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9JTlRFUk5BTEVSUk9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogSW50ZXJuYWwgZXJyb3IuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9JTlRFUk5BTEVSUk9SID0gMTQwNDE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9VTkVYUEVDVEVEX1dISVRFU1BBQ0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWFuaWZlc3QgUGFyc2UgRXJyb3IgOiBXaGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIGF0IHRoaXMgbG9jYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9VTkVYUEVDVEVEX1dISVRFU1BBQ0UgPSAxNDA0MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX0lOQ09NUExFVEVfRU5DT0RJTkdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWFuaWZlc3QgUGFyc2UgRXJyb3IgOiBFbmQgb2YgZmlsZSByZWFjaGVkIGluIGludmFsaWQgc3RhdGUgZm9yIGN1cnJlbnQgZW5jb2RpbmcuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9JTkNPTVBMRVRFX0VOQ09ESU5HID0gMTQwNDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9NSVNTSU5HX1BBUkVOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogTWlzc2luZyBwYXJlbnRoZXNpcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX01JU1NJTkdfUEFSRU4gPSAxNDA0NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX0VYUEVDVElOR0NMT1NFUVVPVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWFuaWZlc3QgUGFyc2UgRXJyb3IgOiBBIHNpbmdsZSBvciBkb3VibGUgY2xvc2luZyBxdW90ZSBjaGFyYWN0ZXIgKFxcJyBvciBcXFwiKSBpcyBtaXNzaW5nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfRVhQRUNUSU5HQ0xPU0VRVU9URSA9IDE0MDQ1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfTVVMVElQTEVfQ09MT05TXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogTXVsdGlwbGUgY29sb25zIGFyZSBub3QgYWxsb3dlZCBpbiBhIG5hbWUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9NVUxUSVBMRV9DT0xPTlMgPSAxNDA0NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX0lOVkFMSURfREVDSU1BTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IEludmFsaWQgY2hhcmFjdGVyIGZvciBkZWNpbWFsIGRpZ2l0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfSU5WQUxJRF9ERUNJTUFMID0gMTQwNDc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9JTlZBTElEX0hFWElERUNJTUFMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogSW52YWxpZCBjaGFyYWN0ZXIgZm9yIGhleGFkZWNpbWFsIGRpZ2l0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfSU5WQUxJRF9IRVhJREVDSU1BTCA9IDE0MDQ4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfSU5WQUxJRF9VTklDT0RFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogSW52YWxpZCB1bmljb2RlIGNoYXJhY3RlciB2YWx1ZSBmb3IgdGhpcyBwbGF0Zm9ybS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX0lOVkFMSURfVU5JQ09ERSA9IDE0MDQ5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfV0hJVEVTUEFDRU9SUVVFU1RJT05NQVJLXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogRXhwZWN0aW5nIHdoaXRlc3BhY2Ugb3IgJz8nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfV0hJVEVTUEFDRU9SUVVFU1RJT05NQVJLID0gMTQwNTA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9VTkVYUEVDVEVERU5EVEFHXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogRW5kIHRhZyB3YXMgbm90IGV4cGVjdGVkIGF0IHRoaXMgbG9jYXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9VTkVYUEVDVEVERU5EVEFHID0gMTQwNTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9VTkNMT1NFRFRBR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IFRoZSBmb2xsb3dpbmcgdGFncyB3ZXJlIG5vdCBjbG9zZWQ6ICUxLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfVU5DTE9TRURUQUcgPSAxNDA1MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX0RVUExJQ0FURUFUVFJJQlVURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IER1cGxpY2F0ZSBhdHRyaWJ1dGUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9EVVBMSUNBVEVBVFRSSUJVVEUgPSAxNDA1MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX01VTFRJUExFUk9PVFNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWFuaWZlc3QgUGFyc2UgRXJyb3IgOiBPbmx5IG9uZSB0b3AgbGV2ZWwgZWxlbWVudCBpcyBhbGxvd2VkIGluIGFuIFhNTCBkb2N1bWVudC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX01VTFRJUExFUk9PVFMgPSAxNDA1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX0lOVkFMSURBVFJPT1RMRVZFTFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IEludmFsaWQgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZG9jdW1lbnQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9JTlZBTElEQVRST09UTEVWRUwgPSAxNDA1NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX0JBRFhNTERFQ0xcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWFuaWZlc3QgUGFyc2UgRXJyb3IgOiBJbnZhbGlkIHhtbCBkZWNsYXJhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX0JBRFhNTERFQ0wgPSAxNDA1NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX01JU1NJTkdST09UXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogWE1MIGRvY3VtZW50IG11c3QgaGF2ZSBhIHRvcCBsZXZlbCBlbGVtZW50LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfTUlTU0lOR1JPT1QgPSAxNDA1NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX1VORVhQRUNURURFT0Zcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWFuaWZlc3QgUGFyc2UgRXJyb3IgOiBVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfVU5FWFBFQ1RFREVPRiA9IDE0MDU4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfQkFEUEVSRUZJTlNVQlNFVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IFBhcmFtZXRlciBlbnRpdGllcyBjYW5ub3QgYmUgdXNlZCBpbnNpZGUgbWFya3VwIGRlY2xhcmF0aW9ucyBpbiBhbiBpbnRlcm5hbCBzdWJzZXQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9CQURQRVJFRklOU1VCU0VUID0gMTQwNTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9VTkNMT1NFRFNUQVJUVEFHXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogRWxlbWVudCB3YXMgbm90IGNsb3NlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX1VOQ0xPU0VEU1RBUlRUQUcgPSAxNDA2MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX1VOQ0xPU0VERU5EVEFHXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogRW5kIGVsZW1lbnQgd2FzIG1pc3NpbmcgdGhlIGNoYXJhY3RlciAnPicuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9VTkNMT1NFREVORFRBRyA9IDE0MDYxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfVU5DTE9TRURTVFJJTkdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWFuaWZlc3QgUGFyc2UgRXJyb3IgOiBBIHN0cmluZyBsaXRlcmFsIHdhcyBub3QgY2xvc2VkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfWE1MX0VfVU5DTE9TRURTVFJJTkcgPSAxNDA2MjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX1VOQ0xPU0VEQ09NTUVOVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IEEgY29tbWVudCB3YXMgbm90IGNsb3NlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX1VOQ0xPU0VEQ09NTUVOVCA9IDE0MDYzO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfVU5DTE9TRURERUNMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogQSBkZWNsYXJhdGlvbiB3YXMgbm90IGNsb3NlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX1VOQ0xPU0VEREVDTCA9IDE0MDY0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfVU5DTE9TRURDREFUQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IEEgQ0RBVEEgc2VjdGlvbiB3YXMgbm90IGNsb3NlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX1VOQ0xPU0VEQ0RBVEEgPSAxNDA2NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX1JFU0VSVkVETkFNRVNQQUNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogVGhlIG5hbWVzcGFjZSBwcmVmaXggaXMgbm90IGFsbG93ZWQgdG8gc3RhcnQgd2l0aCB0aGUgcmVzZXJ2ZWQgc3RyaW5nIFwieG1sXCIuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9SRVNFUlZFRE5BTUVTUEFDRSA9IDE0MDY2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfSU5WQUxJREVOQ09ESU5HXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNwZWNpZmllZCBlbmNvZGluZy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX0lOVkFMSURFTkNPRElORyA9IDE0MDY3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfSU5WQUxJRFNXSVRDSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IFN3aXRjaCBmcm9tIGN1cnJlbnQgZW5jb2RpbmcgdG8gc3BlY2lmaWVkIGVuY29kaW5nIG5vdCBzdXBwb3J0ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9JTlZBTElEU1dJVENIID0gMTQwNjg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19YTUxfRV9CQURYTUxDQVNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogVGhlIG5hbWUgJ3htbCcgaXMgcmVzZXJ2ZWQgYW5kIG11c3QgYmUgbG93ZXIgY2FzZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX0JBRFhNTENBU0UgPSAxNDA2OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX0lOVkFMSURfU1RBTkRBTE9ORVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IFRoZSBzdGFuZGFsb25lIGF0dHJpYnV0ZSBtdXN0IGhhdmUgdGhlIHZhbHVlICd5ZXMnIG9yICdubycuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19YTUxfRV9JTlZBTElEX1NUQU5EQUxPTkUgPSAxNDA3MDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1hNTF9FX1VORVhQRUNURURfU1RBTkRBTE9ORVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IFRoZSBzdGFuZGFsb25lIGF0dHJpYnV0ZSBjYW5ub3QgYmUgdXNlZCBpbiBleHRlcm5hbCBlbnRpdGllcy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX1VORVhQRUNURURfU1RBTkRBTE9ORSA9IDE0MDcxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfSU5WQUxJRF9WRVJTSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1hbmlmZXN0IFBhcnNlIEVycm9yIDogSW52YWxpZCB2ZXJzaW9uIG51bWJlci5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX0lOVkFMSURfVkVSU0lPTiA9IDE0MDcyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfWE1MX0VfTUlTU0lOR0VRVUFMU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBNYW5pZmVzdCBQYXJzZSBFcnJvciA6IE1pc3NpbmcgZXF1YWxzIHNpZ24gYmV0d2VlbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1hNTF9FX01JU1NJTkdFUVVBTFMgPSAxNDA3MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1BST1RFQ1RJT05fUkVDT1ZFUllfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFzc2VtYmx5IFByb3RlY3Rpb24gRXJyb3IgOiBVbmFibGUgdG8gcmVjb3ZlciB0aGUgc3BlY2lmaWVkIGFzc2VtYmx5LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfUFJPVEVDVElPTl9SRUNPVkVSWV9GQUlMRUQgPSAxNDA3NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1BST1RFQ1RJT05fUFVCTElDX0tFWV9UT09fU0hPUlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQXNzZW1ibHkgUHJvdGVjdGlvbiBFcnJvciA6IFRoZSBwdWJsaWMga2V5IGZvciBhbiBhc3NlbWJseSB3YXMgdG9vIHNob3J0IHRvIGJlIGFsbG93ZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19QUk9URUNUSU9OX1BVQkxJQ19LRVlfVE9PX1NIT1JUID0gMTQwNzU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX1NYU19QUk9URUNUSU9OX0NBVEFMT0dfTk9UX1ZBTElEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEFzc2VtYmx5IFByb3RlY3Rpb24gRXJyb3IgOiBUaGUgY2F0YWxvZyBmb3IgYW4gYXNzZW1ibHkgaXMgbm90IHZhbGlkLCBvciBkb2VzIG5vdCBtYXRjaCB0aGUgYXNzZW1ibHkncyBtYW5pZmVzdC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1BST1RFQ1RJT05fQ0FUQUxPR19OT1RfVkFMSUQgPSAxNDA3NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1VOVFJBTlNMQVRBQkxFX0hSRVNVTFRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQW4gSFJFU1VMVCBjb3VsZCBub3QgYmUgdHJhbnNsYXRlZCB0byBhIGNvcnJlc3BvbmRpbmcgV2luMzIgZXJyb3IgY29kZS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfU1hTX1VOVFJBTlNMQVRBQkxFX0hSRVNVTFQgPSAxNDA3NztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX1BST1RFQ1RJT05fQ0FUQUxPR19GSUxFX01JU1NJTkdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQXNzZW1ibHkgUHJvdGVjdGlvbiBFcnJvciA6IFRoZSBjYXRhbG9nIGZvciBhbiBhc3NlbWJseSBpcyBtaXNzaW5nLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfUFJPVEVDVElPTl9DQVRBTE9HX0ZJTEVfTUlTU0lORyA9IDE0MDc4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9TWFNfTUlTU0lOR19BU1NFTUJMWV9JREVOVElUWV9BVFRSSUJVVEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN1cHBsaWVkIGFzc2VtYmx5IGlkZW50aXR5IGlzIG1pc3Npbmcgb25lIG9yIG1vcmUgYXR0cmlidXRlcyB3aGljaCBtdXN0IGJlIHByZXNlbnQgaW4gdGhpcyBjb250ZXh0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9TWFNfTUlTU0lOR19BU1NFTUJMWV9JREVOVElUWV9BVFRSSUJVVEUgPSAxNDA3OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfU1hTX0lOVkFMSURfQVNTRU1CTFlfSURFTlRJVFlfQVRUUklCVVRFX05BTUVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHN1cHBsaWVkIGFzc2VtYmx5IGlkZW50aXR5IGhhcyBvbmUgb3IgbW9yZSBhdHRyaWJ1dGUgbmFtZXMgdGhhdCBjb250YWluIGNoYXJhY3RlcnMgbm90IHBlcm1pdHRlZCBpbiBYTUwgbmFtZXMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NYU19JTlZBTElEX0FTU0VNQkxZX0lERU5USVRZX0FUVFJJQlVURV9OQU1FID0gMTQwODA7XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgICAgICAgICAgRW5kIG9mIFNpZGUgQnkgU2lkZSBFcnJvciBDb2RlcyAgICAgLy9cbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuLy8gICAgICAgICAgICAgICAgIDE0MDAwIHRvIDE0OTk5ICAgICAgICAgICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbi8vICAgICAgICAgICBTdGFydCBvZiBJUFNlYyBFcnJvciBjb2RlcyAgICAgICAgICAvL1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4vLyAgICAgICAgICAgICAgICAgMTMwMDAgdG8gMTM5OTkgICAgICAgICAgICAgICAgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19RTV9QT0xJQ1lfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcXVpY2sgbW9kZSBwb2xpY3kgYWxyZWFkeSBleGlzdHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX1FNX1BPTElDWV9FWElTVFMgPSAxMzAwMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfUU1fUE9MSUNZX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHF1aWNrIG1vZGUgcG9saWN5IHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX1FNX1BPTElDWV9OT1RfRk9VTkQgPSAxMzAwMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfUU1fUE9MSUNZX0lOX1VTRVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHF1aWNrIG1vZGUgcG9saWN5IGlzIGJlaW5nIHVzZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX1FNX1BPTElDWV9JTl9VU0UgPSAxMzAwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfTU1fUE9MSUNZX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIG1haW4gbW9kZSBwb2xpY3kgYWxyZWFkeSBleGlzdHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX01NX1BPTElDWV9FWElTVFMgPSAxMzAwMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfTU1fUE9MSUNZX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIG1haW4gbW9kZSBwb2xpY3kgd2FzIG5vdCBmb3VuZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19NTV9QT0xJQ1lfTk9UX0ZPVU5EID0gMTMwMDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX01NX1BPTElDWV9JTl9VU0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCBtYWluIG1vZGUgcG9saWN5IGlzIGJlaW5nIHVzZWQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX01NX1BPTElDWV9JTl9VU0UgPSAxMzAwNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfTU1fRklMVEVSX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIG1haW4gbW9kZSBmaWx0ZXIgYWxyZWFkeSBleGlzdHMuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX01NX0ZJTFRFUl9FWElTVFMgPSAxMzAwNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfTU1fRklMVEVSX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIG1haW4gbW9kZSBmaWx0ZXIgd2FzIG5vdCBmb3VuZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfTU1fRklMVEVSX05PVF9GT1VORCA9IDEzMDA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19UUkFOU1BPUlRfRklMVEVSX0VYSVNUU1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHRyYW5zcG9ydCBtb2RlIGZpbHRlciBhbHJlYWR5IGV4aXN0cy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfVFJBTlNQT1JUX0ZJTFRFUl9FWElTVFMgPSAxMzAwODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfVFJBTlNQT1JUX0ZJTFRFUl9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgbW9kZSBmaWx0ZXIgZG9lcyBub3QgZXhpc3QuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX1RSQU5TUE9SVF9GSUxURVJfTk9UX0ZPVU5EID0gMTMwMDk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX01NX0FVVEhfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgbWFpbiBtb2RlIGF1dGhlbnRpY2F0aW9uIGxpc3QgZXhpc3RzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19NTV9BVVRIX0VYSVNUUyA9IDEzMDEwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19NTV9BVVRIX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIG1haW4gbW9kZSBhdXRoZW50aWNhdGlvbiBsaXN0IHdhcyBub3QgZm91bmQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX01NX0FVVEhfTk9UX0ZPVU5EID0gMTMwMTE7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX01NX0FVVEhfSU5fVVNFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgcXVpY2sgbW9kZSBwb2xpY3kgaXMgYmVpbmcgdXNlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfTU1fQVVUSF9JTl9VU0UgPSAxMzAxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfREVGQVVMVF9NTV9QT0xJQ1lfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBzcGVjaWZpZWQgbWFpbiBtb2RlIHBvbGljeSB3YXMgbm90IGZvdW5kLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19ERUZBVUxUX01NX1BPTElDWV9OT1RfRk9VTkQgPSAxMzAxMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfREVGQVVMVF9NTV9BVVRIX05PVF9GT1VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgc3BlY2lmaWVkIHF1aWNrIG1vZGUgcG9saWN5IHdhcyBub3QgZm91bmRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfREVGQVVMVF9NTV9BVVRIX05PVF9GT1VORCA9IDEzMDE0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19ERUZBVUxUX1FNX1BPTElDWV9OT1RfRk9VTkRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIG1hbmlmZXN0IGZpbGUgY29udGFpbnMgb25lIG9yIG1vcmUgc3ludGF4IGVycm9ycy5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfREVGQVVMVF9RTV9QT0xJQ1lfTk9UX0ZPVU5EID0gMTMwMTU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX1RVTk5FTF9GSUxURVJfRVhJU1RTXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBhcHBsaWNhdGlvbiBhdHRlbXB0ZWQgdG8gYWN0aXZhdGUgYSBkaXNhYmxlZCBhY3RpdmF0aW9uIGNvbnRleHQuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX1RVTk5FTF9GSUxURVJfRVhJU1RTID0gMTMwMTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX1RVTk5FTF9GSUxURVJfTk9UX0ZPVU5EXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSByZXF1ZXN0ZWQgbG9va3VwIGtleSB3YXMgbm90IGZvdW5kIGluIGFueSBhY3RpdmUgYWN0aXZhdGlvbiBjb250ZXh0LlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19UVU5ORUxfRklMVEVSX05PVF9GT1VORCA9IDEzMDE3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19NTV9GSUxURVJfUEVORElOR19ERUxFVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgTWFpbiBNb2RlIGZpbHRlciBpcyBwZW5kaW5nIGRlbGV0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19NTV9GSUxURVJfUEVORElOR19ERUxFVElPTiA9IDEzMDE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19UUkFOU1BPUlRfRklMVEVSX1BFTkRJTkdfREVMRVRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIHRyYW5zcG9ydCBmaWx0ZXIgaXMgcGVuZGluZyBkZWxldGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfVFJBTlNQT1JUX0ZJTFRFUl9QRU5ESU5HX0RFTEVUSU9OID0gMTMwMTk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX1RVTk5FTF9GSUxURVJfUEVORElOR19ERUxFVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgdHVubmVsIGZpbHRlciBpcyBwZW5kaW5nIGRlbGV0aW9uLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19UVU5ORUxfRklMVEVSX1BFTkRJTkdfREVMRVRJT04gPSAxMzAyMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfTU1fUE9MSUNZX1BFTkRJTkdfREVMRVRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIE1haW4gTW9kZSBwb2xpY3kgaXMgcGVuZGluZyBkZWxldGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfTU1fUE9MSUNZX1BFTkRJTkdfREVMRVRJT04gPSAxMzAyMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfTU1fQVVUSF9QRU5ESU5HX0RFTEVUSU9OXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBNYWluIE1vZGUgYXV0aGVudGljYXRpb24gYnVuZGxlIGlzIHBlbmRpbmcgZGVsZXRpb24uXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX01NX0FVVEhfUEVORElOR19ERUxFVElPTiA9IDEzMDIyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19RTV9QT0xJQ1lfUEVORElOR19ERUxFVElPTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUaGUgUXVpY2sgTW9kZSBwb2xpY3kgaXMgcGVuZGluZyBkZWxldGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfUU1fUE9MSUNZX1BFTkRJTkdfREVMRVRJT04gPSAxMzAyMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogV0FSTklOR19JUFNFQ19NTV9QT0xJQ1lfUFJVTkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBNYWluIE1vZGUgcG9saWN5IHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsIGJ1dCBzb21lIG9mIHRoZSByZXF1ZXN0ZWQgb2ZmZXJzIGFyZSBub3Qgc3VwcG9ydGVkLlxuLy9cbmV4cG9ydCBjb25zdCBXQVJOSU5HX0lQU0VDX01NX1BPTElDWV9QUlVORUQgPSAxMzAyNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogV0FSTklOR19JUFNFQ19RTV9QT0xJQ1lfUFJVTkVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZSBRdWljayBNb2RlIHBvbGljeSB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLCBidXQgc29tZSBvZiB0aGUgcmVxdWVzdGVkIG9mZmVycyBhcmUgbm90IHN1cHBvcnRlZC5cbi8vXG5leHBvcnQgY29uc3QgV0FSTklOR19JUFNFQ19RTV9QT0xJQ1lfUFJVTkVEID0gMTMwMjU7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9ORUdfU1RBVFVTX0JFR0lOXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVSUk9SX0lQU0VDX0lLRV9ORUdfU1RBVFVTX0JFR0lOXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9ORUdfU1RBVFVTX0JFR0lOID0gMTM4MDA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9BVVRIX0ZBSUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSUtFIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGFyZSB1bmFjY2VwdGFibGVcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX0FVVEhfRkFJTCA9IDEzODAxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfQVRUUklCX0ZBSUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSUtFIHNlY3VyaXR5IGF0dHJpYnV0ZXMgYXJlIHVuYWNjZXB0YWJsZVxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfQVRUUklCX0ZBSUwgPSAxMzgwMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX05FR09USUFUSU9OX1BFTkRJTkdcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSUtFIE5lZ290aWF0aW9uIGluIHByb2dyZXNzXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9ORUdPVElBVElPTl9QRU5ESU5HID0gMTM4MDM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9HRU5FUkFMX1BST0NFU1NJTkdfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgR2VuZXJhbCBwcm9jZXNzaW5nIGVycm9yXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9HRU5FUkFMX1BST0NFU1NJTkdfRVJST1IgPSAxMzgwNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1RJTUVEX09VVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBOZWdvdGlhdGlvbiB0aW1lZCBvdXRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1RJTUVEX09VVCA9IDEzODA1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfTk9fQ0VSVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJS0UgZmFpbGVkIHRvIGZpbmQgdmFsaWQgbWFjaGluZSBjZXJ0aWZpY2F0ZVxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfTk9fQ0VSVCA9IDEzODA2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfU0FfREVMRVRFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJS0UgU0EgZGVsZXRlZCBieSBwZWVyIGJlZm9yZSBlc3RhYmxpc2htZW50IGNvbXBsZXRlZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfU0FfREVMRVRFRCA9IDEzODA3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfU0FfUkVBUEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIElLRSBTQSBkZWxldGVkIGJlZm9yZSBlc3RhYmxpc2htZW50IGNvbXBsZXRlZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfU0FfUkVBUEVEID0gMTM4MDg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9NTV9BQ1FVSVJFX0RST1Bcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTmVnb3RpYXRpb24gcmVxdWVzdCBzYXQgaW4gUXVldWUgdG9vIGxvbmdcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX01NX0FDUVVJUkVfRFJPUCA9IDEzODA5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfUU1fQUNRVUlSRV9EUk9QXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5lZ290aWF0aW9uIHJlcXVlc3Qgc2F0IGluIFF1ZXVlIHRvbyBsb25nXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9RTV9BQ1FVSVJFX0RST1AgPSAxMzgxMDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1FVRVVFX0RST1BfTU1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTmVnb3RpYXRpb24gcmVxdWVzdCBzYXQgaW4gUXVldWUgdG9vIGxvbmdcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1FVRVVFX0RST1BfTU0gPSAxMzgxMTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1FVRVVFX0RST1BfTk9fTU1cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTmVnb3RpYXRpb24gcmVxdWVzdCBzYXQgaW4gUXVldWUgdG9vIGxvbmdcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1FVRVVFX0RST1BfTk9fTU0gPSAxMzgxMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0RST1BfTk9fUkVTUE9OU0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gcmVzcG9uc2UgZnJvbSBwZWVyXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9EUk9QX05PX1JFU1BPTlNFID0gMTM4MTM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9NTV9ERUxBWV9EUk9QXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5lZ290aWF0aW9uIHRvb2sgdG9vIGxvbmdcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX01NX0RFTEFZX0RST1AgPSAxMzgxNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1FNX0RFTEFZX0RST1Bcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTmVnb3RpYXRpb24gdG9vayB0b28gbG9uZ1xuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfUU1fREVMQVlfRFJPUCA9IDEzODE1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVW5rbm93biBlcnJvciBvY2N1cnJlZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfRVJST1IgPSAxMzgxNjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0NSTF9GQUlMRURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgQ2VydGlmaWNhdGUgUmV2b2NhdGlvbiBDaGVjayBmYWlsZWRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX0NSTF9GQUlMRUQgPSAxMzgxNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0lOVkFMSURfS0VZX1VTQUdFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgY2VydGlmaWNhdGUga2V5IHVzYWdlXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX0tFWV9VU0FHRSA9IDEzODE4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9DRVJUX1RZUEVcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBjZXJ0aWZpY2F0ZSB0eXBlXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX0NFUlRfVFlQRSA9IDEzODE5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfTk9fUFJJVkFURV9LRVlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTm8gcHJpdmF0ZSBrZXkgYXNzb2NpYXRlZCB3aXRoIG1hY2hpbmUgY2VydGlmaWNhdGVcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX05PX1BSSVZBVEVfS0VZID0gMTM4MjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9ESF9GQUlMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEZhaWx1cmUgaW4gRGlmZmllLUhlbGxtYW4gY29tcHV0YXRpb25cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX0RIX0ZBSUwgPSAxMzgyMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0lOVkFMSURfSEVBREVSXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgaGVhZGVyXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX0hFQURFUiA9IDEzODI0O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfTk9fUE9MSUNZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE5vIHBvbGljeSBjb25maWd1cmVkXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9OT19QT0xJQ1kgPSAxMzgyNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0lOVkFMSURfU0lHTkFUVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEZhaWxlZCB0byB2ZXJpZnkgc2lnbmF0dXJlXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX1NJR05BVFVSRSA9IDEzODI2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfS0VSQkVST1NfRVJST1Jcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRmFpbGVkIHRvIGF1dGhlbnRpY2F0ZSB1c2luZyBrZXJiZXJvc1xuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfS0VSQkVST1NfRVJST1IgPSAxMzgyNztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX05PX1BVQkxJQ19LRVlcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgUGVlcidzIGNlcnRpZmljYXRlIGRpZCBub3QgaGF2ZSBhIHB1YmxpYyBrZXlcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX05PX1BVQkxJQ19LRVkgPSAxMzgyODtcblxuLy8gVGhlc2UgbXVzdCBzdGF5IGFzIGEgdW5pdC5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9QUk9DRVNTX0VSUlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBFcnJvciBwcm9jZXNzaW5nIGVycm9yIHBheWxvYWRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1BST0NFU1NfRVJSID0gMTM4Mjk7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9QUk9DRVNTX0VSUl9TQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBFcnJvciBwcm9jZXNzaW5nIFNBIHBheWxvYWRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1BST0NFU1NfRVJSX1NBID0gMTM4MzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9QUk9DRVNTX0VSUl9QUk9QXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVycm9yIHByb2Nlc3NpbmcgUHJvcG9zYWwgcGF5bG9hZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfUFJPUCA9IDEzODMxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfVFJBTlNcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRXJyb3IgcHJvY2Vzc2luZyBUcmFuc2Zvcm0gcGF5bG9hZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfVFJBTlMgPSAxMzgzMjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1BST0NFU1NfRVJSX0tFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVycm9yIHByb2Nlc3NpbmcgS0UgcGF5bG9hZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfS0UgPSAxMzgzMztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1BST0NFU1NfRVJSX0lEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVycm9yIHByb2Nlc3NpbmcgSUQgcGF5bG9hZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfSUQgPSAxMzgzNDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1BST0NFU1NfRVJSX0NFUlRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRXJyb3IgcHJvY2Vzc2luZyBDZXJ0IHBheWxvYWRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1BST0NFU1NfRVJSX0NFUlQgPSAxMzgzNTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1BST0NFU1NfRVJSX0NFUlRfUkVRXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVycm9yIHByb2Nlc3NpbmcgQ2VydGlmaWNhdGUgUmVxdWVzdCBwYXlsb2FkXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9QUk9DRVNTX0VSUl9DRVJUX1JFUSA9IDEzODM2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfSEFTSFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBFcnJvciBwcm9jZXNzaW5nIEhhc2ggcGF5bG9hZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfSEFTSCA9IDEzODM3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfU0lHXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVycm9yIHByb2Nlc3NpbmcgU2lnbmF0dXJlIHBheWxvYWRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1BST0NFU1NfRVJSX1NJRyA9IDEzODM4O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfTk9OQ0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRXJyb3IgcHJvY2Vzc2luZyBOb25jZSBwYXlsb2FkXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9QUk9DRVNTX0VSUl9OT05DRSA9IDEzODM5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfTk9USUZZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVycm9yIHByb2Nlc3NpbmcgTm90aWZ5IHBheWxvYWRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1BST0NFU1NfRVJSX05PVElGWSA9IDEzODQwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfREVMRVRFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVycm9yIHByb2Nlc3NpbmcgRGVsZXRlIFBheWxvYWRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1BST0NFU1NfRVJSX0RFTEVURSA9IDEzODQxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfVkVORE9SXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEVycm9yIHByb2Nlc3NpbmcgVmVuZG9ySWQgcGF5bG9hZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfUFJPQ0VTU19FUlJfVkVORE9SID0gMTM4NDI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX1BBWUxPQURcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBwYXlsb2FkIHJlY2VpdmVkXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX1BBWUxPQUQgPSAxMzg0MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0xPQURfU09GVF9TQVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTb2Z0IFNBIGxvYWRlZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfTE9BRF9TT0ZUX1NBID0gMTM4NDQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9TT0ZUX1NBX1RPUk5fRE9XTlxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBTb2Z0IFNBIHRvcm4gZG93blxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfU09GVF9TQV9UT1JOX0RPV04gPSAxMzg0NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0lOVkFMSURfQ09PS0lFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgY29va2llIHJlY2VpdmVkLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9DT09LSUUgPSAxMzg0NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX05PX1BFRVJfQ0VSVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBQZWVyIGZhaWxlZCB0byBzZW5kIHZhbGlkIG1hY2hpbmUgY2VydGlmaWNhdGVcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX05PX1BFRVJfQ0VSVCA9IDEzODQ3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfUEVFUl9DUkxfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIENlcnRpZmljYXRpb24gUmV2b2NhdGlvbiBjaGVjayBvZiBwZWVyJ3MgY2VydGlmaWNhdGUgZmFpbGVkXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9QRUVSX0NSTF9GQUlMRUQgPSAxMzg0ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1BPTElDWV9DSEFOR0Vcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTmV3IHBvbGljeSBpbnZhbGlkYXRlZCBTQXMgZm9ybWVkIHdpdGggb2xkIHBvbGljeVxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfUE9MSUNZX0NIQU5HRSA9IDEzODQ5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfTk9fTU1fUE9MSUNZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFRoZXJlIGlzIG5vIGF2YWlsYWJsZSBNYWluIE1vZGUgSUtFIHBvbGljeS5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX05PX01NX1BPTElDWSA9IDEzODUwO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfTk9UQ0JQUklWXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEZhaWxlZCB0byBlbmFibGVkIFRDQiBwcml2aWxlZ2UuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9OT1RDQlBSSVYgPSAxMzg1MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1NFQ0xPQURGQUlMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEZhaWxlZCB0byBsb2FkIFNFQ1VSSVRZLkRMTC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1NFQ0xPQURGQUlMID0gMTM4NTI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9GQUlMU1NQSU5JVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBGYWlsZWQgdG8gb2J0YWluIHNlY3VyaXR5IGZ1bmN0aW9uIHRhYmxlIGRpc3BhdGNoIGFkZHJlc3MgZnJvbSBTU1BJLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfRkFJTFNTUElOSVQgPSAxMzg1MztcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0ZBSUxRVUVSWVNTUFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBGYWlsZWQgdG8gcXVlcnkgS2VyYmVyb3MgcGFja2FnZSB0byBvYnRhaW4gbWF4IHRva2VuIHNpemUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9GQUlMUVVFUllTU1AgPSAxMzg1NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1NSVkFDUUZBSUxcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRmFpbGVkIHRvIG9idGFpbiBLZXJiZXJvcyBzZXJ2ZXIgY3JlZGVudGlhbHMgZm9yIElTQUtNUC9FUlJPUl9JUFNFQ19JS0Ugc2VydmljZS4gIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIHdpbGwgbm90IGZ1bmN0aW9uLiAgVGhlIG1vc3QgbGlrZWx5IHJlYXNvbiBmb3IgdGhpcyBpcyBsYWNrIG9mIGRvbWFpbiBtZW1iZXJzaGlwLiAgVGhpcyBpcyBub3JtYWwgaWYgeW91ciBjb21wdXRlciBpcyBhIG1lbWJlciBvZiBhIHdvcmtncm91cC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX1NSVkFDUUZBSUwgPSAxMzg1NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1NSVlFVRVJZQ1JFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBGYWlsZWQgdG8gZGV0ZXJtaW5lIFNTUEkgcHJpbmNpcGFsIG5hbWUgZm9yIElTQUtNUC9FUlJPUl9JUFNFQ19JS0Ugc2VydmljZSAoUXVlcnlDcmVkZW50aWFsc0F0dHJpYnV0ZXMpLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfU1JWUVVFUllDUkVEID0gMTM4NTY7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9HRVRTUElGQUlMXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEZhaWxlZCB0byBvYnRhaW4gbmV3IFNQSSBmb3IgdGhlIGluYm91bmQgU0EgZnJvbSBJcHNlYyBkcml2ZXIuICBUaGUgbW9zdCBjb21tb24gY2F1c2UgZm9yIHRoaXMgaXMgdGhhdCB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmUgdGhlIGNvcnJlY3QgZmlsdGVyLiAgQ2hlY2sgeW91ciBwb2xpY3kgdG8gdmVyaWZ5IHRoZSBmaWx0ZXJzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfR0VUU1BJRkFJTCA9IDEzODU3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9GSUxURVJcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgR2l2ZW4gZmlsdGVyIGlzIGludmFsaWRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX0lOVkFMSURfRklMVEVSID0gMTM4NTg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9PVVRfT0ZfTUVNT1JZXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX09VVF9PRl9NRU1PUlkgPSAxMzg1OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0FERF9VUERBVEVfS0VZX0ZBSUxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBGYWlsZWQgdG8gYWRkIFNlY3VyaXR5IEFzc29jaWF0aW9uIHRvIElQU2VjIERyaXZlci4gIFRoZSBtb3N0IGNvbW1vbiBjYXVzZSBmb3IgdGhpcyBpcyBpZiB0aGUgSUtFIG5lZ290aWF0aW9uIHRvb2sgdG9vIGxvbmcgdG8gY29tcGxldGUuICBJZiB0aGUgcHJvYmxlbSBwZXJzaXN0cywgcmVkdWNlIHRoZSBsb2FkIG9uIHRoZSBmYXVsdGluZyBtYWNoaW5lLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfQUREX1VQREFURV9LRVlfRkFJTEVEID0gMTM4NjA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX1BPTElDWVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIHBvbGljeVxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9QT0xJQ1kgPSAxMzg2MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1VOS05PV05fRE9JXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgRE9JXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9VTktOT1dOX0RPSSA9IDEzODYyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9TSVRVQVRJT05cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBzaXR1YXRpb25cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX0lOVkFMSURfU0lUVUFUSU9OID0gMTM4NjM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9ESF9GQUlMVVJFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIERpZmZpZS1IZWxsbWFuIGZhaWx1cmVcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX0RIX0ZBSUxVUkUgPSAxMzg2NDtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0lOVkFMSURfR1JPVVBcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgSW52YWxpZCBEaWZmaWUtSGVsbG1hbiBncm91cFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9HUk9VUCA9IDEzODY1O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfRU5DUllQVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBFcnJvciBlbmNyeXB0aW5nIHBheWxvYWRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX0VOQ1JZUFQgPSAxMzg2NjtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0RFQ1JZUFRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgRXJyb3IgZGVjcnlwdGluZyBwYXlsb2FkXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9ERUNSWVBUID0gMTM4Njc7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9QT0xJQ1lfTUFUQ0hcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgUG9saWN5IG1hdGNoIGVycm9yXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9QT0xJQ1lfTUFUQ0ggPSAxMzg2ODtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX1VOU1VQUE9SVEVEX0lEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIFVuc3VwcG9ydGVkIElEXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9VTlNVUFBPUlRFRF9JRCA9IDEzODY5O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9IQVNIXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEhhc2ggdmVyaWZpY2F0aW9uIGZhaWxlZFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9IQVNIID0gMTM4NzA7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX0hBU0hfQUxHXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgaGFzaCBhbGdvcml0aG1cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX0lOVkFMSURfSEFTSF9BTEcgPSAxMzg3MTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0lOVkFMSURfSEFTSF9TSVpFXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgaGFzaCBzaXplXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX0hBU0hfU0laRSA9IDEzODcyO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9FTkNSWVBUX0FMR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIGVuY3J5cHRpb24gYWxnb3JpdGhtXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX0VOQ1JZUFRfQUxHID0gMTM4NzM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX0FVVEhfQUxHXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIEludmFsaWQgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX0FVVEhfQUxHID0gMTM4NzQ7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX1NJR1xuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJbnZhbGlkIGNlcnRpZmljYXRlIHNpZ25hdHVyZVxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9TSUcgPSAxMzg3NTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0xPQURfRkFJTEVEXG4vL1xuLy8gTWVzc2FnZVRleHQ6XG4vL1xuLy8gIExvYWQgZmFpbGVkXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9MT0FEX0ZBSUxFRCA9IDEzODc2O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfUlBDX0RFTEVURVxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBEZWxldGVkIHZpYSBSUEMgY2FsbFxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfUlBDX0RFTEVURSA9IDEzODc3O1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfQkVOSUdOX1JFSU5JVFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBUZW1wb3Jhcnkgc3RhdGUgY3JlYXRlZCB0byBwZXJmb3JtIHJlaW5pdC4gVGhpcyBpcyBub3QgYSByZWFsIGZhaWx1cmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9CRU5JR05fUkVJTklUID0gMTM4Nzg7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX1JFU1BPTkRFUl9MSUZFVElNRV9OT1RJRllcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgVGhlIGxpZmV0aW1lIHZhbHVlIHJlY2VpdmVkIGluIHRoZSBSZXNwb25kZXIgTGlmZXRpbWUgTm90aWZ5IGlzIGJlbG93IHRoZSBXaW5kb3dzIDIwMDAgY29uZmlndXJlZCBtaW5pbXVtIHZhbHVlLiAgUGxlYXNlIGZpeCB0aGUgcG9saWN5IG9uIHRoZSBwZWVyIG1hY2hpbmUuXG4vL1xuZXhwb3J0IGNvbnN0IEVSUk9SX0lQU0VDX0lLRV9JTlZBTElEX1JFU1BPTkRFUl9MSUZFVElNRV9OT1RJRlkgPSAxMzg3OTtcblxuLy9cbi8vIE1lc3NhZ2VJZDogRVJST1JfSVBTRUNfSUtFX0lOVkFMSURfQ0VSVF9LRVlMRU5cbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgS2V5IGxlbmd0aCBpbiBjZXJ0aWZpY2F0ZSBpcyB0b28gc21hbGwgZm9yIGNvbmZpZ3VyZWQgc2VjdXJpdHkgcmVxdWlyZW1lbnRzLlxuLy9cbmV4cG9ydCBjb25zdCBFUlJPUl9JUFNFQ19JS0VfSU5WQUxJRF9DRVJUX0tFWUxFTiA9IDEzODgxO1xuXG4vL1xuLy8gTWVzc2FnZUlkOiBFUlJPUl9JUFNFQ19JS0VfTU1fTElNSVRcbi8vXG4vLyBNZXNzYWdlVGV4dDpcbi8vXG4vLyAgTWF4IG51bWJlciBvZiBlc3RhYmxpc2hlZCBNTSBTQXMgdG8gcGVlciBleGNlZWRlZC5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX01NX0xJTUlUID0gMTM4ODI7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9ORUdPVElBVElPTl9ESVNBQkxFRFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBJS0UgcmVjZWl2ZWQgYSBwb2xpY3kgdGhhdCBkaXNhYmxlcyBuZWdvdGlhdGlvbi5cbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX05FR09USUFUSU9OX0RJU0FCTEVEID0gMTM4ODM7XG5cbi8vXG4vLyBNZXNzYWdlSWQ6IEVSUk9SX0lQU0VDX0lLRV9ORUdfU1RBVFVTX0VORFxuLy9cbi8vIE1lc3NhZ2VUZXh0OlxuLy9cbi8vICBFUlJPUl9JUFNFQ19JS0VfTkVHX1NUQVRVU19FTkRcbi8vXG5leHBvcnQgY29uc3QgRVJST1JfSVBTRUNfSUtFX05FR19TVEFUVVNfRU5EID0gMTM4ODQ7XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8qIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4gKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4gKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTXG4gKiBJTiBUSEUgU09GVFdBUkUuXG4gKi9cblxuLy8gVGhpcyBtb2R1bGUgcG9ydHM6XG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9saWJ1di9saWJ1di9ibG9iL21hc3Rlci9zcmMvd2luL2Vycm9yLmNcblxuaW1wb3J0ICogYXMgd2luRXJyb3JzIGZyb20gXCIuL193aW5lcnJvci50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdXZUcmFuc2xhdGVTeXNFcnJvcihzeXNFcnJubzogbnVtYmVyKTogc3RyaW5nIHtcbiAgc3dpdGNoIChzeXNFcnJubykge1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0FDQ0VTU19ERU5JRUQ6XG4gICAgICByZXR1cm4gXCJFQUNDRVNcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9OT0FDQ0VTUzpcbiAgICAgIHJldHVybiBcIkVBQ0NFU1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLldTQUVBQ0NFUzpcbiAgICAgIHJldHVybiBcIkVBQ0NFU1wiO1xuICAgIC8vIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0VMRVZBVElPTl9SRVFVSVJFRDogICAgICAgICAgcmV0dXJuIFwiRUFDQ0VTXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfQ0FOVF9BQ0NFU1NfRklMRTpcbiAgICAgIHJldHVybiBcIkVBQ0NFU1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0FERFJFU1NfQUxSRUFEWV9BU1NPQ0lBVEVEOlxuICAgICAgcmV0dXJuIFwiRUFERFJJTlVTRVwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLldTQUVBRERSSU5VU0U6XG4gICAgICByZXR1cm4gXCJFQUREUklOVVNFXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuV1NBRUFERFJOT1RBVkFJTDpcbiAgICAgIHJldHVybiBcIkVBRERSTk9UQVZBSUxcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5XU0FFQUZOT1NVUFBPUlQ6XG4gICAgICByZXR1cm4gXCJFQUZOT1NVUFBPUlRcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5XU0FFV09VTERCTE9DSzpcbiAgICAgIHJldHVybiBcIkVBR0FJTlwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLldTQUVBTFJFQURZOlxuICAgICAgcmV0dXJuIFwiRUFMUkVBRFlcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9JTlZBTElEX0ZMQUdTOlxuICAgICAgcmV0dXJuIFwiRUJBREZcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9JTlZBTElEX0hBTkRMRTpcbiAgICAgIHJldHVybiBcIkVCQURGXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfTE9DS19WSU9MQVRJT046XG4gICAgICByZXR1cm4gXCJFQlVTWVwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX1BJUEVfQlVTWTpcbiAgICAgIHJldHVybiBcIkVCVVNZXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfU0hBUklOR19WSU9MQVRJT046XG4gICAgICByZXR1cm4gXCJFQlVTWVwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX09QRVJBVElPTl9BQk9SVEVEOlxuICAgICAgcmV0dXJuIFwiRUNBTkNFTEVEXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuV1NBRUlOVFI6XG4gICAgICByZXR1cm4gXCJFQ0FOQ0VMRURcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9OT19VTklDT0RFX1RSQU5TTEFUSU9OOlxuICAgICAgcmV0dXJuIFwiRUNIQVJTRVRcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9DT05ORUNUSU9OX0FCT1JURUQ6XG4gICAgICByZXR1cm4gXCJFQ09OTkFCT1JURURcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5XU0FFQ09OTkFCT1JURUQ6XG4gICAgICByZXR1cm4gXCJFQ09OTkFCT1JURURcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQ6XG4gICAgICByZXR1cm4gXCJFQ09OTlJFRlVTRURcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5XU0FFQ09OTlJFRlVTRUQ6XG4gICAgICByZXR1cm4gXCJFQ09OTlJFRlVTRURcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9ORVROQU1FX0RFTEVURUQ6XG4gICAgICByZXR1cm4gXCJFQ09OTlJFU0VUXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuV1NBRUNPTk5SRVNFVDpcbiAgICAgIHJldHVybiBcIkVDT05OUkVTRVRcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9BTFJFQURZX0VYSVNUUzpcbiAgICAgIHJldHVybiBcIkVFWElTVFwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0ZJTEVfRVhJU1RTOlxuICAgICAgcmV0dXJuIFwiRUVYSVNUXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfQlVGRkVSX09WRVJGTE9XOlxuICAgICAgcmV0dXJuIFwiRUZBVUxUXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuV1NBRUZBVUxUOlxuICAgICAgcmV0dXJuIFwiRUZBVUxUXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfSE9TVF9VTlJFQUNIQUJMRTpcbiAgICAgIHJldHVybiBcIkVIT1NUVU5SRUFDSFwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLldTQUVIT1NUVU5SRUFDSDpcbiAgICAgIHJldHVybiBcIkVIT1NUVU5SRUFDSFwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVI6XG4gICAgICByZXR1cm4gXCJFSU5WQUxcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9JTlZBTElEX0RBVEE6XG4gICAgICByZXR1cm4gXCJFSU5WQUxcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9JTlZBTElEX05BTUU6XG4gICAgICByZXR1cm4gXCJFSU5WQUxcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9JTlZBTElEX1BBUkFNRVRFUjpcbiAgICAgIHJldHVybiBcIkVJTlZBTFwiO1xuICAgIC8vIGNhc2Ugd2luRXJyb3JzLkVSUk9SX1NZTUxJTktfTk9UX1NVUFBPUlRFRDogICAgICAgcmV0dXJuIFwiRUlOVkFMXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuV1NBRUlOVkFMOlxuICAgICAgcmV0dXJuIFwiRUlOVkFMXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuV1NBRVBGTk9TVVBQT1JUOlxuICAgICAgcmV0dXJuIFwiRUlOVkFMXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfQkVHSU5OSU5HX09GX01FRElBOlxuICAgICAgcmV0dXJuIFwiRUlPXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfQlVTX1JFU0VUOlxuICAgICAgcmV0dXJuIFwiRUlPXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfQ1JDOlxuICAgICAgcmV0dXJuIFwiRUlPXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfREVWSUNFX0RPT1JfT1BFTjpcbiAgICAgIHJldHVybiBcIkVJT1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0RFVklDRV9SRVFVSVJFU19DTEVBTklORzpcbiAgICAgIHJldHVybiBcIkVJT1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0RJU0tfQ09SUlVQVDpcbiAgICAgIHJldHVybiBcIkVJT1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0VPTV9PVkVSRkxPVzpcbiAgICAgIHJldHVybiBcIkVJT1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0ZJTEVNQVJLX0RFVEVDVEVEOlxuICAgICAgcmV0dXJuIFwiRUlPXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfR0VOX0ZBSUxVUkU6XG4gICAgICByZXR1cm4gXCJFSU9cIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9JTlZBTElEX0JMT0NLX0xFTkdUSDpcbiAgICAgIHJldHVybiBcIkVJT1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0lPX0RFVklDRTpcbiAgICAgIHJldHVybiBcIkVJT1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX05PX0RBVEFfREVURUNURUQ6XG4gICAgICByZXR1cm4gXCJFSU9cIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9OT19TSUdOQUxfU0VOVDpcbiAgICAgIHJldHVybiBcIkVJT1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX09QRU5fRkFJTEVEOlxuICAgICAgcmV0dXJuIFwiRUlPXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfU0VUTUFSS19ERVRFQ1RFRDpcbiAgICAgIHJldHVybiBcIkVJT1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX1NJR05BTF9SRUZVU0VEOlxuICAgICAgcmV0dXJuIFwiRUlPXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuV1NBRUlTQ09OTjpcbiAgICAgIHJldHVybiBcIkVJU0NPTk5cIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9DQU5UX1JFU09MVkVfRklMRU5BTUU6XG4gICAgICByZXR1cm4gXCJFTE9PUFwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX1RPT19NQU5ZX09QRU5fRklMRVM6XG4gICAgICByZXR1cm4gXCJFTUZJTEVcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5XU0FFTUZJTEU6XG4gICAgICByZXR1cm4gXCJFTUZJTEVcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5XU0FFTVNHU0laRTpcbiAgICAgIHJldHVybiBcIkVNU0dTSVpFXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfRklMRU5BTUVfRVhDRURfUkFOR0U6XG4gICAgICByZXR1cm4gXCJFTkFNRVRPT0xPTkdcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9ORVRXT1JLX1VOUkVBQ0hBQkxFOlxuICAgICAgcmV0dXJuIFwiRU5FVFVOUkVBQ0hcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5XU0FFTkVUVU5SRUFDSDpcbiAgICAgIHJldHVybiBcIkVORVRVTlJFQUNIXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuV1NBRU5PQlVGUzpcbiAgICAgIHJldHVybiBcIkVOT0JVRlNcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9CQURfUEFUSE5BTUU6XG4gICAgICByZXR1cm4gXCJFTk9FTlRcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9ESVJFQ1RPUlk6XG4gICAgICByZXR1cm4gXCJFTk9URElSXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfRU5WVkFSX05PVF9GT1VORDpcbiAgICAgIHJldHVybiBcIkVOT0VOVFwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0ZJTEVfTk9UX0ZPVU5EOlxuICAgICAgcmV0dXJuIFwiRU5PRU5UXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfSU5WQUxJRF9EUklWRTpcbiAgICAgIHJldHVybiBcIkVOT0VOVFwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0lOVkFMSURfUkVQQVJTRV9EQVRBOlxuICAgICAgcmV0dXJuIFwiRU5PRU5UXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfTU9EX05PVF9GT1VORDpcbiAgICAgIHJldHVybiBcIkVOT0VOVFwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX1BBVEhfTk9UX0ZPVU5EOlxuICAgICAgcmV0dXJuIFwiRU5PRU5UXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuV1NBSE9TVF9OT1RfRk9VTkQ6XG4gICAgICByZXR1cm4gXCJFTk9FTlRcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5XU0FOT19EQVRBOlxuICAgICAgcmV0dXJuIFwiRU5PRU5UXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk6XG4gICAgICByZXR1cm4gXCJFTk9NRU1cIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9PVVRPRk1FTU9SWTpcbiAgICAgIHJldHVybiBcIkVOT01FTVwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0NBTk5PVF9NQUtFOlxuICAgICAgcmV0dXJuIFwiRU5PU1BDXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfRElTS19GVUxMOlxuICAgICAgcmV0dXJuIFwiRU5PU1BDXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfRUFfVEFCTEVfRlVMTDpcbiAgICAgIHJldHVybiBcIkVOT1NQQ1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0VORF9PRl9NRURJQTpcbiAgICAgIHJldHVybiBcIkVOT1NQQ1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0hBTkRMRV9ESVNLX0ZVTEw6XG4gICAgICByZXR1cm4gXCJFTk9TUENcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9OT1RfQ09OTkVDVEVEOlxuICAgICAgcmV0dXJuIFwiRU5PVENPTk5cIjtcbiAgICBjYXNlIHdpbkVycm9ycy5XU0FFTk9UQ09OTjpcbiAgICAgIHJldHVybiBcIkVOT1RDT05OXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfRElSX05PVF9FTVBUWTpcbiAgICAgIHJldHVybiBcIkVOT1RFTVBUWVwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLldTQUVOT1RTT0NLOlxuICAgICAgcmV0dXJuIFwiRU5PVFNPQ0tcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9OT1RfU1VQUE9SVEVEOlxuICAgICAgcmV0dXJuIFwiRU5PVFNVUFwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX0JST0tFTl9QSVBFOlxuICAgICAgcmV0dXJuIFwiRU9GXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfUFJJVklMRUdFX05PVF9IRUxEOlxuICAgICAgcmV0dXJuIFwiRVBFUk1cIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9CQURfUElQRTpcbiAgICAgIHJldHVybiBcIkVQSVBFXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfTk9fREFUQTpcbiAgICAgIHJldHVybiBcIkVQSVBFXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfUElQRV9OT1RfQ09OTkVDVEVEOlxuICAgICAgcmV0dXJuIFwiRVBJUEVcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5XU0FFU0hVVERPV046XG4gICAgICByZXR1cm4gXCJFUElQRVwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLldTQUVQUk9UT05PU1VQUE9SVDpcbiAgICAgIHJldHVybiBcIkVQUk9UT05PU1VQUE9SVFwiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX1dSSVRFX1BST1RFQ1Q6XG4gICAgICByZXR1cm4gXCJFUk9GU1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLkVSUk9SX1NFTV9USU1FT1VUOlxuICAgICAgcmV0dXJuIFwiRVRJTUVET1VUXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuV1NBRVRJTUVET1VUOlxuICAgICAgcmV0dXJuIFwiRVRJTUVET1VUXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfTk9UX1NBTUVfREVWSUNFOlxuICAgICAgcmV0dXJuIFwiRVhERVZcIjtcbiAgICBjYXNlIHdpbkVycm9ycy5FUlJPUl9JTlZBTElEX0ZVTkNUSU9OOlxuICAgICAgcmV0dXJuIFwiRUlTRElSXCI7XG4gICAgY2FzZSB3aW5FcnJvcnMuRVJST1JfTUVUQV9FWFBBTlNJT05fVE9PX0xPTkc6XG4gICAgICByZXR1cm4gXCJFMkJJR1wiO1xuICAgIGNhc2Ugd2luRXJyb3JzLldTQUVTT0NLVE5PU1VQUE9SVDpcbiAgICAgIHJldHVybiBcIkVTT0NLVE5PU1VQUE9SVFwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJVTktOT1dOXCI7XG4gIH1cbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuZXhwb3J0IGNvbnN0IG9zID0ge1xuICBVVl9VRFBfSVBWNk9OTFk6IDEsXG4gIFVWX1VEUF9QQVJUSUFMOiAyLFxuICBVVl9VRFBfUkVVU0VBRERSOiA0LFxuICBVVl9VRFBfTU1TR19DSFVOSzogOCxcbiAgVVZfVURQX01NU0dfRlJFRTogMTYsXG4gIFVWX1VEUF9MSU5VWF9SRUNWRVJSOiAzMixcbiAgVVZfVURQX1JFQ1ZNTVNHOiAyNTYsXG4gIGRsb3Blbjoge1xuICAgIFJUTERfTEFaWTogMSxcbiAgICBSVExEX05PVzogMixcbiAgICBSVExEX0dMT0JBTDogOCxcbiAgICBSVExEX0xPQ0FMOiA0LFxuICB9LFxuICBlcnJubzoge1xuICAgIEUyQklHOiA3LFxuICAgIEVBQ0NFUzogMTMsXG4gICAgRUFERFJJTlVTRTogNDgsXG4gICAgRUFERFJOT1RBVkFJTDogNDksXG4gICAgRUFGTk9TVVBQT1JUOiA0NyxcbiAgICBFQUdBSU46IDM1LFxuICAgIEVBTFJFQURZOiAzNyxcbiAgICBFQkFERjogOSxcbiAgICBFQkFETVNHOiA5NCxcbiAgICBFQlVTWTogMTYsXG4gICAgRUNBTkNFTEVEOiA4OSxcbiAgICBFQ0hJTEQ6IDEwLFxuICAgIEVDT05OQUJPUlRFRDogNTMsXG4gICAgRUNPTk5SRUZVU0VEOiA2MSxcbiAgICBFQ09OTlJFU0VUOiA1NCxcbiAgICBFREVBRExLOiAxMSxcbiAgICBFREVTVEFERFJSRVE6IDM5LFxuICAgIEVET006IDMzLFxuICAgIEVEUVVPVDogNjksXG4gICAgRUVYSVNUOiAxNyxcbiAgICBFRkFVTFQ6IDE0LFxuICAgIEVGQklHOiAyNyxcbiAgICBFSE9TVFVOUkVBQ0g6IDY1LFxuICAgIEVJRFJNOiA5MCxcbiAgICBFSUxTRVE6IDkyLFxuICAgIEVJTlBST0dSRVNTOiAzNixcbiAgICBFSU5UUjogNCxcbiAgICBFSU5WQUw6IDIyLFxuICAgIEVJTzogNSxcbiAgICBFSVNDT05OOiA1NixcbiAgICBFSVNESVI6IDIxLFxuICAgIEVMT09QOiA2MixcbiAgICBFTUZJTEU6IDI0LFxuICAgIEVNTElOSzogMzEsXG4gICAgRU1TR1NJWkU6IDQwLFxuICAgIEVNVUxUSUhPUDogOTUsXG4gICAgRU5BTUVUT09MT05HOiA2MyxcbiAgICBFTkVURE9XTjogNTAsXG4gICAgRU5FVFJFU0VUOiA1MixcbiAgICBFTkVUVU5SRUFDSDogNTEsXG4gICAgRU5GSUxFOiAyMyxcbiAgICBFTk9CVUZTOiA1NSxcbiAgICBFTk9EQVRBOiA5NixcbiAgICBFTk9ERVY6IDE5LFxuICAgIEVOT0VOVDogMixcbiAgICBFTk9FWEVDOiA4LFxuICAgIEVOT0xDSzogNzcsXG4gICAgRU5PTElOSzogOTcsXG4gICAgRU5PTUVNOiAxMixcbiAgICBFTk9NU0c6IDkxLFxuICAgIEVOT1BST1RPT1BUOiA0MixcbiAgICBFTk9TUEM6IDI4LFxuICAgIEVOT1NSOiA5OCxcbiAgICBFTk9TVFI6IDk5LFxuICAgIEVOT1NZUzogNzgsXG4gICAgRU5PVENPTk46IDU3LFxuICAgIEVOT1RESVI6IDIwLFxuICAgIEVOT1RFTVBUWTogNjYsXG4gICAgRU5PVFNPQ0s6IDM4LFxuICAgIEVOT1RTVVA6IDQ1LFxuICAgIEVOT1RUWTogMjUsXG4gICAgRU5YSU86IDYsXG4gICAgRU9QTk9UU1VQUDogMTAyLFxuICAgIEVPVkVSRkxPVzogODQsXG4gICAgRVBFUk06IDEsXG4gICAgRVBJUEU6IDMyLFxuICAgIEVQUk9UTzogMTAwLFxuICAgIEVQUk9UT05PU1VQUE9SVDogNDMsXG4gICAgRVBST1RPVFlQRTogNDEsXG4gICAgRVJBTkdFOiAzNCxcbiAgICBFUk9GUzogMzAsXG4gICAgRVNQSVBFOiAyOSxcbiAgICBFU1JDSDogMyxcbiAgICBFU1RBTEU6IDcwLFxuICAgIEVUSU1FOiAxMDEsXG4gICAgRVRJTUVET1VUOiA2MCxcbiAgICBFVFhUQlNZOiAyNixcbiAgICBFV09VTERCTE9DSzogMzUsXG4gICAgRVhERVY6IDE4LFxuICB9LFxuICBzaWduYWxzOiB7XG4gICAgU0lHSFVQOiAxLFxuICAgIFNJR0lOVDogMixcbiAgICBTSUdRVUlUOiAzLFxuICAgIFNJR0lMTDogNCxcbiAgICBTSUdUUkFQOiA1LFxuICAgIFNJR0FCUlQ6IDYsXG4gICAgU0lHSU9UOiA2LFxuICAgIFNJR0JVUzogMTAsXG4gICAgU0lHRlBFOiA4LFxuICAgIFNJR0tJTEw6IDksXG4gICAgU0lHVVNSMTogMzAsXG4gICAgU0lHU0VHVjogMTEsXG4gICAgU0lHVVNSMjogMzEsXG4gICAgU0lHUElQRTogMTMsXG4gICAgU0lHQUxSTTogMTQsXG4gICAgU0lHVEVSTTogMTUsXG4gICAgU0lHQ0hMRDogMjAsXG4gICAgU0lHQ09OVDogMTksXG4gICAgU0lHU1RPUDogMTcsXG4gICAgU0lHVFNUUDogMTgsXG4gICAgU0lHVFRJTjogMjEsXG4gICAgU0lHQlJFQUs6IDIxLFxuICAgIFNJR1RUT1U6IDIyLFxuICAgIFNJR1VSRzogMTYsXG4gICAgU0lHWENQVTogMjQsXG4gICAgU0lHWEZTWjogMjUsXG4gICAgU0lHVlRBTFJNOiAyNixcbiAgICBTSUdQUk9GOiAyNyxcbiAgICBTSUdXSU5DSDogMjgsXG4gICAgU0lHSU86IDIzLFxuICAgIFNJR0lORk86IDI5LFxuICAgIFNJR1NZUzogMTIsXG4gICAgU0lHRU1UOiA3LFxuICAgIFNJR1BXUjogMzAsIC8vIFRPRE8odWtpMDBhKTogSW4gU29sYXJpcywgdGhpcyBzaG91bGQgYmUgYDE5YC4gSXMgdGhlcmUgYW55IHdheSB0byBhZGRyZXNzIHRoaXMgZGlmZmVyZW5jZT9cbiAgICBTSUdTVEtGTFQ6IDE2LFxuICB9LFxuICBwcmlvcml0eToge1xuICAgIFBSSU9SSVRZX0xPVzogMTksXG4gICAgUFJJT1JJVFlfQkVMT1dfTk9STUFMOiAxMCxcbiAgICBQUklPUklUWV9OT1JNQUw6IDAsXG4gICAgUFJJT1JJVFlfQUJPVkVfTk9STUFMOiAtNyxcbiAgICBQUklPUklUWV9ISUdIOiAtMTQsXG4gICAgUFJJT1JJVFlfSElHSEVTVDogLTIwLFxuICB9LFxufSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBmcyA9IHtcbiAgVVZfRlNfU1lNTElOS19ESVI6IDEsXG4gIFVWX0ZTX1NZTUxJTktfSlVOQ1RJT046IDIsXG4gIE9fUkRPTkxZOiAwLFxuICBPX1dST05MWTogMSxcbiAgT19SRFdSOiAyLFxuICBVVl9ESVJFTlRfVU5LTk9XTjogMCxcbiAgVVZfRElSRU5UX0ZJTEU6IDEsXG4gIFVWX0RJUkVOVF9ESVI6IDIsXG4gIFVWX0RJUkVOVF9MSU5LOiAzLFxuICBVVl9ESVJFTlRfRklGTzogNCxcbiAgVVZfRElSRU5UX1NPQ0tFVDogNSxcbiAgVVZfRElSRU5UX0NIQVI6IDYsXG4gIFVWX0RJUkVOVF9CTE9DSzogNyxcbiAgU19JRk1UOiA2MTQ0MCxcbiAgU19JRlJFRzogMzI3NjgsXG4gIFNfSUZESVI6IDE2Mzg0LFxuICBTX0lGQ0hSOiA4MTkyLFxuICBTX0lGQkxLOiAyNDU3NixcbiAgU19JRklGTzogNDA5NixcbiAgU19JRkxOSzogNDA5NjAsXG4gIFNfSUZTT0NLOiA0OTE1MixcbiAgT19DUkVBVDogNTEyLFxuICBPX0VYQ0w6IDIwNDgsXG4gIFVWX0ZTX09fRklMRU1BUDogMCxcbiAgT19OT0NUVFk6IDEzMTA3MixcbiAgT19UUlVOQzogMTAyNCxcbiAgT19BUFBFTkQ6IDgsXG4gIE9fRElSRUNUT1JZOiAxMDQ4NTc2LFxuICBPX05PRk9MTE9XOiAyNTYsXG4gIE9fU1lOQzogMTI4LFxuICBPX0RTWU5DOiA0MTk0MzA0LFxuICBPX1NZTUxJTks6IDIwOTcxNTIsXG4gIE9fTk9OQkxPQ0s6IDQsXG4gIFNfSVJXWFU6IDQ0OCxcbiAgU19JUlVTUjogMjU2LFxuICBTX0lXVVNSOiAxMjgsXG4gIFNfSVhVU1I6IDY0LFxuICBTX0lSV1hHOiA1NixcbiAgU19JUkdSUDogMzIsXG4gIFNfSVdHUlA6IDE2LFxuICBTX0lYR1JQOiA4LFxuICBTX0lSV1hPOiA3LFxuICBTX0lST1RIOiA0LFxuICBTX0lXT1RIOiAyLFxuICBTX0lYT1RIOiAxLFxuICBGX09LOiAwLFxuICBSX09LOiA0LFxuICBXX09LOiAyLFxuICBYX09LOiAxLFxuICBVVl9GU19DT1BZRklMRV9FWENMOiAxLFxuICBDT1BZRklMRV9FWENMOiAxLFxuICBVVl9GU19DT1BZRklMRV9GSUNMT05FOiAyLFxuICBDT1BZRklMRV9GSUNMT05FOiAyLFxuICBVVl9GU19DT1BZRklMRV9GSUNMT05FX0ZPUkNFOiA0LFxuICBDT1BZRklMRV9GSUNMT05FX0ZPUkNFOiA0LFxufSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBjcnlwdG8gPSB7XG4gIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVI6IDI2OTQ4ODMxOSxcbiAgU1NMX09QX0FMTDogMjE0NzQ4NTc4MCxcbiAgU1NMX09QX0FMTE9XX05PX0RIRV9LRVg6IDEwMjQsXG4gIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT046IDI2MjE0NCxcbiAgU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRTogNDE5NDMwNCxcbiAgU1NMX09QX0NJU0NPX0FOWUNPTk5FQ1Q6IDMyNzY4LFxuICBTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFOiA4MTkyLFxuICBTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUc6IDIxNDc0ODM2NDgsXG4gIFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFM6IDIwNDgsXG4gIFNTTF9PUF9FUEhFTUVSQUxfUlNBOiAwLFxuICBTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUOiA0LFxuICBTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVI6IDAsXG4gIFNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUc6IDAsXG4gIFNTTF9PUF9NU0lFX1NTTFYyX1JTQV9QQURESU5HOiAwLFxuICBTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHOiAwLFxuICBTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRzogMCxcbiAgU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUc6IDAsXG4gIFNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRzogMCxcbiAgU1NMX09QX05PX0NPTVBSRVNTSU9OOiAxMzEwNzIsXG4gIFNTTF9PUF9OT19FTkNSWVBUX1RIRU5fTUFDOiA1MjQyODgsXG4gIFNTTF9PUF9OT19RVUVSWV9NVFU6IDQwOTYsXG4gIFNTTF9PUF9OT19SRU5FR09USUFUSU9OOiAxMDczNzQxODI0LFxuICBTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT046IDY1NTM2LFxuICBTU0xfT1BfTk9fU1NMdjI6IDAsXG4gIFNTTF9PUF9OT19TU0x2MzogMzM1NTQ0MzIsXG4gIFNTTF9PUF9OT19USUNLRVQ6IDE2Mzg0LFxuICBTU0xfT1BfTk9fVExTdjE6IDY3MTA4ODY0LFxuICBTU0xfT1BfTk9fVExTdjFfMTogMjY4NDM1NDU2LFxuICBTU0xfT1BfTk9fVExTdjFfMjogMTM0MjE3NzI4LFxuICBTU0xfT1BfTk9fVExTdjFfMzogNTM2ODcwOTEyLFxuICBTU0xfT1BfUEtDUzFfQ0hFQ0tfMTogMCxcbiAgU1NMX09QX1BLQ1MxX0NIRUNLXzI6IDAsXG4gIFNTTF9PUF9QUklPUklUSVpFX0NIQUNIQTogMjA5NzE1MixcbiAgU1NMX09QX1NJTkdMRV9ESF9VU0U6IDAsXG4gIFNTTF9PUF9TSU5HTEVfRUNESF9VU0U6IDAsXG4gIFNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUc6IDAsXG4gIFNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUc6IDAsXG4gIFNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUc6IDAsXG4gIFNTTF9PUF9UTFNfRDVfQlVHOiAwLFxuICBTU0xfT1BfVExTX1JPTExCQUNLX0JVRzogODM4ODYwOCxcbiAgRU5HSU5FX01FVEhPRF9SU0E6IDEsXG4gIEVOR0lORV9NRVRIT0RfRFNBOiAyLFxuICBFTkdJTkVfTUVUSE9EX0RIOiA0LFxuICBFTkdJTkVfTUVUSE9EX1JBTkQ6IDgsXG4gIEVOR0lORV9NRVRIT0RfRUM6IDIwNDgsXG4gIEVOR0lORV9NRVRIT0RfQ0lQSEVSUzogNjQsXG4gIEVOR0lORV9NRVRIT0RfRElHRVNUUzogMTI4LFxuICBFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFM6IDUxMixcbiAgRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFM6IDEwMjQsXG4gIEVOR0lORV9NRVRIT0RfQUxMOiA2NTUzNSxcbiAgRU5HSU5FX01FVEhPRF9OT05FOiAwLFxuICBESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOiAyLFxuICBESF9DSEVDS19QX05PVF9QUklNRTogMSxcbiAgREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjogNCxcbiAgREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjogOCxcbiAgQUxQTl9FTkFCTEVEOiAxLFxuICBSU0FfUEtDUzFfUEFERElORzogMSxcbiAgUlNBX1NTTFYyM19QQURESU5HOiAyLFxuICBSU0FfTk9fUEFERElORzogMyxcbiAgUlNBX1BLQ1MxX09BRVBfUEFERElORzogNCxcbiAgUlNBX1g5MzFfUEFERElORzogNSxcbiAgUlNBX1BLQ1MxX1BTU19QQURESU5HOiA2LFxuICBSU0FfUFNTX1NBTFRMRU5fRElHRVNUOiAtMSxcbiAgUlNBX1BTU19TQUxUTEVOX01BWF9TSUdOOiAtMixcbiAgUlNBX1BTU19TQUxUTEVOX0FVVE86IC0yLFxuICBkZWZhdWx0Q29yZUNpcGhlckxpc3Q6XG4gICAgXCJUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0OlRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTY6VExTX0FFU18xMjhfR0NNX1NIQTI1NjpFQ0RIRS1SU0EtQUVTMTI4LUdDTS1TSEEyNTY6RUNESEUtRUNEU0EtQUVTMTI4LUdDTS1TSEEyNTY6RUNESEUtUlNBLUFFUzI1Ni1HQ00tU0hBMzg0OkVDREhFLUVDRFNBLUFFUzI1Ni1HQ00tU0hBMzg0OkRIRS1SU0EtQUVTMTI4LUdDTS1TSEEyNTY6RUNESEUtUlNBLUFFUzEyOC1TSEEyNTY6REhFLVJTQS1BRVMxMjgtU0hBMjU2OkVDREhFLVJTQS1BRVMyNTYtU0hBMzg0OkRIRS1SU0EtQUVTMjU2LVNIQTM4NDpFQ0RIRS1SU0EtQUVTMjU2LVNIQTI1NjpESEUtUlNBLUFFUzI1Ni1TSEEyNTY6SElHSDohYU5VTEw6IWVOVUxMOiFFWFBPUlQ6IURFUzohUkM0OiFNRDU6IVBTSzohU1JQOiFDQU1FTExJQVwiLFxuICBUTFMxX1ZFUlNJT046IDc2OSxcbiAgVExTMV8xX1ZFUlNJT046IDc3MCxcbiAgVExTMV8yX1ZFUlNJT046IDc3MSxcbiAgVExTMV8zX1ZFUlNJT046IDc3MixcbiAgUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOiAyLFxuICBQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDogNCxcbiAgUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6IDYsXG59IGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHpsaWIgPSB7XG4gIFpfTk9fRkxVU0g6IDAsXG4gIFpfUEFSVElBTF9GTFVTSDogMSxcbiAgWl9TWU5DX0ZMVVNIOiAyLFxuICBaX0ZVTExfRkxVU0g6IDMsXG4gIFpfRklOSVNIOiA0LFxuICBaX0JMT0NLOiA1LFxuICBaX09LOiAwLFxuICBaX1NUUkVBTV9FTkQ6IDEsXG4gIFpfTkVFRF9ESUNUOiAyLFxuICBaX0VSUk5POiAtMSxcbiAgWl9TVFJFQU1fRVJST1I6IC0yLFxuICBaX0RBVEFfRVJST1I6IC0zLFxuICBaX01FTV9FUlJPUjogLTQsXG4gIFpfQlVGX0VSUk9SOiAtNSxcbiAgWl9WRVJTSU9OX0VSUk9SOiAtNixcbiAgWl9OT19DT01QUkVTU0lPTjogMCxcbiAgWl9CRVNUX1NQRUVEOiAxLFxuICBaX0JFU1RfQ09NUFJFU1NJT046IDksXG4gIFpfREVGQVVMVF9DT01QUkVTU0lPTjogLTEsXG4gIFpfRklMVEVSRUQ6IDEsXG4gIFpfSFVGRk1BTl9PTkxZOiAyLFxuICBaX1JMRTogMyxcbiAgWl9GSVhFRDogNCxcbiAgWl9ERUZBVUxUX1NUUkFURUdZOiAwLFxuICBaTElCX1ZFUk5VTTogNDc4NCxcbiAgREVGTEFURTogMSxcbiAgSU5GTEFURTogMixcbiAgR1pJUDogMyxcbiAgR1VOWklQOiA0LFxuICBERUZMQVRFUkFXOiA1LFxuICBJTkZMQVRFUkFXOiA2LFxuICBVTlpJUDogNyxcbiAgQlJPVExJX0RFQ09ERTogOCxcbiAgQlJPVExJX0VOQ09ERTogOSxcbiAgWl9NSU5fV0lORE9XQklUUzogOCxcbiAgWl9NQVhfV0lORE9XQklUUzogMTUsXG4gIFpfREVGQVVMVF9XSU5ET1dCSVRTOiAxNSxcbiAgWl9NSU5fQ0hVTks6IDY0LFxuICBaX01BWF9DSFVOSzogSW5maW5pdHksXG4gIFpfREVGQVVMVF9DSFVOSzogMTYzODQsXG4gIFpfTUlOX01FTUxFVkVMOiAxLFxuICBaX01BWF9NRU1MRVZFTDogOSxcbiAgWl9ERUZBVUxUX01FTUxFVkVMOiA4LFxuICBaX01JTl9MRVZFTDogLTEsXG4gIFpfTUFYX0xFVkVMOiA5LFxuICBaX0RFRkFVTFRfTEVWRUw6IC0xLFxuICBCUk9UTElfT1BFUkFUSU9OX1BST0NFU1M6IDAsXG4gIEJST1RMSV9PUEVSQVRJT05fRkxVU0g6IDEsXG4gIEJST1RMSV9PUEVSQVRJT05fRklOSVNIOiAyLFxuICBCUk9UTElfT1BFUkFUSU9OX0VNSVRfTUVUQURBVEE6IDMsXG4gIEJST1RMSV9QQVJBTV9NT0RFOiAwLFxuICBCUk9UTElfTU9ERV9HRU5FUklDOiAwLFxuICBCUk9UTElfTU9ERV9URVhUOiAxLFxuICBCUk9UTElfTU9ERV9GT05UOiAyLFxuICBCUk9UTElfREVGQVVMVF9NT0RFOiAwLFxuICBCUk9UTElfUEFSQU1fUVVBTElUWTogMSxcbiAgQlJPVExJX01JTl9RVUFMSVRZOiAwLFxuICBCUk9UTElfTUFYX1FVQUxJVFk6IDExLFxuICBCUk9UTElfREVGQVVMVF9RVUFMSVRZOiAxMSxcbiAgQlJPVExJX1BBUkFNX0xHV0lOOiAyLFxuICBCUk9UTElfTUlOX1dJTkRPV19CSVRTOiAxMCxcbiAgQlJPVExJX01BWF9XSU5ET1dfQklUUzogMjQsXG4gIEJST1RMSV9MQVJHRV9NQVhfV0lORE9XX0JJVFM6IDMwLFxuICBCUk9UTElfREVGQVVMVF9XSU5ET1c6IDIyLFxuICBCUk9UTElfUEFSQU1fTEdCTE9DSzogMyxcbiAgQlJPVExJX01JTl9JTlBVVF9CTE9DS19CSVRTOiAxNixcbiAgQlJPVExJX01BWF9JTlBVVF9CTE9DS19CSVRTOiAyNCxcbiAgQlJPVExJX1BBUkFNX0RJU0FCTEVfTElURVJBTF9DT05URVhUX01PREVMSU5HOiA0LFxuICBCUk9UTElfUEFSQU1fU0laRV9ISU5UOiA1LFxuICBCUk9UTElfUEFSQU1fTEFSR0VfV0lORE9XOiA2LFxuICBCUk9UTElfUEFSQU1fTlBPU1RGSVg6IDcsXG4gIEJST1RMSV9QQVJBTV9ORElSRUNUOiA4LFxuICBCUk9UTElfREVDT0RFUl9SRVNVTFRfRVJST1I6IDAsXG4gIEJST1RMSV9ERUNPREVSX1JFU1VMVF9TVUNDRVNTOiAxLFxuICBCUk9UTElfREVDT0RFUl9SRVNVTFRfTkVFRFNfTU9SRV9JTlBVVDogMixcbiAgQlJPVExJX0RFQ09ERVJfUkVTVUxUX05FRURTX01PUkVfT1VUUFVUOiAzLFxuICBCUk9UTElfREVDT0RFUl9QQVJBTV9ESVNBQkxFX1JJTkdfQlVGRkVSX1JFQUxMT0NBVElPTjogMCxcbiAgQlJPVExJX0RFQ09ERVJfUEFSQU1fTEFSR0VfV0lORE9XOiAxLFxuICBCUk9UTElfREVDT0RFUl9OT19FUlJPUjogMCxcbiAgQlJPVExJX0RFQ09ERVJfU1VDQ0VTUzogMSxcbiAgQlJPVExJX0RFQ09ERVJfTkVFRFNfTU9SRV9JTlBVVDogMixcbiAgQlJPVExJX0RFQ09ERVJfTkVFRFNfTU9SRV9PVVRQVVQ6IDMsXG4gIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9FWFVCRVJBTlRfTklCQkxFOiAtMSxcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1JFU0VSVkVEOiAtMixcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0VYVUJFUkFOVF9NRVRBX05JQkJMRTogLTMsXG4gIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9TSU1QTEVfSFVGRk1BTl9BTFBIQUJFVDogLTQsXG4gIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9TSU1QTEVfSFVGRk1BTl9TQU1FOiAtNSxcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0NMX1NQQUNFOiAtNixcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0hVRkZNQU5fU1BBQ0U6IC03LFxuICBCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQ09OVEVYVF9NQVBfUkVQRUFUOiAtOCxcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0JMT0NLX0xFTkdUSF8xOiAtOSxcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0JMT0NLX0xFTkdUSF8yOiAtMTAsXG4gIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9UUkFOU0ZPUk06IC0xMSxcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0RJQ1RJT05BUlk6IC0xMixcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1dJTkRPV19CSVRTOiAtMTMsXG4gIEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9QQURESU5HXzE6IC0xNCxcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1BBRERJTkdfMjogLTE1LFxuICBCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfRElTVEFOQ0U6IC0xNixcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfRElDVElPTkFSWV9OT1RfU0VUOiAtMTksXG4gIEJST1RMSV9ERUNPREVSX0VSUk9SX0lOVkFMSURfQVJHVU1FTlRTOiAtMjAsXG4gIEJST1RMSV9ERUNPREVSX0VSUk9SX0FMTE9DX0NPTlRFWFRfTU9ERVM6IC0yMSxcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfVFJFRV9HUk9VUFM6IC0yMixcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfQ09OVEVYVF9NQVA6IC0yNSxcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfUklOR19CVUZGRVJfMTogLTI2LFxuICBCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19SSU5HX0JVRkZFUl8yOiAtMjcsXG4gIEJST1RMSV9ERUNPREVSX0VSUk9SX0FMTE9DX0JMT0NLX1RZUEVfVFJFRVM6IC0zMCxcbiAgQlJPVExJX0RFQ09ERVJfRVJST1JfVU5SRUFDSEFCTEU6IC0zMSxcbn0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgdHJhY2UgPSB7XG4gIFRSQUNFX0VWRU5UX1BIQVNFX0JFR0lOOiA2NixcbiAgVFJBQ0VfRVZFTlRfUEhBU0VfRU5EOiA2OSxcbiAgVFJBQ0VfRVZFTlRfUEhBU0VfQ09NUExFVEU6IDg4LFxuICBUUkFDRV9FVkVOVF9QSEFTRV9JTlNUQU5UOiA3MyxcbiAgVFJBQ0VfRVZFTlRfUEhBU0VfQVNZTkNfQkVHSU46IDgzLFxuICBUUkFDRV9FVkVOVF9QSEFTRV9BU1lOQ19TVEVQX0lOVE86IDg0LFxuICBUUkFDRV9FVkVOVF9QSEFTRV9BU1lOQ19TVEVQX1BBU1Q6IDExMixcbiAgVFJBQ0VfRVZFTlRfUEhBU0VfQVNZTkNfRU5EOiA3MCxcbiAgVFJBQ0VfRVZFTlRfUEhBU0VfTkVTVEFCTEVfQVNZTkNfQkVHSU46IDk4LFxuICBUUkFDRV9FVkVOVF9QSEFTRV9ORVNUQUJMRV9BU1lOQ19FTkQ6IDEwMSxcbiAgVFJBQ0VfRVZFTlRfUEhBU0VfTkVTVEFCTEVfQVNZTkNfSU5TVEFOVDogMTEwLFxuICBUUkFDRV9FVkVOVF9QSEFTRV9GTE9XX0JFR0lOOiAxMTUsXG4gIFRSQUNFX0VWRU5UX1BIQVNFX0ZMT1dfU1RFUDogMTE2LFxuICBUUkFDRV9FVkVOVF9QSEFTRV9GTE9XX0VORDogMTAyLFxuICBUUkFDRV9FVkVOVF9QSEFTRV9NRVRBREFUQTogNzcsXG4gIFRSQUNFX0VWRU5UX1BIQVNFX0NPVU5URVI6IDY3LFxuICBUUkFDRV9FVkVOVF9QSEFTRV9TQU1QTEU6IDgwLFxuICBUUkFDRV9FVkVOVF9QSEFTRV9DUkVBVEVfT0JKRUNUOiA3OCxcbiAgVFJBQ0VfRVZFTlRfUEhBU0VfU05BUFNIT1RfT0JKRUNUOiA3OSxcbiAgVFJBQ0VfRVZFTlRfUEhBU0VfREVMRVRFX09CSkVDVDogNjgsXG4gIFRSQUNFX0VWRU5UX1BIQVNFX01FTU9SWV9EVU1QOiAxMTgsXG4gIFRSQUNFX0VWRU5UX1BIQVNFX01BUks6IDgyLFxuICBUUkFDRV9FVkVOVF9QSEFTRV9DTE9DS19TWU5DOiA5OSxcbiAgVFJBQ0VfRVZFTlRfUEhBU0VfRU5URVJfQ09OVEVYVDogNDAsXG4gIFRSQUNFX0VWRU5UX1BIQVNFX0xFQVZFX0NPTlRFWFQ6IDQxLFxuICBUUkFDRV9FVkVOVF9QSEFTRV9MSU5LX0lEUzogNjEsXG59IGFzIGNvbnN0O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tIFwiLi4vaW50ZXJuYWwvdXRpbC90eXBlcy50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2ludGVybmFsL3V0aWwvdHlwZXMudHNcIjtcbmV4cG9ydCBkZWZhdWx0IHsgLi4udHlwZXMgfTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuaW1wb3J0IHsgRW5jb2RpbmdzIH0gZnJvbSBcIi4vX25vZGUudHNcIjtcblxuY29uc3QgZW5jb2RpbmdzID0gW107XG5lbmNvZGluZ3NbRW5jb2RpbmdzLkFTQ0lJXSA9IFwiYXNjaWlcIjtcbmVuY29kaW5nc1tFbmNvZGluZ3MuQkFTRTY0XSA9IFwiYmFzZTY0XCI7XG5lbmNvZGluZ3NbRW5jb2RpbmdzLkJBU0U2NFVSTF0gPSBcImJhc2U2NHVybFwiO1xuZW5jb2RpbmdzW0VuY29kaW5ncy5CVUZGRVJdID0gXCJidWZmZXJcIjtcbmVuY29kaW5nc1tFbmNvZGluZ3MuSEVYXSA9IFwiaGV4XCI7XG5lbmNvZGluZ3NbRW5jb2RpbmdzLkxBVElOMV0gPSBcImxhdGluMVwiO1xuZW5jb2RpbmdzW0VuY29kaW5ncy5VQ1MyXSA9IFwidXRmMTZsZVwiO1xuZW5jb2RpbmdzW0VuY29kaW5ncy5VVEY4XSA9IFwidXRmOFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7IGVuY29kaW5ncyB9O1xuZXhwb3J0IHsgZW5jb2RpbmdzIH07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRoaXMgZmlsZSBjb250YWlucyBDKysgbm9kZSBnbG9iYWxzIGFjY2VzZWQgaW4gaW50ZXJuYWwgYmluZGluZyBjYWxsc1xuXG4vKipcbiAqIEFkYXB0ZWQgZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvM2I3Mjc4OGFmYjczNjVlMTBhZTFlOTdjNzFkMWY2MGVlMjlmMDlmMi9zcmMvbm9kZS5oI0w3MjgtTDczOFxuICovXG5leHBvcnQgZW51bSBFbmNvZGluZ3Mge1xuICBBU0NJSSwgLy8gMFxuICBVVEY4LCAvLyAxXG4gIEJBU0U2NCwgLy8gMlxuICBVQ1MyLCAvLyAzXG4gIEJJTkFSWSwgLy8gNFxuICBIRVgsIC8vIDVcbiAgQlVGRkVSLCAvLyA2XG4gIEJBU0U2NFVSTCwgLy8gN1xuICBMQVRJTjEgPSA0LCAvLyA0ID0gQklOQVJZXG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbmltcG9ydCB7IEVuY29kaW5ncyB9IGZyb20gXCIuL19ub2RlLnRzXCI7XG5pbXBvcnQgeyBpbmRleE9mTmVlZGxlIH0gZnJvbSBcIi4uLy4uL2J5dGVzL21vZC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9CeXRlcyhuOiBudW1iZXIpOiBVaW50OEFycmF5IHtcbiAgaWYgKG4gPT09IDApIHJldHVybiBuZXcgVWludDhBcnJheShbMF0pO1xuXG4gIGNvbnN0IGJ5dGVzID0gW107XG4gIGJ5dGVzLnVuc2hpZnQobiAmIDI1NSk7XG4gIHdoaWxlIChuID49IDI1Nikge1xuICAgIG4gPSBuID4+PiA4O1xuICAgIGJ5dGVzLnVuc2hpZnQobiAmIDI1NSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcbn1cblxuLy8gVE9ETyhTb3JlbXdhcilcbi8vIENoZWNrIGlmIG9mZnNldCBvciBidWZmZXIgY2FuIGJlIHRyYW5zZm9ybSBpbiBvcmRlciB0byBqdXN0IHVzZSBzdGQncyBsYXN0SW5kZXhPZiBkaXJlY3RseVxuLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJzIGZyb20gc3RkJ3MgbGFzdEluZGV4T2YgaW4gdGhlIGZhY3QgdGhhdFxuLy8gaXQgYWxzbyBpbmNsdWRlcyBpdGVtcyBvdXRzaWRlIG9mIHRoZSBvZmZzZXQgYXMgbG9uZyBhcyBwYXJ0IG9mIHRoZVxuLy8gc2V0IGlzIGNvbnRhaW5lZCBpbnNpZGUgb2YgdGhlIG9mZnNldFxuLy8gUHJvYmFibHkgd2F5IHNsb3dlciB0b29cbmZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgoXG4gIHRhcmdldEJ1ZmZlcjogVWludDhBcnJheSxcbiAgYnVmZmVyOiBVaW50OEFycmF5LFxuICBvZmZzZXQ6IG51bWJlcixcbikge1xuICBvZmZzZXQgPSBvZmZzZXQgPiB0YXJnZXRCdWZmZXIubGVuZ3RoID8gdGFyZ2V0QnVmZmVyLmxlbmd0aCA6IG9mZnNldDtcblxuICBjb25zdCBzZWFyY2hhYmxlQnVmZmVyID0gdGFyZ2V0QnVmZmVyLnNsaWNlKDAsIG9mZnNldCArIGJ1ZmZlci5sZW5ndGgpO1xuICBjb25zdCBzZWFyY2hhYmxlQnVmZmVyTGFzdEluZGV4ID0gc2VhcmNoYWJsZUJ1ZmZlci5sZW5ndGggLSAxO1xuICBjb25zdCBidWZmZXJMYXN0SW5kZXggPSBidWZmZXIubGVuZ3RoIC0gMTtcblxuICAvLyBJbXBvcnRhbnQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbGFzdCBtYXRjaCBpbmRleCBpbiBvcmRlciB0byBiYWNrdHJhY2sgYWZ0ZXIgYW4gaW5jb21wbGV0ZSBtYXRjaFxuICAvLyBOb3QgZG9pbmcgdGhpcyB3aWxsIGNhdXNlIHRoZSBzZWFyY2ggdG8gc2tpcCBhbGwgcG9zc2libGUgbWF0Y2hlcyB0aGF0IGhhcHBlbmVkIGluIHRoZVxuICAvLyBsYXN0IG1hdGNoIHJhbmdlXG4gIGxldCBsYXN0TWF0Y2hJbmRleCA9IC0xO1xuICBsZXQgbWF0Y2hlcyA9IDA7XG4gIGxldCBpbmRleCA9IC0xO1xuICBmb3IgKGxldCB4ID0gMDsgeCA8PSBzZWFyY2hhYmxlQnVmZmVyTGFzdEluZGV4OyB4KyspIHtcbiAgICBpZiAoXG4gICAgICBzZWFyY2hhYmxlQnVmZmVyW3NlYXJjaGFibGVCdWZmZXJMYXN0SW5kZXggLSB4XSA9PT1cbiAgICAgICAgYnVmZmVyW2J1ZmZlckxhc3RJbmRleCAtIG1hdGNoZXNdXG4gICAgKSB7XG4gICAgICBpZiAobGFzdE1hdGNoSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGxhc3RNYXRjaEluZGV4ID0geDtcbiAgICAgIH1cbiAgICAgIG1hdGNoZXMrKztcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0Y2hlcyA9IDA7XG4gICAgICBpZiAobGFzdE1hdGNoSW5kZXggIT09IC0xKSB7XG4gICAgICAgIC8vIFJlc3RhcnQgdGhlIHNlYXJjaCByaWdodCBhZnRlciB0aGUgbGFzdCBpbmRleCB3YXMgaWdub3JlZFxuICAgICAgICB4ID0gbGFzdE1hdGNoSW5kZXggKyAxO1xuICAgICAgICBsYXN0TWF0Y2hJbmRleCA9IC0xO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoZXMgPT09IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIGluZGV4ID0geDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbmRleCA9PT0gLTEpIHJldHVybiBpbmRleDtcblxuICByZXR1cm4gc2VhcmNoYWJsZUJ1ZmZlckxhc3RJbmRleCAtIGluZGV4O1xufVxuXG4vLyBUT0RPXG4vLyBUYWtlIGVuY29kaW5nIGludG8gYWNjb3VudCB3aGVuIGV2YWx1YXRpbmcgaW5kZXhcbmZ1bmN0aW9uIGluZGV4T2ZCdWZmZXIoXG4gIHRhcmdldEJ1ZmZlcjogVWludDhBcnJheSxcbiAgYnVmZmVyOiBVaW50OEFycmF5LFxuICBieXRlT2Zmc2V0OiBudW1iZXIsXG4gIGVuY29kaW5nOiBFbmNvZGluZ3MsXG4gIGZvcndhcmREaXJlY3Rpb246IGJvb2xlYW4sXG4pIHtcbiAgaWYgKCFFbmNvZGluZ3NbZW5jb2RpbmddID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZW5jb2RpbmcgY29kZSAke2VuY29kaW5nfWApO1xuICB9XG5cbiAgaWYgKCFmb3J3YXJkRGlyZWN0aW9uKSB7XG4gICAgLy8gSWYgbmVnYXRpdmUgdGhlIG9mZnNldCBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG5cbiAgICBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICAgIGJ5dGVPZmZzZXQgPSB0YXJnZXRCdWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJ5dGVPZmZzZXQgPD0gdGFyZ2V0QnVmZmVyLmxlbmd0aFxuICAgICAgICA/IGJ5dGVPZmZzZXRcbiAgICAgICAgOiB0YXJnZXRCdWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5kTGFzdEluZGV4KHRhcmdldEJ1ZmZlciwgYnVmZmVyLCBieXRlT2Zmc2V0KTtcbiAgfVxuXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGJ5dGVPZmZzZXQgPD0gdGFyZ2V0QnVmZmVyLmxlbmd0aCA/IGJ5dGVPZmZzZXQgOiB0YXJnZXRCdWZmZXIubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4T2ZOZWVkbGUodGFyZ2V0QnVmZmVyLCBidWZmZXIsIGJ5dGVPZmZzZXQpO1xufVxuXG4vLyBUT0RPKFNvcmVtd2FyKVxuLy8gTm9kZSdzIGltcGxlbWVudGF0aW9uIGlzIGEgdmVyeSBvYnNjdXJlIGFsZ29yaXRobSB0aGF0IEkgaGF2ZW4ndCBiZWVuIGFibGUgdG8gY3JhY2sganVzdCB5ZXRcbmZ1bmN0aW9uIGluZGV4T2ZOdW1iZXIoXG4gIHRhcmdldEJ1ZmZlcjogVWludDhBcnJheSxcbiAgbnVtYmVyOiBudW1iZXIsXG4gIGJ5dGVPZmZzZXQ6IG51bWJlcixcbiAgZm9yd2FyZERpcmVjdGlvbjogYm9vbGVhbixcbikge1xuICBjb25zdCBieXRlcyA9IG51bWJlclRvQnl0ZXMobnVtYmVyKTtcblxuICBpZiAoYnl0ZXMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk11bHRpIGJ5dGUgbnVtYmVyIHNlYXJjaCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4T2ZCdWZmZXIoXG4gICAgdGFyZ2V0QnVmZmVyLFxuICAgIG51bWJlclRvQnl0ZXMobnVtYmVyKSxcbiAgICBieXRlT2Zmc2V0LFxuICAgIEVuY29kaW5ncy5VVEY4LFxuICAgIGZvcndhcmREaXJlY3Rpb24sXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgaW5kZXhPZkJ1ZmZlciwgaW5kZXhPZk51bWJlciB9O1xuZXhwb3J0IHsgaW5kZXhPZkJ1ZmZlciwgaW5kZXhPZk51bWJlciB9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbi8qKlxuICoge0BsaW5rY29kZSBlbmNvZGV9IGFuZCB7QGxpbmtjb2RlIGRlY29kZX0gZm9yXG4gKiBbYmFzZTY0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQpIGVuY29kaW5nLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuY29uc3QgYmFzZTY0YWJjID0gW1xuICBcIkFcIixcbiAgXCJCXCIsXG4gIFwiQ1wiLFxuICBcIkRcIixcbiAgXCJFXCIsXG4gIFwiRlwiLFxuICBcIkdcIixcbiAgXCJIXCIsXG4gIFwiSVwiLFxuICBcIkpcIixcbiAgXCJLXCIsXG4gIFwiTFwiLFxuICBcIk1cIixcbiAgXCJOXCIsXG4gIFwiT1wiLFxuICBcIlBcIixcbiAgXCJRXCIsXG4gIFwiUlwiLFxuICBcIlNcIixcbiAgXCJUXCIsXG4gIFwiVVwiLFxuICBcIlZcIixcbiAgXCJXXCIsXG4gIFwiWFwiLFxuICBcIllcIixcbiAgXCJaXCIsXG4gIFwiYVwiLFxuICBcImJcIixcbiAgXCJjXCIsXG4gIFwiZFwiLFxuICBcImVcIixcbiAgXCJmXCIsXG4gIFwiZ1wiLFxuICBcImhcIixcbiAgXCJpXCIsXG4gIFwialwiLFxuICBcImtcIixcbiAgXCJsXCIsXG4gIFwibVwiLFxuICBcIm5cIixcbiAgXCJvXCIsXG4gIFwicFwiLFxuICBcInFcIixcbiAgXCJyXCIsXG4gIFwic1wiLFxuICBcInRcIixcbiAgXCJ1XCIsXG4gIFwidlwiLFxuICBcIndcIixcbiAgXCJ4XCIsXG4gIFwieVwiLFxuICBcInpcIixcbiAgXCIwXCIsXG4gIFwiMVwiLFxuICBcIjJcIixcbiAgXCIzXCIsXG4gIFwiNFwiLFxuICBcIjVcIixcbiAgXCI2XCIsXG4gIFwiN1wiLFxuICBcIjhcIixcbiAgXCI5XCIsXG4gIFwiK1wiLFxuICBcIi9cIixcbl07XG5cbi8qKlxuICogQ1JFRElUOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9lbmVwb21ueWFzY2hpaC83MmM0MjNmNzI3ZDM5NWVlYWEwOTY5NzA1ODIzODcyN1xuICogRW5jb2RlcyBhIGdpdmVuIFVpbnQ4QXJyYXksIEFycmF5QnVmZmVyIG9yIHN0cmluZyBpbnRvIFJGQzQ2NDggYmFzZTY0IHJlcHJlc2VudGF0aW9uXG4gKiBAcGFyYW0gZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlKGRhdGE6IEFycmF5QnVmZmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdWludDggPSB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIlxuICAgID8gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGRhdGEpXG4gICAgOiBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheVxuICAgID8gZGF0YVxuICAgIDogbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gIGxldCByZXN1bHQgPSBcIlwiLFxuICAgIGk7XG4gIGNvbnN0IGwgPSB1aW50OC5sZW5ndGg7XG4gIGZvciAoaSA9IDI7IGkgPCBsOyBpICs9IDMpIHtcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjW3VpbnQ4W2kgLSAyXSA+PiAyXTtcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjWygodWludDhbaSAtIDJdICYgMHgwMykgPDwgNCkgfCAodWludDhbaSAtIDFdID4+IDQpXTtcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjWygodWludDhbaSAtIDFdICYgMHgwZikgPDwgMikgfCAodWludDhbaV0gPj4gNildO1xuICAgIHJlc3VsdCArPSBiYXNlNjRhYmNbdWludDhbaV0gJiAweDNmXTtcbiAgfVxuICBpZiAoaSA9PT0gbCArIDEpIHtcbiAgICAvLyAxIG9jdGV0IHlldCB0byB3cml0ZVxuICAgIHJlc3VsdCArPSBiYXNlNjRhYmNbdWludDhbaSAtIDJdID4+IDJdO1xuICAgIHJlc3VsdCArPSBiYXNlNjRhYmNbKHVpbnQ4W2kgLSAyXSAmIDB4MDMpIDw8IDRdO1xuICAgIHJlc3VsdCArPSBcIj09XCI7XG4gIH1cbiAgaWYgKGkgPT09IGwpIHtcbiAgICAvLyAyIG9jdGV0cyB5ZXQgdG8gd3JpdGVcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjW3VpbnQ4W2kgLSAyXSA+PiAyXTtcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjWygodWludDhbaSAtIDJdICYgMHgwMykgPDwgNCkgfCAodWludDhbaSAtIDFdID4+IDQpXTtcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjWyh1aW50OFtpIC0gMV0gJiAweDBmKSA8PCAyXTtcbiAgICByZXN1bHQgKz0gXCI9XCI7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIGEgZ2l2ZW4gUkZDNDY0OCBiYXNlNjQgZW5jb2RlZCBzdHJpbmdcbiAqIEBwYXJhbSBiNjRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZShiNjQ6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICBjb25zdCBiaW5TdHJpbmcgPSBhdG9iKGI2NCk7XG4gIGNvbnN0IHNpemUgPSBiaW5TdHJpbmcubGVuZ3RoO1xuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgIGJ5dGVzW2ldID0gYmluU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbi8qKlxuICoge0BsaW5rY29kZSBlbmNvZGV9IGFuZCB7QGxpbmtjb2RlIGRlY29kZX0gZm9yXG4gKiBbYmFzZTY0IFVSTCBzYWZlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9ucykgZW5jb2RpbmcuXG4gKlxuICogVGhpcyBtb2R1bGUgaXMgYnJvd3NlciBjb21wYXRpYmxlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgKiBhcyBiYXNlNjQgZnJvbSBcIi4vYmFzZTY0LnRzXCI7XG5cbi8qXG4gKiBTb21lIHZhcmlhbnRzIGFsbG93IG9yIHJlcXVpcmUgb21pdHRpbmcgdGhlIHBhZGRpbmcgJz0nIHNpZ25zOlxuICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1RoZV9VUkxfYXBwbGljYXRpb25zXG4gKiBAcGFyYW0gYmFzZTY0dXJsXG4gKi9cbmZ1bmN0aW9uIGFkZFBhZGRpbmdUb0Jhc2U2NHVybChiYXNlNjR1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChiYXNlNjR1cmwubGVuZ3RoICUgNCA9PT0gMikgcmV0dXJuIGJhc2U2NHVybCArIFwiPT1cIjtcbiAgaWYgKGJhc2U2NHVybC5sZW5ndGggJSA0ID09PSAzKSByZXR1cm4gYmFzZTY0dXJsICsgXCI9XCI7XG4gIGlmIChiYXNlNjR1cmwubGVuZ3RoICUgNCA9PT0gMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbGxlZ2FsIGJhc2U2NHVybCBzdHJpbmchXCIpO1xuICB9XG4gIHJldHVybiBiYXNlNjR1cmw7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRCYXNlNjR1cmxUb0Jhc2U2NChiNjR1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghL15bLV9BLVowLTldKj89ezAsMn0kL2kudGVzdChiNjR1cmwpKSB7XG4gICAgLy8gQ29udGFpbnMgY2hhcmFjdGVycyBub3QgcGFydCBvZiBiYXNlNjR1cmwgc3BlYy5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGRlY29kZSBiYXNlNjR1cmw6IGludmFsaWQgY2hhcmFjdGVyXCIpO1xuICB9XG4gIHJldHVybiBhZGRQYWRkaW5nVG9CYXNlNjR1cmwoYjY0dXJsKS5yZXBsYWNlKC9cXC0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0QmFzZTY0VG9CYXNlNjR1cmwoYjY0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYjY0LnJlcGxhY2UoLz0vZywgXCJcIikucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpO1xufVxuXG4vKipcbiAqIEVuY29kZXMgYSBnaXZlbiBBcnJheUJ1ZmZlciBvciBzdHJpbmcgaW50byBhIGJhc2U2NHVybCByZXByZXNlbnRhdGlvblxuICogQHBhcmFtIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZShkYXRhOiBBcnJheUJ1ZmZlciB8IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb252ZXJ0QmFzZTY0VG9CYXNlNjR1cmwoYmFzZTY0LmVuY29kZShkYXRhKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gYmFzZTY0dXJsIGVuY29kZWQgZGF0YSBiYWNrIHRvIG9yaWdpbmFsXG4gKiBAcGFyYW0gYjY0dXJsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUoYjY0dXJsOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIGJhc2U2NC5kZWNvZGUoY29udmVydEJhc2U2NHVybFRvQmFzZTY0KGI2NHVybCkpO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgKiBhcyBiYXNlNjQgZnJvbSBcIi4uLy4uL2VuY29kaW5nL2Jhc2U2NC50c1wiO1xuaW1wb3J0ICogYXMgYmFzZTY0dXJsIGZyb20gXCIuLi8uLi9lbmNvZGluZy9iYXNlNjR1cmwudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzY2lpVG9CeXRlcyhzdHI6IHN0cmluZykge1xuICBjb25zdCBieXRlQXJyYXkgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDI1NSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVBcnJheSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjRUb0J5dGVzKHN0cjogc3RyaW5nKSB7XG4gIHN0ciA9IGJhc2U2NGNsZWFuKHN0cik7XG4gIHN0ciA9IHN0ci5yZXBsYWNlQWxsKFwiLVwiLCBcIitcIikucmVwbGFjZUFsbChcIl9cIiwgXCIvXCIpO1xuICByZXR1cm4gYmFzZTY0LmRlY29kZShzdHIpO1xufVxuXG5jb25zdCBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2c7XG5mdW5jdGlvbiBiYXNlNjRjbGVhbihzdHI6IHN0cmluZykge1xuICAvLyBOb2RlIHRha2VzIGVxdWFsIHNpZ25zIGFzIGVuZCBvZiB0aGUgQmFzZTY0IGVuY29kaW5nXG4gIHN0ciA9IHN0ci5zcGxpdChcIj1cIilbMF07XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIHN0ZC9iYXNlNjQgZG9lcyBub3RcbiAgc3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCBcIlwiKTtcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiBcIlwiO1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBzdGQvYmFzZTY0IGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArIFwiPVwiO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjRVcmxUb0J5dGVzKHN0cjogc3RyaW5nKSB7XG4gIHN0ciA9IGJhc2U2NGNsZWFuKHN0cik7XG4gIHN0ciA9IHN0ci5yZXBsYWNlQWxsKFwiK1wiLCBcIi1cIikucmVwbGFjZUFsbChcIi9cIiwgXCJfXCIpO1xuICByZXR1cm4gYmFzZTY0dXJsLmRlY29kZShzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGV4VG9CeXRlcyhzdHI6IHN0cmluZykge1xuICBjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShNYXRoLmZsb29yKChzdHIgfHwgXCJcIikubGVuZ3RoIC8gMikpO1xuICBsZXQgaTtcbiAgZm9yIChpID0gMDsgaSA8IGJ5dGVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGEgPSBOdW1iZXIucGFyc2VJbnQoc3RyW2kgKiAyXSwgMTYpO1xuICAgIGNvbnN0IGIgPSBOdW1iZXIucGFyc2VJbnQoc3RyW2kgKiAyICsgMV0sIDE2KTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKGEpICYmIE51bWJlci5pc05hTihiKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGJ5dGVBcnJheVtpXSA9IChhIDw8IDQpIHwgYjtcbiAgfVxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoXG4gICAgaSA9PT0gYnl0ZUFycmF5Lmxlbmd0aCA/IGJ5dGVBcnJheSA6IGJ5dGVBcnJheS5zbGljZSgwLCBpKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzKHN0cjogc3RyaW5nLCB1bml0czogbnVtYmVyKSB7XG4gIGxldCBjLCBoaSwgbG87XG4gIGNvbnN0IGJ5dGVBcnJheSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIGhpID0gYyA+PiA4O1xuICAgIGxvID0gYyAlIDI1NjtcbiAgICBieXRlQXJyYXkucHVzaChsbyk7XG4gICAgYnl0ZUFycmF5LnB1c2goaGkpO1xuICB9XG4gIHJldHVybiBuZXcgVWludDhBcnJheShieXRlQXJyYXkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnl0ZXNUb0FzY2lpKGJ5dGVzOiBVaW50OEFycmF5KSB7XG4gIGxldCByZXQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gJiAxMjcpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBieXRlc1RvVXRmMTZsZShieXRlczogVWludDhBcnJheSkge1xuICBsZXQgcmVzID0gXCJcIjtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1Nik7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCBhbmQgTm9kZSBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEZlcm9zcyBBYm91a2hhZGlqZWgsIGFuZCBvdGhlciBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBjb2RlcyB9IGZyb20gXCIuL2Vycm9yX2NvZGVzLnRzXCI7XG5pbXBvcnQgeyBlbmNvZGluZ3MgfSBmcm9tIFwiLi4vaW50ZXJuYWxfYmluZGluZy9zdHJpbmdfZGVjb2Rlci50c1wiO1xuaW1wb3J0IHsgaW5kZXhPZkJ1ZmZlciB9IGZyb20gXCIuLi9pbnRlcm5hbF9iaW5kaW5nL2J1ZmZlci50c1wiO1xuaW1wb3J0IHtcbiAgYXNjaWlUb0J5dGVzLFxuICBiYXNlNjRUb0J5dGVzLFxuICBiYXNlNjRVcmxUb0J5dGVzLFxuICBoZXhUb0J5dGVzLFxuICB1dGYxNmxlVG9CeXRlcyxcbn0gZnJvbSBcIi4uL2ludGVybmFsX2JpbmRpbmcvX3V0aWxzLnRzXCI7XG5cbmNvbnN0IHV0ZjhFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5cbi8vIFRlbXBvcmFyeSBidWZmZXJzIHRvIGNvbnZlcnQgbnVtYmVycy5cbmNvbnN0IGZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG5jb25zdCB1SW50OEZsb2F0MzJBcnJheSA9IG5ldyBVaW50OEFycmF5KGZsb2F0MzJBcnJheS5idWZmZXIpO1xuY29uc3QgZmxvYXQ2NEFycmF5ID0gbmV3IEZsb2F0NjRBcnJheSgxKTtcbmNvbnN0IHVJbnQ4RmxvYXQ2NEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoZmxvYXQ2NEFycmF5LmJ1ZmZlcik7XG5cbi8vIENoZWNrIGVuZGlhbm5lc3MuXG5mbG9hdDMyQXJyYXlbMF0gPSAtMTsgLy8gMHhCRjgwMDAwMFxuLy8gRWl0aGVyIGl0IGlzIFswLCAwLCAxMjgsIDE5MV0gb3IgWzE5MSwgMTI4LCAwLCAwXS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvXG4vLyBjaGVjayB0aGlzIHdpdGggYG9zLmVuZGlhbm5lc3MoKWAgYmVjYXVzZSB0aGF0IGlzIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lLlxuZXhwb3J0IGNvbnN0IGJpZ0VuZGlhbiA9IHVJbnQ4RmxvYXQzMkFycmF5WzNdID09PSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVJbnQ0OExFKGJ1Ziwgb2Zmc2V0ID0gMCkge1xuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsIFwib2Zmc2V0XCIpO1xuICBjb25zdCBmaXJzdCA9IGJ1ZltvZmZzZXRdO1xuICBjb25zdCBsYXN0ID0gYnVmW29mZnNldCArIDVdO1xuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSA2KTtcbiAgfVxuXG4gIHJldHVybiBmaXJzdCArXG4gICAgYnVmWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgYnVmWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIGJ1ZlsrK29mZnNldF0gKiAyICoqIDI0ICtcbiAgICAoYnVmWysrb2Zmc2V0XSArIGxhc3QgKiAyICoqIDgpICogMiAqKiAzMjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRVSW50NDBMRShidWYsIG9mZnNldCA9IDApIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgY29uc3QgZmlyc3QgPSBidWZbb2Zmc2V0XTtcbiAgY29uc3QgbGFzdCA9IGJ1ZltvZmZzZXQgKyA0XTtcbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gNSk7XG4gIH1cblxuICByZXR1cm4gZmlyc3QgK1xuICAgIGJ1ZlsrK29mZnNldF0gKiAyICoqIDggK1xuICAgIGJ1ZlsrK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICBidWZbKytvZmZzZXRdICogMiAqKiAyNCArXG4gICAgbGFzdCAqIDIgKiogMzI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVUludDI0TEUoYnVmLCBvZmZzZXQgPSAwKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGNvbnN0IGZpcnN0ID0gYnVmW29mZnNldF07XG4gIGNvbnN0IGxhc3QgPSBidWZbb2Zmc2V0ICsgMl07XG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDMpO1xuICB9XG5cbiAgcmV0dXJuIGZpcnN0ICsgYnVmWysrb2Zmc2V0XSAqIDIgKiogOCArIGxhc3QgKiAyICoqIDE2O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVJbnQ0OEJFKGJ1Ziwgb2Zmc2V0ID0gMCkge1xuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsIFwib2Zmc2V0XCIpO1xuICBjb25zdCBmaXJzdCA9IGJ1ZltvZmZzZXRdO1xuICBjb25zdCBsYXN0ID0gYnVmW29mZnNldCArIDVdO1xuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSA2KTtcbiAgfVxuXG4gIHJldHVybiAoZmlyc3QgKiAyICoqIDggKyBidWZbKytvZmZzZXRdKSAqIDIgKiogMzIgK1xuICAgIGJ1ZlsrK29mZnNldF0gKiAyICoqIDI0ICtcbiAgICBidWZbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgYnVmWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgbGFzdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRVSW50NDBCRShidWYsIG9mZnNldCA9IDApIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgY29uc3QgZmlyc3QgPSBidWZbb2Zmc2V0XTtcbiAgY29uc3QgbGFzdCA9IGJ1ZltvZmZzZXQgKyA0XTtcbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gNSk7XG4gIH1cblxuICByZXR1cm4gZmlyc3QgKiAyICoqIDMyICtcbiAgICBidWZbKytvZmZzZXRdICogMiAqKiAyNCArXG4gICAgYnVmWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIGJ1ZlsrK29mZnNldF0gKiAyICoqIDggK1xuICAgIGxhc3Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVUludDI0QkUoYnVmLCBvZmZzZXQgPSAwKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGNvbnN0IGZpcnN0ID0gYnVmW29mZnNldF07XG4gIGNvbnN0IGxhc3QgPSBidWZbb2Zmc2V0ICsgMl07XG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDMpO1xuICB9XG5cbiAgcmV0dXJuIGZpcnN0ICogMiAqKiAxNiArIGJ1ZlsrK29mZnNldF0gKiAyICoqIDggKyBsYXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVJbnQxNkJFKG9mZnNldCA9IDApIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07XG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDFdO1xuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gMik7XG4gIH1cblxuICByZXR1cm4gZmlyc3QgKiAyICoqIDggKyBsYXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVJbnQzMkJFKG9mZnNldCA9IDApIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07XG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDNdO1xuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gNCk7XG4gIH1cblxuICByZXR1cm4gZmlyc3QgKiAyICoqIDI0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICBsYXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZERvdWJsZUJhY2t3YXJkcyhidWZmZXIsIG9mZnNldCA9IDApIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgY29uc3QgZmlyc3QgPSBidWZmZXJbb2Zmc2V0XTtcbiAgY29uc3QgbGFzdCA9IGJ1ZmZlcltvZmZzZXQgKyA3XTtcbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWZmZXIubGVuZ3RoIC0gOCk7XG4gIH1cblxuICB1SW50OEZsb2F0NjRBcnJheVs3XSA9IGZpcnN0O1xuICB1SW50OEZsb2F0NjRBcnJheVs2XSA9IGJ1ZmZlclsrK29mZnNldF07XG4gIHVJbnQ4RmxvYXQ2NEFycmF5WzVdID0gYnVmZmVyWysrb2Zmc2V0XTtcbiAgdUludDhGbG9hdDY0QXJyYXlbNF0gPSBidWZmZXJbKytvZmZzZXRdO1xuICB1SW50OEZsb2F0NjRBcnJheVszXSA9IGJ1ZmZlclsrK29mZnNldF07XG4gIHVJbnQ4RmxvYXQ2NEFycmF5WzJdID0gYnVmZmVyWysrb2Zmc2V0XTtcbiAgdUludDhGbG9hdDY0QXJyYXlbMV0gPSBidWZmZXJbKytvZmZzZXRdO1xuICB1SW50OEZsb2F0NjRBcnJheVswXSA9IGxhc3Q7XG4gIHJldHVybiBmbG9hdDY0QXJyYXlbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRG91YmxlRm9yd2FyZHMoYnVmZmVyLCBvZmZzZXQgPSAwKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGNvbnN0IGZpcnN0ID0gYnVmZmVyW29mZnNldF07XG4gIGNvbnN0IGxhc3QgPSBidWZmZXJbb2Zmc2V0ICsgN107XG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmZmVyLmxlbmd0aCAtIDgpO1xuICB9XG5cbiAgdUludDhGbG9hdDY0QXJyYXlbMF0gPSBmaXJzdDtcbiAgdUludDhGbG9hdDY0QXJyYXlbMV0gPSBidWZmZXJbKytvZmZzZXRdO1xuICB1SW50OEZsb2F0NjRBcnJheVsyXSA9IGJ1ZmZlclsrK29mZnNldF07XG4gIHVJbnQ4RmxvYXQ2NEFycmF5WzNdID0gYnVmZmVyWysrb2Zmc2V0XTtcbiAgdUludDhGbG9hdDY0QXJyYXlbNF0gPSBidWZmZXJbKytvZmZzZXRdO1xuICB1SW50OEZsb2F0NjRBcnJheVs1XSA9IGJ1ZmZlclsrK29mZnNldF07XG4gIHVJbnQ4RmxvYXQ2NEFycmF5WzZdID0gYnVmZmVyWysrb2Zmc2V0XTtcbiAgdUludDhGbG9hdDY0QXJyYXlbN10gPSBsYXN0O1xuICByZXR1cm4gZmxvYXQ2NEFycmF5WzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEb3VibGVGb3J3YXJkcyhidWZmZXIsIHZhbCwgb2Zmc2V0ID0gMCkge1xuICB2YWwgPSArdmFsO1xuICBjaGVja0JvdW5kcyhidWZmZXIsIG9mZnNldCwgNyk7XG5cbiAgZmxvYXQ2NEFycmF5WzBdID0gdmFsO1xuICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbMF07XG4gIGJ1ZmZlcltvZmZzZXQrK10gPSB1SW50OEZsb2F0NjRBcnJheVsxXTtcbiAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzJdO1xuICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbM107XG4gIGJ1ZmZlcltvZmZzZXQrK10gPSB1SW50OEZsb2F0NjRBcnJheVs0XTtcbiAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzVdO1xuICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbNl07XG4gIGJ1ZmZlcltvZmZzZXQrK10gPSB1SW50OEZsb2F0NjRBcnJheVs3XTtcbiAgcmV0dXJuIG9mZnNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRG91YmxlQmFja3dhcmRzKGJ1ZmZlciwgdmFsLCBvZmZzZXQgPSAwKSB7XG4gIHZhbCA9ICt2YWw7XG4gIGNoZWNrQm91bmRzKGJ1ZmZlciwgb2Zmc2V0LCA3KTtcblxuICBmbG9hdDY0QXJyYXlbMF0gPSB2YWw7XG4gIGJ1ZmZlcltvZmZzZXQrK10gPSB1SW50OEZsb2F0NjRBcnJheVs3XTtcbiAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzZdO1xuICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbNV07XG4gIGJ1ZmZlcltvZmZzZXQrK10gPSB1SW50OEZsb2F0NjRBcnJheVs0XTtcbiAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzNdO1xuICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDY0QXJyYXlbMl07XG4gIGJ1ZmZlcltvZmZzZXQrK10gPSB1SW50OEZsb2F0NjRBcnJheVsxXTtcbiAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQ2NEFycmF5WzBdO1xuICByZXR1cm4gb2Zmc2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZsb2F0QmFja3dhcmRzKGJ1ZmZlciwgb2Zmc2V0ID0gMCkge1xuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsIFwib2Zmc2V0XCIpO1xuICBjb25zdCBmaXJzdCA9IGJ1ZmZlcltvZmZzZXRdO1xuICBjb25zdCBsYXN0ID0gYnVmZmVyW29mZnNldCArIDNdO1xuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1ZmZlci5sZW5ndGggLSA0KTtcbiAgfVxuXG4gIHVJbnQ4RmxvYXQzMkFycmF5WzNdID0gZmlyc3Q7XG4gIHVJbnQ4RmxvYXQzMkFycmF5WzJdID0gYnVmZmVyWysrb2Zmc2V0XTtcbiAgdUludDhGbG9hdDMyQXJyYXlbMV0gPSBidWZmZXJbKytvZmZzZXRdO1xuICB1SW50OEZsb2F0MzJBcnJheVswXSA9IGxhc3Q7XG4gIHJldHVybiBmbG9hdDMyQXJyYXlbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRmxvYXRGb3J3YXJkcyhidWZmZXIsIG9mZnNldCA9IDApIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgY29uc3QgZmlyc3QgPSBidWZmZXJbb2Zmc2V0XTtcbiAgY29uc3QgbGFzdCA9IGJ1ZmZlcltvZmZzZXQgKyAzXTtcbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWZmZXIubGVuZ3RoIC0gNCk7XG4gIH1cblxuICB1SW50OEZsb2F0MzJBcnJheVswXSA9IGZpcnN0O1xuICB1SW50OEZsb2F0MzJBcnJheVsxXSA9IGJ1ZmZlclsrK29mZnNldF07XG4gIHVJbnQ4RmxvYXQzMkFycmF5WzJdID0gYnVmZmVyWysrb2Zmc2V0XTtcbiAgdUludDhGbG9hdDMyQXJyYXlbM10gPSBsYXN0O1xuICByZXR1cm4gZmxvYXQzMkFycmF5WzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVGbG9hdEZvcndhcmRzKGJ1ZmZlciwgdmFsLCBvZmZzZXQgPSAwKSB7XG4gIHZhbCA9ICt2YWw7XG4gIGNoZWNrQm91bmRzKGJ1ZmZlciwgb2Zmc2V0LCAzKTtcblxuICBmbG9hdDMyQXJyYXlbMF0gPSB2YWw7XG4gIGJ1ZmZlcltvZmZzZXQrK10gPSB1SW50OEZsb2F0MzJBcnJheVswXTtcbiAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQzMkFycmF5WzFdO1xuICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDMyQXJyYXlbMl07XG4gIGJ1ZmZlcltvZmZzZXQrK10gPSB1SW50OEZsb2F0MzJBcnJheVszXTtcbiAgcmV0dXJuIG9mZnNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRmxvYXRCYWNrd2FyZHMoYnVmZmVyLCB2YWwsIG9mZnNldCA9IDApIHtcbiAgdmFsID0gK3ZhbDtcbiAgY2hlY2tCb3VuZHMoYnVmZmVyLCBvZmZzZXQsIDMpO1xuXG4gIGZsb2F0MzJBcnJheVswXSA9IHZhbDtcbiAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQzMkFycmF5WzNdO1xuICBidWZmZXJbb2Zmc2V0KytdID0gdUludDhGbG9hdDMyQXJyYXlbMl07XG4gIGJ1ZmZlcltvZmZzZXQrK10gPSB1SW50OEZsb2F0MzJBcnJheVsxXTtcbiAgYnVmZmVyW29mZnNldCsrXSA9IHVJbnQ4RmxvYXQzMkFycmF5WzBdO1xuICByZXR1cm4gb2Zmc2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEludDI0TEUoYnVmLCBvZmZzZXQgPSAwKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGNvbnN0IGZpcnN0ID0gYnVmW29mZnNldF07XG4gIGNvbnN0IGxhc3QgPSBidWZbb2Zmc2V0ICsgMl07XG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDMpO1xuICB9XG5cbiAgY29uc3QgdmFsID0gZmlyc3QgKyBidWZbKytvZmZzZXRdICogMiAqKiA4ICsgbGFzdCAqIDIgKiogMTY7XG4gIHJldHVybiB2YWwgfCAodmFsICYgMiAqKiAyMykgKiAweDFmZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRJbnQ0MExFKGJ1Ziwgb2Zmc2V0ID0gMCkge1xuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsIFwib2Zmc2V0XCIpO1xuICBjb25zdCBmaXJzdCA9IGJ1ZltvZmZzZXRdO1xuICBjb25zdCBsYXN0ID0gYnVmW29mZnNldCArIDRdO1xuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSA1KTtcbiAgfVxuXG4gIHJldHVybiAobGFzdCB8IChsYXN0ICYgMiAqKiA3KSAqIDB4MWZmZmZmZSkgKiAyICoqIDMyICtcbiAgICBmaXJzdCArXG4gICAgYnVmWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgYnVmWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIGJ1ZlsrK29mZnNldF0gKiAyICoqIDI0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEludDQ4TEUoYnVmLCBvZmZzZXQgPSAwKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGNvbnN0IGZpcnN0ID0gYnVmW29mZnNldF07XG4gIGNvbnN0IGxhc3QgPSBidWZbb2Zmc2V0ICsgNV07XG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDYpO1xuICB9XG5cbiAgY29uc3QgdmFsID0gYnVmW29mZnNldCArIDRdICsgbGFzdCAqIDIgKiogODtcbiAgcmV0dXJuICh2YWwgfCAodmFsICYgMiAqKiAxNSkgKiAweDFmZmZlKSAqIDIgKiogMzIgK1xuICAgIGZpcnN0ICtcbiAgICBidWZbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICBidWZbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgYnVmWysrb2Zmc2V0XSAqIDIgKiogMjQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkSW50MjRCRShidWYsIG9mZnNldCA9IDApIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgY29uc3QgZmlyc3QgPSBidWZbb2Zmc2V0XTtcbiAgY29uc3QgbGFzdCA9IGJ1ZltvZmZzZXQgKyAyXTtcbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gMyk7XG4gIH1cblxuICBjb25zdCB2YWwgPSBmaXJzdCAqIDIgKiogMTYgKyBidWZbKytvZmZzZXRdICogMiAqKiA4ICsgbGFzdDtcbiAgcmV0dXJuIHZhbCB8ICh2YWwgJiAyICoqIDIzKSAqIDB4MWZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEludDQ4QkUoYnVmLCBvZmZzZXQgPSAwKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGNvbnN0IGZpcnN0ID0gYnVmW29mZnNldF07XG4gIGNvbnN0IGxhc3QgPSBidWZbb2Zmc2V0ICsgNV07XG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDYpO1xuICB9XG5cbiAgY29uc3QgdmFsID0gYnVmWysrb2Zmc2V0XSArIGZpcnN0ICogMiAqKiA4O1xuICByZXR1cm4gKHZhbCB8ICh2YWwgJiAyICoqIDE1KSAqIDB4MWZmZmUpICogMiAqKiAzMiArXG4gICAgYnVmWysrb2Zmc2V0XSAqIDIgKiogMjQgK1xuICAgIGJ1ZlsrK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICBidWZbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICBsYXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEludDQwQkUoYnVmLCBvZmZzZXQgPSAwKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGNvbnN0IGZpcnN0ID0gYnVmW29mZnNldF07XG4gIGNvbnN0IGxhc3QgPSBidWZbb2Zmc2V0ICsgNF07XG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIDUpO1xuICB9XG5cbiAgcmV0dXJuIChmaXJzdCB8IChmaXJzdCAmIDIgKiogNykgKiAweDFmZmZmZmUpICogMiAqKiAzMiArXG4gICAgYnVmWysrb2Zmc2V0XSAqIDIgKiogMjQgK1xuICAgIGJ1ZlsrK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICBidWZbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICBsYXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnl0ZUxlbmd0aFV0Zjgoc3RyKSB7XG4gIHJldHVybiB1dGY4RW5jb2Rlci5lbmNvZGUoc3RyKS5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEJ5dGVMZW5ndGgoc3RyLCBieXRlcykge1xuICAvLyBIYW5kbGUgcGFkZGluZ1xuICBpZiAoc3RyLmNoYXJDb2RlQXQoYnl0ZXMgLSAxKSA9PT0gMHgzRCkge1xuICAgIGJ5dGVzLS07XG4gIH1cbiAgaWYgKGJ5dGVzID4gMSAmJiBzdHIuY2hhckNvZGVBdChieXRlcyAtIDEpID09PSAweDNEKSB7XG4gICAgYnl0ZXMtLTtcbiAgfVxuXG4gIC8vIEJhc2U2NCByYXRpbzogMy80XG4gIHJldHVybiAoYnl0ZXMgKiAzKSA+Pj4gMjtcbn1cblxuZXhwb3J0IGNvbnN0IGVuY29kaW5nc01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5mb3IgKGxldCBpID0gMDsgaSA8IGVuY29kaW5ncy5sZW5ndGg7ICsraSkge1xuICBlbmNvZGluZ3NNYXBbZW5jb2RpbmdzW2ldXSA9IGk7XG59XG5cbmV4cG9ydCBjb25zdCBlbmNvZGluZ09wcyA9IHtcbiAgYXNjaWk6IHtcbiAgICBieXRlTGVuZ3RoOiAoc3RyaW5nKSA9PiBzdHJpbmcubGVuZ3RoLFxuICAgIGVuY29kaW5nOiBcImFzY2lpXCIsXG4gICAgZW5jb2RpbmdWYWw6IGVuY29kaW5nc01hcC5hc2NpaSxcbiAgICBpbmRleE9mOiAoYnVmLCB2YWwsIGJ5dGVPZmZzZXQsIGRpcikgPT5cbiAgICAgIGluZGV4T2ZCdWZmZXIoXG4gICAgICAgIGJ1ZixcbiAgICAgICAgYXNjaWlUb0J5dGVzKHZhbCksXG4gICAgICAgIGJ5dGVPZmZzZXQsXG4gICAgICAgIGVuY29kaW5nc01hcC5hc2NpaSxcbiAgICAgICAgZGlyLFxuICAgICAgKSxcbiAgICBzbGljZTogKGJ1Ziwgc3RhcnQsIGVuZCkgPT4gYnVmLmFzY2lpU2xpY2Uoc3RhcnQsIGVuZCksXG4gICAgd3JpdGU6IChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW4pID0+IGJ1Zi5hc2NpaVdyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW4pLFxuICB9LFxuICBiYXNlNjQ6IHtcbiAgICBieXRlTGVuZ3RoOiAoc3RyaW5nKSA9PiBiYXNlNjRCeXRlTGVuZ3RoKHN0cmluZywgc3RyaW5nLmxlbmd0aCksXG4gICAgZW5jb2Rpbmc6IFwiYmFzZTY0XCIsXG4gICAgZW5jb2RpbmdWYWw6IGVuY29kaW5nc01hcC5iYXNlNjQsXG4gICAgaW5kZXhPZjogKGJ1ZiwgdmFsLCBieXRlT2Zmc2V0LCBkaXIpID0+XG4gICAgICBpbmRleE9mQnVmZmVyKFxuICAgICAgICBidWYsXG4gICAgICAgIGJhc2U2NFRvQnl0ZXModmFsKSxcbiAgICAgICAgYnl0ZU9mZnNldCxcbiAgICAgICAgZW5jb2RpbmdzTWFwLmJhc2U2NCxcbiAgICAgICAgZGlyLFxuICAgICAgKSxcbiAgICBzbGljZTogKGJ1Ziwgc3RhcnQsIGVuZCkgPT4gYnVmLmJhc2U2NFNsaWNlKHN0YXJ0LCBlbmQpLFxuICAgIHdyaXRlOiAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuKSA9PiBidWYuYmFzZTY0V3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbiksXG4gIH0sXG4gIGJhc2U2NHVybDoge1xuICAgIGJ5dGVMZW5ndGg6IChzdHJpbmcpID0+IGJhc2U2NEJ5dGVMZW5ndGgoc3RyaW5nLCBzdHJpbmcubGVuZ3RoKSxcbiAgICBlbmNvZGluZzogXCJiYXNlNjR1cmxcIixcbiAgICBlbmNvZGluZ1ZhbDogZW5jb2RpbmdzTWFwLmJhc2U2NHVybCxcbiAgICBpbmRleE9mOiAoYnVmLCB2YWwsIGJ5dGVPZmZzZXQsIGRpcikgPT5cbiAgICAgIGluZGV4T2ZCdWZmZXIoXG4gICAgICAgIGJ1ZixcbiAgICAgICAgYmFzZTY0VXJsVG9CeXRlcyh2YWwpLFxuICAgICAgICBieXRlT2Zmc2V0LFxuICAgICAgICBlbmNvZGluZ3NNYXAuYmFzZTY0dXJsLFxuICAgICAgICBkaXIsXG4gICAgICApLFxuICAgIHNsaWNlOiAoYnVmLCBzdGFydCwgZW5kKSA9PiBidWYuYmFzZTY0dXJsU2xpY2Uoc3RhcnQsIGVuZCksXG4gICAgd3JpdGU6IChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW4pID0+XG4gICAgICBidWYuYmFzZTY0dXJsV3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbiksXG4gIH0sXG4gIGhleDoge1xuICAgIGJ5dGVMZW5ndGg6IChzdHJpbmcpID0+IHN0cmluZy5sZW5ndGggPj4+IDEsXG4gICAgZW5jb2Rpbmc6IFwiaGV4XCIsXG4gICAgZW5jb2RpbmdWYWw6IGVuY29kaW5nc01hcC5oZXgsXG4gICAgaW5kZXhPZjogKGJ1ZiwgdmFsLCBieXRlT2Zmc2V0LCBkaXIpID0+XG4gICAgICBpbmRleE9mQnVmZmVyKFxuICAgICAgICBidWYsXG4gICAgICAgIGhleFRvQnl0ZXModmFsKSxcbiAgICAgICAgYnl0ZU9mZnNldCxcbiAgICAgICAgZW5jb2RpbmdzTWFwLmhleCxcbiAgICAgICAgZGlyLFxuICAgICAgKSxcbiAgICBzbGljZTogKGJ1Ziwgc3RhcnQsIGVuZCkgPT4gYnVmLmhleFNsaWNlKHN0YXJ0LCBlbmQpLFxuICAgIHdyaXRlOiAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuKSA9PiBidWYuaGV4V3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbiksXG4gIH0sXG4gIGxhdGluMToge1xuICAgIGJ5dGVMZW5ndGg6IChzdHJpbmcpID0+IHN0cmluZy5sZW5ndGgsXG4gICAgZW5jb2Rpbmc6IFwibGF0aW4xXCIsXG4gICAgZW5jb2RpbmdWYWw6IGVuY29kaW5nc01hcC5sYXRpbjEsXG4gICAgaW5kZXhPZjogKGJ1ZiwgdmFsLCBieXRlT2Zmc2V0LCBkaXIpID0+XG4gICAgICBpbmRleE9mQnVmZmVyKFxuICAgICAgICBidWYsXG4gICAgICAgIGFzY2lpVG9CeXRlcyh2YWwpLFxuICAgICAgICBieXRlT2Zmc2V0LFxuICAgICAgICBlbmNvZGluZ3NNYXAubGF0aW4xLFxuICAgICAgICBkaXIsXG4gICAgICApLFxuICAgIHNsaWNlOiAoYnVmLCBzdGFydCwgZW5kKSA9PiBidWYubGF0aW4xU2xpY2Uoc3RhcnQsIGVuZCksXG4gICAgd3JpdGU6IChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW4pID0+IGJ1Zi5sYXRpbjFXcml0ZShzdHJpbmcsIG9mZnNldCwgbGVuKSxcbiAgfSxcbiAgdWNzMjoge1xuICAgIGJ5dGVMZW5ndGg6IChzdHJpbmcpID0+IHN0cmluZy5sZW5ndGggKiAyLFxuICAgIGVuY29kaW5nOiBcInVjczJcIixcbiAgICBlbmNvZGluZ1ZhbDogZW5jb2RpbmdzTWFwLnV0ZjE2bGUsXG4gICAgaW5kZXhPZjogKGJ1ZiwgdmFsLCBieXRlT2Zmc2V0LCBkaXIpID0+XG4gICAgICBpbmRleE9mQnVmZmVyKFxuICAgICAgICBidWYsXG4gICAgICAgIHV0ZjE2bGVUb0J5dGVzKHZhbCksXG4gICAgICAgIGJ5dGVPZmZzZXQsXG4gICAgICAgIGVuY29kaW5nc01hcC51dGYxNmxlLFxuICAgICAgICBkaXIsXG4gICAgICApLFxuICAgIHNsaWNlOiAoYnVmLCBzdGFydCwgZW5kKSA9PiBidWYudWNzMlNsaWNlKHN0YXJ0LCBlbmQpLFxuICAgIHdyaXRlOiAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuKSA9PiBidWYudWNzMldyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW4pLFxuICB9LFxuICB1dGY4OiB7XG4gICAgYnl0ZUxlbmd0aDogYnl0ZUxlbmd0aFV0ZjgsXG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIGVuY29kaW5nVmFsOiBlbmNvZGluZ3NNYXAudXRmOCxcbiAgICBpbmRleE9mOiAoYnVmLCB2YWwsIGJ5dGVPZmZzZXQsIGRpcikgPT5cbiAgICAgIGluZGV4T2ZCdWZmZXIoXG4gICAgICAgIGJ1ZixcbiAgICAgICAgdXRmOEVuY29kZXIuZW5jb2RlKHZhbCksXG4gICAgICAgIGJ5dGVPZmZzZXQsXG4gICAgICAgIGVuY29kaW5nc01hcC51dGY4LFxuICAgICAgICBkaXIsXG4gICAgICApLFxuICAgIHNsaWNlOiAoYnVmLCBzdGFydCwgZW5kKSA9PiBidWYudXRmOFNsaWNlKHN0YXJ0LCBlbmQpLFxuICAgIHdyaXRlOiAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuKSA9PiBidWYudXRmOFdyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW4pLFxuICB9LFxuICB1dGYxNmxlOiB7XG4gICAgYnl0ZUxlbmd0aDogKHN0cmluZykgPT4gc3RyaW5nLmxlbmd0aCAqIDIsXG4gICAgZW5jb2Rpbmc6IFwidXRmMTZsZVwiLFxuICAgIGVuY29kaW5nVmFsOiBlbmNvZGluZ3NNYXAudXRmMTZsZSxcbiAgICBpbmRleE9mOiAoYnVmLCB2YWwsIGJ5dGVPZmZzZXQsIGRpcikgPT5cbiAgICAgIGluZGV4T2ZCdWZmZXIoXG4gICAgICAgIGJ1ZixcbiAgICAgICAgdXRmMTZsZVRvQnl0ZXModmFsKSxcbiAgICAgICAgYnl0ZU9mZnNldCxcbiAgICAgICAgZW5jb2RpbmdzTWFwLnV0ZjE2bGUsXG4gICAgICAgIGRpcixcbiAgICAgICksXG4gICAgc2xpY2U6IChidWYsIHN0YXJ0LCBlbmQpID0+IGJ1Zi51Y3MyU2xpY2Uoc3RhcnQsIGVuZCksXG4gICAgd3JpdGU6IChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW4pID0+IGJ1Zi51Y3MyV3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbiksXG4gIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5jb2RpbmdPcHMoZW5jb2RpbmcpIHtcbiAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCk7XG4gIHN3aXRjaCAoZW5jb2RpbmcubGVuZ3RoKSB7XG4gICAgY2FzZSA0OlxuICAgICAgaWYgKGVuY29kaW5nID09PSBcInV0ZjhcIikgcmV0dXJuIGVuY29kaW5nT3BzLnV0Zjg7XG4gICAgICBpZiAoZW5jb2RpbmcgPT09IFwidWNzMlwiKSByZXR1cm4gZW5jb2RpbmdPcHMudWNzMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgNTpcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJ1dGYtOFwiKSByZXR1cm4gZW5jb2RpbmdPcHMudXRmODtcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJhc2NpaVwiKSByZXR1cm4gZW5jb2RpbmdPcHMuYXNjaWk7XG4gICAgICBpZiAoZW5jb2RpbmcgPT09IFwidWNzLTJcIikgcmV0dXJuIGVuY29kaW5nT3BzLnVjczI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDc6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09IFwidXRmMTZsZVwiKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGluZ09wcy51dGYxNmxlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSA4OlxuICAgICAgaWYgKGVuY29kaW5nID09PSBcInV0Zi0xNmxlXCIpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kaW5nT3BzLnV0ZjE2bGU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWZhbGx0aHJvdWdoXG4gICAgY2FzZSA2OlxuICAgICAgaWYgKGVuY29kaW5nID09PSBcImxhdGluMVwiIHx8IGVuY29kaW5nID09PSBcImJpbmFyeVwiKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGluZ09wcy5sYXRpbjE7XG4gICAgICB9XG4gICAgICBpZiAoZW5jb2RpbmcgPT09IFwiYmFzZTY0XCIpIHJldHVybiBlbmNvZGluZ09wcy5iYXNlNjQ7XG4gICAgY2FzZSAzOlxuICAgICAgaWYgKGVuY29kaW5nID09PSBcImhleFwiKSB7XG4gICAgICAgIHJldHVybiBlbmNvZGluZ09wcy5oZXg7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIDk6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09IFwiYmFzZTY0dXJsXCIpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kaW5nT3BzLmJhc2U2NHVybDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfY29weUFjdHVhbChcbiAgc291cmNlLFxuICB0YXJnZXQsXG4gIHRhcmdldFN0YXJ0LFxuICBzb3VyY2VTdGFydCxcbiAgc291cmNlRW5kLFxuKSB7XG4gIGlmIChzb3VyY2VFbmQgLSBzb3VyY2VTdGFydCA+IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCkge1xuICAgIHNvdXJjZUVuZCA9IHNvdXJjZVN0YXJ0ICsgdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0O1xuICB9XG5cbiAgbGV0IG5iID0gc291cmNlRW5kIC0gc291cmNlU3RhcnQ7XG4gIGNvbnN0IHNvdXJjZUxlbiA9IHNvdXJjZS5sZW5ndGggLSBzb3VyY2VTdGFydDtcbiAgaWYgKG5iID4gc291cmNlTGVuKSB7XG4gICAgbmIgPSBzb3VyY2VMZW47XG4gIH1cblxuICBpZiAoc291cmNlU3RhcnQgIT09IDAgfHwgc291cmNlRW5kIDwgc291cmNlLmxlbmd0aCkge1xuICAgIHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KHNvdXJjZS5idWZmZXIsIHNvdXJjZS5ieXRlT2Zmc2V0ICsgc291cmNlU3RhcnQsIG5iKTtcbiAgfVxuXG4gIHRhcmdldC5zZXQoc291cmNlLCB0YXJnZXRTdGFydCk7XG5cbiAgcmV0dXJuIG5iO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYm91bmRzRXJyb3IodmFsdWUsIGxlbmd0aCwgdHlwZSkge1xuICBpZiAoTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7XG4gICAgdmFsaWRhdGVOdW1iZXIodmFsdWUsIHR5cGUpO1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgXCJvZmZzZXRcIiwgXCJhbiBpbnRlZ2VyXCIsIHZhbHVlKTtcbiAgfVxuXG4gIGlmIChsZW5ndGggPCAwKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUygpO1xuICB9XG5cbiAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UoXG4gICAgdHlwZSB8fCBcIm9mZnNldFwiLFxuICAgIGA+PSAke3R5cGUgPyAxIDogMH0gYW5kIDw9ICR7bGVuZ3RofWAsXG4gICAgdmFsdWUsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU51bWJlcih2YWx1ZSwgbmFtZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsIFwibnVtYmVyXCIsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsIFwib2Zmc2V0XCIpO1xuICBpZiAoYnVmW29mZnNldF0gPT09IHVuZGVmaW5lZCB8fCBidWZbb2Zmc2V0ICsgYnl0ZUxlbmd0aF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgYnVmLmxlbmd0aCAtIChieXRlTGVuZ3RoICsgMSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50KHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB7XG4gICAgY29uc3QgbiA9IHR5cGVvZiBtaW4gPT09IFwiYmlnaW50XCIgPyBcIm5cIiA6IFwiXCI7XG4gICAgbGV0IHJhbmdlO1xuICAgIGlmIChieXRlTGVuZ3RoID4gMykge1xuICAgICAgaWYgKG1pbiA9PT0gMCB8fCBtaW4gPT09IDBuKSB7XG4gICAgICAgIHJhbmdlID0gYD49IDAke259IGFuZCA8IDIke259ICoqICR7KGJ5dGVMZW5ndGggKyAxKSAqIDh9JHtufWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZSA9IGA+PSAtKDIke259ICoqICR7KGJ5dGVMZW5ndGggKyAxKSAqIDggLSAxfSR7bn0pIGFuZCBgICtcbiAgICAgICAgICBgPCAyJHtufSAqKiAkeyhieXRlTGVuZ3RoICsgMSkgKiA4IC0gMX0ke259YDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UgPSBgPj0gJHttaW59JHtufSBhbmQgPD0gJHttYXh9JHtufWA7XG4gICAgfVxuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKFwidmFsdWVcIiwgcmFuZ2UsIHZhbHVlKTtcbiAgfVxuICBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0ludGVnZXIobiwgZGVmYXVsdFZhbCkge1xuICBuID0gK247XG4gIGlmIChcbiAgICAhTnVtYmVyLmlzTmFOKG4pICYmXG4gICAgbiA+PSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiAmJlxuICAgIG4gPD0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgKSB7XG4gICAgcmV0dXJuICgobiAlIDEpID09PSAwID8gbiA6IE1hdGguZmxvb3IobikpO1xuICB9XG4gIHJldHVybiBkZWZhdWx0VmFsO1xufVxuXG4vLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVV9JbnQ4KGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKFwidmFsdWVcIiwgYD49ICR7bWlufSBhbmQgPD0gJHttYXh9YCwgdmFsdWUpO1xuICB9XG4gIGlmIChidWZbb2Zmc2V0XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBidWZbb2Zmc2V0XSA9IHZhbHVlO1xuICByZXR1cm4gb2Zmc2V0ICsgMTtcbn1cblxuLy8gZGVuby1saW50LWlnbm9yZSBjYW1lbGNhc2VcbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVfSW50MTZCRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICBjaGVja0ludCh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCAxKTtcblxuICBidWZbb2Zmc2V0KytdID0gdmFsdWUgPj4+IDg7XG4gIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIG9mZnNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF93cml0ZVVJbnQzMkxFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIGNoZWNrSW50KHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDMpO1xuXG4gIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgdmFsdWUgPSB2YWx1ZSA+Pj4gODtcbiAgYnVmW29mZnNldCsrXSA9IHZhbHVlO1xuICB2YWx1ZSA9IHZhbHVlID4+PiA4O1xuICBidWZbb2Zmc2V0KytdID0gdmFsdWU7XG4gIHZhbHVlID0gdmFsdWUgPj4+IDg7XG4gIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIG9mZnNldDtcbn1cblxuLy8gZGVuby1saW50LWlnbm9yZSBjYW1lbGNhc2VcbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVfSW50MTZMRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICBjaGVja0ludCh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCAxKTtcblxuICBidWZbb2Zmc2V0KytdID0gdmFsdWU7XG4gIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZSA+Pj4gODtcbiAgcmV0dXJuIG9mZnNldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF93cml0ZVVJbnQzMkJFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIGNoZWNrSW50KHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDMpO1xuXG4gIGJ1ZltvZmZzZXQgKyAzXSA9IHZhbHVlO1xuICB2YWx1ZSA9IHZhbHVlID4+PiA4O1xuICBidWZbb2Zmc2V0ICsgMl0gPSB2YWx1ZTtcbiAgdmFsdWUgPSB2YWx1ZSA+Pj4gODtcbiAgYnVmW29mZnNldCArIDFdID0gdmFsdWU7XG4gIHZhbHVlID0gdmFsdWUgPj4+IDg7XG4gIGJ1ZltvZmZzZXRdID0gdmFsdWU7XG4gIHJldHVybiBvZmZzZXQgKyA0O1xufVxuXG4vLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVV9JbnQ0OEJFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIGNoZWNrSW50KHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDUpO1xuXG4gIGNvbnN0IG5ld1ZhbCA9IE1hdGguZmxvb3IodmFsdWUgKiAyICoqIC0zMik7XG4gIGJ1ZltvZmZzZXQrK10gPSBuZXdWYWwgPj4+IDg7XG4gIGJ1ZltvZmZzZXQrK10gPSBuZXdWYWw7XG4gIGJ1ZltvZmZzZXQgKyAzXSA9IHZhbHVlO1xuICB2YWx1ZSA9IHZhbHVlID4+PiA4O1xuICBidWZbb2Zmc2V0ICsgMl0gPSB2YWx1ZTtcbiAgdmFsdWUgPSB2YWx1ZSA+Pj4gODtcbiAgYnVmW29mZnNldCArIDFdID0gdmFsdWU7XG4gIHZhbHVlID0gdmFsdWUgPj4+IDg7XG4gIGJ1ZltvZmZzZXRdID0gdmFsdWU7XG4gIHJldHVybiBvZmZzZXQgKyA0O1xufVxuXG4vLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVV9JbnQ0MEJFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIGNoZWNrSW50KHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDQpO1xuXG4gIGJ1ZltvZmZzZXQrK10gPSBNYXRoLmZsb29yKHZhbHVlICogMiAqKiAtMzIpO1xuICBidWZbb2Zmc2V0ICsgM10gPSB2YWx1ZTtcbiAgdmFsdWUgPSB2YWx1ZSA+Pj4gODtcbiAgYnVmW29mZnNldCArIDJdID0gdmFsdWU7XG4gIHZhbHVlID0gdmFsdWUgPj4+IDg7XG4gIGJ1ZltvZmZzZXQgKyAxXSA9IHZhbHVlO1xuICB2YWx1ZSA9IHZhbHVlID4+PiA4O1xuICBidWZbb2Zmc2V0XSA9IHZhbHVlO1xuICByZXR1cm4gb2Zmc2V0ICsgNDtcbn1cblxuLy8gZGVuby1saW50LWlnbm9yZSBjYW1lbGNhc2VcbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVfSW50MzJCRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICBjaGVja0ludCh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCAzKTtcblxuICBidWZbb2Zmc2V0ICsgM10gPSB2YWx1ZTtcbiAgdmFsdWUgPSB2YWx1ZSA+Pj4gODtcbiAgYnVmW29mZnNldCArIDJdID0gdmFsdWU7XG4gIHZhbHVlID0gdmFsdWUgPj4+IDg7XG4gIGJ1ZltvZmZzZXQgKyAxXSA9IHZhbHVlO1xuICB2YWx1ZSA9IHZhbHVlID4+PiA4O1xuICBidWZbb2Zmc2V0XSA9IHZhbHVlO1xuICByZXR1cm4gb2Zmc2V0ICsgNDtcbn1cblxuLy8gZGVuby1saW50LWlnbm9yZSBjYW1lbGNhc2VcbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVfSW50MjRCRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICBjaGVja0ludCh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCAyKTtcblxuICBidWZbb2Zmc2V0ICsgMl0gPSB2YWx1ZTtcbiAgdmFsdWUgPSB2YWx1ZSA+Pj4gODtcbiAgYnVmW29mZnNldCArIDFdID0gdmFsdWU7XG4gIHZhbHVlID0gdmFsdWUgPj4+IDg7XG4gIGJ1ZltvZmZzZXRdID0gdmFsdWU7XG4gIHJldHVybiBvZmZzZXQgKyAzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVPZmZzZXQoXG4gIHZhbHVlLFxuICBuYW1lLFxuICBtaW4gPSAwLFxuICBtYXggPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbikge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsIFwibnVtYmVyXCIsIHZhbHVlKTtcbiAgfVxuICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UobmFtZSwgXCJhbiBpbnRlZ2VyXCIsIHZhbHVlKTtcbiAgfVxuICBpZiAodmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRShuYW1lLCBgPj0gJHttaW59ICYmIDw9ICR7bWF4fWAsIHZhbHVlKTtcbiAgfVxufVxuXG4vLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVV9JbnQ0OExFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIGNoZWNrSW50KHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDUpO1xuXG4gIGNvbnN0IG5ld1ZhbCA9IE1hdGguZmxvb3IodmFsdWUgKiAyICoqIC0zMik7XG4gIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgdmFsdWUgPSB2YWx1ZSA+Pj4gODtcbiAgYnVmW29mZnNldCsrXSA9IHZhbHVlO1xuICB2YWx1ZSA9IHZhbHVlID4+PiA4O1xuICBidWZbb2Zmc2V0KytdID0gdmFsdWU7XG4gIHZhbHVlID0gdmFsdWUgPj4+IDg7XG4gIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgYnVmW29mZnNldCsrXSA9IG5ld1ZhbDtcbiAgYnVmW29mZnNldCsrXSA9IG5ld1ZhbCA+Pj4gODtcbiAgcmV0dXJuIG9mZnNldDtcbn1cblxuLy8gZGVuby1saW50LWlnbm9yZSBjYW1lbGNhc2VcbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVfSW50NDBMRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICBjaGVja0ludCh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA0KTtcblxuICBjb25zdCBuZXdWYWwgPSB2YWx1ZTtcbiAgYnVmW29mZnNldCsrXSA9IHZhbHVlO1xuICB2YWx1ZSA9IHZhbHVlID4+PiA4O1xuICBidWZbb2Zmc2V0KytdID0gdmFsdWU7XG4gIHZhbHVlID0gdmFsdWUgPj4+IDg7XG4gIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgdmFsdWUgPSB2YWx1ZSA+Pj4gODtcbiAgYnVmW29mZnNldCsrXSA9IHZhbHVlO1xuICBidWZbb2Zmc2V0KytdID0gTWF0aC5mbG9vcihuZXdWYWwgKiAyICoqIC0zMik7XG4gIHJldHVybiBvZmZzZXQ7XG59XG5cbi8vIGRlbm8tbGludC1pZ25vcmUgY2FtZWxjYXNlXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVVX0ludDMyTEUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkge1xuICB2YWx1ZSA9ICt2YWx1ZTtcbiAgY2hlY2tJbnQodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgMyk7XG5cbiAgYnVmW29mZnNldCsrXSA9IHZhbHVlO1xuICB2YWx1ZSA9IHZhbHVlID4+PiA4O1xuICBidWZbb2Zmc2V0KytdID0gdmFsdWU7XG4gIHZhbHVlID0gdmFsdWUgPj4+IDg7XG4gIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgdmFsdWUgPSB2YWx1ZSA+Pj4gODtcbiAgYnVmW29mZnNldCsrXSA9IHZhbHVlO1xuICByZXR1cm4gb2Zmc2V0O1xufVxuXG4vLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVV9JbnQyNExFKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgdmFsdWUgPSArdmFsdWU7XG4gIGNoZWNrSW50KHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDIpO1xuXG4gIGJ1ZltvZmZzZXQrK10gPSB2YWx1ZTtcbiAgdmFsdWUgPSB2YWx1ZSA+Pj4gODtcbiAgYnVmW29mZnNldCsrXSA9IHZhbHVlO1xuICB2YWx1ZSA9IHZhbHVlID4+PiA4O1xuICBidWZbb2Zmc2V0KytdID0gdmFsdWU7XG4gIHJldHVybiBvZmZzZXQ7XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIFRPRE8oU29yZW13YXIpXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIGhhcyBhbiB1bnJlbGlhYmxlIGluZGV4T2YgYW5kIGluY2x1ZGVzIGltcGxlbWVudGF0aW9uXG4vLyBJdCBhbHNvIGxhY2tzIHRoZSByZXNvbHZlT2JqZWN0VVJMLCB0cmFuc2NvZGUgYW5kIElOU1BFQ1RfTUFYX0JZVEVTIGV4cG9ydHNcblxuLy8gQ29weXJpZ2h0IEpveWVudCBhbmQgTm9kZSBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEZlcm9zcyBBYm91a2hhZGlqZWgsIGFuZCBvdGhlciBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBjb2RlcyB9IGZyb20gXCIuL2ludGVybmFsL2Vycm9yX2NvZGVzLnRzXCI7XG5pbXBvcnQgeyBpc0FueUFycmF5QnVmZmVyLCBpc0FycmF5QnVmZmVyVmlldyB9IGZyb20gXCIuL2ludGVybmFsL3V0aWwvdHlwZXMudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUVuY29kaW5nIH0gZnJvbSBcIi4vaW50ZXJuYWwvdXRpbC5tanNcIjtcbmltcG9ydCB7XG4gIF9jb3B5QWN0dWFsLFxuICBfd3JpdGVVSW50MzJCRSxcbiAgX3dyaXRlVUludDMyTEUsXG4gIGJpZ0VuZGlhbixcbiAgYm91bmRzRXJyb3IsXG4gIGJ5dGVMZW5ndGhVdGY4LFxuICBlbmNvZGluZ09wcyxcbiAgZW5jb2RpbmdzTWFwLFxuICBnZXRFbmNvZGluZ09wcyxcbiAgcmVhZERvdWJsZUJhY2t3YXJkcyxcbiAgcmVhZERvdWJsZUZvcndhcmRzLFxuICByZWFkRmxvYXRCYWNrd2FyZHMsXG4gIHJlYWRGbG9hdEZvcndhcmRzLFxuICByZWFkSW50MjRCRSxcbiAgcmVhZEludDI0TEUsXG4gIHJlYWRJbnQ0MEJFLFxuICByZWFkSW50NDBMRSxcbiAgcmVhZEludDQ4QkUsXG4gIHJlYWRJbnQ0OExFLFxuICByZWFkVUludDE2QkUsXG4gIHJlYWRVSW50MjRCRSxcbiAgcmVhZFVJbnQyNExFLFxuICByZWFkVUludDMyQkUsXG4gIHJlYWRVSW50NDBCRSxcbiAgcmVhZFVJbnQ0MExFLFxuICByZWFkVUludDQ4QkUsXG4gIHJlYWRVSW50NDhMRSxcbiAgdG9JbnRlZ2VyLFxuICB2YWxpZGF0ZU51bWJlcixcbiAgdmFsaWRhdGVPZmZzZXQsXG4gIHdyaXRlRG91YmxlQmFja3dhcmRzLFxuICB3cml0ZURvdWJsZUZvcndhcmRzLFxuICB3cml0ZUZsb2F0QmFja3dhcmRzLFxuICB3cml0ZUZsb2F0Rm9yd2FyZHMsXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgY2FtZWxjYXNlXG4gIHdyaXRlVV9JbnQxNkJFLFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuICB3cml0ZVVfSW50MTZMRSxcbiAgLy8gZGVuby1saW50LWlnbm9yZSBjYW1lbGNhc2VcbiAgd3JpdGVVX0ludDI0QkUsXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgY2FtZWxjYXNlXG4gIHdyaXRlVV9JbnQyNExFLFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuICB3cml0ZVVfSW50MzJCRSxcbiAgLy8gZGVuby1saW50LWlnbm9yZSBjYW1lbGNhc2VcbiAgd3JpdGVVX0ludDMyTEUsXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgY2FtZWxjYXNlXG4gIHdyaXRlVV9JbnQ0MEJFLFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuICB3cml0ZVVfSW50NDBMRSxcbiAgLy8gZGVuby1saW50LWlnbm9yZSBjYW1lbGNhc2VcbiAgd3JpdGVVX0ludDQ4QkUsXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgY2FtZWxjYXNlXG4gIHdyaXRlVV9JbnQ0OExFLFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIGNhbWVsY2FzZVxuICB3cml0ZVVfSW50OCxcbn0gZnJvbSBcIi4vaW50ZXJuYWwvYnVmZmVyLm1qc1wiO1xuaW1wb3J0IHtcbiAgYXNjaWlUb0J5dGVzLFxuICBiYXNlNjRUb0J5dGVzLFxuICBiYXNlNjRVcmxUb0J5dGVzLFxuICBieXRlc1RvQXNjaWksXG4gIGJ5dGVzVG9VdGYxNmxlLFxuICBoZXhUb0J5dGVzLFxuICB1dGYxNmxlVG9CeXRlcyxcbn0gZnJvbSBcIi4vaW50ZXJuYWxfYmluZGluZy9fdXRpbHMudHNcIjtcbmltcG9ydCB7IGluZGV4T2ZCdWZmZXIsIGluZGV4T2ZOdW1iZXIgfSBmcm9tIFwiLi9pbnRlcm5hbF9iaW5kaW5nL2J1ZmZlci50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVCdWZmZXIgfSBmcm9tIFwiLi9pbnRlcm5hbC92YWxpZGF0b3JzLm1qc1wiO1xuaW1wb3J0IHsgaXNVaW50OEFycmF5IH0gZnJvbSBcIi4vaW50ZXJuYWwvdXRpbC90eXBlcy50c1wiO1xuaW1wb3J0ICogYXMgYmFzZTY0IGZyb20gXCIuLi9lbmNvZGluZy9iYXNlNjQudHNcIjtcbmltcG9ydCAqIGFzIGJhc2U2NHVybCBmcm9tIFwiLi4vZW5jb2RpbmcvYmFzZTY0dXJsLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBrTWF4TGVuZ3RoID0gMjE0NzQ4MzY0NztcbmV4cG9ydCBjb25zdCBrU3RyaW5nTWF4TGVuZ3RoID0gNTM2ODcwODg4O1xuY29uc3QgTUFYX1VJTlQzMiA9IDIgKiogMzI7XG5cbmNvbnN0IGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbFtcImZvclwiXSA9PT0gXCJmdW5jdGlvblwiXG4gICAgPyBTeW1ib2xbXCJmb3JcIl0oXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKVxuICAgIDogbnVsbDtcblxuY29uc3QgSU5TUEVDVF9NQVhfQllURVMgPSA1MDtcblxuZXhwb3J0IGNvbnN0IGNvbnN0YW50cyA9IHtcbiAgTUFYX0xFTkdUSDoga01heExlbmd0aCxcbiAgTUFYX1NUUklOR19MRU5HVEg6IGtTdHJpbmdNYXhMZW5ndGgsXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgXCJwYXJlbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xuICB9LFxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCBcIm9mZnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSB7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0O1xuICB9LFxufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlcihsZW5ndGgpIHtcbiAgaWYgKGxlbmd0aCA+IGtNYXhMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgICdUaGUgdmFsdWUgXCInICsgbGVuZ3RoICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicsXG4gICAgKTtcbiAgfVxuICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKTtcbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJudW1iZXJcIikge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICBcInN0cmluZ1wiLFxuICAgICAgICBhcmcsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gX2FsbG9jVW5zYWZlKGFyZyk7XG4gIH1cbiAgcmV0dXJuIF9mcm9tKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTtcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MjtcblxuZnVuY3Rpb24gX2Zyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgIGlmIChpc0FueUFycmF5QnVmZmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKCk7XG4gICAgaWYgKFxuICAgICAgdmFsdWVPZiAhPSBudWxsICYmXG4gICAgICB2YWx1ZU9mICE9PSB2YWx1ZSAmJlxuICAgICAgKHR5cGVvZiB2YWx1ZU9mID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZU9mID09PSBcIm9iamVjdFwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIF9mcm9tKHZhbHVlT2YsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgYiA9IGZyb21PYmplY3QodmFsdWUpO1xuICAgIGlmIChiKSB7XG4gICAgICByZXR1cm4gYjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgcHJpbWl0aXZlID0gdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXShcInN0cmluZ1wiKTtcbiAgICAgIGlmICh0eXBlb2YgcHJpbWl0aXZlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBmcm9tU3RyaW5nKHByaW1pdGl2ZSwgZW5jb2RpbmdPck9mZnNldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgIFwiZmlyc3QgYXJndW1lbnRcIixcbiAgICBbXCJzdHJpbmdcIiwgXCJCdWZmZXJcIiwgXCJBcnJheUJ1ZmZlclwiLCBcIkFycmF5XCIsIFwiQXJyYXktbGlrZSBPYmplY3RcIl0sXG4gICAgdmFsdWUsXG4gICk7XG59XG5cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBfZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKTtcbn07XG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSk7XG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsIFVpbnQ4QXJyYXkpO1xuXG5mdW5jdGlvbiBhc3NlcnRTaXplKHNpemUpIHtcbiAgdmFsaWRhdGVOdW1iZXIoc2l6ZSwgXCJzaXplXCIpO1xuICBpZiAoIShzaXplID49IDAgJiYgc2l6ZSA8PSBrTWF4TGVuZ3RoKSkge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVkFMVUUuUmFuZ2VFcnJvcihcInNpemVcIiwgc2l6ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSk7XG5cbiAgY29uc3QgYnVmZmVyID0gY3JlYXRlQnVmZmVyKHNpemUpO1xuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICAgIFwiZW5jb2RpbmdcIixcbiAgICAgICAgXCJzdHJpbmdcIixcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYnVmZmVyLmZpbGwoZmlsbCwgZW5jb2RpbmcpO1xuICB9XG4gIHJldHVybiBidWZmZXI7XG59XG5cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBfYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpO1xufTtcblxuZnVuY3Rpb24gX2FsbG9jVW5zYWZlKHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKTtcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMCk7XG59XG5cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIGFsbG9jVW5zYWZlKHNpemUpIHtcbiAgcmV0dXJuIF9hbGxvY1Vuc2FmZShzaXplKTtcbn07XG5cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiBhbGxvY1Vuc2FmZVNsb3coc2l6ZSkge1xuICByZXR1cm4gX2FsbG9jVW5zYWZlKHNpemUpO1xufTtcblxuZnVuY3Rpb24gZnJvbVN0cmluZyhzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09IFwic3RyaW5nXCIgfHwgZW5jb2RpbmcgPT09IFwiXCIpIHtcbiAgICBlbmNvZGluZyA9IFwidXRmOFwiO1xuICB9XG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKTtcbiAgfVxuICBjb25zdCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMDtcbiAgbGV0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpO1xuICBjb25zdCBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZyk7XG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpO1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwO1xuICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGJ1ZltpXSA9IGFycmF5W2ldICYgMjU1O1xuICB9XG4gIHJldHVybiBidWY7XG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3Qob2JqKSB7XG4gIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQgfHwgaXNBbnlBcnJheUJ1ZmZlcihvYmouYnVmZmVyKSkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKTtcbiAgfVxuXG4gIGlmIChvYmoudHlwZSA9PT0gXCJCdWZmZXJcIiAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja2VkKGxlbmd0aCkge1xuICBpZiAobGVuZ3RoID49IGtNYXhMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcbiAgICAgIFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiICtcbiAgICAgICAga01heExlbmd0aC50b1N0cmluZygxNikgKyBcIiBieXRlc1wiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTbG93QnVmZmVyKGxlbmd0aCkge1xuICBhc3NlcnRTaXplKGxlbmd0aCk7XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aCk7XG59XG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihTbG93QnVmZmVyLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpO1xuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoU2xvd0J1ZmZlciwgVWludDhBcnJheSk7XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJiBiICE9PSBCdWZmZXIucHJvdG90eXBlO1xufTtcblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYSwgVWludDhBcnJheSkpIHtcbiAgICBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aCk7XG4gIH1cbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIHtcbiAgICBiID0gQnVmZmVyLmZyb20oYiwgYi5vZmZzZXQsIGIuYnl0ZUxlbmd0aCk7XG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScsXG4gICAgKTtcbiAgfVxuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGxldCB4ID0gYS5sZW5ndGg7XG4gIGxldCB5ID0gYi5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldO1xuICAgICAgeSA9IGJbaV07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHggPCB5KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmICh5IDwgeCkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nKGVuY29kaW5nKSB7XG4gIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09IFwic3RyaW5nXCIgJiYgZW5jb2RpbmcubGVuZ3RoICE9PSAwICYmXG4gICAgbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpICE9PSB1bmRlZmluZWQ7XG59O1xuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0KGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJsaXN0XCIsIFwiQXJyYXlcIiwgbGlzdCk7XG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICB9XG5cbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaXN0W2ldLmxlbmd0aCkge1xuICAgICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlT2Zmc2V0KGxlbmd0aCwgXCJsZW5ndGhcIik7XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKTtcbiAgbGV0IHBvcyA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ1ZiA9IGxpc3RbaV07XG4gICAgaWYgKCFpc1VpbnQ4QXJyYXkoYnVmKSkge1xuICAgICAgLy8gVE9ETyhCcmlkZ2VBUik6IFRoaXMgc2hvdWxkIG5vdCBiZSBvZiB0eXBlIEVSUl9JTlZBTElEX0FSR19UWVBFLlxuICAgICAgLy8gSW5zdGVhZCwgZmluZCB0aGUgcHJvcGVyIGVycm9yIGNvZGUgZm9yIHRoaXMuXG4gICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICAgIGBsaXN0WyR7aX1dYCxcbiAgICAgICAgW1wiQnVmZmVyXCIsIFwiVWludDhBcnJheVwiXSxcbiAgICAgICAgbGlzdFtpXSxcbiAgICAgICk7XG4gICAgfVxuICAgIHBvcyArPSBfY29weUFjdHVhbChidWYsIGJ1ZmZlciwgcG9zLCAwLCBidWYubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIE5vdGU6IGBsZW5ndGhgIGlzIGFsd2F5cyBlcXVhbCB0byBgYnVmZmVyLmxlbmd0aGAgYXQgdGhpcyBwb2ludFxuICBpZiAocG9zIDwgbGVuZ3RoKSB7XG4gICAgLy8gWmVyby1maWxsIHRoZSByZW1haW5pbmcgYnl0ZXMgaWYgdGhlIHNwZWNpZmllZCBgbGVuZ3RoYCB3YXMgbW9yZSB0aGFuXG4gICAgLy8gdGhlIGFjdHVhbCB0b3RhbCBsZW5ndGgsIGkuZS4gaWYgd2UgaGF2ZSBzb21lIHJlbWFpbmluZyBhbGxvY2F0ZWQgYnl0ZXNcbiAgICAvLyB0aGVyZSB3ZXJlIG5vdCBpbml0aWFsaXplZC5cbiAgICBidWZmZXIuZmlsbCgwLCBwb3MsIGxlbmd0aCk7XG4gIH1cblxuICByZXR1cm4gYnVmZmVyO1xufTtcblxuZnVuY3Rpb24gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGlzQXJyYXlCdWZmZXJWaWV3KHN0cmluZykgfHwgaXNBbnlBcnJheUJ1ZmZlcihzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgXCJzdHJpbmdcIixcbiAgICAgIFtcInN0cmluZ1wiLCBcIkJ1ZmZlclwiLCBcIkFycmF5QnVmZmVyXCJdLFxuICAgICAgc3RyaW5nLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBsZW4gPSBzdHJpbmcubGVuZ3RoO1xuICBjb25zdCBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKTtcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSB7XG4gICAgcmV0dXJuIChtdXN0TWF0Y2ggPyAtMSA6IGJ5dGVMZW5ndGhVdGY4KHN0cmluZykpO1xuICB9XG5cbiAgY29uc3Qgb3BzID0gZ2V0RW5jb2RpbmdPcHMoZW5jb2RpbmcpO1xuICBpZiAob3BzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gKG11c3RNYXRjaCA/IC0xIDogYnl0ZUxlbmd0aFV0Zjgoc3RyaW5nKSk7XG4gIH1cbiAgcmV0dXJuIG9wcy5ieXRlTGVuZ3RoKHN0cmluZyk7XG59XG5cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDtcblxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlO1xuXG5mdW5jdGlvbiBzd2FwKGIsIG4sIG0pIHtcbiAgY29uc3QgaSA9IGJbbl07XG4gIGJbbl0gPSBiW21dO1xuICBiW21dID0gaTtcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoO1xuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHNcIik7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoO1xuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHNcIik7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpO1xuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0KCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDtcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KTtcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNik7XG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpO1xuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0aGlzLnV0ZjhTbGljZSgwLCB0aGlzLmxlbmd0aCk7XG4gIH1cblxuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDtcblxuICBpZiAoc3RhcnQgPD0gMCkge1xuICAgIHN0YXJ0ID0gMDtcbiAgfSBlbHNlIGlmIChzdGFydCA+PSBsZW4pIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfSBlbHNlIHtcbiAgICBzdGFydCB8PSAwO1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlbjtcbiAgfSBlbHNlIHtcbiAgICBlbmQgfD0gMDtcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXMudXRmOFNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgY29uc3Qgb3BzID0gZ2V0RW5jb2RpbmdPcHMoZW5jb2RpbmcpO1xuICBpZiAob3BzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX1VOS05PV05fRU5DT0RJTkcoZW5jb2RpbmcpO1xuICB9XG5cbiAgcmV0dXJuIG9wcy5zbGljZSh0aGlzLCBzdGFydCwgZW5kKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhiKSB7XG4gIGlmICghaXNVaW50OEFycmF5KGIpKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgXCJvdGhlckJ1ZmZlclwiLFxuICAgICAgW1wiQnVmZmVyXCIsIFwiVWludDhBcnJheVwiXSxcbiAgICAgIGIsXG4gICAgKTtcbiAgfVxuICBpZiAodGhpcyA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMDtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gIGxldCBzdHIgPSBcIlwiO1xuICBjb25zdCBtYXggPSBJTlNQRUNUX01BWF9CWVRFUztcbiAgc3RyID0gdGhpcy50b1N0cmluZyhcImhleFwiLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCBcIiQxIFwiKS50cmltKCk7XG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkge1xuICAgIHN0ciArPSBcIiAuLi4gXCI7XG4gIH1cbiAgcmV0dXJuIFwiPEJ1ZmZlciBcIiArIHN0ciArIFwiPlwiO1xufTtcblxuaWYgKGN1c3RvbUluc3BlY3RTeW1ib2wpIHtcbiAgQnVmZmVyLnByb3RvdHlwZVtjdXN0b21JbnNwZWN0U3ltYm9sXSA9IEJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdDtcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShcbiAgdGFyZ2V0LFxuICBzdGFydCxcbiAgZW5kLFxuICB0aGlzU3RhcnQsXG4gIHRoaXNFbmQsXG4pIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpO1xuICB9XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICBcInRhcmdldFwiLFxuICAgICAgW1wiQnVmZmVyXCIsIFwiVWludDhBcnJheVwiXSxcbiAgICAgIHRhcmdldCxcbiAgICApO1xuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVPZmZzZXQoc3RhcnQsIFwidGFyZ2V0U3RhcnRcIiwgMCwga01heExlbmd0aCk7XG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlT2Zmc2V0KGVuZCwgXCJ0YXJnZXRFbmRcIiwgMCwgdGFyZ2V0Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlT2Zmc2V0KHN0YXJ0LCBcInNvdXJjZVN0YXJ0XCIsIDAsIGtNYXhMZW5ndGgpO1xuICB9XG5cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZU9mZnNldChlbmQsIFwic291cmNlRW5kXCIsIDAsIHRoaXMubGVuZ3RoKTtcbiAgfVxuXG4gIGlmIChcbiAgICBzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8XG4gICAgdGhpc0VuZCA+IHRoaXMubGVuZ3RoXG4gICkge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKFwib3V0IG9mIHJhbmdlIGluZGV4XCIsIFwicmFuZ2VcIik7XG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBzdGFydCA+Pj49IDA7XG4gIGVuZCA+Pj49IDA7XG4gIHRoaXNTdGFydCA+Pj49IDA7XG4gIHRoaXNFbmQgPj4+PSAwO1xuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgbGV0IHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0O1xuICBsZXQgeSA9IGVuZCAtIHN0YXJ0O1xuICBjb25zdCBsZW4gPSBNYXRoLm1pbih4LCB5KTtcbiAgY29uc3QgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZCk7XG4gIGNvbnN0IHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXTtcbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn07XG5cbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhbGlkYXRlQnVmZmVyKGJ1ZmZlcik7XG5cbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0O1xuICAgIGJ5dGVPZmZzZXQgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZjtcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDA7XG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0O1xuICBpZiAoTnVtYmVyLmlzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCB8fCBidWZmZXIuYnl0ZUxlbmd0aCk7XG4gIH1cbiAgZGlyID0gISFkaXI7XG5cbiAgaWYgKHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gaW5kZXhPZk51bWJlcihidWZmZXIsIHZhbCA+Pj4gMCwgYnl0ZU9mZnNldCwgZGlyKTtcbiAgfVxuXG4gIGxldCBvcHM7XG4gIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgb3BzID0gZW5jb2RpbmdPcHMudXRmODtcbiAgfSBlbHNlIHtcbiAgICBvcHMgPSBnZXRFbmNvZGluZ09wcyhlbmNvZGluZyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9VTktOT1dOX0VOQ09ESU5HKGVuY29kaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wcy5pbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBkaXIpO1xuICB9XG5cbiAgaWYgKGlzVWludDhBcnJheSh2YWwpKSB7XG4gICAgY29uc3QgZW5jb2RpbmdWYWwgPVxuICAgICAgKG9wcyA9PT0gdW5kZWZpbmVkID8gZW5jb2RpbmdzTWFwLnV0ZjggOiBvcHMuZW5jb2RpbmdWYWwpO1xuICAgIHJldHVybiBpbmRleE9mQnVmZmVyKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZ1ZhbCwgZGlyKTtcbiAgfVxuXG4gIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICBcInZhbHVlXCIsXG4gICAgW1wibnVtYmVyXCIsIFwic3RyaW5nXCIsIFwiQnVmZmVyXCIsIFwiVWludDhBcnJheVwiXSxcbiAgICB2YWwsXG4gICk7XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihcbiAgdmFsLFxuICBieXRlT2Zmc2V0LFxuICBlbmNvZGluZyxcbikge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5hc2NpaVNsaWNlID0gZnVuY3Rpb24gYXNjaWlTbGljZShvZmZzZXQsIGxlbmd0aCkge1xuICBpZiAob2Zmc2V0ID09PSAwICYmIGxlbmd0aCA9PT0gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYnl0ZXNUb0FzY2lpKHRoaXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBieXRlc1RvQXNjaWkodGhpcy5zbGljZShvZmZzZXQsIGxlbmd0aCkpO1xuICB9XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLmFzY2lpV3JpdGUgPSBmdW5jdGlvbiBhc2NpaVdyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIHRoaXMsIG9mZnNldCwgbGVuZ3RoKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUuYmFzZTY0U2xpY2UgPSBmdW5jdGlvbiBiYXNlNjRTbGljZShcbiAgb2Zmc2V0LFxuICBsZW5ndGgsXG4pIHtcbiAgaWYgKG9mZnNldCA9PT0gMCAmJiBsZW5ndGggPT09IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5lbmNvZGUodGhpcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5lbmNvZGUodGhpcy5zbGljZShvZmZzZXQsIGxlbmd0aCkpO1xuICB9XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLmJhc2U2NFdyaXRlID0gZnVuY3Rpb24gYmFzZTY0V3JpdGUoXG4gIHN0cmluZyxcbiAgb2Zmc2V0LFxuICBsZW5ndGgsXG4pIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCB0aGlzLCBvZmZzZXQsIGxlbmd0aCk7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLmJhc2U2NHVybFNsaWNlID0gZnVuY3Rpb24gYmFzZTY0dXJsU2xpY2UoXG4gIG9mZnNldCxcbiAgbGVuZ3RoLFxuKSB7XG4gIGlmIChvZmZzZXQgPT09IDAgJiYgbGVuZ3RoID09PSB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjR1cmwuZW5jb2RlKHRoaXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjR1cmwuZW5jb2RlKHRoaXMuc2xpY2Uob2Zmc2V0LCBsZW5ndGgpKTtcbiAgfVxufTtcblxuQnVmZmVyLnByb3RvdHlwZS5iYXNlNjR1cmxXcml0ZSA9IGZ1bmN0aW9uIGJhc2U2NHVybFdyaXRlKFxuICBzdHJpbmcsXG4gIG9mZnNldCxcbiAgbGVuZ3RoLFxuKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFVybFRvQnl0ZXMoc3RyaW5nKSwgdGhpcywgb2Zmc2V0LCBsZW5ndGgpO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5oZXhXcml0ZSA9IGZ1bmN0aW9uIGhleFdyaXRlKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoXG4gICAgaGV4VG9CeXRlcyhzdHJpbmcsIHRoaXMubGVuZ3RoIC0gb2Zmc2V0KSxcbiAgICB0aGlzLFxuICAgIG9mZnNldCxcbiAgICBsZW5ndGgsXG4gICk7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLmhleFNsaWNlID0gZnVuY3Rpb24gaGV4U2xpY2Uoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gX2hleFNsaWNlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5sYXRpbjFTbGljZSA9IGZ1bmN0aW9uIGxhdGluMVNsaWNlKFxuICBzdHJpbmcsXG4gIG9mZnNldCxcbiAgbGVuZ3RoLFxuKSB7XG4gIHJldHVybiBfbGF0aW4xU2xpY2UodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLmxhdGluMVdyaXRlID0gZnVuY3Rpb24gbGF0aW4xV3JpdGUoXG4gIHN0cmluZyxcbiAgb2Zmc2V0LFxuICBsZW5ndGgsXG4pIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIHRoaXMsIG9mZnNldCwgbGVuZ3RoKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUudWNzMlNsaWNlID0gZnVuY3Rpb24gdWNzMlNsaWNlKG9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmIChvZmZzZXQgPT09IDAgJiYgbGVuZ3RoID09PSB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiBieXRlc1RvVXRmMTZsZSh0aGlzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYnl0ZXNUb1V0ZjE2bGUodGhpcy5zbGljZShvZmZzZXQsIGxlbmd0aCkpO1xuICB9XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLnVjczJXcml0ZSA9IGZ1bmN0aW9uIHVjczJXcml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKFxuICAgIHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgdGhpcy5sZW5ndGggLSBvZmZzZXQpLFxuICAgIHRoaXMsXG4gICAgb2Zmc2V0LFxuICAgIGxlbmd0aCxcbiAgKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUudXRmOFNsaWNlID0gZnVuY3Rpb24gdXRmOFNsaWNlKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIF91dGY4U2xpY2UodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLnV0ZjhXcml0ZSA9IGZ1bmN0aW9uIHV0ZjhXcml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKFxuICAgIHV0ZjhUb0J5dGVzKHN0cmluZywgdGhpcy5sZW5ndGggLSBvZmZzZXQpLFxuICAgIHRoaXMsXG4gICAgb2Zmc2V0LFxuICAgIGxlbmd0aCxcbiAgKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZShzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKTtcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRoaXMudXRmOFdyaXRlKHN0cmluZywgMCwgdGhpcy5sZW5ndGgpO1xuICB9XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gXCJzdHJpbmdcIikge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0O1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIG9mZnNldCA9IDA7XG5cbiAgICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCwgXCJvZmZzZXRcIiwgMCwgdGhpcy5sZW5ndGgpO1xuXG4gICAgY29uc3QgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXQ7XG5cbiAgICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBsZW5ndGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoO1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0ZU9mZnNldChsZW5ndGgsIFwibGVuZ3RoXCIsIDAsIHRoaXMubGVuZ3RoKTtcbiAgICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgICAgbGVuZ3RoID0gcmVtYWluaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIHtcbiAgICByZXR1cm4gdGhpcy51dGY4V3JpdGUoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCk7XG4gIH1cblxuICBjb25zdCBvcHMgPSBnZXRFbmNvZGluZ09wcyhlbmNvZGluZyk7XG4gIGlmIChvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfVU5LTk9XTl9FTkNPRElORyhlbmNvZGluZyk7XG4gIH1cbiAgcmV0dXJuIG9wcy53cml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiQnVmZmVyXCIsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApLFxuICB9O1xufTtcbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlcihvYmosIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAvLyBDb252ZXJ0IGJ5dGVPZmZzZXQgdG8gaW50ZWdlclxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnl0ZU9mZnNldCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0O1xuICAgIGlmIChOdW1iZXIuaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAgIGJ5dGVPZmZzZXQgPSAwO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1heExlbmd0aCA9IG9iai5ieXRlTGVuZ3RoIC0gYnl0ZU9mZnNldDtcblxuICBpZiAobWF4TGVuZ3RoIDwgMCkge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFMoXCJvZmZzZXRcIik7XG4gIH1cblxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSBtYXhMZW5ndGg7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29udmVydCBsZW5ndGggdG8gbm9uLW5lZ2F0aXZlIGludGVnZXIuXG4gICAgbGVuZ3RoID0gK2xlbmd0aDtcbiAgICBpZiAobGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTKFwibGVuZ3RoXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSAwO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KG9iaiwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZmZlciwgQnVmZmVyLnByb3RvdHlwZSk7XG4gIHJldHVybiBidWZmZXI7XG59XG5cbmZ1bmN0aW9uIF9iYXNlNjRTbGljZShidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZW5jb2RlKGJ1Zik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5lbmNvZGUoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfdXRmOFNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpO1xuICBjb25zdCByZXMgPSBbXTtcbiAgbGV0IGkgPSBzdGFydDtcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICBjb25zdCBmaXJzdEJ5dGUgPSBidWZbaV07XG4gICAgbGV0IGNvZGVQb2ludCA9IG51bGw7XG4gICAgbGV0IGJ5dGVzUGVyU2VxdWVuY2UgPSBmaXJzdEJ5dGUgPiAyMzlcbiAgICAgID8gNFxuICAgICAgOiBmaXJzdEJ5dGUgPiAyMjNcbiAgICAgID8gM1xuICAgICAgOiBmaXJzdEJ5dGUgPiAxOTFcbiAgICAgID8gMlxuICAgICAgOiAxO1xuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIGxldCBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnQ7XG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAxMjgpIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjgpIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMzEpIDw8IDYgfCBzZWNvbmRCeXRlICYgNjM7XG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDEyNykge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdO1xuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl07XG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMTkyKSA9PT0gMTI4ICYmICh0aGlyZEJ5dGUgJiAxOTIpID09PSAxMjgpIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMTUpIDw8IDEyIHxcbiAgICAgICAgICAgICAgKHNlY29uZEJ5dGUgJiA2MykgPDwgNiB8IHRoaXJkQnl0ZSAmIDYzO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID4gMjA0NyAmJlxuICAgICAgICAgICAgICAodGVtcENvZGVQb2ludCA8IDU1Mjk2IHx8IHRlbXBDb2RlUG9pbnQgPiA1NzM0MylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdO1xuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl07XG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM107XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHNlY29uZEJ5dGUgJiAxOTIpID09PSAxMjggJiYgKHRoaXJkQnl0ZSAmIDE5MikgPT09IDEyOCAmJlxuICAgICAgICAgICAgKGZvdXJ0aEJ5dGUgJiAxOTIpID09PSAxMjhcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMTUpIDw8IDE4IHxcbiAgICAgICAgICAgICAgKHNlY29uZEJ5dGUgJiA2MykgPDwgMTIgfCAodGhpcmRCeXRlICYgNjMpIDw8IDYgfFxuICAgICAgICAgICAgICBmb3VydGhCeXRlICYgNjM7XG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDY1NTM1ICYmIHRlbXBDb2RlUG9pbnQgPCAxMTE0MTEyKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICBjb2RlUG9pbnQgPSA2NTUzMztcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxO1xuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gNjU1MzUpIHtcbiAgICAgIGNvZGVQb2ludCAtPSA2NTUzNjtcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAxMDIzIHwgNTUyOTYpO1xuICAgICAgY29kZVBvaW50ID0gNTYzMjAgfCBjb2RlUG9pbnQgJiAxMDIzO1xuICAgIH1cbiAgICByZXMucHVzaChjb2RlUG9pbnQpO1xuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZTtcbiAgfVxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcyk7XG59XG5cbmNvbnN0IE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gNDA5NjtcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5KGNvZGVQb2ludHMpIHtcbiAgY29uc3QgbGVuID0gY29kZVBvaW50cy5sZW5ndGg7XG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpO1xuICB9XG4gIGxldCByZXMgPSBcIlwiO1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gX2xhdGluMVNsaWNlKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBsZXQgcmV0ID0gXCJcIjtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKTtcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIF9oZXhTbGljZShidWYsIHN0YXJ0LCBlbmQpIHtcbiAgY29uc3QgbGVuID0gYnVmLmxlbmd0aDtcbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDA7XG4gIH1cbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW47XG4gIH1cbiAgbGV0IG91dCA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IGhleFNsaWNlTG9va3VwVGFibGVbYnVmW2ldXTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDtcbiAgc3RhcnQgPSB+fnN0YXJ0O1xuICBlbmQgPSBlbmQgPT09IHZvaWQgMCA/IGxlbiA6IH5+ZW5kO1xuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuO1xuICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlbjtcbiAgfVxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW47XG4gICAgaWYgKGVuZCA8IDApIHtcbiAgICAgIGVuZCA9IDA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlbjtcbiAgfVxuICBpZiAoZW5kIDwgc3RhcnQpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgfVxuICBjb25zdCBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpO1xuICBPYmplY3Quc2V0UHJvdG90eXBlT2YobmV3QnVmLCBCdWZmZXIucHJvdG90eXBlKTtcbiAgcmV0dXJuIG5ld0J1Zjtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRMRSA9IEJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUoXG4gIG9mZnNldCxcbiAgYnl0ZUxlbmd0aCxcbikge1xuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJvZmZzZXRcIiwgXCJudW1iZXJcIiwgb2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNikge1xuICAgIHJldHVybiByZWFkVUludDQ4TEUodGhpcywgb2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNSkge1xuICAgIHJldHVybiByZWFkVUludDQwTEUodGhpcywgb2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiByZWFkVUludDI0TEUodGhpcywgb2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRVSW50MzJMRShvZmZzZXQpO1xuICB9XG4gIGlmIChieXRlTGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZFVJbnQxNkxFKG9mZnNldCk7XG4gIH1cbiAgaWYgKGJ5dGVMZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkVUludDgob2Zmc2V0KTtcbiAgfVxuXG4gIGJvdW5kc0Vycm9yKGJ5dGVMZW5ndGgsIDYsIFwiYnl0ZUxlbmd0aFwiKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRCRSA9IEJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUoXG4gIG9mZnNldCxcbiAgYnl0ZUxlbmd0aCxcbikge1xuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJvZmZzZXRcIiwgXCJudW1iZXJcIiwgb2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNikge1xuICAgIHJldHVybiByZWFkVUludDQ4QkUodGhpcywgb2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNSkge1xuICAgIHJldHVybiByZWFkVUludDQwQkUodGhpcywgb2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiByZWFkVUludDI0QkUodGhpcywgb2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRVSW50MzJCRShvZmZzZXQpO1xuICB9XG4gIGlmIChieXRlTGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZFVJbnQxNkJFKG9mZnNldCk7XG4gIH1cbiAgaWYgKGJ5dGVMZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkVUludDgob2Zmc2V0KTtcbiAgfVxuXG4gIGJvdW5kc0Vycm9yKGJ5dGVMZW5ndGgsIDYsIFwiYnl0ZUxlbmd0aFwiKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQ4ID0gQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDgoXG4gIG9mZnNldCA9IDAsXG4pIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXRdO1xuICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2QkUgPSBCdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IHJlYWRVSW50MTZCRTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuICBCdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9XG4gICAgZnVuY3Rpb24gcmVhZFVJbnQxNkxFKG9mZnNldCA9IDApIHtcbiAgICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTtcbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDFdO1xuICAgICAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSAyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpcnN0ICsgbGFzdCAqIDIgKiogODtcbiAgICB9O1xuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MzJMRSA9XG4gIEJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID1cbiAgICBmdW5jdGlvbiByZWFkVUludDMyTEUob2Zmc2V0ID0gMCkge1xuICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgICAgIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdO1xuICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgM107XG4gICAgICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlyc3QgK1xuICAgICAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgICAgIGxhc3QgKiAyICoqIDI0O1xuICAgIH07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkJFID0gQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSByZWFkVUludDMyQkU7XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ1VpbnQ2NExFID1cbiAgQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEUgPVxuICAgIGRlZmluZUJpZ0ludE1ldGhvZChcbiAgICAgIGZ1bmN0aW9uIHJlYWRCaWdVSW50NjRMRShvZmZzZXQpIHtcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICAgICAgICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsIFwib2Zmc2V0XCIpO1xuICAgICAgICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTtcbiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107XG4gICAgICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwIHx8IGxhc3QgPT09IHZvaWQgMCkge1xuICAgICAgICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsbyA9IGZpcnN0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgICAgICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgICAgICAgdGhpc1srK29mZnNldF0gKiAyICoqIDI0O1xuICAgICAgICBjb25zdCBoaSA9IHRoaXNbKytvZmZzZXRdICsgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgICAgICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArIGxhc3QgKiAyICoqIDI0O1xuICAgICAgICByZXR1cm4gQmlnSW50KGxvKSArIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpO1xuICAgICAgfSxcbiAgICApO1xuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdVaW50NjRCRSA9XG4gIEJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFID1cbiAgICBkZWZpbmVCaWdJbnRNZXRob2QoXG4gICAgICBmdW5jdGlvbiByZWFkQmlnVUludDY0QkUob2Zmc2V0KSB7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMDtcbiAgICAgICAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07XG4gICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddO1xuICAgICAgICBpZiAoZmlyc3QgPT09IHZvaWQgMCB8fCBsYXN0ID09PSB2b2lkIDApIHtcbiAgICAgICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGkgPSBmaXJzdCAqIDIgKiogMjQgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgICAgICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF07XG4gICAgICAgIGNvbnN0IGxvID0gdGhpc1srK29mZnNldF0gKiAyICoqIDI0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICAgICAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIGxhc3Q7XG4gICAgICAgIHJldHVybiAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludChsbyk7XG4gICAgICB9LFxuICAgICk7XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFKFxuICBvZmZzZXQsXG4gIGJ5dGVMZW5ndGgsXG4pIHtcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKFwib2Zmc2V0XCIsIFwibnVtYmVyXCIsIG9mZnNldCk7XG4gIH1cbiAgaWYgKGJ5dGVMZW5ndGggPT09IDYpIHtcbiAgICByZXR1cm4gcmVhZEludDQ4TEUodGhpcywgb2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNSkge1xuICAgIHJldHVybiByZWFkSW50NDBMRSh0aGlzLCBvZmZzZXQpO1xuICB9XG4gIGlmIChieXRlTGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIHJlYWRJbnQyNExFKHRoaXMsIG9mZnNldCk7XG4gIH1cbiAgaWYgKGJ5dGVMZW5ndGggPT09IDQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkSW50MzJMRShvZmZzZXQpO1xuICB9XG4gIGlmIChieXRlTGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZEludDE2TEUob2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB0aGlzLnJlYWRJbnQ4KG9mZnNldCk7XG4gIH1cblxuICBib3VuZHNFcnJvcihieXRlTGVuZ3RoLCA2LCBcImJ5dGVMZW5ndGhcIik7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRShvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFKFwib2Zmc2V0XCIsIFwibnVtYmVyXCIsIG9mZnNldCk7XG4gIH1cbiAgaWYgKGJ5dGVMZW5ndGggPT09IDYpIHtcbiAgICByZXR1cm4gcmVhZEludDQ4QkUodGhpcywgb2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNSkge1xuICAgIHJldHVybiByZWFkSW50NDBCRSh0aGlzLCBvZmZzZXQpO1xuICB9XG4gIGlmIChieXRlTGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIHJlYWRJbnQyNEJFKHRoaXMsIG9mZnNldCk7XG4gIH1cbiAgaWYgKGJ5dGVMZW5ndGggPT09IDQpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkSW50MzJCRShvZmZzZXQpO1xuICB9XG4gIGlmIChieXRlTGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZEludDE2QkUob2Zmc2V0KTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB0aGlzLnJlYWRJbnQ4KG9mZnNldCk7XG4gIH1cblxuICBib3VuZHNFcnJvcihieXRlTGVuZ3RoLCA2LCBcImJ5dGVMZW5ndGhcIik7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDgob2Zmc2V0ID0gMCkge1xuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsIFwib2Zmc2V0XCIpO1xuICBjb25zdCB2YWwgPSB0aGlzW29mZnNldF07XG4gIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiB2YWwgfCAodmFsICYgMiAqKiA3KSAqIDB4MWZmZmZmZTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRShvZmZzZXQgPSAwKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdO1xuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyAxXTtcbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDIpO1xuICB9XG5cbiAgY29uc3QgdmFsID0gZmlyc3QgKyBsYXN0ICogMiAqKiA4O1xuICByZXR1cm4gdmFsIHwgKHZhbCAmIDIgKiogMTUpICogMHgxZmZmZTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRShvZmZzZXQgPSAwKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdO1xuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyAxXTtcbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDIpO1xuICB9XG5cbiAgY29uc3QgdmFsID0gZmlyc3QgKiAyICoqIDggKyBsYXN0O1xuICByZXR1cm4gdmFsIHwgKHZhbCAmIDIgKiogMTUpICogMHgxZmZmZTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRShvZmZzZXQgPSAwKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdO1xuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyAzXTtcbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDQpO1xuICB9XG5cbiAgcmV0dXJuIGZpcnN0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICAobGFzdCA8PCAyNCk7IC8vIE92ZXJmbG93XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUob2Zmc2V0ID0gMCkge1xuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsIFwib2Zmc2V0XCIpO1xuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XTtcbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgM107XG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA0KTtcbiAgfVxuXG4gIHJldHVybiAoZmlyc3QgPDwgMjQpICsgLy8gT3ZlcmZsb3dcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICBsYXN0O1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChcbiAgZnVuY3Rpb24gcmVhZEJpZ0ludDY0TEUob2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07XG4gICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107XG4gICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7XG4gICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7XG4gICAgfVxuICAgIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgNF0gKyB0aGlzW29mZnNldCArIDVdICogMiAqKiA4ICtcbiAgICAgIHRoaXNbb2Zmc2V0ICsgNl0gKiAyICoqIDE2ICsgKGxhc3QgPDwgMjQpO1xuICAgIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgK1xuICAgICAgQmlnSW50KFxuICAgICAgICBmaXJzdCArIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICAgICAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQsXG4gICAgICApO1xuICB9LFxuKTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChcbiAgZnVuY3Rpb24gcmVhZEJpZ0ludDY0QkUob2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwO1xuICAgIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgXCJvZmZzZXRcIik7XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF07XG4gICAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN107XG4gICAgaWYgKGZpcnN0ID09PSB2b2lkIDAgfHwgbGFzdCA9PT0gdm9pZCAwKSB7XG4gICAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOCk7XG4gICAgfVxuICAgIGNvbnN0IHZhbCA9IChmaXJzdCA8PCAyNCkgKyB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggKyB0aGlzWysrb2Zmc2V0XTtcbiAgICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICtcbiAgICAgIEJpZ0ludChcbiAgICAgICAgdGhpc1srK29mZnNldF0gKiAyICoqIDI0ICsgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICAgICAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArIGxhc3QsXG4gICAgICApO1xuICB9LFxuKTtcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFKG9mZnNldCkge1xuICByZXR1cm4gYmlnRW5kaWFuXG4gICAgPyByZWFkRmxvYXRCYWNrd2FyZHModGhpcywgb2Zmc2V0KVxuICAgIDogcmVhZEZsb2F0Rm9yd2FyZHModGhpcywgb2Zmc2V0KTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0QkUgPSBmdW5jdGlvbiByZWFkRmxvYXRCRShvZmZzZXQpIHtcbiAgcmV0dXJuIGJpZ0VuZGlhblxuICAgID8gcmVhZEZsb2F0Rm9yd2FyZHModGhpcywgb2Zmc2V0KVxuICAgIDogcmVhZEZsb2F0QmFja3dhcmRzKHRoaXMsIG9mZnNldCk7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRShvZmZzZXQpIHtcbiAgcmV0dXJuIGJpZ0VuZGlhblxuICAgID8gcmVhZERvdWJsZUJhY2t3YXJkcyh0aGlzLCBvZmZzZXQpXG4gICAgOiByZWFkRG91YmxlRm9yd2FyZHModGhpcywgb2Zmc2V0KTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFKG9mZnNldCkge1xuICByZXR1cm4gYmlnRW5kaWFuXG4gICAgPyByZWFkRG91YmxlRm9yd2FyZHModGhpcywgb2Zmc2V0KVxuICAgIDogcmVhZERvdWJsZUJhY2t3YXJkcyh0aGlzLCBvZmZzZXQpO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnRMRSA9XG4gIEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPVxuICAgIGZ1bmN0aW9uIHdyaXRlVUludExFKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICAgIGlmIChieXRlTGVuZ3RoID09PSA2KSB7XG4gICAgICAgIHJldHVybiB3cml0ZVVfSW50NDhMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAwLCAweGZmZmZmZmZmZmZmZik7XG4gICAgICB9XG4gICAgICBpZiAoYnl0ZUxlbmd0aCA9PT0gNSkge1xuICAgICAgICByZXR1cm4gd3JpdGVVX0ludDQwTEUodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMHhmZmZmZmZmZmZmKTtcbiAgICAgIH1cbiAgICAgIGlmIChieXRlTGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHJldHVybiB3cml0ZVVfSW50MjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAwLCAweGZmZmZmZik7XG4gICAgICB9XG4gICAgICBpZiAoYnl0ZUxlbmd0aCA9PT0gNCkge1xuICAgICAgICByZXR1cm4gd3JpdGVVX0ludDMyTEUodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMHhmZmZmZmZmZik7XG4gICAgICB9XG4gICAgICBpZiAoYnl0ZUxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4gd3JpdGVVX0ludDE2TEUodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMHhmZmZmKTtcbiAgICAgIH1cbiAgICAgIGlmIChieXRlTGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB3cml0ZVVfSW50OCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAwLCAweGZmKTtcbiAgICAgIH1cblxuICAgICAgYm91bmRzRXJyb3IoYnl0ZUxlbmd0aCwgNiwgXCJieXRlTGVuZ3RoXCIpO1xuICAgIH07XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50QkUgPVxuICBCdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID1cbiAgICBmdW5jdGlvbiB3cml0ZVVJbnRCRSh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgICBpZiAoYnl0ZUxlbmd0aCA9PT0gNikge1xuICAgICAgICByZXR1cm4gd3JpdGVVX0ludDQ4QkUodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMHhmZmZmZmZmZmZmZmYpO1xuICAgICAgfVxuICAgICAgaWYgKGJ5dGVMZW5ndGggPT09IDUpIHtcbiAgICAgICAgcmV0dXJuIHdyaXRlVV9JbnQ0MEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDB4ZmZmZmZmZmZmZik7XG4gICAgICB9XG4gICAgICBpZiAoYnl0ZUxlbmd0aCA9PT0gMykge1xuICAgICAgICByZXR1cm4gd3JpdGVVX0ludDI0QkUodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMHhmZmZmZmYpO1xuICAgICAgfVxuICAgICAgaWYgKGJ5dGVMZW5ndGggPT09IDQpIHtcbiAgICAgICAgcmV0dXJuIHdyaXRlVV9JbnQzMkJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDB4ZmZmZmZmZmYpO1xuICAgICAgfVxuICAgICAgaWYgKGJ5dGVMZW5ndGggPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIHdyaXRlVV9JbnQxNkJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDB4ZmZmZik7XG4gICAgICB9XG4gICAgICBpZiAoYnl0ZUxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gd3JpdGVVX0ludDgodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMHhmZik7XG4gICAgICB9XG5cbiAgICAgIGJvdW5kc0Vycm9yKGJ5dGVMZW5ndGgsIDYsIFwiYnl0ZUxlbmd0aFwiKTtcbiAgICB9O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDggPSBCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4KFxuICB2YWx1ZSxcbiAgb2Zmc2V0ID0gMCxcbikge1xuICByZXR1cm4gd3JpdGVVX0ludDgodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMHhmZik7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2TEUgPVxuICBCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPVxuICAgIGZ1bmN0aW9uIHdyaXRlVUludDE2TEUodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgICAgIHJldHVybiB3cml0ZVVfSW50MTZMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAwLCAweGZmZmYpO1xuICAgIH07XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9XG4gIEJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9XG4gICAgZnVuY3Rpb24gd3JpdGVVSW50MTZCRSh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICAgICAgcmV0dXJuIHdyaXRlVV9JbnQxNkJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIDAsIDB4ZmZmZik7XG4gICAgfTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID1cbiAgQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID1cbiAgICBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gICAgICByZXR1cm4gX3dyaXRlVUludDMyTEUodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMHhmZmZmZmZmZik7XG4gICAgfTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID1cbiAgQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID1cbiAgICBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gICAgICByZXR1cm4gX3dyaXRlVUludDMyQkUodGhpcywgdmFsdWUsIG9mZnNldCwgMCwgMHhmZmZmZmZmZik7XG4gICAgfTtcblxuZnVuY3Rpb24gd3J0QmlnVUludDY0TEUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkge1xuICBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDcpO1xuICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoNDI5NDk2NzI5NSkpO1xuICBidWZbb2Zmc2V0KytdID0gbG87XG4gIGxvID0gbG8gPj4gODtcbiAgYnVmW29mZnNldCsrXSA9IGxvO1xuICBsbyA9IGxvID4+IDg7XG4gIGJ1ZltvZmZzZXQrK10gPSBsbztcbiAgbG8gPSBsbyA+PiA4O1xuICBidWZbb2Zmc2V0KytdID0gbG87XG4gIGxldCBoaSA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDQyOTQ5NjcyOTUpKTtcbiAgYnVmW29mZnNldCsrXSA9IGhpO1xuICBoaSA9IGhpID4+IDg7XG4gIGJ1ZltvZmZzZXQrK10gPSBoaTtcbiAgaGkgPSBoaSA+PiA4O1xuICBidWZbb2Zmc2V0KytdID0gaGk7XG4gIGhpID0gaGkgPj4gODtcbiAgYnVmW29mZnNldCsrXSA9IGhpO1xuICByZXR1cm4gb2Zmc2V0O1xufVxuXG5mdW5jdGlvbiB3cnRCaWdVSW50NjRCRShidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNyk7XG4gIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7XG4gIGJ1ZltvZmZzZXQgKyA3XSA9IGxvO1xuICBsbyA9IGxvID4+IDg7XG4gIGJ1ZltvZmZzZXQgKyA2XSA9IGxvO1xuICBsbyA9IGxvID4+IDg7XG4gIGJ1ZltvZmZzZXQgKyA1XSA9IGxvO1xuICBsbyA9IGxvID4+IDg7XG4gIGJ1ZltvZmZzZXQgKyA0XSA9IGxvO1xuICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCg0Mjk0OTY3Mjk1KSk7XG4gIGJ1ZltvZmZzZXQgKyAzXSA9IGhpO1xuICBoaSA9IGhpID4+IDg7XG4gIGJ1ZltvZmZzZXQgKyAyXSA9IGhpO1xuICBoaSA9IGhpID4+IDg7XG4gIGJ1ZltvZmZzZXQgKyAxXSA9IGhpO1xuICBoaSA9IGhpID4+IDg7XG4gIGJ1ZltvZmZzZXRdID0gaGk7XG4gIHJldHVybiBvZmZzZXQgKyA4O1xufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVWludDY0TEUgPVxuICBCdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEUgPVxuICAgIGRlZmluZUJpZ0ludE1ldGhvZChcbiAgICAgIGZ1bmN0aW9uIHdyaXRlQmlnVUludDY0TEUodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgICAgICAgcmV0dXJuIHdydEJpZ1VJbnQ2NExFKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgIEJpZ0ludCgwKSxcbiAgICAgICAgICBCaWdJbnQoXCIweGZmZmZmZmZmZmZmZmZmZmZcIiksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICk7XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdVaW50NjRCRSA9XG4gIEJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRSA9XG4gICAgZGVmaW5lQmlnSW50TWV0aG9kKFxuICAgICAgZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRCRSh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICAgICAgICByZXR1cm4gd3J0QmlnVUludDY0QkUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgQmlnSW50KDApLFxuICAgICAgICAgIEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRShcbiAgdmFsdWUsXG4gIG9mZnNldCxcbiAgYnl0ZUxlbmd0aCxcbikge1xuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNikge1xuICAgIHJldHVybiB3cml0ZVVfSW50NDhMRShcbiAgICAgIHRoaXMsXG4gICAgICB2YWx1ZSxcbiAgICAgIG9mZnNldCxcbiAgICAgIC0weDgwMDAwMDAwMDAwMCxcbiAgICAgIDB4N2ZmZmZmZmZmZmZmLFxuICAgICk7XG4gIH1cbiAgaWYgKGJ5dGVMZW5ndGggPT09IDUpIHtcbiAgICByZXR1cm4gd3JpdGVVX0ludDQwTEUodGhpcywgdmFsdWUsIG9mZnNldCwgLTB4ODAwMDAwMDAwMCwgMHg3ZmZmZmZmZmZmKTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiB3cml0ZVVfSW50MjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMHg4MDAwMDAsIDB4N2ZmZmZmKTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB3cml0ZVVfSW50MzJMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMHg4MDAwMDAwMCwgMHg3ZmZmZmZmZik7XG4gIH1cbiAgaWYgKGJ5dGVMZW5ndGggPT09IDIpIHtcbiAgICByZXR1cm4gd3JpdGVVX0ludDE2TEUodGhpcywgdmFsdWUsIG9mZnNldCwgLTB4ODAwMCwgMHg3ZmZmKTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB3cml0ZVVfSW50OCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMHg4MCwgMHg3Zik7XG4gIH1cblxuICBib3VuZHNFcnJvcihieXRlTGVuZ3RoLCA2LCBcImJ5dGVMZW5ndGhcIik7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50QkUgPSBmdW5jdGlvbiB3cml0ZUludEJFKFxuICB2YWx1ZSxcbiAgb2Zmc2V0LFxuICBieXRlTGVuZ3RoLFxuKSB7XG4gIGlmIChieXRlTGVuZ3RoID09PSA2KSB7XG4gICAgcmV0dXJuIHdyaXRlVV9JbnQ0OEJFKFxuICAgICAgdGhpcyxcbiAgICAgIHZhbHVlLFxuICAgICAgb2Zmc2V0LFxuICAgICAgLTB4ODAwMDAwMDAwMDAwLFxuICAgICAgMHg3ZmZmZmZmZmZmZmYsXG4gICAgKTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gNSkge1xuICAgIHJldHVybiB3cml0ZVVfSW50NDBCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMHg4MDAwMDAwMDAwLCAweDdmZmZmZmZmZmYpO1xuICB9XG4gIGlmIChieXRlTGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIHdyaXRlVV9JbnQyNEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC0weDgwMDAwMCwgMHg3ZmZmZmYpO1xuICB9XG4gIGlmIChieXRlTGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHdyaXRlVV9JbnQzMkJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC0weDgwMDAwMDAwLCAweDdmZmZmZmZmKTtcbiAgfVxuICBpZiAoYnl0ZUxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiB3cml0ZVVfSW50MTZCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMHg4MDAwLCAweDdmZmYpO1xuICB9XG4gIGlmIChieXRlTGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHdyaXRlVV9JbnQ4KHRoaXMsIHZhbHVlLCBvZmZzZXQsIC0weDgwLCAweDdmKTtcbiAgfVxuXG4gIGJvdW5kc0Vycm9yKGJ5dGVMZW5ndGgsIDYsIFwiYnl0ZUxlbmd0aFwiKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4KHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cml0ZVVfSW50OCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMHg4MCwgMHg3Zik7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3JpdGVVX0ludDE2TEUodGhpcywgdmFsdWUsIG9mZnNldCwgLTB4ODAwMCwgMHg3ZmZmKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFKFxuICB2YWx1ZSxcbiAgb2Zmc2V0ID0gMCxcbikge1xuICByZXR1cm4gd3JpdGVVX0ludDE2QkUodGhpcywgdmFsdWUsIG9mZnNldCwgLTB4ODAwMCwgMHg3ZmZmKTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cml0ZVVfSW50MzJMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtMHg4MDAwMDAwMCwgMHg3ZmZmZmZmZik7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3JpdGVVX0ludDMyQkUodGhpcywgdmFsdWUsIG9mZnNldCwgLTB4ODAwMDAwMDAsIDB4N2ZmZmZmZmYpO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoXG4gIGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRMRSh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICAgIHJldHVybiB3cnRCaWdVSW50NjRMRShcbiAgICAgIHRoaXMsXG4gICAgICB2YWx1ZSxcbiAgICAgIG9mZnNldCxcbiAgICAgIC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksXG4gICAgICBCaWdJbnQoXCIweDdmZmZmZmZmZmZmZmZmZmZcIiksXG4gICAgKTtcbiAgfSxcbik7XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKFxuICBmdW5jdGlvbiB3cml0ZUJpZ0ludDY0QkUodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgICByZXR1cm4gd3J0QmlnVUludDY0QkUoXG4gICAgICB0aGlzLFxuICAgICAgdmFsdWUsXG4gICAgICBvZmZzZXQsXG4gICAgICAtQmlnSW50KFwiMHg4MDAwMDAwMDAwMDAwMDAwXCIpLFxuICAgICAgQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpLFxuICAgICk7XG4gIH0sXG4pO1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRShcbiAgdmFsdWUsXG4gIG9mZnNldCxcbikge1xuICByZXR1cm4gYmlnRW5kaWFuXG4gICAgPyB3cml0ZUZsb2F0QmFja3dhcmRzKHRoaXMsIHZhbHVlLCBvZmZzZXQpXG4gICAgOiB3cml0ZUZsb2F0Rm9yd2FyZHModGhpcywgdmFsdWUsIG9mZnNldCk7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRShcbiAgdmFsdWUsXG4gIG9mZnNldCxcbikge1xuICByZXR1cm4gYmlnRW5kaWFuXG4gICAgPyB3cml0ZUZsb2F0Rm9yd2FyZHModGhpcywgdmFsdWUsIG9mZnNldClcbiAgICA6IHdyaXRlRmxvYXRCYWNrd2FyZHModGhpcywgdmFsdWUsIG9mZnNldCk7XG59O1xuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFKFxuICB2YWx1ZSxcbiAgb2Zmc2V0LFxuKSB7XG4gIHJldHVybiBiaWdFbmRpYW5cbiAgICA/IHdyaXRlRG91YmxlQmFja3dhcmRzKHRoaXMsIHZhbHVlLCBvZmZzZXQpXG4gICAgOiB3cml0ZURvdWJsZUZvcndhcmRzKHRoaXMsIHZhbHVlLCBvZmZzZXQpO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRShcbiAgdmFsdWUsXG4gIG9mZnNldCxcbikge1xuICByZXR1cm4gYmlnRW5kaWFuXG4gICAgPyB3cml0ZURvdWJsZUZvcndhcmRzKHRoaXMsIHZhbHVlLCBvZmZzZXQpXG4gICAgOiB3cml0ZURvdWJsZUJhY2t3YXJkcyh0aGlzLCB2YWx1ZSwgb2Zmc2V0KTtcbn07XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkoXG4gIHRhcmdldCxcbiAgdGFyZ2V0U3RhcnQsXG4gIHNvdXJjZVN0YXJ0LFxuICBzb3VyY2VFbmQsXG4pIHtcbiAgaWYgKCFpc1VpbnQ4QXJyYXkodGhpcykpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICBcInNvdXJjZVwiLFxuICAgICAgW1wiQnVmZmVyXCIsIFwiVWludDhBcnJheVwiXSxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIGlmICghaXNVaW50OEFycmF5KHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICBcInRhcmdldFwiLFxuICAgICAgW1wiQnVmZmVyXCIsIFwiVWludDhBcnJheVwiXSxcbiAgICAgIHRhcmdldCxcbiAgICApO1xuICB9XG5cbiAgaWYgKHRhcmdldFN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0YXJnZXRTdGFydCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0U3RhcnQgPSB0b0ludGVnZXIodGFyZ2V0U3RhcnQsIDApO1xuICAgIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKFwidGFyZ2V0U3RhcnRcIiwgXCI+PSAwXCIsIHRhcmdldFN0YXJ0KTtcbiAgICB9XG4gIH1cblxuICBpZiAoc291cmNlU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHNvdXJjZVN0YXJ0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBzb3VyY2VTdGFydCA9IHRvSW50ZWdlcihzb3VyY2VTdGFydCwgMCk7XG4gICAgaWYgKHNvdXJjZVN0YXJ0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UoXCJzb3VyY2VTdGFydFwiLCBcIj49IDBcIiwgc291cmNlU3RhcnQpO1xuICAgIH1cbiAgICBpZiAoc291cmNlU3RhcnQgPj0gTUFYX1VJTlQzMikge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UoXG4gICAgICAgIFwic291cmNlU3RhcnRcIixcbiAgICAgICAgYDwgJHtNQVhfVUlOVDMyfWAsXG4gICAgICAgIHNvdXJjZVN0YXJ0LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc291cmNlRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBzb3VyY2VFbmQgPSB0aGlzLmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICBzb3VyY2VFbmQgPSB0b0ludGVnZXIoc291cmNlRW5kLCAwKTtcbiAgICBpZiAoc291cmNlRW5kIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UoXCJzb3VyY2VFbmRcIiwgXCI+PSAwXCIsIHNvdXJjZUVuZCk7XG4gICAgfVxuICAgIGlmIChzb3VyY2VFbmQgPj0gTUFYX1VJTlQzMikge1xuICAgICAgdGhyb3cgbmV3IGNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UoXG4gICAgICAgIFwic291cmNlRW5kXCIsXG4gICAgICAgIGA8ICR7TUFYX1VJTlQzMn1gLFxuICAgICAgICBzb3VyY2VFbmQsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoc291cmNlRW5kID4gMCAmJiBzb3VyY2VFbmQgPCBzb3VyY2VTdGFydCkge1xuICAgIHNvdXJjZUVuZCA9IHNvdXJjZVN0YXJ0O1xuICB9XG4gIGlmIChzb3VyY2VFbmQgPT09IHNvdXJjZVN0YXJ0KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChzb3VyY2VFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHNvdXJjZUVuZCA9IHRoaXMubGVuZ3RoO1xuICB9XG5cbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IHNvdXJjZUVuZCAtIHNvdXJjZVN0YXJ0KSB7XG4gICAgc291cmNlRW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc291cmNlU3RhcnQ7XG4gIH1cblxuICBjb25zdCBsZW4gPSBzb3VyY2VFbmQgLSBzb3VyY2VTdGFydDtcbiAgaWYgKFxuICAgIHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gXCJmdW5jdGlvblwiXG4gICkge1xuICAgIHRoaXMuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc291cmNlU3RhcnQsIHNvdXJjZUVuZCk7XG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHNvdXJjZVN0YXJ0LCBzb3VyY2VFbmQpLFxuICAgICAgdGFyZ2V0U3RhcnQsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbGVuO1xufTtcblxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZW5jb2RpbmcgPSBlbmQ7XG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB2b2lkIDAgJiYgdHlwZW9mIGVuY29kaW5nICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJzdHJpbmdcIiAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIgKyBlbmNvZGluZyk7XG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMCk7XG4gICAgICBpZiAoZW5jb2RpbmcgPT09IFwidXRmOFwiICYmIGNvZGUgPCAxMjggfHwgZW5jb2RpbmcgPT09IFwibGF0aW4xXCIpIHtcbiAgICAgICAgdmFsID0gY29kZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgIHZhbCA9IHZhbCAmIDI1NTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSBcImJvb2xlYW5cIikge1xuICAgIHZhbCA9IE51bWJlcih2YWwpO1xuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiT3V0IG9mIHJhbmdlIGluZGV4XCIpO1xuICB9XG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzdGFydCA9IHN0YXJ0ID4+PiAwO1xuICBlbmQgPSBlbmQgPT09IHZvaWQgMCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwO1xuICBpZiAoIXZhbCkge1xuICAgIHZhbCA9IDA7XG4gIH1cbiAgbGV0IGk7XG4gIGlmICh0eXBlb2YgdmFsID09PSBcIm51bWJlclwiKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKSA/IHZhbCA6IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpO1xuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmxlbmd0aDtcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1ZBTFVFKFxuICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgIHZhbCxcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aDIpIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCBcIm9mZnNldFwiKTtcbiAgaWYgKGJ1ZltvZmZzZXRdID09PSB2b2lkIDAgfHwgYnVmW29mZnNldCArIGJ5dGVMZW5ndGgyXSA9PT0gdm9pZCAwKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gKGJ5dGVMZW5ndGgyICsgMSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgYnl0ZUxlbmd0aDIpIHtcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB7XG4gICAgY29uc3QgbiA9IHR5cGVvZiBtaW4gPT09IFwiYmlnaW50XCIgPyBcIm5cIiA6IFwiXCI7XG4gICAgbGV0IHJhbmdlO1xuICAgIGlmIChieXRlTGVuZ3RoMiA+IDMpIHtcbiAgICAgIGlmIChtaW4gPT09IDAgfHwgbWluID09PSBCaWdJbnQoMCkpIHtcbiAgICAgICAgcmFuZ2UgPSBgPj0gMCR7bn0gYW5kIDwgMiR7bn0gKiogJHsoYnl0ZUxlbmd0aDIgKyAxKSAqIDh9JHtufWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZSA9IGA+PSAtKDIke259ICoqICR7KGJ5dGVMZW5ndGgyICsgMSkgKiA4IC0gMX0ke259KSBhbmQgPCAyICoqICR7XG4gICAgICAgICAgKGJ5dGVMZW5ndGgyICsgMSkgKiA4IC0gMVxuICAgICAgICB9JHtufWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlID0gYD49ICR7bWlufSR7bn0gYW5kIDw9ICR7bWF4fSR7bn1gO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX09VVF9PRl9SQU5HRShcInZhbHVlXCIsIHJhbmdlLCB2YWx1ZSk7XG4gIH1cbiAgY2hlY2tCb3VuZHMoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgyKTtcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5O1xuICBsZXQgY29kZVBvaW50O1xuICBjb25zdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICBsZXQgbGVhZFN1cnJvZ2F0ZSA9IG51bGw7XG4gIGNvbnN0IGJ5dGVzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoY29kZVBvaW50ID4gNTUyOTUgJiYgY29kZVBvaW50IDwgNTczNDQpIHtcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICBpZiAoY29kZVBvaW50ID4gNTYzMTkpIHtcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIHtcbiAgICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIHtcbiAgICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNvZGVQb2ludCA8IDU2MzIwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkge1xuICAgICAgICAgIGJ5dGVzLnB1c2goMjM5LCAxOTEsIDE4OSk7XG4gICAgICAgIH1cbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDU1Mjk2IDw8IDEwIHwgY29kZVBvaW50IC0gNTYzMjApICsgNjU1MzY7XG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIHtcbiAgICAgICAgYnl0ZXMucHVzaCgyMzksIDE5MSwgMTg5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGw7XG4gICAgaWYgKGNvZGVQb2ludCA8IDEyOCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludCk7XG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAyMDQ4KSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50ID4+IDYgfCAxOTIsIGNvZGVQb2ludCAmIDYzIHwgMTI4KTtcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDY1NTM2KSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAxMiB8IDIyNCxcbiAgICAgICAgY29kZVBvaW50ID4+IDYgJiA2MyB8IDEyOCxcbiAgICAgICAgY29kZVBvaW50ICYgNjMgfCAxMjgsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMTExNDExMikge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMTggfCAyNDAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAxMiAmIDYzIHwgMTI4LFxuICAgICAgICBjb2RlUG9pbnQgPj4gNiAmIDYzIHwgMTI4LFxuICAgICAgICBjb2RlUG9pbnQgJiA2MyB8IDEyOCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyKHNyYywgZHN0LCBvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IHNyYy5sZW5ndGggOiBieXRlTGVuZ3RoO1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoIHx8IGkgPj0gc3JjLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXTtcbiAgfVxuICByZXR1cm4gaTtcbn1cblxuZnVuY3Rpb24gaXNJbnN0YW5jZShvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHxcbiAgICBvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lO1xufVxuXG5jb25zdCBoZXhTbGljZUxvb2t1cFRhYmxlID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBhbHBoYWJldCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBjb25zdCB0YWJsZSA9IG5ldyBBcnJheSgyNTYpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICBjb25zdCBpMTYgPSBpICogMTY7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICB0YWJsZVtpMTYgKyBqXSA9IGFscGhhYmV0W2ldICsgYWxwaGFiZXRbal07XG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZTtcbn0oKTtcblxuZnVuY3Rpb24gZGVmaW5lQmlnSW50TWV0aG9kKGZuKSB7XG4gIHJldHVybiB0eXBlb2YgQmlnSW50ID09PSBcInVuZGVmaW5lZFwiID8gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCA6IGZuO1xufVxuXG5mdW5jdGlvbiBCdWZmZXJCaWdJbnROb3REZWZpbmVkKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgbm90IHN1cHBvcnRlZFwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IGF0b2IgPSBnbG9iYWxUaGlzLmF0b2I7XG5leHBvcnQgY29uc3QgQmxvYiA9IGdsb2JhbFRoaXMuQmxvYjtcbmV4cG9ydCBjb25zdCBidG9hID0gZ2xvYmFsVGhpcy5idG9hO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGF0b2IsXG4gIGJ0b2EsXG4gIEJsb2IsXG4gIEJ1ZmZlcixcbiAgY29uc3RhbnRzLFxuICBrTWF4TGVuZ3RoLFxuICBrU3RyaW5nTWF4TGVuZ3RoLFxuICBTbG93QnVmZmVyLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSBcIi4vaW50ZXJuYWwvdXRpbC5tanNcIjtcbmltcG9ydCB7IGNhbGxiYWNraWZ5IH0gZnJvbSBcIi4vX3V0aWwvX3V0aWxfY2FsbGJhY2tpZnkudHNcIjtcbmltcG9ydCB7IGRlYnVnbG9nIH0gZnJvbSBcIi4vaW50ZXJuYWwvdXRpbC9kZWJ1Z2xvZy50c1wiO1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSBcIi4vaW50ZXJuYWwvdXRpbC5tanNcIjtcbmltcG9ydCB7XG4gIGZvcm1hdCxcbiAgZm9ybWF0V2l0aE9wdGlvbnMsXG4gIGluc3BlY3QsXG4gIHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyxcbn0gZnJvbSBcIi4vaW50ZXJuYWwvdXRpbC9pbnNwZWN0Lm1qc1wiO1xuaW1wb3J0IHsgY29kZXMgfSBmcm9tIFwiLi9pbnRlcm5hbC9lcnJvcl9jb2Rlcy50c1wiO1xuaW1wb3J0IHsgZXJyb3JNYXAgfSBmcm9tIFwiLi9pbnRlcm5hbF9iaW5kaW5nL3V2LnRzXCI7XG5pbXBvcnQgdHlwZXMgZnJvbSBcIi4vdXRpbC90eXBlcy50c1wiO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIi4vYnVmZmVyLnRzXCI7XG5pbXBvcnQgeyBpc0RlZXBTdHJpY3RFcXVhbCB9IGZyb20gXCIuL2ludGVybmFsL3V0aWwvY29tcGFyaXNvbnMudHNcIjtcblxuZXhwb3J0IHtcbiAgY2FsbGJhY2tpZnksXG4gIGRlYnVnbG9nLFxuICBkZXByZWNhdGUsXG4gIGZvcm1hdCxcbiAgZm9ybWF0V2l0aE9wdGlvbnMsXG4gIGluc3BlY3QsXG4gIHByb21pc2lmeSxcbiAgc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzLFxuICB0eXBlcyxcbn07XG5cbmNvbnN0IE51bWJlcklzU2FmZUludGVnZXIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcjtcblxuLyoqIEBkZXByZWNhdGVkIC0gdXNlIGBBcnJheS5pc0FycmF5KClgIGluc3RlYWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAtIHVzZSBgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW5gIGluc3RlYWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8IHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbjtcbn1cblxuLyoqIEBkZXByZWNhdGVkIC0gdXNlIGB2YWx1ZSA9PT0gbnVsbGAgaW5zdGVhZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bGwodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgLSB1c2UgYHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWRgIGluc3RlYWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAtIHVzZSBgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAtIHVzZSBgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAtIHVzZSBgdHlwZW9mIHZhbHVlID09PSBcInN5bWJvbFwiYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3ltYm9sXCI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAtIHVzZSBgdmFsdWUgPT09IHVuZGVmaW5lZGAgaW5zdGVhZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuLyoqIEBkZXByZWNhdGVkIC0gdXNlIGB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCJgIGluc3RlYWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn1cblxuLyoqIEBkZXByZWNhdGVkIC0gdXNlIGBlIGluc3RhbmNlb2YgRXJyb3JgIGluc3RlYWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvcihlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRXJyb3I7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAtIHVzZSBgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJgIGluc3RlYWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgdXRpbC50eXBlcy5SZWdFeHAoKSBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlcy5pc1JlZ0V4cCh2YWx1ZSk7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgdXRpbC50eXBlcy5pc0RhdGUoKSBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZXMuaXNEYXRlKHZhbHVlKTtcbn1cblxuLyoqIEBkZXByZWNhdGVkIC0gdXNlIGB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKWAgaW5zdGVhZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlID09PSBudWxsIHx8ICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpXG4gICk7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAgVXNlIEJ1ZmZlci5pc0J1ZmZlcigpIGluc3RlYWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCdWZmZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSk7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgT2JqZWN0LmFzc2lnbigpIGluc3RlYWQuICovXG5leHBvcnQgZnVuY3Rpb24gX2V4dGVuZChcbiAgdGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc291cmNlOiB1bmtub3duLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBzb3VyY2UgaXNuJ3QgYW4gb2JqZWN0XG4gIGlmIChzb3VyY2UgPT09IG51bGwgfHwgdHlwZW9mIHNvdXJjZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHRhcmdldDtcblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlISk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB0YXJnZXRba2V5c1tpXV0gPSAoc291cmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXlzW2ldXTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzeXN0ZW0gZXJyb3IgbmFtZSBmcm9tIGFuIGVycm9yIGNvZGUgbnVtYmVyLlxuICogQHBhcmFtIGNvZGUgZXJyb3IgY29kZSBudW1iZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN5c3RlbUVycm9yTmFtZShjb2RlOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIGNvZGUgIT09IFwibnVtYmVyXCIpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJlcnJcIiwgXCJudW1iZXJcIiwgY29kZSk7XG4gIH1cbiAgaWYgKGNvZGUgPj0gMCB8fCAhTnVtYmVySXNTYWZlSW50ZWdlcihjb2RlKSkge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfT1VUX09GX1JBTkdFKFwiZXJyXCIsIFwiYSBuZWdhdGl2ZSBpbnRlZ2VyXCIsIGNvZGUpO1xuICB9XG4gIHJldHVybiBlcnJvck1hcC5nZXQoY29kZSk/LlswXTtcbn1cblxuLyoqXG4gKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3V0aWwuaHRtbCN1dGlsX3V0aWxfaW5oZXJpdHNfY29uc3RydWN0b3Jfc3VwZXJjb25zdHJ1Y3RvclxuICogQHBhcmFtIGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGUgcHJvdG90eXBlLlxuICogQHBhcmFtIHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5oZXJpdHM8VCwgVT4oXG4gIGN0b3I6IG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBULFxuICBzdXBlckN0b3I6IG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBVLFxuKSB7XG4gIGlmIChjdG9yID09PSB1bmRlZmluZWQgfHwgY3RvciA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRShcImN0b3JcIiwgXCJGdW5jdGlvblwiLCBjdG9yKTtcbiAgfVxuXG4gIGlmIChzdXBlckN0b3IgPT09IHVuZGVmaW5lZCB8fCBzdXBlckN0b3IgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJzdXBlckN0b3JcIiwgXCJGdW5jdGlvblwiLCBzdXBlckN0b3IpO1xuICB9XG5cbiAgaWYgKHN1cGVyQ3Rvci5wcm90b3R5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBjb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICAgIFwic3VwZXJDdG9yLnByb3RvdHlwZVwiLFxuICAgICAgXCJPYmplY3RcIixcbiAgICAgIHN1cGVyQ3Rvci5wcm90b3R5cGUsXG4gICAgKTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3RvciwgXCJzdXBlcl9cIiwge1xuICAgIHZhbHVlOiBzdXBlckN0b3IsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICB9KTtcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGN0b3IucHJvdG90eXBlLCBzdXBlckN0b3IucHJvdG90eXBlKTtcbn1cblxuaW1wb3J0IHsgX1RleHREZWNvZGVyLCBfVGV4dEVuY29kZXIgfSBmcm9tIFwiLi9fdXRpbHMudHNcIjtcblxuLyoqIFRoZSBnbG9iYWwgVGV4dERlY29kZXIgKi9cbmV4cG9ydCB0eXBlIFRleHREZWNvZGVyID0gaW1wb3J0KFwiLi9fdXRpbHMudHNcIikuX1RleHREZWNvZGVyO1xuZXhwb3J0IGNvbnN0IFRleHREZWNvZGVyID0gX1RleHREZWNvZGVyO1xuXG4vKiogVGhlIGdsb2JhbCBUZXh0RW5jb2RlciAqL1xuZXhwb3J0IHR5cGUgVGV4dEVuY29kZXIgPSBpbXBvcnQoXCIuL191dGlscy50c1wiKS5fVGV4dEVuY29kZXI7XG5leHBvcnQgY29uc3QgVGV4dEVuY29kZXIgPSBfVGV4dEVuY29kZXI7XG5cbmZ1bmN0aW9uIHBhZChuOiBudW1iZXIpIHtcbiAgcmV0dXJuIG4udG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7XG59XG5cbmNvbnN0IG1vbnRocyA9IFtcbiAgXCJKYW5cIixcbiAgXCJGZWJcIixcbiAgXCJNYXJcIixcbiAgXCJBcHJcIixcbiAgXCJNYXlcIixcbiAgXCJKdW5cIixcbiAgXCJKdWxcIixcbiAgXCJBdWdcIixcbiAgXCJTZXBcIixcbiAgXCJPY3RcIixcbiAgXCJOb3ZcIixcbiAgXCJEZWNcIixcbl07XG5cbi8qKlxuICogQHJldHVybnMgMjYgRmViIDE2OjE5OjM0XG4gKi9cbmZ1bmN0aW9uIHRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICBjb25zdCBkID0gbmV3IERhdGUoKTtcbiAgY29uc3QgdCA9IFtcbiAgICBwYWQoZC5nZXRIb3VycygpKSxcbiAgICBwYWQoZC5nZXRNaW51dGVzKCkpLFxuICAgIHBhZChkLmdldFNlY29uZHMoKSksXG4gIF0uam9pbihcIjpcIik7XG4gIHJldHVybiBgJHsoZC5nZXREYXRlKCkpfSAke21vbnRoc1soZCkuZ2V0TW9udGgoKV19ICR7dH1gO1xufVxuXG4vKipcbiAqIExvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbiAqIEBkZXByZWNhdGVkXG4gKi9cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gbG9nKC4uLmFyZ3M6IGFueVtdKSB7XG4gIGNvbnNvbGUubG9nKFwiJXMgLSAlc1wiLCB0aW1lc3RhbXAoKSwgZm9ybWF0KC4uLmFyZ3MpKTtcbn1cblxuZXhwb3J0IHsgaXNEZWVwU3RyaWN0RXF1YWwgfTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBmb3JtYXQsXG4gIGZvcm1hdFdpdGhPcHRpb25zLFxuICBpbnNwZWN0LFxuICBpc0FycmF5LFxuICBpc0Jvb2xlYW4sXG4gIGlzTnVsbCxcbiAgaXNOdWxsT3JVbmRlZmluZWQsXG4gIGlzTnVtYmVyLFxuICBpc1N0cmluZyxcbiAgaXNTeW1ib2wsXG4gIGlzVW5kZWZpbmVkLFxuICBpc09iamVjdCxcbiAgaXNFcnJvcixcbiAgaXNGdW5jdGlvbixcbiAgaXNSZWdFeHAsXG4gIGlzRGF0ZSxcbiAgaXNQcmltaXRpdmUsXG4gIGlzQnVmZmVyLFxuICBfZXh0ZW5kLFxuICBnZXRTeXN0ZW1FcnJvck5hbWUsXG4gIGRlcHJlY2F0ZSxcbiAgY2FsbGJhY2tpZnksXG4gIHByb21pc2lmeSxcbiAgaW5oZXJpdHMsXG4gIHR5cGVzLFxuICBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMsXG4gIFRleHREZWNvZGVyLFxuICBUZXh0RW5jb2RlcixcbiAgbG9nLFxuICBkZWJ1Z2xvZyxcbiAgaXNEZWVwU3RyaWN0RXF1YWwsXG59O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgTm9kZS5qcyBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBMaWNlbnNlLlxuLyoqIE5PVCBJTVBMRU1FTlRFRFxuICogRVJSX01BTklGRVNUX0FTU0VSVF9JTlRFR1JJVFlcbiAqIEVSUl9RVUlDU0VTU0lPTl9WRVJTSU9OX05FR09USUFUSU9OXG4gKiBFUlJfUkVRVUlSRV9FU01cbiAqIEVSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSURcbiAqIEVSUl9XT1JLRVJfSU5WQUxJRF9FWEVDX0FSR1ZcbiAqIEVSUl9XT1JLRVJfUEFUSFxuICogRVJSX1FVSUNfRVJST1JcbiAqIEVSUl9TWVNURU1fRVJST1IgLy9TeXN0ZW0gZXJyb3IsIHNob3VsZG4ndCBldmVyIGhhcHBlbiBpbnNpZGUgRGVub1xuICogRVJSX1RUWV9JTklUX0ZBSUxFRCAvL1N5c3RlbSBlcnJvciwgc2hvdWxkbid0IGV2ZXIgaGFwcGVuIGluc2lkZSBEZW5vXG4gKiBFUlJfSU5WQUxJRF9QQUNLQUdFX0NPTkZJRyAvLyBwYWNrYWdlLmpzb24gc3R1ZmYsIHByb2JhYmx5IHVzZWxlc3NcbiAqL1xuXG5pbXBvcnQgeyBnZXRTeXN0ZW1FcnJvck5hbWUgfSBmcm9tIFwiLi4vdXRpbC50c1wiO1xuaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gXCIuLi9pbnRlcm5hbC91dGlsL2luc3BlY3QubWpzXCI7XG5pbXBvcnQgeyBjb2RlcyB9IGZyb20gXCIuL2Vycm9yX2NvZGVzLnRzXCI7XG5pbXBvcnQge1xuICBjb2RlTWFwLFxuICBlcnJvck1hcCxcbiAgbWFwU3lzRXJybm9Ub1V2RXJybm8sXG59IGZyb20gXCIuLi9pbnRlcm5hbF9iaW5kaW5nL3V2LnRzXCI7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiLi4vLi4vX3V0aWwvYXNzZXJ0LnRzXCI7XG5pbXBvcnQgeyBpc1dpbmRvd3MgfSBmcm9tIFwiLi4vLi4vX3V0aWwvb3MudHNcIjtcbmltcG9ydCB7IG9zIGFzIG9zQ29uc3RhbnRzIH0gZnJvbSBcIi4uL2ludGVybmFsX2JpbmRpbmcvY29uc3RhbnRzLnRzXCI7XG5jb25zdCB7XG4gIGVycm5vOiB7IEVOT1RESVIsIEVOT0VOVCB9LFxufSA9IG9zQ29uc3RhbnRzO1xuaW1wb3J0IHsgaGlkZVN0YWNrRnJhbWVzIH0gZnJvbSBcIi4vaGlkZV9zdGFja19mcmFtZXMudHNcIjtcblxuZXhwb3J0IHsgZXJyb3JNYXAgfTtcblxuY29uc3Qga0lzTm9kZUVycm9yID0gU3ltYm9sKFwia0lzTm9kZUVycm9yXCIpO1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZjNlYjIyNC9saWIvaW50ZXJuYWwvZXJyb3JzLmpzXG4gKi9cbmNvbnN0IGNsYXNzUmVnRXhwID0gL14oW0EtWl1bYS16MC05XSopKyQvO1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZjNlYjIyNC9saWIvaW50ZXJuYWwvZXJyb3JzLmpzXG4gKiBAZGVzY3JpcHRpb24gU29ydGVkIGJ5IGEgcm91Z2ggZXN0aW1hdGUgb24gbW9zdCBmcmVxdWVudGx5IHVzZWQgZW50cmllcy5cbiAqL1xuY29uc3Qga1R5cGVzID0gW1xuICBcInN0cmluZ1wiLFxuICBcImZ1bmN0aW9uXCIsXG4gIFwibnVtYmVyXCIsXG4gIFwib2JqZWN0XCIsXG4gIC8vIEFjY2VwdCAnRnVuY3Rpb24nIGFuZCAnT2JqZWN0JyBhcyBhbHRlcm5hdGl2ZSB0byB0aGUgbG93ZXIgY2FzZWQgdmVyc2lvbi5cbiAgXCJGdW5jdGlvblwiLFxuICBcIk9iamVjdFwiLFxuICBcImJvb2xlYW5cIixcbiAgXCJiaWdpbnRcIixcbiAgXCJzeW1ib2xcIixcbl07XG5cbi8vIE5vZGUgdXNlcyBhbiBBYm9ydEVycm9yIHRoYXQgaXNuJ3QgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgRE9NRXhjZXB0aW9uXG4vLyB0byBtYWtlIHVzYWdlIG9mIHRoZSBlcnJvciBpbiB1c2VybGFuZCBhbmQgcmVhZGFibGUtc3RyZWFtIGVhc2llci5cbi8vIEl0IGlzIGEgcmVndWxhciBlcnJvciB3aXRoIGAuY29kZWAgYW5kIGAubmFtZWAuXG5leHBvcnQgY2xhc3MgQWJvcnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29kZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZFwiKTtcbiAgICB0aGlzLmNvZGUgPSBcIkFCT1JUX0VSUlwiO1xuICAgIHRoaXMubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICB9XG59XG5cbmxldCBtYXhTdGFja19FcnJvck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbmxldCBtYXhTdGFja19FcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGBlcnIubmFtZWAgYW5kIGBlcnIubWVzc2FnZWAgYXJlIGVxdWFsIHRvIGVuZ2luZS1zcGVjaWZpY1xuICogdmFsdWVzIGluZGljYXRpbmcgbWF4IGNhbGwgc3RhY2sgc2l6ZSBoYXMgYmVlbiBleGNlZWRlZC5cbiAqIFwiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIiBpbiBWOC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RhY2tPdmVyZmxvd0Vycm9yKGVycjogRXJyb3IpOiBib29sZWFuIHtcbiAgaWYgKG1heFN0YWNrX0Vycm9yTWVzc2FnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8taW5uZXItZGVjbGFyYXRpb25zXG4gICAgICBmdW5jdGlvbiBvdmVyZmxvd1N0YWNrKCkge1xuICAgICAgICBvdmVyZmxvd1N0YWNrKCk7XG4gICAgICB9XG4gICAgICBvdmVyZmxvd1N0YWNrKCk7XG4gICAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBtYXhTdGFja19FcnJvck1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgIG1heFN0YWNrX0Vycm9yTmFtZSA9IGVyci5uYW1lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnIgJiYgZXJyLm5hbWUgPT09IG1heFN0YWNrX0Vycm9yTmFtZSAmJlxuICAgIGVyci5tZXNzYWdlID09PSBtYXhTdGFja19FcnJvck1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGFkZE51bWVyaWNhbFNlcGFyYXRvcih2YWw6IHN0cmluZykge1xuICBsZXQgcmVzID0gXCJcIjtcbiAgbGV0IGkgPSB2YWwubGVuZ3RoO1xuICBjb25zdCBzdGFydCA9IHZhbFswXSA9PT0gXCItXCIgPyAxIDogMDtcbiAgZm9yICg7IGkgPj0gc3RhcnQgKyA0OyBpIC09IDMpIHtcbiAgICByZXMgPSBgXyR7dmFsLnNsaWNlKGkgLSAzLCBpKX0ke3Jlc31gO1xuICB9XG4gIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaSl9JHtyZXN9YDtcbn1cblxuY29uc3QgY2FwdHVyZUxhcmdlclN0YWNrVHJhY2UgPSBoaWRlU3RhY2tGcmFtZXMoXG4gIGZ1bmN0aW9uIGNhcHR1cmVMYXJnZXJTdGFja1RyYWNlKGVycikge1xuICAgIC8vIEB0cy1pZ25vcmUgdGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIGxpYi5kb20uZC50c1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycik7XG5cbiAgICByZXR1cm4gZXJyO1xuICB9LFxuKTtcblxuZXhwb3J0IGludGVyZmFjZSBFcnJub0V4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgZXJybm8/OiBudW1iZXI7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHN5c2NhbGw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGFuIGVycm9yIGNvbXBhdGlibGUgd2l0aCBlcnJvcnMgcHJvZHVjZWQgaW4gdGhlIEMrK1xuICogVGhpcyBmdW5jdGlvbiBzaG91bGQgcmVwbGFjZSB0aGUgZGVwcmVjYXRlZFxuICogYGV4Y2VwdGlvbldpdGhIb3N0UG9ydCgpYCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXJyIEEgbGlidXYgZXJyb3IgbnVtYmVyXG4gKiBAcGFyYW0gc3lzY2FsbFxuICogQHBhcmFtIGFkZHJlc3NcbiAqIEBwYXJhbSBwb3J0XG4gKiBAcmV0dXJuIFRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IHV2RXhjZXB0aW9uV2l0aEhvc3RQb3J0ID0gaGlkZVN0YWNrRnJhbWVzKFxuICBmdW5jdGlvbiB1dkV4Y2VwdGlvbldpdGhIb3N0UG9ydChcbiAgICBlcnI6IG51bWJlcixcbiAgICBzeXNjYWxsOiBzdHJpbmcsXG4gICAgYWRkcmVzcz86IHN0cmluZyB8IG51bGwsXG4gICAgcG9ydD86IG51bWJlciB8IG51bGwsXG4gICkge1xuICAgIGNvbnN0IHsgMDogY29kZSwgMTogdXZtc2cgfSA9IHV2RXJybWFwR2V0KGVycikgfHwgdXZVbm1hcHBlZEVycm9yO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtzeXNjYWxsfSAke2NvZGV9OiAke3V2bXNnfWA7XG4gICAgbGV0IGRldGFpbHMgPSBcIlwiO1xuXG4gICAgaWYgKHBvcnQgJiYgcG9ydCA+IDApIHtcbiAgICAgIGRldGFpbHMgPSBgICR7YWRkcmVzc306JHtwb3J0fWA7XG4gICAgfSBlbHNlIGlmIChhZGRyZXNzKSB7XG4gICAgICBkZXRhaWxzID0gYCAke2FkZHJlc3N9YDtcbiAgICB9XG5cbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IGV4OiBhbnkgPSBuZXcgRXJyb3IoYCR7bWVzc2FnZX0ke2RldGFpbHN9YCk7XG4gICAgZXguY29kZSA9IGNvZGU7XG4gICAgZXguZXJybm8gPSBlcnI7XG4gICAgZXguc3lzY2FsbCA9IHN5c2NhbGw7XG4gICAgZXguYWRkcmVzcyA9IGFkZHJlc3M7XG5cbiAgICBpZiAocG9ydCkge1xuICAgICAgZXgucG9ydCA9IHBvcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcHR1cmVMYXJnZXJTdGFja1RyYWNlKGV4KTtcbiAgfSxcbik7XG5cbi8qKlxuICogVGhpcyB1c2VkIHRvIGJlIGB1dGlsLl9lcnJub0V4Y2VwdGlvbigpYC5cbiAqXG4gKiBAcGFyYW0gZXJyIEEgbGlidXYgZXJyb3IgbnVtYmVyXG4gKiBAcGFyYW0gc3lzY2FsbFxuICogQHBhcmFtIG9yaWdpbmFsXG4gKiBAcmV0dXJuIEEgYEVycm5vRXhjZXB0aW9uYFxuICovXG5leHBvcnQgY29uc3QgZXJybm9FeGNlcHRpb24gPSBoaWRlU3RhY2tGcmFtZXMoZnVuY3Rpb24gZXJybm9FeGNlcHRpb24oXG4gIGVycixcbiAgc3lzY2FsbCxcbiAgb3JpZ2luYWw/LFxuKTogRXJybm9FeGNlcHRpb24ge1xuICBjb25zdCBjb2RlID0gZ2V0U3lzdGVtRXJyb3JOYW1lKGVycik7XG4gIGNvbnN0IG1lc3NhZ2UgPSBvcmlnaW5hbFxuICAgID8gYCR7c3lzY2FsbH0gJHtjb2RlfSAke29yaWdpbmFsfWBcbiAgICA6IGAke3N5c2NhbGx9ICR7Y29kZX1gO1xuXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IGV4OiBhbnkgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIGV4LmVycm5vID0gZXJyO1xuICBleC5jb2RlID0gY29kZTtcbiAgZXguc3lzY2FsbCA9IHN5c2NhbGw7XG5cbiAgcmV0dXJuIGNhcHR1cmVMYXJnZXJTdGFja1RyYWNlKGV4KTtcbn0pO1xuXG5mdW5jdGlvbiB1dkVycm1hcEdldChuYW1lOiBudW1iZXIpIHtcbiAgcmV0dXJuIGVycm9yTWFwLmdldChuYW1lKTtcbn1cblxuY29uc3QgdXZVbm1hcHBlZEVycm9yID0gW1wiVU5LTk9XTlwiLCBcInVua25vd24gZXJyb3JcIl07XG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGFuIGVycm9yIGNvbXBhdGlibGUgd2l0aCBlcnJvcnMgcHJvZHVjZWQgaW4gdGhlIEMrK1xuICogZnVuY3Rpb24gVVZFeGNlcHRpb24gdXNpbmcgYSBjb250ZXh0IG9iamVjdCB3aXRoIGRhdGEgYXNzZW1ibGVkIGluIEMrKy5cbiAqIFRoZSBnb2FsIGlzIHRvIG1pZ3JhdGUgdGhlbSB0byBFUlJfKiBlcnJvcnMgbGF0ZXIgd2hlbiBjb21wYXRpYmlsaXR5IGlzXG4gKiBub3QgYSBjb25jZXJuLlxuICpcbiAqIEBwYXJhbSBjdHhcbiAqIEByZXR1cm4gVGhlIGVycm9yLlxuICovXG5leHBvcnQgY29uc3QgdXZFeGNlcHRpb24gPSBoaWRlU3RhY2tGcmFtZXMoZnVuY3Rpb24gdXZFeGNlcHRpb24oY3R4KSB7XG4gIGNvbnN0IHsgMDogY29kZSwgMTogdXZtc2cgfSA9IHV2RXJybWFwR2V0KGN0eC5lcnJubykgfHwgdXZVbm1hcHBlZEVycm9yO1xuXG4gIGxldCBtZXNzYWdlID0gYCR7Y29kZX06ICR7Y3R4Lm1lc3NhZ2UgfHwgdXZtc2d9LCAke2N0eC5zeXNjYWxsfWA7XG5cbiAgbGV0IHBhdGg7XG4gIGxldCBkZXN0O1xuXG4gIGlmIChjdHgucGF0aCkge1xuICAgIHBhdGggPSBjdHgucGF0aC50b1N0cmluZygpO1xuICAgIG1lc3NhZ2UgKz0gYCAnJHtwYXRofSdgO1xuICB9XG4gIGlmIChjdHguZGVzdCkge1xuICAgIGRlc3QgPSBjdHguZGVzdC50b1N0cmluZygpO1xuICAgIG1lc3NhZ2UgKz0gYCAtPiAnJHtkZXN0fSdgO1xuICB9XG5cbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgY29uc3QgZXJyOiBhbnkgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIE9iamVjdC5rZXlzKGN0eCkpIHtcbiAgICBpZiAocHJvcCA9PT0gXCJtZXNzYWdlXCIgfHwgcHJvcCA9PT0gXCJwYXRoXCIgfHwgcHJvcCA9PT0gXCJkZXN0XCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGVycltwcm9wXSA9IGN0eFtwcm9wXTtcbiAgfVxuXG4gIGVyci5jb2RlID0gY29kZTtcblxuICBpZiAocGF0aCkge1xuICAgIGVyci5wYXRoID0gcGF0aDtcbiAgfVxuXG4gIGlmIChkZXN0KSB7XG4gICAgZXJyLmRlc3QgPSBkZXN0O1xuICB9XG5cbiAgcmV0dXJuIGNhcHR1cmVMYXJnZXJTdGFja1RyYWNlKGVycik7XG59KTtcblxuLyoqXG4gKiBEZXByZWNhdGVkLCBuZXcgZnVuY3Rpb24gaXMgYHV2RXhjZXB0aW9uV2l0aEhvc3RQb3J0KClgXG4gKiBOZXcgZnVuY3Rpb24gYWRkZWQgdGhlIGVycm9yIGRlc2NyaXB0aW9uIGRpcmVjdGx5XG4gKiBmcm9tIEMrKy4gdGhpcyBtZXRob2QgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gKiBAcGFyYW0gZXJyIEEgbGlidXYgZXJyb3IgbnVtYmVyXG4gKiBAcGFyYW0gc3lzY2FsbFxuICogQHBhcmFtIGFkZHJlc3NcbiAqIEBwYXJhbSBwb3J0XG4gKiBAcGFyYW0gYWRkaXRpb25hbFxuICovXG5leHBvcnQgY29uc3QgZXhjZXB0aW9uV2l0aEhvc3RQb3J0ID0gaGlkZVN0YWNrRnJhbWVzKFxuICBmdW5jdGlvbiBleGNlcHRpb25XaXRoSG9zdFBvcnQoXG4gICAgZXJyOiBudW1iZXIsXG4gICAgc3lzY2FsbDogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBwb3J0OiBudW1iZXIsXG4gICAgYWRkaXRpb25hbD86IHN0cmluZyxcbiAgKSB7XG4gICAgY29uc3QgY29kZSA9IGdldFN5c3RlbUVycm9yTmFtZShlcnIpO1xuICAgIGxldCBkZXRhaWxzID0gXCJcIjtcblxuICAgIGlmIChwb3J0ICYmIHBvcnQgPiAwKSB7XG4gICAgICBkZXRhaWxzID0gYCAke2FkZHJlc3N9OiR7cG9ydH1gO1xuICAgIH0gZWxzZSBpZiAoYWRkcmVzcykge1xuICAgICAgZGV0YWlscyA9IGAgJHthZGRyZXNzfWA7XG4gICAgfVxuXG4gICAgaWYgKGFkZGl0aW9uYWwpIHtcbiAgICAgIGRldGFpbHMgKz0gYCAtIExvY2FsICgke2FkZGl0aW9uYWx9KWA7XG4gICAgfVxuXG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBleDogYW55ID0gbmV3IEVycm9yKGAke3N5c2NhbGx9ICR7Y29kZX0ke2RldGFpbHN9YCk7XG4gICAgZXguZXJybm8gPSBlcnI7XG4gICAgZXguY29kZSA9IGNvZGU7XG4gICAgZXguc3lzY2FsbCA9IHN5c2NhbGw7XG4gICAgZXguYWRkcmVzcyA9IGFkZHJlc3M7XG5cbiAgICBpZiAocG9ydCkge1xuICAgICAgZXgucG9ydCA9IHBvcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhcHR1cmVMYXJnZXJTdGFja1RyYWNlKGV4KTtcbiAgfSxcbik7XG5cbi8qKlxuICogQHBhcmFtIGNvZGUgQSBsaWJ1diBlcnJvciBudW1iZXIgb3IgYSBjLWFyZXMgZXJyb3IgY29kZVxuICogQHBhcmFtIHN5c2NhbGxcbiAqIEBwYXJhbSBob3N0bmFtZVxuICovXG5leHBvcnQgY29uc3QgZG5zRXhjZXB0aW9uID0gaGlkZVN0YWNrRnJhbWVzKGZ1bmN0aW9uIChjb2RlLCBzeXNjYWxsLCBob3N0bmFtZSkge1xuICBsZXQgZXJybm87XG5cbiAgLy8gSWYgYGNvZGVgIGlzIG9mIHR5cGUgbnVtYmVyLCBpdCBpcyBhIGxpYnV2IGVycm9yIG51bWJlciwgZWxzZSBpdCBpcyBhXG4gIC8vIGMtYXJlcyBlcnJvciBjb2RlLlxuICBpZiAodHlwZW9mIGNvZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICBlcnJubyA9IGNvZGU7XG4gICAgLy8gRU5PVEZPVU5EIGlzIG5vdCBhIHByb3BlciBQT1NJWCBlcnJvciwgYnV0IHRoaXMgZXJyb3IgaGFzIGJlZW4gaW4gcGxhY2VcbiAgICAvLyBsb25nIGVub3VnaCB0aGF0IGl0J3Mgbm90IHByYWN0aWNhbCB0byByZW1vdmUgaXQuXG4gICAgaWYgKFxuICAgICAgY29kZSA9PT0gY29kZU1hcC5nZXQoXCJFQUlfTk9EQVRBXCIpIHx8XG4gICAgICBjb2RlID09PSBjb2RlTWFwLmdldChcIkVBSV9OT05BTUVcIilcbiAgICApIHtcbiAgICAgIGNvZGUgPSBcIkVOT1RGT1VORFwiOyAvLyBGYWJyaWNhdGVkIGVycm9yIG5hbWUuXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvZGUgPSBnZXRTeXN0ZW1FcnJvck5hbWUoY29kZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGAke3N5c2NhbGx9ICR7Y29kZX0ke2hvc3RuYW1lID8gYCAke2hvc3RuYW1lfWAgOiBcIlwifWA7XG5cbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgY29uc3QgZXg6IGFueSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgZXguZXJybm8gPSBlcnJubztcbiAgZXguY29kZSA9IGNvZGU7XG4gIGV4LnN5c2NhbGwgPSBzeXNjYWxsO1xuXG4gIGlmIChob3N0bmFtZSkge1xuICAgIGV4Lmhvc3RuYW1lID0gaG9zdG5hbWU7XG4gIH1cblxuICByZXR1cm4gY2FwdHVyZUxhcmdlclN0YWNrVHJhY2UoZXgpO1xufSk7XG5cbi8qKlxuICogQWxsIGVycm9yIGluc3RhbmNlcyBpbiBOb2RlIGhhdmUgYWRkaXRpb25hbCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzXG4gKiBUaGlzIGV4cG9ydCBjbGFzcyBpcyBtZWFudCB0byBiZSBleHRlbmRlZCBieSB0aGVzZSBpbnN0YW5jZXMgYWJzdHJhY3RpbmcgbmF0aXZlIEpTIGVycm9yIGluc3RhbmNlc1xuICovXG5leHBvcnQgY2xhc3MgTm9kZUVycm9yQWJzdHJhY3Rpb24gZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIC8vVGhpcyBudW1iZXIgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlIG5hbWUgb2YgdGhpcyBjbGFzc1xuICAgIC8vMjAgY2hhcmFjdGVycyBhcyBvZiBub3dcbiAgICB0aGlzLnN0YWNrID0gdGhpcy5zdGFjayAmJiBgJHtuYW1lfSBbJHt0aGlzLmNvZGV9XSR7dGhpcy5zdGFjay5zbGljZSgyMCl9YDtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3RoaXMuY29kZX1dOiAke3RoaXMubWVzc2FnZX1gO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBOb2RlRXJyb3JBYnN0cmFjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoRXJyb3IucHJvdG90eXBlLm5hbWUsIGNvZGUsIG1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb2RlU3ludGF4RXJyb3IgZXh0ZW5kcyBOb2RlRXJyb3JBYnN0cmFjdGlvblxuICBpbXBsZW1lbnRzIFN5bnRheEVycm9yIHtcbiAgY29uc3RydWN0b3IoY29kZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihTeW50YXhFcnJvci5wcm90b3R5cGUubmFtZSwgY29kZSwgbWVzc2FnZSk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFN5bnRheEVycm9yLnByb3RvdHlwZSk7XG4gICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3RoaXMuY29kZX1dOiAke3RoaXMubWVzc2FnZX1gO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vZGVSYW5nZUVycm9yIGV4dGVuZHMgTm9kZUVycm9yQWJzdHJhY3Rpb24ge1xuICBjb25zdHJ1Y3Rvcihjb2RlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKFJhbmdlRXJyb3IucHJvdG90eXBlLm5hbWUsIGNvZGUsIG1lc3NhZ2UpO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBSYW5nZUVycm9yLnByb3RvdHlwZSk7XG4gICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3RoaXMuY29kZX1dOiAke3RoaXMubWVzc2FnZX1gO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vZGVUeXBlRXJyb3IgZXh0ZW5kcyBOb2RlRXJyb3JBYnN0cmFjdGlvbiBpbXBsZW1lbnRzIFR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoVHlwZUVycm9yLnByb3RvdHlwZS5uYW1lLCBjb2RlLCBtZXNzYWdlKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVHlwZUVycm9yLnByb3RvdHlwZSk7XG4gICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3RoaXMuY29kZX1dOiAke3RoaXMubWVzc2FnZX1gO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vZGVVUklFcnJvciBleHRlbmRzIE5vZGVFcnJvckFic3RyYWN0aW9uIGltcGxlbWVudHMgVVJJRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihjb2RlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKFVSSUVycm9yLnByb3RvdHlwZS5uYW1lLCBjb2RlLCBtZXNzYWdlKTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVVJJRXJyb3IucHJvdG90eXBlKTtcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7dGhpcy5jb2RlfV06ICR7dGhpcy5tZXNzYWdlfWA7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVTeXN0ZW1FcnJvckN0eCB7XG4gIGNvZGU6IHN0cmluZztcbiAgc3lzY2FsbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGVycm5vOiBudW1iZXI7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIGRlc3Q/OiBzdHJpbmc7XG59XG4vLyBBIHNwZWNpYWxpemVkIEVycm9yIHRoYXQgaW5jbHVkZXMgYW4gYWRkaXRpb25hbCBpbmZvIHByb3BlcnR5IHdpdGhcbi8vIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIGNvbmRpdGlvbi5cbi8vIEl0IGhhcyB0aGUgcHJvcGVydGllcyBwcmVzZW50IGluIGEgVVZFeGNlcHRpb24gYnV0IHdpdGggYSBjdXN0b20gZXJyb3Jcbi8vIG1lc3NhZ2UgZm9sbG93ZWQgYnkgdGhlIHV2IGVycm9yIGNvZGUgYW5kIHV2IGVycm9yIG1lc3NhZ2UuXG4vLyBJdCBhbHNvIGhhcyBpdHMgb3duIGVycm9yIGNvZGUgd2l0aCB0aGUgb3JpZ2luYWwgdXYgZXJyb3IgY29udGV4dCBwdXQgaW50b1xuLy8gYGVyci5pbmZvYC5cbi8vIFRoZSBjb250ZXh0IHBhc3NlZCBpbnRvIHRoaXMgZXJyb3IgbXVzdCBoYXZlIC5jb2RlLCAuc3lzY2FsbCBhbmQgLm1lc3NhZ2UsXG4vLyBhbmQgbWF5IGhhdmUgLnBhdGggYW5kIC5kZXN0LlxuY2xhc3MgTm9kZVN5c3RlbUVycm9yIGV4dGVuZHMgTm9kZUVycm9yQWJzdHJhY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihrZXk6IHN0cmluZywgY29udGV4dDogTm9kZVN5c3RlbUVycm9yQ3R4LCBtc2dQcmVmaXg6IHN0cmluZykge1xuICAgIGxldCBtZXNzYWdlID0gYCR7bXNnUHJlZml4fTogJHtjb250ZXh0LnN5c2NhbGx9IHJldHVybmVkIGAgK1xuICAgICAgYCR7Y29udGV4dC5jb2RlfSAoJHtjb250ZXh0Lm1lc3NhZ2V9KWA7XG5cbiAgICBpZiAoY29udGV4dC5wYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCAke2NvbnRleHQucGF0aH1gO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5kZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCA9PiAke2NvbnRleHQuZGVzdH1gO1xuICAgIH1cblxuICAgIHN1cGVyKFwiU3lzdGVtRXJyb3JcIiwga2V5LCBtZXNzYWdlKTtcblxuICAgIGNhcHR1cmVMYXJnZXJTdGFja1RyYWNlKHRoaXMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuICAgICAgW2tJc05vZGVFcnJvcl06IHtcbiAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBpbmZvOiB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBlcnJubzoge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJybm87XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgY29udGV4dC5lcnJubyA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgc3lzY2FsbDoge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuc3lzY2FsbDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICBjb250ZXh0LnN5c2NhbGwgPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChjb250ZXh0LnBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwicGF0aFwiLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5wYXRoO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnRleHQucGF0aCA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dC5kZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRlc3RcIiwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZGVzdDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICBjb250ZXh0LmRlc3QgPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7dGhpcy5jb2RlfV06ICR7dGhpcy5tZXNzYWdlfWA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZVN5c3RlbUVycm9yV2l0aENvZGUoa2V5OiBzdHJpbmcsIG1zZ1ByZml4OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNsYXNzIE5vZGVFcnJvciBleHRlbmRzIE5vZGVTeXN0ZW1FcnJvciB7XG4gICAgY29uc3RydWN0b3IoY3R4OiBOb2RlU3lzdGVtRXJyb3JDdHgpIHtcbiAgICAgIHN1cGVyKGtleSwgY3R4LCBtc2dQcmZpeCk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgRVJSX0ZTX0VJU0RJUiA9IG1ha2VTeXN0ZW1FcnJvcldpdGhDb2RlKFxuICBcIkVSUl9GU19FSVNESVJcIixcbiAgXCJQYXRoIGlzIGEgZGlyZWN0b3J5XCIsXG4pO1xuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkQXJnVHlwZShcbiAgbmFtZTogc3RyaW5nLFxuICBleHBlY3RlZDogc3RyaW5nIHwgc3RyaW5nW10sXG4pOiBzdHJpbmcge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9mM2ViMjI0L2xpYi9pbnRlcm5hbC9lcnJvcnMuanMjTDEwMzctTDEwODdcbiAgZXhwZWN0ZWQgPSBBcnJheS5pc0FycmF5KGV4cGVjdGVkKSA/IGV4cGVjdGVkIDogW2V4cGVjdGVkXTtcbiAgbGV0IG1zZyA9IFwiVGhlIFwiO1xuICBpZiAobmFtZS5lbmRzV2l0aChcIiBhcmd1bWVudFwiKSkge1xuICAgIC8vIEZvciBjYXNlcyBsaWtlICdmaXJzdCBhcmd1bWVudCdcbiAgICBtc2cgKz0gYCR7bmFtZX0gYDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0eXBlID0gbmFtZS5pbmNsdWRlcyhcIi5cIikgPyBcInByb3BlcnR5XCIgOiBcImFyZ3VtZW50XCI7XG4gICAgbXNnICs9IGBcIiR7bmFtZX1cIiAke3R5cGV9IGA7XG4gIH1cbiAgbXNnICs9IFwibXVzdCBiZSBcIjtcblxuICBjb25zdCB0eXBlcyA9IFtdO1xuICBjb25zdCBpbnN0YW5jZXMgPSBbXTtcbiAgY29uc3Qgb3RoZXIgPSBbXTtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBleHBlY3RlZCkge1xuICAgIGlmIChrVHlwZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICB0eXBlcy5wdXNoKHZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NSZWdFeHAudGVzdCh2YWx1ZSkpIHtcbiAgICAgIGluc3RhbmNlcy5wdXNoKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3RoZXIucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3BlY2lhbCBoYW5kbGUgYG9iamVjdGAgaW4gY2FzZSBvdGhlciBpbnN0YW5jZXMgYXJlIGFsbG93ZWQgdG8gb3V0bGluZVxuICAvLyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBlYWNoIG90aGVyLlxuICBpZiAoaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBwb3MgPSB0eXBlcy5pbmRleE9mKFwib2JqZWN0XCIpO1xuICAgIGlmIChwb3MgIT09IC0xKSB7XG4gICAgICB0eXBlcy5zcGxpY2UocG9zLCAxKTtcbiAgICAgIGluc3RhbmNlcy5wdXNoKFwiT2JqZWN0XCIpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHR5cGVzLmxlbmd0aCA+IDIpIHtcbiAgICAgIGNvbnN0IGxhc3QgPSB0eXBlcy5wb3AoKTtcbiAgICAgIG1zZyArPSBgb25lIG9mIHR5cGUgJHt0eXBlcy5qb2luKFwiLCBcIil9LCBvciAke2xhc3R9YDtcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgbXNnICs9IGBvbmUgb2YgdHlwZSAke3R5cGVzWzBdfSBvciAke3R5cGVzWzFdfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1zZyArPSBgb2YgdHlwZSAke3R5cGVzWzBdfWA7XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZXMubGVuZ3RoID4gMCB8fCBvdGhlci5sZW5ndGggPiAwKSB7XG4gICAgICBtc2cgKz0gXCIgb3IgXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKGluc3RhbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGluc3RhbmNlcy5sZW5ndGggPiAyKSB7XG4gICAgICBjb25zdCBsYXN0ID0gaW5zdGFuY2VzLnBvcCgpO1xuICAgICAgbXNnICs9IGBhbiBpbnN0YW5jZSBvZiAke2luc3RhbmNlcy5qb2luKFwiLCBcIil9LCBvciAke2xhc3R9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnICs9IGBhbiBpbnN0YW5jZSBvZiAke2luc3RhbmNlc1swXX1gO1xuICAgICAgaWYgKGluc3RhbmNlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgbXNnICs9IGAgb3IgJHtpbnN0YW5jZXNbMV19YDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG90aGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIG1zZyArPSBcIiBvciBcIjtcbiAgICB9XG4gIH1cblxuICBpZiAob3RoZXIubGVuZ3RoID4gMCkge1xuICAgIGlmIChvdGhlci5sZW5ndGggPiAyKSB7XG4gICAgICBjb25zdCBsYXN0ID0gb3RoZXIucG9wKCk7XG4gICAgICBtc2cgKz0gYG9uZSBvZiAke290aGVyLmpvaW4oXCIsIFwiKX0sIG9yICR7bGFzdH1gO1xuICAgIH0gZWxzZSBpZiAob3RoZXIubGVuZ3RoID09PSAyKSB7XG4gICAgICBtc2cgKz0gYG9uZSBvZiAke290aGVyWzBdfSBvciAke290aGVyWzFdfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvdGhlclswXS50b0xvd2VyQ2FzZSgpICE9PSBvdGhlclswXSkge1xuICAgICAgICBtc2cgKz0gXCJhbiBcIjtcbiAgICAgIH1cbiAgICAgIG1zZyArPSBgJHtvdGhlclswXX1gO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtc2c7XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9BUkdfVFlQRV9SQU5HRSBleHRlbmRzIE5vZGVSYW5nZUVycm9yIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBleHBlY3RlZDogc3RyaW5nIHwgc3RyaW5nW10sIGFjdHVhbDogdW5rbm93bikge1xuICAgIGNvbnN0IG1zZyA9IGNyZWF0ZUludmFsaWRBcmdUeXBlKG5hbWUsIGV4cGVjdGVkKTtcblxuICAgIHN1cGVyKFwiRVJSX0lOVkFMSURfQVJHX1RZUEVcIiwgYCR7bXNnfS4ke2ludmFsaWRBcmdUeXBlSGVscGVyKGFjdHVhbCl9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX0FSR19UWVBFIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgZXhwZWN0ZWQ6IHN0cmluZyB8IHN0cmluZ1tdLCBhY3R1YWw6IHVua25vd24pIHtcbiAgICBjb25zdCBtc2cgPSBjcmVhdGVJbnZhbGlkQXJnVHlwZShuYW1lLCBleHBlY3RlZCk7XG5cbiAgICBzdXBlcihcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsIGAke21zZ30uJHtpbnZhbGlkQXJnVHlwZUhlbHBlcihhY3R1YWwpfWApO1xuICB9XG5cbiAgc3RhdGljIFJhbmdlRXJyb3IgPSBFUlJfSU5WQUxJRF9BUkdfVFlQRV9SQU5HRTtcbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX0FSR19WQUxVRV9SQU5HRSBleHRlbmRzIE5vZGVSYW5nZUVycm9yIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcmVhc29uOiBzdHJpbmcgPSBcImlzIGludmFsaWRcIikge1xuICAgIGNvbnN0IHR5cGUgPSBuYW1lLmluY2x1ZGVzKFwiLlwiKSA/IFwicHJvcGVydHlcIiA6IFwiYXJndW1lbnRcIjtcbiAgICBjb25zdCBpbnNwZWN0ZWQgPSBpbnNwZWN0KHZhbHVlKTtcblxuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSU5WQUxJRF9BUkdfVkFMVUVcIixcbiAgICAgIGBUaGUgJHt0eXBlfSAnJHtuYW1lfScgJHtyZWFzb259LiBSZWNlaXZlZCAke2luc3BlY3RlZH1gLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX0FSR19WQUxVRSBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCByZWFzb246IHN0cmluZyA9IFwiaXMgaW52YWxpZFwiKSB7XG4gICAgY29uc3QgdHlwZSA9IG5hbWUuaW5jbHVkZXMoXCIuXCIpID8gXCJwcm9wZXJ0eVwiIDogXCJhcmd1bWVudFwiO1xuICAgIGNvbnN0IGluc3BlY3RlZCA9IGluc3BlY3QodmFsdWUpO1xuXG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9JTlZBTElEX0FSR19WQUxVRVwiLFxuICAgICAgYFRoZSAke3R5cGV9ICcke25hbWV9JyAke3JlYXNvbn0uIFJlY2VpdmVkICR7aW5zcGVjdGVkfWAsXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBSYW5nZUVycm9yID0gRVJSX0lOVkFMSURfQVJHX1ZBTFVFX1JBTkdFO1xufVxuXG4vLyBBIGhlbHBlciBmdW5jdGlvbiB0byBzaW1wbGlmeSBjaGVja2luZyBmb3IgRVJSX0lOVkFMSURfQVJHX1RZUEUgb3V0cHV0LlxuLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGludmFsaWRBcmdUeXBlSGVscGVyKGlucHV0OiBhbnkpIHtcbiAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICByZXR1cm4gYCBSZWNlaXZlZCAke2lucHV0fWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJmdW5jdGlvblwiICYmIGlucHV0Lm5hbWUpIHtcbiAgICByZXR1cm4gYCBSZWNlaXZlZCBmdW5jdGlvbiAke2lucHV0Lm5hbWV9YDtcbiAgfVxuICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgaWYgKGlucHV0LmNvbnN0cnVjdG9yICYmIGlucHV0LmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBgIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7aW5wdXQuY29uc3RydWN0b3IubmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gYCBSZWNlaXZlZCAke2luc3BlY3QoaW5wdXQsIHsgZGVwdGg6IC0xIH0pfWA7XG4gIH1cbiAgbGV0IGluc3BlY3RlZCA9IGluc3BlY3QoaW5wdXQsIHsgY29sb3JzOiBmYWxzZSB9KTtcbiAgaWYgKGluc3BlY3RlZC5sZW5ndGggPiAyNSkge1xuICAgIGluc3BlY3RlZCA9IGAke2luc3BlY3RlZC5zbGljZSgwLCAyNSl9Li4uYDtcbiAgfVxuICByZXR1cm4gYCBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGlucHV0fSAoJHtpbnNwZWN0ZWR9KWA7XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfT1VUX09GX1JBTkdFIGV4dGVuZHMgUmFuZ2VFcnJvciB7XG4gIGNvZGUgPSBcIkVSUl9PVVRfT0ZfUkFOR0VcIjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdHI6IHN0cmluZyxcbiAgICByYW5nZTogc3RyaW5nLFxuICAgIGlucHV0OiB1bmtub3duLFxuICAgIHJlcGxhY2VEZWZhdWx0Qm9vbGVhbiA9IGZhbHNlLFxuICApIHtcbiAgICBhc3NlcnQocmFuZ2UsICdNaXNzaW5nIFwicmFuZ2VcIiBhcmd1bWVudCcpO1xuICAgIGxldCBtc2cgPSByZXBsYWNlRGVmYXVsdEJvb2xlYW5cbiAgICAgID8gc3RyXG4gICAgICA6IGBUaGUgdmFsdWUgb2YgXCIke3N0cn1cIiBpcyBvdXQgb2YgcmFuZ2UuYDtcbiAgICBsZXQgcmVjZWl2ZWQ7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0IGFzIG51bWJlcikgPiAyICoqIDMyKSB7XG4gICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihTdHJpbmcoaW5wdXQpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJiaWdpbnRcIikge1xuICAgICAgcmVjZWl2ZWQgPSBTdHJpbmcoaW5wdXQpO1xuICAgICAgaWYgKGlucHV0ID4gMm4gKiogMzJuIHx8IGlucHV0IDwgLSgybiAqKiAzMm4pKSB7XG4gICAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKHJlY2VpdmVkKTtcbiAgICAgIH1cbiAgICAgIHJlY2VpdmVkICs9IFwiblwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWNlaXZlZCA9IGluc3BlY3QoaW5wdXQpO1xuICAgIH1cbiAgICBtc2cgKz0gYCBJdCBtdXN0IGJlICR7cmFuZ2V9LiBSZWNlaXZlZCAke3JlY2VpdmVkfWA7XG5cbiAgICBzdXBlcihtc2cpO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSB0aGlzO1xuICAgIC8vIEFkZCB0aGUgZXJyb3IgY29kZSB0byB0aGUgbmFtZSB0byBpbmNsdWRlIGl0IGluIHRoZSBzdGFjayB0cmFjZS5cbiAgICB0aGlzLm5hbWUgPSBgJHtuYW1lfSBbJHt0aGlzLmNvZGV9XWA7XG4gICAgLy8gQWNjZXNzIHRoZSBzdGFjayB0byBnZW5lcmF0ZSB0aGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIGVycm9yIGNvZGUgZnJvbSB0aGUgbmFtZS5cbiAgICB0aGlzLnN0YWNrO1xuICAgIC8vIFJlc2V0IHRoZSBuYW1lIHRvIHRoZSBhY3R1YWwgbmFtZS5cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQU1CSUdVT1VTX0FSR1VNRU5UIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZywgeTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfQU1CSUdVT1VTX0FSR1VNRU5UXCIsIGBUaGUgXCIke3h9XCIgYXJndW1lbnQgaXMgYW1iaWd1b3VzLiAke3l9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9BUkdfTk9UX0lURVJBQkxFIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0FSR19OT1RfSVRFUkFCTEVcIiwgYCR7eH0gbXVzdCBiZSBpdGVyYWJsZWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQVNTRVJUSU9OIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfQVNTRVJUSU9OXCIsIGAke3h9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9BU1lOQ19DQUxMQkFDSyBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9BU1lOQ19DQUxMQkFDS1wiLCBgJHt4fSBtdXN0IGJlIGEgZnVuY3Rpb25gKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0FTWU5DX1RZUEUgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfQVNZTkNfVFlQRVwiLCBgSW52YWxpZCBuYW1lIGZvciBhc3luYyBcInR5cGVcIjogJHt4fWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQlJPVExJX0lOVkFMSURfUEFSQU0gZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0JST1RMSV9JTlZBTElEX1BBUkFNXCIsIGAke3h9IGlzIG5vdCBhIHZhbGlkIEJyb3RsaSBwYXJhbWV0ZXJgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTIGV4dGVuZHMgTm9kZVJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EU1wiLFxuICAgICAgbmFtZVxuICAgICAgICA/IGBcIiR7bmFtZX1cIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgXG4gICAgICAgIDogXCJBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzXCIsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0JVRkZFUl9UT09fTEFSR0UgZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfQlVGRkVSX1RPT19MQVJHRVwiLFxuICAgICAgYENhbm5vdCBjcmVhdGUgYSBCdWZmZXIgbGFyZ2VyIHRoYW4gJHt4fSBieXRlc2AsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0NBTk5PVF9XQVRDSF9TSUdJTlQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9DQU5OT1RfV0FUQ0hfU0lHSU5UXCIsIFwiQ2Fubm90IHdhdGNoIGZvciBTSUdJTlQgc2lnbmFsc1wiKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0NISUxEX0NMT1NFRF9CRUZPUkVfUkVQTFkgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0NISUxEX0NMT1NFRF9CRUZPUkVfUkVQTFlcIixcbiAgICAgIFwiQ2hpbGQgY2xvc2VkIGJlZm9yZSByZXBseSByZWNlaXZlZFwiLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9DSElMRF9QUk9DRVNTX0lQQ19SRVFVSVJFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfQ0hJTERfUFJPQ0VTU19JUENfUkVRVUlSRURcIixcbiAgICAgIGBGb3JrZWQgcHJvY2Vzc2VzIG11c3QgaGF2ZSBhbiBJUEMgY2hhbm5lbCwgbWlzc2luZyB2YWx1ZSAnaXBjJyBpbiAke3h9YCxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQ0hJTERfUFJPQ0VTU19TVERJT19NQVhCVUZGRVIgZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfQ0hJTERfUFJPQ0VTU19TVERJT19NQVhCVUZGRVJcIixcbiAgICAgIGAke3h9IG1heEJ1ZmZlciBsZW5ndGggZXhjZWVkZWRgLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9DT05TT0xFX1dSSVRBQkxFX1NUUkVBTSBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0NPTlNPTEVfV1JJVEFCTEVfU1RSRUFNXCIsXG4gICAgICBgQ29uc29sZSBleHBlY3RzIGEgd3JpdGFibGUgc3RyZWFtIGluc3RhbmNlIGZvciAke3h9YCxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQ09OVEVYVF9OT1RfSU5JVElBTElaRUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9DT05URVhUX05PVF9JTklUSUFMSVpFRFwiLCBcImNvbnRleHQgdXNlZCBpcyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9DUFVfVVNBR0UgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9DUFVfVVNBR0VcIiwgYFVuYWJsZSB0byBvYnRhaW4gY3B1IHVzYWdlICR7eH1gKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0NSWVBUT19DVVNUT01fRU5HSU5FX05PVF9TVVBQT1JURUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0NSWVBUT19DVVNUT01fRU5HSU5FX05PVF9TVVBQT1JURURcIixcbiAgICAgIFwiQ3VzdG9tIGVuZ2luZXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIE9wZW5TU0xcIixcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQ1JZUFRPX0VDREhfSU5WQUxJRF9GT1JNQVQgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfQ1JZUFRPX0VDREhfSU5WQUxJRF9GT1JNQVRcIiwgYEludmFsaWQgRUNESCBmb3JtYXQ6ICR7eH1gKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0NSWVBUT19FQ0RIX0lOVkFMSURfUFVCTElDX0tFWSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfQ1JZUFRPX0VDREhfSU5WQUxJRF9QVUJMSUNfS0VZXCIsXG4gICAgICBcIlB1YmxpYyBrZXkgaXMgbm90IHZhbGlkIGZvciBzcGVjaWZpZWQgY3VydmVcIixcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQ1JZUFRPX0VOR0lORV9VTktOT1dOIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfQ1JZUFRPX0VOR0lORV9VTktOT1dOXCIsIGBFbmdpbmUgXCIke3h9XCIgd2FzIG5vdCBmb3VuZGApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQ1JZUFRPX0ZJUFNfRk9SQ0VEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9DUllQVE9fRklQU19GT1JDRURcIixcbiAgICAgIFwiQ2Fubm90IHNldCBGSVBTIG1vZGUsIGl0IHdhcyBmb3JjZWQgd2l0aCAtLWZvcmNlLWZpcHMgYXQgc3RhcnR1cC5cIixcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQ1JZUFRPX0ZJUFNfVU5BVkFJTEFCTEUgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0NSWVBUT19GSVBTX1VOQVZBSUxBQkxFXCIsXG4gICAgICBcIkNhbm5vdCBzZXQgRklQUyBtb2RlIGluIGEgbm9uLUZJUFMgYnVpbGQuXCIsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0NSWVBUT19IQVNIX0ZJTkFMSVpFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0NSWVBUT19IQVNIX0ZJTkFMSVpFRFwiLCBcIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZFwiKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0NSWVBUT19IQVNIX1VQREFURV9GQUlMRUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9DUllQVE9fSEFTSF9VUERBVEVfRkFJTEVEXCIsIFwiSGFzaCB1cGRhdGUgZmFpbGVkXCIpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQ1JZUFRPX0lOQ09NUEFUSUJMRV9LRVkgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcsIHk6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0NSWVBUT19JTkNPTVBBVElCTEVfS0VZXCIsIGBJbmNvbXBhdGlibGUgJHt4fTogJHt5fWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQ1JZUFRPX0lOQ09NUEFUSUJMRV9LRVlfT1BUSU9OUyBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZywgeTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9DUllQVE9fSU5DT01QQVRJQkxFX0tFWV9PUFRJT05TXCIsXG4gICAgICBgVGhlIHNlbGVjdGVkIGtleSBlbmNvZGluZyAke3h9ICR7eX0uYCxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQ1JZUFRPX0lOVkFMSURfRElHRVNUIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0NSWVBUT19JTlZBTElEX0RJR0VTVFwiLCBgSW52YWxpZCBkaWdlc3Q6ICR7eH1gKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0NSWVBUT19JTlZBTElEX0tFWV9PQkpFQ1RfVFlQRSBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcsIHk6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfQ1JZUFRPX0lOVkFMSURfS0VZX09CSkVDVF9UWVBFXCIsXG4gICAgICBgSW52YWxpZCBrZXkgb2JqZWN0IHR5cGUgJHt4fSwgZXhwZWN0ZWQgJHt5fS5gLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9DUllQVE9fSU5WQUxJRF9TVEFURSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0NSWVBUT19JTlZBTElEX1NUQVRFXCIsIGBJbnZhbGlkIHN0YXRlIGZvciBvcGVyYXRpb24gJHt4fWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfQ1JZUFRPX1BCS0RGMl9FUlJPUiBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0NSWVBUT19QQktERjJfRVJST1JcIiwgXCJQQktERjIgZXJyb3JcIik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9DUllQVE9fU0NSWVBUX0lOVkFMSURfUEFSQU1FVEVSIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfQ1JZUFRPX1NDUllQVF9JTlZBTElEX1BBUkFNRVRFUlwiLCBcIkludmFsaWQgc2NyeXB0IHBhcmFtZXRlclwiKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0NSWVBUT19TQ1JZUFRfTk9UX1NVUFBPUlRFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0NSWVBUT19TQ1JZUFRfTk9UX1NVUFBPUlRFRFwiLCBcIlNjcnlwdCBhbGdvcml0aG0gbm90IHN1cHBvcnRlZFwiKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0NSWVBUT19TSUdOX0tFWV9SRVFVSVJFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0NSWVBUT19TSUdOX0tFWV9SRVFVSVJFRFwiLCBcIk5vIGtleSBwcm92aWRlZCB0byBzaWduXCIpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfRElSX0NMT1NFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0RJUl9DTE9TRURcIiwgXCJEaXJlY3RvcnkgaGFuZGxlIHdhcyBjbG9zZWRcIik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9ESVJfQ09OQ1VSUkVOVF9PUEVSQVRJT04gZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0RJUl9DT05DVVJSRU5UX09QRVJBVElPTlwiLFxuICAgICAgXCJDYW5ub3QgZG8gc3luY2hyb25vdXMgd29yayBvbiBkaXJlY3RvcnkgaGFuZGxlIHdpdGggY29uY3VycmVudCBhc3luY2hyb25vdXMgb3BlcmF0aW9uc1wiLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9ETlNfU0VUX1NFUlZFUlNfRkFJTEVEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nLCB5OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0ROU19TRVRfU0VSVkVSU19GQUlMRURcIixcbiAgICAgIGBjLWFyZXMgZmFpbGVkIHRvIHNldCBzZXJ2ZXJzOiBcIiR7eH1cIiBbJHt5fV1gLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9ET01BSU5fQ0FMTEJBQ0tfTk9UX0FWQUlMQUJMRSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfRE9NQUlOX0NBTExCQUNLX05PVF9BVkFJTEFCTEVcIixcbiAgICAgIFwiQSBjYWxsYmFjayB3YXMgcmVnaXN0ZXJlZCB0aHJvdWdoIFwiICtcbiAgICAgICAgXCJwcm9jZXNzLnNldFVuY2F1Z2h0RXhjZXB0aW9uQ2FwdHVyZUNhbGxiYWNrKCksIHdoaWNoIGlzIG11dHVhbGx5IFwiICtcbiAgICAgICAgXCJleGNsdXNpdmUgd2l0aCB1c2luZyB0aGUgYGRvbWFpbmAgbW9kdWxlXCIsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0RPTUFJTl9DQU5OT1RfU0VUX1VOQ0FVR0hUX0VYQ0VQVElPTl9DQVBUVVJFXG4gIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9ET01BSU5fQ0FOTk9UX1NFVF9VTkNBVUdIVF9FWENFUFRJT05fQ0FQVFVSRVwiLFxuICAgICAgXCJUaGUgYGRvbWFpbmAgbW9kdWxlIGlzIGluIHVzZSwgd2hpY2ggaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggY2FsbGluZyBcIiArXG4gICAgICAgIFwicHJvY2Vzcy5zZXRVbmNhdWdodEV4Y2VwdGlvbkNhcHR1cmVDYWxsYmFjaygpXCIsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0VOQ09ESU5HX0lOVkFMSURfRU5DT0RFRF9EQVRBIGV4dGVuZHMgTm9kZUVycm9yQWJzdHJhY3Rpb25cbiAgaW1wbGVtZW50cyBUeXBlRXJyb3Ige1xuICBlcnJubzogbnVtYmVyO1xuICBjb25zdHJ1Y3RvcihlbmNvZGluZzogc3RyaW5nLCByZXQ6IG51bWJlcikge1xuICAgIHN1cGVyKFxuICAgICAgVHlwZUVycm9yLnByb3RvdHlwZS5uYW1lLFxuICAgICAgXCJFUlJfRU5DT0RJTkdfSU5WQUxJRF9FTkNPREVEX0RBVEFcIixcbiAgICAgIGBUaGUgZW5jb2RlZCBkYXRhIHdhcyBub3QgdmFsaWQgZm9yIGVuY29kaW5nICR7ZW5jb2Rpbmd9YCxcbiAgICApO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBUeXBlRXJyb3IucHJvdG90eXBlKTtcblxuICAgIHRoaXMuZXJybm8gPSByZXQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9FTkNPRElOR19OT1RfU1VQUE9SVEVEIGV4dGVuZHMgTm9kZVJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9FTkNPRElOR19OT1RfU1VQUE9SVEVEXCIsIGBUaGUgXCIke3h9XCIgZW5jb2RpbmcgaXMgbm90IHN1cHBvcnRlZGApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0VWQUxfRVNNX0NBTk5PVF9QUklOVCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0VWQUxfRVNNX0NBTk5PVF9QUklOVFwiLCBgLS1wcmludCBjYW5ub3QgYmUgdXNlZCB3aXRoIEVTTSBpbnB1dGApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0VWRU5UX1JFQ1VSU0lPTiBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfRVZFTlRfUkVDVVJTSU9OXCIsXG4gICAgICBgVGhlIGV2ZW50IFwiJHt4fVwiIGlzIGFscmVhZHkgYmVpbmcgZGlzcGF0Y2hlZGAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9GRUFUVVJFX1VOQVZBSUxBQkxFX09OX1BMQVRGT1JNIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfRkVBVFVSRV9VTkFWQUlMQUJMRV9PTl9QTEFURk9STVwiLFxuICAgICAgYFRoZSBmZWF0dXJlICR7eH0gaXMgdW5hdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0sIHdoaWNoIGlzIGJlaW5nIHVzZWQgdG8gcnVuIE5vZGUuanNgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfRlNfRklMRV9UT09fTEFSR0UgZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0ZTX0ZJTEVfVE9PX0xBUkdFXCIsIGBGaWxlIHNpemUgKCR7eH0pIGlzIGdyZWF0ZXIgdGhhbiAyIEdCYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfRlNfSU5WQUxJRF9TWU1MSU5LX1RZUEUgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0ZTX0lOVkFMSURfU1lNTElOS19UWVBFXCIsXG4gICAgICBgU3ltbGluayB0eXBlIG11c3QgYmUgb25lIG9mIFwiZGlyXCIsIFwiZmlsZVwiLCBvciBcImp1bmN0aW9uXCIuIFJlY2VpdmVkIFwiJHt4fVwiYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX0FMVFNWQ19JTlZBTElEX09SSUdJTiBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFAyX0FMVFNWQ19JTlZBTElEX09SSUdJTlwiLFxuICAgICAgYEhUVFAvMiBBTFRTVkMgZnJhbWVzIHJlcXVpcmUgYSB2YWxpZCBvcmlnaW5gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfQUxUU1ZDX0xFTkdUSCBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFAyX0FMVFNWQ19MRU5HVEhcIixcbiAgICAgIGBIVFRQLzIgQUxUU1ZDIGZyYW1lcyBhcmUgbGltaXRlZCB0byAxNjM4MiBieXRlc2AsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9DT05ORUNUX0FVVEhPUklUWSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfQ09OTkVDVF9BVVRIT1JJVFlcIixcbiAgICAgIGA6YXV0aG9yaXR5IGhlYWRlciBpcyByZXF1aXJlZCBmb3IgQ09OTkVDVCByZXF1ZXN0c2AsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9DT05ORUNUX1BBVEggZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFAyX0NPTk5FQ1RfUEFUSFwiLFxuICAgICAgYFRoZSA6cGF0aCBoZWFkZXIgaXMgZm9yYmlkZGVuIGZvciBDT05ORUNUIHJlcXVlc3RzYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX0NPTk5FQ1RfU0NIRU1FIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQMl9DT05ORUNUX1NDSEVNRVwiLFxuICAgICAgYFRoZSA6c2NoZW1lIGhlYWRlciBpcyBmb3JiaWRkZW4gZm9yIENPTk5FQ1QgcmVxdWVzdHNgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfR09BV0FZX1NFU1NJT04gZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFAyX0dPQVdBWV9TRVNTSU9OXCIsXG4gICAgICBgTmV3IHN0cmVhbXMgY2Fubm90IGJlIGNyZWF0ZWQgYWZ0ZXIgcmVjZWl2aW5nIGEgR09BV0FZYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX0hFQURFUlNfQUZURVJfUkVTUE9ORCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfSEVBREVSU19BRlRFUl9SRVNQT05EXCIsXG4gICAgICBgQ2Fubm90IHNwZWNpZnkgYWRkaXRpb25hbCBoZWFkZXJzIGFmdGVyIHJlc3BvbnNlIGluaXRpYXRlZGAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9IRUFERVJTX1NFTlQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9IVFRQMl9IRUFERVJTX1NFTlRcIiwgYFJlc3BvbnNlIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhdGVkLmApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX0hFQURFUl9TSU5HTEVfVkFMVUUgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQMl9IRUFERVJfU0lOR0xFX1ZBTFVFXCIsXG4gICAgICBgSGVhZGVyIGZpZWxkIFwiJHt4fVwiIG11c3Qgb25seSBoYXZlIGEgc2luZ2xlIHZhbHVlYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX0lORk9fU1RBVFVTX05PVF9BTExPV0VEIGV4dGVuZHMgTm9kZVJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFAyX0lORk9fU1RBVFVTX05PVF9BTExPV0VEXCIsXG4gICAgICBgSW5mb3JtYXRpb25hbCBzdGF0dXMgY29kZXMgY2Fubm90IGJlIHVzZWRgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfSU5WQUxJRF9DT05ORUNUSU9OX0hFQURFUlMgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQMl9JTlZBTElEX0NPTk5FQ1RJT05fSEVBREVSU1wiLFxuICAgICAgYEhUVFAvMSBDb25uZWN0aW9uIHNwZWNpZmljIGhlYWRlcnMgYXJlIGZvcmJpZGRlbjogXCIke3h9XCJgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfSU5WQUxJRF9IRUFERVJfVkFMVUUgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nLCB5OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFAyX0lOVkFMSURfSEVBREVSX1ZBTFVFXCIsXG4gICAgICBgSW52YWxpZCB2YWx1ZSBcIiR7eH1cIiBmb3IgaGVhZGVyIFwiJHt5fVwiYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX0lOVkFMSURfSU5GT19TVEFUVVMgZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfSU5WQUxJRF9JTkZPX1NUQVRVU1wiLFxuICAgICAgYEludmFsaWQgaW5mb3JtYXRpb25hbCBzdGF0dXMgY29kZTogJHt4fWAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9JTlZBTElEX09SSUdJTiBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFAyX0lOVkFMSURfT1JJR0lOXCIsXG4gICAgICBgSFRUUC8yIE9SSUdJTiBmcmFtZXMgcmVxdWlyZSBhIHZhbGlkIG9yaWdpbmAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9JTlZBTElEX1BBQ0tFRF9TRVRUSU5HU19MRU5HVEggZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfSU5WQUxJRF9QQUNLRURfU0VUVElOR1NfTEVOR1RIXCIsXG4gICAgICBgUGFja2VkIHNldHRpbmdzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2Ygc2l4YCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX0lOVkFMSURfUFNFVURPSEVBREVSIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfSU5WQUxJRF9QU0VVRE9IRUFERVJcIixcbiAgICAgIGBcIiR7eH1cIiBpcyBhbiBpbnZhbGlkIHBzZXVkb2hlYWRlciBvciBpcyB1c2VkIGluY29ycmVjdGx5YCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX0lOVkFMSURfU0VTU0lPTiBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0hUVFAyX0lOVkFMSURfU0VTU0lPTlwiLCBgVGhlIHNlc3Npb24gaGFzIGJlZW4gZGVzdHJveWVkYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfSU5WQUxJRF9TVFJFQU0gZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9IVFRQMl9JTlZBTElEX1NUUkVBTVwiLCBgVGhlIHN0cmVhbSBoYXMgYmVlbiBkZXN0cm95ZWRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9NQVhfUEVORElOR19TRVRUSU5HU19BQ0sgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFAyX01BWF9QRU5ESU5HX1NFVFRJTkdTX0FDS1wiLFxuICAgICAgYE1heGltdW0gbnVtYmVyIG9mIHBlbmRpbmcgc2V0dGluZ3MgYWNrbm93bGVkZ2VtZW50c2AsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9ORVNURURfUFVTSCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfTkVTVEVEX1BVU0hcIixcbiAgICAgIGBBIHB1c2ggc3RyZWFtIGNhbm5vdCBpbml0aWF0ZSBhbm90aGVyIHB1c2ggc3RyZWFtLmAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9OT19TT0NLRVRfTUFOSVBVTEFUSU9OIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQMl9OT19TT0NLRVRfTUFOSVBVTEFUSU9OXCIsXG4gICAgICBgSFRUUC8yIHNvY2tldHMgc2hvdWxkIG5vdCBiZSBkaXJlY3RseSBtYW5pcHVsYXRlZCAoZS5nLiByZWFkIGFuZCB3cml0dGVuKWAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9PUklHSU5fTEVOR1RIIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfT1JJR0lOX0xFTkdUSFwiLFxuICAgICAgYEhUVFAvMiBPUklHSU4gZnJhbWVzIGFyZSBsaW1pdGVkIHRvIDE2MzgyIGJ5dGVzYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX09VVF9PRl9TVFJFQU1TIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQMl9PVVRfT0ZfU1RSRUFNU1wiLFxuICAgICAgYE5vIHN0cmVhbSBJRCBpcyBhdmFpbGFibGUgYmVjYXVzZSBtYXhpbXVtIHN0cmVhbSBJRCBoYXMgYmVlbiByZWFjaGVkYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX1BBWUxPQURfRk9SQklEREVOIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQMl9QQVlMT0FEX0ZPUkJJRERFTlwiLFxuICAgICAgYFJlc3BvbnNlcyB3aXRoICR7eH0gc3RhdHVzIG11c3Qgbm90IGhhdmUgYSBwYXlsb2FkYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX1BJTkdfQ0FOQ0VMIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfSFRUUDJfUElOR19DQU5DRUxcIiwgYEhUVFAyIHBpbmcgY2FuY2VsbGVkYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfUElOR19MRU5HVEggZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0hUVFAyX1BJTkdfTEVOR1RIXCIsIGBIVFRQMiBwaW5nIHBheWxvYWQgbXVzdCBiZSA4IGJ5dGVzYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfUFNFVURPSEVBREVSX05PVF9BTExPV0VEIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfUFNFVURPSEVBREVSX05PVF9BTExPV0VEXCIsXG4gICAgICBgQ2Fubm90IHNldCBIVFRQLzIgcHNldWRvLWhlYWRlcnNgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfUFVTSF9ESVNBQkxFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0hUVFAyX1BVU0hfRElTQUJMRURcIiwgYEhUVFAvMiBjbGllbnQgaGFzIGRpc2FibGVkIHB1c2ggc3RyZWFtc2ApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX1NFTkRfRklMRSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0hUVFAyX1NFTkRfRklMRVwiLCBgRGlyZWN0b3JpZXMgY2Fubm90IGJlIHNlbnRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9TRU5EX0ZJTEVfTk9TRUVLIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQMl9TRU5EX0ZJTEVfTk9TRUVLXCIsXG4gICAgICBgT2Zmc2V0IG9yIGxlbmd0aCBjYW4gb25seSBiZSBzcGVjaWZpZWQgZm9yIHJlZ3VsYXIgZmlsZXNgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfU0VTU0lPTl9FUlJPUiBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0hUVFAyX1NFU1NJT05fRVJST1JcIiwgYFNlc3Npb24gY2xvc2VkIHdpdGggZXJyb3IgY29kZSAke3h9YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfU0VUVElOR1NfQ0FOQ0VMIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfSFRUUDJfU0VUVElOR1NfQ0FOQ0VMXCIsIGBIVFRQMiBzZXNzaW9uIHNldHRpbmdzIGNhbmNlbGVkYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfU09DS0VUX0JPVU5EIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQMl9TT0NLRVRfQk9VTkRcIixcbiAgICAgIGBUaGUgc29ja2V0IGlzIGFscmVhZHkgYm91bmQgdG8gYW4gSHR0cDJTZXNzaW9uYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX1NPQ0tFVF9VTkJPVU5EIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQMl9TT0NLRVRfVU5CT1VORFwiLFxuICAgICAgYFRoZSBzb2NrZXQgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gdGhlIEh0dHAyU2Vzc2lvbmAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQMl9TVEFUVVNfMTAxIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQMl9TVEFUVVNfMTAxXCIsXG4gICAgICBgSFRUUCBzdGF0dXMgY29kZSAxMDEgKFN3aXRjaGluZyBQcm90b2NvbHMpIGlzIGZvcmJpZGRlbiBpbiBIVFRQLzJgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfU1RBVFVTX0lOVkFMSUQgZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0hUVFAyX1NUQVRVU19JTlZBTElEXCIsIGBJbnZhbGlkIHN0YXR1cyBjb2RlOiAke3h9YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfU1RSRUFNX0VSUk9SIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfSFRUUDJfU1RSRUFNX0VSUk9SXCIsIGBTdHJlYW0gY2xvc2VkIHdpdGggZXJyb3IgY29kZSAke3h9YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfU1RSRUFNX1NFTEZfREVQRU5ERU5DWSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfU1RSRUFNX1NFTEZfREVQRU5ERU5DWVwiLFxuICAgICAgYEEgc3RyZWFtIGNhbm5vdCBkZXBlbmQgb24gaXRzZWxmYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX1RSQUlMRVJTX0FMUkVBRFlfU0VOVCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfVFJBSUxFUlNfQUxSRUFEWV9TRU5UXCIsXG4gICAgICBgVHJhaWxpbmcgaGVhZGVycyBoYXZlIGFscmVhZHkgYmVlbiBzZW50YCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX1RSQUlMRVJTX05PVF9SRUFEWSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUDJfVFJBSUxFUlNfTk9UX1JFQURZXCIsXG4gICAgICBgVHJhaWxpbmcgaGVhZGVycyBjYW5ub3QgYmUgc2VudCB1bnRpbCBhZnRlciB0aGUgd2FudFRyYWlsZXJzIGV2ZW50IGlzIGVtaXR0ZWRgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUDJfVU5TVVBQT1JURURfUFJPVE9DT0wgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9IVFRQMl9VTlNVUFBPUlRFRF9QUk9UT0NPTFwiLCBgcHJvdG9jb2wgXCIke3h9XCIgaXMgdW5zdXBwb3J0ZWQuYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUF9IRUFERVJTX1NFTlQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFBfSEVBREVSU19TRU5UXCIsXG4gICAgICBgQ2Fubm90ICR7eH0gaGVhZGVycyBhZnRlciB0aGV5IGFyZSBzZW50IHRvIHRoZSBjbGllbnRgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSFRUUF9JTlZBTElEX0hFQURFUl9WQUxVRSBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcsIHk6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUF9JTlZBTElEX0hFQURFUl9WQUxVRVwiLFxuICAgICAgYEludmFsaWQgdmFsdWUgXCIke3h9XCIgZm9yIGhlYWRlciBcIiR7eX1cImAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQX0lOVkFMSURfU1RBVFVTX0NPREUgZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0hUVFBfSU5WQUxJRF9TVEFUVVNfQ09ERVwiLCBgSW52YWxpZCBzdGF0dXMgY29kZTogJHt4fWApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFBfU09DS0VUX0VOQ09ESU5HIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9IVFRQX1NPQ0tFVF9FTkNPRElOR1wiLFxuICAgICAgYENoYW5naW5nIHRoZSBzb2NrZXQgZW5jb2RpbmcgaXMgbm90IGFsbG93ZWQgcGVyIFJGQzcyMzAgU2VjdGlvbiAzLmAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9IVFRQX1RSQUlMRVJfSU5WQUxJRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSFRUUF9UUkFJTEVSX0lOVkFMSURcIixcbiAgICAgIGBUcmFpbGVycyBhcmUgaW52YWxpZCB3aXRoIHRoaXMgdHJhbnNmZXIgZW5jb2RpbmdgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5DT01QQVRJQkxFX09QVElPTl9QQUlSIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZywgeTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9JTkNPTVBBVElCTEVfT1BUSU9OX1BBSVJcIixcbiAgICAgIGBPcHRpb24gXCIke3h9XCIgY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBvcHRpb24gXCIke3l9XCJgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5QVVRfVFlQRV9OT1RfQUxMT1dFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSU5QVVRfVFlQRV9OT1RfQUxMT1dFRFwiLFxuICAgICAgYC0taW5wdXQtdHlwZSBjYW4gb25seSBiZSB1c2VkIHdpdGggc3RyaW5nIGlucHV0IHZpYSAtLWV2YWwsIC0tcHJpbnQsIG9yIFNURElOYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0lOU1BFQ1RPUl9BTFJFQURZX0FDVElWQVRFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSU5TUEVDVE9SX0FMUkVBRFlfQUNUSVZBVEVEXCIsXG4gICAgICBgSW5zcGVjdG9yIGlzIGFscmVhZHkgYWN0aXZhdGVkLiBDbG9zZSBpdCB3aXRoIGluc3BlY3Rvci5jbG9zZSgpIGJlZm9yZSBhY3RpdmF0aW5nIGl0IGFnYWluLmAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlNQRUNUT1JfQUxSRUFEWV9DT05ORUNURUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9JTlNQRUNUT1JfQUxSRUFEWV9DT05ORUNURURcIiwgYCR7eH0gaXMgYWxyZWFkeSBjb25uZWN0ZWRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlNQRUNUT1JfQ0xPU0VEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfSU5TUEVDVE9SX0NMT1NFRFwiLCBgU2Vzc2lvbiB3YXMgY2xvc2VkYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5TUEVDVE9SX0NPTU1BTkQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBudW1iZXIsIHk6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0lOU1BFQ1RPUl9DT01NQU5EXCIsIGBJbnNwZWN0b3IgZXJyb3IgJHt4fTogJHt5fWApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0lOU1BFQ1RPUl9OT1RfQUNUSVZFIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfSU5TUEVDVE9SX05PVF9BQ1RJVkVcIiwgYEluc3BlY3RvciBpcyBub3QgYWN0aXZlYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5TUEVDVE9SX05PVF9BVkFJTEFCTEUgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9JTlNQRUNUT1JfTk9UX0FWQUlMQUJMRVwiLCBgSW5zcGVjdG9yIGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlNQRUNUT1JfTk9UX0NPTk5FQ1RFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0lOU1BFQ1RPUl9OT1RfQ09OTkVDVEVEXCIsIGBTZXNzaW9uIGlzIG5vdCBjb25uZWN0ZWRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlNQRUNUT1JfTk9UX1dPUktFUiBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0lOU1BFQ1RPUl9OT1RfV09SS0VSXCIsIGBDdXJyZW50IHRocmVhZCBpcyBub3QgYSB3b3JrZXJgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX0FTWU5DX0lEIGV4dGVuZHMgTm9kZVJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcsIHk6IHN0cmluZyB8IG51bWJlcikge1xuICAgIHN1cGVyKFwiRVJSX0lOVkFMSURfQVNZTkNfSURcIiwgYEludmFsaWQgJHt4fSB2YWx1ZTogJHt5fWApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0lOVkFMSURfQlVGRkVSX1NJWkUgZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0lOVkFMSURfQlVGRkVSX1NJWkVcIiwgYEJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3h9YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9DQUxMQkFDSyBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihvYmplY3Q6IHVua25vd24pIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0lOVkFMSURfQ0FMTEJBQ0tcIixcbiAgICAgIGBDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uIFJlY2VpdmVkICR7aW5zcGVjdChvYmplY3QpfWAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX0NVUlNPUl9QT1MgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9JTlZBTElEX0NVUlNPUl9QT1NcIixcbiAgICAgIGBDYW5ub3Qgc2V0IGN1cnNvciByb3cgd2l0aG91dCBzZXR0aW5nIGl0cyBjb2x1bW5gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9GRCBleHRlbmRzIE5vZGVSYW5nZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfSU5WQUxJRF9GRFwiLCBgXCJmZFwiIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyOiAke3h9YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9GRF9UWVBFIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0lOVkFMSURfRkRfVFlQRVwiLCBgVW5zdXBwb3J0ZWQgZmQgdHlwZTogJHt4fWApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0lOVkFMSURfRklMRV9VUkxfSE9TVCBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0lOVkFMSURfRklMRV9VUkxfSE9TVFwiLFxuICAgICAgYEZpbGUgVVJMIGhvc3QgbXVzdCBiZSBcImxvY2FsaG9zdFwiIG9yIGVtcHR5IG9uICR7eH1gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9GSUxFX1VSTF9QQVRIIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0lOVkFMSURfRklMRV9VUkxfUEFUSFwiLCBgRmlsZSBVUkwgcGF0aCAke3h9YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9IQU5ETEVfVFlQRSBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9JTlZBTElEX0hBTkRMRV9UWVBFXCIsIGBUaGlzIGhhbmRsZSB0eXBlIGNhbm5vdCBiZSBzZW50YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9IVFRQX1RPS0VOIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZywgeTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfSU5WQUxJRF9IVFRQX1RPS0VOXCIsIGAke3h9IG11c3QgYmUgYSB2YWxpZCBIVFRQIHRva2VuIFtcIiR7eX1cIl1gKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX0lQX0FERFJFU1MgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfSU5WQUxJRF9JUF9BRERSRVNTXCIsIGBJbnZhbGlkIElQIGFkZHJlc3M6ICR7eH1gKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX09QVF9WQUxVRV9FTkNPRElORyBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0lOVkFMSURfT1BUX1ZBTFVFX0VOQ09ESU5HXCIsXG4gICAgICBgVGhlIHZhbHVlIFwiJHt4fVwiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcImVuY29kaW5nXCJgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9QRVJGT1JNQU5DRV9NQVJLIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9JTlZBTElEX1BFUkZPUk1BTkNFX01BUktcIixcbiAgICAgIGBUaGUgXCIke3h9XCIgcGVyZm9ybWFuY2UgbWFyayBoYXMgbm90IGJlZW4gc2V0YCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0lOVkFMSURfUFJPVE9DT0wgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nLCB5OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0lOVkFMSURfUFJPVE9DT0xcIixcbiAgICAgIGBQcm90b2NvbCBcIiR7eH1cIiBub3Qgc3VwcG9ydGVkLiBFeHBlY3RlZCBcIiR7eX1cImAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX1JFUExfRVZBTF9DT05GSUcgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9JTlZBTElEX1JFUExfRVZBTF9DT05GSUdcIixcbiAgICAgIGBDYW5ub3Qgc3BlY2lmeSBib3RoIFwiYnJlYWtFdmFsT25TaWdpbnRcIiBhbmQgXCJldmFsXCIgZm9yIFJFUExgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9SRVBMX0lOUFVUIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0lOVkFMSURfUkVQTF9JTlBVVFwiLCBgJHt4fWApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0lOVkFMSURfU1lOQ19GT1JLX0lOUFVUIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSU5WQUxJRF9TWU5DX0ZPUktfSU5QVVRcIixcbiAgICAgIGBBc3luY2hyb25vdXMgZm9ya3MgZG8gbm90IHN1cHBvcnQgQnVmZmVyLCBUeXBlZEFycmF5LCBEYXRhVmlldyBvciBzdHJpbmcgaW5wdXQ6ICR7eH1gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9USElTIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX0lOVkFMSURfVEhJU1wiLCBgVmFsdWUgb2YgXCJ0aGlzXCIgbXVzdCBiZSBvZiB0eXBlICR7eH1gKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX1RVUExFIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZywgeTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfSU5WQUxJRF9UVVBMRVwiLCBgJHt4fSBtdXN0IGJlIGFuIGl0ZXJhYmxlICR7eX0gdHVwbGVgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX1VSSSBleHRlbmRzIE5vZGVVUklFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0lOVkFMSURfVVJJXCIsIGBVUkkgbWFsZm9ybWVkYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfSVBDX0NIQU5ORUxfQ0xPU0VEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfSVBDX0NIQU5ORUxfQ0xPU0VEXCIsIGBDaGFubmVsIGNsb3NlZGApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0lQQ19ESVNDT05ORUNURUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9JUENfRElTQ09OTkVDVEVEXCIsIGBJUEMgY2hhbm5lbCBpcyBhbHJlYWR5IGRpc2Nvbm5lY3RlZGApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0lQQ19PTkVfUElQRSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX0lQQ19PTkVfUElQRVwiLCBgQ2hpbGQgcHJvY2VzcyBjYW4gaGF2ZSBvbmx5IG9uZSBJUEMgcGlwZWApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0lQQ19TWU5DX0ZPUksgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9JUENfU1lOQ19GT1JLXCIsIGBJUEMgY2Fubm90IGJlIHVzZWQgd2l0aCBzeW5jaHJvbm91cyBmb3Jrc2ApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX01BTklGRVNUX0RFUEVOREVOQ1lfTUlTU0lORyBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZywgeTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9NQU5JRkVTVF9ERVBFTkRFTkNZX01JU1NJTkdcIixcbiAgICAgIGBNYW5pZmVzdCByZXNvdXJjZSAke3h9IGRvZXMgbm90IGxpc3QgJHt5fSBhcyBhIGRlcGVuZGVuY3kgc3BlY2lmaWVyYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX01BTklGRVNUX0lOVEVHUklUWV9NSVNNQVRDSCBleHRlbmRzIE5vZGVTeW50YXhFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfTUFOSUZFU1RfSU5URUdSSVRZX01JU01BVENIXCIsXG4gICAgICBgTWFuaWZlc3QgcmVzb3VyY2UgJHt4fSBoYXMgbXVsdGlwbGUgZW50cmllcyBidXQgaW50ZWdyaXR5IGxpc3RzIGRvIG5vdCBtYXRjaGAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9NQU5JRkVTVF9JTlZBTElEX1JFU09VUkNFX0ZJRUxEIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZywgeTogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9NQU5JRkVTVF9JTlZBTElEX1JFU09VUkNFX0ZJRUxEXCIsXG4gICAgICBgTWFuaWZlc3QgcmVzb3VyY2UgJHt4fSBoYXMgaW52YWxpZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgJHt5fWAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9NQU5JRkVTVF9URFogZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9NQU5JRkVTVF9URFpcIiwgYE1hbmlmZXN0IGluaXRpYWxpemF0aW9uIGhhcyBub3QgeWV0IHJ1bmApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX01BTklGRVNUX1VOS05PV05fT05FUlJPUiBleHRlbmRzIE5vZGVTeW50YXhFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfTUFOSUZFU1RfVU5LTk9XTl9PTkVSUk9SXCIsXG4gICAgICBgTWFuaWZlc3Qgc3BlY2lmaWVkIHVua25vd24gZXJyb3IgYmVoYXZpb3IgXCIke3h9XCIuYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEXCIsIGBUaGUgJHt4fSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfTUlTU0lOR19BUkdTIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSkge1xuICAgIGxldCBtc2cgPSBcIlRoZSBcIjtcblxuICAgIGNvbnN0IGxlbiA9IGFyZ3MubGVuZ3RoO1xuXG4gICAgY29uc3Qgd3JhcCA9IChhOiB1bmtub3duKSA9PiBgXCIke2F9XCJgO1xuXG4gICAgYXJncyA9IGFyZ3MubWFwKChhKSA9PlxuICAgICAgQXJyYXkuaXNBcnJheShhKSA/IGEubWFwKHdyYXApLmpvaW4oXCIgb3IgXCIpIDogd3JhcChhKVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGxlbikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICBtc2cgKz0gYCR7YXJnc1swXX0gYXJndW1lbnRgO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgbXNnICs9IGAke2FyZ3NbMF19IGFuZCAke2FyZ3NbMV19IGFyZ3VtZW50c2A7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbXNnICs9IGFyZ3Muc2xpY2UoMCwgbGVuIC0gMSkuam9pbihcIiwgXCIpO1xuICAgICAgICBtc2cgKz0gYCwgYW5kICR7YXJnc1tsZW4gLSAxXX0gYXJndW1lbnRzYDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3VwZXIoXCJFUlJfTUlTU0lOR19BUkdTXCIsIGAke21zZ30gbXVzdCBiZSBzcGVjaWZpZWRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9NSVNTSU5HX09QVElPTiBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9NSVNTSU5HX09QVElPTlwiLCBgJHt4fSBpcyByZXF1aXJlZGApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX01VTFRJUExFX0NBTExCQUNLIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0tcIiwgYENhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lc2ApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX05BUElfQ09OU19GVU5DVElPTiBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9OQVBJX0NPTlNfRlVOQ1RJT05cIiwgYENvbnN0cnVjdG9yIG11c3QgYmUgYSBmdW5jdGlvbmApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX05BUElfSU5WQUxJRF9EQVRBVklFV19BUkdTIGV4dGVuZHMgTm9kZVJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX05BUElfSU5WQUxJRF9EQVRBVklFV19BUkdTXCIsXG4gICAgICBgYnl0ZV9vZmZzZXQgKyBieXRlX2xlbmd0aCBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBhcnJheSBwYXNzZWQgaW5gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfTkFQSV9JTlZBTElEX1RZUEVEQVJSQVlfQUxJR05NRU5UIGV4dGVuZHMgTm9kZVJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcsIHk6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfTkFQSV9JTlZBTElEX1RZUEVEQVJSQVlfQUxJR05NRU5UXCIsXG4gICAgICBgc3RhcnQgb2Zmc2V0IG9mICR7eH0gc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgJHt5fWAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9OQVBJX0lOVkFMSURfVFlQRURBUlJBWV9MRU5HVEggZXh0ZW5kcyBOb2RlUmFuZ2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX05BUElfSU5WQUxJRF9UWVBFREFSUkFZX0xFTkdUSFwiLCBgSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGhgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9OT19DUllQVE8gZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX05PX0NSWVBUT1wiLFxuICAgICAgYE5vZGUuanMgaXMgbm90IGNvbXBpbGVkIHdpdGggT3BlblNTTCBjcnlwdG8gc3VwcG9ydGAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9OT19JQ1UgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9OT19JQ1VcIixcbiAgICAgIGAke3h9IGlzIG5vdCBzdXBwb3J0ZWQgb24gTm9kZS5qcyBjb21waWxlZCB3aXRob3V0IElDVWAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9RVUlDQ0xJRU5UU0VTU0lPTl9GQUlMRUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1FVSUNDTElFTlRTRVNTSU9OX0ZBSUxFRFwiLFxuICAgICAgYEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgUXVpY0NsaWVudFNlc3Npb246ICR7eH1gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfUVVJQ0NMSUVOVFNFU1NJT05fRkFJTEVEX1NFVFNPQ0tFVCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfUVVJQ0NMSUVOVFNFU1NJT05fRkFJTEVEX1NFVFNPQ0tFVFwiLFxuICAgICAgYEZhaWxlZCB0byBzZXQgdGhlIFF1aWNTb2NrZXRgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfUVVJQ1NFU1NJT05fREVTVFJPWUVEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9RVUlDU0VTU0lPTl9ERVNUUk9ZRURcIixcbiAgICAgIGBDYW5ub3QgY2FsbCAke3h9IGFmdGVyIGEgUXVpY1Nlc3Npb24gaGFzIGJlZW4gZGVzdHJveWVkYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1FVSUNTRVNTSU9OX0lOVkFMSURfRENJRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX1FVSUNTRVNTSU9OX0lOVkFMSURfRENJRFwiLCBgSW52YWxpZCBEQ0lEIHZhbHVlOiAke3h9YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfUVVJQ1NFU1NJT05fVVBEQVRFS0VZIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfUVVJQ1NFU1NJT05fVVBEQVRFS0VZXCIsIGBVbmFibGUgdG8gdXBkYXRlIFF1aWNTZXNzaW9uIGtleXNgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9RVUlDU09DS0VUX0RFU1RST1lFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfUVVJQ1NPQ0tFVF9ERVNUUk9ZRURcIixcbiAgICAgIGBDYW5ub3QgY2FsbCAke3h9IGFmdGVyIGEgUXVpY1NvY2tldCBoYXMgYmVlbiBkZXN0cm95ZWRgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfUVVJQ1NPQ0tFVF9JTlZBTElEX1NUQVRFTEVTU19SRVNFVF9TRUNSRVRfTEVOR1RIXG4gIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9RVUlDU09DS0VUX0lOVkFMSURfU1RBVEVMRVNTX1JFU0VUX1NFQ1JFVF9MRU5HVEhcIixcbiAgICAgIGBUaGUgc3RhdGVSZXNldFRva2VuIG11c3QgYmUgZXhhY3RseSAxNi1ieXRlcyBpbiBsZW5ndGhgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfUVVJQ1NPQ0tFVF9MSVNURU5JTkcgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9RVUlDU09DS0VUX0xJU1RFTklOR1wiLCBgVGhpcyBRdWljU29ja2V0IGlzIGFscmVhZHkgbGlzdGVuaW5nYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfUVVJQ1NPQ0tFVF9VTkJPVU5EIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9RVUlDU09DS0VUX1VOQk9VTkRcIixcbiAgICAgIGBDYW5ub3QgY2FsbCAke3h9IGJlZm9yZSBhIFF1aWNTb2NrZXQgaGFzIGJlZW4gYm91bmRgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfUVVJQ1NUUkVBTV9ERVNUUk9ZRUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1FVSUNTVFJFQU1fREVTVFJPWUVEXCIsXG4gICAgICBgQ2Fubm90IGNhbGwgJHt4fSBhZnRlciBhIFF1aWNTdHJlYW0gaGFzIGJlZW4gZGVzdHJveWVkYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1FVSUNTVFJFQU1fSU5WQUxJRF9QVVNIIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9RVUlDU1RSRUFNX0lOVkFMSURfUFVTSFwiLFxuICAgICAgYFB1c2ggc3RyZWFtcyBhcmUgb25seSBzdXBwb3J0ZWQgb24gY2xpZW50LWluaXRpYXRlZCwgYmlkaXJlY3Rpb25hbCBzdHJlYW1zYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1FVSUNTVFJFQU1fT1BFTl9GQUlMRUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9RVUlDU1RSRUFNX09QRU5fRkFJTEVEXCIsIGBPcGVuaW5nIGEgbmV3IFF1aWNTdHJlYW0gZmFpbGVkYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfUVVJQ1NUUkVBTV9VTlNVUFBPUlRFRF9QVVNIIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9RVUlDU1RSRUFNX1VOU1VQUE9SVEVEX1BVU0hcIixcbiAgICAgIGBQdXNoIHN0cmVhbXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBRdWljU2Vzc2lvbmAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9RVUlDX1RMUzEzX1JFUVVJUkVEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfUVVJQ19UTFMxM19SRVFVSVJFRFwiLCBgUVVJQyByZXF1aXJlcyBUTFMgdmVyc2lvbiAxLjNgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9TQ1JJUFRfRVhFQ1VUSU9OX0lOVEVSUlVQVEVEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9TQ1JJUFRfRVhFQ1VUSU9OX0lOVEVSUlVQVEVEXCIsXG4gICAgICBcIlNjcmlwdCBleGVjdXRpb24gd2FzIGludGVycnVwdGVkIGJ5IGBTSUdJTlRgXCIsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9TRVJWRVJfQUxSRUFEWV9MSVNURU4gZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1NFUlZFUl9BTFJFQURZX0xJU1RFTlwiLFxuICAgICAgYExpc3RlbiBtZXRob2QgaGFzIGJlZW4gY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHdpdGhvdXQgY2xvc2luZy5gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfU0VSVkVSX05PVF9SVU5OSU5HIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfU0VSVkVSX05PVF9SVU5OSU5HXCIsIGBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmcuYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfU09DS0VUX0FMUkVBRFlfQk9VTkQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9TT0NLRVRfQUxSRUFEWV9CT1VORFwiLCBgU29ja2V0IGlzIGFscmVhZHkgYm91bmRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9TT0NLRVRfQkFEX0JVRkZFUl9TSVpFIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfU09DS0VUX0JBRF9CVUZGRVJfU0laRVwiLFxuICAgICAgYEJ1ZmZlciBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1NPQ0tFVF9CQURfUE9SVCBleHRlbmRzIE5vZGVSYW5nZUVycm9yIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwb3J0OiB1bmtub3duLCBhbGxvd1plcm8gPSB0cnVlKSB7XG4gICAgYXNzZXJ0KFxuICAgICAgdHlwZW9mIGFsbG93WmVybyA9PT0gXCJib29sZWFuXCIsXG4gICAgICBcIlRoZSAnYWxsb3daZXJvJyBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi5cIixcbiAgICApO1xuXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBhbGxvd1plcm8gPyBcIj49XCIgOiBcIj5cIjtcblxuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfU09DS0VUX0JBRF9QT1JUXCIsXG4gICAgICBgJHtuYW1lfSBzaG91bGQgYmUgJHtvcGVyYXRvcn0gMCBhbmQgPCA2NTUzNi4gUmVjZWl2ZWQgJHtwb3J0fS5gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfU09DS0VUX0JBRF9UWVBFIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfU09DS0VUX0JBRF9UWVBFXCIsXG4gICAgICBgQmFkIHNvY2tldCB0eXBlIHNwZWNpZmllZC4gVmFsaWQgdHlwZXMgYXJlOiB1ZHA0LCB1ZHA2YCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1NPQ0tFVF9CVUZGRVJfU0laRSBleHRlbmRzIE5vZGVTeXN0ZW1FcnJvciB7XG4gIGNvbnN0cnVjdG9yKGN0eDogTm9kZVN5c3RlbUVycm9yQ3R4KSB7XG4gICAgc3VwZXIoXCJFUlJfU09DS0VUX0JVRkZFUl9TSVpFXCIsIGN0eCwgXCJDb3VsZCBub3QgZ2V0IG9yIHNldCBidWZmZXIgc2l6ZVwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9TT0NLRVRfQ0xPU0VEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfU09DS0VUX0NMT1NFRFwiLCBgU29ja2V0IGlzIGNsb3NlZGApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1NPQ0tFVF9ER1JBTV9JU19DT05ORUNURUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9TT0NLRVRfREdSQU1fSVNfQ09OTkVDVEVEXCIsIGBBbHJlYWR5IGNvbm5lY3RlZGApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1NPQ0tFVF9ER1JBTV9OT1RfQ09OTkVDVEVEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfU09DS0VUX0RHUkFNX05PVF9DT05ORUNURURcIiwgYE5vdCBjb25uZWN0ZWRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9TT0NLRVRfREdSQU1fTk9UX1JVTk5JTkcgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9TT0NLRVRfREdSQU1fTk9UX1JVTk5JTkdcIiwgYE5vdCBydW5uaW5nYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfU1JJX1BBUlNFIGV4dGVuZHMgTm9kZVN5bnRheEVycm9yIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBjaGFyOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1NSSV9QQVJTRVwiLFxuICAgICAgYFN1YnJlc291cmNlIEludGVncml0eSBzdHJpbmcgJHtuYW1lfSBoYWQgYW4gdW5leHBlY3RlZCAke2NoYXJ9IGF0IHBvc2l0aW9uICR7cG9zaXRpb259YCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRFwiLFxuICAgICAgYENhbm5vdCBjYWxsICR7eH0gYWZ0ZXIgYSBzdHJlYW0gd2FzIGZpbmlzaGVkYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX1NUUkVBTV9DQU5OT1RfUElQRVwiLCBgQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZWApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1NUUkVBTV9ERVNUUk9ZRUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1NUUkVBTV9ERVNUUk9ZRURcIixcbiAgICAgIGBDYW5ub3QgY2FsbCAke3h9IGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWRgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfU1RSRUFNX05VTExfVkFMVUVTIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFU1wiLCBgTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW1gKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiLCBgUHJlbWF0dXJlIGNsb3NlYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GXCIsIGBzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRmApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UXCIsXG4gICAgICBgc3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnRgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfU1RSRUFNX1dSQVAgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1NUUkVBTV9XUkFQXCIsXG4gICAgICBgU3RyZWFtIGhhcyBTdHJpbmdEZWNvZGVyIHNldCBvciBpcyBpbiBvYmplY3RNb2RlYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EXCIsIGB3cml0ZSBhZnRlciBlbmRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9TWU5USEVUSUMgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9TWU5USEVUSUNcIiwgYEphdmFTY3JpcHQgQ2FsbHN0YWNrYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgcmVhc29uOiBzdHJpbmc7XG4gIGhvc3Q6IHN0cmluZztcbiAgY2VydDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHJlYXNvbjogc3RyaW5nLCBob3N0OiBzdHJpbmcsIGNlcnQ6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEXCIsXG4gICAgICBgSG9zdG5hbWUvSVAgZG9lcyBub3QgbWF0Y2ggY2VydGlmaWNhdGUncyBhbHRuYW1lczogJHtyZWFzb259YCxcbiAgICApO1xuICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5jZXJ0ID0gY2VydDtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9UTFNfREhfUEFSQU1fU0laRSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX1RMU19ESF9QQVJBTV9TSVpFXCIsIGBESCBwYXJhbWV0ZXIgc2l6ZSAke3h9IGlzIGxlc3MgdGhhbiAyMDQ4YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfVExTX0hBTkRTSEFLRV9USU1FT1VUIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfVExTX0hBTkRTSEFLRV9USU1FT1VUXCIsIGBUTFMgaGFuZHNoYWtlIHRpbWVvdXRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9UTFNfSU5WQUxJRF9DT05URVhUIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX1RMU19JTlZBTElEX0NPTlRFWFRcIiwgYCR7eH0gbXVzdCBiZSBhIFNlY3VyZUNvbnRleHRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9UTFNfSU5WQUxJRF9TVEFURSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVExTX0lOVkFMSURfU1RBVEVcIixcbiAgICAgIGBUTFMgc29ja2V0IGNvbm5lY3Rpb24gbXVzdCBiZSBzZWN1cmVseSBlc3RhYmxpc2hlZGAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9UTFNfSU5WQUxJRF9QUk9UT0NPTF9WRVJTSU9OIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHByb3RvY29sOiBzdHJpbmcsIHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVExTX0lOVkFMSURfUFJPVE9DT0xfVkVSU0lPTlwiLFxuICAgICAgYCR7cHJvdG9jb2x9IGlzIG5vdCBhIHZhbGlkICR7eH0gVExTIHByb3RvY29sIHZlcnNpb25gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfVExTX1BST1RPQ09MX1ZFUlNJT05fQ09ORkxJQ1QgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IocHJldlByb3RvY29sOiBzdHJpbmcsIHByb3RvY29sOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1RMU19QUk9UT0NPTF9WRVJTSU9OX0NPTkZMSUNUXCIsXG4gICAgICBgVExTIHByb3RvY29sIHZlcnNpb24gJHtwcmV2UHJvdG9jb2x9IGNvbmZsaWN0cyB3aXRoIHNlY3VyZVByb3RvY29sICR7cHJvdG9jb2x9YCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1RMU19SRU5FR09USUFUSU9OX0RJU0FCTEVEIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9UTFNfUkVORUdPVElBVElPTl9ESVNBQkxFRFwiLFxuICAgICAgYFRMUyBzZXNzaW9uIHJlbmVnb3RpYXRpb24gZGlzYWJsZWQgZm9yIHRoaXMgc29ja2V0YCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1RMU19SRVFVSVJFRF9TRVJWRVJfTkFNRSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVExTX1JFUVVJUkVEX1NFUlZFUl9OQU1FXCIsXG4gICAgICBgXCJzZXJ2ZXJuYW1lXCIgaXMgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciBTZXJ2ZXIuYWRkQ29udGV4dGAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9UTFNfU0VTU0lPTl9BVFRBQ0sgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1RMU19TRVNTSU9OX0FUVEFDS1wiLFxuICAgICAgYFRMUyBzZXNzaW9uIHJlbmVnb3RpYXRpb24gYXR0YWNrIGRldGVjdGVkYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1RMU19TTklfRlJPTV9TRVJWRVIgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1RMU19TTklfRlJPTV9TRVJWRVJcIixcbiAgICAgIGBDYW5ub3QgaXNzdWUgU05JIGZyb20gYSBUTFMgc2VydmVyLXNpZGUgc29ja2V0YCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1RSQUNFX0VWRU5UU19DQVRFR09SWV9SRVFVSVJFRCBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1RSQUNFX0VWRU5UU19DQVRFR09SWV9SRVFVSVJFRFwiLFxuICAgICAgYEF0IGxlYXN0IG9uZSBjYXRlZ29yeSBpcyByZXF1aXJlZGAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9UUkFDRV9FVkVOVFNfVU5BVkFJTEFCTEUgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkVSUl9UUkFDRV9FVkVOVFNfVU5BVkFJTEFCTEVcIiwgYFRyYWNlIGV2ZW50cyBhcmUgdW5hdmFpbGFibGVgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9VTkFWQUlMQUJMRV9EVVJJTkdfRVhJVCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVU5BVkFJTEFCTEVfRFVSSU5HX0VYSVRcIixcbiAgICAgIGBDYW5ub3QgY2FsbCBmdW5jdGlvbiBpbiBwcm9jZXNzIGV4aXQgaGFuZGxlcmAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9VTkNBVUdIVF9FWENFUFRJT05fQ0FQVFVSRV9BTFJFQURZX1NFVCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVU5DQVVHSFRfRVhDRVBUSU9OX0NBUFRVUkVfQUxSRUFEWV9TRVRcIixcbiAgICAgIFwiYHByb2Nlc3Muc2V0dXBVbmNhdWdodEV4Y2VwdGlvbkNhcHR1cmUoKWAgd2FzIGNhbGxlZCB3aGlsZSBhIGNhcHR1cmUgY2FsbGJhY2sgd2FzIGFscmVhZHkgYWN0aXZlXCIsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9VTkVTQ0FQRURfQ0hBUkFDVEVSUyBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9VTkVTQ0FQRURfQ0hBUkFDVEVSU1wiLCBgJHt4fSBjb250YWlucyB1bmVzY2FwZWQgY2hhcmFjdGVyc2ApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1VOSEFORExFRF9FUlJPUiBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX1VOSEFORExFRF9FUlJPUlwiLCBgVW5oYW5kbGVkIGVycm9yLiAoJHt4fSlgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9VTktOT1dOX0JVSUxUSU5fTU9EVUxFIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoeDogc3RyaW5nKSB7XG4gICAgc3VwZXIoXCJFUlJfVU5LTk9XTl9CVUlMVElOX01PRFVMRVwiLCBgTm8gc3VjaCBidWlsdC1pbiBtb2R1bGU6ICR7eH1gKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9VTktOT1dOX0NSRURFTlRJQUwgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcsIHk6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX1VOS05PV05fQ1JFREVOVElBTFwiLCBgJHt4fSBpZGVudGlmaWVyIGRvZXMgbm90IGV4aXN0OiAke3l9YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfVU5LTk9XTl9FTkNPRElORyBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9VTktOT1dOX0VOQ09ESU5HXCIsIGBVbmtub3duIGVuY29kaW5nOiAke3h9YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfVU5LTk9XTl9GSUxFX0VYVEVOU0lPTiBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcsIHk6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVU5LTk9XTl9GSUxFX0VYVEVOU0lPTlwiLFxuICAgICAgYFVua25vd24gZmlsZSBleHRlbnNpb24gXCIke3h9XCIgZm9yICR7eX1gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfVU5LTk9XTl9NT0RVTEVfRk9STUFUIGV4dGVuZHMgTm9kZVJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9VTktOT1dOX01PRFVMRV9GT1JNQVRcIiwgYFVua25vd24gbW9kdWxlIGZvcm1hdDogJHt4fWApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1VOS05PV05fU0lHTkFMIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFwiRVJSX1VOS05PV05fU0lHTkFMXCIsIGBVbmtub3duIHNpZ25hbDogJHt4fWApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1VOU1VQUE9SVEVEX0RJUl9JTVBPUlQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcsIHk6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVU5TVVBQT1JURURfRElSX0lNUE9SVFwiLFxuICAgICAgYERpcmVjdG9yeSBpbXBvcnQgJyR7eH0nIGlzIG5vdCBzdXBwb3J0ZWQgcmVzb2x2aW5nIEVTIG1vZHVsZXMsIGltcG9ydGVkIGZyb20gJHt5fWAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9VTlNVUFBPUlRFRF9FU01fVVJMX1NDSEVNRSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVU5TVVBQT1JURURfRVNNX1VSTF9TQ0hFTUVcIixcbiAgICAgIGBPbmx5IGZpbGUgYW5kIGRhdGEgVVJMcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBkZWZhdWx0IEVTTSBsb2FkZXJgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfVjhCUkVBS0lURVJBVE9SIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9WOEJSRUFLSVRFUkFUT1JcIixcbiAgICAgIGBGdWxsIElDVSBkYXRhIG5vdCBpbnN0YWxsZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvd2lraS9JbnRsYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1ZBTElEX1BFUkZPUk1BTkNFX0VOVFJZX1RZUEUgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1ZBTElEX1BFUkZPUk1BTkNFX0VOVFJZX1RZUEVcIixcbiAgICAgIGBBdCBsZWFzdCBvbmUgdmFsaWQgcGVyZm9ybWFuY2UgZW50cnkgdHlwZSBpcyByZXF1aXJlZGAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9WTV9EWU5BTUlDX0lNUE9SVF9DQUxMQkFDS19NSVNTSU5HIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVk1fRFlOQU1JQ19JTVBPUlRfQ0FMTEJBQ0tfTUlTU0lOR1wiLFxuICAgICAgYEEgZHluYW1pYyBpbXBvcnQgY2FsbGJhY2sgd2FzIG5vdCBzcGVjaWZpZWQuYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1ZNX01PRFVMRV9BTFJFQURZX0xJTktFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX1ZNX01PRFVMRV9BTFJFQURZX0xJTktFRFwiLCBgTW9kdWxlIGhhcyBhbHJlYWR5IGJlZW4gbGlua2VkYCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfVk1fTU9EVUxFX0NBTk5PVF9DUkVBVEVfQ0FDSEVEX0RBVEEgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1ZNX01PRFVMRV9DQU5OT1RfQ1JFQVRFX0NBQ0hFRF9EQVRBXCIsXG4gICAgICBgQ2FjaGVkIGRhdGEgY2Fubm90IGJlIGNyZWF0ZWQgZm9yIGEgbW9kdWxlIHdoaWNoIGhhcyBiZWVuIGV2YWx1YXRlZGAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9WTV9NT0RVTEVfRElGRkVSRU5UX0NPTlRFWFQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1ZNX01PRFVMRV9ESUZGRVJFTlRfQ09OVEVYVFwiLFxuICAgICAgYExpbmtlZCBtb2R1bGVzIG11c3QgdXNlIHRoZSBzYW1lIGNvbnRleHRgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfVk1fTU9EVUxFX0xJTktJTkdfRVJST1JFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfVk1fTU9EVUxFX0xJTktJTkdfRVJST1JFRFwiLFxuICAgICAgYExpbmtpbmcgaGFzIGFscmVhZHkgZmFpbGVkIGZvciB0aGUgcHJvdmlkZWQgbW9kdWxlYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1ZNX01PRFVMRV9OT1RfTU9EVUxFIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9WTV9NT0RVTEVfTk9UX01PRFVMRVwiLFxuICAgICAgYFByb3ZpZGVkIG1vZHVsZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgTW9kdWxlYCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1ZNX01PRFVMRV9TVEFUVVMgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9WTV9NT0RVTEVfU1RBVFVTXCIsIGBNb2R1bGUgc3RhdHVzICR7eH1gKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9XQVNJX0FMUkVBRFlfU1RBUlRFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX1dBU0lfQUxSRUFEWV9TVEFSVEVEXCIsIGBXQVNJIGluc3RhbmNlIGhhcyBhbHJlYWR5IHN0YXJ0ZWRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9XT1JLRVJfSU5JVF9GQUlMRUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9XT1JLRVJfSU5JVF9GQUlMRURcIiwgYFdvcmtlciBpbml0aWFsaXphdGlvbiBmYWlsdXJlOiAke3h9YCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfV09SS0VSX05PVF9SVU5OSU5HIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJFUlJfV09SS0VSX05PVF9SVU5OSU5HXCIsIGBXb3JrZXIgaW5zdGFuY2Ugbm90IHJ1bm5pbmdgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9XT1JLRVJfT1VUX09GX01FTU9SWSBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfV09SS0VSX09VVF9PRl9NRU1PUllcIixcbiAgICAgIGBXb3JrZXIgdGVybWluYXRlZCBkdWUgdG8gcmVhY2hpbmcgbWVtb3J5IGxpbWl0OiAke3h9YCxcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX1dPUktFUl9VTlNFUklBTElaQUJMRV9FUlJPUiBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfV09SS0VSX1VOU0VSSUFMSVpBQkxFX0VSUk9SXCIsXG4gICAgICBgU2VyaWFsaXppbmcgYW4gdW5jYXVnaHQgZXhjZXB0aW9uIGZhaWxlZGAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9XT1JLRVJfVU5TVVBQT1JURURfRVhURU5TSU9OIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHg6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfV09SS0VSX1VOU1VQUE9SVEVEX0VYVEVOU0lPTlwiLFxuICAgICAgYFRoZSB3b3JrZXIgc2NyaXB0IGV4dGVuc2lvbiBtdXN0IGJlIFwiLmpzXCIsIFwiLm1qc1wiLCBvciBcIi5janNcIi4gUmVjZWl2ZWQgXCIke3h9XCJgLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBFUlJfV09SS0VSX1VOU1VQUE9SVEVEX09QRVJBVElPTiBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih4OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX1dPUktFUl9VTlNVUFBPUlRFRF9PUEVSQVRJT05cIixcbiAgICAgIGAke3h9IGlzIG5vdCBzdXBwb3J0ZWQgaW4gd29ya2Vyc2AsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9aTElCX0lOSVRJQUxJWkFUSU9OX0ZBSUxFRCBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRVJSX1pMSUJfSU5JVElBTElaQVRJT05fRkFJTEVEXCIsIGBJbml0aWFsaXphdGlvbiBmYWlsZWRgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEVSUl9GQUxTWV9WQUxVRV9SRUpFQ1RJT04gZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICByZWFzb246IHN0cmluZztcbiAgY29uc3RydWN0b3IocmVhc29uOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9GQUxTWV9WQUxVRV9SRUpFQ1RJT05cIiwgXCJQcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIGZhbHN5IHZhbHVlXCIpO1xuICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX0lOVkFMSURfU0VUVElOR19WQUxVRSBleHRlbmRzIE5vZGVSYW5nZUVycm9yIHtcbiAgYWN0dWFsOiB1bmtub3duO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGFjdHVhbDogdW5rbm93biwgbWluPzogbnVtYmVyLCBtYXg/OiBudW1iZXIpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFAyX0lOVkFMSURfU0VUVElOR19WQUxVRVwiLFxuICAgICAgYEludmFsaWQgdmFsdWUgZm9yIHNldHRpbmcgXCIke25hbWV9XCI6ICR7YWN0dWFsfWAsXG4gICAgKTtcbiAgICB0aGlzLmFjdHVhbCA9IGFjdHVhbDtcbiAgICBpZiAobWluICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgfVxuICB9XG59XG5leHBvcnQgY2xhc3MgRVJSX0hUVFAyX1NUUkVBTV9DQU5DRUwgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBvdmVycmlkZSBjYXVzZT86IEVycm9yO1xuICBjb25zdHJ1Y3RvcihlcnJvcjogRXJyb3IpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0hUVFAyX1NUUkVBTV9DQU5DRUxcIixcbiAgICAgIHR5cGVvZiBlcnJvci5tZXNzYWdlID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gYFRoZSBwZW5kaW5nIHN0cmVhbSBoYXMgYmVlbiBjYW5jZWxlZCAoY2F1c2VkIGJ5OiAke2Vycm9yLm1lc3NhZ2V9KWBcbiAgICAgICAgOiBcIlRoZSBwZW5kaW5nIHN0cmVhbSBoYXMgYmVlbiBjYW5jZWxlZFwiLFxuICAgICk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aGlzLmNhdXNlID0gZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9BRERSRVNTX0ZBTUlMWSBleHRlbmRzIE5vZGVSYW5nZUVycm9yIHtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKGFkZHJlc3NUeXBlOiBzdHJpbmcsIGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9JTlZBTElEX0FERFJFU1NfRkFNSUxZXCIsXG4gICAgICBgSW52YWxpZCBhZGRyZXNzIGZhbWlseTogJHthZGRyZXNzVHlwZX0gJHtob3N0fToke3BvcnR9YCxcbiAgICApO1xuICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0lOVkFMSURfQ0hBUiBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9JTlZBTElEX0NIQVJcIixcbiAgICAgIGZpZWxkXG4gICAgICAgID8gYEludmFsaWQgY2hhcmFjdGVyIGluICR7bmFtZX1gXG4gICAgICAgIDogYEludmFsaWQgY2hhcmFjdGVyIGluICR7bmFtZX0gW1wiJHtmaWVsZH1cIl1gLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX09QVF9WQUxVRSBleHRlbmRzIE5vZGVUeXBlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9JTlZBTElEX09QVF9WQUxVRVwiLFxuICAgICAgYFRoZSB2YWx1ZSBcIiR7dmFsdWV9XCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwiJHtuYW1lfVwiYCxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9SRVRVUk5fUFJPUEVSVFkgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoaW5wdXQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0lOVkFMSURfUkVUVVJOX1BST1BFUlRZXCIsXG4gICAgICBgRXhwZWN0ZWQgYSB2YWxpZCAke2lucHV0fSB0byBiZSByZXR1cm5lZCBmb3IgdGhlIFwiJHtwcm9wfVwiIGZyb20gdGhlIFwiJHtuYW1lfVwiIGZ1bmN0aW9uIGJ1dCBnb3QgJHt2YWx1ZX0uYCxcbiAgICApO1xuICB9XG59XG5cbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBidWlsZFJldHVyblByb3BlcnR5VHlwZSh2YWx1ZTogYW55KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgcmV0dXJuIGBpbnN0YW5jZSBvZiAke3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWV9YDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYHR5cGUgJHt0eXBlb2YgdmFsdWV9YDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0lOVkFMSURfUkVUVVJOX1BST1BFUlRZX1ZBTFVFIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGlucHV0OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJvcDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSU5WQUxJRF9SRVRVUk5fUFJPUEVSVFlfVkFMVUVcIixcbiAgICAgIGBFeHBlY3RlZCAke2lucHV0fSB0byBiZSByZXR1cm5lZCBmb3IgdGhlIFwiJHtwcm9wfVwiIGZyb20gdGhlIFwiJHtuYW1lfVwiIGZ1bmN0aW9uIGJ1dCBnb3QgJHtcbiAgICAgICAgYnVpbGRSZXR1cm5Qcm9wZXJ0eVR5cGUoXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIClcbiAgICAgIH0uYCxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoaW5wdXQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUVcIixcbiAgICAgIGBFeHBlY3RlZCAke2lucHV0fSB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSBcIiR7bmFtZX1cIiBmdW5jdGlvbiBidXQgZ290ICR7XG4gICAgICAgIGJ1aWxkUmV0dXJuUHJvcGVydHlUeXBlKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICApXG4gICAgICB9LmAsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX0lOVkFMSURfVVJMIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGlucHV0OiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKGlucHV0OiBzdHJpbmcpIHtcbiAgICBzdXBlcihcIkVSUl9JTlZBTElEX1VSTFwiLCBgSW52YWxpZCBVUkw6ICR7aW5wdXR9YCk7XG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9VUkxfU0NIRU1FIGV4dGVuZHMgTm9kZVR5cGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGV4cGVjdGVkOiBzdHJpbmcgfCBbc3RyaW5nXSB8IFtzdHJpbmcsIHN0cmluZ10pIHtcbiAgICBleHBlY3RlZCA9IEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpID8gZXhwZWN0ZWQgOiBbZXhwZWN0ZWRdO1xuICAgIGNvbnN0IHJlcyA9IGV4cGVjdGVkLmxlbmd0aCA9PT0gMlxuICAgICAgPyBgb25lIG9mIHNjaGVtZSAke2V4cGVjdGVkWzBdfSBvciAke2V4cGVjdGVkWzFdfWBcbiAgICAgIDogYG9mIHNjaGVtZSAke2V4cGVjdGVkWzBdfWA7XG4gICAgc3VwZXIoXCJFUlJfSU5WQUxJRF9VUkxfU0NIRU1FXCIsIGBUaGUgVVJMIG11c3QgYmUgJHtyZXN9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9NT0RVTEVfTk9UX0ZPVU5EIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IocGF0aDogc3RyaW5nLCBiYXNlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyA9IFwicGFja2FnZVwiKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkVSUl9NT0RVTEVfTk9UX0ZPVU5EXCIsXG4gICAgICBgQ2Fubm90IGZpbmQgJHt0eXBlfSAnJHtwYXRofScgaW1wb3J0ZWQgZnJvbSAke2Jhc2V9YCxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfSU5WQUxJRF9QQUNLQUdFX0NPTkZJRyBleHRlbmRzIE5vZGVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHBhdGg6IHN0cmluZywgYmFzZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgIGNvbnN0IG1zZyA9IGBJbnZhbGlkIHBhY2thZ2UgY29uZmlnICR7cGF0aH0ke1xuICAgICAgYmFzZSA/IGAgd2hpbGUgaW1wb3J0aW5nICR7YmFzZX1gIDogXCJcIlxuICAgIH0ke21lc3NhZ2UgPyBgLiAke21lc3NhZ2V9YCA6IFwiXCJ9YDtcbiAgICBzdXBlcihcIkVSUl9JTlZBTElEX1BBQ0tBR0VfQ09ORklHXCIsIG1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX01PRFVMRV9TUEVDSUZJRVIgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVxdWVzdDogc3RyaW5nLCByZWFzb246IHN0cmluZywgYmFzZT86IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJFUlJfSU5WQUxJRF9NT0RVTEVfU1BFQ0lGSUVSXCIsXG4gICAgICBgSW52YWxpZCBtb2R1bGUgXCIke3JlcXVlc3R9XCIgJHtyZWFzb259JHtcbiAgICAgICAgYmFzZSA/IGAgaW1wb3J0ZWQgZnJvbSAke2Jhc2V9YCA6IFwiXCJcbiAgICAgIH1gLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9JTlZBTElEX1BBQ0tBR0VfVEFSR0VUIGV4dGVuZHMgTm9kZUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcGtnUGF0aDogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nLFxuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgdGFyZ2V0OiBhbnksXG4gICAgaXNJbXBvcnQ/OiBib29sZWFuLFxuICAgIGJhc2U/OiBzdHJpbmcsXG4gICkge1xuICAgIGxldCBtc2c6IHN0cmluZztcbiAgICBjb25zdCByZWxFcnJvciA9IHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICFpc0ltcG9ydCAmJlxuICAgICAgdGFyZ2V0Lmxlbmd0aCAmJlxuICAgICAgIXRhcmdldC5zdGFydHNXaXRoKFwiLi9cIik7XG4gICAgaWYgKGtleSA9PT0gXCIuXCIpIHtcbiAgICAgIGFzc2VydChpc0ltcG9ydCA9PT0gZmFsc2UpO1xuICAgICAgbXNnID0gYEludmFsaWQgXCJleHBvcnRzXCIgbWFpbiB0YXJnZXQgJHtKU09OLnN0cmluZ2lmeSh0YXJnZXQpfSBkZWZpbmVkIGAgK1xuICAgICAgICBgaW4gdGhlIHBhY2thZ2UgY29uZmlnICR7cGtnUGF0aH1wYWNrYWdlLmpzb24ke1xuICAgICAgICAgIGJhc2UgPyBgIGltcG9ydGVkIGZyb20gJHtiYXNlfWAgOiBcIlwiXG4gICAgICAgIH0ke3JlbEVycm9yID8gJzsgdGFyZ2V0cyBtdXN0IHN0YXJ0IHdpdGggXCIuL1wiJyA6IFwiXCJ9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnID0gYEludmFsaWQgXCIke2lzSW1wb3J0ID8gXCJpbXBvcnRzXCIgOiBcImV4cG9ydHNcIn1cIiB0YXJnZXQgJHtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICApXG4gICAgICB9IGRlZmluZWQgZm9yICcke2tleX0nIGluIHRoZSBwYWNrYWdlIGNvbmZpZyAke3BrZ1BhdGh9cGFja2FnZS5qc29uJHtcbiAgICAgICAgYmFzZSA/IGAgaW1wb3J0ZWQgZnJvbSAke2Jhc2V9YCA6IFwiXCJcbiAgICAgIH0ke3JlbEVycm9yID8gJzsgdGFyZ2V0cyBtdXN0IHN0YXJ0IHdpdGggXCIuL1wiJyA6IFwiXCJ9YDtcbiAgICB9XG4gICAgc3VwZXIoXCJFUlJfSU5WQUxJRF9QQUNLQUdFX1RBUkdFVFwiLCBtc2cpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFUlJfUEFDS0FHRV9JTVBPUlRfTk9UX0RFRklORUQgZXh0ZW5kcyBOb2RlVHlwZUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc3BlY2lmaWVyOiBzdHJpbmcsXG4gICAgcGFja2FnZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBiYXNlOiBzdHJpbmcsXG4gICkge1xuICAgIGNvbnN0IG1zZyA9IGBQYWNrYWdlIGltcG9ydCBzcGVjaWZpZXIgXCIke3NwZWNpZmllcn1cIiBpcyBub3QgZGVmaW5lZCR7XG4gICAgICBwYWNrYWdlUGF0aCA/IGAgaW4gcGFja2FnZSAke3BhY2thZ2VQYXRofXBhY2thZ2UuanNvbmAgOiBcIlwiXG4gICAgfSBpbXBvcnRlZCBmcm9tICR7YmFzZX1gO1xuXG4gICAgc3VwZXIoXCJFUlJfUEFDS0FHRV9JTVBPUlRfTk9UX0RFRklORURcIiwgbXNnKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRVJSX1BBQ0tBR0VfUEFUSF9OT1RfRVhQT1JURUQgZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihzdWJwYXRoOiBzdHJpbmcsIHBrZ1BhdGg6IHN0cmluZywgYmFzZVBhdGg/OiBzdHJpbmcpIHtcbiAgICBsZXQgbXNnOiBzdHJpbmc7XG4gICAgaWYgKHN1YnBhdGggPT09IFwiLlwiKSB7XG4gICAgICBtc2cgPSBgTm8gXCJleHBvcnRzXCIgbWFpbiBkZWZpbmVkIGluICR7cGtnUGF0aH1wYWNrYWdlLmpzb24ke1xuICAgICAgICBiYXNlUGF0aCA/IGAgaW1wb3J0ZWQgZnJvbSAke2Jhc2VQYXRofWAgOiBcIlwiXG4gICAgICB9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgbXNnID1cbiAgICAgICAgYFBhY2thZ2Ugc3VicGF0aCAnJHtzdWJwYXRofScgaXMgbm90IGRlZmluZWQgYnkgXCJleHBvcnRzXCIgaW4gJHtwa2dQYXRofXBhY2thZ2UuanNvbiR7XG4gICAgICAgICAgYmFzZVBhdGggPyBgIGltcG9ydGVkIGZyb20gJHtiYXNlUGF0aH1gIDogXCJcIlxuICAgICAgICB9YDtcbiAgICB9XG5cbiAgICBzdXBlcihcIkVSUl9QQUNLQUdFX1BBVEhfTk9UX0VYUE9SVEVEXCIsIG1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVSUl9JTlRFUk5BTF9BU1NFUlRJT04gZXh0ZW5kcyBOb2RlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3VmZml4ID0gXCJUaGlzIGlzIGNhdXNlZCBieSBlaXRoZXIgYSBidWcgaW4gTm9kZS5qcyBcIiArXG4gICAgICBcIm9yIGluY29ycmVjdCB1c2FnZSBvZiBOb2RlLmpzIGludGVybmFscy5cXG5cIiArXG4gICAgICBcIlBsZWFzZSBvcGVuIGFuIGlzc3VlIHdpdGggdGhpcyBzdGFjayB0cmFjZSBhdCBcIiArXG4gICAgICBcImh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXNcXG5cIjtcbiAgICBzdXBlcihcbiAgICAgIFwiRVJSX0lOVEVSTkFMX0FTU0VSVElPTlwiLFxuICAgICAgbWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gc3VmZml4IDogYCR7bWVzc2FnZX1cXG4ke3N1ZmZpeH1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gVXNpbmcgYGZzLnJtZGlyYCBvbiBhIHBhdGggdGhhdCBpcyBhIGZpbGUgcmVzdWx0cyBpbiBhbiBFTk9FTlQgZXJyb3Igb24gV2luZG93cyBhbmQgYW4gRU5PVERJUiBlcnJvciBvbiBQT1NJWC5cbmV4cG9ydCBjbGFzcyBFUlJfRlNfUk1ESVJfRU5PVERJUiBleHRlbmRzIE5vZGVTeXN0ZW1FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGNvZGUgPSBpc1dpbmRvd3MgPyBcIkVOT0VOVFwiIDogXCJFTk9URElSXCI7XG4gICAgY29uc3QgY3R4OiBOb2RlU3lzdGVtRXJyb3JDdHggPSB7XG4gICAgICBtZXNzYWdlOiBcIm5vdCBhIGRpcmVjdG9yeVwiLFxuICAgICAgcGF0aCxcbiAgICAgIHN5c2NhbGw6IFwicm1kaXJcIixcbiAgICAgIGNvZGUsXG4gICAgICBlcnJubzogaXNXaW5kb3dzID8gRU5PRU5UIDogRU5PVERJUixcbiAgICB9O1xuICAgIHN1cGVyKGNvZGUsIGN0eCwgXCJQYXRoIGlzIG5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVXZFeGNlcHRpb25Db250ZXh0IHtcbiAgc3lzY2FsbDogc3RyaW5nO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRlbm9FcnJvclRvTm9kZUVycm9yKGU6IEVycm9yLCBjdHg6IFV2RXhjZXB0aW9uQ29udGV4dCkge1xuICBjb25zdCBlcnJubyA9IGV4dHJhY3RPc0Vycm9yTnVtYmVyRnJvbUVycm9yTWVzc2FnZShlKTtcbiAgaWYgKHR5cGVvZiBlcnJubyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBlO1xuICB9XG5cbiAgY29uc3QgZXggPSB1dkV4Y2VwdGlvbih7XG4gICAgZXJybm86IG1hcFN5c0Vycm5vVG9VdkVycm5vKGVycm5vKSxcbiAgICAuLi5jdHgsXG4gIH0pO1xuICByZXR1cm4gZXg7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RPc0Vycm9yTnVtYmVyRnJvbUVycm9yTWVzc2FnZShlOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSBlIGluc3RhbmNlb2YgRXJyb3JcbiAgICA/IGUubWVzc2FnZS5tYXRjaCgvXFwob3MgZXJyb3IgKFxcZCspXFwpLylcbiAgICA6IGZhbHNlO1xuXG4gIGlmIChtYXRjaCkge1xuICAgIHJldHVybiArbWF0Y2hbMV07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29ublJlc2V0RXhjZXB0aW9uKG1zZzogc3RyaW5nKSB7XG4gIGNvbnN0IGV4ID0gbmV3IEVycm9yKG1zZyk7XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIChleCBhcyBhbnkpLmNvZGUgPSBcIkVDT05OUkVTRVRcIjtcbiAgcmV0dXJuIGV4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWdncmVnYXRlVHdvRXJyb3JzKFxuICBpbm5lckVycm9yOiBBZ2dyZWdhdGVFcnJvcixcbiAgb3V0ZXJFcnJvcjogQWdncmVnYXRlRXJyb3IgJiB7IGNvZGU6IHN0cmluZyB9LFxuKSB7XG4gIGlmIChpbm5lckVycm9yICYmIG91dGVyRXJyb3IgJiYgaW5uZXJFcnJvciAhPT0gb3V0ZXJFcnJvcikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG91dGVyRXJyb3IuZXJyb3JzKSkge1xuICAgICAgLy8gSWYgYG91dGVyRXJyb3JgIGlzIGFscmVhZHkgYW4gYEFnZ3JlZ2F0ZUVycm9yYC5cbiAgICAgIG91dGVyRXJyb3IuZXJyb3JzLnB1c2goaW5uZXJFcnJvcik7XG4gICAgICByZXR1cm4gb3V0ZXJFcnJvcjtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgY29uc3QgZXJyID0gbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgW1xuICAgICAgICBvdXRlckVycm9yLFxuICAgICAgICBpbm5lckVycm9yLFxuICAgICAgXSxcbiAgICAgIG91dGVyRXJyb3IubWVzc2FnZSxcbiAgICApO1xuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgKGVyciBhcyBhbnkpLmNvZGUgPSBvdXRlckVycm9yLmNvZGU7XG4gICAgcmV0dXJuIGVycjtcbiAgfVxuICByZXR1cm4gaW5uZXJFcnJvciB8fCBvdXRlckVycm9yO1xufVxuY29kZXMuRVJSX0lQQ19DSEFOTkVMX0NMT1NFRCA9IEVSUl9JUENfQ0hBTk5FTF9DTE9TRUQ7XG5jb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRSA9IEVSUl9JTlZBTElEX0FSR19UWVBFO1xuY29kZXMuRVJSX0lOVkFMSURfQVJHX1ZBTFVFID0gRVJSX0lOVkFMSURfQVJHX1ZBTFVFO1xuY29kZXMuRVJSX0lOVkFMSURfQ0FMTEJBQ0sgPSBFUlJfSU5WQUxJRF9DQUxMQkFDSztcbmNvZGVzLkVSUl9PVVRfT0ZfUkFOR0UgPSBFUlJfT1VUX09GX1JBTkdFO1xuY29kZXMuRVJSX1NPQ0tFVF9CQURfUE9SVCA9IEVSUl9TT0NLRVRfQkFEX1BPUlQ7XG5jb2Rlcy5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFMgPSBFUlJfQlVGRkVSX09VVF9PRl9CT1VORFM7XG5jb2Rlcy5FUlJfVU5LTk9XTl9FTkNPRElORyA9IEVSUl9VTktOT1dOX0VOQ09ESU5HO1xuLy8gVE9ETyhrdDNrKTogYXNzaWduIGFsbCBlcnJvciBjbGFzc2VzIGhlcmUuXG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGEgZ2VuZXJpYyBOb2RlLmpzIGVycm9yLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIGVycm9yUHJvcGVydGllcyBPYmplY3Qgd2l0aCBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGVycm9yLlxuICogQHJldHVybnNcbiAqL1xuY29uc3QgZ2VuZXJpY05vZGVFcnJvciA9IGhpZGVTdGFja0ZyYW1lcyhcbiAgZnVuY3Rpb24gZ2VuZXJpY05vZGVFcnJvcihtZXNzYWdlLCBlcnJvclByb3BlcnRpZXMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgT2JqZWN0LmFzc2lnbihlcnIsIGVycm9yUHJvcGVydGllcyk7XG5cbiAgICByZXR1cm4gZXJyO1xuICB9LFxuKTtcblxuZXhwb3J0IHsgY29kZXMsIGdlbmVyaWNOb2RlRXJyb3IsIGhpZGVTdGFja0ZyYW1lcyB9O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEFib3J0RXJyb3IsXG4gIEVSUl9BTUJJR1VPVVNfQVJHVU1FTlQsXG4gIEVSUl9BUkdfTk9UX0lURVJBQkxFLFxuICBFUlJfQVNTRVJUSU9OLFxuICBFUlJfQVNZTkNfQ0FMTEJBQ0ssXG4gIEVSUl9BU1lOQ19UWVBFLFxuICBFUlJfQlJPVExJX0lOVkFMSURfUEFSQU0sXG4gIEVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyxcbiAgRVJSX0JVRkZFUl9UT09fTEFSR0UsXG4gIEVSUl9DQU5OT1RfV0FUQ0hfU0lHSU5ULFxuICBFUlJfQ0hJTERfQ0xPU0VEX0JFRk9SRV9SRVBMWSxcbiAgRVJSX0NISUxEX1BST0NFU1NfSVBDX1JFUVVJUkVELFxuICBFUlJfQ0hJTERfUFJPQ0VTU19TVERJT19NQVhCVUZGRVIsXG4gIEVSUl9DT05TT0xFX1dSSVRBQkxFX1NUUkVBTSxcbiAgRVJSX0NPTlRFWFRfTk9UX0lOSVRJQUxJWkVELFxuICBFUlJfQ1BVX1VTQUdFLFxuICBFUlJfQ1JZUFRPX0NVU1RPTV9FTkdJTkVfTk9UX1NVUFBPUlRFRCxcbiAgRVJSX0NSWVBUT19FQ0RIX0lOVkFMSURfRk9STUFULFxuICBFUlJfQ1JZUFRPX0VDREhfSU5WQUxJRF9QVUJMSUNfS0VZLFxuICBFUlJfQ1JZUFRPX0VOR0lORV9VTktOT1dOLFxuICBFUlJfQ1JZUFRPX0ZJUFNfRk9SQ0VELFxuICBFUlJfQ1JZUFRPX0ZJUFNfVU5BVkFJTEFCTEUsXG4gIEVSUl9DUllQVE9fSEFTSF9GSU5BTElaRUQsXG4gIEVSUl9DUllQVE9fSEFTSF9VUERBVEVfRkFJTEVELFxuICBFUlJfQ1JZUFRPX0lOQ09NUEFUSUJMRV9LRVksXG4gIEVSUl9DUllQVE9fSU5DT01QQVRJQkxFX0tFWV9PUFRJT05TLFxuICBFUlJfQ1JZUFRPX0lOVkFMSURfRElHRVNULFxuICBFUlJfQ1JZUFRPX0lOVkFMSURfS0VZX09CSkVDVF9UWVBFLFxuICBFUlJfQ1JZUFRPX0lOVkFMSURfU1RBVEUsXG4gIEVSUl9DUllQVE9fUEJLREYyX0VSUk9SLFxuICBFUlJfQ1JZUFRPX1NDUllQVF9JTlZBTElEX1BBUkFNRVRFUixcbiAgRVJSX0NSWVBUT19TQ1JZUFRfTk9UX1NVUFBPUlRFRCxcbiAgRVJSX0NSWVBUT19TSUdOX0tFWV9SRVFVSVJFRCxcbiAgRVJSX0RJUl9DTE9TRUQsXG4gIEVSUl9ESVJfQ09OQ1VSUkVOVF9PUEVSQVRJT04sXG4gIEVSUl9ETlNfU0VUX1NFUlZFUlNfRkFJTEVELFxuICBFUlJfRE9NQUlOX0NBTExCQUNLX05PVF9BVkFJTEFCTEUsXG4gIEVSUl9ET01BSU5fQ0FOTk9UX1NFVF9VTkNBVUdIVF9FWENFUFRJT05fQ0FQVFVSRSxcbiAgRVJSX0VOQ09ESU5HX0lOVkFMSURfRU5DT0RFRF9EQVRBLFxuICBFUlJfRU5DT0RJTkdfTk9UX1NVUFBPUlRFRCxcbiAgRVJSX0VWQUxfRVNNX0NBTk5PVF9QUklOVCxcbiAgRVJSX0VWRU5UX1JFQ1VSU0lPTixcbiAgRVJSX0ZBTFNZX1ZBTFVFX1JFSkVDVElPTixcbiAgRVJSX0ZFQVRVUkVfVU5BVkFJTEFCTEVfT05fUExBVEZPUk0sXG4gIEVSUl9GU19FSVNESVIsXG4gIEVSUl9GU19GSUxFX1RPT19MQVJHRSxcbiAgRVJSX0ZTX0lOVkFMSURfU1lNTElOS19UWVBFLFxuICBFUlJfRlNfUk1ESVJfRU5PVERJUixcbiAgRVJSX0hUVFAyX0FMVFNWQ19JTlZBTElEX09SSUdJTixcbiAgRVJSX0hUVFAyX0FMVFNWQ19MRU5HVEgsXG4gIEVSUl9IVFRQMl9DT05ORUNUX0FVVEhPUklUWSxcbiAgRVJSX0hUVFAyX0NPTk5FQ1RfUEFUSCxcbiAgRVJSX0hUVFAyX0NPTk5FQ1RfU0NIRU1FLFxuICBFUlJfSFRUUDJfR09BV0FZX1NFU1NJT04sXG4gIEVSUl9IVFRQMl9IRUFERVJTX0FGVEVSX1JFU1BPTkQsXG4gIEVSUl9IVFRQMl9IRUFERVJTX1NFTlQsXG4gIEVSUl9IVFRQMl9IRUFERVJfU0lOR0xFX1ZBTFVFLFxuICBFUlJfSFRUUDJfSU5GT19TVEFUVVNfTk9UX0FMTE9XRUQsXG4gIEVSUl9IVFRQMl9JTlZBTElEX0NPTk5FQ1RJT05fSEVBREVSUyxcbiAgRVJSX0hUVFAyX0lOVkFMSURfSEVBREVSX1ZBTFVFLFxuICBFUlJfSFRUUDJfSU5WQUxJRF9JTkZPX1NUQVRVUyxcbiAgRVJSX0hUVFAyX0lOVkFMSURfT1JJR0lOLFxuICBFUlJfSFRUUDJfSU5WQUxJRF9QQUNLRURfU0VUVElOR1NfTEVOR1RILFxuICBFUlJfSFRUUDJfSU5WQUxJRF9QU0VVRE9IRUFERVIsXG4gIEVSUl9IVFRQMl9JTlZBTElEX1NFU1NJT04sXG4gIEVSUl9IVFRQMl9JTlZBTElEX1NFVFRJTkdfVkFMVUUsXG4gIEVSUl9IVFRQMl9JTlZBTElEX1NUUkVBTSxcbiAgRVJSX0hUVFAyX01BWF9QRU5ESU5HX1NFVFRJTkdTX0FDSyxcbiAgRVJSX0hUVFAyX05FU1RFRF9QVVNILFxuICBFUlJfSFRUUDJfTk9fU09DS0VUX01BTklQVUxBVElPTixcbiAgRVJSX0hUVFAyX09SSUdJTl9MRU5HVEgsXG4gIEVSUl9IVFRQMl9PVVRfT0ZfU1RSRUFNUyxcbiAgRVJSX0hUVFAyX1BBWUxPQURfRk9SQklEREVOLFxuICBFUlJfSFRUUDJfUElOR19DQU5DRUwsXG4gIEVSUl9IVFRQMl9QSU5HX0xFTkdUSCxcbiAgRVJSX0hUVFAyX1BTRVVET0hFQURFUl9OT1RfQUxMT1dFRCxcbiAgRVJSX0hUVFAyX1BVU0hfRElTQUJMRUQsXG4gIEVSUl9IVFRQMl9TRU5EX0ZJTEUsXG4gIEVSUl9IVFRQMl9TRU5EX0ZJTEVfTk9TRUVLLFxuICBFUlJfSFRUUDJfU0VTU0lPTl9FUlJPUixcbiAgRVJSX0hUVFAyX1NFVFRJTkdTX0NBTkNFTCxcbiAgRVJSX0hUVFAyX1NPQ0tFVF9CT1VORCxcbiAgRVJSX0hUVFAyX1NPQ0tFVF9VTkJPVU5ELFxuICBFUlJfSFRUUDJfU1RBVFVTXzEwMSxcbiAgRVJSX0hUVFAyX1NUQVRVU19JTlZBTElELFxuICBFUlJfSFRUUDJfU1RSRUFNX0NBTkNFTCxcbiAgRVJSX0hUVFAyX1NUUkVBTV9FUlJPUixcbiAgRVJSX0hUVFAyX1NUUkVBTV9TRUxGX0RFUEVOREVOQ1ksXG4gIEVSUl9IVFRQMl9UUkFJTEVSU19BTFJFQURZX1NFTlQsXG4gIEVSUl9IVFRQMl9UUkFJTEVSU19OT1RfUkVBRFksXG4gIEVSUl9IVFRQMl9VTlNVUFBPUlRFRF9QUk9UT0NPTCxcbiAgRVJSX0hUVFBfSEVBREVSU19TRU5ULFxuICBFUlJfSFRUUF9JTlZBTElEX0hFQURFUl9WQUxVRSxcbiAgRVJSX0hUVFBfSU5WQUxJRF9TVEFUVVNfQ09ERSxcbiAgRVJSX0hUVFBfU09DS0VUX0VOQ09ESU5HLFxuICBFUlJfSFRUUF9UUkFJTEVSX0lOVkFMSUQsXG4gIEVSUl9JTkNPTVBBVElCTEVfT1BUSU9OX1BBSVIsXG4gIEVSUl9JTlBVVF9UWVBFX05PVF9BTExPV0VELFxuICBFUlJfSU5TUEVDVE9SX0FMUkVBRFlfQUNUSVZBVEVELFxuICBFUlJfSU5TUEVDVE9SX0FMUkVBRFlfQ09OTkVDVEVELFxuICBFUlJfSU5TUEVDVE9SX0NMT1NFRCxcbiAgRVJSX0lOU1BFQ1RPUl9DT01NQU5ELFxuICBFUlJfSU5TUEVDVE9SX05PVF9BQ1RJVkUsXG4gIEVSUl9JTlNQRUNUT1JfTk9UX0FWQUlMQUJMRSxcbiAgRVJSX0lOU1BFQ1RPUl9OT1RfQ09OTkVDVEVELFxuICBFUlJfSU5TUEVDVE9SX05PVF9XT1JLRVIsXG4gIEVSUl9JTlRFUk5BTF9BU1NFUlRJT04sXG4gIEVSUl9JTlZBTElEX0FERFJFU1NfRkFNSUxZLFxuICBFUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgRVJSX0lOVkFMSURfQVJHX1RZUEVfUkFOR0UsXG4gIEVSUl9JTlZBTElEX0FSR19WQUxVRSxcbiAgRVJSX0lOVkFMSURfQVJHX1ZBTFVFX1JBTkdFLFxuICBFUlJfSU5WQUxJRF9BU1lOQ19JRCxcbiAgRVJSX0lOVkFMSURfQlVGRkVSX1NJWkUsXG4gIEVSUl9JTlZBTElEX0NBTExCQUNLLFxuICBFUlJfSU5WQUxJRF9DSEFSLFxuICBFUlJfSU5WQUxJRF9DVVJTT1JfUE9TLFxuICBFUlJfSU5WQUxJRF9GRCxcbiAgRVJSX0lOVkFMSURfRkRfVFlQRSxcbiAgRVJSX0lOVkFMSURfRklMRV9VUkxfSE9TVCxcbiAgRVJSX0lOVkFMSURfRklMRV9VUkxfUEFUSCxcbiAgRVJSX0lOVkFMSURfSEFORExFX1RZUEUsXG4gIEVSUl9JTlZBTElEX0hUVFBfVE9LRU4sXG4gIEVSUl9JTlZBTElEX0lQX0FERFJFU1MsXG4gIEVSUl9JTlZBTElEX01PRFVMRV9TUEVDSUZJRVIsXG4gIEVSUl9JTlZBTElEX09QVF9WQUxVRSxcbiAgRVJSX0lOVkFMSURfT1BUX1ZBTFVFX0VOQ09ESU5HLFxuICBFUlJfSU5WQUxJRF9QQUNLQUdFX0NPTkZJRyxcbiAgRVJSX0lOVkFMSURfUEFDS0FHRV9UQVJHRVQsXG4gIEVSUl9JTlZBTElEX1BFUkZPUk1BTkNFX01BUkssXG4gIEVSUl9JTlZBTElEX1BST1RPQ09MLFxuICBFUlJfSU5WQUxJRF9SRVBMX0VWQUxfQ09ORklHLFxuICBFUlJfSU5WQUxJRF9SRVBMX0lOUFVULFxuICBFUlJfSU5WQUxJRF9SRVRVUk5fUFJPUEVSVFksXG4gIEVSUl9JTlZBTElEX1JFVFVSTl9QUk9QRVJUWV9WQUxVRSxcbiAgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFLFxuICBFUlJfSU5WQUxJRF9TWU5DX0ZPUktfSU5QVVQsXG4gIEVSUl9JTlZBTElEX1RISVMsXG4gIEVSUl9JTlZBTElEX1RVUExFLFxuICBFUlJfSU5WQUxJRF9VUkksXG4gIEVSUl9JTlZBTElEX1VSTCxcbiAgRVJSX0lOVkFMSURfVVJMX1NDSEVNRSxcbiAgRVJSX0lQQ19DSEFOTkVMX0NMT1NFRCxcbiAgRVJSX0lQQ19ESVNDT05ORUNURUQsXG4gIEVSUl9JUENfT05FX1BJUEUsXG4gIEVSUl9JUENfU1lOQ19GT1JLLFxuICBFUlJfTUFOSUZFU1RfREVQRU5ERU5DWV9NSVNTSU5HLFxuICBFUlJfTUFOSUZFU1RfSU5URUdSSVRZX01JU01BVENILFxuICBFUlJfTUFOSUZFU1RfSU5WQUxJRF9SRVNPVVJDRV9GSUVMRCxcbiAgRVJSX01BTklGRVNUX1REWixcbiAgRVJSX01BTklGRVNUX1VOS05PV05fT05FUlJPUixcbiAgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXG4gIEVSUl9NSVNTSU5HX0FSR1MsXG4gIEVSUl9NSVNTSU5HX09QVElPTixcbiAgRVJSX01PRFVMRV9OT1RfRk9VTkQsXG4gIEVSUl9NVUxUSVBMRV9DQUxMQkFDSyxcbiAgRVJSX05BUElfQ09OU19GVU5DVElPTixcbiAgRVJSX05BUElfSU5WQUxJRF9EQVRBVklFV19BUkdTLFxuICBFUlJfTkFQSV9JTlZBTElEX1RZUEVEQVJSQVlfQUxJR05NRU5ULFxuICBFUlJfTkFQSV9JTlZBTElEX1RZUEVEQVJSQVlfTEVOR1RILFxuICBFUlJfTk9fQ1JZUFRPLFxuICBFUlJfTk9fSUNVLFxuICBFUlJfT1VUX09GX1JBTkdFLFxuICBFUlJfUEFDS0FHRV9JTVBPUlRfTk9UX0RFRklORUQsXG4gIEVSUl9QQUNLQUdFX1BBVEhfTk9UX0VYUE9SVEVELFxuICBFUlJfUVVJQ0NMSUVOVFNFU1NJT05fRkFJTEVELFxuICBFUlJfUVVJQ0NMSUVOVFNFU1NJT05fRkFJTEVEX1NFVFNPQ0tFVCxcbiAgRVJSX1FVSUNTRVNTSU9OX0RFU1RST1lFRCxcbiAgRVJSX1FVSUNTRVNTSU9OX0lOVkFMSURfRENJRCxcbiAgRVJSX1FVSUNTRVNTSU9OX1VQREFURUtFWSxcbiAgRVJSX1FVSUNTT0NLRVRfREVTVFJPWUVELFxuICBFUlJfUVVJQ1NPQ0tFVF9JTlZBTElEX1NUQVRFTEVTU19SRVNFVF9TRUNSRVRfTEVOR1RILFxuICBFUlJfUVVJQ1NPQ0tFVF9MSVNURU5JTkcsXG4gIEVSUl9RVUlDU09DS0VUX1VOQk9VTkQsXG4gIEVSUl9RVUlDU1RSRUFNX0RFU1RST1lFRCxcbiAgRVJSX1FVSUNTVFJFQU1fSU5WQUxJRF9QVVNILFxuICBFUlJfUVVJQ1NUUkVBTV9PUEVOX0ZBSUxFRCxcbiAgRVJSX1FVSUNTVFJFQU1fVU5TVVBQT1JURURfUFVTSCxcbiAgRVJSX1FVSUNfVExTMTNfUkVRVUlSRUQsXG4gIEVSUl9TQ1JJUFRfRVhFQ1VUSU9OX0lOVEVSUlVQVEVELFxuICBFUlJfU0VSVkVSX0FMUkVBRFlfTElTVEVOLFxuICBFUlJfU0VSVkVSX05PVF9SVU5OSU5HLFxuICBFUlJfU09DS0VUX0FMUkVBRFlfQk9VTkQsXG4gIEVSUl9TT0NLRVRfQkFEX0JVRkZFUl9TSVpFLFxuICBFUlJfU09DS0VUX0JBRF9QT1JULFxuICBFUlJfU09DS0VUX0JBRF9UWVBFLFxuICBFUlJfU09DS0VUX0JVRkZFUl9TSVpFLFxuICBFUlJfU09DS0VUX0NMT1NFRCxcbiAgRVJSX1NPQ0tFVF9ER1JBTV9JU19DT05ORUNURUQsXG4gIEVSUl9TT0NLRVRfREdSQU1fTk9UX0NPTk5FQ1RFRCxcbiAgRVJSX1NPQ0tFVF9ER1JBTV9OT1RfUlVOTklORyxcbiAgRVJSX1NSSV9QQVJTRSxcbiAgRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVELFxuICBFUlJfU1RSRUFNX0NBTk5PVF9QSVBFLFxuICBFUlJfU1RSRUFNX0RFU1RST1lFRCxcbiAgRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxcbiAgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UsXG4gIEVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsXG4gIEVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQsXG4gIEVSUl9TVFJFQU1fV1JBUCxcbiAgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsXG4gIEVSUl9TWU5USEVUSUMsXG4gIEVSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQsXG4gIEVSUl9UTFNfREhfUEFSQU1fU0laRSxcbiAgRVJSX1RMU19IQU5EU0hBS0VfVElNRU9VVCxcbiAgRVJSX1RMU19JTlZBTElEX0NPTlRFWFQsXG4gIEVSUl9UTFNfSU5WQUxJRF9QUk9UT0NPTF9WRVJTSU9OLFxuICBFUlJfVExTX0lOVkFMSURfU1RBVEUsXG4gIEVSUl9UTFNfUFJPVE9DT0xfVkVSU0lPTl9DT05GTElDVCxcbiAgRVJSX1RMU19SRU5FR09USUFUSU9OX0RJU0FCTEVELFxuICBFUlJfVExTX1JFUVVJUkVEX1NFUlZFUl9OQU1FLFxuICBFUlJfVExTX1NFU1NJT05fQVRUQUNLLFxuICBFUlJfVExTX1NOSV9GUk9NX1NFUlZFUixcbiAgRVJSX1RSQUNFX0VWRU5UU19DQVRFR09SWV9SRVFVSVJFRCxcbiAgRVJSX1RSQUNFX0VWRU5UU19VTkFWQUlMQUJMRSxcbiAgRVJSX1VOQVZBSUxBQkxFX0RVUklOR19FWElULFxuICBFUlJfVU5DQVVHSFRfRVhDRVBUSU9OX0NBUFRVUkVfQUxSRUFEWV9TRVQsXG4gIEVSUl9VTkVTQ0FQRURfQ0hBUkFDVEVSUyxcbiAgRVJSX1VOSEFORExFRF9FUlJPUixcbiAgRVJSX1VOS05PV05fQlVJTFRJTl9NT0RVTEUsXG4gIEVSUl9VTktOT1dOX0NSRURFTlRJQUwsXG4gIEVSUl9VTktOT1dOX0VOQ09ESU5HLFxuICBFUlJfVU5LTk9XTl9GSUxFX0VYVEVOU0lPTixcbiAgRVJSX1VOS05PV05fTU9EVUxFX0ZPUk1BVCxcbiAgRVJSX1VOS05PV05fU0lHTkFMLFxuICBFUlJfVU5TVVBQT1JURURfRElSX0lNUE9SVCxcbiAgRVJSX1VOU1VQUE9SVEVEX0VTTV9VUkxfU0NIRU1FLFxuICBFUlJfVjhCUkVBS0lURVJBVE9SLFxuICBFUlJfVkFMSURfUEVSRk9STUFOQ0VfRU5UUllfVFlQRSxcbiAgRVJSX1ZNX0RZTkFNSUNfSU1QT1JUX0NBTExCQUNLX01JU1NJTkcsXG4gIEVSUl9WTV9NT0RVTEVfQUxSRUFEWV9MSU5LRUQsXG4gIEVSUl9WTV9NT0RVTEVfQ0FOTk9UX0NSRUFURV9DQUNIRURfREFUQSxcbiAgRVJSX1ZNX01PRFVMRV9ESUZGRVJFTlRfQ09OVEVYVCxcbiAgRVJSX1ZNX01PRFVMRV9MSU5LSU5HX0VSUk9SRUQsXG4gIEVSUl9WTV9NT0RVTEVfTk9UX01PRFVMRSxcbiAgRVJSX1ZNX01PRFVMRV9TVEFUVVMsXG4gIEVSUl9XQVNJX0FMUkVBRFlfU1RBUlRFRCxcbiAgRVJSX1dPUktFUl9JTklUX0ZBSUxFRCxcbiAgRVJSX1dPUktFUl9OT1RfUlVOTklORyxcbiAgRVJSX1dPUktFUl9PVVRfT0ZfTUVNT1JZLFxuICBFUlJfV09SS0VSX1VOU0VSSUFMSVpBQkxFX0VSUk9SLFxuICBFUlJfV09SS0VSX1VOU1VQUE9SVEVEX0VYVEVOU0lPTixcbiAgRVJSX1dPUktFUl9VTlNVUFBPUlRFRF9PUEVSQVRJT04sXG4gIEVSUl9aTElCX0lOSVRJQUxJWkFUSU9OX0ZBSUxFRCxcbiAgTm9kZUVycm9yLFxuICBOb2RlRXJyb3JBYnN0cmFjdGlvbixcbiAgTm9kZVJhbmdlRXJyb3IsXG4gIE5vZGVTeW50YXhFcnJvcixcbiAgTm9kZVR5cGVFcnJvcixcbiAgTm9kZVVSSUVycm9yLFxuICBhZ2dyZWdhdGVUd29FcnJvcnMsXG4gIGNvZGVzLFxuICBjb25uUmVzZXRFeGNlcHRpb24sXG4gIGRlbm9FcnJvclRvTm9kZUVycm9yLFxuICBkbnNFeGNlcHRpb24sXG4gIGVycm5vRXhjZXB0aW9uLFxuICBlcnJvck1hcCxcbiAgZXhjZXB0aW9uV2l0aEhvc3RQb3J0LFxuICBnZW5lcmljTm9kZUVycm9yLFxuICBoaWRlU3RhY2tGcmFtZXMsXG4gIGlzU3RhY2tPdmVyZmxvd0Vycm9yLFxuICB1dkV4Y2VwdGlvbixcbiAgdXZFeGNlcHRpb25XaXRoSG9zdFBvcnQsXG59O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGtSZWplY3Rpb24gPSBTeW1ib2wuZm9yKFwibm9kZWpzLnJlamVjdGlvblwiKTtcblxuaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gXCIuL2ludGVybmFsL3V0aWwvaW5zcGVjdC5tanNcIjtcbmltcG9ydCB7XG4gIEFib3J0RXJyb3IsXG4gIC8vIGtFbmhhbmNlU3RhY2tCZWZvcmVJbnNwZWN0b3IsXG4gIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfT1VUX09GX1JBTkdFLFxuICBFUlJfVU5IQU5ETEVEX0VSUk9SLFxufSBmcm9tIFwiLi9pbnRlcm5hbC9lcnJvcnMudHNcIjtcblxuaW1wb3J0IHtcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbCxcbiAgdmFsaWRhdGVCb29sZWFuLFxuICB2YWxpZGF0ZUZ1bmN0aW9uLFxufSBmcm9tIFwiLi9pbnRlcm5hbC92YWxpZGF0b3JzLm1qc1wiO1xuaW1wb3J0IHsgc3BsaWNlT25lIH0gZnJvbSBcIi4vX3V0aWxzLnRzXCI7XG5cbmNvbnN0IGtDYXB0dXJlID0gU3ltYm9sKFwia0NhcHR1cmVcIik7XG5jb25zdCBrRXJyb3JNb25pdG9yID0gU3ltYm9sKFwiZXZlbnRzLmVycm9yTW9uaXRvclwiKTtcbmNvbnN0IGtNYXhFdmVudFRhcmdldExpc3RlbmVycyA9IFN5bWJvbChcImV2ZW50cy5tYXhFdmVudFRhcmdldExpc3RlbmVyc1wiKTtcbmNvbnN0IGtNYXhFdmVudFRhcmdldExpc3RlbmVyc1dhcm5lZCA9IFN5bWJvbChcbiAgXCJldmVudHMubWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnNXYXJuZWRcIixcbik7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7eyBjYXB0dXJlUmVqZWN0aW9ucz86IGJvb2xlYW47IH19IFtvcHRzXVxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50RW1pdHRlcihvcHRzKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcywgb3B0cyk7XG59XG5leHBvcnQgZGVmYXVsdCBFdmVudEVtaXR0ZXI7XG5FdmVudEVtaXR0ZXIub24gPSBvbjtcbkV2ZW50RW1pdHRlci5vbmNlID0gb25jZTtcbkV2ZW50RW1pdHRlci5nZXRFdmVudExpc3RlbmVycyA9IGdldEV2ZW50TGlzdGVuZXJzO1xuRXZlbnRFbWl0dGVyLnNldE1heExpc3RlbmVycyA9IHNldE1heExpc3RlbmVycztcbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcbkV2ZW50RW1pdHRlci51c2luZ0RvbWFpbnMgPSBmYWxzZTtcblxuRXZlbnRFbWl0dGVyLmNhcHR1cmVSZWplY3Rpb25TeW1ib2wgPSBrUmVqZWN0aW9uO1xuZXhwb3J0IGNvbnN0IGNhcHR1cmVSZWplY3Rpb25TeW1ib2wgPSBFdmVudEVtaXR0ZXIuY2FwdHVyZVJlamVjdGlvblN5bWJvbDtcbmV4cG9ydCBjb25zdCBlcnJvck1vbml0b3IgPSBFdmVudEVtaXR0ZXIuZXJyb3JNb25pdG9yO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCBcImNhcHR1cmVSZWplY3Rpb25zXCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiBFdmVudEVtaXR0ZXIucHJvdG90eXBlW2tDYXB0dXJlXTtcbiAgfSxcbiAgc2V0KHZhbHVlKSB7XG4gICAgdmFsaWRhdGVCb29sZWFuKHZhbHVlLCBcIkV2ZW50RW1pdHRlci5jYXB0dXJlUmVqZWN0aW9uc1wiKTtcblxuICAgIEV2ZW50RW1pdHRlci5wcm90b3R5cGVba0NhcHR1cmVdID0gdmFsdWU7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG59KTtcblxuRXZlbnRFbWl0dGVyLmVycm9yTW9uaXRvciA9IGtFcnJvck1vbml0b3I7XG5cbi8vIFRoZSBkZWZhdWx0IGZvciBjYXB0dXJlUmVqZWN0aW9ucyBpcyBmYWxzZVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlci5wcm90b3R5cGUsIGtDYXB0dXJlLCB7XG4gIHZhbHVlOiBmYWxzZSxcbiAgd3JpdGFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IGZhbHNlLFxufSk7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuZXhwb3J0IGxldCBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgdmFsaWRhdGVGdW5jdGlvbihsaXN0ZW5lciwgXCJsaXN0ZW5lclwiKTtcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiIHx8IGFyZyA8IDAgfHwgTnVtYmVyLmlzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBFUlJfT1VUX09GX1JBTkdFKFxuICAgICAgICBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIixcbiAgICAgICAgXCJhIG5vbi1uZWdhdGl2ZSBudW1iZXJcIixcbiAgICAgICAgYXJnLFxuICAgICAgKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfSxcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFdmVudEVtaXR0ZXIsIHtcbiAga01heEV2ZW50VGFyZ2V0TGlzdGVuZXJzOiB7XG4gICAgdmFsdWU6IGtNYXhFdmVudFRhcmdldExpc3RlbmVycyxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbiAga01heEV2ZW50VGFyZ2V0TGlzdGVuZXJzV2FybmVkOiB7XG4gICAgdmFsdWU6IGtNYXhFdmVudFRhcmdldExpc3RlbmVyc1dhcm5lZCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgfSxcbn0pO1xuXG4vKipcbiAqIFNldHMgdGhlIG1heCBsaXN0ZW5lcnMuXG4gKiBAcGFyYW0ge251bWJlcn0gblxuICogQHBhcmFtIHtFdmVudFRhcmdldFtdIHwgRXZlbnRFbWl0dGVyW119IFtldmVudFRhcmdldHNdXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhcbiAgbiA9IGRlZmF1bHRNYXhMaXN0ZW5lcnMsXG4gIC4uLmV2ZW50VGFyZ2V0c1xuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gXCJudW1iZXJcIiB8fCBuIDwgMCB8fCBOdW1iZXIuaXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShcIm5cIiwgXCJhIG5vbi1uZWdhdGl2ZSBudW1iZXJcIiwgbik7XG4gIH1cbiAgaWYgKGV2ZW50VGFyZ2V0cy5sZW5ndGggPT09IDApIHtcbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gbjtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50VGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnRUYXJnZXRzW2ldO1xuICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldFtrTWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnNdID0gbjtcbiAgICAgICAgdGFyZ2V0W2tNYXhFdmVudFRhcmdldExpc3RlbmVyc1dhcm5lZF0gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldC5zZXRNYXhMaXN0ZW5lcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0YXJnZXQuc2V0TWF4TGlzdGVuZXJzKG4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgICAgIFwiZXZlbnRUYXJnZXRzXCIsXG4gICAgICAgICAgW1wiRXZlbnRFbWl0dGVyXCIsIFwiRXZlbnRUYXJnZXRcIl0sXG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uIChvcHRzKSB7XG4gIGlmIChcbiAgICB0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHNcbiAgKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xuXG4gIGlmIChvcHRzPy5jYXB0dXJlUmVqZWN0aW9ucykge1xuICAgIHZhbGlkYXRlQm9vbGVhbihvcHRzLmNhcHR1cmVSZWplY3Rpb25zLCBcIm9wdGlvbnMuY2FwdHVyZVJlamVjdGlvbnNcIik7XG4gICAgdGhpc1trQ2FwdHVyZV0gPSBCb29sZWFuKG9wdHMuY2FwdHVyZVJlamVjdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIC8vIEFzc2lnbmluZyB0aGUga0NhcHR1cmUgcHJvcGVydHkgZGlyZWN0bHkgc2F2ZXMgYW4gZXhwZW5zaXZlXG4gICAgLy8gcHJvdG90eXBlIGxvb2t1cCBpbiBhIHZlcnkgc2Vuc2l0aXZlIGhvdCBwYXRoLlxuICAgIHRoaXNba0NhcHR1cmVdID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZVtrQ2FwdHVyZV07XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFkZENhdGNoKHRoYXQsIHByb21pc2UsIHR5cGUsIGFyZ3MpIHtcbiAgaWYgKCF0aGF0W2tDYXB0dXJlXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEhhbmRsZSBQcm9taXNlcy9BKyBzcGVjLCB0aGVuIGNvdWxkIGJlIGEgZ2V0dGVyXG4gIC8vIHRoYXQgdGhyb3dzIG9uIHNlY29uZCB1c2UuXG4gIHRyeSB7XG4gICAgY29uc3QgdGhlbiA9IHByb21pc2UudGhlbjtcblxuICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGVuLmNhbGwocHJvbWlzZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIC8vIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBuZXh0VGljayB0byBhdm9pZCBhIGZvbGxvdy11cFxuICAgICAgICAvLyByZWplY3Rpb24gZnJvbSB0aGlzIHByb21pc2UuXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdFVuaGFuZGxlZFJlamVjdGlvbk9yRXJyLCB0aGF0LCBlcnIsIHR5cGUsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGF0LmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRVbmhhbmRsZWRSZWplY3Rpb25PckVycihlZSwgZXJyLCB0eXBlLCBhcmdzKSB7XG4gIGlmICh0eXBlb2YgZWVba1JlamVjdGlvbl0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGVlW2tSZWplY3Rpb25dKGVyciwgdHlwZSwgLi4uYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgaGF2ZSB0byBkaXNhYmxlIHRoZSBjYXB0dXJlIHJlamVjdGlvbnMgbWVjaGFuaXNtLCBvdGhlcndpc2VcbiAgICAvLyB3ZSBtaWdodCBlbmQgdXAgaW4gYW4gaW5maW5pdGUgbG9vcC5cbiAgICBjb25zdCBwcmV2ID0gZWVba0NhcHR1cmVdO1xuXG4gICAgLy8gSWYgdGhlIGVycm9yIGhhbmRsZXIgdGhyb3dzLCBpdCBpcyBub3QgY2F0Y2hlYWJsZSBhbmQgaXRcbiAgICAvLyB3aWxsIGVuZCB1cCBpbiAndW5jYXVnaHRFeGNlcHRpb24nLiBXZSByZXN0b3JlIHRoZSBwcmV2aW91c1xuICAgIC8vIHZhbHVlIG9mIGtDYXB0dXJlIGluIGNhc2UgdGhlIHVuY2F1Z2h0RXhjZXB0aW9uIGlzIHByZXNlbnRcbiAgICAvLyBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBoYW5kbGVkLlxuICAgIHRyeSB7XG4gICAgICBlZVtrQ2FwdHVyZV0gPSBmYWxzZTtcbiAgICAgIGVlLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlZVtrQ2FwdHVyZV0gPSBwcmV2O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEluY3JlYXNlcyB0aGUgbWF4IGxpc3RlbmVycyBvZiB0aGUgZXZlbnQgZW1pdHRlci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gXCJudW1iZXJcIiB8fCBuIDwgMCB8fCBOdW1iZXIuaXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgRVJSX09VVF9PRl9SQU5HRShcIm5cIiwgXCJhIG5vbi1uZWdhdGl2ZSBudW1iZXJcIiwgbik7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBtYXggbGlzdGVuZXIgdmFsdWUgZm9yIHRoZSBldmVudCBlbWl0dGVyLlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuLy8gUmV0dXJucyB0aGUgbGVuZ3RoIGFuZCBsaW5lIG51bWJlciBvZiB0aGUgZmlyc3Qgc2VxdWVuY2Ugb2YgYGFgIHRoYXQgZnVsbHlcbi8vIGFwcGVhcnMgaW4gYGJgIHdpdGggYSBsZW5ndGggb2YgYXQgbGVhc3QgNC5cbmZ1bmN0aW9uIGlkZW50aWNhbFNlcXVlbmNlUmFuZ2UoYSwgYikge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoIC0gMzsgaSsrKSB7XG4gICAgLy8gRmluZCB0aGUgZmlyc3QgZW50cnkgb2YgYiB0aGF0IG1hdGNoZXMgdGhlIGN1cnJlbnQgZW50cnkgb2YgYS5cbiAgICBjb25zdCBwb3MgPSBiLmluZGV4T2YoYVtpXSk7XG4gICAgaWYgKHBvcyAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IHJlc3QgPSBiLmxlbmd0aCAtIHBvcztcbiAgICAgIGlmIChyZXN0ID4gMykge1xuICAgICAgICBsZXQgbGVuID0gMTtcbiAgICAgICAgY29uc3QgbWF4TGVuID0gTWF0aC5taW4oYS5sZW5ndGggLSBpLCByZXN0KTtcbiAgICAgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBlbnRyaWVzLlxuICAgICAgICB3aGlsZSAobWF4TGVuID4gbGVuICYmIGFbaSArIGxlbl0gPT09IGJbcG9zICsgbGVuXSkge1xuICAgICAgICAgIGxlbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZW4gPiAzKSB7XG4gICAgICAgICAgcmV0dXJuIFtsZW4sIGldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFswLCAwXTtcbn1cblxuLy8gZGVuby1saW50LWlnbm9yZSBuby11bnVzZWQtdmFyc1xuZnVuY3Rpb24gZW5oYW5jZVN0YWNrVHJhY2UoZXJyLCBvd24pIHtcbiAgbGV0IGN0b3JJbmZvID0gXCJcIjtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgaWYgKG5hbWUgIT09IFwiRXZlbnRFbWl0dGVyXCIpIHtcbiAgICAgIGN0b3JJbmZvID0gYCBvbiAke25hbWV9IGluc3RhbmNlYDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIHBhc3NcbiAgfVxuICBjb25zdCBzZXAgPSBgXFxuRW1pdHRlZCAnZXJyb3InIGV2ZW50JHtjdG9ySW5mb30gYXQ6XFxuYDtcblxuICBjb25zdCBlcnJTdGFjayA9IGVyci5zdGFjay5zcGxpdChcIlxcblwiKS5zbGljZSgxKTtcbiAgY29uc3Qgb3duU3RhY2sgPSBvd24uc3RhY2suc3BsaXQoXCJcXG5cIikuc2xpY2UoMSk7XG5cbiAgY29uc3QgeyAwOiBsZW4sIDE6IG9mZiB9ID0gaWRlbnRpY2FsU2VxdWVuY2VSYW5nZShvd25TdGFjaywgZXJyU3RhY2spO1xuICBpZiAobGVuID4gMCkge1xuICAgIG93blN0YWNrLnNwbGljZShcbiAgICAgIG9mZiArIDEsXG4gICAgICBsZW4gLSAyLFxuICAgICAgXCIgICAgWy4uLiBsaW5lcyBtYXRjaGluZyBvcmlnaW5hbCBzdGFjayB0cmFjZSAuLi5dXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnIuc3RhY2sgKyBzZXAgKyBvd25TdGFjay5qb2luKFwiXFxuXCIpO1xufVxuXG4vKipcbiAqIFN5bmNocm9ub3VzbHkgY2FsbHMgZWFjaCBvZiB0aGUgbGlzdGVuZXJzIHJlZ2lzdGVyZWRcbiAqIGZvciB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gdHlwZVxuICogQHBhcmFtIHsuLi5hbnl9IFthcmdzXVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSwgLi4uYXJncykge1xuICBsZXQgZG9FcnJvciA9ICh0eXBlID09PSBcImVycm9yXCIpO1xuXG4gIGNvbnN0IGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGRvRXJyb3IgJiYgZXZlbnRzW2tFcnJvck1vbml0b3JdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZW1pdChrRXJyb3JNb25pdG9yLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgZG9FcnJvciA9IGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAoIWRvRXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgbGV0IGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICB9XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmUgPSB7fTtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoY2FwdHVyZSwgRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0KTtcbiAgICAgICAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyLCBrRW5oYW5jZVN0YWNrQmVmb3JlSW5zcGVjdG9yLCB7XG4gICAgICAgIC8vICAgdmFsdWU6IGVuaGFuY2VTdGFja1RyYWNlLmJpbmQodGhpcywgZXIsIGNhcHR1cmUpLFxuICAgICAgICAvLyAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAvLyB9KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBwYXNzXG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cblxuICAgIGxldCBzdHJpbmdpZmllZEVyO1xuICAgIHRyeSB7XG4gICAgICBzdHJpbmdpZmllZEVyID0gaW5zcGVjdChlcik7XG4gICAgfSBjYXRjaCB7XG4gICAgICBzdHJpbmdpZmllZEVyID0gZXI7XG4gICAgfVxuXG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIGNvbnN0IGVyciA9IG5ldyBFUlJfVU5IQU5ETEVEX0VSUk9SKHN0cmluZ2lmaWVkRXIpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgY29uc3QgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgLy8gV2UgY2hlY2sgaWYgcmVzdWx0IGlzIHVuZGVmaW5lZCBmaXJzdCBiZWNhdXNlIHRoYXRcbiAgICAvLyBpcyB0aGUgbW9zdCBjb21tb24gY2FzZSBzbyB3ZSBkbyBub3QgcGF5IGFueSBwZXJmXG4gICAgLy8gcGVuYWx0eVxuICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQgIT09IG51bGwpIHtcbiAgICAgIGFkZENhdGNoKHRoaXMsIHJlc3VsdCwgdHlwZSwgYXJncyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgICAvLyBXZSBjaGVjayBpZiByZXN1bHQgaXMgdW5kZWZpbmVkIGZpcnN0IGJlY2F1c2UgdGhhdFxuICAgICAgLy8gaXMgdGhlIG1vc3QgY29tbW9uIGNhc2Ugc28gd2UgZG8gbm90IHBheSBhbnkgcGVyZlxuICAgICAgLy8gcGVuYWx0eS5cbiAgICAgIC8vIFRoaXMgY29kZSBpcyBkdXBsaWNhdGVkIGJlY2F1c2UgZXh0cmFjdGluZyBpdCBhd2F5XG4gICAgICAvLyB3b3VsZCBtYWtlIGl0IG5vbi1pbmxpbmVhYmxlLlxuICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICBhZGRDYXRjaCh0aGlzLCByZXN1bHQsIHR5cGUsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgbGV0IG07XG4gIGxldCBldmVudHM7XG4gIGxldCBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoXCJuZXdMaXN0ZW5lclwiLCB0eXBlLCBsaXN0ZW5lci5saXN0ZW5lciA/PyBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IHByZXBlbmRcbiAgICAgICAgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXVxuICAgICAgICA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgY29uc3QgdyA9IG5ldyBFcnJvcihcbiAgICAgICAgXCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuIFwiICtcbiAgICAgICAgICBgJHtleGlzdGluZy5sZW5ndGh9ICR7U3RyaW5nKHR5cGUpfSBsaXN0ZW5lcnMgYCArXG4gICAgICAgICAgYGFkZGVkIHRvICR7aW5zcGVjdCh0YXJnZXQsIHsgZGVwdGg6IC0xIH0pfS4gVXNlIGAgK1xuICAgICAgICAgIFwiZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdFwiLFxuICAgICAgKTtcbiAgICAgIHcubmFtZSA9IFwiTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nXCI7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuLyoqXG4gKiBBZGRzIGEgbGlzdGVuZXIgdG8gdGhlIGV2ZW50IGVtaXR0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuLyoqXG4gKiBBZGRzIHRoZSBgbGlzdGVuZXJgIGZ1bmN0aW9uIHRvIHRoZSBiZWdpbm5pbmcgb2ZcbiAqIHRoZSBsaXN0ZW5lcnMgYXJyYXkuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID0gZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKFxuICB0eXBlLFxuICBsaXN0ZW5lcixcbikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbn07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNvbnN0IHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQsIHR5cGUsIGxpc3RlbmVyIH07XG4gIGNvbnN0IHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuLyoqXG4gKiBBZGRzIGEgb25lLXRpbWUgYGxpc3RlbmVyYCBmdW5jdGlvbiB0byB0aGUgZXZlbnQgZW1pdHRlci5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3ltYm9sfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkcyBhIG9uZS10aW1lIGBsaXN0ZW5lcmAgZnVuY3Rpb24gdG8gdGhlIGJlZ2lubmluZyBvZlxuICogdGhlIGxpc3RlbmVycyBhcnJheS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3ltYm9sfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lclxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID0gZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcihcbiAgdHlwZSxcbiAgbGlzdGVuZXIsXG4pIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgYGxpc3RlbmVyYCBmcm9tIHRoZSBsaXN0ZW5lcnMgYXJyYXkuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihcbiAgdHlwZSxcbiAgbGlzdGVuZXIsXG4pIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgY29uc3QgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbnN0IGxpc3QgPSBldmVudHNbdHlwZV07XG4gIGlmIChsaXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKSB7XG4gICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgICAgICB0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lclwiLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCBwb3NpdGlvbiA9IC0xO1xuXG4gICAgZm9yIChsZXQgaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA8IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA9PT0gMCkge1xuICAgICAgbGlzdC5zaGlmdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsIHR5cGUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBsaXN0ZW5lcnMgZnJvbSB0aGUgZXZlbnQgZW1pdHRlci4gKE9ubHlcbiAqIHJlbW92ZXMgbGlzdGVuZXJzIGZvciBhIHNwZWNpZmljIGV2ZW50IG5hbWUgaWYgc3BlY2lmaWVkXG4gKiBhcyBgdHlwZWApLlxuICogQHBhcmFtIHtzdHJpbmcgfCBzeW1ib2x9IFt0eXBlXVxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn1cbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICBjb25zdCBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gTm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBFbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoZXZlbnRzKSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJyZW1vdmVMaXN0ZW5lclwiKSBjb250aW51ZTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwicmVtb3ZlTGlzdGVuZXJcIik7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25zdCBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIExJRk8gb3JkZXJcbiAgICBmb3IgKGxldCBpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIGNvbnN0IGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcbiAgfVxuXG4gIHJldHVybiB1bndyYXAgPyB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBhcnJheSBvZiBsaXN0ZW5lcnMgZm9yIHRoZSBldmVudCBuYW1lXG4gKiBzcGVjaWZpZWQgYXMgYHR5cGVgLlxuICogQHBhcmFtIHtzdHJpbmcgfCBzeW1ib2x9IHR5cGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbltdfVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgYXJyYXkgb2YgbGlzdGVuZXJzIGFuZCB3cmFwcGVycyBmb3JcbiAqIHRoZSBldmVudCBuYW1lIHNwZWNpZmllZCBhcyBgdHlwZWAuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gdHlwZVxuICogQHJldHVybnMge0Z1bmN0aW9uW119XG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGxpc3RlbmluZyB0byBldmVudCBuYW1lXG4gKiBzcGVjaWZpZWQgYXMgYHR5cGVgLlxuICogQHBhcmFtIHtzdHJpbmcgfCBzeW1ib2x9IHR5cGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmNvbnN0IF9saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIGNvbnN0IGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBfbGlzdGVuZXJDb3VudDtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbGlzdGVuZXJzIGxpc3RlbmluZyB0byB0aGUgZXZlbnQgbmFtZVxuICogc3BlY2lmaWVkIGFzIGB0eXBlYC5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHYzLjIuMFxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXJcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3ltYm9sfSB0eXBlXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuZXJDb3VudChlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9XG4gIHJldHVybiBfbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaFxuICogdGhlIGVtaXR0ZXIgaGFzIHJlZ2lzdGVyZWQgbGlzdGVuZXJzLlxuICogQHJldHVybnMge2FueVtdfVxuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdC5vd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyKSB7XG4gIC8vIEF0IGxlYXN0IHNpbmNlIFY4IDguMywgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBmYXN0ZXIgdGhhbiB0aGUgcHJldmlvdXNcbiAgLy8gd2hpY2ggYWx3YXlzIHVzZWQgYSBzaW1wbGUgZm9yLWxvb3BcbiAgc3dpdGNoIChhcnIubGVuZ3RoKSB7XG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIFthcnJbMF0sIGFyclsxXV07XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIFthcnJbMF0sIGFyclsxXSwgYXJyWzJdXTtcbiAgICBjYXNlIDQ6XG4gICAgICByZXR1cm4gW2FyclswXSwgYXJyWzFdLCBhcnJbMl0sIGFyclszXV07XG4gICAgY2FzZSA1OlxuICAgICAgcmV0dXJuIFthcnJbMF0sIGFyclsxXSwgYXJyWzJdLCBhcnJbM10sIGFycls0XV07XG4gICAgY2FzZSA2OlxuICAgICAgcmV0dXJuIFthcnJbMF0sIGFyclsxXSwgYXJyWzJdLCBhcnJbM10sIGFycls0XSwgYXJyWzVdXTtcbiAgfVxuICByZXR1cm4gYXJyLnNsaWNlKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgY29uc3QgcmV0ID0gYXJyYXlDbG9uZShhcnIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IG9yaWcgPSByZXRbaV0ubGlzdGVuZXI7XG4gICAgaWYgKHR5cGVvZiBvcmlnID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldFtpXSA9IG9yaWc7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIGFycmF5IG9mIGxpc3RlbmVycyBmb3IgdGhlIGV2ZW50IG5hbWVcbiAqIHNwZWNpZmllZCBhcyBgdHlwZWAuXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlciB8IEV2ZW50VGFyZ2V0fSBlbWl0dGVyT3JUYXJnZXRcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3ltYm9sfSB0eXBlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb25bXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50TGlzdGVuZXJzKGVtaXR0ZXJPclRhcmdldCwgdHlwZSkge1xuICAvLyBGaXJzdCBjaGVjayBpZiBFdmVudEVtaXR0ZXJcbiAgaWYgKHR5cGVvZiBlbWl0dGVyT3JUYXJnZXQubGlzdGVuZXJzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gZW1pdHRlck9yVGFyZ2V0Lmxpc3RlbmVycyh0eXBlKTtcbiAgfVxuICBpZiAoZW1pdHRlck9yVGFyZ2V0IGluc3RhbmNlb2YgRXZlbnRUYXJnZXQpIHtcbiAgICAvLyBUT0RPOiBrRXZlbnRzIGlzIG5vdCBkZWZpbmVkXG4gICAgY29uc3Qgcm9vdCA9IGVtaXR0ZXJPclRhcmdldFtrRXZlbnRzXS5nZXQodHlwZSk7XG4gICAgY29uc3QgbGlzdGVuZXJzID0gW107XG4gICAgbGV0IGhhbmRsZXIgPSByb290Py5uZXh0O1xuICAgIHdoaWxlIChoYW5kbGVyPy5saXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lciA9IGhhbmRsZXIubGlzdGVuZXI/LmRlcmVmXG4gICAgICAgID8gaGFuZGxlci5saXN0ZW5lci5kZXJlZigpXG4gICAgICAgIDogaGFuZGxlci5saXN0ZW5lcjtcbiAgICAgIGxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgIGhhbmRsZXIgPSBoYW5kbGVyLm5leHQ7XG4gICAgfVxuICAgIHJldHVybiBsaXN0ZW5lcnM7XG4gIH1cbiAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgIFwiZW1pdHRlclwiLFxuICAgIFtcIkV2ZW50RW1pdHRlclwiLCBcIkV2ZW50VGFyZ2V0XCJdLFxuICAgIGVtaXR0ZXJPclRhcmdldCxcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYFByb21pc2VgIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gdGhlIGVtaXR0ZXJcbiAqIGVtaXRzIHRoZSBnaXZlbiBldmVudC5cbiAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBlbWl0dGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHNpZ25hbDogQWJvcnRTaWduYWw7IH19IFtvcHRpb25zXVxuICogQHJldHVybnMge1Byb21pc2V9XG4gKi9cbi8vIGRlbm8tbGludC1pZ25vcmUgcmVxdWlyZS1hd2FpdFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHNpZ25hbCA9IG9wdGlvbnM/LnNpZ25hbDtcbiAgdmFsaWRhdGVBYm9ydFNpZ25hbChzaWduYWwsIFwib3B0aW9ucy5zaWduYWxcIik7XG4gIGlmIChzaWduYWw/LmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQWJvcnRFcnJvcigpO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZXJyb3JMaXN0ZW5lciA9IChlcnIpID0+IHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNSZW1vdmVMaXN0ZW5lcihzaWduYWwsIFwiYWJvcnRcIiwgYWJvcnRMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlc29sdmVyID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaWduYWwgIT0gbnVsbCkge1xuICAgICAgICBldmVudFRhcmdldEFnbm9zdGljUmVtb3ZlTGlzdGVuZXIoc2lnbmFsLCBcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICB9O1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSBcImVycm9yXCIgJiYgdHlwZW9mIGVtaXR0ZXIub25jZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBlbWl0dGVyLm9uY2UoXCJlcnJvclwiLCBlcnJvckxpc3RlbmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWJvcnRMaXN0ZW5lcigpIHtcbiAgICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNSZW1vdmVMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlcik7XG4gICAgICBldmVudFRhcmdldEFnbm9zdGljUmVtb3ZlTGlzdGVuZXIoZW1pdHRlciwgXCJlcnJvclwiLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIHJlamVjdChuZXcgQWJvcnRFcnJvcigpKTtcbiAgICB9XG4gICAgaWYgKHNpZ25hbCAhPSBudWxsKSB7XG4gICAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgXCJhYm9ydFwiLFxuICAgICAgICBhYm9ydExpc3RlbmVyLFxuICAgICAgICB7IG9uY2U6IHRydWUgfSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihcbiAgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFzeW5jIGZ1bmN0aW9uKiAoKSB7fSkucHJvdG90eXBlLFxuKTtcblxuZnVuY3Rpb24gY3JlYXRlSXRlclJlc3VsdCh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZSwgZG9uZSB9O1xufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljUmVtb3ZlTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lcik7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGxpc3RlbmVyLCBmbGFncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKFwiZW1pdHRlclwiLCBcIkV2ZW50RW1pdHRlclwiLCBlbWl0dGVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgaWYgKGZsYWdzPy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIHRvIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIChhcmcpID0+IHtcbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSwgZmxhZ3MpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShcImVtaXR0ZXJcIiwgXCJFdmVudEVtaXR0ZXJcIiwgZW1pdHRlcik7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGBBc3luY0l0ZXJhdG9yYCB0aGF0IGl0ZXJhdGVzIGBldmVudGAgZXZlbnRzLlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXJcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3ltYm9sfSBldmVudFxuICogQHBhcmFtIHt7IHNpZ25hbDogQWJvcnRTaWduYWw7IH19IFtvcHRpb25zXVxuICogQHJldHVybnMge0FzeW5jSXRlcmF0b3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbihlbWl0dGVyLCBldmVudCwgb3B0aW9ucykge1xuICBjb25zdCBzaWduYWwgPSBvcHRpb25zPy5zaWduYWw7XG4gIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCBcIm9wdGlvbnMuc2lnbmFsXCIpO1xuICBpZiAoc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IEFib3J0RXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IHVuY29uc3VtZWRFdmVudHMgPSBbXTtcbiAgY29uc3QgdW5jb25zdW1lZFByb21pc2VzID0gW107XG4gIGxldCBlcnJvciA9IG51bGw7XG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gT2JqZWN0LnNldFByb3RvdHlwZU9mKHtcbiAgICBuZXh0KCkge1xuICAgICAgLy8gRmlyc3QsIHdlIGNvbnN1bWUgYWxsIHVucmVhZCBldmVudHNcbiAgICAgIGNvbnN0IHZhbHVlID0gdW5jb25zdW1lZEV2ZW50cy5zaGlmdCgpO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh2YWx1ZSwgZmFsc2UpKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlbiB3ZSBlcnJvciwgaWYgYW4gZXJyb3IgaGFwcGVuZWRcbiAgICAgIC8vIFRoaXMgaGFwcGVucyBvbmUgdGltZSBpZiBhdCBhbGwsIGJlY2F1c2UgYWZ0ZXIgJ2Vycm9yJ1xuICAgICAgLy8gd2Ugc3RvcCBsaXN0ZW5pbmdcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zdCBwID0gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAvLyBPbmx5IHRoZSBmaXJzdCBlbGVtZW50IGVycm9yc1xuICAgICAgICBlcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBwO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHJlc29sdmUgdG8gZG9uZVxuICAgICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FpdCB1bnRpbCBhbiBldmVudCBoYXBwZW5zXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB1bmNvbnN1bWVkUHJvbWlzZXMucHVzaCh7IHJlc29sdmUsIHJlamVjdCB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICByZXR1cm4oKSB7XG4gICAgICBldmVudFRhcmdldEFnbm9zdGljUmVtb3ZlTGlzdGVuZXIoZW1pdHRlciwgZXZlbnQsIGV2ZW50SGFuZGxlcik7XG4gICAgICBldmVudFRhcmdldEFnbm9zdGljUmVtb3ZlTGlzdGVuZXIoZW1pdHRlciwgXCJlcnJvclwiLCBlcnJvckhhbmRsZXIpO1xuXG4gICAgICBpZiAoc2lnbmFsKSB7XG4gICAgICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNSZW1vdmVMaXN0ZW5lcihcbiAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgXCJhYm9ydFwiLFxuICAgICAgICAgIGFib3J0TGlzdGVuZXIsXG4gICAgICAgICAgeyBvbmNlOiB0cnVlIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgZm9yIChjb25zdCBwcm9taXNlIG9mIHVuY29uc3VtZWRQcm9taXNlcykge1xuICAgICAgICBwcm9taXNlLnJlc29sdmUoY3JlYXRlSXRlclJlc3VsdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgIH0sXG5cbiAgICB0aHJvdyhlcnIpIHtcbiAgICAgIGlmICghZXJyIHx8ICEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICAgICAgICBcIkV2ZW50RW1pdHRlci5Bc3luY0l0ZXJhdG9yXCIsXG4gICAgICAgICAgXCJFcnJvclwiLFxuICAgICAgICAgIGVycixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGVycm9yID0gZXJyO1xuICAgICAgZXZlbnRUYXJnZXRBZ25vc3RpY1JlbW92ZUxpc3RlbmVyKGVtaXR0ZXIsIGV2ZW50LCBldmVudEhhbmRsZXIpO1xuICAgICAgZXZlbnRUYXJnZXRBZ25vc3RpY1JlbW92ZUxpc3RlbmVyKGVtaXR0ZXIsIFwiZXJyb3JcIiwgZXJyb3JIYW5kbGVyKTtcbiAgICB9LFxuXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gIH0sIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4gIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZXZlbnRIYW5kbGVyKTtcbiAgaWYgKGV2ZW50ICE9PSBcImVycm9yXCIgJiYgdHlwZW9mIGVtaXR0ZXIub24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGVtaXR0ZXIub24oXCJlcnJvclwiLCBlcnJvckhhbmRsZXIpO1xuICB9XG5cbiAgaWYgKHNpZ25hbCkge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihcbiAgICAgIHNpZ25hbCxcbiAgICAgIFwiYWJvcnRcIixcbiAgICAgIGFib3J0TGlzdGVuZXIsXG4gICAgICB7IG9uY2U6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yO1xuXG4gIGZ1bmN0aW9uIGFib3J0TGlzdGVuZXIoKSB7XG4gICAgZXJyb3JIYW5kbGVyKG5ldyBBYm9ydEVycm9yKCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXZlbnRIYW5kbGVyKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBwcm9taXNlID0gdW5jb25zdW1lZFByb21pc2VzLnNoaWZ0KCk7XG4gICAgaWYgKHByb21pc2UpIHtcbiAgICAgIHByb21pc2UucmVzb2x2ZShjcmVhdGVJdGVyUmVzdWx0KGFyZ3MsIGZhbHNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuY29uc3VtZWRFdmVudHMucHVzaChhcmdzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgY29uc3QgdG9FcnJvciA9IHVuY29uc3VtZWRQcm9taXNlcy5zaGlmdCgpO1xuXG4gICAgaWYgKHRvRXJyb3IpIHtcbiAgICAgIHRvRXJyb3IucmVqZWN0KGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBuZXh0IHRpbWUgd2UgY2FsbCBuZXh0KClcbiAgICAgIGVycm9yID0gZXJyO1xuICAgIH1cblxuICAgIGl0ZXJhdG9yLnJldHVybigpO1xuICB9XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8qKlxuICogQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBwYXJzZXIgYmFzZWQgb25cbiAqIFttaW5pbWlzdF0oaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL21pbmltaXN0KS5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiLi4vX3V0aWwvYXNzZXJ0LnRzXCI7XG5cbi8qKiBDb21iaW5lcyByZWN1cnNpdmVseSBhbGwgaW50ZXJzZWN0aW9uIHR5cGVzIGFuZCByZXR1cm5zIGEgbmV3IHNpbmdsZSB0eXBlLiAqL1xudHlwZSBJZDxUPiA9IFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICA/IFQgZXh0ZW5kcyBpbmZlciBVID8geyBbSyBpbiBrZXlvZiBVXTogSWQ8VVtLXT4gfSA6IG5ldmVyXG4gIDogVDtcblxuLyoqIENvbnZlcnRzIGFuIHVuaW9uIHR5cGUgYEEgfCBCIHwgQ2AgaW50byBhbiBpbnRlcnNlY3Rpb24gdHlwZSBgQSAmIEIgJiBDYC4gKi9cbnR5cGUgVW5pb25Ub0ludGVyc2VjdGlvbjxUPiA9XG4gIChUIGV4dGVuZHMgdW5rbm93biA/IChhcmdzOiBUKSA9PiB1bmtub3duIDogbmV2ZXIpIGV4dGVuZHNcbiAgICAoYXJnczogaW5mZXIgUikgPT4gdW5rbm93biA/IFIgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA/IFIgOiBuZXZlclxuICAgIDogbmV2ZXI7XG5cbnR5cGUgQm9vbGVhblR5cGUgPSBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xudHlwZSBTdHJpbmdUeXBlID0gc3RyaW5nIHwgdW5kZWZpbmVkO1xudHlwZSBBcmdUeXBlID0gU3RyaW5nVHlwZSB8IEJvb2xlYW5UeXBlO1xuXG50eXBlIENvbGxlY3RhYmxlID0gc3RyaW5nIHwgdW5kZWZpbmVkO1xudHlwZSBOZWdhdGFibGUgPSBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbnR5cGUgVXNlVHlwZXM8XG4gIEIgZXh0ZW5kcyBCb29sZWFuVHlwZSxcbiAgUyBleHRlbmRzIFN0cmluZ1R5cGUsXG4gIEMgZXh0ZW5kcyBDb2xsZWN0YWJsZSxcbj4gPSB1bmRlZmluZWQgZXh0ZW5kcyAoXG4gICYgKGZhbHNlIGV4dGVuZHMgQiA/IHVuZGVmaW5lZCA6IEIpXG4gICYgQ1xuICAmIFNcbikgPyBmYWxzZVxuICA6IHRydWU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJlY29yZCB3aXRoIGFsbCBhdmFpbGFibGUgZmxhZ3Mgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGFuZFxuICogZGVmYXVsdCB0eXBlLlxuICovXG50eXBlIFZhbHVlczxcbiAgQiBleHRlbmRzIEJvb2xlYW5UeXBlLFxuICBTIGV4dGVuZHMgU3RyaW5nVHlwZSxcbiAgQyBleHRlbmRzIENvbGxlY3RhYmxlLFxuICBOIGV4dGVuZHMgTmVnYXRhYmxlLFxuICBEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gIEEgZXh0ZW5kcyBBbGlhc2VzIHwgdW5kZWZpbmVkLFxuPiA9IFVzZVR5cGVzPEIsIFMsIEM+IGV4dGVuZHMgdHJ1ZSA/IFxuICAgICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAmIEFkZEFsaWFzZXM8XG4gICAgICBTcHJlYWREZWZhdWx0czxcbiAgICAgICAgJiBDb2xsZWN0VmFsdWVzPFMsIHN0cmluZywgQywgTj5cbiAgICAgICAgJiBSZWN1cnNpdmVSZXF1aXJlZDxDb2xsZWN0VmFsdWVzPEIsIGJvb2xlYW4sIEM+PlxuICAgICAgICAmIENvbGxlY3RVbmtub3duVmFsdWVzPEIsIFMsIEMsIE4+LFxuICAgICAgICBEZWRvdFJlY29yZDxEPlxuICAgICAgPixcbiAgICAgIEFcbiAgICA+XG4gIDogLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgUmVjb3JkPHN0cmluZywgYW55PjtcblxudHlwZSBBbGlhc2VzPFQgPSBzdHJpbmcsIFYgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gUGFydGlhbDxcbiAgUmVjb3JkPEV4dHJhY3Q8VCwgc3RyaW5nPiwgViB8IFJlYWRvbmx5QXJyYXk8Vj4+XG4+O1xuXG50eXBlIEFkZEFsaWFzZXM8XG4gIFQsXG4gIEEgZXh0ZW5kcyBBbGlhc2VzIHwgdW5kZWZpbmVkLFxuPiA9IHsgW0sgaW4ga2V5b2YgVCBhcyBBbGlhc05hbWU8SywgQT5dOiBUW0tdIH07XG5cbnR5cGUgQWxpYXNOYW1lPFxuICBLLFxuICBBIGV4dGVuZHMgQWxpYXNlcyB8IHVuZGVmaW5lZCxcbj4gPSBLIGV4dGVuZHMga2V5b2YgQVxuICA/IHN0cmluZyBleHRlbmRzIEFbS10gPyBLIDogQVtLXSBleHRlbmRzIHN0cmluZyA/IEsgfCBBW0tdIDogS1xuICA6IEs7XG5cbi8qKlxuICogU3ByZWFkcyBhbGwgZGVmYXVsdCB2YWx1ZXMgb2YgUmVjb3JkIGBEYCBpbnRvIFJlY29yZCBgQWBcbiAqIGFuZCBtYWtlcyBkZWZhdWx0IHZhbHVlcyByZXF1aXJlZC5cbiAqXG4gKiAqKkV4YW1wbGU6KipcbiAqIGBTcHJlYWRWYWx1ZXM8eyBmb28/OiBib29sZWFuLCBiYXI/OiBudW1iZXIgfSwgeyBmb286IG51bWJlciB9PmBcbiAqXG4gKiAqKlJlc3VsdDoqKiBgeyBmb286IGJvb2xhbiB8IG51bWJlciwgYmFyPzogbnVtYmVyIH1gXG4gKi9cbnR5cGUgU3ByZWFkRGVmYXVsdHM8QSwgRD4gPSBEIGV4dGVuZHMgdW5kZWZpbmVkID8gQVxuICA6IEEgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA/IFxuICAgICAgJiBPbWl0PEEsIGtleW9mIEQ+XG4gICAgICAmIHtcbiAgICAgICAgW0sgaW4ga2V5b2YgRF06IEsgZXh0ZW5kcyBrZXlvZiBBXG4gICAgICAgICAgPyAoQVtLXSAmIERbS10gfCBEW0tdKSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgICA/IE5vbk51bGxhYmxlPFNwcmVhZERlZmF1bHRzPEFbS10sIERbS10+PlxuICAgICAgICAgIDogRFtLXSB8IE5vbk51bGxhYmxlPEFbS10+XG4gICAgICAgICAgOiB1bmtub3duO1xuICAgICAgfVxuICA6IG5ldmVyO1xuXG4vKipcbiAqIERlZmluZXMgdGhlIFJlY29yZCBmb3IgdGhlIGBkZWZhdWx0YCBvcHRpb24gdG8gYWRkXG4gKiBhdXRvIHN1Z2dlc3Rpb24gc3VwcG9ydCBmb3IgSURFJ3MuXG4gKi9cbnR5cGUgRGVmYXVsdHM8QiBleHRlbmRzIEJvb2xlYW5UeXBlLCBTIGV4dGVuZHMgU3RyaW5nVHlwZT4gPSBJZDxcbiAgVW5pb25Ub0ludGVyc2VjdGlvbjxcbiAgICAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgLy8gRGVkb3R0ZWQgYXV0byBzdWdnZXN0aW9uczogeyBmb286IHsgYmFyOiB1bmtub3duIH0gfVxuICAgICYgTWFwVHlwZXM8UywgdW5rbm93bj5cbiAgICAmIE1hcFR5cGVzPEIsIHVua25vd24+XG4gICAgLy8gRmxhdCBhdXRvIHN1Z2dlc3Rpb25zOiB7IFwiZm9vLmJhclwiOiB1bmtub3duIH1cbiAgICAmIE1hcERlZmF1bHRzPEI+XG4gICAgJiBNYXBEZWZhdWx0czxTPlxuICA+XG4+O1xuXG50eXBlIE1hcERlZmF1bHRzPFQgZXh0ZW5kcyBBcmdUeXBlPiA9IFBhcnRpYWw8XG4gIFJlY29yZDxUIGV4dGVuZHMgc3RyaW5nID8gVCA6IHN0cmluZywgdW5rbm93bj5cbj47XG5cbnR5cGUgUmVjdXJzaXZlUmVxdWlyZWQ8VD4gPSBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPyB7XG4gICAgW0sgaW4ga2V5b2YgVF0tPzogUmVjdXJzaXZlUmVxdWlyZWQ8VFtLXT47XG4gIH1cbiAgOiBUO1xuXG4vKiogU2FtZSBhcyBgTWFwVHlwZXNgIGJ1dCBhbHNvIHN1cHBvcnRzIGNvbGxlY3RhYmxlIG9wdGlvbnMuICovXG50eXBlIENvbGxlY3RWYWx1ZXM8XG4gIFQgZXh0ZW5kcyBBcmdUeXBlLFxuICBWLFxuICBDIGV4dGVuZHMgQ29sbGVjdGFibGUsXG4gIE4gZXh0ZW5kcyBOZWdhdGFibGUgPSB1bmRlZmluZWQsXG4+ID0gVW5pb25Ub0ludGVyc2VjdGlvbjxcbiAgQyBleHRlbmRzIHN0cmluZyA/IFxuICAgICAgJiBNYXBUeXBlczxFeGNsdWRlPFQsIEM+LCBWLCBOPlxuICAgICAgJiAoVCBleHRlbmRzIHVuZGVmaW5lZCA/IFJlY29yZDxuZXZlciwgbmV2ZXI+IDogUmVjdXJzaXZlUmVxdWlyZWQ8XG4gICAgICAgIE1hcFR5cGVzPEV4dHJhY3Q8QywgVD4sIEFycmF5PFY+LCBOPlxuICAgICAgPilcbiAgICA6IE1hcFR5cGVzPFQsIFYsIE4+XG4+O1xuXG4vKiogU2FtZSBhcyBgUmVjb3JkYCBidXQgYWxzbyBzdXBwb3J0cyBkb3R0ZWQgYW5kIG5lZ2F0YWJsZSBvcHRpb25zLiAqL1xudHlwZSBNYXBUeXBlczxUIGV4dGVuZHMgQXJnVHlwZSwgViwgTiBleHRlbmRzIE5lZ2F0YWJsZSA9IHVuZGVmaW5lZD4gPVxuICB1bmRlZmluZWQgZXh0ZW5kcyBUID8gUmVjb3JkPG5ldmVyLCBuZXZlcj5cbiAgICA6IFQgZXh0ZW5kcyBgJHtpbmZlciBOYW1lfS4ke2luZmVyIFJlc3R9YCA/IHtcbiAgICAgICAgW0sgaW4gTmFtZV0/OiBNYXBUeXBlczxcbiAgICAgICAgICBSZXN0LFxuICAgICAgICAgIFYsXG4gICAgICAgICAgTiBleHRlbmRzIGAke05hbWV9LiR7aW5mZXIgTmVnYXRlfWAgPyBOZWdhdGUgOiB1bmRlZmluZWRcbiAgICAgICAgPjtcbiAgICAgIH1cbiAgICA6IFQgZXh0ZW5kcyBzdHJpbmcgPyBQYXJ0aWFsPFJlY29yZDxULCBOIGV4dGVuZHMgVCA/IFYgfCBmYWxzZSA6IFY+PlxuICAgIDogUmVjb3JkPG5ldmVyLCBuZXZlcj47XG5cbnR5cGUgQ29sbGVjdFVua25vd25WYWx1ZXM8XG4gIEIgZXh0ZW5kcyBCb29sZWFuVHlwZSxcbiAgUyBleHRlbmRzIFN0cmluZ1R5cGUsXG4gIEMgZXh0ZW5kcyBDb2xsZWN0YWJsZSxcbiAgTiBleHRlbmRzIE5lZ2F0YWJsZSxcbj4gPSBCICYgUyBleHRlbmRzIEMgPyBSZWNvcmQ8bmV2ZXIsIG5ldmVyPlxuICA6IERlZG90UmVjb3JkPFxuICAgIC8vIFVua25vd24gY29sbGVjdGFibGUgJiBub24tbmVnYXRhYmxlIGFyZ3MuXG4gICAgJiBSZWNvcmQ8XG4gICAgICBFeGNsdWRlPFxuICAgICAgICBFeHRyYWN0PEV4Y2x1ZGU8QywgTj4sIHN0cmluZz4sXG4gICAgICAgIEV4dHJhY3Q8UyB8IEIsIHN0cmluZz5cbiAgICAgID4sXG4gICAgICBBcnJheTx1bmtub3duPlxuICAgID5cbiAgICAvLyBVbmtub3duIGNvbGxlY3RhYmxlICYgbmVnYXRhYmxlIGFyZ3MuXG4gICAgJiBSZWNvcmQ8XG4gICAgICBFeGNsdWRlPFxuICAgICAgICBFeHRyYWN0PEV4dHJhY3Q8QywgTj4sIHN0cmluZz4sXG4gICAgICAgIEV4dHJhY3Q8UyB8IEIsIHN0cmluZz5cbiAgICAgID4sXG4gICAgICBBcnJheTx1bmtub3duPiB8IGZhbHNlXG4gICAgPlxuICA+O1xuXG4vKiogQ29udmVydHMgYHsgXCJmb28uYmFyLmJhelwiOiB1bmtub3duIH1gIGludG8gYHsgZm9vOiB7IGJhcjogeyBiYXo6IHVua25vd24gfSB9IH1gLiAqL1xudHlwZSBEZWRvdFJlY29yZDxUPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+IGV4dGVuZHMgVCA/IFRcbiAgOiBUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPyBVbmlvblRvSW50ZXJzZWN0aW9uPFxuICAgICAgVmFsdWVPZjxcbiAgICAgICAgeyBbSyBpbiBrZXlvZiBUXTogSyBleHRlbmRzIHN0cmluZyA/IERlZG90PEssIFRbS10+IDogbmV2ZXIgfVxuICAgICAgPlxuICAgID5cbiAgOiBUO1xuXG50eXBlIERlZG90PFQgZXh0ZW5kcyBzdHJpbmcsIFY+ID0gVCBleHRlbmRzIGAke2luZmVyIE5hbWV9LiR7aW5mZXIgUmVzdH1gXG4gID8geyBbSyBpbiBOYW1lXTogRGVkb3Q8UmVzdCwgVj4gfVxuICA6IHsgW0sgaW4gVF06IFYgfTtcblxudHlwZSBWYWx1ZU9mPFQ+ID0gVFtrZXlvZiBUXTtcblxuLyoqIFRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGBwYXJzZWAuICovXG5leHBvcnQgdHlwZSBBcmdzPFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBBIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBERCBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4+ID0gSWQ8XG4gICYgQVxuICAmIHtcbiAgICAvKiogQ29udGFpbnMgYWxsIHRoZSBhcmd1bWVudHMgdGhhdCBkaWRuJ3QgaGF2ZSBhbiBvcHRpb24gYXNzb2NpYXRlZCB3aXRoXG4gICAgICogdGhlbS4gKi9cbiAgICBfOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+O1xuICB9XG4gICYgKGJvb2xlYW4gZXh0ZW5kcyBERCA/IERvdWJsZURhc2hcbiAgICA6IHRydWUgZXh0ZW5kcyBERCA/IFJlcXVpcmVkPERvdWJsZURhc2g+XG4gICAgOiBSZWNvcmQ8bmV2ZXIsIG5ldmVyPilcbj47XG5cbnR5cGUgRG91YmxlRGFzaCA9IHtcbiAgLyoqIENvbnRhaW5zIGFsbCB0aGUgYXJndW1lbnRzIHRoYXQgYXBwZWFyIGFmdGVyIHRoZSBkb3VibGUgZGFzaDogXCItLVwiLiAqL1xuICBcIi0tXCI/OiBBcnJheTxzdHJpbmc+O1xufTtcblxuLyoqIFRoZSBvcHRpb25zIGZvciB0aGUgYHBhcnNlYCBjYWxsLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZU9wdGlvbnM8XG4gIEIgZXh0ZW5kcyBCb29sZWFuVHlwZSA9IEJvb2xlYW5UeXBlLFxuICBTIGV4dGVuZHMgU3RyaW5nVHlwZSA9IFN0cmluZ1R5cGUsXG4gIEMgZXh0ZW5kcyBDb2xsZWN0YWJsZSA9IENvbGxlY3RhYmxlLFxuICBOIGV4dGVuZHMgTmVnYXRhYmxlID0gTmVnYXRhYmxlLFxuICBEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPVxuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZCxcbiAgQSBleHRlbmRzIEFsaWFzZXM8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkID1cbiAgICB8IEFsaWFzZXM8c3RyaW5nLCBzdHJpbmc+XG4gICAgfCB1bmRlZmluZWQsXG4gIEREIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4+IHtcbiAgLyoqIFdoZW4gYHRydWVgLCBwb3B1bGF0ZSB0aGUgcmVzdWx0IGBfYCB3aXRoIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBgLS1gIGFuZFxuICAgKiB0aGUgcmVzdWx0IGBbJy0tJ11gIHdpdGggZXZlcnl0aGluZyBhZnRlciB0aGUgYC0tYC4gSGVyZSdzIGFuIGV4YW1wbGU6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIC8vICQgZGVubyBydW4gZXhhbXBsZS50cyAtLSBhIGFyZzFcbiAgICogaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiLi9tb2QudHNcIjtcbiAgICogY29uc29sZS5kaXIocGFyc2UoRGVuby5hcmdzLCB7IFwiLS1cIjogZmFsc2UgfSkpO1xuICAgKiAvLyBvdXRwdXQ6IHsgXzogWyBcImFcIiwgXCJhcmcxXCIgXSB9XG4gICAqIGNvbnNvbGUuZGlyKHBhcnNlKERlbm8uYXJncywgeyBcIi0tXCI6IHRydWUgfSkpO1xuICAgKiAvLyBvdXRwdXQ6IHsgXzogW10sIC0tOiBbIFwiYVwiLCBcImFyZzFcIiBdIH1cbiAgICogYGBgXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqL1xuICBcIi0tXCI/OiBERDtcblxuICAvKiogQW4gb2JqZWN0IG1hcHBpbmcgc3RyaW5nIG5hbWVzIHRvIHN0cmluZ3Mgb3IgYXJyYXlzIG9mIHN0cmluZyBhcmd1bWVudFxuICAgKiBuYW1lcyB0byB1c2UgYXMgYWxpYXNlcy4gKi9cbiAgYWxpYXM/OiBBO1xuXG4gIC8qKiBBIGJvb2xlYW4sIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIHRvIGFsd2F5cyB0cmVhdCBhcyBib29sZWFucy4gSWZcbiAgICogYHRydWVgIHdpbGwgdHJlYXQgYWxsIGRvdWJsZSBoeXBoZW5hdGVkIGFyZ3VtZW50cyB3aXRob3V0IGVxdWFsIHNpZ25zIGFzXG4gICAqIGBib29sZWFuYCAoZS5nLiBhZmZlY3RzIGAtLWZvb2AsIG5vdCBgLWZgIG9yIGAtLWZvbz1iYXJgKSAqL1xuICBib29sZWFuPzogQiB8IFJlYWRvbmx5QXJyYXk8RXh0cmFjdDxCLCBzdHJpbmc+PjtcblxuICAvKiogQW4gb2JqZWN0IG1hcHBpbmcgc3RyaW5nIGFyZ3VtZW50IG5hbWVzIHRvIGRlZmF1bHQgdmFsdWVzLiAqL1xuICBkZWZhdWx0PzogRCAmIERlZmF1bHRzPEIsIFM+O1xuXG4gIC8qKiBXaGVuIGB0cnVlYCwgcG9wdWxhdGUgdGhlIHJlc3VsdCBgX2Agd2l0aCBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdFxuICAgKiBub24tb3B0aW9uLiAqL1xuICBzdG9wRWFybHk/OiBib29sZWFuO1xuXG4gIC8qKiBBIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGFyZ3VtZW50IG5hbWVzIHRvIGFsd2F5cyB0cmVhdCBhcyBzdHJpbmdzLiAqL1xuICBzdHJpbmc/OiBTIHwgUmVhZG9ubHlBcnJheTxFeHRyYWN0PFMsIHN0cmluZz4+O1xuXG4gIC8qKiBBIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGFyZ3VtZW50IG5hbWVzIHRvIGFsd2F5cyB0cmVhdCBhcyBhcnJheXMuXG4gICAqIENvbGxlY3RhYmxlIG9wdGlvbnMgY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuIEFsbCB2YWx1ZXMgd2lsbCBiZVxuICAgKiBjb2xsZWN0ZWQgaW50byBvbmUgYXJyYXkuIElmIGEgbm9uLWNvbGxlY3RhYmxlIG9wdGlvbiBpcyB1c2VkIG11bHRpcGxlXG4gICAqIHRpbWVzLCB0aGUgbGFzdCB2YWx1ZSBpcyB1c2VkLiAqL1xuICBjb2xsZWN0PzogQyB8IFJlYWRvbmx5QXJyYXk8RXh0cmFjdDxDLCBzdHJpbmc+PjtcblxuICAvKiogQSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhcmd1bWVudCBuYW1lcyB3aGljaCBjYW4gYmUgbmVnYXRlZFxuICAgKiBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIGAtLW5vLWAsIGxpa2UgYC0tbm8tY29uZmlnYC4gKi9cbiAgbmVnYXRhYmxlPzogTiB8IFJlYWRvbmx5QXJyYXk8RXh0cmFjdDxOLCBzdHJpbmc+PjtcblxuICAvKiogQSBmdW5jdGlvbiB3aGljaCBpcyBpbnZva2VkIHdpdGggYSBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIG5vdCBkZWZpbmVkIGluXG4gICAqIHRoZSBgb3B0aW9uc2AgY29uZmlndXJhdGlvbiBvYmplY3QuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBmYWxzZWAsIHRoZVxuICAgKiB1bmtub3duIG9wdGlvbiBpcyBub3QgYWRkZWQgdG8gYHBhcnNlZEFyZ3NgLiAqL1xuICB1bmtub3duPzogKGFyZzogc3RyaW5nLCBrZXk/OiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bikgPT4gdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIEZsYWdzIHtcbiAgYm9vbHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICBzdHJpbmdzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgY29sbGVjdDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gIG5lZ2F0YWJsZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gIHVua25vd25GbjogKGFyZzogc3RyaW5nLCBrZXk/OiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bikgPT4gdW5rbm93bjtcbiAgYWxsQm9vbHM6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBOZXN0ZWRNYXBwaW5nIHtcbiAgW2tleTogc3RyaW5nXTogTmVzdGVkTWFwcGluZyB8IHVua25vd247XG59XG5cbmNvbnN0IHsgaGFzT3duIH0gPSBPYmplY3Q7XG5cbmZ1bmN0aW9uIGdldDxUPihvYmo6IFJlY29yZDxzdHJpbmcsIFQ+LCBrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICBpZiAoaGFzT3duKG9iaiwga2V5KSkge1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRGb3JjZTxUPihvYmo6IFJlY29yZDxzdHJpbmcsIFQ+LCBrZXk6IHN0cmluZyk6IFQge1xuICBjb25zdCB2ID0gZ2V0KG9iaiwga2V5KTtcbiAgYXNzZXJ0KHYgIT0gbnVsbCk7XG4gIHJldHVybiB2O1xufVxuXG5mdW5jdGlvbiBpc051bWJlcih4OiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHRydWU7XG4gIGlmICgvXjB4WzAtOWEtZl0rJC9pLnRlc3QoU3RyaW5nKHgpKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiAvXlstK10/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKShlWy0rXT9cXGQrKT8kLy50ZXN0KFN0cmluZyh4KSk7XG59XG5cbmZ1bmN0aW9uIGhhc0tleShvYmo6IE5lc3RlZE1hcHBpbmcsIGtleXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGxldCBvID0gb2JqO1xuICBrZXlzLnNsaWNlKDAsIC0xKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBvID0gKGdldChvLCBrZXkpID8/IHt9KSBhcyBOZXN0ZWRNYXBwaW5nO1xuICB9KTtcblxuICBjb25zdCBrZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gIHJldHVybiBoYXNPd24obywga2V5KTtcbn1cblxuLyoqIFRha2UgYSBzZXQgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cywgb3B0aW9uYWxseSB3aXRoIGEgc2V0IG9mIG9wdGlvbnMsIGFuZFxuICogcmV0dXJuIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGZsYWdzIGZvdW5kIGluIHRoZSBwYXNzZWQgYXJndW1lbnRzLlxuICpcbiAqIEJ5IGRlZmF1bHQsIGFueSBhcmd1bWVudHMgc3RhcnRpbmcgd2l0aCBgLWAgb3IgYC0tYCBhcmUgY29uc2lkZXJlZCBib29sZWFuXG4gKiBmbGFncy4gSWYgdGhlIGFyZ3VtZW50IG5hbWUgaXMgZm9sbG93ZWQgYnkgYW4gZXF1YWwgc2lnbiAoYD1gKSBpdCBpc1xuICogY29uc2lkZXJlZCBhIGtleS12YWx1ZSBwYWlyLiBBbnkgYXJndW1lbnRzIHdoaWNoIGNvdWxkIG5vdCBiZSBwYXJzZWQgYXJlXG4gKiBhdmFpbGFibGUgaW4gdGhlIGBfYCBwcm9wZXJ0eSBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0LlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBwYXJzZSB9IGZyb20gXCIuL21vZC50c1wiO1xuICogY29uc3QgcGFyc2VkQXJncyA9IHBhcnNlKERlbm8uYXJncyk7XG4gKiBgYGBcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcGFyc2UgfSBmcm9tIFwiLi9tb2QudHNcIjtcbiAqIGNvbnN0IHBhcnNlZEFyZ3MgPSBwYXJzZShbXCItLWZvb1wiLCBcIi0tYmFyPWJhelwiLCBcIi0tbm8tcXV4XCIsIFwiLi9xdXV4LnR4dFwiXSk7XG4gKiAvLyBwYXJzZWRBcmdzOiB7IGZvbzogdHJ1ZSwgYmFyOiBcImJhelwiLCBxdXg6IGZhbHNlLCBfOiBbXCIuL3F1dXgudHh0XCJdIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2U8XG4gIFYgZXh0ZW5kcyBWYWx1ZXM8QiwgUywgQywgTiwgRCwgQT4sXG4gIEREIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgQiBleHRlbmRzIEJvb2xlYW5UeXBlID0gdW5kZWZpbmVkLFxuICBTIGV4dGVuZHMgU3RyaW5nVHlwZSA9IHVuZGVmaW5lZCxcbiAgQyBleHRlbmRzIENvbGxlY3RhYmxlID0gdW5kZWZpbmVkLFxuICBOIGV4dGVuZHMgTmVnYXRhYmxlID0gdW5kZWZpbmVkLFxuICBEIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIEEgZXh0ZW5kcyBBbGlhc2VzPEFLLCBBVj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIEFLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBBViBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4oXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICB7XG4gICAgXCItLVwiOiBkb3VibGVEYXNoID0gZmFsc2UsXG4gICAgYWxpYXMgPSB7fSBhcyBOb25OdWxsYWJsZTxBPixcbiAgICBib29sZWFuID0gZmFsc2UsXG4gICAgZGVmYXVsdDogZGVmYXVsdHMgPSB7fSBhcyBEICYgRGVmYXVsdHM8QiwgUz4sXG4gICAgc3RvcEVhcmx5ID0gZmFsc2UsXG4gICAgc3RyaW5nID0gW10sXG4gICAgY29sbGVjdCA9IFtdLFxuICAgIG5lZ2F0YWJsZSA9IFtdLFxuICAgIHVua25vd24gPSAoaTogc3RyaW5nKTogdW5rbm93biA9PiBpLFxuICB9OiBQYXJzZU9wdGlvbnM8QiwgUywgQywgTiwgRCwgQSwgREQ+ID0ge30sXG4pOiBBcmdzPFYsIEREPiB7XG4gIGNvbnN0IGZsYWdzOiBGbGFncyA9IHtcbiAgICBib29sczoge30sXG4gICAgc3RyaW5nczoge30sXG4gICAgdW5rbm93bkZuOiB1bmtub3duLFxuICAgIGFsbEJvb2xzOiBmYWxzZSxcbiAgICBjb2xsZWN0OiB7fSxcbiAgICBuZWdhdGFibGU6IHt9LFxuICB9O1xuXG4gIGlmIChib29sZWFuICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGJvb2xlYW4gPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBmbGFncy5hbGxCb29scyA9ICEhYm9vbGVhbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9vbGVhbkFyZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiA9IHR5cGVvZiBib29sZWFuID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gW2Jvb2xlYW5dXG4gICAgICAgIDogYm9vbGVhbjtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgYm9vbGVhbkFyZ3MuZmlsdGVyKEJvb2xlYW4pKSB7XG4gICAgICAgIGZsYWdzLmJvb2xzW2tleV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFsaWFzZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICBpZiAoYWxpYXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGFsaWFzKSB7XG4gICAgICBjb25zdCB2YWwgPSBnZXRGb3JjZShhbGlhcywga2V5KTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGFsaWFzZXNba2V5XSA9IFt2YWxdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpYXNlc1trZXldID0gdmFsIGFzIEFycmF5PHN0cmluZz47XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIGdldEZvcmNlKGFsaWFzZXMsIGtleSkpIHtcbiAgICAgICAgYWxpYXNlc1thbGlhc10gPSBba2V5XS5jb25jYXQoYWxpYXNlc1trZXldLmZpbHRlcigoeSkgPT4gYWxpYXMgIT09IHkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RyaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBzdHJpbmdBcmdzOiBSZWFkb25seUFycmF5PHN0cmluZz4gPSB0eXBlb2Ygc3RyaW5nID09PSBcInN0cmluZ1wiXG4gICAgICA/IFtzdHJpbmddXG4gICAgICA6IHN0cmluZztcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIHN0cmluZ0FyZ3MuZmlsdGVyKEJvb2xlYW4pKSB7XG4gICAgICBmbGFncy5zdHJpbmdzW2tleV0gPSB0cnVlO1xuICAgICAgY29uc3QgYWxpYXMgPSBnZXQoYWxpYXNlcywga2V5KTtcbiAgICAgIGlmIChhbGlhcykge1xuICAgICAgICBmb3IgKGNvbnN0IGFsIG9mIGFsaWFzKSB7XG4gICAgICAgICAgZmxhZ3Muc3RyaW5nc1thbF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbGxlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGNvbGxlY3RBcmdzOiBSZWFkb25seUFycmF5PHN0cmluZz4gPSB0eXBlb2YgY29sbGVjdCA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBbY29sbGVjdF1cbiAgICAgIDogY29sbGVjdDtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbGxlY3RBcmdzLmZpbHRlcihCb29sZWFuKSkge1xuICAgICAgZmxhZ3MuY29sbGVjdFtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGFsaWFzID0gZ2V0KGFsaWFzZXMsIGtleSk7XG4gICAgICBpZiAoYWxpYXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBhbCBvZiBhbGlhcykge1xuICAgICAgICAgIGZsYWdzLmNvbGxlY3RbYWxdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChuZWdhdGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG5lZ2F0YWJsZUFyZ3M6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPiA9IHR5cGVvZiBuZWdhdGFibGUgPT09IFwic3RyaW5nXCJcbiAgICAgID8gW25lZ2F0YWJsZV1cbiAgICAgIDogbmVnYXRhYmxlO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgbmVnYXRhYmxlQXJncy5maWx0ZXIoQm9vbGVhbikpIHtcbiAgICAgIGZsYWdzLm5lZ2F0YWJsZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGFsaWFzID0gZ2V0KGFsaWFzZXMsIGtleSk7XG4gICAgICBpZiAoYWxpYXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBhbCBvZiBhbGlhcykge1xuICAgICAgICAgIGZsYWdzLm5lZ2F0YWJsZVthbF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYXJndjogQXJncyA9IHsgXzogW10gfTtcblxuICBmdW5jdGlvbiBhcmdEZWZpbmVkKGtleTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoZmxhZ3MuYWxsQm9vbHMgJiYgL14tLVtePV0rJC8udGVzdChhcmcpKSB8fFxuICAgICAgZ2V0KGZsYWdzLmJvb2xzLCBrZXkpIHx8XG4gICAgICAhIWdldChmbGFncy5zdHJpbmdzLCBrZXkpIHx8XG4gICAgICAhIWdldChhbGlhc2VzLCBrZXkpXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEtleShcbiAgICBvYmo6IE5lc3RlZE1hcHBpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIGNvbGxlY3QgPSB0cnVlLFxuICApIHtcbiAgICBsZXQgbyA9IG9iajtcbiAgICBjb25zdCBrZXlzID0gbmFtZS5zcGxpdChcIi5cIik7XG4gICAga2V5cy5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoZ2V0KG8sIGtleSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvW2tleV0gPSB7fTtcbiAgICAgIH1cbiAgICAgIG8gPSBnZXQobywga2V5KSBhcyBOZXN0ZWRNYXBwaW5nO1xuICAgIH0pO1xuXG4gICAgY29uc3Qga2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGNvbGxlY3RhYmxlID0gY29sbGVjdCAmJiAhIWdldChmbGFncy5jb2xsZWN0LCBuYW1lKTtcblxuICAgIGlmICghY29sbGVjdGFibGUpIHtcbiAgICAgIG9ba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoZ2V0KG8sIGtleSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb1trZXldID0gW3ZhbHVlXTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZ2V0KG8sIGtleSkpKSB7XG4gICAgICAob1trZXldIGFzIHVua25vd25bXSkucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ba2V5XSA9IFtnZXQobywga2V5KSwgdmFsdWVdO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEFyZyhcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWw6IHVua25vd24sXG4gICAgYXJnOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgY29sbGVjdD86IGJvb2xlYW4sXG4gICkge1xuICAgIGlmIChhcmcgJiYgZmxhZ3MudW5rbm93bkZuICYmICFhcmdEZWZpbmVkKGtleSwgYXJnKSkge1xuICAgICAgaWYgKGZsYWdzLnVua25vd25GbihhcmcsIGtleSwgdmFsKSA9PT0gZmFsc2UpIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9ICFnZXQoZmxhZ3Muc3RyaW5ncywga2V5KSAmJiBpc051bWJlcih2YWwpID8gTnVtYmVyKHZhbCkgOiB2YWw7XG4gICAgc2V0S2V5KGFyZ3YsIGtleSwgdmFsdWUsIGNvbGxlY3QpO1xuXG4gICAgY29uc3QgYWxpYXMgPSBnZXQoYWxpYXNlcywga2V5KTtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIGZvciAoY29uc3QgeCBvZiBhbGlhcykge1xuICAgICAgICBzZXRLZXkoYXJndiwgeCwgdmFsdWUsIGNvbGxlY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFsaWFzSXNCb29sZWFuKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdldEZvcmNlKGFsaWFzZXMsIGtleSkuc29tZShcbiAgICAgICh4KSA9PiB0eXBlb2YgZ2V0KGZsYWdzLmJvb2xzLCB4KSA9PT0gXCJib29sZWFuXCIsXG4gICAgKTtcbiAgfVxuXG4gIGxldCBub3RGbGFnczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBhbGwgYXJncyBhZnRlciBcIi0tXCIgYXJlIG5vdCBwYXJzZWRcbiAgaWYgKGFyZ3MuaW5jbHVkZXMoXCItLVwiKSkge1xuICAgIG5vdEZsYWdzID0gYXJncy5zbGljZShhcmdzLmluZGV4T2YoXCItLVwiKSArIDEpO1xuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIGFyZ3MuaW5kZXhPZihcIi0tXCIpKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG5cbiAgICBpZiAoL14tLS4rPS8udGVzdChhcmcpKSB7XG4gICAgICBjb25zdCBtID0gYXJnLm1hdGNoKC9eLS0oW149XSspPSguKikkL3MpO1xuICAgICAgYXNzZXJ0KG0gIT0gbnVsbCk7XG4gICAgICBjb25zdCBbLCBrZXksIHZhbHVlXSA9IG07XG5cbiAgICAgIGlmIChmbGFncy5ib29sc1trZXldKSB7XG4gICAgICAgIGNvbnN0IGJvb2xlYW5WYWx1ZSA9IHZhbHVlICE9PSBcImZhbHNlXCI7XG4gICAgICAgIHNldEFyZyhrZXksIGJvb2xlYW5WYWx1ZSwgYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEFyZyhrZXksIHZhbHVlLCBhcmcpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvXi0tbm8tLisvLnRlc3QoYXJnKSAmJiBnZXQoZmxhZ3MubmVnYXRhYmxlLCBhcmcucmVwbGFjZSgvXi0tbm8tLywgXCJcIikpXG4gICAgKSB7XG4gICAgICBjb25zdCBtID0gYXJnLm1hdGNoKC9eLS1uby0oLispLyk7XG4gICAgICBhc3NlcnQobSAhPSBudWxsKTtcbiAgICAgIHNldEFyZyhtWzFdLCBmYWxzZSwgYXJnLCBmYWxzZSk7XG4gICAgfSBlbHNlIGlmICgvXi0tLisvLnRlc3QoYXJnKSkge1xuICAgICAgY29uc3QgbSA9IGFyZy5tYXRjaCgvXi0tKC4rKS8pO1xuICAgICAgYXNzZXJ0KG0gIT0gbnVsbCk7XG4gICAgICBjb25zdCBbLCBrZXldID0gbTtcbiAgICAgIGNvbnN0IG5leHQgPSBhcmdzW2kgKyAxXTtcbiAgICAgIGlmIChcbiAgICAgICAgbmV4dCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICEvXi0vLnRlc3QobmV4dCkgJiZcbiAgICAgICAgIWdldChmbGFncy5ib29scywga2V5KSAmJlxuICAgICAgICAhZmxhZ3MuYWxsQm9vbHMgJiZcbiAgICAgICAgKGdldChhbGlhc2VzLCBrZXkpID8gIWFsaWFzSXNCb29sZWFuKGtleSkgOiB0cnVlKVxuICAgICAgKSB7XG4gICAgICAgIHNldEFyZyhrZXksIG5leHQsIGFyZyk7XG4gICAgICAgIGkrKztcbiAgICAgIH0gZWxzZSBpZiAoL14odHJ1ZXxmYWxzZSkkLy50ZXN0KG5leHQpKSB7XG4gICAgICAgIHNldEFyZyhrZXksIG5leHQgPT09IFwidHJ1ZVwiLCBhcmcpO1xuICAgICAgICBpKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRBcmcoa2V5LCBnZXQoZmxhZ3Muc3RyaW5ncywga2V5KSA/IFwiXCIgOiB0cnVlLCBhcmcpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoL14tW14tXSsvLnRlc3QoYXJnKSkge1xuICAgICAgY29uc3QgbGV0dGVycyA9IGFyZy5zbGljZSgxLCAtMSkuc3BsaXQoXCJcIik7XG5cbiAgICAgIGxldCBicm9rZW4gPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGV0dGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBuZXh0ID0gYXJnLnNsaWNlKGogKyAyKTtcblxuICAgICAgICBpZiAobmV4dCA9PT0gXCItXCIpIHtcbiAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCwgYXJnKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgvW0EtWmEtel0vLnRlc3QobGV0dGVyc1tqXSkgJiYgLz0vLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dC5zcGxpdCgvPSguKykvKVsxXSwgYXJnKTtcbiAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIC9bQS1aYS16XS8udGVzdChsZXR0ZXJzW2pdKSAmJlxuICAgICAgICAgIC8tP1xcZCsoXFwuXFxkKik/KGUtP1xcZCspPyQvLnRlc3QobmV4dClcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2V0QXJnKGxldHRlcnNbal0sIG5leHQsIGFyZyk7XG4gICAgICAgICAgYnJva2VuID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXS5tYXRjaCgvXFxXLykpIHtcbiAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgYXJnLnNsaWNlKGogKyAyKSwgYXJnKTtcbiAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBnZXQoZmxhZ3Muc3RyaW5ncywgbGV0dGVyc1tqXSkgPyBcIlwiIDogdHJ1ZSwgYXJnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBba2V5XSA9IGFyZy5zbGljZSgtMSk7XG4gICAgICBpZiAoIWJyb2tlbiAmJiBrZXkgIT09IFwiLVwiKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBhcmdzW2kgKyAxXSAmJlxuICAgICAgICAgICEvXigtfC0tKVteLV0vLnRlc3QoYXJnc1tpICsgMV0pICYmXG4gICAgICAgICAgIWdldChmbGFncy5ib29scywga2V5KSAmJlxuICAgICAgICAgIChnZXQoYWxpYXNlcywga2V5KSA/ICFhbGlhc0lzQm9vbGVhbihrZXkpIDogdHJ1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2V0QXJnKGtleSwgYXJnc1tpICsgMV0sIGFyZyk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbaSArIDFdICYmIC9eKHRydWV8ZmFsc2UpJC8udGVzdChhcmdzW2kgKyAxXSkpIHtcbiAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzW2kgKyAxXSA9PT0gXCJ0cnVlXCIsIGFyZyk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldEFyZyhrZXksIGdldChmbGFncy5zdHJpbmdzLCBrZXkpID8gXCJcIiA6IHRydWUsIGFyZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmbGFncy51bmtub3duRm4gfHwgZmxhZ3MudW5rbm93bkZuKGFyZykgIT09IGZhbHNlKSB7XG4gICAgICAgIGFyZ3YuXy5wdXNoKGZsYWdzLnN0cmluZ3NbXCJfXCJdID8/ICFpc051bWJlcihhcmcpID8gYXJnIDogTnVtYmVyKGFyZykpO1xuICAgICAgfVxuICAgICAgaWYgKHN0b3BFYXJseSkge1xuICAgICAgICBhcmd2Ll8ucHVzaCguLi5hcmdzLnNsaWNlKGkgKyAxKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRzKSkge1xuICAgIGlmICghaGFzS2V5KGFyZ3YsIGtleS5zcGxpdChcIi5cIikpKSB7XG4gICAgICBzZXRLZXkoYXJndiwga2V5LCB2YWx1ZSk7XG5cbiAgICAgIGlmIChhbGlhc2VzW2tleV0pIHtcbiAgICAgICAgZm9yIChjb25zdCB4IG9mIGFsaWFzZXNba2V5XSkge1xuICAgICAgICAgIHNldEtleShhcmd2LCB4LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmbGFncy5ib29scykpIHtcbiAgICBpZiAoIWhhc0tleShhcmd2LCBrZXkuc3BsaXQoXCIuXCIpKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBnZXQoZmxhZ3MuY29sbGVjdCwga2V5KSA/IFtdIDogZmFsc2U7XG4gICAgICBzZXRLZXkoXG4gICAgICAgIGFyZ3YsXG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmbGFncy5zdHJpbmdzKSkge1xuICAgIGlmICghaGFzS2V5KGFyZ3YsIGtleS5zcGxpdChcIi5cIikpICYmIGdldChmbGFncy5jb2xsZWN0LCBrZXkpKSB7XG4gICAgICBzZXRLZXkoXG4gICAgICAgIGFyZ3YsXG4gICAgICAgIGtleSxcbiAgICAgICAgW10sXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZG91YmxlRGFzaCkge1xuICAgIGFyZ3ZbXCItLVwiXSA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIG5vdEZsYWdzKSB7XG4gICAgICBhcmd2W1wiLS1cIl0ucHVzaChrZXkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBub3RGbGFncykge1xuICAgICAgYXJndi5fLnB1c2goa2V5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJndiBhcyBBcmdzPFYsIEREPjtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIFRoaXMgbW9kdWxlIHBvcnRzOlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvc3JjL25vZGVfb3B0aW9ucy1pbmwuaFxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvc3JjL25vZGVfb3B0aW9ucy5jY1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvc3JjL25vZGVfb3B0aW9ucy5oXG5cbmltcG9ydCB7IHBhcnNlIH0gZnJvbSBcIi4uLy4uL2ZsYWdzL21vZC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3B0aW9ucygpIHtcbiAgY29uc3QgYXJncyA9IHBhcnNlKERlbm8uYXJncyk7XG4gIGNvbnN0IG9wdGlvbnMgPSBuZXcgTWFwKFxuICAgIE9iamVjdC5lbnRyaWVzKGFyZ3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCB7IHZhbHVlIH1dKSxcbiAgKTtcblxuICByZXR1cm4geyBvcHRpb25zIH07XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBnZXRPcHRpb25zIH0gZnJvbSBcIi4uL2ludGVybmFsX2JpbmRpbmcvbm9kZV9vcHRpb25zLnRzXCI7XG5cbmxldCBvcHRpb25zTWFwOiBNYXA8c3RyaW5nLCB7IHZhbHVlOiBzdHJpbmcgfT47XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnNGcm9tQmluZGluZygpIHtcbiAgaWYgKCFvcHRpb25zTWFwKSB7XG4gICAgKHsgb3B0aW9uczogb3B0aW9uc01hcCB9ID0gZ2V0T3B0aW9ucygpKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zTWFwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3B0aW9uVmFsdWUob3B0aW9uTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbUJpbmRpbmcoKTtcblxuICBpZiAob3B0aW9uTmFtZS5zdGFydHNXaXRoKFwiLS1uby1cIikpIHtcbiAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmdldChcIi0tXCIgKyBvcHRpb25OYW1lLnNsaWNlKDUpKTtcblxuICAgIHJldHVybiBvcHRpb24gJiYgIW9wdGlvbi52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zLmdldChvcHRpb25OYW1lKT8udmFsdWU7XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeS9cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHR5cGUgeyBGb3JtYXRJbnB1dFBhdGhPYmplY3QsIFBhcnNlZFBhdGggfSBmcm9tIFwiLi9faW50ZXJmYWNlLnRzXCI7XG5pbXBvcnQge1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILFxuICBDSEFSX0NPTE9OLFxuICBDSEFSX0RPVCxcbiAgQ0hBUl9RVUVTVElPTl9NQVJLLFxufSBmcm9tIFwiLi9fY29uc3RhbnRzLnRzXCI7XG5cbmltcG9ydCB7XG4gIF9mb3JtYXQsXG4gIGFzc2VydFBhdGgsXG4gIGVuY29kZVdoaXRlc3BhY2UsXG4gIGlzUGF0aFNlcGFyYXRvcixcbiAgaXNXaW5kb3dzRGV2aWNlUm9vdCxcbiAgbm9ybWFsaXplU3RyaW5nLFxufSBmcm9tIFwiLi9fdXRpbC50c1wiO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIi4uL191dGlsL2Fzc2VydC50c1wiO1xuXG5leHBvcnQgY29uc3Qgc2VwID0gXCJcXFxcXCI7XG5leHBvcnQgY29uc3QgZGVsaW1pdGVyID0gXCI7XCI7XG5cbi8qKlxuICogUmVzb2x2ZXMgcGF0aCBzZWdtZW50cyBpbnRvIGEgYHBhdGhgXG4gKiBAcGFyYW0gcGF0aFNlZ21lbnRzIHRvIHByb2Nlc3MgdG8gcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZSguLi5wYXRoU2VnbWVudHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgbGV0IHJlc29sdmVkRGV2aWNlID0gXCJcIjtcbiAgbGV0IHJlc29sdmVkVGFpbCA9IFwiXCI7XG4gIGxldCByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IHBhdGhTZWdtZW50cy5sZW5ndGggLSAxOyBpID49IC0xOyBpLS0pIHtcbiAgICBsZXQgcGF0aDogc3RyaW5nO1xuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgeyBEZW5vIH0gPSBnbG9iYWxUaGlzIGFzIGFueTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICBwYXRoID0gcGF0aFNlZ21lbnRzW2ldO1xuICAgIH0gZWxzZSBpZiAoIXJlc29sdmVkRGV2aWNlKSB7XG4gICAgICBpZiAodHlwZW9mIERlbm8/LmN3ZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJSZXNvbHZlZCBhIGRyaXZlLWxldHRlci1sZXNzIHBhdGggd2l0aG91dCBhIENXRC5cIik7XG4gICAgICB9XG4gICAgICBwYXRoID0gRGVuby5jd2QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgRGVubz8uZW52Py5nZXQgIT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgRGVubz8uY3dkICE9PSBcImZ1bmN0aW9uXCJcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVzb2x2ZWQgYSByZWxhdGl2ZSBwYXRoIHdpdGhvdXQgYSBDV0QuXCIpO1xuICAgICAgfVxuICAgICAgcGF0aCA9IERlbm8uY3dkKCk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IGEgY3dkIHdhcyBmb3VuZCBhbmQgdGhhdCBpdCBhY3R1YWxseSBwb2ludHNcbiAgICAgIC8vIHRvIG91ciBkcml2ZS4gSWYgbm90LCBkZWZhdWx0IHRvIHRoZSBkcml2ZSdzIHJvb3QuXG4gICAgICBpZiAoXG4gICAgICAgIHBhdGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICBwYXRoLnNsaWNlKDAsIDMpLnRvTG93ZXJDYXNlKCkgIT09IGAke3Jlc29sdmVkRGV2aWNlLnRvTG93ZXJDYXNlKCl9XFxcXGBcbiAgICAgICkge1xuICAgICAgICBwYXRoID0gYCR7cmVzb2x2ZWREZXZpY2V9XFxcXGA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICAgIGNvbnN0IGxlbiA9IHBhdGgubGVuZ3RoO1xuXG4gICAgLy8gU2tpcCBlbXB0eSBlbnRyaWVzXG4gICAgaWYgKGxlbiA9PT0gMCkgY29udGludWU7XG5cbiAgICBsZXQgcm9vdEVuZCA9IDA7XG4gICAgbGV0IGRldmljZSA9IFwiXCI7XG4gICAgbGV0IGlzQWJzb2x1dGUgPSBmYWxzZTtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuXG4gICAgLy8gVHJ5IHRvIG1hdGNoIGEgcm9vdFxuICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAgIC8vIFBvc3NpYmxlIFVOQyByb290XG5cbiAgICAgICAgLy8gSWYgd2Ugc3RhcnRlZCB3aXRoIGEgc2VwYXJhdG9yLCB3ZSBrbm93IHdlIGF0IGxlYXN0IGhhdmUgYW5cbiAgICAgICAgLy8gYWJzb2x1dGUgcGF0aCBvZiBzb21lIGtpbmQgKFVOQyBvciBvdGhlcndpc2UpXG4gICAgICAgIGlzQWJzb2x1dGUgPSB0cnVlO1xuXG4gICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICAgIC8vIE1hdGNoZWQgZG91YmxlIHBhdGggc2VwYXJhdG9yIGF0IGJlZ2lubmluZ1xuICAgICAgICAgIGxldCBqID0gMjtcbiAgICAgICAgICBsZXQgbGFzdCA9IGo7XG4gICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFBhcnQgPSBwYXRoLnNsaWNlKGxhc3QsIGopO1xuICAgICAgICAgICAgLy8gTWF0Y2hlZCFcbiAgICAgICAgICAgIGxhc3QgPSBqO1xuICAgICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIHBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICAgICAgLy8gTWF0Y2hlZCFcbiAgICAgICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChqID09PSBsZW4pIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgb25seVxuICAgICAgICAgICAgICAgIGRldmljZSA9IGBcXFxcXFxcXCR7Zmlyc3RQYXJ0fVxcXFwke3BhdGguc2xpY2UobGFzdCl9YDtcbiAgICAgICAgICAgICAgICByb290RW5kID0gajtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyByb290IHdpdGggbGVmdG92ZXJzXG5cbiAgICAgICAgICAgICAgICBkZXZpY2UgPSBgXFxcXFxcXFwke2ZpcnN0UGFydH1cXFxcJHtwYXRoLnNsaWNlKGxhc3QsIGopfWA7XG4gICAgICAgICAgICAgICAgcm9vdEVuZCA9IGo7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm9vdEVuZCA9IDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNXaW5kb3dzRGV2aWNlUm9vdChjb2RlKSkge1xuICAgICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICAgIGlmIChwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgICBkZXZpY2UgPSBwYXRoLnNsaWNlKDAsIDIpO1xuICAgICAgICAgIHJvb3RFbmQgPSAyO1xuICAgICAgICAgIGlmIChsZW4gPiAyKSB7XG4gICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdCgyKSkpIHtcbiAgICAgICAgICAgICAgLy8gVHJlYXQgc2VwYXJhdG9yIGZvbGxvd2luZyBkcml2ZSBuYW1lIGFzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgICAgICAgICAgLy8gaW5kaWNhdG9yXG4gICAgICAgICAgICAgIGlzQWJzb2x1dGUgPSB0cnVlO1xuICAgICAgICAgICAgICByb290RW5kID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBwYXRoIHNlcGFyYXRvclxuICAgICAgcm9vdEVuZCA9IDE7XG4gICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBkZXZpY2UubGVuZ3RoID4gMCAmJlxuICAgICAgcmVzb2x2ZWREZXZpY2UubGVuZ3RoID4gMCAmJlxuICAgICAgZGV2aWNlLnRvTG93ZXJDYXNlKCkgIT09IHJlc29sdmVkRGV2aWNlLnRvTG93ZXJDYXNlKClcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgcGF0aCBwb2ludHMgdG8gYW5vdGhlciBkZXZpY2Ugc28gaXQgaXMgbm90IGFwcGxpY2FibGVcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlZERldmljZS5sZW5ndGggPT09IDAgJiYgZGV2aWNlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc29sdmVkRGV2aWNlID0gZGV2aWNlO1xuICAgIH1cbiAgICBpZiAoIXJlc29sdmVkQWJzb2x1dGUpIHtcbiAgICAgIHJlc29sdmVkVGFpbCA9IGAke3BhdGguc2xpY2Uocm9vdEVuZCl9XFxcXCR7cmVzb2x2ZWRUYWlsfWA7XG4gICAgICByZXNvbHZlZEFic29sdXRlID0gaXNBYnNvbHV0ZTtcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZWRBYnNvbHV0ZSAmJiByZXNvbHZlZERldmljZS5sZW5ndGggPiAwKSBicmVhaztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLFxuICAvLyBidXQgaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKClcbiAgLy8gZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSB0YWlsIHBhdGhcbiAgcmVzb2x2ZWRUYWlsID0gbm9ybWFsaXplU3RyaW5nKFxuICAgIHJlc29sdmVkVGFpbCxcbiAgICAhcmVzb2x2ZWRBYnNvbHV0ZSxcbiAgICBcIlxcXFxcIixcbiAgICBpc1BhdGhTZXBhcmF0b3IsXG4gICk7XG5cbiAgcmV0dXJuIHJlc29sdmVkRGV2aWNlICsgKHJlc29sdmVkQWJzb2x1dGUgPyBcIlxcXFxcIiA6IFwiXCIpICsgcmVzb2x2ZWRUYWlsIHx8IFwiLlwiO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBgcGF0aGBcbiAqIEBwYXJhbSBwYXRoIHRvIG5vcm1hbGl6ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG4gIGNvbnN0IGxlbiA9IHBhdGgubGVuZ3RoO1xuICBpZiAobGVuID09PSAwKSByZXR1cm4gXCIuXCI7XG4gIGxldCByb290RW5kID0gMDtcbiAgbGV0IGRldmljZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgaXNBYnNvbHV0ZSA9IGZhbHNlO1xuICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuXG4gIC8vIFRyeSB0byBtYXRjaCBhIHJvb3RcbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBVTkMgcm9vdFxuXG4gICAgICAvLyBJZiB3ZSBzdGFydGVkIHdpdGggYSBzZXBhcmF0b3IsIHdlIGtub3cgd2UgYXQgbGVhc3QgaGF2ZSBhbiBhYnNvbHV0ZVxuICAgICAgLy8gcGF0aCBvZiBzb21lIGtpbmQgKFVOQyBvciBvdGhlcndpc2UpXG4gICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcblxuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMSkpKSB7XG4gICAgICAgIC8vIE1hdGNoZWQgZG91YmxlIHBhdGggc2VwYXJhdG9yIGF0IGJlZ2lubmluZ1xuICAgICAgICBsZXQgaiA9IDI7XG4gICAgICAgIGxldCBsYXN0ID0gajtcbiAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0UGFydCA9IHBhdGguc2xpY2UobGFzdCwgaik7XG4gICAgICAgICAgLy8gTWF0Y2hlZCFcbiAgICAgICAgICBsYXN0ID0gajtcbiAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgICBsYXN0ID0gajtcbiAgICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaiA9PT0gbGVuKSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCBvbmx5XG4gICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBVTkMgcm9vdCBzaW5jZSB0aGVyZVxuICAgICAgICAgICAgICAvLyBpcyBub3RoaW5nIGxlZnQgdG8gcHJvY2Vzc1xuXG4gICAgICAgICAgICAgIHJldHVybiBgXFxcXFxcXFwke2ZpcnN0UGFydH1cXFxcJHtwYXRoLnNsaWNlKGxhc3QpfVxcXFxgO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCB3aXRoIGxlZnRvdmVyc1xuXG4gICAgICAgICAgICAgIGRldmljZSA9IGBcXFxcXFxcXCR7Zmlyc3RQYXJ0fVxcXFwke3BhdGguc2xpY2UobGFzdCwgail9YDtcbiAgICAgICAgICAgICAgcm9vdEVuZCA9IGo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290RW5kID0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzV2luZG93c0RldmljZVJvb3QoY29kZSkpIHtcbiAgICAgIC8vIFBvc3NpYmxlIGRldmljZSByb290XG5cbiAgICAgIGlmIChwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgZGV2aWNlID0gcGF0aC5zbGljZSgwLCAyKTtcbiAgICAgICAgcm9vdEVuZCA9IDI7XG4gICAgICAgIGlmIChsZW4gPiAyKSB7XG4gICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMikpKSB7XG4gICAgICAgICAgICAvLyBUcmVhdCBzZXBhcmF0b3IgZm9sbG93aW5nIGRyaXZlIG5hbWUgYXMgYW4gYWJzb2x1dGUgcGF0aFxuICAgICAgICAgICAgLy8gaW5kaWNhdG9yXG4gICAgICAgICAgICBpc0Fic29sdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJvb3RFbmQgPSAzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAvLyBgcGF0aGAgY29udGFpbnMganVzdCBhIHBhdGggc2VwYXJhdG9yLCBleGl0IGVhcmx5IHRvIGF2b2lkIHVubmVjZXNzYXJ5XG4gICAgLy8gd29ya1xuICAgIHJldHVybiBcIlxcXFxcIjtcbiAgfVxuXG4gIGxldCB0YWlsOiBzdHJpbmc7XG4gIGlmIChyb290RW5kIDwgbGVuKSB7XG4gICAgdGFpbCA9IG5vcm1hbGl6ZVN0cmluZyhcbiAgICAgIHBhdGguc2xpY2Uocm9vdEVuZCksXG4gICAgICAhaXNBYnNvbHV0ZSxcbiAgICAgIFwiXFxcXFwiLFxuICAgICAgaXNQYXRoU2VwYXJhdG9yLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGFpbCA9IFwiXCI7XG4gIH1cbiAgaWYgKHRhaWwubGVuZ3RoID09PSAwICYmICFpc0Fic29sdXRlKSB0YWlsID0gXCIuXCI7XG4gIGlmICh0YWlsLmxlbmd0aCA+IDAgJiYgaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChsZW4gLSAxKSkpIHtcbiAgICB0YWlsICs9IFwiXFxcXFwiO1xuICB9XG4gIGlmIChkZXZpY2UgPT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChpc0Fic29sdXRlKSB7XG4gICAgICBpZiAodGFpbC5sZW5ndGggPiAwKSByZXR1cm4gYFxcXFwke3RhaWx9YDtcbiAgICAgIGVsc2UgcmV0dXJuIFwiXFxcXFwiO1xuICAgIH0gZWxzZSBpZiAodGFpbC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGFpbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQWJzb2x1dGUpIHtcbiAgICBpZiAodGFpbC5sZW5ndGggPiAwKSByZXR1cm4gYCR7ZGV2aWNlfVxcXFwke3RhaWx9YDtcbiAgICBlbHNlIHJldHVybiBgJHtkZXZpY2V9XFxcXGA7XG4gIH0gZWxzZSBpZiAodGFpbC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGRldmljZSArIHRhaWw7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRldmljZTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIHdoZXRoZXIgcGF0aCBpcyBhYnNvbHV0ZVxuICogQHBhcmFtIHBhdGggdG8gdmVyaWZ5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuICBjb25zdCBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7XG4gIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGNvZGUpKSB7XG4gICAgLy8gUG9zc2libGUgZGV2aWNlIHJvb3RcblxuICAgIGlmIChsZW4gPiAyICYmIHBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTikge1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMikpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEpvaW4gYWxsIGdpdmVuIGEgc2VxdWVuY2Ugb2YgYHBhdGhzYCx0aGVuIG5vcm1hbGl6ZXMgdGhlIHJlc3VsdGluZyBwYXRoLlxuICogQHBhcmFtIHBhdGhzIHRvIGJlIGpvaW5lZCBhbmQgbm9ybWFsaXplZFxuICovXG5leHBvcnQgZnVuY3Rpb24gam9pbiguLi5wYXRoczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBwYXRoc0NvdW50ID0gcGF0aHMubGVuZ3RoO1xuICBpZiAocGF0aHNDb3VudCA9PT0gMCkgcmV0dXJuIFwiLlwiO1xuXG4gIGxldCBqb2luZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGZpcnN0UGFydDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aHNDb3VudDsgKytpKSB7XG4gICAgY29uc3QgcGF0aCA9IHBhdGhzW2ldO1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGpvaW5lZCA9PT0gdW5kZWZpbmVkKSBqb2luZWQgPSBmaXJzdFBhcnQgPSBwYXRoO1xuICAgICAgZWxzZSBqb2luZWQgKz0gYFxcXFwke3BhdGh9YDtcbiAgICB9XG4gIH1cblxuICBpZiAoam9pbmVkID09PSB1bmRlZmluZWQpIHJldHVybiBcIi5cIjtcblxuICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgam9pbmVkIHBhdGggZG9lc24ndCBzdGFydCB3aXRoIHR3byBzbGFzaGVzLCBiZWNhdXNlXG4gIC8vIG5vcm1hbGl6ZSgpIHdpbGwgbWlzdGFrZSBpdCBmb3IgYW4gVU5DIHBhdGggdGhlbi5cbiAgLy9cbiAgLy8gVGhpcyBzdGVwIGlzIHNraXBwZWQgd2hlbiBpdCBpcyB2ZXJ5IGNsZWFyIHRoYXQgdGhlIHVzZXIgYWN0dWFsbHlcbiAgLy8gaW50ZW5kZWQgdG8gcG9pbnQgYXQgYW4gVU5DIHBhdGguIFRoaXMgaXMgYXNzdW1lZCB3aGVuIHRoZSBmaXJzdFxuICAvLyBub24tZW1wdHkgc3RyaW5nIGFyZ3VtZW50cyBzdGFydHMgd2l0aCBleGFjdGx5IHR3byBzbGFzaGVzIGZvbGxvd2VkIGJ5XG4gIC8vIGF0IGxlYXN0IG9uZSBtb3JlIG5vbi1zbGFzaCBjaGFyYWN0ZXIuXG4gIC8vXG4gIC8vIE5vdGUgdGhhdCBmb3Igbm9ybWFsaXplKCkgdG8gdHJlYXQgYSBwYXRoIGFzIGFuIFVOQyBwYXRoIGl0IG5lZWRzIHRvXG4gIC8vIGhhdmUgYXQgbGVhc3QgMiBjb21wb25lbnRzLCBzbyB3ZSBkb24ndCBmaWx0ZXIgZm9yIHRoYXQgaGVyZS5cbiAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSB1c2VyIGNhbiB1c2Ugam9pbiB0byBjb25zdHJ1Y3QgVU5DIHBhdGhzIGZyb21cbiAgLy8gYSBzZXJ2ZXIgbmFtZSBhbmQgYSBzaGFyZSBuYW1lOyBmb3IgZXhhbXBsZTpcbiAgLy8gICBwYXRoLmpvaW4oJy8vc2VydmVyJywgJ3NoYXJlJykgLT4gJ1xcXFxcXFxcc2VydmVyXFxcXHNoYXJlXFxcXCcpXG4gIGxldCBuZWVkc1JlcGxhY2UgPSB0cnVlO1xuICBsZXQgc2xhc2hDb3VudCA9IDA7XG4gIGFzc2VydChmaXJzdFBhcnQgIT0gbnVsbCk7XG4gIGlmIChpc1BhdGhTZXBhcmF0b3IoZmlyc3RQYXJ0LmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgKytzbGFzaENvdW50O1xuICAgIGNvbnN0IGZpcnN0TGVuID0gZmlyc3RQYXJ0Lmxlbmd0aDtcbiAgICBpZiAoZmlyc3RMZW4gPiAxKSB7XG4gICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGZpcnN0UGFydC5jaGFyQ29kZUF0KDEpKSkge1xuICAgICAgICArK3NsYXNoQ291bnQ7XG4gICAgICAgIGlmIChmaXJzdExlbiA+IDIpIHtcbiAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGZpcnN0UGFydC5jaGFyQ29kZUF0KDIpKSkgKytzbGFzaENvdW50O1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyBwYXRoIGluIHRoZSBmaXJzdCBwYXJ0XG4gICAgICAgICAgICBuZWVkc1JlcGxhY2UgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKG5lZWRzUmVwbGFjZSkge1xuICAgIC8vIEZpbmQgYW55IG1vcmUgY29uc2VjdXRpdmUgc2xhc2hlcyB3ZSBuZWVkIHRvIHJlcGxhY2VcbiAgICBmb3IgKDsgc2xhc2hDb3VudCA8IGpvaW5lZC5sZW5ndGg7ICsrc2xhc2hDb3VudCkge1xuICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3Ioam9pbmVkLmNoYXJDb2RlQXQoc2xhc2hDb3VudCkpKSBicmVhaztcbiAgICB9XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBzbGFzaGVzIGlmIG5lZWRlZFxuICAgIGlmIChzbGFzaENvdW50ID49IDIpIGpvaW5lZCA9IGBcXFxcJHtqb2luZWQuc2xpY2Uoc2xhc2hDb3VudCl9YDtcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemUoam9pbmVkKTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIHNvbHZlIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gYGZyb21gIHRvIGB0b2AsIGZvciBpbnN0YW5jZTpcbiAqICBmcm9tID0gJ0M6XFxcXG9yYW5kZWFcXFxcdGVzdFxcXFxhYWEnXG4gKiAgdG8gPSAnQzpcXFxcb3JhbmRlYVxcXFxpbXBsXFxcXGJiYidcbiAqIFRoZSBvdXRwdXQgb2YgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZTogJy4uXFxcXC4uXFxcXGltcGxcXFxcYmJiJ1xuICogQHBhcmFtIGZyb20gcmVsYXRpdmUgcGF0aFxuICogQHBhcmFtIHRvIHJlbGF0aXZlIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aXZlKGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZyB7XG4gIGFzc2VydFBhdGgoZnJvbSk7XG4gIGFzc2VydFBhdGgodG8pO1xuXG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIFwiXCI7XG5cbiAgY29uc3QgZnJvbU9yaWcgPSByZXNvbHZlKGZyb20pO1xuICBjb25zdCB0b09yaWcgPSByZXNvbHZlKHRvKTtcblxuICBpZiAoZnJvbU9yaWcgPT09IHRvT3JpZykgcmV0dXJuIFwiXCI7XG5cbiAgZnJvbSA9IGZyb21PcmlnLnRvTG93ZXJDYXNlKCk7XG4gIHRvID0gdG9PcmlnLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gXCJcIjtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCBmcm9tU3RhcnQgPSAwO1xuICBsZXQgZnJvbUVuZCA9IGZyb20ubGVuZ3RoO1xuICBmb3IgKDsgZnJvbVN0YXJ0IDwgZnJvbUVuZDsgKytmcm9tU3RhcnQpIHtcbiAgICBpZiAoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCkgIT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIC8vIFRyaW0gdHJhaWxpbmcgYmFja3NsYXNoZXMgKGFwcGxpY2FibGUgdG8gVU5DIHBhdGhzIG9ubHkpXG4gIGZvciAoOyBmcm9tRW5kIC0gMSA+IGZyb21TdGFydDsgLS1mcm9tRW5kKSB7XG4gICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tRW5kIC0gMSkgIT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIGNvbnN0IGZyb21MZW4gPSBmcm9tRW5kIC0gZnJvbVN0YXJ0O1xuXG4gIC8vIFRyaW0gYW55IGxlYWRpbmcgYmFja3NsYXNoZXNcbiAgbGV0IHRvU3RhcnQgPSAwO1xuICBsZXQgdG9FbmQgPSB0by5sZW5ndGg7XG4gIGZvciAoOyB0b1N0YXJ0IDwgdG9FbmQ7ICsrdG9TdGFydCkge1xuICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQpICE9PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICAvLyBUcmltIHRyYWlsaW5nIGJhY2tzbGFzaGVzIChhcHBsaWNhYmxlIHRvIFVOQyBwYXRocyBvbmx5KVxuICBmb3IgKDsgdG9FbmQgLSAxID4gdG9TdGFydDsgLS10b0VuZCkge1xuICAgIGlmICh0by5jaGFyQ29kZUF0KHRvRW5kIC0gMSkgIT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIGNvbnN0IHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG4gIC8vIENvbXBhcmUgcGF0aHMgdG8gZmluZCB0aGUgbG9uZ2VzdCBjb21tb24gcGF0aCBmcm9tIHJvb3RcbiAgY29uc3QgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuO1xuICBsZXQgbGFzdENvbW1vblNlcCA9IC0xO1xuICBsZXQgaSA9IDA7XG4gIGZvciAoOyBpIDw9IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGxlbmd0aCkge1xuICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgZXhhY3QgYmFzZSBwYXRoIGZvciBgdG9gLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPSdDOlxcXFxmb29cXFxcYmFyJzsgdG89J0M6XFxcXGZvb1xcXFxiYXJcXFxcYmF6J1xuICAgICAgICAgIHJldHVybiB0b09yaWcuc2xpY2UodG9TdGFydCArIGkgKyAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAyKSB7XG4gICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYGZyb21gIGlzIHRoZSBkZXZpY2Ugcm9vdC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nQzpcXFxcJzsgdG89J0M6XFxcXGZvbydcbiAgICAgICAgICByZXR1cm4gdG9PcmlnLnNsaWNlKHRvU3RhcnQgKyBpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZyb21MZW4gPiBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYGZyb21gLlxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPSdDOlxcXFxmb29cXFxcYmFyJzsgdG89J0M6XFxcXGZvbydcbiAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAyKSB7XG4gICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYHRvYCBpcyB0aGUgZGV2aWNlIHJvb3QuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209J0M6XFxcXGZvb1xcXFxiYXInOyB0bz0nQzpcXFxcJ1xuICAgICAgICAgIGxhc3RDb21tb25TZXAgPSAzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgZnJvbUNvZGUgPSBmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSk7XG4gICAgY29uc3QgdG9Db2RlID0gdG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSk7XG4gICAgaWYgKGZyb21Db2RlICE9PSB0b0NvZGUpIGJyZWFrO1xuICAgIGVsc2UgaWYgKGZyb21Db2RlID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSBsYXN0Q29tbW9uU2VwID0gaTtcbiAgfVxuXG4gIC8vIFdlIGZvdW5kIGEgbWlzbWF0Y2ggYmVmb3JlIHRoZSBmaXJzdCBjb21tb24gcGF0aCBzZXBhcmF0b3Igd2FzIHNlZW4sIHNvXG4gIC8vIHJldHVybiB0aGUgb3JpZ2luYWwgYHRvYC5cbiAgaWYgKGkgIT09IGxlbmd0aCAmJiBsYXN0Q29tbW9uU2VwID09PSAtMSkge1xuICAgIHJldHVybiB0b09yaWc7XG4gIH1cblxuICBsZXQgb3V0ID0gXCJcIjtcbiAgaWYgKGxhc3RDb21tb25TZXAgPT09IC0xKSBsYXN0Q29tbW9uU2VwID0gMDtcbiAgLy8gR2VuZXJhdGUgdGhlIHJlbGF0aXZlIHBhdGggYmFzZWQgb24gdGhlIHBhdGggZGlmZmVyZW5jZSBiZXR3ZWVuIGB0b2AgYW5kXG4gIC8vIGBmcm9tYFxuICBmb3IgKGkgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaSA8PSBmcm9tRW5kOyArK2kpIHtcbiAgICBpZiAoaSA9PT0gZnJvbUVuZCB8fCBmcm9tLmNoYXJDb2RlQXQoaSkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgIGlmIChvdXQubGVuZ3RoID09PSAwKSBvdXQgKz0gXCIuLlwiO1xuICAgICAgZWxzZSBvdXQgKz0gXCJcXFxcLi5cIjtcbiAgICB9XG4gIH1cblxuICAvLyBMYXN0bHksIGFwcGVuZCB0aGUgcmVzdCBvZiB0aGUgZGVzdGluYXRpb24gKGB0b2ApIHBhdGggdGhhdCBjb21lcyBhZnRlclxuICAvLyB0aGUgY29tbW9uIHBhdGggcGFydHNcbiAgaWYgKG91dC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIG91dCArIHRvT3JpZy5zbGljZSh0b1N0YXJ0ICsgbGFzdENvbW1vblNlcCwgdG9FbmQpO1xuICB9IGVsc2Uge1xuICAgIHRvU3RhcnQgKz0gbGFzdENvbW1vblNlcDtcbiAgICBpZiAodG9PcmlnLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpICsrdG9TdGFydDtcbiAgICByZXR1cm4gdG9PcmlnLnNsaWNlKHRvU3RhcnQsIHRvRW5kKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHBhdGggdG8gYSBuYW1lc3BhY2UgcGF0aFxuICogQHBhcmFtIHBhdGggdG8gcmVzb2x2ZSB0byBuYW1lc3BhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmFtZXNwYWNlZFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gTm90ZTogdGhpcyB3aWxsICpwcm9iYWJseSogdGhyb3cgc29tZXdoZXJlLlxuICBpZiAodHlwZW9mIHBhdGggIT09IFwic3RyaW5nXCIpIHJldHVybiBwYXRoO1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiBcIlwiO1xuXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUocGF0aCk7XG5cbiAgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPj0gMykge1xuICAgIGlmIChyZXNvbHZlZFBhdGguY2hhckNvZGVBdCgwKSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgLy8gUG9zc2libGUgVU5DIHJvb3RcblxuICAgICAgaWYgKHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSByZXNvbHZlZFBhdGguY2hhckNvZGVBdCgyKTtcbiAgICAgICAgaWYgKGNvZGUgIT09IENIQVJfUVVFU1RJT05fTUFSSyAmJiBjb2RlICE9PSBDSEFSX0RPVCkge1xuICAgICAgICAgIC8vIE1hdGNoZWQgbm9uLWxvbmcgVU5DIHJvb3QsIGNvbnZlcnQgdGhlIHBhdGggdG8gYSBsb25nIFVOQyBwYXRoXG4gICAgICAgICAgcmV0dXJuIGBcXFxcXFxcXD9cXFxcVU5DXFxcXCR7cmVzb2x2ZWRQYXRoLnNsaWNlKDIpfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzV2luZG93c0RldmljZVJvb3QocmVzb2x2ZWRQYXRoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAvLyBQb3NzaWJsZSBkZXZpY2Ugcm9vdFxuXG4gICAgICBpZiAoXG4gICAgICAgIHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDEpID09PSBDSEFSX0NPTE9OICYmXG4gICAgICAgIHJlc29sdmVkUGF0aC5jaGFyQ29kZUF0KDIpID09PSBDSEFSX0JBQ0tXQVJEX1NMQVNIXG4gICAgICApIHtcbiAgICAgICAgLy8gTWF0Y2hlZCBkZXZpY2Ugcm9vdCwgY29udmVydCB0aGUgcGF0aCB0byBhIGxvbmcgVU5DIHBhdGhcbiAgICAgICAgcmV0dXJuIGBcXFxcXFxcXD9cXFxcJHtyZXNvbHZlZFBhdGh9YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGF0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGRpcmVjdG9yeSBwYXRoIG9mIGEgYHBhdGhgLlxuICogQHBhcmFtIHBhdGggdG8gZGV0ZXJtaW5lIHRoZSBkaXJlY3RvcnkgcGF0aCBmb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgY29uc3QgbGVuID0gcGF0aC5sZW5ndGg7XG4gIGlmIChsZW4gPT09IDApIHJldHVybiBcIi5cIjtcbiAgbGV0IHJvb3RFbmQgPSAtMTtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGNvbnN0IGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7XG5cbiAgLy8gVHJ5IHRvIG1hdGNoIGEgcm9vdFxuICBpZiAobGVuID4gMSkge1xuICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAgIC8vIFBvc3NpYmxlIFVOQyByb290XG5cbiAgICAgIHJvb3RFbmQgPSBvZmZzZXQgPSAxO1xuXG4gICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdCgxKSkpIHtcbiAgICAgICAgLy8gTWF0Y2hlZCBkb3VibGUgcGF0aCBzZXBhcmF0b3IgYXQgYmVnaW5uaW5nXG4gICAgICAgIGxldCBqID0gMjtcbiAgICAgICAgbGV0IGxhc3QgPSBqO1xuICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaikpKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgLy8gTWF0Y2hlZCFcbiAgICAgICAgICBsYXN0ID0gajtcbiAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgaWYgKCFpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChqIDwgbGVuICYmIGogIT09IGxhc3QpIHtcbiAgICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgICBsYXN0ID0gajtcbiAgICAgICAgICAgIC8vIE1hdGNoIDEgb3IgbW9yZSBub24tcGF0aCBzZXBhcmF0b3JzXG4gICAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaiA9PT0gbGVuKSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCBvbmx5XG4gICAgICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogIT09IGxhc3QpIHtcbiAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIFVOQyByb290IHdpdGggbGVmdG92ZXJzXG5cbiAgICAgICAgICAgICAgLy8gT2Zmc2V0IGJ5IDEgdG8gaW5jbHVkZSB0aGUgc2VwYXJhdG9yIGFmdGVyIHRoZSBVTkMgcm9vdCB0b1xuICAgICAgICAgICAgICAvLyB0cmVhdCBpdCBhcyBhIFwibm9ybWFsIHJvb3RcIiBvbiB0b3Agb2YgYSAoVU5DKSByb290XG4gICAgICAgICAgICAgIHJvb3RFbmQgPSBvZmZzZXQgPSBqICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzV2luZG93c0RldmljZVJvb3QoY29kZSkpIHtcbiAgICAgIC8vIFBvc3NpYmxlIGRldmljZSByb290XG5cbiAgICAgIGlmIChwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgcm9vdEVuZCA9IG9mZnNldCA9IDI7XG4gICAgICAgIGlmIChsZW4gPiAyKSB7XG4gICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMikpKSByb290RW5kID0gb2Zmc2V0ID0gMztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAvLyBgcGF0aGAgY29udGFpbnMganVzdCBhIHBhdGggc2VwYXJhdG9yLCBleGl0IGVhcmx5IHRvIGF2b2lkXG4gICAgLy8gdW5uZWNlc3Nhcnkgd29ya1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IGxlbiAtIDE7IGkgPj0gb2Zmc2V0OyAtLWkpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgIGVuZCA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvclxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICBpZiAocm9vdEVuZCA9PT0gLTEpIHJldHVybiBcIi5cIjtcbiAgICBlbHNlIGVuZCA9IHJvb3RFbmQ7XG4gIH1cbiAgcmV0dXJuIHBhdGguc2xpY2UoMCwgZW5kKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxhc3QgcG9ydGlvbiBvZiBhIGBwYXRoYC4gVHJhaWxpbmcgZGlyZWN0b3J5IHNlcGFyYXRvcnMgYXJlIGlnbm9yZWQuXG4gKiBAcGFyYW0gcGF0aCB0byBwcm9jZXNzXG4gKiBAcGFyYW0gZXh0IG9mIHBhdGggZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlbmFtZShwYXRoOiBzdHJpbmcsIGV4dCA9IFwiXCIpOiBzdHJpbmcge1xuICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGV4dCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO1xuICB9XG5cbiAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgZW5kID0gLTE7XG4gIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICBsZXQgaTogbnVtYmVyO1xuXG4gIC8vIENoZWNrIGZvciBhIGRyaXZlIGxldHRlciBwcmVmaXggc28gYXMgbm90IHRvIG1pc3Rha2UgdGhlIGZvbGxvd2luZ1xuICAvLyBwYXRoIHNlcGFyYXRvciBhcyBhbiBleHRyYSBzZXBhcmF0b3IgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCB0aGF0IGNhbiBiZVxuICAvLyBkaXNyZWdhcmRlZFxuICBpZiAocGF0aC5sZW5ndGggPj0gMikge1xuICAgIGNvbnN0IGRyaXZlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICAgIGlmIChpc1dpbmRvd3NEZXZpY2VSb290KGRyaXZlKSkge1xuICAgICAgaWYgKHBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTikgc3RhcnQgPSAyO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleHQgIT09IHVuZGVmaW5lZCAmJiBleHQubGVuZ3RoID4gMCAmJiBleHQubGVuZ3RoIDw9IHBhdGgubGVuZ3RoKSB7XG4gICAgaWYgKGV4dC5sZW5ndGggPT09IHBhdGgubGVuZ3RoICYmIGV4dCA9PT0gcGF0aCkgcmV0dXJuIFwiXCI7XG4gICAgbGV0IGV4dElkeCA9IGV4dC5sZW5ndGggLSAxO1xuICAgIGxldCBmaXJzdE5vblNsYXNoRW5kID0gLTE7XG4gICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IHN0YXJ0OyAtLWkpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaXJzdE5vblNsYXNoRW5kID09PSAtMSkge1xuICAgICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCByZW1lbWJlciB0aGlzIGluZGV4IGluIGNhc2VcbiAgICAgICAgICAvLyB3ZSBuZWVkIGl0IGlmIHRoZSBleHRlbnNpb24gZW5kcyB1cCBub3QgbWF0Y2hpbmdcbiAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgICBmaXJzdE5vblNsYXNoRW5kID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dElkeCA+PSAwKSB7XG4gICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIHRoZSBleHBsaWNpdCBleHRlbnNpb25cbiAgICAgICAgICBpZiAoY29kZSA9PT0gZXh0LmNoYXJDb2RlQXQoZXh0SWR4KSkge1xuICAgICAgICAgICAgaWYgKC0tZXh0SWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBleHRlbnNpb24sIHNvIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91ciBwYXRoXG4gICAgICAgICAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBFeHRlbnNpb24gZG9lcyBub3QgbWF0Y2gsIHNvIG91ciByZXN1bHQgaXMgdGhlIGVudGlyZSBwYXRoXG4gICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgIGV4dElkeCA9IC0xO1xuICAgICAgICAgICAgZW5kID0gZmlyc3ROb25TbGFzaEVuZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPT09IGVuZCkgZW5kID0gZmlyc3ROb25TbGFzaEVuZDtcbiAgICBlbHNlIGlmIChlbmQgPT09IC0xKSBlbmQgPSBwYXRoLmxlbmd0aDtcbiAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydCwgZW5kKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoaSkpKSB7XG4gICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZW5kID09PSAtMSkge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAgIC8vIHBhdGggY29tcG9uZW50XG4gICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICBlbmQgPSBpICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW5kID09PSAtMSkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4dGVuc2lvbiBvZiB0aGUgYHBhdGhgIHdpdGggbGVhZGluZyBwZXJpb2QuXG4gKiBAcGFyYW0gcGF0aCB3aXRoIGV4dGVuc2lvblxuICogQHJldHVybnMgZXh0ZW5zaW9uIChleC4gZm9yIGBmaWxlLnRzYCByZXR1cm5zIGAudHNgKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0bmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnRQYXRoKHBhdGgpO1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgc3RhcnREb3QgPSAtMTtcbiAgbGV0IHN0YXJ0UGFydCA9IDA7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgbGV0IHByZURvdFN0YXRlID0gMDtcblxuICAvLyBDaGVjayBmb3IgYSBkcml2ZSBsZXR0ZXIgcHJlZml4IHNvIGFzIG5vdCB0byBtaXN0YWtlIHRoZSBmb2xsb3dpbmdcbiAgLy8gcGF0aCBzZXBhcmF0b3IgYXMgYW4gZXh0cmEgc2VwYXJhdG9yIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGggdGhhdCBjYW4gYmVcbiAgLy8gZGlzcmVnYXJkZWRcblxuICBpZiAoXG4gICAgcGF0aC5sZW5ndGggPj0gMiAmJlxuICAgIHBhdGguY2hhckNvZGVBdCgxKSA9PT0gQ0hBUl9DT0xPTiAmJlxuICAgIGlzV2luZG93c0RldmljZVJvb3QocGF0aC5jaGFyQ29kZUF0KDApKVxuICApIHtcbiAgICBzdGFydCA9IHN0YXJ0UGFydCA9IDI7XG4gIH1cblxuICBmb3IgKGxldCBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IHN0YXJ0OyAtLWkpIHtcbiAgICBjb25zdCBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZW5kID09PSAtMSkge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgLy8gZXh0ZW5zaW9uXG4gICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgIGVuZCA9IGkgKyAxO1xuICAgIH1cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9ET1QpIHtcbiAgICAgIC8vIElmIHRoaXMgaXMgb3VyIGZpcnN0IGRvdCwgbWFyayBpdCBhcyB0aGUgc3RhcnQgb2Ygb3VyIGV4dGVuc2lvblxuICAgICAgaWYgKHN0YXJ0RG90ID09PSAtMSkgc3RhcnREb3QgPSBpO1xuICAgICAgZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpIHByZURvdFN0YXRlID0gMTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkge1xuICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgIC8vIGhhdmUgYSBnb29kIGNoYW5jZSBhdCBoYXZpbmcgYSBub24tZW1wdHkgZXh0ZW5zaW9uXG4gICAgICBwcmVEb3RTdGF0ZSA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIGlmIChcbiAgICBzdGFydERvdCA9PT0gLTEgfHxcbiAgICBlbmQgPT09IC0xIHx8XG4gICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3RcbiAgICBwcmVEb3RTdGF0ZSA9PT0gMCB8fFxuICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLidcbiAgICAocHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpXG4gICkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcGF0aCBmcm9tIGBGb3JtYXRJbnB1dFBhdGhPYmplY3RgIG9iamVjdC5cbiAqIEBwYXJhbSBwYXRoT2JqZWN0IHdpdGggcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KHBhdGhPYmplY3Q6IEZvcm1hdElucHV0UGF0aE9iamVjdCk6IHN0cmluZyB7XG4gIGlmIChwYXRoT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiBwYXRoT2JqZWN0ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBUaGUgXCJwYXRoT2JqZWN0XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBwYXRoT2JqZWN0fWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gX2Zvcm1hdChcIlxcXFxcIiwgcGF0aE9iamVjdCk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgYFBhcnNlZFBhdGhgIG9iamVjdCBvZiB0aGUgYHBhdGhgLlxuICogQHBhcmFtIHBhdGggdG8gcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UocGF0aDogc3RyaW5nKTogUGFyc2VkUGF0aCB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgY29uc3QgcmV0OiBQYXJzZWRQYXRoID0geyByb290OiBcIlwiLCBkaXI6IFwiXCIsIGJhc2U6IFwiXCIsIGV4dDogXCJcIiwgbmFtZTogXCJcIiB9O1xuXG4gIGNvbnN0IGxlbiA9IHBhdGgubGVuZ3RoO1xuICBpZiAobGVuID09PSAwKSByZXR1cm4gcmV0O1xuXG4gIGxldCByb290RW5kID0gMDtcbiAgbGV0IGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7XG5cbiAgLy8gVHJ5IHRvIG1hdGNoIGEgcm9vdFxuICBpZiAobGVuID4gMSkge1xuICAgIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAgIC8vIFBvc3NpYmxlIFVOQyByb290XG5cbiAgICAgIHJvb3RFbmQgPSAxO1xuICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMSkpKSB7XG4gICAgICAgIC8vIE1hdGNoZWQgZG91YmxlIHBhdGggc2VwYXJhdG9yIGF0IGJlZ2lubmluZ1xuICAgICAgICBsZXQgaiA9IDI7XG4gICAgICAgIGxldCBsYXN0ID0gajtcbiAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIG5vbi1wYXRoIHNlcGFyYXRvcnNcbiAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgIGlmIChpc1BhdGhTZXBhcmF0b3IocGF0aC5jaGFyQ29kZUF0KGopKSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGogPCBsZW4gJiYgaiAhPT0gbGFzdCkge1xuICAgICAgICAgIC8vIE1hdGNoZWQhXG4gICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgLy8gTWF0Y2ggMSBvciBtb3JlIHBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgIGZvciAoOyBqIDwgbGVuOyArK2opIHtcbiAgICAgICAgICAgIGlmICghaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAvLyBNYXRjaGVkIVxuICAgICAgICAgICAgbGFzdCA9IGo7XG4gICAgICAgICAgICAvLyBNYXRjaCAxIG9yIG1vcmUgbm9uLXBhdGggc2VwYXJhdG9yc1xuICAgICAgICAgICAgZm9yICg7IGogPCBsZW47ICsraikge1xuICAgICAgICAgICAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKHBhdGguY2hhckNvZGVBdChqKSkpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPT09IGxlbikge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIGEgVU5DIHJvb3Qgb25seVxuXG4gICAgICAgICAgICAgIHJvb3RFbmQgPSBqO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChqICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgYSBVTkMgcm9vdCB3aXRoIGxlZnRvdmVyc1xuXG4gICAgICAgICAgICAgIHJvb3RFbmQgPSBqICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzV2luZG93c0RldmljZVJvb3QoY29kZSkpIHtcbiAgICAgIC8vIFBvc3NpYmxlIGRldmljZSByb290XG5cbiAgICAgIGlmIChwYXRoLmNoYXJDb2RlQXQoMSkgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgcm9vdEVuZCA9IDI7XG4gICAgICAgIGlmIChsZW4gPiAyKSB7XG4gICAgICAgICAgaWYgKGlzUGF0aFNlcGFyYXRvcihwYXRoLmNoYXJDb2RlQXQoMikpKSB7XG4gICAgICAgICAgICBpZiAobGVuID09PSAzKSB7XG4gICAgICAgICAgICAgIC8vIGBwYXRoYCBjb250YWlucyBqdXN0IGEgZHJpdmUgcm9vdCwgZXhpdCBlYXJseSB0byBhdm9pZFxuICAgICAgICAgICAgICAvLyB1bm5lY2Vzc2FyeSB3b3JrXG4gICAgICAgICAgICAgIHJldC5yb290ID0gcmV0LmRpciA9IHBhdGg7XG4gICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb290RW5kID0gMztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYHBhdGhgIGNvbnRhaW5zIGp1c3QgYSBkcml2ZSByb290LCBleGl0IGVhcmx5IHRvIGF2b2lkXG4gICAgICAgICAgLy8gdW5uZWNlc3Nhcnkgd29ya1xuICAgICAgICAgIHJldC5yb290ID0gcmV0LmRpciA9IHBhdGg7XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BhdGhTZXBhcmF0b3IoY29kZSkpIHtcbiAgICAvLyBgcGF0aGAgY29udGFpbnMganVzdCBhIHBhdGggc2VwYXJhdG9yLCBleGl0IGVhcmx5IHRvIGF2b2lkXG4gICAgLy8gdW5uZWNlc3Nhcnkgd29ya1xuICAgIHJldC5yb290ID0gcmV0LmRpciA9IHBhdGg7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGlmIChyb290RW5kID4gMCkgcmV0LnJvb3QgPSBwYXRoLnNsaWNlKDAsIHJvb3RFbmQpO1xuXG4gIGxldCBzdGFydERvdCA9IC0xO1xuICBsZXQgc3RhcnRQYXJ0ID0gcm9vdEVuZDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgbGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7XG5cbiAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICBsZXQgcHJlRG90U3RhdGUgPSAwO1xuXG4gIC8vIEdldCBub24tZGlyIGluZm9cbiAgZm9yICg7IGkgPj0gcm9vdEVuZDsgLS1pKSB7XG4gICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUpKSB7XG4gICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICBlbmQgPSBpICsgMTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IENIQVJfRE9UKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpIHN0YXJ0RG90ID0gaTtcbiAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAvLyBoYXZlIGEgZ29vZCBjaGFuY2UgYXQgaGF2aW5nIGEgbm9uLWVtcHR5IGV4dGVuc2lvblxuICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICB9XG4gIH1cblxuICBpZiAoXG4gICAgc3RhcnREb3QgPT09IC0xIHx8XG4gICAgZW5kID09PSAtMSB8fFxuICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZG90XG4gICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSAnLi4nXG4gICAgKHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKVxuICApIHtcbiAgICBpZiAoZW5kICE9PSAtMSkge1xuICAgICAgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBzdGFydERvdCk7XG4gICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICByZXQuZXh0ID0gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbiAgfVxuXG4gIC8vIElmIHRoZSBkaXJlY3RvcnkgaXMgdGhlIHJvb3QsIHVzZSB0aGUgZW50aXJlIHJvb3QgYXMgdGhlIGBkaXJgIGluY2x1ZGluZ1xuICAvLyB0aGUgdHJhaWxpbmcgc2xhc2ggaWYgYW55IChgQzpcXGFiY2AgLT4gYEM6XFxgKS4gT3RoZXJ3aXNlLCBzdHJpcCBvdXQgdGhlXG4gIC8vIHRyYWlsaW5nIHNsYXNoIChgQzpcXGFiY1xcZGVmYCAtPiBgQzpcXGFiY2ApLlxuICBpZiAoc3RhcnRQYXJ0ID4gMCAmJiBzdGFydFBhcnQgIT09IHJvb3RFbmQpIHtcbiAgICByZXQuZGlyID0gcGF0aC5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTtcbiAgfSBlbHNlIHJldC5kaXIgPSByZXQucm9vdDtcblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgZmlsZSBVUkwgdG8gYSBwYXRoIHN0cmluZy5cbiAqXG4gKiBgYGB0c1xuICogICAgICBpbXBvcnQgeyBmcm9tRmlsZVVybCB9IGZyb20gXCIuL3dpbjMyLnRzXCI7XG4gKiAgICAgIGZyb21GaWxlVXJsKFwiZmlsZTovLy9ob21lL2Zvb1wiKTsgLy8gXCJcXFxcaG9tZVxcXFxmb29cIlxuICogICAgICBmcm9tRmlsZVVybChcImZpbGU6Ly8vQzovVXNlcnMvZm9vXCIpOyAvLyBcIkM6XFxcXFVzZXJzXFxcXGZvb1wiXG4gKiAgICAgIGZyb21GaWxlVXJsKFwiZmlsZTovL2xvY2FsaG9zdC9ob21lL2Zvb1wiKTsgLy8gXCJcXFxcXFxcXGxvY2FsaG9zdFxcXFxob21lXFxcXGZvb1wiXG4gKiBgYGBcbiAqIEBwYXJhbSB1cmwgb2YgYSBmaWxlIFVSTFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUZpbGVVcmwodXJsOiBzdHJpbmcgfCBVUkwpOiBzdHJpbmcge1xuICB1cmwgPSB1cmwgaW5zdGFuY2VvZiBVUkwgPyB1cmwgOiBuZXcgVVJMKHVybCk7XG4gIGlmICh1cmwucHJvdG9jb2wgIT0gXCJmaWxlOlwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYSBmaWxlIFVSTC5cIik7XG4gIH1cbiAgbGV0IHBhdGggPSBkZWNvZGVVUklDb21wb25lbnQoXG4gICAgdXJsLnBhdGhuYW1lLnJlcGxhY2UoL1xcLy9nLCBcIlxcXFxcIikucmVwbGFjZSgvJSg/IVswLTlBLUZhLWZdezJ9KS9nLCBcIiUyNVwiKSxcbiAgKS5yZXBsYWNlKC9eXFxcXCooW0EtWmEtel06KShcXFxcfCQpLywgXCIkMVxcXFxcIik7XG4gIGlmICh1cmwuaG9zdG5hbWUgIT0gXCJcIikge1xuICAgIC8vIE5vdGU6IFRoZSBgVVJMYCBpbXBsZW1lbnRhdGlvbiBndWFyYW50ZWVzIHRoYXQgdGhlIGRyaXZlIGxldHRlciBhbmRcbiAgICAvLyBob3N0bmFtZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBPdGhlcndpc2UgaXQgd291bGQgbm90IGhhdmUgYmVlbiB2YWxpZFxuICAgIC8vIHRvIGFwcGVuZCB0aGUgaG9zdG5hbWUgYW5kIHBhdGggbGlrZSB0aGlzLlxuICAgIHBhdGggPSBgXFxcXFxcXFwke3VybC5ob3N0bmFtZX0ke3BhdGh9YDtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHBhdGggc3RyaW5nIHRvIGEgZmlsZSBVUkwuXG4gKlxuICogYGBgdHNcbiAqICAgICAgaW1wb3J0IHsgdG9GaWxlVXJsIH0gZnJvbSBcIi4vd2luMzIudHNcIjtcbiAqICAgICAgdG9GaWxlVXJsKFwiXFxcXGhvbWVcXFxcZm9vXCIpOyAvLyBuZXcgVVJMKFwiZmlsZTovLy9ob21lL2Zvb1wiKVxuICogICAgICB0b0ZpbGVVcmwoXCJDOlxcXFxVc2Vyc1xcXFxmb29cIik7IC8vIG5ldyBVUkwoXCJmaWxlOi8vL0M6L1VzZXJzL2Zvb1wiKVxuICogICAgICB0b0ZpbGVVcmwoXCJcXFxcXFxcXDEyNy4wLjAuMVxcXFxob21lXFxcXGZvb1wiKTsgLy8gbmV3IFVSTChcImZpbGU6Ly8xMjcuMC4wLjEvaG9tZS9mb29cIilcbiAqIGBgYFxuICogQHBhcmFtIHBhdGggdG8gY29udmVydCB0byBmaWxlIFVSTFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9GaWxlVXJsKHBhdGg6IHN0cmluZyk6IFVSTCB7XG4gIGlmICghaXNBYnNvbHV0ZShwYXRoKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXCIpO1xuICB9XG4gIGNvbnN0IFssIGhvc3RuYW1lLCBwYXRobmFtZV0gPSBwYXRoLm1hdGNoKFxuICAgIC9eKD86Wy9cXFxcXXsyfShbXi9cXFxcXSspKD89Wy9cXFxcXSg/OlteL1xcXFxdfCQpKSk/KC4qKS8sXG4gICkhO1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKFwiZmlsZTovLy9cIik7XG4gIHVybC5wYXRobmFtZSA9IGVuY29kZVdoaXRlc3BhY2UocGF0aG5hbWUucmVwbGFjZSgvJS9nLCBcIiUyNVwiKSk7XG4gIGlmIChob3N0bmFtZSAhPSBudWxsICYmIGhvc3RuYW1lICE9IFwibG9jYWxob3N0XCIpIHtcbiAgICB1cmwuaG9zdG5hbWUgPSBob3N0bmFtZTtcbiAgICBpZiAoIXVybC5ob3N0bmFtZSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgaG9zdG5hbWUuXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdXJsO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgdGhlIEJyb3dzZXJpZnkgYXV0aG9ycy4gTUlUIExpY2Vuc2UuXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkvXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbi8vIEFscGhhYmV0IGNoYXJzLlxuZXhwb3J0IGNvbnN0IENIQVJfVVBQRVJDQVNFX0EgPSA2NTsgLyogQSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTE9XRVJDQVNFX0EgPSA5NzsgLyogYSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfVVBQRVJDQVNFX1ogPSA5MDsgLyogWiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTE9XRVJDQVNFX1ogPSAxMjI7IC8qIHogKi9cblxuLy8gTm9uLWFscGhhYmV0aWMgY2hhcnMuXG5leHBvcnQgY29uc3QgQ0hBUl9ET1QgPSA0NjsgLyogLiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfRk9SV0FSRF9TTEFTSCA9IDQ3OyAvKiAvICovXG5leHBvcnQgY29uc3QgQ0hBUl9CQUNLV0FSRF9TTEFTSCA9IDkyOyAvKiBcXCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfVkVSVElDQUxfTElORSA9IDEyNDsgLyogfCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfQ09MT04gPSA1ODsgLyogOiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfUVVFU1RJT05fTUFSSyA9IDYzOyAvKiA/ICovXG5leHBvcnQgY29uc3QgQ0hBUl9VTkRFUlNDT1JFID0gOTU7IC8qIF8gKi9cbmV4cG9ydCBjb25zdCBDSEFSX0xJTkVfRkVFRCA9IDEwOyAvKiBcXG4gKi9cbmV4cG9ydCBjb25zdCBDSEFSX0NBUlJJQUdFX1JFVFVSTiA9IDEzOyAvKiBcXHIgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1RBQiA9IDk7IC8qIFxcdCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfRk9STV9GRUVEID0gMTI7IC8qIFxcZiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfRVhDTEFNQVRJT05fTUFSSyA9IDMzOyAvKiAhICovXG5leHBvcnQgY29uc3QgQ0hBUl9IQVNIID0gMzU7IC8qICMgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1NQQUNFID0gMzI7IC8qICAgKi9cbmV4cG9ydCBjb25zdCBDSEFSX05PX0JSRUFLX1NQQUNFID0gMTYwOyAvKiBcXHUwMEEwICovXG5leHBvcnQgY29uc3QgQ0hBUl9aRVJPX1dJRFRIX05PQlJFQUtfU1BBQ0UgPSA2NTI3OTsgLyogXFx1RkVGRiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCA9IDkxOyAvKiBbICovXG5leHBvcnQgY29uc3QgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCA9IDkzOyAvKiBdICovXG5leHBvcnQgY29uc3QgQ0hBUl9MRUZUX0FOR0xFX0JSQUNLRVQgPSA2MDsgLyogPCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfUklHSFRfQU5HTEVfQlJBQ0tFVCA9IDYyOyAvKiA+ICovXG5leHBvcnQgY29uc3QgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgPSAxMjM7IC8qIHsgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgPSAxMjU7IC8qIH0gKi9cbmV4cG9ydCBjb25zdCBDSEFSX0hZUEhFTl9NSU5VUyA9IDQ1OyAvKiAtICovXG5leHBvcnQgY29uc3QgQ0hBUl9QTFVTID0gNDM7IC8qICsgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0RPVUJMRV9RVU9URSA9IDM0OyAvKiBcIiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfU0lOR0xFX1FVT1RFID0gMzk7IC8qICcgKi9cbmV4cG9ydCBjb25zdCBDSEFSX1BFUkNFTlQgPSAzNzsgLyogJSAqL1xuZXhwb3J0IGNvbnN0IENIQVJfU0VNSUNPTE9OID0gNTk7IC8qIDsgKi9cbmV4cG9ydCBjb25zdCBDSEFSX0NJUkNVTUZMRVhfQUNDRU5UID0gOTQ7IC8qIF4gKi9cbmV4cG9ydCBjb25zdCBDSEFSX0dSQVZFX0FDQ0VOVCA9IDk2OyAvKiBgICovXG5leHBvcnQgY29uc3QgQ0hBUl9BVCA9IDY0OyAvKiBAICovXG5leHBvcnQgY29uc3QgQ0hBUl9BTVBFUlNBTkQgPSAzODsgLyogJiAqL1xuZXhwb3J0IGNvbnN0IENIQVJfRVFVQUwgPSA2MTsgLyogPSAqL1xuXG4vLyBEaWdpdHNcbmV4cG9ydCBjb25zdCBDSEFSXzAgPSA0ODsgLyogMCAqL1xuZXhwb3J0IGNvbnN0IENIQVJfOSA9IDU3OyAvKiA5ICovXG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L3BhdGgtYnJvd3NlcmlmeS9cbi8vIFRoaXMgbW9kdWxlIGlzIGJyb3dzZXIgY29tcGF0aWJsZS5cblxuaW1wb3J0IHR5cGUgeyBGb3JtYXRJbnB1dFBhdGhPYmplY3QgfSBmcm9tIFwiLi9faW50ZXJmYWNlLnRzXCI7XG5pbXBvcnQge1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILFxuICBDSEFSX0RPVCxcbiAgQ0hBUl9GT1JXQVJEX1NMQVNILFxuICBDSEFSX0xPV0VSQ0FTRV9BLFxuICBDSEFSX0xPV0VSQ0FTRV9aLFxuICBDSEFSX1VQUEVSQ0FTRV9BLFxuICBDSEFSX1VQUEVSQ0FTRV9aLFxufSBmcm9tIFwiLi9fY29uc3RhbnRzLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRQYXRoKHBhdGg6IHN0cmluZykge1xuICBpZiAodHlwZW9mIHBhdGggIT09IFwic3RyaW5nXCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgYFBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShwYXRoKX1gLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUG9zaXhQYXRoU2VwYXJhdG9yKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoU2VwYXJhdG9yKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNQb3NpeFBhdGhTZXBhcmF0b3IoY29kZSkgfHwgY29kZSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93c0RldmljZVJvb3QoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgKGNvZGUgPj0gQ0hBUl9MT1dFUkNBU0VfQSAmJiBjb2RlIDw9IENIQVJfTE9XRVJDQVNFX1opIHx8XG4gICAgKGNvZGUgPj0gQ0hBUl9VUFBFUkNBU0VfQSAmJiBjb2RlIDw9IENIQVJfVVBQRVJDQVNFX1opXG4gICk7XG59XG5cbi8vIFJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCB3aXRoIGRpcmVjdG9yeSBuYW1lc1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZyhcbiAgcGF0aDogc3RyaW5nLFxuICBhbGxvd0Fib3ZlUm9vdDogYm9vbGVhbixcbiAgc2VwYXJhdG9yOiBzdHJpbmcsXG4gIGlzUGF0aFNlcGFyYXRvcjogKGNvZGU6IG51bWJlcikgPT4gYm9vbGVhbixcbik6IHN0cmluZyB7XG4gIGxldCByZXMgPSBcIlwiO1xuICBsZXQgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICBsZXQgbGFzdFNsYXNoID0gLTE7XG4gIGxldCBkb3RzID0gMDtcbiAgbGV0IGNvZGU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHBhdGgubGVuZ3RoOyBpIDw9IGxlbjsgKytpKSB7XG4gICAgaWYgKGkgPCBsZW4pIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgZWxzZSBpZiAoaXNQYXRoU2VwYXJhdG9yKGNvZGUhKSkgYnJlYWs7XG4gICAgZWxzZSBjb2RlID0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xuXG4gICAgaWYgKGlzUGF0aFNlcGFyYXRvcihjb2RlISkpIHtcbiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGkgLSAxIHx8IGRvdHMgPT09IDEpIHtcbiAgICAgICAgLy8gTk9PUFxuICAgICAgfSBlbHNlIGlmIChsYXN0U2xhc2ggIT09IGkgLSAxICYmIGRvdHMgPT09IDIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcy5sZW5ndGggPCAyIHx8XG4gICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHxcbiAgICAgICAgICByZXMuY2hhckNvZGVBdChyZXMubGVuZ3RoIC0gMSkgIT09IENIQVJfRE9UIHx8XG4gICAgICAgICAgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDIpICE9PSBDSEFSX0RPVFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTbGFzaEluZGV4ID0gcmVzLmxhc3RJbmRleE9mKHNlcGFyYXRvcik7XG4gICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIHJlcyA9IFwiXCI7XG4gICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlcyA9IHJlcy5zbGljZSgwLCBsYXN0U2xhc2hJbmRleCk7XG4gICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gcmVzLmxlbmd0aCAtIDEgLSByZXMubGFzdEluZGV4T2Yoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmxlbmd0aCA9PT0gMiB8fCByZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXMgPSBcIlwiO1xuICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgICAgICAgIGRvdHMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkgcmVzICs9IGAke3NlcGFyYXRvcn0uLmA7XG4gICAgICAgICAgZWxzZSByZXMgPSBcIi4uXCI7XG4gICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHJlcyArPSBzZXBhcmF0b3IgKyBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBlbHNlIHJlcyA9IHBhdGguc2xpY2UobGFzdFNsYXNoICsgMSwgaSk7XG4gICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gaSAtIGxhc3RTbGFzaCAtIDE7XG4gICAgICB9XG4gICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgZG90cyA9IDA7XG4gICAgfSBlbHNlIGlmIChjb2RlID09PSBDSEFSX0RPVCAmJiBkb3RzICE9PSAtMSkge1xuICAgICAgKytkb3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb3RzID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZm9ybWF0KFxuICBzZXA6IHN0cmluZyxcbiAgcGF0aE9iamVjdDogRm9ybWF0SW5wdXRQYXRoT2JqZWN0LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZGlyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXRoT2JqZWN0LmRpciB8fCBwYXRoT2JqZWN0LnJvb3Q7XG4gIGNvbnN0IGJhc2U6IHN0cmluZyA9IHBhdGhPYmplY3QuYmFzZSB8fFxuICAgIChwYXRoT2JqZWN0Lm5hbWUgfHwgXCJcIikgKyAocGF0aE9iamVjdC5leHQgfHwgXCJcIik7XG4gIGlmICghZGlyKSByZXR1cm4gYmFzZTtcbiAgaWYgKGRpciA9PT0gcGF0aE9iamVjdC5yb290KSByZXR1cm4gZGlyICsgYmFzZTtcbiAgcmV0dXJuIGRpciArIHNlcCArIGJhc2U7XG59XG5cbmNvbnN0IFdISVRFU1BBQ0VfRU5DT0RJTkdTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcIlxcdTAwMDlcIjogXCIlMDlcIixcbiAgXCJcXHUwMDBBXCI6IFwiJTBBXCIsXG4gIFwiXFx1MDAwQlwiOiBcIiUwQlwiLFxuICBcIlxcdTAwMENcIjogXCIlMENcIixcbiAgXCJcXHUwMDBEXCI6IFwiJTBEXCIsXG4gIFwiXFx1MDAyMFwiOiBcIiUyMFwiLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVdoaXRlc3BhY2Uoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2VBbGwoL1tcXHNdL2csIChjKSA9PiB7XG4gICAgcmV0dXJuIFdISVRFU1BBQ0VfRU5DT0RJTkdTW2NdID8/IGM7XG4gIH0pO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgdGhlIEJyb3dzZXJpZnkgYXV0aG9ycy4gTUlUIExpY2Vuc2UuXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkvXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB0eXBlIHsgRm9ybWF0SW5wdXRQYXRoT2JqZWN0LCBQYXJzZWRQYXRoIH0gZnJvbSBcIi4vX2ludGVyZmFjZS50c1wiO1xuaW1wb3J0IHsgQ0hBUl9ET1QsIENIQVJfRk9SV0FSRF9TTEFTSCB9IGZyb20gXCIuL19jb25zdGFudHMudHNcIjtcblxuaW1wb3J0IHtcbiAgX2Zvcm1hdCxcbiAgYXNzZXJ0UGF0aCxcbiAgZW5jb2RlV2hpdGVzcGFjZSxcbiAgaXNQb3NpeFBhdGhTZXBhcmF0b3IsXG4gIG5vcm1hbGl6ZVN0cmluZyxcbn0gZnJvbSBcIi4vX3V0aWwudHNcIjtcblxuZXhwb3J0IGNvbnN0IHNlcCA9IFwiL1wiO1xuZXhwb3J0IGNvbnN0IGRlbGltaXRlciA9IFwiOlwiO1xuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vKipcbiAqIFJlc29sdmVzIGBwYXRoU2VnbWVudHNgIGludG8gYW4gYWJzb2x1dGUgcGF0aC5cbiAqIEBwYXJhbSBwYXRoU2VnbWVudHMgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZSguLi5wYXRoU2VnbWVudHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgbGV0IHJlc29sdmVkUGF0aCA9IFwiXCI7XG4gIGxldCByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IHBhdGhTZWdtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICBsZXQgcGF0aDogc3RyaW5nO1xuXG4gICAgaWYgKGkgPj0gMCkgcGF0aCA9IHBhdGhTZWdtZW50c1tpXTtcbiAgICBlbHNlIHtcbiAgICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgICBjb25zdCB7IERlbm8gfSA9IGdsb2JhbFRoaXMgYXMgYW55O1xuICAgICAgaWYgKHR5cGVvZiBEZW5vPy5jd2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVzb2x2ZWQgYSByZWxhdGl2ZSBwYXRoIHdpdGhvdXQgYSBDV0QuXCIpO1xuICAgICAgfVxuICAgICAgcGF0aCA9IERlbm8uY3dkKCk7XG4gICAgfVxuXG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgZW50cmllc1xuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gYCR7cGF0aH0vJHtyZXNvbHZlZFBhdGh9YDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQ29kZUF0KDApID09PSBDSEFSX0ZPUldBUkRfU0xBU0g7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcoXG4gICAgcmVzb2x2ZWRQYXRoLFxuICAgICFyZXNvbHZlZEFic29sdXRlLFxuICAgIFwiL1wiLFxuICAgIGlzUG9zaXhQYXRoU2VwYXJhdG9yLFxuICApO1xuXG4gIGlmIChyZXNvbHZlZEFic29sdXRlKSB7XG4gICAgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKSByZXR1cm4gYC8ke3Jlc29sdmVkUGF0aH1gO1xuICAgIGVsc2UgcmV0dXJuIFwiL1wiO1xuICB9IGVsc2UgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZWRQYXRoO1xuICBlbHNlIHJldHVybiBcIi5cIjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIGBwYXRoYCwgcmVzb2x2aW5nIGAnLi4nYCBhbmQgYCcuJ2Agc2VnbWVudHMuXG4gKiBAcGFyYW0gcGF0aCB0byBiZSBub3JtYWxpemVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiBcIi5cIjtcblxuICBjb25zdCBpc0Fic29sdXRlID0gcGF0aC5jaGFyQ29kZUF0KDApID09PSBDSEFSX0ZPUldBUkRfU0xBU0g7XG4gIGNvbnN0IHRyYWlsaW5nU2VwYXJhdG9yID1cbiAgICBwYXRoLmNoYXJDb2RlQXQocGF0aC5sZW5ndGggLSAxKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplU3RyaW5nKHBhdGgsICFpc0Fic29sdXRlLCBcIi9cIiwgaXNQb3NpeFBhdGhTZXBhcmF0b3IpO1xuXG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZSkgcGF0aCA9IFwiLlwiO1xuICBpZiAocGF0aC5sZW5ndGggPiAwICYmIHRyYWlsaW5nU2VwYXJhdG9yKSBwYXRoICs9IFwiL1wiO1xuXG4gIGlmIChpc0Fic29sdXRlKSByZXR1cm4gYC8ke3BhdGh9YDtcbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgd2hldGhlciBwcm92aWRlZCBwYXRoIGlzIGFic29sdXRlXG4gKiBAcGFyYW0gcGF0aCB0byBiZSB2ZXJpZmllZCBhcyBhYnNvbHV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgcmV0dXJuIHBhdGgubGVuZ3RoID4gMCAmJiBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSDtcbn1cblxuLyoqXG4gKiBKb2luIGFsbCBnaXZlbiBhIHNlcXVlbmNlIG9mIGBwYXRoc2AsdGhlbiBub3JtYWxpemVzIHRoZSByZXN1bHRpbmcgcGF0aC5cbiAqIEBwYXJhbSBwYXRocyB0byBiZSBqb2luZWQgYW5kIG5vcm1hbGl6ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW4oLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHBhdGhzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiLlwiO1xuICBsZXQgam9pbmVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXRocy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGNvbnN0IHBhdGggPSBwYXRoc1tpXTtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICgham9pbmVkKSBqb2luZWQgPSBwYXRoO1xuICAgICAgZWxzZSBqb2luZWQgKz0gYC8ke3BhdGh9YDtcbiAgICB9XG4gIH1cbiAgaWYgKCFqb2luZWQpIHJldHVybiBcIi5cIjtcbiAgcmV0dXJuIG5vcm1hbGl6ZShqb2luZWQpO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIGBmcm9tYCB0byBgdG9gIGJhc2VkIG9uIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gZnJvbSBwYXRoIGluIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAqIEBwYXJhbSB0byBwYXRoIGluIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aXZlKGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZyB7XG4gIGFzc2VydFBhdGgoZnJvbSk7XG4gIGFzc2VydFBhdGgodG8pO1xuXG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIFwiXCI7XG5cbiAgZnJvbSA9IHJlc29sdmUoZnJvbSk7XG4gIHRvID0gcmVzb2x2ZSh0byk7XG5cbiAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gXCJcIjtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCBmcm9tU3RhcnQgPSAxO1xuICBjb25zdCBmcm9tRW5kID0gZnJvbS5sZW5ndGg7XG4gIGZvciAoOyBmcm9tU3RhcnQgPCBmcm9tRW5kOyArK2Zyb21TdGFydCkge1xuICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0KSAhPT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSBicmVhaztcbiAgfVxuICBjb25zdCBmcm9tTGVuID0gZnJvbUVuZCAtIGZyb21TdGFydDtcblxuICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gIGxldCB0b1N0YXJ0ID0gMTtcbiAgY29uc3QgdG9FbmQgPSB0by5sZW5ndGg7XG4gIGZvciAoOyB0b1N0YXJ0IDwgdG9FbmQ7ICsrdG9TdGFydCkge1xuICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQpICE9PSBDSEFSX0ZPUldBUkRfU0xBU0gpIGJyZWFrO1xuICB9XG4gIGNvbnN0IHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG4gIC8vIENvbXBhcmUgcGF0aHMgdG8gZmluZCB0aGUgbG9uZ2VzdCBjb21tb24gcGF0aCBmcm9tIHJvb3RcbiAgY29uc3QgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuO1xuICBsZXQgbGFzdENvbW1vblNlcCA9IC0xO1xuICBsZXQgaSA9IDA7XG4gIGZvciAoOyBpIDw9IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGxlbmd0aCkge1xuICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYGZyb21gIGlzIHRoZSBleGFjdCBiYXNlIHBhdGggZm9yIGB0b2AuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28vYmFyJzsgdG89Jy9mb28vYmFyL2JheidcbiAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkgKyAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYGZyb21gIGlzIHRoZSByb290XG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy8nOyB0bz0nL2ZvbydcbiAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZyb21MZW4gPiBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYHRvYCBpcyB0aGUgZXhhY3QgYmFzZSBwYXRoIGZvciBgZnJvbWAuXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28vYmFyL2Jheic7IHRvPScvZm9vL2JhcidcbiAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYHRvYCBpcyB0aGUgcm9vdC5cbiAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvbyc7IHRvPScvJ1xuICAgICAgICAgIGxhc3RDb21tb25TZXAgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3QgZnJvbUNvZGUgPSBmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSk7XG4gICAgY29uc3QgdG9Db2RlID0gdG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSk7XG4gICAgaWYgKGZyb21Db2RlICE9PSB0b0NvZGUpIGJyZWFrO1xuICAgIGVsc2UgaWYgKGZyb21Db2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIGxhc3RDb21tb25TZXAgPSBpO1xuICB9XG5cbiAgbGV0IG91dCA9IFwiXCI7XG4gIC8vIEdlbmVyYXRlIHRoZSByZWxhdGl2ZSBwYXRoIGJhc2VkIG9uIHRoZSBwYXRoIGRpZmZlcmVuY2UgYmV0d2VlbiBgdG9gXG4gIC8vIGFuZCBgZnJvbWBcbiAgZm9yIChpID0gZnJvbVN0YXJ0ICsgbGFzdENvbW1vblNlcCArIDE7IGkgPD0gZnJvbUVuZDsgKytpKSB7XG4gICAgaWYgKGkgPT09IGZyb21FbmQgfHwgZnJvbS5jaGFyQ29kZUF0KGkpID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHtcbiAgICAgIGlmIChvdXQubGVuZ3RoID09PSAwKSBvdXQgKz0gXCIuLlwiO1xuICAgICAgZWxzZSBvdXQgKz0gXCIvLi5cIjtcbiAgICB9XG4gIH1cblxuICAvLyBMYXN0bHksIGFwcGVuZCB0aGUgcmVzdCBvZiB0aGUgZGVzdGluYXRpb24gKGB0b2ApIHBhdGggdGhhdCBjb21lcyBhZnRlclxuICAvLyB0aGUgY29tbW9uIHBhdGggcGFydHNcbiAgaWYgKG91dC5sZW5ndGggPiAwKSByZXR1cm4gb3V0ICsgdG8uc2xpY2UodG9TdGFydCArIGxhc3RDb21tb25TZXApO1xuICBlbHNlIHtcbiAgICB0b1N0YXJ0ICs9IGxhc3RDb21tb25TZXA7XG4gICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkgKyt0b1N0YXJ0O1xuICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHBhdGggdG8gYSBuYW1lc3BhY2UgcGF0aFxuICogQHBhcmFtIHBhdGggdG8gcmVzb2x2ZSB0byBuYW1lc3BhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvTmFtZXNwYWNlZFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gTm9uLW9wIG9uIHBvc2l4IHN5c3RlbXNcbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBkaXJlY3RvcnkgcGF0aCBvZiBhIGBwYXRoYC5cbiAqIEBwYXJhbSBwYXRoIHRvIGRldGVybWluZSB0aGUgZGlyZWN0b3J5IHBhdGggZm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiLlwiO1xuICBjb25zdCBoYXNSb290ID0gcGF0aC5jaGFyQ29kZUF0KDApID09PSBDSEFSX0ZPUldBUkRfU0xBU0g7XG4gIGxldCBlbmQgPSAtMTtcbiAgbGV0IG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gIGZvciAobGV0IGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMTsgLS1pKSB7XG4gICAgaWYgKHBhdGguY2hhckNvZGVBdChpKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBlbmQgPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3JcbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbmQgPT09IC0xKSByZXR1cm4gaGFzUm9vdCA/IFwiL1wiIDogXCIuXCI7XG4gIGlmIChoYXNSb290ICYmIGVuZCA9PT0gMSkgcmV0dXJuIFwiLy9cIjtcbiAgcmV0dXJuIHBhdGguc2xpY2UoMCwgZW5kKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxhc3QgcG9ydGlvbiBvZiBhIGBwYXRoYC4gVHJhaWxpbmcgZGlyZWN0b3J5IHNlcGFyYXRvcnMgYXJlIGlnbm9yZWQuXG4gKiBAcGFyYW0gcGF0aCB0byBwcm9jZXNzXG4gKiBAcGFyYW0gZXh0IG9mIHBhdGggZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlbmFtZShwYXRoOiBzdHJpbmcsIGV4dCA9IFwiXCIpOiBzdHJpbmcge1xuICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGV4dCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO1xuICB9XG4gIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgbGV0IGk6IG51bWJlcjtcblxuICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgZXh0Lmxlbmd0aCA+IDAgJiYgZXh0Lmxlbmd0aCA8PSBwYXRoLmxlbmd0aCkge1xuICAgIGlmIChleHQubGVuZ3RoID09PSBwYXRoLmxlbmd0aCAmJiBleHQgPT09IHBhdGgpIHJldHVybiBcIlwiO1xuICAgIGxldCBleHRJZHggPSBleHQubGVuZ3RoIC0gMTtcbiAgICBsZXQgZmlyc3ROb25TbGFzaEVuZCA9IC0xO1xuICAgIGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaXJzdE5vblNsYXNoRW5kID09PSAtMSkge1xuICAgICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCByZW1lbWJlciB0aGlzIGluZGV4IGluIGNhc2VcbiAgICAgICAgICAvLyB3ZSBuZWVkIGl0IGlmIHRoZSBleHRlbnNpb24gZW5kcyB1cCBub3QgbWF0Y2hpbmdcbiAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgICBmaXJzdE5vblNsYXNoRW5kID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dElkeCA+PSAwKSB7XG4gICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIHRoZSBleHBsaWNpdCBleHRlbnNpb25cbiAgICAgICAgICBpZiAoY29kZSA9PT0gZXh0LmNoYXJDb2RlQXQoZXh0SWR4KSkge1xuICAgICAgICAgICAgaWYgKC0tZXh0SWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBleHRlbnNpb24sIHNvIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91ciBwYXRoXG4gICAgICAgICAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBFeHRlbnNpb24gZG9lcyBub3QgbWF0Y2gsIHNvIG91ciByZXN1bHQgaXMgdGhlIGVudGlyZSBwYXRoXG4gICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgIGV4dElkeCA9IC0xO1xuICAgICAgICAgICAgZW5kID0gZmlyc3ROb25TbGFzaEVuZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnQgPT09IGVuZCkgZW5kID0gZmlyc3ROb25TbGFzaEVuZDtcbiAgICBlbHNlIGlmIChlbmQgPT09IC0xKSBlbmQgPSBwYXRoLmxlbmd0aDtcbiAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydCwgZW5kKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KGkpID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHtcbiAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgICAgLy8gcGF0aCBjb21wb25lbnRcbiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgIGVuZCA9IGkgKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbmQgPT09IC0xKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydCwgZW5kKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBgcGF0aGAgd2l0aCBsZWFkaW5nIHBlcmlvZC5cbiAqIEBwYXJhbSBwYXRoIHdpdGggZXh0ZW5zaW9uXG4gKiBAcmV0dXJucyBleHRlbnNpb24gKGV4LiBmb3IgYGZpbGUudHNgIHJldHVybnMgYC50c2ApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGFzc2VydFBhdGgocGF0aCk7XG4gIGxldCBzdGFydERvdCA9IC0xO1xuICBsZXQgc3RhcnRQYXJ0ID0gMDtcbiAgbGV0IGVuZCA9IC0xO1xuICBsZXQgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICBsZXQgcHJlRG90U3RhdGUgPSAwO1xuICBmb3IgKGxldCBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgIGNvbnN0IGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGNvZGUgPT09IENIQVJfRk9SV0FSRF9TTEFTSCkge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgc3RhcnRQYXJ0ID0gaSArIDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAvLyBleHRlbnNpb25cbiAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgZW5kID0gaSArIDE7XG4gICAgfVxuICAgIGlmIChjb2RlID09PSBDSEFSX0RPVCkge1xuICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7XG4gICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSkgcHJlRG90U3RhdGUgPSAxO1xuICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90ID09PSAtMSB8fFxuICAgIGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIChwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSlcbiAgKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBwYXRoIGZyb20gYEZvcm1hdElucHV0UGF0aE9iamVjdGAgb2JqZWN0LlxuICogQHBhcmFtIHBhdGhPYmplY3Qgd2l0aCBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQocGF0aE9iamVjdDogRm9ybWF0SW5wdXRQYXRoT2JqZWN0KTogc3RyaW5nIHtcbiAgaWYgKHBhdGhPYmplY3QgPT09IG51bGwgfHwgdHlwZW9mIHBhdGhPYmplY3QgIT09IFwib2JqZWN0XCIpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgYFRoZSBcInBhdGhPYmplY3RcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIHBhdGhPYmplY3R9YCxcbiAgICApO1xuICB9XG4gIHJldHVybiBfZm9ybWF0KFwiL1wiLCBwYXRoT2JqZWN0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBgUGFyc2VkUGF0aGAgb2JqZWN0IG9mIHRoZSBgcGF0aGAuXG4gKiBAcGFyYW0gcGF0aCB0byBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShwYXRoOiBzdHJpbmcpOiBQYXJzZWRQYXRoIHtcbiAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICBjb25zdCByZXQ6IFBhcnNlZFBhdGggPSB7IHJvb3Q6IFwiXCIsIGRpcjogXCJcIiwgYmFzZTogXCJcIiwgZXh0OiBcIlwiLCBuYW1lOiBcIlwiIH07XG4gIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJldDtcbiAgY29uc3QgaXNBYnNvbHV0ZSA9IHBhdGguY2hhckNvZGVBdCgwKSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIO1xuICBsZXQgc3RhcnQ6IG51bWJlcjtcbiAgaWYgKGlzQWJzb2x1dGUpIHtcbiAgICByZXQucm9vdCA9IFwiL1wiO1xuICAgIHN0YXJ0ID0gMTtcbiAgfSBlbHNlIHtcbiAgICBzdGFydCA9IDA7XG4gIH1cbiAgbGV0IHN0YXJ0RG90ID0gLTE7XG4gIGxldCBzdGFydFBhcnQgPSAwO1xuICBsZXQgZW5kID0gLTE7XG4gIGxldCBtYXRjaGVkU2xhc2ggPSB0cnVlO1xuICBsZXQgaSA9IHBhdGgubGVuZ3RoIC0gMTtcblxuICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gIC8vIGFmdGVyIGFueSBwYXRoIHNlcGFyYXRvciB3ZSBmaW5kXG4gIGxldCBwcmVEb3RTdGF0ZSA9IDA7XG5cbiAgLy8gR2V0IG5vbi1kaXIgaW5mb1xuICBmb3IgKDsgaSA+PSBzdGFydDsgLS1pKSB7XG4gICAgY29uc3QgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIKSB7XG4gICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICBlbmQgPSBpICsgMTtcbiAgICB9XG4gICAgaWYgKGNvZGUgPT09IENIQVJfRE9UKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpIHN0YXJ0RG90ID0gaTtcbiAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAvLyBoYXZlIGEgZ29vZCBjaGFuY2UgYXQgaGF2aW5nIGEgbm9uLWVtcHR5IGV4dGVuc2lvblxuICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICB9XG4gIH1cblxuICBpZiAoXG4gICAgc3RhcnREb3QgPT09IC0xIHx8XG4gICAgZW5kID09PSAtMSB8fFxuICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZG90XG4gICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSAnLi4nXG4gICAgKHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKVxuICApIHtcbiAgICBpZiAoZW5kICE9PSAtMSkge1xuICAgICAgaWYgKHN0YXJ0UGFydCA9PT0gMCAmJiBpc0Fic29sdXRlKSB7XG4gICAgICAgIHJldC5iYXNlID0gcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKDEsIGVuZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKDEsIHN0YXJ0RG90KTtcbiAgICAgIHJldC5iYXNlID0gcGF0aC5zbGljZSgxLCBlbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBzdGFydERvdCk7XG4gICAgICByZXQuYmFzZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpO1xuICAgIH1cbiAgICByZXQuZXh0ID0gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbiAgfVxuXG4gIGlmIChzdGFydFBhcnQgPiAwKSByZXQuZGlyID0gcGF0aC5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTtcbiAgZWxzZSBpZiAoaXNBYnNvbHV0ZSkgcmV0LmRpciA9IFwiL1wiO1xuXG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBmaWxlIFVSTCB0byBhIHBhdGggc3RyaW5nLlxuICpcbiAqIGBgYHRzXG4gKiAgICAgIGltcG9ydCB7IGZyb21GaWxlVXJsIH0gZnJvbSBcIi4vcG9zaXgudHNcIjtcbiAqICAgICAgZnJvbUZpbGVVcmwoXCJmaWxlOi8vL2hvbWUvZm9vXCIpOyAvLyBcIi9ob21lL2Zvb1wiXG4gKiBgYGBcbiAqIEBwYXJhbSB1cmwgb2YgYSBmaWxlIFVSTFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUZpbGVVcmwodXJsOiBzdHJpbmcgfCBVUkwpOiBzdHJpbmcge1xuICB1cmwgPSB1cmwgaW5zdGFuY2VvZiBVUkwgPyB1cmwgOiBuZXcgVVJMKHVybCk7XG4gIGlmICh1cmwucHJvdG9jb2wgIT0gXCJmaWxlOlwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYSBmaWxlIFVSTC5cIik7XG4gIH1cbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChcbiAgICB1cmwucGF0aG5hbWUucmVwbGFjZSgvJSg/IVswLTlBLUZhLWZdezJ9KS9nLCBcIiUyNVwiKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHBhdGggc3RyaW5nIHRvIGEgZmlsZSBVUkwuXG4gKlxuICogYGBgdHNcbiAqICAgICAgaW1wb3J0IHsgdG9GaWxlVXJsIH0gZnJvbSBcIi4vcG9zaXgudHNcIjtcbiAqICAgICAgdG9GaWxlVXJsKFwiL2hvbWUvZm9vXCIpOyAvLyBuZXcgVVJMKFwiZmlsZTovLy9ob21lL2Zvb1wiKVxuICogYGBgXG4gKiBAcGFyYW0gcGF0aCB0byBjb252ZXJ0IHRvIGZpbGUgVVJMXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0ZpbGVVcmwocGF0aDogc3RyaW5nKTogVVJMIHtcbiAgaWYgKCFpc0Fic29sdXRlKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5cIik7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChcImZpbGU6Ly8vXCIpO1xuICB1cmwucGF0aG5hbWUgPSBlbmNvZGVXaGl0ZXNwYWNlKFxuICAgIHBhdGgucmVwbGFjZSgvJS9nLCBcIiUyNVwiKS5yZXBsYWNlKC9cXFxcL2csIFwiJTVDXCIpLFxuICApO1xuICByZXR1cm4gdXJsO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG5cbmltcG9ydCB7IGlzV2luZG93cywgb3NUeXBlIH0gZnJvbSBcIi4uL191dGlsL29zLnRzXCI7XG5pbXBvcnQgeyBTRVAsIFNFUF9QQVRURVJOIH0gZnJvbSBcIi4vc2VwYXJhdG9yLnRzXCI7XG5pbXBvcnQgKiBhcyBfd2luMzIgZnJvbSBcIi4vd2luMzIudHNcIjtcbmltcG9ydCAqIGFzIF9wb3NpeCBmcm9tIFwiLi9wb3NpeC50c1wiO1xuaW1wb3J0IHR5cGUgeyBPU1R5cGUgfSBmcm9tIFwiLi4vX3V0aWwvb3MudHNcIjtcblxuY29uc3QgcGF0aCA9IGlzV2luZG93cyA/IF93aW4zMiA6IF9wb3NpeDtcbmNvbnN0IHsgam9pbiwgbm9ybWFsaXplIH0gPSBwYXRoO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JPcHRpb25zIHtcbiAgLyoqIEV4dGVuZGVkIGdsb2Igc3ludGF4LlxuICAgKiBTZWUgaHR0cHM6Ly93d3cubGludXhqb3VybmFsLmNvbS9jb250ZW50L2Jhc2gtZXh0ZW5kZWQtZ2xvYmJpbmcuIERlZmF1bHRzXG4gICAqIHRvIHRydWUuICovXG4gIGV4dGVuZGVkPzogYm9vbGVhbjtcbiAgLyoqIEdsb2JzdGFyIHN5bnRheC5cbiAgICogU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9nbG9ic3Rhci1uZXctYmFzaC1nbG9iYmluZy1vcHRpb24uXG4gICAqIElmIGZhbHNlLCBgKipgIGlzIHRyZWF0ZWQgbGlrZSBgKmAuIERlZmF1bHRzIHRvIHRydWUuICovXG4gIGdsb2JzdGFyPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgZ2xvYnN0YXIgc2hvdWxkIGJlIGNhc2UgaW5zZW5zaXRpdmUuICovXG4gIGNhc2VJbnNlbnNpdGl2ZT86IGJvb2xlYW47XG4gIC8qKiBPcGVyYXRpbmcgc3lzdGVtLiBEZWZhdWx0cyB0byB0aGUgbmF0aXZlIE9TLiAqL1xuICBvcz86IE9TVHlwZTtcbn1cblxuZXhwb3J0IHR5cGUgR2xvYlRvUmVnRXhwT3B0aW9ucyA9IEdsb2JPcHRpb25zO1xuXG5jb25zdCByZWdFeHBFc2NhcGVDaGFycyA9IFtcbiAgXCIhXCIsXG4gIFwiJFwiLFxuICBcIihcIixcbiAgXCIpXCIsXG4gIFwiKlwiLFxuICBcIitcIixcbiAgXCIuXCIsXG4gIFwiPVwiLFxuICBcIj9cIixcbiAgXCJbXCIsXG4gIFwiXFxcXFwiLFxuICBcIl5cIixcbiAgXCJ7XCIsXG4gIFwifFwiLFxuXTtcbmNvbnN0IHJhbmdlRXNjYXBlQ2hhcnMgPSBbXCItXCIsIFwiXFxcXFwiLCBcIl1cIl07XG5cbi8qKiBDb252ZXJ0IGEgZ2xvYiBzdHJpbmcgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogVHJpZXMgdG8gbWF0Y2ggYmFzaCBnbG9iIGV4cGFuc2lvbiBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxuICpcbiAqIEJhc2ljIGdsb2Igc3ludGF4OlxuICogLSBgKmAgLSBNYXRjaGVzIGV2ZXJ5dGhpbmcgd2l0aG91dCBsZWF2aW5nIHRoZSBwYXRoIHNlZ21lbnQuXG4gKiAtIGA/YCAtIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiAtIGB7Zm9vLGJhcn1gIC0gTWF0Y2hlcyBgZm9vYCBvciBgYmFyYC5cbiAqIC0gYFthYmNkXWAgLSBNYXRjaGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgW2EtZF1gIC0gTWF0Y2hlcyBgYWAsIGBiYCwgYGNgIG9yIGBkYC5cbiAqIC0gYFshYWJjZF1gIC0gTWF0Y2hlcyBhbnkgc2luZ2xlIGNoYXJhY3RlciBiZXNpZGVzIGBhYCwgYGJgLCBgY2Agb3IgYGRgLlxuICogLSBgW1s6PGNsYXNzPjpdXWAgLSBNYXRjaGVzIGFueSBjaGFyYWN0ZXIgYmVsb25naW5nIHRvIGA8Y2xhc3M+YC5cbiAqICAgICAtIGBbWzphbG51bTpdXWAgLSBNYXRjaGVzIGFueSBkaWdpdCBvciBsZXR0ZXIuXG4gKiAgICAgLSBgW1s6ZGlnaXQ6XWFiY11gIC0gTWF0Y2hlcyBhbnkgZGlnaXQsIGBhYCwgYGJgIG9yIGBjYC5cbiAqICAgICAtIFNlZSBodHRwczovL2ZhY2VsZXNzdXNlci5naXRodWIuaW8vd2NtYXRjaC9nbG9iLyNwb3NpeC1jaGFyYWN0ZXItY2xhc3Nlc1xuICogICAgICAgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgY2hhcmFjdGVyIGNsYXNzZXMuXG4gKiAtIGBcXGAgLSBFc2NhcGVzIHRoZSBuZXh0IGNoYXJhY3RlciBmb3IgYW4gYG9zYCBvdGhlciB0aGFuIGBcIndpbmRvd3NcImAuXG4gKiAtIFxcYCAtIEVzY2FwZXMgdGhlIG5leHQgY2hhcmFjdGVyIGZvciBgb3NgIHNldCB0byBgXCJ3aW5kb3dzXCJgLlxuICogLSBgL2AgLSBQYXRoIHNlcGFyYXRvci5cbiAqIC0gYFxcYCAtIEFkZGl0aW9uYWwgcGF0aCBzZXBhcmF0b3Igb25seSBmb3IgYG9zYCBzZXQgdG8gYFwid2luZG93c1wiYC5cbiAqXG4gKiBFeHRlbmRlZCBzeW50YXg6XG4gKiAtIFJlcXVpcmVzIGB7IGV4dGVuZGVkOiB0cnVlIH1gLlxuICogLSBgPyhmb298YmFyKWAgLSBNYXRjaGVzIDAgb3IgMSBpbnN0YW5jZSBvZiBge2ZvbyxiYXJ9YC5cbiAqIC0gYEAoZm9vfGJhcilgIC0gTWF0Y2hlcyAxIGluc3RhbmNlIG9mIGB7Zm9vLGJhcn1gLiBUaGV5IGJlaGF2ZSB0aGUgc2FtZS5cbiAqIC0gYCooZm9vfGJhcilgIC0gTWF0Y2hlcyBfbl8gaW5zdGFuY2VzIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgKyhmb298YmFyKWAgLSBNYXRjaGVzIF9uID4gMF8gaW5zdGFuY2VzIG9mIGB7Zm9vLGJhcn1gLlxuICogLSBgIShmb298YmFyKWAgLSBNYXRjaGVzIGFueXRoaW5nIG90aGVyIHRoYW4gYHtmb28sYmFyfWAuXG4gKiAtIFNlZSBodHRwczovL3d3dy5saW51eGpvdXJuYWwuY29tL2NvbnRlbnQvYmFzaC1leHRlbmRlZC1nbG9iYmluZy5cbiAqXG4gKiBHbG9ic3RhciBzeW50YXg6XG4gKiAtIFJlcXVpcmVzIGB7IGdsb2JzdGFyOiB0cnVlIH1gLlxuICogLSBgKipgIC0gTWF0Y2hlcyBhbnkgbnVtYmVyIG9mIGFueSBwYXRoIHNlZ21lbnRzLlxuICogICAgIC0gTXVzdCBjb21wcmlzZSBpdHMgZW50aXJlIHBhdGggc2VnbWVudCBpbiB0aGUgcHJvdmlkZWQgZ2xvYi5cbiAqIC0gU2VlIGh0dHBzOi8vd3d3LmxpbnV4am91cm5hbC5jb20vY29udGVudC9nbG9ic3Rhci1uZXctYmFzaC1nbG9iYmluZy1vcHRpb24uXG4gKlxuICogTm90ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAtIFRoZSBnZW5lcmF0ZWQgYFJlZ0V4cGAgaXMgYW5jaG9yZWQgYXQgYm90aCBzdGFydCBhbmQgZW5kLlxuICogLSBSZXBlYXRpbmcgYW5kIHRyYWlsaW5nIHNlcGFyYXRvcnMgYXJlIHRvbGVyYXRlZC4gVHJhaWxpbmcgc2VwYXJhdG9ycyBpbiB0aGVcbiAqICAgcHJvdmlkZWQgZ2xvYiBoYXZlIG5vIG1lYW5pbmcgYW5kIGFyZSBkaXNjYXJkZWQuXG4gKiAtIEFic29sdXRlIGdsb2JzIHdpbGwgb25seSBtYXRjaCBhYnNvbHV0ZSBwYXRocywgZXRjLlxuICogLSBFbXB0eSBnbG9icyB3aWxsIG1hdGNoIG5vdGhpbmcuXG4gKiAtIEFueSBzcGVjaWFsIGdsb2Igc3ludGF4IG11c3QgYmUgY29udGFpbmVkIHRvIG9uZSBwYXRoIHNlZ21lbnQuIEZvciBleGFtcGxlLFxuICogICBgPyhmb298YmFyL2JheilgIGlzIGludmFsaWQuIFRoZSBzZXBhcmF0b3Igd2lsbCB0YWtlIHByZWNlZGVuY2UgYW5kIHRoZVxuICogICBmaXJzdCBzZWdtZW50IGVuZHMgd2l0aCBhbiB1bmNsb3NlZCBncm91cC5cbiAqIC0gSWYgYSBwYXRoIHNlZ21lbnQgZW5kcyB3aXRoIHVuY2xvc2VkIGdyb3VwcyBvciBhIGRhbmdsaW5nIGVzY2FwZSBwcmVmaXgsIGFcbiAqICAgcGFyc2UgZXJyb3IgaGFzIG9jY3VycmVkLiBFdmVyeSBjaGFyYWN0ZXIgZm9yIHRoYXQgc2VnbWVudCBpcyB0YWtlblxuICogICBsaXRlcmFsbHkgaW4gdGhpcyBldmVudC5cbiAqXG4gKiBMaW1pdGF0aW9uczpcbiAqIC0gQSBuZWdhdGl2ZSBncm91cCBsaWtlIGAhKGZvb3xiYXIpYCB3aWxsIHdyb25nbHkgYmUgY29udmVydGVkIHRvIGEgbmVnYXRpdmVcbiAqICAgbG9vay1haGVhZCBmb2xsb3dlZCBieSBhIHdpbGRjYXJkLiBUaGlzIG1lYW5zIHRoYXQgYCEoZm9vKS5qc2Agd2lsbCB3cm9uZ2x5XG4gKiAgIGZhaWwgdG8gbWF0Y2ggYGZvb2Jhci5qc2AsIGV2ZW4gdGhvdWdoIGBmb29iYXJgIGlzIG5vdCBgZm9vYC4gRWZmZWN0aXZlbHksXG4gKiAgIGAhKGZvb3xiYXIpYCBpcyB0cmVhdGVkIGxpa2UgYCEoQChmb298YmFyKSopYC4gVGhpcyB3aWxsIHdvcmsgY29ycmVjdGx5IGlmXG4gKiAgIHRoZSBncm91cCBvY2N1cnMgbm90IG5lc3RlZCBhdCB0aGUgZW5kIG9mIHRoZSBzZWdtZW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdsb2JUb1JlZ0V4cChcbiAgZ2xvYjogc3RyaW5nLFxuICB7XG4gICAgZXh0ZW5kZWQgPSB0cnVlLFxuICAgIGdsb2JzdGFyOiBnbG9ic3Rhck9wdGlvbiA9IHRydWUsXG4gICAgb3MgPSBvc1R5cGUsXG4gICAgY2FzZUluc2Vuc2l0aXZlID0gZmFsc2UsXG4gIH06IEdsb2JUb1JlZ0V4cE9wdGlvbnMgPSB7fSxcbik6IFJlZ0V4cCB7XG4gIGlmIChnbG9iID09IFwiXCIpIHtcbiAgICByZXR1cm4gLyg/ISkvO1xuICB9XG5cbiAgY29uc3Qgc2VwID0gb3MgPT0gXCJ3aW5kb3dzXCIgPyBcIig/OlxcXFxcXFxcfC8pK1wiIDogXCIvK1wiO1xuICBjb25zdCBzZXBNYXliZSA9IG9zID09IFwid2luZG93c1wiID8gXCIoPzpcXFxcXFxcXHwvKSpcIiA6IFwiLypcIjtcbiAgY29uc3Qgc2VwcyA9IG9zID09IFwid2luZG93c1wiID8gW1wiXFxcXFwiLCBcIi9cIl0gOiBbXCIvXCJdO1xuICBjb25zdCBnbG9ic3RhciA9IG9zID09IFwid2luZG93c1wiXG4gICAgPyBcIig/OlteXFxcXFxcXFwvXSooPzpcXFxcXFxcXHwvfCQpKykqXCJcbiAgICA6IFwiKD86W14vXSooPzovfCQpKykqXCI7XG4gIGNvbnN0IHdpbGRjYXJkID0gb3MgPT0gXCJ3aW5kb3dzXCIgPyBcIlteXFxcXFxcXFwvXSpcIiA6IFwiW14vXSpcIjtcbiAgY29uc3QgZXNjYXBlUHJlZml4ID0gb3MgPT0gXCJ3aW5kb3dzXCIgPyBcImBcIiA6IFwiXFxcXFwiO1xuXG4gIC8vIFJlbW92ZSB0cmFpbGluZyBzZXBhcmF0b3JzLlxuICBsZXQgbmV3TGVuZ3RoID0gZ2xvYi5sZW5ndGg7XG4gIGZvciAoOyBuZXdMZW5ndGggPiAxICYmIHNlcHMuaW5jbHVkZXMoZ2xvYltuZXdMZW5ndGggLSAxXSk7IG5ld0xlbmd0aC0tKTtcbiAgZ2xvYiA9IGdsb2Iuc2xpY2UoMCwgbmV3TGVuZ3RoKTtcblxuICBsZXQgcmVnRXhwU3RyaW5nID0gXCJcIjtcblxuICAvLyBUZXJtaW5hdGVzIGNvcnJlY3RseS4gVHJ1c3QgdGhhdCBgamAgaXMgaW5jcmVtZW50ZWQgZXZlcnkgaXRlcmF0aW9uLlxuICBmb3IgKGxldCBqID0gMDsgaiA8IGdsb2IubGVuZ3RoOykge1xuICAgIGxldCBzZWdtZW50ID0gXCJcIjtcbiAgICBjb25zdCBncm91cFN0YWNrOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBpblJhbmdlID0gZmFsc2U7XG4gICAgbGV0IGluRXNjYXBlID0gZmFsc2U7XG4gICAgbGV0IGVuZHNXaXRoU2VwID0gZmFsc2U7XG4gICAgbGV0IGkgPSBqO1xuXG4gICAgLy8gVGVybWluYXRlcyB3aXRoIGBpYCBhdCB0aGUgbm9uLWluY2x1c2l2ZSBlbmQgb2YgdGhlIGN1cnJlbnQgc2VnbWVudC5cbiAgICBmb3IgKDsgaSA8IGdsb2IubGVuZ3RoICYmICFzZXBzLmluY2x1ZGVzKGdsb2JbaV0pOyBpKyspIHtcbiAgICAgIGlmIChpbkVzY2FwZSkge1xuICAgICAgICBpbkVzY2FwZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBlc2NhcGVDaGFycyA9IGluUmFuZ2UgPyByYW5nZUVzY2FwZUNoYXJzIDogcmVnRXhwRXNjYXBlQ2hhcnM7XG4gICAgICAgIHNlZ21lbnQgKz0gZXNjYXBlQ2hhcnMuaW5jbHVkZXMoZ2xvYltpXSkgPyBgXFxcXCR7Z2xvYltpXX1gIDogZ2xvYltpXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IGVzY2FwZVByZWZpeCkge1xuICAgICAgICBpbkVzY2FwZSA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBcIltcIikge1xuICAgICAgICBpZiAoIWluUmFuZ2UpIHtcbiAgICAgICAgICBpblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICBzZWdtZW50ICs9IFwiW1wiO1xuICAgICAgICAgIGlmIChnbG9iW2kgKyAxXSA9PSBcIiFcIikge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgc2VnbWVudCArPSBcIl5cIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGdsb2JbaSArIDFdID09IFwiXlwiKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBzZWdtZW50ICs9IFwiXFxcXF5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZ2xvYltpICsgMV0gPT0gXCI6XCIpIHtcbiAgICAgICAgICBsZXQgayA9IGkgKyAxO1xuICAgICAgICAgIGxldCB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgd2hpbGUgKGdsb2JbayArIDFdICE9IG51bGwgJiYgZ2xvYltrICsgMV0gIT0gXCI6XCIpIHtcbiAgICAgICAgICAgIHZhbHVlICs9IGdsb2JbayArIDFdO1xuICAgICAgICAgICAgaysrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZ2xvYltrICsgMV0gPT0gXCI6XCIgJiYgZ2xvYltrICsgMl0gPT0gXCJdXCIpIHtcbiAgICAgICAgICAgIGkgPSBrICsgMjtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcImFsbnVtXCIpIHNlZ21lbnQgKz0gXCJcXFxcZEEtWmEtelwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJhbHBoYVwiKSBzZWdtZW50ICs9IFwiQS1aYS16XCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcImFzY2lpXCIpIHNlZ21lbnQgKz0gXCJcXHgwMC1cXHg3RlwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJibGFua1wiKSBzZWdtZW50ICs9IFwiXFx0IFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJjbnRybFwiKSBzZWdtZW50ICs9IFwiXFx4MDAtXFx4MUZcXHg3RlwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJkaWdpdFwiKSBzZWdtZW50ICs9IFwiXFxcXGRcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwiZ3JhcGhcIikgc2VnbWVudCArPSBcIlxceDIxLVxceDdFXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcImxvd2VyXCIpIHNlZ21lbnQgKz0gXCJhLXpcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwicHJpbnRcIikgc2VnbWVudCArPSBcIlxceDIwLVxceDdFXCI7XG4gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBcInB1bmN0XCIpIHtcbiAgICAgICAgICAgICAgc2VnbWVudCArPSBcIiFcXFwiIyQlJicoKSorLFxcXFwtLi86Ozw9Pj9AW1xcXFxcXFxcXFxcXF1eX1x1MjAxOHt8fX5cIjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCJzcGFjZVwiKSBzZWdtZW50ICs9IFwiXFxcXHNcXHZcIjtcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwidXBwZXJcIikgc2VnbWVudCArPSBcIkEtWlwiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJ3b3JkXCIpIHNlZ21lbnQgKz0gXCJcXFxcd1wiO1xuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJ4ZGlnaXRcIikgc2VnbWVudCArPSBcIlxcXFxkQS1GYS1mXCI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gXCJdXCIgJiYgaW5SYW5nZSkge1xuICAgICAgICBpblJhbmdlID0gZmFsc2U7XG4gICAgICAgIHNlZ21lbnQgKz0gXCJdXCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5SYW5nZSkge1xuICAgICAgICBpZiAoZ2xvYltpXSA9PSBcIlxcXFxcIikge1xuICAgICAgICAgIHNlZ21lbnQgKz0gYFxcXFxcXFxcYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWdtZW50ICs9IGdsb2JbaV07XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZ2xvYltpXSA9PSBcIilcIiAmJiBncm91cFN0YWNrLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgZ3JvdXBTdGFja1tncm91cFN0YWNrLmxlbmd0aCAtIDFdICE9IFwiQlJBQ0VcIlxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnQgKz0gXCIpXCI7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBncm91cFN0YWNrLnBvcCgpITtcbiAgICAgICAgaWYgKHR5cGUgPT0gXCIhXCIpIHtcbiAgICAgICAgICBzZWdtZW50ICs9IHdpbGRjYXJkO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgIT0gXCJAXCIpIHtcbiAgICAgICAgICBzZWdtZW50ICs9IHR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgZ2xvYltpXSA9PSBcInxcIiAmJiBncm91cFN0YWNrLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgZ3JvdXBTdGFja1tncm91cFN0YWNrLmxlbmd0aCAtIDFdICE9IFwiQlJBQ0VcIlxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnQgKz0gXCJ8XCI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYltpXSA9PSBcIitcIiAmJiBleHRlbmRlZCAmJiBnbG9iW2kgKyAxXSA9PSBcIihcIikge1xuICAgICAgICBpKys7XG4gICAgICAgIGdyb3VwU3RhY2sucHVzaChcIitcIik7XG4gICAgICAgIHNlZ21lbnQgKz0gXCIoPzpcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IFwiQFwiICYmIGV4dGVuZGVkICYmIGdsb2JbaSArIDFdID09IFwiKFwiKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgZ3JvdXBTdGFjay5wdXNoKFwiQFwiKTtcbiAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gXCI/XCIpIHtcbiAgICAgICAgaWYgKGV4dGVuZGVkICYmIGdsb2JbaSArIDFdID09IFwiKFwiKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGdyb3VwU3RhY2sucHVzaChcIj9cIik7XG4gICAgICAgICAgc2VnbWVudCArPSBcIig/OlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZ21lbnQgKz0gXCIuXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IFwiIVwiICYmIGV4dGVuZGVkICYmIGdsb2JbaSArIDFdID09IFwiKFwiKSB7XG4gICAgICAgIGkrKztcbiAgICAgICAgZ3JvdXBTdGFjay5wdXNoKFwiIVwiKTtcbiAgICAgICAgc2VnbWVudCArPSBcIig/IVwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JbaV0gPT0gXCJ7XCIpIHtcbiAgICAgICAgZ3JvdXBTdGFjay5wdXNoKFwiQlJBQ0VcIik7XG4gICAgICAgIHNlZ21lbnQgKz0gXCIoPzpcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IFwifVwiICYmIGdyb3VwU3RhY2tbZ3JvdXBTdGFjay5sZW5ndGggLSAxXSA9PSBcIkJSQUNFXCIpIHtcbiAgICAgICAgZ3JvdXBTdGFjay5wb3AoKTtcbiAgICAgICAgc2VnbWVudCArPSBcIilcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IFwiLFwiICYmIGdyb3VwU3RhY2tbZ3JvdXBTdGFjay5sZW5ndGggLSAxXSA9PSBcIkJSQUNFXCIpIHtcbiAgICAgICAgc2VnbWVudCArPSBcInxcIjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iW2ldID09IFwiKlwiKSB7XG4gICAgICAgIGlmIChleHRlbmRlZCAmJiBnbG9iW2kgKyAxXSA9PSBcIihcIikge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgICBncm91cFN0YWNrLnB1c2goXCIqXCIpO1xuICAgICAgICAgIHNlZ21lbnQgKz0gXCIoPzpcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwcmV2Q2hhciA9IGdsb2JbaSAtIDFdO1xuICAgICAgICAgIGxldCBudW1TdGFycyA9IDE7XG4gICAgICAgICAgd2hpbGUgKGdsb2JbaSArIDFdID09IFwiKlwiKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBudW1TdGFycysrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXh0Q2hhciA9IGdsb2JbaSArIDFdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGdsb2JzdGFyT3B0aW9uICYmIG51bVN0YXJzID09IDIgJiZcbiAgICAgICAgICAgIFsuLi5zZXBzLCB1bmRlZmluZWRdLmluY2x1ZGVzKHByZXZDaGFyKSAmJlxuICAgICAgICAgICAgWy4uLnNlcHMsIHVuZGVmaW5lZF0uaW5jbHVkZXMobmV4dENoYXIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzZWdtZW50ICs9IGdsb2JzdGFyO1xuICAgICAgICAgICAgZW5kc1dpdGhTZXAgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWdtZW50ICs9IHdpbGRjYXJkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCArPSByZWdFeHBFc2NhcGVDaGFycy5pbmNsdWRlcyhnbG9iW2ldKSA/IGBcXFxcJHtnbG9iW2ldfWAgOiBnbG9iW2ldO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB1bmNsb3NlZCBncm91cHMgb3IgYSBkYW5nbGluZyBiYWNrc2xhc2guXG4gICAgaWYgKGdyb3VwU3RhY2subGVuZ3RoID4gMCB8fCBpblJhbmdlIHx8IGluRXNjYXBlKSB7XG4gICAgICAvLyBQYXJzZSBmYWlsdXJlLiBUYWtlIGFsbCBjaGFyYWN0ZXJzIGZyb20gdGhpcyBzZWdtZW50IGxpdGVyYWxseS5cbiAgICAgIHNlZ21lbnQgPSBcIlwiO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGdsb2Iuc2xpY2UoaiwgaSkpIHtcbiAgICAgICAgc2VnbWVudCArPSByZWdFeHBFc2NhcGVDaGFycy5pbmNsdWRlcyhjKSA/IGBcXFxcJHtjfWAgOiBjO1xuICAgICAgICBlbmRzV2l0aFNlcCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlZ0V4cFN0cmluZyArPSBzZWdtZW50O1xuICAgIGlmICghZW5kc1dpdGhTZXApIHtcbiAgICAgIHJlZ0V4cFN0cmluZyArPSBpIDwgZ2xvYi5sZW5ndGggPyBzZXAgOiBzZXBNYXliZTtcbiAgICAgIGVuZHNXaXRoU2VwID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUZXJtaW5hdGVzIHdpdGggYGlgIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBzZWdtZW50LlxuICAgIHdoaWxlIChzZXBzLmluY2x1ZGVzKGdsb2JbaV0pKSBpKys7XG5cbiAgICAvLyBDaGVjayB0aGF0IHRoZSBuZXh0IHZhbHVlIG9mIGBqYCBpcyBpbmRlZWQgaGlnaGVyIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAgaWYgKCEoaSA+IGopKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBc3NlcnRpb24gZmFpbHVyZTogaSA+IGogKHBvdGVudGlhbCBpbmZpbml0ZSBsb29wKVwiKTtcbiAgICB9XG4gICAgaiA9IGk7XG4gIH1cblxuICByZWdFeHBTdHJpbmcgPSBgXiR7cmVnRXhwU3RyaW5nfSRgO1xuICByZXR1cm4gbmV3IFJlZ0V4cChyZWdFeHBTdHJpbmcsIGNhc2VJbnNlbnNpdGl2ZSA/IFwiaVwiIDogXCJcIik7XG59XG5cbi8qKiBUZXN0IHdoZXRoZXIgdGhlIGdpdmVuIHN0cmluZyBpcyBhIGdsb2IgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0dsb2Ioc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgY2hhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IFwie1wiOiBcIn1cIiwgXCIoXCI6IFwiKVwiLCBcIltcIjogXCJdXCIgfTtcbiAgY29uc3QgcmVnZXggPVxuICAgIC9cXFxcKC4pfCheIXxcXCp8XFw/fFtcXF0uKyldXFw/fFxcW1teXFxcXFxcXV0rXFxdfFxce1teXFxcXH1dK1xcfXxcXChcXD9bOiE9XVteXFxcXCldK1xcKXxcXChbXnxdK1xcfFteXFxcXCldK1xcKSkvO1xuXG4gIGlmIChzdHIgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKSkpIHtcbiAgICBpZiAobWF0Y2hbMl0pIHJldHVybiB0cnVlO1xuICAgIGxldCBpZHggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcblxuICAgIC8vIGlmIGFuIG9wZW4gYnJhY2tldC9icmFjZS9wYXJlbiBpcyBlc2NhcGVkLFxuICAgIC8vIHNldCB0aGUgaW5kZXggdG8gdGhlIG5leHQgY2xvc2luZyBjaGFyYWN0ZXJcbiAgICBjb25zdCBvcGVuID0gbWF0Y2hbMV07XG4gICAgY29uc3QgY2xvc2UgPSBvcGVuID8gY2hhcnNbb3Blbl0gOiBudWxsO1xuICAgIGlmIChvcGVuICYmIGNsb3NlKSB7XG4gICAgICBjb25zdCBuID0gc3RyLmluZGV4T2YoY2xvc2UsIGlkeCk7XG4gICAgICBpZiAobiAhPT0gLTEpIHtcbiAgICAgICAgaWR4ID0gbiArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RyID0gc3RyLnNsaWNlKGlkeCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBMaWtlIG5vcm1hbGl6ZSgpLCBidXQgZG9lc24ndCBjb2xsYXBzZSBcIioqXFwvLi5cIiB3aGVuIGBnbG9ic3RhcmAgaXMgdHJ1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVHbG9iKFxuICBnbG9iOiBzdHJpbmcsXG4gIHsgZ2xvYnN0YXIgPSBmYWxzZSB9OiBHbG9iT3B0aW9ucyA9IHt9LFxuKTogc3RyaW5nIHtcbiAgaWYgKGdsb2IubWF0Y2goL1xcMC9nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR2xvYiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6IFwiJHtnbG9ifVwiYCk7XG4gIH1cbiAgaWYgKCFnbG9ic3Rhcikge1xuICAgIHJldHVybiBub3JtYWxpemUoZ2xvYik7XG4gIH1cbiAgY29uc3QgcyA9IFNFUF9QQVRURVJOLnNvdXJjZTtcbiAgY29uc3QgYmFkUGFyZW50UGF0dGVybiA9IG5ldyBSZWdFeHAoXG4gICAgYCg/PD0oJHtzfXxeKVxcXFwqXFxcXCoke3N9KVxcXFwuXFxcXC4oPz0ke3N9fCQpYCxcbiAgICBcImdcIixcbiAgKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZShnbG9iLnJlcGxhY2UoYmFkUGFyZW50UGF0dGVybiwgXCJcXDBcIikpLnJlcGxhY2UoL1xcMC9nLCBcIi4uXCIpO1xufVxuXG4vKiogTGlrZSBqb2luKCksIGJ1dCBkb2Vzbid0IGNvbGxhcHNlIFwiKipcXC8uLlwiIHdoZW4gYGdsb2JzdGFyYCBpcyB0cnVlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5HbG9icyhcbiAgZ2xvYnM6IHN0cmluZ1tdLFxuICB7IGV4dGVuZGVkID0gdHJ1ZSwgZ2xvYnN0YXIgPSBmYWxzZSB9OiBHbG9iT3B0aW9ucyA9IHt9LFxuKTogc3RyaW5nIHtcbiAgaWYgKCFnbG9ic3RhciB8fCBnbG9icy5sZW5ndGggPT0gMCkge1xuICAgIHJldHVybiBqb2luKC4uLmdsb2JzKTtcbiAgfVxuICBpZiAoZ2xvYnMubGVuZ3RoID09PSAwKSByZXR1cm4gXCIuXCI7XG4gIGxldCBqb2luZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBnbG9iIG9mIGdsb2JzKSB7XG4gICAgY29uc3QgcGF0aCA9IGdsb2I7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFqb2luZWQpIGpvaW5lZCA9IHBhdGg7XG4gICAgICBlbHNlIGpvaW5lZCArPSBgJHtTRVB9JHtwYXRofWA7XG4gICAgfVxuICB9XG4gIGlmICgham9pbmVkKSByZXR1cm4gXCIuXCI7XG4gIHJldHVybiBub3JtYWxpemVHbG9iKGpvaW5lZCwgeyBleHRlbmRlZCwgZ2xvYnN0YXIgfSk7XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCB0aGUgQnJvd3NlcmlmeSBhdXRob3JzLiBNSVQgTGljZW5zZS5cbi8vIFBvcnRlZCBtb3N0bHkgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkvXG5cbi8qKlxuICogVXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGggT1Mtc3BlY2lmaWMgZmlsZSBwYXRocy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpcyBicm93c2VyIGNvbXBhdGlibGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuLi9fdXRpbC9vcy50c1wiO1xuaW1wb3J0ICogYXMgX3dpbjMyIGZyb20gXCIuL3dpbjMyLnRzXCI7XG5pbXBvcnQgKiBhcyBfcG9zaXggZnJvbSBcIi4vcG9zaXgudHNcIjtcblxuY29uc3QgcGF0aCA9IGlzV2luZG93cyA/IF93aW4zMiA6IF9wb3NpeDtcblxuZXhwb3J0IGNvbnN0IHdpbjMyID0gX3dpbjMyO1xuZXhwb3J0IGNvbnN0IHBvc2l4ID0gX3Bvc2l4O1xuZXhwb3J0IGNvbnN0IHtcbiAgYmFzZW5hbWUsXG4gIGRlbGltaXRlcixcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgZm9ybWF0LFxuICBmcm9tRmlsZVVybCxcbiAgaXNBYnNvbHV0ZSxcbiAgam9pbixcbiAgbm9ybWFsaXplLFxuICBwYXJzZSxcbiAgcmVsYXRpdmUsXG4gIHJlc29sdmUsXG4gIHNlcCxcbiAgdG9GaWxlVXJsLFxuICB0b05hbWVzcGFjZWRQYXRoLFxufSA9IHBhdGg7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2NvbW1vbi50c1wiO1xuZXhwb3J0IHsgU0VQLCBTRVBfUEFUVEVSTiB9IGZyb20gXCIuL3NlcGFyYXRvci50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vX2ludGVyZmFjZS50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2xvYi50c1wiO1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBOb2RlLmpzIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbi8vIFRoZSBmb2xsb3dpbmcgYXJlIGFsbCB0aGUgcHJvY2VzcyBBUElzIHRoYXQgZG9uJ3QgZGVwZW5kIG9uIHRoZSBzdHJlYW0gbW9kdWxlXG4vLyBUaGV5IGhhdmUgdG8gYmUgc3BsaXQgdGhpcyB3YXkgdG8gcHJldmVudCBhIGNpcmN1bGFyIGRlcGVuZGVuY3lcblxuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSBcIi4uLy4uL191dGlsL29zLnRzXCI7XG5pbXBvcnQgeyBuZXh0VGljayBhcyBfbmV4dFRpY2sgfSBmcm9tIFwiLi4vX25leHRfdGljay50c1wiO1xuaW1wb3J0IHsgX2V4aXRpbmcgfSBmcm9tIFwiLi9leGl0aW5nLnRzXCI7XG5cbi8qKiBSZXR1cm5zIHRoZSBvcGVyYXRpbmcgc3lzdGVtIENQVSBhcmNoaXRlY3R1cmUgZm9yIHdoaWNoIHRoZSBEZW5vIGJpbmFyeSB3YXMgY29tcGlsZWQgKi9cbmZ1bmN0aW9uIF9hcmNoKCk6IHN0cmluZyB7XG4gIGlmIChEZW5vLmJ1aWxkLmFyY2ggPT0gXCJ4ODZfNjRcIikge1xuICAgIHJldHVybiBcIng2NFwiO1xuICB9IGVsc2UgaWYgKERlbm8uYnVpbGQuYXJjaCA9PSBcImFhcmNoNjRcIikge1xuICAgIHJldHVybiBcImFybTY0XCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3IoXCJ1bnJlYWNoYWJsZVwiKTtcbiAgfVxufVxuXG4vKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19wcm9jZXNzX2FyY2ggKi9cbmV4cG9ydCBjb25zdCBhcmNoID0gX2FyY2goKTtcblxuLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19jaGRpcl9kaXJlY3RvcnkgKi9cbmV4cG9ydCBjb25zdCBjaGRpciA9IERlbm8uY2hkaXI7XG5cbi8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfY3dkICovXG5leHBvcnQgY29uc3QgY3dkID0gRGVuby5jd2Q7XG5cbi8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfbmV4dHRpY2tfY2FsbGJhY2tfYXJncyAqL1xuZXhwb3J0IGNvbnN0IG5leHRUaWNrID0gX25leHRUaWNrO1xuXG5jb25zdCBPQkpFQ1RfUFJPVE9fUFJPUF9OQU1FUyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5wcm90b3R5cGUpO1xuLyoqXG4gKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfZW52XG4gKiBSZXF1aXJlcyBlbnYgcGVybWlzc2lvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVudjogSW5zdGFuY2VUeXBlPE9iamVjdENvbnN0cnVjdG9yPiAmIFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPVxuICBuZXcgUHJveHkoT2JqZWN0KCksIHtcbiAgICBnZXQ6ICh0YXJnZXQsIHByb3ApID0+IHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikge1xuICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbnZWYWx1ZSA9IERlbm8uZW52LmdldChwcm9wKTtcblxuICAgICAgaWYgKGVudlZhbHVlKSB7XG4gICAgICAgIHJldHVybiBlbnZWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKE9CSkVDVF9QUk9UT19QUk9QX05BTUVTLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnZWYWx1ZTtcbiAgICB9LFxuICAgIG93bktleXM6ICgpID0+IFJlZmxlY3Qub3duS2V5cyhEZW5vLmVudi50b09iamVjdCgpKSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IChfdGFyZ2V0LCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCBlID0gRGVuby5lbnYudG9PYmplY3QoKTtcbiAgICAgIGlmIChuYW1lIGluIERlbm8uZW52LnRvT2JqZWN0KCkpIHtcbiAgICAgICAgY29uc3QgbyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH07XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmUgd2UgZG8gd2FudCB0byBzZXQgaXQgb25seSB3aGVuIG5hbWUgaXMgb2YgdHlwZSBzdHJpbmdcbiAgICAgICAgICBvLnZhbHVlID0gZVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbztcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldChfdGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgRGVuby5lbnYuc2V0KFN0cmluZyhwcm9wKSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBoYXM6IChfdGFyZ2V0LCBwcm9wKSA9PiBSZWZsZWN0Lm93bktleXMoRGVuby5lbnYudG9PYmplY3QoKSkuaW5jbHVkZXMocHJvcCksXG4gIH0pO1xuXG4vKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19wcm9jZXNzX3BpZCAqL1xuZXhwb3J0IGNvbnN0IHBpZCA9IERlbm8ucGlkO1xuXG4vKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19wcm9jZXNzX3BsYXRmb3JtICovXG5leHBvcnQgY29uc3QgcGxhdGZvcm0gPSBpc1dpbmRvd3MgPyBcIndpbjMyXCIgOiBEZW5vLmJ1aWxkLm9zO1xuXG4vKipcbiAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc192ZXJzaW9uXG4gKlxuICogVGhpcyB2YWx1ZSBpcyBoYXJkIGNvZGVkIHRvIGxhdGVzdCBzdGFibGUgcmVsZWFzZSBvZiBOb2RlLCBhc1xuICogc29tZSBwYWNrYWdlcyBhcmUgY2hlY2tpbmcgaXQgZm9yIGNvbXBhdGliaWxpdHkuIFByZXZpb3VzbHlcbiAqIGl0IHBvaW50ZWQgdG8gRGVubyB2ZXJzaW9uLCBidXQgdGhhdCBsZWQgdG8gaW5jb21wYWJpbGl0eVxuICogd2l0aCBzb21lIHBhY2thZ2VzLlxuICovXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9IFwidjE2LjExLjFcIjtcblxuLyoqXG4gKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfdmVyc2lvbnNcbiAqXG4gKiBUaGlzIHZhbHVlIGlzIGhhcmQgY29kZWQgdG8gbGF0ZXN0IHN0YWJsZSByZWxlYXNlIG9mIE5vZGUsIGFzXG4gKiBzb21lIHBhY2thZ2VzIGFyZSBjaGVja2luZyBpdCBmb3IgY29tcGF0aWJpbGl0eS4gUHJldmlvdXNseVxuICogaXQgY29udGFpbmVkIG9ubHkgb3V0cHV0IG9mIGBEZW5vLnZlcnNpb25gLCBidXQgdGhhdCBsZWQgdG8gaW5jb21wYWJpbGl0eVxuICogd2l0aCBzb21lIHBhY2thZ2VzLiBWYWx1ZSBvZiBgdjhgIGZpZWxkIGlzIHN0aWxsIHRha2VuIGZyb20gYERlbm8udmVyc2lvbmAuXG4gKi9cbmV4cG9ydCBjb25zdCB2ZXJzaW9ucyA9IHtcbiAgbm9kZTogXCIxNi4xMS4xXCIsXG4gIHV2OiBcIjEuNDIuMFwiLFxuICB6bGliOiBcIjEuMi4xMVwiLFxuICBicm90bGk6IFwiMS4wLjlcIixcbiAgYXJlczogXCIxLjE3LjJcIixcbiAgbW9kdWxlczogXCI5M1wiLFxuICBuZ2h0dHAyOiBcIjEuNDUuMVwiLFxuICBuYXBpOiBcIjhcIixcbiAgbGxodHRwOiBcIjYuMC40XCIsXG4gIG9wZW5zc2w6IFwiMS4xLjFsXCIsXG4gIGNsZHI6IFwiMzkuMFwiLFxuICBpY3U6IFwiNjkuMVwiLFxuICB0ejogXCIyMDIxYVwiLFxuICB1bmljb2RlOiBcIjEzLjBcIixcbiAgLi4uRGVuby52ZXJzaW9uLFxufTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cblwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBrVVRGMTZTdXJyb2dhdGVUaHJlc2hvbGQgPSAweDEwMDAwOyAvLyAyICoqIDE2XG5jb25zdCBrRXNjYXBlID0gXCJcXHgxYlwiO1xuZXhwb3J0IGNvbnN0IGtTdWJzdHJpbmdTZWFyY2ggPSBTeW1ib2woXCJrU3Vic3RyaW5nU2VhcmNoXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gQ1NJKHN0cmluZ3MsIC4uLmFyZ3MpIHtcbiAgbGV0IHJldCA9IGAke2tFc2NhcGV9W2A7XG4gIGZvciAobGV0IG4gPSAwOyBuIDwgc3RyaW5ncy5sZW5ndGg7IG4rKykge1xuICAgIHJldCArPSBzdHJpbmdzW25dO1xuICAgIGlmIChuIDwgYXJncy5sZW5ndGgpIHtcbiAgICAgIHJldCArPSBhcmdzW25dO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5DU0kua0VzY2FwZSA9IGtFc2NhcGU7XG5DU0kua0NsZWFyVG9MaW5lQmVnaW5uaW5nID0gQ1NJYDFLYDtcbkNTSS5rQ2xlYXJUb0xpbmVFbmQgPSBDU0lgMEtgO1xuQ1NJLmtDbGVhckxpbmUgPSBDU0lgMktgO1xuQ1NJLmtDbGVhclNjcmVlbkRvd24gPSBDU0lgMEpgO1xuXG4vLyBUT0RPKEJyaWRnZUFSKTogVHJlYXQgY29tYmluZWQgY2hhcmFjdGVycyBhcyBzaW5nbGUgY2hhcmFjdGVyLCBpLmUsXG4vLyAnYVxcdTAzMDEnIGFuZCAnXFx1MDMwMWEnIChib3RoIGhhdmUgdGhlIHNhbWUgdmlzdWFsIG91dHB1dCkuXG4vLyBDaGVjayBDYW5vbmljYWxfQ29tYmluaW5nX0NsYXNzIGluXG4vLyBodHRwOi8vdXNlcmd1aWRlLmljdS1wcm9qZWN0Lm9yZy9zdHJpbmdzL3Byb3BlcnRpZXNcbmV4cG9ydCBmdW5jdGlvbiBjaGFyTGVuZ3RoTGVmdChzdHIsIGkpIHtcbiAgaWYgKGkgPD0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChcbiAgICAoaSA+IDEgJiZcbiAgICAgIHN0ci5jb2RlUG9pbnRBdChpIC0gMikgPj0ga1VURjE2U3Vycm9nYXRlVGhyZXNob2xkKSB8fFxuICAgIHN0ci5jb2RlUG9pbnRBdChpIC0gMSkgPj0ga1VURjE2U3Vycm9nYXRlVGhyZXNob2xkXG4gICkge1xuICAgIHJldHVybiAyO1xuICB9XG4gIHJldHVybiAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhckxlbmd0aEF0KHN0ciwgaSkge1xuICBpZiAoc3RyLmxlbmd0aCA8PSBpKSB7XG4gICAgLy8gUHJldGVuZCB0byBtb3ZlIHRvIHRoZSByaWdodC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXV0b2NvbXBsZXRlIHdoaWxlXG4gICAgLy8gbW92aW5nIHRvIHRoZSByaWdodC5cbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gc3RyLmNvZGVQb2ludEF0KGkpID49IGtVVEYxNlN1cnJvZ2F0ZVRocmVzaG9sZCA/IDIgOiAxO1xufVxuXG4vKlxuICBTb21lIHBhdHRlcm5zIHNlZW4gaW4gdGVybWluYWwga2V5IGVzY2FwZSBjb2RlcywgZGVyaXZlZCBmcm9tIGNvbWJvcyBzZWVuXG4gIGF0IGh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy9icm93c2VyL2xpYi90dHkva2V5LmNcblxuICBFU0MgbGV0dGVyXG4gIEVTQyBbIGxldHRlclxuICBFU0MgWyBtb2RpZmllciBsZXR0ZXJcbiAgRVNDIFsgMSA7IG1vZGlmaWVyIGxldHRlclxuICBFU0MgWyBudW0gY2hhclxuICBFU0MgWyBudW0gOyBtb2RpZmllciBjaGFyXG4gIEVTQyBPIGxldHRlclxuICBFU0MgTyBtb2RpZmllciBsZXR0ZXJcbiAgRVNDIE8gMSA7IG1vZGlmaWVyIGxldHRlclxuICBFU0MgTiBsZXR0ZXJcbiAgRVNDIFsgWyBudW0gOyBtb2RpZmllciBjaGFyXG4gIEVTQyBbIFsgMSA7IG1vZGlmaWVyIGxldHRlclxuICBFU0MgRVNDIFsgbnVtIGNoYXJcbiAgRVNDIEVTQyBPIGxldHRlclxuXG4gIC0gY2hhciBpcyB1c3VhbGx5IH4gYnV0ICQgYW5kIF4gYWxzbyBoYXBwZW4gd2l0aCByeHZ0XG4gIC0gbW9kaWZpZXIgaXMgMSArXG4gICAgICAgICAgICAgICAgKHNoaWZ0ICAgICAqIDEpICtcbiAgICAgICAgICAgICAgICAobGVmdF9hbHQgICogMikgK1xuICAgICAgICAgICAgICAgIChjdHJsICAgICAgKiA0KSArXG4gICAgICAgICAgICAgICAgKHJpZ2h0X2FsdCAqIDgpXG4gIC0gdHdvIGxlYWRpbmcgRVNDcyBhcHBhcmVudGx5IG1lYW4gdGhlIHNhbWUgYXMgb25lIGxlYWRpbmcgRVNDXG4qL1xuZXhwb3J0IGZ1bmN0aW9uKiBlbWl0S2V5cyhzdHJlYW0pIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBsZXQgY2ggPSB5aWVsZDtcbiAgICBsZXQgcyA9IGNoO1xuICAgIGxldCBlc2NhcGVkID0gZmFsc2U7XG4gICAgY29uc3Qga2V5ID0ge1xuICAgICAgc2VxdWVuY2U6IG51bGwsXG4gICAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgICBjdHJsOiBmYWxzZSxcbiAgICAgIG1ldGE6IGZhbHNlLFxuICAgICAgc2hpZnQ6IGZhbHNlLFxuICAgIH07XG5cbiAgICBpZiAoY2ggPT09IGtFc2NhcGUpIHtcbiAgICAgIGVzY2FwZWQgPSB0cnVlO1xuICAgICAgcyArPSBjaCA9IHlpZWxkO1xuXG4gICAgICBpZiAoY2ggPT09IGtFc2NhcGUpIHtcbiAgICAgICAgcyArPSBjaCA9IHlpZWxkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlc2NhcGVkICYmIChjaCA9PT0gXCJPXCIgfHwgY2ggPT09IFwiW1wiKSkge1xuICAgICAgLy8gQU5TSSBlc2NhcGUgc2VxdWVuY2VcbiAgICAgIGxldCBjb2RlID0gY2g7XG4gICAgICBsZXQgbW9kaWZpZXIgPSAwO1xuXG4gICAgICBpZiAoY2ggPT09IFwiT1wiKSB7XG4gICAgICAgIC8vIEVTQyBPIGxldHRlclxuICAgICAgICAvLyBFU0MgTyBtb2RpZmllciBsZXR0ZXJcbiAgICAgICAgcyArPSBjaCA9IHlpZWxkO1xuXG4gICAgICAgIGlmIChjaCA+PSBcIjBcIiAmJiBjaCA8PSBcIjlcIikge1xuICAgICAgICAgIG1vZGlmaWVyID0gKGNoID4+IDApIC0gMTtcbiAgICAgICAgICBzICs9IGNoID0geWllbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb2RlICs9IGNoO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCJbXCIpIHtcbiAgICAgICAgLy8gRVNDIFsgbGV0dGVyXG4gICAgICAgIC8vIEVTQyBbIG1vZGlmaWVyIGxldHRlclxuICAgICAgICAvLyBFU0MgWyBbIG1vZGlmaWVyIGxldHRlclxuICAgICAgICAvLyBFU0MgWyBbIG51bSBjaGFyXG4gICAgICAgIHMgKz0gY2ggPSB5aWVsZDtcblxuICAgICAgICBpZiAoY2ggPT09IFwiW1wiKSB7XG4gICAgICAgICAgLy8gXFx4MWJbW0FcbiAgICAgICAgICAvLyAgICAgIF4tLS0gZXNjYXBlIGNvZGVzIG1pZ2h0IGhhdmUgYSBzZWNvbmQgYnJhY2tldFxuICAgICAgICAgIGNvZGUgKz0gY2g7XG4gICAgICAgICAgcyArPSBjaCA9IHlpZWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICogSGVyZSBhbmQgbGF0ZXIgd2UgdHJ5IHRvIGJ1ZmZlciBqdXN0IGVub3VnaCBkYXRhIHRvIGdldFxuICAgICAgICAgKiBhIGNvbXBsZXRlIGFzY2lpIHNlcXVlbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBXZSBoYXZlIGJhc2ljYWxseSB0d28gY2xhc3NlcyBvZiBhc2NpaSBjaGFyYWN0ZXJzIHRvIHByb2Nlc3M6XG4gICAgICAgICAqXG4gICAgICAgICAqXG4gICAgICAgICAqIDEuIGBcXHgxYlsyNDs1fmAgc2hvdWxkIGJlIHBhcnNlZCBhcyB7IGNvZGU6ICdbMjR+JywgbW9kaWZpZXI6IDUgfVxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHBhcnRpY3VsYXIgZXhhbXBsZSBpcyBmZWF0dXJpbmcgQ3RybCtGMTIgaW4geHRlcm0uXG4gICAgICAgICAqXG4gICAgICAgICAqICAtIGA7NWAgcGFydCBpcyBvcHRpb25hbCwgZS5nLiBpdCBjb3VsZCBiZSBgXFx4MWJbMjR+YFxuICAgICAgICAgKiAgLSBmaXJzdCBwYXJ0IGNhbiBjb250YWluIG9uZSBvciB0d28gZGlnaXRzXG4gICAgICAgICAqXG4gICAgICAgICAqIFNvIHRoZSBnZW5lcmljIHJlZ2V4cCBpcyBsaWtlIC9eXFxkXFxkPyg7XFxkKT9bfl4kXSQvXG4gICAgICAgICAqXG4gICAgICAgICAqXG4gICAgICAgICAqIDIuIGBcXHgxYlsxOzVIYCBzaG91bGQgYmUgcGFyc2VkIGFzIHsgY29kZTogJ1tIJywgbW9kaWZpZXI6IDUgfVxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHBhcnRpY3VsYXIgZXhhbXBsZSBpcyBmZWF0dXJpbmcgQ3RybCtIb21lIGluIHh0ZXJtLlxuICAgICAgICAgKlxuICAgICAgICAgKiAgLSBgMTs1YCBwYXJ0IGlzIG9wdGlvbmFsLCBlLmcuIGl0IGNvdWxkIGJlIGBcXHgxYltIYFxuICAgICAgICAgKiAgLSBgMTtgIHBhcnQgaXMgb3B0aW9uYWwsIGUuZy4gaXQgY291bGQgYmUgYFxceDFiWzVIYFxuICAgICAgICAgKlxuICAgICAgICAgKiBTbyB0aGUgZ2VuZXJpYyByZWdleHAgaXMgbGlrZSAvXigoXFxkOyk/XFxkKT9bQS1aYS16XSQvXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBjbWRTdGFydCA9IHMubGVuZ3RoIC0gMTtcblxuICAgICAgICAvLyBTa2lwIG9uZSBvciB0d28gbGVhZGluZyBkaWdpdHNcbiAgICAgICAgaWYgKGNoID49IFwiMFwiICYmIGNoIDw9IFwiOVwiKSB7XG4gICAgICAgICAgcyArPSBjaCA9IHlpZWxkO1xuXG4gICAgICAgICAgaWYgKGNoID49IFwiMFwiICYmIGNoIDw9IFwiOVwiKSB7XG4gICAgICAgICAgICBzICs9IGNoID0geWllbGQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2tpcCBtb2RpZmllclxuICAgICAgICBpZiAoY2ggPT09IFwiO1wiKSB7XG4gICAgICAgICAgcyArPSBjaCA9IHlpZWxkO1xuXG4gICAgICAgICAgaWYgKGNoID49IFwiMFwiICYmIGNoIDw9IFwiOVwiKSB7XG4gICAgICAgICAgICBzICs9IHlpZWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAqIFdlIGJ1ZmZlcmVkIGVub3VnaCBkYXRhLCBub3cgdHJ5aW5nIHRvIGV4dHJhY3QgY29kZVxuICAgICAgICAgKiBhbmQgbW9kaWZpZXIgZnJvbSBpdFxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgY21kID0gcy5zbGljZShjbWRTdGFydCk7XG4gICAgICAgIGxldCBtYXRjaDtcblxuICAgICAgICBpZiAoKG1hdGNoID0gY21kLm1hdGNoKC9eKFxcZFxcZD8pKDsoXFxkKSk/KFt+XiRdKSQvKSkpIHtcbiAgICAgICAgICBjb2RlICs9IG1hdGNoWzFdICsgbWF0Y2hbNF07XG4gICAgICAgICAgbW9kaWZpZXIgPSAobWF0Y2hbM10gfHwgMSkgLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIChtYXRjaCA9IGNtZC5tYXRjaCgvXigoXFxkOyk/KFxcZCkpPyhbQS1aYS16XSkkLykpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvZGUgKz0gbWF0Y2hbNF07XG4gICAgICAgICAgbW9kaWZpZXIgPSAobWF0Y2hbM10gfHwgMSkgLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvZGUgKz0gY21kO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFBhcnNlIHRoZSBrZXkgbW9kaWZpZXJcbiAgICAgIGtleS5jdHJsID0gISEobW9kaWZpZXIgJiA0KTtcbiAgICAgIGtleS5tZXRhID0gISEobW9kaWZpZXIgJiAxMCk7XG4gICAgICBrZXkuc2hpZnQgPSAhIShtb2RpZmllciAmIDEpO1xuICAgICAga2V5LmNvZGUgPSBjb2RlO1xuXG4gICAgICAvLyBQYXJzZSB0aGUga2V5IGl0c2VsZlxuICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIC8qIHh0ZXJtL2dub21lIEVTQyBbIGxldHRlciAod2l0aCBtb2RpZmllcikgKi9cbiAgICAgICAgY2FzZSBcIltQXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImYxXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbUVwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJmMlwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiW1JcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZjNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIltTXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImY0XCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyogeHRlcm0vZ25vbWUgRVNDIE8gbGV0dGVyICh3aXRob3V0IG1vZGlmaWVyKSAqL1xuXG4gICAgICAgIGNhc2UgXCJPUFwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJmMVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiT1FcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZjJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk9SXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImYzXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJPU1wiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJmNFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIHh0ZXJtL3J4dnQgRVNDIFsgbnVtYmVyIH4gKi9cblxuICAgICAgICBjYXNlIFwiWzExflwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJmMVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiWzEyflwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJmMlwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiWzEzflwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJmM1wiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiWzE0flwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJmNFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIGZyb20gQ3lnd2luIGFuZCB1c2VkIGluIGxpYnV2ICovXG5cbiAgICAgICAgY2FzZSBcIltbQVwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJmMVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiW1tCXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImYyXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbW0NcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZjNcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIltbRFwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJmNFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiW1tFXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImY1XCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyogY29tbW9uICovXG5cbiAgICAgICAgY2FzZSBcIlsxNX5cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZjVcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlsxN35cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZjZcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlsxOH5cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZjdcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlsxOX5cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZjhcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlsyMH5cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZjlcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlsyMX5cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZjEwXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbMjN+XCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImYxMVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiWzI0flwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJmMTJcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICAvKiB4dGVybSBFU0MgWyBsZXR0ZXIgKi9cblxuICAgICAgICBjYXNlIFwiW0FcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwidXBcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIltCXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImRvd25cIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIltDXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcInJpZ2h0XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbRFwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJsZWZ0XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbRVwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJjbGVhclwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiW0ZcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZW5kXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbSFwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJob21lXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyogeHRlcm0vZ25vbWUgRVNDIE8gbGV0dGVyICovXG5cbiAgICAgICAgY2FzZSBcIk9BXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcInVwXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJPQlwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJkb3duXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJPQ1wiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJyaWdodFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiT0RcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwibGVmdFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiT0VcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiY2xlYXJcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk9GXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImVuZFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiT0hcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiaG9tZVwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIHh0ZXJtL3J4dnQgRVNDIFsgbnVtYmVyIH4gKi9cblxuICAgICAgICBjYXNlIFwiWzF+XCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImhvbWVcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlsyflwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJpbnNlcnRcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlszflwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJkZWxldGVcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIls0flwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJlbmRcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIls1flwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJwYWdldXBcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIls2flwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJwYWdlZG93blwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIHB1dHR5ICovXG5cbiAgICAgICAgY2FzZSBcIltbNX5cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwicGFnZXVwXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbWzZ+XCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcInBhZ2Vkb3duXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyogcnh2dCAqL1xuXG4gICAgICAgIGNhc2UgXCJbN35cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiaG9tZVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiWzh+XCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImVuZFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIHJ4dnQga2V5cyB3aXRoIG1vZGlmaWVycyAqL1xuXG4gICAgICAgIGNhc2UgXCJbYVwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJ1cFwiO1xuICAgICAgICAgIGtleS5zaGlmdCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbYlwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJkb3duXCI7XG4gICAgICAgICAga2V5LnNoaWZ0ID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIltjXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcInJpZ2h0XCI7XG4gICAgICAgICAga2V5LnNoaWZ0ID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIltkXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImxlZnRcIjtcbiAgICAgICAgICBrZXkuc2hpZnQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiW2VcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiY2xlYXJcIjtcbiAgICAgICAgICBrZXkuc2hpZnQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJbMiRcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiaW5zZXJ0XCI7XG4gICAgICAgICAga2V5LnNoaWZ0ID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlszJFwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJkZWxldGVcIjtcbiAgICAgICAgICBrZXkuc2hpZnQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiWzUkXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcInBhZ2V1cFwiO1xuICAgICAgICAgIGtleS5zaGlmdCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbNiRcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwicGFnZWRvd25cIjtcbiAgICAgICAgICBrZXkuc2hpZnQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiWzckXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImhvbWVcIjtcbiAgICAgICAgICBrZXkuc2hpZnQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiWzgkXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImVuZFwiO1xuICAgICAgICAgIGtleS5zaGlmdCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIk9hXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcInVwXCI7XG4gICAgICAgICAga2V5LmN0cmwgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiT2JcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiZG93blwiO1xuICAgICAgICAgIGtleS5jdHJsID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk9jXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcInJpZ2h0XCI7XG4gICAgICAgICAga2V5LmN0cmwgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiT2RcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwibGVmdFwiO1xuICAgICAgICAgIGtleS5jdHJsID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk9lXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImNsZWFyXCI7XG4gICAgICAgICAga2V5LmN0cmwgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJbMl5cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiaW5zZXJ0XCI7XG4gICAgICAgICAga2V5LmN0cmwgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiWzNeXCI6XG4gICAgICAgICAga2V5Lm5hbWUgPSBcImRlbGV0ZVwiO1xuICAgICAgICAgIGtleS5jdHJsID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIls1XlwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJwYWdldXBcIjtcbiAgICAgICAgICBrZXkuY3RybCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbNl5cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwicGFnZWRvd25cIjtcbiAgICAgICAgICBrZXkuY3RybCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJbN15cIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwiaG9tZVwiO1xuICAgICAgICAgIGtleS5jdHJsID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIls4XlwiOlxuICAgICAgICAgIGtleS5uYW1lID0gXCJlbmRcIjtcbiAgICAgICAgICBrZXkuY3RybCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLyogbWlzYy4gKi9cblxuICAgICAgICBjYXNlIFwiW1pcIjpcbiAgICAgICAgICBrZXkubmFtZSA9IFwidGFiXCI7XG4gICAgICAgICAga2V5LnNoaWZ0ID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBrZXkubmFtZSA9IFwidW5kZWZpbmVkXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJcXHJcIikge1xuICAgICAgLy8gY2FycmlhZ2UgcmV0dXJuXG4gICAgICBrZXkubmFtZSA9IFwicmV0dXJuXCI7XG4gICAgICBrZXkubWV0YSA9IGVzY2FwZWQ7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJcXG5cIikge1xuICAgICAgLy8gRW50ZXIsIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGxpbmVmZWVkXG4gICAgICBrZXkubmFtZSA9IFwiZW50ZXJcIjtcbiAgICAgIGtleS5tZXRhID0gZXNjYXBlZDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcIlxcdFwiKSB7XG4gICAgICAvLyB0YWJcbiAgICAgIGtleS5uYW1lID0gXCJ0YWJcIjtcbiAgICAgIGtleS5tZXRhID0gZXNjYXBlZDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcIlxcYlwiIHx8IGNoID09PSBcIlxceDdmXCIpIHtcbiAgICAgIC8vIGJhY2tzcGFjZSBvciBjdHJsK2hcbiAgICAgIGtleS5uYW1lID0gXCJiYWNrc3BhY2VcIjtcbiAgICAgIGtleS5tZXRhID0gZXNjYXBlZDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBrRXNjYXBlKSB7XG4gICAgICAvLyBlc2NhcGUga2V5XG4gICAgICBrZXkubmFtZSA9IFwiZXNjYXBlXCI7XG4gICAgICBrZXkubWV0YSA9IGVzY2FwZWQ7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCIgXCIpIHtcbiAgICAgIGtleS5uYW1lID0gXCJzcGFjZVwiO1xuICAgICAga2V5Lm1ldGEgPSBlc2NhcGVkO1xuICAgIH0gZWxzZSBpZiAoIWVzY2FwZWQgJiYgY2ggPD0gXCJcXHgxYVwiKSB7XG4gICAgICAvLyBjdHJsK2xldHRlclxuICAgICAga2V5Lm5hbWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuICAgICAgICBjaC5jaGFyQ29kZUF0KCkgKyBcImFcIi5jaGFyQ29kZUF0KCkgLSAxLFxuICAgICAgKTtcbiAgICAgIGtleS5jdHJsID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKC9eWzAtOUEtWmEtel0kLy50ZXN0KGNoKSkge1xuICAgICAgLy8gTGV0dGVyLCBudW1iZXIsIHNoaWZ0K2xldHRlclxuICAgICAga2V5Lm5hbWUgPSBjaC50b0xvd2VyQ2FzZSgpO1xuICAgICAga2V5LnNoaWZ0ID0gL15bQS1aXSQvLnRlc3QoY2gpO1xuICAgICAga2V5Lm1ldGEgPSBlc2NhcGVkO1xuICAgIH0gZWxzZSBpZiAoZXNjYXBlZCkge1xuICAgICAgLy8gRXNjYXBlIHNlcXVlbmNlIHRpbWVvdXRcbiAgICAgIGtleS5uYW1lID0gY2gubGVuZ3RoID8gdW5kZWZpbmVkIDogXCJlc2NhcGVcIjtcbiAgICAgIGtleS5tZXRhID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBrZXkuc2VxdWVuY2UgPSBzO1xuXG4gICAgaWYgKHMubGVuZ3RoICE9PSAwICYmIChrZXkubmFtZSAhPT0gdW5kZWZpbmVkIHx8IGVzY2FwZWQpKSB7XG4gICAgICAvKiBOYW1lZCBjaGFyYWN0ZXIgb3Igc2VxdWVuY2UgKi9cbiAgICAgIHN0cmVhbS5lbWl0KFwia2V5cHJlc3NcIiwgZXNjYXBlZCA/IHVuZGVmaW5lZCA6IHMsIGtleSk7XG4gICAgfSBlbHNlIGlmIChjaGFyTGVuZ3RoQXQocywgMCkgPT09IHMubGVuZ3RoKSB7XG4gICAgICAvKiBTaW5nbGUgdW5uYW1lZCBjaGFyYWN0ZXIsIGUuZy4gXCIuXCIgKi9cbiAgICAgIHN0cmVhbS5lbWl0KFwia2V5cHJlc3NcIiwgcywga2V5KTtcbiAgICB9XG4gICAgLyogVW5yZWNvZ25pemVkIG9yIGJyb2tlbiBlc2NhcGUgc2VxdWVuY2UsIGRvbid0IGVtaXQgYW55dGhpbmcgKi9cbiAgfVxufVxuXG4vLyBUaGlzIHJ1bnMgaW4gTyhuIGxvZyBuKS5cbmV4cG9ydCBmdW5jdGlvbiBjb21tb25QcmVmaXgoc3RyaW5ncykge1xuICBpZiAoc3RyaW5ncy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gc3RyaW5nc1swXTtcbiAgfVxuICBjb25zdCBzb3J0ZWQgPSBzdHJpbmdzLnNsaWNlKCkuc29ydCgpO1xuICBjb25zdCBtaW4gPSBzb3J0ZWRbMF07XG4gIGNvbnN0IG1heCA9IHNvcnRlZFtzb3J0ZWQubGVuZ3RoIC0gMV07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWluLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG1pbltpXSAhPT0gbWF4W2ldKSB7XG4gICAgICByZXR1cm4gbWluLnNsaWNlKDAsIGkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWluO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIENTSSxcbiAgY2hhckxlbmd0aEF0LFxuICBjaGFyTGVuZ3RoTGVmdCxcbiAgZW1pdEtleXMsXG4gIGNvbW1vblByZWZpeCxcbiAga1N1YnN0cmluZ1NlYXJjaCxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5cInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRVJSX0lOVkFMSURfQVJHX1ZBTFVFLCBFUlJfSU5WQUxJRF9DVVJTT1JfUE9TIH0gZnJvbSBcIi4uL2Vycm9ycy50c1wiO1xuXG5pbXBvcnQgeyB2YWxpZGF0ZUNhbGxiYWNrIH0gZnJvbSBcIi4uL3ZhbGlkYXRvcnMubWpzXCI7XG5cbmltcG9ydCB7IENTSSB9IGZyb20gXCIuL3V0aWxzLm1qc1wiO1xuXG5jb25zdCB7XG4gIGtDbGVhckxpbmUsXG4gIGtDbGVhclNjcmVlbkRvd24sXG4gIGtDbGVhclRvTGluZUJlZ2lubmluZyxcbiAga0NsZWFyVG9MaW5lRW5kLFxufSA9IENTSTtcblxuLyoqXG4gKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSB4IGFuZCB5IGNvb3JkaW5hdGUgb24gdGhlIGdpdmVuIHN0cmVhbVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjdXJzb3JUbyhzdHJlYW0sIHgsIHksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdGVDYWxsYmFjayhjYWxsYmFjayk7XG4gIH1cblxuICBpZiAodHlwZW9mIHkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNhbGxiYWNrID0geTtcbiAgICB5ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKE51bWJlci5pc05hTih4KSkgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShcInhcIiwgeCk7XG4gIGlmIChOdW1iZXIuaXNOYU4oeSkpIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUoXCJ5XCIsIHkpO1xuXG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAodHlwZW9mIHggIT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHkgIT09IFwibnVtYmVyXCIpKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBudWxsKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgeCAhPT0gXCJudW1iZXJcIikgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0NVUlNPUl9QT1MoKTtcblxuICBjb25zdCBkYXRhID0gdHlwZW9mIHkgIT09IFwibnVtYmVyXCIgPyBDU0lgJHt4ICsgMX1HYCA6IENTSWAke3kgKyAxfTske3ggKyAxfUhgO1xuICByZXR1cm4gc3RyZWFtLndyaXRlKGRhdGEsIGNhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBtb3ZlcyB0aGUgY3Vyc29yIHJlbGF0aXZlIHRvIGl0cyBjdXJyZW50IGxvY2F0aW9uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdmVDdXJzb3Ioc3RyZWFtLCBkeCwgZHksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdGVDYWxsYmFjayhjYWxsYmFjayk7XG4gIH1cblxuICBpZiAoc3RyZWFtID09IG51bGwgfHwgIShkeCB8fCBkeSkpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG51bGwpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGV0IGRhdGEgPSBcIlwiO1xuXG4gIGlmIChkeCA8IDApIHtcbiAgICBkYXRhICs9IENTSWAkey1keH1EYDtcbiAgfSBlbHNlIGlmIChkeCA+IDApIHtcbiAgICBkYXRhICs9IENTSWAke2R4fUNgO1xuICB9XG5cbiAgaWYgKGR5IDwgMCkge1xuICAgIGRhdGEgKz0gQ1NJYCR7LWR5fUFgO1xuICB9IGVsc2UgaWYgKGR5ID4gMCkge1xuICAgIGRhdGEgKz0gQ1NJYCR7ZHl9QmA7XG4gIH1cblxuICByZXR1cm4gc3RyZWFtLndyaXRlKGRhdGEsIGNhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBjbGVhcnMgdGhlIGN1cnJlbnQgbGluZSB0aGUgY3Vyc29yIGlzIG9uOlxuICogICAtMSBmb3IgbGVmdCBvZiB0aGUgY3Vyc29yXG4gKiAgICsxIGZvciByaWdodCBvZiB0aGUgY3Vyc29yXG4gKiAgICAwIGZvciB0aGUgZW50aXJlIGxpbmVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJMaW5lKHN0cmVhbSwgZGlyLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRlQ2FsbGJhY2soY2FsbGJhY2spO1xuICB9XG5cbiAgaWYgKHN0cmVhbSA9PT0gbnVsbCB8fCBzdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbnVsbCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCB0eXBlID0gZGlyIDwgMFxuICAgID8ga0NsZWFyVG9MaW5lQmVnaW5uaW5nXG4gICAgOiBkaXIgPiAwXG4gICAgPyBrQ2xlYXJUb0xpbmVFbmRcbiAgICA6IGtDbGVhckxpbmU7XG4gIHJldHVybiBzdHJlYW0ud3JpdGUodHlwZSwgY2FsbGJhY2spO1xufVxuXG4vKipcbiAqIGNsZWFycyB0aGUgc2NyZWVuIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGN1cnNvciBkb3duXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU2NyZWVuRG93bihzdHJlYW0sIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdGVDYWxsYmFjayhjYWxsYmFjayk7XG4gIH1cblxuICBpZiAoc3RyZWFtID09PSBudWxsIHx8IHN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBudWxsKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzdHJlYW0ud3JpdGUoa0NsZWFyU2NyZWVuRG93biwgY2FsbGJhY2spO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiLi4vLi4vYnVmZmVyLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBfdWludDhBcnJheVRvQnVmZmVyKGNodW5rOiBVaW50OEFycmF5KSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICBjaHVuay5idWZmZXIsXG4gICAgY2h1bmsuYnl0ZU9mZnNldCxcbiAgICBjaHVuay5ieXRlTGVuZ3RoLFxuICApO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50IGFuZCBOb2RlIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBkZW5vLWxpbnQtaWdub3JlLWZpbGVcblxuaW1wb3J0IHsgQWJvcnRFcnJvciwgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UgfSBmcm9tIFwiLi4vZXJyb3JzLnRzXCI7XG5pbXBvcnQgeyBvbmNlIH0gZnJvbSBcIi4uL3V0aWwubWpzXCI7XG5pbXBvcnQge1xuICB2YWxpZGF0ZUFib3J0U2lnbmFsLFxuICB2YWxpZGF0ZUZ1bmN0aW9uLFxuICB2YWxpZGF0ZU9iamVjdCxcbn0gZnJvbSBcIi4uL3ZhbGlkYXRvcnMubWpzXCI7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gXCIuLi8uLi9fcHJvY2Vzcy9wcm9jZXNzLnRzXCI7XG5cbmZ1bmN0aW9uIGlzUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIHN0cmVhbS5zZXRIZWFkZXIgJiYgdHlwZW9mIHN0cmVhbS5hYm9ydCA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBpc1NlcnZlclJlc3BvbnNlKHN0cmVhbSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBzdHJlYW0uX3NlbnQxMDAgPT09IFwiYm9vbGVhblwiICYmXG4gICAgdHlwZW9mIHN0cmVhbS5fcmVtb3ZlZENvbm5lY3Rpb24gPT09IFwiYm9vbGVhblwiICYmXG4gICAgdHlwZW9mIHN0cmVhbS5fcmVtb3ZlZENvbnRMZW4gPT09IFwiYm9vbGVhblwiICYmXG4gICAgdHlwZW9mIHN0cmVhbS5fcmVtb3ZlZFRFID09PSBcImJvb2xlYW5cIiAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX2Nsb3NlZCA9PT0gXCJib29sZWFuXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZShzdHJlYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiBzdHJlYW0ucmVhZGFibGUgPT09IFwiYm9vbGVhblwiIHx8XG4gICAgdHlwZW9mIHN0cmVhbS5yZWFkYWJsZUVuZGVkID09PSBcImJvb2xlYW5cIiB8fFxuICAgICEhc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xufVxuXG5mdW5jdGlvbiBpc1dyaXRhYmxlKHN0cmVhbSkge1xuICByZXR1cm4gdHlwZW9mIHN0cmVhbS53cml0YWJsZSA9PT0gXCJib29sZWFuXCIgfHxcbiAgICB0eXBlb2Ygc3RyZWFtLndyaXRhYmxlRW5kZWQgPT09IFwiYm9vbGVhblwiIHx8XG4gICAgISFzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG59XG5cbmZ1bmN0aW9uIGlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbS53cml0YWJsZUZpbmlzaGVkKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICBpZiAoIXdTdGF0ZSB8fCB3U3RhdGUuZXJyb3JlZCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gd1N0YXRlLmZpbmlzaGVkIHx8ICh3U3RhdGUuZW5kZWQgJiYgd1N0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5cbmNvbnN0IG5vcCA9ICgpID0+IHt9O1xuXG5mdW5jdGlvbiBpc1JlYWRhYmxlRW5kZWQoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW0ucmVhZGFibGVFbmRlZCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgaWYgKCFyU3RhdGUgfHwgclN0YXRlLmVycm9yZWQpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHJTdGF0ZS5lbmRFbWl0dGVkIHx8IChyU3RhdGUuZW5kZWQgJiYgclN0YXRlLmxlbmd0aCA9PT0gMCk7XG59XG5cbmZ1bmN0aW9uIGVvcyhzdHJlYW0sIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfSBlbHNlIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICBvcHRpb25zID0ge307XG4gIH0gZWxzZSB7XG4gICAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgXCJvcHRpb25zXCIpO1xuICB9XG4gIHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2ssIFwiY2FsbGJhY2tcIik7XG4gIHZhbGlkYXRlQWJvcnRTaWduYWwob3B0aW9ucy5zaWduYWwsIFwib3B0aW9ucy5zaWduYWxcIik7XG5cbiAgY2FsbGJhY2sgPSBvbmNlKGNhbGxiYWNrKTtcblxuICBjb25zdCByZWFkYWJsZSA9IG9wdGlvbnMucmVhZGFibGUgfHxcbiAgICAob3B0aW9ucy5yZWFkYWJsZSAhPT0gZmFsc2UgJiYgaXNSZWFkYWJsZShzdHJlYW0pKTtcbiAgY29uc3Qgd3JpdGFibGUgPSBvcHRpb25zLndyaXRhYmxlIHx8XG4gICAgKG9wdGlvbnMud3JpdGFibGUgIT09IGZhbHNlICYmIGlzV3JpdGFibGUoc3RyZWFtKSk7XG5cbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGNvbnN0IHN0YXRlID0gd1N0YXRlIHx8IHJTdGF0ZTtcblxuICBjb25zdCBvbmxlZ2FjeWZpbmlzaCA9ICgpID0+IHtcbiAgICBpZiAoIXN0cmVhbS53cml0YWJsZSkgb25maW5pc2goKTtcbiAgfTtcblxuICAvLyBUT0RPIChyb25hZyk6IEltcHJvdmUgc29mdCBkZXRlY3Rpb24gdG8gaW5jbHVkZSBjb3JlIG1vZHVsZXMgYW5kXG4gIC8vIGNvbW1vbiBlY29zeXN0ZW0gbW9kdWxlcyB0aGF0IGRvIHByb3Blcmx5IGVtaXQgJ2Nsb3NlJyBidXQgZmFpbFxuICAvLyB0aGlzIGdlbmVyaWMgY2hlY2suXG4gIGxldCB3aWxsRW1pdENsb3NlID0gaXNTZXJ2ZXJSZXNwb25zZShzdHJlYW0pIHx8IChcbiAgICBzdGF0ZSAmJlxuICAgIHN0YXRlLmF1dG9EZXN0cm95ICYmXG4gICAgc3RhdGUuZW1pdENsb3NlICYmXG4gICAgc3RhdGUuY2xvc2VkID09PSBmYWxzZSAmJlxuICAgIGlzUmVhZGFibGUoc3RyZWFtKSA9PT0gcmVhZGFibGUgJiZcbiAgICBpc1dyaXRhYmxlKHN0cmVhbSkgPT09IHdyaXRhYmxlXG4gICk7XG5cbiAgbGV0IHdyaXRhYmxlRmluaXNoZWQgPSBzdHJlYW0ud3JpdGFibGVGaW5pc2hlZCB8fFxuICAgICh3U3RhdGUgJiYgd1N0YXRlLmZpbmlzaGVkKTtcbiAgY29uc3Qgb25maW5pc2ggPSAoKSA9PiB7XG4gICAgd3JpdGFibGVGaW5pc2hlZCA9IHRydWU7XG4gICAgLy8gU3RyZWFtIHNob3VsZCBub3QgYmUgZGVzdHJveWVkIGhlcmUuIElmIGl0IGlzIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHVzZXIgc3BhY2UgaXMgZG9pbmcgc29tZXRoaW5nIGRpZmZlcmVudGx5IGFuZFxuICAgIC8vIHdlIGNhbm5vdCB0cnVzdCB3aWxsRW1pdENsb3NlLlxuICAgIGlmIChzdHJlYW0uZGVzdHJveWVkKSB3aWxsRW1pdENsb3NlID0gZmFsc2U7XG5cbiAgICBpZiAod2lsbEVtaXRDbG9zZSAmJiAoIXN0cmVhbS5yZWFkYWJsZSB8fCByZWFkYWJsZSkpIHJldHVybjtcbiAgICBpZiAoIXJlYWRhYmxlIHx8IHJlYWRhYmxlRW5kZWQpIGNhbGxiYWNrLmNhbGwoc3RyZWFtKTtcbiAgfTtcblxuICBsZXQgcmVhZGFibGVFbmRlZCA9IHN0cmVhbS5yZWFkYWJsZUVuZGVkIHx8XG4gICAgKHJTdGF0ZSAmJiByU3RhdGUuZW5kRW1pdHRlZCk7XG4gIGNvbnN0IG9uZW5kID0gKCkgPT4ge1xuICAgIHJlYWRhYmxlRW5kZWQgPSB0cnVlO1xuICAgIC8vIFN0cmVhbSBzaG91bGQgbm90IGJlIGRlc3Ryb3llZCBoZXJlLiBJZiBpdCBpcyB0aGF0XG4gICAgLy8gbWVhbnMgdGhhdCB1c2VyIHNwYWNlIGlzIGRvaW5nIHNvbWV0aGluZyBkaWZmZXJlbnRseSBhbmRcbiAgICAvLyB3ZSBjYW5ub3QgdHJ1c3Qgd2lsbEVtaXRDbG9zZS5cbiAgICBpZiAoc3RyZWFtLmRlc3Ryb3llZCkgd2lsbEVtaXRDbG9zZSA9IGZhbHNlO1xuXG4gICAgaWYgKHdpbGxFbWl0Q2xvc2UgJiYgKCFzdHJlYW0ud3JpdGFibGUgfHwgd3JpdGFibGUpKSByZXR1cm47XG4gICAgaWYgKCF3cml0YWJsZSB8fCB3cml0YWJsZUZpbmlzaGVkKSBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG5cbiAgY29uc3Qgb25lcnJvciA9IChlcnIpID0+IHtcbiAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSwgZXJyKTtcbiAgfTtcblxuICBjb25zdCBvbmNsb3NlID0gKCkgPT4ge1xuICAgIGlmIChyZWFkYWJsZSAmJiAhcmVhZGFibGVFbmRlZCkge1xuICAgICAgaWYgKCFpc1JlYWRhYmxlRW5kZWQoc3RyZWFtKSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdyaXRhYmxlICYmICF3cml0YWJsZUZpbmlzaGVkKSB7XG4gICAgICBpZiAoIWlzV3JpdGFibGVGaW5pc2hlZChzdHJlYW0pKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHN0cmVhbSwgbmV3IEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYWxsYmFjay5jYWxsKHN0cmVhbSk7XG4gIH07XG5cbiAgY29uc3Qgb25yZXF1ZXN0ID0gKCkgPT4ge1xuICAgIHN0cmVhbS5yZXEub24oXCJmaW5pc2hcIiwgb25maW5pc2gpO1xuICB9O1xuXG4gIGlmIChpc1JlcXVlc3Qoc3RyZWFtKSkge1xuICAgIHN0cmVhbS5vbihcImNvbXBsZXRlXCIsIG9uZmluaXNoKTtcbiAgICBpZiAoIXdpbGxFbWl0Q2xvc2UpIHtcbiAgICAgIHN0cmVhbS5vbihcImFib3J0XCIsIG9uY2xvc2UpO1xuICAgIH1cbiAgICBpZiAoc3RyZWFtLnJlcSkgb25yZXF1ZXN0KCk7XG4gICAgZWxzZSBzdHJlYW0ub24oXCJyZXF1ZXN0XCIsIG9ucmVxdWVzdCk7XG4gIH0gZWxzZSBpZiAod3JpdGFibGUgJiYgIXdTdGF0ZSkgeyAvLyBsZWdhY3kgc3RyZWFtc1xuICAgIHN0cmVhbS5vbihcImVuZFwiLCBvbmxlZ2FjeWZpbmlzaCk7XG4gICAgc3RyZWFtLm9uKFwiY2xvc2VcIiwgb25sZWdhY3lmaW5pc2gpO1xuICB9XG5cbiAgLy8gTm90IGFsbCBzdHJlYW1zIHdpbGwgZW1pdCAnY2xvc2UnIGFmdGVyICdhYm9ydGVkJy5cbiAgaWYgKCF3aWxsRW1pdENsb3NlICYmIHR5cGVvZiBzdHJlYW0uYWJvcnRlZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICBzdHJlYW0ub24oXCJhYm9ydGVkXCIsIG9uY2xvc2UpO1xuICB9XG5cbiAgc3RyZWFtLm9uKFwiZW5kXCIsIG9uZW5kKTtcbiAgc3RyZWFtLm9uKFwiZmluaXNoXCIsIG9uZmluaXNoKTtcbiAgaWYgKG9wdGlvbnMuZXJyb3IgIT09IGZhbHNlKSBzdHJlYW0ub24oXCJlcnJvclwiLCBvbmVycm9yKTtcbiAgc3RyZWFtLm9uKFwiY2xvc2VcIiwgb25jbG9zZSk7XG5cbiAgLy8gX2Nsb3NlZCBpcyBmb3IgT3V0Z29pbmdNZXNzYWdlIHdoaWNoIGlzIG5vdCBhIHByb3BlciBXcml0YWJsZS5cbiAgY29uc3QgY2xvc2VkID0gKCF3U3RhdGUgJiYgIXJTdGF0ZSAmJiBzdHJlYW0uX2Nsb3NlZCA9PT0gdHJ1ZSkgfHwgKFxuICAgICh3U3RhdGUgJiYgd1N0YXRlLmNsb3NlZCkgfHxcbiAgICAoclN0YXRlICYmIHJTdGF0ZS5jbG9zZWQpIHx8XG4gICAgKHdTdGF0ZSAmJiB3U3RhdGUuZXJyb3JFbWl0dGVkKSB8fFxuICAgIChyU3RhdGUgJiYgclN0YXRlLmVycm9yRW1pdHRlZCkgfHxcbiAgICAoclN0YXRlICYmIHN0cmVhbS5yZXEgJiYgc3RyZWFtLmFib3J0ZWQpIHx8XG4gICAgKFxuICAgICAgKCF3U3RhdGUgfHwgIXdpbGxFbWl0Q2xvc2UgfHwgdHlwZW9mIHdTdGF0ZS5jbG9zZWQgIT09IFwiYm9vbGVhblwiKSAmJlxuICAgICAgKCFyU3RhdGUgfHwgIXdpbGxFbWl0Q2xvc2UgfHwgdHlwZW9mIHJTdGF0ZS5jbG9zZWQgIT09IFwiYm9vbGVhblwiKSAmJlxuICAgICAgKCF3cml0YWJsZSB8fCAod1N0YXRlICYmIHdTdGF0ZS5maW5pc2hlZCkpICYmXG4gICAgICAoIXJlYWRhYmxlIHx8IChyU3RhdGUgJiYgclN0YXRlLmVuZEVtaXR0ZWQpKVxuICAgIClcbiAgKTtcblxuICBpZiAoY2xvc2VkKSB7XG4gICAgLy8gVE9ETyhyb25hZyk6IFJlLXRocm93IGVycm9yIGlmIGVycm9yRW1pdHRlZD9cbiAgICAvLyBUT0RPKHJvbmFnKTogVGhyb3cgcHJlbWF0dXJlIGNsb3NlIGFzIGlmIGZpbmlzaGVkIHdhcyBjYWxsZWQ/XG4gICAgLy8gYmVmb3JlIGJlaW5nIGNsb3NlZD8gaS5lLiBpZiBjbG9zZWQgYnV0IG5vdCBlcnJvcmVkLCBlbmRlZCBvciBmaW5pc2hlZC5cbiAgICAvLyBUT0RPKHJvbmFnKTogVGhyb3cgc29tZSBraW5kIG9mIGVycm9yPyBEb2VzIGl0IG1ha2Ugc2Vuc2VcbiAgICAvLyB0byBjYWxsIGZpbmlzaGVkKCkgb24gYSBcImZpbmlzaGVkXCIgc3RyZWFtP1xuICAgIC8vIFRPRE8ocm9uYWcpOiB3aWxsRW1pdENsb3NlP1xuICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgY2FsbGJhY2sgPSBub3A7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRlZFwiLCBvbmNsb3NlKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJjb21wbGV0ZVwiLCBvbmZpbmlzaCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRcIiwgb25jbG9zZSk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwicmVxdWVzdFwiLCBvbnJlcXVlc3QpO1xuICAgIGlmIChzdHJlYW0ucmVxKSBzdHJlYW0ucmVxLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsIG9uZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIiwgb25sZWdhY3lmaW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIG9ubGVnYWN5ZmluaXNoKTtcbiAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIiwgb25maW5pc2gpO1xuICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLCBvbmVuZCk7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgb25lcnJvcik7XG4gICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIiwgb25jbG9zZSk7XG4gIH07XG5cbiAgaWYgKG9wdGlvbnMuc2lnbmFsICYmICFjbG9zZWQpIHtcbiAgICBjb25zdCBhYm9ydCA9ICgpID0+IHtcbiAgICAgIC8vIEtlZXAgaXQgYmVjYXVzZSBjbGVhbnVwIHJlbW92ZXMgaXQuXG4gICAgICBjb25zdCBlbmRDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgZW5kQ2FsbGJhY2suY2FsbChzdHJlYW0sIG5ldyBBYm9ydEVycm9yKCkpO1xuICAgIH07XG4gICAgaWYgKG9wdGlvbnMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soYWJvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICBjYWxsYmFjayA9IG9uY2UoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgb3B0aW9ucy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0KTtcbiAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5hcHBseShzdHJlYW0sIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgICBvcHRpb25zLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlb3M7XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQgYW5kIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIGRlbm8tbGludC1pZ25vcmUtZmlsZVxuXG5pbXBvcnQgeyBBYm9ydEVycm9yLCBFUlJfSU5WQUxJRF9BUkdfVFlQRSB9IGZyb20gXCIuLi9lcnJvcnMudHNcIjtcbmltcG9ydCBlb3MgZnJvbSBcIi4vZW5kLW9mLXN0cmVhbS5tanNcIjtcblxuLy8gVGhpcyBtZXRob2QgaXMgaW5saW5lZCBoZXJlIGZvciByZWFkYWJsZS1zdHJlYW1cbi8vIEl0IGFsc28gZG9lcyBub3QgYWxsb3cgZm9yIHNpZ25hbCB0byBub3QgZXhpc3Qgb24gdGhlIHN0cmVhbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzYwNjEjZGlzY3Vzc2lvbl9yNTMzNzE4MDI5XG5jb25zdCB2YWxpZGF0ZUFib3J0U2lnbmFsID0gKHNpZ25hbCwgbmFtZSkgPT4ge1xuICBpZiAoXG4gICAgdHlwZW9mIHNpZ25hbCAhPT0gXCJvYmplY3RcIiB8fFxuICAgICEoXCJhYm9ydGVkXCIgaW4gc2lnbmFsKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUobmFtZSwgXCJBYm9ydFNpZ25hbFwiLCBzaWduYWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBpc1N0cmVhbShvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAmJiB0eXBlb2Ygb2JqLnBpcGUgPT09IFwiZnVuY3Rpb25cIik7XG59XG5cbmZ1bmN0aW9uIGFkZEFib3J0U2lnbmFsKHNpZ25hbCwgc3RyZWFtKSB7XG4gIHZhbGlkYXRlQWJvcnRTaWduYWwoc2lnbmFsLCBcInNpZ25hbFwiKTtcbiAgaWYgKCFpc1N0cmVhbShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKFwic3RyZWFtXCIsIFwic3RyZWFtLlN0cmVhbVwiLCBzdHJlYW0pO1xuICB9XG4gIHJldHVybiBhZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGUoc2lnbmFsLCBzdHJlYW0pO1xufVxuZnVuY3Rpb24gYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlKHNpZ25hbCwgc3RyZWFtKSB7XG4gIGlmICh0eXBlb2Ygc2lnbmFsICE9PSBcIm9iamVjdFwiIHx8ICEoXCJhYm9ydGVkXCIgaW4gc2lnbmFsKSkge1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cbiAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICBzdHJlYW0uZGVzdHJveShuZXcgQWJvcnRFcnJvcigpKTtcbiAgfTtcbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgb25BYm9ydCgpO1xuICB9IGVsc2Uge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG4gICAgZW9zKHN0cmVhbSwgKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KSk7XG4gIH1cbiAgcmV0dXJuIHN0cmVhbTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBhZGRBYm9ydFNpZ25hbCwgYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlIH07XG5leHBvcnQgeyBhZGRBYm9ydFNpZ25hbCwgYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlIH07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQgYW5kIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIGRlbm8tbGludC1pZ25vcmUtZmlsZVxuXG5pbXBvcnQgeyBhZ2dyZWdhdGVUd29FcnJvcnMsIEVSUl9NVUxUSVBMRV9DQUxMQkFDSyB9IGZyb20gXCIuLi9lcnJvcnMudHNcIjtcbmltcG9ydCAqIGFzIHByb2Nlc3MgZnJvbSBcIi4uLy4uL19wcm9jZXNzL3Byb2Nlc3MudHNcIjtcblxuY29uc3Qga0Rlc3Ryb3kgPSBTeW1ib2woXCJrRGVzdHJveVwiKTtcbmNvbnN0IGtDb25zdHJ1Y3QgPSBTeW1ib2woXCJrQ29uc3RydWN0XCIpO1xuXG5mdW5jdGlvbiBjaGVja0Vycm9yKGVyciwgdywgcikge1xuICBpZiAoZXJyKSB7XG4gICAgLy8gQXZvaWQgVjggbGVhaywgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzQxMDMjaXNzdWVjb21tZW50LTY1MjAwMjM2NFxuICAgIGVyci5zdGFjazsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICh3ICYmICF3LmVycm9yZWQpIHtcbiAgICAgIHcuZXJyb3JlZCA9IGVycjtcbiAgICB9XG4gICAgaWYgKHIgJiYgIXIuZXJyb3JlZCkge1xuICAgICAgci5lcnJvcmVkID0gZXJyO1xuICAgIH1cbiAgfVxufVxuXG4vLyBCYWNrd2FyZHMgY29tcGF0LiBjYigpIGlzIHVuZG9jdW1lbnRlZCBhbmQgdW51c2VkIGluIGNvcmUgYnV0XG4vLyB1bmZvcnR1bmF0ZWx5IG1pZ2h0IGJlIHVzZWQgYnkgbW9kdWxlcy5cbmZ1bmN0aW9uIGRlc3Ryb3koZXJyLCBjYikge1xuICBjb25zdCByID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIC8vIFdpdGggZHVwbGV4IHN0cmVhbXMgd2UgdXNlIHRoZSB3cml0YWJsZSBzaWRlIGZvciBzdGF0ZS5cbiAgY29uc3QgcyA9IHcgfHwgcjtcblxuICBpZiAoKHcgJiYgdy5kZXN0cm95ZWQpIHx8IChyICYmIHIuZGVzdHJveWVkKSkge1xuICAgIGlmICh0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY2IoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdlIHNldCBkZXN0cm95ZWQgdG8gdHJ1ZSBiZWZvcmUgZmlyaW5nIGVycm9yIGNhbGxiYWNrcyBpbiBvcmRlclxuICAvLyB0byBtYWtlIGl0IHJlLWVudHJhbmNlIHNhZmUgaW4gY2FzZSBkZXN0cm95KCkgaXMgY2FsbGVkIHdpdGhpbiBjYWxsYmFja3NcbiAgY2hlY2tFcnJvcihlcnIsIHcsIHIpO1xuXG4gIGlmICh3KSB7XG4gICAgdy5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG4gIGlmIChyKSB7XG4gICAgci5kZXN0cm95ZWQgPSB0cnVlO1xuICB9XG5cbiAgLy8gSWYgc3RpbGwgY29uc3RydWN0aW5nIHRoZW4gZGVmZXIgY2FsbGluZyBfZGVzdHJveS5cbiAgaWYgKCFzLmNvbnN0cnVjdGVkKSB7XG4gICAgdGhpcy5vbmNlKGtEZXN0cm95LCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgIF9kZXN0cm95KHRoaXMsIGFnZ3JlZ2F0ZVR3b0Vycm9ycyhlciwgZXJyKSwgY2IpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIF9kZXN0cm95KHRoaXMsIGVyciwgY2IpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIF9kZXN0cm95KHNlbGYsIGVyciwgY2IpIHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIG9uRGVzdHJveShlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG5cbiAgICBjb25zdCByID0gc2VsZi5fcmVhZGFibGVTdGF0ZTtcbiAgICBjb25zdCB3ID0gc2VsZi5fd3JpdGFibGVTdGF0ZTtcblxuICAgIGNoZWNrRXJyb3IoZXJyLCB3LCByKTtcblxuICAgIGlmICh3KSB7XG4gICAgICB3LmNsb3NlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChyKSB7XG4gICAgICByLmNsb3NlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBjYihlcnIpO1xuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yQ2xvc2VOVCwgc2VsZiwgZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q2xvc2VOVCwgc2VsZik7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gc2VsZi5fZGVzdHJveShlcnIgfHwgbnVsbCwgb25EZXN0cm95KTtcbiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHRoZW4gPSByZXN1bHQudGhlbjtcbiAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhvbkRlc3Ryb3ksIG51bGwpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhvbkRlc3Ryb3ksIGVycik7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRGVzdHJveShlcnIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRFcnJvckNsb3NlTlQoc2VsZiwgZXJyKSB7XG4gIGVtaXRFcnJvck5UKHNlbGYsIGVycik7XG4gIGVtaXRDbG9zZU5UKHNlbGYpO1xufVxuXG5mdW5jdGlvbiBlbWl0Q2xvc2VOVChzZWxmKSB7XG4gIGNvbnN0IHIgPSBzZWxmLl9yZWFkYWJsZVN0YXRlO1xuICBjb25zdCB3ID0gc2VsZi5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAodykge1xuICAgIHcuY2xvc2VFbWl0dGVkID0gdHJ1ZTtcbiAgfVxuICBpZiAocikge1xuICAgIHIuY2xvc2VFbWl0dGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICgodyAmJiB3LmVtaXRDbG9zZSkgfHwgKHIgJiYgci5lbWl0Q2xvc2UpKSB7XG4gICAgc2VsZi5lbWl0KFwiY2xvc2VcIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1pdEVycm9yTlQoc2VsZiwgZXJyKSB7XG4gIGNvbnN0IHIgPSBzZWxmLl9yZWFkYWJsZVN0YXRlO1xuICBjb25zdCB3ID0gc2VsZi5fd3JpdGFibGVTdGF0ZTtcblxuICBpZiAoKHcgJiYgdy5lcnJvckVtaXR0ZWQpIHx8IChyICYmIHIuZXJyb3JFbWl0dGVkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh3KSB7XG4gICAgdy5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICB9XG4gIGlmIChyKSB7XG4gICAgci5lcnJvckVtaXR0ZWQgPSB0cnVlO1xuICB9XG5cbiAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbn1cblxuZnVuY3Rpb24gdW5kZXN0cm95KCkge1xuICBjb25zdCByID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHIpIHtcbiAgICByLmNvbnN0cnVjdGVkID0gdHJ1ZTtcbiAgICByLmNsb3NlZCA9IGZhbHNlO1xuICAgIHIuY2xvc2VFbWl0dGVkID0gZmFsc2U7XG4gICAgci5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICByLmVycm9yZWQgPSBudWxsO1xuICAgIHIuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG4gICAgci5yZWFkaW5nID0gZmFsc2U7XG4gICAgci5lbmRlZCA9IGZhbHNlO1xuICAgIHIuZW5kRW1pdHRlZCA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHcpIHtcbiAgICB3LmNvbnN0cnVjdGVkID0gdHJ1ZTtcbiAgICB3LmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHcuY2xvc2VkID0gZmFsc2U7XG4gICAgdy5jbG9zZUVtaXR0ZWQgPSBmYWxzZTtcbiAgICB3LmVycm9yZWQgPSBudWxsO1xuICAgIHcuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG4gICAgdy5lbmRlZCA9IGZhbHNlO1xuICAgIHcuZW5kaW5nID0gZmFsc2U7XG4gICAgdy5maW5hbENhbGxlZCA9IGZhbHNlO1xuICAgIHcucHJlZmluaXNoZWQgPSBmYWxzZTtcbiAgICB3LmZpbmlzaGVkID0gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIsIHN5bmMpIHtcbiAgLy8gV2UgaGF2ZSB0ZXN0cyB0aGF0IHJlbHkgb24gZXJyb3JzIGJlaW5nIGVtaXR0ZWRcbiAgLy8gaW4gdGhlIHNhbWUgdGljaywgc28gY2hhbmdpbmcgdGhpcyBpcyBzZW12ZXIgbWFqb3IuXG4gIC8vIEZvciBub3cgd2hlbiB5b3Ugb3B0LWluIHRvIGF1dG9EZXN0cm95IHdlIGFsbG93XG4gIC8vIHRoZSBlcnJvciB0byBiZSBlbWl0dGVkIG5leHRUaWNrLiBJbiBhIGZ1dHVyZVxuICAvLyBzZW12ZXIgbWFqb3IgdXBkYXRlIHdlIHNob3VsZCBjaGFuZ2UgdGhlIGRlZmF1bHQgdG8gdGhpcy5cblxuICBjb25zdCByID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBjb25zdCB3ID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmICgodyAmJiB3LmRlc3Ryb3llZCkgfHwgKHIgJiYgci5kZXN0cm95ZWQpKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAoKHIgJiYgci5hdXRvRGVzdHJveSkgfHwgKHcgJiYgdy5hdXRvRGVzdHJveSkpIHtcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpO1xuICB9IGVsc2UgaWYgKGVycikge1xuICAgIC8vIEF2b2lkIFY4IGxlYWssIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0MTAzI2lzc3VlY29tbWVudC02NTIwMDIzNjRcbiAgICBlcnIuc3RhY2s7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cbiAgICBpZiAodyAmJiAhdy5lcnJvcmVkKSB7XG4gICAgICB3LmVycm9yZWQgPSBlcnI7XG4gICAgfVxuICAgIGlmIChyICYmICFyLmVycm9yZWQpIHtcbiAgICAgIHIuZXJyb3JlZCA9IGVycjtcbiAgICB9XG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZW1pdEVycm9yTlQsIHN0cmVhbSwgZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdEVycm9yTlQoc3RyZWFtLCBlcnIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3Qoc3RyZWFtLCBjYikge1xuICBpZiAodHlwZW9mIHN0cmVhbS5fY29uc3RydWN0ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBjb25zdCB3ID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmIChyKSB7XG4gICAgci5jb25zdHJ1Y3RlZCA9IGZhbHNlO1xuICB9XG4gIGlmICh3KSB7XG4gICAgdy5jb25zdHJ1Y3RlZCA9IGZhbHNlO1xuICB9XG5cbiAgc3RyZWFtLm9uY2Uoa0NvbnN0cnVjdCwgY2IpO1xuXG4gIGlmIChzdHJlYW0ubGlzdGVuZXJDb3VudChrQ29uc3RydWN0KSA+IDEpIHtcbiAgICAvLyBEdXBsZXhcbiAgICByZXR1cm47XG4gIH1cblxuICBwcm9jZXNzLm5leHRUaWNrKGNvbnN0cnVjdE5ULCBzdHJlYW0pO1xufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3ROVChzdHJlYW0pIHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIG9uQ29uc3RydWN0KGVycikge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyID8/IG5ldyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG5cbiAgICBjb25zdCByID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICAgIGNvbnN0IHcgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gICAgY29uc3QgcyA9IHcgfHwgcjtcblxuICAgIGlmIChyKSB7XG4gICAgICByLmNvbnN0cnVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHcpIHtcbiAgICAgIHcuY29uc3RydWN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzLmRlc3Ryb3llZCkge1xuICAgICAgc3RyZWFtLmVtaXQoa0Rlc3Ryb3ksIGVycik7XG4gICAgfSBlbHNlIGlmIChlcnIpIHtcbiAgICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0Q29uc3RydWN0TlQsIHN0cmVhbSk7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBzdHJlYW0uX2NvbnN0cnVjdChvbkNvbnN0cnVjdCk7XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBjb25zdCB0aGVuID0gcmVzdWx0LnRoZW47XG4gICAgICBpZiAodHlwZW9mIHRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2sob25Db25zdHJ1Y3QsIG51bGwpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhvbkNvbnN0cnVjdCwgZXJyKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgb25Db25zdHJ1Y3QoZXJyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbWl0Q29uc3RydWN0TlQoc3RyZWFtKSB7XG4gIHN0cmVhbS5lbWl0KGtDb25zdHJ1Y3QpO1xufVxuXG5mdW5jdGlvbiBpc1JlcXVlc3Qoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0gJiYgc3RyZWFtLnNldEhlYWRlciAmJiB0eXBlb2Ygc3RyZWFtLmFib3J0ID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbi8vIE5vcm1hbGl6ZSBkZXN0cm95IGZvciBsZWdhY3kuXG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCBlcnIpIHtcbiAgaWYgKCFzdHJlYW0pIHJldHVybjtcbiAgaWYgKGlzUmVxdWVzdChzdHJlYW0pKSByZXR1cm4gc3RyZWFtLmFib3J0KCk7XG4gIGlmIChpc1JlcXVlc3Qoc3RyZWFtLnJlcSkpIHJldHVybiBzdHJlYW0ucmVxLmFib3J0KCk7XG4gIGlmICh0eXBlb2Ygc3RyZWFtLmRlc3Ryb3kgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHN0cmVhbS5kZXN0cm95KGVycik7XG4gIGlmICh0eXBlb2Ygc3RyZWFtLmNsb3NlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBzdHJlYW0uY2xvc2UoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb25zdHJ1Y3QsXG4gIGRlc3Ryb3llcixcbiAgZGVzdHJveSxcbiAgdW5kZXN0cm95LFxuICBlcnJvck9yRGVzdHJveSxcbn07XG5leHBvcnQgeyBjb25zdHJ1Y3QsIGRlc3Ryb3ksIGRlc3Ryb3llciwgZXJyb3JPckRlc3Ryb3ksIHVuZGVzdHJveSB9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50IGFuZCBOb2RlIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBkZW5vLWxpbnQtaWdub3JlLWZpbGVcblxuY29uc3Qga0lzRGlzdHVyYmVkID0gU3ltYm9sKFwia0lzRGlzdHVyYmVkXCIpO1xuXG5mdW5jdGlvbiBpc1JlYWRhYmxlTm9kZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuICEhKFxuICAgIG9iaiAmJlxuICAgIHR5cGVvZiBvYmoucGlwZSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgdHlwZW9mIG9iai5vbiA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgKCFvYmouX3dyaXRhYmxlU3RhdGUgfHwgb2JqLl9yZWFkYWJsZVN0YXRlPy5yZWFkYWJsZSAhPT0gZmFsc2UpICYmIC8vIER1cGxleFxuICAgICghb2JqLl93cml0YWJsZVN0YXRlIHx8IG9iai5fcmVhZGFibGVTdGF0ZSkgLy8gV3JpdGFibGUgaGFzIC5waXBlLlxuICApO1xufVxuXG5mdW5jdGlvbiBpc1dyaXRhYmxlTm9kZVN0cmVhbShvYmopIHtcbiAgcmV0dXJuICEhKFxuICAgIG9iaiAmJlxuICAgIHR5cGVvZiBvYmoud3JpdGUgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIHR5cGVvZiBvYmoub24gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICghb2JqLl9yZWFkYWJsZVN0YXRlIHx8IG9iai5fd3JpdGFibGVTdGF0ZT8ud3JpdGFibGUgIT09IGZhbHNlKSAvLyBEdXBsZXhcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNEdXBsZXhOb2RlU3RyZWFtKG9iaikge1xuICByZXR1cm4gISEoXG4gICAgb2JqICYmXG4gICAgKHR5cGVvZiBvYmoucGlwZSA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5fcmVhZGFibGVTdGF0ZSkgJiZcbiAgICB0eXBlb2Ygb2JqLm9uID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICB0eXBlb2Ygb2JqLndyaXRlID09PSBcImZ1bmN0aW9uXCJcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNOb2RlU3RyZWFtKG9iaikge1xuICByZXR1cm4gKFxuICAgIG9iaiAmJlxuICAgIChcbiAgICAgIG9iai5fcmVhZGFibGVTdGF0ZSB8fFxuICAgICAgb2JqLl93cml0YWJsZVN0YXRlIHx8XG4gICAgICAodHlwZW9mIG9iai53cml0ZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoub24gPT09IFwiZnVuY3Rpb25cIikgfHxcbiAgICAgICh0eXBlb2Ygb2JqLnBpcGUgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm9uID09PSBcImZ1bmN0aW9uXCIpXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKG9iaiwgaXNBc3luYykge1xuICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKGlzQXN5bmMgPT09IHRydWUpIHJldHVybiB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xuICBpZiAoaXNBc3luYyA9PT0gZmFsc2UpIHJldHVybiB0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIjtcbiAgcmV0dXJuIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICB0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuZnVuY3Rpb24gaXNEZXN0cm95ZWQoc3RyZWFtKSB7XG4gIGlmICghaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsO1xuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgY29uc3Qgc3RhdGUgPSB3U3RhdGUgfHwgclN0YXRlO1xuICByZXR1cm4gISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdGF0ZT8uZGVzdHJveWVkKTtcbn1cblxuLy8gSGF2ZSBiZWVuIGVuZCgpOmQuXG5mdW5jdGlvbiBpc1dyaXRhYmxlRW5kZWQoc3RyZWFtKSB7XG4gIGlmICghaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGw7XG4gIGlmIChzdHJlYW0ud3JpdGFibGVFbmRlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgaWYgKHdTdGF0ZT8uZXJyb3JlZCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHdTdGF0ZT8uZW5kZWQgIT09IFwiYm9vbGVhblwiKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHdTdGF0ZS5lbmRlZDtcbn1cblxuLy8gSGF2ZSBlbWl0dGVkICdmaW5pc2gnLlxuZnVuY3Rpb24gaXNXcml0YWJsZUZpbmlzaGVkKHN0cmVhbSwgc3RyaWN0KSB7XG4gIGlmICghaXNXcml0YWJsZU5vZGVTdHJlYW0oc3RyZWFtKSkgcmV0dXJuIG51bGw7XG4gIGlmIChzdHJlYW0ud3JpdGFibGVGaW5pc2hlZCA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHdTdGF0ZSA9IHN0cmVhbS5fd3JpdGFibGVTdGF0ZTtcbiAgaWYgKHdTdGF0ZT8uZXJyb3JlZCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHdTdGF0ZT8uZmluaXNoZWQgIT09IFwiYm9vbGVhblwiKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuICEhKFxuICAgIHdTdGF0ZS5maW5pc2hlZCB8fFxuICAgIChzdHJpY3QgPT09IGZhbHNlICYmIHdTdGF0ZS5lbmRlZCA9PT0gdHJ1ZSAmJiB3U3RhdGUubGVuZ3RoID09PSAwKVxuICApO1xufVxuXG4vLyBIYXZlIGJlZW4gcHVzaChudWxsKTpkLlxuZnVuY3Rpb24gaXNSZWFkYWJsZUVuZGVkKHN0cmVhbSkge1xuICBpZiAoIWlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHJldHVybiBudWxsO1xuICBpZiAoc3RyZWFtLnJlYWRhYmxlRW5kZWQgPT09IHRydWUpIHJldHVybiB0cnVlO1xuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghclN0YXRlIHx8IHJTdGF0ZS5lcnJvcmVkKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgclN0YXRlPy5lbmRlZCAhPT0gXCJib29sZWFuXCIpIHJldHVybiBudWxsO1xuICByZXR1cm4gclN0YXRlLmVuZGVkO1xufVxuXG4vLyBIYXZlIGVtaXR0ZWQgJ2VuZCcuXG5mdW5jdGlvbiBpc1JlYWRhYmxlRmluaXNoZWQoc3RyZWFtLCBzdHJpY3QpIHtcbiAgaWYgKCFpc1JlYWRhYmxlTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBpZiAoclN0YXRlPy5lcnJvcmVkKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgclN0YXRlPy5lbmRFbWl0dGVkICE9PSBcImJvb2xlYW5cIikgcmV0dXJuIG51bGw7XG4gIHJldHVybiAhIShcbiAgICByU3RhdGUuZW5kRW1pdHRlZCB8fFxuICAgIChzdHJpY3QgPT09IGZhbHNlICYmIHJTdGF0ZS5lbmRlZCA9PT0gdHJ1ZSAmJiByU3RhdGUubGVuZ3RoID09PSAwKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZChzdHJlYW0pIHtcbiAgcmV0dXJuICEhKHN0cmVhbSAmJiAoXG4gICAgc3RyZWFtLnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgIHN0cmVhbS5yZWFkYWJsZUFib3J0ZWQgfHxcbiAgICBzdHJlYW1ba0lzRGlzdHVyYmVkXVxuICApKTtcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZShzdHJlYW0pIHtcbiAgY29uc3QgciA9IGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSk7XG4gIGlmIChyID09PSBudWxsIHx8IHR5cGVvZiBzdHJlYW0/LnJlYWRhYmxlICE9PSBcImJvb2xlYW5cIikgcmV0dXJuIG51bGw7XG4gIGlmIChpc0Rlc3Ryb3llZChzdHJlYW0pKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiByICYmIHN0cmVhbS5yZWFkYWJsZSAmJiAhaXNSZWFkYWJsZUZpbmlzaGVkKHN0cmVhbSk7XG59XG5cbmZ1bmN0aW9uIGlzV3JpdGFibGUoc3RyZWFtKSB7XG4gIGNvbnN0IHIgPSBpc1dyaXRhYmxlTm9kZVN0cmVhbShzdHJlYW0pO1xuICBpZiAociA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RyZWFtPy53cml0YWJsZSAhPT0gXCJib29sZWFuXCIpIHJldHVybiBudWxsO1xuICBpZiAoaXNEZXN0cm95ZWQoc3RyZWFtKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gciAmJiBzdHJlYW0ud3JpdGFibGUgJiYgIWlzV3JpdGFibGVFbmRlZChzdHJlYW0pO1xufVxuXG5mdW5jdGlvbiBpc0ZpbmlzaGVkKHN0cmVhbSwgb3B0cykge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaXNEZXN0cm95ZWQoc3RyZWFtKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKG9wdHM/LnJlYWRhYmxlICE9PSBmYWxzZSAmJiBpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAob3B0cz8ud3JpdGFibGUgIT09IGZhbHNlICYmIGlzV3JpdGFibGUoc3RyZWFtKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0Nsb3NlZChzdHJlYW0pIHtcbiAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgd1N0YXRlID0gc3RyZWFtLl93cml0YWJsZVN0YXRlO1xuICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKFxuICAgIHR5cGVvZiB3U3RhdGU/LmNsb3NlZCA9PT0gXCJib29sZWFuXCIgfHxcbiAgICB0eXBlb2YgclN0YXRlPy5jbG9zZWQgPT09IFwiYm9vbGVhblwiXG4gICkge1xuICAgIHJldHVybiB3U3RhdGU/LmNsb3NlZCB8fCByU3RhdGU/LmNsb3NlZDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtLl9jbG9zZWQgPT09IFwiYm9vbGVhblwiICYmIGlzT3V0Z29pbmdNZXNzYWdlKHN0cmVhbSkpIHtcbiAgICByZXR1cm4gc3RyZWFtLl9jbG9zZWQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNPdXRnb2luZ01lc3NhZ2Uoc3RyZWFtKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHN0cmVhbS5fY2xvc2VkID09PSBcImJvb2xlYW5cIiAmJlxuICAgIHR5cGVvZiBzdHJlYW0uX2RlZmF1bHRLZWVwQWxpdmUgPT09IFwiYm9vbGVhblwiICYmXG4gICAgdHlwZW9mIHN0cmVhbS5fcmVtb3ZlZENvbm5lY3Rpb24gPT09IFwiYm9vbGVhblwiICYmXG4gICAgdHlwZW9mIHN0cmVhbS5fcmVtb3ZlZENvbnRMZW4gPT09IFwiYm9vbGVhblwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzU2VydmVyUmVzcG9uc2Uoc3RyZWFtKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHN0cmVhbS5fc2VudDEwMCA9PT0gXCJib29sZWFuXCIgJiZcbiAgICBpc091dGdvaW5nTWVzc2FnZShzdHJlYW0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzU2VydmVyUmVxdWVzdChzdHJlYW0pIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygc3RyZWFtLl9jb25zdW1pbmcgPT09IFwiYm9vbGVhblwiICYmXG4gICAgdHlwZW9mIHN0cmVhbS5fZHVtcGVkID09PSBcImJvb2xlYW5cIiAmJlxuICAgIHN0cmVhbS5yZXE/LnVwZ3JhZGVPckNvbm5lY3QgPT09IHVuZGVmaW5lZFxuICApO1xufVxuXG5mdW5jdGlvbiB3aWxsRW1pdENsb3NlKHN0cmVhbSkge1xuICBpZiAoIWlzTm9kZVN0cmVhbShzdHJlYW0pKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgY29uc3Qgc3RhdGUgPSB3U3RhdGUgfHwgclN0YXRlO1xuXG4gIHJldHVybiAoIXN0YXRlICYmIGlzU2VydmVyUmVzcG9uc2Uoc3RyZWFtKSkgfHwgISEoXG4gICAgc3RhdGUgJiZcbiAgICBzdGF0ZS5hdXRvRGVzdHJveSAmJlxuICAgIHN0YXRlLmVtaXRDbG9zZSAmJlxuICAgIHN0YXRlLmNsb3NlZCA9PT0gZmFsc2VcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Rpc3R1cmJlZCxcbiAga0lzRGlzdHVyYmVkLFxuICBpc0Nsb3NlZCxcbiAgaXNEZXN0cm95ZWQsXG4gIGlzRHVwbGV4Tm9kZVN0cmVhbSxcbiAgaXNGaW5pc2hlZCxcbiAgaXNJdGVyYWJsZSxcbiAgaXNSZWFkYWJsZSxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzUmVhZGFibGVFbmRlZCxcbiAgaXNSZWFkYWJsZUZpbmlzaGVkLFxuICBpc05vZGVTdHJlYW0sXG4gIGlzV3JpdGFibGUsXG4gIGlzV3JpdGFibGVOb2RlU3RyZWFtLFxuICBpc1dyaXRhYmxlRW5kZWQsXG4gIGlzV3JpdGFibGVGaW5pc2hlZCxcbiAgaXNTZXJ2ZXJSZXF1ZXN0LFxuICBpc1NlcnZlclJlc3BvbnNlLFxuICB3aWxsRW1pdENsb3NlLFxufTtcbmV4cG9ydCB7XG4gIGlzQ2xvc2VkLFxuICBpc0Rlc3Ryb3llZCxcbiAgaXNEaXN0dXJiZWQsXG4gIGlzRHVwbGV4Tm9kZVN0cmVhbSxcbiAgaXNGaW5pc2hlZCxcbiAgaXNJdGVyYWJsZSxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1JlYWRhYmxlLFxuICBpc1JlYWRhYmxlRW5kZWQsXG4gIGlzUmVhZGFibGVGaW5pc2hlZCxcbiAgaXNSZWFkYWJsZU5vZGVTdHJlYW0sXG4gIGlzU2VydmVyUmVxdWVzdCxcbiAgaXNTZXJ2ZXJSZXNwb25zZSxcbiAgaXNXcml0YWJsZSxcbiAgaXNXcml0YWJsZUVuZGVkLFxuICBpc1dyaXRhYmxlRmluaXNoZWQsXG4gIGlzV3JpdGFibGVOb2RlU3RyZWFtLFxuICBrSXNEaXN0dXJiZWQsXG4gIHdpbGxFbWl0Q2xvc2UsXG59O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBOb2RlLmpzIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbi8vIExhemlseSBpbml0aWFsaXplcyB0aGUgYWN0dWFsIHN0ZGlvIG9iamVjdHMuXG4vLyBUaGlzIHRyaWNrIGlzIG5lY2Vzc2FyeSBmb3IgYXZvaWRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGJldHdlZW5cbi8vIHN0cmVhbSBhbmQgcHJvY2VzcyBtb2R1bGVzLlxuZXhwb3J0IGNvbnN0IHN0ZGlvID0ge307XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIE5vZGUncyBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZm9yIGEgc3ltYm9sIHRoZXkgcHV0IGluIHRoZSBibG9iIHByb3RvdHlwZVxuLy8gU2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIEJsb2IgaXMgRGVubydzLCB0aGUgb25seSBvcHRpb24gaXMgdG8gY2hlY2sgdGhlXG4vLyBvYmplY3RzIGNvbnN0cnVjdG9yXG5leHBvcnQgZnVuY3Rpb24gaXNCbG9iKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgQmxvYjtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCBhbmQgTm9kZSBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gZGVuby1saW50LWlnbm9yZS1maWxlXG5cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCIuLi8uLi9idWZmZXIudHNcIjtcbmltcG9ydCB7IEVSUl9JTlZBTElEX0FSR19UWVBFLCBFUlJfU1RSRUFNX05VTExfVkFMVUVTIH0gZnJvbSBcIi4uL2Vycm9ycy50c1wiO1xuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tIFwiLi4vLi4vX3Byb2Nlc3MvcHJvY2Vzcy50c1wiO1xuXG5mdW5jdGlvbiBfZnJvbShSZWFkYWJsZSwgaXRlcmFibGUsIG9wdHMpIHtcbiAgbGV0IGl0ZXJhdG9yO1xuICBpZiAodHlwZW9mIGl0ZXJhYmxlID09PSBcInN0cmluZ1wiIHx8IGl0ZXJhYmxlIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7XG4gICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlYWQoKSB7XG4gICAgICAgIHRoaXMucHVzaChpdGVyYWJsZSk7XG4gICAgICAgIHRoaXMucHVzaChudWxsKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBsZXQgaXNBc3luYztcbiAgaWYgKGl0ZXJhYmxlICYmIGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgIGlzQXN5bmMgPSB0cnVlO1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gIH0gZWxzZSBpZiAoaXRlcmFibGUgJiYgaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgIGlzQXN5bmMgPSBmYWxzZTtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJpdGVyYWJsZVwiLCBbXCJJdGVyYWJsZVwiXSwgaXRlcmFibGUpO1xuICB9XG5cbiAgY29uc3QgcmVhZGFibGUgPSBuZXcgUmVhZGFibGUoe1xuICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgaGlnaFdhdGVyTWFyazogMSxcbiAgICAvLyBUT0RPKHJvbmFnKTogV2hhdCBvcHRpb25zIHNob3VsZCBiZSBhbGxvd2VkP1xuICAgIC4uLm9wdHMsXG4gIH0pO1xuXG4gIC8vIEZsYWcgdG8gcHJvdGVjdCBhZ2FpbnN0IF9yZWFkXG4gIC8vIGJlaW5nIGNhbGxlZCBiZWZvcmUgbGFzdCBpdGVyYXRpb24gY29tcGxldGlvbi5cbiAgbGV0IHJlYWRpbmcgPSBmYWxzZTtcblxuICByZWFkYWJsZS5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXJlYWRpbmcpIHtcbiAgICAgIHJlYWRpbmcgPSB0cnVlO1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfTtcblxuICByZWFkYWJsZS5fZGVzdHJveSA9IGZ1bmN0aW9uIChlcnJvciwgY2IpIHtcbiAgICBjbG9zZShlcnJvcikudGhlbihcbiAgICAgICgpID0+IHByb2Nlc3MubmV4dFRpY2soY2IsIGVycm9yKSwgLy8gbmV4dFRpY2sgaXMgaGVyZSBpbiBjYXNlIGNiIHRocm93c1xuICAgICAgKGUpID0+IHByb2Nlc3MubmV4dFRpY2soY2IsIGUgfHwgZXJyb3IpLFxuICAgICk7XG4gIH07XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2xvc2UoZXJyb3IpIHtcbiAgICBjb25zdCBoYWRFcnJvciA9IChlcnJvciAhPT0gdW5kZWZpbmVkKSAmJiAoZXJyb3IgIT09IG51bGwpO1xuICAgIGNvbnN0IGhhc1Rocm93ID0gdHlwZW9mIGl0ZXJhdG9yLnRocm93ID09PSBcImZ1bmN0aW9uXCI7XG4gICAgaWYgKGhhZEVycm9yICYmIGhhc1Rocm93KSB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci50aHJvdyhlcnJvcik7XG4gICAgICBhd2FpdCB2YWx1ZTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvci5yZXR1cm4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gYXdhaXQgaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICBhd2FpdCB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBuZXh0KCkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGlzQXN5bmNcbiAgICAgICAgICA/IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICAgIDogaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgcmVhZGFibGUucHVzaChudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByZXMgPSAodmFsdWUgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgID8gYXdhaXQgdmFsdWVcbiAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgaWYgKHJlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmVhZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlYWRhYmxlLnB1c2gocmVzKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWFkYWJsZS5kZXN0cm95KGVycik7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlYWRhYmxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBfZnJvbTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCBhbmQgTm9kZSBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gZGVuby1saW50LWlnbm9yZS1maWxlXG5cbmltcG9ydCB7IEVSUl9JTlZBTElEX0FSR19WQUxVRSB9IGZyb20gXCIuLi9lcnJvcnMudHNcIjtcblxuZnVuY3Rpb24gaGlnaFdhdGVyTWFya0Zyb20ob3B0aW9ucywgaXNEdXBsZXgsIGR1cGxleEtleSkge1xuICByZXR1cm4gb3B0aW9ucy5oaWdoV2F0ZXJNYXJrICE9IG51bGxcbiAgICA/IG9wdGlvbnMuaGlnaFdhdGVyTWFya1xuICAgIDogaXNEdXBsZXhcbiAgICA/IG9wdGlvbnNbZHVwbGV4S2V5XVxuICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEhpZ2hXYXRlck1hcmsob2JqZWN0TW9kZSkge1xuICByZXR1cm4gb2JqZWN0TW9kZSA/IDE2IDogMTYgKiAxMDI0O1xufVxuXG5mdW5jdGlvbiBnZXRIaWdoV2F0ZXJNYXJrKHN0YXRlLCBvcHRpb25zLCBkdXBsZXhLZXksIGlzRHVwbGV4KSB7XG4gIGNvbnN0IGh3bSA9IGhpZ2hXYXRlck1hcmtGcm9tKG9wdGlvbnMsIGlzRHVwbGV4LCBkdXBsZXhLZXkpO1xuICBpZiAoaHdtICE9IG51bGwpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoaHdtKSB8fCBod20gPCAwKSB7XG4gICAgICBjb25zdCBuYW1lID0gaXNEdXBsZXggPyBgb3B0aW9ucy4ke2R1cGxleEtleX1gIDogXCJvcHRpb25zLmhpZ2hXYXRlck1hcmtcIjtcbiAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVkFMVUUobmFtZSwgaHdtKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoaHdtKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgdmFsdWVcbiAgcmV0dXJuIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrKHN0YXRlLm9iamVjdE1vZGUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldEhpZ2hXYXRlck1hcmssXG4gIGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrLFxufTtcbmV4cG9ydCB7IGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrLCBnZXRIaWdoV2F0ZXJNYXJrIH07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQgYW5kIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIGRlbm8tbGludC1pZ25vcmUtZmlsZVxuXG5pbXBvcnQgRUUgZnJvbSBcIi4uLy4uL2V2ZW50cy50c1wiO1xuXG5mdW5jdGlvbiBTdHJlYW0ob3B0cykge1xuICBFRS5jYWxsKHRoaXMsIG9wdHMpO1xufVxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFN0cmVhbS5wcm90b3R5cGUsIEVFLnByb3RvdHlwZSk7XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoU3RyZWFtLCBFRSk7XG5cblN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uIChkZXN0LCBvcHRpb25zKSB7XG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tdGhpcy1hbGlhc1xuICBjb25zdCBzb3VyY2UgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlICYmIGRlc3Qud3JpdGUoY2h1bmspID09PSBmYWxzZSAmJiBzb3VyY2UucGF1c2UpIHtcbiAgICAgIHNvdXJjZS5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNvdXJjZS5vbihcImRhdGFcIiwgb25kYXRhKTtcblxuICBmdW5jdGlvbiBvbmRyYWluKCkge1xuICAgIGlmIChzb3VyY2UucmVhZGFibGUgJiYgc291cmNlLnJlc3VtZSkge1xuICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Qub24oXCJkcmFpblwiLCBvbmRyYWluKTtcblxuICAvLyBJZiB0aGUgJ2VuZCcgb3B0aW9uIGlzIG5vdCBzdXBwbGllZCwgZGVzdC5lbmQoKSB3aWxsIGJlIGNhbGxlZCB3aGVuXG4gIC8vIHNvdXJjZSBnZXRzIHRoZSAnZW5kJyBvciAnY2xvc2UnIGV2ZW50cy4gIE9ubHkgZGVzdC5lbmQoKSBvbmNlLlxuICBpZiAoIWRlc3QuX2lzU3RkaW8gJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMuZW5kICE9PSBmYWxzZSkpIHtcbiAgICBzb3VyY2Uub24oXCJlbmRcIiwgb25lbmQpO1xuICAgIHNvdXJjZS5vbihcImNsb3NlXCIsIG9uY2xvc2UpO1xuICB9XG5cbiAgbGV0IGRpZE9uRW5kID0gZmFsc2U7XG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuO1xuICAgIGRpZE9uRW5kID0gdHJ1ZTtcblxuICAgIGRlc3QuZW5kKCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuO1xuICAgIGRpZE9uRW5kID0gdHJ1ZTtcblxuICAgIGlmICh0eXBlb2YgZGVzdC5kZXN0cm95ID09PSBcImZ1bmN0aW9uXCIpIGRlc3QuZGVzdHJveSgpO1xuICB9XG5cbiAgLy8gRG9uJ3QgbGVhdmUgZGFuZ2xpbmcgcGlwZXMgd2hlbiB0aGVyZSBhcmUgZXJyb3JzLlxuICBmdW5jdGlvbiBvbmVycm9yKGVyKSB7XG4gICAgY2xlYW51cCgpO1xuICAgIGlmIChFRS5saXN0ZW5lckNvdW50KHRoaXMsIFwiZXJyb3JcIikgPT09IDApIHtcbiAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVyKTtcbiAgICB9XG4gIH1cblxuICBwcmVwZW5kTGlzdGVuZXIoc291cmNlLCBcImVycm9yXCIsIG9uZXJyb3IpO1xuICBwcmVwZW5kTGlzdGVuZXIoZGVzdCwgXCJlcnJvclwiLCBvbmVycm9yKTtcblxuICAvLyBSZW1vdmUgYWxsIHRoZSBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkLlxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIiwgb25kYXRhKTtcbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKFwiZHJhaW5cIiwgb25kcmFpbik7XG5cbiAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIiwgb25lbmQpO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIG9uY2xvc2UpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgb25lcnJvcik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIG9uZXJyb3IpO1xuXG4gICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIGNsZWFudXApO1xuICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGNsZWFudXApO1xuXG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGNsZWFudXApO1xuICB9XG5cbiAgc291cmNlLm9uKFwiZW5kXCIsIGNsZWFudXApO1xuICBzb3VyY2Uub24oXCJjbG9zZVwiLCBjbGVhbnVwKTtcblxuICBkZXN0Lm9uKFwiY2xvc2VcIiwgY2xlYW51cCk7XG4gIGRlc3QuZW1pdChcInBpcGVcIiwgc291cmNlKTtcblxuICAvLyBBbGxvdyBmb3IgdW5peC1saWtlIHVzYWdlOiBBLnBpcGUoQikucGlwZShDKVxuICByZXR1cm4gZGVzdDtcbn07XG5cbmZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4pIHtcbiAgLy8gU2FkbHkgdGhpcyBpcyBub3QgY2FjaGVhYmxlIGFzIHNvbWUgbGlicmFyaWVzIGJ1bmRsZSB0aGVpciBvd25cbiAgLy8gZXZlbnQgZW1pdHRlciBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZW0uXG4gIGlmICh0eXBlb2YgZW1pdHRlci5wcmVwZW5kTGlzdGVuZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBlbWl0dGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgZm4pO1xuICB9XG5cbiAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueVxuICAvLyB1c2VybGFuZCBvbmVzLiAgTkVWRVIgRE8gVEhJUy4gVGhpcyBpcyBoZXJlIG9ubHkgYmVjYXVzZSB0aGlzIGNvZGUgbmVlZHNcbiAgLy8gdG8gY29udGludWUgdG8gd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIE5vZGUuanMgdGhhdCBkbyBub3QgaW5jbHVkZVxuICAvLyB0aGUgcHJlcGVuZExpc3RlbmVyKCkgbWV0aG9kLiBUaGUgZ29hbCBpcyB0byBldmVudHVhbGx5IHJlbW92ZSB0aGlzIGhhY2suXG4gIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbZXZlbnRdKSB7XG4gICAgZW1pdHRlci5vbihldmVudCwgZm4pO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZW1pdHRlci5fZXZlbnRzW2V2ZW50XSkpIHtcbiAgICBlbWl0dGVyLl9ldmVudHNbZXZlbnRdLnVuc2hpZnQoZm4pO1xuICB9IGVsc2Uge1xuICAgIGVtaXR0ZXIuX2V2ZW50c1tldmVudF0gPSBbZm4sIGVtaXR0ZXIuX2V2ZW50c1tldmVudF1dO1xuICB9XG59XG5cbmV4cG9ydCB7IHByZXBlbmRMaXN0ZW5lciwgU3RyZWFtIH07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiLi9idWZmZXIudHNcIjtcbmltcG9ydCB7IG5vcm1hbGl6ZUVuY29kaW5nIGFzIGNhc3RFbmNvZGluZywgbm90SW1wbGVtZW50ZWQgfSBmcm9tIFwiLi9fdXRpbHMudHNcIjtcblxuZW51bSBOb3RJbXBsZW1lbnRlZCB7XG4gIFwiYXNjaWlcIixcbiAgXCJsYXRpbjFcIixcbiAgXCJ1dGYxNmxlXCIsXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYz86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVuY29kaW5nID0gY2FzdEVuY29kaW5nKGVuYyA/PyBudWxsKTtcbiAgaWYgKGVuY29kaW5nICYmIGVuY29kaW5nIGluIE5vdEltcGxlbWVudGVkKSBub3RJbXBsZW1lbnRlZChlbmNvZGluZyk7XG4gIGlmICghZW5jb2RpbmcgJiYgdHlwZW9mIGVuYyA9PT0gXCJzdHJpbmdcIiAmJiBlbmMudG9Mb3dlckNhc2UoKSAhPT0gXCJyYXdcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBlbmNvZGluZzogJHtlbmN9YCk7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyhlbmNvZGluZyk7XG59XG4vKlxuICogQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuICogY29udGludWF0aW9uIGJ5dGUuIElmIGFuIGludmFsaWQgYnl0ZSBpcyBkZXRlY3RlZCwgLTIgaXMgcmV0dXJuZWQuXG4gKiAqL1xuZnVuY3Rpb24gdXRmOENoZWNrQnl0ZShieXRlOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoYnl0ZSA8PSAweDdmKSByZXR1cm4gMDtcbiAgZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtcbiAgZWxzZSBpZiAoYnl0ZSA+PiA0ID09PSAweDBlKSByZXR1cm4gMztcbiAgZWxzZSBpZiAoYnl0ZSA+PiAzID09PSAweDFlKSByZXR1cm4gNDtcbiAgcmV0dXJuIGJ5dGUgPj4gNiA9PT0gMHgwMiA/IC0xIDogLTI7XG59XG5cbi8qXG4gKiBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4gKiBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuICogbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbiAqICovXG5mdW5jdGlvbiB1dGY4Q2hlY2tJbmNvbXBsZXRlKFxuICBzZWxmOiBTdHJpbmdEZWNvZGVyQmFzZSxcbiAgYnVmOiBCdWZmZXIsXG4gIGk6IG51bWJlcixcbik6IG51bWJlciB7XG4gIGxldCBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIGxldCBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSB7XG4gICAgICBpZiAobmIgPT09IDIpIG5iID0gMDtcbiAgICAgIGVsc2Ugc2VsZi5sYXN0TmVlZCA9IG5iIC0gMztcbiAgICB9XG4gICAgcmV0dXJuIG5iO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKlxuICogVmFsaWRhdGVzIGFzIG1hbnkgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIGFzXG4gKiBuZWVkZWQgb3IgYXJlIGF2YWlsYWJsZS4gSWYgd2Ugc2VlIGEgbm9uLWNvbnRpbnVhdGlvbiBieXRlIHdoZXJlIHdlIGV4cGVjdFxuICogb25lLCB3ZSBcInJlcGxhY2VcIiB0aGUgdmFsaWRhdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB3ZSd2ZSBzZWVuIHNvIGZhciB3aXRoXG4gKiBhIHNpbmdsZSBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2RpbmdcbiAqIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2VcbiAqIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4gKiBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4gKiBsb29wLlxuICogKi9cbmZ1bmN0aW9uIHV0ZjhDaGVja0V4dHJhQnl0ZXMoXG4gIHNlbGY6IFN0cmluZ0RlY29kZXJCYXNlLFxuICBidWY6IEJ1ZmZlcixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgoYnVmWzBdICYgMHhjMCkgIT09IDB4ODApIHtcbiAgICBzZWxmLmxhc3ROZWVkID0gMDtcbiAgICByZXR1cm4gXCJcXHVmZmZkXCI7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweGMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gXCJcXHVmZmZkXCI7XG4gICAgfVxuICAgIGlmIChzZWxmLmxhc3ROZWVkID4gMiAmJiBidWYubGVuZ3RoID4gMikge1xuICAgICAgaWYgKChidWZbMl0gJiAweGMwKSAhPT0gMHg4MCkge1xuICAgICAgICBzZWxmLmxhc3ROZWVkID0gMjtcbiAgICAgICAgcmV0dXJuIFwiXFx1ZmZmZFwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKlxuICogQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyLlxuICogKi9cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdENvbXBsZXRlKFxuICB0aGlzOiBTdHJpbmdEZWNvZGVyQmFzZSxcbiAgYnVmOiBCdWZmZXIsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICBjb25zdCByID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYpO1xuICBpZiAociAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcjtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufVxuXG4vKlxuICogQXR0ZW1wdHMgdG8gY29tcGxldGUgYSBwYXJ0aWFsIG5vbi1VVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlclxuICogKi9cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdEluY29tcGxldGUoXG4gIHRoaXM6IFN0cmluZ0RlY29kZXJCYXNlLFxuICBidWY6IEJ1ZmZlcixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQsIDAsIGJ1Zi5sZW5ndGgpO1xuICB0aGlzLmxhc3ROZWVkIC09IGJ1Zi5sZW5ndGg7XG59XG5cbi8qXG4gKiBSZXR1cm5zIGFsbCBjb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyLiBJZiB0aGUgQnVmZmVyIGVuZGVkIG9uIGFcbiAqIHBhcnRpYWwgY2hhcmFjdGVyLCB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgYXJlIGJ1ZmZlcmVkIHVudGlsIHRoZSByZXF1aXJlZFxuICogbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUuXG4gKiAqL1xuZnVuY3Rpb24gdXRmOFRleHQodGhpczogU3RyaW5nRGVjb2RlckJhc2UsIGJ1ZjogQnVmZmVyLCBpOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCB0b3RhbCA9IHV0ZjhDaGVja0luY29tcGxldGUodGhpcywgYnVmLCBpKTtcbiAgaWYgKCF0aGlzLmxhc3ROZWVkKSByZXR1cm4gYnVmLnRvU3RyaW5nKFwidXRmOFwiLCBpKTtcbiAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDtcbiAgY29uc3QgZW5kID0gYnVmLmxlbmd0aCAtICh0b3RhbCAtIHRoaXMubGFzdE5lZWQpO1xuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCAwLCBlbmQpO1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKFwidXRmOFwiLCBpLCBlbmQpO1xufVxuXG4vKlxuICogRm9yIFVURi04LCBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciBpcyBhZGRlZCB3aGVuIGVuZGluZyBvbiBhIHBhcnRpYWxcbiAqIGNoYXJhY3Rlci5cbiAqICovXG5mdW5jdGlvbiB1dGY4RW5kKHRoaXM6IFV0ZjhEZWNvZGVyLCBidWY/OiBCdWZmZXIpOiBzdHJpbmcge1xuICBjb25zdCByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiBcIlwiO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyBcIlxcdWZmZmRcIjtcbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZShcbiAgdGhpczogVXRmOERlY29kZXIgfCBCYXNlNjREZWNvZGVyLFxuICBidWY6IEJ1ZmZlciB8IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgYnVmID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiXCI7XG4gIGxldCByO1xuICBsZXQgaTtcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICByID0gdGhpcy5maWxsTGFzdChidWYpO1xuICAgIGlmIChyID09PSB1bmRlZmluZWQpIHJldHVybiBcIlwiO1xuICAgIGkgPSB0aGlzLmxhc3ROZWVkO1xuICAgIHRoaXMubGFzdE5lZWQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGkgPSAwO1xuICB9XG4gIGlmIChpIDwgYnVmLmxlbmd0aCkgcmV0dXJuIHIgPyByICsgdGhpcy50ZXh0KGJ1ZiwgaSkgOiB0aGlzLnRleHQoYnVmLCBpKTtcbiAgcmV0dXJuIHIgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gYmFzZTY0VGV4dCh0aGlzOiBTdHJpbmdEZWNvZGVyQmFzZSwgYnVmOiBCdWZmZXIsIGk6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IG4gPSAoYnVmLmxlbmd0aCAtIGkpICUgMztcbiAgaWYgKG4gPT09IDApIHJldHVybiBidWYudG9TdHJpbmcoXCJiYXNlNjRcIiwgaSk7XG4gIHRoaXMubGFzdE5lZWQgPSAzIC0gbjtcbiAgdGhpcy5sYXN0VG90YWwgPSAzO1xuICBpZiAobiA9PT0gMSkge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9XG4gIHJldHVybiBidWYudG9TdHJpbmcoXCJiYXNlNjRcIiwgaSwgYnVmLmxlbmd0aCAtIG4pO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRFbmQodGhpczogQmFzZTY0RGVjb2RlciwgYnVmPzogQnVmZmVyKTogc3RyaW5nIHtcbiAgY29uc3QgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogXCJcIjtcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoXCJiYXNlNjRcIiwgMCwgMyAtIHRoaXMubGFzdE5lZWQpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVXcml0ZShcbiAgdGhpczogU3RyaW5nRGVjb2RlckJhc2UsXG4gIGJ1ZjogQnVmZmVyIHwgc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBidWYgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gYnVmO1xuICB9XG4gIHJldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVuZCh0aGlzOiBHZW5lcmljRGVjb2RlciwgYnVmPzogQnVmZmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogXCJcIjtcbn1cblxuY2xhc3MgU3RyaW5nRGVjb2RlckJhc2Uge1xuICBwdWJsaWMgbGFzdENoYXI6IEJ1ZmZlcjtcbiAgcHVibGljIGxhc3ROZWVkID0gMDtcbiAgcHVibGljIGxhc3RUb3RhbCA9IDA7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbmNvZGluZzogc3RyaW5nLCBuYjogbnVtYmVyKSB7XG4gICAgdGhpcy5sYXN0Q2hhciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuYik7XG4gIH1cbn1cblxuY2xhc3MgQmFzZTY0RGVjb2RlciBleHRlbmRzIFN0cmluZ0RlY29kZXJCYXNlIHtcbiAgcHVibGljIGVuZCA9IGJhc2U2NEVuZDtcbiAgcHVibGljIGZpbGxMYXN0ID0gdXRmOEZpbGxMYXN0SW5jb21wbGV0ZTtcbiAgcHVibGljIHRleHQgPSBiYXNlNjRUZXh0O1xuICBwdWJsaWMgd3JpdGUgPSB1dGY4V3JpdGU7XG5cbiAgY29uc3RydWN0b3IoZW5jb2Rpbmc/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZyksIDMpO1xuICB9XG59XG5cbmNsYXNzIEdlbmVyaWNEZWNvZGVyIGV4dGVuZHMgU3RyaW5nRGVjb2RlckJhc2Uge1xuICBwdWJsaWMgZW5kID0gc2ltcGxlRW5kO1xuICBwdWJsaWMgZmlsbExhc3QgPSB1bmRlZmluZWQ7XG4gIHB1YmxpYyB0ZXh0ID0gdXRmOFRleHQ7XG4gIHB1YmxpYyB3cml0ZSA9IHNpbXBsZVdyaXRlO1xuXG4gIGNvbnN0cnVjdG9yKGVuY29kaW5nPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpLCA0KTtcbiAgfVxufVxuXG5jbGFzcyBVdGY4RGVjb2RlciBleHRlbmRzIFN0cmluZ0RlY29kZXJCYXNlIHtcbiAgcHVibGljIGVuZCA9IHV0ZjhFbmQ7XG4gIHB1YmxpYyBmaWxsTGFzdCA9IHV0ZjhGaWxsTGFzdENvbXBsZXRlO1xuICBwdWJsaWMgdGV4dCA9IHV0ZjhUZXh0O1xuICBwdWJsaWMgd3JpdGUgPSB1dGY4V3JpdGU7XG5cbiAgY29uc3RydWN0b3IoZW5jb2Rpbmc/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihub3JtYWxpemVFbmNvZGluZyhlbmNvZGluZyksIDQpO1xuICB9XG59XG5cbi8qXG4gKiBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4gKiBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbiAqIGNoYXJhY3RlcnMuXG4gKiAqL1xuZXhwb3J0IGNsYXNzIFN0cmluZ0RlY29kZXIge1xuICBwdWJsaWMgZW5jb2Rpbmc6IHN0cmluZztcbiAgcHVibGljIGVuZDogKGJ1Zj86IEJ1ZmZlcikgPT4gc3RyaW5nO1xuICBwdWJsaWMgZmlsbExhc3Q6ICgoYnVmOiBCdWZmZXIpID0+IHN0cmluZyB8IHVuZGVmaW5lZCkgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBsYXN0Q2hhcjogQnVmZmVyO1xuICBwdWJsaWMgbGFzdE5lZWQ6IG51bWJlcjtcbiAgcHVibGljIGxhc3RUb3RhbDogbnVtYmVyO1xuICBwdWJsaWMgdGV4dDogKGJ1ZjogQnVmZmVyLCBuOiBudW1iZXIpID0+IHN0cmluZztcbiAgcHVibGljIHdyaXRlOiAoYnVmOiBCdWZmZXIpID0+IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihlbmNvZGluZz86IHN0cmluZykge1xuICAgIGxldCBkZWNvZGVyO1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgIGRlY29kZXIgPSBuZXcgVXRmOERlY29kZXIoZW5jb2RpbmcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJiYXNlNjRcIjpcbiAgICAgICAgZGVjb2RlciA9IG5ldyBCYXNlNjREZWNvZGVyKGVuY29kaW5nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBkZWNvZGVyID0gbmV3IEdlbmVyaWNEZWNvZGVyKGVuY29kaW5nKTtcbiAgICB9XG4gICAgdGhpcy5lbmNvZGluZyA9IGRlY29kZXIuZW5jb2Rpbmc7XG4gICAgdGhpcy5lbmQgPSBkZWNvZGVyLmVuZDtcbiAgICB0aGlzLmZpbGxMYXN0ID0gZGVjb2Rlci5maWxsTGFzdDtcbiAgICB0aGlzLmxhc3RDaGFyID0gZGVjb2Rlci5sYXN0Q2hhcjtcbiAgICB0aGlzLmxhc3ROZWVkID0gZGVjb2Rlci5sYXN0TmVlZDtcbiAgICB0aGlzLmxhc3RUb3RhbCA9IGRlY29kZXIubGFzdFRvdGFsO1xuICAgIHRoaXMudGV4dCA9IGRlY29kZXIudGV4dDtcbiAgICB0aGlzLndyaXRlID0gZGVjb2Rlci53cml0ZTtcbiAgfVxufVxuLy8gQWxsb3cgY2FsbGluZyBTdHJpbmdEZWNvZGVyKCkgd2l0aG91dCBuZXdcbmNvbnN0IFBTdHJpbmdEZWNvZGVyID0gbmV3IFByb3h5KFN0cmluZ0RlY29kZXIsIHtcbiAgYXBwbHkoX3RhcmdldCwgdGhpc0FyZywgYXJncykge1xuICAgIC8vIEB0cy1pZ25vcmUgdGVkaW91cyB0byByZXBsaWNhdGUgdHlwZXMgLi4uXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGhpc0FyZywgbmV3IFN0cmluZ0RlY29kZXIoLi4uYXJncykpO1xuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHsgU3RyaW5nRGVjb2RlcjogUFN0cmluZ0RlY29kZXIgfTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCBhbmQgTm9kZSBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gZGVuby1saW50LWlnbm9yZS1maWxlXG5cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCIuLi8uLi9idWZmZXIudHNcIjtcbmltcG9ydCB7IGluc3BlY3QgfSBmcm9tIFwiLi4vdXRpbC9pbnNwZWN0Lm1qc1wiO1xuXG5jbGFzcyBCdWZmZXJMaXN0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gbnVsbDtcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHB1c2godikge1xuICAgIGNvbnN0IGVudHJ5ID0geyBkYXRhOiB2LCBuZXh0OiBudWxsIH07XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy50YWlsLm5leHQgPSBlbnRyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgfVxuICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICAgICsrdGhpcy5sZW5ndGg7XG4gIH1cblxuICB1bnNoaWZ0KHYpIHtcbiAgICBjb25zdCBlbnRyeSA9IHsgZGF0YTogdiwgbmV4dDogdGhpcy5oZWFkIH07XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgICB9XG4gICAgdGhpcy5oZWFkID0gZW50cnk7XG4gICAgKyt0aGlzLmxlbmd0aDtcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXQgPSB0aGlzLmhlYWQuZGF0YTtcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0O1xuICAgIH1cbiAgICAtLXRoaXMubGVuZ3RoO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIGpvaW4ocykge1xuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGxldCBwID0gdGhpcy5oZWFkO1xuICAgIGxldCByZXQgPSBcIlwiICsgcC5kYXRhO1xuICAgIHdoaWxlIChwID0gcC5uZXh0KSB7XG4gICAgICByZXQgKz0gcyArIHAuZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGNvbmNhdChuKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuICAgIH1cbiAgICBjb25zdCByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobiA+Pj4gMCk7XG4gICAgbGV0IHAgPSB0aGlzLmhlYWQ7XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChwKSB7XG4gICAgICByZXQuc2V0KHAuZGF0YSwgaSk7XG4gICAgICBpICs9IHAuZGF0YS5sZW5ndGg7XG4gICAgICBwID0gcC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLy8gQ29uc3VtZXMgYSBzcGVjaWZpZWQgYW1vdW50IG9mIGJ5dGVzIG9yIGNoYXJhY3RlcnMgZnJvbSB0aGUgYnVmZmVyZWQgZGF0YS5cbiAgY29uc3VtZShuLCBoYXNTdHJpbmdzKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuaGVhZC5kYXRhO1xuICAgIGlmIChuIDwgZGF0YS5sZW5ndGgpIHtcbiAgICAgIC8vIGBzbGljZWAgaXMgdGhlIHNhbWUgZm9yIGJ1ZmZlcnMgYW5kIHN0cmluZ3MuXG4gICAgICBjb25zdCBzbGljZSA9IGRhdGEuc2xpY2UoMCwgbik7XG4gICAgICB0aGlzLmhlYWQuZGF0YSA9IGRhdGEuc2xpY2Uobik7XG4gICAgICByZXR1cm4gc2xpY2U7XG4gICAgfVxuICAgIGlmIChuID09PSBkYXRhLmxlbmd0aCkge1xuICAgICAgLy8gRmlyc3QgY2h1bmsgaXMgYSBwZXJmZWN0IG1hdGNoLlxuICAgICAgcmV0dXJuIHRoaXMuc2hpZnQoKTtcbiAgICB9XG4gICAgLy8gUmVzdWx0IHNwYW5zIG1vcmUgdGhhbiBvbmUgYnVmZmVyLlxuICAgIHJldHVybiBoYXNTdHJpbmdzID8gdGhpcy5fZ2V0U3RyaW5nKG4pIDogdGhpcy5fZ2V0QnVmZmVyKG4pO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5kYXRhO1xuICB9XG5cbiAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIGZvciAobGV0IHAgPSB0aGlzLmhlYWQ7IHA7IHAgPSBwLm5leHQpIHtcbiAgICAgIHlpZWxkIHAuZGF0YTtcbiAgICB9XG4gIH1cblxuICAvLyBDb25zdW1lcyBhIHNwZWNpZmllZCBhbW91bnQgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICBfZ2V0U3RyaW5nKG4pIHtcbiAgICBsZXQgcmV0ID0gXCJcIjtcbiAgICBsZXQgcCA9IHRoaXMuaGVhZDtcbiAgICBsZXQgYyA9IDA7XG4gICAgZG8ge1xuICAgICAgY29uc3Qgc3RyID0gcC5kYXRhO1xuICAgICAgaWYgKG4gPiBzdHIubGVuZ3RoKSB7XG4gICAgICAgIHJldCArPSBzdHI7XG4gICAgICAgIG4gLT0gc3RyLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuID09PSBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0ICs9IHN0cjtcbiAgICAgICAgICArK2M7XG4gICAgICAgICAgaWYgKHAubmV4dCkge1xuICAgICAgICAgICAgdGhpcy5oZWFkID0gcC5uZXh0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgKz0gc3RyLnNsaWNlKDAsIG4pO1xuICAgICAgICAgIHRoaXMuaGVhZCA9IHA7XG4gICAgICAgICAgcC5kYXRhID0gc3RyLnNsaWNlKG4pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgKytjO1xuICAgIH0gd2hpbGUgKHAgPSBwLm5leHQpO1xuICAgIHRoaXMubGVuZ3RoIC09IGM7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIENvbnN1bWVzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiBieXRlcyBmcm9tIHRoZSBidWZmZXJlZCBkYXRhLlxuICBfZ2V0QnVmZmVyKG4pIHtcbiAgICBjb25zdCByZXQgPSBCdWZmZXIuYWxsb2NVbnNhZmUobik7XG4gICAgY29uc3QgcmV0TGVuID0gbjtcbiAgICBsZXQgcCA9IHRoaXMuaGVhZDtcbiAgICBsZXQgYyA9IDA7XG4gICAgZG8ge1xuICAgICAgY29uc3QgYnVmID0gcC5kYXRhO1xuICAgICAgaWYgKG4gPiBidWYubGVuZ3RoKSB7XG4gICAgICAgIHJldC5zZXQoYnVmLCByZXRMZW4gLSBuKTtcbiAgICAgICAgbiAtPSBidWYubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG4gPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICAgICAgICByZXQuc2V0KGJ1ZiwgcmV0TGVuIC0gbik7XG4gICAgICAgICAgKytjO1xuICAgICAgICAgIGlmIChwLm5leHQpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IHAubmV4dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0LnNldChcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBuKSxcbiAgICAgICAgICAgIHJldExlbiAtIG4sXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmhlYWQgPSBwO1xuICAgICAgICAgIHAuZGF0YSA9IGJ1Zi5zbGljZShuKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgICsrYztcbiAgICB9IHdoaWxlIChwID0gcC5uZXh0KTtcbiAgICB0aGlzLmxlbmd0aCAtPSBjO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhlIGxpbmtlZCBsaXN0IG9ubHkgc2hvd3MgdGhlIG1pbmltYWwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLlxuICBbaW5zcGVjdC5jdXN0b21dKF8sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gaW5zcGVjdCh0aGlzLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgLy8gT25seSBpbnNwZWN0IG9uZSBsZXZlbC5cbiAgICAgIGRlcHRoOiAwLFxuICAgICAgLy8gSXQgc2hvdWxkIG5vdCByZWN1cnNlLlxuICAgICAgY3VzdG9tSW5zcGVjdDogZmFsc2UsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQnVmZmVyTGlzdDtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCBhbmQgTm9kZSBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gZGVuby1saW50LWlnbm9yZS1maWxlXG5cbmltcG9ydCB7IGFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZSB9IGZyb20gXCIuL2FkZC1hYm9ydC1zaWduYWwubWpzXCI7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiLi4vLi4vYnVmZmVyLnRzXCI7XG5pbXBvcnQgeyBkZWJ1Z2xvZyB9IGZyb20gXCIuLi91dGlsL2RlYnVnbG9nLnRzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0SGlnaFdhdGVyTWFyaywgZ2V0SGlnaFdhdGVyTWFyayB9IGZyb20gXCIuL3N0YXRlLm1qc1wiO1xuaW1wb3J0IHsgcHJlcGVuZExpc3RlbmVyLCBTdHJlYW0gfSBmcm9tIFwiLi9sZWdhY3kubWpzXCI7XG5pbXBvcnQgeyBTdHJpbmdEZWNvZGVyIH0gZnJvbSBcIi4uLy4uL3N0cmluZ19kZWNvZGVyLnRzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUJvb2xlYW4sIHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4uL3ZhbGlkYXRvcnMubWpzXCI7XG5pbXBvcnQge1xuICBFUlJfSU5WQUxJRF9BUkdfVFlQRSxcbiAgRVJSX0lOVkFMSURfQVJHX1ZBTFVFLFxuICBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxcbiAgRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixcbiAgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCxcbn0gZnJvbSBcIi4uL2Vycm9ycy50c1wiO1xuaW1wb3J0IHsgbmV4dFRpY2sgfSBmcm9tIFwiLi4vLi4vX25leHRfdGljay50c1wiO1xuaW1wb3J0IHsgc3RkaW8gfSBmcm9tIFwiLi4vLi4vX3Byb2Nlc3Mvc3RkaW8ubWpzXCI7XG5pbXBvcnQgX2Zyb20gZnJvbSBcIi4vZnJvbS5tanNcIjtcbmltcG9ydCBCdWZmZXJMaXN0IGZyb20gXCIuL2J1ZmZlcl9saXN0Lm1qc1wiO1xuaW1wb3J0IGRlc3Ryb3lJbXBsIGZyb20gXCIuL2Rlc3Ryb3kubWpzXCI7XG5pbXBvcnQgRUUgZnJvbSBcIi4uLy4uL2V2ZW50cy50c1wiO1xuaW1wb3J0IHsgaXNSZWFkYWJsZUVuZGVkIH0gZnJvbSBcIi4vdXRpbHMubWpzXCI7XG5cbmxldCBkZWJ1ZyA9IGRlYnVnbG9nKFwic3RyZWFtXCIsIChmbikgPT4ge1xuICBkZWJ1ZyA9IGZuO1xufSk7XG5cbmNvbnN0IGtQYXVzZWQgPSBTeW1ib2woXCJrUGF1c2VkXCIpO1xuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoUmVhZGFibGUucHJvdG90eXBlLCBTdHJlYW0ucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihSZWFkYWJsZSwgU3RyZWFtKTtcbmNvbnN0IG5vcCA9ICgpID0+IHt9O1xuXG5jb25zdCB7IGVycm9yT3JEZXN0cm95IH0gPSBkZXN0cm95SW1wbDtcblxuZnVuY3Rpb24gUmVhZGFibGVTdGF0ZShvcHRpb25zLCBzdHJlYW0sIGlzRHVwbGV4KSB7XG4gIC8vIER1cGxleCBzdHJlYW1zIGFyZSBib3RoIHJlYWRhYmxlIGFuZCB3cml0YWJsZSwgYnV0IHNoYXJlXG4gIC8vIHRoZSBzYW1lIG9wdGlvbnMgb2JqZWN0LlxuICAvLyBIb3dldmVyLCBzb21lIGNhc2VzIHJlcXVpcmUgc2V0dGluZyBvcHRpb25zIHRvIGRpZmZlcmVudFxuICAvLyB2YWx1ZXMgZm9yIHRoZSByZWFkYWJsZSBhbmQgdGhlIHdyaXRhYmxlIHNpZGVzIG9mIHRoZSBkdXBsZXggc3RyZWFtLlxuICAvLyBUaGVzZSBvcHRpb25zIGNhbiBiZSBwcm92aWRlZCBzZXBhcmF0ZWx5IGFzIHJlYWRhYmxlWFhYIGFuZCB3cml0YWJsZVhYWC5cbiAgaWYgKHR5cGVvZiBpc0R1cGxleCAhPT0gXCJib29sZWFuXCIpIHtcbiAgICBpc0R1cGxleCA9IHN0cmVhbSBpbnN0YW5jZW9mIFN0cmVhbS5EdXBsZXg7XG4gIH1cblxuICAvLyBPYmplY3Qgc3RyZWFtIGZsYWcuIFVzZWQgdG8gbWFrZSByZWFkKG4pIGlnbm9yZSBuIGFuZCB0b1xuICAvLyBtYWtlIGFsbCB0aGUgYnVmZmVyIG1lcmdpbmcgYW5kIGxlbmd0aCBjaGVja3MgZ28gYXdheS5cbiAgdGhpcy5vYmplY3RNb2RlID0gISEob3B0aW9ucyAmJiBvcHRpb25zLm9iamVjdE1vZGUpO1xuXG4gIGlmIChpc0R1cGxleCkge1xuICAgIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fFxuICAgICAgISEob3B0aW9ucyAmJiBvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSk7XG4gIH1cblxuICAvLyBUaGUgcG9pbnQgYXQgd2hpY2ggaXQgc3RvcHMgY2FsbGluZyBfcmVhZCgpIHRvIGZpbGwgdGhlIGJ1ZmZlclxuICAvLyBOb3RlOiAwIGlzIGEgdmFsaWQgdmFsdWUsIG1lYW5zIFwiZG9uJ3QgY2FsbCBfcmVhZCBwcmVlbXB0aXZlbHkgZXZlclwiXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IG9wdGlvbnNcbiAgICA/IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgXCJyZWFkYWJsZUhpZ2hXYXRlck1hcmtcIiwgaXNEdXBsZXgpXG4gICAgOiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhmYWxzZSk7XG5cbiAgLy8gQSBsaW5rZWQgbGlzdCBpcyB1c2VkIHRvIHN0b3JlIGRhdGEgY2h1bmtzIGluc3RlYWQgb2YgYW4gYXJyYXkgYmVjYXVzZSB0aGVcbiAgLy8gbGlua2VkIGxpc3QgY2FuIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgZmFzdGVyIHRoYW5cbiAgLy8gYXJyYXkuc2hpZnQoKS5cbiAgdGhpcy5idWZmZXIgPSBuZXcgQnVmZmVyTGlzdCgpO1xuICB0aGlzLmxlbmd0aCA9IDA7XG4gIHRoaXMucGlwZXMgPSBbXTtcbiAgdGhpcy5mbG93aW5nID0gbnVsbDtcbiAgdGhpcy5lbmRlZCA9IGZhbHNlO1xuICB0aGlzLmVuZEVtaXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5yZWFkaW5nID0gZmFsc2U7XG5cbiAgLy8gU3RyZWFtIGlzIHN0aWxsIGJlaW5nIGNvbnN0cnVjdGVkIGFuZCBjYW5ub3QgYmVcbiAgLy8gZGVzdHJveWVkIHVudGlsIGNvbnN0cnVjdGlvbiBmaW5pc2hlZCBvciBmYWlsZWQuXG4gIC8vIEFzeW5jIGNvbnN0cnVjdGlvbiBpcyBvcHQgaW4sIHRoZXJlZm9yZSB3ZSBzdGFydCBhc1xuICAvLyBjb25zdHJ1Y3RlZC5cbiAgdGhpcy5jb25zdHJ1Y3RlZCA9IHRydWU7XG5cbiAgLy8gQSBmbGFnIHRvIGJlIGFibGUgdG8gdGVsbCBpZiB0aGUgZXZlbnQgJ3JlYWRhYmxlJy8nZGF0YScgaXMgZW1pdHRlZFxuICAvLyBpbW1lZGlhdGVseSwgb3Igb24gYSBsYXRlciB0aWNrLiAgV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBhdCBmaXJzdCwgYmVjYXVzZVxuICAvLyBhbnkgYWN0aW9ucyB0aGF0IHNob3VsZG4ndCBoYXBwZW4gdW50aWwgXCJsYXRlclwiIHNob3VsZCBnZW5lcmFsbHkgYWxzb1xuICAvLyBub3QgaGFwcGVuIGJlZm9yZSB0aGUgZmlyc3QgcmVhZCBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIFdoZW5ldmVyIHdlIHJldHVybiBudWxsLCB0aGVuIHdlIHNldCBhIGZsYWcgdG8gc2F5XG4gIC8vIHRoYXQgd2UncmUgYXdhaXRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGVtaXNzaW9uLlxuICB0aGlzLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB0aGlzLnJlYWRhYmxlTGlzdGVuaW5nID0gZmFsc2U7XG4gIHRoaXMucmVzdW1lU2NoZWR1bGVkID0gZmFsc2U7XG4gIHRoaXNba1BhdXNlZF0gPSBudWxsO1xuXG4gIC8vIFRydWUgaWYgdGhlIGVycm9yIHdhcyBhbHJlYWR5IGVtaXR0ZWQgYW5kIHNob3VsZCBub3QgYmUgdGhyb3duIGFnYWluLlxuICB0aGlzLmVycm9yRW1pdHRlZCA9IGZhbHNlO1xuXG4gIC8vIFNob3VsZCBjbG9zZSBiZSBlbWl0dGVkIG9uIGRlc3Ryb3kuIERlZmF1bHRzIHRvIHRydWUuXG4gIHRoaXMuZW1pdENsb3NlID0gIW9wdGlvbnMgfHwgb3B0aW9ucy5lbWl0Q2xvc2UgIT09IGZhbHNlO1xuXG4gIC8vIFNob3VsZCAuZGVzdHJveSgpIGJlIGNhbGxlZCBhZnRlciAnZW5kJyAoYW5kIHBvdGVudGlhbGx5ICdmaW5pc2gnKS5cbiAgdGhpcy5hdXRvRGVzdHJveSA9ICFvcHRpb25zIHx8IG9wdGlvbnMuYXV0b0Rlc3Ryb3kgIT09IGZhbHNlO1xuXG4gIC8vIEhhcyBpdCBiZWVuIGRlc3Ryb3llZC5cbiAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RyZWFtIGhhcyBlcnJvcmVkLiBXaGVuIHRydWUgbm8gZnVydGhlclxuICAvLyBfcmVhZCBjYWxscywgJ2RhdGEnIG9yICdyZWFkYWJsZScgZXZlbnRzIHNob3VsZCBvY2N1ci4gVGhpcyBpcyBuZWVkZWRcbiAgLy8gc2luY2Ugd2hlbiBhdXRvRGVzdHJveSBpcyBkaXNhYmxlZCB3ZSBuZWVkIGEgd2F5IHRvIHRlbGwgd2hldGhlciB0aGVcbiAgLy8gc3RyZWFtIGhhcyBmYWlsZWQuXG4gIHRoaXMuZXJyb3JlZCA9IG51bGw7XG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmluaXNoZWQgZGVzdHJveWluZy5cbiAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcblxuICAvLyBUcnVlIGlmIGNsb3NlIGhhcyBiZWVuIGVtaXR0ZWQgb3Igd291bGQgaGF2ZSBiZWVuIGVtaXR0ZWRcbiAgLy8gZGVwZW5kaW5nIG9uIGVtaXRDbG9zZS5cbiAgdGhpcy5jbG9zZUVtaXR0ZWQgPSBmYWxzZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKSB8fCBcInV0ZjhcIjtcblxuICAvLyBSZWYgdGhlIHBpcGVkIGRlc3Qgd2hpY2ggd2UgbmVlZCBhIGRyYWluIGV2ZW50IG9uIGl0XG4gIC8vIHR5cGU6IG51bGwgfCBXcml0YWJsZSB8IFNldDxXcml0YWJsZT4uXG4gIHRoaXMuYXdhaXREcmFpbldyaXRlcnMgPSBudWxsO1xuICB0aGlzLm11bHRpQXdhaXREcmFpbiA9IGZhbHNlO1xuXG4gIC8vIElmIHRydWUsIGEgbWF5YmVSZWFkTW9yZSBoYXMgYmVlbiBzY2hlZHVsZWQuXG4gIHRoaXMucmVhZGluZ01vcmUgPSBmYWxzZTtcblxuICB0aGlzLmRhdGFFbWl0dGVkID0gZmFsc2U7XG5cbiAgdGhpcy5kZWNvZGVyID0gbnVsbDtcbiAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihvcHRpb25zLmVuY29kaW5nKTtcbiAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9ucy5lbmNvZGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBSZWFkYWJsZShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWFkYWJsZSkpIHtcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlKG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gQ2hlY2tpbmcgZm9yIGEgU3RyZWFtLkR1cGxleCBpbnN0YW5jZSBpcyBmYXN0ZXIgaGVyZSBpbnN0ZWFkIG9mIGluc2lkZVxuICAvLyB0aGUgUmVhZGFibGVTdGF0ZSBjb25zdHJ1Y3RvciwgYXQgbGVhc3Qgd2l0aCBWOCA2LjUuXG4gIGNvbnN0IGlzRHVwbGV4ID0gdGhpcyBpbnN0YW5jZW9mIFN0cmVhbS5EdXBsZXg7XG5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9IG5ldyBSZWFkYWJsZVN0YXRlKG9wdGlvbnMsIHRoaXMsIGlzRHVwbGV4KTtcblxuICBpZiAob3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWFkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3JlYWQgPSBvcHRpb25zLnJlYWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmRlc3Ryb3kgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fZGVzdHJveSA9IG9wdGlvbnMuZGVzdHJveTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29uc3RydWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaWduYWwgJiYgIWlzRHVwbGV4KSB7XG4gICAgICBhZGRBYm9ydFNpZ25hbE5vVmFsaWRhdGUob3B0aW9ucy5zaWduYWwsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIFN0cmVhbS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXG4gIGRlc3Ryb3lJbXBsLmNvbnN0cnVjdCh0aGlzLCAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlKSB7XG4gICAgICBtYXliZVJlYWRNb3JlKHRoaXMsIHRoaXMuX3JlYWRhYmxlU3RhdGUpO1xuICAgIH1cbiAgfSk7XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcblJlYWRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuUmVhZGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07XG5cblJlYWRhYmxlLnByb3RvdHlwZVtFRS5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgdGhpcy5kZXN0cm95KGVycik7XG59O1xuXG4vLyBNYW51YWxseSBzaG92ZSBzb21ldGhpbmcgaW50byB0aGUgcmVhZCgpIGJ1ZmZlci5cbi8vIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBoaWdoV2F0ZXJNYXJrIGhhcyBub3QgYmVlbiBoaXQgeWV0LFxuLy8gc2ltaWxhciB0byBob3cgV3JpdGFibGUud3JpdGUoKSByZXR1cm5zIHRydWUgaWYgeW91IHNob3VsZFxuLy8gd3JpdGUoKSBzb21lIG1vcmUuXG5SZWFkYWJsZS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHJlYWRhYmxlQWRkQ2h1bmsodGhpcywgY2h1bmssIGVuY29kaW5nLCBmYWxzZSk7XG59O1xuXG4vLyBVbnNoaWZ0IHNob3VsZCAqYWx3YXlzKiBiZSBzb21ldGhpbmcgZGlyZWN0bHkgb3V0IG9mIHJlYWQoKS5cblJlYWRhYmxlLnByb3RvdHlwZS51bnNoaWZ0ID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZykge1xuICByZXR1cm4gcmVhZGFibGVBZGRDaHVuayh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIHRydWUpO1xufTtcblxuZnVuY3Rpb24gcmVhZGFibGVBZGRDaHVuayhzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgYWRkVG9Gcm9udCkge1xuICBkZWJ1ZyhcInJlYWRhYmxlQWRkQ2h1bmtcIiwgY2h1bmspO1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcblxuICBsZXQgZXJyO1xuICBpZiAoIXN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBlbmNvZGluZyA9IGVuY29kaW5nIHx8IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICAgIGlmIChzdGF0ZS5lbmNvZGluZyAhPT0gZW5jb2RpbmcpIHtcbiAgICAgICAgaWYgKGFkZFRvRnJvbnQgJiYgc3RhdGUuZW5jb2RpbmcpIHtcbiAgICAgICAgICAvLyBXaGVuIHVuc2hpZnRpbmcsIGlmIHN0YXRlLmVuY29kaW5nIGlzIHNldCwgd2UgaGF2ZSB0byBzYXZlXG4gICAgICAgICAgLy8gdGhlIHN0cmluZyBpbiB0aGUgQnVmZmVyTGlzdCB3aXRoIHRoZSBzdGF0ZSBlbmNvZGluZy5cbiAgICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZykudG9TdHJpbmcoc3RhdGUuZW5jb2RpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgICBlbmNvZGluZyA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNodW5rIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICBlbmNvZGluZyA9IFwiXCI7XG4gICAgfSBlbHNlIGlmIChTdHJlYW0uX2lzVWludDhBcnJheShjaHVuaykpIHtcbiAgICAgIGNodW5rID0gU3RyZWFtLl91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICAgICAgZW5jb2RpbmcgPSBcIlwiO1xuICAgIH0gZWxzZSBpZiAoY2h1bmsgIT0gbnVsbCkge1xuICAgICAgZXJyID0gbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgICBcImNodW5rXCIsXG4gICAgICAgIFtcInN0cmluZ1wiLCBcIkJ1ZmZlclwiLCBcIlVpbnQ4QXJyYXlcIl0sXG4gICAgICAgIGNodW5rLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBlcnIpO1xuICB9IGVsc2UgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSk7XG4gIH0gZWxzZSBpZiAoc3RhdGUub2JqZWN0TW9kZSB8fCAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoID4gMCkpIHtcbiAgICBpZiAoYWRkVG9Gcm9udCkge1xuICAgICAgaWYgKHN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0YXRlLmVuZGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIG5ldyBFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GKCkpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUuZGVzdHJveWVkIHx8IHN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUucmVhZGluZyA9IGZhbHNlO1xuICAgICAgaWYgKHN0YXRlLmRlY29kZXIgJiYgIWVuY29kaW5nKSB7XG4gICAgICAgIGNodW5rID0gc3RhdGUuZGVjb2Rlci53cml0ZShjaHVuayk7XG4gICAgICAgIGlmIChzdGF0ZS5vYmplY3RNb2RlIHx8IGNodW5rLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIGFkZENodW5rKHN0cmVhbSwgc3RhdGUsIGNodW5rLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkQ2h1bmsoc3RyZWFtLCBzdGF0ZSwgY2h1bmssIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoIWFkZFRvRnJvbnQpIHtcbiAgICBzdGF0ZS5yZWFkaW5nID0gZmFsc2U7XG4gICAgbWF5YmVSZWFkTW9yZShzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIC8vIFdlIGNhbiBwdXNoIG1vcmUgZGF0YSBpZiB3ZSBhcmUgYmVsb3cgdGhlIGhpZ2hXYXRlck1hcmsuXG4gIC8vIEFsc28sIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXQsIHdlIGNhbiBzdGFuZCBzb21lIG1vcmUgYnl0ZXMuXG4gIC8vIFRoaXMgaXMgdG8gd29yayBhcm91bmQgY2FzZXMgd2hlcmUgaHdtPTAsIHN1Y2ggYXMgdGhlIHJlcGwuXG4gIHJldHVybiAhc3RhdGUuZW5kZWQgJiZcbiAgICAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyayB8fCBzdGF0ZS5sZW5ndGggPT09IDApO1xufVxuXG5mdW5jdGlvbiBhZGRDaHVuayhzdHJlYW0sIHN0YXRlLCBjaHVuaywgYWRkVG9Gcm9udCkge1xuICBpZiAoXG4gICAgc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDAgJiYgIXN0YXRlLnN5bmMgJiZcbiAgICBzdHJlYW0ubGlzdGVuZXJDb3VudChcImRhdGFcIikgPiAwXG4gICkge1xuICAgIC8vIFVzZSB0aGUgZ3VhcmQgdG8gYXZvaWQgY3JlYXRpbmcgYFNldCgpYCByZXBlYXRlZGx5XG4gICAgLy8gd2hlbiB3ZSBoYXZlIG11bHRpcGxlIHBpcGVzLlxuICAgIGlmIChzdGF0ZS5tdWx0aUF3YWl0RHJhaW4pIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmNsZWFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgc3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KFwiZGF0YVwiLCBjaHVuayk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXBkYXRlIHRoZSBidWZmZXIgaW5mby5cbiAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgaWYgKGFkZFRvRnJvbnQpIHtcbiAgICAgIHN0YXRlLmJ1ZmZlci51bnNoaWZ0KGNodW5rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUuYnVmZmVyLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5uZWVkUmVhZGFibGUpIHtcbiAgICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICAgIH1cbiAgfVxuICBtYXliZVJlYWRNb3JlKHN0cmVhbSwgc3RhdGUpO1xufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUuaXNQYXVzZWQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHN0YXRlID0gdGhpcy5fcmVhZGFibGVTdGF0ZTtcbiAgcmV0dXJuIHN0YXRlW2tQYXVzZWRdID09PSB0cnVlIHx8IHN0YXRlLmZsb3dpbmcgPT09IGZhbHNlO1xufTtcblxuLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5SZWFkYWJsZS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbiAoZW5jKSB7XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcihlbmMpO1xuICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIgPSBkZWNvZGVyO1xuICAvLyBJZiBzZXRFbmNvZGluZyhudWxsKSwgZGVjb2Rlci5lbmNvZGluZyBlcXVhbHMgdXRmOC5cbiAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZyA9IHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztcblxuICBjb25zdCBidWZmZXIgPSB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcjtcbiAgLy8gSXRlcmF0ZSBvdmVyIGN1cnJlbnQgYnVmZmVyIHRvIGNvbnZlcnQgYWxyZWFkeSBzdG9yZWQgQnVmZmVyczpcbiAgbGV0IGNvbnRlbnQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IGRhdGEgb2YgYnVmZmVyKSB7XG4gICAgY29udGVudCArPSBkZWNvZGVyLndyaXRlKGRhdGEpO1xuICB9XG4gIGJ1ZmZlci5jbGVhcigpO1xuICBpZiAoY29udGVudCAhPT0gXCJcIikge1xuICAgIGJ1ZmZlci5wdXNoKGNvbnRlbnQpO1xuICB9XG4gIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoID0gY29udGVudC5sZW5ndGg7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gRG9uJ3QgcmFpc2UgdGhlIGh3bSA+IDFHQi5cbmNvbnN0IE1BWF9IV00gPSAweDQwMDAwMDAwO1xuZnVuY3Rpb24gY29tcHV0ZU5ld0hpZ2hXYXRlck1hcmsobikge1xuICBpZiAobiA+PSBNQVhfSFdNKSB7XG4gICAgLy8gVE9ETyhyb25hZyk6IFRocm93IEVSUl9WQUxVRV9PVVRfT0ZfUkFOR0UuXG4gICAgbiA9IE1BWF9IV007XG4gIH0gZWxzZSB7XG4gICAgLy8gR2V0IHRoZSBuZXh0IGhpZ2hlc3QgcG93ZXIgb2YgMiB0byBwcmV2ZW50IGluY3JlYXNpbmcgaHdtIGV4Y2Vzc2l2ZWx5IGluXG4gICAgLy8gdGlueSBhbW91bnRzLlxuICAgIG4tLTtcbiAgICBuIHw9IG4gPj4+IDE7XG4gICAgbiB8PSBuID4+PiAyO1xuICAgIG4gfD0gbiA+Pj4gNDtcbiAgICBuIHw9IG4gPj4+IDg7XG4gICAgbiB8PSBuID4+PiAxNjtcbiAgICBuKys7XG4gIH1cbiAgcmV0dXJuIG47XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSkge1xuICBpZiAobiA8PSAwIHx8IChzdGF0ZS5sZW5ndGggPT09IDAgJiYgc3RhdGUuZW5kZWQpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBpZiAoTnVtYmVyLmlzTmFOKG4pKSB7XG4gICAgLy8gT25seSBmbG93IG9uZSBidWZmZXIgYXQgYSB0aW1lLlxuICAgIGlmIChzdGF0ZS5mbG93aW5nICYmIHN0YXRlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHN0YXRlLmJ1ZmZlci5maXJzdCgpLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlLmxlbmd0aDtcbiAgfVxuICBpZiAobiA8PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gbjtcbiAgfVxuICByZXR1cm4gc3RhdGUuZW5kZWQgPyBzdGF0ZS5sZW5ndGggOiAwO1xufVxuXG4vLyBZb3UgY2FuIG92ZXJyaWRlIGVpdGhlciB0aGlzIG1ldGhvZCwgb3IgdGhlIGFzeW5jIF9yZWFkKG4pIGJlbG93LlxuUmVhZGFibGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAobikge1xuICBkZWJ1ZyhcInJlYWRcIiwgbik7XG4gIC8vIFNhbWUgYXMgcGFyc2VJbnQodW5kZWZpbmVkLCAxMCksIGhvd2V2ZXIgVjggNy4zIHBlcmZvcm1hbmNlIHJlZ3Jlc3NlZFxuICAvLyBpbiB0aGlzIHNjZW5hcmlvLCBzbyB3ZSBhcmUgZG9pbmcgaXQgbWFudWFsbHkuXG4gIGlmIChuID09PSB1bmRlZmluZWQpIHtcbiAgICBuID0gTmFOO1xuICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG4pKSB7XG4gICAgbiA9IE51bWJlci5wYXJzZUludChuLCAxMCk7XG4gIH1cbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICBjb25zdCBuT3JpZyA9IG47XG5cbiAgLy8gSWYgd2UncmUgYXNraW5nIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgaHdtLCB0aGVuIHJhaXNlIHRoZSBod20uXG4gIGlmIChuID4gc3RhdGUuaGlnaFdhdGVyTWFyaykge1xuICAgIHN0YXRlLmhpZ2hXYXRlck1hcmsgPSBjb21wdXRlTmV3SGlnaFdhdGVyTWFyayhuKTtcbiAgfVxuXG4gIGlmIChuICE9PSAwKSB7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gZmFsc2U7XG4gIH1cblxuICAvLyBJZiB3ZSdyZSBkb2luZyByZWFkKDApIHRvIHRyaWdnZXIgYSByZWFkYWJsZSBldmVudCwgYnV0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhIGJ1bmNoIG9mIGRhdGEgaW4gdGhlIGJ1ZmZlciwgdGhlbiBqdXN0IHRyaWdnZXJcbiAgLy8gdGhlICdyZWFkYWJsZScgZXZlbnQgYW5kIG1vdmUgb24uXG4gIGlmIChcbiAgICBuID09PSAwICYmXG4gICAgc3RhdGUubmVlZFJlYWRhYmxlICYmXG4gICAgKChzdGF0ZS5oaWdoV2F0ZXJNYXJrICE9PSAwXG4gICAgICA/IHN0YXRlLmxlbmd0aCA+PSBzdGF0ZS5oaWdoV2F0ZXJNYXJrXG4gICAgICA6IHN0YXRlLmxlbmd0aCA+IDApIHx8XG4gICAgICBzdGF0ZS5lbmRlZClcbiAgKSB7XG4gICAgZGVidWcoXCJyZWFkOiBlbWl0UmVhZGFibGVcIiwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5lbmRlZCk7XG4gICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkge1xuICAgICAgZW5kUmVhZGFibGUodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXRSZWFkYWJsZSh0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBuID0gaG93TXVjaFRvUmVhZChuLCBzdGF0ZSk7XG5cbiAgLy8gSWYgd2UndmUgZW5kZWQsIGFuZCB3ZSdyZSBub3cgY2xlYXIsIHRoZW4gZmluaXNoIGl0IHVwLlxuICBpZiAobiA9PT0gMCAmJiBzdGF0ZS5lbmRlZCkge1xuICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEFsbCB0aGUgYWN0dWFsIGNodW5rIGdlbmVyYXRpb24gbG9naWMgbmVlZHMgdG8gYmVcbiAgLy8gKmJlbG93KiB0aGUgY2FsbCB0byBfcmVhZC4gIFRoZSByZWFzb24gaXMgdGhhdCBpbiBjZXJ0YWluXG4gIC8vIHN5bnRoZXRpYyBzdHJlYW0gY2FzZXMsIHN1Y2ggYXMgcGFzc3Rocm91Z2ggc3RyZWFtcywgX3JlYWRcbiAgLy8gbWF5IGJlIGEgY29tcGxldGVseSBzeW5jaHJvbm91cyBvcGVyYXRpb24gd2hpY2ggbWF5IGNoYW5nZVxuICAvLyB0aGUgc3RhdGUgb2YgdGhlIHJlYWQgYnVmZmVyLCBwcm92aWRpbmcgZW5vdWdoIGRhdGEgd2hlblxuICAvLyBiZWZvcmUgdGhlcmUgd2FzICpub3QqIGVub3VnaC5cbiAgLy9cbiAgLy8gU28sIHRoZSBzdGVwcyBhcmU6XG4gIC8vIDEuIEZpZ3VyZSBvdXQgd2hhdCB0aGUgc3RhdGUgb2YgdGhpbmdzIHdpbGwgYmUgYWZ0ZXIgd2UgZG9cbiAgLy8gYSByZWFkIGZyb20gdGhlIGJ1ZmZlci5cbiAgLy9cbiAgLy8gMi4gSWYgdGhhdCByZXN1bHRpbmcgc3RhdGUgd2lsbCB0cmlnZ2VyIGEgX3JlYWQsIHRoZW4gY2FsbCBfcmVhZC5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGFzeW5jaHJvbm91cywgb3Igc3luY2hyb25vdXMuICBZZXMsIGl0IGlzXG4gIC8vIGRlZXBseSB1Z2x5IHRvIHdyaXRlIEFQSXMgdGhpcyB3YXksIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJ3QgbWVhblxuICAvLyB0aGF0IHRoZSBSZWFkYWJsZSBjbGFzcyBzaG91bGQgYmVoYXZlIGltcHJvcGVybHksIGFzIHN0cmVhbXMgYXJlXG4gIC8vIGRlc2lnbmVkIHRvIGJlIHN5bmMvYXN5bmMgYWdub3N0aWMuXG4gIC8vIFRha2Ugbm90ZSBpZiB0aGUgX3JlYWQgY2FsbCBpcyBzeW5jIG9yIGFzeW5jIChpZSwgaWYgdGhlIHJlYWQgY2FsbFxuICAvLyBoYXMgcmV0dXJuZWQgeWV0KSwgc28gdGhhdCB3ZSBrbm93IHdoZXRoZXIgb3Igbm90IGl0J3Mgc2FmZSB0byBlbWl0XG4gIC8vICdyZWFkYWJsZScgZXRjLlxuICAvL1xuICAvLyAzLiBBY3R1YWxseSBwdWxsIHRoZSByZXF1ZXN0ZWQgY2h1bmtzIG91dCBvZiB0aGUgYnVmZmVyIGFuZCByZXR1cm4uXG5cbiAgLy8gaWYgd2UgbmVlZCBhIHJlYWRhYmxlIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSByZWFkaW5nLlxuICBsZXQgZG9SZWFkID0gc3RhdGUubmVlZFJlYWRhYmxlO1xuICBkZWJ1ZyhcIm5lZWQgcmVhZGFibGVcIiwgZG9SZWFkKTtcblxuICAvLyBJZiB3ZSBjdXJyZW50bHkgaGF2ZSBsZXNzIHRoYW4gdGhlIGhpZ2hXYXRlck1hcmssIHRoZW4gYWxzbyByZWFkIHNvbWUuXG4gIGlmIChzdGF0ZS5sZW5ndGggPT09IDAgfHwgc3RhdGUubGVuZ3RoIC0gbiA8IHN0YXRlLmhpZ2hXYXRlck1hcmspIHtcbiAgICBkb1JlYWQgPSB0cnVlO1xuICAgIGRlYnVnKFwibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmtcIiwgZG9SZWFkKTtcbiAgfVxuXG4gIC8vIEhvd2V2ZXIsIGlmIHdlJ3ZlIGVuZGVkLCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQsIGlmIHdlJ3JlIGFscmVhZHlcbiAgLy8gcmVhZGluZywgdGhlbiBpdCdzIHVubmVjZXNzYXJ5LCBpZiB3ZSdyZSBjb25zdHJ1Y3Rpbmcgd2UgaGF2ZSB0byB3YWl0LFxuICAvLyBhbmQgaWYgd2UncmUgZGVzdHJveWVkIG9yIGVycm9yZWQsIHRoZW4gaXQncyBub3QgYWxsb3dlZCxcbiAgaWYgKFxuICAgIHN0YXRlLmVuZGVkIHx8IHN0YXRlLnJlYWRpbmcgfHwgc3RhdGUuZGVzdHJveWVkIHx8IHN0YXRlLmVycm9yZWQgfHxcbiAgICAhc3RhdGUuY29uc3RydWN0ZWRcbiAgKSB7XG4gICAgZG9SZWFkID0gZmFsc2U7XG4gICAgZGVidWcoXCJyZWFkaW5nLCBlbmRlZCBvciBjb25zdHJ1Y3RpbmdcIiwgZG9SZWFkKTtcbiAgfSBlbHNlIGlmIChkb1JlYWQpIHtcbiAgICBkZWJ1ZyhcImRvIHJlYWRcIik7XG4gICAgc3RhdGUucmVhZGluZyA9IHRydWU7XG4gICAgc3RhdGUuc3luYyA9IHRydWU7XG4gICAgLy8gSWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgemVybywgdGhlbiB3ZSAqbmVlZCogYSByZWFkYWJsZSBldmVudC5cbiAgICBpZiAoc3RhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIENhbGwgaW50ZXJuYWwgcmVhZCBtZXRob2RcbiAgICB0aGlzLl9yZWFkKHN0YXRlLmhpZ2hXYXRlck1hcmspO1xuXG4gICAgc3RhdGUuc3luYyA9IGZhbHNlO1xuICAgIC8vIElmIF9yZWFkIHB1c2hlZCBkYXRhIHN5bmNocm9ub3VzbHksIHRoZW4gYHJlYWRpbmdgIHdpbGwgYmUgZmFsc2UsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IG11Y2ggZGF0YSB3ZSBjYW4gcmV0dXJuIHRvIHRoZSB1c2VyLlxuICAgIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgbiA9IGhvd011Y2hUb1JlYWQobk9yaWcsIHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBsZXQgcmV0O1xuICBpZiAobiA+IDApIHtcbiAgICByZXQgPSBmcm9tTGlzdChuLCBzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0ID0gbnVsbDtcbiAgfVxuXG4gIGlmIChyZXQgPT09IG51bGwpIHtcbiAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgICBuID0gMDtcbiAgfSBlbHNlIHtcbiAgICBzdGF0ZS5sZW5ndGggLT0gbjtcbiAgICBpZiAoc3RhdGUubXVsdGlBd2FpdERyYWluKSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBpbiB0aGUgYnVmZmVyLCB0aGVuIHdlIHdhbnQgdG8ga25vd1xuICAgIC8vIGFzIHNvb24gYXMgd2UgKmRvKiBnZXQgc29tZXRoaW5nIGludG8gdGhlIGJ1ZmZlci5cbiAgICBpZiAoIXN0YXRlLmVuZGVkKSB7XG4gICAgICBzdGF0ZS5uZWVkUmVhZGFibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIElmIHdlIHRyaWVkIHRvIHJlYWQoKSBwYXN0IHRoZSBFT0YsIHRoZW4gZW1pdCBlbmQgb24gdGhlIG5leHQgdGljay5cbiAgICBpZiAobk9yaWcgIT09IG4gJiYgc3RhdGUuZW5kZWQpIHtcbiAgICAgIGVuZFJlYWRhYmxlKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXQgIT09IG51bGwpIHtcbiAgICBzdGF0ZS5kYXRhRW1pdHRlZCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KFwiZGF0YVwiLCByZXQpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIG9uRW9mQ2h1bmsoc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1ZyhcIm9uRW9mQ2h1bmtcIik7XG4gIGlmIChzdGF0ZS5lbmRlZCkgcmV0dXJuO1xuICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgIGNvbnN0IGNodW5rID0gc3RhdGUuZGVjb2Rlci5lbmQoKTtcbiAgICBpZiAoY2h1bmsgJiYgY2h1bmsubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5idWZmZXIucHVzaChjaHVuayk7XG4gICAgICBzdGF0ZS5sZW5ndGggKz0gc3RhdGUub2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgfVxuICB9XG4gIHN0YXRlLmVuZGVkID0gdHJ1ZTtcblxuICBpZiAoc3RhdGUuc3luYykge1xuICAgIC8vIElmIHdlIGFyZSBzeW5jLCB3YWl0IHVudGlsIG5leHQgdGljayB0byBlbWl0IHRoZSBkYXRhLlxuICAgIC8vIE90aGVyd2lzZSB3ZSByaXNrIGVtaXR0aW5nIGRhdGEgaW4gdGhlIGZsb3coKVxuICAgIC8vIHRoZSByZWFkYWJsZSBjb2RlIHRyaWdnZXJzIGR1cmluZyBhIHJlYWQoKSBjYWxsLlxuICAgIGVtaXRSZWFkYWJsZShzdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIC8vIEVtaXQgJ3JlYWRhYmxlJyBub3cgdG8gbWFrZSBzdXJlIGl0IGdldHMgcGlja2VkIHVwLlxuICAgIHN0YXRlLm5lZWRSZWFkYWJsZSA9IGZhbHNlO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgLy8gV2UgaGF2ZSB0byBlbWl0IHJlYWRhYmxlIG5vdyB0aGF0IHdlIGFyZSBFT0YuIE1vZHVsZXNcbiAgICAvLyBpbiB0aGUgZWNvc3lzdGVtIChlLmcuIGRpY2VyKSByZWx5IG9uIHRoaXMgZXZlbnQgYmVpbmcgc3luYy5cbiAgICBlbWl0UmVhZGFibGVfKHN0cmVhbSk7XG4gIH1cbn1cblxuLy8gRG9uJ3QgZW1pdCByZWFkYWJsZSByaWdodCBhd2F5IGluIHN5bmMgbW9kZSwgYmVjYXVzZSB0aGlzIGNhbiB0cmlnZ2VyXG4vLyBhbm90aGVyIHJlYWQoKSBjYWxsID0+IHN0YWNrIG92ZXJmbG93LiAgVGhpcyB3YXksIGl0IG1pZ2h0IHRyaWdnZXJcbi8vIGEgbmV4dFRpY2sgcmVjdXJzaW9uIHdhcm5pbmcsIGJ1dCB0aGF0J3Mgbm90IHNvIGJhZC5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZShzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGU7XG4gIGRlYnVnKFwiZW1pdFJlYWRhYmxlXCIsIHN0YXRlLm5lZWRSZWFkYWJsZSwgc3RhdGUuZW1pdHRlZFJlYWRhYmxlKTtcbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gZmFsc2U7XG4gIGlmICghc3RhdGUuZW1pdHRlZFJlYWRhYmxlKSB7XG4gICAgZGVidWcoXCJlbWl0UmVhZGFibGVcIiwgc3RhdGUuZmxvd2luZyk7XG4gICAgc3RhdGUuZW1pdHRlZFJlYWRhYmxlID0gdHJ1ZTtcbiAgICBuZXh0VGljayhlbWl0UmVhZGFibGVfLCBzdHJlYW0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRSZWFkYWJsZV8oc3RyZWFtKSB7XG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICBkZWJ1ZyhcImVtaXRSZWFkYWJsZV9cIiwgc3RhdGUuZGVzdHJveWVkLCBzdGF0ZS5sZW5ndGgsIHN0YXRlLmVuZGVkKTtcbiAgaWYgKCFzdGF0ZS5kZXN0cm95ZWQgJiYgIXN0YXRlLmVycm9yZWQgJiYgKHN0YXRlLmxlbmd0aCB8fCBzdGF0ZS5lbmRlZCkpIHtcbiAgICBzdHJlYW0uZW1pdChcInJlYWRhYmxlXCIpO1xuICAgIHN0YXRlLmVtaXR0ZWRSZWFkYWJsZSA9IGZhbHNlO1xuICB9XG5cbiAgLy8gVGhlIHN0cmVhbSBuZWVkcyBhbm90aGVyIHJlYWRhYmxlIGV2ZW50IGlmOlxuICAvLyAxLiBJdCBpcyBub3QgZmxvd2luZywgYXMgdGhlIGZsb3cgbWVjaGFuaXNtIHdpbGwgdGFrZVxuICAvLyAgICBjYXJlIG9mIGl0LlxuICAvLyAyLiBJdCBpcyBub3QgZW5kZWQuXG4gIC8vIDMuIEl0IGlzIGJlbG93IHRoZSBoaWdoV2F0ZXJNYXJrLCBzbyB3ZSBjYW4gc2NoZWR1bGVcbiAgLy8gICAgYW5vdGhlciByZWFkYWJsZSBsYXRlci5cbiAgc3RhdGUubmVlZFJlYWRhYmxlID0gIXN0YXRlLmZsb3dpbmcgJiZcbiAgICAhc3RhdGUuZW5kZWQgJiZcbiAgICBzdGF0ZS5sZW5ndGggPD0gc3RhdGUuaGlnaFdhdGVyTWFyaztcbiAgZmxvdyhzdHJlYW0pO1xufVxuXG4vLyBBdCB0aGlzIHBvaW50LCB0aGUgdXNlciBoYXMgcHJlc3VtYWJseSBzZWVuIHRoZSAncmVhZGFibGUnIGV2ZW50LFxuLy8gYW5kIGNhbGxlZCByZWFkKCkgdG8gY29uc3VtZSBzb21lIGRhdGEuICB0aGF0IG1heSBoYXZlIHRyaWdnZXJlZFxuLy8gaW4gdHVybiBhbm90aGVyIF9yZWFkKG4pIGNhbGwsIGluIHdoaWNoIGNhc2UgcmVhZGluZyA9IHRydWUgaWZcbi8vIGl0J3MgaW4gcHJvZ3Jlc3MuXG4vLyBIb3dldmVyLCBpZiB3ZSdyZSBub3QgZW5kZWQsIG9yIHJlYWRpbmcsIGFuZCB0aGUgbGVuZ3RoIDwgaHdtLFxuLy8gdGhlbiBnbyBhaGVhZCBhbmQgdHJ5IHRvIHJlYWQgc29tZSBtb3JlIHByZWVtcHRpdmVseS5cbmZ1bmN0aW9uIG1heWJlUmVhZE1vcmUoc3RyZWFtLCBzdGF0ZSkge1xuICBpZiAoIXN0YXRlLnJlYWRpbmdNb3JlICYmIHN0YXRlLmNvbnN0cnVjdGVkKSB7XG4gICAgc3RhdGUucmVhZGluZ01vcmUgPSB0cnVlO1xuICAgIG5leHRUaWNrKG1heWJlUmVhZE1vcmVfLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXliZVJlYWRNb3JlXyhzdHJlYW0sIHN0YXRlKSB7XG4gIC8vIEF0dGVtcHQgdG8gcmVhZCBtb3JlIGRhdGEgaWYgd2Ugc2hvdWxkLlxuICAvL1xuICAvLyBUaGUgY29uZGl0aW9ucyBmb3IgcmVhZGluZyBtb3JlIGRhdGEgYXJlIChvbmUgb2YpOlxuICAvLyAtIE5vdCBlbm91Z2ggZGF0YSBidWZmZXJlZCAoc3RhdGUubGVuZ3RoIDwgc3RhdGUuaGlnaFdhdGVyTWFyaykuIFRoZSBsb29wXG4gIC8vICAgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgdGhlIGJ1ZmZlciB3aXRoIGVub3VnaCBkYXRhIGlmIHN1Y2ggZGF0YVxuICAvLyAgIGlzIGF2YWlsYWJsZS4gSWYgaGlnaFdhdGVyTWFyayBpcyAwIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBmbG93aW5nIG1vZGVcbiAgLy8gICB3ZSBzaG91bGQgX25vdF8gYXR0ZW1wdCB0byBidWZmZXIgYW55IGV4dHJhIGRhdGEuIFdlJ2xsIGdldCBtb3JlIGRhdGFcbiAgLy8gICB3aGVuIHRoZSBzdHJlYW0gY29uc3VtZXIgY2FsbHMgcmVhZCgpIGluc3RlYWQuXG4gIC8vIC0gTm8gZGF0YSBpbiB0aGUgYnVmZmVyLCBhbmQgdGhlIHN0cmVhbSBpcyBpbiBmbG93aW5nIG1vZGUuIEluIHRoaXMgbW9kZVxuICAvLyAgIHRoZSBsb29wIGJlbG93IGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyByZWFkKCkgaXMgY2FsbGVkLiBGYWlsaW5nIHRvXG4gIC8vICAgY2FsbCByZWFkIGhlcmUgd291bGQgYWJvcnQgdGhlIGZsb3cgYW5kIHRoZXJlJ3Mgbm8gb3RoZXIgbWVjaGFuaXNtIGZvclxuICAvLyAgIGNvbnRpbnVpbmcgdGhlIGZsb3cgaWYgdGhlIHN0cmVhbSBjb25zdW1lciBoYXMganVzdCBzdWJzY3JpYmVkIHRvIHRoZVxuICAvLyAgICdkYXRhJyBldmVudC5cbiAgLy9cbiAgLy8gSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIGNvbmRpdGlvbnMgdG8ga2VlcCByZWFkaW5nIGRhdGEsIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBwcmV2ZW50IHRoZSBkYXRhIGZyb20gYmVpbmcgcmVhZDpcbiAgLy8gLSBUaGUgc3RyZWFtIGhhcyBlbmRlZCAoc3RhdGUuZW5kZWQpLlxuICAvLyAtIFRoZXJlIGlzIGFscmVhZHkgYSBwZW5kaW5nICdyZWFkJyBvcGVyYXRpb24gKHN0YXRlLnJlYWRpbmcpLiBUaGlzIGlzIGFcbiAgLy8gICBjYXNlIHdoZXJlIHRoZSBzdHJlYW0gaGFzIGNhbGxlZCB0aGUgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBfcmVhZCgpXG4gIC8vICAgbWV0aG9kLCBidXQgdGhleSBhcmUgcHJvY2Vzc2luZyB0aGUgY2FsbCBhc3luY2hyb25vdXNseSBhbmQgaGF2ZSBfbm90X1xuICAvLyAgIGNhbGxlZCBwdXNoKCkgd2l0aCBuZXcgZGF0YS4gSW4gdGhpcyBjYXNlIHdlIHNraXAgcGVyZm9ybWluZyBtb3JlXG4gIC8vICAgcmVhZCgpcy4gVGhlIGV4ZWN1dGlvbiBlbmRzIGluIHRoaXMgbWV0aG9kIGFnYWluIGFmdGVyIHRoZSBfcmVhZCgpIGVuZHNcbiAgLy8gICB1cCBjYWxsaW5nIHB1c2goKSB3aXRoIG1vcmUgZGF0YS5cbiAgd2hpbGUgKFxuICAgICFzdGF0ZS5yZWFkaW5nICYmICFzdGF0ZS5lbmRlZCAmJlxuICAgIChzdGF0ZS5sZW5ndGggPCBzdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8XG4gICAgICAoc3RhdGUuZmxvd2luZyAmJiBzdGF0ZS5sZW5ndGggPT09IDApKVxuICApIHtcbiAgICBjb25zdCBsZW4gPSBzdGF0ZS5sZW5ndGg7XG4gICAgZGVidWcoXCJtYXliZVJlYWRNb3JlIHJlYWQgMFwiKTtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgICBpZiAobGVuID09PSBzdGF0ZS5sZW5ndGgpIHtcbiAgICAgIC8vIERpZG4ndCBnZXQgYW55IGRhdGEsIHN0b3Agc3Bpbm5pbmcuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhdGUucmVhZGluZ01vcmUgPSBmYWxzZTtcbn1cblxuLy8gQWJzdHJhY3QgbWV0aG9kLiAgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLlxuLy8gY2FsbCBjYihlciwgZGF0YSkgd2hlcmUgZGF0YSBpcyA8PSBuIGluIGxlbmd0aC5cbi8vIGZvciB2aXJ0dWFsIChub24tc3RyaW5nLCBub24tYnVmZmVyKSBzdHJlYW1zLCBcImxlbmd0aFwiIGlzIHNvbWV3aGF0XG4vLyBhcmJpdHJhcnksIGFuZCBwZXJoYXBzIG5vdCB2ZXJ5IG1lYW5pbmdmdWwuXG5SZWFkYWJsZS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge1xuICB0aHJvdyBuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoXCJfcmVhZCgpXCIpO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoZGVzdCwgcGlwZU9wdHMpIHtcbiAgY29uc3Qgc3JjID0gdGhpcztcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuXG4gIGlmIChzdGF0ZS5waXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAoIXN0YXRlLm11bHRpQXdhaXREcmFpbikge1xuICAgICAgc3RhdGUubXVsdGlBd2FpdERyYWluID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbmV3IFNldChcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPyBbc3RhdGUuYXdhaXREcmFpbldyaXRlcnNdIDogW10sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLnBpcGVzLnB1c2goZGVzdCk7XG4gIGRlYnVnKFwicGlwZSBjb3VudD0lZCBvcHRzPSVqXCIsIHN0YXRlLnBpcGVzLmxlbmd0aCwgcGlwZU9wdHMpO1xuXG4gIGNvbnN0IGRvRW5kID0gKCFwaXBlT3B0cyB8fCBwaXBlT3B0cy5lbmQgIT09IGZhbHNlKSAmJlxuICAgIGRlc3QgIT09IHN0ZGlvLnN0ZG91dCAmJlxuICAgIGRlc3QgIT09IHN0ZGlvLnN0ZGVycjtcblxuICBjb25zdCBlbmRGbiA9IGRvRW5kID8gb25lbmQgOiB1bnBpcGU7XG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgbmV4dFRpY2soZW5kRm4pO1xuICB9IGVsc2Uge1xuICAgIHNyYy5vbmNlKFwiZW5kXCIsIGVuZEZuKTtcbiAgfVxuXG4gIGRlc3Qub24oXCJ1bnBpcGVcIiwgb251bnBpcGUpO1xuICBmdW5jdGlvbiBvbnVucGlwZShyZWFkYWJsZSwgdW5waXBlSW5mbykge1xuICAgIGRlYnVnKFwib251bnBpcGVcIik7XG4gICAgaWYgKHJlYWRhYmxlID09PSBzcmMpIHtcbiAgICAgIGlmICh1bnBpcGVJbmZvICYmIHVucGlwZUluZm8uaGFzVW5waXBlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdW5waXBlSW5mby5oYXNVbnBpcGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uZW5kKCkge1xuICAgIGRlYnVnKFwib25lbmRcIik7XG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG4gIGxldCBvbmRyYWluO1xuXG4gIGxldCBjbGVhbmVkVXAgPSBmYWxzZTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBkZWJ1ZyhcImNsZWFudXBcIik7XG4gICAgLy8gQ2xlYW51cCBldmVudCBoYW5kbGVycyBvbmNlIHRoZSBwaXBlIGlzIGJyb2tlbi5cbiAgICBkZXN0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIiwgb25jbG9zZSk7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLCBvbmZpbmlzaCk7XG4gICAgaWYgKG9uZHJhaW4pIHtcbiAgICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLCBvbmRyYWluKTtcbiAgICB9XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIG9uZXJyb3IpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoXCJ1bnBpcGVcIiwgb251bnBpcGUpO1xuICAgIHNyYy5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLCBvbmVuZCk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsIHVucGlwZSk7XG4gICAgc3JjLnJlbW92ZUxpc3RlbmVyKFwiZGF0YVwiLCBvbmRhdGEpO1xuXG4gICAgY2xlYW5lZFVwID0gdHJ1ZTtcblxuICAgIC8vIElmIHRoZSByZWFkZXIgaXMgd2FpdGluZyBmb3IgYSBkcmFpbiBldmVudCBmcm9tIHRoaXNcbiAgICAvLyBzcGVjaWZpYyB3cml0ZXIsIHRoZW4gaXQgd291bGQgY2F1c2UgaXQgdG8gbmV2ZXIgc3RhcnRcbiAgICAvLyBmbG93aW5nIGFnYWluLlxuICAgIC8vIFNvLCBpZiB0aGlzIGlzIGF3YWl0aW5nIGEgZHJhaW4sIHRoZW4gd2UganVzdCBjYWxsIGl0IG5vdy5cbiAgICAvLyBJZiB3ZSBkb24ndCBrbm93LCB0aGVuIGFzc3VtZSB0aGF0IHdlIGFyZSB3YWl0aW5nIGZvciBvbmUuXG4gICAgaWYgKFxuICAgICAgb25kcmFpbiAmJiBzdGF0ZS5hd2FpdERyYWluV3JpdGVycyAmJlxuICAgICAgKCFkZXN0Ll93cml0YWJsZVN0YXRlIHx8IGRlc3QuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKVxuICAgICkge1xuICAgICAgb25kcmFpbigpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgIC8vIElmIHRoZSB1c2VyIHVucGlwZWQgZHVyaW5nIGBkZXN0LndyaXRlKClgLCBpdCBpcyBwb3NzaWJsZVxuICAgIC8vIHRvIGdldCBzdHVjayBpbiBhIHBlcm1hbmVudGx5IHBhdXNlZCBzdGF0ZSBpZiB0aGF0IHdyaXRlXG4gICAgLy8gYWxzbyByZXR1cm5lZCBmYWxzZS5cbiAgICAvLyA9PiBDaGVjayB3aGV0aGVyIGBkZXN0YCBpcyBzdGlsbCBhIHBpcGluZyBkZXN0aW5hdGlvbi5cbiAgICBpZiAoIWNsZWFuZWRVcCkge1xuICAgICAgaWYgKHN0YXRlLnBpcGVzLmxlbmd0aCA9PT0gMSAmJiBzdGF0ZS5waXBlc1swXSA9PT0gZGVzdCkge1xuICAgICAgICBkZWJ1ZyhcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLCAwKTtcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMgPSBkZXN0O1xuICAgICAgICBzdGF0ZS5tdWx0aUF3YWl0RHJhaW4gPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID4gMSAmJiBzdGF0ZS5waXBlcy5pbmNsdWRlcyhkZXN0KSkge1xuICAgICAgICBkZWJ1ZyhcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLCBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5zaXplKTtcbiAgICAgICAgc3RhdGUuYXdhaXREcmFpbldyaXRlcnMuYWRkKGRlc3QpO1xuICAgICAgfVxuICAgICAgc3JjLnBhdXNlKCk7XG4gICAgfVxuICAgIGlmICghb25kcmFpbikge1xuICAgICAgLy8gV2hlbiB0aGUgZGVzdCBkcmFpbnMsIGl0IHJlZHVjZXMgdGhlIGF3YWl0RHJhaW4gY291bnRlclxuICAgICAgLy8gb24gdGhlIHNvdXJjZS4gIFRoaXMgd291bGQgYmUgbW9yZSBlbGVnYW50IHdpdGggYSAub25jZSgpXG4gICAgICAvLyBoYW5kbGVyIGluIGZsb3coKSwgYnV0IGFkZGluZyBhbmQgcmVtb3ZpbmcgcmVwZWF0ZWRseSBpc1xuICAgICAgLy8gdG9vIHNsb3cuXG4gICAgICBvbmRyYWluID0gcGlwZU9uRHJhaW4oc3JjLCBkZXN0KTtcbiAgICAgIGRlc3Qub24oXCJkcmFpblwiLCBvbmRyYWluKTtcbiAgICB9XG4gIH1cblxuICBzcmMub24oXCJkYXRhXCIsIG9uZGF0YSk7XG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGRlYnVnKFwib25kYXRhXCIpO1xuICAgIGNvbnN0IHJldCA9IGRlc3Qud3JpdGUoY2h1bmspO1xuICAgIGRlYnVnKFwiZGVzdC53cml0ZVwiLCByZXQpO1xuICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICBwYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZSBkZXN0IGhhcyBhbiBlcnJvciwgdGhlbiBzdG9wIHBpcGluZyBpbnRvIGl0LlxuICAvLyBIb3dldmVyLCBkb24ndCBzdXBwcmVzcyB0aGUgdGhyb3dpbmcgYmVoYXZpb3IgZm9yIHRoaXMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBkZWJ1ZyhcIm9uZXJyb3JcIiwgZXIpO1xuICAgIHVucGlwZSgpO1xuICAgIGRlc3QucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCBvbmVycm9yKTtcbiAgICBpZiAoRUUubGlzdGVuZXJDb3VudChkZXN0LCBcImVycm9yXCIpID09PSAwKSB7XG4gICAgICBjb25zdCBzID0gZGVzdC5fd3JpdGFibGVTdGF0ZSB8fCBkZXN0Ll9yZWFkYWJsZVN0YXRlO1xuICAgICAgaWYgKHMgJiYgIXMuZXJyb3JFbWl0dGVkKSB7XG4gICAgICAgIC8vIFVzZXIgaW5jb3JyZWN0bHkgZW1pdHRlZCAnZXJyb3InIGRpcmVjdGx5IG9uIHRoZSBzdHJlYW0uXG4gICAgICAgIGVycm9yT3JEZXN0cm95KGRlc3QsIGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc3QuZW1pdChcImVycm9yXCIsIGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgb3VyIGVycm9yIGhhbmRsZXIgaXMgYXR0YWNoZWQgYmVmb3JlIHVzZXJsYW5kIG9uZXMuXG4gIHByZXBlbmRMaXN0ZW5lcihkZXN0LCBcImVycm9yXCIsIG9uZXJyb3IpO1xuXG4gIC8vIEJvdGggY2xvc2UgYW5kIGZpbmlzaCBzaG91bGQgdHJpZ2dlciB1bnBpcGUsIGJ1dCBvbmx5IG9uY2UuXG4gIGZ1bmN0aW9uIG9uY2xvc2UoKSB7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLCBvbmZpbmlzaCk7XG4gICAgdW5waXBlKCk7XG4gIH1cbiAgZGVzdC5vbmNlKFwiY2xvc2VcIiwgb25jbG9zZSk7XG4gIGZ1bmN0aW9uIG9uZmluaXNoKCkge1xuICAgIGRlYnVnKFwib25maW5pc2hcIik7XG4gICAgZGVzdC5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIG9uY2xvc2UpO1xuICAgIHVucGlwZSgpO1xuICB9XG4gIGRlc3Qub25jZShcImZpbmlzaFwiLCBvbmZpbmlzaCk7XG5cbiAgZnVuY3Rpb24gdW5waXBlKCkge1xuICAgIGRlYnVnKFwidW5waXBlXCIpO1xuICAgIHNyYy51bnBpcGUoZGVzdCk7XG4gIH1cblxuICAvLyBUZWxsIHRoZSBkZXN0IHRoYXQgaXQncyBiZWluZyBwaXBlZCB0by5cbiAgZGVzdC5lbWl0KFwicGlwZVwiLCBzcmMpO1xuXG4gIC8vIFN0YXJ0IHRoZSBmbG93IGlmIGl0IGhhc24ndCBiZWVuIHN0YXJ0ZWQgYWxyZWFkeS5cblxuICBpZiAoZGVzdC53cml0YWJsZU5lZWREcmFpbiA9PT0gdHJ1ZSkge1xuICAgIGlmIChzdGF0ZS5mbG93aW5nKSB7XG4gICAgICBwYXVzZSgpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKFwicGlwZSByZXN1bWVcIik7XG4gICAgc3JjLnJlc3VtZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5mdW5jdGlvbiBwaXBlT25EcmFpbihzcmMsIGRlc3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVPbkRyYWluRnVuY3Rpb25SZXN1bHQoKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBzcmMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgICAvLyBgb25kcmFpbmAgd2lsbCBjYWxsIGRpcmVjdGx5LFxuICAgIC8vIGB0aGlzYCBtYXliZSBub3QgYSByZWZlcmVuY2UgdG8gZGVzdCxcbiAgICAvLyBzbyB3ZSB1c2UgdGhlIHJlYWwgZGVzdCBoZXJlLlxuICAgIGlmIChzdGF0ZS5hd2FpdERyYWluV3JpdGVycyA9PT0gZGVzdCkge1xuICAgICAgZGVidWcoXCJwaXBlT25EcmFpblwiLCAxKTtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLm11bHRpQXdhaXREcmFpbikge1xuICAgICAgZGVidWcoXCJwaXBlT25EcmFpblwiLCBzdGF0ZS5hd2FpdERyYWluV3JpdGVycy5zaXplKTtcbiAgICAgIHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLmRlbGV0ZShkZXN0KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoIXN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzIHx8IHN0YXRlLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUgPT09IDApICYmXG4gICAgICBFRS5saXN0ZW5lckNvdW50KHNyYywgXCJkYXRhXCIpXG4gICAgKSB7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gdHJ1ZTtcbiAgICAgIGZsb3coc3JjKTtcbiAgICB9XG4gIH07XG59XG5cblJlYWRhYmxlLnByb3RvdHlwZS51bnBpcGUgPSBmdW5jdGlvbiAoZGVzdCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGNvbnN0IHVucGlwZUluZm8gPSB7IGhhc1VucGlwZWQ6IGZhbHNlIH07XG5cbiAgLy8gSWYgd2UncmUgbm90IHBpcGluZyBhbnl3aGVyZSwgdGhlbiBkbyBub3RoaW5nLlxuICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpZiAoIWRlc3QpIHtcbiAgICAvLyByZW1vdmUgYWxsLlxuICAgIGNvbnN0IGRlc3RzID0gc3RhdGUucGlwZXM7XG4gICAgc3RhdGUucGlwZXMgPSBbXTtcbiAgICB0aGlzLnBhdXNlKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXN0c1tpXS5lbWl0KFwidW5waXBlXCIsIHRoaXMsIHsgaGFzVW5waXBlZDogZmFsc2UgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gVHJ5IHRvIGZpbmQgdGhlIHJpZ2h0IG9uZS5cbiAgY29uc3QgaW5kZXggPSBzdGF0ZS5waXBlcy5pbmRleE9mKGRlc3QpO1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0ZS5waXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICBpZiAoc3RhdGUucGlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICB9XG5cbiAgZGVzdC5lbWl0KFwidW5waXBlXCIsIHRoaXMsIHVucGlwZUluZm8pO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gU2V0IHVwIGRhdGEgZXZlbnRzIGlmIHRoZXkgYXJlIGFza2VkIGZvclxuLy8gRW5zdXJlIHJlYWRhYmxlIGxpc3RlbmVycyBldmVudHVhbGx5IGdldCBzb21ldGhpbmcuXG5SZWFkYWJsZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGZuKSB7XG4gIGNvbnN0IHJlcyA9IFN0cmVhbS5wcm90b3R5cGUub24uY2FsbCh0aGlzLCBldiwgZm4pO1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG5cbiAgaWYgKGV2ID09PSBcImRhdGFcIikge1xuICAgIC8vIFVwZGF0ZSByZWFkYWJsZUxpc3RlbmluZyBzbyB0aGF0IHJlc3VtZSgpIG1heSBiZSBhIG5vLW9wXG4gICAgLy8gYSBmZXcgbGluZXMgZG93bi4gVGhpcyBpcyBuZWVkZWQgdG8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScpLlxuICAgIHN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nID0gdGhpcy5saXN0ZW5lckNvdW50KFwicmVhZGFibGVcIikgPiAwO1xuXG4gICAgLy8gVHJ5IHN0YXJ0IGZsb3dpbmcgb24gbmV4dCB0aWNrIGlmIHN0cmVhbSBpc24ndCBleHBsaWNpdGx5IHBhdXNlZC5cbiAgICBpZiAoc3RhdGUuZmxvd2luZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucmVzdW1lKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGV2ID09PSBcInJlYWRhYmxlXCIpIHtcbiAgICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQgJiYgIXN0YXRlLnJlYWRhYmxlTGlzdGVuaW5nKSB7XG4gICAgICBzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZyA9IHN0YXRlLm5lZWRSZWFkYWJsZSA9IHRydWU7XG4gICAgICBzdGF0ZS5mbG93aW5nID0gZmFsc2U7XG4gICAgICBzdGF0ZS5lbWl0dGVkUmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGRlYnVnKFwib24gcmVhZGFibGVcIiwgc3RhdGUubGVuZ3RoLCBzdGF0ZS5yZWFkaW5nKTtcbiAgICAgIGlmIChzdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW1pdFJlYWRhYmxlKHRoaXMpO1xuICAgICAgfSBlbHNlIGlmICghc3RhdGUucmVhZGluZykge1xuICAgICAgICBuZXh0VGljayhuUmVhZGluZ05leHRUaWNrLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IFJlYWRhYmxlLnByb3RvdHlwZS5vbjtcblxuUmVhZGFibGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gKGV2LCBmbikge1xuICBjb25zdCByZXMgPSBTdHJlYW0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcywgZXYsIGZuKTtcblxuICBpZiAoZXYgPT09IFwicmVhZGFibGVcIikge1xuICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZW9uZSBzdGlsbCBsaXN0ZW5pbmcgdG9cbiAgICAvLyByZWFkYWJsZSBhbmQgcmVzZXQgdGhlIHN0YXRlLiBIb3dldmVyIHRoaXMgbmVlZHMgdG8gaGFwcGVuXG4gICAgLy8gYWZ0ZXIgcmVhZGFibGUgaGFzIGJlZW4gZW1pdHRlZCBidXQgYmVmb3JlIEkvTyAobmV4dFRpY2spIHRvXG4gICAgLy8gc3VwcG9ydCBvbmNlKCdyZWFkYWJsZScsIGZuKSBjeWNsZXMuIFRoaXMgbWVhbnMgdGhhdCBjYWxsaW5nXG4gICAgLy8gcmVzdW1lIHdpdGhpbiB0aGUgc2FtZSB0aWNrIHdpbGwgaGF2ZSBub1xuICAgIC8vIGVmZmVjdC5cbiAgICBuZXh0VGljayh1cGRhdGVSZWFkYWJsZUxpc3RlbmluZywgdGhpcyk7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufTtcblJlYWRhYmxlLnByb3RvdHlwZS5vZmYgPSBSZWFkYWJsZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cblJlYWRhYmxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoZXYpIHtcbiAgY29uc3QgcmVzID0gU3RyZWFtLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBpZiAoZXYgPT09IFwicmVhZGFibGVcIiB8fCBldiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBpcyBzb21lb25lIHN0aWxsIGxpc3RlbmluZyB0b1xuICAgIC8vIHJlYWRhYmxlIGFuZCByZXNldCB0aGUgc3RhdGUuIEhvd2V2ZXIgdGhpcyBuZWVkcyB0byBoYXBwZW5cbiAgICAvLyBhZnRlciByZWFkYWJsZSBoYXMgYmVlbiBlbWl0dGVkIGJ1dCBiZWZvcmUgSS9PIChuZXh0VGljaykgdG9cbiAgICAvLyBzdXBwb3J0IG9uY2UoJ3JlYWRhYmxlJywgZm4pIGN5Y2xlcy4gVGhpcyBtZWFucyB0aGF0IGNhbGxpbmdcbiAgICAvLyByZXN1bWUgd2l0aGluIHRoZSBzYW1lIHRpY2sgd2lsbCBoYXZlIG5vXG4gICAgLy8gZWZmZWN0LlxuICAgIG5leHRUaWNrKHVwZGF0ZVJlYWRhYmxlTGlzdGVuaW5nLCB0aGlzKTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59O1xuXG5mdW5jdGlvbiB1cGRhdGVSZWFkYWJsZUxpc3RlbmluZyhzZWxmKSB7XG4gIGNvbnN0IHN0YXRlID0gc2VsZi5fcmVhZGFibGVTdGF0ZTtcbiAgc3RhdGUucmVhZGFibGVMaXN0ZW5pbmcgPSBzZWxmLmxpc3RlbmVyQ291bnQoXCJyZWFkYWJsZVwiKSA+IDA7XG5cbiAgaWYgKHN0YXRlLnJlc3VtZVNjaGVkdWxlZCAmJiBzdGF0ZVtrUGF1c2VkXSA9PT0gZmFsc2UpIHtcbiAgICAvLyBGbG93aW5nIG5lZWRzIHRvIGJlIHNldCB0byB0cnVlIG5vdywgb3RoZXJ3aXNlXG4gICAgLy8gdGhlIHVwY29taW5nIHJlc3VtZSB3aWxsIG5vdCBmbG93LlxuICAgIHN0YXRlLmZsb3dpbmcgPSB0cnVlO1xuXG4gICAgLy8gQ3J1ZGUgd2F5IHRvIGNoZWNrIGlmIHdlIHNob3VsZCByZXN1bWUuXG4gIH0gZWxzZSBpZiAoc2VsZi5saXN0ZW5lckNvdW50KFwiZGF0YVwiKSA+IDApIHtcbiAgICBzZWxmLnJlc3VtZSgpO1xuICB9IGVsc2UgaWYgKCFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZykge1xuICAgIHN0YXRlLmZsb3dpbmcgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5SZWFkaW5nTmV4dFRpY2soc2VsZikge1xuICBkZWJ1ZyhcInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMFwiKTtcbiAgc2VsZi5yZWFkKDApO1xufVxuXG4vLyBwYXVzZSgpIGFuZCByZXN1bWUoKSBhcmUgcmVtbmFudHMgb2YgdGhlIGxlZ2FjeSByZWFkYWJsZSBzdHJlYW0gQVBJXG4vLyBJZiB0aGUgdXNlciB1c2VzIHRoZW0sIHRoZW4gc3dpdGNoIGludG8gb2xkIG1vZGUuXG5SZWFkYWJsZS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGlmICghc3RhdGUuZmxvd2luZykge1xuICAgIGRlYnVnKFwicmVzdW1lXCIpO1xuICAgIC8vIFdlIGZsb3cgb25seSBpZiB0aGVyZSBpcyBubyBvbmUgbGlzdGVuaW5nXG4gICAgLy8gZm9yIHJlYWRhYmxlLCBidXQgd2Ugc3RpbGwgaGF2ZSB0byBjYWxsXG4gICAgLy8gcmVzdW1lKCkuXG4gICAgc3RhdGUuZmxvd2luZyA9ICFzdGF0ZS5yZWFkYWJsZUxpc3RlbmluZztcbiAgICByZXN1bWUodGhpcywgc3RhdGUpO1xuICB9XG4gIHN0YXRlW2tQYXVzZWRdID0gZmFsc2U7XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gcmVzdW1lKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5yZXN1bWVTY2hlZHVsZWQpIHtcbiAgICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIG5leHRUaWNrKHJlc3VtZV8sIHN0cmVhbSwgc3RhdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3VtZV8oc3RyZWFtLCBzdGF0ZSkge1xuICBkZWJ1ZyhcInJlc3VtZVwiLCBzdGF0ZS5yZWFkaW5nKTtcbiAgaWYgKCFzdGF0ZS5yZWFkaW5nKSB7XG4gICAgc3RyZWFtLnJlYWQoMCk7XG4gIH1cblxuICBzdGF0ZS5yZXN1bWVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgc3RyZWFtLmVtaXQoXCJyZXN1bWVcIik7XG4gIGZsb3coc3RyZWFtKTtcbiAgaWYgKHN0YXRlLmZsb3dpbmcgJiYgIXN0YXRlLnJlYWRpbmcpIHtcbiAgICBzdHJlYW0ucmVhZCgwKTtcbiAgfVxufVxuXG5SZWFkYWJsZS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbiAoKSB7XG4gIGRlYnVnKFwiY2FsbCBwYXVzZSBmbG93aW5nPSVqXCIsIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyk7XG4gIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgIT09IGZhbHNlKSB7XG4gICAgZGVidWcoXCJwYXVzZVwiKTtcbiAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoXCJwYXVzZVwiKTtcbiAgfVxuICB0aGlzLl9yZWFkYWJsZVN0YXRlW2tQYXVzZWRdID0gdHJ1ZTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBmbG93KHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgZGVidWcoXCJmbG93XCIsIHN0YXRlLmZsb3dpbmcpO1xuICB3aGlsZSAoc3RhdGUuZmxvd2luZyAmJiBzdHJlYW0ucmVhZCgpICE9PSBudWxsKTtcbn1cblxuLy8gV3JhcCBhbiBvbGQtc3R5bGUgc3RyZWFtIGFzIHRoZSBhc3luYyBkYXRhIHNvdXJjZS5cbi8vIFRoaXMgaXMgKm5vdCogcGFydCBvZiB0aGUgcmVhZGFibGUgc3RyZWFtIGludGVyZmFjZS5cbi8vIEl0IGlzIGFuIHVnbHkgdW5mb3J0dW5hdGUgbWVzcyBvZiBoaXN0b3J5LlxuUmVhZGFibGUucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiAoc3RyZWFtKSB7XG4gIGxldCBwYXVzZWQgPSBmYWxzZTtcblxuICAvLyBUT0RPIChyb25hZyk6IFNob3VsZCB0aGlzLmRlc3Ryb3koZXJyKSBlbWl0XG4gIC8vICdlcnJvcicgb24gdGhlIHdyYXBwZWQgc3RyZWFtPyBXb3VsZCByZXF1aXJlXG4gIC8vIGEgc3RhdGljIGZhY3RvcnkgbWV0aG9kLCBlLmcuIFJlYWRhYmxlLndyYXAoc3RyZWFtKS5cblxuICBzdHJlYW0ub24oXCJkYXRhXCIsIChjaHVuaykgPT4ge1xuICAgIGlmICghdGhpcy5wdXNoKGNodW5rKSAmJiBzdHJlYW0ucGF1c2UpIHtcbiAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICBzdHJlYW0ucGF1c2UoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgdGhpcy5wdXNoKG51bGwpO1xuICB9KTtcblxuICBzdHJlYW0ub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgZXJyb3JPckRlc3Ryb3kodGhpcywgZXJyKTtcbiAgfSk7XG5cbiAgc3RyZWFtLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9KTtcblxuICBzdHJlYW0ub24oXCJkZXN0cm95XCIsICgpID0+IHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfSk7XG5cbiAgdGhpcy5fcmVhZCA9ICgpID0+IHtcbiAgICBpZiAocGF1c2VkICYmIHN0cmVhbS5yZXN1bWUpIHtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgc3RyZWFtLnJlc3VtZSgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBQcm94eSBhbGwgdGhlIG90aGVyIG1ldGhvZHMuIEltcG9ydGFudCB3aGVuIHdyYXBwaW5nIGZpbHRlcnMgYW5kIGR1cGxleGVzLlxuICBjb25zdCBzdHJlYW1LZXlzID0gT2JqZWN0LmtleXMoc3RyZWFtKTtcbiAgZm9yIChsZXQgaiA9IDE7IGogPCBzdHJlYW1LZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgY29uc3QgaSA9IHN0cmVhbUtleXNbal07XG4gICAgaWYgKHRoaXNbaV0gPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc3RyZWFtW2ldID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXNbaV0gPSBzdHJlYW1baV0uYmluZChzdHJlYW0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuUmVhZGFibGUucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHN0cmVhbVRvQXN5bmNJdGVyYXRvcih0aGlzKTtcbn07XG5cblJlYWRhYmxlLnByb3RvdHlwZS5pdGVyYXRvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCBcIm9wdGlvbnNcIik7XG4gIH1cbiAgcmV0dXJuIHN0cmVhbVRvQXN5bmNJdGVyYXRvcih0aGlzLCBvcHRpb25zKTtcbn07XG5cbmZ1bmN0aW9uIHN0cmVhbVRvQXN5bmNJdGVyYXRvcihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBzdHJlYW0ucmVhZCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgc3RyZWFtID0gUmVhZGFibGUud3JhcChzdHJlYW0sIHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGNvbnN0IGl0ZXIgPSBjcmVhdGVBc3luY0l0ZXJhdG9yKHN0cmVhbSwgb3B0aW9ucyk7XG4gIGl0ZXIuc3RyZWFtID0gc3RyZWFtO1xuICByZXR1cm4gaXRlcjtcbn1cblxuYXN5bmMgZnVuY3Rpb24qIGNyZWF0ZUFzeW5jSXRlcmF0b3Ioc3RyZWFtLCBvcHRpb25zKSB7XG4gIGxldCBjYWxsYmFjayA9IG5vcDtcblxuICBjb25zdCBvcHRzID0ge1xuICAgIGRlc3Ryb3lPblJldHVybjogdHJ1ZSxcbiAgICBkZXN0cm95T25FcnJvcjogdHJ1ZSxcbiAgICAuLi5vcHRpb25zLFxuICB9O1xuXG4gIGZ1bmN0aW9uIG5leHQocmVzb2x2ZSkge1xuICAgIGlmICh0aGlzID09PSBzdHJlYW0pIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgICBjYWxsYmFjayA9IG5vcDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sgPSByZXNvbHZlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuXG4gIGxldCBlcnJvciA9IHN0YXRlLmVycm9yZWQ7XG4gIGxldCBlcnJvckVtaXR0ZWQgPSBzdGF0ZS5lcnJvckVtaXR0ZWQ7XG4gIGxldCBlbmRFbWl0dGVkID0gc3RhdGUuZW5kRW1pdHRlZDtcbiAgbGV0IGNsb3NlRW1pdHRlZCA9IHN0YXRlLmNsb3NlRW1pdHRlZDtcblxuICBzdHJlYW1cbiAgICAub24oXCJyZWFkYWJsZVwiLCBuZXh0KVxuICAgIC5vbihcImVycm9yXCIsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGVycm9yID0gZXJyO1xuICAgICAgZXJyb3JFbWl0dGVkID0gdHJ1ZTtcbiAgICAgIG5leHQuY2FsbCh0aGlzKTtcbiAgICB9KVxuICAgIC5vbihcImVuZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBlbmRFbWl0dGVkID0gdHJ1ZTtcbiAgICAgIG5leHQuY2FsbCh0aGlzKTtcbiAgICB9KVxuICAgIC5vbihcImNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsb3NlRW1pdHRlZCA9IHRydWU7XG4gICAgICBuZXh0LmNhbGwodGhpcyk7XG4gICAgfSk7XG5cbiAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gc3RyZWFtLmRlc3Ryb3llZCA/IG51bGwgOiBzdHJlYW0ucmVhZCgpO1xuICAgICAgaWYgKGNodW5rICE9PSBudWxsKSB7XG4gICAgICAgIHlpZWxkIGNodW5rO1xuICAgICAgfSBlbHNlIGlmIChlcnJvckVtaXR0ZWQpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9IGVsc2UgaWYgKGVuZEVtaXR0ZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGNsb3NlRW1pdHRlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKG5leHQpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKG9wdHMuZGVzdHJveU9uRXJyb3IpIHtcbiAgICAgIGRlc3Ryb3lJbXBsLmRlc3Ryb3llcihzdHJlYW0sIGVycik7XG4gICAgfVxuICAgIGVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICB0aHJvdyBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKCFlcnJvclRocm93biAmJiBvcHRzLmRlc3Ryb3lPblJldHVybikge1xuICAgICAgaWYgKHN0YXRlLmF1dG9EZXN0cm95IHx8ICFlbmRFbWl0dGVkKSB7XG4gICAgICAgIC8vIFRPRE8ocm9uYWcpOiBFUlJfUFJFTUFUVVJFX0NMT1NFP1xuICAgICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3RyZWFtLCBudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gTWFraW5nIGl0IGV4cGxpY2l0IHRoZXNlIHByb3BlcnRpZXMgYXJlIG5vdCBlbnVtZXJhYmxlXG4vLyBiZWNhdXNlIG90aGVyd2lzZSBzb21lIHByb3RvdHlwZSBtYW5pcHVsYXRpb24gaW5cbi8vIHVzZXJsYW5kIHdpbGwgZmFpbC5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlYWRhYmxlLnByb3RvdHlwZSwge1xuICByZWFkYWJsZToge1xuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9yZWFkYWJsZVN0YXRlO1xuICAgICAgLy8gci5yZWFkYWJsZSA9PT0gZmFsc2UgbWVhbnMgdGhhdCB0aGlzIGlzIHBhcnQgb2YgYSBEdXBsZXggc3RyZWFtXG4gICAgICAvLyB3aGVyZSB0aGUgcmVhZGFibGUgc2lkZSB3YXMgZGlzYWJsZWQgdXBvbiBjb25zdHJ1Y3Rpb24uXG4gICAgICAvLyBDb21wYXQuIFRoZSB1c2VyIG1pZ2h0IG1hbnVhbGx5IGRpc2FibGUgcmVhZGFibGUgc2lkZSB0aHJvdWdoXG4gICAgICAvLyBkZXByZWNhdGVkIHNldHRlci5cbiAgICAgIHJldHVybiAhIXIgJiYgci5yZWFkYWJsZSAhPT0gZmFsc2UgJiYgIXIuZGVzdHJveWVkICYmICFyLmVycm9yRW1pdHRlZCAmJlxuICAgICAgICAhci5lbmRFbWl0dGVkO1xuICAgIH0sXG4gICAgc2V0KHZhbCkge1xuICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdC5cbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGUgPSAhIXZhbDtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuXG4gIHJlYWRhYmxlRGlkUmVhZDoge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQ7XG4gICAgfSxcbiAgfSxcblxuICByZWFkYWJsZUFib3J0ZWQ6IHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCB8fCB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQpICYmXG4gICAgICAgICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ7XG4gICAgfSxcbiAgfSxcblxuICByZWFkYWJsZUhpZ2hXYXRlck1hcms6IHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcms7XG4gICAgfSxcbiAgfSxcblxuICByZWFkYWJsZUJ1ZmZlcjoge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXI7XG4gICAgfSxcbiAgfSxcblxuICByZWFkYWJsZUZsb3dpbmc6IHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nID0gc3RhdGU7XG4gICAgICB9XG4gICAgfSxcbiAgfSxcblxuICByZWFkYWJsZUxlbmd0aDoge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aDtcbiAgICB9LFxuICB9LFxuXG4gIHJlYWRhYmxlT2JqZWN0TW9kZToge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5vYmplY3RNb2RlIDogZmFsc2U7XG4gICAgfSxcbiAgfSxcblxuICByZWFkYWJsZUVuY29kaW5nOiB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUgPyB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nIDogbnVsbDtcbiAgICB9LFxuICB9LFxuXG4gIGRlc3Ryb3llZDoge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZWFkYWJsZVN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkO1xuICAgIH0sXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBXZSBpZ25vcmUgdGhlIHZhbHVlIGlmIHRoZSBzdHJlYW1cbiAgICAgIC8vIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQuXG4gICAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgdXNlciBpcyBleHBsaWNpdGx5XG4gICAgICAvLyBtYW5hZ2luZyBkZXN0cm95ZWQuXG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICAgIH0sXG4gIH0sXG5cbiAgcmVhZGFibGVFbmRlZDoge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlID8gdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkIDogZmFsc2U7XG4gICAgfSxcbiAgfSxcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZWFkYWJsZVN0YXRlLnByb3RvdHlwZSwge1xuICAvLyBMZWdhY3kgZ2V0dGVyIGZvciBgcGlwZXNDb3VudGAuXG4gIHBpcGVzQ291bnQ6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5waXBlcy5sZW5ndGg7XG4gICAgfSxcbiAgfSxcblxuICAvLyBMZWdhY3kgcHJvcGVydHkgZm9yIGBwYXVzZWRgLlxuICBwYXVzZWQ6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpc1trUGF1c2VkXSAhPT0gZmFsc2U7XG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXNba1BhdXNlZF0gPSAhIXZhbHVlO1xuICAgIH0sXG4gIH0sXG59KTtcblxuLy8gUGx1Y2sgb2ZmIG4gYnl0ZXMgZnJvbSBhbiBhcnJheSBvZiBidWZmZXJzLlxuLy8gTGVuZ3RoIGlzIHRoZSBjb21iaW5lZCBsZW5ndGhzIG9mIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgbGlzdC5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgaW5saW5hYmxlLCBzbyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gbWFraW5nXG4vLyBjaGFuZ2VzIHRvIHRoZSBmdW5jdGlvbiBib2R5LlxuZnVuY3Rpb24gZnJvbUxpc3Qobiwgc3RhdGUpIHtcbiAgLy8gbm90aGluZyBidWZmZXJlZC5cbiAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IHJldDtcbiAgaWYgKHN0YXRlLm9iamVjdE1vZGUpIHtcbiAgICByZXQgPSBzdGF0ZS5idWZmZXIuc2hpZnQoKTtcbiAgfSBlbHNlIGlmICghbiB8fCBuID49IHN0YXRlLmxlbmd0aCkge1xuICAgIC8vIFJlYWQgaXQgYWxsLCB0cnVuY2F0ZSB0aGUgbGlzdC5cbiAgICBpZiAoc3RhdGUuZGVjb2Rlcikge1xuICAgICAgcmV0ID0gc3RhdGUuYnVmZmVyLmpvaW4oXCJcIik7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5idWZmZXIubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXQgPSBzdGF0ZS5idWZmZXIuZmlyc3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0ID0gc3RhdGUuYnVmZmVyLmNvbmNhdChzdGF0ZS5sZW5ndGgpO1xuICAgIH1cbiAgICBzdGF0ZS5idWZmZXIuY2xlYXIoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZWFkIHBhcnQgb2YgbGlzdC5cbiAgICByZXQgPSBzdGF0ZS5idWZmZXIuY29uc3VtZShuLCBzdGF0ZS5kZWNvZGVyKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGVuZFJlYWRhYmxlKHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcblxuICBkZWJ1ZyhcImVuZFJlYWRhYmxlXCIsIHN0YXRlLmVuZEVtaXR0ZWQpO1xuICBpZiAoIXN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgbmV4dFRpY2soZW5kUmVhZGFibGVOVCwgc3RhdGUsIHN0cmVhbSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kUmVhZGFibGVOVChzdGF0ZSwgc3RyZWFtKSB7XG4gIGRlYnVnKFwiZW5kUmVhZGFibGVOVFwiLCBzdGF0ZS5lbmRFbWl0dGVkLCBzdGF0ZS5sZW5ndGgpO1xuXG4gIC8vIENoZWNrIHRoYXQgd2UgZGlkbid0IGdldCBvbmUgbGFzdCB1bnNoaWZ0LlxuICBpZiAoXG4gICAgIXN0YXRlLmVycm9yRW1pdHRlZCAmJiAhc3RhdGUuY2xvc2VFbWl0dGVkICYmXG4gICAgIXN0YXRlLmVuZEVtaXR0ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwXG4gICkge1xuICAgIHN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlO1xuICAgIHN0cmVhbS5lbWl0KFwiZW5kXCIpO1xuXG4gICAgaWYgKHN0cmVhbS53cml0YWJsZSAmJiBzdHJlYW0uYWxsb3dIYWxmT3BlbiA9PT0gZmFsc2UpIHtcbiAgICAgIG5leHRUaWNrKGVuZFdyaXRhYmxlTlQsIHN0cmVhbSk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgICAgLy8gaWYgdGhlIHdyaXRhYmxlIHNpZGUgaXMgcmVhZHkgZm9yIGF1dG9EZXN0cm95IGFzIHdlbGwuXG4gICAgICBjb25zdCB3U3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gICAgICBjb25zdCBhdXRvRGVzdHJveSA9ICF3U3RhdGUgfHwgKFxuICAgICAgICB3U3RhdGUuYXV0b0Rlc3Ryb3kgJiZcbiAgICAgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IHRoZSB3cml0YWJsZSB0byBldmVyICdmaW5pc2gnXG4gICAgICAgIC8vIGlmIHdyaXRhYmxlIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLlxuICAgICAgICAod1N0YXRlLmZpbmlzaGVkIHx8IHdTdGF0ZS53cml0YWJsZSA9PT0gZmFsc2UpXG4gICAgICApO1xuXG4gICAgICBpZiAoYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5kV3JpdGFibGVOVChzdHJlYW0pIHtcbiAgY29uc3Qgd3JpdGFibGUgPSBzdHJlYW0ud3JpdGFibGUgJiYgIXN0cmVhbS53cml0YWJsZUVuZGVkICYmXG4gICAgIXN0cmVhbS5kZXN0cm95ZWQ7XG4gIGlmICh3cml0YWJsZSkge1xuICAgIHN0cmVhbS5lbmQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkYWJsZUZyb20oaXRlcmFibGUsIG9wdHMpIHtcbiAgcmV0dXJuIF9mcm9tKFJlYWRhYmxlLCBpdGVyYWJsZSwgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0ob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbTtcbn1cblxuZXhwb3J0IGNvbnN0IGZyb21XZWIgPSBSZWFkYWJsZS5mcm9tV2ViID0gZnVuY3Rpb24gKFxuICByZWFkYWJsZVN0cmVhbSxcbiAgb3B0aW9ucyA9IHt9LFxuKSB7XG4gIGlmICghaXNSZWFkYWJsZVN0cmVhbShyZWFkYWJsZVN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICBcInJlYWRhYmxlU3RyZWFtXCIsXG4gICAgICBcIlJlYWRhYmxlU3RyZWFtXCIsXG4gICAgICByZWFkYWJsZVN0cmVhbSxcbiAgICApO1xuICB9XG5cbiAgdmFsaWRhdGVPYmplY3Qob3B0aW9ucywgXCJvcHRpb25zXCIpO1xuICBjb25zdCB7XG4gICAgaGlnaFdhdGVyTWFyayxcbiAgICBlbmNvZGluZyxcbiAgICBvYmplY3RNb2RlID0gZmFsc2UsXG4gICAgc2lnbmFsLFxuICB9ID0gb3B0aW9ucztcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShlbmNvZGluZywgXCJvcHRpb25zLmVuY29kaW5nXCIpO1xuICB9XG4gIHZhbGlkYXRlQm9vbGVhbihvYmplY3RNb2RlLCBcIm9wdGlvbnMub2JqZWN0TW9kZVwiKTtcblxuICBjb25zdCByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHJlYWRhYmxlID0gbmV3IFJlYWRhYmxlKHtcbiAgICBvYmplY3RNb2RlLFxuICAgIGhpZ2hXYXRlck1hcmssXG4gICAgZW5jb2RpbmcsXG4gICAgc2lnbmFsLFxuXG4gICAgcmVhZCgpIHtcbiAgICAgIHJlYWRlci5yZWFkKCkudGhlbihcbiAgICAgICAgKGNodW5rKSA9PiB7XG4gICAgICAgICAgaWYgKGNodW5rLmRvbmUpIHtcbiAgICAgICAgICAgIHJlYWRhYmxlLnB1c2gobnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlYWRhYmxlLnB1c2goY2h1bmsudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiBkZXN0cm95LmNhbGwocmVhZGFibGUsIGVycm9yKSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIGRlc3Ryb3koZXJyb3IsIGNhbGxiYWNrKSB7XG4gICAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBhIG5leHQgdGljayBiZWNhdXNlIHRoaXMgaXMgaGFwcGVuaW5nIHdpdGhpblxuICAgICAgICAgIC8vIGEgcHJvbWlzZSBjb250ZXh0LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBlcnJvcnNcbiAgICAgICAgICAvLyB0aHJvd24gd2UgZG9uJ3Qgd2FudCB0aG9zZSB0byBjYXVzZSBhbiB1bmhhbmRsZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24uIExldCdzIGp1c3QgZXNjYXBlIHRoZSBwcm9taXNlIGFuZFxuICAgICAgICAgIC8vIGhhbmRsZSBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjbG9zZWQpIHtcbiAgICAgICAgcmVhZGVyLmNhbmNlbChlcnJvcikudGhlbihkb25lLCBkb25lKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lKCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgcmVhZGVyLmNsb3NlZC50aGVuKFxuICAgICgpID0+IHtcbiAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICBpZiAoIWlzUmVhZGFibGVFbmRlZChyZWFkYWJsZSkpIHtcbiAgICAgICAgcmVhZGFibGUucHVzaChudWxsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgIGRlc3Ryb3kuY2FsbChyZWFkYWJsZSwgZXJyb3IpO1xuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIHJlYWRhYmxlO1xufTtcblxuZnVuY3Rpb24gd3JhcChzcmMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7XG4gICAgb2JqZWN0TW9kZTogc3JjLnJlYWRhYmxlT2JqZWN0TW9kZSA/PyBzcmMub2JqZWN0TW9kZSA/PyB0cnVlLFxuICAgIC4uLm9wdGlvbnMsXG4gICAgZGVzdHJveShlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3JjLCBlcnIpO1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9LFxuICB9KS53cmFwKHNyYyk7XG59XG5cbi8vIEV4cG9zZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS5cblJlYWRhYmxlLl9mcm9tTGlzdCA9IGZyb21MaXN0O1xuUmVhZGFibGUuUmVhZGFibGVTdGF0ZSA9IFJlYWRhYmxlU3RhdGU7XG5SZWFkYWJsZS5mcm9tID0gcmVhZGFibGVGcm9tO1xuUmVhZGFibGUud3JhcCA9IHdyYXA7XG5cbmV4cG9ydCBkZWZhdWx0IFJlYWRhYmxlO1xuZXhwb3J0IHsgZnJvbUxpc3QgYXMgX2Zyb21MaXN0LCByZWFkYWJsZUZyb20gYXMgZnJvbSwgUmVhZGFibGVTdGF0ZSwgd3JhcCB9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50IGFuZCBOb2RlIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBkZW5vLWxpbnQtaWdub3JlLWZpbGVcblxuaW1wb3J0IHsgdmFsaWRhdGVCb29sZWFuLCB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi92YWxpZGF0b3JzLm1qc1wiO1xuaW1wb3J0IHsgX3VpbnQ4QXJyYXlUb0J1ZmZlciB9IGZyb20gXCIuL191dGlscy50c1wiO1xuaW1wb3J0IHsgYWRkQWJvcnRTaWduYWxOb1ZhbGlkYXRlIH0gZnJvbSBcIi4vYWRkLWFib3J0LXNpZ25hbC5tanNcIjtcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCIuLi8uLi9idWZmZXIudHNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRIaWdoV2F0ZXJNYXJrLCBnZXRIaWdoV2F0ZXJNYXJrIH0gZnJvbSBcIi4vc3RhdGUubWpzXCI7XG5pbXBvcnQgeyBpc1VpbnQ4QXJyYXkgfSBmcm9tIFwiLi4vdXRpbC90eXBlcy50c1wiO1xuaW1wb3J0IHsgU3RyZWFtIH0gZnJvbSBcIi4vbGVnYWN5Lm1qc1wiO1xuaW1wb3J0IHtcbiAgRVJSX0lOVkFMSURfQVJHX1RZUEUsXG4gIEVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFxuICBFUlJfTVVMVElQTEVfQ0FMTEJBQ0ssXG4gIEVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRCxcbiAgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSxcbiAgRVJSX1NUUkVBTV9ERVNUUk9ZRUQsXG4gIEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsXG4gIEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFLFxuICBFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxcbiAgRVJSX1VOS05PV05fRU5DT0RJTkcsXG59IGZyb20gXCIuLi9lcnJvcnMudHNcIjtcbmltcG9ydCAqIGFzIHByb2Nlc3MgZnJvbSBcIi4uLy4uL19wcm9jZXNzL3Byb2Nlc3MudHNcIjtcbmltcG9ydCBkZXN0cm95SW1wbCBmcm9tIFwiLi9kZXN0cm95Lm1qc1wiO1xuaW1wb3J0IEVFIGZyb20gXCIuLi8uLi9ldmVudHMudHNcIjtcbmltcG9ydCBSZWFkYWJsZSBmcm9tIFwiLi9yZWFkYWJsZS5tanNcIjtcbmltcG9ydCB7IGlzV3JpdGFibGVFbmRlZCB9IGZyb20gXCIuL3V0aWxzLm1qc1wiO1xuXG5jb25zdCB7IGVycm9yT3JEZXN0cm95IH0gPSBkZXN0cm95SW1wbDtcblxuLy8gVGhpcyBmdW5jdGlvbiBwcmV2ZW50cyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgd2l0aCBEdXBsZXhcbi8vIFRoaXMgY2hlY2tzIGlmIHRoZSBwYXNzZWQgc3RyZWFtIGlzIGFuIGluc3RhbmNlIG9mIGEgUmVhZGFibGUgc3RyZWFtXG4vLyBhbmQgb25lIG9mIGl0cyBwcm90b3R5cGVzIGlzIG5hbWVkIER1cGxleFxuZnVuY3Rpb24gaXNEdXBsZXhTdHJlYW0obWF5YmVfZHVwbGV4KSB7XG4gIGNvbnN0IGlzUmVhZGFibGUgPSBSZWFkYWJsZS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihtYXliZV9kdXBsZXgpO1xuXG4gIGxldCBwcm90b3R5cGUgPSBtYXliZV9kdXBsZXg7XG4gIGxldCBpc0R1cGxleCA9IGZhbHNlO1xuICB3aGlsZSAocHJvdG90eXBlPy5jb25zdHJ1Y3RvciAmJiBwcm90b3R5cGUuY29uc3RydWN0b3IubmFtZSAhPT0gXCJPYmplY3RcIikge1xuICAgIGlmIChwcm90b3R5cGUuY29uc3RydWN0b3IubmFtZSA9PT0gXCJEdXBsZXhcIikge1xuICAgICAgaXNEdXBsZXggPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpO1xuICB9XG5cbiAgcmV0dXJuIGlzUmVhZGFibGUgJiYgaXNEdXBsZXg7XG59XG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihXcml0YWJsZS5wcm90b3R5cGUsIFN0cmVhbS5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKFdyaXRhYmxlLCBTdHJlYW0pO1xuXG5mdW5jdGlvbiBub3AoKSB7fVxuXG5jb25zdCBrT25GaW5pc2hlZCA9IFN5bWJvbChcImtPbkZpbmlzaGVkXCIpO1xuXG5mdW5jdGlvbiBXcml0YWJsZVN0YXRlKG9wdGlvbnMsIHN0cmVhbSwgaXNEdXBsZXgpIHtcbiAgLy8gRHVwbGV4IHN0cmVhbXMgYXJlIGJvdGggcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBidXQgc2hhcmVcbiAgLy8gdGhlIHNhbWUgb3B0aW9ucyBvYmplY3QuXG4gIC8vIEhvd2V2ZXIsIHNvbWUgY2FzZXMgcmVxdWlyZSBzZXR0aW5nIG9wdGlvbnMgdG8gZGlmZmVyZW50XG4gIC8vIHZhbHVlcyBmb3IgdGhlIHJlYWRhYmxlIGFuZCB0aGUgd3JpdGFibGUgc2lkZXMgb2YgdGhlIGR1cGxleCBzdHJlYW0sXG4gIC8vIGUuZy4gb3B0aW9ucy5yZWFkYWJsZU9iamVjdE1vZGUgdnMuIG9wdGlvbnMud3JpdGFibGVPYmplY3RNb2RlLCBldGMuXG4gIGlmICh0eXBlb2YgaXNEdXBsZXggIT09IFwiYm9vbGVhblwiKSB7XG4gICAgaXNEdXBsZXggPSBpc0R1cGxleFN0cmVhbShzdHJlYW0pO1xuICB9XG5cbiAgLy8gT2JqZWN0IHN0cmVhbSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RyZWFtXG4gIC8vIGNvbnRhaW5zIGJ1ZmZlcnMgb3Igb2JqZWN0cy5cbiAgdGhpcy5vYmplY3RNb2RlID0gISEob3B0aW9ucyAmJiBvcHRpb25zLm9iamVjdE1vZGUpO1xuXG4gIGlmIChpc0R1cGxleCkge1xuICAgIHRoaXMub2JqZWN0TW9kZSA9IHRoaXMub2JqZWN0TW9kZSB8fFxuICAgICAgISEob3B0aW9ucyAmJiBvcHRpb25zLndyaXRhYmxlT2JqZWN0TW9kZSk7XG4gIH1cblxuICAvLyBUaGUgcG9pbnQgYXQgd2hpY2ggd3JpdGUoKSBzdGFydHMgcmV0dXJuaW5nIGZhbHNlXG4gIC8vIE5vdGU6IDAgaXMgYSB2YWxpZCB2YWx1ZSwgbWVhbnMgdGhhdCB3ZSBhbHdheXMgcmV0dXJuIGZhbHNlIGlmXG4gIC8vIHRoZSBlbnRpcmUgYnVmZmVyIGlzIG5vdCBmbHVzaGVkIGltbWVkaWF0ZWx5IG9uIHdyaXRlKCkuXG4gIHRoaXMuaGlnaFdhdGVyTWFyayA9IG9wdGlvbnNcbiAgICA/IGdldEhpZ2hXYXRlck1hcmsodGhpcywgb3B0aW9ucywgXCJ3cml0YWJsZUhpZ2hXYXRlck1hcmtcIiwgaXNEdXBsZXgpXG4gICAgOiBnZXREZWZhdWx0SGlnaFdhdGVyTWFyayhmYWxzZSk7XG5cbiAgLy8gaWYgX2ZpbmFsIGhhcyBiZWVuIGNhbGxlZC5cbiAgdGhpcy5maW5hbENhbGxlZCA9IGZhbHNlO1xuXG4gIC8vIGRyYWluIGV2ZW50IGZsYWcuXG4gIHRoaXMubmVlZERyYWluID0gZmFsc2U7XG4gIC8vIEF0IHRoZSBzdGFydCBvZiBjYWxsaW5nIGVuZCgpXG4gIHRoaXMuZW5kaW5nID0gZmFsc2U7XG4gIC8vIFdoZW4gZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgcmV0dXJuZWQuXG4gIHRoaXMuZW5kZWQgPSBmYWxzZTtcbiAgLy8gV2hlbiAnZmluaXNoJyBpcyBlbWl0dGVkLlxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gSGFzIGl0IGJlZW4gZGVzdHJveWVkXG4gIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIHdlIGRlY29kZSBzdHJpbmdzIGludG8gYnVmZmVycyBiZWZvcmUgcGFzc2luZyB0byBfd3JpdGU/XG4gIC8vIHRoaXMgaXMgaGVyZSBzbyB0aGF0IHNvbWUgbm9kZS1jb3JlIHN0cmVhbXMgY2FuIG9wdGltaXplIHN0cmluZ1xuICAvLyBoYW5kbGluZyBhdCBhIGxvd2VyIGxldmVsLlxuICBjb25zdCBub0RlY29kZSA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5kZWNvZGVTdHJpbmdzID09PSBmYWxzZSk7XG4gIHRoaXMuZGVjb2RlU3RyaW5ncyA9ICFub0RlY29kZTtcblxuICAvLyBDcnlwdG8gaXMga2luZCBvZiBvbGQgYW5kIGNydXN0eS4gIEhpc3RvcmljYWxseSwgaXRzIGRlZmF1bHQgc3RyaW5nXG4gIC8vIGVuY29kaW5nIGlzICdiaW5hcnknIHNvIHdlIGhhdmUgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZS5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGluIHRoZSB1bml2ZXJzZSB1c2VzICd1dGY4JywgdGhvdWdoLlxuICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKSB8fCBcInV0ZjhcIjtcblxuICAvLyBOb3QgYW4gYWN0dWFsIGJ1ZmZlciB3ZSBrZWVwIHRyYWNrIG9mLCBidXQgYSBtZWFzdXJlbWVudFxuICAvLyBvZiBob3cgbXVjaCB3ZSdyZSB3YWl0aW5nIHRvIGdldCBwdXNoZWQgdG8gc29tZSB1bmRlcmx5aW5nXG4gIC8vIHNvY2tldCBvciBmaWxlLlxuICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgLy8gQSBmbGFnIHRvIHNlZSB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3cml0ZS5cbiAgdGhpcy53cml0aW5nID0gZmFsc2U7XG5cbiAgLy8gV2hlbiB0cnVlIGFsbCB3cml0ZXMgd2lsbCBiZSBidWZmZXJlZCB1bnRpbCAudW5jb3JrKCkgY2FsbC5cbiAgdGhpcy5jb3JrZWQgPSAwO1xuXG4gIC8vIEEgZmxhZyB0byBiZSBhYmxlIHRvIHRlbGwgaWYgdGhlIG9ud3JpdGUgY2IgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LFxuICAvLyBvciBvbiBhIGxhdGVyIHRpY2suICBXZSBzZXQgdGhpcyB0byB0cnVlIGF0IGZpcnN0LCBiZWNhdXNlIGFueVxuICAvLyBhY3Rpb25zIHRoYXQgc2hvdWxkbid0IGhhcHBlbiB1bnRpbCBcImxhdGVyXCIgc2hvdWxkIGdlbmVyYWxseSBhbHNvXG4gIC8vIG5vdCBoYXBwZW4gYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBjYWxsLlxuICB0aGlzLnN5bmMgPSB0cnVlO1xuXG4gIC8vIEEgZmxhZyB0byBrbm93IGlmIHdlJ3JlIHByb2Nlc3NpbmcgcHJldmlvdXNseSBidWZmZXJlZCBpdGVtcywgd2hpY2hcbiAgLy8gbWF5IGNhbGwgdGhlIF93cml0ZSgpIGNhbGxiYWNrIGluIHRoZSBzYW1lIHRpY2ssIHNvIHRoYXQgd2UgZG9uJ3RcbiAgLy8gZW5kIHVwIGluIGFuIG92ZXJsYXBwZWQgb253cml0ZSBzaXR1YXRpb24uXG4gIHRoaXMuYnVmZmVyUHJvY2Vzc2luZyA9IGZhbHNlO1xuXG4gIC8vIFRoZSBjYWxsYmFjayB0aGF0J3MgcGFzc2VkIHRvIF93cml0ZShjaHVuaywgY2IpLlxuICB0aGlzLm9ud3JpdGUgPSBvbndyaXRlLmJpbmQodW5kZWZpbmVkLCBzdHJlYW0pO1xuXG4gIC8vIFRoZSBjYWxsYmFjayB0aGF0IHRoZSB1c2VyIHN1cHBsaWVzIHRvIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpLlxuICB0aGlzLndyaXRlY2IgPSBudWxsO1xuXG4gIC8vIFRoZSBhbW91bnQgdGhhdCBpcyBiZWluZyB3cml0dGVuIHdoZW4gX3dyaXRlIGlzIGNhbGxlZC5cbiAgdGhpcy53cml0ZWxlbiA9IDA7XG5cbiAgLy8gU3RvcmFnZSBmb3IgZGF0YSBwYXNzZWQgdG8gdGhlIGFmdGVyV3JpdGUoKSBjYWxsYmFjayBpbiBjYXNlIG9mXG4gIC8vIHN5bmNocm9ub3VzIF93cml0ZSgpIGNvbXBsZXRpb24uXG4gIHRoaXMuYWZ0ZXJXcml0ZVRpY2tJbmZvID0gbnVsbDtcblxuICByZXNldEJ1ZmZlcih0aGlzKTtcblxuICAvLyBOdW1iZXIgb2YgcGVuZGluZyB1c2VyLXN1cHBsaWVkIHdyaXRlIGNhbGxiYWNrc1xuICAvLyB0aGlzIG11c3QgYmUgMCBiZWZvcmUgJ2ZpbmlzaCcgY2FuIGJlIGVtaXR0ZWQuXG4gIHRoaXMucGVuZGluZ2NiID0gMDtcblxuICAvLyBTdHJlYW0gaXMgc3RpbGwgYmVpbmcgY29uc3RydWN0ZWQgYW5kIGNhbm5vdCBiZVxuICAvLyBkZXN0cm95ZWQgdW50aWwgY29uc3RydWN0aW9uIGZpbmlzaGVkIG9yIGZhaWxlZC5cbiAgLy8gQXN5bmMgY29uc3RydWN0aW9uIGlzIG9wdCBpbiwgdGhlcmVmb3JlIHdlIHN0YXJ0IGFzXG4gIC8vIGNvbnN0cnVjdGVkLlxuICB0aGlzLmNvbnN0cnVjdGVkID0gdHJ1ZTtcblxuICAvLyBFbWl0IHByZWZpbmlzaCBpZiB0aGUgb25seSB0aGluZyB3ZSdyZSB3YWl0aW5nIGZvciBpcyBfd3JpdGUgY2JzXG4gIC8vIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHN5bmNocm9ub3VzIFRyYW5zZm9ybSBzdHJlYW1zLlxuICB0aGlzLnByZWZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiB0aGUgZXJyb3Igd2FzIGFscmVhZHkgZW1pdHRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0aHJvd24gYWdhaW4uXG4gIHRoaXMuZXJyb3JFbWl0dGVkID0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIGNsb3NlIGJlIGVtaXR0ZWQgb24gZGVzdHJveS4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgdGhpcy5lbWl0Q2xvc2UgPSAhb3B0aW9ucyB8fCBvcHRpb25zLmVtaXRDbG9zZSAhPT0gZmFsc2U7XG5cbiAgLy8gU2hvdWxkIC5kZXN0cm95KCkgYmUgY2FsbGVkIGFmdGVyICdmaW5pc2gnIChhbmQgcG90ZW50aWFsbHkgJ2VuZCcpLlxuICB0aGlzLmF1dG9EZXN0cm95ID0gIW9wdGlvbnMgfHwgb3B0aW9ucy5hdXRvRGVzdHJveSAhPT0gZmFsc2U7XG5cbiAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZXJyb3JlZC4gV2hlbiB0cnVlIGFsbCB3cml0ZSgpIGNhbGxzXG4gIC8vIHNob3VsZCByZXR1cm4gZmFsc2UuIFRoaXMgaXMgbmVlZGVkIHNpbmNlIHdoZW4gYXV0b0Rlc3Ryb3lcbiAgLy8gaXMgZGlzYWJsZWQgd2UgbmVlZCBhIHdheSB0byB0ZWxsIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgZmFpbGVkLlxuICB0aGlzLmVycm9yZWQgPSBudWxsO1xuXG4gIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzdHJlYW0gaGFzIGZpbmlzaGVkIGRlc3Ryb3lpbmcuXG4gIHRoaXMuY2xvc2VkID0gZmFsc2U7XG5cbiAgLy8gVHJ1ZSBpZiBjbG9zZSBoYXMgYmVlbiBlbWl0dGVkIG9yIHdvdWxkIGhhdmUgYmVlbiBlbWl0dGVkXG4gIC8vIGRlcGVuZGluZyBvbiBlbWl0Q2xvc2UuXG4gIHRoaXMuY2xvc2VFbWl0dGVkID0gZmFsc2U7XG5cbiAgdGhpc1trT25GaW5pc2hlZF0gPSBbXTtcbn1cblxuZnVuY3Rpb24gcmVzZXRCdWZmZXIoc3RhdGUpIHtcbiAgc3RhdGUuYnVmZmVyZWQgPSBbXTtcbiAgc3RhdGUuYnVmZmVyZWRJbmRleCA9IDA7XG4gIHN0YXRlLmFsbEJ1ZmZlcnMgPSB0cnVlO1xuICBzdGF0ZS5hbGxOb29wID0gdHJ1ZTtcbn1cblxuV3JpdGFibGVTdGF0ZS5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24gZ2V0QnVmZmVyKCkge1xuICByZXR1cm4gdGhpcy5idWZmZXJlZC5zbGljZSh0aGlzLmJ1ZmZlcmVkSW5kZXgpO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFdyaXRhYmxlU3RhdGUucHJvdG90eXBlLCBcImJ1ZmZlcmVkUmVxdWVzdENvdW50XCIsIHtcbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlcmVkLmxlbmd0aCAtIHRoaXMuYnVmZmVyZWRJbmRleDtcbiAgfSxcbn0pO1xuXG5mdW5jdGlvbiBXcml0YWJsZShvcHRpb25zKSB7XG4gIC8vIFdyaXRhYmxlIGN0b3IgaXMgYXBwbGllZCB0byBEdXBsZXhlcywgdG9vLlxuICAvLyBgcmVhbEhhc0luc3RhbmNlYCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB1c2luZyBwbGFpbiBgaW5zdGFuY2VvZmBcbiAgLy8gd291bGQgcmV0dXJuIGZhbHNlLCBhcyBubyBgX3dyaXRhYmxlU3RhdGVgIHByb3BlcnR5IGlzIGF0dGFjaGVkLlxuXG4gIC8vIFRyeWluZyB0byB1c2UgdGhlIGN1c3RvbSBgaW5zdGFuY2VvZmAgZm9yIFdyaXRhYmxlIGhlcmUgd2lsbCBhbHNvIGJyZWFrIHRoZVxuICAvLyBOb2RlLmpzIExhenlUcmFuc2Zvcm0gaW1wbGVtZW50YXRpb24sIHdoaWNoIGhhcyBhIG5vbi10cml2aWFsIGdldHRlciBmb3JcbiAgLy8gYF93cml0YWJsZVN0YXRlYCB0aGF0IHdvdWxkIGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuXG4gIC8vIENoZWNraW5nIGZvciBhIFN0cmVhbS5EdXBsZXggaW5zdGFuY2UgaXMgZmFzdGVyIGhlcmUgaW5zdGVhZCBvZiBpbnNpZGVcbiAgLy8gdGhlIFdyaXRhYmxlU3RhdGUgY29uc3RydWN0b3IsIGF0IGxlYXN0IHdpdGggVjggNi41LlxuICBjb25zdCBpc0R1cGxleCA9IGlzRHVwbGV4U3RyZWFtKHRoaXMpO1xuXG4gIGlmIChcbiAgICAhaXNEdXBsZXggJiYgIUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLmNhbGwoV3JpdGFibGUsIHRoaXMpXG4gICkge1xuICAgIHJldHVybiBuZXcgV3JpdGFibGUob3B0aW9ucyk7XG4gIH1cblxuICB0aGlzLl93cml0YWJsZVN0YXRlID0gbmV3IFdyaXRhYmxlU3RhdGUob3B0aW9ucywgdGhpcywgaXNEdXBsZXgpO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLndyaXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3dyaXRlID0gb3B0aW9ucy53cml0ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMud3JpdGV2ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX3dyaXRldiA9IG9wdGlvbnMud3JpdGV2O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kZXN0cm95ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3kgPSBvcHRpb25zLmRlc3Ryb3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbmFsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX2ZpbmFsID0gb3B0aW9ucy5maW5hbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29uc3RydWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuX2NvbnN0cnVjdCA9IG9wdGlvbnMuY29uc3RydWN0O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaWduYWwpIHtcbiAgICAgIGFkZEFib3J0U2lnbmFsTm9WYWxpZGF0ZShvcHRpb25zLnNpZ25hbCwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgU3RyZWFtLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgZGVzdHJveUltcGwuY29uc3RydWN0KHRoaXMsICgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgICBpZiAoIXN0YXRlLndyaXRpbmcpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHRoaXMsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBmaW5pc2hNYXliZSh0aGlzLCBzdGF0ZSk7XG4gIH0pO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoV3JpdGFibGUsIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICB2YWx1ZTogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIGlmIChGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHRoaXMsIG9iamVjdCkpIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzICE9PSBXcml0YWJsZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3QuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0YXRlO1xuICB9LFxufSk7XG5cbi8vIE90aGVyd2lzZSBwZW9wbGUgY2FuIHBpcGUgV3JpdGFibGUgc3RyZWFtcywgd2hpY2ggaXMganVzdCB3cm9uZy5cbldyaXRhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICBlcnJvck9yRGVzdHJveSh0aGlzLCBuZXcgRVJSX1NUUkVBTV9DQU5OT1RfUElQRSgpKTtcbn07XG5cbmZ1bmN0aW9uIF93cml0ZShzdHJlYW0sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWVuY29kaW5nKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXRlLmRlZmF1bHRFbmNvZGluZztcbiAgICB9IGVsc2UgaWYgKGVuY29kaW5nICE9PSBcImJ1ZmZlclwiICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBFUlJfVU5LTk9XTl9FTkNPRElORyhlbmNvZGluZyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY2IgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgY2IgPSBub3A7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9TVFJFQU1fTlVMTF9WQUxVRVMoKTtcbiAgfSBlbHNlIGlmICghc3RhdGUub2JqZWN0TW9kZSkge1xuICAgIGlmICh0eXBlb2YgY2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChzdGF0ZS5kZWNvZGVTdHJpbmdzICE9PSBmYWxzZSkge1xuICAgICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGVuY29kaW5nID0gXCJidWZmZXJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNodW5rIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICBlbmNvZGluZyA9IFwiYnVmZmVyXCI7XG4gICAgfSBlbHNlIGlmIChpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICBjaHVuayA9IF91aW50OEFycmF5VG9CdWZmZXIoY2h1bmspO1xuICAgICAgZW5jb2RpbmcgPSBcImJ1ZmZlclwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICAgIFwiY2h1bmtcIixcbiAgICAgICAgW1wic3RyaW5nXCIsIFwiQnVmZmVyXCIsIFwiVWludDhBcnJheVwiXSxcbiAgICAgICAgY2h1bmssXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGxldCBlcnI7XG4gIGlmIChzdGF0ZS5lbmRpbmcpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQoKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoXCJ3cml0ZVwiKTtcbiAgfVxuXG4gIGlmIChlcnIpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnIpO1xuICAgIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXJyLCB0cnVlKTtcbiAgICByZXR1cm4gZXJyO1xuICB9XG4gIHN0YXRlLnBlbmRpbmdjYisrO1xuICByZXR1cm4gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGNiKTtcbn1cblxuV3JpdGFibGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgcmV0dXJuIF93cml0ZSh0aGlzLCBjaHVuaywgZW5jb2RpbmcsIGNiKSA9PT0gdHJ1ZTtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5jb3JrID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrO1xufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnVuY29yayA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQtLTtcblxuICAgIGlmICghc3RhdGUud3JpdGluZykge1xuICAgICAgY2xlYXJCdWZmZXIodGhpcywgc3RhdGUpO1xuICAgIH1cbiAgfVxufTtcblxuV3JpdGFibGUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykge1xuICAvLyBub2RlOjpQYXJzZUVuY29kaW5nKCkgcmVxdWlyZXMgbG93ZXIgY2FzZS5cbiAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIGVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKTtcbiAgfVxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBFUlJfVU5LTk9XTl9FTkNPRElORyhlbmNvZGluZyk7XG4gIH1cbiAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2RpbmcgPSBlbmNvZGluZztcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBJZiB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgc29tZXRoaW5nLCB0aGVuIGp1c3QgcHV0IHRoaXNcbi8vIGluIHRoZSBxdWV1ZSwgYW5kIHdhaXQgb3VyIHR1cm4uICBPdGhlcndpc2UsIGNhbGwgX3dyaXRlXG4vLyBJZiB3ZSByZXR1cm4gZmFsc2UsIHRoZW4gd2UgbmVlZCBhIGRyYWluIGV2ZW50LCBzbyBzZXQgdGhhdCBmbGFnLlxuZnVuY3Rpb24gd3JpdGVPckJ1ZmZlcihzdHJlYW0sIHN0YXRlLCBjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuXG4gIHN0YXRlLmxlbmd0aCArPSBsZW47XG5cbiAgLy8gc3RyZWFtLl93cml0ZSByZXNldHMgc3RhdGUubGVuZ3RoXG4gIGNvbnN0IHJldCA9IHN0YXRlLmxlbmd0aCA8IHN0YXRlLmhpZ2hXYXRlck1hcms7XG4gIC8vIFdlIG11c3QgZW5zdXJlIHRoYXQgcHJldmlvdXMgbmVlZERyYWluIHdpbGwgbm90IGJlIHJlc2V0IHRvIGZhbHNlLlxuICBpZiAoIXJldCkge1xuICAgIHN0YXRlLm5lZWREcmFpbiA9IHRydWU7XG4gIH1cblxuICBpZiAoc3RhdGUud3JpdGluZyB8fCBzdGF0ZS5jb3JrZWQgfHwgc3RhdGUuZXJyb3JlZCB8fCAhc3RhdGUuY29uc3RydWN0ZWQpIHtcbiAgICBzdGF0ZS5idWZmZXJlZC5wdXNoKHsgY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjayB9KTtcbiAgICBpZiAoc3RhdGUuYWxsQnVmZmVycyAmJiBlbmNvZGluZyAhPT0gXCJidWZmZXJcIikge1xuICAgICAgc3RhdGUuYWxsQnVmZmVycyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuYWxsTm9vcCAmJiBjYWxsYmFjayAhPT0gbm9wKSB7XG4gICAgICBzdGF0ZS5hbGxOb29wID0gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0YXRlLndyaXRlbGVuID0gbGVuO1xuICAgIHN0YXRlLndyaXRlY2IgPSBjYWxsYmFjaztcbiAgICBzdGF0ZS53cml0aW5nID0gdHJ1ZTtcbiAgICBzdGF0ZS5zeW5jID0gdHJ1ZTtcbiAgICBzdHJlYW0uX3dyaXRlKGNodW5rLCBlbmNvZGluZywgc3RhdGUub253cml0ZSk7XG4gICAgc3RhdGUuc3luYyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gUmV0dXJuIGZhbHNlIGlmIGVycm9yZWQgb3IgZGVzdHJveWVkIGluIG9yZGVyIHRvIGJyZWFrXG4gIC8vIGFueSBzeW5jaHJvbm91cyB3aGlsZShzdHJlYW0ud3JpdGUoZGF0YSkpIGxvb3BzLlxuICByZXR1cm4gcmV0ICYmICFzdGF0ZS5lcnJvcmVkICYmICFzdGF0ZS5kZXN0cm95ZWQ7XG59XG5cbmZ1bmN0aW9uIGRvV3JpdGUoc3RyZWFtLCBzdGF0ZSwgd3JpdGV2LCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgc3RhdGUud3JpdGVsZW4gPSBsZW47XG4gIHN0YXRlLndyaXRlY2IgPSBjYjtcbiAgc3RhdGUud3JpdGluZyA9IHRydWU7XG4gIHN0YXRlLnN5bmMgPSB0cnVlO1xuICBpZiAoc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgc3RhdGUub253cml0ZShuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoXCJ3cml0ZVwiKSk7XG4gIH0gZWxzZSBpZiAod3JpdGV2KSB7XG4gICAgc3RyZWFtLl93cml0ZXYoY2h1bmssIHN0YXRlLm9ud3JpdGUpO1xuICB9IGVsc2Uge1xuICAgIHN0cmVhbS5fd3JpdGUoY2h1bmssIGVuY29kaW5nLCBzdGF0ZS5vbndyaXRlKTtcbiAgfVxuICBzdGF0ZS5zeW5jID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG9ud3JpdGVFcnJvcihzdHJlYW0sIHN0YXRlLCBlciwgY2IpIHtcbiAgLS1zdGF0ZS5wZW5kaW5nY2I7XG5cbiAgY2IoZXIpO1xuICAvLyBFbnN1cmUgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGV2ZW4gd2hlbiBhdXRvRGVzdHJveSBpc1xuICAvLyBub3QgZW5hYmxlZC4gUGFzc2luZyBgZXJgIGhlcmUgZG9lc24ndCBtYWtlIHNlbnNlIHNpbmNlXG4gIC8vIGl0J3MgcmVsYXRlZCB0byBvbmUgc3BlY2lmaWMgd3JpdGUsIG5vdCB0byB0aGUgYnVmZmVyZWRcbiAgLy8gd3JpdGVzLlxuICBlcnJvckJ1ZmZlcihzdGF0ZSk7XG4gIC8vIFRoaXMgY2FuIGVtaXQgZXJyb3IsIGJ1dCBlcnJvciBtdXN0IGFsd2F5cyBmb2xsb3cgY2IuXG4gIGVycm9yT3JEZXN0cm95KHN0cmVhbSwgZXIpO1xufVxuXG5mdW5jdGlvbiBvbndyaXRlKHN0cmVhbSwgZXIpIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0uX3dyaXRhYmxlU3RhdGU7XG4gIGNvbnN0IHN5bmMgPSBzdGF0ZS5zeW5jO1xuICBjb25zdCBjYiA9IHN0YXRlLndyaXRlY2I7XG5cbiAgaWYgKHR5cGVvZiBjYiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXJyb3JPckRlc3Ryb3koc3RyZWFtLCBuZXcgRVJSX01VTFRJUExFX0NBTExCQUNLKCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLndyaXRpbmcgPSBmYWxzZTtcbiAgc3RhdGUud3JpdGVjYiA9IG51bGw7XG4gIHN0YXRlLmxlbmd0aCAtPSBzdGF0ZS53cml0ZWxlbjtcbiAgc3RhdGUud3JpdGVsZW4gPSAwO1xuXG4gIGlmIChlcikge1xuICAgIC8vIEF2b2lkIFY4IGxlYWssIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0MTAzI2lzc3VlY29tbWVudC02NTIwMDIzNjRcbiAgICBlci5zdGFjazsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblxuICAgIGlmICghc3RhdGUuZXJyb3JlZCkge1xuICAgICAgc3RhdGUuZXJyb3JlZCA9IGVyO1xuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugb2YgZHVwbGV4IHN0cmVhbXMgd2UgbmVlZCB0byBub3RpZnkgdGhlIHJlYWRhYmxlIHNpZGUgb2YgdGhlXG4gICAgLy8gZXJyb3IuXG4gICAgaWYgKHN0cmVhbS5fcmVhZGFibGVTdGF0ZSAmJiAhc3RyZWFtLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQpIHtcbiAgICAgIHN0cmVhbS5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkID0gZXI7XG4gICAgfVxuXG4gICAgaWYgKHN5bmMpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2sob253cml0ZUVycm9yLCBzdHJlYW0sIHN0YXRlLCBlciwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbndyaXRlRXJyb3Ioc3RyZWFtLCBzdGF0ZSwgZXIsIGNiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCA+IHN0YXRlLmJ1ZmZlcmVkSW5kZXgpIHtcbiAgICAgIGNsZWFyQnVmZmVyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzeW5jKSB7XG4gICAgICAvLyBJdCBpcyBhIGNvbW1vbiBjYXNlIHRoYXQgdGhlIGNhbGxiYWNrIHBhc3NlZCB0byAud3JpdGUoKSBpcyBhbHdheXNcbiAgICAgIC8vIHRoZSBzYW1lLiBJbiB0aGF0IGNhc2UsIHdlIGRvIG5vdCBzY2hlZHVsZSBhIG5ldyBuZXh0VGljaygpLCBidXRcbiAgICAgIC8vIHJhdGhlciBqdXN0IGluY3JlYXNlIGEgY291bnRlciwgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgYXZvaWRcbiAgICAgIC8vIG1lbW9yeSBhbGxvY2F0aW9ucy5cbiAgICAgIGlmIChcbiAgICAgICAgc3RhdGUuYWZ0ZXJXcml0ZVRpY2tJbmZvICE9PSBudWxsICYmXG4gICAgICAgIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mby5jYiA9PT0gY2JcbiAgICAgICkge1xuICAgICAgICBzdGF0ZS5hZnRlcldyaXRlVGlja0luZm8uY291bnQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbyA9IHsgY291bnQ6IDEsIGNiLCBzdHJlYW0sIHN0YXRlIH07XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soYWZ0ZXJXcml0ZVRpY2ssIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgMSwgY2IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZnRlcldyaXRlVGljayh7IHN0cmVhbSwgc3RhdGUsIGNvdW50LCBjYiB9KSB7XG4gIHN0YXRlLmFmdGVyV3JpdGVUaWNrSW5mbyA9IG51bGw7XG4gIHJldHVybiBhZnRlcldyaXRlKHN0cmVhbSwgc3RhdGUsIGNvdW50LCBjYik7XG59XG5cbmZ1bmN0aW9uIGFmdGVyV3JpdGUoc3RyZWFtLCBzdGF0ZSwgY291bnQsIGNiKSB7XG4gIGNvbnN0IG5lZWREcmFpbiA9ICFzdGF0ZS5lbmRpbmcgJiYgIXN0cmVhbS5kZXN0cm95ZWQgJiYgc3RhdGUubGVuZ3RoID09PSAwICYmXG4gICAgc3RhdGUubmVlZERyYWluO1xuICBpZiAobmVlZERyYWluKSB7XG4gICAgc3RhdGUubmVlZERyYWluID0gZmFsc2U7XG4gICAgc3RyZWFtLmVtaXQoXCJkcmFpblwiKTtcbiAgfVxuXG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIHN0YXRlLnBlbmRpbmdjYi0tO1xuICAgIGNiKCk7XG4gIH1cblxuICBpZiAoc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgZXJyb3JCdWZmZXIoc3RhdGUpO1xuICB9XG5cbiAgZmluaXNoTWF5YmUoc3RyZWFtLCBzdGF0ZSk7XG59XG5cbi8vIElmIHRoZXJlJ3Mgc29tZXRoaW5nIGluIHRoZSBidWZmZXIgd2FpdGluZywgdGhlbiBpbnZva2UgY2FsbGJhY2tzLlxuZnVuY3Rpb24gZXJyb3JCdWZmZXIoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLndyaXRpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGxldCBuID0gc3RhdGUuYnVmZmVyZWRJbmRleDsgbiA8IHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aDsgKytuKSB7XG4gICAgY29uc3QgeyBjaHVuaywgY2FsbGJhY2sgfSA9IHN0YXRlLmJ1ZmZlcmVkW25dO1xuICAgIGNvbnN0IGxlbiA9IHN0YXRlLm9iamVjdE1vZGUgPyAxIDogY2h1bmsubGVuZ3RoO1xuICAgIHN0YXRlLmxlbmd0aCAtPSBsZW47XG4gICAgY2FsbGJhY2sobmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKFwid3JpdGVcIikpO1xuICB9XG5cbiAgY29uc3Qgb25maW5pc2hDYWxsYmFja3MgPSBzdGF0ZVtrT25GaW5pc2hlZF0uc3BsaWNlKDApO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZmluaXNoQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgb25maW5pc2hDYWxsYmFja3NbaV0obmV3IEVSUl9TVFJFQU1fREVTVFJPWUVEKFwiZW5kXCIpKTtcbiAgfVxuXG4gIHJlc2V0QnVmZmVyKHN0YXRlKTtcbn1cblxuLy8gSWYgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIGJ1ZmZlciB3YWl0aW5nLCB0aGVuIHByb2Nlc3MgaXQuXG5mdW5jdGlvbiBjbGVhckJ1ZmZlcihzdHJlYW0sIHN0YXRlKSB7XG4gIGlmIChcbiAgICBzdGF0ZS5jb3JrZWQgfHxcbiAgICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nIHx8XG4gICAgc3RhdGUuZGVzdHJveWVkIHx8XG4gICAgIXN0YXRlLmNvbnN0cnVjdGVkXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgYnVmZmVyZWQsIGJ1ZmZlcmVkSW5kZXgsIG9iamVjdE1vZGUgfSA9IHN0YXRlO1xuICBjb25zdCBidWZmZXJlZExlbmd0aCA9IGJ1ZmZlcmVkLmxlbmd0aCAtIGJ1ZmZlcmVkSW5kZXg7XG5cbiAgaWYgKCFidWZmZXJlZExlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpID0gYnVmZmVyZWRJbmRleDtcblxuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgaWYgKGJ1ZmZlcmVkTGVuZ3RoID4gMSAmJiBzdHJlYW0uX3dyaXRldikge1xuICAgIHN0YXRlLnBlbmRpbmdjYiAtPSBidWZmZXJlZExlbmd0aCAtIDE7XG5cbiAgICBjb25zdCBjYWxsYmFjayA9IHN0YXRlLmFsbE5vb3AgPyBub3AgOiAoZXJyKSA9PiB7XG4gICAgICBmb3IgKGxldCBuID0gaTsgbiA8IGJ1ZmZlcmVkLmxlbmd0aDsgKytuKSB7XG4gICAgICAgIGJ1ZmZlcmVkW25dLmNhbGxiYWNrKGVycik7XG4gICAgICB9XG4gICAgfTtcbiAgICAvLyBNYWtlIGEgY29weSBvZiBgYnVmZmVyZWRgIGlmIGl0J3MgZ29pbmcgdG8gYmUgdXNlZCBieSBgY2FsbGJhY2tgIGFib3ZlLFxuICAgIC8vIHNpbmNlIGBkb1dyaXRlYCB3aWxsIG11dGF0ZSB0aGUgYXJyYXkuXG4gICAgY29uc3QgY2h1bmtzID0gc3RhdGUuYWxsTm9vcCAmJiBpID09PSAwID8gYnVmZmVyZWQgOiBidWZmZXJlZC5zbGljZShpKTtcbiAgICBjaHVua3MuYWxsQnVmZmVycyA9IHN0YXRlLmFsbEJ1ZmZlcnM7XG5cbiAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIHRydWUsIHN0YXRlLmxlbmd0aCwgY2h1bmtzLCBcIlwiLCBjYWxsYmFjayk7XG5cbiAgICByZXNldEJ1ZmZlcihzdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgY29uc3QgeyBjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrIH0gPSBidWZmZXJlZFtpXTtcbiAgICAgIGJ1ZmZlcmVkW2krK10gPSBudWxsO1xuICAgICAgY29uc3QgbGVuID0gb2JqZWN0TW9kZSA/IDEgOiBjaHVuay5sZW5ndGg7XG4gICAgICBkb1dyaXRlKHN0cmVhbSwgc3RhdGUsIGZhbHNlLCBsZW4sIGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICAgIH0gd2hpbGUgKGkgPCBidWZmZXJlZC5sZW5ndGggJiYgIXN0YXRlLndyaXRpbmcpO1xuXG4gICAgaWYgKGkgPT09IGJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgcmVzZXRCdWZmZXIoc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoaSA+IDI1Nikge1xuICAgICAgYnVmZmVyZWQuc3BsaWNlKDAsIGkpO1xuICAgICAgc3RhdGUuYnVmZmVyZWRJbmRleCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmJ1ZmZlcmVkSW5kZXggPSBpO1xuICAgIH1cbiAgfVxuICBzdGF0ZS5idWZmZXJQcm9jZXNzaW5nID0gZmFsc2U7XG59XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBpZiAodGhpcy5fd3JpdGV2KSB7XG4gICAgdGhpcy5fd3JpdGV2KFt7IGNodW5rLCBlbmNvZGluZyB9XSwgY2IpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRChcIl93cml0ZSgpXCIpO1xuICB9XG59O1xuXG5Xcml0YWJsZS5wcm90b3R5cGUuX3dyaXRldiA9IG51bGw7XG5cbldyaXRhYmxlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYikge1xuICBjb25zdCBzdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBjaHVuayA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2IgPSBjaHVuaztcbiAgICBjaHVuayA9IG51bGw7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2IgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICBsZXQgZXJyO1xuXG4gIGlmIChjaHVuayAhPT0gbnVsbCAmJiBjaHVuayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcmV0ID0gX3dyaXRlKHRoaXMsIGNodW5rLCBlbmNvZGluZyk7XG4gICAgaWYgKHJldCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBlcnIgPSByZXQ7XG4gICAgfVxuICB9XG5cbiAgLy8gLmVuZCgpIGZ1bGx5IHVuY29ya3MuXG4gIGlmIChzdGF0ZS5jb3JrZWQpIHtcbiAgICBzdGF0ZS5jb3JrZWQgPSAxO1xuICAgIHRoaXMudW5jb3JrKCk7XG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgLy8gRG8gbm90aGluZy4uLlxuICB9IGVsc2UgaWYgKCFzdGF0ZS5lcnJvcmVkICYmICFzdGF0ZS5lbmRpbmcpIHtcbiAgICAvLyBUaGlzIGlzIGZvcmdpdmluZyBpbiB0ZXJtcyBvZiB1bm5lY2Vzc2FyeSBjYWxscyB0byBlbmQoKSBhbmQgY2FuIGhpZGVcbiAgICAvLyBsb2dpYyBlcnJvcnMuIEhvd2V2ZXIsIHVzdWFsbHkgc3VjaCBlcnJvcnMgYXJlIGhhcm1sZXNzIGFuZCBjYXVzaW5nIGFcbiAgICAvLyBoYXJkIGVycm9yIGNhbiBiZSBkaXNwcm9wb3J0aW9uYXRlbHkgZGVzdHJ1Y3RpdmUuIEl0IGlzIG5vdCBhbHdheXNcbiAgICAvLyB0cml2aWFsIGZvciB0aGUgdXNlciB0byBkZXRlcm1pbmUgd2hldGhlciBlbmQoKSBuZWVkcyB0byBiZSBjYWxsZWRcbiAgICAvLyBvciBub3QuXG5cbiAgICBzdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICAgIGZpbmlzaE1heWJlKHRoaXMsIHN0YXRlLCB0cnVlKTtcbiAgICBzdGF0ZS5lbmRlZCA9IHRydWU7XG4gIH0gZWxzZSBpZiAoc3RhdGUuZmluaXNoZWQpIHtcbiAgICBlcnIgPSBuZXcgRVJSX1NUUkVBTV9BTFJFQURZX0ZJTklTSEVEKFwiZW5kXCIpO1xuICB9IGVsc2UgaWYgKHN0YXRlLmRlc3Ryb3llZCkge1xuICAgIGVyciA9IG5ldyBFUlJfU1RSRUFNX0RFU1RST1lFRChcImVuZFwiKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGlmIChlcnIgfHwgc3RhdGUuZmluaXNoZWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IsIGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlW2tPbkZpbmlzaGVkXS5wdXNoKGNiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIG5lZWRGaW5pc2goc3RhdGUpIHtcbiAgcmV0dXJuIChzdGF0ZS5lbmRpbmcgJiZcbiAgICBzdGF0ZS5jb25zdHJ1Y3RlZCAmJlxuICAgIHN0YXRlLmxlbmd0aCA9PT0gMCAmJlxuICAgICFzdGF0ZS5lcnJvcmVkICYmXG4gICAgc3RhdGUuYnVmZmVyZWQubGVuZ3RoID09PSAwICYmXG4gICAgIXN0YXRlLmZpbmlzaGVkICYmXG4gICAgIXN0YXRlLndyaXRpbmcgJiZcbiAgICAhc3RhdGUuZXJyb3JFbWl0dGVkICYmXG4gICAgIXN0YXRlLmNsb3NlRW1pdHRlZCk7XG59XG5cbmZ1bmN0aW9uIGNhbGxGaW5hbChzdHJlYW0sIHN0YXRlKSB7XG4gIGxldCBjYWxsZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBvbkZpbmlzaChlcnIpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciA/PyBFUlJfTVVMVElQTEVfQ0FMTEJBQ0soKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG5cbiAgICBzdGF0ZS5wZW5kaW5nY2ItLTtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjb25zdCBvbmZpbmlzaENhbGxiYWNrcyA9IHN0YXRlW2tPbkZpbmlzaGVkXS5zcGxpY2UoMCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9uZmluaXNoQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9uZmluaXNoQ2FsbGJhY2tzW2ldKGVycik7XG4gICAgICB9XG4gICAgICBlcnJvck9yRGVzdHJveShzdHJlYW0sIGVyciwgc3RhdGUuc3luYyk7XG4gICAgfSBlbHNlIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgICAgc3RhdGUucHJlZmluaXNoZWQgPSB0cnVlO1xuICAgICAgc3RyZWFtLmVtaXQoXCJwcmVmaW5pc2hcIik7XG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0LiBEb24ndCBjaGVjayBzdGF0ZS5zeW5jIGhlcmUuXG4gICAgICAvLyBTb21lIHN0cmVhbXMgYXNzdW1lICdmaW5pc2gnIHdpbGwgYmUgZW1pdHRlZFxuICAgICAgLy8gYXN5bmNocm9ub3VzbHkgcmVsYXRpdmUgdG8gX2ZpbmFsIGNhbGxiYWNrLlxuICAgICAgc3RhdGUucGVuZGluZ2NiKys7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZpbmlzaCwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGUuc3luYyA9IHRydWU7XG4gIHN0YXRlLnBlbmRpbmdjYisrO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gc3RyZWFtLl9maW5hbChvbkZpbmlzaCk7XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBjb25zdCB0aGVuID0gcmVzdWx0LnRoZW47XG4gICAgICBpZiAodHlwZW9mIHRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2sob25GaW5pc2gsIG51bGwpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhvbkZpbmlzaCwgZXJyKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgb25GaW5pc2goc3RyZWFtLCBzdGF0ZSwgZXJyKTtcbiAgfVxuXG4gIHN0YXRlLnN5bmMgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcHJlZmluaXNoKHN0cmVhbSwgc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5wcmVmaW5pc2hlZCAmJiAhc3RhdGUuZmluYWxDYWxsZWQpIHtcbiAgICBpZiAodHlwZW9mIHN0cmVhbS5fZmluYWwgPT09IFwiZnVuY3Rpb25cIiAmJiAhc3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICBzdGF0ZS5maW5hbENhbGxlZCA9IHRydWU7XG4gICAgICBjYWxsRmluYWwoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnByZWZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5lbWl0KFwicHJlZmluaXNoXCIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5pc2hNYXliZShzdHJlYW0sIHN0YXRlLCBzeW5jKSB7XG4gIGlmIChuZWVkRmluaXNoKHN0YXRlKSkge1xuICAgIHByZWZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICBpZiAoc3RhdGUucGVuZGluZ2NiID09PSAwICYmIG5lZWRGaW5pc2goc3RhdGUpKSB7XG4gICAgICBzdGF0ZS5wZW5kaW5nY2IrKztcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soZmluaXNoLCBzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmlzaChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoKHN0cmVhbSwgc3RhdGUpIHtcbiAgc3RhdGUucGVuZGluZ2NiLS07XG4gIHN0YXRlLmZpbmlzaGVkID0gdHJ1ZTtcblxuICBjb25zdCBvbmZpbmlzaENhbGxiYWNrcyA9IHN0YXRlW2tPbkZpbmlzaGVkXS5zcGxpY2UoMCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb25maW5pc2hDYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICBvbmZpbmlzaENhbGxiYWNrc1tpXSgpO1xuICB9XG5cbiAgc3RyZWFtLmVtaXQoXCJmaW5pc2hcIik7XG5cbiAgaWYgKHN0YXRlLmF1dG9EZXN0cm95KSB7XG4gICAgLy8gSW4gY2FzZSBvZiBkdXBsZXggc3RyZWFtcyB3ZSBuZWVkIGEgd2F5IHRvIGRldGVjdFxuICAgIC8vIGlmIHRoZSByZWFkYWJsZSBzaWRlIGlzIHJlYWR5IGZvciBhdXRvRGVzdHJveSBhcyB3ZWxsLlxuICAgIGNvbnN0IHJTdGF0ZSA9IHN0cmVhbS5fcmVhZGFibGVTdGF0ZTtcbiAgICBjb25zdCBhdXRvRGVzdHJveSA9ICFyU3RhdGUgfHwgKFxuICAgICAgclN0YXRlLmF1dG9EZXN0cm95ICYmXG4gICAgICAvLyBXZSBkb24ndCBleHBlY3QgdGhlIHJlYWRhYmxlIHRvIGV2ZXIgJ2VuZCdcbiAgICAgIC8vIGlmIHJlYWRhYmxlIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLlxuICAgICAgKHJTdGF0ZS5lbmRFbWl0dGVkIHx8IHJTdGF0ZS5yZWFkYWJsZSA9PT0gZmFsc2UpXG4gICAgKTtcbiAgICBpZiAoYXV0b0Rlc3Ryb3kpIHtcbiAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgfVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdyaXRhYmxlLnByb3RvdHlwZSwge1xuICBkZXN0cm95ZWQ6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkIDogZmFsc2U7XG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHkgbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgaWYgKHRoaXMuX3dyaXRhYmxlU3RhdGUpIHtcbiAgICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuXG4gIHdyaXRhYmxlOiB7XG4gICAgZ2V0KCkge1xuICAgICAgY29uc3QgdyA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gICAgICAvLyB3LndyaXRhYmxlID09PSBmYWxzZSBtZWFucyB0aGF0IHRoaXMgaXMgcGFydCBvZiBhIER1cGxleCBzdHJlYW1cbiAgICAgIC8vIHdoZXJlIHRoZSB3cml0YWJsZSBzaWRlIHdhcyBkaXNhYmxlZCB1cG9uIGNvbnN0cnVjdGlvbi5cbiAgICAgIC8vIENvbXBhdC4gVGhlIHVzZXIgbWlnaHQgbWFudWFsbHkgZGlzYWJsZSB3cml0YWJsZSBzaWRlIHRocm91Z2hcbiAgICAgIC8vIGRlcHJlY2F0ZWQgc2V0dGVyLlxuICAgICAgcmV0dXJuICEhdyAmJiB3LndyaXRhYmxlICE9PSBmYWxzZSAmJiAhdy5kZXN0cm95ZWQgJiYgIXcuZXJyb3JlZCAmJlxuICAgICAgICAhdy5lbmRpbmcgJiYgIXcuZW5kZWQ7XG4gICAgfSxcbiAgICBzZXQodmFsKSB7XG4gICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJsZS5cbiAgICAgIGlmICh0aGlzLl93cml0YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGUgPSAhIXZhbDtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuXG4gIHdyaXRhYmxlRmluaXNoZWQ6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQgOiBmYWxzZTtcbiAgICB9LFxuICB9LFxuXG4gIHdyaXRhYmxlT2JqZWN0TW9kZToge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlID8gdGhpcy5fd3JpdGFibGVTdGF0ZS5vYmplY3RNb2RlIDogZmFsc2U7XG4gICAgfSxcbiAgfSxcblxuICB3cml0YWJsZUJ1ZmZlcjoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZVN0YXRlICYmIHRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCk7XG4gICAgfSxcbiAgfSxcblxuICB3cml0YWJsZUVuZGVkOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgPyB0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZyA6IGZhbHNlO1xuICAgIH0sXG4gIH0sXG5cbiAgd3JpdGFibGVOZWVkRHJhaW46IHtcbiAgICBnZXQoKSB7XG4gICAgICBjb25zdCB3U3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuICAgICAgaWYgKCF3U3RhdGUpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiAhd1N0YXRlLmRlc3Ryb3llZCAmJiAhd1N0YXRlLmVuZGluZyAmJiB3U3RhdGUubmVlZERyYWluO1xuICAgIH0sXG4gIH0sXG5cbiAgd3JpdGFibGVIaWdoV2F0ZXJNYXJrOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrO1xuICAgIH0sXG4gIH0sXG5cbiAgd3JpdGFibGVDb3JrZWQ6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSA/IHRoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkIDogMDtcbiAgICB9LFxuICB9LFxuXG4gIHdyaXRhYmxlTGVuZ3RoOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGg7XG4gICAgfSxcbiAgfSxcbn0pO1xuXG5jb25zdCBkZXN0cm95ID0gZGVzdHJveUltcGwuZGVzdHJveTtcbldyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGlzLl93cml0YWJsZVN0YXRlO1xuXG4gIC8vIEludm9rZSBwZW5kaW5nIGNhbGxiYWNrcy5cbiAgaWYgKFxuICAgICFzdGF0ZS5kZXN0cm95ZWQgJiZcbiAgICAoc3RhdGUuYnVmZmVyZWRJbmRleCA8IHN0YXRlLmJ1ZmZlcmVkLmxlbmd0aCB8fFxuICAgICAgc3RhdGVba09uRmluaXNoZWRdLmxlbmd0aClcbiAgKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhlcnJvckJ1ZmZlciwgc3RhdGUpO1xuICB9XG5cbiAgZGVzdHJveS5jYWxsKHRoaXMsIGVyciwgY2IpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZS5fdW5kZXN0cm95ID0gZGVzdHJveUltcGwudW5kZXN0cm95O1xuV3JpdGFibGUucHJvdG90eXBlLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgY2IoZXJyKTtcbn07XG5cbldyaXRhYmxlLnByb3RvdHlwZVtFRS5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXSA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgdGhpcy5kZXN0cm95KGVycik7XG59O1xuXG5Xcml0YWJsZS5Xcml0YWJsZVN0YXRlID0gV3JpdGFibGVTdGF0ZTtcblxuZnVuY3Rpb24gaXNXcml0YWJsZVN0cmVhbShvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIFdyaXRhYmxlU3RyZWFtO1xufVxuXG5leHBvcnQgY29uc3QgZnJvbVdlYiA9IFdyaXRhYmxlLmZyb21XZWIgPSBmdW5jdGlvbiAoXG4gIHdyaXRhYmxlU3RyZWFtLFxuICBvcHRpb25zID0ge30sXG4pIHtcbiAgaWYgKCFpc1dyaXRhYmxlU3RyZWFtKHdyaXRhYmxlU3RyZWFtKSkge1xuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICAgIFwid3JpdGFibGVTdHJlYW1cIixcbiAgICAgIFwiV3JpdGFibGVTdHJlYW1cIixcbiAgICAgIHdyaXRhYmxlU3RyZWFtLFxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCBcIm9wdGlvbnNcIik7XG4gIGNvbnN0IHtcbiAgICBoaWdoV2F0ZXJNYXJrLFxuICAgIGRlY29kZVN0cmluZ3MgPSB0cnVlLFxuICAgIG9iamVjdE1vZGUgPSBmYWxzZSxcbiAgICBzaWduYWwsXG4gIH0gPSBvcHRpb25zO1xuXG4gIHZhbGlkYXRlQm9vbGVhbihvYmplY3RNb2RlLCBcIm9wdGlvbnMub2JqZWN0TW9kZVwiKTtcbiAgdmFsaWRhdGVCb29sZWFuKGRlY29kZVN0cmluZ3MsIFwib3B0aW9ucy5kZWNvZGVTdHJpbmdzXCIpO1xuXG4gIGNvbnN0IHdyaXRlciA9IHdyaXRhYmxlU3RyZWFtLmdldFdyaXRlcigpO1xuICBsZXQgY2xvc2VkID0gZmFsc2U7XG5cbiAgY29uc3Qgd3JpdGFibGUgPSBuZXcgV3JpdGFibGUoe1xuICAgIGhpZ2hXYXRlck1hcmssXG4gICAgb2JqZWN0TW9kZSxcbiAgICBkZWNvZGVTdHJpbmdzLFxuICAgIHNpZ25hbCxcblxuICAgIHdyaXRldihjaHVua3MsIGNhbGxiYWNrKSB7XG4gICAgICBmdW5jdGlvbiBkb25lKGVycm9yKSB7XG4gICAgICAgIGVycm9yID0gZXJyb3IuZmlsdGVyKChlKSA9PiBlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjayhlcnJvci5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBlcnJvcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSW4gYSBuZXh0IHRpY2sgYmVjYXVzZSB0aGlzIGlzIGhhcHBlbmluZyB3aXRoaW5cbiAgICAgICAgICAvLyBhIHByb21pc2UgY29udGV4dCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzXG4gICAgICAgICAgLy8gdGhyb3duIHdlIGRvbid0IHdhbnQgdGhvc2UgdG8gY2F1c2UgYW4gdW5oYW5kbGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uLiBMZXQncyBqdXN0IGVzY2FwZSB0aGUgcHJvbWlzZSBhbmRcbiAgICAgICAgICAvLyBoYW5kbGUgaXQgc2VwYXJhdGVseS5cbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IGRlc3Ryb3kuY2FsbCh3cml0YWJsZSwgZXJyb3IpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3cml0ZXIucmVhZHkudGhlbihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBQcm9taXNlLkFsbChcbiAgICAgICAgICAgIGNodW5rcy5tYXAoKGRhdGEpID0+IHdyaXRlci53cml0ZShkYXRhLmNodW5rKSksXG4gICAgICAgICAgKS50aGVuKGRvbmUsIGRvbmUpLFxuICAgICAgICBkb25lLFxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgd3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gXCJzdHJpbmdcIiAmJiBkZWNvZGVTdHJpbmdzICYmICFvYmplY3RNb2RlKSB7XG4gICAgICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssIGVuY29kaW5nKTtcbiAgICAgICAgY2h1bmsgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgICBjaHVuay5idWZmZXIsXG4gICAgICAgICAgY2h1bmsuYnl0ZU9mZnNldCxcbiAgICAgICAgICBjaHVuay5ieXRlTGVuZ3RoLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkb25lKGVycm9yKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGRlc3Ryb3kodGhpcywgZHVwbGV4LCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd3JpdGVyLnJlYWR5LnRoZW4oXG4gICAgICAgICgpID0+IHdyaXRlci53cml0ZShjaHVuaykudGhlbihkb25lLCBkb25lKSxcbiAgICAgICAgZG9uZSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIGRlc3Ryb3koZXJyb3IsIGNhbGxiYWNrKSB7XG4gICAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBJbiBhIG5leHQgdGljayBiZWNhdXNlIHRoaXMgaXMgaGFwcGVuaW5nIHdpdGhpblxuICAgICAgICAgIC8vIGEgcHJvbWlzZSBjb250ZXh0LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBlcnJvcnNcbiAgICAgICAgICAvLyB0aHJvd24gd2UgZG9uJ3Qgd2FudCB0aG9zZSB0byBjYXVzZSBhbiB1bmhhbmRsZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24uIExldCdzIGp1c3QgZXNjYXBlIHRoZSBwcm9taXNlIGFuZFxuICAgICAgICAgIC8vIGhhbmRsZSBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjbG9zZWQpIHtcbiAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHtcbiAgICAgICAgICB3cml0ZXIuYWJvcnQoZXJyb3IpLnRoZW4oZG9uZSwgZG9uZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JpdGVyLmNsb3NlKCkudGhlbihkb25lLCBkb25lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvbmUoKTtcbiAgICB9LFxuXG4gICAgZmluYWwoY2FsbGJhY2spIHtcbiAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyb3IpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSW4gYSBuZXh0IHRpY2sgYmVjYXVzZSB0aGlzIGlzIGhhcHBlbmluZyB3aXRoaW5cbiAgICAgICAgICAvLyBhIHByb21pc2UgY29udGV4dCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzXG4gICAgICAgICAgLy8gdGhyb3duIHdlIGRvbid0IHdhbnQgdGhvc2UgdG8gY2F1c2UgYW4gdW5oYW5kbGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uLiBMZXQncyBqdXN0IGVzY2FwZSB0aGUgcHJvbWlzZSBhbmRcbiAgICAgICAgICAvLyBoYW5kbGUgaXQgc2VwYXJhdGVseS5cbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IGRlc3Ryb3kuY2FsbCh3cml0YWJsZSwgZXJyb3IpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWNsb3NlZCkge1xuICAgICAgICB3cml0ZXIuY2xvc2UoKS50aGVuKGRvbmUsIGRvbmUpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHdyaXRlci5jbG9zZWQudGhlbihcbiAgICAoKSA9PiB7XG4gICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgaWYgKCFpc1dyaXRhYmxlRW5kZWQod3JpdGFibGUpKSB7XG4gICAgICAgIGRlc3Ryb3kuY2FsbCh3cml0YWJsZSwgbmV3IEVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFKCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgKGVycm9yKSA9PiB7XG4gICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgZGVzdHJveS5jYWxsKHdyaXRhYmxlLCBlcnJvcik7XG4gICAgfSxcbiAgKTtcblxuICByZXR1cm4gd3JpdGFibGU7XG59O1xuXG5Xcml0YWJsZS5Xcml0YWJsZSA9IFdyaXRhYmxlO1xuXG5leHBvcnQgZGVmYXVsdCBXcml0YWJsZTtcbmV4cG9ydCB7IFdyaXRhYmxlLCBXcml0YWJsZVN0YXRlIH07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQgYW5kIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIGRlbm8tbGludC1pZ25vcmUtZmlsZVxuXG5pbXBvcnQgeyBjcmVhdGVEZWZlcnJlZFByb21pc2UgfSBmcm9tIFwiLi4vdXRpbC5tanNcIjtcbmltcG9ydCB7IGRlc3Ryb3llciB9IGZyb20gXCIuL2Rlc3Ryb3kubWpzXCI7XG5pbXBvcnQgeyBpc0Jsb2IgfSBmcm9tIFwiLi4vYmxvYi5tanNcIjtcbmltcG9ydCB7XG4gIEFib3J0RXJyb3IsXG4gIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfSU5WQUxJRF9BUkdfVkFMVUUsXG4gIEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxcbiAgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UsXG59IGZyb20gXCIuLi9lcnJvcnMudHNcIjtcbmltcG9ydCB7XG4gIGlzRHVwbGV4Tm9kZVN0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNOb2RlU3RyZWFtLFxuICBpc1JlYWRhYmxlLFxuICBpc1JlYWRhYmxlRW5kZWQsXG4gIGlzUmVhZGFibGVOb2RlU3RyZWFtLFxuICBpc1dyaXRhYmxlLFxuICBpc1dyaXRhYmxlRW5kZWQsXG4gIGlzV3JpdGFibGVOb2RlU3RyZWFtLFxufSBmcm9tIFwiLi91dGlscy5tanNcIjtcbmltcG9ydCAqIGFzIHByb2Nlc3MgZnJvbSBcIi4uLy4uL19wcm9jZXNzL3Byb2Nlc3MudHNcIjtcbmltcG9ydCBfZnJvbSBmcm9tIFwiLi9mcm9tLm1qc1wiO1xuaW1wb3J0IGVvcyBmcm9tIFwiLi9lbmQtb2Ytc3RyZWFtLm1qc1wiO1xuaW1wb3J0IFJlYWRhYmxlIGZyb20gXCIuL3JlYWRhYmxlLm1qc1wiO1xuaW1wb3J0IFdyaXRhYmxlIGZyb20gXCIuL3dyaXRhYmxlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVCb29sZWFuLCB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi92YWxpZGF0b3JzLm1qc1wiO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIi4uLy4uL2J1ZmZlci50c1wiO1xuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoRHVwbGV4LnByb3RvdHlwZSwgUmVhZGFibGUucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihEdXBsZXgsIFJlYWRhYmxlKTtcblxue1xuICAvLyBBbGxvdyB0aGUga2V5cyBhcnJheSB0byBiZSBHQydlZC5cbiAgZm9yIChjb25zdCBtZXRob2Qgb2YgT2JqZWN0LmtleXMoV3JpdGFibGUucHJvdG90eXBlKSkge1xuICAgIGlmICghRHVwbGV4LnByb3RvdHlwZVttZXRob2RdKSB7XG4gICAgICBEdXBsZXgucHJvdG90eXBlW21ldGhvZF0gPSBXcml0YWJsZS5wcm90b3R5cGVbbWV0aG9kXTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gRHVwbGV4KG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIER1cGxleCkpIHtcbiAgICByZXR1cm4gbmV3IER1cGxleChvcHRpb25zKTtcbiAgfVxuXG4gIFJlYWRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIFdyaXRhYmxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIHRoaXMuYWxsb3dIYWxmT3BlbiA9IHRydWU7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZWFkYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucmVhZGFibGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy53cml0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hbGxvd0hhbGZPcGVuID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hbGxvd0hhbGZPcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKER1cGxleC5wcm90b3R5cGUsIHtcbiAgd3JpdGFibGU6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV3JpdGFibGUucHJvdG90eXBlLCBcIndyaXRhYmxlXCIpLFxuICB3cml0YWJsZUhpZ2hXYXRlck1hcms6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgV3JpdGFibGUucHJvdG90eXBlLFxuICAgIFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIsXG4gICksXG4gIHdyaXRhYmxlT2JqZWN0TW9kZTogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICBXcml0YWJsZS5wcm90b3R5cGUsXG4gICAgXCJ3cml0YWJsZU9iamVjdE1vZGVcIixcbiAgKSxcbiAgd3JpdGFibGVCdWZmZXI6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgV3JpdGFibGUucHJvdG90eXBlLFxuICAgIFwid3JpdGFibGVCdWZmZXJcIixcbiAgKSxcbiAgd3JpdGFibGVMZW5ndGg6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgV3JpdGFibGUucHJvdG90eXBlLFxuICAgIFwid3JpdGFibGVMZW5ndGhcIixcbiAgKSxcbiAgd3JpdGFibGVGaW5pc2hlZDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICBXcml0YWJsZS5wcm90b3R5cGUsXG4gICAgXCJ3cml0YWJsZUZpbmlzaGVkXCIsXG4gICksXG4gIHdyaXRhYmxlQ29ya2VkOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgIFdyaXRhYmxlLnByb3RvdHlwZSxcbiAgICBcIndyaXRhYmxlQ29ya2VkXCIsXG4gICksXG4gIHdyaXRhYmxlRW5kZWQ6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgV3JpdGFibGUucHJvdG90eXBlLFxuICAgIFwid3JpdGFibGVFbmRlZFwiLFxuICApLFxuICB3cml0YWJsZU5lZWREcmFpbjogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICBXcml0YWJsZS5wcm90b3R5cGUsXG4gICAgXCJ3cml0YWJsZU5lZWREcmFpblwiLFxuICApLFxuXG4gIGRlc3Ryb3llZDoge1xuICAgIGdldCgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUgPT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCAmJiB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHVzZXIgaXMgZXhwbGljaXRseVxuICAgICAgLy8gbWFuYWdpbmcgZGVzdHJveWVkLlxuICAgICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUgJiYgdGhpcy5fd3JpdGFibGVTdGF0ZSkge1xuICAgICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZCA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gIH0sXG59KTtcblxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbShvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtO1xufVxuXG5mdW5jdGlvbiBpc1dyaXRhYmxlU3RyZWFtKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgV3JpdGFibGVTdHJlYW07XG59XG5cbmV4cG9ydCBjb25zdCBmcm9tV2ViID0gRHVwbGV4LmZyb21XZWIgPSBmdW5jdGlvbiAocGFpciwgb3B0aW9ucykge1xuICB2YWxpZGF0ZU9iamVjdChwYWlyLCBcInBhaXJcIik7XG4gIGNvbnN0IHtcbiAgICByZWFkYWJsZTogcmVhZGFibGVTdHJlYW0sXG4gICAgd3JpdGFibGU6IHdyaXRhYmxlU3RyZWFtLFxuICB9ID0gcGFpcjtcblxuICBpZiAoIWlzUmVhZGFibGVTdHJlYW0ocmVhZGFibGVTdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgICAgXCJwYWlyLnJlYWRhYmxlXCIsXG4gICAgICBcIlJlYWRhYmxlU3RyZWFtXCIsXG4gICAgICByZWFkYWJsZVN0cmVhbSxcbiAgICApO1xuICB9XG4gIGlmICghaXNXcml0YWJsZVN0cmVhbSh3cml0YWJsZVN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXG4gICAgICBcInBhaXIud3JpdGFibGVcIixcbiAgICAgIFwiV3JpdGFibGVTdHJlYW1cIixcbiAgICAgIHdyaXRhYmxlU3RyZWFtLFxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZU9iamVjdChvcHRpb25zLCBcIm9wdGlvbnNcIik7XG4gIGNvbnN0IHtcbiAgICBhbGxvd0hhbGZPcGVuID0gZmFsc2UsXG4gICAgb2JqZWN0TW9kZSA9IGZhbHNlLFxuICAgIGVuY29kaW5nLFxuICAgIGRlY29kZVN0cmluZ3MgPSB0cnVlLFxuICAgIGhpZ2hXYXRlck1hcmssXG4gICAgc2lnbmFsLFxuICB9ID0gb3B0aW9ucztcblxuICB2YWxpZGF0ZUJvb2xlYW4ob2JqZWN0TW9kZSwgXCJvcHRpb25zLm9iamVjdE1vZGVcIik7XG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1ZBTFVFKGVuY29kaW5nLCBcIm9wdGlvbnMuZW5jb2RpbmdcIik7XG4gIH1cblxuICBjb25zdCB3cml0ZXIgPSB3cml0YWJsZVN0cmVhbS5nZXRXcml0ZXIoKTtcbiAgY29uc3QgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIGxldCB3cml0YWJsZUNsb3NlZCA9IGZhbHNlO1xuICBsZXQgcmVhZGFibGVDbG9zZWQgPSBmYWxzZTtcblxuICBjb25zdCBkdXBsZXggPSBuZXcgRHVwbGV4KHtcbiAgICBhbGxvd0hhbGZPcGVuLFxuICAgIGhpZ2hXYXRlck1hcmssXG4gICAgb2JqZWN0TW9kZSxcbiAgICBlbmNvZGluZyxcbiAgICBkZWNvZGVTdHJpbmdzLFxuICAgIHNpZ25hbCxcblxuICAgIHdyaXRldihjaHVua3MsIGNhbGxiYWNrKSB7XG4gICAgICBmdW5jdGlvbiBkb25lKGVycm9yKSB7XG4gICAgICAgIGVycm9yID0gZXJyb3IuZmlsdGVyKChlKSA9PiBlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjayhlcnJvci5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBlcnJvcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSW4gYSBuZXh0IHRpY2sgYmVjYXVzZSB0aGlzIGlzIGhhcHBlbmluZyB3aXRoaW5cbiAgICAgICAgICAvLyBhIHByb21pc2UgY29udGV4dCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzXG4gICAgICAgICAgLy8gdGhyb3duIHdlIGRvbid0IHdhbnQgdGhvc2UgdG8gY2F1c2UgYW4gdW5oYW5kbGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uLiBMZXQncyBqdXN0IGVzY2FwZSB0aGUgcHJvbWlzZSBhbmRcbiAgICAgICAgICAvLyBoYW5kbGUgaXQgc2VwYXJhdGVseS5cbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IGRlc3Ryb3koZHVwbGV4LCBlcnJvcikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdyaXRlci5yZWFkeS50aGVuKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIFByb21pc2UuQWxsKFxuICAgICAgICAgICAgY2h1bmtzLm1hcCgoZGF0YSkgPT4gd3JpdGVyLndyaXRlKGRhdGEuY2h1bmspKSxcbiAgICAgICAgICApLnRoZW4oZG9uZSwgZG9uZSksXG4gICAgICAgIGRvbmUsXG4gICAgICApO1xuICAgIH0sXG5cbiAgICB3cml0ZShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAodHlwZW9mIGNodW5rID09PSBcInN0cmluZ1wiICYmIGRlY29kZVN0cmluZ3MgJiYgIW9iamVjdE1vZGUpIHtcbiAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICBjaHVuayA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgIGNodW5rLmJ1ZmZlcixcbiAgICAgICAgICBjaHVuay5ieXRlT2Zmc2V0LFxuICAgICAgICAgIGNodW5rLmJ5dGVMZW5ndGgsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyb3IpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgZGVzdHJveShkdXBsZXgsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3cml0ZXIucmVhZHkudGhlbihcbiAgICAgICAgKCkgPT4gd3JpdGVyLndyaXRlKGNodW5rKS50aGVuKGRvbmUsIGRvbmUpLFxuICAgICAgICBkb25lLFxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgZmluYWwoY2FsbGJhY2spIHtcbiAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyb3IpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSW4gYSBuZXh0IHRpY2sgYmVjYXVzZSB0aGlzIGlzIGhhcHBlbmluZyB3aXRoaW5cbiAgICAgICAgICAvLyBhIHByb21pc2UgY29udGV4dCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzXG4gICAgICAgICAgLy8gdGhyb3duIHdlIGRvbid0IHdhbnQgdGhvc2UgdG8gY2F1c2UgYW4gdW5oYW5kbGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uLiBMZXQncyBqdXN0IGVzY2FwZSB0aGUgcHJvbWlzZSBhbmRcbiAgICAgICAgICAvLyBoYW5kbGUgaXQgc2VwYXJhdGVseS5cbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IGRlc3Ryb3koZHVwbGV4LCBlcnJvcikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghd3JpdGFibGVDbG9zZWQpIHtcbiAgICAgICAgd3JpdGVyLmNsb3NlKCkudGhlbihkb25lLCBkb25lKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVhZCgpIHtcbiAgICAgIHJlYWRlci5yZWFkKCkudGhlbihcbiAgICAgICAgKGNodW5rKSA9PiB7XG4gICAgICAgICAgaWYgKGNodW5rLmRvbmUpIHtcbiAgICAgICAgICAgIGR1cGxleC5wdXNoKG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkdXBsZXgucHVzaChjaHVuay52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3IpID0+IGRlc3Ryb3koZHVwbGV4LCBlcnJvciksXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBkZXN0cm95KGVycm9yLCBjYWxsYmFjaykge1xuICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSW4gYSBuZXh0IHRpY2sgYmVjYXVzZSB0aGlzIGlzIGhhcHBlbmluZyB3aXRoaW5cbiAgICAgICAgICAvLyBhIHByb21pc2UgY29udGV4dCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzXG4gICAgICAgICAgLy8gdGhyb3duIHdlIGRvbid0IHdhbnQgdGhvc2UgdG8gY2F1c2UgYW4gdW5oYW5kbGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uLiBMZXQncyBqdXN0IGVzY2FwZSB0aGUgcHJvbWlzZSBhbmRcbiAgICAgICAgICAvLyBoYW5kbGUgaXQgc2VwYXJhdGVseS5cbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGNsb3NlV3JpdGVyKCkge1xuICAgICAgICBpZiAoIXdyaXRhYmxlQ2xvc2VkKSB7XG4gICAgICAgICAgYXdhaXQgd3JpdGVyLmFib3J0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhc3luYyBmdW5jdGlvbiBjbG9zZVJlYWRlcigpIHtcbiAgICAgICAgaWYgKCFyZWFkYWJsZUNsb3NlZCkge1xuICAgICAgICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghd3JpdGFibGVDbG9zZWQgfHwgIXJlYWRhYmxlQ2xvc2VkKSB7XG4gICAgICAgIFByb21pc2UuQWxsKFtcbiAgICAgICAgICBjbG9zZVdyaXRlcigpLFxuICAgICAgICAgIGNsb3NlUmVhZGVyKCksXG4gICAgICAgIF0pLnRoZW4oZG9uZSwgZG9uZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIHdyaXRlci5jbG9zZWQudGhlbihcbiAgICAoKSA9PiB7XG4gICAgICB3cml0YWJsZUNsb3NlZCA9IHRydWU7XG4gICAgICBpZiAoIWlzV3JpdGFibGVFbmRlZChkdXBsZXgpKSB7XG4gICAgICAgIGRlc3Ryb3koZHVwbGV4LCBuZXcgRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UoKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAoZXJyb3IpID0+IHtcbiAgICAgIHdyaXRhYmxlQ2xvc2VkID0gdHJ1ZTtcbiAgICAgIHJlYWRhYmxlQ2xvc2VkID0gdHJ1ZTtcbiAgICAgIGRlc3Ryb3koZHVwbGV4LCBlcnJvcik7XG4gICAgfSxcbiAgKTtcblxuICByZWFkZXIuY2xvc2VkLnRoZW4oXG4gICAgKCkgPT4ge1xuICAgICAgcmVhZGFibGVDbG9zZWQgPSB0cnVlO1xuICAgICAgaWYgKCFpc1JlYWRhYmxlRW5kZWQoZHVwbGV4KSkge1xuICAgICAgICBkdXBsZXgucHVzaChudWxsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgd3JpdGFibGVDbG9zZWQgPSB0cnVlO1xuICAgICAgcmVhZGFibGVDbG9zZWQgPSB0cnVlO1xuICAgICAgZGVzdHJveShkdXBsZXgsIGVycm9yKTtcbiAgICB9LFxuICApO1xuXG4gIHJldHVybiBkdXBsZXg7XG59O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFRoaXMgaXMgcGFydCBvZiB0aGUgZHVwbGV4aWZ5IG1vZHVsZSwgYnV0IGhhZCB0byBiZSBicm91Z2h0IGludG8gc2NvcGVcbi8vIHRvIGF2b2lkIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8vIFRoaXMgaXMgbmVlZGVkIGZvciBwcmUgbm9kZSAxNy5cbmNsYXNzIER1cGxleGlmeSBleHRlbmRzIER1cGxleCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzM0Mzg1XG5cbiAgICBpZiAob3B0aW9ucz8ucmVhZGFibGUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LndyaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgICB0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZHVwbGV4aWZ5KGJvZHksIG5hbWUpIHtcbiAgaWYgKGlzRHVwbGV4Tm9kZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgaWYgKGlzUmVhZGFibGVOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoeyByZWFkYWJsZTogYm9keSB9KTtcbiAgfVxuXG4gIGlmIChpc1dyaXRhYmxlTm9kZVN0cmVhbShib2R5KSkge1xuICAgIHJldHVybiBfZHVwbGV4aWZ5KHsgd3JpdGFibGU6IGJvZHkgfSk7XG4gIH1cblxuICBpZiAoaXNOb2RlU3RyZWFtKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9kdXBsZXhpZnkoeyB3cml0YWJsZTogZmFsc2UsIHJlYWRhYmxlOiBmYWxzZSB9KTtcbiAgfVxuXG4gIC8vIFRPRE86IFdlYnN0cmVhbXNcbiAgLy8gaWYgKGlzUmVhZGFibGVTdHJlYW0oYm9keSkpIHtcbiAgLy8gICByZXR1cm4gX2R1cGxleGlmeSh7IHJlYWRhYmxlOiBSZWFkYWJsZS5mcm9tV2ViKGJvZHkpIH0pO1xuICAvLyB9XG5cbiAgLy8gVE9ETzogV2Vic3RyZWFtc1xuICAvLyBpZiAoaXNXcml0YWJsZVN0cmVhbShib2R5KSkge1xuICAvLyAgIHJldHVybiBfZHVwbGV4aWZ5KHsgd3JpdGFibGU6IFdyaXRhYmxlLmZyb21XZWIoYm9keSkgfSk7XG4gIC8vIH1cblxuICBpZiAodHlwZW9mIGJvZHkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0IHsgdmFsdWUsIHdyaXRlLCBmaW5hbCwgZGVzdHJveSB9ID0gZnJvbUFzeW5jR2VuKGJvZHkpO1xuXG4gICAgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gX2Zyb20oRHVwbGV4aWZ5LCB2YWx1ZSwge1xuICAgICAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgIHdyaXRlLFxuICAgICAgICBmaW5hbCxcbiAgICAgICAgZGVzdHJveSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHRoZW4gPSB2YWx1ZT8udGhlbjtcbiAgICBpZiAodHlwZW9mIHRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgbGV0IGQ7XG5cbiAgICAgIGNvbnN0IHByb21pc2UgPSB0aGVuLmNhbGwoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICAodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFKFwibnVsbHlcIiwgXCJib2R5XCIsIHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgZGVzdHJveWVyKGQsIGVycik7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gZCA9IG5ldyBEdXBsZXhpZnkoe1xuICAgICAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICAgIHJlYWRhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGUsXG4gICAgICAgIGZpbmFsKGNiKSB7XG4gICAgICAgICAgZmluYWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgcHJvbWlzZTtcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgbnVsbCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYiwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVzdHJveSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoXG4gICAgICBcIkl0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb25cIixcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICApO1xuICB9XG5cbiAgaWYgKGlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBkdXBsZXhpZnkoYm9keS5hcnJheUJ1ZmZlcigpKTtcbiAgfVxuXG4gIGlmIChpc0l0ZXJhYmxlKGJvZHkpKSB7XG4gICAgcmV0dXJuIF9mcm9tKER1cGxleGlmeSwgYm9keSwge1xuICAgICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRPRE86IFdlYnN0cmVhbXMuXG4gIC8vIGlmIChcbiAgLy8gICBpc1JlYWRhYmxlU3RyZWFtKGJvZHk/LnJlYWRhYmxlKSAmJlxuICAvLyAgIGlzV3JpdGFibGVTdHJlYW0oYm9keT8ud3JpdGFibGUpXG4gIC8vICkge1xuICAvLyAgIHJldHVybiBEdXBsZXhpZnkuZnJvbVdlYihib2R5KTtcbiAgLy8gfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgYm9keT8ud3JpdGFibGUgPT09IFwib2JqZWN0XCIgfHxcbiAgICB0eXBlb2YgYm9keT8ucmVhZGFibGUgPT09IFwib2JqZWN0XCJcbiAgKSB7XG4gICAgY29uc3QgcmVhZGFibGUgPSBib2R5Py5yZWFkYWJsZVxuICAgICAgPyBpc1JlYWRhYmxlTm9kZVN0cmVhbShib2R5Py5yZWFkYWJsZSlcbiAgICAgICAgPyBib2R5Py5yZWFkYWJsZVxuICAgICAgICA6IGR1cGxleGlmeShib2R5LnJlYWRhYmxlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB3cml0YWJsZSA9IGJvZHk/LndyaXRhYmxlXG4gICAgICA/IGlzV3JpdGFibGVOb2RlU3RyZWFtKGJvZHk/LndyaXRhYmxlKVxuICAgICAgICA/IGJvZHk/LndyaXRhYmxlXG4gICAgICAgIDogZHVwbGV4aWZ5KGJvZHkud3JpdGFibGUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBfZHVwbGV4aWZ5KHsgcmVhZGFibGUsIHdyaXRhYmxlIH0pO1xuICB9XG5cbiAgY29uc3QgdGhlbiA9IGJvZHk/LnRoZW47XG4gIGlmICh0eXBlb2YgdGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbGV0IGQ7XG5cbiAgICB0aGVuLmNhbGwoXG4gICAgICBib2R5LFxuICAgICAgKHZhbCkgPT4ge1xuICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgICAgICBkLnB1c2godmFsKTtcbiAgICAgICAgfVxuICAgICAgICBkLnB1c2gobnVsbCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBkZXN0cm95ZXIoZCwgZXJyKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBkID0gbmV3IER1cGxleGlmeSh7XG4gICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgcmVhZCgpIHt9LFxuICAgIH0pO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19UWVBFKFxuICAgIG5hbWUsXG4gICAgW1xuICAgICAgXCJCbG9iXCIsXG4gICAgICBcIlJlYWRhYmxlU3RyZWFtXCIsXG4gICAgICBcIldyaXRhYmxlU3RyZWFtXCIsXG4gICAgICBcIlN0cmVhbVwiLFxuICAgICAgXCJJdGVyYWJsZVwiLFxuICAgICAgXCJBc3luY0l0ZXJhYmxlXCIsXG4gICAgICBcIkZ1bmN0aW9uXCIsXG4gICAgICBcInsgcmVhZGFibGUsIHdyaXRhYmxlIH0gcGFpclwiLFxuICAgICAgXCJQcm9taXNlXCIsXG4gICAgXSxcbiAgICBib2R5LFxuICApO1xufVxuXG5mdW5jdGlvbiBmcm9tQXN5bmNHZW4oZm4pIHtcbiAgbGV0IHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKCk7XG4gIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCBzaWduYWwgPSBhYy5zaWduYWw7XG4gIGNvbnN0IHZhbHVlID0gZm4oXG4gICAgYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IF9wcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgcHJvbWlzZSA9IG51bGw7XG4gICAgICAgIGNvbnN0IHsgY2h1bmssIGRvbmUsIGNiIH0gPSBhd2FpdCBfcHJvbWlzZTtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYik7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkgdGhyb3cgbmV3IEFib3J0RXJyb3IoKTtcbiAgICAgICAgKHsgcHJvbWlzZSwgcmVzb2x2ZSB9ID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKCkpO1xuICAgICAgICB5aWVsZCBjaHVuaztcbiAgICAgIH1cbiAgICB9KCksXG4gICAgeyBzaWduYWwgfSxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgIGNvbnN0IF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHJlc29sdmUgPSBudWxsO1xuICAgICAgX3Jlc29sdmUoeyBjaHVuaywgZG9uZTogZmFsc2UsIGNiIH0pO1xuICAgIH0sXG4gICAgZmluYWwoY2IpIHtcbiAgICAgIGNvbnN0IF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHJlc29sdmUgPSBudWxsO1xuICAgICAgX3Jlc29sdmUoeyBkb25lOiB0cnVlLCBjYiB9KTtcbiAgICB9LFxuICAgIGRlc3Ryb3koZXJyLCBjYikge1xuICAgICAgYWMuYWJvcnQoKTtcbiAgICAgIGNiKGVycik7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gX2R1cGxleGlmeShwYWlyKSB7XG4gIGNvbnN0IHIgPSBwYWlyLnJlYWRhYmxlICYmIHR5cGVvZiBwYWlyLnJlYWRhYmxlLnJlYWQgIT09IFwiZnVuY3Rpb25cIlxuICAgID8gUmVhZGFibGUud3JhcChwYWlyLnJlYWRhYmxlKVxuICAgIDogcGFpci5yZWFkYWJsZTtcbiAgY29uc3QgdyA9IHBhaXIud3JpdGFibGU7XG5cbiAgbGV0IHJlYWRhYmxlID0gISFpc1JlYWRhYmxlKHIpO1xuICBsZXQgd3JpdGFibGUgPSAhIWlzV3JpdGFibGUodyk7XG5cbiAgbGV0IG9uZHJhaW47XG4gIGxldCBvbmZpbmlzaDtcbiAgbGV0IG9ucmVhZGFibGU7XG4gIGxldCBvbmNsb3NlO1xuICBsZXQgZDtcblxuICBmdW5jdGlvbiBvbmZpbmlzaGVkKGVycikge1xuICAgIGNvbnN0IGNiID0gb25jbG9zZTtcbiAgICBvbmNsb3NlID0gbnVsbDtcblxuICAgIGlmIChjYikge1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgZC5kZXN0cm95KGVycik7XG4gICAgfSBlbHNlIGlmICghcmVhZGFibGUgJiYgIXdyaXRhYmxlKSB7XG4gICAgICBkLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPKHJvbmFnKTogQXZvaWQgZG91YmxlIGJ1ZmZlcmluZy5cbiAgLy8gSW1wbGVtZW50IFdyaXRhYmxlL1JlYWRhYmxlL0R1cGxleCB0cmFpdHMuXG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzM1MTUuXG4gIGQgPSBuZXcgRHVwbGV4aWZ5KHtcbiAgICAvLyBUT0RPIChyb25hZyk6IGhpZ2hXYXRlck1hcms/XG4gICAgcmVhZGFibGVPYmplY3RNb2RlOiAhIXI/LnJlYWRhYmxlT2JqZWN0TW9kZSxcbiAgICB3cml0YWJsZU9iamVjdE1vZGU6ICEhdz8ud3JpdGFibGVPYmplY3RNb2RlLFxuICAgIHJlYWRhYmxlLFxuICAgIHdyaXRhYmxlLFxuICB9KTtcblxuICBpZiAod3JpdGFibGUpIHtcbiAgICBlb3ModywgKGVycikgPT4ge1xuICAgICAgd3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZGVzdHJveWVyKHIsIGVycik7XG4gICAgICB9XG4gICAgICBvbmZpbmlzaGVkKGVycik7XG4gICAgfSk7XG5cbiAgICBkLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAody53cml0ZShjaHVuaywgZW5jb2RpbmcpKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbmRyYWluID0gY2FsbGJhY2s7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGQuX2ZpbmFsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB3LmVuZCgpO1xuICAgICAgb25maW5pc2ggPSBjYWxsYmFjaztcbiAgICB9O1xuXG4gICAgdy5vbihcImRyYWluXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbmRyYWluKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25kcmFpbjtcbiAgICAgICAgb25kcmFpbiA9IG51bGw7XG4gICAgICAgIGNiKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB3Lm9uKFwiZmluaXNoXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbmZpbmlzaCkge1xuICAgICAgICBjb25zdCBjYiA9IG9uZmluaXNoO1xuICAgICAgICBvbmZpbmlzaCA9IG51bGw7XG4gICAgICAgIGNiKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAocmVhZGFibGUpIHtcbiAgICBlb3MociwgKGVycikgPT4ge1xuICAgICAgcmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZGVzdHJveWVyKHIsIGVycik7XG4gICAgICB9XG4gICAgICBvbmZpbmlzaGVkKGVycik7XG4gICAgfSk7XG5cbiAgICByLm9uKFwicmVhZGFibGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKG9ucmVhZGFibGUpIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbnJlYWRhYmxlO1xuICAgICAgICBvbnJlYWRhYmxlID0gbnVsbDtcbiAgICAgICAgY2IoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHIub24oXCJlbmRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgZC5wdXNoKG51bGwpO1xuICAgIH0pO1xuXG4gICAgZC5fcmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IHIucmVhZCgpO1xuXG4gICAgICAgIGlmIChidWYgPT09IG51bGwpIHtcbiAgICAgICAgICBvbnJlYWRhYmxlID0gZC5fcmVhZDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWQucHVzaChidWYpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGQuX2Rlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICghZXJyICYmIG9uY2xvc2UgIT09IG51bGwpIHtcbiAgICAgIGVyciA9IG5ldyBBYm9ydEVycm9yKCk7XG4gICAgfVxuXG4gICAgb25yZWFkYWJsZSA9IG51bGw7XG4gICAgb25kcmFpbiA9IG51bGw7XG4gICAgb25maW5pc2ggPSBudWxsO1xuXG4gICAgaWYgKG9uY2xvc2UgPT09IG51bGwpIHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uY2xvc2UgPSBjYWxsYmFjaztcbiAgICAgIGRlc3Ryb3llcih3LCBlcnIpO1xuICAgICAgZGVzdHJveWVyKHIsIGVycik7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBkO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZHVwbGV4RnJvbShib2R5KSB7XG4gIHJldHVybiBkdXBsZXhpZnkoYm9keSwgXCJib2R5XCIpO1xufVxuXG5EdXBsZXguZnJvbSA9IGR1cGxleEZyb207XG5EdXBsZXguZHVwbGV4aWZ5ID0gZHVwbGV4aWZ5O1xuXG5leHBvcnQgZGVmYXVsdCBEdXBsZXg7XG5leHBvcnQgeyBkdXBsZXhGcm9tIGFzIGZyb20sIGR1cGxleGlmeSB9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50IGFuZCBOb2RlIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBkZW5vLWxpbnQtaWdub3JlLWZpbGVcblxuaW1wb3J0IHsgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQgfSBmcm9tIFwiLi4vZXJyb3JzLnRzXCI7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gXCIuLi8uLi9fcHJvY2Vzcy9wcm9jZXNzLnRzXCI7XG5pbXBvcnQgRHVwbGV4IGZyb20gXCIuL2R1cGxleC5tanNcIjtcblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKFRyYW5zZm9ybS5wcm90b3R5cGUsIER1cGxleC5wcm90b3R5cGUpO1xuT2JqZWN0LnNldFByb3RvdHlwZU9mKFRyYW5zZm9ybSwgRHVwbGV4KTtcblxuY29uc3Qga0NhbGxiYWNrID0gU3ltYm9sKFwia0NhbGxiYWNrXCIpO1xuXG5mdW5jdGlvbiBUcmFuc2Zvcm0ob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNmb3JtKSkge1xuICAgIHJldHVybiBuZXcgVHJhbnNmb3JtKG9wdGlvbnMpO1xuICB9XG5cbiAgRHVwbGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG5cbiAgLy8gV2UgaGF2ZSBpbXBsZW1lbnRlZCB0aGUgX3JlYWQgbWV0aG9kLCBhbmQgZG9uZSB0aGUgb3RoZXIgdGhpbmdzXG4gIC8vIHRoYXQgUmVhZGFibGUgd2FudHMgYmVmb3JlIHRoZSBmaXJzdCBfcmVhZCBjYWxsLCBzbyB1bnNldCB0aGVcbiAgLy8gc3luYyBndWFyZCBmbGFnLlxuICB0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZTtcblxuICB0aGlzW2tDYWxsYmFja10gPSBudWxsO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLl90cmFuc2Zvcm0gPSBvcHRpb25zLnRyYW5zZm9ybTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmx1c2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fZmx1c2ggPSBvcHRpb25zLmZsdXNoO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHdyaXRhYmxlIHNpZGUgZmluaXNoZXMsIHRoZW4gZmx1c2ggb3V0IGFueXRoaW5nIHJlbWFpbmluZy5cbiAgLy8gQmFja3dhcmRzIGNvbXBhdC4gU29tZSBUcmFuc2Zvcm0gc3RyZWFtcyBpbmNvcnJlY3RseSBpbXBsZW1lbnQgX2ZpbmFsXG4gIC8vIGluc3RlYWQgb2Ygb3IgaW4gYWRkaXRpb24gdG8gX2ZsdXNoLiBCeSB1c2luZyAncHJlZmluaXNoJyBpbnN0ZWFkIG9mXG4gIC8vIGltcGxlbWVudGluZyBfZmluYWwgd2UgY29udGludWUgc3VwcG9ydGluZyB0aGlzIHVuZm9ydHVuYXRlIHVzZSBjYXNlLlxuICB0aGlzLm9uKFwicHJlZmluaXNoXCIsIHByZWZpbmlzaCk7XG59XG5cbmZ1bmN0aW9uIGZpbmFsKGNiKSB7XG4gIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiB0aGlzLl9mbHVzaCA9PT0gXCJmdW5jdGlvblwiICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2ZsdXNoKChlciwgZGF0YSkgPT4ge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIGlmIChlcikge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICBjYihlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5wdXNoKGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5wdXNoKG51bGwpO1xuICAgICAgaWYgKGNiKSB7XG4gICAgICAgIGNiKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGhlbiA9IHJlc3VsdC50aGVuO1xuICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjYWxsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soY2IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGNiLCBlcnIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4gdGhpcy5kZXN0cm95KGVycikpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHRoaXMuZGVzdHJveShlcnIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5wdXNoKG51bGwpO1xuICAgIGlmIChjYikge1xuICAgICAgY2IoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlZmluaXNoKCkge1xuICBpZiAodGhpcy5fZmluYWwgIT09IGZpbmFsKSB7XG4gICAgZmluYWwuY2FsbCh0aGlzKTtcbiAgfVxufVxuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl9maW5hbCA9IGZpbmFsO1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICB0aHJvdyBuZXcgRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQoXCJfdHJhbnNmb3JtKClcIik7XG59O1xuXG5UcmFuc2Zvcm0ucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHJTdGF0ZSA9IHRoaXMuX3JlYWRhYmxlU3RhdGU7XG4gIGNvbnN0IHdTdGF0ZSA9IHRoaXMuX3dyaXRhYmxlU3RhdGU7XG4gIGNvbnN0IGxlbmd0aCA9IHJTdGF0ZS5sZW5ndGg7XG5cbiAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICBjb25zdCByZXN1bHQgPSB0aGlzLl90cmFuc2Zvcm0oY2h1bmssIGVuY29kaW5nLCAoZXJyLCB2YWwpID0+IHtcbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnB1c2godmFsKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB3U3RhdGUuZW5kZWQgfHwgLy8gQmFja3dhcmRzIGNvbXBhdC5cbiAgICAgIGxlbmd0aCA9PT0gclN0YXRlLmxlbmd0aCB8fCAvLyBCYWNrd2FyZHMgY29tcGF0LlxuICAgICAgclN0YXRlLmxlbmd0aCA8IHJTdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8XG4gICAgICByU3RhdGUubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tDYWxsYmFja10gPSBjYWxsYmFjaztcbiAgICB9XG4gIH0pO1xuICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0ICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGhlbiA9IHJlc3VsdC50aGVuO1xuICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAodmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FsbGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHdTdGF0ZS5lbmRlZCB8fFxuICAgICAgICAgICAgICBsZW5ndGggPT09IHJTdGF0ZS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgclN0YXRlLmxlbmd0aCA8IHJTdGF0ZS5oaWdoV2F0ZXJNYXJrIHx8XG4gICAgICAgICAgICAgIHJTdGF0ZS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXNba0NhbGxiYWNrXSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgZXJyKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgZXJyKTtcbiAgICB9XG4gIH1cbn07XG5cblRyYW5zZm9ybS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzW2tDYWxsYmFja10pIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IHRoaXNba0NhbGxiYWNrXTtcbiAgICB0aGlzW2tDYWxsYmFja10gPSBudWxsO1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zZm9ybTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCBhbmQgTm9kZSBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gZGVuby1saW50LWlnbm9yZS1maWxlXG5cbmltcG9ydCBUcmFuc2Zvcm0gZnJvbSBcIi4vdHJhbnNmb3JtLm1qc1wiO1xuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoUGFzc1Rocm91Z2gucHJvdG90eXBlLCBUcmFuc2Zvcm0ucHJvdG90eXBlKTtcbk9iamVjdC5zZXRQcm90b3R5cGVPZihQYXNzVGhyb3VnaCwgVHJhbnNmb3JtKTtcblxuZnVuY3Rpb24gUGFzc1Rocm91Z2gob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFzc1Rocm91Z2gpKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaChvcHRpb25zKTtcbiAgfVxuXG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xufVxuXG5QYXNzVGhyb3VnaC5wcm90b3R5cGUuX3RyYW5zZm9ybSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIGNiKG51bGwsIGNodW5rKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBhc3NUaHJvdWdoO1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50IGFuZCBOb2RlIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBkZW5vLWxpbnQtaWdub3JlLWZpbGVcblxuaW1wb3J0IHsgaXNJdGVyYWJsZSwgaXNOb2RlU3RyZWFtLCBpc1JlYWRhYmxlTm9kZVN0cmVhbSB9IGZyb20gXCIuL3V0aWxzLm1qc1wiO1xuaW1wb3J0IHsgb25jZSB9IGZyb20gXCIuLi91dGlsLm1qc1wiO1xuaW1wb3J0IHsgc3RkaW8gfSBmcm9tIFwiLi4vLi4vX3Byb2Nlc3Mvc3RkaW8ubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFib3J0U2lnbmFsLCB2YWxpZGF0ZUNhbGxiYWNrIH0gZnJvbSBcIi4uL3ZhbGlkYXRvcnMubWpzXCI7XG5pbXBvcnQge1xuICBBYm9ydEVycm9yLFxuICBhZ2dyZWdhdGVUd29FcnJvcnMsXG4gIEVSUl9JTlZBTElEX0FSR19UWVBFLFxuICBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUsXG4gIEVSUl9NSVNTSU5HX0FSR1MsXG4gIEVSUl9TVFJFQU1fREVTVFJPWUVELFxufSBmcm9tIFwiLi4vZXJyb3JzLnRzXCI7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gXCIuLi8uLi9fcHJvY2Vzcy9wcm9jZXNzLnRzXCI7XG5pbXBvcnQgZGVzdHJveUltcGwgZnJvbSBcIi4vZGVzdHJveS5tanNcIjtcbmltcG9ydCBEdXBsZXggZnJvbSBcIi4vZHVwbGV4Lm1qc1wiO1xuaW1wb3J0IGVvcyBmcm9tIFwiLi9lbmQtb2Ytc3RyZWFtLm1qc1wiO1xuaW1wb3J0IFJlYWRhYmxlIGZyb20gXCIuL3JlYWRhYmxlLm1qc1wiO1xuaW1wb3J0IFBhc3NUaHJvdWdoIGZyb20gXCIuL3Bhc3N0aHJvdWdoLm1qc1wiO1xuXG5mdW5jdGlvbiBkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IG9uY2UoY2FsbGJhY2spO1xuXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuICBzdHJlYW0ub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgZmluaXNoZWQgPSB0cnVlO1xuICB9KTtcblxuICBlb3Moc3RyZWFtLCB7IHJlYWRhYmxlOiByZWFkaW5nLCB3cml0YWJsZTogd3JpdGluZyB9LCAoZXJyKSA9PiB7XG4gICAgZmluaXNoZWQgPSAhZXJyO1xuXG4gICAgY29uc3QgclN0YXRlID0gc3RyZWFtLl9yZWFkYWJsZVN0YXRlO1xuICAgIGlmIChcbiAgICAgIGVyciAmJlxuICAgICAgZXJyLmNvZGUgPT09IFwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIiAmJlxuICAgICAgcmVhZGluZyAmJlxuICAgICAgKHJTdGF0ZSAmJiByU3RhdGUuZW5kZWQgJiYgIXJTdGF0ZS5lcnJvcmVkICYmICFyU3RhdGUuZXJyb3JFbWl0dGVkKVxuICAgICkge1xuICAgICAgLy8gU29tZSByZWFkYWJsZSBzdHJlYW1zIHdpbGwgZW1pdCAnY2xvc2UnIGJlZm9yZSAnZW5kJy4gSG93ZXZlciwgc2luY2VcbiAgICAgIC8vIHRoaXMgaXMgb24gdGhlIHJlYWRhYmxlIHNpZGUgJ2VuZCcgc2hvdWxkIHN0aWxsIGJlIGVtaXR0ZWQgaWYgdGhlXG4gICAgICAvLyBzdHJlYW0gaGFzIGJlZW4gZW5kZWQgYW5kIG5vIGVycm9yIGVtaXR0ZWQuIFRoaXMgc2hvdWxkIGJlIGFsbG93ZWQgaW5cbiAgICAgIC8vIGZhdm9yIG9mIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBTaW5jZSB0aGUgc3RyZWFtIGlzIHBpcGVkIHRvIGFcbiAgICAgIC8vIGRlc3RpbmF0aW9uIHRoaXMgc2hvdWxkIG5vdCByZXN1bHQgaW4gYW55IG9ic2VydmFibGUgZGlmZmVyZW5jZS5cbiAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgaWYgdGhpcyBpcyBhIHdyaXRhYmxlIHByZW1hdHVyZSBjbG9zZSBzaW5jZVxuICAgICAgLy8gZW9zIHdpbGwgb25seSBmYWlsIHdpdGggcHJlbWF0dXJlIGNsb3NlIG9uIHRoZSByZWFkaW5nIHNpZGUgZm9yXG4gICAgICAvLyBkdXBsZXggc3RyZWFtcy5cbiAgICAgIHN0cmVhbVxuICAgICAgICAub25jZShcImVuZFwiLCBjYWxsYmFjaylcbiAgICAgICAgLm9uY2UoXCJlcnJvclwiLCBjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gKGVycikgPT4ge1xuICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuO1xuICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICBkZXN0cm95SW1wbC5kZXN0cm95ZXIoc3RyZWFtLCBlcnIpO1xuICAgIGNhbGxiYWNrKGVyciB8fCBuZXcgRVJSX1NUUkVBTV9ERVNUUk9ZRUQoXCJwaXBlXCIpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcG9wQ2FsbGJhY2soc3RyZWFtcykge1xuICAvLyBTdHJlYW1zIHNob3VsZCBuZXZlciBiZSBhbiBlbXB0eSBhcnJheS4gSXQgc2hvdWxkIGFsd2F5cyBjb250YWluIGF0IGxlYXN0XG4gIC8vIGEgc2luZ2xlIHN0cmVhbS4gVGhlcmVmb3JlIG9wdGltaXplIGZvciB0aGUgYXZlcmFnZSBjYXNlIGluc3RlYWQgb2ZcbiAgLy8gY2hlY2tpbmcgZm9yIGxlbmd0aCA9PT0gMCBhcyB3ZWxsLlxuICB2YWxpZGF0ZUNhbGxiYWNrKHN0cmVhbXNbc3RyZWFtcy5sZW5ndGggLSAxXSk7XG4gIHJldHVybiBzdHJlYW1zLnBvcCgpO1xufVxuXG5mdW5jdGlvbiBtYWtlQXN5bmNJdGVyYWJsZSh2YWwpIHtcbiAgaWYgKGlzSXRlcmFibGUodmFsKSkge1xuICAgIHJldHVybiB2YWw7XG4gIH0gZWxzZSBpZiAoaXNSZWFkYWJsZU5vZGVTdHJlYW0odmFsKSkge1xuICAgIC8vIExlZ2FjeSBzdHJlYW1zIGFyZSBub3QgSXRlcmFibGUuXG4gICAgcmV0dXJuIGZyb21SZWFkYWJsZSh2YWwpO1xuICB9XG4gIHRocm93IG5ldyBFUlJfSU5WQUxJRF9BUkdfVFlQRShcbiAgICBcInZhbFwiLFxuICAgIFtcIlJlYWRhYmxlXCIsIFwiSXRlcmFibGVcIiwgXCJBc3luY0l0ZXJhYmxlXCJdLFxuICAgIHZhbCxcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24qIGZyb21SZWFkYWJsZSh2YWwpIHtcbiAgeWllbGQqIFJlYWRhYmxlLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0uY2FsbCh2YWwpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwdW1wKGl0ZXJhYmxlLCB3cml0YWJsZSwgZmluaXNoKSB7XG4gIGxldCBlcnJvcjtcbiAgbGV0IG9ucmVzb2x2ZSA9IG51bGw7XG5cbiAgY29uc3QgcmVzdW1lID0gKGVycikgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGVycm9yID0gZXJyO1xuICAgIH1cblxuICAgIGlmIChvbnJlc29sdmUpIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gb25yZXNvbHZlO1xuICAgICAgb25yZXNvbHZlID0gbnVsbDtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHdhaXQgPSAoKSA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25yZXNvbHZlID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB3cml0YWJsZS5vbihcImRyYWluXCIsIHJlc3VtZSk7XG4gIGNvbnN0IGNsZWFudXAgPSBlb3Mod3JpdGFibGUsIHsgcmVhZGFibGU6IGZhbHNlIH0sIHJlc3VtZSk7XG5cbiAgdHJ5IHtcbiAgICBpZiAod3JpdGFibGUud3JpdGFibGVOZWVkRHJhaW4pIHtcbiAgICAgIGF3YWl0IHdhaXQoKTtcbiAgICB9XG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgICBpZiAoIXdyaXRhYmxlLndyaXRlKGNodW5rKSkge1xuICAgICAgICBhd2FpdCB3YWl0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGFibGUuZW5kKCk7XG5cbiAgICBhd2FpdCB3YWl0KCk7XG5cbiAgICBmaW5pc2goKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZmluaXNoKGVycm9yICE9PSBlcnIgPyBhZ2dyZWdhdGVUd29FcnJvcnMoZXJyb3IsIGVycikgOiBlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFudXAoKTtcbiAgICB3cml0YWJsZS5vZmYoXCJkcmFpblwiLCByZXN1bWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lKC4uLnN0cmVhbXMpIHtcbiAgY29uc3QgY2FsbGJhY2sgPSBvbmNlKHBvcENhbGxiYWNrKHN0cmVhbXMpKTtcblxuICAvLyBzdHJlYW0ucGlwZWxpbmUoc3RyZWFtcywgY2FsbGJhY2spXG4gIGlmIChBcnJheS5pc0FycmF5KHN0cmVhbXNbMF0pICYmIHN0cmVhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgc3RyZWFtcyA9IHN0cmVhbXNbMF07XG4gIH1cblxuICByZXR1cm4gcGlwZWxpbmVJbXBsKHN0cmVhbXMsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcGlwZWxpbmVJbXBsKHN0cmVhbXMsIGNhbGxiYWNrLCBvcHRzKSB7XG4gIGlmIChzdHJlYW1zLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUyhcInN0cmVhbXNcIik7XG4gIH1cblxuICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3Qgc2lnbmFsID0gYWMuc2lnbmFsO1xuICBjb25zdCBvdXRlclNpZ25hbCA9IG9wdHM/LnNpZ25hbDtcblxuICB2YWxpZGF0ZUFib3J0U2lnbmFsKG91dGVyU2lnbmFsLCBcIm9wdGlvbnMuc2lnbmFsXCIpO1xuXG4gIGZ1bmN0aW9uIGFib3J0KCkge1xuICAgIGZpbmlzaEltcGwobmV3IEFib3J0RXJyb3IoKSk7XG4gIH1cblxuICBvdXRlclNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0KTtcblxuICBsZXQgZXJyb3I7XG4gIGxldCB2YWx1ZTtcbiAgY29uc3QgZGVzdHJveXMgPSBbXTtcblxuICBsZXQgZmluaXNoQ291bnQgPSAwO1xuXG4gIGZ1bmN0aW9uIGZpbmlzaChlcnIpIHtcbiAgICBmaW5pc2hJbXBsKGVyciwgLS1maW5pc2hDb3VudCA9PT0gMCk7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2hJbXBsKGVyciwgZmluYWwpIHtcbiAgICBpZiAoZXJyICYmICghZXJyb3IgfHwgZXJyb3IuY29kZSA9PT0gXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiKSkge1xuICAgICAgZXJyb3IgPSBlcnI7XG4gICAgfVxuXG4gICAgaWYgKCFlcnJvciAmJiAhZmluYWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAoZGVzdHJveXMubGVuZ3RoKSB7XG4gICAgICBkZXN0cm95cy5zaGlmdCgpKGVycm9yKTtcbiAgICB9XG5cbiAgICBvdXRlclNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0KTtcbiAgICBhYy5hYm9ydCgpO1xuXG4gICAgaWYgKGZpbmFsKSB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGxldCByZXQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyZWFtcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHN0cmVhbSA9IHN0cmVhbXNbaV07XG4gICAgY29uc3QgcmVhZGluZyA9IGkgPCBzdHJlYW1zLmxlbmd0aCAtIDE7XG4gICAgY29uc3Qgd3JpdGluZyA9IGkgPiAwO1xuXG4gICAgaWYgKGlzTm9kZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgICBmaW5pc2hDb3VudCsrO1xuICAgICAgZGVzdHJveXMucHVzaChkZXN0cm95ZXIoc3RyZWFtLCByZWFkaW5nLCB3cml0aW5nLCBmaW5pc2gpKTtcbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgaWYgKHR5cGVvZiBzdHJlYW0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXQgPSBzdHJlYW0oeyBzaWduYWwgfSk7XG4gICAgICAgIGlmICghaXNJdGVyYWJsZShyZXQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRShcbiAgICAgICAgICAgIFwiSXRlcmFibGUsIEFzeW5jSXRlcmFibGUgb3IgU3RyZWFtXCIsXG4gICAgICAgICAgICBcInNvdXJjZVwiLFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShzdHJlYW0pIHx8IGlzUmVhZGFibGVOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgICAgcmV0ID0gc3RyZWFtO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gRHVwbGV4LmZyb20oc3RyZWFtKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHJlYW0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0ID0gbWFrZUFzeW5jSXRlcmFibGUocmV0KTtcbiAgICAgIHJldCA9IHN0cmVhbShyZXQsIHsgc2lnbmFsIH0pO1xuXG4gICAgICBpZiAocmVhZGluZykge1xuICAgICAgICBpZiAoIWlzSXRlcmFibGUocmV0LCB0cnVlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUoXG4gICAgICAgICAgICBcIkFzeW5jSXRlcmFibGVcIixcbiAgICAgICAgICAgIGB0cmFuc2Zvcm1bJHtpIC0gMX1dYCxcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiB0aGUgbGFzdCBhcmd1bWVudCB0byBwaXBlbGluZSBpcyBub3QgYSBzdHJlYW1cbiAgICAgICAgLy8gd2UgbXVzdCBjcmVhdGUgYSBwcm94eSBzdHJlYW0gc28gdGhhdCBwaXBlbGluZSguLi4pXG4gICAgICAgIC8vIGFsd2F5cyByZXR1cm5zIGEgc3RyZWFtIHdoaWNoIGNhbiBiZSBmdXJ0aGVyXG4gICAgICAgIC8vIGNvbXBvc2VkIHRocm91Z2ggYC5waXBlKHN0cmVhbSlgLlxuXG4gICAgICAgIGNvbnN0IHB0ID0gbmV3IFBhc3NUaHJvdWdoKHtcbiAgICAgICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBIYW5kbGUgUHJvbWlzZXMvQSsgc3BlYywgYHRoZW5gIGNvdWxkIGJlIGEgZ2V0dGVyIHRoYXQgdGhyb3dzIG9uXG4gICAgICAgIC8vIHNlY29uZCB1c2UuXG4gICAgICAgIGNvbnN0IHRoZW4gPSByZXQ/LnRoZW47XG4gICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHJldCwgKHZhbCkgPT4ge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWw7XG4gICAgICAgICAgICBwdC5lbmQodmFsKTtcbiAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBwdC5kZXN0cm95KGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJdGVyYWJsZShyZXQsIHRydWUpKSB7XG4gICAgICAgICAgZmluaXNoQ291bnQrKztcbiAgICAgICAgICBwdW1wKHJldCwgcHQsIGZpbmlzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRShcbiAgICAgICAgICAgIFwiQXN5bmNJdGVyYWJsZSBvciBQcm9taXNlXCIsXG4gICAgICAgICAgICBcImRlc3RpbmF0aW9uXCIsXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IHB0O1xuXG4gICAgICAgIGZpbmlzaENvdW50Kys7XG4gICAgICAgIGRlc3Ryb3lzLnB1c2goZGVzdHJveWVyKHJldCwgZmFsc2UsIHRydWUsIGZpbmlzaCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNOb2RlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIGlmIChpc1JlYWRhYmxlTm9kZVN0cmVhbShyZXQpKSB7XG4gICAgICAgIHJldC5waXBlKHN0cmVhbSk7XG5cbiAgICAgICAgLy8gQ29tcGF0LiBCZWZvcmUgbm9kZSB2MTAuMTIuMCBzdGRpbyB1c2VkIHRvIHRocm93IGFuIGVycm9yIHNvXG4gICAgICAgIC8vIHBpcGUoKSBkaWQvZG9lcyBub3QgZW5kKCkgc3RkaW8gZGVzdGluYXRpb25zLlxuICAgICAgICAvLyBOb3cgdGhleSBhbGxvdyBpdCBidXQgXCJzZWNyZXRseVwiIGRvbid0IGNsb3NlIHRoZSB1bmRlcmx5aW5nIGZkLlxuICAgICAgICBpZiAoc3RyZWFtID09PSBzdGRpby5zdGRvdXQgfHwgc3RyZWFtID09PSBzdGRpby5zdGRlcnIpIHtcbiAgICAgICAgICByZXQub24oXCJlbmRcIiwgKCkgPT4gc3RyZWFtLmVuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gbWFrZUFzeW5jSXRlcmFibGUocmV0KTtcblxuICAgICAgICBmaW5pc2hDb3VudCsrO1xuICAgICAgICBwdW1wKHJldCwgc3RyZWFtLCBmaW5pc2gpO1xuICAgICAgfVxuICAgICAgcmV0ID0gc3RyZWFtO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXQgPSBEdXBsZXguZnJvbShzdHJlYW0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzaWduYWw/LmFib3J0ZWQgfHwgb3V0ZXJTaWduYWw/LmFib3J0ZWQpIHtcbiAgICBwcm9jZXNzLm5leHRUaWNrKGFib3J0KTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgcGlwZWxpbmUsIHBpcGVsaW5lSW1wbCB9O1xuZXhwb3J0IHsgcGlwZWxpbmUsIHBpcGVsaW5lSW1wbCB9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50IGFuZCBOb2RlIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBkZW5vLWxpbnQtaWdub3JlLWZpbGVcblxuaW1wb3J0IHsgZGVzdHJveWVyIH0gZnJvbSBcIi4vZGVzdHJveS5tanNcIjtcbmltcG9ydCB7IGlzTm9kZVN0cmVhbSwgaXNSZWFkYWJsZSwgaXNXcml0YWJsZSB9IGZyb20gXCIuL3V0aWxzLm1qc1wiO1xuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwiLi9waXBlbGluZS5tanNcIjtcbmltcG9ydCB7XG4gIEFib3J0RXJyb3IsXG4gIEVSUl9JTlZBTElEX0FSR19WQUxVRSxcbiAgRVJSX01JU1NJTkdfQVJHUyxcbn0gZnJvbSBcIi4uL2Vycm9ycy50c1wiO1xuaW1wb3J0IER1cGxleCBmcm9tIFwiLi9kdXBsZXgubWpzXCI7XG5cbi8vIFRoaXMgaXMgbmVlZGVkIGZvciBwcmUgbm9kZSAxNy5cbmNsYXNzIENvbXBvc2VEdXBsZXggZXh0ZW5kcyBEdXBsZXgge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zNDM4NVxuXG4gICAgaWYgKG9wdGlvbnM/LnJlYWRhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZCA9IHRydWU7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy53cml0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBvc2UoLi4uc3RyZWFtcykge1xuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRVJSX01JU1NJTkdfQVJHUyhcInN0cmVhbXNcIik7XG4gIH1cblxuICBpZiAoc3RyZWFtcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gRHVwbGV4LmZyb20oc3RyZWFtc1swXSk7XG4gIH1cblxuICBjb25zdCBvcmdTdHJlYW1zID0gWy4uLnN0cmVhbXNdO1xuXG4gIGlmICh0eXBlb2Ygc3RyZWFtc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgc3RyZWFtc1swXSA9IER1cGxleC5mcm9tKHN0cmVhbXNbMF0pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW1zW3N0cmVhbXMubGVuZ3RoIC0gMV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0IGlkeCA9IHN0cmVhbXMubGVuZ3RoIC0gMTtcbiAgICBzdHJlYW1zW2lkeF0gPSBEdXBsZXguZnJvbShzdHJlYW1zW2lkeF0pO1xuICB9XG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBzdHJlYW1zLmxlbmd0aDsgKytuKSB7XG4gICAgaWYgKCFpc05vZGVTdHJlYW0oc3RyZWFtc1tuXSkpIHtcbiAgICAgIC8vIFRPRE8ocm9uYWcpOiBBZGQgY2hlY2tzIGZvciBub24gc3RyZWFtcy5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobiA8IHN0cmVhbXMubGVuZ3RoIC0gMSAmJiAhaXNSZWFkYWJsZShzdHJlYW1zW25dKSkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShcbiAgICAgICAgYHN0cmVhbXNbJHtufV1gLFxuICAgICAgICBvcmdTdHJlYW1zW25dLFxuICAgICAgICBcIm11c3QgYmUgcmVhZGFibGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChuID4gMCAmJiAhaXNXcml0YWJsZShzdHJlYW1zW25dKSkge1xuICAgICAgdGhyb3cgbmV3IEVSUl9JTlZBTElEX0FSR19WQUxVRShcbiAgICAgICAgYHN0cmVhbXNbJHtufV1gLFxuICAgICAgICBvcmdTdHJlYW1zW25dLFxuICAgICAgICBcIm11c3QgYmUgd3JpdGFibGVcIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbGV0IG9uZHJhaW47XG4gIGxldCBvbmZpbmlzaDtcbiAgbGV0IG9ucmVhZGFibGU7XG4gIGxldCBvbmNsb3NlO1xuICBsZXQgZDtcblxuICBmdW5jdGlvbiBvbmZpbmlzaGVkKGVycikge1xuICAgIGNvbnN0IGNiID0gb25jbG9zZTtcbiAgICBvbmNsb3NlID0gbnVsbDtcblxuICAgIGlmIChjYikge1xuICAgICAgY2IoZXJyKTtcbiAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgZC5kZXN0cm95KGVycik7XG4gICAgfSBlbHNlIGlmICghcmVhZGFibGUgJiYgIXdyaXRhYmxlKSB7XG4gICAgICBkLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBoZWFkID0gc3RyZWFtc1swXTtcbiAgY29uc3QgdGFpbCA9IHBpcGVsaW5lKHN0cmVhbXMsIG9uZmluaXNoZWQpO1xuXG4gIGNvbnN0IHdyaXRhYmxlID0gISFpc1dyaXRhYmxlKGhlYWQpO1xuICBjb25zdCByZWFkYWJsZSA9ICEhaXNSZWFkYWJsZSh0YWlsKTtcblxuICAvLyBUT0RPKHJvbmFnKTogQXZvaWQgZG91YmxlIGJ1ZmZlcmluZy5cbiAgLy8gSW1wbGVtZW50IFdyaXRhYmxlL1JlYWRhYmxlL0R1cGxleCB0cmFpdHMuXG4gIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzM1MTUuXG4gIGQgPSBuZXcgQ29tcG9zZUR1cGxleCh7XG4gICAgLy8gVE9ETyAocm9uYWcpOiBoaWdoV2F0ZXJNYXJrP1xuICAgIHdyaXRhYmxlT2JqZWN0TW9kZTogISFoZWFkPy53cml0YWJsZU9iamVjdE1vZGUsXG4gICAgcmVhZGFibGVPYmplY3RNb2RlOiAhIXRhaWw/LndyaXRhYmxlT2JqZWN0TW9kZSxcbiAgICB3cml0YWJsZSxcbiAgICByZWFkYWJsZSxcbiAgfSk7XG5cbiAgaWYgKHdyaXRhYmxlKSB7XG4gICAgZC5fd3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgaWYgKGhlYWQud3JpdGUoY2h1bmssIGVuY29kaW5nKSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25kcmFpbiA9IGNhbGxiYWNrO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkLl9maW5hbCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgaGVhZC5lbmQoKTtcbiAgICAgIG9uZmluaXNoID0gY2FsbGJhY2s7XG4gICAgfTtcblxuICAgIGhlYWQub24oXCJkcmFpblwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAob25kcmFpbikge1xuICAgICAgICBjb25zdCBjYiA9IG9uZHJhaW47XG4gICAgICAgIG9uZHJhaW4gPSBudWxsO1xuICAgICAgICBjYigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGFpbC5vbihcImZpbmlzaFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAob25maW5pc2gpIHtcbiAgICAgICAgY29uc3QgY2IgPSBvbmZpbmlzaDtcbiAgICAgICAgb25maW5pc2ggPSBudWxsO1xuICAgICAgICBjYigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlYWRhYmxlKSB7XG4gICAgdGFpbC5vbihcInJlYWRhYmxlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChvbnJlYWRhYmxlKSB7XG4gICAgICAgIGNvbnN0IGNiID0gb25yZWFkYWJsZTtcbiAgICAgICAgb25yZWFkYWJsZSA9IG51bGw7XG4gICAgICAgIGNiKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0YWlsLm9uKFwiZW5kXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGQucHVzaChudWxsKTtcbiAgICB9KTtcblxuICAgIGQuX3JlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBidWYgPSB0YWlsLnJlYWQoKTtcblxuICAgICAgICBpZiAoYnVmID09PSBudWxsKSB7XG4gICAgICAgICAgb25yZWFkYWJsZSA9IGQuX3JlYWQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkLnB1c2goYnVmKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBkLl9kZXN0cm95ID0gZnVuY3Rpb24gKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiBvbmNsb3NlICE9PSBudWxsKSB7XG4gICAgICBlcnIgPSBuZXcgQWJvcnRFcnJvcigpO1xuICAgIH1cblxuICAgIG9ucmVhZGFibGUgPSBudWxsO1xuICAgIG9uZHJhaW4gPSBudWxsO1xuICAgIG9uZmluaXNoID0gbnVsbDtcblxuICAgIGlmIChvbmNsb3NlID09PSBudWxsKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbmNsb3NlID0gY2FsbGJhY2s7XG4gICAgICBkZXN0cm95ZXIodGFpbCwgZXJyKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2U7XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQgYW5kIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHsgaXNJdGVyYWJsZSwgaXNOb2RlU3RyZWFtIH0gZnJvbSBcIi4uL2ludGVybmFsL3N0cmVhbXMvdXRpbHMubWpzXCI7XG5pbXBvcnQgeyBwaXBlbGluZUltcGwgYXMgcGwgfSBmcm9tIFwiLi4vaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5tanNcIjtcbmltcG9ydCBlb3MgZnJvbSBcIi4uL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5tanNcIjtcblxuZnVuY3Rpb24gcGlwZWxpbmUoLi4uc3RyZWFtcykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzaWduYWw7XG4gICAgbGV0IGVuZDtcbiAgICBjb25zdCBsYXN0QXJnID0gc3RyZWFtc1tzdHJlYW1zLmxlbmd0aCAtIDFdO1xuICAgIGlmIChcbiAgICAgIGxhc3RBcmcgJiYgdHlwZW9mIGxhc3RBcmcgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICFpc05vZGVTdHJlYW0obGFzdEFyZykgJiYgIWlzSXRlcmFibGUobGFzdEFyZylcbiAgICApIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBzdHJlYW1zLnBvcCgpO1xuICAgICAgc2lnbmFsID0gb3B0aW9ucy5zaWduYWw7XG4gICAgICBlbmQgPSBvcHRpb25zLmVuZDtcbiAgICB9XG5cbiAgICBwbChzdHJlYW1zLCAoZXJyLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgfVxuICAgIH0sIHsgc2lnbmFsLCBlbmQgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hlZChzdHJlYW0sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBlb3Moc3RyZWFtLCBvcHRzLCAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaW5pc2hlZCxcbiAgcGlwZWxpbmUsXG59O1xuZXhwb3J0IHsgZmluaXNoZWQsIHBpcGVsaW5lIH07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQgYW5kIE5vZGUgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuaW1wb3J0IHsgX3VpbnQ4QXJyYXlUb0J1ZmZlciB9IGZyb20gXCIuL2ludGVybmFsL3N0cmVhbXMvX3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBhZGRBYm9ydFNpZ25hbCB9IGZyb20gXCIuL2ludGVybmFsL3N0cmVhbXMvYWRkLWFib3J0LXNpZ25hbC5tanNcIjtcbmltcG9ydCB7IGRlc3Ryb3llciB9IGZyb20gXCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveS5tanNcIjtcbmltcG9ydCB7IGlzRGlzdHVyYmVkIH0gZnJvbSBcIi4vaW50ZXJuYWwvc3RyZWFtcy91dGlscy5tanNcIjtcbmltcG9ydCB7IGlzVWludDhBcnJheSB9IGZyb20gXCIuL2ludGVybmFsL3V0aWwvdHlwZXMudHNcIjtcbmltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSBcIi4vaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5tanNcIjtcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gXCIuL2ludGVybmFsL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBTdHJlYW0gfSBmcm9tIFwiLi9pbnRlcm5hbC9zdHJlYW1zL2xlZ2FjeS5tanNcIjtcbmltcG9ydCBjb21wb3NlIGZyb20gXCIuL2ludGVybmFsL3N0cmVhbXMvY29tcG9zZS5tanNcIjtcbmltcG9ydCBEdXBsZXggZnJvbSBcIi4vaW50ZXJuYWwvc3RyZWFtcy9kdXBsZXgubWpzXCI7XG5pbXBvcnQgZW9zIGZyb20gXCIuL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5tanNcIjtcbmltcG9ydCBQYXNzVGhyb3VnaCBmcm9tIFwiLi9pbnRlcm5hbC9zdHJlYW1zL3Bhc3N0aHJvdWdoLm1qc1wiO1xuaW1wb3J0IHByb21pc2VzIGZyb20gXCIuL3N0cmVhbS9wcm9taXNlcy5tanNcIjtcbmltcG9ydCBSZWFkYWJsZSBmcm9tIFwiLi9pbnRlcm5hbC9zdHJlYW1zL3JlYWRhYmxlLm1qc1wiO1xuaW1wb3J0IFRyYW5zZm9ybSBmcm9tIFwiLi9pbnRlcm5hbC9zdHJlYW1zL3RyYW5zZm9ybS5tanNcIjtcbmltcG9ydCBXcml0YWJsZSBmcm9tIFwiLi9pbnRlcm5hbC9zdHJlYW1zL3dyaXRhYmxlLm1qc1wiO1xuXG5jb25zdCB7IGN1c3RvbTogY3VzdG9tUHJvbWlzaWZ5IH0gPSBwcm9taXNpZnk7XG5cblN0cmVhbS5pc0Rpc3R1cmJlZCA9IGlzRGlzdHVyYmVkO1xuU3RyZWFtLlJlYWRhYmxlID0gUmVhZGFibGU7XG5TdHJlYW0uV3JpdGFibGUgPSBXcml0YWJsZTtcblN0cmVhbS5EdXBsZXggPSBEdXBsZXg7XG5TdHJlYW0uVHJhbnNmb3JtID0gVHJhbnNmb3JtO1xuU3RyZWFtLlBhc3NUaHJvdWdoID0gUGFzc1Rocm91Z2g7XG5TdHJlYW0ucGlwZWxpbmUgPSBwaXBlbGluZTtcblN0cmVhbS5hZGRBYm9ydFNpZ25hbCA9IGFkZEFib3J0U2lnbmFsO1xuU3RyZWFtLmZpbmlzaGVkID0gZW9zO1xuU3RyZWFtLmRlc3Ryb3kgPSBkZXN0cm95ZXI7XG5TdHJlYW0uY29tcG9zZSA9IGNvbXBvc2U7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJlYW0sIFwicHJvbWlzZXNcIiwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldCgpIHtcbiAgICByZXR1cm4gcHJvbWlzZXM7XG4gIH0sXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHBpcGVsaW5lLCBjdXN0b21Qcm9taXNpZnksIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0KCkge1xuICAgIHJldHVybiBwcm9taXNlcy5waXBlbGluZTtcbiAgfSxcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZW9zLCBjdXN0b21Qcm9taXNpZnksIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0KCkge1xuICAgIHJldHVybiBwcm9taXNlcy5maW5pc2hlZDtcbiAgfSxcbn0pO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjQueFxuU3RyZWFtLlN0cmVhbSA9IFN0cmVhbTtcblN0cmVhbS5faXNVaW50OEFycmF5ID0gaXNVaW50OEFycmF5O1xuU3RyZWFtLl91aW50OEFycmF5VG9CdWZmZXIgPSBfdWludDhBcnJheVRvQnVmZmVyO1xuXG5leHBvcnQgZGVmYXVsdCBTdHJlYW07XG5leHBvcnQge1xuICBfdWludDhBcnJheVRvQnVmZmVyLFxuICBhZGRBYm9ydFNpZ25hbCxcbiAgY29tcG9zZSxcbiAgZGVzdHJveWVyIGFzIGRlc3Ryb3ksXG4gIER1cGxleCxcbiAgZW9zIGFzIGZpbmlzaGVkLFxuICBpc0Rpc3R1cmJlZCxcbiAgaXNVaW50OEFycmF5IGFzIF9pc1VpbnQ4QXJyYXksXG4gIFBhc3NUaHJvdWdoLFxuICBwaXBlbGluZSxcbiAgUmVhZGFibGUsXG4gIFN0cmVhbSxcbiAgVHJhbnNmb3JtLFxuICBXcml0YWJsZSxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIE5vZGUuanMgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbmltcG9ydCAqIGFzIERlbm9VbnN0YWJsZSBmcm9tIFwiLi4vLi4vX2Rlbm9fdW5zdGFibGUudHNcIjtcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCIuLi9idWZmZXIudHNcIjtcbmltcG9ydCB7XG4gIGNsZWFyTGluZSxcbiAgY2xlYXJTY3JlZW5Eb3duLFxuICBjdXJzb3JUbyxcbiAgbW92ZUN1cnNvcixcbn0gZnJvbSBcIi4uL2ludGVybmFsL3JlYWRsaW5lL2NhbGxiYWNrcy5tanNcIjtcbmltcG9ydCB7IFJlYWRhYmxlLCBXcml0YWJsZSB9IGZyb20gXCIuLi9zdHJlYW0udHNcIjtcbmltcG9ydCB7IHN0ZGlvIH0gZnJvbSBcIi4vc3RkaW8ubWpzXCI7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzAwNzM4MzE0ODI4MDc0MjQzYzlhNTJhMjI4YWI0YzY4YjA0MjU5ZWYvbGliL2ludGVybmFsL2Jvb3RzdHJhcC9zd2l0Y2hlcy9pc19tYWluX3RocmVhZC5qcyNMNDFcbmZ1bmN0aW9uIGNyZWF0ZVdyaXRhYmxlU3RkaW9TdHJlYW0od3JpdGVyLCBuYW1lKSB7XG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBXcml0YWJsZSh7XG4gICAgd3JpdGUoYnVmLCBlbmMsIGNiKSB7XG4gICAgICBpZiAoIXdyaXRlcikge1xuICAgICAgICB0aGlzLmRlc3Ryb3koXG4gICAgICAgICAgbmV3IEVycm9yKGBEZW5vLiR7bmFtZX0gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50YCksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdyaXRlci53cml0ZVN5bmMoYnVmIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGJ1ZiA6IEJ1ZmZlci5mcm9tKGJ1ZiwgZW5jKSk7XG4gICAgICBjYigpO1xuICAgIH0sXG4gICAgZGVzdHJveShlcnIsIGNiKSB7XG4gICAgICBjYihlcnIpO1xuICAgICAgdGhpcy5fdW5kZXN0cm95KCk7XG4gICAgICBpZiAoIXRoaXMuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlKSB7XG4gICAgICAgIG5leHRUaWNrKCgpID0+IHRoaXMuZW1pdChcImNsb3NlXCIpKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbiAgc3RyZWFtLmZkID0gd3JpdGVyPy5yaWQgPz8gLTE7XG4gIHN0cmVhbS5kZXN0cm95U29vbiA9IHN0cmVhbS5kZXN0cm95O1xuICBzdHJlYW0uX2lzU3RkaW8gPSB0cnVlO1xuICBzdHJlYW0ub25jZShcImNsb3NlXCIsICgpID0+IHdyaXRlcj8uY2xvc2UoKSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0cmVhbSwge1xuICAgIGNvbHVtbnM6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6ICgpID0+XG4gICAgICAgIERlbm8uaXNhdHR5Py4od3JpdGVyPy5yaWQpXG4gICAgICAgICAgPyBEZW5vLmNvbnNvbGVTaXplPy4od3JpdGVyPy5yaWQpLmNvbHVtbnNcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9LFxuICAgIHJvd3M6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6ICgpID0+XG4gICAgICAgIERlbm8uaXNhdHR5Py4od3JpdGVyPy5yaWQpXG4gICAgICAgICAgPyBEZW5vLmNvbnNvbGVTaXplPy4od3JpdGVyPy5yaWQpLnJvd3NcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9LFxuICAgIGlzVFRZOiB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiAoKSA9PiBEZW5vLmlzYXR0eT8uKHdyaXRlcj8ucmlkKSxcbiAgICB9LFxuICAgIGdldFdpbmRvd1NpemU6IHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogKCkgPT5cbiAgICAgICAgRGVuby5pc2F0dHk/Lih3cml0ZXI/LnJpZClcbiAgICAgICAgICA/IE9iamVjdC52YWx1ZXMoRGVuby5jb25zb2xlU2l6ZT8uKHdyaXRlcj8ucmlkKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9KTtcblxuICBpZiAoRGVuby5pc2F0dHk/Lih3cml0ZXI/LnJpZCkpIHtcbiAgICAvLyBUaGVzZSBiZWxvbmcgb24gdHR5LldyaXRlU3RyZWFtKCksIGJ1dCB0aGUgVFRZIHN0cmVhbXMgY3VycmVudGx5IGhhdmVcbiAgICAvLyBmb2xsb3dpbmcgcHJvYmxlbXM6XG4gICAgLy8gMS4gVXNpbmcgdGhlbSBoZXJlIGludHJvZHVjZXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5LlxuICAgIC8vIDIuIENyZWF0aW5nIGEgbmV0LlNvY2tldCgpIGZyb20gYSBmZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAgICBzdHJlYW0uY3Vyc29yVG8gPSBmdW5jdGlvbiAoeCwgeSwgY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBjdXJzb3JUbyh0aGlzLCB4LCB5LCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHN0cmVhbS5tb3ZlQ3Vyc29yID0gZnVuY3Rpb24gKGR4LCBkeSwgY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBtb3ZlQ3Vyc29yKHRoaXMsIGR4LCBkeSwgY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICBzdHJlYW0uY2xlYXJMaW5lID0gZnVuY3Rpb24gKGRpciwgY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBjbGVhckxpbmUodGhpcywgZGlyLCBjYWxsYmFjayk7XG4gICAgfTtcblxuICAgIHN0cmVhbS5jbGVhclNjcmVlbkRvd24gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBjbGVhclNjcmVlbkRvd24odGhpcywgY2FsbGJhY2spO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RyZWFtO1xufVxuXG4vKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19wcm9jZXNzX3N0ZGVyciAqL1xuZXhwb3J0IGNvbnN0IHN0ZGVyciA9IHN0ZGlvLnN0ZGVyciA9IGNyZWF0ZVdyaXRhYmxlU3RkaW9TdHJlYW0oXG4gIERlbm8uc3RkZXJyLFxuICBcInN0ZGVyclwiLFxuKTtcblxuLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19zdGRvdXQgKi9cbmV4cG9ydCBjb25zdCBzdGRvdXQgPSBzdGRpby5zdGRvdXQgPSBjcmVhdGVXcml0YWJsZVN0ZGlvU3RyZWFtKFxuICBEZW5vLnN0ZG91dCxcbiAgXCJzdGRvdXRcIixcbik7XG5cbi8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3Nfc3RkaW4gKi9cbmV4cG9ydCBjb25zdCBzdGRpbiA9IHN0ZGlvLnN0ZGluID0gbmV3IFJlYWRhYmxlKHtcbiAgaGlnaFdhdGVyTWFyazogMCxcbiAgZW1pdENsb3NlOiBmYWxzZSxcbiAgcmVhZChzaXplKSB7XG4gICAgY29uc3QgcCA9IEJ1ZmZlci5hbGxvYyhzaXplIHx8IDE2ICogMTAyNCk7XG5cbiAgICBpZiAoIURlbm8uc3RkaW4pIHtcbiAgICAgIHRoaXMuZGVzdHJveShcbiAgICAgICAgbmV3IEVycm9yKFwiRGVuby5zdGRpbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnRcIiksXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIERlbm8uc3RkaW4ucmVhZChwKS50aGVuKChsZW5ndGgpID0+IHtcbiAgICAgIHRoaXMucHVzaChsZW5ndGggPT09IG51bGwgPyBudWxsIDogcC5zbGljZSgwLCBsZW5ndGgpKTtcbiAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMuZGVzdHJveShlcnJvcik7XG4gICAgfSk7XG4gIH0sXG59KTtcbnN0ZGluLm9uKFwiY2xvc2VcIiwgKCkgPT4gRGVuby5zdGRpbj8uY2xvc2UoKSk7XG5zdGRpbi5mZCA9IERlbm8uc3RkaW4/LnJpZCA/PyAtMTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGRpbiwgXCJpc1RUWVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0KCkge1xuICAgIHJldHVybiBEZW5vLmlzYXR0eT8uKERlbm8uc3RkaW4ucmlkKTtcbiAgfSxcbn0pO1xuc3RkaW4uX2lzUmF3TW9kZSA9IGZhbHNlO1xuc3RkaW4uc2V0UmF3TW9kZSA9IChlbmFibGUpID0+IHtcbiAgRGVub1Vuc3RhYmxlLnNldFJhdz8uKERlbm8uc3RkaW4/LnJpZCwgZW5hYmxlKTtcbiAgc3RkaW4uX2lzUmF3TW9kZSA9IGVuYWJsZTtcbiAgcmV0dXJuIHN0ZGluO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdGRpbiwgXCJpc1Jhd1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0KCkge1xuICAgIHJldHVybiBzdGRpbi5faXNSYXdNb2RlO1xuICB9LFxufSk7XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBUaGlzIG1vZHVsZSBwb3J0czpcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL3NyYy9hc3luY193cmFwLWlubC5oXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvYXN5bmNfd3JhcC5jY1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvc3JjL2FzeW5jX3dyYXAuaFxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZXN0cm95SG9vayhcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgX3RhcmdldDogYW55LFxuICBfYXN5bmNJZDogbnVtYmVyLFxuICBfcHJvcDogeyBkZXN0cm95ZWQ6IGJvb2xlYW4gfSxcbikge1xuICAvLyBUT0RPKGt0M2spOiBpbXBsZW1lbnQgYWN0dWFsIHByb2NlZHVyZXNcbn1cblxuZXhwb3J0IGVudW0gY29uc3RhbnRzIHtcbiAga0luaXQsXG4gIGtCZWZvcmUsXG4gIGtBZnRlcixcbiAga0Rlc3Ryb3ksXG4gIGtQcm9taXNlUmVzb2x2ZSxcbiAga1RvdGFscyxcbiAga0NoZWNrLFxuICBrRXhlY3V0aW9uQXN5bmNJZCxcbiAga1RyaWdnZXJBc3luY0lkLFxuICBrQXN5bmNJZENvdW50ZXIsXG4gIGtEZWZhdWx0VHJpZ2dlckFzeW5jSWQsXG4gIGtVc2VzRXhlY3V0aW9uQXN5bmNSZXNvdXJjZSxcbiAga1N0YWNrTGVuZ3RoLFxufVxuXG5jb25zdCBhc3luY0hvb2tGaWVsZHMgPSBuZXcgVWludDMyQXJyYXkoT2JqZWN0LmtleXMoY29uc3RhbnRzKS5sZW5ndGgpO1xuXG5leHBvcnQgeyBhc3luY0hvb2tGaWVsZHMgYXMgYXN5bmNfaG9va19maWVsZHMgfTtcblxuLy8gSW5jcmVtZW50IHRoZSBpbnRlcm5hbCBpZCBjb3VudGVyIGFuZCByZXR1cm4gdGhlIHZhbHVlLlxuZXhwb3J0IGZ1bmN0aW9uIG5ld0FzeW5jSWQoKSB7XG4gIHJldHVybiArK2FzeW5jSWRGaWVsZHNbY29uc3RhbnRzLmtBc3luY0lkQ291bnRlcl07XG59XG5cbmV4cG9ydCBlbnVtIFVpZEZpZWxkcyB7XG4gIGtFeGVjdXRpb25Bc3luY0lkLFxuICBrVHJpZ2dlckFzeW5jSWQsXG4gIGtBc3luY0lkQ291bnRlcixcbiAga0RlZmF1bHRUcmlnZ2VyQXN5bmNJZCxcbiAga1VpZEZpZWxkc0NvdW50LFxufVxuXG5jb25zdCBhc3luY0lkRmllbGRzID0gbmV3IEZsb2F0NjRBcnJheShPYmplY3Qua2V5cyhVaWRGaWVsZHMpLmxlbmd0aCk7XG5cbi8vIGBrQXN5bmNJZENvdW50ZXJgIHNob3VsZCBzdGFydCBhdCBgMWAgYmVjYXVzZSB0aGF0J2xsIGJlIHRoZSBpZCB0aGUgZXhlY3V0aW9uXG4vLyBjb250ZXh0IGR1cmluZyBib290c3RyYXAuXG5hc3luY0lkRmllbGRzW1VpZEZpZWxkcy5rQXN5bmNJZENvdW50ZXJdID0gMTtcblxuLy8gYGtEZWZhdWx0VHJpZ2dlckFzeW5jSWRgIHNob3VsZCBiZSBgLTFgLCB0aGlzIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIG5vXG4vLyBzcGVjaWZpZWQgZGVmYXVsdCB2YWx1ZSBhbmQgaXQgc2hvdWxkIGZhbGxiYWNrIHRvIHRoZSBleGVjdXRpb25Bc3luY0lkLlxuLy8gMCBpcyBub3QgdXNlZCBhcyB0aGUgbWFnaWMgdmFsdWUsIGJlY2F1c2UgdGhhdCBpbmRpY2F0ZXMgYSBtaXNzaW5nXG4vLyBjb250ZXh0IHdoaWNoIGlzIGRpZmZlcmVudCBmcm9tIGEgZGVmYXVsdCBjb250ZXh0LlxuYXN5bmNJZEZpZWxkc1tVaWRGaWVsZHMua0RlZmF1bHRUcmlnZ2VyQXN5bmNJZF0gPSAtMTtcblxuZXhwb3J0IHsgYXN5bmNJZEZpZWxkcyB9O1xuXG5leHBvcnQgZW51bSBwcm92aWRlclR5cGUge1xuICBOT05FLFxuICBESVJIQU5ETEUsXG4gIEROU0NIQU5ORUwsXG4gIEVMREhJU1RPR1JBTSxcbiAgRklMRUhBTkRMRSxcbiAgRklMRUhBTkRMRUNMT1NFUkVRLFxuICBGSVhFRFNJWkVCTE9CQ09QWSxcbiAgRlNFVkVOVFdSQVAsXG4gIEZTUkVRQ0FMTEJBQ0ssXG4gIEZTUkVRUFJPTUlTRSxcbiAgR0VUQUREUklORk9SRVFXUkFQLFxuICBHRVROQU1FSU5GT1JFUVdSQVAsXG4gIEhFQVBTTkFQU0hPVCxcbiAgSFRUUDJTRVNTSU9OLFxuICBIVFRQMlNUUkVBTSxcbiAgSFRUUDJQSU5HLFxuICBIVFRQMlNFVFRJTkdTLFxuICBIVFRQSU5DT01JTkdNRVNTQUdFLFxuICBIVFRQQ0xJRU5UUkVRVUVTVCxcbiAgSlNTVFJFQU0sXG4gIEpTVURQV1JBUCxcbiAgTUVTU0FHRVBPUlQsXG4gIFBJUEVDT05ORUNUV1JBUCxcbiAgUElQRVNFUlZFUldSQVAsXG4gIFBJUEVXUkFQLFxuICBQUk9DRVNTV1JBUCxcbiAgUFJPTUlTRSxcbiAgUVVFUllXUkFQLFxuICBTSFVURE9XTldSQVAsXG4gIFNJR05BTFdSQVAsXG4gIFNUQVRXQVRDSEVSLFxuICBTVFJFQU1QSVBFLFxuICBUQ1BDT05ORUNUV1JBUCxcbiAgVENQU0VSVkVSV1JBUCxcbiAgVENQV1JBUCxcbiAgVFRZV1JBUCxcbiAgVURQU0VORFdSQVAsXG4gIFVEUFdSQVAsXG4gIFNJR0lOVFdBVENIRE9HLFxuICBXT1JLRVIsXG4gIFdPUktFUkhFQVBTTkFQU0hPVCxcbiAgV1JJVEVXUkFQLFxuICBaTElCLFxufVxuXG5jb25zdCBrSW52YWxpZEFzeW5jSWQgPSAtMTtcblxuZXhwb3J0IGNsYXNzIEFzeW5jV3JhcCB7XG4gIHByb3ZpZGVyOiBwcm92aWRlclR5cGUgPSBwcm92aWRlclR5cGUuTk9ORTtcbiAgYXN5bmNJZCA9IGtJbnZhbGlkQXN5bmNJZDtcblxuICBjb25zdHJ1Y3Rvcihwcm92aWRlcjogcHJvdmlkZXJUeXBlKSB7XG4gICAgdGhpcy5wcm92aWRlciA9IHByb3ZpZGVyO1xuICAgIHRoaXMuZ2V0QXN5bmNJZCgpO1xuICB9XG5cbiAgZ2V0QXN5bmNJZCgpOiBudW1iZXIge1xuICAgIHRoaXMuYXN5bmNJZCA9IHRoaXMuYXN5bmNJZCA9PT0ga0ludmFsaWRBc3luY0lkXG4gICAgICA/IG5ld0FzeW5jSWQoKVxuICAgICAgOiB0aGlzLmFzeW5jSWQ7XG5cbiAgICByZXR1cm4gdGhpcy5hc3luY0lkO1xuICB9XG5cbiAgZ2V0UHJvdmlkZXJUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVyO1xuICB9XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gVGhpcyBtb2R1bGUgcG9ydHM6XG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvY2FyZXNfd3JhcC5jY1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvc3JjL2NhcmVzX3dyYXAuaFxuXG5pbXBvcnQgdHlwZSB7IEVycm5vRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2ludGVybmFsL2Vycm9ycy50c1wiO1xuaW1wb3J0IHsgaXNJUHY0IH0gZnJvbSBcIi4uL2ludGVybmFsL25ldC50c1wiO1xuaW1wb3J0IHsgY29kZU1hcCB9IGZyb20gXCIuL3V2LnRzXCI7XG5pbXBvcnQgeyBBc3luY1dyYXAsIHByb3ZpZGVyVHlwZSB9IGZyb20gXCIuL2FzeW5jX3dyYXAudHNcIjtcbmltcG9ydCB7IGFyZXNfc3RyZXJyb3IgfSBmcm9tIFwiLi9hcmVzLnRzXCI7XG5pbXBvcnQgeyBub3RJbXBsZW1lbnRlZCB9IGZyb20gXCIuLi9fdXRpbHMudHNcIjtcbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuLi8uLi9fdXRpbC9vcy50c1wiO1xuXG5pbnRlcmZhY2UgTG9va3VwQWRkcmVzcyB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgZmFtaWx5OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRBZGRySW5mb1JlcVdyYXAgZXh0ZW5kcyBBc3luY1dyYXAge1xuICBmYW1pbHkhOiBudW1iZXI7XG4gIGhvc3RuYW1lITogc3RyaW5nO1xuXG4gIGNhbGxiYWNrITogKFxuICAgIGVycjogRXJybm9FeGNlcHRpb24gfCBudWxsLFxuICAgIGFkZHJlc3NPckFkZHJlc3Nlcz86IHN0cmluZyB8IExvb2t1cEFkZHJlc3NbXSB8IG51bGwsXG4gICAgZmFtaWx5PzogbnVtYmVyLFxuICApID0+IHZvaWQ7XG4gIHJlc29sdmUhOiAoYWRkcmVzc09yQWRkcmVzc2VzOiBMb29rdXBBZGRyZXNzIHwgTG9va3VwQWRkcmVzc1tdKSA9PiB2b2lkO1xuICByZWplY3QhOiAoZXJyOiBFcnJub0V4Y2VwdGlvbiB8IG51bGwpID0+IHZvaWQ7XG4gIG9uY29tcGxldGUhOiAoZXJyOiBudW1iZXIgfCBudWxsLCBhZGRyZXNzZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKHByb3ZpZGVyVHlwZS5HRVRBRERSSU5GT1JFUVdSQVApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRhZGRyaW5mbyhcbiAgcmVxOiBHZXRBZGRySW5mb1JlcVdyYXAsXG4gIGhvc3RuYW1lOiBzdHJpbmcsXG4gIGZhbWlseTogbnVtYmVyLFxuICBfaGludHM6IG51bWJlcixcbiAgdmVyYmF0aW06IGJvb2xlYW4sXG4pOiBudW1iZXIge1xuICBsZXQgYWRkcmVzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIFRPRE8oY21vcnRlbik6IHVzZSBoaW50c1xuICAvLyBSRUY6IGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZG5zLmh0bWwjZG5zX3N1cHBvcnRlZF9nZXRhZGRyaW5mb19mbGFnc1xuXG4gIGNvbnN0IHJlY29yZFR5cGVzOiAoXCJBXCIgfCBcIkFBQUFcIilbXSA9IFtdO1xuXG4gIGlmIChmYW1pbHkgPT09IDAgfHwgZmFtaWx5ID09PSA0KSB7XG4gICAgcmVjb3JkVHlwZXMucHVzaChcIkFcIik7XG4gIH1cbiAgaWYgKGZhbWlseSA9PT0gMCB8fCBmYW1pbHkgPT09IDYpIHtcbiAgICByZWNvcmRUeXBlcy5wdXNoKFwiQUFBQVwiKTtcbiAgfVxuXG4gIChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgcmVjb3JkVHlwZXMubWFwKChyZWNvcmRUeXBlKSA9PlxuICAgICAgICBEZW5vLnJlc29sdmVEbnMoaG9zdG5hbWUsIHJlY29yZFR5cGUpLnRoZW4oKHJlY29yZHMpID0+IHtcbiAgICAgICAgICByZWNvcmRzLmZvckVhY2goKHJlY29yZCkgPT4gYWRkcmVzc2VzLnB1c2gocmVjb3JkKSk7XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICk7XG5cbiAgICBjb25zdCBlcnJvciA9IGFkZHJlc3Nlcy5sZW5ndGggPyAwIDogY29kZU1hcC5nZXQoXCJFQUlfTk9EQVRBXCIpITtcblxuICAgIC8vIFRPRE8oY21vcnRlbik6IG5lZWRzIHdvcmtcbiAgICAvLyBSRUY6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvY2FyZXNfd3JhcC5jYyNMMTQ0NFxuICAgIGlmICghdmVyYmF0aW0pIHtcbiAgICAgIGFkZHJlc3Nlcy5zb3J0KChhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gICAgICAgIGlmIChpc0lQdjQoYSkpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNJUHY0KGIpKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRPRE86IEZvcmNlcyBJUHY0IGFzIGEgd29ya2Fyb3VuZCBmb3IgRGVubyBub3RcbiAgICAvLyBhbGlnbmluZyB3aXRoIE5vZGUgb24gaW1wbGljaXQgYmluZGluZyBvbiBXaW5kb3dzXG4gICAgLy8gUkVGOiBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMTA3NjJcbiAgICBpZiAoaXNXaW5kb3dzICYmIGhvc3RuYW1lID09PSBcImxvY2FsaG9zdFwiKSB7XG4gICAgICBhZGRyZXNzZXMgPSBhZGRyZXNzZXMuZmlsdGVyKChhZGRyZXNzKSA9PiBpc0lQdjQoYWRkcmVzcykpO1xuICAgIH1cblxuICAgIHJlcS5vbmNvbXBsZXRlKGVycm9yLCBhZGRyZXNzZXMpO1xuICB9KSgpO1xuXG4gIHJldHVybiAwO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlcnlSZXFXcmFwIGV4dGVuZHMgQXN5bmNXcmFwIHtcbiAgYmluZGluZ05hbWUhOiBzdHJpbmc7XG4gIGhvc3RuYW1lITogc3RyaW5nO1xuICB0dGwhOiBib29sZWFuO1xuXG4gIGNhbGxiYWNrITogKFxuICAgIGVycjogRXJybm9FeGNlcHRpb24gfCBudWxsLFxuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgcmVjb3Jkcz86IGFueSxcbiAgKSA9PiB2b2lkO1xuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICByZXNvbHZlITogKHJlY29yZHM6IGFueSkgPT4gdm9pZDtcbiAgcmVqZWN0ITogKGVycjogRXJybm9FeGNlcHRpb24gfCBudWxsKSA9PiB2b2lkO1xuICBvbmNvbXBsZXRlITogKFxuICAgIGVycjogbnVtYmVyLFxuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgcmVjb3JkczogYW55LFxuICAgIHR0bHM/OiBudW1iZXJbXSxcbiAgKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKHByb3ZpZGVyVHlwZS5RVUVSWVdSQVApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbm5lbFdyYXBRdWVyeSB7XG4gIHF1ZXJ5QW55KHJlcTogUXVlcnlSZXFXcmFwLCBuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIHF1ZXJ5QShyZXE6IFF1ZXJ5UmVxV3JhcCwgbmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBxdWVyeUFhYWEocmVxOiBRdWVyeVJlcVdyYXAsIG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgcXVlcnlDYWEocmVxOiBRdWVyeVJlcVdyYXAsIG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgcXVlcnlDbmFtZShyZXE6IFF1ZXJ5UmVxV3JhcCwgbmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBxdWVyeU14KHJlcTogUXVlcnlSZXFXcmFwLCBuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIHF1ZXJ5TnMocmVxOiBRdWVyeVJlcVdyYXAsIG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgcXVlcnlUeHQocmVxOiBRdWVyeVJlcVdyYXAsIG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgcXVlcnlTcnYocmVxOiBRdWVyeVJlcVdyYXAsIG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgcXVlcnlQdHIocmVxOiBRdWVyeVJlcVdyYXAsIG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgcXVlcnlOYXB0cihyZXE6IFF1ZXJ5UmVxV3JhcCwgbmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBxdWVyeVNvYShyZXE6IFF1ZXJ5UmVxV3JhcCwgbmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBnZXRIb3N0QnlBZGRyKHJlcTogUXVlcnlSZXFXcmFwLCBuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGZxZG5Ub0hvc3RuYW1lKGZxZG46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBmcWRuLnJlcGxhY2UoL1xcLiQvLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gY29tcHJlc3NJUHY2KGFkZHJlc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGFkZHJlc3MucmVwbGFjZSgvXFxiKD86MCs6KXsyLH0vLCBcIjpcIik7XG4gIGNvbnN0IGZpbmFsQWRkcmVzcyA9IGZvcm1hdHRlZFxuICAgIC5zcGxpdChcIjpcIilcbiAgICAubWFwKChvY3RldCkgPT4ge1xuICAgICAgaWYgKG9jdGV0Lm1hdGNoKC9eXFxkK1xcLlxcZCtcXC5cXGQrXFwuXFxkKyQvKSkge1xuICAgICAgICAvLyBkZWNpbWFsXG4gICAgICAgIHJldHVybiBOdW1iZXIob2N0ZXQucmVwbGFjZUFsbChcIi5cIiwgXCJcIikpLnRvU3RyaW5nKDE2KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9jdGV0LnJlcGxhY2UoL1xcYjArL2csIFwiXCIpO1xuICAgIH0pXG4gICAgLmpvaW4oXCI6XCIpO1xuXG4gIHJldHVybiBmaW5hbEFkZHJlc3M7XG59XG5cbmV4cG9ydCBjbGFzcyBDaGFubmVsV3JhcCBleHRlbmRzIEFzeW5jV3JhcCBpbXBsZW1lbnRzIENoYW5uZWxXcmFwUXVlcnkge1xuICAjc2VydmVyczogW3N0cmluZywgbnVtYmVyXVtdID0gW107XG4gICN0aW1lb3V0OiBudW1iZXI7XG4gICN0cmllczogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHRpbWVvdXQ6IG51bWJlciwgdHJpZXM6IG51bWJlcikge1xuICAgIHN1cGVyKHByb3ZpZGVyVHlwZS5ETlNDSEFOTkVMKTtcblxuICAgIHRoaXMuI3RpbWVvdXQgPSB0aW1lb3V0O1xuICAgIHRoaXMuI3RyaWVzID0gdHJpZXM7XG4gIH1cblxuICBhc3luYyAjcXVlcnkocXVlcnk6IHN0cmluZywgcmVjb3JkVHlwZTogRGVuby5SZWNvcmRUeXBlKSB7XG4gICAgLy8gVE9ETzogVFRMIGxvZ2ljLlxuXG4gICAgbGV0IGNvZGU6IG51bWJlcjtcbiAgICBsZXQgcmV0OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIERlbm8ucmVzb2x2ZURucz4+O1xuXG4gICAgaWYgKHRoaXMuI3NlcnZlcnMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtpcEFkZHIsIHBvcnRdIG9mIHRoaXMuI3NlcnZlcnMpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbmFtZVNlcnZlcjoge1xuICAgICAgICAgICAgaXBBZGRyLFxuICAgICAgICAgICAgcG9ydCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgICh7IGNvZGUsIHJldCB9ID0gYXdhaXQgdGhpcy4jcmVzb2x2ZShcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICByZWNvcmRUeXBlLFxuICAgICAgICAgIHJlc29sdmVPcHRpb25zLFxuICAgICAgICApKTtcblxuICAgICAgICBpZiAoY29kZSA9PT0gMCB8fCBjb2RlID09PSBjb2RlTWFwLmdldChcIkVBSV9OT0RBVEFcIikhKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHsgY29kZSwgcmV0IH0gPSBhd2FpdCB0aGlzLiNyZXNvbHZlKHF1ZXJ5LCByZWNvcmRUeXBlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZTogY29kZSEsIHJldDogcmV0ISB9O1xuICB9XG5cbiAgYXN5bmMgI3Jlc29sdmUoXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICByZWNvcmRUeXBlOiBEZW5vLlJlY29yZFR5cGUsXG4gICAgcmVzb2x2ZU9wdGlvbnM/OiBEZW5vLlJlc29sdmVEbnNPcHRpb25zLFxuICApOiBQcm9taXNlPHtcbiAgICBjb2RlOiBudW1iZXI7XG4gICAgcmV0OiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIERlbm8ucmVzb2x2ZURucz4+O1xuICB9PiB7XG4gICAgbGV0IHJldDogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBEZW5vLnJlc29sdmVEbnM+PiA9IFtdO1xuICAgIGxldCBjb2RlID0gMDtcblxuICAgIHRyeSB7XG4gICAgICByZXQgPSBhd2FpdCBEZW5vLnJlc29sdmVEbnMocXVlcnksIHJlY29yZFR5cGUsIHJlc29sdmVPcHRpb25zKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kKSB7XG4gICAgICAgIGNvZGUgPSBjb2RlTWFwLmdldChcIkVBSV9OT0RBVEFcIikhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETyhjbW9ydGVuKTogbWFwIGVycm9ycyB0byBhcHByb3ByaWF0ZSBlcnJvciBjb2Rlcy5cbiAgICAgICAgY29kZSA9IGNvZGVNYXAuZ2V0KFwiVU5LTk9XTlwiKSE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZSwgcmV0IH07XG4gIH1cblxuICBxdWVyeUFueShyZXE6IFF1ZXJ5UmVxV3JhcCwgbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnRlZCB0ZW1wb3JhcnkgbWVhc3VyZSB0byBhbGxvdyBsaW1pdGVkIHVzYWdlIG9mXG4gICAgLy8gYHJlc29sdmVBbnlgIGxpa2UgQVBJcy5cbiAgICAvL1xuICAgIC8vIElkZWFsbHkgd2UgbW92ZSB0byB1c2luZyB0aGUgXCJBTllcIiAvIFwiKlwiIEROUyBxdWVyeSBpbiBmdXR1cmVcbiAgICAvLyBSRUY6IGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vL2lzc3Vlcy8xNDQ5MlxuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvcmRzOiB7IHR5cGU6IERlbm8uUmVjb3JkVHlwZTsgW2tleTogc3RyaW5nXTogdW5rbm93biB9W10gPSBbXTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgdGhpcy4jcXVlcnkobmFtZSwgXCJBXCIpLnRoZW4oKHsgcmV0IH0pID0+IHtcbiAgICAgICAgICByZXQuZm9yRWFjaCgocmVjb3JkKSA9PiByZWNvcmRzLnB1c2goeyB0eXBlOiBcIkFcIiwgYWRkcmVzczogcmVjb3JkIH0pKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsIFwiQUFBQVwiKS50aGVuKCh7IHJldCB9KSA9PiB7XG4gICAgICAgICAgKHJldCBhcyBzdHJpbmdbXSkuZm9yRWFjaCgocmVjb3JkKSA9PlxuICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKHsgdHlwZTogXCJBQUFBXCIsIGFkZHJlc3M6IGNvbXByZXNzSVB2NihyZWNvcmQpIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsIFwiQ0FBXCIpLnRoZW4oKHsgcmV0IH0pID0+IHtcbiAgICAgICAgICAocmV0IGFzIERlbm8uQ0FBUmVjb3JkW10pLmZvckVhY2goKHsgY3JpdGljYWwsIHRhZywgdmFsdWUgfSkgPT5cbiAgICAgICAgICAgIHJlY29yZHMucHVzaCh7XG4gICAgICAgICAgICAgIHR5cGU6IFwiQ0FBXCIsXG4gICAgICAgICAgICAgIFt0YWddOiB2YWx1ZSxcbiAgICAgICAgICAgICAgY3JpdGljYWw6ICtjcml0aWNhbCAmJiAxMjgsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiNxdWVyeShuYW1lLCBcIkNOQU1FXCIpLnRoZW4oKHsgcmV0IH0pID0+IHtcbiAgICAgICAgICByZXQuZm9yRWFjaCgocmVjb3JkKSA9PlxuICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKHsgdHlwZTogXCJDTkFNRVwiLCB2YWx1ZTogcmVjb3JkIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsIFwiTVhcIikudGhlbigoeyByZXQgfSkgPT4ge1xuICAgICAgICAgIChyZXQgYXMgRGVuby5NWFJlY29yZFtdKS5mb3JFYWNoKCh7IHByZWZlcmVuY2UsIGV4Y2hhbmdlIH0pID0+XG4gICAgICAgICAgICByZWNvcmRzLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiBcIk1YXCIsXG4gICAgICAgICAgICAgIHByaW9yaXR5OiBwcmVmZXJlbmNlLFxuICAgICAgICAgICAgICBleGNoYW5nZTogZnFkblRvSG9zdG5hbWUoZXhjaGFuZ2UpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy4jcXVlcnkobmFtZSwgXCJOQVBUUlwiKS50aGVuKCh7IHJldCB9KSA9PiB7XG4gICAgICAgICAgKHJldCBhcyBEZW5vLk5BUFRSUmVjb3JkW10pLmZvckVhY2goXG4gICAgICAgICAgICAoeyBvcmRlciwgcHJlZmVyZW5jZSwgZmxhZ3MsIHNlcnZpY2VzLCByZWdleHAsIHJlcGxhY2VtZW50IH0pID0+XG4gICAgICAgICAgICAgIHJlY29yZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJOQVBUUlwiLFxuICAgICAgICAgICAgICAgIG9yZGVyLFxuICAgICAgICAgICAgICAgIHByZWZlcmVuY2UsXG4gICAgICAgICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgICAgICAgc2VydmljZTogc2VydmljZXMsXG4gICAgICAgICAgICAgICAgcmVnZXhwLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy4jcXVlcnkobmFtZSwgXCJOU1wiKS50aGVuKCh7IHJldCB9KSA9PiB7XG4gICAgICAgICAgKHJldCBhcyBzdHJpbmdbXSkuZm9yRWFjaCgocmVjb3JkKSA9PlxuICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKHsgdHlwZTogXCJOU1wiLCB2YWx1ZTogZnFkblRvSG9zdG5hbWUocmVjb3JkKSB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICB0aGlzLiNxdWVyeShuYW1lLCBcIlBUUlwiKS50aGVuKCh7IHJldCB9KSA9PiB7XG4gICAgICAgICAgKHJldCBhcyBzdHJpbmdbXSkuZm9yRWFjaCgocmVjb3JkKSA9PlxuICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKHsgdHlwZTogXCJQVFJcIiwgdmFsdWU6IGZxZG5Ub0hvc3RuYW1lKHJlY29yZCkgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy4jcXVlcnkobmFtZSwgXCJTT0FcIikudGhlbigoeyByZXQgfSkgPT4ge1xuICAgICAgICAgIChyZXQgYXMgRGVuby5TT0FSZWNvcmRbXSkuZm9yRWFjaChcbiAgICAgICAgICAgICh7IG1uYW1lLCBybmFtZSwgc2VyaWFsLCByZWZyZXNoLCByZXRyeSwgZXhwaXJlLCBtaW5pbXVtIH0pID0+XG4gICAgICAgICAgICAgIHJlY29yZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJTT0FcIixcbiAgICAgICAgICAgICAgICBuc25hbWU6IGZxZG5Ub0hvc3RuYW1lKG1uYW1lKSxcbiAgICAgICAgICAgICAgICBob3N0bWFzdGVyOiBmcWRuVG9Ib3N0bmFtZShybmFtZSksXG4gICAgICAgICAgICAgICAgc2VyaWFsLFxuICAgICAgICAgICAgICAgIHJlZnJlc2gsXG4gICAgICAgICAgICAgICAgcmV0cnksXG4gICAgICAgICAgICAgICAgZXhwaXJlLFxuICAgICAgICAgICAgICAgIG1pbnR0bDogbWluaW11bSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsIFwiU1JWXCIpLnRoZW4oKHsgcmV0IH0pID0+IHtcbiAgICAgICAgICAocmV0IGFzIERlbm8uU1JWUmVjb3JkW10pLmZvckVhY2goXG4gICAgICAgICAgICAoeyBwcmlvcml0eSwgd2VpZ2h0LCBwb3J0LCB0YXJnZXQgfSkgPT5cbiAgICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlNSVlwiLFxuICAgICAgICAgICAgICAgIHByaW9yaXR5LFxuICAgICAgICAgICAgICAgIHdlaWdodCxcbiAgICAgICAgICAgICAgICBwb3J0LFxuICAgICAgICAgICAgICAgIG5hbWU6IHRhcmdldCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMuI3F1ZXJ5KG5hbWUsIFwiVFhUXCIpLnRoZW4oKHsgcmV0IH0pID0+IHtcbiAgICAgICAgICByZXQuZm9yRWFjaCgocmVjb3JkKSA9PlxuICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKHsgdHlwZTogXCJUWFRcIiwgZW50cmllczogcmVjb3JkIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICBdKTtcblxuICAgICAgY29uc3QgZXJyID0gcmVjb3Jkcy5sZW5ndGggPyAwIDogY29kZU1hcC5nZXQoXCJFQUlfTk9EQVRBXCIpITtcblxuICAgICAgcmVxLm9uY29tcGxldGUoZXJyLCByZWNvcmRzKTtcbiAgICB9KSgpO1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBxdWVyeUEocmVxOiBRdWVyeVJlcVdyYXAsIG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdGhpcy4jcXVlcnkobmFtZSwgXCJBXCIpLnRoZW4oKHsgY29kZSwgcmV0IH0pID0+IHtcbiAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJldCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHF1ZXJ5QWFhYShyZXE6IFF1ZXJ5UmVxV3JhcCwgbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0aGlzLiNxdWVyeShuYW1lLCBcIkFBQUFcIikudGhlbigoeyBjb2RlLCByZXQgfSkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkcyA9IChyZXQgYXMgc3RyaW5nW10pLm1hcCgocmVjb3JkKSA9PiBjb21wcmVzc0lQdjYocmVjb3JkKSk7XG5cbiAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJlY29yZHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBxdWVyeUNhYShyZXE6IFF1ZXJ5UmVxV3JhcCwgbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0aGlzLiNxdWVyeShuYW1lLCBcIkNBQVwiKS50aGVuKCh7IGNvZGUsIHJldCB9KSA9PiB7XG4gICAgICBjb25zdCByZWNvcmRzID0gKHJldCBhcyBEZW5vLkNBQVJlY29yZFtdKS5tYXAoXG4gICAgICAgICh7IGNyaXRpY2FsLCB0YWcsIHZhbHVlIH0pID0+ICh7XG4gICAgICAgICAgW3RhZ106IHZhbHVlLFxuICAgICAgICAgIGNyaXRpY2FsOiArY3JpdGljYWwgJiYgMTI4LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJlY29yZHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBxdWVyeUNuYW1lKHJlcTogUXVlcnlSZXFXcmFwLCBuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuI3F1ZXJ5KG5hbWUsIFwiQ05BTUVcIikudGhlbigoeyBjb2RlLCByZXQgfSkgPT4ge1xuICAgICAgcmVxLm9uY29tcGxldGUoY29kZSwgcmV0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcXVlcnlNeChyZXE6IFF1ZXJ5UmVxV3JhcCwgbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0aGlzLiNxdWVyeShuYW1lLCBcIk1YXCIpLnRoZW4oKHsgY29kZSwgcmV0IH0pID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZHMgPSAocmV0IGFzIERlbm8uTVhSZWNvcmRbXSkubWFwKFxuICAgICAgICAoeyBwcmVmZXJlbmNlLCBleGNoYW5nZSB9KSA9PiAoe1xuICAgICAgICAgIHByaW9yaXR5OiBwcmVmZXJlbmNlLFxuICAgICAgICAgIGV4Y2hhbmdlOiBmcWRuVG9Ib3N0bmFtZShleGNoYW5nZSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgcmVxLm9uY29tcGxldGUoY29kZSwgcmVjb3Jkcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHF1ZXJ5TmFwdHIocmVxOiBRdWVyeVJlcVdyYXAsIG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdGhpcy4jcXVlcnkobmFtZSwgXCJOQVBUUlwiKS50aGVuKCh7IGNvZGUsIHJldCB9KSA9PiB7XG4gICAgICBjb25zdCByZWNvcmRzID0gKHJldCBhcyBEZW5vLk5BUFRSUmVjb3JkW10pLm1hcChcbiAgICAgICAgKHsgb3JkZXIsIHByZWZlcmVuY2UsIGZsYWdzLCBzZXJ2aWNlcywgcmVnZXhwLCByZXBsYWNlbWVudCB9KSA9PiAoe1xuICAgICAgICAgIGZsYWdzLFxuICAgICAgICAgIHNlcnZpY2U6IHNlcnZpY2VzLFxuICAgICAgICAgIHJlZ2V4cCxcbiAgICAgICAgICByZXBsYWNlbWVudCxcbiAgICAgICAgICBvcmRlcixcbiAgICAgICAgICBwcmVmZXJlbmNlLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJlY29yZHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBxdWVyeU5zKHJlcTogUXVlcnlSZXFXcmFwLCBuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuI3F1ZXJ5KG5hbWUsIFwiTlNcIikudGhlbigoeyBjb2RlLCByZXQgfSkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkcyA9IChyZXQgYXMgc3RyaW5nW10pLm1hcCgocmVjb3JkKSA9PiBmcWRuVG9Ib3N0bmFtZShyZWNvcmQpKTtcblxuICAgICAgcmVxLm9uY29tcGxldGUoY29kZSwgcmVjb3Jkcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHF1ZXJ5UHRyKHJlcTogUXVlcnlSZXFXcmFwLCBuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuI3F1ZXJ5KG5hbWUsIFwiUFRSXCIpLnRoZW4oKHsgY29kZSwgcmV0IH0pID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZHMgPSAocmV0IGFzIHN0cmluZ1tdKS5tYXAoKHJlY29yZCkgPT4gZnFkblRvSG9zdG5hbWUocmVjb3JkKSk7XG5cbiAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJlY29yZHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBxdWVyeVNvYShyZXE6IFF1ZXJ5UmVxV3JhcCwgbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0aGlzLiNxdWVyeShuYW1lLCBcIlNPQVwiKS50aGVuKCh7IGNvZGUsIHJldCB9KSA9PiB7XG4gICAgICBsZXQgcmVjb3JkID0ge307XG5cbiAgICAgIGlmIChyZXQubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgbW5hbWUsIHJuYW1lLCBzZXJpYWwsIHJlZnJlc2gsIHJldHJ5LCBleHBpcmUsIG1pbmltdW0gfSA9XG4gICAgICAgICAgcmV0WzBdIGFzIERlbm8uU09BUmVjb3JkO1xuXG4gICAgICAgIHJlY29yZCA9IHtcbiAgICAgICAgICBuc25hbWU6IGZxZG5Ub0hvc3RuYW1lKG1uYW1lKSxcbiAgICAgICAgICBob3N0bWFzdGVyOiBmcWRuVG9Ib3N0bmFtZShybmFtZSksXG4gICAgICAgICAgc2VyaWFsLFxuICAgICAgICAgIHJlZnJlc2gsXG4gICAgICAgICAgcmV0cnksXG4gICAgICAgICAgZXhwaXJlLFxuICAgICAgICAgIG1pbnR0bDogbWluaW11bSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmVxLm9uY29tcGxldGUoY29kZSwgcmVjb3JkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcXVlcnlTcnYocmVxOiBRdWVyeVJlcVdyYXAsIG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdGhpcy4jcXVlcnkobmFtZSwgXCJTUlZcIikudGhlbigoeyBjb2RlLCByZXQgfSkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkcyA9IChyZXQgYXMgRGVuby5TUlZSZWNvcmRbXSkubWFwKFxuICAgICAgICAoeyBwcmlvcml0eSwgd2VpZ2h0LCBwb3J0LCB0YXJnZXQgfSkgPT4gKHtcbiAgICAgICAgICBwcmlvcml0eSxcbiAgICAgICAgICB3ZWlnaHQsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICBuYW1lOiB0YXJnZXQsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgcmVxLm9uY29tcGxldGUoY29kZSwgcmVjb3Jkcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHF1ZXJ5VHh0KHJlcTogUXVlcnlSZXFXcmFwLCBuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuI3F1ZXJ5KG5hbWUsIFwiVFhUXCIpLnRoZW4oKHsgY29kZSwgcmV0IH0pID0+IHtcbiAgICAgIHJlcS5vbmNvbXBsZXRlKGNvZGUsIHJldCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGdldEhvc3RCeUFkZHIoX3JlcTogUXVlcnlSZXFXcmFwLCBfbmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAvLyBUT0RPOiBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMTQ0MzJcbiAgICBub3RJbXBsZW1lbnRlZChcImNhcmVzLkNoYW5uZWxXcmFwLnByb3RvdHlwZS5nZXRIb3N0QnlBZGRyXCIpO1xuICB9XG5cbiAgZ2V0U2VydmVycygpOiBbc3RyaW5nLCBudW1iZXJdW10ge1xuICAgIHJldHVybiB0aGlzLiNzZXJ2ZXJzO1xuICB9XG5cbiAgc2V0U2VydmVycyhzZXJ2ZXJzOiBzdHJpbmcgfCBbbnVtYmVyLCBzdHJpbmcsIG51bWJlcl1bXSk6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiBzZXJ2ZXJzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25zdCB0dXBsZXM6IFtzdHJpbmcsIG51bWJlcl1bXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdHVwbGVzLnB1c2goW3NlcnZlcnNbaV0sIHBhcnNlSW50KHNlcnZlcnNbaSArIDFdKV0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNzZXJ2ZXJzID0gdHVwbGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNzZXJ2ZXJzID0gc2VydmVycy5tYXAoKFtfaXBWZXJzaW9uLCBpcCwgcG9ydF0pID0+IFtpcCwgcG9ydF0pO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc2V0TG9jYWxBZGRyZXNzKF9hZGRyMDogc3RyaW5nLCBfYWRkcjE/OiBzdHJpbmcpIHtcbiAgICBub3RJbXBsZW1lbnRlZChcImNhcmVzLkNoYW5uZWxXcmFwLnByb3RvdHlwZS5zZXRMb2NhbEFkZHJlc3NcIik7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJjYXJlcy5DaGFubmVsV3JhcC5wcm90b3R5cGUuY2FuY2VsXCIpO1xuICB9XG59XG5cbmNvbnN0IEROU19FU0VUU1JWUEVORElORyA9IC0xMDAwO1xuY29uc3QgRU1TR19FU0VUU1JWUEVORElORyA9IFwiVGhlcmUgYXJlIHBlbmRpbmcgcXVlcmllcy5cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVycm9yKGNvZGU6IG51bWJlcikge1xuICByZXR1cm4gY29kZSA9PT0gRE5TX0VTRVRTUlZQRU5ESU5HXG4gICAgPyBFTVNHX0VTRVRTUlZQRU5ESU5HXG4gICAgOiBhcmVzX3N0cmVycm9yKGNvZGUpO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIi4uL2J1ZmZlci50c1wiO1xuaW1wb3J0IHsgdXZFeGNlcHRpb24gfSBmcm9tIFwiLi9lcnJvcnMudHNcIjtcbmltcG9ydCB7IHdyaXRlQnVmZmVyIH0gZnJvbSBcIi4uL2ludGVybmFsX2JpbmRpbmcvbm9kZV9maWxlLnRzXCI7XG5cbi8vIElQdjQgU2VnbWVudFxuY29uc3QgdjRTZWcgPSBcIig/OlswLTldfFsxLTldWzAtOV18MVswLTldWzAtOV18MlswLTRdWzAtOV18MjVbMC01XSlcIjtcbmNvbnN0IHY0U3RyID0gYCgke3Y0U2VnfVsuXSl7M30ke3Y0U2VnfWA7XG5jb25zdCBJUHY0UmVnID0gbmV3IFJlZ0V4cChgXiR7djRTdHJ9JGApO1xuXG4vLyBJUHY2IFNlZ21lbnRcbmNvbnN0IHY2U2VnID0gXCIoPzpbMC05YS1mQS1GXXsxLDR9KVwiO1xuY29uc3QgSVB2NlJlZyA9IG5ldyBSZWdFeHAoXG4gIFwiXihcIiArXG4gICAgYCg/OiR7djZTZWd9Oil7N30oPzoke3Y2U2VnfXw6KXxgICtcbiAgICBgKD86JHt2NlNlZ306KXs2fSg/OiR7djRTdHJ9fDoke3Y2U2VnfXw6KXxgICtcbiAgICBgKD86JHt2NlNlZ306KXs1fSg/Ojoke3Y0U3RyfXwoOiR7djZTZWd9KXsxLDJ9fDopfGAgK1xuICAgIGAoPzoke3Y2U2VnfTopezR9KD86KDoke3Y2U2VnfSl7MCwxfToke3Y0U3RyfXwoOiR7djZTZWd9KXsxLDN9fDopfGAgK1xuICAgIGAoPzoke3Y2U2VnfTopezN9KD86KDoke3Y2U2VnfSl7MCwyfToke3Y0U3RyfXwoOiR7djZTZWd9KXsxLDR9fDopfGAgK1xuICAgIGAoPzoke3Y2U2VnfTopezJ9KD86KDoke3Y2U2VnfSl7MCwzfToke3Y0U3RyfXwoOiR7djZTZWd9KXsxLDV9fDopfGAgK1xuICAgIGAoPzoke3Y2U2VnfTopezF9KD86KDoke3Y2U2VnfSl7MCw0fToke3Y0U3RyfXwoOiR7djZTZWd9KXsxLDZ9fDopfGAgK1xuICAgIGAoPzo6KCg/Ojoke3Y2U2VnfSl7MCw1fToke3Y0U3RyfXwoPzo6JHt2NlNlZ30pezEsN318OikpYCArXG4gICAgXCIpKCVbMC05YS16QS1aLS46XXsxLH0pPyRcIixcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lQdjQoaXA6IHN0cmluZykge1xuICByZXR1cm4gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmNhbGwoSVB2NFJlZywgaXApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJUHY2KGlwOiBzdHJpbmcpIHtcbiAgcmV0dXJuIFJlZ0V4cC5wcm90b3R5cGUudGVzdC5jYWxsKElQdjZSZWcsIGlwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSVAoaXA6IHN0cmluZykge1xuICBpZiAoaXNJUHY0KGlwKSkge1xuICAgIHJldHVybiA0O1xuICB9XG4gIGlmIChpc0lQdjYoaXApKSB7XG4gICAgcmV0dXJuIDY7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VTeW5jV3JpdGUoZmQ6IG51bWJlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKFxuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgdGhpczogYW55LFxuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgY2h1bms6IGFueSxcbiAgICBlbmM6IHN0cmluZyxcbiAgICBjYjogKGVycj86IEVycm9yKSA9PiB2b2lkLFxuICApIHtcbiAgICBpZiAoZW5jICE9PSBcImJ1ZmZlclwiKSB7XG4gICAgICBjaHVuayA9IEJ1ZmZlci5mcm9tKGNodW5rLCBlbmMpO1xuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZS5ieXRlc1dyaXR0ZW4gKz0gY2h1bmsubGVuZ3RoO1xuXG4gICAgY29uc3QgY3R4OiB7IGVycm5vPzogbnVtYmVyIH0gPSB7fTtcbiAgICB3cml0ZUJ1ZmZlcihmZCwgY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgbnVsbCwgY3R4KTtcblxuICAgIGlmIChjdHguZXJybm8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZXggPSB1dkV4Y2VwdGlvbihjdHgpO1xuICAgICAgZXguZXJybm8gPSBjdHguZXJybm87XG5cbiAgICAgIHJldHVybiBjYihleCk7XG4gICAgfVxuXG4gICAgY2IoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZWRBcmdzU3ltYm9sID0gU3ltYm9sKFwibm9ybWFsaXplZEFyZ3NcIik7XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8qIENvcHlyaWdodCAxOTk4IGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LlxuICpcbiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXNcbiAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXRcbiAqIGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodFxuICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nXG4gKiBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW5cbiAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGVcbiAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi5cbiAqIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mXG4gKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkIFwiYXMgaXNcIlxuICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuXG4gKi9cblxuLy8gUkVGOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvZGVwcy9jYXJlcy9pbmNsdWRlL2FyZXMuaCNMMTkwXG5cbmV4cG9ydCBjb25zdCBBUkVTX0FJX0NBTk9OTkFNRSA9IDEgPDwgMDtcbmV4cG9ydCBjb25zdCBBUkVTX0FJX05VTUVSSUNIT1NUID0gMSA8PCAxO1xuZXhwb3J0IGNvbnN0IEFSRVNfQUlfUEFTU0lWRSA9IDEgPDwgMjtcbmV4cG9ydCBjb25zdCBBUkVTX0FJX05VTUVSSUNTRVJWID0gMSA8PCAzO1xuZXhwb3J0IGNvbnN0IEFJX1Y0TUFQUEVEID0gMSA8PCA0O1xuZXhwb3J0IGNvbnN0IEFJX0FMTCA9IDEgPDwgNTtcbmV4cG9ydCBjb25zdCBBSV9BRERSQ09ORklHID0gMSA8PCA2O1xuZXhwb3J0IGNvbnN0IEFSRVNfQUlfTk9TT1JUID0gMSA8PCA3O1xuZXhwb3J0IGNvbnN0IEFSRVNfQUlfRU5WSE9TVFMgPSAxIDw8IDg7XG5cbi8vIFJFRjogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL2RlcHMvY2FyZXMvc3JjL2xpYi9hcmVzX3N0cmVycm9yLmNcblxuZXhwb3J0IGZ1bmN0aW9uIGFyZXNfc3RyZXJyb3IoY29kZTogbnVtYmVyKSB7XG4gIC8qIFJldHVybiBhIHN0cmluZyBsaXRlcmFsIGZyb20gYSB0YWJsZS4gKi9cbiAgY29uc3QgZXJyb3JUZXh0ID0gW1xuICAgIFwiU3VjY2Vzc2Z1bCBjb21wbGV0aW9uXCIsXG4gICAgXCJETlMgc2VydmVyIHJldHVybmVkIGFuc3dlciB3aXRoIG5vIGRhdGFcIixcbiAgICBcIkROUyBzZXJ2ZXIgY2xhaW1zIHF1ZXJ5IHdhcyBtaXNmb3JtYXR0ZWRcIixcbiAgICBcIkROUyBzZXJ2ZXIgcmV0dXJuZWQgZ2VuZXJhbCBmYWlsdXJlXCIsXG4gICAgXCJEb21haW4gbmFtZSBub3QgZm91bmRcIixcbiAgICBcIkROUyBzZXJ2ZXIgZG9lcyBub3QgaW1wbGVtZW50IHJlcXVlc3RlZCBvcGVyYXRpb25cIixcbiAgICBcIkROUyBzZXJ2ZXIgcmVmdXNlZCBxdWVyeVwiLFxuICAgIFwiTWlzZm9ybWF0dGVkIEROUyBxdWVyeVwiLFxuICAgIFwiTWlzZm9ybWF0dGVkIGRvbWFpbiBuYW1lXCIsXG4gICAgXCJVbnN1cHBvcnRlZCBhZGRyZXNzIGZhbWlseVwiLFxuICAgIFwiTWlzZm9ybWF0dGVkIEROUyByZXBseVwiLFxuICAgIFwiQ291bGQgbm90IGNvbnRhY3QgRE5TIHNlcnZlcnNcIixcbiAgICBcIlRpbWVvdXQgd2hpbGUgY29udGFjdGluZyBETlMgc2VydmVyc1wiLFxuICAgIFwiRW5kIG9mIGZpbGVcIixcbiAgICBcIkVycm9yIHJlYWRpbmcgZmlsZVwiLFxuICAgIFwiT3V0IG9mIG1lbW9yeVwiLFxuICAgIFwiQ2hhbm5lbCBpcyBiZWluZyBkZXN0cm95ZWRcIixcbiAgICBcIk1pc2Zvcm1hdHRlZCBzdHJpbmdcIixcbiAgICBcIklsbGVnYWwgZmxhZ3Mgc3BlY2lmaWVkXCIsXG4gICAgXCJHaXZlbiBob3N0bmFtZSBpcyBub3QgbnVtZXJpY1wiLFxuICAgIFwiSWxsZWdhbCBoaW50cyBmbGFncyBzcGVjaWZpZWRcIixcbiAgICBcImMtYXJlcyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIG5vdCB5ZXQgcGVyZm9ybWVkXCIsXG4gICAgXCJFcnJvciBsb2FkaW5nIGlwaGxwYXBpLmRsbFwiLFxuICAgIFwiQ291bGQgbm90IGZpbmQgR2V0TmV0d29ya1BhcmFtcyBmdW5jdGlvblwiLFxuICAgIFwiRE5TIHF1ZXJ5IGNhbmNlbGxlZFwiLFxuICBdO1xuXG4gIGlmIChjb2RlID49IDAgJiYgY29kZSA8IGVycm9yVGV4dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gZXJyb3JUZXh0W2NvZGVdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgTm9kZS5qcyBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBub3RJbXBsZW1lbnRlZCB9IGZyb20gXCIuLi9fdXRpbHMudHNcIjtcblxuZXhwb3J0IHsgdGltaW5nU2FmZUVxdWFsIH0gZnJvbSBcIi4vX3RpbWluZ1NhZmVFcXVhbC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmlwc0NyeXB0bygpOiBib29sZWFuIHtcbiAgbm90SW1wbGVtZW50ZWQoXCJjcnlwdG8uZ2V0Rmlwc0NyeXB0b1wiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpcHNDcnlwdG8oX2ZpcHM6IGJvb2xlYW4pIHtcbiAgbm90SW1wbGVtZW50ZWQoXCJjcnlwdG8uc2V0Rmlwc0NyeXB0b1wiKTtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiLi4vdGVzdGluZy9hc3NlcnRzLnRzXCI7XG5cbi8qKiBDb21wYXJlIHRvIGFycmF5IGJ1ZmZlcnMgb3IgZGF0YSB2aWV3cyBpbiBhIHdheSB0aGF0IHRpbWluZyBiYXNlZCBhdHRhY2tzXG4gKiBjYW5ub3QgZ2FpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGxhdGZvcm0uICovXG5leHBvcnQgZnVuY3Rpb24gdGltaW5nU2FmZUVxdWFsKFxuICBhOiBBcnJheUJ1ZmZlclZpZXcgfCBBcnJheUJ1ZmZlckxpa2UgfCBEYXRhVmlldyxcbiAgYjogQXJyYXlCdWZmZXJWaWV3IHwgQXJyYXlCdWZmZXJMaWtlIHwgRGF0YVZpZXcsXG4pOiBib29sZWFuIHtcbiAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghKGEgaW5zdGFuY2VvZiBEYXRhVmlldykpIHtcbiAgICBhID0gbmV3IERhdGFWaWV3KEFycmF5QnVmZmVyLmlzVmlldyhhKSA/IGEuYnVmZmVyIDogYSk7XG4gIH1cbiAgaWYgKCEoYiBpbnN0YW5jZW9mIERhdGFWaWV3KSkge1xuICAgIGIgPSBuZXcgRGF0YVZpZXcoQXJyYXlCdWZmZXIuaXNWaWV3KGIpID8gYi5idWZmZXIgOiBiKTtcbiAgfVxuICBhc3NlcnQoYSBpbnN0YW5jZW9mIERhdGFWaWV3KTtcbiAgYXNzZXJ0KGIgaW5zdGFuY2VvZiBEYXRhVmlldyk7XG4gIGNvbnN0IGxlbmd0aCA9IGEuYnl0ZUxlbmd0aDtcbiAgbGV0IG91dCA9IDA7XG4gIGxldCBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBsZW5ndGgpIHtcbiAgICBvdXQgfD0gYS5nZXRVaW50OChpKSBeIGIuZ2V0VWludDgoaSk7XG4gIH1cbiAgcmV0dXJuIG91dCA9PT0gMDtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIi4uL2J1ZmZlci50c1wiO1xuaW1wb3J0IHsgdGltaW5nU2FmZUVxdWFsIGFzIHN0ZFRpbWluZ1NhZmVFcXVhbCB9IGZyb20gXCIuLi8uLi9jcnlwdG8vdGltaW5nX3NhZmVfZXF1YWwudHNcIjtcblxuZXhwb3J0IGNvbnN0IHRpbWluZ1NhZmVFcXVhbCA9IChcbiAgYTogQnVmZmVyIHwgRGF0YVZpZXcgfCBBcnJheUJ1ZmZlcixcbiAgYjogQnVmZmVyIHwgRGF0YVZpZXcgfCBBcnJheUJ1ZmZlcixcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoYSBpbnN0YW5jZW9mIEJ1ZmZlcikgYSA9IG5ldyBEYXRhVmlldyhhLmJ1ZmZlcik7XG4gIGlmIChhIGluc3RhbmNlb2YgQnVmZmVyKSBiID0gbmV3IERhdGFWaWV3KGEuYnVmZmVyKTtcbiAgcmV0dXJuIHN0ZFRpbWluZ1NhZmVFcXVhbChhLCBiKTtcbn07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5leHBvcnQge307XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5leHBvcnQge307XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5leHBvcnQge307XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5leHBvcnQge307XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5leHBvcnQge307XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gVGhpcyBtb2R1bGUgcG9ydHM6XG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvcGlwZV93cmFwLmNjXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvcGlwZV93cmFwLmhcblxuaW1wb3J0IHsgbm90SW1wbGVtZW50ZWQgfSBmcm9tIFwiLi4vX3V0aWxzLnRzXCI7XG5pbXBvcnQgeyB1bnJlYWNoYWJsZSB9IGZyb20gXCIuLi8uLi90ZXN0aW5nL2Fzc2VydHMudHNcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25XcmFwIH0gZnJvbSBcIi4vY29ubmVjdGlvbl93cmFwLnRzXCI7XG5pbXBvcnQgeyBBc3luY1dyYXAsIHByb3ZpZGVyVHlwZSB9IGZyb20gXCIuL2FzeW5jX3dyYXAudHNcIjtcbmltcG9ydCB7IExpYnV2U3RyZWFtV3JhcCB9IGZyb20gXCIuL3N0cmVhbV93cmFwLnRzXCI7XG5pbXBvcnQgeyBjb2RlTWFwIH0gZnJvbSBcIi4vdXYudHNcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcIi4uLy4uL2FzeW5jL21vZC50c1wiO1xuaW1wb3J0IHsga1N0cmVhbUJhc2VGaWVsZCB9IGZyb20gXCIuL3N0cmVhbV93cmFwLnRzXCI7XG5pbXBvcnQge1xuICBjZWlsUG93T2YyLFxuICBJTklUSUFMX0FDQ0VQVF9CQUNLT0ZGX0RFTEFZLFxuICBNQVhfQUNDRVBUX0JBQ0tPRkZfREVMQVksXG59IGZyb20gXCIuL19saXN0ZW4udHNcIjtcbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gXCIuLi8uLi9fdXRpbC9vcy50c1wiO1xuaW1wb3J0IHsgZnMgfSBmcm9tIFwiLi9jb25zdGFudHMudHNcIjtcbmltcG9ydCAqIGFzIERlbm9VbnN0YWJsZSBmcm9tIFwiLi4vLi4vX2Rlbm9fdW5zdGFibGUudHNcIjtcblxuZXhwb3J0IGVudW0gc29ja2V0VHlwZSB7XG4gIFNPQ0tFVCxcbiAgU0VSVkVSLFxuICBJUEMsXG59XG5cbmV4cG9ydCBjbGFzcyBQaXBlIGV4dGVuZHMgQ29ubmVjdGlvbldyYXAge1xuICBvdmVycmlkZSByZWFkaW5nID0gZmFsc2U7XG4gIGlwYzogYm9vbGVhbjtcblxuICAvLyBSRUY6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9kZXBzL3V2L3NyYy93aW4vcGlwZS5jI0w0OFxuICAjcGVuZGluZ0luc3RhbmNlcyA9IDQ7XG5cbiAgI2FkZHJlc3M/OiBzdHJpbmc7XG5cbiAgI2JhY2tsb2c/OiBudW1iZXI7XG4gICNsaXN0ZW5lciE6IERlbm8uTGlzdGVuZXI7XG4gICNjb25uZWN0aW9ucyA9IDA7XG5cbiAgI2Nsb3NlZCA9IGZhbHNlO1xuICAjYWNjZXB0QmFja29mZkRlbGF5PzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHR5cGU6IG51bWJlciwgY29ubj86IERlbm8uVW5peENvbm4pIHtcbiAgICBsZXQgcHJvdmlkZXI6IHByb3ZpZGVyVHlwZTtcbiAgICBsZXQgaXBjOiBib29sZWFuO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIHNvY2tldFR5cGUuU09DS0VUOiB7XG4gICAgICAgIHByb3ZpZGVyID0gcHJvdmlkZXJUeXBlLlBJUEVXUkFQO1xuICAgICAgICBpcGMgPSBmYWxzZTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2Ugc29ja2V0VHlwZS5TRVJWRVI6IHtcbiAgICAgICAgcHJvdmlkZXIgPSBwcm92aWRlclR5cGUuUElQRVNFUlZFUldSQVA7XG4gICAgICAgIGlwYyA9IGZhbHNlO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBzb2NrZXRUeXBlLklQQzoge1xuICAgICAgICBwcm92aWRlciA9IHByb3ZpZGVyVHlwZS5QSVBFV1JBUDtcbiAgICAgICAgaXBjID0gdHJ1ZTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdW5yZWFjaGFibGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcihwcm92aWRlciwgY29ubik7XG5cbiAgICB0aGlzLmlwYyA9IGlwYztcblxuICAgIGlmIChjb25uICYmIHByb3ZpZGVyID09PSBwcm92aWRlclR5cGUuUElQRVdSQVApIHtcbiAgICAgIGNvbnN0IGxvY2FsQWRkciA9IGNvbm4ubG9jYWxBZGRyIGFzIERlbm8uVW5peEFkZHI7XG4gICAgICB0aGlzLiNhZGRyZXNzID0gbG9jYWxBZGRyLnBhdGg7XG4gICAgfVxuICB9XG5cbiAgb3BlbihfZmQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gUkVGOiBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvNjUyOVxuICAgIG5vdEltcGxlbWVudGVkKFwiUGlwZS5wcm90b3R5cGUub3BlblwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHRvIGEgVW5peCBkb21haW4gb3IgV2luZG93cyBuYW1lZCBwaXBlLlxuICAgKiBAcGFyYW0gbmFtZSBVbml4IGRvbWFpbiBvciBXaW5kb3dzIG5hbWVkIHBpcGUgdGhlIHNlcnZlciBzaG91bGQgbGlzdGVuIHRvLlxuICAgKiBAcmV0dXJuIEFuIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgKi9cbiAgYmluZChuYW1lOiBzdHJpbmcpIHtcbiAgICAvLyBEZW5vIGRvZXNuJ3QgY3VycmVudGx5IHNlcGFyYXRlIGJpbmQgZnJvbSBjb25uZWN0LiBGb3Igbm93IHdlIG5vb3AgdW5kZXJcbiAgICAvLyB0aGUgYXNzdW1wdGlvbiB3ZSB3aWxsIGNvbm5lY3Qgc2hvcnRseS5cbiAgICAvLyBSRUY6IGh0dHBzOi8vZG9jLmRlbm8ubGFuZC9kZW5vL3Vuc3RhYmxlL34vRGVuby5jb25uZWN0XG5cbiAgICB0aGlzLiNhZGRyZXNzID0gbmFtZTtcblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3QgdG8gYSBVbml4IGRvbWFpbiBvciBXaW5kb3dzIG5hbWVkIHBpcGUuXG4gICAqIEBwYXJhbSByZXEgQSBQaXBlQ29ubmVjdFdyYXAgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBhZGRyZXNzIFVuaXggZG9tYWluIG9yIFdpbmRvd3MgbmFtZWQgcGlwZSB0aGUgc2VydmVyIHNob3VsZCBjb25uZWN0IHRvLlxuICAgKiBAcmV0dXJuIEFuIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgKi9cbiAgY29ubmVjdChyZXE6IFBpcGVDb25uZWN0V3JhcCwgYWRkcmVzczogc3RyaW5nKSB7XG4gICAgaWYgKGlzV2luZG93cykge1xuICAgICAgLy8gUkVGOiBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMTAyNDRcbiAgICAgIG5vdEltcGxlbWVudGVkKFwiUGlwZS5wcm90b3R5cGUuY29ubmVjdCAtIFdpbmRvd3NcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY29ubmVjdE9wdGlvbnM6IERlbm9VbnN0YWJsZS5Vbml4Q29ubmVjdE9wdGlvbnMgPSB7XG4gICAgICBwYXRoOiBhZGRyZXNzLFxuICAgICAgdHJhbnNwb3J0OiBcInVuaXhcIixcbiAgICB9O1xuXG4gICAgRGVub1Vuc3RhYmxlLmNvbm5lY3QoY29ubmVjdE9wdGlvbnMpLnRoZW4oXG4gICAgICAoY29ubjogRGVuby5Vbml4Q29ubikgPT4ge1xuICAgICAgICBjb25zdCBsb2NhbEFkZHIgPSBjb25uLmxvY2FsQWRkciBhcyBEZW5vLlVuaXhBZGRyO1xuXG4gICAgICAgIHRoaXMuI2FkZHJlc3MgPSByZXEuYWRkcmVzcyA9IGxvY2FsQWRkci5wYXRoO1xuICAgICAgICB0aGlzW2tTdHJlYW1CYXNlRmllbGRdID0gY29ubjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuYWZ0ZXJDb25uZWN0KHJlcSwgMCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIHN3YWxsb3cgY2FsbGJhY2sgZXJyb3JzLlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGUpID0+IHtcbiAgICAgICAgLy8gVE9ETyhjbW9ydGVuKTogY29ycmVjdCBtYXBwaW5nIG9mIGNvbm5lY3Rpb24gZXJyb3IgdG8gc3RhdHVzIGNvZGUuXG4gICAgICAgIGxldCBjb2RlOiBudW1iZXI7XG5cbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZCkge1xuICAgICAgICAgIGNvZGUgPSBjb2RlTWFwLmdldChcIkVOT0VOVFwiKSE7XG4gICAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLlBlcm1pc3Npb25EZW5pZWQpIHtcbiAgICAgICAgICBjb2RlID0gY29kZU1hcC5nZXQoXCJFQUNDRVNcIikhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvZGUgPSBjb2RlTWFwLmdldChcIkVDT05OUkVGVVNFRFwiKSE7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuYWZ0ZXJDb25uZWN0KHJlcSwgY29kZSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIHN3YWxsb3cgY2FsbGJhY2sgZXJyb3JzLlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gZm9yIG5ldyBjb25uZWN0aW9ucy5cbiAgICogQHBhcmFtIGJhY2tsb2cgVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBxdWV1ZSBvZiBwZW5kaW5nIGNvbm5lY3Rpb25zLlxuICAgKiBAcmV0dXJuIEFuIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgKi9cbiAgbGlzdGVuKGJhY2tsb2c6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGlzV2luZG93cykge1xuICAgICAgLy8gUkVGOiBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMTAyNDRcbiAgICAgIG5vdEltcGxlbWVudGVkKFwiUGlwZS5wcm90b3R5cGUubGlzdGVuIC0gV2luZG93c1wiKTtcbiAgICB9XG5cbiAgICB0aGlzLiNiYWNrbG9nID0gaXNXaW5kb3dzXG4gICAgICA/IHRoaXMuI3BlbmRpbmdJbnN0YW5jZXNcbiAgICAgIDogY2VpbFBvd09mMihiYWNrbG9nICsgMSk7XG5cbiAgICBjb25zdCBsaXN0ZW5PcHRpb25zID0ge1xuICAgICAgcGF0aDogdGhpcy4jYWRkcmVzcyEsXG4gICAgICB0cmFuc3BvcnQ6IFwidW5peFwiIGFzIGNvbnN0LFxuICAgIH07XG5cbiAgICBsZXQgbGlzdGVuZXI7XG5cbiAgICB0cnkge1xuICAgICAgbGlzdGVuZXIgPSBEZW5vVW5zdGFibGUubGlzdGVuKGxpc3Rlbk9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQWRkckluVXNlKSB7XG4gICAgICAgIHJldHVybiBjb2RlTWFwLmdldChcIkVBRERSSU5VU0VcIikhO1xuICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQWRkck5vdEF2YWlsYWJsZSkge1xuICAgICAgICByZXR1cm4gY29kZU1hcC5nZXQoXCJFQUREUk5PVEFWQUlMXCIpITtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETyhjbW9ydGVuKTogbWFwIGVycm9ycyB0byBhcHByb3ByaWF0ZSBlcnJvciBjb2Rlcy5cbiAgICAgIHJldHVybiBjb2RlTWFwLmdldChcIlVOS05PV05cIikhO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3MgPSBsaXN0ZW5lci5hZGRyIGFzIERlbm8uVW5peEFkZHI7XG4gICAgdGhpcy4jYWRkcmVzcyA9IGFkZHJlc3MucGF0aDtcblxuICAgIHRoaXMuI2xpc3RlbmVyID0gbGlzdGVuZXI7XG4gICAgdGhpcy4jYWNjZXB0KCk7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIG92ZXJyaWRlIHJlZigpIHtcbiAgICBpZiAodGhpcy4jbGlzdGVuZXIpIHtcbiAgICAgIERlbm9VbnN0YWJsZS5MaXN0ZW5lclJlZih0aGlzLiNsaXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdW5yZWYoKSB7XG4gICAgaWYgKHRoaXMuI2xpc3RlbmVyKSB7XG4gICAgICBEZW5vVW5zdGFibGUuTGlzdGVuZXJVbnJlZih0aGlzLiNsaXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgcGlwZSBpbnN0YW5jZSBoYW5kbGVzIHdoZW4gdGhlIHBpcGUgc2VydmVyIGlzXG4gICAqIHdhaXRpbmcgZm9yIGNvbm5lY3Rpb25zLiBUaGlzIHNldHRpbmcgYXBwbGllcyB0byBXaW5kb3dzIG9ubHkuXG4gICAqIEBwYXJhbSBpbnN0YW5jZXMgTnVtYmVyIG9mIHBlbmRpbmcgcGlwZSBpbnN0YW5jZXMuXG4gICAqL1xuICBzZXRQZW5kaW5nSW5zdGFuY2VzKGluc3RhbmNlczogbnVtYmVyKSB7XG4gICAgdGhpcy4jcGVuZGluZ0luc3RhbmNlcyA9IGluc3RhbmNlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbHRlcnMgcGlwZSBwZXJtaXNzaW9ucywgYWxsb3dpbmcgaXQgdG8gYmUgYWNjZXNzZWQgZnJvbSBwcm9jZXNzZXMgcnVuIGJ5XG4gICAqIGRpZmZlcmVudCB1c2Vycy4gTWFrZXMgdGhlIHBpcGUgd3JpdGFibGUgb3IgcmVhZGFibGUgYnkgYWxsIHVzZXJzLiBNb2RlXG4gICAqIGNhbiBiZSBgVVZfV1JJVEFCTEVgLCBgVVZfUkVBREFCTEVgIG9yIGBVVl9XUklUQUJMRSB8IFVWX1JFQURBQkxFYC4gVGhpc1xuICAgKiBmdW5jdGlvbiBpcyBibG9ja2luZy5cbiAgICogQHBhcmFtIG1vZGUgUGlwZSBwZXJtaXNzaW9ucyBtb2RlLlxuICAgKiBAcmV0dXJuIEFuIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgKi9cbiAgZmNobW9kKG1vZGU6IG51bWJlcikge1xuICAgIGlmIChcbiAgICAgIG1vZGUgIT0gY29uc3RhbnRzLlVWX1JFQURBQkxFICYmXG4gICAgICBtb2RlICE9IGNvbnN0YW50cy5VVl9XUklUQUJMRSAmJlxuICAgICAgbW9kZSAhPSAoY29uc3RhbnRzLlVWX1dSSVRBQkxFIHwgY29uc3RhbnRzLlVWX1JFQURBQkxFKVxuICAgICkge1xuICAgICAgcmV0dXJuIGNvZGVNYXAuZ2V0KFwiRUlOVkFMXCIpO1xuICAgIH1cblxuICAgIGxldCBkZXNpcmVkX21vZGUgPSAwO1xuXG4gICAgaWYgKG1vZGUgJiBjb25zdGFudHMuVVZfUkVBREFCTEUpIHtcbiAgICAgIGRlc2lyZWRfbW9kZSB8PSBmcy5TX0lSVVNSIHwgZnMuU19JUkdSUCB8IGZzLlNfSVJPVEg7XG4gICAgfVxuICAgIGlmIChtb2RlICYgY29uc3RhbnRzLlVWX1dSSVRBQkxFKSB7XG4gICAgICBkZXNpcmVkX21vZGUgfD0gZnMuU19JV1VTUiB8IGZzLlNfSVdHUlAgfCBmcy5TX0lXT1RIO1xuICAgIH1cblxuICAgIC8vIFRPRE8oY21vcnRlbik6IHRoaXMgd2lsbCBpbmNvcnJlY3RseSB0aHJvdyBvbiBXaW5kb3dzXG4gICAgLy8gUkVGOiBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvNDM1N1xuICAgIHRyeSB7XG4gICAgICBEZW5vLmNobW9kU3luYyh0aGlzLiNhZGRyZXNzISwgZGVzaXJlZF9tb2RlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFRPRE8oY21vcnRlbik6IG1hcCBlcnJvcnMgdG8gYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMuXG4gICAgICByZXR1cm4gY29kZU1hcC5nZXQoXCJVTktOT1dOXCIpITtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8qKiBIYW5kbGUgYmFja29mZiBkZWxheXMgZm9sbG93aW5nIGFuIHVuc3VjY2Vzc2Z1bCBhY2NlcHQuICovXG4gIGFzeW5jICNhY2NlcHRCYWNrb2ZmKCkge1xuICAgIC8vIEJhY2tvZmYgYWZ0ZXIgdHJhbnNpZW50IGVycm9ycyB0byBhbGxvdyB0aW1lIGZvciB0aGUgc3lzdGVtIHRvXG4gICAgLy8gcmVjb3ZlciwgYW5kIGF2b2lkIGJsb2NraW5nIHVwIHRoZSBldmVudCBsb29wIHdpdGggYSBjb250aW51b3VzbHlcbiAgICAvLyBydW5uaW5nIGxvb3AuXG4gICAgaWYgKCF0aGlzLiNhY2NlcHRCYWNrb2ZmRGVsYXkpIHtcbiAgICAgIHRoaXMuI2FjY2VwdEJhY2tvZmZEZWxheSA9IElOSVRJQUxfQUNDRVBUX0JBQ0tPRkZfREVMQVk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2FjY2VwdEJhY2tvZmZEZWxheSAqPSAyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiNhY2NlcHRCYWNrb2ZmRGVsYXkgPj0gTUFYX0FDQ0VQVF9CQUNLT0ZGX0RFTEFZKSB7XG4gICAgICB0aGlzLiNhY2NlcHRCYWNrb2ZmRGVsYXkgPSBNQVhfQUNDRVBUX0JBQ0tPRkZfREVMQVk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGVsYXkodGhpcy4jYWNjZXB0QmFja29mZkRlbGF5KTtcblxuICAgIHRoaXMuI2FjY2VwdCgpO1xuICB9XG5cbiAgLyoqIEFjY2VwdCBuZXcgY29ubmVjdGlvbnMuICovXG4gIGFzeW5jICNhY2NlcHQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuI2Nsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLiNjb25uZWN0aW9ucyA+IHRoaXMuI2JhY2tsb2chKSB7XG4gICAgICB0aGlzLiNhY2NlcHRCYWNrb2ZmKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29ubmVjdGlvbjogRGVuby5Db25uO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbm5lY3Rpb24gPSBhd2FpdCB0aGlzLiNsaXN0ZW5lci5hY2NlcHQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlICYmIHRoaXMuI2Nsb3NlZCkge1xuICAgICAgICAvLyBMaXN0ZW5lciBhbmQgc2VydmVyIGhhcyBjbG9zZWQuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVE9ETyhjbW9ydGVuKTogbWFwIGVycm9ycyB0byBhcHByb3ByaWF0ZSBlcnJvciBjb2Rlcy5cbiAgICAgICAgdGhpcy5vbmNvbm5lY3Rpb24hKGNvZGVNYXAuZ2V0KFwiVU5LTk9XTlwiKSEsIHVuZGVmaW5lZCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gc3dhbGxvdyBjYWxsYmFjayBlcnJvcnMuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2FjY2VwdEJhY2tvZmYoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IHRoZSBiYWNrb2ZmIGRlbGF5IHVwb24gc3VjY2Vzc2Z1bCBhY2NlcHQuXG4gICAgdGhpcy4jYWNjZXB0QmFja29mZkRlbGF5ID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29ubmVjdGlvbkhhbmRsZSA9IG5ldyBQaXBlKHNvY2tldFR5cGUuU09DS0VULCBjb25uZWN0aW9uKTtcbiAgICB0aGlzLiNjb25uZWN0aW9ucysrO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub25jb25uZWN0aW9uISgwLCBjb25uZWN0aW9uSGFuZGxlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHN3YWxsb3cgY2FsbGJhY2sgZXJyb3JzLlxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNhY2NlcHQoKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGUgc2VydmVyIGNsb3N1cmUuICovXG4gIG92ZXJyaWRlIF9vbkNsb3NlKCk6IG51bWJlciB7XG4gICAgdGhpcy4jY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuI2FkZHJlc3MgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLiNiYWNrbG9nID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI2Nvbm5lY3Rpb25zID0gMDtcbiAgICB0aGlzLiNhY2NlcHRCYWNrb2ZmRGVsYXkgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5wcm92aWRlciA9PT0gcHJvdmlkZXJUeXBlLlBJUEVTRVJWRVJXUkFQKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLiNsaXN0ZW5lci5jbG9zZSgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGxpc3RlbmVyIGFscmVhZHkgY2xvc2VkXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIExpYnV2U3RyZWFtV3JhcC5wcm90b3R5cGUuX29uQ2xvc2UuY2FsbCh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGlwZUNvbm5lY3RXcmFwIGV4dGVuZHMgQXN5bmNXcmFwIHtcbiAgb25jb21wbGV0ZSE6IChcbiAgICBzdGF0dXM6IG51bWJlcixcbiAgICBoYW5kbGU6IENvbm5lY3Rpb25XcmFwLFxuICAgIHJlcTogUGlwZUNvbm5lY3RXcmFwLFxuICAgIHJlYWRhYmxlOiBib29sZWFuLFxuICAgIHdyaXRlYWJsZTogYm9vbGVhbixcbiAgKSA9PiB2b2lkO1xuICBhZGRyZXNzITogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKHByb3ZpZGVyVHlwZS5QSVBFQ09OTkVDVFdSQVApO1xuICB9XG59XG5cbmV4cG9ydCBlbnVtIGNvbnN0YW50cyB7XG4gIFNPQ0tFVCA9IHNvY2tldFR5cGUuU09DS0VULFxuICBTRVJWRVIgPSBzb2NrZXRUeXBlLlNFUlZFUixcbiAgSVBDID0gc29ja2V0VHlwZS5JUEMsXG4gIFVWX1JFQURBQkxFID0gMSxcbiAgVVZfV1JJVEFCTEUgPSAyLFxufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gVGhpcyBtb2R1bGUgcG9ydHM6XG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvc3RyZWFtX2Jhc2UtaW5sLmhcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL3NyYy9zdHJlYW1fYmFzZS5oXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvc3RyZWFtX2Jhc2UuY2Ncbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL3NyYy9zdHJlYW1fd3JhcC5oXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvc3RyZWFtX3dyYXAuY2NcblxuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIi4uL2J1ZmZlci50c1wiO1xuaW1wb3J0IHsgbm90SW1wbGVtZW50ZWQgfSBmcm9tIFwiLi4vX3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBIYW5kbGVXcmFwIH0gZnJvbSBcIi4vaGFuZGxlX3dyYXAudHNcIjtcbmltcG9ydCB7IEFzeW5jV3JhcCwgcHJvdmlkZXJUeXBlIH0gZnJvbSBcIi4vYXN5bmNfd3JhcC50c1wiO1xuaW1wb3J0IHsgY29kZU1hcCB9IGZyb20gXCIuL3V2LnRzXCI7XG5pbXBvcnQgeyB3cml0ZUFsbCB9IGZyb20gXCIuLi8uLi9zdHJlYW1zL2NvbnZlcnNpb24udHNcIjtcblxuZW51bSBTdHJlYW1CYXNlU3RhdGVGaWVsZHMge1xuICBrUmVhZEJ5dGVzT3JFcnJvcixcbiAga0FycmF5QnVmZmVyT2Zmc2V0LFxuICBrQnl0ZXNXcml0dGVuLFxuICBrTGFzdFdyaXRlV2FzQXN5bmMsXG4gIGtOdW1TdHJlYW1CYXNlU3RhdGVGaWVsZHMsXG59XG5cbmV4cG9ydCBjb25zdCBrUmVhZEJ5dGVzT3JFcnJvciA9IFN0cmVhbUJhc2VTdGF0ZUZpZWxkcy5rUmVhZEJ5dGVzT3JFcnJvcjtcbmV4cG9ydCBjb25zdCBrQXJyYXlCdWZmZXJPZmZzZXQgPSBTdHJlYW1CYXNlU3RhdGVGaWVsZHMua0FycmF5QnVmZmVyT2Zmc2V0O1xuZXhwb3J0IGNvbnN0IGtCeXRlc1dyaXR0ZW4gPSBTdHJlYW1CYXNlU3RhdGVGaWVsZHMua0J5dGVzV3JpdHRlbjtcbmV4cG9ydCBjb25zdCBrTGFzdFdyaXRlV2FzQXN5bmMgPSBTdHJlYW1CYXNlU3RhdGVGaWVsZHMua0xhc3RXcml0ZVdhc0FzeW5jO1xuZXhwb3J0IGNvbnN0IGtOdW1TdHJlYW1CYXNlU3RhdGVGaWVsZHMgPVxuICBTdHJlYW1CYXNlU3RhdGVGaWVsZHMua051bVN0cmVhbUJhc2VTdGF0ZUZpZWxkcztcblxuZXhwb3J0IGNvbnN0IHN0cmVhbUJhc2VTdGF0ZSA9IG5ldyBVaW50OEFycmF5KDUpO1xuXG4vLyBUaGlzIGlzIERlbm8sIGl0IGFsd2F5cyB3aWxsIGJlIGFzeW5jLlxuc3RyZWFtQmFzZVN0YXRlW2tMYXN0V3JpdGVXYXNBc3luY10gPSAxO1xuXG5leHBvcnQgY2xhc3MgV3JpdGVXcmFwPEggZXh0ZW5kcyBIYW5kbGVXcmFwPiBleHRlbmRzIEFzeW5jV3JhcCB7XG4gIGhhbmRsZSE6IEg7XG4gIG9uY29tcGxldGUhOiAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG4gIGFzeW5jITogYm9vbGVhbjtcbiAgYnl0ZXMhOiBudW1iZXI7XG4gIGJ1ZmZlciE6IHVua25vd247XG4gIGNhbGxiYWNrITogdW5rbm93bjtcbiAgX2NodW5rcyE6IHVua25vd25bXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihwcm92aWRlclR5cGUuV1JJVEVXUkFQKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2h1dGRvd25XcmFwPEggZXh0ZW5kcyBIYW5kbGVXcmFwPiBleHRlbmRzIEFzeW5jV3JhcCB7XG4gIGhhbmRsZSE6IEg7XG4gIG9uY29tcGxldGUhOiAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG4gIGNhbGxiYWNrITogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihwcm92aWRlclR5cGUuU0hVVERPV05XUkFQKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qga1N0cmVhbUJhc2VGaWVsZCA9IFN5bWJvbChcImtTdHJlYW1CYXNlRmllbGRcIik7XG5cbmNvbnN0IFNVR0dFU1RFRF9TSVpFID0gNjQgKiAxMDI0O1xuXG5leHBvcnQgY2xhc3MgTGlidXZTdHJlYW1XcmFwIGV4dGVuZHMgSGFuZGxlV3JhcCB7XG4gIFtrU3RyZWFtQmFzZUZpZWxkXT86IERlbm8uUmVhZGVyICYgRGVuby5Xcml0ZXIgJiBEZW5vLkNsb3NlcjtcblxuICByZWFkaW5nITogYm9vbGVhbjtcbiAgI3JlYWRpbmcgPSBmYWxzZTtcbiAgZGVzdHJveWVkID0gZmFsc2U7XG4gIHdyaXRlUXVldWVTaXplID0gMDtcbiAgYnl0ZXNSZWFkID0gMDtcbiAgYnl0ZXNXcml0dGVuID0gMDtcblxuICBvbnJlYWQhOiAoX2FycmF5QnVmZmVyOiBVaW50OEFycmF5LCBfbnJlYWQ6IG51bWJlcikgPT4gVWludDhBcnJheSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm92aWRlcjogcHJvdmlkZXJUeXBlLFxuICAgIHN0cmVhbT86IERlbm8uUmVhZGVyICYgRGVuby5Xcml0ZXIgJiBEZW5vLkNsb3NlcixcbiAgKSB7XG4gICAgc3VwZXIocHJvdmlkZXIpO1xuICAgIHRoaXMuI2F0dGFjaFRvT2JqZWN0KHN0cmVhbSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIHJlYWRpbmcgb2YgdGhlIHN0cmVhbS5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIHJlYWRTdGFydCgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy4jcmVhZGluZykge1xuICAgICAgdGhpcy4jcmVhZGluZyA9IHRydWU7XG4gICAgICB0aGlzLiNyZWFkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCB0aGUgcmVhZGluZyBvZiB0aGUgc3RyZWFtLlxuICAgKiBAcmV0dXJuIEFuIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgKi9cbiAgcmVhZFN0b3AoKTogbnVtYmVyIHtcbiAgICB0aGlzLiNyZWFkaW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaHV0ZG93biB0aGUgc3RyZWFtLlxuICAgKiBAcGFyYW0gcmVxIEEgc2h1dGRvd24gcmVxdWVzdCB3cmFwcGVyLlxuICAgKiBAcmV0dXJuIEFuIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgKi9cbiAgc2h1dGRvd24ocmVxOiBTaHV0ZG93bldyYXA8TGlidXZTdHJlYW1XcmFwPik6IG51bWJlciB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fb25DbG9zZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlcS5vbmNvbXBsZXRlKHN0YXR1cyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBzd2FsbG93IGNhbGxiYWNrIGVycm9yLlxuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB1c2VyQnVmXG4gICAqIEByZXR1cm4gQW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAqL1xuICB1c2VVc2VyQnVmZmVyKF91c2VyQnVmOiB1bmtub3duKTogbnVtYmVyIHtcbiAgICAvLyBUT0RPKGNtb3J0ZW4pXG4gICAgbm90SW1wbGVtZW50ZWQoXCJMaWJ1dlN0cmVhbVdyYXAucHJvdG90eXBlLnVzZVVzZXJCdWZmZXJcIik7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgYSBidWZmZXIgdG8gdGhlIHN0cmVhbS5cbiAgICogQHBhcmFtIHJlcSBBIHdyaXRlIHJlcXVlc3Qgd3JhcHBlci5cbiAgICogQHBhcmFtIGRhdGEgVGhlIFVpbnQ4QXJyYXkgYnVmZmVyIHRvIHdyaXRlIHRvIHRoZSBzdHJlYW0uXG4gICAqIEByZXR1cm4gQW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAqL1xuICB3cml0ZUJ1ZmZlcihyZXE6IFdyaXRlV3JhcDxMaWJ1dlN0cmVhbVdyYXA+LCBkYXRhOiBVaW50OEFycmF5KTogbnVtYmVyIHtcbiAgICB0aGlzLiN3cml0ZShyZXEsIGRhdGEpO1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgbXVsdGlwbGUgY2h1bmtzIGF0IG9uY2UuXG4gICAqIEBwYXJhbSByZXEgQSB3cml0ZSByZXF1ZXN0IHdyYXBwZXIuXG4gICAqIEBwYXJhbSBjaHVua3NcbiAgICogQHBhcmFtIGFsbEJ1ZmZlcnNcbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIHdyaXRldihcbiAgICByZXE6IFdyaXRlV3JhcDxMaWJ1dlN0cmVhbVdyYXA+LFxuICAgIGNodW5rczogQnVmZmVyW10gfCAoc3RyaW5nIHwgQnVmZmVyKVtdLFxuICAgIGFsbEJ1ZmZlcnM6IGJvb2xlYW4sXG4gICk6IG51bWJlciB7XG4gICAgY29uc3QgY291bnQgPSBhbGxCdWZmZXJzID8gY2h1bmtzLmxlbmd0aCA6IGNodW5rcy5sZW5ndGggPj4gMTtcbiAgICBjb25zdCBidWZmZXJzOiBCdWZmZXJbXSA9IG5ldyBBcnJheShjb3VudCk7XG5cbiAgICBpZiAoIWFsbEJ1ZmZlcnMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpICogMl07XG5cbiAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykpIHtcbiAgICAgICAgICBidWZmZXJzW2ldID0gY2h1bms7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdHJpbmcgY2h1bmtcbiAgICAgICAgY29uc3QgZW5jb2Rpbmc6IHN0cmluZyA9IGNodW5rc1tpICogMiArIDFdIGFzIHN0cmluZztcbiAgICAgICAgYnVmZmVyc1tpXSA9IEJ1ZmZlci5mcm9tKGNodW5rIGFzIHN0cmluZywgZW5jb2RpbmcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgYnVmZmVyc1tpXSA9IGNodW5rc1tpXSBhcyBCdWZmZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMud3JpdGVCdWZmZXIocmVxLCBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSBhbiBBU0NJSSBzdHJpbmcgdG8gdGhlIHN0cmVhbS5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIHdyaXRlQXNjaWlTdHJpbmcocmVxOiBXcml0ZVdyYXA8TGlidXZTdHJlYW1XcmFwPiwgZGF0YTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy53cml0ZUJ1ZmZlcihyZXEsIGJ1ZmZlcik7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgYW4gVVRGOCBzdHJpbmcgdG8gdGhlIHN0cmVhbS5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIHdyaXRlVXRmOFN0cmluZyhyZXE6IFdyaXRlV3JhcDxMaWJ1dlN0cmVhbVdyYXA+LCBkYXRhOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkYXRhKTtcblxuICAgIHJldHVybiB0aGlzLndyaXRlQnVmZmVyKHJlcSwgYnVmZmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSBhbiBVQ1MyIHN0cmluZyB0byB0aGUgc3RyZWFtLlxuICAgKiBAcmV0dXJuIEFuIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgKi9cbiAgd3JpdGVVY3MyU3RyaW5nKF9yZXE6IFdyaXRlV3JhcDxMaWJ1dlN0cmVhbVdyYXA+LCBfZGF0YTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBub3RJbXBsZW1lbnRlZChcIkxpYnV2U3RyZWFtV3JhcC5wcm90b3R5cGUud3JpdGVVY3MyU3RyaW5nXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIGFuIExBVElOMSBzdHJpbmcgdG8gdGhlIHN0cmVhbS5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIHdyaXRlTGF0aW4xU3RyaW5nKHJlcTogV3JpdGVXcmFwPExpYnV2U3RyZWFtV3JhcD4sIGRhdGE6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSwgXCJsYXRpbjFcIik7XG4gICAgcmV0dXJuIHRoaXMud3JpdGVCdWZmZXIocmVxLCBidWZmZXIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgX29uQ2xvc2UoKTogbnVtYmVyIHtcbiAgICBsZXQgc3RhdHVzID0gMDtcbiAgICB0aGlzLiNyZWFkaW5nID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgdGhpc1trU3RyZWFtQmFzZUZpZWxkXT8uY2xvc2UoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHN0YXR1cyA9IGNvZGVNYXAuZ2V0KFwiRU5PVENPTk5cIikhO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICAvKipcbiAgICogQXR0YWNoZXMgdGhlIGNsYXNzIHRvIHRoZSB1bmRlcmx5aW5nIHN0cmVhbS5cbiAgICogQHBhcmFtIHN0cmVhbSBUaGUgc3RyZWFtIHRvIGF0dGFjaCB0by5cbiAgICovXG4gICNhdHRhY2hUb09iamVjdChzdHJlYW0/OiBEZW5vLlJlYWRlciAmIERlbm8uV3JpdGVyICYgRGVuby5DbG9zZXIpIHtcbiAgICB0aGlzW2tTdHJlYW1CYXNlRmllbGRdID0gc3RyZWFtO1xuICB9XG5cbiAgLyoqIEludGVybmFsIG1ldGhvZCBmb3IgcmVhZGluZyBmcm9tIHRoZSBhdHRhY2hlZCBzdHJlYW0uICovXG4gIGFzeW5jICNyZWFkKCkge1xuICAgIGxldCBidWYgPSBuZXcgVWludDhBcnJheShTVUdHRVNURURfU0laRSk7XG5cbiAgICBsZXQgbnJlYWQ6IG51bWJlciB8IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIG5yZWFkID0gYXdhaXQgdGhpc1trU3RyZWFtQmFzZUZpZWxkXSEucmVhZChidWYpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkludGVycnVwdGVkIHx8XG4gICAgICAgIGUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5CYWRSZXNvdXJjZVxuICAgICAgKSB7XG4gICAgICAgIG5yZWFkID0gY29kZU1hcC5nZXQoXCJFT0ZcIikhO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkNvbm5lY3Rpb25SZXNldCB8fFxuICAgICAgICBlIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQ29ubmVjdGlvbkFib3J0ZWRcbiAgICAgICkge1xuICAgICAgICBucmVhZCA9IGNvZGVNYXAuZ2V0KFwiRUNPTk5SRVNFVFwiKSE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBucmVhZCA9IGNvZGVNYXAuZ2V0KFwiVU5LTk9XTlwiKSE7XG4gICAgICB9XG5cbiAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgIH1cblxuICAgIG5yZWFkID8/PSBjb2RlTWFwLmdldChcIkVPRlwiKSE7XG5cbiAgICBzdHJlYW1CYXNlU3RhdGVba1JlYWRCeXRlc09yRXJyb3JdID0gbnJlYWQ7XG5cbiAgICBpZiAobnJlYWQgPiAwKSB7XG4gICAgICB0aGlzLmJ5dGVzUmVhZCArPSBucmVhZDtcbiAgICB9XG5cbiAgICBidWYgPSBidWYuc2xpY2UoMCwgbnJlYWQpO1xuXG4gICAgc3RyZWFtQmFzZVN0YXRlW2tBcnJheUJ1ZmZlck9mZnNldF0gPSAwO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub25yZWFkIShidWYsIG5yZWFkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHN3YWxsb3cgY2FsbGJhY2sgZXJyb3JzLlxuICAgIH1cblxuICAgIGlmIChucmVhZCA+PSAwICYmIHRoaXMuI3JlYWRpbmcpIHtcbiAgICAgIHRoaXMuI3JlYWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgbWV0aG9kIGZvciB3cml0aW5nIHRvIHRoZSBhdHRhY2hlZCBzdHJlYW0uXG4gICAqIEBwYXJhbSByZXEgQSB3cml0ZSByZXF1ZXN0IHdyYXBwZXIuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBVaW50OEFycmF5IGJ1ZmZlciB0byB3cml0ZSB0byB0aGUgc3RyZWFtLlxuICAgKi9cbiAgYXN5bmMgI3dyaXRlKHJlcTogV3JpdGVXcmFwPExpYnV2U3RyZWFtV3JhcD4sIGRhdGE6IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCB7IGJ5dGVMZW5ndGggfSA9IGRhdGE7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgd3JpdGVBbGwodGhpc1trU3RyZWFtQmFzZUZpZWxkXSEsIGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxldCBzdGF0dXM6IG51bWJlcjtcblxuICAgICAgLy8gVE9ETyhjbW9ydGVuKTogbWFwIGVyciB0byBzdGF0dXMgY29kZXNcbiAgICAgIGlmIChcbiAgICAgICAgZSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlIHx8XG4gICAgICAgIGUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ccm9rZW5QaXBlXG4gICAgICApIHtcbiAgICAgICAgc3RhdHVzID0gY29kZU1hcC5nZXQoXCJFQkFERlwiKSE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0dXMgPSBjb2RlTWFwLmdldChcIlVOS05PV05cIikhO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXEub25jb21wbGV0ZShzdGF0dXMpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIHN3YWxsb3cgY2FsbGJhY2sgZXJyb3JzLlxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RyZWFtQmFzZVN0YXRlW2tCeXRlc1dyaXR0ZW5dID0gYnl0ZUxlbmd0aDtcbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiArPSBieXRlTGVuZ3RoO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlcS5vbmNvbXBsZXRlKDApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gc3dhbGxvdyBjYWxsYmFjayBlcnJvcnMuXG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBUaGlzIG1vZHVsZSBwb3J0czpcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL3NyYy9oYW5kbGVfd3JhcC5jY1xuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvc3JjL2hhbmRsZV93cmFwLmhcblxuaW1wb3J0IHsgdW5yZWFjaGFibGUgfSBmcm9tIFwiLi4vLi4vdGVzdGluZy9hc3NlcnRzLnRzXCI7XG5pbXBvcnQgeyBBc3luY1dyYXAsIHByb3ZpZGVyVHlwZSB9IGZyb20gXCIuL2FzeW5jX3dyYXAudHNcIjtcblxuZXhwb3J0IGNsYXNzIEhhbmRsZVdyYXAgZXh0ZW5kcyBBc3luY1dyYXAge1xuICBjb25zdHJ1Y3Rvcihwcm92aWRlcjogcHJvdmlkZXJUeXBlKSB7XG4gICAgc3VwZXIocHJvdmlkZXIpO1xuICB9XG5cbiAgY2xvc2UoY2I6ICgpID0+IHZvaWQgPSAoKSA9PiB7fSkge1xuICAgIHRoaXMuX29uQ2xvc2UoKTtcbiAgICBjYigpO1xuICB9XG5cbiAgcmVmKCkge1xuICAgIHVucmVhY2hhYmxlKCk7XG4gIH1cblxuICB1bnJlZigpIHtcbiAgICB1bnJlYWNoYWJsZSgpO1xuICB9XG5cbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgX29uQ2xvc2UoKTogYW55IHt9XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vLyBUaGlzIG1vZHVsZSBwb3J0czpcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL3NyYy9jb25uZWN0aW9uX3dyYXAuY2Ncbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFzdGVyL3NyYy9jb25uZWN0aW9uX3dyYXAuaFxuXG5pbXBvcnQgeyBMaWJ1dlN0cmVhbVdyYXAgfSBmcm9tIFwiLi9zdHJlYW1fd3JhcC50c1wiO1xuaW1wb3J0IHsgQXN5bmNXcmFwLCBwcm92aWRlclR5cGUgfSBmcm9tIFwiLi9hc3luY193cmFwLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uV3JhcCBleHRlbmRzIExpYnV2U3RyZWFtV3JhcCB7XG4gIC8qKiBPcHRpb25hbCBjb25uZWN0aW9uIGNhbGxiYWNrLiAqL1xuICBvbmNvbm5lY3Rpb246ICgoc3RhdHVzOiBudW1iZXIsIGhhbmRsZT86IENvbm5lY3Rpb25XcmFwKSA9PiB2b2lkKSB8IG51bGwgPVxuICAgIG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQ29ubmVjdGlvbldyYXAgY2xhc3MgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBwcm92aWRlciBQcm92aWRlciB0eXBlLlxuICAgKiBAcGFyYW0gb2JqZWN0IE9wdGlvbmFsIHN0cmVhbSBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm92aWRlcjogcHJvdmlkZXJUeXBlLFxuICAgIG9iamVjdD86IERlbm8uUmVhZGVyICYgRGVuby5Xcml0ZXIgJiBEZW5vLkNsb3NlcixcbiAgKSB7XG4gICAgc3VwZXIocHJvdmlkZXIsIG9iamVjdCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHJlcSBBIGNvbm5lY3QgcmVxdWVzdC5cbiAgICogQHBhcmFtIHN0YXR1cyBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIGFmdGVyQ29ubmVjdDxcbiAgICBUIGV4dGVuZHMgQXN5bmNXcmFwICYge1xuICAgICAgb25jb21wbGV0ZShcbiAgICAgICAgc3RhdHVzOiBudW1iZXIsXG4gICAgICAgIGhhbmRsZTogQ29ubmVjdGlvbldyYXAsXG4gICAgICAgIHJlcTogVCxcbiAgICAgICAgcmVhZGFibGU6IGJvb2xlYW4sXG4gICAgICAgIHdyaXRlYWJsZTogYm9vbGVhbixcbiAgICAgICk6IHZvaWQ7XG4gICAgfSxcbiAgPihcbiAgICByZXE6IFQsXG4gICAgc3RhdHVzOiBudW1iZXIsXG4gICkge1xuICAgIGNvbnN0IGlzU3VjY2Vzc1N0YXR1cyA9ICFzdGF0dXM7XG4gICAgY29uc3QgcmVhZGFibGUgPSBpc1N1Y2Nlc3NTdGF0dXM7XG4gICAgY29uc3Qgd3JpdGFibGUgPSBpc1N1Y2Nlc3NTdGF0dXM7XG5cbiAgICB0cnkge1xuICAgICAgcmVxLm9uY29tcGxldGUoc3RhdHVzLCB0aGlzLCByZXEsIHJlYWRhYmxlLCB3cml0YWJsZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBzd2FsbG93IGNhbGxiYWNrIGVycm9ycy5cbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLyoqXG4gKiBAcGFyYW0gbiBOdW1iZXIgdG8gYWN0IG9uLlxuICogQHJldHVybiBUaGUgbnVtYmVyIHJvdW5kZWQgdXAgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgMi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNlaWxQb3dPZjIobjogbnVtYmVyKSB7XG4gIGNvbnN0IHJvdW5kUG93T2YyID0gMSA8PCAoMzEgLSBNYXRoLmNsejMyKG4pKTtcblxuICByZXR1cm4gcm91bmRQb3dPZjIgPCBuID8gcm91bmRQb3dPZjIgKiAyIDogcm91bmRQb3dPZjI7XG59XG5cbi8qKiBJbml0aWFsIGJhY2tvZmYgZGVsYXkgb2YgNW1zIGZvbGxvd2luZyBhIHRlbXBvcmFyeSBhY2NlcHQgZmFpbHVyZS4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX0FDQ0VQVF9CQUNLT0ZGX0RFTEFZID0gNTtcblxuLyoqIE1heCBiYWNrb2ZmIGRlbGF5IG9mIDFzIGZvbGxvd2luZyBhIHRlbXBvcmFyeSBhY2NlcHQgZmFpbHVyZS4gKi9cbmV4cG9ydCBjb25zdCBNQVhfQUNDRVBUX0JBQ0tPRkZfREVMQVkgPSAxMDAwO1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5leHBvcnQge307XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5leHBvcnQge307XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gVGhpcyBtb2R1bGUgcG9ydHM6XG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvbm9kZV9zeW1ib2xzLmNjXG5cbmV4cG9ydCBjb25zdCBhc3luY0lkU3ltYm9sOiB1bmlxdWUgc3ltYm9sID0gU3ltYm9sKFwiYXN5bmNJZFN5bWJvbFwiKTtcbmV4cG9ydCBjb25zdCBvd25lclN5bWJvbDogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbChcIm93bmVyU3ltYm9sXCIpO1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIFRoaXMgbW9kdWxlIHBvcnRzOlxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvc3JjL3RjcF93cmFwLmNjXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21hc3Rlci9zcmMvdGNwX3dyYXAuaFxuXG5pbXBvcnQgeyBub3RJbXBsZW1lbnRlZCB9IGZyb20gXCIuLi9fdXRpbHMudHNcIjtcbmltcG9ydCB7IHVucmVhY2hhYmxlIH0gZnJvbSBcIi4uLy4uL3Rlc3RpbmcvYXNzZXJ0cy50c1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbldyYXAgfSBmcm9tIFwiLi9jb25uZWN0aW9uX3dyYXAudHNcIjtcbmltcG9ydCB7IEFzeW5jV3JhcCwgcHJvdmlkZXJUeXBlIH0gZnJvbSBcIi4vYXN5bmNfd3JhcC50c1wiO1xuaW1wb3J0IHsgTGlidXZTdHJlYW1XcmFwIH0gZnJvbSBcIi4vc3RyZWFtX3dyYXAudHNcIjtcbmltcG9ydCB7IG93bmVyU3ltYm9sIH0gZnJvbSBcIi4vc3ltYm9scy50c1wiO1xuaW1wb3J0IHsgY29kZU1hcCB9IGZyb20gXCIuL3V2LnRzXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCIuLi8uLi9hc3luYy9tb2QudHNcIjtcbmltcG9ydCB7IGtTdHJlYW1CYXNlRmllbGQgfSBmcm9tIFwiLi9zdHJlYW1fd3JhcC50c1wiO1xuaW1wb3J0IHsgaXNJUCB9IGZyb20gXCIuLi9pbnRlcm5hbC9uZXQudHNcIjtcbmltcG9ydCB7XG4gIGNlaWxQb3dPZjIsXG4gIElOSVRJQUxfQUNDRVBUX0JBQ0tPRkZfREVMQVksXG4gIE1BWF9BQ0NFUFRfQkFDS09GRl9ERUxBWSxcbn0gZnJvbSBcIi4vX2xpc3Rlbi50c1wiO1xuaW1wb3J0ICogYXMgRGVub1Vuc3RhYmxlIGZyb20gXCIuLi8uLi9fZGVub191bnN0YWJsZS50c1wiO1xuXG4vKiogVGhlIHR5cGUgb2YgVENQIHNvY2tldC4gKi9cbmVudW0gc29ja2V0VHlwZSB7XG4gIFNPQ0tFVCxcbiAgU0VSVkVSLFxufVxuXG5pbnRlcmZhY2UgQWRkcmVzc0luZm8ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGZhbWlseT86IG51bWJlcjtcbiAgcG9ydDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVENQQ29ubmVjdFdyYXAgZXh0ZW5kcyBBc3luY1dyYXAge1xuICBvbmNvbXBsZXRlITogKFxuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIGhhbmRsZTogQ29ubmVjdGlvbldyYXAsXG4gICAgcmVxOiBUQ1BDb25uZWN0V3JhcCxcbiAgICByZWFkYWJsZTogYm9vbGVhbixcbiAgICB3cml0ZWFibGU6IGJvb2xlYW4sXG4gICkgPT4gdm9pZDtcbiAgYWRkcmVzcyE6IHN0cmluZztcbiAgcG9ydCE6IG51bWJlcjtcbiAgbG9jYWxBZGRyZXNzITogc3RyaW5nO1xuICBsb2NhbFBvcnQhOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIocHJvdmlkZXJUeXBlLlRDUENPTk5FQ1RXUkFQKTtcbiAgfVxufVxuXG5leHBvcnQgZW51bSBjb25zdGFudHMge1xuICBTT0NLRVQgPSBzb2NrZXRUeXBlLlNPQ0tFVCxcbiAgU0VSVkVSID0gc29ja2V0VHlwZS5TRVJWRVIsXG4gIFVWX1RDUF9JUFY2T05MWSxcbn1cblxuZXhwb3J0IGNsYXNzIFRDUCBleHRlbmRzIENvbm5lY3Rpb25XcmFwIHtcbiAgW293bmVyU3ltYm9sXTogdW5rbm93biA9IG51bGw7XG4gIG92ZXJyaWRlIHJlYWRpbmcgPSBmYWxzZTtcblxuICAjYWRkcmVzcz86IHN0cmluZztcbiAgI3BvcnQ/OiBudW1iZXI7XG5cbiAgI3JlbW90ZUFkZHJlc3M/OiBzdHJpbmc7XG4gICNyZW1vdGVGYW1pbHk/OiBudW1iZXI7XG4gICNyZW1vdGVQb3J0PzogbnVtYmVyO1xuXG4gICNiYWNrbG9nPzogbnVtYmVyO1xuICAjbGlzdGVuZXIhOiBEZW5vLkxpc3RlbmVyO1xuICAjY29ubmVjdGlvbnMgPSAwO1xuXG4gICNjbG9zZWQgPSBmYWxzZTtcbiAgI2FjY2VwdEJhY2tvZmZEZWxheT86IG51bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBUQ1AgY2xhc3MgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB0eXBlIFRoZSBzb2NrZXQgdHlwZS5cbiAgICogQHBhcmFtIGNvbm4gT3B0aW9uYWwgY29ubmVjdGlvbiBvYmplY3QgdG8gd3JhcC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHR5cGU6IG51bWJlciwgY29ubj86IERlbm8uQ29ubikge1xuICAgIGxldCBwcm92aWRlcjogcHJvdmlkZXJUeXBlO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIHNvY2tldFR5cGUuU09DS0VUOiB7XG4gICAgICAgIHByb3ZpZGVyID0gcHJvdmlkZXJUeXBlLlRDUFdSQVA7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIHNvY2tldFR5cGUuU0VSVkVSOiB7XG4gICAgICAgIHByb3ZpZGVyID0gcHJvdmlkZXJUeXBlLlRDUFNFUlZFUldSQVA7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHVucmVhY2hhYmxlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3VwZXIocHJvdmlkZXIsIGNvbm4pO1xuXG4gICAgLy8gVE9ETyhjbW9ydGVuKTogdGhlIGhhbmRsaW5nIG9mIG5ldyBjb25uZWN0aW9ucyBhbmQgY29uc3RydWN0aW9uIGZlZWxzXG4gICAgLy8gYSBsaXR0bGUgb2ZmLiBTdXNwZWN0IGR1cGxpY2F0aW5nIGluIHNvbWUgZmFzaGlvbi5cbiAgICBpZiAoY29ubiAmJiBwcm92aWRlciA9PT0gcHJvdmlkZXJUeXBlLlRDUFdSQVApIHtcbiAgICAgIGNvbnN0IGxvY2FsQWRkciA9IGNvbm4ubG9jYWxBZGRyIGFzIERlbm8uTmV0QWRkcjtcbiAgICAgIHRoaXMuI2FkZHJlc3MgPSBsb2NhbEFkZHIuaG9zdG5hbWU7XG4gICAgICB0aGlzLiNwb3J0ID0gbG9jYWxBZGRyLnBvcnQ7XG5cbiAgICAgIGNvbnN0IHJlbW90ZUFkZHIgPSBjb25uLnJlbW90ZUFkZHIgYXMgRGVuby5OZXRBZGRyO1xuICAgICAgdGhpcy4jcmVtb3RlQWRkcmVzcyA9IHJlbW90ZUFkZHIuaG9zdG5hbWU7XG4gICAgICB0aGlzLiNyZW1vdGVQb3J0ID0gcmVtb3RlQWRkci5wb3J0O1xuICAgICAgdGhpcy4jcmVtb3RlRmFtaWx5ID0gaXNJUChyZW1vdGVBZGRyLmhvc3RuYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBmaWxlIGRlc2NyaXB0b3IuXG4gICAqIEBwYXJhbSBmZCBUaGUgZmlsZSBkZXNjcmlwdG9yIHRvIG9wZW4uXG4gICAqIEByZXR1cm4gQW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAqL1xuICBvcGVuKF9mZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBSRUY6IGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vL2lzc3Vlcy82NTI5XG4gICAgbm90SW1wbGVtZW50ZWQoXCJUQ1AucHJvdG90eXBlLm9wZW5cIik7XG4gIH1cblxuICAvKipcbiAgICogQmluZCB0byBhbiBJUHY0IGFkZHJlc3MuXG4gICAqIEBwYXJhbSBhZGRyZXNzIFRoZSBob3N0bmFtZSB0byBiaW5kIHRvLlxuICAgKiBAcGFyYW0gcG9ydCBUaGUgcG9ydCB0byBiaW5kIHRvXG4gICAqIEByZXR1cm4gQW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAqL1xuICBiaW5kKGFkZHJlc3M6IHN0cmluZywgcG9ydDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jYmluZChhZGRyZXNzLCBwb3J0LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHRvIGFuIElQdjYgYWRkcmVzcy5cbiAgICogQHBhcmFtIGFkZHJlc3MgVGhlIGhvc3RuYW1lIHRvIGJpbmQgdG8uXG4gICAqIEBwYXJhbSBwb3J0IFRoZSBwb3J0IHRvIGJpbmQgdG9cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIGJpbmQ2KGFkZHJlc3M6IHN0cmluZywgcG9ydDogbnVtYmVyLCBmbGFnczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jYmluZChhZGRyZXNzLCBwb3J0LCBmbGFncyk7XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCB0byBhbiBJUHY0IGFkZHJlc3MuXG4gICAqIEBwYXJhbSByZXEgQSBUQ1BDb25uZWN0V3JhcCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIGFkZHJlc3MgVGhlIGhvc3RuYW1lIHRvIGNvbm5lY3QgdG8uXG4gICAqIEBwYXJhbSBwb3J0IFRoZSBwb3J0IHRvIGNvbm5lY3QgdG8uXG4gICAqIEByZXR1cm4gQW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAqL1xuICBjb25uZWN0KHJlcTogVENQQ29ubmVjdFdyYXAsIGFkZHJlc3M6IHN0cmluZywgcG9ydDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jY29ubmVjdChyZXEsIGFkZHJlc3MsIHBvcnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3QgdG8gYW4gSVB2NiBhZGRyZXNzLlxuICAgKiBAcGFyYW0gcmVxIEEgVENQQ29ubmVjdFdyYXAgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBhZGRyZXNzIFRoZSBob3N0bmFtZSB0byBjb25uZWN0IHRvLlxuICAgKiBAcGFyYW0gcG9ydCBUaGUgcG9ydCB0byBjb25uZWN0IHRvLlxuICAgKiBAcmV0dXJuIEFuIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgKi9cbiAgY29ubmVjdDYocmVxOiBUQ1BDb25uZWN0V3JhcCwgYWRkcmVzczogc3RyaW5nLCBwb3J0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNjb25uZWN0KHJlcSwgYWRkcmVzcywgcG9ydCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGZvciBuZXcgY29ubmVjdGlvbnMuXG4gICAqIEBwYXJhbSBiYWNrbG9nIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgcXVldWUgb2YgcGVuZGluZyBjb25uZWN0aW9ucy5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIGxpc3RlbihiYWNrbG9nOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRoaXMuI2JhY2tsb2cgPSBjZWlsUG93T2YyKGJhY2tsb2cgKyAxKTtcblxuICAgIGNvbnN0IGxpc3Rlbk9wdGlvbnMgPSB7XG4gICAgICBob3N0bmFtZTogdGhpcy4jYWRkcmVzcyEsXG4gICAgICBwb3J0OiB0aGlzLiNwb3J0ISxcbiAgICAgIHRyYW5zcG9ydDogXCJ0Y3BcIiBhcyBjb25zdCxcbiAgICB9O1xuXG4gICAgbGV0IGxpc3RlbmVyO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxpc3RlbmVyID0gRGVuby5saXN0ZW4obGlzdGVuT3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRySW5Vc2UpIHtcbiAgICAgICAgcmV0dXJuIGNvZGVNYXAuZ2V0KFwiRUFERFJJTlVTRVwiKSE7XG4gICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRyTm90QXZhaWxhYmxlKSB7XG4gICAgICAgIHJldHVybiBjb2RlTWFwLmdldChcIkVBRERSTk9UQVZBSUxcIikhO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPKGNtb3J0ZW4pOiBtYXAgZXJyb3JzIHRvIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzLlxuICAgICAgcmV0dXJuIGNvZGVNYXAuZ2V0KFwiVU5LTk9XTlwiKSE7XG4gICAgfVxuXG4gICAgY29uc3QgYWRkcmVzcyA9IGxpc3RlbmVyLmFkZHIgYXMgRGVuby5OZXRBZGRyO1xuICAgIHRoaXMuI2FkZHJlc3MgPSBhZGRyZXNzLmhvc3RuYW1lO1xuICAgIHRoaXMuI3BvcnQgPSBhZGRyZXNzLnBvcnQ7XG5cbiAgICB0aGlzLiNsaXN0ZW5lciA9IGxpc3RlbmVyO1xuICAgIHRoaXMuI2FjY2VwdCgpO1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBvdmVycmlkZSByZWYoKSB7XG4gICAgaWYgKHRoaXMuI2xpc3RlbmVyKSB7XG4gICAgICBEZW5vVW5zdGFibGUuTGlzdGVuZXJSZWYodGhpcy4jbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHVucmVmKCkge1xuICAgIGlmICh0aGlzLiNsaXN0ZW5lcikge1xuICAgICAgRGVub1Vuc3RhYmxlLkxpc3RlbmVyVW5yZWYodGhpcy4jbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQb3B1bGF0ZXMgdGhlIHByb3ZpZGVkIG9iamVjdCB3aXRoIGxvY2FsIGFkZHJlc3MgZW50cmllcy5cbiAgICogQHBhcmFtIHNvY2tuYW1lIEFuIG9iamVjdCB0byBhZGQgdGhlIGxvY2FsIGFkZHJlc3MgZW50cmllcyB0by5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIGdldHNvY2tuYW1lKHNvY2tuYW1lOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gfCBBZGRyZXNzSW5mbyk6IG51bWJlciB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHRoaXMuI2FkZHJlc3MgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgIHR5cGVvZiB0aGlzLiNwb3J0ID09PSBcInVuZGVmaW5lZFwiXG4gICAgKSB7XG4gICAgICByZXR1cm4gY29kZU1hcC5nZXQoXCJFQUREUk5PVEFWQUlMXCIpITtcbiAgICB9XG5cbiAgICBzb2NrbmFtZS5hZGRyZXNzID0gdGhpcy4jYWRkcmVzcztcbiAgICBzb2NrbmFtZS5wb3J0ID0gdGhpcy4jcG9ydDtcbiAgICBzb2NrbmFtZS5mYW1pbHkgPSBpc0lQKHRoaXMuI2FkZHJlc3MpO1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGVzIHRoZSBwcm92aWRlZCBvYmplY3Qgd2l0aCByZW1vdGUgYWRkcmVzcyBlbnRyaWVzLlxuICAgKiBAcGFyYW0gcGVlcm5hbWUgQW4gb2JqZWN0IHRvIGFkZCB0aGUgcmVtb3RlIGFkZHJlc3MgZW50cmllcyB0by5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIGdldHBlZXJuYW1lKHBlZXJuYW1lOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gfCBBZGRyZXNzSW5mbyk6IG51bWJlciB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIHRoaXMuI3JlbW90ZUFkZHJlc3MgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgIHR5cGVvZiB0aGlzLiNyZW1vdGVQb3J0ID09PSBcInVuZGVmaW5lZFwiXG4gICAgKSB7XG4gICAgICByZXR1cm4gY29kZU1hcC5nZXQoXCJFQUREUk5PVEFWQUlMXCIpITtcbiAgICB9XG5cbiAgICBwZWVybmFtZS5hZGRyZXNzID0gdGhpcy4jcmVtb3RlQWRkcmVzcztcbiAgICBwZWVybmFtZS5wb3J0ID0gdGhpcy4jcmVtb3RlUG9ydDtcbiAgICBwZWVybmFtZS5mYW1pbHkgPSB0aGlzLiNyZW1vdGVGYW1pbHk7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbm9EZWxheVxuICAgKiBAcmV0dXJuIEFuIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgKi9cbiAgc2V0Tm9EZWxheShfbm9EZWxheTogYm9vbGVhbik6IG51bWJlciB7XG4gICAgLy8gVE9ETyhibm9vcmRodWlzKSBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9wdWxsLzEzMTAzXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGVuYWJsZVxuICAgKiBAcGFyYW0gaW5pdGlhbERlbGF5XG4gICAqIEByZXR1cm4gQW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAqL1xuICBzZXRLZWVwQWxpdmUoX2VuYWJsZTogYm9vbGVhbiwgX2luaXRpYWxEZWxheTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBUT0RPKGJub29yZGh1aXMpIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vL3B1bGwvMTMxMDNcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaW5kb3dzIG9ubHkuXG4gICAqXG4gICAqIERlcHJlY2F0ZWQgYnkgTm9kZS5cbiAgICogUkVGOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvbGliL25ldC5qcyNMMTczMVxuICAgKlxuICAgKiBAcGFyYW0gZW5hYmxlXG4gICAqIEByZXR1cm4gQW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzZXRTaW11bHRhbmVvdXNBY2NlcHRzKF9lbmFibGU6IGJvb2xlYW4pIHtcbiAgICAvLyBMb3cgcHJpb3JpdHkgdG8gaW1wbGVtZW50IG93aW5nIHRvIGl0IGJlaW5nIGRlcHJlY2F0ZWQgaW4gTm9kZS5cbiAgICBub3RJbXBsZW1lbnRlZChcIlRDUC5wcm90b3R5cGUuc2V0U2ltdWx0YW5lb3VzQWNjZXB0c1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHRvIGFuIElQdjQgb3IgSVB2NiBhZGRyZXNzLlxuICAgKiBAcGFyYW0gYWRkcmVzcyBUaGUgaG9zdG5hbWUgdG8gYmluZCB0by5cbiAgICogQHBhcmFtIHBvcnQgVGhlIHBvcnQgdG8gYmluZCB0b1xuICAgKiBAcGFyYW0gX2ZsYWdzXG4gICAqIEByZXR1cm4gQW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAqL1xuICAjYmluZChhZGRyZXNzOiBzdHJpbmcsIHBvcnQ6IG51bWJlciwgX2ZsYWdzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIERlbm8gZG9lc24ndCBjdXJyZW50bHkgc2VwYXJhdGUgYmluZCBmcm9tIGNvbm5lY3QgZXRjLlxuICAgIC8vIFJFRjpcbiAgICAvLyAtIGh0dHBzOi8vZG9jLmRlbm8ubGFuZC9kZW5vL3N0YWJsZS9+L0Rlbm8uY29ubmVjdFxuICAgIC8vIC0gaHR0cHM6Ly9kb2MuZGVuby5sYW5kL2Rlbm8vc3RhYmxlL34vRGVuby5saXN0ZW5cbiAgICAvL1xuICAgIC8vIFRoaXMgYWxzbyBtZWFucyB3ZSB3b24ndCBiZSBjb25uZWN0aW5nIGZyb20gdGhlIHNwZWNpZmllZCBsb2NhbCBhZGRyZXNzXG4gICAgLy8gYW5kIHBvcnQgYXMgcHJvdmlkaW5nIHRoZXNlIGlzIG5vdCBhbiBvcHRpb24gaW4gRGVuby5cbiAgICAvLyBSRUY6XG4gICAgLy8gLSBodHRwczovL2RvYy5kZW5vLmxhbmQvZGVuby9zdGFibGUvfi9EZW5vLkNvbm5lY3RPcHRpb25zXG4gICAgLy8gLSBodHRwczovL2RvYy5kZW5vLmxhbmQvZGVuby9zdGFibGUvfi9EZW5vLkxpc3Rlbk9wdGlvbnNcblxuICAgIHRoaXMuI2FkZHJlc3MgPSBhZGRyZXNzO1xuICAgIHRoaXMuI3BvcnQgPSBwb3J0O1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdCB0byBhbiBJUHY0IG9yIElQdjYgYWRkcmVzcy5cbiAgICogQHBhcmFtIHJlcSBBIFRDUENvbm5lY3RXcmFwIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gYWRkcmVzcyBUaGUgaG9zdG5hbWUgdG8gY29ubmVjdCB0by5cbiAgICogQHBhcmFtIHBvcnQgVGhlIHBvcnQgdG8gY29ubmVjdCB0by5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gICNjb25uZWN0KHJlcTogVENQQ29ubmVjdFdyYXAsIGFkZHJlc3M6IHN0cmluZywgcG9ydDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aGlzLiNyZW1vdGVBZGRyZXNzID0gYWRkcmVzcztcbiAgICB0aGlzLiNyZW1vdGVQb3J0ID0gcG9ydDtcbiAgICB0aGlzLiNyZW1vdGVGYW1pbHkgPSBpc0lQKGFkZHJlc3MpO1xuXG4gICAgY29uc3QgY29ubmVjdE9wdGlvbnM6IERlbm8uQ29ubmVjdE9wdGlvbnMgPSB7XG4gICAgICBob3N0bmFtZTogYWRkcmVzcyxcbiAgICAgIHBvcnQsXG4gICAgICB0cmFuc3BvcnQ6IFwidGNwXCIsXG4gICAgfTtcblxuICAgIERlbm8uY29ubmVjdChjb25uZWN0T3B0aW9ucykudGhlbihcbiAgICAgIChjb25uOiBEZW5vLkNvbm4pID0+IHtcbiAgICAgICAgLy8gSW5jb3JyZWN0IC8gYmFja3dhcmRzLCBidXQgY29ycmVjdGluZyB0aGUgbG9jYWwgYWRkcmVzcyBhbmQgcG9ydCB3aXRoXG4gICAgICAgIC8vIHdoYXQgd2FzIGFjdHVhbGx5IHVzZWQgZ2l2ZW4gd2UgY2FuJ3QgYWN0dWFsbHkgc3BlY2lmeSB0aGVzZSBpbiBEZW5vLlxuICAgICAgICBjb25zdCBsb2NhbEFkZHIgPSBjb25uLmxvY2FsQWRkciBhcyBEZW5vLk5ldEFkZHI7XG4gICAgICAgIHRoaXMuI2FkZHJlc3MgPSByZXEubG9jYWxBZGRyZXNzID0gbG9jYWxBZGRyLmhvc3RuYW1lO1xuICAgICAgICB0aGlzLiNwb3J0ID0gcmVxLmxvY2FsUG9ydCA9IGxvY2FsQWRkci5wb3J0O1xuICAgICAgICB0aGlzW2tTdHJlYW1CYXNlRmllbGRdID0gY29ubjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuYWZ0ZXJDb25uZWN0KHJlcSwgMCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIHN3YWxsb3cgY2FsbGJhY2sgZXJyb3JzLlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRPRE8oY21vcnRlbik6IGNvcnJlY3QgbWFwcGluZyBvZiBjb25uZWN0aW9uIGVycm9yIHRvIHN0YXR1cyBjb2RlLlxuICAgICAgICAgIHRoaXMuYWZ0ZXJDb25uZWN0KHJlcSwgY29kZU1hcC5nZXQoXCJFQ09OTlJFRlVTRURcIikhKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gc3dhbGxvdyBjYWxsYmFjayBlcnJvcnMuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqIEhhbmRsZSBiYWNrb2ZmIGRlbGF5cyBmb2xsb3dpbmcgYW4gdW5zdWNjZXNzZnVsIGFjY2VwdC4gKi9cbiAgYXN5bmMgI2FjY2VwdEJhY2tvZmYoKSB7XG4gICAgLy8gQmFja29mZiBhZnRlciB0cmFuc2llbnQgZXJyb3JzIHRvIGFsbG93IHRpbWUgZm9yIHRoZSBzeXN0ZW0gdG9cbiAgICAvLyByZWNvdmVyLCBhbmQgYXZvaWQgYmxvY2tpbmcgdXAgdGhlIGV2ZW50IGxvb3Agd2l0aCBhIGNvbnRpbnVvdXNseVxuICAgIC8vIHJ1bm5pbmcgbG9vcC5cbiAgICBpZiAoIXRoaXMuI2FjY2VwdEJhY2tvZmZEZWxheSkge1xuICAgICAgdGhpcy4jYWNjZXB0QmFja29mZkRlbGF5ID0gSU5JVElBTF9BQ0NFUFRfQkFDS09GRl9ERUxBWTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jYWNjZXB0QmFja29mZkRlbGF5ICo9IDI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2FjY2VwdEJhY2tvZmZEZWxheSA+PSBNQVhfQUNDRVBUX0JBQ0tPRkZfREVMQVkpIHtcbiAgICAgIHRoaXMuI2FjY2VwdEJhY2tvZmZEZWxheSA9IE1BWF9BQ0NFUFRfQkFDS09GRl9ERUxBWTtcbiAgICB9XG5cbiAgICBhd2FpdCBkZWxheSh0aGlzLiNhY2NlcHRCYWNrb2ZmRGVsYXkpO1xuXG4gICAgdGhpcy4jYWNjZXB0KCk7XG4gIH1cblxuICAvKiogQWNjZXB0IG5ldyBjb25uZWN0aW9ucy4gKi9cbiAgYXN5bmMgI2FjY2VwdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy4jY2xvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2Nvbm5lY3Rpb25zID4gdGhpcy4jYmFja2xvZyEpIHtcbiAgICAgIHRoaXMuI2FjY2VwdEJhY2tvZmYoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjb25uZWN0aW9uOiBEZW5vLkNvbm47XG5cbiAgICB0cnkge1xuICAgICAgY29ubmVjdGlvbiA9IGF3YWl0IHRoaXMuI2xpc3RlbmVyLmFjY2VwdCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQmFkUmVzb3VyY2UgJiYgdGhpcy4jY2xvc2VkKSB7XG4gICAgICAgIC8vIExpc3RlbmVyIGFuZCBzZXJ2ZXIgaGFzIGNsb3NlZC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBUT0RPKGNtb3J0ZW4pOiBtYXAgZXJyb3JzIHRvIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzLlxuICAgICAgICB0aGlzLm9uY29ubmVjdGlvbiEoY29kZU1hcC5nZXQoXCJVTktOT1dOXCIpISwgdW5kZWZpbmVkKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBzd2FsbG93IGNhbGxiYWNrIGVycm9ycy5cbiAgICAgIH1cblxuICAgICAgdGhpcy4jYWNjZXB0QmFja29mZigpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgdGhlIGJhY2tvZmYgZGVsYXkgdXBvbiBzdWNjZXNzZnVsIGFjY2VwdC5cbiAgICB0aGlzLiNhY2NlcHRCYWNrb2ZmRGVsYXkgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjb25uZWN0aW9uSGFuZGxlID0gbmV3IFRDUChzb2NrZXRUeXBlLlNPQ0tFVCwgY29ubmVjdGlvbik7XG4gICAgdGhpcy4jY29ubmVjdGlvbnMrKztcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLm9uY29ubmVjdGlvbiEoMCwgY29ubmVjdGlvbkhhbmRsZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBzd2FsbG93IGNhbGxiYWNrIGVycm9ycy5cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jYWNjZXB0KCk7XG4gIH1cblxuICAvKiogSGFuZGxlIHNlcnZlciBjbG9zdXJlLiAqL1xuICBvdmVycmlkZSBfb25DbG9zZSgpOiBudW1iZXIge1xuICAgIHRoaXMuI2Nsb3NlZCA9IHRydWU7XG4gICAgdGhpcy5yZWFkaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLiNhZGRyZXNzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI3BvcnQgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLiNyZW1vdGVBZGRyZXNzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI3JlbW90ZUZhbWlseSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLiNyZW1vdGVQb3J0ID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy4jYmFja2xvZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLiNjb25uZWN0aW9ucyA9IDA7XG4gICAgdGhpcy4jYWNjZXB0QmFja29mZkRlbGF5ID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucHJvdmlkZXIgPT09IHByb3ZpZGVyVHlwZS5UQ1BTRVJWRVJXUkFQKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLiNsaXN0ZW5lci5jbG9zZSgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGxpc3RlbmVyIGFscmVhZHkgY2xvc2VkXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIExpYnV2U3RyZWFtV3JhcC5wcm90b3R5cGUuX29uQ2xvc2UuY2FsbCh0aGlzKTtcbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5leHBvcnQge307XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IEFzeW5jV3JhcCwgcHJvdmlkZXJUeXBlIH0gZnJvbSBcIi4vYXN5bmNfd3JhcC50c1wiO1xuaW1wb3J0IHsgR2V0QWRkckluZm9SZXFXcmFwIH0gZnJvbSBcIi4vY2FyZXNfd3JhcC50c1wiO1xuaW1wb3J0IHsgSGFuZGxlV3JhcCB9IGZyb20gXCIuL2hhbmRsZV93cmFwLnRzXCI7XG5pbXBvcnQgeyBvd25lclN5bWJvbCB9IGZyb20gXCIuL3N5bWJvbHMudHNcIjtcbmltcG9ydCB7IGNvZGVNYXAsIGVycm9yTWFwIH0gZnJvbSBcIi4vdXYudHNcIjtcbmltcG9ydCB7IG5vdEltcGxlbWVudGVkIH0gZnJvbSBcIi4uL191dGlscy50c1wiO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcIi4uL2J1ZmZlci50c1wiO1xuaW1wb3J0IHR5cGUgeyBFcnJub0V4Y2VwdGlvbiB9IGZyb20gXCIuLi9pbnRlcm5hbC9lcnJvcnMudHNcIjtcbmltcG9ydCB7IGlzSVAgfSBmcm9tIFwiLi4vaW50ZXJuYWwvbmV0LnRzXCI7XG5pbXBvcnQgKiBhcyBEZW5vVW5zdGFibGUgZnJvbSBcIi4uLy4uL19kZW5vX3Vuc3RhYmxlLnRzXCI7XG5pbXBvcnQgeyBpc0xpbnV4LCBpc1dpbmRvd3MgfSBmcm9tIFwiLi4vLi4vX3V0aWwvb3MudHNcIjtcblxudHlwZSBNZXNzYWdlVHlwZSA9IHN0cmluZyB8IFVpbnQ4QXJyYXkgfCBCdWZmZXIgfCBEYXRhVmlldztcblxuY29uc3QgQUZfSU5FVCA9IDI7XG5jb25zdCBBRl9JTkVUNiA9IDEwO1xuXG5jb25zdCBVRFBfREdSQU1fTUFYU0laRSA9IDY0ICogMTAyNDtcblxuZXhwb3J0IGNsYXNzIFNlbmRXcmFwIGV4dGVuZHMgQXN5bmNXcmFwIHtcbiAgbGlzdCE6IE1lc3NhZ2VUeXBlW107XG4gIGFkZHJlc3MhOiBzdHJpbmc7XG4gIHBvcnQhOiBudW1iZXI7XG5cbiAgY2FsbGJhY2shOiAoZXJyb3I6IEVycm5vRXhjZXB0aW9uIHwgbnVsbCwgYnl0ZXM/OiBudW1iZXIpID0+IHZvaWQ7XG4gIG9uY29tcGxldGUhOiAoZXJyOiBudW1iZXIgfCBudWxsLCBzZW50PzogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKHByb3ZpZGVyVHlwZS5VRFBTRU5EV1JBUCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVEUCBleHRlbmRzIEhhbmRsZVdyYXAge1xuICBbb3duZXJTeW1ib2xdOiB1bmtub3duID0gbnVsbDtcblxuICAjYWRkcmVzcz86IHN0cmluZztcbiAgI2ZhbWlseT86IHN0cmluZztcbiAgI3BvcnQ/OiBudW1iZXI7XG5cbiAgI3JlbW90ZUFkZHJlc3M/OiBzdHJpbmc7XG4gICNyZW1vdGVGYW1pbHk/OiBzdHJpbmc7XG4gICNyZW1vdGVQb3J0PzogbnVtYmVyO1xuXG4gICNsaXN0ZW5lcj86IERlbm9VbnN0YWJsZS5EYXRhZ3JhbUNvbm47XG4gICNyZWNlaXZpbmcgPSBmYWxzZTtcblxuICAjcmVjdkJ1ZmZlclNpemUgPSBVRFBfREdSQU1fTUFYU0laRTtcbiAgI3NlbmRCdWZmZXJTaXplID0gVURQX0RHUkFNX01BWFNJWkU7XG5cbiAgb25tZXNzYWdlITogKFxuICAgIG5yZWFkOiBudW1iZXIsXG4gICAgaGFuZGxlOiBVRFAsXG4gICAgYnVmPzogQnVmZmVyLFxuICAgIHJpbmZvPzoge1xuICAgICAgYWRkcmVzczogc3RyaW5nO1xuICAgICAgZmFtaWx5OiBcIklQdjRcIiB8IFwiSVB2NlwiO1xuICAgICAgcG9ydDogbnVtYmVyO1xuICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICB9LFxuICApID0+IHZvaWQ7XG5cbiAgbG9va3VwITogKFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBjYWxsYmFjazogKFxuICAgICAgZXJyOiBFcnJub0V4Y2VwdGlvbiB8IG51bGwsXG4gICAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgICBmYW1pbHk6IG51bWJlcixcbiAgICApID0+IHZvaWQsXG4gICkgPT4gR2V0QWRkckluZm9SZXFXcmFwIHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKHByb3ZpZGVyVHlwZS5VRFBXUkFQKTtcbiAgfVxuXG4gIGFkZE1lbWJlcnNoaXAoX211bHRpY2FzdEFkZHJlc3M6IHN0cmluZywgX2ludGVyZmFjZUFkZHJlc3M/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIG5vdEltcGxlbWVudGVkKFwidWRwLlVEUC5wcm90b3R5cGUuYWRkTWVtYmVyc2hpcFwiKTtcbiAgfVxuXG4gIGFkZFNvdXJjZVNwZWNpZmljTWVtYmVyc2hpcChcbiAgICBfc291cmNlQWRkcmVzczogc3RyaW5nLFxuICAgIF9ncm91cEFkZHJlc3M6IHN0cmluZyxcbiAgICBfaW50ZXJmYWNlQWRkcmVzcz86IHN0cmluZyxcbiAgKTogbnVtYmVyIHtcbiAgICBub3RJbXBsZW1lbnRlZChcInVkcC5VRFAucHJvdG90eXBlLmFkZFNvdXJjZVNwZWNpZmljTWVtYmVyc2hpcFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHRvIGFuIElQdjQgYWRkcmVzcy5cbiAgICogQHBhcmFtIGlwIFRoZSBob3N0bmFtZSB0byBiaW5kIHRvLlxuICAgKiBAcGFyYW0gcG9ydCBUaGUgcG9ydCB0byBiaW5kIHRvXG4gICAqIEByZXR1cm4gQW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAqL1xuICBiaW5kKGlwOiBzdHJpbmcsIHBvcnQ6IG51bWJlciwgZmxhZ3M6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2RvQmluZChpcCwgcG9ydCwgZmxhZ3MsIEFGX0lORVQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgdG8gYW4gSVB2NiBhZGRyZXNzLlxuICAgKiBAcGFyYW0gaXAgVGhlIGhvc3RuYW1lIHRvIGJpbmQgdG8uXG4gICAqIEBwYXJhbSBwb3J0IFRoZSBwb3J0IHRvIGJpbmQgdG9cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIGJpbmQ2KGlwOiBzdHJpbmcsIHBvcnQ6IG51bWJlciwgZmxhZ3M6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuI2RvQmluZChpcCwgcG9ydCwgZmxhZ3MsIEFGX0lORVQ2KTtcbiAgfVxuXG4gIGJ1ZmZlclNpemUoXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIGJ1ZmZlcjogYm9vbGVhbixcbiAgICBjdHg6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4sXG4gICk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGVycjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHNpemUgPiBVRFBfREdSQU1fTUFYU0laRSkge1xuICAgICAgZXJyID0gXCJFSU5WQUxcIjtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLiNhZGRyZXNzKSB7XG4gICAgICBlcnIgPSBpc1dpbmRvd3MgPyBcIkVOT1RTT0NLXCIgOiBcIkVCQURGXCI7XG4gICAgfVxuXG4gICAgaWYgKGVycikge1xuICAgICAgY3R4LmVycm5vID0gY29kZU1hcC5nZXQoZXJyKSE7XG4gICAgICBjdHguY29kZSA9IGVycjtcbiAgICAgIGN0eC5tZXNzYWdlID0gZXJyb3JNYXAuZ2V0KGN0eC5lcnJubykhWzFdO1xuICAgICAgY3R4LnN5c2NhbGwgPSBidWZmZXIgPyBcInV2X3JlY3ZfYnVmZmVyX3NpemVcIiA6IFwidXZfc2VuZF9idWZmZXJfc2l6ZVwiO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNpemUgIT09IDApIHtcbiAgICAgIHNpemUgPSBpc0xpbnV4ID8gc2l6ZSAqIDIgOiBzaXplO1xuXG4gICAgICBpZiAoYnVmZmVyKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jcmVjdkJ1ZmZlclNpemUgPSBzaXplKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICh0aGlzLiNzZW5kQnVmZmVyU2l6ZSA9IHNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXIgPyB0aGlzLiNyZWN2QnVmZmVyU2l6ZSA6IHRoaXMuI3NlbmRCdWZmZXJTaXplO1xuICB9XG5cbiAgY29ubmVjdChpcDogc3RyaW5nLCBwb3J0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNkb0Nvbm5lY3QoaXAsIHBvcnQsIEFGX0lORVQpO1xuICB9XG5cbiAgY29ubmVjdDYoaXA6IHN0cmluZywgcG9ydDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jZG9Db25uZWN0KGlwLCBwb3J0LCBBRl9JTkVUNik7XG4gIH1cblxuICBkaXNjb25uZWN0KCk6IG51bWJlciB7XG4gICAgdGhpcy4jcmVtb3RlQWRkcmVzcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLiNyZW1vdGVQb3J0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI3JlbW90ZUZhbWlseSA9IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZHJvcE1lbWJlcnNoaXAoXG4gICAgX211bHRpY2FzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBfaW50ZXJmYWNlQWRkcmVzcz86IHN0cmluZyxcbiAgKTogbnVtYmVyIHtcbiAgICBub3RJbXBsZW1lbnRlZChcInVkcC5VRFAucHJvdG90eXBlLmRyb3BNZW1iZXJzaGlwXCIpO1xuICB9XG5cbiAgZHJvcFNvdXJjZVNwZWNpZmljTWVtYmVyc2hpcChcbiAgICBfc291cmNlQWRkcmVzczogc3RyaW5nLFxuICAgIF9ncm91cEFkZHJlc3M6IHN0cmluZyxcbiAgICBfaW50ZXJmYWNlQWRkcmVzcz86IHN0cmluZyxcbiAgKTogbnVtYmVyIHtcbiAgICBub3RJbXBsZW1lbnRlZChcInVkcC5VRFAucHJvdG90eXBlLmRyb3BTb3VyY2VTcGVjaWZpY01lbWJlcnNoaXBcIik7XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGVzIHRoZSBwcm92aWRlZCBvYmplY3Qgd2l0aCByZW1vdGUgYWRkcmVzcyBlbnRyaWVzLlxuICAgKiBAcGFyYW0gcGVlcm5hbWUgQW4gb2JqZWN0IHRvIGFkZCB0aGUgcmVtb3RlIGFkZHJlc3MgZW50cmllcyB0by5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIGdldHBlZXJuYW1lKHBlZXJuYW1lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+KTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy4jcmVtb3RlQWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29kZU1hcC5nZXQoXCJFQkFERlwiKSE7XG4gICAgfVxuXG4gICAgcGVlcm5hbWUuYWRkcmVzcyA9IHRoaXMuI3JlbW90ZUFkZHJlc3M7XG4gICAgcGVlcm5hbWUucG9ydCA9IHRoaXMuI3JlbW90ZVBvcnQhO1xuICAgIHBlZXJuYW1lLmZhbWlseSA9IHRoaXMuI3JlbW90ZUZhbWlseSE7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3B1bGF0ZXMgdGhlIHByb3ZpZGVkIG9iamVjdCB3aXRoIGxvY2FsIGFkZHJlc3MgZW50cmllcy5cbiAgICogQHBhcmFtIHNvY2tuYW1lIEFuIG9iamVjdCB0byBhZGQgdGhlIGxvY2FsIGFkZHJlc3MgZW50cmllcyB0by5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIGdldHNvY2tuYW1lKHNvY2tuYW1lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+KTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy4jYWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29kZU1hcC5nZXQoXCJFQkFERlwiKSE7XG4gICAgfVxuXG4gICAgc29ja25hbWUuYWRkcmVzcyA9IHRoaXMuI2FkZHJlc3M7XG4gICAgc29ja25hbWUucG9ydCA9IHRoaXMuI3BvcnQhO1xuICAgIHNvY2tuYW1lLmZhbWlseSA9IHRoaXMuI2ZhbWlseSE7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIGZpbGUgZGVzY3JpcHRvci5cbiAgICogQHBhcmFtIGZkIFRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gb3Blbi5cbiAgICogQHJldHVybiBBbiBlcnJvciBzdGF0dXMgY29kZS5cbiAgICovXG4gIG9wZW4oX2ZkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIFJFRjogaHR0cHM6Ly9naXRodWIuY29tL2Rlbm9sYW5kL2Rlbm8vaXNzdWVzLzY1MjlcbiAgICBub3RJbXBsZW1lbnRlZChcInVkcC5VRFAucHJvdG90eXBlLm9wZW5cIik7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgcmVjZWl2aW5nIG9uIHRoZSBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJuIEFuIGVycm9yIHN0YXR1cyBjb2RlLlxuICAgKi9cbiAgcmVjdlN0YXJ0KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLiNyZWNlaXZpbmcpIHtcbiAgICAgIHRoaXMuI3JlY2VpdmluZyA9IHRydWU7XG4gICAgICB0aGlzLiNyZWNlaXZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCByZWNlaXZpbmcgb24gdGhlIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm4gQW4gZXJyb3Igc3RhdHVzIGNvZGUuXG4gICAqL1xuICByZWN2U3RvcCgpOiBudW1iZXIge1xuICAgIHRoaXMuI3JlY2VpdmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBvdmVycmlkZSByZWYoKSB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJ1ZHAuVURQLnByb3RvdHlwZS5yZWZcIik7XG4gIH1cblxuICBzZW5kKFxuICAgIHJlcTogU2VuZFdyYXAsXG4gICAgYnVmczogTWVzc2FnZVR5cGVbXSxcbiAgICBjb3VudDogbnVtYmVyLFxuICAgIC4uLmFyZ3M6IFtudW1iZXIsIHN0cmluZywgYm9vbGVhbl0gfCBbYm9vbGVhbl1cbiAgKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jZG9TZW5kKHJlcSwgYnVmcywgY291bnQsIGFyZ3MsIEFGX0lORVQpO1xuICB9XG5cbiAgc2VuZDYoXG4gICAgcmVxOiBTZW5kV3JhcCxcbiAgICBidWZzOiBNZXNzYWdlVHlwZVtdLFxuICAgIGNvdW50OiBudW1iZXIsXG4gICAgLi4uYXJnczogW251bWJlciwgc3RyaW5nLCBib29sZWFuXSB8IFtib29sZWFuXVxuICApOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNkb1NlbmQocmVxLCBidWZzLCBjb3VudCwgYXJncywgQUZfSU5FVDYpO1xuICB9XG5cbiAgc2V0QnJvYWRjYXN0KF9ib29sOiAwIHwgMSk6IG51bWJlciB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJ1ZHAuVURQLnByb3RvdHlwZS5zZXRCcm9hZGNhc3RcIik7XG4gIH1cblxuICBzZXRNdWx0aWNhc3RJbnRlcmZhY2UoX2ludGVyZmFjZUFkZHJlc3M6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJ1ZHAuVURQLnByb3RvdHlwZS5zZXRNdWx0aWNhc3RJbnRlcmZhY2VcIik7XG4gIH1cblxuICBzZXRNdWx0aWNhc3RMb29wYmFjayhfYm9vbDogMCB8IDEpOiBudW1iZXIge1xuICAgIG5vdEltcGxlbWVudGVkKFwidWRwLlVEUC5wcm90b3R5cGUuc2V0TXVsdGljYXN0TG9vcGJhY2tcIik7XG4gIH1cblxuICBzZXRNdWx0aWNhc3RUVEwoX3R0bDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBub3RJbXBsZW1lbnRlZChcInVkcC5VRFAucHJvdG90eXBlLnNldE11bHRpY2FzdFRUTFwiKTtcbiAgfVxuXG4gIHNldFRUTChfdHRsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIG5vdEltcGxlbWVudGVkKFwidWRwLlVEUC5wcm90b3R5cGUuc2V0VFRMXCIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgdW5yZWYoKSB7XG4gICAgbm90SW1wbGVtZW50ZWQoXCJ1ZHAuVURQLnByb3RvdHlwZS51bnJlZlwiKTtcbiAgfVxuXG4gICNkb0JpbmQoaXA6IHN0cmluZywgcG9ydDogbnVtYmVyLCBfZmxhZ3M6IG51bWJlciwgZmFtaWx5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIFRPRE8oY21vcnRlbik6IHVzZSBmbGFncyB0byBpbmZvcm0gc29ja2V0IHJldXNlIGV0Yy5cbiAgICBjb25zdCBsaXN0ZW5PcHRpb25zID0ge1xuICAgICAgcG9ydCxcbiAgICAgIGhvc3RuYW1lOiBpcCxcbiAgICAgIHRyYW5zcG9ydDogXCJ1ZHBcIiBhcyBjb25zdCxcbiAgICB9O1xuXG4gICAgbGV0IGxpc3RlbmVyO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxpc3RlbmVyID0gRGVub1Vuc3RhYmxlLmxpc3RlbkRhdGFncmFtKGxpc3Rlbk9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQWRkckluVXNlKSB7XG4gICAgICAgIHJldHVybiBjb2RlTWFwLmdldChcIkVBRERSSU5VU0VcIikhO1xuICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQWRkck5vdEF2YWlsYWJsZSkge1xuICAgICAgICByZXR1cm4gY29kZU1hcC5nZXQoXCJFQUREUk5PVEFWQUlMXCIpITtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETyhjbW9ydGVuKTogbWFwIGVycm9ycyB0byBhcHByb3ByaWF0ZSBlcnJvciBjb2Rlcy5cbiAgICAgIHJldHVybiBjb2RlTWFwLmdldChcIlVOS05PV05cIikhO1xuICAgIH1cblxuICAgIGNvbnN0IGFkZHJlc3MgPSBsaXN0ZW5lci5hZGRyIGFzIERlbm8uTmV0QWRkcjtcbiAgICB0aGlzLiNhZGRyZXNzID0gYWRkcmVzcy5ob3N0bmFtZTtcbiAgICB0aGlzLiNwb3J0ID0gYWRkcmVzcy5wb3J0O1xuICAgIHRoaXMuI2ZhbWlseSA9IGZhbWlseSA9PT0gQUZfSU5FVDYgPyAoXCJJUHY2XCIgYXMgY29uc3QpIDogKFwiSVB2NFwiIGFzIGNvbnN0KTtcbiAgICB0aGlzLiNsaXN0ZW5lciA9IGxpc3RlbmVyO1xuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAjZG9Db25uZWN0KGlwOiBzdHJpbmcsIHBvcnQ6IG51bWJlciwgZmFtaWx5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRoaXMuI3JlbW90ZUFkZHJlc3MgPSBpcDtcbiAgICB0aGlzLiNyZW1vdGVQb3J0ID0gcG9ydDtcbiAgICB0aGlzLiNyZW1vdGVGYW1pbHkgPSBmYW1pbHkgPT09IEFGX0lORVQ2XG4gICAgICA/IChcIklQdjZcIiBhcyBjb25zdClcbiAgICAgIDogKFwiSVB2NFwiIGFzIGNvbnN0KTtcblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgI2RvU2VuZChcbiAgICByZXE6IFNlbmRXcmFwLFxuICAgIGJ1ZnM6IE1lc3NhZ2VUeXBlW10sXG4gICAgX2NvdW50OiBudW1iZXIsXG4gICAgYXJnczogW251bWJlciwgc3RyaW5nLCBib29sZWFuXSB8IFtib29sZWFuXSxcbiAgICBfZmFtaWx5OiBudW1iZXIsXG4gICk6IG51bWJlciB7XG4gICAgbGV0IGhhc0NhbGxiYWNrOiBib29sZWFuO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICB0aGlzLiNyZW1vdGVQb3J0ID0gYXJnc1swXSBhcyBudW1iZXI7XG4gICAgICB0aGlzLiNyZW1vdGVBZGRyZXNzID0gYXJnc1sxXSBhcyBzdHJpbmc7XG4gICAgICBoYXNDYWxsYmFjayA9IGFyZ3NbMl0gYXMgYm9vbGVhbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzQ2FsbGJhY2sgPSBhcmdzWzBdIGFzIGJvb2xlYW47XG4gICAgfVxuXG4gICAgY29uc3QgYWRkcjogRGVuby5OZXRBZGRyID0ge1xuICAgICAgaG9zdG5hbWU6IHRoaXMuI3JlbW90ZUFkZHJlc3MhLFxuICAgICAgcG9ydDogdGhpcy4jcmVtb3RlUG9ydCEsXG4gICAgICB0cmFuc3BvcnQ6IFwidWRwXCIsXG4gICAgfTtcblxuICAgIC8vIERlbm8uRGF0YWdyYW1Db25uLnByb3RvdHlwZS5zZW5kIGFjY2VwdHMgb25seSBvbmUgVWludDhBcnJheVxuICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgVWludDhBcnJheShcbiAgICAgIEJ1ZmZlci5jb25jYXQoXG4gICAgICAgIGJ1ZnMubWFwKChidWYpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGJ1ZiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ1Zik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ1Zi5idWZmZXIsIGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZUxlbmd0aCk7XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIGxldCBzZW50OiBudW1iZXI7XG4gICAgICBsZXQgZXJyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2VudCA9IGF3YWl0IHRoaXMuI2xpc3RlbmVyIS5zZW5kKHBheWxvYWQsIGFkZHIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBUT0RPKGNtb3J0ZW4pOiBtYXAgZXJyb3JzIHRvIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzLlxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlKSB7XG4gICAgICAgICAgZXJyID0gY29kZU1hcC5nZXQoXCJFQkFERlwiKSE7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgZSBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgICAgZS5tZXNzYWdlLm1hdGNoKC9vcyBlcnJvciAoNDB8OTB8MTAwNDApLylcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXJyID0gY29kZU1hcC5nZXQoXCJFTVNHU0laRVwiKSE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyID0gY29kZU1hcC5nZXQoXCJVTktOT1dOXCIpITtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzQ2FsbGJhY2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXEub25jb21wbGV0ZShlcnIsIHNlbnQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBzd2FsbG93IGNhbGxiYWNrIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgYXN5bmMgI3JlY2VpdmUoKSB7XG4gICAgaWYgKCF0aGlzLiNyZWNlaXZpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwID0gbmV3IFVpbnQ4QXJyYXkodGhpcy4jcmVjdkJ1ZmZlclNpemUpO1xuXG4gICAgbGV0IGJ1ZjogVWludDhBcnJheTtcbiAgICBsZXQgcmVtb3RlQWRkcjogRGVuby5OZXRBZGRyIHwgbnVsbDtcbiAgICBsZXQgbnJlYWQ6IG51bWJlciB8IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgW2J1ZiwgcmVtb3RlQWRkcl0gPSAoYXdhaXQgdGhpcy4jbGlzdGVuZXIhLnJlY2VpdmUocCkpIGFzIFtcbiAgICAgICAgVWludDhBcnJheSxcbiAgICAgICAgRGVuby5OZXRBZGRyLFxuICAgICAgXTtcblxuICAgICAgbnJlYWQgPSBidWYubGVuZ3RoO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFRPRE8oY21vcnRlbik6IG1hcCBlcnJvcnMgdG8gYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMuXG4gICAgICBpZiAoXG4gICAgICAgIGUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5JbnRlcnJ1cHRlZCB8fFxuICAgICAgICBlIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQmFkUmVzb3VyY2VcbiAgICAgICkge1xuICAgICAgICBucmVhZCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBucmVhZCA9IGNvZGVNYXAuZ2V0KFwiVU5LTk9XTlwiKSE7XG4gICAgICB9XG5cbiAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgcmVtb3RlQWRkciA9IG51bGw7XG4gICAgfVxuXG4gICAgbnJlYWQgPz89IDA7XG5cbiAgICBjb25zdCByaW5mbyA9IHJlbW90ZUFkZHJcbiAgICAgID8ge1xuICAgICAgICBhZGRyZXNzOiByZW1vdGVBZGRyLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiByZW1vdGVBZGRyLnBvcnQsXG4gICAgICAgIGZhbWlseTogaXNJUChyZW1vdGVBZGRyLmhvc3RuYW1lKSA9PT0gNlxuICAgICAgICAgID8gKFwiSVB2NlwiIGFzIGNvbnN0KVxuICAgICAgICAgIDogKFwiSVB2NFwiIGFzIGNvbnN0KSxcbiAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub25tZXNzYWdlKG5yZWFkLCB0aGlzLCBCdWZmZXIuZnJvbShidWYpLCByaW5mbyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBzd2FsbG93IGNhbGxiYWNrIGVycm9ycy5cbiAgICB9XG5cbiAgICB0aGlzLiNyZWNlaXZlKCk7XG4gIH1cblxuICAvKiogSGFuZGxlIHNvY2tldCBjbG9zdXJlLiAqL1xuICBvdmVycmlkZSBfb25DbG9zZSgpOiBudW1iZXIge1xuICAgIHRoaXMuI3JlY2VpdmluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy4jYWRkcmVzcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLiNwb3J0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI2ZhbWlseSA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNsaXN0ZW5lciEuY2xvc2UoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGxpc3RlbmVyIGFscmVhZHkgY2xvc2VkXG4gICAgfVxuXG4gICAgdGhpcy4jbGlzdGVuZXIgPSB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gMDtcbiAgfVxufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5leHBvcnQge307XG4iLCAiLy8gQ29weXJpZ2h0IDIwMTgtMjAyMiB0aGUgRGVubyBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNSVQgbGljZW5zZS5cblxuZXhwb3J0IHt9O1xuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5cbmV4cG9ydCB7fTtcbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuaW1wb3J0ICogYXMgYXN5bmNXcmFwIGZyb20gXCIuL2FzeW5jX3dyYXAudHNcIjtcbmltcG9ydCAqIGFzIGJ1ZmZlciBmcm9tIFwiLi9idWZmZXIudHNcIjtcbmltcG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCAqIGFzIGNhcmVzV3JhcCBmcm9tIFwiLi9jYXJlc193cmFwLnRzXCI7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSBcIi4vY29uc3RhbnRzLnRzXCI7XG5pbXBvcnQgKiBhcyBjb250ZXh0aWZ5IGZyb20gXCIuL2NvbnRleHRpZnkudHNcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiLi9jcnlwdG8udHNcIjtcbmltcG9ydCAqIGFzIGNyZWRlbnRpYWxzIGZyb20gXCIuL2NyZWRlbnRpYWxzLnRzXCI7XG5pbXBvcnQgKiBhcyBlcnJvcnMgZnJvbSBcIi4vZXJyb3JzLnRzXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiLi9mcy50c1wiO1xuaW1wb3J0ICogYXMgZnNEaXIgZnJvbSBcIi4vZnNfZGlyLnRzXCI7XG5pbXBvcnQgKiBhcyBmc0V2ZW50V3JhcCBmcm9tIFwiLi9mc19ldmVudF93cmFwLnRzXCI7XG5pbXBvcnQgKiBhcyBoZWFwVXRpbHMgZnJvbSBcIi4vaGVhcF91dGlscy50c1wiO1xuaW1wb3J0ICogYXMgaHR0cFBhcnNlciBmcm9tIFwiLi9odHRwX3BhcnNlci50c1wiO1xuaW1wb3J0ICogYXMgaWN1IGZyb20gXCIuL2ljdS50c1wiO1xuaW1wb3J0ICogYXMgaW5zcGVjdG9yIGZyb20gXCIuL2luc3BlY3Rvci50c1wiO1xuaW1wb3J0ICogYXMganNTdHJlYW0gZnJvbSBcIi4vanNfc3RyZWFtLnRzXCI7XG5pbXBvcnQgKiBhcyBtZXNzYWdpbmcgZnJvbSBcIi4vbWVzc2FnaW5nLnRzXCI7XG5pbXBvcnQgKiBhcyBtb2R1bGVXcmFwIGZyb20gXCIuL21vZHVsZV93cmFwLnRzXCI7XG5pbXBvcnQgKiBhcyBuYXRpdmVNb2R1bGUgZnJvbSBcIi4vbmF0aXZlX21vZHVsZS50c1wiO1xuaW1wb3J0ICogYXMgbmF0aXZlcyBmcm9tIFwiLi9uYXRpdmVzLnRzXCI7XG5pbXBvcnQgKiBhcyBvcHRpb25zIGZyb20gXCIuL29wdGlvbnMudHNcIjtcbmltcG9ydCAqIGFzIG9zIGZyb20gXCIuL29zLnRzXCI7XG5pbXBvcnQgKiBhcyBwaXBlV3JhcCBmcm9tIFwiLi9waXBlX3dyYXAudHNcIjtcbmltcG9ydCAqIGFzIHBlcmZvcm1hbmNlIGZyb20gXCIuL3BlcmZvcm1hbmNlLnRzXCI7XG5pbXBvcnQgKiBhcyBwcm9jZXNzTWV0aG9kcyBmcm9tIFwiLi9wcm9jZXNzX21ldGhvZHMudHNcIjtcbmltcG9ydCAqIGFzIHJlcG9ydCBmcm9tIFwiLi9yZXBvcnQudHNcIjtcbmltcG9ydCAqIGFzIHNlcmRlcyBmcm9tIFwiLi9zZXJkZXMudHNcIjtcbmltcG9ydCAqIGFzIHNpZ25hbFdyYXAgZnJvbSBcIi4vc2lnbmFsX3dyYXAudHNcIjtcbmltcG9ydCAqIGFzIHNwYXduU3luYyBmcm9tIFwiLi9zcGF3bl9zeW5jLnRzXCI7XG5pbXBvcnQgKiBhcyBzdHJlYW1XcmFwIGZyb20gXCIuL3N0cmVhbV93cmFwLnRzXCI7XG5pbXBvcnQgKiBhcyBzdHJpbmdEZWNvZGVyIGZyb20gXCIuL3N0cmluZ19kZWNvZGVyLnRzXCI7XG5pbXBvcnQgKiBhcyBzeW1ib2xzIGZyb20gXCIuL3N5bWJvbHMudHNcIjtcbmltcG9ydCAqIGFzIHRhc2tRdWV1ZSBmcm9tIFwiLi90YXNrX3F1ZXVlLnRzXCI7XG5pbXBvcnQgKiBhcyB0Y3BXcmFwIGZyb20gXCIuL3RjcF93cmFwLnRzXCI7XG5pbXBvcnQgKiBhcyB0aW1lcnMgZnJvbSBcIi4vdGltZXJzLnRzXCI7XG5pbXBvcnQgKiBhcyB0bHNXcmFwIGZyb20gXCIuL3Rsc193cmFwLnRzXCI7XG5pbXBvcnQgKiBhcyB0cmFjZUV2ZW50cyBmcm9tIFwiLi90cmFjZV9ldmVudHMudHNcIjtcbmltcG9ydCAqIGFzIHR0eVdyYXAgZnJvbSBcIi4vdHR5X3dyYXAudHNcIjtcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gXCIuL3R5cGVzLnRzXCI7XG5pbXBvcnQgKiBhcyB1ZHBXcmFwIGZyb20gXCIuL3VkcF93cmFwLnRzXCI7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSBcIi4vdXJsLnRzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwudHNcIjtcbmltcG9ydCAqIGFzIHV2IGZyb20gXCIuL3V2LnRzXCI7XG5pbXBvcnQgKiBhcyB2OCBmcm9tIFwiLi92OC50c1wiO1xuaW1wb3J0ICogYXMgd29ya2VyIGZyb20gXCIuL3dvcmtlci50c1wiO1xuaW1wb3J0ICogYXMgemxpYiBmcm9tIFwiLi96bGliLnRzXCI7XG5cbmNvbnN0IG1vZHVsZXMgPSB7XG4gIFwiYXN5bmNfd3JhcFwiOiBhc3luY1dyYXAsXG4gIGJ1ZmZlcixcbiAgXCJjYXJlc193cmFwXCI6IGNhcmVzV3JhcCxcbiAgY29uZmlnLFxuICBjb25zdGFudHMsXG4gIGNvbnRleHRpZnksXG4gIGNyZWRlbnRpYWxzLFxuICBjcnlwdG8sXG4gIGVycm9ycyxcbiAgZnMsXG4gIFwiZnNfZGlyXCI6IGZzRGlyLFxuICBcImZzX2V2ZW50X3dyYXBcIjogZnNFdmVudFdyYXAsXG4gIFwiaGVhcF91dGlsc1wiOiBoZWFwVXRpbHMsXG4gIFwiaHR0cF9wYXJzZXJcIjogaHR0cFBhcnNlcixcbiAgaWN1LFxuICBpbnNwZWN0b3IsXG4gIFwianNfc3RyZWFtXCI6IGpzU3RyZWFtLFxuICBtZXNzYWdpbmcsXG4gIFwibW9kdWxlX3dyYXBcIjogbW9kdWxlV3JhcCxcbiAgXCJuYXRpdmVfbW9kdWxlXCI6IG5hdGl2ZU1vZHVsZSxcbiAgbmF0aXZlcyxcbiAgb3B0aW9ucyxcbiAgb3MsXG4gIHBlcmZvcm1hbmNlLFxuICBcInBpcGVfd3JhcFwiOiBwaXBlV3JhcCxcbiAgXCJwcm9jZXNzX21ldGhvZHNcIjogcHJvY2Vzc01ldGhvZHMsXG4gIHJlcG9ydCxcbiAgc2VyZGVzLFxuICBcInNpZ25hbF93cmFwXCI6IHNpZ25hbFdyYXAsXG4gIFwic3Bhd25fc3luY1wiOiBzcGF3blN5bmMsXG4gIFwic3RyZWFtX3dyYXBcIjogc3RyZWFtV3JhcCxcbiAgXCJzdHJpbmdfZGVjb2RlclwiOiBzdHJpbmdEZWNvZGVyLFxuICBzeW1ib2xzLFxuICBcInRhc2tfcXVldWVcIjogdGFza1F1ZXVlLFxuICBcInRjcF93cmFwXCI6IHRjcFdyYXAsXG4gIHRpbWVycyxcbiAgXCJ0bHNfd3JhcFwiOiB0bHNXcmFwLFxuICBcInRyYWNlX2V2ZW50c1wiOiB0cmFjZUV2ZW50cyxcbiAgXCJ0dHlfd3JhcFwiOiB0dHlXcmFwLFxuICB0eXBlcyxcbiAgXCJ1ZHBfd3JhcFwiOiB1ZHBXcmFwLFxuICB1cmwsXG4gIHV0aWwsXG4gIHV2LFxuICB2OCxcbiAgd29ya2VyLFxuICB6bGliLFxufTtcblxuZXhwb3J0IHR5cGUgQmluZGluZ05hbWUgPSBrZXlvZiB0eXBlb2YgbW9kdWxlcztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJpbmRpbmcobmFtZTogQmluZGluZ05hbWUpIHtcbiAgY29uc3QgbW9kID0gbW9kdWxlc1tuYW1lXTtcbiAgaWYgKCFtb2QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggbW9kdWxlOiAke25hbWV9YCk7XG4gIH1cbiAgcmV0dXJuIG1vZDtcbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAxOC0yMDIyIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgTm9kZS5qcyBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuXG5jb25zdCBrSW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbCBwcm9wZXJ0aWVzXCIpO1xuXG5jb25zdCByZXBsYWNlVW5kZXJzY29yZXNSZWdleCA9IC9fL2c7XG5jb25zdCBsZWFkaW5nRGFzaGVzUmVnZXggPSAvXi0tPy87XG5jb25zdCB0cmFpbGluZ1ZhbHVlc1JlZ2V4ID0gLz0uKiQvO1xuXG4vLyBUaGlzIGJ1aWxkcyB0aGUgaW5pdGlhbCBwcm9jZXNzLmFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFnc1xuLy8gZnJvbSBkYXRhIGluIHRoZSBjb25maWcgYmluZGluZy5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFsbG93ZWRGbGFncygpIHtcbiAgY29uc3QgYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzID0gW1xuICAgIFwiLS10cmFjay1oZWFwLW9iamVjdHNcIixcbiAgICBcIi0tbm8tdHJhY2staGVhcC1vYmplY3RzXCIsXG4gICAgXCItLW5vZGUtc25hcHNob3RcIixcbiAgICBcIi0tbm8tbm9kZS1zbmFwc2hvdFwiLFxuICAgIFwiLS1yZXF1aXJlXCIsXG4gICAgXCItLW1heC1vbGQtc3BhY2Utc2l6ZVwiLFxuICAgIFwiLS10cmFjZS1leGl0XCIsXG4gICAgXCItLW5vLXRyYWNlLWV4aXRcIixcbiAgICBcIi0tZGlzYWxsb3ctY29kZS1nZW5lcmF0aW9uLWZyb20tc3RyaW5nc1wiLFxuICAgIFwiLS1leHBlcmltZW50YWwtanNvbi1tb2R1bGVzXCIsXG4gICAgXCItLW5vLWV4cGVyaW1lbnRhbC1qc29uLW1vZHVsZXNcIixcbiAgICBcIi0taW50ZXJwcmV0ZWQtZnJhbWVzLW5hdGl2ZS1zdGFja1wiLFxuICAgIFwiLS1pbnNwZWN0LWJya1wiLFxuICAgIFwiLS1uby1pbnNwZWN0LWJya1wiLFxuICAgIFwiLS10cmFjZS10bHNcIixcbiAgICBcIi0tbm8tdHJhY2UtdGxzXCIsXG4gICAgXCItLXN0YWNrLXRyYWNlLWxpbWl0XCIsXG4gICAgXCItLWV4cGVyaW1lbnRhbC1yZXBsLWF3YWl0XCIsXG4gICAgXCItLW5vLWV4cGVyaW1lbnRhbC1yZXBsLWF3YWl0XCIsXG4gICAgXCItLXByZXNlcnZlLXN5bWxpbmtzXCIsXG4gICAgXCItLW5vLXByZXNlcnZlLXN5bWxpbmtzXCIsXG4gICAgXCItLXJlcG9ydC11bmNhdWdodC1leGNlcHRpb25cIixcbiAgICBcIi0tbm8tcmVwb3J0LXVuY2F1Z2h0LWV4Y2VwdGlvblwiLFxuICAgIFwiLS1leHBlcmltZW50YWwtbW9kdWxlc1wiLFxuICAgIFwiLS1uby1leHBlcmltZW50YWwtbW9kdWxlc1wiLFxuICAgIFwiLS1yZXBvcnQtc2lnbmFsXCIsXG4gICAgXCItLWppdGxlc3NcIixcbiAgICBcIi0taW5zcGVjdC1wb3J0XCIsXG4gICAgXCItLWhlYXBzbmFwc2hvdC1uZWFyLWhlYXAtbGltaXRcIixcbiAgICBcIi0tdGxzLWtleWxvZ1wiLFxuICAgIFwiLS1mb3JjZS1jb250ZXh0LWF3YXJlXCIsXG4gICAgXCItLW5vLWZvcmNlLWNvbnRleHQtYXdhcmVcIixcbiAgICBcIi0tbmFwaS1tb2R1bGVzXCIsXG4gICAgXCItLWFib3J0LW9uLXVuY2F1Z2h0LWV4Y2VwdGlvblwiLFxuICAgIFwiLS1kaWFnbm9zdGljLWRpclwiLFxuICAgIFwiLS12ZXJpZnktYmFzZS1vYmplY3RzXCIsXG4gICAgXCItLW5vLXZlcmlmeS1iYXNlLW9iamVjdHNcIixcbiAgICBcIi0tdW5oYW5kbGVkLXJlamVjdGlvbnNcIixcbiAgICBcIi0tcGVyZi1iYXNpYy1wcm9mXCIsXG4gICAgXCItLXRyYWNlLWF0b21pY3Mtd2FpdFwiLFxuICAgIFwiLS1uby10cmFjZS1hdG9taWNzLXdhaXRcIixcbiAgICBcIi0tZGVwcmVjYXRpb25cIixcbiAgICBcIi0tbm8tZGVwcmVjYXRpb25cIixcbiAgICBcIi0tcGVyZi1iYXNpYy1wcm9mLW9ubHktZnVuY3Rpb25zXCIsXG4gICAgXCItLXBlcmYtcHJvZlwiLFxuICAgIFwiLS1tYXgtaHR0cC1oZWFkZXItc2l6ZVwiLFxuICAgIFwiLS1yZXBvcnQtb24tc2lnbmFsXCIsXG4gICAgXCItLW5vLXJlcG9ydC1vbi1zaWduYWxcIixcbiAgICBcIi0tdGhyb3ctZGVwcmVjYXRpb25cIixcbiAgICBcIi0tbm8tdGhyb3ctZGVwcmVjYXRpb25cIixcbiAgICBcIi0td2FybmluZ3NcIixcbiAgICBcIi0tbm8td2FybmluZ3NcIixcbiAgICBcIi0tZm9yY2UtZmlwc1wiLFxuICAgIFwiLS1uby1mb3JjZS1maXBzXCIsXG4gICAgXCItLXBlbmRpbmctZGVwcmVjYXRpb25cIixcbiAgICBcIi0tbm8tcGVuZGluZy1kZXByZWNhdGlvblwiLFxuICAgIFwiLS1pbnB1dC10eXBlXCIsXG4gICAgXCItLXRscy1tYXgtdjEuM1wiLFxuICAgIFwiLS1uby10bHMtbWF4LXYxLjNcIixcbiAgICBcIi0tdGxzLW1pbi12MS4yXCIsXG4gICAgXCItLW5vLXRscy1taW4tdjEuMlwiLFxuICAgIFwiLS1pbnNwZWN0XCIsXG4gICAgXCItLW5vLWluc3BlY3RcIixcbiAgICBcIi0taGVhcHNuYXBzaG90LXNpZ25hbFwiLFxuICAgIFwiLS10cmFjZS13YXJuaW5nc1wiLFxuICAgIFwiLS1uby10cmFjZS13YXJuaW5nc1wiLFxuICAgIFwiLS10cmFjZS1ldmVudC1jYXRlZ29yaWVzXCIsXG4gICAgXCItLWV4cGVyaW1lbnRhbC13b3JrZXJcIixcbiAgICBcIi0tdGxzLW1heC12MS4yXCIsXG4gICAgXCItLW5vLXRscy1tYXgtdjEuMlwiLFxuICAgIFwiLS1wZXJmLXByb2YtdW53aW5kaW5nLWluZm9cIixcbiAgICBcIi0tcHJlc2VydmUtc3ltbGlua3MtbWFpblwiLFxuICAgIFwiLS1uby1wcmVzZXJ2ZS1zeW1saW5rcy1tYWluXCIsXG4gICAgXCItLXBvbGljeS1pbnRlZ3JpdHlcIixcbiAgICBcIi0tZXhwZXJpbWVudGFsLXdhc20tbW9kdWxlc1wiLFxuICAgIFwiLS1uby1leHBlcmltZW50YWwtd2FzbS1tb2R1bGVzXCIsXG4gICAgXCItLW5vZGUtbWVtb3J5LWRlYnVnXCIsXG4gICAgXCItLWluc3BlY3QtcHVibGlzaC11aWRcIixcbiAgICBcIi0tdGxzLW1pbi12MS4zXCIsXG4gICAgXCItLW5vLXRscy1taW4tdjEuM1wiLFxuICAgIFwiLS1leHBlcmltZW50YWwtc3BlY2lmaWVyLXJlc29sdXRpb25cIixcbiAgICBcIi0tc2VjdXJlLWhlYXBcIixcbiAgICBcIi0tdGxzLW1pbi12MS4wXCIsXG4gICAgXCItLW5vLXRscy1taW4tdjEuMFwiLFxuICAgIFwiLS1yZWRpcmVjdC13YXJuaW5nc1wiLFxuICAgIFwiLS1leHBlcmltZW50YWwtcmVwb3J0XCIsXG4gICAgXCItLXRyYWNlLWV2ZW50LWZpbGUtcGF0dGVyblwiLFxuICAgIFwiLS10cmFjZS11bmNhdWdodFwiLFxuICAgIFwiLS1uby10cmFjZS11bmNhdWdodFwiLFxuICAgIFwiLS1leHBlcmltZW50YWwtbG9hZGVyXCIsXG4gICAgXCItLWh0dHAtcGFyc2VyXCIsXG4gICAgXCItLWRucy1yZXN1bHQtb3JkZXJcIixcbiAgICBcIi0tdHJhY2Utc2lnaW50XCIsXG4gICAgXCItLW5vLXRyYWNlLXNpZ2ludFwiLFxuICAgIFwiLS1zZWN1cmUtaGVhcC1taW5cIixcbiAgICBcIi0tZW5hYmxlLWZpcHNcIixcbiAgICBcIi0tbm8tZW5hYmxlLWZpcHNcIixcbiAgICBcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsXG4gICAgXCItLW5vLWVuYWJsZS1zb3VyY2UtbWFwc1wiLFxuICAgIFwiLS1pbnNlY3VyZS1odHRwLXBhcnNlclwiLFxuICAgIFwiLS1uby1pbnNlY3VyZS1odHRwLXBhcnNlclwiLFxuICAgIFwiLS11c2Utb3BlbnNzbC1jYVwiLFxuICAgIFwiLS1uby11c2Utb3BlbnNzbC1jYVwiLFxuICAgIFwiLS10bHMtY2lwaGVyLWxpc3RcIixcbiAgICBcIi0tZXhwZXJpbWVudGFsLXRvcC1sZXZlbC1hd2FpdFwiLFxuICAgIFwiLS1uby1leHBlcmltZW50YWwtdG9wLWxldmVsLWF3YWl0XCIsXG4gICAgXCItLW9wZW5zc2wtY29uZmlnXCIsXG4gICAgXCItLWljdS1kYXRhLWRpclwiLFxuICAgIFwiLS12OC1wb29sLXNpemVcIixcbiAgICBcIi0tcmVwb3J0LW9uLWZhdGFsZXJyb3JcIixcbiAgICBcIi0tbm8tcmVwb3J0LW9uLWZhdGFsZXJyb3JcIixcbiAgICBcIi0tdGl0bGVcIixcbiAgICBcIi0tdGxzLW1pbi12MS4xXCIsXG4gICAgXCItLW5vLXRscy1taW4tdjEuMVwiLFxuICAgIFwiLS1yZXBvcnQtZmlsZW5hbWVcIixcbiAgICBcIi0tdHJhY2UtZGVwcmVjYXRpb25cIixcbiAgICBcIi0tbm8tdHJhY2UtZGVwcmVjYXRpb25cIixcbiAgICBcIi0tcmVwb3J0LWNvbXBhY3RcIixcbiAgICBcIi0tbm8tcmVwb3J0LWNvbXBhY3RcIixcbiAgICBcIi0tZXhwZXJpbWVudGFsLXBvbGljeVwiLFxuICAgIFwiLS1leHBlcmltZW50YWwtaW1wb3J0LW1ldGEtcmVzb2x2ZVwiLFxuICAgIFwiLS1uby1leHBlcmltZW50YWwtaW1wb3J0LW1ldGEtcmVzb2x2ZVwiLFxuICAgIFwiLS16ZXJvLWZpbGwtYnVmZmVyc1wiLFxuICAgIFwiLS1uby16ZXJvLWZpbGwtYnVmZmVyc1wiLFxuICAgIFwiLS1yZXBvcnQtZGlyXCIsXG4gICAgXCItLXVzZS1idW5kbGVkLWNhXCIsXG4gICAgXCItLW5vLXVzZS1idW5kbGVkLWNhXCIsXG4gICAgXCItLWV4cGVyaW1lbnRhbC12bS1tb2R1bGVzXCIsXG4gICAgXCItLW5vLWV4cGVyaW1lbnRhbC12bS1tb2R1bGVzXCIsXG4gICAgXCItLWZvcmNlLWFzeW5jLWhvb2tzLWNoZWNrc1wiLFxuICAgIFwiLS1uby1mb3JjZS1hc3luYy1ob29rcy1jaGVja3NcIixcbiAgICBcIi0tZnJvemVuLWludHJpbnNpY3NcIixcbiAgICBcIi0tbm8tZnJvemVuLWludHJpbnNpY3NcIixcbiAgICBcIi0taHVnZS1tYXgtb2xkLWdlbmVyYXRpb24tc2l6ZVwiLFxuICAgIFwiLS1kaXNhYmxlLXByb3RvXCIsXG4gICAgXCItLWRlYnVnLWFycmF5YnVmZmVyLWFsbG9jYXRpb25zXCIsXG4gICAgXCItLW5vLWRlYnVnLWFycmF5YnVmZmVyLWFsbG9jYXRpb25zXCIsXG4gICAgXCItLWNvbmRpdGlvbnNcIixcbiAgICBcIi0tZXhwZXJpbWVudGFsLXdhc2ktdW5zdGFibGUtcHJldmlldzFcIixcbiAgICBcIi0tbm8tZXhwZXJpbWVudGFsLXdhc2ktdW5zdGFibGUtcHJldmlldzFcIixcbiAgICBcIi0tdHJhY2Utc3luYy1pb1wiLFxuICAgIFwiLS1uby10cmFjZS1zeW5jLWlvXCIsXG4gICAgXCItLXVzZS1sYXJnZXBhZ2VzXCIsXG4gICAgXCItLWV4cGVyaW1lbnRhbC1hYm9ydGNvbnRyb2xsZXJcIixcbiAgICBcIi0tZGVidWctcG9ydFwiLFxuICAgIFwiLS1lcy1tb2R1bGUtc3BlY2lmaWVyLXJlc29sdXRpb25cIixcbiAgICBcIi0tcHJvZi1wcm9jZXNzXCIsXG4gICAgXCItQ1wiLFxuICAgIFwiLS1sb2FkZXJcIixcbiAgICBcIi0tcmVwb3J0LWRpcmVjdG9yeVwiLFxuICAgIFwiLXJcIixcbiAgICBcIi0tdHJhY2UtZXZlbnRzLWVuYWJsZWRcIixcbiAgXTtcblxuICAvKlxuICBmdW5jdGlvbiBpc0FjY2VwdGVkKHRvKSB7XG4gICAgaWYgKCF0by5zdGFydHNXaXRoKFwiLVwiKSB8fCB0byA9PT0gXCItLVwiKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCByZWN1cnNpdmVFeHBhbnNpb24gPSBhbGlhc2VzLmdldCh0byk7XG4gICAgaWYgKHJlY3Vyc2l2ZUV4cGFuc2lvbikge1xuICAgICAgaWYgKHJlY3Vyc2l2ZUV4cGFuc2lvblswXSA9PT0gdG8pIHtcbiAgICAgICAgcmVjdXJzaXZlRXhwYW5zaW9uLnNwbGljZSgwLCAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZWN1cnNpdmVFeHBhbnNpb24uZXZlcnkoaXNBY2NlcHRlZCk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmdldCh0bykuZW52VmFyU2V0dGluZ3MgPT09IGtBbGxvd2VkSW5FbnZpcm9ubWVudDtcbiAgfVxuICBmb3IgKGNvbnN0IHsgMDogZnJvbSwgMTogZXhwYW5zaW9uIH0gb2YgYWxpYXNlcykge1xuICAgIGlmIChleHBhbnNpb24uZXZlcnkoaXNBY2NlcHRlZCkpIHtcbiAgICAgIGxldCBjYW5vbmljYWwgPSBmcm9tO1xuICAgICAgaWYgKGNhbm9uaWNhbC5lbmRzV2l0aChcIj1cIikpIHtcbiAgICAgICAgY2Fub25pY2FsID0gY2Fub25pY2FsLnNsaWNlKDAsIGNhbm9uaWNhbC5sZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYW5vbmljYWwuZW5kc1dpdGgoXCIgPGFyZz5cIikpIHtcbiAgICAgICAgY2Fub25pY2FsID0gY2Fub25pY2FsLnNsaWNlKDAsIGNhbm9uaWNhbC5sZW5ndGggLSA0KTtcbiAgICAgIH1cbiAgICAgIGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFncy5wdXNoKGNhbm9uaWNhbCk7XG4gICAgfVxuICB9XG4gICovXG5cbiAgY29uc3QgdHJpbUxlYWRpbmdEYXNoZXMgPSAoZmxhZykgPT4gZmxhZy5yZXBsYWNlKGxlYWRpbmdEYXNoZXNSZWdleCwgXCJcIik7XG5cbiAgLy8gU2F2ZSB0aGVzZSBmb3IgY29tcGFyaXNvbiBhZ2FpbnN0IGZsYWdzIHByb3ZpZGVkIHRvXG4gIC8vIHByb2Nlc3MuYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzLmhhcygpIHdoaWNoIGxhY2sgbGVhZGluZyBkYXNoZXMuXG4gIGNvbnN0IG5vZGVGbGFncyA9IGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFncy5tYXAodHJpbUxlYWRpbmdEYXNoZXMpO1xuXG4gIGNsYXNzIE5vZGVFbnZpcm9ubWVudEZsYWdzU2V0IGV4dGVuZHMgU2V0IHtcbiAgICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXNba0ludGVybmFsXSA9IHsgYXJyYXkgfTtcbiAgICB9XG5cbiAgICBhZGQoKSB7XG4gICAgICAvLyBOby1vcCwgYFNldGAgQVBJIGNvbXBhdGlibGVcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGRlbGV0ZSgpIHtcbiAgICAgIC8vIE5vLW9wLCBgU2V0YCBBUEkgY29tcGF0aWJsZVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgLy8gTm8tb3AsIGBTZXRgIEFQSSBjb21wYXRpYmxlXG4gICAgfVxuXG4gICAgaGFzKGtleSkge1xuICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBgdHJ1ZWAgYmFzZWQgb24gdmFyaW91cyBwb3NzaWJsZVxuICAgICAgLy8gcGVybXV0YXRpb25zIG9mIGEgZmxhZywgaW5jbHVkaW5nIHByZXNlbnQvbWlzc2luZyBsZWFkaW5nXG4gICAgICAvLyBkYXNoKGVzKSBhbmQvb3IgdW5kZXJzY29yZXMtZm9yLWRhc2hlcy5cbiAgICAgIC8vIFN0cmlwcyBhbnkgdmFsdWVzIGFmdGVyIGA9YCwgaW5jbHVzaXZlLlxuICAgICAgLy8gVE9ETyhhZGRhbGVheCk6IEl0IG1pZ2h0IGJlIG1vcmUgZmxleGlibGUgdG8gcnVuIHRoZSBvcHRpb24gcGFyc2VyXG4gICAgICAvLyBvbiBhIGR1bW15IG9wdGlvbiBzZXQgYW5kIHNlZSB3aGV0aGVyIGl0IHJlamVjdHMgdGhlIGFyZ3VtZW50IG9yXG4gICAgICAvLyBub3QuXG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBrZXkgPSBrZXkucmVwbGFjZShyZXBsYWNlVW5kZXJzY29yZXNSZWdleCwgXCItXCIpO1xuICAgICAgICBpZiAobGVhZGluZ0Rhc2hlc1JlZ2V4LnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKHRyYWlsaW5nVmFsdWVzUmVnZXgsIFwiXCIpO1xuICAgICAgICAgIHJldHVybiB0aGlzW2tJbnRlcm5hbF0uYXJyYXkuaW5jbHVkZXMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZUZsYWdzLmluY2x1ZGVzKGtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZW50cmllcygpIHtcbiAgICAgIHRoaXNba0ludGVybmFsXS5zZXQgPz89IG5ldyBTZXQodGhpc1trSW50ZXJuYWxdLmFycmF5KTtcbiAgICAgIHJldHVybiB0aGlzW2tJbnRlcm5hbF0uc2V0LmVudHJpZXMoKTtcbiAgICB9XG5cbiAgICBmb3JFYWNoKGNhbGxiYWNrLCB0aGlzQXJnID0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzW2tJbnRlcm5hbF0uYXJyYXkuZm9yRWFjaCgodikgPT5cbiAgICAgICAgUmVmbGVjdC5hcHBseShjYWxsYmFjaywgdGhpc0FyZywgW3YsIHYsIHRoaXNdKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzW2tJbnRlcm5hbF0uYXJyYXkubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhbHVlcygpIHtcbiAgICAgIHRoaXNba0ludGVybmFsXS5zZXQgPz89IG5ldyBTZXQodGhpc1trSW50ZXJuYWxdLmFycmF5KTtcbiAgICAgIHJldHVybiB0aGlzW2tJbnRlcm5hbF0uc2V0LnZhbHVlcygpO1xuICAgIH1cbiAgfVxuICBOb2RlRW52aXJvbm1lbnRGbGFnc1NldC5wcm90b3R5cGUua2V5cyA9XG4gICAgTm9kZUVudmlyb25tZW50RmxhZ3NTZXRcbiAgICAgIC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9XG4gICAgICBOb2RlRW52aXJvbm1lbnRGbGFnc1NldC5wcm90b3R5cGUudmFsdWVzO1xuXG4gIE9iamVjdC5mcmVlemUoTm9kZUVudmlyb25tZW50RmxhZ3NTZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yKTtcbiAgT2JqZWN0LmZyZWV6ZShOb2RlRW52aXJvbm1lbnRGbGFnc1NldC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKFxuICAgIG5ldyBOb2RlRW52aXJvbm1lbnRGbGFnc1NldChcbiAgICAgIGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFncyxcbiAgICApLFxuICApO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDE4LTIwMjIgdGhlIERlbm8gYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBOb2RlLmpzIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gTUlUIGxpY2Vuc2UuXG5pbXBvcnQgKiBhcyBEZW5vVW5zdGFibGUgZnJvbSBcIi4uL19kZW5vX3Vuc3RhYmxlLnRzXCI7XG5pbXBvcnQgeyB3YXJuTm90SW1wbGVtZW50ZWQgfSBmcm9tIFwiLi9fdXRpbHMudHNcIjtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCIuL2V2ZW50cy50c1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi9pbnRlcm5hbC92YWxpZGF0b3JzLm1qc1wiO1xuaW1wb3J0IHsgRVJSX0lOVkFMSURfQVJHX1RZUEUsIEVSUl9VTktOT1dOX1NJR05BTCB9IGZyb20gXCIuL2ludGVybmFsL2Vycm9ycy50c1wiO1xuaW1wb3J0IHsgZ2V0T3B0aW9uVmFsdWUgfSBmcm9tIFwiLi9pbnRlcm5hbC9vcHRpb25zLnRzXCI7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiLi4vX3V0aWwvYXNzZXJ0LnRzXCI7XG5pbXBvcnQgeyBmcm9tRmlsZVVybCwgam9pbiB9IGZyb20gXCIuLi9wYXRoL21vZC50c1wiO1xuaW1wb3J0IHtcbiAgYXJjaCxcbiAgY2hkaXIsXG4gIGN3ZCxcbiAgZW52LFxuICBuZXh0VGljayBhcyBfbmV4dFRpY2ssXG4gIHBpZCxcbiAgcGxhdGZvcm0sXG4gIHZlcnNpb24sXG4gIHZlcnNpb25zLFxufSBmcm9tIFwiLi9fcHJvY2Vzcy9wcm9jZXNzLnRzXCI7XG5pbXBvcnQgeyBfZXhpdGluZyB9IGZyb20gXCIuL19wcm9jZXNzL2V4aXRpbmcudHNcIjtcbmV4cG9ydCB7XG4gIF9uZXh0VGljayBhcyBuZXh0VGljayxcbiAgYXJjaCxcbiAgY2hkaXIsXG4gIGN3ZCxcbiAgZW52LFxuICBwaWQsXG4gIHBsYXRmb3JtLFxuICB2ZXJzaW9uLFxuICB2ZXJzaW9ucyxcbn07XG5pbXBvcnQge1xuICBzdGRlcnIgYXMgc3RkZXJyXyxcbiAgc3RkaW4gYXMgc3RkaW5fLFxuICBzdGRvdXQgYXMgc3Rkb3V0Xyxcbn0gZnJvbSBcIi4vX3Byb2Nlc3Mvc3RyZWFtcy5tanNcIjtcbmltcG9ydCB7IGNvcmUgfSBmcm9tIFwiLi9fY29yZS50c1wiO1xuaW1wb3J0IHsgcHJvY2Vzc1RpY2tzQW5kUmVqZWN0aW9ucyB9IGZyb20gXCIuL19uZXh0X3RpY2sudHNcIjtcblxuLy8gVE9ETyhrdDNrKTogR2l2ZSBiZXR0ZXIgdHlwZXMgdG8gc3RkaW8gb2JqZWN0c1xuLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbmNvbnN0IHN0ZGVyciA9IHN0ZGVycl8gYXMgYW55O1xuLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbmNvbnN0IHN0ZGluID0gc3RkaW5fIGFzIGFueTtcbi8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG5jb25zdCBzdGRvdXQgPSBzdGRvdXRfIGFzIGFueTtcbmV4cG9ydCB7IHN0ZGVyciwgc3RkaW4sIHN0ZG91dCB9O1xuaW1wb3J0IHsgZ2V0QmluZGluZyB9IGZyb20gXCIuL2ludGVybmFsX2JpbmRpbmcvbW9kLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdOYW1lIH0gZnJvbSBcIi4vaW50ZXJuYWxfYmluZGluZy9tb2QudHNcIjtcbmltcG9ydCB7IGJ1aWxkQWxsb3dlZEZsYWdzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcHJvY2Vzcy9wZXJfdGhyZWFkLm1qc1wiO1xuXG5jb25zdCBub3RJbXBsZW1lbnRlZEV2ZW50cyA9IFtcbiAgXCJkaXNjb25uZWN0XCIsXG4gIFwibWVzc2FnZVwiLFxuICBcIm11bHRpcGxlUmVzb2x2ZXNcIixcbiAgXCJyZWplY3Rpb25IYW5kbGVkXCIsXG4gIFwid29ya2VyXCIsXG5dO1xuXG4vLyBUaGUgZmlyc3QgMiBpdGVtcyBhcmUgcGxhY2Vob2xkZXJzLlxuLy8gVGhleSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBiZWxvdyBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbHMuXG5jb25zdCBhcmd2ID0gW1wiXCIsIFwiXCIsIC4uLkRlbm8uYXJnc107XG4vLyBPdmVyd3JpdGVzIHRoZSAxc3QgaXRlbSB3aXRoIGdldHRlci5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcmd2LCBcIjBcIiwgeyBnZXQ6IERlbm8uZXhlY1BhdGggfSk7XG4vLyBPdmVyd3JpdGVzIHRoZSAyc3QgaXRlbSB3aXRoIGdldHRlci5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcmd2LCBcIjFcIiwge1xuICBnZXQ6ICgpID0+IHtcbiAgICBpZiAoRGVuby5tYWluTW9kdWxlLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKSkge1xuICAgICAgcmV0dXJuIGZyb21GaWxlVXJsKERlbm8ubWFpbk1vZHVsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBqb2luKERlbm8uY3dkKCksIFwiJGRlbm8kbm9kZS5qc1wiKTtcbiAgICB9XG4gIH0sXG59KTtcblxuLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19leGl0X2NvZGUgKi9cbmV4cG9ydCBjb25zdCBleGl0ID0gKGNvZGU/OiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgaWYgKGNvZGUgfHwgY29kZSA9PT0gMCkge1xuICAgIGlmICh0eXBlb2YgY29kZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgcGFyc2VkQ29kZSA9IHBhcnNlSW50KGNvZGUpO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IGlzTmFOKHBhcnNlZENvZGUpID8gdW5kZWZpbmVkIDogcGFyc2VkQ29kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IGNvZGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwcm9jZXNzLl9leGl0aW5nKSB7XG4gICAgcHJvY2Vzcy5fZXhpdGluZyA9IHRydWU7XG4gICAgLy8gRklYTUUoYmFydGxvbWllanUpOiB0aGlzIGlzIHdyb25nLCB3ZSB3b24ndCBiZSB1c2luZyBzeXNjYWxsIHRvIGV4aXRcbiAgICAvLyBhbmQgdGh1cyB0aGUgYHVubG9hZGAgZXZlbnQgd2lsbCBub3QgYmUgZW1pdHRlZCB0byBwcm9wZXJseSB0cmlnZ2VyIFwiZW1pdFwiXG4gICAgLy8gZXZlbnQgb24gYHByb2Nlc3NgLlxuICAgIHByb2Nlc3MuZW1pdChcImV4aXRcIiwgcHJvY2Vzcy5leGl0Q29kZSB8fCAwKTtcbiAgfVxuXG4gIERlbm8uZXhpdChwcm9jZXNzLmV4aXRDb2RlIHx8IDApO1xufTtcblxuZnVuY3Rpb24gYWRkUmVhZE9ubHlQcm9jZXNzQWxpYXMoXG4gIG5hbWU6IHN0cmluZyxcbiAgb3B0aW9uOiBzdHJpbmcsXG4gIGVudW1lcmFibGUgPSB0cnVlLFxuKSB7XG4gIGNvbnN0IHZhbHVlID0gZ2V0T3B0aW9uVmFsdWUob3B0aW9uKTtcblxuICBpZiAodmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvY2VzcywgbmFtZSwge1xuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZSxcbiAgICAgIHZhbHVlLFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdhcm5pbmdPYmplY3QoXG4gIHdhcm5pbmc6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nLFxuICBjb2RlPzogc3RyaW5nLFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICBjdG9yPzogRnVuY3Rpb24sXG4gIGRldGFpbD86IHN0cmluZyxcbik6IEVycm9yIHtcbiAgYXNzZXJ0KHR5cGVvZiB3YXJuaW5nID09PSBcInN0cmluZ1wiKTtcblxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBjb25zdCB3YXJuaW5nRXJyOiBhbnkgPSBuZXcgRXJyb3Iod2FybmluZyk7XG4gIHdhcm5pbmdFcnIubmFtZSA9IFN0cmluZyh0eXBlIHx8IFwiV2FybmluZ1wiKTtcblxuICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgd2FybmluZ0Vyci5jb2RlID0gY29kZTtcbiAgfVxuICBpZiAoZGV0YWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICB3YXJuaW5nRXJyLmRldGFpbCA9IGRldGFpbDtcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmUgdGhpcyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIGxpYi5kb20uZC50c1xuICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh3YXJuaW5nRXJyLCBjdG9yIHx8IHByb2Nlc3MuZW1pdFdhcm5pbmcpO1xuXG4gIHJldHVybiB3YXJuaW5nRXJyO1xufVxuXG5mdW5jdGlvbiBkb0VtaXRXYXJuaW5nKHdhcm5pbmc6IEVycm9yKSB7XG4gIHByb2Nlc3MuZW1pdChcIndhcm5pbmdcIiwgd2FybmluZyk7XG59XG5cbi8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfZW1pdHdhcm5pbmdfd2FybmluZ19vcHRpb25zICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdFdhcm5pbmcoXG4gIHdhcm5pbmc6IHN0cmluZyB8IEVycm9yLFxuICB0eXBlOlxuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgYmFuLXR5cGVzXG4gICAgfCB7IHR5cGU6IHN0cmluZzsgZGV0YWlsOiBzdHJpbmc7IGNvZGU6IHN0cmluZzsgY3RvcjogRnVuY3Rpb24gfVxuICAgIHwgc3RyaW5nXG4gICAgfCBudWxsLFxuICBjb2RlPzogc3RyaW5nLFxuICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICBjdG9yPzogRnVuY3Rpb24sXG4pIHtcbiAgbGV0IGRldGFpbDtcblxuICBpZiAodHlwZSAhPT0gbnVsbCAmJiB0eXBlb2YgdHlwZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgIGN0b3IgPSB0eXBlLmN0b3I7XG4gICAgY29kZSA9IHR5cGUuY29kZTtcblxuICAgIGlmICh0eXBlb2YgdHlwZS5kZXRhaWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGRldGFpbCA9IHR5cGUuZGV0YWlsO1xuICAgIH1cblxuICAgIHR5cGUgPSB0eXBlLnR5cGUgfHwgXCJXYXJuaW5nXCI7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGN0b3IgPSB0eXBlO1xuICAgIGNvZGUgPSB1bmRlZmluZWQ7XG4gICAgdHlwZSA9IFwiV2FybmluZ1wiO1xuICB9XG5cbiAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhbGlkYXRlU3RyaW5nKHR5cGUsIFwidHlwZVwiKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29kZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY3RvciA9IGNvZGU7XG4gICAgY29kZSA9IHVuZGVmaW5lZDtcbiAgfSBlbHNlIGlmIChjb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YWxpZGF0ZVN0cmluZyhjb2RlLCBcImNvZGVcIik7XG4gIH1cblxuICBpZiAodHlwZW9mIHdhcm5pbmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICB3YXJuaW5nID0gY3JlYXRlV2FybmluZ09iamVjdCh3YXJuaW5nLCB0eXBlIGFzIHN0cmluZywgY29kZSwgY3RvciwgZGV0YWlsKTtcbiAgfSBlbHNlIGlmICghKHdhcm5pbmcgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJ3YXJuaW5nXCIsIFtcIkVycm9yXCIsIFwic3RyaW5nXCJdLCB3YXJuaW5nKTtcbiAgfVxuXG4gIGlmICh3YXJuaW5nLm5hbWUgPT09IFwiRGVwcmVjYXRpb25XYXJuaW5nXCIpIHtcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgIGlmICgocHJvY2VzcyBhcyBhbnkpLm5vRGVwcmVjYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICAgIGlmICgocHJvY2VzcyBhcyBhbnkpLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgIC8vIERlbGF5IHRocm93aW5nIHRoZSBlcnJvciB0byBndWFyYW50ZWUgdGhhdCBhbGwgZm9ybWVyIHdhcm5pbmdzIHdlcmVcbiAgICAgIC8vIHByb3Blcmx5IGxvZ2dlZC5cbiAgICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhyb3cgd2FybmluZztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soZG9FbWl0V2FybmluZywgd2FybmluZyk7XG59XG5cbmZ1bmN0aW9uIGhydGltZSh0aW1lPzogW251bWJlciwgbnVtYmVyXSk6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBtaWxsaSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCBzZWMgPSBNYXRoLmZsb29yKG1pbGxpIC8gMTAwMCk7XG4gIGNvbnN0IG5hbm8gPSBNYXRoLmZsb29yKG1pbGxpICogMV8wMDBfMDAwIC0gc2VjICogMV8wMDBfMDAwXzAwMCk7XG4gIGlmICghdGltZSkge1xuICAgIHJldHVybiBbc2VjLCBuYW5vXTtcbiAgfVxuICBjb25zdCBbcHJldlNlYywgcHJldk5hbm9dID0gdGltZTtcbiAgcmV0dXJuIFtzZWMgLSBwcmV2U2VjLCBuYW5vIC0gcHJldk5hbm9dO1xufVxuXG5ocnRpbWUuYmlnaW50ID0gZnVuY3Rpb24gKCk6IEJpZ0ludCB7XG4gIGNvbnN0IFtzZWMsIG5hbm9dID0gaHJ0aW1lKCk7XG4gIHJldHVybiBCaWdJbnQoc2VjKSAqIDFfMDAwXzAwMF8wMDBuICsgQmlnSW50KG5hbm8pO1xufTtcblxuZnVuY3Rpb24gbWVtb3J5VXNhZ2UoKToge1xuICByc3M6IG51bWJlcjtcbiAgaGVhcFRvdGFsOiBudW1iZXI7XG4gIGhlYXBVc2VkOiBudW1iZXI7XG4gIGV4dGVybmFsOiBudW1iZXI7XG4gIGFycmF5QnVmZmVyczogbnVtYmVyO1xufSB7XG4gIHJldHVybiB7XG4gICAgLi4uRGVuby5tZW1vcnlVc2FnZSgpLFxuICAgIGFycmF5QnVmZmVyczogMCxcbiAgfTtcbn1cblxubWVtb3J5VXNhZ2UucnNzID0gZnVuY3Rpb24gKCk6IG51bWJlciB7XG4gIHJldHVybiBtZW1vcnlVc2FnZSgpLnJzcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBraWxsKHBpZDogbnVtYmVyLCBzaWc6IERlbm8uU2lnbmFsIHwgbnVtYmVyID0gXCJTSUdURVJNXCIpIHtcbiAgaWYgKHBpZCAhPSAocGlkIHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJwaWRcIiwgXCJudW1iZXJcIiwgcGlkKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2lnID09PSBcInN0cmluZ1wiKSB7XG4gICAgdHJ5IHtcbiAgICAgIERlbm8ua2lsbChwaWQsIHNpZyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVSUl9VTktOT1dOX1NJR05BTChzaWcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVSUl9VTktOT1dOX1NJR05BTChzaWcudG9TdHJpbmcoKSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcihlcnI6IGFueSwgb3JpZ2luOiBzdHJpbmcpIHtcbiAgLy8gVGhlIG9yaWdpbiBwYXJhbWV0ZXIgY2FuIGJlICd1bmhhbmRsZWRSZWplY3Rpb24nIG9yICd1bmNhdWdodEV4Y2VwdGlvbidcbiAgLy8gZGVwZW5kaW5nIG9uIGhvdyB0aGUgdW5jYXVnaHQgZXhjZXB0aW9uIHdhcyBjcmVhdGVkLiBJbiBOb2RlLmpzLFxuICAvLyBleGNlcHRpb25zIHRocm93biBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgYSBDb21tb25KUyBtb2R1bGUgYXJlIHJlcG9ydGVkIGFzXG4gIC8vICd1bmNhdWdodEV4Y2VwdGlvbicsIHdoaWxlIGV4Y2VwdGlvbnMgdGhyb3duIGZyb20gdGhlIHRvcCBsZXZlbCBvZiBhbiBFU01cbiAgLy8gbW9kdWxlIGFyZSByZXBvcnRlZCBhcyAndW5oYW5kbGVkUmVqZWN0aW9uJy4gRGVubyBkb2VzIG5vdCBoYXZlIGEgdHJ1ZVxuICAvLyBDb21tb25KUyBpbXBsZW1lbnRhdGlvbiwgc28gYWxsIGV4Y2VwdGlvbnMgdGhyb3duIGZyb20gdGhlIHRvcCBsZXZlbCBhcmVcbiAgLy8gcmVwb3J0ZWQgYXMgJ3VuY2F1Z2h0RXhjZXB0aW9uJy5cbiAgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25Nb25pdG9yXCIsIGVyciwgb3JpZ2luKTtcbiAgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIiwgZXJyLCBvcmlnaW4pO1xufVxuXG5jbGFzcyBQcm9jZXNzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChwcm9jZXNzLmxpc3RlbmVyQ291bnQoXCJ1bmhhbmRsZWRSZWplY3Rpb25cIikgPT09IDApIHtcbiAgICAgICAgLy8gVGhlIE5vZGUuanMgZGVmYXVsdCBiZWhhdmlvciBpcyB0byByYWlzZSBhbiB1bmNhdWdodCBleGNlcHRpb24gaWZcbiAgICAgICAgLy8gYW4gdW5oYW5kbGVkIHJlamVjdGlvbiBvY2N1cnMgYW5kIHRoZXJlIGFyZSBubyB1bmhhbmRsZWRSZWplY3Rpb25cbiAgICAgICAgLy8gbGlzdGVuZXJzLlxuICAgICAgICBpZiAocHJvY2Vzcy5saXN0ZW5lckNvdW50KFwidW5jYXVnaHRFeGNlcHRpb25cIikgPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBldmVudC5yZWFzb247XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIoZXZlbnQucmVhc29uLCBcInVuaGFuZGxlZFJlamVjdGlvblwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcHJvY2Vzcy5lbWl0KFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsIGV2ZW50LnJlYXNvbiwgZXZlbnQucHJvbWlzZSk7XG4gICAgfSk7XG5cbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChwcm9jZXNzLmxpc3RlbmVyQ291bnQoXCJ1bmNhdWdodEV4Y2VwdGlvblwiKSA+IDApIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cblxuICAgICAgdW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKGV2ZW50LmVycm9yLCBcInVuY2F1Z2h0RXhjZXB0aW9uXCIpO1xuICAgIH0pO1xuXG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIChlKSA9PiB7XG4gICAgICBzdXBlci5lbWl0KFwiYmVmb3JlRXhpdFwiLCBwcm9jZXNzLmV4aXRDb2RlIHx8IDApO1xuICAgICAgcHJvY2Vzc1RpY2tzQW5kUmVqZWN0aW9ucygpO1xuICAgICAgaWYgKGNvcmUuZXZlbnRMb29wSGFzTW9yZVdvcmsoKSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmxvYWRcIiwgKCkgPT4ge1xuICAgICAgaWYgKCFwcm9jZXNzLl9leGl0aW5nKSB7XG4gICAgICAgIHByb2Nlc3MuX2V4aXRpbmcgPSB0cnVlO1xuICAgICAgICBzdXBlci5lbWl0KFwiZXhpdFwiLCBwcm9jZXNzLmV4aXRDb2RlIHx8IDApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19hcmNoICovXG4gIGFyY2ggPSBhcmNoO1xuXG4gIC8qKlxuICAgKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfYXJndlxuICAgKiBSZWFkIHBlcm1pc3Npb25zIGFyZSByZXF1aXJlZCBpbiBvcmRlciB0byBnZXQgdGhlIGV4ZWN1dGFibGUgcm91dGVcbiAgICovXG4gIGFyZ3YgPSBhcmd2O1xuXG4gIC8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfY2hkaXJfZGlyZWN0b3J5ICovXG4gIGNoZGlyID0gY2hkaXI7XG5cbiAgLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3Njb25maWcgKi9cbiAgY29uZmlnID0ge1xuICAgIHRhcmdldF9kZWZhdWx0czoge30sXG4gICAgdmFyaWFibGVzOiB7fSxcbiAgfTtcblxuICAvKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19wcm9jZXNzX2N3ZCAqL1xuICBjd2QgPSBjd2Q7XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19lbnZcbiAgICogUmVxdWlyZXMgZW52IHBlcm1pc3Npb25zXG4gICAqL1xuICBlbnYgPSBlbnY7XG5cbiAgLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19leGVjYXJndiAqL1xuICBleGVjQXJndjogc3RyaW5nW10gPSBbXTtcblxuICAvKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19wcm9jZXNzX2V4aXRfY29kZSAqL1xuICBleGl0ID0gZXhpdDtcblxuICBfZXhpdGluZyA9IF9leGl0aW5nO1xuXG4gIC8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzZXhpdGNvZGVfMSAqL1xuICBleGl0Q29kZTogdW5kZWZpbmVkIHwgbnVtYmVyID0gdW5kZWZpbmVkO1xuXG4gIC8vIFR5cGVkIGFzIGFueSB0byBhdm9pZCBpbXBvcnRpbmcgXCJtb2R1bGVcIiBtb2R1bGUgZm9yIHR5cGVzXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIG1haW5Nb2R1bGU6IGFueSA9IHVuZGVmaW5lZDtcblxuICAvKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19wcm9jZXNzX25leHR0aWNrX2NhbGxiYWNrX2FyZ3MgKi9cbiAgbmV4dFRpY2sgPSBfbmV4dFRpY2s7XG5cbiAgLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19ldmVudHMgKi9cbiAgb3ZlcnJpZGUgb24oZXZlbnQ6IFwiZXhpdFwiLCBsaXN0ZW5lcjogKGNvZGU6IG51bWJlcikgPT4gdm9pZCk6IHRoaXM7XG4gIG92ZXJyaWRlIG9uKFxuICAgIGV2ZW50OiB0eXBlb2Ygbm90SW1wbGVtZW50ZWRFdmVudHNbbnVtYmVyXSxcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICAgIGxpc3RlbmVyOiBGdW5jdGlvbixcbiAgKTogdGhpcztcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgb3ZlcnJpZGUgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHRoaXMge1xuICAgIGlmIChub3RJbXBsZW1lbnRlZEV2ZW50cy5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgIHdhcm5Ob3RJbXBsZW1lbnRlZChgcHJvY2Vzcy5vbihcIiR7ZXZlbnR9XCIpYCk7XG4gICAgICBzdXBlci5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRzV2l0aChcIlNJR1wiKSkge1xuICAgICAgaWYgKGV2ZW50ID09PSBcIlNJR0JSRUFLXCIgJiYgRGVuby5idWlsZC5vcyAhPT0gXCJ3aW5kb3dzXCIpIHtcbiAgICAgICAgLy8gSWdub3JlcyBTSUdCUkVBSyBpZiB0aGUgcGxhdGZvcm0gaXMgbm90IHdpbmRvd3MuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBEZW5vVW5zdGFibGUuYWRkU2lnbmFsTGlzdGVuZXIoZXZlbnQgYXMgRGVuby5TaWduYWwsIGxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIub24oZXZlbnQsIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG92ZXJyaWRlIG9mZihldmVudDogXCJleGl0XCIsIGxpc3RlbmVyOiAoY29kZTogbnVtYmVyKSA9PiB2b2lkKTogdGhpcztcbiAgb3ZlcnJpZGUgb2ZmKFxuICAgIGV2ZW50OiB0eXBlb2Ygbm90SW1wbGVtZW50ZWRFdmVudHNbbnVtYmVyXSxcbiAgICAvLyBkZW5vLWxpbnQtaWdub3JlIGJhbi10eXBlc1xuICAgIGxpc3RlbmVyOiBGdW5jdGlvbixcbiAgKTogdGhpcztcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgb3ZlcnJpZGUgb2ZmKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB0aGlzIHtcbiAgICBpZiAobm90SW1wbGVtZW50ZWRFdmVudHMuaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICB3YXJuTm90SW1wbGVtZW50ZWQoYHByb2Nlc3Mub2ZmKFwiJHtldmVudH1cIilgKTtcbiAgICAgIHN1cGVyLm9mZihldmVudCwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhcnRzV2l0aChcIlNJR1wiKSkge1xuICAgICAgaWYgKGV2ZW50ID09PSBcIlNJR0JSRUFLXCIgJiYgRGVuby5idWlsZC5vcyAhPT0gXCJ3aW5kb3dzXCIpIHtcbiAgICAgICAgLy8gSWdub3JlcyBTSUdCUkVBSyBpZiB0aGUgcGxhdGZvcm0gaXMgbm90IHdpbmRvd3MuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBEZW5vVW5zdGFibGUucmVtb3ZlU2lnbmFsTGlzdGVuZXIoZXZlbnQgYXMgRGVuby5TaWduYWwsIGxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBkZW5vLWxpbnQtaWdub3JlIG5vLWV4cGxpY2l0LWFueVxuICBvdmVycmlkZSBlbWl0KGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKGV2ZW50LnN0YXJ0c1dpdGgoXCJTSUdcIikpIHtcbiAgICAgIGlmIChldmVudCA9PT0gXCJTSUdCUkVBS1wiICYmIERlbm8uYnVpbGQub3MgIT09IFwid2luZG93c1wiKSB7XG4gICAgICAgIC8vIElnbm9yZXMgU0lHQlJFQUsgaWYgdGhlIHBsYXRmb3JtIGlzIG5vdCB3aW5kb3dzLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgRGVuby5raWxsKERlbm8ucGlkLCBldmVudCBhcyBEZW5vLlNpZ25hbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdXBlci5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHByZXBlbmRMaXN0ZW5lcihcbiAgICBldmVudDogXCJleGl0XCIsXG4gICAgbGlzdGVuZXI6IChjb2RlOiBudW1iZXIpID0+IHZvaWQsXG4gICk6IHRoaXM7XG4gIG92ZXJyaWRlIHByZXBlbmRMaXN0ZW5lcihcbiAgICBldmVudDogdHlwZW9mIG5vdEltcGxlbWVudGVkRXZlbnRzW251bWJlcl0sXG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBiYW4tdHlwZXNcbiAgICBsaXN0ZW5lcjogRnVuY3Rpb24sXG4gICk6IHRoaXM7XG4gIG92ZXJyaWRlIHByZXBlbmRMaXN0ZW5lcihcbiAgICBldmVudDogc3RyaW5nLFxuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgKTogdGhpcyB7XG4gICAgaWYgKG5vdEltcGxlbWVudGVkRXZlbnRzLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgd2Fybk5vdEltcGxlbWVudGVkKGBwcm9jZXNzLnByZXBlbmRMaXN0ZW5lcihcIiR7ZXZlbnR9XCIpYCk7XG4gICAgICBzdXBlci5wcmVwZW5kTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXJ0c1dpdGgoXCJTSUdcIikpIHtcbiAgICAgIGlmIChldmVudCA9PT0gXCJTSUdCUkVBS1wiICYmIERlbm8uYnVpbGQub3MgIT09IFwid2luZG93c1wiKSB7XG4gICAgICAgIC8vIElnbm9yZXMgU0lHQlJFQUsgaWYgdGhlIHBsYXRmb3JtIGlzIG5vdCB3aW5kb3dzLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgRGVub1Vuc3RhYmxlLmFkZFNpZ25hbExpc3RlbmVyKGV2ZW50IGFzIERlbm8uU2lnbmFsLCBsaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLnByZXBlbmRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19waWQgKi9cbiAgcGlkID0gcGlkO1xuXG4gIC8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfcGxhdGZvcm0gKi9cbiAgcGxhdGZvcm0gPSBwbGF0Zm9ybTtcblxuICBvdmVycmlkZSBhZGRMaXN0ZW5lcihldmVudDogXCJleGl0XCIsIGxpc3RlbmVyOiAoY29kZTogbnVtYmVyKSA9PiB2b2lkKTogdGhpcztcbiAgb3ZlcnJpZGUgYWRkTGlzdGVuZXIoXG4gICAgZXZlbnQ6IHR5cGVvZiBub3RJbXBsZW1lbnRlZEV2ZW50c1tudW1iZXJdLFxuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgYmFuLXR5cGVzXG4gICAgbGlzdGVuZXI6IEZ1bmN0aW9uLFxuICApOiB0aGlzO1xuICBvdmVycmlkZSBhZGRMaXN0ZW5lcihcbiAgICBldmVudDogc3RyaW5nLFxuICAgIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gICAgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCxcbiAgKTogdGhpcyB7XG4gICAgaWYgKG5vdEltcGxlbWVudGVkRXZlbnRzLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgd2Fybk5vdEltcGxlbWVudGVkKGBwcm9jZXNzLmFkZExpc3RlbmVyKFwiJHtldmVudH1cIilgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vbihldmVudCwgbGlzdGVuZXIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVtb3ZlTGlzdGVuZXIoXG4gICAgZXZlbnQ6IFwiZXhpdFwiLFxuICAgIGxpc3RlbmVyOiAoY29kZTogbnVtYmVyKSA9PiB2b2lkLFxuICApOiB0aGlzO1xuICBvdmVycmlkZSByZW1vdmVMaXN0ZW5lcihcbiAgICBldmVudDogdHlwZW9mIG5vdEltcGxlbWVudGVkRXZlbnRzW251bWJlcl0sXG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBiYW4tdHlwZXNcbiAgICBsaXN0ZW5lcjogRnVuY3Rpb24sXG4gICk6IHRoaXM7XG4gIG92ZXJyaWRlIHJlbW92ZUxpc3RlbmVyKFxuICAgIGV2ZW50OiBzdHJpbmcsXG4gICAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgICBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLFxuICApOiB0aGlzIHtcbiAgICBpZiAobm90SW1wbGVtZW50ZWRFdmVudHMuaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICB3YXJuTm90SW1wbGVtZW50ZWQoYHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoXCIke2V2ZW50fVwiKWApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9mZihldmVudCwgbGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaGlnaC1yZXNvbHV0aW9uIHJlYWwgdGltZSBpbiBhIFtzZWNvbmRzLCBuYW5vc2Vjb25kc11cbiAgICogdHVwbGUuXG4gICAqXG4gICAqIE5vdGU6IFlvdSBuZWVkIHRvIGdpdmUgLS1hbGxvdy1ocnRpbWUgcGVybWlzc2lvbiB0byBEZW5vIHRvIGFjdHVhbGx5IGdldFxuICAgKiBuYW5vc2Vjb25kcyBwcmVjaXNpb24gdmFsdWVzLiBJZiB5b3UgZG9uJ3QgZ2l2ZSAnaHJ0aW1lJyBwZXJtaXNzaW9uLCB0aGUgcmV0dXJuZWRcbiAgICogdmFsdWVzIG9ubHkgaGF2ZSBtaWxsaXNlY29uZHMgcHJlY2lzaW9uLlxuICAgKlxuICAgKiBgdGltZWAgaXMgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgbXVzdCBiZSB0aGUgcmVzdWx0IG9mIGEgcHJldmlvdXMgcHJvY2Vzcy5ocnRpbWUoKSBjYWxsIHRvIGRpZmYgd2l0aCB0aGUgY3VycmVudCB0aW1lLlxuICAgKlxuICAgKiBUaGVzZSB0aW1lcyBhcmUgcmVsYXRpdmUgdG8gYW4gYXJiaXRyYXJ5IHRpbWUgaW4gdGhlIHBhc3QsIGFuZCBub3QgcmVsYXRlZCB0byB0aGUgdGltZSBvZiBkYXkgYW5kIHRoZXJlZm9yZSBub3Qgc3ViamVjdCB0byBjbG9jayBkcmlmdC4gVGhlIHByaW1hcnkgdXNlIGlzIGZvciBtZWFzdXJpbmcgcGVyZm9ybWFuY2UgYmV0d2VlbiBpbnRlcnZhbHMuXG4gICAqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19ocnRpbWVfdGltZVxuICAgKi9cbiAgaHJ0aW1lID0gaHJ0aW1lO1xuXG4gIC8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNza2lsbHBpZC1zaWduYWwgKi9cbiAga2lsbCA9IGtpbGw7XG5cbiAgbWVtb3J5VXNhZ2UgPSBtZW1vcnlVc2FnZTtcblxuICAvKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19wcm9jZXNzX3N0ZGVyciAqL1xuICBzdGRlcnIgPSBzdGRlcnI7XG5cbiAgLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc19zdGRpbiAqL1xuICBzdGRpbiA9IHN0ZGluO1xuXG4gIC8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3Nfc3Rkb3V0ICovXG4gIHN0ZG91dCA9IHN0ZG91dDtcblxuICAvKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19wcm9jZXNzX3ZlcnNpb24gKi9cbiAgdmVyc2lvbiA9IHZlcnNpb247XG5cbiAgLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NfcHJvY2Vzc192ZXJzaW9ucyAqL1xuICB2ZXJzaW9ucyA9IHZlcnNpb25zO1xuXG4gIC8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzX3Byb2Nlc3NfZW1pdHdhcm5pbmdfd2FybmluZ19vcHRpb25zICovXG4gIGVtaXRXYXJuaW5nID0gZW1pdFdhcm5pbmc7XG5cbiAgYmluZGluZyhuYW1lOiBCaW5kaW5nTmFtZSkge1xuICAgIHJldHVybiBnZXRCaW5kaW5nKG5hbWUpO1xuICB9XG5cbiAgLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3N1bWFza21hc2sgKi9cbiAgdW1hc2soKSB7XG4gICAgLy8gQWx3YXlzIHJldHVybiB0aGUgc3lzdGVtIGRlZmF1bHQgdW1hc2sgdmFsdWUuXG4gICAgLy8gV2UgZG9uJ3QgdXNlIERlbm8udW1hc2sgaGVyZSBiZWNhdXNlIGl0IGhhcyBhIHJhY2VcbiAgICAvLyBjb25kaXRpb24gYnVnLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVub19zdGQvaXNzdWVzLzE4OTMjaXNzdWVjb21tZW50LTEwMzI4OTc3NzlcbiAgICByZXR1cm4gMG8yMjtcbiAgfVxuXG4gIC8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzZ2V0dWlkICovXG4gIGdldHVpZCgpOiBudW1iZXIge1xuICAgIC8vIFRPRE8oa3Qzayk6IHJldHVybiB1c2VyIGlkIGluIG1hYyBhbmQgbGludXhcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgLyoqIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcHJvY2Vzcy5odG1sI3Byb2Nlc3NnZXRnaWQgKi9cbiAgZ2V0Z2lkKCk6IG51bWJlciB7XG4gICAgLy8gVE9ETyhrdDNrKTogcmV0dXJuIGdyb3VwIGlkIGluIG1hYyBhbmQgbGludXhcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgLy8gVE9ETyhrdDNrKTogSW1wbGVtZW50IHRoaXMgd2hlbiB3ZSBhZGRlZCAtZSBvcHRpb24gdG8gbm9kZSBjb21wYXQgbW9kZVxuICBfZXZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzZXhlY3BhdGggKi9cbiAgZ2V0IGV4ZWNQYXRoKCkge1xuICAgIHJldHVybiBhcmd2WzBdO1xuICB9XG5cbiAgI3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gIC8qKiBodHRwczovL25vZGVqcy5vcmcvYXBpL3Byb2Nlc3MuaHRtbCNwcm9jZXNzdXB0aW1lICovXG4gIHVwdGltZSgpIHtcbiAgICByZXR1cm4gKERhdGUubm93KCkgLSB0aGlzLiNzdGFydFRpbWUpIC8gMTAwMDtcbiAgfVxuXG4gICNhbGxvd2VkRmxhZ3MgPSBidWlsZEFsbG93ZWRGbGFncygpO1xuICAvKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc2FsbG93ZWRub2RlZW52aXJvbm1lbnRmbGFncyAqL1xuICBnZXQgYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzKCkge1xuICAgIHJldHVybiB0aGlzLiNhbGxvd2VkRmxhZ3M7XG4gIH1cblxuICBmZWF0dXJlcyA9IHsgaW5zcGVjdG9yOiBmYWxzZSB9O1xufVxuXG4vKiogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19wcm9jZXNzICovXG5jb25zdCBwcm9jZXNzID0gbmV3IFByb2Nlc3MoKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb2Nlc3MsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgd3JpdGFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gIHZhbHVlOiBcInByb2Nlc3NcIixcbn0pO1xuXG5hZGRSZWFkT25seVByb2Nlc3NBbGlhcyhcIm5vRGVwcmVjYXRpb25cIiwgXCItLW5vLWRlcHJlY2F0aW9uXCIpO1xuYWRkUmVhZE9ubHlQcm9jZXNzQWxpYXMoXCJ0aHJvd0RlcHJlY2F0aW9uXCIsIFwiLS10aHJvdy1kZXByZWNhdGlvblwiKTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxpc3RlbmVyID0gcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcjtcbmV4cG9ydCBjb25zdCByZW1vdmVBbGxMaXN0ZW5lcnMgPSBwcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycztcblxuZXhwb3J0IGRlZmF1bHQgcHJvY2VzcztcblxuLy9UT0RPKFNvcmVtd2FyKVxuLy9SZW1vdmUgb24gMS4wXG4vL0tlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggc3RkXG5leHBvcnQgeyBwcm9jZXNzIH07XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGxlemVyL2xyQDEuMi4zKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydCBfX1Byb2Nlc3MkIGZyb20gXCJodHRwczovL2Rlbm8ubGFuZC9zdGRAMC4xNTMuMC9ub2RlL3Byb2Nlc3MudHNcIjtpbXBvcnR7UGFyc2VyIGFzIHEsTm9kZVNldCBhcyBKLE5vZGVUeXBlIGFzIEssRGVmYXVsdEJ1ZmZlckxlbmd0aCBhcyBRLE5vZGVQcm9wIGFzIE8sVHJlZSBhcyB2LEl0ZXJNb2RlIGFzIFZ9ZnJvbVwiQGxlemVyL2NvbW1vblwiO3ZhciBiPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxzLGksaCxyLG4sYSxsLHU9MCxmKXt0aGlzLnA9dCx0aGlzLnN0YWNrPWUsdGhpcy5zdGF0ZT1zLHRoaXMucmVkdWNlUG9zPWksdGhpcy5wb3M9aCx0aGlzLnNjb3JlPXIsdGhpcy5idWZmZXI9bix0aGlzLmJ1ZmZlckJhc2U9YSx0aGlzLmN1ckNvbnRleHQ9bCx0aGlzLmxvb2tBaGVhZD11LHRoaXMucGFyZW50PWZ9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFjay5maWx0ZXIoKHQsZSk9PmUlMz09MCkuY29uY2F0KHRoaXMuc3RhdGUpfV1AJHt0aGlzLnBvc30ke3RoaXMuc2NvcmU/XCIhXCIrdGhpcy5zY29yZTpcIlwifWB9c3RhdGljIHN0YXJ0KHQsZSxzPTApe2xldCBpPXQucGFyc2VyLmNvbnRleHQ7cmV0dXJuIG5ldyBiKHQsW10sZSxzLHMsMCxbXSwwLGk/bmV3IHcoaSxpLnN0YXJ0KTpudWxsLDAsbnVsbCl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5jdXJDb250ZXh0P3RoaXMuY3VyQ29udGV4dC5jb250ZXh0Om51bGx9cHVzaFN0YXRlKHQsZSl7dGhpcy5zdGFjay5wdXNoKHRoaXMuc3RhdGUsZSx0aGlzLmJ1ZmZlckJhc2UrdGhpcy5idWZmZXIubGVuZ3RoKSx0aGlzLnN0YXRlPXR9cmVkdWNlKHQpe2xldCBlPXQ+PjE5LHM9dCY2NTUzNSx7cGFyc2VyOml9PXRoaXMucCxoPWkuZHluYW1pY1ByZWNlZGVuY2Uocyk7aWYoaCYmKHRoaXMuc2NvcmUrPWgpLGU9PTApe3RoaXMucHVzaFN0YXRlKGkuZ2V0R290byh0aGlzLnN0YXRlLHMsITApLHRoaXMucmVkdWNlUG9zKSxzPGkubWluUmVwZWF0VGVybSYmdGhpcy5zdG9yZU5vZGUocyx0aGlzLnJlZHVjZVBvcyx0aGlzLnJlZHVjZVBvcyw0LCEwKSx0aGlzLnJlZHVjZUNvbnRleHQocyx0aGlzLnJlZHVjZVBvcyk7cmV0dXJufWxldCByPXRoaXMuc3RhY2subGVuZ3RoLShlLTEpKjMtKHQmMjYyMTQ0PzY6MCksbj10aGlzLnN0YWNrW3ItMl0sYT10aGlzLnN0YWNrW3ItMV0sbD10aGlzLmJ1ZmZlckJhc2UrdGhpcy5idWZmZXIubGVuZ3RoLWE7aWYoczxpLm1pblJlcGVhdFRlcm18fHQmMTMxMDcyKXtsZXQgdT1pLnN0YXRlRmxhZyh0aGlzLnN0YXRlLDEpP3RoaXMucG9zOnRoaXMucmVkdWNlUG9zO3RoaXMuc3RvcmVOb2RlKHMsbix1LGwrNCwhMCl9aWYodCYyNjIxNDQpdGhpcy5zdGF0ZT10aGlzLnN0YWNrW3JdO2Vsc2V7bGV0IHU9dGhpcy5zdGFja1tyLTNdO3RoaXMuc3RhdGU9aS5nZXRHb3RvKHUscywhMCl9Zm9yKDt0aGlzLnN0YWNrLmxlbmd0aD5yOyl0aGlzLnN0YWNrLnBvcCgpO3RoaXMucmVkdWNlQ29udGV4dChzLG4pfXN0b3JlTm9kZSh0LGUscyxpPTQsaD0hMSl7aWYodD09MCYmKCF0aGlzLnN0YWNrLmxlbmd0aHx8dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTx0aGlzLmJ1ZmZlci5sZW5ndGgrdGhpcy5idWZmZXJCYXNlKSl7bGV0IHI9dGhpcyxuPXRoaXMuYnVmZmVyLmxlbmd0aDtpZihuPT0wJiZyLnBhcmVudCYmKG49ci5idWZmZXJCYXNlLXIucGFyZW50LmJ1ZmZlckJhc2Uscj1yLnBhcmVudCksbj4wJiZyLmJ1ZmZlcltuLTRdPT0wJiZyLmJ1ZmZlcltuLTFdPi0xKXtpZihlPT1zKXJldHVybjtpZihyLmJ1ZmZlcltuLTJdPj1lKXtyLmJ1ZmZlcltuLTJdPXM7cmV0dXJufX19aWYoIWh8fHRoaXMucG9zPT1zKXRoaXMuYnVmZmVyLnB1c2godCxlLHMsaSk7ZWxzZXtsZXQgcj10aGlzLmJ1ZmZlci5sZW5ndGg7aWYocj4wJiZ0aGlzLmJ1ZmZlcltyLTRdIT0wKWZvcig7cj4wJiZ0aGlzLmJ1ZmZlcltyLTJdPnM7KXRoaXMuYnVmZmVyW3JdPXRoaXMuYnVmZmVyW3ItNF0sdGhpcy5idWZmZXJbcisxXT10aGlzLmJ1ZmZlcltyLTNdLHRoaXMuYnVmZmVyW3IrMl09dGhpcy5idWZmZXJbci0yXSx0aGlzLmJ1ZmZlcltyKzNdPXRoaXMuYnVmZmVyW3ItMV0sci09NCxpPjQmJihpLT00KTt0aGlzLmJ1ZmZlcltyXT10LHRoaXMuYnVmZmVyW3IrMV09ZSx0aGlzLmJ1ZmZlcltyKzJdPXMsdGhpcy5idWZmZXJbciszXT1pfX1zaGlmdCh0LGUscyl7bGV0IGk9dGhpcy5wb3M7aWYodCYxMzEwNzIpdGhpcy5wdXNoU3RhdGUodCY2NTUzNSx0aGlzLnBvcyk7ZWxzZSBpZigodCYyNjIxNDQpPT0wKXtsZXQgaD10LHtwYXJzZXI6cn09dGhpcy5wOyhzPnRoaXMucG9zfHxlPD1yLm1heE5vZGUpJiYodGhpcy5wb3M9cyxyLnN0YXRlRmxhZyhoLDEpfHwodGhpcy5yZWR1Y2VQb3M9cykpLHRoaXMucHVzaFN0YXRlKGgsaSksdGhpcy5zaGlmdENvbnRleHQoZSxpKSxlPD1yLm1heE5vZGUmJnRoaXMuYnVmZmVyLnB1c2goZSxpLHMsNCl9ZWxzZSB0aGlzLnBvcz1zLHRoaXMuc2hpZnRDb250ZXh0KGUsaSksZTw9dGhpcy5wLnBhcnNlci5tYXhOb2RlJiZ0aGlzLmJ1ZmZlci5wdXNoKGUsaSxzLDQpfWFwcGx5KHQsZSxzKXt0JjY1NTM2P3RoaXMucmVkdWNlKHQpOnRoaXMuc2hpZnQodCxlLHMpfXVzZU5vZGUodCxlKXtsZXQgcz10aGlzLnAucmV1c2VkLmxlbmd0aC0xOyhzPDB8fHRoaXMucC5yZXVzZWRbc10hPXQpJiYodGhpcy5wLnJldXNlZC5wdXNoKHQpLHMrKyk7bGV0IGk9dGhpcy5wb3M7dGhpcy5yZWR1Y2VQb3M9dGhpcy5wb3M9aSt0Lmxlbmd0aCx0aGlzLnB1c2hTdGF0ZShlLGkpLHRoaXMuYnVmZmVyLnB1c2gocyxpLHRoaXMucmVkdWNlUG9zLC0xKSx0aGlzLmN1ckNvbnRleHQmJnRoaXMudXBkYXRlQ29udGV4dCh0aGlzLmN1ckNvbnRleHQudHJhY2tlci5yZXVzZSh0aGlzLmN1ckNvbnRleHQuY29udGV4dCx0LHRoaXMsdGhpcy5wLnN0cmVhbS5yZXNldCh0aGlzLnBvcy10Lmxlbmd0aCkpKX1zcGxpdCgpe2xldCB0PXRoaXMsZT10LmJ1ZmZlci5sZW5ndGg7Zm9yKDtlPjAmJnQuYnVmZmVyW2UtMl0+dC5yZWR1Y2VQb3M7KWUtPTQ7bGV0IHM9dC5idWZmZXIuc2xpY2UoZSksaT10LmJ1ZmZlckJhc2UrZTtmb3IoO3QmJmk9PXQuYnVmZmVyQmFzZTspdD10LnBhcmVudDtyZXR1cm4gbmV3IGIodGhpcy5wLHRoaXMuc3RhY2suc2xpY2UoKSx0aGlzLnN0YXRlLHRoaXMucmVkdWNlUG9zLHRoaXMucG9zLHRoaXMuc2NvcmUscyxpLHRoaXMuY3VyQ29udGV4dCx0aGlzLmxvb2tBaGVhZCx0KX1yZWNvdmVyQnlEZWxldGUodCxlKXtsZXQgcz10PD10aGlzLnAucGFyc2VyLm1heE5vZGU7cyYmdGhpcy5zdG9yZU5vZGUodCx0aGlzLnBvcyxlLDQpLHRoaXMuc3RvcmVOb2RlKDAsdGhpcy5wb3MsZSxzPzg6NCksdGhpcy5wb3M9dGhpcy5yZWR1Y2VQb3M9ZSx0aGlzLnNjb3JlLT0xOTB9Y2FuU2hpZnQodCl7Zm9yKGxldCBlPW5ldyBOKHRoaXMpOzspe2xldCBzPXRoaXMucC5wYXJzZXIuc3RhdGVTbG90KGUuc3RhdGUsNCl8fHRoaXMucC5wYXJzZXIuaGFzQWN0aW9uKGUuc3RhdGUsdCk7aWYoKHMmNjU1MzYpPT0wKXJldHVybiEwO2lmKHM9PTApcmV0dXJuITE7ZS5yZWR1Y2Uocyl9fXJlY292ZXJCeUluc2VydCh0KXtpZih0aGlzLnN0YWNrLmxlbmd0aD49MzAwKXJldHVybltdO2xldCBlPXRoaXMucC5wYXJzZXIubmV4dFN0YXRlcyh0aGlzLnN0YXRlKTtpZihlLmxlbmd0aD40PDwxfHx0aGlzLnN0YWNrLmxlbmd0aD49MTIwKXtsZXQgaT1bXTtmb3IobGV0IGg9MCxyO2g8ZS5sZW5ndGg7aCs9Mikocj1lW2grMV0pIT10aGlzLnN0YXRlJiZ0aGlzLnAucGFyc2VyLmhhc0FjdGlvbihyLHQpJiZpLnB1c2goZVtoXSxyKTtpZih0aGlzLnN0YWNrLmxlbmd0aDwxMjApZm9yKGxldCBoPTA7aS5sZW5ndGg8NDw8MSYmaDxlLmxlbmd0aDtoKz0yKXtsZXQgcj1lW2grMV07aS5zb21lKChuLGEpPT5hJjEmJm49PXIpfHxpLnB1c2goZVtoXSxyKX1lPWl9bGV0IHM9W107Zm9yKGxldCBpPTA7aTxlLmxlbmd0aCYmcy5sZW5ndGg8NDtpKz0yKXtsZXQgaD1lW2krMV07aWYoaD09dGhpcy5zdGF0ZSljb250aW51ZTtsZXQgcj10aGlzLnNwbGl0KCk7ci5wdXNoU3RhdGUoaCx0aGlzLnBvcyksci5zdG9yZU5vZGUoMCxyLnBvcyxyLnBvcyw0LCEwKSxyLnNoaWZ0Q29udGV4dChlW2ldLHRoaXMucG9zKSxyLnNjb3JlLT0yMDAscy5wdXNoKHIpfXJldHVybiBzfWZvcmNlUmVkdWNlKCl7bGV0IHQ9dGhpcy5wLnBhcnNlci5zdGF0ZVNsb3QodGhpcy5zdGF0ZSw1KTtpZigodCY2NTUzNik9PTApcmV0dXJuITE7bGV0e3BhcnNlcjplfT10aGlzLnA7aWYoIWUudmFsaWRBY3Rpb24odGhpcy5zdGF0ZSx0KSl7bGV0IHM9dD4+MTksaT10JjY1NTM1LGg9dGhpcy5zdGFjay5sZW5ndGgtcyozO2lmKGg8MHx8ZS5nZXRHb3RvKHRoaXMuc3RhY2tbaF0saSwhMSk8MClyZXR1cm4hMTt0aGlzLnN0b3JlTm9kZSgwLHRoaXMucmVkdWNlUG9zLHRoaXMucmVkdWNlUG9zLDQsITApLHRoaXMuc2NvcmUtPTEwMH1yZXR1cm4gdGhpcy5yZWR1Y2VQb3M9dGhpcy5wb3MsdGhpcy5yZWR1Y2UodCksITB9Zm9yY2VBbGwoKXtmb3IoOyF0aGlzLnAucGFyc2VyLnN0YXRlRmxhZyh0aGlzLnN0YXRlLDIpOylpZighdGhpcy5mb3JjZVJlZHVjZSgpKXt0aGlzLnN0b3JlTm9kZSgwLHRoaXMucG9zLHRoaXMucG9zLDQsITApO2JyZWFrfXJldHVybiB0aGlzfWdldCBkZWFkRW5kKCl7aWYodGhpcy5zdGFjay5sZW5ndGghPTMpcmV0dXJuITE7bGV0e3BhcnNlcjp0fT10aGlzLnA7cmV0dXJuIHQuZGF0YVt0LnN0YXRlU2xvdCh0aGlzLnN0YXRlLDEpXT09NjU1MzUmJiF0LnN0YXRlU2xvdCh0aGlzLnN0YXRlLDQpfXJlc3RhcnQoKXt0aGlzLnN0YXRlPXRoaXMuc3RhY2tbMF0sdGhpcy5zdGFjay5sZW5ndGg9MH1zYW1lU3RhdGUodCl7aWYodGhpcy5zdGF0ZSE9dC5zdGF0ZXx8dGhpcy5zdGFjay5sZW5ndGghPXQuc3RhY2subGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8dGhpcy5zdGFjay5sZW5ndGg7ZSs9MylpZih0aGlzLnN0YWNrW2VdIT10LnN0YWNrW2VdKXJldHVybiExO3JldHVybiEwfWdldCBwYXJzZXIoKXtyZXR1cm4gdGhpcy5wLnBhcnNlcn1kaWFsZWN0RW5hYmxlZCh0KXtyZXR1cm4gdGhpcy5wLnBhcnNlci5kaWFsZWN0LmZsYWdzW3RdfXNoaWZ0Q29udGV4dCh0LGUpe3RoaXMuY3VyQ29udGV4dCYmdGhpcy51cGRhdGVDb250ZXh0KHRoaXMuY3VyQ29udGV4dC50cmFja2VyLnNoaWZ0KHRoaXMuY3VyQ29udGV4dC5jb250ZXh0LHQsdGhpcyx0aGlzLnAuc3RyZWFtLnJlc2V0KGUpKSl9cmVkdWNlQ29udGV4dCh0LGUpe3RoaXMuY3VyQ29udGV4dCYmdGhpcy51cGRhdGVDb250ZXh0KHRoaXMuY3VyQ29udGV4dC50cmFja2VyLnJlZHVjZSh0aGlzLmN1ckNvbnRleHQuY29udGV4dCx0LHRoaXMsdGhpcy5wLnN0cmVhbS5yZXNldChlKSkpfWVtaXRDb250ZXh0KCl7bGV0IHQ9dGhpcy5idWZmZXIubGVuZ3RoLTE7KHQ8MHx8dGhpcy5idWZmZXJbdF0hPS0zKSYmdGhpcy5idWZmZXIucHVzaCh0aGlzLmN1ckNvbnRleHQuaGFzaCx0aGlzLnJlZHVjZVBvcyx0aGlzLnJlZHVjZVBvcywtMyl9ZW1pdExvb2tBaGVhZCgpe2xldCB0PXRoaXMuYnVmZmVyLmxlbmd0aC0xOyh0PDB8fHRoaXMuYnVmZmVyW3RdIT0tNCkmJnRoaXMuYnVmZmVyLnB1c2godGhpcy5sb29rQWhlYWQsdGhpcy5yZWR1Y2VQb3MsdGhpcy5yZWR1Y2VQb3MsLTQpfXVwZGF0ZUNvbnRleHQodCl7aWYodCE9dGhpcy5jdXJDb250ZXh0LmNvbnRleHQpe2xldCBlPW5ldyB3KHRoaXMuY3VyQ29udGV4dC50cmFja2VyLHQpO2UuaGFzaCE9dGhpcy5jdXJDb250ZXh0Lmhhc2gmJnRoaXMuZW1pdENvbnRleHQoKSx0aGlzLmN1ckNvbnRleHQ9ZX19c2V0TG9va0FoZWFkKHQpe3Q+dGhpcy5sb29rQWhlYWQmJih0aGlzLmVtaXRMb29rQWhlYWQoKSx0aGlzLmxvb2tBaGVhZD10KX1jbG9zZSgpe3RoaXMuY3VyQ29udGV4dCYmdGhpcy5jdXJDb250ZXh0LnRyYWNrZXIuc3RyaWN0JiZ0aGlzLmVtaXRDb250ZXh0KCksdGhpcy5sb29rQWhlYWQ+MCYmdGhpcy5lbWl0TG9va0FoZWFkKCl9fSx3PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50cmFja2VyPXQsdGhpcy5jb250ZXh0PWUsdGhpcy5oYXNoPXQuc3RyaWN0P3QuaGFzaChlKTowfX0sQjsoZnVuY3Rpb24obyl7b1tvLkluc2VydD0yMDBdPVwiSW5zZXJ0XCIsb1tvLkRlbGV0ZT0xOTBdPVwiRGVsZXRlXCIsb1tvLlJlZHVjZT0xMDBdPVwiUmVkdWNlXCIsb1tvLk1heE5leHQ9NF09XCJNYXhOZXh0XCIsb1tvLk1heEluc2VydFN0YWNrRGVwdGg9MzAwXT1cIk1heEluc2VydFN0YWNrRGVwdGhcIixvW28uRGFtcGVuSW5zZXJ0U3RhY2tEZXB0aD0xMjBdPVwiRGFtcGVuSW5zZXJ0U3RhY2tEZXB0aFwifSkoQnx8KEI9e30pKTt2YXIgTj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0YXJ0PXQsdGhpcy5zdGF0ZT10LnN0YXRlLHRoaXMuc3RhY2s9dC5zdGFjayx0aGlzLmJhc2U9dGhpcy5zdGFjay5sZW5ndGh9cmVkdWNlKHQpe2xldCBlPXQmNjU1MzUscz10Pj4xOTtzPT0wPyh0aGlzLnN0YWNrPT10aGlzLnN0YXJ0LnN0YWNrJiYodGhpcy5zdGFjaz10aGlzLnN0YWNrLnNsaWNlKCkpLHRoaXMuc3RhY2sucHVzaCh0aGlzLnN0YXRlLDAsMCksdGhpcy5iYXNlKz0zKTp0aGlzLmJhc2UtPShzLTEpKjM7bGV0IGk9dGhpcy5zdGFydC5wLnBhcnNlci5nZXRHb3RvKHRoaXMuc3RhY2tbdGhpcy5iYXNlLTNdLGUsITApO3RoaXMuc3RhdGU9aX19LFA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLHMpe3RoaXMuc3RhY2s9dCx0aGlzLnBvcz1lLHRoaXMuaW5kZXg9cyx0aGlzLmJ1ZmZlcj10LmJ1ZmZlcix0aGlzLmluZGV4PT0wJiZ0aGlzLm1heWJlTmV4dCgpfXN0YXRpYyBjcmVhdGUodCxlPXQuYnVmZmVyQmFzZSt0LmJ1ZmZlci5sZW5ndGgpe3JldHVybiBuZXcgUCh0LGUsZS10LmJ1ZmZlckJhc2UpfW1heWJlTmV4dCgpe2xldCB0PXRoaXMuc3RhY2sucGFyZW50O3QhPW51bGwmJih0aGlzLmluZGV4PXRoaXMuc3RhY2suYnVmZmVyQmFzZS10LmJ1ZmZlckJhc2UsdGhpcy5zdGFjaz10LHRoaXMuYnVmZmVyPXQuYnVmZmVyKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleC00XX1nZXQgc3RhcnQoKXtyZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleC0zXX1nZXQgZW5kKCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtMl19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleC0xXX1uZXh0KCl7dGhpcy5pbmRleC09NCx0aGlzLnBvcy09NCx0aGlzLmluZGV4PT0wJiZ0aGlzLm1heWJlTmV4dCgpfWZvcmsoKXtyZXR1cm4gbmV3IFAodGhpcy5zdGFjayx0aGlzLnBvcyx0aGlzLmluZGV4KX19LG09Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0YXJ0PS0xLHRoaXMudmFsdWU9LTEsdGhpcy5lbmQ9LTEsdGhpcy5leHRlbmRlZD0tMSx0aGlzLmxvb2tBaGVhZD0wLHRoaXMubWFzaz0wLHRoaXMuY29udGV4dD0wfX0sRj1uZXcgbSxUPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pbnB1dD10LHRoaXMucmFuZ2VzPWUsdGhpcy5jaHVuaz1cIlwiLHRoaXMuY2h1bmtPZmY9MCx0aGlzLmNodW5rMj1cIlwiLHRoaXMuY2h1bmsyUG9zPTAsdGhpcy5uZXh0PS0xLHRoaXMudG9rZW49Rix0aGlzLnJhbmdlSW5kZXg9MCx0aGlzLnBvcz10aGlzLmNodW5rUG9zPWVbMF0uZnJvbSx0aGlzLnJhbmdlPWVbMF0sdGhpcy5lbmQ9ZVtlLmxlbmd0aC0xXS50byx0aGlzLnJlYWROZXh0KCl9cmVzb2x2ZU9mZnNldCh0LGUpe2xldCBzPXRoaXMucmFuZ2UsaT10aGlzLnJhbmdlSW5kZXgsaD10aGlzLnBvcyt0O2Zvcig7aDxzLmZyb207KXtpZighaSlyZXR1cm4gbnVsbDtsZXQgcj10aGlzLnJhbmdlc1stLWldO2gtPXMuZnJvbS1yLnRvLHM9cn1mb3IoO2U8MD9oPnMudG86aD49cy50bzspe2lmKGk9PXRoaXMucmFuZ2VzLmxlbmd0aC0xKXJldHVybiBudWxsO2xldCByPXRoaXMucmFuZ2VzWysraV07aCs9ci5mcm9tLXMudG8scz1yfXJldHVybiBofWNsaXBQb3ModCl7aWYodD49dGhpcy5yYW5nZS5mcm9tJiZ0PHRoaXMucmFuZ2UudG8pcmV0dXJuIHQ7Zm9yKGxldCBlIG9mIHRoaXMucmFuZ2VzKWlmKGUudG8+dClyZXR1cm4gTWF0aC5tYXgodCxlLmZyb20pO3JldHVybiB0aGlzLmVuZH1wZWVrKHQpe2xldCBlPXRoaXMuY2h1bmtPZmYrdCxzLGk7aWYoZT49MCYmZTx0aGlzLmNodW5rLmxlbmd0aClzPXRoaXMucG9zK3QsaT10aGlzLmNodW5rLmNoYXJDb2RlQXQoZSk7ZWxzZXtsZXQgaD10aGlzLnJlc29sdmVPZmZzZXQodCwxKTtpZihoPT1udWxsKXJldHVybi0xO2lmKHM9aCxzPj10aGlzLmNodW5rMlBvcyYmczx0aGlzLmNodW5rMlBvcyt0aGlzLmNodW5rMi5sZW5ndGgpaT10aGlzLmNodW5rMi5jaGFyQ29kZUF0KHMtdGhpcy5jaHVuazJQb3MpO2Vsc2V7bGV0IHI9dGhpcy5yYW5nZUluZGV4LG49dGhpcy5yYW5nZTtmb3IoO24udG88PXM7KW49dGhpcy5yYW5nZXNbKytyXTt0aGlzLmNodW5rMj10aGlzLmlucHV0LmNodW5rKHRoaXMuY2h1bmsyUG9zPXMpLHMrdGhpcy5jaHVuazIubGVuZ3RoPm4udG8mJih0aGlzLmNodW5rMj10aGlzLmNodW5rMi5zbGljZSgwLG4udG8tcykpLGk9dGhpcy5jaHVuazIuY2hhckNvZGVBdCgwKX19cmV0dXJuIHM+PXRoaXMudG9rZW4ubG9va0FoZWFkJiYodGhpcy50b2tlbi5sb29rQWhlYWQ9cysxKSxpfWFjY2VwdFRva2VuKHQsZT0wKXtsZXQgcz1lP3RoaXMucmVzb2x2ZU9mZnNldChlLC0xKTp0aGlzLnBvcztpZihzPT1udWxsfHxzPHRoaXMudG9rZW4uc3RhcnQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUb2tlbiBlbmQgb3V0IG9mIGJvdW5kc1wiKTt0aGlzLnRva2VuLnZhbHVlPXQsdGhpcy50b2tlbi5lbmQ9c31nZXRDaHVuaygpe2lmKHRoaXMucG9zPj10aGlzLmNodW5rMlBvcyYmdGhpcy5wb3M8dGhpcy5jaHVuazJQb3MrdGhpcy5jaHVuazIubGVuZ3RoKXtsZXR7Y2h1bms6dCxjaHVua1BvczplfT10aGlzO3RoaXMuY2h1bms9dGhpcy5jaHVuazIsdGhpcy5jaHVua1Bvcz10aGlzLmNodW5rMlBvcyx0aGlzLmNodW5rMj10LHRoaXMuY2h1bmsyUG9zPWUsdGhpcy5jaHVua09mZj10aGlzLnBvcy10aGlzLmNodW5rUG9zfWVsc2V7dGhpcy5jaHVuazI9dGhpcy5jaHVuayx0aGlzLmNodW5rMlBvcz10aGlzLmNodW5rUG9zO2xldCB0PXRoaXMuaW5wdXQuY2h1bmsodGhpcy5wb3MpLGU9dGhpcy5wb3MrdC5sZW5ndGg7dGhpcy5jaHVuaz1lPnRoaXMucmFuZ2UudG8/dC5zbGljZSgwLHRoaXMucmFuZ2UudG8tdGhpcy5wb3MpOnQsdGhpcy5jaHVua1Bvcz10aGlzLnBvcyx0aGlzLmNodW5rT2ZmPTB9fXJlYWROZXh0KCl7cmV0dXJuIHRoaXMuY2h1bmtPZmY+PXRoaXMuY2h1bmsubGVuZ3RoJiYodGhpcy5nZXRDaHVuaygpLHRoaXMuY2h1bmtPZmY9PXRoaXMuY2h1bmsubGVuZ3RoKT90aGlzLm5leHQ9LTE6dGhpcy5uZXh0PXRoaXMuY2h1bmsuY2hhckNvZGVBdCh0aGlzLmNodW5rT2ZmKX1hZHZhbmNlKHQ9MSl7Zm9yKHRoaXMuY2h1bmtPZmYrPXQ7dGhpcy5wb3MrdD49dGhpcy5yYW5nZS50bzspe2lmKHRoaXMucmFuZ2VJbmRleD09dGhpcy5yYW5nZXMubGVuZ3RoLTEpcmV0dXJuIHRoaXMuc2V0RG9uZSgpO3QtPXRoaXMucmFuZ2UudG8tdGhpcy5wb3MsdGhpcy5yYW5nZT10aGlzLnJhbmdlc1srK3RoaXMucmFuZ2VJbmRleF0sdGhpcy5wb3M9dGhpcy5yYW5nZS5mcm9tfXJldHVybiB0aGlzLnBvcys9dCx0aGlzLnBvcz49dGhpcy50b2tlbi5sb29rQWhlYWQmJih0aGlzLnRva2VuLmxvb2tBaGVhZD10aGlzLnBvcysxKSx0aGlzLnJlYWROZXh0KCl9c2V0RG9uZSgpe3JldHVybiB0aGlzLnBvcz10aGlzLmNodW5rUG9zPXRoaXMuZW5kLHRoaXMucmFuZ2U9dGhpcy5yYW5nZXNbdGhpcy5yYW5nZUluZGV4PXRoaXMucmFuZ2VzLmxlbmd0aC0xXSx0aGlzLmNodW5rPVwiXCIsdGhpcy5uZXh0PS0xfXJlc2V0KHQsZSl7aWYoZT8odGhpcy50b2tlbj1lLGUuc3RhcnQ9dCxlLmxvb2tBaGVhZD10KzEsZS52YWx1ZT1lLmV4dGVuZGVkPS0xKTp0aGlzLnRva2VuPUYsdGhpcy5wb3MhPXQpe2lmKHRoaXMucG9zPXQsdD09dGhpcy5lbmQpcmV0dXJuIHRoaXMuc2V0RG9uZSgpLHRoaXM7Zm9yKDt0PHRoaXMucmFuZ2UuZnJvbTspdGhpcy5yYW5nZT10aGlzLnJhbmdlc1stLXRoaXMucmFuZ2VJbmRleF07Zm9yKDt0Pj10aGlzLnJhbmdlLnRvOyl0aGlzLnJhbmdlPXRoaXMucmFuZ2VzWysrdGhpcy5yYW5nZUluZGV4XTt0Pj10aGlzLmNodW5rUG9zJiZ0PHRoaXMuY2h1bmtQb3MrdGhpcy5jaHVuay5sZW5ndGg/dGhpcy5jaHVua09mZj10LXRoaXMuY2h1bmtQb3M6KHRoaXMuY2h1bms9XCJcIix0aGlzLmNodW5rT2ZmPTApLHRoaXMucmVhZE5leHQoKX1yZXR1cm4gdGhpc31yZWFkKHQsZSl7aWYodD49dGhpcy5jaHVua1BvcyYmZTw9dGhpcy5jaHVua1Bvcyt0aGlzLmNodW5rLmxlbmd0aClyZXR1cm4gdGhpcy5jaHVuay5zbGljZSh0LXRoaXMuY2h1bmtQb3MsZS10aGlzLmNodW5rUG9zKTtpZih0Pj10aGlzLmNodW5rMlBvcyYmZTw9dGhpcy5jaHVuazJQb3MrdGhpcy5jaHVuazIubGVuZ3RoKXJldHVybiB0aGlzLmNodW5rMi5zbGljZSh0LXRoaXMuY2h1bmsyUG9zLGUtdGhpcy5jaHVuazJQb3MpO2lmKHQ+PXRoaXMucmFuZ2UuZnJvbSYmZTw9dGhpcy5yYW5nZS50bylyZXR1cm4gdGhpcy5pbnB1dC5yZWFkKHQsZSk7bGV0IHM9XCJcIjtmb3IobGV0IGkgb2YgdGhpcy5yYW5nZXMpe2lmKGkuZnJvbT49ZSlicmVhaztpLnRvPnQmJihzKz10aGlzLmlucHV0LnJlYWQoTWF0aC5tYXgoaS5mcm9tLHQpLE1hdGgubWluKGkudG8sZSkpKX1yZXR1cm4gc319LHg9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmRhdGE9dCx0aGlzLmlkPWV9dG9rZW4odCxlKXtYKHRoaXMuZGF0YSx0LGUsdGhpcy5pZCl9fTt4LnByb3RvdHlwZS5jb250ZXh0dWFsPXgucHJvdG90eXBlLmZhbGxiYWNrPXgucHJvdG90eXBlLmV4dGVuZD0hMTt2YXIgTD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9e30pe3RoaXMudG9rZW49dCx0aGlzLmNvbnRleHR1YWw9ISFlLmNvbnRleHR1YWwsdGhpcy5mYWxsYmFjaz0hIWUuZmFsbGJhY2ssdGhpcy5leHRlbmQ9ISFlLmV4dGVuZH19O2Z1bmN0aW9uIFgobyx0LGUscyl7bGV0IGk9MCxoPTE8PHMse3BhcnNlcjpyfT1lLnAse2RpYWxlY3Q6bn09cjt0OmZvcig7KGgmb1tpXSkhPTA7KXtsZXQgYT1vW2krMV07Zm9yKGxldCBjPWkrMztjPGE7Yys9MilpZigob1tjKzFdJmgpPjApe2xldCBwPW9bY107aWYobi5hbGxvd3MocCkmJih0LnRva2VuLnZhbHVlPT0tMXx8dC50b2tlbi52YWx1ZT09cHx8ci5vdmVycmlkZXMocCx0LnRva2VuLnZhbHVlKSkpe3QuYWNjZXB0VG9rZW4ocCk7YnJlYWt9fWxldCBsPXQubmV4dCx1PTAsZj1vW2krMl07aWYodC5uZXh0PDAmJmY+dSYmb1thK2YqMy0zXT09NjU1MzUpe2k9b1thK2YqMy0xXTtjb250aW51ZSB0fWZvcig7dTxmOyl7bGV0IGM9dStmPj4xLHA9YStjKyhjPDwxKSxnPW9bcF0sVz1vW3ArMV07aWYobDxnKWY9YztlbHNlIGlmKGw+PVcpdT1jKzE7ZWxzZXtpPW9bcCsyXSx0LmFkdmFuY2UoKTtjb250aW51ZSB0fX1icmVha319ZnVuY3Rpb24gQShvLHQ9VWludDE2QXJyYXkpe2lmKHR5cGVvZiBvIT1cInN0cmluZ1wiKXJldHVybiBvO2xldCBlPW51bGw7Zm9yKGxldCBzPTAsaT0wO3M8by5sZW5ndGg7KXtsZXQgaD0wO2Zvcig7Oyl7bGV0IHI9by5jaGFyQ29kZUF0KHMrKyksbj0hMTtpZihyPT0xMjYpe2g9NjU1MzU7YnJlYWt9cj49OTImJnItLSxyPj0zNCYmci0tO2xldCBhPXItMzI7aWYoYT49NDYmJihhLT00NixuPSEwKSxoKz1hLG4pYnJlYWs7aCo9NDZ9ZT9lW2krK109aDplPW5ldyB0KGgpfXJldHVybiBlfXZhciBkPXR5cGVvZiBfX1Byb2Nlc3MkPFwidVwiJiZfX1Byb2Nlc3MkLmVudiYmL1xcYnBhcnNlXFxiLy50ZXN0KF9fUHJvY2VzcyQuZW52LkxPRykseT1udWxsLCQ7KGZ1bmN0aW9uKG8pe29bby5NYXJnaW49MjVdPVwiTWFyZ2luXCJ9KSgkfHwoJD17fSkpO2Z1bmN0aW9uIGoobyx0LGUpe2xldCBzPW8uY3Vyc29yKFYuSW5jbHVkZUFub255bW91cyk7Zm9yKHMubW92ZVRvKHQpOzspaWYoIShlPDA/cy5jaGlsZEJlZm9yZSh0KTpzLmNoaWxkQWZ0ZXIodCkpKWZvcig7Oyl7aWYoKGU8MD9zLnRvPHQ6cy5mcm9tPnQpJiYhcy50eXBlLmlzRXJyb3IpcmV0dXJuIGU8MD9NYXRoLm1heCgwLE1hdGgubWluKHMudG8tMSx0LTI1KSk6TWF0aC5taW4oby5sZW5ndGgsTWF0aC5tYXgocy5mcm9tKzEsdCsyNSkpO2lmKGU8MD9zLnByZXZTaWJsaW5nKCk6cy5uZXh0U2libGluZygpKWJyZWFrO2lmKCFzLnBhcmVudCgpKXJldHVybiBlPDA/MDpvLmxlbmd0aH19dmFyIEQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmZyYWdtZW50cz10LHRoaXMubm9kZVNldD1lLHRoaXMuaT0wLHRoaXMuZnJhZ21lbnQ9bnVsbCx0aGlzLnNhZmVGcm9tPS0xLHRoaXMuc2FmZVRvPS0xLHRoaXMudHJlZXM9W10sdGhpcy5zdGFydD1bXSx0aGlzLmluZGV4PVtdLHRoaXMubmV4dEZyYWdtZW50KCl9bmV4dEZyYWdtZW50KCl7bGV0IHQ9dGhpcy5mcmFnbWVudD10aGlzLmk9PXRoaXMuZnJhZ21lbnRzLmxlbmd0aD9udWxsOnRoaXMuZnJhZ21lbnRzW3RoaXMuaSsrXTtpZih0KXtmb3IodGhpcy5zYWZlRnJvbT10Lm9wZW5TdGFydD9qKHQudHJlZSx0LmZyb20rdC5vZmZzZXQsMSktdC5vZmZzZXQ6dC5mcm9tLHRoaXMuc2FmZVRvPXQub3BlbkVuZD9qKHQudHJlZSx0LnRvK3Qub2Zmc2V0LC0xKS10Lm9mZnNldDp0LnRvO3RoaXMudHJlZXMubGVuZ3RoOyl0aGlzLnRyZWVzLnBvcCgpLHRoaXMuc3RhcnQucG9wKCksdGhpcy5pbmRleC5wb3AoKTt0aGlzLnRyZWVzLnB1c2godC50cmVlKSx0aGlzLnN0YXJ0LnB1c2goLXQub2Zmc2V0KSx0aGlzLmluZGV4LnB1c2goMCksdGhpcy5uZXh0U3RhcnQ9dGhpcy5zYWZlRnJvbX1lbHNlIHRoaXMubmV4dFN0YXJ0PTFlOX1ub2RlQXQodCl7aWYodDx0aGlzLm5leHRTdGFydClyZXR1cm4gbnVsbDtmb3IoO3RoaXMuZnJhZ21lbnQmJnRoaXMuc2FmZVRvPD10Oyl0aGlzLm5leHRGcmFnbWVudCgpO2lmKCF0aGlzLmZyYWdtZW50KXJldHVybiBudWxsO2Zvcig7Oyl7bGV0IGU9dGhpcy50cmVlcy5sZW5ndGgtMTtpZihlPDApcmV0dXJuIHRoaXMubmV4dEZyYWdtZW50KCksbnVsbDtsZXQgcz10aGlzLnRyZWVzW2VdLGk9dGhpcy5pbmRleFtlXTtpZihpPT1zLmNoaWxkcmVuLmxlbmd0aCl7dGhpcy50cmVlcy5wb3AoKSx0aGlzLnN0YXJ0LnBvcCgpLHRoaXMuaW5kZXgucG9wKCk7Y29udGludWV9bGV0IGg9cy5jaGlsZHJlbltpXSxyPXRoaXMuc3RhcnRbZV0rcy5wb3NpdGlvbnNbaV07aWYocj50KXJldHVybiB0aGlzLm5leHRTdGFydD1yLG51bGw7aWYoaCBpbnN0YW5jZW9mIHYpe2lmKHI9PXQpe2lmKHI8dGhpcy5zYWZlRnJvbSlyZXR1cm4gbnVsbDtsZXQgbj1yK2gubGVuZ3RoO2lmKG48PXRoaXMuc2FmZVRvKXtsZXQgYT1oLnByb3AoTy5sb29rQWhlYWQpO2lmKCFhfHxuK2E8dGhpcy5mcmFnbWVudC50bylyZXR1cm4gaH19dGhpcy5pbmRleFtlXSsrLHIraC5sZW5ndGg+PU1hdGgubWF4KHRoaXMuc2FmZUZyb20sdCkmJih0aGlzLnRyZWVzLnB1c2goaCksdGhpcy5zdGFydC5wdXNoKHIpLHRoaXMuaW5kZXgucHVzaCgwKSl9ZWxzZSB0aGlzLmluZGV4W2VdKyssdGhpcy5uZXh0U3RhcnQ9citoLmxlbmd0aH19fSxJPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdHJlYW09ZSx0aGlzLnRva2Vucz1bXSx0aGlzLm1haW5Ub2tlbj1udWxsLHRoaXMuYWN0aW9ucz1bXSx0aGlzLnRva2Vucz10LnRva2VuaXplcnMubWFwKHM9Pm5ldyBtKX1nZXRBY3Rpb25zKHQpe2xldCBlPTAscz1udWxsLHtwYXJzZXI6aX09dC5wLHt0b2tlbml6ZXJzOmh9PWkscj1pLnN0YXRlU2xvdCh0LnN0YXRlLDMpLG49dC5jdXJDb250ZXh0P3QuY3VyQ29udGV4dC5oYXNoOjAsYT0wO2ZvcihsZXQgbD0wO2w8aC5sZW5ndGg7bCsrKXtpZigoMTw8bCZyKT09MCljb250aW51ZTtsZXQgdT1oW2xdLGY9dGhpcy50b2tlbnNbbF07aWYoIShzJiYhdS5mYWxsYmFjaykmJigodS5jb250ZXh0dWFsfHxmLnN0YXJ0IT10LnBvc3x8Zi5tYXNrIT1yfHxmLmNvbnRleHQhPW4pJiYodGhpcy51cGRhdGVDYWNoZWRUb2tlbihmLHUsdCksZi5tYXNrPXIsZi5jb250ZXh0PW4pLGYubG9va0FoZWFkPmYuZW5kKzI1JiYoYT1NYXRoLm1heChmLmxvb2tBaGVhZCxhKSksZi52YWx1ZSE9MCkpe2xldCBjPWU7aWYoZi5leHRlbmRlZD4tMSYmKGU9dGhpcy5hZGRBY3Rpb25zKHQsZi5leHRlbmRlZCxmLmVuZCxlKSksZT10aGlzLmFkZEFjdGlvbnModCxmLnZhbHVlLGYuZW5kLGUpLCF1LmV4dGVuZCYmKHM9ZixlPmMpKWJyZWFrfX1mb3IoO3RoaXMuYWN0aW9ucy5sZW5ndGg+ZTspdGhpcy5hY3Rpb25zLnBvcCgpO3JldHVybiBhJiZ0LnNldExvb2tBaGVhZChhKSwhcyYmdC5wb3M9PXRoaXMuc3RyZWFtLmVuZCYmKHM9bmV3IG0scy52YWx1ZT10LnAucGFyc2VyLmVvZlRlcm0scy5zdGFydD1zLmVuZD10LnBvcyxlPXRoaXMuYWRkQWN0aW9ucyh0LHMudmFsdWUscy5lbmQsZSkpLHRoaXMubWFpblRva2VuPXMsdGhpcy5hY3Rpb25zfWdldE1haW5Ub2tlbih0KXtpZih0aGlzLm1haW5Ub2tlbilyZXR1cm4gdGhpcy5tYWluVG9rZW47bGV0IGU9bmV3IG0se3BvczpzLHA6aX09dDtyZXR1cm4gZS5zdGFydD1zLGUuZW5kPU1hdGgubWluKHMrMSxpLnN0cmVhbS5lbmQpLGUudmFsdWU9cz09aS5zdHJlYW0uZW5kP2kucGFyc2VyLmVvZlRlcm06MCxlfXVwZGF0ZUNhY2hlZFRva2VuKHQsZSxzKXtsZXQgaT10aGlzLnN0cmVhbS5jbGlwUG9zKHMucG9zKTtpZihlLnRva2VuKHRoaXMuc3RyZWFtLnJlc2V0KGksdCkscyksdC52YWx1ZT4tMSl7bGV0e3BhcnNlcjpofT1zLnA7Zm9yKGxldCByPTA7cjxoLnNwZWNpYWxpemVkLmxlbmd0aDtyKyspaWYoaC5zcGVjaWFsaXplZFtyXT09dC52YWx1ZSl7bGV0IG49aC5zcGVjaWFsaXplcnNbcl0odGhpcy5zdHJlYW0ucmVhZCh0LnN0YXJ0LHQuZW5kKSxzKTtpZihuPj0wJiZzLnAucGFyc2VyLmRpYWxlY3QuYWxsb3dzKG4+PjEpKXsobiYxKT09MD90LnZhbHVlPW4+PjE6dC5leHRlbmRlZD1uPj4xO2JyZWFrfX19ZWxzZSB0LnZhbHVlPTAsdC5lbmQ9dGhpcy5zdHJlYW0uY2xpcFBvcyhpKzEpfXB1dEFjdGlvbih0LGUscyxpKXtmb3IobGV0IGg9MDtoPGk7aCs9MylpZih0aGlzLmFjdGlvbnNbaF09PXQpcmV0dXJuIGk7cmV0dXJuIHRoaXMuYWN0aW9uc1tpKytdPXQsdGhpcy5hY3Rpb25zW2krK109ZSx0aGlzLmFjdGlvbnNbaSsrXT1zLGl9YWRkQWN0aW9ucyh0LGUscyxpKXtsZXR7c3RhdGU6aH09dCx7cGFyc2VyOnJ9PXQucCx7ZGF0YTpufT1yO2ZvcihsZXQgYT0wO2E8MjthKyspZm9yKGxldCBsPXIuc3RhdGVTbG90KGgsYT8yOjEpOztsKz0zKXtpZihuW2xdPT02NTUzNSlpZihuW2wrMV09PTEpbD1rKG4sbCsyKTtlbHNle2k9PTAmJm5bbCsxXT09MiYmKGk9dGhpcy5wdXRBY3Rpb24oayhuLGwrMiksZSxzLGkpKTticmVha31uW2xdPT1lJiYoaT10aGlzLnB1dEFjdGlvbihrKG4sbCsxKSxlLHMsaSkpfXJldHVybiBpfX0sUjsoZnVuY3Rpb24obyl7b1tvLkRpc3RhbmNlPTVdPVwiRGlzdGFuY2VcIixvW28uTWF4UmVtYWluaW5nUGVyU3RlcD0zXT1cIk1heFJlbWFpbmluZ1BlclN0ZXBcIixvW28uTWluQnVmZmVyTGVuZ3RoUHJ1bmU9NTAwXT1cIk1pbkJ1ZmZlckxlbmd0aFBydW5lXCIsb1tvLkZvcmNlUmVkdWNlTGltaXQ9MTBdPVwiRm9yY2VSZWR1Y2VMaW1pdFwiLG9bby5DdXREZXB0aD0xNWUzXT1cIkN1dERlcHRoXCIsb1tvLkN1dFRvPTllM109XCJDdXRUb1wifSkoUnx8KFI9e30pKTt2YXIgej1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUscyxpKXt0aGlzLnBhcnNlcj10LHRoaXMuaW5wdXQ9ZSx0aGlzLnJhbmdlcz1pLHRoaXMucmVjb3ZlcmluZz0wLHRoaXMubmV4dFN0YWNrSUQ9OTgxMix0aGlzLm1pblN0YWNrUG9zPTAsdGhpcy5yZXVzZWQ9W10sdGhpcy5zdG9wcGVkQXQ9bnVsbCx0aGlzLnN0cmVhbT1uZXcgVChlLGkpLHRoaXMudG9rZW5zPW5ldyBJKHQsdGhpcy5zdHJlYW0pLHRoaXMudG9wVGVybT10LnRvcFsxXTtsZXR7ZnJvbTpofT1pWzBdO3RoaXMuc3RhY2tzPVtiLnN0YXJ0KHRoaXMsdC50b3BbMF0saCldLHRoaXMuZnJhZ21lbnRzPXMubGVuZ3RoJiZ0aGlzLnN0cmVhbS5lbmQtaD50LmJ1ZmZlckxlbmd0aCo0P25ldyBEKHMsdC5ub2RlU2V0KTpudWxsfWdldCBwYXJzZWRQb3MoKXtyZXR1cm4gdGhpcy5taW5TdGFja1Bvc31hZHZhbmNlKCl7bGV0IHQ9dGhpcy5zdGFja3MsZT10aGlzLm1pblN0YWNrUG9zLHM9dGhpcy5zdGFja3M9W10saSxoO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2Zvcig7Oyl7aWYodGhpcy50b2tlbnMubWFpblRva2VuPW51bGwsbi5wb3M+ZSlzLnB1c2gobik7ZWxzZXtpZih0aGlzLmFkdmFuY2VTdGFjayhuLHMsdCkpY29udGludWU7e2l8fChpPVtdLGg9W10pLGkucHVzaChuKTtsZXQgYT10aGlzLnRva2Vucy5nZXRNYWluVG9rZW4obik7aC5wdXNoKGEudmFsdWUsYS5lbmQpfX1icmVha319aWYoIXMubGVuZ3RoKXtsZXQgcj1pJiZZKGkpO2lmKHIpcmV0dXJuIHRoaXMuc3RhY2tUb1RyZWUocik7aWYodGhpcy5wYXJzZXIuc3RyaWN0KXRocm93IGQmJmkmJmNvbnNvbGUubG9nKFwiU3R1Y2sgd2l0aCB0b2tlbiBcIisodGhpcy50b2tlbnMubWFpblRva2VuP3RoaXMucGFyc2VyLmdldE5hbWUodGhpcy50b2tlbnMubWFpblRva2VuLnZhbHVlKTpcIm5vbmVcIikpLG5ldyBTeW50YXhFcnJvcihcIk5vIHBhcnNlIGF0IFwiK2UpO3RoaXMucmVjb3ZlcmluZ3x8KHRoaXMucmVjb3ZlcmluZz01KX1pZih0aGlzLnJlY292ZXJpbmcmJmkpe2xldCByPXRoaXMuc3RvcHBlZEF0IT1udWxsJiZpWzBdLnBvcz50aGlzLnN0b3BwZWRBdD9pWzBdOnRoaXMucnVuUmVjb3ZlcnkoaSxoLHMpO2lmKHIpcmV0dXJuIHRoaXMuc3RhY2tUb1RyZWUoci5mb3JjZUFsbCgpKX1pZih0aGlzLnJlY292ZXJpbmcpe2xldCByPXRoaXMucmVjb3ZlcmluZz09MT8xOnRoaXMucmVjb3ZlcmluZyozO2lmKHMubGVuZ3RoPnIpZm9yKHMuc29ydCgobixhKT0+YS5zY29yZS1uLnNjb3JlKTtzLmxlbmd0aD5yOylzLnBvcCgpO3Muc29tZShuPT5uLnJlZHVjZVBvcz5lKSYmdGhpcy5yZWNvdmVyaW5nLS19ZWxzZSBpZihzLmxlbmd0aD4xKXt0OmZvcihsZXQgcj0wO3I8cy5sZW5ndGgtMTtyKyspe2xldCBuPXNbcl07Zm9yKGxldCBhPXIrMTthPHMubGVuZ3RoO2ErKyl7bGV0IGw9c1thXTtpZihuLnNhbWVTdGF0ZShsKXx8bi5idWZmZXIubGVuZ3RoPjUwMCYmbC5idWZmZXIubGVuZ3RoPjUwMClpZigobi5zY29yZS1sLnNjb3JlfHxuLmJ1ZmZlci5sZW5ndGgtbC5idWZmZXIubGVuZ3RoKT4wKXMuc3BsaWNlKGEtLSwxKTtlbHNle3Muc3BsaWNlKHItLSwxKTtjb250aW51ZSB0fX19fXRoaXMubWluU3RhY2tQb3M9c1swXS5wb3M7Zm9yKGxldCByPTE7cjxzLmxlbmd0aDtyKyspc1tyXS5wb3M8dGhpcy5taW5TdGFja1BvcyYmKHRoaXMubWluU3RhY2tQb3M9c1tyXS5wb3MpO3JldHVybiBudWxsfXN0b3BBdCh0KXtpZih0aGlzLnN0b3BwZWRBdCE9bnVsbCYmdGhpcy5zdG9wcGVkQXQ8dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbid0IG1vdmUgc3RvcHBlZEF0IGZvcndhcmRcIik7dGhpcy5zdG9wcGVkQXQ9dH1hZHZhbmNlU3RhY2sodCxlLHMpe2xldCBpPXQucG9zLHtwYXJzZXI6aH09dGhpcyxyPWQ/dGhpcy5zdGFja0lEKHQpK1wiIC0+IFwiOlwiXCI7aWYodGhpcy5zdG9wcGVkQXQhPW51bGwmJmk+dGhpcy5zdG9wcGVkQXQpcmV0dXJuIHQuZm9yY2VSZWR1Y2UoKT90Om51bGw7aWYodGhpcy5mcmFnbWVudHMpe2xldCBsPXQuY3VyQ29udGV4dCYmdC5jdXJDb250ZXh0LnRyYWNrZXIuc3RyaWN0LHU9bD90LmN1ckNvbnRleHQuaGFzaDowO2ZvcihsZXQgZj10aGlzLmZyYWdtZW50cy5ub2RlQXQoaSk7Zjspe2xldCBjPXRoaXMucGFyc2VyLm5vZGVTZXQudHlwZXNbZi50eXBlLmlkXT09Zi50eXBlP2guZ2V0R290byh0LnN0YXRlLGYudHlwZS5pZCk6LTE7aWYoYz4tMSYmZi5sZW5ndGgmJighbHx8KGYucHJvcChPLmNvbnRleHRIYXNoKXx8MCk9PXUpKXJldHVybiB0LnVzZU5vZGUoZixjKSxkJiZjb25zb2xlLmxvZyhyK3RoaXMuc3RhY2tJRCh0KStgICh2aWEgcmV1c2Ugb2YgJHtoLmdldE5hbWUoZi50eXBlLmlkKX0pYCksITA7aWYoIShmIGluc3RhbmNlb2Ygdil8fGYuY2hpbGRyZW4ubGVuZ3RoPT0wfHxmLnBvc2l0aW9uc1swXT4wKWJyZWFrO2xldCBwPWYuY2hpbGRyZW5bMF07aWYocCBpbnN0YW5jZW9mIHYmJmYucG9zaXRpb25zWzBdPT0wKWY9cDtlbHNlIGJyZWFrfX1sZXQgbj1oLnN0YXRlU2xvdCh0LnN0YXRlLDQpO2lmKG4+MClyZXR1cm4gdC5yZWR1Y2UobiksZCYmY29uc29sZS5sb2cocit0aGlzLnN0YWNrSUQodCkrYCAodmlhIGFsd2F5cy1yZWR1Y2UgJHtoLmdldE5hbWUobiY2NTUzNSl9KWApLCEwO2lmKHQuc3RhY2subGVuZ3RoPj0xNWUzKWZvcig7dC5zdGFjay5sZW5ndGg+OWUzJiZ0LmZvcmNlUmVkdWNlKCk7KTtsZXQgYT10aGlzLnRva2Vucy5nZXRBY3Rpb25zKHQpO2ZvcihsZXQgbD0wO2w8YS5sZW5ndGg7KXtsZXQgdT1hW2wrK10sZj1hW2wrK10sYz1hW2wrK10scD1sPT1hLmxlbmd0aHx8IXMsZz1wP3Q6dC5zcGxpdCgpO2lmKGcuYXBwbHkodSxmLGMpLGQmJmNvbnNvbGUubG9nKHIrdGhpcy5zdGFja0lEKGcpK2AgKHZpYSAkeyh1JjY1NTM2KT09MD9cInNoaWZ0XCI6YHJlZHVjZSBvZiAke2guZ2V0TmFtZSh1JjY1NTM1KX1gfSBmb3IgJHtoLmdldE5hbWUoZil9IEAgJHtpfSR7Zz09dD9cIlwiOlwiLCBzcGxpdFwifSlgKSxwKXJldHVybiEwO2cucG9zPmk/ZS5wdXNoKGcpOnMucHVzaChnKX1yZXR1cm4hMX1hZHZhbmNlRnVsbHkodCxlKXtsZXQgcz10LnBvcztmb3IoOzspe2lmKCF0aGlzLmFkdmFuY2VTdGFjayh0LG51bGwsbnVsbCkpcmV0dXJuITE7aWYodC5wb3M+cylyZXR1cm4gRyh0LGUpLCEwfX1ydW5SZWNvdmVyeSh0LGUscyl7bGV0IGk9bnVsbCxoPSExO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdLGE9ZVtyPDwxXSxsPWVbKHI8PDEpKzFdLHU9ZD90aGlzLnN0YWNrSUQobikrXCIgLT4gXCI6XCJcIjtpZihuLmRlYWRFbmQmJihofHwoaD0hMCxuLnJlc3RhcnQoKSxkJiZjb25zb2xlLmxvZyh1K3RoaXMuc3RhY2tJRChuKStcIiAocmVzdGFydGVkKVwiKSx0aGlzLmFkdmFuY2VGdWxseShuLHMpKSkpY29udGludWU7bGV0IGY9bi5zcGxpdCgpLGM9dTtmb3IobGV0IHA9MDtmLmZvcmNlUmVkdWNlKCkmJnA8MTAmJihkJiZjb25zb2xlLmxvZyhjK3RoaXMuc3RhY2tJRChmKStcIiAodmlhIGZvcmNlLXJlZHVjZSlcIiksIXRoaXMuYWR2YW5jZUZ1bGx5KGYscykpO3ArKylkJiYoYz10aGlzLnN0YWNrSUQoZikrXCIgLT4gXCIpO2ZvcihsZXQgcCBvZiBuLnJlY292ZXJCeUluc2VydChhKSlkJiZjb25zb2xlLmxvZyh1K3RoaXMuc3RhY2tJRChwKStcIiAodmlhIHJlY292ZXItaW5zZXJ0KVwiKSx0aGlzLmFkdmFuY2VGdWxseShwLHMpO3RoaXMuc3RyZWFtLmVuZD5uLnBvcz8obD09bi5wb3MmJihsKyssYT0wKSxuLnJlY292ZXJCeURlbGV0ZShhLGwpLGQmJmNvbnNvbGUubG9nKHUrdGhpcy5zdGFja0lEKG4pK2AgKHZpYSByZWNvdmVyLWRlbGV0ZSAke3RoaXMucGFyc2VyLmdldE5hbWUoYSl9KWApLEcobixzKSk6KCFpfHxpLnNjb3JlPG4uc2NvcmUpJiYoaT1uKX1yZXR1cm4gaX1zdGFja1RvVHJlZSh0KXtyZXR1cm4gdC5jbG9zZSgpLHYuYnVpbGQoe2J1ZmZlcjpQLmNyZWF0ZSh0KSxub2RlU2V0OnRoaXMucGFyc2VyLm5vZGVTZXQsdG9wSUQ6dGhpcy50b3BUZXJtLG1heEJ1ZmZlckxlbmd0aDp0aGlzLnBhcnNlci5idWZmZXJMZW5ndGgscmV1c2VkOnRoaXMucmV1c2VkLHN0YXJ0OnRoaXMucmFuZ2VzWzBdLmZyb20sbGVuZ3RoOnQucG9zLXRoaXMucmFuZ2VzWzBdLmZyb20sbWluUmVwZWF0VHlwZTp0aGlzLnBhcnNlci5taW5SZXBlYXRUZXJtfSl9c3RhY2tJRCh0KXtsZXQgZT0oeXx8KHk9bmV3IFdlYWtNYXApKS5nZXQodCk7cmV0dXJuIGV8fHkuc2V0KHQsZT1TdHJpbmcuZnJvbUNvZGVQb2ludCh0aGlzLm5leHRTdGFja0lEKyspKSxlK3R9fTtmdW5jdGlvbiBHKG8sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBzPXRbZV07aWYocy5wb3M9PW8ucG9zJiZzLnNhbWVTdGF0ZShvKSl7dFtlXS5zY29yZTxvLnNjb3JlJiYodFtlXT1vKTtyZXR1cm59fXQucHVzaChvKX12YXIgTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUscyl7dGhpcy5zb3VyY2U9dCx0aGlzLmZsYWdzPWUsdGhpcy5kaXNhYmxlZD1zfWFsbG93cyh0KXtyZXR1cm4hdGhpcy5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlZFt0XT09MH19LEM9bz0+byxFPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3RhcnQ9dC5zdGFydCx0aGlzLnNoaWZ0PXQuc2hpZnR8fEMsdGhpcy5yZWR1Y2U9dC5yZWR1Y2V8fEMsdGhpcy5yZXVzZT10LnJldXNlfHxDLHRoaXMuaGFzaD10Lmhhc2h8fCgoKT0+MCksdGhpcy5zdHJpY3Q9dC5zdHJpY3QhPT0hMX19LFM9Y2xhc3MgZXh0ZW5kcyBxe2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy53cmFwcGVycz1bXSx0LnZlcnNpb24hPTE0KXRocm93IG5ldyBSYW5nZUVycm9yKGBQYXJzZXIgdmVyc2lvbiAoJHt0LnZlcnNpb259KSBkb2Vzbid0IG1hdGNoIHJ1bnRpbWUgdmVyc2lvbiAoJHsxNH0pYCk7bGV0IGU9dC5ub2RlTmFtZXMuc3BsaXQoXCIgXCIpO3RoaXMubWluUmVwZWF0VGVybT1lLmxlbmd0aDtmb3IobGV0IG49MDtuPHQucmVwZWF0Tm9kZUNvdW50O24rKyllLnB1c2goXCJcIik7bGV0IHM9T2JqZWN0LmtleXModC50b3BSdWxlcykubWFwKG49PnQudG9wUnVsZXNbbl1bMV0pLGk9W107Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspaS5wdXNoKFtdKTtmdW5jdGlvbiBoKG4sYSxsKXtpW25dLnB1c2goW2EsYS5kZXNlcmlhbGl6ZShTdHJpbmcobCkpXSl9aWYodC5ub2RlUHJvcHMpZm9yKGxldCBuIG9mIHQubm9kZVByb3BzKXtsZXQgYT1uWzBdO3R5cGVvZiBhPT1cInN0cmluZ1wiJiYoYT1PW2FdKTtmb3IobGV0IGw9MTtsPG4ubGVuZ3RoOyl7bGV0IHU9bltsKytdO2lmKHU+PTApaCh1LGEsbltsKytdKTtlbHNle2xldCBmPW5bbCstdV07Zm9yKGxldCBjPS11O2M+MDtjLS0paChuW2wrK10sYSxmKTtsKyt9fX10aGlzLm5vZGVTZXQ9bmV3IEooZS5tYXAoKG4sYSk9PksuZGVmaW5lKHtuYW1lOmE+PXRoaXMubWluUmVwZWF0VGVybT92b2lkIDA6bixpZDphLHByb3BzOmlbYV0sdG9wOnMuaW5kZXhPZihhKT4tMSxlcnJvcjphPT0wLHNraXBwZWQ6dC5za2lwcGVkTm9kZXMmJnQuc2tpcHBlZE5vZGVzLmluZGV4T2YoYSk+LTF9KSkpLHQucHJvcFNvdXJjZXMmJih0aGlzLm5vZGVTZXQ9dGhpcy5ub2RlU2V0LmV4dGVuZCguLi50LnByb3BTb3VyY2VzKSksdGhpcy5zdHJpY3Q9ITEsdGhpcy5idWZmZXJMZW5ndGg9UTtsZXQgcj1BKHQudG9rZW5EYXRhKTt0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuc3BlY2lhbGl6ZXJTcGVjcz10LnNwZWNpYWxpemVkfHxbXSx0aGlzLnNwZWNpYWxpemVkPW5ldyBVaW50MTZBcnJheSh0aGlzLnNwZWNpYWxpemVyU3BlY3MubGVuZ3RoKTtmb3IobGV0IG49MDtuPHRoaXMuc3BlY2lhbGl6ZXJTcGVjcy5sZW5ndGg7bisrKXRoaXMuc3BlY2lhbGl6ZWRbbl09dGhpcy5zcGVjaWFsaXplclNwZWNzW25dLnRlcm07dGhpcy5zcGVjaWFsaXplcnM9dGhpcy5zcGVjaWFsaXplclNwZWNzLm1hcChIKSx0aGlzLnN0YXRlcz1BKHQuc3RhdGVzLFVpbnQzMkFycmF5KSx0aGlzLmRhdGE9QSh0LnN0YXRlRGF0YSksdGhpcy5nb3RvPUEodC5nb3RvKSx0aGlzLm1heFRlcm09dC5tYXhUZXJtLHRoaXMudG9rZW5pemVycz10LnRva2VuaXplcnMubWFwKG49PnR5cGVvZiBuPT1cIm51bWJlclwiP25ldyB4KHIsbik6biksdGhpcy50b3BSdWxlcz10LnRvcFJ1bGVzLHRoaXMuZGlhbGVjdHM9dC5kaWFsZWN0c3x8e30sdGhpcy5keW5hbWljUHJlY2VkZW5jZXM9dC5keW5hbWljUHJlY2VkZW5jZXN8fG51bGwsdGhpcy50b2tlblByZWNUYWJsZT10LnRva2VuUHJlYyx0aGlzLnRlcm1OYW1lcz10LnRlcm1OYW1lc3x8bnVsbCx0aGlzLm1heE5vZGU9dGhpcy5ub2RlU2V0LnR5cGVzLmxlbmd0aC0xLHRoaXMuZGlhbGVjdD10aGlzLnBhcnNlRGlhbGVjdCgpLHRoaXMudG9wPXRoaXMudG9wUnVsZXNbT2JqZWN0LmtleXModGhpcy50b3BSdWxlcylbMF1dfWNyZWF0ZVBhcnNlKHQsZSxzKXtsZXQgaT1uZXcgeih0aGlzLHQsZSxzKTtmb3IobGV0IGggb2YgdGhpcy53cmFwcGVycylpPWgoaSx0LGUscyk7cmV0dXJuIGl9Z2V0R290byh0LGUscz0hMSl7bGV0IGk9dGhpcy5nb3RvO2lmKGU+PWlbMF0pcmV0dXJuLTE7Zm9yKGxldCBoPWlbZSsxXTs7KXtsZXQgcj1pW2grK10sbj1yJjEsYT1pW2grK107aWYobiYmcylyZXR1cm4gYTtmb3IobGV0IGw9aCsocj4+MSk7aDxsO2grKylpZihpW2hdPT10KXJldHVybiBhO2lmKG4pcmV0dXJuLTF9fWhhc0FjdGlvbih0LGUpe2xldCBzPXRoaXMuZGF0YTtmb3IobGV0IGk9MDtpPDI7aSsrKWZvcihsZXQgaD10aGlzLnN0YXRlU2xvdCh0LGk/MjoxKSxyOztoKz0zKXtpZigocj1zW2hdKT09NjU1MzUpaWYoc1toKzFdPT0xKXI9c1toPWsocyxoKzIpXTtlbHNle2lmKHNbaCsxXT09MilyZXR1cm4gayhzLGgrMik7YnJlYWt9aWYocj09ZXx8cj09MClyZXR1cm4gayhzLGgrMSl9cmV0dXJuIDB9c3RhdGVTbG90KHQsZSl7cmV0dXJuIHRoaXMuc3RhdGVzW3QqNitlXX1zdGF0ZUZsYWcodCxlKXtyZXR1cm4odGhpcy5zdGF0ZVNsb3QodCwwKSZlKT4wfXZhbGlkQWN0aW9uKHQsZSl7aWYoZT09dGhpcy5zdGF0ZVNsb3QodCw0KSlyZXR1cm4hMDtmb3IobGV0IHM9dGhpcy5zdGF0ZVNsb3QodCwxKTs7cys9Myl7aWYodGhpcy5kYXRhW3NdPT02NTUzNSlpZih0aGlzLmRhdGFbcysxXT09MSlzPWsodGhpcy5kYXRhLHMrMik7ZWxzZSByZXR1cm4hMTtpZihlPT1rKHRoaXMuZGF0YSxzKzEpKXJldHVybiEwfX1uZXh0U3RhdGVzKHQpe2xldCBlPVtdO2ZvcihsZXQgcz10aGlzLnN0YXRlU2xvdCh0LDEpOztzKz0zKXtpZih0aGlzLmRhdGFbc109PTY1NTM1KWlmKHRoaXMuZGF0YVtzKzFdPT0xKXM9ayh0aGlzLmRhdGEscysyKTtlbHNlIGJyZWFrO2lmKCh0aGlzLmRhdGFbcysyXSYxKT09MCl7bGV0IGk9dGhpcy5kYXRhW3MrMV07ZS5zb21lKChoLHIpPT5yJjEmJmg9PWkpfHxlLnB1c2godGhpcy5kYXRhW3NdLGkpfX1yZXR1cm4gZX1vdmVycmlkZXModCxlKXtsZXQgcz1VKHRoaXMuZGF0YSx0aGlzLnRva2VuUHJlY1RhYmxlLGUpO3JldHVybiBzPDB8fFUodGhpcy5kYXRhLHRoaXMudG9rZW5QcmVjVGFibGUsdCk8c31jb25maWd1cmUodCl7bGV0IGU9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKSx0aGlzKTtpZih0LnByb3BzJiYoZS5ub2RlU2V0PXRoaXMubm9kZVNldC5leHRlbmQoLi4udC5wcm9wcykpLHQudG9wKXtsZXQgcz10aGlzLnRvcFJ1bGVzW3QudG9wXTtpZighcyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCB0b3AgcnVsZSBuYW1lICR7dC50b3B9YCk7ZS50b3A9c31yZXR1cm4gdC50b2tlbml6ZXJzJiYoZS50b2tlbml6ZXJzPXRoaXMudG9rZW5pemVycy5tYXAocz0+e2xldCBpPXQudG9rZW5pemVycy5maW5kKGg9PmguZnJvbT09cyk7cmV0dXJuIGk/aS50bzpzfSkpLHQuc3BlY2lhbGl6ZXJzJiYoZS5zcGVjaWFsaXplcnM9dGhpcy5zcGVjaWFsaXplcnMuc2xpY2UoKSxlLnNwZWNpYWxpemVyU3BlY3M9dGhpcy5zcGVjaWFsaXplclNwZWNzLm1hcCgocyxpKT0+e2xldCBoPXQuc3BlY2lhbGl6ZXJzLmZpbmQobj0+bi5mcm9tPT1zLmV4dGVybmFsKTtpZighaClyZXR1cm4gcztsZXQgcj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2V4dGVybmFsOmgudG99KTtyZXR1cm4gZS5zcGVjaWFsaXplcnNbaV09SChyKSxyfSkpLHQuY29udGV4dFRyYWNrZXImJihlLmNvbnRleHQ9dC5jb250ZXh0VHJhY2tlciksdC5kaWFsZWN0JiYoZS5kaWFsZWN0PXRoaXMucGFyc2VEaWFsZWN0KHQuZGlhbGVjdCkpLHQuc3RyaWN0IT1udWxsJiYoZS5zdHJpY3Q9dC5zdHJpY3QpLHQud3JhcCYmKGUud3JhcHBlcnM9ZS53cmFwcGVycy5jb25jYXQodC53cmFwKSksdC5idWZmZXJMZW5ndGghPW51bGwmJihlLmJ1ZmZlckxlbmd0aD10LmJ1ZmZlckxlbmd0aCksZX1oYXNXcmFwcGVycygpe3JldHVybiB0aGlzLndyYXBwZXJzLmxlbmd0aD4wfWdldE5hbWUodCl7cmV0dXJuIHRoaXMudGVybU5hbWVzP3RoaXMudGVybU5hbWVzW3RdOlN0cmluZyh0PD10aGlzLm1heE5vZGUmJnRoaXMubm9kZVNldC50eXBlc1t0XS5uYW1lfHx0KX1nZXQgZW9mVGVybSgpe3JldHVybiB0aGlzLm1heE5vZGUrMX1nZXQgdG9wTm9kZSgpe3JldHVybiB0aGlzLm5vZGVTZXQudHlwZXNbdGhpcy50b3BbMV1dfWR5bmFtaWNQcmVjZWRlbmNlKHQpe2xldCBlPXRoaXMuZHluYW1pY1ByZWNlZGVuY2VzO3JldHVybiBlPT1udWxsPzA6ZVt0XXx8MH1wYXJzZURpYWxlY3QodCl7bGV0IGU9T2JqZWN0LmtleXModGhpcy5kaWFsZWN0cykscz1lLm1hcCgoKT0+ITEpO2lmKHQpZm9yKGxldCBoIG9mIHQuc3BsaXQoXCIgXCIpKXtsZXQgcj1lLmluZGV4T2YoaCk7cj49MCYmKHNbcl09ITApfWxldCBpPW51bGw7Zm9yKGxldCBoPTA7aDxlLmxlbmd0aDtoKyspaWYoIXNbaF0pZm9yKGxldCByPXRoaXMuZGlhbGVjdHNbZVtoXV0sbjsobj10aGlzLmRhdGFbcisrXSkhPTY1NTM1OykoaXx8KGk9bmV3IFVpbnQ4QXJyYXkodGhpcy5tYXhUZXJtKzEpKSlbbl09MTtyZXR1cm4gbmV3IE0odCxzLGkpfXN0YXRpYyBkZXNlcmlhbGl6ZSh0KXtyZXR1cm4gbmV3IFModCl9fTtmdW5jdGlvbiBrKG8sdCl7cmV0dXJuIG9bdF18b1t0KzFdPDwxNn1mdW5jdGlvbiBVKG8sdCxlKXtmb3IobGV0IHM9dCxpOyhpPW9bc10pIT02NTUzNTtzKyspaWYoaT09ZSlyZXR1cm4gcy10O3JldHVybi0xfWZ1bmN0aW9uIFkobyl7bGV0IHQ9bnVsbDtmb3IobGV0IGUgb2Ygbyl7bGV0IHM9ZS5wLnN0b3BwZWRBdDsoZS5wb3M9PWUucC5zdHJlYW0uZW5kfHxzIT1udWxsJiZlLnBvcz5zKSYmZS5wLnBhcnNlci5zdGF0ZUZsYWcoZS5zdGF0ZSwyKSYmKCF0fHx0LnNjb3JlPGUuc2NvcmUpJiYodD1lKX1yZXR1cm4gdH1mdW5jdGlvbiBIKG8pe2lmKG8uZXh0ZXJuYWwpe2xldCB0PW8uZXh0ZW5kPzE6MDtyZXR1cm4oZSxzKT0+by5leHRlcm5hbChlLHMpPDwxfHR9cmV0dXJuIG8uZ2V0fWV4cG9ydHtFIGFzIENvbnRleHRUcmFja2VyLEwgYXMgRXh0ZXJuYWxUb2tlbml6ZXIsVCBhcyBJbnB1dFN0cmVhbSxTIGFzIExSUGFyc2VyLGIgYXMgU3RhY2t9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBsZXplci9odG1sQDEuMC4xKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydHtDb250ZXh0VHJhY2tlciBhcyBDLEV4dGVybmFsVG9rZW5pemVyIGFzIGwsTFJQYXJzZXIgYXMgbX1mcm9tXCIvdjk2L0BsZXplci9sckAxLjIuMy9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9sci5qc1wiO2ltcG9ydHtzdHlsZVRhZ3MgYXMgUyx0YWdzIGFzIG99ZnJvbVwiQGxlemVyL2hpZ2hsaWdodFwiO2ltcG9ydHtwYXJzZU1peGVkIGFzIFd9ZnJvbVwiQGxlemVyL2NvbW1vblwiO3ZhciBaPTUzLF89MSx5PTU0LFY9MixFPTU1LFk9Myx1PTQsZD01LFA9NixRPTcsdz04LEQ9OSxHPTEwLGo9MTEsZz01NixOPTEyLHA9NTcsTD0xOCxBPTI3LEk9MzAsVT0zMyxNPTM1LHo9MCxLPXthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGNvbW1hbmQ6ITAsZW1iZWQ6ITAsZnJhbWU6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGtleWdlbjohMCxsaW5rOiEwLG1ldGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMCxtZW51aXRlbTohMH0sRj17ZGQ6ITAsbGk6ITAsb3B0Z3JvdXA6ITAsb3B0aW9uOiEwLHA6ITAscnA6ITAscnQ6ITAsdGJvZHk6ITAsdGQ6ITAsdGZvb3Q6ITAsdGg6ITAsdHI6ITB9LGM9e2RkOntkZDohMCxkdDohMH0sZHQ6e2RkOiEwLGR0OiEwfSxsaTp7bGk6ITB9LG9wdGlvbjp7b3B0aW9uOiEwLG9wdGdyb3VwOiEwfSxvcHRncm91cDp7b3B0Z3JvdXA6ITB9LHA6e2FkZHJlc3M6ITAsYXJ0aWNsZTohMCxhc2lkZTohMCxibG9ja3F1b3RlOiEwLGRpcjohMCxkaXY6ITAsZGw6ITAsZmllbGRzZXQ6ITAsZm9vdGVyOiEwLGZvcm06ITAsaDE6ITAsaDI6ITAsaDM6ITAsaDQ6ITAsaDU6ITAsaDY6ITAsaGVhZGVyOiEwLGhncm91cDohMCxocjohMCxtZW51OiEwLG5hdjohMCxvbDohMCxwOiEwLHByZTohMCxzZWN0aW9uOiEwLHRhYmxlOiEwLHVsOiEwfSxycDp7cnA6ITAscnQ6ITB9LHJ0OntycDohMCxydDohMH0sdGJvZHk6e3Rib2R5OiEwLHRmb290OiEwfSx0ZDp7dGQ6ITAsdGg6ITB9LHRmb290Ont0Ym9keTohMH0sdGg6e3RkOiEwLHRoOiEwfSx0aGVhZDp7dGJvZHk6ITAsdGZvb3Q6ITB9LHRyOnt0cjohMH19O2Z1bmN0aW9uIEIoZSl7cmV0dXJuIGU9PTQ1fHxlPT00Nnx8ZT09NTh8fGU+PTY1JiZlPD05MHx8ZT09OTV8fGU+PTk3JiZlPD0xMjJ8fGU+PTE2MX1mdW5jdGlvbiBYKGUpe3JldHVybiBlPT05fHxlPT0xMHx8ZT09MTN8fGU9PTMyfXZhciBpPW51bGwsVD1udWxsLGI9MDtmdW5jdGlvbiAkKGUsTyl7bGV0IHM9ZS5wb3MrTztpZihiPT1zJiZUPT1lKXJldHVybiBpO2xldCByPWUucGVlayhPKTtmb3IoO1gocik7KXI9ZS5wZWVrKCsrTyk7bGV0IHQ9XCJcIjtmb3IoO0Iocik7KXQrPVN0cmluZy5mcm9tQ2hhckNvZGUocikscj1lLnBlZWsoKytPKTtyZXR1cm4gVD1lLGI9cyxpPXQ/dC50b0xvd2VyQ2FzZSgpOnI9PUp8fHI9PUg/dm9pZCAwOm51bGx9dmFyIHE9NjAsdj02MixoPTQ3LEo9NjMsSD0zMyxlZT00NTtmdW5jdGlvbiBmKGUsTyl7dGhpcy5uYW1lPWUsdGhpcy5wYXJlbnQ9Tyx0aGlzLmhhc2g9Tz9PLmhhc2g6MDtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyl0aGlzLmhhc2grPSh0aGlzLmhhc2g8PDQpK2UuY2hhckNvZGVBdChzKSsoZS5jaGFyQ29kZUF0KHMpPDw4KX12YXIgdGU9W3UsdyxkLFAsUV0sT2U9bmV3IEMoe3N0YXJ0Om51bGwsc2hpZnQoZSxPLHMscil7cmV0dXJuIHRlLmluZGV4T2YoTyk+LTE/bmV3IGYoJChyLDEpfHxcIlwiLGUpOmV9LHJlZHVjZShlLE8pe3JldHVybiBPPT1MJiZlP2UucGFyZW50OmV9LHJldXNlKGUsTyxzLHIpe2xldCB0PU8udHlwZS5pZDtyZXR1cm4gdD09dXx8dD09TT9uZXcgZigkKHIsMSl8fFwiXCIsZSk6ZX0saGFzaChlKXtyZXR1cm4gZT9lLmhhc2g6MH0sc3RyaWN0OiExfSkscmU9bmV3IGwoKGUsTyk9PntpZihlLm5leHQhPXEpe2UubmV4dDwwJiZPLmNvbnRleHQmJmUuYWNjZXB0VG9rZW4oZyk7cmV0dXJufWUuYWR2YW5jZSgpO2xldCBzPWUubmV4dD09aDtzJiZlLmFkdmFuY2UoKTtsZXQgcj0kKGUsMCk7aWYocj09PXZvaWQgMClyZXR1cm47aWYoIXIpcmV0dXJuIGUuYWNjZXB0VG9rZW4ocz9OOnUpO2xldCB0PU8uY29udGV4dD9PLmNvbnRleHQubmFtZTpudWxsO2lmKHMpe2lmKHI9PXQpcmV0dXJuIGUuYWNjZXB0VG9rZW4oRCk7aWYodCYmRlt0XSlyZXR1cm4gZS5hY2NlcHRUb2tlbihnLC0yKTtpZihPLmRpYWxlY3RFbmFibGVkKHopKXJldHVybiBlLmFjY2VwdFRva2VuKEcpO2ZvcihsZXQgYT1PLmNvbnRleHQ7YTthPWEucGFyZW50KWlmKGEubmFtZT09cilyZXR1cm47ZS5hY2NlcHRUb2tlbihqKX1lbHNle2lmKHI9PVwic2NyaXB0XCIpcmV0dXJuIGUuYWNjZXB0VG9rZW4oZCk7aWYocj09XCJzdHlsZVwiKXJldHVybiBlLmFjY2VwdFRva2VuKFApO2lmKHI9PVwidGV4dGFyZWFcIilyZXR1cm4gZS5hY2NlcHRUb2tlbihRKTtpZihLLmhhc093blByb3BlcnR5KHIpKXJldHVybiBlLmFjY2VwdFRva2VuKHcpO3QmJmNbdF0mJmNbdF1bcl0/ZS5hY2NlcHRUb2tlbihnLC0xKTplLmFjY2VwdFRva2VuKHUpfX0se2NvbnRleHR1YWw6ITB9KSxhZT1uZXcgbChlPT57Zm9yKGxldCBPPTAscz0wOztzKyspe2lmKGUubmV4dDwwKXtzJiZlLmFjY2VwdFRva2VuKHApO2JyZWFrfWlmKGUubmV4dD09ZWUpTysrO2Vsc2UgaWYoZS5uZXh0PT12JiZPPj0yKXtzPjMmJmUuYWNjZXB0VG9rZW4ocCwtMik7YnJlYWt9ZWxzZSBPPTA7ZS5hZHZhbmNlKCl9fSk7ZnVuY3Rpb24geChlLE8scyl7bGV0IHI9MitlLmxlbmd0aDtyZXR1cm4gbmV3IGwodD0+e2ZvcihsZXQgYT0wLGs9MCxuPTA7O24rKyl7aWYodC5uZXh0PDApe24mJnQuYWNjZXB0VG9rZW4oTyk7YnJlYWt9aWYoYT09MCYmdC5uZXh0PT1xfHxhPT0xJiZ0Lm5leHQ9PWh8fGE+PTImJmE8ciYmdC5uZXh0PT1lLmNoYXJDb2RlQXQoYS0yKSlhKyssaysrO2Vsc2UgaWYoKGE9PTJ8fGE9PXIpJiZYKHQubmV4dCkpaysrO2Vsc2UgaWYoYT09ciYmdC5uZXh0PT12KXtuPms/dC5hY2NlcHRUb2tlbihPLC1rKTp0LmFjY2VwdFRva2VuKHMsLShrLTIpKTticmVha31lbHNlIGlmKCh0Lm5leHQ9PTEwfHx0Lm5leHQ9PTEzKSYmbil7dC5hY2NlcHRUb2tlbihPLDEpO2JyZWFrfWVsc2UgYT1rPTA7dC5hZHZhbmNlKCl9fSl9dmFyIHNlPXgoXCJzY3JpcHRcIixaLF8pLG9lPXgoXCJzdHlsZVwiLHksViksa2U9eChcInRleHRhcmVhXCIsRSxZKSxuZT1TKHtcIlRleHQgUmF3VGV4dFwiOm8uY29udGVudCxcIlN0YXJ0VGFnIFN0YXJ0Q2xvc2VUYWcgU2VsZkNsb3NlckVuZFRhZyBFbmRUYWcgU2VsZkNsb3NlRW5kVGFnXCI6by5hbmdsZUJyYWNrZXQsVGFnTmFtZTpvLnRhZ05hbWUsXCJNaXNtYXRjaGVkQ2xvc2VUYWcvVGFnTmFtZVwiOltvLnRhZ05hbWUsby5pbnZhbGlkXSxBdHRyaWJ1dGVOYW1lOm8uYXR0cmlidXRlTmFtZSxcIkF0dHJpYnV0ZVZhbHVlIFVucXVvdGVkQXR0cmlidXRlVmFsdWVcIjpvLmF0dHJpYnV0ZVZhbHVlLElzOm8uZGVmaW5pdGlvbk9wZXJhdG9yLFwiRW50aXR5UmVmZXJlbmNlIENoYXJhY3RlclJlZmVyZW5jZVwiOm8uY2hhcmFjdGVyLENvbW1lbnQ6by5ibG9ja0NvbW1lbnQsUHJvY2Vzc2luZ0luc3Q6by5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sRG9jdHlwZURlY2w6by5kb2N1bWVudE1ldGF9KSxsZT1tLmRlc2VyaWFsaXplKHt2ZXJzaW9uOjE0LHN0YXRlczpcIix4T1ZPeE9PTyFXUSFiTycjQ29PIV1RIWJPJyNDeU8hYlEhYk8nI0N8TyFnUSFiTycjRFBPIWxRIWJPJyNEUk8hcU9YTycjQ25PIXxPWU8nI0NuTyNYT1tPJyNDbk8kZU94TycjQ25PT09XJyNDbicjQ25PJGxPIXJPJyNEU08kdFEhYk8nI0RVTyR5USFiTycjRFZPT09XJyNEaicjRGpPT09XJyNEWCcjRFhRVk94T09PJU9RI3RPLDU5Wk8lV1EjdE8sNTllTyVgUSN0Tyw1OWhPJWhRI3RPLDU5a08lcFEjdE8sNTltT09PWCcjRF0nI0RdTyV4T1hPJyNDd08mVE9YTyw1OVlPT09ZJyNEXicjRF5PJl1PWU8nI0N6TyZoT1lPLDU5WU9PT1snI0RfJyNEX08mcE9bTycjQ31PJntPW08sNTlZT09PVycjRGAnI0RgTydUT3hPLDU5WU8nW1EhYk8nI0RRT09PVyw1OVksNTlZT09PYCcjRGEnI0RhTydhTyFyTyw1OW5PT09XLDU5biw1OW5PJ2lRIWJPLDU5cE8nblEhYk8sNTlxT09PVy1FN1YtRTdWTydzUSN0TycjQ3FPT1FPJyNEWScjRFlPKE9RI3RPMUcudU9PT1gxRy51MUcudU8oV1EjdE8xRy9QT09PWTFHL1AxRy9QTyhgUSN0TzFHL1NPT09bMUcvUzFHL1NPKGhRI3RPMUcvVk9PT1cxRy9WMUcvVk8ocFEjdE8xRy9YT09PVzFHL1gxRy9YT09PWC1FN1otRTdaTyh4USFiTycjQ3hPT09XMUcudDFHLnRPT09ZLUU3Wy1FN1tPKH1RIWJPJyNDe09PT1stRTddLUU3XU8pU1EhYk8nI0RPT09PVy1FN14tRTdeTylYUSFiTyw1OWxPT09gLUU3Xy1FN19PT09XMUcvWTFHL1lPT09XMUcvWzFHL1tPT09XMUcvXTFHL11PKV5RJmpPLDU5XU9PUU8tRTdXLUU3V09PT1g3KyRhNyskYU9PT1k3KyRrNyska09PT1s3KyRuNyskbk9PT1c3KyRxNyskcU9PT1c3KyRzNyskc08paVEhYk8sNTlkTyluUSFiTyw1OWdPKXNRIWJPLDU5ak9PT1cxRy9XMUcvV08peE8sVU8nI0N0TypaTzdbTycjQ3RPT1FPMUcudzFHLndPT09XMUcvTzFHL09PT09XMUcvUjFHL1JPT09XMUcvVTFHL1VPT09PJyNEWicjRFpPKmxPLFVPLDU5YE9PUU8sNTlgLDU5YE9PT08nI0RbJyNEW08qfU83W08sNTlgT09PTy1FN1gtRTdYT09RTzFHLnoxRy56T09PTy1FN1ktRTdZXCIsc3RhdGVEYXRhOlwiK2h+TyFdT1N+T1NTT1RQT1VRT1ZST1dUT1ldT1pbT1teT15eT19eT2BeT2FeT3deT3pfTyFjWk9+T2RhT35PZGJPfk9kY09+T2RkT35PZGVPfk8hVmZPUGtQIVlrUH5PIVdpT1FuUCFZblB+TyFYbE9ScVAhWXFQfk9TU09UUE9VUU9WUk9XVE9YcU9ZXU9aW09bXk9eXk9fXk9gXk9hXk93Xk8hY1pPfk8hWXJPflAjZE8hWnNPIWR1T35PZHZPfk9kd09+T2Z5T2p8T35PZnlPaiFPT35PZnlPaiFRT35PZnlPaiFTT35PZnlPaiFVT35PIVZmT1BrWCFZa1h+T1AhV08hWSFYT35PIVdpT1FuWCFZblh+T1EhWk8hWSFYT35PIVhsT1JxWCFZcVh+T1IhXU8hWSFYT35PIVkhWE9+UCNkT2QhX09+TyFac08hZCFhT35PaiFiT35PaiFjT35PZyFkT2ZlWGplWH5PZnlPaiFmT35PZnlPaiFnT35PZnlPaiFoT35PZnlPaiFpT35PZnlPaiFqT35PZCFrT35PZCFsT35PZCFtT35PaiFuT35PaSFxTyFfIW9PIWEhcE9+T2ohck9+T2ohc09+T2ohdE9+T18hdU9gIXVPYSF1TyFfIXdPIWAhdU9+T18heE9gIXhPYSF4TyFhIXdPIWIheE9+T18hdU9gIXVPYSF1TyFfIXtPIWAhdU9+T18heE9gIXhPYSF4TyFhIXtPIWIheE9+T2BfYSFjd3ohY35cIixnb3RvOlwiJW8hX1BQUFBQUFBQUFBQUFBQUFBQUCFgIWZQIWxQUCF4UFAheyNPI1IjWCNbI18jZSNoI2sjcSN3IWBQIWAhYFAjfSRUJGskcSR3JH0lVCVaJWFQUFBQUFBQUCVnWF5PWGBwWFVPWGBwZXphYmNkZXt9IVAhUiFUUiFxIWRSaFVSIVhoWFZPWGBwUmtWUiFYa1hXT1hgcFJuV1IhWG5YWE9YYHBRclhSIVhwWFlPWGBwUWBPUnhgUXthUX1iUSFQY1EhUmRRIVRlWiFle30hUCFSIVRRIXYhb1IheiF2USF5IXBSIXwheVFnVVIhVmdRalZSIVlqUW1XUiFbbVFwWFIhXnBRdFpSIWB0U19PYFRvWHBcIixub2RlTmFtZXM6XCJcXHUyNkEwIFN0YXJ0Q2xvc2VUYWcgU3RhcnRDbG9zZVRhZyBTdGFydENsb3NlVGFnIFN0YXJ0VGFnIFN0YXJ0VGFnIFN0YXJ0VGFnIFN0YXJ0VGFnIFN0YXJ0VGFnIFN0YXJ0Q2xvc2VUYWcgU3RhcnRDbG9zZVRhZyBTdGFydENsb3NlVGFnIEluY29tcGxldGVDbG9zZVRhZyBEb2N1bWVudCBUZXh0IEVudGl0eVJlZmVyZW5jZSBDaGFyYWN0ZXJSZWZlcmVuY2UgSW52YWxpZEVudGl0eSBFbGVtZW50IE9wZW5UYWcgVGFnTmFtZSBBdHRyaWJ1dGUgQXR0cmlidXRlTmFtZSBJcyBBdHRyaWJ1dGVWYWx1ZSBVbnF1b3RlZEF0dHJpYnV0ZVZhbHVlIEVuZFRhZyBTY3JpcHRUZXh0IENsb3NlVGFnIE9wZW5UYWcgU3R5bGVUZXh0IENsb3NlVGFnIE9wZW5UYWcgVGV4dGFyZWFUZXh0IENsb3NlVGFnIE9wZW5UYWcgQ2xvc2VUYWcgU2VsZkNsb3NpbmdUYWcgQ29tbWVudCBQcm9jZXNzaW5nSW5zdCBNaXNtYXRjaGVkQ2xvc2VUYWcgQ2xvc2VUYWcgRG9jdHlwZURlY2xcIixtYXhUZXJtOjY2LGNvbnRleHQ6T2Usbm9kZVByb3BzOltbXCJjbG9zZWRCeVwiLC0xMSwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSxcIkVuZFRhZ1wiLC00LDE5LDI5LDMyLDM1LFwiQ2xvc2VUYWdcIl0sW1wiZ3JvdXBcIiwtOSwxMiwxNSwxNiwxNywxOCwzOCwzOSw0MCw0MSxcIkVudGl0eVwiLDE0LFwiRW50aXR5IFRleHRDb250ZW50XCIsLTMsMjcsMzAsMzMsXCJUZXh0Q29udGVudCBFbnRpdHlcIl0sW1wib3BlbmVkQnlcIiwyNixcIlN0YXJ0VGFnIFN0YXJ0Q2xvc2VUYWdcIiwtNCwyOCwzMSwzNCwzNixcIk9wZW5UYWdcIl1dLHByb3BTb3VyY2VzOltuZV0sc2tpcHBlZE5vZGVzOlswXSxyZXBlYXROb2RlQ291bnQ6OSx0b2tlbkRhdGE6XCIhI2IhYVIhV09YJGtYWSlzWVopc1pdJGtdXilzXnAka3BxKXNxciRrcnMqenN2JGt2dytkd3gyeXh9JGt9IU8zZiFPIVAkayFQIVE3XyFRIVskayFbIV04dSFdIV4kayFeIV8+YiFfIWAhIXAhYCFhOFQhYSFjJGshYyF9OHUhfSNSJGsjUiNTOHUjUyNUJGsjVCNvOHUjbyRmJGskZiRnJlIkZyVXJGslVyVvOHUlbyVwJGslcCZhOHUmYSZiJGsmYjFwOHUxcDRVJGs0VTRkOHU0ZDRlJGs0ZSRJUzh1JElTJElgJGskSWAkSWI4dSRJYiRLaCRrJEtoJSN0OHUlI3QmL3gkayYveCZFdDh1JkV0JkZWJGsmRlY7J1M4dTsnUzs6ajx0OzpqPyZyJGs/JnI/QWg4dT9BaD9CWSRrP0JZP01uOHU/TW5+JGshWiR2Y15QaVchYGAhYnBPWCRrWFomUlpdJGtdXiZSXnAka3BxJlJxciRrcnMmcXN2JGt2dylSd3gncnghUCRrIVAhUSZSIVEhXiRrIV4hXyhrIV8hYSZSIWEkZiRrJGYkZyZSJGd+JGshUiZbVl5QIWBgIWJwT3ImUnJzJnFzdiZSd3gncnghXiZSIV4hXyhrIV9+JlJxJnhUXlAhYnBPdiZxd3gnWHghXiZxIV4hXydnIV9+JnFQJ15SXlBPdidYdyFeJ1ghX34nWHAnbFEhYnBPdidneH4nZ2EneVVeUCFgYE9yJ3JycydYc3YncnchXidyIV4hXyhdIV9+J3JgKGJSIWBgT3IoXXN2KF13fihdIVEoclQhYGAhYnBPcihrcnMnZ3N2KGt3eChdeH4oa1cpV1hpV09YKVJaXSlSXnApUnFyKVJzdylSeCFQKVIhUSFeKVIhYSRmKVIkZ34pUiFhKk9eXlAhYGAhYnAhXV5PWCZSWFkpc1laKXNaXSZSXV4pc15wJlJwcSlzcXImUnJzJnFzdiZSd3gncnghXiZSIV4hXyhrIV9+JlIhWitUVCFfaF5QIWJwT3YmcXd4J1h4IV4mcSFeIV8nZyFffiZxIVora2JpV2EhUk9YLHNYWi5RWl0sc11eLlFecCxzcXIsc3JzLlFzdC9ddHcsc3d4LlF4IVAscyFQIVEuUSFRIV0scyFdIV4pUiFeIWEuUSFhJGYscyRmJGcuUSRnfixzIVoseGJpV09YLHNYWi5RWl0sc11eLlFecCxzcXIsc3JzLlFzdClSdHcsc3d4LlF4IVAscyFQIVEuUSFRIV0scyFdIV4uaSFeIWEuUSFhJGYscyRmJGcuUSRnfixzIVIuVFRPcC5RcXMuUXQhXS5RIV0hXi5kIV5+LlEhUi5pT18hUiFaLnBYaVdfIVJPWClSWl0pUl5wKVJxcilSc3cpUnghUClSIVEhXilSIWEkZilSJGd+KVIhWi9iYWlXT1gwZ1haMXFaXTBnXV4xcV5wMGdxcjBncnMxcXN3MGd3eDFxeCFQMGchUCFRMXEhUSFdMGchXSFeKVIhXiFhMXEhYSRmMGckZiRnMXEkZ34wZyFaMGxhaVdPWDBnWFoxcVpdMGddXjFxXnAwZ3FyMGdyczFxc3cwZ3d4MXF4IVAwZyFQIVExcSFRIV0wZyFdIV4yViFeIWExcSFhJGYwZyRmJGcxcSRnfjBnIVIxdFNPcDFxcSFdMXEhXSFeMlEhXn4xcSFSMlZPYCFSIVoyXlhpV2AhUk9YKVJaXSlSXnApUnFyKVJzdylSeCFQKVIhUSFeKVIhYSRmKVIkZ34pUiFaM1NVIWF4XlAhYGBPcidycnMnWHN2J3J3IV4nciFeIV8oXSFffidyIV0zcWVeUGlXIWBgIWJwT1gka1haJlJaXSRrXV4mUl5wJGtwcSZScXIka3JzJnFzdiRrdncpUnd4J3J4fSRrfSFPNVMhTyFQJGshUCFRJlIhUSFeJGshXiFfKGshXyFhJlIhYSRmJGskZiRnJlIkZ34kayFdNV9kXlBpVyFgYCFicE9YJGtYWiZSWl0ka11eJlJecCRrcHEmUnFyJGtycyZxc3Yka3Z3KVJ3eCdyeCFQJGshUCFRJlIhUSFeJGshXiFfKGshXyFgJlIhYCFhNm0hYSRmJGskZiRnJlIkZ34kayFUNnhWXlAhYGAhYnAhZFFPciZScnMmcXN2JlJ3eCdyeCFeJlIhXiFfKGshX34mUiFYN2hYXlAhYGAhYnBPciZScnMmcXN2JlJ3eCdyeCFeJlIhXiFfKGshXyFgJlIhYCFhOFQhYX4mUiFYOGBWalVeUCFgYCFicE9yJlJycyZxc3YmUnd4J3J4IV4mUiFeIV8oayFffiZSIWE5VSFZZlNkUV5QaVchYGAhYnBPWCRrWFomUlpdJGtdXiZSXnAka3BxJlJxciRrcnMmcXN2JGt2dylSd3gncnh9JGt9IU84dSFPIVA4dSFQIVEmUiFRIVs4dSFbIV04dSFdIV4kayFeIV8oayFfIWEmUiFhIWMkayFjIX04dSF9I1IkayNSI1M4dSNTI1QkayNUI284dSNvJGYkayRmJGcmUiRnJH0kayR9JU84dSVPJVckayVXJW84dSVvJXAkayVwJmE4dSZhJmIkayZiMXA4dTFwNFU4dTRVNGQ4dTRkNGUkazRlJElTOHUkSVMkSWAkayRJYCRJYjh1JEliJEplJGskSmUkSmc4dSRKZyRLaCRrJEtoJSN0OHUlI3QmL3gkayYveCZFdDh1JkV0JkZWJGsmRlY7J1M4dTsnUzs6ajx0OzpqPyZyJGs/JnI/QWg4dT9BaD9CWSRrP0JZP01uOHU/TW5+JGshYT1QZV5QaVchYGAhYnBPWCRrWFomUlpdJGtdXiZSXnAka3BxJlJxciRrcnMmcXN2JGt2dylSd3gncnghUCRrIVAhUSZSIVEhXiRrIV4hXyhrIV8hYSZSIWEkZiRrJGYkZyZSJGc7PWAkazs9YDwlbDh1PCVsfiRrIVI+aVchYGAhYnBPcShrcXI/UnJzJ2dzdihrd3goXXghYShrIWEhYktqIWJ+KGshUj9ZWiFgYCFicE9yKGtycydnc3Yoa3d4KF14fShrfSFPP3shTyFmKGshZiFnQVIhZyNXKGsjVyNYR3ojWH4oayFSQFNWIWBgIWJwT3Ioa3JzJ2dzdihrd3goXXh9KGt9IU9AaSFPfihrIVJAclQhYGAhYnAhY1BPcihrcnMnZ3N2KGt3eChdeH4oayFSQVlWIWBgIWJwT3Ioa3JzJ2dzdihrd3goXXghcShrIXEhckFvIXJ+KGshUkF2ViFgYCFicE9yKGtycydnc3Yoa3d4KF14IWUoayFlIWZCXSFmfihrIVJCZFYhYGAhYnBPcihrcnMnZ3N2KGt3eChdeCF2KGshdiF3Qnkhd34oayFSQ1FWIWBgIWJwT3Ioa3JzJ2dzdihrd3goXXgheyhrIXshfENnIXx+KGshUkNuViFgYCFicE9yKGtycydnc3Yoa3d4KF14IXIoayFyIXNEVCFzfihrIVJEW1YhYGAhYnBPcihrcnMnZ3N2KGt3eChdeCFnKGshZyFoRHEhaH4oayFSRHhXIWBgIWJwT3JEcXJzRWJzdkRxdndFdnd4RmZ4IWBEcSFgIWFHYiFhfkRxcUVnVCFicE92RWJ2eEV2eCFgRWIhYCFhRlghYX5FYlBFeVJPIWBFdiFgIWFGUyFhfkV2UEZYT3pQcUZgUSFicHpQT3YnZ3h+J2dhRmtWIWBgT3JGZnJzRXZzdkZmdndFdnchYEZmIWAhYUdRIWF+RmZhR1hSIWBgelBPcihdc3YoXXd+KF0hUkdrVCFgYCFicHpQT3Ioa3JzJ2dzdihrd3goXXh+KGshUkhSViFgYCFicE9yKGtycydnc3Yoa3d4KF14I2MoayNjI2RIaCNkfihrIVJIb1YhYGAhYnBPcihrcnMnZ3N2KGt3eChdeCNWKGsjViNXSVUjV34oayFSSV1WIWBgIWJwT3Ioa3JzJ2dzdihrd3goXXgjaChrI2gjaUlyI2l+KGshUkl5ViFgYCFicE9yKGtycydnc3Yoa3d4KF14I20oayNtI25KYCNufihrIVJKZ1YhYGAhYnBPcihrcnMnZ3N2KGt3eChdeCNkKGsjZCNlSnwjZX4oayFSS1RWIWBgIWJwT3Ioa3JzJ2dzdihrd3goXXgjWChrI1gjWURxI1l+KGshUktxVyFgYCFicE9yS2pyc0xac3ZLanZ3TG93eE5QeCFhS2ohYSFiISBnIWJ+S2pxTGBUIWJwT3ZMWnZ4TG94IWFMWiFhIWJNXiFifkxaUExyUk8hYUxvIWEhYkx7IWJ+TG9QTU9STyFgTG8hYCFhTVghYX5Mb1BNXk93UHFNY1QhYnBPdkxadnhMb3ghYExaIWAhYU1yIWF+TFpxTXlRIWJwd1BPdidneH4nZ2FOVVYhYGBPck5QcnNMb3N2TlB2d0xvdyFhTlAhYSFiTmshYn5OUGFOcFYhYGBPck5QcnNMb3N2TlB2d0xvdyFgTlAhYCFhISBWIWF+TlBhISBeUiFgYHdQT3IoXXN2KF13fihdIVIhIG5XIWBgIWJwT3JLanJzTFpzdktqdndMb3d4TlB4IWBLaiFgIWEhIVchYX5LaiFSISFhVCFgYCFicHdQT3Ioa3JzJ2dzdihrd3goXXh+KGshViEhe1ZnU15QIWBgIWJwT3ImUnJzJnFzdiZSd3gncnghXiZSIV4hXyhrIV9+JlJcIix0b2tlbml6ZXJzOltzZSxvZSxrZSxyZSxhZSwwLDEsMiwzLDQsNV0sdG9wUnVsZXM6e0RvY3VtZW50OlswLDEzXX0sZGlhbGVjdHM6e25vTWF0Y2g6MH0sdG9rZW5QcmVjOjQ3Nn0pO2Z1bmN0aW9uIHVlKGUsTyl7bGV0IHM9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHIgb2YgZS5maXJzdENoaWxkLmdldENoaWxkcmVuKFwiQXR0cmlidXRlXCIpKXtsZXQgdD1yLmdldENoaWxkKFwiQXR0cmlidXRlTmFtZVwiKSxhPXIuZ2V0Q2hpbGQoXCJBdHRyaWJ1dGVWYWx1ZVwiKXx8ci5nZXRDaGlsZChcIlVucXVvdGVkQXR0cmlidXRlVmFsdWVcIik7dCYmKHNbTy5yZWFkKHQuZnJvbSx0LnRvKV09YT9hLm5hbWU9PVwiQXR0cmlidXRlVmFsdWVcIj9PLnJlYWQoYS5mcm9tKzEsYS50by0xKTpPLnJlYWQoYS5mcm9tLGEudG8pOlwiXCIpfXJldHVybiBzfWZ1bmN0aW9uIFIoZSxPLHMpe2xldCByO2ZvcihsZXQgdCBvZiBzKWlmKCF0LmF0dHJzfHx0LmF0dHJzKHJ8fChyPXVlKGUubm9kZS5wYXJlbnQsTykpKSlyZXR1cm57cGFyc2VyOnQucGFyc2VyfTtyZXR1cm4gbnVsbH1mdW5jdGlvbiB4ZShlKXtsZXQgTz1bXSxzPVtdLHI9W107Zm9yKGxldCB0IG9mIGUpe2xldCBhPXQudGFnPT1cInNjcmlwdFwiP086dC50YWc9PVwic3R5bGVcIj9zOnQudGFnPT1cInRleHRhcmVhXCI/cjpudWxsO2lmKCFhKXRocm93IG5ldyBSYW5nZUVycm9yKFwiT25seSBzY3JpcHQsIHN0eWxlLCBhbmQgdGV4dGFyZWEgdGFncyBjYW4gaG9zdCBuZXN0ZWQgcGFyc2Vyc1wiKTthLnB1c2godCl9cmV0dXJuIFcoKHQsYSk9PntsZXQgaz10LnR5cGUuaWQ7cmV0dXJuIGs9PUE/Uih0LGEsTyk6az09ST9SKHQsYSxzKTprPT1VP1IodCxhLHIpOm51bGx9KX1leHBvcnR7eGUgYXMgY29uZmlndXJlTmVzdGluZyxsZSBhcyBwYXJzZXJ9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBsZXplci9jc3NAMS4wLjApIGRlbm8gcHJvZHVjdGlvbiAqL1xuaW1wb3J0e0V4dGVybmFsVG9rZW5pemVyIGFzIFAsTFJQYXJzZXIgYXMgY31mcm9tXCIvdjk2L0BsZXplci9sckAxLjIuMy9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9sci5qc1wiO2ltcG9ydHtzdHlsZVRhZ3MgYXMgeSx0YWdzIGFzIE99ZnJvbVwiQGxlemVyL2hpZ2hsaWdodFwiO3ZhciBsPTkzLHo9MSxTPTk0LHA9OTUsbj0yLHM9WzksMTAsMTEsMTIsMTMsMzIsMTMzLDE2MCw1NzYwLDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjMyLDgyMzMsODIzOSw4Mjg3LDEyMjg4XSxYPTU4LGQ9NDAsVz05NSxtPTkxLG89NDUsUj00NixmPTM1LGc9Mzc7ZnVuY3Rpb24gcihRKXtyZXR1cm4gUT49NjUmJlE8PTkwfHxRPj05NyYmUTw9MTIyfHxRPj0xNjF9ZnVuY3Rpb24gYihRKXtyZXR1cm4gUT49NDgmJlE8PTU3fXZhciBoPW5ldyBQKChRLGUpPT57Zm9yKGxldCB0PSExLGk9MCwkPTA7OyQrKyl7bGV0e25leHQ6YX09UTtpZihyKGEpfHxhPT1vfHxhPT1XfHx0JiZiKGEpKSF0JiYoYSE9b3x8JD4wKSYmKHQ9ITApLGk9PT0kJiZhPT1vJiZpKyssUS5hZHZhbmNlKCk7ZWxzZXt0JiZRLmFjY2VwdFRva2VuKGE9PWQ/UzppPT0yJiZlLmNhblNoaWZ0KG4pP246cCk7YnJlYWt9fX0pLFQ9bmV3IFAoUT0+e2lmKHMuaW5jbHVkZXMoUS5wZWVrKC0xKSkpe2xldHtuZXh0OmV9PVE7KHIoZSl8fGU9PVd8fGU9PWZ8fGU9PVJ8fGU9PW18fGU9PVh8fGU9PW8pJiZRLmFjY2VwdFRva2VuKGwpfX0pLFU9bmV3IFAoUT0+e2lmKCFzLmluY2x1ZGVzKFEucGVlaygtMSkpKXtsZXR7bmV4dDplfT1RO2lmKGU9PWcmJihRLmFkdmFuY2UoKSxRLmFjY2VwdFRva2VuKHopKSxyKGUpKXtkbyBRLmFkdmFuY2UoKTt3aGlsZShyKFEubmV4dCkpO1EuYWNjZXB0VG9rZW4oeil9fX0pLFo9eSh7XCJpbXBvcnQgY2hhcnNldCBuYW1lc3BhY2Uga2V5ZnJhbWVzXCI6Ty5kZWZpbml0aW9uS2V5d29yZCxcIm1lZGlhIHN1cHBvcnRzXCI6Ty5jb250cm9sS2V5d29yZCxcImZyb20gdG8gc2VsZWN0b3JcIjpPLmtleXdvcmQsTmFtZXNwYWNlTmFtZTpPLm5hbWVzcGFjZSxLZXlmcmFtZU5hbWU6Ty5sYWJlbE5hbWUsVGFnTmFtZTpPLnRhZ05hbWUsQ2xhc3NOYW1lOk8uY2xhc3NOYW1lLFBzZXVkb0NsYXNzTmFtZTpPLmNvbnN0YW50KE8uY2xhc3NOYW1lKSxJZE5hbWU6Ty5sYWJlbE5hbWUsXCJGZWF0dXJlTmFtZSBQcm9wZXJ0eU5hbWVcIjpPLnByb3BlcnR5TmFtZSxBdHRyaWJ1dGVOYW1lOk8uYXR0cmlidXRlTmFtZSxOdW1iZXJMaXRlcmFsOk8ubnVtYmVyLEtleXdvcmRRdWVyeTpPLmtleXdvcmQsVW5hcnlRdWVyeU9wOk8ub3BlcmF0b3JLZXl3b3JkLFwiQ2FsbFRhZyBWYWx1ZU5hbWVcIjpPLmF0b20sVmFyaWFibGVOYW1lOk8udmFyaWFibGVOYW1lLENhbGxlZTpPLm9wZXJhdG9yS2V5d29yZCxVbml0Ok8udW5pdCxcIlVuaXZlcnNhbFNlbGVjdG9yIE5lc3RpbmdTZWxlY3RvclwiOk8uZGVmaW5pdGlvbk9wZXJhdG9yLEF0S2V5d29yZDpPLmtleXdvcmQsTWF0Y2hPcDpPLmNvbXBhcmVPcGVyYXRvcixcIkNoaWxkT3AgU2libGluZ09wLCBMb2dpY09wXCI6Ty5sb2dpY09wZXJhdG9yLEJpbk9wOk8uYXJpdGhtZXRpY09wZXJhdG9yLEltcG9ydGFudDpPLm1vZGlmaWVyLENvbW1lbnQ6Ty5ibG9ja0NvbW1lbnQsUGFyZW50aGVzaXplZENvbnRlbnQ6Ty5zcGVjaWFsKE8ubmFtZSksQ29sb3JMaXRlcmFsOk8uY29sb3IsU3RyaW5nTGl0ZXJhbDpPLnN0cmluZyxcIjpcIjpPLnB1bmN0dWF0aW9uLFwiUHNldWRvT3AgI1wiOk8uZGVyZWZPcGVyYXRvcixcIjsgLFwiOk8uc2VwYXJhdG9yLFwiKCApXCI6Ty5wYXJlbixcIlsgXVwiOk8uc3F1YXJlQnJhY2tldCxcInsgfVwiOk8uYnJhY2V9KSxfPXtfX3Byb3RvX186bnVsbCxsYW5nOjMyLFwibnRoLWNoaWxkXCI6MzIsXCJudGgtbGFzdC1jaGlsZFwiOjMyLFwibnRoLW9mLXR5cGVcIjozMixkaXI6MzIsdXJsOjYwLFwidXJsLXByZWZpeFwiOjYwLGRvbWFpbjo2MCxyZWdleHA6NjAsc2VsZWN0b3I6MTM0fSxrPXtfX3Byb3RvX186bnVsbCxcIkBpbXBvcnRcIjoxMTQsXCJAbWVkaWFcIjoxMzgsXCJAY2hhcnNldFwiOjE0MixcIkBuYW1lc3BhY2VcIjoxNDYsXCJAa2V5ZnJhbWVzXCI6MTUyLFwiQHN1cHBvcnRzXCI6MTY0fSx1PXtfX3Byb3RvX186bnVsbCxub3Q6MTI4LG9ubHk6MTI4LGZyb206MTU4LHRvOjE2MH0sRz1jLmRlc2VyaWFsaXplKHt2ZXJzaW9uOjE0LHN0YXRlczpcIjdXT1lRW09PT09RUCcjQ2QnI0NkT09RUCcjQ2MnI0NjTyFaUVtPJyNDZk8hfVFYTycjQ2FPI1VRW08nI0NoTyNhUVtPJyNEUE8jZlFbTycjRFRPT1FQJyNFYycjRWNPI2tRZE8nI0RlTyRWUVtPJyNEck8ja1FkTycjRHRPJGhRW08nI0R2TyRzUVtPJyNEeU8keFFbTycjRVBPJVdRW08nI0VST09RUycjRWInI0ViT09RUycjRVMnI0VTUVlRW09PT09RUCcjQ2cnI0NnT09RUCw1OVEsNTlRTyFaUVtPLDU5UU8lX1FbTycjRVZPJXlRV08sNTh7TyZSUVtPLDU5U08jYVFbTyw1OWtPI2ZRW08sNTlvTyVfUVtPLDU5c08lX1FbTyw1OXVPJV9RW08sNTl2TydiUVtPJyNEYE9PUVMsNTh7LDU4e09PUVAnI0NrJyNDa09PUU8nI0N9JyNDfU9PUVAsNTlTLDU5U08naVFXTyw1OVNPJ25RV08sNTlTT09RUCcjRFInI0RST09RUCw1OWssNTlrT09RTycjRFYnI0RWTydzUWBPLDU5b09PUVMnI0NwJyNDcE8ja1FkTycjQ3FPJ3tRdk8nI0NzTylWUXRPLDU6UE9PUU8nI0N4JyNDeE8naVFXTycjQ3dPKWtRV08nI0N5T09RUycjRWYnI0VmT09RTycjRGgnI0RoTylwUVtPJyNEb08qT1FXTycjRWlPJHhRW08nI0RtTypeUVdPJyNEcE9PUU8nI0VqJyNFak8lfFFXTyw1Ol5PKmNRcE8sNTpgT09RUycjRHgnI0R4TyprUVdPLDU6Yk8qcFFbTyw1OmJPT1FPJyNEeycjRHtPKnhRV08sNTplTyp9UVdPLDU6a08rVlFXTyw1Om1PT1FTLUU4US1FOFFPT1FQMUcubDFHLmxPK3lRWE8sNTpxT09RTy1FOFQtRThUT09RUzFHLmcxRy5nT09RUDFHLm4xRy5uTydpUVdPMUcubk8nblFXTzFHLm5PT1FQMUcvVjFHL1ZPLFdRYE8xRy9aTyxxUVhPMUcvX08tWFFYTzFHL2FPLW9RWE8xRy9iTy5WUVhPJyNDZE8uelFXTycjRGFPT1FTLDU5eiw1OXpPL1BRV08sNTl6Ty9YUVtPLDU5ek8vYFFkTycjQ29PL2dRW08nI0RPT09RUDFHL1oxRy9aTyNrUWRPMUcvWk8vblFwTyw1OV1PT1FTLDU5Xyw1OV9PI2tRZE8sNTlhTy92UVdPMUcva09PUVMsNTljLDU5Y08ve1EhYk8sNTllTzBUUVdPJyNEaE8wYFFXTyw1OlRPMGVRV08sNTpaTyR4UVtPLDU6Vk8keFFbTycjRVlPMG1RV08sNTtUTzB4UVdPLDU6WE8lX1FbTyw1OltPT1FTMUcveDFHL3hPT1FTMUcvejFHL3pPT1FTMUcvfDFHL3xPMVpRV08xRy98TzFgUWRPJyNEfE9PUVMxRzBQMUcwUE9PUVMxRzBWMUcwVk9PUVMxRzBYMUcwWE9PUVA3KyRZNyskWU9PUVA3KyR1NyskdU8ja1FkTzcrJHVPI2tRZE8sNTl7TzFuUVtPJyNFWE8xeFFXTzFHL2ZPT1FTMUcvZjFHL2ZPMXhRV08xRy9mTzJRUXRPJyNFVE8ydVFkTycjRWVPM1BRV08sNTlaTzNVUVhPJyNFaE8zXVFXTyw1OWpPM2JRcE83KyR1T09RUzFHLncxRy53T09RUzFHLnsxRy57T09RUzcrJVY3KyVWTzNqUVdPMUcvUE8ja1FkTzFHL29PT1FPMUcvdTFHL3VPT1FPMUcvcTFHL3FPM29RV08sNTp0T09RTy1FOFctRThXTzN9UVhPMUcvdk9PUVM3KyVoNyslaE80VVFZTycjQ3NPJXxRV08nI0VaTzReUWRPLDU6aE9PUVMsNTpoLDU6aE80bFFwTzw8SGFPNHRRdE8xRy9nT09RTyw1OnMsNTpzTzVYUVtPLDU6c09PUU8tRThWLUU4Vk9PUVM3KyVRNyslUU81Y1FXTzcrJVFPT1FTLUU4Ui1FOFJPI2tRZE8nI0VVTzVrUVdPLDU7UE9PUVQxRy51MUcudU81c1FXTyw1O1NPT1FQMUcvVTFHL1VPT1FQPDxIYTw8SGFPT1FTNyskazcrJGtPNXtRZE83KyVaT09RTzcrJWI3KyViT09RUyw1OnUsNTp1T09RUy1FOFgtRThYT09RUzFHMFMxRzBTT09RUEFOPXtBTj17TzZTUXRPJyNFV08ja1FkTycjRVdPNn1RZE83KyVST09RTzcrJVI3KyVST09RTzFHMF8xRzBfT09RUzw8SGw8PEhsTzdfUWRPLDU6cE9PUU8tRThTLUU4U09PUU88PEh1PDxIdU83aVF0Tyw1OnJPT1FTLUU4VS1FOFVPT1FPPDxIbTw8SG1cIixzdGF0ZURhdGE6XCI4an5PI1RPU1JPU35PVVdPWFdPXVRPXlRPdFVPeFZPIVlfTyFaWE8hZ1lPIWlaTyFrW08hbl1PIXReTyNSUE8jV1JPfk8jUmNPfk9daE9eaE9wZk90aU94ak98a08hUG1PI1BsTyNXZU9+TyFSbk9+UCFgT2BzTyNRcU8jUnBPfk8jUnVPfk8jUndPfk9RIVFPYnpPZiFRT2ghUU9uIVBPI1F9TyNSeU8jWntPfk9iIVNPIWIhVU8hZSFWTyNSIVJPIVIjXVB+T2ghW09uIVBPI1IhWk9+TyNSIV5Pfk9iIVNPIWIhVU8hZSFWTyNSIVJPfk8hVyNdUH5QJFZPVVdPWFdPXVRPXlRPdFVPeFZPI1JQTyNXUk9+T3BmTyFSbk9+T2AhaE8jUXFPI1JwT35PUSFwT1VXT1hXT11UT15UT3RVT3hWTyFZX08hWlhPIWdZTyFpWk8ha1tPIW5dTyF0Xk8jUiFvTyNXUk9+TyFRIXFPflAmXk9iIXRPfk9iIXVPfk92IXZPeiF3T35PUCF5T2JnWGpnWCFXZ1ghYmdYIWVnWCNSZ1hhZ1hRZ1hmZ1hoZ1huZ1hwZ1gjUWdYI1pnWHZnWCFRZ1ghVmdYfk9iIVNPaiF6TyFiIVVPIWUhVk8jUiFSTyFXI11Qfk9iIX1Pfk9iIVNPIWIhVU8hZSFWTyNSI09Pfk9wI1NPIWAjUk8hUiNdWCFXI11Yfk9iI1ZPfk9qIXpPIVcjWE9+TyFXI1lPfk9oI1pPbiFQT35PIVIjW09+TyFSbk8hYCNST35PIVJuTyFXI19Pfk9daE9eaE90aU94ak98a08hUG1PI1BsTyNXZU9+T3AheWEhUiF5YWEheWF+UCtfT3YjYU96I2JPfk9daE9eaE90aU94ak8jV2VPfk9we2l8e2khUHtpIVJ7aSNQe2lhe2l+UCxgT3B9aXx9aSFQfWkhUn1pI1B9aWF9aX5QLGBPcCFPaXwhT2khUCFPaSFSIU9pI1AhT2lhIU9pflAsYE9dV1hdIVVYXldYcFdYdFdYeFdYfFdYIVBXWCFSV1gjUFdYI1dXWH5PXSNjT35PIVEjZk8hVyNkT35PIVEjZk9+UCZeT2EjWFB+UCNrT2EjW1B+UCVfT2Ejbk9qIXpPfk8hVyNwT35PaCNxT28jcU9+T10hXlhhIVtYIWAhW1h+T10jck9+T2Ejc08hYCNST35PcCNTTyFSI11hIVcjXWF+TyFgI1JPcCFhYSFSIWFhIVchYWFhIWFhfk8hVyN4T35PIVEjfE8hcSN6TyFyI3pPI1ojeU9+TyFRIXtYIVche1h+UCZeTyFRJFNPIVcjZE9+T2ohek9RIXdYYSF3WGIhd1hmIXdYaCF3WG4hd1hwIXdYI1Ehd1gjUiF3WCNaIXdYfk9wJFZPYSNYWH5QI2tPYSRYT35PYSNbWH5QIWBPYSRaT35PaiF6T3YkW09+T2EkXU9+TyFgI1JPcCF8YSFSIXxhIVchfGF+T2EkX09+UCtfT1AheU8hUmdYfk8hUSRiTyFxI3pPIXIjek8jWiN5T35PaiF6T3YkY09+T2ohek9wJGVPIVYkZ08hUSFUaSFXIVRpflAja08hUSF7YSFXIXthflAmXk8hUSRpTyFXI2RPfk9wJFZPYSNYYX5PcGZPYSNbYX5PYSRsT35QI2tPaiF6T1EhelhiIXpYZiF6WGghelhuIXpYcCF6WCFRIXpYIVYhelghVyF6WCNRIXpYI1IhelgjWiF6WH5PcCRlTyFWJG9PIVEhVHEhVyFUcX5QI2tPYSF4YXAheGF+UCNrT2ohek9RIXphYiF6YWYhemFoIXphbiF6YXAhemEhUSF6YSFWIXphIVchemEjUSF6YSNSIXphI1ohemF+T28jWmohUGp+XCIsZ290bzpcIixPI19QUFBQUCNgUCNoI3ZQI2gkVSNoUFAkW1BQUCRiJGska1AkfVAka1AkayVlJXdQUFAmYSZnI2hQJm1QI2hQJnNQI2hQI2gjaFBQUCZ5J10naVBQI2BQUCdvJ28neSdvUCdvUCdvJ29QI2BQI2BQI2BQJ3wjYFAoUChTUFAjYFAjYChWKGUocyh5KVQpWillKWtQUFBQUFApcSl5UCplKmhQK14rYStqXWBPYm4hcyNkJFFpV09iZmtsbW4hcyF1I1YjZCRRaVFPYmZrbG1uIXMhdSNWI2QkUVFkUlIhY2VRclRSIWdoUSFnc1EhfCFPUiNgIWhxIVFYWnohdCF3IXojYiNjI2kjciRPJFYkXiRlJGYkanAhUVhaeiF0IXcheiNiI2MjaSNyJE8kViReJGUkZiRqVCN6I1sje3EhT1haeiF0IXcheiNiI2MjaSNyJE8kViReJGUkZiRqcCFRWFp6IXQhdyF6I2IjYyNpI3IkTyRWJF4kZSRmJGpRIVtbUiNaIV1RdFRSIWloUSFndFIjYCFpUXZVUiFqaVF4VlIha2pRb1NRIWZnUSNXIVhRI14hYFEjXyFhUiRgI3pRIXJuUSNnIXNRJFAjZFIkaCRRWCFwbiFzI2QkUWEhV1leX3whUyFVI1IjU1IjUCFTUiFdW1IhX11SI10hX1FiT1UhYmIhcyRRUSFzblIkUSNkUSNpIXRVJFUjaSReJGpRJF4jclIkaiRWUSRXI2lSJGskV1FnU1MhZWckWVIkWSNrUSRmJE9SJG4kZlEjZSFyUyRSI2UkVFIkVCNnUSNUIVRSI3YjVFEjeyNbUiRhI3tdYU9ibiFzI2QkUVtTT2JuIXMjZCRRUSFkZlEhbGtRIW1sUSFubVEjayF1UiN3I1ZSI2ohdFF8WFEhWVpRIXh6WyNoIXQjaSNyJFYkXiRqUSNtIXdRI28helEjfSNiUSRPI2NTJGQkTyRmUiRtJGVSI2whdVEhWFlRIWFfUiF7fFUhVFlffFEhYF5RI1EhU1EjVSFVUSN0I1JSI3UjU1wiLG5vZGVOYW1lczpcIlxcdTI2QTAgVW5pdCBWYXJpYWJsZU5hbWUgQ29tbWVudCBTdHlsZVNoZWV0IFJ1bGVTZXQgVW5pdmVyc2FsU2VsZWN0b3IgVGFnU2VsZWN0b3IgVGFnTmFtZSBOZXN0aW5nU2VsZWN0b3IgQ2xhc3NTZWxlY3RvciBDbGFzc05hbWUgUHNldWRvQ2xhc3NTZWxlY3RvciA6IDo6IFBzZXVkb0NsYXNzTmFtZSBQc2V1ZG9DbGFzc05hbWUgKSAoIEFyZ0xpc3QgVmFsdWVOYW1lIFBhcmVudGhlc2l6ZWRWYWx1ZSBDb2xvckxpdGVyYWwgTnVtYmVyTGl0ZXJhbCBTdHJpbmdMaXRlcmFsIEJpbmFyeUV4cHJlc3Npb24gQmluT3AgQ2FsbEV4cHJlc3Npb24gQ2FsbGVlIENhbGxMaXRlcmFsIENhbGxUYWcgUGFyZW50aGVzaXplZENvbnRlbnQgLCBQc2V1ZG9DbGFzc05hbWUgQXJnTGlzdCBJZFNlbGVjdG9yICMgSWROYW1lIF0gQXR0cmlidXRlU2VsZWN0b3IgWyBBdHRyaWJ1dGVOYW1lIE1hdGNoT3AgQ2hpbGRTZWxlY3RvciBDaGlsZE9wIERlc2NlbmRhbnRTZWxlY3RvciBTaWJsaW5nU2VsZWN0b3IgU2libGluZ09wIH0geyBCbG9jayBEZWNsYXJhdGlvbiBQcm9wZXJ0eU5hbWUgSW1wb3J0YW50IDsgSW1wb3J0U3RhdGVtZW50IEF0S2V5d29yZCBpbXBvcnQgS2V5d29yZFF1ZXJ5IEZlYXR1cmVRdWVyeSBGZWF0dXJlTmFtZSBCaW5hcnlRdWVyeSBMb2dpY09wIFVuYXJ5UXVlcnkgVW5hcnlRdWVyeU9wIFBhcmVudGhlc2l6ZWRRdWVyeSBTZWxlY3RvclF1ZXJ5IHNlbGVjdG9yIE1lZGlhU3RhdGVtZW50IG1lZGlhIENoYXJzZXRTdGF0ZW1lbnQgY2hhcnNldCBOYW1lc3BhY2VTdGF0ZW1lbnQgbmFtZXNwYWNlIE5hbWVzcGFjZU5hbWUgS2V5ZnJhbWVzU3RhdGVtZW50IGtleWZyYW1lcyBLZXlmcmFtZU5hbWUgS2V5ZnJhbWVMaXN0IGZyb20gdG8gU3VwcG9ydHNTdGF0ZW1lbnQgc3VwcG9ydHMgQXRSdWxlXCIsbWF4VGVybToxMDYsbm9kZVByb3BzOltbXCJvcGVuZWRCeVwiLDE3LFwiKFwiLDQ4LFwie1wiXSxbXCJjbG9zZWRCeVwiLDE4LFwiKVwiLDQ5LFwifVwiXV0scHJvcFNvdXJjZXM6W1pdLHNraXBwZWROb2RlczpbMCwzXSxyZXBlYXROb2RlQ291bnQ6OCx0b2tlbkRhdGE6XCJBeX5SIVtPWCR3WF4lXV5wJHdwcSVdcXIoY3JzK31zdCxvdHUyVXV2JHd2dzJyd3gyfXh5M2p5ejN1enszent8NF98fThVfSFPOGEhTyFQOHghUCFROVohUSFbO2UhWyFdPFkhXSFePHghXiFfJHchXyFgPVQhYCFhPWAhYSFiJHchYiFjPk8hYyF9JHchfSNPP1sjTyNQJHcjUCNRP2cjUSNSMlUjUiNUJHcjVCNVP3IjVSNjJHcjYyNkQHEjZCNvJHcjbyNwQVEjcCNxMlUjcSNyQV0jciNzQWgjcyN5JHcjeSN6JV0jeiRmJHckZiRnJV0kZyNCWSR3I0JZI0JaJV0jQlokSVMkdyRJUyRJXyVdJElfJEl8JHckSXwkSk8lXSRKTyRKVCR3JEpUJEpVJV0kSlUkS1YkdyRLViRLVyVdJEtXJkZVJHcmRlUmRlYlXSZGVn4kd1ckelFPeSVRen4lUVclVlFvV095JVF6fiVRfiViZiNUfk9YJVFYXiZ2XnAlUXBxJnZxeSVReiN5JVEjeSN6JnYjeiRmJVEkZiRnJnYkZyNCWSVRI0JZI0JaJnYjQlokSVMlUSRJUyRJXyZ2JElfJEl8JVEkSXwkSk8mdiRKTyRKVCVRJEpUJEpVJnYkSlUkS1YlUSRLViRLVyZ2JEtXJkZVJVEmRlUmRlYmdiZGVn4lUX4mfWYjVH5vV09YJVFYXiZ2XnAlUXBxJnZxeSVReiN5JVEjeSN6JnYjeiRmJVEkZiRnJnYkZyNCWSVRI0JZI0JaJnYjQlokSVMlUSRJUyRJXyZ2JElfJEl8JVEkSXwkSk8mdiRKTyRKVCVRJEpUJEpVJnYkSlUkS1YlUSRLViRLVyZ2JEtXJkZVJVEmRlUmRlYmdiZGVn4lUV4oZlNPeSVReiNdJVEjXSNeKHIjXn4lUV4od1NvV095JVF6I2ElUSNhI2IpVCNifiVRXilZU29XT3klUXojZCVRI2QjZSlmI2V+JVFeKWtTb1dPeSVReiNjJVEjYyNkKXcjZH4lUV4pfFNvV095JVF6I2YlUSNmI2cqWSNnfiVRXipfU29XT3klUXojaCVRI2gjaSprI2l+JVFeKnBTb1dPeSVReiNUJVEjVCNVKnwjVX4lUV4rUlNvV095JVF6I2IlUSNiI2MrXyNjfiVRXitkU29XT3klUXojaCVRI2gjaStwI2l+JVFeK3dRIVZVb1dPeSVRen4lUX4sUVVPWSt9WnIrfXJzLGRzI08rfSNPI1AsaSNQfit9fixpT2h+fixsUE9+K31fLHRXdFBPeSVReiFRJVEhUSFbLV4hWyFjJVEhYyFpLV4haSNUJVEjVCNaLV4jWn4lUV4tY1dvV095JVF6IVElUSFRIVsteyFbIWMlUSFjIWkteyFpI1QlUSNUI1oteyNafiVRXi5RV29XT3klUXohUSVRIVEhWy5qIVshYyVRIWMhaS5qIWkjVCVRI1QjWi5qI1p+JVFeLnFXZlVvV095JVF6IVElUSFRIVsvWiFbIWMlUSFjIWkvWiFpI1QlUSNUI1ovWiNafiVRXi9iV2ZVb1dPeSVReiFRJVEhUSFbL3ohWyFjJVEhYyFpL3ohaSNUJVEjVCNaL3ojWn4lUV4wUFdvV095JVF6IVElUSFRIVswaSFbIWMlUSFjIWkwaSFpI1QlUSNUI1owaSNafiVRXjBwV2ZVb1dPeSVReiFRJVEhUSFbMVkhWyFjJVEhYyFpMVkhaSNUJVEjVCNaMVkjWn4lUV4xX1dvV095JVF6IVElUSFRIVsxdyFbIWMlUSFjIWkxdyFpI1QlUSNUI1oxdyNafiVRXjJPUWZVb1dPeSVRen4lUVkyWFNPeSVReiFfJVEhXyFgMmUhYH4lUVkybFF6UW9XT3klUXp+JVFYMndRWFBPeSVRen4lUX4zUVVPWTJ9WncyfXd4LGR4I08yfSNPI1AzZCNQfjJ9fjNnUE9+Mn1fM29RYlZPeSVRen4lUX4zek9hfl80UlNVUGpTT3klUXohXyVRIV8hYDJlIWB+JVFfNGZValMhUFBPeSVReiFPJVEhTyFQNHghUCFRJVEhUSFbN18hW34lUV40fVNvV095JVF6IVElUSFRIVs1WiFbfiVRXjViV29XI1pVT3klUXohUSVRIVEhWzVaIVshZyVRIWchaDV6IWgjWCVRI1gjWTV6I1l+JVFeNlBXb1dPeSVRenslUXt8Nml8fSVRfSFPNmkhTyFRJVEhUSFbNnohW34lUV42blNvV095JVF6IVElUSFRIVs2eiFbfiVRXjdSU29XI1pVT3klUXohUSVRIVEhWzZ6IVt+JVFeN2ZZb1cjWlVPeSVReiFPJVEhTyFQNVohUCFRJVEhUSFbN18hWyFnJVEhZyFoNXohaCNYJVEjWCNZNXojWX4lUV84WlFwVk95JVF6fiVRXjhmVWpTT3klUXohTyVRIU8hUDR4IVAhUSVRIVEhWzdfIVt+JVFfOH1TI1dQT3klUXohUSVRIVEhWzVaIVt+JVF+OWBSalNPeSVRens5aXt+JVF+OW5Tb1dPeTlpeXo5enp7Om97fjlpfjl9Uk96OXp6ezpXe345en46WlRPejl6ens6V3shUDl6IVAhUTpqIVF+OXp+Om9PUn5+OnRVb1dPeTlpeXo5enp7Om97IVA5aSFQIVE7VyFRfjlpfjtfUW9XUn5PeSVRen4lUV47alkjWlVPeSVReiFPJVEhTyFQNVohUCFRJVEhUSFbN18hWyFnJVEhZyFoNXohaCNYJVEjWCNZNXojWX4lUVg8X1NdUE95JVF6IVslUSFbIV08ayFdfiVRWDxyUV5Qb1dPeSVRen4lUV88fVEhV1ZPeSVRen4lUVk9WVF6UU95JVF6fiVRWD1lU3xQT3klUXohYCVRIWAhYT1xIWF+JVFYPXhRfFBvV095JVF6fiVRWD5SVU95JVF6IWMlUSFjIX0+ZSF9I1QlUSNUI28+ZSNvfiVRWD5sWSFZUG9XT3klUXp9JVF9IU8+ZSFPIVElUSFRIVs+ZSFbIWMlUSFjIX0+ZSF9I1QlUSNUI28+ZSNvfiVRWD9hUXhQT3klUXp+JVFeP2xRdlVPeSVRen4lUVg/dVNPeSVReiNiJVEjYiNjQFIjY34lUVhAV1NvV095JVF6I1clUSNXI1hAZCNYfiVRWEBrUSFgUG9XT3klUXp+JVFYQHRTT3klUXojZiVRI2YjZ0BkI2d+JVFYQVZRIVJQT3klUXp+JVFfQWJRIVFWT3klUXp+JVFaQW1TIVBQT3klUXohXyVRIV8hYDJlIWB+JVFcIix0b2tlbml6ZXJzOltULFUsaCwwLDEsMiwzXSx0b3BSdWxlczp7U3R5bGVTaGVldDpbMCw0XX0sc3BlY2lhbGl6ZWQ6W3t0ZXJtOjk0LGdldDpRPT5fW1FdfHwtMX0se3Rlcm06NTYsZ2V0OlE9PmtbUV18fC0xfSx7dGVybTo5NSxnZXQ6UT0+dVtRXXx8LTF9XSx0b2tlblByZWM6MTA3OH0pO2V4cG9ydHtHIGFzIHBhcnNlcn07XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGNvZGVtaXJyb3IvbGFuZy1jc3NANi4wLjApIGRlbm8gcHJvZHVjdGlvbiAqL1xuaW1wb3J0e3BhcnNlciBhcyBtfWZyb21cIi92OTYvQGxlemVyL2Nzc0AxLjAuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9jc3MuanNcIjtpbXBvcnR7c3ludGF4VHJlZSBhcyBnLExSTGFuZ3VhZ2UgYXMgaCxpbmRlbnROb2RlUHJvcCBhcyBiLGNvbnRpbnVlZEluZGVudCBhcyBmLGZvbGROb2RlUHJvcCBhcyB3LGZvbGRJbnNpZGUgYXMgdixMYW5ndWFnZVN1cHBvcnQgYXMgeX1mcm9tXCJAY29kZW1pcnJvci9sYW5ndWFnZVwiO3ZhciBzPW51bGw7ZnVuY3Rpb24gZCgpe2lmKCFzJiZ0eXBlb2YgZG9jdW1lbnQ9PVwib2JqZWN0XCImJmRvY3VtZW50LmJvZHkpe2xldCBlPVtdO2ZvcihsZXQgciBpbiBkb2N1bWVudC5ib2R5LnN0eWxlKS9bQS1aXXxeLXxeKGl0ZW18bGVuZ3RoKSQvLnRlc3Qocil8fGUucHVzaChyKTtzPWUuc29ydCgpLm1hcChyPT4oe3R5cGU6XCJwcm9wZXJ0eVwiLGxhYmVsOnJ9KSl9cmV0dXJuIHN8fFtdfXZhciBjPVtcImFjdGl2ZVwiLFwiYWZ0ZXJcIixcImJlZm9yZVwiLFwiY2hlY2tlZFwiLFwiZGVmYXVsdFwiLFwiZGlzYWJsZWRcIixcImVtcHR5XCIsXCJlbmFibGVkXCIsXCJmaXJzdC1jaGlsZFwiLFwiZmlyc3QtbGV0dGVyXCIsXCJmaXJzdC1saW5lXCIsXCJmaXJzdC1vZi10eXBlXCIsXCJmb2N1c1wiLFwiaG92ZXJcIixcImluLXJhbmdlXCIsXCJpbmRldGVybWluYXRlXCIsXCJpbnZhbGlkXCIsXCJsYW5nXCIsXCJsYXN0LWNoaWxkXCIsXCJsYXN0LW9mLXR5cGVcIixcImxpbmtcIixcIm5vdFwiLFwibnRoLWNoaWxkXCIsXCJudGgtbGFzdC1jaGlsZFwiLFwibnRoLWxhc3Qtb2YtdHlwZVwiLFwibnRoLW9mLXR5cGVcIixcIm9ubHktb2YtdHlwZVwiLFwib25seS1jaGlsZFwiLFwib3B0aW9uYWxcIixcIm91dC1vZi1yYW5nZVwiLFwicGxhY2Vob2xkZXJcIixcInJlYWQtb25seVwiLFwicmVhZC13cml0ZVwiLFwicmVxdWlyZWRcIixcInJvb3RcIixcInNlbGVjdGlvblwiLFwidGFyZ2V0XCIsXCJ2YWxpZFwiLFwidmlzaXRlZFwiXS5tYXAoZT0+KHt0eXBlOlwiY2xhc3NcIixsYWJlbDplfSkpLHU9W1wiYWJvdmVcIixcImFic29sdXRlXCIsXCJhY3RpdmVib3JkZXJcIixcImFkZGl0aXZlXCIsXCJhY3RpdmVjYXB0aW9uXCIsXCJhZnRlci13aGl0ZS1zcGFjZVwiLFwiYWhlYWRcIixcImFsaWFzXCIsXCJhbGxcIixcImFsbC1zY3JvbGxcIixcImFscGhhYmV0aWNcIixcImFsdGVybmF0ZVwiLFwiYWx3YXlzXCIsXCJhbnRpYWxpYXNlZFwiLFwiYXBwd29ya3NwYWNlXCIsXCJhc3Rlcmlza3NcIixcImF0dHJcIixcImF1dG9cIixcImF1dG8tZmxvd1wiLFwiYXZvaWRcIixcImF2b2lkLWNvbHVtblwiLFwiYXZvaWQtcGFnZVwiLFwiYXZvaWQtcmVnaW9uXCIsXCJheGlzLXBhblwiLFwiYmFja2dyb3VuZFwiLFwiYmFja3dhcmRzXCIsXCJiYXNlbGluZVwiLFwiYmVsb3dcIixcImJpZGktb3ZlcnJpZGVcIixcImJsaW5rXCIsXCJibG9ja1wiLFwiYmxvY2stYXhpc1wiLFwiYm9sZFwiLFwiYm9sZGVyXCIsXCJib3JkZXJcIixcImJvcmRlci1ib3hcIixcImJvdGhcIixcImJvdHRvbVwiLFwiYnJlYWtcIixcImJyZWFrLWFsbFwiLFwiYnJlYWstd29yZFwiLFwiYnVsbGV0c1wiLFwiYnV0dG9uXCIsXCJidXR0b24tYmV2ZWxcIixcImJ1dHRvbmZhY2VcIixcImJ1dHRvbmhpZ2hsaWdodFwiLFwiYnV0dG9uc2hhZG93XCIsXCJidXR0b250ZXh0XCIsXCJjYWxjXCIsXCJjYXBpdGFsaXplXCIsXCJjYXBzLWxvY2staW5kaWNhdG9yXCIsXCJjYXB0aW9uXCIsXCJjYXB0aW9udGV4dFwiLFwiY2FyZXRcIixcImNlbGxcIixcImNlbnRlclwiLFwiY2hlY2tib3hcIixcImNpcmNsZVwiLFwiY2prLWRlY2ltYWxcIixcImNsZWFyXCIsXCJjbGlwXCIsXCJjbG9zZS1xdW90ZVwiLFwiY29sLXJlc2l6ZVwiLFwiY29sbGFwc2VcIixcImNvbG9yXCIsXCJjb2xvci1idXJuXCIsXCJjb2xvci1kb2RnZVwiLFwiY29sdW1uXCIsXCJjb2x1bW4tcmV2ZXJzZVwiLFwiY29tcGFjdFwiLFwiY29uZGVuc2VkXCIsXCJjb250YWluXCIsXCJjb250ZW50XCIsXCJjb250ZW50c1wiLFwiY29udGVudC1ib3hcIixcImNvbnRleHQtbWVudVwiLFwiY29udGludW91c1wiLFwiY29weVwiLFwiY291bnRlclwiLFwiY291bnRlcnNcIixcImNvdmVyXCIsXCJjcm9wXCIsXCJjcm9zc1wiLFwiY3Jvc3NoYWlyXCIsXCJjdXJyZW50Y29sb3JcIixcImN1cnNpdmVcIixcImN5Y2xpY1wiLFwiZGFya2VuXCIsXCJkYXNoZWRcIixcImRlY2ltYWxcIixcImRlY2ltYWwtbGVhZGluZy16ZXJvXCIsXCJkZWZhdWx0XCIsXCJkZWZhdWx0LWJ1dHRvblwiLFwiZGVuc2VcIixcImRlc3RpbmF0aW9uLWF0b3BcIixcImRlc3RpbmF0aW9uLWluXCIsXCJkZXN0aW5hdGlvbi1vdXRcIixcImRlc3RpbmF0aW9uLW92ZXJcIixcImRpZmZlcmVuY2VcIixcImRpc2NcIixcImRpc2NhcmRcIixcImRpc2Nsb3N1cmUtY2xvc2VkXCIsXCJkaXNjbG9zdXJlLW9wZW5cIixcImRvY3VtZW50XCIsXCJkb3QtZGFzaFwiLFwiZG90LWRvdC1kYXNoXCIsXCJkb3R0ZWRcIixcImRvdWJsZVwiLFwiZG93blwiLFwiZS1yZXNpemVcIixcImVhc2VcIixcImVhc2UtaW5cIixcImVhc2UtaW4tb3V0XCIsXCJlYXNlLW91dFwiLFwiZWxlbWVudFwiLFwiZWxsaXBzZVwiLFwiZWxsaXBzaXNcIixcImVtYmVkXCIsXCJlbmRcIixcImV0aGlvcGljLWFiZWdlZGUtZ2V6XCIsXCJldGhpb3BpYy1oYWxlaGFtZS1hYS1lclwiLFwiZXRoaW9waWMtaGFsZWhhbWUtZ2V6XCIsXCJldy1yZXNpemVcIixcImV4Y2x1c2lvblwiLFwiZXhwYW5kZWRcIixcImV4dGVuZHNcIixcImV4dHJhLWNvbmRlbnNlZFwiLFwiZXh0cmEtZXhwYW5kZWRcIixcImZhbnRhc3lcIixcImZhc3RcIixcImZpbGxcIixcImZpbGwtYm94XCIsXCJmaXhlZFwiLFwiZmxhdFwiLFwiZmxleFwiLFwiZmxleC1lbmRcIixcImZsZXgtc3RhcnRcIixcImZvb3Rub3Rlc1wiLFwiZm9yd2FyZHNcIixcImZyb21cIixcImdlb21ldHJpY1ByZWNpc2lvblwiLFwiZ3JheXRleHRcIixcImdyaWRcIixcImdyb292ZVwiLFwiaGFuZFwiLFwiaGFyZC1saWdodFwiLFwiaGVscFwiLFwiaGlkZGVuXCIsXCJoaWRlXCIsXCJoaWdoZXJcIixcImhpZ2hsaWdodFwiLFwiaGlnaGxpZ2h0dGV4dFwiLFwiaG9yaXpvbnRhbFwiLFwiaHNsXCIsXCJoc2xhXCIsXCJodWVcIixcImljb25cIixcImlnbm9yZVwiLFwiaW5hY3RpdmVib3JkZXJcIixcImluYWN0aXZlY2FwdGlvblwiLFwiaW5hY3RpdmVjYXB0aW9udGV4dFwiLFwiaW5maW5pdGVcIixcImluZm9iYWNrZ3JvdW5kXCIsXCJpbmZvdGV4dFwiLFwiaW5oZXJpdFwiLFwiaW5pdGlhbFwiLFwiaW5saW5lXCIsXCJpbmxpbmUtYXhpc1wiLFwiaW5saW5lLWJsb2NrXCIsXCJpbmxpbmUtZmxleFwiLFwiaW5saW5lLWdyaWRcIixcImlubGluZS10YWJsZVwiLFwiaW5zZXRcIixcImluc2lkZVwiLFwiaW50cmluc2ljXCIsXCJpbnZlcnRcIixcIml0YWxpY1wiLFwianVzdGlmeVwiLFwia2VlcC1hbGxcIixcImxhbmRzY2FwZVwiLFwibGFyZ2VcIixcImxhcmdlclwiLFwibGVmdFwiLFwibGV2ZWxcIixcImxpZ2h0ZXJcIixcImxpZ2h0ZW5cIixcImxpbmUtdGhyb3VnaFwiLFwibGluZWFyXCIsXCJsaW5lYXItZ3JhZGllbnRcIixcImxpbmVzXCIsXCJsaXN0LWl0ZW1cIixcImxpc3Rib3hcIixcImxpc3RpdGVtXCIsXCJsb2NhbFwiLFwibG9naWNhbFwiLFwibG91ZFwiLFwibG93ZXJcIixcImxvd2VyLWhleGFkZWNpbWFsXCIsXCJsb3dlci1sYXRpblwiLFwibG93ZXItbm9yd2VnaWFuXCIsXCJsb3dlcmNhc2VcIixcImx0clwiLFwibHVtaW5vc2l0eVwiLFwibWFuaXB1bGF0aW9uXCIsXCJtYXRjaFwiLFwibWF0cml4XCIsXCJtYXRyaXgzZFwiLFwibWVkaXVtXCIsXCJtZW51XCIsXCJtZW51dGV4dFwiLFwibWVzc2FnZS1ib3hcIixcIm1pZGRsZVwiLFwibWluLWludHJpbnNpY1wiLFwibWl4XCIsXCJtb25vc3BhY2VcIixcIm1vdmVcIixcIm11bHRpcGxlXCIsXCJtdWx0aXBsZV9tYXNrX2ltYWdlc1wiLFwibXVsdGlwbHlcIixcIm4tcmVzaXplXCIsXCJuYXJyb3dlclwiLFwibmUtcmVzaXplXCIsXCJuZXN3LXJlc2l6ZVwiLFwibm8tY2xvc2UtcXVvdGVcIixcIm5vLWRyb3BcIixcIm5vLW9wZW4tcXVvdGVcIixcIm5vLXJlcGVhdFwiLFwibm9uZVwiLFwibm9ybWFsXCIsXCJub3QtYWxsb3dlZFwiLFwibm93cmFwXCIsXCJucy1yZXNpemVcIixcIm51bWJlcnNcIixcIm51bWVyaWNcIixcIm53LXJlc2l6ZVwiLFwibndzZS1yZXNpemVcIixcIm9ibGlxdWVcIixcIm9wYWNpdHlcIixcIm9wZW4tcXVvdGVcIixcIm9wdGltaXplTGVnaWJpbGl0eVwiLFwib3B0aW1pemVTcGVlZFwiLFwib3V0c2V0XCIsXCJvdXRzaWRlXCIsXCJvdXRzaWRlLXNoYXBlXCIsXCJvdmVybGF5XCIsXCJvdmVybGluZVwiLFwicGFkZGluZ1wiLFwicGFkZGluZy1ib3hcIixcInBhaW50ZWRcIixcInBhZ2VcIixcInBhdXNlZFwiLFwicGVyc3BlY3RpdmVcIixcInBpbmNoLXpvb21cIixcInBsdXMtZGFya2VyXCIsXCJwbHVzLWxpZ2h0ZXJcIixcInBvaW50ZXJcIixcInBvbHlnb25cIixcInBvcnRyYWl0XCIsXCJwcmVcIixcInByZS1saW5lXCIsXCJwcmUtd3JhcFwiLFwicHJlc2VydmUtM2RcIixcInByb2dyZXNzXCIsXCJwdXNoLWJ1dHRvblwiLFwicmFkaWFsLWdyYWRpZW50XCIsXCJyYWRpb1wiLFwicmVhZC1vbmx5XCIsXCJyZWFkLXdyaXRlXCIsXCJyZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5XCIsXCJyZWN0YW5nbGVcIixcInJlZ2lvblwiLFwicmVsYXRpdmVcIixcInJlcGVhdFwiLFwicmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudFwiLFwicmVwZWF0aW5nLXJhZGlhbC1ncmFkaWVudFwiLFwicmVwZWF0LXhcIixcInJlcGVhdC15XCIsXCJyZXNldFwiLFwicmV2ZXJzZVwiLFwicmdiXCIsXCJyZ2JhXCIsXCJyaWRnZVwiLFwicmlnaHRcIixcInJvdGF0ZVwiLFwicm90YXRlM2RcIixcInJvdGF0ZVhcIixcInJvdGF0ZVlcIixcInJvdGF0ZVpcIixcInJvdW5kXCIsXCJyb3dcIixcInJvdy1yZXNpemVcIixcInJvdy1yZXZlcnNlXCIsXCJydGxcIixcInJ1bi1pblwiLFwicnVubmluZ1wiLFwicy1yZXNpemVcIixcInNhbnMtc2VyaWZcIixcInNhdHVyYXRpb25cIixcInNjYWxlXCIsXCJzY2FsZTNkXCIsXCJzY2FsZVhcIixcInNjYWxlWVwiLFwic2NhbGVaXCIsXCJzY3JlZW5cIixcInNjcm9sbFwiLFwic2Nyb2xsYmFyXCIsXCJzY3JvbGwtcG9zaXRpb25cIixcInNlLXJlc2l6ZVwiLFwic2VsZi1zdGFydFwiLFwic2VsZi1lbmRcIixcInNlbWktY29uZGVuc2VkXCIsXCJzZW1pLWV4cGFuZGVkXCIsXCJzZXBhcmF0ZVwiLFwic2VyaWZcIixcInNob3dcIixcInNpbmdsZVwiLFwic2tld1wiLFwic2tld1hcIixcInNrZXdZXCIsXCJza2lwLXdoaXRlLXNwYWNlXCIsXCJzbGlkZVwiLFwic2xpZGVyLWhvcml6b250YWxcIixcInNsaWRlci12ZXJ0aWNhbFwiLFwic2xpZGVydGh1bWItaG9yaXpvbnRhbFwiLFwic2xpZGVydGh1bWItdmVydGljYWxcIixcInNsb3dcIixcInNtYWxsXCIsXCJzbWFsbC1jYXBzXCIsXCJzbWFsbC1jYXB0aW9uXCIsXCJzbWFsbGVyXCIsXCJzb2Z0LWxpZ2h0XCIsXCJzb2xpZFwiLFwic291cmNlLWF0b3BcIixcInNvdXJjZS1pblwiLFwic291cmNlLW91dFwiLFwic291cmNlLW92ZXJcIixcInNwYWNlXCIsXCJzcGFjZS1hcm91bmRcIixcInNwYWNlLWJldHdlZW5cIixcInNwYWNlLWV2ZW5seVwiLFwic3BlbGwtb3V0XCIsXCJzcXVhcmVcIixcInN0YXJ0XCIsXCJzdGF0aWNcIixcInN0YXR1cy1iYXJcIixcInN0cmV0Y2hcIixcInN0cm9rZVwiLFwic3Ryb2tlLWJveFwiLFwic3ViXCIsXCJzdWJwaXhlbC1hbnRpYWxpYXNlZFwiLFwic3ZnX21hc2tzXCIsXCJzdXBlclwiLFwic3ctcmVzaXplXCIsXCJzeW1ib2xpY1wiLFwic3ltYm9sc1wiLFwic3lzdGVtLXVpXCIsXCJ0YWJsZVwiLFwidGFibGUtY2FwdGlvblwiLFwidGFibGUtY2VsbFwiLFwidGFibGUtY29sdW1uXCIsXCJ0YWJsZS1jb2x1bW4tZ3JvdXBcIixcInRhYmxlLWZvb3Rlci1ncm91cFwiLFwidGFibGUtaGVhZGVyLWdyb3VwXCIsXCJ0YWJsZS1yb3dcIixcInRhYmxlLXJvdy1ncm91cFwiLFwidGV4dFwiLFwidGV4dC1ib3R0b21cIixcInRleHQtdG9wXCIsXCJ0ZXh0YXJlYVwiLFwidGV4dGZpZWxkXCIsXCJ0aGlja1wiLFwidGhpblwiLFwidGhyZWVkZGFya3NoYWRvd1wiLFwidGhyZWVkZmFjZVwiLFwidGhyZWVkaGlnaGxpZ2h0XCIsXCJ0aHJlZWRsaWdodHNoYWRvd1wiLFwidGhyZWVkc2hhZG93XCIsXCJ0b1wiLFwidG9wXCIsXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZVwiLFwidHJhbnNsYXRlM2RcIixcInRyYW5zbGF0ZVhcIixcInRyYW5zbGF0ZVlcIixcInRyYW5zbGF0ZVpcIixcInRyYW5zcGFyZW50XCIsXCJ1bHRyYS1jb25kZW5zZWRcIixcInVsdHJhLWV4cGFuZGVkXCIsXCJ1bmRlcmxpbmVcIixcInVuaWRpcmVjdGlvbmFsLXBhblwiLFwidW5zZXRcIixcInVwXCIsXCJ1cHBlci1sYXRpblwiLFwidXBwZXJjYXNlXCIsXCJ1cmxcIixcInZhclwiLFwidmVydGljYWxcIixcInZlcnRpY2FsLXRleHRcIixcInZpZXctYm94XCIsXCJ2aXNpYmxlXCIsXCJ2aXNpYmxlRmlsbFwiLFwidmlzaWJsZVBhaW50ZWRcIixcInZpc2libGVTdHJva2VcIixcInZpc3VhbFwiLFwidy1yZXNpemVcIixcIndhaXRcIixcIndhdmVcIixcIndpZGVyXCIsXCJ3aW5kb3dcIixcIndpbmRvd2ZyYW1lXCIsXCJ3aW5kb3d0ZXh0XCIsXCJ3b3Jkc1wiLFwid3JhcFwiLFwid3JhcC1yZXZlcnNlXCIsXCJ4LWxhcmdlXCIsXCJ4LXNtYWxsXCIsXCJ4b3JcIixcInh4LWxhcmdlXCIsXCJ4eC1zbWFsbFwiXS5tYXAoZT0+KHt0eXBlOlwia2V5d29yZFwiLGxhYmVsOmV9KSkuY29uY2F0KFtcImFsaWNlYmx1ZVwiLFwiYW50aXF1ZXdoaXRlXCIsXCJhcXVhXCIsXCJhcXVhbWFyaW5lXCIsXCJhenVyZVwiLFwiYmVpZ2VcIixcImJpc3F1ZVwiLFwiYmxhY2tcIixcImJsYW5jaGVkYWxtb25kXCIsXCJibHVlXCIsXCJibHVldmlvbGV0XCIsXCJicm93blwiLFwiYnVybHl3b29kXCIsXCJjYWRldGJsdWVcIixcImNoYXJ0cmV1c2VcIixcImNob2NvbGF0ZVwiLFwiY29yYWxcIixcImNvcm5mbG93ZXJibHVlXCIsXCJjb3Juc2lsa1wiLFwiY3JpbXNvblwiLFwiY3lhblwiLFwiZGFya2JsdWVcIixcImRhcmtjeWFuXCIsXCJkYXJrZ29sZGVucm9kXCIsXCJkYXJrZ3JheVwiLFwiZGFya2dyZWVuXCIsXCJkYXJra2hha2lcIixcImRhcmttYWdlbnRhXCIsXCJkYXJrb2xpdmVncmVlblwiLFwiZGFya29yYW5nZVwiLFwiZGFya29yY2hpZFwiLFwiZGFya3JlZFwiLFwiZGFya3NhbG1vblwiLFwiZGFya3NlYWdyZWVuXCIsXCJkYXJrc2xhdGVibHVlXCIsXCJkYXJrc2xhdGVncmF5XCIsXCJkYXJrdHVycXVvaXNlXCIsXCJkYXJrdmlvbGV0XCIsXCJkZWVwcGlua1wiLFwiZGVlcHNreWJsdWVcIixcImRpbWdyYXlcIixcImRvZGdlcmJsdWVcIixcImZpcmVicmlja1wiLFwiZmxvcmFsd2hpdGVcIixcImZvcmVzdGdyZWVuXCIsXCJmdWNoc2lhXCIsXCJnYWluc2Jvcm9cIixcImdob3N0d2hpdGVcIixcImdvbGRcIixcImdvbGRlbnJvZFwiLFwiZ3JheVwiLFwiZ3JleVwiLFwiZ3JlZW5cIixcImdyZWVueWVsbG93XCIsXCJob25leWRld1wiLFwiaG90cGlua1wiLFwiaW5kaWFucmVkXCIsXCJpbmRpZ29cIixcIml2b3J5XCIsXCJraGFraVwiLFwibGF2ZW5kZXJcIixcImxhdmVuZGVyYmx1c2hcIixcImxhd25ncmVlblwiLFwibGVtb25jaGlmZm9uXCIsXCJsaWdodGJsdWVcIixcImxpZ2h0Y29yYWxcIixcImxpZ2h0Y3lhblwiLFwibGlnaHRnb2xkZW5yb2R5ZWxsb3dcIixcImxpZ2h0Z3JheVwiLFwibGlnaHRncmVlblwiLFwibGlnaHRwaW5rXCIsXCJsaWdodHNhbG1vblwiLFwibGlnaHRzZWFncmVlblwiLFwibGlnaHRza3libHVlXCIsXCJsaWdodHNsYXRlZ3JheVwiLFwibGlnaHRzdGVlbGJsdWVcIixcImxpZ2h0eWVsbG93XCIsXCJsaW1lXCIsXCJsaW1lZ3JlZW5cIixcImxpbmVuXCIsXCJtYWdlbnRhXCIsXCJtYXJvb25cIixcIm1lZGl1bWFxdWFtYXJpbmVcIixcIm1lZGl1bWJsdWVcIixcIm1lZGl1bW9yY2hpZFwiLFwibWVkaXVtcHVycGxlXCIsXCJtZWRpdW1zZWFncmVlblwiLFwibWVkaXVtc2xhdGVibHVlXCIsXCJtZWRpdW1zcHJpbmdncmVlblwiLFwibWVkaXVtdHVycXVvaXNlXCIsXCJtZWRpdW12aW9sZXRyZWRcIixcIm1pZG5pZ2h0Ymx1ZVwiLFwibWludGNyZWFtXCIsXCJtaXN0eXJvc2VcIixcIm1vY2Nhc2luXCIsXCJuYXZham93aGl0ZVwiLFwibmF2eVwiLFwib2xkbGFjZVwiLFwib2xpdmVcIixcIm9saXZlZHJhYlwiLFwib3JhbmdlXCIsXCJvcmFuZ2VyZWRcIixcIm9yY2hpZFwiLFwicGFsZWdvbGRlbnJvZFwiLFwicGFsZWdyZWVuXCIsXCJwYWxldHVycXVvaXNlXCIsXCJwYWxldmlvbGV0cmVkXCIsXCJwYXBheWF3aGlwXCIsXCJwZWFjaHB1ZmZcIixcInBlcnVcIixcInBpbmtcIixcInBsdW1cIixcInBvd2RlcmJsdWVcIixcInB1cnBsZVwiLFwicmViZWNjYXB1cnBsZVwiLFwicmVkXCIsXCJyb3N5YnJvd25cIixcInJveWFsYmx1ZVwiLFwic2FkZGxlYnJvd25cIixcInNhbG1vblwiLFwic2FuZHlicm93blwiLFwic2VhZ3JlZW5cIixcInNlYXNoZWxsXCIsXCJzaWVubmFcIixcInNpbHZlclwiLFwic2t5Ymx1ZVwiLFwic2xhdGVibHVlXCIsXCJzbGF0ZWdyYXlcIixcInNub3dcIixcInNwcmluZ2dyZWVuXCIsXCJzdGVlbGJsdWVcIixcInRhblwiLFwidGVhbFwiLFwidGhpc3RsZVwiLFwidG9tYXRvXCIsXCJ0dXJxdW9pc2VcIixcInZpb2xldFwiLFwid2hlYXRcIixcIndoaXRlXCIsXCJ3aGl0ZXNtb2tlXCIsXCJ5ZWxsb3dcIixcInllbGxvd2dyZWVuXCJdLm1hcChlPT4oe3R5cGU6XCJjb25zdGFudFwiLGxhYmVsOmV9KSkpLGs9W1wiYVwiLFwiYWJiclwiLFwiYWRkcmVzc1wiLFwiYXJ0aWNsZVwiLFwiYXNpZGVcIixcImJcIixcImJkaVwiLFwiYmRvXCIsXCJibG9ja3F1b3RlXCIsXCJib2R5XCIsXCJiclwiLFwiYnV0dG9uXCIsXCJjYW52YXNcIixcImNhcHRpb25cIixcImNpdGVcIixcImNvZGVcIixcImNvbFwiLFwiY29sZ3JvdXBcIixcImRkXCIsXCJkZWxcIixcImRldGFpbHNcIixcImRmblwiLFwiZGlhbG9nXCIsXCJkaXZcIixcImRsXCIsXCJkdFwiLFwiZW1cIixcImZpZ2NhcHRpb25cIixcImZpZ3VyZVwiLFwiZm9vdGVyXCIsXCJmb3JtXCIsXCJoZWFkZXJcIixcImhncm91cFwiLFwiaDFcIixcImgyXCIsXCJoM1wiLFwiaDRcIixcImg1XCIsXCJoNlwiLFwiaHJcIixcImh0bWxcIixcImlcIixcImlmcmFtZVwiLFwiaW1nXCIsXCJpbnB1dFwiLFwiaW5zXCIsXCJrYmRcIixcImxhYmVsXCIsXCJsZWdlbmRcIixcImxpXCIsXCJtYWluXCIsXCJtZXRlclwiLFwibmF2XCIsXCJvbFwiLFwib3V0cHV0XCIsXCJwXCIsXCJwcmVcIixcInJ1YnlcIixcInNlY3Rpb25cIixcInNlbGVjdFwiLFwic21hbGxcIixcInNvdXJjZVwiLFwic3BhblwiLFwic3Ryb25nXCIsXCJzdWJcIixcInN1bW1hcnlcIixcInN1cFwiLFwidGFibGVcIixcInRib2R5XCIsXCJ0ZFwiLFwidGVtcGxhdGVcIixcInRleHRhcmVhXCIsXCJ0Zm9vdFwiLFwidGhcIixcInRoZWFkXCIsXCJ0clwiLFwidVwiLFwidWxcIl0ubWFwKGU9Pih7dHlwZTpcInR5cGVcIixsYWJlbDplfSkpLGE9L15bXFx3LV0qLyx4PWU9PntsZXR7c3RhdGU6cixwb3M6b309ZSx0PWcocikucmVzb2x2ZUlubmVyKG8sLTEpO2lmKHQubmFtZT09XCJQcm9wZXJ0eU5hbWVcIilyZXR1cm57ZnJvbTp0LmZyb20sb3B0aW9uczpkKCksdmFsaWRGb3I6YX07aWYodC5uYW1lPT1cIlZhbHVlTmFtZVwiKXJldHVybntmcm9tOnQuZnJvbSxvcHRpb25zOnUsdmFsaWRGb3I6YX07aWYodC5uYW1lPT1cIlBzZXVkb0NsYXNzTmFtZVwiKXJldHVybntmcm9tOnQuZnJvbSxvcHRpb25zOmMsdmFsaWRGb3I6YX07aWYodC5uYW1lPT1cIlRhZ05hbWVcIil7Zm9yKGxldHtwYXJlbnQ6bn09dDtuO249bi5wYXJlbnQpaWYobi5uYW1lPT1cIkJsb2NrXCIpcmV0dXJue2Zyb206dC5mcm9tLG9wdGlvbnM6ZCgpLHZhbGlkRm9yOmF9O3JldHVybntmcm9tOnQuZnJvbSxvcHRpb25zOmssdmFsaWRGb3I6YX19aWYoIWUuZXhwbGljaXQpcmV0dXJuIG51bGw7bGV0IGk9dC5yZXNvbHZlKG8pLGw9aS5jaGlsZEJlZm9yZShvKTtyZXR1cm4gbCYmbC5uYW1lPT1cIjpcIiYmaS5uYW1lPT1cIlBzZXVkb0NsYXNzU2VsZWN0b3JcIj97ZnJvbTpvLG9wdGlvbnM6Yyx2YWxpZEZvcjphfTpsJiZsLm5hbWU9PVwiOlwiJiZpLm5hbWU9PVwiRGVjbGFyYXRpb25cInx8aS5uYW1lPT1cIkFyZ0xpc3RcIj97ZnJvbTpvLG9wdGlvbnM6dSx2YWxpZEZvcjphfTppLm5hbWU9PVwiQmxvY2tcIj97ZnJvbTpvLG9wdGlvbnM6ZCgpLHZhbGlkRm9yOmF9Om51bGx9LHA9aC5kZWZpbmUoe3BhcnNlcjptLmNvbmZpZ3VyZSh7cHJvcHM6W2IuYWRkKHtEZWNsYXJhdGlvbjpmKCl9KSx3LmFkZCh7QmxvY2s6dn0pXX0pLGxhbmd1YWdlRGF0YTp7Y29tbWVudFRva2Vuczp7YmxvY2s6e29wZW46XCIvKlwiLGNsb3NlOlwiKi9cIn19LGluZGVudE9uSW5wdXQ6L15cXHMqXFx9JC8sd29yZENoYXJzOlwiLVwifX0pO2Z1bmN0aW9uIEYoKXtyZXR1cm4gbmV3IHkocCxwLmRhdGEub2Yoe2F1dG9jb21wbGV0ZTp4fSkpfWV4cG9ydHtGIGFzIGNzcyx4IGFzIGNzc0NvbXBsZXRpb25Tb3VyY2UscCBhcyBjc3NMYW5ndWFnZX07XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGxlemVyL2phdmFzY3JpcHRAMS4wLjIpIGRlbm8gcHJvZHVjdGlvbiAqL1xuaW1wb3J0e0NvbnRleHRUcmFja2VyIGFzIFIsRXh0ZXJuYWxUb2tlbml6ZXIgYXMgZSxMUlBhcnNlciBhcyByfWZyb21cIi92OTYvQGxlemVyL2xyQDEuMi4zL1gtWlM5QVkyOWtaVzFwY25KdmNpOXNZVzVuZFdGblpTeEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjRzUUd4bGVtVnlMMmhwWjJoc2FXZG9kQ3hBYkdWNlpYSXZiV0Z5YTJSdmQyNC9kZW5vL2xyLmpzXCI7aW1wb3J0e3N0eWxlVGFncyBhcyBuLHRhZ3MgYXMgT31mcm9tXCJAbGV6ZXIvaGlnaGxpZ2h0XCI7dmFyIFg9MSxTPTI4MSxQPTIsYz0zLFQ9MjgyLGo9NCxwPTI4Myx0PTI4NCxXPTI4NixnPTI4NyxkPTUseD02LGw9MSxfPVs5LDEwLDExLDEyLDEzLDMyLDEzMywxNjAsNTc2MCw4MTkyLDgxOTMsODE5NCw4MTk1LDgxOTYsODE5Nyw4MTk4LDgxOTksODIwMCw4MjAxLDgyMDIsODIzMiw4MjMzLDgyMzksODI4NywxMjI4OF0sWj0xMjUsYj0xMjMscz01OSxvPTQ3LHE9NDIsRz00MyxmPTQ1LHk9MzYsbT05Nix6PTkyLGg9bmV3IFIoe3N0YXJ0OiExLHNoaWZ0KFEsaSl7cmV0dXJuIGk9PWR8fGk9PXh8fGk9PVc/UTppPT1nfSxzdHJpY3Q6ITF9KSxVPW5ldyBlKChRLGkpPT57bGV0e25leHQ6JH09UTsoJD09Wnx8JD09LTF8fGkuY29udGV4dCkmJmkuY2FuU2hpZnQodCkmJlEuYWNjZXB0VG9rZW4odCl9LHtjb250ZXh0dWFsOiEwLGZhbGxiYWNrOiEwfSksaz1uZXcgZSgoUSxpKT0+e2xldHtuZXh0OiR9PVEsYTtfLmluZGV4T2YoJCk+LTF8fCQ9PW8mJigoYT1RLnBlZWsoMSkpPT1vfHxhPT1xKXx8JCE9WiYmJCE9cyYmJCE9LTEmJiFpLmNvbnRleHQmJmkuY2FuU2hpZnQoUykmJlEuYWNjZXB0VG9rZW4oUyl9LHtjb250ZXh0dWFsOiEwfSksdT1uZXcgZSgoUSxpKT0+e2xldHtuZXh0OiR9PVE7aWYoKCQ9PUd8fCQ9PWYpJiYoUS5hZHZhbmNlKCksJD09US5uZXh0KSl7US5hZHZhbmNlKCk7bGV0IGE9IWkuY29udGV4dCYmaS5jYW5TaGlmdChQKTtRLmFjY2VwdFRva2VuKGE/UDpjKX19LHtjb250ZXh0dWFsOiEwfSksdz1uZXcgZShRPT57Zm9yKGxldCBpPSExLCQ9MDs7JCsrKXtsZXR7bmV4dDphfT1RO2lmKGE8MCl7JCYmUS5hY2NlcHRUb2tlbihUKTticmVha31lbHNlIGlmKGE9PW0peyQ/US5hY2NlcHRUb2tlbihUKTpRLmFjY2VwdFRva2VuKHAsMSk7YnJlYWt9ZWxzZSBpZihhPT1iJiZpKXskPT0xP1EuYWNjZXB0VG9rZW4oaiwxKTpRLmFjY2VwdFRva2VuKFQsLTEpO2JyZWFrfWVsc2UgaWYoYT09MTAmJiQpe1EuYWR2YW5jZSgpLFEuYWNjZXB0VG9rZW4oVCk7YnJlYWt9ZWxzZSBhPT16JiZRLmFkdmFuY2UoKTtpPWE9PXksUS5hZHZhbmNlKCl9fSksWT1uZXcgZSgoUSxpKT0+e2lmKCEoUS5uZXh0IT0xMDF8fCFpLmRpYWxlY3RFbmFibGVkKGwpKSl7US5hZHZhbmNlKCk7Zm9yKGxldCAkPTA7JDw2OyQrKyl7aWYoUS5uZXh0IT1cInh0ZW5kc1wiLmNoYXJDb2RlQXQoJCkpcmV0dXJuO1EuYWR2YW5jZSgpfVEubmV4dD49NTcmJlEubmV4dDw9NjV8fFEubmV4dD49NDgmJlEubmV4dDw9OTB8fFEubmV4dD09OTV8fFEubmV4dD49OTcmJlEubmV4dDw9MTIyfHxRLm5leHQ+MTYwfHxRLmFjY2VwdFRva2VuKFgpfX0pLHY9bih7XCJnZXQgc2V0IGFzeW5jIHN0YXRpY1wiOk8ubW9kaWZpZXIsXCJmb3Igd2hpbGUgZG8gaWYgZWxzZSBzd2l0Y2ggdHJ5IGNhdGNoIGZpbmFsbHkgcmV0dXJuIHRocm93IGJyZWFrIGNvbnRpbnVlIGRlZmF1bHQgY2FzZVwiOk8uY29udHJvbEtleXdvcmQsXCJpbiBvZiBhd2FpdCB5aWVsZCB2b2lkIHR5cGVvZiBkZWxldGUgaW5zdGFuY2VvZlwiOk8ub3BlcmF0b3JLZXl3b3JkLFwibGV0IHZhciBjb25zdCBmdW5jdGlvbiBjbGFzcyBleHRlbmRzXCI6Ty5kZWZpbml0aW9uS2V5d29yZCxcImltcG9ydCBleHBvcnQgZnJvbVwiOk8ubW9kdWxlS2V5d29yZCxcIndpdGggZGVidWdnZXIgYXMgbmV3XCI6Ty5rZXl3b3JkLFRlbXBsYXRlU3RyaW5nOk8uc3BlY2lhbChPLnN0cmluZyksc3VwZXI6Ty5hdG9tLEJvb2xlYW5MaXRlcmFsOk8uYm9vbCx0aGlzOk8uc2VsZixudWxsOk8ubnVsbCxTdGFyOk8ubW9kaWZpZXIsVmFyaWFibGVOYW1lOk8udmFyaWFibGVOYW1lLFwiQ2FsbEV4cHJlc3Npb24vVmFyaWFibGVOYW1lIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbi9WYXJpYWJsZU5hbWVcIjpPLmZ1bmN0aW9uKE8udmFyaWFibGVOYW1lKSxWYXJpYWJsZURlZmluaXRpb246Ty5kZWZpbml0aW9uKE8udmFyaWFibGVOYW1lKSxMYWJlbDpPLmxhYmVsTmFtZSxQcm9wZXJ0eU5hbWU6Ty5wcm9wZXJ0eU5hbWUsUHJpdmF0ZVByb3BlcnR5TmFtZTpPLnNwZWNpYWwoTy5wcm9wZXJ0eU5hbWUpLFwiQ2FsbEV4cHJlc3Npb24vTWVtYmVyRXhwcmVzc2lvbi9Qcm9wZXJ0eU5hbWVcIjpPLmZ1bmN0aW9uKE8ucHJvcGVydHlOYW1lKSxcIkZ1bmN0aW9uRGVjbGFyYXRpb24vVmFyaWFibGVEZWZpbml0aW9uXCI6Ty5mdW5jdGlvbihPLmRlZmluaXRpb24oTy52YXJpYWJsZU5hbWUpKSxcIkNsYXNzRGVjbGFyYXRpb24vVmFyaWFibGVEZWZpbml0aW9uXCI6Ty5kZWZpbml0aW9uKE8uY2xhc3NOYW1lKSxQcm9wZXJ0eURlZmluaXRpb246Ty5kZWZpbml0aW9uKE8ucHJvcGVydHlOYW1lKSxQcml2YXRlUHJvcGVydHlEZWZpbml0aW9uOk8uZGVmaW5pdGlvbihPLnNwZWNpYWwoTy5wcm9wZXJ0eU5hbWUpKSxVcGRhdGVPcDpPLnVwZGF0ZU9wZXJhdG9yLExpbmVDb21tZW50Ok8ubGluZUNvbW1lbnQsQmxvY2tDb21tZW50Ok8uYmxvY2tDb21tZW50LE51bWJlcjpPLm51bWJlcixTdHJpbmc6Ty5zdHJpbmcsQXJpdGhPcDpPLmFyaXRobWV0aWNPcGVyYXRvcixMb2dpY09wOk8ubG9naWNPcGVyYXRvcixCaXRPcDpPLmJpdHdpc2VPcGVyYXRvcixDb21wYXJlT3A6Ty5jb21wYXJlT3BlcmF0b3IsUmVnRXhwOk8ucmVnZXhwLEVxdWFsczpPLmRlZmluaXRpb25PcGVyYXRvcixBcnJvdzpPLmZ1bmN0aW9uKE8ucHVuY3R1YXRpb24pLFwiOiBTcHJlYWRcIjpPLnB1bmN0dWF0aW9uLFwiKCApXCI6Ty5wYXJlbixcIlsgXVwiOk8uc3F1YXJlQnJhY2tldCxcInsgfVwiOk8uYnJhY2UsXCJJbnRlcnBvbGF0aW9uU3RhcnQgSW50ZXJwb2xhdGlvbkVuZFwiOk8uc3BlY2lhbChPLmJyYWNlKSxcIi5cIjpPLmRlcmVmT3BlcmF0b3IsXCIsIDtcIjpPLnNlcGFyYXRvcixUeXBlTmFtZTpPLnR5cGVOYW1lLFR5cGVEZWZpbml0aW9uOk8uZGVmaW5pdGlvbihPLnR5cGVOYW1lKSxcInR5cGUgZW51bSBpbnRlcmZhY2UgaW1wbGVtZW50cyBuYW1lc3BhY2UgbW9kdWxlIGRlY2xhcmVcIjpPLmRlZmluaXRpb25LZXl3b3JkLFwiYWJzdHJhY3QgZ2xvYmFsIFByaXZhY3kgcmVhZG9ubHkgb3ZlcnJpZGVcIjpPLm1vZGlmaWVyLFwiaXMga2V5b2YgdW5pcXVlIGluZmVyXCI6Ty5vcGVyYXRvcktleXdvcmQsSlNYQXR0cmlidXRlVmFsdWU6Ty5hdHRyaWJ1dGVWYWx1ZSxKU1hUZXh0Ok8uY29udGVudCxcIkpTWFN0YXJ0VGFnIEpTWFN0YXJ0Q2xvc2VUYWcgSlNYU2VsZkNsb3NlRW5kVGFnIEpTWEVuZFRhZ1wiOk8uYW5nbGVCcmFja2V0LFwiSlNYSWRlbnRpZmllciBKU1hOYW1lU3BhY2VkTmFtZVwiOk8udGFnTmFtZSxcIkpTWEF0dHJpYnV0ZS9KU1hJZGVudGlmaWVyIEpTWEF0dHJpYnV0ZS9KU1hOYW1lU3BhY2VkTmFtZVwiOk8uYXR0cmlidXRlTmFtZX0pLEM9e19fcHJvdG9fXzpudWxsLGV4cG9ydDoxOCxhczoyMyxmcm9tOjI5LGRlZmF1bHQ6MzIsYXN5bmM6MzcsZnVuY3Rpb246MzgsdGhpczo0OCx0cnVlOjU2LGZhbHNlOjU2LHZvaWQ6NjYsdHlwZW9mOjcwLG51bGw6ODYsc3VwZXI6ODgsbmV3OjEyMixhd2FpdDoxMzkseWllbGQ6MTQxLGRlbGV0ZToxNDIsY2xhc3M6MTUyLGV4dGVuZHM6MTU0LHB1YmxpYzoxOTcscHJpdmF0ZToxOTcscHJvdGVjdGVkOjE5NyxyZWFkb25seToxOTksaW5zdGFuY2VvZjoyMjAsaW46MjIyLGNvbnN0OjIyNCxpbXBvcnQ6MjU2LGtleW9mOjMwNyx1bmlxdWU6MzExLGluZmVyOjMxNyxpczozNTEsYWJzdHJhY3Q6MzcxLGltcGxlbWVudHM6MzczLHR5cGU6Mzc1LGxldDozNzgsdmFyOjM4MCxpbnRlcmZhY2U6Mzg3LGVudW06MzkxLG5hbWVzcGFjZTozOTcsbW9kdWxlOjM5OSxkZWNsYXJlOjQwMyxnbG9iYWw6NDA3LGZvcjo0Mjgsb2Y6NDM3LHdoaWxlOjQ0MCx3aXRoOjQ0NCxkbzo0NDgsaWY6NDUyLGVsc2U6NDU0LHN3aXRjaDo0NTgsY2FzZTo0NjQsdHJ5OjQ3MCxjYXRjaDo0NzQsZmluYWxseTo0NzgscmV0dXJuOjQ4Mix0aHJvdzo0ODYsYnJlYWs6NDkwLGNvbnRpbnVlOjQ5NCxkZWJ1Z2dlcjo0OTh9LFY9e19fcHJvdG9fXzpudWxsLGFzeW5jOjEwOSxnZXQ6MTExLHNldDoxMTMscHVibGljOjE2MSxwcml2YXRlOjE2MSxwcm90ZWN0ZWQ6MTYxLHN0YXRpYzoxNjMsYWJzdHJhY3Q6MTY1LG92ZXJyaWRlOjE2NyxyZWFkb25seToxNzMsbmV3OjM1NX0sST17X19wcm90b19fOm51bGwsXCI8XCI6MTI5fSxKPXIuZGVzZXJpYWxpemUoe3ZlcnNpb246MTQsc3RhdGVzOlwiJDhTT2BRZE9PTydRUShDfE8nI0NoTydYT1dPJyNEVk8pZFFkTycjRF1PKXRRZE8nI0RoTyl7UWRPJyNEck8teFFkTycjRHhPT1FPJyNFXScjRV1PLl1RYE8nI0VbTy5iUWBPJyNFW09PUShDWycjRWYnI0VmTzBhUShDfE8nI0l0TzJ3UShDfE8nI0l1TzNlUWBPJyNFek8zalEhYk8nI0ZhT09RKENbJyNGUycjRlNPM3JPI3RPJyNGU080UVEmak8nI0ZoTzViUWBPJyNGZ09PUShDWycjSXUnI0l1T09RKENXJyNJdCcjSXRPT1FTJyNKXicjSl5PNWdRYE8nI0hwTzVsUShDaE8nI0hxT09RUycjSWgnI0loT09RUycjSHInI0hyUWBRZE9PTyl7UWRPJyNEak81dFFgTycjR1tPNXlRJmpPJyNDbU82WFFgTycjRVpPNmRRYE8nI0VnTzZpUSxVTycjRlJPN1RRYE8nI0dbTzdZUWBPJyNHYE83ZVFgTycjR2BPN3NRYE8nI0djTzdzUWBPJyNHZE83c1FgTycjR2ZPNXRRYE8nI0dpTzhkUWBPJyNHbE85clFgTycjQ2RPOlNRYE8nI0d5TzpbUWBPJyNIUE86W1FgTycjSFJPYFFkTycjSFRPOltRYE8nI0hWTzpbUWBPJyNIWU86YVFgTycjSGBPOmZRKENqTycjSGZPKXtRZE8nI0hoTzpxUShDak8nI0hqTzp8UShDak8nI0hsTzVsUShDaE8nI0huTyl7UWRPJyNEV09PT1cnI0h0JyNIdE87WE9XTyw1OXFPT1EoQ1ssNTlxLDU5cU89alF0TycjQ2hPPXRRZE8nI0h1Tz5YUWBPJyNJdk9AV1F0TycjSXZPJ2RRZE8nI0l2T0BfUWBPLDU5d09AdVE3W08nI0RiT0FuUWBPJyNFXU9Be1FgTycjSlJPQldRYE8nI0pRT0JXUWBPJyNKUU9CYFFgTyw1OnlPQmVRYE8nI0pQT0JsUWFPJyNEeU81eVEmak8nI0VaT0J6UWBPJyNFWk9DVlFwTycjRlJPT1EoQ1ssNTpTLDU6U09DX1FkTyw1OlNPRV1RKEN8Tyw1Ol5PRXlRYE8sNTpkT0ZkUShDaE8nI0pPTzdZUWBPJyNJfU9Ga1FgTycjSX1PRnNRYE8sNTp4T0Z4UWBPJyNJfU9HV1FkTyw1OnZPSVdRJmpPJyNFV09KZVFgTyw1OnZPS3dRJmpPJyNEbE9MT1FkTycjRHFPTFlRN1tPLDU7UE8pe1FkTyw1O1BPT1FTJyNFcicjRXJPT1FTJyNFdCcjRXRPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk9PUVMnI0V4JyNFeE9MYlFkTyw1O2NPT1EoQ1ssNTtoLDU7aE9PUShDWyw1O2ksNTtpT05iUWBPLDU7aU9PUShDWyw1O2osNTtqTyl7UWRPJyNJUE9OZ1EoQ2hPLDU8VE8hIFJRJmpPLDU7Uk8pe1FkTyw1O2ZPISBrUSFiTycjSlZPISBZUSFiTycjSlZPISByUSFiTycjSlZPISFUUSFiTyw1O3FPT09PLDU7eyw1O3tPISFjUWRPJyNGY09PT08nI0lPJyNJT08zck8jdE8sNTtuTyEhalEhYk8nI0ZlT09RKENbLDU7biw1O25PISNXUSxWTycjQ3JPT1EoQ10nI0N1JyNDdU8hI2tRYE8nI0N1TyEjcE9XTycjQ3lPISReUSxWTyw1PFFPISRlUWBPLDU8U08hJXRRJmpPJyNGck8hJlJRYE8nI0ZzTyEmV1FgTycjRnNPISZdUSZqTycjRndPISdbUTdbTycjRntPISd9USxWTycjSXFPT1EoQ10nI0lxJyNJcU8hKFhRYU8nI0lwTyEoZ1FgTycjSW9PIShvUWBPJyNDcU9PUShDXScjQ3MnI0NzT09RKENdJyNDfCcjQ3xPISh3UWBPJyNET09KalEmak8nI0ZqT0pqUSZqTycjRmxPISh8UWBPJyNGbk8hKVJRYE8nI0ZvTyEmV1FgTycjRnVPSmpRJmpPJyNGek8hKVdRYE8nI0VeTyEpb1FgTyw1PFJPYFFkTyw1PltPT1FTJyNJaycjSWtPT1FTLDU+XSw1Pl1PT1FTLUU7cC1FO3BPIStrUShDfE8sNTpVT09RKENYJyNDcCcjQ3BPISxbUSZrTyw1PHZPT1FPJyNDZicjQ2ZPISxtUShDaE8nI0lsTzViUWBPJyNJbE86YVFgTyw1OVhPIS1PUSFiTyw1OVhPIS1XUSZqTyw1OVhPNXlRJmpPLDU5WE8hLWNRYE8sNTp2TyEta1FgTycjR3hPIS15UWBPJyNKYk8pe1FkTyw1O2tPIS5SUTdbTyw1O21PIS5XUWBPLDU9Y08hLl1RYE8sNT1jTyEuYlFgTyw1PWNPNWxRKENoTyw1PWNPNXRRYE8sNTx2TyEucFFgTycjRV9PIS9VUTdbTycjRWBPT1EoQ1cnI0pQJyNKUE8hL2dRKENoTycjSl9PNWxRKENoTyw1PHpPN3NRYE8sNT1RT09RUCcjQ3InI0NyTyEvclEhYk8sNTx9TyEvelEhY08sNT1PTyEwVlFgTyw1PVFPITBbUXBPLDU9VE86YVFgTycjR25PNXRRYE8nI0dwTyEwZFFgTycjR3BPNXlRJmpPJyNHc08hMGlRYE8nI0dzT09RUyw1PVcsNT1XTyEwblFgTycjR3RPITB2UWBPJyNDbU8hMHtRYE8sNTlPTyExVlFgTyw1OU9PITNYUWRPLDU5T09PUVMsNTlPLDU5T08hM2ZRKENoTyw1OU9PKXtRZE8sNTlPTyEzcVFkTycjR3tPT1FTJyNHfCcjR3xPT1FTJyNHfScjR31PYFFkTyw1PWVPITRSUWBPLDU9ZU8pe1FkTycjRHhPYFFkTyw1PWtPYFFkTyw1PW1PITRXUWBPLDU9b09gUWRPLDU9cU8hNF1RYE8sNT10TyE0YlFkTyw1PXpPT1FTLDU+USw1PlFPKXtRZE8sNT5RTzVsUShDaE8sNT5TT09RUyw1PlUsNT5VTyE4Y1FgTyw1PlVPT1FTLDU+Vyw1PldPIThjUWBPLDU+V09PUVMsNT5ZLDU+WU8hOGhRcE8sNTlyT09PVy1FO3ItRTtyT09RKENbMUcvXTFHL11PIThtUXRPLDU+YU8nZFFkTyw1PmFPT1FPLDU+Ziw1PmZPITh3UWRPJyNIdU9PUU8tRTtzLUU7c08hOVVRYE8sNT9iTyE5XlF0Tyw1P2JPITllUWBPLDU/bE9PUShDWzFHL2MxRy9jTyE5bVEhYk8nI0RUT09RTycjSXgnI0l4Tyl7UWRPJyNJeE8hOltRIWJPJyNJeE8hOnlRIWJPJyNEY08hO1tRN1tPJyNEY08hPWdRZE8nI0RjTyE9blFgTycjSXdPIT12UWBPLDU5fE8hPXtRYE8nI0VhTyE+WlFgTycjSlNPIT5jUWBPLDU6ek8hPnlRN1tPJyNEY08pe1FkTyw1P21PIT9UUWBPJyNIek9PUU8tRTt4LUU7eE8hOWVRYE8sNT9sT09RKENXMUcwZTFHMGVPIUBhUTdbTycjRHxPT1EoQ1ssNTplLDU6ZU8pe1FkTyw1OmVPSVdRJmpPLDU6ZU8hQGhRYU8sNTplTzphUWBPLDU6dU8hLU9RIWJPLDU6dU8hLVdRJmpPLDU6dU81eVEmak8sNTp1T09RKENbMUcvbjFHL25PT1EoQ1sxRzBPMUcwT09PUShDVycjRVYnI0VWTyl7UWRPLDU/ak8hQHNRKENoTyw1P2pPIUFVUShDaE8sNT9qTyFBXVFgTyw1P2lPIUFlUWBPJyNIfE8hQV1RYE8sNT9pT09RKENXMUcwZDFHMGRPN1lRYE8sNT9pT09RKENbMUcwYjFHMGJPIUJQUShDfE8xRzBiTyFDUlEoQ3lPLDU6ck9PUShDXScjRnEnI0ZxTyFDb1EoQ31PJyNJcU9HV1FkTzFHMGJPIUVxUSxWTycjSXlPIUV7UWBPLDU6V08hRlFRdE8nI0l6Tyl7UWRPJyNJek8hRltRYE8sNTpdT09RKENdJyNEVCcjRFRPT1EoQ1sxRzBrMUcwa08hRmFRYE8xRzBrTyFIclEoQ3xPMUcwbU8hSHlRKEN8TzFHMG1PIUteUShDfE8xRzBtTyFLZVEoQ3xPMUcwbU8hTWxRKEN8TzFHMG1PIU5QUShDfE8xRzBtTyMhcFEoQ3xPMUcwbU8jIXdRKEN8TzFHMG1PIyVbUShDfE8xRzBtTyMlY1EoQ3xPMUcwbU8jJ1dRKEN8TzFHMG1PIypRUU1sTycjQ2hPIyt7UU1sTzFHMH1PIy12UU1sTycjSXVPT1EoQ1sxRzFUMUcxVE8jLlpRKEN8Tyw1PmtPT1EoQ1ctRTt9LUU7fU8jLnpRKEN9TzFHMG1PT1EoQ1sxRzBtMUcwbU8jMVBRKEN8TzFHMVFPIzFwUSFiTyw1O3NPIzF1USFiTyw1O3RPIzF6USFiTycjRltPIzJgUWBPJyNGWk9PUU8nI0pXJyNKV09PUU8nI0h9JyNIfU8jMmVRIWJPMUcxXU9PUShDWzFHMV0xRzFdT09PTzFHMWYxRzFmTyMyc1FNbE8nI0l0TyMyfVFgTyw1O31PTGJRZE8sNTt9T09PTy1FO3wtRTt8T09RKENbMUcxWTFHMVlPT1EoQ1ssNTxQLDU8UE8jM1NRIWJPLDU8UE9PUShDXSw1OWEsNTlhT0lXUSZqTycjQ3tPT09XJyNIcycjSHNPIzNYT1dPLDU5ZU9PUShDXSw1OWUsNTllTyl7UWRPMUcxbE8hKVJRYE8nI0lSTyMzZFFgTyw1PGVPT1EoQ10sNTxiLDU8Yk9PUU8nI0dWJyNHVk9KalEmak8sNTxwT09RTycjR1gnI0dYT0pqUSZqTyw1PHJPSVdRJmpPLDU8dE9PUU8xRzFuMUcxbk8jM29RcU8nI0NwTyM0U1FxTyw1PF5PIzRaUWBPJyNKWk81dFFgTycjSlpPIzRpUWBPLDU8YE9KalEmak8sNTxfTyM0blFgTycjRnRPIzR5UWBPLDU8X08jNU9RcU8nI0ZxTyM1XVFxTycjSltPIzVnUWBPJyNKW09JV1Emak8nI0pbTyM1bFFgTyw1PGNPT1EoQ1cnI0RnJyNEZ08jNXFRIWJPJyNGfE8hJ1ZRN1tPJyNGfE8hJ1ZRN1tPJyNHT08jNlNRYE8nI0dQTyEmV1FgTycjR1NPIzZYUShDaE8nI0lUTyM2ZFE3W08sNTxnT09RKENdLDU8Zyw1PGdPIzZrUTdbTycjRnxPIzZ5UTdbTycjRn1PIzdSUTdbTycjRn1PT1EoQ10sNTx1LDU8dU9KalEmak8sNT9bT0pqUSZqTyw1P1tPIzdXUWBPJyNJVU8jN2NRYE8sNT9aTyM3a1FgTyw1OV1PT1EoQ10nI0NoJyNDaE8jOFtRLFZPLDU5ak9PUShDXSw1OWosNTlqTyM4fVEsVk8sNTxVTyM5cFEsVk8sNTxXTyM5elFgTyw1PFlPT1EoQ10sNTxaLDU8Wk8jOlBRYE8sNTxhTyM6VVEsVk8sNTxmT0dXUWRPMUcxbU8jOmZRYE8xRzFtT09RUzFHM3YxRzN2T09RKENbMUcvcDFHL3BPTmJRYE8xRy9wT09RUzFHMmIxRzJiT0lXUSZqTzFHMmJPKXtRZE8xRzJiT0lXUSZqTzFHMmJPIzprUWFPMUcyYk8jPFFRJmpPJyNFV09PUShDVyw1P1csNT9XTyM8W1EoQ2hPLDU/V09PUVMxRy5zMUcuc086YVFgTzFHLnNPIS1PUSFiTzFHLnNPIS1XUSZqTzFHLnNPIzxtUWBPMUcwYk8jPHJRYE8nI0NoTyM8fVFgTycjSmNPIz1WUWBPLDU9ZE8jPVtRYE8nI0pjTyM9YVFgTycjSmNPIz1pUWBPJyNJXk8jPXdRYE8sNT98TyM+UFF0TzFHMVZPT1EoQ1sxRzFYMUcxWE81dFFgTzFHMn1PIz5XUWBPMUcyfU8jPl1RYE8xRzJ9TyM+YlFgTzFHMn1PT1FTMUcyfTFHMn1PIz5nUSZrTzFHMmJPN1lRYE8nI0pRTzdZUWBPJyNFYU83WVFgTycjSVdPIz54UShDaE8sNT95T09RUzFHMmYxRzJmTyEwVlFgTzFHMmxPSVdRJmpPMUcyaU8jP1RRYE8xRzJpT09RUzFHMmoxRzJqT0lXUSZqTzFHMmpPIz9ZUWFPMUcyak8jP2JRN1tPJyNHaE9PUVMxRzJsMUcybE8hJ1ZRN1tPJyNJWU8hMFtRcE8xRzJvT09RUzFHMm8xRzJvT09RUyw1PVksNT1ZTyM/alEma08sNT1bTzV0UWBPLDU9W08jNlNRYE8sNT1fTzViUWBPLDU9X08hLU9RIWJPLDU9X08hLVdRJmpPLDU9X081eVEmak8sNT1fTyM/e1FgTycjSmFPI0BXUWBPLDU9YE9PUVMxRy5qMUcuak8jQF1RKENoTzFHLmpPI0BoUWBPMUcuak8jQG1RYE8xRy5qTzVsUShDaE8xRy5qTyNAdVF0Tyw1QE9PI0FQUWBPLDVAT08jQVtRZE8sNT1nTyNBY1FgTyw1PWdPN1lRYE8sNUBPT09RUzFHM1AxRzNQT2BRZE8xRzNQT09RUzFHM1YxRzNWT09RUzFHM1gxRzNYTzpbUWBPMUczWk8jQWhRZE8xRzNdTyNFY1FkTycjSFtPT1FTMUczYDFHM2BPI0VwUWBPJyNIYk86YVFgTycjSGRPT1FTMUczZjFHM2ZPI0V4UWRPMUczZk81bFEoQ2hPMUczbE9PUVMxRzNuMUczbk9PUShDVycjRngnI0Z4TzVsUShDaE8xRzNwTzVsUShDaE8xRzNyT09PVzFHL14xRy9eTyNJdlFwTyw1PFRPI0pPUXRPMUcze09PUU8xRzRRMUc0UU8pe1FkTyw1PmFPI0pZUWBPMUc0fE8jSmJRYE8xRzVXTyNKalFgTyw1P2RPTGJRZE8sNTp7TzdZUWBPLDU6e086YVFgTyw1OX1PTGJRZE8sNTl9TyEtT1EhYk8sNTl9TyNKb1FNbE8sNTl9T09RTyw1OnssNTp7TyNKeVE3W08nI0h2TyNLYVFgTyw1P2NPT1EoQ1sxRy9oMUcvaE8jS2lRN1tPJyNIe08jS31RYE8sNT9uT09RKENXMUcwZjFHMGZPITtbUTdbTyw1OX1PI0xWUXRPMUc1WE83WVFgTyw1PmZPT1EoQ1cnI0VTJyNFU08jTGFRKERqTycjRVRPIUBYUTdbTycjRH1PT1FPJyNIeScjSHlPI0x7UTdbTyw1OmhPT1EoQ1ssNTpoLDU6aE8jTVNRN1tPJyNEfU8jTWVRN1tPJyNEfU8jTWxRN1tPJyNFWU8jTW9RN1tPJyNFVE8jTXxRN1tPJyNFVE8hQFhRN1tPJyNFVE8jTmFRYE8xRzBQTyNOZlFxTzFHMFBPT1EoQ1sxRzBQMUcwUE8pe1FkTzFHMFBPSVdRJmpPMUcwUE9PUShDWzFHMGExRzBhTzphUWBPMUcwYU8hLU9RIWJPMUcwYU8hLVdRJmpPMUcwYU8jTm1RKEN8TzFHNVVPKXtRZE8xRzVVTyNOfVEoQ2hPMUc1VU8kIGBRYE8xRzVUTzdZUWBPLDU+aE9PUU8sNT5oLDU+aE8kIGhRYE8sNT5oT09RTy1FO3otRTt6TyQgYFFgTzFHNVRPJCB2UShDfU8sNTlqTyQjeFEoQ31PLDU8VU8kJX1RKEN9Tyw1PFdPJChTUShDfU8sNTxmT09RKENbNyslfDcrJXxPJCpfUShDfE83KyV8TyQrT1Emak8nI0h3TyQrWVFgTyw1P2VPT1EoQ10xRy9yMUcvck8kK2JRZE8nI0h4TyQrb1FgTyw1P2ZPJCt3UXRPLDU/Zk9PUShDWzFHL3cxRy93T09RKENbNysmVjcrJlZPJCxSUU1sTyw1Ol5PKXtRZE83KyZpTyQsXVFNbE8sNTpVT09RTzFHMV8xRzFfT09RTzFHMWAxRzFgTyQsalEhTFFPLDU7dk9MYlFkTyw1O3VPT1FPLUU7ey1FO3tPT1EoQ1s3KyZ3Nysmd09PT083KydRNysnUU9PT08xRzFpMUcxaU8kLHVRYE8xRzFpT09RKENbMUcxazFHMWtPJCx6UXFPLDU5Z09PT1ctRTtxLUU7cU9PUShDXTFHL1AxRy9QTyQtUlEoQ3xPNysnV09PUShDXSw1Pm0sNT5tTyQtclFgTyw1Pm1PT1EoQ10xRzJQMUcyUFAkLXdRYE8nI0lSUE9RKENdLUU8UC1FPFBPJC5oUSxWTzFHMltPJC9aUSxWTzFHMl5PJC9lUXFPMUcyYE9PUShDXTFHMXgxRzF4TyQvbFFgTycjSVFPJC96UWBPLDU/dU8kL3pRYE8sNT91TyQwU1FgTyw1P3VPJDBfUWBPLDU/dU9PUU8xRzF6MUcxek8kMG1RLFZPMUcxeU9KalEmak8xRzF5TyQwfVEmak8nI0lTTyQxX1FgTyw1P3ZPSVdRJmpPLDU/dk8kMWdRcU8sNT92T09RKENdMUcxfTFHMX1PT1EoQ1csNTxoLDU8aE9PUShDVyw1PGksNTxpTyQxcVFgTyw1PGlPIzV9UWBPLDU8aU8hLU9RIWJPLDU8aE8kMXZRYE8sNTxqT09RKENXLDU8ayw1PGtPJDFxUWBPLDU8bk9PUU8sNT5vLDU+b09PUU8tRTxSLUU8Uk9PUShDXTFHMlIxRzJSTyEnVlE3W08sNTxoTyQyT1FgTyw1PGlPISdWUTdbTyw1PGpPISdWUTdbTyw1PGlPJDJaUSxWTzFHNHZPJDJlUSxWTzFHNHZPT1FPLDU+cCw1PnBPT1FPLUU8Uy1FPFNPT1FQMUcudzFHLndPIS5SUTdbTyw1OWxPKXtRZE8sNTlsTyQyclFgTzFHMXRPSmpRJmpPMUcxe08kMndRKEN8TzcrJ1hPT1EoQ1s3KydYNysnWE9HV1FkTzcrJ1hPT1EoQ1s3KyVbNyslW08kM2hRcU8nI0pdTyNOYVFgTzcrJ3xPJDNyUWBPNysnfE8kM3pRcU83Kyd8T09RUzcrJ3w3Kyd8T0lXUSZqTzcrJ3xPKXtRZE83Kyd8T0lXUSZqTzcrJ3xPJDRVUShDeU8nI0NoTyQ0aVEoQ3lPLDU8bE8kNVpRYE8sNTxsT09RKENXMUc0cjFHNHJPT1FTNyskXzcrJF9POmFRYE83KyRfTyEtT1EhYk83KyRfT0dXUWRPNyslfE8kNWBRYE8nI0ldTyQ1cVFgTyw1P31PT1FPMUczTzFHM09PNXRRYE8sNT99TyQ1cVFgTyw1P31PJDV5UWBPLDU/fU9PUU8sNT54LDU+eE9PUU8tRTxbLUU8W09PUShDWzcrJnE3KyZxTyQ2T1FgTzcrKGlPNWxRKENoTzcrKGlPNXRRYE83KyhpTyQ2VFFgTzcrKGlPJDZZUWFPNysnfE9PUShDVyw1PnIsNT5yT09RKENXLUU8VS1FPFVPT1FTNysoVzcrKFdPJDZoUShDeU83KyhUT0lXUSZqTzcrKFRPJDZyUXFPNysoVU9PUVM3KyhVNysoVU9JV1Emak83KyhVTyQ2eVFgTycjSmBPJDdVUWBPLDU9U09PUU8sNT50LDU+dE9PUU8tRTxXLUU8V09PUVM3KyhaNysoWk8kOE9RN1tPJyNHcU9PUVMxRzJ2MUcydk9JV1Emak8xRzJ2Tyl7UWRPMUcydk9JV1Emak8xRzJ2TyQ4VlFhTzFHMnZPJDhlUSZrTzFHMnZPNWxRKENoTzFHMnlPIzZTUWBPMUcyeU81YlFgTzFHMnlPIS1PUSFiTzFHMnlPIS1XUSZqTzFHMnlPJDh2UWBPJyNJW08kOVJRYE8sNT97TyQ5WlE3W08sNT97T09RKENXMUcyejFHMnpPT1FTNyskVTcrJFVPJDljUWBPNyskVU81bFEoQ2hPNyskVU8kOWhRYE83KyRVTyl7UWRPMUc1ak8pe1FkTzFHNWtPJDltUWRPMUczUk8kOXRRYE8xRzNSTyQ5eVFkTzFHM1JPJDpRUShDaE8xRzVqT09RUzcrKGs3KyhrTzVsUShDaE83Kyh1T2BRZE83Kyh3T09RUycjSmYnI0pmT09RUycjSV8nI0lfTyQ6W1FkTyw1PXZPT1FTLDU9diw1PXZPKXtRZE8nI0hdTyQ6aVFgTycjSF9PT1FTLDU9fCw1PXxPN1lRYE8sNT18T09RUyw1Pk8sNT5PT09RUzcrKVE3KylRT09RUzcrKVc3KylXT09RUzcrKVs3KylbT09RUzcrKV43KyleT09RTzFHNU8xRzVPTyQ6blFNbE8xRzBnTyQ6eFFgTzFHMGdPT1FPMUcvaTFHL2lPJDtUUU1sTzFHL2lPOmFRYE8xRy9pT0xiUWRPJyNEY09PUU8sNT5iLDU+Yk9PUU8tRTt0LUU7dE9PUU8sNT5nLDU+Z09PUU8tRTt5LUU7eU8hLU9RIWJPMUcvaU86YVFgTyw1OmlPT1FPLDU6byw1Om9PKXtRZE8sNTpvTyQ7X1EoQ2hPLDU6b08kO2pRKENoTyw1Om9PIS1PUSFiTyw1OmlPT1FPLUU7dy1FO3dPT1EoQ1sxRzBTMUcwU08hQFhRN1tPLDU6aU8kO3hRN1tPLDU6aU8kPFpRKERqTyw1Om9PJDx1UTdbTyw1OmlPIUBYUTdbTyw1Om9PT1FPLDU6dCw1OnRPJDx8UTdbTyw1Om9PJD1aUShDaE8sNTpvT09RKENbNyslazcrJWtPI05hUWBPNysla08jTmZRcU83KyVrT09RKENbNyslezcrJXtPOmFRYE83KyV7TyEtT1EhYk83KyV7TyQ9b1EoQ3xPNysqcE8pe1FkTzcrKnBPT1FPMUc0UzFHNFNPN1lRYE8xRzRTTyQ+UFFgTzcrKm9PJD5YUShDfU8xRzJbTyRAXlEoQ31PMUcyXk8kQmNRKEN9TzFHMXlPJERuUSxWTyw1PmNPT1FPLUU7dS1FO3VPJER4UXRPLDU+ZE8pe1FkTyw1PmRPT1FPLUU7di1FO3ZPJEVTUWBPMUc1UU8kRVtRTWxPMUcwYk8kR2NRTWxPMUcwbU8kR2pRTWxPMUcwbU8kSWtRTWxPMUcwbU8kSXJRTWxPMUcwbU8kS2dRTWxPMUcwbU8kS3pRTWxPMUcwbU8kTlhRTWxPMUcwbU8kTmBRTWxPMUcwbU8lIWFRTWxPMUcwbU8lIWhRTWxPMUcwbU8lJF1RTWxPMUcwbU8lJHBRKEN8Tzw8SlRPJSVyUU1tTzFHMG1PJSd8UU1tTycjSXFPJSlpUU1sTzFHMVFPTGJRZE8nI0ZeT09RTycjSlgnI0pYT09RTzFHMWIxRzFiTyUpdlFgTzFHMWFPJSl7UU1sTyw1PmtPT09PNysnVDcrJ1RPT09XMUcvUjFHL1JPT1EoQ10xRzRYMUc0WE9KalEmak83Kyd6TyUqVlFgTyw1PmxPNXRRYE8sNT5sT09RTy1FPE8tRTxPTyUqZVFgTzFHNWFPJSplUWBPMUc1YU8lKm1RYE8xRzVhTyUqeFEsVk83KydlTyUrWVFxTyw1Pm5PJStkUWBPLDU+bk9JV1Emak8sNT5uT09RTy1FPFEtRTxRTyUraVFxTzFHNWJPJStzUWBPMUc1Yk9PUShDVzFHMlQxRzJUTyQxcVFgTzFHMlRPT1EoQ1cxRzJTMUcyU08lK3tRYE8xRzJVT0lXUSZqTzFHMlVPT1EoQ1cxRzJZMUcyWU8hLU9RIWJPMUcyU08jNX1RYE8xRzJUTyUsUVFgTzFHMlVPJSxZUWBPMUcyVE9KalEmak83KypiT09RKENdMUcvVzFHL1dPJSxlUWBPMUcvV09PUShDXTcrJ2A3KydgTyUsalEsVk83KydnTyUselEoQ3xPPDxKc09PUShDWzw8SnM8PEpzT0lXUSZqTycjSVZPJS1rUWBPLDU/d09PUVM8PEtoPDxLaE9JV1Emak88PEtoTyNOYVFgTzw8S2hPJS1zUWBPPDxLaE8lLXtRcU88PEtoT0lXUSZqTzFHMldPT1FTPDxHeTw8R3lPOmFRYE88PEd5TyUuVlEoQ3xPPDxJaE9PUShDWzw8SWg8PEloT09RTyw1PncsNT53TyUudlFgTyw1PndPJS57UWBPLDU+d09PUU8tRTxaLUU8Wk8lL1RRYE8xRzVpTyUvVFFgTzFHNWlPNXRRYE8xRzVpTyUvXVFgTzw8TFRPT1FTPDxMVDw8TFRPJS9iUWBPPDxMVE81bFEoQ2hPPDxMVE8pe1FkTzw8S2hPSVdRJmpPPDxLaE9PUVM8PEtvPDxLb08kNmhRKEN5Tzw8S29PT1FTPDxLcDw8S3BPJDZyUXFPPDxLcE8lL2dRN1tPJyNJWE8lL3JRYE8sNT96T0xiUWRPLDU/ek9PUVMxRzJuMUcybk8jTGFRKERqTycjRVRPIUBYUTdbTycjR3JPT1FPJyNJWicjSVpPJS96UTdbTyw1PV1PT1FTLDU9XSw1PV1PJTBSUTdbTycjRVRPJTBeUTdbTycjRVRPJTB1UTdbTycjRVRPJTFQUTdbTycjR3JPJTFiUWBPNysoYk8lMWdRYE83KyhiTyUxb1FxTzcrKGJPT1FTNysoYjcrKGJPSVdRJmpPNysoYk8pe1FkTzcrKGJPSVdRJmpPNysoYk8lMXlRYU83KyhiT09RUzcrKGU3KyhlTzVsUShDaE83KyhlTyM2U1FgTzcrKGVPNWJRYE83KyhlTyEtT1EhYk83KyhlTyUyWFFgTyw1PnZPT1FPLUU8WS1FPFlPT1FPJyNHdScjR3VPJTJkUWBPMUc1Z081bFEoQ2hPPDxHcE9PUVM8PEdwPDxHcE8lMmxRYE88PEdwTyUycVFgTzcrK1VPJTJ2UWBPNysrVk9PUVM3KyhtNysobU8lMntRYE83KyhtTyUzUVFkTzcrKG1PJTNYUWBPNysobU8pe1FkTzcrK1VPKXtRZE83KytWT09RUzw8TGE8PExhT09RUzw8TGM8PExjT09RUy1FPF0tRTxdT09RUzFHM2IxRzNiTyUzXlFgTyw1PXdPT1FTLDU9eSw1PXlPJTNjUWBPMUczaE9MYlFkTzcrJlJPT1FPNyslVDcrJVRPJTNoUU1sTzFHNVhPOmFRYE83KyVUT09RTzFHMFQxRzBUTyUzclEoQ3xPMUcwWk9PUU8xRzBaMUcwWk8pe1FkTzFHMFpPJTN8UShDaE8xRzBaTzphUWBPMUcwVE8hLU9RIWJPMUcwVE8hQFhRN1tPMUcwVE8lNFhRKENoTzFHMFpPJTRnUTdbTzFHMFRPJTR4UShDaE8xRzBaTyU1XlEoRGpPMUcwWk8lNWhRN1tPMUcwVE8hQFhRN1tPMUcwWk9PUShDWzw8SVY8PElWT09RKENbPDxJZzw8SWdPOmFRYE88PElnTyU1b1EoQ3xPPDxOW09PUU83KyluNyspbk8lNlBRKEN9TzcrJ2VPJThbUShDfU83KydnTyU6Z1F0TzFHNE9PJTpxUU1sTzcrJXxPJTtnUU1tTyw1OWpPJT1oUU1tTyw1PFVPJT9sUU1tTyw1PFdPJUFbUU1tTyw1PGZPJUJ9UU1sTzcrJ1dPJUNbUU1sTzcrJ1hPJUNpUWBPLDU7eE9PUU83KyZ7Nysme08lQ25RLFZPPDxLZk9PUU8xRzRXMUc0V08lQ3VRYE8xRzRXTyVEUVFgTzFHNFdPJURgUWBPNysqe08lRGBRYE83Kyp7T0lXUSZqTzFHNFlPJURoUXFPMUc0WU8lRHJRYE83Kyp8T09RKENXNysnbzcrJ29PJDFxUWBPNysncE8lRHpRcU83KydwT09RKENXNysnbjcrJ25PJDFxUWBPNysnb08lRVJRYE83KydwT0lXUSZqTzcrJ3BPIzV9UWBPNysnb08lRVdRLFZPPDxNfE9PUShDXTcrJHI3KyRyTyVFYlFxTyw1PnFPT1FPLUU8VC1FPFRPI05hUWBPQU5BU09PUVNBTkFTQU5BU09JV1Emak9BTkFTTyVFbFEoQ3lPNysnck9PUVNBTj1lQU49ZU81dFFgTzFHNGNPT1FPMUc0YzFHNGNPJUV8UWBPMUc0Y08lRlJRYE83KytUTyVGUlFgTzcrK1RPNWxRKENoT0FOQW9PJUZaUWBPQU5Bb09PUVNBTkFvQU5Bb08lRmBRYE9BTkFTTyVGaFFxT0FOQVNPT1FTQU5BWkFOQVpPT1FTQU5BW0FOQVtPJUZyUWBPLDU+c09PUU8tRTxWLUU8Vk8lRn1RTWxPMUc1Zk8jNlNRYE8sNT1eTzViUWBPLDU9Xk8hLU9RIWJPLDU9Xk9PUU8tRTxYLUU8WE9PUVMxRzJ3MUcyd08kPFpRKERqTyw1Om9PIUBYUTdbTyw1PV5PJUdYUTdbTyw1PV5PJUdqUTdbTyw1Om9PT1FTPDxLfDw8S3xPSVdRJmpPPDxLfE8lMWJRYE88PEt8TyVHdFFgTzw8S3xPJUd8UXFPPDxLfE8pe1FkTzw8S3xPSVdRJmpPPDxLfE9PUVM8PExQPDxMUE81bFEoQ2hPPDxMUE8jNlNRYE88PExQTzViUWBPPDxMUE8lSFdRN1tPMUc0Yk8lSGBRYE83KytST09RU0FOPVtBTj1bTzVsUShDaE9BTj1bT09RUzw8TnA8PE5wT09RUzw8TnE8PE5xT09RUzw8TFg8PExYTyVIaFFgTzw8TFhPJUhtUWRPPDxMWE8lSHRRYE88PE5wTyVIeVFgTzw8TnFPT1FTMUczYzFHM2NPOmFRYE83KylTTyVJT1FNbE88PEltT09RTzw8SG88PEhvT09RTzcrJXU3KyV1TyUzclEoQ3xPNysldU8pe1FkTzcrJXVPT1FPNyslbzcrJW9POmFRYE83KyVvTyEtT1EhYk83KyVvTyVJWVEoQ2hPNysldU8hQFhRN1tPNyslb08lSWVRKENoTzcrJXVPJUlzUTdbTzcrJW9PJUpVUShDaE83KyV1T09RKENbQU4/UkFOP1JPJUpqUU1sTzw8SlRPJUp3UU1tTzFHMXlPJU1PUU1tTzFHMltPJiBTUU1tTzFHMl5PJiFyUU1sTzw8SnNPJiNQUU1sTzw8SWhPT1FPMUcxZDFHMWRPSmpRJmpPQU5BUU9PUU83KylyNyspck8mI15RYE83KylyTyYjaVFgTzw8TmdPJiNxUXFPNyspdE9PUShDVzw8S1s8PEtbTyQxcVFgTzw8S1tPT1EoQ1c8PEtaPDxLWk8mI3tRcU88PEtbTyQxcVFgTzw8S1pPT1FTRzI2bkcyNm5PI05hUWBPRzI2bk9PUU83Kyl9NyspfU81dFFgTzcrKX1PJiRTUWBPPDxOb09PUVNHMjdaRzI3Wk81bFEoQ2hPRzI3Wk9JV1Emak9HMjZuT0xiUWRPMUc0X08mJFtRYE83KytRTzVsUShDaE8xRzJ4TyM2U1FgTzFHMnhPNWJRYE8xRzJ4TyEtT1EhYk8xRzJ4TyFAWFE3W08xRzJ4TyU1XlEoRGpPMUcwWk8mJGRRN1tPMUcyeE8lMWJRYE9BTkFoT09RU0FOQWhBTkFoT0lXUSZqT0FOQWhPJiR1UWBPQU5BaE8mJH1RcU9BTkFoT09RU0FOQWtBTkFrTzVsUShDaE9BTkFrTyM2U1FgT0FOQWtPT1FPJyNHdicjR3ZPT1FPNyspfDcrKXxPT1FTRzIydkcyMnZPT1FTQU5Bc0FOQXNPJiVYUWBPQU5Bc09PUVNBTkRbQU5EW09PUVNBTkRdQU5EXU9PUVM8PExuPDxMbk9PUU88PElhPDxJYU8lM3JRKEN8Tzw8SWFPT1FPPDxJWjw8SVpPOmFRYE88PElaTyl7UWRPPDxJYU8hLU9RIWJPPDxJWk8mJV5RKENoTzw8SWFPIUBYUTdbTzw8SVpPJiVpUShDaE88PElhTyYld1FNbU83KydlTyYnalFNbU83KydnTyYpXVEsVk9HMjZsT09RTzw8TV48PE1eT09RKENXQU5AdkFOQHZPJDFxUWBPQU5Adk9PUShDV0FOQHVBTkB1T09RU0xELFlMRCxZT09RTzw8TWk8PE1pT09RU0xELHVMRCx1TyNOYVFgT0xELFlPJiltUU1sTzcrKXlPT1FPNysoZDcrKGRPNWxRKENoTzcrKGRPIzZTUWBPNysoZE81YlFgTzcrKGRPIS1PUSFiTzcrKGRPIUBYUTdbTzcrKGRPT1FTRzI3U0cyN1NPJTFiUWBPRzI3U09JV1Emak9HMjdTT09RU0cyN1ZHMjdWTzVsUShDaE9HMjdWT09RU0cyN19HMjdfT09RT0FOPntBTj57T09RT0FOPnVBTj51TyUzclEoQ3xPQU4+e086YVFgT0FOPnVPKXtRZE9BTj57TyEtT1EhYk9BTj51TyYpd1EoQ2hPQU4+e08mKlNRKEN9T0cyNmxPT1EoQ1dHMjZiRzI2Yk9PUVMhJCggdCEkKCB0T09RTzw8TE88PExPTzVsUShDaE88PExPTyM2U1FgTzw8TE9PNWJRYE88PExPTyEtT1EhYk88PExPT09RU0xELG5MRCxuTyUxYlFgT0xELG5PT1FTTEQscUxELHFPT1FPRzI0Z0cyNGdPT1FPRzI0YUcyNGFPJTNyUShDfE9HMjRnTzphUWBPRzI0YU8pe1FkT0cyNGdPJixwUSFMUk8sNTpyTyYtZ1EkSVRPJyNJcU9PUU9BTkFqQU5Bak81bFEoQ2hPQU5Bak8jNlNRYE9BTkFqTzViUWBPQU5Bak9PUVMhJCghWSEkKCFZT09RT0xEKlJMRCpST09RT0xEKXtMRCl7TyUzclEoQ3xPTEQqUk8mLlpRTW1PRzI2bE8mL3xRIUxSTyw1OWpPJjBwUSFMUk8sNTxVTyYxZFEhTFJPLDU8V08mMldRIUxSTyw1PGZPT1FPRzI3VUcyN1VPNWxRKENoT0cyN1VPIzZTUWBPRzI3VU9PUU8hJCdNbSEkJ01tTyYyfVEhTFJPMUcyW08mM3FRIUxSTzFHMl5PJjRlUSFMUk8xRzF5T09RT0xELHBMRCxwTzVsUShDaE9MRCxwTyY1W1EhTFJPNysnZU8mNlJRIUxSTzcrJ2dPT1FPISQoIVshJCghW08mNnhRIUxST0cyNmxPTGJRZE8nI0RyTyY3b1F0TycjSXRPTGJRZE8nI0RqTyY3dlEoQ3xPJyNDaE8mOGFRdE8nI0NoTyY4cVFkTyw1OnZPJjpxUSZqTycjRVdPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTycjSVBPJjxPUWBPLDU8VE8mPWVRJmpPLDU7Uk9MYlFkTyw1O2ZPISh3UWBPJyNET08hKHdRYE8nI0RPTyEod1FgTycjRE9PSVdRJmpPJyNGak8mOnFRJmpPJyNGak8mPFdRJmpPJyNGak9JV1Emak8nI0ZsTyY6cVEmak8nI0ZsTyY8V1Emak8nI0ZsT0lXUSZqTycjRnpPJjpxUSZqTycjRnpPJjxXUSZqTycjRnpPTGJRZE8sNT9tTyY4cVFkTzFHMGJPJj1sUU1sTycjQ2hPTGJRZE8xRzFsT0lXUSZqTyw1PHBPJjpxUSZqTyw1PHBPJjxXUSZqTyw1PHBPSVdRJmpPLDU8ck8mOnFRJmpPLDU8ck8mPFdRJmpPLDU8ck9JV1Emak8sNTxfTyY6cVEmak8sNTxfTyY8V1Emak8sNTxfTyY4cVFkTzFHMW1PTGJRZE83KyZpT0lXUSZqTzFHMXlPJjpxUSZqTzFHMXlPJjxXUSZqTzFHMXlPSVdRJmpPMUcxe08mOnFRJmpPMUcxe08mPFdRJmpPMUcxe08mOHFRZE83KydYTyY4cVFkTzcrJXxPJj12UWBPNysncE9JV1Emak9BTkFRTyY6cVEmak9BTkFRTyY8V1Emak9BTkFRTyY9dlFgTzw8S1tPJj12UWBPQU5Adk8mPXtRYE8nI0VbTyY+UVFgTycjRVtPJj5ZUWBPJyNFek8mPl9RYE8nI0VnTyY+ZFFgTycjSlJPJj5vUWBPJyNKUE8mPnpRYE8sNTp2TyY/UFEsVk8sNTxRTyY/V1FgTycjRnNPJj9dUWBPJyNGc08mP2JRYE8nI0ZzTyY/Z1FgTyw1PFJPJj9vUWBPLDU6dk8mP3dRTWxPMUcwfU8mQE9RYE8sNTxfTyZAVFFgTyw1PF9PJkBZUWBPLDU8X08mQF9RYE8sNTxhTyZAZFFgTyw1PGFPJkBpUWBPLDU8YU8mQG5RYE8xRzFtTyZAc1FgTzFHMGJPJkB4UWBPMUcyVU8mQH1RLFZPPDxLZk8mQVVRLFZPPDxLZk8mQV1RLFZPPDxLZk8mQWRRcU83KydwTyZBa1FgTzcrJ3BPJkFwUXFPPDxLW080UVEmak8nI0ZoTzViUWBPJyNGZ09CelFgTycjRVpPTGJRZE8sNTtjTyEmV1FgTycjRnNPISZXUWBPJyNGc08hJldRYE8nI0ZzTyEmV1FgTycjRnVPISZXUWBPJyNGdU8hJldRYE8nI0Z1TyZBd1FgTyw1PGpPSmpRJmpPNysnek9KalEmak83Kyd6T0pqUSZqTzcrJ3pPSVdRJmpPMUcyVU8mQlBRYE8xRzJVT0lXUSZqTzcrJ3BPISdWUTdbTycjR09PJC9lUXFPMUcyYE8kL2VRcU8xRzJgTyQvZVFxTzFHMmBPISdWUTdbTyw1PGpPSVdRJmpPLDU8dE9JV1Emak8sNTx0T0lXUSZqTyw1PHRcIixzdGF0ZURhdGE6XCImQn1+TydZT1MnWk9TVE9TVU9Tfk9RVE9SVE9YeU9dY09faE9ibk9jbU9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hVFNPIV9rTyFkVU8hZ1RPIWhUTyFpVE8halRPIWtUTyFubE8jZHNPI3RwTyN4Xk8lUHFPJVJ0TyVUck8lVXJPJVh1TyVadk8lXndPJV93TyVheE8lbnpPJXR7TyV2fE8leH1PJXohT08lfSFQTyZUIVFPJlohUk8mXSFTTyZfIVRPJmEhVU8mYyFWTyddUE8nZlFPJ29ZTyd8YU9+T1FbWFpbWF9bWGpbWHVbWHZbWHhbWCFSW1ghYVtYIWJbWCFkW1ghaltYIXtbWCNXZFgjW1tYI11bWCNeW1gjX1tYI2BbWCNhW1gjYltYI2NbWCNlW1gjZ1tYI2lbWCNqW1gjb1tYJ1dbWCdmW1gncFtYJ3dbWCd4W1h+TyFdJGxYflAkek9TIVdPJ1UhWE8nViFaT35PUVRPUlRPXWNPYiFrT2Mhak9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hVCFiTyFfa08hZFVPIWdUTyFoVE8haVRPIWpUTyFrVE8hbiFpTyN0IWxPI3heTyddIVtPJ2ZRTydvWU8nfGFPfk8hUSFgTyFSIV1PIU8nalAhTyd0UH5QJ2RPIVMhbU9+UGBPUVRPUlRPXWNPYiFrT2Mhak9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hVCFiTyFfa08hZFVPIWdUTyFoVE8haVRPIWpUTyFrVE8hbiFpTyN0IWxPI3heTyddOWFPJ2ZRTydvWU8nfGFPfk9RVE9SVE9dY09iIWtPYyFqT2hjT2pUT2tjT2xjT3FUT3NUT3hST3tjT3xjT31jTyFUIWJPIV9rTyFkVU8hZ1RPIWhUTyFpVE8halRPIWtUTyFuIWlPI3QhbE8jeF5PJ2ZRTydvWU8nfGFPfk8hUSFyTyNVIXVPI1Yhck8nXTliTyFjJ3FQflAre08jVyF2T35PIV0hd08jVyF2T35PUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIVIjYk8hYSNUTyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08jYSNUTyNiI1RPI2MjVE8jZSNVTyNnI1dPI2kjWU8jaiNaTydmUU8ncCNbTyd3IX1PJ3gjT09+T18naFgnVydoWCFjJ2hYIU8naFghVCdoWCVRJ2hYIV0naFh+UC5qTyF7I2VPI28jZU9RJ2lYWidpWF8naVhqJ2lYdSdpWHYnaVh4J2lYIVInaVghYSdpWCFiJ2lYIWQnaVghaidpWCNbJ2lYI10naVgjXidpWCNfJ2lYI2AnaVgjYSdpWCNiJ2lYI2UnaVgjZydpWCNpJ2lYI2onaVgnZidpWCdwJ2lYJ3cnaVgneCdpWH5PI2MnaVgnVydpWCFPJ2lYIWMnaVhuJ2lYIVQnaVglUSdpWCFdJ2lYflAwek8heyNlT35PI3ojZk8kUiNqT35PIVQja08jeF5PJFUjbE8kVyNuT35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPcyRTT3gjeU8hVCN6TyFfJFhPIWQjdk8jViRZTyN0JFZPJF8kVE8kYSRVTyRkJFdPJ10jcE8nYiRQTydmI3NPJ2EnY1B+TyFkJFpPfk8hXSRdT35PXyReTydXJF5Pfk8nXSRiT35PIWQkWk8nXSRiTydeJGRPJ2IkUE9+T2Mkak8hZCRaTyddJGJPfk8jYyNUT35PXSRzT3Ukb08hVCRsTyFkJG5PJVIkck8nXSRiTydeJGRPXihVUH5PIW4kdE9+T3gkdU8hVCR2TyddJGJPfk94JHVPIVQkdk8lWiR6TyddJGJPfk8nXSR7T35PI2RzTyVSdE8lVHJPJVVyTyVYdU8lWnZPJV53TyVfd09+T2IlVU9jJVRPIW4lUk8lUCVTTyVjJVFPflA3eE9iJVhPY21PIVQlV08hbmxPI2RzTyVQcU8lVHJPJVVyTyVYdU8lWnZPJV53TyVfd08lYXhPfk9gJVtPIXslX08lUiVZTydeJGRPflA4d08hZCVgTyFnJWRPfk8hZCVlT35PIVRTT35PXyReTydUJW1PJ1ckXk9+T18kXk8nVCVwTydXJF5Pfk9fJF5PJ1Qlck8nVyReT35PUyFXTydVIVhPJ1Yldk9+T1FbWFpbWGpbWHVbWHZbWHhbWCFSW1ghUmRYIWFbWCFiW1ghZFtYIWpbWCF7W1ghe2RYI1dkWCNbW1gjXVtYI15bWCNfW1gjYFtYI2FbWCNiW1gjY1tYI2VbWCNnW1gjaVtYI2pbWCNvW1gnZltYJ3BbWCd3W1gneFtYfk8hT1tYIU9kWH5QO2RPIVEleE8hTyZpWCFPJm5YIVImaVghUiZuWH5QJ2RPIVIlek8hTydqWH5PUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIVIlek8hYSNUTyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08jYSNUTyNiI1RPI2MjVE8jZSNVTyNnI1dPI2kjWU8jaiNaTydmUU8ncCNbTyd3IX1PJ3gjT09+TyFPJ2pYflA+YU8hTyZQT35PeCZTTyFXJl5PIVgmVk8hWSZWTydeJGRPfk9dJlRPayZUTyFRJldPJ2cmUU8hUydrUCFTJ3ZQflBAZE8hTydzWCFSJ3NYIV0nc1ghYydzWCdwJ3NYfk8heydzWCNXI1BYIVMnc1h+UEFdTyF7Jl9PIU8ndVghUid1WH5PIVImYE8hTyd0WH5PIU8mY09+TyF7I2VPflBBXU9QJmdPIVQmZE8hbyZmTyddJGJPfk9jJmxPIWQkWk8nXSRiT35PdSRvTyFkJG5Pfk8hUyZtT35QYE91IXtPdiF7T3ghfE8hYiF5TyFkIXpPJ2ZRT1EhZmFaIWZhaiFmYSFSIWZhIWEhZmEhaiFmYSNbIWZhI10hZmEjXiFmYSNfIWZhI2AhZmEjYSFmYSNiIWZhI2MhZmEjZSFmYSNnIWZhI2khZmEjaiFmYSdwIWZhJ3chZmEneCFmYX5PXyFmYSdXIWZhIU8hZmEhYyFmYW4hZmEhVCFmYSVRIWZhIV0hZmF+UENmTyFjJm5Pfk8hXSF3TyF7JnBPJ3Amb08hUidyWF8nclgnVydyWH5PIWMnclh+UEZPTyFSJnRPIWMncVh+TyFjJnZPfk94JHVPIVQkdk8jViZ3TyddJGJPfk9RVE9SVE9dY09iIWtPYyFqT2hjT2pUT2tjT2xjT3FUT3NUT3hST3tjT3xjT31jTyFUU08hX2tPIWRVTyFnVE8haFRPIWlUTyFqVE8ha1RPIW4haU8jdCFsTyN4Xk8nXTlhTydmUU8nb1lPJ3xhT35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPczl0T3gjeU8hVCN6TyFfO2VPIWQjdk8jVjl9TyN0JFZPJF85d08kYTl6TyRkJFdPJ10me08nYiRQTydmI3NPfk8jVyZ9T35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPcyRTT3gjeU8hVCN6TyFfJFhPIWQjdk8jViRZTyN0JFZPJF8kVE8kYSRVTyRkJFdPJ10me08nYiRQTydmI3NPfk8nYSdtUH5QSmpPIVEnUk8hYyduUH5QKXtPJ2cnVE8nb1lPfk9ROV5PUjleT11jT2I7YE9jIWpPaGNPajleT2tjT2xjT3E5Xk9zOV5PeFJPe2NPfGNPfWNPIVQhYk8hXzlgTyFkVU8hZzleTyFoOV5PIWk5Xk8hajleTyFrOV5PIW4haU8jdCFsTyN4Xk8nXSdjTydmUU8nb1lPJ3w7Xk9+TyFkIXpPfk8hUiNiT18kXWEnVyRdYSFjJF1hIU8kXWEhVCRdYSVRJF1hIV0kXWF+TyNkJ2pPflBJV08hXSdsTyFUJ3lYI3cneVgjeid5WCRSJ3lYfk91J21PflAhIFlPdSdtTyFUJ3lYI3cneVgjeid5WCRSJ3lYfk8hVCdvTyN3J3NPI3onbk8kUid0T35PIVEnd09+UExiTyN6I2ZPJFInek9+T1AkZVh1JGVYeCRlWCFiJGVYJ3ckZVgneCRlWH5PUGZYIVJmWCF7ZlgnYWZYJ2EkZVh+UCEhck9rJ3xPfk9TJ31PJ1UoT08nVihRT35PUChaT3UoU094KFRPJ3coVk8neChYT35PJ2EoUk9+UCEje08nYShbT35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPczl0T3gjeU8hVCN6TyFfO2VPIWQjdk8jVjl9TyN0JFZPJF85d08kYTl6TyRkJFdPJ2IkUE8nZiNzT35PIVEoYE8nXShdTyFjJ31QflAhJGpPI1coYk9+TyFkKGNPfk8hUShoTyddKGVPIU8oT1B+UCEkak9qKHVPeChtTyFXKHNPIVgobE8hWShsTyFkKGNPIXgodE8kdyhvTydeJGRPJ2coak9+TyFTKHJPflAhJmpPIWIheU9QJ2VYdSdlWHgnZVgndydlWCd4J2VYIVInZVgheydlWH5PJ2EnZVgjbSdlWH5QISdjT1AoeE8heyh3TyFSJ2RYJ2EnZFh+TyFSKHlPJ2EnY1h+TyddJHtPJ2EnY1B+TyddKHxPfk8hZClST35PJ10me09+T3gkdU8hUSFyTyFUJHZPI1UhdU8jViFyTyddJGJPIWMncVB+TyFdIXdPI1cpVk9+T1EjXk9aI2RPaiNST3Uhe092IXtPeCF8TyFhI1RPIWIheU8hZCF6TyFqI15PI1sjUE8jXSNRTyNeI1FPI18jUU8jYCNTTyNhI1RPI2IjVE8jYyNUTyNlI1VPI2cjV08jaSNZTyNqI1pPJ2ZRTydwI1tPJ3chfU8neCNPT35PXyFeYSFSIV5hJ1chXmEhTyFeYSFjIV5hbiFeYSFUIV5hJVEhXmEhXSFeYX5QISl3T1ApX08hVCZkTyFvKV5PJVEpXU8nYiRQT35PIV0pYU8hVCdgWF8nYFghUidgWCdXJ2BYfk8hZCRaTydiJFBPfk8hZCRaTyddJGJPJ2IkUE9+TyFdIXdPI1cmfU9+T10pbE8lUiltTyddKWlPIVMoVlB+TyFSKW5PXihVWH5PJ2cnVE9+T1opck9+T14pc09+TyFUJGxPJ10kYk8nXiRkT14oVVB+T3gkdU8hUSl4TyFSJmBPIVQkdk8nXSRiTyFPJ3RQfk9dJlpPayZaTyFRKXlPJ2cnVE8hUyd2UH5PIVIpek9fKFJYJ1coUlh+TyF7Kk9PJ2IkUE9+T1AqUk8hVCN6TydiJFBPfk8hVCpUT35PdSpWTyFUU09+TyFuKltPfk9jKmFPfk8nXSh8TyFTKFRQfk9jJGpPfk8lUnRPJ10ke09+UDh3T1oqZ09eKmZPfk9RVE9SVE9dY09ibk9jbU9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hX2tPIWRVTyFnVE8haFRPIWlUTyFqVE8ha1RPIW5sTyN4Xk8lUHFPJ2ZRTydvWU8nfGFPfk8hVCFiTyN0IWxPJ105YU9+UCExX09eKmZPXyReTydXJF5Pfk9fKmtPI2QqbU8lVCptTyVVKm1PflApe08hZCVgT35PJXQqck9+TyFUKnRPfk8mVip2TyZYKndPUSZTYVImU2FYJlNhXSZTYV8mU2FiJlNhYyZTYWgmU2FqJlNhayZTYWwmU2FxJlNhcyZTYXgmU2F7JlNhfCZTYX0mU2EhVCZTYSFfJlNhIWQmU2EhZyZTYSFoJlNhIWkmU2EhaiZTYSFrJlNhIW4mU2EjZCZTYSN0JlNhI3gmU2ElUCZTYSVSJlNhJVQmU2ElVSZTYSVYJlNhJVomU2ElXiZTYSVfJlNhJWEmU2ElbiZTYSV0JlNhJXYmU2EleCZTYSV6JlNhJX0mU2EmVCZTYSZaJlNhJl0mU2EmXyZTYSZhJlNhJmMmU2EnUyZTYSddJlNhJ2YmU2EnbyZTYSd8JlNhIVMmU2EleyZTYWAmU2EmUSZTYX5PJ10qfE9+T24rUE9+TyFPJmlhIVImaWF+UCEpd08hUStUTyFPJmlYIVImaVh+UCl7TyFSJXpPIU8namF+TyFPJ2phflA+YU8hUiZgTyFPJ3Rhfk8hUndYIVIhWlghU3dYIVMhWlghXXdYIV0hWlghZCFaWCF7d1gnYiFaWH5PIV0rWU8heytYTyFSI1RYIVInbFghUyNUWCFTJ2xYIV0nbFghZCdsWCdiJ2xYfk8hXStbTyFkJFpPJ2IkUE8hUiFWWCFTIVZYfk9dJlJPayZST3gmU08nZyhqT35PUTleT1I5Xk9dY09iO2BPYyFqT2hjT2o5Xk9rY09sY09xOV5PczleT3hST3tjT3xjT31jTyFUIWJPIV85YE8hZFVPIWc5Xk8haDleTyFpOV5PIWo5Xk8hazleTyFuIWlPI3QhbE8jeF5PJ2ZRTydvWU8nfDteT35PJ106U09+UCE7ak8hUitgTyFTJ2tYfk8hUytiT35PIV0rWU8heytYTyFSI1RYIVMjVFh+TyFSK2NPIVMndlh+TyFTK2VPfk9dJlJPayZST3gmU08nXiRkTydnKGpPfk8hWCtmTyFZK2ZPflAhPmhPeCR1TyFRK2hPIVQkdk8nXSRiTyFPJm5YIVImblh+T18rbE8hVytvTyFYK2tPIVkra08hcitzTyFzK3FPIXQrck8hdStwTyF4K3RPJ14kZE8nZyhqTydvK2lPfk8hUytuT35QIT9pT1AreU8hVCZkTyFvK3hPfk8heyxQTyFSJ3JhIWMncmFfJ3JhJ1cncmF+TyFdIXdPflAhQHNPIVImdE8hYydxYX5PeCR1TyFRLFNPIVQkdk8jVSxVTyNWLFNPJ10kYk8hUiZwWCFjJnBYfk9fI09pIVIjT2knVyNPaSFPI09pIWMjT2luI09pIVQjT2klUSNPaSFdI09pflAhKXdPUDt0T3UoU094KFRPJ3coVk8neChYT35PI1chemEhUiF6YSFjIXphIXshemEhVCF6YV8hemEnVyF6YSFPIXphflAhQnBPI1cnZVhRJ2VYWidlWF8nZVhqJ2VYdidlWCFhJ2VYIWQnZVghaidlWCNbJ2VYI10nZVgjXidlWCNfJ2VYI2AnZVgjYSdlWCNiJ2VYI2MnZVgjZSdlWCNnJ2VYI2knZVgjaidlWCdXJ2VYJ2YnZVgncCdlWCFjJ2VYIU8nZVghVCdlWG4nZVglUSdlWCFdJ2VYflAhJ2NPIVIsX08nYSdtWH5QISN7TydhLGFPfk8hUixiTyFjJ25YflAhKXdPIWMsZU9+TyFPLGZPfk9RI15PdSF7T3Yhe094IXxPIWIheU8hZCF6TyFqI15PJ2ZRT1ojWmlfI1ppaiNaaSFSI1ppIWEjWmkjXSNaaSNeI1ppI18jWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppJ1cjWmkncCNaaSd3I1ppJ3gjWmkhTyNaaSFjI1ppbiNaaSFUI1ppJVEjWmkhXSNaaX5PI1sjWml+UCFGZk8jWyNQT35QIUZmT1EjXk91IXtPdiF7T3ghfE8hYiF5TyFkIXpPIWojXk8jWyNQTyNdI1FPI14jUU8jXyNRTydmUU9aI1ppXyNaaSFSI1ppIWEjWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppJ1cjWmkncCNaaSd3I1ppJ3gjWmkhTyNaaSFjI1ppbiNaaSFUI1ppJVEjWmkhXSNaaX5PaiNaaX5QIUlRT2ojUk9+UCFJUU9RI15PaiNST3Uhe092IXtPeCF8TyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08nZlFPXyNaaSFSI1ppI2UjWmkjZyNaaSNpI1ppI2ojWmknVyNaaSdwI1ppJ3cjWmkneCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppfk9aI1ppIWEjWmkjYSNaaSNiI1ppI2MjWml+UCFLbE9aI2RPIWEjVE8jYSNUTyNiI1RPI2MjVE9+UCFLbE9RI15PWiNkT2ojUk91IXtPdiF7T3ghfE8hYSNUTyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08jYSNUTyNiI1RPI2MjVE8jZSNVTydmUU9fI1ppIVIjWmkjZyNaaSNpI1ppI2ojWmknVyNaaSdwI1ppJ3gjWmkhTyNaaSFjI1ppbiNaaSFUI1ppJVEjWmkhXSNaaX5PJ3cjWml+UCFOZE8ndyF9T35QIU5kT1EjXk9aI2RPaiNST3Uhe092IXtPeCF8TyFhI1RPIWIheU8hZCF6TyFqI15PI1sjUE8jXSNRTyNeI1FPI18jUU8jYCNTTyNhI1RPI2IjVE8jYyNUTyNlI1VPI2cjV08nZlFPJ3chfU9fI1ppIVIjWmkjaSNaaSNqI1ppJ1cjWmkncCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppfk8neCNaaX5QIyNPTyd4I09PflAjI09PUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIWEjVE8hYiF5TyFkIXpPIWojXk8jWyNQTyNdI1FPI14jUU8jXyNRTyNgI1NPI2EjVE8jYiNUTyNjI1RPI2UjVU8jZyNXTyNpI1lPJ2ZRTyd3IX1PJ3gjT09+T18jWmkhUiNaaSNqI1ppJ1cjWmkncCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppflAjJWpPUVtYWltYaltYdVtYdltYeFtYIWFbWCFiW1ghZFtYIWpbWCF7W1gjV2RYI1tbWCNdW1gjXltYI19bWCNgW1gjYVtYI2JbWCNjW1gjZVtYI2dbWCNpW1gjaltYI29bWCdmW1gncFtYJ3dbWCd4W1ghUltYIVNbWH5PI21bWH5QIyd9T1EjXk9aOXJPajlnT3Uhe092IXtPeCF8TyFhOWlPIWIheU8hZCF6TyFqI15PI1s5ZU8jXTlmTyNeOWZPI185Zk8jYDloTyNhOWlPI2I5aU8jYzlpTyNlOWpPI2c5bE8jaTluTyNqOW9PJ2ZRTydwI1tPJ3chfU8neCNPT35PI20saE9+UCMqWE9RJ2lYWidpWGonaVh1J2lYdidpWHgnaVghYSdpWCFiJ2lYIWQnaVghaidpWCNbJ2lYI10naVgjXidpWCNfJ2lYI2AnaVgjYSdpWCNiJ2lYI2UnaVgjZydpWCNpJ2lYI2onaVgnZidpWCdwJ2lYJ3cnaVgneCdpWCFSJ2lYfk8hezlzTyNvOXNPI2MnaVgjbSdpWCFTJ2lYflAjLFNPXyZzYSFSJnNhJ1cmc2EhYyZzYW4mc2EhTyZzYSFUJnNhJVEmc2EhXSZzYX5QISl3T1EjWmlaI1ppXyNaaWojWml2I1ppIVIjWmkhYSNaaSFiI1ppIWQjWmkhaiNaaSNbI1ppI10jWmkjXiNaaSNfI1ppI2AjWmkjYSNaaSNiI1ppI2MjWmkjZSNaaSNnI1ppI2kjWmkjaiNaaSdXI1ppJ2YjWmkncCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppflAhQnBPXyNuaSFSI25pJ1cjbmkhTyNuaSFjI25pbiNuaSFUI25pJVEjbmkhXSNuaX5QISl3TyN6LGpPfk8jeixrT35PIV0nbE8heyxsTyFUJE9YI3ckT1gjeiRPWCRSJE9Yfk8hUSxtT35PIVQnb08jdyxvTyN6J25PJFIscE9+TyFSOXBPIVMnaFh+UCMqWE8hUyxxT35PJFIsc09+T1MnfU8nVShPTydWLHZPfk9dLHlPayx5TyFPLHpPfk8hUmRYIV1kWCFjZFghYyRlWCdwZFh+UCEhck8hYy1RT35QIUJwTyFSLVJPIV0hd08ncCZvTyFjJ31Yfk8hYy1XT35PIVEoYE8nXSRiTyFjJ31Qfk8jVy1ZT35PIU8kZVghUiRlWCFdJGxYflAhIXJPIVItWk8hTyhPWH5QIUJwTyFdLV1Pfk8hTy1fT35Pai1jTyFdIXdPIWQkWk8nYiRQTydwJm9Pfk8hXSlhT35PXyReTyFSLWhPJ1ckXk9+TyFTLWpPflAhJmpPIVgta08hWS1rTydeJGRPJ2coak9+T3gtbU8nZyhqT35PIXgtbk9+TyddJHtPIVImeFgnYSZ4WH5PIVIoeU8nYSdjYX5PJ2Etc09+T3UtdE92LXRPeC11T1ByYSd3cmEneHJhIVJyYSF7cmF+TydhcmEjbXJhflAjN3BPdShTT3goVE9QJF5hJ3ckXmEneCReYSFSJF5hIXskXmF+TydhJF5hI20kXmF+UCM4Zk91KFNPeChUT1AkYGEndyRgYSd4JGBhIVIkYGEheyRgYX5PJ2EkYGEjbSRgYX5QIzlYT10tdk9+TyNXLXdPfk8nYSRuYSFSJG5hIXskbmEjbSRuYX5QISN7TyNXLXpPfk9QLlRPIVQmZE8hby5TTyVRLlJPfk9dI3FPaiNyT2sjcU9sI3FPcSRST3M5dE94I3lPIVQjek8hXztlTyFkI3ZPI1Y5fU8jdCRWTyRfOXdPJGE5ek8kZCRXTydiJFBPJ2Yjc09+T2guVk8nXS5VT35QIzp5TyFdKWFPIVQnYGFfJ2BhIVInYGEnVydgYX5PI1cuXU9+T1pbWCFSZFghU2RYfk8hUi5eTyFTKFZYfk8hUy5gT35PWi5hT35PXS5jTyddKWlPfk8hVCRsTyddJGJPXidRWCFSJ1FYfk8hUiluT14oVWF+TyFjLmZPflAhKXdPXS5oT35PWi5pT35PXi5qT35PUC5UTyFUJmRPIW8uU08lUS5STydiJFBPfk8hUil6T18oUmEnVyhSYX5PIXsucE9+T1Auc08hVCN6T35PJ2cnVE8hUyhTUH5PUC59TyFULnlPIW8ufE8lUS57TydiJFBPfk9aL1hPIVIvVk8hUyhUWH5PIVMvWU9+T14vW09fJF5PJ1ckXk9+T10vXU9+T10vXk8nXSh8T35PI2MvX08lci9gT35QMHpPIXsjZU8jYy9fTyVyL2BPfk9fL2FPflApe09fL2NPfk8ley9nT1EleWlSJXlpWCV5aV0leWlfJXlpYiV5aWMleWloJXlpaiV5aWsleWlsJXlpcSV5aXMleWl4JXlpeyV5aXwleWl9JXlpIVQleWkhXyV5aSFkJXlpIWcleWkhaCV5aSFpJXlpIWoleWkhayV5aSFuJXlpI2QleWkjdCV5aSN4JXlpJVAleWklUiV5aSVUJXlpJVUleWklWCV5aSVaJXlpJV4leWklXyV5aSVhJXlpJW4leWkldCV5aSV2JXlpJXgleWkleiV5aSV9JXlpJlQleWkmWiV5aSZdJXlpJl8leWkmYSV5aSZjJXlpJ1MleWknXSV5aSdmJXlpJ28leWknfCV5aSFTJXlpYCV5aSZRJXlpfk9gL21PIVMva08mUS9sT35QYE8hVFNPIWQvb09+TyZYKndPUSZTaVImU2lYJlNpXSZTaV8mU2liJlNpYyZTaWgmU2lqJlNpayZTaWwmU2lxJlNpcyZTaXgmU2l7JlNpfCZTaX0mU2khVCZTaSFfJlNpIWQmU2khZyZTaSFoJlNpIWkmU2khaiZTaSFrJlNpIW4mU2kjZCZTaSN0JlNpI3gmU2klUCZTaSVSJlNpJVQmU2klVSZTaSVYJlNpJVomU2klXiZTaSVfJlNpJWEmU2klbiZTaSV0JlNpJXYmU2kleCZTaSV6JlNpJX0mU2kmVCZTaSZaJlNpJl0mU2kmXyZTaSZhJlNpJmMmU2knUyZTaSddJlNpJ2YmU2knbyZTaSd8JlNpIVMmU2kleyZTaWAmU2kmUSZTaX5PIVIjYk9uJF1hfk8hTyZpaSFSJmlpflAhKXdPIVIlek8hTydqaX5PIVImYE8hTyd0aX5PIU8vdU9+TyFSIVZhIVMhVmF+UCMqWE9dJlJPayZSTyFRL3tPJ2coak8hUiZqWCFTJmpYflBAZE8hUitgTyFTJ2thfk9dJlpPayZaTyFRKXlPJ2cnVE8hUiZvWCFTJm9Yfk8hUitjTyFTJ3Zhfk8hTyd1aSFSJ3VpflAhKXdPXyReTyFdIXdPIWQkWk8hajBWTyF7MFRPJ1ckXk8nYiRQTydwJm9Pfk8hUzBZT35QIT9pTyFYMFpPIVkwWk8nXiRkTydnKGpPJ28raU9+TyFXMFtPflAjTVNPIVRTTyFXMFtPIXUwXk8heDBfT35QI01TTyFXMFtPIXMwYU8hdDBhTyF1MF5PIXgwX09+UCNNU08hVCZkT35PIVQmZE9+UCFCcE8hUidyaSFjJ3JpXydyaSdXJ3JpflAhKXdPIXswak8hUidyaSFjJ3JpXydyaSdXJ3Jpfk8hUiZ0TyFjJ3Fpfk94JHVPIVQkdk8jVjBsTyddJGJPfk8jV3JhUXJhWnJhX3JhanJhIWFyYSFicmEhZHJhIWpyYSNbcmEjXXJhI15yYSNfcmEjYHJhI2FyYSNicmEjY3JhI2VyYSNncmEjaXJhI2pyYSdXcmEnZnJhJ3ByYSFjcmEhT3JhIVRyYW5yYSVRcmEhXXJhflAjN3BPI1ckXmFRJF5hWiReYV8kXmFqJF5hdiReYSFhJF5hIWIkXmEhZCReYSFqJF5hI1skXmEjXSReYSNeJF5hI18kXmEjYCReYSNhJF5hI2IkXmEjYyReYSNlJF5hI2ckXmEjaSReYSNqJF5hJ1ckXmEnZiReYSdwJF5hIWMkXmEhTyReYSFUJF5hbiReYSVRJF5hIV0kXmF+UCM4Zk8jVyRgYVEkYGFaJGBhXyRgYWokYGF2JGBhIWEkYGEhYiRgYSFkJGBhIWokYGEjWyRgYSNdJGBhI14kYGEjXyRgYSNgJGBhI2EkYGEjYiRgYSNjJGBhI2UkYGEjZyRgYSNpJGBhI2okYGEnVyRgYSdmJGBhJ3AkYGEhYyRgYSFPJGBhIVQkYGFuJGBhJVEkYGEhXSRgYX5QIzlYTyNXJG5hUSRuYVokbmFfJG5haiRuYXYkbmEhUiRuYSFhJG5hIWIkbmEhZCRuYSFqJG5hI1skbmEjXSRuYSNeJG5hI18kbmEjYCRuYSNhJG5hI2IkbmEjYyRuYSNlJG5hI2ckbmEjaSRuYSNqJG5hJ1ckbmEnZiRuYSdwJG5hIWMkbmEhTyRuYSFUJG5hIXskbmFuJG5hJVEkbmEhXSRuYX5QIUJwT18jT3EhUiNPcSdXI09xIU8jT3EhYyNPcW4jT3EhVCNPcSVRI09xIV0jT3F+UCEpd08hUiZrWCdhJmtYflBKak8hUixfTydhJ21hfk8hUTB0TyFSJmxYIWMmbFh+UCl7TyFSLGJPIWMnbmF+TyFSLGJPIWMnbmF+UCEpd08jbSFmYSFTIWZhflBDZk8jbSFeYSFSIV5hIVMhXmF+UCMqWE8hVDFYTyN4Xk8kUDFZT35PIVMxXk9+T24xX09+UCFCcE9fJFlxIVIkWXEnVyRZcSFPJFlxIWMkWXFuJFlxIVQkWXElUSRZcSFdJFlxflAhKXdPIU8xYE9+T10seU9rLHlPfk91KFNPeChUTyd4KFhPUCR4aSd3JHhpIVIkeGkheyR4aX5PJ2EkeGkjbSR4aX5QJC5QT3UoU094KFRPUCR6aSd3JHppJ3gkemkhUiR6aSF7JHppfk8nYSR6aSNtJHppflAkLnJPJ3AjW09+UCFCcE8hUTFjTyddJGJPIVImdFghYyZ0WH5PIVItUk8hYyd9YX5PIVItUk8hXSF3TyFjJ31hfk8hUi1STyFdIXdPJ3Amb08hYyd9YX5PJ2EkZ2khUiRnaSF7JGdpI20kZ2l+UCEje08hUTFrTyddKGVPIU8mdlghUiZ2WH5QISRqTyFSLVpPIU8oT2F+TyFSLVpPIU8oT2F+UCFCcE8hXSF3T35PIV0hd08jYzFzT35PajF2TyFdIXdPJ3Amb09+TyFSJ2RpJ2EnZGl+UCEje08hezF5TyFSJ2RpJ2EnZGl+UCEje08hYzF8T35PXyRacSFSJFpxJ1ckWnEhTyRacSFjJFpxbiRacSFUJFpxJVEkWnEhXSRacX5QISl3TyFSMlFPIVQoUFh+UCFCcE8hVCZkTyVRMlRPfk8hVCZkTyVRMlRPflAhQnBPIVQkZVgkdVtYXyRlWCFSJGVYJ1ckZVh+UCEhck8kdTJYT1BnWHVnWHhnWCFUZ1gnd2dYJ3hnWF9nWCFSZ1gnV2dYfk8kdTJYT35PXTJfTyVSMmBPJ10paU8hUidQWCFTJ1BYfk8hUi5eTyFTKFZhfk9aMmRPfk9eMmVPfk9dMmhPfk9QMmpPIVQmZE8hbzJpTyVRMlRPfk9fJF5PJ1ckXk9+UCFCcE8hVCN6T35QIUJwTyFSMm9PIXsycU8hUyhTWH5PIVMyck9+T3g7b08hVzJ7TyFYMnRPIVkydE8hcjJ6TyFzMnlPIXQyeU8heDJ4TydeJGRPJ2coak8nbytpT35PIVMyd09+UCQ3Wk9QM1NPIVQueU8hbzNSTyVRM1FPfk9QM1NPIVQueU8hbzNSTyVRM1FPJ2IkUE9+TyddKHxPIVInT1ghUydPWH5PIVIvVk8hUyhUYX5PXTNeTydnM11Pfk9dM19Pfk9eM2FPfk8hYzNkT35QKXtPXzNmT35PXzNmT35QKXtPI2MzaE8lcjNpT35QRk9PYC9tTyFTM21PJlEvbE9+UGBPIV0zb09+TyFSI1RpIVMjVGl+UCMqWE8hezNxTyFSI1RpIVMjVGl+TyFSIVZpIVMhVml+UCMqWE9fJF5PIXszeE8nVyReT35PXyReTyFdIXdPIXszeE8nVyReT35PIVgzfE8hWTN8TydeJGRPJ2coak8nbytpT35PXyReTyFdIXdPIWQkWk8hajN9TyF7M3hPJ1ckXk8nYiRQTydwJm9Pfk8hVzRPT35QJDt4TyFXNE9PIXU0Uk8heDRTT35QJDt4T18kXk8hXSF3TyFqM31PIXszeE8nVyReTydwJm9Pfk8hUidycSFjJ3JxXydycSdXJ3JxflAhKXdPIVImdE8hYydxcX5PI1ckeGlRJHhpWiR4aV8keGlqJHhpdiR4aSFhJHhpIWIkeGkhZCR4aSFqJHhpI1skeGkjXSR4aSNeJHhpI18keGkjYCR4aSNhJHhpI2IkeGkjYyR4aSNlJHhpI2ckeGkjaSR4aSNqJHhpJ1ckeGknZiR4aSdwJHhpIWMkeGkhTyR4aSFUJHhpbiR4aSVRJHhpIV0keGl+UCQuUE8jVyR6aVEkemlaJHppXyR6aWokeml2JHppIWEkemkhYiR6aSFkJHppIWokemkjWyR6aSNdJHppI14kemkjXyR6aSNgJHppI2EkemkjYiR6aSNjJHppI2UkemkjZyR6aSNpJHppI2okemknVyR6aSdmJHppJ3AkemkhYyR6aSFPJHppIVQkemluJHppJVEkemkhXSR6aX5QJC5yTyNXJGdpUSRnaVokZ2lfJGdpaiRnaXYkZ2khUiRnaSFhJGdpIWIkZ2khZCRnaSFqJGdpI1skZ2kjXSRnaSNeJGdpI18kZ2kjYCRnaSNhJGdpI2IkZ2kjYyRnaSNlJGdpI2ckZ2kjaSRnaSNqJGdpJ1ckZ2knZiRnaSdwJGdpIWMkZ2khTyRnaSFUJGdpIXskZ2luJGdpJVEkZ2khXSRnaX5QIUJwTyFSJmthJ2Ema2F+UCEje08hUiZsYSFjJmxhflAhKXdPIVIsYk8hYyduaX5PI20jT2khUiNPaSFTI09pflAjKlhPUSNeT3Uhe092IXtPeCF8TyFiIXlPIWQhek8haiNeTydmUU9aI1ppaiNaaSFhI1ppI10jWmkjXiNaaSNfI1ppI2AjWmkjYSNaaSNiI1ppI2MjWmkjZSNaaSNnI1ppI2kjWmkjaiNaaSNtI1ppJ3AjWmkndyNaaSd4I1ppIVIjWmkhUyNaaX5PI1sjWml+UCRFaU8jWzllT35QJEVpT1EjXk91IXtPdiF7T3ghfE8hYiF5TyFkIXpPIWojXk8jWzllTyNdOWZPI145Zk8jXzlmTydmUU9aI1ppIWEjWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppI20jWmkncCNaaSd3I1ppJ3gjWmkhUiNaaSFTI1ppfk9qI1ppflAkR3FPajlnT35QJEdxT1EjXk9qOWdPdSF7T3Yhe094IXxPIWIheU8hZCF6TyFqI15PI1s5ZU8jXTlmTyNeOWZPI185Zk8jYDloTydmUU8jZSNaaSNnI1ppI2kjWmkjaiNaaSNtI1ppJ3AjWmkndyNaaSd4I1ppIVIjWmkhUyNaaX5PWiNaaSFhI1ppI2EjWmkjYiNaaSNjI1ppflAkSXlPWjlyTyFhOWlPI2E5aU8jYjlpTyNjOWlPflAkSXlPUSNeT1o5ck9qOWdPdSF7T3Yhe094IXxPIWE5aU8hYiF5TyFkIXpPIWojXk8jWzllTyNdOWZPI145Zk8jXzlmTyNgOWhPI2E5aU8jYjlpTyNjOWlPI2U5ak8nZlFPI2cjWmkjaSNaaSNqI1ppI20jWmkncCNaaSd4I1ppIVIjWmkhUyNaaX5PJ3cjWml+UCRMX08ndyF9T35QJExfT1EjXk9aOXJPajlnT3Uhe092IXtPeCF8TyFhOWlPIWIheU8hZCF6TyFqI15PI1s5ZU8jXTlmTyNeOWZPI185Zk8jYDloTyNhOWlPI2I5aU8jYzlpTyNlOWpPI2c5bE8nZlFPJ3chfU8jaSNaaSNqI1ppI20jWmkncCNaaSFSI1ppIVMjWml+Tyd4I1ppflAkTmdPJ3gjT09+UCROZ09RI15PWjlyT2o5Z091IXtPdiF7T3ghfE8hYTlpTyFiIXlPIWQhek8haiNeTyNbOWVPI105Zk8jXjlmTyNfOWZPI2A5aE8jYTlpTyNiOWlPI2M5aU8jZTlqTyNnOWxPI2k5bk8nZlFPJ3chfU8neCNPT35PI2ojWmkjbSNaaSdwI1ppIVIjWmkhUyNaaX5QJSFvT18ja3khUiNreSdXI2t5IU8ja3khYyNreW4ja3khVCNreSVRI2t5IV0ja3l+UCEpd09QO3ZPdShTT3goVE8ndyhWTyd4KFhPfk9RI1ppWiNaaWojWml2I1ppIWEjWmkhYiNaaSFkI1ppIWojWmkjWyNaaSNdI1ppI14jWmkjXyNaaSNgI1ppI2EjWmkjYiNaaSNjI1ppI2UjWmkjZyNaaSNpI1ppI2ojWmkjbSNaaSdmI1ppJ3AjWmkhUiNaaSFTI1ppflAlJWFPIWIheU9QJ2VYdSdlWHgnZVgndydlWCd4J2VYIVMnZVh+T1EnZVhaJ2VYaidlWHYnZVghYSdlWCFkJ2VYIWonZVgjWydlWCNdJ2VYI14nZVgjXydlWCNgJ2VYI2EnZVgjYidlWCNjJ2VYI2UnZVgjZydlWCNpJ2VYI2onZVgjbSdlWCdmJ2VYJ3AnZVghUidlWH5QJSdlTyNtI25pIVIjbmkhUyNuaX5QIypYTyFTNGVPfk8hUiZzYSFTJnNhflAjKlhPIV0hd08ncCZvTyFSJnRhIWMmdGF+TyFSLVJPIWMnfWl+TyFSLVJPIV0hd08hYyd9aX5PJ2EkZ3EhUiRncSF7JGdxI20kZ3F+UCEje08hTyZ2YSFSJnZhflAhQnBPIV00bE9+TyFSLVpPIU8oT2l+UCFCcE8hUi1aTyFPKE9pfk8hTzRwT35PIV0hd08jYzR1T35PajR2TyFdIXdPJ3Amb09+TyFPNHhPfk8nYSRpcSFSJGlxIXskaXEjbSRpcX5QISN7T18kWnkhUiRaeSdXJFp5IU8kWnkhYyRaeW4kWnkhVCRaeSVRJFp5IV0kWnl+UCEpd08hUjJRTyFUKFBhfk8hVCZkTyVRNH1Pfk8hVCZkTyVRNH1PflAhQnBPXyNPeSFSI095J1cjT3khTyNPeSFjI095biNPeSFUI095JVEjT3khXSNPeX5QISl3T1o1UU9+T101U08nXSlpT35PIVIuXk8hUyhWaX5PXTVWT35PXjVXT35PJ2cnVE8hUiZ7WCFTJntYfk8hUjJvTyFTKFNhfk8hUzVlT35QJDdaT3g7c08nZyhqTydvK2lPfk8hVzVoTyFYNWdPIVk1Z08heDBfTydeJGRPJ2coak8nbytpT35PIXM1aU8hdDVpT35QJTBeTyFYNWdPIVk1Z08nXiRkTydnKGpPJ28raU9+TyFULnlPfk8hVC55TyVRNWtPfk8hVC55TyVRNWtPflAhQnBPUDVwTyFULnlPIW81b08lUTVrT35PWjV1TyFSJ09hIVMnT2F+TyFSL1ZPIVMoVGl+T101eE9+TyFjNXlPfk8hYzV6T35PIWM1e09+TyFjNXtPflApe09fNX1Pfk8hXTZRT35PIWM2Uk9+TyFSJ3VpIVMndWl+UCMqWE9fJF5PJ1ckXk9+UCEpd09fJF5PIXs2V08nVyReT35PXyReTyFdIXdPIXs2V08nVyReT35PIVg2XU8hWTZdTydeJGRPJ2coak8nbytpT35PXyReTyFdIXdPIWo2Xk8hezZXTydXJF5PJ3Amb09+TyFkJFpPJ2IkUE9+UCU0eE8hVzZfT35QJTRnTyFSJ3J5IWMncnlfJ3J5J1cncnl+UCEpd08jVyRncVEkZ3FaJGdxXyRncWokZ3F2JGdxIVIkZ3EhYSRncSFiJGdxIWQkZ3EhaiRncSNbJGdxI10kZ3EjXiRncSNfJGdxI2AkZ3EjYSRncSNiJGdxI2MkZ3EjZSRncSNnJGdxI2kkZ3EjaiRncSdXJGdxJ2YkZ3EncCRncSFjJGdxIU8kZ3EhVCRncSF7JGdxbiRncSVRJGdxIV0kZ3F+UCFCcE8jVyRpcVEkaXFaJGlxXyRpcWokaXF2JGlxIVIkaXEhYSRpcSFiJGlxIWQkaXEhaiRpcSNbJGlxI10kaXEjXiRpcSNfJGlxI2AkaXEjYSRpcSNiJGlxI2MkaXEjZSRpcSNnJGlxI2kkaXEjaiRpcSdXJGlxJ2YkaXEncCRpcSFjJGlxIU8kaXEhVCRpcSF7JGlxbiRpcSVRJGlxIV0kaXF+UCFCcE8hUiZsaSFjJmxpflAhKXdPI20jT3EhUiNPcSFTI09xflAjKlhPdS10T3YtdE94LXVPUHJhJ3dyYSd4cmEhU3Jhfk9RcmFacmFqcmEhYXJhIWJyYSFkcmEhanJhI1tyYSNdcmEjXnJhI19yYSNgcmEjYXJhI2JyYSNjcmEjZXJhI2dyYSNpcmEjanJhI21yYSdmcmEncHJhIVJyYX5QJTtPT3UoU094KFRPUCReYSd3JF5hJ3gkXmEhUyReYX5PUSReYVokXmFqJF5hdiReYSFhJF5hIWIkXmEhZCReYSFqJF5hI1skXmEjXSReYSNeJF5hI18kXmEjYCReYSNhJF5hI2IkXmEjYyReYSNlJF5hI2ckXmEjaSReYSNqJF5hI20kXmEnZiReYSdwJF5hIVIkXmF+UCU9U091KFNPeChUT1AkYGEndyRgYSd4JGBhIVMkYGF+T1EkYGFaJGBhaiRgYXYkYGEhYSRgYSFiJGBhIWQkYGEhaiRgYSNbJGBhI10kYGEjXiRgYSNfJGBhI2AkYGEjYSRgYSNiJGBhI2MkYGEjZSRgYSNnJGBhI2kkYGEjaiRgYSNtJGBhJ2YkYGEncCRgYSFSJGBhflAlP1dPUSRuYVokbmFqJG5hdiRuYSFhJG5hIWIkbmEhZCRuYSFqJG5hI1skbmEjXSRuYSNeJG5hI18kbmEjYCRuYSNhJG5hI2IkbmEjYyRuYSNlJG5hI2ckbmEjaSRuYSNqJG5hI20kbmEnZiRuYSdwJG5hIVIkbmEhUyRuYX5QJSVhTyNtJFlxIVIkWXEhUyRZcX5QIypYTyNtJFpxIVIkWnEhUyRacX5QIypYTyFTNmhPfk8jbTZpT35QISN7TyFdIXdPIVImdGkhYyZ0aX5PIV0hd08ncCZvTyFSJnRpIWMmdGl+TyFSLVJPIWMnfXF+TyFPJnZpIVImdml+UCFCcE8hUi1aTyFPKE9xfk8hTzZvT35QIUJwTyFPNm9Pfk8hUidkeSdhJ2R5flAhI3tPIVImeWEhVCZ5YX5QIUJwTyFUJHRxXyR0cSFSJHRxJ1ckdHF+UCFCcE9aNnZPfk8hUi5eTyFTKFZxfk9dNnlPfk8hVCZkTyVRNnpPfk8hVCZkTyVRNnpPflAhQnBPIXs2e08hUiZ7YSFTJnthfk8hUjJvTyFTKFNpflAjKlhPIVg3Uk8hWTdSTydeJGRPJ2coak8nbytpT35PIVc3VE8heDRTT35QJUdYTyFULnlPJVE3V09+TyFULnlPJVE3V09+UCFCcE9dN19PJ2c3Xk9+TyFSL1ZPIVMoVHF+TyFjN2FPfk8hYzdhT35QKXtPIWM3Y09+TyFjN2RPfk8hUiNUeSFTI1R5flAjKlhPXyReTyF7N2pPJ1ckXk9+T18kXk8hXSF3TyF7N2pPJ1ckXk9+TyFYN21PIVk3bU8nXiRkTydnKGpPJ28raU9+T18kXk8hXSF3TyFqN25PIXs3ak8nVyReTydwJm9Pfk8jbSNreSFSI2t5IVMja3l+UCMqWE9RJGdpWiRnaWokZ2l2JGdpIWEkZ2khYiRnaSFkJGdpIWokZ2kjWyRnaSNdJGdpI14kZ2kjXyRnaSNgJGdpI2EkZ2kjYiRnaSNjJGdpI2UkZ2kjZyRnaSNpJGdpI2okZ2kjbSRnaSdmJGdpJ3AkZ2khUiRnaSFTJGdpflAlJWFPdShTT3goVE8neChYT1AkeGkndyR4aSFTJHhpfk9RJHhpWiR4aWokeGl2JHhpIWEkeGkhYiR4aSFkJHhpIWokeGkjWyR4aSNdJHhpI14keGkjXyR4aSNgJHhpI2EkeGkjYiR4aSNjJHhpI2UkeGkjZyR4aSNpJHhpI2okeGkjbSR4aSdmJHhpJ3AkeGkhUiR4aX5QJUxqT3UoU094KFRPUCR6aSd3JHppJ3gkemkhUyR6aX5PUSR6aVokemlqJHppdiR6aSFhJHppIWIkemkhZCR6aSFqJHppI1skemkjXSR6aSNeJHppI18kemkjYCR6aSNhJHppI2IkemkjYyR6aSNlJHppI2ckemkjaSR6aSNqJHppI20kemknZiR6aSdwJHppIVIkeml+UCVObk8jbSRaeSFSJFp5IVMkWnl+UCMqWE8jbSNPeSFSI095IVMjT3l+UCMqWE8hXSF3TyFSJnRxIWMmdHF+TyFSLVJPIWMnfXl+TyFPJnZxIVImdnF+UCFCcE8hTzd0T35QIUJwTyFSLl5PIVMoVnl+TyFSMm9PIVMoU3F+TyFYOFFPIVk4UU8nXiRkTydnKGpPJ28raU9+TyFULnlPJVE4VE9+TyFULnlPJVE4VE9+UCFCcE8hYzhXT35PXyReTyF7OF1PJ1ckXk9+T18kXk8hXSF3TyF7OF1PJ1ckXk9+T1EkZ3FaJGdxaiRncXYkZ3EhYSRncSFiJGdxIWQkZ3EhaiRncSNbJGdxI10kZ3EjXiRncSNfJGdxI2AkZ3EjYSRncSNiJGdxI2MkZ3EjZSRncSNnJGdxI2kkZ3EjaiRncSNtJGdxJ2YkZ3EncCRncSFSJGdxIVMkZ3F+UCUlYU9RJGlxWiRpcWokaXF2JGlxIWEkaXEhYiRpcSFkJGlxIWokaXEjWyRpcSNdJGlxI14kaXEjXyRpcSNgJGlxI2EkaXEjYiRpcSNjJGlxI2UkaXEjZyRpcSNpJGlxI2okaXEjbSRpcSdmJGlxJ3AkaXEhUiRpcSFTJGlxflAlJWFPJ2EkfCFaIVIkfCFaIXskfCFaI20kfCFaflAhI3tPIVIme3EhUyZ7cX5QIypYT18kXk8hezhvTydXJF5Pfk8jVyR8IVpRJHwhWlokfCFaXyR8IVpqJHwhWnYkfCFaIVIkfCFaIWEkfCFaIWIkfCFaIWQkfCFaIWokfCFaI1skfCFaI10kfCFaI14kfCFaI18kfCFaI2AkfCFaI2EkfCFaI2IkfCFaI2MkfCFaI2UkfCFaI2ckfCFaI2kkfCFaI2okfCFaJ1ckfCFaJ2YkfCFaJ3AkfCFaIWMkfCFaIU8kfCFaIVQkfCFaIXskfCFabiR8IVolUSR8IVohXSR8IVp+UCFCcE9QO3VPdShTT3goVE8ndyhWTyd4KFhPfk8hUyF6YSFXIXphIVghemEhWSF6YSFyIXphIXMhemEhdCF6YSF4IXphJ14hemEnZyF6YSdvIXphflAmLF9PIVcnZVghWCdlWCFZJ2VYIXInZVghcydlWCF0J2VYIXgnZVgnXidlWCdnJ2VYJ28nZVh+UCUnZU9RJHwhWlokfCFaaiR8IVp2JHwhWiFhJHwhWiFiJHwhWiFkJHwhWiFqJHwhWiNbJHwhWiNdJHwhWiNeJHwhWiNfJHwhWiNgJHwhWiNhJHwhWiNiJHwhWiNjJHwhWiNlJHwhWiNnJHwhWiNpJHwhWiNqJHwhWiNtJHwhWidmJHwhWidwJHwhWiFSJHwhWiFTJHwhWn5QJSVhTyFXcmEhWHJhIVlyYSFycmEhc3JhIXRyYSF4cmEnXnJhJ2dyYSdvcmF+UCU7T08hVyReYSFYJF5hIVkkXmEhciReYSFzJF5hIXQkXmEheCReYSdeJF5hJ2ckXmEnbyReYX5QJT1TTyFXJGBhIVgkYGEhWSRgYSFyJGBhIXMkYGEhdCRgYSF4JGBhJ14kYGEnZyRgYSdvJGBhflAlP1dPIVMkbmEhVyRuYSFYJG5hIVkkbmEhciRuYSFzJG5hIXQkbmEheCRuYSdeJG5hJ2ckbmEnbyRuYX5QJixfTyFXJHhpIVgkeGkhWSR4aSFyJHhpIXMkeGkhdCR4aSF4JHhpJ14keGknZyR4aSdvJHhpflAlTGpPIVckemkhWCR6aSFZJHppIXIkemkhcyR6aSF0JHppIXgkemknXiR6aSdnJHppJ28keml+UCVObk8hUyRnaSFXJGdpIVgkZ2khWSRnaSFyJGdpIXMkZ2khdCRnaSF4JGdpJ14kZ2knZyRnaSdvJGdpflAmLF9PIVMkZ3EhVyRncSFYJGdxIVkkZ3EhciRncSFzJGdxIXQkZ3EheCRncSdeJGdxJ2ckZ3EnbyRncX5QJixfTyFTJGlxIVckaXEhWCRpcSFZJGlxIXIkaXEhcyRpcSF0JGlxIXgkaXEnXiRpcSdnJGlxJ28kaXF+UCYsX08hUyR8IVohVyR8IVohWCR8IVohWSR8IVohciR8IVohcyR8IVohdCR8IVoheCR8IVonXiR8IVonZyR8IVonbyR8IVp+UCYsX09uJ2hYflAuak9uW1ghT1tYIWNbWCVyW1ghVFtYJVFbWCFdW1h+UCR6TyFdZFghY1tYIWNkWCdwZFh+UDtkT1E5Xk9SOV5PXWNPYjtgT2Mhak9oY09qOV5Pa2NPbGNPcTleT3M5Xk94Uk97Y098Y099Y08hVFNPIV85YE8hZFVPIWc5Xk8haDleTyFpOV5PIWo5Xk8hazleTyFuIWlPI3QhbE8jeF5PJ10nY08nZlFPJ29ZTyd8O15Pfk9dI3FPaCRRT2ojck9rI3FPbCNxT3EkUk9zOXVPeCN5TyFUI3pPIV87Zk8hZCN2TyNWOk9PI3QkVk8kXzl4TyRhOXtPJGQkV08nXSZ7TydiJFBPJ2Yjc09+TyFSOXBPIVMkXWF+T10jcU9oJFFPaiNyT2sjcU9sI3FPcSRST3M5dk94I3lPIVQjek8hXztnTyFkI3ZPI1Y6UE8jdCRWTyRfOXlPJGE5fE8kZCRXTyddJntPJ2IkUE8nZiNzT35PI2Qnak9+UCY8V08hU1tYIVNkWH5QO2RPIV05ZE9+TyNXOWNPfk8hXSF3TyNXOWNPfk8hezlzT35PI2M5aU9+TyF7OlFPIVIndVghUyd1WH5PIXs5c08hUidzWCFTJ3NYfk8jVzpST35PJ2E6VE9+UCEje08jVzpbT35PI1c6XU9+TyNXOl5Pfk8hXSF3TyNXOl9Pfk8hXSF3TyNXOlJPfk8jbTpgT35QIypYTyNXOmFPfk8jVzpiT35PI1c6Y09+TyNXOmRPfk8jVzplT35PI1c6Zk9+TyNXOmdPfk8jVzpoT35PIU86aU9+TyNtOmpPflAhI3tPI206a09+UCEje08jbTpsT35QISN7TyFPOm1PflAhQnBPIU86bU9+TyFPOm5PflAhQnBPIV0hd08jYztsT35PIV0hd08jYztuT35PI3h+IWIhciF0IXUjVSNWJ3wkXyRhJGQkdSVQJVElUiVYJVolXiVfJWElY35VVCN4J3wjXX0nWSdaI3onWSddJ2d+XCIsZ290bzpcIiNLayhaUFBQUFBQUFAoW1AobFAqYFBQUFAtelBQLmEzczdvOFNQOFNQUFA4U1A6VThTUDhTUDpZUFA6YFA6dD9WUFBQUD9aUFBQUD9aQXtQUFBCUkRkUD9aUEZ3UFBQUEhwP1pQUFBQUEppP1pQUE1qTmdQUFBQTmshIVRQISFdISNeUE5nP1o/WiEmbiEpaSEuWyEuWyExa1BQUCExciE0aD9aUFBQUFBQUFBQUCE3X1AhOHBQUD9aITl9UD9aUD9aP1o/Wj9aUD9aITtkUFAhPl1QIUFRIUFZIUFeIUFeUCE+WVAhQWIhQWJQIURWUCFEWj9aP1ohRGEhR1Q4U1A4U1A4UzhTUCFIVzhTOFMhSmY4UyFNXzhTIyBnOFM4UyMhVCMkYyMkYyMkZyMkYyMkb1AjJGNQOFMjJWs4UyMnWDhTOFMtelBQUCMoeVBQIyljIyljUCMpY1AjKXgjKWNQUCMqT1AjKXVQIyl1IypiISFYIyl1IytQIytWIytZKFsjK10oW1AjK2QjK2QjK2RQKFtQKFtQKFtQKFtQUChbUCMraiMrbVAjK20oW1AjK3FQIyt0UChbUChbUChbUChbUChbUChbKFsjK3ojLFUjLFsjLGIjLHAjLHYjLHwjLVcjLV4jLW0jLXMjLlIjLlgjLl8jLm0jL1MjMHojMVkjMWAjMWYjMWwjMXIjMXwjMlMjMlkjMmQjMnYjMnxQUFBQUFBQUCMzU1BQIzN2IzdPUFAjOGYjOG0jOHVQUCM+YSNAdCNGcCNGcyNGdiNHUiNHVVBQI0dYI0ddI0d6I0hxI0h1I0laUFAjSV8jSWUjSWlQI0lsI0lwI0lzI0pjI0p5I0tPI0tSI0tVI0tbI0tfI0tjI0tnbWhPU2p9IW4kXSVjJWYlZyVpKm8qdC9nL2pRJGltUSRwcFElWnlTJlYhYitgUSZrIWpTKGwjeihxUSlnJGpRKXQkclEqYCVUUStmJl5TK2smZCttUSt9JmxRLWsoc1EvVSphWTBaK28rcCtxK3Irc1MydC55MnZVM3wwWzBeMGFVNWcyeTJ6MntTNl00TzRSUzdSNWg1aVE3bTZfUjhRN1QkcFtPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI2IjZSRdJG4lWyVfJWMlZSVmJWclaSVtJXgleiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG8haidlI10jayZXJ3crWCtbLG0vezFYMnEzcTZ7OV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUSh9JFNRKWwkbFEqYiVXUSppJWBRLFg5dFEuVylhUS5jKW1RL14qZ1EyXy5eUTNaL1ZRNF45dlE1UzJgUjh7OXVwZU9Tanl9IW4kXSVZJWMlZiVnJWkqbyp0L2cvalIqZCVbJldWT1NUamtufSFTIVchayFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNdI2IjZSNrJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV6JlMmXyZmJnAmfSdSJ3coUilWKV4qaypvKnQrVCtYK1sreCxQLGIsaCxtLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sL3swVDBqMHQxWDJpMnEzUjNmM2gzaTNxM3g1bzV9Nlc2ezdqOF04bzleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YDthWyFjUlUhXSFgJXgmV1EkY2xRJGhtUyRtcCRydiR3cnMhciF1JFokdSZgJnQmdyl4KXkpeiptK1kraCxTLFUvbzBsUSVQd1EmaCFpUSZqIWpTKF8jdihjUylmJGkkalEpaiRsUSl3JHRRKlolUlEqXyVUUyt8JmsmbFEtVihgUS5bKWdRLmIpbVEuZCluUS5nKXJRL1AqW1MvVCpgKmFRMGgrfVExYi1SUTJeLl5RMmIuYVEyZy5pUTNZL1VRNGkxY1E1UjJgUTVVMmRRNnU1UVI3dzZ2eCN4YSF5JFQkVSRZKFcoWShiKHcoeCxfLVktdzFhMXk2aTteO2k7ajtrIVkkZm0haiRoJGkkaiZVJmomayZsKGspZilnK10rait8K30tZC5bMFEwVzBdMGgxdTN7NFE2WjdrOF5RKWAkY1EqUCR8USpTJH1RKl4lVFEuayl3US9PKlpVL1MqXypgKmFRM1QvUFMzWC9UL1VRNWIyc1E1dDNZUzdQNWM1ZlM4TzdRN1NROGY4UFE4dThnI1s7YiF3I2QjdiN5JmcnfShaKGgpXSlfKWEqTypSK3ktWi1dLlIuVC5wLnMuey59MWsxczJRMlQyWDJqM1EzUzRsNHU0fTVrNXA2ejdXOFQ5dzl6OX06VTpYOls6YTpkOmo7bDtuO3Q7dTt2ZDtjOWQ5eDl7Ok86VjpZOl06YjplOmtlO2Q5cjl5OXw6UDpXOlo6XjpjOmY6bFcjfWEkUCh5O15TJHx0JVlRJH11USVPdlIpfSR6JVAjfGEhdyF5I2QjdiN5JFQkVSRZJmcnfShXKFkoWihiKGgodyh4KV0pXylhKk8qUit5LF8tWS1aLV0tdy5SLlQucC5zLnsufTFhMWsxczF5MlEyVDJYMmozUTNTNGw0dTR9NWs1cDZpNno3VzhUOWQ5cjl3OXg5eTl6OXs5fDl9Ok86UDpVOlY6VzpYOlk6WjpbOl06XjphOmI6YzpkOmU6ZjpqOms6bDteO2k7ajtrO2w7bjt0O3U7dlQoTyNzKFBYKU8kUzl0OXU5dlUmWiFiJHYrY1EnVSF7USlxJG9RLnQqVFExei10UjVeMm8mXmNPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2skXSRuJVslXyVgJWMlZSVmJWclaSVtJXgleiZTJlcmXyZmJnAmfSdSJ3coUilWKV4qaypvKnQrVCtYK1sreCxQLGIsaCxtLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sL3swVDBqMHQxWDJpMnEzUjNmM2gzaTNxM3g1bzV9Nlc2ezdqOF04bzleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YSRdI2FaIV8hbyRhJXclfSZ5J1EnVydYJ1knWidbJ10nXidfJ2AnYSdiJ2QnZydrJ3UpcCtSK14rZyxPLF4sZCxnLGksdy14L3YveTBpMHMwdzB4MHkwejB7MHwwfTFPMVAxUTFSMVMxVDFXMV0yTzJbM3MzdjRXNFs0XTRiNGM1YDZTNlY2YjZmNmc3Zzd6OFo4bTh5OV86fFQhWFEhWSZfY09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojXSNiI2UjayRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLG0tdS16LlMuXS58L18vYC9hL2MvZy9qL2wvezBUMGowdDFYMmkycTNSM2YzaDNpM3EzeDVvNX02VzZ7N2o4XThvOV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUSZYIWJSL3wrYFkmUiFiJlYmXitgK2ZTKGsjeihxUytqJmQrbVMtZChsKHNRLWUobVEtbCh0US52KlZVMFcraytvK3BVMF0rcStyK3NTMGIrdDJ4UTF1LWtRMXctbVExeC1uUzJzLnkydlUzezBaMFswXlE0UDBfUTRRMGFTNWMydDJ7UzVmMnkyelU2WjN8NE80UlE2YDRTUzdRNWc1aFE3UzVpUzdrNl02X1M4UDdSN1RROF43bVE4ZzhRUTtoO29SO207c2xoT1NqfSFuJF0lYyVmJWclaSpvKnQvZy9qUSVrIVFTJnghdjljUSlkJGdRKlglUFEqWSVRUSt6JmlTLF0mfTpSUy15KVY6X1EuWSllUS54KldRL24qdlEvcCp3US94K1pRMGArcVEwZit7UzJQLXo6Z1EyWS5aUzJdLl06aFEzci96UTN1MFJRNFUwZ1E1UDJaUTZUM3RRNlgzelE2YTRWUTdlNlJRN2g2WVE4WTdpUThsOFtSOHg4biRXI2BaIV8hbyV3JX0meSdRJ1cnWCdZJ1onWyddJ14nXydgJ2EnYidkJ2cnayd1KXArUiteK2csTyxeLGQsZyx3LXgvdi95MGkwczB3MHgweTB6MHswfDB9MU8xUDFRMVIxUzFUMVcxXTJPMlszczN2NFc0WzRdNGI0YzVgNlM2VjZiNmY2ZzdnN3o4WjhtOHk5Xzp8Vyh2I3smfDFWOHFUKVokYSxpJFcjX1ohXyFvJXclfSZ5J1EnVydYJ1knWidbJ10nXidfJ2AnYSdiJ2QnZydrJ3UpcCtSK14rZyxPLF4sZCxnLHcteC92L3kwaTBzMHcweDB5MHowezB8MH0xTzFQMVExUjFTMVQxVzFdMk8yWzNzM3Y0VzRbNF00YjRjNWA2UzZWNmI2ZjZnN2c3ejhaOG04eTlfOnxRJ2YjYFMpWSRhLGlSLXspWiZeY09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojXSNiI2UjayRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLG0tdS16LlMuXS58L18vYC9hL2MvZy9qL2wvezBUMGowdDFYMmkycTNSM2YzaDNpM3EzeDVvNX02VzZ7N2o4XThvOV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUSVme1ElZ3xRJWkhT1ElaiFQUi9mKnJRJmUhaVEpWyRjUSt3JmhTLlEpYCl3UzBjK3UrdlcyUy19Lk8uUC5rUzRUMGQwZVU0fDJVMlYyV1U2czR7NVk1WlE3djZ0UjhiN3lUK2wmZCttUytqJmQrbVUwVytrK28rcFUwXStxK3Irc1MwYit0MnhTMnMueTJ2VTN7MFowWzBeUTRQMF9RNFEwYVM1YzJ0MntTNWYyeTJ6VTZaM3w0TzRSUTZgNFNTN1E1ZzVoUTdTNWlTN2s2XTZfUzhQN1I3VFE4XjdtUjhnOFFTK2wmZCttVDJ1LnkydlMmciFxL2RRLVUoX1EtYihrUzBWK2oyc1ExZy1WUzFwLWMtbFUzfTBdMGI1ZlE0aDFiUzRzMXYxeFU2XjRQNFE3U1E2azRpUTZyNHZSN242YFEheFhTJnEhcS9kUSlXJFtRKWIkZVEpaCRrUSxRJnJRLVQoX1EtYShrUS1mKG5RLlgpY1EvUSpdUzBVK2oyc1MxZi1VLVZTMW8tYi1sUTFyLWVRMXQtZ1EzVi9SVzN5MFYwXTBiNWZRNGcxYlE0azFnUzRvMXAxeFE0dDF3UTVyM1dXNlszfTRQNFE3U1M2ajRoNGlTNm40cDppUTZwNHNRNn01YVE3WzVzUzdsNl42YFE3cjZrUzdzNm86bVE3dTZyUTd8N09ROFY3XVE4XzduUzhhN3Q6blE4ZDd9UThzOGVROVE4dFE5WDlSUTp1OnBRO1Q6elE7VTp7UTtWO2hSO1s7bSRyV09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZfJmYmcCZ9J1IoUilWKV4qaypvKnQrVCt4LFAsYixoLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sMFQwajB0MmkzUjNmM2gzaTN4NW81fTZXN2o4XThvUyF4biFrIWo6byNdI2smVyd3K1grWyxtL3sxWDJxM3E2ezleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YVI6dTtgJHJYT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNiI2UkXSRuJVslXyVgJWMlZSVmJWclaSVtJXgleiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG9RJFtiIVkkZW0haiRoJGkkaiZVJmomayZsKGspZilnK10rait8K30tZC5bMFEwVzBdMGgxdTN7NFE2WjdrOF5TJGtuIWtRKWMkZlEqXSVUVy9SKl4qXypgKmFVM1cvUy9UL1VRNWEyc1M1czNYM1lVN081YjVjNWZRN101dFU3fTdQN1E3U1M4ZThPOFBTOHQ4ZjhnUTlSOHUhajpwI10jayZXJ3crWCtbLG0vezFYMnEzcTZ7OV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUTp6O19SOns7YCRmXU9TVGprfSFTIVchbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYyVlJWYlZyVpJW0leiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG9ZIWhSVSFdIWAleHYkd3JzIXIhdSRaJHUmYCZ0JncpeCl5KXoqbStZK2gsUyxVL28wbFEqaiVgIWg6cSNdI2sndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FSOnQmV1MmWyFiJHZSME8rYyRwW09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYyVlJWYlZyVpJW0leCV6JlMmXyZmJnAmfSdSKFIpVileKmsqbyp0K1QreCxQLGIsaC11LXouUy5dLnwvXy9gL2EvYy9nL2ovbDBUMGowdDJpM1IzZjNoM2kzeDVvNX02VzdqOF04byFqJ2UjXSNrJlcndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FSKmklYCRyb09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZfJmYmcCZ9J1IoUilWKV4qaypvKnQrVCt4LFAsYixoLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sMFQwajB0MmkzUjNmM2gzaTN4NW81fTZXN2o4XThvUSdVIXshazpyI10jayZXJ3crWCtbLG0vezFYMnEzcTZ7OV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthIWgjVlohXyRhJXclfSZ5J1EnXydgJ2EnYidnJ2spcCtSK2csTyxeLGQsdy14MGkwczFUMk8yWzN2NFc0WzZWN2c4WjhtOHk5XyFSOWsnZCd1K14saS92L3kwdzFQMVExUjFTMVcxXTNzNF00YjRjNWA2UzZiNmY2Zzd6OnwhZCNYWiFfJGEldyV9JnknUSdhJ2InZydrKXArUitnLE8sXixkLHcteDBpMHMxVDJPMlszdjRXNFs2VjdnOFo4bTh5OV99OW0nZCd1K14saS92L3kwdzFSMVMxVzFdM3M0XTRiNGM1YDZTNmI2ZjZnN3o6fCFgI11aIV8kYSV3JX0meSdRJ2cnaylwK1IrZyxPLF4sZCx3LXgwaTBzMVQyTzJbM3Y0VzRbNlY3ZzhaOG04eTlfUTFhLVB4O2EnZCd1K14saS92L3kwdzFXMV0zczRdNGI0YzVgNlM2YjZmNmc3ejp8UTtpO3BRO2o7cVI7aztyJl5jT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNdI2IjZSNrJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZXJl8mZiZwJn0nUid3KFIpVileKmsqbyp0K1QrWCtbK3gsUCxiLGgsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FTI2xgI21SMVksbCZlX09SU1RVYGprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2sjbSRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLGwsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FTI2deI25UJ24jaSdyVCNoXiNuVCdwI2knciZlYE9SU1RVYGprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2sjbSRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLGwsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FUI2xgI21RI29gUid5I20kcmJPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI2IjZSRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmXyZmJnAmfSdSKFIpVileKmsqbyp0K1QreCxQLGIsaC11LXouUy5dLnwvXy9gL2EvYy9nL2ovbDBUMGowdDJpM1IzZjNoM2kzeDVvNX02VzdqOF04byFrO18jXSNrJlcndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2EjUmRPU1VqfSFTIVchbiF8I2skXSVbJV8lYCVjJWUlZiVnJWklbSZTJmYndyleKmsqbyp0K3gsbS11LlMufC9fL2AvYS9jL2cvai9sMVgyaTNSM2YzaDNpNW81fXgje2EheSRUJFUkWShXKFkoYih3KHgsXy1ZLXcxYTF5Nmk7XjtpO2o7ayNbJnwhdyNkI3YjeSZnJ30oWihoKV0pXylhKk8qUit5LVotXS5SLlQucC5zLnsufTFrMXMyUTJUMlgyajNRM1M0bDR1NH01azVwNno3VzhUOXc5ejl9OlU6WDpbOmE6ZDpqO2w7bjt0O3U7dlEpUyRXUSx4KFNkMVY5cjl5OXw6UDpXOlo6XjpjOmY6bGU4cTlkOXg5ezpPOlY6WTpdOmI6ZTpreCN3YSF5JFQkVSRZKFcoWShiKHcoeCxfLVktdzFhMXk2aTteO2k7ajtrUShkI3hTKG4jeihxUSlUJFhRLWcobyNbOnchdyNkI3YjeSZnJ30oWihoKV0pXylhKk8qUit5LVotXS5SLlQucC5zLnsufTFrMXMyUTJUMlgyajNRM1M0bDR1NH01azVwNno3VzhUOXc5ejl9OlU6WDpbOmE6ZDpqO2w7bjt0O3U7dmQ6eDlkOXg5ezpPOlY6WTpdOmI6ZTprZDp5OXI5eTl8OlA6VzpaOl46YzpmOmxROn07YlE7TztjUTtQO2RRO1E7ZVE7UjtmUjtTO2d4I3thIXkkVCRVJFkoVyhZKGIodyh4LF8tWS13MWExeTZpO147aTtqO2sjWyZ8IXcjZCN2I3kmZyd9KFooaCldKV8pYSpPKlIreS1aLV0uUi5ULnAucy57Ln0xazFzMlEyVDJYMmozUTNTNGw0dTR9NWs1cDZ6N1c4VDl3OXo5fTpVOlg6WzphOmQ6ajtsO247dDt1O3ZkMVY5cjl5OXw6UDpXOlo6XjpjOmY6bGU4cTlkOXg5ezpPOlY6WTpdOmI6ZTprbGZPU2p9IW4kXSVjJWYlZyVpKm8qdC9nL2pRKGcjeVEqfSVwUStPJXJSMWotWiVPI3xhIXcheSNkI3YjeSRUJFUkWSZnJ30oVyhZKFooYihoKHcoeCldKV8pYSpPKlIreSxfLVktWi1dLXcuUi5ULnAucy57Ln0xYTFrMXMxeTJRMlQyWDJqM1EzUzRsNHU0fTVrNXA2aTZ6N1c4VDlkOXI5dzl4OXk5ejl7OXw5fTpPOlA6VTpWOlc6WDpZOlo6WzpdOl46YTpiOmM6ZDplOmY6ajprOmw7XjtpO2o7aztsO247dDt1O3ZRKlEkfVEucipTUTJtLnFSNV0yblQocCN6KHFTKHAjeihxVDJ1LnkydlEpYiRlUS1mKG5RLlgpY1EvUSpdUTNWL1JRNXIzV1E2fTVhUTdbNXNRN3w3T1E4VjddUThkN31ROHM4ZVE5UTh0UjlYOVJwKFcjdCdPKVUtWC1vLXAwcTFoMX00ZjR3N3E6djtXO1g7WSFuOlUmeidpKF4oZit2LFssdC1QLV4tfC5QLm8ucTBlMHAxaTFtMlcybDJuM080WTRaNG00cTR5NU81WjVuNm02cTdZOGA7WjtdO3A7cTtyWzpWOHA5TzlWOVk5WjldXTpXMVU0YTZjN283cDh6cihZI3QnTylVLH0tWC1vLXAwcTFoMX00ZjR3N3E6djtXO1g7WSFwOlgmeidpKF4oZit2LFssdC1QLV4tfC5QLm8ucTBlMG4wcDFpMW0yVzJsMm4zTzRZNFo0bTRxNHk1TzVaNW42bTZxN1k4YDtaO107cDtxO3JeOlk4cDlPOVQ5VjlZOVo5XV86WjFVNGE2YzZkN283cDh6cGVPU2p5fSFuJF0lWSVjJWYlZyVpKm8qdC9nL2pRJVZ4UiprJWBwZU9Tanl9IW4kXSVZJWMlZiVnJWkqbyp0L2cvalIlVnhRKlUlT1Iubil9cWVPU2p5fSFuJF0lWSVjJWYlZyVpKm8qdC9nL2pRLnoqWlMzUC9PL1BXNWoyfDJ9M08zVFU3VjVsNW01blU4UjdVN1g3WVE4aDhTUjh2OGlRJV55UiplJVlSM14vWFI3XzV1UyRtcCRyUi5kKW5RJWN6UipvJWRSKnUlalQvaCp0L2pSKnkla1EqeCVrUi9xKnlRak9RIW5TVCRgaiFuUShQI3NSLHUoUFEhWVFSJXUhWVEhXlJVJXshXiV8K1VRJXwhX1IrVSV9USthJlhSL30rYVEsYCdPUjByLGBRLGMnUVMwdSxjMHZSMHYsZFErbSZkUjBYK21TIWVSJHVVJmEhZSZiK1ZRJmIhZlIrViZPUStkJltSMFArZFEmdSFzUSxSJnNVLFYmdSxSMG1SMG0sV1EnciNpUixuJ3JRI21gUid4I21RI2NaVSdoI2MrUTlxUStROV9SOXEndVEtUyhfVzFkLVMxZTRqNmxVMWUtVC1VLVZTNGoxZjFnUjZsNGskayhVI3QmeidPJ2koXihmKVApUSlVK3YsWSxaLFssdCx9LU8tUC1YLV4tby1wLXwuUC5vLnEwZTBuMG8wcDBxMVUxaDFpMW0xfTJXMmwybjNPNFk0WjRfNGA0YTRmNG00cTR3NHk1TzVaNW42YzZkNmU2bTZxN1k3bzdwN3E4YDhwOHo4fDh9OU85VDlVOVY5WTlaOV06djtXO1g7WTtaO107cDtxO3JRLVsoZlUxbC1bMW40blExbi1eUjRuMW1RKHEjelItaShxUSh6JE9SLXIoelEyUi18UjR6MlJRKXskeFIubSl7UTJwLnRTNV8ycDZ8UjZ8NWBRKlclUFIudypXUTJ2LnlSNWQydlEvVypiUzNbL1c1dlI1djNeUS5fKWpXMmEuXzJjNVQ2d1EyYy5iUTVUMmJSNnc1VVEpbyRtUi5lKW9RL2oqdFIzbC9qV2lPU2ohblElaH1RKVgkXVEqbiVjUSpwJWZRKnElZ1EqcyVpUS9lKm9TL2gqdC9qUjNrL2dRJF9nUSVsIVJRJW8hVFElcSFVUSVzIVZRKXYkc1EpfCR5USpkJV5RKnslblEtaChwUy9aKmUqaFEvcip6US9zKn1RL3QrT1MwUytqMnNRMmYuaFEyay5vUTNVL1FRM2AvXVEzai9mWTN3MFUwVjBdMGI1ZlE1WDJoUTVbMmxRNXEzVlE1dzNfWzZVM3YzeTN9NFA0UTdTUTZ4NVZRN1o1clE3YDV4VzdmNlY2WzZeNmBRN3g2eVE3ezZ9UThVN1tVOFg3ZzdsN25ROGM3fFE4ajhWUzhrOFo4X1E4cjhkUTh3OG1ROVA4c1E5Uzh5UTlXOVFSOVs5WFEkZ21RJmkhalUpZSRoJGkkalErWiZVVSt7JmomayZsUS1gKGtTLlopZilnUS96K11RMFIralMwZyt8K31RMXEtZFEyWi5bUTN0MFFTM3owVzBdUTRWMGhRNHIxdVM2WTN7NFFRN2k2WlE4WzdrUjhuOF5TI3VhO15SKHskUFUkT2EkUDteUi1xKHlRI3RhUyZ6IXcpYVEnTyF5USdpI2RRKF4jdlEoZiN5USlQJFRRKVEkVVEpVSRZUSt2JmdRLFk5d1EsWjl6USxbOX1RLHQnfVEsfShXUS1PKFlRLVAoWlEtWChiUS1eKGhRLW8od1EtcCh4ZC18KV0uUi57MlQzUTR9NWs2ejdXOFRRLlApX1EubypPUS5xKlJRMGUreVEwbjpVUTBvOlhRMHA6W1EwcSxfUTFVOXJRMWgtWVExaS1aUTFtLV1RMX0td1EyVy5UUTJsLnBRMm4uc1EzTy59UTRZOmFRNFo6ZFE0Xzl5UTRgOXxRNGE6UFE0ZjFhUTRtMWtRNHExc1E0dzF5UTR5MlFRNU8yWFE1WjJqUTVuM1NRNmM6XlE2ZDpXUTZlOlpRNm00bFE2cTR1UTdZNXBRN286Y1E3cDpmUTdxNmlROGA6alE4cDlkUTh6OmxROHw5eFE4fTl7UTlPOk9ROVQ6VlE5VTpZUTlWOl1ROVk6YlE5WjplUTldOmtROnY7XlE7VztpUTtYO2pRO1k7a1E7WjtsUTtdO25RO3A7dFE7cTt1UjtyO3ZsZ09Tan0hbiRdJWMlZiVnJWkqbyp0L2cvalMhcFUlZVElbiFTUSV0IVdRJ1YhfFEndiNrUypoJVslX1EqbCVgUSp6JW1RK1cmU1ErdSZmUSxyJ3dRLk8pXlEvYiprUTBkK3hRMVssbVExey11UTJWLlNRMn0ufFEzYi9fUTNjL2BRM2UvYVEzZy9jUTNuL2xRNGQxWFE1WTJpUTVtM1JRNXwzZlE2TzNoUTZQM2lRN1g1b1I3YjV9IXZaT1NVan0hUyFuIXwkXSVbJV8lYCVjJWUlZiVnJWklbSZTJmYpXiprKm8qdCt4LXUuUy58L18vYC9hL2MvZy9qL2wyaTNSM2YzaDNpNW81fVEhX1JRIW9UUSRha1MldyFdJXpRJX0hYFEmeSF2USdRIXpRJ1cjUFEnWCNRUSdZI1JRJ1ojU1EnWyNUUSddI1VRJ14jVlEnXyNXUSdgI1hRJ2EjWVEnYiNaUSdkI11RJ2cjYlEnayNlVyd1I2sndyxtMVhRKXAkblMrUiV4K1RTK14mVy97UStnJl9RLE8mcFEsXiZ9USxkJ1JRLGc5XlEsaTlgUSx3KFJRLXgpVlEvditYUS95K1tRMGksUFEwcyxiUTB3OWNRMHg5ZVEweTlmUTB6OWdRMHs5aFEwfDlpUTB9OWpRMU85a1ExUDlsUTFROW1RMVI5blExUzlvUTFULGhRMVc5c1ExXTlwUTJPLXpRMlsuXVEzczpRUTN2MFRRNFcwalE0WzB0UTRdOlJRNGI6VFE0YzpfUTVgMnFRNlMzcVE2VjN4UTZiOmBRNmY6Z1E2ZzpoUTdnNldRN3o2e1E4WjdqUThtOF1ROHk4b1E5XyFXUjp8O2FSIWFSUiZZIWJTJlUhYitgUytdJlYmXlIwUStmUidQIXlSJ1MhelQhdFUkWlMhc1UkWlUkeHJzKm1TJnMhciF1USxUJnRRLFcmd1EubCl6UzBrLFMsVVI0WDBsYCFkUiFdIWAkdSV4JmApeCtoaCFxVXJzIXIhdSRaJnQmdyl6LFMsVTBsUS9kKm1RL3crWVEzcC9vVDpzJlcpeVQhZ1IkdVMhZlIkdVMleSFdJmBTJk8hYCl4UytTJXgraFQrXyZXKXlUJl0hYiR2USNpXlIneyNuVCdxI2knclIxWixsVChhI3YoY1IoaSN5US19KV1RMlUuUlEyfC57UTR7MlRRNWwzUVE2dDR9UTdVNWtRN3k2elE4UzdXUjhpOFRsaE9Tan0hbiRdJWMlZiVnJWkqbyp0L2cvalElXXlSKmQlWVYkeXJzKm1SLnUqVFIqYyVXUSRxcFIpdSRyUilrJGxUJWF6JWRUJWJ6JWRUL2kqdC9qXCIsbm9kZU5hbWVzOlwiXFx1MjZBMCBleHRlbmRzIEFyaXRoT3AgQXJpdGhPcCBJbnRlcnBvbGF0aW9uU3RhcnQgTGluZUNvbW1lbnQgQmxvY2tDb21tZW50IFNjcmlwdCBFeHBvcnREZWNsYXJhdGlvbiBleHBvcnQgU3RhciBhcyBWYXJpYWJsZU5hbWUgU3RyaW5nIGZyb20gOyBkZWZhdWx0IEZ1bmN0aW9uRGVjbGFyYXRpb24gYXN5bmMgZnVuY3Rpb24gVmFyaWFibGVEZWZpbml0aW9uIFR5cGVQYXJhbUxpc3QgVHlwZURlZmluaXRpb24gVGhpc1R5cGUgdGhpcyBMaXRlcmFsVHlwZSBBcml0aE9wIE51bWJlciBCb29sZWFuTGl0ZXJhbCBUZW1wbGF0ZVR5cGUgSW50ZXJwb2xhdGlvbkVuZCBJbnRlcnBvbGF0aW9uIFZvaWRUeXBlIHZvaWQgVHlwZW9mVHlwZSB0eXBlb2YgTWVtYmVyRXhwcmVzc2lvbiAuID8uIFByb3BlcnR5TmFtZSBbIFRlbXBsYXRlU3RyaW5nIEludGVycG9sYXRpb24gbnVsbCBzdXBlciBSZWdFeHAgXSBBcnJheUV4cHJlc3Npb24gU3ByZWFkICwgfSB7IE9iamVjdEV4cHJlc3Npb24gUHJvcGVydHkgYXN5bmMgZ2V0IHNldCBQcm9wZXJ0eURlZmluaXRpb24gQmxvY2sgOiBOZXdFeHByZXNzaW9uIG5ldyBUeXBlQXJnTGlzdCBDb21wYXJlT3AgPCApICggQXJnTGlzdCBVbmFyeUV4cHJlc3Npb24gYXdhaXQgeWllbGQgZGVsZXRlIExvZ2ljT3AgQml0T3AgUGFyZW50aGVzaXplZEV4cHJlc3Npb24gQ2xhc3NFeHByZXNzaW9uIGNsYXNzIGV4dGVuZHMgQ2xhc3NCb2R5IE1ldGhvZERlY2xhcmF0aW9uIFByaXZhY3kgc3RhdGljIGFic3RyYWN0IG92ZXJyaWRlIFByaXZhdGVQcm9wZXJ0eURlZmluaXRpb24gUHJvcGVydHlEZWNsYXJhdGlvbiByZWFkb25seSBPcHRpb25hbCBUeXBlQW5ub3RhdGlvbiBFcXVhbHMgU3RhdGljQmxvY2sgRnVuY3Rpb25FeHByZXNzaW9uIEFycm93RnVuY3Rpb24gUGFyYW1MaXN0IFBhcmFtTGlzdCBBcnJheVBhdHRlcm4gT2JqZWN0UGF0dGVybiBQYXR0ZXJuUHJvcGVydHkgUHJpdmFjeSByZWFkb25seSBBcnJvdyBNZW1iZXJFeHByZXNzaW9uIFByaXZhdGVQcm9wZXJ0eU5hbWUgQmluYXJ5RXhwcmVzc2lvbiBBcml0aE9wIEFyaXRoT3AgQXJpdGhPcCBBcml0aE9wIEJpdE9wIENvbXBhcmVPcCBpbnN0YW5jZW9mIGluIGNvbnN0IENvbXBhcmVPcCBCaXRPcCBCaXRPcCBCaXRPcCBMb2dpY09wIExvZ2ljT3AgQ29uZGl0aW9uYWxFeHByZXNzaW9uIExvZ2ljT3AgTG9naWNPcCBBc3NpZ25tZW50RXhwcmVzc2lvbiBVcGRhdGVPcCBQb3N0Zml4RXhwcmVzc2lvbiBDYWxsRXhwcmVzc2lvbiBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24gRHluYW1pY0ltcG9ydCBpbXBvcnQgSW1wb3J0TWV0YSBKU1hFbGVtZW50IEpTWFNlbGZDbG9zZUVuZFRhZyBKU1hTdGFydFRhZyBKU1hTZWxmQ2xvc2luZ1RhZyBKU1hJZGVudGlmaWVyIEpTWE5hbWVzcGFjZWROYW1lIEpTWE1lbWJlckV4cHJlc3Npb24gSlNYU3ByZWFkQXR0cmlidXRlIEpTWEF0dHJpYnV0ZSBKU1hBdHRyaWJ1dGVWYWx1ZSBKU1hFc2NhcGUgSlNYRW5kVGFnIEpTWE9wZW5UYWcgSlNYRnJhZ21lbnRUYWcgSlNYVGV4dCBKU1hFc2NhcGUgSlNYU3RhcnRDbG9zZVRhZyBKU1hDbG9zZVRhZyBQcmVmaXhDYXN0IEFycm93RnVuY3Rpb24gVHlwZVBhcmFtTGlzdCBTZXF1ZW5jZUV4cHJlc3Npb24gS2V5b2ZUeXBlIGtleW9mIFVuaXF1ZVR5cGUgdW5pcXVlIEltcG9ydFR5cGUgSW5mZXJyZWRUeXBlIGluZmVyIFR5cGVOYW1lIFBhcmVudGhlc2l6ZWRUeXBlIEZ1bmN0aW9uU2lnbmF0dXJlIFBhcmFtTGlzdCBOZXdTaWduYXR1cmUgSW5kZXhlZFR5cGUgVHVwbGVUeXBlIExhYmVsIEFycmF5VHlwZSBSZWFkb25seVR5cGUgT2JqZWN0VHlwZSBNZXRob2RUeXBlIFByb3BlcnR5VHlwZSBJbmRleFNpZ25hdHVyZSBDYWxsU2lnbmF0dXJlIFR5cGVQcmVkaWNhdGUgaXMgTmV3U2lnbmF0dXJlIG5ldyBVbmlvblR5cGUgTG9naWNPcCBJbnRlcnNlY3Rpb25UeXBlIExvZ2ljT3AgQ29uZGl0aW9uYWxUeXBlIFBhcmFtZXRlcml6ZWRUeXBlIENsYXNzRGVjbGFyYXRpb24gYWJzdHJhY3QgaW1wbGVtZW50cyB0eXBlIFZhcmlhYmxlRGVjbGFyYXRpb24gbGV0IHZhciBUeXBlQWxpYXNEZWNsYXJhdGlvbiBJbnRlcmZhY2VEZWNsYXJhdGlvbiBpbnRlcmZhY2UgRW51bURlY2xhcmF0aW9uIGVudW0gRW51bUJvZHkgTmFtZXNwYWNlRGVjbGFyYXRpb24gbmFtZXNwYWNlIG1vZHVsZSBBbWJpZW50RGVjbGFyYXRpb24gZGVjbGFyZSBHbG9iYWxEZWNsYXJhdGlvbiBnbG9iYWwgQ2xhc3NEZWNsYXJhdGlvbiBDbGFzc0JvZHkgTWV0aG9kRGVjbGFyYXRpb24gQW1iaWVudEZ1bmN0aW9uRGVjbGFyYXRpb24gRXhwb3J0R3JvdXAgVmFyaWFibGVOYW1lIFZhcmlhYmxlTmFtZSBJbXBvcnREZWNsYXJhdGlvbiBJbXBvcnRHcm91cCBGb3JTdGF0ZW1lbnQgZm9yIEZvclNwZWMgRm9ySW5TcGVjIEZvck9mU3BlYyBvZiBXaGlsZVN0YXRlbWVudCB3aGlsZSBXaXRoU3RhdGVtZW50IHdpdGggRG9TdGF0ZW1lbnQgZG8gSWZTdGF0ZW1lbnQgaWYgZWxzZSBTd2l0Y2hTdGF0ZW1lbnQgc3dpdGNoIFN3aXRjaEJvZHkgQ2FzZUxhYmVsIGNhc2UgRGVmYXVsdExhYmVsIFRyeVN0YXRlbWVudCB0cnkgQ2F0Y2hDbGF1c2UgY2F0Y2ggRmluYWxseUNsYXVzZSBmaW5hbGx5IFJldHVyblN0YXRlbWVudCByZXR1cm4gVGhyb3dTdGF0ZW1lbnQgdGhyb3cgQnJlYWtTdGF0ZW1lbnQgYnJlYWsgQ29udGludWVTdGF0ZW1lbnQgY29udGludWUgRGVidWdnZXJTdGF0ZW1lbnQgZGVidWdnZXIgTGFiZWxlZFN0YXRlbWVudCBFeHByZXNzaW9uU3RhdGVtZW50XCIsbWF4VGVybTozMzIsY29udGV4dDpoLG5vZGVQcm9wczpbW1wiY2xvc2VkQnlcIiw0LFwiSW50ZXJwb2xhdGlvbkVuZFwiLDQwLFwiXVwiLDUxLFwifVwiLDY2LFwiKVwiLDEzMixcIkpTWFNlbGZDbG9zZUVuZFRhZyBKU1hFbmRUYWdcIiwxNDYsXCJKU1hFbmRUYWdcIl0sW1wiZ3JvdXBcIiwtMjYsOCwxNSwxNyw1OCwxODQsMTg4LDE5MSwxOTIsMTk0LDE5NywyMDAsMjExLDIxMywyMTksMjIxLDIyMywyMjUsMjI4LDIzNCwyNDAsMjQyLDI0NCwyNDYsMjQ4LDI1MCwyNTEsXCJTdGF0ZW1lbnRcIiwtMzAsMTIsMTMsMjQsMjcsMjgsNDEsNDMsNDQsNDUsNDcsNTIsNjAsNjgsNzQsNzUsOTEsOTIsMTAxLDEwMywxMTksMTIyLDEyNCwxMjUsMTI2LDEyNywxMjksMTMwLDE0OCwxNDksMTUxLFwiRXhwcmVzc2lvblwiLC0yMiwyMywyNSwyOSwzMiwzNCwxNTIsMTU0LDE1NiwxNTcsMTU5LDE2MCwxNjEsMTYzLDE2NCwxNjUsMTY3LDE2OCwxNjksMTc4LDE4MCwxODIsMTgzLFwiVHlwZVwiLC0zLDc5LDg1LDkwLFwiQ2xhc3NJdGVtXCJdLFtcIm9wZW5lZEJ5XCIsMzAsXCJJbnRlcnBvbGF0aW9uU3RhcnRcIiw0NixcIltcIiw1MCxcIntcIiw2NSxcIihcIiwxMzEsXCJKU1hTdGFydFRhZ1wiLDE0MSxcIkpTWFN0YXJ0VGFnIEpTWFN0YXJ0Q2xvc2VUYWdcIl1dLHByb3BTb3VyY2VzOlt2XSxza2lwcGVkTm9kZXM6WzAsNSw2XSxyZXBlYXROb2RlQ291bnQ6MjgsdG9rZW5EYXRhOlwiIUN9flIhYE9YJVRYWSVjWVonUlpbJWNbXSVUXV4nUl5wJVRwcSVjcXInY3JzKGtzdDBodHUyYHV2NHB2dzVld3g2Y3h5PHl5ej1aens9a3t8Pmt8fT9PfSFPPmshTyFQP2AhUCFRQ2whUSFSITBbIVIhWyExcSFbIV0hN3MhXSFeIThWIV4hXyE4ZyFfIWAhOWQhYCFhITpbIWEhYiE8UiFiIWMlVCFjIX0yYCF9I08hPWQjTyNQJVQjUCNRIT10I1EjUiE+VSNSI1MyYCNTI1QhPmkjVCNvMmAjbyNwIT55I3AjcSE/TyNxI3IhP2YjciNzIT94I3MkZiVUJGYkZyVjJGcjQlkyYCNCWSNCWiFAWSNCWiRJUzJgJElTJElfIUBZJElfJEl8MmAkSXwkSX0hQnEkSX0kSk8hQnEkSk8kSlQyYCRKVCRKVSFAWSRKVSRLVjJgJEtWJEtXIUBZJEtXJkZVMmAmRlUmRlYhQFkmRlY/SFQyYD9IVD9IVSFAWT9IVX4yYFclWVIkVVdPIV4lVCFfI28lVCNwfiVUN1olamckVVcnWTdST1glVFhZJWNZWiVUWlslY1twJVRwcSVjcSFeJVQhXyNvJVQjcCRmJVQkZiRnJWMkZyNCWSVUI0JZI0JaJWMjQlokSVMlVCRJUyRJXyVjJElfJEpUJVQkSlQkSlUlYyRKVSRLViVUJEtWJEtXJWMkS1cmRlUlVCZGVSZGViVjJkZWP0hUJVQ/SFQ/SFUlYz9IVX4lVDdaJ1lSJFVXJ1o3Uk8hXiVUIV8jbyVUI3B+JVQkVCdqUyRVVyFqI3tPIV4lVCFfIWAndiFgI28lVCNwfiVUJE8nfVMjZSN2JFVXTyFeJVQhXyFgKFohYCNvJVQjcH4lVCRPKGJSI2UjdiRVV08hXiVUIV8jbyVUI3B+JVQpWChyWiRVV10jZU9ZKGtZWillWnIoa3JzKnJzIV4oayFeIV8rVSFfI08oayNPI1AtYiNQI28oayNvI3ArVSNwfihrJnIpalYkVVdPcillcnMqUHMhXillIV4hXyphIV8jbyllI28jcCphI3B+KWUmcipXUiRQJmokVVdPIV4lVCFfI28lVCNwfiVUJmoqZFJPciphcnMqbXN+KmEmaipyTyRQJmopWCp7UiRQJmokVVddI2VPIV4lVCFfI28lVCNwfiVUKVArWlZdI2VPWStVWVoqYVpyK1VycytwcyNPK1UjTyNQK3cjUH4rVSlQK3dPJFAmal0jZSlQK3pST3IrVXJzLFRzfitVKVAsW1UkUCZqXSNlT1ksblpyLG5ycy1WcyNPLG4jTyNQLVsjUH4sbiNlLHNVXSNlT1ksblpyLG5ycy1WcyNPLG4jTyNQLVsjUH4sbiNlLVtPXSNlI2UtX1BPfixuKVgtZ1YkVVdPcihrcnMtfHMhXihrIV4hXytVIV8jbyhrI28jcCtVI3B+KGspWC5WWiRQJmokVVddI2VPWS54WVolVFpyLnhycy9ycyFeLnghXiFfLG4hXyNPLngjTyNQMFMjUCNvLngjbyNwLG4jcH4ueCNtL1BaJFVXXSNlT1kueFlaJVRaci54cnMvcnMhXi54IV4hXyxuIV8jTy54I08jUDBTI1Ajby54I28jcCxuI3B+LngjbS95UiRVV10jZU8hXiVUIV8jbyVUI3B+JVQjbTBYVCRVV08hXi54IV4hXyxuIV8jby54I28jcCxuI3B+LngzXTBtWiRVV090JVR0dTFgdSFeJVQhXyFjJVQhYyF9MWAhfSNSJVQjUiNTMWAjUyNUJVQjVCNvMWAjcCRnJVQkZ34xYDNdMWddJFVXJ28zVE90JVR0dTFgdSFRJVQhUSFbMWAhWyFeJVQhXyFjJVQhYyF9MWAhfSNSJVQjUiNTMWAjUyNUJVQjVCNvMWAjcCRnJVQkZ34xYDdaMmtfJFVXI3pTJ10keSdnM1NPdCVUdHUyYHV9JVR9IU8zaiFPIVElVCFRIVsyYCFbIV4lVCFfIWMlVCFjIX0yYCF9I1IlVCNSI1MyYCNTI1QlVCNUI28yYCNwJGclVCRnfjJgWzNxXyRVVyN6U090JVR0dTNqdX0lVH0hTzNqIU8hUSVUIVEhWzNqIVshXiVUIV8hYyVUIWMhfTNqIX0jUiVUI1IjUzNqI1MjVCVUI1QjbzNqI3AkZyVUJGd+M2okTzR3UyNeI3YkVVdPIV4lVCFfIWA1VCFgI28lVCNwfiVUJE81W1IkVVcjbyN2TyFeJVQhXyNvJVQjcH4lVDViNWxVJ3g1WSRVV092JVR2dzZPdyFeJVQhXyFgNVQhYCNvJVQjcH4lVCRPNlZTJFVXI2kjdk8hXiVUIV8hYDVUIWAjbyVUI3B+JVQpWDZqWiRVV10jZU9ZNmNZWjddWnc2Y3d4KnJ4IV42YyFeIV84VCFfI082YyNPI1A6VCNQI282YyNvI3A4VCNwfjZjJnI3YlYkVVdPdzddd3gqUHghXjddIV4hXzd3IV8jbzddI28jcDd3I3B+N10majd6Uk93N3d3eCpteH43dylQOFlWXSNlT1k4VFlaN3dadzhUd3grcHgjTzhUI08jUDhvI1B+OFQpUDhyUk93OFR3eDh7eH44VClQOVNVJFAmal0jZU9ZOWZadzlmd3gtVngjTzlmI08jUDl9I1B+OWYjZTlrVV0jZU9ZOWZadzlmd3gtVngjTzlmI08jUDl9I1B+OWYjZTpRUE9+OWYpWDpZViRVV093NmN3eDpveCFeNmMhXiFfOFQhXyNvNmMjbyNwOFQjcH42YylYOnhaJFAmaiRVV10jZU9ZO2tZWiVUWnc7a3d4L3J4IV47ayFeIV85ZiFfI087ayNPI1A8ZSNQI287ayNvI3A5ZiNwfjtrI207clokVVddI2VPWTtrWVolVFp3O2t3eC9yeCFeO2shXiFfOWYhXyNPO2sjTyNQPGUjUCNvO2sjbyNwOWYjcH47ayNtPGpUJFVXTyFeO2shXiFfOWYhXyNvO2sjbyNwOWYjcH47ayZpPVFSIWQmYSRVV08hXiVUIV8jbyVUI3B+JVRrPWJSIWNjJFVXTyFeJVQhXyNvJVQjcH4lVDdWPXRVJ140ViNfI3YkVVdPeiVUens+V3shXiVUIV8hYDVUIWAjbyVUI3B+JVQkTz5fUyNbI3YkVVdPIV4lVCFfIWA1VCFgI28lVCNwfiVUJXc+clNqJW8kVVdPIV4lVCFfIWA1VCFgI28lVCNwfiVUJmk/VlIhUiZhJFVXTyFeJVQhXyNvJVQjcH4lVDdaP2dWdTVeJFVXTyFPJVQhTyFQP3whUCFRJVQhUSFbQHIhWyFeJVQhXyNvJVQjcH4lVCF7QFJUJFVXTyFPJVQhTyFQQGIhUCFeJVQhXyNvJVQjcH4lVCF7QGlSIVEhcyRVV08hXiVUIV8jbyVUI3B+JVQhe0B5WiRVV2shc08hUSVUIVEhW0ByIVshXiVUIV8hZyVUIWchaEFsIWgjUiVUI1IjU0ByI1MjWCVUI1gjWUFsI1kjbyVUI3B+JVQhe0FxWiRVV097JVR7fEJkfH0lVH0hT0JkIU8hUSVUIVEhW0NPIVshXiVUIV8jUiVUI1IjU0NPI1MjbyVUI3B+JVQhe0JpViRVV08hUSVUIVEhW0NPIVshXiVUIV8jUiVUI1IjU0NPI1MjbyVUI3B+JVQhe0NWViRVV2shc08hUSVUIVEhW0NPIVshXiVUIV8jUiVUI1IjU0NPI1MjbyVUI3B+JVQ3WkNzYCRVVyNdI3ZPWUR1WVolVFp6RHV6e0pseyFQRHUhUCFRIS1lIVEhXkR1IV4hX0Z4IV8hYCEuXiFgIWEhL10hYSF9RHUhfSNPSHEjTyNQSlEjUCNvRHUjbyNwRngjcH5EdVhEfFskVVd9UE9ZRHVZWiVUWiFQRHUhUCFRRXIhUSFeRHUhXiFfRnghXyF9RHUhfSNPSHEjTyNQSlEjUCNvRHUjbyNwRngjcH5EdVhFeV8kVVd9UE8hXiVUIV8jWiVUI1ojW0VyI1sjXSVUI10jXkVyI14jYSVUI2EjYkVyI2IjZyVUI2cjaEVyI2gjaSVUI2kjakVyI2ojbSVUI20jbkVyI24jbyVUI3B+JVRQRn1WfVBPWUZ4WiFQRnghUCFRR2QhUSF9RnghfSNPR3sjTyNQSGgjUH5GeFBHaVV9UCNaI1tHZCNdI15HZCNhI2JHZCNnI2hHZCNpI2pHZCNtI25HZFBIT1RPWUd7WiNPR3sjTyNQSF8jUCNRRngjUX5He1BIYlFPWUd7Wn5He1BIa1FPWUZ4Wn5GeFhIdlkkVVdPWUhxWVolVFohXkhxIV4hX0d7IV8jT0hxI08jUElmI1AjUUR1I1Ejb0hxI28jcEd7I3B+SHFYSWtWJFVXT1lIcVlaJVRaIV5IcSFeIV9HeyFfI29IcSNvI3BHeyNwfkhxWEpWViRVV09ZRHVZWiVUWiFeRHUhXiFfRnghXyNvRHUjbyNwRngjcH5EdTdaSnNeJFVXfVBPWUpsWVpLb1p6Smx6e05ReyFQSmwhUCFRISxSIVEhXkpsIV4hXyEhXSFfIX1KbCF9I08hJ3wjTyNQISthI1Ajb0psI28jcCEhXSNwfkpsN1pLdFYkVVdPektventMWnshXktvIV4hX01dIV8jb0tvI28jcE1dI3B+S283WkxgWCRVV096S296e0xaeyFQS28hUCFRTHshUSFeS28hXiFfTV0hXyNvS28jbyNwTV0jcH5LbzdaTVNSJFVXVTdSTyFeJVQhXyNvJVQjcH4lVDdSTWBST3pNXXp7TWl7fk1dN1JNbFRPek1dentNaXshUE1dIVAhUU17IVF+TV03Uk5RT1U3UjdaTlheJFVXfVBPWUpsWVpLb1p6Smx6e05ReyFQSmwhUCFRISBUIVEhXkpsIV4hXyEhXSFfIX1KbCF9I08hJ3wjTyNQISthI1Ajb0psI28jcCEhXSNwfkpsN1ohIF5fJFVXVTdSfVBPIV4lVCFfI1olVCNaI1tFciNbI10lVCNdI15FciNeI2ElVCNhI2JFciNiI2clVCNnI2hFciNoI2klVCNpI2pFciNqI20lVCNtI25FciNuI28lVCNwfiVUN1IhIWJZfVBPWSEhXVlaTV1aeiEhXXp7ISNReyFQISFdIVAhUSEmeCFRIX0hIV0hfSNPISRgI08jUCEmZiNQfiEhXTdSISNWWX1QT1khIV1ZWk1dWnohIV16eyEjUXshUCEhXSFQIVEhI3UhUSF9ISFdIX0jTyEkYCNPI1AhJmYjUH4hIV03UiEjfFVVN1J9UCNaI1tHZCNdI15HZCNhI2JHZCNnI2hHZCNpI2pHZCNtI25HZDdSISRjV09ZISRgWVpNXVp6ISRgenshJHt7I08hJGAjTyNQISZTI1AjUSEhXSNRfiEkYDdSISVPWU9ZISRgWVpNXVp6ISRgenshJHt7IVAhJGAhUCFRISVuIVEjTyEkYCNPI1AhJlMjUCNRISFdI1F+ISRgN1IhJXNUVTdST1lHe1ojT0d7I08jUEhfI1AjUUZ4I1F+R3s3UiEmVlRPWSEkYFlaTV1aeiEkYHp7ISR7e34hJGA3UiEmaVRPWSEhXVlaTV1aeiEhXXp7ISNRe34hIV03UiEmfV99UE96TV16e01peyNaTV0jWiNbISZ4I1sjXU1dI10jXiEmeCNeI2FNXSNhI2IhJngjYiNnTV0jZyNoISZ4I2gjaU1dI2kjaiEmeCNqI21NXSNtI24hJngjbn5NXTdaIShSWyRVV09ZISd8WVpLb1p6ISd8enshKHd7IV4hJ3whXiFfISRgIV8jTyEnfCNPI1AhKm8jUCNRSmwjUSNvISd8I28jcCEkYCNwfiEnfDdaISh8XiRVV09ZISd8WVpLb1p6ISd8enshKHd7IVAhJ3whUCFRISl4IVEhXiEnfCFeIV8hJGAhXyNPISd8I08jUCEqbyNQI1FKbCNRI28hJ3wjbyNwISRgI3B+ISd8N1ohKlBZJFVXVTdST1lIcVlaJVRaIV5IcSFeIV9HeyFfI09IcSNPI1BJZiNQI1FEdSNRI29IcSNvI3BHeyNwfkhxN1ohKnRYJFVXT1khJ3xZWktvWnohJ3x6eyEod3shXiEnfCFeIV8hJGAhXyNvISd8I28jcCEkYCNwfiEnfDdaIStmWCRVV09ZSmxZWktvWnpKbHp7TlF7IV5KbCFeIV8hIV0hXyNvSmwjbyNwISFdI3B+Smw3WiEsWWMkVVd9UE96S296e0xaeyFeS28hXiFfTV0hXyNaS28jWiNbISxSI1sjXUtvI10jXiEsUiNeI2FLbyNhI2IhLFIjYiNnS28jZyNoISxSI2gjaUtvI2kjaiEsUiNqI21LbyNtI24hLFIjbiNvS28jbyNwTV0jcH5LbzdaIS1sViRVV1Q3Uk9ZIS1lWVolVFohXiEtZSFeIV8hLlIhXyNvIS1lI28jcCEuUiNwfiEtZTdSIS5XUVQ3Uk9ZIS5SWn4hLlIkUCEuZ1skVVcjbyN2fVBPWUR1WVolVFohUER1IVAhUUVyIVEhXkR1IV4hX0Z4IV8hfUR1IX0jT0hxI08jUEpRI1Ajb0R1I28jcEZ4I3B+RHVdIS9mWyN3UyRVV31QT1lEdVlaJVRaIVBEdSFQIVFFciFRIV5EdSFeIV9GeCFfIX1EdSF9I09IcSNPI1BKUSNQI29EdSNvI3BGeCNwfkR1IXshMGNkJFVXayFzTyFPJVQhTyFQQHIhUCFRJVQhUSFbITFxIVshXiVUIV8hZyVUIWchaEFsIWgjUiVUI1IjUyExcSNTI1UlVCNVI1YhM1gjViNYJVQjWCNZQWwjWSNiJVQjYiNjITJ3I2MjZCE0bSNkI2wlVCNsI20hNXsjbSNvJVQjcH4lVCF7ITF4XyRVV2shc08hTyVUIU8hUEByIVAhUSVUIVEhWyExcSFbIV4lVCFfIWclVCFnIWhBbCFoI1IlVCNSI1MhMXEjUyNYJVQjWCNZQWwjWSNiJVQjYiNjITJ3I2MjbyVUI3B+JVQheyEzT1IkVVdrIXNPIV4lVCFfI28lVCNwfiVUIXshM15XJFVXTyFRJVQhUSFSITN2IVIhUyEzdiFTIV4lVCFfI1IlVCNSI1MhM3YjUyNvJVQjcH4lVCF7ITN9WSRVV2shc08hUSVUIVEhUiEzdiFSIVMhM3YhUyFeJVQhXyNSJVQjUiNTITN2I1MjYiVUI2IjYyEydyNjI28lVCNwfiVUIXshNHJWJFVXTyFRJVQhUSFZITVYIVkhXiVUIV8jUiVUI1IjUyE1WCNTI28lVCNwfiVUIXshNWBYJFVXayFzTyFRJVQhUSFZITVYIVkhXiVUIV8jUiVUI1IjUyE1WCNTI2IlVCNiI2MhMncjYyNvJVQjcH4lVCF7ITZRWiRVV08hUSVUIVEhWyE2cyFbIV4lVCFfIWMlVCFjIWkhNnMhaSNSJVQjUiNTITZzI1MjVCVUI1QjWiE2cyNaI28lVCNwfiVUIXshNnpdJFVXayFzTyFRJVQhUSFbITZzIVshXiVUIV8hYyVUIWMhaSE2cyFpI1IlVCNSI1MhNnMjUyNUJVQjVCNaITZzI1ojYiVUI2IjYyEydyNjI28lVCNwfiVUJHUhN3xSIV1WJFVXI20kZk8hXiVUIV8jbyVUI3B+JVQhcSE4XlJfIWkkVVdPIV4lVCFfI28lVCNwfiVUNXchOHJSJ2JkIWEvbiN4JnMnfFAhUCFRITh7IV4hXyE5USFfIWAhOV9XITlRTyRXVyN2ITlWUCNgI3YhXyFgITlZI3YhOV9PI28jdiN2ITlkTyNhI3YkdSE5a1QheyRtJFVXTyFeJVQhXyFgJ3YhYCFhITl6IWEjbyVUI3B+JVQkUCE6UlIjVyN3JFVXTyFeJVQhXyNvJVQjcH4lVCVWITpnVCdhIVIjYSN2JFJTJFVXTyFeJVQhXyFgITp2IWAhYSE7VyFhI28lVCNwfiVUJE8hOn1SI2EjdiRVV08hXiVUIV8jbyVUI3B+JVQkTyE7X1QjYCN2JFVXTyFeJVQhXyFgNVQhYCFhITtuIWEjbyVUI3B+JVQkTyE7dVMjYCN2JFVXTyFeJVQhXyFgNVQhYCNvJVQjcH4lVCphITxZVidwI3skVVdPIU8lVCFPIVAhPG8hUCFeJVQhXyFhJVQhYSFiIT1QIWIjbyVUI3B+JVQqWyE8dlJ2KlMkVVdPIV4lVCFfI28lVCNwfiVUJE8hPVdTJFVXI2ojdk8hXiVUIV8hYDVUIWAjbyVUI3B+JVQ3ViE9a1J4Nn0kVVdPIV4lVCFfI28lVCNwfiVUayE9e1IhT2MkVVdPIV4lVCFfI28lVCNwfiVUJE8hPl1TI2cjdiRVV08hXiVUIV8hYDVUIWAjbyVUI3B+JVQkYSE+cFIkVVcnZiRYTyFeJVQhXyNvJVQjcH4lVH4hP09PIVR+NWIhP1ZUJ3c1WSRVV08hXiVUIV8hYDVUIWAjbyVUI3AjcSE9UCNxfiVUNlghP29SIVM1fW5RJFVXTyFeJVQhXyNvJVQjcH4lVFghQFBSIWtQJFVXTyFeJVQhXyNvJVQjcH4lVDdaIUBnciRVVydZN1IjelMnXSR5J2czU09YJVRYWSVjWVolVFpbJWNbcCVUcHElY3F0JVR0dTJgdX0lVH0hTzNqIU8hUSVUIVEhWzJgIVshXiVUIV8hYyVUIWMhfTJgIX0jUiVUI1IjUzJgI1MjVCVUI1QjbzJgI3AkZiVUJGYkZyVjJGcjQlkyYCNCWSNCWiFAWSNCWiRJUzJgJElTJElfIUBZJElfJEpUMmAkSlQkSlUhQFkkSlUkS1YyYCRLViRLVyFAWSRLVyZGVTJgJkZVJkZWIUBZJkZWP0hUMmA/SFQ/SFUhQFk/SFV+MmA3WiFDT18kVVcnWjdSI3pTJ10keSdnM1NPdCVUdHUyYHV9JVR9IU8zaiFPIVElVCFRIVsyYCFbIV4lVCFfIWMlVCFjIX0yYCF9I1IlVCNSI1MyYCNTI1QlVCNUI28yYCNwJGclVCRnfjJgXCIsdG9rZW5pemVyczpbWSxrLHUsdywwLDEsMiwzLDQsNSw2LDcsOCw5LFVdLHRvcFJ1bGVzOntTY3JpcHQ6WzAsN119LGRpYWxlY3RzOntqc3g6MTIxMDcsdHM6MTIxMDl9LGR5bmFtaWNQcmVjZWRlbmNlczp7MTQ5OjEsMTc2OjF9LHNwZWNpYWxpemVkOlt7dGVybToyODksZ2V0OlE9PkNbUV18fC0xfSx7dGVybToyOTksZ2V0OlE9PlZbUV18fC0xfSx7dGVybTo2MyxnZXQ6UT0+SVtRXXx8LTF9XSx0b2tlblByZWM6MTIxMzB9KTtleHBvcnR7SiBhcyBwYXJzZXJ9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBjb2RlbWlycm9yL2F1dG9jb21wbGV0ZUA2LjMuMCkgZGVubyBwcm9kdWN0aW9uICovXG5pbXBvcnR7QW5ub3RhdGlvbiBhcyBVZSxFZGl0b3JTZWxlY3Rpb24gYXMgZyxjb2RlUG9pbnRBdCBhcyB5LGNvZGVQb2ludFNpemUgYXMgdyxmcm9tQ29kZVBvaW50IGFzIFNlLEZhY2V0IGFzIEVlLGNvbWJpbmVDb25maWcgYXMgRmUsU3RhdGVFZmZlY3QgYXMgdixTdGF0ZUZpZWxkIGFzIG9lLFByZWMgYXMgUGUsVGV4dCBhcyBOZSxNYXBNb2RlIGFzIEcsUmFuZ2VWYWx1ZSBhcyBIZSxSYW5nZVNldCBhcyBmZSxDaGFyQ2F0ZWdvcnkgYXMgSn1mcm9tXCJAY29kZW1pcnJvci9zdGF0ZVwiO2ltcG9ydHtsb2dFeGNlcHRpb24gYXMgWixEaXJlY3Rpb24gYXMgVmUsc2hvd1Rvb2x0aXAgYXMgcWUsRWRpdG9yVmlldyBhcyBrLFZpZXdQbHVnaW4gYXMgS2UsZ2V0VG9vbHRpcCBhcyB6ZSxEZWNvcmF0aW9uIGFzIFYsV2lkZ2V0VHlwZSBhcyBRZSxrZXltYXAgYXMgT2V9ZnJvbVwiQGNvZGVtaXJyb3Ivdmlld1wiO2ltcG9ydHtzeW50YXhUcmVlIGFzIFcsaW5kZW50VW5pdCBhcyBYZX1mcm9tXCJAY29kZW1pcnJvci9sYW5ndWFnZVwiO3ZhciBGPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLnN0YXRlPWUsdGhpcy5wb3M9dCx0aGlzLmV4cGxpY2l0PWksdGhpcy5hYm9ydExpc3RlbmVycz1bXX10b2tlbkJlZm9yZShlKXtsZXQgdD1XKHRoaXMuc3RhdGUpLnJlc29sdmVJbm5lcih0aGlzLnBvcywtMSk7Zm9yKDt0JiZlLmluZGV4T2YodC5uYW1lKTwwOyl0PXQucGFyZW50O3JldHVybiB0P3tmcm9tOnQuZnJvbSx0bzp0aGlzLnBvcyx0ZXh0OnRoaXMuc3RhdGUuc2xpY2VEb2ModC5mcm9tLHRoaXMucG9zKSx0eXBlOnQudHlwZX06bnVsbH1tYXRjaEJlZm9yZShlKXtsZXQgdD10aGlzLnN0YXRlLmRvYy5saW5lQXQodGhpcy5wb3MpLGk9TWF0aC5tYXgodC5mcm9tLHRoaXMucG9zLTI1MCksbz10LnRleHQuc2xpY2UoaS10LmZyb20sdGhpcy5wb3MtdC5mcm9tKSxzPW8uc2VhcmNoKEFlKGUsITEpKTtyZXR1cm4gczwwP251bGw6e2Zyb206aStzLHRvOnRoaXMucG9zLHRleHQ6by5zbGljZShzKX19Z2V0IGFib3J0ZWQoKXtyZXR1cm4gdGhpcy5hYm9ydExpc3RlbmVycz09bnVsbH1hZGRFdmVudExpc3RlbmVyKGUsdCl7ZT09XCJhYm9ydFwiJiZ0aGlzLmFib3J0TGlzdGVuZXJzJiZ0aGlzLmFib3J0TGlzdGVuZXJzLnB1c2godCl9fTtmdW5jdGlvbiB1ZShuKXtsZXQgZT1PYmplY3Qua2V5cyhuKS5qb2luKFwiXCIpLHQ9L1xcdy8udGVzdChlKTtyZXR1cm4gdCYmKGU9ZS5yZXBsYWNlKC9cXHcvZyxcIlwiKSksYFske3Q/XCJcXFxcd1wiOlwiXCJ9JHtlLnJlcGxhY2UoL1teXFx3XFxzXS9nLFwiXFxcXCQmXCIpfV1gfWZ1bmN0aW9uIFllKG4pe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXR7bGFiZWw6b31vZiBuKXtlW29bMF1dPSEwO2ZvcihsZXQgcz0xO3M8by5sZW5ndGg7cysrKXRbb1tzXV09ITB9bGV0IGk9dWUoZSkrdWUodCkrXCIqJFwiO3JldHVybltuZXcgUmVnRXhwKFwiXlwiK2kpLG5ldyBSZWdFeHAoaSldfWZ1bmN0aW9uIEdlKG4pe2xldCBlPW4ubWFwKG89PnR5cGVvZiBvPT1cInN0cmluZ1wiP3tsYWJlbDpvfTpvKSxbdCxpXT1lLmV2ZXJ5KG89Pi9eXFx3KyQvLnRlc3Qoby5sYWJlbCkpP1svXFx3KiQvLC9cXHcrJC9dOlllKGUpO3JldHVybiBvPT57bGV0IHM9by5tYXRjaEJlZm9yZShpKTtyZXR1cm4gc3x8by5leHBsaWNpdD97ZnJvbTpzP3MuZnJvbTpvLnBvcyxvcHRpb25zOmUsdmFsaWRGb3I6dH06bnVsbH19ZnVuY3Rpb24gRnQobixlKXtyZXR1cm4gdD0+e2ZvcihsZXQgaT1XKHQuc3RhdGUpLnJlc29sdmVJbm5lcih0LnBvcywtMSk7aTtpPWkucGFyZW50KWlmKG4uaW5kZXhPZihpLm5hbWUpPi0xKXJldHVybiBlKHQpO3JldHVybiBudWxsfX1mdW5jdGlvbiBOdChuLGUpe3JldHVybiB0PT57Zm9yKGxldCBpPVcodC5zdGF0ZSkucmVzb2x2ZUlubmVyKHQucG9zLC0xKTtpO2k9aS5wYXJlbnQpaWYobi5pbmRleE9mKGkubmFtZSk+LTEpcmV0dXJuIG51bGw7cmV0dXJuIGUodCl9fXZhciBOPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLmNvbXBsZXRpb249ZSx0aGlzLnNvdXJjZT10LHRoaXMubWF0Y2g9aX19O2Z1bmN0aW9uIEkobil7cmV0dXJuIG4uc2VsZWN0aW9uLm1haW4uaGVhZH1mdW5jdGlvbiBBZShuLGUpe3ZhciB0O2xldHtzb3VyY2U6aX09bixvPWUmJmlbMF0hPVwiXlwiLHM9aVtpLmxlbmd0aC0xXSE9XCIkXCI7cmV0dXJuIW8mJiFzP246bmV3IFJlZ0V4cChgJHtvP1wiXlwiOlwiXCJ9KD86JHtpfSkke3M/XCIkXCI6XCJcIn1gLCh0PW4uZmxhZ3MpIT09bnVsbCYmdCE9PXZvaWQgMD90Om4uaWdub3JlQ2FzZT9cImlcIjpcIlwiKX12YXIgSHQ9VWUuZGVmaW5lKCk7ZnVuY3Rpb24gSmUobixlLHQsaSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxuLmNoYW5nZUJ5UmFuZ2Uobz0+e2lmKG89PW4uc2VsZWN0aW9uLm1haW4pcmV0dXJue2NoYW5nZXM6e2Zyb206dCx0bzppLGluc2VydDplfSxyYW5nZTpnLmN1cnNvcih0K2UubGVuZ3RoKX07bGV0IHM9aS10O3JldHVybiFvLmVtcHR5fHxzJiZuLnNsaWNlRG9jKG8uZnJvbS1zLG8uZnJvbSkhPW4uc2xpY2VEb2ModCxpKT97cmFuZ2U6b306e2NoYW5nZXM6e2Zyb206by5mcm9tLXMsdG86by5mcm9tLGluc2VydDplfSxyYW5nZTpnLmN1cnNvcihvLmZyb20tcytlLmxlbmd0aCl9fSkpLHt1c2VyRXZlbnQ6XCJpbnB1dC5jb21wbGV0ZVwifSl9ZnVuY3Rpb24gVGUobixlKXtsZXQgdD1lLmNvbXBsZXRpb24uYXBwbHl8fGUuY29tcGxldGlvbi5sYWJlbCxpPWUuc291cmNlO3R5cGVvZiB0PT1cInN0cmluZ1wiP24uZGlzcGF0Y2goSmUobi5zdGF0ZSx0LGkuZnJvbSxpLnRvKSk6dChuLGUuY29tcGxldGlvbixpLmZyb20saS50byl9dmFyIGhlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFplKG4pe2lmKCFBcnJheS5pc0FycmF5KG4pKXJldHVybiBuO2xldCBlPWhlLmdldChuKTtyZXR1cm4gZXx8aGUuc2V0KG4sZT1HZShuKSksZX12YXIgXz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnBhdHRlcm49ZSx0aGlzLmNoYXJzPVtdLHRoaXMuZm9sZGVkPVtdLHRoaXMuYW55PVtdLHRoaXMucHJlY2lzZT1bXSx0aGlzLmJ5V29yZD1bXTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoOyl7bGV0IGk9eShlLHQpLG89dyhpKTt0aGlzLmNoYXJzLnB1c2goaSk7bGV0IHM9ZS5zbGljZSh0LHQrbykscj1zLnRvVXBwZXJDYXNlKCk7dGhpcy5mb2xkZWQucHVzaCh5KHI9PXM/cy50b0xvd2VyQ2FzZSgpOnIsMCkpLHQrPW99dGhpcy5hc3RyYWw9ZS5sZW5ndGghPXRoaXMuY2hhcnMubGVuZ3RofW1hdGNoKGUpe2lmKHRoaXMucGF0dGVybi5sZW5ndGg9PTApcmV0dXJuWzBdO2lmKGUubGVuZ3RoPHRoaXMucGF0dGVybi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0e2NoYXJzOnQsZm9sZGVkOmksYW55Om8scHJlY2lzZTpzLGJ5V29yZDpyfT10aGlzO2lmKHQubGVuZ3RoPT0xKXtsZXQgaD15KGUsMCk7cmV0dXJuIGg9PXRbMF0/WzAsMCx3KGgpXTpoPT1pWzBdP1stMjAwLDAsdyhoKV06bnVsbH1sZXQgbD1lLmluZGV4T2YodGhpcy5wYXR0ZXJuKTtpZihsPT0wKXJldHVyblswLDAsdGhpcy5wYXR0ZXJuLmxlbmd0aF07bGV0IGM9dC5sZW5ndGgsYT0wO2lmKGw8MCl7Zm9yKGxldCBoPTAsUT1NYXRoLm1pbihlLmxlbmd0aCwyMDApO2g8USYmYTxjOyl7bGV0IFQ9eShlLGgpOyhUPT10W2FdfHxUPT1pW2FdKSYmKG9bYSsrXT1oKSxoKz13KFQpfWlmKGE8YylyZXR1cm4gbnVsbH1sZXQgZj0wLHU9MCxDPSExLGI9MCxBPS0xLEs9LTEsamU9L1thLXpdLy50ZXN0KGUpLHo9ITA7Zm9yKGxldCBoPTAsUT1NYXRoLm1pbihlLmxlbmd0aCwyMDApLFQ9MDtoPFEmJnU8Yzspe2xldCBtPXkoZSxoKTtsPDAmJihmPGMmJm09PXRbZl0mJihzW2YrK109aCksYjxjJiYobT09dFtiXXx8bT09aVtiXT8oYj09MCYmKEE9aCksSz1oKzEsYisrKTpiPTApKTtsZXQgaixYPW08MjU1P20+PTQ4JiZtPD01N3x8bT49OTcmJm08PTEyMj8yOm0+PTY1JiZtPD05MD8xOjA6KGo9U2UobSkpIT1qLnRvTG93ZXJDYXNlKCk/MTpqIT1qLnRvVXBwZXJDYXNlKCk/MjowOyghaHx8WD09MSYmamV8fFQ9PTAmJlghPTApJiYodFt1XT09bXx8aVt1XT09bSYmKEM9ITApP3JbdSsrXT1oOnIubGVuZ3RoJiYoej0hMSkpLFQ9WCxoKz13KG0pfXJldHVybiB1PT1jJiZyWzBdPT0wJiZ6P3RoaXMucmVzdWx0KC0xMDArKEM/LTIwMDowKSxyLGUpOmI9PWMmJkE9PTA/Wy0yMDAtZS5sZW5ndGgsMCxLXTpsPi0xP1stNzAwLWUubGVuZ3RoLGwsbCt0aGlzLnBhdHRlcm4ubGVuZ3RoXTpiPT1jP1stMjAwKy03MDAtZS5sZW5ndGgsQSxLXTp1PT1jP3RoaXMucmVzdWx0KC0xMDArKEM/LTIwMDowKSstNzAwKyh6PzA6LTExMDApLHIsZSk6dC5sZW5ndGg9PTI/bnVsbDp0aGlzLnJlc3VsdCgob1swXT8tNzAwOjApKy0yMDArLTExMDAsbyxlKX1yZXN1bHQoZSx0LGkpe2xldCBvPVtlLWkubGVuZ3RoXSxzPTE7Zm9yKGxldCByIG9mIHQpe2xldCBsPXIrKHRoaXMuYXN0cmFsP3coeShpLHIpKToxKTtzPjEmJm9bcy0xXT09cj9vW3MtMV09bDoob1tzKytdPXIsb1tzKytdPWwpfXJldHVybiBvfX0seD1FZS5kZWZpbmUoe2NvbWJpbmUobil7cmV0dXJuIEZlKG4se2FjdGl2YXRlT25UeXBpbmc6ITAsc2VsZWN0T25PcGVuOiEwLG92ZXJyaWRlOm51bGwsY2xvc2VPbkJsdXI6ITAsbWF4UmVuZGVyZWRPcHRpb25zOjEwMCxkZWZhdWx0S2V5bWFwOiEwLG9wdGlvbkNsYXNzOigpPT5cIlwiLGFib3ZlQ3Vyc29yOiExLGljb25zOiEwLGFkZFRvT3B0aW9uczpbXSxjb21wYXJlQ29tcGxldGlvbnM6KGUsdCk9PmUubGFiZWwubG9jYWxlQ29tcGFyZSh0LmxhYmVsKSxpbnRlcmFjdGlvbkRlbGF5Ojc1fSx7ZGVmYXVsdEtleW1hcDooZSx0KT0+ZSYmdCxjbG9zZU9uQmx1cjooZSx0KT0+ZSYmdCxpY29uczooZSx0KT0+ZSYmdCxvcHRpb25DbGFzczooZSx0KT0+aT0+X2UoZShpKSx0KGkpKSxhZGRUb09wdGlvbnM6KGUsdCk9PmUuY29uY2F0KHQpfSl9fSk7ZnVuY3Rpb24gX2UobixlKXtyZXR1cm4gbj9lP24rXCIgXCIrZTpuOmV9ZnVuY3Rpb24gZXQobil7bGV0IGU9bi5hZGRUb09wdGlvbnMuc2xpY2UoKTtyZXR1cm4gbi5pY29ucyYmZS5wdXNoKHtyZW5kZXIodCl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gaS5jbGFzc0xpc3QuYWRkKFwiY20tY29tcGxldGlvbkljb25cIiksdC50eXBlJiZpLmNsYXNzTGlzdC5hZGQoLi4udC50eXBlLnNwbGl0KC9cXHMrL2cpLm1hcChvPT5cImNtLWNvbXBsZXRpb25JY29uLVwiK28pKSxpLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLGl9LHBvc2l0aW9uOjIwfSksZS5wdXNoKHtyZW5kZXIodCxpLG8pe2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3MuY2xhc3NOYW1lPVwiY20tY29tcGxldGlvbkxhYmVsXCI7bGV0e2xhYmVsOnJ9PXQsbD0wO2ZvcihsZXQgYz0xO2M8by5sZW5ndGg7KXtsZXQgYT1vW2MrK10sZj1vW2MrK107YT5sJiZzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHIuc2xpY2UobCxhKSkpO2xldCB1PXMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIikpO3UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoci5zbGljZShhLGYpKSksdS5jbGFzc05hbWU9XCJjbS1jb21wbGV0aW9uTWF0Y2hlZFRleHRcIixsPWZ9cmV0dXJuIGw8ci5sZW5ndGgmJnMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoci5zbGljZShsKSkpLHN9LHBvc2l0aW9uOjUwfSx7cmVuZGVyKHQpe2lmKCF0LmRldGFpbClyZXR1cm4gbnVsbDtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtyZXR1cm4gaS5jbGFzc05hbWU9XCJjbS1jb21wbGV0aW9uRGV0YWlsXCIsaS50ZXh0Q29udGVudD10LmRldGFpbCxpfSxwb3NpdGlvbjo4MH0pLGUuc29ydCgodCxpKT0+dC5wb3NpdGlvbi1pLnBvc2l0aW9uKS5tYXAodD0+dC5yZW5kZXIpfWZ1bmN0aW9uIHBlKG4sZSx0KXtpZihuPD10KXJldHVybntmcm9tOjAsdG86bn07aWYoZTwwJiYoZT0wKSxlPD1uPj4xKXtsZXQgbz1NYXRoLmZsb29yKGUvdCk7cmV0dXJue2Zyb206byp0LHRvOihvKzEpKnR9fWxldCBpPU1hdGguZmxvb3IoKG4tZSkvdCk7cmV0dXJue2Zyb206bi0oaSsxKSp0LHRvOm4taSp0fX12YXIgZWU9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnZpZXc9ZSx0aGlzLnN0YXRlRmllbGQ9dCx0aGlzLmluZm89bnVsbCx0aGlzLnBsYWNlSW5mbz17cmVhZDooKT0+dGhpcy5tZWFzdXJlSW5mbygpLHdyaXRlOmw9PnRoaXMucG9zaXRpb25JbmZvKGwpLGtleTp0aGlzfTtsZXQgaT1lLnN0YXRlLmZpZWxkKHQpLHtvcHRpb25zOm8sc2VsZWN0ZWQ6c309aS5vcGVuLHI9ZS5zdGF0ZS5mYWNldCh4KTt0aGlzLm9wdGlvbkNvbnRlbnQ9ZXQociksdGhpcy5vcHRpb25DbGFzcz1yLm9wdGlvbkNsYXNzLHRoaXMucmFuZ2U9cGUoby5sZW5ndGgscyxyLm1heFJlbmRlcmVkT3B0aW9ucyksdGhpcy5kb209ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLmRvbS5jbGFzc05hbWU9XCJjbS10b29sdGlwLWF1dG9jb21wbGV0ZVwiLHRoaXMuZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixsPT57Zm9yKGxldCBjPWwudGFyZ2V0LGE7YyYmYyE9dGhpcy5kb207Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlTmFtZT09XCJMSVwiJiYoYT0vLShcXGQrKSQvLmV4ZWMoYy5pZCkpJiYrYVsxXTxvLmxlbmd0aCl7VGUoZSxvWythWzFdXSksbC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn19KSx0aGlzLmxpc3Q9dGhpcy5kb20uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVMaXN0Qm94KG8saS5pZCx0aGlzLnJhbmdlKSksdGhpcy5saXN0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwoKT0+e3RoaXMuaW5mbyYmdGhpcy52aWV3LnJlcXVlc3RNZWFzdXJlKHRoaXMucGxhY2VJbmZvKX0pfW1vdW50KCl7dGhpcy51cGRhdGVTZWwoKX11cGRhdGUoZSl7ZS5zdGF0ZS5maWVsZCh0aGlzLnN0YXRlRmllbGQpIT1lLnN0YXJ0U3RhdGUuZmllbGQodGhpcy5zdGF0ZUZpZWxkKSYmdGhpcy51cGRhdGVTZWwoKX1wb3NpdGlvbmVkKCl7dGhpcy5pbmZvJiZ0aGlzLnZpZXcucmVxdWVzdE1lYXN1cmUodGhpcy5wbGFjZUluZm8pfXVwZGF0ZVNlbCgpe2xldCBlPXRoaXMudmlldy5zdGF0ZS5maWVsZCh0aGlzLnN0YXRlRmllbGQpLHQ9ZS5vcGVuO2lmKCh0LnNlbGVjdGVkPi0xJiZ0LnNlbGVjdGVkPHRoaXMucmFuZ2UuZnJvbXx8dC5zZWxlY3RlZD49dGhpcy5yYW5nZS50bykmJih0aGlzLnJhbmdlPXBlKHQub3B0aW9ucy5sZW5ndGgsdC5zZWxlY3RlZCx0aGlzLnZpZXcuc3RhdGUuZmFjZXQoeCkubWF4UmVuZGVyZWRPcHRpb25zKSx0aGlzLmxpc3QucmVtb3ZlKCksdGhpcy5saXN0PXRoaXMuZG9tLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlTGlzdEJveCh0Lm9wdGlvbnMsZS5pZCx0aGlzLnJhbmdlKSksdGhpcy5saXN0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwoKT0+e3RoaXMuaW5mbyYmdGhpcy52aWV3LnJlcXVlc3RNZWFzdXJlKHRoaXMucGxhY2VJbmZvKX0pKSx0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9uKHQuc2VsZWN0ZWQpKXt0aGlzLmluZm8mJih0aGlzLmluZm8ucmVtb3ZlKCksdGhpcy5pbmZvPW51bGwpO2xldHtjb21wbGV0aW9uOml9PXQub3B0aW9uc1t0LnNlbGVjdGVkXSx7aW5mbzpvfT1pO2lmKCFvKXJldHVybjtsZXQgcz10eXBlb2Ygbz09XCJzdHJpbmdcIj9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShvKTpvKGkpO2lmKCFzKXJldHVybjtcInRoZW5cImluIHM/cy50aGVuKHI9PntyJiZ0aGlzLnZpZXcuc3RhdGUuZmllbGQodGhpcy5zdGF0ZUZpZWxkLCExKT09ZSYmdGhpcy5hZGRJbmZvUGFuZShyKX0pLmNhdGNoKHI9PloodGhpcy52aWV3LnN0YXRlLHIsXCJjb21wbGV0aW9uIGluZm9cIikpOnRoaXMuYWRkSW5mb1BhbmUocyl9fWFkZEluZm9QYW5lKGUpe2xldCB0PXRoaXMuaW5mbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3QuY2xhc3NOYW1lPVwiY20tdG9vbHRpcCBjbS1jb21wbGV0aW9uSW5mb1wiLHQuYXBwZW5kQ2hpbGQoZSksdGhpcy5kb20uYXBwZW5kQ2hpbGQodCksdGhpcy52aWV3LnJlcXVlc3RNZWFzdXJlKHRoaXMucGxhY2VJbmZvKX11cGRhdGVTZWxlY3RlZE9wdGlvbihlKXtsZXQgdD1udWxsO2ZvcihsZXQgaT10aGlzLmxpc3QuZmlyc3RDaGlsZCxvPXRoaXMucmFuZ2UuZnJvbTtpO2k9aS5uZXh0U2libGluZyxvKyspbz09ZT9pLmhhc0F0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIil8fChpLnNldEF0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIixcInRydWVcIiksdD1pKTppLmhhc0F0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIikmJmkucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiKTtyZXR1cm4gdCYmbnQodGhpcy5saXN0LHQpLHR9bWVhc3VyZUluZm8oKXtsZXQgZT10aGlzLmRvbS5xdWVyeVNlbGVjdG9yKFwiW2FyaWEtc2VsZWN0ZWRdXCIpO2lmKCFlfHwhdGhpcy5pbmZvKXJldHVybiBudWxsO2xldCB0PXRoaXMuZG9tLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyxpPXRoaXMuZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89dGhpcy5pbmZvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihzLnRvcD5NYXRoLm1pbih0LmlubmVySGVpZ2h0LGkuYm90dG9tKS0xMHx8cy5ib3R0b208TWF0aC5tYXgoMCxpLnRvcCkrMTApcmV0dXJuIG51bGw7bGV0IHI9dGhpcy52aWV3LnRleHREaXJlY3Rpb249PVZlLlJUTCxsPXIsYz0hMSxhLGY9XCJcIix1PVwiXCIsQz1pLmxlZnQsYj10LmlubmVyV2lkdGgtaS5yaWdodDtpZihsJiZDPE1hdGgubWluKG8ud2lkdGgsYik/bD0hMTohbCYmYjxNYXRoLm1pbihvLndpZHRoLEMpJiYobD0hMCksby53aWR0aDw9KGw/QzpiKSlmPU1hdGgubWF4KDAsTWF0aC5taW4ocy50b3AsdC5pbm5lckhlaWdodC1vLmhlaWdodCkpLWkudG9wK1wicHhcIixhPU1hdGgubWluKDQwMCxsP0M6YikrXCJweFwiO2Vsc2V7Yz0hMCxhPU1hdGgubWluKDQwMCwocj9pLnJpZ2h0OnQuaW5uZXJXaWR0aC1pLmxlZnQpLTMwKStcInB4XCI7bGV0IEE9dC5pbm5lckhlaWdodC1pLmJvdHRvbTtBPj1vLmhlaWdodHx8QT5pLnRvcD9mPXMuYm90dG9tLWkudG9wK1wicHhcIjp1PWkuYm90dG9tLXMudG9wK1wicHhcIn1yZXR1cm57dG9wOmYsYm90dG9tOnUsbWF4V2lkdGg6YSxjbGFzczpjP3I/XCJsZWZ0LW5hcnJvd1wiOlwicmlnaHQtbmFycm93XCI6bD9cImxlZnRcIjpcInJpZ2h0XCJ9fXBvc2l0aW9uSW5mbyhlKXt0aGlzLmluZm8mJihlPyh0aGlzLmluZm8uc3R5bGUudG9wPWUudG9wLHRoaXMuaW5mby5zdHlsZS5ib3R0b209ZS5ib3R0b20sdGhpcy5pbmZvLnN0eWxlLm1heFdpZHRoPWUubWF4V2lkdGgsdGhpcy5pbmZvLmNsYXNzTmFtZT1cImNtLXRvb2x0aXAgY20tY29tcGxldGlvbkluZm8gY20tY29tcGxldGlvbkluZm8tXCIrZS5jbGFzcyk6dGhpcy5pbmZvLnN0eWxlLnRvcD1cIi0xZTZweFwiKX1jcmVhdGVMaXN0Qm94KGUsdCxpKXtsZXQgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7by5pZD10LG8uc2V0QXR0cmlidXRlKFwicm9sZVwiLFwibGlzdGJveFwiKSxvLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIixcInRydWVcIiksby5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsdGhpcy52aWV3LnN0YXRlLnBocmFzZShcIkNvbXBsZXRpb25zXCIpKTtmb3IobGV0IHM9aS5mcm9tO3M8aS50bztzKyspe2xldHtjb21wbGV0aW9uOnIsbWF0Y2g6bH09ZVtzXSxjPW8uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpKTtjLmlkPXQrXCItXCIrcyxjLnNldEF0dHJpYnV0ZShcInJvbGVcIixcIm9wdGlvblwiKTtsZXQgYT10aGlzLm9wdGlvbkNsYXNzKHIpO2EmJihjLmNsYXNzTmFtZT1hKTtmb3IobGV0IGYgb2YgdGhpcy5vcHRpb25Db250ZW50KXtsZXQgdT1mKHIsdGhpcy52aWV3LnN0YXRlLGwpO3UmJmMuYXBwZW5kQ2hpbGQodSl9fXJldHVybiBpLmZyb20mJm8uY2xhc3NMaXN0LmFkZChcImNtLWNvbXBsZXRpb25MaXN0SW5jb21wbGV0ZVRvcFwiKSxpLnRvPGUubGVuZ3RoJiZvLmNsYXNzTGlzdC5hZGQoXCJjbS1jb21wbGV0aW9uTGlzdEluY29tcGxldGVCb3R0b21cIiksb319O2Z1bmN0aW9uIHR0KG4pe3JldHVybiBlPT5uZXcgZWUoZSxuKX1mdW5jdGlvbiBudChuLGUpe2xldCB0PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2kudG9wPHQudG9wP24uc2Nyb2xsVG9wLT10LnRvcC1pLnRvcDppLmJvdHRvbT50LmJvdHRvbSYmKG4uc2Nyb2xsVG9wKz1pLmJvdHRvbS10LmJvdHRvbSl9ZnVuY3Rpb24gZGUobil7cmV0dXJuKG4uYm9vc3R8fDApKjEwMCsobi5hcHBseT8xMDowKSsobi5pbmZvPzU6MCkrKG4udHlwZT8xOjApfWZ1bmN0aW9uIGl0KG4sZSl7bGV0IHQ9W10saT0wO2ZvcihsZXQgbCBvZiBuKWlmKGwuaGFzUmVzdWx0KCkpaWYobC5yZXN1bHQuZmlsdGVyPT09ITEpe2xldCBjPWwucmVzdWx0LmdldE1hdGNoO2ZvcihsZXQgYSBvZiBsLnJlc3VsdC5vcHRpb25zKXtsZXQgZj1bMWU5LWkrK107aWYoYylmb3IobGV0IHUgb2YgYyhhKSlmLnB1c2godSk7dC5wdXNoKG5ldyBOKGEsbCxmKSl9fWVsc2V7bGV0IGM9bmV3IF8oZS5zbGljZURvYyhsLmZyb20sbC50bykpLGE7Zm9yKGxldCBmIG9mIGwucmVzdWx0Lm9wdGlvbnMpKGE9Yy5tYXRjaChmLmxhYmVsKSkmJihmLmJvb3N0IT1udWxsJiYoYVswXSs9Zi5ib29zdCksdC5wdXNoKG5ldyBOKGYsbCxhKSkpfWxldCBvPVtdLHM9bnVsbCxyPWUuZmFjZXQoeCkuY29tcGFyZUNvbXBsZXRpb25zO2ZvcihsZXQgbCBvZiB0LnNvcnQoKGMsYSk9PmEubWF0Y2hbMF0tYy5tYXRjaFswXXx8cihjLmNvbXBsZXRpb24sYS5jb21wbGV0aW9uKSkpIXN8fHMubGFiZWwhPWwuY29tcGxldGlvbi5sYWJlbHx8cy5kZXRhaWwhPWwuY29tcGxldGlvbi5kZXRhaWx8fHMudHlwZSE9bnVsbCYmbC5jb21wbGV0aW9uLnR5cGUhPW51bGwmJnMudHlwZSE9bC5jb21wbGV0aW9uLnR5cGV8fHMuYXBwbHkhPWwuY29tcGxldGlvbi5hcHBseT9vLnB1c2gobCk6ZGUobC5jb21wbGV0aW9uKT5kZShzKSYmKG9bby5sZW5ndGgtMV09bCkscz1sLmNvbXBsZXRpb247cmV0dXJuIG99dmFyIFA9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGksbyxzKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLmF0dHJzPXQsdGhpcy50b29sdGlwPWksdGhpcy50aW1lc3RhbXA9byx0aGlzLnNlbGVjdGVkPXN9c2V0U2VsZWN0ZWQoZSx0KXtyZXR1cm4gZT09dGhpcy5zZWxlY3RlZHx8ZT49dGhpcy5vcHRpb25zLmxlbmd0aD90aGlzOm5ldyBQKHRoaXMub3B0aW9ucyxtZSh0LGUpLHRoaXMudG9vbHRpcCx0aGlzLnRpbWVzdGFtcCxlKX1zdGF0aWMgYnVpbGQoZSx0LGksbyxzKXtsZXQgcj1pdChlLHQpO2lmKCFyLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD10LmZhY2V0KHgpLnNlbGVjdE9uT3Blbj8wOi0xO2lmKG8mJm8uc2VsZWN0ZWQhPWwmJm8uc2VsZWN0ZWQhPS0xKXtsZXQgYz1vLm9wdGlvbnNbby5zZWxlY3RlZF0uY29tcGxldGlvbjtmb3IobGV0IGE9MDthPHIubGVuZ3RoO2ErKylpZihyW2FdLmNvbXBsZXRpb249PWMpe2w9YTticmVha319cmV0dXJuIG5ldyBQKHIsbWUoaSxsKSx7cG9zOmUucmVkdWNlKChjLGEpPT5hLmhhc1Jlc3VsdCgpP01hdGgubWluKGMsYS5mcm9tKTpjLDFlOCksY3JlYXRlOnR0KGQpLGFib3ZlOnMuYWJvdmVDdXJzb3J9LG8/by50aW1lc3RhbXA6RGF0ZS5ub3coKSxsKX1tYXAoZSl7cmV0dXJuIG5ldyBQKHRoaXMub3B0aW9ucyx0aGlzLmF0dHJzLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnRvb2x0aXApLHtwb3M6ZS5tYXBQb3ModGhpcy50b29sdGlwLnBvcyl9KSx0aGlzLnRpbWVzdGFtcCx0aGlzLnNlbGVjdGVkKX19LE09Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMuYWN0aXZlPWUsdGhpcy5pZD10LHRoaXMub3Blbj1pfXN0YXRpYyBzdGFydCgpe3JldHVybiBuZXcgTShsdCxcImNtLWFjLVwiK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoyZTYpLnRvU3RyaW5nKDM2KSxudWxsKX11cGRhdGUoZSl7bGV0e3N0YXRlOnR9PWUsaT10LmZhY2V0KHgpLHM9KGkub3ZlcnJpZGV8fHQubGFuZ3VhZ2VEYXRhQXQoXCJhdXRvY29tcGxldGVcIixJKHQpKS5tYXAoWmUpKS5tYXAobD0+KHRoaXMuYWN0aXZlLmZpbmQoYT0+YS5zb3VyY2U9PWwpfHxuZXcgcChsLHRoaXMuYWN0aXZlLnNvbWUoYT0+YS5zdGF0ZSE9MCk/MTowKSkudXBkYXRlKGUsaSkpO3MubGVuZ3RoPT10aGlzLmFjdGl2ZS5sZW5ndGgmJnMuZXZlcnkoKGwsYyk9Pmw9PXRoaXMuYWN0aXZlW2NdKSYmKHM9dGhpcy5hY3RpdmUpO2xldCByPWUuc2VsZWN0aW9ufHxzLnNvbWUobD0+bC5oYXNSZXN1bHQoKSYmZS5jaGFuZ2VzLnRvdWNoZXNSYW5nZShsLmZyb20sbC50bykpfHwhb3Qocyx0aGlzLmFjdGl2ZSk/UC5idWlsZChzLHQsdGhpcy5pZCx0aGlzLm9wZW4saSk6dGhpcy5vcGVuJiZlLmRvY0NoYW5nZWQ/dGhpcy5vcGVuLm1hcChlLmNoYW5nZXMpOnRoaXMub3BlbjshciYmcy5ldmVyeShsPT5sLnN0YXRlIT0xKSYmcy5zb21lKGw9PmwuaGFzUmVzdWx0KCkpJiYocz1zLm1hcChsPT5sLmhhc1Jlc3VsdCgpP25ldyBwKGwuc291cmNlLDApOmwpKTtmb3IobGV0IGwgb2YgZS5lZmZlY3RzKWwuaXMobGUpJiYocj1yJiZyLnNldFNlbGVjdGVkKGwudmFsdWUsdGhpcy5pZCkpO3JldHVybiBzPT10aGlzLmFjdGl2ZSYmcj09dGhpcy5vcGVuP3RoaXM6bmV3IE0ocyx0aGlzLmlkLHIpfWdldCB0b29sdGlwKCl7cmV0dXJuIHRoaXMub3Blbj90aGlzLm9wZW4udG9vbHRpcDpudWxsfWdldCBhdHRycygpe3JldHVybiB0aGlzLm9wZW4/dGhpcy5vcGVuLmF0dHJzOnN0fX07ZnVuY3Rpb24gb3QobixlKXtpZihuPT1lKXJldHVybiEwO2ZvcihsZXQgdD0wLGk9MDs7KXtmb3IoO3Q8bi5sZW5ndGgmJiFuW3RdLmhhc1Jlc3VsdDspdCsrO2Zvcig7aTxlLmxlbmd0aCYmIWVbaV0uaGFzUmVzdWx0OylpKys7bGV0IG89dD09bi5sZW5ndGgscz1pPT1lLmxlbmd0aDtpZihvfHxzKXJldHVybiBvPT1zO2lmKG5bdCsrXS5yZXN1bHQhPWVbaSsrXS5yZXN1bHQpcmV0dXJuITF9fXZhciBzdD17XCJhcmlhLWF1dG9jb21wbGV0ZVwiOlwibGlzdFwifTtmdW5jdGlvbiBtZShuLGUpe2xldCB0PXtcImFyaWEtYXV0b2NvbXBsZXRlXCI6XCJsaXN0XCIsXCJhcmlhLWhhc3BvcHVwXCI6XCJsaXN0Ym94XCIsXCJhcmlhLWNvbnRyb2xzXCI6bn07cmV0dXJuIGU+LTEmJih0W1wiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCJdPW4rXCItXCIrZSksdH12YXIgbHQ9W107ZnVuY3Rpb24gdGUobil7cmV0dXJuIG4uaXNVc2VyRXZlbnQoXCJpbnB1dC50eXBlXCIpP1wiaW5wdXRcIjpuLmlzVXNlckV2ZW50KFwiZGVsZXRlLmJhY2t3YXJkXCIpP1wiZGVsZXRlXCI6bnVsbH12YXIgcD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsaT0tMSl7dGhpcy5zb3VyY2U9ZSx0aGlzLnN0YXRlPXQsdGhpcy5leHBsaWNpdFBvcz1pfWhhc1Jlc3VsdCgpe3JldHVybiExfXVwZGF0ZShlLHQpe2xldCBpPXRlKGUpLG89dGhpcztpP289by5oYW5kbGVVc2VyRXZlbnQoZSxpLHQpOmUuZG9jQ2hhbmdlZD9vPW8uaGFuZGxlQ2hhbmdlKGUpOmUuc2VsZWN0aW9uJiZvLnN0YXRlIT0wJiYobz1uZXcgcChvLnNvdXJjZSwwKSk7Zm9yKGxldCBzIG9mIGUuZWZmZWN0cylpZihzLmlzKHNlKSlvPW5ldyBwKG8uc291cmNlLDEscy52YWx1ZT9JKGUuc3RhdGUpOi0xKTtlbHNlIGlmKHMuaXMoSCkpbz1uZXcgcChvLnNvdXJjZSwwKTtlbHNlIGlmKHMuaXMoTWUpKWZvcihsZXQgciBvZiBzLnZhbHVlKXIuc291cmNlPT1vLnNvdXJjZSYmKG89cik7cmV0dXJuIG99aGFuZGxlVXNlckV2ZW50KGUsdCxpKXtyZXR1cm4gdD09XCJkZWxldGVcInx8IWkuYWN0aXZhdGVPblR5cGluZz90aGlzLm1hcChlLmNoYW5nZXMpOm5ldyBwKHRoaXMuc291cmNlLDEpfWhhbmRsZUNoYW5nZShlKXtyZXR1cm4gZS5jaGFuZ2VzLnRvdWNoZXNSYW5nZShJKGUuc3RhcnRTdGF0ZSkpP25ldyBwKHRoaXMuc291cmNlLDApOnRoaXMubWFwKGUuY2hhbmdlcyl9bWFwKGUpe3JldHVybiBlLmVtcHR5fHx0aGlzLmV4cGxpY2l0UG9zPDA/dGhpczpuZXcgcCh0aGlzLnNvdXJjZSx0aGlzLnN0YXRlLGUubWFwUG9zKHRoaXMuZXhwbGljaXRQb3MpKX19LE89Y2xhc3MgZXh0ZW5kcyBwe2NvbnN0cnVjdG9yKGUsdCxpLG8scyl7c3VwZXIoZSwyLHQpLHRoaXMucmVzdWx0PWksdGhpcy5mcm9tPW8sdGhpcy50bz1zfWhhc1Jlc3VsdCgpe3JldHVybiEwfWhhbmRsZVVzZXJFdmVudChlLHQsaSl7dmFyIG87bGV0IHM9ZS5jaGFuZ2VzLm1hcFBvcyh0aGlzLmZyb20pLHI9ZS5jaGFuZ2VzLm1hcFBvcyh0aGlzLnRvLDEpLGw9SShlLnN0YXRlKTtpZigodGhpcy5leHBsaWNpdFBvczwwP2w8PXM6bDx0aGlzLmZyb20pfHxsPnJ8fHQ9PVwiZGVsZXRlXCImJkkoZS5zdGFydFN0YXRlKT09dGhpcy5mcm9tKXJldHVybiBuZXcgcCh0aGlzLnNvdXJjZSx0PT1cImlucHV0XCImJmkuYWN0aXZhdGVPblR5cGluZz8xOjApO2xldCBjPXRoaXMuZXhwbGljaXRQb3M8MD8tMTplLmNoYW5nZXMubWFwUG9zKHRoaXMuZXhwbGljaXRQb3MpLGE7cmV0dXJuIHJ0KHRoaXMucmVzdWx0LnZhbGlkRm9yLGUuc3RhdGUscyxyKT9uZXcgTyh0aGlzLnNvdXJjZSxjLHRoaXMucmVzdWx0LHMscik6dGhpcy5yZXN1bHQudXBkYXRlJiYoYT10aGlzLnJlc3VsdC51cGRhdGUodGhpcy5yZXN1bHQscyxyLG5ldyBGKGUuc3RhdGUsbCxjPj0wKSkpP25ldyBPKHRoaXMuc291cmNlLGMsYSxhLmZyb20sKG89YS50bykhPT1udWxsJiZvIT09dm9pZCAwP286SShlLnN0YXRlKSk6bmV3IHAodGhpcy5zb3VyY2UsMSxjKX1oYW5kbGVDaGFuZ2UoZSl7cmV0dXJuIGUuY2hhbmdlcy50b3VjaGVzUmFuZ2UodGhpcy5mcm9tLHRoaXMudG8pP25ldyBwKHRoaXMuc291cmNlLDApOnRoaXMubWFwKGUuY2hhbmdlcyl9bWFwKGUpe3JldHVybiBlLmVtcHR5P3RoaXM6bmV3IE8odGhpcy5zb3VyY2UsdGhpcy5leHBsaWNpdFBvczwwPy0xOmUubWFwUG9zKHRoaXMuZXhwbGljaXRQb3MpLHRoaXMucmVzdWx0LGUubWFwUG9zKHRoaXMuZnJvbSksZS5tYXBQb3ModGhpcy50bywxKSl9fTtmdW5jdGlvbiBydChuLGUsdCxpKXtpZighbilyZXR1cm4hMTtsZXQgbz1lLnNsaWNlRG9jKHQsaSk7cmV0dXJuIHR5cGVvZiBuPT1cImZ1bmN0aW9uXCI/bihvLHQsaSxlKTpBZShuLCEwKS50ZXN0KG8pfXZhciBzZT12LmRlZmluZSgpLEg9di5kZWZpbmUoKSxNZT12LmRlZmluZSh7bWFwKG4sZSl7cmV0dXJuIG4ubWFwKHQ9PnQubWFwKGUpKX19KSxsZT12LmRlZmluZSgpLGQ9b2UuZGVmaW5lKHtjcmVhdGUoKXtyZXR1cm4gTS5zdGFydCgpfSx1cGRhdGUobixlKXtyZXR1cm4gbi51cGRhdGUoZSl9LHByb3ZpZGU6bj0+W3FlLmZyb20obixlPT5lLnRvb2x0aXApLGsuY29udGVudEF0dHJpYnV0ZXMuZnJvbShuLGU9PmUuYXR0cnMpXX0pO2Z1bmN0aW9uIFUobixlPVwib3B0aW9uXCIpe3JldHVybiB0PT57bGV0IGk9dC5zdGF0ZS5maWVsZChkLCExKTtpZighaXx8IWkub3Blbnx8RGF0ZS5ub3coKS1pLm9wZW4udGltZXN0YW1wPHQuc3RhdGUuZmFjZXQoeCkuaW50ZXJhY3Rpb25EZWxheSlyZXR1cm4hMTtsZXQgbz0xLHM7ZT09XCJwYWdlXCImJihzPXplKHQsaS5vcGVuLnRvb2x0aXApKSYmKG89TWF0aC5tYXgoMixNYXRoLmZsb29yKHMuZG9tLm9mZnNldEhlaWdodC9zLmRvbS5xdWVyeVNlbGVjdG9yKFwibGlcIikub2Zmc2V0SGVpZ2h0KS0xKSk7bGV0e2xlbmd0aDpyfT1pLm9wZW4ub3B0aW9ucyxsPWkub3Blbi5zZWxlY3RlZD4tMT9pLm9wZW4uc2VsZWN0ZWQrbyoobj8xOi0xKTpuPzA6ci0xO3JldHVybiBsPDA/bD1lPT1cInBhZ2VcIj8wOnItMTpsPj1yJiYobD1lPT1cInBhZ2VcIj9yLTE6MCksdC5kaXNwYXRjaCh7ZWZmZWN0czpsZS5vZihsKX0pLCEwfX12YXIgY3Q9bj0+e2xldCBlPW4uc3RhdGUuZmllbGQoZCwhMSk7cmV0dXJuIG4uc3RhdGUucmVhZE9ubHl8fCFlfHwhZS5vcGVufHxlLm9wZW4uc2VsZWN0ZWQ8MHx8RGF0ZS5ub3coKS1lLm9wZW4udGltZXN0YW1wPG4uc3RhdGUuZmFjZXQoeCkuaW50ZXJhY3Rpb25EZWxheT8hMTooVGUobixlLm9wZW4ub3B0aW9uc1tlLm9wZW4uc2VsZWN0ZWRdKSwhMCl9LGF0PW49Pm4uc3RhdGUuZmllbGQoZCwhMSk/KG4uZGlzcGF0Y2goe2VmZmVjdHM6c2Uub2YoITApfSksITApOiExLGZ0PW49PntsZXQgZT1uLnN0YXRlLmZpZWxkKGQsITEpO3JldHVybiFlfHwhZS5hY3RpdmUuc29tZSh0PT50LnN0YXRlIT0wKT8hMToobi5kaXNwYXRjaCh7ZWZmZWN0czpILm9mKG51bGwpfSksITApfSxuZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuYWN0aXZlPWUsdGhpcy5jb250ZXh0PXQsdGhpcy50aW1lPURhdGUubm93KCksdGhpcy51cGRhdGVzPVtdLHRoaXMuZG9uZT12b2lkIDB9fSxnZT01MCx1dD01MCxodD0xZTMscHQ9S2UuZnJvbUNsYXNzKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMudmlldz1uLHRoaXMuZGVib3VuY2VVcGRhdGU9LTEsdGhpcy5ydW5uaW5nPVtdLHRoaXMuZGVib3VuY2VBY2NlcHQ9LTEsdGhpcy5jb21wb3Npbmc9MDtmb3IobGV0IGUgb2Ygbi5zdGF0ZS5maWVsZChkKS5hY3RpdmUpZS5zdGF0ZT09MSYmdGhpcy5zdGFydFF1ZXJ5KGUpfXVwZGF0ZShuKXtsZXQgZT1uLnN0YXRlLmZpZWxkKGQpO2lmKCFuLnNlbGVjdGlvblNldCYmIW4uZG9jQ2hhbmdlZCYmbi5zdGFydFN0YXRlLmZpZWxkKGQpPT1lKXJldHVybjtsZXQgdD1uLnRyYW5zYWN0aW9ucy5zb21lKGk9PihpLnNlbGVjdGlvbnx8aS5kb2NDaGFuZ2VkKSYmIXRlKGkpKTtmb3IobGV0IGk9MDtpPHRoaXMucnVubmluZy5sZW5ndGg7aSsrKXtsZXQgbz10aGlzLnJ1bm5pbmdbaV07aWYodHx8by51cGRhdGVzLmxlbmd0aCtuLnRyYW5zYWN0aW9ucy5sZW5ndGg+dXQmJkRhdGUubm93KCktby50aW1lPmh0KXtmb3IobGV0IHMgb2Ygby5jb250ZXh0LmFib3J0TGlzdGVuZXJzKXRyeXtzKCl9Y2F0Y2gocil7Wih0aGlzLnZpZXcuc3RhdGUscil9by5jb250ZXh0LmFib3J0TGlzdGVuZXJzPW51bGwsdGhpcy5ydW5uaW5nLnNwbGljZShpLS0sMSl9ZWxzZSBvLnVwZGF0ZXMucHVzaCguLi5uLnRyYW5zYWN0aW9ucyl9aWYodGhpcy5kZWJvdW5jZVVwZGF0ZT4tMSYmY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VVcGRhdGUpLHRoaXMuZGVib3VuY2VVcGRhdGU9ZS5hY3RpdmUuc29tZShpPT5pLnN0YXRlPT0xJiYhdGhpcy5ydW5uaW5nLnNvbWUobz0+by5hY3RpdmUuc291cmNlPT1pLnNvdXJjZSkpP3NldFRpbWVvdXQoKCk9PnRoaXMuc3RhcnRVcGRhdGUoKSxnZSk6LTEsdGhpcy5jb21wb3NpbmchPTApZm9yKGxldCBpIG9mIG4udHJhbnNhY3Rpb25zKXRlKGkpPT1cImlucHV0XCI/dGhpcy5jb21wb3Npbmc9Mjp0aGlzLmNvbXBvc2luZz09MiYmaS5zZWxlY3Rpb24mJih0aGlzLmNvbXBvc2luZz0zKX1zdGFydFVwZGF0ZSgpe3RoaXMuZGVib3VuY2VVcGRhdGU9LTE7bGV0e3N0YXRlOm59PXRoaXMudmlldyxlPW4uZmllbGQoZCk7Zm9yKGxldCB0IG9mIGUuYWN0aXZlKXQuc3RhdGU9PTEmJiF0aGlzLnJ1bm5pbmcuc29tZShpPT5pLmFjdGl2ZS5zb3VyY2U9PXQuc291cmNlKSYmdGhpcy5zdGFydFF1ZXJ5KHQpfXN0YXJ0UXVlcnkobil7bGV0e3N0YXRlOmV9PXRoaXMudmlldyx0PUkoZSksaT1uZXcgRihlLHQsbi5leHBsaWNpdFBvcz09dCksbz1uZXcgbmUobixpKTt0aGlzLnJ1bm5pbmcucHVzaChvKSxQcm9taXNlLnJlc29sdmUobi5zb3VyY2UoaSkpLnRoZW4ocz0+e28uY29udGV4dC5hYm9ydGVkfHwoby5kb25lPXN8fG51bGwsdGhpcy5zY2hlZHVsZUFjY2VwdCgpKX0scz0+e3RoaXMudmlldy5kaXNwYXRjaCh7ZWZmZWN0czpILm9mKG51bGwpfSksWih0aGlzLnZpZXcuc3RhdGUscyl9KX1zY2hlZHVsZUFjY2VwdCgpe3RoaXMucnVubmluZy5ldmVyeShuPT5uLmRvbmUhPT12b2lkIDApP3RoaXMuYWNjZXB0KCk6dGhpcy5kZWJvdW5jZUFjY2VwdDwwJiYodGhpcy5kZWJvdW5jZUFjY2VwdD1zZXRUaW1lb3V0KCgpPT50aGlzLmFjY2VwdCgpLGdlKSl9YWNjZXB0KCl7dmFyIG47dGhpcy5kZWJvdW5jZUFjY2VwdD4tMSYmY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VBY2NlcHQpLHRoaXMuZGVib3VuY2VBY2NlcHQ9LTE7bGV0IGU9W10sdD10aGlzLnZpZXcuc3RhdGUuZmFjZXQoeCk7Zm9yKGxldCBpPTA7aTx0aGlzLnJ1bm5pbmcubGVuZ3RoO2krKyl7bGV0IG89dGhpcy5ydW5uaW5nW2ldO2lmKG8uZG9uZT09PXZvaWQgMCljb250aW51ZTtpZih0aGlzLnJ1bm5pbmcuc3BsaWNlKGktLSwxKSxvLmRvbmUpe2xldCByPW5ldyBPKG8uYWN0aXZlLnNvdXJjZSxvLmFjdGl2ZS5leHBsaWNpdFBvcyxvLmRvbmUsby5kb25lLmZyb20sKG49by5kb25lLnRvKSE9PW51bGwmJm4hPT12b2lkIDA/bjpJKG8udXBkYXRlcy5sZW5ndGg/by51cGRhdGVzWzBdLnN0YXJ0U3RhdGU6dGhpcy52aWV3LnN0YXRlKSk7Zm9yKGxldCBsIG9mIG8udXBkYXRlcylyPXIudXBkYXRlKGwsdCk7aWYoci5oYXNSZXN1bHQoKSl7ZS5wdXNoKHIpO2NvbnRpbnVlfX1sZXQgcz10aGlzLnZpZXcuc3RhdGUuZmllbGQoZCkuYWN0aXZlLmZpbmQocj0+ci5zb3VyY2U9PW8uYWN0aXZlLnNvdXJjZSk7aWYocyYmcy5zdGF0ZT09MSlpZihvLmRvbmU9PW51bGwpe2xldCByPW5ldyBwKG8uYWN0aXZlLnNvdXJjZSwwKTtmb3IobGV0IGwgb2Ygby51cGRhdGVzKXI9ci51cGRhdGUobCx0KTtyLnN0YXRlIT0xJiZlLnB1c2gocil9ZWxzZSB0aGlzLnN0YXJ0UXVlcnkocyl9ZS5sZW5ndGgmJnRoaXMudmlldy5kaXNwYXRjaCh7ZWZmZWN0czpNZS5vZihlKX0pfX0se2V2ZW50SGFuZGxlcnM6e2JsdXIoKXtsZXQgbj10aGlzLnZpZXcuc3RhdGUuZmllbGQoZCwhMSk7biYmbi50b29sdGlwJiZ0aGlzLnZpZXcuc3RhdGUuZmFjZXQoeCkuY2xvc2VPbkJsdXImJnRoaXMudmlldy5kaXNwYXRjaCh7ZWZmZWN0czpILm9mKG51bGwpfSl9LGNvbXBvc2l0aW9uc3RhcnQoKXt0aGlzLmNvbXBvc2luZz0xfSxjb21wb3NpdGlvbmVuZCgpe3RoaXMuY29tcG9zaW5nPT0zJiZzZXRUaW1lb3V0KCgpPT50aGlzLnZpZXcuZGlzcGF0Y2goe2VmZmVjdHM6c2Uub2YoITEpfSksMjApLHRoaXMuY29tcG9zaW5nPTB9fX0pLFJlPWsuYmFzZVRoZW1lKHtcIi5jbS10b29sdGlwLmNtLXRvb2x0aXAtYXV0b2NvbXBsZXRlXCI6e1wiJiA+IHVsXCI6e2ZvbnRGYW1pbHk6XCJtb25vc3BhY2VcIix3aGl0ZVNwYWNlOlwibm93cmFwXCIsb3ZlcmZsb3c6XCJoaWRkZW4gYXV0b1wiLG1heFdpZHRoX2ZhbGxiYWNrOlwiNzAwcHhcIixtYXhXaWR0aDpcIm1pbig3MDBweCwgOTV2dylcIixtaW5XaWR0aDpcIjI1MHB4XCIsbWF4SGVpZ2h0OlwiMTBlbVwiLGxpc3RTdHlsZTpcIm5vbmVcIixtYXJnaW46MCxwYWRkaW5nOjAsXCImID4gbGlcIjp7b3ZlcmZsb3dYOlwiaGlkZGVuXCIsdGV4dE92ZXJmbG93OlwiZWxsaXBzaXNcIixjdXJzb3I6XCJwb2ludGVyXCIscGFkZGluZzpcIjFweCAzcHhcIixsaW5lSGVpZ2h0OjEuMn19fSxcIiZsaWdodCAuY20tdG9vbHRpcC1hdXRvY29tcGxldGUgdWwgbGlbYXJpYS1zZWxlY3RlZF1cIjp7YmFja2dyb3VuZDpcIiMxN2NcIixjb2xvcjpcIndoaXRlXCJ9LFwiJmRhcmsgLmNtLXRvb2x0aXAtYXV0b2NvbXBsZXRlIHVsIGxpW2FyaWEtc2VsZWN0ZWRdXCI6e2JhY2tncm91bmQ6XCIjMzQ3XCIsY29sb3I6XCJ3aGl0ZVwifSxcIi5jbS1jb21wbGV0aW9uTGlzdEluY29tcGxldGVUb3A6YmVmb3JlLCAuY20tY29tcGxldGlvbkxpc3RJbmNvbXBsZXRlQm90dG9tOmFmdGVyXCI6e2NvbnRlbnQ6J1wiXFx4QjdcXHhCN1xceEI3XCInLG9wYWNpdHk6LjUsZGlzcGxheTpcImJsb2NrXCIsdGV4dEFsaWduOlwiY2VudGVyXCJ9LFwiLmNtLXRvb2x0aXAuY20tY29tcGxldGlvbkluZm9cIjp7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHBhZGRpbmc6XCIzcHggOXB4XCIsd2lkdGg6XCJtYXgtY29udGVudFwiLG1heFdpZHRoOmAkezQwMH1weGAsYm94U2l6aW5nOlwiYm9yZGVyLWJveFwifSxcIi5jbS1jb21wbGV0aW9uSW5mby5jbS1jb21wbGV0aW9uSW5mby1sZWZ0XCI6e3JpZ2h0OlwiMTAwJVwifSxcIi5jbS1jb21wbGV0aW9uSW5mby5jbS1jb21wbGV0aW9uSW5mby1yaWdodFwiOntsZWZ0OlwiMTAwJVwifSxcIi5jbS1jb21wbGV0aW9uSW5mby5jbS1jb21wbGV0aW9uSW5mby1sZWZ0LW5hcnJvd1wiOntyaWdodDpgJHszMH1weGB9LFwiLmNtLWNvbXBsZXRpb25JbmZvLmNtLWNvbXBsZXRpb25JbmZvLXJpZ2h0LW5hcnJvd1wiOntsZWZ0OmAkezMwfXB4YH0sXCImbGlnaHQgLmNtLXNuaXBwZXRGaWVsZFwiOntiYWNrZ3JvdW5kQ29sb3I6XCIjMDAwMDAwMjJcIn0sXCImZGFyayAuY20tc25pcHBldEZpZWxkXCI6e2JhY2tncm91bmRDb2xvcjpcIiNmZmZmZmYyMlwifSxcIi5jbS1zbmlwcGV0RmllbGRQb3NpdGlvblwiOnt2ZXJ0aWNhbEFsaWduOlwidGV4dC10b3BcIix3aWR0aDowLGhlaWdodDpcIjEuMTVlbVwiLGRpc3BsYXk6XCJpbmxpbmUtYmxvY2tcIixtYXJnaW46XCIwIC0wLjdweCAtLjdlbVwiLGJvcmRlckxlZnQ6XCIxLjRweCBkb3R0ZWQgIzg4OFwifSxcIi5jbS1jb21wbGV0aW9uTWF0Y2hlZFRleHRcIjp7dGV4dERlY29yYXRpb246XCJ1bmRlcmxpbmVcIn0sXCIuY20tY29tcGxldGlvbkRldGFpbFwiOnttYXJnaW5MZWZ0OlwiMC41ZW1cIixmb250U3R5bGU6XCJpdGFsaWNcIn0sXCIuY20tY29tcGxldGlvbkljb25cIjp7Zm9udFNpemU6XCI5MCVcIix3aWR0aDpcIi44ZW1cIixkaXNwbGF5OlwiaW5saW5lLWJsb2NrXCIsdGV4dEFsaWduOlwiY2VudGVyXCIscGFkZGluZ1JpZ2h0OlwiLjZlbVwiLG9wYWNpdHk6XCIwLjZcIn0sXCIuY20tY29tcGxldGlvbkljb24tZnVuY3Rpb24sIC5jbS1jb21wbGV0aW9uSWNvbi1tZXRob2RcIjp7XCImOmFmdGVyXCI6e2NvbnRlbnQ6XCInXFx1MDE5MidcIn19LFwiLmNtLWNvbXBsZXRpb25JY29uLWNsYXNzXCI6e1wiJjphZnRlclwiOntjb250ZW50OlwiJ1xcdTI1Q0InXCJ9fSxcIi5jbS1jb21wbGV0aW9uSWNvbi1pbnRlcmZhY2VcIjp7XCImOmFmdGVyXCI6e2NvbnRlbnQ6XCInXFx1MjVDQydcIn19LFwiLmNtLWNvbXBsZXRpb25JY29uLXZhcmlhYmxlXCI6e1wiJjphZnRlclwiOntjb250ZW50OlwiJ1xcdXsxRDQ2NX0nXCJ9fSxcIi5jbS1jb21wbGV0aW9uSWNvbi1jb25zdGFudFwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHV7MUQ0MzZ9J1wifX0sXCIuY20tY29tcGxldGlvbkljb24tdHlwZVwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHV7MUQ0NjF9J1wifX0sXCIuY20tY29tcGxldGlvbkljb24tZW51bVwiOntcIiY6YWZ0ZXJcIjp7Y29udGVudDpcIidcXHUyMjJBJ1wifX0sXCIuY20tY29tcGxldGlvbkljb24tcHJvcGVydHlcIjp7XCImOmFmdGVyXCI6e2NvbnRlbnQ6XCInXFx1MjVBMSdcIn19LFwiLmNtLWNvbXBsZXRpb25JY29uLWtleXdvcmRcIjp7XCImOmFmdGVyXCI6e2NvbnRlbnQ6XCInXFx1ezFGNTExfVxcdUZFMEUnXCJ9fSxcIi5jbS1jb21wbGV0aW9uSWNvbi1uYW1lc3BhY2VcIjp7XCImOmFmdGVyXCI6e2NvbnRlbnQ6XCInXFx1MjVBMidcIn19LFwiLmNtLWNvbXBsZXRpb25JY29uLXRleHRcIjp7XCImOmFmdGVyXCI6e2NvbnRlbnQ6XCInYWJjJ1wiLGZvbnRTaXplOlwiNTAlXCIsdmVydGljYWxBbGlnbjpcIm1pZGRsZVwifX19KSxpZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsaSxvKXt0aGlzLmZpZWxkPWUsdGhpcy5saW5lPXQsdGhpcy5mcm9tPWksdGhpcy50bz1vfX0sUj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsaSl7dGhpcy5maWVsZD1lLHRoaXMuZnJvbT10LHRoaXMudG89aX1tYXAoZSl7bGV0IHQ9ZS5tYXBQb3ModGhpcy5mcm9tLC0xLEcuVHJhY2tEZWwpLGk9ZS5tYXBQb3ModGhpcy50bywxLEcuVHJhY2tEZWwpO3JldHVybiB0PT1udWxsfHxpPT1udWxsP251bGw6bmV3IFIodGhpcy5maWVsZCx0LGkpfX0sQj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGluZXM9ZSx0aGlzLmZpZWxkUG9zaXRpb25zPXR9aW5zdGFudGlhdGUoZSx0KXtsZXQgaT1bXSxvPVt0XSxzPWUuZG9jLmxpbmVBdCh0KSxyPS9eXFxzKi8uZXhlYyhzLnRleHQpWzBdO2ZvcihsZXQgYyBvZiB0aGlzLmxpbmVzKXtpZihpLmxlbmd0aCl7bGV0IGE9cixmPS9eXFx0Ki8uZXhlYyhjKVswXS5sZW5ndGg7Zm9yKGxldCB1PTA7dTxmO3UrKylhKz1lLmZhY2V0KFhlKTtvLnB1c2godCthLmxlbmd0aC1mKSxjPWErYy5zbGljZShmKX1pLnB1c2goYyksdCs9Yy5sZW5ndGgrMX1sZXQgbD10aGlzLmZpZWxkUG9zaXRpb25zLm1hcChjPT5uZXcgUihjLmZpZWxkLG9bYy5saW5lXStjLmZyb20sb1tjLmxpbmVdK2MudG8pKTtyZXR1cm57dGV4dDppLHJhbmdlczpsfX1zdGF0aWMgcGFyc2UoZSl7bGV0IHQ9W10saT1bXSxvPVtdLHM7Zm9yKGxldCByIG9mIGUuc3BsaXQoL1xcclxcbj98XFxuLykpe2Zvcig7cz0vWyMkXVxceyg/OihcXGQrKSg/OjooW159XSopKT98KFtefV0qKSlcXH0vLmV4ZWMocik7KXtsZXQgbD1zWzFdPytzWzFdOm51bGwsYz1zWzJdfHxzWzNdfHxcIlwiLGE9LTE7Zm9yKGxldCBmPTA7Zjx0Lmxlbmd0aDtmKyspKGwhPW51bGw/dFtmXS5zZXE9PWw6Yz90W2ZdLm5hbWU9PWM6ITEpJiYoYT1mKTtpZihhPDApe2xldCBmPTA7Zm9yKDtmPHQubGVuZ3RoJiYobD09bnVsbHx8dFtmXS5zZXEhPW51bGwmJnRbZl0uc2VxPGwpOylmKys7dC5zcGxpY2UoZiwwLHtzZXE6bCxuYW1lOmN9KSxhPWY7Zm9yKGxldCB1IG9mIG8pdS5maWVsZD49YSYmdS5maWVsZCsrfW8ucHVzaChuZXcgaWUoYSxpLmxlbmd0aCxzLmluZGV4LHMuaW5kZXgrYy5sZW5ndGgpKSxyPXIuc2xpY2UoMCxzLmluZGV4KStjK3Iuc2xpY2Uocy5pbmRleCtzWzBdLmxlbmd0aCl9Zm9yKGxldCBsO2w9LyhbJCNdKVxcXFx7Ly5leGVjKHIpOyl7cj1yLnNsaWNlKDAsbC5pbmRleCkrbFsxXStcIntcIityLnNsaWNlKGwuaW5kZXgrbFswXS5sZW5ndGgpO2ZvcihsZXQgYyBvZiBvKWMubGluZT09aS5sZW5ndGgmJmMuZnJvbT5sLmluZGV4JiYoYy5mcm9tLS0sYy50by0tKX1pLnB1c2gocil9cmV0dXJuIG5ldyBCKGksbyl9fSxkdD1WLndpZGdldCh7d2lkZ2V0Om5ldyBjbGFzcyBleHRlbmRzIFFle3RvRE9NKCl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7cmV0dXJuIG4uY2xhc3NOYW1lPVwiY20tc25pcHBldEZpZWxkUG9zaXRpb25cIixufWlnbm9yZUV2ZW50KCl7cmV0dXJuITF9fX0pLG10PVYubWFyayh7Y2xhc3M6XCJjbS1zbmlwcGV0RmllbGRcIn0pLFM9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnJhbmdlcz1lLHRoaXMuYWN0aXZlPXQsdGhpcy5kZWNvPVYuc2V0KGUubWFwKGk9PihpLmZyb209PWkudG8/ZHQ6bXQpLnJhbmdlKGkuZnJvbSxpLnRvKSkpfW1hcChlKXtsZXQgdD1bXTtmb3IobGV0IGkgb2YgdGhpcy5yYW5nZXMpe2xldCBvPWkubWFwKGUpO2lmKCFvKXJldHVybiBudWxsO3QucHVzaChvKX1yZXR1cm4gbmV3IFModCx0aGlzLmFjdGl2ZSl9c2VsZWN0aW9uSW5zaWRlRmllbGQoZSl7cmV0dXJuIGUucmFuZ2VzLmV2ZXJ5KHQ9PnRoaXMucmFuZ2VzLnNvbWUoaT0+aS5maWVsZD09dGhpcy5hY3RpdmUmJmkuZnJvbTw9dC5mcm9tJiZpLnRvPj10LnRvKSl9fSwkPXYuZGVmaW5lKHttYXAobixlKXtyZXR1cm4gbiYmbi5tYXAoZSl9fSksZ3Q9di5kZWZpbmUoKSxEPW9lLmRlZmluZSh7Y3JlYXRlKCl7cmV0dXJuIG51bGx9LHVwZGF0ZShuLGUpe2ZvcihsZXQgdCBvZiBlLmVmZmVjdHMpe2lmKHQuaXMoJCkpcmV0dXJuIHQudmFsdWU7aWYodC5pcyhndCkmJm4pcmV0dXJuIG5ldyBTKG4ucmFuZ2VzLHQudmFsdWUpfXJldHVybiBuJiZlLmRvY0NoYW5nZWQmJihuPW4ubWFwKGUuY2hhbmdlcykpLG4mJmUuc2VsZWN0aW9uJiYhbi5zZWxlY3Rpb25JbnNpZGVGaWVsZChlLnNlbGVjdGlvbikmJihuPW51bGwpLG59LHByb3ZpZGU6bj0+ay5kZWNvcmF0aW9ucy5mcm9tKG4sZT0+ZT9lLmRlY286Vi5ub25lKX0pO2Z1bmN0aW9uIHJlKG4sZSl7cmV0dXJuIGcuY3JlYXRlKG4uZmlsdGVyKHQ9PnQuZmllbGQ9PWUpLm1hcCh0PT5nLnJhbmdlKHQuZnJvbSx0LnRvKSkpfWZ1bmN0aW9uIGJ0KG4pe2xldCBlPUIucGFyc2Uobik7cmV0dXJuKHQsaSxvLHMpPT57bGV0e3RleHQ6cixyYW5nZXM6bH09ZS5pbnN0YW50aWF0ZSh0LnN0YXRlLG8pLGM9e2NoYW5nZXM6e2Zyb206byx0bzpzLGluc2VydDpOZS5vZihyKX0sc2Nyb2xsSW50b1ZpZXc6ITB9O2lmKGwubGVuZ3RoJiYoYy5zZWxlY3Rpb249cmUobCwwKSksbC5sZW5ndGg+MSl7bGV0IGE9bmV3IFMobCwwKSxmPWMuZWZmZWN0cz1bJC5vZihhKV07dC5zdGF0ZS5maWVsZChELCExKT09PXZvaWQgMCYmZi5wdXNoKHYuYXBwZW5kQ29uZmlnLm9mKFtELEN0LEl0LFJlXSkpfXQuZGlzcGF0Y2godC5zdGF0ZS51cGRhdGUoYykpfX1mdW5jdGlvbiBCZShuKXtyZXR1cm4oe3N0YXRlOmUsZGlzcGF0Y2g6dH0pPT57bGV0IGk9ZS5maWVsZChELCExKTtpZighaXx8bjwwJiZpLmFjdGl2ZT09MClyZXR1cm4hMTtsZXQgbz1pLmFjdGl2ZStuLHM9bj4wJiYhaS5yYW5nZXMuc29tZShyPT5yLmZpZWxkPT1vK24pO3JldHVybiB0KGUudXBkYXRlKHtzZWxlY3Rpb246cmUoaS5yYW5nZXMsbyksZWZmZWN0czokLm9mKHM/bnVsbDpuZXcgUyhpLnJhbmdlcyxvKSl9KSksITB9fXZhciB4dD0oe3N0YXRlOm4sZGlzcGF0Y2g6ZX0pPT5uLmZpZWxkKEQsITEpPyhlKG4udXBkYXRlKHtlZmZlY3RzOiQub2YobnVsbCl9KSksITApOiExLHl0PUJlKDEpLHd0PUJlKC0xKSx2dD1be2tleTpcIlRhYlwiLHJ1bjp5dCxzaGlmdDp3dH0se2tleTpcIkVzY2FwZVwiLHJ1bjp4dH1dLGJlPUVlLmRlZmluZSh7Y29tYmluZShuKXtyZXR1cm4gbi5sZW5ndGg/blswXTp2dH19KSxDdD1QZS5oaWdoZXN0KE9lLmNvbXB1dGUoW2JlXSxuPT5uLmZhY2V0KGJlKSkpO2Z1bmN0aW9uIFZ0KG4sZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlKSx7YXBwbHk6YnQobil9KX12YXIgSXQ9ay5kb21FdmVudEhhbmRsZXJzKHttb3VzZWRvd24obixlKXtsZXQgdD1lLnN0YXRlLmZpZWxkKEQsITEpLGk7aWYoIXR8fChpPWUucG9zQXRDb29yZHMoe3g6bi5jbGllbnRYLHk6bi5jbGllbnRZfSkpPT1udWxsKXJldHVybiExO2xldCBvPXQucmFuZ2VzLmZpbmQocz0+cy5mcm9tPD1pJiZzLnRvPj1pKTtyZXR1cm4hb3x8by5maWVsZD09dC5hY3RpdmU/ITE6KGUuZGlzcGF0Y2goe3NlbGVjdGlvbjpyZSh0LnJhbmdlcyxvLmZpZWxkKSxlZmZlY3RzOiQub2YodC5yYW5nZXMuc29tZShzPT5zLmZpZWxkPm8uZmllbGQpP25ldyBTKHQucmFuZ2VzLG8uZmllbGQpOm51bGwpfSksITApfX0pO2Z1bmN0aW9uIFN0KG4pe2xldCBlPW4ucmVwbGFjZSgvW1xcXFxbLisqPygpe3xeJF0vZyxcIlxcXFwkJlwiKTt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoYFtcXFxccHtBbHBoYWJldGljfVxcXFxwe051bWJlcn1fJHtlfV0rYCxcInVnXCIpfWNhdGNoe3JldHVybiBuZXcgUmVnRXhwKGBbdyR7ZX1dYCxcImdcIil9fWZ1bmN0aW9uIHhlKG4sZSl7cmV0dXJuIG5ldyBSZWdFeHAoZShuLnNvdXJjZSksbi51bmljb2RlP1widVwiOlwiXCIpfXZhciB5ZT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIEV0KG4pe3JldHVybiB5ZVtuXXx8KHllW25dPW5ldyBXZWFrTWFwKX1mdW5jdGlvbiB3ZShuLGUsdCxpLG8pe2ZvcihsZXQgcz1uLml0ZXJMaW5lcygpLHI9MDshcy5uZXh0KCkuZG9uZTspe2xldHt2YWx1ZTpsfT1zLGM7Zm9yKGUubGFzdEluZGV4PTA7Yz1lLmV4ZWMobCk7KWlmKCFpW2NbMF1dJiZyK2MuaW5kZXghPW8mJih0LnB1c2goe3R5cGU6XCJ0ZXh0XCIsbGFiZWw6Y1swXX0pLGlbY1swXV09ITAsdC5sZW5ndGg+PTJlMykpcmV0dXJuO3IrPWwubGVuZ3RoKzF9fWZ1bmN0aW9uIERlKG4sZSx0LGksbyl7bGV0IHM9bi5sZW5ndGg+PTFlMyxyPXMmJmUuZ2V0KG4pO2lmKHIpcmV0dXJuIHI7bGV0IGw9W10sYz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4uY2hpbGRyZW4pe2xldCBhPTA7Zm9yKGxldCBmIG9mIG4uY2hpbGRyZW4pe2lmKGYubGVuZ3RoPj0xZTMpZm9yKGxldCB1IG9mIERlKGYsZSx0LGktYSxvLWEpKWNbdS5sYWJlbF18fChjW3UubGFiZWxdPSEwLGwucHVzaCh1KSk7ZWxzZSB3ZShmLHQsbCxjLG8tYSk7YSs9Zi5sZW5ndGgrMX19ZWxzZSB3ZShuLHQsbCxjLG8pO3JldHVybiBzJiZsLmxlbmd0aDwyZTMmJmUuc2V0KG4sbCksbH12YXIgcXQ9bj0+e2xldCBlPW4uc3RhdGUubGFuZ3VhZ2VEYXRhQXQoXCJ3b3JkQ2hhcnNcIixuLnBvcykuam9pbihcIlwiKSx0PVN0KGUpLGk9bi5tYXRjaEJlZm9yZSh4ZSh0LHI9PnIrXCIkXCIpKTtpZighaSYmIW4uZXhwbGljaXQpcmV0dXJuIG51bGw7bGV0IG89aT9pLmZyb206bi5wb3Mscz1EZShuLnN0YXRlLmRvYyxFdChlKSx0LDVlNCxvKTtyZXR1cm57ZnJvbTpvLG9wdGlvbnM6cyx2YWxpZEZvcjp4ZSh0LHI9PlwiXlwiK3IpfX0sTD17YnJhY2tldHM6W1wiKFwiLFwiW1wiLFwie1wiLFwiJ1wiLCdcIiddLGJlZm9yZTpcIildfTo7PlwiLHN0cmluZ1ByZWZpeGVzOltdfSxFPXYuZGVmaW5lKHttYXAobixlKXtsZXQgdD1lLm1hcFBvcyhuLC0xLEcuVHJhY2tBZnRlcik7cmV0dXJuIHQ/P3ZvaWQgMH19KSxjZT12LmRlZmluZSh7bWFwKG4sZSl7cmV0dXJuIGUubWFwUG9zKG4pfX0pLGFlPW5ldyBjbGFzcyBleHRlbmRzIEhle307YWUuc3RhcnRTaWRlPTE7YWUuZW5kU2lkZT0tMTt2YXIgTGU9b2UuZGVmaW5lKHtjcmVhdGUoKXtyZXR1cm4gZmUuZW1wdHl9LHVwZGF0ZShuLGUpe2lmKGUuc2VsZWN0aW9uKXtsZXQgdD1lLnN0YXRlLmRvYy5saW5lQXQoZS5zZWxlY3Rpb24ubWFpbi5oZWFkKS5mcm9tLGk9ZS5zdGFydFN0YXRlLmRvYy5saW5lQXQoZS5zdGFydFN0YXRlLnNlbGVjdGlvbi5tYWluLmhlYWQpLmZyb207dCE9ZS5jaGFuZ2VzLm1hcFBvcyhpLC0xKSYmKG49ZmUuZW1wdHkpfW49bi5tYXAoZS5jaGFuZ2VzKTtmb3IobGV0IHQgb2YgZS5lZmZlY3RzKXQuaXMoRSk/bj1uLnVwZGF0ZSh7YWRkOlthZS5yYW5nZSh0LnZhbHVlLHQudmFsdWUrMSldfSk6dC5pcyhjZSkmJihuPW4udXBkYXRlKHtmaWx0ZXI6aT0+aSE9dC52YWx1ZX0pKTtyZXR1cm4gbn19KTtmdW5jdGlvbiBLdCgpe3JldHVybltPdCxMZV19dmFyIFk9XCIoKVtde308PlwiO2Z1bmN0aW9uIGtlKG4pe2ZvcihsZXQgZT0wO2U8WS5sZW5ndGg7ZSs9MilpZihZLmNoYXJDb2RlQXQoZSk9PW4pcmV0dXJuIFkuY2hhckF0KGUrMSk7cmV0dXJuIFNlKG48MTI4P246bisxKX1mdW5jdGlvbiBXZShuLGUpe3JldHVybiBuLmxhbmd1YWdlRGF0YUF0KFwiY2xvc2VCcmFja2V0c1wiLGUpWzBdfHxMfXZhciBQdD10eXBlb2YgbmF2aWdhdG9yPT1cIm9iamVjdFwiJiYvQW5kcm9pZFxcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxPdD1rLmlucHV0SGFuZGxlci5vZigobixlLHQsaSk9PntpZigoUHQ/bi5jb21wb3Npbmc6bi5jb21wb3NpdGlvblN0YXJ0ZWQpfHxuLnN0YXRlLnJlYWRPbmx5KXJldHVybiExO2xldCBvPW4uc3RhdGUuc2VsZWN0aW9uLm1haW47aWYoaS5sZW5ndGg+Mnx8aS5sZW5ndGg9PTImJncoeShpLDApKT09MXx8ZSE9by5mcm9tfHx0IT1vLnRvKXJldHVybiExO2xldCBzPVR0KG4uc3RhdGUsaSk7cmV0dXJuIHM/KG4uZGlzcGF0Y2gocyksITApOiExfSksQXQ9KHtzdGF0ZTpuLGRpc3BhdGNoOmV9KT0+e2lmKG4ucmVhZE9ubHkpcmV0dXJuITE7bGV0IGk9V2UobixuLnNlbGVjdGlvbi5tYWluLmhlYWQpLmJyYWNrZXRzfHxMLmJyYWNrZXRzLG89bnVsbCxzPW4uY2hhbmdlQnlSYW5nZShyPT57aWYoci5lbXB0eSl7bGV0IGw9TXQobi5kb2Msci5oZWFkKTtmb3IobGV0IGMgb2YgaSlpZihjPT1sJiZxKG4uZG9jLHIuaGVhZCk9PWtlKHkoYywwKSkpcmV0dXJue2NoYW5nZXM6e2Zyb206ci5oZWFkLWMubGVuZ3RoLHRvOnIuaGVhZCtjLmxlbmd0aH0scmFuZ2U6Zy5jdXJzb3Ioci5oZWFkLWMubGVuZ3RoKX19cmV0dXJue3JhbmdlOm89cn19KTtyZXR1cm4gb3x8ZShuLnVwZGF0ZShzLHtzY3JvbGxJbnRvVmlldzohMCx1c2VyRXZlbnQ6XCJkZWxldGUuYmFja3dhcmRcIn0pKSwhb30senQ9W3trZXk6XCJCYWNrc3BhY2VcIixydW46QXR9XTtmdW5jdGlvbiBUdChuLGUpe2xldCB0PVdlKG4sbi5zZWxlY3Rpb24ubWFpbi5oZWFkKSxpPXQuYnJhY2tldHN8fEwuYnJhY2tldHM7Zm9yKGxldCBvIG9mIGkpe2xldCBzPWtlKHkobywwKSk7aWYoZT09bylyZXR1cm4gcz09bz9EdChuLG8saS5pbmRleE9mKG8rbytvKT4tMSx0KTpSdChuLG8scyx0LmJlZm9yZXx8TC5iZWZvcmUpO2lmKGU9PXMmJiRlKG4sbi5zZWxlY3Rpb24ubWFpbi5mcm9tKSlyZXR1cm4gQnQobixvLHMpfXJldHVybiBudWxsfWZ1bmN0aW9uICRlKG4sZSl7bGV0IHQ9ITE7cmV0dXJuIG4uZmllbGQoTGUpLmJldHdlZW4oMCxuLmRvYy5sZW5ndGgsaT0+e2k9PWUmJih0PSEwKX0pLHR9ZnVuY3Rpb24gcShuLGUpe2xldCB0PW4uc2xpY2VTdHJpbmcoZSxlKzIpO3JldHVybiB0LnNsaWNlKDAsdyh5KHQsMCkpKX1mdW5jdGlvbiBNdChuLGUpe2xldCB0PW4uc2xpY2VTdHJpbmcoZS0yLGUpO3JldHVybiB3KHkodCwwKSk9PXQubGVuZ3RoP3Q6dC5zbGljZSgxKX1mdW5jdGlvbiBSdChuLGUsdCxpKXtsZXQgbz1udWxsLHM9bi5jaGFuZ2VCeVJhbmdlKHI9PntpZighci5lbXB0eSlyZXR1cm57Y2hhbmdlczpbe2luc2VydDplLGZyb206ci5mcm9tfSx7aW5zZXJ0OnQsZnJvbTpyLnRvfV0sZWZmZWN0czpFLm9mKHIudG8rZS5sZW5ndGgpLHJhbmdlOmcucmFuZ2Uoci5hbmNob3IrZS5sZW5ndGgsci5oZWFkK2UubGVuZ3RoKX07bGV0IGw9cShuLmRvYyxyLmhlYWQpO3JldHVybiFsfHwvXFxzLy50ZXN0KGwpfHxpLmluZGV4T2YobCk+LTE/e2NoYW5nZXM6e2luc2VydDplK3QsZnJvbTpyLmhlYWR9LGVmZmVjdHM6RS5vZihyLmhlYWQrZS5sZW5ndGgpLHJhbmdlOmcuY3Vyc29yKHIuaGVhZCtlLmxlbmd0aCl9OntyYW5nZTpvPXJ9fSk7cmV0dXJuIG8/bnVsbDpuLnVwZGF0ZShzLHtzY3JvbGxJbnRvVmlldzohMCx1c2VyRXZlbnQ6XCJpbnB1dC50eXBlXCJ9KX1mdW5jdGlvbiBCdChuLGUsdCl7bGV0IGk9bnVsbCxvPW4uc2VsZWN0aW9uLnJhbmdlcy5tYXAocz0+cy5lbXB0eSYmcShuLmRvYyxzLmhlYWQpPT10P2cuY3Vyc29yKHMuaGVhZCt0Lmxlbmd0aCk6aT1zKTtyZXR1cm4gaT9udWxsOm4udXBkYXRlKHtzZWxlY3Rpb246Zy5jcmVhdGUobyxuLnNlbGVjdGlvbi5tYWluSW5kZXgpLHNjcm9sbEludG9WaWV3OiEwLGVmZmVjdHM6bi5zZWxlY3Rpb24ucmFuZ2VzLm1hcCgoe2Zyb206c30pPT5jZS5vZihzKSl9KX1mdW5jdGlvbiBEdChuLGUsdCxpKXtsZXQgbz1pLnN0cmluZ1ByZWZpeGVzfHxMLnN0cmluZ1ByZWZpeGVzLHM9bnVsbCxyPW4uY2hhbmdlQnlSYW5nZShsPT57aWYoIWwuZW1wdHkpcmV0dXJue2NoYW5nZXM6W3tpbnNlcnQ6ZSxmcm9tOmwuZnJvbX0se2luc2VydDplLGZyb206bC50b31dLGVmZmVjdHM6RS5vZihsLnRvK2UubGVuZ3RoKSxyYW5nZTpnLnJhbmdlKGwuYW5jaG9yK2UubGVuZ3RoLGwuaGVhZCtlLmxlbmd0aCl9O2xldCBjPWwuaGVhZCxhPXEobi5kb2MsYyksZjtpZihhPT1lKXtpZih2ZShuLGMpKXJldHVybntjaGFuZ2VzOntpbnNlcnQ6ZStlLGZyb206Y30sZWZmZWN0czpFLm9mKGMrZS5sZW5ndGgpLHJhbmdlOmcuY3Vyc29yKGMrZS5sZW5ndGgpfTtpZigkZShuLGMpKXtsZXQgdT10JiZuLnNsaWNlRG9jKGMsYytlLmxlbmd0aCozKT09ZStlK2U7cmV0dXJue3JhbmdlOmcuY3Vyc29yKGMrZS5sZW5ndGgqKHU/MzoxKSksZWZmZWN0czpjZS5vZihjKX19fWVsc2V7aWYodCYmbi5zbGljZURvYyhjLTIqZS5sZW5ndGgsYyk9PWUrZSYmKGY9Q2UobixjLTIqZS5sZW5ndGgsbykpPi0xJiZ2ZShuLGYpKXJldHVybntjaGFuZ2VzOntpbnNlcnQ6ZStlK2UrZSxmcm9tOmN9LGVmZmVjdHM6RS5vZihjK2UubGVuZ3RoKSxyYW5nZTpnLmN1cnNvcihjK2UubGVuZ3RoKX07aWYobi5jaGFyQ2F0ZWdvcml6ZXIoYykoYSkhPUouV29yZCYmQ2UobixjLG8pPi0xJiYhTHQobixjLGUsbykpcmV0dXJue2NoYW5nZXM6e2luc2VydDplK2UsZnJvbTpjfSxlZmZlY3RzOkUub2YoYytlLmxlbmd0aCkscmFuZ2U6Zy5jdXJzb3IoYytlLmxlbmd0aCl9fXJldHVybntyYW5nZTpzPWx9fSk7cmV0dXJuIHM/bnVsbDpuLnVwZGF0ZShyLHtzY3JvbGxJbnRvVmlldzohMCx1c2VyRXZlbnQ6XCJpbnB1dC50eXBlXCJ9KX1mdW5jdGlvbiB2ZShuLGUpe2xldCB0PVcobikucmVzb2x2ZUlubmVyKGUrMSk7cmV0dXJuIHQucGFyZW50JiZ0LmZyb209PWV9ZnVuY3Rpb24gTHQobixlLHQsaSl7bGV0IG89VyhuKS5yZXNvbHZlSW5uZXIoZSwtMSkscz1pLnJlZHVjZSgocixsKT0+TWF0aC5tYXgocixsLmxlbmd0aCksMCk7Zm9yKGxldCByPTA7cjw1O3IrKyl7bGV0IGw9bi5zbGljZURvYyhvLmZyb20sTWF0aC5taW4oby50byxvLmZyb20rdC5sZW5ndGgrcykpLGM9bC5pbmRleE9mKHQpO2lmKCFjfHxjPi0xJiZpLmluZGV4T2YobC5zbGljZSgwLGMpKT4tMSl7bGV0IGY9by5maXJzdENoaWxkO2Zvcig7ZiYmZi5mcm9tPT1vLmZyb20mJmYudG8tZi5mcm9tPnQubGVuZ3RoK2M7KXtpZihuLnNsaWNlRG9jKGYudG8tdC5sZW5ndGgsZi50byk9PXQpcmV0dXJuITE7Zj1mLmZpcnN0Q2hpbGR9cmV0dXJuITB9bGV0IGE9by50bz09ZSYmby5wYXJlbnQ7aWYoIWEpYnJlYWs7bz1hfXJldHVybiExfWZ1bmN0aW9uIENlKG4sZSx0KXtsZXQgaT1uLmNoYXJDYXRlZ29yaXplcihlKTtpZihpKG4uc2xpY2VEb2MoZS0xLGUpKSE9Si5Xb3JkKXJldHVybiBlO2ZvcihsZXQgbyBvZiB0KXtsZXQgcz1lLW8ubGVuZ3RoO2lmKG4uc2xpY2VEb2MocyxlKT09byYmaShuLnNsaWNlRG9jKHMtMSxzKSkhPUouV29yZClyZXR1cm4gc31yZXR1cm4tMX1mdW5jdGlvbiBRdChuPXt9KXtyZXR1cm5bZCx4Lm9mKG4pLHB0LFd0LFJlXX12YXIga3Q9W3trZXk6XCJDdHJsLVNwYWNlXCIscnVuOmF0fSx7a2V5OlwiRXNjYXBlXCIscnVuOmZ0fSx7a2V5OlwiQXJyb3dEb3duXCIscnVuOlUoITApfSx7a2V5OlwiQXJyb3dVcFwiLHJ1bjpVKCExKX0se2tleTpcIlBhZ2VEb3duXCIscnVuOlUoITAsXCJwYWdlXCIpfSx7a2V5OlwiUGFnZVVwXCIscnVuOlUoITEsXCJwYWdlXCIpfSx7a2V5OlwiRW50ZXJcIixydW46Y3R9XSxXdD1QZS5oaWdoZXN0KE9lLmNvbXB1dGVOKFt4XSxuPT5uLmZhY2V0KHgpLmRlZmF1bHRLZXltYXA/W2t0XTpbXSkpO2Z1bmN0aW9uIFh0KG4pe2xldCBlPW4uZmllbGQoZCwhMSk7cmV0dXJuIGUmJmUuYWN0aXZlLnNvbWUodD0+dC5zdGF0ZT09MSk/XCJwZW5kaW5nXCI6ZSYmZS5hY3RpdmUuc29tZSh0PT50LnN0YXRlIT0wKT9cImFjdGl2ZVwiOm51bGx9dmFyIEllPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFl0KG4pe3ZhciBlO2xldCB0PShlPW4uZmllbGQoZCwhMSkpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5vcGVuO2lmKCF0KXJldHVybltdO2xldCBpPUllLmdldCh0Lm9wdGlvbnMpO3JldHVybiBpfHxJZS5zZXQodC5vcHRpb25zLGk9dC5vcHRpb25zLm1hcChvPT5vLmNvbXBsZXRpb24pKSxpfWZ1bmN0aW9uIEd0KG4pe3ZhciBlO2xldCB0PShlPW4uZmllbGQoZCwhMSkpPT09bnVsbHx8ZT09PXZvaWQgMD92b2lkIDA6ZS5vcGVuO3JldHVybiB0JiZ0LnNlbGVjdGVkPj0wP3Qub3B0aW9uc1t0LnNlbGVjdGVkXS5jb21wbGV0aW9uOm51bGx9ZnVuY3Rpb24gSnQobil7dmFyIGU7bGV0IHQ9KGU9bi5maWVsZChkLCExKSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLm9wZW47cmV0dXJuIHQmJnQuc2VsZWN0ZWQ+PTA/dC5zZWxlY3RlZDpudWxsfWZ1bmN0aW9uIFp0KG4pe3JldHVybiBsZS5vZihuKX1leHBvcnR7RiBhcyBDb21wbGV0aW9uQ29udGV4dCxjdCBhcyBhY2NlcHRDb21wbGV0aW9uLFF0IGFzIGF1dG9jb21wbGV0aW9uLHh0IGFzIGNsZWFyU25pcHBldCxLdCBhcyBjbG9zZUJyYWNrZXRzLHp0IGFzIGNsb3NlQnJhY2tldHNLZXltYXAsZnQgYXMgY2xvc2VDb21wbGV0aW9uLHF0IGFzIGNvbXBsZXRlQW55V29yZCxHZSBhcyBjb21wbGV0ZUZyb21MaXN0LGt0IGFzIGNvbXBsZXRpb25LZXltYXAsWHQgYXMgY29tcGxldGlvblN0YXR1cyxZdCBhcyBjdXJyZW50Q29tcGxldGlvbnMsQXQgYXMgZGVsZXRlQnJhY2tldFBhaXIsRnQgYXMgaWZJbixOdCBhcyBpZk5vdEluLFR0IGFzIGluc2VydEJyYWNrZXQsSmUgYXMgaW5zZXJ0Q29tcGxldGlvblRleHQsVSBhcyBtb3ZlQ29tcGxldGlvblNlbGVjdGlvbix5dCBhcyBuZXh0U25pcHBldEZpZWxkLEh0IGFzIHBpY2tlZENvbXBsZXRpb24sd3QgYXMgcHJldlNuaXBwZXRGaWVsZCxHdCBhcyBzZWxlY3RlZENvbXBsZXRpb24sSnQgYXMgc2VsZWN0ZWRDb21wbGV0aW9uSW5kZXgsWnQgYXMgc2V0U2VsZWN0ZWRDb21wbGV0aW9uLGJ0IGFzIHNuaXBwZXQsVnQgYXMgc25pcHBldENvbXBsZXRpb24sYmUgYXMgc25pcHBldEtleW1hcCxhdCBhcyBzdGFydENvbXBsZXRpb259O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBjb2RlbWlycm9yL2xhbmctamF2YXNjcmlwdEA2LjEuMCkgZGVubyBwcm9kdWN0aW9uICovXG5pbXBvcnR7cGFyc2VyIGFzIFB9ZnJvbVwiL3Y5Ni9AbGV6ZXIvamF2YXNjcmlwdEAxLjAuMi9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9qYXZhc2NyaXB0LmpzXCI7aW1wb3J0e3N5bnRheFRyZWUgYXMgdyxMUkxhbmd1YWdlIGFzIEwsaW5kZW50Tm9kZVByb3AgYXMgTixjb250aW51ZWRJbmRlbnQgYXMgJCxmbGF0SW5kZW50IGFzIEEsZGVsaW1pdGVkSW5kZW50IGFzIEYsZm9sZE5vZGVQcm9wIGFzIEIsZm9sZEluc2lkZSBhcyBPLExhbmd1YWdlU3VwcG9ydCBhcyBKfWZyb21cIkBjb2RlbWlycm9yL2xhbmd1YWdlXCI7aW1wb3J0e0VkaXRvclNlbGVjdGlvbiBhcyBTfWZyb21cIkBjb2RlbWlycm9yL3N0YXRlXCI7aW1wb3J0e0VkaXRvclZpZXcgYXMgWH1mcm9tXCJAY29kZW1pcnJvci92aWV3XCI7aW1wb3J0e3NuaXBwZXRDb21wbGV0aW9uIGFzIGYsaWZOb3RJbiBhcyBqLGNvbXBsZXRlRnJvbUxpc3QgYXMgVn1mcm9tXCIvdjk2L0Bjb2RlbWlycm9yL2F1dG9jb21wbGV0ZUA2LjMuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9hdXRvY29tcGxldGUuanNcIjtpbXBvcnR7Tm9kZVdlYWtNYXAgYXMgXyxJdGVyTW9kZSBhcyBNfWZyb21cIkBsZXplci9jb21tb25cIjt2YXIgUj1bZihcImZ1bmN0aW9uICR7bmFtZX0oJHtwYXJhbXN9KSB7XFxuXHQke31cXG59XCIse2xhYmVsOlwiZnVuY3Rpb25cIixkZXRhaWw6XCJkZWZpbml0aW9uXCIsdHlwZTpcImtleXdvcmRcIn0pLGYoXCJmb3IgKGxldCAke2luZGV4fSA9IDA7ICR7aW5kZXh9IDwgJHtib3VuZH07ICR7aW5kZXh9KyspIHtcXG5cdCR7fVxcbn1cIix7bGFiZWw6XCJmb3JcIixkZXRhaWw6XCJsb29wXCIsdHlwZTpcImtleXdvcmRcIn0pLGYoXCJmb3IgKGxldCAke25hbWV9IG9mICR7Y29sbGVjdGlvbn0pIHtcXG5cdCR7fVxcbn1cIix7bGFiZWw6XCJmb3JcIixkZXRhaWw6XCJvZiBsb29wXCIsdHlwZTpcImtleXdvcmRcIn0pLGYoXCJkbyB7XFxuXHQke31cXG59IHdoaWxlICgke30pXCIse2xhYmVsOlwiZG9cIixkZXRhaWw6XCJsb29wXCIsdHlwZTpcImtleXdvcmRcIn0pLGYoXCJ3aGlsZSAoJHt9KSB7XFxuXHQke31cXG59XCIse2xhYmVsOlwid2hpbGVcIixkZXRhaWw6XCJsb29wXCIsdHlwZTpcImtleXdvcmRcIn0pLGYoYHRyeSB7XG5cdFxcJHt9XG59IGNhdGNoIChcXCR7ZXJyb3J9KSB7XG5cdFxcJHt9XG59YCx7bGFiZWw6XCJ0cnlcIixkZXRhaWw6XCIvIGNhdGNoIGJsb2NrXCIsdHlwZTpcImtleXdvcmRcIn0pLGYoXCJpZiAoJHt9KSB7XFxuXHQke31cXG59XCIse2xhYmVsOlwiaWZcIixkZXRhaWw6XCJibG9ja1wiLHR5cGU6XCJrZXl3b3JkXCJ9KSxmKGBpZiAoXFwke30pIHtcblx0XFwke31cbn0gZWxzZSB7XG5cdFxcJHt9XG59YCx7bGFiZWw6XCJpZlwiLGRldGFpbDpcIi8gZWxzZSBibG9ja1wiLHR5cGU6XCJrZXl3b3JkXCJ9KSxmKGBjbGFzcyBcXCR7bmFtZX0ge1xuXHRjb25zdHJ1Y3RvcihcXCR7cGFyYW1zfSkge1xuXHRcdFxcJHt9XG5cdH1cbn1gLHtsYWJlbDpcImNsYXNzXCIsZGV0YWlsOlwiZGVmaW5pdGlvblwiLHR5cGU6XCJrZXl3b3JkXCJ9KSxmKCdpbXBvcnQgeyR7bmFtZXN9fSBmcm9tIFwiJHttb2R1bGV9XCJcXG4ke30nLHtsYWJlbDpcImltcG9ydFwiLGRldGFpbDpcIm5hbWVkXCIsdHlwZTpcImtleXdvcmRcIn0pLGYoJ2ltcG9ydCAke25hbWV9IGZyb20gXCIke21vZHVsZX1cIlxcbiR7fScse2xhYmVsOlwiaW1wb3J0XCIsZGV0YWlsOlwiZGVmYXVsdFwiLHR5cGU6XCJrZXl3b3JkXCJ9KV0sST1uZXcgXyxUPW5ldyBTZXQoW1wiU2NyaXB0XCIsXCJCbG9ja1wiLFwiRnVuY3Rpb25FeHByZXNzaW9uXCIsXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIsXCJBcnJvd0Z1bmN0aW9uXCIsXCJNZXRob2REZWNsYXJhdGlvblwiLFwiRm9yU3RhdGVtZW50XCJdKTtmdW5jdGlvbiBkKGUpe3JldHVybih0LHIpPT57bGV0IG49dC5ub2RlLmdldENoaWxkKFwiVmFyaWFibGVEZWZpbml0aW9uXCIpO3JldHVybiBuJiZyKG4sZSksITB9fXZhciBXPVtcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIl0sSD17RnVuY3Rpb25EZWNsYXJhdGlvbjpkKFwiZnVuY3Rpb25cIiksQ2xhc3NEZWNsYXJhdGlvbjpkKFwiY2xhc3NcIiksQ2xhc3NFeHByZXNzaW9uOigpPT4hMCxFbnVtRGVjbGFyYXRpb246ZChcImNvbnN0YW50XCIpLFR5cGVBbGlhc0RlY2xhcmF0aW9uOmQoXCJ0eXBlXCIpLE5hbWVzcGFjZURlY2xhcmF0aW9uOmQoXCJuYW1lc3BhY2VcIiksVmFyaWFibGVEZWZpbml0aW9uKGUsdCl7ZS5tYXRjaENvbnRleHQoVyl8fHQoZSxcInZhcmlhYmxlXCIpfSxUeXBlRGVmaW5pdGlvbihlLHQpe3QoZSxcInR5cGVcIil9LF9fcHJvdG9fXzpudWxsfTtmdW5jdGlvbiB4KGUsdCl7bGV0IHI9SS5nZXQodCk7aWYocilyZXR1cm4gcjtsZXQgbj1bXSxvPSEwO2Z1bmN0aW9uIGEobCxpKXtsZXQgYz1lLnNsaWNlU3RyaW5nKGwuZnJvbSxsLnRvKTtuLnB1c2goe2xhYmVsOmMsdHlwZTppfSl9cmV0dXJuIHQuY3Vyc29yKE0uSW5jbHVkZUFub255bW91cykuaXRlcmF0ZShsPT57aWYobylvPSExO2Vsc2UgaWYobC5uYW1lKXtsZXQgaT1IW2wubmFtZV07aWYoaSYmaShsLGEpfHxULmhhcyhsLm5hbWUpKXJldHVybiExfWVsc2UgaWYobC50by1sLmZyb20+ODE5Mil7Zm9yKGxldCBpIG9mIHgoZSxsLm5vZGUpKW4ucHVzaChpKTtyZXR1cm4hMX19KSxJLnNldCh0LG4pLG59dmFyIGI9L15bXFx3JFxceGExLVxcdWZmZmZdW1xcdyRcXGRcXHhhMS1cXHVmZmZmXSokLyxrPVtcIlRlbXBsYXRlU3RyaW5nXCIsXCJTdHJpbmdcIixcIlJlZ0V4cFwiLFwiTGluZUNvbW1lbnRcIixcIkJsb2NrQ29tbWVudFwiLFwiVmFyaWFibGVEZWZpbml0aW9uXCIsXCJUeXBlRGVmaW5pdGlvblwiLFwiTGFiZWxcIixcIlByb3BlcnR5RGVmaW5pdGlvblwiLFwiUHJvcGVydHlOYW1lXCIsXCJQcml2YXRlUHJvcGVydHlEZWZpbml0aW9uXCIsXCJQcml2YXRlUHJvcGVydHlOYW1lXCJdO2Z1bmN0aW9uIFooZSl7bGV0IHQ9dyhlLnN0YXRlKS5yZXNvbHZlSW5uZXIoZS5wb3MsLTEpO2lmKGsuaW5kZXhPZih0Lm5hbWUpPi0xKXJldHVybiBudWxsO2xldCByPXQubmFtZT09XCJWYXJpYWJsZU5hbWVcInx8dC50by10LmZyb208MjAmJmIudGVzdChlLnN0YXRlLnNsaWNlRG9jKHQuZnJvbSx0LnRvKSk7aWYoIXImJiFlLmV4cGxpY2l0KXJldHVybiBudWxsO2xldCBuPVtdO2ZvcihsZXQgbz10O287bz1vLnBhcmVudClULmhhcyhvLm5hbWUpJiYobj1uLmNvbmNhdCh4KGUuc3RhdGUuZG9jLG8pKSk7cmV0dXJue29wdGlvbnM6bixmcm9tOnI/dC5mcm9tOmUucG9zLHZhbGlkRm9yOmJ9fWZ1bmN0aW9uIHYoZSx0LHIpe3ZhciBuO2xldCBvPVtdO2Zvcig7Oyl7bGV0IGE9dC5maXJzdENoaWxkLGw7aWYoYT8ubmFtZT09XCJWYXJpYWJsZU5hbWVcIilyZXR1cm4gby5wdXNoKGUoYSkpLHtwYXRoOm8ucmV2ZXJzZSgpLG5hbWU6cn07aWYoYT8ubmFtZT09XCJNZW1iZXJFeHByZXNzaW9uXCImJigobj1sPWEubGFzdENoaWxkKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4ubmFtZSk9PVwiUHJvcGVydHlOYW1lXCIpby5wdXNoKGUobCkpLHQ9YTtlbHNlIHJldHVybiBudWxsfX1mdW5jdGlvbiBxKGUpe2xldCB0PW49PmUuc3RhdGUuZG9jLnNsaWNlU3RyaW5nKG4uZnJvbSxuLnRvKSxyPXcoZS5zdGF0ZSkucmVzb2x2ZUlubmVyKGUucG9zLC0xKTtyZXR1cm4gci5uYW1lPT1cIlByb3BlcnR5TmFtZVwiP3YodCxyLnBhcmVudCx0KHIpKTprLmluZGV4T2Yoci5uYW1lKT4tMT9udWxsOnIubmFtZT09XCJWYXJpYWJsZU5hbWVcInx8ci50by1yLmZyb208MjAmJmIudGVzdCh0KHIpKT97cGF0aDpbXSxuYW1lOnQocil9OnIubmFtZT09XCIuXCImJnIucGFyZW50Lm5hbWU9PVwiTWVtYmVyRXhwcmVzc2lvblwiP3YodCxyLnBhcmVudCxcIlwiKTpyLm5hbWU9PVwiTWVtYmVyRXhwcmVzc2lvblwiP3YodCxyLFwiXCIpOmUuZXhwbGljaXQ/e3BhdGg6W10sbmFtZTpcIlwifTpudWxsfWZ1bmN0aW9uIHooZSx0KXtsZXQgcj1bXSxuPW5ldyBTZXQ7Zm9yKGxldCBvPTA7O28rKyl7Zm9yKGxldCBsIG9mKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxPYmplY3Qua2V5cykoZSkpe2lmKG4uaGFzKGwpKWNvbnRpbnVlO24uYWRkKGwpO2xldCBpO3RyeXtpPWVbbF19Y2F0Y2h7Y29udGludWV9ci5wdXNoKHtsYWJlbDpsLHR5cGU6dHlwZW9mIGk9PVwiZnVuY3Rpb25cIj8vXltBLVpdLy50ZXN0KGwpP1wiY2xhc3NcIjp0P1wiZnVuY3Rpb25cIjpcIm1ldGhvZFwiOnQ/XCJ2YXJpYWJsZVwiOlwicHJvcGVydHlcIixib29zdDotb30pfWxldCBhPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtpZighYSlyZXR1cm4gcjtlPWF9fWZ1bmN0aW9uIHNlKGUpe2xldCB0PW5ldyBNYXA7cmV0dXJuIHI9PntsZXQgbj1xKHIpO2lmKCFuKXJldHVybiBudWxsO2xldCBvPWU7Zm9yKGxldCBsIG9mIG4ucGF0aClpZihvPW9bbF0sIW8pcmV0dXJuIG51bGw7bGV0IGE9dC5nZXQobyk7cmV0dXJuIGF8fHQuc2V0KG8sYT16KG8sIW4ucGF0aC5sZW5ndGgpKSx7ZnJvbTpyLnBvcy1uLm5hbWUubGVuZ3RoLG9wdGlvbnM6YSx2YWxpZEZvcjpifX19dmFyIHA9TC5kZWZpbmUoe3BhcnNlcjpQLmNvbmZpZ3VyZSh7cHJvcHM6W04uYWRkKHtJZlN0YXRlbWVudDokKHtleGNlcHQ6L15cXHMqKHt8ZWxzZVxcYikvfSksVHJ5U3RhdGVtZW50OiQoe2V4Y2VwdDovXlxccyooe3xjYXRjaFxcYnxmaW5hbGx5XFxiKS99KSxMYWJlbGVkU3RhdGVtZW50OkEsU3dpdGNoQm9keTplPT57bGV0IHQ9ZS50ZXh0QWZ0ZXIscj0vXlxccypcXH0vLnRlc3QodCksbj0vXlxccyooY2FzZXxkZWZhdWx0KVxcYi8udGVzdCh0KTtyZXR1cm4gZS5iYXNlSW5kZW50KyhyPzA6bj8xOjIpKmUudW5pdH0sQmxvY2s6Rih7Y2xvc2luZzpcIn1cIn0pLEFycm93RnVuY3Rpb246ZT0+ZS5iYXNlSW5kZW50K2UudW5pdCxcIlRlbXBsYXRlU3RyaW5nIEJsb2NrQ29tbWVudFwiOigpPT5udWxsLFwiU3RhdGVtZW50IFByb3BlcnR5XCI6JCh7ZXhjZXB0Oi9eey99KSxKU1hFbGVtZW50KGUpe2xldCB0PS9eXFxzKjxcXC8vLnRlc3QoZS50ZXh0QWZ0ZXIpO3JldHVybiBlLmxpbmVJbmRlbnQoZS5ub2RlLmZyb20pKyh0PzA6ZS51bml0KX0sSlNYRXNjYXBlKGUpe2xldCB0PS9cXHMqXFx9Ly50ZXN0KGUudGV4dEFmdGVyKTtyZXR1cm4gZS5saW5lSW5kZW50KGUubm9kZS5mcm9tKSsodD8wOmUudW5pdCl9LFwiSlNYT3BlblRhZyBKU1hTZWxmQ2xvc2luZ1RhZ1wiKGUpe3JldHVybiBlLmNvbHVtbihlLm5vZGUuZnJvbSkrZS51bml0fX0pLEIuYWRkKHtcIkJsb2NrIENsYXNzQm9keSBTd2l0Y2hCb2R5IEVudW1Cb2R5IE9iamVjdEV4cHJlc3Npb24gQXJyYXlFeHByZXNzaW9uXCI6TyxCbG9ja0NvbW1lbnQoZSl7cmV0dXJue2Zyb206ZS5mcm9tKzIsdG86ZS50by0yfX19KV19KSxsYW5ndWFnZURhdGE6e2Nsb3NlQnJhY2tldHM6e2JyYWNrZXRzOltcIihcIixcIltcIixcIntcIixcIidcIiwnXCInLFwiYFwiXX0sY29tbWVudFRva2Vuczp7bGluZTpcIi8vXCIsYmxvY2s6e29wZW46XCIvKlwiLGNsb3NlOlwiKi9cIn19LGluZGVudE9uSW5wdXQ6L15cXHMqKD86Y2FzZSB8ZGVmYXVsdDp8XFx7fFxcfXw8XFwvKSQvLHdvcmRDaGFyczpcIiRcIn19KSxHPXAuY29uZmlndXJlKHtkaWFsZWN0OlwidHNcIn0pLEs9cC5jb25maWd1cmUoe2RpYWxlY3Q6XCJqc3hcIn0pLFE9cC5jb25maWd1cmUoe2RpYWxlY3Q6XCJqc3ggdHNcIn0pLFU9XCJicmVhayBjYXNlIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgZGVsZXRlIGV4cG9ydCBleHRlbmRzIGZhbHNlIGZpbmFsbHkgaW4gaW5zdGFuY2VvZiBsZXQgbmV3IHJldHVybiBzdGF0aWMgc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJ1ZSB0eXBlb2YgdmFyIHlpZWxkXCIuc3BsaXQoXCIgXCIpLm1hcChlPT4oe2xhYmVsOmUsdHlwZTpcImtleXdvcmRcIn0pKTtmdW5jdGlvbiBmZShlPXt9KXtsZXQgdD1lLmpzeD9lLnR5cGVzY3JpcHQ/UTpLOmUudHlwZXNjcmlwdD9HOnA7cmV0dXJuIG5ldyBKKHQsW3AuZGF0YS5vZih7YXV0b2NvbXBsZXRlOmooayxWKFIuY29uY2F0KFUpKSl9KSxwLmRhdGEub2Yoe2F1dG9jb21wbGV0ZTpafSksZS5qc3g/ZWU6W11dKX1mdW5jdGlvbiBEKGUsdCxyPWUubGVuZ3RoKXtpZighdClyZXR1cm5cIlwiO2xldCBuPXQuZ2V0Q2hpbGQoXCJKU1hJZGVudGlmaWVyXCIpO3JldHVybiBuP2Uuc2xpY2VTdHJpbmcobi5mcm9tLE1hdGgubWluKG4udG8scikpOlwiXCJ9dmFyIFk9dHlwZW9mIG5hdmlnYXRvcj09XCJvYmplY3RcIiYmL0FuZHJvaWRcXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksZWU9WC5pbnB1dEhhbmRsZXIub2YoKGUsdCxyLG4pPT57aWYoKFk/ZS5jb21wb3Npbmc6ZS5jb21wb3NpdGlvblN0YXJ0ZWQpfHxlLnN0YXRlLnJlYWRPbmx5fHx0IT1yfHxuIT1cIj5cIiYmbiE9XCIvXCJ8fCFwLmlzQWN0aXZlQXQoZS5zdGF0ZSx0LC0xKSlyZXR1cm4hMTtsZXR7c3RhdGU6b309ZSxhPW8uY2hhbmdlQnlSYW5nZShsPT57dmFyIGksYyxtO2xldHtoZWFkOnN9PWwsdT13KG8pLnJlc29sdmVJbm5lcihzLC0xKSx5O2lmKHUubmFtZT09XCJKU1hTdGFydFRhZ1wiJiYodT11LnBhcmVudCksbj09XCI+XCImJnUubmFtZT09XCJKU1hGcmFnbWVudFRhZ1wiKXJldHVybntyYW5nZTpTLmN1cnNvcihzKzEpLGNoYW5nZXM6e2Zyb206cyxpbnNlcnQ6XCI+PD5cIn19O2lmKG49PVwiPlwiJiZ1Lm5hbWU9PVwiSlNYSWRlbnRpZmllclwiKXtpZigoKGM9KGk9dS5wYXJlbnQpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS5sYXN0Q2hpbGQpPT09bnVsbHx8Yz09PXZvaWQgMD92b2lkIDA6Yy5uYW1lKSE9XCJKU1hFbmRUYWdcIiYmKHk9RChvLmRvYyx1LnBhcmVudCxzKSkpcmV0dXJue3JhbmdlOlMuY3Vyc29yKHMrMSksY2hhbmdlczp7ZnJvbTpzLGluc2VydDpgPjwvJHt5fT5gfX19ZWxzZSBpZihuPT1cIi9cIiYmdS5uYW1lPT1cIkpTWEZyYWdtZW50VGFnXCIpe2xldCBnPXUucGFyZW50LGg9Zz8ucGFyZW50O2lmKGcuZnJvbT09cy0xJiYoKG09aC5sYXN0Q2hpbGQpPT09bnVsbHx8bT09PXZvaWQgMD92b2lkIDA6bS5uYW1lKSE9XCJKU1hFbmRUYWdcIiYmKHk9RChvLmRvYyxoPy5maXJzdENoaWxkLHMpKSl7bGV0IEM9YC8ke3l9PmA7cmV0dXJue3JhbmdlOlMuY3Vyc29yKHMrQy5sZW5ndGgpLGNoYW5nZXM6e2Zyb206cyxpbnNlcnQ6Q319fX1yZXR1cm57cmFuZ2U6bH19KTtyZXR1cm4gYS5jaGFuZ2VzLmVtcHR5PyExOihlLmRpc3BhdGNoKGEse3VzZXJFdmVudDpcImlucHV0LnR5cGVcIixzY3JvbGxJbnRvVmlldzohMH0pLCEwKX0pO2Z1bmN0aW9uIGNlKGUsdCl7cmV0dXJuIHR8fCh0PXtwYXJzZXJPcHRpb25zOntlY21hVmVyc2lvbjoyMDE5LHNvdXJjZVR5cGU6XCJtb2R1bGVcIn0sZW52Onticm93c2VyOiEwLG5vZGU6ITAsZXM2OiEwLGVzMjAxNTohMCxlczIwMTc6ITAsZXMyMDIwOiEwfSxydWxlczp7fX0sZS5nZXRSdWxlcygpLmZvckVhY2goKHIsbik9PntyLm1ldGEuZG9jcy5yZWNvbW1lbmRlZCYmKHQucnVsZXNbbl09Mil9KSkscj0+e2xldHtzdGF0ZTpufT1yLG89W107Zm9yKGxldHtmcm9tOmEsdG86bH1vZiBwLmZpbmRSZWdpb25zKG4pKXtsZXQgaT1uLmRvYy5saW5lQXQoYSksYz17bGluZTppLm51bWJlci0xLGNvbDphLWkuZnJvbSxwb3M6YX07Zm9yKGxldCBtIG9mIGUudmVyaWZ5KG4uc2xpY2VEb2MoYSxsKSx0KSlvLnB1c2godGUobSxuLmRvYyxjKSl9cmV0dXJuIG99fWZ1bmN0aW9uIEUoZSx0LHIsbil7cmV0dXJuIHIubGluZShlK24ubGluZSkuZnJvbSt0KyhlPT0xP24uY29sLTE6LTEpfWZ1bmN0aW9uIHRlKGUsdCxyKXtsZXQgbj1FKGUubGluZSxlLmNvbHVtbix0LHIpLG89e2Zyb206bix0bzplLmVuZExpbmUhPW51bGwmJmUuZW5kQ29sdW1uIT0xP0UoZS5lbmRMaW5lLGUuZW5kQ29sdW1uLHQscik6bixtZXNzYWdlOmUubWVzc2FnZSxzb3VyY2U6ZS5ydWxlSWQ/XCJlc2xpbnQ6XCIrZS5ydWxlSWQ6XCJlc2xpbnRcIixzZXZlcml0eTplLnNldmVyaXR5PT0xP1wid2FybmluZ1wiOlwiZXJyb3JcIn07aWYoZS5maXgpe2xldHtyYW5nZTphLHRleHQ6bH09ZS5maXgsaT1hWzBdK3IucG9zLW4sYz1hWzFdK3IucG9zLW47by5hY3Rpb25zPVt7bmFtZTpcImZpeFwiLGFwcGx5KG0scyl7bS5kaXNwYXRjaCh7Y2hhbmdlczp7ZnJvbTpzK2ksdG86cytjLGluc2VydDpsfSxzY3JvbGxJbnRvVmlldzohMH0pfX1dfXJldHVybiBvfWV4cG9ydHtlZSBhcyBhdXRvQ2xvc2VUYWdzLHEgYXMgY29tcGxldGlvblBhdGgsY2UgYXMgZXNMaW50LGZlIGFzIGphdmFzY3JpcHQscCBhcyBqYXZhc2NyaXB0TGFuZ3VhZ2UsSyBhcyBqc3hMYW5ndWFnZSxaIGFzIGxvY2FsQ29tcGxldGlvblNvdXJjZSxzZSBhcyBzY29wZUNvbXBsZXRpb25Tb3VyY2UsUiBhcyBzbmlwcGV0cyxRIGFzIHRzeExhbmd1YWdlLEcgYXMgdHlwZXNjcmlwdExhbmd1YWdlfTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShAY29kZW1pcnJvci9sYW5nLWh0bWxANi4xLjIpIGRlbm8gcHJvZHVjdGlvbiAqL1xuaW1wb3J0e3BhcnNlciBhcyB6LGNvbmZpZ3VyZU5lc3RpbmcgYXMgTH1mcm9tXCIvdjk2L0BsZXplci9odG1sQDEuMC4xL1gtWlM5QVkyOWtaVzFwY25KdmNpOXNZVzVuZFdGblpTeEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjRzUUd4bGVtVnlMMmhwWjJoc2FXZG9kQ3hBYkdWNlpYSXZiV0Z5YTJSdmQyNC9kZW5vL2h0bWwuanNcIjtpbXBvcnR7Y3NzTGFuZ3VhZ2UgYXMgQixjc3MgYXMgRn1mcm9tXCIvdjk2L0Bjb2RlbWlycm9yL2xhbmctY3NzQDYuMC4wL1gtWlM5QVkyOWtaVzFwY25KdmNpOXNZVzVuZFdGblpTeEFZMjlrWlcxcGNuSnZjaTl6ZEdGMFpTeEFZMjlrWlcxcGNuSnZjaTkyYVdWM0xFQnNaWHBsY2k5amIyMXRiMjRzUUd4bGVtVnlMMmhwWjJoc2FXZG9kQ3hBYkdWNlpYSXZiV0Z5YTJSdmQyNC9kZW5vL2xhbmctY3NzLmpzXCI7aW1wb3J0e2phdmFzY3JpcHRMYW5ndWFnZSBhcyBSLGphdmFzY3JpcHQgYXMgVn1mcm9tXCIvdjk2L0Bjb2RlbWlycm9yL2xhbmctamF2YXNjcmlwdEA2LjEuMC9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9sYW5nLWphdmFzY3JpcHQuanNcIjtpbXBvcnR7RWRpdG9yVmlldyBhcyBHfWZyb21cIkBjb2RlbWlycm9yL3ZpZXdcIjtpbXBvcnR7RWRpdG9yU2VsZWN0aW9uIGFzICR9ZnJvbVwiQGNvZGVtaXJyb3Ivc3RhdGVcIjtpbXBvcnR7c3ludGF4VHJlZSBhcyBqLExSTGFuZ3VhZ2UgYXMgTSxpbmRlbnROb2RlUHJvcCBhcyBQLGZvbGROb2RlUHJvcCBhcyBVLExhbmd1YWdlU3VwcG9ydCBhcyBXfWZyb21cIkBjb2RlbWlycm9yL2xhbmd1YWdlXCI7dmFyIHY9W1wiX2JsYW5rXCIsXCJfc2VsZlwiLFwiX3RvcFwiLFwiX3BhcmVudFwiXSxUPVtcImFzY2lpXCIsXCJ1dGYtOFwiLFwidXRmLTE2XCIsXCJsYXRpbjFcIixcImxhdGluMVwiXSxrPVtcImdldFwiLFwicG9zdFwiLFwicHV0XCIsXCJkZWxldGVcIl0sQz1bXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIixcIm11bHRpcGFydC9mb3JtLWRhdGFcIixcInRleHQvcGxhaW5cIl0sbT1bXCJ0cnVlXCIsXCJmYWxzZVwiXSxsPXt9LEg9e2E6e2F0dHJzOntocmVmOm51bGwscGluZzpudWxsLHR5cGU6bnVsbCxtZWRpYTpudWxsLHRhcmdldDp2LGhyZWZsYW5nOm51bGx9fSxhYmJyOmwsYWNyb255bTpsLGFkZHJlc3M6bCxhcHBsZXQ6bCxhcmVhOnthdHRyczp7YWx0Om51bGwsY29vcmRzOm51bGwsaHJlZjpudWxsLHRhcmdldDpudWxsLHBpbmc6bnVsbCxtZWRpYTpudWxsLGhyZWZsYW5nOm51bGwsdHlwZTpudWxsLHNoYXBlOltcImRlZmF1bHRcIixcInJlY3RcIixcImNpcmNsZVwiLFwicG9seVwiXX19LGFydGljbGU6bCxhc2lkZTpsLGF1ZGlvOnthdHRyczp7c3JjOm51bGwsbWVkaWFncm91cDpudWxsLGNyb3Nzb3JpZ2luOltcImFub255bW91c1wiLFwidXNlLWNyZWRlbnRpYWxzXCJdLHByZWxvYWQ6W1wibm9uZVwiLFwibWV0YWRhdGFcIixcImF1dG9cIl0sYXV0b3BsYXk6W1wiYXV0b3BsYXlcIl0sbG9vcDpbXCJsb29wXCJdLGNvbnRyb2xzOltcImNvbnRyb2xzXCJdfX0sYjpsLGJhc2U6e2F0dHJzOntocmVmOm51bGwsdGFyZ2V0OnZ9fSxiYXNlZm9udDpsLGJkaTpsLGJkbzpsLGJpZzpsLGJsb2NrcXVvdGU6e2F0dHJzOntjaXRlOm51bGx9fSxib2R5OmwsYnI6bCxidXR0b246e2F0dHJzOntmb3JtOm51bGwsZm9ybWFjdGlvbjpudWxsLG5hbWU6bnVsbCx2YWx1ZTpudWxsLGF1dG9mb2N1czpbXCJhdXRvZm9jdXNcIl0sZGlzYWJsZWQ6W1wiYXV0b2ZvY3VzXCJdLGZvcm1lbmN0eXBlOkMsZm9ybW1ldGhvZDprLGZvcm1ub3ZhbGlkYXRlOltcIm5vdmFsaWRhdGVcIl0sZm9ybXRhcmdldDp2LHR5cGU6W1wic3VibWl0XCIsXCJyZXNldFwiLFwiYnV0dG9uXCJdfX0sY2FudmFzOnthdHRyczp7d2lkdGg6bnVsbCxoZWlnaHQ6bnVsbH19LGNhcHRpb246bCxjZW50ZXI6bCxjaXRlOmwsY29kZTpsLGNvbDp7YXR0cnM6e3NwYW46bnVsbH19LGNvbGdyb3VwOnthdHRyczp7c3BhbjpudWxsfX0sY29tbWFuZDp7YXR0cnM6e3R5cGU6W1wiY29tbWFuZFwiLFwiY2hlY2tib3hcIixcInJhZGlvXCJdLGxhYmVsOm51bGwsaWNvbjpudWxsLHJhZGlvZ3JvdXA6bnVsbCxjb21tYW5kOm51bGwsdGl0bGU6bnVsbCxkaXNhYmxlZDpbXCJkaXNhYmxlZFwiXSxjaGVja2VkOltcImNoZWNrZWRcIl19fSxkYXRhOnthdHRyczp7dmFsdWU6bnVsbH19LGRhdGFncmlkOnthdHRyczp7ZGlzYWJsZWQ6W1wiZGlzYWJsZWRcIl0sbXVsdGlwbGU6W1wibXVsdGlwbGVcIl19fSxkYXRhbGlzdDp7YXR0cnM6e2RhdGE6bnVsbH19LGRkOmwsZGVsOnthdHRyczp7Y2l0ZTpudWxsLGRhdGV0aW1lOm51bGx9fSxkZXRhaWxzOnthdHRyczp7b3BlbjpbXCJvcGVuXCJdfX0sZGZuOmwsZGlyOmwsZGl2OmwsZGw6bCxkdDpsLGVtOmwsZW1iZWQ6e2F0dHJzOntzcmM6bnVsbCx0eXBlOm51bGwsd2lkdGg6bnVsbCxoZWlnaHQ6bnVsbH19LGV2ZW50c291cmNlOnthdHRyczp7c3JjOm51bGx9fSxmaWVsZHNldDp7YXR0cnM6e2Rpc2FibGVkOltcImRpc2FibGVkXCJdLGZvcm06bnVsbCxuYW1lOm51bGx9fSxmaWdjYXB0aW9uOmwsZmlndXJlOmwsZm9udDpsLGZvb3RlcjpsLGZvcm06e2F0dHJzOnthY3Rpb246bnVsbCxuYW1lOm51bGwsXCJhY2NlcHQtY2hhcnNldFwiOlQsYXV0b2NvbXBsZXRlOltcIm9uXCIsXCJvZmZcIl0sZW5jdHlwZTpDLG1ldGhvZDprLG5vdmFsaWRhdGU6W1wibm92YWxpZGF0ZVwiXSx0YXJnZXQ6dn19LGZyYW1lOmwsZnJhbWVzZXQ6bCxoMTpsLGgyOmwsaDM6bCxoNDpsLGg1OmwsaDY6bCxoZWFkOntjaGlsZHJlbjpbXCJ0aXRsZVwiLFwiYmFzZVwiLFwibGlua1wiLFwic3R5bGVcIixcIm1ldGFcIixcInNjcmlwdFwiLFwibm9zY3JpcHRcIixcImNvbW1hbmRcIl19LGhlYWRlcjpsLGhncm91cDpsLGhyOmwsaHRtbDp7YXR0cnM6e21hbmlmZXN0Om51bGx9fSxpOmwsaWZyYW1lOnthdHRyczp7c3JjOm51bGwsc3JjZG9jOm51bGwsbmFtZTpudWxsLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsc2FuZGJveDpbXCJhbGxvdy10b3AtbmF2aWdhdGlvblwiLFwiYWxsb3ctc2FtZS1vcmlnaW5cIixcImFsbG93LWZvcm1zXCIsXCJhbGxvdy1zY3JpcHRzXCJdLHNlYW1sZXNzOltcInNlYW1sZXNzXCJdfX0saW1nOnthdHRyczp7YWx0Om51bGwsc3JjOm51bGwsaXNtYXA6bnVsbCx1c2VtYXA6bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLGNyb3Nzb3JpZ2luOltcImFub255bW91c1wiLFwidXNlLWNyZWRlbnRpYWxzXCJdfX0saW5wdXQ6e2F0dHJzOnthbHQ6bnVsbCxkaXJuYW1lOm51bGwsZm9ybTpudWxsLGZvcm1hY3Rpb246bnVsbCxoZWlnaHQ6bnVsbCxsaXN0Om51bGwsbWF4Om51bGwsbWF4bGVuZ3RoOm51bGwsbWluOm51bGwsbmFtZTpudWxsLHBhdHRlcm46bnVsbCxwbGFjZWhvbGRlcjpudWxsLHNpemU6bnVsbCxzcmM6bnVsbCxzdGVwOm51bGwsdmFsdWU6bnVsbCx3aWR0aDpudWxsLGFjY2VwdDpbXCJhdWRpby8qXCIsXCJ2aWRlby8qXCIsXCJpbWFnZS8qXCJdLGF1dG9jb21wbGV0ZTpbXCJvblwiLFwib2ZmXCJdLGF1dG9mb2N1czpbXCJhdXRvZm9jdXNcIl0sY2hlY2tlZDpbXCJjaGVja2VkXCJdLGRpc2FibGVkOltcImRpc2FibGVkXCJdLGZvcm1lbmN0eXBlOkMsZm9ybW1ldGhvZDprLGZvcm1ub3ZhbGlkYXRlOltcIm5vdmFsaWRhdGVcIl0sZm9ybXRhcmdldDp2LG11bHRpcGxlOltcIm11bHRpcGxlXCJdLHJlYWRvbmx5OltcInJlYWRvbmx5XCJdLHJlcXVpcmVkOltcInJlcXVpcmVkXCJdLHR5cGU6W1wiaGlkZGVuXCIsXCJ0ZXh0XCIsXCJzZWFyY2hcIixcInRlbFwiLFwidXJsXCIsXCJlbWFpbFwiLFwicGFzc3dvcmRcIixcImRhdGV0aW1lXCIsXCJkYXRlXCIsXCJtb250aFwiLFwid2Vla1wiLFwidGltZVwiLFwiZGF0ZXRpbWUtbG9jYWxcIixcIm51bWJlclwiLFwicmFuZ2VcIixcImNvbG9yXCIsXCJjaGVja2JveFwiLFwicmFkaW9cIixcImZpbGVcIixcInN1Ym1pdFwiLFwiaW1hZ2VcIixcInJlc2V0XCIsXCJidXR0b25cIl19fSxpbnM6e2F0dHJzOntjaXRlOm51bGwsZGF0ZXRpbWU6bnVsbH19LGtiZDpsLGtleWdlbjp7YXR0cnM6e2NoYWxsZW5nZTpudWxsLGZvcm06bnVsbCxuYW1lOm51bGwsYXV0b2ZvY3VzOltcImF1dG9mb2N1c1wiXSxkaXNhYmxlZDpbXCJkaXNhYmxlZFwiXSxrZXl0eXBlOltcIlJTQVwiXX19LGxhYmVsOnthdHRyczp7Zm9yOm51bGwsZm9ybTpudWxsfX0sbGVnZW5kOmwsbGk6e2F0dHJzOnt2YWx1ZTpudWxsfX0sbGluazp7YXR0cnM6e2hyZWY6bnVsbCx0eXBlOm51bGwsaHJlZmxhbmc6bnVsbCxtZWRpYTpudWxsLHNpemVzOltcImFsbFwiLFwiMTZ4MTZcIixcIjE2eDE2IDMyeDMyXCIsXCIxNngxNiAzMngzMiA2NHg2NFwiXX19LG1hcDp7YXR0cnM6e25hbWU6bnVsbH19LG1hcms6bCxtZW51OnthdHRyczp7bGFiZWw6bnVsbCx0eXBlOltcImxpc3RcIixcImNvbnRleHRcIixcInRvb2xiYXJcIl19fSxtZXRhOnthdHRyczp7Y29udGVudDpudWxsLGNoYXJzZXQ6VCxuYW1lOltcInZpZXdwb3J0XCIsXCJhcHBsaWNhdGlvbi1uYW1lXCIsXCJhdXRob3JcIixcImRlc2NyaXB0aW9uXCIsXCJnZW5lcmF0b3JcIixcImtleXdvcmRzXCJdLFwiaHR0cC1lcXVpdlwiOltcImNvbnRlbnQtbGFuZ3VhZ2VcIixcImNvbnRlbnQtdHlwZVwiLFwiZGVmYXVsdC1zdHlsZVwiLFwicmVmcmVzaFwiXX19LG1ldGVyOnthdHRyczp7dmFsdWU6bnVsbCxtaW46bnVsbCxsb3c6bnVsbCxoaWdoOm51bGwsbWF4Om51bGwsb3B0aW11bTpudWxsfX0sbmF2Omwsbm9mcmFtZXM6bCxub3NjcmlwdDpsLG9iamVjdDp7YXR0cnM6e2RhdGE6bnVsbCx0eXBlOm51bGwsbmFtZTpudWxsLHVzZW1hcDpudWxsLGZvcm06bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLHR5cGVtdXN0bWF0Y2g6W1widHlwZW11c3RtYXRjaFwiXX19LG9sOnthdHRyczp7cmV2ZXJzZWQ6W1wicmV2ZXJzZWRcIl0sc3RhcnQ6bnVsbCx0eXBlOltcIjFcIixcImFcIixcIkFcIixcImlcIixcIklcIl19LGNoaWxkcmVuOltcImxpXCIsXCJzY3JpcHRcIixcInRlbXBsYXRlXCIsXCJ1bFwiLFwib2xcIl19LG9wdGdyb3VwOnthdHRyczp7ZGlzYWJsZWQ6W1wiZGlzYWJsZWRcIl0sbGFiZWw6bnVsbH19LG9wdGlvbjp7YXR0cnM6e2Rpc2FibGVkOltcImRpc2FibGVkXCJdLGxhYmVsOm51bGwsc2VsZWN0ZWQ6W1wic2VsZWN0ZWRcIl0sdmFsdWU6bnVsbH19LG91dHB1dDp7YXR0cnM6e2ZvcjpudWxsLGZvcm06bnVsbCxuYW1lOm51bGx9fSxwOmwscGFyYW06e2F0dHJzOntuYW1lOm51bGwsdmFsdWU6bnVsbH19LHByZTpsLHByb2dyZXNzOnthdHRyczp7dmFsdWU6bnVsbCxtYXg6bnVsbH19LHE6e2F0dHJzOntjaXRlOm51bGx9fSxycDpsLHJ0OmwscnVieTpsLHM6bCxzYW1wOmwsc2NyaXB0OnthdHRyczp7dHlwZTpbXCJ0ZXh0L2phdmFzY3JpcHRcIl0sc3JjOm51bGwsYXN5bmM6W1wiYXN5bmNcIl0sZGVmZXI6W1wiZGVmZXJcIl0sY2hhcnNldDpUfX0sc2VjdGlvbjpsLHNlbGVjdDp7YXR0cnM6e2Zvcm06bnVsbCxuYW1lOm51bGwsc2l6ZTpudWxsLGF1dG9mb2N1czpbXCJhdXRvZm9jdXNcIl0sZGlzYWJsZWQ6W1wiZGlzYWJsZWRcIl0sbXVsdGlwbGU6W1wibXVsdGlwbGVcIl19fSxzbG90OnthdHRyczp7bmFtZTpudWxsfX0sc21hbGw6bCxzb3VyY2U6e2F0dHJzOntzcmM6bnVsbCx0eXBlOm51bGwsbWVkaWE6bnVsbH19LHNwYW46bCxzdHJpa2U6bCxzdHJvbmc6bCxzdHlsZTp7YXR0cnM6e3R5cGU6W1widGV4dC9jc3NcIl0sbWVkaWE6bnVsbCxzY29wZWQ6bnVsbH19LHN1YjpsLHN1bW1hcnk6bCxzdXA6bCx0YWJsZTpsLHRib2R5OmwsdGQ6e2F0dHJzOntjb2xzcGFuOm51bGwscm93c3BhbjpudWxsLGhlYWRlcnM6bnVsbH19LHRlbXBsYXRlOmwsdGV4dGFyZWE6e2F0dHJzOntkaXJuYW1lOm51bGwsZm9ybTpudWxsLG1heGxlbmd0aDpudWxsLG5hbWU6bnVsbCxwbGFjZWhvbGRlcjpudWxsLHJvd3M6bnVsbCxjb2xzOm51bGwsYXV0b2ZvY3VzOltcImF1dG9mb2N1c1wiXSxkaXNhYmxlZDpbXCJkaXNhYmxlZFwiXSxyZWFkb25seTpbXCJyZWFkb25seVwiXSxyZXF1aXJlZDpbXCJyZXF1aXJlZFwiXSx3cmFwOltcInNvZnRcIixcImhhcmRcIl19fSx0Zm9vdDpsLHRoOnthdHRyczp7Y29sc3BhbjpudWxsLHJvd3NwYW46bnVsbCxoZWFkZXJzOm51bGwsc2NvcGU6W1wicm93XCIsXCJjb2xcIixcInJvd2dyb3VwXCIsXCJjb2xncm91cFwiXX19LHRoZWFkOmwsdGltZTp7YXR0cnM6e2RhdGV0aW1lOm51bGx9fSx0aXRsZTpsLHRyOmwsdHJhY2s6e2F0dHJzOntzcmM6bnVsbCxsYWJlbDpudWxsLGRlZmF1bHQ6bnVsbCxraW5kOltcInN1YnRpdGxlc1wiLFwiY2FwdGlvbnNcIixcImRlc2NyaXB0aW9uc1wiLFwiY2hhcHRlcnNcIixcIm1ldGFkYXRhXCJdLHNyY2xhbmc6bnVsbH19LHR0OmwsdTpsLHVsOntjaGlsZHJlbjpbXCJsaVwiLFwic2NyaXB0XCIsXCJ0ZW1wbGF0ZVwiLFwidWxcIixcIm9sXCJdfSx2YXI6bCx2aWRlbzp7YXR0cnM6e3NyYzpudWxsLHBvc3RlcjpudWxsLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsY3Jvc3NvcmlnaW46W1wiYW5vbnltb3VzXCIsXCJ1c2UtY3JlZGVudGlhbHNcIl0scHJlbG9hZDpbXCJhdXRvXCIsXCJtZXRhZGF0YVwiLFwibm9uZVwiXSxhdXRvcGxheTpbXCJhdXRvcGxheVwiXSxtZWRpYWdyb3VwOltcIm1vdmllXCJdLG11dGVkOltcIm11dGVkXCJdLGNvbnRyb2xzOltcImNvbnRyb2xzXCJdfX0sd2JyOmx9LEo9e2FjY2Vzc2tleTpudWxsLGNsYXNzOm51bGwsY29udGVudGVkaXRhYmxlOm0sY29udGV4dG1lbnU6bnVsbCxkaXI6W1wibHRyXCIsXCJydGxcIixcImF1dG9cIl0sZHJhZ2dhYmxlOltcInRydWVcIixcImZhbHNlXCIsXCJhdXRvXCJdLGRyb3B6b25lOltcImNvcHlcIixcIm1vdmVcIixcImxpbmtcIixcInN0cmluZzpcIixcImZpbGU6XCJdLGhpZGRlbjpbXCJoaWRkZW5cIl0saWQ6bnVsbCxpbmVydDpbXCJpbmVydFwiXSxpdGVtaWQ6bnVsbCxpdGVtcHJvcDpudWxsLGl0ZW1yZWY6bnVsbCxpdGVtc2NvcGU6W1wiaXRlbXNjb3BlXCJdLGl0ZW10eXBlOm51bGwsbGFuZzpbXCJhclwiLFwiYm5cIixcImRlXCIsXCJlbi1HQlwiLFwiZW4tVVNcIixcImVzXCIsXCJmclwiLFwiaGlcIixcImlkXCIsXCJqYVwiLFwicGFcIixcInB0XCIsXCJydVwiLFwidHJcIixcInpoXCJdLHNwZWxsY2hlY2s6bSxhdXRvY29ycmVjdDptLGF1dG9jYXBpdGFsaXplOm0sc3R5bGU6bnVsbCx0YWJpbmRleDpudWxsLHRpdGxlOm51bGwsdHJhbnNsYXRlOltcInllc1wiLFwibm9cIl0sb25jbGljazpudWxsLHJlbDpbXCJzdHlsZXNoZWV0XCIsXCJhbHRlcm5hdGVcIixcImF1dGhvclwiLFwiYm9va21hcmtcIixcImhlbHBcIixcImxpY2Vuc2VcIixcIm5leHRcIixcIm5vZm9sbG93XCIsXCJub3JlZmVycmVyXCIsXCJwcmVmZXRjaFwiLFwicHJldlwiLFwic2VhcmNoXCIsXCJ0YWdcIl0scm9sZTpcImFsZXJ0IGFwcGxpY2F0aW9uIGFydGljbGUgYmFubmVyIGJ1dHRvbiBjZWxsIGNoZWNrYm94IGNvbXBsZW1lbnRhcnkgY29udGVudGluZm8gZGlhbG9nIGRvY3VtZW50IGZlZWQgZmlndXJlIGZvcm0gZ3JpZCBncmlkY2VsbCBoZWFkaW5nIGltZyBsaXN0IGxpc3Rib3ggbGlzdGl0ZW0gbWFpbiBuYXZpZ2F0aW9uIHJlZ2lvbiByb3cgcm93Z3JvdXAgc2VhcmNoIHN3aXRjaCB0YWIgdGFibGUgdGFicGFuZWwgdGV4dGJveCB0aW1lclwiLnNwbGl0KFwiIFwiKSxcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOm51bGwsXCJhcmlhLWF0b21pY1wiOm0sXCJhcmlhLWF1dG9jb21wbGV0ZVwiOltcImlubGluZVwiLFwibGlzdFwiLFwiYm90aFwiLFwibm9uZVwiXSxcImFyaWEtYnVzeVwiOm0sXCJhcmlhLWNoZWNrZWRcIjpbXCJ0cnVlXCIsXCJmYWxzZVwiLFwibWl4ZWRcIixcInVuZGVmaW5lZFwiXSxcImFyaWEtY29udHJvbHNcIjpudWxsLFwiYXJpYS1kZXNjcmliZWRieVwiOm51bGwsXCJhcmlhLWRpc2FibGVkXCI6bSxcImFyaWEtZHJvcGVmZmVjdFwiOm51bGwsXCJhcmlhLWV4cGFuZGVkXCI6W1widHJ1ZVwiLFwiZmFsc2VcIixcInVuZGVmaW5lZFwiXSxcImFyaWEtZmxvd3RvXCI6bnVsbCxcImFyaWEtZ3JhYmJlZFwiOltcInRydWVcIixcImZhbHNlXCIsXCJ1bmRlZmluZWRcIl0sXCJhcmlhLWhhc3BvcHVwXCI6bSxcImFyaWEtaGlkZGVuXCI6bSxcImFyaWEtaW52YWxpZFwiOltcInRydWVcIixcImZhbHNlXCIsXCJncmFtbWFyXCIsXCJzcGVsbGluZ1wiXSxcImFyaWEtbGFiZWxcIjpudWxsLFwiYXJpYS1sYWJlbGxlZGJ5XCI6bnVsbCxcImFyaWEtbGV2ZWxcIjpudWxsLFwiYXJpYS1saXZlXCI6W1wib2ZmXCIsXCJwb2xpdGVcIixcImFzc2VydGl2ZVwiXSxcImFyaWEtbXVsdGlsaW5lXCI6bSxcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCI6bSxcImFyaWEtb3duc1wiOm51bGwsXCJhcmlhLXBvc2luc2V0XCI6bnVsbCxcImFyaWEtcHJlc3NlZFwiOltcInRydWVcIixcImZhbHNlXCIsXCJtaXhlZFwiLFwidW5kZWZpbmVkXCJdLFwiYXJpYS1yZWFkb25seVwiOm0sXCJhcmlhLXJlbGV2YW50XCI6bnVsbCxcImFyaWEtcmVxdWlyZWRcIjptLFwiYXJpYS1zZWxlY3RlZFwiOltcInRydWVcIixcImZhbHNlXCIsXCJ1bmRlZmluZWRcIl0sXCJhcmlhLXNldHNpemVcIjpudWxsLFwiYXJpYS1zb3J0XCI6W1wiYXNjZW5kaW5nXCIsXCJkZXNjZW5kaW5nXCIsXCJub25lXCIsXCJvdGhlclwiXSxcImFyaWEtdmFsdWVtYXhcIjpudWxsLFwiYXJpYS12YWx1ZW1pblwiOm51bGwsXCJhcmlhLXZhbHVlbm93XCI6bnVsbCxcImFyaWEtdmFsdWV0ZXh0XCI6bnVsbH0saD1jbGFzc3tjb25zdHJ1Y3RvcihhLG4pe3RoaXMudGFncz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSCksYSksdGhpcy5nbG9iYWxBdHRycz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSiksbiksdGhpcy5hbGxUYWdzPU9iamVjdC5rZXlzKHRoaXMudGFncyksdGhpcy5nbG9iYWxBdHRyTmFtZXM9T2JqZWN0LmtleXModGhpcy5nbG9iYWxBdHRycyl9fTtoLmRlZmF1bHQ9bmV3IGg7ZnVuY3Rpb24geShlLGEsbj1lLmxlbmd0aCl7aWYoIWEpcmV0dXJuXCJcIjtsZXQgdD1hLmZpcnN0Q2hpbGQsbz10JiZ0LmdldENoaWxkKFwiVGFnTmFtZVwiKTtyZXR1cm4gbz9lLnNsaWNlU3RyaW5nKG8uZnJvbSxNYXRoLm1pbihvLnRvLG4pKTpcIlwifWZ1bmN0aW9uIHcoZSxhPSExKXtmb3IobGV0IG49ZS5wYXJlbnQ7bjtuPW4ucGFyZW50KWlmKG4ubmFtZT09XCJFbGVtZW50XCIpaWYoYSlhPSExO2Vsc2UgcmV0dXJuIG47cmV0dXJuIG51bGx9ZnVuY3Rpb24gcShlLGEsbil7bGV0IHQ9bi50YWdzW3koZSx3KGEsITApKV07cmV0dXJuIHQ/LmNoaWxkcmVufHxuLmFsbFRhZ3N9ZnVuY3Rpb24gQShlLGEpe2xldCBuPVtdO2ZvcihsZXQgdD1hO3Q9dyh0KTspe2xldCBvPXkoZSx0KTtpZihvJiZ0Lmxhc3RDaGlsZC5uYW1lPT1cIkNsb3NlVGFnXCIpYnJlYWs7byYmbi5pbmRleE9mKG8pPDAmJihhLm5hbWU9PVwiRW5kVGFnXCJ8fGEuZnJvbT49dC5maXJzdENoaWxkLnRvKSYmbi5wdXNoKG8pfXJldHVybiBufXZhciBJPS9eWzpcXC1cXC5cXHdcXHUwMGI3LVxcdWZmZmZdKiQvO2Z1bmN0aW9uIE8oZSxhLG4sdCxvKXtsZXQgcj0vXFxzKj4vLnRlc3QoZS5zbGljZURvYyhvLG8rNSkpP1wiXCI6XCI+XCI7cmV0dXJue2Zyb206dCx0bzpvLG9wdGlvbnM6cShlLmRvYyxuLGEpLm1hcChzPT4oe2xhYmVsOnMsdHlwZTpcInR5cGVcIn0pKS5jb25jYXQoQShlLmRvYyxuKS5tYXAoKHMsYyk9Pih7bGFiZWw6XCIvXCIrcyxhcHBseTpcIi9cIitzK3IsdHlwZTpcInR5cGVcIixib29zdDo5OS1jfSkpKSx2YWxpZEZvcjovXlxcLz9bOlxcLVxcLlxcd1xcdTAwYjctXFx1ZmZmZl0qJC99fWZ1bmN0aW9uIEUoZSxhLG4sdCl7bGV0IG89L1xccyo+Ly50ZXN0KGUuc2xpY2VEb2ModCx0KzUpKT9cIlwiOlwiPlwiO3JldHVybntmcm9tOm4sdG86dCxvcHRpb25zOkEoZS5kb2MsYSkubWFwKChyLHMpPT4oe2xhYmVsOnIsYXBwbHk6citvLHR5cGU6XCJ0eXBlXCIsYm9vc3Q6OTktc30pKSx2YWxpZEZvcjpJfX1mdW5jdGlvbiBLKGUsYSxuLHQpe2xldCBvPVtdLHI9MDtmb3IobGV0IHMgb2YgcShlLmRvYyxuLGEpKW8ucHVzaCh7bGFiZWw6XCI8XCIrcyx0eXBlOlwidHlwZVwifSk7Zm9yKGxldCBzIG9mIEEoZS5kb2Msbikpby5wdXNoKHtsYWJlbDpcIjwvXCIrcytcIj5cIix0eXBlOlwidHlwZVwiLGJvb3N0Ojk5LXIrK30pO3JldHVybntmcm9tOnQsdG86dCxvcHRpb25zOm8sdmFsaWRGb3I6L148XFwvP1s6XFwtXFwuXFx3XFx1MDBiNy1cXHVmZmZmXSokL319ZnVuY3Rpb24gUShlLGEsbix0LG8pe2xldCByPXcobikscz1yP2EudGFnc1t5KGUuZG9jLHIpXTpudWxsLGM9cyYmcy5hdHRycz9PYmplY3Qua2V5cyhzLmF0dHJzKS5jb25jYXQoYS5nbG9iYWxBdHRyTmFtZXMpOmEuZ2xvYmFsQXR0ck5hbWVzO3JldHVybntmcm9tOnQsdG86byxvcHRpb25zOmMubWFwKGQ9Pih7bGFiZWw6ZCx0eXBlOlwicHJvcGVydHlcIn0pKSx2YWxpZEZvcjpJfX1mdW5jdGlvbiBYKGUsYSxuLHQsbyl7dmFyIHI7bGV0IHM9KHI9bi5wYXJlbnQpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5nZXRDaGlsZChcIkF0dHJpYnV0ZU5hbWVcIiksYz1bXSxkO2lmKHMpe2xldCBiPWUuc2xpY2VEb2Mocy5mcm9tLHMudG8pLHU9YS5nbG9iYWxBdHRyc1tiXTtpZighdSl7bGV0IGk9dyhuKSxwPWk/YS50YWdzW3koZS5kb2MsaSldOm51bGw7dT1wPy5hdHRycyYmcC5hdHRyc1tiXX1pZih1KXtsZXQgaT1lLnNsaWNlRG9jKHQsbykudG9Mb3dlckNhc2UoKSxwPSdcIicsZj0nXCInOy9eWydcIl0vLnRlc3QoaSk/KGQ9aVswXT09J1wiJz8vXlteXCJdKiQvOi9eW14nXSokLyxwPVwiXCIsZj1lLnNsaWNlRG9jKG8sbysxKT09aVswXT9cIlwiOmlbMF0saT1pLnNsaWNlKDEpLHQrKyk6ZD0vXlteXFxzPD49J1wiXSokLztmb3IobGV0IGcgb2YgdSljLnB1c2goe2xhYmVsOmcsYXBwbHk6cCtnK2YsdHlwZTpcImNvbnN0YW50XCJ9KX19cmV0dXJue2Zyb206dCx0bzpvLG9wdGlvbnM6Yyx2YWxpZEZvcjpkfX1mdW5jdGlvbiBfKGUsYSl7bGV0e3N0YXRlOm4scG9zOnR9PWEsbz1qKG4pLnJlc29sdmVJbm5lcih0KSxyPW8ucmVzb2x2ZSh0LC0xKTtmb3IobGV0IHM9dCxjO289PXImJihjPXIuY2hpbGRCZWZvcmUocykpOyl7bGV0IGQ9Yy5sYXN0Q2hpbGQ7aWYoIWR8fCFkLnR5cGUuaXNFcnJvcnx8ZC5mcm9tPGQudG8pYnJlYWs7bz1yPWMscz1kLmZyb219cmV0dXJuIHIubmFtZT09XCJUYWdOYW1lXCI/ci5wYXJlbnQmJi9DbG9zZVRhZyQvLnRlc3Qoci5wYXJlbnQubmFtZSk/RShuLHIsci5mcm9tLHQpOk8obixlLHIsci5mcm9tLHQpOnIubmFtZT09XCJTdGFydFRhZ1wiP08obixlLHIsdCx0KTpyLm5hbWU9PVwiU3RhcnRDbG9zZVRhZ1wifHxyLm5hbWU9PVwiSW5jb21wbGV0ZUNsb3NlVGFnXCI/RShuLHIsdCx0KTphLmV4cGxpY2l0JiYoci5uYW1lPT1cIk9wZW5UYWdcInx8ci5uYW1lPT1cIlNlbGZDbG9zaW5nVGFnXCIpfHxyLm5hbWU9PVwiQXR0cmlidXRlTmFtZVwiP1EobixlLHIsci5uYW1lPT1cIkF0dHJpYnV0ZU5hbWVcIj9yLmZyb206dCx0KTpyLm5hbWU9PVwiSXNcInx8ci5uYW1lPT1cIkF0dHJpYnV0ZVZhbHVlXCJ8fHIubmFtZT09XCJVbnF1b3RlZEF0dHJpYnV0ZVZhbHVlXCI/WChuLGUscixyLm5hbWU9PVwiSXNcIj90OnIuZnJvbSx0KTphLmV4cGxpY2l0JiYoby5uYW1lPT1cIkVsZW1lbnRcInx8by5uYW1lPT1cIlRleHRcInx8by5uYW1lPT1cIkRvY3VtZW50XCIpP0sobixlLHIsdCk6bnVsbH1mdW5jdGlvbiBvZShlKXtyZXR1cm4gXyhoLmRlZmF1bHQsZSl9ZnVuY3Rpb24gWShlKXtsZXR7ZXh0cmFUYWdzOmEsZXh0cmFHbG9iYWxBdHRyaWJ1dGVzOm59PWUsdD1ufHxhP25ldyBoKGEsbik6aC5kZWZhdWx0O3JldHVybiBvPT5fKHQsbyl9dmFyIHg9TS5kZWZpbmUoe3BhcnNlcjp6LmNvbmZpZ3VyZSh7cHJvcHM6W1AuYWRkKHtFbGVtZW50KGUpe2xldCBhPS9eKFxccyopKDxcXC8pPy8uZXhlYyhlLnRleHRBZnRlcik7cmV0dXJuIGUubm9kZS50bzw9ZS5wb3MrYVswXS5sZW5ndGg/ZS5jb250aW51ZSgpOmUubGluZUluZGVudChlLm5vZGUuZnJvbSkrKGFbMl0/MDplLnVuaXQpfSxcIk9wZW5UYWcgQ2xvc2VUYWcgU2VsZkNsb3NpbmdUYWdcIihlKXtyZXR1cm4gZS5jb2x1bW4oZS5ub2RlLmZyb20pK2UudW5pdH0sRG9jdW1lbnQoZSl7aWYoZS5wb3MrL1xccyovLmV4ZWMoZS50ZXh0QWZ0ZXIpWzBdLmxlbmd0aDxlLm5vZGUudG8pcmV0dXJuIGUuY29udGludWUoKTtsZXQgYT1udWxsLG47Zm9yKGxldCB0PWUubm9kZTs7KXtsZXQgbz10Lmxhc3RDaGlsZDtpZighb3x8by5uYW1lIT1cIkVsZW1lbnRcInx8by50byE9dC50bylicmVhazthPXQ9b31yZXR1cm4gYSYmISgobj1hLmxhc3RDaGlsZCkmJihuLm5hbWU9PVwiQ2xvc2VUYWdcInx8bi5uYW1lPT1cIlNlbGZDbG9zaW5nVGFnXCIpKT9lLmxpbmVJbmRlbnQoYS5mcm9tKStlLnVuaXQ6bnVsbH19KSxVLmFkZCh7RWxlbWVudChlKXtsZXQgYT1lLmZpcnN0Q2hpbGQsbj1lLmxhc3RDaGlsZDtyZXR1cm4hYXx8YS5uYW1lIT1cIk9wZW5UYWdcIj9udWxsOntmcm9tOmEudG8sdG86bi5uYW1lPT1cIkNsb3NlVGFnXCI/bi5mcm9tOmUudG99fX0pXSx3cmFwOkwoW3t0YWc6XCJzY3JpcHRcIixhdHRycyhlKXtyZXR1cm4hZS50eXBlfHwvXig/OnRleHR8YXBwbGljYXRpb24pXFwvKD86eC0pPyg/OmphdmF8ZWNtYSlzY3JpcHQkfF5tb2R1bGUkfF4kL2kudGVzdChlLnR5cGUpfSxwYXJzZXI6Ui5wYXJzZXJ9LHt0YWc6XCJzdHlsZVwiLGF0dHJzKGUpe3JldHVybighZS5sYW5nfHxlLmxhbmc9PVwiY3NzXCIpJiYoIWUudHlwZXx8L14odGV4dFxcLyk/KHgtKT8oc3R5bGVzaGVldHxjc3MpJC9pLnRlc3QoZS50eXBlKSl9LHBhcnNlcjpCLnBhcnNlcn1dKX0pLGxhbmd1YWdlRGF0YTp7Y29tbWVudFRva2Vuczp7YmxvY2s6e29wZW46XCI8IS0tXCIsY2xvc2U6XCItLT5cIn19LGluZGVudE9uSW5wdXQ6L15cXHMqPFxcL1xcdytcXFckLyx3b3JkQ2hhcnM6XCItLl9cIn19KTtmdW5jdGlvbiBzZShlPXt9KXtsZXQgYT14O3JldHVybiBlLm1hdGNoQ2xvc2luZ1RhZ3M9PT0hMSYmKGE9YS5jb25maWd1cmUoe2RpYWxlY3Q6XCJub01hdGNoXCJ9KSksbmV3IFcoYSxbeC5kYXRhLm9mKHthdXRvY29tcGxldGU6WShlKX0pLGUuYXV0b0Nsb3NlVGFncyE9PSExP1o6W10sVigpLnN1cHBvcnQsRigpLnN1cHBvcnRdKX12YXIgWj1HLmlucHV0SGFuZGxlci5vZigoZSxhLG4sdCk9PntpZihlLmNvbXBvc2luZ3x8ZS5zdGF0ZS5yZWFkT25seXx8YSE9bnx8dCE9XCI+XCImJnQhPVwiL1wifHwheC5pc0FjdGl2ZUF0KGUuc3RhdGUsYSwtMSkpcmV0dXJuITE7bGV0e3N0YXRlOm99PWUscj1vLmNoYW5nZUJ5UmFuZ2Uocz0+e3ZhciBjLGQsYjtsZXR7aGVhZDp1fT1zLGk9aihvKS5yZXNvbHZlSW5uZXIodSwtMSkscDtpZigoaS5uYW1lPT1cIlRhZ05hbWVcInx8aS5uYW1lPT1cIlN0YXJ0VGFnXCIpJiYoaT1pLnBhcmVudCksdD09XCI+XCImJmkubmFtZT09XCJPcGVuVGFnXCIpe2lmKCgoZD0oYz1pLnBhcmVudCk9PT1udWxsfHxjPT09dm9pZCAwP3ZvaWQgMDpjLmxhc3RDaGlsZCk9PT1udWxsfHxkPT09dm9pZCAwP3ZvaWQgMDpkLm5hbWUpIT1cIkNsb3NlVGFnXCImJihwPXkoby5kb2MsaS5wYXJlbnQsdSkpKXtsZXQgZj1lLnN0YXRlLmRvYy5zbGljZVN0cmluZyh1LHUrMSk9PT1cIj5cIixnPWAke2Y/XCJcIjpcIj5cIn08LyR7cH0+YDtyZXR1cm57cmFuZ2U6JC5jdXJzb3IodSsxKSxjaGFuZ2VzOntmcm9tOnUrKGY/MTowKSxpbnNlcnQ6Z319fX1lbHNlIGlmKHQ9PVwiL1wiJiZpLm5hbWU9PVwiT3BlblRhZ1wiKXtsZXQgZj1pLnBhcmVudCxnPWY/LnBhcmVudDtpZihmLmZyb209PXUtMSYmKChiPWcubGFzdENoaWxkKT09PW51bGx8fGI9PT12b2lkIDA/dm9pZCAwOmIubmFtZSkhPVwiQ2xvc2VUYWdcIiYmKHA9eShvLmRvYyxnLHUpKSl7bGV0IE49ZS5zdGF0ZS5kb2Muc2xpY2VTdHJpbmcodSx1KzEpPT09XCI+XCIsUz1gLyR7cH0ke04/XCJcIjpcIj5cIn1gLEQ9dStTLmxlbmd0aCsoTj8xOjApO3JldHVybntyYW5nZTokLmN1cnNvcihEKSxjaGFuZ2VzOntmcm9tOnUsaW5zZXJ0OlN9fX19cmV0dXJue3JhbmdlOnN9fSk7cmV0dXJuIHIuY2hhbmdlcy5lbXB0eT8hMTooZS5kaXNwYXRjaChyLHt1c2VyRXZlbnQ6XCJpbnB1dC50eXBlXCIsc2Nyb2xsSW50b1ZpZXc6ITB9KSwhMCl9KTtleHBvcnR7WiBhcyBhdXRvQ2xvc2VUYWdzLHNlIGFzIGh0bWwsb2UgYXMgaHRtbENvbXBsZXRpb25Tb3VyY2UsWSBhcyBodG1sQ29tcGxldGlvblNvdXJjZVdpdGgseCBhcyBodG1sTGFuZ3VhZ2V9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBjb2RlbWlycm9yL2xhbmctbWFya2Rvd25ANi4wLjEpIGRlbm8gcHJvZHVjdGlvbiAqL1xuaW1wb3J0e0VkaXRvclNlbGVjdGlvbiBhcyBrLFByZWMgYXMgcX1mcm9tXCJAY29kZW1pcnJvci9zdGF0ZVwiO2ltcG9ydHtrZXltYXAgYXMgRn1mcm9tXCJAY29kZW1pcnJvci92aWV3XCI7aW1wb3J0e2RlZmluZUxhbmd1YWdlRmFjZXQgYXMgUixmb2xkTm9kZVByb3AgYXMgVCxpbmRlbnROb2RlUHJvcCBhcyBLLGxhbmd1YWdlRGF0YVByb3AgYXMgVixMYW5ndWFnZSBhcyBYLExhbmd1YWdlRGVzY3JpcHRpb24gYXMgUyxQYXJzZUNvbnRleHQgYXMgaixzeW50YXhUcmVlIGFzIE0sTGFuZ3VhZ2VTdXBwb3J0IGFzIHl9ZnJvbVwiQGNvZGVtaXJyb3IvbGFuZ3VhZ2VcIjtpbXBvcnR7cGFyc2VyIGFzIEcsR0ZNIGFzIFEsU3Vic2NyaXB0IGFzICQsU3VwZXJzY3JpcHQgYXMgeixFbW9qaSBhcyBILE1hcmtkb3duUGFyc2VyIGFzIEoscGFyc2VDb2RlIGFzIFV9ZnJvbVwiQGxlemVyL21hcmtkb3duXCI7aW1wb3J0e2h0bWwgYXMgV31mcm9tXCIvdjk2L0Bjb2RlbWlycm9yL2xhbmctaHRtbEA2LjEuMi9YLVpTOUFZMjlrWlcxcGNuSnZjaTlzWVc1bmRXRm5aU3hBWTI5a1pXMXBjbkp2Y2k5emRHRjBaU3hBWTI5a1pXMXBjbkp2Y2k5MmFXVjNMRUJzWlhwbGNpOWpiMjF0YjI0c1FHeGxlbVZ5TDJocFoyaHNhV2RvZEN4QWJHVjZaWEl2YldGeWEyUnZkMjQvZGVuby9sYW5nLWh0bWwuanNcIjt2YXIgST1SKHtibG9jazp7b3BlbjpcIjwhLS1cIixjbG9zZTpcIi0tPlwifX0pLEQ9Ry5jb25maWd1cmUoe3Byb3BzOltULmFkZCh0PT57aWYoISghdC5pcyhcIkJsb2NrXCIpfHx0LmlzKFwiRG9jdW1lbnRcIikpKXJldHVybihzLG8pPT4oe2Zyb206by5kb2MubGluZUF0KHMuZnJvbSkudG8sdG86cy50b30pfSksSy5hZGQoe0RvY3VtZW50OigpPT5udWxsfSksVi5hZGQoe0RvY3VtZW50Okl9KV19KTtmdW5jdGlvbiBCKHQpe3JldHVybiBuZXcgWChJLHQpfXZhciBZPUIoRCksWj1ELmNvbmZpZ3VyZShbUSwkLHosSF0pLEU9QihaKTtmdW5jdGlvbiBfKHQscyl7cmV0dXJuIG89PntpZihvJiZ0KXtsZXQgcj1udWxsO2lmKG89L1xcUyovLmV4ZWMobylbMF0sdHlwZW9mIHQ9PVwiZnVuY3Rpb25cIj9yPXQobyk6cj1TLm1hdGNoTGFuZ3VhZ2VOYW1lKHQsbywhMCksciBpbnN0YW5jZW9mIFMpcmV0dXJuIHIuc3VwcG9ydD9yLnN1cHBvcnQubGFuZ3VhZ2UucGFyc2VyOmouZ2V0U2tpcHBpbmdQYXJzZXIoci5sb2FkKCkpO2lmKHIpcmV0dXJuIHIucGFyc2VyfXJldHVybiBzP3MucGFyc2VyOm51bGx9fWZ1bmN0aW9uIHYodCxzKXtyZXR1cm4gcy5zbGljZVN0cmluZyh0LmZyb20sdC5mcm9tKzUwKX12YXIgeD1jbGFzc3tjb25zdHJ1Y3RvcihzLG8scixmLGEsaSxsKXt0aGlzLm5vZGU9cyx0aGlzLmZyb209byx0aGlzLnRvPXIsdGhpcy5zcGFjZUJlZm9yZT1mLHRoaXMuc3BhY2VBZnRlcj1hLHRoaXMudHlwZT1pLHRoaXMuaXRlbT1sfWJsYW5rKHM9ITApe2xldCBvPXRoaXMuc3BhY2VCZWZvcmU7aWYodGhpcy5ub2RlLm5hbWU9PVwiQmxvY2txdW90ZVwiKW8rPVwiPlwiO2Vsc2UgZm9yKGxldCByPXRoaXMudG8tdGhpcy5mcm9tLW8ubGVuZ3RoLXRoaXMuc3BhY2VBZnRlci5sZW5ndGg7cj4wO3ItLSlvKz1cIiBcIjtyZXR1cm4gbysocz90aGlzLnNwYWNlQWZ0ZXI6XCJcIil9bWFya2VyKHMsbyl7bGV0IHI9dGhpcy5ub2RlLm5hbWU9PVwiT3JkZXJlZExpc3RcIj9TdHJpbmcoK08odGhpcy5pdGVtLHMpWzJdK28pOlwiXCI7cmV0dXJuIHRoaXMuc3BhY2VCZWZvcmUrcit0aGlzLnR5cGUrdGhpcy5zcGFjZUFmdGVyfX07ZnVuY3Rpb24gTih0LHMsbyl7bGV0IHI9W107Zm9yKGxldCBpPXQ7aSYmaS5uYW1lIT1cIkRvY3VtZW50XCI7aT1pLnBhcmVudCkoaS5uYW1lPT1cIkxpc3RJdGVtXCJ8fGkubmFtZT09XCJCbG9ja3F1b3RlXCIpJiZyLnB1c2goaSk7bGV0IGY9W10sYT0wO2ZvcihsZXQgaT1yLmxlbmd0aC0xO2k+PTA7aS0tKXtsZXQgbD1yW2ldLGUsdT1hO2lmKGwubmFtZT09XCJCbG9ja3F1b3RlXCImJihlPS9eWyBcXHRdKj4oID8pLy5leGVjKHMuc2xpY2UoYSkpKSlhKz1lWzBdLmxlbmd0aCxmLnB1c2gobmV3IHgobCx1LGEsXCJcIixlWzFdLFwiPlwiLG51bGwpKTtlbHNlIGlmKGwubmFtZT09XCJMaXN0SXRlbVwiJiZsLnBhcmVudC5uYW1lPT1cIk9yZGVyZWRMaXN0XCImJihlPS9eKFsgXFx0XSopXFxkKyhbLildKShbIFxcdF0qKS8uZXhlYyh2KGwsbykpKSl7bGV0IG49ZVszXSxwPWVbMF0ubGVuZ3RoO24ubGVuZ3RoPj00JiYobj1uLnNsaWNlKDAsbi5sZW5ndGgtNCkscC09NCksYSs9cCxmLnB1c2gobmV3IHgobC5wYXJlbnQsdSxhLGVbMV0sbixlWzJdLGwpKX1lbHNlIGlmKGwubmFtZT09XCJMaXN0SXRlbVwiJiZsLnBhcmVudC5uYW1lPT1cIkJ1bGxldExpc3RcIiYmKGU9L14oWyBcXHRdKikoWy0rKl0pKFsgXFx0XXsxLDR9XFxbWyB4WF1cXF0pPyhbIFxcdF0rKS8uZXhlYyh2KGwsbykpKSl7bGV0IG49ZVs0XSxwPWVbMF0ubGVuZ3RoO24ubGVuZ3RoPjQmJihuPW4uc2xpY2UoMCxuLmxlbmd0aC00KSxwLT00KTtsZXQgZD1lWzJdO2VbM10mJihkKz1lWzNdLnJlcGxhY2UoL1t4WF0vLFwiIFwiKSksYSs9cCxmLnB1c2gobmV3IHgobC5wYXJlbnQsdSxhLGVbMV0sbixkLGwpKX19cmV0dXJuIGZ9ZnVuY3Rpb24gTyh0LHMpe3JldHVybi9eKFxccyopKFxcZCspKD89Wy4pXSkvLmV4ZWMocy5zbGljZVN0cmluZyh0LmZyb20sdC5mcm9tKzEwKSl9ZnVuY3Rpb24gQSh0LHMsbyxyPTApe2ZvcihsZXQgZj0tMSxhPXQ7Oyl7aWYoYS5uYW1lPT1cIkxpc3RJdGVtXCIpe2xldCBsPU8oYSxzKSxlPStsWzJdO2lmKGY+PTApe2lmKGUhPWYrMSlyZXR1cm47by5wdXNoKHtmcm9tOmEuZnJvbStsWzFdLmxlbmd0aCx0bzphLmZyb20rbFswXS5sZW5ndGgsaW5zZXJ0OlN0cmluZyhmKzIrcil9KX1mPWV9bGV0IGk9YS5uZXh0U2libGluZztpZighaSlicmVhazthPWl9fXZhciBlZT0oe3N0YXRlOnQsZGlzcGF0Y2g6c30pPT57bGV0IG89TSh0KSx7ZG9jOnJ9PXQsZj1udWxsLGE9dC5jaGFuZ2VCeVJhbmdlKGk9PntpZighaS5lbXB0eXx8IUUuaXNBY3RpdmVBdCh0LGkuZnJvbSkpcmV0dXJuIGY9e3JhbmdlOml9O2xldCBsPWkuZnJvbSxlPXIubGluZUF0KGwpLHU9TihvLnJlc29sdmVJbm5lcihsLC0xKSxlLnRleHQscik7Zm9yKDt1Lmxlbmd0aCYmdVt1Lmxlbmd0aC0xXS5mcm9tPmwtZS5mcm9tOyl1LnBvcCgpO2lmKCF1Lmxlbmd0aClyZXR1cm4gZj17cmFuZ2U6aX07bGV0IG49dVt1Lmxlbmd0aC0xXTtpZihuLnRvLW4uc3BhY2VBZnRlci5sZW5ndGg+bC1lLmZyb20pcmV0dXJuIGY9e3JhbmdlOml9O2xldCBwPWw+PW4udG8tbi5zcGFjZUFmdGVyLmxlbmd0aCYmIS9cXFMvLnRlc3QoZS50ZXh0LnNsaWNlKG4udG8pKTtpZihuLml0ZW0mJnApaWYobi5ub2RlLmZpcnN0Q2hpbGQudG8+PWx8fGUuZnJvbT4wJiYhL1teXFxzPl0vLnRlc3Qoci5saW5lQXQoZS5mcm9tLTEpLnRleHQpKXtsZXQgbT11Lmxlbmd0aD4xP3VbdS5sZW5ndGgtMl06bnVsbCxjLGg9XCJcIjttJiZtLml0ZW0/KGM9ZS5mcm9tK20uZnJvbSxoPW0ubWFya2VyKHIsMSkpOmM9ZS5mcm9tKyhtP20udG86MCk7bGV0IHc9W3tmcm9tOmMsdG86bCxpbnNlcnQ6aH1dO3JldHVybiBuLm5vZGUubmFtZT09XCJPcmRlcmVkTGlzdFwiJiZBKG4uaXRlbSxyLHcsLTIpLG0mJm0ubm9kZS5uYW1lPT1cIk9yZGVyZWRMaXN0XCImJkEobS5pdGVtLHIsdykse3JhbmdlOmsuY3Vyc29yKGMraC5sZW5ndGgpLGNoYW5nZXM6d319ZWxzZXtsZXQgbT1cIlwiO2ZvcihsZXQgYz0wLGg9dS5sZW5ndGgtMjtjPD1oO2MrKyltKz11W2NdLmJsYW5rKGM8aCk7cmV0dXJuIG0rPXQubGluZUJyZWFrLHtyYW5nZTprLmN1cnNvcihsK20ubGVuZ3RoKSxjaGFuZ2VzOntmcm9tOmUuZnJvbSxpbnNlcnQ6bX19fWlmKG4ubm9kZS5uYW1lPT1cIkJsb2NrcXVvdGVcIiYmcCYmZS5mcm9tKXtsZXQgbT1yLmxpbmVBdChlLmZyb20tMSksYz0vPlxccyokLy5leGVjKG0udGV4dCk7aWYoYyYmYy5pbmRleD09bi5mcm9tKXtsZXQgaD10LmNoYW5nZXMoW3tmcm9tOm0uZnJvbStjLmluZGV4LHRvOm0udG99LHtmcm9tOmUuZnJvbStuLmZyb20sdG86ZS50b31dKTtyZXR1cm57cmFuZ2U6aS5tYXAoaCksY2hhbmdlczpofX19bGV0IGQ9W107bi5ub2RlLm5hbWU9PVwiT3JkZXJlZExpc3RcIiYmQShuLml0ZW0scixkKTtsZXQgTD10LmxpbmVCcmVhayxiPW4uaXRlbSYmbi5pdGVtLmZyb208ZS5mcm9tO2lmKCFifHwvXltcXHNcXGQuKVxcLSsqPl0qLy5leGVjKGUudGV4dClbMF0ubGVuZ3RoPj1uLnRvKWZvcihsZXQgbT0wLGM9dS5sZW5ndGgtMTttPD1jO20rKylMKz1tPT1jJiYhYj91W21dLm1hcmtlcihyLDEpOnVbbV0uYmxhbmsoKTtsZXQgZz1sO2Zvcig7Zz5lLmZyb20mJi9cXHMvLnRlc3QoZS50ZXh0LmNoYXJBdChnLWUuZnJvbS0xKSk7KWctLTtyZXR1cm4gZC5wdXNoKHtmcm9tOmcsdG86bCxpbnNlcnQ6TH0pLHtyYW5nZTprLmN1cnNvcihnK0wubGVuZ3RoKSxjaGFuZ2VzOmR9fSk7cmV0dXJuIGY/ITE6KHModC51cGRhdGUoYSx7c2Nyb2xsSW50b1ZpZXc6ITAsdXNlckV2ZW50OlwiaW5wdXRcIn0pKSwhMCl9O2Z1bmN0aW9uIFAodCl7cmV0dXJuIHQubmFtZT09XCJRdW90ZU1hcmtcInx8dC5uYW1lPT1cIkxpc3RNYXJrXCJ9ZnVuY3Rpb24gdGUodCxzKXtsZXQgbz10LnJlc29sdmVJbm5lcihzLC0xKSxyPXM7UChvKSYmKHI9by5mcm9tLG89by5wYXJlbnQpO2ZvcihsZXQgZjtmPW8uY2hpbGRCZWZvcmUocik7KWlmKFAoZikpcj1mLmZyb207ZWxzZSBpZihmLm5hbWU9PVwiT3JkZXJlZExpc3RcInx8Zi5uYW1lPT1cIkJ1bGxldExpc3RcIilvPWYubGFzdENoaWxkLHI9by50bztlbHNlIGJyZWFrO3JldHVybiBvfXZhciByZT0oe3N0YXRlOnQsZGlzcGF0Y2g6c30pPT57bGV0IG89TSh0KSxyPW51bGwsZj10LmNoYW5nZUJ5UmFuZ2UoYT0+e2xldCBpPWEuZnJvbSx7ZG9jOmx9PXQ7aWYoYS5lbXB0eSYmRS5pc0FjdGl2ZUF0KHQsYS5mcm9tKSl7bGV0IGU9bC5saW5lQXQoaSksdT1OKHRlKG8saSksZS50ZXh0LGwpO2lmKHUubGVuZ3RoKXtsZXQgbj11W3UubGVuZ3RoLTFdLHA9bi50by1uLnNwYWNlQWZ0ZXIubGVuZ3RoKyhuLnNwYWNlQWZ0ZXI/MTowKTtpZihpLWUuZnJvbT5wJiYhL1xcUy8udGVzdChlLnRleHQuc2xpY2UocCxpLWUuZnJvbSkpKXJldHVybntyYW5nZTprLmN1cnNvcihlLmZyb20rcCksY2hhbmdlczp7ZnJvbTplLmZyb20rcCx0bzppfX07aWYoaS1lLmZyb209PXApe2xldCBkPWUuZnJvbStuLmZyb207aWYobi5pdGVtJiZuLm5vZGUuZnJvbTxuLml0ZW0uZnJvbSYmL1xcUy8udGVzdChlLnRleHQuc2xpY2Uobi5mcm9tLG4udG8pKSlyZXR1cm57cmFuZ2U6YSxjaGFuZ2VzOntmcm9tOmQsdG86ZS5mcm9tK24udG8saW5zZXJ0Om4uYmxhbmsoKX19O2lmKGQ8aSlyZXR1cm57cmFuZ2U6ay5jdXJzb3IoZCksY2hhbmdlczp7ZnJvbTpkLHRvOml9fX19fXJldHVybiByPXtyYW5nZTphfX0pO3JldHVybiByPyExOihzKHQudXBkYXRlKGYse3Njcm9sbEludG9WaWV3OiEwLHVzZXJFdmVudDpcImRlbGV0ZVwifSkpLCEwKX0sbmU9W3trZXk6XCJFbnRlclwiLHJ1bjplZX0se2tleTpcIkJhY2tzcGFjZVwiLHJ1bjpyZX1dLEM9Vyh7bWF0Y2hDbG9zaW5nVGFnczohMX0pO2Z1bmN0aW9uIGFlKHQ9e30pe2xldHtjb2RlTGFuZ3VhZ2VzOnMsZGVmYXVsdENvZGVMYW5ndWFnZTpvLGFkZEtleW1hcDpyPSEwLGJhc2U6e3BhcnNlcjpmfT1ZfT10O2lmKCEoZiBpbnN0YW5jZW9mIEopKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQmFzZSBwYXJzZXIgcHJvdmlkZWQgdG8gYG1hcmtkb3duYCBzaG91bGQgYmUgYSBNYXJrZG93biBwYXJzZXJcIik7bGV0IGE9dC5leHRlbnNpb25zP1t0LmV4dGVuc2lvbnNdOltdLGk9W0Muc3VwcG9ydF0sbDtvIGluc3RhbmNlb2YgeT8oaS5wdXNoKG8uc3VwcG9ydCksbD1vLmxhbmd1YWdlKTpvJiYobD1vKTtsZXQgZT1zfHxsP18ocyxsKTp2b2lkIDA7cmV0dXJuIGEucHVzaChVKHtjb2RlUGFyc2VyOmUsaHRtbFBhcnNlcjpDLmxhbmd1YWdlLnBhcnNlcn0pKSxyJiZpLnB1c2gocS5oaWdoKEYub2YobmUpKSksbmV3IHkoQihmLmNvbmZpZ3VyZShhKSksaSl9ZXhwb3J0e1kgYXMgY29tbW9ubWFya0xhbmd1YWdlLHJlIGFzIGRlbGV0ZU1hcmt1cEJhY2t3YXJkLGVlIGFzIGluc2VydE5ld2xpbmVDb250aW51ZU1hcmt1cCxhZSBhcyBtYXJrZG93bixuZSBhcyBtYXJrZG93bktleW1hcCxFIGFzIG1hcmtkb3duTGFuZ3VhZ2V9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBjb2RlbWlycm9yL2xlZ2FjeS1tb2Rlc0A2LjEuMC9tb2RlL3lhbWwpIGRlbm8gcHJvZHVjdGlvbiAqL1xudmFyIGw9W1widHJ1ZVwiLFwiZmFsc2VcIixcIm9uXCIsXCJvZmZcIixcInllc1wiLFwibm9cIl0sZj1uZXcgUmVnRXhwKFwiXFxcXGIoKFwiK2wuam9pbihcIil8KFwiKStcIikpJFwiLFwiaVwiKSxhPXt0b2tlbjpmdW5jdGlvbihuLGkpe3ZhciByPW4ucGVlaygpLGU9aS5lc2NhcGVkO2lmKGkuZXNjYXBlZD0hMSxyPT1cIiNcIiYmKG4ucG9zPT0wfHwvXFxzLy50ZXN0KG4uc3RyaW5nLmNoYXJBdChuLnBvcy0xKSkpKXJldHVybiBuLnNraXBUb0VuZCgpLFwiY29tbWVudFwiO2lmKG4ubWF0Y2goL14oJyhbXiddfFxcXFwuKSonP3xcIihbXlwiXXxcXFxcLikqXCI/KS8pKXJldHVyblwic3RyaW5nXCI7aWYoaS5saXRlcmFsJiZuLmluZGVudGF0aW9uKCk+aS5rZXlDb2wpcmV0dXJuIG4uc2tpcFRvRW5kKCksXCJzdHJpbmdcIjtpZihpLmxpdGVyYWwmJihpLmxpdGVyYWw9ITEpLG4uc29sKCkpe2lmKGkua2V5Q29sPTAsaS5wYWlyPSExLGkucGFpclN0YXJ0PSExLG4ubWF0Y2goXCItLS1cIil8fG4ubWF0Y2goXCIuLi5cIikpcmV0dXJuXCJkZWZcIjtpZihuLm1hdGNoKC9eXFxzKi1cXHMrLykpcmV0dXJuXCJtZXRhXCJ9aWYobi5tYXRjaCgvXihcXHt8XFx9fFxcW3xcXF0pLykpcmV0dXJuIHI9PVwie1wiP2kuaW5saW5lUGFpcnMrKzpyPT1cIn1cIj9pLmlubGluZVBhaXJzLS06cj09XCJbXCI/aS5pbmxpbmVMaXN0Kys6aS5pbmxpbmVMaXN0LS0sXCJtZXRhXCI7aWYoaS5pbmxpbmVMaXN0PjAmJiFlJiZyPT1cIixcIilyZXR1cm4gbi5uZXh0KCksXCJtZXRhXCI7aWYoaS5pbmxpbmVQYWlycz4wJiYhZSYmcj09XCIsXCIpcmV0dXJuIGkua2V5Q29sPTAsaS5wYWlyPSExLGkucGFpclN0YXJ0PSExLG4ubmV4dCgpLFwibWV0YVwiO2lmKGkucGFpclN0YXJ0KXtpZihuLm1hdGNoKC9eXFxzKihcXHx8XFw+KVxccyovKSlyZXR1cm4gaS5saXRlcmFsPSEwLFwibWV0YVwiO2lmKG4ubWF0Y2goL15cXHMqKFxcJnxcXCopW2EtejAtOVxcLl8tXStcXGIvaSkpcmV0dXJuXCJ2YXJpYWJsZVwiO2lmKGkuaW5saW5lUGFpcnM9PTAmJm4ubWF0Y2goL15cXHMqLT9bMC05XFwuXFwsXStcXHM/JC8pfHxpLmlubGluZVBhaXJzPjAmJm4ubWF0Y2goL15cXHMqLT9bMC05XFwuXFwsXStcXHM/KD89KCx8fSkpLykpcmV0dXJuXCJudW1iZXJcIjtpZihuLm1hdGNoKGYpKXJldHVyblwia2V5d29yZFwifXJldHVybiFpLnBhaXImJm4ubWF0Y2goL15cXHMqKD86WyxcXFtcXF17fSYqIXw+J1wiJUBgXVteXFxzJ1wiOl18W14sXFxbXFxde30jJiohfD4nXCIlQGBdKVteI10qPyg/PVxccyo6KCR8XFxzKSkvKT8oaS5wYWlyPSEwLGkua2V5Q29sPW4uaW5kZW50YXRpb24oKSxcImF0b21cIik6aS5wYWlyJiZuLm1hdGNoKC9eOlxccyovKT8oaS5wYWlyU3RhcnQ9ITAsXCJtZXRhXCIpOihpLnBhaXJTdGFydD0hMSxpLmVzY2FwZWQ9cj09XCJcXFxcXCIsbi5uZXh0KCksbnVsbCl9LHN0YXJ0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm57cGFpcjohMSxwYWlyU3RhcnQ6ITEsa2V5Q29sOjAsaW5saW5lUGFpcnM6MCxpbmxpbmVMaXN0OjAsbGl0ZXJhbDohMSxlc2NhcGVkOiExfX0sbGFuZ3VhZ2VEYXRhOntjb21tZW50VG9rZW5zOntsaW5lOlwiI1wifX19O2V4cG9ydHthIGFzIHlhbWx9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBsZXplci9sckAxLjIuMykgZGVubyBwcm9kdWN0aW9uICovXG5pbXBvcnQgX19Qcm9jZXNzJCBmcm9tIFwiaHR0cHM6Ly9kZW5vLmxhbmQvc3RkQDAuMTUzLjAvbm9kZS9wcm9jZXNzLnRzXCI7aW1wb3J0e1BhcnNlciBhcyBxLE5vZGVTZXQgYXMgSixOb2RlVHlwZSBhcyBLLERlZmF1bHRCdWZmZXJMZW5ndGggYXMgUSxOb2RlUHJvcCBhcyBPLFRyZWUgYXMgdixJdGVyTW9kZSBhcyBWfWZyb21cIkBsZXplci9jb21tb25cIjt2YXIgYj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUscyxpLGgscixuLGEsbCx1PTAsZil7dGhpcy5wPXQsdGhpcy5zdGFjaz1lLHRoaXMuc3RhdGU9cyx0aGlzLnJlZHVjZVBvcz1pLHRoaXMucG9zPWgsdGhpcy5zY29yZT1yLHRoaXMuYnVmZmVyPW4sdGhpcy5idWZmZXJCYXNlPWEsdGhpcy5jdXJDb250ZXh0PWwsdGhpcy5sb29rQWhlYWQ9dSx0aGlzLnBhcmVudD1mfXRvU3RyaW5nKCl7cmV0dXJuYFske3RoaXMuc3RhY2suZmlsdGVyKCh0LGUpPT5lJTM9PTApLmNvbmNhdCh0aGlzLnN0YXRlKX1dQCR7dGhpcy5wb3N9JHt0aGlzLnNjb3JlP1wiIVwiK3RoaXMuc2NvcmU6XCJcIn1gfXN0YXRpYyBzdGFydCh0LGUscz0wKXtsZXQgaT10LnBhcnNlci5jb250ZXh0O3JldHVybiBuZXcgYih0LFtdLGUscyxzLDAsW10sMCxpP25ldyB3KGksaS5zdGFydCk6bnVsbCwwLG51bGwpfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuY3VyQ29udGV4dD90aGlzLmN1ckNvbnRleHQuY29udGV4dDpudWxsfXB1c2hTdGF0ZSh0LGUpe3RoaXMuc3RhY2sucHVzaCh0aGlzLnN0YXRlLGUsdGhpcy5idWZmZXJCYXNlK3RoaXMuYnVmZmVyLmxlbmd0aCksdGhpcy5zdGF0ZT10fXJlZHVjZSh0KXtsZXQgZT10Pj4xOSxzPXQmNjU1MzUse3BhcnNlcjppfT10aGlzLnAsaD1pLmR5bmFtaWNQcmVjZWRlbmNlKHMpO2lmKGgmJih0aGlzLnNjb3JlKz1oKSxlPT0wKXt0aGlzLnB1c2hTdGF0ZShpLmdldEdvdG8odGhpcy5zdGF0ZSxzLCEwKSx0aGlzLnJlZHVjZVBvcyksczxpLm1pblJlcGVhdFRlcm0mJnRoaXMuc3RvcmVOb2RlKHMsdGhpcy5yZWR1Y2VQb3MsdGhpcy5yZWR1Y2VQb3MsNCwhMCksdGhpcy5yZWR1Y2VDb250ZXh0KHMsdGhpcy5yZWR1Y2VQb3MpO3JldHVybn1sZXQgcj10aGlzLnN0YWNrLmxlbmd0aC0oZS0xKSozLSh0JjI2MjE0ND82OjApLG49dGhpcy5zdGFja1tyLTJdLGE9dGhpcy5zdGFja1tyLTFdLGw9dGhpcy5idWZmZXJCYXNlK3RoaXMuYnVmZmVyLmxlbmd0aC1hO2lmKHM8aS5taW5SZXBlYXRUZXJtfHx0JjEzMTA3Mil7bGV0IHU9aS5zdGF0ZUZsYWcodGhpcy5zdGF0ZSwxKT90aGlzLnBvczp0aGlzLnJlZHVjZVBvczt0aGlzLnN0b3JlTm9kZShzLG4sdSxsKzQsITApfWlmKHQmMjYyMTQ0KXRoaXMuc3RhdGU9dGhpcy5zdGFja1tyXTtlbHNle2xldCB1PXRoaXMuc3RhY2tbci0zXTt0aGlzLnN0YXRlPWkuZ2V0R290byh1LHMsITApfWZvcig7dGhpcy5zdGFjay5sZW5ndGg+cjspdGhpcy5zdGFjay5wb3AoKTt0aGlzLnJlZHVjZUNvbnRleHQocyxuKX1zdG9yZU5vZGUodCxlLHMsaT00LGg9ITEpe2lmKHQ9PTAmJighdGhpcy5zdGFjay5sZW5ndGh8fHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV08dGhpcy5idWZmZXIubGVuZ3RoK3RoaXMuYnVmZmVyQmFzZSkpe2xldCByPXRoaXMsbj10aGlzLmJ1ZmZlci5sZW5ndGg7aWYobj09MCYmci5wYXJlbnQmJihuPXIuYnVmZmVyQmFzZS1yLnBhcmVudC5idWZmZXJCYXNlLHI9ci5wYXJlbnQpLG4+MCYmci5idWZmZXJbbi00XT09MCYmci5idWZmZXJbbi0xXT4tMSl7aWYoZT09cylyZXR1cm47aWYoci5idWZmZXJbbi0yXT49ZSl7ci5idWZmZXJbbi0yXT1zO3JldHVybn19fWlmKCFofHx0aGlzLnBvcz09cyl0aGlzLmJ1ZmZlci5wdXNoKHQsZSxzLGkpO2Vsc2V7bGV0IHI9dGhpcy5idWZmZXIubGVuZ3RoO2lmKHI+MCYmdGhpcy5idWZmZXJbci00XSE9MClmb3IoO3I+MCYmdGhpcy5idWZmZXJbci0yXT5zOyl0aGlzLmJ1ZmZlcltyXT10aGlzLmJ1ZmZlcltyLTRdLHRoaXMuYnVmZmVyW3IrMV09dGhpcy5idWZmZXJbci0zXSx0aGlzLmJ1ZmZlcltyKzJdPXRoaXMuYnVmZmVyW3ItMl0sdGhpcy5idWZmZXJbciszXT10aGlzLmJ1ZmZlcltyLTFdLHItPTQsaT40JiYoaS09NCk7dGhpcy5idWZmZXJbcl09dCx0aGlzLmJ1ZmZlcltyKzFdPWUsdGhpcy5idWZmZXJbcisyXT1zLHRoaXMuYnVmZmVyW3IrM109aX19c2hpZnQodCxlLHMpe2xldCBpPXRoaXMucG9zO2lmKHQmMTMxMDcyKXRoaXMucHVzaFN0YXRlKHQmNjU1MzUsdGhpcy5wb3MpO2Vsc2UgaWYoKHQmMjYyMTQ0KT09MCl7bGV0IGg9dCx7cGFyc2VyOnJ9PXRoaXMucDsocz50aGlzLnBvc3x8ZTw9ci5tYXhOb2RlKSYmKHRoaXMucG9zPXMsci5zdGF0ZUZsYWcoaCwxKXx8KHRoaXMucmVkdWNlUG9zPXMpKSx0aGlzLnB1c2hTdGF0ZShoLGkpLHRoaXMuc2hpZnRDb250ZXh0KGUsaSksZTw9ci5tYXhOb2RlJiZ0aGlzLmJ1ZmZlci5wdXNoKGUsaSxzLDQpfWVsc2UgdGhpcy5wb3M9cyx0aGlzLnNoaWZ0Q29udGV4dChlLGkpLGU8PXRoaXMucC5wYXJzZXIubWF4Tm9kZSYmdGhpcy5idWZmZXIucHVzaChlLGkscyw0KX1hcHBseSh0LGUscyl7dCY2NTUzNj90aGlzLnJlZHVjZSh0KTp0aGlzLnNoaWZ0KHQsZSxzKX11c2VOb2RlKHQsZSl7bGV0IHM9dGhpcy5wLnJldXNlZC5sZW5ndGgtMTsoczwwfHx0aGlzLnAucmV1c2VkW3NdIT10KSYmKHRoaXMucC5yZXVzZWQucHVzaCh0KSxzKyspO2xldCBpPXRoaXMucG9zO3RoaXMucmVkdWNlUG9zPXRoaXMucG9zPWkrdC5sZW5ndGgsdGhpcy5wdXNoU3RhdGUoZSxpKSx0aGlzLmJ1ZmZlci5wdXNoKHMsaSx0aGlzLnJlZHVjZVBvcywtMSksdGhpcy5jdXJDb250ZXh0JiZ0aGlzLnVwZGF0ZUNvbnRleHQodGhpcy5jdXJDb250ZXh0LnRyYWNrZXIucmV1c2UodGhpcy5jdXJDb250ZXh0LmNvbnRleHQsdCx0aGlzLHRoaXMucC5zdHJlYW0ucmVzZXQodGhpcy5wb3MtdC5sZW5ndGgpKSl9c3BsaXQoKXtsZXQgdD10aGlzLGU9dC5idWZmZXIubGVuZ3RoO2Zvcig7ZT4wJiZ0LmJ1ZmZlcltlLTJdPnQucmVkdWNlUG9zOyllLT00O2xldCBzPXQuYnVmZmVyLnNsaWNlKGUpLGk9dC5idWZmZXJCYXNlK2U7Zm9yKDt0JiZpPT10LmJ1ZmZlckJhc2U7KXQ9dC5wYXJlbnQ7cmV0dXJuIG5ldyBiKHRoaXMucCx0aGlzLnN0YWNrLnNsaWNlKCksdGhpcy5zdGF0ZSx0aGlzLnJlZHVjZVBvcyx0aGlzLnBvcyx0aGlzLnNjb3JlLHMsaSx0aGlzLmN1ckNvbnRleHQsdGhpcy5sb29rQWhlYWQsdCl9cmVjb3ZlckJ5RGVsZXRlKHQsZSl7bGV0IHM9dDw9dGhpcy5wLnBhcnNlci5tYXhOb2RlO3MmJnRoaXMuc3RvcmVOb2RlKHQsdGhpcy5wb3MsZSw0KSx0aGlzLnN0b3JlTm9kZSgwLHRoaXMucG9zLGUscz84OjQpLHRoaXMucG9zPXRoaXMucmVkdWNlUG9zPWUsdGhpcy5zY29yZS09MTkwfWNhblNoaWZ0KHQpe2ZvcihsZXQgZT1uZXcgTih0aGlzKTs7KXtsZXQgcz10aGlzLnAucGFyc2VyLnN0YXRlU2xvdChlLnN0YXRlLDQpfHx0aGlzLnAucGFyc2VyLmhhc0FjdGlvbihlLnN0YXRlLHQpO2lmKChzJjY1NTM2KT09MClyZXR1cm4hMDtpZihzPT0wKXJldHVybiExO2UucmVkdWNlKHMpfX1yZWNvdmVyQnlJbnNlcnQodCl7aWYodGhpcy5zdGFjay5sZW5ndGg+PTMwMClyZXR1cm5bXTtsZXQgZT10aGlzLnAucGFyc2VyLm5leHRTdGF0ZXModGhpcy5zdGF0ZSk7aWYoZS5sZW5ndGg+NDw8MXx8dGhpcy5zdGFjay5sZW5ndGg+PTEyMCl7bGV0IGk9W107Zm9yKGxldCBoPTAscjtoPGUubGVuZ3RoO2grPTIpKHI9ZVtoKzFdKSE9dGhpcy5zdGF0ZSYmdGhpcy5wLnBhcnNlci5oYXNBY3Rpb24ocix0KSYmaS5wdXNoKGVbaF0scik7aWYodGhpcy5zdGFjay5sZW5ndGg8MTIwKWZvcihsZXQgaD0wO2kubGVuZ3RoPDQ8PDEmJmg8ZS5sZW5ndGg7aCs9Mil7bGV0IHI9ZVtoKzFdO2kuc29tZSgobixhKT0+YSYxJiZuPT1yKXx8aS5wdXNoKGVbaF0scil9ZT1pfWxldCBzPVtdO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgmJnMubGVuZ3RoPDQ7aSs9Mil7bGV0IGg9ZVtpKzFdO2lmKGg9PXRoaXMuc3RhdGUpY29udGludWU7bGV0IHI9dGhpcy5zcGxpdCgpO3IucHVzaFN0YXRlKGgsdGhpcy5wb3MpLHIuc3RvcmVOb2RlKDAsci5wb3Msci5wb3MsNCwhMCksci5zaGlmdENvbnRleHQoZVtpXSx0aGlzLnBvcyksci5zY29yZS09MjAwLHMucHVzaChyKX1yZXR1cm4gc31mb3JjZVJlZHVjZSgpe2xldCB0PXRoaXMucC5wYXJzZXIuc3RhdGVTbG90KHRoaXMuc3RhdGUsNSk7aWYoKHQmNjU1MzYpPT0wKXJldHVybiExO2xldHtwYXJzZXI6ZX09dGhpcy5wO2lmKCFlLnZhbGlkQWN0aW9uKHRoaXMuc3RhdGUsdCkpe2xldCBzPXQ+PjE5LGk9dCY2NTUzNSxoPXRoaXMuc3RhY2subGVuZ3RoLXMqMztpZihoPDB8fGUuZ2V0R290byh0aGlzLnN0YWNrW2hdLGksITEpPDApcmV0dXJuITE7dGhpcy5zdG9yZU5vZGUoMCx0aGlzLnJlZHVjZVBvcyx0aGlzLnJlZHVjZVBvcyw0LCEwKSx0aGlzLnNjb3JlLT0xMDB9cmV0dXJuIHRoaXMucmVkdWNlUG9zPXRoaXMucG9zLHRoaXMucmVkdWNlKHQpLCEwfWZvcmNlQWxsKCl7Zm9yKDshdGhpcy5wLnBhcnNlci5zdGF0ZUZsYWcodGhpcy5zdGF0ZSwyKTspaWYoIXRoaXMuZm9yY2VSZWR1Y2UoKSl7dGhpcy5zdG9yZU5vZGUoMCx0aGlzLnBvcyx0aGlzLnBvcyw0LCEwKTticmVha31yZXR1cm4gdGhpc31nZXQgZGVhZEVuZCgpe2lmKHRoaXMuc3RhY2subGVuZ3RoIT0zKXJldHVybiExO2xldHtwYXJzZXI6dH09dGhpcy5wO3JldHVybiB0LmRhdGFbdC5zdGF0ZVNsb3QodGhpcy5zdGF0ZSwxKV09PTY1NTM1JiYhdC5zdGF0ZVNsb3QodGhpcy5zdGF0ZSw0KX1yZXN0YXJ0KCl7dGhpcy5zdGF0ZT10aGlzLnN0YWNrWzBdLHRoaXMuc3RhY2subGVuZ3RoPTB9c2FtZVN0YXRlKHQpe2lmKHRoaXMuc3RhdGUhPXQuc3RhdGV8fHRoaXMuc3RhY2subGVuZ3RoIT10LnN0YWNrLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPHRoaXMuc3RhY2subGVuZ3RoO2UrPTMpaWYodGhpcy5zdGFja1tlXSE9dC5zdGFja1tlXSlyZXR1cm4hMTtyZXR1cm4hMH1nZXQgcGFyc2VyKCl7cmV0dXJuIHRoaXMucC5wYXJzZXJ9ZGlhbGVjdEVuYWJsZWQodCl7cmV0dXJuIHRoaXMucC5wYXJzZXIuZGlhbGVjdC5mbGFnc1t0XX1zaGlmdENvbnRleHQodCxlKXt0aGlzLmN1ckNvbnRleHQmJnRoaXMudXBkYXRlQ29udGV4dCh0aGlzLmN1ckNvbnRleHQudHJhY2tlci5zaGlmdCh0aGlzLmN1ckNvbnRleHQuY29udGV4dCx0LHRoaXMsdGhpcy5wLnN0cmVhbS5yZXNldChlKSkpfXJlZHVjZUNvbnRleHQodCxlKXt0aGlzLmN1ckNvbnRleHQmJnRoaXMudXBkYXRlQ29udGV4dCh0aGlzLmN1ckNvbnRleHQudHJhY2tlci5yZWR1Y2UodGhpcy5jdXJDb250ZXh0LmNvbnRleHQsdCx0aGlzLHRoaXMucC5zdHJlYW0ucmVzZXQoZSkpKX1lbWl0Q29udGV4dCgpe2xldCB0PXRoaXMuYnVmZmVyLmxlbmd0aC0xOyh0PDB8fHRoaXMuYnVmZmVyW3RdIT0tMykmJnRoaXMuYnVmZmVyLnB1c2godGhpcy5jdXJDb250ZXh0Lmhhc2gsdGhpcy5yZWR1Y2VQb3MsdGhpcy5yZWR1Y2VQb3MsLTMpfWVtaXRMb29rQWhlYWQoKXtsZXQgdD10aGlzLmJ1ZmZlci5sZW5ndGgtMTsodDwwfHx0aGlzLmJ1ZmZlclt0XSE9LTQpJiZ0aGlzLmJ1ZmZlci5wdXNoKHRoaXMubG9va0FoZWFkLHRoaXMucmVkdWNlUG9zLHRoaXMucmVkdWNlUG9zLC00KX11cGRhdGVDb250ZXh0KHQpe2lmKHQhPXRoaXMuY3VyQ29udGV4dC5jb250ZXh0KXtsZXQgZT1uZXcgdyh0aGlzLmN1ckNvbnRleHQudHJhY2tlcix0KTtlLmhhc2ghPXRoaXMuY3VyQ29udGV4dC5oYXNoJiZ0aGlzLmVtaXRDb250ZXh0KCksdGhpcy5jdXJDb250ZXh0PWV9fXNldExvb2tBaGVhZCh0KXt0PnRoaXMubG9va0FoZWFkJiYodGhpcy5lbWl0TG9va0FoZWFkKCksdGhpcy5sb29rQWhlYWQ9dCl9Y2xvc2UoKXt0aGlzLmN1ckNvbnRleHQmJnRoaXMuY3VyQ29udGV4dC50cmFja2VyLnN0cmljdCYmdGhpcy5lbWl0Q29udGV4dCgpLHRoaXMubG9va0FoZWFkPjAmJnRoaXMuZW1pdExvb2tBaGVhZCgpfX0sdz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudHJhY2tlcj10LHRoaXMuY29udGV4dD1lLHRoaXMuaGFzaD10LnN0cmljdD90Lmhhc2goZSk6MH19LEI7KGZ1bmN0aW9uKG8pe29bby5JbnNlcnQ9MjAwXT1cIkluc2VydFwiLG9bby5EZWxldGU9MTkwXT1cIkRlbGV0ZVwiLG9bby5SZWR1Y2U9MTAwXT1cIlJlZHVjZVwiLG9bby5NYXhOZXh0PTRdPVwiTWF4TmV4dFwiLG9bby5NYXhJbnNlcnRTdGFja0RlcHRoPTMwMF09XCJNYXhJbnNlcnRTdGFja0RlcHRoXCIsb1tvLkRhbXBlbkluc2VydFN0YWNrRGVwdGg9MTIwXT1cIkRhbXBlbkluc2VydFN0YWNrRGVwdGhcIn0pKEJ8fChCPXt9KSk7dmFyIE49Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5zdGFydD10LHRoaXMuc3RhdGU9dC5zdGF0ZSx0aGlzLnN0YWNrPXQuc3RhY2ssdGhpcy5iYXNlPXRoaXMuc3RhY2subGVuZ3RofXJlZHVjZSh0KXtsZXQgZT10JjY1NTM1LHM9dD4+MTk7cz09MD8odGhpcy5zdGFjaz09dGhpcy5zdGFydC5zdGFjayYmKHRoaXMuc3RhY2s9dGhpcy5zdGFjay5zbGljZSgpKSx0aGlzLnN0YWNrLnB1c2godGhpcy5zdGF0ZSwwLDApLHRoaXMuYmFzZSs9Myk6dGhpcy5iYXNlLT0ocy0xKSozO2xldCBpPXRoaXMuc3RhcnQucC5wYXJzZXIuZ2V0R290byh0aGlzLnN0YWNrW3RoaXMuYmFzZS0zXSxlLCEwKTt0aGlzLnN0YXRlPWl9fSxQPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxzKXt0aGlzLnN0YWNrPXQsdGhpcy5wb3M9ZSx0aGlzLmluZGV4PXMsdGhpcy5idWZmZXI9dC5idWZmZXIsdGhpcy5pbmRleD09MCYmdGhpcy5tYXliZU5leHQoKX1zdGF0aWMgY3JlYXRlKHQsZT10LmJ1ZmZlckJhc2UrdC5idWZmZXIubGVuZ3RoKXtyZXR1cm4gbmV3IFAodCxlLGUtdC5idWZmZXJCYXNlKX1tYXliZU5leHQoKXtsZXQgdD10aGlzLnN0YWNrLnBhcmVudDt0IT1udWxsJiYodGhpcy5pbmRleD10aGlzLnN0YWNrLmJ1ZmZlckJhc2UtdC5idWZmZXJCYXNlLHRoaXMuc3RhY2s9dCx0aGlzLmJ1ZmZlcj10LmJ1ZmZlcil9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtNF19Z2V0IHN0YXJ0KCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtM119Z2V0IGVuZCgpe3JldHVybiB0aGlzLmJ1ZmZlclt0aGlzLmluZGV4LTJdfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtMV19bmV4dCgpe3RoaXMuaW5kZXgtPTQsdGhpcy5wb3MtPTQsdGhpcy5pbmRleD09MCYmdGhpcy5tYXliZU5leHQoKX1mb3JrKCl7cmV0dXJuIG5ldyBQKHRoaXMuc3RhY2ssdGhpcy5wb3MsdGhpcy5pbmRleCl9fSxtPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFydD0tMSx0aGlzLnZhbHVlPS0xLHRoaXMuZW5kPS0xLHRoaXMuZXh0ZW5kZWQ9LTEsdGhpcy5sb29rQWhlYWQ9MCx0aGlzLm1hc2s9MCx0aGlzLmNvbnRleHQ9MH19LEY9bmV3IG0sVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaW5wdXQ9dCx0aGlzLnJhbmdlcz1lLHRoaXMuY2h1bms9XCJcIix0aGlzLmNodW5rT2ZmPTAsdGhpcy5jaHVuazI9XCJcIix0aGlzLmNodW5rMlBvcz0wLHRoaXMubmV4dD0tMSx0aGlzLnRva2VuPUYsdGhpcy5yYW5nZUluZGV4PTAsdGhpcy5wb3M9dGhpcy5jaHVua1Bvcz1lWzBdLmZyb20sdGhpcy5yYW5nZT1lWzBdLHRoaXMuZW5kPWVbZS5sZW5ndGgtMV0udG8sdGhpcy5yZWFkTmV4dCgpfXJlc29sdmVPZmZzZXQodCxlKXtsZXQgcz10aGlzLnJhbmdlLGk9dGhpcy5yYW5nZUluZGV4LGg9dGhpcy5wb3MrdDtmb3IoO2g8cy5mcm9tOyl7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5yYW5nZXNbLS1pXTtoLT1zLmZyb20tci50byxzPXJ9Zm9yKDtlPDA/aD5zLnRvOmg+PXMudG87KXtpZihpPT10aGlzLnJhbmdlcy5sZW5ndGgtMSlyZXR1cm4gbnVsbDtsZXQgcj10aGlzLnJhbmdlc1srK2ldO2grPXIuZnJvbS1zLnRvLHM9cn1yZXR1cm4gaH1jbGlwUG9zKHQpe2lmKHQ+PXRoaXMucmFuZ2UuZnJvbSYmdDx0aGlzLnJhbmdlLnRvKXJldHVybiB0O2ZvcihsZXQgZSBvZiB0aGlzLnJhbmdlcylpZihlLnRvPnQpcmV0dXJuIE1hdGgubWF4KHQsZS5mcm9tKTtyZXR1cm4gdGhpcy5lbmR9cGVlayh0KXtsZXQgZT10aGlzLmNodW5rT2ZmK3QscyxpO2lmKGU+PTAmJmU8dGhpcy5jaHVuay5sZW5ndGgpcz10aGlzLnBvcyt0LGk9dGhpcy5jaHVuay5jaGFyQ29kZUF0KGUpO2Vsc2V7bGV0IGg9dGhpcy5yZXNvbHZlT2Zmc2V0KHQsMSk7aWYoaD09bnVsbClyZXR1cm4tMTtpZihzPWgscz49dGhpcy5jaHVuazJQb3MmJnM8dGhpcy5jaHVuazJQb3MrdGhpcy5jaHVuazIubGVuZ3RoKWk9dGhpcy5jaHVuazIuY2hhckNvZGVBdChzLXRoaXMuY2h1bmsyUG9zKTtlbHNle2xldCByPXRoaXMucmFuZ2VJbmRleCxuPXRoaXMucmFuZ2U7Zm9yKDtuLnRvPD1zOyluPXRoaXMucmFuZ2VzWysrcl07dGhpcy5jaHVuazI9dGhpcy5pbnB1dC5jaHVuayh0aGlzLmNodW5rMlBvcz1zKSxzK3RoaXMuY2h1bmsyLmxlbmd0aD5uLnRvJiYodGhpcy5jaHVuazI9dGhpcy5jaHVuazIuc2xpY2UoMCxuLnRvLXMpKSxpPXRoaXMuY2h1bmsyLmNoYXJDb2RlQXQoMCl9fXJldHVybiBzPj10aGlzLnRva2VuLmxvb2tBaGVhZCYmKHRoaXMudG9rZW4ubG9va0FoZWFkPXMrMSksaX1hY2NlcHRUb2tlbih0LGU9MCl7bGV0IHM9ZT90aGlzLnJlc29sdmVPZmZzZXQoZSwtMSk6dGhpcy5wb3M7aWYocz09bnVsbHx8czx0aGlzLnRva2VuLnN0YXJ0KXRocm93IG5ldyBSYW5nZUVycm9yKFwiVG9rZW4gZW5kIG91dCBvZiBib3VuZHNcIik7dGhpcy50b2tlbi52YWx1ZT10LHRoaXMudG9rZW4uZW5kPXN9Z2V0Q2h1bmsoKXtpZih0aGlzLnBvcz49dGhpcy5jaHVuazJQb3MmJnRoaXMucG9zPHRoaXMuY2h1bmsyUG9zK3RoaXMuY2h1bmsyLmxlbmd0aCl7bGV0e2NodW5rOnQsY2h1bmtQb3M6ZX09dGhpczt0aGlzLmNodW5rPXRoaXMuY2h1bmsyLHRoaXMuY2h1bmtQb3M9dGhpcy5jaHVuazJQb3MsdGhpcy5jaHVuazI9dCx0aGlzLmNodW5rMlBvcz1lLHRoaXMuY2h1bmtPZmY9dGhpcy5wb3MtdGhpcy5jaHVua1Bvc31lbHNle3RoaXMuY2h1bmsyPXRoaXMuY2h1bmssdGhpcy5jaHVuazJQb3M9dGhpcy5jaHVua1BvcztsZXQgdD10aGlzLmlucHV0LmNodW5rKHRoaXMucG9zKSxlPXRoaXMucG9zK3QubGVuZ3RoO3RoaXMuY2h1bms9ZT50aGlzLnJhbmdlLnRvP3Quc2xpY2UoMCx0aGlzLnJhbmdlLnRvLXRoaXMucG9zKTp0LHRoaXMuY2h1bmtQb3M9dGhpcy5wb3MsdGhpcy5jaHVua09mZj0wfX1yZWFkTmV4dCgpe3JldHVybiB0aGlzLmNodW5rT2ZmPj10aGlzLmNodW5rLmxlbmd0aCYmKHRoaXMuZ2V0Q2h1bmsoKSx0aGlzLmNodW5rT2ZmPT10aGlzLmNodW5rLmxlbmd0aCk/dGhpcy5uZXh0PS0xOnRoaXMubmV4dD10aGlzLmNodW5rLmNoYXJDb2RlQXQodGhpcy5jaHVua09mZil9YWR2YW5jZSh0PTEpe2Zvcih0aGlzLmNodW5rT2ZmKz10O3RoaXMucG9zK3Q+PXRoaXMucmFuZ2UudG87KXtpZih0aGlzLnJhbmdlSW5kZXg9PXRoaXMucmFuZ2VzLmxlbmd0aC0xKXJldHVybiB0aGlzLnNldERvbmUoKTt0LT10aGlzLnJhbmdlLnRvLXRoaXMucG9zLHRoaXMucmFuZ2U9dGhpcy5yYW5nZXNbKyt0aGlzLnJhbmdlSW5kZXhdLHRoaXMucG9zPXRoaXMucmFuZ2UuZnJvbX1yZXR1cm4gdGhpcy5wb3MrPXQsdGhpcy5wb3M+PXRoaXMudG9rZW4ubG9va0FoZWFkJiYodGhpcy50b2tlbi5sb29rQWhlYWQ9dGhpcy5wb3MrMSksdGhpcy5yZWFkTmV4dCgpfXNldERvbmUoKXtyZXR1cm4gdGhpcy5wb3M9dGhpcy5jaHVua1Bvcz10aGlzLmVuZCx0aGlzLnJhbmdlPXRoaXMucmFuZ2VzW3RoaXMucmFuZ2VJbmRleD10aGlzLnJhbmdlcy5sZW5ndGgtMV0sdGhpcy5jaHVuaz1cIlwiLHRoaXMubmV4dD0tMX1yZXNldCh0LGUpe2lmKGU/KHRoaXMudG9rZW49ZSxlLnN0YXJ0PXQsZS5sb29rQWhlYWQ9dCsxLGUudmFsdWU9ZS5leHRlbmRlZD0tMSk6dGhpcy50b2tlbj1GLHRoaXMucG9zIT10KXtpZih0aGlzLnBvcz10LHQ9PXRoaXMuZW5kKXJldHVybiB0aGlzLnNldERvbmUoKSx0aGlzO2Zvcig7dDx0aGlzLnJhbmdlLmZyb207KXRoaXMucmFuZ2U9dGhpcy5yYW5nZXNbLS10aGlzLnJhbmdlSW5kZXhdO2Zvcig7dD49dGhpcy5yYW5nZS50bzspdGhpcy5yYW5nZT10aGlzLnJhbmdlc1srK3RoaXMucmFuZ2VJbmRleF07dD49dGhpcy5jaHVua1BvcyYmdDx0aGlzLmNodW5rUG9zK3RoaXMuY2h1bmsubGVuZ3RoP3RoaXMuY2h1bmtPZmY9dC10aGlzLmNodW5rUG9zOih0aGlzLmNodW5rPVwiXCIsdGhpcy5jaHVua09mZj0wKSx0aGlzLnJlYWROZXh0KCl9cmV0dXJuIHRoaXN9cmVhZCh0LGUpe2lmKHQ+PXRoaXMuY2h1bmtQb3MmJmU8PXRoaXMuY2h1bmtQb3MrdGhpcy5jaHVuay5sZW5ndGgpcmV0dXJuIHRoaXMuY2h1bmsuc2xpY2UodC10aGlzLmNodW5rUG9zLGUtdGhpcy5jaHVua1Bvcyk7aWYodD49dGhpcy5jaHVuazJQb3MmJmU8PXRoaXMuY2h1bmsyUG9zK3RoaXMuY2h1bmsyLmxlbmd0aClyZXR1cm4gdGhpcy5jaHVuazIuc2xpY2UodC10aGlzLmNodW5rMlBvcyxlLXRoaXMuY2h1bmsyUG9zKTtpZih0Pj10aGlzLnJhbmdlLmZyb20mJmU8PXRoaXMucmFuZ2UudG8pcmV0dXJuIHRoaXMuaW5wdXQucmVhZCh0LGUpO2xldCBzPVwiXCI7Zm9yKGxldCBpIG9mIHRoaXMucmFuZ2VzKXtpZihpLmZyb20+PWUpYnJlYWs7aS50bz50JiYocys9dGhpcy5pbnB1dC5yZWFkKE1hdGgubWF4KGkuZnJvbSx0KSxNYXRoLm1pbihpLnRvLGUpKSl9cmV0dXJuIHN9fSx4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5kYXRhPXQsdGhpcy5pZD1lfXRva2VuKHQsZSl7WCh0aGlzLmRhdGEsdCxlLHRoaXMuaWQpfX07eC5wcm90b3R5cGUuY29udGV4dHVhbD14LnByb3RvdHlwZS5mYWxsYmFjaz14LnByb3RvdHlwZS5leHRlbmQ9ITE7dmFyIEw9Y2xhc3N7Y29uc3RydWN0b3IodCxlPXt9KXt0aGlzLnRva2VuPXQsdGhpcy5jb250ZXh0dWFsPSEhZS5jb250ZXh0dWFsLHRoaXMuZmFsbGJhY2s9ISFlLmZhbGxiYWNrLHRoaXMuZXh0ZW5kPSEhZS5leHRlbmR9fTtmdW5jdGlvbiBYKG8sdCxlLHMpe2xldCBpPTAsaD0xPDxzLHtwYXJzZXI6cn09ZS5wLHtkaWFsZWN0Om59PXI7dDpmb3IoOyhoJm9baV0pIT0wOyl7bGV0IGE9b1tpKzFdO2ZvcihsZXQgYz1pKzM7YzxhO2MrPTIpaWYoKG9bYysxXSZoKT4wKXtsZXQgcD1vW2NdO2lmKG4uYWxsb3dzKHApJiYodC50b2tlbi52YWx1ZT09LTF8fHQudG9rZW4udmFsdWU9PXB8fHIub3ZlcnJpZGVzKHAsdC50b2tlbi52YWx1ZSkpKXt0LmFjY2VwdFRva2VuKHApO2JyZWFrfX1sZXQgbD10Lm5leHQsdT0wLGY9b1tpKzJdO2lmKHQubmV4dDwwJiZmPnUmJm9bYStmKjMtM109PTY1NTM1KXtpPW9bYStmKjMtMV07Y29udGludWUgdH1mb3IoO3U8Zjspe2xldCBjPXUrZj4+MSxwPWErYysoYzw8MSksZz1vW3BdLFc9b1twKzFdO2lmKGw8ZylmPWM7ZWxzZSBpZihsPj1XKXU9YysxO2Vsc2V7aT1vW3ArMl0sdC5hZHZhbmNlKCk7Y29udGludWUgdH19YnJlYWt9fWZ1bmN0aW9uIEEobyx0PVVpbnQxNkFycmF5KXtpZih0eXBlb2YgbyE9XCJzdHJpbmdcIilyZXR1cm4gbztsZXQgZT1udWxsO2ZvcihsZXQgcz0wLGk9MDtzPG8ubGVuZ3RoOyl7bGV0IGg9MDtmb3IoOzspe2xldCByPW8uY2hhckNvZGVBdChzKyspLG49ITE7aWYocj09MTI2KXtoPTY1NTM1O2JyZWFrfXI+PTkyJiZyLS0scj49MzQmJnItLTtsZXQgYT1yLTMyO2lmKGE+PTQ2JiYoYS09NDYsbj0hMCksaCs9YSxuKWJyZWFrO2gqPTQ2fWU/ZVtpKytdPWg6ZT1uZXcgdChoKX1yZXR1cm4gZX12YXIgZD10eXBlb2YgX19Qcm9jZXNzJDxcInVcIiYmX19Qcm9jZXNzJC5lbnYmJi9cXGJwYXJzZVxcYi8udGVzdChfX1Byb2Nlc3MkLmVudi5MT0cpLHk9bnVsbCwkOyhmdW5jdGlvbihvKXtvW28uTWFyZ2luPTI1XT1cIk1hcmdpblwifSkoJHx8KCQ9e30pKTtmdW5jdGlvbiBqKG8sdCxlKXtsZXQgcz1vLmN1cnNvcihWLkluY2x1ZGVBbm9ueW1vdXMpO2ZvcihzLm1vdmVUbyh0KTs7KWlmKCEoZTwwP3MuY2hpbGRCZWZvcmUodCk6cy5jaGlsZEFmdGVyKHQpKSlmb3IoOzspe2lmKChlPDA/cy50bzx0OnMuZnJvbT50KSYmIXMudHlwZS5pc0Vycm9yKXJldHVybiBlPDA/TWF0aC5tYXgoMCxNYXRoLm1pbihzLnRvLTEsdC0yNSkpOk1hdGgubWluKG8ubGVuZ3RoLE1hdGgubWF4KHMuZnJvbSsxLHQrMjUpKTtpZihlPDA/cy5wcmV2U2libGluZygpOnMubmV4dFNpYmxpbmcoKSlicmVhaztpZighcy5wYXJlbnQoKSlyZXR1cm4gZTwwPzA6by5sZW5ndGh9fXZhciBEPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5mcmFnbWVudHM9dCx0aGlzLm5vZGVTZXQ9ZSx0aGlzLmk9MCx0aGlzLmZyYWdtZW50PW51bGwsdGhpcy5zYWZlRnJvbT0tMSx0aGlzLnNhZmVUbz0tMSx0aGlzLnRyZWVzPVtdLHRoaXMuc3RhcnQ9W10sdGhpcy5pbmRleD1bXSx0aGlzLm5leHRGcmFnbWVudCgpfW5leHRGcmFnbWVudCgpe2xldCB0PXRoaXMuZnJhZ21lbnQ9dGhpcy5pPT10aGlzLmZyYWdtZW50cy5sZW5ndGg/bnVsbDp0aGlzLmZyYWdtZW50c1t0aGlzLmkrK107aWYodCl7Zm9yKHRoaXMuc2FmZUZyb209dC5vcGVuU3RhcnQ/aih0LnRyZWUsdC5mcm9tK3Qub2Zmc2V0LDEpLXQub2Zmc2V0OnQuZnJvbSx0aGlzLnNhZmVUbz10Lm9wZW5FbmQ/aih0LnRyZWUsdC50byt0Lm9mZnNldCwtMSktdC5vZmZzZXQ6dC50bzt0aGlzLnRyZWVzLmxlbmd0aDspdGhpcy50cmVlcy5wb3AoKSx0aGlzLnN0YXJ0LnBvcCgpLHRoaXMuaW5kZXgucG9wKCk7dGhpcy50cmVlcy5wdXNoKHQudHJlZSksdGhpcy5zdGFydC5wdXNoKC10Lm9mZnNldCksdGhpcy5pbmRleC5wdXNoKDApLHRoaXMubmV4dFN0YXJ0PXRoaXMuc2FmZUZyb219ZWxzZSB0aGlzLm5leHRTdGFydD0xZTl9bm9kZUF0KHQpe2lmKHQ8dGhpcy5uZXh0U3RhcnQpcmV0dXJuIG51bGw7Zm9yKDt0aGlzLmZyYWdtZW50JiZ0aGlzLnNhZmVUbzw9dDspdGhpcy5uZXh0RnJhZ21lbnQoKTtpZighdGhpcy5mcmFnbWVudClyZXR1cm4gbnVsbDtmb3IoOzspe2xldCBlPXRoaXMudHJlZXMubGVuZ3RoLTE7aWYoZTwwKXJldHVybiB0aGlzLm5leHRGcmFnbWVudCgpLG51bGw7bGV0IHM9dGhpcy50cmVlc1tlXSxpPXRoaXMuaW5kZXhbZV07aWYoaT09cy5jaGlsZHJlbi5sZW5ndGgpe3RoaXMudHJlZXMucG9wKCksdGhpcy5zdGFydC5wb3AoKSx0aGlzLmluZGV4LnBvcCgpO2NvbnRpbnVlfWxldCBoPXMuY2hpbGRyZW5baV0scj10aGlzLnN0YXJ0W2VdK3MucG9zaXRpb25zW2ldO2lmKHI+dClyZXR1cm4gdGhpcy5uZXh0U3RhcnQ9cixudWxsO2lmKGggaW5zdGFuY2VvZiB2KXtpZihyPT10KXtpZihyPHRoaXMuc2FmZUZyb20pcmV0dXJuIG51bGw7bGV0IG49citoLmxlbmd0aDtpZihuPD10aGlzLnNhZmVUbyl7bGV0IGE9aC5wcm9wKE8ubG9va0FoZWFkKTtpZighYXx8bithPHRoaXMuZnJhZ21lbnQudG8pcmV0dXJuIGh9fXRoaXMuaW5kZXhbZV0rKyxyK2gubGVuZ3RoPj1NYXRoLm1heCh0aGlzLnNhZmVGcm9tLHQpJiYodGhpcy50cmVlcy5wdXNoKGgpLHRoaXMuc3RhcnQucHVzaChyKSx0aGlzLmluZGV4LnB1c2goMCkpfWVsc2UgdGhpcy5pbmRleFtlXSsrLHRoaXMubmV4dFN0YXJ0PXIraC5sZW5ndGh9fX0sST1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RyZWFtPWUsdGhpcy50b2tlbnM9W10sdGhpcy5tYWluVG9rZW49bnVsbCx0aGlzLmFjdGlvbnM9W10sdGhpcy50b2tlbnM9dC50b2tlbml6ZXJzLm1hcChzPT5uZXcgbSl9Z2V0QWN0aW9ucyh0KXtsZXQgZT0wLHM9bnVsbCx7cGFyc2VyOml9PXQucCx7dG9rZW5pemVyczpofT1pLHI9aS5zdGF0ZVNsb3QodC5zdGF0ZSwzKSxuPXQuY3VyQ29udGV4dD90LmN1ckNvbnRleHQuaGFzaDowLGE9MDtmb3IobGV0IGw9MDtsPGgubGVuZ3RoO2wrKyl7aWYoKDE8PGwmcik9PTApY29udGludWU7bGV0IHU9aFtsXSxmPXRoaXMudG9rZW5zW2xdO2lmKCEocyYmIXUuZmFsbGJhY2spJiYoKHUuY29udGV4dHVhbHx8Zi5zdGFydCE9dC5wb3N8fGYubWFzayE9cnx8Zi5jb250ZXh0IT1uKSYmKHRoaXMudXBkYXRlQ2FjaGVkVG9rZW4oZix1LHQpLGYubWFzaz1yLGYuY29udGV4dD1uKSxmLmxvb2tBaGVhZD5mLmVuZCsyNSYmKGE9TWF0aC5tYXgoZi5sb29rQWhlYWQsYSkpLGYudmFsdWUhPTApKXtsZXQgYz1lO2lmKGYuZXh0ZW5kZWQ+LTEmJihlPXRoaXMuYWRkQWN0aW9ucyh0LGYuZXh0ZW5kZWQsZi5lbmQsZSkpLGU9dGhpcy5hZGRBY3Rpb25zKHQsZi52YWx1ZSxmLmVuZCxlKSwhdS5leHRlbmQmJihzPWYsZT5jKSlicmVha319Zm9yKDt0aGlzLmFjdGlvbnMubGVuZ3RoPmU7KXRoaXMuYWN0aW9ucy5wb3AoKTtyZXR1cm4gYSYmdC5zZXRMb29rQWhlYWQoYSksIXMmJnQucG9zPT10aGlzLnN0cmVhbS5lbmQmJihzPW5ldyBtLHMudmFsdWU9dC5wLnBhcnNlci5lb2ZUZXJtLHMuc3RhcnQ9cy5lbmQ9dC5wb3MsZT10aGlzLmFkZEFjdGlvbnModCxzLnZhbHVlLHMuZW5kLGUpKSx0aGlzLm1haW5Ub2tlbj1zLHRoaXMuYWN0aW9uc31nZXRNYWluVG9rZW4odCl7aWYodGhpcy5tYWluVG9rZW4pcmV0dXJuIHRoaXMubWFpblRva2VuO2xldCBlPW5ldyBtLHtwb3M6cyxwOml9PXQ7cmV0dXJuIGUuc3RhcnQ9cyxlLmVuZD1NYXRoLm1pbihzKzEsaS5zdHJlYW0uZW5kKSxlLnZhbHVlPXM9PWkuc3RyZWFtLmVuZD9pLnBhcnNlci5lb2ZUZXJtOjAsZX11cGRhdGVDYWNoZWRUb2tlbih0LGUscyl7bGV0IGk9dGhpcy5zdHJlYW0uY2xpcFBvcyhzLnBvcyk7aWYoZS50b2tlbih0aGlzLnN0cmVhbS5yZXNldChpLHQpLHMpLHQudmFsdWU+LTEpe2xldHtwYXJzZXI6aH09cy5wO2ZvcihsZXQgcj0wO3I8aC5zcGVjaWFsaXplZC5sZW5ndGg7cisrKWlmKGguc3BlY2lhbGl6ZWRbcl09PXQudmFsdWUpe2xldCBuPWguc3BlY2lhbGl6ZXJzW3JdKHRoaXMuc3RyZWFtLnJlYWQodC5zdGFydCx0LmVuZCkscyk7aWYobj49MCYmcy5wLnBhcnNlci5kaWFsZWN0LmFsbG93cyhuPj4xKSl7KG4mMSk9PTA/dC52YWx1ZT1uPj4xOnQuZXh0ZW5kZWQ9bj4+MTticmVha319fWVsc2UgdC52YWx1ZT0wLHQuZW5kPXRoaXMuc3RyZWFtLmNsaXBQb3MoaSsxKX1wdXRBY3Rpb24odCxlLHMsaSl7Zm9yKGxldCBoPTA7aDxpO2grPTMpaWYodGhpcy5hY3Rpb25zW2hdPT10KXJldHVybiBpO3JldHVybiB0aGlzLmFjdGlvbnNbaSsrXT10LHRoaXMuYWN0aW9uc1tpKytdPWUsdGhpcy5hY3Rpb25zW2krK109cyxpfWFkZEFjdGlvbnModCxlLHMsaSl7bGV0e3N0YXRlOmh9PXQse3BhcnNlcjpyfT10LnAse2RhdGE6bn09cjtmb3IobGV0IGE9MDthPDI7YSsrKWZvcihsZXQgbD1yLnN0YXRlU2xvdChoLGE/MjoxKTs7bCs9Myl7aWYobltsXT09NjU1MzUpaWYobltsKzFdPT0xKWw9ayhuLGwrMik7ZWxzZXtpPT0wJiZuW2wrMV09PTImJihpPXRoaXMucHV0QWN0aW9uKGsobixsKzIpLGUscyxpKSk7YnJlYWt9bltsXT09ZSYmKGk9dGhpcy5wdXRBY3Rpb24oayhuLGwrMSksZSxzLGkpKX1yZXR1cm4gaX19LFI7KGZ1bmN0aW9uKG8pe29bby5EaXN0YW5jZT01XT1cIkRpc3RhbmNlXCIsb1tvLk1heFJlbWFpbmluZ1BlclN0ZXA9M109XCJNYXhSZW1haW5pbmdQZXJTdGVwXCIsb1tvLk1pbkJ1ZmZlckxlbmd0aFBydW5lPTUwMF09XCJNaW5CdWZmZXJMZW5ndGhQcnVuZVwiLG9bby5Gb3JjZVJlZHVjZUxpbWl0PTEwXT1cIkZvcmNlUmVkdWNlTGltaXRcIixvW28uQ3V0RGVwdGg9MTVlM109XCJDdXREZXB0aFwiLG9bby5DdXRUbz05ZTNdPVwiQ3V0VG9cIn0pKFJ8fChSPXt9KSk7dmFyIHo9Y2xhc3N7Y29uc3RydWN0b3IodCxlLHMsaSl7dGhpcy5wYXJzZXI9dCx0aGlzLmlucHV0PWUsdGhpcy5yYW5nZXM9aSx0aGlzLnJlY292ZXJpbmc9MCx0aGlzLm5leHRTdGFja0lEPTk4MTIsdGhpcy5taW5TdGFja1Bvcz0wLHRoaXMucmV1c2VkPVtdLHRoaXMuc3RvcHBlZEF0PW51bGwsdGhpcy5zdHJlYW09bmV3IFQoZSxpKSx0aGlzLnRva2Vucz1uZXcgSSh0LHRoaXMuc3RyZWFtKSx0aGlzLnRvcFRlcm09dC50b3BbMV07bGV0e2Zyb206aH09aVswXTt0aGlzLnN0YWNrcz1bYi5zdGFydCh0aGlzLHQudG9wWzBdLGgpXSx0aGlzLmZyYWdtZW50cz1zLmxlbmd0aCYmdGhpcy5zdHJlYW0uZW5kLWg+dC5idWZmZXJMZW5ndGgqND9uZXcgRChzLHQubm9kZVNldCk6bnVsbH1nZXQgcGFyc2VkUG9zKCl7cmV0dXJuIHRoaXMubWluU3RhY2tQb3N9YWR2YW5jZSgpe2xldCB0PXRoaXMuc3RhY2tzLGU9dGhpcy5taW5TdGFja1BvcyxzPXRoaXMuc3RhY2tzPVtdLGksaDtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtmb3IoOzspe2lmKHRoaXMudG9rZW5zLm1haW5Ub2tlbj1udWxsLG4ucG9zPmUpcy5wdXNoKG4pO2Vsc2V7aWYodGhpcy5hZHZhbmNlU3RhY2sobixzLHQpKWNvbnRpbnVlO3tpfHwoaT1bXSxoPVtdKSxpLnB1c2gobik7bGV0IGE9dGhpcy50b2tlbnMuZ2V0TWFpblRva2VuKG4pO2gucHVzaChhLnZhbHVlLGEuZW5kKX19YnJlYWt9fWlmKCFzLmxlbmd0aCl7bGV0IHI9aSYmWShpKTtpZihyKXJldHVybiB0aGlzLnN0YWNrVG9UcmVlKHIpO2lmKHRoaXMucGFyc2VyLnN0cmljdCl0aHJvdyBkJiZpJiZjb25zb2xlLmxvZyhcIlN0dWNrIHdpdGggdG9rZW4gXCIrKHRoaXMudG9rZW5zLm1haW5Ub2tlbj90aGlzLnBhcnNlci5nZXROYW1lKHRoaXMudG9rZW5zLm1haW5Ub2tlbi52YWx1ZSk6XCJub25lXCIpKSxuZXcgU3ludGF4RXJyb3IoXCJObyBwYXJzZSBhdCBcIitlKTt0aGlzLnJlY292ZXJpbmd8fCh0aGlzLnJlY292ZXJpbmc9NSl9aWYodGhpcy5yZWNvdmVyaW5nJiZpKXtsZXQgcj10aGlzLnN0b3BwZWRBdCE9bnVsbCYmaVswXS5wb3M+dGhpcy5zdG9wcGVkQXQ/aVswXTp0aGlzLnJ1blJlY292ZXJ5KGksaCxzKTtpZihyKXJldHVybiB0aGlzLnN0YWNrVG9UcmVlKHIuZm9yY2VBbGwoKSl9aWYodGhpcy5yZWNvdmVyaW5nKXtsZXQgcj10aGlzLnJlY292ZXJpbmc9PTE/MTp0aGlzLnJlY292ZXJpbmcqMztpZihzLmxlbmd0aD5yKWZvcihzLnNvcnQoKG4sYSk9PmEuc2NvcmUtbi5zY29yZSk7cy5sZW5ndGg+cjspcy5wb3AoKTtzLnNvbWUobj0+bi5yZWR1Y2VQb3M+ZSkmJnRoaXMucmVjb3ZlcmluZy0tfWVsc2UgaWYocy5sZW5ndGg+MSl7dDpmb3IobGV0IHI9MDtyPHMubGVuZ3RoLTE7cisrKXtsZXQgbj1zW3JdO2ZvcihsZXQgYT1yKzE7YTxzLmxlbmd0aDthKyspe2xldCBsPXNbYV07aWYobi5zYW1lU3RhdGUobCl8fG4uYnVmZmVyLmxlbmd0aD41MDAmJmwuYnVmZmVyLmxlbmd0aD41MDApaWYoKG4uc2NvcmUtbC5zY29yZXx8bi5idWZmZXIubGVuZ3RoLWwuYnVmZmVyLmxlbmd0aCk+MClzLnNwbGljZShhLS0sMSk7ZWxzZXtzLnNwbGljZShyLS0sMSk7Y29udGludWUgdH19fX10aGlzLm1pblN0YWNrUG9zPXNbMF0ucG9zO2ZvcihsZXQgcj0xO3I8cy5sZW5ndGg7cisrKXNbcl0ucG9zPHRoaXMubWluU3RhY2tQb3MmJih0aGlzLm1pblN0YWNrUG9zPXNbcl0ucG9zKTtyZXR1cm4gbnVsbH1zdG9wQXQodCl7aWYodGhpcy5zdG9wcGVkQXQhPW51bGwmJnRoaXMuc3RvcHBlZEF0PHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDYW4ndCBtb3ZlIHN0b3BwZWRBdCBmb3J3YXJkXCIpO3RoaXMuc3RvcHBlZEF0PXR9YWR2YW5jZVN0YWNrKHQsZSxzKXtsZXQgaT10LnBvcyx7cGFyc2VyOmh9PXRoaXMscj1kP3RoaXMuc3RhY2tJRCh0KStcIiAtPiBcIjpcIlwiO2lmKHRoaXMuc3RvcHBlZEF0IT1udWxsJiZpPnRoaXMuc3RvcHBlZEF0KXJldHVybiB0LmZvcmNlUmVkdWNlKCk/dDpudWxsO2lmKHRoaXMuZnJhZ21lbnRzKXtsZXQgbD10LmN1ckNvbnRleHQmJnQuY3VyQ29udGV4dC50cmFja2VyLnN0cmljdCx1PWw/dC5jdXJDb250ZXh0Lmhhc2g6MDtmb3IobGV0IGY9dGhpcy5mcmFnbWVudHMubm9kZUF0KGkpO2Y7KXtsZXQgYz10aGlzLnBhcnNlci5ub2RlU2V0LnR5cGVzW2YudHlwZS5pZF09PWYudHlwZT9oLmdldEdvdG8odC5zdGF0ZSxmLnR5cGUuaWQpOi0xO2lmKGM+LTEmJmYubGVuZ3RoJiYoIWx8fChmLnByb3AoTy5jb250ZXh0SGFzaCl8fDApPT11KSlyZXR1cm4gdC51c2VOb2RlKGYsYyksZCYmY29uc29sZS5sb2cocit0aGlzLnN0YWNrSUQodCkrYCAodmlhIHJldXNlIG9mICR7aC5nZXROYW1lKGYudHlwZS5pZCl9KWApLCEwO2lmKCEoZiBpbnN0YW5jZW9mIHYpfHxmLmNoaWxkcmVuLmxlbmd0aD09MHx8Zi5wb3NpdGlvbnNbMF0+MClicmVhaztsZXQgcD1mLmNoaWxkcmVuWzBdO2lmKHAgaW5zdGFuY2VvZiB2JiZmLnBvc2l0aW9uc1swXT09MClmPXA7ZWxzZSBicmVha319bGV0IG49aC5zdGF0ZVNsb3QodC5zdGF0ZSw0KTtpZihuPjApcmV0dXJuIHQucmVkdWNlKG4pLGQmJmNvbnNvbGUubG9nKHIrdGhpcy5zdGFja0lEKHQpK2AgKHZpYSBhbHdheXMtcmVkdWNlICR7aC5nZXROYW1lKG4mNjU1MzUpfSlgKSwhMDtpZih0LnN0YWNrLmxlbmd0aD49MTVlMylmb3IoO3Quc3RhY2subGVuZ3RoPjllMyYmdC5mb3JjZVJlZHVjZSgpOyk7bGV0IGE9dGhpcy50b2tlbnMuZ2V0QWN0aW9ucyh0KTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoOyl7bGV0IHU9YVtsKytdLGY9YVtsKytdLGM9YVtsKytdLHA9bD09YS5sZW5ndGh8fCFzLGc9cD90OnQuc3BsaXQoKTtpZihnLmFwcGx5KHUsZixjKSxkJiZjb25zb2xlLmxvZyhyK3RoaXMuc3RhY2tJRChnKStgICh2aWEgJHsodSY2NTUzNik9PTA/XCJzaGlmdFwiOmByZWR1Y2Ugb2YgJHtoLmdldE5hbWUodSY2NTUzNSl9YH0gZm9yICR7aC5nZXROYW1lKGYpfSBAICR7aX0ke2c9PXQ/XCJcIjpcIiwgc3BsaXRcIn0pYCkscClyZXR1cm4hMDtnLnBvcz5pP2UucHVzaChnKTpzLnB1c2goZyl9cmV0dXJuITF9YWR2YW5jZUZ1bGx5KHQsZSl7bGV0IHM9dC5wb3M7Zm9yKDs7KXtpZighdGhpcy5hZHZhbmNlU3RhY2sodCxudWxsLG51bGwpKXJldHVybiExO2lmKHQucG9zPnMpcmV0dXJuIEcodCxlKSwhMH19cnVuUmVjb3ZlcnkodCxlLHMpe2xldCBpPW51bGwsaD0hMTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXSxhPWVbcjw8MV0sbD1lWyhyPDwxKSsxXSx1PWQ/dGhpcy5zdGFja0lEKG4pK1wiIC0+IFwiOlwiXCI7aWYobi5kZWFkRW5kJiYoaHx8KGg9ITAsbi5yZXN0YXJ0KCksZCYmY29uc29sZS5sb2codSt0aGlzLnN0YWNrSUQobikrXCIgKHJlc3RhcnRlZClcIiksdGhpcy5hZHZhbmNlRnVsbHkobixzKSkpKWNvbnRpbnVlO2xldCBmPW4uc3BsaXQoKSxjPXU7Zm9yKGxldCBwPTA7Zi5mb3JjZVJlZHVjZSgpJiZwPDEwJiYoZCYmY29uc29sZS5sb2coYyt0aGlzLnN0YWNrSUQoZikrXCIgKHZpYSBmb3JjZS1yZWR1Y2UpXCIpLCF0aGlzLmFkdmFuY2VGdWxseShmLHMpKTtwKyspZCYmKGM9dGhpcy5zdGFja0lEKGYpK1wiIC0+IFwiKTtmb3IobGV0IHAgb2Ygbi5yZWNvdmVyQnlJbnNlcnQoYSkpZCYmY29uc29sZS5sb2codSt0aGlzLnN0YWNrSUQocCkrXCIgKHZpYSByZWNvdmVyLWluc2VydClcIiksdGhpcy5hZHZhbmNlRnVsbHkocCxzKTt0aGlzLnN0cmVhbS5lbmQ+bi5wb3M/KGw9PW4ucG9zJiYobCsrLGE9MCksbi5yZWNvdmVyQnlEZWxldGUoYSxsKSxkJiZjb25zb2xlLmxvZyh1K3RoaXMuc3RhY2tJRChuKStgICh2aWEgcmVjb3Zlci1kZWxldGUgJHt0aGlzLnBhcnNlci5nZXROYW1lKGEpfSlgKSxHKG4scykpOighaXx8aS5zY29yZTxuLnNjb3JlKSYmKGk9bil9cmV0dXJuIGl9c3RhY2tUb1RyZWUodCl7cmV0dXJuIHQuY2xvc2UoKSx2LmJ1aWxkKHtidWZmZXI6UC5jcmVhdGUodCksbm9kZVNldDp0aGlzLnBhcnNlci5ub2RlU2V0LHRvcElEOnRoaXMudG9wVGVybSxtYXhCdWZmZXJMZW5ndGg6dGhpcy5wYXJzZXIuYnVmZmVyTGVuZ3RoLHJldXNlZDp0aGlzLnJldXNlZCxzdGFydDp0aGlzLnJhbmdlc1swXS5mcm9tLGxlbmd0aDp0LnBvcy10aGlzLnJhbmdlc1swXS5mcm9tLG1pblJlcGVhdFR5cGU6dGhpcy5wYXJzZXIubWluUmVwZWF0VGVybX0pfXN0YWNrSUQodCl7bGV0IGU9KHl8fCh5PW5ldyBXZWFrTWFwKSkuZ2V0KHQpO3JldHVybiBlfHx5LnNldCh0LGU9U3RyaW5nLmZyb21Db2RlUG9pbnQodGhpcy5uZXh0U3RhY2tJRCsrKSksZSt0fX07ZnVuY3Rpb24gRyhvLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgcz10W2VdO2lmKHMucG9zPT1vLnBvcyYmcy5zYW1lU3RhdGUobykpe3RbZV0uc2NvcmU8by5zY29yZSYmKHRbZV09byk7cmV0dXJufX10LnB1c2gobyl9dmFyIE09Y2xhc3N7Y29uc3RydWN0b3IodCxlLHMpe3RoaXMuc291cmNlPXQsdGhpcy5mbGFncz1lLHRoaXMuZGlzYWJsZWQ9c31hbGxvd3ModCl7cmV0dXJuIXRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZWRbdF09PTB9fSxDPW89Pm8sRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN0YXJ0PXQuc3RhcnQsdGhpcy5zaGlmdD10LnNoaWZ0fHxDLHRoaXMucmVkdWNlPXQucmVkdWNlfHxDLHRoaXMucmV1c2U9dC5yZXVzZXx8Qyx0aGlzLmhhc2g9dC5oYXNofHwoKCk9PjApLHRoaXMuc3RyaWN0PXQuc3RyaWN0IT09ITF9fSxTPWNsYXNzIGV4dGVuZHMgcXtjb25zdHJ1Y3Rvcih0KXtpZihzdXBlcigpLHRoaXMud3JhcHBlcnM9W10sdC52ZXJzaW9uIT0xNCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUGFyc2VyIHZlcnNpb24gKCR7dC52ZXJzaW9ufSkgZG9lc24ndCBtYXRjaCBydW50aW1lIHZlcnNpb24gKCR7MTR9KWApO2xldCBlPXQubm9kZU5hbWVzLnNwbGl0KFwiIFwiKTt0aGlzLm1pblJlcGVhdFRlcm09ZS5sZW5ndGg7Zm9yKGxldCBuPTA7bjx0LnJlcGVhdE5vZGVDb3VudDtuKyspZS5wdXNoKFwiXCIpO2xldCBzPU9iamVjdC5rZXlzKHQudG9wUnVsZXMpLm1hcChuPT50LnRvcFJ1bGVzW25dWzFdKSxpPVtdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKWkucHVzaChbXSk7ZnVuY3Rpb24gaChuLGEsbCl7aVtuXS5wdXNoKFthLGEuZGVzZXJpYWxpemUoU3RyaW5nKGwpKV0pfWlmKHQubm9kZVByb3BzKWZvcihsZXQgbiBvZiB0Lm5vZGVQcm9wcyl7bGV0IGE9blswXTt0eXBlb2YgYT09XCJzdHJpbmdcIiYmKGE9T1thXSk7Zm9yKGxldCBsPTE7bDxuLmxlbmd0aDspe2xldCB1PW5bbCsrXTtpZih1Pj0wKWgodSxhLG5bbCsrXSk7ZWxzZXtsZXQgZj1uW2wrLXVdO2ZvcihsZXQgYz0tdTtjPjA7Yy0tKWgobltsKytdLGEsZik7bCsrfX19dGhpcy5ub2RlU2V0PW5ldyBKKGUubWFwKChuLGEpPT5LLmRlZmluZSh7bmFtZTphPj10aGlzLm1pblJlcGVhdFRlcm0/dm9pZCAwOm4saWQ6YSxwcm9wczppW2FdLHRvcDpzLmluZGV4T2YoYSk+LTEsZXJyb3I6YT09MCxza2lwcGVkOnQuc2tpcHBlZE5vZGVzJiZ0LnNraXBwZWROb2Rlcy5pbmRleE9mKGEpPi0xfSkpKSx0LnByb3BTb3VyY2VzJiYodGhpcy5ub2RlU2V0PXRoaXMubm9kZVNldC5leHRlbmQoLi4udC5wcm9wU291cmNlcykpLHRoaXMuc3RyaWN0PSExLHRoaXMuYnVmZmVyTGVuZ3RoPVE7bGV0IHI9QSh0LnRva2VuRGF0YSk7dGhpcy5jb250ZXh0PXQuY29udGV4dCx0aGlzLnNwZWNpYWxpemVyU3BlY3M9dC5zcGVjaWFsaXplZHx8W10sdGhpcy5zcGVjaWFsaXplZD1uZXcgVWludDE2QXJyYXkodGhpcy5zcGVjaWFsaXplclNwZWNzLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0aGlzLnNwZWNpYWxpemVyU3BlY3MubGVuZ3RoO24rKyl0aGlzLnNwZWNpYWxpemVkW25dPXRoaXMuc3BlY2lhbGl6ZXJTcGVjc1tuXS50ZXJtO3RoaXMuc3BlY2lhbGl6ZXJzPXRoaXMuc3BlY2lhbGl6ZXJTcGVjcy5tYXAoSCksdGhpcy5zdGF0ZXM9QSh0LnN0YXRlcyxVaW50MzJBcnJheSksdGhpcy5kYXRhPUEodC5zdGF0ZURhdGEpLHRoaXMuZ290bz1BKHQuZ290byksdGhpcy5tYXhUZXJtPXQubWF4VGVybSx0aGlzLnRva2VuaXplcnM9dC50b2tlbml6ZXJzLm1hcChuPT50eXBlb2Ygbj09XCJudW1iZXJcIj9uZXcgeChyLG4pOm4pLHRoaXMudG9wUnVsZXM9dC50b3BSdWxlcyx0aGlzLmRpYWxlY3RzPXQuZGlhbGVjdHN8fHt9LHRoaXMuZHluYW1pY1ByZWNlZGVuY2VzPXQuZHluYW1pY1ByZWNlZGVuY2VzfHxudWxsLHRoaXMudG9rZW5QcmVjVGFibGU9dC50b2tlblByZWMsdGhpcy50ZXJtTmFtZXM9dC50ZXJtTmFtZXN8fG51bGwsdGhpcy5tYXhOb2RlPXRoaXMubm9kZVNldC50eXBlcy5sZW5ndGgtMSx0aGlzLmRpYWxlY3Q9dGhpcy5wYXJzZURpYWxlY3QoKSx0aGlzLnRvcD10aGlzLnRvcFJ1bGVzW09iamVjdC5rZXlzKHRoaXMudG9wUnVsZXMpWzBdXX1jcmVhdGVQYXJzZSh0LGUscyl7bGV0IGk9bmV3IHoodGhpcyx0LGUscyk7Zm9yKGxldCBoIG9mIHRoaXMud3JhcHBlcnMpaT1oKGksdCxlLHMpO3JldHVybiBpfWdldEdvdG8odCxlLHM9ITEpe2xldCBpPXRoaXMuZ290bztpZihlPj1pWzBdKXJldHVybi0xO2ZvcihsZXQgaD1pW2UrMV07Oyl7bGV0IHI9aVtoKytdLG49ciYxLGE9aVtoKytdO2lmKG4mJnMpcmV0dXJuIGE7Zm9yKGxldCBsPWgrKHI+PjEpO2g8bDtoKyspaWYoaVtoXT09dClyZXR1cm4gYTtpZihuKXJldHVybi0xfX1oYXNBY3Rpb24odCxlKXtsZXQgcz10aGlzLmRhdGE7Zm9yKGxldCBpPTA7aTwyO2krKylmb3IobGV0IGg9dGhpcy5zdGF0ZVNsb3QodCxpPzI6MSkscjs7aCs9Myl7aWYoKHI9c1toXSk9PTY1NTM1KWlmKHNbaCsxXT09MSlyPXNbaD1rKHMsaCsyKV07ZWxzZXtpZihzW2grMV09PTIpcmV0dXJuIGsocyxoKzIpO2JyZWFrfWlmKHI9PWV8fHI9PTApcmV0dXJuIGsocyxoKzEpfXJldHVybiAwfXN0YXRlU2xvdCh0LGUpe3JldHVybiB0aGlzLnN0YXRlc1t0KjYrZV19c3RhdGVGbGFnKHQsZSl7cmV0dXJuKHRoaXMuc3RhdGVTbG90KHQsMCkmZSk+MH12YWxpZEFjdGlvbih0LGUpe2lmKGU9PXRoaXMuc3RhdGVTbG90KHQsNCkpcmV0dXJuITA7Zm9yKGxldCBzPXRoaXMuc3RhdGVTbG90KHQsMSk7O3MrPTMpe2lmKHRoaXMuZGF0YVtzXT09NjU1MzUpaWYodGhpcy5kYXRhW3MrMV09PTEpcz1rKHRoaXMuZGF0YSxzKzIpO2Vsc2UgcmV0dXJuITE7aWYoZT09ayh0aGlzLmRhdGEscysxKSlyZXR1cm4hMH19bmV4dFN0YXRlcyh0KXtsZXQgZT1bXTtmb3IobGV0IHM9dGhpcy5zdGF0ZVNsb3QodCwxKTs7cys9Myl7aWYodGhpcy5kYXRhW3NdPT02NTUzNSlpZih0aGlzLmRhdGFbcysxXT09MSlzPWsodGhpcy5kYXRhLHMrMik7ZWxzZSBicmVhaztpZigodGhpcy5kYXRhW3MrMl0mMSk9PTApe2xldCBpPXRoaXMuZGF0YVtzKzFdO2Uuc29tZSgoaCxyKT0+ciYxJiZoPT1pKXx8ZS5wdXNoKHRoaXMuZGF0YVtzXSxpKX19cmV0dXJuIGV9b3ZlcnJpZGVzKHQsZSl7bGV0IHM9VSh0aGlzLmRhdGEsdGhpcy50b2tlblByZWNUYWJsZSxlKTtyZXR1cm4gczwwfHxVKHRoaXMuZGF0YSx0aGlzLnRva2VuUHJlY1RhYmxlLHQpPHN9Y29uZmlndXJlKHQpe2xldCBlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSksdGhpcyk7aWYodC5wcm9wcyYmKGUubm9kZVNldD10aGlzLm5vZGVTZXQuZXh0ZW5kKC4uLnQucHJvcHMpKSx0LnRvcCl7bGV0IHM9dGhpcy50b3BSdWxlc1t0LnRvcF07aWYoIXMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgdG9wIHJ1bGUgbmFtZSAke3QudG9wfWApO2UudG9wPXN9cmV0dXJuIHQudG9rZW5pemVycyYmKGUudG9rZW5pemVycz10aGlzLnRva2VuaXplcnMubWFwKHM9PntsZXQgaT10LnRva2VuaXplcnMuZmluZChoPT5oLmZyb209PXMpO3JldHVybiBpP2kudG86c30pKSx0LnNwZWNpYWxpemVycyYmKGUuc3BlY2lhbGl6ZXJzPXRoaXMuc3BlY2lhbGl6ZXJzLnNsaWNlKCksZS5zcGVjaWFsaXplclNwZWNzPXRoaXMuc3BlY2lhbGl6ZXJTcGVjcy5tYXAoKHMsaSk9PntsZXQgaD10LnNwZWNpYWxpemVycy5maW5kKG49Pm4uZnJvbT09cy5leHRlcm5hbCk7aWYoIWgpcmV0dXJuIHM7bGV0IHI9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtleHRlcm5hbDpoLnRvfSk7cmV0dXJuIGUuc3BlY2lhbGl6ZXJzW2ldPUgocikscn0pKSx0LmNvbnRleHRUcmFja2VyJiYoZS5jb250ZXh0PXQuY29udGV4dFRyYWNrZXIpLHQuZGlhbGVjdCYmKGUuZGlhbGVjdD10aGlzLnBhcnNlRGlhbGVjdCh0LmRpYWxlY3QpKSx0LnN0cmljdCE9bnVsbCYmKGUuc3RyaWN0PXQuc3RyaWN0KSx0LndyYXAmJihlLndyYXBwZXJzPWUud3JhcHBlcnMuY29uY2F0KHQud3JhcCkpLHQuYnVmZmVyTGVuZ3RoIT1udWxsJiYoZS5idWZmZXJMZW5ndGg9dC5idWZmZXJMZW5ndGgpLGV9aGFzV3JhcHBlcnMoKXtyZXR1cm4gdGhpcy53cmFwcGVycy5sZW5ndGg+MH1nZXROYW1lKHQpe3JldHVybiB0aGlzLnRlcm1OYW1lcz90aGlzLnRlcm1OYW1lc1t0XTpTdHJpbmcodDw9dGhpcy5tYXhOb2RlJiZ0aGlzLm5vZGVTZXQudHlwZXNbdF0ubmFtZXx8dCl9Z2V0IGVvZlRlcm0oKXtyZXR1cm4gdGhpcy5tYXhOb2RlKzF9Z2V0IHRvcE5vZGUoKXtyZXR1cm4gdGhpcy5ub2RlU2V0LnR5cGVzW3RoaXMudG9wWzFdXX1keW5hbWljUHJlY2VkZW5jZSh0KXtsZXQgZT10aGlzLmR5bmFtaWNQcmVjZWRlbmNlcztyZXR1cm4gZT09bnVsbD8wOmVbdF18fDB9cGFyc2VEaWFsZWN0KHQpe2xldCBlPU9iamVjdC5rZXlzKHRoaXMuZGlhbGVjdHMpLHM9ZS5tYXAoKCk9PiExKTtpZih0KWZvcihsZXQgaCBvZiB0LnNwbGl0KFwiIFwiKSl7bGV0IHI9ZS5pbmRleE9mKGgpO3I+PTAmJihzW3JdPSEwKX1sZXQgaT1udWxsO2ZvcihsZXQgaD0wO2g8ZS5sZW5ndGg7aCsrKWlmKCFzW2hdKWZvcihsZXQgcj10aGlzLmRpYWxlY3RzW2VbaF1dLG47KG49dGhpcy5kYXRhW3IrK10pIT02NTUzNTspKGl8fChpPW5ldyBVaW50OEFycmF5KHRoaXMubWF4VGVybSsxKSkpW25dPTE7cmV0dXJuIG5ldyBNKHQscyxpKX1zdGF0aWMgZGVzZXJpYWxpemUodCl7cmV0dXJuIG5ldyBTKHQpfX07ZnVuY3Rpb24gayhvLHQpe3JldHVybiBvW3RdfG9bdCsxXTw8MTZ9ZnVuY3Rpb24gVShvLHQsZSl7Zm9yKGxldCBzPXQsaTsoaT1vW3NdKSE9NjU1MzU7cysrKWlmKGk9PWUpcmV0dXJuIHMtdDtyZXR1cm4tMX1mdW5jdGlvbiBZKG8pe2xldCB0PW51bGw7Zm9yKGxldCBlIG9mIG8pe2xldCBzPWUucC5zdG9wcGVkQXQ7KGUucG9zPT1lLnAuc3RyZWFtLmVuZHx8cyE9bnVsbCYmZS5wb3M+cykmJmUucC5wYXJzZXIuc3RhdGVGbGFnKGUuc3RhdGUsMikmJighdHx8dC5zY29yZTxlLnNjb3JlKSYmKHQ9ZSl9cmV0dXJuIHR9ZnVuY3Rpb24gSChvKXtpZihvLmV4dGVybmFsKXtsZXQgdD1vLmV4dGVuZD8xOjA7cmV0dXJuKGUscyk9Pm8uZXh0ZXJuYWwoZSxzKTw8MXx0fXJldHVybiBvLmdldH1leHBvcnR7RSBhcyBDb250ZXh0VHJhY2tlcixMIGFzIEV4dGVybmFsVG9rZW5pemVyLFQgYXMgSW5wdXRTdHJlYW0sUyBhcyBMUlBhcnNlcixiIGFzIFN0YWNrfTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShAbGV6ZXIvamF2YXNjcmlwdEAxLjAuMikgZGVubyBwcm9kdWN0aW9uICovXG5pbXBvcnR7Q29udGV4dFRyYWNrZXIgYXMgUixFeHRlcm5hbFRva2VuaXplciBhcyBlLExSUGFyc2VyIGFzIHJ9ZnJvbVwiL3Y5Ni9AbGV6ZXIvbHJAMS4yLjMvWC1aUzlBWTI5a1pXMXBjbkp2Y2k5c1lXNW5kV0ZuWlN4QWJHVjZaWEl2WTI5dGJXOXVMRUJzWlhwbGNpOW9hV2RvYkdsbmFIUS9kZW5vL2xyLmpzXCI7aW1wb3J0e3N0eWxlVGFncyBhcyBuLHRhZ3MgYXMgT31mcm9tXCJAbGV6ZXIvaGlnaGxpZ2h0XCI7dmFyIFg9MSxTPTI4MSxQPTIsYz0zLFQ9MjgyLGo9NCxwPTI4Myx0PTI4NCxXPTI4NixnPTI4NyxkPTUseD02LGw9MSxfPVs5LDEwLDExLDEyLDEzLDMyLDEzMywxNjAsNTc2MCw4MTkyLDgxOTMsODE5NCw4MTk1LDgxOTYsODE5Nyw4MTk4LDgxOTksODIwMCw4MjAxLDgyMDIsODIzMiw4MjMzLDgyMzksODI4NywxMjI4OF0sWj0xMjUsYj0xMjMscz01OSxvPTQ3LHE9NDIsRz00MyxmPTQ1LHk9MzYsbT05Nix6PTkyLGg9bmV3IFIoe3N0YXJ0OiExLHNoaWZ0KFEsaSl7cmV0dXJuIGk9PWR8fGk9PXh8fGk9PVc/UTppPT1nfSxzdHJpY3Q6ITF9KSxVPW5ldyBlKChRLGkpPT57bGV0e25leHQ6JH09UTsoJD09Wnx8JD09LTF8fGkuY29udGV4dCkmJmkuY2FuU2hpZnQodCkmJlEuYWNjZXB0VG9rZW4odCl9LHtjb250ZXh0dWFsOiEwLGZhbGxiYWNrOiEwfSksaz1uZXcgZSgoUSxpKT0+e2xldHtuZXh0OiR9PVEsYTtfLmluZGV4T2YoJCk+LTF8fCQ9PW8mJigoYT1RLnBlZWsoMSkpPT1vfHxhPT1xKXx8JCE9WiYmJCE9cyYmJCE9LTEmJiFpLmNvbnRleHQmJmkuY2FuU2hpZnQoUykmJlEuYWNjZXB0VG9rZW4oUyl9LHtjb250ZXh0dWFsOiEwfSksdT1uZXcgZSgoUSxpKT0+e2xldHtuZXh0OiR9PVE7aWYoKCQ9PUd8fCQ9PWYpJiYoUS5hZHZhbmNlKCksJD09US5uZXh0KSl7US5hZHZhbmNlKCk7bGV0IGE9IWkuY29udGV4dCYmaS5jYW5TaGlmdChQKTtRLmFjY2VwdFRva2VuKGE/UDpjKX19LHtjb250ZXh0dWFsOiEwfSksdz1uZXcgZShRPT57Zm9yKGxldCBpPSExLCQ9MDs7JCsrKXtsZXR7bmV4dDphfT1RO2lmKGE8MCl7JCYmUS5hY2NlcHRUb2tlbihUKTticmVha31lbHNlIGlmKGE9PW0peyQ/US5hY2NlcHRUb2tlbihUKTpRLmFjY2VwdFRva2VuKHAsMSk7YnJlYWt9ZWxzZSBpZihhPT1iJiZpKXskPT0xP1EuYWNjZXB0VG9rZW4oaiwxKTpRLmFjY2VwdFRva2VuKFQsLTEpO2JyZWFrfWVsc2UgaWYoYT09MTAmJiQpe1EuYWR2YW5jZSgpLFEuYWNjZXB0VG9rZW4oVCk7YnJlYWt9ZWxzZSBhPT16JiZRLmFkdmFuY2UoKTtpPWE9PXksUS5hZHZhbmNlKCl9fSksWT1uZXcgZSgoUSxpKT0+e2lmKCEoUS5uZXh0IT0xMDF8fCFpLmRpYWxlY3RFbmFibGVkKGwpKSl7US5hZHZhbmNlKCk7Zm9yKGxldCAkPTA7JDw2OyQrKyl7aWYoUS5uZXh0IT1cInh0ZW5kc1wiLmNoYXJDb2RlQXQoJCkpcmV0dXJuO1EuYWR2YW5jZSgpfVEubmV4dD49NTcmJlEubmV4dDw9NjV8fFEubmV4dD49NDgmJlEubmV4dDw9OTB8fFEubmV4dD09OTV8fFEubmV4dD49OTcmJlEubmV4dDw9MTIyfHxRLm5leHQ+MTYwfHxRLmFjY2VwdFRva2VuKFgpfX0pLHY9bih7XCJnZXQgc2V0IGFzeW5jIHN0YXRpY1wiOk8ubW9kaWZpZXIsXCJmb3Igd2hpbGUgZG8gaWYgZWxzZSBzd2l0Y2ggdHJ5IGNhdGNoIGZpbmFsbHkgcmV0dXJuIHRocm93IGJyZWFrIGNvbnRpbnVlIGRlZmF1bHQgY2FzZVwiOk8uY29udHJvbEtleXdvcmQsXCJpbiBvZiBhd2FpdCB5aWVsZCB2b2lkIHR5cGVvZiBkZWxldGUgaW5zdGFuY2VvZlwiOk8ub3BlcmF0b3JLZXl3b3JkLFwibGV0IHZhciBjb25zdCBmdW5jdGlvbiBjbGFzcyBleHRlbmRzXCI6Ty5kZWZpbml0aW9uS2V5d29yZCxcImltcG9ydCBleHBvcnQgZnJvbVwiOk8ubW9kdWxlS2V5d29yZCxcIndpdGggZGVidWdnZXIgYXMgbmV3XCI6Ty5rZXl3b3JkLFRlbXBsYXRlU3RyaW5nOk8uc3BlY2lhbChPLnN0cmluZyksc3VwZXI6Ty5hdG9tLEJvb2xlYW5MaXRlcmFsOk8uYm9vbCx0aGlzOk8uc2VsZixudWxsOk8ubnVsbCxTdGFyOk8ubW9kaWZpZXIsVmFyaWFibGVOYW1lOk8udmFyaWFibGVOYW1lLFwiQ2FsbEV4cHJlc3Npb24vVmFyaWFibGVOYW1lIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbi9WYXJpYWJsZU5hbWVcIjpPLmZ1bmN0aW9uKE8udmFyaWFibGVOYW1lKSxWYXJpYWJsZURlZmluaXRpb246Ty5kZWZpbml0aW9uKE8udmFyaWFibGVOYW1lKSxMYWJlbDpPLmxhYmVsTmFtZSxQcm9wZXJ0eU5hbWU6Ty5wcm9wZXJ0eU5hbWUsUHJpdmF0ZVByb3BlcnR5TmFtZTpPLnNwZWNpYWwoTy5wcm9wZXJ0eU5hbWUpLFwiQ2FsbEV4cHJlc3Npb24vTWVtYmVyRXhwcmVzc2lvbi9Qcm9wZXJ0eU5hbWVcIjpPLmZ1bmN0aW9uKE8ucHJvcGVydHlOYW1lKSxcIkZ1bmN0aW9uRGVjbGFyYXRpb24vVmFyaWFibGVEZWZpbml0aW9uXCI6Ty5mdW5jdGlvbihPLmRlZmluaXRpb24oTy52YXJpYWJsZU5hbWUpKSxcIkNsYXNzRGVjbGFyYXRpb24vVmFyaWFibGVEZWZpbml0aW9uXCI6Ty5kZWZpbml0aW9uKE8uY2xhc3NOYW1lKSxQcm9wZXJ0eURlZmluaXRpb246Ty5kZWZpbml0aW9uKE8ucHJvcGVydHlOYW1lKSxQcml2YXRlUHJvcGVydHlEZWZpbml0aW9uOk8uZGVmaW5pdGlvbihPLnNwZWNpYWwoTy5wcm9wZXJ0eU5hbWUpKSxVcGRhdGVPcDpPLnVwZGF0ZU9wZXJhdG9yLExpbmVDb21tZW50Ok8ubGluZUNvbW1lbnQsQmxvY2tDb21tZW50Ok8uYmxvY2tDb21tZW50LE51bWJlcjpPLm51bWJlcixTdHJpbmc6Ty5zdHJpbmcsQXJpdGhPcDpPLmFyaXRobWV0aWNPcGVyYXRvcixMb2dpY09wOk8ubG9naWNPcGVyYXRvcixCaXRPcDpPLmJpdHdpc2VPcGVyYXRvcixDb21wYXJlT3A6Ty5jb21wYXJlT3BlcmF0b3IsUmVnRXhwOk8ucmVnZXhwLEVxdWFsczpPLmRlZmluaXRpb25PcGVyYXRvcixBcnJvdzpPLmZ1bmN0aW9uKE8ucHVuY3R1YXRpb24pLFwiOiBTcHJlYWRcIjpPLnB1bmN0dWF0aW9uLFwiKCApXCI6Ty5wYXJlbixcIlsgXVwiOk8uc3F1YXJlQnJhY2tldCxcInsgfVwiOk8uYnJhY2UsXCJJbnRlcnBvbGF0aW9uU3RhcnQgSW50ZXJwb2xhdGlvbkVuZFwiOk8uc3BlY2lhbChPLmJyYWNlKSxcIi5cIjpPLmRlcmVmT3BlcmF0b3IsXCIsIDtcIjpPLnNlcGFyYXRvcixUeXBlTmFtZTpPLnR5cGVOYW1lLFR5cGVEZWZpbml0aW9uOk8uZGVmaW5pdGlvbihPLnR5cGVOYW1lKSxcInR5cGUgZW51bSBpbnRlcmZhY2UgaW1wbGVtZW50cyBuYW1lc3BhY2UgbW9kdWxlIGRlY2xhcmVcIjpPLmRlZmluaXRpb25LZXl3b3JkLFwiYWJzdHJhY3QgZ2xvYmFsIFByaXZhY3kgcmVhZG9ubHkgb3ZlcnJpZGVcIjpPLm1vZGlmaWVyLFwiaXMga2V5b2YgdW5pcXVlIGluZmVyXCI6Ty5vcGVyYXRvcktleXdvcmQsSlNYQXR0cmlidXRlVmFsdWU6Ty5hdHRyaWJ1dGVWYWx1ZSxKU1hUZXh0Ok8uY29udGVudCxcIkpTWFN0YXJ0VGFnIEpTWFN0YXJ0Q2xvc2VUYWcgSlNYU2VsZkNsb3NlRW5kVGFnIEpTWEVuZFRhZ1wiOk8uYW5nbGVCcmFja2V0LFwiSlNYSWRlbnRpZmllciBKU1hOYW1lU3BhY2VkTmFtZVwiOk8udGFnTmFtZSxcIkpTWEF0dHJpYnV0ZS9KU1hJZGVudGlmaWVyIEpTWEF0dHJpYnV0ZS9KU1hOYW1lU3BhY2VkTmFtZVwiOk8uYXR0cmlidXRlTmFtZX0pLEM9e19fcHJvdG9fXzpudWxsLGV4cG9ydDoxOCxhczoyMyxmcm9tOjI5LGRlZmF1bHQ6MzIsYXN5bmM6MzcsZnVuY3Rpb246MzgsdGhpczo0OCx0cnVlOjU2LGZhbHNlOjU2LHZvaWQ6NjYsdHlwZW9mOjcwLG51bGw6ODYsc3VwZXI6ODgsbmV3OjEyMixhd2FpdDoxMzkseWllbGQ6MTQxLGRlbGV0ZToxNDIsY2xhc3M6MTUyLGV4dGVuZHM6MTU0LHB1YmxpYzoxOTcscHJpdmF0ZToxOTcscHJvdGVjdGVkOjE5NyxyZWFkb25seToxOTksaW5zdGFuY2VvZjoyMjAsaW46MjIyLGNvbnN0OjIyNCxpbXBvcnQ6MjU2LGtleW9mOjMwNyx1bmlxdWU6MzExLGluZmVyOjMxNyxpczozNTEsYWJzdHJhY3Q6MzcxLGltcGxlbWVudHM6MzczLHR5cGU6Mzc1LGxldDozNzgsdmFyOjM4MCxpbnRlcmZhY2U6Mzg3LGVudW06MzkxLG5hbWVzcGFjZTozOTcsbW9kdWxlOjM5OSxkZWNsYXJlOjQwMyxnbG9iYWw6NDA3LGZvcjo0Mjgsb2Y6NDM3LHdoaWxlOjQ0MCx3aXRoOjQ0NCxkbzo0NDgsaWY6NDUyLGVsc2U6NDU0LHN3aXRjaDo0NTgsY2FzZTo0NjQsdHJ5OjQ3MCxjYXRjaDo0NzQsZmluYWxseTo0NzgscmV0dXJuOjQ4Mix0aHJvdzo0ODYsYnJlYWs6NDkwLGNvbnRpbnVlOjQ5NCxkZWJ1Z2dlcjo0OTh9LFY9e19fcHJvdG9fXzpudWxsLGFzeW5jOjEwOSxnZXQ6MTExLHNldDoxMTMscHVibGljOjE2MSxwcml2YXRlOjE2MSxwcm90ZWN0ZWQ6MTYxLHN0YXRpYzoxNjMsYWJzdHJhY3Q6MTY1LG92ZXJyaWRlOjE2NyxyZWFkb25seToxNzMsbmV3OjM1NX0sST17X19wcm90b19fOm51bGwsXCI8XCI6MTI5fSxKPXIuZGVzZXJpYWxpemUoe3ZlcnNpb246MTQsc3RhdGVzOlwiJDhTT2BRZE9PTydRUShDfE8nI0NoTydYT1dPJyNEVk8pZFFkTycjRF1PKXRRZE8nI0RoTyl7UWRPJyNEck8teFFkTycjRHhPT1FPJyNFXScjRV1PLl1RYE8nI0VbTy5iUWBPJyNFW09PUShDWycjRWYnI0VmTzBhUShDfE8nI0l0TzJ3UShDfE8nI0l1TzNlUWBPJyNFek8zalEhYk8nI0ZhT09RKENbJyNGUycjRlNPM3JPI3RPJyNGU080UVEmak8nI0ZoTzViUWBPJyNGZ09PUShDWycjSXUnI0l1T09RKENXJyNJdCcjSXRPT1FTJyNKXicjSl5PNWdRYE8nI0hwTzVsUShDaE8nI0hxT09RUycjSWgnI0loT09RUycjSHInI0hyUWBRZE9PTyl7UWRPJyNEak81dFFgTycjR1tPNXlRJmpPJyNDbU82WFFgTycjRVpPNmRRYE8nI0VnTzZpUSxVTycjRlJPN1RRYE8nI0dbTzdZUWBPJyNHYE83ZVFgTycjR2BPN3NRYE8nI0djTzdzUWBPJyNHZE83c1FgTycjR2ZPNXRRYE8nI0dpTzhkUWBPJyNHbE85clFgTycjQ2RPOlNRYE8nI0d5TzpbUWBPJyNIUE86W1FgTycjSFJPYFFkTycjSFRPOltRYE8nI0hWTzpbUWBPJyNIWU86YVFgTycjSGBPOmZRKENqTycjSGZPKXtRZE8nI0hoTzpxUShDak8nI0hqTzp8UShDak8nI0hsTzVsUShDaE8nI0huTyl7UWRPJyNEV09PT1cnI0h0JyNIdE87WE9XTyw1OXFPT1EoQ1ssNTlxLDU5cU89alF0TycjQ2hPPXRRZE8nI0h1Tz5YUWBPJyNJdk9AV1F0TycjSXZPJ2RRZE8nI0l2T0BfUWBPLDU5d09AdVE3W08nI0RiT0FuUWBPJyNFXU9Be1FgTycjSlJPQldRYE8nI0pRT0JXUWBPJyNKUU9CYFFgTyw1OnlPQmVRYE8nI0pQT0JsUWFPJyNEeU81eVEmak8nI0VaT0J6UWBPJyNFWk9DVlFwTycjRlJPT1EoQ1ssNTpTLDU6U09DX1FkTyw1OlNPRV1RKEN8Tyw1Ol5PRXlRYE8sNTpkT0ZkUShDaE8nI0pPTzdZUWBPJyNJfU9Ga1FgTycjSX1PRnNRYE8sNTp4T0Z4UWBPJyNJfU9HV1FkTyw1OnZPSVdRJmpPJyNFV09KZVFgTyw1OnZPS3dRJmpPJyNEbE9MT1FkTycjRHFPTFlRN1tPLDU7UE8pe1FkTyw1O1BPT1FTJyNFcicjRXJPT1FTJyNFdCcjRXRPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk8pe1FkTyw1O1JPKXtRZE8sNTtSTyl7UWRPLDU7Uk9PUVMnI0V4JyNFeE9MYlFkTyw1O2NPT1EoQ1ssNTtoLDU7aE9PUShDWyw1O2ksNTtpT05iUWBPLDU7aU9PUShDWyw1O2osNTtqTyl7UWRPJyNJUE9OZ1EoQ2hPLDU8VE8hIFJRJmpPLDU7Uk8pe1FkTyw1O2ZPISBrUSFiTycjSlZPISBZUSFiTycjSlZPISByUSFiTycjSlZPISFUUSFiTyw1O3FPT09PLDU7eyw1O3tPISFjUWRPJyNGY09PT08nI0lPJyNJT08zck8jdE8sNTtuTyEhalEhYk8nI0ZlT09RKENbLDU7biw1O25PISNXUSxWTycjQ3JPT1EoQ10nI0N1JyNDdU8hI2tRYE8nI0N1TyEjcE9XTycjQ3lPISReUSxWTyw1PFFPISRlUWBPLDU8U08hJXRRJmpPJyNGck8hJlJRYE8nI0ZzTyEmV1FgTycjRnNPISZdUSZqTycjRndPISdbUTdbTycjRntPISd9USxWTycjSXFPT1EoQ10nI0lxJyNJcU8hKFhRYU8nI0lwTyEoZ1FgTycjSW9PIShvUWBPJyNDcU9PUShDXScjQ3MnI0NzT09RKENdJyNDfCcjQ3xPISh3UWBPJyNET09KalEmak8nI0ZqT0pqUSZqTycjRmxPISh8UWBPJyNGbk8hKVJRYE8nI0ZvTyEmV1FgTycjRnVPSmpRJmpPJyNGek8hKVdRYE8nI0VeTyEpb1FgTyw1PFJPYFFkTyw1PltPT1FTJyNJaycjSWtPT1FTLDU+XSw1Pl1PT1FTLUU7cC1FO3BPIStrUShDfE8sNTpVT09RKENYJyNDcCcjQ3BPISxbUSZrTyw1PHZPT1FPJyNDZicjQ2ZPISxtUShDaE8nI0lsTzViUWBPJyNJbE86YVFgTyw1OVhPIS1PUSFiTyw1OVhPIS1XUSZqTyw1OVhPNXlRJmpPLDU5WE8hLWNRYE8sNTp2TyEta1FgTycjR3hPIS15UWBPJyNKYk8pe1FkTyw1O2tPIS5SUTdbTyw1O21PIS5XUWBPLDU9Y08hLl1RYE8sNT1jTyEuYlFgTyw1PWNPNWxRKENoTyw1PWNPNXRRYE8sNTx2TyEucFFgTycjRV9PIS9VUTdbTycjRWBPT1EoQ1cnI0pQJyNKUE8hL2dRKENoTycjSl9PNWxRKENoTyw1PHpPN3NRYE8sNT1RT09RUCcjQ3InI0NyTyEvclEhYk8sNTx9TyEvelEhY08sNT1PTyEwVlFgTyw1PVFPITBbUXBPLDU9VE86YVFgTycjR25PNXRRYE8nI0dwTyEwZFFgTycjR3BPNXlRJmpPJyNHc08hMGlRYE8nI0dzT09RUyw1PVcsNT1XTyEwblFgTycjR3RPITB2UWBPJyNDbU8hMHtRYE8sNTlPTyExVlFgTyw1OU9PITNYUWRPLDU5T09PUVMsNTlPLDU5T08hM2ZRKENoTyw1OU9PKXtRZE8sNTlPTyEzcVFkTycjR3tPT1FTJyNHfCcjR3xPT1FTJyNHfScjR31PYFFkTyw1PWVPITRSUWBPLDU9ZU8pe1FkTycjRHhPYFFkTyw1PWtPYFFkTyw1PW1PITRXUWBPLDU9b09gUWRPLDU9cU8hNF1RYE8sNT10TyE0YlFkTyw1PXpPT1FTLDU+USw1PlFPKXtRZE8sNT5RTzVsUShDaE8sNT5TT09RUyw1PlUsNT5VTyE4Y1FgTyw1PlVPT1FTLDU+Vyw1PldPIThjUWBPLDU+V09PUVMsNT5ZLDU+WU8hOGhRcE8sNTlyT09PVy1FO3ItRTtyT09RKENbMUcvXTFHL11PIThtUXRPLDU+YU8nZFFkTyw1PmFPT1FPLDU+Ziw1PmZPITh3UWRPJyNIdU9PUU8tRTtzLUU7c08hOVVRYE8sNT9iTyE5XlF0Tyw1P2JPITllUWBPLDU/bE9PUShDWzFHL2MxRy9jTyE5bVEhYk8nI0RUT09RTycjSXgnI0l4Tyl7UWRPJyNJeE8hOltRIWJPJyNJeE8hOnlRIWJPJyNEY08hO1tRN1tPJyNEY08hPWdRZE8nI0RjTyE9blFgTycjSXdPIT12UWBPLDU5fE8hPXtRYE8nI0VhTyE+WlFgTycjSlNPIT5jUWBPLDU6ek8hPnlRN1tPJyNEY08pe1FkTyw1P21PIT9UUWBPJyNIek9PUU8tRTt4LUU7eE8hOWVRYE8sNT9sT09RKENXMUcwZTFHMGVPIUBhUTdbTycjRHxPT1EoQ1ssNTplLDU6ZU8pe1FkTyw1OmVPSVdRJmpPLDU6ZU8hQGhRYU8sNTplTzphUWBPLDU6dU8hLU9RIWJPLDU6dU8hLVdRJmpPLDU6dU81eVEmak8sNTp1T09RKENbMUcvbjFHL25PT1EoQ1sxRzBPMUcwT09PUShDVycjRVYnI0VWTyl7UWRPLDU/ak8hQHNRKENoTyw1P2pPIUFVUShDaE8sNT9qTyFBXVFgTyw1P2lPIUFlUWBPJyNIfE8hQV1RYE8sNT9pT09RKENXMUcwZDFHMGRPN1lRYE8sNT9pT09RKENbMUcwYjFHMGJPIUJQUShDfE8xRzBiTyFDUlEoQ3lPLDU6ck9PUShDXScjRnEnI0ZxTyFDb1EoQ31PJyNJcU9HV1FkTzFHMGJPIUVxUSxWTycjSXlPIUV7UWBPLDU6V08hRlFRdE8nI0l6Tyl7UWRPJyNJek8hRltRYE8sNTpdT09RKENdJyNEVCcjRFRPT1EoQ1sxRzBrMUcwa08hRmFRYE8xRzBrTyFIclEoQ3xPMUcwbU8hSHlRKEN8TzFHMG1PIUteUShDfE8xRzBtTyFLZVEoQ3xPMUcwbU8hTWxRKEN8TzFHMG1PIU5QUShDfE8xRzBtTyMhcFEoQ3xPMUcwbU8jIXdRKEN8TzFHMG1PIyVbUShDfE8xRzBtTyMlY1EoQ3xPMUcwbU8jJ1dRKEN8TzFHMG1PIypRUU1sTycjQ2hPIyt7UU1sTzFHMH1PIy12UU1sTycjSXVPT1EoQ1sxRzFUMUcxVE8jLlpRKEN8Tyw1PmtPT1EoQ1ctRTt9LUU7fU8jLnpRKEN9TzFHMG1PT1EoQ1sxRzBtMUcwbU8jMVBRKEN8TzFHMVFPIzFwUSFiTyw1O3NPIzF1USFiTyw1O3RPIzF6USFiTycjRltPIzJgUWBPJyNGWk9PUU8nI0pXJyNKV09PUU8nI0h9JyNIfU8jMmVRIWJPMUcxXU9PUShDWzFHMV0xRzFdT09PTzFHMWYxRzFmTyMyc1FNbE8nI0l0TyMyfVFgTyw1O31PTGJRZE8sNTt9T09PTy1FO3wtRTt8T09RKENbMUcxWTFHMVlPT1EoQ1ssNTxQLDU8UE8jM1NRIWJPLDU8UE9PUShDXSw1OWEsNTlhT0lXUSZqTycjQ3tPT09XJyNIcycjSHNPIzNYT1dPLDU5ZU9PUShDXSw1OWUsNTllTyl7UWRPMUcxbE8hKVJRYE8nI0lSTyMzZFFgTyw1PGVPT1EoQ10sNTxiLDU8Yk9PUU8nI0dWJyNHVk9KalEmak8sNTxwT09RTycjR1gnI0dYT0pqUSZqTyw1PHJPSVdRJmpPLDU8dE9PUU8xRzFuMUcxbk8jM29RcU8nI0NwTyM0U1FxTyw1PF5PIzRaUWBPJyNKWk81dFFgTycjSlpPIzRpUWBPLDU8YE9KalEmak8sNTxfTyM0blFgTycjRnRPIzR5UWBPLDU8X08jNU9RcU8nI0ZxTyM1XVFxTycjSltPIzVnUWBPJyNKW09JV1Emak8nI0pbTyM1bFFgTyw1PGNPT1EoQ1cnI0RnJyNEZ08jNXFRIWJPJyNGfE8hJ1ZRN1tPJyNGfE8hJ1ZRN1tPJyNHT08jNlNRYE8nI0dQTyEmV1FgTycjR1NPIzZYUShDaE8nI0lUTyM2ZFE3W08sNTxnT09RKENdLDU8Zyw1PGdPIzZrUTdbTycjRnxPIzZ5UTdbTycjRn1PIzdSUTdbTycjRn1PT1EoQ10sNTx1LDU8dU9KalEmak8sNT9bT0pqUSZqTyw1P1tPIzdXUWBPJyNJVU8jN2NRYE8sNT9aTyM3a1FgTyw1OV1PT1EoQ10nI0NoJyNDaE8jOFtRLFZPLDU5ak9PUShDXSw1OWosNTlqTyM4fVEsVk8sNTxVTyM5cFEsVk8sNTxXTyM5elFgTyw1PFlPT1EoQ10sNTxaLDU8Wk8jOlBRYE8sNTxhTyM6VVEsVk8sNTxmT0dXUWRPMUcxbU8jOmZRYE8xRzFtT09RUzFHM3YxRzN2T09RKENbMUcvcDFHL3BPTmJRYE8xRy9wT09RUzFHMmIxRzJiT0lXUSZqTzFHMmJPKXtRZE8xRzJiT0lXUSZqTzFHMmJPIzprUWFPMUcyYk8jPFFRJmpPJyNFV09PUShDVyw1P1csNT9XTyM8W1EoQ2hPLDU/V09PUVMxRy5zMUcuc086YVFgTzFHLnNPIS1PUSFiTzFHLnNPIS1XUSZqTzFHLnNPIzxtUWBPMUcwYk8jPHJRYE8nI0NoTyM8fVFgTycjSmNPIz1WUWBPLDU9ZE8jPVtRYE8nI0pjTyM9YVFgTycjSmNPIz1pUWBPJyNJXk8jPXdRYE8sNT98TyM+UFF0TzFHMVZPT1EoQ1sxRzFYMUcxWE81dFFgTzFHMn1PIz5XUWBPMUcyfU8jPl1RYE8xRzJ9TyM+YlFgTzFHMn1PT1FTMUcyfTFHMn1PIz5nUSZrTzFHMmJPN1lRYE8nI0pRTzdZUWBPJyNFYU83WVFgTycjSVdPIz54UShDaE8sNT95T09RUzFHMmYxRzJmTyEwVlFgTzFHMmxPSVdRJmpPMUcyaU8jP1RRYE8xRzJpT09RUzFHMmoxRzJqT0lXUSZqTzFHMmpPIz9ZUWFPMUcyak8jP2JRN1tPJyNHaE9PUVMxRzJsMUcybE8hJ1ZRN1tPJyNJWU8hMFtRcE8xRzJvT09RUzFHMm8xRzJvT09RUyw1PVksNT1ZTyM/alEma08sNT1bTzV0UWBPLDU9W08jNlNRYE8sNT1fTzViUWBPLDU9X08hLU9RIWJPLDU9X08hLVdRJmpPLDU9X081eVEmak8sNT1fTyM/e1FgTycjSmFPI0BXUWBPLDU9YE9PUVMxRy5qMUcuak8jQF1RKENoTzFHLmpPI0BoUWBPMUcuak8jQG1RYE8xRy5qTzVsUShDaE8xRy5qTyNAdVF0Tyw1QE9PI0FQUWBPLDVAT08jQVtRZE8sNT1nTyNBY1FgTyw1PWdPN1lRYE8sNUBPT09RUzFHM1AxRzNQT2BRZE8xRzNQT09RUzFHM1YxRzNWT09RUzFHM1gxRzNYTzpbUWBPMUczWk8jQWhRZE8xRzNdTyNFY1FkTycjSFtPT1FTMUczYDFHM2BPI0VwUWBPJyNIYk86YVFgTycjSGRPT1FTMUczZjFHM2ZPI0V4UWRPMUczZk81bFEoQ2hPMUczbE9PUVMxRzNuMUczbk9PUShDVycjRngnI0Z4TzVsUShDaE8xRzNwTzVsUShDaE8xRzNyT09PVzFHL14xRy9eTyNJdlFwTyw1PFRPI0pPUXRPMUcze09PUU8xRzRRMUc0UU8pe1FkTyw1PmFPI0pZUWBPMUc0fE8jSmJRYE8xRzVXTyNKalFgTyw1P2RPTGJRZE8sNTp7TzdZUWBPLDU6e086YVFgTyw1OX1PTGJRZE8sNTl9TyEtT1EhYk8sNTl9TyNKb1FNbE8sNTl9T09RTyw1OnssNTp7TyNKeVE3W08nI0h2TyNLYVFgTyw1P2NPT1EoQ1sxRy9oMUcvaE8jS2lRN1tPJyNIe08jS31RYE8sNT9uT09RKENXMUcwZjFHMGZPITtbUTdbTyw1OX1PI0xWUXRPMUc1WE83WVFgTyw1PmZPT1EoQ1cnI0VTJyNFU08jTGFRKERqTycjRVRPIUBYUTdbTycjRH1PT1FPJyNIeScjSHlPI0x7UTdbTyw1OmhPT1EoQ1ssNTpoLDU6aE8jTVNRN1tPJyNEfU8jTWVRN1tPJyNEfU8jTWxRN1tPJyNFWU8jTW9RN1tPJyNFVE8jTXxRN1tPJyNFVE8hQFhRN1tPJyNFVE8jTmFRYE8xRzBQTyNOZlFxTzFHMFBPT1EoQ1sxRzBQMUcwUE8pe1FkTzFHMFBPSVdRJmpPMUcwUE9PUShDWzFHMGExRzBhTzphUWBPMUcwYU8hLU9RIWJPMUcwYU8hLVdRJmpPMUcwYU8jTm1RKEN8TzFHNVVPKXtRZE8xRzVVTyNOfVEoQ2hPMUc1VU8kIGBRYE8xRzVUTzdZUWBPLDU+aE9PUU8sNT5oLDU+aE8kIGhRYE8sNT5oT09RTy1FO3otRTt6TyQgYFFgTzFHNVRPJCB2UShDfU8sNTlqTyQjeFEoQ31PLDU8VU8kJX1RKEN9Tyw1PFdPJChTUShDfU8sNTxmT09RKENbNyslfDcrJXxPJCpfUShDfE83KyV8TyQrT1Emak8nI0h3TyQrWVFgTyw1P2VPT1EoQ10xRy9yMUcvck8kK2JRZE8nI0h4TyQrb1FgTyw1P2ZPJCt3UXRPLDU/Zk9PUShDWzFHL3cxRy93T09RKENbNysmVjcrJlZPJCxSUU1sTyw1Ol5PKXtRZE83KyZpTyQsXVFNbE8sNTpVT09RTzFHMV8xRzFfT09RTzFHMWAxRzFgTyQsalEhTFFPLDU7dk9MYlFkTyw1O3VPT1FPLUU7ey1FO3tPT1EoQ1s3KyZ3Nysmd09PT083KydRNysnUU9PT08xRzFpMUcxaU8kLHVRYE8xRzFpT09RKENbMUcxazFHMWtPJCx6UXFPLDU5Z09PT1ctRTtxLUU7cU9PUShDXTFHL1AxRy9QTyQtUlEoQ3xPNysnV09PUShDXSw1Pm0sNT5tTyQtclFgTyw1Pm1PT1EoQ10xRzJQMUcyUFAkLXdRYE8nI0lSUE9RKENdLUU8UC1FPFBPJC5oUSxWTzFHMltPJC9aUSxWTzFHMl5PJC9lUXFPMUcyYE9PUShDXTFHMXgxRzF4TyQvbFFgTycjSVFPJC96UWBPLDU/dU8kL3pRYE8sNT91TyQwU1FgTyw1P3VPJDBfUWBPLDU/dU9PUU8xRzF6MUcxek8kMG1RLFZPMUcxeU9KalEmak8xRzF5TyQwfVEmak8nI0lTTyQxX1FgTyw1P3ZPSVdRJmpPLDU/dk8kMWdRcU8sNT92T09RKENdMUcxfTFHMX1PT1EoQ1csNTxoLDU8aE9PUShDVyw1PGksNTxpTyQxcVFgTyw1PGlPIzV9UWBPLDU8aU8hLU9RIWJPLDU8aE8kMXZRYE8sNTxqT09RKENXLDU8ayw1PGtPJDFxUWBPLDU8bk9PUU8sNT5vLDU+b09PUU8tRTxSLUU8Uk9PUShDXTFHMlIxRzJSTyEnVlE3W08sNTxoTyQyT1FgTyw1PGlPISdWUTdbTyw1PGpPISdWUTdbTyw1PGlPJDJaUSxWTzFHNHZPJDJlUSxWTzFHNHZPT1FPLDU+cCw1PnBPT1FPLUU8Uy1FPFNPT1FQMUcudzFHLndPIS5SUTdbTyw1OWxPKXtRZE8sNTlsTyQyclFgTzFHMXRPSmpRJmpPMUcxe08kMndRKEN8TzcrJ1hPT1EoQ1s3KydYNysnWE9HV1FkTzcrJ1hPT1EoQ1s3KyVbNyslW08kM2hRcU8nI0pdTyNOYVFgTzcrJ3xPJDNyUWBPNysnfE8kM3pRcU83Kyd8T09RUzcrJ3w3Kyd8T0lXUSZqTzcrJ3xPKXtRZE83Kyd8T0lXUSZqTzcrJ3xPJDRVUShDeU8nI0NoTyQ0aVEoQ3lPLDU8bE8kNVpRYE8sNTxsT09RKENXMUc0cjFHNHJPT1FTNyskXzcrJF9POmFRYE83KyRfTyEtT1EhYk83KyRfT0dXUWRPNyslfE8kNWBRYE8nI0ldTyQ1cVFgTyw1P31PT1FPMUczTzFHM09PNXRRYE8sNT99TyQ1cVFgTyw1P31PJDV5UWBPLDU/fU9PUU8sNT54LDU+eE9PUU8tRTxbLUU8W09PUShDWzcrJnE3KyZxTyQ2T1FgTzcrKGlPNWxRKENoTzcrKGlPNXRRYE83KyhpTyQ2VFFgTzcrKGlPJDZZUWFPNysnfE9PUShDVyw1PnIsNT5yT09RKENXLUU8VS1FPFVPT1FTNysoVzcrKFdPJDZoUShDeU83KyhUT0lXUSZqTzcrKFRPJDZyUXFPNysoVU9PUVM3KyhVNysoVU9JV1Emak83KyhVTyQ2eVFgTycjSmBPJDdVUWBPLDU9U09PUU8sNT50LDU+dE9PUU8tRTxXLUU8V09PUVM3KyhaNysoWk8kOE9RN1tPJyNHcU9PUVMxRzJ2MUcydk9JV1Emak8xRzJ2Tyl7UWRPMUcydk9JV1Emak8xRzJ2TyQ4VlFhTzFHMnZPJDhlUSZrTzFHMnZPNWxRKENoTzFHMnlPIzZTUWBPMUcyeU81YlFgTzFHMnlPIS1PUSFiTzFHMnlPIS1XUSZqTzFHMnlPJDh2UWBPJyNJW08kOVJRYE8sNT97TyQ5WlE3W08sNT97T09RKENXMUcyejFHMnpPT1FTNyskVTcrJFVPJDljUWBPNyskVU81bFEoQ2hPNyskVU8kOWhRYE83KyRVTyl7UWRPMUc1ak8pe1FkTzFHNWtPJDltUWRPMUczUk8kOXRRYE8xRzNSTyQ5eVFkTzFHM1JPJDpRUShDaE8xRzVqT09RUzcrKGs3KyhrTzVsUShDaE83Kyh1T2BRZE83Kyh3T09RUycjSmYnI0pmT09RUycjSV8nI0lfTyQ6W1FkTyw1PXZPT1FTLDU9diw1PXZPKXtRZE8nI0hdTyQ6aVFgTycjSF9PT1FTLDU9fCw1PXxPN1lRYE8sNT18T09RUyw1Pk8sNT5PT09RUzcrKVE3KylRT09RUzcrKVc3KylXT09RUzcrKVs3KylbT09RUzcrKV43KyleT09RTzFHNU8xRzVPTyQ6blFNbE8xRzBnTyQ6eFFgTzFHMGdPT1FPMUcvaTFHL2lPJDtUUU1sTzFHL2lPOmFRYE8xRy9pT0xiUWRPJyNEY09PUU8sNT5iLDU+Yk9PUU8tRTt0LUU7dE9PUU8sNT5nLDU+Z09PUU8tRTt5LUU7eU8hLU9RIWJPMUcvaU86YVFgTyw1OmlPT1FPLDU6byw1Om9PKXtRZE8sNTpvTyQ7X1EoQ2hPLDU6b08kO2pRKENoTyw1Om9PIS1PUSFiTyw1OmlPT1FPLUU7dy1FO3dPT1EoQ1sxRzBTMUcwU08hQFhRN1tPLDU6aU8kO3hRN1tPLDU6aU8kPFpRKERqTyw1Om9PJDx1UTdbTyw1OmlPIUBYUTdbTyw1Om9PT1FPLDU6dCw1OnRPJDx8UTdbTyw1Om9PJD1aUShDaE8sNTpvT09RKENbNyslazcrJWtPI05hUWBPNysla08jTmZRcU83KyVrT09RKENbNyslezcrJXtPOmFRYE83KyV7TyEtT1EhYk83KyV7TyQ9b1EoQ3xPNysqcE8pe1FkTzcrKnBPT1FPMUc0UzFHNFNPN1lRYE8xRzRTTyQ+UFFgTzcrKm9PJD5YUShDfU8xRzJbTyRAXlEoQ31PMUcyXk8kQmNRKEN9TzFHMXlPJERuUSxWTyw1PmNPT1FPLUU7dS1FO3VPJER4UXRPLDU+ZE8pe1FkTyw1PmRPT1FPLUU7di1FO3ZPJEVTUWBPMUc1UU8kRVtRTWxPMUcwYk8kR2NRTWxPMUcwbU8kR2pRTWxPMUcwbU8kSWtRTWxPMUcwbU8kSXJRTWxPMUcwbU8kS2dRTWxPMUcwbU8kS3pRTWxPMUcwbU8kTlhRTWxPMUcwbU8kTmBRTWxPMUcwbU8lIWFRTWxPMUcwbU8lIWhRTWxPMUcwbU8lJF1RTWxPMUcwbU8lJHBRKEN8Tzw8SlRPJSVyUU1tTzFHMG1PJSd8UU1tTycjSXFPJSlpUU1sTzFHMVFPTGJRZE8nI0ZeT09RTycjSlgnI0pYT09RTzFHMWIxRzFiTyUpdlFgTzFHMWFPJSl7UU1sTyw1PmtPT09PNysnVDcrJ1RPT09XMUcvUjFHL1JPT1EoQ10xRzRYMUc0WE9KalEmak83Kyd6TyUqVlFgTyw1PmxPNXRRYE8sNT5sT09RTy1FPE8tRTxPTyUqZVFgTzFHNWFPJSplUWBPMUc1YU8lKm1RYE8xRzVhTyUqeFEsVk83KydlTyUrWVFxTyw1Pm5PJStkUWBPLDU+bk9JV1Emak8sNT5uT09RTy1FPFEtRTxRTyUraVFxTzFHNWJPJStzUWBPMUc1Yk9PUShDVzFHMlQxRzJUTyQxcVFgTzFHMlRPT1EoQ1cxRzJTMUcyU08lK3tRYE8xRzJVT0lXUSZqTzFHMlVPT1EoQ1cxRzJZMUcyWU8hLU9RIWJPMUcyU08jNX1RYE8xRzJUTyUsUVFgTzFHMlVPJSxZUWBPMUcyVE9KalEmak83KypiT09RKENdMUcvVzFHL1dPJSxlUWBPMUcvV09PUShDXTcrJ2A3KydgTyUsalEsVk83KydnTyUselEoQ3xPPDxKc09PUShDWzw8SnM8PEpzT0lXUSZqTycjSVZPJS1rUWBPLDU/d09PUVM8PEtoPDxLaE9JV1Emak88PEtoTyNOYVFgTzw8S2hPJS1zUWBPPDxLaE8lLXtRcU88PEtoT0lXUSZqTzFHMldPT1FTPDxHeTw8R3lPOmFRYE88PEd5TyUuVlEoQ3xPPDxJaE9PUShDWzw8SWg8PEloT09RTyw1PncsNT53TyUudlFgTyw1PndPJS57UWBPLDU+d09PUU8tRTxaLUU8Wk8lL1RRYE8xRzVpTyUvVFFgTzFHNWlPNXRRYE8xRzVpTyUvXVFgTzw8TFRPT1FTPDxMVDw8TFRPJS9iUWBPPDxMVE81bFEoQ2hPPDxMVE8pe1FkTzw8S2hPSVdRJmpPPDxLaE9PUVM8PEtvPDxLb08kNmhRKEN5Tzw8S29PT1FTPDxLcDw8S3BPJDZyUXFPPDxLcE8lL2dRN1tPJyNJWE8lL3JRYE8sNT96T0xiUWRPLDU/ek9PUVMxRzJuMUcybk8jTGFRKERqTycjRVRPIUBYUTdbTycjR3JPT1FPJyNJWicjSVpPJS96UTdbTyw1PV1PT1FTLDU9XSw1PV1PJTBSUTdbTycjRVRPJTBeUTdbTycjRVRPJTB1UTdbTycjRVRPJTFQUTdbTycjR3JPJTFiUWBPNysoYk8lMWdRYE83KyhiTyUxb1FxTzcrKGJPT1FTNysoYjcrKGJPSVdRJmpPNysoYk8pe1FkTzcrKGJPSVdRJmpPNysoYk8lMXlRYU83KyhiT09RUzcrKGU3KyhlTzVsUShDaE83KyhlTyM2U1FgTzcrKGVPNWJRYE83KyhlTyEtT1EhYk83KyhlTyUyWFFgTyw1PnZPT1FPLUU8WS1FPFlPT1FPJyNHdScjR3VPJTJkUWBPMUc1Z081bFEoQ2hPPDxHcE9PUVM8PEdwPDxHcE8lMmxRYE88PEdwTyUycVFgTzcrK1VPJTJ2UWBPNysrVk9PUVM3KyhtNysobU8lMntRYE83KyhtTyUzUVFkTzcrKG1PJTNYUWBPNysobU8pe1FkTzcrK1VPKXtRZE83KytWT09RUzw8TGE8PExhT09RUzw8TGM8PExjT09RUy1FPF0tRTxdT09RUzFHM2IxRzNiTyUzXlFgTyw1PXdPT1FTLDU9eSw1PXlPJTNjUWBPMUczaE9MYlFkTzcrJlJPT1FPNyslVDcrJVRPJTNoUU1sTzFHNVhPOmFRYE83KyVUT09RTzFHMFQxRzBUTyUzclEoQ3xPMUcwWk9PUU8xRzBaMUcwWk8pe1FkTzFHMFpPJTN8UShDaE8xRzBaTzphUWBPMUcwVE8hLU9RIWJPMUcwVE8hQFhRN1tPMUcwVE8lNFhRKENoTzFHMFpPJTRnUTdbTzFHMFRPJTR4UShDaE8xRzBaTyU1XlEoRGpPMUcwWk8lNWhRN1tPMUcwVE8hQFhRN1tPMUcwWk9PUShDWzw8SVY8PElWT09RKENbPDxJZzw8SWdPOmFRYE88PElnTyU1b1EoQ3xPPDxOW09PUU83KyluNyspbk8lNlBRKEN9TzcrJ2VPJThbUShDfU83KydnTyU6Z1F0TzFHNE9PJTpxUU1sTzcrJXxPJTtnUU1tTyw1OWpPJT1oUU1tTyw1PFVPJT9sUU1tTyw1PFdPJUFbUU1tTyw1PGZPJUJ9UU1sTzcrJ1dPJUNbUU1sTzcrJ1hPJUNpUWBPLDU7eE9PUU83KyZ7Nysme08lQ25RLFZPPDxLZk9PUU8xRzRXMUc0V08lQ3VRYE8xRzRXTyVEUVFgTzFHNFdPJURgUWBPNysqe08lRGBRYE83Kyp7T0lXUSZqTzFHNFlPJURoUXFPMUc0WU8lRHJRYE83Kyp8T09RKENXNysnbzcrJ29PJDFxUWBPNysncE8lRHpRcU83KydwT09RKENXNysnbjcrJ25PJDFxUWBPNysnb08lRVJRYE83KydwT0lXUSZqTzcrJ3BPIzV9UWBPNysnb08lRVdRLFZPPDxNfE9PUShDXTcrJHI3KyRyTyVFYlFxTyw1PnFPT1FPLUU8VC1FPFRPI05hUWBPQU5BU09PUVNBTkFTQU5BU09JV1Emak9BTkFTTyVFbFEoQ3lPNysnck9PUVNBTj1lQU49ZU81dFFgTzFHNGNPT1FPMUc0YzFHNGNPJUV8UWBPMUc0Y08lRlJRYE83KytUTyVGUlFgTzcrK1RPNWxRKENoT0FOQW9PJUZaUWBPQU5Bb09PUVNBTkFvQU5Bb08lRmBRYE9BTkFTTyVGaFFxT0FOQVNPT1FTQU5BWkFOQVpPT1FTQU5BW0FOQVtPJUZyUWBPLDU+c09PUU8tRTxWLUU8Vk8lRn1RTWxPMUc1Zk8jNlNRYE8sNT1eTzViUWBPLDU9Xk8hLU9RIWJPLDU9Xk9PUU8tRTxYLUU8WE9PUVMxRzJ3MUcyd08kPFpRKERqTyw1Om9PIUBYUTdbTyw1PV5PJUdYUTdbTyw1PV5PJUdqUTdbTyw1Om9PT1FTPDxLfDw8S3xPSVdRJmpPPDxLfE8lMWJRYE88PEt8TyVHdFFgTzw8S3xPJUd8UXFPPDxLfE8pe1FkTzw8S3xPSVdRJmpPPDxLfE9PUVM8PExQPDxMUE81bFEoQ2hPPDxMUE8jNlNRYE88PExQTzViUWBPPDxMUE8lSFdRN1tPMUc0Yk8lSGBRYE83KytST09RU0FOPVtBTj1bTzVsUShDaE9BTj1bT09RUzw8TnA8PE5wT09RUzw8TnE8PE5xT09RUzw8TFg8PExYTyVIaFFgTzw8TFhPJUhtUWRPPDxMWE8lSHRRYE88PE5wTyVIeVFgTzw8TnFPT1FTMUczYzFHM2NPOmFRYE83KylTTyVJT1FNbE88PEltT09RTzw8SG88PEhvT09RTzcrJXU3KyV1TyUzclEoQ3xPNysldU8pe1FkTzcrJXVPT1FPNyslbzcrJW9POmFRYE83KyVvTyEtT1EhYk83KyVvTyVJWVEoQ2hPNysldU8hQFhRN1tPNyslb08lSWVRKENoTzcrJXVPJUlzUTdbTzcrJW9PJUpVUShDaE83KyV1T09RKENbQU4/UkFOP1JPJUpqUU1sTzw8SlRPJUp3UU1tTzFHMXlPJU1PUU1tTzFHMltPJiBTUU1tTzFHMl5PJiFyUU1sTzw8SnNPJiNQUU1sTzw8SWhPT1FPMUcxZDFHMWRPSmpRJmpPQU5BUU9PUU83KylyNyspck8mI15RYE83KylyTyYjaVFgTzw8TmdPJiNxUXFPNyspdE9PUShDVzw8S1s8PEtbTyQxcVFgTzw8S1tPT1EoQ1c8PEtaPDxLWk8mI3tRcU88PEtbTyQxcVFgTzw8S1pPT1FTRzI2bkcyNm5PI05hUWBPRzI2bk9PUU83Kyl9NyspfU81dFFgTzcrKX1PJiRTUWBPPDxOb09PUVNHMjdaRzI3Wk81bFEoQ2hPRzI3Wk9JV1Emak9HMjZuT0xiUWRPMUc0X08mJFtRYE83KytRTzVsUShDaE8xRzJ4TyM2U1FgTzFHMnhPNWJRYE8xRzJ4TyEtT1EhYk8xRzJ4TyFAWFE3W08xRzJ4TyU1XlEoRGpPMUcwWk8mJGRRN1tPMUcyeE8lMWJRYE9BTkFoT09RU0FOQWhBTkFoT0lXUSZqT0FOQWhPJiR1UWBPQU5BaE8mJH1RcU9BTkFoT09RU0FOQWtBTkFrTzVsUShDaE9BTkFrTyM2U1FgT0FOQWtPT1FPJyNHdicjR3ZPT1FPNyspfDcrKXxPT1FTRzIydkcyMnZPT1FTQU5Bc0FOQXNPJiVYUWBPQU5Bc09PUVNBTkRbQU5EW09PUVNBTkRdQU5EXU9PUVM8PExuPDxMbk9PUU88PElhPDxJYU8lM3JRKEN8Tzw8SWFPT1FPPDxJWjw8SVpPOmFRYE88PElaTyl7UWRPPDxJYU8hLU9RIWJPPDxJWk8mJV5RKENoTzw8SWFPIUBYUTdbTzw8SVpPJiVpUShDaE88PElhTyYld1FNbU83KydlTyYnalFNbU83KydnTyYpXVEsVk9HMjZsT09RTzw8TV48PE1eT09RKENXQU5AdkFOQHZPJDFxUWBPQU5Adk9PUShDV0FOQHVBTkB1T09RU0xELFlMRCxZT09RTzw8TWk8PE1pT09RU0xELHVMRCx1TyNOYVFgT0xELFlPJiltUU1sTzcrKXlPT1FPNysoZDcrKGRPNWxRKENoTzcrKGRPIzZTUWBPNysoZE81YlFgTzcrKGRPIS1PUSFiTzcrKGRPIUBYUTdbTzcrKGRPT1FTRzI3U0cyN1NPJTFiUWBPRzI3U09JV1Emak9HMjdTT09RU0cyN1ZHMjdWTzVsUShDaE9HMjdWT09RU0cyN19HMjdfT09RT0FOPntBTj57T09RT0FOPnVBTj51TyUzclEoQ3xPQU4+e086YVFgT0FOPnVPKXtRZE9BTj57TyEtT1EhYk9BTj51TyYpd1EoQ2hPQU4+e08mKlNRKEN9T0cyNmxPT1EoQ1dHMjZiRzI2Yk9PUVMhJCggdCEkKCB0T09RTzw8TE88PExPTzVsUShDaE88PExPTyM2U1FgTzw8TE9PNWJRYE88PExPTyEtT1EhYk88PExPT09RU0xELG5MRCxuTyUxYlFgT0xELG5PT1FTTEQscUxELHFPT1FPRzI0Z0cyNGdPT1FPRzI0YUcyNGFPJTNyUShDfE9HMjRnTzphUWBPRzI0YU8pe1FkT0cyNGdPJixwUSFMUk8sNTpyTyYtZ1EkSVRPJyNJcU9PUU9BTkFqQU5Bak81bFEoQ2hPQU5Bak8jNlNRYE9BTkFqTzViUWBPQU5Bak9PUVMhJCghWSEkKCFZT09RT0xEKlJMRCpST09RT0xEKXtMRCl7TyUzclEoQ3xPTEQqUk8mLlpRTW1PRzI2bE8mL3xRIUxSTyw1OWpPJjBwUSFMUk8sNTxVTyYxZFEhTFJPLDU8V08mMldRIUxSTyw1PGZPT1FPRzI3VUcyN1VPNWxRKENoT0cyN1VPIzZTUWBPRzI3VU9PUU8hJCdNbSEkJ01tTyYyfVEhTFJPMUcyW08mM3FRIUxSTzFHMl5PJjRlUSFMUk8xRzF5T09RT0xELHBMRCxwTzVsUShDaE9MRCxwTyY1W1EhTFJPNysnZU8mNlJRIUxSTzcrJ2dPT1FPISQoIVshJCghW08mNnhRIUxST0cyNmxPTGJRZE8nI0RyTyY3b1F0TycjSXRPTGJRZE8nI0RqTyY3dlEoQ3xPJyNDaE8mOGFRdE8nI0NoTyY4cVFkTyw1OnZPJjpxUSZqTycjRVdPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTyw1O1JPTGJRZE8sNTtST0xiUWRPLDU7Uk9MYlFkTycjSVBPJjxPUWBPLDU8VE8mPWVRJmpPLDU7Uk9MYlFkTyw1O2ZPISh3UWBPJyNET08hKHdRYE8nI0RPTyEod1FgTycjRE9PSVdRJmpPJyNGak8mOnFRJmpPJyNGak8mPFdRJmpPJyNGak9JV1Emak8nI0ZsTyY6cVEmak8nI0ZsTyY8V1Emak8nI0ZsT0lXUSZqTycjRnpPJjpxUSZqTycjRnpPJjxXUSZqTycjRnpPTGJRZE8sNT9tTyY4cVFkTzFHMGJPJj1sUU1sTycjQ2hPTGJRZE8xRzFsT0lXUSZqTyw1PHBPJjpxUSZqTyw1PHBPJjxXUSZqTyw1PHBPSVdRJmpPLDU8ck8mOnFRJmpPLDU8ck8mPFdRJmpPLDU8ck9JV1Emak8sNTxfTyY6cVEmak8sNTxfTyY8V1Emak8sNTxfTyY4cVFkTzFHMW1PTGJRZE83KyZpT0lXUSZqTzFHMXlPJjpxUSZqTzFHMXlPJjxXUSZqTzFHMXlPSVdRJmpPMUcxe08mOnFRJmpPMUcxe08mPFdRJmpPMUcxe08mOHFRZE83KydYTyY4cVFkTzcrJXxPJj12UWBPNysncE9JV1Emak9BTkFRTyY6cVEmak9BTkFRTyY8V1Emak9BTkFRTyY9dlFgTzw8S1tPJj12UWBPQU5Adk8mPXtRYE8nI0VbTyY+UVFgTycjRVtPJj5ZUWBPJyNFek8mPl9RYE8nI0VnTyY+ZFFgTycjSlJPJj5vUWBPJyNKUE8mPnpRYE8sNTp2TyY/UFEsVk8sNTxRTyY/V1FgTycjRnNPJj9dUWBPJyNGc08mP2JRYE8nI0ZzTyY/Z1FgTyw1PFJPJj9vUWBPLDU6dk8mP3dRTWxPMUcwfU8mQE9RYE8sNTxfTyZAVFFgTyw1PF9PJkBZUWBPLDU8X08mQF9RYE8sNTxhTyZAZFFgTyw1PGFPJkBpUWBPLDU8YU8mQG5RYE8xRzFtTyZAc1FgTzFHMGJPJkB4UWBPMUcyVU8mQH1RLFZPPDxLZk8mQVVRLFZPPDxLZk8mQV1RLFZPPDxLZk8mQWRRcU83KydwTyZBa1FgTzcrJ3BPJkFwUXFPPDxLW080UVEmak8nI0ZoTzViUWBPJyNGZ09CelFgTycjRVpPTGJRZE8sNTtjTyEmV1FgTycjRnNPISZXUWBPJyNGc08hJldRYE8nI0ZzTyEmV1FgTycjRnVPISZXUWBPJyNGdU8hJldRYE8nI0Z1TyZBd1FgTyw1PGpPSmpRJmpPNysnek9KalEmak83Kyd6T0pqUSZqTzcrJ3pPSVdRJmpPMUcyVU8mQlBRYE8xRzJVT0lXUSZqTzcrJ3BPISdWUTdbTycjR09PJC9lUXFPMUcyYE8kL2VRcU8xRzJgTyQvZVFxTzFHMmBPISdWUTdbTyw1PGpPSVdRJmpPLDU8dE9JV1Emak8sNTx0T0lXUSZqTyw1PHRcIixzdGF0ZURhdGE6XCImQn1+TydZT1MnWk9TVE9TVU9Tfk9RVE9SVE9YeU9dY09faE9ibk9jbU9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hVFNPIV9rTyFkVU8hZ1RPIWhUTyFpVE8halRPIWtUTyFubE8jZHNPI3RwTyN4Xk8lUHFPJVJ0TyVUck8lVXJPJVh1TyVadk8lXndPJV93TyVheE8lbnpPJXR7TyV2fE8leH1PJXohT08lfSFQTyZUIVFPJlohUk8mXSFTTyZfIVRPJmEhVU8mYyFWTyddUE8nZlFPJ29ZTyd8YU9+T1FbWFpbWF9bWGpbWHVbWHZbWHhbWCFSW1ghYVtYIWJbWCFkW1ghaltYIXtbWCNXZFgjW1tYI11bWCNeW1gjX1tYI2BbWCNhW1gjYltYI2NbWCNlW1gjZ1tYI2lbWCNqW1gjb1tYJ1dbWCdmW1gncFtYJ3dbWCd4W1h+TyFdJGxYflAkek9TIVdPJ1UhWE8nViFaT35PUVRPUlRPXWNPYiFrT2Mhak9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hVCFiTyFfa08hZFVPIWdUTyFoVE8haVRPIWpUTyFrVE8hbiFpTyN0IWxPI3heTyddIVtPJ2ZRTydvWU8nfGFPfk8hUSFgTyFSIV1PIU8nalAhTyd0UH5QJ2RPIVMhbU9+UGBPUVRPUlRPXWNPYiFrT2Mhak9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hVCFiTyFfa08hZFVPIWdUTyFoVE8haVRPIWpUTyFrVE8hbiFpTyN0IWxPI3heTyddOWFPJ2ZRTydvWU8nfGFPfk9RVE9SVE9dY09iIWtPYyFqT2hjT2pUT2tjT2xjT3FUT3NUT3hST3tjT3xjT31jTyFUIWJPIV9rTyFkVU8hZ1RPIWhUTyFpVE8halRPIWtUTyFuIWlPI3QhbE8jeF5PJ2ZRTydvWU8nfGFPfk8hUSFyTyNVIXVPI1Yhck8nXTliTyFjJ3FQflAre08jVyF2T35PIV0hd08jVyF2T35PUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIVIjYk8hYSNUTyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08jYSNUTyNiI1RPI2MjVE8jZSNVTyNnI1dPI2kjWU8jaiNaTydmUU8ncCNbTyd3IX1PJ3gjT09+T18naFgnVydoWCFjJ2hYIU8naFghVCdoWCVRJ2hYIV0naFh+UC5qTyF7I2VPI28jZU9RJ2lYWidpWF8naVhqJ2lYdSdpWHYnaVh4J2lYIVInaVghYSdpWCFiJ2lYIWQnaVghaidpWCNbJ2lYI10naVgjXidpWCNfJ2lYI2AnaVgjYSdpWCNiJ2lYI2UnaVgjZydpWCNpJ2lYI2onaVgnZidpWCdwJ2lYJ3cnaVgneCdpWH5PI2MnaVgnVydpWCFPJ2lYIWMnaVhuJ2lYIVQnaVglUSdpWCFdJ2lYflAwek8heyNlT35PI3ojZk8kUiNqT35PIVQja08jeF5PJFUjbE8kVyNuT35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPcyRTT3gjeU8hVCN6TyFfJFhPIWQjdk8jViRZTyN0JFZPJF8kVE8kYSRVTyRkJFdPJ10jcE8nYiRQTydmI3NPJ2EnY1B+TyFkJFpPfk8hXSRdT35PXyReTydXJF5Pfk8nXSRiT35PIWQkWk8nXSRiTydeJGRPJ2IkUE9+T2Mkak8hZCRaTyddJGJPfk8jYyNUT35PXSRzT3Ukb08hVCRsTyFkJG5PJVIkck8nXSRiTydeJGRPXihVUH5PIW4kdE9+T3gkdU8hVCR2TyddJGJPfk94JHVPIVQkdk8lWiR6TyddJGJPfk8nXSR7T35PI2RzTyVSdE8lVHJPJVVyTyVYdU8lWnZPJV53TyVfd09+T2IlVU9jJVRPIW4lUk8lUCVTTyVjJVFPflA3eE9iJVhPY21PIVQlV08hbmxPI2RzTyVQcU8lVHJPJVVyTyVYdU8lWnZPJV53TyVfd08lYXhPfk9gJVtPIXslX08lUiVZTydeJGRPflA4d08hZCVgTyFnJWRPfk8hZCVlT35PIVRTT35PXyReTydUJW1PJ1ckXk9+T18kXk8nVCVwTydXJF5Pfk9fJF5PJ1Qlck8nVyReT35PUyFXTydVIVhPJ1Yldk9+T1FbWFpbWGpbWHVbWHZbWHhbWCFSW1ghUmRYIWFbWCFiW1ghZFtYIWpbWCF7W1ghe2RYI1dkWCNbW1gjXVtYI15bWCNfW1gjYFtYI2FbWCNiW1gjY1tYI2VbWCNnW1gjaVtYI2pbWCNvW1gnZltYJ3BbWCd3W1gneFtYfk8hT1tYIU9kWH5QO2RPIVEleE8hTyZpWCFPJm5YIVImaVghUiZuWH5QJ2RPIVIlek8hTydqWH5PUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIVIlek8hYSNUTyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08jYSNUTyNiI1RPI2MjVE8jZSNVTyNnI1dPI2kjWU8jaiNaTydmUU8ncCNbTyd3IX1PJ3gjT09+TyFPJ2pYflA+YU8hTyZQT35PeCZTTyFXJl5PIVgmVk8hWSZWTydeJGRPfk9dJlRPayZUTyFRJldPJ2cmUU8hUydrUCFTJ3ZQflBAZE8hTydzWCFSJ3NYIV0nc1ghYydzWCdwJ3NYfk8heydzWCNXI1BYIVMnc1h+UEFdTyF7Jl9PIU8ndVghUid1WH5PIVImYE8hTyd0WH5PIU8mY09+TyF7I2VPflBBXU9QJmdPIVQmZE8hbyZmTyddJGJPfk9jJmxPIWQkWk8nXSRiT35PdSRvTyFkJG5Pfk8hUyZtT35QYE91IXtPdiF7T3ghfE8hYiF5TyFkIXpPJ2ZRT1EhZmFaIWZhaiFmYSFSIWZhIWEhZmEhaiFmYSNbIWZhI10hZmEjXiFmYSNfIWZhI2AhZmEjYSFmYSNiIWZhI2MhZmEjZSFmYSNnIWZhI2khZmEjaiFmYSdwIWZhJ3chZmEneCFmYX5PXyFmYSdXIWZhIU8hZmEhYyFmYW4hZmEhVCFmYSVRIWZhIV0hZmF+UENmTyFjJm5Pfk8hXSF3TyF7JnBPJ3Amb08hUidyWF8nclgnVydyWH5PIWMnclh+UEZPTyFSJnRPIWMncVh+TyFjJnZPfk94JHVPIVQkdk8jViZ3TyddJGJPfk9RVE9SVE9dY09iIWtPYyFqT2hjT2pUT2tjT2xjT3FUT3NUT3hST3tjT3xjT31jTyFUU08hX2tPIWRVTyFnVE8haFRPIWlUTyFqVE8ha1RPIW4haU8jdCFsTyN4Xk8nXTlhTydmUU8nb1lPJ3xhT35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPczl0T3gjeU8hVCN6TyFfO2VPIWQjdk8jVjl9TyN0JFZPJF85d08kYTl6TyRkJFdPJ10me08nYiRQTydmI3NPfk8jVyZ9T35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPcyRTT3gjeU8hVCN6TyFfJFhPIWQjdk8jViRZTyN0JFZPJF8kVE8kYSRVTyRkJFdPJ10me08nYiRQTydmI3NPfk8nYSdtUH5QSmpPIVEnUk8hYyduUH5QKXtPJ2cnVE8nb1lPfk9ROV5PUjleT11jT2I7YE9jIWpPaGNPajleT2tjT2xjT3E5Xk9zOV5PeFJPe2NPfGNPfWNPIVQhYk8hXzlgTyFkVU8hZzleTyFoOV5PIWk5Xk8hajleTyFrOV5PIW4haU8jdCFsTyN4Xk8nXSdjTydmUU8nb1lPJ3w7Xk9+TyFkIXpPfk8hUiNiT18kXWEnVyRdYSFjJF1hIU8kXWEhVCRdYSVRJF1hIV0kXWF+TyNkJ2pPflBJV08hXSdsTyFUJ3lYI3cneVgjeid5WCRSJ3lYfk91J21PflAhIFlPdSdtTyFUJ3lYI3cneVgjeid5WCRSJ3lYfk8hVCdvTyN3J3NPI3onbk8kUid0T35PIVEnd09+UExiTyN6I2ZPJFInek9+T1AkZVh1JGVYeCRlWCFiJGVYJ3ckZVgneCRlWH5PUGZYIVJmWCF7ZlgnYWZYJ2EkZVh+UCEhck9rJ3xPfk9TJ31PJ1UoT08nVihRT35PUChaT3UoU094KFRPJ3coVk8neChYT35PJ2EoUk9+UCEje08nYShbT35PXSNxT2gkUU9qI3JPayNxT2wjcU9xJFJPczl0T3gjeU8hVCN6TyFfO2VPIWQjdk8jVjl9TyN0JFZPJF85d08kYTl6TyRkJFdPJ2IkUE8nZiNzT35PIVEoYE8nXShdTyFjJ31QflAhJGpPI1coYk9+TyFkKGNPfk8hUShoTyddKGVPIU8oT1B+UCEkak9qKHVPeChtTyFXKHNPIVgobE8hWShsTyFkKGNPIXgodE8kdyhvTydeJGRPJ2coak9+TyFTKHJPflAhJmpPIWIheU9QJ2VYdSdlWHgnZVgndydlWCd4J2VYIVInZVgheydlWH5PJ2EnZVgjbSdlWH5QISdjT1AoeE8heyh3TyFSJ2RYJ2EnZFh+TyFSKHlPJ2EnY1h+TyddJHtPJ2EnY1B+TyddKHxPfk8hZClST35PJ10me09+T3gkdU8hUSFyTyFUJHZPI1UhdU8jViFyTyddJGJPIWMncVB+TyFdIXdPI1cpVk9+T1EjXk9aI2RPaiNST3Uhe092IXtPeCF8TyFhI1RPIWIheU8hZCF6TyFqI15PI1sjUE8jXSNRTyNeI1FPI18jUU8jYCNTTyNhI1RPI2IjVE8jYyNUTyNlI1VPI2cjV08jaSNZTyNqI1pPJ2ZRTydwI1tPJ3chfU8neCNPT35PXyFeYSFSIV5hJ1chXmEhTyFeYSFjIV5hbiFeYSFUIV5hJVEhXmEhXSFeYX5QISl3T1ApX08hVCZkTyFvKV5PJVEpXU8nYiRQT35PIV0pYU8hVCdgWF8nYFghUidgWCdXJ2BYfk8hZCRaTydiJFBPfk8hZCRaTyddJGJPJ2IkUE9+TyFdIXdPI1cmfU9+T10pbE8lUiltTyddKWlPIVMoVlB+TyFSKW5PXihVWH5PJ2cnVE9+T1opck9+T14pc09+TyFUJGxPJ10kYk8nXiRkT14oVVB+T3gkdU8hUSl4TyFSJmBPIVQkdk8nXSRiTyFPJ3RQfk9dJlpPayZaTyFRKXlPJ2cnVE8hUyd2UH5PIVIpek9fKFJYJ1coUlh+TyF7Kk9PJ2IkUE9+T1AqUk8hVCN6TydiJFBPfk8hVCpUT35PdSpWTyFUU09+TyFuKltPfk9jKmFPfk8nXSh8TyFTKFRQfk9jJGpPfk8lUnRPJ10ke09+UDh3T1oqZ09eKmZPfk9RVE9SVE9dY09ibk9jbU9oY09qVE9rY09sY09xVE9zVE94Uk97Y098Y099Y08hX2tPIWRVTyFnVE8haFRPIWlUTyFqVE8ha1RPIW5sTyN4Xk8lUHFPJ2ZRTydvWU8nfGFPfk8hVCFiTyN0IWxPJ105YU9+UCExX09eKmZPXyReTydXJF5Pfk9fKmtPI2QqbU8lVCptTyVVKm1PflApe08hZCVgT35PJXQqck9+TyFUKnRPfk8mVip2TyZYKndPUSZTYVImU2FYJlNhXSZTYV8mU2FiJlNhYyZTYWgmU2FqJlNhayZTYWwmU2FxJlNhcyZTYXgmU2F7JlNhfCZTYX0mU2EhVCZTYSFfJlNhIWQmU2EhZyZTYSFoJlNhIWkmU2EhaiZTYSFrJlNhIW4mU2EjZCZTYSN0JlNhI3gmU2ElUCZTYSVSJlNhJVQmU2ElVSZTYSVYJlNhJVomU2ElXiZTYSVfJlNhJWEmU2ElbiZTYSV0JlNhJXYmU2EleCZTYSV6JlNhJX0mU2EmVCZTYSZaJlNhJl0mU2EmXyZTYSZhJlNhJmMmU2EnUyZTYSddJlNhJ2YmU2EnbyZTYSd8JlNhIVMmU2EleyZTYWAmU2EmUSZTYX5PJ10qfE9+T24rUE9+TyFPJmlhIVImaWF+UCEpd08hUStUTyFPJmlYIVImaVh+UCl7TyFSJXpPIU8namF+TyFPJ2phflA+YU8hUiZgTyFPJ3Rhfk8hUndYIVIhWlghU3dYIVMhWlghXXdYIV0hWlghZCFaWCF7d1gnYiFaWH5PIV0rWU8heytYTyFSI1RYIVInbFghUyNUWCFTJ2xYIV0nbFghZCdsWCdiJ2xYfk8hXStbTyFkJFpPJ2IkUE8hUiFWWCFTIVZYfk9dJlJPayZST3gmU08nZyhqT35PUTleT1I5Xk9dY09iO2BPYyFqT2hjT2o5Xk9rY09sY09xOV5PczleT3hST3tjT3xjT31jTyFUIWJPIV85YE8hZFVPIWc5Xk8haDleTyFpOV5PIWo5Xk8hazleTyFuIWlPI3QhbE8jeF5PJ2ZRTydvWU8nfDteT35PJ106U09+UCE7ak8hUitgTyFTJ2tYfk8hUytiT35PIV0rWU8heytYTyFSI1RYIVMjVFh+TyFSK2NPIVMndlh+TyFTK2VPfk9dJlJPayZST3gmU08nXiRkTydnKGpPfk8hWCtmTyFZK2ZPflAhPmhPeCR1TyFRK2hPIVQkdk8nXSRiTyFPJm5YIVImblh+T18rbE8hVytvTyFYK2tPIVkra08hcitzTyFzK3FPIXQrck8hdStwTyF4K3RPJ14kZE8nZyhqTydvK2lPfk8hUytuT35QIT9pT1AreU8hVCZkTyFvK3hPfk8heyxQTyFSJ3JhIWMncmFfJ3JhJ1cncmF+TyFdIXdPflAhQHNPIVImdE8hYydxYX5PeCR1TyFRLFNPIVQkdk8jVSxVTyNWLFNPJ10kYk8hUiZwWCFjJnBYfk9fI09pIVIjT2knVyNPaSFPI09pIWMjT2luI09pIVQjT2klUSNPaSFdI09pflAhKXdPUDt0T3UoU094KFRPJ3coVk8neChYT35PI1chemEhUiF6YSFjIXphIXshemEhVCF6YV8hemEnVyF6YSFPIXphflAhQnBPI1cnZVhRJ2VYWidlWF8nZVhqJ2VYdidlWCFhJ2VYIWQnZVghaidlWCNbJ2VYI10nZVgjXidlWCNfJ2VYI2AnZVgjYSdlWCNiJ2VYI2MnZVgjZSdlWCNnJ2VYI2knZVgjaidlWCdXJ2VYJ2YnZVgncCdlWCFjJ2VYIU8nZVghVCdlWG4nZVglUSdlWCFdJ2VYflAhJ2NPIVIsX08nYSdtWH5QISN7TydhLGFPfk8hUixiTyFjJ25YflAhKXdPIWMsZU9+TyFPLGZPfk9RI15PdSF7T3Yhe094IXxPIWIheU8hZCF6TyFqI15PJ2ZRT1ojWmlfI1ppaiNaaSFSI1ppIWEjWmkjXSNaaSNeI1ppI18jWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppJ1cjWmkncCNaaSd3I1ppJ3gjWmkhTyNaaSFjI1ppbiNaaSFUI1ppJVEjWmkhXSNaaX5PI1sjWml+UCFGZk8jWyNQT35QIUZmT1EjXk91IXtPdiF7T3ghfE8hYiF5TyFkIXpPIWojXk8jWyNQTyNdI1FPI14jUU8jXyNRTydmUU9aI1ppXyNaaSFSI1ppIWEjWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppJ1cjWmkncCNaaSd3I1ppJ3gjWmkhTyNaaSFjI1ppbiNaaSFUI1ppJVEjWmkhXSNaaX5PaiNaaX5QIUlRT2ojUk9+UCFJUU9RI15PaiNST3Uhe092IXtPeCF8TyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08nZlFPXyNaaSFSI1ppI2UjWmkjZyNaaSNpI1ppI2ojWmknVyNaaSdwI1ppJ3cjWmkneCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppfk9aI1ppIWEjWmkjYSNaaSNiI1ppI2MjWml+UCFLbE9aI2RPIWEjVE8jYSNUTyNiI1RPI2MjVE9+UCFLbE9RI15PWiNkT2ojUk91IXtPdiF7T3ghfE8hYSNUTyFiIXlPIWQhek8haiNeTyNbI1BPI10jUU8jXiNRTyNfI1FPI2AjU08jYSNUTyNiI1RPI2MjVE8jZSNVTydmUU9fI1ppIVIjWmkjZyNaaSNpI1ppI2ojWmknVyNaaSdwI1ppJ3gjWmkhTyNaaSFjI1ppbiNaaSFUI1ppJVEjWmkhXSNaaX5PJ3cjWml+UCFOZE8ndyF9T35QIU5kT1EjXk9aI2RPaiNST3Uhe092IXtPeCF8TyFhI1RPIWIheU8hZCF6TyFqI15PI1sjUE8jXSNRTyNeI1FPI18jUU8jYCNTTyNhI1RPI2IjVE8jYyNUTyNlI1VPI2cjV08nZlFPJ3chfU9fI1ppIVIjWmkjaSNaaSNqI1ppJ1cjWmkncCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppfk8neCNaaX5QIyNPTyd4I09PflAjI09PUSNeT1ojZE9qI1JPdSF7T3Yhe094IXxPIWEjVE8hYiF5TyFkIXpPIWojXk8jWyNQTyNdI1FPI14jUU8jXyNRTyNgI1NPI2EjVE8jYiNUTyNjI1RPI2UjVU8jZyNXTyNpI1lPJ2ZRTyd3IX1PJ3gjT09+T18jWmkhUiNaaSNqI1ppJ1cjWmkncCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppflAjJWpPUVtYWltYaltYdVtYdltYeFtYIWFbWCFiW1ghZFtYIWpbWCF7W1gjV2RYI1tbWCNdW1gjXltYI19bWCNgW1gjYVtYI2JbWCNjW1gjZVtYI2dbWCNpW1gjaltYI29bWCdmW1gncFtYJ3dbWCd4W1ghUltYIVNbWH5PI21bWH5QIyd9T1EjXk9aOXJPajlnT3Uhe092IXtPeCF8TyFhOWlPIWIheU8hZCF6TyFqI15PI1s5ZU8jXTlmTyNeOWZPI185Zk8jYDloTyNhOWlPI2I5aU8jYzlpTyNlOWpPI2c5bE8jaTluTyNqOW9PJ2ZRTydwI1tPJ3chfU8neCNPT35PI20saE9+UCMqWE9RJ2lYWidpWGonaVh1J2lYdidpWHgnaVghYSdpWCFiJ2lYIWQnaVghaidpWCNbJ2lYI10naVgjXidpWCNfJ2lYI2AnaVgjYSdpWCNiJ2lYI2UnaVgjZydpWCNpJ2lYI2onaVgnZidpWCdwJ2lYJ3cnaVgneCdpWCFSJ2lYfk8hezlzTyNvOXNPI2MnaVgjbSdpWCFTJ2lYflAjLFNPXyZzYSFSJnNhJ1cmc2EhYyZzYW4mc2EhTyZzYSFUJnNhJVEmc2EhXSZzYX5QISl3T1EjWmlaI1ppXyNaaWojWml2I1ppIVIjWmkhYSNaaSFiI1ppIWQjWmkhaiNaaSNbI1ppI10jWmkjXiNaaSNfI1ppI2AjWmkjYSNaaSNiI1ppI2MjWmkjZSNaaSNnI1ppI2kjWmkjaiNaaSdXI1ppJ2YjWmkncCNaaSFPI1ppIWMjWmluI1ppIVQjWmklUSNaaSFdI1ppflAhQnBPXyNuaSFSI25pJ1cjbmkhTyNuaSFjI25pbiNuaSFUI25pJVEjbmkhXSNuaX5QISl3TyN6LGpPfk8jeixrT35PIV0nbE8heyxsTyFUJE9YI3ckT1gjeiRPWCRSJE9Yfk8hUSxtT35PIVQnb08jdyxvTyN6J25PJFIscE9+TyFSOXBPIVMnaFh+UCMqWE8hUyxxT35PJFIsc09+T1MnfU8nVShPTydWLHZPfk9dLHlPayx5TyFPLHpPfk8hUmRYIV1kWCFjZFghYyRlWCdwZFh+UCEhck8hYy1RT35QIUJwTyFSLVJPIV0hd08ncCZvTyFjJ31Yfk8hYy1XT35PIVEoYE8nXSRiTyFjJ31Qfk8jVy1ZT35PIU8kZVghUiRlWCFdJGxYflAhIXJPIVItWk8hTyhPWH5QIUJwTyFdLV1Pfk8hTy1fT35Pai1jTyFdIXdPIWQkWk8nYiRQTydwJm9Pfk8hXSlhT35PXyReTyFSLWhPJ1ckXk9+TyFTLWpPflAhJmpPIVgta08hWS1rTydeJGRPJ2coak9+T3gtbU8nZyhqT35PIXgtbk9+TyddJHtPIVImeFgnYSZ4WH5PIVIoeU8nYSdjYX5PJ2Etc09+T3UtdE92LXRPeC11T1ByYSd3cmEneHJhIVJyYSF7cmF+TydhcmEjbXJhflAjN3BPdShTT3goVE9QJF5hJ3ckXmEneCReYSFSJF5hIXskXmF+TydhJF5hI20kXmF+UCM4Zk91KFNPeChUT1AkYGEndyRgYSd4JGBhIVIkYGEheyRgYX5PJ2EkYGEjbSRgYX5QIzlYT10tdk9+TyNXLXdPfk8nYSRuYSFSJG5hIXskbmEjbSRuYX5QISN7TyNXLXpPfk9QLlRPIVQmZE8hby5TTyVRLlJPfk9dI3FPaiNyT2sjcU9sI3FPcSRST3M5dE94I3lPIVQjek8hXztlTyFkI3ZPI1Y5fU8jdCRWTyRfOXdPJGE5ek8kZCRXTydiJFBPJ2Yjc09+T2guVk8nXS5VT35QIzp5TyFdKWFPIVQnYGFfJ2BhIVInYGEnVydgYX5PI1cuXU9+T1pbWCFSZFghU2RYfk8hUi5eTyFTKFZYfk8hUy5gT35PWi5hT35PXS5jTyddKWlPfk8hVCRsTyddJGJPXidRWCFSJ1FYfk8hUiluT14oVWF+TyFjLmZPflAhKXdPXS5oT35PWi5pT35PXi5qT35PUC5UTyFUJmRPIW8uU08lUS5STydiJFBPfk8hUil6T18oUmEnVyhSYX5PIXsucE9+T1Auc08hVCN6T35PJ2cnVE8hUyhTUH5PUC59TyFULnlPIW8ufE8lUS57TydiJFBPfk9aL1hPIVIvVk8hUyhUWH5PIVMvWU9+T14vW09fJF5PJ1ckXk9+T10vXU9+T10vXk8nXSh8T35PI2MvX08lci9gT35QMHpPIXsjZU8jYy9fTyVyL2BPfk9fL2FPflApe09fL2NPfk8ley9nT1EleWlSJXlpWCV5aV0leWlfJXlpYiV5aWMleWloJXlpaiV5aWsleWlsJXlpcSV5aXMleWl4JXlpeyV5aXwleWl9JXlpIVQleWkhXyV5aSFkJXlpIWcleWkhaCV5aSFpJXlpIWoleWkhayV5aSFuJXlpI2QleWkjdCV5aSN4JXlpJVAleWklUiV5aSVUJXlpJVUleWklWCV5aSVaJXlpJV4leWklXyV5aSVhJXlpJW4leWkldCV5aSV2JXlpJXgleWkleiV5aSV9JXlpJlQleWkmWiV5aSZdJXlpJl8leWkmYSV5aSZjJXlpJ1MleWknXSV5aSdmJXlpJ28leWknfCV5aSFTJXlpYCV5aSZRJXlpfk9gL21PIVMva08mUS9sT35QYE8hVFNPIWQvb09+TyZYKndPUSZTaVImU2lYJlNpXSZTaV8mU2liJlNpYyZTaWgmU2lqJlNpayZTaWwmU2lxJlNpcyZTaXgmU2l7JlNpfCZTaX0mU2khVCZTaSFfJlNpIWQmU2khZyZTaSFoJlNpIWkmU2khaiZTaSFrJlNpIW4mU2kjZCZTaSN0JlNpI3gmU2klUCZTaSVSJlNpJVQmU2klVSZTaSVYJlNpJVomU2klXiZTaSVfJlNpJWEmU2klbiZTaSV0JlNpJXYmU2kleCZTaSV6JlNpJX0mU2kmVCZTaSZaJlNpJl0mU2kmXyZTaSZhJlNpJmMmU2knUyZTaSddJlNpJ2YmU2knbyZTaSd8JlNpIVMmU2kleyZTaWAmU2kmUSZTaX5PIVIjYk9uJF1hfk8hTyZpaSFSJmlpflAhKXdPIVIlek8hTydqaX5PIVImYE8hTyd0aX5PIU8vdU9+TyFSIVZhIVMhVmF+UCMqWE9dJlJPayZSTyFRL3tPJ2coak8hUiZqWCFTJmpYflBAZE8hUitgTyFTJ2thfk9dJlpPayZaTyFRKXlPJ2cnVE8hUiZvWCFTJm9Yfk8hUitjTyFTJ3Zhfk8hTyd1aSFSJ3VpflAhKXdPXyReTyFdIXdPIWQkWk8hajBWTyF7MFRPJ1ckXk8nYiRQTydwJm9Pfk8hUzBZT35QIT9pTyFYMFpPIVkwWk8nXiRkTydnKGpPJ28raU9+TyFXMFtPflAjTVNPIVRTTyFXMFtPIXUwXk8heDBfT35QI01TTyFXMFtPIXMwYU8hdDBhTyF1MF5PIXgwX09+UCNNU08hVCZkT35PIVQmZE9+UCFCcE8hUidyaSFjJ3JpXydyaSdXJ3JpflAhKXdPIXswak8hUidyaSFjJ3JpXydyaSdXJ3Jpfk8hUiZ0TyFjJ3Fpfk94JHVPIVQkdk8jVjBsTyddJGJPfk8jV3JhUXJhWnJhX3JhanJhIWFyYSFicmEhZHJhIWpyYSNbcmEjXXJhI15yYSNfcmEjYHJhI2FyYSNicmEjY3JhI2VyYSNncmEjaXJhI2pyYSdXcmEnZnJhJ3ByYSFjcmEhT3JhIVRyYW5yYSVRcmEhXXJhflAjN3BPI1ckXmFRJF5hWiReYV8kXmFqJF5hdiReYSFhJF5hIWIkXmEhZCReYSFqJF5hI1skXmEjXSReYSNeJF5hI18kXmEjYCReYSNhJF5hI2IkXmEjYyReYSNlJF5hI2ckXmEjaSReYSNqJF5hJ1ckXmEnZiReYSdwJF5hIWMkXmEhTyReYSFUJF5hbiReYSVRJF5hIV0kXmF+UCM4Zk8jVyRgYVEkYGFaJGBhXyRgYWokYGF2JGBhIWEkYGEhYiRgYSFkJGBhIWokYGEjWyRgYSNdJGBhI14kYGEjXyRgYSNgJGBhI2EkYGEjYiRgYSNjJGBhI2UkYGEjZyRgYSNpJGBhI2okYGEnVyRgYSdmJGBhJ3AkYGEhYyRgYSFPJGBhIVQkYGFuJGBhJVEkYGEhXSRgYX5QIzlYTyNXJG5hUSRuYVokbmFfJG5haiRuYXYkbmEhUiRuYSFhJG5hIWIkbmEhZCRuYSFqJG5hI1skbmEjXSRuYSNeJG5hI18kbmEjYCRuYSNhJG5hI2IkbmEjYyRuYSNlJG5hI2ckbmEjaSRuYSNqJG5hJ1ckbmEnZiRuYSdwJG5hIWMkbmEhTyRuYSFUJG5hIXskbmFuJG5hJVEkbmEhXSRuYX5QIUJwT18jT3EhUiNPcSdXI09xIU8jT3EhYyNPcW4jT3EhVCNPcSVRI09xIV0jT3F+UCEpd08hUiZrWCdhJmtYflBKak8hUixfTydhJ21hfk8hUTB0TyFSJmxYIWMmbFh+UCl7TyFSLGJPIWMnbmF+TyFSLGJPIWMnbmF+UCEpd08jbSFmYSFTIWZhflBDZk8jbSFeYSFSIV5hIVMhXmF+UCMqWE8hVDFYTyN4Xk8kUDFZT35PIVMxXk9+T24xX09+UCFCcE9fJFlxIVIkWXEnVyRZcSFPJFlxIWMkWXFuJFlxIVQkWXElUSRZcSFdJFlxflAhKXdPIU8xYE9+T10seU9rLHlPfk91KFNPeChUTyd4KFhPUCR4aSd3JHhpIVIkeGkheyR4aX5PJ2EkeGkjbSR4aX5QJC5QT3UoU094KFRPUCR6aSd3JHppJ3gkemkhUiR6aSF7JHppfk8nYSR6aSNtJHppflAkLnJPJ3AjW09+UCFCcE8hUTFjTyddJGJPIVImdFghYyZ0WH5PIVItUk8hYyd9YX5PIVItUk8hXSF3TyFjJ31hfk8hUi1STyFdIXdPJ3Amb08hYyd9YX5PJ2EkZ2khUiRnaSF7JGdpI20kZ2l+UCEje08hUTFrTyddKGVPIU8mdlghUiZ2WH5QISRqTyFSLVpPIU8oT2F+TyFSLVpPIU8oT2F+UCFCcE8hXSF3T35PIV0hd08jYzFzT35PajF2TyFdIXdPJ3Amb09+TyFSJ2RpJ2EnZGl+UCEje08hezF5TyFSJ2RpJ2EnZGl+UCEje08hYzF8T35PXyRacSFSJFpxJ1ckWnEhTyRacSFjJFpxbiRacSFUJFpxJVEkWnEhXSRacX5QISl3TyFSMlFPIVQoUFh+UCFCcE8hVCZkTyVRMlRPfk8hVCZkTyVRMlRPflAhQnBPIVQkZVgkdVtYXyRlWCFSJGVYJ1ckZVh+UCEhck8kdTJYT1BnWHVnWHhnWCFUZ1gnd2dYJ3hnWF9nWCFSZ1gnV2dYfk8kdTJYT35PXTJfTyVSMmBPJ10paU8hUidQWCFTJ1BYfk8hUi5eTyFTKFZhfk9aMmRPfk9eMmVPfk9dMmhPfk9QMmpPIVQmZE8hbzJpTyVRMlRPfk9fJF5PJ1ckXk9+UCFCcE8hVCN6T35QIUJwTyFSMm9PIXsycU8hUyhTWH5PIVMyck9+T3g7b08hVzJ7TyFYMnRPIVkydE8hcjJ6TyFzMnlPIXQyeU8heDJ4TydeJGRPJ2coak8nbytpT35PIVMyd09+UCQ3Wk9QM1NPIVQueU8hbzNSTyVRM1FPfk9QM1NPIVQueU8hbzNSTyVRM1FPJ2IkUE9+TyddKHxPIVInT1ghUydPWH5PIVIvVk8hUyhUYX5PXTNeTydnM11Pfk9dM19Pfk9eM2FPfk8hYzNkT35QKXtPXzNmT35PXzNmT35QKXtPI2MzaE8lcjNpT35QRk9PYC9tTyFTM21PJlEvbE9+UGBPIV0zb09+TyFSI1RpIVMjVGl+UCMqWE8hezNxTyFSI1RpIVMjVGl+TyFSIVZpIVMhVml+UCMqWE9fJF5PIXszeE8nVyReT35PXyReTyFdIXdPIXszeE8nVyReT35PIVgzfE8hWTN8TydeJGRPJ2coak8nbytpT35PXyReTyFdIXdPIWQkWk8hajN9TyF7M3hPJ1ckXk8nYiRQTydwJm9Pfk8hVzRPT35QJDt4TyFXNE9PIXU0Uk8heDRTT35QJDt4T18kXk8hXSF3TyFqM31PIXszeE8nVyReTydwJm9Pfk8hUidycSFjJ3JxXydycSdXJ3JxflAhKXdPIVImdE8hYydxcX5PI1ckeGlRJHhpWiR4aV8keGlqJHhpdiR4aSFhJHhpIWIkeGkhZCR4aSFqJHhpI1skeGkjXSR4aSNeJHhpI18keGkjYCR4aSNhJHhpI2IkeGkjYyR4aSNlJHhpI2ckeGkjaSR4aSNqJHhpJ1ckeGknZiR4aSdwJHhpIWMkeGkhTyR4aSFUJHhpbiR4aSVRJHhpIV0keGl+UCQuUE8jVyR6aVEkemlaJHppXyR6aWokeml2JHppIWEkemkhYiR6aSFkJHppIWokemkjWyR6aSNdJHppI14kemkjXyR6aSNgJHppI2EkemkjYiR6aSNjJHppI2UkemkjZyR6aSNpJHppI2okemknVyR6aSdmJHppJ3AkemkhYyR6aSFPJHppIVQkemluJHppJVEkemkhXSR6aX5QJC5yTyNXJGdpUSRnaVokZ2lfJGdpaiRnaXYkZ2khUiRnaSFhJGdpIWIkZ2khZCRnaSFqJGdpI1skZ2kjXSRnaSNeJGdpI18kZ2kjYCRnaSNhJGdpI2IkZ2kjYyRnaSNlJGdpI2ckZ2kjaSRnaSNqJGdpJ1ckZ2knZiRnaSdwJGdpIWMkZ2khTyRnaSFUJGdpIXskZ2luJGdpJVEkZ2khXSRnaX5QIUJwTyFSJmthJ2Ema2F+UCEje08hUiZsYSFjJmxhflAhKXdPIVIsYk8hYyduaX5PI20jT2khUiNPaSFTI09pflAjKlhPUSNeT3Uhe092IXtPeCF8TyFiIXlPIWQhek8haiNeTydmUU9aI1ppaiNaaSFhI1ppI10jWmkjXiNaaSNfI1ppI2AjWmkjYSNaaSNiI1ppI2MjWmkjZSNaaSNnI1ppI2kjWmkjaiNaaSNtI1ppJ3AjWmkndyNaaSd4I1ppIVIjWmkhUyNaaX5PI1sjWml+UCRFaU8jWzllT35QJEVpT1EjXk91IXtPdiF7T3ghfE8hYiF5TyFkIXpPIWojXk8jWzllTyNdOWZPI145Zk8jXzlmTydmUU9aI1ppIWEjWmkjYCNaaSNhI1ppI2IjWmkjYyNaaSNlI1ppI2cjWmkjaSNaaSNqI1ppI20jWmkncCNaaSd3I1ppJ3gjWmkhUiNaaSFTI1ppfk9qI1ppflAkR3FPajlnT35QJEdxT1EjXk9qOWdPdSF7T3Yhe094IXxPIWIheU8hZCF6TyFqI15PI1s5ZU8jXTlmTyNeOWZPI185Zk8jYDloTydmUU8jZSNaaSNnI1ppI2kjWmkjaiNaaSNtI1ppJ3AjWmkndyNaaSd4I1ppIVIjWmkhUyNaaX5PWiNaaSFhI1ppI2EjWmkjYiNaaSNjI1ppflAkSXlPWjlyTyFhOWlPI2E5aU8jYjlpTyNjOWlPflAkSXlPUSNeT1o5ck9qOWdPdSF7T3Yhe094IXxPIWE5aU8hYiF5TyFkIXpPIWojXk8jWzllTyNdOWZPI145Zk8jXzlmTyNgOWhPI2E5aU8jYjlpTyNjOWlPI2U5ak8nZlFPI2cjWmkjaSNaaSNqI1ppI20jWmkncCNaaSd4I1ppIVIjWmkhUyNaaX5PJ3cjWml+UCRMX08ndyF9T35QJExfT1EjXk9aOXJPajlnT3Uhe092IXtPeCF8TyFhOWlPIWIheU8hZCF6TyFqI15PI1s5ZU8jXTlmTyNeOWZPI185Zk8jYDloTyNhOWlPI2I5aU8jYzlpTyNlOWpPI2c5bE8nZlFPJ3chfU8jaSNaaSNqI1ppI20jWmkncCNaaSFSI1ppIVMjWml+Tyd4I1ppflAkTmdPJ3gjT09+UCROZ09RI15PWjlyT2o5Z091IXtPdiF7T3ghfE8hYTlpTyFiIXlPIWQhek8haiNeTyNbOWVPI105Zk8jXjlmTyNfOWZPI2A5aE8jYTlpTyNiOWlPI2M5aU8jZTlqTyNnOWxPI2k5bk8nZlFPJ3chfU8neCNPT35PI2ojWmkjbSNaaSdwI1ppIVIjWmkhUyNaaX5QJSFvT18ja3khUiNreSdXI2t5IU8ja3khYyNreW4ja3khVCNreSVRI2t5IV0ja3l+UCEpd09QO3ZPdShTT3goVE8ndyhWTyd4KFhPfk9RI1ppWiNaaWojWml2I1ppIWEjWmkhYiNaaSFkI1ppIWojWmkjWyNaaSNdI1ppI14jWmkjXyNaaSNgI1ppI2EjWmkjYiNaaSNjI1ppI2UjWmkjZyNaaSNpI1ppI2ojWmkjbSNaaSdmI1ppJ3AjWmkhUiNaaSFTI1ppflAlJWFPIWIheU9QJ2VYdSdlWHgnZVgndydlWCd4J2VYIVMnZVh+T1EnZVhaJ2VYaidlWHYnZVghYSdlWCFkJ2VYIWonZVgjWydlWCNdJ2VYI14nZVgjXydlWCNgJ2VYI2EnZVgjYidlWCNjJ2VYI2UnZVgjZydlWCNpJ2VYI2onZVgjbSdlWCdmJ2VYJ3AnZVghUidlWH5QJSdlTyNtI25pIVIjbmkhUyNuaX5QIypYTyFTNGVPfk8hUiZzYSFTJnNhflAjKlhPIV0hd08ncCZvTyFSJnRhIWMmdGF+TyFSLVJPIWMnfWl+TyFSLVJPIV0hd08hYyd9aX5PJ2EkZ3EhUiRncSF7JGdxI20kZ3F+UCEje08hTyZ2YSFSJnZhflAhQnBPIV00bE9+TyFSLVpPIU8oT2l+UCFCcE8hUi1aTyFPKE9pfk8hTzRwT35PIV0hd08jYzR1T35PajR2TyFdIXdPJ3Amb09+TyFPNHhPfk8nYSRpcSFSJGlxIXskaXEjbSRpcX5QISN7T18kWnkhUiRaeSdXJFp5IU8kWnkhYyRaeW4kWnkhVCRaeSVRJFp5IV0kWnl+UCEpd08hUjJRTyFUKFBhfk8hVCZkTyVRNH1Pfk8hVCZkTyVRNH1PflAhQnBPXyNPeSFSI095J1cjT3khTyNPeSFjI095biNPeSFUI095JVEjT3khXSNPeX5QISl3T1o1UU9+T101U08nXSlpT35PIVIuXk8hUyhWaX5PXTVWT35PXjVXT35PJ2cnVE8hUiZ7WCFTJntYfk8hUjJvTyFTKFNhfk8hUzVlT35QJDdaT3g7c08nZyhqTydvK2lPfk8hVzVoTyFYNWdPIVk1Z08heDBfTydeJGRPJ2coak8nbytpT35PIXM1aU8hdDVpT35QJTBeTyFYNWdPIVk1Z08nXiRkTydnKGpPJ28raU9+TyFULnlPfk8hVC55TyVRNWtPfk8hVC55TyVRNWtPflAhQnBPUDVwTyFULnlPIW81b08lUTVrT35PWjV1TyFSJ09hIVMnT2F+TyFSL1ZPIVMoVGl+T101eE9+TyFjNXlPfk8hYzV6T35PIWM1e09+TyFjNXtPflApe09fNX1Pfk8hXTZRT35PIWM2Uk9+TyFSJ3VpIVMndWl+UCMqWE9fJF5PJ1ckXk9+UCEpd09fJF5PIXs2V08nVyReT35PXyReTyFdIXdPIXs2V08nVyReT35PIVg2XU8hWTZdTydeJGRPJ2coak8nbytpT35PXyReTyFdIXdPIWo2Xk8hezZXTydXJF5PJ3Amb09+TyFkJFpPJ2IkUE9+UCU0eE8hVzZfT35QJTRnTyFSJ3J5IWMncnlfJ3J5J1cncnl+UCEpd08jVyRncVEkZ3FaJGdxXyRncWokZ3F2JGdxIVIkZ3EhYSRncSFiJGdxIWQkZ3EhaiRncSNbJGdxI10kZ3EjXiRncSNfJGdxI2AkZ3EjYSRncSNiJGdxI2MkZ3EjZSRncSNnJGdxI2kkZ3EjaiRncSdXJGdxJ2YkZ3EncCRncSFjJGdxIU8kZ3EhVCRncSF7JGdxbiRncSVRJGdxIV0kZ3F+UCFCcE8jVyRpcVEkaXFaJGlxXyRpcWokaXF2JGlxIVIkaXEhYSRpcSFiJGlxIWQkaXEhaiRpcSNbJGlxI10kaXEjXiRpcSNfJGlxI2AkaXEjYSRpcSNiJGlxI2MkaXEjZSRpcSNnJGlxI2kkaXEjaiRpcSdXJGlxJ2YkaXEncCRpcSFjJGlxIU8kaXEhVCRpcSF7JGlxbiRpcSVRJGlxIV0kaXF+UCFCcE8hUiZsaSFjJmxpflAhKXdPI20jT3EhUiNPcSFTI09xflAjKlhPdS10T3YtdE94LXVPUHJhJ3dyYSd4cmEhU3Jhfk9RcmFacmFqcmEhYXJhIWJyYSFkcmEhanJhI1tyYSNdcmEjXnJhI19yYSNgcmEjYXJhI2JyYSNjcmEjZXJhI2dyYSNpcmEjanJhI21yYSdmcmEncHJhIVJyYX5QJTtPT3UoU094KFRPUCReYSd3JF5hJ3gkXmEhUyReYX5PUSReYVokXmFqJF5hdiReYSFhJF5hIWIkXmEhZCReYSFqJF5hI1skXmEjXSReYSNeJF5hI18kXmEjYCReYSNhJF5hI2IkXmEjYyReYSNlJF5hI2ckXmEjaSReYSNqJF5hI20kXmEnZiReYSdwJF5hIVIkXmF+UCU9U091KFNPeChUT1AkYGEndyRgYSd4JGBhIVMkYGF+T1EkYGFaJGBhaiRgYXYkYGEhYSRgYSFiJGBhIWQkYGEhaiRgYSNbJGBhI10kYGEjXiRgYSNfJGBhI2AkYGEjYSRgYSNiJGBhI2MkYGEjZSRgYSNnJGBhI2kkYGEjaiRgYSNtJGBhJ2YkYGEncCRgYSFSJGBhflAlP1dPUSRuYVokbmFqJG5hdiRuYSFhJG5hIWIkbmEhZCRuYSFqJG5hI1skbmEjXSRuYSNeJG5hI18kbmEjYCRuYSNhJG5hI2IkbmEjYyRuYSNlJG5hI2ckbmEjaSRuYSNqJG5hI20kbmEnZiRuYSdwJG5hIVIkbmEhUyRuYX5QJSVhTyNtJFlxIVIkWXEhUyRZcX5QIypYTyNtJFpxIVIkWnEhUyRacX5QIypYTyFTNmhPfk8jbTZpT35QISN7TyFdIXdPIVImdGkhYyZ0aX5PIV0hd08ncCZvTyFSJnRpIWMmdGl+TyFSLVJPIWMnfXF+TyFPJnZpIVImdml+UCFCcE8hUi1aTyFPKE9xfk8hTzZvT35QIUJwTyFPNm9Pfk8hUidkeSdhJ2R5flAhI3tPIVImeWEhVCZ5YX5QIUJwTyFUJHRxXyR0cSFSJHRxJ1ckdHF+UCFCcE9aNnZPfk8hUi5eTyFTKFZxfk9dNnlPfk8hVCZkTyVRNnpPfk8hVCZkTyVRNnpPflAhQnBPIXs2e08hUiZ7YSFTJnthfk8hUjJvTyFTKFNpflAjKlhPIVg3Uk8hWTdSTydeJGRPJ2coak8nbytpT35PIVc3VE8heDRTT35QJUdYTyFULnlPJVE3V09+TyFULnlPJVE3V09+UCFCcE9dN19PJ2c3Xk9+TyFSL1ZPIVMoVHF+TyFjN2FPfk8hYzdhT35QKXtPIWM3Y09+TyFjN2RPfk8hUiNUeSFTI1R5flAjKlhPXyReTyF7N2pPJ1ckXk9+T18kXk8hXSF3TyF7N2pPJ1ckXk9+TyFYN21PIVk3bU8nXiRkTydnKGpPJ28raU9+T18kXk8hXSF3TyFqN25PIXs3ak8nVyReTydwJm9Pfk8jbSNreSFSI2t5IVMja3l+UCMqWE9RJGdpWiRnaWokZ2l2JGdpIWEkZ2khYiRnaSFkJGdpIWokZ2kjWyRnaSNdJGdpI14kZ2kjXyRnaSNgJGdpI2EkZ2kjYiRnaSNjJGdpI2UkZ2kjZyRnaSNpJGdpI2okZ2kjbSRnaSdmJGdpJ3AkZ2khUiRnaSFTJGdpflAlJWFPdShTT3goVE8neChYT1AkeGkndyR4aSFTJHhpfk9RJHhpWiR4aWokeGl2JHhpIWEkeGkhYiR4aSFkJHhpIWokeGkjWyR4aSNdJHhpI14keGkjXyR4aSNgJHhpI2EkeGkjYiR4aSNjJHhpI2UkeGkjZyR4aSNpJHhpI2okeGkjbSR4aSdmJHhpJ3AkeGkhUiR4aX5QJUxqT3UoU094KFRPUCR6aSd3JHppJ3gkemkhUyR6aX5PUSR6aVokemlqJHppdiR6aSFhJHppIWIkemkhZCR6aSFqJHppI1skemkjXSR6aSNeJHppI18kemkjYCR6aSNhJHppI2IkemkjYyR6aSNlJHppI2ckemkjaSR6aSNqJHppI20kemknZiR6aSdwJHppIVIkeml+UCVObk8jbSRaeSFSJFp5IVMkWnl+UCMqWE8jbSNPeSFSI095IVMjT3l+UCMqWE8hXSF3TyFSJnRxIWMmdHF+TyFSLVJPIWMnfXl+TyFPJnZxIVImdnF+UCFCcE8hTzd0T35QIUJwTyFSLl5PIVMoVnl+TyFSMm9PIVMoU3F+TyFYOFFPIVk4UU8nXiRkTydnKGpPJ28raU9+TyFULnlPJVE4VE9+TyFULnlPJVE4VE9+UCFCcE8hYzhXT35PXyReTyF7OF1PJ1ckXk9+T18kXk8hXSF3TyF7OF1PJ1ckXk9+T1EkZ3FaJGdxaiRncXYkZ3EhYSRncSFiJGdxIWQkZ3EhaiRncSNbJGdxI10kZ3EjXiRncSNfJGdxI2AkZ3EjYSRncSNiJGdxI2MkZ3EjZSRncSNnJGdxI2kkZ3EjaiRncSNtJGdxJ2YkZ3EncCRncSFSJGdxIVMkZ3F+UCUlYU9RJGlxWiRpcWokaXF2JGlxIWEkaXEhYiRpcSFkJGlxIWokaXEjWyRpcSNdJGlxI14kaXEjXyRpcSNgJGlxI2EkaXEjYiRpcSNjJGlxI2UkaXEjZyRpcSNpJGlxI2okaXEjbSRpcSdmJGlxJ3AkaXEhUiRpcSFTJGlxflAlJWFPJ2EkfCFaIVIkfCFaIXskfCFaI20kfCFaflAhI3tPIVIme3EhUyZ7cX5QIypYT18kXk8hezhvTydXJF5Pfk8jVyR8IVpRJHwhWlokfCFaXyR8IVpqJHwhWnYkfCFaIVIkfCFaIWEkfCFaIWIkfCFaIWQkfCFaIWokfCFaI1skfCFaI10kfCFaI14kfCFaI18kfCFaI2AkfCFaI2EkfCFaI2IkfCFaI2MkfCFaI2UkfCFaI2ckfCFaI2kkfCFaI2okfCFaJ1ckfCFaJ2YkfCFaJ3AkfCFaIWMkfCFaIU8kfCFaIVQkfCFaIXskfCFabiR8IVolUSR8IVohXSR8IVp+UCFCcE9QO3VPdShTT3goVE8ndyhWTyd4KFhPfk8hUyF6YSFXIXphIVghemEhWSF6YSFyIXphIXMhemEhdCF6YSF4IXphJ14hemEnZyF6YSdvIXphflAmLF9PIVcnZVghWCdlWCFZJ2VYIXInZVghcydlWCF0J2VYIXgnZVgnXidlWCdnJ2VYJ28nZVh+UCUnZU9RJHwhWlokfCFaaiR8IVp2JHwhWiFhJHwhWiFiJHwhWiFkJHwhWiFqJHwhWiNbJHwhWiNdJHwhWiNeJHwhWiNfJHwhWiNgJHwhWiNhJHwhWiNiJHwhWiNjJHwhWiNlJHwhWiNnJHwhWiNpJHwhWiNqJHwhWiNtJHwhWidmJHwhWidwJHwhWiFSJHwhWiFTJHwhWn5QJSVhTyFXcmEhWHJhIVlyYSFycmEhc3JhIXRyYSF4cmEnXnJhJ2dyYSdvcmF+UCU7T08hVyReYSFYJF5hIVkkXmEhciReYSFzJF5hIXQkXmEheCReYSdeJF5hJ2ckXmEnbyReYX5QJT1TTyFXJGBhIVgkYGEhWSRgYSFyJGBhIXMkYGEhdCRgYSF4JGBhJ14kYGEnZyRgYSdvJGBhflAlP1dPIVMkbmEhVyRuYSFYJG5hIVkkbmEhciRuYSFzJG5hIXQkbmEheCRuYSdeJG5hJ2ckbmEnbyRuYX5QJixfTyFXJHhpIVgkeGkhWSR4aSFyJHhpIXMkeGkhdCR4aSF4JHhpJ14keGknZyR4aSdvJHhpflAlTGpPIVckemkhWCR6aSFZJHppIXIkemkhcyR6aSF0JHppIXgkemknXiR6aSdnJHppJ28keml+UCVObk8hUyRnaSFXJGdpIVgkZ2khWSRnaSFyJGdpIXMkZ2khdCRnaSF4JGdpJ14kZ2knZyRnaSdvJGdpflAmLF9PIVMkZ3EhVyRncSFYJGdxIVkkZ3EhciRncSFzJGdxIXQkZ3EheCRncSdeJGdxJ2ckZ3EnbyRncX5QJixfTyFTJGlxIVckaXEhWCRpcSFZJGlxIXIkaXEhcyRpcSF0JGlxIXgkaXEnXiRpcSdnJGlxJ28kaXF+UCYsX08hUyR8IVohVyR8IVohWCR8IVohWSR8IVohciR8IVohcyR8IVohdCR8IVoheCR8IVonXiR8IVonZyR8IVonbyR8IVp+UCYsX09uJ2hYflAuak9uW1ghT1tYIWNbWCVyW1ghVFtYJVFbWCFdW1h+UCR6TyFdZFghY1tYIWNkWCdwZFh+UDtkT1E5Xk9SOV5PXWNPYjtgT2Mhak9oY09qOV5Pa2NPbGNPcTleT3M5Xk94Uk97Y098Y099Y08hVFNPIV85YE8hZFVPIWc5Xk8haDleTyFpOV5PIWo5Xk8hazleTyFuIWlPI3QhbE8jeF5PJ10nY08nZlFPJ29ZTyd8O15Pfk9dI3FPaCRRT2ojck9rI3FPbCNxT3EkUk9zOXVPeCN5TyFUI3pPIV87Zk8hZCN2TyNWOk9PI3QkVk8kXzl4TyRhOXtPJGQkV08nXSZ7TydiJFBPJ2Yjc09+TyFSOXBPIVMkXWF+T10jcU9oJFFPaiNyT2sjcU9sI3FPcSRST3M5dk94I3lPIVQjek8hXztnTyFkI3ZPI1Y6UE8jdCRWTyRfOXlPJGE5fE8kZCRXTyddJntPJ2IkUE8nZiNzT35PI2Qnak9+UCY8V08hU1tYIVNkWH5QO2RPIV05ZE9+TyNXOWNPfk8hXSF3TyNXOWNPfk8hezlzT35PI2M5aU9+TyF7OlFPIVIndVghUyd1WH5PIXs5c08hUidzWCFTJ3NYfk8jVzpST35PJ2E6VE9+UCEje08jVzpbT35PI1c6XU9+TyNXOl5Pfk8hXSF3TyNXOl9Pfk8hXSF3TyNXOlJPfk8jbTpgT35QIypYTyNXOmFPfk8jVzpiT35PI1c6Y09+TyNXOmRPfk8jVzplT35PI1c6Zk9+TyNXOmdPfk8jVzpoT35PIU86aU9+TyNtOmpPflAhI3tPI206a09+UCEje08jbTpsT35QISN7TyFPOm1PflAhQnBPIU86bU9+TyFPOm5PflAhQnBPIV0hd08jYztsT35PIV0hd08jYztuT35PI3h+IWIhciF0IXUjVSNWJ3wkXyRhJGQkdSVQJVElUiVYJVolXiVfJWElY35VVCN4J3wjXX0nWSdaI3onWSddJ2d+XCIsZ290bzpcIiNLayhaUFBQUFBQUFAoW1AobFAqYFBQUFAtelBQLmEzczdvOFNQOFNQUFA4U1A6VThTUDhTUDpZUFA6YFA6dD9WUFBQUD9aUFBQUD9aQXtQUFBCUkRkUD9aUEZ3UFBQUEhwP1pQUFBQUEppP1pQUE1qTmdQUFBQTmshIVRQISFdISNeUE5nP1o/WiEmbiEpaSEuWyEuWyExa1BQUCExciE0aD9aUFBQUFBQUFBQUCE3X1AhOHBQUD9aITl9UD9aUD9aP1o/Wj9aUD9aITtkUFAhPl1QIUFRIUFZIUFeIUFeUCE+WVAhQWIhQWJQIURWUCFEWj9aP1ohRGEhR1Q4U1A4U1A4UzhTUCFIVzhTOFMhSmY4UyFNXzhTIyBnOFM4UyMhVCMkYyMkYyMkZyMkYyMkb1AjJGNQOFMjJWs4UyMnWDhTOFMtelBQUCMoeVBQIyljIyljUCMpY1AjKXgjKWNQUCMqT1AjKXVQIyl1IypiISFYIyl1IytQIytWIytZKFsjK10oW1AjK2QjK2QjK2RQKFtQKFtQKFtQKFtQUChbUCMraiMrbVAjK20oW1AjK3FQIyt0UChbUChbUChbUChbUChbUChbKFsjK3ojLFUjLFsjLGIjLHAjLHYjLHwjLVcjLV4jLW0jLXMjLlIjLlgjLl8jLm0jL1MjMHojMVkjMWAjMWYjMWwjMXIjMXwjMlMjMlkjMmQjMnYjMnxQUFBQUFBQUCMzU1BQIzN2IzdPUFAjOGYjOG0jOHVQUCM+YSNAdCNGcCNGcyNGdiNHUiNHVVBQI0dYI0ddI0d6I0hxI0h1I0laUFAjSV8jSWUjSWlQI0lsI0lwI0lzI0pjI0p5I0tPI0tSI0tVI0tbI0tfI0tjI0tnbWhPU2p9IW4kXSVjJWYlZyVpKm8qdC9nL2pRJGltUSRwcFElWnlTJlYhYitgUSZrIWpTKGwjeihxUSlnJGpRKXQkclEqYCVUUStmJl5TK2smZCttUSt9JmxRLWsoc1EvVSphWTBaK28rcCtxK3Irc1MydC55MnZVM3wwWzBeMGFVNWcyeTJ6MntTNl00TzRSUzdSNWg1aVE3bTZfUjhRN1QkcFtPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI2IjZSRdJG4lWyVfJWMlZSVmJWclaSVtJXgleiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG8haidlI10jayZXJ3crWCtbLG0vezFYMnEzcTZ7OV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUSh9JFNRKWwkbFEqYiVXUSppJWBRLFg5dFEuVylhUS5jKW1RL14qZ1EyXy5eUTNaL1ZRNF45dlE1UzJgUjh7OXVwZU9Tanl9IW4kXSVZJWMlZiVnJWkqbyp0L2cvalIqZCVbJldWT1NUamtufSFTIVchayFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNdI2IjZSNrJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV6JlMmXyZmJnAmfSdSJ3coUilWKV4qaypvKnQrVCtYK1sreCxQLGIsaCxtLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sL3swVDBqMHQxWDJpMnEzUjNmM2gzaTNxM3g1bzV9Nlc2ezdqOF04bzleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YDthWyFjUlUhXSFgJXgmV1EkY2xRJGhtUyRtcCRydiR3cnMhciF1JFokdSZgJnQmdyl4KXkpeiptK1kraCxTLFUvbzBsUSVQd1EmaCFpUSZqIWpTKF8jdihjUylmJGkkalEpaiRsUSl3JHRRKlolUlEqXyVUUyt8JmsmbFEtVihgUS5bKWdRLmIpbVEuZCluUS5nKXJRL1AqW1MvVCpgKmFRMGgrfVExYi1SUTJeLl5RMmIuYVEyZy5pUTNZL1VRNGkxY1E1UjJgUTVVMmRRNnU1UVI3dzZ2eCN4YSF5JFQkVSRZKFcoWShiKHcoeCxfLVktdzFhMXk2aTteO2k7ajtrIVkkZm0haiRoJGkkaiZVJmomayZsKGspZilnK10rait8K30tZC5bMFEwVzBdMGgxdTN7NFE2WjdrOF5RKWAkY1EqUCR8USpTJH1RKl4lVFEuayl3US9PKlpVL1MqXypgKmFRM1QvUFMzWC9UL1VRNWIyc1E1dDNZUzdQNWM1ZlM4TzdRN1NROGY4UFE4dThnI1s7YiF3I2QjdiN5JmcnfShaKGgpXSlfKWEqTypSK3ktWi1dLlIuVC5wLnMuey59MWsxczJRMlQyWDJqM1EzUzRsNHU0fTVrNXA2ejdXOFQ5dzl6OX06VTpYOls6YTpkOmo7bDtuO3Q7dTt2ZDtjOWQ5eDl7Ok86VjpZOl06YjplOmtlO2Q5cjl5OXw6UDpXOlo6XjpjOmY6bFcjfWEkUCh5O15TJHx0JVlRJH11USVPdlIpfSR6JVAjfGEhdyF5I2QjdiN5JFQkVSRZJmcnfShXKFkoWihiKGgodyh4KV0pXylhKk8qUit5LF8tWS1aLV0tdy5SLlQucC5zLnsufTFhMWsxczF5MlEyVDJYMmozUTNTNGw0dTR9NWs1cDZpNno3VzhUOWQ5cjl3OXg5eTl6OXs5fDl9Ok86UDpVOlY6VzpYOlk6WjpbOl06XjphOmI6YzpkOmU6ZjpqOms6bDteO2k7ajtrO2w7bjt0O3U7dlQoTyNzKFBYKU8kUzl0OXU5dlUmWiFiJHYrY1EnVSF7USlxJG9RLnQqVFExei10UjVeMm8mXmNPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2skXSRuJVslXyVgJWMlZSVmJWclaSVtJXgleiZTJlcmXyZmJnAmfSdSJ3coUilWKV4qaypvKnQrVCtYK1sreCxQLGIsaCxtLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sL3swVDBqMHQxWDJpMnEzUjNmM2gzaTNxM3g1bzV9Nlc2ezdqOF04bzleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YSRdI2FaIV8hbyRhJXclfSZ5J1EnVydYJ1knWidbJ10nXidfJ2AnYSdiJ2QnZydrJ3UpcCtSK14rZyxPLF4sZCxnLGksdy14L3YveTBpMHMwdzB4MHkwejB7MHwwfTFPMVAxUTFSMVMxVDFXMV0yTzJbM3MzdjRXNFs0XTRiNGM1YDZTNlY2YjZmNmc3Zzd6OFo4bTh5OV86fFQhWFEhWSZfY09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojXSNiI2UjayRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLG0tdS16LlMuXS58L18vYC9hL2MvZy9qL2wvezBUMGowdDFYMmkycTNSM2YzaDNpM3EzeDVvNX02VzZ7N2o4XThvOV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUSZYIWJSL3wrYFkmUiFiJlYmXitgK2ZTKGsjeihxUytqJmQrbVMtZChsKHNRLWUobVEtbCh0US52KlZVMFcraytvK3BVMF0rcStyK3NTMGIrdDJ4UTF1LWtRMXctbVExeC1uUzJzLnkydlUzezBaMFswXlE0UDBfUTRRMGFTNWMydDJ7UzVmMnkyelU2WjN8NE80UlE2YDRTUzdRNWc1aFE3UzVpUzdrNl02X1M4UDdSN1RROF43bVE4ZzhRUTtoO29SO207c2xoT1NqfSFuJF0lYyVmJWclaSpvKnQvZy9qUSVrIVFTJnghdjljUSlkJGdRKlglUFEqWSVRUSt6JmlTLF0mfTpSUy15KVY6X1EuWSllUS54KldRL24qdlEvcCp3US94K1pRMGArcVEwZit7UzJQLXo6Z1EyWS5aUzJdLl06aFEzci96UTN1MFJRNFUwZ1E1UDJaUTZUM3RRNlgzelE2YTRWUTdlNlJRN2g2WVE4WTdpUThsOFtSOHg4biRXI2BaIV8hbyV3JX0meSdRJ1cnWCdZJ1onWyddJ14nXydgJ2EnYidkJ2cnayd1KXArUiteK2csTyxeLGQsZyx3LXgvdi95MGkwczB3MHgweTB6MHswfDB9MU8xUDFRMVIxUzFUMVcxXTJPMlszczN2NFc0WzRdNGI0YzVgNlM2VjZiNmY2ZzdnN3o4WjhtOHk5Xzp8Vyh2I3smfDFWOHFUKVokYSxpJFcjX1ohXyFvJXclfSZ5J1EnVydYJ1knWidbJ10nXidfJ2AnYSdiJ2QnZydrJ3UpcCtSK14rZyxPLF4sZCxnLHcteC92L3kwaTBzMHcweDB5MHowezB8MH0xTzFQMVExUjFTMVQxVzFdMk8yWzNzM3Y0VzRbNF00YjRjNWA2UzZWNmI2ZjZnN2c3ejhaOG04eTlfOnxRJ2YjYFMpWSRhLGlSLXspWiZeY09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojXSNiI2UjayRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLG0tdS16LlMuXS58L18vYC9hL2MvZy9qL2wvezBUMGowdDFYMmkycTNSM2YzaDNpM3EzeDVvNX02VzZ7N2o4XThvOV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUSVme1ElZ3xRJWkhT1ElaiFQUi9mKnJRJmUhaVEpWyRjUSt3JmhTLlEpYCl3UzBjK3UrdlcyUy19Lk8uUC5rUzRUMGQwZVU0fDJVMlYyV1U2czR7NVk1WlE3djZ0UjhiN3lUK2wmZCttUytqJmQrbVUwVytrK28rcFUwXStxK3Irc1MwYit0MnhTMnMueTJ2VTN7MFowWzBeUTRQMF9RNFEwYVM1YzJ0MntTNWYyeTJ6VTZaM3w0TzRSUTZgNFNTN1E1ZzVoUTdTNWlTN2s2XTZfUzhQN1I3VFE4XjdtUjhnOFFTK2wmZCttVDJ1LnkydlMmciFxL2RRLVUoX1EtYihrUzBWK2oyc1ExZy1WUzFwLWMtbFUzfTBdMGI1ZlE0aDFiUzRzMXYxeFU2XjRQNFE3U1E2azRpUTZyNHZSN242YFEheFhTJnEhcS9kUSlXJFtRKWIkZVEpaCRrUSxRJnJRLVQoX1EtYShrUS1mKG5RLlgpY1EvUSpdUzBVK2oyc1MxZi1VLVZTMW8tYi1sUTFyLWVRMXQtZ1EzVi9SVzN5MFYwXTBiNWZRNGcxYlE0azFnUzRvMXAxeFE0dDF3UTVyM1dXNlszfTRQNFE3U1M2ajRoNGlTNm40cDppUTZwNHNRNn01YVE3WzVzUzdsNl42YFE3cjZrUzdzNm86bVE3dTZyUTd8N09ROFY3XVE4XzduUzhhN3Q6blE4ZDd9UThzOGVROVE4dFE5WDlSUTp1OnBRO1Q6elE7VTp7UTtWO2hSO1s7bSRyV09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZfJmYmcCZ9J1IoUilWKV4qaypvKnQrVCt4LFAsYixoLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sMFQwajB0MmkzUjNmM2gzaTN4NW81fTZXN2o4XThvUyF4biFrIWo6byNdI2smVyd3K1grWyxtL3sxWDJxM3E2ezleOWA5YzllOWY5ZzloOWk5ajlrOWw5bTluOW85cDlzOlE6UjpUOl86YDpnOmg7YVI6dTtgJHJYT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNiI2UkXSRuJVslXyVgJWMlZSVmJWclaSVtJXgleiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG9RJFtiIVkkZW0haiRoJGkkaiZVJmomayZsKGspZilnK10rait8K30tZC5bMFEwVzBdMGgxdTN7NFE2WjdrOF5TJGtuIWtRKWMkZlEqXSVUVy9SKl4qXypgKmFVM1cvUy9UL1VRNWEyc1M1czNYM1lVN081YjVjNWZRN101dFU3fTdQN1E3U1M4ZThPOFBTOHQ4ZjhnUTlSOHUhajpwI10jayZXJ3crWCtbLG0vezFYMnEzcTZ7OV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthUTp6O19SOns7YCRmXU9TVGprfSFTIVchbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYyVlJWYlZyVpJW0leiZTJl8mZiZwJn0nUihSKVYpXiprKm8qdCtUK3gsUCxiLGgtdS16LlMuXS58L18vYC9hL2MvZy9qL2wwVDBqMHQyaTNSM2YzaDNpM3g1bzV9Nlc3ajhdOG9ZIWhSVSFdIWAleHYkd3JzIXIhdSRaJHUmYCZ0JncpeCl5KXoqbStZK2gsUyxVL28wbFEqaiVgIWg6cSNdI2sndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FSOnQmV1MmWyFiJHZSME8rYyRwW09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYyVlJWYlZyVpJW0leCV6JlMmXyZmJnAmfSdSKFIpVileKmsqbyp0K1QreCxQLGIsaC11LXouUy5dLnwvXy9gL2EvYy9nL2ovbDBUMGowdDJpM1IzZjNoM2kzeDVvNX02VzdqOF04byFqJ2UjXSNrJlcndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FSKmklYCRyb09SU1RVamt9IVMhVyFdIWAhbiF2IXohfCNQI1EjUiNTI1QjVSNWI1cjWCNZI1ojYiNlJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZfJmYmcCZ9J1IoUilWKV4qaypvKnQrVCt4LFAsYixoLXUtei5TLl0ufC9fL2AvYS9jL2cvai9sMFQwajB0MmkzUjNmM2gzaTN4NW81fTZXN2o4XThvUSdVIXshazpyI10jayZXJ3crWCtbLG0vezFYMnEzcTZ7OV45YDljOWU5ZjlnOWg5aTlqOWs5bDltOW45bzlwOXM6UTpSOlQ6XzpgOmc6aDthIWgjVlohXyRhJXclfSZ5J1EnXydgJ2EnYidnJ2spcCtSK2csTyxeLGQsdy14MGkwczFUMk8yWzN2NFc0WzZWN2c4WjhtOHk5XyFSOWsnZCd1K14saS92L3kwdzFQMVExUjFTMVcxXTNzNF00YjRjNWA2UzZiNmY2Zzd6OnwhZCNYWiFfJGEldyV9JnknUSdhJ2InZydrKXArUitnLE8sXixkLHcteDBpMHMxVDJPMlszdjRXNFs2VjdnOFo4bTh5OV99OW0nZCd1K14saS92L3kwdzFSMVMxVzFdM3M0XTRiNGM1YDZTNmI2ZjZnN3o6fCFgI11aIV8kYSV3JX0meSdRJ2cnaylwK1IrZyxPLF4sZCx3LXgwaTBzMVQyTzJbM3Y0VzRbNlY3ZzhaOG04eTlfUTFhLVB4O2EnZCd1K14saS92L3kwdzFXMV0zczRdNGI0YzVgNlM2YjZmNmc3ejp8UTtpO3BRO2o7cVI7aztyJl5jT1JTVFVqa30hUyFXIV0hYCFuIXYheiF8I1AjUSNSI1MjVCNVI1YjVyNYI1kjWiNdI2IjZSNrJF0kbiVbJV8lYCVjJWUlZiVnJWklbSV4JXomUyZXJl8mZiZwJn0nUid3KFIpVileKmsqbyp0K1QrWCtbK3gsUCxiLGgsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FTI2xgI21SMVksbCZlX09SU1RVYGprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2sjbSRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLGwsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FTI2deI25UJ24jaSdyVCNoXiNuVCdwI2knciZlYE9SU1RVYGprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI10jYiNlI2sjbSRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmVyZfJmYmcCZ9J1IndyhSKVYpXiprKm8qdCtUK1grWyt4LFAsYixoLGwsbS11LXouUy5dLnwvXy9gL2EvYy9nL2ovbC97MFQwajB0MVgyaTJxM1IzZjNoM2kzcTN4NW81fTZXNns3ajhdOG85XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2FUI2xgI21RI29gUid5I20kcmJPUlNUVWprfSFTIVchXSFgIW4hdiF6IXwjUCNRI1IjUyNUI1UjViNXI1gjWSNaI2IjZSRdJG4lWyVfJWAlYyVlJWYlZyVpJW0leCV6JlMmXyZmJnAmfSdSKFIpVileKmsqbyp0K1QreCxQLGIsaC11LXouUy5dLnwvXy9gL2EvYy9nL2ovbDBUMGowdDJpM1IzZjNoM2kzeDVvNX02VzdqOF04byFrO18jXSNrJlcndytYK1ssbS97MVgycTNxNns5XjlgOWM5ZTlmOWc5aDlpOWo5azlsOW05bjlvOXA5czpROlI6VDpfOmA6ZzpoO2EjUmRPU1VqfSFTIVchbiF8I2skXSVbJV8lYCVjJWUlZiVnJWklbSZTJmYndyleKmsqbyp0K3gsbS11LlMufC9fL2AvYS9jL2cvai9sMVgyaTNSM2YzaDNpNW81fXgje2EheSRUJFUkWShXKFkoYih3KHgsXy1ZLXcxYTF5Nmk7XjtpO2o7ayNbJnwhdyNkI3YjeSZnJ30oWihoKV0pXylhKk8qUit5LVotXS5SLlQucC5zLnsufTFrMXMyUTJUMlgyajNRM1M0bDR1NH01azVwNno3VzhUOXc5ejl9OlU6WDpbOmE6ZDpqO2w7bjt0O3U7dlEpUyRXUSx4KFNkMVY5cjl5OXw6UDpXOlo6XjpjOmY6bGU4cTlkOXg5ezpPOlY6WTpdOmI6ZTpreCN3YSF5JFQkVSRZKFcoWShiKHcoeCxfLVktdzFhMXk2aTteO2k7ajtrUShkI3hTKG4jeihxUSlUJFhRLWcobyNbOnchdyNkI3YjeSZnJ30oWihoKV0pXylhKk8qUit5LVotXS5SLlQucC5zLnsufTFrMXMyUTJUMlgyajNRM1M0bDR1NH01azVwNno3VzhUOXc5ejl9OlU6WDpbOmE6ZDpqO2w7bjt0O3U7dmQ6eDlkOXg5ezpPOlY6WTpdOmI6ZTprZDp5OXI5eTl8OlA6VzpaOl46YzpmOmxROn07YlE7TztjUTtQO2RRO1E7ZVE7UjtmUjtTO2d4I3thIXkkVCRVJFkoVyhZKGIodyh4LF8tWS13MWExeTZpO147aTtqO2sjWyZ8IXcjZCN2I3kmZyd9KFooaCldKV8pYSpPKlIreS1aLV0uUi5ULnAucy57Ln0xazFzMlEyVDJYMmozUTNTNGw0dTR9NWs1cDZ6N1c4VDl3OXo5fTpVOlg6WzphOmQ6ajtsO247dDt1O3ZkMVY5cjl5OXw6UDpXOlo6XjpjOmY6bGU4cTlkOXg5ezpPOlY6WTpdOmI6ZTprbGZPU2p9IW4kXSVjJWYlZyVpKm8qdC9nL2pRKGcjeVEqfSVwUStPJXJSMWotWiVPI3xhIXcheSNkI3YjeSRUJFUkWSZnJ30oVyhZKFooYihoKHcoeCldKV8pYSpPKlIreSxfLVktWi1dLXcuUi5ULnAucy57Ln0xYTFrMXMxeTJRMlQyWDJqM1EzUzRsNHU0fTVrNXA2aTZ6N1c4VDlkOXI5dzl4OXk5ejl7OXw5fTpPOlA6VTpWOlc6WDpZOlo6WzpdOl46YTpiOmM6ZDplOmY6ajprOmw7XjtpO2o7aztsO247dDt1O3ZRKlEkfVEucipTUTJtLnFSNV0yblQocCN6KHFTKHAjeihxVDJ1LnkydlEpYiRlUS1mKG5RLlgpY1EvUSpdUTNWL1JRNXIzV1E2fTVhUTdbNXNRN3w3T1E4VjddUThkN31ROHM4ZVE5UTh0UjlYOVJwKFcjdCdPKVUtWC1vLXAwcTFoMX00ZjR3N3E6djtXO1g7WSFuOlUmeidpKF4oZit2LFssdC1QLV4tfC5QLm8ucTBlMHAxaTFtMlcybDJuM080WTRaNG00cTR5NU81WjVuNm02cTdZOGA7WjtdO3A7cTtyWzpWOHA5TzlWOVk5WjldXTpXMVU0YTZjN283cDh6cihZI3QnTylVLH0tWC1vLXAwcTFoMX00ZjR3N3E6djtXO1g7WSFwOlgmeidpKF4oZit2LFssdC1QLV4tfC5QLm8ucTBlMG4wcDFpMW0yVzJsMm4zTzRZNFo0bTRxNHk1TzVaNW42bTZxN1k4YDtaO107cDtxO3JeOlk4cDlPOVQ5VjlZOVo5XV86WjFVNGE2YzZkN283cDh6cGVPU2p5fSFuJF0lWSVjJWYlZyVpKm8qdC9nL2pRJVZ4UiprJWBwZU9Tanl9IW4kXSVZJWMlZiVnJWkqbyp0L2cvalIlVnhRKlUlT1Iubil9cWVPU2p5fSFuJF0lWSVjJWYlZyVpKm8qdC9nL2pRLnoqWlMzUC9PL1BXNWoyfDJ9M08zVFU3VjVsNW01blU4UjdVN1g3WVE4aDhTUjh2OGlRJV55UiplJVlSM14vWFI3XzV1UyRtcCRyUi5kKW5RJWN6UipvJWRSKnUlalQvaCp0L2pSKnkla1EqeCVrUi9xKnlRak9RIW5TVCRgaiFuUShQI3NSLHUoUFEhWVFSJXUhWVEhXlJVJXshXiV8K1VRJXwhX1IrVSV9USthJlhSL30rYVEsYCdPUjByLGBRLGMnUVMwdSxjMHZSMHYsZFErbSZkUjBYK21TIWVSJHVVJmEhZSZiK1ZRJmIhZlIrViZPUStkJltSMFArZFEmdSFzUSxSJnNVLFYmdSxSMG1SMG0sV1EnciNpUixuJ3JRI21gUid4I21RI2NaVSdoI2MrUTlxUStROV9SOXEndVEtUyhfVzFkLVMxZTRqNmxVMWUtVC1VLVZTNGoxZjFnUjZsNGskayhVI3QmeidPJ2koXihmKVApUSlVK3YsWSxaLFssdCx9LU8tUC1YLV4tby1wLXwuUC5vLnEwZTBuMG8wcDBxMVUxaDFpMW0xfTJXMmwybjNPNFk0WjRfNGA0YTRmNG00cTR3NHk1TzVaNW42YzZkNmU2bTZxN1k3bzdwN3E4YDhwOHo4fDh9OU85VDlVOVY5WTlaOV06djtXO1g7WTtaO107cDtxO3JRLVsoZlUxbC1bMW40blExbi1eUjRuMW1RKHEjelItaShxUSh6JE9SLXIoelEyUi18UjR6MlJRKXskeFIubSl7UTJwLnRTNV8ycDZ8UjZ8NWBRKlclUFIudypXUTJ2LnlSNWQydlEvVypiUzNbL1c1dlI1djNeUS5fKWpXMmEuXzJjNVQ2d1EyYy5iUTVUMmJSNnc1VVEpbyRtUi5lKW9RL2oqdFIzbC9qV2lPU2ohblElaH1RKVgkXVEqbiVjUSpwJWZRKnElZ1EqcyVpUS9lKm9TL2gqdC9qUjNrL2dRJF9nUSVsIVJRJW8hVFElcSFVUSVzIVZRKXYkc1EpfCR5USpkJV5RKnslblEtaChwUy9aKmUqaFEvcip6US9zKn1RL3QrT1MwUytqMnNRMmYuaFEyay5vUTNVL1FRM2AvXVEzai9mWTN3MFUwVjBdMGI1ZlE1WDJoUTVbMmxRNXEzVlE1dzNfWzZVM3YzeTN9NFA0UTdTUTZ4NVZRN1o1clE3YDV4VzdmNlY2WzZeNmBRN3g2eVE3ezZ9UThVN1tVOFg3ZzdsN25ROGM3fFE4ajhWUzhrOFo4X1E4cjhkUTh3OG1ROVA4c1E5Uzh5UTlXOVFSOVs5WFEkZ21RJmkhalUpZSRoJGkkalErWiZVVSt7JmomayZsUS1gKGtTLlopZilnUS96K11RMFIralMwZyt8K31RMXEtZFEyWi5bUTN0MFFTM3owVzBdUTRWMGhRNHIxdVM2WTN7NFFRN2k2WlE4WzdrUjhuOF5TI3VhO15SKHskUFUkT2EkUDteUi1xKHlRI3RhUyZ6IXcpYVEnTyF5USdpI2RRKF4jdlEoZiN5USlQJFRRKVEkVVEpVSRZUSt2JmdRLFk5d1EsWjl6USxbOX1RLHQnfVEsfShXUS1PKFlRLVAoWlEtWChiUS1eKGhRLW8od1EtcCh4ZC18KV0uUi57MlQzUTR9NWs2ejdXOFRRLlApX1EubypPUS5xKlJRMGUreVEwbjpVUTBvOlhRMHA6W1EwcSxfUTFVOXJRMWgtWVExaS1aUTFtLV1RMX0td1EyVy5UUTJsLnBRMm4uc1EzTy59UTRZOmFRNFo6ZFE0Xzl5UTRgOXxRNGE6UFE0ZjFhUTRtMWtRNHExc1E0dzF5UTR5MlFRNU8yWFE1WjJqUTVuM1NRNmM6XlE2ZDpXUTZlOlpRNm00bFE2cTR1UTdZNXBRN286Y1E3cDpmUTdxNmlROGA6alE4cDlkUTh6OmxROHw5eFE4fTl7UTlPOk9ROVQ6VlE5VTpZUTlWOl1ROVk6YlE5WjplUTldOmtROnY7XlE7VztpUTtYO2pRO1k7a1E7WjtsUTtdO25RO3A7dFE7cTt1UjtyO3ZsZ09Tan0hbiRdJWMlZiVnJWkqbyp0L2cvalMhcFUlZVElbiFTUSV0IVdRJ1YhfFEndiNrUypoJVslX1EqbCVgUSp6JW1RK1cmU1ErdSZmUSxyJ3dRLk8pXlEvYiprUTBkK3hRMVssbVExey11UTJWLlNRMn0ufFEzYi9fUTNjL2BRM2UvYVEzZy9jUTNuL2xRNGQxWFE1WTJpUTVtM1JRNXwzZlE2TzNoUTZQM2lRN1g1b1I3YjV9IXZaT1NVan0hUyFuIXwkXSVbJV8lYCVjJWUlZiVnJWklbSZTJmYpXiprKm8qdCt4LXUuUy58L18vYC9hL2MvZy9qL2wyaTNSM2YzaDNpNW81fVEhX1JRIW9UUSRha1MldyFdJXpRJX0hYFEmeSF2USdRIXpRJ1cjUFEnWCNRUSdZI1JRJ1ojU1EnWyNUUSddI1VRJ14jVlEnXyNXUSdgI1hRJ2EjWVEnYiNaUSdkI11RJ2cjYlEnayNlVyd1I2sndyxtMVhRKXAkblMrUiV4K1RTK14mVy97UStnJl9RLE8mcFEsXiZ9USxkJ1JRLGc5XlEsaTlgUSx3KFJRLXgpVlEvditYUS95K1tRMGksUFEwcyxiUTB3OWNRMHg5ZVEweTlmUTB6OWdRMHs5aFEwfDlpUTB9OWpRMU85a1ExUDlsUTFROW1RMVI5blExUzlvUTFULGhRMVc5c1ExXTlwUTJPLXpRMlsuXVEzczpRUTN2MFRRNFcwalE0WzB0UTRdOlJRNGI6VFE0YzpfUTVgMnFRNlMzcVE2VjN4UTZiOmBRNmY6Z1E2ZzpoUTdnNldRN3o2e1E4WjdqUThtOF1ROHk4b1E5XyFXUjp8O2FSIWFSUiZZIWJTJlUhYitgUytdJlYmXlIwUStmUidQIXlSJ1MhelQhdFUkWlMhc1UkWlUkeHJzKm1TJnMhciF1USxUJnRRLFcmd1EubCl6UzBrLFMsVVI0WDBsYCFkUiFdIWAkdSV4JmApeCtoaCFxVXJzIXIhdSRaJnQmdyl6LFMsVTBsUS9kKm1RL3crWVEzcC9vVDpzJlcpeVQhZ1IkdVMhZlIkdVMleSFdJmBTJk8hYCl4UytTJXgraFQrXyZXKXlUJl0hYiR2USNpXlIneyNuVCdxI2knclIxWixsVChhI3YoY1IoaSN5US19KV1RMlUuUlEyfC57UTR7MlRRNWwzUVE2dDR9UTdVNWtRN3k2elE4UzdXUjhpOFRsaE9Tan0hbiRdJWMlZiVnJWkqbyp0L2cvalElXXlSKmQlWVYkeXJzKm1SLnUqVFIqYyVXUSRxcFIpdSRyUilrJGxUJWF6JWRUJWJ6JWRUL2kqdC9qXCIsbm9kZU5hbWVzOlwiXFx1MjZBMCBleHRlbmRzIEFyaXRoT3AgQXJpdGhPcCBJbnRlcnBvbGF0aW9uU3RhcnQgTGluZUNvbW1lbnQgQmxvY2tDb21tZW50IFNjcmlwdCBFeHBvcnREZWNsYXJhdGlvbiBleHBvcnQgU3RhciBhcyBWYXJpYWJsZU5hbWUgU3RyaW5nIGZyb20gOyBkZWZhdWx0IEZ1bmN0aW9uRGVjbGFyYXRpb24gYXN5bmMgZnVuY3Rpb24gVmFyaWFibGVEZWZpbml0aW9uIFR5cGVQYXJhbUxpc3QgVHlwZURlZmluaXRpb24gVGhpc1R5cGUgdGhpcyBMaXRlcmFsVHlwZSBBcml0aE9wIE51bWJlciBCb29sZWFuTGl0ZXJhbCBUZW1wbGF0ZVR5cGUgSW50ZXJwb2xhdGlvbkVuZCBJbnRlcnBvbGF0aW9uIFZvaWRUeXBlIHZvaWQgVHlwZW9mVHlwZSB0eXBlb2YgTWVtYmVyRXhwcmVzc2lvbiAuID8uIFByb3BlcnR5TmFtZSBbIFRlbXBsYXRlU3RyaW5nIEludGVycG9sYXRpb24gbnVsbCBzdXBlciBSZWdFeHAgXSBBcnJheUV4cHJlc3Npb24gU3ByZWFkICwgfSB7IE9iamVjdEV4cHJlc3Npb24gUHJvcGVydHkgYXN5bmMgZ2V0IHNldCBQcm9wZXJ0eURlZmluaXRpb24gQmxvY2sgOiBOZXdFeHByZXNzaW9uIG5ldyBUeXBlQXJnTGlzdCBDb21wYXJlT3AgPCApICggQXJnTGlzdCBVbmFyeUV4cHJlc3Npb24gYXdhaXQgeWllbGQgZGVsZXRlIExvZ2ljT3AgQml0T3AgUGFyZW50aGVzaXplZEV4cHJlc3Npb24gQ2xhc3NFeHByZXNzaW9uIGNsYXNzIGV4dGVuZHMgQ2xhc3NCb2R5IE1ldGhvZERlY2xhcmF0aW9uIFByaXZhY3kgc3RhdGljIGFic3RyYWN0IG92ZXJyaWRlIFByaXZhdGVQcm9wZXJ0eURlZmluaXRpb24gUHJvcGVydHlEZWNsYXJhdGlvbiByZWFkb25seSBPcHRpb25hbCBUeXBlQW5ub3RhdGlvbiBFcXVhbHMgU3RhdGljQmxvY2sgRnVuY3Rpb25FeHByZXNzaW9uIEFycm93RnVuY3Rpb24gUGFyYW1MaXN0IFBhcmFtTGlzdCBBcnJheVBhdHRlcm4gT2JqZWN0UGF0dGVybiBQYXR0ZXJuUHJvcGVydHkgUHJpdmFjeSByZWFkb25seSBBcnJvdyBNZW1iZXJFeHByZXNzaW9uIFByaXZhdGVQcm9wZXJ0eU5hbWUgQmluYXJ5RXhwcmVzc2lvbiBBcml0aE9wIEFyaXRoT3AgQXJpdGhPcCBBcml0aE9wIEJpdE9wIENvbXBhcmVPcCBpbnN0YW5jZW9mIGluIGNvbnN0IENvbXBhcmVPcCBCaXRPcCBCaXRPcCBCaXRPcCBMb2dpY09wIExvZ2ljT3AgQ29uZGl0aW9uYWxFeHByZXNzaW9uIExvZ2ljT3AgTG9naWNPcCBBc3NpZ25tZW50RXhwcmVzc2lvbiBVcGRhdGVPcCBQb3N0Zml4RXhwcmVzc2lvbiBDYWxsRXhwcmVzc2lvbiBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24gRHluYW1pY0ltcG9ydCBpbXBvcnQgSW1wb3J0TWV0YSBKU1hFbGVtZW50IEpTWFNlbGZDbG9zZUVuZFRhZyBKU1hTdGFydFRhZyBKU1hTZWxmQ2xvc2luZ1RhZyBKU1hJZGVudGlmaWVyIEpTWE5hbWVzcGFjZWROYW1lIEpTWE1lbWJlckV4cHJlc3Npb24gSlNYU3ByZWFkQXR0cmlidXRlIEpTWEF0dHJpYnV0ZSBKU1hBdHRyaWJ1dGVWYWx1ZSBKU1hFc2NhcGUgSlNYRW5kVGFnIEpTWE9wZW5UYWcgSlNYRnJhZ21lbnRUYWcgSlNYVGV4dCBKU1hFc2NhcGUgSlNYU3RhcnRDbG9zZVRhZyBKU1hDbG9zZVRhZyBQcmVmaXhDYXN0IEFycm93RnVuY3Rpb24gVHlwZVBhcmFtTGlzdCBTZXF1ZW5jZUV4cHJlc3Npb24gS2V5b2ZUeXBlIGtleW9mIFVuaXF1ZVR5cGUgdW5pcXVlIEltcG9ydFR5cGUgSW5mZXJyZWRUeXBlIGluZmVyIFR5cGVOYW1lIFBhcmVudGhlc2l6ZWRUeXBlIEZ1bmN0aW9uU2lnbmF0dXJlIFBhcmFtTGlzdCBOZXdTaWduYXR1cmUgSW5kZXhlZFR5cGUgVHVwbGVUeXBlIExhYmVsIEFycmF5VHlwZSBSZWFkb25seVR5cGUgT2JqZWN0VHlwZSBNZXRob2RUeXBlIFByb3BlcnR5VHlwZSBJbmRleFNpZ25hdHVyZSBDYWxsU2lnbmF0dXJlIFR5cGVQcmVkaWNhdGUgaXMgTmV3U2lnbmF0dXJlIG5ldyBVbmlvblR5cGUgTG9naWNPcCBJbnRlcnNlY3Rpb25UeXBlIExvZ2ljT3AgQ29uZGl0aW9uYWxUeXBlIFBhcmFtZXRlcml6ZWRUeXBlIENsYXNzRGVjbGFyYXRpb24gYWJzdHJhY3QgaW1wbGVtZW50cyB0eXBlIFZhcmlhYmxlRGVjbGFyYXRpb24gbGV0IHZhciBUeXBlQWxpYXNEZWNsYXJhdGlvbiBJbnRlcmZhY2VEZWNsYXJhdGlvbiBpbnRlcmZhY2UgRW51bURlY2xhcmF0aW9uIGVudW0gRW51bUJvZHkgTmFtZXNwYWNlRGVjbGFyYXRpb24gbmFtZXNwYWNlIG1vZHVsZSBBbWJpZW50RGVjbGFyYXRpb24gZGVjbGFyZSBHbG9iYWxEZWNsYXJhdGlvbiBnbG9iYWwgQ2xhc3NEZWNsYXJhdGlvbiBDbGFzc0JvZHkgTWV0aG9kRGVjbGFyYXRpb24gQW1iaWVudEZ1bmN0aW9uRGVjbGFyYXRpb24gRXhwb3J0R3JvdXAgVmFyaWFibGVOYW1lIFZhcmlhYmxlTmFtZSBJbXBvcnREZWNsYXJhdGlvbiBJbXBvcnRHcm91cCBGb3JTdGF0ZW1lbnQgZm9yIEZvclNwZWMgRm9ySW5TcGVjIEZvck9mU3BlYyBvZiBXaGlsZVN0YXRlbWVudCB3aGlsZSBXaXRoU3RhdGVtZW50IHdpdGggRG9TdGF0ZW1lbnQgZG8gSWZTdGF0ZW1lbnQgaWYgZWxzZSBTd2l0Y2hTdGF0ZW1lbnQgc3dpdGNoIFN3aXRjaEJvZHkgQ2FzZUxhYmVsIGNhc2UgRGVmYXVsdExhYmVsIFRyeVN0YXRlbWVudCB0cnkgQ2F0Y2hDbGF1c2UgY2F0Y2ggRmluYWxseUNsYXVzZSBmaW5hbGx5IFJldHVyblN0YXRlbWVudCByZXR1cm4gVGhyb3dTdGF0ZW1lbnQgdGhyb3cgQnJlYWtTdGF0ZW1lbnQgYnJlYWsgQ29udGludWVTdGF0ZW1lbnQgY29udGludWUgRGVidWdnZXJTdGF0ZW1lbnQgZGVidWdnZXIgTGFiZWxlZFN0YXRlbWVudCBFeHByZXNzaW9uU3RhdGVtZW50XCIsbWF4VGVybTozMzIsY29udGV4dDpoLG5vZGVQcm9wczpbW1wiY2xvc2VkQnlcIiw0LFwiSW50ZXJwb2xhdGlvbkVuZFwiLDQwLFwiXVwiLDUxLFwifVwiLDY2LFwiKVwiLDEzMixcIkpTWFNlbGZDbG9zZUVuZFRhZyBKU1hFbmRUYWdcIiwxNDYsXCJKU1hFbmRUYWdcIl0sW1wiZ3JvdXBcIiwtMjYsOCwxNSwxNyw1OCwxODQsMTg4LDE5MSwxOTIsMTk0LDE5NywyMDAsMjExLDIxMywyMTksMjIxLDIyMywyMjUsMjI4LDIzNCwyNDAsMjQyLDI0NCwyNDYsMjQ4LDI1MCwyNTEsXCJTdGF0ZW1lbnRcIiwtMzAsMTIsMTMsMjQsMjcsMjgsNDEsNDMsNDQsNDUsNDcsNTIsNjAsNjgsNzQsNzUsOTEsOTIsMTAxLDEwMywxMTksMTIyLDEyNCwxMjUsMTI2LDEyNywxMjksMTMwLDE0OCwxNDksMTUxLFwiRXhwcmVzc2lvblwiLC0yMiwyMywyNSwyOSwzMiwzNCwxNTIsMTU0LDE1NiwxNTcsMTU5LDE2MCwxNjEsMTYzLDE2NCwxNjUsMTY3LDE2OCwxNjksMTc4LDE4MCwxODIsMTgzLFwiVHlwZVwiLC0zLDc5LDg1LDkwLFwiQ2xhc3NJdGVtXCJdLFtcIm9wZW5lZEJ5XCIsMzAsXCJJbnRlcnBvbGF0aW9uU3RhcnRcIiw0NixcIltcIiw1MCxcIntcIiw2NSxcIihcIiwxMzEsXCJKU1hTdGFydFRhZ1wiLDE0MSxcIkpTWFN0YXJ0VGFnIEpTWFN0YXJ0Q2xvc2VUYWdcIl1dLHByb3BTb3VyY2VzOlt2XSxza2lwcGVkTm9kZXM6WzAsNSw2XSxyZXBlYXROb2RlQ291bnQ6MjgsdG9rZW5EYXRhOlwiIUN9flIhYE9YJVRYWSVjWVonUlpbJWNbXSVUXV4nUl5wJVRwcSVjcXInY3JzKGtzdDBodHUyYHV2NHB2dzVld3g2Y3h5PHl5ej1aens9a3t8Pmt8fT9PfSFPPmshTyFQP2AhUCFRQ2whUSFSITBbIVIhWyExcSFbIV0hN3MhXSFeIThWIV4hXyE4ZyFfIWAhOWQhYCFhITpbIWEhYiE8UiFiIWMlVCFjIX0yYCF9I08hPWQjTyNQJVQjUCNRIT10I1EjUiE+VSNSI1MyYCNTI1QhPmkjVCNvMmAjbyNwIT55I3AjcSE/TyNxI3IhP2YjciNzIT94I3MkZiVUJGYkZyVjJGcjQlkyYCNCWSNCWiFAWSNCWiRJUzJgJElTJElfIUBZJElfJEl8MmAkSXwkSX0hQnEkSX0kSk8hQnEkSk8kSlQyYCRKVCRKVSFAWSRKVSRLVjJgJEtWJEtXIUBZJEtXJkZVMmAmRlUmRlYhQFkmRlY/SFQyYD9IVD9IVSFAWT9IVX4yYFclWVIkVVdPIV4lVCFfI28lVCNwfiVUN1olamckVVcnWTdST1glVFhZJWNZWiVUWlslY1twJVRwcSVjcSFeJVQhXyNvJVQjcCRmJVQkZiRnJWMkZyNCWSVUI0JZI0JaJWMjQlokSVMlVCRJUyRJXyVjJElfJEpUJVQkSlQkSlUlYyRKVSRLViVUJEtWJEtXJWMkS1cmRlUlVCZGVSZGViVjJkZWP0hUJVQ/SFQ/SFUlYz9IVX4lVDdaJ1lSJFVXJ1o3Uk8hXiVUIV8jbyVUI3B+JVQkVCdqUyRVVyFqI3tPIV4lVCFfIWAndiFgI28lVCNwfiVUJE8nfVMjZSN2JFVXTyFeJVQhXyFgKFohYCNvJVQjcH4lVCRPKGJSI2UjdiRVV08hXiVUIV8jbyVUI3B+JVQpWChyWiRVV10jZU9ZKGtZWillWnIoa3JzKnJzIV4oayFeIV8rVSFfI08oayNPI1AtYiNQI28oayNvI3ArVSNwfihrJnIpalYkVVdPcillcnMqUHMhXillIV4hXyphIV8jbyllI28jcCphI3B+KWUmcipXUiRQJmokVVdPIV4lVCFfI28lVCNwfiVUJmoqZFJPciphcnMqbXN+KmEmaipyTyRQJmopWCp7UiRQJmokVVddI2VPIV4lVCFfI28lVCNwfiVUKVArWlZdI2VPWStVWVoqYVpyK1VycytwcyNPK1UjTyNQK3cjUH4rVSlQK3dPJFAmal0jZSlQK3pST3IrVXJzLFRzfitVKVAsW1UkUCZqXSNlT1ksblpyLG5ycy1WcyNPLG4jTyNQLVsjUH4sbiNlLHNVXSNlT1ksblpyLG5ycy1WcyNPLG4jTyNQLVsjUH4sbiNlLVtPXSNlI2UtX1BPfixuKVgtZ1YkVVdPcihrcnMtfHMhXihrIV4hXytVIV8jbyhrI28jcCtVI3B+KGspWC5WWiRQJmokVVddI2VPWS54WVolVFpyLnhycy9ycyFeLnghXiFfLG4hXyNPLngjTyNQMFMjUCNvLngjbyNwLG4jcH4ueCNtL1BaJFVXXSNlT1kueFlaJVRaci54cnMvcnMhXi54IV4hXyxuIV8jTy54I08jUDBTI1Ajby54I28jcCxuI3B+LngjbS95UiRVV10jZU8hXiVUIV8jbyVUI3B+JVQjbTBYVCRVV08hXi54IV4hXyxuIV8jby54I28jcCxuI3B+LngzXTBtWiRVV090JVR0dTFgdSFeJVQhXyFjJVQhYyF9MWAhfSNSJVQjUiNTMWAjUyNUJVQjVCNvMWAjcCRnJVQkZ34xYDNdMWddJFVXJ28zVE90JVR0dTFgdSFRJVQhUSFbMWAhWyFeJVQhXyFjJVQhYyF9MWAhfSNSJVQjUiNTMWAjUyNUJVQjVCNvMWAjcCRnJVQkZ34xYDdaMmtfJFVXI3pTJ10keSdnM1NPdCVUdHUyYHV9JVR9IU8zaiFPIVElVCFRIVsyYCFbIV4lVCFfIWMlVCFjIX0yYCF9I1IlVCNSI1MyYCNTI1QlVCNUI28yYCNwJGclVCRnfjJgWzNxXyRVVyN6U090JVR0dTNqdX0lVH0hTzNqIU8hUSVUIVEhWzNqIVshXiVUIV8hYyVUIWMhfTNqIX0jUiVUI1IjUzNqI1MjVCVUI1QjbzNqI3AkZyVUJGd+M2okTzR3UyNeI3YkVVdPIV4lVCFfIWA1VCFgI28lVCNwfiVUJE81W1IkVVcjbyN2TyFeJVQhXyNvJVQjcH4lVDViNWxVJ3g1WSRVV092JVR2dzZPdyFeJVQhXyFgNVQhYCNvJVQjcH4lVCRPNlZTJFVXI2kjdk8hXiVUIV8hYDVUIWAjbyVUI3B+JVQpWDZqWiRVV10jZU9ZNmNZWjddWnc2Y3d4KnJ4IV42YyFeIV84VCFfI082YyNPI1A6VCNQI282YyNvI3A4VCNwfjZjJnI3YlYkVVdPdzddd3gqUHghXjddIV4hXzd3IV8jbzddI28jcDd3I3B+N10majd6Uk93N3d3eCpteH43dylQOFlWXSNlT1k4VFlaN3dadzhUd3grcHgjTzhUI08jUDhvI1B+OFQpUDhyUk93OFR3eDh7eH44VClQOVNVJFAmal0jZU9ZOWZadzlmd3gtVngjTzlmI08jUDl9I1B+OWYjZTlrVV0jZU9ZOWZadzlmd3gtVngjTzlmI08jUDl9I1B+OWYjZTpRUE9+OWYpWDpZViRVV093NmN3eDpveCFeNmMhXiFfOFQhXyNvNmMjbyNwOFQjcH42YylYOnhaJFAmaiRVV10jZU9ZO2tZWiVUWnc7a3d4L3J4IV47ayFeIV85ZiFfI087ayNPI1A8ZSNQI287ayNvI3A5ZiNwfjtrI207clokVVddI2VPWTtrWVolVFp3O2t3eC9yeCFeO2shXiFfOWYhXyNPO2sjTyNQPGUjUCNvO2sjbyNwOWYjcH47ayNtPGpUJFVXTyFeO2shXiFfOWYhXyNvO2sjbyNwOWYjcH47ayZpPVFSIWQmYSRVV08hXiVUIV8jbyVUI3B+JVRrPWJSIWNjJFVXTyFeJVQhXyNvJVQjcH4lVDdWPXRVJ140ViNfI3YkVVdPeiVUens+V3shXiVUIV8hYDVUIWAjbyVUI3B+JVQkTz5fUyNbI3YkVVdPIV4lVCFfIWA1VCFgI28lVCNwfiVUJXc+clNqJW8kVVdPIV4lVCFfIWA1VCFgI28lVCNwfiVUJmk/VlIhUiZhJFVXTyFeJVQhXyNvJVQjcH4lVDdaP2dWdTVeJFVXTyFPJVQhTyFQP3whUCFRJVQhUSFbQHIhWyFeJVQhXyNvJVQjcH4lVCF7QFJUJFVXTyFPJVQhTyFQQGIhUCFeJVQhXyNvJVQjcH4lVCF7QGlSIVEhcyRVV08hXiVUIV8jbyVUI3B+JVQhe0B5WiRVV2shc08hUSVUIVEhW0ByIVshXiVUIV8hZyVUIWchaEFsIWgjUiVUI1IjU0ByI1MjWCVUI1gjWUFsI1kjbyVUI3B+JVQhe0FxWiRVV097JVR7fEJkfH0lVH0hT0JkIU8hUSVUIVEhW0NPIVshXiVUIV8jUiVUI1IjU0NPI1MjbyVUI3B+JVQhe0JpViRVV08hUSVUIVEhW0NPIVshXiVUIV8jUiVUI1IjU0NPI1MjbyVUI3B+JVQhe0NWViRVV2shc08hUSVUIVEhW0NPIVshXiVUIV8jUiVUI1IjU0NPI1MjbyVUI3B+JVQ3WkNzYCRVVyNdI3ZPWUR1WVolVFp6RHV6e0pseyFQRHUhUCFRIS1lIVEhXkR1IV4hX0Z4IV8hYCEuXiFgIWEhL10hYSF9RHUhfSNPSHEjTyNQSlEjUCNvRHUjbyNwRngjcH5EdVhEfFskVVd9UE9ZRHVZWiVUWiFQRHUhUCFRRXIhUSFeRHUhXiFfRnghXyF9RHUhfSNPSHEjTyNQSlEjUCNvRHUjbyNwRngjcH5EdVhFeV8kVVd9UE8hXiVUIV8jWiVUI1ojW0VyI1sjXSVUI10jXkVyI14jYSVUI2EjYkVyI2IjZyVUI2cjaEVyI2gjaSVUI2kjakVyI2ojbSVUI20jbkVyI24jbyVUI3B+JVRQRn1WfVBPWUZ4WiFQRnghUCFRR2QhUSF9RnghfSNPR3sjTyNQSGgjUH5GeFBHaVV9UCNaI1tHZCNdI15HZCNhI2JHZCNnI2hHZCNpI2pHZCNtI25HZFBIT1RPWUd7WiNPR3sjTyNQSF8jUCNRRngjUX5He1BIYlFPWUd7Wn5He1BIa1FPWUZ4Wn5GeFhIdlkkVVdPWUhxWVolVFohXkhxIV4hX0d7IV8jT0hxI08jUElmI1AjUUR1I1Ejb0hxI28jcEd7I3B+SHFYSWtWJFVXT1lIcVlaJVRaIV5IcSFeIV9HeyFfI29IcSNvI3BHeyNwfkhxWEpWViRVV09ZRHVZWiVUWiFeRHUhXiFfRnghXyNvRHUjbyNwRngjcH5EdTdaSnNeJFVXfVBPWUpsWVpLb1p6Smx6e05ReyFQSmwhUCFRISxSIVEhXkpsIV4hXyEhXSFfIX1KbCF9I08hJ3wjTyNQISthI1Ajb0psI28jcCEhXSNwfkpsN1pLdFYkVVdPektventMWnshXktvIV4hX01dIV8jb0tvI28jcE1dI3B+S283WkxgWCRVV096S296e0xaeyFQS28hUCFRTHshUSFeS28hXiFfTV0hXyNvS28jbyNwTV0jcH5LbzdaTVNSJFVXVTdSTyFeJVQhXyNvJVQjcH4lVDdSTWBST3pNXXp7TWl7fk1dN1JNbFRPek1dentNaXshUE1dIVAhUU17IVF+TV03Uk5RT1U3UjdaTlheJFVXfVBPWUpsWVpLb1p6Smx6e05ReyFQSmwhUCFRISBUIVEhXkpsIV4hXyEhXSFfIX1KbCF9I08hJ3wjTyNQISthI1Ajb0psI28jcCEhXSNwfkpsN1ohIF5fJFVXVTdSfVBPIV4lVCFfI1olVCNaI1tFciNbI10lVCNdI15FciNeI2ElVCNhI2JFciNiI2clVCNnI2hFciNoI2klVCNpI2pFciNqI20lVCNtI25FciNuI28lVCNwfiVUN1IhIWJZfVBPWSEhXVlaTV1aeiEhXXp7ISNReyFQISFdIVAhUSEmeCFRIX0hIV0hfSNPISRgI08jUCEmZiNQfiEhXTdSISNWWX1QT1khIV1ZWk1dWnohIV16eyEjUXshUCEhXSFQIVEhI3UhUSF9ISFdIX0jTyEkYCNPI1AhJmYjUH4hIV03UiEjfFVVN1J9UCNaI1tHZCNdI15HZCNhI2JHZCNnI2hHZCNpI2pHZCNtI25HZDdSISRjV09ZISRgWVpNXVp6ISRgenshJHt7I08hJGAjTyNQISZTI1AjUSEhXSNRfiEkYDdSISVPWU9ZISRgWVpNXVp6ISRgenshJHt7IVAhJGAhUCFRISVuIVEjTyEkYCNPI1AhJlMjUCNRISFdI1F+ISRgN1IhJXNUVTdST1lHe1ojT0d7I08jUEhfI1AjUUZ4I1F+R3s3UiEmVlRPWSEkYFlaTV1aeiEkYHp7ISR7e34hJGA3UiEmaVRPWSEhXVlaTV1aeiEhXXp7ISNRe34hIV03UiEmfV99UE96TV16e01peyNaTV0jWiNbISZ4I1sjXU1dI10jXiEmeCNeI2FNXSNhI2IhJngjYiNnTV0jZyNoISZ4I2gjaU1dI2kjaiEmeCNqI21NXSNtI24hJngjbn5NXTdaIShSWyRVV09ZISd8WVpLb1p6ISd8enshKHd7IV4hJ3whXiFfISRgIV8jTyEnfCNPI1AhKm8jUCNRSmwjUSNvISd8I28jcCEkYCNwfiEnfDdaISh8XiRVV09ZISd8WVpLb1p6ISd8enshKHd7IVAhJ3whUCFRISl4IVEhXiEnfCFeIV8hJGAhXyNPISd8I08jUCEqbyNQI1FKbCNRI28hJ3wjbyNwISRgI3B+ISd8N1ohKlBZJFVXVTdST1lIcVlaJVRaIV5IcSFeIV9HeyFfI09IcSNPI1BJZiNQI1FEdSNRI29IcSNvI3BHeyNwfkhxN1ohKnRYJFVXT1khJ3xZWktvWnohJ3x6eyEod3shXiEnfCFeIV8hJGAhXyNvISd8I28jcCEkYCNwfiEnfDdaIStmWCRVV09ZSmxZWktvWnpKbHp7TlF7IV5KbCFeIV8hIV0hXyNvSmwjbyNwISFdI3B+Smw3WiEsWWMkVVd9UE96S296e0xaeyFeS28hXiFfTV0hXyNaS28jWiNbISxSI1sjXUtvI10jXiEsUiNeI2FLbyNhI2IhLFIjYiNnS28jZyNoISxSI2gjaUtvI2kjaiEsUiNqI21LbyNtI24hLFIjbiNvS28jbyNwTV0jcH5LbzdaIS1sViRVV1Q3Uk9ZIS1lWVolVFohXiEtZSFeIV8hLlIhXyNvIS1lI28jcCEuUiNwfiEtZTdSIS5XUVQ3Uk9ZIS5SWn4hLlIkUCEuZ1skVVcjbyN2fVBPWUR1WVolVFohUER1IVAhUUVyIVEhXkR1IV4hX0Z4IV8hfUR1IX0jT0hxI08jUEpRI1Ajb0R1I28jcEZ4I3B+RHVdIS9mWyN3UyRVV31QT1lEdVlaJVRaIVBEdSFQIVFFciFRIV5EdSFeIV9GeCFfIX1EdSF9I09IcSNPI1BKUSNQI29EdSNvI3BGeCNwfkR1IXshMGNkJFVXayFzTyFPJVQhTyFQQHIhUCFRJVQhUSFbITFxIVshXiVUIV8hZyVUIWchaEFsIWgjUiVUI1IjUyExcSNTI1UlVCNVI1YhM1gjViNYJVQjWCNZQWwjWSNiJVQjYiNjITJ3I2MjZCE0bSNkI2wlVCNsI20hNXsjbSNvJVQjcH4lVCF7ITF4XyRVV2shc08hTyVUIU8hUEByIVAhUSVUIVEhWyExcSFbIV4lVCFfIWclVCFnIWhBbCFoI1IlVCNSI1MhMXEjUyNYJVQjWCNZQWwjWSNiJVQjYiNjITJ3I2MjbyVUI3B+JVQheyEzT1IkVVdrIXNPIV4lVCFfI28lVCNwfiVUIXshM15XJFVXTyFRJVQhUSFSITN2IVIhUyEzdiFTIV4lVCFfI1IlVCNSI1MhM3YjUyNvJVQjcH4lVCF7ITN9WSRVV2shc08hUSVUIVEhUiEzdiFSIVMhM3YhUyFeJVQhXyNSJVQjUiNTITN2I1MjYiVUI2IjYyEydyNjI28lVCNwfiVUIXshNHJWJFVXTyFRJVQhUSFZITVYIVkhXiVUIV8jUiVUI1IjUyE1WCNTI28lVCNwfiVUIXshNWBYJFVXayFzTyFRJVQhUSFZITVYIVkhXiVUIV8jUiVUI1IjUyE1WCNTI2IlVCNiI2MhMncjYyNvJVQjcH4lVCF7ITZRWiRVV08hUSVUIVEhWyE2cyFbIV4lVCFfIWMlVCFjIWkhNnMhaSNSJVQjUiNTITZzI1MjVCVUI1QjWiE2cyNaI28lVCNwfiVUIXshNnpdJFVXayFzTyFRJVQhUSFbITZzIVshXiVUIV8hYyVUIWMhaSE2cyFpI1IlVCNSI1MhNnMjUyNUJVQjVCNaITZzI1ojYiVUI2IjYyEydyNjI28lVCNwfiVUJHUhN3xSIV1WJFVXI20kZk8hXiVUIV8jbyVUI3B+JVQhcSE4XlJfIWkkVVdPIV4lVCFfI28lVCNwfiVUNXchOHJSJ2JkIWEvbiN4JnMnfFAhUCFRITh7IV4hXyE5USFfIWAhOV9XITlRTyRXVyN2ITlWUCNgI3YhXyFgITlZI3YhOV9PI28jdiN2ITlkTyNhI3YkdSE5a1QheyRtJFVXTyFeJVQhXyFgJ3YhYCFhITl6IWEjbyVUI3B+JVQkUCE6UlIjVyN3JFVXTyFeJVQhXyNvJVQjcH4lVCVWITpnVCdhIVIjYSN2JFJTJFVXTyFeJVQhXyFgITp2IWAhYSE7VyFhI28lVCNwfiVUJE8hOn1SI2EjdiRVV08hXiVUIV8jbyVUI3B+JVQkTyE7X1QjYCN2JFVXTyFeJVQhXyFgNVQhYCFhITtuIWEjbyVUI3B+JVQkTyE7dVMjYCN2JFVXTyFeJVQhXyFgNVQhYCNvJVQjcH4lVCphITxZVidwI3skVVdPIU8lVCFPIVAhPG8hUCFeJVQhXyFhJVQhYSFiIT1QIWIjbyVUI3B+JVQqWyE8dlJ2KlMkVVdPIV4lVCFfI28lVCNwfiVUJE8hPVdTJFVXI2ojdk8hXiVUIV8hYDVUIWAjbyVUI3B+JVQ3ViE9a1J4Nn0kVVdPIV4lVCFfI28lVCNwfiVUayE9e1IhT2MkVVdPIV4lVCFfI28lVCNwfiVUJE8hPl1TI2cjdiRVV08hXiVUIV8hYDVUIWAjbyVUI3B+JVQkYSE+cFIkVVcnZiRYTyFeJVQhXyNvJVQjcH4lVH4hP09PIVR+NWIhP1ZUJ3c1WSRVV08hXiVUIV8hYDVUIWAjbyVUI3AjcSE9UCNxfiVUNlghP29SIVM1fW5RJFVXTyFeJVQhXyNvJVQjcH4lVFghQFBSIWtQJFVXTyFeJVQhXyNvJVQjcH4lVDdaIUBnciRVVydZN1IjelMnXSR5J2czU09YJVRYWSVjWVolVFpbJWNbcCVUcHElY3F0JVR0dTJgdX0lVH0hTzNqIU8hUSVUIVEhWzJgIVshXiVUIV8hYyVUIWMhfTJgIX0jUiVUI1IjUzJgI1MjVCVUI1QjbzJgI3AkZiVUJGYkZyVjJGcjQlkyYCNCWSNCWiFAWSNCWiRJUzJgJElTJElfIUBZJElfJEpUMmAkSlQkSlUhQFkkSlUkS1YyYCRLViRLVyFAWSRLVyZGVTJgJkZVJkZWIUBZJkZWP0hUMmA/SFQ/SFUhQFk/SFV+MmA3WiFDT18kVVcnWjdSI3pTJ10keSdnM1NPdCVUdHUyYHV9JVR9IU8zaiFPIVElVCFRIVsyYCFbIV4lVCFfIWMlVCFjIX0yYCF9I1IlVCNSI1MyYCNTI1QlVCNUI28yYCNwJGclVCRnfjJgXCIsdG9rZW5pemVyczpbWSxrLHUsdywwLDEsMiwzLDQsNSw2LDcsOCw5LFVdLHRvcFJ1bGVzOntTY3JpcHQ6WzAsN119LGRpYWxlY3RzOntqc3g6MTIxMDcsdHM6MTIxMDl9LGR5bmFtaWNQcmVjZWRlbmNlczp7MTQ5OjEsMTc2OjF9LHNwZWNpYWxpemVkOlt7dGVybToyODksZ2V0OlE9PkNbUV18fC0xfSx7dGVybToyOTksZ2V0OlE9PlZbUV18fC0xfSx7dGVybTo2MyxnZXQ6UT0+SVtRXXx8LTF9XSx0b2tlblByZWM6MTIxMzB9KTtleHBvcnR7SiBhcyBwYXJzZXJ9O1xuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKEBjb2RlbWlycm9yL2xhbmctamF2YXNjcmlwdEA2LjEuMCkgZGVubyBwcm9kdWN0aW9uICovXG5pbXBvcnR7cGFyc2VyIGFzIFB9ZnJvbVwiQGxlemVyL2phdmFzY3JpcHRcIjtpbXBvcnR7c3ludGF4VHJlZSBhcyB3LExSTGFuZ3VhZ2UgYXMgTCxpbmRlbnROb2RlUHJvcCBhcyBOLGNvbnRpbnVlZEluZGVudCBhcyAkLGZsYXRJbmRlbnQgYXMgQSxkZWxpbWl0ZWRJbmRlbnQgYXMgRixmb2xkTm9kZVByb3AgYXMgQixmb2xkSW5zaWRlIGFzIE8sTGFuZ3VhZ2VTdXBwb3J0IGFzIEp9ZnJvbVwiQGNvZGVtaXJyb3IvbGFuZ3VhZ2VcIjtpbXBvcnR7RWRpdG9yU2VsZWN0aW9uIGFzIFN9ZnJvbVwiQGNvZGVtaXJyb3Ivc3RhdGVcIjtpbXBvcnR7RWRpdG9yVmlldyBhcyBYfWZyb21cIkBjb2RlbWlycm9yL3ZpZXdcIjtpbXBvcnR7c25pcHBldENvbXBsZXRpb24gYXMgZixpZk5vdEluIGFzIGosY29tcGxldGVGcm9tTGlzdCBhcyBWfWZyb21cIkBjb2RlbWlycm9yL2F1dG9jb21wbGV0ZVwiO2ltcG9ydHtOb2RlV2Vha01hcCBhcyBfLEl0ZXJNb2RlIGFzIE19ZnJvbVwiQGxlemVyL2NvbW1vblwiO3ZhciBSPVtmKFwiZnVuY3Rpb24gJHtuYW1lfSgke3BhcmFtc30pIHtcXG5cdCR7fVxcbn1cIix7bGFiZWw6XCJmdW5jdGlvblwiLGRldGFpbDpcImRlZmluaXRpb25cIix0eXBlOlwia2V5d29yZFwifSksZihcImZvciAobGV0ICR7aW5kZXh9ID0gMDsgJHtpbmRleH0gPCAke2JvdW5kfTsgJHtpbmRleH0rKykge1xcblx0JHt9XFxufVwiLHtsYWJlbDpcImZvclwiLGRldGFpbDpcImxvb3BcIix0eXBlOlwia2V5d29yZFwifSksZihcImZvciAobGV0ICR7bmFtZX0gb2YgJHtjb2xsZWN0aW9ufSkge1xcblx0JHt9XFxufVwiLHtsYWJlbDpcImZvclwiLGRldGFpbDpcIm9mIGxvb3BcIix0eXBlOlwia2V5d29yZFwifSksZihcImRvIHtcXG5cdCR7fVxcbn0gd2hpbGUgKCR7fSlcIix7bGFiZWw6XCJkb1wiLGRldGFpbDpcImxvb3BcIix0eXBlOlwia2V5d29yZFwifSksZihcIndoaWxlICgke30pIHtcXG5cdCR7fVxcbn1cIix7bGFiZWw6XCJ3aGlsZVwiLGRldGFpbDpcImxvb3BcIix0eXBlOlwia2V5d29yZFwifSksZihgdHJ5IHtcblx0XFwke31cbn0gY2F0Y2ggKFxcJHtlcnJvcn0pIHtcblx0XFwke31cbn1gLHtsYWJlbDpcInRyeVwiLGRldGFpbDpcIi8gY2F0Y2ggYmxvY2tcIix0eXBlOlwia2V5d29yZFwifSksZihcImlmICgke30pIHtcXG5cdCR7fVxcbn1cIix7bGFiZWw6XCJpZlwiLGRldGFpbDpcImJsb2NrXCIsdHlwZTpcImtleXdvcmRcIn0pLGYoYGlmIChcXCR7fSkge1xuXHRcXCR7fVxufSBlbHNlIHtcblx0XFwke31cbn1gLHtsYWJlbDpcImlmXCIsZGV0YWlsOlwiLyBlbHNlIGJsb2NrXCIsdHlwZTpcImtleXdvcmRcIn0pLGYoYGNsYXNzIFxcJHtuYW1lfSB7XG5cdGNvbnN0cnVjdG9yKFxcJHtwYXJhbXN9KSB7XG5cdFx0XFwke31cblx0fVxufWAse2xhYmVsOlwiY2xhc3NcIixkZXRhaWw6XCJkZWZpbml0aW9uXCIsdHlwZTpcImtleXdvcmRcIn0pLGYoJ2ltcG9ydCB7JHtuYW1lc319IGZyb20gXCIke21vZHVsZX1cIlxcbiR7fScse2xhYmVsOlwiaW1wb3J0XCIsZGV0YWlsOlwibmFtZWRcIix0eXBlOlwia2V5d29yZFwifSksZignaW1wb3J0ICR7bmFtZX0gZnJvbSBcIiR7bW9kdWxlfVwiXFxuJHt9Jyx7bGFiZWw6XCJpbXBvcnRcIixkZXRhaWw6XCJkZWZhdWx0XCIsdHlwZTpcImtleXdvcmRcIn0pXSxJPW5ldyBfLFQ9bmV3IFNldChbXCJTY3JpcHRcIixcIkJsb2NrXCIsXCJGdW5jdGlvbkV4cHJlc3Npb25cIixcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcIkFycm93RnVuY3Rpb25cIixcIk1ldGhvZERlY2xhcmF0aW9uXCIsXCJGb3JTdGF0ZW1lbnRcIl0pO2Z1bmN0aW9uIGQoZSl7cmV0dXJuKHQscik9PntsZXQgbj10Lm5vZGUuZ2V0Q2hpbGQoXCJWYXJpYWJsZURlZmluaXRpb25cIik7cmV0dXJuIG4mJnIobixlKSwhMH19dmFyIFc9W1wiRnVuY3Rpb25EZWNsYXJhdGlvblwiXSxIPXtGdW5jdGlvbkRlY2xhcmF0aW9uOmQoXCJmdW5jdGlvblwiKSxDbGFzc0RlY2xhcmF0aW9uOmQoXCJjbGFzc1wiKSxDbGFzc0V4cHJlc3Npb246KCk9PiEwLEVudW1EZWNsYXJhdGlvbjpkKFwiY29uc3RhbnRcIiksVHlwZUFsaWFzRGVjbGFyYXRpb246ZChcInR5cGVcIiksTmFtZXNwYWNlRGVjbGFyYXRpb246ZChcIm5hbWVzcGFjZVwiKSxWYXJpYWJsZURlZmluaXRpb24oZSx0KXtlLm1hdGNoQ29udGV4dChXKXx8dChlLFwidmFyaWFibGVcIil9LFR5cGVEZWZpbml0aW9uKGUsdCl7dChlLFwidHlwZVwiKX0sX19wcm90b19fOm51bGx9O2Z1bmN0aW9uIHgoZSx0KXtsZXQgcj1JLmdldCh0KTtpZihyKXJldHVybiByO2xldCBuPVtdLG89ITA7ZnVuY3Rpb24gYShsLGkpe2xldCBjPWUuc2xpY2VTdHJpbmcobC5mcm9tLGwudG8pO24ucHVzaCh7bGFiZWw6Yyx0eXBlOml9KX1yZXR1cm4gdC5jdXJzb3IoTS5JbmNsdWRlQW5vbnltb3VzKS5pdGVyYXRlKGw9PntpZihvKW89ITE7ZWxzZSBpZihsLm5hbWUpe2xldCBpPUhbbC5uYW1lXTtpZihpJiZpKGwsYSl8fFQuaGFzKGwubmFtZSkpcmV0dXJuITF9ZWxzZSBpZihsLnRvLWwuZnJvbT44MTkyKXtmb3IobGV0IGkgb2YgeChlLGwubm9kZSkpbi5wdXNoKGkpO3JldHVybiExfX0pLEkuc2V0KHQsbiksbn12YXIgYj0vXltcXHckXFx4YTEtXFx1ZmZmZl1bXFx3JFxcZFxceGExLVxcdWZmZmZdKiQvLGs9W1wiVGVtcGxhdGVTdHJpbmdcIixcIlN0cmluZ1wiLFwiUmVnRXhwXCIsXCJMaW5lQ29tbWVudFwiLFwiQmxvY2tDb21tZW50XCIsXCJWYXJpYWJsZURlZmluaXRpb25cIixcIlR5cGVEZWZpbml0aW9uXCIsXCJMYWJlbFwiLFwiUHJvcGVydHlEZWZpbml0aW9uXCIsXCJQcm9wZXJ0eU5hbWVcIixcIlByaXZhdGVQcm9wZXJ0eURlZmluaXRpb25cIixcIlByaXZhdGVQcm9wZXJ0eU5hbWVcIl07ZnVuY3Rpb24gWihlKXtsZXQgdD13KGUuc3RhdGUpLnJlc29sdmVJbm5lcihlLnBvcywtMSk7aWYoay5pbmRleE9mKHQubmFtZSk+LTEpcmV0dXJuIG51bGw7bGV0IHI9dC5uYW1lPT1cIlZhcmlhYmxlTmFtZVwifHx0LnRvLXQuZnJvbTwyMCYmYi50ZXN0KGUuc3RhdGUuc2xpY2VEb2ModC5mcm9tLHQudG8pKTtpZighciYmIWUuZXhwbGljaXQpcmV0dXJuIG51bGw7bGV0IG49W107Zm9yKGxldCBvPXQ7bztvPW8ucGFyZW50KVQuaGFzKG8ubmFtZSkmJihuPW4uY29uY2F0KHgoZS5zdGF0ZS5kb2MsbykpKTtyZXR1cm57b3B0aW9uczpuLGZyb206cj90LmZyb206ZS5wb3MsdmFsaWRGb3I6Yn19ZnVuY3Rpb24gdihlLHQscil7dmFyIG47bGV0IG89W107Zm9yKDs7KXtsZXQgYT10LmZpcnN0Q2hpbGQsbDtpZihhPy5uYW1lPT1cIlZhcmlhYmxlTmFtZVwiKXJldHVybiBvLnB1c2goZShhKSkse3BhdGg6by5yZXZlcnNlKCksbmFtZTpyfTtpZihhPy5uYW1lPT1cIk1lbWJlckV4cHJlc3Npb25cIiYmKChuPWw9YS5sYXN0Q2hpbGQpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5uYW1lKT09XCJQcm9wZXJ0eU5hbWVcIilvLnB1c2goZShsKSksdD1hO2Vsc2UgcmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoZSl7bGV0IHQ9bj0+ZS5zdGF0ZS5kb2Muc2xpY2VTdHJpbmcobi5mcm9tLG4udG8pLHI9dyhlLnN0YXRlKS5yZXNvbHZlSW5uZXIoZS5wb3MsLTEpO3JldHVybiByLm5hbWU9PVwiUHJvcGVydHlOYW1lXCI/dih0LHIucGFyZW50LHQocikpOmsuaW5kZXhPZihyLm5hbWUpPi0xP251bGw6ci5uYW1lPT1cIlZhcmlhYmxlTmFtZVwifHxyLnRvLXIuZnJvbTwyMCYmYi50ZXN0KHQocikpP3twYXRoOltdLG5hbWU6dChyKX06ci5uYW1lPT1cIi5cIiYmci5wYXJlbnQubmFtZT09XCJNZW1iZXJFeHByZXNzaW9uXCI/dih0LHIucGFyZW50LFwiXCIpOnIubmFtZT09XCJNZW1iZXJFeHByZXNzaW9uXCI/dih0LHIsXCJcIik6ZS5leHBsaWNpdD97cGF0aDpbXSxuYW1lOlwiXCJ9Om51bGx9ZnVuY3Rpb24geihlLHQpe2xldCByPVtdLG49bmV3IFNldDtmb3IobGV0IG89MDs7bysrKXtmb3IobGV0IGwgb2YoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fE9iamVjdC5rZXlzKShlKSl7aWYobi5oYXMobCkpY29udGludWU7bi5hZGQobCk7bGV0IGk7dHJ5e2k9ZVtsXX1jYXRjaHtjb250aW51ZX1yLnB1c2goe2xhYmVsOmwsdHlwZTp0eXBlb2YgaT09XCJmdW5jdGlvblwiPy9eW0EtWl0vLnRlc3QobCk/XCJjbGFzc1wiOnQ/XCJmdW5jdGlvblwiOlwibWV0aG9kXCI6dD9cInZhcmlhYmxlXCI6XCJwcm9wZXJ0eVwiLGJvb3N0Oi1vfSl9bGV0IGE9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2lmKCFhKXJldHVybiByO2U9YX19ZnVuY3Rpb24gc2UoZSl7bGV0IHQ9bmV3IE1hcDtyZXR1cm4gcj0+e2xldCBuPXEocik7aWYoIW4pcmV0dXJuIG51bGw7bGV0IG89ZTtmb3IobGV0IGwgb2Ygbi5wYXRoKWlmKG89b1tsXSwhbylyZXR1cm4gbnVsbDtsZXQgYT10LmdldChvKTtyZXR1cm4gYXx8dC5zZXQobyxhPXoobywhbi5wYXRoLmxlbmd0aCkpLHtmcm9tOnIucG9zLW4ubmFtZS5sZW5ndGgsb3B0aW9uczphLHZhbGlkRm9yOmJ9fX12YXIgcD1MLmRlZmluZSh7cGFyc2VyOlAuY29uZmlndXJlKHtwcm9wczpbTi5hZGQoe0lmU3RhdGVtZW50OiQoe2V4Y2VwdDovXlxccyooe3xlbHNlXFxiKS99KSxUcnlTdGF0ZW1lbnQ6JCh7ZXhjZXB0Oi9eXFxzKih7fGNhdGNoXFxifGZpbmFsbHlcXGIpL30pLExhYmVsZWRTdGF0ZW1lbnQ6QSxTd2l0Y2hCb2R5OmU9PntsZXQgdD1lLnRleHRBZnRlcixyPS9eXFxzKlxcfS8udGVzdCh0KSxuPS9eXFxzKihjYXNlfGRlZmF1bHQpXFxiLy50ZXN0KHQpO3JldHVybiBlLmJhc2VJbmRlbnQrKHI/MDpuPzE6MikqZS51bml0fSxCbG9jazpGKHtjbG9zaW5nOlwifVwifSksQXJyb3dGdW5jdGlvbjplPT5lLmJhc2VJbmRlbnQrZS51bml0LFwiVGVtcGxhdGVTdHJpbmcgQmxvY2tDb21tZW50XCI6KCk9Pm51bGwsXCJTdGF0ZW1lbnQgUHJvcGVydHlcIjokKHtleGNlcHQ6L157L30pLEpTWEVsZW1lbnQoZSl7bGV0IHQ9L15cXHMqPFxcLy8udGVzdChlLnRleHRBZnRlcik7cmV0dXJuIGUubGluZUluZGVudChlLm5vZGUuZnJvbSkrKHQ/MDplLnVuaXQpfSxKU1hFc2NhcGUoZSl7bGV0IHQ9L1xccypcXH0vLnRlc3QoZS50ZXh0QWZ0ZXIpO3JldHVybiBlLmxpbmVJbmRlbnQoZS5ub2RlLmZyb20pKyh0PzA6ZS51bml0KX0sXCJKU1hPcGVuVGFnIEpTWFNlbGZDbG9zaW5nVGFnXCIoZSl7cmV0dXJuIGUuY29sdW1uKGUubm9kZS5mcm9tKStlLnVuaXR9fSksQi5hZGQoe1wiQmxvY2sgQ2xhc3NCb2R5IFN3aXRjaEJvZHkgRW51bUJvZHkgT2JqZWN0RXhwcmVzc2lvbiBBcnJheUV4cHJlc3Npb25cIjpPLEJsb2NrQ29tbWVudChlKXtyZXR1cm57ZnJvbTplLmZyb20rMix0bzplLnRvLTJ9fX0pXX0pLGxhbmd1YWdlRGF0YTp7Y2xvc2VCcmFja2V0czp7YnJhY2tldHM6W1wiKFwiLFwiW1wiLFwie1wiLFwiJ1wiLCdcIicsXCJgXCJdfSxjb21tZW50VG9rZW5zOntsaW5lOlwiLy9cIixibG9jazp7b3BlbjpcIi8qXCIsY2xvc2U6XCIqL1wifX0saW5kZW50T25JbnB1dDovXlxccyooPzpjYXNlIHxkZWZhdWx0OnxcXHt8XFx9fDxcXC8pJC8sd29yZENoYXJzOlwiJFwifX0pLEc9cC5jb25maWd1cmUoe2RpYWxlY3Q6XCJ0c1wifSksSz1wLmNvbmZpZ3VyZSh7ZGlhbGVjdDpcImpzeFwifSksUT1wLmNvbmZpZ3VyZSh7ZGlhbGVjdDpcImpzeCB0c1wifSksVT1cImJyZWFrIGNhc2UgY29uc3QgY29udGludWUgZGVmYXVsdCBkZWxldGUgZXhwb3J0IGV4dGVuZHMgZmFsc2UgZmluYWxseSBpbiBpbnN0YW5jZW9mIGxldCBuZXcgcmV0dXJuIHN0YXRpYyBzdXBlciBzd2l0Y2ggdGhpcyB0aHJvdyB0cnVlIHR5cGVvZiB2YXIgeWllbGRcIi5zcGxpdChcIiBcIikubWFwKGU9Pih7bGFiZWw6ZSx0eXBlOlwia2V5d29yZFwifSkpO2Z1bmN0aW9uIGZlKGU9e30pe2xldCB0PWUuanN4P2UudHlwZXNjcmlwdD9ROks6ZS50eXBlc2NyaXB0P0c6cDtyZXR1cm4gbmV3IEoodCxbcC5kYXRhLm9mKHthdXRvY29tcGxldGU6aihrLFYoUi5jb25jYXQoVSkpKX0pLHAuZGF0YS5vZih7YXV0b2NvbXBsZXRlOlp9KSxlLmpzeD9lZTpbXV0pfWZ1bmN0aW9uIEQoZSx0LHI9ZS5sZW5ndGgpe2lmKCF0KXJldHVyblwiXCI7bGV0IG49dC5nZXRDaGlsZChcIkpTWElkZW50aWZpZXJcIik7cmV0dXJuIG4/ZS5zbGljZVN0cmluZyhuLmZyb20sTWF0aC5taW4obi50byxyKSk6XCJcIn12YXIgWT10eXBlb2YgbmF2aWdhdG9yPT1cIm9iamVjdFwiJiYvQW5kcm9pZFxcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxlZT1YLmlucHV0SGFuZGxlci5vZigoZSx0LHIsbik9PntpZigoWT9lLmNvbXBvc2luZzplLmNvbXBvc2l0aW9uU3RhcnRlZCl8fGUuc3RhdGUucmVhZE9ubHl8fHQhPXJ8fG4hPVwiPlwiJiZuIT1cIi9cInx8IXAuaXNBY3RpdmVBdChlLnN0YXRlLHQsLTEpKXJldHVybiExO2xldHtzdGF0ZTpvfT1lLGE9by5jaGFuZ2VCeVJhbmdlKGw9Pnt2YXIgaSxjLG07bGV0e2hlYWQ6c309bCx1PXcobykucmVzb2x2ZUlubmVyKHMsLTEpLHk7aWYodS5uYW1lPT1cIkpTWFN0YXJ0VGFnXCImJih1PXUucGFyZW50KSxuPT1cIj5cIiYmdS5uYW1lPT1cIkpTWEZyYWdtZW50VGFnXCIpcmV0dXJue3JhbmdlOlMuY3Vyc29yKHMrMSksY2hhbmdlczp7ZnJvbTpzLGluc2VydDpcIj48PlwifX07aWYobj09XCI+XCImJnUubmFtZT09XCJKU1hJZGVudGlmaWVyXCIpe2lmKCgoYz0oaT11LnBhcmVudCk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLmxhc3RDaGlsZCk9PT1udWxsfHxjPT09dm9pZCAwP3ZvaWQgMDpjLm5hbWUpIT1cIkpTWEVuZFRhZ1wiJiYoeT1EKG8uZG9jLHUucGFyZW50LHMpKSlyZXR1cm57cmFuZ2U6Uy5jdXJzb3IocysxKSxjaGFuZ2VzOntmcm9tOnMsaW5zZXJ0OmA+PC8ke3l9PmB9fX1lbHNlIGlmKG49PVwiL1wiJiZ1Lm5hbWU9PVwiSlNYRnJhZ21lbnRUYWdcIil7bGV0IGc9dS5wYXJlbnQsaD1nPy5wYXJlbnQ7aWYoZy5mcm9tPT1zLTEmJigobT1oLmxhc3RDaGlsZCk9PT1udWxsfHxtPT09dm9pZCAwP3ZvaWQgMDptLm5hbWUpIT1cIkpTWEVuZFRhZ1wiJiYoeT1EKG8uZG9jLGg/LmZpcnN0Q2hpbGQscykpKXtsZXQgQz1gLyR7eX0+YDtyZXR1cm57cmFuZ2U6Uy5jdXJzb3IocytDLmxlbmd0aCksY2hhbmdlczp7ZnJvbTpzLGluc2VydDpDfX19fXJldHVybntyYW5nZTpsfX0pO3JldHVybiBhLmNoYW5nZXMuZW1wdHk/ITE6KGUuZGlzcGF0Y2goYSx7dXNlckV2ZW50OlwiaW5wdXQudHlwZVwiLHNjcm9sbEludG9WaWV3OiEwfSksITApfSk7ZnVuY3Rpb24gY2UoZSx0KXtyZXR1cm4gdHx8KHQ9e3BhcnNlck9wdGlvbnM6e2VjbWFWZXJzaW9uOjIwMTksc291cmNlVHlwZTpcIm1vZHVsZVwifSxlbnY6e2Jyb3dzZXI6ITAsbm9kZTohMCxlczY6ITAsZXMyMDE1OiEwLGVzMjAxNzohMCxlczIwMjA6ITB9LHJ1bGVzOnt9fSxlLmdldFJ1bGVzKCkuZm9yRWFjaCgocixuKT0+e3IubWV0YS5kb2NzLnJlY29tbWVuZGVkJiYodC5ydWxlc1tuXT0yKX0pKSxyPT57bGV0e3N0YXRlOm59PXIsbz1bXTtmb3IobGV0e2Zyb206YSx0bzpsfW9mIHAuZmluZFJlZ2lvbnMobikpe2xldCBpPW4uZG9jLmxpbmVBdChhKSxjPXtsaW5lOmkubnVtYmVyLTEsY29sOmEtaS5mcm9tLHBvczphfTtmb3IobGV0IG0gb2YgZS52ZXJpZnkobi5zbGljZURvYyhhLGwpLHQpKW8ucHVzaCh0ZShtLG4uZG9jLGMpKX1yZXR1cm4gb319ZnVuY3Rpb24gRShlLHQscixuKXtyZXR1cm4gci5saW5lKGUrbi5saW5lKS5mcm9tK3QrKGU9PTE/bi5jb2wtMTotMSl9ZnVuY3Rpb24gdGUoZSx0LHIpe2xldCBuPUUoZS5saW5lLGUuY29sdW1uLHQsciksbz17ZnJvbTpuLHRvOmUuZW5kTGluZSE9bnVsbCYmZS5lbmRDb2x1bW4hPTE/RShlLmVuZExpbmUsZS5lbmRDb2x1bW4sdCxyKTpuLG1lc3NhZ2U6ZS5tZXNzYWdlLHNvdXJjZTplLnJ1bGVJZD9cImVzbGludDpcIitlLnJ1bGVJZDpcImVzbGludFwiLHNldmVyaXR5OmUuc2V2ZXJpdHk9PTE/XCJ3YXJuaW5nXCI6XCJlcnJvclwifTtpZihlLmZpeCl7bGV0e3JhbmdlOmEsdGV4dDpsfT1lLmZpeCxpPWFbMF0rci5wb3MtbixjPWFbMV0rci5wb3MtbjtvLmFjdGlvbnM9W3tuYW1lOlwiZml4XCIsYXBwbHkobSxzKXttLmRpc3BhdGNoKHtjaGFuZ2VzOntmcm9tOnMraSx0bzpzK2MsaW5zZXJ0Omx9LHNjcm9sbEludG9WaWV3OiEwfSl9fV19cmV0dXJuIG99ZXhwb3J0e2VlIGFzIGF1dG9DbG9zZVRhZ3MscSBhcyBjb21wbGV0aW9uUGF0aCxjZSBhcyBlc0xpbnQsZmUgYXMgamF2YXNjcmlwdCxwIGFzIGphdmFzY3JpcHRMYW5ndWFnZSxLIGFzIGpzeExhbmd1YWdlLFogYXMgbG9jYWxDb21wbGV0aW9uU291cmNlLHNlIGFzIHNjb3BlQ29tcGxldGlvblNvdXJjZSxSIGFzIHNuaXBwZXRzLFEgYXMgdHN4TGFuZ3VhZ2UsRyBhcyB0eXBlc2NyaXB0TGFuZ3VhZ2V9O1xuIiwgImltcG9ydCB7IFRhZyB9IGZyb20gXCIuLi8uLi9kZXBfY29tbW9uLnRzXCI7XG5pbXBvcnQgdHlwZSB7IE1hcmtkb3duQ29uZmlnIH0gZnJvbSBcIi4uLy4uL2RlcF9jb21tb24udHNcIjtcbmltcG9ydCB7IFN5c3RlbSB9IGZyb20gXCIuLi9wbHVnb3Mvc3lzdGVtLnRzXCI7XG5pbXBvcnQgeyBNYW5pZmVzdCB9IGZyb20gXCIuL21hbmlmZXN0LnRzXCI7XG5cbmV4cG9ydCB0eXBlIE1ERXh0ID0ge1xuICAvLyB1bmljb2RlIGNoYXIgY29kZSBmb3IgZWZmaWNpZW5jeSAuY2hhckNvZGVBdCgwKVxuICBmaXJzdENoYXJDb2RlczogbnVtYmVyW107XG4gIHJlZ2V4OiBSZWdFeHA7XG4gIG5vZGVUeXBlOiBzdHJpbmc7XG4gIHRhZzogVGFnO1xuICBzdHlsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBtZEV4dGVuc2lvblN5bnRheENvbmZpZyh7XG4gIHJlZ2V4LFxuICBmaXJzdENoYXJDb2RlcyxcbiAgbm9kZVR5cGUsXG59OiBNREV4dCk6IE1hcmtkb3duQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBkZWZpbmVOb2RlczogW25vZGVUeXBlXSxcbiAgICBwYXJzZUlubGluZTogW1xuICAgICAge1xuICAgICAgICBuYW1lOiBub2RlVHlwZSxcbiAgICAgICAgcGFyc2UoY3gsIG5leHQsIHBvcykge1xuICAgICAgICAgIGlmICghZmlyc3RDaGFyQ29kZXMuaW5jbHVkZXMobmV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyhjeC5zbGljZShwb3MsIGN4LmVuZCkpO1xuICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGN4LmFkZEVsZW1lbnQoY3guZWx0KG5vZGVUeXBlLCBwb3MsIHBvcyArIG1hdGNoWzBdLmxlbmd0aCkpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBhZnRlcjogXCJFbXBoYXNpc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWRFeHRlbnNpb25TdHlsZVRhZ3MoeyBub2RlVHlwZSwgdGFnIH06IE1ERXh0KToge1xuICBbc2VsZWN0b3I6IHN0cmluZ106IFRhZyB8IHJlYWRvbmx5IFRhZ1tdO1xufSB7XG4gIHJldHVybiB7XG4gICAgW25vZGVUeXBlXTogdGFnLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1hcmtkb3duRXh0ZW5zaW9ucyhzeXN0ZW06IFN5c3RlbTxhbnk+KTogTURFeHRbXSB7XG4gIGxldCBtZEV4dGVuc2lvbnM6IE1ERXh0W10gPSBbXTtcbiAgZm9yIChsZXQgcGx1ZyBvZiBzeXN0ZW0ubG9hZGVkUGx1Z3MudmFsdWVzKCkpIHtcbiAgICBsZXQgbWFuaWZlc3QgPSBwbHVnLm1hbmlmZXN0IGFzIE1hbmlmZXN0O1xuICAgIGlmIChtYW5pZmVzdC5zeW50YXgpIHtcbiAgICAgIGZvciAobGV0IFtub2RlVHlwZSwgZGVmXSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5zeW50YXgpKSB7XG4gICAgICAgIG1kRXh0ZW5zaW9ucy5wdXNoKHtcbiAgICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgICB0YWc6IFRhZy5kZWZpbmUoKSxcbiAgICAgICAgICBmaXJzdENoYXJDb2RlczogZGVmLmZpcnN0Q2hhcmFjdGVycy5tYXAoKGNoKSA9PiBjaC5jaGFyQ29kZUF0KDApKSxcbiAgICAgICAgICByZWdleDogbmV3IFJlZ0V4cChcIl5cIiArIGRlZi5yZWdleCksXG4gICAgICAgICAgc3R5bGVzOiBkZWYuc3R5bGVzLFxuICAgICAgICAgIGNsYXNzTmFtZTogZGVmLmNsYXNzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtZEV4dGVuc2lvbnM7XG59XG4iLCAiaW1wb3J0IHsgVGFnIH0gZnJvbSBcIi4uLy4uL2RlcF9jb21tb24udHNcIjtcblxuZXhwb3J0IGNvbnN0IFdpa2lMaW5rVGFnID0gVGFnLmRlZmluZSgpO1xuZXhwb3J0IGNvbnN0IFdpa2lMaW5rUGFnZVRhZyA9IFRhZy5kZWZpbmUoKTtcbmV4cG9ydCBjb25zdCBDb2RlSW5mb1RhZyA9IFRhZy5kZWZpbmUoKTtcbmV4cG9ydCBjb25zdCBUYXNrVGFnID0gVGFnLmRlZmluZSgpO1xuZXhwb3J0IGNvbnN0IFRhc2tNYXJrZXJUYWcgPSBUYWcuZGVmaW5lKCk7XG5leHBvcnQgY29uc3QgQ29tbWVudFRhZyA9IFRhZy5kZWZpbmUoKTtcbmV4cG9ydCBjb25zdCBDb21tZW50TWFya2VyVGFnID0gVGFnLmRlZmluZSgpO1xuZXhwb3J0IGNvbnN0IEJ1bGxldExpc3QgPSBUYWcuZGVmaW5lKCk7XG5leHBvcnQgY29uc3QgT3JkZXJlZExpc3QgPSBUYWcuZGVmaW5lKCk7XG5leHBvcnQgY29uc3QgSGlnaGxpZ2h0ID0gVGFnLmRlZmluZSgpO1xuZXhwb3J0IGNvbnN0IEhvcml6b250YWxSdWxlVGFnID0gVGFnLmRlZmluZSgpO1xuIiwgImltcG9ydCB7XG4gIEJsb2NrQ29udGV4dCxcbiAgTGFuZ3VhZ2UsXG4gIExhbmd1YWdlRGVzY3JpcHRpb24sXG4gIExhbmd1YWdlU3VwcG9ydCxcbiAgTGVhZkJsb2NrLFxuICBMZWFmQmxvY2tQYXJzZXIsXG4gIG1hcmtkb3duLFxuICBNYXJrZG93bkNvbmZpZyxcbiAgcGFyc2VDb2RlLFxuICBzdHlsZVRhZ3MsXG4gIFRhYmxlLFxuICB0YWdzIGFzIHQsXG4gIFRhc2tMaXN0LFxufSBmcm9tIFwiLi4vLi4vZGVwX2NvbW1vbi50c1wiO1xuaW1wb3J0ICogYXMgY3QgZnJvbSBcIi4vY3VzdG9tdGFncy50c1wiO1xuaW1wb3J0IHtcbiAgTURFeHQsXG4gIG1kRXh0ZW5zaW9uU3R5bGVUYWdzLFxuICBtZEV4dGVuc2lvblN5bnRheENvbmZpZyxcbn0gZnJvbSBcIi4vbWFya2Rvd25fZXh0LnRzXCI7XG5cbmV4cG9ydCBjb25zdCBwYWdlTGlua1JlZ2V4ID0gL15cXFtcXFsoW15cXF1dKylcXF1cXF0vO1xuXG5jb25zdCBXaWtpTGluazogTWFya2Rvd25Db25maWcgPSB7XG4gIGRlZmluZU5vZGVzOiBbXCJXaWtpTGlua1wiLCBcIldpa2lMaW5rUGFnZVwiXSxcbiAgcGFyc2VJbmxpbmU6IFtcbiAgICB7XG4gICAgICBuYW1lOiBcIldpa2lMaW5rXCIsXG4gICAgICBwYXJzZShjeCwgbmV4dCwgcG9zKSB7XG4gICAgICAgIGxldCBtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGw7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBuZXh0ICE9IDkxIC8qICdbJyAqLyB8fFxuICAgICAgICAgICEobWF0Y2ggPSBwYWdlTGlua1JlZ2V4LmV4ZWMoY3guc2xpY2UocG9zLCBjeC5lbmQpKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjeC5hZGRFbGVtZW50KFxuICAgICAgICAgIGN4LmVsdChcIldpa2lMaW5rXCIsIHBvcywgcG9zICsgbWF0Y2hbMF0ubGVuZ3RoLCBbXG4gICAgICAgICAgICBjeC5lbHQoXCJXaWtpTGlua1BhZ2VcIiwgcG9zICsgMiwgcG9zICsgbWF0Y2hbMF0ubGVuZ3RoIC0gMiksXG4gICAgICAgICAgXSksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYWZ0ZXI6IFwiRW1waGFzaXNcIixcbiAgICB9LFxuICBdLFxufTtcblxuY29uc3QgSGlnaGxpZ2h0RGVsaW0gPSB7IHJlc29sdmU6IFwiSGlnaGxpZ2h0XCIsIG1hcms6IFwiSGlnaGxpZ2h0TWFya1wiIH07XG5cbmV4cG9ydCBjb25zdCBTdHJpa2V0aHJvdWdoOiBNYXJrZG93bkNvbmZpZyA9IHtcbiAgZGVmaW5lTm9kZXM6IFtcbiAgICB7XG4gICAgICBuYW1lOiBcIkhpZ2hsaWdodFwiLFxuICAgICAgc3R5bGU6IHsgXCJIaWdobGlnaHQvLi4uXCI6IGN0LkhpZ2hsaWdodCB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJIaWdobGlnaHRNYXJrXCIsXG4gICAgICBzdHlsZTogdC5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sXG4gICAgfSxcbiAgXSxcbiAgcGFyc2VJbmxpbmU6IFtcbiAgICB7XG4gICAgICBuYW1lOiBcIkhpZ2hsaWdodFwiLFxuICAgICAgcGFyc2UoY3gsIG5leHQsIHBvcykge1xuICAgICAgICBpZiAobmV4dCAhPSA2MSAvKiAnPScgKi8gfHwgY3guY2hhcihwb3MgKyAxKSAhPSA2MSkgcmV0dXJuIC0xO1xuICAgICAgICByZXR1cm4gY3guYWRkRGVsaW1pdGVyKEhpZ2hsaWdodERlbGltLCBwb3MsIHBvcyArIDIsIHRydWUsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIGFmdGVyOiBcIkVtcGhhc2lzXCIsXG4gICAgfSxcbiAgXSxcbn07XG5cbmNsYXNzIENvbW1lbnRQYXJzZXIgaW1wbGVtZW50cyBMZWFmQmxvY2tQYXJzZXIge1xuICBuZXh0TGluZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmaW5pc2goY3g6IEJsb2NrQ29udGV4dCwgbGVhZjogTGVhZkJsb2NrKSB7XG4gICAgY3guYWRkTGVhZkVsZW1lbnQoXG4gICAgICBsZWFmLFxuICAgICAgY3guZWx0KFwiQ29tbWVudFwiLCBsZWFmLnN0YXJ0LCBsZWFmLnN0YXJ0ICsgbGVhZi5jb250ZW50Lmxlbmd0aCwgW1xuICAgICAgICAvLyBjeC5lbHQoXCJDb21tZW50TWFya2VyXCIsIGxlYWYuc3RhcnQsIGxlYWYuc3RhcnQgKyAzKSxcbiAgICAgICAgLi4uY3gucGFyc2VyLnBhcnNlSW5saW5lKGxlYWYuY29udGVudC5zbGljZSgzKSwgbGVhZi5zdGFydCArIDMpLFxuICAgICAgXSksXG4gICAgKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuZXhwb3J0IGNvbnN0IENvbW1lbnQ6IE1hcmtkb3duQ29uZmlnID0ge1xuICBkZWZpbmVOb2RlczogW3sgbmFtZTogXCJDb21tZW50XCIsIGJsb2NrOiB0cnVlIH1dLFxuICBwYXJzZUJsb2NrOiBbXG4gICAge1xuICAgICAgbmFtZTogXCJDb21tZW50XCIsXG4gICAgICBsZWFmKGN4LCBsZWFmKSB7XG4gICAgICAgIHJldHVybiAvXiUlXFxzLy50ZXN0KGxlYWYuY29udGVudCkgPyBuZXcgQ29tbWVudFBhcnNlcigpIDogbnVsbDtcbiAgICAgIH0sXG4gICAgICBhZnRlcjogXCJTZXRleHRIZWFkaW5nXCIsXG4gICAgfSxcbiAgXSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkTWFya2Rvd24obWRFeHRlbnNpb25zOiBNREV4dFtdKTogTGFuZ3VhZ2Uge1xuICByZXR1cm4gbWFya2Rvd24oe1xuICAgIGV4dGVuc2lvbnM6IFtcbiAgICAgIFdpa2lMaW5rLFxuICAgICAgVGFza0xpc3QsXG4gICAgICBDb21tZW50LFxuICAgICAgU3RyaWtldGhyb3VnaCxcbiAgICAgIFRhYmxlLFxuICAgICAgLi4ubWRFeHRlbnNpb25zLm1hcChtZEV4dGVuc2lvblN5bnRheENvbmZpZyksXG4gICAgICAvLyBwYXJzZUNvZGUoe1xuICAgICAgLy8gICBjb2RlUGFyc2VyOiBnZXRDb2RlUGFyc2VyKFtcbiAgICAgIC8vICAgICBMYW5ndWFnZURlc2NyaXB0aW9uLm9mKHtcbiAgICAgIC8vICAgICAgIG5hbWU6IFwieWFtbFwiLFxuICAgICAgLy8gICAgICAgYWxpYXM6IFtcIm1ldGFcIiwgXCJkYXRhXCJdLFxuICAgICAgLy8gICAgICAgc3VwcG9ydDogbmV3IExhbmd1YWdlU3VwcG9ydChTdHJlYW1MYW5ndWFnZS5kZWZpbmUoeWFtbCkpLFxuICAgICAgLy8gICAgIH0pLFxuICAgICAgLy8gICAgIExhbmd1YWdlRGVzY3JpcHRpb24ub2Yoe1xuICAgICAgLy8gICAgICAgbmFtZTogXCJqYXZhc2NyaXB0XCIsXG4gICAgICAvLyAgICAgICBhbGlhczogW1wianNcIl0sXG4gICAgICAvLyAgICAgICBzdXBwb3J0OiBuZXcgTGFuZ3VhZ2VTdXBwb3J0KGphdmFzY3JpcHRMYW5ndWFnZSksXG4gICAgICAvLyAgICAgfSksXG4gICAgICAvLyAgICAgTGFuZ3VhZ2VEZXNjcmlwdGlvbi5vZih7XG4gICAgICAvLyAgICAgICBuYW1lOiBcInR5cGVzY3JpcHRcIixcbiAgICAgIC8vICAgICAgIGFsaWFzOiBbXCJ0c1wiXSxcbiAgICAgIC8vICAgICAgIHN1cHBvcnQ6IG5ldyBMYW5ndWFnZVN1cHBvcnQodHlwZXNjcmlwdExhbmd1YWdlKSxcbiAgICAgIC8vICAgICB9KSxcbiAgICAgIC8vICAgXSksXG4gICAgICAvLyB9KSxcbiAgICAgIHtcbiAgICAgICAgcHJvcHM6IFtcbiAgICAgICAgICBzdHlsZVRhZ3Moe1xuICAgICAgICAgICAgV2lraUxpbms6IGN0Lldpa2lMaW5rVGFnLFxuICAgICAgICAgICAgV2lraUxpbmtQYWdlOiBjdC5XaWtpTGlua1BhZ2VUYWcsXG4gICAgICAgICAgICBUYXNrOiBjdC5UYXNrVGFnLFxuICAgICAgICAgICAgVGFza01hcmtlcjogY3QuVGFza01hcmtlclRhZyxcbiAgICAgICAgICAgIENvbW1lbnQ6IGN0LkNvbW1lbnRUYWcsXG4gICAgICAgICAgICBcIlRhYmxlRGVsaW1pdGVyIFN1YnNjcmlwdE1hcmsgU3VwZXJzY3JpcHRNYXJrIFN0cmlrZXRocm91Z2hNYXJrXCI6XG4gICAgICAgICAgICAgIHQucHJvY2Vzc2luZ0luc3RydWN0aW9uLFxuICAgICAgICAgICAgXCJUYWJsZUhlYWRlci8uLi5cIjogdC5oZWFkaW5nLFxuICAgICAgICAgICAgVGFibGVDZWxsOiB0LmNvbnRlbnQsXG4gICAgICAgICAgICBDb2RlSW5mbzogY3QuQ29kZUluZm9UYWcsXG4gICAgICAgICAgICBIb3Jpem9udGFsUnVsZTogY3QuSG9yaXpvbnRhbFJ1bGVUYWcsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4ubWRFeHRlbnNpb25zLm1hcCgobWRFeHQpID0+XG4gICAgICAgICAgICBzdHlsZVRhZ3MobWRFeHRlbnNpb25TdHlsZVRhZ3MobWRFeHQpKVxuICAgICAgICAgICksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gIH0pLmxhbmd1YWdlO1xufVxuIiwgImltcG9ydCB7IFBhcnNlVHJlZSB9IGZyb20gXCIuL3RyZWUudHNcIjtcblxuaW1wb3J0IHR5cGUgeyBTeW50YXhOb2RlIH0gZnJvbSBcIi4uLy4uL2RlcF9jb21tb24udHNcIjtcbmltcG9ydCB0eXBlIHsgTGFuZ3VhZ2UgfSBmcm9tIFwiLi4vLi4vZGVwX2NvbW1vbi50c1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGxlemVyVG9QYXJzZVRyZWUoXG4gIHRleHQ6IHN0cmluZyxcbiAgbjogU3ludGF4Tm9kZSxcbiAgb2Zmc2V0ID0gMCxcbik6IFBhcnNlVHJlZSB7XG4gIGxldCBjaGlsZHJlbjogUGFyc2VUcmVlW10gPSBbXTtcbiAgbGV0IG5vZGVUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBjaGlsZCA9IG4uZmlyc3RDaGlsZDtcbiAgd2hpbGUgKGNoaWxkKSB7XG4gICAgY2hpbGRyZW4ucHVzaChsZXplclRvUGFyc2VUcmVlKHRleHQsIGNoaWxkKSk7XG4gICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZztcbiAgfVxuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICBjaGlsZHJlbiA9IFtcbiAgICAgIHtcbiAgICAgICAgZnJvbTogbi5mcm9tICsgb2Zmc2V0LFxuICAgICAgICB0bzogbi50byArIG9mZnNldCxcbiAgICAgICAgdGV4dDogdGV4dC5zdWJzdHJpbmcobi5mcm9tLCBuLnRvKSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSBlbHNlIHtcbiAgICBsZXQgbmV3Q2hpbGRyZW46IFBhcnNlVHJlZVtdID0gW107XG4gICAgbGV0IGluZGV4ID0gbi5mcm9tO1xuICAgIGZvciAobGV0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBsZXQgcyA9IHRleHQuc3Vic3RyaW5nKGluZGV4LCBjaGlsZC5mcm9tKTtcbiAgICAgIGlmIChzKSB7XG4gICAgICAgIG5ld0NoaWxkcmVuLnB1c2goe1xuICAgICAgICAgIGZyb206IGluZGV4ICsgb2Zmc2V0LFxuICAgICAgICAgIHRvOiBjaGlsZC5mcm9tISArIG9mZnNldCxcbiAgICAgICAgICB0ZXh0OiBzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgaW5kZXggPSBjaGlsZC50byE7XG4gICAgfVxuICAgIGxldCBzID0gdGV4dC5zdWJzdHJpbmcoaW5kZXgsIG4udG8pO1xuICAgIGlmIChzKSB7XG4gICAgICBuZXdDaGlsZHJlbi5wdXNoKHsgZnJvbTogaW5kZXggKyBvZmZzZXQsIHRvOiBuLnRvICsgb2Zmc2V0LCB0ZXh0OiBzIH0pO1xuICAgIH1cbiAgICBjaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG5cbiAgbGV0IHJlc3VsdDogUGFyc2VUcmVlID0ge1xuICAgIHR5cGU6IG4ubmFtZSxcbiAgICBmcm9tOiBuLmZyb20gKyBvZmZzZXQsXG4gICAgdG86IG4udG8gKyBvZmZzZXQsXG4gIH07XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgcmVzdWx0LmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH1cbiAgaWYgKG5vZGVUZXh0KSB7XG4gICAgcmVzdWx0LnRleHQgPSBub2RlVGV4dDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UobGFuZ3VhZ2U6IExhbmd1YWdlLCB0ZXh0OiBzdHJpbmcpOiBQYXJzZVRyZWUge1xuICBsZXQgdHJlZSA9IGxlemVyVG9QYXJzZVRyZWUodGV4dCwgbGFuZ3VhZ2UucGFyc2VyLnBhcnNlKHRleHQpLnRvcE5vZGUpO1xuICAvLyByZXBsYWNlTm9kZXNNYXRjaGluZyh0cmVlLCAobik6IE1hcmtkb3duVHJlZSB8IHVuZGVmaW5lZCB8IG51bGwgPT4ge1xuICAvLyAgIGlmIChuLnR5cGUgPT09IFwiRmVuY2VkQ29kZVwiKSB7XG4gIC8vICAgICBsZXQgaW5mb04gPSBmaW5kTm9kZU1hdGNoaW5nKG4sIChuKSA9PiBuLnR5cGUgPT09IFwiQ29kZUluZm9cIik7XG4gIC8vICAgICBsZXQgbGFuZ3VhZ2UgPSBpbmZvTiEuY2hpbGRyZW4hWzBdLnRleHQ7XG4gIC8vICAgICBsZXQgdGV4dE4gPSBmaW5kTm9kZU1hdGNoaW5nKG4sIChuKSA9PiBuLnR5cGUgPT09IFwiQ29kZVRleHRcIik7XG4gIC8vICAgICBsZXQgdGV4dCA9IHRleHROIS5jaGlsZHJlbiFbMF0udGV4dCE7XG4gIC8vXG4gIC8vICAgICBjb25zb2xlLmxvZyhsYW5ndWFnZSwgdGV4dCk7XG4gIC8vICAgICBzd2l0Y2ggKGxhbmd1YWdlKSB7XG4gIC8vICAgICAgIGNhc2UgXCJ5YW1sXCI6XG4gIC8vICAgICAgICAgbGV0IHBhcnNlZCA9IFN0cmVhbUxhbmd1YWdlLmRlZmluZSh5YW1sKS5wYXJzZXIucGFyc2UodGV4dCk7XG4gIC8vICAgICAgICAgbGV0IHN1YlRyZWUgPSB0cmVlVG9BU1QodGV4dCwgcGFyc2VkLnRvcE5vZGUsIG4uZnJvbSk7XG4gIC8vICAgICAgICAgLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoc3ViVHJlZSwgbnVsbCwgMikpO1xuICAvLyAgICAgICAgIHN1YlRyZWUudHlwZSA9IFwieWFtbFwiO1xuICAvLyAgICAgICAgIHJldHVybiBzdWJUcmVlO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm47XG4gIC8vIH0pO1xuICByZXR1cm4gdHJlZTtcbn1cbiIsICJpbXBvcnQgeyBTeXNDYWxsTWFwcGluZyB9IGZyb20gXCIuLi8uLi9wbHVnb3Mvc3lzdGVtLnRzXCI7XG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gXCIuLi9wYXJzZV90cmVlLnRzXCI7XG5pbXBvcnQgeyBMYW5ndWFnZSB9IGZyb20gXCIuLi8uLi8uLi9kZXBfY29tbW9uLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFBhcnNlVHJlZSB9IGZyb20gXCIuLi90cmVlLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93blN5c2NhbGxzKGxhbmc6IExhbmd1YWdlKTogU3lzQ2FsbE1hcHBpbmcge1xuICByZXR1cm4ge1xuICAgIFwibWFya2Rvd24ucGFyc2VNYXJrZG93blwiOiAoX2N0eCwgdGV4dDogc3RyaW5nKTogUGFyc2VUcmVlID0+IHtcbiAgICAgIHJldHVybiBwYXJzZShsYW5nLCB0ZXh0KTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IFlBTUwgfSBmcm9tIFwiLi4vLi4vZGVwX2NvbW1vbi50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc2FmZVJ1bihmbjogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICBmbigpLmNhdGNoKChlKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01hY0xpa2UoKSB7XG4gIHJldHVybiAvKE1hY3xpUGhvbmV8aVBvZHxpUGFkKS9pLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlKGZ1bmM6ICgpID0+IHZvaWQsIGxpbWl0OiBudW1iZXIpIHtcbiAgbGV0IHRpbWVyOiBhbnkgPSBudWxsO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGltZXIpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZ1bmMoKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgfSwgbGltaXQpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gVE9ETzogVGhpcyBpcyBuYWl2ZSwgbWF5IGJlIGJldHRlciB0byB1c2UgYSBwcm9wZXIgcGFyc2VyXG5jb25zdCB5YW1sU2V0dGluZ3NSZWdleCA9IC9gYGB5YW1sKFteYF0rKWBgYC87XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVlhbWxTZXR0aW5ncyhzZXR0aW5nc01hcmtkb3duOiBzdHJpbmcpOiB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn0ge1xuICBjb25zdCBtYXRjaCA9IHlhbWxTZXR0aW5nc1JlZ2V4LmV4ZWMoc2V0dGluZ3NNYXJrZG93bik7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgY29uc3QgeWFtbCA9IG1hdGNoWzFdO1xuICByZXR1cm4gWUFNTC5wYXJzZSh5YW1sKSBhcyB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBzYWZlUnVuKGZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIGZuKCkuY2F0Y2goKGU6IGFueSkgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJDYXVnaHQgZXJyb3JcIiwgZS5tZXNzYWdlKTtcblxuICAgIC8vIHRocm93IGU7XG4gIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgTG9nTGV2ZWwgfSBmcm9tIFwiLi9lbnZpcm9ubWVudHMvY3VzdG9tX2xvZ2dlci50c1wiO1xuaW1wb3J0IHtcbiAgQ29udHJvbGxlck1lc3NhZ2UsXG4gIFdvcmtlckxpa2UsXG4gIFdvcmtlck1lc3NhZ2UsXG59IGZyb20gXCIuL2Vudmlyb25tZW50cy93b3JrZXIudHNcIjtcbmltcG9ydCB7IFBsdWcgfSBmcm9tIFwiLi9wbHVnLnRzXCI7XG5cbmV4cG9ydCB0eXBlIFNhbmRib3hGYWN0b3J5PEhvb2tUPiA9IChwbHVnOiBQbHVnPEhvb2tUPikgPT4gU2FuZGJveDtcblxuZXhwb3J0IHR5cGUgTG9nRW50cnkgPSB7XG4gIGxldmVsOiBMb2dMZXZlbDtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkYXRlOiBudW1iZXI7XG59O1xuXG5leHBvcnQgY2xhc3MgU2FuZGJveCB7XG4gIHByb3RlY3RlZCB3b3JrZXI6IFdvcmtlckxpa2U7XG4gIHByb3RlY3RlZCByZXFJZCA9IDA7XG4gIHByb3RlY3RlZCBvdXRzdGFuZGluZ0luaXRzID0gbmV3IE1hcDxzdHJpbmcsICgpID0+IHZvaWQ+KCk7XG4gIHByb3RlY3RlZCBvdXRzdGFuZGluZ0RlcGVuZGVuY3lJbml0cyA9IG5ldyBNYXA8c3RyaW5nLCAoKSA9PiB2b2lkPigpO1xuICBwcm90ZWN0ZWQgb3V0c3RhbmRpbmdJbnZvY2F0aW9ucyA9IG5ldyBNYXA8XG4gICAgbnVtYmVyLFxuICAgIHsgcmVzb2x2ZTogKHJlc3VsdDogYW55KSA9PiB2b2lkOyByZWplY3Q6IChlOiBhbnkpID0+IHZvaWQgfVxuICA+KCk7XG4gIHByb3RlY3RlZCBsb2FkZWRGdW5jdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJvdGVjdGVkIHBsdWc6IFBsdWc8YW55PjtcbiAgcHVibGljIGxvZ0J1ZmZlcjogTG9nRW50cnlbXSA9IFtdO1xuICBwdWJsaWMgbWF4TG9nQnVmZmVyU2l6ZSA9IDEwMDtcblxuICBjb25zdHJ1Y3RvcihwbHVnOiBQbHVnPGFueT4sIHdvcmtlcjogV29ya2VyTGlrZSkge1xuICAgIHdvcmtlci5vbk1lc3NhZ2UgPSB0aGlzLm9uTWVzc2FnZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMud29ya2VyID0gd29ya2VyO1xuICAgIHRoaXMucGx1ZyA9IHBsdWc7XG4gIH1cblxuICBpc0xvYWRlZChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkZWRGdW5jdGlvbnMuaGFzKG5hbWUpO1xuICB9XG5cbiAgYXN5bmMgbG9hZChuYW1lOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMud29ya2VyLnJlYWR5O1xuICAgIGxldCBvdXRzdGFuZGluZ0luaXQgPSB0aGlzLm91dHN0YW5kaW5nSW5pdHMuZ2V0KG5hbWUpO1xuICAgIGlmIChvdXRzdGFuZGluZ0luaXQpIHtcbiAgICAgIC8vIExvYWQgYWxyZWFkeSBpbiBwcm9ncmVzcywgbGV0J3Mgd2FpdCBmb3IgaXQuLi5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzLm91dHN0YW5kaW5nSW5pdHMuc2V0KG5hbWUsICgpID0+IHtcbiAgICAgICAgICBvdXRzdGFuZGluZ0luaXQhKCk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICB0eXBlOiBcImxvYWRcIixcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBjb2RlOiBjb2RlLFxuICAgIH0gYXMgV29ya2VyTWVzc2FnZSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLm91dHN0YW5kaW5nSW5pdHMuc2V0KG5hbWUsICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkZWRGdW5jdGlvbnMuYWRkKG5hbWUpO1xuICAgICAgICB0aGlzLm91dHN0YW5kaW5nSW5pdHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWREZXBlbmRlbmN5KG5hbWU6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY29uc29sZS5sb2coXCJMb2FkaW5nIGRlcGVuZGVuY3lcIiwgbmFtZSk7XG4gICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgdHlwZTogXCJsb2FkLWRlcGVuZGVuY3lcIixcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBjb2RlOiBjb2RlLFxuICAgIH0gYXMgV29ya2VyTWVzc2FnZSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcIkxvYWRlZCBkZXBlbmRlbmN5XCIsIG5hbWUpO1xuICAgICAgdGhpcy5vdXRzdGFuZGluZ0RlcGVuZGVuY3lJbml0cy5zZXQobmFtZSwgKCkgPT4ge1xuICAgICAgICB0aGlzLm91dHN0YW5kaW5nRGVwZW5kZW5jeUluaXRzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvbk1lc3NhZ2UoZGF0YTogQ29udHJvbGxlck1lc3NhZ2UpIHtcbiAgICBzd2l0Y2ggKGRhdGEudHlwZSkge1xuICAgICAgY2FzZSBcImluaXRlZFwiOlxuICAgICAgICBsZXQgaW5pdENiID0gdGhpcy5vdXRzdGFuZGluZ0luaXRzLmdldChkYXRhLm5hbWUhKTtcbiAgICAgICAgaW5pdENiICYmIGluaXRDYigpO1xuICAgICAgICB0aGlzLm91dHN0YW5kaW5nSW5pdHMuZGVsZXRlKGRhdGEubmFtZSEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJkZXBlbmRlbmN5LWluaXRlZFwiOlxuICAgICAgICBsZXQgZGVwSW5pdENiID0gdGhpcy5vdXRzdGFuZGluZ0RlcGVuZGVuY3lJbml0cy5nZXQoZGF0YS5uYW1lISk7XG4gICAgICAgIGRlcEluaXRDYiAmJiBkZXBJbml0Q2IoKTtcbiAgICAgICAgdGhpcy5vdXRzdGFuZGluZ0RlcGVuZGVuY3lJbml0cy5kZWxldGUoZGF0YS5uYW1lISk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInN5c2NhbGxcIjpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5wbHVnLnN5c2NhbGwoZGF0YS5uYW1lISwgZGF0YS5hcmdzISk7XG5cbiAgICAgICAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICB0eXBlOiBcInN5c2NhbGwtcmVzcG9uc2VcIixcbiAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgfSBhcyBXb3JrZXJNZXNzYWdlKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgLy8gY29uc29sZS5lcnJvcihcIlN5c2NhbGwgZmFpbFwiLCBlKTtcbiAgICAgICAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICB0eXBlOiBcInN5c2NhbGwtcmVzcG9uc2VcIixcbiAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgICAgICAgZXJyb3I6IGUubWVzc2FnZSxcbiAgICAgICAgICB9IGFzIFdvcmtlck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInJlc3VsdFwiOlxuICAgICAgICBsZXQgcmVzdWx0Q2JzID0gdGhpcy5vdXRzdGFuZGluZ0ludm9jYXRpb25zLmdldChkYXRhLmlkISk7XG4gICAgICAgIHRoaXMub3V0c3RhbmRpbmdJbnZvY2F0aW9ucy5kZWxldGUoZGF0YS5pZCEpO1xuICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgIHJlc3VsdENicyAmJlxuICAgICAgICAgICAgcmVzdWx0Q2JzLnJlamVjdChcbiAgICAgICAgICAgICAgbmV3IEVycm9yKGAke2RhdGEuZXJyb3J9XFxuU3RhY2sgdHJhY2U6ICR7ZGF0YS5zdGFja31gKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0Q2JzICYmIHJlc3VsdENicy5yZXNvbHZlKGRhdGEucmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsb2dcIjpcbiAgICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaCh7XG4gICAgICAgICAgbGV2ZWw6IGRhdGEubGV2ZWwhLFxuICAgICAgICAgIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSEsXG4gICAgICAgICAgZGF0ZTogRGF0ZS5ub3coKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmxvZ0J1ZmZlci5sZW5ndGggPiB0aGlzLm1heExvZ0J1ZmZlclNpemUpIHtcbiAgICAgICAgICB0aGlzLmxvZ0J1ZmZlci5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBbU2FuZGJveCAke2RhdGEubGV2ZWx9XWAsIGRhdGEubWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlVua25vd24gbWVzc2FnZSB0eXBlXCIsIGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGludm9rZShuYW1lOiBzdHJpbmcsIGFyZ3M6IGFueVtdKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0aGlzLnJlcUlkKys7XG4gICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgdHlwZTogXCJpbnZva2VcIixcbiAgICAgIGlkOiB0aGlzLnJlcUlkLFxuICAgICAgbmFtZSxcbiAgICAgIGFyZ3MsXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMub3V0c3RhbmRpbmdJbnZvY2F0aW9ucy5zZXQodGhpcy5yZXFJZCwgeyByZXNvbHZlLCByZWplY3QgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzdG9wKCkge1xuICAgIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgc2FmZVJ1biB9IGZyb20gXCIuLi91dGlsLnRzXCI7XG5pbXBvcnQgeyBTYW5kYm94IH0gZnJvbSBcIi4uL3NhbmRib3gudHNcIjtcbmltcG9ydCB7IFdvcmtlckxpa2UgfSBmcm9tIFwiLi93b3JrZXIudHNcIjtcbmltcG9ydCB0eXBlIHsgUGx1ZyB9IGZyb20gXCIuLi9wbHVnLnRzXCI7XG5cbmNsYXNzIFdlYldvcmtlcldyYXBwZXIgaW1wbGVtZW50cyBXb3JrZXJMaWtlIHtcbiAgcHJpdmF0ZSB3b3JrZXI6IFdvcmtlcjtcbiAgb25NZXNzYWdlPzogKG1lc3NhZ2U6IGFueSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVhZHk6IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3Iod29ya2VyOiBXb3JrZXIpIHtcbiAgICB0aGlzLndvcmtlciA9IHdvcmtlcjtcbiAgICB0aGlzLndvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoZXZ0OiBhbnkpID0+IHtcbiAgICAgIGxldCBkYXRhID0gZXZ0LmRhdGE7XG4gICAgICBpZiAoIWRhdGEpIHJldHVybjtcbiAgICAgIHNhZmVSdW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLm9uTWVzc2FnZSEoZGF0YSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlYWR5ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgcG9zdE1lc3NhZ2UobWVzc2FnZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy53b3JrZXIucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cblxuICB0ZXJtaW5hdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMud29ya2VyLnRlcm1pbmF0ZSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTYW5kYm94KHBsdWc6IFBsdWc8YW55Pikge1xuICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKFxuICAgIGltcG9ydC5tZXRhLnVybFxuICAgICAgPyBuZXcgVVJMKFwic2FuZGJveF93b3JrZXIudHNcIiwgaW1wb3J0Lm1ldGEudXJsKVxuICAgICAgOiBuZXcgVVJMKFwid29ya2VyLmpzXCIsIGxvY2F0aW9uLm9yaWdpbiksXG4gICAge1xuICAgICAgdHlwZTogXCJtb2R1bGVcIixcbiAgICB9LFxuICApO1xuICByZXR1cm4gbmV3IFNhbmRib3gocGx1ZywgbmV3IFdlYldvcmtlcldyYXBwZXIod29ya2VyKSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBIb29rLCBNYW5pZmVzdCB9IGZyb20gXCIuLi90eXBlcy50c1wiO1xuaW1wb3J0IHsgU3lzdGVtIH0gZnJvbSBcIi4uL3N5c3RlbS50c1wiO1xuaW1wb3J0IHsgc2FmZVJ1biB9IGZyb20gXCIuLi91dGlsLnRzXCI7XG5cbi8vIFN5c3RlbSBldmVudHM6XG4vLyAtIHBsdWc6bG9hZCAocGx1Z05hbWU6IHN0cmluZylcblxuZXhwb3J0IHR5cGUgRXZlbnRIb29rVCA9IHtcbiAgZXZlbnRzPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgY2xhc3MgRXZlbnRIb29rIGltcGxlbWVudHMgSG9vazxFdmVudEhvb2tUPiB7XG4gIHByaXZhdGUgc3lzdGVtPzogU3lzdGVtPEV2ZW50SG9va1Q+O1xuICBwdWJsaWMgbG9jYWxMaXN0ZW5lcnM6IE1hcDxzdHJpbmcsICgoZGF0YTogYW55KSA9PiBhbnkpW10+ID0gbmV3IE1hcCgpO1xuXG4gIGFkZExvY2FsTGlzdGVuZXIoZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiBhbnkpIHtcbiAgICBpZiAoIXRoaXMubG9jYWxMaXN0ZW5lcnMuaGFzKGV2ZW50TmFtZSkpIHtcbiAgICAgIHRoaXMubG9jYWxMaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZSwgW10pO1xuICAgIH1cbiAgICB0aGlzLmxvY2FsTGlzdGVuZXJzLmdldChldmVudE5hbWUpIS5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFB1bGwgYWxsIGV2ZW50cyBsaXN0ZW5lZCB0b1xuICBsaXN0RXZlbnRzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuc3lzdGVtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFdmVudCBob29rIGlzIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICB9XG4gICAgbGV0IGV2ZW50TmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IHBsdWcgb2YgdGhpcy5zeXN0ZW0ubG9hZGVkUGx1Z3MudmFsdWVzKCkpIHtcbiAgICAgIGZvciAoY29uc3QgZnVuY3Rpb25EZWYgb2YgT2JqZWN0LnZhbHVlcyhwbHVnLm1hbmlmZXN0IS5mdW5jdGlvbnMpKSB7XG4gICAgICAgIGlmIChmdW5jdGlvbkRlZi5ldmVudHMpIHtcbiAgICAgICAgICBmb3IgKGxldCBldmVudE5hbWUgb2YgZnVuY3Rpb25EZWYuZXZlbnRzKSB7XG4gICAgICAgICAgICBldmVudE5hbWVzLmFkZChldmVudE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBldmVudE5hbWUgb2YgdGhpcy5sb2NhbExpc3RlbmVycy5rZXlzKCkpIHtcbiAgICAgIGV2ZW50TmFtZXMuYWRkKGV2ZW50TmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFsuLi5ldmVudE5hbWVzXTtcbiAgfVxuXG4gIGFzeW5jIGRpc3BhdGNoRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIGRhdGE/OiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgaWYgKCF0aGlzLnN5c3RlbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXZlbnQgaG9vayBpcyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgfVxuICAgIGxldCByZXNwb25zZXM6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBwbHVnIG9mIHRoaXMuc3lzdGVtLmxvYWRlZFBsdWdzLnZhbHVlcygpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBmdW5jdGlvbkRlZl0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIHBsdWcubWFuaWZlc3QhLmZ1bmN0aW9uc1xuICAgICAgKSkge1xuICAgICAgICBpZiAoZnVuY3Rpb25EZWYuZXZlbnRzICYmIGZ1bmN0aW9uRGVmLmV2ZW50cy5pbmNsdWRlcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgLy8gT25seSBkaXNwYXRjaCBmdW5jdGlvbnMgdGhhdCBjYW4gcnVuIGluIHRoaXMgZW52aXJvbm1lbnRcbiAgICAgICAgICBpZiAocGx1Zy5jYW5JbnZva2UobmFtZSkpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBwbHVnLmludm9rZShuYW1lLCBbZGF0YV0pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBsb2NhbExpc3RlbmVycyA9IHRoaXMubG9jYWxMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgaWYgKGxvY2FsTGlzdGVuZXJzKSB7XG4gICAgICBmb3IgKGxldCBsb2NhbExpc3RlbmVyIG9mIGxvY2FsTGlzdGVuZXJzKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUobG9jYWxMaXN0ZW5lcihkYXRhKSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICByZXNwb25zZXMucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlcztcbiAgfVxuXG4gIGFwcGx5KHN5c3RlbTogU3lzdGVtPEV2ZW50SG9va1Q+KTogdm9pZCB7XG4gICAgdGhpcy5zeXN0ZW0gPSBzeXN0ZW07XG4gICAgdGhpcy5zeXN0ZW0ub24oe1xuICAgICAgcGx1Z0xvYWRlZDogKHBsdWcpID0+IHtcbiAgICAgICAgc2FmZVJ1bihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaEV2ZW50KFwicGx1Zzpsb2FkXCIsIHBsdWcubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlTWFuaWZlc3QobWFuaWZlc3Q6IE1hbmlmZXN0PEV2ZW50SG9va1Q+KTogc3RyaW5nW10ge1xuICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBmdW5jdGlvbkRlZl0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICBtYW5pZmVzdC5mdW5jdGlvbnMgfHwge31cbiAgICApKSB7XG4gICAgICBpZiAoZnVuY3Rpb25EZWYuZXZlbnRzICYmICFBcnJheS5pc0FycmF5KGZ1bmN0aW9uRGVmLmV2ZW50cykpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXCInZXZlbnRzJyBrZXkgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgU3lzQ2FsbE1hcHBpbmcgfSBmcm9tIFwiLi4vc3lzdGVtLnRzXCI7XG5pbXBvcnQgeyBFdmVudEhvb2sgfSBmcm9tIFwiLi4vaG9va3MvZXZlbnQudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50U3lzY2FsbHMoZXZlbnRIb29rOiBFdmVudEhvb2spOiBTeXNDYWxsTWFwcGluZyB7XG4gIHJldHVybiB7XG4gICAgXCJldmVudC5kaXNwYXRjaFwiOiAoY3R4LCBldmVudE5hbWU6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZXZlbnRIb29rLmRpc3BhdGNoRXZlbnQoZXZlbnROYW1lLCBkYXRhKTtcbiAgICB9LFxuICAgIFwiZXZlbnQubGlzdFwiOiAoKSA9PiB7XG4gICAgICByZXR1cm4gZXZlbnRIb29rLmxpc3RFdmVudHMoKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IExvZ0VudHJ5IH0gZnJvbSBcIi4uL3NhbmRib3gudHNcIjtcbmltcG9ydCB7IFN5c0NhbGxNYXBwaW5nLCBTeXN0ZW0gfSBmcm9tIFwiLi4vc3lzdGVtLnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNhbmRib3hTeXNjYWxscyhzeXN0ZW06IFN5c3RlbTxhbnk+KTogU3lzQ2FsbE1hcHBpbmcge1xuICByZXR1cm4ge1xuICAgIFwic2FuZGJveC5nZXRMb2dzXCI6ICgpOiBMb2dFbnRyeVtdID0+IHtcbiAgICAgIGxldCBhbGxMb2dzOiBMb2dFbnRyeVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHBsdWcgb2Ygc3lzdGVtLmxvYWRlZFBsdWdzLnZhbHVlcygpKSB7XG4gICAgICAgIGFsbExvZ3MgPSBhbGxMb2dzLmNvbmNhdChwbHVnLnNhbmRib3gubG9nQnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIGFsbExvZ3MgPSBhbGxMb2dzLnNvcnQoKGEsIGIpID0+IGEuZGF0ZSAtIGIuZGF0ZSk7XG4gICAgICByZXR1cm4gYWxsTG9ncztcbiAgICB9LFxuICB9O1xufVxuIiwgImV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFdmVudEVtaXR0ZXI8SGFuZGxlclQ+IHtcbiAgcHJpdmF0ZSBoYW5kbGVyczogUGFydGlhbDxIYW5kbGVyVD5bXSA9IFtdO1xuXG4gIG9uKGhhbmRsZXJzOiBQYXJ0aWFsPEhhbmRsZXJUPikge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaChoYW5kbGVycyk7XG4gIH1cblxuICBvZmYoaGFuZGxlcnM6IFBhcnRpYWw8SGFuZGxlclQ+KSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IHRoaXMuaGFuZGxlcnMuZmlsdGVyKChoKSA9PiBoICE9PSBoYW5kbGVycyk7XG4gIH1cblxuICBhc3luYyBlbWl0KGV2ZW50TmFtZToga2V5b2YgSGFuZGxlclQsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGZuOiBhbnkgPSBoYW5kbGVyW2V2ZW50TmFtZV07XG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGZuKC4uLmFyZ3MpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBNYW5pZmVzdCwgUnVudGltZUVudmlyb25tZW50IH0gZnJvbSBcIi4vdHlwZXMudHNcIjtcbmltcG9ydCB7IFNhbmRib3ggfSBmcm9tIFwiLi9zYW5kYm94LnRzXCI7XG5pbXBvcnQgeyBTeXN0ZW0gfSBmcm9tIFwiLi9zeXN0ZW0udHNcIjtcblxuZXhwb3J0IGNsYXNzIFBsdWc8SG9va1Q+IHtcbiAgc3lzdGVtOiBTeXN0ZW08SG9va1Q+O1xuICBzYW5kYm94OiBTYW5kYm94O1xuICBwdWJsaWMgbWFuaWZlc3Q/OiBNYW5pZmVzdDxIb29rVD47XG4gIHJlYWRvbmx5IHJ1bnRpbWVFbnY6IFJ1bnRpbWVFbnZpcm9ubWVudDtcbiAgZ3JhbnRlZFBlcm1pc3Npb25zOiBzdHJpbmdbXSA9IFtdO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzeXN0ZW06IFN5c3RlbTxIb29rVD4sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHNhbmRib3hGYWN0b3J5OiAocGx1ZzogUGx1ZzxIb29rVD4pID0+IFNhbmRib3hcbiAgKSB7XG4gICAgdGhpcy5zeXN0ZW0gPSBzeXN0ZW07XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnNhbmRib3ggPSBzYW5kYm94RmFjdG9yeSh0aGlzKTtcbiAgICB0aGlzLnJ1bnRpbWVFbnYgPSBzeXN0ZW0ucnVudGltZUVudjtcbiAgICB0aGlzLnZlcnNpb24gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWQobWFuaWZlc3Q6IE1hbmlmZXN0PEhvb2tUPikge1xuICAgIHRoaXMubWFuaWZlc3QgPSBtYW5pZmVzdDtcbiAgICAvLyBUT0RPOiBUaGVzZSBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgZ3JhbnRlZCwgbm90IGp1c3QgdGFrZW5cbiAgICB0aGlzLmdyYW50ZWRQZXJtaXNzaW9ucyA9IG1hbmlmZXN0LnJlcXVpcmVkUGVybWlzc2lvbnMgfHwgW107XG4gICAgZm9yIChjb25zdCBbZGVwLCBjb2RlXSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5kZXBlbmRlbmNpZXMgfHwge30pKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhbmRib3gubG9hZERlcGVuZGVuY3koZGVwLCBjb2RlKTtcbiAgICB9XG4gIH1cblxuICBzeXNjYWxsKG5hbWU6IHN0cmluZywgYXJnczogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnN5c3RlbS5zeXNjYWxsV2l0aENvbnRleHQoeyBwbHVnOiB0aGlzIH0sIG5hbWUsIGFyZ3MpO1xuICB9XG5cbiAgY2FuSW52b2tlKG5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5tYW5pZmVzdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBmdW5EZWYgPSB0aGlzLm1hbmlmZXN0LmZ1bmN0aW9uc1tuYW1lXTtcbiAgICBpZiAoIWZ1bkRlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiAke25hbWV9IG5vdCBmb3VuZCBpbiBtYW5pZmVzdGApO1xuICAgIH1cbiAgICByZXR1cm4gIWZ1bkRlZi5lbnYgfHwgZnVuRGVmLmVudiA9PT0gdGhpcy5ydW50aW1lRW52O1xuICB9XG5cbiAgYXN5bmMgaW52b2tlKG5hbWU6IHN0cmluZywgYXJnczogQXJyYXk8YW55Pik6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0aGlzLnNhbmRib3guaXNMb2FkZWQobmFtZSkpIHtcbiAgICAgIGNvbnN0IGZ1bkRlZiA9IHRoaXMubWFuaWZlc3QhLmZ1bmN0aW9uc1tuYW1lXTtcbiAgICAgIGlmICghZnVuRGVmKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gJHtuYW1lfSBub3QgZm91bmQgaW4gbWFuaWZlc3RgKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jYW5JbnZva2UobmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGdW5jdGlvbiAke25hbWV9IGlzIG5vdCBhdmFpbGFibGUgaW4gJHt0aGlzLnJ1bnRpbWVFbnZ9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5zYW5kYm94LmxvYWQobmFtZSwgZnVuRGVmLmNvZGUhKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2FuZGJveC5pbnZva2UobmFtZSwgYXJncyk7XG4gIH1cblxuICBhc3luYyBzdG9wKCkge1xuICAgIHRoaXMuc2FuZGJveC5zdG9wKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBIb29rLCBNYW5pZmVzdCwgUnVudGltZUVudmlyb25tZW50IH0gZnJvbSBcIi4vdHlwZXMudHNcIjtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCIuL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBTYW5kYm94RmFjdG9yeSB9IGZyb20gXCIuL3NhbmRib3gudHNcIjtcbmltcG9ydCB7IFBsdWcgfSBmcm9tIFwiLi9wbHVnLnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3lzQ2FsbE1hcHBpbmcge1xuICBba2V5OiBzdHJpbmddOiAoY3R4OiBTeXNjYWxsQ29udGV4dCwgLi4uYXJnczogYW55KSA9PiBQcm9taXNlPGFueT4gfCBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIFN5c3RlbUpTT048SG9va1Q+ID0gTWFuaWZlc3Q8SG9va1Q+W107XG5cbmV4cG9ydCB0eXBlIFN5c3RlbUV2ZW50czxIb29rVD4gPSB7XG4gIHBsdWdMb2FkZWQ6IChwbHVnOiBQbHVnPEhvb2tUPikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIHBsdWdVbmxvYWRlZDogKG5hbWU6IHN0cmluZykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBTeXNjYWxsQ29udGV4dCA9IHtcbiAgcGx1ZzogUGx1Zzxhbnk+O1xufTtcblxudHlwZSBTeXNjYWxsU2lnbmF0dXJlID0gKFxuICBjdHg6IFN5c2NhbGxDb250ZXh0LFxuICAuLi5hcmdzOiBhbnlbXVxuKSA9PiBQcm9taXNlPGFueT4gfCBhbnk7XG5cbnR5cGUgU3lzY2FsbCA9IHtcbiAgcmVxdWlyZWRQZXJtaXNzaW9uczogc3RyaW5nW107XG4gIGNhbGxiYWNrOiBTeXNjYWxsU2lnbmF0dXJlO1xufTtcblxuZXhwb3J0IGNsYXNzIFN5c3RlbTxIb29rVD4gZXh0ZW5kcyBFdmVudEVtaXR0ZXI8U3lzdGVtRXZlbnRzPEhvb2tUPj4ge1xuICByZWFkb25seSBydW50aW1lRW52OiBSdW50aW1lRW52aXJvbm1lbnQ7XG4gIHByb3RlY3RlZCBwbHVncyA9IG5ldyBNYXA8c3RyaW5nLCBQbHVnPEhvb2tUPj4oKTtcbiAgcHJvdGVjdGVkIHJlZ2lzdGVyZWRTeXNjYWxscyA9IG5ldyBNYXA8c3RyaW5nLCBTeXNjYWxsPigpO1xuICBwcm90ZWN0ZWQgZW5hYmxlZEhvb2tzID0gbmV3IFNldDxIb29rPEhvb2tUPj4oKTtcblxuICBjb25zdHJ1Y3RvcihlbnY6IFJ1bnRpbWVFbnZpcm9ubWVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5ydW50aW1lRW52ID0gZW52O1xuICB9XG5cbiAgZ2V0IGxvYWRlZFBsdWdzKCk6IE1hcDxzdHJpbmcsIFBsdWc8SG9va1Q+PiB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z3M7XG4gIH1cblxuICBhZGRIb29rKGZlYXR1cmU6IEhvb2s8SG9va1Q+KSB7XG4gICAgdGhpcy5lbmFibGVkSG9va3MuYWRkKGZlYXR1cmUpO1xuICAgIGZlYXR1cmUuYXBwbHkodGhpcyk7XG4gIH1cblxuICByZWdpc3RlclN5c2NhbGxzKFxuICAgIHJlcXVpcmVkQ2FwYWJpbGl0aWVzOiBzdHJpbmdbXSxcbiAgICAuLi5yZWdpc3RyYXRpb25PYmplY3RzOiBTeXNDYWxsTWFwcGluZ1tdXG4gICkge1xuICAgIGZvciAoY29uc3QgcmVnaXN0cmF0aW9uT2JqZWN0IG9mIHJlZ2lzdHJhdGlvbk9iamVjdHMpIHtcbiAgICAgIGZvciAobGV0IFtuYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMocmVnaXN0cmF0aW9uT2JqZWN0KSkge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWRTeXNjYWxscy5zZXQobmFtZSwge1xuICAgICAgICAgIHJlcXVpcmVkUGVybWlzc2lvbnM6IHJlcXVpcmVkQ2FwYWJpbGl0aWVzLFxuICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzeXNjYWxsV2l0aENvbnRleHQoXG4gICAgY3R4OiBTeXNjYWxsQ29udGV4dCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzeXNjYWxsID0gdGhpcy5yZWdpc3RlcmVkU3lzY2FsbHMuZ2V0KG5hbWUpO1xuICAgIGlmICghc3lzY2FsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFVucmVnaXN0ZXJlZCBzeXNjYWxsICR7bmFtZX1gKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIHN5c2NhbGwucmVxdWlyZWRQZXJtaXNzaW9ucykge1xuICAgICAgaWYgKCFjdHgucGx1Zykge1xuICAgICAgICB0aHJvdyBFcnJvcihgU3lzY2FsbCAke25hbWV9IHJlcXVpcmVzIHBlcm1pc3Npb24gYW5kIG5vIHBsdWcgaXMgc2V0YCk7XG4gICAgICB9XG4gICAgICBpZiAoIWN0eC5wbHVnLmdyYW50ZWRQZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uKSkge1xuICAgICAgICB0aHJvdyBFcnJvcihgTWlzc2luZyBwZXJtaXNzaW9uICcke3Blcm1pc3Npb259JyBmb3Igc3lzY2FsbCAke25hbWV9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3lzY2FsbC5jYWxsYmFjayhjdHgsIC4uLmFyZ3MpKTtcbiAgfVxuXG4gIGxvY2FsU3lzY2FsbChcbiAgICBjb250ZXh0UGx1Z05hbWU6IHN0cmluZyxcbiAgICBzeXNjYWxsTmFtZTogc3RyaW5nLFxuICAgIGFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc3lzY2FsbFdpdGhDb250ZXh0KFxuICAgICAgLy8gTW9jayB0aGUgcGx1Z1xuICAgICAgeyBwbHVnOiB7IG5hbWU6IGNvbnRleHRQbHVnTmFtZSB9IGFzIGFueSB9LFxuICAgICAgc3lzY2FsbE5hbWUsXG4gICAgICBhcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoXG4gICAgbWFuaWZlc3Q6IE1hbmlmZXN0PEhvb2tUPixcbiAgICBzYW5kYm94RmFjdG9yeTogU2FuZGJveEZhY3Rvcnk8SG9va1Q+XG4gICk6IFByb21pc2U8UGx1ZzxIb29rVD4+IHtcbiAgICBjb25zdCBuYW1lID0gbWFuaWZlc3QubmFtZTtcbiAgICBpZiAodGhpcy5wbHVncy5oYXMobmFtZSkpIHtcbiAgICAgIGF3YWl0IHRoaXMudW5sb2FkKG5hbWUpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZVxuICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHRoaXMuZW5hYmxlZEhvb2tzKSB7XG4gICAgICBlcnJvcnMgPSBbLi4uZXJyb3JzLCAuLi5mZWF0dXJlLnZhbGlkYXRlTWFuaWZlc3QobWFuaWZlc3QpXTtcbiAgICB9XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbWFuaWZlc3Q6ICR7ZXJyb3JzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG4gICAgLy8gT2ssIGxldCdzIGxvYWQgdGhpcyB0aGluZyFcbiAgICBjb25zdCBwbHVnID0gbmV3IFBsdWcodGhpcywgbmFtZSwgc2FuZGJveEZhY3RvcnkpO1xuICAgIGNvbnNvbGUubG9nKFwiTG9hZGluZ1wiLCBuYW1lKTtcbiAgICBhd2FpdCBwbHVnLmxvYWQobWFuaWZlc3QpO1xuICAgIHRoaXMucGx1Z3Muc2V0KG5hbWUsIHBsdWcpO1xuICAgIGF3YWl0IHRoaXMuZW1pdChcInBsdWdMb2FkZWRcIiwgcGx1Zyk7XG4gICAgcmV0dXJuIHBsdWc7XG4gIH1cblxuICBhc3luYyB1bmxvYWQobmFtZTogc3RyaW5nKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJVbmxvYWRpbmdcIiwgbmFtZSk7XG4gICAgY29uc3QgcGx1ZyA9IHRoaXMucGx1Z3MuZ2V0KG5hbWUpO1xuICAgIGlmICghcGx1Zykge1xuICAgICAgdGhyb3cgRXJyb3IoYFBsdWcgJHtuYW1lfSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgYXdhaXQgcGx1Zy5zdG9wKCk7XG4gICAgdGhpcy5lbWl0KFwicGx1Z1VubG9hZGVkXCIsIG5hbWUpO1xuICAgIHRoaXMucGx1Z3MuZGVsZXRlKG5hbWUpO1xuICB9XG5cbiAgdG9KU09OKCk6IFN5c3RlbUpTT048SG9va1Q+IHtcbiAgICBsZXQgcGx1Z0pTT046IE1hbmlmZXN0PEhvb2tUPltdID0gW107XG4gICAgZm9yIChsZXQgW25hbWUsIHBsdWddIG9mIHRoaXMucGx1Z3MpIHtcbiAgICAgIGlmICghcGx1Zy5tYW5pZmVzdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHBsdWdKU09OLnB1c2gocGx1Zy5tYW5pZmVzdCk7XG4gICAgfVxuICAgIHJldHVybiBwbHVnSlNPTjtcbiAgfVxuXG4gIGFzeW5jIHJlcGxhY2VBbGxGcm9tSlNPTihcbiAgICBqc29uOiBTeXN0ZW1KU09OPEhvb2tUPixcbiAgICBzYW5kYm94RmFjdG9yeTogU2FuZGJveEZhY3Rvcnk8SG9va1Q+XG4gICkge1xuICAgIGF3YWl0IHRoaXMudW5sb2FkQWxsKCk7XG4gICAgZm9yIChsZXQgbWFuaWZlc3Qgb2YganNvbikge1xuICAgICAgLy8gY29uc29sZS5sb2coXCJMb2FkaW5nIHBsdWdcIiwgbWFuaWZlc3QubmFtZSk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWQobWFuaWZlc3QsIHNhbmRib3hGYWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1bmxvYWRBbGwoKTogUHJvbWlzZTx2b2lkW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBBcnJheS5mcm9tKHRoaXMucGx1Z3Mua2V5cygpKS5tYXAodGhpcy51bmxvYWQuYmluZCh0aGlzKSlcbiAgICApO1xuICB9XG59XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlQDYuMi4wKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmZ1bmN0aW9uIGF0KG4sdCl7dmFyIGE9T2JqZWN0LmtleXMobik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKTt0JiYoZT1lLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHIpLmVudW1lcmFibGV9KSksYS5wdXNoLmFwcGx5KGEsZSl9cmV0dXJuIGF9ZnVuY3Rpb24gYyhuKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgYT1hcmd1bWVudHNbdF0hPW51bGw/YXJndW1lbnRzW3RdOnt9O3QlMj9hdChPYmplY3QoYSksITApLmZvckVhY2goZnVuY3Rpb24oZSl7eShuLGUsYVtlXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTphdChPYmplY3QoYSkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZSkpfSl9cmV0dXJuIG59ZnVuY3Rpb24ga24obil7cmV0dXJuIGtuPXR5cGVvZiBTeW1ib2w9PVwiZnVuY3Rpb25cIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09XCJzeW1ib2xcIj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgU3ltYm9sPT1cImZ1bmN0aW9uXCImJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIHR9LGtuKG4pfWZ1bmN0aW9uIGFhKG4sdCl7aWYoIShuIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBldChuLHQpe2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgZT10W2FdO2UuZW51bWVyYWJsZT1lLmVudW1lcmFibGV8fCExLGUuY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIGUmJihlLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLmtleSxlKX19ZnVuY3Rpb24gZWEobix0LGEpe3JldHVybiB0JiZldChuLnByb3RvdHlwZSx0KSxhJiZldChuLGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksbn1mdW5jdGlvbiB5KG4sdCxhKXtyZXR1cm4gdCBpbiBuP09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpuW3RdPWEsbn1mdW5jdGlvbiBXbihuLHQpe3JldHVybiBpYShuKXx8c2Eobix0KXx8Q3Qobix0KXx8bGEoKX1mdW5jdGlvbiBvbihuKXtyZXR1cm4gcmEobil8fG9hKG4pfHxDdChuKXx8ZmEoKX1mdW5jdGlvbiByYShuKXtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiBUbihuKX1mdW5jdGlvbiBpYShuKXtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiBufWZ1bmN0aW9uIG9hKG4pe2lmKHR5cGVvZiBTeW1ib2w8XCJ1XCImJm5bU3ltYm9sLml0ZXJhdG9yXSE9bnVsbHx8bltcIkBAaXRlcmF0b3JcIl0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20obil9ZnVuY3Rpb24gc2Eobix0KXt2YXIgYT1uPT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDxcInVcIiYmbltTeW1ib2wuaXRlcmF0b3JdfHxuW1wiQEBpdGVyYXRvclwiXTtpZihhIT1udWxsKXt2YXIgZT1bXSxyPSEwLG89ITEsaSxzO3RyeXtmb3IoYT1hLmNhbGwobik7IShyPShpPWEubmV4dCgpKS5kb25lKSYmKGUucHVzaChpLnZhbHVlKSwhKHQmJmUubGVuZ3RoPT09dCkpO3I9ITApO31jYXRjaChmKXtvPSEwLHM9Zn1maW5hbGx5e3RyeXshciYmYS5yZXR1cm4hPW51bGwmJmEucmV0dXJuKCl9ZmluYWxseXtpZihvKXRocm93IHN9fXJldHVybiBlfX1mdW5jdGlvbiBDdChuLHQpe2lmKCEhbil7aWYodHlwZW9mIG49PVwic3RyaW5nXCIpcmV0dXJuIFRuKG4sdCk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pLnNsaWNlKDgsLTEpO2lmKGE9PT1cIk9iamVjdFwiJiZuLmNvbnN0cnVjdG9yJiYoYT1uLmNvbnN0cnVjdG9yLm5hbWUpLGE9PT1cIk1hcFwifHxhPT09XCJTZXRcIilyZXR1cm4gQXJyYXkuZnJvbShuKTtpZihhPT09XCJBcmd1bWVudHNcInx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoYSkpcmV0dXJuIFRuKG4sdCl9fWZ1bmN0aW9uIFRuKG4sdCl7KHQ9PW51bGx8fHQ+bi5sZW5ndGgpJiYodD1uLmxlbmd0aCk7Zm9yKHZhciBhPTAsZT1uZXcgQXJyYXkodCk7YTx0O2ErKyllW2FdPW5bYV07cmV0dXJuIGV9ZnVuY3Rpb24gZmEoKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBsYSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9dmFyIHJ0PWZ1bmN0aW9uKCl7fSxIbj17fSxJdD17fSxOdD1udWxsLF90PXttYXJrOnJ0LG1lYXN1cmU6cnR9O3RyeXt0eXBlb2YgZG9jdW1lbnQ8XCJ1XCImJihIbj13aW5kb3cpLHR5cGVvZiBkb2N1bWVudDxcInVcIiYmKEl0PWRvY3VtZW50KSx0eXBlb2YgTXV0YXRpb25PYnNlcnZlcjxcInVcIiYmKE50PU11dGF0aW9uT2JzZXJ2ZXIpLHR5cGVvZiBwZXJmb3JtYW5jZTxcInVcIiYmKF90PXBlcmZvcm1hbmNlKX1jYXRjaHt9dmFyIGNhPUhuLm5hdmlnYXRvcnx8e30saXQ9Y2EudXNlckFnZW50LG90PWl0PT09dm9pZCAwP1wiXCI6aXQsRD1IbixiPUl0LHN0PU50LGxuPV90LE1lPSEhRC5kb2N1bWVudCxMPSEhYi5kb2N1bWVudEVsZW1lbnQmJiEhYi5oZWFkJiZ0eXBlb2YgYi5hZGRFdmVudExpc3RlbmVyPT1cImZ1bmN0aW9uXCImJnR5cGVvZiBiLmNyZWF0ZUVsZW1lbnQ9PVwiZnVuY3Rpb25cIixUdD1+b3QuaW5kZXhPZihcIk1TSUVcIil8fH5vdC5pbmRleE9mKFwiVHJpZGVudC9cIiksY24sdW4sbW4sZG4sdm4sXz1cIl9fX0ZPTlRfQVdFU09NRV9fX1wiLE1uPTE2LE10PVwiZmFcIixMdD1cInN2Zy1pbmxpbmUtLWZhXCIsSD1cImRhdGEtZmEtaTJzdmdcIixMbj1cImRhdGEtZmEtcHNldWRvLWVsZW1lbnRcIix1YT1cImRhdGEtZmEtcHNldWRvLWVsZW1lbnQtcGVuZGluZ1wiLEduPVwiZGF0YS1wcmVmaXhcIixYbj1cImRhdGEtaWNvblwiLGZ0PVwiZm9udGF3ZXNvbWUtaTJzdmdcIixtYT1cImFzeW5jXCIsZGE9W1wiSFRNTFwiLFwiSEVBRFwiLFwiU1RZTEVcIixcIlNDUklQVFwiXSxSdD1mdW5jdGlvbigpe3RyeXtyZXR1cm4hMH1jYXRjaHtyZXR1cm4hMX19KCksZz1cImNsYXNzaWNcIixoPVwic2hhcnBcIixCbj1bZyxoXTtmdW5jdGlvbiBzbihuKXtyZXR1cm4gbmV3IFByb3h5KG4se2dldDpmdW5jdGlvbihhLGUpe3JldHVybiBlIGluIGE/YVtlXTphW2ddfX0pfXZhciBubj1zbigoY249e30seShjbixnLHtmYTpcInNvbGlkXCIsZmFzOlwic29saWRcIixcImZhLXNvbGlkXCI6XCJzb2xpZFwiLGZhcjpcInJlZ3VsYXJcIixcImZhLXJlZ3VsYXJcIjpcInJlZ3VsYXJcIixmYWw6XCJsaWdodFwiLFwiZmEtbGlnaHRcIjpcImxpZ2h0XCIsZmF0OlwidGhpblwiLFwiZmEtdGhpblwiOlwidGhpblwiLGZhZDpcImR1b3RvbmVcIixcImZhLWR1b3RvbmVcIjpcImR1b3RvbmVcIixmYWI6XCJicmFuZHNcIixcImZhLWJyYW5kc1wiOlwiYnJhbmRzXCIsZmFrOlwia2l0XCIsXCJmYS1raXRcIjpcImtpdFwifSkseShjbixoLHtmYTpcInNvbGlkXCIsZmFzczpcInNvbGlkXCIsXCJmYS1zb2xpZFwiOlwic29saWRcIn0pLGNuKSksdG49c24oKHVuPXt9LHkodW4sZyx7c29saWQ6XCJmYXNcIixyZWd1bGFyOlwiZmFyXCIsbGlnaHQ6XCJmYWxcIix0aGluOlwiZmF0XCIsZHVvdG9uZTpcImZhZFwiLGJyYW5kczpcImZhYlwiLGtpdDpcImZha1wifSkseSh1bixoLHtzb2xpZDpcImZhc3NcIn0pLHVuKSksYW49c24oKG1uPXt9LHkobW4sZyx7ZmFiOlwiZmEtYnJhbmRzXCIsZmFkOlwiZmEtZHVvdG9uZVwiLGZhazpcImZhLWtpdFwiLGZhbDpcImZhLWxpZ2h0XCIsZmFyOlwiZmEtcmVndWxhclwiLGZhczpcImZhLXNvbGlkXCIsZmF0OlwiZmEtdGhpblwifSkseShtbixoLHtmYXNzOlwiZmEtc29saWRcIn0pLG1uKSksdmE9c24oKGRuPXt9LHkoZG4sZyx7XCJmYS1icmFuZHNcIjpcImZhYlwiLFwiZmEtZHVvdG9uZVwiOlwiZmFkXCIsXCJmYS1raXRcIjpcImZha1wiLFwiZmEtbGlnaHRcIjpcImZhbFwiLFwiZmEtcmVndWxhclwiOlwiZmFyXCIsXCJmYS1zb2xpZFwiOlwiZmFzXCIsXCJmYS10aGluXCI6XCJmYXRcIn0pLHkoZG4saCx7XCJmYS1zb2xpZFwiOlwiZmFzc1wifSksZG4pKSxwYT0vZmEoc3xyfGx8dHxkfGJ8a3xzcyk/W1xcLVxcIF0vLEZ0PVwiZmEtbGF5ZXJzLXRleHRcIixnYT0vRm9udCA/QXdlc29tZSA/KFs1NiBdKikoU29saWR8UmVndWxhcnxMaWdodHxUaGlufER1b3RvbmV8QnJhbmRzfEZyZWV8UHJvfFNoYXJwfEtpdCk/LiovaSxiYT1zbigodm49e30seSh2bixnLHs5MDA6XCJmYXNcIiw0MDA6XCJmYXJcIixub3JtYWw6XCJmYXJcIiwzMDA6XCJmYWxcIiwxMDA6XCJmYXRcIn0pLHkodm4saCx7OTAwOlwiZmFzc1wifSksdm4pKSxEdD1bMSwyLDMsNCw1LDYsNyw4LDksMTBdLGhhPUR0LmNvbmNhdChbMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjBdKSx5YT1bXCJjbGFzc1wiLFwiZGF0YS1wcmVmaXhcIixcImRhdGEtaWNvblwiLFwiZGF0YS1mYS10cmFuc2Zvcm1cIixcImRhdGEtZmEtbWFza1wiXSxVPXtHUk9VUDpcImR1b3RvbmUtZ3JvdXBcIixTV0FQX09QQUNJVFk6XCJzd2FwLW9wYWNpdHlcIixQUklNQVJZOlwicHJpbWFyeVwiLFNFQ09OREFSWTpcInNlY29uZGFyeVwifSxlbj1uZXcgU2V0O09iamVjdC5rZXlzKHRuW2ddKS5tYXAoZW4uYWRkLmJpbmQoZW4pKTtPYmplY3Qua2V5cyh0bltoXSkubWFwKGVuLmFkZC5iaW5kKGVuKSk7dmFyIGthPVtdLmNvbmNhdChCbixvbihlbiksW1wiMnhzXCIsXCJ4c1wiLFwic21cIixcImxnXCIsXCJ4bFwiLFwiMnhsXCIsXCJiZWF0XCIsXCJib3JkZXJcIixcImZhZGVcIixcImJlYXQtZmFkZVwiLFwiYm91bmNlXCIsXCJmbGlwLWJvdGhcIixcImZsaXAtaG9yaXpvbnRhbFwiLFwiZmxpcC12ZXJ0aWNhbFwiLFwiZmxpcFwiLFwiZndcIixcImludmVyc2VcIixcImxheWVycy1jb3VudGVyXCIsXCJsYXllcnMtdGV4dFwiLFwibGF5ZXJzXCIsXCJsaVwiLFwicHVsbC1sZWZ0XCIsXCJwdWxsLXJpZ2h0XCIsXCJwdWxzZVwiLFwicm90YXRlLTE4MFwiLFwicm90YXRlLTI3MFwiLFwicm90YXRlLTkwXCIsXCJyb3RhdGUtYnlcIixcInNoYWtlXCIsXCJzcGluLXB1bHNlXCIsXCJzcGluLXJldmVyc2VcIixcInNwaW5cIixcInN0YWNrLTF4XCIsXCJzdGFjay0yeFwiLFwic3RhY2tcIixcInVsXCIsVS5HUk9VUCxVLlNXQVBfT1BBQ0lUWSxVLlBSSU1BUlksVS5TRUNPTkRBUlldKS5jb25jYXQoRHQubWFwKGZ1bmN0aW9uKG4pe3JldHVyblwiXCIuY29uY2F0KG4sXCJ4XCIpfSkpLmNvbmNhdChoYS5tYXAoZnVuY3Rpb24obil7cmV0dXJuXCJ3LVwiLmNvbmNhdChuKX0pKSxKPUQuRm9udEF3ZXNvbWVDb25maWd8fHt9O2Z1bmN0aW9uIHdhKG4pe3ZhciB0PWIucXVlcnlTZWxlY3RvcihcInNjcmlwdFtcIituK1wiXVwiKTtpZih0KXJldHVybiB0LmdldEF0dHJpYnV0ZShuKX1mdW5jdGlvbiB4YShuKXtyZXR1cm4gbj09PVwiXCI/ITA6bj09PVwiZmFsc2VcIj8hMTpuPT09XCJ0cnVlXCI/ITA6bn1iJiZ0eXBlb2YgYi5xdWVyeVNlbGVjdG9yPT1cImZ1bmN0aW9uXCImJihsdD1bW1wiZGF0YS1mYW1pbHktcHJlZml4XCIsXCJmYW1pbHlQcmVmaXhcIl0sW1wiZGF0YS1jc3MtcHJlZml4XCIsXCJjc3NQcmVmaXhcIl0sW1wiZGF0YS1mYW1pbHktZGVmYXVsdFwiLFwiZmFtaWx5RGVmYXVsdFwiXSxbXCJkYXRhLXN0eWxlLWRlZmF1bHRcIixcInN0eWxlRGVmYXVsdFwiXSxbXCJkYXRhLXJlcGxhY2VtZW50LWNsYXNzXCIsXCJyZXBsYWNlbWVudENsYXNzXCJdLFtcImRhdGEtYXV0by1yZXBsYWNlLXN2Z1wiLFwiYXV0b1JlcGxhY2VTdmdcIl0sW1wiZGF0YS1hdXRvLWFkZC1jc3NcIixcImF1dG9BZGRDc3NcIl0sW1wiZGF0YS1hdXRvLWExMXlcIixcImF1dG9BMTF5XCJdLFtcImRhdGEtc2VhcmNoLXBzZXVkby1lbGVtZW50c1wiLFwic2VhcmNoUHNldWRvRWxlbWVudHNcIl0sW1wiZGF0YS1vYnNlcnZlLW11dGF0aW9uc1wiLFwib2JzZXJ2ZU11dGF0aW9uc1wiXSxbXCJkYXRhLW11dGF0ZS1hcHByb2FjaFwiLFwibXV0YXRlQXBwcm9hY2hcIl0sW1wiZGF0YS1rZWVwLW9yaWdpbmFsLXNvdXJjZVwiLFwia2VlcE9yaWdpbmFsU291cmNlXCJdLFtcImRhdGEtbWVhc3VyZS1wZXJmb3JtYW5jZVwiLFwibWVhc3VyZVBlcmZvcm1hbmNlXCJdLFtcImRhdGEtc2hvdy1taXNzaW5nLWljb25zXCIsXCJzaG93TWlzc2luZ0ljb25zXCJdXSxsdC5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciB0PVduKG4sMiksYT10WzBdLGU9dFsxXSxyPXhhKHdhKGEpKTtyIT1udWxsJiYoSltlXT1yKX0pKTt2YXIgbHQsenQ9e3N0eWxlRGVmYXVsdDpcInNvbGlkXCIsZmFtaWx5RGVmYXVsdDpcImNsYXNzaWNcIixjc3NQcmVmaXg6TXQscmVwbGFjZW1lbnRDbGFzczpMdCxhdXRvUmVwbGFjZVN2ZzohMCxhdXRvQWRkQ3NzOiEwLGF1dG9BMTF5OiEwLHNlYXJjaFBzZXVkb0VsZW1lbnRzOiExLG9ic2VydmVNdXRhdGlvbnM6ITAsbXV0YXRlQXBwcm9hY2g6XCJhc3luY1wiLGtlZXBPcmlnaW5hbFNvdXJjZTohMCxtZWFzdXJlUGVyZm9ybWFuY2U6ITEsc2hvd01pc3NpbmdJY29uczohMH07Si5mYW1pbHlQcmVmaXgmJihKLmNzc1ByZWZpeD1KLmZhbWlseVByZWZpeCk7dmFyIHE9YyhjKHt9LHp0KSxKKTtxLmF1dG9SZXBsYWNlU3ZnfHwocS5vYnNlcnZlTXV0YXRpb25zPSExKTt2YXIgbT17fTtPYmplY3Qua2V5cyh6dCkuZm9yRWFjaChmdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobSxuLHtlbnVtZXJhYmxlOiEwLHNldDpmdW5jdGlvbihhKXtxW25dPWEsWi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKG0pfSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBxW25dfX0pfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG0sXCJmYW1pbHlQcmVmaXhcIix7ZW51bWVyYWJsZTohMCxzZXQ6ZnVuY3Rpb24odCl7cS5jc3NQcmVmaXg9dCxaLmZvckVhY2goZnVuY3Rpb24oYSl7cmV0dXJuIGEobSl9KX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHEuY3NzUHJlZml4fX0pO0QuRm9udEF3ZXNvbWVDb25maWc9bTt2YXIgWj1bXTtmdW5jdGlvbiBBYShuKXtyZXR1cm4gWi5wdXNoKG4pLGZ1bmN0aW9uKCl7Wi5zcGxpY2UoWi5pbmRleE9mKG4pLDEpfX12YXIgRj1NbixOPXtzaXplOjE2LHg6MCx5OjAscm90YXRlOjAsZmxpcFg6ITEsZmxpcFk6ITF9O2Z1bmN0aW9uIFNhKG4pe2lmKCEoIW58fCFMKSl7dmFyIHQ9Yi5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJ0ZXh0L2Nzc1wiKSx0LmlubmVySFRNTD1uO2Zvcih2YXIgYT1iLmhlYWQuY2hpbGROb2RlcyxlPW51bGwscj1hLmxlbmd0aC0xO3I+LTE7ci0tKXt2YXIgbz1hW3JdLGk9KG8udGFnTmFtZXx8XCJcIikudG9VcHBlckNhc2UoKTtbXCJTVFlMRVwiLFwiTElOS1wiXS5pbmRleE9mKGkpPi0xJiYoZT1vKX1yZXR1cm4gYi5oZWFkLmluc2VydEJlZm9yZSh0LGUpLG59fXZhciBFYT1cIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXCI7ZnVuY3Rpb24gcm4oKXtmb3IodmFyIG49MTIsdD1cIlwiO24tLSA+MDspdCs9RWFbTWF0aC5yYW5kb20oKSo2MnwwXTtyZXR1cm4gdH1mdW5jdGlvbiBLKG4pe2Zvcih2YXIgdD1bXSxhPShufHxbXSkubGVuZ3RoPj4+MDthLS07KXRbYV09blthXTtyZXR1cm4gdH1mdW5jdGlvbiBWbihuKXtyZXR1cm4gbi5jbGFzc0xpc3Q/SyhuLmNsYXNzTGlzdCk6KG4uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpLnNwbGl0KFwiIFwiKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHR9KX1mdW5jdGlvbiBqdChuKXtyZXR1cm5cIlwiLmNvbmNhdChuKS5yZXBsYWNlKC8mL2csXCImYW1wO1wiKS5yZXBsYWNlKC9cIi9nLFwiJnF1b3Q7XCIpLnJlcGxhY2UoLycvZyxcIiYjMzk7XCIpLnJlcGxhY2UoLzwvZyxcIiZsdDtcIikucmVwbGFjZSgvPi9nLFwiJmd0O1wiKX1mdW5jdGlvbiBPYShuKXtyZXR1cm4gT2JqZWN0LmtleXMobnx8e30pLnJlZHVjZShmdW5jdGlvbih0LGEpe3JldHVybiB0K1wiXCIuY29uY2F0KGEsJz1cIicpLmNvbmNhdChqdChuW2FdKSwnXCIgJyl9LFwiXCIpLnRyaW0oKX1mdW5jdGlvbiBBbihuKXtyZXR1cm4gT2JqZWN0LmtleXMobnx8e30pLnJlZHVjZShmdW5jdGlvbih0LGEpe3JldHVybiB0K1wiXCIuY29uY2F0KGEsXCI6IFwiKS5jb25jYXQoblthXS50cmltKCksXCI7XCIpfSxcIlwiKX1mdW5jdGlvbiBxbihuKXtyZXR1cm4gbi5zaXplIT09Ti5zaXplfHxuLnghPT1OLnh8fG4ueSE9PU4ueXx8bi5yb3RhdGUhPT1OLnJvdGF0ZXx8bi5mbGlwWHx8bi5mbGlwWX1mdW5jdGlvbiBQYShuKXt2YXIgdD1uLnRyYW5zZm9ybSxhPW4uY29udGFpbmVyV2lkdGgsZT1uLmljb25XaWR0aCxyPXt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIuY29uY2F0KGEvMixcIiAyNTYpXCIpfSxvPVwidHJhbnNsYXRlKFwiLmNvbmNhdCh0LngqMzIsXCIsIFwiKS5jb25jYXQodC55KjMyLFwiKSBcIiksaT1cInNjYWxlKFwiLmNvbmNhdCh0LnNpemUvMTYqKHQuZmxpcFg/LTE6MSksXCIsIFwiKS5jb25jYXQodC5zaXplLzE2Kih0LmZsaXBZPy0xOjEpLFwiKSBcIikscz1cInJvdGF0ZShcIi5jb25jYXQodC5yb3RhdGUsXCIgMCAwKVwiKSxmPXt0cmFuc2Zvcm06XCJcIi5jb25jYXQobyxcIiBcIikuY29uY2F0KGksXCIgXCIpLmNvbmNhdChzKX0sdT17dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiLmNvbmNhdChlLzIqLTEsXCIgLTI1NilcIil9O3JldHVybntvdXRlcjpyLGlubmVyOmYscGF0aDp1fX1mdW5jdGlvbiBDYShuKXt2YXIgdD1uLnRyYW5zZm9ybSxhPW4ud2lkdGgsZT1hPT09dm9pZCAwP01uOmEscj1uLmhlaWdodCxvPXI9PT12b2lkIDA/TW46cixpPW4uc3RhcnRDZW50ZXJlZCxzPWk9PT12b2lkIDA/ITE6aSxmPVwiXCI7cmV0dXJuIHMmJlR0P2YrPVwidHJhbnNsYXRlKFwiLmNvbmNhdCh0LngvRi1lLzIsXCJlbSwgXCIpLmNvbmNhdCh0LnkvRi1vLzIsXCJlbSkgXCIpOnM/Zis9XCJ0cmFuc2xhdGUoY2FsYygtNTAlICsgXCIuY29uY2F0KHQueC9GLFwiZW0pLCBjYWxjKC01MCUgKyBcIikuY29uY2F0KHQueS9GLFwiZW0pKSBcIik6Zis9XCJ0cmFuc2xhdGUoXCIuY29uY2F0KHQueC9GLFwiZW0sIFwiKS5jb25jYXQodC55L0YsXCJlbSkgXCIpLGYrPVwic2NhbGUoXCIuY29uY2F0KHQuc2l6ZS9GKih0LmZsaXBYPy0xOjEpLFwiLCBcIikuY29uY2F0KHQuc2l6ZS9GKih0LmZsaXBZPy0xOjEpLFwiKSBcIiksZis9XCJyb3RhdGUoXCIuY29uY2F0KHQucm90YXRlLFwiZGVnKSBcIiksZn12YXIgSWE9YDpyb290LCA6aG9zdCB7XG4gIC0tZmEtZm9udC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSBcIkZvbnQgQXdlc29tZSA2IFNvbGlkXCI7XG4gIC0tZmEtZm9udC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xIFwiRm9udCBBd2Vzb21lIDYgUmVndWxhclwiO1xuICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgXCJGb250IEF3ZXNvbWUgNiBMaWdodFwiO1xuICAtLWZhLWZvbnQtdGhpbjogbm9ybWFsIDEwMCAxZW0vMSBcIkZvbnQgQXdlc29tZSA2IFRoaW5cIjtcbiAgLS1mYS1mb250LWR1b3RvbmU6IG5vcm1hbCA5MDAgMWVtLzEgXCJGb250IEF3ZXNvbWUgNiBEdW90b25lXCI7XG4gIC0tZmEtZm9udC1zaGFycC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSBcIkZvbnQgQXdlc29tZSA2IFNoYXJwXCI7XG4gIC0tZmEtZm9udC1icmFuZHM6IG5vcm1hbCA0MDAgMWVtLzEgXCJGb250IEF3ZXNvbWUgNiBCcmFuZHNcIjtcbn1cblxuc3ZnOm5vdCg6cm9vdCkuc3ZnLWlubGluZS0tZmEsIHN2Zzpub3QoOmhvc3QpLnN2Zy1pbmxpbmUtLWZhIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xufVxuXG4uc3ZnLWlubGluZS0tZmEge1xuICBkaXNwbGF5OiB2YXIoLS1mYS1kaXNwbGF5LCBpbmxpbmUtYmxvY2spO1xuICBoZWlnaHQ6IDFlbTtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcbn1cbi5zdmctaW5saW5lLS1mYS5mYS0yeHMge1xuICB2ZXJ0aWNhbC1hbGlnbjogMC4xZW07XG59XG4uc3ZnLWlubGluZS0tZmEuZmEteHMge1xuICB2ZXJ0aWNhbC1hbGlnbjogMGVtO1xufVxuLnN2Zy1pbmxpbmUtLWZhLmZhLXNtIHtcbiAgdmVydGljYWwtYWxpZ246IC0wLjA3MTQyODU3MDVlbTtcbn1cbi5zdmctaW5saW5lLS1mYS5mYS1sZyB7XG4gIHZlcnRpY2FsLWFsaWduOiAtMC4yZW07XG59XG4uc3ZnLWlubGluZS0tZmEuZmEteGwge1xuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMjVlbTtcbn1cbi5zdmctaW5saW5lLS1mYS5mYS0yeGwge1xuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMzEyNWVtO1xufVxuLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtbGVmdCB7XG4gIG1hcmdpbi1yaWdodDogdmFyKC0tZmEtcHVsbC1tYXJnaW4sIDAuM2VtKTtcbiAgd2lkdGg6IGF1dG87XG59XG4uc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1yaWdodCB7XG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pO1xuICB3aWR0aDogYXV0bztcbn1cbi5zdmctaW5saW5lLS1mYS5mYS1saSB7XG4gIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTtcbiAgdG9wOiAwLjI1ZW07XG59XG4uc3ZnLWlubGluZS0tZmEuZmEtZncge1xuICB3aWR0aDogdmFyKC0tZmEtZnctd2lkdGgsIDEuMjVlbSk7XG59XG5cbi5mYS1sYXllcnMgc3ZnLnN2Zy1pbmxpbmUtLWZhIHtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBtYXJnaW46IGF1dG87XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIHRvcDogMDtcbn1cblxuLmZhLWxheWVycy1jb3VudGVyLCAuZmEtbGF5ZXJzLXRleHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZmEtbGF5ZXJzIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDFlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcbiAgd2lkdGg6IDFlbTtcbn1cbi5mYS1sYXllcnMgc3ZnLnN2Zy1pbmxpbmUtLWZhIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7XG59XG5cbi5mYS1sYXllcnMtdGV4dCB7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjtcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xufVxuXG4uZmEtbGF5ZXJzLWNvdW50ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1mYS1jb3VudGVyLWJhY2tncm91bmQtY29sb3IsICNmZjI1M2EpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1jb3VudGVyLWJvcmRlci1yYWRpdXMsIDFlbSk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGNvbG9yOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZhLWNvdW50ZXItbGluZS1oZWlnaHQsIDEpO1xuICBtYXgtd2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWF4LXdpZHRoLCA1ZW0pO1xuICBtaW4td2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWluLXdpZHRoLCAxLjVlbSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IHZhcigtLWZhLWNvdW50ZXItcGFkZGluZywgMC4yNWVtIDAuNWVtKTtcbiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHRvcDogdmFyKC0tZmEtdG9wLCAwKTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTtcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0O1xufVxuXG4uZmEtbGF5ZXJzLWJvdHRvbS1yaWdodCB7XG4gIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTtcbiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTtcbiAgdG9wOiBhdXRvO1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTtcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIHJpZ2h0O1xufVxuXG4uZmEtbGF5ZXJzLWJvdHRvbS1sZWZ0IHtcbiAgYm90dG9tOiB2YXIoLS1mYS1ib3R0b20sIDApO1xuICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTtcbiAgcmlnaHQ6IGF1dG87XG4gIHRvcDogYXV0bztcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGxlZnQ7XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGxlZnQ7XG59XG5cbi5mYS1sYXllcnMtdG9wLXJpZ2h0IHtcbiAgdG9wOiB2YXIoLS1mYS10b3AsIDApO1xuICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApO1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTtcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0O1xufVxuXG4uZmEtbGF5ZXJzLXRvcC1sZWZ0IHtcbiAgbGVmdDogdmFyKC0tZmEtbGVmdCwgMCk7XG4gIHJpZ2h0OiBhdXRvO1xuICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWxheWVycy1zY2FsZSwgMC4yNSkpO1xuICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0O1xuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0O1xufVxuXG4uZmEtMXgge1xuICBmb250LXNpemU6IDFlbTtcbn1cblxuLmZhLTJ4IHtcbiAgZm9udC1zaXplOiAyZW07XG59XG5cbi5mYS0zeCB7XG4gIGZvbnQtc2l6ZTogM2VtO1xufVxuXG4uZmEtNHgge1xuICBmb250LXNpemU6IDRlbTtcbn1cblxuLmZhLTV4IHtcbiAgZm9udC1zaXplOiA1ZW07XG59XG5cbi5mYS02eCB7XG4gIGZvbnQtc2l6ZTogNmVtO1xufVxuXG4uZmEtN3gge1xuICBmb250LXNpemU6IDdlbTtcbn1cblxuLmZhLTh4IHtcbiAgZm9udC1zaXplOiA4ZW07XG59XG5cbi5mYS05eCB7XG4gIGZvbnQtc2l6ZTogOWVtO1xufVxuXG4uZmEtMTB4IHtcbiAgZm9udC1zaXplOiAxMGVtO1xufVxuXG4uZmEtMnhzIHtcbiAgZm9udC1zaXplOiAwLjYyNWVtO1xuICBsaW5lLWhlaWdodDogMC4xZW07XG4gIHZlcnRpY2FsLWFsaWduOiAwLjIyNWVtO1xufVxuXG4uZmEteHMge1xuICBmb250LXNpemU6IDAuNzVlbTtcbiAgbGluZS1oZWlnaHQ6IDAuMDgzMzMzMzMzN2VtO1xuICB2ZXJ0aWNhbC1hbGlnbjogMC4xMjVlbTtcbn1cblxuLmZhLXNtIHtcbiAgZm9udC1zaXplOiAwLjg3NWVtO1xuICBsaW5lLWhlaWdodDogMC4wNzE0Mjg1NzE4ZW07XG4gIHZlcnRpY2FsLWFsaWduOiAwLjA1MzU3MTQyOTVlbTtcbn1cblxuLmZhLWxnIHtcbiAgZm9udC1zaXplOiAxLjI1ZW07XG4gIGxpbmUtaGVpZ2h0OiAwLjA1ZW07XG4gIHZlcnRpY2FsLWFsaWduOiAtMC4wNzVlbTtcbn1cblxuLmZhLXhsIHtcbiAgZm9udC1zaXplOiAxLjVlbTtcbiAgbGluZS1oZWlnaHQ6IDAuMDQxNjY2NjY4MmVtO1xuICB2ZXJ0aWNhbC1hbGlnbjogLTAuMTI1ZW07XG59XG5cbi5mYS0yeGwge1xuICBmb250LXNpemU6IDJlbTtcbiAgbGluZS1oZWlnaHQ6IDAuMDMxMjVlbTtcbiAgdmVydGljYWwtYWxpZ246IC0wLjE4NzVlbTtcbn1cblxuLmZhLWZ3IHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMS4yNWVtO1xufVxuXG4uZmEtdWwge1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1mYS1saS1tYXJnaW4sIDIuNWVtKTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLmZhLXVsID4gbGkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5mYS1saSB7XG4gIGxlZnQ6IGNhbGModmFyKC0tZmEtbGktd2lkdGgsIDJlbSkgKiAtMSk7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuXG4uZmEtYm9yZGVyIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1mYS1ib3JkZXItY29sb3IsICNlZWUpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1ib3JkZXItcmFkaXVzLCAwLjFlbSk7XG4gIGJvcmRlci1zdHlsZTogdmFyKC0tZmEtYm9yZGVyLXN0eWxlLCBzb2xpZCk7XG4gIGJvcmRlci13aWR0aDogdmFyKC0tZmEtYm9yZGVyLXdpZHRoLCAwLjA4ZW0pO1xuICBwYWRkaW5nOiB2YXIoLS1mYS1ib3JkZXItcGFkZGluZywgMC4yZW0gMC4yNWVtIDAuMTVlbSk7XG59XG5cbi5mYS1wdWxsLWxlZnQge1xuICBmbG9hdDogbGVmdDtcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pO1xufVxuXG4uZmEtcHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodDtcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7XG59XG5cbi5mYS1iZWF0IHtcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtYmVhdDtcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtYmVhdDtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XG4gICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTtcbiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7XG59XG5cbi5mYS1ib3VuY2Uge1xuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1ib3VuY2U7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhLWJvdW5jZTtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XG4gICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjI4LCAwLjg0LCAwLjQyLCAxKSk7XG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuMjgsIDAuODQsIDAuNDIsIDEpKTtcbn1cblxuLmZhLWZhZGUge1xuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1mYWRlO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1mYWRlO1xuICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XG4gICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xuICAgICAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xuICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcbiAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7XG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7XG59XG5cbi5mYS1iZWF0LWZhZGUge1xuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1iZWF0LWZhZGU7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQtZmFkZTtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTtcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XG4gICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpO1xuICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGN1YmljLWJlemllcigwLjQsIDAsIDAuNiwgMSkpO1xufVxuXG4uZmEtZmxpcCB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhLWZsaXA7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xuICAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBlYXNlLWluLW91dCk7XG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpO1xufVxuXG4uZmEtc2hha2Uge1xuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTtcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtc2hha2U7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xuICAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpO1xuICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7XG59XG5cbi5mYS1zcGluIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogZmEtc3BpbjtcbiAgICAgICAgICBhbmltYXRpb24tbmFtZTogZmEtc3BpbjtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpO1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpO1xuICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAycyk7XG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDJzKTtcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7XG4gICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGxpbmVhcik7XG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTtcbn1cblxuLmZhLXNwaW4tcmV2ZXJzZSB7XG4gIC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTtcbn1cblxuLmZhLXB1bHNlLFxuLmZhLXNwaW4tcHVsc2Uge1xuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmYS1zcGluO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluO1xuICAtd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7XG4gICAgICAgICAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTtcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpO1xuICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpO1xuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTtcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBzdGVwcyg4KSk7XG4gICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgc3RlcHMoOCkpO1xufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAuZmEtYmVhdCxcbi5mYS1ib3VuY2UsXG4uZmEtZmFkZSxcbi5mYS1iZWF0LWZhZGUsXG4uZmEtZmxpcCxcbi5mYS1wdWxzZSxcbi5mYS1zaGFrZSxcbi5mYS1zcGluLFxuLmZhLXNwaW4tcHVsc2Uge1xuICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAtMW1zO1xuICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtMW1zO1xuICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAxbXM7XG4gICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDFtcztcbiAgICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7XG4gICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxO1xuICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDBzO1xuICB9XG59XG5ALXdlYmtpdC1rZXlmcmFtZXMgZmEtYmVhdCB7XG4gIDAlLCA5MCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgNDUlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1zY2FsZSwgMS4yNSkpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmEtYmVhdCB7XG4gIDAlLCA5MCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgNDUlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1zY2FsZSwgMS4yNSkpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LXNjYWxlLCAxLjI1KSk7XG4gIH1cbn1cbkAtd2Via2l0LWtleWZyYW1lcyBmYS1ib3VuY2Uge1xuICAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XG4gIH1cbiAgMTAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXgsIDEuMSksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjkpKSB0cmFuc2xhdGVZKDApO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4xKSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOSkpIHRyYW5zbGF0ZVkoMCk7XG4gIH1cbiAgMzAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45KSwgdmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteSwgMS4xKSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAtMC41ZW0pKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteCwgMC45KSwgdmFyKC0tZmEtYm91bmNlLWp1bXAtc2NhbGUteSwgMS4xKSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtaGVpZ2h0LCAtMC41ZW0pKTtcbiAgfVxuICA1MCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS14LCAxLjA1KSwgdmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteSwgMC45NSkpIHRyYW5zbGF0ZVkoMCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDUpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjk1KSkgdHJhbnNsYXRlWSgwKTtcbiAgfVxuICA1NyUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKHZhcigtLWZhLWJvdW5jZS1yZWJvdW5kLCAtMC4xMjVlbSkpO1xuICB9XG4gIDY0JSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XG4gIH1cbiAgMTAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmEtYm91bmNlIHtcbiAgMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xuICB9XG4gIDEwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS14LCAxLjEpLCB2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteSwgMC45KSkgdHJhbnNsYXRlWSgwKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXgsIDEuMSksIHZhcigtLWZhLWJvdW5jZS1zdGFydC1zY2FsZS15LCAwLjkpKSB0cmFuc2xhdGVZKDApO1xuICB9XG4gIDMwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXgsIDAuOSksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMSkpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLWhlaWdodCwgLTAuNWVtKSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXgsIDAuOSksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMSkpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLWhlaWdodCwgLTAuNWVtKSk7XG4gIH1cbiAgNTAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteCwgMS4wNSksIHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXksIDAuOTUpKSB0cmFuc2xhdGVZKDApO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS14LCAxLjA1KSwgdmFyKC0tZmEtYm91bmNlLWxhbmQtc2NhbGUteSwgMC45NSkpIHRyYW5zbGF0ZVkoMCk7XG4gIH1cbiAgNTclIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtcmVib3VuZCwgLTAuMTI1ZW0pKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtcmVib3VuZCwgLTAuMTI1ZW0pKTtcbiAgfVxuICA2NCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApO1xuICB9XG59XG5ALXdlYmtpdC1rZXlmcmFtZXMgZmEtZmFkZSB7XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogdmFyKC0tZmEtZmFkZS1vcGFjaXR5LCAwLjQpO1xuICB9XG59XG5Aa2V5ZnJhbWVzIGZhLWZhZGUge1xuICA1MCUge1xuICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTtcbiAgfVxufVxuQC13ZWJraXQta2V5ZnJhbWVzIGZhLWJlYXQtZmFkZSB7XG4gIDAlLCAxMDAlIHtcbiAgICBvcGFjaXR5OiB2YXIoLS1mYS1iZWF0LWZhZGUtb3BhY2l0eSwgMC40KTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1mYWRlLXNjYWxlLCAxLjEyNSkpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMTI1KSk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmEtYmVhdC1mYWRlIHtcbiAgMCUsIDEwMCUge1xuICAgIG9wYWNpdHk6IHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1iZWF0LWZhZGUtc2NhbGUsIDEuMTI1KSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4xMjUpKTtcbiAgfVxufVxuQC13ZWJraXQta2V5ZnJhbWVzIGZhLWZsaXAge1xuICA1MCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZTNkKHZhcigtLWZhLWZsaXAteCwgMCksIHZhcigtLWZhLWZsaXAteSwgMSksIHZhcigtLWZhLWZsaXAteiwgMCksIHZhcigtLWZhLWZsaXAtYW5nbGUsIC0xODBkZWcpKTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYS1mbGlwIHtcbiAgNTAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlM2QodmFyKC0tZmEtZmxpcC14LCAwKSwgdmFyKC0tZmEtZmxpcC15LCAxKSwgdmFyKC0tZmEtZmxpcC16LCAwKSwgdmFyKC0tZmEtZmxpcC1hbmdsZSwgLTE4MGRlZykpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7XG4gIH1cbn1cbkAtd2Via2l0LWtleWZyYW1lcyBmYS1zaGFrZSB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xNWRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpO1xuICB9XG4gIDQlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTtcbiAgfVxuICA4JSwgMjQlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xOGRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMThkZWcpO1xuICB9XG4gIDEyJSwgMjglIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE4ZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4ZGVnKTtcbiAgfVxuICAxNiUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0yMmRlZyk7XG4gIH1cbiAgMjAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTtcbiAgfVxuICAzMiUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEyZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7XG4gIH1cbiAgMzYlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTtcbiAgfVxuICA0MCUsIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxufVxuQGtleWZyYW1lcyBmYS1zaGFrZSB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xNWRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpO1xuICB9XG4gIDQlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTtcbiAgfVxuICA4JSwgMjQlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xOGRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMThkZWcpO1xuICB9XG4gIDEyJSwgMjglIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE4ZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4ZGVnKTtcbiAgfVxuICAxNiUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTIyZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0yMmRlZyk7XG4gIH1cbiAgMjAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDIyZGVnKTtcbiAgfVxuICAzMiUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEyZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMmRlZyk7XG4gIH1cbiAgMzYlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTtcbiAgfVxuICA0MCUsIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxufVxuQC13ZWJraXQta2V5ZnJhbWVzIGZhLXNwaW4ge1xuICAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gIH1cbn1cbkBrZXlmcmFtZXMgZmEtc3BpbiB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufVxuLmZhLXJvdGF0ZS05MCB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbn1cblxuLmZhLXJvdGF0ZS0xODAge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cblxuLmZhLXJvdGF0ZS0yNzAge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcbn1cblxuLmZhLWZsaXAtaG9yaXpvbnRhbCB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgtMSwgMSk7XG59XG5cbi5mYS1mbGlwLXZlcnRpY2FsIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTtcbn1cblxuLmZhLWZsaXAtYm90aCxcbi5mYS1mbGlwLWhvcml6b250YWwuZmEtZmxpcC12ZXJ0aWNhbCB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgtMSwgLTEpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoLTEsIC0xKTtcbn1cblxuLmZhLXJvdGF0ZS1ieSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCBub25lKSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCBub25lKSk7XG59XG5cbi5mYS1zdGFjayB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgaGVpZ2h0OiAyZW07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDIuNWVtO1xufVxuXG4uZmEtc3RhY2stMXgsXG4uZmEtc3RhY2stMngge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbjogYXV0bztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiB2YXIoLS1mYS1zdGFjay16LWluZGV4LCBhdXRvKTtcbn1cblxuLnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTF4IHtcbiAgaGVpZ2h0OiAxZW07XG4gIHdpZHRoOiAxLjI1ZW07XG59XG4uc3ZnLWlubGluZS0tZmEuZmEtc3RhY2stMngge1xuICBoZWlnaHQ6IDJlbTtcbiAgd2lkdGg6IDIuNWVtO1xufVxuXG4uZmEtaW52ZXJzZSB7XG4gIGNvbG9yOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTtcbn1cblxuLnNyLW9ubHksXG4uZmEtc3Itb25seSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogLTFweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYm9yZGVyLXdpZHRoOiAwO1xufVxuXG4uc3Itb25seS1mb2N1c2FibGU6bm90KDpmb2N1cyksXG4uZmEtc3Itb25seS1mb2N1c2FibGU6bm90KDpmb2N1cykge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogMXB4O1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IC0xcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJvcmRlci13aWR0aDogMDtcbn1cblxuLnN2Zy1pbmxpbmUtLWZhIC5mYS1wcmltYXJ5IHtcbiAgZmlsbDogdmFyKC0tZmEtcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKTtcbiAgb3BhY2l0eTogdmFyKC0tZmEtcHJpbWFyeS1vcGFjaXR5LCAxKTtcbn1cblxuLnN2Zy1pbmxpbmUtLWZhIC5mYS1zZWNvbmRhcnkge1xuICBmaWxsOiB2YXIoLS1mYS1zZWNvbmRhcnktY29sb3IsIGN1cnJlbnRDb2xvcik7XG4gIG9wYWNpdHk6IHZhcigtLWZhLXNlY29uZGFyeS1vcGFjaXR5LCAwLjQpO1xufVxuXG4uc3ZnLWlubGluZS0tZmEuZmEtc3dhcC1vcGFjaXR5IC5mYS1wcmltYXJ5IHtcbiAgb3BhY2l0eTogdmFyKC0tZmEtc2Vjb25kYXJ5LW9wYWNpdHksIDAuNCk7XG59XG5cbi5zdmctaW5saW5lLS1mYS5mYS1zd2FwLW9wYWNpdHkgLmZhLXNlY29uZGFyeSB7XG4gIG9wYWNpdHk6IHZhcigtLWZhLXByaW1hcnktb3BhY2l0eSwgMSk7XG59XG5cbi5zdmctaW5saW5lLS1mYSBtYXNrIC5mYS1wcmltYXJ5LFxuLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeSB7XG4gIGZpbGw6IGJsYWNrO1xufVxuXG4uZmFkLmZhLWludmVyc2UsXG4uZmEtZHVvdG9uZS5mYS1pbnZlcnNlIHtcbiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpO1xufWA7ZnVuY3Rpb24gWXQoKXt2YXIgbj1NdCx0PUx0LGE9bS5jc3NQcmVmaXgsZT1tLnJlcGxhY2VtZW50Q2xhc3Mscj1JYTtpZihhIT09bnx8ZSE9PXQpe3ZhciBvPW5ldyBSZWdFeHAoXCJcXFxcLlwiLmNvbmNhdChuLFwiXFxcXC1cIiksXCJnXCIpLGk9bmV3IFJlZ0V4cChcIlxcXFwtLVwiLmNvbmNhdChuLFwiXFxcXC1cIiksXCJnXCIpLHM9bmV3IFJlZ0V4cChcIlxcXFwuXCIuY29uY2F0KHQpLFwiZ1wiKTtyPXIucmVwbGFjZShvLFwiLlwiLmNvbmNhdChhLFwiLVwiKSkucmVwbGFjZShpLFwiLS1cIi5jb25jYXQoYSxcIi1cIikpLnJlcGxhY2UocyxcIi5cIi5jb25jYXQoZSkpfXJldHVybiByfXZhciBjdD0hMTtmdW5jdGlvbiBDbigpe20uYXV0b0FkZENzcyYmIWN0JiYoU2EoWXQoKSksY3Q9ITApfXZhciBOYT17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbTp7Y3NzOll0LGluc2VydENzczpDbn19fSxob29rczpmdW5jdGlvbigpe3JldHVybntiZWZvcmVET01FbGVtZW50Q3JlYXRpb246ZnVuY3Rpb24oKXtDbigpfSxiZWZvcmVJMnN2ZzpmdW5jdGlvbigpe0NuKCl9fX19LFQ9RHx8e307VFtfXXx8KFRbX109e30pO1RbX10uc3R5bGVzfHwoVFtfXS5zdHlsZXM9e30pO1RbX10uaG9va3N8fChUW19dLmhvb2tzPXt9KTtUW19dLnNoaW1zfHwoVFtfXS5zaGltcz1bXSk7dmFyIFA9VFtfXSwkdD1bXSxfYT1mdW5jdGlvbiBuKCl7Yi5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLG4pLHduPTEsJHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX0sd249ITE7TCYmKHduPShiLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD8vXmxvYWRlZHxeYy86L15sb2FkZWR8Xml8XmMvKS50ZXN0KGIucmVhZHlTdGF0ZSksd258fGIuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixfYSkpO2Z1bmN0aW9uIFRhKG4peyFMfHwod24/c2V0VGltZW91dChuLDApOiR0LnB1c2gobikpfWZ1bmN0aW9uIGZuKG4pe3ZhciB0PW4udGFnLGE9bi5hdHRyaWJ1dGVzLGU9YT09PXZvaWQgMD97fTphLHI9bi5jaGlsZHJlbixvPXI9PT12b2lkIDA/W106cjtyZXR1cm4gdHlwZW9mIG49PVwic3RyaW5nXCI/anQobik6XCI8XCIuY29uY2F0KHQsXCIgXCIpLmNvbmNhdChPYShlKSxcIj5cIikuY29uY2F0KG8ubWFwKGZuKS5qb2luKFwiXCIpLFwiPC9cIikuY29uY2F0KHQsXCI+XCIpfWZ1bmN0aW9uIHV0KG4sdCxhKXtpZihuJiZuW3RdJiZuW3RdW2FdKXJldHVybntwcmVmaXg6dCxpY29uTmFtZTphLGljb246blt0XVthXX19dmFyIE1hPWZ1bmN0aW9uKHQsYSl7cmV0dXJuIGZ1bmN0aW9uKGUscixvLGkpe3JldHVybiB0LmNhbGwoYSxlLHIsbyxpKX19LEluPWZ1bmN0aW9uKHQsYSxlLHIpe3ZhciBvPU9iamVjdC5rZXlzKHQpLGk9by5sZW5ndGgscz1yIT09dm9pZCAwP01hKGEscik6YSxmLHUsbDtmb3IoZT09PXZvaWQgMD8oZj0xLGw9dFtvWzBdXSk6KGY9MCxsPWUpO2Y8aTtmKyspdT1vW2ZdLGw9cyhsLHRbdV0sdSx0KTtyZXR1cm4gbH07ZnVuY3Rpb24gTGEobil7Zm9yKHZhciB0PVtdLGE9MCxlPW4ubGVuZ3RoO2E8ZTspe3ZhciByPW4uY2hhckNvZGVBdChhKyspO2lmKHI+PTU1Mjk2JiZyPD01NjMxOSYmYTxlKXt2YXIgbz1uLmNoYXJDb2RlQXQoYSsrKTsobyY2NDUxMik9PTU2MzIwP3QucHVzaCgoKHImMTAyMyk8PDEwKSsobyYxMDIzKSs2NTUzNik6KHQucHVzaChyKSxhLS0pfWVsc2UgdC5wdXNoKHIpfXJldHVybiB0fWZ1bmN0aW9uIFJuKG4pe3ZhciB0PUxhKG4pO3JldHVybiB0Lmxlbmd0aD09PTE/dFswXS50b1N0cmluZygxNik6bnVsbH1mdW5jdGlvbiBSYShuLHQpe3ZhciBhPW4ubGVuZ3RoLGU9bi5jaGFyQ29kZUF0KHQpLHI7cmV0dXJuIGU+PTU1Mjk2JiZlPD01NjMxOSYmYT50KzEmJihyPW4uY2hhckNvZGVBdCh0KzEpLHI+PTU2MzIwJiZyPD01NzM0Myk/KGUtNTUyOTYpKjEwMjQrci01NjMyMCs2NTUzNjplfWZ1bmN0aW9uIG10KG4pe3JldHVybiBPYmplY3Qua2V5cyhuKS5yZWR1Y2UoZnVuY3Rpb24odCxhKXt2YXIgZT1uW2FdLHI9ISFlLmljb247cmV0dXJuIHI/dFtlLmljb25OYW1lXT1lLmljb246dFthXT1lLHR9LHt9KX1mdW5jdGlvbiBGbihuLHQpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTp7fSxlPWEuc2tpcEhvb2tzLHI9ZT09PXZvaWQgMD8hMTplLG89bXQodCk7dHlwZW9mIFAuaG9va3MuYWRkUGFjaz09XCJmdW5jdGlvblwiJiYhcj9QLmhvb2tzLmFkZFBhY2sobixtdCh0KSk6UC5zdHlsZXNbbl09YyhjKHt9LFAuc3R5bGVzW25dfHx7fSksbyksbj09PVwiZmFzXCImJkZuKFwiZmFcIix0KX12YXIgcG4sZ24sYm4sWD1QLnN0eWxlcyxGYT1QLnNoaW1zLERhPShwbj17fSx5KHBuLGcsT2JqZWN0LnZhbHVlcyhhbltnXSkpLHkocG4saCxPYmplY3QudmFsdWVzKGFuW2hdKSkscG4pLEtuPW51bGwsVXQ9e30sV3Q9e30sSHQ9e30sR3Q9e30sWHQ9e30semE9KGduPXt9LHkoZ24sZyxPYmplY3Qua2V5cyhubltnXSkpLHkoZ24saCxPYmplY3Qua2V5cyhubltoXSkpLGduKTtmdW5jdGlvbiBqYShuKXtyZXR1cm5+a2EuaW5kZXhPZihuKX1mdW5jdGlvbiBZYShuLHQpe3ZhciBhPXQuc3BsaXQoXCItXCIpLGU9YVswXSxyPWEuc2xpY2UoMSkuam9pbihcIi1cIik7cmV0dXJuIGU9PT1uJiZyIT09XCJcIiYmIWphKHIpP3I6bnVsbH12YXIgQnQ9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbihvKXtyZXR1cm4gSW4oWCxmdW5jdGlvbihpLHMsZil7cmV0dXJuIGlbZl09SW4ocyxvLHt9KSxpfSx7fSl9O1V0PXQoZnVuY3Rpb24ocixvLGkpe2lmKG9bM10mJihyW29bM11dPWkpLG9bMl0pe3ZhciBzPW9bMl0uZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiB0eXBlb2YgZj09XCJudW1iZXJcIn0pO3MuZm9yRWFjaChmdW5jdGlvbihmKXtyW2YudG9TdHJpbmcoMTYpXT1pfSl9cmV0dXJuIHJ9KSxXdD10KGZ1bmN0aW9uKHIsbyxpKXtpZihyW2ldPWksb1syXSl7dmFyIHM9b1syXS5maWx0ZXIoZnVuY3Rpb24oZil7cmV0dXJuIHR5cGVvZiBmPT1cInN0cmluZ1wifSk7cy5mb3JFYWNoKGZ1bmN0aW9uKGYpe3JbZl09aX0pfXJldHVybiByfSksWHQ9dChmdW5jdGlvbihyLG8saSl7dmFyIHM9b1syXTtyZXR1cm4gcltpXT1pLHMuZm9yRWFjaChmdW5jdGlvbihmKXtyW2ZdPWl9KSxyfSk7dmFyIGE9XCJmYXJcImluIFh8fG0uYXV0b0ZldGNoU3ZnLGU9SW4oRmEsZnVuY3Rpb24ocixvKXt2YXIgaT1vWzBdLHM9b1sxXSxmPW9bMl07cmV0dXJuIHM9PT1cImZhclwiJiYhYSYmKHM9XCJmYXNcIiksdHlwZW9mIGk9PVwic3RyaW5nXCImJihyLm5hbWVzW2ldPXtwcmVmaXg6cyxpY29uTmFtZTpmfSksdHlwZW9mIGk9PVwibnVtYmVyXCImJihyLnVuaWNvZGVzW2kudG9TdHJpbmcoMTYpXT17cHJlZml4OnMsaWNvbk5hbWU6Zn0pLHJ9LHtuYW1lczp7fSx1bmljb2Rlczp7fX0pO0h0PWUubmFtZXMsR3Q9ZS51bmljb2RlcyxLbj1TbihtLnN0eWxlRGVmYXVsdCx7ZmFtaWx5Om0uZmFtaWx5RGVmYXVsdH0pfTtBYShmdW5jdGlvbihuKXtLbj1TbihuLnN0eWxlRGVmYXVsdCx7ZmFtaWx5Om0uZmFtaWx5RGVmYXVsdH0pfSk7QnQoKTtmdW5jdGlvbiBRbihuLHQpe3JldHVybihVdFtuXXx8e30pW3RdfWZ1bmN0aW9uICRhKG4sdCl7cmV0dXJuKFd0W25dfHx7fSlbdF19ZnVuY3Rpb24gVyhuLHQpe3JldHVybihYdFtuXXx8e30pW3RdfWZ1bmN0aW9uIFZ0KG4pe3JldHVybiBIdFtuXXx8e3ByZWZpeDpudWxsLGljb25OYW1lOm51bGx9fWZ1bmN0aW9uIFVhKG4pe3ZhciB0PUd0W25dLGE9UW4oXCJmYXNcIixuKTtyZXR1cm4gdHx8KGE/e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOmF9Om51bGwpfHx7cHJlZml4Om51bGwsaWNvbk5hbWU6bnVsbH19ZnVuY3Rpb24geigpe3JldHVybiBLbn12YXIgSm49ZnVuY3Rpb24oKXtyZXR1cm57cHJlZml4Om51bGwsaWNvbk5hbWU6bnVsbCxyZXN0OltdfX07ZnVuY3Rpb24gU24obil7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGE9dC5mYW1pbHksZT1hPT09dm9pZCAwP2c6YSxyPW5uW2VdW25dLG89dG5bZV1bbl18fHRuW2VdW3JdLGk9biBpbiBQLnN0eWxlcz9uOm51bGw7cmV0dXJuIG98fGl8fG51bGx9dmFyIGR0PShibj17fSx5KGJuLGcsT2JqZWN0LmtleXMoYW5bZ10pKSx5KGJuLGgsT2JqZWN0LmtleXMoYW5baF0pKSxibik7ZnVuY3Rpb24gRW4obil7dmFyIHQsYT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30sZT1hLnNraXBMb29rdXBzLHI9ZT09PXZvaWQgMD8hMTplLG89KHQ9e30seSh0LGcsXCJcIi5jb25jYXQobS5jc3NQcmVmaXgsXCItXCIpLmNvbmNhdChnKSkseSh0LGgsXCJcIi5jb25jYXQobS5jc3NQcmVmaXgsXCItXCIpLmNvbmNhdChoKSksdCksaT1udWxsLHM9Zzsobi5pbmNsdWRlcyhvW2ddKXx8bi5zb21lKGZ1bmN0aW9uKHUpe3JldHVybiBkdFtnXS5pbmNsdWRlcyh1KX0pKSYmKHM9ZyksKG4uaW5jbHVkZXMob1toXSl8fG4uc29tZShmdW5jdGlvbih1KXtyZXR1cm4gZHRbaF0uaW5jbHVkZXModSl9KSkmJihzPWgpO3ZhciBmPW4ucmVkdWNlKGZ1bmN0aW9uKHUsbCl7dmFyIGQ9WWEobS5jc3NQcmVmaXgsbCk7aWYoWFtsXT8obD1EYVtzXS5pbmNsdWRlcyhsKT92YVtzXVtsXTpsLGk9bCx1LnByZWZpeD1sKTp6YVtzXS5pbmRleE9mKGwpPi0xPyhpPWwsdS5wcmVmaXg9U24obCx7ZmFtaWx5OnN9KSk6ZD91Lmljb25OYW1lPWQ6bCE9PW0ucmVwbGFjZW1lbnRDbGFzcyYmbCE9PW9bZ10mJmwhPT1vW2hdJiZ1LnJlc3QucHVzaChsKSwhciYmdS5wcmVmaXgmJnUuaWNvbk5hbWUpe3ZhciB2PWk9PT1cImZhXCI/VnQodS5pY29uTmFtZSk6e30scD1XKHUucHJlZml4LHUuaWNvbk5hbWUpO3YucHJlZml4JiYoaT1udWxsKSx1Lmljb25OYW1lPXYuaWNvbk5hbWV8fHB8fHUuaWNvbk5hbWUsdS5wcmVmaXg9di5wcmVmaXh8fHUucHJlZml4LHUucHJlZml4PT09XCJmYXJcIiYmIVguZmFyJiZYLmZhcyYmIW0uYXV0b0ZldGNoU3ZnJiYodS5wcmVmaXg9XCJmYXNcIil9cmV0dXJuIHV9LEpuKCkpO3JldHVybihuLmluY2x1ZGVzKFwiZmEtYnJhbmRzXCIpfHxuLmluY2x1ZGVzKFwiZmFiXCIpKSYmKGYucHJlZml4PVwiZmFiXCIpLChuLmluY2x1ZGVzKFwiZmEtZHVvdG9uZVwiKXx8bi5pbmNsdWRlcyhcImZhZFwiKSkmJihmLnByZWZpeD1cImZhZFwiKSwhZi5wcmVmaXgmJnM9PT1oJiYoWC5mYXNzfHxtLmF1dG9GZXRjaFN2ZykmJihmLnByZWZpeD1cImZhc3NcIixmLmljb25OYW1lPVcoZi5wcmVmaXgsZi5pY29uTmFtZSl8fGYuaWNvbk5hbWUpLChmLnByZWZpeD09PVwiZmFcInx8aT09PVwiZmFcIikmJihmLnByZWZpeD16KCl8fFwiZmFzXCIpLGZ9dmFyIFdhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe2FhKHRoaXMsbiksdGhpcy5kZWZpbml0aW9ucz17fX1yZXR1cm4gZWEobixbe2tleTpcImFkZFwiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG89MDtvPGU7bysrKXJbb109YXJndW1lbnRzW29dO3ZhciBpPXIucmVkdWNlKHRoaXMuX3B1bGxEZWZpbml0aW9ucyx7fSk7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihzKXthLmRlZmluaXRpb25zW3NdPWMoYyh7fSxhLmRlZmluaXRpb25zW3NdfHx7fSksaVtzXSksRm4ocyxpW3NdKTt2YXIgZj1hbltnXVtzXTtmJiZGbihmLGlbc10pLEJ0KCl9KX19LHtrZXk6XCJyZXNldFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZWZpbml0aW9ucz17fX19LHtrZXk6XCJfcHVsbERlZmluaXRpb25zXCIsdmFsdWU6ZnVuY3Rpb24oYSxlKXt2YXIgcj1lLnByZWZpeCYmZS5pY29uTmFtZSYmZS5pY29uP3swOmV9OmU7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChmdW5jdGlvbihvKXt2YXIgaT1yW29dLHM9aS5wcmVmaXgsZj1pLmljb25OYW1lLHU9aS5pY29uLGw9dVsyXTthW3NdfHwoYVtzXT17fSksbC5sZW5ndGg+MCYmbC5mb3JFYWNoKGZ1bmN0aW9uKGQpe3R5cGVvZiBkPT1cInN0cmluZ1wiJiYoYVtzXVtkXT11KX0pLGFbc11bZl09dX0pLGF9fV0pLG59KCksdnQ9W10sQj17fSxWPXt9LEhhPU9iamVjdC5rZXlzKFYpO2Z1bmN0aW9uIEdhKG4sdCl7dmFyIGE9dC5taXhvdXRzVG87cmV0dXJuIHZ0PW4sQj17fSxPYmplY3Qua2V5cyhWKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0hhLmluZGV4T2YoZSk9PT0tMSYmZGVsZXRlIFZbZV19KSx2dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWUubWl4b3V0P2UubWl4b3V0KCk6e307aWYoT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihpKXt0eXBlb2YgcltpXT09XCJmdW5jdGlvblwiJiYoYVtpXT1yW2ldKSxrbihyW2ldKT09PVwib2JqZWN0XCImJk9iamVjdC5rZXlzKHJbaV0pLmZvckVhY2goZnVuY3Rpb24ocyl7YVtpXXx8KGFbaV09e30pLGFbaV1bc109cltpXVtzXX0pfSksZS5ob29rcyl7dmFyIG89ZS5ob29rcygpO09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oaSl7QltpXXx8KEJbaV09W10pLEJbaV0ucHVzaChvW2ldKX0pfWUucHJvdmlkZXMmJmUucHJvdmlkZXMoVil9KSxhfWZ1bmN0aW9uIERuKG4sdCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkoYT4yP2EtMjowKSxyPTI7cjxhO3IrKyllW3ItMl09YXJndW1lbnRzW3JdO3ZhciBvPUJbbl18fFtdO3JldHVybiBvLmZvckVhY2goZnVuY3Rpb24oaSl7dD1pLmFwcGx5KG51bGwsW3RdLmNvbmNhdChlKSl9KSx0fWZ1bmN0aW9uIEcobil7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkodD4xP3QtMTowKSxlPTE7ZTx0O2UrKylhW2UtMV09YXJndW1lbnRzW2VdO3ZhciByPUJbbl18fFtdO3IuZm9yRWFjaChmdW5jdGlvbihvKXtvLmFwcGx5KG51bGwsYSl9KX1mdW5jdGlvbiBNKCl7dmFyIG49YXJndW1lbnRzWzBdLHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBWW25dP1Zbbl0uYXBwbHkobnVsbCx0KTp2b2lkIDB9ZnVuY3Rpb24gem4obil7bi5wcmVmaXg9PT1cImZhXCImJihuLnByZWZpeD1cImZhc1wiKTt2YXIgdD1uLmljb25OYW1lLGE9bi5wcmVmaXh8fHooKTtpZighIXQpcmV0dXJuIHQ9VyhhLHQpfHx0LHV0KHF0LmRlZmluaXRpb25zLGEsdCl8fHV0KFAuc3R5bGVzLGEsdCl9dmFyIHF0PW5ldyBXYSxYYT1mdW5jdGlvbigpe20uYXV0b1JlcGxhY2VTdmc9ITEsbS5vYnNlcnZlTXV0YXRpb25zPSExLEcoXCJub0F1dG9cIil9LEJhPXtpMnN2ZzpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fTtyZXR1cm4gTD8oRyhcImJlZm9yZUkyc3ZnXCIsdCksTShcInBzZXVkb0VsZW1lbnRzMnN2Z1wiLHQpLE0oXCJpMnN2Z1wiLHQpKTpQcm9taXNlLnJlamVjdChcIk9wZXJhdGlvbiByZXF1aXJlcyBhIERPTSBvZiBzb21lIGtpbmQuXCIpfSx3YXRjaDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fSxhPXQuYXV0b1JlcGxhY2VTdmdSb290O20uYXV0b1JlcGxhY2VTdmc9PT0hMSYmKG0uYXV0b1JlcGxhY2VTdmc9ITApLG0ub2JzZXJ2ZU11dGF0aW9ucz0hMCxUYShmdW5jdGlvbigpe3FhKHthdXRvUmVwbGFjZVN2Z1Jvb3Q6YX0pLEcoXCJ3YXRjaFwiLHQpfSl9fSxWYT17aWNvbjpmdW5jdGlvbih0KXtpZih0PT09bnVsbClyZXR1cm4gbnVsbDtpZihrbih0KT09PVwib2JqZWN0XCImJnQucHJlZml4JiZ0Lmljb25OYW1lKXJldHVybntwcmVmaXg6dC5wcmVmaXgsaWNvbk5hbWU6Vyh0LnByZWZpeCx0Lmljb25OYW1lKXx8dC5pY29uTmFtZX07aWYoQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg9PT0yKXt2YXIgYT10WzFdLmluZGV4T2YoXCJmYS1cIik9PT0wP3RbMV0uc2xpY2UoMyk6dFsxXSxlPVNuKHRbMF0pO3JldHVybntwcmVmaXg6ZSxpY29uTmFtZTpXKGUsYSl8fGF9fWlmKHR5cGVvZiB0PT1cInN0cmluZ1wiJiYodC5pbmRleE9mKFwiXCIuY29uY2F0KG0uY3NzUHJlZml4LFwiLVwiKSk+LTF8fHQubWF0Y2gocGEpKSl7dmFyIHI9RW4odC5zcGxpdChcIiBcIikse3NraXBMb29rdXBzOiEwfSk7cmV0dXJue3ByZWZpeDpyLnByZWZpeHx8eigpLGljb25OYW1lOlcoci5wcmVmaXgsci5pY29uTmFtZSl8fHIuaWNvbk5hbWV9fWlmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXt2YXIgbz16KCk7cmV0dXJue3ByZWZpeDpvLGljb25OYW1lOlcobyx0KXx8dH19fX0sUz17bm9BdXRvOlhhLGNvbmZpZzptLGRvbTpCYSxwYXJzZTpWYSxsaWJyYXJ5OnF0LGZpbmRJY29uRGVmaW5pdGlvbjp6bix0b0h0bWw6Zm59LHFhPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnt9LGE9dC5hdXRvUmVwbGFjZVN2Z1Jvb3QsZT1hPT09dm9pZCAwP2I6YTsoT2JqZWN0LmtleXMoUC5zdHlsZXMpLmxlbmd0aD4wfHxtLmF1dG9GZXRjaFN2ZykmJkwmJm0uYXV0b1JlcGxhY2VTdmcmJlMuZG9tLmkyc3ZnKHtub2RlOmV9KX07ZnVuY3Rpb24gT24obix0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJhYnN0cmFjdFwiLHtnZXQ6dH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwiaHRtbFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5hYnN0cmFjdC5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGZuKGUpfSl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJub2RlXCIse2dldDpmdW5jdGlvbigpe2lmKCEhTCl7dmFyIGU9Yi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBlLmlubmVySFRNTD1uLmh0bWwsZS5jaGlsZHJlbn19fSksbn1mdW5jdGlvbiBLYShuKXt2YXIgdD1uLmNoaWxkcmVuLGE9bi5tYWluLGU9bi5tYXNrLHI9bi5hdHRyaWJ1dGVzLG89bi5zdHlsZXMsaT1uLnRyYW5zZm9ybTtpZihxbihpKSYmYS5mb3VuZCYmIWUuZm91bmQpe3ZhciBzPWEud2lkdGgsZj1hLmhlaWdodCx1PXt4OnMvZi8yLHk6LjV9O3Iuc3R5bGU9QW4oYyhjKHt9LG8pLHt9LHtcInRyYW5zZm9ybS1vcmlnaW5cIjpcIlwiLmNvbmNhdCh1LngraS54LzE2LFwiZW0gXCIpLmNvbmNhdCh1LnkraS55LzE2LFwiZW1cIil9KSl9cmV0dXJuW3t0YWc6XCJzdmdcIixhdHRyaWJ1dGVzOnIsY2hpbGRyZW46dH1dfWZ1bmN0aW9uIFFhKG4pe3ZhciB0PW4ucHJlZml4LGE9bi5pY29uTmFtZSxlPW4uY2hpbGRyZW4scj1uLmF0dHJpYnV0ZXMsbz1uLnN5bWJvbCxpPW89PT0hMD9cIlwiLmNvbmNhdCh0LFwiLVwiKS5jb25jYXQobS5jc3NQcmVmaXgsXCItXCIpLmNvbmNhdChhKTpvO3JldHVyblt7dGFnOlwic3ZnXCIsYXR0cmlidXRlczp7c3R5bGU6XCJkaXNwbGF5OiBub25lO1wifSxjaGlsZHJlbjpbe3RhZzpcInN5bWJvbFwiLGF0dHJpYnV0ZXM6YyhjKHt9LHIpLHt9LHtpZDppfSksY2hpbGRyZW46ZX1dfV19ZnVuY3Rpb24gWm4obil7dmFyIHQ9bi5pY29ucyxhPXQubWFpbixlPXQubWFzayxyPW4ucHJlZml4LG89bi5pY29uTmFtZSxpPW4udHJhbnNmb3JtLHM9bi5zeW1ib2wsZj1uLnRpdGxlLHU9bi5tYXNrSWQsbD1uLnRpdGxlSWQsZD1uLmV4dHJhLHY9bi53YXRjaGFibGUscD12PT09dm9pZCAwPyExOnYsdz1lLmZvdW5kP2U6YSxFPXcud2lkdGgsTz13LmhlaWdodCxDPXI9PT1cImZha1wiLGs9W20ucmVwbGFjZW1lbnRDbGFzcyxvP1wiXCIuY29uY2F0KG0uY3NzUHJlZml4LFwiLVwiKS5jb25jYXQobyk6XCJcIl0uZmlsdGVyKGZ1bmN0aW9uKFIpe3JldHVybiBkLmNsYXNzZXMuaW5kZXhPZihSKT09PS0xfSkuZmlsdGVyKGZ1bmN0aW9uKFIpe3JldHVybiBSIT09XCJcInx8ISFSfSkuY29uY2F0KGQuY2xhc3Nlcykuam9pbihcIiBcIikseD17Y2hpbGRyZW46W10sYXR0cmlidXRlczpjKGMoe30sZC5hdHRyaWJ1dGVzKSx7fSx7XCJkYXRhLXByZWZpeFwiOnIsXCJkYXRhLWljb25cIjpvLGNsYXNzOmsscm9sZTpkLmF0dHJpYnV0ZXMucm9sZXx8XCJpbWdcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsdmlld0JveDpcIjAgMCBcIi5jb25jYXQoRSxcIiBcIikuY29uY2F0KE8pfSl9LEk9QyYmIX5kLmNsYXNzZXMuaW5kZXhPZihcImZhLWZ3XCIpP3t3aWR0aDpcIlwiLmNvbmNhdChFL08qMTYqLjA2MjUsXCJlbVwiKX06e307cCYmKHguYXR0cmlidXRlc1tIXT1cIlwiKSxmJiYoeC5jaGlsZHJlbi5wdXNoKHt0YWc6XCJ0aXRsZVwiLGF0dHJpYnV0ZXM6e2lkOnguYXR0cmlidXRlc1tcImFyaWEtbGFiZWxsZWRieVwiXXx8XCJ0aXRsZS1cIi5jb25jYXQobHx8cm4oKSl9LGNoaWxkcmVuOltmXX0pLGRlbGV0ZSB4LmF0dHJpYnV0ZXMudGl0bGUpO3ZhciBBPWMoYyh7fSx4KSx7fSx7cHJlZml4OnIsaWNvbk5hbWU6byxtYWluOmEsbWFzazplLG1hc2tJZDp1LHRyYW5zZm9ybTppLHN5bWJvbDpzLHN0eWxlczpjKGMoe30sSSksZC5zdHlsZXMpfSksWT1lLmZvdW5kJiZhLmZvdW5kP00oXCJnZW5lcmF0ZUFic3RyYWN0TWFza1wiLEEpfHx7Y2hpbGRyZW46W10sYXR0cmlidXRlczp7fX06TShcImdlbmVyYXRlQWJzdHJhY3RJY29uXCIsQSl8fHtjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSwkPVkuY2hpbGRyZW4sUG49WS5hdHRyaWJ1dGVzO3JldHVybiBBLmNoaWxkcmVuPSQsQS5hdHRyaWJ1dGVzPVBuLHM/UWEoQSk6S2EoQSl9ZnVuY3Rpb24gcHQobil7dmFyIHQ9bi5jb250ZW50LGE9bi53aWR0aCxlPW4uaGVpZ2h0LHI9bi50cmFuc2Zvcm0sbz1uLnRpdGxlLGk9bi5leHRyYSxzPW4ud2F0Y2hhYmxlLGY9cz09PXZvaWQgMD8hMTpzLHU9YyhjKGMoe30saS5hdHRyaWJ1dGVzKSxvP3t0aXRsZTpvfTp7fSkse30se2NsYXNzOmkuY2xhc3Nlcy5qb2luKFwiIFwiKX0pO2YmJih1W0hdPVwiXCIpO3ZhciBsPWMoe30saS5zdHlsZXMpO3FuKHIpJiYobC50cmFuc2Zvcm09Q2Eoe3RyYW5zZm9ybTpyLHN0YXJ0Q2VudGVyZWQ6ITAsd2lkdGg6YSxoZWlnaHQ6ZX0pLGxbXCItd2Via2l0LXRyYW5zZm9ybVwiXT1sLnRyYW5zZm9ybSk7dmFyIGQ9QW4obCk7ZC5sZW5ndGg+MCYmKHUuc3R5bGU9ZCk7dmFyIHY9W107cmV0dXJuIHYucHVzaCh7dGFnOlwic3BhblwiLGF0dHJpYnV0ZXM6dSxjaGlsZHJlbjpbdF19KSxvJiZ2LnB1c2goe3RhZzpcInNwYW5cIixhdHRyaWJ1dGVzOntjbGFzczpcInNyLW9ubHlcIn0sY2hpbGRyZW46W29dfSksdn1mdW5jdGlvbiBKYShuKXt2YXIgdD1uLmNvbnRlbnQsYT1uLnRpdGxlLGU9bi5leHRyYSxyPWMoYyhjKHt9LGUuYXR0cmlidXRlcyksYT97dGl0bGU6YX06e30pLHt9LHtjbGFzczplLmNsYXNzZXMuam9pbihcIiBcIil9KSxvPUFuKGUuc3R5bGVzKTtvLmxlbmd0aD4wJiYoci5zdHlsZT1vKTt2YXIgaT1bXTtyZXR1cm4gaS5wdXNoKHt0YWc6XCJzcGFuXCIsYXR0cmlidXRlczpyLGNoaWxkcmVuOlt0XX0pLGEmJmkucHVzaCh7dGFnOlwic3BhblwiLGF0dHJpYnV0ZXM6e2NsYXNzOlwic3Itb25seVwifSxjaGlsZHJlbjpbYV19KSxpfXZhciBObj1QLnN0eWxlcztmdW5jdGlvbiBqbihuKXt2YXIgdD1uWzBdLGE9blsxXSxlPW4uc2xpY2UoNCkscj1XbihlLDEpLG89clswXSxpPW51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkobyk/aT17dGFnOlwiZ1wiLGF0dHJpYnV0ZXM6e2NsYXNzOlwiXCIuY29uY2F0KG0uY3NzUHJlZml4LFwiLVwiKS5jb25jYXQoVS5HUk9VUCl9LGNoaWxkcmVuOlt7dGFnOlwicGF0aFwiLGF0dHJpYnV0ZXM6e2NsYXNzOlwiXCIuY29uY2F0KG0uY3NzUHJlZml4LFwiLVwiKS5jb25jYXQoVS5TRUNPTkRBUlkpLGZpbGw6XCJjdXJyZW50Q29sb3JcIixkOm9bMF19fSx7dGFnOlwicGF0aFwiLGF0dHJpYnV0ZXM6e2NsYXNzOlwiXCIuY29uY2F0KG0uY3NzUHJlZml4LFwiLVwiKS5jb25jYXQoVS5QUklNQVJZKSxmaWxsOlwiY3VycmVudENvbG9yXCIsZDpvWzFdfX1dfTppPXt0YWc6XCJwYXRoXCIsYXR0cmlidXRlczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGQ6b319LHtmb3VuZDohMCx3aWR0aDp0LGhlaWdodDphLGljb246aX19dmFyIFphPXtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMn07ZnVuY3Rpb24gbmUobix0KXshUnQmJiFtLnNob3dNaXNzaW5nSWNvbnMmJm4mJmNvbnNvbGUuZXJyb3IoJ0ljb24gd2l0aCBuYW1lIFwiJy5jb25jYXQobiwnXCIgYW5kIHByZWZpeCBcIicpLmNvbmNhdCh0LCdcIiBpcyBtaXNzaW5nLicpKX1mdW5jdGlvbiBZbihuLHQpe3ZhciBhPXQ7cmV0dXJuIHQ9PT1cImZhXCImJm0uc3R5bGVEZWZhdWx0IT09bnVsbCYmKHQ9eigpKSxuZXcgUHJvbWlzZShmdW5jdGlvbihlLHIpe3ZhciBvPXtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMixpY29uOk0oXCJtaXNzaW5nSWNvbkFic3RyYWN0XCIpfHx7fX07aWYoYT09PVwiZmFcIil7dmFyIGk9VnQobil8fHt9O249aS5pY29uTmFtZXx8bix0PWkucHJlZml4fHx0fWlmKG4mJnQmJk5uW3RdJiZOblt0XVtuXSl7dmFyIHM9Tm5bdF1bbl07cmV0dXJuIGUoam4ocykpfW5lKG4sdCksZShjKGMoe30sWmEpLHt9LHtpY29uOm0uc2hvd01pc3NpbmdJY29ucyYmbj9NKFwibWlzc2luZ0ljb25BYnN0cmFjdFwiKXx8e306e319KSl9KX12YXIgZ3Q9ZnVuY3Rpb24oKXt9LCRuPW0ubWVhc3VyZVBlcmZvcm1hbmNlJiZsbiYmbG4ubWFyayYmbG4ubWVhc3VyZT9sbjp7bWFyazpndCxtZWFzdXJlOmd0fSxRPSdGQSBcIjYuMi4wXCInLHRlPWZ1bmN0aW9uKHQpe3JldHVybiAkbi5tYXJrKFwiXCIuY29uY2F0KFEsXCIgXCIpLmNvbmNhdCh0LFwiIGJlZ2luc1wiKSksZnVuY3Rpb24oKXtyZXR1cm4gS3QodCl9fSxLdD1mdW5jdGlvbih0KXskbi5tYXJrKFwiXCIuY29uY2F0KFEsXCIgXCIpLmNvbmNhdCh0LFwiIGVuZHNcIikpLCRuLm1lYXN1cmUoXCJcIi5jb25jYXQoUSxcIiBcIikuY29uY2F0KHQpLFwiXCIuY29uY2F0KFEsXCIgXCIpLmNvbmNhdCh0LFwiIGJlZ2luc1wiKSxcIlwiLmNvbmNhdChRLFwiIFwiKS5jb25jYXQodCxcIiBlbmRzXCIpKX0sbnQ9e2JlZ2luOnRlLGVuZDpLdH0saG49ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIGJ0KG4pe3ZhciB0PW4uZ2V0QXR0cmlidXRlP24uZ2V0QXR0cmlidXRlKEgpOm51bGw7cmV0dXJuIHR5cGVvZiB0PT1cInN0cmluZ1wifWZ1bmN0aW9uIGFlKG4pe3ZhciB0PW4uZ2V0QXR0cmlidXRlP24uZ2V0QXR0cmlidXRlKEduKTpudWxsLGE9bi5nZXRBdHRyaWJ1dGU/bi5nZXRBdHRyaWJ1dGUoWG4pOm51bGw7cmV0dXJuIHQmJmF9ZnVuY3Rpb24gZWUobil7cmV0dXJuIG4mJm4uY2xhc3NMaXN0JiZuLmNsYXNzTGlzdC5jb250YWlucyYmbi5jbGFzc0xpc3QuY29udGFpbnMobS5yZXBsYWNlbWVudENsYXNzKX1mdW5jdGlvbiByZSgpe2lmKG0uYXV0b1JlcGxhY2VTdmc9PT0hMClyZXR1cm4geW4ucmVwbGFjZTt2YXIgbj15blttLmF1dG9SZXBsYWNlU3ZnXTtyZXR1cm4gbnx8eW4ucmVwbGFjZX1mdW5jdGlvbiBpZShuKXtyZXR1cm4gYi5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLG4pfWZ1bmN0aW9uIG9lKG4pe3JldHVybiBiLmNyZWF0ZUVsZW1lbnQobil9ZnVuY3Rpb24gUXQobil7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGE9dC5jZUZuLGU9YT09PXZvaWQgMD9uLnRhZz09PVwic3ZnXCI/aWU6b2U6YTtpZih0eXBlb2Ygbj09XCJzdHJpbmdcIilyZXR1cm4gYi5jcmVhdGVUZXh0Tm9kZShuKTt2YXIgcj1lKG4udGFnKTtPYmplY3Qua2V5cyhuLmF0dHJpYnV0ZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3Iuc2V0QXR0cmlidXRlKGksbi5hdHRyaWJ1dGVzW2ldKX0pO3ZhciBvPW4uY2hpbGRyZW58fFtdO3JldHVybiBvLmZvckVhY2goZnVuY3Rpb24oaSl7ci5hcHBlbmRDaGlsZChRdChpLHtjZUZuOmV9KSl9KSxyfWZ1bmN0aW9uIHNlKG4pe3ZhciB0PVwiIFwiLmNvbmNhdChuLm91dGVySFRNTCxcIiBcIik7cmV0dXJuIHQ9XCJcIi5jb25jYXQodCxcIkZvbnQgQXdlc29tZSBmb250YXdlc29tZS5jb20gXCIpLHR9dmFyIHluPXtyZXBsYWNlOmZ1bmN0aW9uKHQpe3ZhciBhPXRbMF07aWYoYS5wYXJlbnROb2RlKWlmKHRbMV0uZm9yRWFjaChmdW5jdGlvbihyKXthLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFF0KHIpLGEpfSksYS5nZXRBdHRyaWJ1dGUoSCk9PT1udWxsJiZtLmtlZXBPcmlnaW5hbFNvdXJjZSl7dmFyIGU9Yi5jcmVhdGVDb21tZW50KHNlKGEpKTthLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsYSl9ZWxzZSBhLnJlbW92ZSgpfSxuZXN0OmZ1bmN0aW9uKHQpe3ZhciBhPXRbMF0sZT10WzFdO2lmKH5WbihhKS5pbmRleE9mKG0ucmVwbGFjZW1lbnRDbGFzcykpcmV0dXJuIHluLnJlcGxhY2UodCk7dmFyIHI9bmV3IFJlZ0V4cChcIlwiLmNvbmNhdChtLmNzc1ByZWZpeCxcIi0uKlwiKSk7aWYoZGVsZXRlIGVbMF0uYXR0cmlidXRlcy5pZCxlWzBdLmF0dHJpYnV0ZXMuY2xhc3Mpe3ZhciBvPWVbMF0uYXR0cmlidXRlcy5jbGFzcy5zcGxpdChcIiBcIikucmVkdWNlKGZ1bmN0aW9uKHMsZil7cmV0dXJuIGY9PT1tLnJlcGxhY2VtZW50Q2xhc3N8fGYubWF0Y2gocik/cy50b1N2Zy5wdXNoKGYpOnMudG9Ob2RlLnB1c2goZiksc30se3RvTm9kZTpbXSx0b1N2ZzpbXX0pO2VbMF0uYXR0cmlidXRlcy5jbGFzcz1vLnRvU3ZnLmpvaW4oXCIgXCIpLG8udG9Ob2RlLmxlbmd0aD09PTA/YS5yZW1vdmVBdHRyaWJ1dGUoXCJjbGFzc1wiKTphLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsby50b05vZGUuam9pbihcIiBcIikpfXZhciBpPWUubWFwKGZ1bmN0aW9uKHMpe3JldHVybiBmbihzKX0pLmpvaW4oYFxuYCk7YS5zZXRBdHRyaWJ1dGUoSCxcIlwiKSxhLmlubmVySFRNTD1pfX07ZnVuY3Rpb24gaHQobil7bigpfWZ1bmN0aW9uIEp0KG4sdCl7dmFyIGE9dHlwZW9mIHQ9PVwiZnVuY3Rpb25cIj90OmhuO2lmKG4ubGVuZ3RoPT09MClhKCk7ZWxzZXt2YXIgZT1odDttLm11dGF0ZUFwcHJvYWNoPT09bWEmJihlPUQucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxodCksZShmdW5jdGlvbigpe3ZhciByPXJlKCksbz1udC5iZWdpbihcIm11dGF0ZVwiKTtuLm1hcChyKSxvKCksYSgpfSl9fXZhciB0dD0hMTtmdW5jdGlvbiBadCgpe3R0PSEwfWZ1bmN0aW9uIFVuKCl7dHQ9ITF9dmFyIHhuPW51bGw7ZnVuY3Rpb24geXQobil7aWYoISFzdCYmISFtLm9ic2VydmVNdXRhdGlvbnMpe3ZhciB0PW4udHJlZUNhbGxiYWNrLGE9dD09PXZvaWQgMD9objp0LGU9bi5ub2RlQ2FsbGJhY2sscj1lPT09dm9pZCAwP2huOmUsbz1uLnBzZXVkb0VsZW1lbnRzQ2FsbGJhY2ssaT1vPT09dm9pZCAwP2huOm8scz1uLm9ic2VydmVNdXRhdGlvbnNSb290LGY9cz09PXZvaWQgMD9iOnM7eG49bmV3IHN0KGZ1bmN0aW9uKHUpe2lmKCF0dCl7dmFyIGw9eigpO0sodSkuZm9yRWFjaChmdW5jdGlvbihkKXtpZihkLnR5cGU9PT1cImNoaWxkTGlzdFwiJiZkLmFkZGVkTm9kZXMubGVuZ3RoPjAmJiFidChkLmFkZGVkTm9kZXNbMF0pJiYobS5zZWFyY2hQc2V1ZG9FbGVtZW50cyYmaShkLnRhcmdldCksYShkLnRhcmdldCkpLGQudHlwZT09PVwiYXR0cmlidXRlc1wiJiZkLnRhcmdldC5wYXJlbnROb2RlJiZtLnNlYXJjaFBzZXVkb0VsZW1lbnRzJiZpKGQudGFyZ2V0LnBhcmVudE5vZGUpLGQudHlwZT09PVwiYXR0cmlidXRlc1wiJiZidChkLnRhcmdldCkmJn55YS5pbmRleE9mKGQuYXR0cmlidXRlTmFtZSkpaWYoZC5hdHRyaWJ1dGVOYW1lPT09XCJjbGFzc1wiJiZhZShkLnRhcmdldCkpe3ZhciB2PUVuKFZuKGQudGFyZ2V0KSkscD12LnByZWZpeCx3PXYuaWNvbk5hbWU7ZC50YXJnZXQuc2V0QXR0cmlidXRlKEduLHB8fGwpLHcmJmQudGFyZ2V0LnNldEF0dHJpYnV0ZShYbix3KX1lbHNlIGVlKGQudGFyZ2V0KSYmcihkLnRhcmdldCl9KX19KSxMJiZ4bi5vYnNlcnZlKGYse2NoaWxkTGlzdDohMCxhdHRyaWJ1dGVzOiEwLGNoYXJhY3RlckRhdGE6ITAsc3VidHJlZTohMH0pfX1mdW5jdGlvbiBmZSgpeyF4bnx8eG4uZGlzY29ubmVjdCgpfWZ1bmN0aW9uIGxlKG4pe3ZhciB0PW4uZ2V0QXR0cmlidXRlKFwic3R5bGVcIiksYT1bXTtyZXR1cm4gdCYmKGE9dC5zcGxpdChcIjtcIikucmVkdWNlKGZ1bmN0aW9uKGUscil7dmFyIG89ci5zcGxpdChcIjpcIiksaT1vWzBdLHM9by5zbGljZSgxKTtyZXR1cm4gaSYmcy5sZW5ndGg+MCYmKGVbaV09cy5qb2luKFwiOlwiKS50cmltKCkpLGV9LHt9KSksYX1mdW5jdGlvbiBjZShuKXt2YXIgdD1uLmdldEF0dHJpYnV0ZShcImRhdGEtcHJlZml4XCIpLGE9bi5nZXRBdHRyaWJ1dGUoXCJkYXRhLWljb25cIiksZT1uLmlubmVyVGV4dCE9PXZvaWQgMD9uLmlubmVyVGV4dC50cmltKCk6XCJcIixyPUVuKFZuKG4pKTtyZXR1cm4gci5wcmVmaXh8fChyLnByZWZpeD16KCkpLHQmJmEmJihyLnByZWZpeD10LHIuaWNvbk5hbWU9YSksci5pY29uTmFtZSYmci5wcmVmaXh8fChyLnByZWZpeCYmZS5sZW5ndGg+MCYmKHIuaWNvbk5hbWU9JGEoci5wcmVmaXgsbi5pbm5lclRleHQpfHxRbihyLnByZWZpeCxSbihuLmlubmVyVGV4dCkpKSwhci5pY29uTmFtZSYmbS5hdXRvRmV0Y2hTdmcmJm4uZmlyc3RDaGlsZCYmbi5maXJzdENoaWxkLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUmJihyLmljb25OYW1lPW4uZmlyc3RDaGlsZC5kYXRhKSkscn1mdW5jdGlvbiB1ZShuKXt2YXIgdD1LKG4uYXR0cmlidXRlcykucmVkdWNlKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIHIubmFtZSE9PVwiY2xhc3NcIiYmci5uYW1lIT09XCJzdHlsZVwiJiYocltvLm5hbWVdPW8udmFsdWUpLHJ9LHt9KSxhPW4uZ2V0QXR0cmlidXRlKFwidGl0bGVcIiksZT1uLmdldEF0dHJpYnV0ZShcImRhdGEtZmEtdGl0bGUtaWRcIik7cmV0dXJuIG0uYXV0b0ExMXkmJihhP3RbXCJhcmlhLWxhYmVsbGVkYnlcIl09XCJcIi5jb25jYXQobS5yZXBsYWNlbWVudENsYXNzLFwiLXRpdGxlLVwiKS5jb25jYXQoZXx8cm4oKSk6KHRbXCJhcmlhLWhpZGRlblwiXT1cInRydWVcIix0LmZvY3VzYWJsZT1cImZhbHNlXCIpKSx0fWZ1bmN0aW9uIG1lKCl7cmV0dXJue2ljb25OYW1lOm51bGwsdGl0bGU6bnVsbCx0aXRsZUlkOm51bGwscHJlZml4Om51bGwsdHJhbnNmb3JtOk4sc3ltYm9sOiExLG1hc2s6e2ljb25OYW1lOm51bGwscHJlZml4Om51bGwscmVzdDpbXX0sbWFza0lkOm51bGwsZXh0cmE6e2NsYXNzZXM6W10sc3R5bGVzOnt9LGF0dHJpYnV0ZXM6e319fX1mdW5jdGlvbiBrdChuKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e3N0eWxlUGFyc2VyOiEwfSxhPWNlKG4pLGU9YS5pY29uTmFtZSxyPWEucHJlZml4LG89YS5yZXN0LGk9dWUobikscz1EbihcInBhcnNlTm9kZUF0dHJpYnV0ZXNcIix7fSxuKSxmPXQuc3R5bGVQYXJzZXI/bGUobik6W107cmV0dXJuIGMoe2ljb25OYW1lOmUsdGl0bGU6bi5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKSx0aXRsZUlkOm4uZ2V0QXR0cmlidXRlKFwiZGF0YS1mYS10aXRsZS1pZFwiKSxwcmVmaXg6cix0cmFuc2Zvcm06TixtYXNrOntpY29uTmFtZTpudWxsLHByZWZpeDpudWxsLHJlc3Q6W119LG1hc2tJZDpudWxsLHN5bWJvbDohMSxleHRyYTp7Y2xhc3NlczpvLHN0eWxlczpmLGF0dHJpYnV0ZXM6aX19LHMpfXZhciBkZT1QLnN0eWxlcztmdW5jdGlvbiBuYShuKXt2YXIgdD1tLmF1dG9SZXBsYWNlU3ZnPT09XCJuZXN0XCI/a3Qobix7c3R5bGVQYXJzZXI6ITF9KTprdChuKTtyZXR1cm5+dC5leHRyYS5jbGFzc2VzLmluZGV4T2YoRnQpP00oXCJnZW5lcmF0ZUxheWVyc1RleHRcIixuLHQpOk0oXCJnZW5lcmF0ZVN2Z1JlcGxhY2VtZW50TXV0YXRpb25cIixuLHQpfXZhciBqPW5ldyBTZXQ7Qm4ubWFwKGZ1bmN0aW9uKG4pe2ouYWRkKFwiZmEtXCIuY29uY2F0KG4pKX0pO09iamVjdC5rZXlzKG5uW2ddKS5tYXAoai5hZGQuYmluZChqKSk7T2JqZWN0LmtleXMobm5baF0pLm1hcChqLmFkZC5iaW5kKGopKTtqPW9uKGopO2Z1bmN0aW9uIHd0KG4pe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsO2lmKCFMKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTt2YXIgYT1iLmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QsZT1mdW5jdGlvbihkKXtyZXR1cm4gYS5hZGQoXCJcIi5jb25jYXQoZnQsXCItXCIpLmNvbmNhdChkKSl9LHI9ZnVuY3Rpb24oZCl7cmV0dXJuIGEucmVtb3ZlKFwiXCIuY29uY2F0KGZ0LFwiLVwiKS5jb25jYXQoZCkpfSxvPW0uYXV0b0ZldGNoU3ZnP2o6Qm4ubWFwKGZ1bmN0aW9uKGwpe3JldHVyblwiZmEtXCIuY29uY2F0KGwpfSkuY29uY2F0KE9iamVjdC5rZXlzKGRlKSk7by5pbmNsdWRlcyhcImZhXCIpfHxvLnB1c2goXCJmYVwiKTt2YXIgaT1bXCIuXCIuY29uY2F0KEZ0LFwiOm5vdChbXCIpLmNvbmNhdChILFwiXSlcIildLmNvbmNhdChvLm1hcChmdW5jdGlvbihsKXtyZXR1cm5cIi5cIi5jb25jYXQobCxcIjpub3QoW1wiKS5jb25jYXQoSCxcIl0pXCIpfSkpLmpvaW4oXCIsIFwiKTtpZihpLmxlbmd0aD09PTApcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBzPVtdO3RyeXtzPUsobi5xdWVyeVNlbGVjdG9yQWxsKGkpKX1jYXRjaHt9aWYocy5sZW5ndGg+MCllKFwicGVuZGluZ1wiKSxyKFwiY29tcGxldGVcIik7ZWxzZSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGY9bnQuYmVnaW4oXCJvblRyZWVcIiksdT1zLnJlZHVjZShmdW5jdGlvbihsLGQpe3RyeXt2YXIgdj1uYShkKTt2JiZsLnB1c2godil9Y2F0Y2gocCl7UnR8fHAubmFtZT09PVwiTWlzc2luZ0ljb25cIiYmY29uc29sZS5lcnJvcihwKX1yZXR1cm4gbH0sW10pO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihsLGQpe1Byb21pc2UuYWxsKHUpLnRoZW4oZnVuY3Rpb24odil7SnQodixmdW5jdGlvbigpe2UoXCJhY3RpdmVcIiksZShcImNvbXBsZXRlXCIpLHIoXCJwZW5kaW5nXCIpLHR5cGVvZiB0PT1cImZ1bmN0aW9uXCImJnQoKSxmKCksbCgpfSl9KS5jYXRjaChmdW5jdGlvbih2KXtmKCksZCh2KX0pfSl9ZnVuY3Rpb24gdmUobil7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGw7bmEobikudGhlbihmdW5jdGlvbihhKXthJiZKdChbYV0sdCl9KX1mdW5jdGlvbiBwZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LGU9KHR8fHt9KS5pY29uP3Q6em4odHx8e30pLHI9YS5tYXNrO3JldHVybiByJiYocj0ocnx8e30pLmljb24/cjp6bihyfHx7fSkpLG4oZSxjKGMoe30sYSkse30se21hc2s6cn0pKX19dmFyIGdlPWZ1bmN0aW9uKHQpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSxlPWEudHJhbnNmb3JtLHI9ZT09PXZvaWQgMD9OOmUsbz1hLnN5bWJvbCxpPW89PT12b2lkIDA/ITE6byxzPWEubWFzayxmPXM9PT12b2lkIDA/bnVsbDpzLHU9YS5tYXNrSWQsbD11PT09dm9pZCAwP251bGw6dSxkPWEudGl0bGUsdj1kPT09dm9pZCAwP251bGw6ZCxwPWEudGl0bGVJZCx3PXA9PT12b2lkIDA/bnVsbDpwLEU9YS5jbGFzc2VzLE89RT09PXZvaWQgMD9bXTpFLEM9YS5hdHRyaWJ1dGVzLGs9Qz09PXZvaWQgMD97fTpDLHg9YS5zdHlsZXMsST14PT09dm9pZCAwP3t9Ong7aWYoISF0KXt2YXIgQT10LnByZWZpeCxZPXQuaWNvbk5hbWUsJD10Lmljb247cmV0dXJuIE9uKGMoe3R5cGU6XCJpY29uXCJ9LHQpLGZ1bmN0aW9uKCl7cmV0dXJuIEcoXCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb25cIix7aWNvbkRlZmluaXRpb246dCxwYXJhbXM6YX0pLG0uYXV0b0ExMXkmJih2P2tbXCJhcmlhLWxhYmVsbGVkYnlcIl09XCJcIi5jb25jYXQobS5yZXBsYWNlbWVudENsYXNzLFwiLXRpdGxlLVwiKS5jb25jYXQod3x8cm4oKSk6KGtbXCJhcmlhLWhpZGRlblwiXT1cInRydWVcIixrLmZvY3VzYWJsZT1cImZhbHNlXCIpKSxabih7aWNvbnM6e21haW46am4oJCksbWFzazpmP2puKGYuaWNvbik6e2ZvdW5kOiExLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsaWNvbjp7fX19LHByZWZpeDpBLGljb25OYW1lOlksdHJhbnNmb3JtOmMoYyh7fSxOKSxyKSxzeW1ib2w6aSx0aXRsZTp2LG1hc2tJZDpsLHRpdGxlSWQ6dyxleHRyYTp7YXR0cmlidXRlczprLHN0eWxlczpJLGNsYXNzZXM6T319KX0pfX0sYmU9e21peG91dDpmdW5jdGlvbigpe3JldHVybntpY29uOnBlKGdlKX19LGhvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue211dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudHJlZUNhbGxiYWNrPXd0LGEubm9kZUNhbGxiYWNrPXZlLGF9fX0scHJvdmlkZXM6ZnVuY3Rpb24odCl7dC5pMnN2Zz1mdW5jdGlvbihhKXt2YXIgZT1hLm5vZGUscj1lPT09dm9pZCAwP2I6ZSxvPWEuY2FsbGJhY2ssaT1vPT09dm9pZCAwP2Z1bmN0aW9uKCl7fTpvO3JldHVybiB3dChyLGkpfSx0LmdlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbj1mdW5jdGlvbihhLGUpe3ZhciByPWUuaWNvbk5hbWUsbz1lLnRpdGxlLGk9ZS50aXRsZUlkLHM9ZS5wcmVmaXgsZj1lLnRyYW5zZm9ybSx1PWUuc3ltYm9sLGw9ZS5tYXNrLGQ9ZS5tYXNrSWQsdj1lLmV4dHJhO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihwLHcpe1Byb21pc2UuYWxsKFtZbihyLHMpLGwuaWNvbk5hbWU/WW4obC5pY29uTmFtZSxsLnByZWZpeCk6UHJvbWlzZS5yZXNvbHZlKHtmb3VuZDohMSx3aWR0aDo1MTIsaGVpZ2h0OjUxMixpY29uOnt9fSldKS50aGVuKGZ1bmN0aW9uKEUpe3ZhciBPPVduKEUsMiksQz1PWzBdLGs9T1sxXTtwKFthLFpuKHtpY29uczp7bWFpbjpDLG1hc2s6a30scHJlZml4OnMsaWNvbk5hbWU6cix0cmFuc2Zvcm06ZixzeW1ib2w6dSxtYXNrSWQ6ZCx0aXRsZTpvLHRpdGxlSWQ6aSxleHRyYTp2LHdhdGNoYWJsZTohMH0pXSl9KS5jYXRjaCh3KX0pfSx0LmdlbmVyYXRlQWJzdHJhY3RJY29uPWZ1bmN0aW9uKGEpe3ZhciBlPWEuY2hpbGRyZW4scj1hLmF0dHJpYnV0ZXMsbz1hLm1haW4saT1hLnRyYW5zZm9ybSxzPWEuc3R5bGVzLGY9QW4ocyk7Zi5sZW5ndGg+MCYmKHIuc3R5bGU9Zik7dmFyIHU7cmV0dXJuIHFuKGkpJiYodT1NKFwiZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nXCIse21haW46byx0cmFuc2Zvcm06aSxjb250YWluZXJXaWR0aDpvLndpZHRoLGljb25XaWR0aDpvLndpZHRofSkpLGUucHVzaCh1fHxvLmljb24pLHtjaGlsZHJlbjplLGF0dHJpYnV0ZXM6cn19fX0saGU9e21peG91dDpmdW5jdGlvbigpe3JldHVybntsYXllcjpmdW5jdGlvbihhKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30scj1lLmNsYXNzZXMsbz1yPT09dm9pZCAwP1tdOnI7cmV0dXJuIE9uKHt0eXBlOlwibGF5ZXJcIn0sZnVuY3Rpb24oKXtHKFwiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uXCIse2Fzc2VtYmxlcjphLHBhcmFtczplfSk7dmFyIGk9W107cmV0dXJuIGEoZnVuY3Rpb24ocyl7QXJyYXkuaXNBcnJheShzKT9zLm1hcChmdW5jdGlvbihmKXtpPWkuY29uY2F0KGYuYWJzdHJhY3QpfSk6aT1pLmNvbmNhdChzLmFic3RyYWN0KX0pLFt7dGFnOlwic3BhblwiLGF0dHJpYnV0ZXM6e2NsYXNzOltcIlwiLmNvbmNhdChtLmNzc1ByZWZpeCxcIi1sYXllcnNcIildLmNvbmNhdChvbihvKSkuam9pbihcIiBcIil9LGNoaWxkcmVuOml9XX0pfX19fSx5ZT17bWl4b3V0OmZ1bmN0aW9uKCl7cmV0dXJue2NvdW50ZXI6ZnVuY3Rpb24oYSl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnt9LHI9ZS50aXRsZSxvPXI9PT12b2lkIDA/bnVsbDpyLGk9ZS5jbGFzc2VzLHM9aT09PXZvaWQgMD9bXTppLGY9ZS5hdHRyaWJ1dGVzLHU9Zj09PXZvaWQgMD97fTpmLGw9ZS5zdHlsZXMsZD1sPT09dm9pZCAwP3t9Omw7cmV0dXJuIE9uKHt0eXBlOlwiY291bnRlclwiLGNvbnRlbnQ6YX0sZnVuY3Rpb24oKXtyZXR1cm4gRyhcImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvblwiLHtjb250ZW50OmEscGFyYW1zOmV9KSxKYSh7Y29udGVudDphLnRvU3RyaW5nKCksdGl0bGU6byxleHRyYTp7YXR0cmlidXRlczp1LHN0eWxlczpkLGNsYXNzZXM6W1wiXCIuY29uY2F0KG0uY3NzUHJlZml4LFwiLWxheWVycy1jb3VudGVyXCIpXS5jb25jYXQob24ocykpfX0pfSl9fX19LGtlPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57dGV4dDpmdW5jdGlvbihhKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30scj1lLnRyYW5zZm9ybSxvPXI9PT12b2lkIDA/TjpyLGk9ZS50aXRsZSxzPWk9PT12b2lkIDA/bnVsbDppLGY9ZS5jbGFzc2VzLHU9Zj09PXZvaWQgMD9bXTpmLGw9ZS5hdHRyaWJ1dGVzLGQ9bD09PXZvaWQgMD97fTpsLHY9ZS5zdHlsZXMscD12PT09dm9pZCAwP3t9OnY7cmV0dXJuIE9uKHt0eXBlOlwidGV4dFwiLGNvbnRlbnQ6YX0sZnVuY3Rpb24oKXtyZXR1cm4gRyhcImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvblwiLHtjb250ZW50OmEscGFyYW1zOmV9KSxwdCh7Y29udGVudDphLHRyYW5zZm9ybTpjKGMoe30sTiksbyksdGl0bGU6cyxleHRyYTp7YXR0cmlidXRlczpkLHN0eWxlczpwLGNsYXNzZXM6W1wiXCIuY29uY2F0KG0uY3NzUHJlZml4LFwiLWxheWVycy10ZXh0XCIpXS5jb25jYXQob24odSkpfX0pfSl9fX0scHJvdmlkZXM6ZnVuY3Rpb24odCl7dC5nZW5lcmF0ZUxheWVyc1RleHQ9ZnVuY3Rpb24oYSxlKXt2YXIgcj1lLnRpdGxlLG89ZS50cmFuc2Zvcm0saT1lLmV4dHJhLHM9bnVsbCxmPW51bGw7aWYoVHQpe3ZhciB1PXBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZm9udFNpemUsMTApLGw9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtzPWwud2lkdGgvdSxmPWwuaGVpZ2h0L3V9cmV0dXJuIG0uYXV0b0ExMXkmJiFyJiYoaS5hdHRyaWJ1dGVzW1wiYXJpYS1oaWRkZW5cIl09XCJ0cnVlXCIpLFByb21pc2UucmVzb2x2ZShbYSxwdCh7Y29udGVudDphLmlubmVySFRNTCx3aWR0aDpzLGhlaWdodDpmLHRyYW5zZm9ybTpvLHRpdGxlOnIsZXh0cmE6aSx3YXRjaGFibGU6ITB9KV0pfX19LHdlPW5ldyBSZWdFeHAoJ1wiJyxcInVnXCIpLHh0PVsxMTA1OTIwLDExMTIzMTldO2Z1bmN0aW9uIHhlKG4pe3ZhciB0PW4ucmVwbGFjZSh3ZSxcIlwiKSxhPVJhKHQsMCksZT1hPj14dFswXSYmYTw9eHRbMV0scj10Lmxlbmd0aD09PTI/dFswXT09PXRbMV06ITE7cmV0dXJue3ZhbHVlOlJuKHI/dFswXTp0KSxpc1NlY29uZGFyeTplfHxyfX1mdW5jdGlvbiBBdChuLHQpe3ZhciBhPVwiXCIuY29uY2F0KHVhKS5jb25jYXQodC5yZXBsYWNlKFwiOlwiLFwiLVwiKSk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7aWYobi5nZXRBdHRyaWJ1dGUoYSkhPT1udWxsKXJldHVybiBlKCk7dmFyIG89SyhuLmNoaWxkcmVuKSxpPW8uZmlsdGVyKGZ1bmN0aW9uKCQpe3JldHVybiAkLmdldEF0dHJpYnV0ZShMbik9PT10fSlbMF0scz1ELmdldENvbXB1dGVkU3R5bGUobix0KSxmPXMuZ2V0UHJvcGVydHlWYWx1ZShcImZvbnQtZmFtaWx5XCIpLm1hdGNoKGdhKSx1PXMuZ2V0UHJvcGVydHlWYWx1ZShcImZvbnQtd2VpZ2h0XCIpLGw9cy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudFwiKTtpZihpJiYhZilyZXR1cm4gbi5yZW1vdmVDaGlsZChpKSxlKCk7aWYoZiYmbCE9PVwibm9uZVwiJiZsIT09XCJcIil7dmFyIGQ9cy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudFwiKSx2PX5bXCJTaGFycFwiXS5pbmRleE9mKGZbMl0pP2g6ZyxwPX5bXCJTb2xpZFwiLFwiUmVndWxhclwiLFwiTGlnaHRcIixcIlRoaW5cIixcIkR1b3RvbmVcIixcIkJyYW5kc1wiLFwiS2l0XCJdLmluZGV4T2YoZlsyXSk/dG5bdl1bZlsyXS50b0xvd2VyQ2FzZSgpXTpiYVt2XVt1XSx3PXhlKGQpLEU9dy52YWx1ZSxPPXcuaXNTZWNvbmRhcnksQz1mWzBdLnN0YXJ0c1dpdGgoXCJGb250QXdlc29tZVwiKSxrPVFuKHAsRSkseD1rO2lmKEMpe3ZhciBJPVVhKEUpO0kuaWNvbk5hbWUmJkkucHJlZml4JiYoaz1JLmljb25OYW1lLHA9SS5wcmVmaXgpfWlmKGsmJiFPJiYoIWl8fGkuZ2V0QXR0cmlidXRlKEduKSE9PXB8fGkuZ2V0QXR0cmlidXRlKFhuKSE9PXgpKXtuLnNldEF0dHJpYnV0ZShhLHgpLGkmJm4ucmVtb3ZlQ2hpbGQoaSk7dmFyIEE9bWUoKSxZPUEuZXh0cmE7WS5hdHRyaWJ1dGVzW0xuXT10LFluKGsscCkudGhlbihmdW5jdGlvbigkKXt2YXIgUG49Wm4oYyhjKHt9LEEpLHt9LHtpY29uczp7bWFpbjokLG1hc2s6Sm4oKX0scHJlZml4OnAsaWNvbk5hbWU6eCxleHRyYTpZLHdhdGNoYWJsZTohMH0pKSxSPWIuY3JlYXRlRWxlbWVudChcInN2Z1wiKTt0PT09XCI6OmJlZm9yZVwiP24uaW5zZXJ0QmVmb3JlKFIsbi5maXJzdENoaWxkKTpuLmFwcGVuZENoaWxkKFIpLFIub3V0ZXJIVE1MPVBuLm1hcChmdW5jdGlvbih0YSl7cmV0dXJuIGZuKHRhKX0pLmpvaW4oYFxuYCksbi5yZW1vdmVBdHRyaWJ1dGUoYSksZSgpfSkuY2F0Y2gocil9ZWxzZSBlKCl9ZWxzZSBlKCl9KX1mdW5jdGlvbiBBZShuKXtyZXR1cm4gUHJvbWlzZS5hbGwoW0F0KG4sXCI6OmJlZm9yZVwiKSxBdChuLFwiOjphZnRlclwiKV0pfWZ1bmN0aW9uIFNlKG4pe3JldHVybiBuLnBhcmVudE5vZGUhPT1kb2N1bWVudC5oZWFkJiYhfmRhLmluZGV4T2Yobi50YWdOYW1lLnRvVXBwZXJDYXNlKCkpJiYhbi5nZXRBdHRyaWJ1dGUoTG4pJiYoIW4ucGFyZW50Tm9kZXx8bi5wYXJlbnROb2RlLnRhZ05hbWUhPT1cInN2Z1wiKX1mdW5jdGlvbiBTdChuKXtpZighIUwpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsYSl7dmFyIGU9SyhuLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKS5maWx0ZXIoU2UpLm1hcChBZSkscj1udC5iZWdpbihcInNlYXJjaFBzZXVkb0VsZW1lbnRzXCIpO1p0KCksUHJvbWlzZS5hbGwoZSkudGhlbihmdW5jdGlvbigpe3IoKSxVbigpLHQoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cigpLFVuKCksYSgpfSl9KX12YXIgRWU9e2hvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue211dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucHNldWRvRWxlbWVudHNDYWxsYmFjaz1TdCxhfX19LHByb3ZpZGVzOmZ1bmN0aW9uKHQpe3QucHNldWRvRWxlbWVudHMyc3ZnPWZ1bmN0aW9uKGEpe3ZhciBlPWEubm9kZSxyPWU9PT12b2lkIDA/YjplO20uc2VhcmNoUHNldWRvRWxlbWVudHMmJlN0KHIpfX19LEV0PSExLE9lPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9tOnt1bndhdGNoOmZ1bmN0aW9uKCl7WnQoKSxFdD0hMH19fX0saG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57Ym9vdHN0cmFwOmZ1bmN0aW9uKCl7eXQoRG4oXCJtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzXCIse30pKX0sbm9BdXRvOmZ1bmN0aW9uKCl7ZmUoKX0sd2F0Y2g6ZnVuY3Rpb24oYSl7dmFyIGU9YS5vYnNlcnZlTXV0YXRpb25zUm9vdDtFdD9VbigpOnl0KERuKFwibXV0YXRpb25PYnNlcnZlckNhbGxiYWNrc1wiLHtvYnNlcnZlTXV0YXRpb25zUm9vdDplfSkpfX19fSxPdD1mdW5jdGlvbih0KXt2YXIgYT17c2l6ZToxNix4OjAseTowLGZsaXBYOiExLGZsaXBZOiExLHJvdGF0ZTowfTtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKS5yZWR1Y2UoZnVuY3Rpb24oZSxyKXt2YXIgbz1yLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCItXCIpLGk9b1swXSxzPW8uc2xpY2UoMSkuam9pbihcIi1cIik7aWYoaSYmcz09PVwiaFwiKXJldHVybiBlLmZsaXBYPSEwLGU7aWYoaSYmcz09PVwidlwiKXJldHVybiBlLmZsaXBZPSEwLGU7aWYocz1wYXJzZUZsb2F0KHMpLGlzTmFOKHMpKXJldHVybiBlO3N3aXRjaChpKXtjYXNlXCJncm93XCI6ZS5zaXplPWUuc2l6ZStzO2JyZWFrO2Nhc2VcInNocmlua1wiOmUuc2l6ZT1lLnNpemUtczticmVhaztjYXNlXCJsZWZ0XCI6ZS54PWUueC1zO2JyZWFrO2Nhc2VcInJpZ2h0XCI6ZS54PWUueCtzO2JyZWFrO2Nhc2VcInVwXCI6ZS55PWUueS1zO2JyZWFrO2Nhc2VcImRvd25cIjplLnk9ZS55K3M7YnJlYWs7Y2FzZVwicm90YXRlXCI6ZS5yb3RhdGU9ZS5yb3RhdGUrczticmVha31yZXR1cm4gZX0sYSl9LFBlPXttaXhvdXQ6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2U6e3RyYW5zZm9ybTpmdW5jdGlvbihhKXtyZXR1cm4gT3QoYSl9fX19LGhvb2tzOmZ1bmN0aW9uKCl7cmV0dXJue3BhcnNlTm9kZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oYSxlKXt2YXIgcj1lLmdldEF0dHJpYnV0ZShcImRhdGEtZmEtdHJhbnNmb3JtXCIpO3JldHVybiByJiYoYS50cmFuc2Zvcm09T3QocikpLGF9fX0scHJvdmlkZXM6ZnVuY3Rpb24odCl7dC5nZW5lcmF0ZUFic3RyYWN0VHJhbnNmb3JtR3JvdXBpbmc9ZnVuY3Rpb24oYSl7dmFyIGU9YS5tYWluLHI9YS50cmFuc2Zvcm0sbz1hLmNvbnRhaW5lcldpZHRoLGk9YS5pY29uV2lkdGgscz17dHJhbnNmb3JtOlwidHJhbnNsYXRlKFwiLmNvbmNhdChvLzIsXCIgMjU2KVwiKX0sZj1cInRyYW5zbGF0ZShcIi5jb25jYXQoci54KjMyLFwiLCBcIikuY29uY2F0KHIueSozMixcIikgXCIpLHU9XCJzY2FsZShcIi5jb25jYXQoci5zaXplLzE2KihyLmZsaXBYPy0xOjEpLFwiLCBcIikuY29uY2F0KHIuc2l6ZS8xNiooci5mbGlwWT8tMToxKSxcIikgXCIpLGw9XCJyb3RhdGUoXCIuY29uY2F0KHIucm90YXRlLFwiIDAgMClcIiksZD17dHJhbnNmb3JtOlwiXCIuY29uY2F0KGYsXCIgXCIpLmNvbmNhdCh1LFwiIFwiKS5jb25jYXQobCl9LHY9e3RyYW5zZm9ybTpcInRyYW5zbGF0ZShcIi5jb25jYXQoaS8yKi0xLFwiIC0yNTYpXCIpfSxwPXtvdXRlcjpzLGlubmVyOmQscGF0aDp2fTtyZXR1cm57dGFnOlwiZ1wiLGF0dHJpYnV0ZXM6Yyh7fSxwLm91dGVyKSxjaGlsZHJlbjpbe3RhZzpcImdcIixhdHRyaWJ1dGVzOmMoe30scC5pbm5lciksY2hpbGRyZW46W3t0YWc6ZS5pY29uLnRhZyxjaGlsZHJlbjplLmljb24uY2hpbGRyZW4sYXR0cmlidXRlczpjKGMoe30sZS5pY29uLmF0dHJpYnV0ZXMpLHAucGF0aCl9XX1dfX19fSxfbj17eDowLHk6MCx3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCJ9O2Z1bmN0aW9uIFB0KG4pe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMDtyZXR1cm4gbi5hdHRyaWJ1dGVzJiYobi5hdHRyaWJ1dGVzLmZpbGx8fHQpJiYobi5hdHRyaWJ1dGVzLmZpbGw9XCJibGFja1wiKSxufWZ1bmN0aW9uIENlKG4pe3JldHVybiBuLnRhZz09PVwiZ1wiP24uY2hpbGRyZW46W25dfXZhciBJZT17aG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2VOb2RlQXR0cmlidXRlczpmdW5jdGlvbihhLGUpe3ZhciByPWUuZ2V0QXR0cmlidXRlKFwiZGF0YS1mYS1tYXNrXCIpLG89cj9FbihyLnNwbGl0KFwiIFwiKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkudHJpbSgpfSkpOkpuKCk7cmV0dXJuIG8ucHJlZml4fHwoby5wcmVmaXg9eigpKSxhLm1hc2s9byxhLm1hc2tJZD1lLmdldEF0dHJpYnV0ZShcImRhdGEtZmEtbWFzay1pZFwiKSxhfX19LHByb3ZpZGVzOmZ1bmN0aW9uKHQpe3QuZ2VuZXJhdGVBYnN0cmFjdE1hc2s9ZnVuY3Rpb24oYSl7dmFyIGU9YS5jaGlsZHJlbixyPWEuYXR0cmlidXRlcyxvPWEubWFpbixpPWEubWFzayxzPWEubWFza0lkLGY9YS50cmFuc2Zvcm0sdT1vLndpZHRoLGw9by5pY29uLGQ9aS53aWR0aCx2PWkuaWNvbixwPVBhKHt0cmFuc2Zvcm06Zixjb250YWluZXJXaWR0aDpkLGljb25XaWR0aDp1fSksdz17dGFnOlwicmVjdFwiLGF0dHJpYnV0ZXM6YyhjKHt9LF9uKSx7fSx7ZmlsbDpcIndoaXRlXCJ9KX0sRT1sLmNoaWxkcmVuP3tjaGlsZHJlbjpsLmNoaWxkcmVuLm1hcChQdCl9Ont9LE89e3RhZzpcImdcIixhdHRyaWJ1dGVzOmMoe30scC5pbm5lciksY2hpbGRyZW46W1B0KGMoe3RhZzpsLnRhZyxhdHRyaWJ1dGVzOmMoYyh7fSxsLmF0dHJpYnV0ZXMpLHAucGF0aCl9LEUpKV19LEM9e3RhZzpcImdcIixhdHRyaWJ1dGVzOmMoe30scC5vdXRlciksY2hpbGRyZW46W09dfSxrPVwibWFzay1cIi5jb25jYXQoc3x8cm4oKSkseD1cImNsaXAtXCIuY29uY2F0KHN8fHJuKCkpLEk9e3RhZzpcIm1hc2tcIixhdHRyaWJ1dGVzOmMoYyh7fSxfbikse30se2lkOmssbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIixtYXNrQ29udGVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0pLGNoaWxkcmVuOlt3LENdfSxBPXt0YWc6XCJkZWZzXCIsY2hpbGRyZW46W3t0YWc6XCJjbGlwUGF0aFwiLGF0dHJpYnV0ZXM6e2lkOnh9LGNoaWxkcmVuOkNlKHYpfSxJXX07cmV0dXJuIGUucHVzaChBLHt0YWc6XCJyZWN0XCIsYXR0cmlidXRlczpjKHtmaWxsOlwiY3VycmVudENvbG9yXCIsXCJjbGlwLXBhdGhcIjpcInVybCgjXCIuY29uY2F0KHgsXCIpXCIpLG1hc2s6XCJ1cmwoI1wiLmNvbmNhdChrLFwiKVwiKX0sX24pfSkse2NoaWxkcmVuOmUsYXR0cmlidXRlczpyfX19fSxOZT17cHJvdmlkZXM6ZnVuY3Rpb24odCl7dmFyIGE9ITE7RC5tYXRjaE1lZGlhJiYoYT1ELm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKVwiKS5tYXRjaGVzKSx0Lm1pc3NpbmdJY29uQWJzdHJhY3Q9ZnVuY3Rpb24oKXt2YXIgZT1bXSxyPXtmaWxsOlwiY3VycmVudENvbG9yXCJ9LG89e2F0dHJpYnV0ZVR5cGU6XCJYTUxcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixkdXI6XCIyc1wifTtlLnB1c2goe3RhZzpcInBhdGhcIixhdHRyaWJ1dGVzOmMoYyh7fSxyKSx7fSx7ZDpcIk0xNTYuNSw0NDcuN2wtMTIuNiwyOS41Yy0xOC43LTkuNS0zNS45LTIxLjItNTEuNS0zNC45bDIyLjctMjIuN0MxMjcuNiw0MzAuNSwxNDEuNSw0NDAsMTU2LjUsNDQ3Ljd6IE00MC42LDI3Mkg4LjUgYzEuNCwyMS4yLDUuNCw0MS43LDExLjcsNjEuMUw1MCwzMjEuMkM0NS4xLDMwNS41LDQxLjgsMjg5LDQwLjYsMjcyeiBNNDAuNiwyNDBjMS40LTE4LjgsNS4yLTM3LDExLjEtNTQuMWwtMjkuNS0xMi42IEMxNC43LDE5NC4zLDEwLDIxNi43LDguNSwyNDBINDAuNnogTTY0LjMsMTU2LjVjNy44LTE0LjksMTcuMi0yOC44LDI4LjEtNDEuNUw2OS43LDkyLjNjLTEzLjcsMTUuNi0yNS41LDMyLjgtMzQuOSw1MS41IEw2NC4zLDE1Ni41eiBNMzk3LDQxOS42Yy0xMy45LDEyLTI5LjQsMjIuMy00Ni4xLDMwLjRsMTEuOSwyOS44YzIwLjctOS45LDM5LjgtMjIuNiw1Ni45LTM3LjZMMzk3LDQxOS42eiBNMTE1LDkyLjQgYzEzLjktMTIsMjkuNC0yMi4zLDQ2LjEtMzAuNGwtMTEuOS0yOS44Yy0yMC43LDkuOS0zOS44LDIyLjYtNTYuOCwzNy42TDExNSw5Mi40eiBNNDQ3LjcsMzU1LjVjLTcuOCwxNC45LTE3LjIsMjguOC0yOC4xLDQxLjUgbDIyLjcsMjIuN2MxMy43LTE1LjYsMjUuNS0zMi45LDM0LjktNTEuNUw0NDcuNywzNTUuNXogTTQ3MS40LDI3MmMtMS40LDE4LjgtNS4yLDM3LTExLjEsNTQuMWwyOS41LDEyLjYgYzcuNS0yMS4xLDEyLjItNDMuNSwxMy42LTY2LjhINDcxLjR6IE0zMjEuMiw0NjJjLTE1LjcsNS0zMi4yLDguMi00OS4yLDkuNHYzMi4xYzIxLjItMS40LDQxLjctNS40LDYxLjEtMTEuN0wzMjEuMiw0NjJ6IE0yNDAsNDcxLjRjLTE4LjgtMS40LTM3LTUuMi01NC4xLTExLjFsLTEyLjYsMjkuNWMyMS4xLDcuNSw0My41LDEyLjIsNjYuOCwxMy42VjQ3MS40eiBNNDYyLDE5MC44YzUsMTUuNyw4LjIsMzIuMiw5LjQsNDkuMmgzMi4xIGMtMS40LTIxLjItNS40LTQxLjctMTEuNy02MS4xTDQ2MiwxOTAuOHogTTkyLjQsMzk3Yy0xMi0xMy45LTIyLjMtMjkuNC0zMC40LTQ2LjFsLTI5LjgsMTEuOWM5LjksMjAuNywyMi42LDM5LjgsMzcuNiw1Ni45IEw5Mi40LDM5N3ogTTI3Miw0MC42YzE4LjgsMS40LDM2LjksNS4yLDU0LjEsMTEuMWwxMi42LTI5LjVDMzE3LjcsMTQuNywyOTUuMywxMCwyNzIsOC41VjQwLjZ6IE0xOTAuOCw1MCBjMTUuNy01LDMyLjItOC4yLDQ5LjItOS40VjguNWMtMjEuMiwxLjQtNDEuNyw1LjQtNjEuMSwxMS43TDE5MC44LDUweiBNNDQyLjMsOTIuM0w0MTkuNiwxMTVjMTIsMTMuOSwyMi4zLDI5LjQsMzAuNSw0Ni4xIGwyOS44LTExLjlDNDcwLDEyOC41LDQ1Ny4zLDEwOS40LDQ0Mi4zLDkyLjN6IE0zOTcsOTIuNGwyMi43LTIyLjdjLTE1LjYtMTMuNy0zMi44LTI1LjUtNTEuNS0zNC45bC0xMi42LDI5LjUgQzM3MC40LDcyLjEsMzg0LjQsODEuNSwzOTcsOTIuNHpcIn0pfSk7dmFyIGk9YyhjKHt9LG8pLHt9LHthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwifSkscz17dGFnOlwiY2lyY2xlXCIsYXR0cmlidXRlczpjKGMoe30scikse30se2N4OlwiMjU2XCIsY3k6XCIzNjRcIixyOlwiMjhcIn0pLGNoaWxkcmVuOltdfTtyZXR1cm4gYXx8cy5jaGlsZHJlbi5wdXNoKHt0YWc6XCJhbmltYXRlXCIsYXR0cmlidXRlczpjKGMoe30sbykse30se2F0dHJpYnV0ZU5hbWU6XCJyXCIsdmFsdWVzOlwiMjg7MTQ7Mjg7Mjg7MTQ7Mjg7XCJ9KX0se3RhZzpcImFuaW1hdGVcIixhdHRyaWJ1dGVzOmMoYyh7fSxpKSx7fSx7dmFsdWVzOlwiMTswOzE7MTswOzE7XCJ9KX0pLGUucHVzaChzKSxlLnB1c2goe3RhZzpcInBhdGhcIixhdHRyaWJ1dGVzOmMoYyh7fSxyKSx7fSx7b3BhY2l0eTpcIjFcIixkOlwiTTI2My43LDMxMmgtMTZjLTYuNiwwLTEyLTUuNC0xMi0xMmMwLTcxLDc3LjQtNjMuOSw3Ny40LTEwNy44YzAtMjAtMTcuOC00MC4yLTU3LjQtNDAuMmMtMjkuMSwwLTQ0LjMsOS42LTU5LjIsMjguNyBjLTMuOSw1LTExLjEsNi0xNi4yLDIuNGwtMTMuMS05LjJjLTUuNi0zLjktNi45LTExLjgtMi42LTE3LjJjMjEuMi0yNy4yLDQ2LjQtNDQuNyw5MS4yLTQ0LjdjNTIuMywwLDk3LjQsMjkuOCw5Ny40LDgwLjIgYzAsNjcuNi03Ny40LDYzLjUtNzcuNCwxMDcuOEMyNzUuNywzMDYuNiwyNzAuMywzMTIsMjYzLjcsMzEyelwifSksY2hpbGRyZW46YT9bXTpbe3RhZzpcImFuaW1hdGVcIixhdHRyaWJ1dGVzOmMoYyh7fSxpKSx7fSx7dmFsdWVzOlwiMTswOzA7MDswOzE7XCJ9KX1dfSksYXx8ZS5wdXNoKHt0YWc6XCJwYXRoXCIsYXR0cmlidXRlczpjKGMoe30scikse30se29wYWNpdHk6XCIwXCIsZDpcIk0yMzIuNSwxMzQuNWw3LDE2OGMwLjMsNi40LDUuNiwxMS41LDEyLDExLjVoOWM2LjQsMCwxMS43LTUuMSwxMi0xMS41bDctMTY4YzAuMy02LjgtNS4yLTEyLjUtMTItMTIuNWgtMjMgQzIzNy43LDEyMiwyMzIuMiwxMjcuNywyMzIuNSwxMzQuNXpcIn0pLGNoaWxkcmVuOlt7dGFnOlwiYW5pbWF0ZVwiLGF0dHJpYnV0ZXM6YyhjKHt9LGkpLHt9LHt2YWx1ZXM6XCIwOzA7MTsxOzA7MDtcIn0pfV19KSx7dGFnOlwiZ1wiLGF0dHJpYnV0ZXM6e2NsYXNzOlwibWlzc2luZ1wifSxjaGlsZHJlbjplfX19fSxfZT17aG9va3M6ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2VOb2RlQXR0cmlidXRlczpmdW5jdGlvbihhLGUpe3ZhciByPWUuZ2V0QXR0cmlidXRlKFwiZGF0YS1mYS1zeW1ib2xcIiksbz1yPT09bnVsbD8hMTpyPT09XCJcIj8hMDpyO3JldHVybiBhLnN5bWJvbD1vLGF9fX19LFRlPVtOYSxiZSxoZSx5ZSxrZSxFZSxPZSxQZSxJZSxOZSxfZV07R2EoVGUse21peG91dHNUbzpTfSk7dmFyIExlPVMubm9BdXRvLFJlPVMuY29uZmlnLEZlPVMubGlicmFyeSxEZT1TLmRvbSx6ZT1TLnBhcnNlLGplPVMuZmluZEljb25EZWZpbml0aW9uLFllPVMudG9IdG1sLCRlPVMuaWNvbixVZT1TLmxheWVyLFdlPVMudGV4dCxIZT1TLmNvdW50ZXI7ZXhwb3J0e1MgYXMgYXBpLFJlIGFzIGNvbmZpZyxIZSBhcyBjb3VudGVyLERlIGFzIGRvbSxqZSBhcyBmaW5kSWNvbkRlZmluaXRpb24sJGUgYXMgaWNvbixVZSBhcyBsYXllcixGZSBhcyBsaWJyYXJ5LExlIGFzIG5vQXV0byx6ZSBhcyBwYXJzZSxXZSBhcyB0ZXh0LFllIGFzIHRvSHRtbH07XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUocHJvcC10eXBlc0AxNS44LjEpIGRlbm8gcHJvZHVjdGlvbiAqL1xudmFyIGQ9T2JqZWN0LmNyZWF0ZTt2YXIgYz1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgUD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczt2YXIgUj1PYmplY3QuZ2V0UHJvdG90eXBlT2YsZz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBzPShlLHIpPT4oKT0+KHJ8fGUoKHI9e2V4cG9ydHM6e319KS5leHBvcnRzLHIpLHIuZXhwb3J0cyk7dmFyIHY9KGUscix0LG4pPT57aWYociYmdHlwZW9mIHI9PVwib2JqZWN0XCJ8fHR5cGVvZiByPT1cImZ1bmN0aW9uXCIpZm9yKGxldCBvIG9mIFAocikpIWcuY2FsbChlLG8pJiZvIT09dCYmYyhlLG8se2dldDooKT0+cltvXSxlbnVtZXJhYmxlOiEobj1iKHIsbykpfHxuLmVudW1lcmFibGV9KTtyZXR1cm4gZX07dmFyIHg9KGUscix0KT0+KHQ9ZSE9bnVsbD9kKFIoZSkpOnt9LHYocnx8IWV8fCFlLl9fZXNNb2R1bGU/Yyh0LFwiZGVmYXVsdFwiLHt2YWx1ZTplLGVudW1lcmFibGU6ITB9KTp0LGUpKTt2YXIgaT1zKChxLHApPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIEU9XCJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRFwiO3AuZXhwb3J0cz1FfSk7dmFyIGw9cygoRCxmKT0+e1widXNlIHN0cmljdFwiO3ZhciBTPWkoKTtmdW5jdGlvbiB1KCl7fWZ1bmN0aW9uIHkoKXt9eS5yZXNldFdhcm5pbmdDYWNoZT11O2YuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUobixvLEMsSSxOLF8pe2lmKF8hPT1TKXt2YXIgYT1uZXcgRXJyb3IoXCJDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiBVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzXCIpO3Rocm93IGEubmFtZT1cIkludmFyaWFudCBWaW9sYXRpb25cIixhfX1lLmlzUmVxdWlyZWQ9ZTtmdW5jdGlvbiByKCl7cmV0dXJuIGV9dmFyIHQ9e2FycmF5OmUsYmlnaW50OmUsYm9vbDplLGZ1bmM6ZSxudW1iZXI6ZSxvYmplY3Q6ZSxzdHJpbmc6ZSxzeW1ib2w6ZSxhbnk6ZSxhcnJheU9mOnIsZWxlbWVudDplLGVsZW1lbnRUeXBlOmUsaW5zdGFuY2VPZjpyLG5vZGU6ZSxvYmplY3RPZjpyLG9uZU9mOnIsb25lT2ZUeXBlOnIsc2hhcGU6cixleGFjdDpyLGNoZWNrUHJvcFR5cGVzOnkscmVzZXRXYXJuaW5nQ2FjaGU6dX07cmV0dXJuIHQuUHJvcFR5cGVzPXQsdH19KTt2YXIgaD1zKChGLG0pPT57bS5leHBvcnRzPWwoKSgpO3ZhciBqLHd9KTt2YXIgTz14KGgoKSkse2FycmF5OkEsYmlnaW50OkwsYm9vbDpVLGZ1bmM6VixudW1iZXI6QixvYmplY3Q6SCxzdHJpbmc6WSxzeW1ib2w6eixhbnk6RyxhcnJheU9mOkosZWxlbWVudDpLLGVsZW1lbnRUeXBlOk0saW5zdGFuY2VPZjpRLG5vZGU6WCxvYmplY3RPZjpaLG9uZU9mOiQsb25lT2ZUeXBlOmVlLHNoYXBlOnJlLGV4YWN0OnRlLGNoZWNrUHJvcFR5cGVzOm9lLHJlc2V0V2FybmluZ0NhY2hlOm5lLFByb3BUeXBlczpzZX09Tyx7ZGVmYXVsdDpULC4uLmt9PU8sYWU9VCE9PXZvaWQgMD9UOms7ZXhwb3J0e3NlIGFzIFByb3BUeXBlcyxHIGFzIGFueSxBIGFzIGFycmF5LEogYXMgYXJyYXlPZixMIGFzIGJpZ2ludCxVIGFzIGJvb2wsb2UgYXMgY2hlY2tQcm9wVHlwZXMsYWUgYXMgZGVmYXVsdCxLIGFzIGVsZW1lbnQsTSBhcyBlbGVtZW50VHlwZSx0ZSBhcyBleGFjdCxWIGFzIGZ1bmMsUSBhcyBpbnN0YW5jZU9mLFggYXMgbm9kZSxCIGFzIG51bWJlcixIIGFzIG9iamVjdCxaIGFzIG9iamVjdE9mLCQgYXMgb25lT2YsZWUgYXMgb25lT2ZUeXBlLG5lIGFzIHJlc2V0V2FybmluZ0NhY2hlLHJlIGFzIHNoYXBlLFkgYXMgc3RyaW5nLHogYXMgc3ltYm9sfTtcbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShyZWFjdEAxOC4yLjApIGRlbm8gcHJvZHVjdGlvbiAqL1xudmFyIFU9T2JqZWN0LmNyZWF0ZTt2YXIgQz1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIHE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgQT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczt2YXIgTT1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysej1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBrPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyk7dmFyIEI9KGUsdCxyLG8pPT57aWYodCYmdHlwZW9mIHQ9PVwib2JqZWN0XCJ8fHR5cGVvZiB0PT1cImZ1bmN0aW9uXCIpZm9yKGxldCB1IG9mIEEodCkpIXouY2FsbChlLHUpJiZ1IT09ciYmQyhlLHUse2dldDooKT0+dFt1XSxlbnVtZXJhYmxlOiEobz1xKHQsdSkpfHxvLmVudW1lcmFibGV9KTtyZXR1cm4gZX07dmFyIEg9KGUsdCxyKT0+KHI9ZSE9bnVsbD9VKE0oZSkpOnt9LEIodHx8IWV8fCFlLl9fZXNNb2R1bGU/QyhyLFwiZGVmYXVsdFwiLHt2YWx1ZTplLGVudW1lcmFibGU6ITB9KTpyLGUpKTt2YXIgRD1rKG49PntcInVzZSBzdHJpY3RcIjt2YXIgeT1TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSxXPVN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksWT1TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksRz1TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksSj1TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksSz1TeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIiksUT1TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxYPVN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxaPVN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxlZT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSx0ZT1TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSx3PVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiByZShlKXtyZXR1cm4gZT09PW51bGx8fHR5cGVvZiBlIT1cIm9iamVjdFwiP251bGw6KGU9dyYmZVt3XXx8ZVtcIkBAaXRlcmF0b3JcIl0sdHlwZW9mIGU9PVwiZnVuY3Rpb25cIj9lOm51bGwpfXZhciB4PXtpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKCl7fSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oKXt9fSxPPU9iamVjdC5hc3NpZ24saj17fTtmdW5jdGlvbiBwKGUsdCxyKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWosdGhpcy51cGRhdGVyPXJ8fHh9cC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD17fTtwLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlIT1cIm9iamVjdFwiJiZ0eXBlb2YgZSE9XCJmdW5jdGlvblwiJiZlIT1udWxsKXRocm93IEVycm9yKFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsXCJzZXRTdGF0ZVwiKX07cC5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLGUsXCJmb3JjZVVwZGF0ZVwiKX07ZnVuY3Rpb24gSSgpe31JLnByb3RvdHlwZT1wLnByb3RvdHlwZTtmdW5jdGlvbiB2KGUsdCxyKXt0aGlzLnByb3BzPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5yZWZzPWosdGhpcy51cGRhdGVyPXJ8fHh9dmFyIFM9di5wcm90b3R5cGU9bmV3IEk7Uy5jb25zdHJ1Y3Rvcj12O08oUyxwLnByb3RvdHlwZSk7Uy5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgYj1BcnJheS5pc0FycmF5LGc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFPXtjdXJyZW50Om51bGx9LFA9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtmdW5jdGlvbiBUKGUsdCxyKXt2YXIgbyx1PXt9LGM9bnVsbCxmPW51bGw7aWYodCE9bnVsbClmb3IobyBpbiB0LnJlZiE9PXZvaWQgMCYmKGY9dC5yZWYpLHQua2V5IT09dm9pZCAwJiYoYz1cIlwiK3Qua2V5KSx0KWcuY2FsbCh0LG8pJiYhUC5oYXNPd25Qcm9wZXJ0eShvKSYmKHVbb109dFtvXSk7dmFyIGk9YXJndW1lbnRzLmxlbmd0aC0yO2lmKGk9PT0xKXUuY2hpbGRyZW49cjtlbHNlIGlmKDE8aSl7Zm9yKHZhciBzPUFycmF5KGkpLGE9MDthPGk7YSsrKXNbYV09YXJndW1lbnRzW2ErMl07dS5jaGlsZHJlbj1zfWlmKGUmJmUuZGVmYXVsdFByb3BzKWZvcihvIGluIGk9ZS5kZWZhdWx0UHJvcHMsaSl1W29dPT09dm9pZCAwJiYodVtvXT1pW29dKTtyZXR1cm57JCR0eXBlb2Y6eSx0eXBlOmUsa2V5OmMscmVmOmYscHJvcHM6dSxfb3duZXI6RS5jdXJyZW50fX1mdW5jdGlvbiBuZShlLHQpe3JldHVybnskJHR5cGVvZjp5LHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn19ZnVuY3Rpb24gUihlKXtyZXR1cm4gdHlwZW9mIGU9PVwib2JqZWN0XCImJmUhPT1udWxsJiZlLiQkdHlwZW9mPT09eX1mdW5jdGlvbiB1ZShlKXt2YXIgdD17XCI9XCI6XCI9MFwiLFwiOlwiOlwiPTJcIn07cmV0dXJuXCIkXCIrZS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24ocil7cmV0dXJuIHRbcl19KX12YXIgJD0vXFwvKy9nO2Z1bmN0aW9uIGgoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PVwib2JqZWN0XCImJmUhPT1udWxsJiZlLmtleSE9bnVsbD91ZShcIlwiK2Uua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBfKGUsdCxyLG8sdSl7dmFyIGM9dHlwZW9mIGU7KGM9PT1cInVuZGVmaW5lZFwifHxjPT09XCJib29sZWFuXCIpJiYoZT1udWxsKTt2YXIgZj0hMTtpZihlPT09bnVsbClmPSEwO2Vsc2Ugc3dpdGNoKGMpe2Nhc2VcInN0cmluZ1wiOmNhc2VcIm51bWJlclwiOmY9ITA7YnJlYWs7Y2FzZVwib2JqZWN0XCI6c3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgeTpjYXNlIFc6Zj0hMH19aWYoZilyZXR1cm4gZj1lLHU9dShmKSxlPW89PT1cIlwiP1wiLlwiK2goZiwwKTpvLGIodSk/KHI9XCJcIixlIT1udWxsJiYocj1lLnJlcGxhY2UoJCxcIiQmL1wiKStcIi9cIiksXyh1LHQscixcIlwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfSkpOnUhPW51bGwmJihSKHUpJiYodT1uZSh1LHIrKCF1LmtleXx8ZiYmZi5rZXk9PT11LmtleT9cIlwiOihcIlwiK3Uua2V5KS5yZXBsYWNlKCQsXCIkJi9cIikrXCIvXCIpK2UpKSx0LnB1c2godSkpLDE7aWYoZj0wLG89bz09PVwiXCI/XCIuXCI6bytcIjpcIixiKGUpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjPWVbaV07dmFyIHM9bytoKGMsaSk7Zis9XyhjLHQscixzLHUpfWVsc2UgaWYocz1yZShlKSx0eXBlb2Ygcz09XCJmdW5jdGlvblwiKWZvcihlPXMuY2FsbChlKSxpPTA7IShjPWUubmV4dCgpKS5kb25lOyljPWMudmFsdWUscz1vK2goYyxpKyspLGYrPV8oYyx0LHIscyx1KTtlbHNlIGlmKGM9PT1cIm9iamVjdFwiKXRocm93IHQ9U3RyaW5nKGUpLEVycm9yKFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIisodD09PVwiW29iamVjdCBPYmplY3RdXCI/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhlKS5qb2luKFwiLCBcIikrXCJ9XCI6dCkrXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIpO3JldHVybiBmfWZ1bmN0aW9uIGQoZSx0LHIpe2lmKGU9PW51bGwpcmV0dXJuIGU7dmFyIG89W10sdT0wO3JldHVybiBfKGUsbyxcIlwiLFwiXCIsZnVuY3Rpb24oYyl7cmV0dXJuIHQuY2FsbChyLGMsdSsrKX0pLG99ZnVuY3Rpb24gb2UoZSl7aWYoZS5fc3RhdHVzPT09LTEpe3ZhciB0PWUuX3Jlc3VsdDt0PXQoKSx0LnRoZW4oZnVuY3Rpb24ocil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD1yKX0sZnVuY3Rpb24ocil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD1yKX0pLGUuX3N0YXR1cz09PS0xJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQpfWlmKGUuX3N0YXR1cz09PTEpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgbD17Y3VycmVudDpudWxsfSxtPXt0cmFuc2l0aW9uOm51bGx9LHNlPXtSZWFjdEN1cnJlbnREaXNwYXRjaGVyOmwsUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6bSxSZWFjdEN1cnJlbnRPd25lcjpFfTtuLkNoaWxkcmVuPXttYXA6ZCxmb3JFYWNoOmZ1bmN0aW9uKGUsdCxyKXtkKGUsZnVuY3Rpb24oKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scil9LGNvdW50OmZ1bmN0aW9uKGUpe3ZhciB0PTA7cmV0dXJuIGQoZSxmdW5jdGlvbigpe3QrK30pLHR9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoZSxmdW5jdGlvbih0KXtyZXR1cm4gdH0pfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighUihlKSl0aHJvdyBFcnJvcihcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiKTtyZXR1cm4gZX19O24uQ29tcG9uZW50PXA7bi5GcmFnbWVudD1ZO24uUHJvZmlsZXI9SjtuLlB1cmVDb21wb25lbnQ9djtuLlN0cmljdE1vZGU9RztuLlN1c3BlbnNlPVo7bi5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1zZTtuLmNsb25lRWxlbWVudD1mdW5jdGlvbihlLHQscil7aWYoZT09bnVsbCl0aHJvdyBFcnJvcihcIlJlYWN0LmNsb25lRWxlbWVudCguLi4pOiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiK2UrXCIuXCIpO3ZhciBvPU8oe30sZS5wcm9wcyksdT1lLmtleSxjPWUucmVmLGY9ZS5fb3duZXI7aWYodCE9bnVsbCl7aWYodC5yZWYhPT12b2lkIDAmJihjPXQucmVmLGY9RS5jdXJyZW50KSx0LmtleSE9PXZvaWQgMCYmKHU9XCJcIit0LmtleSksZS50eXBlJiZlLnR5cGUuZGVmYXVsdFByb3BzKXZhciBpPWUudHlwZS5kZWZhdWx0UHJvcHM7Zm9yKHMgaW4gdClnLmNhbGwodCxzKSYmIVAuaGFzT3duUHJvcGVydHkocykmJihvW3NdPXRbc109PT12b2lkIDAmJmkhPT12b2lkIDA/aVtzXTp0W3NdKX12YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYocz09PTEpby5jaGlsZHJlbj1yO2Vsc2UgaWYoMTxzKXtpPUFycmF5KHMpO2Zvcih2YXIgYT0wO2E8czthKyspaVthXT1hcmd1bWVudHNbYSsyXTtvLmNoaWxkcmVuPWl9cmV0dXJueyQkdHlwZW9mOnksdHlwZTplLnR5cGUsa2V5OnUscmVmOmMscHJvcHM6byxfb3duZXI6Zn19O24uY3JlYXRlQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gZT17JCR0eXBlb2Y6USxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2RlZmF1bHRWYWx1ZTpudWxsLF9nbG9iYWxOYW1lOm51bGx9LGUuUHJvdmlkZXI9eyQkdHlwZW9mOkssX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfTtuLmNyZWF0ZUVsZW1lbnQ9VDtuLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9VC5iaW5kKG51bGwsZSk7cmV0dXJuIHQudHlwZT1lLHR9O24uY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O24uZm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6WCxyZW5kZXI6ZX19O24uaXNWYWxpZEVsZW1lbnQ9UjtuLmxhenk9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOnRlLF9wYXlsb2FkOntfc3RhdHVzOi0xLF9yZXN1bHQ6ZX0sX2luaXQ6b2V9fTtuLm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6ZWUsdHlwZTplLGNvbXBhcmU6dD09PXZvaWQgMD9udWxsOnR9fTtuLnN0YXJ0VHJhbnNpdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1tLnRyYW5zaXRpb247bS50cmFuc2l0aW9uPXt9O3RyeXtlKCl9ZmluYWxseXttLnRyYW5zaXRpb249dH19O24udW5zdGFibGVfYWN0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoXCJhY3QoLi4uKSBpcyBub3Qgc3VwcG9ydGVkIGluIHByb2R1Y3Rpb24gYnVpbGRzIG9mIFJlYWN0LlwiKX07bi51c2VDYWxsYmFjaz1mdW5jdGlvbihlLHQpe3JldHVybiBsLmN1cnJlbnQudXNlQ2FsbGJhY2soZSx0KX07bi51c2VDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBsLmN1cnJlbnQudXNlQ29udGV4dChlKX07bi51c2VEZWJ1Z1ZhbHVlPWZ1bmN0aW9uKCl7fTtuLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGwuY3VycmVudC51c2VEZWZlcnJlZFZhbHVlKGUpfTtuLnVzZUVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBsLmN1cnJlbnQudXNlRWZmZWN0KGUsdCl9O24udXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbC5jdXJyZW50LnVzZUlkKCl9O24udXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGwuY3VycmVudC51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxyKX07bi51c2VJbnNlcnRpb25FZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdChlLHQpfTtuLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBsLmN1cnJlbnQudXNlTGF5b3V0RWZmZWN0KGUsdCl9O24udXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBsLmN1cnJlbnQudXNlTWVtbyhlLHQpfTtuLnVzZVJlZHVjZXI9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBsLmN1cnJlbnQudXNlUmVkdWNlcihlLHQscil9O24udXNlUmVmPWZ1bmN0aW9uKGUpe3JldHVybiBsLmN1cnJlbnQudXNlUmVmKGUpfTtuLnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBsLmN1cnJlbnQudXNlU3RhdGUoZSl9O24udXNlU3luY0V4dGVybmFsU3RvcmU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBsLmN1cnJlbnQudXNlU3luY0V4dGVybmFsU3RvcmUoZSx0LHIpfTtuLnVzZVRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbC5jdXJyZW50LnVzZVRyYW5zaXRpb24oKX07bi52ZXJzaW9uPVwiMTguMi4wXCJ9KTt2YXIgTD1rKChsZSxWKT0+e1widXNlIHN0cmljdFwiO1YuZXhwb3J0cz1EKCl9KTt2YXIgRj1IKEwoKSkse0NoaWxkcmVuOmFlLENvbXBvbmVudDpwZSxGcmFnbWVudDp5ZSxQcm9maWxlcjpkZSxQdXJlQ29tcG9uZW50Ol9lLFN0cmljdE1vZGU6bWUsU3VzcGVuc2U6aGUsX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6dmUsY2xvbmVFbGVtZW50OlNlLGNyZWF0ZUNvbnRleHQ6RWUsY3JlYXRlRWxlbWVudDpSZSxjcmVhdGVGYWN0b3J5OkNlLGNyZWF0ZVJlZjprZSxmb3J3YXJkUmVmOndlLGlzVmFsaWRFbGVtZW50OmJlLGxhenk6JGUsbWVtbzp4ZSxzdGFydFRyYW5zaXRpb246T2UsdW5zdGFibGVfYWN0OmplLHVzZUNhbGxiYWNrOkllLHVzZUNvbnRleHQ6Z2UsdXNlRGVidWdWYWx1ZTpQZSx1c2VEZWZlcnJlZFZhbHVlOlRlLHVzZUVmZmVjdDpEZSx1c2VJZDpWZSx1c2VJbXBlcmF0aXZlSGFuZGxlOkxlLHVzZUluc2VydGlvbkVmZmVjdDpOZSx1c2VMYXlvdXRFZmZlY3Q6RmUsdXNlTWVtbzpVZSx1c2VSZWR1Y2VyOnFlLHVzZVJlZjpBZSx1c2VTdGF0ZTpNZSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTp6ZSx1c2VUcmFuc2l0aW9uOkJlLHZlcnNpb246SGV9PUYse2RlZmF1bHQ6TiwuLi5jZX09RixXZT1OIT09dm9pZCAwP046Y2U7ZXhwb3J0e2FlIGFzIENoaWxkcmVuLHBlIGFzIENvbXBvbmVudCx5ZSBhcyBGcmFnbWVudCxkZSBhcyBQcm9maWxlcixfZSBhcyBQdXJlQ29tcG9uZW50LG1lIGFzIFN0cmljdE1vZGUsaGUgYXMgU3VzcGVuc2UsdmUgYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsU2UgYXMgY2xvbmVFbGVtZW50LEVlIGFzIGNyZWF0ZUNvbnRleHQsUmUgYXMgY3JlYXRlRWxlbWVudCxDZSBhcyBjcmVhdGVGYWN0b3J5LGtlIGFzIGNyZWF0ZVJlZixXZSBhcyBkZWZhdWx0LHdlIGFzIGZvcndhcmRSZWYsYmUgYXMgaXNWYWxpZEVsZW1lbnQsJGUgYXMgbGF6eSx4ZSBhcyBtZW1vLE9lIGFzIHN0YXJ0VHJhbnNpdGlvbixqZSBhcyB1bnN0YWJsZV9hY3QsSWUgYXMgdXNlQ2FsbGJhY2ssZ2UgYXMgdXNlQ29udGV4dCxQZSBhcyB1c2VEZWJ1Z1ZhbHVlLFRlIGFzIHVzZURlZmVycmVkVmFsdWUsRGUgYXMgdXNlRWZmZWN0LFZlIGFzIHVzZUlkLExlIGFzIHVzZUltcGVyYXRpdmVIYW5kbGUsTmUgYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LEZlIGFzIHVzZUxheW91dEVmZmVjdCxVZSBhcyB1c2VNZW1vLHFlIGFzIHVzZVJlZHVjZXIsQWUgYXMgdXNlUmVmLE1lIGFzIHVzZVN0YXRlLHplIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLEJlIGFzIHVzZVRyYW5zaXRpb24sSGUgYXMgdmVyc2lvbn07XG4vKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lQDAuMi4wKSBkZW5vIHByb2R1Y3Rpb24gKi9cbmltcG9ydHtwYXJzZSBhcyBrLGljb24gYXMgRH1mcm9tXCIvdjk2L0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZUA2LjIuMC9kZW5vL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlLmpzXCI7aW1wb3J0IG4gZnJvbVwiL3Y5Ni9wcm9wLXR5cGVzQDE1LjguMS9kZW5vL3Byb3AtdHlwZXMuanNcIjtpbXBvcnQgQyBmcm9tXCIvc3RhYmxlL3JlYWN0QDE4LjIuMC9kZW5vL3JlYWN0LmpzXCI7ZnVuY3Rpb24gVChlLHQpe3ZhciByPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKGE9YS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxpKS5lbnVtZXJhYmxlfSkpLHIucHVzaC5hcHBseShyLGEpfXJldHVybiByfWZ1bmN0aW9uIGMoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdIT1udWxsP2FyZ3VtZW50c1t0XTp7fTt0JTI/VChPYmplY3QociksITApLmZvckVhY2goZnVuY3Rpb24oYSl7YihlLGEsclthXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTpUKE9iamVjdChyKSkuZm9yRWFjaChmdW5jdGlvbihhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxhLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixhKSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBoKGUpe3JldHVybiBoPXR5cGVvZiBTeW1ib2w9PVwiZnVuY3Rpb25cIiYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09XCJzeW1ib2xcIj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgU3ltYm9sPT1cImZ1bmN0aW9uXCImJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIHR9LGgoZSl9ZnVuY3Rpb24gYihlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gRihlLHQpe2lmKGU9PW51bGwpcmV0dXJue307dmFyIHI9e30sYT1PYmplY3Qua2V5cyhlKSxpLG87Zm9yKG89MDtvPGEubGVuZ3RoO28rKylpPWFbb10sISh0LmluZGV4T2YoaSk+PTApJiYocltpXT1lW2ldKTtyZXR1cm4gcn1mdW5jdGlvbiBMKGUsdCl7aWYoZT09bnVsbClyZXR1cm57fTt2YXIgcj1GKGUsdCksYSxpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKylhPW9baV0sISh0LmluZGV4T2YoYSk+PTApJiYoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLGEpfHwoclthXT1lW2FdKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gUyhlKXtyZXR1cm4gVShlKXx8SyhlKXx8JChlKXx8SCgpfWZ1bmN0aW9uIFUoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gXyhlKX1mdW5jdGlvbiBLKGUpe2lmKHR5cGVvZiBTeW1ib2w8XCJ1XCImJmVbU3ltYm9sLml0ZXJhdG9yXSE9bnVsbHx8ZVtcIkBAaXRlcmF0b3JcIl0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gJChlLHQpe2lmKCEhZSl7aWYodHlwZW9mIGU9PVwic3RyaW5nXCIpcmV0dXJuIF8oZSx0KTt2YXIgcj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYocj09PVwiT2JqZWN0XCImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSkscj09PVwiTWFwXCJ8fHI9PT1cIlNldFwiKXJldHVybiBBcnJheS5mcm9tKGUpO2lmKHI9PT1cIkFyZ3VtZW50c1wifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChyKSlyZXR1cm4gXyhlLHQpfX1mdW5jdGlvbiBfKGUsdCl7KHQ9PW51bGx8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCk7Zm9yKHZhciByPTAsYT1uZXcgQXJyYXkodCk7cjx0O3IrKylhW3JdPWVbcl07cmV0dXJuIGF9ZnVuY3Rpb24gSCgpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIE0oZSl7dmFyIHQscj1lLmJlYXQsYT1lLmZhZGUsaT1lLmJlYXRGYWRlLG89ZS5ib3VuY2UseT1lLnNoYWtlLG09ZS5mbGFzaCxsPWUuc3BpbixzPWUuc3BpblB1bHNlLHU9ZS5zcGluUmV2ZXJzZSx4PWUucHVsc2Usdz1lLmZpeGVkV2lkdGgsZD1lLmludmVyc2UsUD1lLmJvcmRlcixwPWUubGlzdEl0ZW0sZj1lLmZsaXAsST1lLnNpemUsdj1lLnJvdGF0aW9uLEE9ZS5wdWxsLE49KHQ9e1wiZmEtYmVhdFwiOnIsXCJmYS1mYWRlXCI6YSxcImZhLWJlYXQtZmFkZVwiOmksXCJmYS1ib3VuY2VcIjpvLFwiZmEtc2hha2VcIjp5LFwiZmEtZmxhc2hcIjptLFwiZmEtc3BpblwiOmwsXCJmYS1zcGluLXJldmVyc2VcIjp1LFwiZmEtc3Bpbi1wdWxzZVwiOnMsXCJmYS1wdWxzZVwiOngsXCJmYS1md1wiOncsXCJmYS1pbnZlcnNlXCI6ZCxcImZhLWJvcmRlclwiOlAsXCJmYS1saVwiOnAsXCJmYS1mbGlwXCI6Zj09PSEwLFwiZmEtZmxpcC1ob3Jpem9udGFsXCI6Zj09PVwiaG9yaXpvbnRhbFwifHxmPT09XCJib3RoXCIsXCJmYS1mbGlwLXZlcnRpY2FsXCI6Zj09PVwidmVydGljYWxcInx8Zj09PVwiYm90aFwifSxiKHQsXCJmYS1cIi5jb25jYXQoSSksdHlwZW9mIEk8XCJ1XCImJkkhPT1udWxsKSxiKHQsXCJmYS1yb3RhdGUtXCIuY29uY2F0KHYpLHR5cGVvZiB2PFwidVwiJiZ2IT09bnVsbCYmdiE9PTApLGIodCxcImZhLXB1bGwtXCIuY29uY2F0KEEpLHR5cGVvZiBBPFwidVwiJiZBIT09bnVsbCksYih0LFwiZmEtc3dhcC1vcGFjaXR5XCIsZS5zd2FwT3BhY2l0eSksdCk7cmV0dXJuIE9iamVjdC5rZXlzKE4pLm1hcChmdW5jdGlvbihPKXtyZXR1cm4gTltPXT9POm51bGx9KS5maWx0ZXIoZnVuY3Rpb24oTyl7cmV0dXJuIE99KX1mdW5jdGlvbiBWKGUpe3JldHVybiBlPWUtMCxlPT09ZX1mdW5jdGlvbiBXKGUpe3JldHVybiBWKGUpP2U6KGU9ZS5yZXBsYWNlKC9bXFwtX1xcc10rKC4pPy9nLGZ1bmN0aW9uKHQscil7cmV0dXJuIHI/ci50b1VwcGVyQ2FzZSgpOlwiXCJ9KSxlLnN1YnN0cigwLDEpLnRvTG93ZXJDYXNlKCkrZS5zdWJzdHIoMSkpfXZhciBxPVtcInN0eWxlXCJdO2Z1bmN0aW9uIEIoZSl7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX1mdW5jdGlvbiBHKGUpe3JldHVybiBlLnNwbGl0KFwiO1wiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkucmVkdWNlKGZ1bmN0aW9uKHQscil7dmFyIGE9ci5pbmRleE9mKFwiOlwiKSxpPVcoci5zbGljZSgwLGEpKSxvPXIuc2xpY2UoYSsxKS50cmltKCk7cmV0dXJuIGkuc3RhcnRzV2l0aChcIndlYmtpdFwiKT90W0IoaSldPW86dFtpXT1vLHR9LHt9KX1mdW5jdGlvbiBFKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9O2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXJldHVybiB0O3ZhciBhPSh0LmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBFKGUsbCl9KSxpPU9iamVjdC5rZXlzKHQuYXR0cmlidXRlc3x8e30pLnJlZHVjZShmdW5jdGlvbihsLHMpe3ZhciB1PXQuYXR0cmlidXRlc1tzXTtzd2l0Y2gocyl7Y2FzZVwiY2xhc3NcIjpsLmF0dHJzLmNsYXNzTmFtZT11LGRlbGV0ZSB0LmF0dHJpYnV0ZXMuY2xhc3M7YnJlYWs7Y2FzZVwic3R5bGVcIjpsLmF0dHJzLnN0eWxlPUcodSk7YnJlYWs7ZGVmYXVsdDpzLmluZGV4T2YoXCJhcmlhLVwiKT09PTB8fHMuaW5kZXhPZihcImRhdGEtXCIpPT09MD9sLmF0dHJzW3MudG9Mb3dlckNhc2UoKV09dTpsLmF0dHJzW1cocyldPXV9cmV0dXJuIGx9LHthdHRyczp7fX0pLG89ci5zdHlsZSx5PW89PT12b2lkIDA/e306byxtPUwocixxKTtyZXR1cm4gaS5hdHRycy5zdHlsZT1jKGMoe30saS5hdHRycy5zdHlsZSkseSksZS5hcHBseSh2b2lkIDAsW3QudGFnLGMoYyh7fSxpLmF0dHJzKSxtKV0uY29uY2F0KFMoYSkpKX12YXIgUj0hMTt0cnl7Uj0hMH1jYXRjaHt9ZnVuY3Rpb24gSigpe2lmKCFSJiZjb25zb2xlJiZ0eXBlb2YgY29uc29sZS5lcnJvcj09XCJmdW5jdGlvblwiKXt2YXIgZTsoZT1jb25zb2xlKS5lcnJvci5hcHBseShlLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHooZSl7aWYoZSYmaChlKT09PVwib2JqZWN0XCImJmUucHJlZml4JiZlLmljb25OYW1lJiZlLmljb24pcmV0dXJuIGU7aWYoay5pY29uKXJldHVybiBrLmljb24oZSk7aWYoZT09PW51bGwpcmV0dXJuIG51bGw7aWYoZSYmaChlKT09PVwib2JqZWN0XCImJmUucHJlZml4JiZlLmljb25OYW1lKXJldHVybiBlO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPT09MilyZXR1cm57cHJlZml4OmVbMF0saWNvbk5hbWU6ZVsxXX07aWYodHlwZW9mIGU9PVwic3RyaW5nXCIpcmV0dXJue3ByZWZpeDpcImZhc1wiLGljb25OYW1lOmV9fWZ1bmN0aW9uIGooZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MHx8IUFycmF5LmlzQXJyYXkodCkmJnQ/Yih7fSxlLHQpOnt9fXZhciBnPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLHQpe3ZhciByPWUuaWNvbixhPWUubWFzayxpPWUuc3ltYm9sLG89ZS5jbGFzc05hbWUseT1lLnRpdGxlLG09ZS50aXRsZUlkLGw9ZS5tYXNrSWQscz16KHIpLHU9aihcImNsYXNzZXNcIixbXS5jb25jYXQoUyhNKGUpKSxTKG8uc3BsaXQoXCIgXCIpKSkpLHg9aihcInRyYW5zZm9ybVwiLHR5cGVvZiBlLnRyYW5zZm9ybT09XCJzdHJpbmdcIj9rLnRyYW5zZm9ybShlLnRyYW5zZm9ybSk6ZS50cmFuc2Zvcm0pLHc9aihcIm1hc2tcIix6KGEpKSxkPUQocyxjKGMoYyhjKHt9LHUpLHgpLHcpLHt9LHtzeW1ib2w6aSx0aXRsZTp5LHRpdGxlSWQ6bSxtYXNrSWQ6bH0pKTtpZighZClyZXR1cm4gSihcIkNvdWxkIG5vdCBmaW5kIGljb25cIixzKSxudWxsO3ZhciBQPWQuYWJzdHJhY3QscD17cmVmOnR9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2cuZGVmYXVsdFByb3BzLmhhc093blByb3BlcnR5KGYpfHwocFtmXT1lW2ZdKX0pLFEoUFswXSxwKX0pO2cuZGlzcGxheU5hbWU9XCJGb250QXdlc29tZUljb25cIjtnLnByb3BUeXBlcz17YmVhdDpuLmJvb2wsYm9yZGVyOm4uYm9vbCxiZWF0RmFkZTpuLmJvb2wsYm91bmNlOm4uYm9vbCxjbGFzc05hbWU6bi5zdHJpbmcsZmFkZTpuLmJvb2wsZmxhc2g6bi5ib29sLG1hc2s6bi5vbmVPZlR5cGUoW24ub2JqZWN0LG4uYXJyYXksbi5zdHJpbmddKSxtYXNrSWQ6bi5zdHJpbmcsZml4ZWRXaWR0aDpuLmJvb2wsaW52ZXJzZTpuLmJvb2wsZmxpcDpuLm9uZU9mKFshMCwhMSxcImhvcml6b250YWxcIixcInZlcnRpY2FsXCIsXCJib3RoXCJdKSxpY29uOm4ub25lT2ZUeXBlKFtuLm9iamVjdCxuLmFycmF5LG4uc3RyaW5nXSksbGlzdEl0ZW06bi5ib29sLHB1bGw6bi5vbmVPZihbXCJyaWdodFwiLFwibGVmdFwiXSkscHVsc2U6bi5ib29sLHJvdGF0aW9uOm4ub25lT2YoWzAsOTAsMTgwLDI3MF0pLHNoYWtlOm4uYm9vbCxzaXplOm4ub25lT2YoW1wiMnhzXCIsXCJ4c1wiLFwic21cIixcImxnXCIsXCJ4bFwiLFwiMnhsXCIsXCIxeFwiLFwiMnhcIixcIjN4XCIsXCI0eFwiLFwiNXhcIixcIjZ4XCIsXCI3eFwiLFwiOHhcIixcIjl4XCIsXCIxMHhcIl0pLHNwaW46bi5ib29sLHNwaW5QdWxzZTpuLmJvb2wsc3BpblJldmVyc2U6bi5ib29sLHN5bWJvbDpuLm9uZU9mVHlwZShbbi5ib29sLG4uc3RyaW5nXSksdGl0bGU6bi5zdHJpbmcsdGl0bGVJZDpuLnN0cmluZyx0cmFuc2Zvcm06bi5vbmVPZlR5cGUoW24uc3RyaW5nLG4ub2JqZWN0XSksc3dhcE9wYWNpdHk6bi5ib29sfTtnLmRlZmF1bHRQcm9wcz17Ym9yZGVyOiExLGNsYXNzTmFtZTpcIlwiLG1hc2s6bnVsbCxtYXNrSWQ6bnVsbCxmaXhlZFdpZHRoOiExLGludmVyc2U6ITEsZmxpcDohMSxpY29uOm51bGwsbGlzdEl0ZW06ITEscHVsbDpudWxsLHB1bHNlOiExLHJvdGF0aW9uOm51bGwsc2l6ZTpudWxsLHNwaW46ITEsc3BpblB1bHNlOiExLHNwaW5SZXZlcnNlOiExLGJlYXQ6ITEsZmFkZTohMSxiZWF0RmFkZTohMSxib3VuY2U6ITEsc2hha2U6ITEsc3ltYm9sOiExLHRpdGxlOlwiXCIsdGl0bGVJZDpudWxsLHRyYW5zZm9ybTpudWxsLHN3YXBPcGFjaXR5OiExfTt2YXIgUT1FLmJpbmQobnVsbCxDLmNyZWF0ZUVsZW1lbnQpO2V4cG9ydHtnIGFzIEZvbnRBd2Vzb21lSWNvbn07XG4iLCAiLyogZXNtLnNoIC0gZXNidWlsZCBidW5kbGUoZnV6enlzb3J0QDIuMC4xKSBkZW5vIHByb2R1Y3Rpb24gKi9cbnZhciBzZT1PYmplY3QuY3JlYXRlO3ZhciBPPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgb2U9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgZ2U9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIGRlPU9iamVjdC5nZXRQcm90b3R5cGVPZixjZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciB1ZT0odyxfKT0+KCk9PihffHx3KChfPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxfKSxfLmV4cG9ydHMpO3ZhciBfZT0odyxfLG0sUCk9PntpZihfJiZ0eXBlb2YgXz09XCJvYmplY3RcInx8dHlwZW9mIF89PVwiZnVuY3Rpb25cIilmb3IobGV0IHkgb2YgZ2UoXykpIWNlLmNhbGwodyx5KSYmeSE9PW0mJk8odyx5LHtnZXQ6KCk9Pl9beV0sZW51bWVyYWJsZTohKFA9b2UoXyx5KSl8fFAuZW51bWVyYWJsZX0pO3JldHVybiB3fTt2YXIgaGU9KHcsXyxtKT0+KG09dyE9bnVsbD9zZShkZSh3KSk6e30sX2UoX3x8IXd8fCF3Ll9fZXNNb2R1bGU/TyhtLFwiZGVmYXVsdFwiLHt2YWx1ZTp3LGVudW1lcmFibGU6ITB9KTptLHcpKTt2YXIgaj11ZSgoVSxxKT0+eygodyxfKT0+e3R5cGVvZiBkZWZpbmU9PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sXyk6dHlwZW9mIHE9PVwib2JqZWN0XCImJnEuZXhwb3J0cz9xLmV4cG9ydHM9XygpOncuZnV6enlzb3J0PV8oKX0pKFUsdz0+e3ZhciBfPShyLGUpPT57aWYocj09XCJmYXJ6aGVyXCIpcmV0dXJue3RhcmdldDpcImZhcnpoZXIgd2FzIGhlcmUgKF4tXiopL1wiLHNjb3JlOjAsX2luZGV4ZXM6WzBdfTtpZighcnx8IWUpcmV0dXJuIGc7dmFyIGE9RyhyKTtBKGUpfHwoZT1rKGUpKTt2YXIgbj1hLmJpdGZsYWdzO3JldHVybihuJmUuX2JpdGZsYWdzKSE9PW4/ZzpOKGEsZSl9LG09KHIsZSxhKT0+e2lmKHI9PVwiZmFyemhlclwiKXJldHVyblt7dGFyZ2V0OlwiZmFyemhlciB3YXMgaGVyZSAoXi1eKikvXCIsc2NvcmU6MCxfaW5kZXhlczpbMF0sb2JqOmU/ZVswXTpnfV07aWYoIXIpcmV0dXJuIGEmJmEuYWxsP3JlKHIsZSxhKTpXO3ZhciBuPUcociksZj1uLmJpdGZsYWdzLHQ9bi5jb250YWluc1NwYWNlLHY9YSYmYS50aHJlc2hvbGR8fEIsaT1hJiZhLmxpbWl0fHxRLGw9MCxzPTAsbz1lLmxlbmd0aDtpZihhJiZhLmtleSlmb3IodmFyIGg9YS5rZXksdT0wO3U8bzsrK3Upe3ZhciBTPWVbdV0sZD1NKFMsaCk7aWYoISFkJiYoQShkKXx8KGQ9ayhkKSksKGYmZC5fYml0ZmxhZ3MpPT09Zikpe3ZhciB4PU4obixkKTt4IT09ZyYmKHguc2NvcmU8dnx8KHg9e3RhcmdldDp4LnRhcmdldCxfdGFyZ2V0TG93ZXI6XCJcIixfdGFyZ2V0TG93ZXJDb2RlczpnLF9uZXh0QmVnaW5uaW5nSW5kZXhlczpnLF9iaXRmbGFnczowLHNjb3JlOnguc2NvcmUsX2luZGV4ZXM6eC5faW5kZXhlcyxvYmo6U30sbDxpPyhwLmFkZCh4KSwrK2wpOigrK3MseC5zY29yZT5wLnBlZWsoKS5zY29yZSYmcC5yZXBsYWNlVG9wKHgpKSkpfX1lbHNlIGlmKGEmJmEua2V5cylmb3IodmFyIFY9YS5zY29yZUZufHx2ZSxYPWEua2V5cyx6PVgubGVuZ3RoLHU9MDt1PG87Kyt1KXtmb3IodmFyIFM9ZVt1XSxiPW5ldyBBcnJheSh6KSxjPTA7Yzx6OysrYyl7dmFyIGg9WFtjXSxkPU0oUyxoKTtpZighZCl7YltjXT1nO2NvbnRpbnVlfUEoZCl8fChkPWsoZCkpLChmJmQuX2JpdGZsYWdzKSE9PWY/YltjXT1nOmJbY109TihuLGQpfWIub2JqPVM7dmFyIFQ9VihiKTtUIT09ZyYmKFQ8dnx8KGIuc2NvcmU9VCxsPGk/KHAuYWRkKGIpLCsrbCk6KCsrcyxUPnAucGVlaygpLnNjb3JlJiZwLnJlcGxhY2VUb3AoYikpKSl9ZWxzZSBmb3IodmFyIHU9MDt1PG87Kyt1KXt2YXIgZD1lW3VdO2lmKCEhZCYmKEEoZCl8fChkPWsoZCkpLChmJmQuX2JpdGZsYWdzKT09PWYpKXt2YXIgeD1OKG4sZCk7eCE9PWcmJih4LnNjb3JlPHZ8fChsPGk/KHAuYWRkKHgpLCsrbCk6KCsrcyx4LnNjb3JlPnAucGVlaygpLnNjb3JlJiZwLnJlcGxhY2VUb3AoeCkpKSl9fWlmKGw9PT0wKXJldHVybiBXO2Zvcih2YXIgTD1uZXcgQXJyYXkobCksdT1sLTE7dT49MDstLXUpTFt1XT1wLnBvbGwoKTtyZXR1cm4gTC50b3RhbD1sK3MsTH0sUD0ocixlLGEpPT57aWYodHlwZW9mIGU9PVwiZnVuY3Rpb25cIilyZXR1cm4geShyLGUpO2lmKHI9PT1nKXJldHVybiBnO2U9PT12b2lkIDAmJihlPVwiPGI+XCIpLGE9PT12b2lkIDAmJihhPVwiPC9iPlwiKTt2YXIgbj1cIlwiLGY9MCx0PSExLHY9ci50YXJnZXQsaT12Lmxlbmd0aCxsPXIuX2luZGV4ZXM7bD1sLnNsaWNlKDAsbC5sZW4pLnNvcnQoKGgsdSk9PmgtdSk7Zm9yKHZhciBzPTA7czxpOysrcyl7dmFyIG89dltzXTtpZihsW2ZdPT09cyl7aWYoKytmLHR8fCh0PSEwLG4rPWUpLGY9PT1sLmxlbmd0aCl7bis9bythK3Yuc3Vic3RyKHMrMSk7YnJlYWt9fWVsc2UgdCYmKHQ9ITEsbis9YSk7bis9b31yZXR1cm4gbn0seT0ocyxlKT0+e2lmKHM9PT1nKXJldHVybiBnO3ZhciBhPXMudGFyZ2V0LG49YS5sZW5ndGgsZj1zLl9pbmRleGVzO2Y9Zi5zbGljZSgwLGYubGVuKS5zb3J0KCh1LFMpPT51LVMpO2Zvcih2YXIgdD1cIlwiLHY9MCxpPTAsbD0hMSxzPVtdLG89MDtvPG47KytvKXt2YXIgaD1hW29dO2lmKGZbaV09PT1vKXtpZigrK2ksbHx8KGw9ITAscy5wdXNoKHQpLHQ9XCJcIiksaT09PWYubGVuZ3RoKXt0Kz1oLHMucHVzaChlKHQsdisrKSksdD1cIlwiLHMucHVzaChhLnN1YnN0cihvKzEpKTticmVha319ZWxzZSBsJiYobD0hMSxzLnB1c2goZSh0LHYrKykpLHQ9XCJcIik7dCs9aH1yZXR1cm4gc30sZWU9cj0+ci5faW5kZXhlcy5zbGljZSgwLHIuX2luZGV4ZXMubGVuKS5zb3J0KChlLGEpPT5lLWEpLEU9cj0+e3R5cGVvZiByIT1cInN0cmluZ1wiJiYocj1cIlwiKTt2YXIgZT1IKHIpO3JldHVybnt0YXJnZXQ6cixfdGFyZ2V0TG93ZXI6ZS5fbG93ZXIsX3RhcmdldExvd2VyQ29kZXM6ZS5sb3dlckNvZGVzLF9uZXh0QmVnaW5uaW5nSW5kZXhlczpnLF9iaXRmbGFnczplLmJpdGZsYWdzLHNjb3JlOmcsX2luZGV4ZXM6WzBdLG9iajpnfX0sJD1yPT57dHlwZW9mIHIhPVwic3RyaW5nXCImJihyPVwiXCIpLHI9ci50cmltKCk7dmFyIGU9SChyKSxhPVtdO2lmKGUuY29udGFpbnNTcGFjZSl7dmFyIG49ci5zcGxpdCgvXFxzKy8pO249Wy4uLm5ldyBTZXQobildO2Zvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKWlmKG5bZl0hPT1cIlwiKXt2YXIgdD1IKG5bZl0pO2EucHVzaCh7bG93ZXJDb2Rlczp0Lmxvd2VyQ29kZXMsX2xvd2VyOm5bZl0udG9Mb3dlckNhc2UoKSxjb250YWluc1NwYWNlOiExfSl9fXJldHVybntsb3dlckNvZGVzOmUubG93ZXJDb2RlcyxiaXRmbGFnczplLmJpdGZsYWdzLGNvbnRhaW5zU3BhY2U6ZS5jb250YWluc1NwYWNlLF9sb3dlcjplLl9sb3dlcixzcGFjZVNlYXJjaGVzOmF9fSxrPXI9PntpZihyLmxlbmd0aD45OTkpcmV0dXJuIEUocik7dmFyIGU9Si5nZXQocik7cmV0dXJuIGUhPT12b2lkIDB8fChlPUUociksSi5zZXQocixlKSksZX0sRz1yPT57aWYoci5sZW5ndGg+OTk5KXJldHVybiAkKHIpO3ZhciBlPUsuZ2V0KHIpO3JldHVybiBlIT09dm9pZCAwfHwoZT0kKHIpLEsuc2V0KHIsZSkpLGV9LHJlPShyLGUsYSk9Pnt2YXIgbj1bXTtuLnRvdGFsPWUubGVuZ3RoO3ZhciBmPWEmJmEubGltaXR8fFE7aWYoYSYmYS5rZXkpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciB2PWVbdF0saT1NKHYsYS5rZXkpO2lmKCEhaSl7QShpKXx8KGk9ayhpKSksaS5zY29yZT1CLGkuX2luZGV4ZXMubGVuPTA7dmFyIGw9aTtpZihsPXt0YXJnZXQ6bC50YXJnZXQsX3RhcmdldExvd2VyOlwiXCIsX3RhcmdldExvd2VyQ29kZXM6ZyxfbmV4dEJlZ2lubmluZ0luZGV4ZXM6ZyxfYml0ZmxhZ3M6MCxzY29yZTppLnNjb3JlLF9pbmRleGVzOmcsb2JqOnZ9LG4ucHVzaChsKSxuLmxlbmd0aD49ZilyZXR1cm4gbn19ZWxzZSBpZihhJiZhLmtleXMpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe2Zvcih2YXIgdj1lW3RdLHM9bmV3IEFycmF5KGEua2V5cy5sZW5ndGgpLG89YS5rZXlzLmxlbmd0aC0xO28+PTA7LS1vKXt2YXIgaT1NKHYsYS5rZXlzW29dKTtpZighaSl7c1tvXT1nO2NvbnRpbnVlfUEoaSl8fChpPWsoaSkpLGkuc2NvcmU9QixpLl9pbmRleGVzLmxlbj0wLHNbb109aX1pZihzLm9iaj12LHMuc2NvcmU9QixuLnB1c2gocyksbi5sZW5ndGg+PWYpcmV0dXJuIG59ZWxzZSBmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIGk9ZVt0XTtpZighIWkmJihBKGkpfHwoaT1rKGkpKSxpLnNjb3JlPUIsaS5faW5kZXhlcy5sZW49MCxuLnB1c2goaSksbi5sZW5ndGg+PWYpKXJldHVybiBufXJldHVybiBufSxOPShyLGUpPT57aWYoci5jb250YWluc1NwYWNlKXJldHVybiBhZShyLGUpO2Zvcih2YXIgYT1yLl9sb3dlcixuPXIubG93ZXJDb2RlcyxmPW5bMF0sdD1lLl90YXJnZXRMb3dlckNvZGVzLHY9bi5sZW5ndGgsaT10Lmxlbmd0aCxoPTAsbD0wLHM9MDs7KXt2YXIgbz1mPT09dFtsXTtpZihvKXtpZihDW3MrK109bCwrK2gsaD09PXYpYnJlYWs7Zj1uW2hdfWlmKCsrbCxsPj1pKXJldHVybiBnfXZhciBoPTAsdT0hMSxTPTAsZD1lLl9uZXh0QmVnaW5uaW5nSW5kZXhlcztkPT09ZyYmKGQ9ZS5fbmV4dEJlZ2lubmluZ0luZGV4ZXM9aWUoZS50YXJnZXQpKTt2YXIgeD1sPUNbMF09PT0wPzA6ZFtDWzBdLTFdLFY9MDtpZihsIT09aSlmb3IoOzspaWYobD49aSl7aWYoaDw9MHx8KCsrVixWPjIwMCkpYnJlYWs7LS1oO3ZhciBYPUZbLS1TXTtsPWRbWF19ZWxzZXt2YXIgbz1uW2hdPT09dFtsXTtpZihvKXtpZihGW1MrK109bCwrK2gsaD09PXYpe3U9ITA7YnJlYWt9KytsfWVsc2UgbD1kW2xdfXZhciB6PWUuX3RhcmdldExvd2VyLmluZGV4T2YoYSxDWzBdKSxiPX56O2lmKGImJiF1KWZvcih2YXIgYz0wO2M8czsrK2MpQ1tjXT16K2M7dmFyIFQ9ITE7YiYmKFQ9ZS5fbmV4dEJlZ2lubmluZ0luZGV4ZXNbei0xXT09PXopO3tpZih1KXZhciBMPUYsWT1TO2Vsc2UgdmFyIEw9QyxZPXM7Zm9yKHZhciBJPTAsRD0wLGM9MTtjPHY7KytjKUxbY10tTFtjLTFdIT09MSYmKEktPUxbY10sKytEKTt2YXIgbGU9TFt2LTFdLUxbMF0tKHYtMSk7aWYoSS09KDEyK2xlKSpELExbMF0hPT0wJiYoSS09TFswXSoxMCksIXUpSSo9MWUzO2Vsc2V7Zm9yKHZhciBaPTEsYz1kWzBdO2M8aTtjPWRbY10pKytaO1o+MjQmJihJKj0oWi0yNCkqMTApfWImJihJLz0xMCksVCYmKEkvPTEwKSxJLT1pLXYsZS5zY29yZT1JO2Zvcih2YXIgYz0wO2M8WTsrK2MpZS5faW5kZXhlc1tjXT1MW2NdO3JldHVybiBlLl9pbmRleGVzLmxlbj1ZLGV9fSxhZT0ocixlKT0+e2Zvcih2YXIgYT1uZXcgU2V0LG49MCxmPWcsdD0wLHY9ci5zcGFjZVNlYXJjaGVzLHM9MDtzPHYubGVuZ3RoOysrcyl7dmFyIGk9dltzXTtpZihmPU4oaSxlKSxmPT09ZylyZXR1cm4gZztuKz1mLnNjb3JlLGYuX2luZGV4ZXNbMF08dCYmKG4tPXQtZi5faW5kZXhlc1swXSksdD1mLl9pbmRleGVzWzBdO2Zvcih2YXIgbD0wO2w8Zi5faW5kZXhlcy5sZW47KytsKWEuYWRkKGYuX2luZGV4ZXNbbF0pfWYuc2NvcmU9bjt2YXIgcz0wO2ZvcihsZXQgbyBvZiBhKWYuX2luZGV4ZXNbcysrXT1vO3JldHVybiBmLl9pbmRleGVzLmxlbj1zLGZ9LEg9cj0+e2Zvcih2YXIgZT1yLmxlbmd0aCxhPXIudG9Mb3dlckNhc2UoKSxuPVtdLGY9MCx0PSExLHY9MDt2PGU7Kyt2KXt2YXIgaT1uW3ZdPWEuY2hhckNvZGVBdCh2KTtpZihpPT09MzIpe3Q9ITA7Y29udGludWV9dmFyIGw9aT49OTcmJmk8PTEyMj9pLTk3Omk+PTQ4JiZpPD01Nz8yNjppPD0xMjc/MzA6MzE7Znw9MTw8bH1yZXR1cm57bG93ZXJDb2RlczpuLGJpdGZsYWdzOmYsY29udGFpbnNTcGFjZTp0LF9sb3dlcjphfX0sbmU9cj0+e2Zvcih2YXIgZT1yLmxlbmd0aCxhPVtdLG49MCxmPSExLHQ9ITEsdj0wO3Y8ZTsrK3Ype3ZhciBpPXIuY2hhckNvZGVBdCh2KSxsPWk+PTY1JiZpPD05MCxzPWx8fGk+PTk3JiZpPD0xMjJ8fGk+PTQ4JiZpPD01NyxvPWwmJiFmfHwhdHx8IXM7Zj1sLHQ9cyxvJiYoYVtuKytdPXYpfXJldHVybiBhfSxpZT1yPT57Zm9yKHZhciBlPXIubGVuZ3RoLGE9bmUociksbj1bXSxmPWFbMF0sdD0wLHY9MDt2PGU7Kyt2KWY+dj9uW3ZdPWY6KGY9YVsrK3RdLG5bdl09Zj09PXZvaWQgMD9lOmYpO3JldHVybiBufSxmZT0oKT0+e0ouY2xlYXIoKSxLLmNsZWFyKCksQz1bXSxGPVtdfSxKPW5ldyBNYXAsSz1uZXcgTWFwLEM9W10sRj1bXSx2ZT1yPT57Zm9yKHZhciBlPUIsYT1yLmxlbmd0aCxuPTA7bjxhOysrbil7dmFyIGY9cltuXTtpZihmIT09Zyl7dmFyIHQ9Zi5zY29yZTt0PmUmJihlPXQpfX1yZXR1cm4gZT09PUI/ZzplfSxNPShyLGUpPT57dmFyIGE9cltlXTtpZihhIT09dm9pZCAwKXJldHVybiBhO3ZhciBuPWU7QXJyYXkuaXNBcnJheShlKXx8KG49ZS5zcGxpdChcIi5cIikpO2Zvcih2YXIgZj1uLmxlbmd0aCx0PS0xO3ImJisrdDxmOylyPXJbblt0XV07cmV0dXJuIHJ9LEE9cj0+dHlwZW9mIHI9PVwib2JqZWN0XCIsUT0xLzAsQj0tUSxXPVtdO1cudG90YWw9MDt2YXIgZz1udWxsLHRlPXI9Pnt2YXIgZT1bXSxhPTAsbj17fSxmPXQ9Pntmb3IodmFyIHY9MCxpPWVbdl0sbD0xO2w8YTspe3ZhciBzPWwrMTt2PWwsczxhJiZlW3NdLnNjb3JlPGVbbF0uc2NvcmUmJih2PXMpLGVbdi0xPj4xXT1lW3ZdLGw9MSsodjw8MSl9Zm9yKHZhciBvPXYtMT4+MTt2PjAmJmkuc2NvcmU8ZVtvXS5zY29yZTtvPSh2PW8pLTE+PjEpZVt2XT1lW29dO2Vbdl09aX07cmV0dXJuIG4uYWRkPXQ9Pnt2YXIgdj1hO2VbYSsrXT10O2Zvcih2YXIgaT12LTE+PjE7dj4wJiZ0LnNjb3JlPGVbaV0uc2NvcmU7aT0odj1pKS0xPj4xKWVbdl09ZVtpXTtlW3ZdPXR9LG4ucG9sbD10PT57aWYoYSE9PTApe3ZhciB2PWVbMF07cmV0dXJuIGVbMF09ZVstLWFdLGYoKSx2fX0sbi5wZWVrPXQ9PntpZihhIT09MClyZXR1cm4gZVswXX0sbi5yZXBsYWNlVG9wPXQ9PntlWzBdPXQsZigpfSxufSxwPXRlKCk7cmV0dXJue3NpbmdsZTpfLGdvOm0saGlnaGxpZ2h0OlAscHJlcGFyZTpFLGluZGV4ZXM6ZWUsY2xlYW51cDpmZX19KX0pO3ZhciB4ZT1oZShqKCkpLHtkZWZhdWx0OlIsLi4ud2V9PXhlLGJlPVIhPT12b2lkIDA/Ujp3ZTtleHBvcnR7YmUgYXMgZGVmYXVsdH07XG4iLCAiaW1wb3J0IHsgUmVhY3QsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi9kZXBfd2ViLnRzXCI7XG5pbXBvcnQgeyBGb250QXdlc29tZUljb24gfSBmcm9tIFwiaHR0cHM6Ly9lc20uc2gvQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lQDAuMi4wXCI7XG5pbXBvcnQgeyBJY29uRGVmaW5pdGlvbiB9IGZyb20gXCJodHRwczovL2VzbS5zaC9AZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnNANi4yLjBcIjtcbmltcG9ydCB7IEZpbHRlck9wdGlvbiB9IGZyb20gXCIuLi8uLi9jb21tb24vdHlwZXMudHNcIjtcbmltcG9ydCBmdXp6eXNvcnQgZnJvbSBcImh0dHBzOi8vZXNtLnNoL2Z1enp5c29ydEAyLjAuMVwiO1xuXG5mdW5jdGlvbiBtYWdpY1NvcnRlcihhOiBGaWx0ZXJPcHRpb24sIGI6IEZpbHRlck9wdGlvbik6IG51bWJlciB7XG4gIGlmIChhLm9yZGVySWQgJiYgYi5vcmRlcklkKSB7XG4gICAgcmV0dXJuIGEub3JkZXJJZCA8IGIub3JkZXJJZCA/IC0xIDogMTtcbiAgfVxuICBpZiAoYS5vcmRlcklkKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChiLm9yZGVySWQpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxudHlwZSBGaWx0ZXJSZXN1bHQgPSBGaWx0ZXJPcHRpb24gJiB7XG4gIHJlc3VsdD86IGFueTtcbn07XG5cbmZ1bmN0aW9uIHNpbXBsZUZpbHRlcihcbiAgcGF0dGVybjogc3RyaW5nLFxuICBvcHRpb25zOiBGaWx0ZXJPcHRpb25bXVxuKTogRmlsdGVyT3B0aW9uW10ge1xuICBjb25zdCBsb3dlclBhdHRlcm4gPSBwYXR0ZXJuLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgcmV0dXJuIG9wdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJQYXR0ZXJuKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUh0bWwodW5zYWZlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdW5zYWZlXG4gICAgLnJlcGxhY2VBbGwoXCImXCIsIFwiJmFtcDtcIilcbiAgICAucmVwbGFjZUFsbChcIjxcIiwgXCImbHQ7XCIpXG4gICAgLnJlcGxhY2VBbGwoXCI+XCIsIFwiJmd0O1wiKVxuICAgIC5yZXBsYWNlQWxsKCdcIicsIFwiJnF1b3Q7XCIpXG4gICAgLnJlcGxhY2VBbGwoXCInXCIsIFwiJiMwMzk7XCIpO1xufVxuXG5mdW5jdGlvbiBmdXp6eVNvcnRlcihwYXR0ZXJuOiBzdHJpbmcsIG9wdGlvbnM6IEZpbHRlck9wdGlvbltdKTogRmlsdGVyUmVzdWx0W10ge1xuICByZXR1cm4gZnV6enlzb3J0XG4gICAgLmdvKHBhdHRlcm4sIG9wdGlvbnMsIHtcbiAgICAgIGFsbDogdHJ1ZSxcbiAgICAgIGtleTogXCJuYW1lXCIsXG4gICAgfSlcbiAgICAubWFwKChyZXN1bHQ6IGFueSkgPT4gKHsgLi4ucmVzdWx0Lm9iaiwgcmVzdWx0OiByZXN1bHQgfSkpXG4gICAgLnNvcnQobWFnaWNTb3J0ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRmlsdGVyTGlzdCh7XG4gIHBsYWNlaG9sZGVyLFxuICBvcHRpb25zLFxuICBsYWJlbCxcbiAgb25TZWxlY3QsXG4gIG9uS2V5UHJlc3MsXG4gIGFsbG93TmV3ID0gZmFsc2UsXG4gIGhlbHBUZXh0ID0gXCJcIixcbiAgY29tcGxldGVQcmVmaXgsXG4gIGljb24sXG4gIG5ld0hpbnQsXG59OiB7XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEZpbHRlck9wdGlvbltdO1xuICBsYWJlbDogc3RyaW5nO1xuICBvbktleVByZXNzPzogKGtleTogc3RyaW5nLCBjdXJyZW50VGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblNlbGVjdDogKG9wdGlvbjogRmlsdGVyT3B0aW9uIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICBhbGxvd05ldz86IGJvb2xlYW47XG4gIGNvbXBsZXRlUHJlZml4Pzogc3RyaW5nO1xuICBoZWxwVGV4dDogc3RyaW5nO1xuICBuZXdIaW50Pzogc3RyaW5nO1xuICBpY29uPzogSWNvbkRlZmluaXRpb247XG59KSB7XG4gIGNvbnN0IHNlYXJjaEJveFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW3RleHQsIHNldFRleHRdID0gdXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IFttYXRjaGluZ09wdGlvbnMsIHNldE1hdGNoaW5nT3B0aW9uc10gPSB1c2VTdGF0ZShcbiAgICBmdXp6eVNvcnRlcihcIlwiLCBvcHRpb25zKVxuICApO1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGlvbk9wdGlvbl0gPSB1c2VTdGF0ZSgwKTtcblxuICBsZXQgc2VsZWN0ZWRFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcblxuICBmdW5jdGlvbiBmaWx0ZXJVcGRhdGUoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pIHtcbiAgICB1cGRhdGVGaWx0ZXIoZS50YXJnZXQudmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRmlsdGVyKG9yaWdpbmFsUGhyYXNlOiBzdHJpbmcpIHtcbiAgICBsZXQgZm91bmRFeGFjdE1hdGNoID0gZmFsc2U7XG4gICAgbGV0IHJlc3VsdHMgPSBmdXp6eVNvcnRlcihvcmlnaW5hbFBocmFzZSwgb3B0aW9ucyk7XG4gICAgaWYgKGFsbG93TmV3ICYmICFmb3VuZEV4YWN0TWF0Y2ggJiYgb3JpZ2luYWxQaHJhc2UpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgIG5hbWU6IG9yaWdpbmFsUGhyYXNlLFxuICAgICAgICBoaW50OiBuZXdIaW50LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHNldE1hdGNoaW5nT3B0aW9ucyhyZXN1bHRzKTtcblxuICAgIHNldFRleHQob3JpZ2luYWxQaHJhc2UpO1xuICAgIHNldFNlbGVjdGlvbk9wdGlvbigwKTtcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdXBkYXRlRmlsdGVyKHRleHQpO1xuICB9LCBbb3B0aW9uc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2VhcmNoQm94UmVmLmN1cnJlbnQhLmZvY3VzKCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZ1bmN0aW9uIGNsb3NlcigpIHtcbiAgICAgIG9uU2VsZWN0KHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsb3Nlcik7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsb3Nlcik7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIGxldCBleGl0aW5nID0gZmFsc2U7XG5cbiAgY29uc3QgcmV0dXJuRWwgPSAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJzYi1maWx0ZXItd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzYi1maWx0ZXItYm94XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2ItaGVhZGVyXCI+XG4gICAgICAgICAgPGxhYmVsPntsYWJlbH08L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgdmFsdWU9e3RleHR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICByZWY9e3NlYXJjaEJveFJlZn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtmaWx0ZXJVcGRhdGV9XG4gICAgICAgICAgICBvbkJsdXI9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXhpdGluZykge1xuICAgICAgICAgICAgICAgIHNlYXJjaEJveFJlZi5jdXJyZW50IS5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25LZXlEb3duPXsoZTogUmVhY3QuS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIktleSB1cFwiLCBlKTtcbiAgICAgICAgICAgICAgaWYgKG9uS2V5UHJlc3MpIHtcbiAgICAgICAgICAgICAgICBvbktleVByZXNzKGUua2V5LCB0ZXh0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzd2l0Y2ggKGUua2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkFycm93VXBcIjpcbiAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvbk9wdGlvbihNYXRoLm1heCgwLCBzZWxlY3RlZE9wdGlvbiAtIDEpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjpcbiAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvbk9wdGlvbihcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDEsIHNlbGVjdGVkT3B0aW9uICsgMSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiRW50ZXJcIjpcbiAgICAgICAgICAgICAgICAgIGV4aXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgb25TZWxlY3QobWF0Y2hpbmdPcHRpb25zW3NlbGVjdGVkT3B0aW9uXSk7XG4gICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiUGFnZVVwXCI6XG4gICAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25PcHRpb24oTWF0aC5tYXgoMCwgc2VsZWN0ZWRPcHRpb24gLSA1KSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiUGFnZURvd25cIjpcbiAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvbk9wdGlvbihNYXRoLm1heCgwLCBzZWxlY3RlZE9wdGlvbiArIDUpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJIb21lXCI6XG4gICAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25PcHRpb24oMCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiRW5kXCI6XG4gICAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25PcHRpb24obWF0Y2hpbmdPcHRpb25zLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkVzY2FwZVwiOlxuICAgICAgICAgICAgICAgICAgZXhpdGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBvblNlbGVjdCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIiBcIjpcbiAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZVByZWZpeCAmJiAhdGV4dCkge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXIoY29tcGxldGVQcmVmaXgpO1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwic2ItaGVscC10ZXh0XCJcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGhlbHBUZXh0IH19XG4gICAgICAgID48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzYi1yZXN1bHQtbGlzdFwiPlxuICAgICAgICAgIHttYXRjaGluZ09wdGlvbnMgJiYgbWF0Y2hpbmdPcHRpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gbWF0Y2hpbmdPcHRpb25zLm1hcCgob3B0aW9uLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e1wiXCIgKyBpZHh9XG4gICAgICAgICAgICAgICAgICByZWY9e3NlbGVjdGVkT3B0aW9uID09PSBpZHggPyBzZWxlY3RlZEVsZW1lbnRSZWYgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbiA9PT0gaWR4ID8gXCJzYi1zZWxlY3RlZC1vcHRpb25cIiA6IFwic2Itb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25PcHRpb24oaWR4KTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0KG9wdGlvbik7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNiLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAge2ljb24gJiYgPEZvbnRBd2Vzb21lSWNvbiBpY29uPXtpY29ufSAvPn1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNiLW5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgICAgICAgIF9faHRtbDogb3B0aW9uPy5yZXN1bHQ/LmluZGV4ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZnV6enlzb3J0LmhpZ2hsaWdodChvcHRpb24ucmVzdWx0LCBcIjxiPlwiLCBcIjwvYj5cIikhXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGVzY2FwZUh0bWwob3B0aW9uLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIHtvcHRpb24uaGludCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNiLWhpbnRcIj57b3B0aW9uLmhpbnR9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNlbGVjdGVkRWxlbWVudFJlZi5jdXJyZW50Py5zY3JvbGxJbnRvVmlldyh7XG4gICAgICBibG9jazogXCJuZWFyZXN0XCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiByZXR1cm5FbDtcbn1cbiIsICIvKiBlc20uc2ggLSBlc2J1aWxkIGJ1bmRsZShAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnNANi4yLjApIGRlbm8gcHJvZHVjdGlvbiAqL1xudmFyIEhTPVwiZmFzXCIsVTU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiMFwiLGljb246WzMyMCw1MTIsW10sXCIzMFwiLFwiTTAgMTkyQzAgMTAzLjYgNzEuNiAzMiAxNjAgMzJzMTYwIDcxLjYgMTYwIDE2MFYzMjBjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0MDguNCAwIDMyMFYxOTJ6TTE2MCA5NmMtNTMgMC05NiA0My05NiA5NlYzMjBjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NlYxOTJjMC01My00My05Ni05Ni05NnpcIl19LHE1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIjFcIixpY29uOlsyNTYsNTEyLFtdLFwiMzFcIixcIk0xNjAgNjRjMC0xMS44LTYuNS0yMi42LTE2LjktMjguMnMtMjMtNS0zMi45IDEuNmwtOTYgNjRDLS41IDExMS4yLTQuNCAxMzEgNS40IDE0NS44czI5LjcgMTguNyA0NC40IDguOUw5NiAxMjMuOFY0MTZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTYgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTYwVjY0elwiXX0sRzU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiMlwiLGljb246WzMyMCw1MTIsW10sXCIzMlwiLFwiTTE0Mi45IDk2Yy0yMS41IDAtNDIuMiA4LjUtNTcuNCAyMy44TDU0LjYgMTUwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDQwLjIgNzQuNUM2Ny41IDQ3LjMgMTA0LjQgMzIgMTQyLjkgMzJDMjIzIDMyIDI4OCA5NyAyODggMTc3LjFjMCAzOC41LTE1LjMgNzUuNC00Mi41IDEwMi42TDEwOS4zIDQxNkgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45TDIwMC4yIDIzNC41YzE1LjItMTUuMiAyMy44LTM1LjkgMjMuOC01Ny40YzAtNDQuOC0zNi4zLTgxLjEtODEuMS04MS4xelwiXX0sVzU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiM1wiLGljb246WzQ0OCw1MTIsW10sXCIzM1wiLFwiTTY0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMySDMzNmMxMy4yIDAgMjUgOC4xIDI5LjggMjAuNHMxLjUgMjYuMy04LjIgMzUuMkwyMjYuMyAyMDhIMjQ4Yzc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2cy02MC45IDEzNi0xMzYgMTM2SDE2OS40Yy00Mi40IDAtODEuMi0yNC0xMDAuMi02MS45bC0xLjktMy44Yy03LjktMTUuOC0xLjUtMzUgMTQuMy00Mi45czM1LTEuNSA0Mi45IDE0LjNsMS45IDMuOGM4LjEgMTYuMyAyNC44IDI2LjUgNDIuOSAyNi41SDI0OGMzOS44IDAgNzItMzIuMiA3Mi03MnMtMzIuMi03Mi03Mi03MkgxNDRjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC40cy0xLjUtMjYuMyA4LjItMzUuMkwyNTMuNyA5Nkg5NkM3OC4zIDk2IDY0IDgxLjcgNjQgNjR6XCJdfSxFNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCI0XCIsaWNvbjpbMzg0LDUxMixbXSxcIjM0XCIsXCJNMTg5IDc3LjZjNy41LTE2IC43LTM1LjEtMTUuMy00Mi42cy0zNS4xLS43LTQyLjYgMTUuM0wzIDMyMi40Yy00LjcgOS45LTMuOSAyMS41IDEuOSAzMC44UzIxIDM2OCAzMiAzNjhIMjU2djgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzY4aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMFYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzA0SDgyLjRMMTg5IDc3LjZ6XCJdfSxJNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCI1XCIsaWNvbjpbMzIwLDUxMixbXSxcIjM1XCIsXCJNMzIuNSA1OC4zQzM1LjMgNDMuMSA0OC41IDMyIDY0IDMySDI1NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg5MC43TDcwLjMgMjA4SDE4NGM3NS4xIDAgMTM2IDYwLjkgMTM2IDEzNnMtNjAuOSAxMzYtMTM2IDEzNkgxMDAuNWMtMzkuNCAwLTc1LjQtMjIuMy05My01Ny41bC00LjEtOC4yYy03LjktMTUuOC0xLjUtMzUgMTQuMy00Mi45czM1LTEuNSA0Mi45IDE0LjNsNC4xIDguMmM2LjggMTMuNiAyMC42IDIyLjEgMzUuOCAyMi4xSDE4NGMzOS44IDAgNzItMzIuMiA3Mi03MnMtMzIuMi03Mi03Mi03MkgzMmMtOS41IDAtMTguNS00LjItMjQuNi0xMS41cy04LjYtMTYuOS02LjktMjYuMmwzMi0xNzZ6XCJdfSxPNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCI2XCIsaWNvbjpbMzIwLDUxMixbXSxcIjM2XCIsXCJNMjMyLjQgODQuN2MxMS40LTEzLjUgOS43LTMzLjctMy44LTQ1LjFzLTMzLjctOS43LTQ1LjEgMy44TDM4LjYgMjE0LjdDMTQuNyAyNDIuOSAxLjEgMjc4LjQgLjEgMzE1LjJjMCAxLjQtLjEgMi45LS4xIDQuM2MwIC4yIDAgLjMgMCAuNWMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MHMxNjAtNzEuNiAxNjAtMTYwYzAtODUuNS02Ny4xLTE1NS40LTE1MS41LTE1OS44bDYzLjktNzUuNnpNNjQgMzIwYzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NnpcIl19LFg1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIjdcIixpY29uOlszMjAsNTEyLFtdLFwiMzdcIixcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDI4OGMxMS41IDAgMjIgNi4xIDI3LjcgMTYuMXM1LjcgMjIuMi0uMSAzMi4xbC0yMjQgMzg0Yy04LjkgMTUuMy0yOC41IDIwLjQtNDMuOCAxMS41cy0yMC40LTI4LjUtMTEuNS00My44TDIzMi4zIDk2SDMyQzE0LjMgOTYgMCA4MS43IDAgNjR6XCJdfSxRNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCI4XCIsaWNvbjpbMzIwLDUxMixbXSxcIjM4XCIsXCJNMzA0IDE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEgxNDRDNzMuMyAzMiAxNiA4OS4zIDE2IDE2MGMwIDM0LjYgMTMuNyA2NiAzNiA4OUMyMC41IDI3Mi4zIDAgMzA5LjggMCAzNTJjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhoNjRjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhjMC00Mi4yLTIwLjUtNzkuNy01Mi0xMDNjMjIuMy0yMyAzNi01NC40IDM2LTg5ek0xNzYuMSAyODhIMTkyYzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0SDEyOGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGgxNS45YzAgMCAuMSAwIC4xIDBoMzJjMCAwIC4xIDAgLjEgMHptMC02NGMwIDAgMCAwIDAgMEgxNDRjMCAwIDAgMCAwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0aDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0YzAgMzUuMy0yOC42IDY0LTY0IDY0elwiXX0sSzU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiOVwiLGljb246WzMyMCw1MTIsW10sXCIzOVwiLFwiTTY0IDE5MmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2cy00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZ6bTg3LjUgMTU5LjhDNjcuMSAzNDcuNCAwIDI3Ny41IDAgMTkyQzAgMTAzLjYgNzEuNiAzMiAxNjAgMzJzMTYwIDcxLjYgMTYwIDE2MGMwIDIuNi0uMSA1LjMtLjIgNy45Yy0xLjcgMzUuNy0xNS4yIDcwLTM4LjQgOTcuNGwtMTQ1IDE3MS40Yy0xMS40IDEzLjUtMzEuNiAxNS4yLTQ1LjEgMy44cy0xNS4yLTMxLjYtMy44LTQ1LjFsNjMuOS03NS42elwiXX0sajU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsbC1kcmlwXCIsaWNvbjpbNTc2LDUxMixbXSxcImY1NzZcIixcIk00MS40IDkuNEM1My45LTMuMSA3NC4xLTMuMSA4Ni42IDkuNEwxNjggOTAuN2w1My4xLTUzLjFjMjguMS0yOC4xIDczLjctMjguMSAxMDEuOCAwTDQ3NC4zIDE4OS4xYzI4LjEgMjguMSAyOC4xIDczLjcgMCAxMDEuOEwyODMuOSA0ODEuNGMtMzcuNSAzNy41LTk4LjMgMzcuNS0xMzUuOCAwTDMwLjYgMzYzLjljLTM3LjUtMzcuNS0zNy41LTk4LjMgMC0xMzUuOEwxMjIuNyAxMzYgNDEuNCA1NC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3ptMTc2IDIyMS4zTDE2OCAxODEuMyA3NS45IDI3My40Yy00LjIgNC4yLTcgOS4zLTguNCAxNC42SDM4Ni43bDQyLjMtNDIuM2MzLjEtMy4xIDMuMS04LjIgMC0xMS4zTDI3Ny43IDgyLjljLTMuMS0zLjEtOC4yLTMuMS0xMS4zIDBMMjEzLjMgMTM2bDQ5LjQgNDkuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMHpNNTEyIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0yNS4yIDMyLjYtNzkuNiA1MS4yLTEwOC43YzYtOS40IDE5LjUtOS40IDI1LjUgMEM1NDMuNCAzNjguNCA1NzYgNDIyLjggNTc2IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NHpcIl19LEo1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93cy10by1jaXJjbGVcIixpY29uOls2NDAsNTEyLFtdLFwiZTRiZFwiLFwiTTkuNCA5LjRDMjEuOS0zLjEgNDIuMS0zLjEgNTQuNiA5LjRMMTYwIDExNC43Vjk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2OTZjMCA0LjMtLjkgOC41LTIuNCAxMi4yYy0xLjYgMy43LTMuOCA3LjMtNi45IDEwLjNsLS4xIC4xYy0zLjEgMy02LjYgNS4zLTEwLjMgNi45Yy0zLjggMS42LTcuOSAyLjQtMTIuMiAyLjRIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoMTguN0w5LjQgNTQuNkMtMy4xIDQyLjEtMy4xIDIxLjkgOS40IDkuNHpNMzg0IDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6TTExNC43IDM1Mkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg5NiAwbC4xIDBjOC44IDAgMTYuNyAzLjYgMjIuNSA5LjNsLjEgLjFjMyAzLjEgNS4zIDYuNiA2LjkgMTAuM2MxLjYgMy44IDIuNCA3LjkgMi40IDEyLjJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzk3LjNMNTQuNiA1MDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTE0LjcgMzUyek00MTYgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnYxOC43TDU4NS40IDkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zTDUyNS4zIDE2MEg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDQ4Yy04LjggMC0xNi44LTMuNi0yMi42LTkuM2wtLjEtLjFjLTMtMy4xLTUuMy02LjYtNi45LTEwLjNzLTIuNC03LjgtMi40LTEyLjJsMC0uMXYwVjk2ek01MjUuMyAzNTJMNjMwLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMNDgwIDM5Ny4zVjQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMjB2MGMwIDAgMC0uMSAwLS4xYzAtNC4zIC45LTguNCAyLjQtMTIuMmMxLjYtMy44IDMuOS03LjMgNi45LTEwLjRjNS44LTUuOCAxMy43LTkuMyAyMi41LTkuNGMwIDAgLjEgMCAuMSAwaDAgOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINTI1LjN6XCJdfSxtMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtY2hldnJvbi1yaWdodFwiLGljb246WzUxMiw1MTIsW1wiY2hldnJvbi1jaXJjbGUtcmlnaHRcIl0sXCJmMTM4XCIsXCJNMCAyNTZDMCAzOTcuNCAxMTQuNiA1MTIgMjU2IDUxMnMyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZ6TTI0MSAzNzdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsODctODctODctODdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMEwzNDUgMjM5YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDI0MSAzNzd6XCJdfSxaNT1tMixZNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhdFwiLGljb246WzUxMiw1MTIsWzYxOTQ2XSxcIjQwXCIsXCJNMjU2IDY0QzE1MCA2NCA2NCAxNTAgNjQgMjU2czg2IDE5MiAxOTIgMTkyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyQzExNC42IDUxMiAwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ2MzJjMCA1My00MyA5Ni05NiA5NmMtMjkuMyAwLTU1LjYtMTMuMi03My4yLTMzLjlDMzIwIDM3MS4xIDI4OS41IDM4NCAyNTYgMzg0Yy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHM1Ny4zLTEyOCAxMjgtMTI4YzI3LjkgMCA1My43IDguOSA3NC43IDI0LjFjNS43LTUgMTMuMS04LjEgMjEuMy04LjFjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2ODAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJ6bTY0IDE5MmMwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6XCJdfSx2Mj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0cmFzaC1jYW5cIixpY29uOls0NDgsNTEyLFs2MTQ2MCxcInRyYXNoLWFsdFwiXSxcImYyZWRcIixcIk0xMzUuMiAxNy43QzE0MC42IDYuOCAxNTEuNyAwIDE2My44IDBIMjg0LjJjMTIuMSAwIDIzLjIgNi44IDI4LjYgMTcuN0wzMjAgMzJoOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMyaDk2bDcuMi0xNC4zek0zMiAxMjhINDE2VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg5NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTI4em05NiA2NGMtOC44IDAtMTYgNy4yLTE2IDE2VjQzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIwOGMwLTguOC03LjItMTYtMTYtMTZ6bTk2IDBjLTguOCAwLTE2IDcuMi0xNiAxNlY0MzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2em05NiAwYy04LjggMC0xNiA3LjItMTYgMTZWNDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjA4YzAtOC44LTcuMi0xNi0xNi0xNnpcIl19LF81PXYyLCQ1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRleHQtaGVpZ2h0XCIsaWNvbjpbNTc2LDUxMixbXSxcImYwMzRcIixcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWOTZoNjRsMCAzMjBIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MmwwLTMyMGg2NHYzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDE2MCAzMnptNDcwLjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhoMzJWMzUySDQxNmMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlzLTE2LjYtMTkuOC0yOS42LTE5LjhINTEyVjE2MGgzMmMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC02NC02NHpcIl19LE0yPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInVzZXIteG1hcmtcIixpY29uOls2NDAsNTEyLFtcInVzZXItdGltZXNcIl0sXCJmMjM1XCIsXCJNMzUyIDEyOGMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOHMtMTI4LTU3LjMtMTI4LTEyOFMxNTMuMyAwIDIyNCAwczEyOCA1Ny4zIDEyOCAxMjh6TTAgNDgyLjNDMCAzODMuOCA3OS44IDMwNCAxNzguMyAzMDRoOTEuNEMzNjguMiAzMDQgNDQ4IDM4My44IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNNDcxIDE0M2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw0NyA0NyA0Ny00N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ3IDQ3IDQ3IDQ3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ3LTQ3LTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ3LTQ3LTQ3LTQ3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpcIl19LGM3PU0yLGE3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN0ZXRob3Njb3BlXCIsaWNvbjpbNTc2LDUxMixbMTI5NjU4XSxcImYwZjFcIixcIk0xNDIuNCAyMS45YzUuNiAxNi44LTMuNSAzNC45LTIwLjIgNDAuNUw5NiA3MS4xVjE5MmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2VjcxLjFsLTI2LjEtOC43Yy0xNi44LTUuNi0yNS44LTIzLjctMjAuMi00MC41czIzLjctMjUuOCA0MC41LTIwLjJsMjYuMSA4LjdDMzM0LjQgMTkuMSAzNTIgNDMuNSAzNTIgNzEuMVYxOTJjMCA3Ny4yLTU0LjYgMTQxLjYtMTI3LjMgMTU2LjdDMjMxIDQwNC42IDI3OC40IDQ0OCAzMzYgNDQ4YzYxLjkgMCAxMTItNTAuMSAxMTItMTEyVjI2NS4zYy0yOC4zLTEyLjMtNDgtNDAuNS00OC03My4zYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM1YzMzZjMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZjLTkyLjkgMC0xNjguOS03MS45LTE3NS41LTE2My4xQzg3LjIgMzM0LjIgMzIgMjY5LjYgMzIgMTkyVjcxLjFjMC0yNy41IDE3LjYtNTIgNDMuOC02MC43bDI2LjEtOC43YzE2LjgtNS42IDM0LjkgMy41IDQwLjUgMjAuMnpNNDgwIDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyelwiXX0sdDI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWVzc2FnZVwiLGljb246WzUxMiw1MTIsW1wiY29tbWVudC1hbHRcIl0sXCJmMjdhXCIsXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0aDk2djgwYzAgNi4xIDMuNCAxMS42IDguOCAxNC4zczExLjkgMi4xIDE2LjgtMS41TDMwOS4zIDQxNkg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6XCJdfSxzNz10MixlNz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJpbmZvXCIsaWNvbjpbMTkyLDUxMixbXSxcImYxMjlcIixcIk0xNDQgODBjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4ek0wIDIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0NDhoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINjRWMjU2SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl19LGgyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRvd24tbGVmdC1hbmQtdXAtcmlnaHQtdG8tY2VudGVyXCIsaWNvbjpbNTEyLDUxMixbXCJjb21wcmVzcy1hbHRcIl0sXCJmNDIyXCIsXCJNNDczIDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC04NyA4N0wzMTMgNTVjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMjcyIDYyLjMgMjcyIDcyVjIxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNEg0NDBjOS43IDAgMTguNS01LjggMjIuMi0xNC44czEuNy0xOS4zLTUuMi0yNi4ybC0zOS0zOSA4Ny04N2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOUw0NzMgN3pNMjE2IDI3Mkg3MmMtOS43IDAtMTguNSA1LjgtMjIuMiAxNC44cy0xLjcgMTkuMyA1LjIgMjYuMmwzOSAzOUw3IDQzOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsMzIgMzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsODctODcgMzkgMzljNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMnMxNC44LTEyLjUgMTQuOC0yMi4yVjI5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpcIl19LGY3PWgyLHI3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImV4cGxvc2lvblwiLGljb246WzU3Niw1MTIsW10sXCJlNGU5XCIsXCJNNDk5LjYgMTEuM2M2LjctMTAuNyAyMC41LTE0LjUgMzEuNy04LjVzMTUuOCAxOS41IDEwLjYgMzFMNDA0LjggMzM4LjZjMi4yIDIuMyA0LjMgNC43IDYuMyA3LjFsOTcuMi01NC43YzEwLjUtNS45IDIzLjYtMy4xIDMwLjkgNi40czYuMyAyMy0yLjIgMzEuNWwtODcgODdIMzc4LjVjLTEzLjItMzcuMy00OC43LTY0LTkwLjUtNjRzLTc3LjQgMjYuNy05MC41IDY0SDExNy44TDQyLjMgMzYzLjdjLTkuNy02LjctMTMuMS0xOS42LTcuOS0zMC4zczE3LjQtMTUuOSAyOC43LTEyLjRsOTcuMiAzMC40YzMtMy45IDYuMS03LjcgOS40LTExLjNMMTA3LjQgMjM2LjNjLTYuMS0xMC4xLTMuOS0yMy4xIDUuMS0zMC43czIyLjItNy41IDMxLjEgLjFMMjQ2IDI5My42YzEuNS0uNCAzLS44IDQuNS0xLjFsMTMuNi0xNDIuN2MxLjItMTIuMyAxMS41LTIxLjcgMjMuOS0yMS43czIyLjcgOS40IDIzLjkgMjEuN2wxMy41IDE0MS45TDQ5OS42IDExLjN6TTY0IDQ0OHYwSDUxMnYwaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDY0ek0yODggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl19LGQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsZS1saW5lc1wiLGljb246WzM4NCw1MTIsWzEyODQ0MSwxMjg0NjIsNjE2ODYsXCJmaWxlLWFsdFwiLFwiZmlsZS10ZXh0XCJdLFwiZjE1Y1wiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNMTEyIDI1NkgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0SDI3MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRIMjcyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl19LGw3PWQsaTc9ZCxvNz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ3YXZlLXNxdWFyZVwiLGljb246WzY0MCw1MTIsW10sXCJmODNlXCIsXCJNMTI4IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMySDMyMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0MTZoOTZWMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMySDYwOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg1MTJWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWOTZIMTkyVjI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg5NlY2NHpcIl19LG43PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJpbmdcIixpY29uOls1MTIsNTEyLFtdLFwiZjcwYlwiLFwiTTY0IDIwOGMwIDcuOCA0LjQgMTguNyAxNy4xIDMwLjNDMTI2LjUgMjE0LjEgMTg4LjkgMjAwIDI1NiAyMDBzMTI5LjUgMTQuMSAxNzQuOSAzOC4zQzQ0My42IDIyNi43IDQ0OCAyMTUuOCA0NDggMjA4YzAtMTIuMy0xMC44LTMyLTQ3LjktNTAuNkMzNjQuOSAxMzkuOCAzMTQgMTI4IDI1NiAxMjhzLTEwOC45IDExLjgtMTQ0LjEgMjkuNEM3NC44IDE3NiA2NCAxOTUuNyA2NCAyMDh6bTE5MiA0MGMtNDcgMC04OS4zIDcuNi0xMjIuOSAxOS43QzE2Ni4zIDI4MC4yIDIwOC44IDI4OCAyNTYgMjg4czg5LjctNy44IDEyMi45LTIwLjNDMzQ1LjMgMjU1LjYgMzAzIDI0OCAyNTYgMjQ4ek0wIDIwOGMwLTQ5LjYgMzkuNC04NS44IDgzLjMtMTA3LjhDMTI5LjEgNzcuMyAxOTAuMyA2NCAyNTYgNjRzMTI2LjkgMTMuMyAxNzIuNyAzNi4yYzQzLjkgMjIgODMuMyA1OC4yIDgzLjMgMTA3Ljh2OTZjMCA0OS42LTM5LjQgODUuOC04My4zIDEwNy44QzM4Mi45IDQzNC43IDMyMS43IDQ0OCAyNTYgNDQ4cy0xMjYuOS0xMy4zLTE3Mi43LTM2LjJDMzkuNCAzODkuOCAwIDM1My42IDAgMzA0VjIwOHpcIl19LEg3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJ1aWxkaW5nLXVuXCIsaWNvbjpbMzg0LDUxMixbXSxcImU0ZDlcIixcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoOTZWNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2ODBoOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek0yMzcuMyA3MS4xbDM0LjcgNTJWODBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40bC0zNC43LTUyVjE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY4MGMwLTcuMSA0LjYtMTMuMyAxMS40LTE1LjNzMTQgLjYgMTcuOSA2LjR6TTExMiA4MHY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjgwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2NjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhWODBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl19LHo3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRpY2UtdGhyZWVcIixpY29uOls0NDgsNTEyLFs5ODU4XSxcImY1MjdcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTY0IDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyem0xMjggNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem02NCAxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LEMyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNhbGVuZGFyLWRheXNcIixpY29uOls0NDgsNTEyLFtcImNhbGVuZGFyLWFsdFwiXSxcImYwNzNcIixcIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NEgyODhWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY2NGg0OGMyNi41IDAgNDggMjEuNSA0OCA0OHY0OEgwVjExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NEg5NlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAxOTJINDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTkyem02NCA4MHYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTI4IDB2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNzJjMC04LjgtNy4yLTE2LTE2LTE2SDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIMzM2ek02NCA0MDB2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlY0MDBjMC04LjgtNy4yLTE2LTE2LTE2SDgwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE0NC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWNDAwYzAtOC44LTcuMi0xNi0xNi0xNkgyMDh6bTExMiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjQwMGMwLTguOC03LjItMTYtMTYtMTZIMzM2Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdfSxWNz1DMixtNz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhbmNob3ItY2lyY2xlLWNoZWNrXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0YWFcIixcIk0yNTYgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptODUuMSA4MEMzNjcgMTU4LjggMzg0IDEyOS40IDM4NCA5NmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDMzLjQgMTcgNjIuOCA0Mi45IDgwSDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzMlY0NDhIMjA4Yy01MyAwLTk2LTQzLTk2LTk2di02LjFsNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw5NyAyNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDcgMzE5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNy03VjM1MmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGg4MCA4MGM4LjIgMCAxNi4zLS42IDI0LjItMS44Yy0yMi4yLTE2LjItNDAuNC0zNy41LTUzLTYyLjJIMzIwVjM2OCAyNDBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzQxLjF6TTY0MCAzNjhjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0em0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl19LHY3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJ1aWxkaW5nLWNpcmNsZS1hcnJvdy1yaWdodFwiLGljb246WzY0MCw1MTIsW10sXCJlNGQxXCIsXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjIzMi4yYy0zOS4xIDMyLjMtNjQgODEuMS02NCAxMzUuOGMwIDQ5LjUgMjAuNCA5NC4yIDUzLjMgMTI2LjJDMzY0LjUgNTA1LjEgMzUxLjEgNTEyIDMzNiA1MTJIMjQwVjQzMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHY4MEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDh6TTgwIDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNkg4MHptODAgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2em0xMTItMTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMjcyek02NCAxMTJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDgwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE3NiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkgxNzZ6bTgwIDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkgyNzJjLTguOCAwLTE2IDcuMi0xNiAxNnpNNjQwIDM2OGMwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NHMtMTQ0LTY0LjUtMTQ0LTE0NHM2NC41LTE0NCAxNDQtMTQ0czE0NCA2NC41IDE0NCAxNDR6TTQ5Mi43IDMwMC43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNkw1MjEuNCAzNTJINDMyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDg5LjRsLTI4LjcgMjguN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDU2LTU2YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC01Ni01NmMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDB6XCJdfSxMMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2b2xsZXliYWxsXCIsaWNvbjpbNTEyLDUxMixbMTI3OTUyLFwidm9sbGV5YmFsbC1iYWxsXCJdLFwiZjQ1ZlwiLFwiTTUxMS44IDI2Ny40Yy0yNi4xIDguNy01My40IDEzLjgtODEgMTUuMWM5LjItMTA1LjMtMzEuNS0yMDQuMi0xMDMuMi0yNzIuNEM0MzQuMSA0MS4xIDUxMiAxMzkuNSA1MTIgMjU2YzAgMy44LS4xIDcuNi0uMiAxMS40em0tMy45IDM0LjdjLTUuOCAzMi0xNy42IDYyLTM0LjIgODguN2MtOTcuNSA0OC41LTIxNy43IDQyLjYtMzExLjktMjQuNWMyMy43LTM2LjIgNTUuNC02Ny43IDk0LjUtOTEuOGM3OS45IDQzLjIgMTcwLjEgNTAuOCAyNTEuNiAyNy42em0tMjM2LTU1LjVjLTIuNS05MC45LTQxLjEtMTcyLjctMTAxLjktMjMxLjdDMTk2LjggNS4yIDIyNS44IDAgMjU2IDBjMi43IDAgNS4zIDAgNy45IC4xYzkwLjggNjAuMiAxNDUuNyAxNjcuMiAxMzQuNyAyODIuM2MtNDMuMS0yLjQtODYuNC0xNC4xLTEyNi44LTM1Ljl6TTEzOCAyOC44YzIwLjYgMTguMyAzOC43IDM5LjQgNTMuNyA2Mi42Qzk1LjkgMTM2LjEgMzAuNiAyMjAuOCA3LjMgMzE2LjlDMi41IDI5Ny40IDAgMjc3IDAgMjU2QzAgMTU3LjIgNTYgNzEuNSAxMzggMjguOHptNjkuNiA5MC41YzE5LjUgMzguNiAzMSA4MS45IDMyLjMgMTI3LjdDMTYyLjUgMjk0LjYgMTEwLjkgMzY4LjkgOTAuMiA0NTFDNjYgNDMwLjQgNDUuNiA0MDUuNCAzMC40IDM3Ny4yYzYuNy0xMDguNyA3MS45LTIwOS45IDE3Ny4xLTI1Ny45ek0yNTYgNTEyYy01MC43IDAtOTgtMTQuNy0xMzcuOC00MC4yYzUuNi0yNyAxNC44LTUzLjEgMjcuNC03Ny43QzIzMi4yIDQ1NC42IDMzOC4xIDQ2OC44IDQzMyA0NDFjLTQ2IDQ0LTEwOC4zIDcxLTE3NyA3MXpcIl19LE03PUwyLHQ3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93cy11cC10by1saW5lXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0YzJcIixcIk02NCA5Nmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw2NCAzMkM0Ni4zIDMyIDMyIDQ2LjMgMzIgNjRzMTQuMyAzMiAzMiAzMnpNNDEuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxMjggMjM3LjMgMTI4IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjEwLjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZ6bTMyMCA0NS4zYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwTDQ0OCAyMzcuMyA0NDggNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yMTAuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjN6XCJdfSxwMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzb3J0LWRvd25cIixpY29uOlszMjAsNTEyLFtcInNvcnQtZGVzY1wiXSxcImYwZGRcIixcIk0xODIuNiA0NzAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTEyOC0xMjhjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45czE2LjYtMTkuOCAyOS42LTE5LjhIMjg4YzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlsLTEyOCAxMjh6XCJdfSxoNz1wMixkMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtbWludXNcIixpY29uOls1MTIsNTEyLFtcIm1pbnVzLWNpcmNsZVwiXSxcImYwNTZcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0xODQgMjMySDMyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgxODRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6XCJdfSxDNz1kMixMNz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkb29yLW9wZW5cIixpY29uOls1NzYsNTEyLFtdLFwiZjUyYlwiLFwiTTMyMCAzMmMwLTkuOS00LjUtMTkuMi0xMi4zLTI1LjJTMjg5LjgtMS40IDI4MC4yIDFsLTE3OS45IDQ1Qzc5IDUxLjMgNjQgNzAuNSA2NCA5Mi41VjQ0OEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg5NiAyODhoMzJWNDgwIDMyek0yNTYgMjU2YzAgMTcuNy0xMC43IDMyLTI0IDMycy0yNC0xNC4zLTI0LTMyczEwLjctMzIgMjQtMzJzMjQgMTQuMyAyNCAzMnptOTYtMTI4aDk2VjQ4MHYzMmgzMiA2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg1MTJWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDM1MnY2NHpcIl19LHUyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJpZ2h0LWZyb20tYnJhY2tldFwiLGljb246WzUxMiw1MTIsW1wic2lnbi1vdXQtYWx0XCJdLFwiZjJmNVwiLFwiTTE2MCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg5NkM0MyAzMiAwIDc1IDAgMTI4VjM4NGMwIDUzIDQzIDk2IDk2IDk2aDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NHpNNTA0LjUgMjczLjRjNC44LTQuNSA3LjUtMTAuOCA3LjUtMTcuNHMtMi43LTEyLjktNy41LTE3LjRsLTE0NC0xMzZjLTctNi42LTE3LjItOC40LTI2LTQuNnMtMTQuNSAxMi41LTE0LjUgMjJ2NzJIMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDMyMHY3MmMwIDkuNiA1LjcgMTguMiAxNC41IDIyczE5IDIgMjYtNC42bDE0NC0xMzZ6XCJdfSxwNz11MixkNz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhdG9tXCIsaWNvbjpbNDQ4LDUxMixbOTg4M10sXCJmNWQyXCIsXCJNMjU4LjkgNDEyLjNjLTE2LjcgMzMuOC0zMSAzNS43LTM0LjkgMzUuN3MtMTguMS0xLjktMzQuOS0zNS43YzExLjQtMy45IDIzLjEtOC40IDM0LjktMTMuNWMxMS44IDUuMSAyMy40IDkuNyAzNC45IDEzLjV6TTI1Mi44IDMxMmMtOS43IDUuOC0xOS4zIDExLjItMjguOCAxNmMtOS40LTQuOC0xOS0xMC4yLTI4LjgtMTZjLTEyLjEtNy4zLTIzLjYtMTQuOC0zNC4yLTIyLjRjLS43LTEwLjgtMS0yMi0xLTMzLjZzLjQtMjIuNyAxLTMzLjZjMTAuNi03LjYgMjIuMS0xNS4xIDM0LjItMjIuNGM5LjctNS44IDE5LjMtMTEuMiAyOC44LTE2YzkuNCA0LjggMTkgMTAuMiAyOC44IDE2YzEyLjEgNy4zIDIzLjYgMTQuOCAzNC4yIDIyLjRjLjcgMTAuOCAxIDIyIDEgMzMuNnMtLjQgMjIuNy0xIDMzLjZjLTEwLjYgNy42LTIyLjEgMTUuMS0zNC4yIDIyLjR6bTE4NC44IDcyYzIwLjctMzcuMSA5LjQtODIuOC0yMy42LTEyOGMzMy00NS4yIDQ0LjMtOTAuOSAyMy42LTEyOGMtMjAuMi0zNi4zLTYyLjUtNDkuMy0xMTUuMi00My4yQzMwMC40IDMyLjcgMjY2LjggMCAyMjQgMHMtNzYuNCAzMi43LTk4LjQgODQuOGMtNTIuNy02LjEtOTUgNi44LTExNS4yIDQzLjJDLTEwLjMgMTY1LjEgMSAyMTAuOCAzNCAyNTZDMSAzMDEuMi0xMC4zIDM0Ni45IDEwLjQgMzg0YzIwLjIgMzYuMyA2Mi41IDQ5LjMgMTE1LjIgNDMuMmMyMiA1Mi4xIDU1LjcgODQuOCA5OC40IDg0LjhzNzYuNC0zMi43IDk4LjQtODQuOGM1Mi43IDYuMSA5NS02LjggMTE1LjItNDMuMnptLTY3LjgtNzkuMmMxOC45IDMwLjIgMTQuMiA0NCAxMS45IDQ4LjFjLTEuNiAyLjktOC40IDEzLTQwLjIgMTEuN2MyLjgtMTMuMSA1LTI2LjkgNi43LTQxLjJjNy42LTYuMSAxNC44LTEyLjMgMjEuNi0xOC42em0xMS45LTE0NS43YzIuMyA0LjIgNyAxNy45LTExLjkgNDguMWMtNi44LTYuMy0xNC0xMi41LTIxLjYtMTguNmMtMS43LTE0LjMtMy45LTI4LTYuNy00MS4yYzMxLjgtMS40IDM4LjYgOC43IDQwLjIgMTEuN3pNMjI0IDY0YzMuOSAwIDE4LjEgMS45IDM0LjkgMzUuN2MtMTEuNCAzLjktMjMuMSA4LjQtMzQuOSAxMy41Yy0xMS44LTUuMS0yMy40LTkuNy0zNC45LTEzLjVDMjA1LjkgNjUuOSAyMjAuMSA2NCAyMjQgNjR6TTEwNi41IDE0Ny41Yy0yLjggMTMuMS01IDI2LjktNi43IDQxLjJjLTcuNiA2LjEtMTQuOCAxMi4zLTIxLjYgMTguNkM1OS40IDE3NyA2NCAxNjMuMyA2Ni4zIDE1OS4xYzEuNi0yLjkgOC40LTEzIDQwLjItMTEuN3pNNjYuMyAzNTIuOWMtMi4zLTQuMi03LTE3LjkgMTEuOS00OC4xYzYuOCA2LjMgMTQgMTIuNSAyMS42IDE4LjZjMS43IDE0LjIgMy45IDI4IDYuNyA0MS4yYy0zMS44IDEuNC0zOC42LTguNy00MC4yLTExLjd6TTIyNCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl19LHU3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNvYXBcIixpY29uOls1MTIsNTEyLFsxMjk1MzJdLFwiZTA2ZVwiLFwiTTIwOCA5NmMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4ek0zMjAgMjU2YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjR6TTQxNiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6bTAgMTYwYzAgMjcuNi0xMS43IDUyLjUtMzAuNCA3MC4xQzQyMi4xIDI3NS43IDQ0OCAzMTAuOCA0NDggMzUyYzAgNTMtNDMgOTYtOTYgOTZIMTYwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2aDg4LjRjLTE1LjItMTctMjQuNC0zOS40LTI0LjQtNjRIOTZjLTUzIDAtOTYgNDMtOTYgOTZWNDE2YzAgNTMgNDMgOTYgOTYgOTZINDE2YzUzIDAgOTYtNDMgOTYtOTZWMjg4YzAtNTMtNDMtOTYtOTYtOTZ6TTE2MCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRIMzUyYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0SDMyMCAxNjB6XCJdfSx4Mj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJpY29uc1wiLGljb246WzU3Niw1MTIsW1wiaGVhcnQtbXVzaWMtY2FtZXJhLWJvbHRcIl0sXCJmODZkXCIsXCJNNTMyLjMgNy4zQzUzOS43IDEzLjMgNTQ0IDIyLjQgNTQ0IDMyVjE3NmMwIDI2LjUtMjguNyA0OC02NCA0OHMtNjQtMjEuNS02NC00OHMyOC43LTQ4IDY0LTQ4VjcxTDM4NCA5MC4yVjIwOGMwIDI2LjUtMjguNyA0OC02NCA0OHMtNjQtMjEuNS02NC00OHMyOC43LTQ4IDY0LTQ4VjY0YzAtMTUuMyAxMC44LTI4LjQgMjUuNy0zMS40bDE2MC0zMmM5LjQtMS45IDE5LjEgLjYgMjYuNiA2LjZ6TTEwNi43IDMwNGwxMS44LTE3LjhjNS45LTguOSAxNS45LTE0LjIgMjYuNi0xNC4yaDYxLjdjMTAuNyAwIDIwLjcgNS4zIDI2LjYgMTQuMkwyNDUuMyAzMDRIMjcyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzUyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDI2Ljd6TTIyNCA0MDhjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4ek01MTAuNyAyNzguM0w0NzIuMyAzNjhINTI4YzYuNyAwIDEyLjYgNC4xIDE1IDEwLjRzLjYgMTMuMy00LjQgMTcuN2wtMTI4IDExMmMtNS42IDQuOS0xMy45IDUuMy0xOS45IC45cy04LjItMTIuNC01LjMtMTkuMkw0MjMuNyA0MDBIMzY4Yy02LjcgMC0xMi42LTQuMS0xNS0xMC40cy0uNi0xMy4zIDQuNC0xNy43bDEyOC0xMTJjNS42LTQuOSAxMy45LTUuMyAxOS45LS45czguMiAxMi40IDUuMyAxOS4yem0tMzM5LTU5LjJjLTYuNSA2LjUtMTcgNi41LTIzIDBMNTEuOSAxMTkuMmMtMjgtMjktMjYuNS03Ni45IDUtMTAzLjljMjctMjMuNSA2OC40LTE5IDkzLjQgNi41bDEwIDEwLjUgOS41LTEwLjVjMjUtMjUuNSA2NS45LTMwIDkzLjktNi41YzMxIDI3IDMyLjUgNzQuOSA0LjUgMTAzLjlsLTk2LjQgOTkuOXpcIl19LHg3PXgyLGcyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1pY3JvcGhvbmUtbGluZXMtc2xhc2hcIixpY29uOls2NDAsNTEyLFtcIm1pY3JvcGhvbmUtYWx0LXNsYXNoXCJdLFwiZjUzOVwiLFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNDcyLjEgMzQ0LjdjMTUuMi0yNiAyMy45LTU2LjMgMjMuOS04OC43VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHYyNCAxNmMwIDIxLjItNS4xIDQxLjEtMTQuMiA1OC43TDQxNiAzMDAuOFYyNTZIMzU4LjlsLTM0LjUtMjdjMi45LTMuMSA3LTUgMTEuNi01aDgwVjE5MkgzMzZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoODBWMTI4SDMzNmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg4MGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnY1NC4zTDM4LjggNS4xem0zNjIuNSA0MDdsLTQzLjEtMzMuOUMzNDYuMSAzODIgMzMzLjMgMzg0IDMyMCAzODRjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4di04LjdMMTQ0LjcgMjEwYy0uNSAxLjktLjcgMy45LS43IDZ2NDBjMCA4OS4xIDY2LjIgMTYyLjcgMTUyIDE3NC40VjQ2NEgyNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNzIgNzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzQ0VjQzMC40YzIwLjQtMi44IDM5LjctOS4xIDU3LjMtMTguMnpcIl19LGc3PWcyLFM3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJyaWRnZS1jaXJjbGUtY2hlY2tcIixpY29uOls2NDAsNTEyLFtdLFwiZTRjOVwiLFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NHMxNC4zIDMyIDMyIDMyaDQwdjY0SDMyVjI4OGM1MyAwIDk2IDQzIDk2IDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTUzIDQzLTk2IDk2LTk2YzYuMyAwIDEyLjQgLjYgMTguMyAxLjdDMzY3LjEgMjMxLjggNDI2LjkgMTkyIDQ5NiAxOTJjNDIuNSAwIDgxLjYgMTUuMSAxMTIgNDAuMlYxNjBINTM2Vjk2aDQwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDY0ek00ODggOTZ2NjRINDA4Vjk2aDgwek0zNjAgOTZ2NjRIMjgwVjk2aDgwek0yMzIgOTZ2NjRIMTUyVjk2aDgwek02NDAgMzY4YzAtNzkuNS02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NHptLTc2LjctNDMuM2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ4MCAzODUuNGw2MC43LTYwLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6XCJdfSxONz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwdW1wLW1lZGljYWxcIixpY29uOls0NDgsNTEyLFtdLFwiZTA2YVwiLFwiTTEyOCAzMnY5NkgyNTZWOTZoNjAuMWM0LjIgMCA4LjMgMS43IDExLjMgNC43bDMzLjkgMzMuOWMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDM3Mi43IDU1LjRjLTE1LTE1LTM1LjQtMjMuNC01Ni42LTIzLjRIMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMySDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTExNy40IDE2MGMtMzMuMyAwLTYxIDI1LjUtNjMuOCA1OC43TDM1IDQ0Mi43QzMxLjkgNDgwIDYxLjMgNTEyIDk4LjggNTEySDI4NS4yYzM3LjQgMCA2Ni45LTMyIDYzLjgtNjkuM2wtMTguNy0yMjRjLTIuOC0zMy4yLTMwLjUtNTguNy02My44LTU4LjdIMTE3LjR6TTIxNiAyODB2MzJoMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjE2djMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjM2MEgxMzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoMzJWMjgwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6XCJdfSx3Nz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaW5nZXJwcmludFwiLGljb246WzUxMiw1MTIsW10sXCJmNTc3XCIsXCJNNDggMjU2QzQ4IDE0MS4xIDE0MS4xIDQ4IDI1NiA0OGM2OS4zIDAgMTMwLjYgMzMuOCAxNjguNSA4NmM3LjggMTAuNyAyMi44IDEzLjEgMzMuNSA1LjNzMTMuMS0yMi44IDUuMy0zMy41QzQxNi44IDQxLjcgMzQxLjMgMCAyNTYgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTZ2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0di04em00NTguNS01Mi45Yy0yLjctMTMtMTUuNS0yMS4zLTI4LjQtMTguNXMtMjEuMyAxNS41LTE4LjUgMjguNGMyLjkgMTMuOSA0LjUgMjguMyA0LjUgNDMuMXY4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR2LThjMC0xOC4xLTEuOS0zNS44LTUuNS01Mi45ek0yMjIuMSAxMjguMmMxMC44LTIuOSAyMi4xLTQuNCAzMy45LTQuNGM3MyAwIDEzMi4yIDU5LjIgMTMyLjIgMTMyLjJjMCAzMS4xLTEuOSA2Mi40LTMuOSA4NmMtMSAxMS44LTIgMjEuNi0yLjcgMjguNGMtLjQgMy40LS43IDYuMS0uOSA3LjlsLS4yIDItLjEgLjUgMCAuMSAwIDAgMCAwYy0xLjYgMTMuMiA3LjcgMjUuMSAyMC44IDI2LjhzMjUuMS03LjcgMjYuOC0yMC44bC0yMy44LTNjMjMuOCAzIDIzLjggMyAyMy44IDNsMCAwIDAgMCAwIDAgMC0uMiAuMS0uNiAuMy0yLjJjLjItMS45IC41LTQuOCAuOS04LjNjLjgtNy4yIDEuOC0xNy40IDIuOC0yOS42YzItMjQuNCA0LjEtNTcuMSA0LjEtOTBjMC05OS41LTgwLjctMTgwLjItMTgwLjItMTgwLjJjLTE1LjkgMC0zMS40IDIuMS00Ni4yIDZjLTEyLjggMy40LTIwLjUgMTYuNS0xNy4xIDI5LjNzMTYuNSAyMC41IDI5LjMgMTcuMXptLTc0LjUgNTIuMWM3LjYtMTAuOSA1LTI1LjgtNS45LTMzLjRzLTI1LjgtNS0zMy40IDUuOUM4Ny45IDE4MiA3NS44IDIxNy42IDc1LjggMjU2YzAgMzAuMS0zLjggNTguNi03LjYgNzkuN2MtMS45IDEwLjUtMy44IDE5LjEtNS4yIDI0LjljLS43IDIuOS0xLjMgNS4yLTEuNyA2LjdjLS4yIC43LS4zIDEuMy0uNCAxLjZsLS4xIC40IDAgLjEgMCAwYy0zLjYgMTIuNyAzLjcgMjYgMTYuNSAyOS43czI2LTMuNyAyOS43LTE2LjVMODMuOCAzNzZjMjMuMSA2LjYgMjMuMSA2LjYgMjMuMSA2LjZsMCAwIDAgMCAwLS4xIDAtLjIgLjItLjZjLjEtLjUgLjMtMS4yIC42LTIuMWMuNS0xLjggMS4yLTQuNCAxLjktNy43YzEuNi02LjYgMy43LTE2LjEgNS44LTI3LjZjNC4yLTIyLjkgOC40LTU0LjQgOC40LTg4LjNjMC0yOC4yIDguOC01NC4zIDIzLjgtNzUuN3pNMjU2IDIwMGMzMC45IDAgNTYgMjUuMSA1NiA1NmMwIDQ3LjEtMi43IDg2LjMtNS41IDExMy42Yy0xLjQgMTMuNy0yLjcgMjQuMy0zLjcgMzEuNmMtLjUgMy42LS45IDYuMy0xLjIgOC4xYy0uMSAuOS0uMiAxLjYtLjMgMmwtLjEgLjUgMCAuMSAwIDAgMCAwIDAgMGMtMi4zIDEzLjEgNi41IDI1LjUgMTkuNSAyNy44czI1LjUtNi40IDI3LjgtMTkuNUwzMjQuOCA0MTZjMjMuNiA0LjEgMjMuNiA0LjEgMjMuNiA0LjFsMCAwIDAgMCAwLS4xIDAtLjIgLjEtLjdjLjEtLjYgLjItMS40IC40LTIuNGMuMy0yLjEgLjgtNS4xIDEuMy05YzEuMS03LjggMi41LTE5LjEgNC0zMy40YzIuOS0yOC43IDUuNy02OS41IDUuNy0xMTguNGMwLTU3LjQtNDYuNi0xMDQtMTA0LTEwNHMtMTA0IDQ2LjYtMTA0IDEwNGMwIDQ2LjctMy45IDgzLjQtNy43IDEwOC40Yy0xLjkgMTIuNS0zLjggMjEuOS01LjIgMjguMmMtLjcgMy4xLTEuMyA1LjUtMS42IDYuOWMtLjIgLjctLjMgMS4zLS40IDEuNmwtLjEgLjNjLTMuNiAxMi43IDMuNyAyNiAxNi41IDI5LjdzMjYtMy43IDI5LjctMTYuNUwxNjAgNDA4YzIzLjEgNi42IDIzLjEgNi42IDIzLjEgNi42bDAgMCAwIDAgMC0uMSAuMS0uMiAuMi0uN2MuMS0uNSAuMy0xLjMgLjYtMi4zYy41LTIgMS4yLTQuOCAyLTguNGMxLjYtNy4yIDMuNy0xNy44IDUuOC0zMS4zYzMtMTkuMiA1LjktNDQuNiA3LjMtNzUuM2MuNi0xMi42IC45LTI2IC45LTQwLjNjMC0zMC45IDI1LjEtNTYgNTYtNTZ6bTI0IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNDUuNC0yLjYgODMuNC02LjMgMTE0LjVMMjAyIDQ3OC4zbDAgMGMtNS4zIDEyLjEgLjEgMjYuMiAxMi4yIDMxLjZjMTIuMSA1LjQgMjYuMy0uMSAzMS43LTEyLjJMMjI0IDQ4OGMyMS45IDkuNyAyMS45IDkuNyAyMS45IDkuN2wwIDAgMCAwIDAtLjEgLjEtLjMgLjQtLjljLjMtLjggLjctMS44IDEuMi0zLjFjMS0yLjcgMi40LTYuNSA0LTExLjVjMy4zLTEwLjEgNy41LTI0LjkgMTEuNy00NC43QzI3MS44IDM5Ny4zIDI4MCAzMzcuNiAyODAgMjU2ek0yMjUuNyAzNzAuNXMwIDAgMCAwTDI1NiAyMzIgMjI1LjcgMzcwLjV6bTAgMGMtMi43IDIyLjUtNS45IDQxLjMtOS4yIDU2LjZjLTMuOCAxOC4yLTcuNiAzMS4zLTEwLjMgMzkuOGMtMS40IDQuMi0yLjUgNy4zLTMuMiA5LjJjLS40IC45LS42IDEuNi0uOCAybC0uMSAuNCAyMy42LTEwNy45elwiXX0sazc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZC1wb2ludC1yaWdodFwiLGljb246WzUxMiw1MTIsW10sXCJmMGE0XCIsXCJNNDgwIDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMDggMCAwLTY0IDIwOCAwek0zMjAgMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg2NHptNjQtNjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzA0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMyek0yODggMzg0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg2NHptLTg4LTk2bC42IDBjLTUuNCA5LjQtOC42IDIwLjMtOC42IDMyYzAgMTMuMiA0IDI1LjQgMTAuOCAzNS42QzE3Ny45IDM2NC4zIDE2MCAzODguMSAxNjAgNDE2YzAgMTEuNyAzLjEgMjIuNiA4LjYgMzJIMTYwQzcxLjYgNDQ4IDAgMzc2LjQgMCAyODhsMC02MS43YzAtNDIuNCAxNi45LTgzLjEgNDYuOS0xMTMuMWwxMS42LTExLjZDODIuNSA3Ny41IDExNS4xIDY0IDE0OSA2NGwyNyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0djg4YzAgMjIuMS0xNy45IDQwLTQwIDQwcy00MC0xNy45LTQwLTQwVjE2MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY1NmMwIDM5LjggMzIuMiA3MiA3MiA3MnpcIl19LFMyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1hZ25pZnlpbmctZ2xhc3MtbG9jYXRpb25cIixpY29uOls1MTIsNTEyLFtcInNlYXJjaC1sb2NhdGlvblwiXSxcImY2ODlcIixcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4ek0yODggMTc2YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgNDguOCA0Ni41IDExMS42IDY4LjYgMTM4LjZjNiA3LjMgMTYuOCA3LjMgMjIuNyAwYzIyLjEtMjcgNjguNi04OS44IDY4LjYtMTM4LjZ6bS00OCAwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpcIl19LGI3PVMyLE4yPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZvcndhcmQtc3RlcFwiLGljb246WzMyMCw1MTIsW1wic3RlcC1mb3J3YXJkXCJdLFwiZjA1MVwiLFwiTTUyLjUgNDQwLjZjLTkuNSA3LjktMjIuOCA5LjctMzQuMSA0LjRTMCA0MjguNCAwIDQxNlY5NkMwIDgzLjYgNy4yIDcyLjMgMTguNCA2N3MyNC41LTMuNiAzNC4xIDQuNGwxOTIgMTYwTDI1NiAyNDFWOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjcxbC0xMS41IDkuNi0xOTIgMTYwelwiXX0sQTc9TjIsdzI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1zbWlsZS1iZWFtXCIsaWNvbjpbNTEyLDUxMixbMTI4NTIyLFwic21pbGUtYmVhbVwiXSxcImY1YjhcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0xNjQuMSAzMjUuNUMxODIgMzQ2LjIgMjEyLjYgMzY4IDI1NiAzNjhzNzQtMjEuOCA5MS45LTQyLjVjNS44LTYuNyAxNS45LTcuNCAyMi42LTEuNnM3LjQgMTUuOSAxLjYgMjIuNkMzNDkuOCAzNzIuMSAzMTEuMSA0MDAgMjU2IDQwMHMtOTMuOC0yNy45LTExNi4xLTUzLjVjLTUuOC02LjctNS4xLTE2LjggMS42LTIyLjZzMTYuOC01LjEgMjIuNiAxLjZ6bTUzLjUtOTYuN2wwIDAgMCAwLS4yLS4yYy0uMi0uMi0uNC0uNS0uNy0uOWMtLjYtLjgtMS42LTItMi44LTMuNGMtMi41LTIuOC02LTYuNi0xMC4yLTEwLjNjLTguOC03LjgtMTguOC0xNC0yNy43LTE0cy0xOC45IDYuMi0yNy43IDE0Yy00LjIgMy43LTcuNyA3LjUtMTAuMiAxMC4zYy0xLjIgMS40LTIuMiAyLjYtMi44IDMuNGMtLjMgLjQtLjYgLjctLjcgLjlsLS4yIC4yIDAgMCAwIDAgMCAwYy0yLjEgMi44LTUuNyAzLjktOC45IDIuOHMtNS41LTQuMS01LjUtNy42YzAtMTcuOSA2LjctMzUuNiAxNi42LTQ4LjhjOS44LTEzIDIzLjktMjMuMiAzOS40LTIzLjJzMjkuNiAxMC4yIDM5LjQgMjMuMmM5LjkgMTMuMiAxNi42IDMwLjkgMTYuNiA0OC44YzAgMy40LTIuMiA2LjUtNS41IDcuNnMtNi45IDAtOC45LTIuOGwwIDAgMCAwem0xNjAgMGwwIDAtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjIgMCAwIDAgMCAwIDBjLTIuMSAyLjgtNS43IDMuOS04LjkgMi44cy01LjUtNC4xLTUuNS03LjZjMC0xNy45IDYuNy0zNS42IDE2LjYtNDguOGM5LjgtMTMgMjMuOS0yMy4yIDM5LjQtMjMuMnMyOS42IDEwLjIgMzkuNCAyMy4yYzkuOSAxMy4yIDE2LjYgMzAuOSAxNi42IDQ4LjhjMCAzLjQtMi4yIDYuNS01LjUgNy42cy02LjkgMC04LjktMi44bDAgMCAwIDAgMCAwelwiXX0sQjc9dzIsVDc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmxhZy1jaGVja2VyZWRcIixpY29uOls1MTIsNTEyLFsxMjc5MzddLFwiZjExZVwiLFwiTTMyIDBDNDYuMyAwIDU4LjQgOS40IDYyLjUgMjIuM2wuMSAwLS4xIC4xIC4xIC4zIDAtLjRDODkuOCAxMS41IDEyOC4xIDAgMTY4IDBjMzguOCAwIDc0LjYgOS4xIDEwNS43IDE3QzMwNiAyNS4yIDMzMi45IDMyIDM2MCAzMmMyNi44IDAgNTIuOS02LjggNzMtMTQuMWM5LjktMy42IDE3LjktNy4yIDIzLjQtOS44YzIuNy0xLjMgNC44LTIuNCA2LjItMy4xYy43LS40IDEuMS0uNiAxLjQtLjhsLjItLjFjOS45LTUuNiAyMi4xLTUuNiAzMS45IC4yUzUxMiAyMC42IDUxMiAzMlYzMjBjMCAxMi4xLTYuOCAyMy4yLTE3LjcgMjguNkw0ODAgMzIwYzE0LjMgMjguNiAxNC4zIDI4LjYgMTQuMyAyOC42bDAgMCAwIDAtLjEgMC0uMiAuMS0uNyAuNGMtLjYgLjMtMS41IC43LTIuNSAxLjJjLTIuMiAxLTUuMiAyLjQtOSA0Yy03LjcgMy4zLTE4LjUgNy42LTMxLjUgMTEuOUM0MjQuNSAzNzQuOSAzODguOCAzODQgMzUyIDM4NGMtMzcgMC02NS4yLTkuNC04OS0xNy4zbC0xLS4zYy0yNC04LTQzLjctMTQuNC03MC0xNC40Yy0yNy45IDAtNjQuNyA3LjItOTYuMiAxNWMtMTIuMSAzLTIzIDYtMzEuOCA4LjZWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MiA3MiAzMkMwIDE0LjMgMTQuMyAwIDMyIDB6TTY0IDE1OC40YzE3LjUtNC45IDQwLjQtMTAuNyA2NC0xNS4yVjY4LjhjLTE1IDMuMy0yOS4zIDguMS00MiAxM2MtOC41IDMuNC0xNiA2LjctMjIgOS42djY3em0wIDgwdjcwLjhjNS4xLTEuNCAxMC42LTIuOCAxNi4yLTQuMmMxNC4zLTMuNiAzMC44LTcuMyA0Ny44LTEwLjRWMjIzLjFjMjEuOS00LjIgNDQuNC03LjEgNjQtNy4xYzUuNiAwIDEwLjkgLjIgMTYgLjd2NzEuOWMyOS41IDIuMiA1MyAxMCA3My4zIDE2LjhsLjkgLjNjMiAuNyAzLjkgMS4zIDUuOCAxLjl2LTY5LTEuNGMxOSA1LjkgMzkuMSAxMC44IDY0IDEwLjhjNS4zIDAgMTAuNy0uMiAxNi0uNnY3MS45YzIyLTIgNDMuOS03LjYgNjEuOS0xMy42YzYuOC0yLjMgMTIuOS00LjYgMTguMS02LjZWMjI5LjJjLTIwLjkgNy41LTQ5LjkgMTUuOC04MCAxOC4xdi04MGMzMC4xLTIuMyA1OS4xLTEwLjYgODAtMTguMVY4MC41Yy0yMS42IDcuMy00OS41IDE0LjMtODAgMTUuNHY3MS41Yy01LjMgLjQtMTAuNyAuNi0xNiAuNmMtMjQuOSAwLTQ1LTQuOS02NC0xMC44Vjg2LjVjLTkuMy0yLjEtMTguMy00LjQtMjctNi43bC0zLjEtLjhjLTE3LjQtNC40LTMzLjgtOC41LTQ5LjktMTEuM3Y2OWMtNS4xLS40LTEwLjQtLjctMTYtLjdjLTE5LjYgMC00Mi4xIDMtNjQgNy4xdjgwYy0yMy42IDQuNS00Ni41IDEwLjMtNjQgMTUuMnpNMjA4IDEzNi43djgwYzI0LjQgMi4xIDQ0LjMgOC43IDY0LjIgMTUuM2wwIDBjNS4yIDEuNyAxMC41IDMuNSAxNS44IDUuMnYtODBjLTUuMy0xLjctMTAuNi0zLjQtMTUuOC01LjJsMCAwYy0xOS45LTYuNi0zOS44LTEzLjItNjQuMi0xNS4zelwiXX0sazI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZm9vdGJhbGxcIixpY29uOls1MTIsNTEyLFsxMjc5NDQsXCJmb290YmFsbC1iYWxsXCJdLFwiZjQ0ZVwiLFwiTTI0Ny41IDI1LjRjLTEzLjUgMy4zLTI2LjQgNy4yLTM4LjYgMTEuN0MxNDIuOSA2MS42IDk2LjcgMTAzLjYgNjYgMTUzLjZjLTE4LjMgMjkuOC0zMC45IDYyLjMtMzkuMiA5NS40TDI2NC41IDQ4Ni42YzEzLjUtMy4zIDI2LjQtNy4yIDM4LjYtMTEuN2M2Ni0yNC41IDExMi4yLTY2LjUgMTQyLjktMTE2LjVjMTguMy0yOS44IDMwLjktNjIuMyAzOS4xLTk1LjNMMjQ3LjUgMjUuNHpNNDk1LjIgMjA1LjNjNi4xLTU2LjggMS40LTExMi4yLTcuNy0xNTYuNGMtMi43LTEyLjktMTMtMjIuOS0yNi4xLTI1LjFjLTU4LjItOS43LTEwOS45LTEyLTE1NS42LTcuOUw0OTUuMiAyMDUuM3pNMjA2LjEgNDk2TDE2LjggMzA2LjdjLTYuMSA1Ni44LTEuNCAxMTIuMiA3LjcgMTU2LjRjMi43IDEyLjkgMTMgMjIuOSAyNi4xIDI1LjFjNTguMiA5LjcgMTA5LjkgMTIgMTU1LjYgNy45em01NC42LTMzMS4zYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDY0IDY0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnptLTQ4IDQ4YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDY0IDY0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnptLTQ4IDQ4YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDY0IDY0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnpcIl19LHk3PWsyLFA3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNjaG9vbC1jaXJjbGUtZXhjbGFtYXRpb25cIixpY29uOls2NDAsNTEyLFtdLFwiZTU2Y1wiLFwiTTMzNy44IDUuNEMzMjctMS44IDMxMy0xLjggMzAyLjIgNS40bC0xMzkgOTIuN0wzNy42IDEyNkMxNS42IDEzMC45IDAgMTUwLjMgMCAxNzIuOFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhIMzIwdjBIMjU2VjQxNmMwLTM1LjMgMjguNy02NCA2NC02NGwuMyAwaC41YzMuNC0zNy43IDE4LjctNzIuMSA0Mi4yLTk5LjFDMzUwLjIgMjYwIDMzNS42IDI2NCAzMjAgMjY0Yy00OC42IDAtODgtMzkuNC04OC04OHMzOS40LTg4IDg4LTg4czg4IDM5LjQgODggODhjMCAxOC4zLTUuNiAzNS4zLTE1LjEgNDkuNGMyOS0yMSA2NC42LTMzLjQgMTAzLjEtMzMuNGM1OS41IDAgMTEyLjEgMjkuNiAxNDQgNzQuOFYxNzIuOGMwLTIyLjUtMTUuNi00Mi0zNy42LTQ2LjlMNDc2LjggOTguMSAzMzcuOCA1LjR6TTk2IDE5MmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMjA4YzAtOC44IDcuMi0xNiAxNi0xNnptMCAxMjhoMzJjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkg5NmMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6TTMyMCAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzM2VjE0NGMwLTguOC03LjItMTYtMTYtMTZ6TTQ5NiA1MTJjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRzLTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHptMC00OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0em0wLTE5MmM4LjggMCAxNiA3LjIgMTYgMTZ2ODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjg4YzAtOC44IDcuMi0xNiAxNi0xNnpcIl19LEY3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNyb3BcIixpY29uOls1MTIsNTEyLFtdLFwiZjEyNVwiLFwiTTQ0OCAxMDkuM2w1NC42LTU0LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMNDAyLjcgNjQgMTYwIDY0djY0bDE3OC43IDBMMTI4IDMzOC43VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDE0LjMgNjQgMzJWNjRIMzJDMTQuMyA2NCAwIDc4LjMgMCA5NnMxNC4zIDMyIDMyIDMySDY0VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzNTJWMzg0SDE3My4zTDM4NCAxNzMuMyAzODQgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDQ4aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ0OGwwLTI3NC43elwiXX0sYjI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYW5nbGVzLWRvd25cIixpY29uOls0NDgsNTEyLFtcImFuZ2xlLWRvdWJsZS1kb3duXCJdLFwiZjEwM1wiLFwiTTI0Ni42IDQ3MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwyMjQgNDAyLjcgMzYxLjQgMjY1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MHptMTYwLTM1MmwtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMjI0IDIxMC43IDM2MS40IDczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pcIl19LEQ3PWIyLFI3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInVzZXJzLXJlY3RhbmdsZVwiLGljb246WzY0MCw1MTIsW10sXCJlNTk0XCIsXCJNOTYgMEM0MyAwIDAgNDMgMCA5NlY0MTZjMCA1MyA0MyA5NiA5NiA5Nkg1NDRjNTMgMCA5Ni00MyA5Ni05NlY5NmMwLTUzLTQzLTk2LTk2LTk2SDk2ek02NCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY5NnptMTU5LjggODBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4ek05NiAzMDkuM2MwIDE0LjcgMTEuOSAyNi43IDI2LjcgMjYuN2g1Ni4xYzgtMzQuMSAzMi44LTYxLjcgNjUuMi03My42Yy03LjUtNC4xLTE2LjItNi40LTI1LjMtNi40SDE0OS4zQzExOS45IDI1NiA5NiAyNzkuOSA5NiAzMDkuM3pNNDYxLjIgMzM2aDU2LjFjMTQuNyAwIDI2LjctMTEuOSAyNi43LTI2LjdjMC0yOS41LTIzLjktNTMuMy01My4zLTUzLjNINDIxLjNjLTkuMiAwLTE3LjggMi4zLTI1LjMgNi40YzMyLjQgMTEuOSA1Ny4yIDM5LjUgNjUuMiA3My42ek0zNzIgMjg5Yy0zLjktLjctNy45LTEtMTItMUgyODBjLTQuMSAwLTguMSAuMy0xMiAxYy0yNiA0LjQtNDcuMyAyMi43LTU1LjkgNDdjLTIuNyA3LjUtNC4xIDE1LjYtNC4xIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0SDQwOGMxMy4zIDAgMjQtMTAuNyAyNC0yNGMwLTguNC0xLjQtMTYuNS00LjEtMjRjLTguNi0yNC4zLTI5LjktNDIuNi01NS45LTQ3ek01MTIgMTc2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OHpNMzIwIDI1NmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0elwiXX0sVTc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVvcGxlLXJvb2ZcIixpY29uOls2NDAsNTEyLFtdLFwiZTUzN1wiLFwiTTMzNS41IDRsMjg4IDE2MGMxNS40IDguNiAyMSAyOC4xIDEyLjQgNDMuNXMtMjguMSAyMS00My41IDEyLjRMMzIwIDY4LjYgNDcuNSAyMjBjLTE1LjQgOC42LTM0LjkgMy00My41LTEyLjRzLTMtMzQuOSAxMi40LTQzLjVMMzA0LjUgNGM5LjctNS40IDIxLjQtNS40IDMxLjEgMHpNMzIwIDI0MGMtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwek0xNDQgMzM2Yy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDB6bTM5Mi00MGMwIDIyLjEtMTcuOSA0MC00MCA0MHMtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDB6TTIyNi45IDQ5MS40TDIwMCA0NDEuNVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJIMTIwYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0NDEuNUw2MS4xIDQ5MS40Yy02LjMgMTEuNy0yMC44IDE2LTMyLjUgOS44cy0xNi0yMC44LTkuOC0zMi41bDM3LjktNzAuM2MxNS4zLTI4LjUgNDUuMS00Ni4zIDc3LjUtNDYuM2gxOS41YzE2LjMgMCAzMS45IDQuNSA0NS40IDEyLjZsMzMuNi02Mi4zYzE1LjMtMjguNSA0NS4xLTQ2LjMgNzcuNS00Ni4zaDE5LjVjMzIuNCAwIDYyLjEgMTcuOCA3Ny41IDQ2LjNsMzMuNiA2Mi4zYzEzLjUtOC4xIDI5LjEtMTIuNiA0NS40LTEyLjZoMTkuNWMzMi40IDAgNjIuMSAxNy44IDc3LjUgNDYuM2wzNy45IDcwLjNjNi4zIDExLjcgMS45IDI2LjItOS44IDMyLjVzLTI2LjIgMS45LTMyLjUtOS44TDU1MiA0NDEuNVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJINDcyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0NDEuNWwtMjYuOSA0OS45Yy02LjMgMTEuNy0yMC44IDE2LTMyLjUgOS44cy0xNi0yMC44LTkuOC0zMi41bDM2LjMtNjcuNWMtMS43LTEuNy0zLjItMy42LTQuMy01LjhMMzc2IDM0NS41VjQwMGMwIDE3LjctMTQuMyAzMi0zMiAzMkgyOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM0NS41bC0yNi45IDQ5LjljLTEuMiAyLjItMi42IDQuMS00LjMgNS44bDM2LjMgNjcuNWM2LjMgMTEuNyAxLjkgMjYuMi05LjggMzIuNXMtMjYuMiAxLjktMzIuNS05Ljh6XCJdfSxxNz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZW9wbGUtbGluZVwiLGljb246WzY0MCw1MTIsW10sXCJlNTM0XCIsXCJNMzYwIDcyYzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MHpNMTQ0IDIwOGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwek0zMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyek00OTYgMjA4YzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDB6TTIwMCAzMTMuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNi4zLTY3LjVjMS43LTEuNyAzLjItMy42IDQuMy01LjhMMjY0IDIxNy41VjI3MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYyMTcuNWwyNi45IDQ5LjljMS4yIDIuMiAyLjYgNC4xIDQuMyA1LjhsLTM2LjMgNjcuNWMtNi4zIDExLjctMS45IDI2LjIgOS44IDMyLjVzMjYuMiAxLjkgMzIuNS05LjhMNDQwIDMxMy41VjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYzMTMuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNy45LTcwLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDQ4Ni4yYy0xNi4zIDAtMzEuOSA0LjUtNDUuNCAxMi42bC0zMy42LTYyLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDMxMC4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM2wtMzMuNiA2Mi4zYy0xMy41LTguMS0yOS4xLTEyLjYtNDUuNC0xMi42SDEzNC4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM0wxOC45IDM0MC42Yy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEw4OCAzMTMuNVYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzEzLjV6XCJdfSxBMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiZWVyLW11Zy1lbXB0eVwiLGljb246WzUxMiw1MTIsW1wiYmVlclwiXSxcImYwZmNcIixcIk0zMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMkgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWOTZoNTEuMmM0Mi40IDAgNzYuOCAzNC40IDc2LjggNzYuOFYyNzQuOWMwIDMwLjQtMTcuOSA1Ny45LTQ1LjYgNzAuMkwzODQgMzgxLjdWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDk2Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHpNMzg0IDMxMS42bDU2LjQtMjUuMWM0LjYtMi4xIDcuNi02LjYgNy42LTExLjdWMTcyLjhjMC03LjEtNS43LTEyLjgtMTIuOC0xMi44SDM4NFYzMTEuNnpNMTYwIDE0NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNlYzNjhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYxNDR6bTY0IDBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWMzY4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMTQ0em02NCAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjM2OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE0NHpcIl19LEc3PUEyLFc3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRpYWdyYW0tcHJlZGVjZXNzb3JcIixpY29uOls1MTIsNTEyLFtdLFwiZTQ3N1wiLFwiTTQ0OCA0MTZsMC02NEw2NCAzNTJsMCA2NCAzODQgMHptMCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NHpNMjg4IDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCAyMjRjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTQ0IDAgMTYgMCAxNDQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2IDM4LjEgMGMyMS40IDAgMzIuMSAyNS45IDE3IDQxTDQzMyAyMzljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDMyOSAxNjljLTE1LjEtMTUuMS00LjQtNDEgMTctNDFsMzguMSAwIDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC04MCAwIDAgNjR6XCJdfSxCMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy11cC1sb25nXCIsaWNvbjpbMzg0LDUxMixbXCJsb25nLWFycm93LXVwXCJdLFwiZjE3NlwiLFwiTTIxNC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTYwIDEwOS4zVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjEwOS4zbDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4elwiXX0sRTc9QjIsVDI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlyZS1mbGFtZS1zaW1wbGVcIixpY29uOlszODQsNTEyLFtcImJ1cm5cIl0sXCJmNDZhXCIsXCJNMzcyLjUgMjU2LjVsLS43LTEuOUMzMzcuOCAxNjAuOCAyODIgNzYuNSAyMDkuMSA4LjVsLTMuMy0zQzIwMi4xIDIgMTk3LjEgMCAxOTIgMHMtMTAuMSAyLTEzLjggNS41bC0zLjMgM0MxMDIgNzYuNSA0Ni4yIDE2MC44IDEyLjIgMjU0LjZsLS43IDEuOUMzLjkgMjc3LjMgMCAyOTkuNCAwIDMyMS42QzAgNDI2LjcgODYuOCA1MTIgMTkyIDUxMnMxOTItODUuMyAxOTItMTkwLjRjMC0yMi4yLTMuOS00NC4yLTExLjUtNjUuMXptLTkwLjggNDkuNWM0LjEgOS4zIDYuMiAxOS40IDYuMiAyOS41YzAgNTMtNDMgOTYuNS05NiA5Ni41cy05Ni00My41LTk2LTk2LjVjMC0xMC4xIDIuMS0yMC4zIDYuMi0yOS41bDEuOS00LjNjMTUuOC0zNS40IDM3LjktNjcuNyA2NS4zLTk1LjFsOC45LTguOWMzLjYtMy42IDguNS01LjYgMTMuNi01LjZzMTAgMiAxMy42IDUuNmw4LjkgOC45YzI3LjQgMjcuNCA0OS42IDU5LjcgNjUuMyA5NS4xbDEuOSA0LjN6XCJdfSxJNz1UMix5Mj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb25cIixpY29uOlszMjAsNTEyLFsxMjk0ODUsXCJtYWxlXCJdLFwiZjE4M1wiLFwiTTIwOCA0OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6TTE1MiAzNTJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1Ni45TDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42aDI5LjdjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNTguMyA5N2M5LjEgMTUuMSA0LjIgMzQuOC0xMC45IDQzLjlzLTM0LjggNC4yLTQzLjktMTAuOUwyMzIgMjU2LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkgxNTJ6XCJdfSxPNz15MixYNz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsYXB0b3BcIixpY29uOls2NDAsNTEyLFsxMjgxODddLFwiZjEwOVwiLFwiTTEyOCAzMkM5Mi43IDMyIDY0IDYwLjcgNjQgOTZWMzUyaDY0Vjk2SDUxMlYzNTJoNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTI4ek0xOS4yIDM4NEM4LjYgMzg0IDAgMzkyLjYgMCA0MDMuMkMwIDQ0NS42IDM0LjQgNDgwIDc2LjggNDgwSDU2My4yYzQyLjQgMCA3Ni44LTM0LjQgNzYuOC03Ni44YzAtMTAuNi04LjYtMTkuMi0xOS4yLTE5LjJIMTkuMnpcIl19LFE3PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpbGUtY3N2XCIsaWNvbjpbMzg0LDUxMixbXSxcImY2ZGRcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTgwIDIyNEg5NmMyMi4xIDAgNDAgMTcuOSA0MCA0MHY4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2di04YzAtNC40LTMuNi04LTgtOEg4MGMtNC40IDAtOCAzLjYtOCA4djgwYzAgNC40IDMuNiA4IDggOEg5NmM0LjQgMCA4LTMuNiA4LTh2LThjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY4YzAgMjIuMS0xNy45IDQwLTQwIDQwSDgwYy0yMi4xIDAtNDAtMTcuOS00MC00MFYyNjRjMC0yMi4xIDE3LjktNDAgNDAtNDB6bTcyIDQ2LjRjMC0yNS42IDIwLjgtNDYuNCA0Ni40LTQ2LjRIMjE2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE5OC40Yy03LjkgMC0xNC40IDYuNC0xNC40IDE0LjRjMCA1LjIgMi44IDkuOSA3LjIgMTIuNWwyNS40IDE0LjVjMTQuNCA4LjMgMjMuNCAyMy42IDIzLjQgNDAuM2MwIDI1LjYtMjAuOCA0Ni40LTQ2LjQgNDYuNEgxNjhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoMjUuNmM3LjkgMCAxNC40LTYuNCAxNC40LTE0LjRjMC01LjItMi44LTkuOS03LjItMTIuNWwtMjUuNC0xNC41QzE2MC45IDMwMi40IDE1MiAyODcgMTUyIDI3MC40ek0yODAgMjQwdjMxLjZjMCAyMyA1LjUgNDUuNiAxNiA2NmMxMC41LTIwLjMgMTYtNDIuOSAxNi02NlYyNDBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnYzMS42YzAgMzQuNy0xMC4zIDY4LjctMjkuNiA5Ny42bC01LjEgNy43Yy0zIDQuNS04IDcuMS0xMy4zIDcuMXMtMTAuMy0yLjctMTMuMy03LjFsLTUuMS03LjdjLTE5LjMtMjguOS0yOS42LTYyLjktMjkuNi05Ny42VjI0MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXX0sSzc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWVub3JhaFwiLGljb246WzY0MCw1MTIsW10sXCJmNjc2XCIsXCJNMjAuOCA3LjRDMjIuOCAyLjkgMjcuMSAwIDMyIDBzOS4yIDIuOSAxMS4yIDcuNEw2MS4zIDQ5LjdjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgODEuNyAwIDY0VjYyLjhjMC00LjUgLjktOC45IDIuNy0xMy4xTDIwLjggNy40em05NiAwQzExOC44IDIuOSAxMjMuMSAwIDEyOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMVY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY2Mi44YzAtNC41IC45LTguOSAyLjctMTMuMUwxMTYuOCA3LjR6bTc3LjggNDIuNEwyMTIuOCA3LjRDMjE0LjggMi45IDIxOS4xIDAgMjI0IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjYyLjhjMC00LjUgLjktOC45IDIuNy0xMy4xek0zMDguOCA3LjRDMzEwLjggMi45IDMxNS4xIDAgMzIwIDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjYyLjhjMC00LjUgLjktOC45IDIuNy0xMy4xTDMwOC44IDcuNHptNzcuOCA0Mi40TDQwNC44IDcuNEM0MDYuOCAyLjkgNDExLjEgMCA0MTYgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFWNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjIuOGMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTUwMC44IDcuNEM1MDIuOCAyLjkgNTA3LjEgMCA1MTIgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFWNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjIuOGMwLTQuNSAuOS04LjkgMi43LTEzLjFMNTAwLjggNy40em03Ny44IDQyLjRMNTk2LjggNy40QzU5OC44IDIuOSA2MDMuMSAwIDYwOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMVY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY2Mi44YzAtNC41IC45LTguOSAyLjctMTMuMXpNMzIgMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyODhWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzIwSDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYyODhjMCA1My00MyA5Ni05NiA5NkgzNTJ2NjRINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMCAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjg4VjM4NEg5NmMtNTMgMC05Ni00My05Ni05NlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTYgMzJIOTZWMjU2IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NiAzMkgxOTJWMjU2IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTYgMzJIMzg0VjI1NiAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTYgMzJINDgwVjI1NiAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdfSxqNz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0cnVjay1wbGFuZVwiLGljb246WzY0MCw1MTIsW10sXCJlNThmXCIsXCJNMjAwIDBjLTMwLjYgMC01NiA1NC43LTU2IDg2LjFWMTkyLjVMNy44IDI3NC4zQzIuOSAyNzcuMiAwIDI4Mi40IDAgMjg4djY0YzAgNS4xIDIuNCA5LjggNi40IDEyLjhzOS4zIDMuOSAxNC4xIDIuNWwxMjMuNC0zN3Y4MS4ybC01MCA0MGMtMy44IDMtNiA3LjYtNiAxMi41djMyYzAgNS4xIDIuNSAxMCA2LjYgMTNzOS41IDMuOCAxNC40IDIuMkwyMDAgNDgwLjkgMjkwLjQgNTExYy0xLjYtNC43LTIuNC05LjgtMi40LTE1VjQ2My40Yy0xOC4yLTEwLjUtMzAuNy0yOS43LTMxLjktNTEuOGwtLjEtLjFWNDA4IDMyNS41IDE4NGwwLTEuMSAwIDBWODYuMUMyNTYgNTQuNyAyMzEuNSAwIDIwMCAwem04OCAxNzZWNDAwYzAgMjAuOSAxMy40IDM4LjcgMzIgNDUuM1Y0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNDQ4SDU0NHY0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFY0NDUuM2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNWMTc2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDMzNmMtMjYuNSAwLTQ4IDIxLjUtNDggNDh6bTc5LjggNzguN2MzLjMtOC43IDExLjItMTQuNyAyMC41LTE0LjdINTM5LjdjOS4yIDAgMTcuMiA2IDIwLjUgMTQuN0w1NzYgMzA0SDM1MmwxNS44LTQ5LjN6TTU2OCA0MDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpNMzg0IDM3NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6XCJdfSxKNz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyZWNvcmQtdmlueWxcIixpY29uOls1MTIsNTEyLFtdLFwiZjhkOVwiLFwiTTUxMiAyNTZjMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ6TTI1NiAzNTJjLTUzIDAtOTYtNDMtOTYtOTZzNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2em0wIDMyYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4cy01Ny4zLTEyOC0xMjgtMTI4cy0xMjggNTcuMy0xMjggMTI4czU3LjMgMTI4IDEyOCAxMjh6bTAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl19LFAyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2UtZ3Jpbi1zdGFyc1wiLGljb246WzUxMiw1MTIsWzEyOTMyMSxcImdyaW4tc3RhcnNcIl0sXCJmNTg3XCIsXCJNNTEyIDI1NmMwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpNNDAzIDMzNi41YzUuMS0xMS44LTYuOS0yMi40LTE5LjItMTguN0MzNDUuMyAzMjkuNCAzMDEuOSAzMzYgMjU2IDMzNnMtODkuMy02LjYtMTI3LjgtMTguMmMtMTIuMy0zLjctMjQuMyA3LTE5LjIgMTguN2MyNC41IDU2LjkgODEuMSA5Ni43IDE0NyA5Ni43czEyMi41LTM5LjggMTQ3LTk2Ljd6TTE2MCAxMjBjLTMuMSAwLTUuOSAxLjgtNy4yIDQuNmwtMTYuNiAzNC43LTM4LjEgNWMtMy4xIC40LTUuNiAyLjUtNi42IDUuNXMtLjEgNi4yIDIuMSA4LjNsMjcuOSAyNi41LTcgMzcuOGMtLjYgMyAuNyA2LjEgMy4yIDcuOXM1LjggMiA4LjUgLjZMMTYwIDIzMi41bDMzLjggMTguM2MyLjcgMS41IDYgMS4zIDguNS0uNnMzLjctNC45IDMuMi03LjlsLTctMzcuOEwyMjYuNCAxNzhjMi4yLTIuMSAzLjEtNS4zIDIuMS04LjNzLTMuNS01LjEtNi42LTUuNWwtMzguMS01LTE2LjYtMzQuN2MtMS4zLTIuOC00LjEtNC42LTcuMi00LjZ6bTE5MiAwYy0zLjEgMC01LjkgMS44LTcuMiA0LjZsLTE2LjYgMzQuNy0zOC4xIDVjLTMuMSAuNC01LjYgMi41LTYuNiA1LjVzLS4xIDYuMiAyLjEgOC4zbDI3LjkgMjYuNS03IDM3LjhjLS42IDMgLjcgNi4xIDMuMiA3LjlzNS44IDIgOC41IC42TDM1MiAyMzIuNWwzMy44IDE4LjNjMi43IDEuNSA2IDEuMyA4LjUtLjZzMy43LTQuOSAzLjItNy45bC03LTM3LjhMNDE4LjQgMTc4YzIuMi0yLjEgMy4xLTUuMyAyLjEtOC4zcy0zLjUtNS4xLTYuNi01LjVsLTM4LjEtNS0xNi42LTM0LjdjLTEuMy0yLjgtNC4xLTQuNi03LjItNC42elwiXX0sWjc9UDIsWTc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9uZ1wiLGljb246WzUxMiw1MTIsW10sXCJmNTVjXCIsXCJNMTkyIDIwOC41YzAgMjkuMS0xNS42IDUzLjktMzcuMiA2Ny44Yy0xNy4yIDExLjEtMzEuNSAyNi4xLTQxLjcgNDMuN0gzMzQuOWMtMTAuMi0xNy42LTI0LjUtMzIuNi00MS43LTQzLjdjLTIxLjYtMTMuOS0zNy4yLTM4LjctMzcuMi02Ny44VjY0SDE5MlYyMDguNXpNMzIwIDY0VjIwOC41YzAgNS43IDMuMSAxMC45IDcuOSAxNGMxMS4yIDcuMiAyMS41IDE1LjUgMzAuOSAyNC44TDM5OC4xIDIwOGwtNy03Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjQgMjQgMjQgMjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNy03LTQzLjMgNDMuM0M0MDYgMzE0LjEgNDE2IDM0Ny45IDQxNiAzODRjMCAzOS40LTExLjkgNzYuMS0zMi4yIDEwNi41Yy05LjYgMTQuNC0yNi41IDIxLjUtNDMuOCAyMS41SDEwOC4xYy0xNy4zIDAtMzQuMi03LjEtNDMuOC0yMS41QzQzLjkgNDYwLjEgMzIgNDIzLjQgMzIgMzg0YzAtNjcuOCAzNS4xLTEyNy4zIDg4LjEtMTYxLjVjNC44LTMuMSA3LjktOC4zIDcuOS0xNFY2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmgxNkgzMDRoMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdfSxGMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzcGFnaGV0dGktbW9uc3Rlci1mbHlpbmdcIixpY29uOls2NDAsNTEyLFtcInBhc3RhZmFyaWFuaXNtXCJdLFwiZjY3YlwiLFwiTTIwOCA2NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2em00OCAwYzAgMTYuMi02IDMxLjEtMTYgNDIuM2wxNS42IDMxLjJjMTguNy02IDM5LjktOS41IDY0LjQtOS41czQ1LjggMy41IDY0LjQgOS41TDQwMCAxMDYuM0MzOTAgOTUuMSAzODQgODAuMiAzODQgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGMtMS43IDAtMy40LS4xLTUuMS0uMkw0MjcuOCAxNThjMjEuMSAxMy42IDM3LjcgMzAuMiA1MS40IDQ2LjRjNy4xIDguMyAxMy41IDE2LjYgMTkuMyAyNGwxLjQgMS44YzYuMyA4LjEgMTEuNiAxNC44IDE2LjcgMjAuNEM1MjcuMyAyNjIuMyA1MzIuNyAyNjQgNTM2IDI2NGMyLjUgMCA0LjMtLjYgNy4xLTMuM2MzLjctMy41IDcuMS04LjggMTIuNS0xNy40bC42LS45YzQuNi03LjQgMTEtMTcuNiAxOS40LTI1LjdjOS43LTkuMyAyMi45LTE2LjcgNDAuNC0xNi43YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yLjUgMC00LjMgLjYtNy4xIDMuM2MtMy43IDMuNS03LjEgOC44LTEyLjUgMTcuNGwtLjYgLjljLTQuNiA3LjQtMTEgMTcuNi0xOS40IDI1LjdjLTkuNyA5LjMtMjIuOSAxNi43LTQwLjQgMTYuN2MtMTguNSAwLTMyLjktOC41LTQ0LjMtMTguNmMtMy4xIDQtNi42IDguMy0xMC41IDEyLjdjMS40IDQuMyAyLjggOC41IDQgMTIuNWMuOSAzIDEuOCA1LjggMi42IDguNmMzIDkuOCA1LjUgMTguMiA4LjYgMjUuOWMzLjkgOS44IDcuNCAxNS40IDEwLjggMTguNWMyLjYgMi40IDUuOSA0LjMgMTIuOCA0LjNjOC43IDAgMTYuOS00LjIgMzMuNy0xMy4yYzE1LTggMzUuNy0xOC44IDYyLjMtMTguOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMTMuNCAwLTI0LjcgNS4yLTM5LjcgMTMuMmMtMSAuNi0yLjEgMS4xLTMuMiAxLjdDNTU5LjkgNDE0IDU0MS40IDQyNCA1MjAgNDI0Yy0xOC40IDAtMzMuNi02LjEtNDUuNS0xNy4yYy0xMS4xLTEwLjMtMTcuOS0yMy43LTIyLjctMzZjLTMuNi05LTYuNy0xOS4xLTkuNS0yOC41Yy0xNi40IDEyLjMtMzYuMSAyMy42LTU4LjkgMzEuM2MzLjYgMTAuOCA4LjQgMjMuNSAxNC40IDM2LjJjNy41IDE1LjkgMTYuMiAzMC40IDI1LjggNDAuNUM0MzMgNDYwLjUgNDQxLjIgNDY0IDQ0OCA0NjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTI1LjIgMC00NS0xMy41LTU5LjUtMjguOGMtMTQuNS0xNS40LTI1LjctMzQuOS0zNC4yLTUzYy04LTE3LTE0LjEtMzMuOC0xOC4zLTQ2LjljLTUuMiAuNC0xMC42IC42LTE2IC42cy0xMC44LS4yLTE2LS42Yy00LjIgMTMtMTAuMyAyOS45LTE4LjMgNDYuOWMtOC41IDE4LjEtMTkuOCAzNy42LTM0LjIgNTNDMjM3IDQ5OC41IDIxNy4yIDUxMiAxOTIgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzYuOCAwIDE1LTMuNSAyNC41LTEzLjdjOS41LTEwLjEgMTguMy0yNC42IDI1LjgtNDAuNWM1LjktMTIuNiAxMC43LTI1LjQgMTQuNC0zNi4yYy0yMi44LTcuNy00Mi41LTE5LTU4LjktMzEuM2MtMi45IDkuNC02IDE5LjUtOS41IDI4LjVjLTQuOCAxMi4yLTExLjYgMjUuNi0yMi43IDM2QzE1My42IDQxNy45IDEzOC40IDQyNCAxMjAgNDI0Yy0yMS40IDAtMzkuOS0xMC01My4xLTE3LjFsMCAwYy0xLjEtLjYtMi4yLTEuMi0zLjItMS43Yy0xNS04LTI2LjMtMTMuMi0zOS43LTEzLjJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjYuNiAwIDQ3LjMgMTAuOCA2Mi4zIDE4LjhjMTYuOCA5IDI1IDEzLjIgMzMuNyAxMy4yYzYuOCAwIDEwLjItMS45IDEyLjgtNC4zYzMuNC0zLjIgNy04LjggMTAuOC0xOC41YzMtNy43IDUuNi0xNi4xIDguNi0yNS45Yy44LTIuNyAxLjctNS42IDIuNi04LjZjMS4yLTQgMi42LTguMiA0LTEyLjVjLTMuOS00LjUtNy40LTguOC0xMC41LTEyLjdDMTM2LjkgMzAzLjUgMTIyLjUgMzEyIDEwNCAzMTJjLTE3LjUgMC0zMC43LTcuNC00MC40LTE2LjdjLTguNC04LjEtMTQuOC0xOC4zLTE5LjQtMjUuN2wtLjYtLjljLTUuNC04LjYtOC44LTEzLjktMTIuNS0xNy40Yy0yLjgtMi43LTQuNi0zLjMtNy4xLTMuM2MtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMxNy41IDAgMzAuNyA3LjQgNDAuNCAxNi43YzguNCA4LjEgMTQuOCAxOC4zIDE5LjQgMjUuN2wuNiAuOWM1LjQgOC42IDguOCAxMy45IDEyLjUgMTcuNGMyLjggMi43IDQuNiAzLjMgNy4xIDMuM2MzLjMgMCA4LjctMS43IDE5LjQtMTMuNGM1LjEtNS42IDEwLjQtMTIuMyAxNi43LTIwLjRsMS40LTEuOGM1LjgtNy40IDEyLjItMTUuNyAxOS4zLTI0YzEzLjgtMTYuMiAzMC4zLTMyLjggNTEuNC00Ni40bC0xNS4xLTMwLjJjLTEuNyAuMS0zLjQgLjItNS4xIC4yYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6bTIwOCAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6XCJdfSxfNz1GMiwkNz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy1kb3duLXVwLWFjcm9zcy1saW5lXCIsaWNvbjpbNTc2LDUxMixbXSxcImU0YWZcIixcIk0xMzcuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgNDAyLjdWMjg4SDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0NDhWMTA5LjNsNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMzg0IDEwOS4zVjIyNEgxOTIgMTI4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDk2VjQwMi43TDg2LjYgMzYxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2ek0xMjggMTkyaDY0VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjE5MnpNNDQ4IDMyMEgzODRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzIwelwiXX0sRDI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3Bvb25cIixpY29uOls1MTIsNTEyLFsxMjkzNDgsNjE4NzMsXCJ1dGVuc2lsLXNwb29uXCJdLFwiZjJlNVwiLFwiTTI0NS44IDIyMC45Yy0xNC41LTE3LjYtMjEuOC0zOS4yLTIxLjgtNjAuOEMyMjQgODAgMzIwIDAgNDE2IDBjNTMgMCA5NiA0MyA5NiA5NmMwIDk2LTgwIDE5Mi0xNjAuMiAxOTJjLTIxLjYgMC00My4yLTcuMy02MC44LTIxLjhMNTQuNiA1MDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQ1LjggMjIwLjl6XCJdfSxjOT1EMixhOT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJqYXItd2hlYXRcIixpY29uOlszMjAsNTEyLFtdLFwiZTUxN1wiLFwiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBIMjU2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnpNMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRIMjU2YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTYwem0xMTIgMEg2OS44Yy0zLjIgMC01LjggMi42LTUuOCA1LjhDNjQgMTk4IDkwIDIyNCAxMjIuMiAyMjRIMTQ0aDMyIDIxLjhjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yYzAtMy4yLTIuNi01LjgtNS44LTUuOEgyMDhjLTE5LjEgMC0zNi4zIDguNC00OCAyMS43Yy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjd6bTQ4IDExNy43Yy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjdINjkuOGMtMy4yIDAtNS44IDIuNi01LjggNS44QzY0IDI5NCA5MCAzMjAgMTIyLjIgMzIwSDE0NGgzMiAyMS44YzMyLjEgMCA1OC4yLTI2IDU4LjItNTguMmMwLTMuMi0yLjYtNS44LTUuOC01LjhIMjA4Yy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuN3pNMTEyIDM1Mkg2OS44Yy0zLjIgMC01LjggMi42LTUuOCA1LjhDNjQgMzkwIDkwIDQxNiAxMjIuMiA0MTZIMTQ0djMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWNDE2aDIxLjhjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yYzAtMy4yLTIuNi01LjgtNS44LTUuOEgyMDhjLTE5LjEgMC0zNi4zIDguNC00OCAyMS43Yy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjd6XCJdfSxSMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJlbnZlbG9wZXMtYnVsa1wiLGljb246WzU3Niw1MTIsW1wibWFpbC1idWxrXCJdLFwiZjY3NFwiLFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJWMjI0aDk2VjE5MmMwLTM1LjMgMjguNy02NCA2NC02NEg0NDhWMzJjMC0xNy43LTE0LjMtMzItMzItMzJIOTZ6TTIyNCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyaDk2YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNkg1NDRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDIyNHptMjQwIDY0aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZINDY0Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnpNMzIgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnYxM0wxNTUuMSA0MTUuOWMxLjQgMSAzLjEgMS42IDQuOSAxLjZzMy41LS42IDQuOS0xLjZMMzIwIDMwMVYyODhjMC0xNy43LTE0LjMtMzItMzItMzJIMzJ6bTI4OCA4NC44TDE4NCA0NDEuNmMtNi45IDUuMS0xNS4zIDcuOS0yNCA3LjlzLTE3LTIuOC0yNC03LjlMMCAzNDAuOFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJIMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM0MC44elwiXX0sczk9UjIsZTk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsZS1jaXJjbGUtZXhjbGFtYXRpb25cIixpY29uOls1NzYsNTEyLFtdLFwiZTRlYlwiLFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDIyNFYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0djM4LjZDMzEwLjEgMjE5LjUgMjU2IDI4Ny40IDI1NiAzNjhjMCA1OS4xIDI5LjEgMTExLjMgNzMuNyAxNDMuM2MtMy4yIC41LTYuNCAuNy05LjcgLjdINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0em0zODQgNjRIMjU2VjBMMzg0IDEyOHptNDggMzg0Yy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NHM2NC41LTE0NCAxNDQtMTQ0czE0NCA2NC41IDE0NCAxNDRzLTY0LjUgMTQ0LTE0NCAxNDR6bTAtNDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMC0xOTJjLTguOCAwLTE2IDcuMi0xNiAxNnY4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI4OGMwLTguOC03LjItMTYtMTYtMTZ6XCJdfSxVMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtaFwiLGljb246WzUxMiw1MTIsWzk0MDUsXCJob3NwaXRhbC1zeW1ib2xcIl0sXCJmNDdlXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMzY4IDE1MlYyNTYgMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjI4MEgxOTJsMCA4MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTIwOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djgwSDMyMFYxNTJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl19LGY5PVUyLHI5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBhZ2VyXCIsaWNvbjpbNTEyLDUxMixbMTI4MjIzXSxcImY4MTVcIixcIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxMjh6bTY0IDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek04MCAzMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIODB6bTEzNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDIxNnpcIl19LHEyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFkZHJlc3MtYm9va1wiLGljb246WzUxMiw1MTIsWzYyMTM4LFwiY29udGFjdC1ib29rXCJdLFwiZjJiOVwiLFwiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY2NGMwLTM1LjMtMjguNy02NC02NC02NEg5NnpNMjA4IDI4OGg2NGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZIMTQ0Yy04LjggMC0xNi03LjItMTYtMTZjMC00NC4yIDM1LjgtODAgODAtODB6bTk2LTk2YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHpNNTEyIDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWODB6TTQ5NiAxOTJjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIwOGMwLTguOC03LjItMTYtMTYtMTZ6bTE2IDE0NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjMzNnpcIl19LGw5PXEyLGk5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN0cmlrZXRocm91Z2hcIixpY29uOls1MTIsNTEyLFtdLFwiZjBjY1wiLFwiTTE2MS4zIDE0NGMzLjItMTcuMiAxNC0zMC4xIDMzLjctMzguNmMyMS4xLTkgNTEuOC0xMi4zIDg4LjYtNi41YzExLjkgMS45IDQ4LjggOS4xIDYwLjEgMTJjMTcuMSA0LjUgMzQuNi01LjYgMzkuMi0yMi43cy01LjYtMzQuNi0yMi43LTM5LjJjLTE0LjMtMy44LTUzLjYtMTEuNC02Ni42LTEzLjRjLTQ0LjctNy04OC4zLTQuMi0xMjMuNyAxMC45Yy0zNi41IDE1LjYtNjQuNCA0NC44LTcxLjggODcuM2MtLjEgLjYtLjIgMS4xLS4yIDEuN2MtMi44IDIzLjkgLjUgNDUuNiAxMC4xIDY0LjZjNC41IDkgMTAuMiAxNi45IDE2LjcgMjMuOUgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjcwLjFjLS4xIDAtLjMtLjEtLjQtLjFsLTEuMS0uM2MtMzYtMTAuOC02NS4yLTE5LjYtODUuMi0zMy4xYy05LjMtNi4zLTE1LTEyLjYtMTguMi0xOS4xYy0zLjEtNi4xLTUuMi0xNC42LTMuOC0yNy40ek0zNDguOSAzMzcuMmMyLjcgNi41IDQuNCAxNS44IDEuOSAzMC4xYy0zIDE3LjYtMTMuOCAzMC44LTMzLjkgMzkuNGMtMjEuMSA5LTUxLjcgMTIuMy04OC41IDYuNWMtMTgtMi45LTQ5LjEtMTMuNS03NC40LTIyLjFjLTUuNi0xLjktMTEtMy43LTE1LjktNS40Yy0xNi44LTUuNi0zNC45IDMuNS00MC41IDIwLjNzMy41IDM0LjkgMjAuMyA0MC41YzMuNiAxLjIgNy45IDIuNyAxMi43IDQuM2wwIDAgMCAwYzI0LjkgOC41IDYzLjYgMjEuNyA4Ny42IDI1LjZsMCAwIC4yIDBjNDQuNyA3IDg4LjMgNC4yIDEyMy43LTEwLjljMzYuNS0xNS42IDY0LjQtNDQuOCA3MS44LTg3LjNjMy42LTIxIDIuNy00MC40LTMuMS01OC4xSDMzNS4xYzcgNS42IDExLjQgMTEuMiAxMy45IDE3LjJ6XCJdfSxvOT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJrXCIsaWNvbjpbMzIwLDUxMixbMTA3XSxcIjRiXCIsXCJNMzExIDg2LjNjMTIuMy0xMi43IDEyLTMyLjktLjctNDUuMnMtMzIuOS0xMi00NS4yIC43bC0xNTUuMiAxNjBMNjQgMjQ5VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0VjMyOCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNDFsNjQuNy02Ni43IDEzMyAxOTJjMTAuMSAxNC41IDMwIDE4LjEgNDQuNSA4LjFzMTguMS0zMCA4LjEtNDQuNUwxNzQuMSAyMjcuNCAzMTEgODYuM3pcIl19LG45PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxhbmRtYXJrLWZsYWdcIixpY29uOls1MTIsNTEyLFtdLFwiZTUxY1wiLFwiTTI3MiAwaDgwYzguOCAwIDE2IDcuMiAxNiAxNlY4MGMwIDguOC03LjIgMTYtMTYgMTZIMjcydjMySDQ2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgyNDBWMTZjMC04LjggNy4yLTE2IDE2LTE2aDE2ek02NCAyMjRoNjRWNDE2aDQwVjIyNGg2NFY0MTZoNDhWMjI0aDY0VjQxNmg0MFYyMjRoNjRWNDIwLjNjLjYgLjMgMS4yIC43IDEuOCAxLjFsNDggMzJjMTEuNyA3LjggMTcgMjIuNCAxMi45IDM1LjlTNDk0LjEgNTEyIDQ4MCA1MTJIMzJjLTE0LjEgMC0yNi41LTkuMi0zMC42LTIyLjdzMS4xLTI4LjEgMTIuOS0zNS45bDQ4LTMyYy42LS40IDEuMi0uNyAxLjgtMS4xVjIyNHpcIl19LEcyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlbmNpbFwiLGljb246WzUxMiw1MTIsWzk5OTksNjE1MDQsXCJwZW5jaWwtYWx0XCJdLFwiZjMwM1wiLFwiTTQyMS43IDIyMC4zbC0xMS4zIDExLjMtMjIuNiAyMi42LTIwNSAyMDVjLTYuNiA2LjYtMTQuOCAxMS41LTIzLjggMTQuMUwzMC44IDUxMWMtOC40IDIuNS0xNy41IC4yLTIzLjctNi4xUy0xLjUgNDg5LjcgMSA0ODEuMkwzOC43IDM1My4xYzIuNi05IDcuNS0xNy4yIDE0LjEtMjMuOGwyMDUtMjA1IDIyLjYtMjIuNiAxMS4zLTExLjMgMzMuOSAzMy45IDYyLjEgNjIuMSAzMy45IDMzLjl6TTk2IDM1My45bC05LjMgOS4zYy0uOSAuOS0xLjYgMi4xLTIgMy40bC0yNS4zIDg2IDg2LTI1LjNjMS4zLS40IDIuNS0xLjEgMy40LTJsOS4zLTkuM0gxMTJjLTguOCAwLTE2LTcuMi0xNi0xNlYzNTMuOXpNNDUzLjMgMTkuM2wzOS40IDM5LjRjMjUgMjUgMjUgNjUuNSAwIDkwLjVsLTE0LjUgMTQuNS0yMi42IDIyLjYtMTEuMyAxMS4zLTMzLjktMzMuOS02Mi4xLTYyLjFMMzE0LjMgNjcuN2wxMS4zLTExLjMgMjIuNi0yMi42IDE0LjUtMTQuNWMyNS0yNSA2NS41LTI1IDkwLjUgMHpcIl19LEg5PUcyLHo5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJhY2t3YXJkXCIsaWNvbjpbNTEyLDUxMixbOTE5NF0sXCJmMDRhXCIsXCJNNDU5LjUgNDQwLjZjOS41IDcuOSAyMi44IDkuNyAzNC4xIDQuNHMxOC40LTE2LjYgMTguNC0yOVY5NmMwLTEyLjQtNy4yLTIzLjctMTguNC0yOXMtMjQuNS0zLjYtMzQuMSA0LjRMMjg4IDIxNC4zVjI1NnY0MS43TDQ1OS41IDQ0MC42ek0yNTYgMzUyVjI1NiAxMjggOTZjMC0xMi40LTcuMi0yMy43LTE4LjQtMjlzLTI0LjUtMy42LTM0LjEgNC40bC0xOTIgMTYwQzQuMiAyMzcuNSAwIDI0Ni41IDAgMjU2czQuMiAxOC41IDExLjUgMjQuNmwxOTIgMTYwYzkuNSA3LjkgMjIuOCA5LjcgMzQuMSA0LjRzMTguNC0xNi42IDE4LjQtMjlWMzUyelwiXX0sVjk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FyZXQtcmlnaHRcIixpY29uOlsyNTYsNTEyLFtdLFwiZjBkYVwiLFwiTTI0Ni42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOXMtMTkuOCAxNi42LTE5LjggMjkuNmwwIDI1NmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDEyOC0xMjh6XCJdfSxtOT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjb21tZW50c1wiLGljb246WzY0MCw1MTIsWzEyODQ5MCw2MTY3MF0sXCJmMDg2XCIsXCJNMjA4IDM1MmMxMTQuOSAwIDIwOC03OC44IDIwOC0xNzZTMzIyLjkgMCAyMDggMFMwIDc4LjggMCAxNzZjMCAzOC42IDE0LjcgNzQuMyAzOS42IDEwMy40Yy0zLjUgOS40LTguNyAxNy43LTE0LjIgMjQuN2MtNC44IDYuMi05LjcgMTEtMTMuMyAxNC4zYy0xLjggMS42LTMuMyAyLjktNC4zIDMuN2MtLjUgLjQtLjkgLjctMS4xIC44bC0uMiAuMiAwIDAgMCAwQzEgMzI3LjItMS40IDMzNC40IC44IDM0MC45UzkuMSAzNTIgMTYgMzUyYzIxLjggMCA0My44LTUuNiA2Mi4xLTEyLjVjOS4yLTMuNSAxNy44LTcuNCAyNS4zLTExLjRDMTM0LjEgMzQzLjMgMTY5LjggMzUyIDIwOCAzNTJ6TTQ0OCAxNzZjMCAxMTIuMy05OS4xIDE5Ni45LTIxNi41IDIwN0MyNTUuOCA0NTcuNCAzMzYuNCA1MTIgNDMyIDUxMmMzOC4yIDAgNzMuOS04LjcgMTA0LjctMjMuOWM3LjUgNCAxNiA3LjkgMjUuMiAxMS40YzE4LjMgNi45IDQwLjMgMTIuNSA2Mi4xIDEyLjVjNi45IDAgMTMuMS00LjUgMTUuMi0xMS4xYzIuMS02LjYtLjItMTMuOC01LjgtMTcuOWwwIDAgMCAwLS4yLS4yYy0uMi0uMi0uNi0uNC0xLjEtLjhjLTEtLjgtMi41LTItNC4zLTMuN2MtMy42LTMuMy04LjUtOC4xLTEzLjMtMTQuM2MtNS41LTctMTAuNy0xNS40LTE0LjItMjQuN2MyNC45LTI5IDM5LjYtNjQuNyAzOS42LTEwMy40YzAtOTIuOC04NC45LTE2OC45LTE5Mi42LTE3NS41Yy40IDUuMSAuNiAxMC4zIC42IDE1LjV6XCJdfSxXMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwYXN0ZVwiLGljb246WzUxMiw1MTIsW1wiZmlsZS1jbGlwYm9hcmRcIl0sXCJmMGVhXCIsXCJNMTYwIDBjLTIzLjcgMC00NC40IDEyLjktNTUuNCAzMkg0OEMyMS41IDMyIDAgNTMuNSAwIDgwVjQwMGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgxOTJWMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwaDQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDIxNS40QzIwNC40IDEyLjkgMTgzLjcgMCAxNjAgMHpNMjcyIDEyOGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWNDQ4djE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQ2NGMyNi41IDAgNDgtMjEuNSA0OC00OFYyNTZINDE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxMjhIMzIwIDI3MnpNMTYwIDg4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTI1NiA0MHY5Nmg5NmwtOTYtOTZ6XCJdfSx2OT1XMixNOT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjb2RlLXB1bGwtcmVxdWVzdFwiLGljb246WzUxMiw1MTIsW10sXCJlMTNjXCIsXCJNMzA1LjggMi4xQzMxNC40IDUuOSAzMjAgMTQuNSAzMjAgMjRWNjRoMTZjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhWMzU4LjdjMjguMyAxMi4zIDQ4IDQwLjUgNDggNzMuM2MwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTMyLjggMTkuNy02MSA0OC03My4zVjE5MmMwLTM1LjMtMjguNy02NC02NC02NEgzMjB2NDBjMCA5LjUtNS42IDE4LjEtMTQuMiAyMS45cy0xOC44IDIuMy0yNS44LTQuMWwtODAtNzJjLTUuMS00LjYtNy45LTExLTcuOS0xNy44czIuOS0xMy4zIDcuOS0xNy44bDgwLTcyYzctNi4zIDE3LjItNy45IDI1LjgtNC4xek0xMDQgODBjMC0xMy4zLTEwLjctMjQtMjQtMjRTNTYgNjYuNyA1NiA4MHMxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6bTggNzMuM1YzNTguN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNWMTUzLjNDMTkuNyAxNDEgMCAxMTIuOCAwIDgwQzAgMzUuOCAzNS44IDAgODAgMHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjN6TTEwNCA0MzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0em0zMjggMjRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHpcIl19LHQ5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNsaXBib2FyZC1saXN0XCIsaWNvbjpbMzg0LDUxMixbXSxcImY0NmRcIixcIk0xMDEuNSA2NEMxMTQuNiAyNi43IDE1MC4yIDAgMTkyIDBzNzcuNCAyNi43IDkwLjUgNjRIMzIwYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0aDM3LjV6TTIyNCA5NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTE2MCAzNjhjMCA4LjggNy4yIDE2IDE2IDE2SDMwNGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnpNOTYgMzkyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6bTY0LTEyMGMwIDguOCA3LjIgMTYgMTYgMTZIMzA0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2ek05NiAyOTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHpcIl19LEUyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRydWNrLXJhbXAtYm94XCIsaWNvbjpbNjQwLDUxMixbXCJ0cnVjay1sb2FkaW5nXCJdLFwiZjRkZVwiLFwiTTY0MCAwVjQwMGMwIDYxLjktNTAuMSAxMTItMTEyIDExMmMtNjEgMC0xMTAuNS00OC43LTExMi0xMDkuM0w0OC40IDUwMi45Yy0xNy4xIDQuNi0zNC42LTUuNC0zOS4zLTIyLjVzNS40LTM0LjYgMjIuNS0zOS4zTDM1MiAzNTMuOFY2NGMwLTM1LjMgMjguNy02NCA2NC02NEg2NDB6TTU3NiA0MDBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4ek0yMy4xIDIwNy43Yy00LjYtMTcuMSA1LjYtMzQuNiAyMi42LTM5LjJsNDYuNC0xMi40IDIwLjcgNzcuM2MyLjMgOC41IDExLjEgMTMuNiAxOS42IDExLjNsMzAuOS04LjNjOC41LTIuMyAxMy42LTExLjEgMTEuMy0xOS42bC0yMC43LTc3LjMgNDYuNC0xMi40YzE3LjEtNC42IDM0LjYgNS42IDM5LjIgMjIuNmw0MS40IDE1NC41YzQuNiAxNy4xLTUuNiAzNC42LTIyLjYgMzkuMkwxMDMuNyAzODQuOWMtMTcuMSA0LjYtMzQuNi01LjYtMzkuMi0yMi42TDIzLjEgMjA3Ljd6XCJdfSxoOT1FMixDOT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLWNoZWNrXCIsaWNvbjpbNjQwLDUxMixbXSxcImY0ZmNcIixcIk0zNTIgMTI4YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4cy0xMjgtNTcuMy0xMjgtMTI4UzE1My4zIDAgMjI0IDBzMTI4IDU3LjMgMTI4IDEyOHpNMCA0ODIuM0MwIDM4My44IDc5LjggMzA0IDE3OC4zIDMwNGg5MS40QzM2OC4yIDMwNCA0NDggMzgzLjggNDQ4IDQ4Mi4zYzAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43SDI5LjdDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zek02MjUgMTc3TDQ5NyAzMDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQ3IDQ3TDU5MSAxNDNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45elwiXX0sTDk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidmlhbC12aXJ1c1wiLGljb246WzUxMiw1MTIsW10sXCJlNTk3XCIsXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2VjM4NGMwIDUzIDQzIDk2IDk2IDk2YzI4LjYgMCA1NC4yLTEyLjUgNzEuOC0zMi4zYy4xLTE0LjIgNS42LTI4LjMgMTYuNC0zOS4xYy4yLS4yIC4xLS42LS4yLS42Yy0zMC45IDAtNTYtMjUuMS01Ni01NnMyNS4xLTU2IDU2LTU2Yy4zIDAgLjQtLjQgLjItLjZjLTIxLjktMjEuOS0yMS45LTU3LjMgMC03OS4yYzIuNC0yLjQgNS00LjYgNy44LTYuNVY5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxNjAgOTYgMzJ6TTk2IDE5MlY5Nmg2NHY5Nkg5NnpNMjE2IDM3NmMyOC44IDAgNDMuMiAzNC44IDIyLjkgNTUuMmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwYzIwLjQtMjAuNCA1NS4yLTUuOSA1NS4yIDIyLjljMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTI4LjggMzQuOC00My4yIDU1LjItMjIuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlDNDQ0LjggNDEwLjggNDU5LjIgMzc2IDQ4OCAzNzZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTI4LjggMC00My4yLTM0LjgtMjIuOS01NS4yYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBDNDEwLjggMjU5LjIgMzc2IDI0NC44IDM3NiAyMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCAyOC44LTM0LjggNDMuMi01NS4yIDIyLjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjljMjAuNCAyMC40IDUuOSA1NS4yLTIyLjkgNTUuMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMTA0LTI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTg4IDMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl19LHA5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNoZWV0LXBsYXN0aWNcIixpY29uOlszODQsNTEyLFtdLFwiZTU3MVwiLFwiTTAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDIyNFYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJIMzg0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0QzI4LjcgMCAwIDI4LjcgMCA2NFY0NDh6TTE3MS4zIDc1LjNsLTk2IDk2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDk2LTk2YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnptOTYgMzJsLTE2MCAxNjBjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMTYwLTE2MGM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6TTM4NCAzODRIMjU2VjUxMkwzODQgMzg0elwiXX0sZDk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmxvZ1wiLGljb246WzUxMiw1MTIsW10sXCJmNzgxXCIsXCJNMTkyIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyYzEyMy43IDAgMjI0IDEwMC4zIDIyNCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkM1MTIgMTI4LjkgMzgzLjEgMCAyMjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6bTAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTEwNi04Ni0xOTItMTkyLTE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTk2IDE0NGMwLTI2LjUtMjEuNS00OC00OC00OFMwIDExNy41IDAgMTQ0VjM2OGMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0SDEyOHY5NmgxNmMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OFYxNDR6XCJdfSx1OT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLW5pbmphXCIsaWNvbjpbNDQ4LDUxMixbMTI5Mzk5XSxcImY1MDRcIixcIk0yMjQgMjU2Yy01Ny4yIDAtMTA1LjYtMzcuNS0xMjItODkuM2MtMS4xIDEuMy0yLjIgMi42LTMuNSAzLjhjLTE1LjggMTUuOC0zOC44IDIwLjctNTMuNiAyMi4xYy04LjEgLjgtMTQuNi01LjctMTMuOC0xMy44YzEuNC0xNC43IDYuMy0zNy44IDIyLjEtNTMuNmM1LjgtNS44IDEyLjYtMTAuMSAxOS42LTEzLjRjLTctMy4yLTEzLjgtNy42LTE5LjYtMTMuNEMzNy40IDgyLjcgMzIuNiA1OS43IDMxLjEgNDQuOWMtLjgtOC4xIDUuNy0xNC42IDEzLjgtMTMuOGMxNC43IDEuNCAzNy44IDYuMyA1My42IDIyLjFjNC44IDQuOCA4LjcgMTAuNCAxMS43IDE2LjFDMTMxLjQgMjguMiAxNzQuNCAwIDIyNCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4ek0wIDQ4Mi4zQzAgMzk2IDYxLjMgMzI0LjEgMTQyLjcgMzA3LjZsNjguNSA5MS40YzYuNCA4LjUgMTkuMiA4LjUgMjUuNiAwbDY4LjUtOTEuNEMzODYuNyAzMjQuMSA0NDggMzk2IDQ0OCA0ODIuM2MwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0gyOS43QzEzLjMgNTEyIDAgNDk4LjcgMCA0ODIuM3pNMTYwIDk2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDI4OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNjB6XCJdfSx4OT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24tYXJyb3ctdXAtZnJvbS1saW5lXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1MzlcIixcIk0xOTIgOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHptLTggMzUyVjM1MmgxNnY5NkgxODR6bS02NCAwSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDE1Mmg4MEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjY0VjI1Ni45bDI4LjYgNDcuNWM5LjEgMTUuMSAyOC44IDIwIDQzLjkgMTAuOXMyMC0yOC44IDEwLjktNDMuOWwtNTguMy05N2MtMTcuNC0yOC45LTQ4LjYtNDYuNi04Mi4zLTQ2LjZIMTc3LjFjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45TDEyMCAyNTYuOVY0NDh6TTU5OC42IDEyMS40bC04MC04MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTgwIDgwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDQ2NCAxNDEuMyA0NjQgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTQxLjNsMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjN6XCJdfSxJMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzY3JvbGwtdG9yYWhcIixpY29uOls2NDAsNTEyLFtcInRvcmFoXCJdLFwiZjZhMFwiLFwiTTk2IDQ4MFYzMkM5NiAxNC4zIDc0LjUgMCA0OCAwUzAgMTQuMyAwIDMyVjQ4MGMwIDE3LjcgMjEuNSAzMiA0OCAzMnM0OC0xNC4zIDQ4LTMyek01MTIgMzJIMTI4VjQ4MEg1MTJWMzJ6TTU5MiAwYy0yNi41IDAtNDggMTQuMy00OCAzMlY0ODBjMCAxNy43IDIxLjUgMzIgNDggMzJzNDgtMTQuMyA0OC0zMlYzMmMwLTE3LjctMjEuNS0zMi00OC0zMnpNMTk2IDMxMy43YzAtMy4yIC45LTYuNCAyLjUtOS4yTDIyNi43IDI1NmwtMjguMy00OC41Yy0xLjYtMi44LTIuNS02LTIuNS05LjJjMC0xMC4xIDguMi0xOC4zIDE4LjMtMTguM0gyNzFsMzEuNC01My45YzMuNi02LjMgMTAuMy0xMC4xIDE3LjYtMTAuMXMxMy45IDMuOCAxNy42IDEwLjFMMzY5IDE4MGg1Ni43YzEwLjEgMCAxOC4zIDguMiAxOC4zIDE4LjNjMCAzLjItLjkgNi40LTIuNSA5LjJMNDEzLjMgMjU2bDI4LjMgNDguNWMxLjYgMi44IDIuNSA2IDIuNSA5LjJjMCAxMC4xLTguMiAxOC4zLTE4LjMgMTguM0gzNjlsLTMxLjQgNTMuOWMtMy42IDYuMy0xMC4zIDEwLjEtMTcuNiAxMC4xcy0xMy45LTMuOC0xNy42LTEwLjFMMjcxIDMzMkgyMTQuM2MtMTAuMSAwLTE4LjMtOC4yLTE4LjMtMTguM3ptMTI0IDU0LjdMMzQxLjIgMzMySDI5OC44TDMyMCAzNjguNHpNMjU0LjUgMjU2bDMwLjMgNTJoNzAuNGwzMC4zLTUyLTMwLjMtNTJIMjg0LjhsLTMwLjMgNTJ6bTE0NC45IDIzLjhMMzgzIDMwOGgzMi44bC0xNi40LTI4LjJ6TTQxNS44IDIwNEgzODNsMTYuNCAyOC4yTDQxNS44IDIwNHpNMzIwIDE0My42TDI5OC44IDE4MGg0Mi40TDMyMCAxNDMuNnpNMjI0LjIgMjA0bDE2LjQgMjguMkwyNTcgMjA0SDIyNC4yek0yNTcgMzA4bC0xNi40LTI4LjJMMjI0LjIgMzA4SDI1N3pcIl19LGc5PUkyLHU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnJvb20tYmFsbFwiLGljb246WzY0MCw1MTIsW1wicXVpZGRpdGNoXCIsXCJxdWlkZGl0Y2gtYnJvb20tYmFsbFwiXSxcImY0NThcIixcIk02MzMuMyAxMi40YzEwLjggMTQgOC4zIDM0LjEtNS42IDQ0LjlsLTE0NCAxMTItNzIgNTZMNDAzIDIzMmwyOC4zIDM2LjNjMy43IDQuOCA0LjQgMTEuMiAxLjggMTYuN3MtOC4xIDktMTQuMSA5LjFsLTQ4IC45TDI5Mi4zIDE5NC4ybDEyLjUtNDYuM2MxLjYtNS45IDYuMy0xMC4zIDEyLjMtMTEuNXMxMiAxLjEgMTUuOCA1LjhsMzAuOCAzOS40IDguNy02LjggNzItNTYgMTQ0LTExMmMxMy45LTEwLjkgMzQuMS04LjMgNDQuOSA1LjZ6TTI2OS4xIDQ3Ni4zYy01NS41IDQzLjQtMjE1IDM0LjItMjUyLjMgMzEuNGMtNS4xLS40LTkuNy0yLjktMTIuOC03cy00LjUtOS4xLTMuNi0xNC4xYy41LTMuMiAxLjMtNy4yIDIuMi0xMi4xYzMtMTYuNSAxMC44LTMxLjYgMjEuOS00NC4xbDczLjUtODIuNWMzLjEtMy41IDMuMi04LjYgLjQtMTIuM3MtNy45LTQuNy0xMi0yLjZMNDcuMyAzNTMuNWMtNi4zIDMuMy0xMy40LTIuNy0xMS05LjRjMTQuMy0zOS45IDMyLjctNzYuOSA1NS41LTk0LjdjNTcuNy00NS4xIDE3NS4zLTM1LjUgMTc1LjMtMzUuNWw3OC44IDEwMC45cy0xOS4xIDExNi40LTc2LjggMTYxLjV6TTQ5NiA1MTJjLTQ0LjIgMC04MC0zNS44LTgwLTgwczM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHpcIl19LFM5PXUsTjk9dSx3OT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0b2dnbGUtb2ZmXCIsaWNvbjpbNTc2LDUxMixbXSxcImYyMDRcIixcIk0zODQgMTI4YzcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4SDE5MmMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhzNTcuMy0xMjggMTI4LTEyOEgzODR6TTU3NiAyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJIMTkyQzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4SDM4NGMxMDYgMCAxOTItODYgMTkyLTE5MnpNMTkyIDM1MmM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZ6XCJdfSxPMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib3gtYXJjaGl2ZVwiLGljb246WzUxMiw1MTIsW1wiYXJjaGl2ZVwiXSxcImYxODdcIixcIk0zMiAzMkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWOTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJDMTQuMyAxMjggMCAxMTMuNyAwIDk2VjY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyem0wIDEyOEg0ODBWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDk2Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxNjB6bTEyOCA4MGMwIDguOCA3LjIgMTYgMTYgMTZIMzM2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2elwiXX0sazk9TzIsYjk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLWRyb3duaW5nXCIsaWNvbjpbNTc2LDUxMixbXSxcImU1NDVcIixcIk0xOTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWOTYuMmMwIDU0LjEgMjMuNSAxMDQgNjIuMiAxMzguM2wtMjEgMTQ2LjdjNy44IDIuMSAxNS41IDMuMyAyMi44IDMuM2MyMS4xIDAgNDItOC41IDU5LjItMjAuM2MyMi4xLTE1LjUgNTEuNi0xNS41IDczLjcgMGMxMi40IDguNSAyNi4xIDE0LjggMzkuNyAxOGwxNy43LTk3LjZjMTAuNy0xLjIgMjEuMy0zLjEgMzEuOS01LjVsMTA1LTIzLjljMTcuMi0zLjkgMjgtMjEuMSAyNC4xLTM4LjNzLTIxLjEtMjgtMzguMy0yNC4xTDQwMCAyMTYuNmMtNDEgOS4zLTgzLjcgNy41LTEyMy43LTUuMmMtNTAuMi0xNi04NC4zLTYyLjYtODQuMy0xMTUuM1Y2NHpNMzIwIDE5MmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0ek0zMDYuNSAzODkuOWMtMTEuMS03LjktMjUuOS03LjktMzcgMEMyNDcgNDA1LjQgMjE5LjUgNDE2IDE5MiA0MTZjLTI2LjkgMC01NS4zLTEwLjgtNzcuNC0yNi4xbDAgMGMtMTEuOS04LjUtMjguMS03LjgtMzkuMiAxLjdjLTE0LjQgMTEuOS0zMi41IDIxLTUwLjYgMjUuMmMtMTcuMiA0LTI3LjkgMjEuMi0yMy45IDM4LjRzMjEuMiAyNy45IDM4LjQgMjMuOWMyNC41LTUuNyA0NC45LTE2LjUgNTguMi0yNUMxMjYuNSA0NjkuNyAxNTkgNDgwIDE5MiA0ODBjMzEuOSAwIDYwLjYtOS45IDgwLjQtMTguOWM1LjgtMi43IDExLjEtNS4zIDE1LjYtNy43YzQuNSAyLjQgOS43IDUuMSAxNS42IDcuN2MxOS44IDkgNDguNiAxOC45IDgwLjQgMTguOWMzMyAwIDY1LjUtMTAuMyA5NC41LTI1LjhjMTMuNCA4LjQgMzMuNyAxOS4zIDU4LjIgMjVjMTcuMiA0IDM0LjQtNi43IDM4LjQtMjMuOXMtNi43LTM0LjQtMjMuOS0zOC40Yy0xOC4xLTQuMi0zNi4yLTEzLjMtNTAuNi0yNS4yYy0xMS4xLTkuNC0yNy4zLTEwLjEtMzkuMi0xLjdsMCAwQzQzOS40IDQwNS4yIDQxMC45IDQxNiAzODQgNDE2Yy0yNy41IDAtNTUtMTAuNi03Ny41LTI2LjF6XCJdfSx4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93LWRvd24tOS0xXCIsaWNvbjpbNTc2LDUxMixbXCJzb3J0LW51bWVyaWMtZGVzY1wiLFwic29ydC1udW1lcmljLWRvd24tYWx0XCJdLFwiZjg4NlwiLFwiTTE2MCA0ODBjOSAwIDE3LjUtMy44IDIzLjYtMTAuNGw4OC05NmMxMS45LTEzIDExLjEtMzMuMy0yLTQ1LjJzLTMzLjMtMTEuMS00NS4yIDJMMTkyIDM2NS43VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjM2NS43TDk1LjYgMzMwLjRjLTExLjktMTMtMzIuMi0xMy45LTQ1LjItMnMtMTMuOSAzMi4yLTIgNDUuMmw4OCA5NkMxNDIuNSA0NzYuMiAxNTEgNDgwIDE2MCA0ODB6TTM1MiAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJoMTZ2NjRIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDQ4IDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ2NFYzMjBjMC0xNy43LTE0LjMtMzItMzItMzJIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTMuNy0xNzEuMWMtNC4yIDItOC44IDMuMS0xMy43IDMuMWMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyYzAgMTIuOC03LjUgMjMuOC0xOC4zIDI4Ljl6bS00MC43IDU0LjlsLTYuOCA5LjJjLTEwLjUgMTQuMi03LjUgMzQuMiA2LjcgNDQuOHMzNC4yIDcuNSA0NC44LTYuN2w0OC44LTY1LjhjMTQtMTguOSAyMS41LTQxLjcgMjEuNS02NS4yYzAtNDguNi0zOS40LTg4LTg4LTg4cy04OCAzOS40LTg4IDg4YzAgMzkuMiAyNS42IDcyLjQgNjEuMSA4My44elwiXX0sQTk9eCxCOT14LFgyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2UtZ3Jpbi10b25ndWUtc3F1aW50XCIsaWNvbjpbNTEyLDUxMixbMTI4NTQxLFwiZ3Jpbi10b25ndWUtc3F1aW50XCJdLFwiZjU4YVwiLFwiTTAgMjU2QzAgMzY4LjkgNzMuMSA0NjQuNyAxNzQuNSA0OTguOEMxNjUuMyA0ODQgMTYwIDQ2Ni42IDE2MCA0NDhWNDAwLjdjLTI0LTE3LjUtNDMuMS00MS40LTU0LjgtNjkuMmMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTljMTIuMy0zLjggMjQuMyA2LjkgMTkuMyAxOC43Yy0xMS44IDI4LTMxLjEgNTItNTUuNCA2OS42VjQ0OGMwIDE4LjYtNS4zIDM2LTE0LjUgNTAuOEM0MzguOSA0NjQuNyA1MTIgMzY4LjkgNTEyIDI1NkM1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2ek0xMTYgMTQxLjFjMC05IDkuNi0xNC43IDE3LjUtMTAuNWw4OS45IDQ3LjljMTAuNyA1LjcgMTAuNyAyMS4xIDAgMjYuOGwtODkuOSA0Ny45Yy03LjkgNC4yLTE3LjUtMS41LTE3LjUtMTAuNWMwLTIuOCAxLTUuNSAyLjgtNy42bDM2LTQzLjItMzYtNDMuMmMtMS44LTIuMS0yLjgtNC44LTIuOC03LjZ6bTI2Mi41LTEwLjVjNy45LTQuMiAxNy41IDEuNSAxNy41IDEwLjVjMCAyLjgtMSA1LjUtMi44IDcuNmwtMzYgNDMuMiAzNiA0My4yYzEuOCAyLjEgMi44IDQuOCAyLjggNy42YzAgOS05LjYgMTQuNy0xNy41IDEwLjVsLTg5LjktNDcuOWMtMTAuNy01LjctMTAuNy0yMS4xIDAtMjYuOGw4OS45LTQ3Ljl6TTMyMCA0NDhWNDAyLjZjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZoLTJjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjljLTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDBjLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjloLTJjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXX0sVDk9WDIseTk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3ByYXktY2FuXCIsaWNvbjpbNTEyLDUxMixbXSxcImY1YmRcIixcIk0xMjggMGg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5Nkg5NlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAyNTZjMC01MyA0My05NiA5Ni05NkgyMjRjNTMgMCA5NiA0MyA5NiA5NlY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjI1NnptMjQwIDgwYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwczM1LjggODAgODAgODBzODAtMzUuOCA4MC04MHpNMzIwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptNjQgMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpNNTEyIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDgwIDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyem0zMiA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTM4NCAxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LFA5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRydWNrLW1vbnN0ZXJcIixpY29uOls2NDAsNTEyLFtdLFwiZjYzYlwiLFwiTTI4OCA2NHY2NEg0MTZMMzY4IDY0SDI4OHpNNDE5LjIgMjUuNkw0OTYgMTI4aDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyYy0yOS4yLTM4LjktNzUuNy02NC0xMjgtNjRzLTk4LjggMjUuMS0xMjggNjRIMjg4Yy0yOS4yLTM4LjktNzUuNy02NC0xMjgtNjRzLTk4LjggMjUuMS0xMjggNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDIyNFY0OGMwLTI2LjUgMjEuNS00OCA0OC00OGg5NmMyMC4xIDAgMzkuMSA5LjUgNTEuMiAyNS42ek0xNTIgMjU2aDE2YzEyLjEgMCAyMi4xIDguOSAyMy44IDIwLjZjNy42IDIuMiAxNC45IDUuMyAyMS43IDljOS40LTcgMjIuOC02LjMgMzEuMyAyLjNsMTEuMyAxMS4zYzguNiA4LjYgOS4zIDIxLjkgMi4zIDMxLjNjMy43IDYuOCA2LjggMTQuMSA5IDIxLjdjMTEuNiAxLjcgMjAuNiAxMS43IDIwLjYgMjMuOHYxNmMwIDEyLjEtOC45IDIyLjEtMjAuNiAyMy44Yy0yLjIgNy42LTUuMyAxNC45LTkgMjEuN2M3IDkuNCA2LjMgMjIuOC0yLjMgMzEuM2wtMTEuMyAxMS4zYy04LjYgOC42LTIxLjkgOS4zLTMxLjMgMi4yYy02LjggMy43LTE0LjEgNi44LTIxLjcgOUMxOTAuMSA1MDMuMSAxODAuMSA1MTIgMTY4IDUxMkgxNTJjLTEyLjEgMC0yMi4xLTguOS0yMy44LTIwLjZjLTcuNi0yLjItMTQuOS01LjMtMjEuNy05Yy05LjQgNy4xLTIyLjggNi4zLTMxLjMtMi4yTDYzLjggNDY4LjljLTguNi04LjYtOS4zLTIxLjktMi4zLTMxLjNjLTMuNy02LjktNi44LTE0LjEtOS0yMS44QzQwLjkgNDE0LjEgMzIgNDA0LjEgMzIgMzkyVjM3NmMwLTEyLjEgOC45LTIyLjEgMjAuNi0yMy44YzIuMi03LjYgNS4zLTE0LjkgOS0yMS44Yy03LTkuNC02LjMtMjIuOCAyLjMtMzEuM2wxMS4zLTExLjNjOC42LTguNiAyMS45LTkuMyAzMS4zLTIuM2M2LjgtMy43IDE0LjEtNi44IDIxLjctOWMxLjctMTEuNiAxMS43LTIwLjYgMjMuOC0yMC42em04IDE3NmMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4ek00NDguMiAyNzYuNmMxLjctMTEuNiAxMS43LTIwLjYgMjMuOC0yMC42aDE2YzEyLjEgMCAyMi4xIDguOSAyMy44IDIwLjZjNy42IDIuMiAxNC45IDUuMyAyMS44IDljOS40LTcgMjIuOC02LjMgMzEuMyAyLjNsMTEuMyAxMS4zYzguNiA4LjYgOS4zIDIxLjkgMi4yIDMxLjNjMy43IDYuOCA2LjggMTQuMSA5IDIxLjdjMTEuNiAxLjcgMjAuNiAxMS43IDIwLjYgMjMuOHYxNmMwIDEyLjEtOC45IDIyLjEtMjAuNiAyMy44Yy0yLjIgNy42LTUuMyAxNC45LTkgMjEuN2M3IDkuNCA2LjMgMjIuOC0yLjIgMzEuM2wtMTEuMyAxMS4zYy04LjYgOC42LTIxLjkgOS4zLTMxLjMgMi4yYy02LjkgMy43LTE0LjEgNi44LTIxLjggOUM1MTAuMSA1MDMuMSA1MDAuMSA1MTIgNDg4IDUxMkg0NzJjLTEyLjEgMC0yMi4xLTguOS0yMy44LTIwLjZjLTcuNi0yLjItMTQuOS01LjMtMjEuNy05Yy05LjQgNy4xLTIyLjggNi4zLTMxLjMtMi4ybC0xMS4zLTExLjNjLTguNi04LjYtOS4zLTIxLjktMi4yLTMxLjNjLTMuNy02LjktNi44LTE0LjEtOS0yMS44QzM2MC45IDQxNC4xIDM1MiA0MDQuMSAzNTIgMzkyVjM3NmMwLTEyLjEgOC45LTIyLjEgMjAuNi0yMy44YzIuMi03LjYgNS4zLTE0LjkgOS0yMS44Yy03LTkuNC02LjMtMjIuOCAyLjItMzEuM2wxMS4zLTExLjNjOC42LTguNiAyMS45LTkuMyAzMS4zLTIuM2M2LjgtMy43IDE0LjEtNi44IDIxLjctOXpNNTI4IDM4NGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6XCJdfSxGOT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ3XCIsaWNvbjpbNTc2LDUxMixbMTE5XSxcIjU3XCIsXCJNMjAuOCAzNGMxNi41LTYuMiAzNSAyLjIgNDEuMiAxOC43bDExMC4yIDI5NEwyNTcuMyA1NWM0LTEzLjcgMTYuNS0yMyAzMC43LTIzczI2LjcgOS40IDMwLjcgMjNsODUuMSAyOTEuN0w1MTQgNTIuOGM2LjItMTYuNSAyNC42LTI0LjkgNDEuMi0xOC43czI0LjkgMjQuNyAxOC43IDQxLjJsLTE0NCAzODRjLTQuOCAxMi45LTE3LjQgMjEuMy0zMS4yIDIwLjdzLTI1LjctOS44LTI5LjUtMjNMMjg4IDE3OC4zIDIwNi43IDQ1N2MtMy45IDEzLjItMTUuOCAyMi41LTI5LjUgMjNzLTI2LjMtNy44LTMxLjItMjAuN0wyIDc1LjJDLTQuMiA1OC43IDQuMiA0MC4yIDIwLjggMzR6XCJdfSxRMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJlYXJ0aC1hZnJpY2FcIixpY29uOls1MTIsNTEyLFsxMjc3NTcsXCJnbG9iZS1hZnJpY2FcIl0sXCJmNTdjXCIsXCJNMTc3LjggNjMuMmwxMCAxNy40YzIuOCA0LjggNC4yIDEwLjMgNC4yIDE1Ljl2NDEuNGMwIDMuOSAxLjYgNy43IDQuMyAxMC40YzYuMiA2LjIgMTYuNSA1LjcgMjItMS4ybDEzLjYtMTdjNC43LTUuOSAxMi45LTcuNyAxOS42LTQuM2wxNS4yIDcuNmMzLjQgMS43IDcuMiAyLjYgMTEgMi42YzYuNSAwIDEyLjgtMi42IDE3LjQtNy4ybDMuOS0zLjljMi45LTIuOSA3LjMtMy42IDExLTEuOGwyOS4yIDE0LjZjNy44IDMuOSAxMi42IDExLjggMTIuNiAyMC41YzAgMTAuNS03LjEgMTkuNi0xNy4zIDIyLjJsLTM1LjQgOC44Yy03LjQgMS44LTE1LjEgMS41LTIyLjMtLjlsLTMyLTEwLjdjLTMuMy0xLjEtNi43LTEuNy0xMC4yLTEuN2MtNyAwLTEzLjggMi4zLTE5LjQgNi41TDE3NiAyMTJjLTEwLjEgNy42LTE2IDE5LjQtMTYgMzJ2MjhjMCAyNi41IDIxLjUgNDggNDggNDhoMzJjOC44IDAgMTYgNy4yIDE2IDE2djQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyYzEwLjEgMCAxOS42LTQuNyAyNS42LTEyLjhsMjUuNi0zNC4xYzguMy0xMS4xIDEyLjgtMjQuNiAxMi44LTM4LjRWMzE4LjZjMC0zLjkgMi42LTcuMyA2LjQtOC4ybDUuMy0xLjNjMTEuOS0zIDIwLjMtMTMuNyAyMC4zLTI2YzAtNy4xLTIuOC0xMy45LTcuOC0xOC45bC0zMy41LTMzLjVjLTMuNy0zLjctMy43LTkuNyAwLTEzLjRjNS43LTUuNyAxNC4xLTcuNyAyMS44LTUuMWwxNC4xIDQuN2MxMi4zIDQuMSAyNS43LTEuNSAzMS41LTEzYzMuNS03IDExLjItMTAuOCAxOC45LTkuMmwyNy40IDUuNUM0MzIgMTEyLjQgMzUxLjUgNDggMjU2IDQ4Yy0yNy43IDAtNTQgNS40LTc4LjIgMTUuMnpNNTEyIDI1NmMwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpcIl19LEQ5PVEyLFI5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJhaW5ib3dcIixpY29uOls2NDAsNTEyLFsxMjc3NTJdLFwiZjc1YlwiLFwiTTMyMCA5NkMxNzguNiA5NiA2NCAyMTAuNiA2NCAzNTJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyQzAgMTc1LjMgMTQzLjMgMzIgMzIwIDMyczMyMCAxNDMuMyAzMjAgMzIwdjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkM1NzYgMjEwLjYgNDYxLjQgOTYgMzIwIDk2em0wIDE5MmMtMzUuMyAwLTY0IDI4LjctNjQgNjR2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyYzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4czEyOCA1Ny4zIDEyOCAxMjh2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0xNjAgMzUydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MmMwLTEyMy43IDEwMC4zLTIyNCAyMjQtMjI0czIyNCAxMDAuMyAyMjQgMjI0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MmMwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MHMtMTYwIDcxLjYtMTYwIDE2MHpcIl19LFU5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNpcmNsZS1ub3RjaFwiLGljb246WzUxMiw1MTIsW10sXCJmMWNlXCIsXCJNMjIyLjcgMzIuMWM1IDE2LjktNC42IDM0LjgtMjEuNSAzOS44QzEyMS44IDk1LjYgNjQgMTY5LjEgNjQgMjU2YzAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODYuOS01Ny44LTE2MC40LTEzNy4xLTE4NC4xYy0xNi45LTUtMjYuNi0yMi45LTIxLjUtMzkuOHMyMi45LTI2LjYgMzkuOC0yMS41QzQzNC45IDQyLjEgNTEyIDE0MCA1MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NkMwIDE0MCA3Ny4xIDQyLjEgMTgyLjkgMTAuNmMxNi45LTUgMzQuOCA0LjYgMzkuOCAyMS41elwiXX0sSzI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGFibGV0LXNjcmVlbi1idXR0b25cIixpY29uOls0NDgsNTEyLFtcInRhYmxldC1hbHRcIl0sXCJmM2ZhXCIsXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMzg0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6TTI1NiA0NDhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek0zODQgNjRINjRWMzg0SDM4NFY2NHpcIl19LHE5PUsyLEc5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBhd1wiLGljb246WzUxMiw1MTIsW10sXCJmMWIwXCIsXCJNMjI2LjUgOTIuOWMxNC4zIDQyLjktLjMgODYuMi0zMi42IDk2LjhzLTcwLjEtMTUuNi04NC40LTU4LjVzLjMtODYuMiAzMi42LTk2LjhzNzAuMSAxNS42IDg0LjQgNTguNXpNMTAwLjQgMTk4LjZjMTguOSAzMi40IDE0LjMgNzAuMS0xMC4yIDg0LjFzLTU5LjctLjktNzguNS0zMy4zUy0yLjcgMTc5LjMgMjEuOCAxNjUuM3M1OS43IC45IDc4LjUgMzMuM3pNNjkuMiA0MDEuMkMxMjEuNiAyNTkuOSAyMTQuNyAyMjQgMjU2IDIyNHMxMzQuNCAzNS45IDE4Ni44IDE3Ny4yYzMuNiA5LjcgNS4yIDIwLjEgNS4yIDMwLjV2MS42YzAgMjUuOC0yMC45IDQ2LjctNDYuNyA0Ni43Yy0xMS41IDAtMjIuOS0xLjQtMzQtNC4ybC04OC0yMmMtMTUuMy0zLjgtMzEuMy0zLjgtNDYuNiAwbC04OCAyMmMtMTEuMSAyLjgtMjIuNSA0LjItMzQgNC4yQzg0LjkgNDgwIDY0IDQ1OS4xIDY0IDQzMy4zdi0xLjZjMC0xMC40IDEuNi0yMC44IDUuMi0zMC41ek00MjEuOCAyODIuN2MtMjQuNS0xNC0yOS4xLTUxLjctMTAuMi04NC4xczU0LTQ3LjMgNzguNS0zMy4zczI5LjEgNTEuNyAxMC4yIDg0LjFzLTU0IDQ3LjMtNzguNSAzMy4zek0zMTAuMSAxODkuN2MtMzIuMy0xMC42LTQ2LjktNTMuOS0zMi42LTk2LjhzNTIuMS02OS4xIDg0LjQtNTguNXM0Ni45IDUzLjkgMzIuNiA5Ni44cy01Mi4xIDY5LjEtODQuNCA1OC41elwiXX0sVzk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2xvdWRcIixpY29uOls2NDAsNTEyLFs5NzI5XSxcImYwYzJcIixcIk0wIDMzNmMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NEg1MTJjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhjMC02MS45LTQ0LTExMy42LTEwMi40LTEyNS40YzQuMS0xMC43IDYuNC0yMi40IDYuNC0zNC42YzAtNTMtNDMtOTYtOTYtOTZjLTE5LjcgMC0zOC4xIDYtNTMuMyAxNi4yQzM2NyA2NC4yIDMxNS4zIDMyIDI1NiAzMkMxNjcuNiAzMiA5NiAxMDMuNiA5NiAxOTJjMCAyLjcgLjEgNS40IC4yIDguMUM0MC4yIDIxOS44IDAgMjczLjIgMCAzMzZ6XCJdfSxFOT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0cm93ZWwtYnJpY2tzXCIsaWNvbjpbNTEyLDUxMixbXSxcImU1OGFcIixcIk0yNDAuOCA0LjhDMjUwLjMgMTAuNiAyNTYgMjAuOSAyNTYgMzJ2NzJoODljMy42LTEzLjggMTYuMS0yNCAzMS0yNGg4OGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEgzNzZjLTE0LjkgMC0yNy40LTEwLjItMzEtMjRIMjU2djcyYzAgMTEuMS01LjcgMjEuNC0xNS4yIDI3LjJzLTIxLjIgNi40LTMxLjEgMS40bC0xOTItOTZDNi44IDE1MS4yIDAgMTQwLjEgMCAxMjhzNi44LTIzLjIgMTcuNy0yOC42bDE5Mi05NmM5LjktNSAyMS43LTQuNCAzMS4xIDEuNHpNMjg4IDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYyNTZ6TTMyIDM4NGg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xOTIgMEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdfSxqMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmYWNlLWZsdXNoZWRcIixpY29uOls1MTIsNTEyLFsxMjg1NjMsXCJmbHVzaGVkXCJdLFwiZjU3OVwiLFwiTTUxMiAyNTZjMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ6TTE3NiAzODRjMCA4LjggNy4yIDE2IDE2IDE2SDMyMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxOTJjLTguOCAwLTE2IDcuMi0xNiAxNnptLTE2LTg4YzM5LjggMCA3Mi0zMi4yIDcyLTcycy0zMi4yLTcyLTcyLTcycy03MiAzMi4yLTcyIDcyczMyLjIgNzIgNzIgNzJ6bTI2NC03MmMwLTM5LjgtMzIuMi03Mi03Mi03MnMtNzIgMzIuMi03MiA3MnMzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzJ6bS0yNDAgMGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTE5MiAwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl19LEk5PWoyLE85PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvc3BpdGFsLXVzZXJcIixpY29uOls1NzYsNTEyLFtdLFwiZjgwZFwiLFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjI1NkgxNDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMHY2NEgxNDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMHY4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyNjUuOWMtNi4zLTEwLjItOS45LTIyLjItOS45LTM1LjFjMC00Ni45IDI1LjgtODcuOCA2NC0xMDkuMlYyNzEuOCA0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNMTUyIDY0aDE2YzguOCAwIDE2IDcuMiAxNiAxNnYyNGgyNGM4LjggMCAxNiA3LjIgMTYgMTZ2MTZjMCA4LjgtNy4yIDE2LTE2IDE2SDE4NHYyNGMwIDguOC03LjIgMTYtMTYgMTZIMTUyYy04LjggMC0xNi03LjItMTYtMTZWMTUySDExMmMtOC44IDAtMTYtNy4yLTE2LTE2VjEyMGMwLTguOCA3LjItMTYgMTYtMTZoMjRWODBjMC04LjggNy4yLTE2IDE2LTE2ek01MTIgMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwczM1LjggODAgODAgODBzODAtMzUuOCA4MC04MHpNMjg4IDQ3Ny4xYzAgMTkuMyAxNS42IDM0LjkgMzQuOSAzNC45SDU0MS4xYzE5LjMgMCAzNC45LTE1LjYgMzQuOS0zNC45YzAtNTEuNC00MS43LTkzLjEtOTMuMS05My4xSDM4MS4xYy01MS40IDAtOTMuMSA0MS43LTkzLjEgOTMuMXpcIl19LFg5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRlbnQtYXJyb3ctbGVmdC1yaWdodFwiLGljb246WzY0MCw1MTIsW10sXCJlNTdmXCIsXCJNNTIwLjEgNi4yYy05LjktOC45LTI1LTguMS0zMy45IDEuOHMtOC4xIDI1IDEuOCAzMy45TDUyMS41IDcyIDExOC41IDcybDMzLjUtMzAuMmM5LjktOC45IDEwLjctMjQgMS44LTMzLjlzLTI0LTEwLjctMzMuOS0xLjhsLTgwIDcyQzM0LjkgODIuNyAzMiA4OS4yIDMyIDk2czIuOSAxMy4zIDcuOSAxNy44bDgwIDcyYzkuOSA4LjkgMjUgOC4xIDMzLjktMS44czguMS0yNS0xLjgtMzMuOUwxMTguNSAxMjBsNDAyLjkgMC0zMy41IDMwLjJjLTkuOSA4LjktMTAuNyAyNC0xLjggMzMuOXMyNCAxMC43IDMzLjkgMS44bDgwLTcyYzUuMS00LjYgNy45LTExIDcuOS0xNy44cy0yLjktMTMuMy03LjktMTcuOGwtODAtNzJ6TTMzOS40IDE2Ni41Yy0xMS41LTguNy0yNy4zLTguNy0zOC44IDBsLTE2OCAxMjhjLTYuNiA1LTExIDEyLjUtMTIuMyAyMC43bC0yNCAxNjBjLTEuNCA5LjIgMS4zIDE4LjYgNy40IDI1LjZzMTQuOSAxMS4xIDI0LjIgMTEuMUgzMjBWMzUybDk2IDE2MGg5NmM5LjMgMCAxOC4yLTQuMSAyNC4yLTExLjFzOC44LTE2LjQgNy40LTI1LjZsLTI0LTE2MGMtMS4yLTguMi01LjYtMTUuNy0xMi4zLTIwLjdsLTE2OC0xMjh6XCJdfSxKMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJnYXZlbFwiLGljb246WzUxMiw1MTIsW1wibGVnYWxcIl0sXCJmMGUzXCIsXCJNMzE4LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTIwIDEyMGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYgMTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNC00TDMyNS40IDI5My40bC00IDRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2IDE2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyMC0xMjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2LTE2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNCA0TDMzMC42IDc0LjZsNC00YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNi0xNnptLTE1MiAyODhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMTIgMTEyYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w0OCA0OGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMTItMTEyYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xLjQtMS40TDI3MiAyODUuMyAyMjYuNyAyNDAgMTY4IDI5OC43bC0xLjQtMS40elwiXX0sUTk9SjIsSzk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmlub2N1bGFyc1wiLGljb246WzUxMiw1MTIsW10sXCJmMWU1XCIsXCJNMTI4IDMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk2SDk2VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem02NCA5NlY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM4OC45YzAtMzQuNiA5LjQtNjguNiAyNy4yLTk4LjNDNDAuOSAyNjcuOCA0OS43IDI0Mi40IDUzIDIxNkw2MC41IDE1NmMyLTE2IDE1LjYtMjggMzEuOC0yOEgxOTJ6bTIyNy44IDBjMTYuMSAwIDI5LjggMTIgMzEuOCAyOEw0NTkgMjE2YzMuMyAyNi40IDEyLjEgNTEuOCAyNS44IDc0LjZjMTcuOCAyOS43IDI3LjIgNjMuNyAyNy4yIDk4LjNWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTI4aDk5Ljh6TTMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlY5NkgzMjBWNjR6bS0zMiA2NFYyODhIMjI0VjEyOGg2NHpcIl19LGo5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1pY3JvcGhvbmUtc2xhc2hcIixpY29uOls2NDAsNTEyLFtdLFwiZjEzMVwiLFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNDcyLjEgMzQ0LjdjMTUuMi0yNiAyMy45LTU2LjMgMjMuOS04OC43VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY0MGMwIDIxLjItNS4xIDQxLjEtMTQuMiA1OC43TDQxNiAzMDAuOFY5NmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnY1NC4zTDM4LjggNS4xek0zNDQgNDMwLjRjMjAuNC0yLjggMzkuNy05LjEgNTcuMy0xOC4ybC00My4xLTMzLjlDMzQ2LjEgMzgyIDMzMy4zIDM4NCAzMjAgMzg0Yy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHYtOC43TDE0NC43IDIxMGMtLjUgMS45LS43IDMuOS0uNyA2djQwYzAgODkuMSA2Ni4yIDE2Mi43IDE1MiAxNzQuNFY0NjRIMjQ4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDcyIDcyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDM0NFY0MzAuNHpcIl19LEo5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJveC10aXNzdWVcIixpY29uOls1MTIsNTEyLFtdLFwiZTA1YlwiLFwiTTkyLjUgMEgyMDhjNDAgMCA1MiAyNCA2NCA0OHMyNCA0OCA2NCA0OGg4NS4yQzQzNiA5NiA0NDggMTA4IDQ0OCAxMjIuOGMwIDMuNC0uNyA2LjgtMS45IDEwTDQwOS42IDIyNCAzODQgMjg4SDEyOGwtMTYtNjRMNjQuOSAzNS40Yy0uNi0yLjMtLjktNC42LS45LTYuOUM2NCAxMi44IDc2LjggMCA5Mi41IDB6TTc5IDIyNGwxNiA2NEg4MGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg0OEgzODRoNDhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZINDE4LjVsMjUuNi02NEg0NjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhWMzg0SDBWMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDc5ek0wIDQxNkg1MTJ2NDhjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQxNnpcIl19LFo5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1vdG9yY3ljbGVcIixpY29uOls2NDAsNTEyLFsxMjc5NDldLFwiZjIxY1wiLFwiTTI4MCAzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg1Ny43bDE2LjQgMzAuM0wyNTYgMTkybC00NS4zLTQ1LjNjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdINjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyaDk2Yzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwYzAgMTEtMS4xIDIxLjctMy4yIDMyaDcwLjRjLTIuMS0xMC4zLTMuMi0yMS0zLjItMzJjMC01Mi4yIDI1LTk4LjYgNjMuNy0xMjcuOGwxNS40IDI4LjZDNDAyLjQgMjc2LjMgMzg0IDMxMiAzODQgMzUyYzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhzLTU3LjMtMTI4LTEyOC0xMjhjLTEzLjUgMC0yNi41IDIuMS0zOC43IDZMNDE4LjIgMTI4SDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkg0NTkuNmMtNy41IDAtMTQuNyAyLjYtMjAuNSA3LjRMMzkxLjcgNzguOWwtMTQtMjZjLTctMTIuOS0yMC41LTIxLTM1LjItMjFIMjgwek00NjIuNyAzMTEuMmwyOC4yIDUyLjJjNi4zIDExLjcgMjAuOSAxNiAzMi41IDkuN3MxNi0yMC45IDkuNy0zMi41bC0yOC4yLTUyLjJjMi4zLS4zIDQuNy0uNCA3LjEtLjRjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0xNS41IDUuNS0yOS43IDE0LjctNDAuOHpNMTg3LjMgMzc2Yy05LjUgMjMuNS0zMi41IDQwLTU5LjMgNDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMjYuOSAwIDQ5LjkgMTYuNSA1OS4zIDQwaDY2LjRDMjQyLjUgMjY4LjggMTkwLjUgMjI0IDEyOCAyMjRDNTcuMyAyMjQgMCAyODEuMyAwIDM1MnM1Ny4zIDEyOCAxMjggMTI4YzYyLjUgMCAxMTQuNS00NC44IDEyNS44LTEwNEgxODcuM3pNMTI4IDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyelwiXX0sWjI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmVsbC1jb25jaWVyZ2VcIixpY29uOls1MTIsNTEyLFsxMjg3MTgsXCJjb25jaWVyZ2UtYmVsbFwiXSxcImY1NjJcIixcIk0yMTYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMTZ2MzMuM0MxMTkuNiAxNTcuMiAzMiAyNTIuNCAzMiAzNjhINDgwYzAtMTE1LjYtODcuNi0yMTAuOC0yMDAtMjIyLjdWMTEyaDE2YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDI1NiAyMTZ6TTI0IDQwMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEg0ODhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMjR6XCJdfSxZOT1aMixZMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZW4tcnVsZXJcIixpY29uOls1MTIsNTEyLFtcInBlbmNpbC1ydWxlclwiXSxcImY1YWVcIixcIk00NjkuMyAxOS4zbDIzLjQgMjMuNGMyNSAyNSAyNSA2NS41IDAgOTAuNWwtNTYuNCA1Ni40TDMyMi4zIDc1LjdsNTYuNC01Ni40YzI1LTI1IDY1LjUtMjUgOTAuNSAwek00NC45IDM1My4yTDI5OS43IDk4LjMgNDEzLjcgMjEyLjMgMTU4LjggNDY3LjFjLTYuNyA2LjctMTUuMSAxMS42LTI0LjIgMTQuMmwtMTA0IDI5LjdjLTguNCAyLjQtMTcuNCAuMS0yMy42LTYuMXMtOC41LTE1LjItNi4xLTIzLjZsMjkuNy0xMDRjMi42LTkuMiA3LjUtMTcuNSAxNC4yLTI0LjJ6TTI0OS40IDEwMy40TDEwMy40IDI0OS40IDE2IDE2MS45Yy0xOC43LTE4LjctMTguNy00OS4xIDAtNjcuOUw5NC4xIDE2YzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwbDE5LjggMTkuOGMtLjMgLjMtLjcgLjYtMSAuOWwtNjQgNjRjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw2NC02NGMuMy0uMyAuNi0uNyAuOS0xbDQ1LjEgNDUuMXpNNDA4LjYgMjYyLjZsNDUuMSA0NS4xYy0uMyAuMy0uNyAuNi0xIC45bC02NCA2NGMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDY0LTY0Yy4zLS4zIC42LS43IC45LTFMNDk2IDM1MC4xYzE4LjcgMTguNyAxOC43IDQ5LjEgMCA2Ny45TDQxNy45IDQ5NmMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBsLTg3LjQtODcuNEw0MDguNiAyNjIuNnpcIl19LF85PVkyLF8yPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlb3BsZS1hcnJvd3NcIixpY29uOls2NDAsNTEyLFtcInBlb3BsZS1hcnJvd3MtbGVmdC1yaWdodFwiXSxcImUwNjhcIixcIk0xOTIgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRTOTIuNyAwIDEyOCAwczY0IDI4LjcgNjQgNjR6TTI1LjkgMjMzLjRDMjkuMyAxOTEuOSA2NCAxNjAgMTA1LjYgMTYwaDQ0LjhjMjcgMCA1MSAxMy40IDY1LjUgMzQuMWMtMi43IDEuOS01LjIgNC03LjUgNi4zbC02NCA2NGMtMjEuOSAyMS45LTIxLjkgNTcuMyAwIDc5LjJMMTkyIDM5MS4yVjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgxMTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM0OC4zYy0yNi41LTkuNS00NC43LTM1LjgtNDIuMi02NS42bDQuMS00OS4zek01NzYgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0ek00MzEuNiAyMDAuNGMtMi4zLTIuMy00LjktNC40LTcuNS02LjNjMTQuNS0yMC43IDM4LjYtMzQuMSA2NS41LTM0LjFoNDQuOGM0MS42IDAgNzYuMyAzMS45IDc5LjcgNzMuNGw0LjEgNDkuM2MyLjUgMjkuOC0xNS43IDU2LjEtNDIuMiA2NS42VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OTZjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM5MS4ybDQ3LjYtNDcuNmMyMS45LTIxLjkgMjEuOS01Ny4zIDAtNzkuMmwtNjQtNjR6TTI3MiAyNDB2MzJoOTZWMjQwYzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmw2NCA2NGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNjQgNjRjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJzLTE0LjgtMTIuNS0xNC44LTIyLjJWMzM2SDI3MnYzMmMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNjQtNjRjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMnMxNC44IDEyLjUgMTQuOCAyMi4yelwiXX0sJDk9XzIsY2M9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFycy1hbmQtdmVudXMtYnVyc3RcIixpY29uOls2NDAsNTEyLFtdLFwiZTUyM1wiLFwiTTUwNCAwYy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhzLTEuNyAxOS4zIDUuMiAyNi4ybDM5IDM5LTIyLjIgMjIuMkM0NzUuOSA3OC40IDQzOS42IDY0IDQwMCA2NGMtODguNCAwLTE2MCA3MS42LTE2MCAxNjBjMCA4MC4yIDU5LjEgMTQ2LjcgMTM2LjEgMTU4LjJjMCAuNi0uMSAxLjItLjEgMS44di40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC40IC4zIC40IC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zIC4zSDM1MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGgyNHYuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMiAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAuMSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDBsMjQgMEgzNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNEg0MDBsMjQgMHYwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjFWNDg2IDQ4NnYtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjFWNDg1IDQ4NXYtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjFWNDg0di0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMVY0ODN2LS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xVjQ4MXYtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjFWNDgwdi0uMS0uMS0uMS0uMS0uMS0uMS0uMVY0Nzl2LS4xLS4xLS4xLS4xLS4xLS4xLS4xVjQ3OHYtLjEtLjEtLjEtLjEtLjEtLjFWNDc3di0uMS0uMS0uMS0uMS0uMS0uMVY0NzZ2LS4xLS4xLS4xLS4xLS4xLS4xVjQ3NXYtLjEtLjItLjItLjItLjItLjJWNDc0di0uMi0uMi0uMi0uMi0uMlY0NzN2LS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yVjQ3MHYtLjItLjItLjItLjItLjJWNDY5di0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMlY0Njd2LS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yVjQ2M3YtLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjJWNDU5di0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMlY0NTd2LS4yLS4yLS4yLS4yVjQ1NmgyNGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEg0MjR2LS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zVjQwM3YtLjMtLjNWNDAydi0uMy0uM1Y0MDF2LS4zLS4zVjQwMHYtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjQtLjMtLjQtLjQtLjQtLjRWMzkzdi0uNC0uNC0uNC0uNC0uNC0uNC0uNC0uNC0uNC0uNC0uNC0uNC0uNFYzODh2LS40LS40LS40LS40LS40LS40LS40LS40LS40LS40VjM4NGMwLS42IDAtMS4yLS4xLTEuOGM3Ny0xMS42IDEzNi4xLTc4IDEzNi4xLTE1OC4yYzAtMzEuNC05LTYwLjctMjQuNy04NS40TDU2MCAxMTMuOWwzOSAzOWM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yczE0LjgtMTIuNSAxNC44LTIyLjJWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRINTA0ek00MDAgMzIwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2czk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnpNMTkwLjkgMTguMUMxODguNCAxMiAxODIuNiA4IDE3NiA4cy0xMi40IDQtMTQuOSAxMC4xbC0yOS40IDc0TDU1LjYgNjguOWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zcy00LjYgMTIuMi0xLjQgMTcuOWwzOS41IDY5LjFMMTAuOSAyMDYuNGMtNS40IDMuNy04IDEwLjMtNi41IDE2LjdzNi43IDExLjIgMTMuMSAxMi4ybDc4LjcgMTIuMkw5MC42IDMyN2MtLjUgNi41IDMuMSAxMi43IDkgMTUuNXMxMi45IDEuOCAxNy44LTIuNkwxNzYgMjg2LjFsNTguNiA1My45YzQuMSAzLjggOS45IDUuMSAxNS4yIDMuNkMyMjMuNiAzMTAuOCAyMDggMjY5LjIgMjA4IDIyNGMwLTYwLjggMjguMy0xMTUgNzIuNC0xNTAuMkwyMjAuMyA5Mi4xbC0yOS40LTc0elwiXX0sJDI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3F1YXJlLWNhcmV0LXJpZ2h0XCIsaWNvbjpbNDQ4LDUxMixbXCJjYXJldC1zcXVhcmUtcmlnaHRcIl0sXCJmMTUyXCIsXCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTMyMCAyNTZjMCA2LjctMi44IDEzLTcuNyAxNy42bC0xMTIgMTA0Yy03IDYuNS0xNy4yIDguMi0yNS45IDQuNHMtMTQuNC0xMi41LTE0LjQtMjJsMC0yMDhjMC05LjUgNS43LTE4LjIgMTQuNC0yMnMxOC45LTIuMSAyNS45IDQuNGwxMTIgMTA0YzQuOSA0LjUgNy43IDEwLjkgNy43IDE3LjZ6XCJdfSxhYz0kMixjMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzY2lzc29yc1wiLGljb246WzUxMiw1MTIsWzk5ODQsOTk4Niw5OTg4LFwiY3V0XCJdLFwiZjBjNFwiLFwiTTI1NiAxOTJsLTM5LjUtMzkuNWM0LjktMTIuNiA3LjUtMjYuMiA3LjUtNDAuNUMyMjQgNTAuMSAxNzMuOSAwIDExMiAwUzAgNTAuMSAwIDExMnM1MC4xIDExMiAxMTIgMTEyYzE0LjMgMCAyNy45LTIuNyA0MC41LTcuNUwxOTIgMjU2bC0zOS41IDM5LjVjLTEyLjYtNC45LTI2LjItNy41LTQwLjUtNy41QzUwLjEgMjg4IDAgMzM4LjEgMCA0MDBzNTAuMSAxMTIgMTEyIDExMnMxMTItNTAuMSAxMTItMTEyYzAtMTQuMy0yLjctMjcuOS03LjUtNDAuNUw0OTkuMiA3Ni44YzcuMS03LjEgNy4xLTE4LjUgMC0yNS42Yy0yOC4zLTI4LjMtNzQuMS0yOC4zLTEwMi40IDBMMjU2IDE5MnptMjIuNiAxNTAuNkwzOTYuOCA0NjAuOGMyOC4zIDI4LjMgNzQuMSAyOC4zIDEwMi40IDBjNy4xLTcuMSA3LjEtMTguNSAwLTI1LjZMMzQyLjYgMjc4LjZsLTY0IDY0ek0xNjAgMTEyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpNMTEyIDQ0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4elwiXX0sc2M9YzEsZWM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3VuLXBsYW50LXdpbHRcIixpY29uOls2NDAsNTEyLFtdLFwiZTU3YVwiLFwiTTE2MCAwYy02LjMgMC0xMiAzLjctMTQuNiA5LjVMMTIwLjYgNjQuOSA2My45IDQzLjJjLTUuOS0yLjMtMTIuNi0uOC0xNyAzLjZzLTUuOSAxMS4xLTMuNiAxN2wyMS43IDU2LjdMOS41IDE0NS40QzMuNyAxNDggMCAxNTMuNyAwIDE2MHMzLjcgMTIgOS41IDE0LjZsNTUuNCAyNC44TDQzLjIgMjU2LjFjLTIuMyA1LjktLjggMTIuNiAzLjYgMTdzMTEuMSA1LjkgMTcgMy42bDU2LjctMjEuNyAyNC44IDU1LjRjMi42IDUuOCA4LjMgOS41IDE0LjYgOS41czEyLTMuNyAxNC42LTkuNWwyNC44LTU1LjQgNTYuNyAyMS43YzUuOSAyLjMgMTIuNiAuOCAxNy0zLjZzNS45LTExLjEgMy42LTE3bC0yMS43LTU2LjcgNTUuNC0yNC44YzUuOC0yLjYgOS41LTguMyA5LjUtMTQuNnMtMy43LTEyLTkuNS0xNC42bC01NS40LTI0LjggMjEuNy01Ni43YzIuMy01LjkgLjgtMTIuNi0zLjYtMTdzLTExLjEtNS45LTE3LTMuNkwxOTkuNCA2NC45IDE3NC42IDkuNUMxNzIgMy43IDE2Ni4zIDAgMTYwIDB6bTAgMjI0Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6bTMyLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptMzEyIDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2NTMuNGMtMTQuOCA3LjctMjQgMjMuMS0yNCA0NC42YzAgMTYuOCAxNiA0NCAzNy40IDY3LjJjNS44IDYuMiAxNS41IDYuMiAyMS4yIDBDNjI0IDMxOCA2NDAgMjkwLjcgNjQwIDI3NGMwLTIxLjUtOS4yLTM3LTI0LTQ0LjZWMTc2YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwdjIyLjdjLTkuOC00LjMtMjAuNi02LjctMzItNi43Yy00NC4yIDAtODAgMzUuOC04MCA4MHYyMS40Yy0xNC44IDcuNy0yNCAyMy4xLTI0IDQ0LjZjMCAxNi44IDE2IDQ0IDM3LjQgNjcuMmM1LjggNi4yIDE1LjUgNi4yIDIxLjIgMEM0MDAgMzgyIDQxNiAzNTQuNyA0MTYgMzM4YzAtMjEuNS05LjItMzctMjQtNDQuNlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY4VjQ0OEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINTA0VjI4MHYtOFYxNzZ6XCJdfSxmYz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0b2lsZXRzLXBvcnRhYmxlXCIsaWNvbjpbNTc2LDUxMixbXSxcImU1ODRcIixcIk0zMiAwSDIyNGMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NEgwVjMyQzAgMTQuMyAxNC4zIDAgMzIgMHpNMCA5NkgyNCAyMzJoMjR2MjRWNDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0di04SDQ4djhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMTIwIDk2ek0xOTIgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ2NjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2ek0zNTIgMEg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMzIwVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zMjAgOTZoMjRINTUyaDI0djI0VjQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHYtOEgzNjh2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYxMjAgOTZ6TTUxMiAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZ6XCJdfSxyYz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob2NrZXktcHVja1wiLGljb246WzUxMiw1MTIsW10sXCJmNDUzXCIsXCJNMjU2IDI1NkMxMTQuNiAyNTYgMCAyMTMgMCAxNjBzMTE0LjYtOTYgMjU2LTk2czI1NiA0MyAyNTYgOTZzLTExNC42IDk2LTI1NiA5NnptMTkyLjMgMS44YzI0LjctOS4zIDQ2LjktMjEgNjMuNy0zNS42VjM1MmMwIDUzLTExNC42IDk2LTI1NiA5NlMwIDQwNSAwIDM1MlYyMjIuM2MxNi44IDE0LjYgMzkgMjYuMyA2My43IDM1LjZDMTE0LjUgMjc2LjkgMTgyLjUgMjg4IDI1NiAyODhzMTQxLjUtMTEuMSAxOTIuMy0zMC4yelwiXX0sbGM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGFibGVcIixpY29uOls1MTIsNTEyLFtdLFwiZjBjZVwiLFwiTTY0IDI1NlYxNjBIMjI0djk2SDY0em0wIDY0SDIyNHY5Nkg2NFYzMjB6bTIyNCA5NlYzMjBINDQ4djk2SDI4OHpNNDQ4IDI1NkgyODhWMTYwSDQ0OHY5NnpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0elwiXX0saWM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFnbmlmeWluZy1nbGFzcy1hcnJvdy1yaWdodFwiLGljb246WzUxMiw1MTIsW10sXCJlNTIxXCIsXCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NmMtMzQuNCAyNS4yLTc2LjggNDAtMTIyLjcgNDBDOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDBTNDE2IDkzLjEgNDE2IDIwOHpNMjQxIDExOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMSAzMUgxMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMjM4LjFsLTMxIDMxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyelwiXX0sYTE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGFjaG9ncmFwaC1kaWdpdGFsXCIsaWNvbjpbNjQwLDUxMixbXCJkaWdpdGFsLXRhY2hvZ3JhcGhcIl0sXCJmNTY2XCIsXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDU3NmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTMyIDY0SDMyMGMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAzNjhjMC04LjggNy4yLTE2IDE2LTE2SDMzNmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2em0zMjAgMGMwLTguOCA3LjItMTYgMTYtMTZINTYwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2ek04MCAzMjBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6bTgwLTE2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6bTQ4IDE2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2em04MC0xNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em00OCAxNmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNnpcIl19LG9jPWExLG5jPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInVzZXJzLXNsYXNoXCIsaWNvbjpbNjQwLDUxMixbXSxcImUwNzNcIixcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ0MC42IDMyMEg2MTguN2MxMS44IDAgMjEuMy05LjYgMjEuMy0yMS4zQzY0MCAyMzkuOCA1OTIuMiAxOTIgNTMzLjMgMTkySDQ5MC43Yy0xNS45IDAtMzEgMy41LTQ0LjYgOS43YzEuMyA3LjIgMS45IDE0LjcgMS45IDIyLjNjMCAzMC4yLTEwLjUgNTgtMjggNzkuOWwtMjUuMi0xOS43QzQwOC4xIDI2Ny43IDQxNiAyNDYuOCA0MTYgMjI0YzAtNTMtNDMtOTYtOTYtOTZjLTMxLjEgMC01OC43IDE0LjgtNzYuMyAzNy43bC00MC42LTMxLjhjMTMtMTQuMiAyMC45LTMzLjEgMjAuOS01My45YzAtNDQuMi0zNS44LTgwLTgwLTgwQzExNi4zIDAgOTEuOSAxNC4xIDc3LjUgMzUuNUwzOC44IDUuMXpNMTA2LjcgMTkyQzQ3LjggMTkyIDAgMjM5LjggMCAyOTguN0MwIDMxMC40IDkuNiAzMjAgMjEuMyAzMjBIMjM0LjdjLjIgMCAuNCAwIC43IDBjLTIwLjYtMTguMi0zNS4yLTQyLjgtNDAuOC03MC44TDEyMS44IDE5MkgxMDYuN3pNMjYxLjMgMzUyQzE4Ny43IDM1MiAxMjggNDExLjcgMTI4IDQ4NS4zYzAgMTQuNyAxMS45IDI2LjcgMjYuNyAyNi43SDQ4NS4zYzEwLjUgMCAxOS41LTYgMjMuOS0xNC44TDMyNC45IDM1MkgyNjEuM3pNNTEyIDE2MGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHMzNS44IDgwIDgwIDgwelwiXX0sSGM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2xvdmVyXCIsaWNvbjpbNDQ4LDUxMixbXSxcImUxMzlcIixcIk0xNzMuMyAzMkMxMzkuNCAzMiAxMTIgNTkuNCAxMTIgOTMuM3Y0LjljMCAxMiAzLjMgMjMuNyA5LjQgMzRsMTguOCAzMS4zYzEuMSAxLjggMS4yIDMuMSAxIDQuMmMtLjIgMS4yLS44IDIuNS0yIDMuNnMtMi40IDEuOC0zLjYgMmMtMSAuMi0yLjQgLjEtNC4yLTFsLTMxLjMtMTguOGMtMTAuMy02LjItMjItOS40LTM0LTkuNEg2MS4zQzI3LjQgMTQ0IDAgMTcxLjQgMCAyMDUuM2MwIDE2LjIgNi41IDMxLjggMTcuOSA0My4zbDEuMiAxLjJjMy40IDMuNCAzLjQgOSAwIDEyLjRsLTEuMiAxLjJDNi41IDI3NC45IDAgMjkwLjUgMCAzMDYuN0MwIDM0MC42IDI3LjQgMzY4IDYxLjMgMzY4aDQuOWMxMiAwIDIzLjctMy4zIDM0LTkuNGwzMS4zLTE4LjhjMS44LTEuMSAzLjEtMS4yIDQuMi0xYzEuMiAuMiAyLjUgLjggMy42IDJzMS44IDIuNCAyIDMuNmMuMiAxIC4xIDIuNC0xIDQuMmwtMTguOCAzMS4zYy02LjIgMTAuMy05LjQgMjItOS40IDM0djQuOWMwIDMzLjggMjcuNCA2MS4zIDYxLjMgNjEuM2MxNi4yIDAgMzEuOC02LjUgNDMuMy0xNy45bDEuMi0xLjJjMy40LTMuNCA5LTMuNCAxMi40IDBsMS4yIDEuMmMxMS41IDExLjUgMjcuMSAxNy45IDQzLjMgMTcuOWMzMy44IDAgNjEuMy0yNy40IDYxLjMtNjEuM3YtNC45YzAtMTItMy4zLTIzLjctOS40LTM0bC0xOC44LTMxLjNjLTEuMS0xLjgtMS4yLTMuMS0xLTQuMmMuMi0xLjIgLjgtMi41IDItMy42czIuNC0xLjggMy42LTJjMS0uMiAyLjQtLjEgNC4yIDFsMzEuMyAxOC44YzEwLjMgNi4yIDIyIDkuNCAzNCA5LjRoNC45YzMzLjggMCA2MS4zLTI3LjQgNjEuMy02MS4zYzAtMTYuMi02LjUtMzEuOC0xNy45LTQzLjNsLTEuMi0xLjJjLTMuNC0zLjQtMy40LTkgMC0xMi40bDEuMi0xLjJjMTEuNS0xMS41IDE3LjktMjcuMSAxNy45LTQzLjNjMC0zMy44LTI3LjQtNjEuMy02MS4zLTYxLjNoLTQuOWMtMTIgMC0yMy43IDMuMy0zNCA5LjRsLTMxLjMgMTguOGMtMS44IDEuMS0zLjEgMS4yLTQuMiAxYy0xLjItLjItMi41LS44LTMuNi0ycy0xLjgtMi40LTItMy42Yy0uMi0xLS4xLTIuNCAxLTQuMmwxOC44LTMxLjNjNi4yLTEwLjMgOS40LTIyIDkuNC0zNFY5My4zQzMzNiA1OS40IDMwOC42IDMyIDI3NC43IDMyYy0xNi4yIDAtMzEuOCA2LjUtNDMuMyAxNy45bC0xLjIgMS4yYy0zLjQgMy40LTkgMy40LTEyLjQgMGwtMS4yLTEuMkMyMDUuMSAzOC41IDE4OS41IDMyIDE3My4zIDMyelwiXX0sczE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicmVwbHlcIixpY29uOls1MTIsNTEyLFs2MTcxNCxcIm1haWwtcmVwbHlcIl0sXCJmM2U1XCIsXCJNMjA1IDM0LjhjMTEuNSA1LjEgMTkgMTYuNiAxOSAyOS4ydjY0SDMzNmM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NmMwIDExMy4zLTgxLjUgMTYzLjktMTAwLjIgMTc0LjFjLTIuNSAxLjQtNS4zIDEuOS04LjEgMS45Yy0xMC45IDAtMTkuNy04LjktMTkuNy0xOS43YzAtNy41IDQuMy0xNC40IDkuOC0xOS41YzkuNC04LjggMjIuMi0yNi40IDIyLjItNTYuN2MwLTUzLTQzLTk2LTk2LTk2SDIyNHY2NGMwIDEyLjYtNy40IDI0LjEtMTkgMjkuMnMtMjUgMy0zNC40LTUuNGwtMTYwLTE0NEMzLjkgMjI1LjcgMCAyMTcuMSAwIDIwOHMzLjktMTcuNyAxMC42LTIzLjhsMTYwLTE0NGM5LjQtOC41IDIyLjktMTAuNiAzNC40LTUuNHpcIl19LHpjPXMxLFZjPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN0YXItYW5kLWNyZXNjZW50XCIsaWNvbjpbNTc2LDUxMixbOTc3MF0sXCJmNjk5XCIsXCJNMzIgMjU2QzMyIDExNC42IDE0Ni42IDAgMjg4IDBjMzMgMCA2NC42IDYuMyA5My42IDE3LjdjNy40IDIuOSAxMS41IDEwLjcgOS44IDE4LjRzLTguOCAxMy0xNi43IDEyLjRjLTQuOC0uMy05LjctLjUtMTQuNi0uNWMtMTE0LjkgMC0yMDggOTMuMS0yMDggMjA4czkzLjEgMjA4IDIwOCAyMDhjNC45IDAgOS44LS4yIDE0LjYtLjVjNy45LS41IDE1IDQuNyAxNi43IDEyLjRzLTIuNCAxNS41LTkuOCAxOC40QzM1Mi42IDUwNS43IDMyMSA1MTIgMjg4IDUxMkMxNDYuNiA1MTIgMzIgMzk3LjQgMzIgMjU2ek00MDcuNCAxMzcuNGMzLjUtNy4xIDEzLjctNy4xIDE3LjIgMGwzMS41IDYzLjhjMS40IDIuOCA0LjEgNC44IDcuMiA1LjNsNzAuNCAxMC4yYzcuOSAxLjEgMTEgMTAuOCA1LjMgMTYuNGwtNTAuOSA0OS42Yy0yLjMgMi4yLTMuMyA1LjQtMi44IDguNWwxMiA3MC4xYzEuMyA3LjgtNi45IDEzLjgtMTMuOSAxMC4xbC02My0zMy4xYy0yLjgtMS41LTYuMS0xLjUtOC45IDBsLTYzIDMzLjFjLTcgMy43LTE1LjMtMi4zLTEzLjktMTAuMWwxMi03MC4xYy41LTMuMS0uNS02LjMtMi44LTguNUwyOTMgMjMzLjFjLTUuNy01LjYtMi42LTE1LjIgNS4zLTE2LjRsNzAuNC0xMC4yYzMuMS0uNSA1LjgtMi40IDcuMi01LjNsMzEuNS02My44elwiXX0sbWM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaG91c2UtZmlyZVwiLGljb246WzY0MCw1MTIsW10sXCJlNTBjXCIsXCJNMjg4IDM1MC4xbDAgMS45SDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjQgMjRjMCAyMi4xLTE3LjkgNDAtNDAgNDBIMTYwIDEyOC4xYy0xLjUgMC0zLS4xLTQuNS0uMmMtMS4yIC4xLTIuNCAuMi0zLjYgLjJIMTA0Yy0yMi4xIDAtNDAtMTcuOS00MC00MFYzNjBjMC0uOSAwLTEuOSAuMS0yLjhWMjg3LjZIMzJjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDQ0Ny4zIDEyOC4xYy0xMi4zLTEtMjUgMy0zNC44IDExLjdjLTM1LjQgMzEuNi02NS42IDY3LjctODcuMyAxMDIuOEMzMDQuMyAyNzYuNSAyODggMzE0LjkgMjg4IDM1MC4xek00NTMuNSAxNjMuOGMxOS43IDE3LjggMzguMiAzNyA1NS41IDU3LjdjNy45LTkuOSAxNi44LTIwLjcgMjYuNS0yOS41YzUuNi01LjEgMTQuNC01LjEgMjAgMGMyNC43IDIyLjcgNDUuNiA1Mi43IDYwLjQgODEuMWMxNC41IDI4IDI0LjIgNTYuNyAyNC4yIDc2LjlDNjQwIDQzNy45IDU2OC43IDUxMiA0ODAgNTEyYy04OS43IDAtMTYwLTc0LjItMTYwLTE2MS45YzAtMjYuNCAxMi43LTU4LjYgMzIuNC05MC42YzIwLTMyLjQgNDguMS02Ni4xIDgxLjQtOTUuOGM1LjYtNSAxNC4yLTUgMTkuOCAwek01MzAgNDMzYzMwLTIxIDM4LTYzIDIwLTk2Yy0yLTQtNC04LTctMTJsLTM2IDQycy01OC03NC02Mi03OWMtMzAgMzctNDUgNTgtNDUgODJjMCA0OSAzNiA3OCA4MSA3OGMxOCAwIDM0LTUgNDktMTV6XCJdfSxlMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzcXVhcmUtbWludXNcIixpY29uOls0NDgsNTEyLFs2MTc2NyxcIm1pbnVzLXNxdWFyZVwiXSxcImYxNDZcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTg4IDIwMEgyOTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMTUyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0elwiXX0sdmM9ZTEsTWM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGVsaWNvcHRlclwiLGljb246WzY0MCw1MTIsWzEyODY0MV0sXCJmNTMzXCIsXCJNMTI4IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMySDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODR2NjRoMzJjODguNCAwIDE2MCA3MS42IDE2MCAxNjB2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzg0IDMwNGMtMTAuMSAwLTE5LjYtNC43LTI1LjYtMTIuOEwxOTIgMjU2IDQ3LjIgMTk4LjFjLTkuNS0zLjgtMTYuNy0xMi0xOS4yLTIyTDUgODMuOUMyLjQgNzMuOCAxMC4xIDY0IDIwLjUgNjRINDhjMTAuMSAwIDE5LjYgNC43IDI1LjYgMTIuOEwxMTIgMTI4SDMyMFY2NEgxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0zODQgMzIwSDUxMlYyODhjMC01My00My05Ni05Ni05NkgzODRWMzIwek02MzAuNiA0MjUuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMy45IDMuOWMtMjQgMjQtNTYuNiAzNy41LTkwLjUgMzcuNUgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINTM2LjJjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdsMy45LTMuOWMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHpcIl19LHRjPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNvbXBhc3NcIixpY29uOls1MTIsNTEyLFsxMjk1MTddLFwiZjE0ZVwiLFwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJ6bTUwLjctMTg2LjlMMTYyLjQgMzgwLjZjLTE5LjQgNy41LTM4LjUtMTEuNi0zMS0zMWw1NS41LTE0NC4zYzMuMy04LjUgOS45LTE1LjEgMTguNC0xOC40bDE0NC4zLTU1LjVjMTkuNC03LjUgMzguNSAxMS42IDMxIDMxTDMyNS4xIDMwNi43Yy0zLjIgOC41LTkuOSAxNS4xLTE4LjQgMTguNHpNMjg4IDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6XCJdfSxmMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzcXVhcmUtY2FyZXQtZG93blwiLGljb246WzQ0OCw1MTIsW1wiY2FyZXQtc3F1YXJlLWRvd25cIl0sXCJmMTUwXCIsXCJNMzg0IDQ4MGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45czEyLjUtMTQuNCAyMi0xNC40bDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6XCJdfSxoYz1mMSxDYz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLWNpcmNsZS1xdWVzdGlvblwiLGljb246WzU3Niw1MTIsW10sXCJlNGVmXCIsXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4em00OCAzODRjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHMtNjQuNSAxNDQtMTQ0IDE0NHptMC00OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0ek0zNjggMzIxLjZWMzI4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ2LTYuNGMwLTUuMyA0LjMtOS42IDkuNi05LjZoNDAuNWM3LjcgMCAxMy45IDYuMiAxMy45IDEzLjljMCA1LjItMi45IDkuOS03LjQgMTIuM2wtMzIgMTYuOGMtNS4zIDIuOC04LjYgOC4yLTguNiAxNC4yVjM4NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2di01LjFsMjMuNS0xMi4zYzE1LjEtNy45IDI0LjUtMjMuNiAyNC41LTQwLjZjMC0yNS40LTIwLjYtNDUuOS00NS45LTQ1LjlINDA5LjZjLTIzIDAtNDEuNiAxOC42LTQxLjYgNDEuNnpcIl19LExjPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxhcHRvcC1jb2RlXCIsaWNvbjpbNjQwLDUxMixbXSxcImY1ZmNcIixcIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NEg1MTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzUySDUxMlY5NkgxMjhWMzUySDY0Vjk2ek0wIDQwMy4yQzAgMzkyLjYgOC42IDM4NCAxOS4yIDM4NEg2MjAuOGMxMC42IDAgMTkuMiA4LjYgMTkuMiAxOS4yYzAgNDIuNC0zNC40IDc2LjgtNzYuOCA3Ni44SDc2LjhDMzQuNCA0ODAgMCA0NDUuNiAwIDQwMy4yek0yODEgMjA5bC0zMSAzMSAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00OC00OGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek0zOTMgMTc1bDQ4IDQ4YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwelwiXX0scGM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3dhdGNoYm9va1wiLGljb246WzUxMiw1MTIsW10sXCJmNWMzXCIsXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBIMTYwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQxNmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NlYzMnpNMjIzLjYgNDI1LjljLjMtMy4zIC40LTYuNiAuNC05LjlWMTU0bDc1LjQtNzUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw5MC41IDkwLjVjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNMMjIzLjYgNDI1Ljl6TTE4Mi44IDUxMmwxOTItMTkySDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJIMTgyLjh6TTEyOCA2NEg2NHY2NGg2NFY2NHpNNjQgMTkydjY0aDY0VjE5Mkg2NHpNOTYgNDQwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6XCJdfSxkYz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwcmVzY3JpcHRpb24tYm90dGxlXCIsaWNvbjpbMzg0LDUxMixbXSxcImY0ODVcIixcIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJDMTQuMyA5NiAwIDgxLjcgMCA2NFYzMnptMzIgOTZIMzUyVjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg5NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNDE2SDE0NGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzMlYzMjBIMTQ0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDMyVjIyNEgxNDRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzJWMTI4elwiXX0scjE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmFyc1wiLGljb246WzQ0OCw1MTIsW1wibmF2aWNvblwiXSxcImYwYzlcIixcIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0SDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTAgMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyelwiXX0sdWM9cjEseGM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVvcGxlLWdyb3VwXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1MzNcIixcIk0xODQgODhjMCAzMC45LTI1LjEgNTYtNTYgNTZzLTU2LTI1LjEtNTYtNTZzMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2ek02NCAyNDUuN0M1NCAyNTYuOSA0OCAyNzEuOCA0OCAyODhzNiAzMS4xIDE2IDQyLjNWMjQ1Ljd6bTE0NC40LTQ5LjNDMTc4LjcgMjIyLjcgMTYwIDI2MS4yIDE2MCAzMDRjMCAzNC4zIDEyIDY1LjggMzIgOTAuNVY0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM4OS4yQzI2LjIgMzcxLjIgMCAzMzIuNyAwIDI4OGMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmgzMmMyNCAwIDQ2LjIgNy41IDY0LjQgMjAuM3pNNDQ4IDQxNlYzOTQuNWMyMC0yNC43IDMyLTU2LjIgMzItOTAuNWMwLTQyLjgtMTguNy04MS4zLTQ4LjQtMTA3LjdDNDQ5LjggMTgzLjUgNDcyIDE3NiA0OTYgMTc2aDMyYzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyYzAgNDQuNy0yNi4yIDgzLjItNjQgMTAxLjJWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTU2OCA4OGMwIDMwLjktMjUuMSA1Ni01NiA1NnMtNTYtMjUuMS01Ni01NnMyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZ6bTggMTU3Ljd2ODQuN2MxMC0xMS4zIDE2LTI2LjEgMTYtNDIuM3MtNi0zMS4xLTE2LTQyLjN6TTMyMCAxNjBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHpNMjQwIDMwNGMwIDE2LjIgNiAzMSAxNiA0Mi4zVjI2MS43Yy0xMCAxMS4zLTE2IDI2LjEtMTYgNDIuM3ptMTQ0LTQyLjN2ODQuN2MxMC0xMS4zIDE2LTI2LjEgMTYtNDIuM3MtNi0zMS4xLTE2LTQyLjN6TTQ0OCAzMDRjMCA0NC43LTI2LjIgODMuMi02NCAxMDEuMlY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MDUuMmMtMzcuOC0xOC02NC01Ni41LTY0LTEwMS4yYzAtNjEuOSA1MC4xLTExMiAxMTItMTEyaDMyYzYxLjkgMCAxMTIgNTAuMSAxMTIgMTEyelwiXX0sbDE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaG91cmdsYXNzLWVuZFwiLGljb246WzM4NCw1MTIsWzg5ODcsXCJob3VyZ2xhc3MtM1wiXSxcImYyNTNcIixcIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0Vjc1YzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMUwxNDYuNyAyNTYgNzguOSAzMjMuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN3YxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NCAzMjBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWNDM3YzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMUwyMzcuMyAyNTZsNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xVjY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMCA2NCAzMnpNOTYgNzVWNjRIMjg4Vjc1YzAgMjUuNS0xMC4xIDQ5LjktMjguMSA2Ny45TDE5MiAyMTAuN2wtNjcuOS02Ny45QzEwNi4xIDEyNC45IDk2IDEwMC40IDk2IDc1elwiXX0sZ2M9bDEsaTE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGVhcnQtY3JhY2tcIixpY29uOls1MTIsNTEyLFsxMjgxNDgsXCJoZWFydC1icm9rZW5cIl0sXCJmN2E5XCIsXCJNMTE5LjQgNDQuMWMyMy4zLTMuOSA0Ni44LTEuOSA2OC42IDUuM2w0OS44IDc3LjUtNzUuNCA3NS40Yy0xLjUgMS41LTIuNCAzLjYtMi4zIDUuOHMxIDQuMiAyLjYgNS43bDExMiAxMDRjMi45IDIuNyA3LjQgMi45IDEwLjUgLjNzMy44LTcgMS43LTEwLjRsLTYwLjQtOTguMSA5MC43LTc1LjZjMi42LTIuMSAzLjUtNS43IDIuNC04LjhMMjk2LjggNjEuOGMyOC41LTE2LjcgNjIuNC0yMy4yIDk1LjctMTcuNkM0NjEuNSA1NS42IDUxMiAxMTUuMiA1MTIgMTg1LjF2NS44YzAgNDEuNS0xNy4yIDgxLjItNDcuNiAxMDkuNUwyODMuNyA0NjkuMWMtNy41IDctMTcuNCAxMC45LTI3LjcgMTAuOXMtMjAuMi0zLjktMjcuNy0xMC45TDQ3LjYgMzAwLjRDMTcuMiAyNzIuMSAwIDIzMi40IDAgMTkwLjl2LTUuOGMwLTY5LjkgNTAuNS0xMjkuNSAxMTkuNC0xNDF6XCJdfSxTYz1pMSxvMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzcXVhcmUtdXAtcmlnaHRcIixpY29uOls0NDgsNTEyLFs4NTk5LFwiZXh0ZXJuYWwtbGluay1zcXVhcmUtYWx0XCJdLFwiZjM2MFwiLFwiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDM4NHpNMTYwIDE2MGMtNi41IDAtMTIuMyAzLjktMTQuOCA5LjlzLTEuMSAxMi45IDMuNSAxNy40bDQwIDQwLTcxIDcxQzExNCAzMDIgMTEyIDMwNi45IDExMiAzMTJzMiAxMCA1LjcgMTMuN2wzNi43IDM2LjdjMy42IDMuNiA4LjUgNS43IDEzLjcgNS43czEwLTIgMTMuNy01LjdsNzEtNzEgNDAgNDBjNC42IDQuNiAxMS41IDUuOSAxNy40IDMuNXM5LjktOC4zIDkuOS0xNC44VjE3NmMwLTguOC03LjItMTYtMTYtMTZIMTYwelwiXX0sTmM9bzEsbjE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1raXNzLWJlYW1cIixpY29uOls1MTIsNTEyLFsxMjg1MzcsXCJraXNzLWJlYW1cIl0sXCJmNTk3XCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnptNDguNy0xOTguM2M0LjMgNS4xIDcuMyAxMS40IDcuMyAxOC4zcy0zLjEgMTMuMi03LjMgMTguM2MtNC4zIDUuMi0xMC4xIDkuNy0xNi43IDEzLjRjLTIuNyAxLjUtNS43IDMtOC43IDQuM2MzLjEgMS4zIDYgMi43IDguNyA0LjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjRjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3MtMy4xIDEzLjItNy4zIDE4LjNjLTQuMyA1LjItMTAuMSA5LjctMTYuNyAxMy40QzI3NC43IDQ0My4xIDI1Ny40IDQ0OCAyNDAgNDQ4Yy0zLjYgMC02LjgtMi41LTcuNy02cy42LTcuMiAzLjgtOWwwIDAgMCAwIDAgMCAwIDAgLjItLjFjLjItLjEgLjUtLjMgLjktLjVjLjgtLjUgMi0xLjIgMy40LTIuMWMyLjgtMS45IDYuNS00LjUgMTAuMi03LjZjMy43LTMuMSA3LjItNi42IDkuNi0xMC4xYzIuNS0zLjUgMy41LTYuNCAzLjUtOC42cy0xLTUtMy41LTguNmMtMi41LTMuNS01LjktNi45LTkuNi0xMC4xYy0zLjctMy4xLTcuNC01LjctMTAuMi03LjZjLTEuNC0uOS0yLjYtMS42LTMuNC0yLjFjLS40LS4yLS43LS40LS45LS41bC0uMi0uMSAwIDAgMCAwIDAgMGMtMi41LTEuNC00LjEtNC4xLTQuMS03czEuNi01LjYgNC4xLTdsMCAwIDAgMCAwIDAgMCAwIDAgMCAuMi0uMSAuMy0uMiAuNi0uNGMuOC0uNSAyLTEuMiAzLjQtMi4xYzIuOC0xLjkgNi41LTQuNSAxMC4yLTcuNmMzLjctMy4xIDcuMi02LjYgOS42LTEwLjFjMi41LTMuNSAzLjUtNi40IDMuNS04LjZzLTEtNS0zLjUtOC42Yy0yLjUtMy41LTUuOS02LjktOS42LTEwLjFjLTMuNy0zLjEtNy40LTUuNy0xMC4yLTcuNmMtMS40LS45LTIuNi0xLjYtMy40LTIuMWwtLjQtLjMtLjUtLjMtLjItLjEgMCAwIDAgMCAwIDBjLTMuMi0xLjgtNC43LTUuNS0zLjgtOXM0LjEtNiA3LjctNmMxNy40IDAgMzQuNyA0LjkgNDcuOSAxMi4zYzYuNiAzLjcgMTIuNSA4LjIgMTYuNyAxMy40em0tODcuMS04NC45bDAgMCAwIDAtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjIgMCAwIDAgMCAwIDBjLTIuMSAyLjgtNS43IDMuOS04LjkgMi44cy01LjUtNC4xLTUuNS03LjZjMC0xNy45IDYuNy0zNS42IDE2LjYtNDguOGM5LjgtMTMgMjMuOS0yMy4yIDM5LjQtMjMuMnMyOS42IDEwLjIgMzkuNCAyMy4yYzkuOSAxMy4yIDE2LjYgMzAuOSAxNi42IDQ4LjhjMCAzLjQtMi4yIDYuNS01LjUgNy42cy02LjkgMC04LjktMi44bDAgMCAwIDB6bTE2MCAwbDAgMC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMiAwIDAgMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhsMCAwIDAgMCAwIDB6XCJdfSx3Yz1uMSxrYz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxtXCIsaWNvbjpbNTEyLDUxMixbMTI3OTAyXSxcImYwMDhcIixcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2ek00OCAzNjh2MzJjMCA4LjggNy4yIDE2IDE2IDE2SDk2YzguOCAwIDE2LTcuMiAxNi0xNlYzNjhjMC04LjgtNy4yLTE2LTE2LTE2SDY0Yy04LjggMC0xNiA3LjItMTYgMTZ6bTM2OC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMzY4YzAtOC44LTcuMi0xNi0xNi0xNkg0MTZ6TTQ4IDI0MHYzMmMwIDguOCA3LjIgMTYgMTYgMTZIOTZjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZINjRjLTguOCAwLTE2IDcuMi0xNiAxNnptMzY4LTE2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDQxNnpNNDggMTEydjMyYzAgOC44IDcuMiAxNiAxNiAxNkg5NmM4LjggMCAxNi03LjIgMTYtMTZWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkg2NGMtOC44IDAtMTYgNy4yLTE2IDE2ek00MTYgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZINDE2ek0xNjAgMTI4djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMlYxMjhjMC0xNy43LTE0LjMtMzItMzItMzJIMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDE5MnpcIl19LGJjPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJ1bGVyLWhvcml6b250YWxcIixpY29uOls2NDAsNTEyLFtdLFwiZjU0N1wiLFwiTTAgMzM2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDU0NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTYwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwIDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MC02NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OEwwIDMzNnpcIl19LEFjPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlb3BsZS1yb2JiZXJ5XCIsaWNvbjpbNTc2LDUxMixbXSxcImU1MzZcIixcIk00ODguMiA1OS4xQzQ3OC4xIDk5LjYgNDQxLjcgMTI4IDQwMCAxMjhzLTc4LjEtMjguNC04OC4yLTY4LjlMMzAzIDI0LjJDMjk4LjggNy4xIDI4MS40LTMuMyAyNjQuMiAxUzIzNi43IDIyLjYgMjQxIDM5LjhsOC43IDM0LjljMTEgNDQgNDAuMiA3OS42IDc4LjMgOTkuNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNTJoMTZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTc0LjNjMzguMS0yMCA2Ny4zLTU1LjYgNzguMy05OS42TDU1OSAzOS44YzQuMy0xNy4xLTYuMS0zNC41LTIzLjMtMzguOFM1MDEuMiA3LjEgNDk3IDI0LjJsLTguNyAzNC45ek00MDAgOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHpNODAgOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhTMzIgMjEuNSAzMiA0OHMyMS41IDQ4IDQ4IDQ4em0tOCAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjR2OTZsMCAuNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNTJIODhWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjUyLjdsMTMgMjAuNWM1LjkgOS4yIDE2LjEgMTQuOSAyNyAxNC45aDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDIwOS42bC0zNy40LTU4LjlDMTU3LjYgMTQyIDEzMi4xIDEyOCAxMDQuNyAxMjhINzJ6XCJdfSxCYz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsaWdodGJ1bGJcIixpY29uOlszODQsNTEyLFsxMjgxNjFdLFwiZjBlYlwiLFwiTTI3MiAzODRjOS42LTMxLjkgMjkuNS01OS4xIDQ5LjItODYuMmwwIDBjNS4yLTcuMSAxMC40LTE0LjIgMTUuNC0yMS40YzE5LjgtMjguNSAzMS40LTYzIDMxLjQtMTAwLjNDMzY4IDc4LjggMjg5LjIgMCAxOTIgMFMxNiA3OC44IDE2IDE3NmMwIDM3LjMgMTEuNiA3MS45IDMxLjQgMTAwLjNjNSA3LjIgMTAuMiAxNC4zIDE1LjQgMjEuNGwwIDBjMTkuOCAyNy4xIDM5LjcgNTQuNCA0OS4yIDg2LjJIMjcyek0xOTIgNTEyYzQ0LjIgMCA4MC0zNS44IDgwLTgwVjQxNkgxMTJ2MTZjMCA0NC4yIDM1LjggODAgODAgODB6TTExMiAxNzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZjMC02MS45IDUwLjEtMTEyIDExMi0xMTJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZjLTQ0LjIgMC04MCAzNS44LTgwIDgwelwiXX0sVGM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FyZXQtbGVmdFwiLGljb246WzI1Niw1MTIsW10sXCJmMGQ5XCIsXCJNOS40IDI3OC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxMjgtMTI4YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45czE5LjggMTYuNiAxOS44IDI5LjZsMCAyNTZjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTEyOC0xMjh6XCJdfSxIMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtZXhjbGFtYXRpb25cIixpY29uOls1MTIsNTEyLFtcImV4Y2xhbWF0aW9uLWNpcmNsZVwiXSxcImYwNmFcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyem0wLTM4NGMxMy4zIDAgMjQgMTAuNyAyNCAyNFYyNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0em0zMiAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXX0seWM9SDEsUGM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2Nob29sLWNpcmNsZS14bWFya1wiLGljb246WzY0MCw1MTIsW10sXCJlNTZkXCIsXCJNMzM3LjggNS40QzMyNy0xLjggMzEzLTEuOCAzMDIuMiA1LjRsLTEzOSA5Mi43TDM3LjYgMTI2QzE1LjYgMTMwLjkgMCAxNTAuMyAwIDE3Mi44VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgzMjB2MEgyNTZWNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0bC4zIDBoLjVjMy40LTM3LjcgMTguNy03Mi4xIDQyLjItOTkuMUMzNTAuMiAyNjAgMzM1LjYgMjY0IDMyMCAyNjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4czM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDE4LjMtNS42IDM1LjMtMTUuMSA0OS40YzI5LTIxIDY0LjYtMzMuNCAxMDMuMS0zMy40YzU5LjUgMCAxMTIuMSAyOS42IDE0NCA3NC44VjE3Mi44YzAtMjIuNS0xNS42LTQyLTM3LjYtNDYuOUw0NzYuOCA5OC4xIDMzNy44IDUuNHpNOTYgMTkyaDMyYzguOCAwIDE2IDcuMiAxNiAxNnY2NGMwIDguOC03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDhjMC04LjggNy4yLTE2IDE2LTE2em0wIDEyOGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnpNMzIwIDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzMzZWMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnpNNDk2IDUxMmM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NHMtMTQ0IDY0LjUtMTQ0IDE0NHM2NC41IDE0NCAxNDQgMTQ0em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0OTYgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0NzMuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ5NiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDUxOC42IDM2OHpcIl19LHoxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93LXJpZ2h0LWZyb20tYnJhY2tldFwiLGljb246WzU3Niw1MTIsW1wic2lnbi1vdXRcIl0sXCJmMDhiXCIsXCJNNTM0LjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQzNC43IDIyNCAyMjQgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6TTE5MiA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMGMtNTMgMC05NiA0My05NiA5NmwwIDI1NmMwIDUzIDQzIDk2IDk2IDk2bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDB6XCJdfSxGYz16MSxWMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtY2hldnJvbi1kb3duXCIsaWNvbjpbNTEyLDUxMixbXCJjaGV2cm9uLWNpcmNsZS1kb3duXCJdLFwiZjEzYVwiLFwiTTI1NiAwQzExNC42IDAgMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnMyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwek0xMzUgMjQxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsODcgODcgODctODdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDI3MyAzNDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDEzNSAyNDF6XCJdfSxEYz1WMSxtMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1bmxvY2sta2V5aG9sZVwiLGljb246WzQ0OCw1MTIsW1widW5sb2NrLWFsdFwiXSxcImYxM2VcIixcIk0yMjQgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwdjQ4SDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI1NmMwLTM1LjMgMjguNy02NCA2NC02NEg4MFYxNDRDODAgNjQuNSAxNDQuNSAwIDIyNCAwYzU3LjUgMCAxMDcgMzMuNyAxMzAuMSA4Mi4zYzcuNiAxNiAuOCAzNS4xLTE1LjIgNDIuNnMtMzUuMSAuOC00Mi42LTE1LjJDMjgzLjQgODIuNiAyNTUuOSA2NCAyMjQgNjR6bTMyIDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoNjR6XCJdfSxSYz1tMSxVYz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjbG91ZC1zaG93ZXJzLWhlYXZ5XCIsaWNvbjpbNTc2LDUxMixbXSxcImY3NDBcIixcIk0xMjggMzIwYy01MyAwLTk2LTQzLTk2LTk2YzAtNDIuNSAyNy42LTc4LjYgNjUuOS05MS4yQzk2LjcgMTI2LjEgOTYgMTE5LjEgOTYgMTEyQzk2IDUwLjEgMTQ2LjEgMCAyMDggMGM0My4xIDAgODAuNSAyNC4zIDk5LjIgNjBjMTQuNy0xNy4xIDM2LjUtMjggNjAuOC0yOGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDUuNS0uNiAxMC44LTEuNiAxNmMuNSAwIDEuMSAwIDEuNiAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2SDEyOHptLTE0LjUgMzMuOWMxMi4yIDUuMiAxNy44IDE5LjMgMTIuNiAzMS41bC00OCAxMTJjLTUuMiAxMi4yLTE5LjMgMTcuOC0zMS41IDEyLjZzLTE3LjgtMTkuMy0xMi42LTMxLjVsNDgtMTEyYzUuMi0xMi4yIDE5LjMtMTcuOCAzMS41LTEyLjZ6bTEyMCAwYzEyLjIgNS4yIDE3LjggMTkuMyAxMi42IDMxLjVsLTQ4IDExMmMtNS4yIDEyLjItMTkuMyAxNy44LTMxLjUgMTIuNnMtMTcuOC0xOS4zLTEyLjYtMzEuNWw0OC0xMTJjNS4yLTEyLjIgMTkuMy0xNy44IDMxLjUtMTIuNnptMjQ0LjYgMzEuNWwtNDggMTEyYy01LjIgMTIuMi0xOS4zIDE3LjgtMzEuNSAxMi42cy0xNy44LTE5LjMtMTIuNi0zMS41bDQ4LTExMmM1LjItMTIuMiAxOS4zLTE3LjggMzEuNS0xMi42czE3LjggMTkuMyAxMi42IDMxLjV6TTM0NS41IDM1My45YzEyLjIgNS4yIDE3LjggMTkuMyAxMi42IDMxLjVsLTQ4IDExMmMtNS4yIDEyLjItMTkuMyAxNy44LTMxLjUgMTIuNnMtMTcuOC0xOS4zLTEyLjYtMzEuNWw0OC0xMTJjNS4yLTEyLjIgMTkuMy0xNy44IDMxLjUtMTIuNnpcIl19LHYxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhlYWRwaG9uZXMtc2ltcGxlXCIsaWNvbjpbNTEyLDUxMixbXCJoZWFkcGhvbmVzLWFsdFwiXSxcImY1OGZcIixcIk0yNTYgODBDMTQxLjEgODAgNDggMTczLjEgNDggMjg4VjM5MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyODhDMCAxNDYuNiAxMTQuNiAzMiAyNTYgMzJzMjU2IDExNC42IDI1NiAyNTZWMzkyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjI4OGMwLTExNC45LTkzLjEtMjA4LTIwOC0yMDh6TTgwIDM1MmMwLTM1LjMgMjguNy02NCA2NC02NGgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYzNTJ6bTI4OC02NGMzNS4zIDAgNjQgMjguNyA2NCA2NHY2NGMwIDM1LjMtMjguNyA2NC02NCA2NEgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmgxNnpcIl19LHFjPXYxLEdjPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNpdGVtYXBcIixpY29uOls1NzYsNTEyLFtdLFwiZjBlOFwiLFwiTTIwOCA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGg2NGMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGgtOHY0MEg0NjRjMzAuOSAwIDU2IDI1LjEgNTYgNTZ2MzJoOGMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0NjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM2OGMwLTI2LjUgMjEuNS00OCA0OC00OGg4VjI4OGMwLTQuNC0zLjYtOC04LThIMzEydjQwaDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NjRjMCAyNi41LTIxLjUgNDgtNDggNDhIMjU2Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzNjhjMC0yNi41IDIxLjUtNDggNDgtNDhoOFYyODBIMTEyYy00LjQgMC04IDMuNi04IDh2MzJoOGMyNi41IDAgNDggMjEuNSA0OCA0OHY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzY4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDhWMjg4YzAtMzAuOSAyNS4xLTU2IDU2LTU2SDI2NFYxOTJoLThjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjgwelwiXX0sTTE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2lyY2xlLWRvbGxhci10by1zbG90XCIsaWNvbjpbNTEyLDUxMixbXCJkb25hdGVcIl0sXCJmNGI5XCIsXCJNMzI2LjcgNDAzLjdjLTIyLjEgOC00NS45IDEyLjMtNzAuNyAxMi4zcy00OC43LTQuNC03MC43LTEyLjNjLS4zLS4xLS41LS4yLS44LS4zYy0zMC0xMS01Ni44LTI4LjctNzguNi01MS40QzcwIDMxNC42IDQ4IDI2My45IDQ4IDIwOEM0OCA5My4xIDE0MS4xIDAgMjU2IDBTNDY0IDkzLjEgNDY0IDIwOGMwIDU1LjktMjIgMTA2LjYtNTcuOSAxNDRjLTEgMS0yIDIuMS0zIDMuMWMtMjEuNCAyMS40LTQ3LjQgMzguMS03Ni4zIDQ4LjZ6TTI1NiA5MS45Yy0xMS4xIDAtMjAuMSA5LTIwLjEgMjAuMXY2Yy01LjYgMS4yLTEwLjkgMi45LTE1LjkgNS4xYy0xNSA2LjgtMjcuOSAxOS40LTMxLjEgMzcuN2MtMS44IDEwLjItLjggMjAgMy40IDI5YzQuMiA4LjggMTAuNyAxNSAxNy4zIDE5LjVjMTEuNiA3LjkgMjYuOSAxMi41IDM4LjYgMTZsMi4yIC43YzEzLjkgNC4yIDIzLjQgNy40IDI5LjMgMTEuN2MyLjUgMS44IDMuNCAzLjIgMy44IDRjLjMgLjggLjkgMi42IC4yIDYuN2MtLjYgMy41LTIuNSA2LjQtOCA4LjhjLTYuMSAyLjYtMTYgMy45LTI4LjggMS45Yy02LTEtMTYuNy00LjYtMjYuMi03LjlsMCAwIDAgMCAwIDBjLTIuMi0uNy00LjMtMS41LTYuNC0yLjFjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuN3MyLjIgMjEuOCAxMi43IDI1LjNjMS4yIC40IDIuNyAuOSA0LjQgMS41YzcuOSAyLjcgMjAuMyA2LjkgMjkuOCA5LjFWMzA0YzAgMTEuMSA5IDIwLjEgMjAuMSAyMC4xczIwLjEtOSAyMC4xLTIwLjF2LTUuNWM1LjQtMSAxMC41LTIuNSAxNS40LTQuNmMxNS43LTYuNyAyOC40LTE5LjcgMzEuNi0zOC43YzEuOC0xMC40IDEtMjAuMy0zLTI5LjRjLTMuOS05LTEwLjItMTUuNi0xNi45LTIwLjVjLTEyLjItOC44LTI4LjMtMTMuNy00MC40LTE3LjRsLS44LS4yYy0xNC4yLTQuMy0yMy44LTcuMy0yOS45LTExLjRjLTIuNi0xLjgtMy40LTMtMy42LTMuNWMtLjItLjMtLjctMS42LS4xLTVjLjMtMS45IDEuOS01LjIgOC4yLTguMWM2LjQtMi45IDE2LjQtNC41IDI4LjYtMi42YzQuMyAuNyAxNy45IDMuMyAyMS43IDQuM2MxMC43IDIuOCAyMS42LTMuNSAyNC41LTE0LjJzLTMuNS0yMS42LTE0LjItMjQuNWMtNC40LTEuMi0xNC40LTMuMi0yMS00LjRWMTEyYzAtMTEuMS05LTIwLjEtMjAuMS0yMC4xek00OCAzNTJINjRjMTkuNSAyNS45IDQ0IDQ3LjcgNzIuMiA2NEg2NHYzMkgyNTYgNDQ4VjQxNkgzNzUuOGMyOC4yLTE2LjMgNTIuOC0zOC4xIDcyLjItNjRoMTZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQwMGMwLTI2LjUgMjEuNS00OCA0OC00OHpcIl19LFdjPU0xLEVjPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1lbW9yeVwiLGljb246WzU3Niw1MTIsW10sXCJmNTM4XCIsXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjh2Ny40YzAgNi44IDQuNCAxMi42IDEwLjEgMTYuM0MyMy4zIDE2MC4zIDMyIDE3NS4xIDMyIDE5MnMtOC43IDMxLjctMjEuOSA0MC4zQzQuNCAyMzYgMCAyNDEuOCAwIDI0OC42VjMyMEg1NzZWMjQ4LjZjMC02LjgtNC40LTEyLjYtMTAuMS0xNi4zQzU1Mi43IDIyMy43IDU0NCAyMDguOSA1NDQgMTkyczguNy0zMS43IDIxLjktNDAuM2M1LjctMy43IDEwLjEtOS41IDEwLjEtMTYuM1YxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTU3NiAzNTJIMHY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg4MFY0MTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnYzMmg5NlY0MTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnYzMmg5NlY0MTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnYzMmg5NlY0MTZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnYzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJ6TTE5MiAxNjB2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwdjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xMjggMHY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpcIl19LEljPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJvYWQtc3Bpa2VzXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1NjhcIixcIk02NCAxMTYuOGMwLTE1LjggMjAuNS0yMiAyOS4zLTguOUwxOTIgMjU2VjExNi44YzAtMTUuOCAyMC41LTIyIDI5LjMtOC45TDMyMCAyNTZWMTE2LjhjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlMNDQ4IDI1NlYxMTYuOGMwLTE1LjggMjAuNS0yMiAyOS4zLTguOUw2MDYuOCAzMDIuMmMxNC4yIDIxLjMtMS4xIDQ5LjctMjYuNiA0OS43SDUxMiA0NDggMzg0IDMyMCAyNTYgMTkyIDY0VjExNi44ek0zMiAzODRINjA4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXX0sT2M9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlyZS1idXJuZXJcIixpY29uOls2NDAsNTEyLFtdLFwiZTRmMVwiLFwiTTI5My41IDMuOGMxOS43IDE3LjggMzguMiAzNyA1NS41IDU3LjdjNy45LTkuOSAxNi44LTIwLjcgMjYuNS0yOS41YzUuNi01LjEgMTQuNC01LjEgMjAgMGMyNC43IDIyLjcgNDUuNiA1Mi43IDYwLjQgODEuMWMxNC41IDI4IDI0LjIgNTguOCAyNC4yIDc5QzQ4MCAyODAgNDA4LjcgMzUyIDMyMCAzNTJjLTg5LjcgMC0xNjAtNzIuMS0xNjAtMTU5LjhjMC0yNi40IDEyLjctNjAuNyAzMi40LTkyLjZjMjAtMzIuNCA0OC4xLTY2LjEgODEuNC05NS44YzIuOC0yLjUgNi40LTMuOCAxMC0zLjdjMy41IDAgNyAxLjMgOS44IDMuOHpNMzcwIDI3M2MzMC0yMSAzOC02MyAyMC05NmMtMi00LTQtOC03LTEybC0zNiA0MnMtNTgtNzQtNjItNzljLTMwIDM3LTQ1IDU4LTQ1IDgyYzAgNDkgMzYgNzggODEgNzhjMTggMCAzNC01IDQ5LTE1ek0zMiAyODhjMC0xNy43IDE0LjMtMzIgMzItMzJIOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ2NjRINTQ0VjMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyVjI4OHpNMzIwIDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0xNjAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek0xOTIgNDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdfSxYYz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmbGFnXCIsaWNvbjpbNTEyLDUxMixbMTI3OTg4LDYxNzI1XSxcImYwMjRcIixcIk02NCAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzJDMCAxNC4zIDE0LjMgMCAzMiAwUzY0IDE0LjMgNjQgMzJ6bTQwLjggMzAyLjhjLTMgLjktNiAxLjctOC44IDIuNlYxMy41QzEyMS41IDYuNCAxNTMgMCAxODQgMGMzNi41IDAgNjguMyA5LjEgOTUuNiAxNi45bDEuMyAuNEMzMDkuNCAyNS40IDMzMy4zIDMyIDM2MCAzMmMyNi44IDAgNTIuOS02LjggNzMtMTQuMWM5LjktMy42IDE3LjktNy4yIDIzLjQtOS44YzIuNy0xLjMgNC44LTIuNCA2LjItMy4xYy43LS40IDEuMS0uNiAxLjQtLjhsLjItLjFjOS45LTUuNiAyMi4xLTUuNiAzMS45IC4yUzUxMiAyMC42IDUxMiAzMlYyODhjMCAxMi4xLTYuOCAyMy4yLTE3LjcgMjguNkw0ODAgMjg4YzE0LjMgMjguNiAxNC4zIDI4LjYgMTQuMyAyOC42bDAgMCAwIDAtLjEgMC0uMiAuMS0uNyAuNGMtLjYgLjMtMS41IC43LTIuNSAxLjJjLTIuMiAxLTUuMiAyLjQtOSA0Yy03LjcgMy4zLTE4LjUgNy42LTMxLjUgMTEuOUM0MjQuNSAzNDIuOSAzODguOCAzNTIgMzUyIDM1MmMtMzcgMC02NS4yLTkuNC04OS0xNy4zbC0xLS4zYy0yNC04LTQzLjctMTQuNC03MC0xNC40Yy0yNy41IDAtNjAuMSA3LTg3LjIgMTQuOHpcIl19LFFjPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhbnVraWFoXCIsaWNvbjpbNjQwLDUxMixbMTI4MzM0XSxcImY2ZTZcIixcIk0zMTQuMiAzLjNDMzA5LjEgMTIuMSAyOTYgMzYuNiAyOTYgNTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuN0MzMjQuNiAxLjIgMzIyLjQgMCAzMjAgMHMtNC42IDEuMi01LjggMy4zem0tMjg4IDQ4QzIxLjEgNjAuMSA4IDg0LjYgOCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuN0MzNi42IDQ5LjIgMzQuNCA0OCAzMiA0OHMtNC42IDEuMi01LjggMy4zek04OCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuN2MtMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0MxMDEuMSA2MC4xIDg4IDg0LjYgODggMTA0em04Mi4yLTUyLjdDMTY1LjEgNjAuMSAxNTIgODQuNiAxNTIgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6TTIxNiAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuN2MtMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0MyMjkuMSA2MC4xIDIxNiA4NC42IDIxNiAxMDR6TTM5NC4yIDUxLjNDMzg5LjEgNjAuMSAzNzYgODQuNiAzNzYgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjdjLTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6TTQ0MCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuN2MtMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0M0NTMuMSA2MC4xIDQ0MCA4NC42IDQ0MCAxMDR6bTgyLjItNTIuN0M1MTcuMSA2MC4xIDUwNCA4NC42IDUwNCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuN2MtMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM3pNNTg0IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43Yy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzU5Ny4xIDYwLjEgNTg0IDg0LjYgNTg0IDEwNHpNMTEyIDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2djk2IDE2aDMyVjI3MiAxNzZjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZ2OTYgMTZoMzJWMjcyIDE3NmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnY5NiAxNmgzMlYyNzIgMTc2YzAtOC44LTcuMi0xNi0xNi0xNnptMTYwIDBjLTguOCAwLTE2IDcuMi0xNiAxNnY5NiAxNmgzMlYyNzIgMTc2YzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2djk2IDE2aDMyVjI3MiAxNzZjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZ2OTYgMTZoMzJWMjcyIDE3NmMwLTguOC03LjItMTYtMTYtMTZ6TTM1MiAxNDRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzIwSDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2OTZjMCA1MyA0MyA5NiA5NiA5NkgyODh2NjRIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDMyMCA0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzUyVjM4NEg1NDRjNTMgMCA5Ni00MyA5Ni05NlYxOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyVjE0NHpcIl19LEtjPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZlYXRoZXJcIixpY29uOls1MTIsNTEyLFsxMjk3MThdLFwiZjUyZFwiLFwiTTI3OC41IDIxNS42TDIzIDQ3MWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU3LTU3aDY4YzQ5LjcgMCA5Ny45LTE0LjQgMTM5LTQxYzExLjEtNy4yIDUuNS0yMy03LjgtMjNjLTUuMSAwLTkuMi00LjEtOS4yLTkuMmMwLTQuMSAyLjctNy42IDYuNS04LjhsODEtMjQuM2MyLjUtLjggNC44LTIuMSA2LjctNGwyMi40LTIyLjRjMTAuMS0xMC4xIDIuOS0yNy4zLTExLjMtMjcuM2wtMzIuMiAwYy01LjEgMC05LjItNC4xLTkuMi05LjJjMC00LjEgMi43LTcuNiA2LjUtOC44bDExMi0zMy42YzQtMS4yIDcuNC0zLjkgOS4zLTcuN0M1MDYuNCAyMDcuNiA1MTIgMTg0LjEgNTEyIDE2MGMwLTQxLTE2LjMtODAuMy00NS4zLTEwOS4zbC01LjUtNS41QzQzMi4zIDE2LjMgMzkzIDAgMzUyIDBzLTgwLjMgMTYuMy0xMDkuMyA0NS4zTDEzOSAxNDlDOTEgMTk3IDY0IDI2Mi4xIDY0IDMzMHY1NS4zTDI1My42IDE5NS44YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwYzUuNCA1LjQgNi4xIDEzLjYgMi4yIDE5Ljh6XCJdfSx0MT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2b2x1bWUtbG93XCIsaWNvbjpbNDQ4LDUxMixbMTI4MjY0LFwidm9sdW1lLWRvd25cIl0sXCJmMDI3XCIsXCJNMzAxLjEgMzQuOEMzMTIuNiA0MCAzMjAgNTEuNCAzMjAgNjRWNDQ4YzAgMTIuNi03LjQgMjQtMTguOSAyOS4ycy0yNSAzLjEtMzQuNC01LjNMMTMxLjggMzUySDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYyMjRjMC0zNS4zIDI4LjctNjQgNjQtNjRoNjcuOEwyNjYuNyA0MC4xYzkuNC04LjQgMjIuOS0xMC40IDM0LjQtNS4zek00MTIuNiAxODEuNUM0MzQuMSAxOTkuMSA0NDggMjI1LjkgNDQ4IDI1NnMtMTMuOSA1Ni45LTM1LjQgNzQuNWMtMTAuMyA4LjQtMjUuNCA2LjgtMzMuOC0zLjVzLTYuOC0yNS40IDMuNS0zMy44QzM5My4xIDI4NC40IDQwMCAyNzEgNDAwIDI1NnMtNi45LTI4LjQtMTcuNy0zNy4zYy0xMC4zLTguNC0xMS44LTIzLjUtMy41LTMzLjhzMjMuNS0xMS44IDMzLjgtMy41elwiXX0samM9dDEsSmM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29tbWVudC1zbGFzaFwiLGljb246WzY0MCw1MTIsW10sXCJmNGIzXCIsXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w1MTIuOSAzNzYuN0M1NTIuMiAzNDAuMiA1NzYgMjkyLjMgNTc2IDI0MEM1NzYgMTI1LjEgNDYxLjQgMzIgMzIwIDMyYy02Ny43IDAtMTI5LjMgMjEuNC0xNzUuMSA1Ni4zTDM4LjggNS4xek02NCAyNDBjMCA0NS4xIDE3LjcgODYuOCA0Ny43IDEyMC45Yy0xLjkgMjQuNS0xMS40IDQ2LjMtMjEuNCA2Mi45Yy01LjUgOS4yLTExLjEgMTYuNi0xNS4yIDIxLjZjLTIuMSAyLjUtMy43IDQuNC00LjkgNS43Yy0uNiAuNi0xIDEuMS0xLjMgMS40bC0uMyAuMyAwIDAgMCAwIDAgMCAwIDBjLTQuNiA0LjYtNS45IDExLjQtMy40IDE3LjRjMi41IDYgOC4zIDkuOSAxNC44IDkuOWMyOC43IDAgNTcuNi04LjkgODEuNi0xOS4zYzIyLjktMTAgNDIuNC0yMS45IDU0LjMtMzAuNmMzMS44IDExLjUgNjcgMTcuOSAxMDQuMSAxNy45YzM3IDAgNzIuMy02LjQgMTA0LTE3LjlMODIuOSAxNjEuM0M3MC43IDE4NS42IDY0IDIxMi4yIDY0IDI0MHpcIl19LFpjPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNsb3VkLXN1bi1yYWluXCIsaWNvbjpbNjQwLDUxMixbMTI3NzgyXSxcImY3NDNcIixcIk0xMzcuOSAzYy00LjUtMy4yLTEwLjMtMy45LTE1LjQtMS44cy04LjggNi43LTkuNyAxMi4yTDk4LjcgOTguNyAxMy40IDExMi44Yy01LjUgLjktMTAuMSA0LjYtMTIuMiA5LjdTLS4yIDEzMy40IDMgMTM3LjlsNTAuMyA3MC4zTDMgMjc4LjVjLTMuMiA0LjUtMy45IDEwLjMtMS44IDE1LjRzNi43IDguOCAxMi4yIDkuN2w4NS4zIDE0LjFMMTEyLjggNDAzYy45IDUuNSA0LjYgMTAuMSA5LjcgMTIuMnMxMC45IDEuNCAxNS40LTEuOGw1NS4yLTM5LjVjLTE5LjktMjEuOS0zMi4zLTUwLjgtMzMuMS04Mi42Yy0xNy42LTEwLjItMzIuMi0yNi4xLTQwLjYtNDYuM2MtMjAuMy00OSAzLTEwNS4xIDUyLTEyNS40YzI5LjQtMTIuMiA2MS40LTguNyA4Ni43IDYuN2MxMy4xLTIxLjggMzIuNS0zOS40IDU1LjgtNTAuM0wzMDMuNiAxMy40Yy0uOS01LjUtNC42LTEwLjEtOS43LTEyLjJTMjgyLjktLjIgMjc4LjUgM0wyMDguMiA1My4zIDEzNy45IDN6TTI5MS40IDQxNS45Yy0yLjUgLjYtNS4xIC42LTcuNi0uMWMxLjQgMCAyLjggLjEgNC4yIC4xaDMuNXptLTQ2LjMtMjYwYy0xNy4zLTEyLjItNDAuNC0xNS42LTYxLjUtNi45Yy0zMi43IDEzLjUtNDguMiA1MS0zNC42IDgzLjZjMy42IDguNyA4LjkgMTYuMSAxNS4zIDIyLjJjMTAuNi0zOS43IDM5LjktNzEuOCA3Ny44LTg2LjRjLjgtNC4zIDEuOC04LjQgMy0xMi41ek0yNzcuNCA0MjBjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6bTk2IDBjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6bTk2IDBjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6bTk2IDBjLTExLTcuNC0yNS45LTQuNC0zMy4zIDYuN2wtMzIgNDhjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wzMi00OGM3LjQtMTEgNC40LTI1LjktNi43LTMzLjN6bTc0LjUtMTE2LjFjMC0zOS4zLTI4LjQtNzIuMS02NS44LTc4LjdjMS4yLTUuNiAxLjktMTEuMyAxLjktMTcuMmMwLTQ0LjItMzUuOC04MC04MC04MGMtMTcgMC0zMi44IDUuMy00NS44IDE0LjRDNDMzLjMgMTE0LjYgNDAyLjggOTYgMzY4IDk2Yy01MyAwLTk2IDQzLTk2IDk2bDAgMS4zYy00NS40IDcuNi04MCA0Ny4xLTgwIDk0LjZjMCA1MyA0MyA5NiA5NiA5Nkg1NTkuOWM0NC4yIDAgODAtMzUuOCA4MC04MHpcIl19LFljPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNvbXByZXNzXCIsaWNvbjpbNDQ4LDUxMixbXSxcImYwNjZcIixcIk0xNjAgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NjRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWNjR6TTMyIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg5NnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMnpNMzUyIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM1MlY2NHpNMzIwIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzIwelwiXX0saDE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwid2hlYXQtYXduXCIsaWNvbjpbNTEyLDUxMixbXCJ3aGVhdC1hbHRcIl0sXCJlMmNkXCIsXCJNNTA1IDQxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMzgzIDk1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODgtODh6TTMwNS41IDI3LjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDI3MS41IDM4LjZjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44bC0xMS4zLTExLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0xMS4zIDExLjNjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44TDEwMS44IDIzMWMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNjcuOSAyNDIuM2MtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44bDEwLjQgMTAuNEw5LjQgNDU3LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguOS02OC45IDEyLjIgMTIuMmMzNy41IDM3LjUgOTguMyAzNy41IDEzNS44IDBsMTEuMy0xMS4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC0xMS4zLTExLjNjLTIxLjgtMjEuOC00OS42LTM0LjEtNzguMS0zNi45bDMxLjktMzEuOSAxMi4yIDEyLjJjMzcuNSAzNy41IDk4LjMgMzcuNSAxMzUuOCAwbDExLjMtMTEuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtMTEuMy0xMS4zYy0yMS44LTIxLjgtNDkuNi0zNC4xLTc4LjEtMzYuOWwzMS45LTMxLjkgMTIuMiAxMi4yYzM3LjUgMzcuNSA5OC4zIDM3LjUgMTM1LjggMEw0ODYuNSAyMzFjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZMNDc1LjIgMTk3Yy01LjItNS4yLTEwLjYtOS44LTE2LjQtMTMuOUw1MDUgMTM3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU5LjQgNTkuNGMtMjAuNi00LjQtNDItMy43LTYyLjMgMi4xYzYuMS0yMS4zIDYuNi00My44IDEuNC02NS4zTDQwOSA0MWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDMyOS4xIDUyLjljLTMuNy01LTcuOC05LjgtMTIuNC0xNC4zTDMwNS41IDI3LjN6XCJdfSxfYz1oMSwkYz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhbmtoXCIsaWNvbjpbMzIwLDUxMixbOTc2NV0sXCJmNjQ0XCIsXCJNOTYgMTI4YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRjMCA0MS42LTIwLjcgNzYuNi00Ni42IDEwNC4xYy01LjkgNi4yLTExLjggMTEuOC0xNy40IDE2LjdjLTUuNi00LjktMTEuNS0xMC41LTE3LjQtMTYuN0MxMTYuNyAyMDQuNiA5NiAxNjkuNiA5NiAxMjh6TTE2MCAwQzg5LjMgMCAzMiA1Ny4zIDMyIDEyOGMwIDUyLjQgMjEuNSA5NS41IDQ2LjggMTI4SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDk2VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMyMGg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyNDEuMmMyNS40LTMyLjUgNDYuOC03NS42IDQ2LjgtMTI4QzI4OCA1Ny4zIDIzMC43IDAgMTYwIDB6XCJdfSxjYT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW5kcy1ob2xkaW5nLWNoaWxkXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0ZmFcIixcIk0zMjAgODBjLTIyLjEgMC00MC0xNy45LTQwLTQwczE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MHptNDQuNyA4NC4zTDM3NS44IDI1M2MxLjYgMTMuMi03LjcgMjUuMS0yMC44IDI2LjhzLTI1LjEtNy43LTI2LjgtMjAuOGwtNC40LTM1aC03LjZsLTQuNCAzNWMtMS42IDEzLjItMTMuNiAyMi41LTI2LjggMjAuOHMtMjIuNS0xMy42LTIwLjgtMjYuOGwxMS4xLTg4LjhMMjU1LjUgMTgxYy0xMC4xIDguNi0yNS4zIDcuMy0zMy44LTIuOHMtNy4zLTI1LjMgMi44LTMzLjhsMjcuOS0yMy42QzI3MS4zIDEwNC44IDI5NS4zIDk2IDMyMCA5NnM0OC43IDguOCA2Ny42IDI0LjdsMjcuOSAyMy42YzEwLjEgOC42IDExLjQgMjMuNyAyLjggMzMuOHMtMjMuNyAxMS40LTMzLjggMi44bC0xOS44LTE2Ljd6TTQwIDY0YzIyLjEgMCA0MCAxNy45IDQwIDQwdjQwIDgwIDQwLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsNTEuMSA1MS4xYzguMyA4LjMgMjEuMyA5LjYgMzEgMy4xYzEyLjktOC42IDE0LjctMjYuOSAzLjctMzcuOGwtMTUuMi0xNS4yLTMyLTMyYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDMyIDMyIDE1LjIgMTUuMiAwIDAgMjUuMyAyNS4zYzIxIDIxIDMyLjggNDkuNSAzMi44IDc5LjJWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDE3My4zYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0wyOC4xIDM5My40QzEwLjEgMzc1LjQgMCAzNTEgMCAzMjUuNVYyMjQgMTYwIDEwNEMwIDgxLjkgMTcuOSA2NCA0MCA2NHptNTYwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDB2NTYgNjRWMzI1LjVjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlMNTEyIDQ5My4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43SDQwMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzg1LjFjMC0yOS43IDExLjgtNTguMiAzMi44LTc5LjJsMjUuMy0yNS4zIDAgMCAxNS4yLTE1LjIgMzItMzJjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMzIgMzItMTUuMiAxNS4yYy0xMSAxMS05LjIgMjkuMiAzLjcgMzcuOGM5LjcgNi41IDIyLjcgNS4yIDMxLTMuMWw1MS4xLTUxLjFjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM1YyMjQgMTQ0IDEwNGMwLTIyLjEgMTcuOS00MCA0MC00MHpcIl19LGFhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFzdGVyaXNrXCIsaWNvbjpbMzg0LDUxMixbMTAwMzMsNjE1NDVdLFwiMmFcIixcIk0xOTIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTk5LjVsMTExLjUtNjYuOWMxNS4yLTkuMSAzNC44LTQuMiA0My45IDExczQuMiAzNC44LTExIDQzLjlMMjU0LjIgMjU2bDExNC4zIDY4LjZjMTUuMiA5LjEgMjAuMSAyOC43IDExIDQzLjlzLTI4LjcgMjAuMS00My45IDExTDIyNCAzMTIuNVY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzEyLjVMNDguNSAzNzkuNGMtMTUuMiA5LjEtMzQuOCA0LjItNDMuOS0xMXMtNC4yLTM0LjggMTEtNDMuOUwxMjkuOCAyNTYgMTUuNSAxODcuNGMtMTUuMi05LjEtMjAuMS0yOC43LTExLTQzLjlzMjguNy0yMC4xIDQzLjktMTFMMTYwIDE5OS41VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXX0sQzE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3F1YXJlLWNoZWNrXCIsaWNvbjpbNDQ4LDUxMixbOTc0NSw5OTg5LDYxNTEwLFwiY2hlY2stc3F1YXJlXCJdLFwiZjE0YVwiLFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNMzM3IDIwOUwyMDkgMzM3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0NyA0N0wzMDMgMTc1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOXpcIl19LHNhPUMxLGVhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlc2V0YS1zaWduXCIsaWNvbjpbMzg0LDUxMixbXSxcImUyMjFcIixcIk02NCAzMkM0Ni4zIDMyIDMyIDQ2LjMgMzIgNjR2OTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCA5NlY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNTJoOTZjNzcuNCAwIDE0Mi01NSAxNTYuOC0xMjhIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyaC0zLjJDMzM0IDg3IDI2OS40IDMyIDE5MiAzMkg2NHpNMjgyLjUgMTYwSDk2Vjk2aDk2YzQxLjggMCA3Ny40IDI2LjcgOTAuNSA2NHpNOTYgMjI0SDI4Mi41Yy0xMy4yIDM3LjMtNDguNyA2NC05MC41IDY0SDk2VjIyNHpcIl19LEwxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhlYWRpbmdcIixpY29uOls0NDgsNTEyLFtcImhlYWRlclwiXSxcImYxZGNcIixcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDgwaDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDExMlYyMDhIMzM2Vjk2SDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg0OCA0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MDBWMjQwIDQxNmgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzNjggMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDE2VjI3MkgxMTJWNDE2aDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDgwIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQ4VjI0MCA5NkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0elwiXX0sZmE9TDEscmE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ2hvc3RcIixpY29uOlszODQsNTEyLFsxMjgxMjNdLFwiZjZlMlwiLFwiTTUwLjggNDUyLjFMMTkuMiA0NzcuNGMtMi4xIDEuNy00LjcgMi42LTcuNCAyLjZDNS4zIDQ4MCAwIDQ3NC43IDAgNDY4LjJWMTkyQzAgODYgODYgMCAxOTIgMFMzODQgODYgMzg0IDE5MlY0NjguMmMwIDYuNS01LjMgMTEuOC0xMS44IDExLjhjLTIuNyAwLTUuMy0uOS03LjQtMi42bC0zMS42LTI1LjNjLTMuMy0yLjctNy41LTQuMS0xMS44LTQuMWMtNS45IDAtMTEuNSAyLjgtMTUgNy41bC0zNy42IDUwLjFjLTMgNC03LjggNi40LTEyLjggNi40cy05LjgtMi40LTEyLjgtNi40bC0zOC40LTUxLjJjLTMtNC03LjgtNi40LTEyLjgtNi40cy05LjggMi40LTEyLjggNi40bC0zOC40IDUxLjJjLTMgNC03LjggNi40LTEyLjggNi40cy05LjgtMi40LTEyLjgtNi40TDc3LjYgNDU1LjVjLTMuNi00LjctOS4xLTcuNS0xNS03LjVjLTQuMyAwLTguNCAxLjUtMTEuNyA0LjF6TTE2MCAxOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem05NiAzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyelwiXX0scDE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibGlzdFwiLGljb246WzUxMiw1MTIsW1wibGlzdC1zcXVhcmVzXCJdLFwiZjAzYVwiLFwiTTQwIDQ4QzI2LjcgNDggMTYgNTguNyAxNiA3MnY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNEg4OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFY3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNEg0MHpNMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxOTJ6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxOTJ6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxOTJ6TTE2IDIzMnY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNEg4OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYyMzJjMC0xMy4zLTEwLjctMjQtMjQtMjRINDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek00MCAzNjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0djQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0SDg4YzEzLjMgMCAyNC0xMC43IDI0LTI0VjM5MmMwLTEzLjMtMTAuNy0yNC0yNC0yNEg0MHpcIl19LGxhPXAxLGQxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNxdWFyZS1waG9uZS1mbGlwXCIsaWNvbjpbNDQ4LDUxMixbXCJwaG9uZS1zcXVhcmUtYWx0XCJdLFwiZjg3YlwiLFwiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDM4NHptLTkwLjcgOTYuN2MtOS43LTIuNi0xOS45IDIuMy0yMy43IDExLjZsLTIwIDQ4Yy0zLjQgOC4yLTEgMTcuNiA1LjggMjMuMkwyODAgMjMxLjdjLTE2LjYgMzUuMi00NS4xIDYzLjctODAuMyA4MC4zbC0yMC4yLTI0LjdjLTUuNi02LjgtMTUtOS4yLTIzLjItNS44bC00OCAyMGMtOS4zIDMuOS0xNC4yIDE0LTExLjYgMjMuN2wxMiA0NEMxMTEuMSAzNzggMTE5IDM4NCAxMjggMzg0YzEyMy43IDAgMjI0LTEwMC4zIDIyNC0yMjRjMC05LTYtMTYuOS0xNC43LTE5LjNsLTQ0LTEyelwiXX0saWE9ZDEsb2E9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FydC1wbHVzXCIsaWNvbjpbNTc2LDUxMixbXSxcImYyMTdcIixcIk0yNCAwQzEwLjcgMCAwIDEwLjcgMCAyNFMxMC43IDQ4IDI0IDQ4SDc2LjFsNjAuMyAzMTYuNWMyLjIgMTEuMyAxMi4xIDE5LjUgMjMuNiAxOS41SDQ4OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgxNzkuOWwtOS4xLTQ4aDMxN2MxNC4zIDAgMjYuOS05LjUgMzAuOC0yMy4zbDU0LTE5MkM1NzguMyA1Mi4zIDU2MyAzMiA1NDEuOCAzMkgxMjJsLTIuNC0xMi41QzExNy40IDguMiAxMDcuNSAwIDk2IDBIMjR6TTE3NiA1MTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHptMzM2LTQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OHpNMjUyIDE2MGMwLTExIDktMjAgMjAtMjBoNDRWOTZjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjB2NDRoNDRjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwSDM1NnY0NGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBWMTgwSDI3MmMtMTEgMC0yMC05LTIwLTIwelwiXX0sbmE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ2FtZXBhZFwiLGljb246WzY0MCw1MTIsW10sXCJmMTFiXCIsXCJNMTkyIDY0Qzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4SDQ0OGMxMDYgMCAxOTItODYgMTkyLTE5MnMtODYtMTkyLTE5Mi0xOTJIMTkyek00OTYgMjQ4Yy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDB6bS0yNCA1NmMwIDIyLjEtMTcuOSA0MC00MCA0MHMtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDB6TTE2OCAyMDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHYzMmgzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyMTZ2MzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjgwSDEzNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGgzMlYyMDB6XCJdfSx1MT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtZG90XCIsaWNvbjpbNTEyLDUxMixbMTI4MjgwLFwiZG90LWNpcmNsZVwiXSxcImYxOTJcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyem0wLTE2MGMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NnM5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZ6XCJdfSxIYT11MSx4MT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmYWNlLWRpenp5XCIsaWNvbjpbNTEyLDUxMixbXCJkaXp6eVwiXSxcImY1NjdcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyem0wLTk2Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6TTEwMC43IDEzMi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwTDE2MCAxNjkuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDE4Mi42IDE5MmwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEwxNjAgMjE0LjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkwxMzcuNCAxOTJsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZ6bTE5MiAwYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwTDM1MiAxNjkuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDM3NC42IDE5MmwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEwzNTIgMjE0LjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkwzMjkuNCAxOTJsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZ6XCJdfSx6YT14MSxWYT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJlZ2dcIixpY29uOlszODQsNTEyLFsxMjkzNzBdLFwiZjdmYlwiLFwiTTE5MiA0OTZDODYgNDk2IDAgNDEwIDAgMzA0QzAgMTkyIDk2IDE2IDE5MiAxNnMxOTIgMTc2IDE5MiAyODhjMCAxMDYtODYgMTkyLTE5MiAxOTJ6TTE1Ni41IDEzOGwwIDAgMCAwIDAgMGM1LjUtNi45IDQuNC0xNy0yLjUtMjIuNXMtMTctNC40LTIyLjUgMi41TDE0NCAxMjhjLTEyLjUtMTAtMTIuNS0xMC0xMi41LTEwbDAgMCAwIDAtLjEgLjEtLjIgLjItLjYgLjhjLS41IC43LTEuMyAxLjctMi4yIDNjLTEuOSAyLjYtNC41IDYuMy03LjcgMTFjLTYuMyA5LjQtMTQuNiAyMy0yMyAzOS43QzgxLjEgMjA2LjEgNjQgMjUyLjYgNjQgMzA0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZjMC00NC42IDE0LjktODYuMSAzMC4zLTExNi44YzcuNi0xNS4zIDE1LjMtMjcuNyAyMS0zNi4zYzIuOC00LjMgNS4yLTcuNiA2LjgtOS44Yy44LTEuMSAxLjQtMS45IDEuOC0yLjRsLjQtLjYgLjEtLjEgMCAwelwiXX0sbWE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaG91c2UtbWVkaWNhbC1jaXJjbGUteG1hcmtcIixpY29uOls2NDAsNTEyLFtdLFwiZTUxM1wiLFwiTTMyMCAzNjhjMCA1OS41IDI5LjUgMTEyLjEgNzQuOCAxNDRIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w1MjIuMSAxOTMuOWMtOC41LTEuMy0xNy4zLTEuOS0yNi4xLTEuOWMtNTQuNyAwLTEwMy41IDI0LjktMTM1LjggNjRIMzIwVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhIMjA4Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZ6TTQ5NiA1MTJjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHMtNjQuNSAxNDQtMTQ0IDE0NHptMjIuNi0xNDRsMzYuNy0zNi43YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42cy0xNi40LTYuMi0yMi42IDBMNDk2IDM0NS40bC0zNi43LTM2LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZMNDczLjQgMzY4bC0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMEw0OTYgMzkwLjZsMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNkw1MTguNiAzNjh6XCJdfSx2YT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYW1wZ3JvdW5kXCIsaWNvbjpbNTc2LDUxMixbOTk3OF0sXCJmNmJiXCIsXCJNMzc3IDUyYzExLTEzLjggOC44LTMzLjktNS00NXMtMzMuOS04LjgtNDUgNUwyODggNjAuOCAyNDkgMTJjLTExLTEzLjgtMzEuMi0xNi00NS01cy0xNiAzMS4yLTUgNDVsNDggNjBMMTIuMyA0MDUuNEM0LjMgNDE1LjQgMCA0MjcuNyAwIDQ0MC40VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyODggNTI4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ0MC40YzAtMTIuNy00LjMtMjUuMS0xMi4zLTM1TDMyOSAxMTJsNDgtNjB6TTI4OCA0NDhIMTY4LjVMMjg4IDI5MS43IDQwNy41IDQ0OEgyODh6XCJdfSxNYT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmb2xkZXItcGx1c1wiLGljb246WzUxMiw1MTIsW10sXCJmNjVlXCIsXCJNNTEyIDQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMTgxLjVjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMjYuNSAyNi41YzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNnpNMjMyIDM3NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjMxMmg2NGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyODBWMjAwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djY0SDE2OGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg2NHY2NHpcIl19LGc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZnV0Ym9sXCIsaWNvbjpbNTEyLDUxMixbOTkxNyxcImZ1dGJvbC1iYWxsXCIsXCJzb2NjZXItYmFsbFwiXSxcImYxZTNcIixcIk00MTcuMyAzNjAuMWwtNzEuNi00LjhjLTUuMi0uMy0xMC4zIDEuMS0xNC41IDQuMnMtNy4yIDcuNC04LjQgMTIuNWwtMTcuNiA2OS42QzI4OS41IDQ0NS44IDI3MyA0NDggMjU2IDQ0OHMtMzMuNS0yLjItNDkuMi02LjRMMTg5LjIgMzcyYy0xLjMtNS00LjMtOS40LTguNC0xMi41cy05LjMtNC41LTE0LjUtNC4ybC03MS42IDQuOGMtMTcuNi0yNy4yLTI4LjUtNTkuMi0zMC40LTkzLjZMMTI1IDIyOC4zYzQuNC0yLjggNy42LTcgOS4yLTExLjlzMS40LTEwLjItLjUtMTVsLTI2LjctNjYuNkMxMjggMTA5LjIgMTU1LjMgODkgMTg2LjcgNzYuOWw1NS4yIDQ2YzQgMy4zIDkgNS4xIDE0LjEgNS4xczEwLjItMS44IDE0LjEtNS4xbDU1LjItNDZjMzEuMyAxMi4xIDU4LjcgMzIuMyA3OS42IDU3LjlsLTI2LjcgNjYuNmMtMS45IDQuOC0yLjEgMTAuMS0uNSAxNXM0LjkgOS4xIDkuMiAxMS45bDYwLjcgMzguMmMtMS45IDM0LjQtMTIuOCA2Ni40LTMwLjQgOTMuNnpNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnptMTQuMS0zMjUuN2MtOC40LTYuMS0xOS44LTYuMS0yOC4yIDBMMTk0IDIyMWMtOC40IDYuMS0xMS45IDE2LjktOC43IDI2LjhsMTguMyA1Ni4zYzMuMiA5LjkgMTIuNCAxNi42IDIyLjggMTYuNmg1OS4yYzEwLjQgMCAxOS42LTYuNyAyMi44LTE2LjZsMTguMy01Ni4zYzMuMi05LjktLjMtMjAuNy04LjctMjYuOGwtNDcuOS0zNC44elwiXX0sdGE9ZyxoYT1nLGcxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBhaW50YnJ1c2hcIixpY29uOls1NzYsNTEyLFsxMjgzOTYsXCJwYWludC1icnVzaFwiXSxcImYxZmNcIixcIk0zNzEuMyAzNjcuMWMyNy4zLTMuOSA1MS45LTE5LjQgNjcuMi00Mi45TDYwMC4yIDc0LjFjMTIuNi0xOS41IDkuNC00NS4zLTcuNi02MS4yUzU0OS43LTQuNCA1MzEuMSA5LjZMMjk0LjQgMTg3LjJjLTI0IDE4LTM4LjIgNDYuMS0zOC40IDc2LjFMMzcxLjMgMzY3LjF6bS0xOS42IDI1LjRsLTExNi0xMDQuNEMxNzUuOSAyOTAuMyAxMjggMzM5LjYgMTI4IDQwMGMwIDMuOSAuMiA3LjggLjYgMTEuNmMxLjggMTcuNS0xMC4yIDM2LjQtMjcuOCAzNi40SDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDI0MGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMmMwLTIuNS0uMS01LS4yLTcuNXpcIl19LENhPWcxLExhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxvY2tcIixpY29uOls0NDgsNTEyLFsxMjgyNzRdLFwiZjAyM1wiLFwiTTE0NCAxNDR2NDhIMzA0VjE0NGMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpNODAgMTkyVjE0NEM4MCA2NC41IDE0NC41IDAgMjI0IDBzMTQ0IDY0LjUgMTQ0IDE0NHY0OGgxNmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI1NmMwLTM1LjMgMjguNy02NCA2NC02NEg4MHpcIl19LHBhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImdhcy1wdW1wXCIsaWNvbjpbNTEyLDUxMixbOTk4MV0sXCJmNTJmXCIsXCJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEgyNTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMjU2aDhjNDguNiAwIDg4IDM5LjQgODggODh2MzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyMjJjLTI3LjYtNy4xLTQ4LTMyLjItNDgtNjJWOTZMMzg0IDY0Yy04LjgtOC44LTguOC0yMy4yIDAtMzJzMjMuMi04LjggMzIgMGw3Ny4zIDc3LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM1YxNjh2MjQgMzJWMzc2YzAgMzkuOC0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcyVjM0NGMwLTIyLjEtMTcuOS00MC00MC00MGgtOFY0NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJWNjR6TTk2IDgwdjk2YzAgOC44IDcuMiAxNiAxNiAxNkgyNDBjOC44IDAgMTYtNy4yIDE2LTE2VjgwYzAtOC44LTcuMi0xNi0xNi0xNkgxMTJjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl19LFMxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdC10dWItcGVyc29uXCIsaWNvbjpbNTEyLDUxMixbXCJob3QtdHViXCJdLFwiZjU5M1wiLFwiTTI3MiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY1LjJjMCAzNCAxNC40IDY2LjQgMzkuNyA4OS4ybDE2LjQgMTQuOGMxNS4yIDEzLjcgMjMuOCAzMy4xIDIzLjggNTMuNVYyMDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYxODYuOGMwLTM0LTE0LjQtNjYuNC0zOS43LTg5LjJMMjk1LjggODIuOEMyODAuNyA2OS4xIDI3MiA0OS43IDI3MiAyOS4yVjI0ek0wIDMyMHYxNlY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjMyMGMwLTM1LjMtMjguNy02NC02NC02NEgyNzcuM2MtMTMuOCAwLTI3LjMtNC41LTM4LjQtMTIuOGwtODUuMy02NEMxMzcgMTY2LjcgMTE2LjggMTYwIDk2IDE2MGMtNTMgMC05NiA0My05NiA5NnY2NHptMTI4IDE2djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em04MC0xNmM4LjggMCAxNiA3LjIgMTYgMTZ2OTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnptMTEyIDE2djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em04MC0xNmM4LjggMCAxNiA3LjIgMTYgMTZ2OTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnpNMzYwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0djUuMmMwIDM0IDE0LjQgNjYuNCAzOS43IDg5LjJsMTYuNCAxNC44YzE1LjIgMTMuNyAyMy44IDMzLjEgMjMuOCA1My41VjIwMGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjE4Ni44YzAtMzQtMTQuNC02Ni40LTM5LjctODkuMkw0MDcuOCA4Mi44QzM5Mi43IDY5LjEgMzg0IDQ5LjcgMzg0IDI5LjJWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTY0IDEyOGMzNS4zIDAgNjQtMjguNyA2NC02NFM5OS4zIDAgNjQgMFMwIDI4LjcgMCA2NHMyOC43IDY0IDY0IDY0elwiXX0sZGE9UzEsTjE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFwLWxvY2F0aW9uXCIsaWNvbjpbNTc2LDUxMixbXCJtYXAtbWFya2VkXCJdLFwiZjU5ZlwiLFwiTTMwMi44IDMxMkMzMzQuOSAyNzEuOSA0MDggMTc0LjYgNDA4IDEyMEM0MDggNTMuNyAzNTQuMyAwIDI4OCAwUzE2OCA1My43IDE2OCAxMjBjMCA1NC42IDczLjEgMTUxLjkgMTA1LjIgMTkyYzcuNyA5LjYgMjIgOS42IDI5LjYgMHpNNDE2IDUwM2wxNDQuOS01OGM5LjEtMy42IDE1LjEtMTIuNSAxNS4xLTIyLjNWMTUyYzAtMTctMTcuMS0yOC42LTMyLjktMjIuM2wtMTE2IDQ2LjRjLS41IDEuMi0xIDIuNS0xLjUgMy43Yy0yLjkgNi44LTYuMSAxMy43LTkuNiAyMC42VjUwM3pNMTUuMSAxODcuM0M2IDE5MSAwIDE5OS44IDAgMjA5LjZWNDgwLjRjMCAxNyAxNy4xIDI4LjYgMzIuOSAyMi4zTDE2MCA0NTEuOFYyMDAuNGMtMy41LTYuOS02LjctMTMuOC05LjYtMjAuNmMtNS42LTEzLjItMTAuNC0yNy40LTEyLjgtNDEuNWwtMTIyLjYgNDl6TTM4NCAyNTVjLTIwLjUgMzEuMy00Mi4zIDU5LjYtNTYuMiA3N2MtMjAuNSAyNS42LTU5LjEgMjUuNi03OS42IDBjLTEzLjktMTcuNC0zNS43LTQ1LjctNTYuMi03N1Y0NDkuNGwxOTIgNTQuOVYyNTV6XCJdfSx1YT1OMSx4YT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob3VzZS1mbG9vZC13YXRlclwiLGljb246WzU3Niw1MTIsW10sXCJlNTBlXCIsXCJNMzA2LjggNi4xQzI5NS42LTIgMjgwLjQtMiAyNjkuMiA2LjFsLTE3NiAxMjhjLTExLjIgOC4yLTE1LjkgMjIuNi0xMS42IDM1LjhTOTguMSAxOTIgMTEyIDE5MmgxNnY3M2MxLjcgMSAzLjMgMiA0LjkgMy4xYzE4IDEyLjQgNDAuMSAyMC4zIDU5LjIgMjAuM2MyMS4xIDAgNDItOC41IDU5LjItMjAuM2MyMi4xLTE1LjUgNTEuNi0xNS41IDczLjcgMGMxOC40IDEyLjcgMzkuNiAyMC4zIDU5LjIgMjAuM2MxOSAwIDQxLjItNy45IDU5LjItMjAuM2MxLjUtMSAzLTIgNC41LTIuOWwtLjMtNzMuMkg0NjRjMTMuOSAwIDI2LjEtOC45IDMwLjQtMjIuMXMtLjQtMjcuNi0xMS42LTM1LjhsLTE3Ni0xMjh6TTI2OS41IDMwOS45QzI0NyAzMjUuNCAyMTkuNSAzMzYgMTkyIDMzNmMtMjYuOSAwLTU1LjMtMTAuOC03Ny40LTI2LjFsMCAwYy0xMS45LTguNS0yOC4xLTcuOC0zOS4yIDEuN2MtMTQuNCAxMS45LTMyLjUgMjEtNTAuNiAyNS4yYy0xNy4yIDQtMjcuOSAyMS4yLTIzLjkgMzguNHMyMS4yIDI3LjkgMzguNCAyMy45YzI0LjUtNS43IDQ0LjktMTYuNSA1OC4yLTI1QzEyNi41IDM4OS43IDE1OSA0MDAgMTkyIDQwMGMzMS45IDAgNjAuNi05LjkgODAuNC0xOC45YzUuOC0yLjcgMTEuMS01LjMgMTUuNi03LjdjNC41IDIuNCA5LjcgNS4xIDE1LjYgNy43YzE5LjggOSA0OC42IDE4LjkgODAuNCAxOC45YzMzIDAgNjUuNS0xMC4zIDk0LjUtMjUuOGMxMy40IDguNCAzMy43IDE5LjMgNTguMiAyNWMxNy4yIDQgMzQuNC02LjcgMzguNC0yMy45cy02LjctMzQuNC0yMy45LTM4LjRjLTE4LjEtNC4yLTM2LjItMTMuMy01MC42LTI1LjJjLTExLjEtOS41LTI3LjMtMTAuMS0zOS4yLTEuN2wwIDBDNDM5LjQgMzI1LjIgNDEwLjkgMzM2IDM4NCAzMzZjLTI3LjUgMC01NS0xMC42LTc3LjUtMjYuMWMtMTEuMS03LjktMjUuOS03LjktMzcgMHpNMzg0IDQ0OGMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwQzI0NyA0MzcuNCAyMTkuNSA0NDggMTkyIDQ0OGMtMjYuOSAwLTU1LjMtMTAuOC03Ny40LTI2LjFsMCAwYy0xMS45LTguNS0yOC4xLTcuOC0zOS4yIDEuN2MtMTQuNCAxMS45LTMyLjUgMjEtNTAuNiAyNS4yYy0xNy4yIDQtMjcuOSAyMS4yLTIzLjkgMzguNHMyMS4yIDI3LjkgMzguNCAyMy45YzI0LjUtNS43IDQ0LjktMTYuNSA1OC4yLTI1QzEyNi41IDUwMS43IDE1OSA1MTIgMTkyIDUxMmMzMS45IDAgNjAuNi05LjkgODAuNC0xOC45YzUuOC0yLjcgMTEuMS01LjMgMTUuNi03LjdjNC41IDIuNCA5LjcgNS4xIDE1LjYgNy43YzE5LjggOSA0OC42IDE4LjkgODAuNCAxOC45YzMzIDAgNjUuNS0xMC4zIDk0LjUtMjUuOGMxMy40IDguNCAzMy43IDE5LjMgNTguMiAyNWMxNy4yIDQgMzQuNC02LjcgMzguNC0yMy45cy02LjctMzQuNC0yMy45LTM4LjRjLTE4LjEtNC4yLTM2LjItMTMuMy01MC42LTI1LjJjLTExLjEtOS40LTI3LjMtMTAuMS0zOS4yLTEuN2wwIDBDNDM5LjQgNDM3LjIgNDEwLjkgNDQ4IDM4NCA0NDh6XCJdfSxnYT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0cmVlXCIsaWNvbjpbNDQ4LDUxMixbMTI3Nzk0XSxcImYxYmJcIixcIk0yMTAuNiA1LjlMNjIgMTY5LjRjLTMuOSA0LjItNiA5LjgtNiAxNS41QzU2IDE5Ny43IDY2LjMgMjA4IDc5LjEgMjA4SDEwNEwzMC42IDI4MS40Yy00LjIgNC4yLTYuNiAxMC02LjYgMTZDMjQgMzA5LjkgMzQuMSAzMjAgNDYuNiAzMjBIODBMNS40IDQwOS41QzEuOSA0MTMuNyAwIDQxOSAwIDQyNC41YzAgMTMgMTAuNSAyMy41IDIzLjUgMjMuNUgxOTJ2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NDhINDI0LjVjMTMgMCAyMy41LTEwLjUgMjMuNS0yMy41YzAtNS41LTEuOS0xMC44LTUuNC0xNUwzNjggMzIwaDMzLjRjMTIuNSAwIDIyLjYtMTAuMSAyMi42LTIyLjZjMC02LTIuNC0xMS44LTYuNi0xNkwzNDQgMjA4aDI0LjljMTIuNyAwIDIzLjEtMTAuMyAyMy4xLTIzLjFjMC01LjctMi4xLTExLjMtNi0xNS41TDIzNy40IDUuOUMyMzQgMi4xIDIyOS4xIDAgMjI0IDBzLTEwIDIuMS0xMy40IDUuOXpcIl19LFNhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJyaWRnZS1sb2NrXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0Y2NcIixcIk0zMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NzZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINTM2djY0aC04Yy02MS45IDAtMTEyIDUwLjEtMTEyIDExMnYyNC42Yy05LjkgNS44LTE4LjIgMTQuMS0yMy44IDI0LjFjLTE3LjYtMjAtNDMuNC0zMi43LTcyLjItMzIuN2MtNTMgMC05NiA0My05NiA5NnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM4NGMwLTUzLTQzLTk2LTk2LTk2VjE2MGg3MlY5Nkg2NEM0Ni4zIDk2IDMyIDgxLjcgMzIgNjR6TTQwOCA5NnY2NGg4MFY5Nkg0MDh6bS00OCA2NFY5NkgyODB2NjRoODB6TTE1MiA5NnY2NGg4MFY5NkgxNTJ6TTUyOCAyNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjQ4aDY0VjI3MmMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODB2NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjI3MnpcIl19LE5hPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNhY2stZG9sbGFyXCIsaWNvbjpbNTEyLDUxMixbMTI4MTc2XSxcImY4MWRcIixcIk0zMjAgOTZIMTkyTDE0NC42IDI0LjlDMTM3LjUgMTQuMiAxNDUuMSAwIDE1Ny45IDBIMzU0LjFjMTIuOCAwIDIwLjQgMTQuMiAxMy4zIDI0LjlMMzIwIDk2ek0xOTIgMTI4SDMyMGMzLjggMi41IDguMSA1LjMgMTMgOC40QzM4OS43IDE3Mi43IDUxMiAyNTAuOSA1MTIgNDE2YzAgNTMtNDMgOTYtOTYgOTZIOTZjLTUzIDAtOTYtNDMtOTYtOTZDMCAyNTAuOSAxMjIuMyAxNzIuNyAxNzkgMTM2LjRsMCAwIDAgMGM0LjgtMy4xIDkuMi01LjkgMTMtOC40em04NC4xIDk2YzAtMTEuMS05LTIwLjEtMjAuMS0yMC4xcy0yMC4xIDktMjAuMSAyMC4xdjZjLTUuNiAxLjItMTAuOSAyLjktMTUuOSA1LjFjLTE1IDYuOC0yNy45IDE5LjQtMzEuMSAzNy43Yy0xLjggMTAuMi0uOCAyMCAzLjQgMjljNC4yIDguOCAxMC43IDE1IDE3LjMgMTkuNWMxMS42IDcuOSAyNi45IDEyLjUgMzguNiAxNmwyLjIgLjdjMTMuOSA0LjIgMjMuNCA3LjQgMjkuMyAxMS43YzIuNSAxLjggMy40IDMuMiAzLjggNC4xYy4zIC44IC45IDIuNiAuMiA2LjdjLS42IDMuNS0yLjUgNi40LTggOC44Yy02LjEgMi42LTE2IDMuOS0yOC44IDEuOWMtNi0xLTE2LjctNC42LTI2LjItNy45bDAgMCAwIDAgMCAwIDAgMGMtMi4yLS44LTQuMy0xLjUtNi4zLTIuMWMtMTAuNS0zLjUtMjEuOCAyLjItMjUuMyAxMi43czIuMiAyMS44IDEyLjcgMjUuM2MxLjIgLjQgMi43IC45IDQuNCAxLjVjNy45IDIuNyAyMC4zIDYuOSAyOS44IDkuMVY0MTZjMCAxMS4xIDkgMjAuMSAyMC4xIDIwLjFzMjAuMS05IDIwLjEtMjAuMXYtNS41YzUuNC0xIDEwLjUtMi41IDE1LjQtNC42YzE1LjctNi43IDI4LjQtMTkuNyAzMS42LTM4LjdjMS44LTEwLjQgMS0yMC4zLTMtMjkuNGMtMy45LTktMTAuMi0xNS42LTE2LjktMjAuNWMtMTIuMi04LjgtMjguMy0xMy43LTQwLjQtMTcuNGwtLjgtLjJjLTE0LjItNC4zLTIzLjgtNy4zLTI5LjktMTEuNGMtMi42LTEuOC0zLjQtMy0zLjYtMy41Yy0uMi0uMy0uNy0xLjYtLjEtNWMuMy0xLjkgMS45LTUuMiA4LjItOC4xYzYuNC0yLjkgMTYuNC00LjUgMjguNi0yLjZjNC4zIC43IDE3LjkgMy4zIDIxLjcgNC4zYzEwLjcgMi44IDIxLjYtMy41IDI0LjUtMTQuMnMtMy41LTIxLjYtMTQuMi0yNC41Yy00LjQtMS4yLTE0LjQtMy4yLTIxLTQuNFYyMjR6XCJdfSx3MT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZW4tdG8tc3F1YXJlXCIsaWNvbjpbNTEyLDUxMixbXCJlZGl0XCJdLFwiZjA0NFwiLFwiTTQ3MS42IDIxLjdjLTIxLjktMjEuOS01Ny4zLTIxLjktNzkuMiAwTDM2Mi4zIDUxLjdsOTcuOSA5Ny45IDMwLjEtMzAuMWMyMS45LTIxLjkgMjEuOS01Ny4zIDAtNzkuMkw0NzEuNiAyMS43em0tMjk5LjIgMjIwYy02LjEgNi4xLTEwLjggMTMuNi0xMy41IDIxLjlsLTI5LjYgODguOGMtMi45IDguNi0uNiAxOC4xIDUuOCAyNC42czE1LjkgOC43IDI0LjYgNS44bDg4LjgtMjkuNmM4LjItMi44IDE1LjctNy40IDIxLjktMTMuNUw0MzcuNyAxNzIuMyAzMzkuNyA3NC4zIDE3Mi40IDI0MS43ek05NiA2NEM0MyA2NCAwIDEwNyAwIDE2MFY0MTZjMCA1MyA0MyA5NiA5NiA5NkgzNTJjNTMgMCA5Ni00MyA5Ni05NlYzMjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg5NnpcIl19LHdhPXcxLGthPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNhci1zaWRlXCIsaWNvbjpbNjQwLDUxMixbMTI4NjYzXSxcImY1ZTRcIixcIk0xNzEuMyA5NkgyMjR2OTZIMTExLjNsMzAuNC03NS45QzE0Ni41IDEwNCAxNTguMiA5NiAxNzEuMyA5NnpNMjcyIDE5MlY5Nmg4MS4yYzkuNyAwIDE4LjkgNC40IDI1IDEybDY3LjIgODRIMjcyem0yNTYuMiAxTDQyOC4yIDY4Yy0xOC4yLTIyLjgtNDUuOC0zNi03NS0zNkgxNzEuM2MtMzkuMyAwLTc0LjYgMjMuOS04OS4xIDYwLjNMNDAuNiAxOTYuNEMxNi44IDIwNS44IDAgMjI4LjkgMCAyNTZWMzY4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDY1LjNjNy42IDQ1LjQgNDcuMSA4MCA5NC43IDgwczg3LjEtMzQuNiA5NC43LTgwSDM4NS4zYzcuNiA0NS40IDQ3LjEgODAgOTQuNyA4MHM4Ny4xLTM0LjYgOTQuNy04MEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzIwYzAtNjUuMi00OC44LTExOS0xMTEuOC0xMjd6bS0yLjkgMjA3Yy02LjYgMTguNi0yNC40IDMyLTQ1LjMgMzJzLTM4LjctMTMuNC00NS4zLTMyYy0xLjgtNS0yLjctMTAuNC0yLjctMTZjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGMwIDUuNi0xIDExLTIuNyAxNnpNMTYwIDQzMmMtMjAuOSAwLTM4LjctMTMuNC00NS4zLTMyYy0xLjgtNS0yLjctMTAuNC0yLjctMTZjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGMwIDUuNi0xIDExLTIuNyAxNmMtNi42IDE4LjYtMjQuNCAzMi00NS4zIDMyelwiXX0sazE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2hhcmUtbm9kZXNcIixpY29uOls0NDgsNTEyLFtcInNoYXJlLWFsdFwiXSxcImYxZTBcIixcIk0zNTIgMjI0YzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDQgLjIgOCAuNyAxMS45bC05NC4xIDQ3QzE0NS40IDE3MC4yIDEyMS45IDE2MCA5NiAxNjBjLTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjMjUuOSAwIDQ5LjQtMTAuMiA2Ni42LTI2LjlsOTQuMSA0N2MtLjUgMy45LS43IDcuOC0uNyAxMS45YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0yNS45IDAtNDkuNCAxMC4yLTY2LjYgMjYuOWwtOTQuMS00N2MuNS0zLjkgLjctNy44IC43LTExLjlzLS4yLTgtLjctMTEuOWw5NC4xLTQ3QzMwMi42IDIxMy44IDMyNi4xIDIyNCAzNTIgMjI0elwiXX0sYmE9azEsQWE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGVhcnQtY2lyY2xlLW1pbnVzXCIsaWNvbjpbNTc2LDUxMixbXSxcImU0ZmZcIixcIk00Ny42IDMwMC40TDIyOC4zIDQ2OS4xYzcuNSA3IDE3LjQgMTAuOSAyNy43IDEwLjlzMjAuMi0zLjkgMjcuNy0xMC45bDIuNi0yLjRDMjY3LjIgNDM4LjYgMjU2IDQwNC42IDI1NiAzNjhjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZjMjguMyAwIDU1IDYuNyA3OC43IDE4LjVjLjktNi41IDEuMy0xMyAxLjMtMTkuNnYtNS44YzAtNjkuOS01MC41LTEyOS41LTExOS40LTE0MUMzNDcgMzYuNSAzMDAuNiA1MS40IDI2OCA4NEwyNTYgOTYgMjQ0IDg0Yy0zMi42LTMyLjYtNzktNDcuNS0xMjQuNi0zOS45QzUwLjUgNTUuNiAwIDExNS4yIDAgMTg1LjF2NS44YzAgNDEuNSAxNy4yIDgxLjIgNDcuNiAxMDkuNXpNNTc2IDM2OGMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NHMtMTQ0IDY0LjUtMTQ0IDE0NHM2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDR6bS02NCAwYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZINDk2YzguOCAwIDE2IDcuMiAxNiAxNnpcIl19LGIxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXJnbGFzcy1oYWxmXCIsaWNvbjpbMzg0LDUxMixbXCJob3VyZ2xhc3MtMlwiXSxcImYyNTJcIixcIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0Vjc1YzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMUwxNDYuNyAyNTYgNzguOSAzMjMuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN3YxMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NCAzMjBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWNDM3YzAtNDIuNC0xNi45LTgzLjEtNDYuOS0xMTMuMUwyMzcuMyAyNTZsNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xVjY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMCA2NCAzMnpNOTYgNzVWNjRIMjg4Vjc1YzAgMTktNS42IDM3LjQtMTYgNTNIMTEyYy0xMC4zLTE1LjYtMTYtMzQtMTYtNTN6bTE2IDMwOWMzLjUtNS4zIDcuNi0xMC4zIDEyLjEtMTQuOUwxOTIgMzAxLjNsNjcuOSA2Ny45YzQuNiA0LjYgOC42IDkuNiAxMi4yIDE0LjlIMTEyelwiXX0sQmE9YjEsVGE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWljcm9zY29wZVwiLGljb246WzUxMiw1MTIsWzEyODMwMF0sXCJmNjEwXCIsXCJNMTY4IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyaDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyaDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMjg4YzAgMTcuNy0xNC4zIDMyLTMyIDMyaC04YzAgMTcuNy0xNC4zIDMyLTMyIDMySDIwMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJoLThjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMHpNMzIgNDQ4SDMyMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOHMtNTcuMy0xMjgtMTI4LTEyOFYxMjhjMTA2IDAgMTkyIDg2IDE5MiAxOTJjMCA0OS4yLTE4LjUgOTQtNDguOSAxMjhINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMCAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptODAtNjRIMzA0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl19LHlhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNpbmtcIixpY29uOls1MTIsNTEyLFtdLFwiZTA2ZFwiLFwiTTI4OCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NlYyODhIMTYwVjI2NGMwLTMwLjktMjUuMS01Ni01Ni01Nkg1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg0OGM0LjQgMCA4IDMuNiA4IDh2MjRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMjU2IDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0MDBWMjY0YzAtNC40IDMuNi04IDgtOGg1NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEg0MDhjLTMwLjkgMC01NiAyNS4xLTU2IDU2djI0SDI4OFY5NnpNNDgwIDQxNlYzODRIMzJ2MzJjMCA1MyA0MyA5NiA5NiA5NkgzODRjNTMgMCA5Ni00MyA5Ni05NnpcIl19LEExPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJhZy1zaG9wcGluZ1wiLGljb246WzQ0OCw1MTIsW1wic2hvcHBpbmctYmFnXCJdLFwiZjI5MFwiLFwiTTE2MCAxMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHY0OEgxNjBWMTEyem0tNDggNDhINDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQxNmMwIDUzIDQzIDk2IDk2IDk2SDM1MmM1MyAwIDk2LTQzIDk2LTk2VjIwOGMwLTI2LjUtMjEuNS00OC00OC00OEgzMzZWMTEyQzMzNiA1MC4xIDI4NS45IDAgMjI0IDBTMTEyIDUwLjEgMTEyIDExMnY0OHptMjQgOTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptMjAwLTI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl19LFBhPUExLFM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctZG93bi16LWFcIixpY29uOls1NzYsNTEyLFtcInNvcnQtYWxwaGEtZGVzY1wiLFwic29ydC1hbHBoYS1kb3duLWFsdFwiXSxcImY4ODFcIixcIk0xODMuNiA0NjkuNkMxNzcuNSA0NzYuMiAxNjkgNDgwIDE2MCA0ODBzLTE3LjUtMy44LTIzLjYtMTAuNGwtODgtOTZjLTExLjktMTMtMTEuMS0zMy4zIDItNDUuMnMzMy4zLTExLjEgNDUuMiAyTDEyOCAzNjUuN1Y2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjM2NS43bDMyLjQtMzUuNGMxMS45LTEzIDMyLjItMTMuOSA0NS4yLTJzMTMuOSAzMi4yIDIgNDUuMmwtODggOTZ6TTMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0ODBjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOUw0MjkuMyAxNjBINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM1MmMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0LjlMNDAyLjcgOTZIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMnptOTYgMTkyYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdsNjQgMTI4IDE2IDMyYzcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlzLTM1IDEuNS00Mi45LTE0LjNMNDYwLjIgNDQ4SDM3MS44bC03LjIgMTQuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWwxNi0zMiA2NC0xMjhjNS40LTEwLjggMTYuNS0xNy43IDI4LjYtMTcuN3pNMzk1LjggNDAwaDQwLjRMNDE2IDM1OS42IDM5NS44IDQwMHpcIl19LEZhPVMsRGE9UyxSYT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtaXR0ZW5cIixpY29uOls0NDgsNTEyLFtdLFwiZjdiNVwiLFwiTTM1MiAzODRINjRMNS40IDE3OC45QzEuOCAxNjYuNCAwIDE1My40IDAgMTQwLjNDMCA2Mi44IDYyLjggMCAxNDAuMyAwaDMuNGM2NiAwIDEyMy41IDQ0LjkgMTM5LjUgMTA4LjlsMzEuNCAxMjUuOCAxNy42LTIwLjFDMzQ0LjggMjAwLjIgMzYyLjkgMTkyIDM4MiAxOTJoMi44YzM0LjkgMCA2My4zIDI4LjMgNjMuMyA2My4zYzAgMTUuOS02IDMxLjItMTYuOCA0Mi45TDM1MiAzODR6TTMyIDQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMkgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0OHpcIl19LFVhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1yYXlzXCIsaWNvbjpbNTEyLDUxMixbXSxcImU1NGRcIixcIk0zMDQgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4ek0yNDggMzUyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNTYuOWwtMjguNiA0Ny41Yy05LjEgMTUuMS0yOC44IDIwLTQzLjkgMTAuOXMtMjAtMjguOC0xMC45LTQzLjlsNTguMy05N2MxNy40LTI4LjkgNDguNi00Ni42IDgyLjMtNDYuNmgyOS43YzMzLjcgMCA2NC45IDE3LjcgODIuMyA0Ni42bDU4LjMgOTdjOS4xIDE1LjEgNC4yIDM0LjgtMTAuOSA0My45cy0zNC44IDQuMi00My45LTEwLjlMMzI4IDI1Ni45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMjQ4ek03IDdDMTYuNC0yLjMgMzEuNi0yLjMgNDEgN2w4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgNDFDLTIuMyAzMS42LTIuMyAxNi40IDcgN3pNNDcxIDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC04MCA4MGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUw0NzEgN3pNNyA1MDVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDgwLTgwYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw0MSA1MDVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwem00NjQgMGwtODAtODBjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwelwiXX0scWE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXNlcnNcIixpY29uOls2NDAsNTEyLFtdLFwiZjBjMFwiLFwiTTE0NCAxNjBjLTQ0LjIgMC04MC0zNS44LTgwLTgwUzk5LjggMCAxNDQgMHM4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgwem0zNjggMGMtNDQuMiAwLTgwLTM1LjgtODAtODBzMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgwek0wIDI5OC43QzAgMjM5LjggNDcuOCAxOTIgMTA2LjcgMTkyaDQyLjdjMTUuOSAwIDMxIDMuNSA0NC42IDkuN2MtMS4zIDcuMi0xLjkgMTQuNy0xLjkgMjIuM2MwIDM4LjIgMTYuOCA3Mi41IDQzLjMgOTZjLS4yIDAtLjQgMC0uNyAwSDIxLjNDOS42IDMyMCAwIDMxMC40IDAgMjk4Ljd6TTQwNS4zIDMyMGMtLjIgMC0uNCAwLS43IDBjMjYuNi0yMy41IDQzLjMtNTcuOCA0My4zLTk2YzAtNy42LS43LTE1LTEuOS0yMi4zYzEzLjYtNi4zIDI4LjctOS43IDQ0LjYtOS43aDQyLjdDNTkyLjIgMTkyIDY0MCAyMzkuOCA2NDAgMjk4LjdjMCAxMS44LTkuNiAyMS4zLTIxLjMgMjEuM0g0MDUuM3pNNDE2IDIyNGMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NnM0My05NiA5Ni05NnM5NiA0MyA5NiA5NnpNMTI4IDQ4NS4zQzEyOCA0MTEuNyAxODcuNyAzNTIgMjYxLjMgMzUySDM3OC43QzQ1Mi4zIDM1MiA1MTIgNDExLjcgNTEyIDQ4NS4zYzAgMTQuNy0xMS45IDI2LjctMjYuNyAyNi43SDE1NC43Yy0xNC43IDAtMjYuNy0xMS45LTI2LjctMjYuN3pcIl19LEdhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImV5ZS1zbGFzaFwiLGljb246WzY0MCw1MTIsW10sXCJmMDcwXCIsXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0w1MjUuNiAzODYuN2MzOS42LTQwLjYgNjYuNC04Ni4xIDc5LjktMTE4LjRjMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjZjLTE0LjktMzUuNy00Ni4yLTg3LjctOTMtMTMxLjFDNDY1LjUgNjguOCA0MDAuOCAzMiAzMjAgMzJjLTY4LjIgMC0xMjUgMjYuMy0xNjkuMyA2MC44TDM4LjggNS4xek0yMjMuMSAxNDkuNUMyNDguNiAxMjYuMiAyODIuNyAxMTIgMzIwIDExMmM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NGMwIDI0LjktNi4zIDQ4LjMtMTcuNCA2OC43TDQwOCAyOTQuNWM1LjItMTEuOCA4LTI0LjggOC0zOC41YzAtNTMtNDMtOTYtOTYtOTZjLTIuOCAwLTUuNiAuMS04LjQgLjRjNS4zIDkuMyA4LjQgMjAuMSA4LjQgMzEuNmMwIDEwLjItMi40IDE5LjgtNi42IDI4LjNsLTkwLjMtNzAuOHptMjIzLjEgMjk4TDM3MyAzODkuOWMtMTYuNCA2LjUtMzQuMyAxMC4xLTUzIDEwLjFjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0YzAtNi45IC41LTEzLjYgMS40LTIwLjJMODMuMSAxNjEuNUM2MC4zIDE5MS4yIDQ0IDIyMC44IDM0LjUgMjQzLjdjLTMuMyA3LjktMy4zIDE2LjcgMCAyNC42YzE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjFDMTc0LjUgNDQzLjIgMjM5LjIgNDgwIDMyMCA0ODBjNDcuOCAwIDg5LjktMTIuOSAxMjYuMi0zMi41elwiXX0sV2E9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmxhc2stdmlhbFwiLGljb246WzY0MCw1MTIsW10sXCJlNGYzXCIsXCJNMTc1IDM4OS40Yy05LjggMTYtMTUgMzQuMy0xNSA1My4xYy0xMCAzLjUtMjAuOCA1LjUtMzIgNS41Yy01MyAwLTk2LTQzLTk2LTk2VjY0QzE0LjMgNjQgMCA0OS43IDAgMzJTMTQuMyAwIDMyIDBIOTZoNjQgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJWMzA5LjlsLTQ5IDc5LjZ6TTk2IDY0djk2aDY0VjY0SDk2ek0zNTIgMEg0ODBoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJWMjE0LjlMNjI5LjcgNDA2LjJjNi43IDEwLjkgMTAuMyAyMy41IDEwLjMgMzYuNGMwIDM4LjMtMzEuMSA2OS40LTY5LjQgNjkuNEgyNjEuNGMtMzguMyAwLTY5LjQtMzEuMS02OS40LTY5LjRjMC0xMi44IDMuNi0yNS40IDEwLjMtMzYuNEwzMjAgMjE0LjlWNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoMzJ6bTMyIDY0VjIyNGMwIDUuOS0xLjYgMTEuNy00LjcgMTYuOEwzMzAuNSAzMjBoMTcxbC00OC44LTc5LjJjLTMuMS01LTQuNy0xMC44LTQuNy0xNi44VjY0SDM4NHpcIl19LEIxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhbmRcIixpY29uOls1MTIsNTEyLFsxMjkzMDYsOTk5NSxcImhhbmQtcGFwZXJcIl0sXCJmMjU2XCIsXCJNMjg4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjI0MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYzMzZjMCAxLjUgMCAzLjEgLjEgNC42TDY3LjYgMjgzYy0xNi0xNS4yLTQxLjMtMTQuNi01Ni42IDEuNHMtMTQuNiA0MS4zIDEuNCA1Ni42TDEyNC44IDQ0OGM0My4xIDQxLjEgMTAwLjQgNjQgMTYwIDY0SDMwNGM5Ny4yIDAgMTc2LTc4LjggMTc2LTE3NlYxMjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjQwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjI0MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYzMnpcIl19LEVhPUIxLElhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm9tXCIsaWNvbjpbNTEyLDUxMixbMTI4MzI5XSxcImY2NzlcIixcIk0zNzkuMyA0LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0xNiAxNmMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZsMTYgMTZjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsMTYtMTZjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTE2LTE2ek0xMTUuMiAxNjkuNmM4LTYgMTcuOS05LjYgMjguOC05LjZjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhIMTA5LjhjLTcuNiAwLTEzLjggNi4yLTEzLjggMTMuOGMwIDEuNSAuMiAyLjkgLjcgNC40bDggMjRjNC40IDEzLjEgMTYuNiAyMS45IDMwLjQgMjEuOUgxNDRoMTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRjLTUwLjggMC04Mi43LTIxLjUtMTAyLjItNDIuOGMtOS45LTEwLjgtMTYuNi0yMS42LTIwLjktMjkuN2MtMi4xLTQtMy42LTcuMy00LjUtOS42Yy0uNS0xLjEtLjgtMi0xLTIuNWwtLjItLjUgMC0uMWMtMi42LTcuOC0xMC43LTEyLjMtMTguNy0xMC41QzQuNCAzNTQuMi0uOSAzNjEuOCAuMSAzNzBMMTYgMzY4Qy4xIDM3MCAuMSAzNzAgLjEgMzcwbDAgMCAwIDAgMCAuMSAuMSAuNGMwIC4zIC4xIC44IC4yIDEuM2MuMiAxLjEgLjQgMi43IC44IDQuNmMuOCAzLjkgMiA5LjQgMy45IDE1LjljMy44IDEzIDEwLjMgMzAuNCAyMS4zIDQ4QzQ4LjcgNDc2LjIgODkuNCA1MTIgMTYwIDUxMmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGMwLTIzLjMtNi4yLTQ1LjItMTcuMS02NGgyMi42YzI1LjUgMCA0OS45LTEwLjEgNjcuOS0yOC4xbDI2LjUtMjYuNWM2LTYgMTQuMS05LjQgMjIuNi05LjRINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMyYy0yNS43IDAtNDEuNC0xMi41LTUxLjItMjUuNmMtNS02LjctOC40LTEzLjQtMTAuNS0xOC42Yy0xLjEtMi41LTEuOC00LjYtMi4yLTZjLS4yLS43LS40LTEuMi0uNS0xLjVsLS4xLS4zIDAgMGMwIDAgMCAwIDAgMGMtMS45LTcuMy04LjYtMTIuNC0xNi4yLTEyLjFjLTcuNiAuMy0xMy45IDUuOS0xNS4xIDEzLjRMMzM2IDM2OGMtMTUuOC0yLjYtMTUuOC0yLjYtMTUuOC0yLjZsMCAwIDAgMCAwIC4xLS4xIC4zYzAgLjMtLjEgLjYtLjIgMS4xYy0uMSAuOS0uMyAyLjEtLjQgMy42Yy0uMyAzLS42IDcuMy0uNiAxMi40YzAgMTAuMSAxLjEgMjMuOSA1LjggMzguMWM0LjggMTQuMyAxMy40IDI5LjMgMjguNiA0MC43QzM2OC43IDQ3My4zIDM4OS4zIDQ4MCA0MTYgNDgwYzUzIDAgOTYtNDMgOTYtOTZWMjg4YzAtNTMtNDMtOTYtOTYtOTZoLTUuNWMtMjUuNSAwLTQ5LjkgMTAuMS02Ny45IDI4LjFsLTI2LjUgMjYuNWMtNiA2LTE0LjEgOS40LTIyLjYgOS40SDI0NS4yYzYuOS0xNC41IDEwLjgtMzAuOCAxMC44LTQ4YzAtNjEuOS01MC4xLTExMi0xMTItMTEyYy0yNS4yIDAtNDguNSA4LjMtNjcuMiAyMi40Yy0xNC4xIDEwLjYtMTcgMzAuNy02LjQgNDQuOHMzMC43IDE3IDQ0LjggNi40ek0yODAuOSA2Ni43Yy02LTQtMTQtMy41LTE5LjUgMS4zcy03IDEyLjctMy43IDE5LjJMMjcyIDgwYy0xNC4zIDcuMi0xNC4zIDcuMi0xNC4zIDcuMmwwIDAgMCAwIDAgLjEgLjEgLjIgLjQgLjdjLjMgLjYgLjggMS40IDEuNCAyLjRjMS4yIDIgMi45IDQuOCA1LjEgOC4yYzQuNCA2LjcgMTEuMSAxNS41IDIwIDI0LjRDMzAyLjQgMTQxLjEgMzMwLjMgMTYwIDM2OCAxNjBjMzEuMiAwIDU2LjYtMTAuNCA3My45LTIwLjJjOC43LTUgMTUuNi05LjkgMjAuNC0xMy44YzIuNC0xLjkgNC4zLTMuNiA1LjctNC45Yy43LS42IDEuMy0xLjIgMS43LTEuNmwuNi0uNSAuMi0uMiAuMS0uMSAwIDAgMCAwYzAgMCAwIDAtMjIuNi0yMi42bDIyLjYgMjIuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2MtMTIuNC0xMi40LTMyLjYtMTIuNS00NS4xLS4yYy0uMSAuMS0uMiAuMi0uNSAuNGMtLjUgLjUtMS41IDEuMy0yLjggMi40Yy0yLjcgMi4yLTYuOCA1LjItMTIuMSA4LjJDMzk5LjQgOTAuNCAzODQuOCA5NiAzNjggOTZjLTIwLjggMC00Mi40LTctNTkuNS0xNC42Yy04LjQtMy43LTE1LjQtNy41LTIwLjMtMTAuM2MtMi40LTEuNC00LjMtMi41LTUuNi0zLjNjLS42LS40LTEuMS0uNy0xLjQtLjlsLS4zLS4yIDAgMCAwIDAgMCAwelwiXX0sT2E9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwid29ybVwiLGljb246WzQ0OCw1MTIsW10sXCJlNTk5XCIsXCJNMjI0IDk2YzAtNTMgNDMtOTYgOTYtOTZoMzguNEM0MDcuOSAwIDQ0OCA0MC4xIDQ0OCA4OS42VjE3NnYxNlYzNzZjMCA3NS4xLTYwLjkgMTM2LTEzNiAxMzZzLTEzNi02MC45LTEzNi0xMzZWMjk2YzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwVjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OFYyOTZjMC03NS4xIDYwLjktMTM2IDEzNi0xMzZzMTM2IDYwLjkgMTM2IDEzNnY4MGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwVjE5MkgzMjBjLTUzIDAtOTYtNDMtOTYtOTZ6bTE0NC04YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHpcIl19LFhhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXNlLWNpcmNsZS14bWFya1wiLGljb246WzY0MCw1MTIsW10sXCJlNTBiXCIsXCJNMzIwLjcgMzUxLjdDMzI5IDI2Mi4xIDQwNC4zIDE5MiA0OTYgMTkyYzguOSAwIDE3LjYgLjcgMjYuMSAxLjlMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFoMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDE5MmMxNy43IDAgMzItMTQuMyAzMi0zMlYzODMuN2MwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NGwuNyAwek00OTYgNTEyYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDR6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdfSxRYT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwbHVnXCIsaWNvbjpbMzg0LDUxMixbMTI4MjY4XSxcImYxZTZcIixcIk05NiAwQzc4LjMgMCA2NCAxNC4zIDY0IDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yODggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnYzMmMwIDc3LjQgNTUgMTQyIDEyOCAxNTYuOFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0MTIuOEMyOTcgMzk4IDM1MiAzMzMuNCAzNTIgMjU2VjIyNGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpcIl19LEthPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNoZXZyb24tdXBcIixpY29uOls1MTIsNTEyLFtdLFwiZjA3N1wiLFwiTTIzMy40IDEwNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMjU2IDE3My4zIDg2LjYgMzQyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDE5Mi0xOTJ6XCJdfSxqYT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW5kLXNwb2NrXCIsaWNvbjpbNTc2LDUxMixbMTI4NDA2XSxcImYyNTlcIixcIk0yNDYuOSAyMy43QzI0Mi4zIDYuNiAyMjQuOC0zLjUgMjA3LjcgMS4xcy0yNy4yIDIyLjEtMjIuNiAzOS4yTDIzOCAyMzcuOGMyLjUgOS4yLTQuNSAxOC4yLTE0IDE4LjJjLTYuNCAwLTEyLTQuMi0xMy45LTEwLjNMMTY2LjYgMTAyLjdjLTUuMS0xNi45LTIzLTI2LjQtMzkuOS0yMS4zcy0yNi40IDIzLTIxLjMgMzkuOWw2Mi44IDIwNi40YzIuNCA3LjktNy4yIDEzLjgtMTMuMiA4LjFMOTkuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40cy0xNC42IDQxLjMgMS40IDU2LjZMMTU2LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRoMTAuOSA4LjJjLjEgMCAuMS0uMSAuMS0uMXMuMS0uMSAuMS0uMWM1OC4zLTMuNSAxMDguNi00My4yIDEyNS4zLTk5LjdsODEuMi0yNzVjNS0xNi45LTQuNy0zNC43LTIxLjYtMzkuOHMtMzQuNyA0LjctMzkuOCAyMS42TDQ0My41IDI0Ny4xYy0xLjYgNS4zLTYuNCA4LjktMTIgOC45Yy03LjkgMC0xMy44LTcuMy0xMi4yLTE1LjFsMzYtMTcwLjNjMy43LTE3LjMtNy40LTM0LjMtMjQuNy0zNy45cy0zNC4zIDcuNC0zNy45IDI0LjdMMzU1LjEgMjM1LjFjLTIuNiAxMi4yLTEzLjMgMjAuOS0yNS44IDIwLjljLTExLjkgMC0yMi40LTgtMjUuNC0xOS41bC01Ny0yMTIuOHpcIl19LEphPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN0b3B3YXRjaFwiLGljb246WzQ0OCw1MTIsWzkyMDFdLFwiZjJmMlwiLFwiTTE3NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDE2Vjk4LjRDOTIuMyAxMTMuOCAxNiAyMDAgMTYgMzA0YzAgMTE0LjkgOTMuMSAyMDggMjA4IDIwOHMyMDgtOTMuMSAyMDgtMjA4YzAtNDEuOC0xMi4zLTgwLjctMzMuNS0xMTMuMmwyNC4xLTI0LjFjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMzU1LjcgMTQzYy0yOC4xLTIzLTYyLjItMzguOC05OS43LTQ0LjZWNjRoMTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjI0IDE3NnptNzIgMTkyVjMyMGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYxOTJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl19LFQxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2Uta2lzc1wiLGljb246WzUxMiw1MTIsWzEyODUzNSxcImtpc3NcIl0sXCJmNTk2XCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnptNDguNy0xOTguM2M0LjMgNS4xIDcuMyAxMS40IDcuMyAxOC4zcy0zLjEgMTMuMi03LjMgMTguM2MtNC4zIDUuMi0xMC4xIDkuNy0xNi43IDEzLjRjLTIuNyAxLjUtNS43IDMtOC43IDQuM2MzLjEgMS4zIDYgMi43IDguNyA0LjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjRjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3MtMy4xIDEzLjItNy4zIDE4LjNjLTQuMyA1LjItMTAuMSA5LjctMTYuNyAxMy40QzI3NC43IDQ0My4xIDI1Ny40IDQ0OCAyNDAgNDQ4Yy0zLjYgMC02LjgtMi41LTcuNy02cy42LTcuMiAzLjgtOWwwIDAgMCAwIDAgMCAwIDAgLjItLjFjLjItLjEgLjUtLjMgLjktLjVjLjgtLjUgMi0xLjIgMy40LTIuMWMyLjgtMS45IDYuNS00LjUgMTAuMi03LjZjMy43LTMuMSA3LjItNi42IDkuNi0xMC4xYzIuNS0zLjUgMy41LTYuNCAzLjUtOC42cy0xLTUtMy41LTguNmMtMi41LTMuNS01LjktNi45LTkuNi0xMC4xYy0zLjctMy4xLTcuNC01LjctMTAuMi03LjZjLTEuNC0uOS0yLjYtMS42LTMuNC0yLjFjLS40LS4yLS43LS40LS45LS41bC0uMi0uMSAwIDAgMCAwIDAgMGMtMi41LTEuNC00LjEtNC4xLTQuMS03czEuNi01LjYgNC4xLTdsMCAwIDAgMCAwIDAgMCAwIDAgMCAuMi0uMSAuMy0uMiAuNi0uNGMuOC0uNSAyLTEuMiAzLjQtMi4xYzIuOC0xLjkgNi41LTQuNSAxMC4yLTcuNmMzLjctMy4xIDcuMi02LjYgOS42LTEwLjFjMi41LTMuNSAzLjUtNi40IDMuNS04LjZzLTEtNS0zLjUtOC42Yy0yLjUtMy41LTUuOS02LjktOS42LTEwLjFjLTMuNy0zLjEtNy40LTUuNy0xMC4yLTcuNmMtMS40LS45LTIuNi0xLjYtMy40LTIuMWwtLjQtLjMtLjUtLjMtLjItLjEgMCAwIDAgMCAwIDBjLTMuMi0xLjgtNC43LTUuNS0zLjgtOXM0LjEtNiA3LjctNmMxNy40IDAgMzQuNyA0LjkgNDcuOSAxMi4zYzYuNiAzLjcgMTIuNSA4LjIgMTYuNyAxMy40ek0yMDguNCAyMDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xMjggMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LFphPVQxLFlhPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJyaWRnZS1jaXJjbGUteG1hcmtcIixpY29uOls2NDAsNTEyLFtdLFwiZTRjYlwiLFwiTTY0IDMyQzQ2LjMgMzIgMzIgNDYuMyAzMiA2NHMxNC4zIDMyIDMyIDMyaDQwdjY0SDMyVjI4OGM1MyAwIDk2IDQzIDk2IDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTUzIDQzLTk2IDk2LTk2YzYuMyAwIDEyLjQgLjYgMTguMyAxLjdDMzY3LjEgMjMxLjggNDI2LjkgMTkyIDQ5NiAxOTJjNDIuNSAwIDgxLjYgMTUuMSAxMTIgNDAuMlYxNjBINTM2Vjk2aDQwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDY0ek00ODggOTZ2NjRINDA4Vjk2aDgwek0zNjAgOTZ2NjRIMjgwVjk2aDgwek0yMzIgOTZ2NjRIMTUyVjk2aDgwek00OTYgNTEyYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDR6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdfSx5MT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmYWNlLWdyaW4tdG9uZ3VlXCIsaWNvbjpbNTEyLDUxMixbMTI4NTM5LFwiZ3Jpbi10b25ndWVcIl0sXCJmNTg5XCIsXCJNMCAyNTZDMCAzNjguOSA3My4xIDQ2NC43IDE3NC41IDQ5OC44QzE2NS4zIDQ4NCAxNjAgNDY2LjYgMTYwIDQ0OFY0MDAuN2MtMjQtMTcuNS00My4xLTQxLjQtNTQuOC02OS4yYy01LTExLjggNy0yMi41IDE5LjMtMTguN2MzOS43IDEyLjIgODQuNSAxOSAxMzEuOCAxOXM5Mi4xLTYuOCAxMzEuOC0xOWMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdjLTExLjggMjgtMzEuMSA1Mi01NS40IDY5LjZWNDQ4YzAgMTguNi01LjMgMzYtMTQuNSA1MC44QzQzOC45IDQ2NC43IDUxMiAzNjguOSA1MTIgMjU2QzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZ6bTE3Ni40LTE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTE5Mi0zMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTMyMCA0NDhWNDAyLjZjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZoLTJjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjljLTIuOCAxMi42LTIwLjggMTIuNi0yMy42IDBjLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjloLTJjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXX0sX2E9eTEsJGE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hlc3MtYmlzaG9wXCIsaWNvbjpbMzIwLDUxMixbOTgyMV0sXCJmNDNhXCIsXCJNMTI4IDBDMTEwLjMgMCA5NiAxNC4zIDk2IDMyYzAgMTYuMSAxMS45IDI5LjQgMjcuNCAzMS43Qzc4LjQgMTA2LjggOCAxOTAgOCAyODhjMCA0Ny40IDMwLjggNzIuMyA1NiA4NC43VjQxNkgyNTZWMzcyLjdjMjUuMi0xMi41IDU2LTM3LjQgNTYtODQuN2MwLTM3LjMtMTAuMi03Mi40LTI1LjMtMTA0LjFsLTk5LjQgOTkuNGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkwyNzAuOCAxNTQuNmMtMjMuMi0zOC4xLTUxLjgtNjkuNS03NC4yLTkwLjlDMjEyLjEgNjEuNCAyMjQgNDguMSAyMjQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJIMTI4ek0zMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyelwiXX0sUDE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1ncmluLXdpbmtcIixpY29uOls1MTIsNTEyLFtcImdyaW4td2lua1wiXSxcImY1OGNcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6bS0xNi45LTc5LjJjLTE3LjYtMjMuNS01Mi44LTIzLjUtNzAuNCAwYy01LjMgNy4xLTE1LjMgOC41LTIyLjQgMy4ycy04LjUtMTUuMy0zLjItMjIuNGMzMC40LTQwLjUgOTEuMi00MC41IDEyMS42IDBjNS4zIDcuMSAzLjkgMTcuMS0zLjIgMjIuNHMtMTcuMSAzLjktMjIuNC0zLjJ6TTE3Ni40IDI0MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXX0sY3M9UDEscj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJlYXItZGVhZlwiLGljb246WzUxMiw1MTIsW1wiZGVhZlwiLFwiZGVhZm5lc3NcIixcImhhcmQtb2YtaGVhcmluZ1wiXSxcImYyYTRcIixcIk01MDIuNiA1NC42bC00MCA0MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNDAtNDBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptLTMyMCAzMjBsLTEyOCAxMjhjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDEyOC0xMjhjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMjQwIDEyOGMtNTcuNiAwLTEwNS4xIDQzLjYtMTExLjMgOTkuNWMtMS45IDE3LjYtMTcuOCAzMC4yLTM1LjMgMjguM3MtMzAuMi0xNy44LTI4LjMtMzUuM0M3NC44IDEzMi41IDE0OS40IDY0IDI0MCA2NGM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NmMwIDQ2LTE3LjcgODcuOS00Ni42IDExOS4zYy0xMiAxMy0xNy40IDI0LjgtMTcuNCAzNC43VjQwMGMwIDYxLjktNTAuMSAxMTItMTEyIDExMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmMyNi41IDAgNDgtMjEuNSA0OC00OHYtNi4xYzAtMzIuOSAxNy40LTU5LjYgMzQuNC03OGMxOC40LTIwIDI5LjYtNDYuNiAyOS42LTc1LjljMC02MS45LTUwLjEtMTEyLTExMi0xMTJ6bTAgODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6XCJdfSxhcz1yLHNzPXIsZXM9cixmcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyb2FkLWNpcmNsZS1jaGVja1wiLGljb246WzY0MCw1MTIsW10sXCJlNTY0XCIsXCJNMjEzLjIgMzJIMjg4Vjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzJoNzQuOGMyNy4xIDAgNTEuMyAxNy4xIDYwLjMgNDIuNmw0Mi43IDEyMC42Yy0xMC45LTIuMS0yMi4yLTMuMi0zMy44LTMuMmMtNTkuNSAwLTExMi4xIDI5LjYtMTQ0IDc0LjhWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyYzIuMyAwIDQuNi0uMyA2LjgtLjdjLTQuNSAxNS41LTYuOCAzMS44LTYuOCA0OC43YzAgNS40IC4yIDEwLjcgLjcgMTZsLS43IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0SDg2LjZDNTYuNSA0ODAgMzIgNDU1LjUgMzIgNDI1LjRjMC02LjIgMS4xLTEyLjQgMy4xLTE4LjJMMTUyLjkgNzQuNkMxNjIgNDkuMSAxODYuMSAzMiAyMTMuMiAzMnpNNjQwIDM2OGMwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NHMtMTQ0LTY0LjUtMTQ0LTE0NHM2NC41LTE0NCAxNDQtMTQ0czE0NCA2NC41IDE0NCAxNDR6bS03Ni43LTQzLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDQ4MCAzODUuNGwtMjguNy0yOC43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwbDcyLTcyYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42elwiXX0scnM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZGljZS1maXZlXCIsaWNvbjpbNDQ4LDUxMixbOTg2MF0sXCJmNTIzXCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em02NCAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnptMzIgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptNjQtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpNMzUyIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTMyMCAzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LEYxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNxdWFyZS1yc3NcIixpY29uOls0NDgsNTEyLFtcInJzcy1zcXVhcmVcIl0sXCJmMTQzXCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek05NiAxMzZjMC0xMy4zIDEwLjctMjQgMjQtMjRjMTM3IDAgMjQ4IDExMSAyNDggMjQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTEwLjUtODkuNS0yMDAtMjAwLTIwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRjODMuOSAwIDE1MiA2OC4xIDE1MiAxNTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC01Ny40LTQ2LjYtMTA0LTEwNC0xMDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0em02NCAxMjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXX0sbHM9RjEsaXM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibGFuZC1taW5lLW9uXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1MWJcIixcIk0zNDQgMjRWMTY4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTE5MiAzMjBjMC0xNy43IDE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMydjMySDE5MlYzMjB6bS03Ny4zIDkwLjVjOC4xLTE2LjMgMjQuOC0yNi41IDQyLjktMjYuNUg0ODIuM2MxOC4yIDAgMzQuOCAxMC4zIDQyLjkgMjYuNWwyNy42IDU1LjJDNTYzLjUgNDg3IDU0OCA1MTIgNTI0LjIgNTEySDExNS44Yy0yMy44IDAtMzkuMy0yNS0yOC42LTQ2LjNsMjcuNi01NS4yek0zNi4zIDEzOC4zYzcuNS0xMC45IDIyLjUtMTMuNiAzMy40LTYuMWwxMDQgNzJjMTAuOSA3LjUgMTMuNiAyMi41IDYuMSAzMy40cy0yMi41IDEzLjYtMzMuNCA2LjFsLTEwNC03MmMtMTAuOS03LjUtMTMuNi0yMi41LTYuMS0zMy40em01MzQuMS02LjFjMTAuOS03LjUgMjUuOC00LjggMzMuNCA2LjFzNC44IDI1LjgtNi4xIDMzLjRsLTEwNCA3MmMtMTAuOSA3LjUtMjUuOCA0LjgtMzMuNC02LjFzLTQuOC0yNS44IDYuMS0zMy40bDEwNC03MnpcIl19LG9zPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImktY3Vyc29yXCIsaWNvbjpbMjU2LDUxMixbXSxcImYyNDZcIixcIk0uMSAyOS4zQy0xLjQgNDcgMTEuNyA2Mi40IDI5LjMgNjMuOWw4IC43QzcwLjUgNjcuMyA5NiA5NSA5NiAxMjguM1YyMjRINjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIOTZ2OTUuN2MwIDMzLjMtMjUuNSA2MS01OC43IDYzLjhsLTggLjdDMTEuNyA0NDkuNi0xLjQgNDY1IC4xIDQ4Mi43czE2LjkgMzAuNyAzNC41IDI5LjJsOC0uN2MzNC4xLTIuOCA2NC4yLTE4LjkgODUuNC00Mi45YzIxLjIgMjQgNTEuMiA0MC4xIDg1LjQgNDIuOWw4IC43YzE3LjYgMS41IDMzLjEtMTEuNiAzNC41LTI5LjJzLTExLjYtMzMuMS0yOS4yLTM0LjVsLTgtLjdDMTg1LjUgNDQ0LjcgMTYwIDQxNyAxNjAgMzgzLjdWMjg4aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MFYxMjguM2MwLTMzLjMgMjUuNS02MSA1OC43LTYzLjhsOC0uN2MxNy42LTEuNSAzMC43LTE2LjkgMjkuMi0zNC41UzIzOS0xLjQgMjIxLjMgLjFsLTggLjdDMTc5LjIgMy42IDE0OS4yIDE5LjcgMTI4IDQzLjdjLTIxLjItMjQtNTEuMi00MC04NS40LTQyLjlsLTgtLjdDMTctMS40IDEuNiAxMS43IC4xIDI5LjN6XCJdfSxucz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzdGFtcFwiLGljb246WzUxMiw1MTIsW10sXCJmNWJmXCIsXCJNMzEyIDIwMS44YzAtMTcuNCA5LjItMzMuMiAxOS45LTQ3QzM0NC41IDEzOC41IDM1MiAxMTguMSAzNTIgOTZjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAyMi4xIDcuNSA0Mi41IDIwLjEgNTguOGMxMC43IDEzLjggMTkuOSAyOS42IDE5LjkgNDdjMCAyOS45LTI0LjMgNTQuMi01NC4yIDU0LjJIMTEyQzUwLjEgMjU2IDAgMzA2LjEgMCAzNjhjMCAyMC45IDEzLjQgMzguNyAzMiA0NS4zVjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDEzLjNjMTguNi02LjYgMzItMjQuNCAzMi00NS4zYzAtNjEuOS01MC4xLTExMi0xMTItMTEySDM2Ni4yYy0yOS45IDAtNTQuMi0yNC4zLTU0LjItNTQuMnpNNDE2IDQxNnYzMkg5NlY0MTZINDE2elwiXX0sSHM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3RhaXJzXCIsaWNvbjpbNTc2LDUxMixbXSxcImUyODlcIixcIk0zODQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJINTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDQ0OHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMjB2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMTkydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDk2VjMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg5NlYxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJoOTZWNjR6XCJdfSx6cz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJpXCIsaWNvbjpbMzIwLDUxMixbMTA1XSxcIjQ5XCIsXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2aDk2VjQxNkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTkyVjk2aDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MCAzMnpcIl19LEQxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhyeXZuaWEtc2lnblwiLGljb246WzM4NCw1MTIsWzgzNzIsXCJocnl2bmlhXCJdLFwiZjZmMlwiLFwiTTEyMS45IDExNi4yQzEzOC4zIDEwMy4xIDE1OC43IDk2IDE3OS42IDk2SDIyM2MyNy4xIDAgNDkgMjEuOSA0OSA0OWMwIDExLjUtNCAyMi40LTExLjEgMzFIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMTU1LjVsLTUwLjYgMjguOWMtMS43IDEtMy40IDItNS4xIDMuMUgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1Mi4zYy0yLjggOS45LTQuMyAyMC40LTQuMyAzMWMwIDYyLjQgNTAuNiAxMTMgMTEzIDExM2g0My40YzM1LjUgMCA3MC0xMi4xIDk3LjctMzQuM0wzMDggNDQxYzEzLjgtMTEgMTYtMzEuMiA1LTQ1cy0zMS4yLTE2LTQ1LTVsLTUuOSA0LjdjLTE2LjQgMTMuMS0zNi43IDIwLjItNTcuNyAyMC4ySDE2MWMtMjcuMSAwLTQ5LTIxLjktNDktNDljMC0xMS41IDQtMjIuNCAxMS4xLTMxSDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyMjguNWw1MC42LTI4LjljMS43LTEgMy40LTIgNS4xLTMuMUgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzMxLjdjMi44LTEwIDQuMy0yMC40IDQuMy0zMWMwLTYyLjQtNTAuNi0xMTMtMTEzLTExM0gxNzkuNmMtMzUuNSAwLTcwIDEyLjEtOTcuNyAzNC4zTDc2IDcxYy0xMy44IDExLTE2IDMxLjItNSA0NXMzMS4yIDE2IDQ1IDVsNS45LTQuN3pcIl19LFZzPUQxLG1zPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBpbGxzXCIsaWNvbjpbNTc2LDUxMixbXSxcImY0ODRcIixcIk0xMTIgOTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjI1Nmg5NlYxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTAgMTQ0QzAgODIuMSA1MC4xIDMyIDExMiAzMnMxMTIgNTAuMSAxMTIgMTEyVjM2OGMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMwIDQyOS45IDAgMzY4VjE0NHpNNTU0LjkgMzk5LjRjLTcuMSAxMi4zLTIzLjcgMTMuMS0zMy44IDMuMUwzMzMuNSAyMTQuOWMtMTAtMTAtOS4zLTI2LjcgMy4xLTMzLjhDMzYwIDE2Ny43IDM4Ny4xIDE2MCA0MTYgMTYwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwYzAgMjguOS03LjcgNTYtMjEuMSA3OS40em0tNTkuNSA1OS41QzQ3MiA0NzIuMyA0NDQuOSA0ODAgNDE2IDQ4MGMtODguNCAwLTE2MC03MS42LTE2MC0xNjBjMC0yOC45IDcuNy01NiAyMS4xLTc5LjRjNy4xLTEyLjMgMjMuNy0xMy4xIDMzLjgtMy4xTDQ5OC41IDQyNS4xYzEwIDEwIDkuMyAyNi43LTMuMSAzMy44elwiXX0sUjE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1ncmluLXdpZGVcIixpY29uOls1MTIsNTEyLFsxMjg1MTUsXCJncmluLWFsdFwiXSxcImY1ODFcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0zODMuOCAzMTcuOGMxMi4zLTMuNyAyNC4zIDcgMTkuMiAxOC43Yy0yNC41IDU2LjktODEuMSA5Ni43LTE0NyA5Ni43cy0xMjIuNS0zOS44LTE0Ny05Ni43Yy01LjEtMTEuOCA2LjktMjIuNCAxOS4yLTE4LjdDMTY2LjcgMzI5LjQgMjEwLjEgMzM2IDI1NiAzMzZzODkuMy02LjYgMTI3LjgtMTguMnpNMjA4IDE5MmMwIDM1LjMtMTQuMyA2NC0zMiA2NHMtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0czMyIDI4LjcgMzIgNjR6bTEyOCA2NGMtMTcuNyAwLTMyLTI4LjctMzItNjRzMTQuMy02NCAzMi02NHMzMiAyOC43IDMyIDY0cy0xNC4zIDY0LTMyIDY0elwiXX0sdnM9UjEsTXM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidG9vdGhcIixpY29uOlszODQsNTEyLFsxMjk0NjNdLFwiZjVjOVwiLFwiTTE1NC4xIDUyLjFDMTM3LjMgMzkuMSAxMTYuNyAzMiA5NS41IDMyQzQyLjcgMzIgMCA3NC43IDAgMTI3LjV2Ni4yYzAgMTUuOCAzLjcgMzEuMyAxMC43IDQ1LjVsMjMuNSA0Ny4xYzQuNSA4LjkgNy42IDE4LjQgOS40IDI4LjJMODAuNCA0NjAuMmMyIDExLjIgMTEuNiAxOS40IDIyLjkgMTkuOHMyMS40LTcuNCAyNC0xOC40bDI4LjktMTIxLjNDMTYwLjIgMzIzLjcgMTc1IDMxMiAxOTIgMzEyczMxLjggMTEuNyAzNS44IDI4LjNsMjguOSAxMjEuM2MyLjYgMTEuMSAxMi43IDE4LjggMjQgMTguNHMyMC45LTguNiAyMi45LTE5LjhsMzYuNy0yMDUuOGMxLjgtOS44IDQuOS0xOS4zIDkuNC0yOC4ybDIzLjUtNDcuMWM3LjEtMTQuMSAxMC43LTI5LjcgMTAuNy00NS41di0yLjFjMC01NS00NC42LTk5LjYtOTkuNi05OS42Yy0yNC4xIDAtNDcuNCA4LjgtNjUuNiAyNC42bC0zLjIgMi44IDE5LjUgMTUuMmM3IDUuNCA4LjIgMTUuNSAyLjggMjIuNXMtMTUuNSA4LjItMjIuNSAyLjhsLTI0LjQtMTktMzctMjguOHpcIl19LHRzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZcIixpY29uOls0NDgsNTEyLFsxMThdLFwiNTZcIixcIk01MS43IDM0LjVjMTYuMy02LjggMzUgLjkgNDEuOCAxNy4yTDIyNCAzNjQuOCAzNTQuNSA1MS43YzYuOC0xNi4zIDI1LjUtMjQgNDEuOC0xNy4yczI0IDI1LjUgMTcuMiA0MS44bC0xNjAgMzg0Yy01IDExLjktMTYuNiAxOS43LTI5LjUgMTkuN3MtMjQuNi03LjgtMjkuNS0xOS43bC0xNjAtMzg0Yy02LjgtMTYuMyAuOS0zNSAxNy4yLTQxLjh6XCJdfSxocz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiaWN5Y2xlXCIsaWNvbjpbNjQwLDUxMixbMTI4NjkwXSxcImYyMDZcIixcIk0zMTIgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoMjUuN2wzNC42IDY0SDIyMi45bC0yNy40LTM4QzE5MSA5OS43IDE4My43IDk2IDE3NiA5NkgxMjBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRoNDMuN2wyMi4xIDMwLjctMjYuNiA1My4xYy0xMC0yLjUtMjAuNS0zLjgtMzEuMi0zLjhDNTcuMyAyMjQgMCAyODEuMyAwIDM1MnM1Ny4zIDEyOCAxMjggMTI4YzY1LjMgMCAxMTkuMS00OC45IDEyNy0xMTJoNDljOC41IDAgMTYuMy00LjUgMjAuNy0xMS44bDg0LjgtMTQzLjUgMjEuNyA0MC4xQzQwMi40IDI3Ni4zIDM4NCAzMTIgMzg0IDM1MmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4cy01Ny4zLTEyOC0xMjgtMTI4Yy0xMy41IDAtMjYuNSAyLjEtMzguNyA2TDM3NS40IDQ4LjhDMzY5LjggMzguNCAzNTkgMzIgMzQ3LjIgMzJIMzEyek00NTguNiAzMDMuN2wzMi4zIDU5LjdjNi4zIDExLjcgMjAuOSAxNiAzMi41IDkuN3MxNi0yMC45IDkuNy0zMi41bC0zMi4zLTU5LjdjMy42LS42IDcuNC0uOSAxMS4yLS45YzM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcyYzAtMTguNiA3LTM1LjUgMTguNi00OC4zek0xMzMuMiAzNjhoNjVjLTcuMyAzMi4xLTM2IDU2LTcwLjIgNTZjLTM5LjggMC03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJjMS43IDAgMy40IC4xIDUuMSAuMmwtMjQuMiA0OC41Yy05IDE4LjEgNC4xIDM5LjQgMjQuMyAzOS40em0zMy43LTQ4bDUwLjctMTAxLjMgNzIuOSAxMDEuMi0uMSAuMUgxNjYuOHptOTAuNi0xMjhIMzY1LjlMMzE3IDI3NC44IDI1Ny40IDE5MnpcIl19LGw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3RhZmYtc25ha2VcIixpY29uOlszODQsNTEyLFtcInJvZC1hc2NsZXBpdXNcIixcInJvZC1zbmFrZVwiLFwic3RhZmYtYWVzY3VsYXBpdXNcIl0sXCJlNTc5XCIsXCJNMjIyLjYgNDMuMmwtLjIgNC44SDI4OGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NkgyNDhWMTYwaDQwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDI0OCAyMjBsLTQuNSAxNDRIMjU2YzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2SDI0MFYzODRoMTZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjEzbC0zLjEgOTkuNUwyMDguNSA0OTVsMCAxYy0uMyA4LjktNy42IDE2LTE2LjUgMTZzLTE2LjItNy4xLTE2LjUtMTZsMC0xLTEtMzFIMTM2Yy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwaDM2bC0xLTMySDE1MmMtNTMgMC05Ni00My05Ni05NmMwLTQ3LjYgMzQuNi04Ny4xIDgwLTk0LjdWMjU2YzAgOC44IDcuMiAxNiAxNiAxNmgxNi41TDE2NCAxMjhIMTM2IDEyMi42Yy05IDE4LjktMjguMyAzMi01MC42IDMySDU2Yy0zMC45IDAtNTYtMjUuMS01Ni01NlMyNS4xIDQ4IDU2IDQ4aDggOCA4OS41bC0uMS00LjhMMTYxIDMyYzAtLjcgMC0xLjMgMC0xLjljLjUtMTYuNiAxNC4xLTMwIDMxLTMwczMwLjUgMTMuNCAzMSAzMGMwIC42IDAgMS4zIDAgMS45bC0uNCAxMS4yek02NCAxMTJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZ6XCJdfSxDcz1sLExzPWwscHM9bCxkcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoZWFkLXNpZGUtY291Z2gtc2xhc2hcIixpY29uOls2NDAsNTEyLFtdLFwiZTA2MlwiLFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMNDQwLjMgMzE5LjhjMjIuMy0yLjEgMzkuNy0yMC44IDM5LjctNDMuN2MwLTEwLTMuNC0xOS42LTkuNi0yNy40bC00Mi01Mi42Yy04LjMtMTAuMy0xMi44LTIzLTE1LTM2LjFDMzk4LjIgNjkuMyAzMTkuMiAwIDIyNCAwSDIwMS43QzE1NyAwIDExNS43IDE0LjUgODIuMiAzOS4yTDM4LjggNS4xek0wIDIwMS43YzAgNDQuOCAxOC4zIDkxLjUgNDYuNSAxMjcuN0M1Ni45IDM0Mi44IDY0IDM1OC44IDY0IDM3NS44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyNTZjMTcuNyAwIDMyLTE0LjMgMzItMzJoNjRjMzIuOCAwIDU5LjktMjQuNyA2My42LTU2LjZsLTkuNC03LjRIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMmMwLTEwLjUgNS4xLTE5LjkgMTIuOS0yNS43TDIwLjggMTEyLjRDNy41IDEzOS4zIDAgMTY5LjYgMCAyMDEuN3pNNjMyIDI4OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6bS04OCA3MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em02NCA0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0elwiXX0sVTE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidHJ1Y2stbWVkaWNhbFwiLGljb246WzY0MCw1MTIsWzEyODY1NyxcImFtYnVsYW5jZVwiXSxcImYwZjlcIixcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OFYzNjhjMCAyNi41IDIxLjUgNDggNDggNDhINjRjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NkgzODRjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYyODggMjU2IDIzNy4zYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxMTQuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0g0MTZWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTQxNiAxNjBoNTAuN0w1NDQgMjM3LjNWMjU2SDQxNlYxNjB6TTIwOCA0MTZjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4em0yNzIgNDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OHpNMTEyIDE0NGMwLTguOCA3LjItMTYgMTYtMTZoNDhWODBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjQwdjQ4YzAgOC44LTcuMiAxNi0xNiAxNkgxOTJjLTguOCAwLTE2LTcuMi0xNi0xNlYxOTJIMTI4Yy04LjggMC0xNi03LjItMTYtMTZWMTQ0elwiXX0sdXM9VTEseHM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwid2hlYXQtYXduLWNpcmNsZS1leGNsYW1hdGlvblwiLGljb246WzY0MCw1MTIsW10sXCJlNTk4XCIsXCJNNTA1IDQxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMMzgzIDk1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsODgtODh6TTMwNS41IDI3LjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwTDI3MS41IDM4LjZjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44bC0xMS4zLTExLjNjLTYuMi02LjItMTYuNC02LjItMjIuNiAwbC0xMS4zIDExLjNjLTM3LjUgMzcuNS0zNy41IDk4LjMgMCAxMzUuOGwxMC40IDEwLjQtMzAuNSAzMC41Yy0zLjQtMjcuMy0xNS41LTUzLjgtMzYuNS03NC44TDEwMS44IDIzMWMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMNjcuOSAyNDIuM2MtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44bDEwLjQgMTAuNEw5LjQgNDU3LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguOS02OC45IDEyLjIgMTIuMmMzNy41IDM3LjUgOTguMyAzNy41IDEzNS44IDBsMTEuMy0xMS4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC0xMS4zLTExLjNjLTIxLjgtMjEuOC00OS42LTM0LjEtNzguMS0zNi45bDMxLjktMzEuOSAxMi4yIDEyLjJjMjIuNSAyMi41IDUzLjMgMzEuNSA4Mi40IDI3YzAtMSAwLTIuMSAwLTMuMWMwLTMzLjEgOS4xLTY0LjEgMjUtOTAuNmMtMTUuNS04LjctMzIuNS0xMy44LTQ5LjgtMTUuNWwzMS45LTMxLjkgMTIuMiAxMi4yYzYgNiAxMi42IDExLjEgMTkuNyAxNS4yYzI3LjUtMzQgNjcuMy01Ny41IDExMi42LTYzLjhjLTQuMS0zLjgtOC40LTcuMy0xMi45LTEwLjVMNTA1IDEzN2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01OS40IDU5LjRjLTIwLjYtNC40LTQyLTMuNy02Mi4zIDIuMWM2LjEtMjEuMyA2LjYtNDMuOCAxLjQtNjUuM0w0MDkgNDFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwzMjkuMSA1Mi45Yy0zLjctNS03LjgtOS44LTEyLjQtMTQuM0wzMDUuNSAyNy4zek00OTYgNTEyYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDR6bTAtNDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptMC0xOTJjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdfSxncz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzbm93bWFuXCIsaWNvbjpbNTc2LDUxMixbOTczMSw5OTI0XSxcImY3ZDBcIixcIk0zNzMuMSAxNDAuNmMtMiAzLjktMS42IDguNiAxLjIgMTJjNyA4LjUgMTIuOSAxOC4xIDE3LjIgMjguNEw0NDAgMTYwLjJWMTIwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2MTkuNmwyMi41LTkuN2MxMi4yLTUuMiAyNi4zIC40IDMxLjUgMTIuNnMtLjQgMjYuMy0xMi42IDMxLjVsLTU2IDI0LTczLjYgMzEuNWMtLjUgOS41LTIuMSAxOC42LTQuOCAyNy4zYy0xLjIgMy44LS4xIDggMi44IDEwLjhDNDI4LjcgMjk2LjkgNDQ4IDMzOC4yIDQ0OCAzODRjMCA0NC43LTE4LjMgODUtNDcuOCAxMTQuMWMtOS45IDkuNy0yMy43IDEzLjktMzcuNSAxMy45SDIxMy4zYy0xMy45IDAtMjcuNy00LjItMzcuNS0xMy45QzE0Ni4zIDQ2OSAxMjggNDI4LjcgMTI4IDM4NGMwLTQ1LjggMTkuMy04Ny4xIDUwLjEtMTE2LjNjMi45LTIuOCA0LTYuOSAyLjgtMTAuOGMtMi43LTguNy00LjMtMTcuOS00LjgtMjcuM2wtNzMuNi0zMS41LTU2LTI0Yy0xMi4yLTUuMi0xNy44LTE5LjMtMTIuNi0zMS41czE5LjMtMTcuOCAzMS41LTEyLjZMODggMTM5LjZWMTIwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2NDAuMkwxODQuNiAxODFjNC4zLTEwLjMgMTAuMS0xOS45IDE3LjItMjguNGMyLjgtMy40IDMuMy04LjEgMS4yLTEyQzE5NiAxMjcuMiAxOTIgMTEyLjEgMTkyIDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCAxNi4xLTQgMzEuMi0xMC45IDQ0LjZ6TTI1NiA5NmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnptNDggMTI4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6bS0xNiA4MGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnptMTYgNDhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNnpNMzIwIDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2em0tNDggMjR2My4yYzAgMy4yIC44IDYuMyAyLjMgOWw5IDE2LjljLjkgMS43IDIuNyAyLjggNC43IDIuOHMzLjgtMS4xIDQuNy0yLjhsOS0xNi45YzEuNS0yLjggMi4zLTUuOSAyLjMtOVYxMjBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ6XCJdfSxTcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtb3J0YXItcGVzdGxlXCIsaWNvbjpbNTEyLDUxMixbXSxcImY1YTdcIixcIk01MDQuMyAxMS4xQzQ5My4zLTEuNiA0NzQuNS0zLjcgNDYxIDYuMkwyNTIuMyAxNjBIMzk3LjNMNTAyLjYgNTQuNmMxMS44LTExLjggMTIuNi0zMC44IDEuNi00My41ek0zMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJjMCA4Mi41IDQzLjQgMTQ3LjcgMTIzLjkgMTc2LjJjLTExLjEgMTMuOS0xOS40IDMwLjMtMjMuOSA0OC4xQzEyNy42IDQ5Ny40IDE0Mi4zIDUxMiAxNjAgNTEySDM1MmMxNy43IDAgMzIuNC0xNC42IDI4LjEtMzEuN2MtNC41LTE3LjgtMTIuOC0zNC4xLTIzLjktNDguMUM0MzYuNiA0MDMuNyA0ODAgMzM4LjUgNDgwIDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpcIl19LE5zPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJvYWQtYmFycmllclwiLGljb246WzY0MCw1MTIsW10sXCJlNTYyXCIsXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNjYuM0wxNDkuMiA5Nkg2NFY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDA1LjIgOTZIMzMwLjhsLTUuNCAxMC43TDIzNC44IDI4OGg3NC4zbDUuNC0xMC43TDQwNS4yIDk2ek0zNjIuOCAyODhoNzQuM2w1LjQtMTAuN0w1MzMuMiA5Nkg0NTguOGwtNS40IDEwLjdMMzYyLjggMjg4ek0yMDIuOCA5NmwtNS40IDEwLjdMMTA2LjggMjg4aDc0LjNsNS40LTEwLjdMMjc3LjIgOTZIMjAyLjh6bTI4OCAxOTJINTc2VjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjUzLjdMNDkwLjggMjg4elwiXX0sd3M9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2Nob29sXCIsaWNvbjpbNjQwLDUxMixbMTI3OTc5XSxcImY1NDlcIixcIk0zMzcuOCA1LjRDMzI3LTEuOCAzMTMtMS44IDMwMi4yIDUuNGwtMTM5IDkyLjdMMzcuNiAxMjZDMTUuNiAxMzAuOSAwIDE1MC4zIDAgMTcyLjhWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxNzIuOGMwLTIyLjUtMTUuNi00Mi0zNy42LTQ2LjlMNDc2LjggOTguMSAzMzcuOCA1LjR6TTI1NiA0MTZjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHY5NkgyNTZWNDE2ek05NiAxOTJoMzJjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkg5NmMtOC44IDAtMTYtNy4yLTE2LTE2VjIwOGMwLTguOCA3LjItMTYgMTYtMTZ6bTQwMCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djY0YzAgOC44LTcuMiAxNi0xNiAxNkg1MTJjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDh6TTk2IDMyMGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnptNDAwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDUxMmMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNnpNNDA4IDE3NmMwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OHMzOS40LTg4IDg4LTg4czg4IDM5LjQgODggODh6bS04OC00OGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzMzZWMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnpcIl19LGtzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImlnbG9vXCIsaWNvbjpbNTc2LDUxMixbXSxcImY3YWVcIixcIk0zMjAgMzMuOFYxNjBINDguNUMxMDAuMiA4Mi44IDE4OC4xIDMyIDI4OCAzMmMxMC44IDAgMjEuNSAuNiAzMiAxLjh6TTM1MiAxNjBWMzkuMUM0MjQuOSA1NS43IDQ4Ny4yIDk5LjggNTI3LjUgMTYwSDM1MnpNMjkuOSAxOTJIOTZWMzIwSDBjMC00NiAxMC44LTg5LjQgMjkuOS0xMjh6TTE5MiAzMjBIMTI4VjE5Mkg0NDhWMzIwSDM4NHYzMkg1NzZ2ODBjMCAyNi41LTIxLjUgNDgtNDggNDhIMzUyVjM1MmMwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NFY0ODBINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjM1MkgxOTJWMzIwem0yODggMFYxOTJoNjYuMWMxOS4yIDM4LjYgMjkuOSA4MiAyOS45IDEyOEg0ODB6XCJdfSxicz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJqb2ludFwiLGljb246WzY0MCw1MTIsW10sXCJmNTk1XCIsXCJNNDQ4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQzYzAgNTUuMiAyMS45IDEwOC4xIDYwLjkgMTQ3LjFsMjEgMjFjOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjl2MTFjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNDVjMC0yOS43LTExLjgtNTguMi0zMi44LTc5LjJsLTIxLTIxQzQ2My4yIDExNy44IDQ0OCA4MS4yIDQ0OCA0M1YzMnpNNTc2IDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI0NWMwLTU1LjItMjEuOS0xMDguMS02MC45LTE0Ny4xbC0yMS0yMWMtOS05LTE0LjEtMjEuMi0xNC4xLTMzLjlWMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWNDNjMCAyOS43IDExLjggNTguMiAzMi44IDc5LjJsMjEgMjFjMjcgMjcgNDIuMiA2My42IDQyLjIgMTAxLjh2MTF6TTIyOS44IDM2MGMtNC43LTIuMy0xMC0yLjctMTUuMi0yYy0zNy44IDUuNi03NS4yIDE0LjMtMTA2LjkgMjIuOEM4MS4zIDM4OCA1OC4zIDM5NS4xIDQyIDQwMC40Yy04LjIgMi43LTE0LjcgNC45LTE5LjIgNi41Yy0yLjMgLjgtNCAxLjQtNS4yIDEuOGwtMS4zIC41QzYuOCA0MTIuNSAwIDQyMS40IDAgNDMyczYuOCAxOS41IDE2LjMgMjIuN2wxLjMgLjVjMS4yIC40IDMgMS4xIDUuMiAxLjhjNC41IDEuNiAxMSAzLjggMTkuMiA2LjVjMTYuMyA1LjQgMzkuMiAxMi41IDY1LjcgMTkuNkMxNjAuMyA0OTcuMyAyMjguOCA1MTIgMjg4IDUxMmg2Ny4zYzQuMSAwIDYuMy01LjEgMy42LTguM0wyNTYuNSAzODAuOGMtNy40LTguOS0xNi41LTE1LjktMjYuNy0yMC44ek00NDUgNTEyaDE5IDUxLjNjNC4xIDAgNi4zLTUuMSAzLjYtOC4zTDQxNi41IDM4MC44QzQwMS4zIDM2Mi41IDM3OC44IDM1MiAzNTUgMzUySDMzNiAyODhjLTEuMSAwLTIuMyAwLTMuNCAwYy00LjEgMC02LjIgNS4xLTMuNSA4LjNMMzgzLjUgNDgzLjJDMzk4LjcgNTAxLjUgNDIxLjIgNTEyIDQ0NSA1MTJ6bS0zLjktMTUxLjdMNTQzLjUgNDgzLjJjMTQuNiAxNy41IDM1LjkgMjcuOSA1OC42IDI4LjdjMjEuMS0xLjEgMzcuOS0xOC42IDM3LjktMzkuOVYzOTJjMC0yMi4xLTE3LjktNDAtNDAtNDBINDQ0LjdjLTQuMSAwLTYuMyA1LjEtMy42IDguM3pcIl19LEFzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFuZ2xlLXJpZ2h0XCIsaWNvbjpbMzIwLDUxMixbODI1MF0sXCJmMTA1XCIsXCJNMjc4LjYgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE2MCAxNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDIxMC43IDI1NiA3My40IDExOC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjB6XCJdfSxCcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob3JzZVwiLGljb246WzU3Niw1MTIsWzEyODAxNF0sXCJmNmYwXCIsXCJNNDQ4IDIzOC4xVjE2MGgxNmw5LjggMTkuNmMxMi41IDI1LjEgNDIuMiAzNi40IDY4LjMgMjZjMjAuNS04LjIgMzMuOS0yOCAzMy45LTUwLjFWODBjMC0xOS4xLTguNC0zNi4zLTIxLjctNDhINTYwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDQ4MCA0NDhDMzc3LjMgMCAzMjAgNTcuMyAzMjAgMTI4SDIyNCAyMDMuMiAxNDguOGMtMzAuNyAwLTU3LjYgMTYuMy03Mi41IDQwLjhDMzMuMiAxNzQuNSAwIDIxMS40IDAgMjU2djU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjU2YzAtMTMuNCA2LjYtMjUuMiAxNi43LTMyLjVjMS42IDEzIDYuMyAyNS40IDEzLjYgMzYuNGwyOC4yIDQyLjRjOC4zIDEyLjQgNi40IDI4LjctMS4yIDQxLjZjLTE2LjUgMjgtMjAuNiA2Mi4yLTEwIDkzLjlsMTcuNSA1Mi40YzQuNCAxMy4xIDE2LjYgMjEuOSAzMC40IDIxLjloMzMuN2MyMS44IDAgMzcuMy0yMS40IDMwLjQtNDIuMWwtMjAuOC02Mi41Yy0yLjEtNi40LS41LTEzLjQgNC4zLTE4LjJsMTIuNy0xMi43YzEzLjItMTMuMiAyMC42LTMxLjEgMjAuNi00OS43YzAtMi4zLS4xLTQuNi0uMy02LjlsODQgMjRjNC4xIDEuMiA4LjIgMi4xIDEyLjMgMi44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYzMTUuN2MxOS4yLTE5LjIgMzEuNS00NS43IDMyLTc1LjdoMHYtMS45ek00OTYgOTZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6XCJdfSxUcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJxXCIsaWNvbjpbNTEyLDUxMixbMTEzXSxcIjUxXCIsXCJNOTYgMjU2YzAgODguNCA3MS42IDE2MCAxNjAgMTYwYzI4LjkgMCA1Ni03LjcgNzkuNC0yMS4xbC03Mi04Ni40Yy0xMS4zLTEzLjYtOS41LTMzLjggNC4xLTQ1LjFzMzMuOC05LjUgNDUuMSA0LjFsNzAuOSA4NS4xQzQwMy45IDMyNS44IDQxNiAyOTIuMyA0MTYgMjU2YzAtODguNC03MS42LTE2MC0xNjAtMTYwUzk2IDE2Ny42IDk2IDI1NnpNMzc2LjkgNDQ0LjZDMzQyIDQ2NyAzMDAuNSA0ODAgMjU2IDQ4MEMxMzIuMyA0ODAgMzIgMzc5LjcgMzIgMjU2UzEzMi4zIDMyIDI1NiAzMnMyMjQgMTAwLjMgMjI0IDIyNGMwIDU2LjEtMjAuNiAxMDcuNC01NC43IDE0Ni43bDQ3LjMgNTYuOGMxMS4zIDEzLjYgOS41IDMzLjgtNC4xIDQ1LjFzLTMzLjggOS41LTQ1LjEtNC4xbC00Ni42LTU1Ljl6XCJdfSx5cz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJnXCIsaWNvbjpbNDQ4LDUxMixbMTAzXSxcIjQ3XCIsXCJNMjI0IDk2QzEzNS42IDk2IDY0IDE2Ny42IDY0IDI1NnM3MS42IDE2MCAxNjAgMTYwYzc3LjQgMCAxNDItNTUgMTU2LjgtMTI4SDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJjMCAxMjMuNy0xMDAuMyAyMjQtMjI0IDIyNFMwIDM3OS43IDAgMjU2UzEwMC4zIDMyIDIyNCAzMmM1Ny40IDAgMTA5LjcgMjEuNiAxNDkuMyA1N2MxMy4yIDExLjggMTQuMyAzMiAyLjUgNDUuMnMtMzIgMTQuMy00NS4yIDIuNUMzMDIuMyAxMTEuNCAyNjUgOTYgMjI0IDk2elwiXX0sUHM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibm90ZXMtbWVkaWNhbFwiLGljb246WzUxMiw1MTIsW10sXCJmNDgxXCIsXCJNOTYgMzUyVjk2YzAtMzUuMyAyOC43LTY0IDY0LTY0SDQxNmMzNS4zIDAgNjQgMjguNyA2NCA2NFYyOTMuNWMwIDE3LTYuNyAzMy4zLTE4LjcgNDUuM2wtNTguNSA1OC41Yy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43SDE2MGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6TTI3MiAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNnY0OEgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNTZoNDhjOC44IDAgMTYtNy4yIDE2LTE2VjIwOGMwLTguOC03LjItMTYtMTYtMTZIMzIwVjE0NGMwLTguOC03LjItMTYtMTYtMTZIMjcyem0yNCAzMzZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMTM2QzYwLjkgNTEyIDAgNDUxLjEgMCAzNzZWMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyMjRjMCA0OC42IDM5LjQgODggODggODhIMjk2elwiXX0saT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0ZW1wZXJhdHVyZS1oYWxmXCIsaWNvbjpbMzIwLDUxMixbMTI3Nzc3LFwidGVtcGVyYXR1cmUtMlwiLFwidGhlcm1vbWV0ZXItMlwiLFwidGhlcm1vbWV0ZXItaGFsZlwiXSxcImYyYzlcIixcIk0xNjAgNjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjI3Ni41YzAgMTcuMy03LjEgMzEuOS0xNS4zIDQyLjVDODYuMiAzMzIuNiA4MCAzNDkuNSA4MCAzNjhjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTE4LjUtNi4yLTM1LjQtMTYuNy00OC45Yy04LjItMTAuNi0xNS4zLTI1LjItMTUuMy00Mi41VjExMmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDggMTEyQzQ4IDUwLjIgOTguMSAwIDE2MCAwczExMiA1MC4xIDExMiAxMTJWMjc2LjVjMCAuMSAuMSAuMyAuMiAuNmMuMiAuNiAuOCAxLjYgMS43IDIuOGMxOC45IDI0LjQgMzAuMSA1NSAzMC4xIDg4LjFjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTMTYgNDQ3LjUgMTYgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZWMTEyek0yMDggMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM1YyMDBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNlYzMjIuN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjN6XCJdfSxGcz1pLERzPWksUnM9aSxVcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkb25nLXNpZ25cIixpY29uOlszODQsNTEyLFtdLFwiZTE2OVwiLFwiTTI4OCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMzJ2NDkuMWMtMTguOC0xMC45LTQwLjctMTcuMS02NC0xNy4xYy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOHM1Ny4zIDEyOCAxMjggMTI4YzI0LjUgMCA0Ny40LTYuOSA2Ni44LTE4LjhjNSAxMS4xIDE2LjIgMTguOCAyOS4yIDE4LjhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjg4IDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjU2IDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6TTMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6XCJdfSxxcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYXBzdWxlc1wiLGljb246WzU3Niw1MTIsW10sXCJmNDZiXCIsXCJNNjQgMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhWMjU2SDY0VjE0NHpNMCAxNDRWMzY4YzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJWMTg5LjZjMS44IDE5LjEgOC4yIDM4IDE5LjggNTQuOEwzNzIuMyA0MzEuN2MzNS41IDUxLjcgMTA1LjMgNjQuMyAxNTYgMjguMXM2My0xMDcuNSAyNy41LTE1OS4yTDQyNy4zIDExMy4zQzM5MS44IDYxLjUgMzIxLjkgNDkgMjcxLjMgODUuMmMtMjggMjAtNDQuMyA1MC44LTQ3LjMgODNWMTQ0YzAtNjEuOS01MC4xLTExMi0xMTItMTEyUzAgODIuMSAwIDE0NHptMjk2LjYgNjQuMmMtMTYtMjMuMy0xMC01NS4zIDExLjktNzFjMjEuMi0xNS4xIDUwLjUtMTAuMyA2NiAxMi4ybDY3IDk3LjZMMzYxLjYgMzAzbC02NS05NC44ek00OTEgNDA3LjdjLS44IC42LTEuNiAxLjEtMi40IDEuNmw0LTIuOGMtLjUgLjQtMSAuOC0xLjYgMS4yelwiXX0scTE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicG9vLXN0b3JtXCIsaWNvbjpbNDQ4LDUxMixbXCJwb28tYm9sdFwiXSxcImY3NWFcIixcIk0yMzYuOSAuMmMtNS41LS43LTExIDEuNC0xNC41IDUuN3MtNC42IDEwLjEtMi44IDE1LjNjMi44IDguMiA0LjMgMTYuOSA0LjMgMjYuMWMwIDQ0LjMtMzUuOCA4MC4xLTgwIDgwLjFjLTEuNCAwLTIuOCAuMi00IC41SDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRjMCAxMi40IDMuNSAyNCA5LjcgMzMuOEMzMS42IDIzNC4zIDAgMjcxLjUgMCAzMTZjMCA0OS4xIDM4LjUgODkuMiA4Ni45IDkxLjljLTEuOC0yLjktMy40LTYuMS00LjUtOS40Yy02LTE3LjUtLjUtMzYuOSAxMy42LTQ4LjVMMjM4LjIgMjMzLjZjMTUuNi0xMi44IDM3LjktMTIuNyA1My41IC4xczIwLjMgMzUuMSAxMS4zIDUzLjRsLTI2IDUzLjJoMTYuM2MxOC4xIDAgMzQuMyAxMS43IDQwLjMgMjkuMmM0LjUgMTMuMSAyLjYgMjcuMy00LjYgMzguNGgyN2M1MC44IDAgOTItNDEuMiA5Mi05MmMwLTQ0LjUtMzEuNi04MS43LTczLjctOTAuMmM2LjEtOS44IDkuNy0yMS40IDkuNy0zMy44YzAtMzUuMy0yOC43LTY0LTY0LTY0aC01LjdjMy43LTEwLjIgNS43LTIxLjEgNS43LTMyLjZjMC00OC43LTM2LjEtODguOS04My4xLTk1LjJ6bTM0LjIgMjU5LjJjLTYtNC42LTE0LjMtNC40LTIwLjEgLjRsLTEzMy40IDExMmMtNS4yIDQuMy03IDExLjQtNC43IDE3LjdzOC4zIDEwLjUgMTUgMTAuNWg1NC43bC00Mi41IDg5LjFjLTMuMiA2LjgtMS4zIDE0LjkgNC43IDE5LjVzMTQuMyA0LjQgMjAuMS0uNGwxMzMuNC0xMTJjNS4xLTQuMyA3LTExLjQgNC43LTE3LjdzLTguMy0xMC41LTE1LTEwLjVIMjMzLjNsNDIuNS04OS4xYzMuMi02LjggMS4zLTE0LjktNC43LTE5LjV6XCJdfSxHcz1xMSxHMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmYWNlLWZyb3duLW9wZW5cIixpY29uOls1MTIsNTEyLFsxMjg1NTAsXCJmcm93bi1vcGVuXCJdLFwiZjU3YVwiLFwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJ6TTE3Ni40IDI0MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyem0xOTItMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0tMTg2IDE3NC41Yy0xMi40IDUuMi0yNi41LTQuMS0yMS4xLTE2LjRjMTYtMzYuNiA1Mi40LTYyLjEgOTQuOC02Mi4xczc4LjggMjUuNiA5NC44IDYyLjFjNS40IDEyLjMtOC43IDIxLjYtMjEuMSAxNi40Yy0yMi40LTkuNS00Ny40LTE0LjgtNzMuNy0xNC44cy01MS4zIDUuMy03My43IDE0Ljh6XCJdfSxXcz1HMSxFcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW5kLXBvaW50LXVwXCIsaWNvbjpbMzg0LDUxMixbOTc1N10sXCJmMGE2XCIsXCJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMFM5NiAxNC4zIDk2IDMyVjI0MEgzMlYzMnpNMjI0IDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE5MnptLTY0LTY0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTYwIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0em0tOTYgODhsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNmMxMy4yIDAgMjUuNC00IDM1LjYtMTAuOGM4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44YzExLjcgMCAyMi42LTMuMSAzMi04LjZWMzUyYzAgODguNC03MS42IDE2MC0xNjAgMTYwSDE2Mi4zYy00Mi40IDAtODMuMS0xNi45LTExMy4xLTQ2LjlMMzcuNSA0NTMuNUMxMy41IDQyOS41IDAgMzk2LjkgMCAzNjNWMzM2YzAtMzUuMyAyOC43LTY0IDY0LTY0aDg4YzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwSDk2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDU2YzM5LjggMCA3Mi0zMi4yIDcyLTcyelwiXX0sSXM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibW9uZXktYmlsbFwiLGljb246WzU3Niw1MTIsW10sXCJmMGQ2XCIsXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTY0IDMyMEg2NFYzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjR6TTY0IDE5MlYxMjhoNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTQ0OCAzODRjMC0zNS4zIDI4LjctNjQgNjQtNjR2NjRINDQ4em02NC0xOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0aDY0djY0ek0yODggMzUyYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2czk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnpcIl19LE9zPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJvb2ttYXJrXCIsaWNvbjpbMzg0LDUxMixbMTI4Mjc4LDYxNTkxXSxcImYwMmVcIixcIk0wIDQ4VjQ4Ny43QzAgNTAxLjEgMTAuOSA1MTIgMjQuMyA1MTJjNSAwIDkuOS0xLjUgMTQtNC40TDE5MiA0MDAgMzQ1LjcgNTA3LjZjNC4xIDIuOSA5IDQuNCAxNCA0LjRjMTMuNCAwIDI0LjMtMTAuOSAyNC4zLTI0LjNWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDhDMjEuNSAwIDAgMjEuNSAwIDQ4elwiXX0sWHM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYWxpZ24tanVzdGlmeVwiLGljb246WzQ0OCw1MTIsW10sXCJmMDM5XCIsXCJNNDQ4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJ6bTAgMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnpNMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNNDQ4IDQ0OGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJ6XCJdfSxRcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1bWJyZWxsYS1iZWFjaFwiLGljb246WzU3Niw1MTIsWzEyNzk1OF0sXCJmNWNhXCIsXCJNMzQ2LjMgMjcxLjhsLTYwLjEtMjEuOUwyMTQgNDQ4SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyODIuMWw2NC4xLTE3Ni4yem0xMjEuMS0uMmwtMy4zIDkuMSA2Ny43IDI0LjZjMTguMSA2LjYgMzgtNC4yIDM5LjYtMjMuNGM2LjUtNzguNS0yMy45LTE1NS41LTgwLjgtMjA4LjVjMiA4IDMuMiAxNi4zIDMuNCAyNC44bC4yIDZjMS44IDU3LTcuMyAxMTMuOC0yNi44IDE2Ny40ek00NjIgOTkuMWMtMS4xLTM0LjQtMjIuNS02NC44LTU0LjQtNzcuNGMtLjktLjQtMS45LS43LTIuOC0xLjFjLTMzLTExLjctNjkuOC0yLjQtOTMuMSAyMy44bC00IDQuNUMyNzIuNCA4OC4zIDI0NSAxMzQuMiAyMjYuOCAxODRsLTMuMyA5LjFMNDM0IDI2OS43bDMuMy05LjFjMTguMS00OS44IDI2LjYtMTAyLjUgMjQuOS0xNTUuNWwtLjItNnpNMTA3LjIgMTEyLjljLTExLjEgMTUuNy0yLjggMzYuOCAxNS4zIDQzLjRsNzEgMjUuOCAzLjMtOS4xYzE5LjUtNTMuNiA0OS4xLTEwMyA4Ny4xLTE0NS41bDQtNC41YzYuMi02LjkgMTMuMS0xMyAyMC41LTE4LjJjLTc5LjYgMi41LTE1NC43IDQyLjItMjAxLjIgMTA4elwiXX0sS3M9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGVsbWV0LXVuXCIsaWNvbjpbNTEyLDUxMixbXSxcImU1MDNcIixcIk00NzkuNSAyMjRDNDcxLjIgOTguOSAzNjcuMiAwIDI0MCAwQzEwNy41IDAgMCAxMDcuNSAwIDI0MHY1Ni4zQzAgMzQ0LjggMzkuMiAzODQgODcuNyAzODRIMjAwaDE0LjlMMzQzLjUgNTA1LjRjNC41IDQuMiAxMC40IDYuNiAxNi41IDYuNmg5NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgzNjkuNWwtMS41LTEuNVYyODhoODAgMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJoLS41ek0zMjAgNDE3LjJsLTc4LTczLjdMMjc0LjQgMjg4SDMyMFY0MTcuMnpNMjg1LjMgMTAzLjFsMzQuNyA1MlYxMTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY5NmMwIDcuMS00LjYgMTMuMy0xMS40IDE1LjNzLTE0LS42LTE3LjktNi40bC0zNC43LTUyVjIwOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYxMTJjMC03LjEgNC42LTEzLjMgMTEuNC0xNS4zczE0IC42IDE3LjkgNi40ek0xNjAgMTEydjY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2NjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6XCJdfSxqcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJidWxsc2V5ZVwiLGljb246WzUxMiw1MTIsW10sXCJmMTQwXCIsXCJNNDQ4IDI1NmMwLTEwNi04Ni0xOTItMTkyLTE5MlM2NCAxNTAgNjQgMjU2czg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyem02NCAwYzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2ek0yNTYgMzM2YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwczM1LjggODAgODAgODB6bTAgNjRjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHMtNjQuNSAxNDQtMTQ0IDE0NHptMzItMTQ0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpcIl19LEpzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJhY29uXCIsaWNvbjpbNTc2LDUxMixbMTI5MzYzXSxcImY3ZTVcIixcIk00MzkuMiAxLjJjMTEuMi0zLjIgMjMuMi0uMSAzMS40IDguMUw1MTggNTYuN2wtMjYuNSA3LjljLTU4IDE2LjYtOTguMSAzOS42LTEyOS42IDY3LjRjLTMxLjIgMjcuNS01My4yIDU5LjEtNzUuMSA5MC45bC0yLjMgMy4zQzI0MS42IDI4OC43IDE5NSAzNTYuNiA3Mi44IDQxNy43TDM3LjkgNDM1LjIgOS40IDQwNi42Yy03LjMtNy4zLTEwLjYtMTcuNi05LTI3LjhzOC4xLTE4LjkgMTcuMy0yMy41QzEzNi4xIDI5Ni4yIDE4MC45IDIzMSAyMjMuMyAxNjkuM2wyLjMtMy40YzIxLjgtMzEuOCA0NC45LTY0LjkgNzcuNy05My45YzMzLjQtMjkuNSA3NS44LTUzLjYgMTM1LjktNzAuOHpNNjEuOCA0NTlsMjUuNC0xMi43YzEyOS41LTY0LjcgMTc5LjktMTM4LjEgMjIzLjgtMjAybDIuMi0zLjNjMjIuMS0zMi4xIDQyLjEtNjAuNSA2OS45LTg1LjFjMjcuNS0yNC4zIDYzLjQtNDUuMiAxMTcuMy02MC42bDAgMCAuMi0uMSA0My4xLTEyLjkgMjMgMjNjOCA4IDExLjIgMTkuNyA4LjMgMzAuN3MtMTEuMyAxOS42LTIyLjIgMjIuN2MtNTEuOSAxNC44LTg1LjYgMzQuNy0xMTEuMSA1Ny4yYy0yNi4xIDIzLTQ1LjEgNDkuOS02Ny4zIDgyLjFsLTIuMiAzLjJDMzI3LjggMzY1LjkgMjc1LjUgNDQyIDE0Mi4zIDUwOC42Yy0xMi4zIDYuMi0yNy4yIDMuNy0zNi45LTZMNjEuOCA0NTl6XCJdfSxacz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW5kLXBvaW50LWRvd25cIixpY29uOlszODQsNTEyLFtdLFwiZjBhN1wiLFwiTTMyIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI3MkgzMlY0ODB6TTIyNCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NjR6bS02NCA2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzMDRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJ6bTE2MC05NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NHptLTk2LTg4bDAgLjZjOS40LTUuNCAyMC4zLTguNiAzMi04LjZjMTMuMiAwIDI1LjQgNCAzNS42IDEwLjhjOC43LTI0LjkgMzIuNS00Mi44IDYwLjQtNDIuOGMxMS43IDAgMjIuNiAzLjEgMzIgOC42VjE2MEMzODQgNzEuNiAzMTIuNCAwIDIyNCAwSDE2Mi4zQzExOS44IDAgNzkuMSAxNi45IDQ5LjEgNDYuOUwzNy41IDU4LjVDMTMuNSA4Mi41IDAgMTE1LjEgMCAxNDl2MjdjMCAzNS4zIDI4LjcgNjQgNjQgNjRoODhjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBIOTZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoNTZjMzkuOCAwIDcyIDMyLjIgNzIgNzJ6XCJdfSxZcz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy11cC1mcm9tLWJyYWNrZXRcIixpY29uOls0NDgsNTEyLFtdLFwiZTA5YVwiLFwiTTI0Ni42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyIDEwOS4zVjMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjEwOS4zbDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4ek02NCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NjRjMCA1MyA0MyA5NiA5NiA5NkgzNTJjNTMgMCA5Ni00MyA5Ni05NlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM1MnpcIl19LFcxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZvbGRlclwiLGljb246WzUxMiw1MTIsWzEyODE5MywxMjg0NDcsNjE3MTYsXCJmb2xkZXItYmxhbmtcIl0sXCJmMDdiXCIsXCJNNjQgNDgwSDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMjk4LjVjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDIyNi43IDUwLjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdINjRDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjR6XCJdfSxfcz1XMSxFMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLXdhdmVmb3JtXCIsaWNvbjpbMzg0LDUxMixbXCJmaWxlLW1lZGljYWwtYWx0XCJdLFwiZjQ3OFwiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjI4OEgxMTJjNi4xIDAgMTEuNiAzLjQgMTQuMyA4LjhMMTQ0IDMzMi4ybDQ5LjctOTkuNGMyLjctNS40IDguMi04LjggMTQuMy04LjhzMTEuNiAzLjQgMTQuMyA4LjhMMjQ5LjkgMjg4SDMyMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyNDBjLTYuMSAwLTExLjYtMy40LTE0LjMtOC44TDIwOCAyNzUuOGwtNDkuNyA5OS40Yy0yLjcgNS40LTguMyA4LjgtMTQuMyA4LjhzLTExLjYtMy40LTE0LjMtOC44TDEwMi4xIDMyMEgwVjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpcIl19LCRzPUUxLGNlPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJhZGlhdGlvblwiLGljb246WzUxMiw1MTIsW10sXCJmN2I5XCIsXCJNMjE2IDE4Ni43Yy0yMy45IDEzLjgtNDAgMzkuNy00MCA2OS4zTDMyIDI1NkMxNC4zIDI1Ni0uMiAyNDEuNiAyIDIyNC4xQzEwLjcgMTU0IDQ3LjggOTIuNyAxMDEuMyA1MmMxNC4xLTEwLjcgMzMuOC01LjMgNDIuNyAxMGw3MiAxMjQuN3pNMjU2IDMzNmMxNC42IDAgMjguMi0zLjkgNDAtMTAuN2w3MiAxMjQuOGM4LjggMTUuMyAzLjcgMzUuMS0xMi42IDQxLjljLTMwLjYgMTIuOS02NC4yIDIwLTk5LjQgMjBzLTY4LjktNy4xLTk5LjQtMjBjLTE2LjMtNi45LTIxLjQtMjYuNi0xMi42LTQxLjlsNzItMTI0LjhjMTEuOCA2LjggMjUuNCAxMC43IDQwIDEwLjd6bTIyNC04MGwtMTQ0IDBjMC0yOS42LTE2LjEtNTUuNS00MC02OS4zTDM2OCA2MmM4LjgtMTUuMyAyOC42LTIwLjcgNDIuNy0xMGM1My42IDQwLjcgOTAuNiAxMDIgOTkuNCAxNzIuMWMyLjIgMTcuNS0xMi40IDMxLjktMzAgMzEuOXpNMjU2IDMwNGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4elwiXX0sYWU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hhcnQtc2ltcGxlXCIsaWNvbjpbNDQ4LDUxMixbXSxcImU0NzNcIixcIk0xNjAgODBjMC0yNi41IDIxLjUtNDggNDgtNDhoMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDIwOGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWODB6TTAgMjcyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDgwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMjcyek0zNjggOTZoMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDM2OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4elwiXX0sc2U9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFycy1zdHJva2VcIixpY29uOls1MTIsNTEyLFs5ODk0XSxcImYyMjlcIixcIk0zNzYgMGMtOS43IDAtMTguNSA1LjgtMjIuMiAxNC44cy0xLjcgMTkuMyA1LjIgMjYuMmwzMy40IDMzLjRMMzcwLjMgOTYuNCAzNDUgNzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMjUuNCAyNS40TDMwNy44IDE1OWMtMjguNC0xOS41LTYyLjctMzEtOTkuOC0zMWMtOTcuMiAwLTE3NiA3OC44LTE3NiAxNzZzNzguOCAxNzYgMTc2IDE3NnMxNzYtNzguOCAxNzYtMTc2YzAtMzctMTEuNC03MS40LTMxLTk5LjhsMjguNi0yOC42TDQwNyAyMDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0yNS40LTI1LjQgMjIuMS0yMi4xTDQ3MSAxNTNjNi45IDYuOSAxNy4yIDguOSAyNi4yIDUuMnMxNC44LTEyLjUgMTQuOC0yMi4yVjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0SDM3NnptODggNDhoMHYwbDAgMHpNMzIwIDMwNGMwIDYxLjktNTAuMSAxMTItMTEyIDExMnMtMTEyLTUwLjEtMTEyLTExMnM1MC4xLTExMiAxMTItMTEyczExMiA1MC4xIDExMiAxMTJ6XCJdfSxlZT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2aWFsXCIsaWNvbjpbNTEyLDUxMixbMTI5NTE0XSxcImY0OTJcIixcIk0zNDIuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjRMMjguMSAzNDIuNkMxMC4xIDM2MC42IDAgMzg1IDAgNDEwLjVWNDE2YzAgNTMgNDMgOTYgOTYgOTZoNS41YzI1LjUgMCA0OS45LTEwLjEgNjcuOS0yOC4xTDQ0OCAyMDUuM2w5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTMyLTMyLTk2LTk2LTMyLTMyek0yMDUuMyAyNTZMMzUyIDEwOS4zIDQwMi43IDE2MGwtOTYgOTZIMjA1LjN6XCJdfSxvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImdhdWdlXCIsaWNvbjpbNTEyLDUxMixbXCJkYXNoYm9hcmRcIixcImdhdWdlLW1lZFwiLFwidGFjaG9tZXRlci1hbHQtYXZlcmFnZVwiXSxcImY2MjRcIixcIk01MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2ek0zMjAgMzUyYzAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM1Y4OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFYyOTIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zYzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTE0NCAxNzZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptLTE2IDgwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptMjg4IDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6TTQwMCAxNDRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyelwiXX0sZmU9byxyZT1vLGxlPW8sSTE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwid2FuZC1tYWdpYy1zcGFya2xlc1wiLGljb246WzU3Niw1MTIsW1wibWFnaWMtd2FuZC1zcGFya2xlc1wiXSxcImUyY2FcIixcIk0yMzQuNyA0Mi43TDE5NyA1Ni44Yy0zIDEuMS01IDQtNSA3LjJzMiA2LjEgNSA3LjJsMzcuNyAxNC4xTDI0OC44IDEyM2MxLjEgMyA0IDUgNy4yIDVzNi4xLTIgNy4yLTVsMTQuMS0zNy43TDMxNSA3MS4yYzMtMS4xIDUtNCA1LTcuMnMtMi02LjEtNS03LjJMMjc3LjMgNDIuNyAyNjMuMiA1Yy0xLjEtMy00LTUtNy4yLTVzLTYuMSAyLTcuMiA1TDIzNC43IDQyLjd6TTQ2LjEgMzk1LjRjLTE4LjcgMTguNy0xOC43IDQ5LjEgMCA2Ny45bDM0LjYgMzQuNmMxOC43IDE4LjcgNDkuMSAxOC43IDY3LjkgMEw1MjkuOSAxMTYuNWMxOC43LTE4LjcgMTguNy00OS4xIDAtNjcuOUw0OTUuMyAxNC4xYy0xOC43LTE4LjctNDkuMS0xOC43LTY3LjkgMEw0Ni4xIDM5NS40ek00ODQuNiA4Mi42bC0xMDUgMTA1LTIzLjMtMjMuMyAxMDUtMTA1IDIzLjMgMjMuM3pNNy41IDExNy4yQzMgMTE4LjkgMCAxMjMuMiAwIDEyOHMzIDkuMSA3LjUgMTAuOEw2NCAxNjBsMjEuMiA1Ni41YzEuNyA0LjUgNiA3LjUgMTAuOCA3LjVzOS4xLTMgMTAuOC03LjVMMTI4IDE2MGw1Ni41LTIxLjJjNC41LTEuNyA3LjUtNiA3LjUtMTAuOHMtMy05LjEtNy41LTEwLjhMMTI4IDk2IDEwNi44IDM5LjVDMTA1LjEgMzUgMTAwLjggMzIgOTYgMzJzLTkuMSAzLTEwLjggNy41TDY0IDk2IDcuNSAxMTcuMnptMzUyIDI1NmMtNC41IDEuNy03LjUgNi03LjUgMTAuOHMzIDkuMSA3LjUgMTAuOEw0MTYgNDE2bDIxLjIgNTYuNWMxLjcgNC41IDYgNy41IDEwLjggNy41czkuMS0zIDEwLjgtNy41TDQ4MCA0MTZsNTYuNS0yMS4yYzQuNS0xLjcgNy41LTYgNy41LTEwLjhzLTMtOS4xLTcuNS0xMC44TDQ4MCAzNTJsLTIxLjItNTYuNWMtMS43LTQuNS02LTcuNS0xMC44LTcuNXMtOS4xIDMtMTAuOCA3LjVMNDE2IDM1MmwtNTYuNSAyMS4yelwiXX0saWU9STEsb2U9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZVwiLGljb246WzMyMCw1MTIsWzEwMV0sXCI0NVwiLFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRWMjU2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINjRWMjg4SDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NFY5NkgyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6XCJdfSxPMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZW4tY2xpcFwiLGljb246WzUxMiw1MTIsW1wicGVuLWFsdFwiXSxcImYzMDVcIixcIk00NTMuMyAxOS4zbDM5LjQgMzkuNGMyNSAyNSAyNSA2NS41IDAgOTAuNWwtNTIuMSA1Mi4xIDAgMC0xLTEgMCAwLTE2LTE2LTk2LTk2LTE3LTE3IDUyLjEtNTIuMWMyNS0yNSA2NS41LTI1IDkwLjUgMHpNMjQxIDExNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEwxMDUgMjE3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDE3My4xIDgxYzI4LjEtMjguMSA3My43LTI4LjEgMTAxLjggMEwyODggOTQuMWwxNyAxNyA5NiA5NiAxNiAxNiAxIDEtMTcgMTdMMjI5LjUgNDEyLjVjLTQ4IDQ4LTEwOS4yIDgwLjgtMTc1LjggOTQuMWwtMjUgNWMtNy45IDEuNi0xNi0uOS0yMS43LTYuNnMtOC4xLTEzLjgtNi42LTIxLjdsNS0yNWMxMy4zLTY2LjYgNDYuMS0xMjcuOCA5NC4xLTE3NS44TDI1NC4xIDEyOCAyNDEgMTE0Ljl6XCJdfSxuZT1PMSxIZT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJicmlkZ2UtY2lyY2xlLWV4Y2xhbWF0aW9uXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0Y2FcIixcIk02NCAzMkM0Ni4zIDMyIDMyIDQ2LjMgMzIgNjRzMTQuMyAzMiAzMiAzMmg0MHY2NEgzMlYyODhjNTMgMCA5NiA0MyA5NiA5NnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRjMC01MyA0My05NiA5Ni05NmM2LjMgMCAxMi40IC42IDE4LjMgMS43QzM2Ny4xIDIzMS44IDQyNi45IDE5MiA0OTYgMTkyYzQyLjUgMCA4MS42IDE1LjEgMTEyIDQwLjJWMTYwSDUzNlY5Nmg0MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NHpNNDg4IDk2djY0SDQwOFY5Nmg4MHpNMzYwIDk2djY0SDI4MFY5Nmg4MHpNMjMyIDk2djY0SDE1MlY5Nmg4MHpNNDk2IDUxMmM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NHMtMTQ0IDY0LjUtMTQ0IDE0NHM2NC41IDE0NCAxNDQgMTQ0em0wLTQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTAtMTkyYzguOCAwIDE2IDcuMiAxNiAxNnY4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYyODhjMC04LjggNy4yLTE2IDE2LTE2elwiXX0semU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXNlclwiLGljb246WzQ0OCw1MTIsWzEyODEwMCw2MjE0NF0sXCJmMDA3XCIsXCJNMjI0IDI1NmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFMyOTQuNyAwIDIyNCAwUzk2IDU3LjMgOTYgMTI4czU3LjMgMTI4IDEyOCAxMjh6bS00NS43IDQ4Qzc5LjggMzA0IDAgMzgzLjggMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDQxOC4zYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43QzQ0OCAzODMuOCAzNjguMiAzMDQgMjY5LjcgMzA0SDE3OC4zelwiXX0sVmU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2Nob29sLWNpcmNsZS1jaGVja1wiLGljb246WzY0MCw1MTIsW10sXCJlNTZiXCIsXCJNMzM3LjggNS40QzMyNy0xLjggMzEzLTEuOCAzMDIuMiA1LjRsLTEzOSA5Mi43TDM3LjYgMTI2QzE1LjYgMTMwLjkgMCAxNTAuMyAwIDE3Mi44VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgzMjB2MEgyNTZWNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0bC4zIDBoLjVjMy40LTM3LjcgMTguNy03Mi4xIDQyLjItOTkuMUMzNTAuMiAyNjAgMzM1LjYgMjY0IDMyMCAyNjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4czM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDE4LjMtNS42IDM1LjMtMTUuMSA0OS40YzI5LTIxIDY0LjYtMzMuNCAxMDMuMS0zMy40YzU5LjUgMCAxMTIuMSAyOS42IDE0NCA3NC44VjE3Mi44YzAtMjIuNS0xNS42LTQyLTM3LjYtNDYuOUw0NzYuOCA5OC4xIDMzNy44IDUuNHpNOTYgMTkyaDMyYzguOCAwIDE2IDcuMiAxNiAxNnY2NGMwIDguOC03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDhjMC04LjggNy4yLTE2IDE2LTE2em0wIDEyOGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NjRjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnpNMzIwIDEyOGMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgzMzZWMTQ0YzAtOC44LTcuMi0xNi0xNi0xNnpNNjQwIDM2OGMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NHMtMTQ0IDY0LjUtMTQ0IDE0NHM2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDR6bS05OS4zLTQzLjNjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN3pcIl19LG1lPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImR1bXBzdGVyXCIsaWNvbjpbNTc2LDUxMixbXSxcImY3OTNcIixcIk00OS43IDMyYy0xMC41IDAtMTkuOCA2LjktMjIuOSAxNi45TC45IDEzM2MtLjYgMi0uOSA0LjEtLjkgNi4xQzAgMTUwLjcgOS4zIDE2MCAyMC45IDE2MGg5NEwxNDAuNSAzMkg0OS43ek0yNzIgMTYwVjMySDE3My4xTDE0Ny41IDE2MEgyNzJ6bTMyIDBINDI4LjVMNDAyLjkgMzJIMzA0VjE2MHptMTU3LjEgMGg5NGMxMS41IDAgMjAuOS05LjMgMjAuOS0yMC45YzAtMi4xLS4zLTQuMS0uOS02LjFMNTQ5LjIgNDguOUM1NDYuMSAzOC45IDUzNi44IDMyIDUyNi4zIDMySDQzNS41bDI1LjYgMTI4ek0zMiAxOTJsNCAzMkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0NEw2NCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkg0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwyMC0xNjBoMTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJoLTRsNC0zMkgzMnpcIl19LFgxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZhbi1zaHV0dGxlXCIsaWNvbjpbNjQwLDUxMixbMTI4NjU2LFwic2h1dHRsZS12YW5cIl0sXCJmNWI2XCIsXCJNNjQgMTA0djg4aDk2Vjk2SDcyYy00LjQgMC04IDMuNi04IDh6bTQ4MiA4OEw0NjUuMSA5NkgzODR2OTZINTQ2em0tMjI2IDBWOTZIMjI0djk2aDk2ek01OTIgMzg0SDU3NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NkgyNTZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjEwNEMwIDY0LjIgMzIuMiAzMiA3MiAzMkgxOTIgMzUyIDQ2NS4xYzE4LjkgMCAzNi44IDguMyA0OSAyMi44TDYyNSAxODYuNWM5LjcgMTEuNSAxNSAyNi4xIDE1IDQxLjJWMzM2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4em0tNjQgMGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6TTE2MCA0MzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHpcIl19LHZlPVgxLE1lPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJ1aWxkaW5nLXVzZXJcIixpY29uOls2NDAsNTEyLFtdLFwiZTRkYVwiLFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg4OS45Yy02LjMtMTAuMi05LjktMjIuMi05LjktMzUuMWMwLTQ2LjkgMjUuOC04Ny44IDY0LTEwOS4yVjI3MS44IDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6bTExMi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNODAgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMnpNMjcyIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnpNNTc2IDI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHMzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODB6TTM1MiA0NzcuMWMwIDE5LjMgMTUuNiAzNC45IDM0LjkgMzQuOUg2MDUuMWMxOS4zIDAgMzQuOS0xNS42IDM0LjktMzQuOWMwLTUxLjQtNDEuNy05My4xLTkzLjEtOTMuMUg0NDUuMWMtNTEuNCAwLTkzLjEgNDEuNy05My4xIDkzLjF6XCJdfSxRMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzcXVhcmUtY2FyZXQtbGVmdFwiLGljb246WzQ0OCw1MTIsW1wiY2FyZXQtc3F1YXJlLWxlZnRcIl0sXCJmMTkxXCIsXCJNMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNnpNMTI4IDI1NmMwLTYuNyAyLjgtMTMgNy43LTE3LjZsMTEyLTEwNGM3LTYuNSAxNy4yLTguMiAyNS45LTQuNHMxNC40IDEyLjUgMTQuNCAyMmwwIDIwOGMwIDkuNS01LjcgMTguMi0xNC40IDIycy0xOC45IDIuMS0yNS45LTQuNGwtMTEyLTEwNGMtNC45LTQuNS03LjctMTAuOS03LjctMTcuNnpcIl19LHRlPVExLGhlPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhpZ2hsaWdodGVyXCIsaWNvbjpbNTc2LDUxMixbXSxcImY1OTFcIixcIk0zMzEgMzE1bDE1OC40LTIxNUw0NjAuMSA3MC42IDI0NSAyMjkgMzMxIDMxNXptLTE4NyA1bDAgMFYyNDguM2MwLTE1LjMgNy4yLTI5LjYgMTkuNS0zOC42TDQzNi42IDguNEM0NDQgMi45IDQ1MyAwIDQ2Mi4yIDBjMTEuNCAwIDIyLjQgNC41IDMwLjUgMTIuNmw1NC44IDU0LjhjOC4xIDguMSAxMi42IDE5IDEyLjYgMzAuNWMwIDkuMi0yLjkgMTguMi04LjQgMjUuNkwzNTAuNCAzOTYuNWMtOSAxMi4zLTIzLjQgMTkuNS0zOC42IDE5LjVIMjQwbC0yNS40IDI1LjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC01MC43LTUwLjdjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDE0NCAzMjB6TTIzIDQ2Ni4zbDYzLTYzIDcwLjYgNzAuNi0zMSAzMWMtNC41IDQuNS0xMC42IDctMTcgN0g0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjR2LTQuN2MwLTYuNCAyLjUtMTIuNSA3LTE3elwiXX0sQ2U9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwia2V5XCIsaWNvbjpbNTEyLDUxMixbMTI4MjczXSxcImYwODRcIixcIk0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDBTMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTd2ODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNDQ4aDQwYzEzLjMgMCAyNC0xMC43IDI0LTI0VjM4NGg0MGM2LjQgMCAxMi41LTIuNSAxNy03bDMzLjMtMzMuM2MxNi45IDUuNCAzNSA4LjMgNTMuNyA4LjN6bTQwLTE3NmMtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwelwiXX0sTGU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnVsbGhvcm5cIixpY29uOls1MTIsNTEyLFsxMjgyMjYsMTI4MzYzXSxcImYwYTFcIixcIk00ODAgMzJjMC0xMi45LTcuOC0yNC42LTE5LjgtMjkuNnMtMjUuNy0yLjItMzQuOSA2LjlMMzgxLjcgNTNjLTQ4IDQ4LTExMy4xIDc1LTE4MSA3NUgxOTIgMTYwIDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NHY5NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJsOC43IDBjNjcuOSAwIDEzMyAyNyAxODEgNzVsNDMuNiA0My42YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45czE5LjgtMTYuNiAxOS44LTI5LjZWMzAwLjRjMTguNi04LjggMzItMzIuNSAzMi02MC40cy0xMy40LTUxLjYtMzItNjAuNFYzMnptLTY0IDc2LjdWMjQwIDM3MS4zQzM1Ny4yIDMxNy44IDI4MC41IDI4OCAyMDAuNyAyODhIMTkyVjE5Mmg4LjdjNzkuOCAwIDE1Ni41LTI5LjggMjE1LjMtODMuM3pcIl19LHBlPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImdsb2JlXCIsaWNvbjpbNTEyLDUxMixbMTI3NzYwXSxcImYwYWNcIixcIk0zNTIgMjU2YzAgMjIuMi0xLjIgNDMuNi0zLjMgNjRIMTYzLjNjLTIuMi0yMC40LTMuMy00MS44LTMuMy02NHMxLjItNDMuNiAzLjMtNjRIMzQ4LjdjMi4yIDIwLjQgMy4zIDQxLjggMy4zIDY0em0yOC44LTY0SDUwMy45YzUuMyAyMC41IDguMSA0MS45IDguMSA2NHMtMi44IDQzLjUtOC4xIDY0SDM4MC44YzIuMS0yMC42IDMuMi00MiAzLjItNjRzLTEuMS00My40LTMuMi02NHptMTEyLjYtMzJIMzc2LjdjLTEwLTYzLjktMjkuOC0xMTcuNC01NS4zLTE1MS42Yzc4LjMgMjAuNyAxNDIgNzcuNSAxNzEuOSAxNTEuNnptLTE0OS4xIDBIMTY3LjdjNi4xLTM2LjQgMTUuNS02OC42IDI3LTk0LjdjMTAuNS0yMy42IDIyLjItNDAuNyAzMy41LTUxLjVDMjM5LjQgMy4yIDI0OC43IDAgMjU2IDBzMTYuNiAzLjIgMjcuOCAxMy44YzExLjMgMTAuOCAyMyAyNy45IDMzLjUgNTEuNWMxMS42IDI2IDIxIDU4LjIgMjcgOTQuN3ptLTIwOSAwSDE4LjZDNDguNiA4NS45IDExMi4yIDI5LjEgMTkwLjYgOC40QzE2NS4xIDQyLjYgMTQ1LjMgOTYuMSAxMzUuMyAxNjB6TTguMSAxOTJIMTMxLjJjLTIuMSAyMC42LTMuMiA0Mi0zLjIgNjRzMS4xIDQzLjQgMy4yIDY0SDguMUMyLjggMjk5LjUgMCAyNzguMSAwIDI1NnMyLjgtNDMuNSA4LjEtNjR6TTE5NC43IDQ0Ni42Yy0xMS42LTI2LTIwLjktNTguMi0yNy05NC42SDM0NC4zYy02LjEgMzYuNC0xNS41IDY4LjYtMjcgOTQuNmMtMTAuNSAyMy42LTIyLjIgNDAuNy0zMy41IDUxLjVDMjcyLjYgNTA4LjggMjYzLjMgNTEyIDI1NiA1MTJzLTE2LjYtMy4yLTI3LjgtMTMuOGMtMTEuMy0xMC44LTIzLTI3LjktMzMuNS01MS41ek0xMzUuMyAzNTJjMTAgNjMuOSAyOS44IDExNy40IDU1LjMgMTUxLjZDMTEyLjIgNDgyLjkgNDguNiA0MjYuMSAxOC42IDM1MkgxMzUuM3ptMzU4LjEgMGMtMzAgNzQuMS05My42IDEzMC45LTE3MS45IDE1MS42YzI1LjUtMzQuMiA0NS4yLTg3LjcgNTUuMy0xNTEuNkg0OTMuNHpcIl19LGRlPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN5bmFnb2d1ZVwiLGljb246WzY0MCw1MTIsWzEyODMzM10sXCJmNjliXCIsXCJNMzA5LjggMy43YzUuOS00LjkgMTQuNi00LjkgMjAuNSAwbDEyMSAxMDAuOEM0NjkuNSAxMTkuNyA0ODAgMTQyLjIgNDgwIDE2NlYyODAuMSA1MTJINDY0IDM1MlY0MTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2OTZIMTc2IDE2MFYyODAuMSAxNjZjMC0yMy43IDEwLjUtNDYuMyAyOC44LTYxLjVMMzA5LjggMy43ek01MTIgNTEyVjI0NC41bDI4LjEtMzEuMmMzLTMuNCA3LjQtNS4zIDExLjktNS4zczguOSAxLjkgMTEuOSA1LjNsNjMuOCA3MC45YzcuOSA4LjggMTIuMyAyMC4zIDEyLjMgMzIuMVY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINTEyek0xMjggMjQ0LjVWNTEySDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYzMTYuM2MwLTExLjkgNC40LTIzLjMgMTIuMy0zMi4xbDYzLjgtNzAuOWMzLTMuNCA3LjQtNS4zIDExLjktNS4zczguOSAxLjkgMTEuOSA1LjNMMTI4IDI0NC41ek0zMjcgMTI0LjNjLTMuMS01LjQtMTAuOS01LjQtMTMuOSAwbC0xNS45IDI4LjEtMzIuMy0uM2MtNi4yLS4xLTEwLjEgNi43LTcgMTIuMUwyNzQuMyAxOTJsLTE2LjQgMjcuOGMtMy4yIDUuNCAuNyAxMi4xIDcgMTIuMWwzMi4zLS4zTDMxMyAyNTkuN2MzLjEgNS40IDEwLjkgNS40IDEzLjkgMGwxNS45LTI4LjEgMzIuMyAuM2M2LjIgLjEgMTAuMS02LjcgNy0xMi4xTDM2NS43IDE5MmwxNi40LTI3LjhjMy4yLTUuNC0uNy0xMi4xLTctMTIuMWwtMzIuMyAuM0wzMjcgMTI0LjN6XCJdfSx1ZT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24taGFsZi1kcmVzc1wiLGljb246WzMyMCw1MTIsW10sXCJlNTQ4XCIsXCJNMTYwIDk2Yy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6bTggMjU2VjEyOGg2LjljMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNTguMyA5N2M5LjEgMTUuMSA0LjIgMzQuOC0xMC45IDQzLjlzLTM0LjggNC4yLTQzLjktMTAuOUwyMzIgMjU2LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1Mmgwek01OC4yIDE4Mi4zYzE5LjktMzMuMSA1NS4zLTUzLjUgOTMuOC01NC4zVjM4NGgwdjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NEg3MC4yYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMUw5My4zIDI0OC4xIDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1My42LTg5LjJ6XCJdfSx4ZT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyb2FkLWJyaWRnZVwiLGljb246WzY0MCw1MTIsW10sXCJlNTYzXCIsXCJNMzUyIDBINjA4YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek00ODAgMjAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjIyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMjQgMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djY0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMzg0ek00ODAgNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0djY0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWNjRjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTMyIDk2SDI4OHY2NEgyNDh2NjRoNDB2OTZjLTUzIDAtOTYgNDMtOTYgOTZ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTZjMC01My00My05Ni05Ni05NlYyMjRINzJWMTYwSDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0xNjggNjRIMTIwdjY0aDgwVjE2MHpcIl19LGdlPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxvY2F0aW9uLWFycm93XCIsaWNvbjpbNDQ4LDUxMixbXSxcImYxMjRcIixcIk00MjkuNiA5Mi4xYzQuOS0xMS45IDIuMS0yNS42LTctMzQuN3MtMjIuOC0xMS45LTM0LjctN2wtMzUyIDE0NGMtMTQuMiA1LjgtMjIuMiAyMC44LTE5LjMgMzUuOHMxNi4xIDI1LjggMzEuNCAyNS44SDIyNFY0MzJjMCAxNS4zIDEwLjggMjguNCAyNS44IDMxLjRzMzAtNS4xIDM1LjgtMTkuM2wxNDQtMzUyelwiXX0sU2U9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY1wiLGljb246WzM4NCw1MTIsWzk5XSxcIjQzXCIsXCJNMzI5LjEgMTQyLjljLTYyLjUtNjIuNS0xNTUuOC02Mi41LTIxOC4zIDBzLTYyLjUgMTYzLjggMCAyMjYuM3MxNTUuOCA2Mi41IDIxOC4zIDBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2MtODcuNSA4Ny41LTIyMS4zIDg3LjUtMzA4LjggMHMtODcuNS0yMjkuMyAwLTMxNi44czIyMS4zLTg3LjUgMzA4LjggMGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMHpcIl19LE5lPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRhYmxldC1idXR0b25cIixpY29uOls0NDgsNTEyLFtdLFwiZjEwYVwiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIyNCA0NjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LHdlPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJ1aWxkaW5nLWxvY2tcIixpY29uOls1NzYsNTEyLFtdLFwiZTRkNlwiLFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg4OC42Yy01LjQtOS40LTguNi0yMC4zLTguNi0zMlYzNTJjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjI3MmMwLTMwLjUgMTIuMi01OC4yIDMyLTc4LjRWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek04MCA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMTEyek0yNzIgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2ek00NjQgMjQwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4SDQzMlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMnY0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJWMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXX0sa2U9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGl6emEtc2xpY2VcIixpY29uOls1MTIsNTEyLFtdLFwiZjgxOFwiLFwiTTE2OS43IC45Yy0yMi44LTEuNi00MS45IDE0LTQ3LjUgMzQuN0wxMTAuNCA4MGMuNSAwIDEuMSAwIDEuNiAwYzE3Ni43IDAgMzIwIDE0My4zIDMyMCAzMjBjMCAuNSAwIDEuMSAwIDEuNmw0NC40LTExLjhjMjAuOC01LjUgMzYuMy0yNC43IDM0LjctNDcuNUM0OTguNSAxNTkuNSAzNTIuNSAxMy41IDE2OS43IC45ek0zOTkuOCA0MTAuMmMuMS0zLjQgLjItNi44IC4yLTEwLjJjMC0xNTkuMS0xMjguOS0yODgtMjg4LTI4OGMtMy40IDAtNi44IC4xLTEwLjIgLjJMLjUgNDkxLjljLTEuNSA1LjUgLjEgMTEuNCA0LjEgMTUuNHM5LjkgNS42IDE1LjQgNC4xTDM5OS44IDQxMC4yek0xNzYgMjcyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTEyOCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTE2MCAzODRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXX0sYmU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibW9uZXktYmlsbC13YXZlXCIsaWNvbjpbNTc2LDUxMixbXSxcImY1M2FcIixcIk0wIDExMi41VjQyMi4zYzAgMTggMTAuMSAzNSAyNyA0MS4zYzg3IDMyLjUgMTc0IDEwLjMgMjYxLTExLjljNzkuOC0yMC4zIDE1OS42LTQwLjcgMjM5LjMtMTguOWMyMyA2LjMgNDguNy05LjUgNDguNy0zMy40Vjg5LjdjMC0xOC0xMC4xLTM1LTI3LTQxLjNDNDYyIDE1LjkgMzc1IDM4LjEgMjg4IDYwLjNDMjA4LjIgODAuNiAxMjguNCAxMDAuOSA0OC43IDc5LjFDMjUuNiA3Mi44IDAgODguNiAwIDExMi41ek0yODggMzUyYy00NC4yIDAtODAtNDMtODAtOTZzMzUuOC05NiA4MC05NnM4MCA0MyA4MCA5NnMtMzUuOCA5Ni04MCA5NnpNNjQgMzUyYzM1LjMgMCA2NCAyOC43IDY0IDY0SDY0VjM1MnptNjQtMjA4YzAgMzUuMy0yOC43IDY0LTY0IDY0VjE0NGg2NHpNNTEyIDMwNHY2NEg0NDhjMC0zNS4zIDI4LjctNjQgNjQtNjR6TTQ0OCA5Nmg2NHY2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6XCJdfSxLMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGFydC1hcmVhXCIsaWNvbjpbNTEyLDUxMixbXCJhcmVhLWNoYXJ0XCJdLFwiZjFmZVwiLFwiTTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0VjQwMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MEg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIODBjLTguOCAwLTE2LTcuMi0xNi0xNlY2NHptOTYgMjg4SDQ0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYyNTEuOGMwLTcuNi0yLjctMTUtNy43LTIwLjhsLTY1LjgtNzYuOGMtMTIuMS0xNC4yLTMzLjctMTUtNDYuOS0xLjhsLTIxIDIxYy0xMCAxMC0yNi40IDkuMi0zNS40LTEuNmwtMzkuMi00N2MtMTIuNi0xNS4xLTM1LjctMTUuNC00OC43LS42TDEzNS45IDIxNWMtNS4xIDUuOC03LjkgMTMuMy03LjkgMjEuMXY4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnpcIl19LEFlPUsxLEJlPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXNlLWZsYWdcIixpY29uOls2NDAsNTEyLFtdLFwiZTUwZFwiLFwiTTQ4MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMlYxOTIgNTEyaDY0VjE5Mkg2MjRjOC44IDAgMTYtNy4yIDE2LTE2VjQ4YzAtOC44LTcuMi0xNi0xNi0xNkg1MTJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTQxNiAxNTlMMjc2LjggMzkuN2MtMTItMTAuMy0yOS43LTEwLjMtNDEuNyAwbC0yMjQgMTkyQzEgMjQwLjQtMi43IDI1NC41IDIgMjY3LjFTMTguNiAyODggMzIgMjg4SDY0VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJoNjQuN2wuMiAwaC0xVjE1OXpcIl19LFRlPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1jaXJjbGUtbWludXNcIixpY29uOls1NzYsNTEyLFtdLFwiZTU0MFwiLFwiTTIwOCA0OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6TTE1MiAzNTJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1Ni45TDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42aDI5LjdjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNDQuOSA3NC43Yy0xNi4xIDE3LjYtMjguNiAzOC41LTM2LjYgNjEuNWMtMS45LTEuOC0zLjUtMy45LTQuOS02LjNMMjMyIDI1Ni45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMTUyem00MjQgMTZjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRzLTE0NC02NC41LTE0NC0xNDRzNjQuNS0xNDQgMTQ0LTE0NHMxNDQgNjQuNSAxNDQgMTQ0em0tNjQgMGMwLTguOC03LjItMTYtMTYtMTZIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDQ5NmM4LjggMCAxNi03LjIgMTYtMTZ6XCJdfSxqMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiYW5cIixpY29uOls1MTIsNTEyLFsxMjg2ODMsXCJjYW5jZWxcIl0sXCJmMDVlXCIsXCJNMzY3LjIgNDEyLjVMOTkuNSAxNDQuOEM3Ny4xIDE3Ni4xIDY0IDIxNC41IDY0IDI1NmMwIDEwNiA4NiAxOTIgMTkyIDE5MmM0MS41IDAgNzkuOS0xMy4xIDExMS4yLTM1LjV6bTQ1LjMtNDUuM0M0MzQuOSAzMzUuOSA0NDggMjk3LjUgNDQ4IDI1NmMwLTEwNi04Ni0xOTItMTkyLTE5MmMtNDEuNSAwLTc5LjkgMTMuMS0xMTEuMiAzNS41TDQxMi41IDM2Ny4yek01MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2elwiXX0seWU9ajEsUGU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FtZXJhLXJvdGF0ZVwiLGljb246WzUxMiw1MTIsW10sXCJlMGQ4XCIsXCJNMTQ5LjEgNjQuOEwxMzguNyA5Nkg2NEMyOC43IDk2IDAgMTI0LjcgMCAxNjBWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzczLjNMMzYyLjkgNjQuOEMzNTYuNCA0NS4yIDMzOC4xIDMyIDMxNy40IDMySDE5NC42Yy0yMC43IDAtMzkgMTMuMi00NS41IDMyLjh6TTM4NCAyNTZjMCA4LjgtNy4yIDE2LTE2IDE2SDI5MS4zYy02LjIgMC0xMS4zLTUuMS0xMS4zLTExLjNjMC0zIDEuMi01LjkgMy4zLThMMzA3IDIyOWMtMTMuNi0xMy40LTMxLjktMjEtNTEtMjFjLTE5LjIgMC0zNy43IDcuNi01MS4zIDIxLjNMMTg1IDI0OWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwxOS43LTE5LjdDMTkzLjQgMTcyLjcgMjI0IDE2MCAyNTYgMTYwYzMxLjggMCA2Mi40IDEyLjYgODUgMzVsMjMuNy0yMy43YzIuMS0yLjEgNS0zLjMgOC0zLjNjNi4yIDAgMTEuMyA1LjEgMTEuMyAxMS4zVjI1NnpNMTI4IDMyMGMwLTguOCA3LjItMTYgMTYtMTZoNzYuN2M2LjIgMCAxMS4zIDUuMSAxMS4zIDExLjNjMCAzLTEuMiA1LjktMy4zIDhMMjA1IDM0N2MxMy42IDEzLjQgMzEuOSAyMSA1MSAyMWMxOS4yIDAgMzcuNy03LjYgNTEuMy0yMS4zTDMyNyAzMjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0xOS43IDE5LjdDMzE4LjYgNDAzLjMgMjg4IDQxNiAyNTYgNDE2Yy0zMS44IDAtNjIuNC0xMi42LTg1LTM1bC0yMy43IDIzLjdjLTIuMSAyLjEtNSAzLjMtOCAzLjNjLTYuMiAwLTExLjMtNS4xLTExLjMtMTEuM1YzMjB6XCJdfSxKMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzcHJheS1jYW4tc3BhcmtsZXNcIixpY29uOls1MTIsNTEyLFtcImFpci1mcmVzaGVuZXJcIl0sXCJmNWQwXCIsXCJNOTYgMzJ2OTZIMjI0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDEyOEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJ6bTAgMTI4Yy01MyAwLTk2IDQzLTk2IDk2VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyNzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjU2YzAtNTMtNDMtOTYtOTYtOTZIOTZ6bTY0IDI1NmMtNDQuMiAwLTgwLTM1LjgtODAtODBzMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgwek0zODQgNDhjMC0xLjQtMS0zLTIuMi0zLjZMMzUyIDMyIDMzOS42IDIuMkMzMzkgMSAzMzcuNCAwIDMzNiAwcy0zIDEtMy42IDIuMkwzMjAgMzIgMjkwLjIgNDQuNEMyODkgNDUgMjg4IDQ2LjYgMjg4IDQ4YzAgMS40IDEgMyAyLjIgMy42TDMyMCA2NGwxMi40IDI5LjhDMzMzIDk1IDMzNC42IDk2IDMzNiA5NnMzLTEgMy42LTIuMkwzNTIgNjRsMjkuOC0xMi40QzM4MyA1MSAzODQgNDkuNCAzODQgNDh6bTc2LjQgNDUuOEM0NjEgOTUgNDYyLjYgOTYgNDY0IDk2czMtMSAzLjYtMi4yTDQ4MCA2NGwyOS44LTEyLjRDNTExIDUxIDUxMiA0OS40IDUxMiA0OGMwLTEuNC0xLTMtMi4yLTMuNkw0ODAgMzIgNDY3LjYgMi4yQzQ2NyAxIDQ2NS40IDAgNDY0IDBzLTMgMS0zLjYgMi4yTDQ0OCAzMiA0MTguMiA0NC40QzQxNyA0NSA0MTYgNDYuNiA0MTYgNDhjMCAxLjQgMSAzIDIuMiAzLjZMNDQ4IDY0bDEyLjQgMjkuOHptNy4yIDEwMC40Yy0uNi0xLjItMi4yLTIuMi0zLjYtMi4ycy0zIDEtMy42IDIuMkw0NDggMjI0bC0yOS44IDEyLjRjLTEuMiAuNi0yLjIgMi4yLTIuMiAzLjZjMCAxLjQgMSAzIDIuMiAzLjZMNDQ4IDI1NmwxMi40IDI5LjhjLjYgMS4yIDIuMiAyLjIgMy42IDIuMnMzLTEgMy42LTIuMkw0ODAgMjU2bDI5LjgtMTIuNGMxLjItLjYgMi4yLTIuMiAyLjItMy42YzAtMS40LTEtMy0yLjItMy42TDQ4MCAyMjRsLTEyLjQtMjkuOHpNNDQ4IDE0NGMwLTEuNC0xLTMtMi4yLTMuNkw0MTYgMTI4IDQwMy42IDk4LjJDNDAzIDk3IDQwMS40IDk2IDQwMCA5NnMtMyAxLTMuNiAyLjJMMzg0IDEyOGwtMjkuOCAxMi40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42YzAgMS40IDEgMyAyLjIgMy42TDM4NCAxNjBsMTIuNCAyOS44Yy42IDEuMiAyLjIgMi4yIDMuNiAyLjJzMy0xIDMuNi0yLjJMNDE2IDE2MGwyOS44LTEyLjRjMS4yLS42IDIuMi0yLjIgMi4yLTMuNnpcIl19LEZlPUoxLERlPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN0YXJcIixpY29uOls1NzYsNTEyLFsxMTA4OCw2MTQ0Nl0sXCJmMDA1XCIsXCJNMzE2LjkgMThDMzExLjYgNyAzMDAuNCAwIDI4OC4xIDBzLTIzLjQgNy0yOC44IDE4TDE5NSAxNTAuMyA1MS40IDE3MS41Yy0xMiAxLjgtMjIgMTAuMi0yNS43IDIxLjdzLS43IDI0LjIgNy45IDMyLjdMMTM3LjggMzI5IDExMy4yIDQ3NC43Yy0yIDEyIDMgMjQuMiAxMi45IDMxLjNzMjMgOCAzMy44IDIuM2wxMjguMy02OC41IDEyOC4zIDY4LjVjMTAuOCA1LjcgMjMuOSA0LjkgMzMuOC0yLjNzMTQuOS0xOS4zIDEyLjktMzEuM0w0MzguNSAzMjkgNTQyLjcgMjI1LjljOC42LTguNSAxMS43LTIxLjIgNy45LTMyLjdzLTEzLjctMTkuOS0yNS43LTIxLjdMMzgxLjIgMTUwLjMgMzE2LjkgMTh6XCJdfSxSZT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyZXBlYXRcIixpY29uOls1MTIsNTEyLFsxMjgyNTddLFwiZjM2M1wiLFwiTTAgMjI0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC01MyA0My05NiA5Ni05NkgzMjB2MzJjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzMyMCAxOS4xIDMyMCAzMlY2NEgxNjBDNzEuNiA2NCAwIDEzNS42IDAgMjI0em01MTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJjMCA1My00MyA5Ni05NiA5NkgxOTJWMzUyYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlzMTkuOC0xNi42IDE5LjgtMjkuNlY0NDhIMzUyYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwelwiXX0sVWU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY3Jvc3NcIixpY29uOlszODQsNTEyLFsxMjgzMjcsMTAwMTNdLFwiZjY1NFwiLFwiTTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OHY4MEg0OGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2MzJjMCAyNi41IDIxLjUgNDggNDggNDhoODBWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjI1Nmg4MGMyNi41IDAgNDgtMjEuNSA0OC00OFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjU2VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDE3NnpcIl19LHFlPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJveFwiLGljb246WzQ0OCw1MTIsWzEyODIzMF0sXCJmNDY2XCIsXCJNNTAuNyA1OC41TDAgMTYwSDIwOFYzMkg5My43Qzc1LjUgMzIgNTguOSA0Mi4zIDUwLjcgNTguNXpNMjQwIDE2MEg0NDhMMzk3LjMgNTguNUMzODkuMSA0Mi4zIDM3Mi41IDMyIDM1NC4zIDMySDI0MFYxNjB6bTIwOCAzMkgwVjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTkyelwiXX0sR2U9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidmVudXMtbWFyc1wiLGljb246WzY0MCw1MTIsWzk4OTJdLFwiZjIyOFwiLFwiTTE3NiAyODhjNjEuOSAwIDExMi01MC4xIDExMi0xMTJzLTUwLjEtMTEyLTExMi0xMTJTNjQgMTE0LjEgNjQgMTc2czUwLjEgMTEyIDExMiAxMTJ6TTM1MiAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0IDE3My4xVjM4NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMDh2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDExMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmgzMlYzNDkuMUM2Mi4xIDMzNC4xIDAgMjYyLjMgMCAxNzZDMCA3OC44IDc4LjggMCAxNzYgMHMxNzYgNzguOCAxNzYgMTc2ek0yNzEuOSAzNjAuNmMxOS4zLTEwLjEgMzYuOS0yMy4xIDUyLjEtMzguNGMyMCAxOC41IDQ2LjcgMjkuOCA3Ni4xIDI5LjhjNjEuOSAwIDExMi01MC4xIDExMi0xMTJzLTUwLjEtMTEyLTExMi0xMTJjLTcuMiAwLTE0LjMgLjctMjEuMSAyYy00LjktMjEuNS0xMy00MS43LTI0LTYwLjJDMzY5LjMgNjYgMzg0LjQgNjQgNDAwIDY0YzM3IDAgNzEuNCAxMS40IDk5LjggMzFsMjAuNi0yMC42TDQ4NyA0MWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlM0OTQuMyAwIDUwNCAwSDYxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxMzZjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzMuNC0zMy40TDU0NSAxNDAuMmMxOS41IDI4LjQgMzEgNjIuNyAzMSA5OS44YzAgOTcuMi03OC44IDE3Ni0xNzYgMTc2Yy01MC41IDAtOTYtMjEuMy0xMjguMS01NS40elwiXX0sWjE9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctcG9pbnRlclwiLGljb246WzMyMCw1MTIsW1wibW91c2UtcG9pbnRlclwiXSxcImYyNDVcIixcIk0wIDU1LjJWNDI2YzAgMTIuMiA5LjkgMjIgMjIgMjJjNi4zIDAgMTIuNC0yLjcgMTYuNi03LjVMMTIxLjIgMzQ2bDU4LjEgMTE2LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45TDE3OS44IDMyMEgyOTcuOWMxMi4yIDAgMjIuMS05LjkgMjIuMS0yMi4xYzAtNi4zLTIuNy0xMi4zLTcuNC0xNi41TDM4LjYgMzcuOUMzNC4zIDM0LjEgMjguOSAzMiAyMy4yIDMyQzEwLjQgMzIgMCA0Mi40IDAgNTUuMnpcIl19LFdlPVoxLFkxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1heGltaXplXCIsaWNvbjpbNDQ4LDUxMixbXCJleHBhbmQtYXJyb3dzLWFsdFwiXSxcImYzMWVcIixcIk0xNjggMzJIMjRDMTAuNyAzMiAwIDQyLjcgMCA1NlYyMDBjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4ybDQwLTQwIDc5IDc5TDgxIDMzNSA0MSAyOTVjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMCAzMDIuMyAwIDMxMlY0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRIMTY4YzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtNDAtNDAgNzktNzkgNzkgNzktNDAgNDBjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJzMTIuNSAxNC44IDIyLjIgMTQuOEg0MjRjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzEyYzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMnMtMTkuMy0xLjctMjYuMiA1LjJsLTQwIDQwLTc5LTc5IDc5LTc5IDQwIDQwYzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMlY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyODBjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsNDAgNDAtNzkgNzktNzktNzkgNDAtNDBjNi45LTYuOSA4LjktMTcuMiA1LjItMjYuMlMxNzcuNyAzMiAxNjggMzJ6XCJdfSxFZT1ZMSxJZT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGFyZ2luZy1zdGF0aW9uXCIsaWNvbjpbNTc2LDUxMixbXSxcImY1ZTdcIixcIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0VjQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWMzA0aDE2YzIyLjEgMCA0MCAxNy45IDQwIDQwdjMyYzAgMzkuOCAzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzJWMjUyLjNjMzIuNS0xMC4yIDU2LTQwLjUgNTYtNzYuM1YxNDRjMC04LjgtNy4yLTE2LTE2LTE2SDU0NFY4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY0OEg0ODBWODBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ2NDhINDMyYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCAzNS44IDIzLjUgNjYuMSA1NiA3Ni4zVjM3NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYzNDRjMC00OC42LTM5LjQtODgtODgtODhIMzIwVjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDk2ek0yMTYuOSA4Mi43YzYgNCA4LjUgMTEuNSA2LjMgMTguM2wtMjUgNzQuOUgyNTZjNi43IDAgMTIuNyA0LjIgMTUgMTAuNHMuNSAxMy4zLTQuNiAxNy43bC0xMTIgOTZjLTUuNSA0LjctMTMuNCA1LjEtMTkuMyAxLjFzLTguNS0xMS41LTYuMy0xOC4zbDI1LTc0LjlIOTZjLTYuNyAwLTEyLjctNC4yLTE1LTEwLjRzLS41LTEzLjMgNC42LTE3LjdsMTEyLTk2YzUuNS00LjcgMTMuNC01LjEgMTkuMy0xLjF6XCJdfSxfMT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzaGFwZXNcIixpY29uOls1MTIsNTEyLFtcInRyaWFuZ2xlLWNpcmNsZS1zcXVhcmVcIl0sXCJmNjFmXCIsXCJNMzE1LjQgMTUuNUMzMDkuNyA1LjkgMjk5LjIgMCAyODggMHMtMjEuNyA1LjktMjcuNCAxNS41bC05NiAxNjBjLTUuOSA5LjktNi4xIDIyLjItLjQgMzIuMnMxNi4zIDE2LjIgMjcuOCAxNi4ySDM4NGMxMS41IDAgMjIuMi02LjIgMjcuOC0xNi4yczUuNS0yMi4zLS40LTMyLjJsLTk2LTE2MHpNMjg4IDMxMlY0NTZjMCAyMi4xIDE3LjkgNDAgNDAgNDBINDcyYzIyLjEgMCA0MC0xNy45IDQwLTQwVjMxMmMwLTIyLjEtMTcuOS00MC00MC00MEgzMjhjLTIyLjEgMC00MCAxNy45LTQwIDQwek0xMjggNTEyYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4cy01Ny4zLTEyOC0xMjgtMTI4UzAgMzEzLjMgMCAzODRzNTcuMyAxMjggMTI4IDEyOHpcIl19LE9lPV8xLCQxPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNodWZmbGVcIixpY29uOls1MTIsNTEyLFsxMjgyNTYsXCJyYW5kb21cIl0sXCJmMDc0XCIsXCJNNDAzLjggMzQuNGMxMi01IDI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzYgNiA5LjQgMTQuMSA5LjQgMjIuNnMtMy40IDE2LjYtOS40IDIyLjZsLTY0IDY0Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNlYxNjBIMzUyYy0xMC4xIDAtMTkuNiA0LjctMjUuNiAxMi44TDI4NCAyMjkuMyAyNDQgMTc2bDMxLjItNDEuNkMyOTMuMyAxMTAuMiAzMjEuOCA5NiAzNTIgOTZoMzJWNjRjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnpNMTY0IDI4Mi43TDIwNCAzMzZsLTMxLjIgNDEuNkMxNTQuNyA0MDEuOCAxMjYuMiA0MTYgOTYgNDE2SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDk2YzEwLjEgMCAxOS42LTQuNyAyNS42LTEyLjhMMTY0IDI4Mi43em0yNzQuNiAxODhjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45cy0xOS44LTE2LjYtMTkuOC0yOS42VjQxNkgzNTJjLTMwLjIgMC01OC43LTE0LjItNzYuOC0zOC40TDEyMS42IDE3Mi44Yy02LTguMS0xNS41LTEyLjgtMjUuNi0xMi44SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDk2YzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40TDMyNi40IDMzOS4yYzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhoMzJWMzIwYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjR6XCJdfSxYZT0kMSxjND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24tcnVubmluZ1wiLGljb246WzQ0OCw1MTIsWzEyNzkzOSxcInJ1bm5pbmdcIl0sXCJmNzBjXCIsXCJNMzM2IDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OHpNMTQxLjcgMTc1LjVjOS45LTkuOSAyMy40LTE1LjUgMzcuNS0xNS41YzEuOSAwIDMuOCAuMSA1LjYgLjNMMTUzLjYgMjU0Yy05LjMgMjggMS43IDU4LjggMjYuOCA3NC41bDg2LjIgNTMuOS0yNS40IDg4LjhjLTQuOSAxNyA1IDM0LjcgMjIgMzkuNnMzNC43LTUgMzkuNi0yMmwyOC43LTEwMC40YzUuOS0yMC42LTIuNi00Mi42LTIwLjctNTMuOUwyNTQgMjk5bDMwLjktODIuNCA1LjEgMTIuM0MzMDUgMjY0LjcgMzM5LjkgMjg4IDM3OC43IDI4OEg0MDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzc4LjdjLTEyLjkgMC0yNC42LTcuOC0yOS41LTE5LjdsLTYuMy0xNWMtMTQuNi0zNS4xLTQ0LjEtNjEuOS04MC41LTczLjFsLTQ4LjctMTVjLTExLjEtMy40LTIyLjctNS4yLTM0LjQtNS4yYy0zMSAwLTYwLjggMTIuMy04Mi43IDM0LjNMNzMuNCAxNTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwyMy4xLTIzLjF6TTEwNy4yIDM1Mkg0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg2OS42YzE5IDAgMzYuMi0xMS4yIDQzLjktMjguNUwxNzMgMzYxLjZsLTkuNS02Yy0xNy41LTEwLjktMzAuNS0yNi44LTM3LjktNDQuOUwxMDcuMiAzNTJ6XCJdfSxRZT1jNCxLZT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtb2JpbGUtcmV0cm9cIixpY29uOlszMjAsNTEyLFtdLFwiZTUyN1wiLFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDI1NmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0em02NCA5NnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyMjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNODAgMzUyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6bTI0IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHptNTYtNTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMjQgNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0em01Ni01NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em0yNCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6TTEyOCA0OGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg2NGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxMjh6XCJdfSxqZT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJncmlwLWxpbmVzLXZlcnRpY2FsXCIsaWNvbjpbMTkyLDUxMixbXSxcImY3YTVcIixcIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY2NHptMTI4IDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNjR6XCJdfSxKZT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzcGlkZXJcIixpY29uOls1NzYsNTEyLFsxMjgzNzVdLFwiZjcxN1wiLFwiTTE5MC40IDMyLjZjNC44LTEyLjQtMS40LTI2LjMtMTMuOC0zMXMtMjYuMyAxLjQtMzEgMTMuOEwxMTMuMSAxMDBjLTcuOSAyMC43LTMgNDQuMSAxMi43IDU5LjdsNTcuNCA1Ny40LTgwLjQtMjYuOGMtMi40LS44LTQuMy0yLjctNS4xLTUuMUw3OC44IDEyOC40Qzc0LjYgMTE1LjggNjEgMTA5IDQ4LjQgMTEzLjJTMjkgMTMxIDMzLjIgMTQzLjZsMTguOSA1Ni44YzUuNiAxNi43IDE4LjcgMjkuOCAzNS40IDM1LjRMMTQ4LjEgMjU2IDg3LjYgMjc2LjJjLTE2LjcgNS42LTI5LjggMTguNy0zNS40IDM1LjRMMzMuMiAzNjguNEMyOSAzODEgMzUuOCAzOTQuNiA0OC40IDM5OC44czI2LjItMi42IDMwLjQtMTUuMmwxOC45LTU2LjhjLjgtMi40IDIuNy00LjMgNS4xLTUuMWw4MC40LTI2LjgtNTcuNCA1Ny40Yy0xNS42IDE1LjYtMjAuNiAzOS0xMi43IDU5LjdsMzIuNSA4NC42YzQuOCAxMi40IDE4LjYgMTguNSAzMSAxMy44czE4LjUtMTguNiAxMy44LTMxbC0zMi41LTg0LjZjLTEuMS0zLS40LTYuMyAxLjgtOC41TDE5MiAzNTMuOWMxIDUyLjEgNDMuNiA5NC4xIDk2IDk0LjFzOTUtNDEuOSA5Ni05NC4xbDMyLjMgMzIuM2MyLjIgMi4yIDIuOSA1LjYgMS44IDguNWwtMzIuNSA4NC42Yy00LjggMTIuNCAxLjQgMjYuMyAxMy44IDMxczI2LjMtMS40IDMxLTEzLjhMNDYyLjkgNDEyYzcuOS0yMC43IDMtNDQuMS0xMi43LTU5LjdsLTU3LjQtNTcuNCA4MC40IDI2LjhjMi40IC44IDQuMyAyLjcgNS4xIDUuMWwxOC45IDU2LjhjNC4yIDEyLjYgMTcuOCAxOS40IDMwLjQgMTUuMnMxOS40LTE3LjggMTUuMi0zMC40bC0xOC45LTU2LjhjLTUuNi0xNi43LTE4LjctMjkuOC0zNS40LTM1LjRMNDI3LjkgMjU2bDYwLjUtMjAuMmMxNi43LTUuNiAyOS44LTE4LjcgMzUuNC0zNS40bDE4LjktNTYuOGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMTguOSA1Ni44Yy0uOCAyLjQtMi43IDQuMy01LjEgNS4xbC04MC40IDI2LjggNTcuNC01Ny40YzE1LjYtMTUuNiAyMC42LTM5IDEyLjctNTkuN0w0MzAuNCAxNS40QzQyNS42IDMgNDExLjgtMy4yIDM5OS40IDEuNnMtMTguNSAxOC42LTEzLjggMzFsMzIuNSA4NC42YzEuMSAzIC40IDYuMy0xLjggOC41TDM2OCAxNzQuMVYxNjBjMC0zMS44LTE4LjYtNTkuMy00NS41LTcyLjJjLTkuMS00LjQtMTguNSAzLjMtMTguNSAxMy40VjExMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYxMDEuMmMwLTEwLjEtOS40LTE3LjctMTguNS0xMy40QzIyNi42IDEwMC43IDIwOCAxMjguMiAyMDggMTYwdjE0LjFsLTQ4LjMtNDguM2MtMi4yLTIuMi0yLjktNS42LTEuOC04LjVsMzIuNS04NC42elwiXX0sWmU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZHMtYm91bmRcIixpY29uOls1NzYsNTEyLFtdLFwiZTRmOVwiLFwiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJWOTZ2NTkuMSAuN1YxOTJ2MjEuOWMwIDE0LjIgNS4xIDI3LjkgMTQuMyAzOC43TDk5LjYgMzUySDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDMySDI1Nmg2NEg0NDhoMzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRoLTMuNmw4NS4zLTk5LjVjOS4yLTEwLjggMTQuMy0yNC41IDE0LjMtMzguN1YxOTIgMTU1Ljh2LS43Vjk2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjk2djQ4LjhsLTY5LjMgOTIuNGMtNS43IDcuNi0xNi4xIDkuNi0yNC4yIDQuOGMtOS43LTUuNy0xMi4xLTE4LjctNS4xLTI3LjVMNDQxIDE4MGMxMC44LTEzLjUgOC45LTMzLjMtNC40LTQ0LjVzLTMzLTkuOC00NC41IDMuMmwtNDYuNyA1Mi41QzMyOSAyMDkuNyAzMjAgMjMzLjQgMzIwIDI1OC4xVjMyMHYzMkgyNTZWMzIwIDI1OC4xYzAtMjQuNi05LTQ4LjQtMjUuNC02Ni44bC00Ni43LTUyLjVjLTExLjUtMTMtMzEuMy0xNC40LTQ0LjUtMy4ycy0xNS4yIDMwLjktNC40IDQ0LjVsMjcuNiAzNC41YzcgOC44IDQuNyAyMS44LTUuMSAyNy41Yy04LjEgNC44LTE4LjYgMi43LTI0LjItNC44TDY0IDE0NC44Vjk2IDMyem02NCA0NDh2MzJIMjU2VjQ4MGg2NHYzMkg0NDhWNDgwaDMyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDQ0OCAzMjAgMjU2IDEyOCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGgzMnpcIl19LFllPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpbGUtaW52b2ljZS1kb2xsYXJcIixpY29uOlszODQsNTEyLFtdLFwiZjU3MVwiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNNjQgODBjMC04LjggNy4yLTE2IDE2LTE2aDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZ6bTAgNjRjMC04LjggNy4yLTE2IDE2LTE2aDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZ6bTEyOCA3MmM4LjggMCAxNiA3LjIgMTYgMTZ2MTcuM2M4LjUgMS4yIDE2LjcgMy4xIDI0LjEgNS4xYzguNSAyLjMgMTMuNiAxMSAxMS4zIDE5LjZzLTExIDEzLjYtMTkuNiAxMS4zYy0xMS4xLTMtMjItNS4yLTMyLjEtNS4zYy04LjQtLjEtMTcuNCAxLjgtMjMuNiA1LjVjLTUuNyAzLjQtOC4xIDcuMy04LjEgMTIuOGMwIDMuNyAxLjMgNi41IDcuMyAxMC4xYzYuOSA0LjEgMTYuNiA3LjEgMjkuMiAxMC45bC41IC4xIDAgMCAwIDBjMTEuMyAzLjQgMjUuMyA3LjYgMzYuMyAxNC42YzEyLjEgNy42IDIyLjQgMTkuNyAyMi43IDM4LjJjLjMgMTkuMy05LjYgMzMuMy0yMi45IDQxLjZjLTcuNyA0LjgtMTYuNCA3LjYtMjUuMSA5LjFWNDQwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjQyMi4yYy0xMS4yLTIuMS0yMS43LTUuNy0zMC45LTguOWwwIDBjLTIuMS0uNy00LjItMS40LTYuMi0yLjFjLTguNC0yLjgtMTIuOS0xMS45LTEwLjEtMjAuMnMxMS45LTEyLjkgMjAuMi0xMC4xYzIuNSAuOCA0LjggMS42IDcuMSAyLjRsMCAwIDAgMCAwIDBjMTMuNiA0LjYgMjQuNiA4LjQgMzYuMyA4LjdjOS4xIC4zIDE3LjktMS43IDIzLjctNS4zYzUuMS0zLjIgNy45LTcuMyA3LjgtMTRjLS4xLTQuNi0xLjgtNy44LTcuNy0xMS42Yy02LjgtNC4zLTE2LjUtNy40LTI5LTExLjJsLTEuNi0uNSAwIDBjLTExLTMuMy0yNC4zLTcuMy0zNC44LTEzLjdjLTEyLTcuMi0yMi42LTE4LjktMjIuNy0zNy4zYy0uMS0xOS40IDEwLjgtMzIuOCAyMy44LTQwLjVjNy41LTQuNCAxNS44LTcuMiAyNC4xLTguN1YyMzJjMC04LjggNy4yLTE2IDE2LTE2elwiXX0sX2U9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGxhbmUtY2lyY2xlLWV4Y2xhbWF0aW9uXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1NTZcIixcIk0yNTYgMGMtMzUgMC02NCA1OS41LTY0IDkzLjd2ODQuNkw4LjEgMjgzLjRjLTUgMi44LTguMSA4LjItOC4xIDEzLjl2NjUuNWMwIDEwLjYgMTAuMiAxOC4zIDIwLjQgMTUuNGwxNzEuNi00OSAwIDcwLjktNTcuNiA0My4yYy00IDMtNi40IDcuOC02LjQgMTIuOHY0MmMwIDcuOCA2LjMgMTQgMTQgMTRjMS4zIDAgMi42LS4yIDMuOS0uNUwyNTYgNDgwbDExMC4xIDMxLjVjMS4zIC40IDIuNiAuNSAzLjkgLjVjNiAwIDExLjEtMy43IDEzLjEtOUMzNDQuNSA0NzAuNyAzMjAgNDIyLjIgMzIwIDM2OGMwLTYwLjYgMzAuNi0xMTQgNzcuMS0xNDUuNkwzMjAgMTc4LjNWOTMuN0MzMjAgNTkuNSAyOTIgMCAyNTYgMHpNNDk2IDUxMmM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NHMtMTQ0IDY0LjUtMTQ0IDE0NHM2NC41IDE0NCAxNDQgMTQ0em0wLTQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTAtMTkyYzguOCAwIDE2IDcuMiAxNiAxNnY4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYyODhjMC04LjggNy4yLTE2IDE2LTE2elwiXX0sJGU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwieC1yYXlcIixpY29uOls1MTIsNTEyLFtdLFwiZjQ5N1wiLFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyVjQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMlY5NkMxNC4zIDk2IDAgODEuNyAwIDY0ek0yNTYgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnYxNkgxNDRjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoOTZ2MzJIMTEyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDI0MHYzMkgxNDRjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoOTZ2MzJIMTUyYy04LjkgMC0xNyA0LjktMjEuMiAxMi43cy0zLjcgMTcuMyAxLjIgMjQuNmwzMiA0OEMxNjguNSA0MTIgMTc2IDQxNiAxODQgNDE2SDMyOGM4IDAgMTUuNS00IDIwLTEwLjdsMzItNDhjNC45LTcuNCA1LjQtMTYuOCAxLjItMjQuNlMzNjguOSAzMjAgMzYwIDMyMEgyNzJWMjg4aDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDI3MlYyMjRINDAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDI3MlYxNjBoOTZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjcyVjExMmMwLTguOC03LjItMTYtMTYtMTZ6TTIwOCAzODRjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6bTExMi0xNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXX0sY2Y9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3BlbGwtY2hlY2tcIixpY29uOls2NDAsNTEyLFtdLFwiZjg5MVwiLFwiTTE0NCAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNSAxOS43bC02Ni43IDE2MC0xMy4zIDMyYy02LjggMTYuMyAuOSAzNSAxNy4yIDQxLjhzMzUtLjkgNDEuOC0xNy4yTDk4LjcgMjI0aDkwLjdsNS4xIDEyLjNjNi44IDE2LjMgMjUuNSAyNCA0MS44IDE3LjJzMjQtMjUuNSAxNy4yLTQxLjhsLTEzLjMtMzItNjYuNy0xNjBDMTY4LjYgNy44IDE1Ni45IDAgMTQ0IDB6bTE4LjcgMTYwSDEyNS4zTDE0NCAxMTUuMiAxNjIuNyAxNjB6TTI4OCAzMnY5NiA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg4MGM0NC4yIDAgODAtMzUuOCA4MC04MGMwLTIzLjEtOS44LTQzLjgtMjUuNC01OC40YzYtMTEuMiA5LjQtMjQgOS40LTM3LjZjMC00NC4yLTM1LjgtODAtODAtODBIMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTYgNjRIMzUyVjY0aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2em0tMzIgNjRoMzIgMTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMzUyVjE2MHpNNTk4LjYgMzEwLjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMzg0IDQzNC43bC03My40LTczLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJ6XCJdfSxhZj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzbGFzaFwiLGljb246WzY0MCw1MTIsW10sXCJmNzE1XCIsXCJNNS4xIDkuMkMxMy4zLTEuMiAyOC40LTMuMSAzOC44IDUuMWw1OTIgNDY0YzEwLjQgOC4yIDEyLjMgMjMuMyA0LjEgMzMuN3MtMjMuMyAxMi4zLTMzLjcgNC4xTDkuMiA0Mi45Qy0xLjIgMzQuNy0zLjEgMTkuNiA1LjEgOS4yelwiXX0sYTQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29tcHV0ZXItbW91c2VcIixpY29uOlszODQsNTEyLFsxMjg0MzMsXCJtb3VzZVwiXSxcImY4Y2NcIixcIk0wIDE5MkgxNzZWMEgxNjBDNzEuNiAwIDAgNzEuNiAwIDE2MHYzMnptMCAzMlYzNTJjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBoNjRjODguNCAwIDE2MC03MS42IDE2MC0xNjBWMjI0SDE5MiAwem0zODQtMzJWMTYwQzM4NCA3MS42IDMxMi40IDAgMjI0IDBIMjA4VjE5MkgzODR6XCJdfSxzZj1hNCxzND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy1yaWdodC10by1icmFja2V0XCIsaWNvbjpbNTEyLDUxMixbXCJzaWduLWluXCJdLFwiZjA5MFwiLFwiTTM1MiA5Nmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTI1NmMwLTUzLTQzLTk2LTk2LTk2bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0tOS40IDE4Mi42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wyNDIuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6XCJdfSxlZj1zNCxlND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzaG9wLXNsYXNoXCIsaWNvbjpbNjQwLDUxMixbXCJzdG9yZS1hbHQtc2xhc2hcIl0sXCJlMDcwXCIsXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN2wtNTQuOC00M1YyMjRINTEyVjM3NkwzODQgMjc1LjdWMjI0SDMyMHYxLjVMMjc3LjIgMTkySDYwMy4yYzIwLjMgMCAzNi44LTE2LjUgMzYuOC0zNi44YzAtNy4zLTIuMi0xNC40LTYuMi0yMC40TDU1OC4yIDIxLjRDNTQ5LjMgOCA1MzQuNCAwIDUxOC4zIDBIMTIxLjdjLTE2IDAtMzEgOC0zOS45IDIxLjRMNzQuMSAzMi44IDM4LjggNS4xek0zNi44IDE5Mmg4NUwyMSAxMTIuNSA2LjIgMTM0LjdjLTQgNi4xLTYuMiAxMy4yLTYuMiAyMC40QzAgMTc1LjUgMTYuNSAxOTIgMzYuOCAxOTJ6TTMyMCAzODRIMTI4VjIyNEg2NFYzODR2ODBjMCAyNi41IDIxLjUgNDggNDggNDhIMzM2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjM5OC41bC02NC01MC40VjM4NHpcIl19LGZmPWU0LHJmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNlcnZlclwiLGljb246WzUxMiw1MTIsW10sXCJmMjMzXCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NnY2NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTM0NCAxNTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptOTYtMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek02NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0djY0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYzNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTM0NCA0MDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptMTA0LTI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl19LGxmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZpcnVzLWNvdmlkLXNsYXNoXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0YTlcIixcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ3Mi4xIDM0NC43YzExLjQtMTkuNSAxOS4xLTQxLjQgMjIuMy02NC43SDUyOHYxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHYxNkg0OTQuNGMtNC4yLTMwLjctMTYuMy01OC44LTM0LjEtODIuM0w0ODQgMTI1LjlsMTEuMyAxMS4zYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0NzIuNyA0Ni43Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45TDQ1MC4xIDkybC0yMy44IDIzLjhDNDAyLjggOTcuOSAzNzQuNyA4NS44IDM0NCA4MS42VjQ4aDE2YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDI4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGgxNlY4MS42Yy0zMC43IDQuMi01OC44IDE2LjMtODIuMyAzNC4xTDE4OS45IDkybDExLjMtMTEuM2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDEzNC4xIDc5LjggMzguOCA1LjF6TTE0OS4yIDIxMy41Yy0xLjUgNi0yLjcgMTIuMi0zLjUgMTguNUgxMTJWMjE2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjgwaDMzLjZjNC4yIDMwLjcgMTYuMyA1OC44IDM0LjEgODIuM0wxNTYgMzg2LjFsLTExLjMtMTEuM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw1Ni42IDU2LjZjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDE4OS45IDQyMGwyMy44LTIzLjhjMjMuNSAxNy45IDUxLjcgMjkuOSA4Mi4zIDM0LjFWNDY0SDI4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgzNDRWNDMwLjRjMjAuNC0yLjggMzkuNy05LjEgNTcuMy0xOC4yTDE0OS4yIDIxMy41elwiXX0sb2Y9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2hvcC1sb2NrXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0YTVcIixcIk0zNi44IDE5Mkg0NDkuNmMyMC4yLTE5LjggNDcuOS0zMiA3OC40LTMyYzMwLjUgMCA1OC4xIDEyLjIgNzguMyAzMS45YzE4LjktMS42IDMzLjctMTcuNCAzMy43LTM2LjdjMC03LjMtMi4yLTE0LjQtNi4yLTIwLjRMNTU4LjIgMjEuNEM1NDkuMyA4IDUzNC40IDAgNTE4LjMgMEgxMjEuN2MtMTYgMC0zMSA4LTM5LjkgMjEuNEw2LjIgMTM0LjdjLTQgNi4xLTYuMiAxMy4yLTYuMiAyMC40QzAgMTc1LjUgMTYuNSAxOTIgMzYuOCAxOTJ6TTM4NCAyMjRIMzIwVjM4NEgxMjhWMjI0SDY0VjM4NHY4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgzMzZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzg0IDM1MiAyMjR6bTE0NCAxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnY0OEg0OTZWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJ2NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyVjI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl19LGY0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXJnbGFzcy1zdGFydFwiLGljb246WzM4NCw1MTIsW1wiaG91cmdsYXNzLTFcIl0sXCJmMjUxXCIsXCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NFY3NWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFMMTQ2LjcgMjU2IDc4LjkgMzIzLjlDNDguOSAzNTMuOSAzMiAzOTQuNiAzMiA0Mzd2MTFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjQgMzIwaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjQzN2MwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFMMjM3LjMgMjU2bDY3LjktNjcuOWMzMC0zMCA0Ni45LTcwLjcgNDYuOS0xMTMuMVY2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjAgNjQgMzJ6TTI4OCA0Mzd2MTFIOTZWNDM3YzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45TDE5MiAzMDEuM2w2Ny45IDY3LjljMTggMTggMjguMSA0Mi40IDI4LjEgNjcuOXpcIl19LG5mPWY0LEhmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJsZW5kZXItcGhvbmVcIixpY29uOls1NzYsNTEyLFtdLFwiZjZiNlwiLFwiTTE5MiAzNTJWNDhjMC0yNi41IDIxLjUtNDggNDgtNDhINTM0LjFjMjEuMSAwIDM2LjQgMjAuMSAzMC45IDQwLjRMNTU4LjUgNjRINDAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDU0OS44bC0xNy41IDY0SDQwMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg1MjMuNmwtMTcuNSA2NEg0MDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoOTcuNUw0ODAgMzUySDE5MnptMTYgMzJINDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDIwOGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em0xNDQgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpNMTQ3LjUgMzAuN2MxMC44IDYuNyAxNS4zIDIxIDEwLjYgMzMuNGwtMjIgNTcuOGMtNC4yIDEwLjktMTQuNSAxNy42LTI1LjMgMTYuNGwtMzMuMy0zLjZjLTEzLjYgNDIuMi0xMy42IDg4LjQgMCAxMzAuN2wzMy4zLTMuNmMxMC45LTEuMiAyMS4yIDUuNSAyNS4zIDE2LjRsMjIgNTcuOGM0LjcgMTIuNCAuMiAyNi43LTEwLjYgMzMuNGwtNDQgMjcuMmMtOS43IDYtMjEuOSA0LjItMjkuOC00LjNDLTI0LjYgMjg2LTI0LjYgMTE0IDczLjcgNy44QzgxLjYtLjcgOTMuOC0yLjUgMTAzLjUgMy41bDQ0IDI3LjJ6XCJdfSx6Zj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJidWlsZGluZy13aGVhdFwiLGljb246WzY0MCw1MTIsW10sXCJlNGRiXCIsXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzM2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgyNDBWNDMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4djgwSDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHpNODAgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNDBjMC04LjgtNy4yLTE2LTE2LTE2SDgwem04MCAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZ6bTExMi0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNkgyNzJ6TTY0IDExMnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTc2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDE3NnptODAgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDI3MmMtOC44IDAtMTYgNy4yLTE2IDE2em0zODQgODB2MTZjMCA0NC4yLTM1LjggODAtODAgODBINTQ0VjI3MmMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNnptMCAxMjhjMCA0NC4yLTM1LjggODAtODAgODBINTQ0VjM4NGMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNnYxNnptMCAxMTJjMCA0NC4yLTM1LjggODAtODAgODBINTQ0VjQ5NmMwLTQ0LjIgMzUuOC04MCA4MC04MGgxNnYxNnpNNTEyIDQ5NnYxNkg0OTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjQxNmgxNmM0NC4yIDAgODAgMzUuOCA4MCA4MHptMC05Nkg0OTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjMwNGgxNmM0NC4yIDAgODAgMzUuOCA4MCA4MHYxNnptMC0xMjh2MTZINDk2Yy00NC4yIDAtODAtMzUuOC04MC04MFYxOTJoMTZjNDQuMiAwIDgwIDM1LjggODAgODB6TTUyOCAzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWNTZjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTk2IDY0djMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0Vjk2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTQ1NiA3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHYzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFY5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpcIl19LFZmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1icmVhc3RmZWVkaW5nXCIsaWNvbjpbNTEyLDUxMixbXSxcImU1M2FcIixcIk0yNTYgMTYwYy00NC4yIDAtODAtMzUuOC04MC04MHMzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBzLTM1LjggODAtODAgODB6TTQ2OC44IDM4Mi44TDQwNS41IDQ2MmMtMTYuNiAyMC43LTQ2LjggMjQuMS02Ny41IDcuNWMtMTcuNi0xNC4xLTIyLjctMzguMS0xMy41LTU3LjdsLS43LS4xYy0zOC45LTUuNi03NC4zLTI1LjEtOTkuNy01NC44VjMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY0OGMwIC44IDAgMS42IC4xIDIuNGwxMDEuNCA1MC43YzIzLjcgMTEuOSAzMy4zIDQwLjcgMjEuNSA2NC40cy00MC43IDMzLjMtNjQuNCAyMS41TDU5LjIgNDI3LjNjLTEuMS0uNS0yLjItMS4xLTMuMy0xLjdjLTQuOS0yLjgtOS4yLTYuNC0xMi42LTEwLjZjLTQuNi01LjQtNy44LTExLjctOS42LTE4LjRjLTMuMy0xMi0xLjktMjUuMiA0LjgtMzYuNmMuNi0xLjEgMS4zLTIuMiAyLTMuMmw2Ny4xLTEwMC42YzI2LjctNDAuMSA3MS43LTY0LjEgMTE5LjgtNjQuMWg3NS4yYzQ2LjUgMCA5MC4xIDIyLjUgMTE3LjIgNjAuM2w1MC43IDcwLjljMi4yIDMgNCA2LjEgNS41IDkuNGMyLjkgNi43IDQuMyAxMy44IDQgMjAuOGMtLjMgMTAuNi00LjIgMjEtMTEuMiAyOS40ek0zNTIgMzMyYzAtMjQuMy0xOS43LTQ0LTQ0LTQ0cy00NCAxOS43LTQ0IDQ0czE5LjcgNDQgNDQgNDRzNDQtMTkuNyA0NC00NHpcIl19LHI0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJpZ2h0LXRvLWJyYWNrZXRcIixpY29uOls1MTIsNTEyLFtcInNpZ24taW4tYWx0XCJdLFwiZjJmNlwiLFwiTTM1MiA5Nmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMlYzODRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzUyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDY0YzUzIDAgOTYtNDMgOTYtOTZWMTI4YzAtNTMtNDMtOTYtOTYtOTZIMzUyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0tNy41IDE3Ny40YzQuOC00LjUgNy41LTEwLjggNy41LTE3LjRzLTIuNy0xMi45LTcuNS0xNy40bC0xNDQtMTM2Yy03LTYuNi0xNy4yLTguNC0yNi00LjZzLTE0LjUgMTIuNS0xNC41IDIydjcySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgxNjB2NzJjMCA5LjYgNS43IDE4LjIgMTQuNSAyMnMxOSAyIDI2LTQuNmwxNDQtMTM2elwiXX0sbWY9cjQsdmY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidmVudXNcIixpY29uOlszODQsNTEyLFs5NzkyXSxcImYyMjFcIixcIk0zMDQgMTc2YzAgNjEuOS01MC4xIDExMi0xMTIgMTEycy0xMTItNTAuMS0xMTItMTEyczUwLjEtMTEyIDExMi0xMTJzMTEyIDUwLjEgMTEyIDExMnpNMjI0IDM0OS4xYzgxLjktMTUgMTQ0LTg2LjggMTQ0LTE3My4xQzM2OCA3OC44IDI4OS4yIDAgMTkyIDBTMTYgNzguOCAxNiAxNzZjMCA4Ni4zIDYyLjEgMTU4LjEgMTQ0IDE3My4xVjM4NEgxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMzJ2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NDhoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjI0VjM0OS4xelwiXX0sTWY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGFzc3BvcnRcIixpY29uOls0NDgsNTEyLFtdLFwiZjVhYlwiLFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0xODMgMjc4LjhjLTI3LjktMTMuMi00OC40LTM5LjQtNTMuNy03MC44aDM5LjFjMS42IDMwLjQgNy43IDUzLjggMTQuNiA3MC44em00MS4zIDkuMmwtLjMgMC0uMyAwYy0yLjQtMy41LTUuNy04LjktOS4xLTE2LjVjLTYtMTMuNi0xMi40LTM0LjMtMTQuMi02My41aDQ3LjFjLTEuOCAyOS4yLTguMSA0OS45LTE0LjIgNjMuNWMtMy40IDcuNi02LjcgMTMtOS4xIDE2LjV6bTQwLjctOS4yYzYuOC0xNy4xIDEyLjktNDAuNCAxNC42LTcwLjhoMzkuMWMtNS4zIDMxLjQtMjUuOCA1Ny42LTUzLjcgNzAuOHpNMjc5LjYgMTc2Yy0xLjYtMzAuNC03LjctNTMuOC0xNC42LTcwLjhjMjcuOSAxMy4yIDQ4LjQgMzkuNCA1My43IDcwLjhIMjc5LjZ6TTIyMy43IDk2bC4zIDAgLjMgMGMyLjQgMy41IDUuNyA4LjkgOS4xIDE2LjVjNiAxMy42IDEyLjQgMzQuMyAxNC4yIDYzLjVIMjAwLjVjMS44LTI5LjIgOC4xLTQ5LjkgMTQuMi02My41YzMuNC03LjYgNi43LTEzIDkuMS0xNi41ek0xODMgMTA1LjJjLTYuOCAxNy4xLTEyLjkgNDAuNC0xNC42IDcwLjhIMTI5LjNjNS4zLTMxLjQgMjUuOC01Ny42IDUzLjctNzAuOHpNMzUyIDE5MmMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOFM5NiAxMjEuMyA5NiAxOTJzNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4ek0xMTIgMzg0Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDMzNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxMTJ6XCJdfSxsND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoZWFydC1wdWxzZVwiLGljb246WzUxMiw1MTIsW1wiaGVhcnRiZWF0XCJdLFwiZjIxZVwiLFwiTTIyOC4zIDQ2OS4xTDQ3LjYgMzAwLjRjLTQuMi0zLjktOC4yLTguMS0xMS45LTEyLjRoODdjMjIuNiAwIDQzLTEzLjYgNTEuNy0zNC41bDEwLjUtMjUuMiA0OS4zIDEwOS41YzMuOCA4LjUgMTIuMSAxNCAyMS40IDE0LjFzMTcuOC01IDIyLTEzLjNMMzIwIDI1My43bDEuNyAzLjRjOS41IDE5IDI4LjkgMzEgNTAuMSAzMUg0NzYuM2MtMy43IDQuMy03LjcgOC41LTExLjkgMTIuNEwyODMuNyA0NjkuMWMtNy41IDctMTcuNCAxMC45LTI3LjcgMTAuOXMtMjAuMi0zLjktMjcuNy0xMC45ek01MDMuNyAyNDBoLTEzMmMtMyAwLTUuOC0xLjctNy4yLTQuNGwtMjMuMi00Ni4zYy00LjEtOC4xLTEyLjQtMTMuMy0yMS41LTEzLjNzLTE3LjQgNS4xLTIxLjUgMTMuM2wtNDEuNCA4Mi44TDIwNS45IDE1OC4yYy0zLjktOC43LTEyLjctMTQuMy0yMi4yLTE0LjFzLTE4LjEgNS45LTIxLjggMTQuOGwtMzEuOCA3Ni4zYy0xLjIgMy00LjIgNC45LTcuNCA0LjlIMTZjLTIuNiAwLTUgLjQtNy4zIDEuMUMzIDIyNS4yIDAgMjA4LjIgMCAxOTAuOXYtNS44YzAtNjkuOSA1MC41LTEyOS41IDExOS40LTE0MUMxNjUgMzYuNSAyMTEuNCA1MS40IDI0NCA4NGwxMiAxMiAxMi0xMmMzMi42LTMyLjYgNzktNDcuNSAxMjQuNi0zOS45QzQ2MS41IDU1LjYgNTEyIDExNS4yIDUxMiAxODUuMXY1LjhjMCAxNi45LTIuOCAzMy41LTguMyA0OS4xelwiXX0sdGY9bDQsaTQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVvcGxlLWNhcnJ5LWJveFwiLGljb246WzY0MCw1MTIsW1wicGVvcGxlLWNhcnJ5XCJdLFwiZjRjZVwiLFwiTTE3NiA0OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6TTE0NCAyNDEuN3Y2NS4xbDUxIDUxYzcuMSA3LjEgMTEuOCAxNi4yIDEzLjQgMjYuMWwxNS4yIDkwLjljMi45IDE3LjQtOC45IDMzLjktMjYuMyAzNi44cy0zMy45LTguOS0zNi44LTI2LjNsLTE0LjMtODUuOUw2Ni44IDMyMEM1NC44IDMwOCA0OCAyOTEuNyA0OCAyNzQuN1YxODYuNmMwLTMyLjQgMjYuMi01OC42IDU4LjYtNTguNmMyNC4xIDAgNDYuNSAxMiA1OS45IDMybDQ3LjQgNzEuMSAxMC4xIDVWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMySDM4NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY3Ni4ybDEwLjEtNUw0NzMuNSAxNjBjMTMuMy0yMCAzNS44LTMyIDU5LjktMzJjMzIuNCAwIDU4LjYgMjYuMiA1OC42IDU4LjZ2ODguMWMwIDE3LTYuNyAzMy4zLTE4LjcgNDUuM2wtNzkuNCA3OS40LTE0LjMgODUuOWMtMi45IDE3LjQtMTkuNCAyOS4yLTM2LjggMjYuM3MtMjkuMi0xOS40LTI2LjMtMzYuOGwxNS4yLTkwLjljMS42LTkuOSA2LjMtMTkgMTMuNC0yNi4xbDUxLTUxVjI0MS43bC0xOSAyOC41Yy00LjYgNy0xMSAxMi42LTE4LjUgMTYuM2wtNTkuNiAyOS44Yy0yLjQgMS4zLTQuOSAyLjItNy42IDIuOGMtMi42IC42LTUuMyAuOS03LjkgLjhIMjU2LjdjLTIuNSAuMS01LS4yLTcuNS0uN2MtMi45LS42LTUuNi0xLjYtOC4xLTNsLTU5LjUtMjkuOGMtNy41LTMuNy0xMy44LTkuNC0xOC41LTE2LjNsLTE5LTI4LjV6TTIuMyA0NjguMUw1MC4xIDM0OC42bDQ5LjIgNDkuMi0zNy42IDk0Yy02LjYgMTYuNC0yNS4yIDI0LjQtNDEuNiAxNy44Uy00LjMgNDg0LjUgMi4zIDQ2OC4xek01MTIgOTZjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OHptNzcuOSAyNTIuNmw0Ny44IDExOS41YzYuNiAxNi40LTEuNCAzNS0xNy44IDQxLjZzLTM1LTEuNC00MS42LTE3LjhsLTM3LjYtOTQgNDkuMi00OS4yelwiXX0saGY9aTQsQ2Y9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGVtcGVyYXR1cmUtaGlnaFwiLGljb246WzUxMiw1MTIsW10sXCJmNzY5XCIsXCJNNDE2IDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyem0wIDY0YzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnM0MyA5NiA5NiA5NnpNOTYgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhWMjc2LjVjMCAxNy4zIDcuMSAzMS45IDE1LjMgNDIuNUMyMTcuOCAzMzIuNiAyMjQgMzQ5LjUgMjI0IDM2OGMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTE4LjUgNi4yLTM1LjQgMTYuNy00OC45Qzg4LjkgMzA4LjQgOTYgMjkzLjggOTYgMjc2LjVWMTEyek0xNDQgMEM4Mi4xIDAgMzIgNTAuMiAzMiAxMTJWMjc2LjVjMCAuMS0uMSAuMy0uMiAuNmMtLjIgLjYtLjggMS42LTEuNyAyLjhDMTEuMiAzMDQuMiAwIDMzNC44IDAgMzY4YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDRjMC0zMy4yLTExLjMtNjMuOC0zMC4xLTg4LjFjLS45LTEuMi0xLjUtMi4yLTEuNy0yLjhjLS4xLS4zLS4yLS41LS4yLS42VjExMkMyNTYgNTAuMiAyMDUuOSAwIDE0NCAwem0wIDQxNmMyNi41IDAgNDgtMjEuNSA0OC00OGMwLTIwLjktMTMuNC0zOC43LTMyLTQ1LjNWMTEyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjMyMi43Yy0xOC42IDYuNi0zMiAyNC40LTMyIDQ1LjNjMCAyNi41IDIxLjUgNDggNDggNDh6XCJdfSxMZj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtaWNyb2NoaXBcIixpY29uOls1MTIsNTEyLFtdLFwiZjJkYlwiLFwiTTE3NiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFY2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRIMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjR2NTZIMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjR2NTZIMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjRjMCAzNS4zIDI4LjcgNjQgNjQgNjR2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDhoNTZ2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDhoNTZ2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRoNDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRINDQ4VjI4MGg0MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEg0NDhWMTc2aDQwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDQ0OGMwLTM1LjMtMjguNy02NC02NC02NFYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFY2NEgyODBWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWNjRIMTc2VjI0ek0xNjAgMTI4SDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE5MiAzMkgxNjBWMzUySDM1MlYxNjB6XCJdfSxwZj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjcm93blwiLGljb246WzU3Niw1MTIsWzEyODA4MV0sXCJmNTIxXCIsXCJNMzA5IDEwNmMxMS40LTcgMTktMTkuNyAxOS0zNGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDE0LjQgNy42IDI3IDE5IDM0TDIwOS43IDIyMC42Yy05LjEgMTguMi0zMi43IDIzLjQtNDguNiAxMC43TDcyIDE2MGM1LTYuNyA4LTE1IDgtMjRjMC0yMi4xLTE3LjktNDAtNDAtNDBTMCAxMTMuOSAwIDEzNnMxNy45IDQwIDQwIDQwYy4yIDAgLjUgMCAuNyAwTDg2LjQgNDI3LjRjNS41IDMwLjQgMzIgNTIuNiA2MyA1Mi42SDQyNi42YzMwLjkgMCA1Ny40LTIyLjEgNjMtNTIuNkw1MzUuMyAxNzZjLjIgMCAuNSAwIC43IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBjMCA5IDMgMTcuMyA4IDI0bC04OS4xIDcxLjNjLTE1LjkgMTIuNy0zOS41IDcuNS00OC42LTEwLjdMMzA5IDEwNnpcIl19LGRmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndlaWdodC1oYW5naW5nXCIsaWNvbjpbNTEyLDUxMixbXSxcImY1Y2RcIixcIk0yODggOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem01OC41IDMyYzMuNS0xMCA1LjUtMjAuOCA1LjUtMzJjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAxMS4yIDEuOSAyMiA1LjUgMzJIMTIwYy0yMiAwLTQxLjIgMTUtNDYuNiAzNi40bC03MiAyODhjLTMuNiAxNC4zLS40IDI5LjUgOC43IDQxLjJTMzMuMiA1MTIgNDggNTEySDQ2NGMxNC44IDAgMjguNy02LjggMzcuOC0xOC41czEyLjMtMjYuOCA4LjctNDEuMmwtNzItMjg4QzQzMy4yIDE0MyA0MTQgMTI4IDM5MiAxMjhIMzQ2LjV6XCJdfSx1Zj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ4bWFya3MtbGluZXNcIixpY29uOls2NDAsNTEyLFtdLFwiZTU5YVwiLFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6bTAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpNNyAxNjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDU1IDU1TDcgMzExYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NUw0MSAxNjdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwek0yNjUgMTY3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NXpNNDU1IDE2N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHpcIl19LHhmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpbGUtcHJlc2NyaXB0aW9uXCIsaWNvbjpbMzg0LDUxMixbXSxcImY1NzJcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTEwNCAxOTZoNzJjMzMuMSAwIDYwIDI2LjkgNjAgNjBjMCAyNS41LTE1LjkgNDcuMi0zOC4zIDU1LjlsNDMgNDAuMyAzMy44LTMxYzguMS03LjUgMjAuOC02LjkgMjguMyAxLjJzNi45IDIwLjgtMS4yIDI4LjNMMjcwIDM3OS43bDMxLjcgMjkuN2M4LjEgNy42IDguNSAyMC4yIC45IDI4LjNzLTIwLjIgOC41LTI4LjMgLjlsLTMzLjktMzEuOC0zNC45IDMyYy04LjEgNy41LTIwLjggNi45LTI4LjMtMS4ycy02LjktMjAuOCAxLjItMjguM2wzMi42LTI5LjktNjQuOC02MC44Yy0uOS0uOC0xLjYtMS43LTIuMy0yLjZIMTI0djQ0YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMFYyOTYgMjE2YzAtMTEgOS0yMCAyMC0yMHptNzIgODBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwSDEyNHY0MGg1MnpcIl19LG80PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndlaWdodC1zY2FsZVwiLGljb246WzUxMiw1MTIsW1wid2VpZ2h0XCJdLFwiZjQ5NlwiLFwiTTM4NCAxNzZjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhzNTcuMy0xMjggMTI4LTEyOHMxMjggNTcuMyAxMjggMTI4em03LjgtMTEyQzM1OS41IDI0LjkgMzEwLjcgMCAyNTYgMFMxNTIuNSAyNC45IDEyMC4yIDY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDM5MS44ek0yOTYgMjI0YzAtMTAuNi00LjEtMjAuMi0xMC45LTI3LjRsMzMuNi03OC4zYzMuNS04LjEtLjMtMTcuNS04LjQtMjFzLTE3LjUgLjMtMjEgOC40TDI1NS43IDE4NGMtMjIgLjEtMzkuNyAxOC0zOS43IDQwYzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDB6XCJdfSxnZj1vNCxuND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLWdyb3VwXCIsaWNvbjpbNjQwLDUxMixbMTI4MTAxLFwidXNlci1mcmllbmRzXCJdLFwiZjUwMFwiLFwiTTM1MiAxMjhjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhTMTUzLjMgMCAyMjQgMHMxMjggNTcuMyAxMjggMTI4ek0wIDQ4Mi4zQzAgMzgzLjggNzkuOCAzMDQgMTc4LjMgMzA0aDkxLjRDMzY4LjIgMzA0IDQ0OCAzODMuOCA0NDggNDgyLjNjMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdIMjkuN0MxMy4zIDUxMiAwIDQ5OC43IDAgNDgyLjN6TTYwOS4zIDUxMkg0NzEuNGM1LjQtOS40IDguNi0yMC4zIDguNi0zMnYtOGMwLTYwLjctMjcuMS0xMTUuMi02OS44LTE1MS44YzIuNC0uMSA0LjctLjIgNy4xLS4yaDYxLjRDNTY3LjggMzIwIDY0MCAzOTIuMiA2NDAgNDgxLjNjMCAxNy0xMy44IDMwLjctMzAuNyAzMC43ek00MzIgMjU2Yy0zMSAwLTU5LTEyLjYtNzkuMy0zMi45QzM3Mi40IDE5Ni41IDM4NCAxNjMuNiAzODQgMTI4YzAtMjYuOC02LjYtNTIuMS0xOC4zLTc0LjNDMzg0LjMgNDAuMSA0MDcuMiAzMiA0MzIgMzJjNjEuOSAwIDExMiA1MC4xIDExMiAxMTJzLTUwLjEgMTEyLTExMiAxMTJ6XCJdfSxTZj1uNCxIND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy11cC1hLXpcIixpY29uOls1NzYsNTEyLFtcInNvcnQtYWxwaGEtdXBcIl0sXCJmMTVlXCIsXCJNMTgzLjYgNDIuNEMxNzcuNSAzNS44IDE2OSAzMiAxNjAgMzJzLTE3LjUgMy44LTIzLjYgMTAuNGwtODggOTZjLTExLjkgMTMtMTEuMSAzMy4zIDIgNDUuMnMzMy4zIDExLjEgNDUuMi0yTDEyOCAxNDYuM1Y0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNDYuM2wzMi40IDM1LjRjMTEuOSAxMyAzMi4yIDEzLjkgNDUuMiAyczEzLjktMzIuMiAyLTQ1LjJsLTg4LTk2ek0zMjAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDUwLjdsLTczLjQgNzMuNGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlzMTYuNiAxOS44IDI5LjYgMTkuOEg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDI5LjNsNzMuNC03My40YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45cy0xNi42LTE5LjgtMjkuNi0xOS44SDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTQxNiAzMmMtMTIuMSAwLTIzLjIgNi44LTI4LjYgMTcuN2wtNjQgMTI4LTE2IDMyYy03LjkgMTUuOC0xLjUgMzUgMTQuMyA0Mi45czM1IDEuNSA0Mi45LTE0LjNsNy4yLTE0LjNoODguNGw3LjIgMTQuM2M3LjkgMTUuOCAyNy4xIDIyLjIgNDIuOSAxNC4zczIyLjItMjcuMSAxNC4zLTQyLjlsLTE2LTMyLTY0LTEyOEM0MzkuMiAzOC44IDQyOC4xIDMyIDQxNiAzMnpNMzk1LjggMTc2TDQxNiAxMzUuNiA0MzYuMiAxNzZIMzk1Ljh6XCJdfSxOZj1INCx3Zj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGVzcy1rbmlnaHRcIixpY29uOlszODQsNTEyLFs5ODIyXSxcImY0NDFcIixcIk0zMiAzOTEuNlY0MTZIMzUyVjIyNGMwLTEwNi04Ni0xOTItMTkyLTE5MkgxMi45QzUuOCAzMiAwIDM3LjggMCA0NC45YzAgMiAuNSA0IDEuNCA1LjhMMTYgODAgOS40IDg2LjZjLTYgNi05LjQgMTQuMS05LjQgMjIuNlYyNDIuM2MwIDEzLjEgOCAyNC45IDIwLjEgMjkuN2w0Ni41IDE4LjZjOC41IDMuNCAxOCAzIDI2LjItMS4xbDYuNi0zLjNjOC00IDE0LTExLjIgMTYuNS0xOS44bDguMy0yOC45YzIuNS04LjYgOC40LTE1LjggMTYuNS0xOS44TDE2MCAyMDh2NDAuNGMwIDI0LjItMTMuNyA0Ni40LTM1LjQgNTcuMkw2Ny40IDMzNC4zQzQ1LjcgMzQ1LjIgMzIgMzY3LjMgMzIgMzkxLjZ6TTcyIDE0OGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBzOS0yMCAyMC0yMHMyMCA5IDIwIDIwek0zNTIgNDQ4SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnpcIl19LHo0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2UtbGF1Z2gtc3F1aW50XCIsaWNvbjpbNTEyLDUxMixbXCJsYXVnaC1zcXVpbnRcIl0sXCJmNTliXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNOTYuOCAzMTQuMWMtMy44LTEzLjcgNy40LTI2LjEgMjEuNi0yNi4xSDM5My42YzE0LjIgMCAyNS41IDEyLjQgMjEuNiAyNi4xQzM5Ni4yIDM4MiAzMzIuMSA0MzIgMjU2IDQzMnMtMTQwLjItNTAtMTU5LjItMTE3Ljl6bTM2LjctMTk5LjRsODkuOSA0Ny45YzEwLjcgNS43IDEwLjcgMjEuMSAwIDI2LjhsLTg5LjkgNDcuOWMtNy45IDQuMi0xNy41LTEuNS0xNy41LTEwLjVjMC0yLjggMS01LjUgMi44LTcuNmwzNi00My4yLTM2LTQzLjJjLTEuOC0yLjEtMi44LTQuOC0yLjgtNy42YzAtOSA5LjYtMTQuNyAxNy41LTEwLjV6TTM5NiAxMjUuMWMwIDIuOC0xIDUuNS0yLjggNy42bC0zNiA0My4yIDM2IDQzLjJjMS44IDIuMSAyLjggNC44IDIuOCA3LjZjMCA5LTkuNiAxNC43LTE3LjUgMTAuNWwtODkuOS00Ny45Yy0xMC43LTUuNy0xMC43LTIxLjEgMC0yNi44bDg5LjktNDcuOWM3LjktNC4yIDE3LjUgMS41IDE3LjUgMTAuNXpcIl19LGtmPXo0LGJmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndoZWVsY2hhaXJcIixpY29uOls1NzYsNTEyLFtdLFwiZjE5M1wiLFwiTTIyNCA5NmMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4ek0xNTIuNSAyNDcuMmMxMi40LTQuNyAxOC43LTE4LjUgMTQtMzAuOXMtMTguNS0xOC43LTMwLjktMTRDNzUuMSAyMjUuMSAzMiAyODMuNSAzMiAzNTJjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBjNjEuMiAwIDExNC4zLTM0LjMgMTQxLjItODQuN2M2LjItMTEuNyAxLjgtMjYuMi05LjktMzIuNXMtMjYuMi0xLjgtMzIuNSA5LjlDMjcyIDQ0MCAyMzQuOCA0NjQgMTkyIDQ2NGMtNjEuOSAwLTExMi01MC4xLTExMi0xMTJjMC00Ny45IDMwLjEtODguOCA3Mi41LTEwNC44ek0yOTEuOCAxNzZsLTEuOS05LjdjLTQuNS0yMi4zLTI0LTM4LjMtNDYuOC0zOC4zYy0zMC4xIDAtNTIuNyAyNy41LTQ2LjggNTdsMjMuMSAxMTUuNWM2IDI5LjkgMzIuMiA1MS40IDYyLjggNTEuNGg1LjFjLjQgMCAuOCAwIDEuMyAwaDk0LjFjNi43IDAgMTIuNiA0LjEgMTUgMTAuNEw0MzQgNDU5LjJjNiAxNi4xIDIzLjggMjQuNiA0MC4xIDE5LjFsNDgtMTZjMTYuOC01LjYgMjUuOC0yMy43IDIwLjItNDAuNXMtMjMuNy0yNS44LTQwLjUtMjAuMmwtMTguNyA2LjItMjUuNS02OGMtMTEuNy0zMS4yLTQxLjYtNTEuOS03NC45LTUxLjlIMzE0LjJsLTkuNi00OEgzNjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjkxLjh6XCJdfSxWND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtYXJyb3ctdXBcIixpY29uOls1MTIsNTEyLFtcImFycm93LWNpcmNsZS11cFwiXSxcImYwYWFcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0zODUgMjE1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTcxLTcxVjM5MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYxNzcuOWwtNzEgNzFjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMjM5IDEwM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwzODUgMjE1elwiXX0sQWY9VjQsQmY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidG9nZ2xlLW9uXCIsaWNvbjpbNTc2LDUxMixbXSxcImYyMDVcIixcIk0xOTIgNjRDODYgNjQgMCAxNTAgMCAyNTZTODYgNDQ4IDE5MiA0NDhIMzg0YzEwNiAwIDE5Mi04NiAxOTItMTkycy04Ni0xOTItMTkyLTE5MkgxOTJ6TTM4NCAzNTJjLTUzIDAtOTYtNDMtOTYtOTZzNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2elwiXX0sbTQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLXdhbGtpbmdcIixpY29uOlszMjAsNTEyLFsxMjg2OTQsXCJ3YWxraW5nXCJdLFwiZjU1NFwiLFwiTTI1NiA0OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6TTEyNi41IDE5OS4zYy0xIC40LTEuOSAuOC0yLjkgMS4ybC04IDMuNWMtMTYuNCA3LjMtMjkgMjEuMi0zNC43IDM4LjJsLTIuNiA3LjhjLTUuNiAxNi44LTIzLjcgMjUuOC00MC41IDIwLjJzLTI1LjgtMjMuNy0yMC4yLTQwLjVsMi42LTcuOGMxMS40LTM0LjEgMzYuNi02MS45IDY5LjQtNzYuNWw4LTMuNWMyMC44LTkuMiA0My4zLTE0IDY2LjEtMTRjNDQuNiAwIDg0LjggMjYuOCAxMDEuOSA2Ny45TDI4MSAyMzIuN2wyMS40IDEwLjdjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOXMtMjcuMSAyMi4yLTQyLjkgMTQuM0wyNDcgMjg3LjNjLTEwLjMtNS4yLTE4LjQtMTMuOC0yMi44LTI0LjVsLTkuNi0yMy0xOS4zIDY1LjUgNDkuNSA1NGM1LjQgNS45IDkuMiAxMyAxMS4yIDIwLjhsMjMgOTIuMWM0LjMgMTcuMS02LjEgMzQuNS0yMy4zIDM4LjhzLTM0LjUtNi4xLTM4LjgtMjMuM2wtMjItODguMS03MC43LTc3LjFjLTE0LjgtMTYuMS0yMC4zLTM4LjYtMTQuNy01OS43bDE2LjktNjMuNXpNNjguNyAzOThsMjUtNjIuNGMyLjEgMyA0LjUgNS44IDcgOC42bDQwLjcgNDQuNC0xNC41IDM2LjJjLTIuNCA2LTYgMTEuNS0xMC42IDE2LjFMNTQuNiA1MDIuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMNjguNyAzOTh6XCJdfSxUZj1tNCx5Zj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsXCIsaWNvbjpbMzIwLDUxMixbMTA4XSxcIjRjXCIsXCJNNjQgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDE2SDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdfSxQZj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaXJlXCIsaWNvbjpbNDQ4LDUxMixbMTI4MjkzXSxcImYwNmRcIixcIk0xNTkuMyA1LjRjNy44LTcuMyAxOS45LTcuMiAyNy43IC4xYzI3LjYgMjUuOSA1My41IDUzLjggNzcuNyA4NGMxMS0xNC40IDIzLjUtMzAuMSAzNy00Mi45YzcuOS03LjQgMjAuMS03LjQgMjggLjFjMzQuNiAzMyA2My45IDc2LjYgODQuNSAxMThjMjAuMyA0MC44IDMzLjggODIuNSAzMy44IDExMS45QzQ0OCA0MDQuMiAzNDguMiA1MTIgMjI0IDUxMkM5OC40IDUxMiAwIDQwNC4xIDAgMjc2LjVjMC0zOC40IDE3LjgtODUuMyA0NS40LTEzMS43QzczLjMgOTcuNyAxMTIuNyA0OC42IDE1OS4zIDUuNHpNMjI1LjcgNDE2YzI1LjMgMCA0Ny43LTcgNjguOC0yMWM0Mi4xLTI5LjQgNTMuNC04OC4yIDI4LjEtMTM0LjRjLTIuOC01LjYtNS42LTExLjItOS44LTE2LjhsLTUwLjYgNTguOHMtODEuNC0xMDMuNi04Ny4xLTExMC42QzEzMy4xIDI0My44IDExMiAyNzMuMiAxMTIgMzA2LjhDMTEyIDM3NS40IDE2Mi42IDQxNiAyMjUuNyA0MTZ6XCJdfSx2ND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiZWQtcHVsc2VcIixpY29uOls2NDAsNTEyLFtcInByb2NlZHVyZXNcIl0sXCJmNDg3XCIsXCJNNDgzLjIgOS42TDUyNCA2NGg5MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg1MTJjLTcuNiAwLTE0LjctMy42LTE5LjItOS42TDQ2OC43IDcwLjNsLTQ3IDk5LjljLTMuNyA3LjgtMTEuMyAxMy4xLTE5LjkgMTMuN3MtMTYuOS0zLjQtMjEuNy0xMC42TDMzOS4yIDExMkgyMTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRIMzUyYzggMCAxNS41IDQgMjAgMTAuN2wyNC40IDM2LjYgNDUuOS05Ny41QzQ0NS45IDYuMiA0NTMuMiAxIDQ2MS42IC4xczE2LjYgMi43IDIxLjYgOS41ek0zMjAgMTYwaDEyLjdsMjAuNyAzMS4xYzExLjIgMTYuOCAzMC42IDI2LjMgNTAuNyAyNC44czM3LjktMTMuNyA0Ni41LTMyTDQ2MS45IDE2MEg1NDRjNTMgMCA5NiA0MyA5NiA5NlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDM1MiAzMjAgNjR2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjRzMzIgMTQuMyAzMiAzMlYzNTJIMjg4VjE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTc2IDMyMGMtNDQuMiAwLTgwLTM1LjgtODAtODBzMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgwelwiXX0sRmY9djQsTTQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2h1dHRsZS1zcGFjZVwiLGljb246WzY0MCw1MTIsW1wic3BhY2Utc2h1dHRsZVwiXSxcImYxOTdcIixcIk0xMzAgNDgwYzQwLjYgMCA4MC40LTExIDExNS4yLTMxLjlMMzUyIDM4NGwtMjI0IDAgMCA5Nmgyek0zNTIgMTI4TDI0NS4yIDYzLjlDMjEwLjQgNDMgMTcwLjYgMzIgMTMwIDMyaC0ydjk2bDIyNCAwek05NiAxMjhsMC05Nkg4MEM1My41IDMyIDMyIDUzLjUgMzIgODB2NDhoOGMtMjIuMSAwLTQwIDE3LjktNDAgNDB2MTZWMzI4djE2YzAgMjIuMSAxNy45IDQwIDQwIDQwSDMydjQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDk2bDAtOTZoOGMyNi4yIDAgNDkuNC0xMi42IDY0LTMySDQ1NmM2OS4zIDAgMTM1LTIyLjcgMTc5LjItODEuNmM2LjQtOC41IDYuNC0yMC4zIDAtMjguOEM1OTEgMTgyLjcgNTI1LjMgMTYwIDQ1NiAxNjBIMTY4Yy0xNC42LTE5LjQtMzcuOC0zMi02NC0zMmwtOCAwek01MTIgMjQzLjZ2MjQuOWMwIDE5LjYtMTUuOSAzNS42LTM1LjYgMzUuNmMtMi41IDAtNC40LTItNC40LTQuNFYyMTIuNGMwLTIuNSAyLTQuNCA0LjQtNC40YzE5LjYgMCAzNS42IDE1LjkgMzUuNiAzNS42elwiXX0sRGY9TTQsdDQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1sYXVnaFwiLGljb246WzUxMiw1MTIsW1wibGF1Z2hcIl0sXCJmNTk5XCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNOTYuOCAzMTQuMWMtMy44LTEzLjcgNy40LTI2LjEgMjEuNi0yNi4xSDM5My42YzE0LjIgMCAyNS41IDEyLjQgMjEuNiAyNi4xQzM5Ni4yIDM4MiAzMzIuMSA0MzIgMjU2IDQzMnMtMTQwLjItNTAtMTU5LjItMTE3Ljl6TTIwOC40IDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXX0sUmY9dDQsVWY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZm9sZGVyLW9wZW5cIixpY29uOls1NzYsNTEyLFsxMjgxOTQsMTI4NDQ5LDYxNzE3XSxcImYwN2NcIixcIk04OC43IDIyMy44TDAgMzc1LjhWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMTgxLjVjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMjYuNSAyNi41YzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdINDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0djMySDE0NGMtMjIuOCAwLTQzLjggMTIuMS01NS4zIDMxLjh6bTI3LjYgMTYuMUMxMjIuMSAyMzAgMTMyLjYgMjI0IDE0NCAyMjRINTQ0YzExLjUgMCAyMiA2LjEgMjcuNyAxNi4xczUuNyAyMi4yLS4xIDMyLjFsLTExMiAxOTJDNDUzLjkgNDc0IDQ0My40IDQ4MCA0MzIgNDgwSDMyYy0xMS41IDAtMjItNi4xLTI3LjctMTYuMXMtNS43LTIyLjIgLjEtMzIuMWwxMTItMTkyelwiXX0scWY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGVhcnQtY2lyY2xlLXBsdXNcIixpY29uOls1NzYsNTEyLFtdLFwiZTUwMFwiLFwiTTQ3LjYgMzAwLjRMMjI4LjMgNDY5LjFjNy41IDcgMTcuNCAxMC45IDI3LjcgMTAuOXMyMC4yLTMuOSAyNy43LTEwLjlsMi42LTIuNEMyNjcuMiA0MzguNiAyNTYgNDA0LjYgMjU2IDM2OGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NmMyOC4zIDAgNTUgNi43IDc4LjcgMTguNWMuOS02LjUgMS4zLTEzIDEuMy0xOS42di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41ek00MzIgNTEyYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDR6bTE2LTIwOHY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg0NDh2NDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzg0SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg0OFYzMDRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl19LEdmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNvZGUtZm9ya1wiLGljb246WzQ0OCw1MTIsW10sXCJlMTNiXCIsXCJNODAgMTA0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0UzU2IDY2LjcgNTYgODBzMTAuNyAyNCAyNCAyNHptODAtMjRjMCAzMi44LTE5LjcgNjEtNDggNzMuM1YxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzA0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE1My4zQzMwNy43IDE0MSAyODggMTEyLjggMjg4IDgwYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAzMi44LTE5LjcgNjEtNDggNzMuM1YxOTJjMCA1My00MyA5Ni05NiA5NkgyNTZ2NzAuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNWMjg4SDE0NGMtNTMgMC05Ni00My05Ni05NlYxNTMuM0MxOS43IDE0MSAwIDExMi44IDAgODBDMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIwOCAyNGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0ek0yNDggNDMyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHpcIl19LFdmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNpdHlcIixpY29uOls2NDAsNTEyLFsxMjc5NjFdLFwiZjY0ZlwiLFwiTTQ4MCA0OGMwLTI2LjUtMjEuNS00OC00OC00OEgzMzZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4Vjk2SDIyNFYyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFY5NkgxMTJWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRTNjQgMTAuNyA2NCAyNFY5Nkg0OEMyMS41IDk2IDAgMTE3LjUgMCAxNDR2OTZWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMwNGgzMiA5Nkg1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjQwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4MFY0OHptOTYgMzIwdjMyYzAgOC44LTcuMiAxNi0xNiAxNkg1MjhjLTguOCAwLTE2LTcuMi0xNi0xNlYzNjhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnpNMjQwIDQxNkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNlYzNjhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZ6TTEyOCA0MDBjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMzY4YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJ6TTU2MCAyNTZjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg1MjhjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2aDMyek0yNTYgMTc2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnpNMTEyIDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTc2YzAtOC44IDcuMi0xNiAxNi0xNmgzMnpNMjU2IDMwNGMwIDguOC03LjIgMTYtMTYgMTZIMjA4Yy04LjggMC0xNi03LjItMTYtMTZWMjcyYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJ6TTExMiAzMjBIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZ6bTMwNC00OHYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZWMjcyYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ6TTQwMCA2NGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2VjgwYzAtOC44IDcuMi0xNiAxNi0xNmgzMnptMTYgMTEydjMyYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnpcIl19LGg0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1pY3JvcGhvbmUtbGluZXNcIixpY29uOlszODQsNTEyLFsxMjc4OTcsXCJtaWNyb3Bob25lLWFsdFwiXSxcImYzYzlcIixcIk05NiA5NlYyNTZjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NkgyMDhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoODBWMTkySDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg4MFYxMjhIMjA4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDgwYzAtNTMtNDMtOTYtOTYtOTZTOTYgNDMgOTYgOTZ6TTMyMCAyNDB2MTZjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhWMjE2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djQwYzAgODkuMSA2Ni4yIDE2Mi43IDE1MiAxNzQuNFY0NjRIMTIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDcyIDcyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDIxNlY0MzAuNGM4NS44LTExLjcgMTUyLTg1LjMgMTUyLTE3NC40VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHYyNHpcIl19LEVmPWg0LElmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcHBlci1ob3RcIixpY29uOls1MTIsNTEyLFsxMjc3OThdLFwiZjgxNlwiLFwiTTQyOC4zIDNjMTEuNi02LjQgMjYuMi0yLjMgMzIuNiA5LjNsNC44IDguN2MxOS4zIDM0LjcgMTkuOCA3NS43IDMuNCAxMTBDNDk1LjggMTU5LjYgNTEyIDE5Ny45IDUxMiAyNDBjMCAxOC41LTMuMSAzNi4zLTguOSA1Mi44Yy02LjEgMTcuMy0yOC41IDE2LjMtMzYuOC0uMWwtMTEuNy0yMy40Yy00LjEtOC4xLTEyLjQtMTMuMy0yMS41LTEzLjNIMzYwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTE3LjEgMGMtMjEuMyAwLTMwLTIzLjktMTAuOC0zMi45QzMwNC43IDg1LjQgMzI3LjcgODAgMzUyIDgwYzI4LjMgMCA1NC44IDcuMyA3Ny44IDIwLjJjNS41LTE4LjIgMy43LTM4LjQtNi01NS44TDQxOSAzNS43Yy02LjQtMTEuNi0yLjMtMjYuMiA5LjMtMzIuNnpNMTcxLjIgMzQ1LjVMMjY0IDE2MGw0MCAwdjgwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDc2LjJsMjMuOSA0Ny44QzM3Mi4zIDQ0My45IDI0NC4zIDUxMiAxMDMuMiA1MTJINDQuNEMxOS45IDUxMiAwIDQ5Mi4xIDAgNDY3LjZjMC0yMC44IDE0LjUtMzguOCAzNC44LTQzLjNsNDkuOC0xMS4xYzM3LjYtOC40IDY5LjUtMzMuMiA4Ni43LTY3Ljd6XCJdfSxPZj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1bmxvY2tcIixpY29uOls0NDgsNTEyLFsxMjgyNzVdLFwiZjA5Y1wiLFwiTTE0NCAxNDRjMC00NC4yIDM1LjgtODAgODAtODBjMzEuOSAwIDU5LjQgMTguNiA3Mi4zIDQ1LjdjNy42IDE2IDI2LjcgMjIuOCA0Mi42IDE1LjJzMjIuOC0yNi43IDE1LjItNDIuNkMzMzEgMzMuNyAyODEuNSAwIDIyNCAwQzE0NC41IDAgODAgNjQuNSA4MCAxNDR2NDhINjRjLTM1LjMgMC02NCAyOC43LTY0IDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDE0NFYxNDR6XCJdfSxYZj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjb2xvbi1zaWduXCIsaWNvbjpbMzg0LDUxMixbXSxcImUxNDBcIixcIk0yNTUgMzkuOGM0LjMtMTcuMS02LjEtMzQuNS0yMy4zLTM4LjhTMTk3LjIgNy4xIDE5MyAyNC4yTDE4MS45IDY4LjZDOTYuMSA4Ny44IDMyIDE2NC40IDMyIDI1NmMwIDU4LjEgMjUuOCAxMTAuMiA2Ni43IDE0NS40TDgxIDQ3Mi4yYy00LjMgMTcuMSA2LjEgMzQuNSAyMy4zIDM4LjhzMzQuNS02LjEgMzguOC0yMy4zbDEzLTUyLjFjOSAzLjQgMTguNCA2LjIgMjggOC4yTDE3NyA0NzIuMmMtNC4zIDE3LjEgNi4xIDM0LjUgMjMuMyAzOC44czM0LjUtNi4xIDM4LjgtMjMuM2wxMC40LTQxLjRjMzMuNC00LjQgNjQuMS0xNy40IDg5LjgtMzYuN2MxNC4xLTEwLjYgMTctMzAuNyA2LjQtNDQuOHMtMzAuNy0xNy00NC44LTYuNGMtMTAuMiA3LjctMjEuNyAxMy45LTM0IDE4LjNMMzIxIDE2MGM5LjQtLjMgMTguNS00LjcgMjQuNi0xMi44YzEwLjYtMTQuMSA3LjgtMzQuMi02LjQtNDQuOGMtMS4xLS44LTIuMi0xLjYtMy4zLTIuNEwzNTEgMzkuOGM0LjMtMTcuMS02LjEtMzQuNS0yMy4zLTM4LjhTMjkzLjIgNy4xIDI4OSAyNC4yTDI3Ny4xIDcxLjVjLTkuMy0yLjctMTguOC00LjYtMjguNi01LjlMMjU1IDM5Ljh6TTE2My4yIDE0My4zTDExNy4zIDMyNi44QzEwMy45IDMwNi41IDk2IDI4Mi4yIDk2IDI1NmMwLTQ4LjcgMjcuMi05MSA2Ny4yLTExMi43em04LjYgMjI5LjVsNjEuMS0yNDQuNmM5LjkgLjcgMTkuNSAyLjUgMjguNyA1LjNsLTYyIDI0OC4xYy05LjctMS45LTE5LTQuOC0yNy44LTguOHpcIl19LFFmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhlYWRzZXRcIixpY29uOls1MTIsNTEyLFtdLFwiZjU5MFwiLFwiTTI1NiA0OEMxNDEuMSA0OCA0OCAxNDEuMSA0OCAyNTZ2NDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjU2QzAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NlY0MDAuMWMwIDQ4LjYtMzkuNCA4OC04OC4xIDg4TDMxMy42IDQ4OGMtOC4zIDE0LjMtMjMuOCAyNC00MS42IDI0SDI0MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OGgzMmMxNy44IDAgMzMuMyA5LjcgNDEuNiAyNGwxMTAuNCAuMWMyMi4xIDAgNDAtMTcuOSA0MC00MFYyNTZjMC0xMTQuOS05My4xLTIwOC0yMDgtMjA4ek0xNDQgMjA4aDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNDRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI3MmMwLTM1LjMgMjguNy02NCA2NC02NHptMjI0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjR2NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYyNDBjMC0xNy43IDE0LjMtMzIgMzItMzJoMTZ6XCJdfSxLZj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzdG9yZS1zbGFzaFwiLGljb246WzY0MCw1MTIsW10sXCJlMDcxXCIsXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN2wtODYuOC02OFYzODQgMjUyLjZjLTQgMS04IDEuOC0xMi4zIDIuM2wtLjEgMGMtNS4zIC43LTEwLjcgMS4xLTE2LjIgMS4xYy0xMi40IDAtMjQuMy0xLjktMzUuNC01LjNWMzUwLjlMMzAxLjIgMjEwLjdjNy00LjQgMTMuMy05LjcgMTguOC0xNS43YzE1LjkgMTcuNiAzOS4xIDI5IDY1LjIgMjljMjYuMiAwIDQ5LjMtMTEuNCA2NS4yLTI5YzE2IDE3LjYgMzkuMSAyOSA2NS4yIDI5YzQuMSAwIDguMS0uMyAxMi4xLS44YzU1LjUtNy40IDgxLjgtNzIuNSA1Mi4xLTExOS40TDUyMi4zIDEzLjFDNTE3LjIgNSA1MDguMSAwIDQ5OC40IDBIMTQxLjZjLTkuNyAwLTE4LjggNS0yMy45IDEzLjFsLTIyLjcgMzZMMzguOCA1LjF6bTczLjQgMjE4LjFjNCAuNSA4LjEgLjggMTIuMSAuOGMxMSAwIDIxLjQtMiAzMS01LjZMNDguOSAxMzQuNWMtNi4xIDQwLjYgMTkuNSA4Mi44IDYzLjMgODguN3pNMTYwIDM4NFYyNTAuNmMtMTEuMiAzLjUtMjMuMiA1LjQtMzUuNiA1LjRjLTUuNSAwLTExLS40LTE2LjMtMS4xbC0uMSAwYy00LjEtLjYtOC4xLTEuMy0xMi0yLjNWMzg0djY0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ4MGMxMi45IDAgMjQuOC0zLjggMzQuOS0xMC4zTDM2NS41IDM4NEgxNjB6XCJdfSxqZj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyb2FkLWNpcmNsZS14bWFya1wiLGljb246WzY0MCw1MTIsW10sXCJlNTY2XCIsXCJNMjEzLjIgMzJIMjg4Vjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzJoNzQuOGMyNy4xIDAgNTEuMyAxNy4xIDYwLjMgNDIuNmw0Mi43IDEyMC42Yy0xMC45LTIuMS0yMi4yLTMuMi0zMy44LTMuMmMtNTkuNSAwLTExMi4xIDI5LjYtMTQ0IDc0LjhWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyYzIuMyAwIDQuNi0uMyA2LjgtLjdjLTQuNSAxNS41LTYuOCAzMS44LTYuOCA0OC43YzAgNS40IC4yIDEwLjcgLjcgMTZsLS43IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0SDg2LjZDNTYuNSA0ODAgMzIgNDU1LjUgMzIgNDI1LjRjMC02LjIgMS4xLTEyLjQgMy4xLTE4LjJMMTUyLjkgNzQuNkMxNjIgNDkuMSAxODYuMSAzMiAyMTMuMiAzMnpNNDk2IDUxMmMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDRzNjQuNS0xNDQgMTQ0LTE0NHMxNDQgNjQuNSAxNDQgMTQ0cy02NC41IDE0NC0xNDQgMTQ0em0yMi42LTE0NGwzNi43LTM2LjdjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEw0OTYgMzQ1LjRsLTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw0NzMuNCAzNjhsLTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDQ5NiAzOTAuNmwzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42TDUxOC42IDM2OHpcIl19LEpmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInVzZXItbWludXNcIixpY29uOls2NDAsNTEyLFtdLFwiZjUwM1wiLFwiTTM1MiAxMjhjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhTMTUzLjMgMCAyMjQgMHMxMjggNTcuMyAxMjggMTI4ek0wIDQ4Mi4zQzAgMzgzLjggNzkuOCAzMDQgMTc4LjMgMzA0aDkxLjRDMzY4LjIgMzA0IDQ0OCAzODMuOCA0NDggNDgyLjNjMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdIMjkuN0MxMy4zIDUxMiAwIDQ5OC43IDAgNDgyLjN6TTQ3MiAyMDBINjE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDQ3MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpcIl19LEM0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1hcnMtc3Ryb2tlLXVwXCIsaWNvbjpbMzIwLDUxMixbOTg5NixcIm1hcnMtc3Ryb2tlLXZcIl0sXCJmMjJhXCIsXCJNMTQ4LjcgNC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDY0IDY0YzQuNiA0LjYgNS45IDExLjUgMy41IDE3LjRzLTguMyA5LjktMTQuOCA5LjlIMTg0djI0aDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDE4NHYyNGMwIC42IDAgMS4yLS4xIDEuOGM3NyAxMS42IDEzNi4xIDc4IDEzNi4xIDE1OC4yYzAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDQwLjQgMCAzNTJjMC04MC4yIDU5LjEtMTQ2LjcgMTM2LjEtMTU4LjJjMC0uNi0uMS0xLjItLjEtMS44VjE2OEgxMDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoMzJWOTZIOTZjLTYuNSAwLTEyLjMtMy45LTE0LjgtOS45cy0xLjEtMTIuOSAzLjUtMTcuNGw2NC02NHpNMjU2IDM1MmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnM0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NnpcIl19LFpmPUM0LEw0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNoYW1wYWduZS1nbGFzc2VzXCIsaWNvbjpbNjQwLDUxMixbMTI5MzQ2LFwiZ2xhc3MtY2hlZXJzXCJdLFwiZjc5ZlwiLFwiTTMyMCAxMjhWNDkuMUwxODYuNiAuM2MtMTEuNC00LjItMjQgLjktMjkuNSAxMS43TDcxLjggMTgxLjFjLTMwLjggNjEtOCAxMzMuOCA0OC4xIDE2Ny40bC0yOCA3Ny40TDMyLjEgNDAzLjlDMTkuNyAzOTkuNCA2IDQwNS44IDEuNCA0MTguM3MxLjkgMjYuMyAxNC4zIDMwLjhsMTY0LjYgNjAuM2MxMi40IDQuNSAyNi4xLTEuOSAzMC42LTE0LjRzLTEuOS0yNi4zLTE0LjMtMzAuOGwtNTkuOS0yMS45IDI4LTc3LjNjNjguMSAxMS42IDEzNS43LTMyLjggMTUwLjEtMTAzLjZsNS4xLTI0LjggNS4xIDI0LjhjMTQuNSA3MC44IDgyIDExNS4yIDE1MC4xIDEwMy42bDI4IDc3LjMtNTkuOSAyMS45Yy0xMi40IDQuNS0xOC44IDE4LjMtMTQuMyAzMC44czE4LjIgMTguOSAzMC42IDE0LjRsMTY0LjYtNjAuM2MxMi40LTQuNSAxOC44LTE4LjMgMTQuMy0zMC44cy0xOC4yLTE4LjktMzAuNi0xNC40bC01OS45IDIxLjktMjgtNzcuNGM1Ni4xLTMzLjYgNzguOC0xMDYuNCA0OC4xLTE2Ny40TDQ4Mi45IDEyQzQ3Ny40IDEuMSA0NjQuNy0zLjkgNDUzLjQgLjNMMzIwIDQ5LjFWMTI4aDB6bS0zNS43IDQ0LjRMMTUzLjkgMTI0LjZsMzYuMy03MS45TDMwMC42IDkzLjFsLTE2LjIgNzkuM3ptNzEuMyAwTDMzOS40IDkzLjEgNDQ5LjggNTIuN2wzNi4zIDcxLjlMMzU1LjcgMTcyLjR6XCJdfSxZZj1MNCxfZj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjbGlwYm9hcmRcIixpY29uOlszODQsNTEyLFsxMjgyMDNdLFwiZjMyOFwiLFwiTTE5MiAwYy00MS44IDAtNzcuNCAyNi43LTkwLjUgNjRINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMzNmMyNi41IDAgNDgtMjEuNSA0OC00OFYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjgyLjVDMjY5LjQgMjYuNyAyMzMuOCAwIDE5MiAwem0wIDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyem0tODAgNjRIMjcyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl19LCRmPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXNlLWNpcmNsZS1leGNsYW1hdGlvblwiLGljb246WzY0MCw1MTIsW10sXCJlNTBhXCIsXCJNMzIwLjcgMzUxLjdDMzI5IDI2Mi4xIDQwNC4zIDE5MiA0OTYgMTkyYzguOSAwIDE3LjYgLjcgMjYuMSAxLjlMMzA5LjUgN2MtNi01LTE0LTctMjEtN3MtMTUgMS0yMiA4TDEwIDIzMS41Yy03IDctMTAgMTUtMTAgMjRjMCAxOCAxNCAzMi4xIDMyIDMyLjFoMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDE5MmMxNy43IDAgMzItMTQuMyAzMi0zMlYzODMuN2MwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NGwuNyAwek00OTYgNTEyYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDR6bTAtNDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptMC0xOTJjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdfSxwND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLWFycm93LXVwXCIsaWNvbjpbMzg0LDUxMixbXCJmaWxlLXVwbG9hZFwiXSxcImY1NzRcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTIxNiA0MDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMzA1LjlsLTMxIDMxYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDcyLTcyYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTMxLTMxVjQwOHpcIl19LGNyPXA0LE49e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwid2lmaVwiLGljb246WzY0MCw1MTIsW1wid2lmaS0zXCIsXCJ3aWZpLXN0cm9uZ1wiXSxcImYxZWJcIixcIk01NC4yIDIwMi45QzEyMy4yIDEzNi43IDIxNi44IDk2IDMyMCA5NnMxOTYuOCA0MC43IDI2NS44IDEwNi45YzEyLjggMTIuMiAzMyAxMS44IDQ1LjItLjlzMTEuOC0zMy0uOS00NS4yQzU0OS43IDc5LjUgNDQwLjQgMzIgMzIwIDMyUzkwLjMgNzkuNSA5LjggMTU2LjdDLTIuOSAxNjktMy4zIDE4OS4yIDguOSAyMDJzMzIuNSAxMy4yIDQ1LjIgLjl6TTMyMCAyNTZjNTYuOCAwIDEwOC42IDIxLjEgMTQ4LjIgNTZjMTMuMyAxMS43IDMzLjUgMTAuNCA0NS4yLTIuOHMxMC40LTMzLjUtMi44LTQ1LjJDNDU5LjggMjE5LjIgMzkzIDE5MiAzMjAgMTkycy0xMzkuOCAyNy4yLTE5MC41IDcyYy0xMy4zIDExLjctMTQuNSAzMS45LTIuOCA0NS4yczMxLjkgMTQuNSA0NS4yIDIuOGMzOS41LTM0LjkgOTEuMy01NiAxNDguMi01NnptNjQgMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpcIl19LGFyPU4sc3I9TixkND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiYXRoXCIsaWNvbjpbNTEyLDUxMixbMTI4NzA1LFwiYmF0aHR1YlwiXSxcImYyY2RcIixcIk05NiA3Ny4zYzAtNy4zIDUuOS0xMy4zIDEzLjMtMTMuM2MzLjUgMCA2LjkgMS40IDkuNCAzLjlsMTQuOSAxNC45QzEzMCA5MS44IDEyOCAxMDEuNyAxMjggMTEyYzAgMTkuOSA3LjIgMzggMTkuMiA1MmMtNS4zIDkuMi00IDIxLjEgMy44IDI5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwTDI4OSA4OWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWMtNy45LTcuOS0xOS44LTkuMS0yOS0zLjhDMjQ2IDM5LjIgMjI3LjkgMzIgMjA4IDMyYy0xMC4zIDAtMjAuMiAyLTI5LjIgNS41TDE2My45IDIyLjZDMTQ5LjQgOC4xIDEyOS43IDAgMTA5LjMgMEM2Ni42IDAgMzIgMzQuNiAzMiA3Ny4zVjI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIOTZWNzcuM3pNMzIgMzUydjE2YzAgMjguNCAxMi40IDU0IDMyIDcxLjZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDY0SDM4NHYxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQzOS42YzE5LjYtMTcuNiAzMi00My4xIDMyLTcxLjZWMzUySDMyelwiXX0sZXI9ZDQsZnI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidW5kZXJsaW5lXCIsaWNvbjpbNDQ4LDUxMixbXSxcImYwY2RcIixcIk0xNiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxMjhWMjI0YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZWOTZIMzA0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NFYyMjRjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBzLTE2MC03MS42LTE2MC0xNjBWOTZINDhDMzAuMyA5NiAxNiA4MS43IDE2IDY0ek0wIDQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyelwiXX0sdTQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXNlci1wZW5cIixpY29uOls2NDAsNTEyLFtcInVzZXItZWRpdFwiXSxcImY0ZmZcIixcIk0yMjQgMjU2YzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4UzI5NC43IDAgMjI0IDBTOTYgNTcuMyA5NiAxMjhzNTcuMyAxMjggMTI4IDEyOHptLTQ1LjcgNDhDNzkuOCAzMDQgMCAzODMuOCAwIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJIMzIyLjhjLTMuMS04LjgtMy43LTE4LjQtMS40LTI3LjhsMTUtNjAuMWMyLjgtMTEuMyA4LjYtMjEuNSAxNi44LTI5LjdsNDAuMy00MC4zYy0zMi4xLTMxLTc1LjctNTAuMS0xMjMuOS01MC4xSDE3OC4zem00MzUuNS02OC4zYy0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMGwtMjkuNCAyOS40IDcxIDcxIDI5LjQtMjkuNGMxNS42LTE1LjYgMTUuNi00MC45IDAtNTYuNmwtMTQuNC0xNC40ek0zNzUuOSA0MTdjLTQuMSA0LjEtNyA5LjItOC40IDE0LjlsLTE1IDYwLjFjLTEuNCA1LjUgLjIgMTEuMiA0LjIgMTUuMnM5LjcgNS42IDE1LjIgNC4ybDYwLjEtMTVjNS42LTEuNCAxMC44LTQuMyAxNC45LTguNEw1NzYuMSAzNTguN2wtNzEtNzFMMzc1LjkgNDE3elwiXX0scnI9dTQsbHI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2lnbmF0dXJlXCIsaWNvbjpbNjQwLDUxMixbXSxcImY1YjdcIixcIk0xOTIgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2Ny44YzAgMjcuNy0yLjQgNTUuMy03LjEgODIuNWwtODQuNCAyNS4zYy00MC42IDEyLjItNjguNCA0OS42LTY4LjQgOTJ2NzEuOWMwIDQwIDMyLjUgNzIuNSA3Mi41IDcyLjVjMjYgMCA1MC0xMy45IDYyLjktMzYuNWwxMy45LTI0LjNjMjYuOC00NyA0Ni41LTk3LjcgNTguNC0xNTAuNWw5NC40LTI4LjMtMTIuNSAzNy41Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44czE1LjcgMTMuMyAyNiAxMy4zSDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0NjAuNGwxOC01My45YzMuOC0xMS4zIC45LTIzLjgtNy40LTMyLjRzLTIwLjctMTEuOC0zMi4yLTguNEwzMTYuNCAxOTguMWMyLjQtMjAuNyAzLjYtNDEuNCAzLjYtNjIuM1YxMjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZ2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxMjh6bS05LjIgMTc3bDQ5LTE0LjdjLTEwLjQgMzMuOC0yNC41IDY2LjQtNDIuMSA5Ny4ybC0xMy45IDI0LjNjLTEuNSAyLjYtNC4zIDQuMy03LjQgNC4zYy00LjcgMC04LjUtMy44LTguNS04LjVWMzM1LjZjMC0xNC4xIDkuMy0yNi42IDIyLjgtMzAuN3pNMjQgMzY4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDY0LjNjLS4yLTIuOC0uMy01LjYtLjMtOC41VjM2OEgyNHptNTkyIDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDMwNS45Yy02LjcgMTYuMy0xNC4yIDMyLjMtMjIuMyA0OEg2MTZ6XCJdfSxpcj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzdHJvb3B3YWZlbFwiLGljb246WzUxMiw1MTIsW10sXCJmNTUxXCIsXCJNMjU2IDQ5NmMxMzIuNSAwIDI0MC0xMDcuNSAyNDAtMjQwUzM4OC41IDE2IDI1NiAxNlMxNiAxMjMuNSAxNiAyNTZzMTA3LjUgMjQwIDI0MCAyNDB6TTIzNS4zIDc2LjdMMjU2IDk3LjRsMjAuNy0yMC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkwyNzguNiAxMjAgMzI0IDE2NS40IDM1Ny40IDEzMmwtMTYuNy0xNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMMzgwIDEwOS40bDguNy04LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42bC04LjcgOC43IDE2LjcgMTYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDM4MCAxNTQuNiAzNDYuNiAxODggMzkyIDIzMy40bDIwLjctMjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNDE0LjYgMjU2bDIwLjcgMjAuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDM5MiAyNzguNiAzNDYuNiAzMjQgMzgwIDM1Ny40bDE2LjctMTYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNDAyLjYgMzgwbDguNyA4LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtOC43LTguNy0xNi43IDE2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMMzU3LjQgMzgwIDMyNCAzNDYuNiAyNzguNiAzOTJsMjAuNyAyMC43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMMjU2IDQxNC42bC0yMC43IDIwLjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMMjMzLjQgMzkyIDE4OCAzNDYuNiAxNTQuNiAzODBsMTYuNyAxNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMMTMyIDQwMi42bC04LjcgOC43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDguNy04LjdMOTIuNyAzNjMuM2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDEzMiAzNTcuNCAxNjUuNCAzMjQgMTIwIDI3OC42IDk5LjMgMjk5LjNjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMOTcuNCAyNTYgNzYuNyAyMzUuM2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDEyMCAyMzMuNCAxNjUuNCAxODggMTMyIDE1NC42bC0xNi43IDE2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMMTA5LjQgMTMybC04LjctOC43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsOC43IDguNyAxNi43LTE2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDE1NC42IDEzMiAxODggMTY1LjQgMjMzLjQgMTIwIDIxMi43IDk5LjNjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMHpNMjEwLjYgMTg4TDI1NiAyMzMuNCAzMDEuNCAxODggMjU2IDE0Mi42IDIxMC42IDE4OHptNjggNjhMMzI0IDMwMS40IDM2OS40IDI1NiAzMjQgMjEwLjYgMjc4LjYgMjU2ek0yNTYgMjc4LjZMMjEwLjYgMzI0IDI1NiAzNjkuNCAzMDEuNCAzMjQgMjU2IDI3OC42ek0yMzMuNCAyNTZMMTg4IDIxMC42IDE0Mi42IDI1NiAxODggMzAxLjQgMjMzLjQgMjU2elwiXX0sb3I9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9sZFwiLGljb246WzM4NCw1MTIsW10sXCJmMDMyXCIsXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMkg4MCA5NiAyMjRjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhjMCAzMS4zLTExLjMgNjAuMS0zMCA4Mi4zYzM3LjEgMjIuNCA2MiA2My4xIDYyIDEwOS43YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4SDk2IDgwIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQ4VjI1NiA5NkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0ek0yMjQgMjI0YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0SDExMlYyMjRIMjI0ek0xMTIgMjg4VjQxNkgyNTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRIMjI0IDExMnpcIl19LG5yPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFuY2hvci1sb2NrXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0YWRcIixcIk0yNTYgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptODUuMSA4MEMzNjcgMTU4LjggMzg0IDEyOS40IDM4NCA5NmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDMzLjQgMTcgNjIuOCA0Mi45IDgwSDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzMlY0NDhIMjA4Yy01MyAwLTk2LTQzLTk2LTk2di02LjFsNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw5NyAyNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDcgMzE5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNy03VjM1MmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGg4MCA4MGM4IDAgMTUuOS0uNiAyMy42LTEuN2MtNC44LTktNy42LTE5LjMtNy42LTMwLjNWNDQ2LjdjLTUuMiAuOS0xMC41IDEuMy0xNiAxLjNIMzIwVjI0MGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNDEuMXpNNTI4IDI0MGMxNy43IDAgMzIgMTQuMyAzMiAzMnY0OEg0OTZWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJ2NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyVjI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl19LEhyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJ1aWxkaW5nLW5nb1wiLGljb246WzM4NCw1MTIsW10sXCJlNGQ3XCIsXCJNNDggMEMyMS41IDAgMCAyMS41IDAgNDhWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDk2VjQzMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djgwaDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6bTExMi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNMTY4IDY0aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE4NHY2NGgxNlYxNDRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnYyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNEgxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjgwYzAtOC44IDcuMi0xNiAxNi0xNnpNMzA0IDk2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2em0tNDggMTZjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHYzMmMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OFYxMTJ6TTYxLjMgNzEuMWwzNC43IDUyVjgwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2OTZjMCA3LjEtNC42IDEzLjMtMTEuNCAxNS4zcy0xNC0uNi0xNy45LTYuNEw2NCAxMzIuOFYxNzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWODBjMC03LjEgNC42LTEzLjMgMTEuNC0xNS4zczE0IC42IDE3LjkgNi40elwiXX0senI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFuYXQtc2lnblwiLGljb246WzM4NCw1MTIsW10sXCJlMWQ1XCIsXCJNMTkyIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMlY5OC43QzY5LjIgMTEzLjkgMCAxOTIuOSAwIDI4OFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODhjMC01OS42IDQwLjgtMTA5LjggOTYtMTI0VjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE2NGM1NS4yIDE0LjIgOTYgNjQuMyA5NiAxMjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjg4YzAtOTUuMS02OS4yLTE3NC4xLTE2MC0xODkuM1Y2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnpcIl19LFZyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm5vdC1lcXVhbFwiLGljb246WzQ0OCw1MTIsW10sXCJmNTNlXCIsXCJNMzY5LjggMzcuNGMxNC43IDkuOCAxOC43IDI5LjcgOC45IDQ0LjRMMzM3LjEgMTQ0SDQwMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyOTQuNWwtNjQgOTZINDAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE4Ny44bC02NS4yIDk3LjdjLTkuOCAxNC43LTI5LjcgMTguNy00NC40IDguOXMtMTguNy0yOS43LTguOS00NC40TDExMC45IDM2OEg0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgxNTMuNWw2NC05Nkg0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgyNjAuMmw2NS4yLTk3LjdjOS44LTE0LjcgMjkuNy0xOC43IDQ0LjQtOC45elwiXX0seDQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9yZGVyLXRvcC1sZWZ0XCIsaWNvbjpbNDQ4LDUxMixbXCJib3JkZXItc3R5bGVcIl0sXCJmODUzXCIsXCJNMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMzNmMwLTguOCA3LjItMTYgMTYtMTZsMzM2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgMzJDMzUuOCAzMiAwIDY3LjggMCAxMTJMMCA0NDh6bTE2MCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptMTkyIDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem0tOTYgMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6bTE5MiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNNDE2IDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJ6bTAtMTI4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdfSxtcj14NCxnND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtYXAtbG9jYXRpb24tZG90XCIsaWNvbjpbNTc2LDUxMixbXCJtYXAtbWFya2VkLWFsdFwiXSxcImY1YTBcIixcIk00MDggMTIwYzAgNTQuNi03My4xIDE1MS45LTEwNS4yIDE5MmMtNy43IDkuNi0yMiA5LjYtMjkuNiAwQzI0MS4xIDI3MS45IDE2OCAxNzQuNiAxNjggMTIwQzE2OCA1My43IDIyMS43IDAgMjg4IDBzMTIwIDUzLjcgMTIwIDEyMHptOCA4MC40YzMuNS02LjkgNi43LTEzLjggOS42LTIwLjZjLjUtMS4yIDEtMi41IDEuNS0zLjdsMTE2LTQ2LjRDNTU4LjkgMTIzLjQgNTc2IDEzNSA1NzYgMTUyVjQyMi44YzAgOS44LTYgMTguNi0xNS4xIDIyLjNMNDE2IDUwM1YyMDAuNHpNMTM3LjYgMTM4LjNjMi40IDE0LjEgNy4yIDI4LjMgMTIuOCA0MS41YzIuOSA2LjggNi4xIDEzLjcgOS42IDIwLjZWNDUxLjhMMzIuOSA1MDIuN0MxNy4xIDUwOSAwIDQ5Ny40IDAgNDgwLjRWMjA5LjZjMC05LjggNi0xOC42IDE1LjEtMjIuM2wxMjIuNi00OXpNMzI3LjggMzMyYzEzLjktMTcuNCAzNS43LTQ1LjcgNTYuMi03N1Y1MDQuM0wxOTIgNDQ5LjRWMjU1YzIwLjUgMzEuMyA0Mi4zIDU5LjYgNTYuMiA3N2MyMC41IDI1LjYgNTkuMSAyNS42IDc5LjYgMHpNMjg4IDE1MmMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwelwiXX0sdnI9ZzQsTXI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiamVkaVwiLGljb246WzU3Niw1MTIsW10sXCJmNjY5XCIsXCJNMjQ2IDMxNS43bC0yMS4yLTMxLjljLTIuMS0zLjItMS43LTcuNCAxLTEwLjFzNi45LTMuMSAxMC4xLTFsMjkuNSAxOS43YzIuMSAxLjQgNC45IDAgNS0yLjZMMjc5LjcgOGMuMS00LjUgMy44LTggOC4zLThzOC4xIDMuNSA4LjMgOGw5LjQgMjgxLjljLjEgMi41IDIuOSAzLjkgNSAyLjZsMjkuNS0xOS43YzMuMi0yLjEgNy40LTEuNyAxMC4xIDFzMy4xIDYuOSAxIDEwLjFMMzMwIDMxNS43Yy0xLjMgMS45LS4yIDQuNSAyIDQuOWwzNy42IDcuNWMzLjcgLjcgNi40IDQgNi40IDcuOHMtMi43IDcuMS02LjQgNy44TDMzMiAzNTEuNGMtMi4yIC40LTMuMyAzLTIgNC45bDIxLjIgMzEuOWMyLjEgMy4yIDEuNyA3LjQtMSAxMC4xcy02LjkgMy4xLTEwLjEgMWwtMjYuMy0xNy42Yy0yLjItMS40LTUuMSAuMi01IDIuOGwyLjEgNjEuNUMzNzAuNiA0MzUuMiA0MTYgMzgyLjkgNDE2IDMyMGMwLTM3LTE1LjctNzAuNC00MC44LTkzLjdjLTctNi41LTYuNS0xOC42IDEtMjQuNEM0MTAuMSAxNzUuNSA0MzIgMTM0LjMgNDMyIDg4YzAtMTYuOC0yLjktMzMtOC4yLTQ4Yy00LjYtMTMgMTAuMi0zMCAyMS40LTIyYzUzLjUgMzggOTIuNyA5NC44IDEwNy44IDE2MC43Yy41IDIuMS0uMiA0LjMtMS43IDUuOWwtMjguNCAyOC40Yy00IDQtMS4yIDEwLjkgNC41IDEwLjloMjZjMy40IDAgNi4yIDIuNiA2LjMgNmMuMSAzLjMgLjIgNi42IC4yIDEwYzAgMTcuNS0xLjcgMzQuNy00LjggNTEuM2MtLjIgMS4yLS45IDIuNC0xLjcgMy4zbC00Ni41IDQ2LjVjLTQgNC0xLjIgMTAuOSA0LjUgMTAuOUg1MjZjNC42IDAgNy43IDQuOCA1LjcgOUM0ODcuMiA0NTAuNSAzOTQuOCA1MTIgMjg4IDUxMlM4OC44IDQ1MC41IDQ0LjMgMzYxYy0yLjEtNC4yIDEtOSA1LjctOUg2NC41YzUuNyAwIDguNi02LjkgNC41LTEwLjlMMjIuNiAyOTQuNmMtLjktLjktMS41LTItMS43LTMuM0MxNy43IDI3NC43IDE2IDI1Ny41IDE2IDI0MGMwLTMuMyAuMS02LjcgLjItMTBjLjEtMy40IDIuOS02IDYuMy02aDI2YzUuNyAwIDguNi02LjkgNC41LTEwLjlMMjQuNiAxODQuNmMtMS41LTEuNS0yLjItMy44LTEuNy01LjlDMzguMSAxMTIuOCA3Ny4zIDU2IDEzMC44IDE4YzExLjMtOCAyNiA4LjkgMjEuNCAyMmMtNS4zIDE1LTguMiAzMS4yLTguMiA0OGMwIDQ2LjMgMjEuOSA4Ny41IDU1LjggMTEzLjljNy41IDUuOCA4IDE3LjkgMSAyNC40QzE3NS43IDI0OS42IDE2MCAyODMgMTYwIDMyMGMwIDYyLjkgNDUuNCAxMTUuMiAxMDUuMSAxMjZsMi4xLTYxLjVjLjEtMi42LTIuOC00LjItNS0yLjhsLTI2LjMgMTcuNmMtMy4yIDIuMS03LjQgMS43LTEwLjEtMXMtMy4xLTYuOS0xLTEwLjFMMjQ2IDM1Ni4zYzEuMy0xLjkgLjItNC41LTItNC45bC0zNy42LTcuNWMtMy43LS43LTYuNC00LTYuNC03LjhzMi43LTcuMSA2LjQtNy44bDM3LjYtNy41YzIuMi0uNCAzLjMtMyAyLTQuOXpcIl19LFM0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNxdWFyZS1wb2xsLXZlcnRpY2FsXCIsaWNvbjpbNDQ4LDUxMixbXCJwb2xsXCJdLFwiZjY4MVwiLFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHptNjQgMTkyYzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptNjQtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTYwek0zMjAgMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMydjMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl19LHRyPVM0LGhyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm11Zy1ob3RcIixpY29uOls1MTIsNTEyLFs5NzQ5XSxcImY3YjZcIixcIk04OCAwQzc0LjcgMCA2NCAxMC43IDY0IDI0YzAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxQzEyMC41IDExMi4zIDEyOCAxMTkuOSAxMjggMTM2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzExOS41IDQ3LjcgMTEyIDQwLjEgMTEyIDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0zMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQxNmMwIDUzIDQzIDk2IDk2IDk2SDI4OGM1MyAwIDk2LTQzIDk2LTk2aDE2YzYxLjkgMCAxMTItNTAuMSAxMTItMTEycy01MC4xLTExMi0xMTItMTEySDM1MiAzMnptMzUyIDY0aDE2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDM4NFYyNTZ6TTIyNCAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDM4LjkgMjMuNCA1OS40IDM5LjEgNzMuMWwxLjEgMUMyMzIuNSAxMTIuMyAyNDAgMTE5LjkgMjQwIDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzguOS0yMy40LTU5LjQtMzkuMS03My4xbC0xLjEtMUMyMzEuNSA0Ny43IDIyNCA0MC4xIDIyNCAyNHpcIl19LE40PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNhci1iYXR0ZXJ5XCIsaWNvbjpbNTEyLDUxMixbXCJiYXR0ZXJ5LWNhclwiXSxcImY1ZGZcIixcIk04MCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMmw5NiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyaDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMyaDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0VjM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0bDE2IDB6bTMwNCA5NmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnYzMkgzMjBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoMzJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyNTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzg0VjE5MnpNODAgMjQwYzAgOC44IDcuMiAxNiAxNiAxNmg5NmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg5NmMtOC44IDAtMTYgNy4yLTE2IDE2elwiXX0sQ3I9TjQsTHI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ2lmdFwiLGljb246WzUxMiw1MTIsWzEyNzg3M10sXCJmMDZiXCIsXCJNMTkwLjUgNjguOEwyMjUuMyAxMjhIMjI0IDE1MmMtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MGgyLjJjMTQuOSAwIDI4LjggNy45IDM2LjMgMjAuOHpNNjQgODhjMCAxNC40IDMuNSAyOCA5LjYgNDBIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJINDM4LjRjNi4xLTEyIDkuNi0yNS42IDkuNi00MGMwLTQ4LjYtMzkuNC04OC04OC04OGgtMi4yYy0zMS45IDAtNjEuNSAxNi45LTc3LjcgNDQuNEwyNTYgODUuNWwtMjQuMS00MUMyMTUuNyAxNi45IDE4Ni4xIDAgMTU0LjIgMEgxNTJDMTAzLjQgMCA2NCAzOS40IDY0IDg4em0zMzYgMGMwIDIyLjEtMTcuOSA0MC00MCA0MEgyODhoLTEuM2wzNC44LTU5LjJDMzI5LjEgNTUuOSAzNDIuOSA0OCAzNTcuOCA0OEgzNjBjMjIuMSAwIDQwIDE3LjkgNDAgNDB6TTMyIDI4OFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhIMjI0VjI4OEgzMnpNMjg4IDUxMkg0MzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjg4SDI4OFY1MTJ6XCJdfSxwcj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkaWNlLXR3b1wiLGljb246WzQ0OCw1MTIsWzk4NTddLFwiZjUyOFwiLFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6TTM1MiAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek0xMjggMTkyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdfSxkcj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGVzcy1xdWVlblwiLGljb246WzUxMiw1MTIsWzk4MTldLFwiZjQ0NVwiLFwiTTMxMiA1NmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NnMyNS4xIDU2IDU2IDU2czU2LTI1LjEgNTYtNTZ6TTY0IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNCAxNjkuNEw5LjIgMTg1LjhDMy41IDE4OS43IDAgMTk2LjIgMCAyMDMuMWMwIDMuMiAuNyA2LjQgMi4yIDkuM0wxMDQgNDE2SDQwOEw1MDkuOCAyMTIuNGMxLjQtMi45IDIuMi02LjEgMi4yLTkuM2MwLTYuOS0zLjUtMTMuNC05LjItMTcuM0w0NzggMTY5LjRjLTguMi01LjQtMTktNC40LTI2IDIuNmMtMTIuOSAxMi45LTMwLjkgMjEuOS00OCAxNS41Yy0xNy45LTYuNy0yOC4xLTIwLjEtMzIuOC0zNS44QzM2Ny41IDEzOSAzNTcuMyAxMjggMzQ0IDEyOEgzMjhjLTEzLjMgMC0yMy45IDExLjItMjkuNiAyMy4yQzI5Mi42IDE2My40IDI4MC42IDE3NiAyNTYgMTc2cy0zNi42LTEyLjYtNDIuNC0yNC44Yy01LjctMTItMTYuMy0yMy4yLTI5LjYtMjMuMkgxNjhjLTEzLjMgMC0yMy41IDExLTI3LjMgMjMuN2MtNC43IDE1LjYtMTQuOSAyOS4xLTMyLjggMzUuOGMtMTcgNi40LTM1LjEtMi43LTQ4LTE1LjVjLTYuOS02LjktMTcuOC04LTI1LjktMi42elwiXX0sdXI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ2xhc3Nlc1wiLGljb246WzU3Niw1MTIsW10sXCJmNTMwXCIsXCJNMTE4LjYgODBjLTExLjUgMC0yMS40IDcuOS0yNCAxOS4xTDU3IDI2MC4zYzIwLjUtNi4yIDQ4LjMtMTIuMyA3OC43LTEyLjNjMzIuMyAwIDYxLjggNi45IDgyLjggMTMuNWMxMC42IDMuMyAxOS4zIDYuNyAyNS40IDkuMmMzLjEgMS4zIDUuNSAyLjQgNy4zIDMuMmMuOSAuNCAxLjYgLjcgMi4xIDFsLjYgLjMgLjIgLjEgLjEgMCAwIDAgMCAwczAgMC02LjMgMTIuN2gwbDYuMy0xMi43YzUuOCAyLjkgMTAuNCA3LjMgMTMuNSAxMi43aDQwLjZjMy4xLTUuMyA3LjctOS44IDEzLjUtMTIuN2w2LjMgMTIuN2gwYy02LjMtMTIuNy02LjMtMTIuNy02LjMtMTIuN2wwIDAgMCAwIC4xIDAgLjItLjEgLjYtLjNjLjUtLjIgMS4yLS42IDIuMS0xYzEuOC0uOCA0LjItMS45IDcuMy0zLjJjNi4xLTIuNiAxNC44LTUuOSAyNS40LTkuMmMyMS02LjYgNTAuNC0xMy41IDgyLjgtMTMuNWMzMC40IDAgNTguMiA2LjEgNzguNyAxMi4zTDQ4MS40IDk5LjFjLTIuNi0xMS4yLTEyLjYtMTkuMS0yNC0xOS4xYy0zLjEgMC02LjIgLjYtOS4yIDEuOEw0MTYuOSA5NC4zYy0xMi4zIDQuOS0yNi4zLTEuMS0zMS4yLTEzLjRzMS4xLTI2LjMgMTMuNC0zMS4ybDMxLjMtMTIuNWM4LjYtMy40IDE3LjctNS4yIDI3LTUuMmMzMy44IDAgNjMuMSAyMy4zIDcwLjggNTYuMmw0My45IDE4OGMxLjcgNy4zIDIuOSAxNC43IDMuNSAyMi4xYy4zIDEuOSAuNSAzLjggLjUgNS43djYuN1YzNTJ2MTZjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJINDE5LjdjLTU5LjQgMC0xMDguNS00Ni40LTExMS44LTEwNS44TDMwNi42IDM1MkgyNjkuNGwtMS4yIDIyLjJDMjY0LjkgNDMzLjYgMjE1LjggNDgwIDE1Ni4zIDQ4MEgxMTJDNTAuMSA0ODAgMCA0MjkuOSAwIDM2OFYzNTIgMzEwLjcgMzA0YzAtMS45IC4yLTMuOCAuNS01LjdjLjYtNy40IDEuOC0xNC44IDMuNS0yMi4xbDQzLjktMTg4QzU1LjUgNTUuMyA4NC44IDMyIDExOC42IDMyYzkuMiAwIDE4LjQgMS44IDI3IDUuMmwzMS4zIDEyLjVjMTIuMyA0LjkgMTguMyAxOC45IDEzLjQgMzEuMnMtMTguOSAxOC4zLTMxLjIgMTMuNEwxMjcuOCA4MS44Yy0yLjktMS4yLTYtMS44LTkuMi0xLjh6TTY0IDMyNS40VjM2OGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg0NC4zYzI1LjUgMCA0Ni41LTE5LjkgNDcuOS00NS4zbDIuNS00NS42Yy0yLjMtLjgtNC45LTEuNy03LjUtMi41Yy0xNy4yLTUuNC0zOS45LTEwLjUtNjMuNi0xMC41Yy0yMy43IDAtNDYuMiA1LjEtNjMuMiAxMC41Yy0zLjEgMS01LjkgMS45LTguNSAyLjl6TTUxMiAzNjhWMzI1LjRjLTIuNi0uOS01LjUtMS45LTguNS0yLjljLTE3LTUuNC0zOS41LTEwLjUtNjMuMi0xMC41Yy0yMy43IDAtNDYuNCA1LjEtNjMuNiAxMC41Yy0yLjcgLjgtNS4yIDEuNy03LjUgMi41bDIuNSA0NS42YzEuNCAyNS40IDIyLjUgNDUuMyA0Ny45IDQ1LjNINDY0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4elwiXX0seHI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hlc3MtYm9hcmRcIixpY29uOls0NDgsNTEyLFtdLFwiZjQzY1wiLFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHptNjQgNjR2NjRoNjRWOTZoNjR2NjRoNjRWOTZoNjR2NjRIMzIwdjY0aDY0djY0SDMyMHY2NGg2NHY2NEgzMjBWMzUySDI1NnY2NEgxOTJWMzUySDEyOHY2NEg2NFYzNTJoNjRWMjg4SDY0VjIyNGg2NFYxNjBINjRWOTZoNjR6bTY0IDEyOGg2NFYxNjBIMTkydjY0em0wIDY0VjIyNEgxMjh2NjRoNjR6bTY0IDBIMTkydjY0aDY0VjI4OHptMCAwaDY0VjIyNEgyNTZ2NjR6XCJdfSxncj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJidWlsZGluZy1jaXJjbGUtY2hlY2tcIixpY29uOls2NDAsNTEyLFtdLFwiZTRkMlwiLFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg5NmMxNS4xIDAgMjguNS02LjkgMzcuMy0xNy44QzM0MC40IDQ2Mi4yIDMyMCA0MTcuNSAzMjAgMzY4YzAtNTQuNyAyNC45LTEwMy41IDY0LTEzNS44VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6bTExMi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNODAgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMnpNMjcyIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnpNNjQwIDM2OGMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NHMtMTQ0IDY0LjUtMTQ0IDE0NHM2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDR6bS03Ni43LTQzLjNjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcyIDcyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0ODAgMzg1LjRsNjAuNy02MC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwelwiXX0sU3I9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLWNoYWxrYm9hcmRcIixpY29uOls2NDAsNTEyLFtdLFwiZTUzZFwiLFwiTTE5MiA5NmMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4em0tOCAzODRWMzUyaDE2VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE5Mmg1NiA2NCAxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzODRWNjRINTc2VjI1NkgzODRWMjI0SDMyMHY0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzY4Yy0yNi41IDAtNDggMjEuNS00OCA0OHY4MEgyNDMuMSAxNzcuMWMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjlMMTIwIDI1Ni45VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyelwiXX0sdzQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFycy1zdHJva2UtcmlnaHRcIixpY29uOls2NDAsNTEyLFs5ODk3LFwibWFycy1zdHJva2UtaFwiXSxcImYyMmJcIixcIk0yMDggMzY4YzYxLjkgMCAxMTItNTAuMSAxMTItMTEycy01MC4xLTExMi0xMTItMTEycy0xMTIgNTAuMS0xMTIgMTEyczUwLjEgMTEyIDExMiAxMTJ6bTE3NC40LTg4QzM3MC43IDM2NS44IDI5Ny4xIDQzMiAyMDggNDMyYy05Ny4yIDAtMTc2LTc4LjgtMTc2LTE3NnM3OC44LTE3NiAxNzYtMTc2Yzg5LjEgMCAxNjIuNyA2Ni4yIDE3NC40IDE1Mkg0MTZWMTc2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2NTZoMzJWMTc2YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmw4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtODAgODBjLTYuOSA2LjktMTcuMiA4LjktMjYuMiA1LjJzLTE0LjgtMTIuNS0xNC44LTIyLjJWMjgwSDQ2NHY1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyODBIMzgyLjR6XCJdfSxOcj13NCxrND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW5kLWJhY2stZmlzdFwiLGljb246WzQ0OCw1MTIsW1wiaGFuZC1yb2NrXCJdLFwiZjI1NVwiLFwiTTE0NCAwQzExNy41IDAgOTYgMjEuNSA5NiA0OFY5NnYyOC41VjE3NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYxNDkuM2wtOSA3LjVDNDAuNCAxNjkgMzIgMTg3IDMyIDIwNlYyNDRjMCAzOCAxNi45IDc0IDQ2LjEgOTguM0wxMjggMzg0djk2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNzQuN2M0Ni45LTE5IDgwLTY1IDgwLTExOC43VjE3NiAxNjAgMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4Yy0xMi40IDAtMjMuNiA0LjctMzIuMSAxMi4zQzM1MCA4My41IDMyOS4zIDY0IDMwNCA2NGMtMTIuNCAwLTIzLjYgNC43LTMyLjEgMTIuM0MyNzAgNTEuNSAyNDkuMyAzMiAyMjQgMzJjLTEyLjQgMC0yMy42IDQuNy0zMi4xIDEyLjNDMTkwIDE5LjUgMTY5LjMgMCAxNDQgMHpcIl19LHdyPWs0LGI0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNxdWFyZS1jYXJldC11cFwiLGljb246WzQ0OCw1MTIsW1wiY2FyZXQtc3F1YXJlLXVwXCJdLFwiZjE1MVwiLFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNMjI0IDE2MGM2LjcgMCAxMyAyLjggMTcuNiA3LjdsMTA0IDExMmM2LjUgNyA4LjIgMTcuMiA0LjQgMjUuOXMtMTIuNSAxNC40LTIyIDE0LjRIMTIwYy05LjUgMC0xOC4yLTUuNy0yMi0xNC40cy0yLjEtMTguOSA0LjQtMjUuOWwxMDQtMTEyYzQuNS00LjkgMTAuOS03LjcgMTcuNi03Ljd6XCJdfSxrcj1iNCxicj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjbG91ZC1zaG93ZXJzLXdhdGVyXCIsaWNvbjpbNTc2LDUxMixbXSxcImU0ZTRcIixcIk0yMjQgMGMzOC42IDAgNzEuOSAyMi44IDg3LjIgNTUuN0MzMjUuNyA0MS4xIDM0NS44IDMyIDM2OCAzMmMzOC43IDAgNzEgMjcuNSA3OC40IDY0SDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NEgxMjhjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMC01MyA0My05NiA5Ni05NnpNMTQwLjYgMjkyLjNsLTQ4IDgwYy02LjggMTEuNC0yMS42IDE1LTMyLjkgOC4ycy0xNS4xLTIxLjYtOC4yLTMyLjlsNDgtODBjNi44LTExLjQgMjEuNi0xNS4xIDMyLjktOC4yczE1LjEgMjEuNiA4LjIgMzIuOXptMzI3LjgtMzIuOWMxMS40IDYuOCAxNSAyMS42IDguMiAzMi45bC00OCA4MGMtNi44IDExLjQtMjEuNiAxNS0zMi45IDguMnMtMTUtMjEuNi04LjItMzIuOWw0OC04MGM2LjgtMTEuNCAyMS42LTE1LjEgMzIuOS04LjJ6TTI1Mi42IDI5Mi4zbC00OCA4MGMtNi44IDExLjQtMjEuNiAxNS0zMi45IDguMnMtMTUuMS0yMS42LTguMi0zMi45bDQ4LTgwYzYuOC0xMS40IDIxLjYtMTUuMSAzMi45LTguMnMxNS4xIDIxLjYgOC4yIDMyLjl6bTEwMy44LTMyLjljMTEuNCA2LjggMTUgMjEuNiA4LjIgMzIuOWwtNDggODBjLTYuOCAxMS40LTIxLjYgMTUtMzIuOSA4LjJzLTE1LjEtMjEuNi04LjItMzIuOWw0OC04MGM2LjgtMTEuNCAyMS42LTE1LjEgMzIuOS04LjJ6TTMwNi41IDQyMS45QzMyOSA0MzcuNCAzNTYuNSA0NDggMzg0IDQ0OGMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA1MDEuNyA0MTcgNTEyIDM4NCA1MTJjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43bDAgMEMxMzYuNyA0MzcuMiAxNjUuMSA0NDggMTkyIDQ0OGMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHpcIl19LEE0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNoYXJ0LWJhclwiLGljb246WzUxMiw1MTIsW1wiYmFyLWNoYXJ0XCJdLFwiZjA4MFwiLFwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQwMGMwIDguOCA3LjIgMTYgMTYgMTZINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDgwYy00NC4yIDAtODAtMzUuOC04MC04MFY2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptOTYgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgNjRIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCA5Nkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXX0sQXI9QTQsQjQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZHMtYnViYmxlc1wiLGljb246WzUxMiw1MTIsW1wiaGFuZHMtd2FzaFwiXSxcImUwNWVcIixcIk0zODQgNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnptODAgMTYwYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6TTEyOCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4ek0zNTcuMSAxNTcuNWMtLjMgLjctLjcgMS41LTEuMSAyLjJsLTE3LjggMzAuOWMtMTEtMTIuNi0yNy40LTE5LjgtNDQuNC0xOS4xbDIwLjctMzUuOGM2LjYtMTEuNSAyMS4zLTE1LjQgMzIuOC04LjhjMTAuOCA2LjIgMTQuOSAxOS41IDkuOSAzMC42em0tMTczLjYgNDdDMTEyLjMgMjI3LjIgNjQgMjkzLjMgNjQgMzY4YzAgMS41IDAgMyAuMSA0LjVDMjQuMyAzNDYuOSAwIDMwMi44IDAgMjU1LjFWMTMxLjVjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDgxLjdMMTY0LjIgMTJjNi42LTExLjUgMjEuMy0xNS40IDMyLjgtOC44czE1LjQgMjEuMyA4LjggMzIuOGwtNjQgMTEwLjljLTIuMiAzLjgtLjkgOC43IDIuOSAxMC45czguNyAuOSAxMC45LTIuOWw4MC0xMzguNmM2LjYtMTEuNSAyMS4zLTE1LjQgMzIuOC04LjhzMTUuNCAyMS4zIDguOCAzMi44bC04MCAxMzguNmMtMi4yIDMuOC0uOSA4LjcgMi45IDEwLjlzOC43IC45IDEwLjktMi45TDI3NSA3NmM2LjYtMTEuNSAyMS4zLTE1LjQgMzIuOC04LjhzMTUuNCAyMS4zIDguOCAzMi44bC00NCA3Ni4yLTg5LjEgMjguM3pNNDQ4IDQ4My41YzAgMTIuNC05LjQgMjIuNi0yMS41IDIzLjljLS44IC4xLTEuNiAuMS0yLjUgLjFIMjIzLjMgMjE2Yy0yMi4xIDAtNDIuOS02LTYwLjctMTYuNWMzLTguNSA0LjctMTcuNiA0LjctMjdjMC0zOC43LTI3LjUtNzEtNjQtNzguNGMwLS42IDAtMS4xIDAtMS43YzAtMS4yLS4xLTIuNS0uMS0zLjdjMC02OCA0NC0xMjguMyAxMDguOS0xNDguOWw4My45LTI2LjdjMTIuNi00IDI2LjEgMyAzMC4xIDE1LjZzLTMgMjYuMS0xNS42IDMwLjFsLTUzLjggMTcuMUg0NTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMzI4Yy00LjQgMC04IDMuNi04IDhzMy42IDggOCA4SDQ4OGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgzMjhjLTQuNCAwLTggMy42LTggOHMzLjYgOCA4IDhINDU2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDMyOGMtNC40IDAtOCAzLjYtOCA4czMuNiA4IDggOGg5NmMxMy4zIDAgMjQgMTAuNyAyNCAyNHpcIl19LEJyPUI0LFRyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxlc3MtdGhhbi1lcXVhbFwiLGljb246WzQ0OCw1MTIsW10sXCJmNTM3XCIsXCJNMzk1LjkgOTMuN2MxNi40LTYuNiAyNC40LTI1LjIgMTcuOC00MS42cy0yNS4yLTI0LjQtNDEuNi0xNy44bC0zMjAgMTI4QzQwIDE2Ny4xIDMyIDE3OC45IDMyIDE5MnM4IDI0LjkgMjAuMSAyOS43bDMyMCAxMjhjMTYuNCA2LjYgMzUtMS40IDQxLjYtMTcuOHMtMS40LTM1LTE3LjgtNDEuNkwxNTAuMiAxOTIgMzk1LjkgOTMuN3pNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpcIl19LHlyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRyYWluXCIsaWNvbjpbNDQ4LDUxMixbMTI4NjQ2XSxcImYyMzhcIixcIk05NiAwQzQzIDAgMCA0MyAwIDk2VjM1MmMwIDQ4IDM1LjIgODcuNyA4MS4xIDk0LjlsLTQ2IDQ2QzI4LjEgNDk5LjkgMzMuMSA1MTIgNDMgNTEySDgyLjdjOC41IDAgMTYuNi0zLjQgMjIuNi05LjRMMTYwIDQ0OEgyODhsNTQuNiA1NC42YzYgNiAxNC4xIDkuNCAyMi42IDkuNEg0MDVjMTAgMCAxNS0xMi4xIDcuOS0xOS4xbC00Ni00NmM0Ni03LjEgODEuMS00Ni45IDgxLjEtOTQuOVY5NmMwLTUzLTQzLTk2LTk2LTk2SDk2ek02NCA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjk2ek0yMjQgMzg0Yy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6XCJdfSxUND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJleWUtbG93LXZpc2lvblwiLGljb246WzY0MCw1MTIsW1wibG93LXZpc2lvblwiXSxcImYyYThcIixcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDUyNS42IDM4Ni43YzM5LjYtNDAuNiA2Ni40LTg2LjEgNzkuOS0xMTguNGMzLjMtNy45IDMuMy0xNi43IDAtMjQuNmMtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMUM0NjUuNSA2OC44IDQwMC44IDMyIDMyMCAzMmMtNjguMiAwLTEyNSAyNi4zLTE2OS4zIDYwLjhMMzguOCA1LjF6TTIyMy4xIDE0OS41QzI0OC42IDEyNi4yIDI4Mi43IDExMiAzMjAgMTEyYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0YzAgMjQuOS02LjMgNDguMy0xNy40IDY4LjdMNDA4IDI5NC41YzUuMi0xMS44IDgtMjQuOCA4LTM4LjVjMC01My00My05Ni05Ni05NmMtMi44IDAtNS42IC4xLTguNCAuNGM1LjMgOS4zIDguNCAyMC4xIDguNCAzMS42YzAgMTAuMi0yLjQgMTkuOC02LjYgMjguM2wtOTAuMy03MC44em0yMjMuMSAyOThMODMuMSAxNjEuNWMtMTEgMTQuNC0yMC41IDI4LjctMjguNCA0Mi4ybDMzOSAyNjUuN2MxOC43LTUuNSAzNi4yLTEzIDUyLjYtMjEuOHpNMzQuNSAyNjguM2MxNC45IDM1LjcgNDYuMiA4Ny43IDkzIDEzMS4xQzE3NC41IDQ0My4yIDIzOS4yIDQ4MCAzMjAgNDgwYzMuMSAwIDYuMS0uMSA5LjItLjJMMzMuMSAyNDcuOGMtMS44IDYuOC0xLjMgMTQgMS40IDIwLjV6XCJdfSxQcj1UNCxGcj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjcm93XCIsaWNvbjpbNjQwLDUxMixbXSxcImY1MjBcIixcIk00NTYgMGMtNDguNiAwLTg4IDM5LjQtODggODh2MjkuMkwxMi41IDM5MC42Yy0xNCAxMC44LTE2LjYgMzAuOS01LjkgNDQuOXMzMC45IDE2LjYgNDQuOSA1LjlMMTI2LjEgMzg0SDI1OS4ybDQ2LjYgMTEzLjFjNSAxMi4zIDE5LjEgMTguMSAzMS4zIDEzLjFzMTguMS0xOS4xIDEzLjEtMzEuM0wzMTEuMSAzODRIMzUyYzEuMSAwIDIuMSAwIDMuMiAwbDQ2LjYgMTEzLjJjNSAxMi4zIDE5LjEgMTguMSAzMS4zIDEzLjFzMTguMS0xOS4xIDEzLjEtMzEuM2wtNDItMTAyQzQ4NC45IDM1NC4xIDU0NCAyODAgNTQ0IDE5MlYxMjh2LThsODAuNS0yMC4xYzguNi0yLjEgMTMuOC0xMC44IDExLjYtMTkuNEM2MjkgNTIgNjAzLjQgMzIgNTc0IDMySDUyMy45QzUwNy43IDEyLjUgNDgzLjMgMCA0NTYgMHptMCAxMTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpcIl19LERyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNhaWxib2F0XCIsaWNvbjpbNTc2LDUxMixbXSxcImU0NDVcIixcIk0yNTYgMTZjMC03IDQuNS0xMy4yIDExLjItMTUuM3MxMy45IC40IDE3LjkgNi4xbDIyNCAzMjBjMy40IDQuOSAzLjggMTEuMyAxLjEgMTYuNnMtOC4yIDguNi0xNC4yIDguNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYxNnpNMjEyLjEgOTYuNWM3IDEuOSAxMS45IDguMiAxMS45IDE1LjVWMzM2YzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtNS43IDAtMTEtMy0xMy44LThzLTIuOS0xMS0uMS0xNmwxMjgtMjI0YzMuNi02LjMgMTEtOS40IDE4LTcuNXpNNS43IDQwNC4zQzIuOCAzOTQuMSAxMC41IDM4NCAyMS4xIDM4NEg1NTQuOWMxMC42IDAgMTguMyAxMC4xIDE1LjQgMjAuM2wtNCAxNC4zQzU1MC43IDQ3My45IDUwMC40IDUxMiA0NDMgNTEySDEzM0M3NS42IDUxMiAyNS4zIDQ3My45IDkuNyA0MTguN2wtNC0xNC4zelwiXX0sUnI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwid2luZG93LXJlc3RvcmVcIixpY29uOls1MTIsNTEyLFtdLFwiZjJkMlwiLFwiTTQzMiA2NEgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNlY5NkgxMjhWODBjMC00NC4yIDM1LjgtODAgODAtODBINDMyYzQ0LjIgMCA4MCAzNS44IDgwIDgwVjMwNGMwIDQ0LjItMzUuOCA4MC04MCA4MEg0MTZWMzIwaDE2YzguOCAwIDE2LTcuMiAxNi0xNlY4MGMwLTguOC03LjItMTYtMTYtMTZ6TTAgMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0SDMyMGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE5MnptNjQgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJIMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpcIl19LHk0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNxdWFyZS1wbHVzXCIsaWNvbjpbNDQ4LDUxMixbNjE4NDYsXCJwbHVzLXNxdWFyZVwiXSxcImYwZmVcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIwMCAzNDRWMjgwSDEzNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg2NFYxNjhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY2NGg2NGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyNDh2NjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6XCJdfSxVcj15NCxxcj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0b3JpaS1nYXRlXCIsaWNvbjpbNTEyLDUxMixbOTk2MV0sXCJmNmExXCIsXCJNMCA4MGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg2NHY2NGg2NFYxMjhoOTZ2NjRoNjRWMTI4aDk2djY0aDY0VjEyOGgxNmMyNi41IDAgNDgtMjEuNSA0OC00OFYwTDQ0MC42IDIzLjhDNDI0LjMgMjkuMiA0MDcuMiAzMiAzOTAgMzJIMTIyYy0xNy4yIDAtMzQuMy0yLjgtNTAuNi04LjJMMCAwVjgwek02NCAyODhWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjg4SDM4NFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODhoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjR6XCJdfSxHcj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmcm9nXCIsaWNvbjpbNTc2LDUxMixbXSxcImY1MmVcIixcIk0zNjggMzJjNDEuNyAwIDc1LjkgMzEuOCA3OS43IDcyLjVsODUuNiAyNi4zYzI1LjQgNy44IDQyLjggMzEuMyA0Mi44IDU3LjljMCAyMS44LTExLjcgNDEuOS0zMC43IDUyLjdMNDAwLjggMzIzLjUgNDkzLjMgNDE2SDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0ODBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40TDM0Ni45IDM2MC4yYzExLjctMzYgMy4yLTc3LjEtMjUuNC0xMDUuN2MtNDAuNi00MC42LTEwNi4zLTQwLjYtMTQ2LjktLjFMMTAxIDMyNC40Yy02LjQgNi4xLTYuNyAxNi4yLS42IDIyLjZzMTYuMiA2LjYgMjIuNiAuNmw3My44LTcwLjIgLjEtLjEgLjEtLjFjMy41LTMuNSA3LjMtNi42IDExLjMtOS4yYzI3LjktMTguNSA2NS45LTE1LjQgOTAuNSA5LjJjMjQuNyAyNC43IDI3LjcgNjIuOSA5IDkwLjljLTIuNiAzLjgtNS42IDcuNS05IDEwLjlMMjYxLjggNDE2SDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRDMCAyNDkuNiAxMjcgMTEyLjkgMjg5LjMgOTcuNUMyOTYuMiA2MC4yIDMyOC44IDMyIDM2OCAzMnptMCAxMDRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHpcIl19LFdyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJ1Y2tldFwiLGljb246WzQ0OCw1MTIsW10sXCJlNGNmXCIsXCJNOTYgMTUydjhINDh2LThDNDggNjguMSAxMTYuMSAwIDIwMCAwaDQ4YzgzLjkgMCAxNTIgNjguMSAxNTIgMTUydjhIMzUydi04YzAtNTcuNC00Ni42LTEwNC0xMDQtMTA0SDIwMEMxNDIuNiA0OCA5NiA5NC42IDk2IDE1MnpNMCAyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyaC01LjFMMzg4LjUgNDY5Yy0yLjYgMjQuNC0yMy4yIDQzLTQ3LjcgNDNIMTA3LjJjLTI0LjYgMC00NS4yLTE4LjUtNDcuNy00M0wzNy4xIDI1NkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6XCJdfSxFcj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJpbWFnZVwiLGljb246WzUxMiw1MTIsW10sXCJmMDNlXCIsXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkg0NDhjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NnpNMzIzLjggMjAyLjVjLTQuNS02LjYtMTEuOS0xMC41LTE5LjgtMTAuNXMtMTUuNCAzLjktMTkuOCAxMC41bC04NyAxMjcuNkwxNzAuNyAyOTdjLTQuNi01LjctMTEuNS05LTE4LjctOXMtMTQuMiAzLjMtMTguNyA5bC02NCA4MGMtNS44IDcuMi02LjkgMTcuMS0yLjkgMjUuNHMxMi40IDEzLjYgMjEuNiAxMy42aDk2IDMySDQyNGM4LjkgMCAxNy4xLTQuOSAyMS4yLTEyLjhzMy42LTE3LjQtMS40LTI0LjdsLTEyMC0xNzZ6TTExMiAxOTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHpcIl19LElyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1pY3JvcGhvbmVcIixpY29uOlszODQsNTEyLFtdLFwiZjEzMFwiLFwiTTE5MiAwQzEzOSAwIDk2IDQzIDk2IDk2VjI1NmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2Vjk2YzAtNTMtNDMtOTYtOTYtOTZ6TTY0IDIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY0MGMwIDg5LjEgNjYuMiAxNjIuNyAxNTIgMTc0LjRWNDY0SDEyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg3MiA3MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyMTZWNDMwLjRjODUuOC0xMS43IDE1Mi04NS4zIDE1Mi0xNzQuNFYyMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NDBjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhWMjE2elwiXX0sT3I9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY293XCIsaWNvbjpbNjQwLDUxMixbMTI4MDA0XSxcImY2YzhcIixcIk05NiAyMjR2MzJWNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjMyNy44YzkuOSA2LjYgMjAuNiAxMiAzMiAxNi4xVjM2OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjM1MS4xYzUuMyAuNiAxMC42IC45IDE2IC45czEwLjctLjMgMTYtLjlWMzY4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMzQzLjhjMTEuNC00IDIyLjEtOS40IDMyLTE2LjFWNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjI1NmwzMiAzMnY0OS41YzAgOS41IDIuOCAxOC43IDguMSAyNi42TDUzMCA0MjdjOC44IDEzLjEgMjMuNSAyMSAzOS4zIDIxYzIyLjUgMCA0MS45LTE1LjkgNDYuMy0zOGwyMC4zLTEwMS42YzIuNi0xMy0uMy0yNi41LTgtMzcuM2wtMy45LTUuNVYxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2MTQuNGwtNTIuOS03NC4xQzQ5NiA4Ni41IDQ1Mi40IDY0IDQwNS45IDY0SDI3MiAyNTYgMTkyIDE0NEM3Ny43IDY0IDI0IDExNy43IDI0IDE4NHY1NEM5LjQgMjQ5LjggMCAyNjcuOCAwIDI4OHYxNy42YzAgOCA2LjQgMTQuNCAxNC40IDE0LjRDNDYuMiAzMjAgNzIgMjk0LjIgNzIgMjYyLjRWMjU2IDIyNCAxODRjMC0yNC4zIDEyLjEtNDUuOCAzMC41LTU4LjlDOTguMyAxMzUuOSA5NiAxNDcuNyA5NiAxNjB2NjR6TTU5MiAzMzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpNMTY2LjYgMTY2LjZjLTQuMi00LjItNi42LTEwLTYuNi0xNmMwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNkgzNjEuNGMxMi41IDAgMjIuNiAxMC4xIDIyLjYgMjIuNmMwIDYtMi40IDExLjgtNi42IDE2bC0yMy40IDIzLjRDMzMyLjIgMjExLjggMzAyLjcgMjI0IDI3MiAyMjRzLTYwLjItMTIuMi04MS45LTMzLjlsLTIzLjQtMjMuNHpcIl19LFhyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNhcmV0LXVwXCIsaWNvbjpbMzIwLDUxMixbXSxcImYwZDhcIixcIk0xODIuNiAxMzcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhIMjg4YzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTEyOC0xMjh6XCJdfSxRcj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzY3Jld2RyaXZlclwiLGljb246WzUxMiw1MTIsWzEyOTY5MV0sXCJmNTRhXCIsXCJNNDY1IDdjLTguNS04LjUtMjItOS40LTMxLjYtMi4xbC0xMDQgODBjLTUuOSA0LjUtOS40IDExLjYtOS40IDE5djU0LjFsLTg1LjYgODUuNmM2LjcgNC4yIDEzIDkuMyAxOC44IDE1LjFzMTAuOSAxMi4yIDE1LjEgMTguOEwzNTMuOSAxOTJINDA4YzcuNSAwIDE0LjUtMy41IDE5LTkuNGw4MC0xMDRjNy40LTkuNiA2LjUtMjMuMS0yLjEtMzEuNkw0NjUgN3pNMTIxLjQgMjgxLjRsLTExMiAxMTJjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDExMi0xMTJjMzAuMi0zMC4yIDMwLjItNzkuMSAwLTEwOS4zcy03OS4xLTMwLjItMTA5LjMgMHpcIl19LEtyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZvbGRlci1jbG9zZWRcIixpY29uOls1MTIsNTEyLFtdLFwiZTE4NVwiLFwiTTQ0OCA0ODBINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE5Mkg1MTJWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0em02NC0zMjBIMFY5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkgxODEuNWMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN2wyNi41IDI2LjVjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0g0NDhjMzUuMyAwIDY0IDI4LjcgNjQgNjR6XCJdfSxqcj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob3VzZS10c3VuYW1pXCIsaWNvbjpbNTc2LDUxMixbXSxcImU1MTVcIixcIk04MC44IDEzNi41QzEwNC45IDkzLjggMTUyLjYgNjQgMjA5IDY0YzE2LjkgMCAzMy4xIDIuNyA0OC4yIDcuN2MxNi44IDUuNSAzNC45LTMuNiA0MC40LTIwLjRzLTMuNi0zNC45LTIwLjQtNDAuNEMyNTUuOCAzLjggMjMyLjggMCAyMDkgMEM5NS4yIDAgMCA4OCAwIDIwMGMwIDkxLjYgNTMuNSAxNzIuMSAxNDIuMiAxOTQuMWMxMy40IDMuOCAyNy41IDUuOSA0Mi4yIDUuOWMuNyAwIDEuNCAwIDIuMS0uMWMxLjggMCAzLjcgLjEgNS41IC4xbDAgMGMzMS45IDAgNjAuNi05LjkgODAuNC0xOC45YzUuOC0yLjcgMTEuMS01LjMgMTUuNi03LjdjNC41IDIuNCA5LjcgNS4xIDE1LjYgNy43YzE5LjggOSA0OC42IDE4LjkgODAuNCAxOC45YzMzIDAgNjUuNS0xMC4zIDk0LjUtMjUuOGMxMy40IDguNCAzMy43IDE5LjMgNTguMiAyNWMxNy4yIDQgMzQuNC02LjcgMzguNC0yMy45cy02LjctMzQuNC0yMy45LTM4LjRjLTE4LjEtNC4yLTM2LjItMTMuMy01MC42LTI1LjJjLTExLjEtOS41LTI3LjMtMTAuMS0zOS4yLTEuN2wwIDBDNDM5LjQgMzI1LjIgNDEwLjkgMzM2IDM4NCAzMzZjLTI3LjUgMC01NS0xMC42LTc3LjUtMjYuMWMtMTEuMS03LjktMjUuOS03LjktMzcgMGMtMjIuNCAxNS41LTQ5LjkgMjYuMS03Ny40IDI2LjFjMCAwLS4xIDAtLjEgMGMtMTIuNCAwLTI0LTEuNS0zNC45LTQuM0MxMjEuNiAzMjAuMiA5NiAyODcgOTYgMjQ4YzAtNDguNSAzOS41LTg4IDg4LjQtODhjMTMuNSAwIDI2LjEgMyAzNy41IDguM2MxNiA3LjUgMzUuMSAuNiA0Mi41LTE1LjVzLjYtMzUuMS0xNS41LTQyLjVDMjI5LjMgMTAxLjEgMjA3LjQgOTYgMTg0LjQgOTZjLTQwIDAtNzYuNCAxNS40LTEwMy42IDQwLjV6bTI1Mi0xOC4xYy04LjEgNi0xMi44IDE1LjUtMTIuOCAyNS42VjI2NWMxLjYgMSAzLjMgMiA0LjggMy4xYzE4LjQgMTIuNyAzOS42IDIwLjMgNTkuMiAyMC4zYzE5IDAgNDEuMi03LjkgNTkuMi0yMC4zYzIzLjgtMTYuNyA1NS44LTE1LjMgNzguMSAzLjRjMTAuNiA4LjggMjQuMiAxNS42IDM3LjMgMTguNmM1LjggMS40IDExLjIgMy40IDE2LjIgNi4yYy43LTIuNyAxLjEtNS41IDEuMS04LjRsLS40LTE0NGMwLTEwLTQuNy0xOS40LTEyLjctMjUuNWwtOTUuNS03MmMtMTEuNC04LjYtMjcuMS04LjYtMzguNSAwbC05NiA3MnpNMzg0IDQ0OGMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwQzI0NyA0MzcuNCAyMTkuNSA0NDggMTkyIDQ0OGMtMjYuOSAwLTU1LjMtMTAuOC03Ny40LTI2LjFsMCAwYy0xMS45LTguNS0yOC4xLTcuOC0zOS4yIDEuN2MtMTQuNCAxMS45LTMyLjUgMjEtNTAuNiAyNS4yYy0xNy4yIDQtMjcuOSAyMS4yLTIzLjkgMzguNHMyMS4yIDI3LjkgMzguNCAyMy45YzI0LjUtNS43IDQ0LjktMTYuNSA1OC4yLTI1QzEyNi41IDUwMS43IDE1OSA1MTIgMTkyIDUxMmMzMS45IDAgNjAuNi05LjkgODAuNC0xOC45YzUuOC0yLjcgMTEuMS01LjMgMTUuNi03LjdjNC41IDIuNCA5LjcgNS4xIDE1LjYgNy43YzE5LjggOSA0OC42IDE4LjkgODAuNCAxOC45YzMzIDAgNjUuNS0xMC4zIDk0LjUtMjUuOGMxMy40IDguNCAzMy43IDE5LjMgNTguMiAyNWMxNy4yIDQgMzQuNC02LjcgMzguNC0yMy45cy02LjctMzQuNC0yMy45LTM4LjRjLTE4LjEtNC4yLTM2LjItMTMuMy01MC42LTI1LjJjLTExLjEtOS40LTI3LjMtMTAuMS0zOS4yLTEuN2wwIDBDNDM5LjQgNDM3LjIgNDEwLjkgNDQ4IDM4NCA0NDh6XCJdfSxKcj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzcXVhcmUtbmZpXCIsaWNvbjpbNDQ4LDUxMixbXSxcImU1NzZcIixcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDM4NGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2em03NS43IDY0LjZDNjguOCAxNjIuNSA2NCAxNjguOCA2NCAxNzZWMzM2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjMzLjhsNjYuMyAxMTAuNWMzLjcgNi4yIDExLjEgOS4xIDE4IDcuMnMxMS43LTguMiAxMS43LTE1LjRWMTc2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjI3OC4yTDkzLjcgMTY3LjhjLTMuNy02LjItMTEuMS05LjEtMTgtNy4yek0yMjQgMTc2djY0IDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjU2aDQ4YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDI1NlYxOTJoNDhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMjQwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2MCAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjMzNmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE3NnpcIl19LFpyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93LXVwLWZyb20tZ3JvdW5kLXdhdGVyXCIsaWNvbjpbNTc2LDUxMixbXSxcImU0YjVcIixcIk0yODggMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjEwOS4zbDI1LjQgMjUuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC04MC04MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTgwIDgwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDI1NiAxMDkuM1YzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJ6bS0xOC41IDY5LjlDMjQ3IDQzNy40IDIxOS41IDQ0OCAxOTIgNDQ4Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWwwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgNTAxLjcgMTU5IDUxMiAxOTIgNTEyYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjYgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjQtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0MzkuNCA0MzcuMiA0MTAuOSA0NDggMzg0IDQ0OGMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xYy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwek0xOTIgMTkySDQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OFY0MjVjNS4zLTMuMSAxMS4yLTUuNCAxNy41LTYuOWMxMy4xLTMuMSAyNi43LTkuOCAzNy4zLTE4LjZjMjIuMi0xOC43IDU0LjMtMjAuMSA3OC4xLTMuNGMxOCAxMi40IDQwLjEgMjAuMyA1OS4xIDIwLjNWMTkyem0zODQgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzg0VjQxNi41aDBjMTkgMCA0MS4yLTcuOSA1OS4yLTIwLjNjMjMuOC0xNi43IDU1LjgtMTUuMyA3OC4xIDMuNGMxMC42IDguOCAyNC4yIDE1LjYgMzcuMyAxOC42YzYuMyAxLjUgMTIuMSAzLjggMTcuNSA2LjlWMjQwelwiXX0sUDQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFydGluaS1nbGFzc1wiLGljb246WzUxMiw1MTIsWzEyNzg2NCxcImdsYXNzLW1hcnRpbmktYWx0XCJdLFwiZjU3YlwiLFwiTTMyIDBDMTkuMSAwIDcuNCA3LjggMi40IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45TDIyNCAyNjkuM1Y0NDhIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDk2IDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI4OFYyNjkuM0w1MDIuNiA1NC42YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDAgNDgwIDBIMzJ6TTE3My4zIDEyOGwtNjQtNjRINDAyLjdsLTY0IDY0SDE3My4zelwiXX0sWXI9UDQsbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyb3RhdGUtbGVmdFwiLGljb246WzUxMiw1MTIsW1wicm90YXRlLWJhY2tcIixcInJvdGF0ZS1iYWNrd2FyZFwiLFwidW5kby1hbHRcIl0sXCJmMmVhXCIsXCJNNDguNSAyMjRINDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjcyYzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMkw5OC42IDk2LjZjODcuNi04Ni41IDIyOC43LTg2LjIgMzE1LjggMWM4Ny41IDg3LjUgODcuNSAyMjkuMyAwIDMxNi44cy0yMjkuMyA4Ny41LTMxNi44IDBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBjNjIuNSA2Mi41IDE2My44IDYyLjUgMjI2LjMgMHM2Mi41LTE2My44IDAtMjI2LjNjLTYyLjItNjIuMi0xNjIuNy02Mi41LTIyNS4zLTFMMTg1IDE4M2M2LjkgNi45IDguOSAxNy4yIDUuMiAyNi4ycy0xMi41IDE0LjgtMjIuMiAxNC44SDQ4LjV6XCJdfSxfcj1uLCRyPW4sY2w9bixGND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0YWJsZS1jb2x1bW5zXCIsaWNvbjpbNTEyLDUxMixbXCJjb2x1bW5zXCJdLFwiZjBkYlwiLFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6bTY0IDY0VjQxNkgyMjRWMTYwSDY0em0zODQgMEgyODhWNDE2SDQ0OFYxNjB6XCJdfSxhbD1GNCxzbD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsZW1vblwiLGljb246WzQ0OCw1MTIsWzEyNzgxOV0sXCJmMDk0XCIsXCJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0Yy02LjYgMC0xMyAxLTE5IDIuOWMtMjIuNSA3LTQ4LjEgMTQuOS03MSA5Yy03NS4yLTE5LjEtMTU2LjQgMTEtMjEzLjcgNjguM1MtNy4yIDI1MC44IDExLjkgMzI2YzUuOCAyMi45LTIgNDguNC05IDcxQzEgNDAzIDAgNDA5LjQgMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRjNi42IDAgMTMtMSAxOS4xLTIuOWMyMi41LTcgNDguMS0xNC45IDcxLTljNzUuMiAxOS4xIDE1Ni40LTExIDIxMy43LTY4LjNzODcuNS0xMzguNSA2OC4zLTIxMy43Yy01LjgtMjIuOSAyLTQ4LjQgOS03MWMxLjktNiAyLjktMTIuNCAyLjktMTkuMXpNMjEyLjUgMTI3LjRjLTU0LjYgMTYtMTAxLjEgNjIuNS0xMTcuMSAxMTcuMUM5Mi45IDI1MyA4NCAyNTcuOCA3NS41IDI1NS40UzYyLjIgMjQ0IDY0LjYgMjM1LjVjMTkuMS02NS4xIDczLjctMTE5LjggMTM4LjktMTM4LjljOC41LTIuNSAxNy40IDIuNCAxOS45IDEwLjlzLTIuNCAxNy40LTEwLjkgMTkuOXpcIl19LGVsPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhlYWQtc2lkZS1tYXNrXCIsaWNvbjpbNTEyLDUxMixbXSxcImUwNjNcIixcIk0wIDIyNC4yYzAtMjIuMiAzLjItNDMuNiA5LjItNjMuOWwyMjcgMTY1LjFDMjI4LjUgMzM3LjggMjI0IDM1Mi40IDIyNCAzNjhWNTEySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MDcuM2MwLTE2LjctNi45LTMyLjUtMTcuMS00NS44QzE2LjYgMzIyLjQgMCAyNzQuMSAwIDIyNC4yem0yNTguNiA3Ny45TDIxIDEyOS4zQzU2LjcgNTMgMTM0LjIgMCAyMjQgMGgzMmM5NS4yIDAgMTc0LjIgNjkuMyAxODkuNCAxNjAuMWMyLjIgMTMgNi43IDI1LjcgMTUgMzYuMWw0MiA1Mi42YzYuMiA3LjggOS42IDE3LjQgOS42IDI3LjRjMCA0LjEtLjYgOC4xLTEuNiAxMS45SDMwNGMtMTYuOSAwLTMyLjUgNS4yLTQ1LjQgMTQuMXpNMzUyIDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyek0yNTYgNTEyVjM2OGMwLTI2LjUgMjEuNS00OCA0OC00OEg1MTJsLTE2IDQ4SDMzNmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg0ODUuM2wtMTAuNyAzMkgzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZINDY0bC0xLjQgNC4yYy04LjcgMjYuMS0zMy4yIDQzLjgtNjAuNyA0My44SDI1NnpcIl19LGZsPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhbmRzaGFrZVwiLGljb246WzY0MCw1MTIsW10sXCJmMmI1XCIsXCJNMzIzLjQgODUuMmwtOTYuOCA3OC40Yy0xNi4xIDEzLTE5LjIgMzYuNC03IDUzLjFjMTIuOSAxNy44IDM4IDIxLjMgNTUuMyA3LjhsOTkuMy03Ny4yYzctNS40IDE3LTQuMiAyMi41IDIuOHM0LjIgMTctMi44IDIyLjVsLTIwLjkgMTYuMkw1MTIgMzE2LjhWMTI4aC0uN2wtMy45LTIuNUw0MzQuOCA3OWMtMTUuMy05LjgtMzMuMi0xNS01MS40LTE1Yy0yMS44IDAtNDMgNy41LTYwIDIxLjJ6bTIyLjggMTI0LjRsLTUxLjcgNDAuMkMyNjMgMjc0LjQgMjE3LjMgMjY4IDE5My43IDIzNS42Yy0yMi4yLTMwLjUtMTYuNi03My4xIDEyLjctOTYuOGw4My4yLTY3LjNjLTExLjYtNC45LTI0LjEtNy40LTM2LjgtNy40QzIzNCA2NCAyMTUuNyA2OS42IDIwMCA4MGwtNzIgNDhWMzUyaDI4LjJsOTEuNCA4My40YzE5LjYgMTcuOSA0OS45IDE2LjUgNjcuOC0zLjFjNS41LTYuMSA5LjItMTMuMiAxMS4xLTIwLjZsMTcgMTUuNmMxOS41IDE3LjkgNDkuOSAxNi42IDY3LjgtMi45YzQuNS00LjkgNy44LTEwLjYgOS45LTE2LjVjMTkuNCAxMyA0NS44IDEwLjMgNjIuMS03LjVjMTcuOS0xOS41IDE2LjYtNDkuOS0yLjktNjcuOGwtMTM0LjItMTIzek05NiAxMjhIMFYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJINjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTI4ek00OCAzNTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6TTU0NCAxMjhWMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjEyOEg1NDR6bTY0IDIwOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXX0scmw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ2VtXCIsaWNvbjpbNTEyLDUxMixbMTI4MTQyXSxcImYzYTVcIixcIk0xMTYuNyAzMy44YzQuNS02LjEgMTEuNy05LjggMTkuMy05LjhIMzc2YzcuNiAwIDE0LjggMy42IDE5LjMgOS44bDExMiAxNTJjNi44IDkuMiA2LjEgMjEuOS0xLjUgMzAuNGwtMjMyIDI1NmMtNC42IDUtMTEgNy45LTE3LjggNy45cy0xMy4yLTIuOS0xNy44LTcuOWwtMjMyLTI1NmMtNy43LTguNS04LjMtMjEuMi0xLjUtMzAuNGwxMTItMTUyem0zOC41IDM5LjhjLTMuMyAyLjUtNC4yIDctMi4xIDEwLjVsNTcuNCA5NS42TDYzLjMgMTkyYy00LjEgLjMtNy4zIDMuOC03LjMgOHMzLjIgNy42IDcuMyA4bDE5MiAxNmMuNCAwIC45IDAgMS4zIDBsMTkyLTE2YzQuMS0uMyA3LjMtMy44IDcuMy04cy0zLjItNy42LTcuMy04TDMwMS41IDE3OS44bDU3LjQtOTUuNmMyLjEtMy41IDEuMi04LjEtMi4xLTEwLjVzLTcuOS0yLTEwLjcgMUwyNTYgMTcyLjIgMTY1LjkgNzQuNmMtMi44LTMtNy40LTMuNC0xMC43LTF6XCJdfSxEND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkb2xseVwiLGljb246WzY0MCw1MTIsW1wiZG9sbHktYm94XCJdLFwiZjQ3MlwiLFwiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBoNzIuOWMyNy41IDAgNTIgMTcuNiA2MC43IDQzLjhMMjg5LjcgMzIwYzMwLjEgLjUgNTYuOCAxNC45IDc0IDM3bDIwMi4xLTY3LjRjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ycy0zLjUgMzQuOS0yMC4yIDQwLjVMMzg0IDQxNy43Yy0uOSA1Mi4yLTQzLjUgOTQuMy05NiA5NC4zYy01MyAwLTk2LTQzLTk2LTk2YzAtMzAuOCAxNC41LTU4LjIgMzctNzUuOEwxMzYuOSA2NEg2NEM0Ni4zIDY0IDMyIDQ5LjcgMzIgMzJ6TTI3Ni44IDEzNC41Yy01LjUtMTYuOCAzLjctMzQuOSAyMC41LTQwLjNMMzQzIDc5LjRsMTkuOCA2MC45IDYwLjktMTkuOEw0MDMuOCA1OS42bDQ1LjctMTQuOGMxNi44LTUuNSAzNC45IDMuNyA0MC4zIDIwLjVsNDkuNCAxNTIuMmM1LjUgMTYuOC0zLjcgMzQuOS0yMC41IDQwLjNMMzY2LjUgMzA3LjJjLTE2LjggNS41LTM0LjktMy43LTQwLjMtMjAuNUwyNzYuOCAxMzQuNXpcIl19LGxsPUQ0LGlsPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNtb2tpbmdcIixpY29uOls2NDAsNTEyLFsxMjg2ODRdLFwiZjQ4ZFwiLFwiTTQ0OCAzMlY0M2MwIDM4LjIgMTUuMiA3NC44IDQyLjIgMTAxLjhsMjEgMjFjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMnYxMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNDVjMC0xMi43LTUuMS0yNC45LTE0LjEtMzMuOWwtMjEtMjFDNDA1LjkgMTUxLjEgMzg0IDk4LjEgMzg0IDQzVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTU3NiAyNTZWMjQ1YzAtMzguMi0xNS4yLTc0LjgtNDIuMi0xMDEuOGwtMjEtMjFjLTIxLTIxLTMyLjgtNDkuNS0zMi44LTc5LjJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY0M2MwIDEyLjcgNS4xIDI0LjkgMTQuMSAzMy45bDIxIDIxYzM5IDM5IDYwLjkgOTEuOSA2MC45IDE0Ny4xdjExYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyek0wIDQxNmMwLTM1LjMgMjguNy02NCA2NC02NEg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjQxNnptMjI0IDB2MzJIMzg0VjQxNkgyMjR6bTI4OC02NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXX0sUjQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWluaW1pemVcIixpY29uOls1MTIsNTEyLFtcImNvbXByZXNzLWFycm93cy1hbHRcIl0sXCJmNzhjXCIsXCJNNDU2IDIyNEgzMTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjU2YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmw0MCA0MEw0NDIuMyA1LjdDNDQ2IDIgNDUwLjkgMCA0NTYgMHMxMCAyIDEzLjcgNS43bDM2LjcgMzYuN0M1MTAgNDYgNTEyIDUwLjkgNTEyIDU2cy0yIDEwLTUuNyAxMy43TDQzMyAxNDNsNDAgNDBjNi45IDYuOSA4LjkgMTcuMiA1LjIgMjYuMnMtMTIuNSAxNC44LTIyLjIgMTQuOHptMCA2NGM5LjcgMCAxOC41IDUuOCAyMi4yIDE0LjhzMS43IDE5LjMtNS4yIDI2LjJsLTQwIDQwIDczLjQgNzMuNGMzLjYgMy42IDUuNyA4LjUgNS43IDEzLjdzLTIgMTAtNS43IDEzLjdsLTM2LjcgMzYuN0M0NjYgNTEwIDQ2MS4xIDUxMiA0NTYgNTEycy0xMC0yLTEzLjctNS43TDM2OSA0MzNsLTQwIDQwYy02LjkgNi45LTE3LjIgOC45LTI2LjIgNS4ycy0xNC44LTEyLjUtMTQuOC0yMi4yVjMxMmMwLTEzLjMgMTAuNy0yNCAyNC0yNEg0NTZ6bS0yNTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY0NTZjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNDAtNDBMNjkuNyA1MDYuM0M2NiA1MTAgNjEuMSA1MTIgNTYgNTEycy0xMC0yLTEzLjctNS43TDUuNyA0NjkuN0MyIDQ2NiAwIDQ2MS4xIDAgNDU2czItMTAgNS43LTEzLjdMNzkgMzY5IDM5IDMyOWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMnMxMi41LTE0LjggMjIuMi0xNC44SDIwMHpNNTYgMjI0Yy05LjcgMC0xOC41LTUuOC0yMi4yLTE0LjhzLTEuNy0xOS4zIDUuMi0yNi4ybDQwLTQwTDUuNyA2OS43QzIgNjYgMCA2MS4xIDAgNTZzMi0xMCA1LjctMTMuN0w0Mi4zIDUuN0M0NiAyIDUwLjkgMCA1NiAwczEwIDIgMTMuNyA1LjdMMTQzIDc5bDQwLTQwYzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJzMTQuOCAxMi41IDE0LjggMjIuMlYyMDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRINTZ6XCJdfSxvbD1SNCxubD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtb251bWVudFwiLGljb246WzM4NCw1MTIsW10sXCJmNWE2XCIsXCJNMTgwLjcgNC43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwbDgwIDgwYzIuNSAyLjUgNC4xIDUuOCA0LjYgOS4zbDQwLjIgMzIySDU1LjlMOTYuMSA5NGMuNC0zLjUgMi02LjggNC42LTkuM2w4MC04MHpNMTUyIDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGg4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgxNTJ6TTMyIDQ0OEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdfSxIbD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzbm93cGxvd1wiLGljb246WzY0MCw1MTIsW10sXCJmN2QyXCIsXCJNMjk4LjkgNjRsNjguNiAxNjBIMjU2bC02NC02NFY2NEgyOTguOXpNNDQ1LjEgMjQyLjdsLTg3LjQtMjA0QzM0Ny42IDE1LjMgMzI0LjUgMCAyOTguOSAwSDE3NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWMTYwSDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMlYyOTguOEMyNi4yIDMxNi44IDAgMzU1LjMgMCA0MDBjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJIMzY4YzYxLjkgMCAxMTItNTAuMSAxMTItMTEyYzAtMTcuMi0zLjktMzMuNS0xMC44LTQ4SDUxMnY1MC43YzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDU0LjYgNTQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDU3NiA0MDIuN1YzMjAgMjM1LjJMNjMzIDE2NGMxMS0xMy44IDguOC0zMy45LTUtNDVzLTMzLjktOC44LTQ1IDVsLTU3IDcxLjJjLTkuMSAxMS4zLTE0IDI1LjQtMTQgNDBWMjg4SDQ0OFYyNTYuN2MuMS0yLjQtLjItNC44LS42LTcuMXMtMS4yLTQuNy0yLjItNi44ek0zNjggMzUyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDExMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OEgzNjh6TTE0NCA0MDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0em0yMTYgMjRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptLTU2LTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHpNMjAwIDQyNGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0elwiXX0sVTQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYW5nbGVzLXJpZ2h0XCIsaWNvbjpbNTEyLDUxMixbMTg3LFwiYW5nbGUtZG91YmxlLXJpZ2h0XCJdLFwiZjEwMVwiLFwiTTQ3MC42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0MDIuNyAyNTYgMjY1LjQgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MHptLTM1MiAxNjBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMjEwLjcgMjU2IDczLjQgMzkzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDB6XCJdfSx6bD1VNCxWbD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYW5uYWJpc1wiLGljb246WzUxMiw1MTIsW10sXCJmNTVmXCIsXCJNMjU2IDBjNS4zIDAgMTAuMyAyLjcgMTMuMyA3LjFjMTUuOCAyMy41IDM2LjcgNjMuNyA0OS4yIDEwOWM3LjIgMjYuNCAxMS44IDU1LjIgMTAuNCA4NGMxMS41LTguOCAyMy43LTE2LjcgMzUuOC0yMy42YzQxLTIzLjMgODQuNC0zNi45IDExMi4yLTQyLjVjNS4yLTEgMTAuNyAuNiAxNC40IDQuNHM1LjQgOS4yIDQuNCAxNC41Yy01LjYgMjcuNy0xOS4zIDcwLjktNDIuNyAxMTEuN2MtOS4xIDE1LjktMTkuOSAzMS43LTMyLjQgNDYuM2MyNy44IDYuNiA1Mi40IDE3LjMgNjcuMiAyNS41YzUuMSAyLjggOC4yIDguMiA4LjIgMTRzLTMuMiAxMS4yLTguMiAxNGMtMTUuMiA4LjQtNDAuOSAxOS41LTY5LjggMjYuMWMtMjAuMiA0LjYtNDIuOSA3LjItNjUuMiA0LjZsOC4zIDMzLjFjMS41IDYuMS0uNiAxMi40LTUuNSAxNi40cy0xMS42IDQuNi0xNy4yIDEuOUwyODAgNDE3LjJWNDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjQxNy4ybC01OC41IDI5LjFjLTUuNiAyLjgtMTIuMyAyLjEtMTcuMi0xLjlzLTctMTAuMy01LjUtMTYuNGw4LjMtMzMuMWMtMjIuMiAyLjYtNDUgMC02NS4yLTQuNmMtMjguOS02LjYtNTQuNi0xNy42LTY5LjgtMjYuMWMtNS4xLTIuOC04LjItOC4yLTguMi0xNHMzLjItMTEuMiA4LjItMTRjMTQuOC04LjIgMzkuNC0xOC44IDY3LjItMjUuNUM3OC45IDI5Ni4zIDY4LjEgMjgwLjUgNTkgMjY0LjZjLTIzLjQtNDAuOC0zNy4xLTg0LTQyLjctMTExLjdjLTEuMS01LjIgLjYtMTAuNyA0LjQtMTQuNXM5LjItNS40IDE0LjQtNC40YzI3LjkgNS41IDcxLjIgMTkuMiAxMTIuMiA0Mi41YzEyLjEgNi45IDI0LjMgMTQuNyAzNS44IDIzLjZjLTEuNC0yOC43IDMuMS01Ny42IDEwLjQtODRjMTIuNS00NS4zIDMzLjQtODUuNSA0OS4yLTEwOWMzLTQuNCA4LTcuMSAxMy4zLTcuMXpcIl19LHE0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNpcmNsZS1wbGF5XCIsaWNvbjpbNTEyLDUxMixbNjE0NjksXCJwbGF5LWNpcmNsZVwiXSxcImYxNDRcIixcIk01MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2ek0xODguMyAxNDcuMWMtNy42IDQuMi0xMi4zIDEyLjMtMTIuMyAyMC45VjM0NGMwIDguNyA0LjcgMTYuNyAxMi4zIDIwLjlzMTYuOCA0LjEgMjQuMy0uNWwxNDQtODhjNy4xLTQuNCAxMS41LTEyLjEgMTEuNS0yMC41cy00LjQtMTYuMS0xMS41LTIwLjVsLTE0NC04OGMtNy40LTQuNS0xNi43LTQuNy0yNC4zLS41elwiXX0sbWw9cTQsdmw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGFibGV0c1wiLGljb246WzY0MCw1MTIsW10sXCJmNDkwXCIsXCJNNjE0LjMgMjQ3YzE2LjMtMjUgMjUuNy01NC45IDI1LjctODdDNjQwIDcxLjYgNTY4LjQgMCA0ODAgMGMtMzIuMSAwLTYxLjkgOS40LTg3IDI1LjdjLTcuOSA1LjItOC41IDE2LjItMS44IDIyLjlMNTkxLjQgMjQ4LjhjNi43IDYuNyAxNy44IDYuMiAyMi45LTEuOHpNNTY3IDI5NC4zYzcuOS01LjIgOC41LTE2LjIgMS44LTIyLjlMMzY4LjYgNzEuMmMtNi43LTYuNy0xNy44LTYuMi0yMi45IDEuOGMtMTYuMyAyNS0yNS43IDU0LjktMjUuNyA4N2MwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGMzMi4xIDAgNjEuOS05LjQgODctMjUuN3pNMzAxLjUgMzY4SDE4LjVjLTkuNSAwLTE2LjkgOC4yLTE1IDE3LjVDMTguOSA0NTcuOCA4My4xIDUxMiAxNjAgNTEyczE0MS4xLTU0LjIgMTU2LjUtMTI2LjVjMi05LjMtNS41LTE3LjUtMTUtMTcuNXptMC0zMmM5LjUgMCAxNi45LTguMiAxNS0xNy41QzMwMS4xIDI0Ni4yIDIzNi45IDE5MiAxNjAgMTkyUzE4LjkgMjQ2LjIgMy41IDMxOC41Yy0yIDkuMyA1LjUgMTcuNSAxNSAxNy41SDMwMS41elwiXX0sTWw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZXRoZXJuZXRcIixpY29uOls1MTIsNTEyLFtdLFwiZjc5NlwiLFwiTTAgMjI0VjQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMkg5NlYzMzZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNlY0NDhoNjRWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZWNDQ4aDY0VjMzNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2VjQ0OGg2NFYzMzZjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNlY0NDhoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDQ0OFYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJIMzg0Vjk2YzAtMTcuNy0xNC4zLTMyLTMyLTMySDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzJIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpcIl19LHc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZXVyby1zaWduXCIsaWNvbjpbMzIwLDUxMixbODM2NCxcImV1clwiLFwiZXVyb1wiXSxcImYxNTNcIixcIk00OC4xIDI0MGMtLjEgMi43LS4xIDUuMy0uMSA4djE2YzAgMi43IDAgNS4zIC4xIDhIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjAuM0M4OS45IDQxOS45IDE3MCA0ODAgMjY0IDQ4MGgyNGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyNjRjLTU3LjkgMC0xMDguMi0zMi40LTEzMy45LTgwSDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxMTIuMmMtLjEtMi42LS4yLTUuMy0uMi04VjI0OGMwLTIuNyAuMS01LjQgLjItOEgyNTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTMwLjFjMjUuNy00Ny42IDc2LTgwIDEzMy45LTgwaDI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI2NEMxNzAgMzIgODkuOSA5Mi4xIDYwLjMgMTc2SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ4LjF6XCJdfSx0bD13LGhsPXcsQ2w9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hhaXJcIixpY29uOls0NDgsNTEyLFsxMjk2ODFdLFwiZjZjMFwiLFwiTTI0OCA0OFYyNTZoNDhWNTguN2MyMy45IDEzLjggNDAgMzkuNyA0MCA2OS4zVjI1Nmg0OFYxMjhDMzg0IDU3LjMgMzI2LjcgMCAyNTYgMEgxOTJDMTIxLjMgMCA2NCA1Ny4zIDY0IDEyOFYyNTZoNDhWMTI4YzAtMjkuNiAxNi4xLTU1LjUgNDAtNjkuM1YyNTZoNDhWNDhoNDh6TTQ4IDI4OGMtMTIuMSAwLTIzLjIgNi44LTI4LjYgMTcuN2wtMTYgMzJjLTUgOS45LTQuNCAyMS43IDEuNCAzMS4xUzIwLjkgMzg0IDMyIDM4NGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzg0SDM1MnY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM4NGMxMS4xIDAgMjEuNC01LjcgMjcuMi0xNS4yczYuNC0yMS4yIDEuNC0zMS4xbC0xNi0zMkM0MjMuMiAyOTQuOCA0MTIuMSAyODggNDAwIDI4OEg0OHpcIl19LEc0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNpcmNsZS1jaGVja1wiLGljb246WzUxMiw1MTIsWzYxNTMzLFwiY2hlY2stY2lyY2xlXCJdLFwiZjA1OFwiLFwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJ6TTM2OSAyMDlMMjQxIDMzN2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDcgNDdMMzM1IDE3NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6XCJdfSxMbD1HNCxXND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtc3RvcFwiLGljb246WzUxMiw1MTIsWzYyMDk0LFwic3RvcC1jaXJjbGVcIl0sXCJmMjhkXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMTkyIDE2MEgzMjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDE5MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXX0scGw9VzQsRTQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29tcGFzcy1kcmFmdGluZ1wiLGljb246WzUxMiw1MTIsW1wiZHJhZnRpbmctY29tcGFzc1wiXSxcImY1NjhcIixcIk0zNTIgOTZjMCAxNC4zLTMuMSAyNy45LTguOCA0MC4yTDM5NiAyMjcuNGMtMjMuNyAyNS4zLTU0LjIgNDQuMS04OC41IDUzLjZMMjU2IDE5MmgwIDBsLTY4IDExNy41YzIxLjUgNi44IDQ0LjMgMTAuNSA2OC4xIDEwLjVjNzAuNyAwIDEzMy44LTMyLjcgMTc0LjktODRjMTEuMS0xMy44IDMxLjItMTYgNDUtNXMxNiAzMS4yIDUgNDVDNDI4LjEgMzQxLjggMzQ3IDM4NCAyNTYgMzg0Yy0zNS40IDAtNjkuNC02LjQtMTAwLjctMTguMUw5OC43IDQ2My43Qzk0IDQ3MS44IDg3IDQ3OC40IDc4LjYgNDgyLjZMMjMuMiA1MTAuM2MtNSAyLjUtMTAuOSAyLjItMTUuNi0uN1MwIDUwMS41IDAgNDk2VjQ0MC42YzAtOC40IDIuMi0xNi43IDYuNS0yNC4xbDYwLTEwMy43QzUzLjcgMzAxLjYgNDEuOCAyODkuMyAzMS4yIDI3NmMtMTEuMS0xMy44LTguOC0zMy45IDUtNDVzMzMuOS04LjggNDUgNWM1LjcgNy4xIDExLjggMTMuOCAxOC4yIDIwLjFsNjkuNC0xMTkuOWMtNS42LTEyLjItOC44LTI1LjgtOC44LTQwLjJjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnptMjEgMjk3LjljMzIuNi0xMi44IDYyLjUtMzAuOCA4OC45LTUyLjlsNDMuNyA3NS41YzQuMiA3LjMgNi41IDE1LjYgNi41IDI0LjFWNDk2YzAgNS41LTIuOSAxMC43LTcuNiAxMy42cy0xMC42IDMuMi0xNS42IC43bC01NS40LTI3LjdjLTguNC00LjItMTUuNC0xMC44LTIwLjEtMTguOUwzNzMgMzkzLjl6TTI1NiAxMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl19LGRsPUU0LHVsPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBsYXRlLXdoZWF0XCIsaWNvbjpbNTEyLDUxMixbXSxcImU1NWFcIixcIk0xNzYgMzJjNDQuMiAwIDgwIDM1LjggODAgODB2MTZjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MFY0OGMwLTguOCA3LjItMTYgMTYtMTZ6TTU2IDY0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yNCAxMzZIMTM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em04IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjcyIDQ4YzAtOC44IDcuMi0xNiAxNi0xNmM0NC4yIDAgODAgMzUuOCA4MCA4MHYxNmMwIDguOC03LjIgMTYtMTYgMTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjQ4ek00MDAgMzJjNDQuMiAwIDgwIDM1LjggODAgODB2MTZjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MFY0OGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2MHYxNmMwIDQ0LjItMzUuOCA4MC04MCA4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI1NmMwLTQ0LjIgMzUuOC04MCA4MC04MGM4LjggMCAxNiA3LjIgMTYgMTZ6TTM1MiAxNzZjOC44IDAgMTYgNy4yIDE2IDE2djE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy04LjggMC0xNi03LjItMTYtMTZWMjU2YzAtNDQuMiAzNS44LTgwIDgwLTgwem0tOTYgMTZ2MTZjMCA0NC4yLTM1LjggODAtODAgODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNTZjMC00NC4yIDM1LjgtODAgODAtODBjOC44IDAgMTYgNy4yIDE2IDE2ek0zLjUgMzQ3LjZDMS42IDMzMi45IDEzIDMyMCAyNy44IDMyMEg0ODQuMmMxNC44IDAgMjYuMiAxMi45IDI0LjQgMjcuNkM1MDIuMyAzOTcuOCA0NjQuMiA0MzcgNDE2IDQ0NnYyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ2LTJjLTQ4LjItOS04Ni4zLTQ4LjItOTIuNS05OC40elwiXX0seGw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaWNpY2xlc1wiLGljb246WzUxMiw1MTIsW10sXCJmN2FkXCIsXCJNNzUuOCAzMDQuOEwxIDM1LjdjLS43LTIuNS0xLTUtMS03LjVDMCAxMi42IDEyLjYgMCAyOC4yIDBINDgyLjRDNDk4LjggMCA1MTIgMTMuMiA1MTIgMjkuNmMwIDEuNi0uMSAzLjMtLjQgNC45TDQzNC42IDQ5Ni4xYy0xLjUgOS4yLTkuNSAxNS45LTE4LjggMTUuOWMtOS4yIDAtMTcuMS02LjYtMTguNy0xNS42TDMzNiAxNjAgMzA3LjIgMzAzLjljLTEuOSA5LjMtMTAuMSAxNi4xLTE5LjYgMTYuMWMtOS4yIDAtMTcuMi02LjItMTkuNC0xNS4xTDI0MCAxOTIgMjEwLjYgMzY4LjJjLTEuNSA5LjEtOS40IDE1LjgtMTguNiAxNS44cy0xNy4xLTYuNy0xOC42LTE1LjhMMTQ0IDE5MiAxMTUuOSAzMDQuM2MtMi4zIDkuMi0xMC42IDE1LjctMjAuMSAxNS43Yy05LjMgMC0xNy41LTYuMi0yMC0xNS4yelwiXX0sZ2w9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLXNoZWx0ZXJcIixpY29uOls1MTIsNTEyLFtdLFwiZTU0ZlwiLFwiTTI3MS45IDQuMmMtOS44LTUuNi0yMS45LTUuNi0zMS44IDBsLTIyNCAxMjhDNi4yIDEzNy45IDAgMTQ4LjUgMCAxNjBWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTc4LjZMMjU2IDY4LjkgNDQ4IDE3OC42VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE2MGMwLTExLjUtNi4yLTIyLjEtMTYuMS0yNy44bC0yMjQtMTI4ek0yNTYgMjA4YzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDB6bS04IDI4MFY0MDBoMTZ2ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYzMTMuNWwyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zNy45LTcwLjNjLTE1LjMtMjguNS00NS4xLTQ2LjMtNzcuNS00Ni4zSDI0Ni4yYy0zMi40IDAtNjIuMSAxNy44LTc3LjUgNDYuM2wtMzcuOSA3MC4zYy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEwyMDAgMzEzLjVWNDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6XCJdfSxTbD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJuZXV0ZXJcIixpY29uOlszODQsNTEyLFs5OTA2XSxcImYyMmNcIixcIk0zMDQgMTc2YzAgNjEuOS01MC4xIDExMi0xMTIgMTEycy0xMTItNTAuMS0xMTItMTEyczUwLjEtMTEyIDExMi0xMTJzMTEyIDUwLjEgMTEyIDExMnpNMjI0IDM0OS4xYzgxLjktMTUgMTQ0LTg2LjggMTQ0LTE3My4xQzM2OCA3OC44IDI4OS4yIDAgMTkyIDBTMTYgNzguOCAxNiAxNzZjMCA4Ni4zIDYyLjEgMTU4LjEgMTQ0IDE3My4xVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM0OS4xelwiXX0sTmw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaWQtYmFkZ2VcIixpY29uOlszODQsNTEyLFtdLFwiZjJjMVwiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTk2IDMyMGg2NGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptOTYtOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0ek0xNDQgNjRoOTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTQ0Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXX0sd2w9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFya2VyXCIsaWNvbjpbNTEyLDUxMixbXSxcImY1YTFcIixcIk00ODEgMzFDNDQ1LjEtNC44IDM4Ni45LTQuOCAzNTEgMzFsLTE1IDE1TDMyMi45IDMzQzI5NC44IDQuOSAyNDkuMiA0LjkgMjIxLjEgMzNMMTM1IDExOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwTDI1NSA2Ni45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDMwMi4xIDgwIDE4Ni4zIDE5NS43IDMxNi4zIDMyNS43IDQ4MSAxNjFjMzUuOS0zNS45IDM1LjktOTQuMSAwLTEyOS45ek0yOTMuNyAzNDguM0wxNjMuNyAyMTguMyA5OS41IDI4Mi41Yy00OCA0OC04MC44IDEwOS4yLTk0LjEgMTc1LjhsLTUgMjVjLTEuNiA3LjkgLjkgMTYgNi42IDIxLjdzMTMuOCA4LjEgMjEuNyA2LjZsMjUtNWM2Ni42LTEzLjMgMTI3LjgtNDYuMSAxNzUuOC05NC4xbDY0LjItNjQuMnpcIl19LEk0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2UtbGF1Z2gtYmVhbVwiLGljb246WzUxMiw1MTIsWzEyODUxMyxcImxhdWdoLWJlYW1cIl0sXCJmNTlhXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMTAxLjYgMzE0Yy0zLjctMTMuNyA3LjUtMjYgMjEuNy0yNkgzODguN2MxNC4yIDAgMjUuNCAxMi4zIDIxLjcgMjZDMzkyIDM4MiAzMjkuOCA0MzIgMjU2IDQzMnMtMTM2LTUwLTE1NC40LTExOHptMTE2LTEwMS4ybDAgMCAwIDAtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjIgMCAwIDAgMCAwIDBjLTIuMSAyLjgtNS43IDMuOS04LjkgMi44cy01LjUtNC4xLTUuNS03LjZjMC0xNy45IDYuNy0zNS42IDE2LjYtNDguOGM5LjgtMTMgMjMuOS0yMy4yIDM5LjQtMjMuMnMyOS42IDEwLjIgMzkuNCAyMy4yYzkuOSAxMy4yIDE2LjYgMzAuOSAxNi42IDQ4LjhjMCAzLjQtMi4yIDYuNS01LjUgNy42cy02LjkgMC04LjktMi44bDAgMCAwIDB6bTE2MCAwbDAgMC0uMi0uMmMtLjItLjItLjQtLjUtLjctLjljLS42LS44LTEuNi0yLTIuOC0zLjRjLTIuNS0yLjgtNi02LjYtMTAuMi0xMC4zYy04LjgtNy44LTE4LjgtMTQtMjcuNy0xNHMtMTguOSA2LjItMjcuNyAxNGMtNC4yIDMuNy03LjcgNy41LTEwLjIgMTAuM2MtMS4yIDEuNC0yLjIgMi42LTIuOCAzLjRjLS4zIC40LS42IC43LS43IC45bC0uMiAuMiAwIDAgMCAwIDAgMGMtMi4xIDIuOC01LjcgMy45LTguOSAyLjhzLTUuNS00LjEtNS41LTcuNmMwLTE3LjkgNi43LTM1LjYgMTYuNi00OC44YzkuOC0xMyAyMy45LTIzLjIgMzkuNC0yMy4yczI5LjYgMTAuMiAzOS40IDIzLjJjOS45IDEzLjIgMTYuNiAzMC45IDE2LjYgNDguOGMwIDMuNC0yLjIgNi41LTUuNSA3LjZzLTYuOSAwLTguOS0yLjhsMCAwIDAgMCAwIDB6XCJdfSxrbD1JNCxibD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoZWxpY29wdGVyLXN5bWJvbFwiLGljb246WzUxMiw1MTIsW10sXCJlNTAyXCIsXCJNNDQ1LjMgMjI0SDUxMEM0OTUuNiAxMDguMiA0MDMuOCAxNi40IDI4OCAyVjY2LjdDMzY4LjQgODAuMSA0MzEuOSAxNDMuNiA0NDUuMyAyMjR6TTUxMCAyODhINDQ1LjNDNDMxLjkgMzY4LjQgMzY4LjQgNDMxLjkgMjg4IDQ0NS40VjUxMGMxMTUuOC0xNC40IDIwNy42LTEwNi4yIDIyMi0yMjJ6TTIgMjg4QzE2LjQgNDAzLjggMTA4LjIgNDk1LjYgMjI0IDUxMFY0NDUuNEMxNDMuNiA0MzEuOSA4MC4xIDM2OC40IDY2LjcgMjg4SDJ6bTAtNjRINjYuN0M4MC4xIDE0My42IDE0My42IDgwLjEgMjI0IDY2LjdWMkMxMDguMiAxNi40IDE2LjQgMTA4LjIgMiAyMjR6bTIwNi02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODhoOTZ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NjRIMjA4VjE2MHpcIl19LEFsPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInVuaXZlcnNhbC1hY2Nlc3NcIixpY29uOls1MTIsNTEyLFtdLFwiZjI5YVwiLFwiTTUxMiAyNTZjMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ6TTE2MS41IDE2OS45Yy0xMi4yLTUuMi0yNi4zIC40LTMxLjUgMTIuNnMuNCAyNi4zIDEyLjYgMzEuNWwxMS45IDUuMWMxNy4zIDcuNCAzNS4yIDEyLjkgNTMuNiAxNi4zdjUwLjFjMCA0LjMtLjcgOC42LTIuMSAxMi42bC0yOC43IDg2LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjQuNC03My4yYzEuMy0zLjggNC44LTYuNCA4LjgtNi40czcuNiAyLjYgOC44IDYuNGwyNC40IDczLjJjNC4yIDEyLjYgMTcuOCAxOS40IDMwLjQgMTUuMnMxOS40LTE3LjggMTUuMi0zMC40bC0yOC43LTg2LjFjLTEuNC00LjEtMi4xLTguMy0yLjEtMTIuNlYyMzUuNWMxOC40LTMuNSAzNi4zLTguOSA1My42LTE2LjNsMTEuOS01LjFjMTIuMi01LjIgMTcuOC0xOS4zIDEyLjYtMzEuNXMtMTkuMy0xNy44LTMxLjUtMTIuNkwzMzguNyAxNzVjLTI2LjEgMTEuMi01NC4yIDE3LTgyLjcgMTdzLTU2LjUtNS44LTgyLjctMTdsLTExLjktNS4xek0yNTYgMTYwYzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDB6XCJdfSxPND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtY2hldnJvbi11cFwiLGljb246WzUxMiw1MTIsW1wiY2hldnJvbi1jaXJjbGUtdXBcIl0sXCJmMTM5XCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMzc3IDI3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC04Ny04Ny04NyA4N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwyMzkgMTY3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDM3NyAyNzF6XCJdfSxCbD1PNCxUbD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsYXJpLXNpZ25cIixpY29uOlszODQsNTEyLFtdLFwiZTFjOFwiLFwiTTE0NCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlY5Ni43YzUuMy0uNCAxMC42LS43IDE2LS43czEwLjcgLjIgMTYgLjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY0OS40YzU0LjkgMjUuMiA5NS44IDc1LjUgMTA4LjIgMTM2LjJjMy41IDE3LjMtNy43IDM0LjItMjUgMzcuN3MtMzQuMi03LjctMzcuNy0yNWMtNi4xLTI5LjktMjIuNS01NS45LTQ1LjQtNzQuM1YyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTYxYy01LjItLjctMTAuNi0xLTE2LTFzLTEwLjggLjMtMTYgMXY5NWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxODguMUM4Mi43IDIxMS41IDY0IDI0Ny42IDY0IDI4OGMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTkyIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQ4LjlDMTguNSAzODIgMCAzMzcuMiAwIDI4OGMwLTc3LjUgNDUuOS0xNDQuMyAxMTItMTc0LjZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdfSx5bD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2b2xjYW5vXCIsaWNvbjpbNTEyLDUxMixbMTI3NzU1XSxcImY3NzBcIixcIk0xNjAgMTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzE1LjcgMCAzMCA1LjYgNDEuMiAxNUMyMTIuNCAxMi40IDIzMi43IDAgMjU2IDBzNDMuNiAxMi40IDU0LjggMzFDMzIyIDIxLjYgMzM2LjMgMTYgMzUyIDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0Yy0xNC43IDAtMjguMy01LTM5LjEtMTMuM2wtMzIgNDhDMjc1LjMgMTg3IDI2NiAxOTIgMjU2IDE5MnMtMTkuMy01LTI0LjktMTMuM2wtMzItNDhDMTg4LjMgMTM5IDE3NC43IDE0NCAxNjAgMTQ0ek0xNDQgMzUybDQ4LjQtMjQuMmMxMC4yLTUuMSAyMS42LTcuOCAzMy03LjhjMTkuNiAwIDM4LjQgNy44IDUyLjIgMjEuNmwzMi41IDMyLjVjNi4zIDYuMyAxNC45IDkuOSAyMy44IDkuOWMxMS4zIDAgMjEuOC01LjYgMjgtMTVsOS43LTE0LjYtNTktNjYuM2MtOS4xLTEwLjItMjIuMi0xNi4xLTM1LjktMTYuMUgyMzUuMWMtMTMuNyAwLTI2LjggNS45LTM1LjkgMTYuMWwtNTkuOSA2Ny40TDE0NCAzNTJ6bTE5LjQtOTUuOGMxOC4yLTIwLjUgNDQuMy0zMi4yIDcxLjgtMzIuMmg0MS44YzI3LjQgMCA1My41IDExLjcgNzEuOCAzMi4ybDE1MC4yIDE2OWM4LjUgOS41IDEzLjIgMjEuOSAxMy4yIDM0LjdjMCAyOC44LTIzLjQgNTIuMi01Mi4yIDUyLjJINTIuMkMyMy40IDUxMiAwIDQ4OC42IDAgNDU5LjhjMC0xMi44IDQuNy0yNS4xIDEzLjItMzQuN2wxNTAuMi0xNjl6XCJdfSxQbD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24td2Fsa2luZy1kYXNoZWQtbGluZS1hcnJvdy1yaWdodFwiLGljb246WzY0MCw1MTIsW10sXCJlNTUzXCIsXCJNMjA4IDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6TTEyMy43IDIwMC41YzEtLjQgMS45LS44IDIuOS0xLjJsLTE2LjkgNjMuNWMtNS42IDIxLjEtLjEgNDMuNiAxNC43IDU5LjdsNzAuNyA3Ny4xIDIyIDg4LjFjNC4zIDE3LjEgMjEuNyAyNy42IDM4LjggMjMuM3MyNy42LTIxLjcgMjMuMy0zOC44bC0yMy05Mi4xYy0xLjktNy44LTUuOC0xNC45LTExLjItMjAuOGwtNDkuNS01NCAxOS4zLTY1LjUgOS42IDIzYzQuNCAxMC42IDEyLjUgMTkuMyAyMi44IDI0LjVsMjYuNyAxMy4zYzE1LjggNy45IDM1IDEuNSA0Mi45LTE0LjNzMS41LTM1LTE0LjMtNDIuOUwyODEgMjMyLjdsLTE1LjMtMzYuOEMyNDguNSAxNTQuOCAyMDguMyAxMjggMTYzLjcgMTI4Yy0yMi44IDAtNDUuMyA0LjgtNjYuMSAxNGwtOCAzLjVjLTMyLjkgMTQuNi01OC4xIDQyLjQtNjkuNCA3Ni41bC0yLjYgNy44Yy01LjYgMTYuOCAzLjUgMzQuOSAyMC4yIDQwLjVzMzQuOS0zLjUgNDAuNS0yMC4ybDIuNi03LjhjNS43LTE3LjEgMTguMy0zMC45IDM0LjctMzguMmw4LTMuNXptLTMwIDEzNS4xTDY4LjcgMzk4IDkuNCA0NTcuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxMTYuMyA0NDFjNC42LTQuNiA4LjItMTAuMSAxMC42LTE2LjFsMTQuNS0zNi4yLTQwLjctNDQuNGMtMi41LTIuNy00LjgtNS42LTctOC42ek01NTAuNiAxNTMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNTMwLjcgMjI0SDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1MzAuN2wtMjUuNCAyNS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDgwLTgwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC04MC04MHpNMzkyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0IDE1MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHYxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjE1MnpNMzkyIDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2MTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYzNDRjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0IDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjQ0MHpcIl19LGs9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3Rlcmxpbmctc2lnblwiLGljb246WzM4NCw1MTIsWzE2MyxcImdicFwiLFwicG91bmQtc2lnblwiXSxcImYxNTRcIixcIk0xNDQgMTYwLjRjMC0zNS41IDI4LjgtNjQuNCA2NC40LTY0LjRjNi45IDAgMTMuOCAxLjEgMjAuNCAzLjNsODEuMiAyNy4xYzE2LjggNS42IDM0LjktMy41IDQwLjUtMjAuMnMtMy41LTM0LjktMjAuMi00MC41TDI0OSAzOC42Yy0xMy4xLTQuNC0yNi44LTYuNi00MC42LTYuNkMxMzcuNSAzMiA4MCA4OS41IDgwIDE2MC40VjIyNEg2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg4MHY0NC41YzAgMTcuNC00LjcgMzQuNS0xMy43IDQ5LjRMMzYuNiA0MzEuNWMtNS45IDkuOS02LjEgMjIuMi0uNCAzMi4yUzUyLjUgNDgwIDY0IDQ4MEgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTIwLjVsLjctMS4xQzEzNi4xIDM5MCAxNDQgMzYxLjUgMTQ0IDMzMi41VjI4OEgyNTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTQ0VjE2MC40elwiXX0sRmw9ayxEbD1rLFJsPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZpcnVzZXNcIixpY29uOls2NDAsNTEyLFtdLFwiZTA3NlwiLFwiTTE5MiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0VjM3LjVjMCAzNS42IDQzLjEgNTMuNSA2OC4zIDI4LjNsOS41LTkuNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTkuNSA5LjVDMjkzIDEyNC45IDMxMC45IDE2OCAzNDYuNSAxNjhIMzYwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDM0Ni41Yy0zNS42IDAtNTMuNSA0My4xLTI4LjMgNjguM2w5LjUgOS41YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTkuNS05LjVDMjU5LjEgMjkzIDIxNiAzMTAuOSAyMTYgMzQ2LjVWMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjM0Ni41YzAtMzUuNi00My4xLTUzLjUtNjguMy0yOC4zbC05LjUgOS41Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDkuNS05LjVDOTEgMjU5LjEgNzMuMSAyMTYgMzcuNSAyMTZIMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRIMzcuNWMzNS42IDAgNTMuNS00My4xIDI4LjMtNjguM2wtOS41LTkuNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDkuNSA5LjVDMTI0LjkgOTEgMTY4IDczLjEgMTY4IDM3LjVWMjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTQ4IDIyNGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnptLTQ4LTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptMzIwIDgwYzAgMzMgMzkuOSA0OS41IDYzLjIgMjYuMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZDNTc0LjUgMzEyLjEgNTkxIDM1MiA2MjQgMzUyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2Yy0zMyAwLTQ5LjUgMzkuOS0yNi4yIDYzLjJjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEM1NTEuOSA0NDYuNSA1MTIgNDYzIDUxMiA0OTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZjMC0zMy0zOS45LTQ5LjUtNjMuMi0yNi4yYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42QzQxNy41IDQyMy45IDQwMSAzODQgMzY4IDM4NGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmMzMyAwIDQ5LjUtMzkuOSAyNi4yLTYzLjJjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEM0NDAuMSAyODkuNSA0ODAgMjczIDQ4MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptMCAxMTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyelwiXX0sVWw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3F1YXJlLXBlcnNvbi1jb25maW5lZFwiLGljb246WzQ0OCw1MTIsW10sXCJlNTc3XCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0yNTYgMTQ0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpNMjQwIDI0OGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2VjM1MC4xYzAgMzYuNC0yOS41IDY1LjktNjUuOSA2NS45Yy0xNy41IDAtMzQuMy02LjktNDYuNi0xOS4zTDE4NC44IDM0MmwtMjguMSA1Ni4zYy03LjkgMTUuOC0yNy4xIDIyLjItNDIuOSAxNC4zcy0yMi4yLTI3LjEtMTQuMy00Mi45bDQ4LTk2YzQuNi05LjIgMTMuMy0xNS42IDIzLjUtMTcuM3MyMC41IDEuNyAyNy44IDlMMjQwIDMwNi43VjI0OHpcIl19LHFsPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInVzZXItdGllXCIsaWNvbjpbNDQ4LDUxMixbXSxcImY1MDhcIixcIk0yMjQgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOHMtNTcuMyAxMjgtMTI4IDEyOHMtMTI4LTU3LjMtMTI4LTEyOFMxNTMuMyAwIDIyNCAwek0yMDkuMSAzNTkuMmwtMTguNi0zMWMtNi40LTEwLjcgMS4zLTI0LjIgMTMuNy0yNC4ySDIyNGgxOS43YzEyLjQgMCAyMC4xIDEzLjYgMTMuNyAyNC4ybC0xOC42IDMxIDMzLjQgMTIzLjkgMzkuNS0xNjEuMmM3Ny4yIDEyIDEzNi4zIDc4LjggMTM2LjMgMTU5LjRjMCAxNy0xMy44IDMwLjctMzAuNyAzMC43SDI2NS4xIDE4Mi45IDMwLjdDMTMuOCA1MTIgMCA0OTguMiAwIDQ4MS4zYzAtODAuNiA1OS4xLTE0Ny40IDEzNi4zLTE1OS40bDM5LjUgMTYxLjIgMzMuNC0xMjMuOXpcIl19LFg0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93LWRvd24tbG9uZ1wiLGljb246WzM4NCw1MTIsW1wibG9uZy1hcnJvdy1kb3duXCJdLFwiZjE3NVwiLFwiTTIyNCA0MDIuN1YzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY0MDIuN0w4Ni42IDMyOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDQwMi43elwiXX0sR2w9WDQsV2w9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGVudC1hcnJvdy1kb3duLXRvLWxpbmVcIixpY29uOls2NDAsNTEyLFtdLFwiZTU3ZVwiLFwiTTI0MS44IDExMS45YzguOSA5LjkgOC4xIDI1LTEuOCAzMy45bC04MCA3MmMtOS4xIDguMi0yMyA4LjItMzIuMSAwbC04MC03MmMtOS45LTguOS0xMC43LTI0LTEuOC0zMy45czI0LTEwLjcgMzMuOS0xLjhsMzkuOSAzNkwxMjAgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEyMi4xIDM5LjktMzZjOS45LTguOSAyNS04LjEgMzMuOSAxLjh6bTEyMi44IDIyLjZjMTEuNS04LjcgMjcuMy04LjcgMzguOCAwbDE2OCAxMjhjNi42IDUgMTEgMTIuNSAxMi4zIDIwLjdsMjQgMTYwIC43IDQuN2MxNy41IC4yIDMxLjYgMTQuNCAzMS42IDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDE1OS42bC43LTQuNyAyNC0xNjBjMS4yLTguMiA1LjYtMTUuNyAxMi4zLTIwLjdsMTY4LTEyOHpNMzg0IDQ0OGg3Ni44TDM4NCAzMjBWNDQ4elwiXX0sRWw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2VydGlmaWNhdGVcIixpY29uOls1MTIsNTEyLFtdLFwiZjBhM1wiLFwiTTIxMSA3LjNDMjA1IDEgMTk2LTEuNCAxODcuNiAuOHMtMTQuOSA4LjktMTcuMSAxNy4zTDE1NC43IDgwLjZsLTYyLTE3LjVjLTguNC0yLjQtMTcuNCAwLTIzLjUgNi4xcy04LjUgMTUuMS02LjEgMjMuNWwxNy41IDYyTDE4LjEgMTcwLjZjLTguNCAyLjEtMTUgOC43LTE3LjMgMTcuMVMxIDIwNSA3LjMgMjExbDQ2LjIgNDVMNy4zIDMwMUMxIDMwNy0xLjQgMzE2IC44IDMyNC40czguOSAxNC45IDE3LjMgMTcuMWw2Mi41IDE1LjgtMTcuNSA2MmMtMi40IDguNCAwIDE3LjQgNi4xIDIzLjVzMTUuMSA4LjUgMjMuNSA2LjFsNjItMTcuNSAxNS44IDYyLjVjMi4xIDguNCA4LjcgMTUgMTcuMSAxNy4zczE3LjMtLjIgMjMuNC02LjRsNDUtNDYuMiA0NSA0Ni4yYzYuMSA2LjIgMTUgOC43IDIzLjQgNi40czE0LjktOC45IDE3LjEtMTcuM2wxNS44LTYyLjUgNjIgMTcuNWM4LjQgMi40IDE3LjQgMCAyMy41LTYuMXM4LjUtMTUuMSA2LjEtMjMuNWwtMTcuNS02MiA2Mi41LTE1LjhjOC40LTIuMSAxNS04LjcgMTcuMy0xNy4xcy0uMi0xNy4zLTYuNC0yMy40bC00Ni4yLTQ1IDQ2LjItNDVjNi4yLTYuMSA4LjctMTUgNi40LTIzLjRzLTguOS0xNC45LTE3LjMtMTcuMWwtNjIuNS0xNS44IDE3LjUtNjJjMi40LTguNCAwLTE3LjQtNi4xLTIzLjVzLTE1LjEtOC41LTIzLjUtNi4xbC02MiAxNy41TDM0MS40IDE4LjFjLTIuMS04LjQtOC43LTE1LTE3LjEtMTcuM1MzMDcgMSAzMDEgNy4zTDI1NiA1My41IDIxMSA3LjN6XCJdfSxRND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyZXBseS1hbGxcIixpY29uOls1NzYsNTEyLFtcIm1haWwtcmVwbHktYWxsXCJdLFwiZjEyMlwiLFwiTTExNy4yIDE2MC40TDIyNCA2NC4zVjY0YzAtMTIuNi03LjQtMjQuMS0xOS0yOS4ycy0yNS0zLTM0LjQgNS40bC0xNjAgMTQ0QzMuOSAxOTAuMyAwIDE5OC45IDAgMjA4czMuOSAxNy43IDEwLjYgMjMuOGwxNjAgMTQ0YzkuNCA4LjUgMjIuOSAxMC42IDM0LjQgNS40czE5LTE2LjYgMTktMjkuMnYtLjNMMTE3LjIgMjU1LjZDMTAzLjcgMjQzLjQgOTYgMjI2LjEgOTYgMjA4czcuNy0zNS40IDIxLjItNDcuNnpNMzUyIDY0YzAtMTIuNi03LjQtMjQuMS0xOS0yOS4ycy0yNS0zLTM0LjQgNS40bC0xNjAgMTQ0Yy02LjcgNi4xLTEwLjYgMTQuNy0xMC42IDIzLjhzMy45IDE3LjcgMTAuNiAyMy44bDE2MCAxNDRjOS40IDguNSAyMi45IDEwLjYgMzQuNCA1LjRzMTktMTYuNiAxOS0yOS4yVjI4OGgzMmM1MyAwIDk2IDQzIDk2IDk2YzAgMzAuNC0xMi44IDQ3LjktMjIuMiA1Ni43Yy01LjUgNS4xLTkuOCAxMi05LjggMTkuNWMwIDEwLjkgOC44IDE5LjcgMTkuNyAxOS43YzIuOCAwIDUuNi0uNiA4LjEtMS45QzQ5NC41IDQ2Ny45IDU3NiA0MTcuMyA1NzYgMzA0YzAtOTcuMi03OC44LTE3Ni0xNzYtMTc2SDM1MlY2NHpcIl19LElsPVE0LE9sPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN1aXRjYXNlXCIsaWNvbjpbNTEyLDUxMixbMTI5NTIzXSxcImYwZjJcIixcIk0xNzYgNTZWOTZIMzM2VjU2YzAtNC40LTMuNi04LTgtOEgxODRjLTQuNCAwLTggMy42LTggOHpNMTI4IDk2VjU2YzAtMzAuOSAyNS4xLTU2IDU2LTU2SDMyOGMzMC45IDAgNTYgMjUuMSA1NiA1NlY5NnYzMlY0ODBIMTI4VjEyOCA5NnpNNjQgOTZIOTZWNDgwSDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjR6TTQ0OCA0ODBINDE2Vjk2aDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NHpcIl19LEs0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1za2F0aW5nXCIsaWNvbjpbNDQ4LDUxMixbXCJza2F0aW5nXCJdLFwiZjdjNVwiLFwiTTQ0OCA0OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6TTEyOCAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJIMzE5LjRjNDMuNiAwIDY0LjYgNTMuNCAzMi44IDgzLjFsLTc0LjQgNjkuNCA2MC4yIDYwLjJjOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM0OS4zbC03Ny45LTc3LjhjLTI2LjYtMjYuNi0yNC42LTcwLjMgNC4zLTk0LjRsMjAuNC0xN0gxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek04MS40IDM1My40bDg2LjktODYuOWM0LjYgMTAgMTEgMTkuMyAxOS4zIDI3LjVsMjEuOCAyMS44LTgyLjcgODIuN2MtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjN6bTMyMi41IDk1LjFjOC42IDIuMSAxMy44IDEwLjggMTEuNiAxOS40bC0uNCAxLjdjLTYuMiAyNC45LTI4LjYgNDIuNC01NC4zIDQyLjRIMjcyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDg4LjhjMTEgMCAyMC42LTcuNSAyMy4zLTE4LjJsLjQtMS43YzIuMS04LjYgMTAuOC0xMy44IDE5LjQtMTEuNnpNMTM1LjIgNDc4LjNsLTYuMiAzLjFjLTIxLjYgMTAuOC00Ny42IDYuNi02NC42LTEwLjVMNC43IDQxMS4zYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsNTkuNiA1OS42YzcuMyA3LjMgMTguNSA5LjEgMjcuNyA0LjVsNi4yLTMuMWM3LjktNCAxNy41LS43IDIxLjUgNy4ycy43IDE3LjUtNy4yIDIxLjV6XCJdfSxYbD1LNCxqND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWx0ZXItY2lyY2xlLWRvbGxhclwiLGljb246WzU3Niw1MTIsW1wiZnVubmVsLWRvbGxhclwiXSxcImY2NjJcIixcIk0zLjkgMjIuOUMxMC41IDguOSAyNC41IDAgNDAgMEg0NzJjMTUuNSAwIDI5LjUgOC45IDM2LjEgMjIuOXM0LjYgMzAuNS01LjIgNDIuNUwzOTYuNCAxOTUuNkMzMTYuMiAyMTIuMSAyNTYgMjgzIDI1NiAzNjhjMCAyNy40IDYuMyA1My40IDE3LjUgNzYuNWMtMS42LS44LTMuMi0xLjgtNC43LTIuOWwtNjQtNDhjLTguMS02LTEyLjgtMTUuNS0xMi44LTI1LjZWMjg4LjlMOSA2NS4zQy0uNyA1My40LTIuOCAzNi44IDMuOSAyMi45ek01NzYgMzY4YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHpNNDA4LjggMzM1LjRjLjYtLjkgMS44LTIuMSA0LjItMy40YzUuMS0yLjcgMTIuNS00LjEgMTguNy00YzguMiAuMSAxNy4xIDEuOCAyNi40IDQuMWM4LjYgMi4xIDE3LjMtMy4xIDE5LjQtMTEuN3MtMy4xLTE3LjMtMTEuNy0xOS40Yy01LjYtMS40LTExLjYtMi43LTE3LjktMy43VjI4OGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY5LjVjLTYuMSAxLjItMTIuMyAzLjItMTggNi4zYy0xMS44IDYuMy0yMyAxOC40LTIxLjggMzcuMmMxIDE2IDExLjcgMjUuMyAyMS42IDMwLjdjOC44IDQuNyAxOS43IDcuOCAyOC42IDEwLjNsMS44IC41YzEwLjMgMi45IDE3LjkgNS4yIDIzLjIgOC4zYzQuNSAyLjcgNC43IDQuMiA0LjcgNS42Yy4xIDIuNC0uNSAzLjctMSA0LjVjLS42IDEtMS44IDIuMi00IDMuM2MtNC43IDIuNS0xMS44IDMuOC0xOC41IDMuNmMtOS41LS4zLTE4LjUtMy4xLTI5LjktNi44Yy0xLjktLjYtMy44LTEuMi01LjgtMS44Yy04LjQtMi42LTE3LjQgMi4xLTIwIDEwLjVzMi4xIDE3LjQgMTAuNSAyMGMxLjYgLjUgMy4zIDEgNSAxLjZsMCAwIDAgMGM3IDIuMyAxNS4xIDQuOCAyMy43IDYuNnYxMS40YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWNDM4LjdjNi4yLTEuMSAxMi41LTMuMSAxOC4zLTYuMmMxMi4xLTYuNSAyMi4zLTE4LjcgMjEuNy0zNi45Yy0uNS0xNi4yLTEwLjMtMjYuMy0yMC41LTMyLjNjLTkuNC01LjYtMjEuMi04LjktMzAuNS0xMS41bC0uMiAwYy0xMC40LTIuOS0xOC4zLTUuMi0yMy45LTguMmMtNC44LTIuNi00LjgtNC00LjgtNC41bDAtLjFjLS4xLTEuOSAuMy0yLjkgLjgtMy42elwiXX0sUWw9ajQsS2w9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FtZXJhLXJldHJvXCIsaWNvbjpbNTEyLDUxMixbMTI4MjQ3XSxcImYwODNcIixcIk0yMjAuNiAxMjEuMkwyNzEuMSA5NiA0NDggOTZ2OTZIMzMzLjJjLTIxLjktMTUuMS00OC41LTI0LTc3LjItMjRzLTU1LjIgOC45LTc3LjIgMjRINjRWMTI4SDE5MmM5LjkgMCAxOS43LTIuMyAyOC42LTYuOHpNMCAxMjhWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEgyNzEuMWMtOS45IDAtMTkuNyAyLjMtMjguNiA2LjhMMTkyIDY0SDE2MFY0OGMwLTguOC03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2QzI4LjcgNjQgMCA5Mi43IDAgMTI4ek0zNDQgMzA0YzAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4czM5LjQtODggODgtODhzODggMzkuNCA4OCA4OHpcIl19LEo0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNpcmNsZS1hcnJvdy1kb3duXCIsaWNvbjpbNTEyLDUxMixbXCJhcnJvdy1jaXJjbGUtZG93blwiXSxcImYwYWJcIixcIk0yNTYgMEMxMTQuNiAwIDAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJzMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMHpNMTI3IDI5N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcxIDcxTDIzMiAxMjBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDIxNC4xIDcxLTcxYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUwyNzMgNDA5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwxMjcgMjk3elwiXX0samw9SjQsWjQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsZS1pbXBvcnRcIixpY29uOls1MTIsNTEyLFtcImFycm93LXJpZ2h0LXRvLWZpbGVcIl0sXCJmNTZmXCIsXCJNMTI4IDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0SDM1MlYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJINTEyVjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEgxOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0VjMzNkgzMDIuMWwtMzkgMzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4MC04MGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtODAtODBjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzkgMzlIMTI4VjY0em0wIDIyNHY0OEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNEgxMjh6TTUxMiAxMjhIMzg0VjBMNTEyIDEyOHpcIl19LEpsPVo0LFk0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNxdWFyZS1hcnJvdy11cC1yaWdodFwiLGljb246WzQ0OCw1MTIsW1wiZXh0ZXJuYWwtbGluay1zcXVhcmVcIl0sXCJmMTRjXCIsXCJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0ek0xNjAgMTQ0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDk0LjFMMTE5IDMyN2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDEzNS0xMzVWMzI4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMTY4YzAtMTMuMy0xMC43LTI0LTI0LTI0SDE2MHpcIl19LFpsPVk0LFlsPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJveC1vcGVuXCIsaWNvbjpbNjQwLDUxMixbXSxcImY0OWVcIixcIk01OC45IDQyLjFjMy02LjEgOS42LTkuNiAxNi4zLTguN0wzMjAgNjQgNTY0LjggMzMuNGM2LjctLjggMTMuMyAyLjcgMTYuMyA4LjdsNDEuNyA4My40YzkgMTcuOS0uNiAzOS42LTE5LjggNDUuMUw0MzkuNiAyMTcuM2MtMTMuOSA0LTI4LjgtMS45LTM2LjItMTQuM0wzMjAgNjQgMjM2LjYgMjAzYy03LjQgMTIuNC0yMi4zIDE4LjMtMzYuMiAxNC4zTDM3LjEgMTcwLjZjLTE5LjMtNS41LTI4LjgtMjcuMi0xOS44LTQ1LjFMNTguOSA0Mi4xek0zMjEuMSAxMjhsNTQuOSA5MS40YzE0LjkgMjQuOCA0NC42IDM2LjYgNzIuNSAyOC42TDU3NiAyMTEuNnYxNjdjMCAyMi0xNSA0MS4yLTM2LjQgNDYuNmwtMjA0LjEgNTFjLTEwLjIgMi42LTIwLjkgMi42LTMxIDBsLTIwNC4xLTUxQzc5IDQxOS43IDY0IDQwMC41IDY0IDM3OC41di0xNjdMMTkxLjYgMjQ4YzI3LjggOCA1Ny42LTMuOCA3Mi41LTI4LjZMMzE4LjkgMTI4aDIuMnpcIl19LF9sPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNjcm9sbFwiLGljb246WzU3Niw1MTIsWzEyODIyMF0sXCJmNzBlXCIsXCJNMCA4MHY0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0OCA5NlY4MGMwLTI2LjUtMjEuNS00OC00OC00OFMwIDUzLjUgMCA4MHpNMTEyIDMyYzEwIDEzLjQgMTYgMzAgMTYgNDhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR2LTUuM2MwLTMyLjQgMjYuMy01OC43IDU4LjctNTguN0g0ODBWMTI4YzAtNTMtNDMtOTYtOTYtOTZIMTEyek00NjQgNDgwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyYzAtOC44LTcuMi0xNi0xNi0xNkgzMTQuN2MtMTQuNyAwLTI2LjcgMTEuOS0yNi43IDI2LjdWMzg0YzAgNTMtNDMgOTYtOTYgOTZIMzY4aDk2elwiXX0sJGw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3BhXCIsaWNvbjpbNTc2LDUxMixbXSxcImY1YmJcIixcIk0xODMuMSAyMzUuM2MzMy43IDIwLjcgNjIuOSA0OC4xIDg1LjggODAuNWM3IDkuOSAxMy40IDIwLjMgMTkuMSAzMWM1LjctMTAuOCAxMi4xLTIxLjEgMTkuMS0zMWMyMi45LTMyLjQgNTIuMS01OS44IDg1LjgtODAuNUM0MzcuNiAyMDcuOCA0OTAuMSAxOTIgNTQ2IDE5Mmg5LjljMTEuMSAwIDIwLjEgOSAyMC4xIDIwLjFDNTc2IDM2MC4xIDQ1Ni4xIDQ4MCAzMDguMSA0ODBIMjg4IDI2Ny45QzExOS45IDQ4MCAwIDM2MC4xIDAgMjEyLjFDMCAyMDEgOSAxOTIgMjAuMSAxOTJIMzBjNTUuOSAwIDEwOC40IDE1LjggMTUzLjEgNDMuM3pNMzAxLjUgMzcuNmMxNS43IDE2LjkgNjEuMSA3MS44IDg0LjQgMTY0LjZjLTM4IDIxLjYtNzEuNCA1MC44LTk3LjkgODUuNmMtMjYuNS0zNC44LTU5LjktNjMuOS05Ny45LTg1LjZjMjMuMi05Mi44IDY4LjYtMTQ3LjcgODQuNC0xNjQuNkMyNzggMzMuOSAyODIuOSAzMiAyODggMzJzMTAgMS45IDEzLjUgNS42elwiXX0sY2k9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibG9jYXRpb24tcGluLWxvY2tcIixpY29uOls1MTIsNTEyLFtdLFwiZTUxZlwiLFwiTTIxNS43IDQ5OS4yYzExLTEzLjggMjUuMS0zMS43IDQwLjMtNTIuM1YzNTJjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjI3MmMwLTU1LjYgNDAuNS0xMDEuNyA5My42LTExMC41QzM2NyA3MCAyODcuNyAwIDE5MiAwQzg2IDAgMCA4NiAwIDE5MmMwIDg3LjQgMTE3IDI0MyAxNjguMyAzMDcuMmMxMi4zIDE1LjMgMzUuMSAxNS4zIDQ3LjQgMHpNMTkyIDI1NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0em0yMDgtMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NDhIMzY4VjI3MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptLTgwIDMydjQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMlYyNzJjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODB6XCJdfSxhaT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwYXVzZVwiLGljb246WzMyMCw1MTIsWzkyMDhdLFwiZjA0Y1wiLFwiTTQ4IDY0QzIxLjUgNjQgMCA4NS41IDAgMTEyVjQwMGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg4MGMyNi41IDAgNDgtMjEuNSA0OC00OFYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6bTE5MiAwYy0yNi41IDAtNDggMjEuNS00OCA0OFY0MDBjMCAyNi41IDIxLjUgNDggNDggNDhoMzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDI0MHpcIl19LHNpPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhpbGwtYXZhbGFuY2hlXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1MDdcIixcIk00NzEuNyA0MDEuOWMzNC4yIDIzLjEgODEuMSAxOS41IDExMS40LTEwLjhjMzQuNC0zNC40IDM0LjQtOTAuMSAwLTEyNC40Yy0yNy44LTI3LjgtNjkuNS0zMy4xLTEwMi42LTE2Yy0xMS44IDYuMS0xNi40IDIwLjYtMTAuMyAzMi4zczIwLjYgMTYuNCAzMi4zIDEwLjNjMTUuMS03LjggMzQtNS4zIDQ2LjYgNy4zYzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42cy00MC45IDE1LjYtNTYuNiAwbC04MS43LTgxLjdDNDMzLjIgMjYxLjMgNDQ4IDIzNi40IDQ0OCAyMDhjMC0zMy45LTIxLjEtNjIuOS01MC45LTc0LjVjMS45LTYuOCAyLjktMTQgMi45LTIxLjVjMC00NC4yLTM1LjgtODAtODAtODBjLTI3LjMgMC01MS41IDEzLjctNjUuOSAzNC42QzI0OC4zIDQ2LjYgMjI5LjkgMzIgMjA4IDMyYy0yNi41IDAtNDggMjEuNS00OCA0OGMwIDQgLjUgNy45IDEuNCAxMS42TDQ3MS43IDQwMS45ek01MTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem0wIDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyek0xMDAuMyA4N0M3NS4xIDYxLjggMzIgNzkuNyAzMiAxMTUuM1Y0MzJjMCA0NC4yIDM1LjggODAgODAgODBINDI4LjdjMzUuNiAwIDUzLjUtNDMuMSAyOC4zLTY4LjNMMTAwLjMgODd6XCJdfSxIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRlbXBlcmF0dXJlLWVtcHR5XCIsaWNvbjpbMzIwLDUxMixbXCJ0ZW1wZXJhdHVyZS0wXCIsXCJ0aGVybW9tZXRlci0wXCIsXCJ0aGVybW9tZXRlci1lbXB0eVwiXSxcImYyY2JcIixcIk0xMTIgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhWMjc2LjVjMCAxNy4zIDcuMSAzMS45IDE1LjMgNDIuNUMyMzMuOCAzMzIuNiAyNDAgMzQ5LjUgMjQwIDM2OGMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTE4LjUgNi4yLTM1LjQgMTYuNy00OC45YzguMi0xMC42IDE1LjMtMjUuMiAxNS4zLTQyLjVWMTEyek0xNjAgMEM5OC4xIDAgNDggNTAuMiA0OCAxMTJWMjc2LjVjMCAuMS0uMSAuMy0uMiAuNmMtLjIgLjYtLjggMS42LTEuNyAyLjhDMjcuMiAzMDQuMiAxNiAzMzQuOCAxNiAzNjhjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGMwLTMzLjItMTEuMy02My44LTMwLjEtODguMWMtLjktMS4yLTEuNS0yLjItMS43LTIuOGMtLjEtLjMtLjItLjUtLjItLjZWMTEyQzI3MiA1MC4yIDIyMS45IDAgMTYwIDB6bTAgNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6XCJdfSxlaT1ILGZpPUgscmk9SCxsaT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib21iXCIsaWNvbjpbNTEyLDUxMixbMTI4MTYzXSxcImYxZTJcIixcIk00NTkuMSA1Mi40TDQ0Mi42IDYuNUM0NDAuNyAyLjYgNDM2LjUgMCA0MzIuMSAwcy04LjUgMi42LTEwLjQgNi41TDQwNS4yIDUyLjRsLTQ2IDE2LjhjLTQuMyAxLjYtNy4zIDUuOS03LjIgMTAuNGMwIDQuNSAzIDguNyA3LjIgMTAuMmw0NS43IDE2LjggMTYuOCA0NS44YzEuNSA0LjQgNS44IDcuNSAxMC40IDcuNXM4LjktMy4xIDEwLjQtNy41bDE2LjUtNDUuOCA0NS43LTE2LjhjNC4yLTEuNSA3LjItNS43IDcuMi0xMC4yYzAtNC42LTMtOC45LTcuMi0xMC40TDQ1OS4xIDUyLjR6bS0xMzIuNCA1M2MtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTIuOSAyLjlDMjU2LjUgMTAwLjMgMjMyLjcgOTYgMjA4IDk2QzkzLjEgOTYgMCAxODkuMSAwIDMwNFM5My4xIDUxMiAyMDggNTEyczIwOC05My4xIDIwOC0yMDhjMC0yNC43LTQuMy00OC41LTEyLjItNzAuNWwyLjktMi45YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC04MC04MHpNMjAwIDE5MmMtNTcuNCAwLTEwNCA0Ni42LTEwNCAxMDR2OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNnYtOGMwLTc1LjEgNjAuOS0xMzYgMTM2LTEzNmg4YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2aC04elwiXX0saWk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicmVnaXN0ZXJlZFwiLGljb246WzUxMiw1MTIsWzE3NF0sXCJmMjVkXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMTYwIDE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNGg4OGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDI4LTE0LjQgNTIuNy0zNi4zIDY3bDM0LjEgNzUuMWM1LjUgMTIuMSAuMSAyNi4zLTExLjkgMzEuOHMtMjYuMyAuMS0zMS44LTExLjlMMjY4LjkgMjg4SDIwOHY3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyNjQgMTUyem00OCA4OGg2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyMDh2NjR6XCJdfSxiPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFkZHJlc3MtY2FyZFwiLGljb246WzU3Niw1MTIsWzYyMTQwLFwiY29udGFjdC1jYXJkXCIsXCJ2Y2FyZFwiXSxcImYyYmJcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTgwIDI1Nmg2NGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptOTYtOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0em0xMjgtMzJINDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMCA2NEg0OTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0SDQ5NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdfSxvaT1iLG5pPWIsXzQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2NhbGUtdW5iYWxhbmNlZC1mbGlwXCIsaWNvbjpbNjQwLDUxMixbXCJiYWxhbmNlLXNjYWxlLXJpZ2h0XCJdLFwiZjUxNlwiLFwiTTExNy45IDYyLjRjLTE2LjgtNS42LTI1LjgtMjMuNy0yMC4yLTQwLjVzMjMuNy0yNS44IDQwLjUtMjAuMmwxMTMgMzcuN0MyNjUgMTUuOCAyOTAuNyAwIDMyMCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgMy0uMiA1LjktLjUgOC44bDEyMi42IDQwLjljMTYuOCA1LjYgMjUuOCAyMy43IDIwLjIgNDAuNXMtMjMuNyAyNS44LTQwLjUgMjAuMkwzNjYuNCAxNDUuMmMtNC41IDMuMi05LjMgNS45LTE0LjQgOC4yVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMjg4VjE1My4zYy0yMS05LjItMzcuMi0yNy00NC4yLTQ5bC0xMjUuOS00MnptMzk2LjMgMjExYy0uNC0uOC0xLjMtMS4zLTIuMi0xLjNzLTEuNyAuNS0yLjIgMS4zTDQzNS4xIDQxNkg1ODguOUw1MTQuMiAyNzMuM3pNNTEyIDIyNGMxOC44IDAgMzYgMTAuNCA0NC43IDI3bDc3LjggMTQ4LjVjMy4xIDUuOCA2LjEgMTQgNS41IDIzLjhjLS43IDEyLjEtNC44IDM1LjItMjQuOCA1NS4xQzU5NC45IDQ5OC42IDU2Mi4yIDUxMiA1MTIgNTEycy04Mi45LTEzLjQtMTAzLjItMzMuNWMtMjAtMjAtMjQuMi00My0yNC44LTU1LjFjLS42LTkuOCAyLjUtMTggNS41LTIzLjhMNDY3LjMgMjUxYzguNy0xNi42IDI1LjktMjcgNDQuNy0yN3pNMTI4IDE0NGMtLjkgMC0xLjcgLjUtMi4yIDEuM0w1MS4xIDI4OEgyMDQuOUwxMzAuMiAxNDUuM2MtLjQtLjgtMS4zLTEuMy0yLjItMS4zem00NC43LTIxbDc3LjggMTQ4LjVjMy4xIDUuOCA2LjEgMTQgNS41IDIzLjhjLS43IDEyLjEtNC44IDM1LjItMjQuOCA1NS4xQzIxMC45IDM3MC42IDE3OC4yIDM4NCAxMjggMzg0cy04Mi45LTEzLjQtMTAzLjItMzMuNWMtMjAtMjAtMjQuMi00My0yNC44LTU1LjFjLS42LTkuOCAyLjUtMTggNS41LTIzLjhMODMuMyAxMjNDOTIgMTA2LjQgMTA5LjIgOTYgMTI4IDk2czM2IDEwLjQgNDQuNyAyN3pcIl19LEhpPV80LHppPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN1YnNjcmlwdFwiLGljb246WzUxMiw1MTIsW10sXCJmMTJjXCIsXCJNMzIgNjRDMTQuMyA2NCAwIDc4LjMgMCA5NnMxNC4zIDMyIDMyIDMySDQ3LjNsODkuNiAxMjhMNDcuMyAzODRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjRjMTAuNCAwIDIwLjItNS4xIDI2LjItMTMuNkwxNzYgMzExLjhsODUuOCAxMjIuNmM2IDguNiAxNS44IDEzLjYgMjYuMiAxMy42aDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMwNC43TDIxNS4xIDI1Nmw4OS42LTEyOEgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjg4Yy0xMC40IDAtMjAuMiA1LjEtMjYuMiAxMy42TDE3NiAyMDAuMiA5MC4yIDc3LjZDODQuMiA2OS4xIDc0LjQgNjQgNjQgNjRIMzJ6TTQ4MCAzMjBjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRsLTMyIDE2Yy0xNS44IDcuOS0yMi4yIDI3LjEtMTQuMyA0Mi45QzM5MyAzNjEuNSA0MDQuMyAzNjggNDE2IDM2OHY4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzMiAzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYzMjB6XCJdfSwkND17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkaWFtb25kLXR1cm4tcmlnaHRcIixpY29uOls1MTIsNTEyLFtcImRpcmVjdGlvbnNcIl0sXCJmNWViXCIsXCJNMjI3LjcgMTEuN2MxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMGwyMTYgMjE2YzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42bC0yMTYgMjE2Yy0xNS42IDE1LjYtNDAuOSAxNS42LTU2LjYgMGwtMjE2LTIxNmMtMTUuNi0xNS42LTE1LjYtNDAuOSAwLTU2LjZsMjE2LTIxNnptODcuNiAxMzdjLTQuNi00LjYtMTEuNS01LjktMTcuNC0zLjVzLTkuOSA4LjMtOS45IDE0Ljh2NTZIMjI0Yy0zNS4zIDAtNjQgMjguNy02NCA2NHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI4MGMwLTguOCA3LjItMTYgMTYtMTZoNjR2NTZjMCA2LjUgMy45IDEyLjMgOS45IDE0LjhzMTIuOSAxLjEgMTcuNC0zLjVsODAtODBjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTgwLTgwelwiXX0sVmk9JDQsbWk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnVyc3RcIixpY29uOls1MTIsNTEyLFtdLFwiZTRkY1wiLFwiTTM3LjYgNC4yQzI4LTIuMyAxNS4yLTEuMSA3IDdzLTkuNCAyMS0yLjggMzAuNWwxMTIgMTYzLjNMMTYuNiAyMzMuMkM2LjcgMjM2LjQgMCAyNDUuNiAwIDI1NnM2LjcgMTkuNiAxNi42IDIyLjhsMTAzLjEgMzMuNEw2Ni44IDQxMi44Yy00LjkgOS4zLTMuMiAyMC43IDQuMyAyOC4xczE4LjggOS4yIDI4LjEgNC4zbDEwMC42LTUyLjkgMzMuNCAxMDMuMWMzLjIgOS45IDEyLjQgMTYuNiAyMi44IDE2LjZzMTkuNi02LjcgMjIuOC0xNi42bDMzLjQtMTAzLjEgMTAwLjYgNTIuOWM5LjMgNC45IDIwLjcgMy4yIDI4LjEtNC4zczkuMi0xOC44IDQuMy0yOC4xTDM5Mi4zIDMxMi4ybDEwMy4xLTMzLjRjOS45LTMuMiAxNi42LTEyLjQgMTYuNi0yMi44cy02LjctMTkuNi0xNi42LTIyLjhMMzg4LjkgMTk4LjdsMjUuNy03MC40YzMuMi04LjggMS0xOC42LTUuNi0yNS4ycy0xNi40LTguOC0yNS4yLTUuNmwtNzAuNCAyNS43TDI3OC44IDE2LjZDMjc1LjYgNi43IDI2Ni40IDAgMjU2IDBzLTE5LjYgNi43LTIyLjggMTYuNmwtMzIuMyA5OS42TDM3LjYgNC4yelwiXX0sYzM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaG91c2UtbGFwdG9wXCIsaWNvbjpbNjQwLDUxMixbXCJsYXB0b3AtaG91c2VcIl0sXCJlMDY2XCIsXCJNMjE4LjMgOC41YzEyLjMtMTEuMyAzMS4yLTExLjMgNDMuNCAwbDIwOCAxOTJjNi43IDYuMiAxMC4zIDE0LjggMTAuMyAyMy41SDMzNmMtMTkuMSAwLTM2LjMgOC40LTQ4IDIxLjdWMjA4YzAtOC44LTcuMi0xNi0xNi0xNkgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoNjRWNDE2SDExMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMjU2SDMyYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC4xLTM1LjJsMjA4LTE5MnpNMzUyIDMwNFY0NDhINTQ0VjMwNEgzNTJ6bS00OC0xNmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDQ4aDMyYzguOCAwIDE2IDcuMiAxNiAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OEg1NDQgMzUyIDMwNGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhjMC04LjggNy4yLTE2IDE2LTE2aDMyVjI4OHpcIl19LHZpPWMzLGEzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2UtdGlyZWRcIixpY29uOls1MTIsNTEyLFsxMjg1NTUsXCJ0aXJlZFwiXSxcImY1YzhcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0xNjQuNyAzMjguN2MyMi0yMiA1My45LTQwLjcgOTEuMy00MC43czY5LjMgMTguNyA5MS4zIDQwLjdjMTEuMSAxMS4xIDIwLjEgMjMuNCAyNi40IDM1LjRjNi4yIDExLjcgMTAuMyAyNC40IDEwLjMgMzUuOWMwIDUuMi0yLjYgMTAuMi02LjkgMTMuMnMtOS44IDMuNy0xNC43IDEuOGwtMjAuNS03LjdjLTI2LjktMTAuMS01NS41LTE1LjMtODQuMy0xNS4zaC0zLjJjLTI4LjggMC01Ny4zIDUuMi04NC4zIDE1LjNMMTQ5LjYgNDE1Yy00LjkgMS44LTEwLjQgMS4yLTE0LjctMS44cy02LjktNy45LTYuOS0xMy4yYzAtMTEuNiA0LjItMjQuMiAxMC4zLTM1LjljNi4zLTEyIDE1LjMtMjQuMyAyNi40LTM1LjR6bS0zMS4yLTE4Mmw4OS45IDQ3LjljMTAuNyA1LjcgMTAuNyAyMS4xIDAgMjYuOGwtODkuOSA0Ny45Yy03LjkgNC4yLTE3LjUtMS41LTE3LjUtMTAuNWMwLTIuOCAxLTUuNSAyLjgtNy42bDM2LTQzLjItMzYtNDMuMmMtMS44LTIuMS0yLjgtNC44LTIuOC03LjZjMC05IDkuNi0xNC43IDE3LjUtMTAuNXpNMzk2IDE1Ny4xYzAgMi44LTEgNS41LTIuOCA3LjZsLTM2IDQzLjIgMzYgNDMuMmMxLjggMi4xIDIuOCA0LjggMi44IDcuNmMwIDktOS42IDE0LjctMTcuNSAxMC41bC04OS45LTQ3LjljLTEwLjctNS43LTEwLjctMjEuMSAwLTI2LjhsODkuOS00Ny45YzcuOS00LjIgMTcuNSAxLjUgMTcuNSAxMC41elwiXX0sTWk9YTMsdGk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibW9uZXktYmlsbHNcIixpY29uOls2NDAsNTEyLFtdLFwiZTFmM1wiLFwiTTk2IDk2VjMyMGMwIDM1LjMgMjguNyA2NCA2NCA2NEg1NzZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTYwYy0zNS4zIDAtNjQgMjguNy02NCA2NHptNjQgMTYwYzM1LjMgMCA2NCAyOC43IDY0IDY0SDE2MFYyNTZ6TTIyNCA5NmMwIDM1LjMtMjguNyA2NC02NCA2NFY5Nmg2NHpNNTc2IDI1NnY2NEg1MTJjMC0zNS4zIDI4LjctNjQgNjQtNjR6TTUxMiA5Nmg2NHY2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6TTQ0OCAyMDhjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBzMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwek00OCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMDYuNyAwIDEyMFYzNjBjMCA2Ni4zIDUzLjcgMTIwIDEyMCAxMjBINTIwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDEyMGMtMzkuOCAwLTcyLTMyLjItNzItNzJWMTIwelwiXX0saGk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic21vZ1wiLGljb246WzY0MCw1MTIsW10sXCJmNzVmXCIsXCJNMzIgMTQ0YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0SDI5OS4zYzIyLjYgMTkuOSA1Mi4yIDMyIDg0LjcgMzJzNjIuMS0xMi4xIDg0LjctMzJINDk2YzYxLjkgMCAxMTItNTAuMSAxMTItMTEycy01MC4xLTExMi0xMTItMTEyYy0xMC43IDAtMjEgMS41LTMwLjggNC4zQzQ0My44IDI3LjcgNDAxLjEgMCAzNTIgMGMtMzIuNiAwLTYyLjQgMTIuMi04NS4xIDMyLjNDMjQyLjEgMTIuMSAyMTAuNSAwIDE3NiAwQzk2LjUgMCAzMiA2NC41IDMyIDE0NHpNNjE2IDM2OEgyODBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjE2YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0em0tNjQgOTZINDQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDU1MmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHptLTE5MiAwSDI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDM2MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHpNMjI0IDM5MmMwLTEzLjMtMTAuNy0yNC0yNC0yNEg5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgyMDBjMTMuMyAwIDI0LTEwLjcgMjQtMjR6XCJdfSxDaT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjcnV0Y2hcIixpY29uOls1MTIsNTEyLFtdLFwiZjdmN1wiLFwiTTI5Ny40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHptLTk2IDE0NGwtMzQuOCAzNC44Yy0xMi45IDEyLjktMjEuOSAyOS4yLTI1LjggNDcuMUwxMTYuOCAzNDIuOWMtMS4zIDUuOS00LjMgMTEuNC04LjYgMTUuN0w5LjQgNDU3LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOTguOC05OC44YzQuMy00LjMgOS43LTcuMyAxNS43LTguNmwxMDcuNi0yMy45YzE3LjgtNCAzNC4xLTEyLjkgNDcuMS0yNS44bDM0LjctMzQuN2MwIDAgLjEtLjEgLjEtLjFzLjEtLjEgLjEtLjFsNzQuNi03NC42LTQ1LjMtNDUuM0wzMzYgMjQyLjcgMjY5LjMgMTc2bDUyLjEtNTIuMUwyNzYuMSA3OC42bC03NC43IDc0Ljd6TTIyNCAyMjEuM0wyOTAuNyAyODhsLTEyLjIgMTIuMmMtNC4zIDQuMy05LjcgNy4zLTE1LjcgOC42bC03Ni43IDE3IDE3LTc2LjdjMS4zLTUuOSA0LjMtMTEuNCA4LjYtMTUuN0wyMjQgMjIxLjN6XCJdfSxBPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZvbnQtYXdlc29tZVwiLGljb246WzQ0OCw1MTIsWzYyNTAxLDYyNjk0LFwiZm9udC1hd2Vzb21lLWZsYWdcIixcImZvbnQtYXdlc29tZS1sb2dvLWZ1bGxcIl0sXCJmMmI0XCIsXCJNNDQ4IDQ4VjM4NGMtNjMuMSAyMi41LTgyLjMgMzItMTE5LjUgMzJjLTYyLjggMC04Ni42LTMyLTE0OS4zLTMyYy0yMC42IDAtMzYuNiAzLjYtNTEuMiA4LjJ2LTY0YzE0LjYtNC42IDMwLjYtOC4yIDUxLjItOC4yYzYyLjcgMCA4Ni41IDMyIDE0OS4zIDMyYzIwLjQgMCAzNS42LTMgNTUuNS05LjN2LTIwOGMtMTkuOSA2LjMtMzUuMSA5LjMtNTUuNSA5LjNjLTYyLjggMC04Ni42LTMyLTE0OS4zLTMyYy01MC44IDAtNzQuOSAyMC42LTExNS4yIDI4LjdWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyczMyIDE0LjMgMzIgMzJWNzYuN2M0MC4zLTggNjQuNC0yOC43IDExNS4yLTI4LjdjNjIuNyAwIDg2LjUgMzIgMTQ5LjMgMzJjMzcuMSAwIDU2LjQtOS41IDExOS41LTMyelwiXX0sTGk9QSxwaT1BLEI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2xvdWQtYXJyb3ctdXBcIixpY29uOls2NDAsNTEyLFs2MjMzOCxcImNsb3VkLXVwbG9hZFwiLFwiY2xvdWQtdXBsb2FkLWFsdFwiXSxcImYwZWVcIixcIk0xNDQgNDgwQzY0LjUgNDgwIDAgNDE1LjUgMCAzMzZjMC02Mi44IDQwLjItMTE2LjIgOTYuMi0xMzUuOWMtLjEtMi43LS4yLTUuNC0uMi04LjFjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBjNTkuMyAwIDExMSAzMi4yIDEzOC43IDgwLjJDNDA5LjkgMTAyIDQyOC4zIDk2IDQ0OCA5NmM1MyAwIDk2IDQzIDk2IDk2YzAgMTIuMi0yLjMgMjMuOC02LjQgMzQuNkM1OTYgMjM4LjQgNjQwIDI5MC4xIDY0MCAzNTJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhIMTQ0em03OS0yMTdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzOS0zOVYzOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYyNTcuOWwzOSAzOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTgwLTgwYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtODAgODB6XCJdfSxkaT1CLHVpPUIseGk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGFsZXR0ZVwiLGljb246WzUxMiw1MTIsWzEyNzkxMl0sXCJmNTNmXCIsXCJNNTEyIDI1NmMwIC45IDAgMS44IDAgMi43Yy0uNCAzNi41LTMzLjYgNjEuMy03MC4xIDYxLjNIMzQ0Yy0yNi41IDAtNDggMjEuNS00OCA0OGMwIDMuNCAuNCA2LjcgMSA5LjljMi4xIDEwLjIgNi41IDIwIDEwLjggMjkuOWM2LjEgMTMuOCAxMi4xIDI3LjUgMTIuMSA0MmMwIDMxLjgtMjEuNiA2MC43LTUzLjQgNjJjLTMuNSAuMS03IC4yLTEwLjYgLjJDMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpNMTI4IDI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6bTAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpNMjg4IDk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptOTYgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl19LGdpPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93cy10dXJuLXJpZ2h0XCIsaWNvbjpbNTEyLDUxMixbXSxcImU0YzBcIixcIk0zMjkuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wzNzAuNyAxNjBIMTYwYy0zNS4zIDAtNjQgMjguNy02NCA2NHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyMjRDMzIgMTUzLjMgODkuMyA5NiAxNjAgOTZIMzcwLjdMMzI5LjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6bS05NiAyNTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyNzQuNyA0MTZIMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDhjMC01MyA0My05NiA5Ni05NkgyNzQuN2wtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3pcIl19LFNpPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZlc3RcIixpY29uOls0NDgsNTEyLFtdLFwiZTA4NVwiLFwiTTIwNy4xIDIzNy40TDE1MS4yIDY5LjdDMTY4LjYgNzkuNyAxOTIuNiA4OCAyMjQgODhzNTUuNC04LjMgNzIuOC0xOC4zTDIyNi41IDI4MC42Yy0xLjYgNC45LTIuNSAxMC0yLjUgMTUuMlY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhINDAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjI3MC41YzAtOS41LTIuOC0xOC43LTguMS0yNi42bC00Ny45LTcxLjhjLTUuMy03LjktOC4xLTE3LjEtOC4xLTI2LjZWMTI4IDU0LjMgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhoLTQuNWMtLjIgMC0uNCAwLS42IDBjLS40IDAtLjggMC0xLjIgMEMzMTEgMCAyOTUuNyA5LjcgMjg1LjcgMTguOEMyNzYuNCAyNy4yIDI1Ny4yIDQwIDIyNCA0MHMtNTIuNC0xMi44LTYxLjctMjEuMkMxNTIuMyA5LjcgMTM3IDAgMTE4LjMgMGMtLjQgMC0uOCAwLTEuMiAwYy0uMiAwLS40IDAtLjYgMEgxMTJDODUuNSAwIDY0IDIxLjUgNjQgNDh2Ni4zVjEyOHYxNy41YzAgOS41LTIuOCAxOC43LTguMSAyNi42TDguMSAyNDMuOUMyLjggMjUxLjggMCAyNjEuMSAwIDI3MC41VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgxNzZjOS45IDAgMTktMyAyNi43LTguMUMxOTUuOSA0OTIuMiAxOTIgNDc4LjUgMTkyIDQ2NFYyOTUuOGMwLTguNiAxLjQtMTcuMSA0LjEtMjUuM2wxMS0zMy4xek0zNDcuMyAzNTYuN2w0OCA0OGM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC00OC00OGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwem0tMjk0LjYgNDhsNDgtNDhjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42bC00OCA0OGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNnpcIl19LE5pPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZlcnJ5XCIsaWNvbjpbNTc2LDUxMixbXSxcImU0ZWFcIixcIk0yMjQgMEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJoNzUuMWMyMC42IDAgMzEuNiAyNC4zIDE4LjEgMzkuOEw0NTYgOTZIMTIwTDk4LjggNzEuOEM4NS4zIDU2LjMgOTYuMyAzMiAxMTYuOSAzMkgxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTk2IDEyOEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMjgzLjVjMCAxMy4zLTQuMiAyNi4zLTExLjkgMzcuMmwtNTEuNCA3MS45Yy0xLjkgMS4xLTMuNyAyLjItNS41IDMuNWMtMTUuNSAxMC43LTM0IDE4LTUxIDE5LjlIMzc1LjZjLTE3LjEtMS44LTM1LTktNTAuOC0xOS45Yy0yMi4xLTE1LjUtNTEuNi0xNS41LTczLjcgMGMtMTQuOCAxMC4yLTMyLjUgMTgtNTAuNiAxOS45SDE4My45Yy0xNy0xLjgtMzUuNi05LjItNTEtMTkuOWMtMS44LTEuMy0zLjctMi40LTUuNi0zLjVMNzUuOSAzMjAuN0M2OC4yIDMwOS44IDY0IDI5Ni44IDY0IDI4My41VjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMzIgNjR2OTZINDQ4VjE5MkgxMjh6TTMwNi41IDQyMS45QzMyOSA0MzcuNCAzNTYuNSA0NDggMzg0IDQ0OGMyNi45IDAgNTUuMy0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA1MDEuNyA0MTcgNTEyIDM4NCA1MTJjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43bDAgMEMxMzYuNyA0MzcuMiAxNjUuMSA0NDggMTkyIDQ0OGMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHpcIl19LHdpPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93cy1kb3duLXRvLXBlb3BsZVwiLGljb246WzY0MCw1MTIsW10sXCJlNGI5XCIsXCJNMTQ0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjE0Mi4xTDk3IDExOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2NC02NGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0yMyAyM1YyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMzYwIDIwMGMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDB6TTE4NCAyOTZjMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwem0zMTIgNDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MHpNMjAwIDQ0MS41bDI2LjkgNDkuOWM2LjMgMTEuNyAyMC44IDE2IDMyLjUgOS44czE2LTIwLjggOS44LTMyLjVsLTM2LjMtNjcuNWMxLjctMS43IDMuMi0zLjYgNC4zLTUuOEwyNjQgMzQ1LjVWNDAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM0NS41bDI2LjkgNDkuOWMxLjIgMi4yIDIuNiA0LjEgNC4zIDUuOGwtMzYuMyA2Ny41Yy02LjMgMTEuNy0xLjkgMjYuMiA5LjggMzIuNXMyNi4yIDEuOSAzMi41LTkuOEw0NDAgNDQxLjVWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjQ0MS41bDI2LjkgNDkuOWM2LjMgMTEuNyAyMC44IDE2IDMyLjUgOS44czE2LTIwLjggOS44LTMyLjVsLTM3LjktNzAuM2MtMTUuMy0yOC41LTQ1LjEtNDYuMy03Ny41LTQ2LjNINDg2LjJjLTE2LjMgMC0zMS45IDQuNS00NS40IDEyLjZsLTMzLjYtNjIuM2MtMTUuMy0yOC41LTQ1LjEtNDYuMy03Ny41LTQ2LjNIMzEwLjJjLTMyLjQgMC02Mi4xIDE3LjgtNzcuNSA0Ni4zbC0zMy42IDYyLjNjLTEzLjUtOC4xLTI5LjEtMTIuNi00NS40LTEyLjZIMTM0LjJjLTMyLjQgMC02Mi4xIDE3LjgtNzcuNSA0Ni4zTDE4LjkgNDY4LjZjLTYuMyAxMS43LTEuOSAyNi4yIDkuOCAzMi41czI2LjIgMS45IDMyLjUtOS44TDg4IDQ0MS41VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg0OGMxNy43IDAgMzItMTQuMyAzMi0zMlY0NDEuNXpNNDE1IDE1M2w2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw2NC02NGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0yMyAyM1YyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFYxNDIuMWwtMjMtMjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjl6XCJdfSxzMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzZWVkbGluZ1wiLGljb246WzUxMiw1MTIsWzEyNzc5MyxcInNwcm91dFwiXSxcImY0ZDhcIixcIk01MTIgNjRjMCAxMTMuNi04NC42IDIwNy41LTE5NC4yIDIyMmMtNy4xLTUzLjQtMzAuNi0xMDEuNi02NS4zLTEzOS4zQzI5MC44IDc4LjMgMzY0IDMyIDQ0OCAzMmgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJINjRjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNHYzMiA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJDMTAwLjMgMzUyIDAgMjUxLjcgMCAxMjh6XCJdfSxraT1zMyxlMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsZWZ0LXJpZ2h0XCIsaWNvbjpbNTEyLDUxMixbODU5NixcImFycm93cy1hbHQtaFwiXSxcImYzMzdcIixcIk01MDQuMyAyNzMuNmM0LjktNC41IDcuNy0xMC45IDcuNy0xNy42cy0yLjgtMTMtNy43LTE3LjZsLTExMi0xMDRjLTctNi41LTE3LjItOC4yLTI1LjktNC40cy0xNC40IDEyLjUtMTQuNCAyMmwwIDU2LTE5MiAwIDAtNTZjMC05LjUtNS43LTE4LjItMTQuNC0yMnMtMTguOS0yLjEtMjUuOSA0LjRsLTExMiAxMDRDMi44IDI0MyAwIDI0OS4zIDAgMjU2czIuOCAxMyA3LjcgMTcuNmwxMTIgMTA0YzcgNi41IDE3LjIgOC4yIDI1LjkgNC40czE0LjQtMTIuNSAxNC40LTIybDAtNTYgMTkyIDAgMCA1NmMwIDkuNSA1LjcgMTguMiAxNC40IDIyczE4LjkgMi4xIDI1LjktNC40bDExMi0xMDR6XCJdfSxiaT1lMyxBaT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib3hlcy1wYWNraW5nXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0YzdcIixcIk0yNTYgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhINTkyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgzODEuM2MxLjgtNSAyLjctMTAuNCAyLjctMTZWMjUzLjNjMTguNi02LjYgMzItMjQuNCAzMi00NS4zVjE3NmMwLTI2LjUtMjEuNS00OC00OC00OEgyNTZWNDh6TTU3MS4zIDM0Ny4zYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC02NC02NGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTY0IDY0Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBMNDgwIDMxMC42VjQzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjMxMC42bDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHpNMCAxNzZjMC04LjggNy4yLTE2IDE2LTE2SDM2OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE2Yy04LjggMC0xNi03LjItMTYtMTZWMTc2em0zNTIgODBWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYyNTZIMzUyek0xNDQgMzIwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE0NHpcIl19LGYzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNpcmNsZS1hcnJvdy1sZWZ0XCIsaWNvbjpbNTEyLDUxMixbXCJhcnJvdy1jaXJjbGUtbGVmdFwiXSxcImYwYThcIixcIk01MTIgMjU2QzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJzMjU2LTExNC42IDI1Ni0yNTZ6TTIxNSAxMjdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC03MSA3MUwzOTIgMjMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yMTQuMSAwIDcxIDcxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMMTAzIDI3M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMMjE1IDEyN3pcIl19LEJpPWYzLFRpPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImdyb3VwLWFycm93cy1yb3RhdGVcIixpY29uOls1MTIsNTEyLFtdLFwiZTRmNlwiLFwiTTIwMS4xIDcxLjljMTYuOS01IDI2LjYtMjIuOSAyMS41LTM5LjhzLTIyLjktMjYuNi0zOS44LTIxLjVjLTIxLjUgNi40LTQxLjggMTUuNS02MC42IDI3QzExNC4zIDM0IDEwNS40IDMyIDk2IDMyQzYwLjcgMzIgMzIgNjAuNyAzMiA5NmMwIDkuNCAyIDE4LjMgNS42IDI2LjNjLTExLjUgMTguNy0yMC42IDM5LTI3IDYwLjZjLTUgMTYuOSA0LjYgMzQuOCAyMS41IDM5LjhzMzQuOC00LjYgMzkuOC0yMS41YzQuMy0xNC42IDEwLjQtMjguNSAxNy45LTQxLjRjMiAuMiA0LjEgLjMgNi4xIC4zYzM1LjMgMCA2NC0yOC43IDY0LTY0YzAtMi4xLS4xLTQuMS0uMy02LjFjMTIuOS03LjUgMjYuOC0xMy42IDQxLjQtMTcuOXptMTI4LTYxLjNjLTE2LjktNS0zNC44IDQuNi0zOS44IDIxLjVzNC42IDM0LjggMjEuNSAzOS44YzE0LjYgNC4zIDI4LjUgMTAuNCA0MS40IDE3LjljLS4yIDItLjMgNC4xLS4zIDYuMWMwIDM1LjMgMjguNyA2NCA2NCA2NGMyLjEgMCA0LjEtLjEgNi4yLS4zYzcuNSAxMi45IDEzLjYgMjYuOCAxNy45IDQxLjRjNSAxNi45IDIyLjkgMjYuNiAzOS44IDIxLjVzMjYuNi0yMi45IDIxLjUtMzkuOGMtNi40LTIxLjUtMTUuNS00MS44LTI3LTYwLjZjMy42LTggNS42LTE2LjkgNS42LTI2LjNjMC0zNS4zLTI4LjctNjQtNjQtNjRjLTkuNCAwLTE4LjMgMi0yNi4zIDUuNmMtMTguNy0xMS41LTM5LTIwLjYtNjAuNi0yN3pNNzEuOSAzMTAuOWMtNS0xNi45LTIyLjktMjYuNi0zOS44LTIxLjVzLTI2LjYgMjIuOS0yMS41IDM5LjhjNi40IDIxLjUgMTUuNSA0MS44IDI3IDYwLjZDMzQgMzk3LjcgMzIgNDA2LjYgMzIgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0YzkuNCAwIDE4LjMtMiAyNi4zLTUuNmMxOC43IDExLjUgMzkgMjAuNiA2MC42IDI3YzE2LjkgNSAzNC44LTQuNiAzOS44LTIxLjVzLTQuNi0zNC44LTIxLjUtMzkuOGMtMTQuNi00LjMtMjguNS0xMC40LTQxLjQtMTcuOWMuMi0yIC4zLTQuMSAuMy02LjJjMC0zNS4zLTI4LjctNjQtNjQtNjRjLTIuMSAwLTQuMSAuMS02LjIgLjNjLTcuNS0xMi45LTEzLjYtMjYuOC0xNy45LTQxLjR6bTQyOS40IDE4LjNjNS0xNi45LTQuNi0zNC44LTIxLjUtMzkuOHMtMzQuOCA0LjYtMzkuOCAyMS41Yy00LjMgMTQuNi0xMC40IDI4LjUtMTcuOSA0MS40Yy0yLS4yLTQuMS0uMy02LjItLjNjLTM1LjMgMC02NCAyOC43LTY0IDY0YzAgMi4xIC4xIDQuMSAuMyA2LjJjLTEyLjkgNy41LTI2LjggMTMuNi00MS40IDE3LjljLTE2LjkgNS0yNi42IDIyLjktMjEuNSAzOS44czIyLjkgMjYuNiAzOS44IDIxLjVjMjEuNS02LjQgNDEuOC0xNS41IDYwLjYtMjdjOCAzLjYgMTYuOSA1LjYgMjYuMyA1LjZjMzUuMyAwIDY0LTI4LjcgNjQtNjRjMC05LjQtMi0xOC4zLTUuNi0yNi4zYzExLjUtMTguNyAyMC42LTM5IDI3LTYwLjZ6TTE5Mi44IDI1Ni44YzAtMTUuNiA1LjYtMjkuOSAxNC45LTQxLjFMMjIzIDIzMWM2LjYgNi42IDE3LjggMS45IDE3LjgtNy40VjE2My4yYzAtNS43LTQuNy0xMC40LTEwLjQtMTAuNEgxNjkuOWMtOS4zIDAtMTMuOSAxMS4yLTcuNCAxNy44bDExLjIgMTEuMmMtMTcuOSAxOS44LTI4LjkgNDYuMi0yOC45IDc1LjFjMCA0My42IDI0LjkgODEuMyA2MS4xIDk5LjhjMTEuOCA2IDI2LjMgMS40IDMyLjMtMTAuNHMxLjQtMjYuMy0xMC40LTMyLjNjLTIwLjgtMTAuNi0zNC45LTMyLjItMzQuOS01N3ptOTMuMS01OC42YzIwLjggMTAuNiAzNC45IDMyLjIgMzQuOSA1N2MwIDE1LjYtNS42IDI5LjktMTQuOSA0MS4xTDI5MC42IDI4MWMtNi42LTYuNi0xNy44LTEuOS0xNy44IDcuNHY2MC41YzAgNS43IDQuNyAxMC40IDEwLjQgMTAuNGg2MC41YzkuMyAwIDEzLjktMTEuMiA3LjQtMTcuOGwtMTEuMi0xMS4yYzE3LjktMTkuOCAyOC45LTQ2LjIgMjguOS03NS4xYzAtNDMuNi0yNC45LTgxLjMtNjEuMS05OS44Yy0xMS44LTYtMjYuMy0xLjQtMzIuMyAxMC40cy0xLjQgMjYuMyAxMC40IDMyLjN6XCJdfSx5aT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib3dsLWZvb2RcIixpY29uOls1MTIsNTEyLFtdLFwiZTRjNlwiLFwiTTAgMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0Yy41IDAgMS4xIDAgMS42IDBDNzMgOTEuNSAxMDUuMyA2NCAxNDQgNjRjMTUgMCAyOSA0LjEgNDAuOSAxMS4yQzE5OC4yIDQ5LjYgMjI1LjEgMzIgMjU2IDMyczU3LjggMTcuNiA3MS4xIDQzLjJDMzM5IDY4LjEgMzUzIDY0IDM2OCA2NGMzOC43IDAgNzEgMjcuNSA3OC40IDY0Yy41IDAgMS4xIDAgMS42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAxMS43LTMuMSAyMi42LTguNiAzMkg4LjZDMy4xIDIxNC42IDAgMjAzLjcgMCAxOTJ6bTAgOTEuNEMwIDI2OC4zIDEyLjMgMjU2IDI3LjQgMjU2SDQ4NC42YzE1LjEgMCAyNy40IDEyLjMgMjcuNCAyNy40YzAgNzAuNS00NC40IDEzMC43LTEwNi43IDE1NC4xTDQwMy41IDQ1MmMtMiAxNi0xNS42IDI4LTMxLjggMjhIMTQwLjJjLTE2LjEgMC0yOS44LTEyLTMxLjgtMjhsLTEuOC0xNC40QzQ0LjQgNDE0LjEgMCAzNTMuOSAwIDI4My40elwiXX0sUGk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FuZHktY2FuZVwiLGljb246WzUxMiw1MTIsW10sXCJmNzg2XCIsXCJNMzQ4LjggMTMxLjVjMy43LTIuMyA3LjktMy41IDEyLjItMy41YzEyLjcgMCAyMyAxMC4zIDIzIDIzdjUuNmMwIDkuOS01LjEgMTkuMS0xMy41IDI0LjNMMzAuMSAzOTMuN0MuMSA0MTIuNS05IDQ1MS45IDkuNyA0ODEuOXM1OC4yIDM5LjEgODguMiAyMC40TDQzOC40IDI4OS41YzQ1LjgtMjguNiA3My42LTc4LjggNzMuNi0xMzIuOFYxNTFDNTEyIDY3LjYgNDQ0LjQgMCAzNjEgMGMtMjguMyAwLTU2IDgtODAuMSAyM0wyNTQuMSAzOS43Yy0zMCAxOC43LTM5LjEgNTguMi0yMC40IDg4LjJzNTguMiAzOS4xIDg4LjIgMjAuNGwyNi44LTE2Ljh6TTI5OC40IDQ5LjhjOS4yLTUuNyAxOS4xLTEwLjEgMjkuNC0xMy4xTDM0OCA5Ny41Yy01LjcgMS40LTExLjIgMy43LTE2LjMgNi44bC0xMi42IDcuOUwyOTguNCA0OS44em04OC41IDUyLjdsNDYuMi00Ni4yYzguNSA2LjUgMTYuMSAxNC4xIDIyLjYgMjIuNmwtNDYuMiA0Ni4yYy01LjEtOS42LTEzLTE3LjUtMjIuNi0yMi42em0yOC45IDU5LjNsNjEuNiAyMC41Yy0yLjIgMTAuNS01LjggMjAuNy0xMC41IDMwLjJsLTYyLTIwLjdjNi4yLTguOCAxMC4xLTE5LjEgMTEtMzAuMXptLTg2LjEgODIuNWw2MC40IDM3LjctMzAuMiAxOC45LTYwLjQtMzcuNyAzMC4yLTE4Ljl6bS0xMDcuMiA2N2w2MC40IDM3LjctMzAuMiAxOC45LTYwLjQtMzcuNyAzMC4yLTE4Ljl6TTExOS4zIDM3NS43bDYwLjQgMzcuNy0zMC4yIDE4LjlMODkuMSAzOTQuNmwzMC4yLTE4Ljl6XCJdfSxUPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93LWRvd24td2lkZS1zaG9ydFwiLGljb246WzU3Niw1MTIsW1wic29ydC1hbW91bnQtYXNjXCIsXCJzb3J0LWFtb3VudC1kb3duXCJdLFwiZjE2MFwiLFwiTTE1MS42IDQ2OS42QzE0NS41IDQ3Ni4yIDEzNyA0ODAgMTI4IDQ4MHMtMTcuNS0zLjgtMjMuNi0xMC40bC04OC05NmMtMTEuOS0xMy0xMS4xLTMzLjMgMi00NS4yczMzLjMtMTEuMSA0NS4yIDJMOTYgMzY1LjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYzNjUuN2wzMi40LTM1LjRjMTEuOS0xMyAzMi4yLTEzLjkgNDUuMi0yczEzLjkgMzIuMiAyIDQ1LjJsLTg4IDk2ek0zMjAgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMHptMC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwem0wLTEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwelwiXX0sRmk9VCxEaT1ULHIzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNsb3VkLWJvbHRcIixpY29uOls1MTIsNTEyLFsxMjc3ODUsXCJ0aHVuZGVyc3Rvcm1cIl0sXCJmNzZjXCIsXCJNMCAyMjRjMCA1MyA0MyA5NiA5NiA5Nmg0Ny4yTDI5MCAyMDIuNWMxNy42LTE0LjEgNDIuNi0xNCA2MC4yIC4yczIyLjggMzguNiAxMi44IDU4LjhMMzMzLjcgMzIwSDM1Mmg2NGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmMtLjUgMC0xLjEgMC0xLjYgMGMxLjEtNS4yIDEuNi0xMC41IDEuNi0xNmMwLTQ0LjItMzUuOC04MC04MC04MGMtMjQuMyAwLTQ2LjEgMTAuOS02MC44IDI4QzI1Ni41IDI0LjMgMjE5LjEgMCAxNzYgMEMxMTQuMSAwIDY0IDUwLjEgNjQgMTEyYzAgNy4xIC43IDE0LjEgMS45IDIwLjhDMjcuNiAxNDUuNCAwIDE4MS41IDAgMjI0em0zMzAuMSAzLjZjLTUuOC00LjctMTQuMi00LjctMjAuMS0uMWwtMTYwIDEyOGMtNS4zIDQuMi03LjQgMTEuNC01LjEgMTcuOHM4LjMgMTAuNyAxNS4xIDEwLjdoNzAuMUwxNzcuNyA0ODguOGMtMy40IDYuNy0xLjYgMTQuOSA0LjMgMTkuNnMxNC4yIDQuNyAyMC4xIC4xbDE2MC0xMjhjNS4zLTQuMiA3LjQtMTEuNCA1LjEtMTcuOHMtOC4zLTEwLjctMTUuMS0xMC43SDI4MS45bDUyLjQtMTA0LjhjMy40LTYuNyAxLjYtMTQuOS00LjItMTkuNnpcIl19LFJpPXIzLGwzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRleHQtc2xhc2hcIixpY29uOls2NDAsNTEyLFtcInJlbW92ZS1mb3JtYXRcIl0sXCJmODdkXCIsXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN0wzNTUuNyAyNTMuNSA0MDAuMiA5Nkg1MDNMNDk3IDEyMC4yYy00LjMgMTcuMSA2LjEgMzQuNSAyMy4zIDM4LjhzMzQuNS02LjEgMzguOC0yMy4zbDE2LTY0YzIuNC05LjYgLjItMTkuNy01LjgtMjcuNVM1NTMuOSAzMiA1NDQgMzJIMzc2LjFoLS4zSDE5MmMtMTQuNyAwLTI3LjUgMTAtMzEgMjQuMmwtOS4zIDM3LjNMMzguOCA1LjF6bTE2OCAxMzEuN2MuMS0uMyAuMi0uNyAuMy0xTDIxNyA5NkgzMzMuN0wzMDEuMyAyMTAuOGwtOTQuNS03NC4xek0yNDMuMyA0MTZIMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMDkuOGwxNy42LTYyLjFMMjcyLjkgMzExIDI0My4zIDQxNnpcIl19LFVpPWwzLGkzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2Utc21pbGUtd2lua1wiLGljb246WzUxMiw1MTIsWzEyODUyMSxcInNtaWxlLXdpbmtcIl0sXCJmNGRhXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMTY0LjEgMzI1LjVDMTgyIDM0Ni4yIDIxMi42IDM2OCAyNTYgMzY4czc0LTIxLjggOTEuOS00Mi41YzUuOC02LjcgMTUuOS03LjQgMjIuNi0xLjZzNy40IDE1LjkgMS42IDIyLjZDMzQ5LjggMzcyLjEgMzExLjEgNDAwIDI1NiA0MDBzLTkzLjgtMjcuOS0xMTYuMS01My41Yy01LjgtNi43LTUuMS0xNi44IDEuNi0yMi42czE2LjgtNS4xIDIyLjYgMS42ek0yMDguNCAyMDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem05Mi40IDI1LjZjLTUuMyA3LjEtMTUuMyA4LjUtMjIuNCAzLjJzLTguNS0xNS4zLTMuMi0yMi40YzMwLjQtNDAuNSA5MS4yLTQwLjUgMTIxLjYgMGM1LjMgNy4xIDMuOSAxNy4xLTMuMiAyMi40cy0xNy4xIDMuOS0yMi40LTMuMmMtMTcuNi0yMy41LTUyLjgtMjMuNS03MC40IDB6XCJdfSxxaT1pMyxHaT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLXdvcmRcIixpY29uOlszODQsNTEyLFtdLFwiZjFjMlwiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNMTExIDI1Ny4xbDI2LjggODkuMiAzMS42LTkwLjNjMy40LTkuNiAxMi41LTE2LjEgMjIuNy0xNi4xczE5LjMgNi40IDIyLjcgMTYuMWwzMS42IDkwLjNMMjczIDI1Ny4xYzMuOC0xMi43IDE3LjItMTkuOSAyOS45LTE2LjFzMTkuOSAxNy4yIDE2LjEgMjkuOWwtNDggMTYwYy0zIDEwLTEyLjEgMTYuOS0yMi40IDE3LjFzLTE5LjgtNi4yLTIzLjItMTYuMUwxOTIgMzM2LjZsLTMzLjMgOTUuM2MtMy40IDkuOC0xMi44IDE2LjMtMjMuMiAxNi4xcy0xOS41LTcuMS0yMi40LTE3LjFsLTQ4LTE2MGMtMy44LTEyLjcgMy40LTI2LjEgMTYuMS0yOS45czI2LjEgMy40IDI5LjkgMTYuMXpcIl19LFdpPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpbGUtcG93ZXJwb2ludFwiLGljb246WzM4NCw1MTIsW10sXCJmMWM0XCIsXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek0xMzYgMjQwaDY4YzQyIDAgNzYgMzQgNzYgNzZzLTM0IDc2LTc2IDc2SDE2MHYzMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYzNjggMjY0YzAtMTMuMyAxMC43LTI0IDI0LTI0em02OCAxMDRjMTUuNSAwIDI4LTEyLjUgMjgtMjhzLTEyLjUtMjgtMjgtMjhIMTYwdjU2aDQ0elwiXX0sbzM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3dzLWxlZnQtcmlnaHRcIixpY29uOls1MTIsNTEyLFtcImFycm93cy1oXCJdLFwiZjA3ZVwiLFwiTTQwNi42IDM3NC42bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC05Ni05NmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNDAyLjcgMjI0bC0yOTMuNSAwIDQxLjQtNDEuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4bDI5My41IDAtNDEuNCA0MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwelwiXX0sRWk9bzMsSWk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaG91c2UtbG9ja1wiLGljb246WzY0MCw1MTIsW10sXCJlNTEwXCIsXCJNMzg0IDQ4MGMwIDExLjcgMy4xIDIyLjYgOC42IDMySDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzgzLjdjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJIOTYuMWMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjg3LjZIMzJjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDQ5MC43IDE2Ni4zQzQ0Ny4yIDE4MS43IDQxNiAyMjMuMiA0MTYgMjcydjI0LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRWNDgwek01MjggMjQwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY0OGg2NFYyNzJjMC0xNy43LTE0LjMtMzItMzItMzJ6bS04MCAzMmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwdjQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM1MmMwLTE3LjcgMTQuMy0zMiAzMi0zMlYyNzJ6XCJdfSx5PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNsb3VkLWFycm93LWRvd25cIixpY29uOls2NDAsNTEyLFs2MjMzNyxcImNsb3VkLWRvd25sb2FkXCIsXCJjbG91ZC1kb3dubG9hZC1hbHRcIl0sXCJmMGVkXCIsXCJNMTQ0IDQ4MEM2NC41IDQ4MCAwIDQxNS41IDAgMzM2YzAtNjIuOCA0MC4yLTExNi4yIDk2LjItMTM1LjljLS4xLTIuNy0uMi01LjQtLjItOC4xYzAtODguNCA3MS42LTE2MCAxNjAtMTYwYzU5LjMgMCAxMTEgMzIuMiAxMzguNyA4MC4yQzQwOS45IDEwMiA0MjguMyA5NiA0NDggOTZjNTMgMCA5NiA0MyA5NiA5NmMwIDEyLjItMi4zIDIzLjgtNi40IDM0LjZDNTk2IDIzOC40IDY0MCAyOTAuMSA2NDAgMzUyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4SDE0NHptNzktMTY3bDgwIDgwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDgwLTgwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTM5IDM5VjE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFYzMTguMWwtMzktMzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjl6XCJdfSxPaT15LFhpPXksUWk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hpbGRyZW5cIixpY29uOls2NDAsNTEyLFtdLFwiZTRlMVwiLFwiTTE2MCAxMjhjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHpNODggNDgwVjQwMEg3MC4yYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWwzMS4xLTkzLjRMNTcuNSAzMjMuM2MtMTAuNyAxNC4xLTMwLjggMTYuOC00NC44IDYuMnMtMTYuOC0zMC43LTYuMi00NC44TDY1LjQgMjA3YzIyLjQtMjkuNiA1Ny41LTQ3IDk0LjYtNDdzNzIuMiAxNy40IDk0LjYgNDdsNTguOSA3Ny43YzEwLjcgMTQuMSA3LjkgMzQuMi02LjIgNDQuOHMtMzQuMiA3LjktNDQuOC02LjJsLTI4LjYtMzcuOEwyNjUgMzc4LjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xSDIzMnY4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0MDBIMTUydjgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyek00ODAgMTI4Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6bS04IDI1NnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMDAuNUwzOTUuMSAzMjFjLTkuNCAxNS0yOS4yIDE5LjQtNDQuMSAxMHMtMTkuNC0yOS4yLTEwLTQ0LjFsNTEuNy04Mi4xYzE3LjYtMjcuOSA0OC4zLTQ0LjkgODEuMi00NC45aDEyLjNjMzMgMCA2My43IDE2LjkgODEuMiA0NC45TDYxOS4xIDI4N2M5LjQgMTUgNC45IDM0LjctMTAgNDQuMXMtMzQuNyA0LjktNDQuMS0xMEw1NTIgMzAwLjVWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NEg0NzJ6XCJdfSxuMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGFsa2JvYXJkXCIsaWNvbjpbNTc2LDUxMixbXCJibGFja2JvYXJkXCJdLFwiZjUxYlwiLFwiTTk2IDMyQzYwLjcgMzIgMzIgNjAuNyAzMiA5NlYzODRIOTZWOTZsMzg0IDBWMzg0aDY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDk2ek0yMjQgMzg0djMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0MTZWMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6XCJdfSxLaT1uMyxIMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLWxhcmdlLXNsYXNoXCIsaWNvbjpbNjQwLDUxMixbXCJ1c2VyLWFsdC1zbGFzaFwiXSxcImY0ZmFcIixcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDM4MS45IDI3NGM0OC41LTIzLjIgODIuMS03Mi43IDgyLjEtMTMwQzQ2NCA2NC41IDM5OS41IDAgMzIwIDBDMjUwLjQgMCAxOTIuNCA0OS4zIDE3OC45IDExNC45TDM4LjggNS4xek0yODQuMyAzMjBoLTU5QzEzNi4yIDMyMCA2NCAzOTIuMiA2NCA0ODEuM2MwIDE3IDEzLjggMzAuNyAzMC43IDMwLjdINTI4TDI4NC4zIDMyMHpcIl19LGppPUgzLEppPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImVudmVsb3BlLW9wZW5cIixpY29uOls1MTIsNTEyLFs2MjEzNV0sXCJmMmI2XCIsXCJNNjQgMjA4LjFMMjU2IDY1LjkgNDQ4IDIwOC4xdjQ3LjRMMjg5LjUgMzczYy05LjcgNy4yLTIxLjQgMTEtMzMuNSAxMXMtMjMuOC0zLjktMzMuNS0xMUw2NCAyNTUuNVYyMDguMXpNMjU2IDBjLTEyLjEgMC0yMy44IDMuOS0zMy41IDExTDI1LjkgMTU2LjdDOS42IDE2OC44IDAgMTg3LjggMCAyMDguMVY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjIwOC4xYzAtMjAuMy05LjYtMzkuNC0yNS45LTUxLjRMMjg5LjUgMTFDMjc5LjggMy45IDI2OC4xIDAgMjU2IDB6XCJdfSx6Mz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW5kc2hha2Utc2ltcGxlLXNsYXNoXCIsaWNvbjpbNjQwLDUxMixbXCJoYW5kc2hha2UtYWx0LXNsYXNoXCJdLFwiZTA1ZlwiLFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdsLTEzNS0xMDUuOGMtMS4xLTExLjQtNi4zLTIyLjMtMTUuMy0zMC43bC0xMzQuMi0xMjMtMjMuNCAxOC4yLTI2LTIwLjMgNzcuMi02MC4xYzctNS40IDE3LTQuMiAyMi41IDIuOHM0LjIgMTctMi44IDIyLjVsLTIwLjkgMTYuMkw1NTAuMiAzNTJINTkyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjE3NmMwLTI2LjUtMjEuNS00OC00OC00OEg1MTZoLTQtLjdsLTMuOS0yLjVMNDM0LjggNzljLTE1LjMtOS44LTMzLjItMTUtNTEuNC0xNWMtMjEuOCAwLTQzIDcuNS02MCAyMS4ybC04OS43IDcyLjYtMjUuOC0yMC4zIDgxLjgtNjYuMmMtMTEuNi00LjktMjQuMS03LjQtMzYuOC03LjRDMjM0IDY0IDIxNS43IDY5LjYgMjAwIDgwbC0zNS41IDIzLjdMMzguOCA1LjF6TTAgMTc2VjMwNGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgxNTYuMmw5MS40IDgzLjRjMTkuNiAxNy45IDQ5LjkgMTYuNSA2Ny44LTMuMWM1LjUtNi4xIDkuMi0xMy4yIDExLjEtMjAuNmwxNyAxNS42YzE5LjUgMTcuOSA0OS45IDE2LjYgNjcuOC0yLjljLjgtLjggMS41LTEuNyAyLjItMi42TDQxLjIgMTI4LjVDMTcuOSAxMzEuOCAwIDE1MS44IDAgMTc2elwiXX0sWmk9ejMsWWk9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWF0dHJlc3MtcGlsbG93XCIsaWNvbjpbNjQwLDUxMixbXSxcImU1MjVcIixcIk0yNTYgNjRINjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDI1NlY2NHptMzIgMzg0SDU3NmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRIMjg4VjQ0OHpNNjQgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyaDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTYwelwiXX0sX2k9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ3VhcmFuaS1zaWduXCIsaWNvbjpbMzg0LDUxMixbXSxcImUxOWFcIixcIk0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNjYuN0M2OS4yIDgxLjkgMCAxNjAuOSAwIDI1NnM2OS4yIDE3NC4xIDE2MCAxODkuM1Y0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NDUuM2M5MC44LTE1LjIgMTYwLTk0LjIgMTYwLTE4OS4zYzAtMTcuNy0xNC4zLTMyLTMyLTMySDIyNFYxMzJjMjIuMSA1LjcgNDEuOCAxNy4xIDU3LjYgMzIuNmMxMi42IDEyLjQgMzIuOSAxMi4yIDQ1LjMtLjRzMTIuMi0zMi45LS41LTQ1LjNDMjk5IDkyIDI2My41IDczLjMgMjI0IDY2LjdWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTE2MCAxMzJWMzgwYy01NS4yLTE0LjItOTYtNjQuMy05Ni0xMjRzNDAuOC0xMDkuOCA5Ni0xMjR6TTIyNCAzODBWMjg4aDkyYy0xMS42IDQ1LTQ3IDgwLjQtOTIgOTJ6XCJdfSxQPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93cy1yb3RhdGVcIixpY29uOls1MTIsNTEyLFsxMjg0NzIsXCJyZWZyZXNoXCIsXCJzeW5jXCJdLFwiZjAyMVwiLFwiTTEwNS4xIDIwMi42YzcuNy0yMS44IDIwLjItNDIuMyAzNy44LTU5LjhjNjIuNS02Mi41IDE2My44LTYyLjUgMjI2LjMgMEwzODYuMyAxNjBIMzM2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ2My41YzAgMCAwIDAgMCAwaC40YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjUxLjJMNDE0LjQgOTcuNmMtODcuNS04Ny41LTIyOS4zLTg3LjUtMzE2LjggMEM3My4yIDEyMiA1NS42IDE1MC43IDQ0LjggMTgxLjRjLTUuOSAxNi43IDIuOSAzNC45IDE5LjUgNDAuOHMzNC45LTIuOSA0MC44LTE5LjV6TTM5IDI4OS4zYy01IDEuNS05LjggNC4yLTEzLjcgOC4yYy00IDQtNi43IDguOC04LjEgMTRjLS4zIDEuMi0uNiAyLjUtLjggMy44Yy0uMyAxLjctLjQgMy40LS40IDUuMVY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzOTYuOWwxNy42IDE3LjUgMCAwYzg3LjUgODcuNCAyMjkuMyA4Ny40IDMxNi43IDBjMjQuNC0yNC40IDQyLjEtNTMuMSA1Mi45LTgzLjdjNS45LTE2LjctMi45LTM0LjktMTkuNS00MC44cy0zNC45IDIuOS00MC44IDE5LjVjLTcuNyAyMS44LTIwLjIgNDIuMy0zNy44IDU5LjhjLTYyLjUgNjIuNS0xNjMuOCA2Mi41LTIyNi4zIDBsLS4xLS4xTDEyNS42IDM1MkgxNzZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDguNGMtMS42IDAtMy4yIC4xLTQuOCAuM3MtMy4xIC41LTQuNiAxelwiXX0sJGk9UCxjbz1QLGFvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpcmUtZXh0aW5ndWlzaGVyXCIsaWNvbjpbNTEyLDUxMixbMTI5NTE5XSxcImYxMzRcIixcIk01MDAuMyA3LjNDNTA3LjcgMTMuMyA1MTIgMjIuNCA1MTIgMzJ2OTZjMCA5LjYtNC4zIDE4LjctMTEuNyAyNC43cy0xNy4yIDguNS0yNi42IDYuNmwtMTYwLTMyQzMwMS41IDEyNC45IDI5MiAxMTUuNyAyODkgMTA0SDIyNHYzNC44YzM3LjggMTggNjQgNTYuNSA2NCAxMDEuMlYzODRINjRWMjQwYzAtNDQuNyAyNi4yLTgzLjIgNjQtMTAxLjJWMTEwYy0zNi4yIDExLjEtNjYgMzYuOS04Mi4zIDcwLjVjLTUuOCAxMS45LTIwLjIgMTYuOS0zMi4xIDExLjFTLTMuMyAxNzEuNCAyLjUgMTU5LjVDMjYuNyAxMDkuOCA3Mi43IDcyLjYgMTI4IDYwLjRWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNTZoNjVjMy0xMS43IDEyLjUtMjAuOSAyNC43LTIzLjRsMTYwLTMyYzkuNC0xLjkgMTkuMSAuNiAyNi42IDYuNnpNMjg4IDQxNnYzMmMwIDM1LjMtMjguNyA2NC02NCA2NEgxMjhjLTM1LjMgMC02NC0yOC43LTY0LTY0VjQxNkgyODh6TTE3NiA5NmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnpcIl19LHNvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNydXplaXJvLXNpZ25cIixpY29uOls0NDgsNTEyLFtdLFwiZTE1MlwiLFwiTTk2IDI1NmMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MGM0MSAwIDc4LjMgMTUuNCAxMDYuNyA0MC43YzEzLjIgMTEuOCAzMy40IDEwLjcgNDUuMi0yLjVzMTAuNy0zMy40LTIuNS00NS4yYy0zOS42LTM1LjUtOTItNTctMTQ5LjMtNTdDMTMyLjMgMzIgMzIgMTMyLjMgMzIgMjU2czEwMC4zIDIyNCAyMjQgMjI0YzU3LjQgMCAxMDkuNy0yMS42IDE0OS4zLTU3YzEzLjItMTEuOCAxNC4zLTMyIDIuNS00NS4ycy0zMi0xNC4zLTQ1LjItMi41QzMzNC4zIDQwMC42IDI5NyA0MTYgMjU2IDQxNlYzMjB2LTguN2MwLTEyLjggMTAuNC0yMy4zIDIzLjMtMjMuM2M0LjYgMCA5LjEgMS40IDEyLjkgMy45bDEwLjEgNi43YzE0LjcgOS44IDM0LjYgNS44IDQ0LjQtOC45czUuOC0zNC42LTguOS00NC40bC0xMC4xLTYuN2MtMTQuMy05LjYtMzEuMi0xNC43LTQ4LjQtMTQuN2MtMTIuNCAwLTI0LjIgMi42LTM0LjkgNy4zYy01LjUtNC41LTEyLjYtNy4zLTIwLjMtNy4zYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY1NS4zVjMyMHY4Mi43QzEzNS41IDM3OCA5NiAzMjEuNiA5NiAyNTZ6XCJdfSxlbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJncmVhdGVyLXRoYW4tZXF1YWxcIixpY29uOls0NDgsNTEyLFtdLFwiZjUzMlwiLFwiTTUyLjEgOTMuN0MzNS43IDg3LjEgMjcuNyA2OC41IDM0LjMgNTIuMXMyNS4yLTI0LjQgNDEuNi0xNy44bDMyMCAxMjhDNDA4IDE2Ny4xIDQxNiAxNzguOSA0MTYgMTkycy04IDI0LjktMjAuMSAyOS43bC0zMjAgMTI4Yy0xNi40IDYuNi0zNS0xLjQtNDEuNi0xNy44czEuNC0zNSAxNy44LTQxLjZMMjk3LjggMTkyIDUyLjEgOTMuN3pNNDE2IDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0MTZ6XCJdfSxWMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzaGllbGQtaGFsdmVkXCIsaWNvbjpbNTEyLDUxMixbXCJzaGllbGQtYWx0XCJdLFwiZjNlZFwiLFwiTTI1NiAwYzQuNiAwIDkuMiAxIDEzLjQgMi45TDQ1Ny43IDgyLjhjMjIgOS4zIDM4LjQgMzEgMzguMyA1Ny4yYy0uNSA5OS4yLTQxLjMgMjgwLjctMjEzLjcgMzYzLjJjLTE2LjcgOC0zNi4xIDgtNTIuOCAwQzU3LjMgNDIwLjcgMTYuNSAyMzkuMiAxNiAxNDBjLS4xLTI2LjIgMTYuMy00Ny45IDM4LjMtNTcuMkwyNDIuNyAyLjlDMjQ2LjggMSAyNTEuNCAwIDI1NiAwem0wIDY2LjhWNDQ0LjhDMzk0IDM3OCA0MzEuMSAyMzAuMSA0MzIgMTQxLjRMMjU2IDY2LjhsMCAwelwiXX0sZm89VjMsbTM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9vay1hdGxhc1wiLGljb246WzQ0OCw1MTIsW1wiYXRsYXNcIl0sXCJmNTU4XCIsXCJNMCA5NkMwIDQzIDQzIDAgOTYgMEgzODRoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMydjY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NCA5NmMtNTMgMC05Ni00My05Ni05NlY5NnpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM1MlYzODRIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0yNDcuNCAyODMuOGMtMy43IDMuNy02LjIgNC4yLTcuNCA0LjJzLTMuNy0uNS03LjQtNC4yYy0zLjgtMy43LTgtMTAtMTEuOC0xOC45Yy02LjItMTQuNS0xMC44LTM0LjMtMTIuMi01Ni45aDYzYy0xLjUgMjIuNi02IDQyLjQtMTIuMiA1Ni45Yy0zLjggOC45LTggMTUuMi0xMS44IDE4Ljl6bTQyLjctOS45YzcuMy0xOC4zIDEyLTQxLjEgMTMuNC02NS45aDMxLjFjLTQuNyAyNy45LTIxLjQgNTEuNy00NC41IDY1Ljl6bTAtMTYzLjhjMjMuMiAxNC4yIDM5LjkgMzggNDQuNSA2NS45SDMwMy41Yy0xLjQtMjQuNy02LjEtNDcuNS0xMy40LTY1Ljl6TTM2OCAxOTJjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhzLTEyOCA1Ny4zLTEyOCAxMjhzNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4ek0xNDUuMyAyMDhoMzEuMWMxLjQgMjQuNyA2LjEgNDcuNSAxMy40IDY1LjljLTIzLjItMTQuMi0zOS45LTM4LTQ0LjUtNjUuOXptMzEuMS0zMkgxNDUuM2M0LjctMjcuOSAyMS40LTUxLjcgNDQuNS02NS45Yy03LjMgMTguMy0xMiA0MS4xLTEzLjQgNjUuOXptNTYuMS03NS44YzMuNy0zLjcgNi4yLTQuMiA3LjQtNC4yczMuNyAuNSA3LjQgNC4yYzMuOCAzLjcgOCAxMCAxMS44IDE4LjljNi4yIDE0LjUgMTAuOCAzNC4zIDEyLjIgNTYuOWgtNjNjMS41LTIyLjYgNi00Mi40IDEyLjItNTYuOWMzLjgtOC45IDgtMTUuMiAxMS44LTE4Ljl6XCJdfSxybz1tMyxsbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2aXJ1c1wiLGljb246WzUxMiw1MTIsW10sXCJlMDc0XCIsXCJNMjg4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQzLjVjMCA0OS45LTYwLjMgNzQuOS05NS42IDM5LjZMMTIwLjIgNzVDMTA3LjcgNjIuNSA4Ny41IDYyLjUgNzUgNzVzLTEyLjUgMzIuOCAwIDQ1LjNsOC4yIDguMkMxMTguNCAxNjMuNyA5My40IDIyNCA0My41IDIyNEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0My41YzQ5LjkgMCA3NC45IDYwLjMgMzkuNiA5NS42TDc1IDM5MS44Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDguMi04LjJjMzUuMy0zNS4zIDk1LjYtMTAuMyA5NS42IDM5LjZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDY4LjVjMC00OS45IDYwLjMtNzQuOSA5NS42LTM5LjZsOC4yIDguMmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC04LjItOC4yYy0zNS4zLTM1LjMtMTAuMy05NS42IDM5LjYtOTUuNkg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDY4LjVjLTQ5LjkgMC03NC45LTYwLjMtMzkuNi05NS42bDguMi04LjJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTguMiA4LjJDMzQ4LjMgMTE4LjQgMjg4IDkzLjQgMjg4IDQzLjVWMzJ6TTI3MiAyMjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4em0zMiAxMDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpcIl19LGlvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImVudmVsb3BlLWNpcmNsZS1jaGVja1wiLGljb246WzY0MCw1MTIsW10sXCJlNGU4XCIsXCJNNDggNjRDMjEuNSA2NCAwIDg1LjUgMCAxMTJjMCAxNS4xIDcuMSAyOS4zIDE5LjIgMzguNEwyMzYuOCAzMTMuNmMxMS40IDguNSAyNyA4LjUgMzguNCAwbDU3LjQtNDNjMjMuOS01OS44IDc5LjctMTAzLjMgMTQ2LjMtMTA5LjhsMTMuOS0xMC40YzEyLjEtOS4xIDE5LjItMjMuMyAxOS4yLTM4LjRjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTI5NC40IDMzOS4yYy0yMi44IDE3LjEtNTQgMTcuMS03Ni44IDBMMCAxNzZWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM2MC4yQzMzNS4xIDQxNy42IDMyMCAzNzguNSAzMjAgMzM2YzAtNS42IC4zLTExLjEgLjgtMTYuNmwtMjYuNCAxOS44ek02NDAgMzM2YzAtNzkuNS02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NHptLTc2LjctNDMuM2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ4MCAzNTMuNGw2MC43LTYwLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6XCJdfSxvbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsYXllci1ncm91cFwiLGljb246WzU3Niw1MTIsW10sXCJmNWZkXCIsXCJNMjY0LjUgNS4yYzE0LjktNi45IDMyLjEtNi45IDQ3IDBsMjE4LjYgMTAxYzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMNDUuOSAxNDkuOEMzNy40IDE0NS44IDMyIDEzNy4zIDMyIDEyOHM1LjQtMTcuOSAxMy45LTIxLjhMMjY0LjUgNS4yek00NzYuOSAyMDkuNmw1My4yIDI0LjZjOC41IDMuOSAxMy45IDEyLjQgMTMuOSAyMS44cy01LjQgMTcuOS0xMy45IDIxLjhsLTIxOC42IDEwMWMtMTQuOSA2LjktMzIuMSA2LjktNDcgMEw0NS45IDI3Ny44QzM3LjQgMjczLjggMzIgMjY1LjMgMzIgMjU2czUuNC0xNy45IDEzLjktMjEuOGw1My4yLTI0LjYgMTUyIDcwLjJjMjMuNCAxMC44IDUwLjQgMTAuOCA3My44IDBsMTUyLTcwLjJ6bS0xNTIgMTk4LjJsMTUyLTcwLjIgNTMuMiAyNC42YzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMNDUuOSA0MDUuOEMzNy40IDQwMS44IDMyIDM5My4zIDMyIDM4NHM1LjQtMTcuOSAxMy45LTIxLjhsNTMuMi0yNC42IDE1MiA3MC4yYzIzLjQgMTAuOCA1MC40IDEwLjggNzMuOCAwelwiXX0sbm89e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3dzLXRvLWRvdFwiLGljb246WzUxMiw1MTIsW10sXCJlNGJlXCIsXCJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRoMzJjMTIuOSAwIDI0LjYgNy44IDI5LjYgMTkuOHMyLjIgMjUuNy02LjkgMzQuOWwtNjQgNjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC02NC02NGMtOS4yLTkuMi0xMS45LTIyLjktNi45LTM0LjlzMTYuNi0xOS44IDI5LjYtMTkuOGgzMlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTY5LjQgMzkzLjRsNjQtNjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNjQgNjRjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlzLTE2LjYgMTkuOC0yOS42IDE5LjhIMjg4djMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OEgxOTJjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45ek0zMiAyMjRINjRWMTkyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOXMtMTkuOC0xNi42LTE5LjgtMjkuNlYyODhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTI5Ny40IDU0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDY0LTY0YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45czE5LjggMTYuNiAxOS44IDI5LjZ2MzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDQ4djMyYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC02NC02NHpNMjU2IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXX0sSG89e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJjaHdheVwiLGljb246WzUxMiw1MTIsW10sXCJmNTU3XCIsXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2SDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnptMCAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIOTZoNjRWMzUyYzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZWNDgwaDY0IDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjEyOEgzMlY0MTZ6XCJdfSx6bz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoZWFydC1jaXJjbGUtY2hlY2tcIixpY29uOls1NzYsNTEyLFtdLFwiZTRmZFwiLFwiTTQ3LjYgMzAwLjRMMjI4LjMgNDY5LjFjNy41IDcgMTcuNCAxMC45IDI3LjcgMTAuOXMyMC4yLTMuOSAyNy43LTEwLjlsMi42LTIuNEMyNjcuMiA0MzguNiAyNTYgNDA0LjYgMjU2IDM2OGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NmMyOC4zIDAgNTUgNi43IDc4LjcgMTguNWMuOS02LjUgMS4zLTEzIDEuMy0xOS42di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41ek01NzYgMzY4YzAtNzkuNS02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NHptLTc2LjctNDMuM2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNzIgNzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQxNiAzODUuNGw2MC43LTYwLjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6XCJdfSx2Mz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob3VzZS1jaGltbmV5LWNyYWNrXCIsaWNvbjpbNTc2LDUxMixbXCJob3VzZS1kYW1hZ2VcIl0sXCJmNmYxXCIsXCJNNTc1LjggMjU1LjVjMCAxOC0xNSAzMi4xLTMyIDMyLjFoLTMybC43IDE2MC4yYy4yIDM1LjUtMjguNSA2NC4zLTY0IDY0LjNIMzI2LjRMMjg4IDQ0OGw4MC44LTY3LjNjNy44LTYuNSA3LjYtMTguNi0uNC0yNC45TDI1MC42IDI2My4yYy0xNC42LTExLjUtMzMuOCA3LTIyLjggMjJMMjg4IDM2OGwtODUuNSA3MS4yYy02LjEgNS03LjUgMTMuOC0zLjUgMjAuNUwyMzAuNCA1MTJIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w0MTYgMTAwLjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTg1bDUyLjggNDYuNGM4IDcgMTIgMTUgMTEgMjR6XCJdfSxWbz12MyxNMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLXppcHBlclwiLGljb246WzM4NCw1MTIsW1wiZmlsZS1hcmNoaXZlXCJdLFwiZjFjNlwiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNOTYgNDhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2em0wIDY0YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnptMCA2NGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZ6bS02LjMgNzEuOGMzLjctMTQgMTYuNC0yMy44IDMwLjktMjMuOGgxNC44YzE0LjUgMCAyNy4yIDkuNyAzMC45IDIzLjhsMjMuNSA4OC4yYzEuNCA1LjQgMi4xIDEwLjkgMi4xIDE2LjRjMCAzNS4yLTI4LjggNjMuNy02NCA2My43cy02NC0yOC41LTY0LTYzLjdjMC01LjUgLjctMTEuMSAyLjEtMTYuNGwyMy41LTg4LjJ6TTExMiAzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMTEyelwiXX0sbW89TTMsdm89e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3F1YXJlXCIsaWNvbjpbNDQ4LDUxMixbOTYzMiw5NzIzLDk3MjQsNjE1OTBdLFwiZjBjOFwiLFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6XCJdfSx0Mz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtYXJ0aW5pLWdsYXNzLWVtcHR5XCIsaWNvbjpbNTEyLDUxMixbXCJnbGFzcy1tYXJ0aW5pXCJdLFwiZjAwMFwiLFwiTTMyIDBDMTkuMSAwIDcuNCA3LjggMi40IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45TDIyNCAyNjkuM1Y0NDhIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDk2IDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI4OFYyNjkuM0w1MDIuNiA1NC42YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDAgNDgwIDBIMzJ6TTI1NiAyMTAuN0wxMDkuMyA2NEg0MDIuN0wyNTYgMjEwLjd6XCJdfSxNbz10Myx0bz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjb3VjaFwiLGljb246WzY0MCw1MTIsW10sXCJmNGI4XCIsXCJNNjQgMTYwQzY0IDg5LjMgMTIxLjMgMzIgMTkyIDMySDQ0OGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOHYzMy42Yy0zNi41IDcuNC02NCAzOS43LTY0IDc4LjR2NDhIMTI4VjI3MmMwLTM4LjctMjcuNS03MS02NC03OC40VjE2MHpNNTQ0IDI3MmMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNjNS0xLjggMTAuNC0yLjcgMTYtMi43YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkg1NzZjLTE3LjcgMC0zMi0xNC4zLTMyLTMySDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYyNzJjMC0yNi41IDIxLjUtNDggNDgtNDhjNS42IDAgMTEgMSAxNiAyLjdjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zdjQ4IDMyaDMySDUxMmgzMlYzMjAgMjcyelwiXX0saG89e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2VkaS1zaWduXCIsaWNvbjpbMzg0LDUxMixbXSxcImUwZGZcIixcIk0yNTYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWNjYuN0MxMDEuMiA4MS45IDMyIDE2MC45IDMyIDI1NnM2OS4yIDE3NC4xIDE2MCAxODkuM1Y0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NDUuM2MzMC45LTUuMiA1OS4yLTE3LjcgODMuMi0zNS44YzE0LjEtMTAuNiAxNy0zMC43IDYuNC00NC44cy0zMC43LTE3LTQ0LjgtNi40Yy0xMy4yIDkuOS0yOC4zIDE3LjMtNDQuOCAyMS42VjEzMmMxNi40IDQuMiAzMS42IDExLjYgNDQuOCAyMS42YzE0LjEgMTAuNiAzNC4yIDcuOCA0NC44LTYuNHM3LjgtMzQuMi02LjQtNDQuOGMtMjQtMTgtNTIuNC0zMC42LTgzLjItMzUuOFYzMnpNMTkyIDEzMlYzODBjLTU1LjItMTQuMi05Ni02NC4zLTk2LTEyNHM0MC44LTEwOS44IDk2LTEyNHpcIl19LENvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIml0YWxpY1wiLGljb246WzM4NCw1MTIsW10sXCJmMDMzXCIsXCJNMTI4IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMySDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyOTMuM0wxNjAgNDE2aDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDkwLjdMMjI0IDk2SDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6XCJdfSxMbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaHVyY2hcIixpY29uOls2NDAsNTEyLFs5OTYyXSxcImY1MWRcIixcIk0zNDQgMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWNDhIMjY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDMydjQ2LjRMMTgzLjMgMjEwYy0xNC41IDguNy0yMy4zIDI0LjMtMjMuMyA0MS4yVjUxMmg5NlY0MTZjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHY5Nmg5NlYyNTEuMmMwLTE2LjktOC44LTMyLjUtMjMuMy00MS4yTDM0NCAxNDIuNFY5NmgzMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgzNDRWMjR6TTI0LjkgMzMwLjNDOS41IDMzOC44IDAgMzU0LjkgMCAzNzIuNFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoODBWMjczLjZMMjQuOSAzMzAuM3pNNTkyIDUxMmMyNi41IDAgNDgtMjEuNSA0OC00OFYzNzIuNGMwLTE3LjUtOS41LTMzLjYtMjQuOS00Mi4xTDUxMiAyNzMuNlY1MTJoODB6XCJdfSxwbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjb21tZW50cy1kb2xsYXJcIixpY29uOls2NDAsNTEyLFtdLFwiZjY1M1wiLFwiTTQxNiAxNzZjMCA5Ny4yLTkzLjEgMTc2LTIwOCAxNzZjLTM4LjIgMC03My45LTguNy0xMDQuNy0yMy45Yy03LjUgNC0xNiA3LjktMjUuMiAxMS40QzU5LjggMzQ2LjQgMzcuOCAzNTIgMTYgMzUyYy02LjkgMC0xMy4xLTQuNS0xNS4yLTExLjFzLjItMTMuOCA1LjgtMTcuOWwwIDAgMCAwIC4yLS4yYy4yLS4yIC42LS40IDEuMS0uOGMxLS44IDIuNS0yIDQuMy0zLjdjMy42LTMuMyA4LjUtOC4xIDEzLjMtMTQuM2M1LjUtNyAxMC43LTE1LjQgMTQuMi0yNC43QzE0LjcgMjUwLjMgMCAyMTQuNiAwIDE3NkMwIDc4LjggOTMuMSAwIDIwOCAwUzQxNiA3OC44IDQxNiAxNzZ6TTIzMS41IDM4M0MzNDguOSAzNzIuOSA0NDggMjg4LjMgNDQ4IDE3NmMwLTUuMi0uMi0xMC40LS42LTE1LjVDNTU1LjEgMTY3LjEgNjQwIDI0My4yIDY0MCAzMzZjMCAzOC42LTE0LjcgNzQuMy0zOS42IDEwMy40YzMuNSA5LjQgOC43IDE3LjcgMTQuMiAyNC43YzQuOCA2LjIgOS43IDExIDEzLjMgMTQuM2MxLjggMS42IDMuMyAyLjkgNC4zIDMuN2MuNSAuNCAuOSAuNyAxLjEgLjhsLjIgLjIgMCAwIDAgMGM1LjYgNC4xIDcuOSAxMS4zIDUuOCAxNy45Yy0yLjEgNi42LTguMyAxMS4xLTE1LjIgMTEuMWMtMjEuOCAwLTQzLjgtNS42LTYyLjEtMTIuNWMtOS4yLTMuNS0xNy44LTcuNC0yNS4yLTExLjRDNTA1LjkgNTAzLjMgNDcwLjIgNTEyIDQzMiA1MTJjLTk1LjYgMC0xNzYuMi01NC42LTIwMC41LTEyOXpNMjI4IDcyYzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMFY4NmMtNy42IDEuNy0xNS4yIDQuNC0yMi4yIDguNWMtMTMuOSA4LjMtMjUuOSAyMi44LTI1LjggNDMuOWMuMSAyMC4zIDEyIDMzLjEgMjQuNyA0MC43YzExIDYuNiAyNC43IDEwLjggMzUuNiAxNGwxLjcgLjVjMTIuNiAzLjggMjEuOCA2LjggMjggMTAuN2M1LjEgMy4yIDUuOCA1LjQgNS45IDguMmMuMSA1LTEuOCA4LTUuOSAxMC41Yy01IDMuMS0xMi45IDUtMjEuNCA0LjdjLTExLjEtLjQtMjEuNS0zLjktMzUuMS04LjVjLTIuMy0uOC00LjctMS42LTcuMi0yLjRjLTEwLjUtMy41LTIxLjggMi4yLTI1LjMgMTIuNnMyLjIgMjEuOCAxMi42IDI1LjNjMS45IC42IDQgMS4zIDYuMSAyLjFsMCAwIDAgMGM4LjMgMi45IDE3LjkgNi4yIDI4LjIgOC40VjI4MGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMFYyNjYuMmM4LTEuNyAxNi00LjUgMjMuMi05YzE0LjMtOC45IDI1LjEtMjQuMSAyNC44LTQ1Yy0uMy0yMC4zLTExLjctMzMuNC0yNC42LTQxLjZjLTExLjUtNy4yLTI1LjktMTEuNi0zNy4xLTE1bC0uNy0uMmMtMTIuOC0zLjktMjEuOS02LjctMjguMy0xMC41Yy01LjItMy4xLTUuMy00LjktNS4zLTYuN2MwLTMuNyAxLjQtNi41IDYuMi05LjNjNS40LTMuMiAxMy42LTUuMSAyMS41LTVjOS42IC4xIDIwLjIgMi4yIDMxLjIgNS4yYzEwLjcgMi44IDIxLjYtMy41IDI0LjUtMTQuMnMtMy41LTIxLjYtMTQuMi0yNC41Yy02LjUtMS43LTEzLjctMy40LTIxLjEtNC43VjcyelwiXX0sdW89e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZGVtb2NyYXRcIixpY29uOls2NDAsNTEyLFtdLFwiZjc0N1wiLFwiTTY0IDMyYzAtOC45IDMuOC0yMC45IDYuMi0yNy4zQzcxLjIgMS44IDc0IDAgNzcgMGMxLjkgMCAzLjggLjcgNS4yIDIuMUwxMjggNDUuNyAxNzMuOCAyLjFDMTc1LjIgLjcgMTc3LjEgMCAxNzkgMGMzIDAgNS44IDEuOCA2LjggNC43YzIuNCA2LjUgNi4yIDE4LjQgNi4yIDI3LjNjMCAyNi41LTIxLjkgNDItMjkuNSA0Ni42bDc2LjIgNzIuNmM2IDUuNyAxMy45IDguOCAyMi4xIDguOEg0ODBjNjEuNCAwIDEwMS42IDI0IDEyNi4yIDUwYzEyIDEyLjYgMTkuOSAyNS4yIDI0LjkgMzQuOWMyLjUgNC44IDQuMyA5IDUuNSAxMi4xYy42IDEuNSAxLjEgMi44IDEuNCAzLjhjLjIgLjUgLjMgLjkgLjQgMS4zbC4xIC41IC4xIC4yIDAgLjEgMCAwYzAgMCAwIDAtMzAuMiA5LjFsMzAuMi05LjFjNS4xIDE2LjktNC41IDM0LjgtMjEuNSAzOS44Yy0xNi44IDUtMzQuNS00LjQtMzkuNy0yMS4xbDAgMGMtLjEtLjItLjItLjYtLjUtMS4yYy0uNS0xLjMtMS40LTMuNC0yLjgtNi4xYy0yLjgtNS40LTcuNC0xMi44LTE0LjQtMjAuMWMtNC4yLTQuNC05LjQtOS0xNS44LTEzLjJWMzIwSDE5MmwtNDAuNC05NC4zYy0zLjktOS4yLTE1LjMtMTIuNi0yMy42LTdsLTQyLjEgMjhjLTkuMSA2LjEtMTkuNyA5LjMtMzAuNyA5LjNoLTJDMjMuOSAyNTYgMCAyMzIuMSAwIDIwMi43YzAtMTIuMSA0LjEtMjMuOCAxMS43LTMzLjNMODcuNiA3NC42Qzc4LjEgNjcuNCA2NCA1My4yIDY0IDMyek00NDggMzUyaDk2djY0IDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDE2SDI4OHY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQxNiAzNTJoOTZINDQ4em0xMjkuNC03MC44YzAgMCAwIDAgMzAuNi05LjJsLTMwLjYgOS4yIDAgMHpNMjYwLjkgMjEwLjljLS45LTEuOC0yLjgtMi45LTQuOC0yLjlzLTMuOSAxLjEtNC44IDIuOWwtMTAuNSAyMC41LTIzLjUgMy4zYy0yIC4zLTMuNyAxLjYtNC4zIDMuNXMtLjEgMy45IDEuMyA1LjNsMTcgMTYtNCAyMi42Yy0uMyAxLjkgLjUgMy45IDIuMSA1czMuOCAxLjMgNS42IC40bDIxLTEwLjcgMjEgMTAuN2MxLjggLjkgNCAuOCA1LjYtLjRzMi41LTMuMSAyLjEtNWwtNC0yMi42IDE3LTE2YzEuNS0xLjQgMi0zLjQgMS4zLTUuM3MtMi4zLTMuMi00LjMtMy41bC0yMy41LTMuMy0xMC41LTIwLjV6TTM2OC4xIDIwOGMtMiAwLTMuOSAxLjEtNC44IDIuOWwtMTAuNSAyMC41LTIzLjUgMy4zYy0yIC4zLTMuNyAxLjYtNC4zIDMuNXMtLjEgMy45IDEuMyA1LjNsMTcgMTYtNCAyMi42Yy0uMyAxLjkgLjUgMy45IDIuMSA1czMuOCAxLjMgNS42IC40bDIxLTEwLjcgMjEgMTAuN2MxLjggLjkgNCAuOCA1LjYtLjRzMi41LTMuMSAyLjEtNWwtNC0yMi42IDE3LTE2YzEuNS0xLjQgMi0zLjQgMS40LTUuM3MtMi4zLTMuMi00LjMtMy41bC0yMy41LTMuMy0xMC41LTIwLjVjLS45LTEuOC0yLjgtMi45LTQuOC0yLjl6bTExNi44IDIuOWMtLjktMS44LTIuOC0yLjktNC44LTIuOXMtMy45IDEuMS00LjggMi45bC0xMC41IDIwLjUtMjMuNSAzLjNjLTIgLjMtMy43IDEuNi00LjMgMy41cy0uMSAzLjkgMS4zIDUuM2wxNyAxNi00IDIyLjZjLS4zIDEuOSAuNSAzLjkgMi4xIDVzMy44IDEuMyA1LjYgLjRsMjEtMTAuNyAyMSAxMC43YzEuOCAuOSA0IC44IDUuNi0uNHMyLjUtMy4xIDIuMS01bC00LTIyLjYgMTctMTZjMS41LTEuNCAyLTMuNCAxLjQtNS4zcy0yLjMtMy4yLTQuMy0zLjVsLTIzLjUtMy4zLTEwLjUtMjAuNXpcIl19LHhvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInpcIixpY29uOlszODQsNTEyLFsxMjJdLFwiNWFcIixcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDM1MmMxMi40IDAgMjMuNyA3LjIgMjkgMTguNHMzLjYgMjQuNS00LjQgMzQuMUwxMDAuMyA0MTZIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xMi40IDAtMjMuNy03LjItMjktMTguNHMtMy42LTI0LjUgNC40LTM0LjFMMjgzLjcgOTZIMzJDMTQuMyA5NiAwIDgxLjcgMCA2NHpcIl19LGgzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1za2lpbmdcIixpY29uOls1NzYsNTEyLFs5OTc1LFwic2tpaW5nXCJdLFwiZjdjOVwiLFwiTTUwOC43IDQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpNMzQuNyAyNjguOWM2LjEtMTEuOCAyMC42LTE2LjMgMzIuNC0xMC4yTDI2NC43IDM2MS4zbDQ2LjItNjkuMi03NS4xLTc1LjFjLTE0LjYtMTQuNi0yMC40LTMzLjktMTguNC01Mi4xbDEwOC44IDUyIDM5LjMgMzkuM2MxNi4yIDE2LjIgMTguNyA0MS41IDYgNjAuNkwzMjEuOCAzOTFsMTI4LjcgNjYuOGMxMy42IDcuMSAyOS44IDcuMiA0My42IC4zbDE1LjItNy42YzExLjktNS45IDI2LjMtMS4xIDMyLjIgMTAuN3MxLjEgMjYuMy0xMC43IDMyLjJsLTE1LjIgNy42Yy0yNy41IDEzLjctNTkuOSAxMy41LTg3LjItLjdMNDQuOSAzMDEuM2MtMTEuOC02LjEtMTYuMy0yMC42LTEwLjItMzIuNHpNMTUwLjkgNjUuNkwxNjkgNzQuMmw4LjctMTcuNGM0LTcuOSAxMy42LTExLjEgMjEuNS03LjJzMTEuMSAxMy42IDcuMiAyMS41bC04LjUgMTYuOSA1NC43IDI2LjJjMS41LS43IDMuMS0xLjQgNC43LTIuMWw4My40LTMzLjRjMzQuMi0xMy43IDcyLjggNC4yIDg0LjUgMzkuMmwxNy4xIDUxLjIgNTIuMSAyNi4xYzE1LjggNy45IDIyLjIgMjcuMSAxNC4zIDQyLjlzLTI3LjEgMjIuMi00Mi45IDE0LjNsLTU4LjEtMjljLTExLjQtNS43LTIwLTE1LjctMjQuMS0yNy44bC01LjgtMTcuMy0yNy4zIDEyLjEtNi44IDMtNi43LTMuMkwxODMuNSAxMTYuN2wtOS4yIDE4LjRjLTQgNy45LTEzLjYgMTEuMS0yMS41IDcuMnMtMTEuMS0xMy42LTcuMi0yMS41bDktMTgtMTcuNi04LjRjLTgtMy44LTExLjMtMTMuNC03LjUtMjEuM3MxMy40LTExLjMgMjEuMy03LjV6XCJdfSxnbz1oMyxTbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyb2FkLWxvY2tcIixpY29uOls2NDAsNTEyLFtdLFwiZTU2N1wiLFwiTTI4OCAzMkgyMTMuMmMtMjcuMSAwLTUxLjMgMTcuMS02MC4zIDQyLjZMMzUuMSA0MDcuMmMtMi4xIDUuOS0zLjEgMTItMy4xIDE4LjJDMzIgNDU1LjUgNTYuNSA0ODAgODYuNiA0ODBIMjg4VjQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjY0aDMyVjM1MmMwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRWMjcyYzAtNTguMyA0NC42LTEwNi4yIDEwMS41LTExMS41TDQ4Ny4xIDc0LjZDNDc4IDQ5LjEgNDUzLjkgMzIgNDI2LjggMzJIMzUyVjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMyem02NCAxOTJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTE3NiAxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnY0OEg0OTZWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJ2NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyVjI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl19LE5vPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFcIixpY29uOls0NDgsNTEyLFs5N10sXCI0MVwiLFwiTTI1My41IDUxLjdDMjQ4LjYgMzkuOCAyMzYuOSAzMiAyMjQgMzJzLTI0LjYgNy44LTI5LjUgMTkuN2wtMTIwIDI4OC00MCA5NmMtNi44IDE2LjMgLjkgMzUgMTcuMiA0MS44czM1LS45IDQxLjgtMTcuMkwxMjUuMyAzODRIMzIyLjdsMzEuOCA3Ni4zYzYuOCAxNi4zIDI1LjUgMjQgNDEuOCAxNy4yczI0LTI1LjUgMTcuMi00MS44bC00MC05Ni0xMjAtMjg4ek0yOTYgMzIwSDE1Mmw3Mi0xNzIuOEwyOTYgMzIwelwiXX0sQzM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGVtcGVyYXR1cmUtYXJyb3ctZG93blwiLGljb246WzUxMiw1MTIsW1widGVtcGVyYXR1cmUtZG93blwiXSxcImUwM2ZcIixcIk05NiAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OFYyNzYuNWMwIDE3LjMgNy4xIDMxLjkgMTUuMyA0Mi41QzIxNy44IDMzMi42IDIyNCAzNDkuNSAyMjQgMzY4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMTguNSA2LjItMzUuNCAxNi43LTQ4LjlDODguOSAzMDguNCA5NiAyOTMuOCA5NiAyNzYuNVYxMTJ6TTE0NCAwQzgyLjEgMCAzMiA1MC4xIDMyIDExMlYyNzYuNGMwIC4xLS4xIC4zLS4yIC42Yy0uMiAuNi0uOCAxLjYtMS43IDIuOEMxMS4yIDMwNC4yIDAgMzM0LjggMCAzNjhjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGMwLTMzLjItMTEuMy02My44LTMwLjEtODguMWMtLjktMS4yLTEuNS0yLjItMS43LTIuOGMtLjEtLjMtLjItLjUtLjItLjZWMTEyQzI1NiA1MC4xIDIwNS45IDAgMTQ0IDB6bTAgNDE2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4YzAtMjAuOS0xMy40LTM4LjctMzItNDUuM1YyNzJjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ2NTAuN2MtMTguNiA2LjYtMzIgMjQuNC0zMiA0NS4zYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em0zMzYtNjRINDQ4VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjM1MkgzNTJjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0YzYgNiAxNC4xIDkuNCAyMi42IDkuNHMxNi42LTMuNCAyMi42LTkuNGw2NC02NGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOHpcIl19LHdvPUMzLEwzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZlYXRoZXItcG9pbnRlZFwiLGljb246WzUxMiw1MTIsW1wiZmVhdGhlci1hbHRcIl0sXCJmNTZiXCIsXCJNMjc4LjUgMjE1LjZMMjMgNDcxYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzQuOC03NC44YzcuNCA0LjYgMTUuMyA4LjIgMjMuOCAxMC41QzIwMC4zIDQ1Mi44IDI3MCA0NTQuNSAzMzggNDA5LjRjMTIuMi04LjEgNS44LTI1LjQtOC44LTI1LjRsLTE2LjEgMGMtNS4xIDAtOS4yLTQuMS05LjItOS4yYzAtNC4xIDIuNy03LjYgNi41LTguOGw5Ny43LTI5LjNjMy40LTEgNi40LTMuMSA4LjQtNi4xYzQuNC02LjQgOC42LTEyLjkgMTIuNi0xOS42YzYuMi0xMC4zLTEuNS0yMy0xMy41LTIzbC0zOC42IDBjLTUuMSAwLTkuMi00LjEtOS4yLTkuMmMwLTQuMSAyLjctNy42IDYuNS04LjhsODAuOS0yNC4zYzQuNi0xLjQgOC40LTQuOCAxMC4yLTkuM0M0OTQuNSAxNjMgNTA3LjggODYuMSA1MTEuOSAzNi44Yy44LTkuOS0zLTE5LjYtMTAtMjYuNnMtMTYuNy0xMC44LTI2LjYtMTBDMzkxLjUgNyAyMjguNSA0MC41IDEzNy40IDEzMS42QzU3LjMgMjExLjcgNTYuNyAzMDIuMyA3MS4zIDM1Ni40YzIuMSA3LjkgMTIgOS42IDE3LjggMy44TDI1My42IDE5NS44YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwYzUuNCA1LjQgNi4xIDEzLjYgMi4yIDE5Ljh6XCJdfSxrbz1MMyxibz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwXCIsaWNvbjpbMzIwLDUxMixbMTEyXSxcIjUwXCIsXCJNMzIgMzJINjRoOTZjODguNCAwIDE2MCA3MS42IDE2MCAxNjBzLTcxLjYgMTYwLTE2MCAxNjBINjR2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyIDMyMCAyODggNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJ6TTY0IDI4OGg5NmM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05Nkg2NFYyODh6XCJdfSxBbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzbm93Zmxha2VcIixpY29uOls0NDgsNTEyLFsxMDA1MiwxMDA1NF0sXCJmMmRjXCIsXCJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjIuMWwxNS0xNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ5IDQ5djcwLjNsNjEuNC0zNS44IDE3LjctNjYuMWMzLjQtMTIuOCAxNi42LTIwLjQgMjkuNC0xN3MyMC40IDE2LjYgMTcgMjkuNGwtNS4yIDE5LjMgMjMuNi0xMy44YzE1LjMtOC45IDM0LjktMy43IDQzLjggMTEuNXMzLjcgMzQuOS0xMS41IDQzLjhsLTI1LjMgMTQuOCAyMS43IDUuOGMxMi44IDMuNCAyMC40IDE2LjYgMTcgMjkuNHMtMTYuNiAyMC40LTI5LjQgMTdsLTY3LjctMTguMUwyODcuNSAyNTZsNjAuOSAzNS41IDY3LjctMTguMWMxMi44LTMuNCAyNiA0LjIgMjkuNCAxN3MtNC4yIDI2LTE3IDI5LjRsLTIxLjcgNS44IDI1LjMgMTQuOGMxNS4zIDguOSAyMC40IDI4LjUgMTEuNSA0My44cy0yOC41IDIwLjQtNDMuOCAxMS41bC0yMy42LTEzLjggNS4yIDE5LjNjMy40IDEyLjgtNC4yIDI2LTE3IDI5LjRzLTI2LTQuMi0yOS40LTE3bC0xNy43LTY2LjFMMjU2IDMxMS43djcwLjNsNDkgNDljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMTUtMTVWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OS45bC0xNSAxNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0OS00OVYzMTEuN2wtNjEuNCAzNS44LTE3LjcgNjYuMWMtMy40IDEyLjgtMTYuNiAyMC40LTI5LjQgMTdzLTIwLjQtMTYuNi0xNy0yOS40bDUuMi0xOS4zTDQ4LjEgMzk1LjZjLTE1LjMgOC45LTM0LjkgMy43LTQzLjgtMTEuNXMtMy43LTM0LjkgMTEuNS00My44bDI1LjMtMTQuOC0yMS43LTUuOGMtMTIuOC0zLjQtMjAuNC0xNi42LTE3LTI5LjRzMTYuNi0yMC40IDI5LjQtMTdsNjcuNyAxOC4xTDE2MC41IDI1NiA5OS42IDIyMC41IDMxLjkgMjM4LjZjLTEyLjggMy40LTI2LTQuMi0yOS40LTE3czQuMi0yNiAxNy0yOS40bDIxLjctNS44TDE1LjkgMTcxLjZDLjYgMTYyLjctNC41IDE0My4xIDQuNCAxMjcuOXMyOC41LTIwLjQgNDMuOC0xMS41bDIzLjYgMTMuOC01LjItMTkuM2MtMy40LTEyLjggNC4yLTI2IDE3LTI5LjRzMjYgNC4yIDI5LjQgMTdsMTcuNyA2Ni4xTDE5MiAyMDAuM1YxMjkuOUwxNDMgODFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxNSAxNVYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl19LEJvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm5ld3NwYXBlclwiLGljb246WzUxMiw1MTIsWzEyODI0MF0sXCJmMWVhXCIsXCJNOTYgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBWMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNDAwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWOTZ6bTY0IDI0djgwYzAgMTMuMyAxMC43IDI0IDI0IDI0SDQyNGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRIMTg0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMCAxODRjMCA4LjggNy4yIDE2IDE2IDE2aDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2em0xNjAgMGMwIDguOCA3LjIgMTYgMTYgMTZoOTZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzM2Yy04LjggMC0xNiA3LjItMTYgMTZ6TTE2MCA0MDBjMCA4LjggNy4yIDE2IDE2IDE2aDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2em0xNjAgMGMwIDguOCA3LjIgMTYgMTYgMTZoOTZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzM2Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdfSxwMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyZWN0YW5nbGUtYWRcIixpY29uOls1NzYsNTEyLFtcImFkXCJdLFwiZjY0MVwiLFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNMjI5LjUgMTczLjNsNzIgMTQ0YzUuOSAxMS45IDEuMSAyNi4zLTEwLjcgMzIuMnMtMjYuMyAxLjEtMzIuMi0xMC43TDI1My4yIDMyOEgxNjIuOGwtNS40IDEwLjdjLTUuOSAxMS45LTIwLjMgMTYuNy0zMi4yIDEwLjdzLTE2LjctMjAuMy0xMC43LTMyLjJsNzItMTQ0YzQuMS04LjEgMTIuNC0xMy4zIDIxLjUtMTMuM3MxNy40IDUuMSAyMS41IDEzLjN6TTIwOCAyMzcuN0wxODYuOCAyODBoNDIuM0wyMDggMjM3Ljd6TTM5MiAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHptMjQtNDMuOVYxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY5NiA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGMtNi42IDAtMTIuNi0yLjctMTctN2MtOS40IDQuNS0xOS45IDctMzEgN2MtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MmM4LjQgMCAxNi41IDEuNCAyNCA0LjF6XCJdfSxUbz1wMyxkMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtYXJyb3ctcmlnaHRcIixpY29uOls1MTIsNTEyLFtcImFycm93LWNpcmNsZS1yaWdodFwiXSxcImYwYTlcIixcIk0wIDI1NkMwIDM5Ny40IDExNC42IDUxMiAyNTYgNTEyczI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NnpNMjk3IDM4NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw3MS03MUwxMjAgMjgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIxNC4xIDAtNzEtNzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMEw0MDkgMjM5YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDI5NyAzODV6XCJdfSx5bz1kMyxQbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWx0ZXItY2lyY2xlLXhtYXJrXCIsaWNvbjpbNTc2LDUxMixbXSxcImUxN2JcIixcIk0zLjkgMjIuOUMxMC41IDguOSAyNC41IDAgNDAgMEg0NzJjMTUuNSAwIDI5LjUgOC45IDM2LjEgMjIuOXM0LjYgMzAuNS01LjIgNDIuNUwzOTYuNCAxOTUuNkMzMTYuMiAyMTIuMSAyNTYgMjgzIDI1NiAzNjhjMCAyNy40IDYuMyA1My40IDE3LjUgNzYuNWMtMS42LS44LTMuMi0xLjgtNC43LTIuOWwtNjQtNDhjLTguMS02LTEyLjgtMTUuNS0xMi44LTI1LjZWMjg4LjlMOSA2NS4zQy0uNyA1My40LTIuOCAzNi44IDMuOSAyMi45ek00MzIgNTEyYy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NHM2NC41LTE0NCAxNDQtMTQ0czE0NCA2NC41IDE0NCAxNDRzLTY0LjUgMTQ0LTE0NCAxNDR6bTU5LjMtMTgwLjdjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEw0MzIgMzQ1LjRsLTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw0MDkuNCAzNjhsLTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDQzMiAzOTAuNmwzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42TDQ1NC42IDM2OGwzNi43LTM2Ljd6XCJdfSxGbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsb2N1c3RcIixpY29uOls2NDAsNTEyLFtdLFwiZTUyMFwiLFwiTTM0NCAzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGgxNmM5OC43IDAgMTgwLjYgNzEuNCAxOTcgMTY1LjRjLTktMy41LTE4LjgtNS40LTI5LTUuNEg0NjMuOGwtNDEuOC05Ny41Yy0zLjQtNy45LTEwLjgtMTMuNC0xOS4zLTE0LjRzLTE3IDIuNy0yMi4xIDkuNmwtNDAuOSA1NS41LTIxLjctNTAuN2MtMy4zLTcuOC0xMC41LTEzLjItMTguOS0xNC4zcy0xNi43IDIuMy0yMiA4LjlsLTI0MCAzMDRjLTguMiAxMC40LTYuNCAyNS41IDQgMzMuN3MyNS41IDYuNCAzMy43LTRsNzkuNC0xMDAuNSA0MyAxNi40LTQwLjUgNTVjLTcuOSAxMC43LTUuNiAyNS43IDUuMSAzMy42czI1LjcgNS42IDMzLjYtNS4xTDI0Ny4xIDQwMGg3NC41bC0yOS4zIDQyLjNjLTcuNSAxMC45LTQuOCAyNS44IDYuMSAzMy40czI1LjggNC44IDMzLjQtNi4xTDM4MCA0MDBoODAuNGwzOC44IDY3LjljNi42IDExLjUgMjEuMiAxNS41IDMyLjcgOC45czE1LjUtMjEuMiA4LjktMzIuN0w1MTUuNiA0MDBINTI4YzQ0LjEgMCA3OS44LTM1LjcgODAtNzkuN2MwLS4xIDAtLjIgMC0uM1YyODBDNjA4IDE0MyA0OTcgMzIgMzYwIDMySDM0NHptNTAuNSAxNjhsMTcuMSA0MEgzNjVsMjkuNS00MHptLTg3LjcgMzguMWwtMS40IDEuOUgyNTcuMWwzMi43LTQxLjUgMTYuOSAzOS41ek0xMjAuOCAyNDBDODkuNCAyNDAgNjQgMjY1LjQgNjQgMjk2LjhjMCAxNS41IDYuMyAzMCAxNi45IDQwLjRMMTU4LjcgMjQwSDEyMC44ek01MjggMzIwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2elwiXX0sdTM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic29ydFwiLGljb246WzMyMCw1MTIsW1widW5zb3J0ZWRcIl0sXCJmMGRjXCIsXCJNMTM3LjQgNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxMjggMTI4YzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45cy0xNi42IDE5LjgtMjkuNiAxOS44SDMyYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOWwxMjgtMTI4em0wIDQyOS4zbC0xMjgtMTI4Yy05LjItOS4yLTExLjktMjIuOS02LjktMzQuOXMxNi42LTE5LjggMjkuNi0xOS44SDI4OGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45bC0xMjggMTI4Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHpcIl19LERvPXUzLEY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibGlzdC1vbFwiLGljb246WzUxMiw1MTIsW1wibGlzdC0xLTJcIixcImxpc3QtbnVtZXJpY1wiXSxcImYwY2JcIixcIk0yNCA1NmMwLTEzLjMgMTAuNy0yNCAyNC0yNEg4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxNzZoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRINTZWODBINDhDMzQuNyA4MCAyNCA2OS4zIDI0IDU2ek04Ni43IDM0MS4yYy02LjUtNy40LTE4LjMtNi45LTI0IDEuMkw1MS41IDM1Ny45Yy03LjcgMTAuOC0yMi43IDEzLjMtMzMuNSA1LjZzLTEzLjMtMjIuNy01LjYtMzMuNWwxMS4xLTE1LjZjMjMuNy0zMy4yIDcyLjMtMzUuNiA5OS4yLTQuOWMyMS4zIDI0LjQgMjAuOCA2MC45LTEuMSA4NC43TDg2LjggNDMySDEyMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgzMmMtOS41IDAtMTguMi01LjYtMjItMTQuNHMtMi4xLTE4LjkgNC4zLTI1LjlsNzItNzhjNS4zLTUuOCA1LjQtMTQuNiAuMy0yMC41ek0yMjQgNjRINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxNjBINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxNjBINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl19LFJvPUYsVW89Rixxbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24tZHJlc3MtYnVyc3RcIixpY29uOls2NDAsNTEyLFtdLFwiZTU0NFwiLFwiTTUyOCA0OGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6TTM5MC4yIDM4NEg0MDh2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoMTZ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoMTcuOGMxMC45IDAgMTguNi0xMC43IDE1LjItMjEuMUw1NDYuNyAyNDguMWwzMy45IDU2LjNjOS4xIDE1LjEgMjguOCAyMCA0My45IDEwLjlzMjAtMjguOCAxMC45LTQzLjlsLTUzLjYtODkuMmMtMjAuMi0zMy43LTU2LjctNTQuMy05Ni01NC4zSDQ3NC4yYy0zOS4zIDAtNzUuNyAyMC42LTk2IDU0LjNsLTUzLjYgODkuMmMtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOWwzMy45LTU2LjNMMzc1IDM2Mi45Yy0zLjUgMTAuNCA0LjMgMjEuMSAxNS4yIDIxLjF6TTE5MC45IDE4LjFDMTg4LjQgMTIgMTgyLjYgOCAxNzYgOHMtMTIuNCA0LTE0LjkgMTAuMWwtMjkuNCA3NEw1NS42IDY4LjljLTYuMy0xLjktMTMuMSAuMi0xNy4yIDUuM3MtNC42IDEyLjItMS40IDE3LjlsMzkuNSA2OS4xTDEwLjkgMjA2LjRjLTUuNCAzLjctOCAxMC4zLTYuNSAxNi43czYuNyAxMS4yIDEzLjEgMTIuMmw3OC43IDEyLjJMOTAuNiAzMjdjLS41IDYuNSAzLjEgMTIuNyA5IDE1LjVzMTIuOSAxLjggMTcuOC0yLjZMMTc2IDI4Ni4xbDU4LjYgNTMuOWM0LjggNC40IDExLjkgNS41IDE3LjggMi42czkuNS05IDktMTUuNWwtNS42LTc5LjQgNTAuNS03LjggMjQuNC00MC41LTU1LjItMzhMMzE1IDkyLjJjMy4zLTUuNyAyLjctMTIuOC0xLjQtMTcuOXMtMTAuOS03LjItMTcuMi01LjNMMjIwLjMgOTIuMWwtMjkuNC03NHpcIl19LHgzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1vbmV5LWNoZWNrLWRvbGxhclwiLGljb246WzU3Niw1MTIsW1wibW9uZXktY2hlY2stYWx0XCJdLFwiZjUzZFwiLFwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0yNzIgMTkySDQ5NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6TTI1NiAzMDRjMC04LjggNy4yLTE2IDE2LTE2SDQ5NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNnpNMTY0LjEgMTYwdjYuM2M2LjYgMS4yIDE2LjYgMy4yIDIxIDQuNGMxMC43IDIuOCAxNyAxMy44IDE0LjIgMjQuNXMtMTMuOCAxNy0yNC41IDE0LjJjLTMuOC0xLTE3LjQtMy43LTIxLjctNC4zYy0xMi4yLTEuOS0yMi4yLS4zLTI4LjYgMi42Yy02LjMgMi45LTcuOSA2LjItOC4yIDguMWMtLjYgMy40IDAgNC43IC4xIDVjLjMgLjUgMSAxLjggMy42IDMuNWM2LjEgNC4yIDE1LjcgNy4yIDI5LjkgMTEuNGwuOCAuMmMxMi4xIDMuNyAyOC4zIDguNSA0MC40IDE3LjRjNi43IDQuOSAxMyAxMS40IDE2LjkgMjAuNWM0IDkuMSA0LjggMTkuMSAzIDI5LjRjLTMuMyAxOS0xNS45IDMyLTMxLjYgMzguN2MtNC45IDIuMS0xMCAzLjYtMTUuNCA0LjZWMzUyYzAgMTEuMS05IDIwLjEtMjAuMSAyMC4xcy0yMC4xLTktMjAuMS0yMC4xdi02LjRjLTkuNS0yLjItMjEuOS02LjQtMjkuOC05LjFjLTEuNy0uNi0zLjItMS4xLTQuNC0xLjVjLTEwLjUtMy41LTE2LjEtMTQuOC0xMi43LTI1LjNzMTQuOC0xNi4xIDI1LjMtMTIuN2MyIC43IDQuMSAxLjQgNi40IDIuMWwwIDAgMCAwYzkuNSAzLjIgMjAuMiA2LjkgMjYuMiA3LjljMTIuOCAyIDIyLjcgLjcgMjguOC0xLjljNS41LTIuMyA3LjQtNS4zIDgtOC44Yy43LTQgLjEtNS45LS4yLTYuN2MtLjQtLjktMS4zLTIuMi0zLjctNGMtNS45LTQuMy0xNS4zLTcuNS0yOS4zLTExLjdsLTIuMi0uN2MtMTEuNy0zLjUtMjctOC4xLTM4LjYtMTZjLTYuNi00LjUtMTMuMi0xMC43LTE3LjMtMTkuNWMtNC4yLTktNS4yLTE4LjgtMy40LTI5YzMuMi0xOC4zIDE2LjItMzAuOSAzMS4xLTM3LjdjNS0yLjMgMTAuMy00IDE1LjktNS4xdi02YzAtMTEuMSA5LTIwLjEgMjAuMS0yMC4xczIwLjEgOSAyMC4xIDIwLjF6XCJdfSxHbz14MyxXbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2ZWN0b3Itc3F1YXJlXCIsaWNvbjpbNDQ4LDUxMixbXSxcImY1Y2JcIixcIk0zNjggODBoMzJ2MzJIMzY4Vjgwek0zNTIgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMySDEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMkMxNC4zIDMyIDAgNDYuMyAwIDY0djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyVjM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJIOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJIMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMlYxNjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMzUyek05NiAxNjBjMTcuNyAwIDMyLTE0LjMgMzItMzJIMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyVjM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJIMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyVjE2MHpNNDggNDAwSDgwdjMySDQ4VjQwMHptMzIwIDMyVjQwMGgzMnYzMkgzNjh6TTQ4IDExMlY4MEg4MHYzMkg0OHpcIl19LEVvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJyZWFkLXNsaWNlXCIsaWNvbjpbNTEyLDUxMixbXSxcImY3ZWNcIixcIk0yNTYgMzJDMTkyIDMyIDAgNjQgMCAxOTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRWNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQwMGMyNi41IDAgNDgtMjEuNSA0OC00OFYyNTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRDNTEyIDY0IDMyMCAzMiAyNTYgMzJ6XCJdfSxJbz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsYW5ndWFnZVwiLGljb246WzY0MCw1MTIsW10sXCJmMWFiXCIsXCJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRIMjU2aDQ4IDE2SDU3NmMzNS4zIDAgNjQgMjguNyA2NCA2NFYzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMzIwIDMwNCAyNTYgNjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHptMzIwIDBWMzg0SDU3NlYxMjhIMzIwek0xNzguMyAxNzUuOWMtMy4yLTcuMi0xMC40LTExLjktMTguMy0xMS45cy0xNS4xIDQuNy0xOC4zIDExLjlsLTY0IDE0NGMtNC41IDEwLjEgLjEgMjEuOSAxMC4yIDI2LjRzMjEuOS0uMSAyNi40LTEwLjJsOC45LTIwLjFoNzMuNmw4LjkgMjAuMWM0LjUgMTAuMSAxNi4zIDE0LjYgMjYuNCAxMC4yczE0LjYtMTYuMyAxMC4yLTI2LjRsLTY0LTE0NHpNMTYwIDIzMy4yTDE3OSAyNzZIMTQxbDE5LTQyLjh6TTQ0OCAxNjRjMTEgMCAyMCA5IDIwIDIwdjRoNDQgMTZjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwaC0ybC0xLjYgNC41Yy04LjkgMjQuNC0yMi40IDQ2LjYtMzkuNiA2NS40Yy45IC42IDEuOCAxLjEgMi43IDEuNmwxOC45IDExLjNjOS41IDUuNyAxMi41IDE4IDYuOSAyNy40cy0xOCAxMi41LTI3LjQgNi45bC0xOC45LTExLjNjLTQuNS0yLjctOC44LTUuNS0xMy4xLTguNWMtMTAuNiA3LjUtMjEuOSAxNC0zNCAxOS40bC0zLjYgMS42Yy0xMC4xIDQuNS0yMS45LS4xLTI2LjQtMTAuMnMuMS0yMS45IDEwLjItMjYuNGwzLjYtMS42YzYuNC0yLjkgMTIuNi02LjEgMTguNS05LjhsLTEyLjItMTIuMmMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwbDE0LjYgMTQuNiAuNSAuNWMxMi40LTEzLjEgMjIuNS0yOC4zIDI5LjgtNDVINDQ4IDM3NmMtMTEgMC0yMC05LTIwLTIwczktMjAgMjAtMjBoNTJ2LTRjMC0xMSA5LTIwIDIwLTIwelwiXX0sZzM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1raXNzLXdpbmstaGVhcnRcIixpY29uOls1MTIsNTEyLFsxMjg1MzYsXCJraXNzLXdpbmstaGVhcnRcIl0sXCJmNTk4XCIsXCJNNDk4IDMzOS43YzkuMS0yNi4yIDE0LTU0LjQgMTQtODMuN0M1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyYzM1LjQgMCA2OS4xLTcuMiA5OS43LTIwLjJjLTQuOC01LjUtOC41LTEyLjItMTAuNC0xOS43bC0yMi45LTg5LjNjLTEwLTM5IDExLjgtODAuOSA1MS44LTkyLjFjMzcuMi0xMC40IDczLjggMTAuMSA4Ny41IDQ0YzEyLjctMS42IDI1LjEgLjQgMzYuMiA1ek0yOTYgMzMyYzAgNi45LTMuMSAxMy4yLTcuMyAxOC4zYy00LjMgNS4yLTEwLjEgOS43LTE2LjcgMTMuNGMtMi43IDEuNS01LjcgMy04LjcgNC4zYzMuMSAxLjMgNiAyLjcgOC43IDQuM2M2LjYgMy43IDEyLjUgOC4yIDE2LjcgMTMuNGM0LjMgNS4xIDcuMyAxMS40IDcuMyAxOC4zcy0zLjEgMTMuMi03LjMgMTguM2MtNC4zIDUuMi0xMC4xIDkuNy0xNi43IDEzLjRDMjU4LjcgNDQzLjEgMjQxLjQgNDQ4IDIyNCA0NDhjLTMuNiAwLTYuOC0yLjUtNy43LTZzLjYtNy4yIDMuOC05bDAgMCAwIDAgMCAwIDAgMCAuMi0uMWMuMi0uMSAuNS0uMyAuOS0uNWMuOC0uNSAyLTEuMiAzLjQtMi4xYzIuOC0xLjkgNi41LTQuNSAxMC4yLTcuNmMzLjctMy4xIDcuMi02LjYgOS42LTEwLjFjMi41LTMuNSAzLjUtNi40IDMuNS04LjZzLTEtNS0zLjUtOC42Yy0yLjUtMy41LTUuOS02LjktOS42LTEwLjFjLTMuNy0zLjEtNy40LTUuNy0xMC4yLTcuNmMtMS40LS45LTIuNi0xLjYtMy40LTIuMWwtLjYtLjQtLjMtLjItLjItLjEgMCAwIDAgMCAwIDBjLTIuNS0xLjQtNC4xLTQuMS00LjEtN3MxLjYtNS42IDQuMS03bDAgMCAwIDAgMCAwIDAgMCAwIDAgLjItLjFjLjItLjEgLjUtLjMgLjktLjVjLjgtLjUgMi0xLjIgMy40LTIuMWMyLjgtMS45IDYuNS00LjUgMTAuMi03LjZjMy43LTMuMSA3LjItNi42IDkuNi0xMC4xYzIuNS0zLjUgMy41LTYuNCAzLjUtOC42cy0xLTUtMy41LTguNmMtMi41LTMuNS01LjktNi45LTkuNi0xMC4xYy0zLjctMy4xLTcuNC01LjctMTAuMi03LjZjLTEuNC0uOS0yLjYtMS42LTMuNC0yLjFjLS40LS4yLS43LS40LS45LS41bC0uMi0uMSAwIDAgMCAwIDAgMGMtMy4yLTEuOC00LjctNS41LTMuOC05czQuMS02IDcuNy02YzE3LjQgMCAzNC43IDQuOSA0Ny45IDEyLjNjNi42IDMuNyAxMi41IDguMiAxNi43IDEzLjRjNC4zIDUuMSA3LjMgMTEuNCA3LjMgMTguM3pNMTc2LjQgMjQwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTE5NC44LTYuNGMtMTcuNi0yMy41LTUyLjgtMjMuNS03MC40IDBjLTUuMyA3LjEtMTUuMyA4LjUtMjIuNCAzLjJzLTguNS0xNS4zLTMuMi0yMi40YzMwLjQtNDAuNSA5MS4yLTQwLjUgMTIxLjYgMGM1LjMgNy4xIDMuOSAxNy4xLTMuMiAyMi40cy0xNy4xIDMuOS0yMi40LTMuMnpNNDM0IDM1Mi4zYy02LTIzLjItMjguOC0zNy01MS4xLTMwLjhzLTM1LjQgMzAuMS0yOS41IDUzLjRsMjIuOSA4OS4zYzIuMiA4LjcgMTEuMiAxMy45IDE5LjggMTEuNGw4NC45LTIzLjhjMjIuMi02LjIgMzUuNC0zMC4xIDI5LjUtNTMuNHMtMjguOC0zNy01MS4xLTMwLjhsLTIwLjIgNS42LTUuNC0yMXpcIl19LE9vPWczLFhvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpbHRlclwiLGljb246WzUxMiw1MTIsW10sXCJmMGIwXCIsXCJNMy45IDU0LjlDMTAuNSA0MC45IDI0LjUgMzIgNDAgMzJINDcyYzE1LjUgMCAyOS41IDguOSAzNi4xIDIyLjlzNC42IDMwLjUtNS4yIDQyLjVMMzIwIDMyMC45VjQ0OGMwIDEyLjEtNi44IDIzLjItMTcuNyAyOC42cy0yMy44IDQuMy0zMy41LTNsLTY0LTQ4Yy04LjEtNi0xMi44LTE1LjUtMTIuOC0yNS42VjMyMC45TDkgOTcuM0MtLjcgODUuNC0yLjggNjguOCAzLjkgNTQuOXpcIl19LFFvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInF1ZXN0aW9uXCIsaWNvbjpbMzIwLDUxMixbMTAwNjcsMTAwNjgsNjE3MzZdLFwiM2ZcIixcIk05NiA5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzLTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJDMCA3NSA0MyAzMiA5NiAzMmg5N2M3MC4xIDAgMTI3IDU2LjkgMTI3IDEyN2MwIDUyLjQtMzIuMiA5OS40LTgxIDExOC40bC02MyAyNC41IDAgMTguMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzMDEuOWMwLTI2LjQgMTYuMi01MC4xIDQwLjgtNTkuNmw2My0yNC41QzI0MCAyMDguMyAyNTYgMTg1IDI1NiAxNTljMC0zNC44LTI4LjItNjMtNjMtNjNIOTZ6bTQ4IDM4NGMtMjIuMSAwLTQwLTE3LjktNDAtNDBzMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwelwiXX0sS289e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsZS1zaWduYXR1cmVcIixpY29uOls1NzYsNTEyLFtdLFwiZjU3M1wiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNDI4LjdjLTIuNyAxLjEtNS40IDItOC4yIDIuN2wtNjAuMSAxNWMtMyAuNy02IDEuMi05IDEuNGMtLjkgLjEtMS44IC4yLTIuNyAuMkgyNDBjLTYuMSAwLTExLjYtMy40LTE0LjMtOC44bC04LjgtMTcuN2MtMS43LTMuNC01LjEtNS41LTguOC01LjVzLTcuMiAyLjEtOC44IDUuNWwtOC44IDE3LjdjLTIuOSA1LjktOS4yIDkuNC0xNS43IDguOHMtMTIuMS01LjEtMTMuOS0xMS4zTDE0NCAzODFsLTkuOCAzMi44Yy02LjEgMjAuMy0yNC44IDM0LjItNDYgMzQuMkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg4LjJjNy4xIDAgMTMuMy00LjYgMTUuMy0xMS40bDE0LjktNDkuNWMzLjQtMTEuMyAxMy44LTE5LjEgMjUuNi0xOS4xczIyLjIgNy44IDI1LjYgMTkuMWwxMS42IDM4LjZjNy40LTYuMiAxNi44LTkuNyAyNi44LTkuN2MxNS45IDAgMzAuNCA5IDM3LjUgMjMuMmw0LjQgOC44aDguOWMtMy4xLTguOC0zLjctMTguNC0xLjQtMjcuOGwxNS02MC4xYzIuOC0xMS4zIDguNi0yMS41IDE2LjgtMjkuN0wzODQgMjAzLjZWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNNTQ5LjggMTM5LjdjLTE1LjYtMTUuNi00MC45LTE1LjYtNTYuNiAwbC0yOS40IDI5LjQgNzEgNzEgMjkuNC0yOS40YzE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42bC0xNC40LTE0LjR6TTMxMS45IDMyMWMtNC4xIDQuMS03IDkuMi04LjQgMTQuOWwtMTUgNjAuMWMtMS40IDUuNSAuMiAxMS4yIDQuMiAxNS4yczkuNyA1LjYgMTUuMiA0LjJsNjAuMS0xNWM1LjYtMS40IDEwLjgtNC4zIDE0LjktOC40TDUxMi4xIDI2Mi43bC03MS03MUwzMTEuOSAzMjF6XCJdfSxTMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1cC1kb3duLWxlZnQtcmlnaHRcIixpY29uOls1MTIsNTEyLFtcImFycm93cy1hbHRcIl0sXCJmMGIyXCIsXCJNMjc4LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhoMzJ2OTZIMTI4VjE5MmMwLTEyLjktNy44LTI0LjYtMTkuOC0yOS42cy0yNS43LTIuMi0zNC45IDYuOWwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzkuMiA5LjIgMjIuOSAxMS45IDM0LjkgNi45czE5LjgtMTYuNiAxOS44LTI5LjZWMjg4aDk2djk2SDE5MmMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlzLTE2LjYtMTkuOC0yOS42LTE5LjhIMjg4VjI4OGg5NnYzMmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtOS4yLTkuMi0yMi45LTExLjktMzQuOS02LjlzLTE5LjggMTYuNi0xOS44IDI5LjZ2MzJIMjg4VjEyOGgzMmMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC02NC02NHpcIl19LGpvPVMzLEpvPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXNlLWNoaW1uZXktdXNlclwiLGljb246WzU3Niw1MTIsW10sXCJlMDY1XCIsXCJNNTQzLjggMjg3LjZjMTcgMCAzMi0xNCAzMi0zMi4xYzEtOS0zLTE3LTExLTI0TDUxMiAxODVWNjRjMC0xNy43LTE0LjMtMzItMzItMzJINDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnYzNi43TDMwOS41IDdjLTYtNS0xNC03LTIxLTdzLTE1IDEtMjIgOEwxMCAyMzEuNWMtNyA3LTEwIDE1LTEwIDI0YzAgMTggMTQgMzIuMSAzMiAzMi4xaDMyVjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDguNWMzNS41IDAgNjQuMi0yOC44IDY0LTY0LjNsLS43LTE2MC4yaDMyek0yODggMjg4Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6TTE3NiA0MDBjMC00NC4yIDM1LjgtODAgODAtODBoNjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2SDE5MmMtOC44IDAtMTYtNy4yLTE2LTE2elwiXX0sWm89e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZC1ob2xkaW5nLWhlYXJ0XCIsaWNvbjpbNTc2LDUxMixbXSxcImY0YmVcIixcIk0xNDggNzYuNkMxNDggMzQuMyAxODIuMyAwIDIyNC42IDBjMjAuMyAwIDM5LjggOC4xIDU0LjEgMjIuNGw5LjMgOS4zIDkuMy05LjNDMzExLjYgOC4xIDMzMS4xIDAgMzUxLjQgMEMzOTMuNyAwIDQyOCAzNC4zIDQyOCA3Ni42YzAgMjAuMy04LjEgMzkuOC0yMi40IDU0LjFMMzAyLjEgMjM0LjFjLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwTDE3MC40IDEzMC43QzE1Ni4xIDExNi40IDE0OCA5Ni45IDE0OCA3Ni42ek01NjguMiAzMzYuM2MxMy4xIDE3LjggOS4zIDQyLjgtOC41IDU1LjlMNDMzLjEgNDg1LjVjLTIzLjQgMTcuMi01MS42IDI2LjUtODAuNyAyNi41SDE5MiAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMySDY4LjhsNDQuOS0zNmMyMi43LTE4LjIgNTAuOS0yOCA4MC0yOEgyNzJoMTYgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjg4IDI3MmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkgzOTIuNmwxMTkuNy04OC4yYzE3LjgtMTMuMSA0Mi44LTkuMyA1NS45IDguNXpNMTkzLjYgMzg0bDAgMC0uOSAwYy4zIDAgLjYgMCAuOSAwelwiXX0sWW89e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicHV6emxlLXBpZWNlXCIsaWNvbjpbNTEyLDUxMixbMTI5NTEzXSxcImYxMmVcIixcIk0xOTIgMTA0LjhjMC05LjItNS44LTE3LjMtMTMuMi0yMi44QzE2Ny4yIDczLjMgMTYwIDYxLjMgMTYwIDQ4YzAtMjYuNSAyOC43LTQ4IDY0LTQ4czY0IDIxLjUgNjQgNDhjMCAxMy4zLTcuMiAyNS4zLTE4LjggMzRjLTcuNCA1LjUtMTMuMiAxMy42LTEzLjIgMjIuOGMwIDEyLjggMTAuNCAyMy4yIDIzLjIgMjMuMkgzMzZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NTYuOGMwIDEyLjggMTAuNCAyMy4yIDIzLjIgMjMuMmM5LjIgMCAxNy4zLTUuOCAyMi44LTEzLjJjOC43LTExLjYgMjAuNy0xOC44IDM0LTE4LjhjMjYuNSAwIDQ4IDI4LjcgNDggNjRzLTIxLjUgNjQtNDggNjRjLTEzLjMgMC0yNS4zLTcuMi0zNC0xOC44Yy01LjUtNy40LTEzLjYtMTMuMi0yMi44LTEzLjJjLTEyLjggMC0yMy4yIDEwLjQtMjMuMiAyMy4yVjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgyNzkuMmMtMTIuOCAwLTIzLjItMTAuNC0yMy4yLTIzLjJjMC05LjIgNS44LTE3LjMgMTMuMi0yMi44YzExLjYtOC43IDE4LjgtMjAuNyAxOC44LTM0YzAtMjYuNS0yOC43LTQ4LTY0LTQ4cy02NCAyMS41LTY0IDQ4YzAgMTMuMyA3LjIgMjUuMyAxOC44IDM0YzcuNCA1LjUgMTMuMiAxMy42IDEzLjIgMjIuOGMwIDEyLjgtMTAuNCAyMy4yLTIzLjIgMjMuMkg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzQzLjJDMCAzMzAuNCAxMC40IDMyMCAyMy4yIDMyMGM5LjIgMCAxNy4zIDUuOCAyMi44IDEzLjJDNTQuNyAzNDQuOCA2Ni43IDM1MiA4MCAzNTJjMjYuNSAwIDQ4LTI4LjcgNDgtNjRzLTIxLjUtNjQtNDgtNjRjLTEzLjMgMC0yNS4zIDcuMi0zNCAxOC44QzQwLjUgMjUwLjIgMzIuNCAyNTYgMjMuMiAyNTZDMTAuNCAyNTYgMCAyNDUuNiAwIDIzMi44VjE3NmMwLTI2LjUgMjEuNS00OCA0OC00OEgxNjguOGMxMi44IDAgMjMuMi0xMC40IDIzLjItMjMuMnpcIl19LF9vPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1vbmV5LWNoZWNrXCIsaWNvbjpbNTc2LDUxMixbXSxcImY1M2NcIixcIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOFYzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NEg2NHptNDggMTYwSDI3MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6TTk2IDMzNmMwLTguOCA3LjItMTYgMTYtMTZINDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2ek0zNzYgMTYwaDgwYzEzLjMgMCAyNCAxMC43IDI0IDI0djQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0SDM3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMTg0YzAtMTMuMyAxMC43LTI0IDI0LTI0elwiXX0sTjM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3Rhci1oYWxmLXN0cm9rZVwiLGljb246WzU3Niw1MTIsW1wic3Rhci1oYWxmLWFsdFwiXSxcImY1YzBcIixcIk0yODggMzc2LjRsLjEtLjEgMjYuNCAxNC4xIDg1LjIgNDUuNS0xNi41LTk3LjYtNC44LTI4LjcgMjAuNy0yMC41IDcwLjEtNjkuMy05Ni4xLTE0LjItMjkuMy00LjMtMTIuOS0yNi42TDI4OC4xIDg2LjlsLS4xIC4zVjM3Ni40em0xNzUuMSA5OC4zYzIgMTItMyAyNC4yLTEyLjkgMzEuM3MtMjMgOC0zMy44IDIuM0wyODguMSA0MzkuOCAxNTkuOCA1MDguM0MxNDkgNTE0IDEzNS45IDUxMy4xIDEyNiA1MDZzLTE0LjktMTkuMy0xMi45LTMxLjNMMTM3LjggMzI5IDMzLjYgMjI1LjljLTguNi04LjUtMTEuNy0yMS4yLTcuOS0zMi43czEzLjctMTkuOSAyNS43LTIxLjdMMTk1IDE1MC4zIDI1OS40IDE4YzUuNC0xMSAxNi41LTE4IDI4LjgtMThzMjMuNCA3IDI4LjggMThsNjQuMyAxMzIuMyAxNDMuNiAyMS4yYzEyIDEuOCAyMiAxMC4yIDI1LjcgMjEuN3MuNyAyNC4yLTcuOSAzMi43TDQzOC41IDMyOWwyNC42IDE0NS43elwiXX0sJG89TjMsY249e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29kZVwiLGljb246WzY0MCw1MTIsW10sXCJmMTIxXCIsXCJNMzkyLjggMS4yYy0xNy00LjktMzQuNyA1LTM5LjYgMjJsLTEyOCA0NDhjLTQuOSAxNyA1IDM0LjcgMjIgMzkuNnMzNC43LTUgMzkuNi0yMmwxMjgtNDQ4YzQuOS0xNy01LTM0LjctMjItMzkuNnptODAuNiAxMjAuMWMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNMNTYyLjcgMjU2bC04OS40IDg5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTEyLTExMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTEyLTExMmMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDB6bS0zMDYuNyAwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTEyIDExMmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTEyIDExMmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2bDg5LjQtODkuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3pcIl19LHczPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndoaXNrZXktZ2xhc3NcIixpY29uOls1MTIsNTEyLFsxMjkzNDcsXCJnbGFzcy13aGlza2V5XCJdLFwiZjdhMFwiLFwiTTMyIDMyYy05LjMgMC0xOC4xIDQtMjQuMiAxMS4xUy0xIDU5LjQgLjMgNjguNmw1MCAzNDIuOWM1LjcgMzkuMyAzOS40IDY4LjUgNzkuMiA2OC41aDI1M2MzOS43IDAgNzMuNC0yOS4xIDc5LjItNjguNWw1MC0zNDIuOWMxLjMtOS4yLTEuNC0xOC41LTcuNS0yNS41UzQ4OS4zIDMyIDQ4MCAzMkgzMnpNODcuNyAyMjRMNjkgOTZINDQzTDQyNC4zIDIyNEg4Ny43elwiXX0sYW49dzMsc249e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnVpbGRpbmctY2lyY2xlLWV4Y2xhbWF0aW9uXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0ZDNcIixcIk00OCAwQzIxLjUgMCAwIDIxLjUgMCA0OFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhoOTZWNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2ODBoOTZjMTUuMSAwIDI4LjUtNi45IDM3LjMtMTcuOEMzNDAuNCA0NjIuMiAzMjAgNDE3LjUgMzIwIDM2OGMwLTU0LjcgMjQuOS0xMDMuNSA2NC0xMzUuOFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMjQwem0xMTItMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDBjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6TTgwIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJ6TTI3MiA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6TTQ5NiA1MTJjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRzLTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHptMC00OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0em0wLTE5MmM4LjggMCAxNiA3LjIgMTYgMTZ2ODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjg4YzAtOC44IDcuMi0xNiAxNi0xNnpcIl19LGVuPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1hZ25pZnlpbmctZ2xhc3MtY2hhcnRcIixpY29uOls1MTIsNTEyLFtdLFwiZTUyMlwiLFwiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZjLTM0LjQgMjUuMi03Ni44IDQwLTEyMi43IDQwQzkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwUzQxNiA5My4xIDQxNiAyMDh6bS0zMTIgOHY2NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6bTgwLTk2VjI4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptODAgNjR2OTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6XCJdfSxrMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy11cC1yaWdodC1mcm9tLXNxdWFyZVwiLGljb246WzQ0OCw1MTIsW1wiZXh0ZXJuYWwtbGlua1wiXSxcImYwOGVcIixcIk0yODggMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoNTAuN0wxNjkuNCAyNjUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwzODQgMTQxLjNWMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMjg4ek04MCA2NEMzNS44IDY0IDAgOTkuOCAwIDE0NFY0MDBjMCA0NC4yIDM1LjggODAgODAgODBIMzM2YzQ0LjIgMCA4MC0zNS44IDgwLTgwVjMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY4MGMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxNDRjMC04LjggNy4yLTE2IDE2LTE2aDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDgwelwiXX0sZm49azMscm49e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY3ViZXMtc3RhY2tlZFwiLGljb246WzQ0OCw1MTIsW10sXCJlNGU2XCIsXCJNMTkyIDY0djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTgyLjcgMjA3Yy0xNS4zIDguOC0yMC41IDI4LjQtMTEuNyA0My43bDMyIDU1LjRjOC44IDE1LjMgMjguNCAyMC41IDQzLjcgMTEuN2w1NS40LTMyYzE1LjMtOC44IDIwLjUtMjguNCAxMS43LTQzLjdsLTMyLTU1LjRjLTguOC0xNS4zLTI4LjQtMjAuNS00My43LTExLjdMODIuNyAyMDd6TTI4OCAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMkgyODh6bTY0IDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDM1MnpNMTYwIDM4NHY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzIgMzUyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg5NmMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRjMC0xNy43LTE0LjMtMzItMzItMzJIMzJ6XCJdfSxEPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndvbi1zaWduXCIsaWNvbjpbNTEyLDUxMixbODM2MSxcImtyd1wiLFwid29uXCJdLFwiZjE1OVwiLFwiTTYyLjQgNTMuOUM1Ni44IDM3LjEgMzguNiAyOC4xIDIxLjkgMzMuNlMtMy45IDU3LjQgMS42IDc0LjFMNTEuNiAyMjRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINzIuOWw1Ni43IDE3MC4xYzQuNSAxMy41IDE3LjQgMjIuNCAzMS42IDIxLjlzMjYuNC0xMC40IDI5LjgtMjQuMkwyMzMgMjg4aDQ2TDMyMSA0NTUuOGMzLjQgMTMuOCAxNS42IDIzLjcgMjkuOCAyNC4yczI3LjEtOC40IDMxLjYtMjEuOUw0MzkuMSAyODhINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ2MC40bDUwLTE0OS45YzUuNi0xNi44LTMuNS0zNC45LTIwLjItNDAuNXMtMzQuOSAzLjUtNDAuNSAyMC4yTDM5Mi45IDIyNEgzMjlMMjg3IDU2LjJDMjgzLjUgNDIgMjcwLjcgMzIgMjU2IDMycy0yNy41IDEwLTMxIDI0LjJMMTgzIDIyNGgtNjRMNjIuNCA1My45em03OCAyMzQuMUgxNjdsLTExLjQgNDUuNkwxNDAuNCAyODh6TTI0OSAyMjRsNy0yOC4xIDcgMjguMUgyNDl6bTk2IDY0aDI2LjZsLTE1LjIgNDUuNkwzNDUgMjg4elwiXX0sbG49RCxvbj1ELG5uPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZpcnVzLWNvdmlkXCIsaWNvbjpbNTEyLDUxMixbXSxcImU0YThcIixcIk0xOTIgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRoODBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjgwVjgxLjZjMzAuNyA0LjIgNTguOCAxNi4zIDgyLjMgMzQuMUwzODYuMSA5MiAzNzQuOCA4MC42Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNTYuNiA1Ni42YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNDIwIDEyNS45bC0yMy44IDIzLjhjMTcuOSAyMy41IDI5LjkgNTEuNyAzNC4xIDgyLjNINDY0VjIxNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjI4MEg0MzAuNGMtNC4yIDMwLjctMTYuMyA1OC44LTM0LjEgODIuM0w0MjAgMzg2LjFsMTEuMy0xMS4zYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNTYuNiA1Ni42Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDM4Ni4xIDQyMGwtMjMuOC0yMy44Yy0yMy41IDE3LjktNTEuNyAyOS45LTgyLjMgMzQuMVY0NjRoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDE2VjQzMC40Yy0zMC43LTQuMi01OC44LTE2LjMtODIuMy0zNC4xTDEyNS45IDQyMGwxMS4zIDExLjNjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw0Ni43IDQwOC43Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBMOTIgMzg2LjFsMjMuOC0yMy44Qzk3LjkgMzM4LjggODUuOCAzMTAuNyA4MS42IDI4MEg0OHYxNmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyMTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHYxNkg4MS42YzQuMi0zMC43IDE2LjMtNTguOCAzNC4xLTgyLjNMOTIgMTI1LjkgODAuNiAxMzcuMmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1Ni42LTU2LjZjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDEyNS45IDkybDIzLjggMjMuOGMyMy41LTE3LjkgNTEuNy0yOS45IDgyLjMtMzQuMVY0OEgyMTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0em00OCAyMDBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4em02NCAxMDRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHpcIl19LEhuPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImF1c3RyYWwtc2lnblwiLGljb246WzQ0OCw1MTIsW10sXCJlMGE5XCIsXCJNMjUzLjUgNTEuN0MyNDguNiAzOS44IDIzNi45IDMyIDIyNCAzMnMtMjQuNiA3LjgtMjkuNSAxOS43TDEyMi43IDIyNEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg5Nkw4Mi43IDMyMEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1NkwzNC41IDQzNS43Yy02LjggMTYuMyAuOSAzNSAxNy4yIDQxLjhzMzUtLjkgNDEuOC0xNy4yTDEyNS4zIDM4NEgzMjIuN2wzMS44IDc2LjNjNi44IDE2LjMgMjUuNSAyNCA0MS44IDE3LjJzMjQtMjUuNSAxNy4yLTQxLjhMMzkyIDM4NGgyNGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNjUuM0wzNTIgMjg4aDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyNS4zTDI1My41IDUxLjd6TTI1NiAyMjRIMTkybDMyLTc2LjhMMjU2IDIyNHptLTkwLjcgNjRIMjgyLjdMMjk2IDMyMEgxNTJsMTMuMy0zMnpcIl19LHpuPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZcIixpY29uOlszMjAsNTEyLFsxMDJdLFwiNDZcIixcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0VjI1NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODhIMjI0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDY0Vjk2SDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnpcIl19LFZuPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxlYWZcIixpY29uOls1MTIsNTEyLFtdLFwiZjA2Y1wiLFwiTTI3MiA5NmMtNzguNiAwLTE0NS4xIDUxLjUtMTY3LjcgMTIyLjVjMzMuNi0xNyA3MS41LTI2LjUgMTExLjctMjYuNWg4OGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyODggMjE2czAgMCAwIDBjLTE2LjYgMC0zMi43IDEuOS00OC4zIDUuNGMtMjUuOSA1LjktNDkuOSAxNi40LTcxLjQgMzAuN2MwIDAgMCAwIDAgMEMzOC4zIDI5OC44IDAgMzY0LjkgMCA0NDB2MTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFY0NDBjMC00OC43IDIwLjctOTIuNSA1My44LTEyMy4yQzEyMS42IDM5Mi4zIDE5MC4zIDQ0OCAyNzIgNDQ4bDEgMGMxMzIuMS0uNyAyMzktMTMwLjkgMjM5LTI5MS40YzAtNDIuNi03LjUtODMuMS0yMS4xLTExOS42Yy0yLjYtNi45LTEyLjctNi42LTE2LjItLjFDNDU1LjkgNzIuMSA0MTguNyA5NiAzNzYgOTZMMjcyIDk2elwiXX0sbW49e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicm9hZFwiLGljb246WzU3Niw1MTIsWzEyODczOV0sXCJmMDE4XCIsXCJNMjU2IDMySDE4MS4yYy0yNy4xIDAtNTEuMyAxNy4xLTYwLjMgNDIuNkwzLjEgNDA3LjJDMS4xIDQxMyAwIDQxOS4yIDAgNDI1LjRDMCA0NTUuNSAyNC41IDQ4MCA1NC42IDQ4MEgyNTZWNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2NjRINTIxLjRjMzAuMiAwIDU0LjYtMjQuNSA1NC42LTU0LjZjMC02LjItMS4xLTEyLjQtMy4xLTE4LjJMNDU1LjEgNzQuNkM0NDYgNDkuMSA0MjEuOSAzMiAzOTQuOCAzMkgzMjBWOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzJ6bTY0IDE5MnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpcIl19LGIzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRheGlcIixpY29uOls1MTIsNTEyLFsxMjg2NjIsXCJjYWJcIl0sXCJmMWJhXCIsXCJNMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjY0YzAgLjEgMCAuMSAwIC4yYy0zOC42IDIuMi03Mi4zIDI3LjMtODUuMiA2NC4xTDM5LjYgMjI4LjhDMTYuNCAyMzguNCAwIDI2MS4zIDAgMjg4VjQzMnY0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlY0MzJINDE2djQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjQzMiAyODhjMC0yNi43LTE2LjQtNDkuNi0zOS42LTU5LjJMNDM3LjIgMTI4LjNjLTEyLjktMzYuOC00Ni42LTYyLTg1LjItNjQuMWMwLS4xIDAtLjEgMC0uMlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxOTJ6TTE2NS40IDEyOEgzNDYuNmMxMy42IDAgMjUuNyA4LjYgMzAuMiAyMS40TDQwMi45IDIyNEgxMDkuMWwyNi4xLTc0LjZjNC41LTEyLjggMTYuNi0yMS40IDMwLjItMjEuNHpNOTYgMzUyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTM1Mi0zMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdfSx2bj1iMyxNbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24tY2lyY2xlLXBsdXNcIixpY29uOls1NzYsNTEyLFtdLFwiZTU0MVwiLFwiTTIwOCA0OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6TTE1MiAzNTJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1Ni45TDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42aDI5LjdjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNDQuOSA3NC43Yy0xNi4xIDE3LjYtMjguNiAzOC41LTM2LjYgNjEuNWMtMS45LTEuOC0zLjUtMy45LTQuOS02LjNMMjMyIDI1Ni45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMTUyek00MzIgNTEyYy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NHM2NC41LTE0NCAxNDQtMTQ0czE0NCA2NC41IDE0NCAxNDRzLTY0LjUgMTQ0LTE0NCAxNDR6bTE2LTIwOGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnY0OEgzNjhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYzODRoNDhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZINDQ4VjMwNHpcIl19LEEzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNoYXJ0LXBpZVwiLGljb246WzU3Niw1MTIsW1wicGllLWNoYXJ0XCJdLFwiZjIwMFwiLFwiTTMwNCAyNDBWMTYuNmMwLTkgNy0xNi42IDE2LTE2LjZDNDQzLjcgMCA1NDQgMTAwLjMgNTQ0IDIyNGMwIDktNy42IDE2LTE2LjYgMTZIMzA0ek0zMiAyNzJDMzIgMTUwLjcgMTIyLjEgNTAuMyAyMzkgMzQuM2M5LjItMS4zIDE3IDYuMSAxNyAxNS40VjI4OEw0MTIuNSA0NDQuNWM2LjcgNi43IDYuMiAxNy43LTEuNSAyMy4xQzM3MS44IDQ5NS42IDMyMy44IDUxMiAyNzIgNTEyQzEzOS41IDUxMiAzMiA0MDQuNiAzMiAyNzJ6bTUyNi40IDE2YzkuMyAwIDE2LjYgNy44IDE1LjQgMTdjLTcuNyA1NS45LTM0LjYgMTA1LjYtNzMuOSAxNDIuM2MtNiA1LjYtMTUuNCA1LjItMjEuMi0uN0wzMjAgMjg4SDU1OC40elwiXX0sdG49QTMsaG49e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9sdC1saWdodG5pbmdcIixpY29uOlszODQsNTEyLFtdLFwiZTBiN1wiLFwiTTAgMjU2TDI4LjUgMjhjMi0xNiAxNS42LTI4IDMxLjgtMjhIMjI4LjljMTUgMCAyNy4xIDEyLjEgMjcuMSAyNy4xYzAgMy4yLS42IDYuNS0xLjcgOS41TDIwOCAxNjBIMzQ3LjNjMjAuMiAwIDM2LjcgMTYuNCAzNi43IDM2LjdjMCA3LjQtMi4yIDE0LjYtNi40IDIwLjdsLTE5Mi4yIDI4MWMtNS45IDguNi0xNS42IDEzLjctMjUuOSAxMy43aC0yLjljLTE1LjcgMC0yOC41LTEyLjgtMjguNS0yOC41YzAtMi4zIC4zLTQuNiAuOS02LjlMMTc2IDI4OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6XCJdfSxDbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzYWNrLXhtYXJrXCIsaWNvbjpbNTEyLDUxMixbXSxcImU1NmFcIixcIk0xOTIgOTZIMzIwbDQ3LjQtNzEuMUMzNzQuNSAxNC4yIDM2Ni45IDAgMzU0LjEgMEgxNTcuOWMtMTIuOCAwLTIwLjQgMTQuMi0xMy4zIDI0LjlMMTkyIDk2em0xMjggMzJIMTkyYy0zLjggMi41LTguMSA1LjMtMTMgOC40bDAgMCAwIDBDMTIyLjMgMTcyLjcgMCAyNTAuOSAwIDQxNmMwIDUzIDQzIDk2IDk2IDk2SDQxNmM1MyAwIDk2LTQzIDk2LTk2YzAtMTY1LjEtMTIyLjMtMjQzLjMtMTc5LTI3OS42Yy00LjgtMy4xLTkuMi01LjktMTMtOC40ek0yODkuOSAzMzZsNDcgNDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDctNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDctNDctNDctNDdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0NyA0NyA0Ny00N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ3IDQ3elwiXX0sTG49e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsZS1leGNlbFwiLGljb246WzM4NCw1MTIsW10sXCJmMWMzXCIsXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek0xNTUuNyAyNTAuMkwxOTIgMzAyLjFsMzYuMy01MS45YzcuNi0xMC45IDIyLjYtMTMuNSAzMy40LTUuOXMxMy41IDIyLjYgNS45IDMzLjRMMjIxLjMgMzQ0bDQ2LjQgNjYuMmM3LjYgMTAuOSA1IDI1LjgtNS45IDMzLjRzLTI1LjggNS0zMy40LTUuOUwxOTIgMzg1LjhsLTM2LjMgNTEuOWMtNy42IDEwLjktMjIuNiAxMy41LTMzLjQgNS45cy0xMy41LTIyLjYtNS45LTMzLjRMMTYyLjcgMzQ0bC00Ni40LTY2LjJjLTcuNi0xMC45LTUtMjUuOCA1LjktMzMuNHMyNS44LTUgMzMuNCA1Ljl6XCJdfSxwbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLWNvbnRyYWN0XCIsaWNvbjpbMzg0LDUxMixbXSxcImY1NmNcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTgwIDY0aDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0aDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em01NC4yIDI1My44Yy02LjEgMjAuMy0yNC44IDM0LjItNDYgMzQuMkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg4LjJjNy4xIDAgMTMuMy00LjYgMTUuMy0xMS40bDE0LjktNDkuNWMzLjQtMTEuMyAxMy44LTE5LjEgMjUuNi0xOS4xczIyLjIgNy43IDI1LjYgMTkuMWwxMS42IDM4LjZjNy40LTYuMiAxNi44LTkuNyAyNi44LTkuN2MxNS45IDAgMzAuNCA5IDM3LjUgMjMuMmw0LjQgOC44SDMwNGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgyNDBjLTYuMSAwLTExLjYtMy40LTE0LjMtOC44bC04LjgtMTcuN2MtMS43LTMuNC01LjEtNS41LTguOC01LjVzLTcuMiAyLjEtOC44IDUuNWwtOC44IDE3LjdjLTIuOSA1LjktOS4yIDkuNC0xNS43IDguOHMtMTIuMS01LjEtMTMuOS0xMS4zTDE0NCAzNDlsLTkuOCAzMi44elwiXX0sZG49e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlzaC1maW5zXCIsaWNvbjpbNTc2LDUxMixbXSxcImU0ZjJcIixcIk0yNzUuMiAzOC40Yy0xMC42LTgtMjUtOC41LTM2LjMtMS41UzIyMiA1Ny4zIDIyNC42IDcwLjNsOS43IDQ4LjZjLTE5LjQgOS0zNi45IDE5LjktNTIuNCAzMS41Yy0xNS4zIDExLjUtMjkgMjMuOS00MC43IDM2LjNMNDguMSAxMzIuNGMtMTIuNS03LjMtMjguNC01LjMtMzguNyA0LjlTLTMgMTYzLjMgNC4yIDE3NS45TDUwIDI1NiA0LjIgMzM2LjFjLTcuMiAxMi42LTUgMjguNCA1LjMgMzguNnMyNi4xIDEyLjIgMzguNyA0LjlsOTMuMS01NC4zYzExLjggMTIuMyAyNS40IDI0LjggNDAuNyAzNi4zYzE1LjUgMTEuNiAzMyAyMi41IDUyLjQgMzEuNWwtOS43IDQ4LjZjLTIuNiAxMyAzLjEgMjYuMyAxNC4zIDMzLjNzMjUuNiA2LjUgMzYuMy0xLjVsNzcuNi01OC4yYzU0LjktNCAxMDEuNS0yNyAxMzcuMi01My44YzM5LjItMjkuNCA2Ny4yLTY0LjcgODEuNi04OS41YzUuOC05LjkgNS44LTIyLjIgMC0zMi4xYy0xNC40LTI0LjgtNDIuNS02MC4xLTgxLjYtODkuNWMtMzUuOC0yNi44LTgyLjMtNDkuOC0xMzcuMi01My44TDI3NS4yIDM4LjR6TTQ0OCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXX0sdW49e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnVpbGRpbmctZmxhZ1wiLGljb246WzY0MCw1MTIsW10sXCJlNGQ1XCIsXCJNNDggMEMyMS41IDAgMCAyMS41IDAgNDhWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDk2VjQzMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djgwaDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek02NCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6bTExMi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNODAgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE2YzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMnpNMjcyIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDQ4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjUxMmg2NFYxOTJINjI0YzguOCAwIDE2LTcuMiAxNi0xNlY0OGMwLTguOC03LjItMTYtMTYtMTZINDgwYzAtMTcuNy0xNC4zLTMyLTMyLTMyelwiXX0sQjM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1ncmluLWJlYW1cIixpY29uOls1MTIsNTEyLFsxMjg1MTYsXCJncmluLWJlYW1cIl0sXCJmNTgyXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMzgzLjggMzE3LjhjMTIuMy0zLjcgMjQuMyA3IDE5LjIgMTguN2MtMjQuNSA1Ni45LTgxLjEgOTYuNy0xNDcgOTYuN3MtMTIyLjUtMzkuOC0xNDctOTYuN2MtNS4xLTExLjggNi45LTIyLjQgMTkuMi0xOC43QzE2Ni43IDMyOS40IDIxMC4xIDMzNiAyNTYgMzM2czg5LjMtNi42IDEyNy44LTE4LjJ6bS0xNjYuMi04OWwwIDAgMCAwLS4yLS4yYy0uMi0uMi0uNC0uNS0uNy0uOWMtLjYtLjgtMS42LTItMi44LTMuNGMtMi41LTIuOC02LTYuNi0xMC4yLTEwLjNjLTguOC03LjgtMTguOC0xNC0yNy43LTE0cy0xOC45IDYuMi0yNy43IDE0Yy00LjIgMy43LTcuNyA3LjUtMTAuMiAxMC4zYy0xLjIgMS40LTIuMiAyLjYtMi44IDMuNGMtLjMgLjQtLjYgLjctLjcgLjlsLS4yIC4yIDAgMCAwIDAgMCAwYy0yLjEgMi44LTUuNyAzLjktOC45IDIuOHMtNS41LTQuMS01LjUtNy42YzAtMTcuOSA2LjctMzUuNiAxNi42LTQ4LjhjOS44LTEzIDIzLjktMjMuMiAzOS40LTIzLjJzMjkuNiAxMC4yIDM5LjQgMjMuMmM5LjkgMTMuMiAxNi42IDMwLjkgMTYuNiA0OC44YzAgMy40LTIuMiA2LjUtNS41IDcuNnMtNi45IDAtOC45LTIuOGwwIDAgMCAwem0xNjAgMGwwIDAtLjItLjJjLS4yLS4yLS40LS41LS43LS45Yy0uNi0uOC0xLjYtMi0yLjgtMy40Yy0yLjUtMi44LTYtNi42LTEwLjItMTAuM2MtOC44LTcuOC0xOC44LTE0LTI3LjctMTRzLTE4LjkgNi4yLTI3LjcgMTRjLTQuMiAzLjctNy43IDcuNS0xMC4yIDEwLjNjLTEuMiAxLjQtMi4yIDIuNi0yLjggMy40Yy0uMyAuNC0uNiAuNy0uNyAuOWwtLjIgLjIgMCAwIDAgMCAwIDBjLTIuMSAyLjgtNS43IDMuOS04LjkgMi44cy01LjUtNC4xLTUuNS03LjZjMC0xNy45IDYuNy0zNS42IDE2LjYtNDguOGM5LjgtMTMgMjMuOS0yMy4yIDM5LjQtMjMuMnMyOS42IDEwLjIgMzkuNCAyMy4yYzkuOSAxMy4yIDE2LjYgMzAuOSAxNi42IDQ4LjhjMCAzLjQtMi4yIDYuNS01LjUgNy42cy02LjkgMC04LjktMi44bDAgMCAwIDAgMCAwelwiXX0seG49QjMsZ249e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwib2JqZWN0LXVuZ3JvdXBcIixpY29uOls2NDAsNTEyLFtdLFwiZjI0OFwiLFwiTTMyIDExOS40QzEyLjkgMTA4LjQgMCA4Ny43IDAgNjRDMCAyOC43IDI4LjcgMCA2NCAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMkgzMjguNkMzMzkuNiAxMi45IDM2MC4zIDAgMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40VjIzMi42YzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRjLTIzLjcgMC00NC40LTEyLjktNTUuNC0zMkgxMTkuNGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjExOS40ek0xMTkuNCA5NmMtNS42IDkuNy0xMy43IDE3LjgtMjMuNCAyMy40VjIzMi42YzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNEgzMjguNmM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRWMTE5LjRjLTkuNy01LjYtMTcuOC0xMy43LTIzLjQtMjMuNEgxMTkuNHptMTkyIDM4NGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0yMy43IDEyLjktNDQuNCAzMi01NS40VjM1Mmg2NHY0MC42YzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNEg1MjAuNmM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRWMjc5LjRjLTkuNy01LjYtMTcuOC0xMy43LTIzLjQtMjMuNGgtNDZjLTUuNC0xNS40LTE0LjYtMjguOS0yNi41LTM5LjZWMTkyaDcyLjZjMTEuMS0xOS4xIDMxLjctMzIgNTUuNC0zMmMzNS4zIDAgNjQgMjguNyA2NCA2NGMwIDIzLjctMTIuOSA0NC40LTMyIDU1LjRWMzkyLjZjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNGMwIDM1LjMtMjguNyA2NC02NCA2NGMtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMySDMxMS40elwiXX0sU249e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicG9vcFwiLGljb246WzUxMiw1MTIsW10sXCJmNjE5XCIsXCJNMjU0LjQgNi42YzMuNS00LjMgOS02LjUgMTQuNS01LjdDMzE1LjggNy4yIDM1MiA0Ny40IDM1MiA5NmMwIDExLjItMS45IDIyLTUuNSAzMkgzNTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAxOS4xLTguNCAzNi4zLTIxLjcgNDhINDA4YzM5LjggMCA3MiAzMi4yIDcyIDcyYzAgMjMuMi0xMSA0My44LTI4IDU3YzM0LjEgNS43IDYwIDM1LjMgNjAgNzFjMCAzOS44LTMyLjIgNzItNzIgNzJINzJjLTM5LjggMC03Mi0zMi4yLTcyLTcyYzAtMzUuNyAyNS45LTY1LjMgNjAtNzFjLTE3LTEzLjItMjgtMzMuOC0yOC01N2MwLTM5LjggMzIuMi03MiA3Mi03MmgxMy43QzEwNC40IDIyOC4zIDk2IDIxMS4xIDk2IDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGgxNi4yYzQ0LjEtLjEgNzkuOC0zNS45IDc5LjgtODBjMC05LjItMS41LTE3LjktNC4zLTI2LjFjLTEuOC01LjItLjgtMTEuMSAyLjgtMTUuNHpcIl19LFQzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxvY2F0aW9uLXBpblwiLGljb246WzM4NCw1MTIsW1wibWFwLW1hcmtlclwiXSxcImYwNDFcIixcIk0zODQgMTkyYzAgODcuNC0xMTcgMjQzLTE2OC4zIDMwNy4yYy0xMi4zIDE1LjMtMzUuMSAxNS4zLTQ3LjQgMEMxMTcgNDM1IDAgMjc5LjQgMCAxOTJDMCA4NiA4NiAwIDE5MiAwUzM4NCA4NiAzODQgMTkyelwiXX0sTm49VDMsd249e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwia2FhYmFcIixpY29uOls1NzYsNTEyLFsxMjgzMzFdLFwiZjY2YlwiLFwiTTYwIDEyMGwyMjggNzEuMkw1MTYgMTIwIDI4OCA0OC44IDYwIDEyMHpNMjc4LjUgMS41YzYuMi0xLjkgMTIuOS0xLjkgMTkuMSAwbDI1NiA4MEM1NjYuOSA4NS42IDU3NiA5OCA1NzYgMTEydjE2IDAgMjEuMkwyOTIuOCAyMzcuN2MtMy4xIDEtNi40IDEtOS41IDBMMCAxNDkuMlYxMjggMTEyQzAgOTggOS4xIDg1LjYgMjIuNSA4MS41bDI1Ni04MHptMjMuOSAyNjYuOEw1NzYgMTgyLjh2NDYuNWwtNTIuOCAxNi41Yy04LjQgMi42LTEzLjEgMTEuNi0xMC41IDIwczExLjYgMTMuMSAyMCAxMC41TDU3NiAyNjIuOFY0MDBjMCAxNC05LjEgMjYuNC0yMi41IDMwLjVsLTI1NiA4MGMtNi4yIDEuOS0xMi45IDEuOS0xOS4xIDBsLTI1Ni04MEM5LjEgNDI2LjQgMCA0MTQgMCA0MDBWMjYyLjhsNDMuMiAxMy41YzguNCAyLjYgMTcuNC0yLjEgMjAtMTAuNXMtMi4xLTE3LjQtMTAuNS0yMEwwIDIyOS4yVjE4Mi44bDI3My43IDg1LjVjOS4zIDIuOSAxOS4zIDIuOSAyOC42IDB6bS0xODUuNS0yLjZjLTguNC0yLjYtMTcuNCAyLjEtMjAgMTAuNXMyLjEgMTcuNCAxMC41IDIwbDY0IDIwYzguNCAyLjYgMTcuNC0yLjEgMjAtMTAuNXMtMi4xLTE3LjQtMTAuNS0yMGwtNjQtMjB6bTM1MiAzMC41YzguNC0yLjYgMTMuMS0xMS42IDEwLjUtMjBzLTExLjYtMTMuMS0yMC0xMC41bC02NCAyMGMtOC40IDIuNi0xMy4xIDExLjYtMTAuNSAyMHMxMS42IDEzLjEgMjAgMTAuNWw2NC0yMHptLTIyNCA5LjVjLTguNC0yLjYtMTcuNCAyLjEtMjAgMTAuNXMyLjEgMTcuNCAxMC41IDIwbDM4LjUgMTJjOS4zIDIuOSAxOS4zIDIuOSAyOC42IDBsMzguNS0xMmM4LjQtMi42IDEzLjEtMTEuNiAxMC41LTIwcy0xMS42LTEzLjEtMjAtMTAuNWwtMzguNSAxMmMtMy4xIDEtNi40IDEtOS41IDBsLTM4LjUtMTJ6XCJdfSxrbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0b2lsZXQtcGFwZXJcIixpY29uOls2NDAsNTEyLFsxMjk1MzFdLFwiZjcxZVwiLFwiTTQ0NC4yIDBDMzk3LjIgNDkuNiAzODQgMTI2LjUgMzg0IDE5MmMwIDE1OC44LTI3LjMgMjQ3LTQyLjcgMjgzLjljLTEwIDI0LTMzLjIgMzYuMS01NS40IDM2LjFINDhjLTExLjUgMC0yMi4yLTYuMi0yNy44LTE2LjJzLTUuNi0yMi4zIC40LTMyLjJjOS44LTE3LjcgMTUuNC0zOC4yIDIwLjUtNTcuN0M1Mi4zIDM2Mi44IDY0IDI5My41IDY0IDE5MkM2NCA4NiAxMDcgMCAxNjAgMEg0NDQuMnpNNTEyIDM4NGMtNTMgMC05Ni04Ni05Ni0xOTJTNDU5IDAgNTEyIDBzOTYgODYgOTYgMTkycy00MyAxOTItOTYgMTkyem0wLTEyOGMxNy43IDAgMzItMjguNyAzMi02NHMtMTQuMy02NC0zMi02NHMtMzIgMjguNy0zMiA2NHMxNC4zIDY0IDMyIDY0ek0xNDQgMjA4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6bTY0IDBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNnptNDggMTZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZ6bTgwLTE2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6XCJdfSxSPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhlbG1ldC1zYWZldHlcIixpY29uOls1NzYsNTEyLFtcImhhcmQtaGF0XCIsXCJoYXQtaGFyZFwiXSxcImY4MDdcIixcIk0yNTYgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjIuMyA5OS42YzAgNS42LTQuNSAxMC4xLTEwLjEgMTAuMWMtMy42IDAtNy0xLjktOC44LTUuMUwxNTcuMSA4N0M4MyAxMjMuNSAzMiAxOTkuOCAzMiAyODh2NjRINTQ0bDAtNjYuNGMtLjktODcuMi01MS43LTE2Mi40LTEyNS4xLTE5OC42bC00OCA4My45Yy0xLjggMy4yLTUuMiA1LjEtOC44IDUuMWMtNS42IDAtMTAuMS00LjUtMTAuMS0xMC4xVjY2LjMgNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2ek0xNi42IDM4NEM3LjQgMzg0IDAgMzkxLjQgMCA0MDAuNmMwIDQuNyAyIDkuMiA1LjggMTEuOUMyNy41IDQyOC40IDExMS44IDQ4MCAyODggNDgwczI2MC41LTUxLjYgMjgyLjItNjcuNWMzLjgtMi44IDUuOC03LjIgNS44LTExLjljMC05LjItNy40LTE2LjYtMTYuNi0xNi42SDE2LjZ6XCJdfSxibj1SLEFuPVIsQm49e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZWplY3RcIixpY29uOls0NDgsNTEyLFs5MTY3XSxcImYwNTJcIixcIk0yMjQgMzJjMTMuNSAwIDI2LjMgNS42IDM1LjQgMTUuNmwxNzYgMTkyYzEyLjkgMTQgMTYuMiAzNC4zIDguNiA1MS44UzQxOSAzMjAgNDAwIDMyMEg0OGMtMTkgMC0zNi4zLTExLjItNDMuOS0yOC43cy00LjMtMzcuNyA4LjYtNTEuOGwxNzYtMTkyQzE5Ny43IDM3LjYgMjEwLjUgMzIgMjI0IDMyek0wIDQzMmMwLTI2LjUgMjEuNS00OCA0OC00OEg0MDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4elwiXX0seTM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2lyY2xlLXJpZ2h0XCIsaWNvbjpbNTEyLDUxMixbNjE4MzgsXCJhcnJvdy1hbHQtY2lyY2xlLXJpZ2h0XCJdLFwiZjM1YVwiLFwiTTAgMjU2QzAgMzk3LjQgMTE0LjYgNTEyIDI1NiA1MTJzMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2em0zOTUuMyAxMS4zbC0xMTIgMTEyYy00LjYgNC42LTExLjUgNS45LTE3LjQgMy41cy05LjktOC4zLTkuOS0xNC44bDAtNjQtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDAtNjRjMC02LjUgMy45LTEyLjMgOS45LTE0LjhzMTIuOS0xLjEgMTcuNCAzLjVsMTEyIDExMmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnpcIl19LFRuPXkzLHluPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBsYW5lLWNpcmNsZS1jaGVja1wiLGljb246WzY0MCw1MTIsW10sXCJlNTU1XCIsXCJNMjU2IDBjLTM1IDAtNjQgNTkuNS02NCA5My43djg0LjZMOC4xIDI4My40Yy01IDIuOC04LjEgOC4yLTguMSAxMy45djY1LjVjMCAxMC42IDEwLjIgMTguMyAyMC40IDE1LjRsMTcxLjYtNDkgMCA3MC45LTU3LjYgNDMuMmMtNCAzLTYuNCA3LjgtNi40IDEyLjh2NDJjMCA3LjggNi4zIDE0IDE0IDE0YzEuMyAwIDIuNi0uMiAzLjktLjVMMjU2IDQ4MGwxMTAuMSAzMS41YzEuMyAuNCAyLjYgLjUgMy45IC41YzYgMCAxMS4xLTMuNyAxMy4xLTlDMzQ0LjUgNDcwLjcgMzIwIDQyMi4yIDMyMCAzNjhjMC02MC42IDMwLjYtMTE0IDc3LjEtMTQ1LjZMMzIwIDE3OC4zVjkzLjdDMzIwIDU5LjUgMjkyIDAgMjU2IDB6TTY0MCAzNjhjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0em0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl19LFAzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2Utcm9sbGluZy1leWVzXCIsaWNvbjpbNTEyLDUxMixbMTI4NTgwLFwibWVoLXJvbGxpbmctZXllc1wiXSxcImY1YTVcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0xOTIgMzY4SDMyMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxOTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTMyLTE0NGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTI2IDE1LjUtNDguNCAzNy44LTU4LjRjLTMuNyA1LjItNS44IDExLjYtNS44IDE4LjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTYuOS0yLjItMTMuMi01LjgtMTguNEMyMDguNSAxNzUuNiAyMjQgMTk4IDIyNCAyMjR6bTEyOCA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRjMC0yNiAxNS41LTQ4LjQgMzcuOC01OC40Yy0zLjcgNS4yLTUuOCAxMS42LTUuOCAxOC40YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC02LjktMi4yLTEzLjItNS44LTE4LjRDNDAwLjUgMTc1LjYgNDE2IDE5OCA0MTYgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0elwiXX0sUG49UDMsRm49e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwib2JqZWN0LWdyb3VwXCIsaWNvbjpbNTc2LDUxMixbXSxcImYyNDdcIixcIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0QzAgMjguNyAyOC43IDAgNjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJINDU2LjZDNDY3LjYgMTIuOSA0ODguMyAwIDUxMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0YzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNFYzOTIuNmMxOS4xIDExLjEgMzIgMzEuNyAzMiA1NS40YzAgMzUuMy0yOC43IDY0LTY0IDY0Yy0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJIMTE5LjRjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzJjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNFYxMTkuNHpNNDU2LjYgOTZIMTE5LjRjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNFYzOTIuNmM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRINDU2LjZjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40VjExOS40Yy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjR6TTEyOCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTYwek0yNTYgMzIwaDMyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjIyNGg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjMyMHpcIl19LEYzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNoYXJ0LWxpbmVcIixpY29uOls1MTIsNTEyLFtcImxpbmUtY2hhcnRcIl0sXCJmMjAxXCIsXCJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRWNDAwYzAgNDQuMiAzNS44IDgwIDgwIDgwSDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjY0em00MDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDMyMCAyMTAuN2wtNTcuNC01Ny40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTEyIDExMmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyNDAgMjIxLjNsNTcuNCA1Ny40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6XCJdfSxEbj1GMyxSbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtYXNrLXZlbnRpbGF0b3JcIixpY29uOls2NDAsNTEyLFtdLFwiZTUyNFwiLFwiTTE1OS4xIDE3NkMxMzkuNCAyMTkuMiAxMjggMjY0LjcgMTI4IDMwMC44YzAgMTUuOSAyLjIgMzEuNCA2LjMgNDZsLTMxLjgtNy45QzcwLjUgMzMwLjkgNDggMzAyLjEgNDggMjY5VjE4NGMwLTQuNCAzLjYtOCA4LThIMTU5LjF6bTI2LTQ4SDU2Yy0zMC45IDAtNTYgMjUuMS01NiA1NnY4NWMwIDU1LjEgMzcuNSAxMDMuMSA5MC45IDExNi40bDcxLjMgMTcuOGMyMi43IDMwLjUgNTUuNCA1NC4xIDkzLjggNjYuNlYzOTMuM2MtMTkuNy0xNi40LTMyLTQwLjMtMzItNjYuOWMwLTQ5LjUgNDMtMTM0LjQgOTYtMTM0LjRjNTIuNSAwIDk2IDg0LjkgOTYgMTM0LjRjMCAyNi43LTEyLjQgNTAuNC0zMiA2Ni44djc2LjZjMzgtMTIuNiA3MC42LTM2IDkzLjUtNjYuNGw3MS42LTE3LjlDNjAyLjUgMzcyLjEgNjQwIDMyNC4xIDY0MCAyNjlWMTg0YzAtMzAuOS0yNS4xLTU2LTU2LTU2SDQ1NC41QzQxOS43IDczLjggMzcyLjEgMzIgMzIwIDMyYy01Mi42IDAtMTAwLjIgNDEuOC0xMzQuOSA5NnptMjk1LjYgNDhINTg0YzQuNCAwIDggMy42IDggOHY4NWMwIDMzLTIyLjUgNjEuOC01NC41IDY5LjlsLTMxLjggOGM0LjItMTQuNyA2LjQtMzAuMSA2LjQtNDYuMWMwLTM2LjEtMTEuNi04MS42LTMxLjMtMTI0Ljh6TTI4OCAzMjBWNTEyaDY0VjMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnpcIl19LFVuPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93LXJpZ2h0XCIsaWNvbjpbNDQ4LDUxMixbODU5NF0sXCJmMDYxXCIsXCJNNDM4LjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDMzOC44IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzA2LjcgMEwyMzMuNCAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwelwiXX0sRDM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2lnbnMtcG9zdFwiLGljb246WzUxMiw1MTIsW1wibWFwLXNpZ25zXCJdLFwiZjI3N1wiLFwiTTIyNCAzMkg2NEM0Ni4zIDMyIDMyIDQ2LjMgMzIgNjR2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJINDQxLjRjNC4yIDAgOC4zLTEuNyAxMS4zLTQuN2w0OC00OGM2LjItNi4yIDYuMi0xNi40IDAtMjIuNmwtNDgtNDhjLTMtMy03LjEtNC43LTExLjMtNC43SDI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnpNNDgwIDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMkgyODhWMTkySDIyNHYzMkg3MC42Yy00LjIgMC04LjMgMS43LTExLjMgNC43bC00OCA0OGMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZsNDggNDhjMyAzIDcuMSA0LjcgMTEuMyA0LjdINDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjI1NnpNMjg4IDQ4MFYzODRIMjI0djk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6XCJdfSxxbj1EMyxHbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYXNoLXJlZ2lzdGVyXCIsaWNvbjpbNTEyLDUxMixbXSxcImY3ODhcIixcIk02NCAwQzQ2LjMgMCAzMiAxNC4zIDMyIDMyVjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDgwdjMySDg3Yy0zMS42IDAtNTguNSAyMy4xLTYzLjMgNTQuNEwxLjEgMzY0LjFDLjQgMzY4LjggMCAzNzMuNiAwIDM3OC40VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMzc4LjRjMC00LjgtLjQtOS42LTEuMS0xNC40TDQ4OC4yIDIxNC40QzQ4My41IDE4My4xIDQ1Ni42IDE2MCA0MjUgMTYwSDIwOFYxMjhoODBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJINjR6TTk2IDQ4SDI1NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg5NmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpNNjQgNDMyYzAtOC44IDcuMi0xNiAxNi0xNkg0MzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNnptNDgtMjE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTcyIDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR6bS0yNCA1NmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0xMjAtNTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHptLTI0IDU2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTEyMC01NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0em0tMjQgNTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpcIl19LFduPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1jaXJjbGUtcXVlc3Rpb25cIixpY29uOls1NzYsNTEyLFtdLFwiZTU0MlwiLFwiTTIwOCA0OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6TTE1MiAzNTJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1Ni45TDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42aDI5LjdjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNDQuOSA3NC43Yy0xNi4xIDE3LjYtMjguNiAzOC41LTM2LjYgNjEuNWMtMS45LTEuOC0zLjUtMy45LTQuOS02LjNMMjMyIDI1Ni45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMTUyek00MzIgNTEyYy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NHM2NC41LTE0NCAxNDQtMTQ0czE0NCA2NC41IDE0NCAxNDRzLTY0LjUgMTQ0LTE0NCAxNDR6bTAtNDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHpNMzY4IDMyMS42VjMyOGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2di02LjRjMC01LjMgNC4zLTkuNiA5LjYtOS42aDQwLjVjNy43IDAgMTMuOSA2LjIgMTMuOSAxMy45YzAgNS4yLTIuOSA5LjktNy40IDEyLjNsLTMyIDE2LjhjLTUuMyAyLjgtOC42IDguMi04LjYgMTQuMlYzODRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNnYtNS4xbDIzLjUtMTIuM2MxNS4xLTcuOSAyNC41LTIzLjYgMjQuNS00MC42YzAtMjUuNC0yMC42LTQ1LjktNDUuOS00NS45SDQwOS42Yy0yMyAwLTQxLjYgMTguNi00MS42IDQxLjZ6XCJdfSxFbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoXCIsaWNvbjpbMzg0LDUxMixbMTA0XSxcIjQ4XCIsXCJNMzIwIDI1NmwwIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI0VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjE5Mkw2NCAxOTIgNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xOTIgMjU2IDB6XCJdfSxJbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0YXJwXCIsaWNvbjpbNTc2LDUxMixbXSxcImU1N2JcIixcIk01NzYgMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4VjM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzNTIgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NzZWMTI4ek00NDggNDQ4TDU3NiAzMjBINDQ4bDAgMTI4ek05NiAxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LFIzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNjcmV3ZHJpdmVyLXdyZW5jaFwiLGljb246WzUxMiw1MTIsW1widG9vbHNcIl0sXCJmN2Q5XCIsXCJNNzguNiA1QzY5LjEtMi40IDU1LjYtMS41IDQ3IDdMNyA0N2MtOC41IDguNS05LjQgMjItMi4xIDMxLjZsODAgMTA0YzQuNSA1LjkgMTEuNiA5LjQgMTkgOS40aDU0LjFsMTA5IDEwOWMtMTQuNyAyOS0xMCA2NS40IDE0LjMgODkuNmwxMTIgMTEyYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMTItMTEyYy0yNC4yLTI0LjItNjAuNi0yOS04OS42LTE0LjNsLTEwOS0xMDlWMTA0YzAtNy41LTMuNS0xNC41LTkuNC0xOUw3OC42IDV6TTE5LjkgMzk2LjFDNy4yIDQwOC44IDAgNDI2LjEgMCA0NDQuMUMwIDQ4MS42IDMwLjQgNTEyIDY3LjkgNTEyYzE4IDAgMzUuMy03LjIgNDgtMTkuOUwyMzMuNyAzNzQuM2MtNy44LTIwLjktOS00My42LTMuNi02NS4xbC02MS43LTYxLjdMMTkuOSAzOTYuMXpNNTEyIDE0NGMwLTEwLjUtMS4xLTIwLjctMy4yLTMwLjVjLTIuNC0xMS4yLTE2LjEtMTQuMS0yNC4yLTZsLTYzLjkgNjMuOWMtMyAzLTcuMSA0LjctMTEuMyA0LjdIMzUyYy04LjggMC0xNi03LjItMTYtMTZWMTAyLjZjMC00LjIgMS43LTguMyA0LjctMTEuM2w2My45LTYzLjljOC4xLTguMSA1LjItMjEuOC02LTI0LjJDMzg4LjcgMS4xIDM3OC41IDAgMzY4IDBDMjg4LjUgMCAyMjQgNjQuNSAyMjQgMTQ0bDAgLjggODUuMyA4NS4zYzM2LTkuMSA3NS44IC41IDEwNCAyOC43TDQyOSAyNzQuNWM0OS0yMyA4My03Mi44IDgzLTEzMC41ek0xMDQgNDMyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl19LE9uPVIzLFhuPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93cy10by1leWVcIixpY29uOls2NDAsNTEyLFtdLFwiZTRiZlwiLFwiTTE1IDE1QzI0LjQgNS43IDM5LjYgNS43IDQ5IDE1bDYzIDYzVjQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2OTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRINDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRINzguMUwxNSA0OUM1LjcgMzkuNiA1LjcgMjQuNCAxNSAxNXpNMTMzLjUgMjQzLjlDMTU4LjYgMTkzLjYgMjIyLjcgMTEyIDMyMCAxMTJzMTYxLjQgODEuNiAxODYuNSAxMzEuOWMzLjggNy42IDMuOCAxNi41IDAgMjQuMkM0ODEuNCAzMTguNCA0MTcuMyA0MDAgMzIwIDQwMHMtMTYxLjQtODEuNi0xODYuNS0xMzEuOWMtMy44LTcuNi0zLjgtMTYuNSAwLTI0LjJ6TTMyMCAzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRzMjguNyA2NCA2NCA2NHpNNTkxIDE1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjMgNjNINjAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDUwNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRWNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNFY3OC4xbDYzLTYzek0xNSA0OTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDYzLTYzSDQwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDk2YzEzLjMgMCAyNCAxMC43IDI0IDI0djk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjQzMy45TDQ5IDQ5N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDB6bTU3NiAwbC02My02M1Y0NzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMzc2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDk2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU2MS45bDYzIDYzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDB6XCJdfSxRbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwbHVnLWNpcmNsZS1ib2x0XCIsaWNvbjpbNTc2LDUxMixbXSxcImU1NWJcIixcIk05NiAwQzc4LjMgMCA2NCAxNC4zIDY0IDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yODggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnYzMmMwIDc3LjQgNTUgMTQyIDEyOCAxNTYuOFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0MTIuOGMxMi4zLTIuNSAyNC4xLTYuNCAzNS4xLTExLjVjLTIuMS0xMC44LTMuMS0yMS45LTMuMS0zMy4zYzAtODAuMyA1My44LTE0OCAxMjcuMy0xNjkuMmMuNS0yLjIgLjctNC41IC43LTYuOGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMnpNNDMyIDUxMmM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NHMtMTQ0IDY0LjUtMTQ0IDE0NHM2NC41IDE0NCAxNDQgMTQ0em00Ny45LTIyNWM0LjMgMy43IDUuNCA5LjkgMi42IDE0LjlMNDUyLjQgMzU2SDQ4OGM1LjIgMCA5LjggMy4zIDExLjQgOC4ycy0uMSAxMC4zLTQuMiAxMy40bC05NiA3MmMtNC41IDMuNC0xMC44IDMuMi0xNS4xLS42cy01LjQtOS45LTIuNi0xNC45TDQxMS42IDM4MEgzNzZjLTUuMiAwLTkuOC0zLjMtMTEuNC04LjJzLjEtMTAuMyA0LjItMTMuNGw5Ni03MmM0LjUtMy40IDEwLjgtMy4yIDE1LjEgLjZ6XCJdfSxLbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoZWFydFwiLGljb246WzUxMiw1MTIsWzEyODE1MywxMjgxNTQsMTI4MTU1LDEyODE1NiwxMjg0MjAsMTI5MjkzLDEyOTI5NCwxMjk1MDUsOTgyOSwxMDA4NCw2MTU3OF0sXCJmMDA0XCIsXCJNNDcuNiAzMDAuNEwyMjguMyA0NjkuMWM3LjUgNyAxNy40IDEwLjkgMjcuNyAxMC45czIwLjItMy45IDI3LjctMTAuOUw0NjQuNCAzMDAuNGMzMC40LTI4LjMgNDcuNi02OCA0Ny42LTEwOS41di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41elwiXX0sam49e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFycy1hbmQtdmVudXNcIixpY29uOls1MTIsNTEyLFs5ODkzXSxcImYyMjRcIixcIk0zMzcuOCAxNC44QzM0MS41IDUuOCAzNTAuMyAwIDM2MCAwSDQ3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxMzZjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzktMzktMjQuNyAyNC43QzQwNyAxNjMuMyA0MTYgMTkyLjYgNDE2IDIyNGMwIDgwLjItNTkuMSAxNDYuNy0xMzYuMSAxNTguMmMwIC42IC4xIDEuMiAuMSAxLjh2LjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjQgLjMgLjQgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjMgLjNoMjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjgwdi4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4yIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIC4xIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMGwtMjQgMC0yNCAwdjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMVY0ODYgNDg2di0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMVY0ODUgNDg1di0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMVY0ODR2LS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xLS4xVjQ4M3YtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjEtLjFWNDgxdi0uMS0uMS0uMS0uMS0uMS0uMS0uMS0uMVY0ODB2LS4xLS4xLS4xLS4xLS4xLS4xLS4xVjQ3OXYtLjEtLjEtLjEtLjEtLjEtLjEtLjFWNDc4di0uMS0uMS0uMS0uMS0uMS0uMVY0Nzd2LS4xLS4xLS4xLS4xLS4xLS4xVjQ3NnYtLjEtLjEtLjEtLjEtLjEtLjFWNDc1di0uMS0uMi0uMi0uMi0uMi0uMlY0NzR2LS4yLS4yLS4yLS4yLS4yVjQ3M3YtLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjJWNDcwdi0uMi0uMi0uMi0uMi0uMlY0Njl2LS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yVjQ2N3YtLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjItLjJWNDYzdi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMi0uMlY0NTl2LS4yLS4yLS4yLS4yLS4yLS4yLS4yLS4yVjQ1N3YtLjItLjItLjItLjJWNDU2SDIwOGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGgyNHYtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjMtLjNWNDAzdi0uMy0uM1Y0MDJ2LS4zLS4zVjQwMXYtLjMtLjNWNDAwdi0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uNC0uMy0uNC0uNC0uNC0uNFYzOTN2LS40LS40LS40LS40LS40LS40LS40LS40LS40LS40LS40LS40LS40VjM4OHYtLjQtLjQtLjQtLjQtLjQtLjQtLjQtLjQtLjQtLjRWMzg0YzAtLjYgMC0xLjIgLjEtMS44QzE1NS4xIDM3MC43IDk2IDMwNC4yIDk2IDIyNGMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MGMzOS42IDAgNzUuOSAxNC40IDEwMy44IDM4LjJMMzgyLjEgODAgMzQzIDQxYy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yek00NDggNDhsMCAwaDB2MHpNMjU2IDQ4OGgyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGgyNHptOTYtMjY0YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2czk2LTQzIDk2LTk2elwiXX0sVTM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaG91c2UtdXNlclwiLGljb246WzU3Niw1MTIsW1wiaG9tZS11c2VyXCJdLFwiZTFiMFwiLFwiTTU3NS44IDI1NS41YzAgMTgtMTUgMzIuMS0zMiAzMi4xaC0zMmwuNyAxNjAuMmMuMiAzNS41LTI4LjUgNjQuMy02NCA2NC4zSDEyOC4xYy0zNS4zIDAtNjQtMjguNy02NC02NFYyODcuNkgzMmMtMTggMC0zMi0xNC0zMi0zMi4xYzAtOSAzLTE3IDEwLTI0TDI2Ni40IDhjNy03IDE1LTggMjItOHMxNSAyIDIxIDdMNTY0LjggMjMxLjVjOCA3IDEyIDE1IDExIDI0ek0zNTIgMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHptLTk2IDk2Yy00NC4yIDAtODAgMzUuOC04MCA4MGMwIDguOCA3LjIgMTYgMTYgMTZIMzg0YzguOCAwIDE2LTcuMiAxNi0xNmMwLTQ0LjItMzUuOC04MC04MC04MEgyNTZ6XCJdfSxKbj1VMyxabj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkdW1wc3Rlci1maXJlXCIsaWNvbjpbNjQwLDUxMixbXSxcImY3OTRcIixcIk00OS43IDMyYy0xMC41IDAtMTkuOCA2LjktMjIuOSAxNi45TC45IDEzM2MtLjYgMi0uOSA0LjEtLjkgNi4xQzAgMTUwLjcgOS4zIDE2MCAyMC45IDE2MGg5NEwxNDAuNSAzMkg0OS43ek0yNzIgMTYwVjMySDE3My4xTDE0Ny41IDE2MEgyNzJ6bTMyIDBoNThjMTUuMS0xOC4xIDMyLjEtMzUuNyA1MC41LTUyLjFjMS41LTEuNCAzLjItMi42IDQuOC0zLjhMNDAyLjkgMzJIMzA0VjE2MHptMjA5LjktMjMuN2MxNy40LTE1LjggNDMuOS0xNi4yIDYxLjctMS4yYy0uMS0uNy0uMy0xLjQtLjUtMi4xTDU0OS4yIDQ4LjlDNTQ2LjEgMzguOSA1MzYuOCAzMiA1MjYuMyAzMkg0MzUuNWwxMi44IDY0LjJjOS42IDEgMTkgNC45IDI2LjYgMTEuOGMxMS43IDEwLjYgMjMgMjEuNiAzMy45IDMzLjFjMS42LTEuNiAzLjMtMy4yIDUtNC44ek0zMjUuMiAyMTAuN2MzLjgtNi4yIDcuOS0xMi41IDEyLjMtMTguN0gzMmw0IDMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQ0TDY0IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMySDMzNy42Yy0zMS0zNC43LTQ5LjYtODAuNi00OS42LTEyOS45YzAtMzUuMiAxNi4zLTczLjYgMzcuMi0xMDcuNHptMTI4LjQtNzguOWMtMi44LTIuNS02LjMtMy43LTkuOC0zLjhjLTMuNiAwLTcuMiAxLjItMTAgMy43Yy0zMy4yIDI5LjctNjEuNCA2My40LTgxLjQgOTUuOGMtMTkuNyAzMS45LTMyLjQgNjYuMi0zMi40IDkyLjZDMzIwIDQwNy45IDM5MC4zIDQ4MCA0ODAgNDgwYzg4LjcgMCAxNjAtNzIgMTYwLTE1OS44YzAtMjAuMi05LjYtNTAuOS0yNC4yLTc5Yy0xNC44LTI4LjUtMzUuNy01OC41LTYwLjQtODEuMWMtNS42LTUuMS0xNC40LTUuMi0yMCAwYy05LjYgOC44LTE4LjYgMTkuNi0yNi41IDI5LjVjLTE3LjMtMjAuNy0zNS44LTM5LjktNTUuNS01Ny43ek01MzAgNDAxYy0xNSAxMC0zMSAxNS00OSAxNWMtNDUgMC04MS0yOS04MS03OGMwLTI0IDE1LTQ1IDQ1LTgyYzQgNSA2MiA3OSA2MiA3OWwzNi00MmMzIDQgNSA4IDcgMTJjMTggMzMgMTAgNzUtMjAgOTZ6XCJdfSxZbj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob3VzZS1jcmFja1wiLGljb246WzU3Niw1MTIsW10sXCJlM2IxXCIsXCJNNTQzLjggMjg3LjZjMTcgMCAzMi0xNCAzMi0zMi4xYzEtOS0zLTE3LTExLTI0TDMwOS41IDdjLTYtNS0xNC03LTIxLTdzLTE1IDEtMjIgOEwxMCAyMzEuNWMtNyA3LTEwIDE1LTEwIDI0YzAgMTggMTQgMzIuMSAzMiAzMi4xaDMyVjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgyMzAuNGwtMzEuMy01Mi4yYy00LjEtNi44LTIuNi0xNS41IDMuNS0yMC41TDI4OCAzNjhsLTYwLjItODIuOGMtMTAuOS0xNSA4LjItMzMuNSAyMi44LTIybDExNy45IDkyLjZjOCA2LjMgOC4yIDE4LjQgLjQgMjQuOUwyODggNDQ4bDM4LjQgNjRINDQ4LjVjMzUuNSAwIDY0LjItMjguOCA2NC02NC4zbC0uNy0xNjAuMmgzMnpcIl19LHEzPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1hcnRpbmktZ2xhc3MtY2l0cnVzXCIsaWNvbjpbNTc2LDUxMixbXCJjb2NrdGFpbFwiXSxcImY1NjFcIixcIk00MzIgMjQwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0zNS41IDAtNjYuNiAxOS4zLTgzLjIgNDhIMjk2LjJDMzE2IDQwLjEgMzY5LjMgMCA0MzIgMGM3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NHMtNjQuNSAxNDQtMTQ0IDE0NGMtMjcuNyAwLTUzLjUtNy44LTc1LjUtMjEuM2wzNS40LTM1LjRjMTIuMiA1LjYgMjUuOCA4LjcgNDAuMSA4Ljd6TTEuOCAxNDIuOEM1LjUgMTMzLjggMTQuMyAxMjggMjQgMTI4SDM5MmM5LjcgMCAxOC41IDUuOCAyMi4yIDE0LjhzMS43IDE5LjMtNS4yIDI2LjJsLTE3NyAxNzdWNDY0aDY0YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDIwOCAxMjBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoNjRWMzQ1LjlMNyAxNjljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJ6XCJdfSxfbj1xMyxHMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmYWNlLXN1cnByaXNlXCIsaWNvbjpbNTEyLDUxMixbMTI4NTU4LFwic3VycHJpc2VcIl0sXCJmNWMyXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMTc2LjQgMjQwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTE5Mi0zMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTI1NiA0MTZjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHpcIl19LCRuPUczLGNIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJvdHRsZS13YXRlclwiLGljb246WzI1Niw1MTIsW10sXCJlNGM1XCIsXCJNODggMGg4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNFY2NEg2NFYyNEM2NCAxMC43IDc0LjcgMCA4OCAwek0wIDE1MS43YzAtMTUuNiA5LTI5LjggMjMuMi0zNi41bDI0LjQtMTEuNGMxMS01LjEgMjMtNy44IDM1LjEtNy44aDkwLjZjMTIuMSAwIDI0LjEgMi43IDM1LjEgNy44bDI0LjQgMTEuNGMxNC4yIDYuNiAyMy4yIDIwLjggMjMuMiAzNi41YzAgMTQuNC03LjUgMjctMTguOSAzNC4xYzExLjUgOC44IDE4LjkgMjIuNiAxOC45IDM4LjJjMCAxNi43LTguNSAzMS40LTIxLjUgNDBjMTIuOSA4LjYgMjEuNSAyMy4zIDIxLjUgNDBzLTguNSAzMS40LTIxLjUgNDBjMTIuOSA4LjYgMjEuNSAyMy4zIDIxLjUgNDBzLTguNSAzMS40LTIxLjUgNDBjMTIuOSA4LjYgMjEuNSAyMy4zIDIxLjUgNDBjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4YzAtMTYuNyA4LjUtMzEuNCAyMS41LTQwQzguNSA0MTUuNCAwIDQwMC43IDAgMzg0czguNS0zMS40IDIxLjUtNDBDOC41IDMzNS40IDAgMzIwLjcgMCAzMDRzOC41LTMxLjQgMjEuNS00MEM4LjUgMjU1LjQgMCAyNDAuNyAwIDIyNGMwLTE1LjYgNy40LTI5LjQgMTguOS0zOC4yQzcuNSAxNzguNyAwIDE2Ni4xIDAgMTUxLjd6TTY0IDI0MGMwIDguOCA3LjIgMTYgMTYgMTZoOTZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIODBjLTguOCAwLTE2IDcuMi0xNiAxNnpNODAgMzUyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDk2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDgwelwiXX0sVzM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2lyY2xlLXBhdXNlXCIsaWNvbjpbNTEyLDUxMixbNjIwOTIsXCJwYXVzZS1jaXJjbGVcIl0sXCJmMjhiXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMjI0IDE5MlYzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAwVjMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpcIl19LGFIPVczLHNIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRvaWxldC1wYXBlci1zbGFzaFwiLGljb246WzY0MCw1MTIsW10sXCJlMDcyXCIsXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN2wtMTA5LjctODZDNTY5LjkgMzc0IDYwOCAyOTEuOSA2MDggMTkyQzYwOCA4NiA1NjUgMCA1MTIgMHMtOTYgODYtOTYgMTkyYzAgNDkuMSA5LjIgOTMuOSAyNC40IDEyNy45bC01OS00Ni4yYzEuNi0yNC44IDIuNi01MiAyLjYtODEuNmMwLTY1LjUgMTMuMi0xNDIuNCA2MC4yLTE5MkgxNjBjLTI0LjggMC00Ny40IDE4LjgtNjQuNCA0OS42TDM4LjggNS4xek02Ni41IDE0OC40QzY0LjkgMTYyLjQgNjQgMTc3IDY0IDE5MmMwIDEwMS41LTExLjcgMTcwLjgtMjMgMjEzLjljLTUuMSAxOS40LTEwLjcgMzkuOS0yMC41IDU3LjdjLTUuOSA5LjktNi4xIDIyLjEtLjQgMzIuMlMzNi41IDUxMiA0OCA1MTJIMjg1LjljMjIuMyAwIDQ1LjQtMTIuMSA1NS40LTM2LjFjNy40LTE3LjcgMTcuNS00Ny4yIDI2LTkwLjZMNjYuNSAxNDguNHpNNTQ0IDE5MmMwIDM1LjMtMTQuMyA2NC0zMiA2NHMtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0czMyIDI4LjcgMzIgNjR6XCJdfSxFMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcHBsZS13aG9sZVwiLGljb246WzQ0OCw1MTIsWzEyNzgyMiwxMjc4MjMsXCJhcHBsZS1hbHRcIl0sXCJmNWQxXCIsXCJNMjI0IDExMmMtOC44IDAtMTYtNy4yLTE2LTE2VjgwYzAtNDQuMiAzNS44LTgwIDgwLTgwaDE2YzguOCAwIDE2IDcuMiAxNiAxNlYzMmMwIDQ0LjItMzUuOCA4MC04MCA4MEgyMjR6TTAgMjg4YzAtNzYuMyAzNS43LTE2MCAxMTItMTYwYzI3LjMgMCA1OS43IDEwLjMgODIuNyAxOS4zYzE4LjggNy4zIDM5LjkgNy4zIDU4LjcgMGMyMi45LTguOSA1NS40LTE5LjMgODIuNy0xOS4zYzc2LjMgMCAxMTIgODMuNyAxMTIgMTYwYzAgMTI4LTgwIDIyNC0xNjAgMjI0Yy0xNi41IDAtMzguMS02LjYtNTEuNS0xMS4zYy04LjEtMi44LTE2LjktMi44LTI1IDBjLTEzLjQgNC43LTM1IDExLjMtNTEuNSAxMS4zQzgwIDUxMiAwIDQxNiAwIDI4OHpcIl19LGVIPUUzLGZIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImtpdGNoZW4tc2V0XCIsaWNvbjpbNTc2LDUxMixbXSxcImU1MWFcIixcIk0yNDAgMTQ0YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2czk2LTQzIDk2LTk2em00NC40IDMyQzI2OS45IDI0MC4xIDIxMi41IDI4OCAxNDQgMjg4QzY0LjUgMjg4IDAgMjIzLjUgMCAxNDRTNjQuNSAwIDE0NCAwYzY4LjUgMCAxMjUuOSA0Ny45IDE0MC40IDExMmg3MS44YzguOC05LjggMjEuNi0xNiAzNS44LTE2SDQ5NmMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEgzOTJjLTE0LjIgMC0yNy02LjItMzUuOC0xNkgyODQuNHpNMTQ0IDIwOGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0em0yNTYgMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjR2OGg5NmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyODBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoOTZ2LThjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTI4OCA0NjRWMzUySDUxMlY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhIMzM2Yy0yNi41IDAtNDgtMjEuNS00OC00OHpNNDggMzIwaDgwIDE2IDMyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4SDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMkg2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzM2YzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDY0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE2MHYzMmgxNnpNMjQgNDY0SDIwMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpcIl19LHJIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJcIixpY29uOlszMjAsNTEyLFsxMTRdLFwiNTJcIixcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0VjI4OCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjBoOTUuM0wyNjEuOCA0NjYuNGMxMC4xIDE0LjUgMzAuMSAxOCA0NC42IDcuOXMxOC0zMC4xIDcuOS00NC42TDIzMC4xIDMwOS41QzI4Mi44IDI4OC4xIDMyMCAyMzYuNCAzMjAgMTc2YzAtNzkuNS02NC41LTE0NC0xNDQtMTQ0SDMyek0xNzYgMjU2SDY0Vjk2SDE3NmM0NC4yIDAgODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHpcIl19LHo9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGVtcGVyYXR1cmUtcXVhcnRlclwiLGljb246WzMyMCw1MTIsW1widGVtcGVyYXR1cmUtMVwiLFwidGhlcm1vbWV0ZXItMVwiLFwidGhlcm1vbWV0ZXItcXVhcnRlclwiXSxcImYyY2FcIixcIk0xNjAgNjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjI3Ni41YzAgMTcuMy03LjEgMzEuOS0xNS4zIDQyLjVDODYuMiAzMzIuNiA4MCAzNDkuNSA4MCAzNjhjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTE4LjUtNi4yLTM1LjQtMTYuNy00OC45Yy04LjItMTAuNi0xNS4zLTI1LjItMTUuMy00Mi41VjExMmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDggMTEyQzQ4IDUwLjIgOTguMSAwIDE2MCAwczExMiA1MC4xIDExMiAxMTJWMjc2LjVjMCAuMSAuMSAuMyAuMiAuNmMuMiAuNiAuOCAxLjYgMS43IDIuOGMxOC45IDI0LjQgMzAuMSA1NSAzMC4xIDg4LjFjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTMTYgNDQ3LjUgMTYgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZWMTEyek0yMDggMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM1YyNzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY1MC43YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM3pcIl19LGxIPXosaUg9eixvSD16LG5IPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImN1YmVcIixpY29uOls1MTIsNTEyLFtdLFwiZjFiMlwiLFwiTTIzNC41IDUuN2MxMy45LTUgMjkuMS01IDQzLjEgMGwxOTIgNjguNkM0OTUgODMuNCA1MTIgMTA3LjUgNTEyIDEzNC42VjM3Ny40YzAgMjctMTcgNTEuMi00Mi41IDYwLjNsLTE5MiA2OC42Yy0xMy45IDUtMjkuMSA1LTQzLjEgMGwtMTkyLTY4LjZDMTcgNDI4LjYgMCA0MDQuNSAwIDM3Ny40VjEzNC42YzAtMjcgMTctNTEuMiA0Mi41LTYwLjNsMTkyLTY4LjZ6TTI1NiA2Nkw4Mi4zIDEyOCAyNTYgMTkwbDE3My43LTYyTDI1NiA2NnptMzIgMzY4LjZsMTYwLTU3LjF2LTE4OEwyODggMjQ2LjZ2MTg4elwiXX0sSEg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYml0Y29pbi1zaWduXCIsaWNvbjpbMzIwLDUxMixbXSxcImUwYjRcIixcIk00OCAzMkM0OCAxNC4zIDYyLjMgMCA4MCAwczMyIDE0LjMgMzIgMzJWNjRoMzJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY2NGMwIDEuNS0uMSAzLjEtLjMgNC41QzI1NC4xIDgyLjIgMjg4IDEyNS4xIDI4OCAxNzZjMCAyNC4yLTcuNyA0Ni42LTIwLjcgNjQuOWMzMS43IDE5LjggNTIuNyA1NSA1Mi43IDk1LjFjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDExMnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDhINDEuN0MxOC43IDQ0OCAwIDQyOS4zIDAgNDA2LjNWMjg4IDI2NS43IDIyNCAxMDEuNkMwIDgwLjggMTYuOCA2NCAzNy42IDY0SDQ4VjMyek02NCAyMjRIMTc2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4SDY0djk2em0xMTIgNjRINjR2OTZIMjA4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4SDE3NnpcIl19LHpIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNoaWVsZC1kb2dcIixpY29uOls1MTIsNTEyLFtdLFwiZTU3M1wiLFwiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yYy41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMmMxNi43IDggMzYuMSA4IDUyLjggMEM0NTQuNyA0MjAuNyA0OTUuNSAyMzkuMiA0OTYgMTQwYy4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTE2MC45IDI4Ni4yYzQuOCAxLjIgOS45IDEuOCAxNS4xIDEuOGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBoNDQuMmMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43TDMyMCAxOTJoNjRjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgNDQuMi0zNS44IDgwLTgwIDgwSDI3MnY1MC43YzAgNy4zLTUuOSAxMy4zLTEzLjMgMTMuM2MtMS44IDAtMy42LS40LTUuMi0xLjFsLTk4LjctNDIuM2MtNi42LTIuOC0xMC44LTkuMy0xMC44LTE2LjRjMC0yLjggLjYtNS41IDEuOS04bDE1LTMwek0xNjAgMTYwaDQwIDh2MzIgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTc2YzAtOC44IDcuMi0xNiAxNi0xNnptMTI4IDQ4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6XCJdfSxWSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzb2xhci1wYW5lbFwiLGljb246WzY0MCw1MTIsW10sXCJmNWJhXCIsXCJNOTYgMEM4MC43IDAgNjcuNiAxMC44IDY0LjYgMjUuN2wtNjQgMzIwYy0xLjkgOS40IC42IDE5LjEgNi42IDI2LjZTMjIuNCAzODQgMzIgMzg0SDI4OHY2NEgyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM1MlYzODRINjA4YzkuNiAwIDE4LjctNC4zIDI0LjctMTEuN3M4LjUtMTcuMiA2LjYtMjYuNmwtNjQtMzIwQzU3Mi40IDEwLjggNTU5LjMgMCA1NDQgMEg5NnptNS40IDE2OEwxMjIuMiA2NGg5MC40TDIwMi4zIDE2OEgxMDEuNHptLTkuNiA0OEgxOTcuNUwxODcuMSAzMjBINzFMOTEuOCAyMTZ6bTE1My45IDBIMzk0LjNsMTAuNCAxMDRIMjM1LjNsMTAuNC0xMDR6bTE5Ni44IDBINTQ4LjJMNTY5IDMyMGgtMTE2TDQ0Mi41IDIxNnptOTYtNDhINDM3LjdMNDI3LjMgNjRoOTAuNGwyMC44IDEwNHptLTE0OS4xIDBoLTEzOUwyNjAuOSA2NEgzNzkuMWwxMC40IDEwNHpcIl19LG1IPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxvY2stb3BlblwiLGljb246WzU3Niw1MTIsW10sXCJmM2MxXCIsXCJNMzUyIDE0NGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwdjQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTQ0QzU3NiA2NC41IDUxMS41IDAgNDMyIDBTMjg4IDY0LjUgMjg4IDE0NHY0OEg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFYyNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzUyVjE0NHpcIl19LHZIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImVsZXZhdG9yXCIsaWNvbjpbNTEyLDUxMixbXSxcImUxNmRcIixcIk0xMzIuNyA0LjdsLTY0IDY0Yy00LjYgNC42LTUuOSAxMS41LTMuNSAxNy40czguMyA5LjkgMTQuOCA5LjlIMjA4YzYuNSAwIDEyLjMtMy45IDE0LjgtOS45czEuMS0xMi45LTMuNS0xNy40bC02NC02NGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxOTJjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTk2IDE5MmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4ek04MCA0MDBjMC0yNi41IDIxLjUtNDggNDgtNDhoNjRjMjYuNSAwIDQ4IDIxLjUgNDggNDh2MTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MDB6bTE5MiAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4aDY0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djE2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMwNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDAwek00MDAgMjcyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpNMzU2LjcgOTEuM2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw2NC02NGM0LjYtNC42IDUuOS0xMS41IDMuNS0xNy40UzQzOC41IDAgNDMyIDBIMzA0Yy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjRsNjQgNjR6XCJdfSxNSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtb25leS1iaWxsLXRyYW5zZmVyXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1MjhcIixcIk01MzUgNDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw2NCA2NGM0LjUgNC41IDcgMTAuNiA3IDE3cy0yLjUgMTIuNS03IDE3bC02NCA2NGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwyMy0yM0wzODQgMTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE3NC4xIDBMNTM1IDQxek0xMDUgMzc3bC0yMyAyM0wyNTYgNDAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDgxLjkgNDQ4bDIzIDIzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA0NDFjLTQuNS00LjUtNy0xMC42LTctMTdzMi41LTEyLjUgNy0xN2w2NC02NGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6TTk2IDY0SDMzNy45Yy0zLjcgNy4yLTUuOSAxNS4zLTUuOSAyNGMwIDI4LjcgMjMuMyA1MiA1MiA1MmwxMTcuNCAwYy00IDE3IC42IDM1LjUgMTMuOCA0OC44YzIwLjMgMjAuMyA1My4yIDIwLjMgNzMuNSAwTDYwOCAxNjkuNVYzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMzAyLjFjMy43LTcuMiA1LjktMTUuMyA1LjktMjRjMC0yOC43LTIzLjMtNTItNTItNTJsLTExNy40IDBjNC0xNy0uNi0zNS41LTEzLjgtNDguOGMtMjAuMy0yMC4zLTUzLjItMjAuMy03My41IDBMMzIgMzQyLjVWMTI4YzAtMzUuMyAyOC43LTY0IDY0LTY0em02NCA2NEg5NnY2NGMzNS4zIDAgNjQtMjguNyA2NC02NHpNNTQ0IDMyMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRoNjRWMzIwek0zMjAgMzUyYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnM0MyA5NiA5NiA5NnpcIl19LHRIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1vbmV5LWJpbGwtdHJlbmQtdXBcIixpY29uOls1MTIsNTEyLFtdLFwiZTUyOVwiLFwiTTQ3MC43IDkuNGMzIDMuMSA1LjMgNi42IDYuOSAxMC4zczIuNCA3LjggMi40IDEyLjJsMCAuMXYwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjEwOS4zTDMxMC42IDIxNC42Yy0xMS44IDExLjgtMzAuOCAxMi42LTQzLjUgMS43TDE3NiAxMzguMSA4NC44IDIxNi4zYy0xMy40IDExLjUtMzMuNiA5LjktNDUuMS0zLjVzLTkuOS0zMy42IDMuNS00NS4xbDExMi05NmMxMi0xMC4zIDI5LjctMTAuMyA0MS43IDBsODkuNSA3Ni43TDM3MC43IDY0SDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg5NiAwYzguOCAwIDE2LjggMy42IDIyLjYgOS4zbC4xIC4xek0wIDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OEg0NjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzMDR6TTQ4IDQxNnY0OEg5NmMwLTI2LjUtMjEuNS00OC00OC00OHpNOTYgMzA0SDQ4djQ4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4ek00NjQgNDE2Yy0yNi41IDAtNDggMjEuNS00OCA0OGg0OFY0MTZ6TTQxNiAzMDRjMCAyNi41IDIxLjUgNDggNDggNDhWMzA0SDQxNnptLTk2IDgwYzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpcIl19LGhIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXNlLWZsb29kLXdhdGVyLWNpcmNsZS1hcnJvdy1yaWdodFwiLGljb246WzY0MCw1MTIsW10sXCJlNTBmXCIsXCJNMjg4IDE0NEMyODggNjQuNSAyMjMuNSAwIDE0NCAwUzAgNjQuNSAwIDE0NHM2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDR6TTE0MC43IDc2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsNTYgNTZjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTU2IDU2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDE2OS40IDE2MEg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmg4OS40TDE0MC43IDk5LjNjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42ek0zMjAgMTQ0YzAgNTcuMy0yNy40IDEwOC4yLTY5LjggMTQwLjNjMTEuOC0zLjYgMjMtOS40IDMzLTE2LjJjMjIuMS0xNS41IDUxLjYtMTUuNSA3My43IDBjMTguNCAxMi43IDM5LjYgMjAuMyA1OS4yIDIwLjNjMTkgMCA0MS4yLTcuOSA1OS4yLTIwLjNjMjMuOC0xNi43IDU1LjgtMTUuNCA3OC4xIDMuNGMyLjEgMS43IDQuMiAzLjMgNi41IDQuOWwtLjMtODQuNEg1NzZjMTMuOSAwIDI2LjEtOC45IDMwLjQtMjIuMXMtLjQtMjcuNi0xMS42LTM1LjhsLTE3Ni0xMjhDNDA3LjYtMiAzOTIuNC0yIDM4MS4yIDYuMUwzMDEgNjQuNGMxMi4xIDIzLjkgMTkgNTAuOSAxOSA3OS42em0xOC41IDE2NS45Yy0xMS4xLTcuOS0yNS45LTcuOS0zNyAwQzI3OSAzMjUuNCAyNTEuNSAzMzYgMjI0IDMzNmMtMjYuOSAwLTU1LjMtMTAuOC03Ny40LTI2LjFsMCAwYy0xMS45LTguNS0yOC4xLTcuOC0zOS4yIDEuN2MtMTQuNCAxMS45LTMyLjUgMjEtNTAuNiAyNS4yYy0xNy4yIDQtMjcuOSAyMS4yLTIzLjkgMzguNHMyMS4yIDI3LjkgMzguNCAyMy45YzI0LjUtNS43IDQ0LjktMTYuNSA1OC4yLTI1QzE1OC41IDM4OS43IDE5MSA0MDAgMjI0IDQwMGMzMS45IDAgNjAuNi05LjkgODAuNC0xOC45YzUuOC0yLjcgMTEuMS01LjMgMTUuNi03LjdjNC41IDIuNCA5LjcgNS4xIDE1LjYgNy43YzE5LjggOSA0OC42IDE4LjkgODAuNCAxOC45YzMzIDAgNjUuNS0xMC4zIDk0LjUtMjUuOGMxMy40IDguNCAzMy43IDE5LjMgNTguMiAyNWMxNy4yIDQgMzQuNC02LjcgMzguNC0yMy45cy02LjctMzQuNC0yMy45LTM4LjRjLTE4LjEtNC4yLTM2LjItMTMuMy01MC42LTI1LjJjLTExLjEtOS41LTI3LjMtMTAuMS0zOS4yLTEuN2wwIDBDNDcxLjQgMzI1LjIgNDQyLjkgMzM2IDQxNiAzMzZjLTI3LjUgMC01NS0xMC42LTc3LjUtMjYuMXptMCAxMTJjLTExLjEtNy45LTI1LjktNy45LTM3IDBDMjc5IDQzNy40IDI1MS41IDQ0OCAyMjQgNDQ4Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWwwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTU4LjUgNTAxLjcgMTkxIDUxMiAyMjQgNTEyYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjYgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjQtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0NzEuNCA0MzcuMiA0NDIuOSA0NDggNDE2IDQ0OGMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xelwiXX0sSTM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3F1YXJlLXBvbGwtaG9yaXpvbnRhbFwiLGljb246WzQ0OCw1MTIsW1wicG9sbC1oXCJdLFwiZjY4MlwiLFwiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNTYgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTY0IDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxOTIgMHpNMTkyIDM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyelwiXX0sQ0g9STMsTEg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2lyY2xlXCIsaWNvbjpbNTEyLDUxMixbMTI4MzA4LDEyODMwOSwxMjg5OTIsMTI4OTkzLDEyODk5NCwxMjg5OTUsMTI4OTk2LDk2NzksOTg5OCw5ODk5LDExMDQ0LDYxNzA4LDYxOTE1XSxcImYxMTFcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyelwiXX0sTzM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmFja3dhcmQtZmFzdFwiLGljb246WzUxMiw1MTIsWzkxOTgsXCJmYXN0LWJhY2t3YXJkXCJdLFwiZjA0OVwiLFwiTTQ5My42IDQ0NWMtMTEuMiA1LjMtMjQuNSAzLjYtMzQuMS00LjRMMjg4IDI5Ny43VjQxNmMwIDEyLjQtNy4yIDIzLjctMTguNCAyOXMtMjQuNSAzLjYtMzQuMS00LjRMNjQgMjk3LjdWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjk2QzAgNzguMyAxNC4zIDY0IDMyIDY0czMyIDE0LjMgMzIgMzJWMjE0LjNMMjM1LjUgNzEuNGM5LjUtNy45IDIyLjgtOS43IDM0LjEtNC40UzI4OCA4My42IDI4OCA5NlYyMTQuM0w0NTkuNSA3MS40YzkuNS03LjkgMjIuOC05LjcgMzQuMS00LjRTNTEyIDgzLjYgNTEyIDk2VjQxNmMwIDEyLjQtNy4yIDIzLjctMTguNCAyOXpcIl19LHBIPU8zLGRIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJlY3ljbGVcIixpY29uOls1NzYsNTEyLFs5ODQyLDk4NTAsOTg1MV0sXCJmMWI4XCIsXCJNMjA2LjcgNDUuMUMyMjQuMiAxNyAyNTUgMCAyODggMHM2My44IDE3IDgxLjMgNDUuMWwzOC42IDYxLjcgMjctMTUuNmM4LjQtNC45IDE4LjktNC4yIDI2LjYgMS43czExLjEgMTUuOSA4LjYgMjUuM2wtMjMuNCA4Ny40Yy0zLjQgMTIuOC0xNi42IDIwLjQtMjkuNCAxN2wtODcuNC0yMy40Yy05LjQtMi41LTE2LjMtMTAuNC0xNy42LTIwczMuNC0xOS4xIDExLjgtMjMuOWwyOC40LTE2LjRMMzE1IDc5Yy01LjgtOS4zLTE2LTE1LTI3LTE1cy0yMS4yIDUuNy0yNyAxNWwtMTcuNSAyOGMtOS4yIDE0LjgtMjguNiAxOS41LTQzLjYgMTAuNWMtMTUuMy05LjItMjAuMi0yOS4yLTEwLjctNDQuNGwxNy41LTI4ek00NjEuNSAyNTEuOWMxNS05IDM0LjQtNC4zIDQzLjYgMTAuNWwyNC40IDM5LjFjOS40IDE1LjEgMTQuNCAzMi40IDE0LjYgNTAuMmMuMyA1My4xLTQyLjcgOTYuNC05NS44IDk2LjRMMzUyIDQ0OHYzMmMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC02NC02NGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNjQtNjRjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMnMxNC44IDEyLjUgMTQuOCAyMi4ydjMybDk2LjIgMGMxNy42IDAgMzEuOS0xNC40IDMxLjgtMzJjMC01LjktMS43LTExLjctNC44LTE2LjdsLTI0LjQtMzkuMWMtOS41LTE1LjItNC43LTM1LjIgMTAuNy00NC40em0tMzY0LjYtMzFMNjggMjA0LjJjLTguNC00LjktMTMuMS0xNC4zLTExLjgtMjMuOXM4LjItMTcuNSAxNy42LTIwbDg3LjQtMjMuNGMxMi44LTMuNCAyNiA0LjIgMjkuNCAxN0wyMTQgMjQxLjJjMi41IDkuNC0uOSAxOS4zLTguNiAyNS4zcy0xOC4yIDYuNi0yNi42IDEuN2wtMjYuNS0xNS4zLTUxLjUgODIuNGMtMy4xIDUtNC44IDEwLjgtNC44IDE2LjdjLS4xIDE3LjYgMTQuMiAzMiAzMS44IDMybDMyLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIuMiAwYy01My4xIDAtOTYuMS00My4yLTk1LjgtOTYuNGMuMS0xNy44IDUuMS0zNS4xIDE0LjYtNTAuMmw1MC4zLTgwLjV6XCJdfSx1SD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLWFzdHJvbmF1dFwiLGljb246WzQ0OCw1MTIsW10sXCJmNGZiXCIsXCJNMzcwLjcgOTYuMUMzNDYuMSAzOS41IDI4OS43IDAgMjI0IDBTMTAxLjkgMzkuNSA3Ny4zIDk2LjFDNjAuOSA5Ny41IDQ4IDExMS4yIDQ4IDEyOHY2NGMwIDE2LjggMTIuOSAzMC41IDI5LjMgMzEuOUMxMDEuOSAyODAuNSAxNTguMyAzMjAgMjI0IDMyMHMxMjIuMS0zOS41IDE0Ni43LTk2LjFjMTYuNC0xLjQgMjkuMy0xNS4xIDI5LjMtMzEuOVYxMjhjMC0xNi44LTEyLjktMzAuNS0yOS4zLTMxLjl6TTMzNiAxNDR2MTZjMCA1My00MyA5Ni05NiA5NkgyMDhjLTUzIDAtOTYtNDMtOTYtOTZWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4SDI4OGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTg5LjMgMTYyLjdsLTYtMjEuMmMtLjktMy4zLTMuOS01LjUtNy4zLTUuNXMtNi40IDIuMi03LjMgNS41bC02IDIxLjItMjEuMiA2Yy0zLjMgLjktNS41IDMuOS01LjUgNy4zczIuMiA2LjQgNS41IDcuM2wyMS4yIDYgNiAyMS4yYy45IDMuMyAzLjkgNS41IDcuMyA1LjVzNi40LTIuMiA3LjMtNS41bDYtMjEuMiAyMS4yLTZjMy4zLS45IDUuNS0zLjkgNS41LTcuM3MtMi4yLTYuNC01LjUtNy4zbC0yMS4yLTZ6TTExMi43IDMxNi41QzQ2LjcgMzQyLjYgMCA0MDcgMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDEyOFY0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0bDk4LjMgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuN2MwLTc1LjMtNDYuNy0xMzkuNy0xMTIuNy0xNjUuOEMzMDMuOSAzMzguOCAyNjUuNSAzNTIgMjI0IDM1MnMtNzkuOS0xMy4yLTExMS4zLTM1LjV6TTE3NiA0NDhjLTguOCAwLTE2IDcuMi0xNiAxNnY0OGgzMlY0NjRjMC04LjgtNy4yLTE2LTE2LTE2em05NiAzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnpcIl19LHhIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBsYW5lLXNsYXNoXCIsaWNvbjpbNjQwLDUxMixbXSxcImUwNjlcIixcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ0MC42IDMyMGg3My44YzM0LjIgMCA5My43LTI4IDkzLjctNjRjMC0zNS01OS41LTY0LTkzLjctNjRsLTExNi42IDBMMjk3LjIgMTYuMUMyOTEuNSA2LjIgMjgwLjkgMCAyNjkuNCAwSDIxMy4yYy0xMC42IDAtMTguMyAxMC4yLTE1LjQgMjAuNGw0MC4zIDE0MC45TDM4LjggNS4xem0yLjcgMTIzLjZDMzYgMTMwLjYgMzIgMTM1LjkgMzIgMTQyYzAgMS4zIC4yIDIuNiAuNSAzLjlMNjQgMjU2IDMyLjUgMzY2LjFjLS40IDEuMy0uNSAyLjYtLjUgMy45YzAgNy44IDYuMyAxNCAxNCAxNEg4OGM1IDAgOS44LTIuNCAxMi44LTYuNEwxNDQgMzIwSDI0Ni45bC00OSAxNzEuNmMtMi45IDEwLjIgNC44IDIwLjQgMTUuNCAyMC40bDU2LjIgMGMxMS41IDAgMjIuMS02LjIgMjcuOC0xNi4xbDY1LjMtMTE0LjNMNDEuNSAxMjguN3pcIl19LGdIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRyYWRlbWFya1wiLGljb246WzY0MCw1MTIsWzg0ODJdLFwiZjI1Y1wiLFwiTTM0NS42IDEwOC44Yy04LjMtMTEtMjIuNy0xNS41LTM1LjctMTEuMlMyODggMTE0LjIgMjg4IDEyOFYzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMjRsODYuNCAxMTUuMmM2IDguMSAxNS41IDEyLjggMjUuNiAxMi44czE5LjYtNC43IDI1LjYtMTIuOEw1NzYgMjI0VjM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjEyOGMwLTEzLjgtOC44LTI2LTIxLjktMzAuNHMtMjcuNSAuMS0zNS43IDExLjJMNDY0IDI2Ni43IDM0NS42IDEwOC44ek0wIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg5NlYzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNjBoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJDMTQuMyA5NiAwIDExMC4zIDAgMTI4elwiXX0sWDM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmFza2V0YmFsbFwiLGljb246WzUxMiw1MTIsWzEyNzkzNixcImJhc2tldGJhbGwtYmFsbFwiXSxcImY0MzRcIixcIk04Ni42IDY0QzExOSAzNS41IDE1OC42IDE1IDIwMi4zIDUuNkMyMDYgMTkuMSAyMDggMzMuMyAyMDggNDhjMCAzOC40LTEzLjUgNzMuNy0zNi4xIDEwMS4zTDg2LjYgNjR6TTY0IDg2LjZsODUuMiA4NS4yQzEyMS43IDE5NC41IDg2LjQgMjA4IDQ4IDIwOGMtMTQuNyAwLTI4LjktMi00Mi40LTUuN0MxNSAxNTguNiAzNS41IDExOSA2NCA4Ni42ek0yNTYgMGM2NC45IDAgMTI0LjIgMjQuMiAxNjkuNCA2NEwyNTYgMjMzLjQgMTk0LjYgMTcyQzIyMi45IDEzOC41IDI0MCA5NS4zIDI0MCA0OGMwLTE2LjItMi0zMi01LjgtNDcuMUMyNDEuNCAuMyAyNDguNyAwIDI1NiAwek00OCAyNDBjNDcuMyAwIDkwLjUtMTcuMSAxMjQtNDUuNEwyMzMuNCAyNTYgNjQgNDI1LjRDMjQuMiAzODAuMiAwIDMyMC45IDAgMjU2YzAtNy4zIC4zLTE0LjYgLjktMjEuOEMxNiAyMzggMzEuOCAyNDAgNDggMjQwem00NjMuMSAzNy44QzQ5NiAyNzQgNDgwLjIgMjcyIDQ2NCAyNzJjLTQ3LjMgMC05MC41IDE3LjEtMTI0IDQ1LjRMMjc4LjYgMjU2IDQ0OCA4Ni42YzM5LjggNDUuMSA2NCAxMDQuNCA2NCAxNjkuNGMwIDcuMy0uMyAxNC42LS45IDIxLjh6bS00LjcgMzEuOUM0OTcgMzUzLjQgNDc2LjUgMzkzIDQ0OCA0MjUuNGwtODUuMi04NS4yQzM5MC4zIDMxNy41IDQyNS42IDMwNCA0NjQgMzA0YzE0LjcgMCAyOC45IDIgNDIuNCA1Ljd6TTM0MC4xIDM2Mi43TDQyNS40IDQ0OEMzOTMgNDc2LjUgMzUzLjQgNDk3IDMwOS43IDUwNi40QzMwNiA0OTIuOSAzMDQgNDc4LjcgMzA0IDQ2NGMwLTM4LjQgMTMuNS03My43IDM2LjEtMTAxLjN6TTMxNy40IDM0MEMyODkuMSAzNzMuNSAyNzIgNDE2LjcgMjcyIDQ2NGMwIDE2LjIgMiAzMiA1LjggNDcuMWMtNy4yIC42LTE0LjUgLjktMjEuOCAuOWMtNjQuOSAwLTEyNC4yLTI0LjItMTY5LjQtNjRMMjU2IDI3OC42IDMxNy40IDM0MHpcIl19LFNIPVgzLE5IPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNhdGVsbGl0ZS1kaXNoXCIsaWNvbjpbNTEyLDUxMixbMTI4MjI1XSxcImY3YzBcIixcIk0xOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJDMzgzLjEgMCA1MTIgMTI4LjkgNTEyIDI4OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkM0NDggMTY0LjMgMzQ3LjcgNjQgMjI0IDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNjAuNiAyMjAuNkwxNjQuNyAzMjQuN2wyOC40LTI4LjRjLS43LTIuNi0xLjEtNS40LTEuMS04LjNjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmMtMi45IDAtNS42LS40LTguMy0xLjFsLTI4LjQgMjguNEwyOTEuNCA0NTEuNGMxNC41IDE0LjUgMTEuOCAzOC44LTcuMyA0Ni4zQzI2MC41IDUwNi45IDIzNC45IDUxMiAyMDggNTEyQzkzLjEgNTEyIDAgNDE4LjkgMCAzMDRjMC0yNi45IDUuMS01Mi41IDE0LjQtNzYuMWM3LjUtMTkgMzEuOC0yMS44IDQ2LjMtNy4zek0yMjQgOTZjMTA2IDAgMTkyIDg2IDE5MiAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdfSxRMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtdXBcIixpY29uOls1MTIsNTEyLFs2MTQ2NyxcImFycm93LWFsdC1jaXJjbGUtdXBcIl0sXCJmMzViXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnptMTEuMy0zOTUuM2wxMTIgMTEyYzQuNiA0LjYgNS45IDExLjUgMy41IDE3LjRzLTguMyA5LjktMTQuOCA5LjlIMzA0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDI0MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjU2SDE0NGMtNi41IDAtMTIuMy0zLjktMTQuOC05LjlzLTEuMS0xMi45IDMuNS0xNy40bDExMi0xMTJjNi4yLTYuMiAxNi40LTYuMiAyMi42IDB6XCJdfSx3SD1RMyxLMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtb2JpbGUtc2NyZWVuLWJ1dHRvblwiLGljb246WzM4NCw1MTIsW1wibW9iaWxlLWFsdFwiXSxcImYzY2RcIixcIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwSDMwNGMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIODBjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0yMjQgNDQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNMzA0IDY0SDgwVjM4NEgzMDRWNjR6XCJdfSxrSD1LMyxqMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2b2x1bWUtaGlnaFwiLGljb246WzY0MCw1MTIsWzEyODI2NixcInZvbHVtZS11cFwiXSxcImYwMjhcIixcIk01MzMuNiAzMi41QzU5OC41IDg1LjMgNjQwIDE2NS44IDY0MCAyNTZzLTQxLjUgMTcwLjgtMTA2LjQgMjIzLjVjLTEwLjMgOC40LTI1LjQgNi44LTMzLjgtMy41cy02LjgtMjUuNCAzLjUtMzMuOEM1NTcuNSAzOTguMiA1OTIgMzMxLjIgNTkyIDI1NnMtMzQuNS0xNDIuMi04OC43LTE4Ni4zYy0xMC4zLTguNC0xMS44LTIzLjUtMy41LTMzLjhzMjMuNS0xMS44IDMzLjgtMy41ek00NzMuMSAxMDdjNDMuMiAzNS4yIDcwLjkgODguOSA3MC45IDE0OXMtMjcuNyAxMTMuOC03MC45IDE0OWMtMTAuMyA4LjQtMjUuNCA2LjgtMzMuOC0zLjVzLTYuOC0yNS40IDMuNS0zMy44QzQ3NS4zIDM0MS4zIDQ5NiAzMDEuMSA0OTYgMjU2cy0yMC43LTg1LjMtNTMuMi0xMTEuOGMtMTAuMy04LjQtMTEuOC0yMy41LTMuNS0zMy44czIzLjUtMTEuOCAzMy44LTMuNXptLTYwLjUgNzQuNUM0MzQuMSAxOTkuMSA0NDggMjI1LjkgNDQ4IDI1NnMtMTMuOSA1Ni45LTM1LjQgNzQuNWMtMTAuMyA4LjQtMjUuNCA2LjgtMzMuOC0zLjVzLTYuOC0yNS40IDMuNS0zMy44QzM5My4xIDI4NC40IDQwMCAyNzEgNDAwIDI1NnMtNi45LTI4LjQtMTcuNy0zNy4zYy0xMC4zLTguNC0xMS44LTIzLjUtMy41LTMzLjhzMjMuNS0xMS44IDMzLjgtMy41ek0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NFY0NDhjMCAxMi42LTcuNCAyNC0xOC45IDI5LjJzLTI1IDMuMS0zNC40LTUuM0wxMzEuOCAzNTJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjIyNGMwLTM1LjMgMjguNy02NCA2NC02NGg2Ny44TDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6XCJdfSxiSD1qMyxBSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2Vycy1yYXlzXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1OTNcIixcIk00MSA3QzMxLjYtMi4zIDE2LjQtMi4zIDcgN1MtMi4zIDMxLjYgNyA0MWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDEgN3pNNTk5IDdMNTI3IDc5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMHpNNyA1MDVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw3IDQ3MWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjl6bTU5MiAwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzItNzJjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJ6TTMyMCAyNTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRzMjguNyA2NCA2NCA2NHpNMjEyLjEgMzM2Yy0yLjcgNy41LTQuMSAxNS42LTQuMSAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNEg0MDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRjMC04LjQtMS40LTE2LjUtNC4xLTI0Yy0uNS0xLjQtMS0yLjctMS42LTRjLTkuNC0yMi4zLTI5LjgtMzguOS01NC4zLTQzYy0zLjktLjctNy45LTEtMTItMUgyODBjLTQuMSAwLTguMSAuMy0xMiAxYy0uOCAuMS0xLjcgLjMtMi41IC41Yy0yNC45IDUuMS00NS4xIDIzLTUzLjQgNDYuNXpNMTc1LjggMjI0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6bS0yNi41IDMyQzExOS45IDI1NiA5NiAyNzkuOSA5NiAzMDkuM2MwIDE0LjcgMTEuOSAyNi43IDI2LjcgMjYuN2g1Ni4xYzgtMzQuMSAzMi44LTYxLjcgNjUuMi03My42Yy03LjUtNC4xLTE2LjItNi40LTI1LjMtNi40SDE0OS4zem0zNjggODBjMTQuNyAwIDI2LjctMTEuOSAyNi43LTI2LjdjMC0yOS41LTIzLjktNTMuMy01My4zLTUzLjNINDIxLjNjLTkuMiAwLTE3LjggMi4zLTI1LjMgNi40YzMyLjQgMTEuOSA1Ny4yIDM5LjUgNjUuMiA3My42aDU2LjF6TTQ2NCAyMjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHpcIl19LEJIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndhbGxldFwiLGljb246WzUxMiw1MTIsW10sXCJmNTU1XCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE5MmMwLTM1LjMtMjguNy02NC02NC02NEg4MGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNkg0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINjR6TTQxNiAzMzZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LFRIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNsaXBib2FyZC1jaGVja1wiLGljb246WzM4NCw1MTIsW10sXCJmNDZjXCIsXCJNMTkyIDBjLTQxLjggMC03Ny40IDI2LjctOTAuNSA2NEg2NEMyOC43IDY0IDAgOTIuNyAwIDEyOFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NEgyODIuNUMyNjkuNCAyNi43IDIzMy44IDAgMTkyIDB6bTAgMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6TTMwNy44IDI3NS44bC0xMjggMTI4Yy0xMC45IDEwLjktMjguNyAxMC45LTM5LjYgMGwtNjQtNjRjLTEwLjktMTAuOS0xMC45LTI4LjcgMC0zOS42czI4LjctMTAuOSAzOS42IDBMMTYwIDM0NC40IDI2OC4yIDIzNi4yYzEwLjktMTAuOSAyOC43LTEwLjkgMzkuNiAwczEwLjkgMjguNyAwIDM5LjZ6XCJdfSx5SD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLWF1ZGlvXCIsaWNvbjpbMzg0LDUxMixbXSxcImYxYzdcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6bTIgMjI2LjNjMzcuMSAyMi40IDYyIDYzLjEgNjIgMTA5LjdzLTI0LjkgODcuMy02MiAxMDkuN2MtNy42IDQuNi0xNy40IDIuMS0yMi01LjRzLTIuMS0xNy40IDUuNC0yMkMyNjkuNCA0MDEuNSAyODggMzcwLjkgMjg4IDMzNnMtMTguNi02NS41LTQ2LjUtODIuM2MtNy42LTQuNi0xMC0xNC40LTUuNC0yMnMxNC40LTEwIDIyLTUuNHptLTkxLjkgMzAuOWM2IDIuNSA5LjkgOC4zIDkuOSAxNC44VjQwMGMwIDYuNS0zLjkgMTIuMy05LjkgMTQuOHMtMTIuOSAxLjEtMTcuNC0zLjVMMTEzLjQgMzc2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMzEyYzAtOC44IDcuMi0xNiAxNi0xNmgzMy40bDM1LjMtMzUuM2M0LjYtNC42IDExLjUtNS45IDE3LjQtMy41em01MSAzNC45YzYuNi01LjkgMTYuNy01LjMgMjIuNiAxLjNDMjQ5LjggMzA0LjYgMjU2IDMxOS42IDI1NiAzMzZzLTYuMiAzMS40LTE2LjMgNDIuN2MtNS45IDYuNi0xNiA3LjEtMjIuNiAxLjNzLTcuMS0xNi0xLjMtMjIuNmM1LjEtNS43IDguMS0xMy4xIDguMS0yMS4zcy0zLjEtMTUuNy04LjEtMjEuM2MtNS45LTYuNi01LjMtMTYuNyAxLjMtMjIuNnpcIl19LEozPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJ1cmdlclwiLGljb246WzUxMiw1MTIsW1wiaGFtYnVyZ2VyXCJdLFwiZjgwNVwiLFwiTTYxLjEgMjI0QzQ1IDIyNCAzMiAyMTEgMzIgMTk0LjljMC0xLjkgLjItMy43IC42LTUuNkMzNy45IDE2OC4zIDc4LjggMzIgMjU2IDMyczIxOC4xIDEzNi4zIDIyMy40IDE1Ny4zYy41IDEuOSAuNiAzLjcgLjYgNS42YzAgMTYuMS0xMyAyOS4xLTI5LjEgMjkuMUg2MS4xek0xNDQgMTI4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6bTI0MCAxNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnpNMjcyIDk2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6TTE2IDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OEg0NDhjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhINjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4em0xNiA5NmMwLTguOCA3LjItMTYgMTYtMTZINDY0YzguOCAwIDE2IDcuMiAxNiAxNnYxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg5NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNDAwelwiXX0sUEg9SjMsRkg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwid3JlbmNoXCIsaWNvbjpbNTEyLDUxMixbMTI4Mjk1XSxcImYwYWRcIixcIk0zNTIgMzIwYzg4LjQgMCAxNjAtNzEuNiAxNjAtMTYwYzAtMTUuMy0yLjItMzAuMS02LjItNDQuMmMtMy4xLTEwLjgtMTYuNC0xMy4yLTI0LjMtNS4zbC03Ni44IDc2LjhjLTMgMy03LjEgNC43LTExLjMgNC43SDMzNmMtOC44IDAtMTYtNy4yLTE2LTE2VjExOC42YzAtNC4yIDEuNy04LjMgNC43LTExLjNsNzYuOC03Ni44YzcuOS03LjkgNS40LTIxLjItNS4zLTI0LjNDMzgyLjEgMi4yIDM2Ny4zIDAgMzUyIDBDMjYzLjYgMCAxOTIgNzEuNiAxOTIgMTYwYzAgMTkuMSAzLjQgMzcuNSA5LjUgNTQuNUwxOS45IDM5Ni4xQzcuMiA0MDguOCAwIDQyNi4xIDAgNDQ0LjFDMCA0ODEuNiAzMC40IDUxMiA2Ny45IDUxMmMxOCAwIDM1LjMtNy4yIDQ4LTE5LjlMMjk3LjUgMzEwLjVjMTcgNi4yIDM1LjQgOS41IDU0LjUgOS41ek04MCA0NTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpcIl19LERIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJ1Z3NcIixpY29uOls2NDAsNTEyLFtdLFwiZTRkMFwiLFwiTTE5Ni41IDEwNy40bDMzLjQtNzMuNWM1LjUtMTIuMSAuMS0yNi4zLTExLjktMzEuOHMtMjYuMy0uMS0zMS44IDExLjlMMTYwIDcxLjcgMTMzLjkgMTQuMUMxMjguNCAyIDExNC4xLTMuMyAxMDIuMSAyLjFTODQuNyAyMS45IDkwLjEgMzMuOWwzMy40IDczLjVjLTEwLjIgNy4xLTE4LjIgMTctMjIuOSAyOC42aC0xN2wtNC4xLTIwLjdjLTIuNi0xMy0xNS4yLTIxLjQtMjguMi0xOC44cy0yMS40IDE1LjItMTguOCAyOC4ybDggNDBDNDIuNyAxNzUuOSA1Mi42IDE4NCA2NCAxODRIOTZ2MjMuM2wtMzcuOCA5LjVjLTkuNSAyLjQtMTYuNiAxMC4yLTE3LjkgMTkuOWwtOCA1NmMtMS45IDEzLjEgNy4yIDI1LjMgMjAuNCAyNy4yczI1LjMtNy4yIDI3LjItMjAuNGw1LjctNDAgMTguNC00LjZDMTE0LjcgMjc0LjYgMTM1LjggMjg4IDE2MCAyODhzNDUuMy0xMy40IDU2LjEtMzMuMmwxOC40IDQuNiA1LjcgNDBjMS45IDEzLjEgMTQgMjIuMiAyNy4yIDIwLjRzMjIuMi0xNCAyMC40LTI3LjJsLTgtNTZjLTEuNC05LjctOC41LTE3LjUtMTcuOS0xOS45TDIyNCAyMDcuM1YxODRoMzJjMTEuNCAwIDIxLjMtOC4xIDIzLjUtMTkuM2w4LTQwYzIuNi0xMy01LjgtMjUuNi0xOC44LTI4LjJzLTI1LjYgNS44LTI4LjIgMTguOEwyMzYuMyAxMzZoLTE3Yy00LjctMTEuNi0xMi43LTIxLjUtMjIuOS0yOC42ek01MjggMjg2LjVsNjUuNi00N2MxMC44LTcuNyAxMy4zLTIyLjcgNS42LTMzLjVzLTIyLjctMTMuMy0zMy41LTUuNmwtNTEuNCAzNi44IDYuMS02Mi45YzEuMy0xMy4yLTguNC0yNC45LTIxLjYtMjYuMnMtMjQuOSA4LjQtMjYuMiAyMS42TDQ2NC44IDI1MGMtMTIuMyAxLTI0LjIgNS42LTM0LjEgMTMuM0w0MTYgMjU0LjhsNi44LTIwYzQuMi0xMi42LTIuNS0yNi4yLTE1LTMwLjRzLTI2LjIgMi41LTMwLjQgMTVsLTEzLjEgMzguNmMtMy43IDEwLjggLjggMjIuOCAxMC43IDI4LjVsMjcuNyAxNkwzOTEgMzIyLjcgMzUzLjUgMzEyYy05LjQtMi43LTE5LjUgLjYtMjUuNSA4LjNsLTM0LjkgNDQuNWMtOC4yIDEwLjQtNi40IDI1LjUgNC4xIDMzLjdzMjUuNSA2LjQgMzMuNy00LjFsMjUtMzEuOCAxOC4yIDUuMmMtLjUgMjIuNiAxMSA0NC43IDMyIDU2LjhzNDUuOSAxMSA2NS4yLS43bDEzLjYgMTMuMi0xNS4xIDM3LjVjLTQuOSAxMi4zIDEgMjYuMyAxMy4zIDMxLjJzMjYuMy0xIDMxLjItMTMuM0w1MzUuNSA0NDBjMy42LTkuMSAxLjQtMTkuNC01LjYtMjYuMmwtMjgtMjcuMSAxMS42LTIwLjEgMjcuNyAxNmM5LjkgNS43IDIyLjUgMy43IDMwLTQuOUw1OTguMiAzNDdjOC43LTEwIDcuOC0yNS4xLTIuMi0zMy45cy0yNS4xLTcuOC0zMy45IDIuMmwtMTMuOSAxNS45LTE0LjctOC41YzEuNy0xMi40LS4yLTI1LTUuNS0zNi4yelwiXX0sWjM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicnVwZWUtc2lnblwiLGljb246WzQ0OCw1MTIsWzgzNjAsXCJydXBlZVwiXSxcImYxNTZcIixcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyaDgwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0YzAgNTguOC0zNS4yIDEwOS4zLTg1LjcgMTMxLjdsNTEuNCAxMjguNGM2LjYgMTYuNC0xLjQgMzUtMTcuOCA0MS42cy0zNS0xLjQtNDEuNi0xNy44TDEwNi4zIDMyMEg2NFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjg4IDY0ek02NCAyNTZoNDhjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBINjRWMjU2em0yNTYuNSAxNi40Yy0uOSA2IDAgOC43IC40IDkuOGMuNCAxLjEgMS40IDIuNiA0LjIgNC45YzcuMiA1LjcgMTguNyAxMCAzNy45IDE2LjhsMS4zIC41YzE2IDUuNiAzOC43IDEzLjYgNTUuNyAyOC4xYzkuNSA4LjEgMTcuOSAxOC42IDIzLjEgMzIuM2M1LjEgMTMuNyA2LjEgMjguNSAzLjggNDRjLTQuMiAyOC4xLTIwLjUgNDkuMy00My44IDYwLjljLTIyLjEgMTEtNDguMSAxMi41LTczLjIgOGwtLjIgMCAwIDBjLTkuMy0xLjgtMjAuNS01LjctMjkuMy05Yy02LTIuMy0xMi42LTQuOS0xNy43LTYuOWwwIDBjLTIuNS0xLTQuNi0xLjgtNi4zLTIuNWMtMTYuNS02LjQtMjQuNi0yNS0xOC4yLTQxLjRzMjUtMjQuNiA0MS40LTE4LjJjMi42IDEgNS4yIDIgNy45IDMuMWwwIDBjNC44IDEuOSA5LjggMy45IDE1LjQgNmM4LjggMy4zIDE1LjMgNS40IDE4LjcgNmMxNS43IDIuOCAyNi43IC44IDMyLjktMi4zYzUtMi41IDgtNiA5LjEtMTNjMS02LjkgLjItMTAuNS0uNS0xMi4zYy0uNi0xLjctMS44LTMuNi00LjUtNS45Yy02LjktNS44LTE4LjItMTAuNC0zNi45LTE3bC0zLTEuMWMtMTUuNS01LjQtMzctMTMtNTMuMy0yNS45Yy05LjUtNy41LTE4LjMtMTcuNi0yMy43LTMxYy01LjQtMTMuNC02LjYtMjgtNC40LTQzLjJjOC41LTU3LjEgNjctNzggMTE2LjktNjguOWM2LjkgMS4zIDI3LjMgNS44IDM1LjQgOC40YzE2LjkgNS4yIDI2LjMgMjMuMiAyMS4xIDQwLjFzLTIzLjIgMjYuMy00MC4xIDIxLjFjLTQuNy0xLjQtMjIuMy01LjUtMjcuOS02LjVjLTE0LjYtMi43LTI1LjgtLjQtMzIuNiAzLjJjLTYuMyAzLjMtOC45IDcuNi05LjUgMTJ6XCJdfSxSSD1aMyxVSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLWltYWdlXCIsaWNvbjpbMzg0LDUxMixbMTI4NDQzXSxcImYxYzVcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTEyOCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem04OCAzMmM1LjMgMCAxMC4yIDIuNiAxMy4yIDYuOWw4OCAxMjhjMy40IDQuOSAzLjcgMTEuMyAxIDE2LjVzLTguMiA4LjYtMTQuMiA4LjZIMjE2IDE3NiAxMjggODBjLTUuOCAwLTExLjEtMy4xLTEzLjktOC4xcy0yLjgtMTEuMiAuMi0xNi4xbDQ4LTgwYzIuOS00LjggOC4xLTcuOCAxMy43LTcuOHMxMC44IDIuOSAxMy43IDcuOGwxMi44IDIxLjQgNDguMy03MC4yYzMtNC4zIDcuOS02LjkgMTMuMi02Ljl6XCJdfSxZMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtcXVlc3Rpb25cIixpY29uOls1MTIsNTEyLFs2MjEwOCxcInF1ZXN0aW9uLWNpcmNsZVwiXSxcImYwNTlcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0xNjkuOCAxNjUuM2M3LjktMjIuMyAyOS4xLTM3LjMgNTIuOC0zNy4zaDU4LjNjMzQuOSAwIDYzLjEgMjguMyA2My4xIDYzLjFjMCAyMi42LTEyLjEgNDMuNS0zMS43IDU0LjhMMjgwIDI2NC40Yy0uMiAxMy0xMC45IDIzLjYtMjQgMjMuNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMjUwLjVjMC04LjYgNC42LTE2LjUgMTIuMS0yMC44bDQ0LjMtMjUuNGM0LjctMi43IDcuNi03LjcgNy42LTEzLjFjMC04LjQtNi44LTE1LjEtMTUuMS0xNS4xSDIyMi42Yy0zLjQgMC02LjQgMi4xLTcuNSA1LjNsLS40IDEuMmMtNC40IDEyLjUtMTguMiAxOS0zMC42IDE0LjZzLTE5LTE4LjItMTQuNi0zMC42bC40LTEuMnpNMjg4IDM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdfSxxSD1ZMyxHSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwbGFuZS1kZXBhcnR1cmVcIixpY29uOls2NDAsNTEyLFsxMjg3NDddLFwiZjViMFwiLFwiTTM4MSAxMTQuOUwxODYuMSA0MS44Yy0xNi43LTYuMi0zNS4yLTUuMy01MS4xIDIuN0w4OS4xIDY3LjRDNzggNzMgNzcuMiA4OC41IDg3LjYgOTUuMmwxNDYuOSA5NC41TDEzNiAyNDAgNzcuOCAyMTQuMWMtOC43LTMuOS0xOC44LTMuNy0yNy4zIC42TDE4LjMgMjMwLjhjLTkuMyA0LjctMTEuOCAxNi44LTUgMjQuN2w3My4xIDg1LjNjNi4xIDcuMSAxNSAxMS4yIDI0LjMgMTEuMkgyNDguNGM1IDAgOS45LTEuMiAxNC4zLTMuNEw1MzUuNiAyMTIuMmM0Ni41LTIzLjMgODIuNS02My4zIDEwMC44LTExMkM2NDUuOSA3NSA2MjcuMiA0OCA2MDAuMiA0OEg1NDIuOGMtMjAuMiAwLTQwLjIgNC44LTU4LjIgMTRMMzgxIDExNC45ek0wIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXX0sV0g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZHNoYWtlLXNsYXNoXCIsaWNvbjpbNjQwLDUxMixbXSxcImUwNjBcIixcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43bC0xMzUtMTA1LjhjLTEuMS0xMS40LTYuMy0yMi4zLTE1LjMtMzAuN2wtMTM0LjItMTIzLTIzLjQgMTguMi0yNi0yMC4zIDc3LjItNjAuMWM3LTUuNCAxNy00LjIgMjIuNSAyLjhzNC4yIDE3LTIuOCAyMi41bC0yMC45IDE2LjJMNTEyIDMxNi44VjEyOGgtLjdsLTMuOS0yLjVMNDM0LjggNzljLTE1LjMtOS44LTMzLjItMTUtNTEuNC0xNWMtMjEuOCAwLTQzIDcuNS02MCAyMS4ybC04OS43IDcyLjYtMjUuOC0yMC4zIDgxLjgtNjYuMmMtMTEuNi00LjktMjQuMS03LjQtMzYuOC03LjRDMjM0IDY0IDIxNS43IDY5LjYgMjAwIDgwbC0zNS41IDIzLjdMMzguOCA1LjF6TTk2IDE3MS42TDQwLjYgMTI4SDBWMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMySDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE3MS42ek00MTMuNiA0MjEuOUwxMjggMTk2LjlWMzUyaDI4LjJsOTEuNCA4My40YzE5LjYgMTcuOSA0OS45IDE2LjUgNjcuOC0zLjFjNS41LTYuMSA5LjItMTMuMiAxMS4xLTIwLjZsMTcgMTUuNmMxOS41IDE3LjkgNDkuOSAxNi42IDY3LjgtMi45Yy44LS44IDEuNS0xLjcgMi4yLTIuNnpNNDggMzUyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2ek01NDQgMTI4VjM1MmMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYxMjhINTQ0em02NCAyMDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl19LEVIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJvb2stYm9va21hcmtcIixpY29uOls0NDgsNTEyLFtdLFwiZTBiYlwiLFwiTTAgOTZDMCA0MyA0MyAwIDk2IDBoOTZWMTkwLjdjMCAxMy40IDE1LjUgMjAuOSAyNiAxMi41TDI3MiAxNjBsNTQgNDMuMmMxMC41IDguNCAyNiAuOSAyNi0xMi41VjBoMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMydjY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NCA5NmMtNTMgMC05Ni00My05Ni05NlY5NnpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM1MlYzODRIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXX0sSUg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29kZS1icmFuY2hcIixpY29uOls0NDgsNTEyLFtdLFwiZjEyNlwiLFwiTTgwIDEwNGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNFM1NiA2Ni43IDU2IDgwczEwLjcgMjQgMjQgMjR6bTgwLTI0YzAgMzIuOC0xOS43IDYxLTQ4IDczLjN2ODcuOGMxOC44LTEwLjkgNDAuNy0xNy4xIDY0LTE3LjFoOTZjMzUuMyAwIDY0LTI4LjcgNjQtNjR2LTYuN0MzMDcuNyAxNDEgMjg4IDExMi44IDI4OCA4MGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjNWMTYwYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4SDE3NmMtMzUuMyAwLTY0IDI4LjctNjQgNjR2Ni43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjNjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC0zMi44IDE5LjctNjEgNDgtNzMuM1YzNTIgMTUzLjNDMTkuNyAxNDEgMCAxMTIuOCAwIDgwQzAgMzUuOCAzNS44IDAgODAgMHM4MCAzNS44IDgwIDgwem0yMzIgMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6TTgwIDQ1NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0elwiXX0sT0g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGF0LWNvd2JveVwiLGljb246WzY0MCw1MTIsW10sXCJmOGMwXCIsXCJNMzIwIDY0YzE0LjQgMCAyMi4zLTcgMzAuOC0xNC40QzM2MC40IDQxLjEgMzcwLjcgMzIgMzkyIDMyYzQ5LjMgMCA4NC40IDE1Mi4yIDk3LjkgMjIxLjlDNDQ3LjggMjcyLjEgMzkwLjkgMjg4IDMyMCAyODhzLTEyNy44LTE1LjktMTY5LjktMzQuMUMxNjMuNiAxODQuMiAxOTguNyAzMiAyNDggMzJjMjEuMyAwIDMxLjYgOS4xIDQxLjIgMTcuNkMyOTcuNyA1NyAzMDUuNiA2NCAzMjAgNjR6TTExMS4xIDI3MC43YzQ3LjIgMjQuNSAxMTcuNSA0OS4zIDIwOSA0OS4zczE2MS44LTI0LjggMjA4LjktNDkuM2MyNC44LTEyLjkgNDkuOC0yOC4zIDcwLjEtNDcuN2M3LjktNy45IDIwLjItOS4yIDI5LjYtMy4zYzkuNSA1LjkgMTMuNSAxNy45IDkuOSAyOC41Yy0xMy41IDM3LjctMzguNCA3Mi4zLTY2LjEgMTAwLjZDNTIzLjcgMzk4LjkgNDQzLjYgNDQ4IDMyMCA0NDhzLTIwMy42LTQ5LjEtMjUyLjUtOTkuMkMzOS44IDMyMC40IDE0LjkgMjg1LjggMS40IDI0OC4xYy0zLjYtMTAuNiAuNC0yMi42IDkuOS0yOC41YzkuNS01LjkgMjEuNy00LjUgMjkuNiAzLjNjMjAuNCAxOS40IDQ1LjMgMzQuOCA3MC4xIDQ3Ljd6XCJdfSxYSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJicmlkZ2VcIixpY29uOls1NzYsNTEyLFtdLFwiZTRjOFwiLFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nkg3MnY2NEgwVjI4OGM1MyAwIDk2IDQzIDk2IDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2djY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NGMwLTUzIDQzLTk2IDk2LTk2VjE2MEg1MDRWOTZoNDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6TTQ1NiA5NnY2NEgzNzZWOTZoODB6TTMyOCA5NnY2NEgyNDhWOTZoODB6TTIwMCA5NnY2NEgxMjBWOTZoODB6XCJdfSxfMz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwaG9uZS1mbGlwXCIsaWNvbjpbNTEyLDUxMixbMTI4MzgxLFwicGhvbmUtYWx0XCJdLFwiZjg3OVwiLFwiTTM0Ny4xIDI0LjZjNy43LTE4LjYgMjgtMjguNSA0Ny40LTIzLjJsODggMjRDNDk5LjkgMzAuMiA1MTIgNDYgNTEyIDY0YzAgMjQ3LjQtMjAwLjYgNDQ4LTQ0OCA0NDhjLTE4IDAtMzMuOC0xMi4xLTM4LjYtMjkuNWwtMjQtODhjLTUuMy0xOS40IDQuNi0zOS43IDIzLjItNDcuNGw5Ni00MGMxNi4zLTYuOCAzNS4yLTIuMSA0Ni4zIDExLjZMMjA3LjMgMzY4YzcwLjQtMzMuMyAxMjcuNC05MC4zIDE2MC43LTE2MC43TDMxOC43IDE2N2MtMTMuNy0xMS4yLTE4LjQtMzAtMTEuNi00Ni4zbDQwLTk2elwiXX0sUUg9XzMsS0g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidHJ1Y2stZnJvbnRcIixpY29uOls1MTIsNTEyLFtdLFwiZTJiN1wiLFwiTTAgODBDMCAzNS44IDM1LjggMCA4MCAwSDQzMmM0NC4yIDAgODAgMzUuOCA4MCA4MFYzNjhjMCAyNi4yLTEyLjYgNDkuNC0zMiA2NHY0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0MTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0OEgxMjh2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQzMkMxMi42IDQxNy40IDAgMzk0LjIgMCAzNjhWODB6bTEyOS45IDcyLjJMMTEyIDIyNEg0MDBsLTE3LjktNzEuOEMzNzguNSAxMzggMzY1LjcgMTI4IDM1MSAxMjhIMTYxYy0xNC43IDAtMjcuNSAxMC0zMSAyNC4yek0xMjggMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptMjg4IDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdfSxqSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYXRcIixpY29uOls1MTIsNTEyLFsxMjgwMDhdLFwiZjZiZVwiLFwiTTI4OCAxOTJoMTcuMWMyMi4xIDM4LjMgNjMuNSA2NCAxMTAuOSA2NGMxMSAwIDIxLjgtMS40IDMyLTR2NCAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzM5LjJMMjQ4IDQ0OGg1NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxNjBjLTUzIDAtOTYtNDMtOTYtOTZWMTkyLjVjMC0xNi4xLTEyLTI5LjgtMjgtMzEuOGwtNy45LTFDMTAuNSAxNTcuNi0xLjkgMTQxLjYgLjIgMTI0czE4LjItMzAgMzUuNy0yNy44bDcuOSAxYzQ4IDYgODQuMSA0Ni44IDg0LjEgOTUuM3Y4NS4zYzM0LjQtNTEuNyA5My4yLTg1LjggMTYwLTg1Ljh6bTE2MCAyNi41djBjLTEwIDMuNS0yMC44IDUuNS0zMiA1LjVjLTI4LjQgMC01NC0xMi40LTcxLjYtMzJoMGMtMy43LTQuMS03LTguNS05LjktMTMuMkMzMjUuMyAxNjQgMzIwIDE0Ni42IDMyMCAxMjh2MFYzMiAxMiAxMC43QzMyMCA0LjggMzI0LjcgLjEgMzMwLjYgMGguMmMzLjMgMCA2LjQgMS42IDguNCA0LjJsMCAuMUwzNTIgMjEuM2wyNy4yIDM2LjNMMzg0IDY0aDY0bDQuOC02LjRMNDgwIDIxLjMgNDkyLjggNC4zbDAtLjFjMi0yLjYgNS4xLTQuMiA4LjQtNC4yaC4yQzUwNy4zIC4xIDUxMiA0LjggNTEyIDEwLjdWMTIgMzJ2OTZjMCAxNy4zLTQuNiAzMy42LTEyLjYgNDcuNmMtMTEuMyAxOS44LTI5LjYgMzUuMi01MS40IDQyLjl6TTQwMCAxMjhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNnptNDggMTZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZ6XCJdfSxKSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhbmNob3ItY2lyY2xlLWV4Y2xhbWF0aW9uXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0YWJcIixcIk0yNTYgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptODUuMSA4MEMzNjcgMTU4LjggMzg0IDEyOS40IDM4NCA5NmMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDMzLjQgMTcgNjIuOCA0Mi45IDgwSDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzMlY0NDhIMjA4Yy01MyAwLTk2LTQzLTk2LTk2di02LjFsNyA3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw5NyAyNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwTDcgMzE5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNy03VjM1MmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MGg4MCA4MGM4LjIgMCAxNi4zLS42IDI0LjItMS44Yy0yMi4yLTE2LjItNDAuNC0zNy41LTUzLTYyLjJIMzIwVjM2OCAyNDBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzQxLjF6TTQ5NiA1MTJjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRzLTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHptMC00OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0em0wLTE5MmM4LjggMCAxNiA3LjIgMTYgMTZ2ODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjg4YzAtOC44IDcuMi0xNiAxNi0xNnpcIl19LFpIPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRydWNrLWZpZWxkXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1OGRcIixcIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NEgzMjBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMyaDUxLjhjMjUuMyAwIDQ4LjIgMTQuOSA1OC41IDM4bDUyLjggMTE4LjhjLjUgMS4xIC45IDIuMSAxLjMgMy4ySDU0NGMzNS4zIDAgNjQgMjguNyA2NCA2NHYzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg1NzZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZIMjU2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyVjI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjk2ek0zODQgMjI0aDg1LjlsLTQyLjctOTZIMzg0djk2ek0xNjAgNDMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6bTM2OC00OGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6XCJdfSxZSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyb3V0ZVwiLGljb246WzUxMiw1MTIsW10sXCJmNGQ3XCIsXCJNNDE2IDI1NnM5Ni05NiA5Ni0xNjBjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAyOS40IDIwLjIgNjUuNSA0Mi4xIDk2SDMyMGMtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5Nmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxODguNmMtNi4yIDkuNi0xMi42IDE4LjgtMTkgMjcuMmMtMTAuNyAxNC4yLTIxLjMgMjYuOS0zMCAzNi44SDQxNmM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NkgzMjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoOTZ6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6TTE0OS45IDQ0OGMyMS45LTMwLjUgNDIuMS02Ni42IDQyLjEtOTZjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCA2NCA5NiAxNjAgOTYgMTYwczMuNS0zLjUgOS4yLTkuNmMuNC0uNCAuNy0uOCAxLjEtMS4yYzMuMy0zLjUgNy4xLTcuOCAxMS40LTEyLjhjLjItLjIgLjQtLjQgLjYtLjZjOS40LTEwLjggMjAuNy0yNC42IDMxLjYtMzkuOHpNOTYgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdfSxfSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjbGlwYm9hcmQtcXVlc3Rpb25cIixpY29uOlszODQsNTEyLFtdLFwiZTRlM1wiLFwiTTE5MiAwYy00MS44IDAtNzcuNCAyNi43LTkwLjUgNjRINjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRIMjgyLjVDMjY5LjQgMjYuNyAyMzMuOCAwIDE5MiAwem0wIDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyek0xMDUuOCAyMjkuM2M3LjktMjIuMyAyOS4xLTM3LjMgNTIuOC0zNy4zaDU4LjNjMzQuOSAwIDYzLjEgMjguMyA2My4xIDYzLjFjMCAyMi42LTEyLjEgNDMuNS0zMS43IDU0LjhMMjE2IDMyOC40Yy0uMiAxMy0xMC45IDIzLjYtMjQgMjMuNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMzE0LjVjMC04LjYgNC42LTE2LjUgMTIuMS0yMC44bDQ0LjMtMjUuNGM0LjctMi43IDcuNi03LjcgNy42LTEzLjFjMC04LjQtNi44LTE1LjEtMTUuMS0xNS4xSDE1OC42Yy0zLjQgMC02LjQgMi4xLTcuNSA1LjNsLS40IDEuMmMtNC40IDEyLjUtMTguMiAxOS0zMC42IDE0LjZzLTE5LTE4LjItMTQuNi0zMC42bC40LTEuMnpNMjI0IDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdfSwkSD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwYW5vcmFtYVwiLGljb246WzY0MCw1MTIsW10sXCJlMjA5XCIsXCJNNDUuNiAzMkMyMC40IDMyIDAgNTIuNCAwIDc3LjZWNDM0LjRDMCA0NTkuNiAyMC40IDQ4MCA0NS42IDQ4MGM1LjEgMCAxMC0uOCAxNC43LTIuNEM3NC42IDQ3Mi44IDE3Ny42IDQ0MCAzMjAgNDQwczI0NS40IDMyLjggMjU5LjYgMzcuNmM0LjcgMS42IDkuNyAyLjQgMTQuNyAyLjRjMjUuMiAwIDQ1LjYtMjAuNCA0NS42LTQ1LjZWNzcuNkM2NDAgNTIuNCA2MTkuNiAzMiA1OTQuNCAzMmMtNSAwLTEwIC44LTE0LjcgMi40QzU2NS40IDM5LjIgNDYyLjQgNzIgMzIwIDcyUzc0LjYgMzkuMiA2MC40IDM0LjRDNTUuNiAzMi44IDUwLjcgMzIgNDUuNiAzMnpNMTYwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTIwOCAwYzcuOSAwIDE1LjQgMy45IDE5LjggMTAuNUw1MTIuMyAzNTNjNS40IDggNS42IDE4LjQgLjQgMjYuNXMtMTQuNyAxMi4zLTI0LjIgMTAuN0M0NDIuNyAzODIuNCAzODUuMiAzNzYgMzIwIDM3NmMtNjUuNiAwLTEyMy40IDYuNS0xNjkuMyAxNC40Yy05LjggMS43LTE5LjctMi45LTI0LjctMTEuNXMtNC4zLTE5LjQgMS45LTI3LjJMMTk3LjMgMjY1YzQuNi01LjcgMTEuNC05IDE4LjctOXMxNC4yIDMuMyAxOC43IDlsMjYuNCAzMy4xIDg3LTEyNy42YzQuNS02LjYgMTEuOS0xMC41IDE5LjgtMTAuNXpcIl19LGN6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNvbW1lbnQtbWVkaWNhbFwiLGljb246WzUxMiw1MTIsW10sXCJmN2Y1XCIsXCJNMjU2IDQ0OGMxNDEuNCAwIDI1Ni05My4xIDI1Ni0yMDhTMzk3LjQgMzIgMjU2IDMyUzAgMTI1LjEgMCAyNDBjMCA0NS4xIDE3LjcgODYuOCA0Ny43IDEyMC45Yy0xLjkgMjQuNS0xMS40IDQ2LjMtMjEuNCA2Mi45Yy01LjUgOS4yLTExLjEgMTYuNi0xNS4yIDIxLjZjLTIuMSAyLjUtMy43IDQuNC00LjkgNS43Yy0uNiAuNi0xIDEuMS0xLjMgMS40bC0uMyAuMyAwIDAgMCAwIDAgMCAwIDBjLTQuNiA0LjYtNS45IDExLjQtMy40IDE3LjRjMi41IDYgOC4zIDkuOSAxNC44IDkuOWMyOC43IDAgNTcuNi04LjkgODEuNi0xOS4zYzIyLjktMTAgNDIuNC0yMS45IDU0LjMtMzAuNmMzMS44IDExLjUgNjcgMTcuOSAxMDQuMSAxNy45ek0yMjQgMTYwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2NDhoNDhjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyODh2NDhjMCA4LjgtNy4yIDE2LTE2IDE2SDI0MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYyMjRjMC04LjggNy4yLTE2IDE2LTE2aDQ4VjE2MHpcIl19LGF6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRlZXRoLW9wZW5cIixpY29uOls1NzYsNTEyLFtdLFwiZjYyZlwiLFwiTTk2IDMyQzQzIDMyIDAgNzUgMCAxMjh2NjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTUzLTQzLTk2LTk2LTk2SDk2ek0yMjQgOTZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRIMjAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYxNDRjMC0yNi41IDIxLjUtNDggNDgtNDh6bTgwIDQ4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2NTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRIMzI4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYxNDR6TTk2IDEyOGMyNi41IDAgNDggMjEuNSA0OCA0OHYyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNEg3MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRWMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em0zMzYgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHYyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNEg0NTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjE3NnpNOTYgNDgwSDQ4MGM1MyAwIDk2LTQzIDk2LTk2VjM1MmMwLTM1LjMtMjguNy02NC02NC02NEg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2MzJjMCA1MyA0MyA5NiA5NiA5NnptMC02NGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4em04MC00OFYzNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRoNDhjMTMuMyAwIDI0IDEwLjcgMjQgMjR2MjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh6bTE3NiA0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djI0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4em04MC00OFYzNDRjMC0xMy4zIDEwLjctMjQgMjQtMjRoNDhjMTMuMyAwIDI0IDEwLjcgMjQgMjR2MjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh6XCJdfSxzej17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLWNpcmNsZS1taW51c1wiLGljb246WzU3Niw1MTIsW10sXCJlNGVkXCIsXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4ek01NzYgMzY4YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHptLTY0IDBjMC04LjgtNy4yLTE2LTE2LTE2SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg0OTZjOC44IDAgMTYtNy4yIDE2LTE2elwiXX0sZXo9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGFnc1wiLGljb246WzUxMiw1MTIsW10sXCJmMDJjXCIsXCJNMzQ1IDM5LjFMNDcyLjggMTY4LjRjNTIuNCA1MyA1Mi40IDEzOC4yIDAgMTkxLjJMMzYwLjggNDcyLjljLTkuMyA5LjQtMjQuNSA5LjUtMzMuOSAuMnMtOS41LTI0LjUtLjItMzMuOUw0MzguNiAzMjUuOWMzMy45LTM0LjMgMzMuOS04OS40IDAtMTIzLjdMMzEwLjkgNzIuOWMtOS4zLTkuNC05LjItMjQuNiAuMi0zMy45czI0LjYtOS4yIDMzLjkgLjJ6TTAgMjI5LjVWODBDMCA1My41IDIxLjUgMzIgNDggMzJIMTk3LjVjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMTY4IDE2OGMyNSAyNSAyNSA2NS41IDAgOTAuNUwyNzcuMyA0NDIuN2MtMjUgMjUtNjUuNSAyNS05MC41IDBsLTE2OC0xNjhDNi43IDI2Mi43IDAgMjQ2LjUgMCAyMjkuNXpNMTQ0IDE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6XCJdfSxmej17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ3aW5lLWdsYXNzXCIsaWNvbjpbMzIwLDUxMixbMTI3ODYzXSxcImY0ZTNcIixcIk02NCAwQzQ3LjQgMCAzMy41IDEyLjggMzIuMSAyOS4zbC0xNCAxNjguNGMtNiA3MiA0Mi41IDEzNS4yIDEwOS45IDE1MC42VjQ0OEg4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg4MCA4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxOTJWMzQ4LjRjNjcuNC0xNS40IDExNS45LTc4LjYgMTA5LjktMTUwLjZsLTE0LTE2OC40QzI4Ni41IDEyLjggMjcyLjYgMCAyNTYgMEg2NHpNODguMSAxMjhsNS4zLTY0SDIyNi42bDUuMyA2NEg4OC4xelwiXX0sJDM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZm9yd2FyZC1mYXN0XCIsaWNvbjpbNTEyLDUxMixbOTE5NyxcImZhc3QtZm9yd2FyZFwiXSxcImYwNTBcIixcIk0xOC40IDQ0NWMxMS4yIDUuMyAyNC41IDMuNiAzNC4xLTQuNEwyMjQgMjk3LjdWNDE2YzAgMTIuNCA3LjIgMjMuNyAxOC40IDI5czI0LjUgMy42IDM0LjEtNC40TDQ0OCAyOTcuN1Y0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY5NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyMTQuM0wyNzYuNSA3MS40Yy05LjUtNy45LTIyLjgtOS43LTM0LjEtNC40UzIyNCA4My42IDIyNCA5NlYyMTQuM0w1Mi41IDcxLjRjLTkuNS03LjktMjIuOC05LjctMzQuMS00LjRTMCA4My42IDAgOTZWNDE2YzAgMTIuNCA3LjIgMjMuNyAxOC40IDI5elwiXX0scno9JDMsYzY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1tZWgtYmxhbmtcIixpY29uOls1MTIsNTEyLFsxMjg1NjYsXCJtZWgtYmxhbmtcIl0sXCJmNWE0XCIsXCJNNTEyIDI1NmMwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpNMjA4LjQgMjA4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptMTI4IDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdfSxsej1jNixhNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzcXVhcmUtcGFya2luZ1wiLGljb246WzQ0OCw1MTIsWzEyNzM1OSxcInBhcmtpbmdcIl0sXCJmNTQwXCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0xOTIgMjU2aDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnY2NHptNDggNjRIMTkydjMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI4OCAxNjhjMC0yMi4xIDE3LjktNDAgNDAtNDBoNzJjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZ6XCJdfSxpej1hNixvej17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob3VzZS1zaWduYWxcIixpY29uOls1NzYsNTEyLFtdLFwiZTAxMlwiLFwiTTMxNC4zIDguNWMxMi4zLTExLjMgMzEuMi0xMS4zIDQzLjQgMGwyMDggMTkyYzkuNyA4LjkgMTIuOSAyMi45IDguMSAzNS4yUzU1Ny4yIDI1NiA1NDQgMjU2SDUxMlYzNjhjMCAyNi41LTIxLjUgNDgtNDggNDhIMjc4LjFDMjU5LjYgMzUwLjggMjE2LjggMjk1LjkgMTYwIDI2MS43VjI1NmgtOS45Yy0xNi41LTktMzQtMTYuMi01Mi4zLTIxLjZjLTQuMS0xMi0uOC0yNS4zIDguNS0zNGwyMDgtMTkyek0zMDQgMTkyYy04LjggMC0xNiA3LjItMTYgMTZ2NjRjMCA4LjggNy4yIDE2IDE2IDE2aDY0YzguOCAwIDE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDMwNHpNMjQgMjU2YzEyOC4xIDAgMjMyIDEwMy45IDIzMiAyMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMDEuNi04Mi40LTE4NC0xODQtMTg0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em04IDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyek0wIDM3NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGM3NS4xIDAgMTM2IDYwLjkgMTM2IDEzNmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ4LjYtMzkuNC04OC04OC04OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6XCJdfSxzNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiYXJzLXByb2dyZXNzXCIsaWNvbjpbNTEyLDUxMixbXCJ0YXNrcy1hbHRcIl0sXCJmODI4XCIsXCJNNDQ4IDE2MEgzMjBWMTI4SDQ0OHYzMnpNNDggNjRDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NjRjMCAyNi41IDIxLjUgNDggNDggNDhINDY0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjExMmMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNNDQ4IDM1MnYzMkgxOTJWMzUySDQ0OHpNNDggMjg4Yy0yNi41IDAtNDggMjEuNS00OCA0OHY2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzM2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4elwiXX0sbno9czYsSHo9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmF1Y2V0LWRyaXBcIixpY29uOls1MTIsNTEyLFsxMjg2ODhdLFwiZTAwNlwiLFwiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ0bDk2LTEyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDI1NiA4NGwtMzEtMy45LTEtLjEtMSAuMUwxOTIgODQgOTYgOTZDNzguMyA5NiA2NCA4MS43IDY0IDY0czE0LjMtMzIgMzItMzJsOTYgMTJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDk2bDIyLjYtMjIuNmM2LTYgMTQuMS05LjQgMjIuNi05LjRIMTkyVjExNi4ybDMyLTQgMzIgNFYxNjBoMTguN2M4LjUgMCAxNi42IDMuNCAyMi42IDkuNEwzMjAgMTkyaDMyYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQxNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzLTE0LjMtMzItMzItMzJIMzE1LjljLTIwLjIgMjktNTMuOSA0OC05MS45IDQ4cy03MS43LTE5LTkxLjktNDhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIyNHpNNDM2LjggNDIzLjRjMS45LTQuNSA2LjMtNy40IDExLjItNy40czkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ2LTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFsMTguMi00Mi40elwiXX0sZTY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FydC1mbGF0YmVkXCIsaWNvbjpbNjQwLDUxMixbXCJkb2xseS1mbGF0YmVkXCJdLFwiZjQ3NFwiLFwiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRINDhjOC44IDAgMTYgNy4yIDE2IDE2VjM2OGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGgxOC43Yy0xLjggNS0yLjcgMTAuNC0yLjcgMTZjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OGMwLTUuNi0xLTExLTIuNy0xNkg0NTAuN2MtMS44IDUtMi43IDEwLjQtMi43IDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhjMC01LjYtMS0xMS0yLjctMTZINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE0NGMtOC44IDAtMTYtNy4yLTE2LTE2VjgwQzEyOCAzNS44IDkyLjIgMCA0OCAwSDMyek0xOTIgODBWMjcyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDU2MGMyNi41IDAgNDgtMjEuNSA0OC00OFY4MGMwLTI2LjUtMjEuNS00OC00OC00OEg0NjRWMTc2YzAgNS45LTMuMiAxMS4zLTguNSAxNC4xcy0xMS41IDIuNS0xNi40LS44TDQwMCAxNjMuMmwtMzkuMSAyNi4xYy00LjkgMy4zLTExLjIgMy42LTE2LjQgLjhzLTguNS04LjItOC41LTE0LjFWMzJIMjQwYy0yNi41IDAtNDggMjEuNS00OCA0OHpcIl19LHp6PWU2LGY2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJhbi1zbW9raW5nXCIsaWNvbjpbNTEyLDUxMixbMTI4Njg1LFwic21va2luZy1iYW5cIl0sXCJmNTRkXCIsXCJNOTkuNSAxNDQuOEwxNzguNyAyMjRsOTYgOTYgOTIuNSA5Mi41QzMzNS45IDQzNC45IDI5Ny41IDQ0OCAyNTYgNDQ4QzE1MCA0NDggNjQgMzYyIDY0IDI1NmMwLTQxLjUgMTMuMS03OS45IDM1LjUtMTExLjJ6TTMzMy4zIDI4OGwtMzItMzJIMzg0djMySDMzMy4zem0zMiAzMkg0MDBjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMjY5LjNMMTQ0LjggOTkuNUMxNzYuMSA3Ny4xIDIxNC41IDY0IDI1NiA2NGMxMDYgMCAxOTIgODYgMTkyIDE5MmMwIDQxLjUtMTMuMSA3OS45LTM1LjUgMTExLjJMMzY1LjMgMzIwek0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0yNzIgOTZjLTguOCAwLTE2IDcuMi0xNiAxNmMwIDI2LjUgMjEuNSA0OCA0OCA0OGgzMmM4LjggMCAxNiA3LjIgMTYgMTZzNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmMwLTI2LjUtMjEuNS00OC00OC00OEgzMDRjLTguOCAwLTE2LTcuMi0xNi0xNnMtNy4yLTE2LTE2LTE2ek0yMjkuNSAzMjBsLTk2LTk2SDExMmMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNkgyMjkuNXpcIl19LFZ6PWY2LG16PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRlcm1pbmFsXCIsaWNvbjpbNjQwLDUxMixbXSxcImYxMjBcIixcIk00MS40IDg2LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTkyIDE5MmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTkyIDE5MmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjEwLjcgMjU2IDQxLjQgODYuNnpNMjg4IDQxNkg1NzZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXX0sdno9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibW9iaWxlLWJ1dHRvblwiLGljb246WzM4NCw1MTIsW10sXCJmMTBiXCIsXCJNODAgMEM0NC43IDAgMTYgMjguNyAxNiA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzA0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDgwek0xOTIgNDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdfSxNej17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob3VzZS1tZWRpY2FsLWZsYWdcIixpY29uOls2NDAsNTEyLFtdLFwiZTUxNFwiLFwiTTQ4MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMySDYyNGM4LjggMCAxNiA3LjIgMTYgMTZWMTc2YzAgOC44LTcuMiAxNi0xNiAxNkg1MTJWNTEySDQ0OFYxOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTI3Ni44IDM5LjdMNDE2IDE1OVY1MTJoMWwtLjIgMEg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjg4SDMyYy0xMy40IDAtMjUuNC04LjMtMzAtMjAuOXMtMS0yNi43IDkuMi0zNS40bDIyNC0xOTJjMTItMTAuMyAyOS43LTEwLjMgNDEuNyAwek0yMjQgMjA4djQ4SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmg0OHY0OGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjMyMGg0OGM4LjggMCAxNi03LjIgMTYtMTZWMjcyYzAtOC44LTcuMi0xNi0xNi0xNkgyODhWMjA4YzAtOC44LTcuMi0xNi0xNi0xNkgyNDBjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl19LHI2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJhc2tldC1zaG9wcGluZ1wiLGljb246WzU3Niw1MTIsW1wic2hvcHBpbmctYmFza2V0XCJdLFwiZjI5MVwiLFwiTTI1My4zIDM1LjFjNi4xLTExLjggMS41LTI2LjMtMTAuMi0zMi40cy0yNi4zLTEuNS0zMi40IDEwLjJMMTE3LjYgMTkySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyTDgzLjkgNDYzLjVDOTEgNDkyIDExNi42IDUxMiAxNDYgNTEySDQzMGMyOS40IDAgNTUtMjAgNjIuMS00OC41TDU0NCAyNTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDU4LjRMMzY1LjMgMTIuOUMzNTkuMiAxLjIgMzQ0LjctMy40IDMzMi45IDIuN3MtMTYuMyAyMC42LTEwLjIgMzIuNEw0MDQuMyAxOTJIMTcxLjdMMjUzLjMgMzUuMXpNMTkyIDMwNHY5NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYzMDRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptOTYtMTZjOC44IDAgMTYgNy4yIDE2IDE2djk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMwNGMwLTguOCA3LjItMTYgMTYtMTZ6bTEyOCAxNnY5NmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYzMDRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl19LHR6PXI2LGh6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRhcGVcIixpY29uOls1NzYsNTEyLFtdLFwiZjRkYlwiLFwiTTM4MC44IDQxNmM0MS41LTQwLjcgNjcuMi05Ny4zIDY3LjItMTYwQzQ0OCAxMzIuMyAzNDcuNyAzMiAyMjQgMzJTMCAxMzIuMyAwIDI1NlMxMDAuMyA0ODAgMjI0IDQ4MEg1NDRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzgwLjh6TTIyNCAzNTJjLTUzIDAtOTYtNDMtOTYtOTZzNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2em02NC05NmMwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6XCJdfSxsNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJidXMtc2ltcGxlXCIsaWNvbjpbNDQ4LDUxMixbXCJidXMtYWx0XCJdLFwiZjU1ZVwiLFwiTTIyNCAwQzM0OC44IDAgNDQ4IDM1LjIgNDQ4IDgwVjk2IDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0OEgxMjh2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjk2IDgwQzAgMzUuMiA5OS4yIDAgMjI0IDB6TTY0IDEyOFYyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTgwIDQwMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0yODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyelwiXX0sQ3o9bDYsTHo9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZXllXCIsaWNvbjpbNTc2LDUxMixbMTI4MDY1XSxcImYwNmVcIixcIk0yODggMzJjLTgwLjggMC0xNDUuNSAzNi44LTE5Mi42IDgwLjZDNDguNiAxNTYgMTcuMyAyMDggMi41IDI0My43Yy0zLjMgNy45LTMuMyAxNi43IDAgMjQuNkMxNy4zIDMwNCA0OC42IDM1NiA5NS40IDM5OS40QzE0Mi41IDQ0My4yIDIwNy4yIDQ4MCAyODggNDgwczE0NS41LTM2LjggMTkyLjYtODAuNmM0Ni44LTQzLjUgNzguMS05NS40IDkzLTEzMS4xYzMuMy03LjkgMy4zLTE2LjcgMC0yNC42Yy0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xQzQzMy41IDY4LjggMzY4LjggMzIgMjg4IDMyek00MzIgMjU2YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHpNMjg4IDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NGMtMTEuNSAwLTIyLjMtMy0zMS42LTguNGMtLjIgMi44LS40IDUuNS0uNCA4LjRjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZjLTIuOCAwLTUuNiAuMS04LjQgLjRjNS4zIDkuMyA4LjQgMjAuMSA4LjQgMzEuNnpcIl19LGk2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2Utc2FkLWNyeVwiLGljb246WzUxMiw1MTIsWzEyODU1NyxcInNhZC1jcnlcIl0sXCJmNWIzXCIsXCJNMzUyIDQ5My40Yy0yOS42IDEyLTYyLjEgMTguNi05NiAxOC42cy02Ni40LTYuNi05Ni0xOC42VjI4OGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNlY0NzcuOEM1MS41IDQzMy41IDAgMzUwLjggMCAyNTZDMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2YzAgOTQuOC01MS41IDE3Ny41LTEyOCAyMjEuOFYyODhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWNDkzLjR6TTE5NS4yIDIzMy42YzUuMyA3LjEgMTUuMyA4LjUgMjIuNCAzLjJzOC41LTE1LjMgMy4yLTIyLjRjLTMwLjQtNDAuNS05MS4yLTQwLjUtMTIxLjYgMGMtNS4zIDcuMS0zLjkgMTcuMSAzLjIgMjIuNHMxNy4xIDMuOSAyMi40LTMuMmMxNy42LTIzLjUgNTIuOC0yMy41IDcwLjQgMHptMTIxLjYgMGMxNy42LTIzLjUgNTIuOC0yMy41IDcwLjQgMGM1LjMgNy4xIDE1LjMgOC41IDIyLjQgMy4yczguNS0xNS4zIDMuMi0yMi40Yy0zMC40LTQwLjUtOTEuMi00MC41LTEyMS42IDBjLTUuMyA3LjEtMy45IDE3LjEgMy4yIDIyLjRzMTcuMSAzLjkgMjIuNC0zLjJ6TTIwOCAzMzZ2MzJjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OFYzMzZjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6XCJdfSxwej1pNixkej17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhdWRpby1kZXNjcmlwdGlvblwiLGljb246WzU3Niw1MTIsW10sXCJmMjllXCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0yMTMuNSAxNzMuM2w3MiAxNDRjNS45IDExLjkgMS4xIDI2LjMtMTAuNyAzMi4ycy0yNi4zIDEuMS0zMi4yLTEwLjdsLTkuNC0xOC45SDE1MC45bC05LjQgMTguOWMtNS45IDExLjktMjAuMyAxNi43LTMyLjIgMTAuN3MtMTYuNy0yMC4zLTEwLjctMzIuMmw3Mi0xNDRjNC4xLTguMSAxMi40LTEzLjMgMjEuNS0xMy4zczE3LjQgNS4xIDIxLjUgMTMuM3ptLS40IDEwNi42TDE5MiAyMzcuN2wtMjEuMSA0Mi4yaDQyLjJ6TTMwNCAxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRoNTZjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZIMzI4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFYxODR6bTQ4IDI0djk2aDMyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4SDM1MnpcIl19LHV6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1taWxpdGFyeS10by1wZXJzb25cIixpY29uOls1MTIsNTEyLFtdLFwiZTU0Y1wiLFwiTTcxIDEyLjVjLTguNiAxLTE1IDguMi0xNSAxNi44YzAgOS4zIDcuNSAxNi44IDE2LjcgMTYuOUgxODQuMWM4LjgtLjEgMTUuOS03LjIgMTUuOS0xNlYxNmMwLTkuNS04LjMtMTctMTcuOC0xNS45TDcxIDEyLjV6TTE4OS41IDc4LjFINjYuNUM2NC45IDgzLjggNjQgODkuOCA2NCA5NmMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0YzAtNi4yLS45LTEyLjItMi41LTE3Ljl6TTMyIDI1NnYzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMkgxOTJjMS44IDAgMy41LS4xIDUuMi0uNEw1MyAyMDguNkM0MC4xIDIyMC4zIDMyIDIzNy4yIDMyIDI1NnptMTkwLjIgNDIuNWMxLjEtMy4zIDEuOC02LjggMS44LTEwLjVWMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDk2Yy0zLjcgMC03LjQgLjMtMTAuOSAuOUwyMjIuMiAyOTguNXpNMzg0IDE2MGMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0em0tMzIgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMySDQ0OGMxNy43IDAgMzItMTQuMyAzMi0zMlYyNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzUyek0yMTUuOCA0NTAuMWM1LjItNC42IDguMi0xMS4xIDguMi0xOC4xcy0zLTEzLjUtOC4yLTE4LjFsLTY0LTU2Yy03LjEtNi4yLTE3LjEtNy43LTI1LjctMy44UzExMiAzNjYuNiAxMTIgMzc2djMybC04OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDg4IDB2MzJjMCA5LjQgNS41IDE4IDE0LjEgMjEuOXMxOC42IDIuNCAyNS43LTMuOGw2NC01NnpNMjg4IDQzMS45YzAgNi45IDMgMTMuNSA4LjEgMTguMWw2NCA1Ni40YzcuMSA2LjIgMTcuMSA3LjggMjUuNyAzLjlzMTQuMS0xMi40IDE0LjEtMjEuOWwwLTMyLjQgODggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODggMCAwLTMyYzAtOS40LTUuNS0xOC0xNC4xLTIxLjlzLTE4LjYtMi40LTI1LjcgMy44bC02NCA1NmMtNS4yIDQuNS04LjIgMTEuMS04LjIgMTh6XCJdfSx4ej17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLXNoaWVsZFwiLGljb246WzU3Niw1MTIsW10sXCJlNGYwXCIsXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2NDdsLTkyLjggMzcuMWMtMjEuMyA4LjUtMzUuMiAyOS4xLTM1LjIgNTJjMCA1Ni42IDE4LjkgMTQ4IDk0LjIgMjA4LjNjLTkgNC44LTE5LjMgNy42LTMwLjIgNy42SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptMzg0IDY0SDI1NlYwTDM4NCAxMjh6bTM5LjEgOTcuN2M1LjctMi4zIDEyLjEtMi4zIDE3LjggMGwxMjAgNDhDNTcwIDI3Ny40IDU3NiAyODYuMiA1NzYgMjk2YzAgNjMuMy0yNS45IDE2OC44LTEzNC44IDIxNC4yYy01LjkgMi41LTEyLjYgMi41LTE4LjUgMEMzMTMuOSA0NjQuOCAyODggMzU5LjMgMjg4IDI5NmMwLTkuOCA2LTE4LjYgMTUuMS0yMi4zbDEyMC00OHpNNTI3LjQgMzEyTDQzMiAyNzMuOFY0NjEuN2M2OC4yLTMzIDkxLjUtOTkgOTUuNC0xNDkuN3pcIl19LGd6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInVzZXItc2xhc2hcIixpY29uOls2NDAsNTEyLFtdLFwiZjUwNlwiLFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdMMzUzLjMgMjUxLjZDNDA3LjkgMjM3IDQ0OCAxODcuMiA0NDggMTI4QzQ0OCA1Ny4zIDM5MC43IDAgMzIwIDBDMjUwLjIgMCAxOTMuNSA1NS44IDE5MiAxMjUuMkwzOC44IDUuMXpNMjY0LjMgMzA0LjNDMTcwLjUgMzA5LjQgOTYgMzg3LjIgOTYgNDgyLjNjMCAxNi40IDEzLjMgMjkuNyAyOS43IDI5LjdINTE0LjNjMy45IDAgNy42LS43IDExLTIuMWwtMjYxLTIwNS42elwiXX0sU3o9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVuXCIsaWNvbjpbNTEyLDUxMixbMTI4Mzk0XSxcImYzMDRcIixcIk0zNjIuNyAxOS4zTDMxNC4zIDY3LjcgNDQ0LjMgMTk3LjdsNDguNC00OC40YzI1LTI1IDI1LTY1LjUgMC05MC41TDQ1My4zIDE5LjNjLTI1LTI1LTY1LjUtMjUtOTAuNSAwem0tNzEgNzFMNTguNiAzMjMuNWMtMTAuNCAxMC40LTE4IDIzLjMtMjIuMiAzNy40TDEgNDgxLjJDLTEuNSA0ODkuNyAuOCA0OTguOCA3IDUwNXMxNS4zIDguNSAyMy43IDYuMWwxMjAuMy0zNS40YzE0LjEtNC4yIDI3LTExLjggMzcuNC0yMi4yTDQyMS43IDIyMC4zIDI5MS43IDkwLjN6XCJdfSxOej17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0b3dlci1vYnNlcnZhdGlvblwiLGljb246WzUxMiw1MTIsW10sXCJlNTg2XCIsXCJNMjQxLjcgMy40YzktNC41IDE5LjYtNC41IDI4LjYgMGwxNjAgODBjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOUM0MzkgMTM3LjUgNDI3LjcgMTQ0IDQxNiAxNDR2ODBjMCAxNy43LTE0LjMgMzItMzIgMzJoLTQuOWwzMiAxOTJINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NC41Yy0uNCAwLS44IDAtMS4xIDBIMTI4LjZjLS40IDAtLjggMC0xLjEgMEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg2OC45bDMyLTE5MkgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjE0NGMtMTEuNyAwLTIzLTYuNS0yOC42LTE3LjdjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlsMTYwLTgwek0zMTQuNSA0NDhMMjU2IDM5OS4yIDE5Ny41IDQ0OGgxMTd6TTE5Ny44IDI1NmwtNC43IDI4LjNMMjU2IDMzNi44bDYyLjktNTIuNUwzMTQuMiAyNTZIMTk3Ljh6bS0xMy45IDgzLjJsLTExLjIgNjdMMjE4LjUgMzY4bC0zNC42LTI4Ljh6TTI5My41IDM2OGw0NS44IDM4LjEtMTEuMi02N0wyOTMuNSAzNjh6TTE3NiAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZIMzM2YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE3NnpcIl19LHd6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpbGUtY29kZVwiLGljb246WzM4NCw1MTIsW10sXCJmMWM5XCIsXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwSDY0ek0yNTYgMFYxMjhIMzg0TDI1NiAwek0xNTMgMjg5bC0zMSAzMSAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcxIDMzN2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNDgtNDhjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45ek0yNjUgMjU1bDQ4IDQ4YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwelwiXX0sVT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzaWduYWxcIixpY29uOls1NzYsNTEyLFsxMjgyNDYsXCJzaWduYWwtNVwiLFwic2lnbmFsLXBlcmZlY3RcIl0sXCJmMDEyXCIsXCJNNTQ0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek00MTYgOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzIwIDIyNFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTE2MCAyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNjQgNDE2djY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyelwiXX0sa3o9VSxiej1VLEF6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJ1c1wiLGljb246WzUxMiw1MTIsWzEyODY1M10sXCJmMjA3XCIsXCJNMjU2IDBDMzkwLjQgMCA0ODAgMzUuMiA0ODAgODBWOTZsMCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0OEgxNjB2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJoMFY5NmgwVjgwQzMyIDM1LjIgMTIxLjYgMCAyNTYgMHpNOTYgMTYwdjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDI0MFYxMjhIMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMjcyIDI4OEgzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDI3MlYyODh6TTExMiA0MDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpNMzUyIDgwYzAtOC44LTcuMi0xNi0xNi0xNkgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZIMzM2YzguOCAwIDE2LTcuMiAxNi0xNnpcIl19LEJ6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhlYXJ0LWNpcmNsZS14bWFya1wiLGljb246WzU3Niw1MTIsW10sXCJlNTAxXCIsXCJNNDcuNiAzMDAuNEwyMjguMyA0NjkuMWM3LjUgNyAxNy40IDEwLjkgMjcuNyAxMC45czIwLjItMy45IDI3LjctMTAuOWwyLjYtMi40QzI2Ny4yIDQzOC42IDI1NiA0MDQuNiAyNTYgMzY4YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2YzI4LjMgMCA1NSA2LjcgNzguNyAxOC41Yy45LTYuNSAxLjMtMTMgMS4zLTE5LjZ2LTUuOGMwLTY5LjktNTAuNS0xMjkuNS0xMTkuNC0xNDFDMzQ3IDM2LjUgMzAwLjYgNTEuNCAyNjggODRMMjU2IDk2IDI0NCA4NGMtMzIuNi0zMi42LTc5LTQ3LjUtMTI0LjYtMzkuOUM1MC41IDU1LjYgMCAxMTUuMiAwIDE4NS4xdjUuOGMwIDQxLjUgMTcuMiA4MS4yIDQ3LjYgMTA5LjV6TTQzMiA1MTJjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRzLTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHptNTkuMy0xODAuN0w0NTQuNiAzNjhsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBMNDMyIDM5MC42bC0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZMNDA5LjQgMzY4bC0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEw0MzIgMzQ1LjRsMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpcIl19LG82PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXNlLWNoaW1uZXlcIixpY29uOls1NzYsNTEyLFs2MzQ5OSxcImhvbWUtbGdcIl0sXCJlM2FmXCIsXCJNNTQzLjggMjg3LjZjMTcgMCAzMi0xNCAzMi0zMi4xYzEtOS0zLTE3LTExLTI0TDUxMiAxODVWNjRjMC0xNy43LTE0LjMtMzItMzItMzJINDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnYzNi43TDMwOS41IDdjLTYtNS0xNC03LTIxLTdzLTE1IDEtMjIgOEwxMCAyMzEuNWMtNyA3LTEwIDE1LTEwIDI0YzAgMTggMTQgMzIuMSAzMiAzMi4xaDMydjY5LjdjLS4xIC45LS4xIDEuOC0uMSAyLjhWNDcyYzAgMjIuMSAxNy45IDQwIDQwIDQwaDE2YzEuMiAwIDIuNC0uMSAzLjYtLjJjMS41IC4xIDMgLjIgNC41IC4ySDE2MGgyNGMyMi4xIDAgNDAtMTcuOSA0MC00MFY0NDggMzg0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0IDI0YzAgMjIuMSAxNy45IDQwIDQwIDQwaDI0IDMyLjVjMS40IDAgMi44IDAgNC4yLS4xYzEuMSAuMSAyLjIgLjEgMy4zIC4xaDE2YzIyLjEgMCA0MC0xNy45IDQwLTQwVjQ1NS44Yy4zLTIuNiAuNS01LjMgLjUtOC4xbC0uNy0xNjAuMmgzMnpcIl19LFR6PW82LHl6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndpbmRvdy1tYXhpbWl6ZVwiLGljb246WzUxMiw1MTIsWzEyODQ3MF0sXCJmMmQwXCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek05NiA5Nkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdfSxuNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmYWNlLWZyb3duXCIsaWNvbjpbNTEyLDUxMixbOTc4NSxcImZyb3duXCJdLFwiZjExOVwiLFwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJ6TTE1OS4zIDM4OC43Yy0yLjYgOC40LTExLjYgMTMuMi0yMCAxMC41cy0xMy4yLTExLjYtMTAuNS0yMEMxNDUuMiAzMjYuMSAxOTYuMyAyODggMjU2IDI4OHMxMTAuOCAzOC4xIDEyNy4zIDkxLjNjMi42IDguNC0yLjEgMTcuNC0xMC41IDIwcy0xNy40LTIuMS0yMC0xMC41QzM0MC41IDM0OS40IDMwMi4xIDMyMCAyNTYgMzIwcy04NC41IDI5LjQtOTYuNyA2OC43ek0yMDguNCAyMDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xMjggMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LFB6PW42LEZ6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInByZXNjcmlwdGlvblwiLGljb246WzQ0OCw1MTIsW10sXCJmNWIxXCIsXCJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJWMTkydjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjI0aDUwLjdsMTI4IDEyOEwxMzcuNCA0NTcuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyODggMzk3LjMgMzkzLjQgNTAyLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzMzMuMyAzNTIgNDM4LjYgMjQ2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjg4IDMwNi43bC04NS44LTg1LjhDMjUxLjQgMjA5LjEgMjg4IDE2NC44IDI4OCAxMTJDMjg4IDUwLjEgMjM3LjkgMCAxNzYgMEgzMnpNMTc2IDE2MEg2NFY2NEgxNzZjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6XCJdfSxINj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzaG9wXCIsaWNvbjpbNjQwLDUxMixbXCJzdG9yZS1hbHRcIl0sXCJmNTRmXCIsXCJNMzYuOCAxOTJINjAzLjJjMjAuMyAwIDM2LjgtMTYuNSAzNi44LTM2LjhjMC03LjMtMi4yLTE0LjQtNi4yLTIwLjRMNTU4LjIgMjEuNEM1NDkuMyA4IDUzNC40IDAgNTE4LjMgMEgxMjEuN2MtMTYgMC0zMSA4LTM5LjkgMjEuNEw2LjIgMTM0LjdjLTQgNi4xLTYuMiAxMy4yLTYuMiAyMC40QzAgMTc1LjUgMTYuNSAxOTIgMzYuOCAxOTJ6TTY0IDIyNFYzODR2ODBjMCAyNi41IDIxLjUgNDggNDggNDhIMzM2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjM4NCAyMjRIMzIwVjM4NEgxMjhWMjI0SDY0em00NDggMFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMjRINTEyelwiXX0sRHo9SDYsejY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmxvcHB5LWRpc2tcIixpY29uOls0NDgsNTEyLFsxMjgxOTAsMTI4NDI2LFwic2F2ZVwiXSxcImYwYzdcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTczLjNjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzUyIDUwLjdDMzQwIDM4LjcgMzIzLjcgMzIgMzA2LjcgMzJINjR6bTAgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxMjh6TTIyNCA0MTZjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHpcIl19LFJ6PXo2LFV6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZpaGFyYVwiLGljb246WzY0MCw1MTIsW10sXCJmNmE3XCIsXCJNMjgxIDIyTDMwNS44IDQuN2MxLjMtLjkgMi43LTEuOCA0LjEtMi40QzMxMy4xIC43IDMxNi42IDAgMzIwIDBzNi45IC43IDEwLjEgMi4yYzEuNCAuNyAyLjggMS41IDQuMSAyLjRMMzU5IDIyQzM5MyA0NS44IDQzMC44IDYzLjUgNDcwLjggNzQuNGwyMyA2LjNjMS44IC41IDMuNiAxLjEgNS4yIDJjMy4yIDEuNyA1LjkgNCA4LjEgNi44YzMuOCA0LjkgNS42IDExLjMgNC43IDE3LjhjLS40IDIuOC0xLjIgNS40LTIuNSA3LjhjLTEuNyAzLjItNCA1LjktNi44IDguMWMtNC4zIDMuMi05LjYgNS4xLTE1LjEgNC45SDQ4MHY1Ni4xbDYuNCA1LjEgNS4yIDQuMWMyMS4xIDE2LjcgNDUgMjkuNiA3MC41IDM4LjFsMjguOSA5LjZjMS42IC41IDMuMiAxLjIgNC42IDJjMy4xIDEuNyA1LjggNC4xIDcuOCA2LjlzMy41IDYuMSA0LjEgOS42Yy41IDIuNyAuNiA1LjUgLjEgOC4zcy0xLjQgNS40LTIuNyA3LjhjLTEuNyAzLjEtNC4xIDUuOC02LjkgNy44cy02LjEgMy41LTkuNiA0LjFjLTEuNiAuMy0zLjMgLjQtNSAuNEg1NDR2NjUuOWMyMC41IDIyLjggNDcuNCAzOS4yIDc3LjQgNDYuN0M2MzIgNDAzIDY0MCA0MTIuNiA2NDAgNDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0SDU3NnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDhIMzUydjMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OEgxMjh2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4SDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNGMwLTExLjQgOC0yMSAxOC42LTIzLjRjMzAtNy42IDU2LjktMjMuOSA3Ny40LTQ2LjdWMjg4SDU2LjZjLTEuNyAwLTMuNC0uMS01LS40Yy0zLjUtLjctNi44LTIuMS05LjYtNC4xcy01LjItNC43LTctNy44Yy0xLjMtMi40LTIuMy01LTIuNy03LjhzLS40LTUuNiAuMS04LjNjLjctMy41IDIuMS02LjggNC4xLTkuNnM0LjctNS4yIDcuOC02LjljMS40LS44IDMtMS41IDQuNi0ybDI4LjktOS42YzI1LjUtOC41IDQ5LjQtMjEuNCA3MC41LTM4LjFsNS4yLTQuMSA2LjQtNS4xVjE3NiAxMjhoLTcuNWMtNS41IC4xLTEwLjgtMS43LTE1LjEtNC45Yy0yLjgtMi4xLTUuMS00LjgtNi44LTguMWMtMS4yLTIuNC0yLjEtNS0yLjUtNy44Yy0uOS02LjUgLjktMTIuOCA0LjctMTcuOGMyLjEtMi44IDQuOC01LjEgOC4xLTYuOGMxLjYtLjggMy40LTEuNSA1LjItMmwyMy02LjNDMjA5LjIgNjMuNSAyNDcgNDUuOCAyODEgMjJ6TTQxNiAxMjhIMzIwIDIyNHY2NGg3MiA0OCA3MlYxMjh6TTE2MCAyODh2NjRIMjk2aDI0IDI0SDQ4MFYyODhIMzQ0IDMyMGgwSDI5NiAxNjB6XCJdfSxWNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzY2FsZS11bmJhbGFuY2VkXCIsaWNvbjpbNjQwLDUxMixbXCJiYWxhbmNlLXNjYWxlLWxlZnRcIl0sXCJmNTE1XCIsXCJNNTIyLjEgNjIuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41UzUxOC42LTMuOSA1MDEuOSAxLjZsLTExMyAzNy43QzM3NSAxNS44IDM0OS4zIDAgMzIwIDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwYzAgMyAuMiA1LjkgLjUgOC44TDExNy45IDEyOS42Yy0xNi44IDUuNi0yNS44IDIzLjctMjAuMiA0MC41czIzLjcgMjUuOCA0MC41IDIwLjJsMTM1LjUtNDUuMmM0LjUgMy4yIDkuMyA1LjkgMTQuNCA4LjJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDUxMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNTJWMTUzLjNjMjEtOS4yIDM3LjItMjcgNDQuMi00OWwxMjUuOS00MnptLTM5Ni4zIDIxMWMuNC0uOCAxLjMtMS4zIDIuMi0xLjNzMS43IC41IDIuMiAxLjNMMjA0LjkgNDE2SDUxLjFsNzQuNy0xNDIuN3pNMTI4IDIyNGMtMTguOCAwLTM2IDEwLjQtNDQuNyAyN0w1LjUgMzk5LjVjLTMuMSA1LjgtNi4xIDE0LTUuNSAyMy44Yy43IDEyLjEgNC44IDM1LjIgMjQuOCA1NS4xQzQ1LjEgNDk4LjYgNzcuOCA1MTIgMTI4IDUxMnM4Mi45LTEzLjQgMTAzLjItMzMuNWMyMC0yMCAyNC4yLTQzIDI0LjgtNTUuMWMuNi05LjgtMi41LTE4LTUuNS0yMy44TDE3Mi43IDI1MWMtOC43LTE2LjYtMjUuOS0yNy00NC43LTI3em0zODQtODBjLjkgMCAxLjcgLjUgMi4yIDEuM0w1ODguOSAyODhINDM1LjFsNzQuNy0xNDIuN2MuNC0uOCAxLjMtMS4zIDIuMi0xLjN6bS00NC43LTIxTDM4OS41IDI3MS41Yy0zLjEgNS44LTYuMSAxNC01LjUgMjMuOGMuNyAxMi4xIDQuOCAzNS4yIDI0LjggNTUuMUM0MjkuMSAzNzAuNiA0NjEuOCAzODQgNTEyIDM4NHM4Mi45LTEzLjQgMTAzLjItMzMuNWMyMC0yMCAyNC4yLTQzIDI0LjgtNTUuMWMuNi05LjgtMi41LTE4LTUuNS0yMy44TDU1Ni43IDEyM0M1NDggMTA2LjQgNTMwLjggOTYgNTEyIDk2cy0zNiAxMC40LTQ0LjcgMjd6XCJdfSxxej1WNixtNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzb3J0LXVwXCIsaWNvbjpbMzIwLDUxMixbXCJzb3J0LWFzY1wiXSxcImYwZGVcIixcIk0xODIuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTI4IDEyOGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlzMTYuNiAxOS44IDI5LjYgMTkuOEgyODhjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtMTI4LTEyOHpcIl19LEd6PW02LHY2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNvbW1lbnQtZG90c1wiLGljb246WzUxMiw1MTIsWzEyODE3Miw2MjA3NSxcImNvbW1lbnRpbmdcIl0sXCJmNGFkXCIsXCJNMjU2IDQ0OGMxNDEuNCAwIDI1Ni05My4xIDI1Ni0yMDhTMzk3LjQgMzIgMjU2IDMyUzAgMTI1LjEgMCAyNDBjMCA0NS4xIDE3LjcgODYuOCA0Ny43IDEyMC45Yy0xLjkgMjQuNS0xMS40IDQ2LjMtMjEuNCA2Mi45Yy01LjUgOS4yLTExLjEgMTYuNi0xNS4yIDIxLjZjLTIuMSAyLjUtMy43IDQuNC00LjkgNS43Yy0uNiAuNi0xIDEuMS0xLjMgMS40bC0uMyAuMyAwIDAgMCAwIDAgMCAwIDBjLTQuNiA0LjYtNS45IDExLjQtMy40IDE3LjRjMi41IDYgOC4zIDkuOSAxNC44IDkuOWMyOC43IDAgNTcuNi04LjkgODEuNi0xOS4zYzIyLjktMTAgNDIuNC0yMS45IDU0LjMtMzAuNmMzMS44IDExLjUgNjcgMTcuOSAxMDQuMSAxNy45ek0xMjggMjcyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTE2MC0zMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdfSxXej12NixFej17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwbGFudC13aWx0XCIsaWNvbjpbNTEyLDUxMixbXSxcImU1YWFcIixcIk0yODggMTIwYzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZ2MTNjLTI5LjMgMTAtNDggMzQuNS00OCA3MC4xYzAgMjcuOSAyNS4zIDc0LjggNjYgMTExLjZjMy44IDMuNSA4LjkgNS4zIDE0IDUuM3MxMC4yLTEuOCAxNC01LjNjNDAuNy0zNi44IDY2LTgzLjcgNjYtMTExLjZjMC0zNS42LTE4LjctNjAuMi00OC03MC4xVjEyMEM0NjQgNTMuNyA0MTAuMyAwIDM0NCAwUzIyNCA1My43IDIyNCAxMjB2MjEuOEMyMDcuMyAxMzMgMTg4LjIgMTI4IDE2OCAxMjhjLTY2LjMgMC0xMjAgNTMuNy0xMjAgMTIwdjEzYy0yOS4zIDEwLTQ4IDM0LjUtNDggNzAuMUMwIDM1OSAyNS4zIDQwNS45IDY2IDQ0Mi43YzMuOCAzLjUgOC45IDUuMyAxNCA1LjNzMTAuMi0xLjggMTQtNS4zYzQwLjctMzYuOCA2Ni04My43IDY2LTExMS42YzAtMzUuNi0xOC43LTYwLjItNDgtNzAuMVYyNDhjMC0zMC45IDI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NnYzMlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyODAgMjQ4IDEyMHpcIl19LEl6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRpYW1vbmRcIixpY29uOls1MTIsNTEyLFs5ODMwXSxcImYyMTlcIixcIk0yODQuMyAxMS43Yy0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMGwtMjE2IDIxNmMtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZsMjE2IDIxNmMxNS42IDE1LjYgNDAuOSAxNS42IDU2LjYgMGwyMTYtMjE2YzE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42bC0yMTYtMjE2elwiXX0sTTY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1ncmluLXNxdWludFwiLGljb246WzUxMiw1MTIsWzEyODUxOCxcImdyaW4tc3F1aW50XCJdLFwiZjU4NVwiLFwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJ6TTM4My44IDMxNy44YzEyLjMtMy43IDI0LjMgNyAxOS4yIDE4LjdjLTI0LjUgNTYuOS04MS4xIDk2LjctMTQ3IDk2LjdzLTEyMi41LTM5LjgtMTQ3LTk2LjdjLTUuMS0xMS44IDYuOS0yMi40IDE5LjItMTguN0MxNjYuNyAzMjkuNCAyMTAuMSAzMzYgMjU2IDMzNnM4OS4zLTYuNiAxMjcuOC0xOC4yek0xMzMuNSAxNDYuN2w4OS45IDQ3LjljMTAuNyA1LjcgMTAuNyAyMS4xIDAgMjYuOGwtODkuOSA0Ny45Yy03LjkgNC4yLTE3LjUtMS41LTE3LjUtMTAuNWMwLTIuOCAxLTUuNSAyLjgtNy42bDM2LTQzLjItMzYtNDMuMmMtMS44LTIuMS0yLjgtNC44LTIuOC03LjZjMC05IDkuNi0xNC43IDE3LjUtMTAuNXpNMzk2IDE1Ny4xYzAgMi44LTEgNS41LTIuOCA3LjZsLTM2IDQzLjIgMzYgNDMuMmMxLjggMi4xIDIuOCA0LjggMi44IDcuNmMwIDktOS42IDE0LjctMTcuNSAxMC41bC04OS45LTQ3LjljLTEwLjctNS43LTEwLjctMjEuMSAwLTI2LjhsODkuOS00Ny45YzcuOS00LjIgMTcuNSAxLjUgMTcuNSAxMC41elwiXX0sT3o9TTYsdDY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZC1ob2xkaW5nLWRvbGxhclwiLGljb246WzU3Niw1MTIsW1wiaGFuZC1ob2xkaW5nLXVzZFwiXSxcImY0YzBcIixcIk0zMTIgMjRWMzQuNWM2LjQgMS4yIDEyLjYgMi43IDE4LjIgNC4yYzEyLjggMy40IDIwLjQgMTYuNiAxNyAyOS40cy0xNi42IDIwLjQtMjkuNCAxN2MtMTAuOS0yLjktMjEuMS00LjktMzAuMi01Yy03LjMtLjEtMTQuNyAxLjctMTkuNCA0LjRjLTIuMSAxLjMtMy4xIDIuNC0zLjUgM2MtLjMgLjUtLjcgMS4yLS43IDIuOGMwIC4zIDAgLjUgMCAuNmMuMiAuMiAuOSAxLjIgMy4zIDIuNmM1LjggMy41IDE0LjQgNi4yIDI3LjQgMTAuMWwuOSAuMyAwIDBjMTEuMSAzLjMgMjUuOSA3LjggMzcuOSAxNS4zYzEzLjcgOC42IDI2LjEgMjIuOSAyNi40IDQ0LjljLjMgMjIuNS0xMS40IDM4LjktMjYuNyA0OC41Yy02LjcgNC4xLTEzLjkgNy0yMS4zIDguOFYyMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjIwLjZjLTkuNS0yLjMtMTguMi01LjMtMjUuNi03LjhjLTIuMS0uNy00LjEtMS40LTYtMmMtMTIuNi00LjItMTkuNC0xNy44LTE1LjItMzAuNHMxNy44LTE5LjQgMzAuNC0xNS4yYzIuNiAuOSA1IDEuNyA3LjMgMi41YzEzLjYgNC42IDIzLjQgNy45IDMzLjkgOC4zYzggLjMgMTUuMS0xLjYgMTkuMi00LjFjMS45LTEuMiAyLjgtMi4yIDMuMi0yLjljLjQtLjYgLjktMS44IC44LTQuMWwwLS4yYzAtMSAwLTIuMS00LTQuNmMtNS43LTMuNi0xNC4zLTYuNC0yNy4xLTEwLjNsLTEuOS0uNmMtMTAuOC0zLjItMjUtNy41LTM2LjQtMTQuNGMtMTMuNS04LjEtMjYuNS0yMi0yNi42LTQ0LjFjLS4xLTIyLjkgMTIuOS0zOC42IDI3LjctNDcuNGM2LjQtMy44IDEzLjMtNi40IDIwLjItOC4yVjI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTU2OC4yIDMzNi4zYzEzLjEgMTcuOCA5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0ODUuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVIMTkyIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJINjguOGw0NC45LTM2YzIyLjctMTguMiA1MC45LTI4IDgwLTI4SDI3MmgxNiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyODggMjcyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDM5Mi42bDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41ek0xOTMuNiAzODRsMCAwLS45IDBjLjMgMCAuNiAwIC45IDB6XCJdfSxYej10NixRej17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiYWN0ZXJpdW1cIixpY29uOls1NzYsNTEyLFtdLFwiZTA1YVwiLFwiTTQ1NS4xIDMwLjZjMy42LTEyLjctMy43LTI2LTE2LjUtMjkuN3MtMjYgMy43LTI5LjcgMTYuNWwtNC4yIDE0LjdjLTkuOC0uNC0xOS45IC41LTI5LjkgMi44Yy0xMi4xIDIuOC0yMy43IDUuOS0zNC45IDkuNGwtNS45LTEzLjdjLTUuMi0xMi4yLTE5LjMtMTcuOC0zMS41LTEyLjZzLTE3LjggMTkuMy0xMi42IDMxLjVsNC45IDExLjNjLTIyIDkuNC00MiAyMC4xLTYwLjIgMzEuOEwyMjggODIuN2MtNy40LTExLTIyLjMtMTQtMzMuMy02LjdzLTE0IDIyLjMtNi43IDMzLjNsNy44IDExLjZjLTE4IDE1LTMzLjcgMzAuOC00Ny4zIDQ3LjFMMTM1IDE1Ny4zYy0xMC40LTguMy0yNS41LTYuNi0zMy43IDMuN3MtNi42IDI1LjUgMy43IDMzLjdsMTUgMTJjLTIuMSAzLjItNC4xIDYuNS02IDkuN2MtOS40IDE1LjctMTcgMzEtMjMuMiA0NS4zbC05LjktMy45Yy0xMi4zLTQuOS0yNi4zIDEuMS0zMS4yIDEzLjRzMS4xIDI2LjMgMTMuNCAzMS4ybDExLjYgNC42Yy0uMyAxLjEtLjYgMi4xLS45IDMuMWMtMy41IDEyLjUtNS43IDIzLjItNy4xIDMxLjNjLS43IDQuMS0xLjIgNy41LTEuNiAxMC4zYy0uMiAxLjQtLjMgMi42LS40IDMuNmwtLjEgMS40LS4xIC42IDAgLjMgMCAuMWMwIDAgMCAuMSAzOS4yIDMuN2wwIDAtMzkuMi0zLjZjLS41IDUtLjYgMTAtLjQgMTQuOWwtMTQuNyA0LjJjLTEyLjcgMy42LTIwLjEgMTYuOS0xNi41IDI5LjdzMTYuOSAyMC4xIDI5LjcgMTYuNWwxMy44LTMuOWMxMC42IDIwLjcgMjcuNiAzNy44IDQ4LjUgNDguNWwtMy45IDEzLjdjLTMuNiAxMi43IDMuNyAyNiAxNi41IDI5LjdzMjYtMy43IDI5LjctMTYuNWw0LjItMTQuN2MyMy44IDEgNDYuMy01LjUgNjUuMS0xNy42TDI0NyA0NzNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xMC42LTEwLjZjOS4xLTE0LjEgMTUuMS0zMC41IDE3LTQ4LjNsLjEtLjhjLjMtMS43IDEtNS4xIDIuMy05LjhsLjItLjggMTIuNiA1LjRjMTIuMiA1LjIgMjYuMy0uNCAzMS41LTEyLjZzLS40LTI2LjMtMTIuNi0zMS41bC0xMS4zLTQuOGM5LjktMTQuOSAyNC45LTMxLjYgNDguNi00NmwyLjEgNy41YzMuNiAxMi43IDE2LjkgMjAuMSAyOS43IDE2LjVzMjAuMS0xNi45IDE2LjUtMjkuN0w0MDMgMjU5LjJjNi45LTIuMiAxNC4zLTQuMyAyMi4yLTYuMWMxMi45LTMgMjQuNy04IDM1LjItMTQuOEw0NzEgMjQ5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTAuNi0xMC42YzEyLjItMTkgMTguNi00MS42IDE3LjYtNjUuMWwxNC43LTQuMmMxMi43LTMuNiAyMC4xLTE2LjkgMTYuNS0yOS43cy0xNi45LTIwLjEtMjkuNy0xNi41bC0xMy43IDMuOWMtMTAuOC0yMS4yLTI4LTM4LTQ4LjUtNDguNWwzLjktMTMuOHptLTMzMSAzMzIuN2wwIDBMMTc2IDM2OGwtNTEuOS00Ljd6TTI0MCAzMjBjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4em0zMi04OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0elwiXX0sS3o9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZC1wb2ludGVyXCIsaWNvbjpbNDQ4LDUxMixbXSxcImYyNWFcIixcIk0xMjggNDBjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYxODguMmM4LjUtNy42IDE5LjctMTIuMiAzMi0xMi4yYzI1LjMgMCA0NiAxOS41IDQ3LjkgNDQuM2M4LjUtNy43IDE5LjgtMTIuMyAzMi4xLTEyLjNjMjUuMyAwIDQ2IDE5LjUgNDcuOSA0NC4zYzguNS03LjcgMTkuOC0xMi4zIDMyLjEtMTIuM2MyNi41IDAgNDggMjEuNSA0OCA0OHYzMiA2NGMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMTYgMEgyNDBsLS4xIDBoLTUuMmMtNSAwLTkuOS0uMy0xNC43LTFjLTU1LjMtNS42LTEwNi4yLTM0LTE0MC03OUw4IDMzNmMtMTMuMy0xNy43LTkuNy00Mi43IDgtNTZzNDIuNy05LjcgNTYgOGw1NiA3NC43VjQwek0yNDAgMzA0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMzA0em00OC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMzA0YzAtOC44LTcuMi0xNi0xNi0xNnptODAgMTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ2OTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYzMDR6XCJdfSxqej17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkcnVtLXN0ZWVscGFuXCIsaWNvbjpbNTc2LDUxMixbXSxcImY1NmFcIixcIk0yODggMzJjMTU5LjEgMCAyODggNDggMjg4IDEyOFYzNTJjMCA4MC0xMjguOSAxMjgtMjg4IDEyOFMwIDQzMiAwIDM1MlYxNjBDMCA4MCAxMjguOSAzMiAyODggMzJ6TTUyOCAxNjBjMC05LjktOC0yOS45LTU1LTQ5LjhjLTE4LjYtNy45LTQwLjktMTQuNC02Ni0xOS40bC0yNy44IDQzLjZjLTcuMyAxMS41LTExLjIgMjQuOC0xMS4yIDM4LjRjMCAxNy41IDYuNCAzNC40IDE4LjEgNDcuNWw5LjggMTFjMjkuOC01LjIgNTUuOS0xMi41IDc3LjItMjEuNWM0Ny4xLTE5LjkgNTUtMzkuOSA1NS00OS44ek0zNDkuMiAyMzcuM2MtOC0yNi4yLTMyLjQtNDUuMy02MS4yLTQ1LjNzLTUzLjMgMTkuMS02MS4yIDQ1LjNjMTkuNCAxLjcgMzkuOSAyLjcgNjEuMiAyLjdzNDEuOC0uOSA2MS4yLTIuN3pNMTY5IDkwLjhjLTI1LjIgNS00Ny40IDExLjYtNjYgMTkuNEM1NiAxMzAuMSA0OCAxNTAuMSA0OCAxNjBzOCAyOS45IDU1IDQ5LjhjMjEuMyA5IDQ3LjQgMTYuMyA3Ny4yIDIxLjVsOS44LTExYzExLjYtMTMuMSAxOC4xLTMwIDE4LjEtNDcuNWMwLTEzLjYtMy45LTI2LjktMTEuMi0zOC40TDE2OSA5MC44em01Ni4zLThDMjI0LjUgODcgMjI0IDkxLjUgMjI0IDk2YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC00LjUtLjUtOS0xLjQtMTMuMkMzMzAuOCA4MSAzMDkuOCA4MCAyODggODBzLTQyLjggMS02Mi42IDIuOHpcIl19LEp6PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhbmQtc2Npc3NvcnNcIixpY29uOls1MTIsNTEyLFtdLFwiZjI1N1wiLFwiTTQwIDIwOGMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGwxODAuMiAwYy03LjYgOC41LTEyLjIgMTkuNy0xMi4yIDMyYzAgMjUuMyAxOS41IDQ2IDQ0LjMgNDcuOWMtNy43IDguNS0xMi4zIDE5LjgtMTIuMyAzMi4xYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDMyIDAgNjQgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTExMy4xYzAtNDAuMi0xNi03OC44LTQ0LjQtMTA3LjNDNDQ0LjggNzYuOCA0MTMuOSA2NCAzODEuNyA2NEwzMzYgNjRjLTIxLjMgMC0zOS4zIDEzLjktNDUuNiAzMy4xbDc0LjUgMjMuN2M4LjQgMi43IDEzLjEgMTEuNyAxMC40IDIwLjFzLTExLjcgMTMuMS0yMC4xIDEwLjRMMjg4IDEyOS45bDAgLjFMODQgNjUuOEM2Mi45IDU5LjIgNDAuNSA3MC45IDMzLjggOTJzNS4xIDQzLjUgMjYuMiA1MC4yTDI2OS41IDIwOCA0MCAyMDh6XCJdfSxoNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW5kcy1wcmF5aW5nXCIsaWNvbjpbNjQwLDUxMixbXCJwcmF5aW5nLWhhbmRzXCJdLFwiZjY4NFwiLFwiTTM1MS4yIDQuOGMzLjItMiA2LjYtMy4zIDEwLTQuMWM0LjctMSA5LjYtLjkgMTQuMSAuMWM3LjcgMS44IDE0LjggNi41IDE5LjQgMTMuNkw1MTQuNiAxOTQuMmM4LjggMTMuMSAxMy40IDI4LjYgMTMuNCA0NC40djczLjVjMCA2LjkgNC40IDEzIDEwLjkgMTUuMmw3OS4yIDI2LjRDNjMxLjIgMzU4IDY0MCAzNzAuMiA2NDAgMzg0djk2YzAgOS45LTQuNiAxOS4zLTEyLjUgMjUuNHMtMTguMSA4LjEtMjcuNyA1LjVMNDMxIDQ2NS45Yy01Ni0xNC45LTk1LTY1LjctOTUtMTIzLjdWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2ODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYyMTkuMWMwLTctMS44LTEzLjgtNS4zLTE5LjhMMzQwLjMgNDguMWMtMS43LTMtMi45LTYuMS0zLjYtOS4zYy0xLTQuNy0xLTkuNiAuMS0xNC4xYzEuOS04IDYuOC0xNS4yIDE0LjMtMTkuOXptLTYyLjQgMGM3LjUgNC42IDEyLjQgMTEuOSAxNC4zIDE5LjljMS4xIDQuNiAxLjIgOS40IC4xIDE0LjFjLS43IDMuMi0xLjkgNi4zLTMuNiA5LjNMMjEzLjMgMTk5LjNjLTMuNSA2LTUuMyAxMi45LTUuMyAxOS44VjMwNGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjM0Mi4zYzAgNTgtMzkgMTA4LjctOTUgMTIzLjdsLTE2OC43IDQ1Yy05LjYgMi42LTE5LjkgLjUtMjcuNy01LjVTMCA0OTAgMCA0ODBWMzg0YzAtMTMuOCA4LjgtMjYgMjEuOS0zMC40bDc5LjItMjYuNGM2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMlYyMzguNWMwLTE1LjggNC43LTMxLjIgMTMuNC00NC40TDI0NS4yIDE0LjVjNC42LTcuMSAxMS43LTExLjggMTkuNC0xMy42YzQuNi0xLjEgOS40LTEuMiAxNC4xLS4xYzMuNSAuOCA2LjkgMi4xIDEwIDQuMXpcIl19LFp6PWg2LFY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctcm90YXRlLXJpZ2h0XCIsaWNvbjpbNTEyLDUxMixbODYzNSxcImFycm93LXJpZ2h0LXJvdGF0ZVwiLFwiYXJyb3ctcm90YXRlLWZvcndhcmRcIixcInJlZG9cIl0sXCJmMDFlXCIsXCJNMzg2LjMgMTYwSDMzNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0NjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2NTEuMkw0MTQuNCA5Ny42Yy04Ny41LTg3LjUtMjI5LjMtODcuNS0zMTYuOCAwcy04Ny41IDIyOS4zIDAgMzE2LjhzMjI5LjMgODcuNSAzMTYuOCAwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwYy02Mi41IDYyLjUtMTYzLjggNjIuNS0yMjYuMyAwcy02Mi41LTE2My44IDAtMjI2LjNzMTYzLjgtNjIuNSAyMjYuMyAwTDM4Ni4zIDE2MHpcIl19LFl6PVYsX3o9Viwkej1WLGNWPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJpb2hhemFyZFwiLGljb246WzU3Niw1MTIsWzk3NjNdLFwiZjc4MFwiLFwiTTE3My4yIDBjLTEuOCAwLTMuNSAuNy00LjggMkMxMzguNSAzMi4zIDEyMCA3NCAxMjAgMTIwYzAgMjYuMiA2IDUwLjkgMTYuNiA3M2MtMjIgMi40LTQzLjggOS4xLTY0LjIgMjAuNUMzNy45IDIzMi44IDEzLjMgMjYyLjQgLjQgMjk2Yy0uNyAxLjctLjUgMy43IC41IDUuMmMyLjIgMy43IDcuNCA0LjMgMTAuNiAxLjNDNjQuMiAyNTQuMyAxNTggMjQ1LjEgMjA1IDMyNHMtOC4xIDE1My4xLTc3LjYgMTczLjJjLTQuMiAxLjItNi4zIDUuOS00LjEgOS42YzEgMS42IDIuNiAyLjcgNC41IDNjMzYuNSA1LjkgNzUuMiAuMSAxMDkuNy0xOS4yYzIwLjQtMTEuNCAzNy40LTI2LjUgNTAuNS00My44YzEzLjEgMTcuMyAzMC4xIDMyLjQgNTAuNSA0My44YzM0LjUgMTkuMyA3My4zIDI1LjIgMTA5LjcgMTkuMmMxLjktLjMgMy41LTEuNCA0LjUtM2MyLjItMy43IC4xLTguNC00LjEtOS42QzM3OS4xIDQ3Ny4xIDMyNCA0MDMgMzcxIDMyNHMxNDAuNy02OS44IDE5My41LTIxLjRjMy4yIDIuOSA4LjQgMi4zIDEwLjYtMS4zYzEtMS42IDEuMS0zLjUgLjUtNS4yYy0xMi45LTMzLjYtMzcuNS02My4yLTcyLjEtODIuNWMtMjAuNC0xMS40LTQyLjItMTguMS02NC4yLTIwLjVDNDUwIDE3MC45IDQ1NiAxNDYuMiA0NTYgMTIwYzAtNDYtMTguNS04Ny43LTQ4LjQtMTE4Yy0xLjMtMS4zLTMtMi00LjgtMmMtNSAwLTguNCA1LjItNi43IDkuOUM0MjEuNyA4MC41IDM4NS42IDE3NiAyODggMTc2UzE1NC4zIDgwLjUgMTc5LjkgOS45YzEuNy00LjctMS42LTkuOS02LjctOS45ek0zMzYgMjcyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpNMTgxLjcgNDE3LjZjNi4zLTExLjggOS44LTI1LjEgOC42LTM5LjhjLTE5LjUtMTgtMzQtNDEuNC00MS4yLTY3LjhjLTEyLjUtOC4xLTI2LjItMTEuOC00MC0xMi40Yy05LS40LTE4LjEgLjYtMjcuMSAyLjdjNy44IDU3LjEgMzguNyAxMDYuOCA4Mi45IDEzOS40YzYuOC02LjcgMTIuNi0xNC4xIDE2LjgtMjIuMXpNMjg4IDY0Yy0yOC44IDAtNTYuMyA1LjktODEuMiAxNi41YzIgOC4zIDUgMTYuMiA5IDIzLjVjNi44IDEyLjQgMTYuNyAyMy4xIDMwLjEgMzAuM2MxMy4zLTQuMSAyNy41LTYuMyA0Mi4yLTYuM3MyOC44IDIuMiA0Mi4yIDYuM2MxMy40LTcuMiAyMy4zLTE3LjkgMzAuMS0zMC4zYzQtNy4zIDctMTUuMiA5LTIzLjVDMzQ0LjMgNjkuOSAzMTYuOCA2NCAyODggNjR6TTQyNi45IDMxMGMtNy4yIDI2LjQtMjEuNyA0OS43LTQxLjIgNjcuOGMtMS4yIDE0LjcgMi4yIDI4LjEgOC42IDM5LjhjNC4zIDggMTAgMTUuNCAxNi44IDIyLjFjNDQuMy0zMi42IDc1LjItODIuMyA4Mi45LTEzOS40Yy05LTIuMi0xOC4xLTMuMS0yNy4xLTIuN2MtMTMuOCAuNi0yNy41IDQuNC00MCAxMi40elwiXX0sQzY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibG9jYXRpb24tY3Jvc3NoYWlyc1wiLGljb246WzUxMiw1MTIsW1wibG9jYXRpb25cIl0sXCJmNjAxXCIsXCJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjYuN0MzNjguNCA4MC4xIDQzMS45IDE0My42IDQ0NS4zIDIyNEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDQ1LjNDNDMxLjkgMzY4LjQgMzY4LjQgNDMxLjkgMjg4IDQ0NS4zVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDUuM0MxNDMuNiA0MzEuOSA4MC4xIDM2OC40IDY2LjcgMjg4SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDY2LjdDODAuMSAxNDMuNiAxNDMuNiA4MC4xIDIyNCA2Ni43VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMjggMjU2YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhzLTU3LjMtMTI4LTEyOC0xMjhzLTEyOCA1Ny4zLTEyOCAxMjh6bTEyOCA4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBzMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgwelwiXX0sYVY9QzYsc1Y9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFycy1kb3VibGVcIixpY29uOls2NDAsNTEyLFs5ODkxXSxcImYyMjdcIixcIk0zMTIgMzJjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsMzMuNCAzMy40TDI3NS44IDE1OWMtMjguNC0xOS41LTYyLjctMzEtOTkuOC0zMUM3OC44IDEyOCAwIDIwNi44IDAgMzA0czc4LjggMTc2IDE3NiAxNzZzMTc2LTc4LjggMTc2LTE3NmMwLTM3LTExLjQtNzEuNC0zMS05OS44bDUyLjYtNTIuNkw0MDcgMTg1YzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJzMTQuOC0xMi41IDE0LjgtMjIuMlY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgzMTJ6bTg4IDQ4aDB2MGwwIDB6TTI4OCAzMDRjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJzLTExMi01MC4xLTExMi0xMTJzNTAuMS0xMTIgMTEyLTExMnMxMTIgNTAuMSAxMTIgMTEyem04MCAxNzZjOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzZjMC0zNy0xMS40LTcxLjQtMzEtOTkuOGw1Mi42LTUyLjZMNTk5IDE4NWM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yczE0LjgtMTIuNSAxNC44LTIyLjJWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRINTA0Yy05LjcgMC0xOC41IDUuOC0yMi4yIDE0LjhjLTEuMiAyLjktMS44IDYtMS44IDlsMCAuMnYuMmMwIDYuMiAyLjUgMTIuMiA3IDE2LjhsMzMuNCAzMy40TDQ4MCAxNDYuN1YxNjhjMCAyMi42LTEzLjYgNDMuMS0zNC42IDUxLjdjLS44IC4zLTEuNyAuNy0yLjUgMUM0NjUuNyAyNDEuMiA0ODAgMjcwLjkgNDgwIDMwNGMwIDYxLjktNTAuMSAxMTItMTEyIDExMmMtNS40IDAtMTAuOC0uNC0xNi0xLjFjLTEyLjkgMjAuNC0yOS4xIDM4LjMtNDguMSA1My4xYzE5LjggNy44IDQxLjQgMTIgNjQgMTJ6XCJdfSxlVj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGlsZC1kcmVzc1wiLGljb246WzMyMCw1MTIsW10sXCJlNTljXCIsXCJNMjI0IDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0Uzk2IDI4LjcgOTYgNjRzMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0ek04OCA0MDB2ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0MDBoMTZ2ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0MDBoMTcuOGMxMC45IDAgMTguNi0xMC43IDE1LjItMjEuMWwtMzEuMS05My40IDI4LjYgMzcuOGMxMC43IDE0LjEgMzAuOCAxNi44IDQ0LjggNi4yczE2LjgtMzAuNyA2LjItNDQuOEwyNTQuNiAyMDdjLTIyLjQtMjkuNi01Ny41LTQ3LTk0LjYtNDdzLTcyLjIgMTcuNC05NC42IDQ3TDYuNSAyODQuN2MtMTAuNyAxNC4xLTcuOSAzNC4yIDYuMiA0NC44czM0LjIgNy45IDQ0LjgtNi4ybDI4LjctMzcuOEw1NSAzNzguOUM1MS42IDM4OS4zIDU5LjMgNDAwIDcwLjIgNDAwSDg4elwiXX0sZlY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXNlcnMtYmV0d2Vlbi1saW5lc1wiLGljb246WzY0MCw1MTIsW10sXCJlNTkxXCIsXCJNMCAyNEMwIDEwLjcgMTAuNyAwIDI0IDBINjE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI0QzEwLjcgNDggMCAzNy4zIDAgMjR6TTAgNDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0SDYxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTIxMS4yIDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6TTMyIDMyMGMwLTM1LjMgMjguNy02NCA2NC02NGg5NmMxMi4yIDAgMjMuNyAzLjQgMzMuNCA5LjRjLTM3LjIgMTUuMS02NS42IDQ3LjItNzUuOCA4Ni42SDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnptNDYxLjYgMzJjLTEwLjMtNDAuMS0zOS42LTcyLjYtNzcuNy04Ny40YzkuNC01LjUgMjAuNC04LjYgMzIuMS04LjZoOTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJINDkzLjZ6TTM5MS4yIDI5MC40YzMyLjEgNy40IDU4LjEgMzAuOSA2OC45IDYxLjZjMy41IDEwIDUuNSAyMC44IDUuNSAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmgtMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMmMwLTExLjIgMS45LTIyIDUuNS0zMmMxMC41LTI5LjcgMzUuMy01Mi44IDY2LjEtNjAuOWM3LjgtMi4xIDE2LTMuMSAyNC41LTMuMWg5NmM3LjQgMCAxNC43IC44IDIxLjYgMi40ek01NjMuMiAxNjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0ek0zMjEuNiAyNTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwczM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHpcIl19LHJWPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImx1bmdzLXZpcnVzXCIsaWNvbjpbNjQwLDUxMixbXSxcImUwNjdcIixcIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlYxNTYuMmMtOC41LTcuNi0xOS43LTEyLjItMzItMTIuMnMtMjMuNSA0LjYtMzIgMTIuMlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDQ0LjUgMTk1LjVjLTE2LjQtMTYuNC00MS44LTE4LjUtNjAuNS02LjFWMTY1LjNDMzg0IDEyNyA0MTUgOTYgNDUzLjMgOTZjMjEuNyAwIDQyLjggMTAuMiA1NS44IDI4LjhjMTUuNCAyMi4xIDQ0LjMgNjUuNCA3MSAxMTYuOWMyNi41IDUwLjkgNTIuNCAxMTIuNSA1OS42IDE3MC4zYy4yIDEuMyAuMiAyLjYgLjIgNHY3YzAgNDkuMS0zOS44IDg5LTg5IDg5Yy03LjMgMC0xNC41LS45LTIxLjYtMi43bC03Mi43LTE4LjJjLTIwLjktNS4yLTM4LjctMTcuMS01MS41LTMyLjljMTQgMS41IDI4LjUtMyAzOS4yLTEzLjhsLTIyLjYtMjIuNiAyMi42IDIyLjZjMTguNy0xOC43IDE4LjctNDkuMSAwLTY3LjljLTEuMS0xLjEtMS40LTItMS41LTIuNWMtLjEtLjgtLjEtMS44IC40LTIuOXMxLjItMS45IDEuOC0yLjNjLjUtLjMgMS4zLS44IDIuOS0uOGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OGMtMS42IDAtMi40LS40LTIuOS0uOGMtLjYtLjQtMS4zLTEuMi0xLjgtMi4zcy0uNS0yLjItLjQtMi45Yy4xLS42IC40LTEuNCAxLjUtMi41YzE4LjctMTguNyAxOC43LTQ5LjEgMC02Ny45ek00MjEuOCA0MjEuOGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBDMzc1LjkgMzk4LjUgMzM2IDQxNSAzMzYgNDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2YzAtMzMtMzkuOS00OS41LTYzLjItMjYuMmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkMyNDEuNSAzNzUuOSAyMjUgMzM2IDE5MiAzMzZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZjMzMgMCA0OS41LTM5LjkgMjYuMi02My4yYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBDMjY0LjEgMjQxLjUgMzA0IDIyNSAzMDQgMTkyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZjMCAzMyAzOS45IDQ5LjUgNjMuMiAyNi4yYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkMzOTguNSAyNjQuMSA0MTUgMzA0IDQ0OCAzMDRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZjLTMzIDAtNDkuNSAzOS45LTI2LjIgNjMuMmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnpNMTgzLjMgNDkxLjJsLTcyLjcgMTguMmMtNy4xIDEuOC0xNC4zIDIuNy0yMS42IDIuN2MtNDkuMSAwLTg5LTM5LjgtODktODl2LTdjMC0xLjMgLjEtMi43IC4yLTRjNy4yLTU3LjkgMzMuMS0xMTkuNCA1OS42LTE3MC4zYzI2LjgtNTEuNSA1NS42LTk0LjggNzEtMTE2LjljMTMtMTguNiAzNC0yOC44IDU1LjgtMjguOEMyMjUgOTYgMjU2IDEyNyAyNTYgMTY1LjN2MjQuMWMtMTguNi0xMi40LTQ0LTEwLjMtNjAuNSA2LjFjLTE4LjcgMTguNy0xOC43IDQ5LjEgMCA2Ny45YzEuMSAxLjEgMS40IDIgMS41IDIuNWMuMSAuOCAuMSAxLjgtLjQgMi45cy0xLjIgMS45LTEuOCAyLjNjLS41IC4zLTEuMyAuOC0yLjkgLjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhjMS42IDAgMi40IC40IDIuOSAuOGMuNiAuNCAxLjMgMS4yIDEuOCAyLjNzLjUgMi4yIC40IDIuOWMtLjEgLjYtLjQgMS40LTEuNSAyLjVjLTE4LjcgMTguNy0xOC43IDQ5LjEgMCA2Ny45YzEwLjcgMTAuNyAyNS4zIDE1LjMgMzkuMiAxMy44Yy0xMi44IDE1LjktMzAuNiAyNy43LTUxLjUgMzIuOXpNMjk2IDMyMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em03MiAzMmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2elwiXX0sTDY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1ncmluLXRlYXJzXCIsaWNvbjpbNjQwLDUxMixbMTI4NTE0LFwiZ3Jpbi10ZWFyc1wiXSxcImY1ODhcIixcIk01NDguNiAzNzEuNEM1MDYuNCA0NTQuOCA0MTkuOSA1MTIgMzIwIDUxMnMtMTg2LjQtNTcuMi0yMjguNi0xNDAuNmM0LjUtMi45IDguNy02LjMgMTIuNy0xMC4zYzguMS04LjEgMTMuMi0xOC42IDE2LjUtMjYuNmMzLjYtOC44IDYuNS0xOC40IDguOC0yNy41YzQuNi0xOC4yIDcuNy0zNyA5LjMtNDguMmMzLjktMjYuNS0xOC44LTQ5LjItNDUuMi00NS40Yy02LjggLjktMTYuMiAyLjQtMjYuNiA0LjRDODUuMyA5NC41IDE5MS42IDAgMzIwIDBTNTU0LjcgOTQuNSA1NzMuMiAyMTcuN2MtMTAuMy0yLTE5LjgtMy41LTI2LjYtNC40Yy0yNi41LTMuOS00OS4yIDE4LjgtNDUuMiA0NS40YzEuNiAxMS4zIDQuNiAzMCA5LjMgNDguMmMyLjMgOS4xIDUuMiAxOC44IDguOCAyNy41YzMuMyA4LjEgOC40IDE4LjUgMTYuNSAyNi42YzMuOSAzLjkgOC4yIDcuNCAxMi43IDEwLjN6TTEwNyAyNTQuMWMtMy4xIDIxLjUtMTEuNCA3MC4yLTI1LjUgODQuNGMtLjkgMS0xLjkgMS44LTIuOSAyLjdDNjAgMzU2LjcgMzIgMzU1LjUgMTQuMyAzMzcuN2MtMTguNy0xOC43LTE5LjEtNDguOC0uNy02Ny4yYzguNi04LjYgMzAuMS0xNS4xIDUwLjUtMTkuNmMxMy0yLjggMjUuNS00LjggMzMuOS02YzUuNC0uOCA5LjkgMy43IDkgOXptNDU0LjUgODcuMWMtLjgtLjYtMS41LTEuMy0yLjMtMmMtLjItLjItLjUtLjQtLjctLjdjLTE0LjEtMTQuMS0yMi41LTYyLjktMjUuNS04NC40Yy0uOC01LjQgMy43LTkuOSA5LTljMSAuMSAyLjIgLjMgMy4zIC41YzguMiAxLjIgMTkuMiAzIDMwLjYgNS41YzIwLjQgNC40IDQxLjkgMTAuOSA1MC41IDE5LjZjMTguNCAxOC40IDE4IDQ4LjUtLjcgNjcuMmMtMTcuNyAxNy43LTQ1LjcgMTktNjQuMiAzLjR6bS05MC4xLTkuN2M1LTExLjgtNy0yMi41LTE5LjMtMTguN2MtMzkuNyAxMi4yLTg0LjQgMTktMTMxLjggMTlzLTkyLjEtNi44LTEzMS44LTE5Yy0xMi4zLTMuOC0yNC4zIDYuOS0xOS4zIDE4LjdjMjUgNTkuMSA4My4yIDEwMC41IDE1MS4xIDEwMC41czEyNi4yLTQxLjQgMTUxLjEtMTAwLjV6TTI4MS42IDIyOC44bDAgMCAwIDAgMCAwYzIuMSAyLjggNS43IDMuOSA4LjkgMi44czUuNS00LjEgNS41LTcuNmMwLTE3LjktNi43LTM1LjYtMTYuNi00OC44Yy05LjgtMTMtMjMuOS0yMy4yLTM5LjQtMjMuMnMtMjkuNiAxMC4yLTM5LjQgMjMuMkMxOTAuNyAxODguNCAxODQgMjA2LjEgMTg0IDIyNGMwIDMuNCAyLjIgNi41IDUuNSA3LjZzNi45IDAgOC45LTIuOGwwIDAgMCAwIDAgMCAuMi0uMmMuMi0uMiAuNC0uNSAuNy0uOWMuNi0uOCAxLjYtMiAyLjgtMy40YzIuNS0yLjggNi02LjYgMTAuMi0xMC4zYzguOC03LjggMTguOC0xNCAyNy43LTE0czE4LjkgNi4yIDI3LjcgMTRjNC4yIDMuNyA3LjcgNy41IDEwLjIgMTAuM2MxLjIgMS40IDIuMiAyLjYgMi44IDMuNGMuMyAuNCAuNiAuNyAuNyAuOWwuMiAuMiAwIDB6bTE2MCAwbDAgMCAwIDBjMi4xIDIuOCA1LjcgMy45IDguOSAyLjhzNS41LTQuMSA1LjUtNy42YzAtMTcuOS02LjctMzUuNi0xNi42LTQ4LjhjLTkuOC0xMy0yMy45LTIzLjItMzkuNC0yMy4ycy0yOS42IDEwLjItMzkuNCAyMy4yQzM1MC43IDE4OC40IDM0NCAyMDYuMSAzNDQgMjI0YzAgMy40IDIuMiA2LjUgNS41IDcuNnM2LjkgMCA4LjktMi44bDAgMCAwIDAgMCAwIC4yLS4yYy4yLS4yIC40LS41IC43LS45Yy42LS44IDEuNi0yIDIuOC0zLjRjMi41LTIuOCA2LTYuNiAxMC4yLTEwLjNjOC44LTcuOCAxOC44LTE0IDI3LjctMTRzMTguOSA2LjIgMjcuNyAxNGM0LjIgMy43IDcuNyA3LjUgMTAuMiAxMC4zYzEuMiAxLjQgMi4yIDIuNiAyLjggMy40Yy4zIC40IC42IC43IC43IC45bC4yIC4yIDAgMCAwIDB6XCJdfSxsVj1MNixpVj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwaG9uZVwiLGljb246WzUxMiw1MTIsWzEyODIyMiwxMjgzNzldLFwiZjA5NVwiLFwiTTE2NC45IDI0LjZjLTcuNy0xOC42LTI4LTI4LjUtNDcuNC0yMy4ybC04OCAyNEMxMi4xIDMwLjIgMCA0NiAwIDY0QzAgMzExLjQgMjAwLjYgNTEyIDQ0OCA1MTJjMTggMCAzMy44LTEyLjEgMzguNi0yOS41bDI0LTg4YzUuMy0xOS40LTQuNi0zOS43LTIzLjItNDcuNGwtOTYtNDBjLTE2LjMtNi44LTM1LjItMi4xLTQ2LjMgMTEuNkwzMDQuNyAzNjhDMjM0LjMgMzM0LjcgMTc3LjMgMjc3LjcgMTQ0IDIwNy4zTDE5My4zIDE2N2MxMy43LTExLjIgMTguNC0zMCAxMS42LTQ2LjNsLTQwLTk2elwiXX0scDY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FsZW5kYXIteG1hcmtcIixpY29uOls0NDgsNTEyLFtcImNhbGVuZGFyLXRpbWVzXCJdLFwiZjI3M1wiLFwiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0SDI4OFYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjY0aDQ4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4djQ4SDBWMTEyQzAgODUuNSAyMS41IDY0IDQ4IDY0SDk2VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0wIDE5Mkg0NDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYxOTJ6TTMwNSAzMDVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNDcgNDctNDctNDdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNDcgNDctNDcgNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0Ny00NyA0NyA0N2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ3LTQ3IDQ3LTQ3elwiXX0sb1Y9cDYsblY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hpbGQtcmVhY2hpbmdcIixpY29uOlszODQsNTEyLFtdLFwiZTU5ZFwiLFwiTTI1NiA2NGMwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTE1Mi45IDE2OS4zYy0yMy43LTguNC00NC41LTI0LjMtNTguOC00NS44TDc0LjYgOTQuMkM2NC44IDc5LjUgNDUgNzUuNiAzMC4yIDg1LjRzLTE4LjcgMjkuNy04LjkgNDQuNEw0MC45IDE1OWMxOC4xIDI3LjEgNDIuOCA0OC40IDcxLjEgNjIuNFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoMzJ2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMjEuNmMyOS4xLTE0LjIgNTQuNC0zNi4yIDcyLjctNjQuMmwxOC4yLTI3LjljOS42LTE0LjggNS40LTM0LjYtOS40LTQ0LjNzLTM0LjYtNS41LTQ0LjMgOS40TDI5MSAxMjIuNGMtMjEuOCAzMy40LTU4LjkgNTMuNi05OC44IDUzLjZjLTEyLjYgMC0yNC45LTItMzYuNi01LjhjLS45LS4zLTEuOC0uNy0yLjctLjl6XCJdfSxIVj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoZWFkLXNpZGUtdmlydXNcIixpY29uOls1MTIsNTEyLFtdLFwiZTA2NFwiLFwiTTAgMjI0LjJDMCAxMDAuNiAxMDAuMiAwIDIyNCAwaDMyYzk1LjIgMCAxNzQuMiA2OS4zIDE4OS40IDE2MC4xYzIuMiAxMyA2LjcgMjUuNyAxNSAzNi4xbDQyIDUyLjZjNi4yIDcuOCA5LjYgMTcuNCA5LjYgMjcuNGMwIDI0LjItMTkuNiA0My44LTQzLjggNDMuOEg0NDh2NjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMzIwdjMyYzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MDcuM2MwLTE2LjctNi45LTMyLjUtMTcuMS00NS44QzE2LjYgMzIyLjQgMCAyNzQuMSAwIDIyNC4yek0yNDAgODBjLTguOCAwLTE2IDcuMi0xNiAxNmMwIDMzLTM5LjkgNDkuNS02My4yIDI2LjJjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZDMTYxLjUgMTY4LjEgMTQ1IDIwOCAxMTIgMjA4Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2YzMzIDAgNDkuNSAzOS45IDI2LjIgNjMuMmMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwQzE4NC4xIDMwMi41IDIyNCAzMTkgMjI0IDM1MmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2YzAtMzMgMzkuOS00OS41IDYzLjItMjYuMmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZDMzE4LjUgMjc5LjkgMzM1IDI0MCAzNjggMjQwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2Yy0zMyAwLTQ5LjUtMzkuOS0yNi4yLTYzLjJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEMyOTUuOSAxNDUuNSAyNTYgMTI5IDI1NiA5NmMwLTguOC03LjItMTYtMTYtMTZ6TTIxNiAyMjRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptNzIgMzJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl19LGQ2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInVzZXItZ2VhclwiLGljb246WzY0MCw1MTIsW1widXNlci1jb2dcIl0sXCJmNGZlXCIsXCJNMjI0IDI1NmMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhTMTUzLjMgMCAyMjQgMHMxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4em0tNDUuNyA0OGg5MS40YzExLjggMCAyMy40IDEuMiAzNC41IDMuM2MtMi4xIDE4LjUgNy40IDM1LjYgMjEuOCA0NC44Yy0xNi42IDEwLjYtMjYuNyAzMS42LTIwIDUzLjNjNCAxMi45IDkuNCAyNS41IDE2LjQgMzcuNnMxNS4yIDIzLjEgMjQuNCAzM2MxNS43IDE2LjkgMzkuNiAxOC40IDU3LjIgOC43di45YzAgOS4yIDIuNyAxOC41IDcuOSAyNi4zSDI5LjdDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zQzAgMzgzLjggNzkuOCAzMDQgMTc4LjMgMzA0ek00MzYgMjE4LjJjMC03IDQuNS0xMy4zIDExLjMtMTQuOGMxMC41LTIuNCAyMS41LTMuNyAzMi43LTMuN3MyMi4yIDEuMyAzMi43IDMuN2M2LjggMS41IDExLjMgNy44IDExLjMgMTQuOHYzMC42YzcuOSAzLjQgMTUuNCA3LjcgMjIuMyAxMi44bDI0LjktMTQuM2M2LjEtMy41IDEzLjctMi43IDE4LjUgMi40YzcuNiA4LjEgMTQuMyAxNy4yIDIwLjEgMjcuMnMxMC4zIDIwLjQgMTMuNSAzMWMyLjEgNi43LTEuMSAxMy43LTcuMiAxNy4ybC0yNSAxNC40Yy40IDQgLjcgOC4xIC43IDEyLjNzLS4yIDguMi0uNyAxMi4zbDI1IDE0LjRjNi4xIDMuNSA5LjIgMTAuNSA3LjIgMTcuMmMtMy4zIDEwLjYtNy44IDIxLTEzLjUgMzFzLTEyLjUgMTkuMS0yMC4xIDI3LjJjLTQuOCA1LjEtMTIuNSA1LjktMTguNSAyLjRsLTI0LjktMTQuM2MtNi45IDUuMS0xNC4zIDkuNC0yMi4zIDEyLjhsMCAzMC42YzAgNy00LjUgMTMuMy0xMS4zIDE0LjhjLTEwLjUgMi40LTIxLjUgMy43LTMyLjcgMy43cy0yMi4yLTEuMy0zMi43LTMuN2MtNi44LTEuNS0xMS4zLTcuOC0xMS4zLTE0LjhWNDU0LjhjLTgtMy40LTE1LjYtNy43LTIyLjUtMTIuOWwtMjQuNyAxNC4zYy02LjEgMy41LTEzLjcgMi43LTE4LjUtMi40Yy03LjYtOC4xLTE0LjMtMTcuMi0yMC4xLTI3LjJzLTEwLjMtMjAuNC0xMy41LTMxYy0yLjEtNi43IDEuMS0xMy43IDcuMi0xNy4ybDI0LjgtMTQuM2MtLjQtNC4xLS43LTguMi0uNy0xMi40cy4yLTguMyAuNy0xMi40TDM0My44IDMyNWMtNi4xLTMuNS05LjItMTAuNS03LjItMTcuMmMzLjMtMTAuNiA3LjctMjEgMTMuNS0zMXMxMi41LTE5LjEgMjAuMS0yNy4yYzQuOC01LjEgMTIuNC01LjkgMTguNS0yLjRsMjQuOCAxNC4zYzYuOS01LjEgMTQuNS05LjQgMjIuNS0xMi45VjIxOC4yem05Mi4xIDEzMy41YzAtMjYuNS0yMS41LTQ4LTQ4LjEtNDhzLTQ4LjEgMjEuNS00OC4xIDQ4czIxLjUgNDggNDguMSA0OHM0OC4xLTIxLjUgNDguMS00OHpcIl19LHpWPWQ2LHU2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93LXVwLTEtOVwiLGljb246WzU3Niw1MTIsW1wic29ydC1udW1lcmljLXVwXCJdLFwiZjE2M1wiLFwiTTE2MCAzMmM5IDAgMTcuNSAzLjggMjMuNiAxMC40bDg4IDk2YzExLjkgMTMgMTEuMSAzMy4zLTIgNDUuMnMtMzMuMyAxMS4xLTQ1LjItMkwxOTIgMTQ2LjNWNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjE0Ni4zTDk1LjYgMTgxLjZjLTExLjkgMTMtMzIuMiAxMy45LTQ1LjIgMnMtMTMuOS0zMi4yLTItNDUuMmw4OC05NkMxNDIuNSAzNS44IDE1MSAzMiAxNjAgMzJ6TTM1MiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MzIgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDE2Vjk2SDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTkzLjcgMzAwLjljMTAuOC01LjEgMTguMy0xNi4yIDE4LjMtMjguOWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyYzQuOSAwIDkuNi0xLjEgMTMuNy0zLjF6bS00MC43IDU0LjlDMzY5LjYgNDA4LjQgMzQ0IDM3NS4yIDM0NCAzMzZjMC00OC42IDM5LjQtODggODgtODhzODggMzkuNCA4OCA4OGMwIDIzLjUtNy41IDQ2LjMtMjEuNSA2NS4yTDQ0OS43IDQ2N2MtMTAuNSAxNC4yLTMwLjYgMTcuMi00NC44IDYuN3MtMTcuMi0zMC42LTYuNy00NC44bDYuOC05LjJ6XCJdfSxWVj11NixtVj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkb29yLWNsb3NlZFwiLGljb246WzU3Niw1MTIsWzEyODY4Ml0sXCJmNTJhXCIsXCJNOTYgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRINDE2YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MzIgMTQ0IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDk2VjY0ek0zODQgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdfSx2Vj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzaGllbGQtdmlydXNcIixpY29uOls1MTIsNTEyLFtdLFwiZTA2Y1wiLFwiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yYy41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMmMxNi43IDggMzYuMSA4IDUyLjggMEM0NTQuNyA0MjAuNyA0OTUuNSAyMzkuMiA0OTYgMTQwYy4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTI1NiAxMTJjOC44IDAgMTYgNy4yIDE2IDE2YzAgMzMgMzkuOSA0OS41IDYzLjIgMjYuMmM2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZDMzM0LjUgMjAwLjEgMzUxIDI0MCAzODQgMjQwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2Yy0zMyAwLTQ5LjUgMzkuOS0yNi4yIDYzLjJjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEMzMTEuOSAzMzQuNSAyNzIgMzUxIDI3MiAzODRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZjMC0zMy0zOS45LTQ5LjUtNjMuMi0yNi4yYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42QzE3Ny41IDMxMS45IDE2MSAyNzIgMTI4IDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmMzMyAwIDQ5LjUtMzkuOSAyNi4yLTYzLjJjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMEMyMDAuMSAxNzcuNSAyNDAgMTYxIDI0MCAxMjhjMC04LjggNy4yLTE2IDE2LTE2ek0yMzIgMjU2YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6bTcyIDMyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6XCJdfSxNVj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkaWNlLXNpeFwiLGljb246WzQ0OCw1MTIsWzk4NjFdLFwiZjUyNlwiLFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6bTE2MCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTEyOCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMzIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek0zMjAgMTkyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTMyIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNMzIwIDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyelwiXX0sdFY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibW9zcXVpdG8tbmV0XCIsaWNvbjpbNjQwLDUxMixbXSxcImU1MmNcIixcIk0xNjguOCA0NjIuM2MtNy45LTQtMTEuMS0xMy42LTcuMi0yMS41TDE5MiAzODAuMmwwLTQ0LjJjMC00LjIgMS43LTguMyA0LjctMTEuM0wyNTYgMjY1LjRWMjQyLjJMMTM5LjIgMzQ0Qzg3LjggMzk1LjMgMCAzNTguOSAwIDI4Ni4zYzAtNDEuMSAzMC42LTc1LjggNzEuNC04MC45bDE1OS45LTIzLjktNDkuNi00MS4zYy01LjEtNC4yLTctMTEuMS00LjktMTcuNGwxMy45LTQxLjctMjktNTguMWMtNC03LjktLjctMTcuNSA3LjItMjEuNXMxNy41LS43IDIxLjUgNy4ybDMyIDY0YzEuOSAzLjggMi4yIDguMiAuOSAxMi4ybC0xMi41IDM3LjZMMjU2IDE2MC41VjEzNy45YzAtMTQuOSAxMC4xLTI3LjMgMjMuOC0zMVY2My43YzAtNC41IDMuNy04LjIgOC4yLTguMnM4LjIgMy43IDguMiA4LjJWMTA3YzEzLjcgMy42IDIzLjggMTYuMSAyMy44IDMxdjIyLjZsNDUuNC0zNy44TDM1Mi44IDg1LjFjLTEuMy00LTEtOC40IC45LTEyLjJsMzItNjRjNC03LjkgMTMuNi0xMS4xIDIxLjUtNy4yczExLjEgMTMuNiA3LjIgMjEuNWwtMjkgNTguMSAxMy45IDQxLjdjMi4xIDYuMiAuMSAxMy4xLTQuOSAxNy40bC00OS42IDQxLjMgMTU5LjkgMjMuOWMyMi41IDIuOCA0MS44IDE0LjYgNTQuNyAzMS40Yy0yLjcgMi42LTUuMiA1LjQtNy4zIDguNmMtOC42LTEyLjktMjMuMy0yMS41LTQwLTIxLjVzLTMxLjQgOC41LTQwIDIxLjVjLTguNi0xMi45LTIzLjMtMjEuNS00MC0yMS41Yy0yMS43IDAtNDAgMTQuMy00NS45IDM0LjFjLTEwLjcgMy4yLTE5LjggMTAuMS0yNS45IDE5LjJsLTQwLjItMzV2MjMuMWwzMi40IDMyLjRjLS4zIDItLjQgNC4xLS40IDYuMmMwIDE2LjcgOC41IDMxLjQgMjEuNSA0MGMtNCAyLjYtNy41IDUuOS0xMC42IDkuNUwzMjAgMzEwLjZ2NTBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ2LTUwbC0zMiAzMiAwIDQxLjRjMCAyLjUtLjYgNC45LTEuNyA3LjJsLTMyIDY0Yy00IDcuOS0xMy42IDExLjEtMjEuNSA3LjJ6TTUxMiAyNTZjOC44IDAgMTYgNy4yIDE2IDE2djE2aDQ4VjI3MmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDYwOHY0OGgxNmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg2MDh2NDhoMTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZINjA4djE2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjQ4MEg1Mjh2MTZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWNDgwSDQ0OHYxNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY0ODBINDAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDE2VjQwMEg0MDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoMTZWMzIwSDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmgxNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnYxNmg0OFYyNzJjMC04LjggNy4yLTE2IDE2LTE2em0xNiAxMTJoNDhWMzIwSDUyOHY0OHptMCA4MGg0OFY0MDBINTI4djQ4ek00NDggMzIwdjQ4aDQ4VjMyMEg0NDh6bTAgODB2NDhoNDhWNDAwSDQ0OHpcIl19LGhWPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJyaWRnZS13YXRlclwiLGljb246WzU3Niw1MTIsW10sXCJlNGNlXCIsXCJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NEg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzUuNmMwIDE1LjctMTIuNyAyOC40LTI4LjQgMjguNGMtMzcuMyAwLTY3LjYgMzAuMi02Ny42IDY3LjZWMzUyLjVjLTEyLjkgMC0yNS44IDMuOS0zNi44IDExLjdjLTE4IDEyLjQtNDAuMSAyMC4zLTU5LjIgMjAuM2gwbDAtLjVWMjU2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2VjM4NGwwIC41Yy0xOSAwLTQxLjItNy45LTU5LjEtMjAuM2MtMTEuMS03LjgtMjQtMTEuNy0zNi45LTExLjdWMjI3LjZDOTYgMTkwLjIgNjUuOCAxNjAgMjguNCAxNjBDMTIuNyAxNjAgMCAxNDcuMyAwIDEzMS42Vjk2ek0zMDYuNSAzODkuOUMzMjkgNDA1LjQgMzU2LjUgNDE2IDM4NCA0MTZjMjYuOSAwIDU1LjQtMTAuOCA3Ny40LTI2LjFsMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgNDY5LjcgNDE3IDQ4MCAzODQgNDgwYy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS40IDI3LjMtMTAuMSAzOS4yLTEuN2wwIDBDMTM2LjcgNDA1LjIgMTY1LjEgNDE2IDE5MiA0MTZjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xYzExLjEtNy45IDI1LjktNy45IDM3IDB6XCJdfSxDVj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24tYm9vdGhcIixpY29uOls1NzYsNTEyLFtdLFwiZjc1NlwiLFwiTTI1NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYxOTJoNjRWMzJ6bTMyMCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMyek0yMjQgNTEyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjMyMEgxOTJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyek0zMjAgMGMtOS4zIDAtMTguMSA0LTI0LjIgMTFzLTguOCAxNi4zLTcuNSAyNS41bDMxLjIgMjE4LjZMMjg4LjYgNDA5LjdjLTMuNSAxNy4zIDcuOCAzNC4yIDI1LjEgMzcuN3MzNC4yLTcuOCAzNy43LTI1LjFsLjctMy42YzEuMyAxNi40IDE1LjEgMjkuNCAzMS45IDI5LjRjMTcuNyAwIDMyLTE0LjMgMzItMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMjB6TTExMiA4MGMwLTI2LjUtMjEuNS00OC00OC00OFMxNiA1My41IDE2IDgwczIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OHptMCAyNjEuM1YyNjkuM2w0LjcgNC43YzkgOSAyMS4yIDE0LjEgMzMuOSAxNC4xSDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxNTcuM2wtNDEuNi00MS42Yy0xNC4zLTE0LjMtMzMuOC0yMi40LTU0LTIyLjRDMjcuNiAxNjAgMCAxODcuNiAwIDIyMS42djU1LjdsMCAuOVY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRsMzIgNDIuN1Y0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0MjEuM2MwLTEwLjQtMy40LTIwLjUtOS42LTI4LjhMMTEyIDM0MS4zelwiXX0sTFY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGV4dC13aWR0aFwiLGljb246WzQ0OCw1MTIsW10sXCJmMDM1XCIsXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NHY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjk2SDE5MmwwIDEyOEgxNzZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjU2bDAtMTI4SDM4NHYzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDIyNCAzMnpNOS40IDM2MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42VjQxNkgzMjB2MzJjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45cy0xOS44IDE2LjYtMTkuOCAyOS42djMySDEyOFYzMjBjMC0xMi45LTcuOC0yNC42LTE5LjgtMjkuNnMtMjUuNy0yLjItMzQuOSA2LjlsLTY0IDY0elwiXX0scFY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGF0LXdpemFyZFwiLGljb246WzUxMiw1MTIsW10sXCJmNmU4XCIsXCJNNjQgNDE2TDE2OC42IDE4MC43YzE1LjMtMzQuNCA0MC4zLTYzLjUgNzItODMuN2wxNDYuOS05NGMzLTEuOSA2LjUtMi45IDEwLTIuOUM0MDcuNyAwIDQxNiA4LjMgNDE2IDE4LjZ2MS42YzAgMi42LS41IDUuMS0xLjQgNy41TDM1NC44IDE3Ni45Yy0xLjkgNC43LTIuOCA5LjctMi44IDE0LjdjMCA1LjUgMS4yIDExIDMuNCAxNi4xTDQ0OCA0MTZIMjQwLjlsMTEuOC0zNS40IDQwLjQtMTMuNWM2LjUtMi4yIDEwLjktOC4zIDEwLjktMTUuMnMtNC40LTEzLTEwLjktMTUuMmwtNDAuNC0xMy41LTEzLjUtNDAuNEMyMzcgMjc2LjQgMjMwLjkgMjcyIDIyNCAyNzJzLTEzIDQuNC0xNS4yIDEwLjlsLTEzLjUgNDAuNC00MC40IDEzLjVDMTQ4LjQgMzM5IDE0NCAzNDUuMSAxNDQgMzUyczQuNCAxMyAxMC45IDE1LjJsNDAuNCAxMy41TDIwNy4xIDQxNkg2NHpNMjc5LjYgMTQxLjVjLTEuMS0zLjMtNC4xLTUuNS03LjYtNS41cy02LjUgMi4yLTcuNiA1LjVsLTYuNyAyMC4yLTIwLjIgNi43Yy0zLjMgMS4xLTUuNSA0LjEtNS41IDcuNnMyLjIgNi41IDUuNSA3LjZsMjAuMiA2LjcgNi43IDIwLjJjMS4xIDMuMyA0LjEgNS41IDcuNiA1LjVzNi41LTIuMiA3LjYtNS41bDYuNy0yMC4yIDIwLjItNi43YzMuMy0xLjEgNS41LTQuMSA1LjUtNy42cy0yLjItNi41LTUuNS03LjZsLTIwLjItNi43LTYuNy0yMC4yek0zMiA0NDhINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXX0sZFY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVuLWZhbmN5XCIsaWNvbjpbNTEyLDUxMixbMTI4Mzk1LDEwMDAyXSxcImY1YWNcIixcIk0zNzMuNSAyNy4xQzM4OC41IDkuOSA0MTAuMiAwIDQzMyAwYzQzLjYgMCA3OSAzNS40IDc5IDc5YzAgMjIuOC05LjkgNDQuNi0yNy4xIDU5LjZMMjc3LjcgMzE5bC0xMC4zLTEwLjMtNjQtNjRMMTkzIDIzNC4zIDM3My41IDI3LjF6TTE3MC4zIDI1Ni45bDEwLjQgMTAuNCA2NCA2NCAxMC40IDEwLjQtMTkuMiA4My40Yy0zLjkgMTcuMS0xNi45IDMwLjctMzMuOCAzNS40TDI0LjQgNTEwLjNsOTUuNC05NS40YzIuNiAuNyA1LjQgMS4xIDguMyAxLjFjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJjMCAyLjkgLjQgNS42IDEuMSA4LjNMMS43IDQ4Ny42IDUxLjUgMzEwYzQuNy0xNi45IDE4LjMtMjkuOSAzNS40LTMzLjhsODMuNC0xOS4yelwiXX0seDY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLWRpZ2dpbmdcIixpY29uOls1NzYsNTEyLFtcImRpZ2dpbmdcIl0sXCJmODVlXCIsXCJNMzA0IDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpNOS44IDIxNC44YzUuMS0xMi4yIDE5LjEtMTggMzEuNC0xMi45TDYwLjcgMjEwbDIyLjktMzguMUM5OS45IDE0NC42IDEyOS4zIDEyOCAxNjEgMTI4YzUxLjQgMCA5NyAzMi45IDExMy4zIDgxLjdsMzQuNiAxMDMuNyA3OS4zIDMzLjEgMzQuMi00NS42YzYuNC04LjUgMTYuNi0xMy4zIDI3LjItMTIuOHMyMC4zIDYuNCAyNS44IDE1LjVsOTYgMTYwYzUuOSA5LjkgNi4xIDIyLjIgLjQgMzIuMnMtMTYuMyAxNi4yLTI3LjggMTYuMkgyODhjLTExLjEgMC0yMS40LTUuNy0yNy4yLTE1LjJzLTYuNC0yMS4yLTEuNC0zMS4xbDE2LTMyYzUuNC0xMC44IDE2LjUtMTcuNyAyOC42LTE3LjdoMzJsMjIuNS0zMEwyMi44IDI0Ni4yYy0xMi4yLTUuMS0xOC0xOS4xLTEyLjktMzEuNHptODIuOCA5MS44bDExMiA0OGMxMS44IDUgMTkuNCAxNi42IDE5LjQgMjkuNHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0MDUuMWwtNjAuNi0yNi0zNyAxMTFjLTUuNiAxNi44LTIzLjcgMjUuOC00MC41IDIwLjJTLTMuOSA0ODYuNiAxLjYgNDY5LjlsNDgtMTQ0IDExLTMzIDMyIDEzLjd6XCJdfSx1Vj14Nix4Vj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0cmFzaFwiLGljb246WzQ0OCw1MTIsW10sXCJmMWY4XCIsXCJNMTM1LjIgMTcuN0wxMjggMzJIMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2SDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjBsLTcuMi0xNC4zQzMwNy40IDYuOCAyOTYuMyAwIDI4NC4yIDBIMTYzLjhjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3Ljd6TTQxNiAxMjhIMzJMNTMuMiA0NjdjMS42IDI1LjMgMjIuNiA0NSA0Ny45IDQ1SDM0Ni45YzI1LjMgMCA0Ni4zLTE5LjcgNDcuOS00NUw0MTYgMTI4elwiXX0scT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJnYXVnZS1zaW1wbGVcIixpY29uOls1MTIsNTEyLFtcImdhdWdlLXNpbXBsZS1tZWRcIixcInRhY2hvbWV0ZXItYXZlcmFnZVwiXSxcImY2MjlcIixcIk01MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2ek0zMjAgMzUyYzAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM1Y4OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNFYyOTIuN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zYzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6XCJdfSxnVj1xLFNWPXEsTlY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9vay1tZWRpY2FsXCIsaWNvbjpbNDQ4LDUxMixbXSxcImY3ZTZcIixcIk0wIDk2QzAgNDMgNDMgMCA5NiAwSDM4NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJ2NjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzg0IDk2Yy01MyAwLTk2LTQzLTk2LTk2Vjk2ek02NCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzUyVjM4NEg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTIwOCAxMTJ2NDhIMTYwYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjI0aDQ4YzguOCAwIDE2LTcuMiAxNi0xNlYxNzZjMC04LjgtNy4yLTE2LTE2LTE2SDI3MlYxMTJjMC04LjgtNy4yLTE2LTE2LTE2SDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2elwiXX0sd1Y9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicG9vXCIsaWNvbjpbNTEyLDUxMixbMTI4MTY5XSxcImYyZmVcIixcIk0yNjguOSAuOWMtNS41LS43LTExIDEuNC0xNC41IDUuN3MtNC42IDEwLjEtMi44IDE1LjRjMi44IDguMiA0LjMgMTYuOSA0LjMgMjYuMWMwIDQ0LjEtMzUuNyA3OS45LTc5LjggODBIMTYwYy0zNS4zIDAtNjQgMjguNy02NCA2NGMwIDE5LjEgOC40IDM2LjMgMjEuNyA0OEgxMDRjLTM5LjggMC03MiAzMi4yLTcyIDcyYzAgMjMuMiAxMSA0My44IDI4IDU3Yy0zNC4xIDUuNy02MCAzNS4zLTYwIDcxYzAgMzkuOCAzMi4yIDcyIDcyIDcySDQ0MGMzOS44IDAgNzItMzIuMiA3Mi03MmMwLTM1LjctMjUuOS02NS4zLTYwLTcxYzE3LTEzLjIgMjgtMzMuOCAyOC01N2MwLTM5LjgtMzIuMi03Mi03Mi03MkgzOTQuM2MxMy4zLTExLjcgMjEuNy0yOC45IDIxLjctNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRoLTUuNWMzLjUtMTAgNS41LTIwLjggNS41LTMyYzAtNDguNi0zNi4yLTg4LjgtODMuMS05NS4xek0xOTIgMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTE2MC0zMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTAgMTA4LjNjMCAyLjQtLjcgNC44LTIuMiA2LjdjLTguMiAxMC41LTM5LjUgNDUtOTMuOCA0NXMtODUuNi0zNC42LTkzLjgtNDVjLTEuNS0xLjktMi4yLTQuMy0yLjItNi43YzAtNi44IDUuNS0xMi4zIDEyLjMtMTIuM0gzMzkuN2M2LjggMCAxMi4zIDUuNSAxMi4zIDEyLjN6XCJdfSxnNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJxdW90ZS1yaWdodFwiLGljb246WzQ0OCw1MTIsWzgyMjEsXCJxdW90ZS1yaWdodC1hbHRcIl0sXCJmMTBlXCIsXCJNNDQ4IDI5NmMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGgtOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg4YzMwLjkgMCA1Ni0yNS4xIDU2LTU2di04SDMyMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0aDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0djMyIDMyIDcyem0tMjU2IDBjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoOGMzMC45IDAgNTYtMjUuMSA1Ni01NnYtOEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0aDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0djMyIDMyIDcyelwiXX0sa1Y9ZzYsRz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzaGlydFwiLGljb246WzY0MCw1MTIsWzEyODA4NSxcInQtc2hpcnRcIixcInRzaGlydFwiXSxcImY1NTNcIixcIk0yMTEuOCAwYzcuOCAwIDE0LjMgNS43IDE2LjcgMTMuMkMyNDAuOCA1MS45IDI3Ny4xIDgwIDMyMCA4MHM3OS4yLTI4LjEgOTEuNS02Ni44QzQxMy45IDUuNyA0MjAuNCAwIDQyOC4yIDBoMTIuNmMyMi41IDAgNDQuMiA3LjkgNjEuNSAyMi4zTDYyOC41IDEyNy40YzYuNiA1LjUgMTAuNyAxMy41IDExLjQgMjIuMXMtMi4xIDE3LjEtNy44IDIzLjZsLTU2IDY0Yy0xMS40IDEzLjEtMzEuMiAxNC42LTQ0LjYgMy41TDQ4MCAxOTcuN1Y0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMjI0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxOTcuN2wtNTEuNSA0Mi45Yy0xMy4zIDExLjEtMzMuMSA5LjYtNDQuNi0zLjVsLTU2LTY0Yy01LjctNi41LTguNS0xNS03LjgtMjMuNnM0LjgtMTYuNiAxMS40LTIyLjFMMTM3LjcgMjIuM0MxNTUgNy45IDE3Ni43IDAgMTk5LjIgMGgxMi42elwiXX0sYlY9RyxBVj1HLEJWPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImN1YmVzXCIsaWNvbjpbNTc2LDUxMixbXSxcImYxYjNcIixcIk0yOTAuOCA0OC42bDc4LjQgMjkuN0wyODggMTA5LjUgMjA2LjggNzguM2w3OC40LTI5LjdjMS44LS43IDMuOC0uNyA1LjcgMHpNMTM2IDkyLjVWMjA0LjdjLTEuMyAuNC0yLjYgLjgtMy45IDEuM2wtOTYgMzYuNEMxNC40IDI1MC42IDAgMjcxLjUgMCAyOTQuN1Y0MTMuOWMwIDIyLjIgMTMuMSA0Mi4zIDMzLjUgNTEuM2w5NiA0Mi4yYzE0LjQgNi4zIDMwLjcgNi4zIDQ1LjEgMEwyODggNDU3LjVsMTEzLjUgNDkuOWMxNC40IDYuMyAzMC43IDYuMyA0NS4xIDBsOTYtNDIuMmMyMC4zLTguOSAzMy41LTI5LjEgMzMuNS01MS4zVjI5NC43YzAtMjMuMy0xNC40LTQ0LjEtMzYuMS01Mi40bC05Ni0zNi40Yy0xLjMtLjUtMi42LS45LTMuOS0xLjNWOTIuNWMwLTIzLjMtMTQuNC00NC4xLTM2LjEtNTIuNGwtOTYtMzYuNGMtMTIuOC00LjgtMjYuOS00LjgtMzkuNyAwbC05NiAzNi40QzE1MC40IDQ4LjQgMTM2IDY5LjMgMTM2IDkyLjV6TTM5MiAyMTAuNmwtODIuNCAzMS4yVjE1Mi42TDM5MiAxMjF2ODkuNnpNMTU0LjggMjUwLjlsNzguNCAyOS43TDE1MiAzMTEuNyA3MC44IDI4MC42bDc4LjQtMjkuN2MxLjgtLjcgMy44LS43IDUuNyAwem0xOC44IDIwNC40VjM1NC44TDI1NiAzMjMuMnY5NS45bC04Mi40IDM2LjJ6TTQyMS4yIDI1MC45YzEuOC0uNyAzLjgtLjcgNS43IDBsNzguNCAyOS43TDQyNCAzMTEuN2wtODEuMi0zMS4xIDc4LjQtMjkuN3pNNTIzLjIgNDIxLjJsLTc3LjYgMzQuMVYzNTQuOEw1MjggMzIzLjJ2OTAuN2MwIDMuMi0xLjkgNi00LjggNy4zelwiXX0sVFY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZGl2aWRlXCIsaWNvbjpbNDQ4LDUxMixbMTAxMzUsMjQ3XSxcImY1MjlcIixcIk0yNzIgOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4em0wIDMyMGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6TTQwMCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDAwelwiXX0sUzY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGVuZ2Utc2lnblwiLGljb246WzM4NCw1MTIsWzgzNzYsXCJ0ZW5nZVwiXSxcImY3ZDdcIixcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0ek0wIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMkgxOTIgMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0SDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnpcIl19LHlWPVM2LFBWPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhlYWRwaG9uZXNcIixpY29uOls1MTIsNTEyLFsxMjc5MTFdLFwiZjAyNVwiLFwiTTI1NiA4MEMxNDkuOSA4MCA2Mi40IDE1OS40IDQ5LjYgMjYyYzkuNC0zLjggMTkuNi02IDMwLjQtNmMyNi41IDAgNDggMjEuNSA0OCA0OFY0MzJjMCAyNi41LTIxLjUgNDgtNDggNDhjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjM4NCAzMzYgMjg4QzAgMTQ2LjYgMTE0LjYgMzIgMjU2IDMyczI1NiAxMTQuNiAyNTYgMjU2djQ4IDQ4IDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy0yNi41IDAtNDgtMjEuNS00OC00OFYzMDRjMC0yNi41IDIxLjUtNDggNDgtNDhjMTAuOCAwIDIxIDIuMSAzMC40IDZDNDQ5LjYgMTU5LjQgMzYyLjEgODAgMjU2IDgwelwiXX0sRlY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZHMtaG9sZGluZ1wiLGljb246WzY0MCw1MTIsW10sXCJmNGMyXCIsXCJNODAgMTA0YzAtMjIuMS0xNy45LTQwLTQwLTQwUzAgODEuOSAwIDEwNHY1NiA2NFYzMjUuNWMwIDI1LjUgMTAuMSA0OS45IDI4LjEgNjcuOUwxMjggNDkzLjNjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0gyNDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzg1LjFjMC0yOS43LTExLjgtNTguMi0zMi44LTc5LjJsLTI1LjMtMjUuMyAwIDAtMTUuMi0xNS4yLTMyLTMyYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wzMiAzMiAxNS4yIDE1LjJjMTEgMTEgOS4yIDI5LjItMy43IDM3LjhjLTkuNyA2LjUtMjIuNyA1LjItMzEtMy4xTDk4LjcgMzA5LjVjLTEyLTEyLTE4LjctMjguMy0xOC43LTQ1LjNWMjI0IDE0NCAxMDR6bTQ4MCAwdjQwIDgwIDQwLjJjMCAxNy02LjcgMzMuMy0xOC43IDQ1LjNsLTUxLjEgNTEuMWMtOC4zIDguMy0yMS4zIDkuNi0zMSAzLjFjLTEyLjktOC42LTE0LjctMjYuOS0zLjctMzcuOGwxNS4yLTE1LjIgMzItMzJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTMyIDMyLTE1LjIgMTUuMiAwIDAtMjUuMyAyNS4zYy0yMSAyMS0zMi44IDQ5LjUtMzIuOCA3OS4yVjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg2Ni43YzE3IDAgMzMuMy02LjcgNDUuMy0xOC43bDk5LjktOTkuOWMxOC0xOCAyOC4xLTQyLjQgMjguMS02Ny45VjIyNCAxNjAgMTA0YzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwelwiXX0sRFY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZHMtY2xhcHBpbmdcIixpY29uOls1NzYsNTEyLFtdLFwiZTFhOFwiLFwiTTM2OCAxNlY4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYxNmMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0tOTguNyA3LjFsMzIgNDhjNC45IDcuNCAyLjkgMTcuMy00LjQgMjIuMnMtMTcuMyAyLjktMjIuMi00LjRsLTMyLTQ4Yy00LjktNy40LTIuOS0xNy4zIDQuNC0yMi4yczE3LjMtMi45IDIyLjIgNC40ek0xNjcgMTE5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDMyNC43IDI0Mi43YzEwLjEgMTAuMSAyNy4zIDIuOSAyNy4zLTExLjNWMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzQ1LjZjMCA1Ny4xLTMwIDExMC03OC45IDEzOS40Yy02NCAzOC40LTE0NS44IDI4LjMtMTk4LjUtMjQuNEwzOSAzNjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1MyA1M2M2LjEgNi4xIDE2IDYuMSAyMi4xIDBzNi4xLTE2IDAtMjIuMUw1NSAyNjVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw5MyA5M2M2LjEgNi4xIDE2IDYuMSAyMi4xIDBzNi4xLTE2IDAtMjIuMUw4NyAxODVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxMTcgMTE3YzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xbC05My05M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6TTQ2NS4xIDQ4NC45Yy0yNC4yIDE0LjUtNTAuOSAyMi4xLTc3LjcgMjMuMWM0OC4xLTM5LjYgNzYuNi05OSA3Ni42LTE2Mi40bDAtOTguMWM4LjItLjEgMTYtNi40IDE2LTE2VjE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjM0NS42YzAgNTcuMS0zMCAxMTAtNzguOSAxMzkuNHpNNDU2LjkgMTguN2M3LjQgNC45IDkuMyAxNC44IDQuNCAyMi4ybC0zMiA0OGMtNC45IDcuNC0xNC44IDkuMy0yMi4yIDQuNHMtOS4zLTE0LjgtNC40LTIyLjJsMzItNDhjNC45LTcuNCAxNC44LTkuMyAyMi4yLTQuNHpcIl19LFJWPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJlcHVibGljYW5cIixpY29uOls2NDAsNTEyLFtdLFwiZjc1ZVwiLFwiTTAgMTkyQzAgMTAzLjYgNzEuNiAzMiAxNjAgMzJIMzg0Yzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwdjY0SDBWMTkyem00MTUuOS02NGMtMi40IDAtNC43IDEuMy01LjcgMy40bC0xMi42IDI0LjYtMjguMiA0Yy0yLjQgLjMtNC40IDItNS4yIDQuMnMtLjEgNC43IDEuNiA2LjNsMjAuNCAxOS4yLTQuOCAyNy4xYy0uNCAyLjMgLjYgNC43IDIuNSA2czQuNiAxLjYgNi43IC41bDI1LjItMTIuOCAyNS4yIDEyLjhjMi4yIDEuMSA0LjggLjkgNi43LS41czMtMy43IDIuNS02bC00LjgtMjcuMUw0NjYgMTcwLjVjMS43LTEuNiAyLjQtNC4xIDEuNi02LjNzLTIuOC0zLjktNS4yLTQuMmwtMjguMi00LTEyLjYtMjQuNmMtMS4xLTIuMS0zLjMtMy40LTUuNy0zLjR6bS0xMzguMyAzLjRjLTEuMS0yLjEtMy4zLTMuNC01LjctMy40cy00LjcgMS4zLTUuNyAzLjRsLTEyLjYgMjQuNi0yOC4yIDRjLTIuNCAuMy00LjQgMi01LjIgNC4ycy0uMSA0LjcgMS42IDYuM2wyMC40IDE5LjItNC44IDI3LjFjLS40IDIuMyAuNiA0LjcgMi41IDZzNC42IDEuNiA2LjcgLjVsMjUuMi0xMi44IDI1LjIgMTIuOGMyLjIgMS4xIDQuOCAuOSA2LjctLjVzMy0zLjcgMi41LTZsLTQuOC0yNy4xTDMyMiAxNzAuNWMxLjctMS42IDIuNC00LjEgMS42LTYuM3MtMi44LTMuOS01LjItNC4ybC0yOC4yLTQtMTIuNi0yNC42ek0xMjcuOSAxMjhjLTIuNCAwLTQuNyAxLjMtNS43IDMuNGwtMTIuNiAyNC42LTI4LjIgNGMtMi40IC4zLTQuNCAyLTUuMiA0LjJzLS4xIDQuNyAxLjYgNi4zbDIwLjQgMTkuMi00LjggMjcuMWMtLjQgMi4zIC42IDQuNyAyLjUgNnM0LjYgMS42IDYuNyAuNWwyNS4yLTEyLjggMjUuMiAxMi44YzIuMiAxLjEgNC44IC45IDYuNy0uNXMzLTMuNyAyLjUtNmwtNC44LTI3LjFMMTc4IDE3MC41YzEuNy0xLjYgMi40LTQuMSAxLjYtNi4zcy0yLjgtMy45LTUuMi00LjJsLTI4LjItNC0xMi42LTI0LjZjLTEuMS0yLjEtMy4zLTMuNC01LjctMy40em0uMSAxNjBIMzIwaDk2IDMyIDY0IDMydjMyIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2NDhjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBWMzUySDQ0OHYzMiA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM4NEgxMjh2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM4NCAyODhIMTI4elwiXX0sVVY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctbGVmdFwiLGljb246WzQ0OCw1MTIsWzg1OTJdLFwiZjA2MFwiLFwiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4yIDI4OCA0MTYgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMDYuNyAwTDIxNC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwelwiXX0scVY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLWNpcmNsZS14bWFya1wiLGljb246WzU3Niw1MTIsW10sXCJlNTQzXCIsXCJNMjA4IDQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpNMTUyIDM1MlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjU2LjlMNTkuNCAzMDQuNWMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTcuNC0yOC45IDQ4LjYtNDYuNiA4Mi4zLTQ2LjZoMjkuN2MzMy43IDAgNjQuOSAxNy43IDgyLjMgNDYuNmw0NC45IDc0LjdjLTE2LjEgMTcuNi0yOC42IDM4LjUtMzYuNiA2MS41Yy0xLjktMS44LTMuNS0zLjktNC45LTYuM0wyMzIgMjU2LjlWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM1MkgxNTJ6TTQzMiA1MTJjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHMtNjQuNSAxNDQtMTQ0IDE0NHptNTkuMy0xODAuN2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwTDQzMiAzNDUuNGwtMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42TDQwOS40IDM2OGwtMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBMNDMyIDM5MC42bDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZMNDU0LjYgMzY4bDM2LjctMzYuN3pcIl19LEdWPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJ1bGVyXCIsaWNvbjpbNTEyLDUxMixbMTI4MjA3XSxcImY1NDVcIixcIk0xNzcuOSA0OTQuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMTcuOSA0MDEuOWMtMTguNy0xOC43LTE4LjctNDkuMSAwLTY3LjlsNTAuNy01MC43IDQ4IDQ4YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNDgtNDggNDEuNC00MS40IDQ4IDQ4YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNDgtNDggNDEuNC00MS40IDQ4IDQ4YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNDgtNDggNDEuNC00MS40IDQ4IDQ4YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNDgtNDggNTAuNy01MC43YzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwbDkyLjEgOTIuMWMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOUwxNzcuOSA0OTQuMXpcIl19LFdWPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFsaWduLWxlZnRcIixpY29uOls0NDgsNTEyLFtdLFwiZjAzNlwiLFwiTTI4OCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJIMjU2YzE3LjcgMCAzMiAxNC4zIDMyIDMyem0wIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgyNTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyelwiXX0sRVY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZGljZS1kNlwiLGljb246WzQ0OCw1MTIsW10sXCJmNmQxXCIsXCJNMjE2LjMgMmM0LjgtMi42IDEwLjUtMi42IDE1LjMgMEw0MjIuMyAxMDZjNS4xIDIuOCA4LjMgOC4yIDguMyAxNHMtMy4yIDExLjItOC4zIDE0TDIzMS43IDIzOGMtNC44IDIuNi0xMC41IDIuNi0xNS4zIDBMMjUuNyAxMzRjLTUuMS0yLjgtOC4zLTguMi04LjMtMTRzMy4yLTExLjIgOC4zLTE0TDIxNi4zIDJ6TTIzLjcgMTcwbDE3NiA5NmM1LjEgMi44IDguMyA4LjIgOC4zIDE0VjQ5NmMwIDUuNi0zIDEwLjktNy44IDEzLjhzLTEwLjkgMy0xNS44IC4zTDguMyA0MTRDMy4yIDQxMS4yIDAgNDA1LjkgMCA0MDBWMTg0YzAtNS42IDMtMTAuOSA3LjgtMTMuOHMxMC45LTMgMTUuOC0uM3ptNDAwLjcgMGM1LTIuNyAxMS0yLjYgMTUuOCAuM3M3LjggOC4xIDcuOCAxMy44VjQwMGMwIDUuOS0zLjIgMTEuMi04LjMgMTRsLTE3NiA5NmMtNSAyLjctMTEgMi42LTE1LjgtLjNzLTcuOC04LjEtNy44LTEzLjhWMjgwYzAtNS45IDMuMi0xMS4yIDguMy0xNGwxNzYtOTZ6XCJdfSxJVj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyZXN0cm9vbVwiLGljb246WzY0MCw1MTIsW10sXCJmN2JkXCIsXCJNMTc2IDQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpNMTIwIDM1MlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzI1LjJjLTguMSA5LjItMjEuMSAxMy4yLTMzLjUgOS40Yy0xNi45LTUuMy0yNi4zLTIzLjItMjEtNDAuMWwzMC45LTk5LjFDNDQuOSAxNTUuMyA4MiAxMjggMTI0IDEyOGg4YzQyIDAgNzkuMSAyNy4zIDkxLjYgNjcuNGwzMC45IDk5LjFjNS4zIDE2LjktNC4xIDM0LjgtMjEgNDAuMWMtMTIuNCAzLjktMjUuNC0uMi0zMy41LTkuNFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUySDEyMHpNMzIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRWNDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjI0YzAtMTMuMyAxMC43LTI0IDI0LTI0ek01NjAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4ek00NDAgNDgwVjM4NEg0MjIuMmMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFsOS0yNi45Yy0zLjIgMC02LjQtLjUtOS41LTEuNWMtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQyOC40IDE1Ni45IDQ2Ny42IDEyOCA1MTIgMTI4czgzLjYgMjguOSA5Ni44IDcxLjJsMjkuNyA5NS4yYzUuMyAxNi45LTQuMSAzNC44LTIxIDQwLjFjLTMuMiAxLTYuNCAxLjUtOS41IDEuNWw5IDI2LjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xSDU4NHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzODRINTA0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyelwiXX0sT1Y9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwialwiLGljb246WzMyMCw1MTIsWzEwNl0sXCI0YVwiLFwiTTI4OCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYzMjBjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0MDguNCAwIDMyMFYyODhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnYzMmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXX0sWFY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXNlcnMtdmlld2ZpbmRlclwiLGljb246WzY0MCw1MTIsW10sXCJlNTk1XCIsXCJNNDggNDhoODhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMzJDMTQuMyAwIDAgMTQuMyAwIDMyVjEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjQ4ek0xNzUuOCAyMjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHptLTI2LjUgMzJDMTE5LjkgMjU2IDk2IDI3OS45IDk2IDMwOS4zYzAgMTQuNyAxMS45IDI2LjcgMjYuNyAyNi43aDU2LjFjOC0zNC4xIDMyLjgtNjEuNyA2NS4yLTczLjZjLTcuNS00LjEtMTYuMi02LjQtMjUuMy02LjRIMTQ5LjN6bTM2OCA4MGMxNC43IDAgMjYuNy0xMS45IDI2LjctMjYuN2MwLTI5LjUtMjMuOS01My4zLTUzLjMtNTMuM0g0MjEuM2MtOS4yIDAtMTcuOCAyLjMtMjUuMyA2LjRjMzIuNCAxMS45IDU3LjIgMzkuNSA2NS4yIDczLjZoNTYuMXptLTg5LjQgMGMtOC42LTI0LjMtMjkuOS00Mi42LTU1LjktNDdjLTMuOS0uNy03LjktMS0xMi0xSDI4MGMtNC4xIDAtOC4xIC4zLTEyIDFjLTI2IDQuNC00Ny4zIDIyLjctNTUuOSA0N2MtMi43IDcuNS00LjEgMTUuNi00LjEgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRINDA4YzEzLjMgMCAyNC0xMC43IDI0LTI0YzAtOC40LTEuNC0xNi41LTQuMS0yNHpNNDY0IDIyNGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4em0tODAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRzMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0ek01MDQgNDhoODh2ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkg1MDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6TTQ4IDQ2NFYzNzZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDEzNmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEg0OHptNDU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM3NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY4OEg1MDR6XCJdfSxRVj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLXZpZGVvXCIsaWNvbjpbMzg0LDUxMixbXSxcImYxYzhcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTY0IDI4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjg4ek0zMDAuOSAzOTcuOUwyNTYgMzY4VjMwNGw0NC45LTI5LjljMi0xLjMgNC40LTIuMSA2LjgtMi4xYzYuOCAwIDEyLjMgNS41IDEyLjMgMTIuM1YzODcuN2MwIDYuOC01LjUgMTIuMy0xMi4zIDEyLjNjLTIuNCAwLTQuOC0uNy02LjgtMi4xelwiXX0sTjY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXAtcmlnaHQtZnJvbS1zcXVhcmVcIixpY29uOls0NDgsNTEyLFtcImV4dGVybmFsLWxpbmstYWx0XCJdLFwiZjM1ZFwiLFwiTTI4OCAzMmMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlMMzA2LjcgMTI4IDE2OS40IDI2NS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDM1MiAxNzMuM2w0MS40IDQxLjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlzMTkuOC0xNi42IDE5LjgtMjkuNlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgyODh6TTgwIDY0QzM1LjggNjQgMCA5OS44IDAgMTQ0VjQwMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MEgzMzZjNDQuMiAwIDgwLTM1LjggODAtODBWMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjgwYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZoODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIODB6XCJdfSxLVj1ONix3Nj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0YWJsZS1jZWxsc1wiLGljb246WzUxMiw1MTIsW1widGhcIl0sXCJmMDBhXCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em04OCA2NHY2NEg2NFY5Nmg4OHptNTYgMGg4OHY2NEgyMDhWOTZ6bTI0MCAwdjY0SDM2MFY5Nmg4OHpNNjQgMjI0aDg4djY0SDY0VjIyNHptMjMyIDB2NjRIMjA4VjIyNGg4OHptNjQgMGg4OHY2NEgzNjBWMjI0ek0xNTIgMzUydjY0SDY0VjM1Mmg4OHptNTYgMGg4OHY2NEgyMDhWMzUyem0yNDAgMHY2NEgzNjBWMzUyaDg4elwiXX0salY9dzYsSlY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsZS1wZGZcIixpY29uOlszODQsNTEyLFtdLFwiZjFjMVwiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNNjQgMjI0SDg4YzMwLjkgMCA1NiAyNS4xIDU2IDU2cy0yNS4xIDU2LTU2IDU2SDgwdjMyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjMyMCAyNDBjMC04LjggNy4yLTE2IDE2LTE2em0yNCA4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEg4MHY0OGg4em03Mi02NGMwLTguOCA3LjItMTYgMTYtMTZoMjRjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NjRjMCAyNi41LTIxLjUgNDgtNDggNDhIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwem0zMiAxMTJoOGM4LjggMCAxNi03LjIgMTYtMTZWMjcyYzAtOC44LTcuMi0xNi0xNi0xNmgtOHY5NnptOTYtMTI4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDMwNHYzMmgzMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzMDR2NDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzA0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdfSxrNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib29rLWJpYmxlXCIsaWNvbjpbNDQ4LDUxMixbXCJiaWJsZVwiXSxcImY2NDdcIixcIk05NiAwQzQzIDAgMCA0MyAwIDk2VjQxNmMwIDUzIDQzIDk2IDk2IDk2SDM4NGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJIMzg0IDk2em0wIDM4NEgzNTJ2NjRIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTIwOCA4MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyVjMwNGMwIDguOC03LjIgMTYtMTYgMTZIMjI0Yy04LjggMC0xNi03LjItMTYtMTZWMTkySDE2MGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZoNDhWODB6XCJdfSxaVj1rNixZVj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJvXCIsaWNvbjpbNDQ4LDUxMixbMTExXSxcIjRmXCIsXCJNMjI0IDk2QzEzNS42IDk2IDY0IDE2Ny42IDY0IDI1NnM3MS42IDE2MCAxNjAgMTYwczE2MC03MS42IDE2MC0xNjBzLTcxLjYtMTYwLTE2MC0xNjB6TTAgMjU2QzAgMTMyLjMgMTAwLjMgMzIgMjI0IDMyczIyNCAxMDAuMyAyMjQgMjI0cy0xMDAuMyAyMjQtMjI0IDIyNFMwIDM3OS43IDAgMjU2elwiXX0sYjY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3VpdGNhc2UtbWVkaWNhbFwiLGljb246WzUxMiw1MTIsW1wibWVka2l0XCJdLFwiZjBmYVwiLFwiTTE4NCA0OEgzMjhjNC40IDAgOCAzLjYgOCA4Vjk2SDE3NlY1NmMwLTQuNCAzLjYtOCA4LTh6bS01NiA4Vjk2djMyVjQ4MEgzODRWMTI4IDk2IDU2YzAtMzAuOS0yNS4xLTU2LTU2LTU2SDE4NGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6TTk2IDk2SDY0QzI4LjcgOTYgMCAxMjQuNyAwIDE2MFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIOTZWOTZ6TTQxNiA0ODBoMzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDQxNlY0ODB6TTIyNCAyMDhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI4OHY0OGMwIDguOC03LjIgMTYtMTYgMTZIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMzIwSDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MmMwLTguOCA3LjItMTYgMTYtMTZoNDhWMjA4elwiXX0sX1Y9YjYsJFY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXNlci1zZWNyZXRcIixpY29uOls0NDgsNTEyLFsxMjgzNzNdLFwiZjIxYlwiLFwiTTIyNCAxNmMtNi43IDAtMTAuOC0yLjgtMTUuNS02LjFDMjAxLjkgNS40IDE5NCAwIDE3NiAwYy0zMC41IDAtNTIgNDMuNy02NiA4OS40QzYyLjcgOTguMSAzMiAxMTIuMiAzMiAxMjhjMCAxNC4zIDI1IDI3LjEgNjQuNiAzNS45Yy0uNCA0LS42IDgtLjYgMTIuMWMwIDE3IDMuMyAzMy4yIDkuMyA0OEg0NS40QzM4IDIyNCAzMiAyMzAgMzIgMjM3LjRjMCAxLjcgLjMgMy40IDEgNWwzOC44IDk2LjlDMjguMiAzNzEuOCAwIDQyMy44IDAgNDgyLjNDMCA0OTguNyAxMy4zIDUxMiAyOS43IDUxMkg0MTguM2MxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuN2MwLTU4LjUtMjguMi0xMTAuNC03MS43LTE0M0w0MTUgMjQyLjRjLjYtMS42IDEtMy4zIDEtNWMwLTcuNC02LTEzLjQtMTMuNC0xMy40SDM0Mi43YzYtMTQuOCA5LjMtMzEgOS4zLTQ4YzAtNC4xLS4yLTguMS0uNi0xMi4xQzM5MSAxNTUuMSA0MTYgMTQyLjMgNDE2IDEyOGMwLTE1LjgtMzAuNy0yOS45LTc4LTM4LjZDMzI0IDQzLjcgMzAyLjUgMCAyNzIgMGMtMTggMC0yNS45IDUuNC0zMi41IDkuOWMtNC43IDMuMy04LjggNi4xLTE1LjUgNi4xem01NiAyMDhIMjY3LjZjLTE2LjUgMC0zMS4xLTEwLjYtMzYuMy0yNi4yYy0yLjMtNy0xMi4yLTctMTQuNSAwYy01LjIgMTUuNi0xOS45IDI2LjItMzYuMyAyNi4ySDE2OGMtMjIuMSAwLTQwLTE3LjktNDAtNDBWMTY5LjZjMjguMiA0LjEgNjEgNi40IDk2IDYuNHM2Ny44LTIuMyA5Ni02LjRWMTg0YzAgMjIuMS0xNy45IDQwLTQwIDQwem0tODggOTZsMTYgMzJMMTc2IDQ4MCAxMjggMjg4bDY0IDMyem0xMjgtMzJMMjcyIDQ4MCAyNDAgMzUybDE2LTMyIDY0LTMyelwiXX0sY209e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwib3R0ZXJcIixpY29uOls2NDAsNTEyLFsxMjk0NDZdLFwiZjcwMFwiLFwiTTE4MS41IDE5Ny4xbDEyLjkgNi40YzUuOSAzIDEyLjQgNC41IDE5LjEgNC41YzIzLjUgMCA0Mi42LTE5LjEgNDIuNi00Mi42VjE0NGMwLTM1LjMtMjguNy02NC02NC02NEgxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0djIxLjRjMCAyMy41IDE5LjEgNDIuNiA0Mi42IDQyLjZjNi42IDAgMTMuMS0xLjUgMTkuMS00LjVsMTIuOS02LjQgOC40LTQuMkwxMzUuMSAxODVjLTQuNS0zLTcuMS04LTcuMS0xMy4zVjE2OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHYzLjdjMCA1LjMtMi43IDEwLjMtNy4xIDEzLjNsLTExLjggNy45IDguNCA0LjJ6bS04LjYgNDkuNEwxNjAgMjQwbC0xMi45IDYuNGMtMTIuNiA2LjMtMjYuNSA5LjYtNDAuNSA5LjZjLTMuNiAwLTcuMS0uMi0xMC42LS42di42YzAgMzUuMyAyOC43IDY0IDY0IDY0aDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NFYzMzYgMzIwYzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGM5LjQtNS40IDIwLjMtOC42IDMyLTguNlYyNDBjMC0yNi41IDIxLjUtNDggNDgtNDhjOC44IDAgMTYgNy4yIDE2IDE2djMyIDE2IDQ4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjA0LjNjMC00OC4yLTMwLjgtOTEtNzYuNi0xMDYuM2wtOC41LTIuOGMtOC0yLjctMTIuNi0xMS4xLTEwLjQtMTkuM3MxMC4zLTEzLjIgMTguNi0xMS42bDE5LjkgNEM1NzYgODYuMSA2NDAgMTY0LjIgNjQwIDI1NC45bDAgMS4xaDBjMCAxMjMuNy0xMDAuMyAyMjQtMjI0IDIyNGgtMS4xSDI1NmgtLjZDMTMyIDQ4MCAzMiAzODAgMzIgMjU2LjZWMjU2IDIxNi44Yy0xMC4xLTE0LjYtMTYtMzIuMy0xNi01MS40VjE0NGwwLTEuNEM2LjcgMTM5LjMgMCAxMzAuNSAwIDEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGgyLjhDNDQuOCA1OC4yIDgzLjMgMzIgMTI4IDMyaDY0YzQ0LjcgMCA4My4yIDI2LjIgMTAxLjIgNjRIMjk2YzEzLjMgMCAyNCAxMC43IDI0IDI0YzAgMTAuNS02LjcgMTkuMy0xNiAyMi42bDAgMS40djIxLjRjMCAxLjQgMCAyLjgtLjEgNC4zYzEyLTYuMiAyNS43LTkuNiA0MC4xLTkuNmg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyaC04Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY4aDU2LjRjLTE1LjIgMTctMjQuNCAzOS40LTI0LjQgNjRIMzIwYy00Mi4zIDAtNzguMi0yNy40LTkxLTY1LjNjLTUuMSAuOS0xMC4zIDEuMy0xNS42IDEuM2MtMTQuMSAwLTI3LjktMy4zLTQwLjUtOS42ek05NiAxNjBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6bTE0NC0xNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXX0sQTY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLWRyZXNzXCIsaWNvbjpbMzIwLDUxMixbXCJmZW1hbGVcIl0sXCJmMTgyXCIsXCJNMTYwIDk2Yy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6TTg4IDM4NEg3MC4yYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMUw5My4zIDI0OC4xIDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1My42LTg5LjJjMjAuMy0zMy43IDU2LjctNTQuMyA5Ni01NC4zaDExLjZjMzkuMyAwIDc1LjcgMjAuNiA5NiA1NC4zbDUzLjYgODkuMmM5LjEgMTUuMSA0LjIgMzQuOC0xMC45IDQzLjlzLTM0LjggNC4yLTQzLjktMTAuOWwtMzMuOS01Ni4zTDI2NSAzNjIuOWMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFIMjMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NEgxNTJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0elwiXX0sYW09QTYsc209e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29tbWVudC1kb2xsYXJcIixpY29uOls1MTIsNTEyLFtdLFwiZjY1MVwiLFwiTTI1NiA0NDhjMTQxLjQgMCAyNTYtOTMuMSAyNTYtMjA4UzM5Ny40IDMyIDI1NiAzMlMwIDEyNS4xIDAgMjQwYzAgNDUuMSAxNy43IDg2LjggNDcuNyAxMjAuOWMtMS45IDI0LjUtMTEuNCA0Ni4zLTIxLjQgNjIuOWMtNS41IDkuMi0xMS4xIDE2LjYtMTUuMiAyMS42Yy0yLjEgMi41LTMuNyA0LjQtNC45IDUuN2MtLjYgLjYtMSAxLjEtMS4zIDEuNGwtLjMgLjMgMCAwIDAgMCAwIDAgMCAwYy00LjYgNC42LTUuOSAxMS40LTMuNCAxNy40YzIuNSA2IDguMyA5LjkgMTQuOCA5LjljMjguNyAwIDU3LjYtOC45IDgxLjYtMTkuM2MyMi45LTEwIDQyLjQtMjEuOSA1NC4zLTMwLjZjMzEuOCAxMS41IDY3IDE3LjkgMTA0LjEgMTcuOXptMjAtMzEydjEzLjljNy41IDEuMiAxNC42IDIuOSAyMS4xIDQuN2MxMC43IDIuOCAxNyAxMy44IDE0LjIgMjQuNXMtMTMuOCAxNy0yNC41IDE0LjJjLTExLTIuOS0yMS42LTUtMzEuMi01LjJjLTcuOS0uMS0xNiAxLjgtMjEuNSA1Yy00LjggMi44LTYuMiA1LjYtNi4yIDkuM2MwIDEuOCAuMSAzLjUgNS4zIDYuN2M2LjMgMy44IDE1LjUgNi43IDI4LjMgMTAuNWwuNyAuMmMxMS4yIDMuNCAyNS42IDcuNyAzNy4xIDE1YzEyLjkgOC4xIDI0LjMgMjEuMyAyNC42IDQxLjZjLjMgMjAuOS0xMC41IDM2LjEtMjQuOCA0NWMtNy4yIDQuNS0xNS4yIDcuMy0yMy4yIDlWMzQ0YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMFYzMjkuNGMtMTAuMy0yLjItMjAtNS41LTI4LjItOC40bDAgMCAwIDBjLTIuMS0uNy00LjEtMS40LTYuMS0yLjFjLTEwLjUtMy41LTE2LjEtMTQuOC0xMi42LTI1LjNzMTQuOC0xNi4xIDI1LjMtMTIuNmMyLjUgLjggNC45IDEuNyA3LjIgMi40YzEzLjYgNC42IDI0IDguMSAzNS4xIDguNWM4LjYgLjMgMTYuNS0xLjYgMjEuNC00LjdjNC4xLTIuNSA2LTUuNSA1LjktMTAuNWMwLTIuOS0uOC01LTUuOS04LjJjLTYuMy00LTE1LjQtNi45LTI4LTEwLjdsLTEuNy0uNWMtMTAuOS0zLjMtMjQuNi03LjQtMzUuNi0xNGMtMTIuNy03LjctMjQuNi0yMC41LTI0LjctNDAuN2MtLjEtMjEuMSAxMS44LTM1LjcgMjUuOC00My45YzYuOS00LjEgMTQuNS02LjggMjIuMi04LjVWMTM2YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwelwiXX0sQjY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnVzaW5lc3MtdGltZVwiLGljb246WzY0MCw1MTIsW1wiYnJpZWZjYXNlLWNsb2NrXCJdLFwiZjY0YVwiLFwiTTE4NCA0OEgzMjhjNC40IDAgOCAzLjYgOCA4Vjk2SDE3NlY1NmMwLTQuNCAzLjYtOCA4LTh6bS01NiA4Vjk2SDY0QzI4LjcgOTYgMCAxMjQuNyAwIDE2MHY5NkgxOTIgMzUyaDguMmMzMi4zLTM5LjEgODEuMS02NCAxMzUuOC02NGM1LjQgMCAxMC43IC4yIDE2IC43VjE2MGMwLTM1LjMtMjguNy02NC02NC02NEgzODRWNTZjMC0zMC45LTI1LjEtNTYtNTYtNTZIMTg0Yy0zMC45IDAtNTYgMjUuMS01NiA1NnpNMzIwIDM1MkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4OEgwVjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzNjAuMkMzMzUuMSA0NDkuNiAzMjAgNDEwLjUgMzIwIDM2OGMwLTUuNCAuMi0xMC43IC43LTE2bC0uNyAwem0zMjAgMTZjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0ek00OTYgMjg4YzguOCAwIDE2IDcuMiAxNiAxNnY0OGgzMmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg0OTZjLTguOCAwLTE2LTcuMi0xNi0xNlYzMDRjMC04LjggNy4yLTE2IDE2LTE2elwiXX0sZW09QjYsVDY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGFibGUtY2VsbHMtbGFyZ2VcIixpY29uOls1MTIsNTEyLFtcInRoLWxhcmdlXCJdLFwiZjAwOVwiLFwiTTQ0OCA5NlYyMjRIMjg4Vjk2SDQ0OHptMCAxOTJWNDE2SDI4OFYyODhINDQ4ek0yMjQgMjI0SDY0Vjk2SDIyNFYyMjR6TTY0IDI4OEgyMjRWNDE2SDY0VjI4OHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0elwiXX0sZm09VDYseTY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9vay10YW5ha2hcIixpY29uOls0NDgsNTEyLFtcInRhbmFraFwiXSxcImY4MjdcIixcIk0zNTIgMGM1MyAwIDk2IDQzIDk2IDk2VjQxNmMwIDUzLTQzIDk2LTk2IDk2SDY0IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyVjM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzJDMCAxNC4zIDE0LjMgMCAzMiAwSDY0IDM1MnptMCAzODRIOTZ2NjRIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyek0xMzguNyAyMDhsMTMuOSAyNEgxMjQuOWwxMy45LTI0em0tMTMuOS0yNEw5Ny4xIDIzMmMtNi4yIDEwLjcgMS41IDI0IDEzLjkgMjRoNTUuNGwyNy43IDQ4YzYuMiAxMC43IDIxLjYgMTAuNyAyNy43IDBsMjcuNy00OEgzMDVjMTIuMyAwIDIwLTEzLjMgMTMuOS0yNGwtMjcuNy00OCAyNy43LTQ4YzYuMi0xMC43LTEuNS0yNC0xMy45LTI0SDI0OS42TDIyMS45IDY0Yy02LjItMTAuNy0yMS42LTEwLjctMjcuNyAwbC0yNy43IDQ4SDExMWMtMTIuMyAwLTIwIDEzLjMtMTMuOSAyNGwyNy43IDQ4em0yNy43IDBsMjcuNy00OGg1NS40bDI3LjcgNDgtMjcuNyA0OEgxODAuM2wtMjcuNy00OHptMC00OGwtMTMuOSAyNC0xMy45LTI0aDI3Ljd6bTQxLjYtMjRMMjA4IDg4bDEzLjkgMjRIMTk0LjF6bTY5LjMgMjRoMjcuN2wtMTMuOSAyNC0xMy45LTI0em0xMy45IDcybDEzLjkgMjRIMjYzLjRsMTMuOS0yNHptLTU1LjQgNDhMMjA4IDI4MGwtMTMuOS0yNGgyNy43elwiXX0scm09eTYsUDY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGhvbmUtdm9sdW1lXCIsaWNvbjpbNTEyLDUxMixbXCJ2b2x1bWUtY29udHJvbC1waG9uZVwiXSxcImYyYTBcIixcIk0xODguOCAzOS4zYzEzLjggOC41IDE5LjYgMjYuOCAxMy42IDQyLjdMMTc0LjIgMTU2Yy01LjMgMTQtMTguNSAyMi41LTMyLjQgMjFsLTQyLjYtNC42Yy0xNy40IDU0LjEtMTcuNCAxMTMuMiAwIDE2Ny4zbDQyLjYtNC42YzEzLjktMS41IDI3LjEgNyAzMi40IDIxTDIwMi40IDQzMGM2LjEgMTUuOSAuMyAzNC4yLTEzLjYgNDIuN2wtNTYuNCAzNC44Yy0xMi40IDcuNy0yOCA1LjQtMzguMS01LjVDLTMxLjQgMzY2LjEtMzEuNCAxNDUuOSA5NC4zIDEwQzEwNC40LS45IDEyMC4xLTMuMSAxMzIuNSA0LjVsNTYuNCAzNC44em0yMTguNC01LjVDNDcxLjIgODYuNiA1MTIgMTY2LjYgNTEyIDI1NnMtNDAuOCAxNjkuNC0xMDQuNyAyMjIuMmMtMTAuMiA4LjQtMjUuMyA3LTMzLjgtMy4ycy03LTI1LjMgMy4yLTMzLjhDNDMwLjEgMzk3LjEgNDY0IDMzMC41IDQ2NCAyNTZzLTMzLjktMTQxLjEtODcuMy0xODUuMmMtMTAuMi04LjQtMTEuNy0yMy42LTMuMi0zMy44czIzLjYtMTEuNyAzMy44LTMuMnptLTY0LjQgNzEuNEMzODcuNCAxNDAuNCA0MTYgMTk0LjggNDE2IDI1NnMtMjguNiAxMTUuNi03My4xIDE1MC44Yy0xMC40IDguMi0yNS41IDYuNC0zMy43LTRzLTYuNC0yNS41IDQtMzMuN0MzNDYuNiAzNDIuNyAzNjggMzAxLjggMzY4IDI1NnMtMjEuNC04Ni43LTU0LjgtMTEzLjFjLTEwLjQtOC4yLTEyLjItMjMuMy00LTMzLjdzMjMuMy0xMi4yIDMzLjctNHptLTY1LjQgNzFDMzAzLjEgMTkzLjUgMzIwIDIyMi44IDMyMCAyNTZzLTE2LjkgNjIuNS00Mi41IDc5LjdjLTExIDcuNC0yNS45IDQuNS0zMy4zLTYuNXMtNC41LTI1LjkgNi41LTMzLjNjMTIuOS04LjcgMjEuMy0yMy4zIDIxLjMtMzkuOXMtOC40LTMxLjItMjEuMy0zOS45Yy0xMS03LjQtMTMuOS0yMi4zLTYuNS0zMy4zczIyLjMtMTMuOSAzMy4zLTYuNXpcIl19LGxtPVA2LGltPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhdC1jb3dib3ktc2lkZVwiLGljb246WzY0MCw1MTIsW10sXCJmOGMxXCIsXCJNNDYzLjIgNzEuM2MtMi40LTEyLjgtOS44LTI0LjEtMjAuNy0zMS4zcy0yNC4yLTkuNy0zNi45LTYuOGwtMjE2IDQ4Yy0xOS44IDQuNC0zNC43IDIwLjgtMzcuMiA0MC45bC04LjggNzAuNmM1LjMtLjQgMTAuOC0uNyAxNi41LS43YzgyLjkgMCAxNDEuOSA1NS4zIDE5Ny41IDEwNy41bDAgMGMzLjEgMyA2LjMgNS45IDkuNCA4LjhDNDI3LjEgMzY0LjUgNDg2LjkgNDE2IDU3NiA0MTZjMCAwIDY0IDAgNjQtNDhjMC05Ni0xMTItMTI4LTE0NC0xMjhoLTEuNkw0NjMuMiA3MS4zek01NzYgNDQ4Yy0xMDIuOSAwLTE3MS4xLTYwLjUtMjMwLjktMTE2LjNsLTYuNS02QzI3OS45IDI3MC44IDIyOS45IDIyNCAxNjAgMjI0Yy01Ny44IDAtOTcuNCAyOC42LTEyMy4xIDYzLjVDMTAuNyAzMjMgMCAzNjMuOCAwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NEg1NzZ6XCJdfSxvbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjbGlwYm9hcmQtdXNlclwiLGljb246WzM4NCw1MTIsW10sXCJmN2YzXCIsXCJNMTkyIDBjLTQxLjggMC03Ny40IDI2LjctOTAuNSA2NEg2NEMyOC43IDY0IDAgOTIuNyAwIDEyOFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NEgyODIuNUMyNjkuNCAyNi43IDIzMy44IDAgMTkyIDB6bTAgMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTY0IDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6TTgwIDQzMmMwLTQ0LjIgMzUuOC04MCA4MC04MGg2NGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNnpcIl19LG5tPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNoaWxkXCIsaWNvbjpbMzIwLDUxMixbXSxcImYxYWVcIixcIk0yMjQgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0ek0xNDQgMzg0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI4Ny44TDU5LjEgMzIxYy05LjQgMTUtMjkuMiAxOS40LTQ0LjEgMTBTLTQuNSAzMDEuOSA0LjkgMjg3bDM5LjktNjMuM0M2OS43IDE4NCAxMTMuMiAxNjAgMTYwIDE2MHM5MC4zIDI0IDExNS4yIDYzLjZMMzE1LjEgMjg3YzkuNCAxNSA0LjkgMzQuNy0xMCA0NC4xcy0zNC43IDQuOS00NC4xLTEwTDI0MCAyODcuOFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzg0SDE0NHpcIl19LEhtPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxpcmEtc2lnblwiLGljb246WzM4NCw1MTIsWzgzNTZdLFwiZjE5NVwiLFwiTTE0NCAxNjAuNGMwLTM1LjUgMjguOC02NC40IDY0LjQtNjQuNGM2LjkgMCAxMy44IDEuMSAyMC40IDMuM2w4MS4yIDI3LjFjMTYuOCA1LjYgMzQuOS0zLjUgNDAuNS0yMC4ycy0zLjUtMzQuOS0yMC4yLTQwLjVMMjQ5IDM4LjZjLTEzLjEtNC40LTI2LjgtNi42LTQwLjYtNi42QzEzNy41IDMyIDgwIDg5LjUgODAgMTYwLjRWMTkySDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDgwdjMySDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDc4Yy0yLjIgMTAuNS02LjEgMjAuNi0xMS43IDI5LjlMMzYuNiA0MzEuNWMtNS45IDkuOS02LjEgMjIuMi0uNCAzMi4yUzUyLjUgNDgwIDY0IDQ4MEgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTIwLjVsLjctMS4xYzExLjYtMTkuMyAxOC45LTQwLjcgMjEuNi02Mi45SDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxNDRWMjU2SDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxNDRWMTYwLjR6XCJdfSx6bT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzYXRlbGxpdGVcIixpY29uOls1MTIsNTEyLFsxMjg3NTJdLFwiZjdiZlwiLFwiTTIzMyA3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtOTYgOTZjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDg5LjQgODkuNC0xNS41IDE1LjVDMTUyLjMgMjMwLjQgMTI0LjkgMjI0IDk2IDIyNGMtMzEuNyAwLTYxLjUgNy43LTg3LjggMjEuMmMtOSA0LjctMTAuMyAxNi43LTMuMSAyMy44TDExMi43IDM3Ni43IDk2LjMgMzkzLjFjLTIuNi0uNy01LjQtMS4xLTguMy0xLjFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMwLTIuOS0uNC01LjYtMS4xLTguM2wxNi40LTE2LjRMMjQyLjkgNTA2LjljNy4yIDcuMiAxOS4yIDUuOSAyMy44LTMuMUMyODAuMyA0NzcuNSAyODggNDQ3LjcgMjg4IDQxNmMwLTI4LjktNi40LTU2LjMtMTcuOC04MC45bDE1LjUtMTUuNUwzNzUgNDA5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDk2LTk2YzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC04OS40LTg5LjQgNTUtNTVjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTQ4LTQ4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNTUgNTVMMjMzIDd6bTE1OSAzNTFsLTcyLjQtNzIuNCA2Mi4xLTYyLjFMNDU0LjEgMjk2IDM5MiAzNTguMXpNMjI2LjMgMTkyLjRMMTUzLjkgMTIwIDIxNiA1Ny45bDcyLjQgNzIuNC02Mi4xIDYyLjF6XCJdfSxWbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwbGFuZS1sb2NrXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1NThcIixcIk0xOTIgOTMuN0MxOTIgNTkuNSAyMjEgMCAyNTYgMGMzNiAwIDY0IDU5LjUgNjQgOTMuN3Y4NC42bDEwMS44IDU4LjJDNDE4IDI0Ny42IDQxNiAyNTkuNiA0MTYgMjcydjI0LjZjLTE3LjkgMTAuNC0zMC4zIDI5LjEtMzEuOCA1MC45TDMyMCAzMjkuMVY0MDBsNTcuNiA0My4yYzQgMyA2LjQgNy44IDYuNCAxMi44djI0IDE4YzAgNy44LTYuMyAxNC0xNCAxNGMtMS4zIDAtMi42LS4yLTMuOS0uNUwyNTYgNDgwIDE0NS45IDUxMS41Yy0xLjMgLjQtMi42IC41LTMuOSAuNWMtNy44IDAtMTQtNi4zLTE0LTE0VjQ1NmMwLTUgMi40LTkuOCA2LjQtMTIuOEwxOTIgNDAwbDAtNzAuOS0xNzEuNiA0OUMxMC4yIDM4MS4xIDAgMzczLjQgMCAzNjIuOFYyOTcuM2MwLTUuNyAzLjEtMTEgOC4xLTEzLjlMMTkyIDE3OC4zVjkzLjd6TTUyOCAyNDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjQ4aDY0VjI3MmMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODB2NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjI3MnpcIl19LG1tPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRhZ1wiLGljb246WzQ0OCw1MTIsWzEyNzk5MV0sXCJmMDJiXCIsXCJNMCA4MFYyMjkuNWMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2wxNzYgMTc2YzI1IDI1IDY1LjUgMjUgOTAuNSAwTDQxOC43IDMxNy4zYzI1LTI1IDI1LTY1LjUgMC05MC41bC0xNzYtMTc2Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43SDQ4QzIxLjUgMzIgMCA1My41IDAgODB6bTExMiA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXX0sdm09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29tbWVudFwiLGljb246WzUxMiw1MTIsWzEyODQ4OSw2MTY2OV0sXCJmMDc1XCIsXCJNNTEyIDI0MGMwIDExNC45LTExNC42IDIwOC0yNTYgMjA4Yy0zNy4xIDAtNzIuMy02LjQtMTA0LjEtMTcuOWMtMTEuOSA4LjctMzEuMyAyMC42LTU0LjMgMzAuNkM3My42IDQ3MS4xIDQ0LjcgNDgwIDE2IDQ4MGMtNi41IDAtMTIuMy0zLjktMTQuOC05LjljLTIuNS02LTEuMS0xMi44IDMuNC0xNy40bDAgMCAwIDAgMCAwIDAgMCAuMy0uM2MuMy0uMyAuNy0uNyAxLjMtMS40YzEuMS0xLjIgMi44LTMuMSA0LjktNS43YzQuMS01IDkuNi0xMi40IDE1LjItMjEuNmMxMC0xNi42IDE5LjUtMzguNCAyMS40LTYyLjlDMTcuNyAzMjYuOCAwIDI4NS4xIDAgMjQwQzAgMTI1LjEgMTE0LjYgMzIgMjU2IDMyczI1NiA5My4xIDI1NiAyMDh6XCJdfSxXPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNha2UtY2FuZGxlc1wiLGljb246WzQ0OCw1MTIsWzEyNzg3NCxcImJpcnRoZGF5LWNha2VcIixcImNha2VcIl0sXCJmMWZkXCIsXCJNODYuNCA1LjVMNjEuOCA0Ny42QzU4IDU0LjEgNTYgNjEuNiA1NiA2OS4yVjcyYzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBWNjkuMmMwLTcuNi0yLTE1LTUuOC0yMS42TDEwNS42IDUuNUMxMDMuNiAyLjEgMTAwIDAgOTYgMHMtNy42IDIuMS05LjYgNS41em0xMjggMEwxODkuOCA0Ny42Yy0zLjggNi41LTUuOCAxNC01LjggMjEuNlY3MmMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwVjY5LjJjMC03LjYtMi0xNS01LjgtMjEuNkwyMzMuNiA1LjVDMjMxLjYgMi4xIDIyOCAwIDIyNCAwcy03LjYgMi4xLTkuNiA1LjV6TTMxNy44IDQ3LjZjLTMuOCA2LjUtNS44IDE0LTUuOCAyMS42VjcyYzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBWNjkuMmMwLTcuNi0yLTE1LTUuOC0yMS42TDM2MS42IDUuNUMzNTkuNiAyLjEgMzU2IDAgMzUyIDBzLTcuNiAyLjEtOS42IDUuNUwzMTcuOCA0Ny42ek0xMjggMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjQ4Yy0zNS4zIDAtNjQgMjguNy02NCA2NHY3MWM4LjMgNS4yIDE4LjEgOSAyOC44IDljMTMuNSAwIDI3LjItNi4xIDM4LjQtMTMuNGM1LjQtMy41IDkuOS03LjEgMTMtOS43YzEuNS0xLjMgMi43LTIuNCAzLjUtMy4xYy40LS40IC43LS42IC44LS44bC4xLS4xIDAgMCAwIDBzMCAwIDAgMHMwIDAgMCAwYzMuMS0zLjIgNy40LTQuOSAxMS45LTQuOHM4LjYgMi4xIDExLjYgNS40bDAgMCAwIDAgLjEgLjFjLjEgLjEgLjQgLjQgLjcgLjdjLjcgLjcgMS43IDEuNyAzLjEgM2MyLjggMi42IDYuOCA2LjEgMTEuOCA5LjVjMTAuMiA3LjEgMjMgMTMuMSAzNi4zIDEzLjFzMjYuMS02IDM2LjMtMTMuMWM1LTMuNSA5LTYuOSAxMS44LTkuNWMxLjQtMS4zIDIuNC0yLjMgMy4xLTNjLjMtLjMgLjYtLjYgLjctLjdsLjEtLjFjMy0zLjUgNy40LTUuNCAxMi01LjRzOSAyIDEyIDUuNGwuMSAuMWMuMSAuMSAuNCAuNCAuNyAuN2MuNyAuNyAxLjcgMS43IDMuMSAzYzIuOCAyLjYgNi44IDYuMSAxMS44IDkuNWMxMC4yIDcuMSAyMyAxMy4xIDM2LjMgMTMuMXMyNi4xLTYgMzYuMy0xMy4xYzUtMy41IDktNi45IDExLjgtOS41YzEuNC0xLjMgMi40LTIuMyAzLjEtM2MuMy0uMyAuNi0uNiAuNy0uN2wuMS0uMWMyLjktMy40IDcuMS01LjMgMTEuNi01LjRzOC43IDEuNiAxMS45IDQuOGwwIDAgMCAwIDAgMCAuMSAuMWMuMiAuMiAuNCAuNCAuOCAuOGMuOCAuNyAxLjkgMS44IDMuNSAzLjFjMy4xIDIuNiA3LjUgNi4yIDEzIDkuN2MxMS4yIDcuMyAyNC45IDEzLjQgMzguNCAxMy40YzEwLjcgMCAyMC41LTMuOSAyOC44LTlWMjg4YzAtMzUuMy0yOC43LTY0LTY0LTY0VjE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY0OEgyNTZWMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjQ4SDEyOFYxNzZ6TTQ0OCAzOTQuNmMtOC41IDMuMy0xOC4yIDUuNC0yOC44IDUuNGMtMjIuNSAwLTQyLjQtOS45LTU1LjgtMTguNmMtNC4xLTIuNy03LjgtNS40LTEwLjktNy44Yy0yLjggMi40LTYuMSA1LTkuOCA3LjVDMzI5LjggMzkwIDMxMC42IDQwMCAyODggNDAwcy00MS44LTEwLTU0LjYtMTguOWMtMy41LTIuNC02LjctNC45LTkuNC03LjJjLTIuNyAyLjMtNS45IDQuNy05LjQgNy4yQzIwMS44IDM5MCAxODIuNiA0MDAgMTYwIDQwMHMtNDEuOC0xMC01NC42LTE4LjljLTMuNy0yLjYtNy01LjItOS44LTcuNWMtMy4xIDIuNC02LjggNS4xLTEwLjkgNy44QzcxLjIgMzkwLjEgNTEuMyA0MDAgMjguOCA0MDBjLTEwLjYgMC0yMC4zLTIuMi0yOC44LTUuNFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM5NC42elwiXX0sTW09Vyx0bT1XLGhtPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImVudmVsb3BlXCIsaWNvbjpbNTEyLDUxMixbMTI4Mzg2LDk5OTMsNjE0NDNdLFwiZjBlMFwiLFwiTTQ4IDY0QzIxLjUgNjQgMCA4NS41IDAgMTEyYzAgMTUuMSA3LjEgMjkuMyAxOS4yIDM4LjRMMjM2LjggMzEzLjZjMTEuNCA4LjUgMjcgOC41IDM4LjQgMEw0OTIuOCAxNTAuNGMxMi4xLTkuMSAxOS4yLTIzLjMgMTkuMi0zOC40YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek0wIDE3NlYzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjE3NkwyOTQuNCAzMzkuMmMtMjIuOCAxNy4xLTU0IDE3LjEtNzYuOCAwTDAgMTc2elwiXX0sRjY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYW5nbGVzLXVwXCIsaWNvbjpbNDQ4LDUxMixbXCJhbmdsZS1kb3VibGUtdXBcIl0sXCJmMTAyXCIsXCJNMjQ2LjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMjI0IDEwOS4zIDM2MS40IDI0Ni42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjB6bTE2MCAzNTJsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDIyNCAzMDEuMyAzNjEuNCA0MzguNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zelwiXX0sQ209RjYsTG09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGFwZXJjbGlwXCIsaWNvbjpbNTEyLDUxMixbMTI4MjA2XSxcImYwYzZcIixcIk0zOTYuMiA4My44Yy0yNC40LTI0LjQtNjQtMjQuNC04OC40IDBsLTE4NCAxODRjLTQyLjEgNDIuMS00Mi4xIDExMC4zIDAgMTUyLjRzMTEwLjMgNDIuMSAxNTIuNCAwbDE1Mi0xNTJjMTAuOS0xMC45IDI4LjctMTAuOSAzOS42IDBzMTAuOSAyOC43IDAgMzkuNmwtMTUyIDE1MmMtNjQgNjQtMTY3LjYgNjQtMjMxLjYgMHMtNjQtMTY3LjYgMC0yMzEuNmwxODQtMTg0YzQ2LjMtNDYuMyAxMjEuMy00Ni4zIDE2Ny42IDBzNDYuMyAxMjEuMyAwIDE2Ny42bC0xNzYgMTc2Yy0yOC42IDI4LjYtNzUgMjguNi0xMDMuNiAwcy0yOC42LTc1IDAtMTAzLjZsMTQ0LTE0NGMxMC45LTEwLjkgMjguNy0xMC45IDM5LjYgMHMxMC45IDI4LjcgMCAzOS42bC0xNDQgMTQ0Yy02LjcgNi43LTYuNyAxNy43IDAgMjQuNHMxNy43IDYuNyAyNC40IDBsMTc2LTE3NmMyNC40LTI0LjQgMjQuNC02NCAwLTg4LjR6XCJdfSxwbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy1yaWdodC10by1jaXR5XCIsaWNvbjpbNjQwLDUxMixbXSxcImU0YjNcIixcIk0yODggNDhjMC0yNi41IDIxLjUtNDggNDgtNDhoOTZjMjYuNSAwIDQ4IDIxLjUgNDggNDhWMTkyaDQwVjEyMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djcyaDI0YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0MzIgMzM2Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0OHptNjQgMzJ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlY4MGMwLTguOC03LjItMTYtMTYtMTZIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYxNzZjMC04LjgtNy4yLTE2LTE2LTE2SDM2OHpNMzUyIDI3MnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIMzY4Yy04LjggMC0xNiA3LjItMTYgMTZ6bTE3Ni0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjcyYzAtOC44LTcuMi0xNi0xNi0xNkg1Mjh6TTUxMiAzNjh2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzNjhjMC04LjgtNy4yLTE2LTE2LTE2SDUyOGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNjYuNiAxNTMuNGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDE0Ni43IDI4OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgxNDYuN2wtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwelwiXX0sZG09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicmliYm9uXCIsaWNvbjpbNDQ4LDUxMixbMTI3ODk1XSxcImY0ZDZcIixcIk0yMjQgOTZjMzkuNSAwIDY2LjggMTIuMiA4MS45IDIxLjVMMjQ1LjYgMTg0bDc5LjMgODcuNCAzNi4zLTQwYzE0LjctMTYuMiAyMi44LTM3LjMgMjIuOC01OS4xdi0yN2MwLTE1LjYtNC4xLTMwLjgtMTItNDQuM0wzMzcuNyA0MkMzMjYuNCAyMi43IDMwNyA2LjggMjgyLjEgMy41QzI2Ny44IDEuNiAyNDguNCAwIDIyNCAwcy00My44IDEuNi01OCAzLjVDMTQxIDYuOCAxMjEuNyAyMi43IDExMC40IDQyTDc2IDEwMWMtNy44IDEzLjQtMTIgMjguNy0xMiA0NC4zdjI3YzAgMjEuOSA4LjEgNDIuOSAyMi44IDU5LjFsNTcuOSA2My44TDIyNCAzODIuNiAzMzQuMiA1MDQuMWM2LjQgNyAxNi4zIDkuNyAyNS40IDYuNmw3Mi0yNGM3LjctMi42IDEzLjYtOC44IDE1LjYtMTYuN3MwLTE2LjItNS40LTIyLjJMMzAzLjMgMjk1LjIgMjI0IDIwNy44bC04MS45LTkwLjNDMTU3LjMgMTA4LjIgMTg0LjUgOTYgMjI0IDk2ek0yMDIuNCA0MDYuNUwxMjMuMiAzMTkgNi4zIDQ0Ny45Yy01LjQgNi03LjUgMTQuNC01LjQgMjIuMnM3LjkgMTQuMSAxNS42IDE2LjdsNzIgMjRjOSAzIDE5IC40IDI1LjQtNi42bDg4LjYtOTcuN3pcIl19LHVtPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImx1bmdzXCIsaWNvbjpbNjQwLDUxMixbMTI5NzI5XSxcImY2MDRcIixcIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlYxNjQuMWMwIDE2LjQgOC40IDMxLjcgMjIuMiA0MC41bDkuOCA2LjJWMTY1LjNDMzg0IDEyNyA0MTUgOTYgNDUzLjMgOTZjMjEuNyAwIDQyLjggMTAuMiA1NS44IDI4LjhjMTUuNCAyMi4xIDQ0LjMgNjUuNCA3MSAxMTYuOWMyNi41IDUwLjkgNTIuNCAxMTIuNSA1OS42IDE3MC4zYy4yIDEuMyAuMiAyLjYgLjIgNHY3YzAgNDkuMS0zOS44IDg5LTg5IDg5Yy03LjMgMC0xNC41LS45LTIxLjYtMi43bC03Mi43LTE4LjJDNDE0IDQ4MC41IDM4NCA0NDIuMSAzODQgMzk4VjMyNWw5MC41IDU3LjZjNy41IDQuNyAxNy4zIDIuNSAyMi4xLTQuOXMyLjUtMTcuMy00LjktMjIuMUwzODQgMjg3LjF2LS40bC00NC4xLTI4LjFjLTcuMy00LjYtMTMuOS0xMC4xLTE5LjktMTYuMWMtNS45IDYtMTIuNiAxMS41LTE5LjkgMTYuMUwyNTYgMjg2LjcgMTYxLjIgMzQ3bC0xMy41IDguNmMwIDAgMCAwLS4xIDBjLTcuNCA0LjgtOS42IDE0LjYtNC44IDIyLjFjNC43IDcuNSAxNC42IDkuNyAyMi4xIDQuOWw5MS4xLTU4VjM5OGMwIDQ0LjEtMzAgODIuNS03Mi43IDkzLjFsLTcyLjcgMTguMmMtNy4xIDEuOC0xNC4zIDIuNy0yMS42IDIuN2MtNDkuMSAwLTg5LTM5LjgtODktODl2LTdjMC0xLjMgLjEtMi43IC4yLTRjNy4yLTU3LjkgMzMuMS0xMTkuNCA1OS42LTE3MC4zYzI2LjgtNTEuNSA1NS42LTk0LjggNzEtMTE2LjljMTMtMTguNiAzNC0yOC44IDU1LjgtMjguOEMyMjUgOTYgMjU2IDEyNyAyNTYgMTY1LjN2NDUuNWw5LjgtNi4yYzEzLjgtOC44IDIyLjItMjQuMSAyMi4yLTQwLjVWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdfSxENj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy11cC05LTFcIixpY29uOls1NzYsNTEyLFtcInNvcnQtbnVtZXJpYy11cC1hbHRcIl0sXCJmODg3XCIsXCJNMTYwIDMyYzkgMCAxNy41IDMuOCAyMy42IDEwLjRsODggOTZjMTEuOSAxMyAxMS4xIDMzLjMtMiA0NS4ycy0zMy4zIDExLjEtNDUuMi0yTDE5MiAxNDYuM1Y0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTQ2LjNMOTUuNiAxODEuNmMtMTEuOSAxMy0zMi4yIDEzLjktNDUuMiAycy0xMy45LTMyLjItMi00NS4ybDg4LTk2QzE0Mi41IDM1LjggMTUxIDMyIDE2MCAzMnpNMzUyIDMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmgxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0MzIgMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDE2VjM1MkgzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem05My43LTE3MS4xYzEwLjgtNS4xIDE4LjMtMTYuMiAxOC4zLTI4LjljMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmM0LjkgMCA5LjYtMS4xIDEzLjctMy4xem0tNDAuNyA1NC45QzM2OS42IDE5Mi40IDM0NCAxNTkuMiAzNDQgMTIwYzAtNDguNiAzOS40LTg4IDg4LTg4czg4IDM5LjQgODggODhjMCAyMy41LTcuNSA0Ni4zLTIxLjUgNjUuMkw0NDkuNyAyNTFjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjdzLTE3LjItMzAuNi02LjctNDQuOGw2LjgtOS4yelwiXX0seG09RDYsZ209e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibGl0ZWNvaW4tc2lnblwiLGljb246WzQ0OCw1MTIsW10sXCJlMWQzXCIsXCJNMTYwIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjIxMy42TDU1LjIgMjI1LjJjLTE3IDQuOS0yNi44IDIyLjYtMjIgMzkuNnMyMi42IDI2LjggMzkuNiAyMkw5NiAyODAuMVY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MFYyNjEuOWwxMzYuOC0zOS4xYzE3LTQuOSAyNi44LTIyLjYgMjItMzkuNnMtMjIuNi0yNi44LTM5LjYtMjJMMTYwIDE5NS4zVjY0elwiXX0sU209e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9yZGVyLW5vbmVcIixpY29uOls0NDgsNTEyLFtdLFwiZjg1MFwiLFwiTTMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyem05NiA2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyek0zMjAgNDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJ6bTAgMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6TTIyNCA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnptMC0zMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnpNNDE2IDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0wLTM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyek0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZzMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnpNNDE2IDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyek0zMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnpNMjI0IDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0xOTItNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnpNMzIgMzg0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6TTQxNiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnpNMzIgMTkyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTE5Mi02NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyelwiXX0sTm09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2lyY2xlLW5vZGVzXCIsaWNvbjpbNTEyLDUxMixbXSxcImU0ZTJcIixcIk00MTguNCAxNTcuOWMzNS4zLTguMyA2MS42LTQwIDYxLjYtNzcuOWMwLTQ0LjItMzUuOC04MC04MC04MGMtNDMuNCAwLTc4LjcgMzQuNS04MCA3Ny41TDEzNi4yIDE1MS4xQzEyMS43IDEzNi44IDEwMS45IDEyOCA4MCAxMjhjLTQ0LjIgMC04MCAzNS44LTgwIDgwczM1LjggODAgODAgODBjMTIuMiAwIDIzLjgtMi43IDM0LjEtNy42TDI1OS43IDQwNy44Yy0yLjQgNy42LTMuNyAxNS44LTMuNyAyNC4yYzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0yNy43LTE0LTUyLjEtMzUuNC02Ni40bDM3LjgtMjA3Ljd6TTE1Ni4zIDIzMi4yYzIuMi02LjkgMy41LTE0LjIgMy43LTIxLjdsMTgzLjgtNzMuNWMzLjYgMy41IDcuNCA2LjcgMTEuNiA5LjVMMzE3LjYgMzU0LjFjLTUuNSAxLjMtMTAuOCAzLjEtMTUuOCA1LjVMMTU2LjMgMjMyLjJ6XCJdfSx3bT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwYXJhY2h1dGUtYm94XCIsaWNvbjpbNTEyLDUxMixbXSxcImY0Y2RcIixcIk0zODMuNSAxOTJjLjMtNS4zIC41LTEwLjYgLjUtMTZjMC01MS0xNS45LTk2LTQwLjItMTI3LjZDMzE5LjUgMTYuOSAyODguMiAwIDI1NiAwcy02My41IDE2LjktODcuOCA0OC40QzE0My45IDgwIDEyOCAxMjUgMTI4IDE3NmMwIDUuNCAuMiAxMC43IC41IDE2SDI0MFYzMjBIMjA4Yy03IDAtMTMuNyAxLjUtMTkuNyA0LjJMNjguMiAxOTJIOTYuNWMtLjMtNS4zLS41LTEwLjYtLjUtMTZjMC02NCAyMi4yLTEyMS4yIDU3LjEtMTU5LjNDNjIgNDkuMyAxOC42IDEyMi42IDQuMiAxNzMuNkMxLjUgMTgzLjEgOSAxOTIgMTguOSAxOTJoNkwxNjUuMiAzNDYuM2MtMy4zIDYuNS01LjIgMTMuOS01LjIgMjEuN3Y5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NmMyNi41IDAgNDgtMjEuNSA0OC00OFYzNjhjMC03LjgtMS45LTE1LjItNS4yLTIxLjdMNDg3LjEgMTkyaDZjOS45IDAgMTcuNC04LjkgMTQuNy0xOC40QzQ5My40IDEyMi42IDQ1MCA0OS4zIDM1OC45IDE2LjdDMzkzLjggNTQuOCA0MTYgMTEyLjEgNDE2IDE3NmMwIDUuNC0uMiAxMC43LS41IDE2aDI4LjNMMzIzLjcgMzI0LjJjLTYtMi43LTEyLjctNC4yLTE5LjctNC4ySDI3MlYxOTJIMzgzLjV6XCJdfSxrbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJpbmRlbnRcIixpY29uOls0NDgsNTEyLFtdLFwiZjAzY1wiLFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjR6TTE5MiAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTMyIDk2SDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTAgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTEyNy44IDI2OC42TDI1LjggMzQ3LjlDMTUuMyAzNTYuMSAwIDM0OC42IDAgMzM1LjNWMTc2LjdjMC0xMy4zIDE1LjMtMjAuOCAyNS44LTEyLjZsMTAxLjkgNzkuM2M4LjIgNi40IDguMiAxOC45IDAgMjUuM3pcIl19LGJtPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRydWNrLWZpZWxkLXVuXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1OGVcIixcIk05NiAzMkM2MC43IDMyIDMyIDYwLjcgMzIgOTZ2MzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMydjMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZIMzg0YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWMjg4YzAtMzUuMy0yOC43LTY0LTY0LTY0aC00LjJjLS40LTEuMS0uOS0yLjEtMS4zLTMuMkw0ODUuNyAxMDJjLTEwLjMtMjMuMS0zMy4yLTM4LTU4LjUtMzhIMzc1LjRDMzY0LjQgNDQuOSAzNDMuNyAzMiAzMjAgMzJIOTZ6bTI4OCA5Nmg0My4ybDQyLjcgOTZIMzg0VjEyOHpNMjA4IDM4NGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6bTI3MiA0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4ek0yNTMuMyAxMzUuMWwzNC43IDUyVjE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djk2YzAgNy4xLTQuNiAxMy4zLTExLjQgMTUuM3MtMTQtLjYtMTcuOS02LjRsLTM0LjctNTJWMjQwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjE0NGMwLTcuMSA0LjYtMTMuMyAxMS40LTE1LjNzMTQgLjYgMTcuOSA2LjR6TTEyOCAxNDR2NjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYxNDRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY2NGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OFYxNDRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpcIl19LFI2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXJnbGFzc1wiLGljb246WzM4NCw1MTIsWzkyMDMsNjIwMzIsXCJob3VyZ2xhc3MtZW1wdHlcIl0sXCJmMjU0XCIsXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBINjQgMzIwaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyVjc1YzAgNDIuNC0xNi45IDgzLjEtNDYuOSAxMTMuMUwyMzcuMyAyNTZsNjcuOSA2Ny45YzMwIDMwIDQ2LjkgNzAuNyA0Ni45IDExMy4xdjExYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMCA2NCAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMlY0MzdjMC00Mi40IDE2LjktODMuMSA0Ni45LTExMy4xTDE0Ni43IDI1NiA3OC45IDE4OC4xQzQ4LjkgMTU4LjEgMzIgMTE3LjQgMzIgNzVWNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMnpNOTYgNjRWNzVjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlMMTkyIDIxMC43bDY3LjktNjcuOWMxOC0xOCAyOC4xLTQyLjQgMjguMS02Ny45VjY0SDk2em0wIDM4NEgyODhWNDM3YzAtMjUuNS0xMC4xLTQ5LjktMjguMS02Ny45TDE5MiAzMDEuM2wtNjcuOSA2Ny45Yy0xOCAxOC0yOC4xIDQyLjQtMjguMSA2Ny45djExelwiXX0sQW09UjYsQm09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibW91bnRhaW5cIixpY29uOls1MTIsNTEyLFsxMjc5NTZdLFwiZjZmY1wiLFwiTTI1NiAzMmMxMi41IDAgMjQuMSA2LjQgMzAuNyAxN0w1MDMuNCAzOTQuNGM1LjYgOC45IDguNiAxOS4yIDguNiAyOS43YzAgMzAuOS0yNSA1NS45LTU1LjkgNTUuOUg1NS45QzI1IDQ4MCAwIDQ1NSAwIDQyNC4xYzAtMTAuNSAzLTIwLjggOC42LTI5LjdMMjI1LjIgNDljNi42LTEwLjYgMTguMy0xNyAzMC44LTE3em02NSAxOTJMMjU2IDEyMC40IDE3Ni45IDI0Ni41IDIwOCAyODhsNDgtNjRoNjV6XCJdfSxVNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLWRvY3RvclwiLGljb246WzQ0OCw1MTIsW1widXNlci1tZFwiXSxcImYwZjBcIixcIk0yMjQgMjU2YzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4UzI5NC43IDAgMjI0IDBTOTYgNTcuMyA5NiAxMjhzNTcuMyAxMjggMTI4IDEyOHptLTk2IDU1LjJDNTQgMzMyLjkgMCA0MDEuMyAwIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJINDE4LjNjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjdjMC04MS01NC0xNDkuNC0xMjgtMTcxLjFWMzYyYzI3LjYgNy4xIDQ4IDMyLjIgNDggNjJ2NDBjMCA4LjgtNy4yIDE2LTE2IDE2SDMzNmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNlY0MjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ2MjRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMjU2Yy04LjggMC0xNi03LjItMTYtMTZWNDI0YzAtMjkuOCAyMC40LTU0LjkgNDgtNjJWMzA0LjljLTYtLjYtMTIuMS0uOS0xOC4zLS45SDE3OC4zYy02LjIgMC0xMi4zIC4zLTE4LjMgLjl2NjUuNGMyMy4xIDYuOSA0MCAyOC4zIDQwIDUzLjdjMCAzMC45LTI1LjEgNTYtNTYgNTZzLTU2LTI1LjEtNTYtNTZjMC0yNS40IDE2LjktNDYuOCA0MC01My43VjMxMS4yek0xNDQgNDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6XCJdfSxUbT1VNixxNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtaW5mb1wiLGljb246WzUxMiw1MTIsW1wiaW5mby1jaXJjbGVcIl0sXCJmMDVhXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMjE2IDMzNmgyNFYyNzJIMjE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0djg4aDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em00MC0xNDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LHltPXE2LFBtPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNsb3VkLW1lYXRiYWxsXCIsaWNvbjpbNTEyLDUxMixbXSxcImY3M2JcIixcIk0wIDIyNGMwIDUzIDQzIDk2IDk2IDk2aDQ0LjdjOS41LTIzLjUgMzIuNS00MCA1OS4zLTQwYzIgMCAzLjkgLjEgNS44IC4zQzIxNy42IDI2NS41IDIzNS43IDI1NiAyNTYgMjU2czM4LjQgOS41IDUwLjIgMjQuM2MxLjktLjIgMy45LS4zIDUuOC0uM2MyNi45IDAgNDkuOSAxNi41IDU5LjMgNDBINDE2YzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwYzEuMS01LjIgMS42LTEwLjUgMS42LTE2YzAtNDQuMi0zNS44LTgwLTgwLTgwYy0yNC4zIDAtNDYuMSAxMC45LTYwLjggMjhDMjU2LjUgMjQuMyAyMTkuMSAwIDE3NiAwQzExNC4xIDAgNjQgNTAuMSA2NCAxMTJjMCA3LjEgLjcgMTQuMSAxLjkgMjAuOEMyNy42IDE0NS40IDAgMTgxLjUgMCAyMjR6bTI4OCA5NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmMwIDEgLjEgMi4xIC4xIDMuMWMtLjctLjgtMS40LTEuNi0yLjEtMi4zYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2MuNyAuNyAxLjUgMS40IDIuMyAyLjFjLTEtLjEtMi4xLS4xLTMuMS0uMWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmMxIDAgMi4xLS4xIDMuMS0uMWMtLjggLjctMS42IDEuMy0yLjMgMi4xYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwYy43LS43IDEuNC0xLjUgMi4xLTIuM2MtLjEgMS0uMSAyLjEtLjEgMy4xYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMC0xLS4xLTIuMS0uMS0zLjFjLjcgLjggMS4zIDEuNiAyLjEgMi4zYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNjLS43LS43LTEuNS0xLjQtMi4zLTIuMWMxIC4xIDIuMSAuMSAzLjEgLjFjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJjLTEgMC0yLjEgLjEtMy4xIC4xYy44LS43IDEuNi0xLjMgMi4zLTIuMWMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGMtLjcgLjctMS40IDEuNS0yLjEgMi4zYy4xLTEgLjEtMi4xIC4xLTMuMXpNNDggNDQ4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6bTQxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6XCJdfSxHNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYW1lcmFcIixpY29uOls1MTIsNTEyLFs2MjI1OCxcImNhbWVyYS1hbHRcIl0sXCJmMDMwXCIsXCJNMTQ5LjEgNjQuOEwxMzguNyA5Nkg2NEMyOC43IDk2IDAgMTI0LjcgMCAxNjBWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzczLjNMMzYyLjkgNjQuOEMzNTYuNCA0NS4yIDMzOC4xIDMyIDMxNy40IDMySDE5NC42Yy0yMC43IDAtMzkgMTMuMi00NS41IDMyLjh6TTI1NiAzODRjLTUzIDAtOTYtNDMtOTYtOTZzNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2elwiXX0sRm09RzYsRG09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3F1YXJlLXZpcnVzXCIsaWNvbjpbNDQ4LDUxMixbXSxcImU1NzhcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTIyMy44IDkzLjdjMTMuMyAwIDI0IDEwLjcgMjQgMjRjMCAyOS4zIDM1LjQgNDMuOSA1Ni4xIDIzLjJjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0yMC43IDIwLjctNiA1Ni4xIDIzLjIgNTYuMWMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjkuMyAwLTQzLjkgMzUuNC0yMy4yIDU2LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMjAuNy0yMC43LTU2LjEtNi01Ni4xIDIzLjJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yOS4zLTM1LjQtNDMuOS01Ni4xLTIzLjJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMjAuNy0yMC43IDYtNTYuMS0yMy4yLTU2LjFjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjkuMyAwIDQzLjktMzUuNCAyMy4yLTU2LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMyMC43IDIwLjcgNTYuMSA2IDU2LjEtMjMuMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMTkyIDI1NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem04OCAzMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6XCJdfSxSbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtZXRlb3JcIixpY29uOls1MTIsNTEyLFs5NzMyXSxcImY3NTNcIixcIk00OTMuNyAuOUwyOTkuNCA3NS42bDIuMy0yOS4zYzEtMTIuOC0xMi44LTIxLjUtMjQtMTUuMUwxMDEuMyAxMzMuNEMzOC42IDE2OS43IDAgMjM2LjYgMCAzMDlDMCA0MjEuMSA5MC45IDUxMiAyMDMgNTEyYzcyLjQgMCAxMzkuNC0zOC42IDE3NS43LTEwMS4zTDQ4MC44IDIzNC4zYzYuNS0xMS4xLTIuMi0yNS0xNS4xLTI0bC0yOS4zIDIuM0w1MTEuMSAxOC4zYy42LTEuNSAuOS0zLjIgLjktNC44QzUxMiA2IDUwNiAwIDQ5OC41IDBjLTEuNyAwLTMuMyAuMy00LjggLjl6TTE5MiA0NDhjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4czU3LjMtMTI4IDEyOC0xMjhzMTI4IDU3LjMgMTI4IDEyOHMtNTcuMyAxMjgtMTI4IDEyOHptMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem0xNiA5NmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnpcIl19LFVtPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNhci1vblwiLGljb246WzUxMiw1MTIsW10sXCJlNGRkXCIsXCJNMjgwIDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjR6TTE4NS44IDIyNEgzMjYuMmM2LjggMCAxMi44IDQuMyAxNS4xIDEwLjZMMzYwLjMgMjg4SDE1MS43bDE5LjEtNTMuNGMyLjMtNi40IDguMy0xMC42IDE1LjEtMTAuNnptLTc1LjMtMTAuOUw4Mi4yIDI5Mi40QzYyLjEgMzAwLjkgNDggMzIwLjggNDggMzQ0djQwIDY0IDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMySDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjQ0OEgzODR2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJoMTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWNDQ4IDM4NCAzNDRjMC0yMy4yLTE0LjEtNDMuMS0zNC4yLTUxLjZsLTI4LjMtNzkuM0MzOTAuMSAxODEuMyAzNjAgMTYwIDMyNi4yIDE2MEgxODUuOGMtMzMuOCAwLTY0IDIxLjMtNzUuMyA1My4xek0xMjggMzkyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTI4MC0yNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTM5IDM5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw0OCA0OGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNzMgMzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwem00MDAgMEwzOTEgODdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0OC00OGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwelwiXX0scW09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2xlaWdoXCIsaWNvbjpbNjQwLDUxMixbXSxcImY3Y2NcIixcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZWMjU2YzAgNTMgNDMgOTYgOTYgOTZ2MzJoNjRWMzUySDM4NHYzMmg2NFYzNTJjNTMgMCA5Ni00MyA5Ni05NlYxNjBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINTEyIDQ4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NDEuM2MwIDMwLjItMjQuNSA1NC43LTU0LjcgNTQuN2MtNzUuNSAwLTE0NS42LTM4LjktMTg1LjYtMTAyLjlsLTQuMy02LjlDMTc0LjIgNjcuNiAxMjUgMzcuNiA3MC43IDMyLjdjLTIuMi0uNS00LjQtLjctNi43LS43SDU1IDMyek02NDAgMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRINjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINTUyYzQ4LjYgMCA4OC0zOS40IDg4LTg4di04elwiXX0sRT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy1kb3duLTEtOVwiLGljb246WzU3Niw1MTIsW1wic29ydC1udW1lcmljLWFzY1wiLFwic29ydC1udW1lcmljLWRvd25cIl0sXCJmMTYyXCIsXCJNMzUyIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDE2djY0SDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg0OCA0OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0NjRWNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTYwIDQ4MGM5IDAgMTcuNS0zLjggMjMuNi0xMC40bDg4LTk2YzExLjktMTMgMTEuMS0zMy4zLTItNDUuMnMtMzMuMy0xMS4xLTQ1LjIgMkwxOTIgMzY1LjdWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzY1LjdMOTUuNiAzMzAuNGMtMTEuOS0xMy0zMi4yLTEzLjktNDUuMi0ycy0xMy45IDMyLjItMiA0NS4ybDg4IDk2QzE0Mi41IDQ3Ni4yIDE1MSA0ODAgMTYwIDQ4MHpNNDQ1LjcgMzY0LjljLTQuMiAyLTguOCAzLjEtMTMuNyAzLjFjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmMwIDEyLjgtNy41IDIzLjgtMTguMyAyOC45em0tNDAuNyA1NC45bC02LjggOS4yYy0xMC41IDE0LjItNy41IDM0LjIgNi43IDQ0LjhzMzQuMiA3LjUgNDQuOC02LjdsNDguOC02NS44YzE0LTE4LjkgMjEuNS00MS43IDIxLjUtNjUuMmMwLTQ4LjYtMzkuNC04OC04OC04OHMtODggMzkuNC04OCA4OGMwIDM5LjIgMjUuNiA3Mi40IDYxLjEgODMuOHpcIl19LEdtPUUsV209RSxXNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW5kLWhvbGRpbmctZHJvcGxldFwiLGljb246WzU3Niw1MTIsW1wiaGFuZC1ob2xkaW5nLXdhdGVyXCJdLFwiZjRjMVwiLFwiTTI3NS41IDYuNkMyNzguMyAyLjUgMjgzIDAgMjg4IDBzOS43IDIuNSAxMi41IDYuNkwzNjYuOCAxMDNDMzc4IDExOS4zIDM4NCAxMzguNiAzODQgMTU4LjNWMTYwYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2di0xLjdjMC0xOS44IDYtMzkgMTcuMi01NS4zTDI3NS41IDYuNnpNNTY4LjIgMzM2LjNjMTMuMSAxNy44IDkuMyA0Mi44LTguNSA1NS45TDQzMy4xIDQ4NS41Yy0yMy40IDE3LjItNTEuNiAyNi41LTgwLjcgMjYuNUgxOTIgMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg2OC44bDQ0LjktMzZjMjIuNy0xOC4yIDUwLjktMjggODAtMjhIMjcyaDE2IDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDI4OCAyNzJjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZIMzkyLjZsMTE5LjctODguMmMxNy44LTEzLjEgNDIuOC05LjMgNTUuOSA4LjV6TTE5My42IDM4NGwwIDAtLjkgMGMuMyAwIC42IDAgLjkgMHpcIl19LEVtPVc2LEltPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndhdGVyXCIsaWNvbjpbNTc2LDUxMixbXSxcImY3NzNcIixcIk0yNjkuNSA2OS45YzExLjEtNy45IDI1LjktNy45IDM3IDBDMzI5IDg1LjQgMzU2LjUgOTYgMzg0IDk2YzI2LjkgMCA1NS40LTEwLjggNzcuNC0yNi4xbDAgMGMxMS45LTguNSAyOC4xLTcuOCAzOS4yIDEuN2MxNC40IDExLjkgMzIuNSAyMSA1MC42IDI1LjJjMTcuMiA0IDI3LjkgMjEuMiAyMy45IDM4LjRzLTIxLjIgMjcuOS0zOC40IDIzLjljLTI0LjUtNS43LTQ0LjktMTYuNS01OC4yLTI1QzQ0OS41IDE0OS43IDQxNyAxNjAgMzg0IDE2MGMtMzEuOSAwLTYwLjYtOS45LTgwLjQtMTguOWMtNS44LTIuNy0xMS4xLTUuMy0xNS42LTcuN2MtNC41IDIuNC05LjcgNS4xLTE1LjYgNy43Yy0xOS44IDktNDguNSAxOC45LTgwLjQgMTguOWMtMzMgMC02NS41LTEwLjMtOTQuNS0yNS44Yy0xMy40IDguNC0zMy43IDE5LjMtNTguMiAyNWMtMTcuMiA0LTM0LjQtNi43LTM4LjQtMjMuOXM2LjctMzQuNCAyMy45LTM4LjRDNDIuOCA5Mi42IDYxIDgzLjUgNzUuMyA3MS42YzExLjEtOS41IDI3LjMtMTAuMSAzOS4yLTEuN2wwIDBDMTM2LjcgODUuMiAxNjUuMSA5NiAxOTIgOTZjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xem0zNyAyODhDMzI5IDM3My40IDM1Ni41IDM4NCAzODQgMzg0YzI2LjkgMCA1NS40LTEwLjggNzcuNC0yNi4xbDAgMGMxMS45LTguNSAyOC4xLTcuOCAzOS4yIDEuN2MxNC40IDExLjkgMzIuNSAyMSA1MC42IDI1LjJjMTcuMiA0IDI3LjkgMjEuMiAyMy45IDM4LjRzLTIxLjIgMjcuOS0zOC40IDIzLjljLTI0LjUtNS43LTQ0LjktMTYuNS01OC4yLTI1QzQ0OS41IDQzNy43IDQxNyA0NDggMzg0IDQ0OGMtMzEuOSAwLTYwLjYtOS45LTgwLjQtMTguOWMtNS44LTIuNy0xMS4xLTUuMy0xNS42LTcuN2MtNC41IDIuNC05LjcgNS4xLTE1LjYgNy43Yy0xOS44IDktNDguNSAxOC45LTgwLjQgMTguOWMtMzMgMC02NS41LTEwLjMtOTQuNS0yNS44Yy0xMy40IDguNC0zMy43IDE5LjMtNTguMiAyNWMtMTcuMiA0LTM0LjQtNi43LTM4LjQtMjMuOXM2LjctMzQuNCAyMy45LTM4LjRjMTguMS00LjIgMzYuMi0xMy4zIDUwLjYtMjUuMmMxMS4xLTkuNCAyNy4zLTEwLjEgMzkuMi0xLjdsMCAwQzEzNi43IDM3My4yIDE2NS4xIDM4NCAxOTIgMzg0YzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwem0wLTE0NEMzMjkgMjI5LjQgMzU2LjUgMjQwIDM4NCAyNDBjMjYuOSAwIDU1LjQtMTAuOCA3Ny40LTI2LjFsMCAwYzExLjktOC41IDI4LjEtNy44IDM5LjIgMS43YzE0LjQgMTEuOSAzMi41IDIxIDUwLjYgMjUuMmMxNy4yIDQgMjcuOSAyMS4yIDIzLjkgMzguNHMtMjEuMiAyNy45LTM4LjQgMjMuOWMtMjQuNS01LjctNDQuOS0xNi41LTU4LjItMjVDNDQ5LjUgMjkzLjcgNDE3IDMwNCAzODQgMzA0Yy0zMS45IDAtNjAuNi05LjktODAuNC0xOC45Yy01LjgtMi43LTExLjEtNS4zLTE1LjYtNy43Yy00LjUgMi40LTkuNyA1LjEtMTUuNiA3LjdjLTE5LjggOS00OC41IDE4LjktODAuNCAxOC45Yy0zMyAwLTY1LjUtMTAuMy05NC41LTI1LjhjLTEzLjQgOC40LTMzLjcgMTkuMy01OC4yIDI1Yy0xNy4yIDQtMzQuNC02LjctMzguNC0yMy45czYuNy0zNC40IDIzLjktMzguNGMxOC4xLTQuMiAzNi4yLTEzLjMgNTAuNi0yNS4yYzExLjEtOS41IDI3LjMtMTAuMSAzOS4yLTEuN2wwIDBDMTM2LjcgMjI5LjIgMTY1LjEgMjQwIDE5MiAyNDBjMjcuNSAwIDU1LTEwLjYgNzcuNS0yNi4xYzExLjEtNy45IDI1LjktNy45IDM3IDB6XCJdfSxPbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYWxlbmRhci1jaGVja1wiLGljb246WzQ0OCw1MTIsW10sXCJmMjc0XCIsXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnpNMzI5IDMwNWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC05NSA5NS00Ny00N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMEwzMjkgMzA1elwiXX0sWG09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnJhaWxsZVwiLGljb246WzY0MCw1MTIsW10sXCJmMmExXCIsXCJNMTI4IDk2YzAgMzUuMy0yOC43IDY0LTY0IDY0UzAgMTMxLjMgMCA5NlMyOC43IDMyIDY0IDMyczY0IDI4LjcgNjQgNjR6bTk2IDE3NmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnptMCA0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0ek04MCA0MTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNnptNDggMGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6bTExMiAwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6bTQ4IDBjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0ek02NCAzMjBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHpNMjI0IDE2MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0ek00ODAgOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0em0xMTIgMGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2em00OCAwYzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHpNNTc2IDI3MmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnptMCA0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0em0xNiA5NmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2em00OCAwYzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHpNNDE2IDI3MmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnptMCA0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0em0xNiA5NmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2em00OCAwYzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHpcIl19LEU2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInByZXNjcmlwdGlvbi1ib3R0bGUtbWVkaWNhbFwiLGljb246WzM4NCw1MTIsW1wicHJlc2NyaXB0aW9uLWJvdHRsZS1hbHRcIl0sXCJmNDg2XCIsXCJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyQzE0LjMgOTYgMCA4MS43IDAgNjRWMzJ6bTMyIDk2SDM1MlY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIOTZjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHpNMTYwIDI0MHY0OEgxMTJjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzNTJoNDhjOC44IDAgMTYtNy4yIDE2LTE2VjMwNGMwLTguOC03LjItMTYtMTYtMTZIMjI0VjI0MGMwLTguOC03LjItMTYtMTYtMTZIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZ6XCJdfSxRbT1FNixLbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsYW5kbWFya1wiLGljb246WzUxMiw1MTIsWzEyNzk2M10sXCJmNjZmXCIsXCJNMjQwLjEgNC4yYzkuOC01LjYgMjEuOS01LjYgMzEuOCAwbDE3MS44IDk4LjFMNDQ4IDEwNGwwIC45IDQ3LjkgMjcuNGMxMi42IDcuMiAxOC44IDIyIDE1LjEgMzZzLTE2LjQgMjMuOC0zMC45IDIzLjhIMzJjLTE0LjUgMC0yNy4yLTkuOC0zMC45LTIzLjhzMi41LTI4LjggMTUuMS0zNkw2NCAxMDQuOVYxMDRsNC40LTEuNkwyNDAuMSA0LjJ6TTY0IDIyNGg2NFY0MTZoNDBWMjI0aDY0VjQxNmg0OFYyMjRoNjRWNDE2aDQwVjIyNGg2NFY0MjAuM2MuNiAuMyAxLjIgLjcgMS44IDEuMWw0OCAzMmMxMS43IDcuOCAxNyAyMi40IDEyLjkgMzUuOVM0OTQuMSA1MTIgNDgwIDUxMkgzMmMtMTQuMSAwLTI2LjUtOS4yLTMwLjYtMjIuN3MxLjEtMjguMSAxMi45LTM1LjlsNDgtMzJjLjYtLjQgMS4yLS43IDEuOC0xLjFWMjI0elwiXX0sam09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidHJ1Y2tcIixpY29uOls2NDAsNTEyLFsxMjg2NjYsOTk1MV0sXCJmMGQxXCIsXCJNNDggMEMyMS41IDAgMCAyMS41IDAgNDhWMzY4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDY0YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZIMzg0YzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWMjg4IDI1NiAyMzcuM2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1MTIgMTE0LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdINDE2VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4ek00MTYgMTYwaDUwLjdMNTQ0IDIzNy4zVjI1Nkg0MTZWMTYwek0yMDggNDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHptMjcyIDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6XCJdfSxKbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjcm9zc2hhaXJzXCIsaWNvbjpbNTEyLDUxMixbXSxcImYwNWJcIixcIk0yNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0Mi40YzkzLjcgMTMuOSAxNjcuNyA4OCAxODEuNiAxODEuNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDY5LjZjLTEzLjkgOTMuNy04OCAxNjcuNy0xODEuNiAxODEuNlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDY5LjZDMTMwLjMgNDU1LjcgNTYuMyAzODEuNyA0Mi40IDI4OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0Mi40QzU2LjMgMTMwLjMgMTMwLjMgNTYuMyAyMjQgNDIuNFYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTA3LjQgMjg4YzEyLjUgNTguMyA1OC40IDEwNC4xIDExNi42IDExNi42VjM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjIwLjZjNTguMy0xMi41IDEwNC4xLTU4LjQgMTE2LjYtMTE2LjZIMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDIwLjZDMzkyLjEgMTY1LjcgMzQ2LjMgMTE5LjkgMjg4IDEwNy40VjEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxMDcuNEMxNjUuNyAxMTkuOSAxMTkuOSAxNjUuNyAxMDcuNCAyMjRIMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDEwNy40ek0yNTYgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdfSxabT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24tY2FuZVwiLGljb246WzQ0OCw1MTIsW10sXCJlNTNjXCIsXCJNMjcyIDQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OHptLTggMTg3LjNsNDcuNCA1Ny4xYzExLjMgMTMuNiAzMS41IDE1LjUgNDUuMSA0LjJzMTUuNS0zMS41IDQuMi00NS4xbC03My43LTg4LjljLTE4LjItMjItNDUuMy0zNC43LTczLjktMzQuN0gxNzcuMWMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjlMMTIwIDI1Ni45VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM1MmgxNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMzUuM3pNMzUyIDM3NmMwLTQuNCAzLjYtOCA4LThzOCAzLjYgOCA4VjQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjM3NmMwLTMwLjktMjUuMS01Ni01Ni01NnMtNTYgMjUuMS01NiA1NnY4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR2LTh6XCJdfSxZbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0ZW50XCIsaWNvbjpbNTc2LDUxMixbXSxcImU1N2RcIixcIk0yNjkuNCA2QzI4MC41LTIgMjk1LjUtMiAzMDYuNiA2bDIyNCAxNjBjNy40IDUuMyAxMi4yIDEzLjUgMTMuMiAyMi41bDMyIDI4OGMxIDktMS45IDE4LjEtOCAyNC45cy0xNC43IDEwLjctMjMuOCAxMC43SDQxNkwyODggMjg4VjUxMkgzMmMtOS4xIDAtMTcuOC0zLjktMjMuOC0xMC43cy05LTE1LjgtOC0yNC45bDMyLTI4OGMxLTkgNS44LTE3LjIgMTMuMi0yMi41TDI2OS40IDZ6XCJdfSxfbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2ZXN0LXBhdGNoZXNcIixpY29uOls0NDgsNTEyLFtdLFwiZTA4NlwiLFwiTTE1MS4yIDY5LjdsNTUuOSAxNjcuNy0xMSAzMy4xYy0yLjcgOC4yLTQuMSAxNi43LTQuMSAyNS4zVjQ2NGMwIDE0LjUgMy45IDI4LjIgMTAuNyAzOS45QzE5NSA1MDkgMTg1LjkgNTEyIDE3NiA1MTJINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjI3MC41YzAtOS41IDIuOC0xOC43IDguMS0yNi42bDQ3LjktNzEuOGM1LjMtNy45IDguMS0xNy4xIDguMS0yNi42VjEyOCA1NC4zIDQ4QzY0IDIxLjUgODUuNSAwIDExMiAwaDQuNWMuMiAwIC40IDAgLjYgMGMuNCAwIC44IDAgMS4yIDBjMTguOCAwIDM0LjEgOS43IDQ0LjEgMTguOEMxNzEuNiAyNy4yIDE5MC44IDQwIDIyNCA0MHM1Mi40LTEyLjggNjEuNy0yMS4yQzI5NS43IDkuNyAzMTEgMCAzMjkuNyAwYy40IDAgLjggMCAxLjIgMGMuMiAwIC40IDAgLjYgMEgzMzZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2Ni4zVjEyOHYxNy41YzAgOS41IDIuOCAxOC43IDguMSAyNi42bDQ3LjkgNzEuOGM1LjMgNy45IDguMSAxNy4xIDguMSAyNi42VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgyNzJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjI5NS44YzAtNS4yIC44LTEwLjMgMi41LTE1LjJMMjk2LjggNjkuN0MyNzkuNCA3OS43IDI1NS40IDg4IDIyNCA4OHMtNTUuNC04LjMtNzIuOC0xOC4zek05NiA0NTZjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MHpNNjMuNSAyNTUuNWMtNC43IDQuNy00LjcgMTIuMyAwIDE3TDc5IDI4OCA2My41IDMwMy41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdzMTIuMyA0LjcgMTcgMEw5NiAzMDVsMTUuNSAxNS41YzQuNyA0LjcgMTIuMyA0LjcgMTcgMHM0LjctMTIuMyAwLTE3TDExMyAyODhsMTUuNS0xNS41YzQuNy00LjcgNC43LTEyLjMgMC0xN3MtMTIuMy00LjctMTcgMEw5NiAyNzEgODAuNSAyNTUuNWMtNC43LTQuNy0xMi4zLTQuNy0xNyAwek0zMDQgMjgwdjggMzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyIDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRoLTh2LThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6XCJdfSwkbT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGVjay1kb3VibGVcIixpY29uOls1MTIsNTEyLFtdLFwiZjU2MFwiLFwiTTM3NC42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyIDE3OC43bC01Ny40LTU3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDgwIDgwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjB6bTk2IDEyOGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgNDAyLjcgODYuNiAyOTcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwyNTYtMjU2elwiXX0sST17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy1kb3duLWEtelwiLGljb246WzU3Niw1MTIsW1wic29ydC1hbHBoYS1hc2NcIixcInNvcnQtYWxwaGEtZG93blwiXSxcImYxNWRcIixcIk0xODMuNiA0NjkuNkMxNzcuNSA0NzYuMiAxNjkgNDgwIDE2MCA0ODBzLTE3LjUtMy44LTIzLjYtMTAuNGwtODgtOTZjLTExLjktMTMtMTEuMS0zMy4zIDItNDUuMnMzMy4zLTExLjEgNDUuMiAyTDEyOCAzNjUuN1Y2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyVjM2NS43bDMyLjQtMzUuNGMxMS45LTEzIDMyLjItMTMuOSA0NS4yLTJzMTMuOSAzMi4yIDIgNDUuMmwtODggOTZ6TTMyMCAzMjBjMC0xNy43IDE0LjMtMzIgMzItMzJINDgwYzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlMNDI5LjMgNDE2SDQ4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzNTJjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhzLTIuMi0yNS43IDYuOS0zNC45TDQwMi43IDM1MkgzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00MTYgMzJjMTIuMSAwIDIzLjIgNi44IDI4LjYgMTcuN2w2NCAxMjggMTYgMzJjNy45IDE1LjggMS41IDM1LTE0LjMgNDIuOXMtMzUgMS41LTQyLjktMTQuM0w0NjAuMiAyMjRIMzcxLjhsLTcuMiAxNC4zYy03LjkgMTUuOC0yNy4xIDIyLjItNDIuOSAxNC4zcy0yMi4yLTI3LjEtMTQuMy00Mi45bDE2LTMyIDY0LTEyOEMzOTIuOCAzOC44IDQwMy45IDMyIDQxNiAzMnpNMzk1LjggMTc2aDQwLjRMNDE2IDEzNS42IDM5NS44IDE3NnpcIl19LGN2PUksYXY9SSxzdj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtb25leS1iaWxsLXdoZWF0XCIsaWNvbjpbNTEyLDUxMixbXSxcImU1MmFcIixcIk0xNzYgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDguOC03LjIgMTYtMTYgMTZjLTQ0LjIgMC04MC0zNS44LTgwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnpNNTYgMTZoNDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINTZDNDIuNyA2NCAzMiA1My4zIDMyIDQwczEwLjctMjQgMjQtMjR6TTI0IDg4SDEzNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRTMTAuNyA4OCAyNCA4OHptOCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGg0OGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg1NmMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTI3MiAxNmMwLTguOCA3LjItMTYgMTYtMTZjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MHpNNDAwIDBjNDQuMiAwIDgwIDM1LjggODAgODBjMCA4LjgtNy4yIDE2LTE2IDE2Yy00NC4yIDAtODAtMzUuOC04MC04MGMwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE0NGMwIDQ0LjItMzUuOCA4MC04MCA4MGMtOC44IDAtMTYtNy4yLTE2LTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwYzguOCAwIDE2IDcuMiAxNiAxNnpNMzUyIDEyOGM4LjggMCAxNiA3LjIgMTYgMTZjMCA0NC4yLTM1LjggODAtODAgODBjLTguOCAwLTE2LTcuMi0xNi0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MHptLTk2IDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwYy04LjggMC0xNi03LjItMTYtMTZjMC00NC4yIDM1LjgtODAgODAtODBjOC44IDAgMTYgNy4yIDE2IDE2ek0wIDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OEg0NjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzMDR6TTQ4IDQxNnY0OEg5NmMwLTI2LjUtMjEuNS00OC00OC00OHpNOTYgMzA0SDQ4djQ4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4ek00NjQgNDE2Yy0yNi41IDAtNDggMjEuNS00OCA0OGg0OFY0MTZ6TTQxNiAzMDRjMCAyNi41IDIxLjUgNDggNDggNDhWMzA0SDQxNnptLTk2IDgwYzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpcIl19LGV2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNvb2tpZVwiLGljb246WzUxMiw1MTIsWzEyNzg1MF0sXCJmNTYzXCIsXCJNMjQ3LjIgMTdjLTIyLjEtMy4xLTQ0LjYgLjktNjQuNCAxMS40bC03NCAzOS41Qzg5LjEgNzguNCA3My4yIDk0LjkgNjMuNCAxMTVMMjYuNyAxOTAuNmMtOS44IDIwLjEtMTMgNDIuOS05LjEgNjQuOWwxNC41IDgyLjhjMy45IDIyLjEgMTQuNiA0Mi4zIDMwLjcgNTcuOWw2MC4zIDU4LjRjMTYuMSAxNS42IDM2LjYgMjUuNiA1OC43IDI4LjdsODMgMTEuN2MyMi4xIDMuMSA0NC42LS45IDY0LjQtMTEuNGw3NC0zOS41YzE5LjctMTAuNSAzNS42LTI3IDQ1LjQtNDcuMmwzNi43LTc1LjVjOS44LTIwLjEgMTMtNDIuOSA5LjEtNjQuOWwtMTQuNi04Mi44Yy0zLjktMjIuMS0xNC42LTQyLjMtMzAuNy01Ny45TDM4OC45IDU3LjVjLTE2LjEtMTUuNi0zNi42LTI1LjYtNTguNy0yOC43TDI0Ny4yIDE3ek0yMDggMjA4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LGM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctcm90YXRlLWxlZnRcIixpY29uOls1MTIsNTEyLFs4NjM0LFwiYXJyb3ctbGVmdC1yb3RhdGVcIixcImFycm93LXJvdGF0ZS1iYWNrXCIsXCJhcnJvdy1yb3RhdGUtYmFja3dhcmRcIixcInVuZG9cIl0sXCJmMGUyXCIsXCJNMTI1LjcgMTYwSDE3NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY1MS4yTDk3LjYgOTcuNmM4Ny41LTg3LjUgMjI5LjMtODcuNSAzMTYuOCAwczg3LjUgMjI5LjMgMCAzMTYuOHMtMjI5LjMgODcuNS0zMTYuOCAwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwYzYyLjUgNjIuNSAxNjMuOCA2Mi41IDIyNi4zIDBzNjIuNS0xNjMuOCAwLTIyNi4zcy0xNjMuOC02Mi41LTIyNi4zIDBMMTI1LjcgMTYwelwiXX0sZnY9Yyxydj1jLGx2PWMsaXY9YyxJNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYXJkLWRyaXZlXCIsaWNvbjpbNTEyLDUxMixbMTI4NDM2LFwiaGRkXCJdLFwiZjBhMFwiLFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0VjI4MC40Yy0xNy0xNS4yLTM5LjQtMjQuNC02NC0yNC40SDY0Yy0yNC42IDAtNDcgOS4yLTY0IDI0LjRWOTZ6TTY0IDI4OEg0NDhjMzUuMyAwIDY0IDI4LjcgNjQgNjR2NjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjM1MmMwLTM1LjMgMjguNy02NCA2NC02NHpNMzIwIDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0xMjgtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyelwiXX0sb3Y9STYsTzY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1ncmluLXNxdWludC10ZWFyc1wiLGljb246WzUxMiw1MTIsWzEyOTMxNSxcImdyaW4tc3F1aW50LXRlYXJzXCJdLFwiZjU4NlwiLFwiTTQyNi44IDE0LjJDNDQ2LTUgNDc3LjUtNC42IDQ5Ny4xIDE0LjlzMjAgNTEgLjcgNzAuM2MtNi44IDYuOC0yMS40IDEyLjQtMzcuNCAxNi43Yy0xOC41IDUtMzguOCA4LjMtNTAuOSAxMGMtNC45IC44LTkuMS0yLjgtOS41LTcuNGMtLjEtLjcgMC0xLjQgLjEtMi4xYzEuNi0xMS4yIDQuNi0yOS42IDktNDdjLjMtMS4zIC43LTIuNiAxLTMuOWM0LjMtMTUuOSA5LjgtMzAuNSAxNi43LTM3LjR6bS00NC43IDE5Yy0xLjUgNC44LTIuOSA5LjYtNC4xIDE0LjNjLTQuOCAxOC45LTggMzguNS05LjcgNTAuM2MtNCAyNi44IDE4LjkgNDkuNyA0NS43IDQ1LjhjMTEuOS0xLjYgMzEuNS00LjggNTAuNC05LjdjNC43LTEuMiA5LjUtMi41IDE0LjMtNC4xQzUzNC4yIDIyNy41IDUyMC4yIDM1My44IDQzNyA0MzdjLTgzLjIgODMuMi0yMDkuNSA5Ny4yLTMwNy4yIDQxLjhjMS41LTQuOCAyLjgtOS42IDQtMTQuM2M0LjgtMTguOSA4LTM4LjUgOS43LTUwLjNjNC0yNi44LTE4LjktNDkuNy00NS43LTQ1LjhjLTExLjkgMS42LTMxLjUgNC44LTUwLjQgOS43Yy00LjcgMS4yLTkuNSAyLjUtMTQuMyA0LjFDLTIyLjIgMjg0LjUtOC4yIDE1OC4yIDc1IDc1QzE1OC4yLTguMyAyODQuNS0yMi4yIDM4Mi4yIDMzLjJ6TTUxLjUgNDEwLjFjMTguNS01IDM4LjgtOC4zIDUwLjktMTBjLjQtLjEgLjctLjEgMS0uMWM1LjEtLjIgOS4yIDQuMyA4LjQgOS42Yy0xLjcgMTIuMS01IDMyLjQtMTAgNTAuOUM5Ny42IDQ3Ni40IDkyIDQ5MSA4NS4yIDQ5Ny44QzY2IDUxNyAzNC41IDUxNi42IDE0LjkgNDk3LjFzLTIwLTUxLS43LTcwLjNjNi44LTYuOCAyMS40LTEyLjQgMzcuNC0xNi43ek00MTYuOSAyMDljLTQuNy0xMS45LTIwLjgtMTEtMjYuOCAuM2MtMTkgMzUuNS00NSA3MC44LTc3LjUgMTAzLjNTMjQ0LjggMzcxLjEgMjA5LjMgMzkwYy0xMS4zIDYtMTIuMiAyMi4xLS4zIDI2LjhjNTcuNiAyMi45IDEyNS44IDExIDE3Mi4zLTM1LjVzNTguNC0xMTQuOCAzNS41LTE3Mi4zek04Ny4xIDI4NS4xYzIgMiA0LjYgMy4yIDcuMyAzLjRsNTYuMSA1LjEgNS4xIDU2LjFjLjMgMi44IDEuNSA1LjQgMy40IDcuM2M2LjMgNi4zIDE3LjIgMy42IDE5LjgtNC45bDI5LjctOTcuNGMzLjUtMTEuNi03LjMtMjIuNS0xOS0xOUw5MiAyNjUuM2MtOC42IDIuNi0xMS4zIDEzLjQtNC45IDE5Ljh6TTI2NS4zIDkybC0yOS43IDk3LjRjLTMuNSAxMS42IDcuMyAyMi41IDE5IDE5bDk3LjQtMjkuN2M4LjYtMi42IDExLjMtMTMuNCA0LjktMTkuOGMtMi0yLTQuNi0zLjItNy4zLTMuNGwtNTYuMS01LjEtNS4xLTU2LjFjLS4yLTIuOC0xLjUtNS40LTMuNC03LjNjLTYuMy02LjMtMTcuMi0zLjYtMTkuOCA0Ljl6XCJdfSxudj1PNixIdj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkdW1iYmVsbFwiLGljb246WzY0MCw1MTIsW10sXCJmNDRiXCIsXCJNMTEyIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjIyNHY2NFY0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMTQ0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODRINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJoNDhWOTZ6bTQxNiAwdjMyaDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDUyOHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkg0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4OCAyMjQgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJoMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTQxNiAyMjR2NjRIMjI0VjIyNEg0MTZ6XCJdfSxYNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyZWN0YW5nbGUtbGlzdFwiLGljb246WzU3Niw1MTIsW1wibGlzdC1hbHRcIl0sXCJmMDIyXCIsXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkg1MTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NnpNMTI4IDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0zMi0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek0xMjggMzg0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTk2LTI0OGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEg0NDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMjI0em0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDQ0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyMjR6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDIyNHpcIl19LHp2PVg2LFZ2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRhcnAtZHJvcGxldFwiLGljb246WzU3Niw1MTIsW10sXCJlNTdjXCIsXCJNMjg4IDE2MGMtMzUuMyAwLTY0LTI2LjktNjQtNjBjMC0yNCAzMy43LTcwLjEgNTIuMi05My41YzYuMS03LjcgMTcuNS03LjcgMjMuNiAwQzMxOC4zIDI5LjkgMzUyIDc2IDM1MiAxMDBjMCAzMy4xLTI4LjcgNjAtNjQgNjB6TTY0IDEyOEgxOTcuNWMxMy4yIDM3LjMgNDguNyA2NCA5MC41IDY0czc3LjQtMjYuNyA5MC41LTY0SDUxMmMzNS4zIDAgNjQgMjguNyA2NCA2NFYzNTJINDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDEyOEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE5MmMwLTM1LjMgMjguNy02NCA2NC02NHpNNDQ4IDUxMmwwLTEyOEg1NzZMNDQ4IDUxMnpNOTYgMjU2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdfSxtdj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob3VzZS1tZWRpY2FsLWNpcmNsZS1jaGVja1wiLGljb246WzY0MCw1MTIsW10sXCJlNTExXCIsXCJNMzIwIDM2OGMwIDU5LjUgMjkuNSAxMTIuMSA3NC44IDE0NEgxMjguMWMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMjg3LjZIMzJjLTE4IDAtMzItMTQtMzItMzIuMWMwLTkgMy0xNyAxMC0yNEwyNjYuNCA4YzctNyAxNS04IDIyLThzMTUgMiAyMSA3TDUyMi4xIDE5My45Yy04LjUtMS4zLTE3LjMtMS45LTI2LjEtMS45Yy01NC43IDAtMTAzLjUgMjQuOS0xMzUuOCA2NEgzMjBWMjA4YzAtOC44LTcuMi0xNi0xNi0xNkgyNzJjLTguOCAwLTE2IDcuMi0xNiAxNnY0OEgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNnptMzIwIDBjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRzLTE0NC02NC41LTE0NC0xNDRzNjQuNS0xNDQgMTQ0LTE0NHMxNDQgNjQuNSAxNDQgMTQ0em0tNzYuNy00My4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEw0ODAgMzg1LjRsLTI4LjctMjguN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw3Mi03MmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpcIl19LFE2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1za2lpbmctbm9yZGljXCIsaWNvbjpbNTc2LDUxMixbXCJza2lpbmctbm9yZGljXCJdLFwiZjdjYVwiLFwiTTMzNiA5NmMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4ek0yMjcuMiAxNjBjMS45IDAgMy44IC4xIDUuNiAuM0wyMDEuNiAyNTRjLTkuMyAyOCAxLjcgNTguOCAyNi44IDc0LjVsODYuMiA1My45TDI5MS4zIDQ2NEgyMDIuOGw0MS4xLTg4LjEtMzIuNC0yMC4zYy03LjgtNC45LTE0LjctMTAuNy0yMC42LTE3LjNMMTMyLjIgNDY0SDk5LjdsNTQuMi0yNTcuNmM0LjYtMS41IDktNC4xIDEyLjctNy44bDIzLjEtMjMuMWM5LjktOS45IDIzLjQtMTUuNSAzNy41LTE1LjV6TTEyMS40IDE5OC42Yy40IC40IC44IC44IDEuMyAxLjJMNjcgNDY0SDI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDE1OS4zYy40IDAgLjkgMCAxLjMgMEgzMTkuM2MuNSAwIDEgMCAxLjQgMEg1MDRjMzkuOCAwIDcyLTMyLjIgNzItNzJ2LThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEg0MzQuNmwyNy42LTE3OS4zYzEwLjUtNS4yIDE3LjgtMTYuMSAxNy44LTI4LjdjMC0xNy43LTE0LjMtMzItMzItMzJINDI2LjdjLTEyLjkgMC0yNC42LTcuOC0yOS41LTE5LjdsLTYuMy0xNWMtMTQuNi0zNS4xLTQ0LjEtNjEuOS04MC41LTczLjFsLTQ4LjctMTVjLTExLjEtMy40LTIyLjctNS4yLTM0LjQtNS4yYy0zMSAwLTYwLjggMTIuMy04Mi43IDM0LjNsLTIzLjEgMjMuMWMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjN6bTMwOCA4OS40TDQwMi4zIDQ2NEgzNTcuOGwyMS42LTc1LjZjNS45LTIwLjYtMi42LTQyLjYtMjAuNy01My45TDMwMiAyOTlsMzAuOS04Mi40IDUuMSAxMi4zQzM1MyAyNjQuNyAzODcuOSAyODggNDI2LjcgMjg4aDIuN3pcIl19LHZ2PVE2LE12PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNhbGVuZGFyLXBsdXNcIixpY29uOls0NDgsNTEyLFtdLFwiZjI3MVwiLFwiTTk2IDMyVjY0SDQ4QzIxLjUgNjQgMCA4NS41IDAgMTEydjQ4SDQ0OFYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzUyVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjY0SDE2MFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM5NiAxNC4zIDk2IDMyek00NDggMTkySDBWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQwMGMyNi41IDAgNDgtMjEuNSA0OC00OFYxOTJ6TTIyNCAyNDhjMTMuMyAwIDI0IDEwLjcgMjQgMjR2NTZoNTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjQ4djU2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0VjM3NkgxNDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoNTZWMjcyYzAtMTMuMyAxMC43LTI0IDI0LTI0elwiXX0sdHY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGxhbmUtYXJyaXZhbFwiLGljb246WzY0MCw1MTIsWzEyODc0OF0sXCJmNWFmXCIsXCJNLjMgMTY2LjlMMCA2OEMwIDU3LjcgOS41IDUwLjEgMTkuNSA1Mi4zbDM1LjYgNy45YzEwLjYgMi4zIDE5LjIgOS45IDIzIDIwTDk2IDEyOGwxMjcuMyAzNy42TDE4MS44IDIwLjRDMTc4LjkgMTAuMiAxODYuNiAwIDE5Ny4yIDBoNDAuMWMxMS42IDAgMjIuMiA2LjIgMjcuOSAxNi4zbDEwOSAxOTMuOCAxMDcuMiAzMS43YzE1LjkgNC43IDMwLjggMTIuNSA0My43IDIyLjhsMzQuNCAyNy42YzI0IDE5LjIgMTguMSA1Ny4zLTEwLjcgNjguMmMtNDEuMiAxNS42LTg2LjIgMTguMS0xMjguOCA3TDEyMS43IDI4OS44Yy0xMS4xLTIuOS0yMS4yLTguNy0yOS4zLTE2LjlMOS41IDE4OS40Yy01LjktNi05LjMtMTQtOS4zLTIyLjV6TTMyIDQ0OEg2MDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTE2MC04MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTY0IDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdfSxLNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtbGVmdFwiLGljb246WzUxMiw1MTIsWzYxODQwLFwiYXJyb3ctYWx0LWNpcmNsZS1sZWZ0XCJdLFwiZjM1OVwiLFwiTTUxMiAyNTZDNTEyIDExNC42IDM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnMyNTYtMTE0LjYgMjU2LTI1NnpNMTE2LjcgMjQ0LjdsMTEyLTExMmM0LjYtNC42IDExLjUtNS45IDE3LjQtMy41czkuOSA4LjMgOS45IDE0LjhsMCA2NCA5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDAgMCA2NGMwIDYuNS0zLjkgMTIuMy05LjkgMTQuOHMtMTIuOSAxLjEtMTcuNC0zLjVsLTExMi0xMTJjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42elwiXX0saHY9SzYsajY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidHJhaW4tc3Vid2F5XCIsaWNvbjpbNDQ4LDUxMixbXCJzdWJ3YXlcIl0sXCJmMjM5XCIsXCJNOTYgMEM0MyAwIDAgNDMgMCA5NlYzNTJjMCA0OCAzNS4yIDg3LjcgODEuMSA5NC45bC00NiA0NkMyOC4xIDQ5OS45IDMzLjEgNTEyIDQzIDUxMkg4Mi43YzguNSAwIDE2LjYtMy40IDIyLjYtOS40TDE2MCA0NDhIMjg4bDU0LjYgNTQuNmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRINDA1YzEwIDAgMTUtMTIuMSA3LjktMTkuMWwtNDYtNDZjNDYtNy4xIDgxLjEtNDYuOSA4MS4xLTk0LjlWOTZjMC01My00My05Ni05Ni05Nkg5NnpNNjQgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYxMjh6TTI3MiA5Nmg4MGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgyNzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTI4IDM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTIyNCAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXX0sQ3Y9ajYsTHY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hhcnQtZ2FudHRcIixpY29uOls1MTIsNTEyLFtdLFwiZTBlNFwiLFwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQwMGMwIDguOCA3LjIgMTYgMTYgMTZINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDgwYy00NC4yIDAtODAtMzUuOC04MC04MFY2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnptOTYgOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem05NiA2NEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0xNjAgOTZoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXX0sTz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJpbmRpYW4tcnVwZWUtc2lnblwiLGljb246WzMyMCw1MTIsW1wiaW5kaWFuLXJ1cGVlXCIsXCJpbnJcIl0sXCJlMWJjXCIsXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMkg5NmgxNkgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjMxLjhjOS42IDE0LjQgMTYuNyAzMC42IDIwLjcgNDhIMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDI1Mi40Yy0xMy4yIDU4LjMtNjEuOSAxMDMuMi0xMjIuMiAxMTAuOUwyNzQuNiA0MjJjMTQuNCAxMC4zIDE3LjcgMzAuMyA3LjQgNDQuNnMtMzAuMyAxNy43LTQ0LjYgNy40TDEzLjQgMzE0QzIuMSAzMDYtMi43IDI5MS41IDEuNSAyNzguMlMxOC4xIDI1NiAzMiAyNTZoODBjMzIuOCAwIDYxLTE5LjcgNzMuMy00OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkgxODUuM0MxNzMgMTE1LjcgMTQ0LjggOTYgMTEyIDk2SDk2IDMyQzE0LjMgOTYgMCA4MS43IDAgNjR6XCJdfSxwdj1PLGR2PU8sSjY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY3JvcC1zaW1wbGVcIixpY29uOls1MTIsNTEyLFtcImNyb3AtYWx0XCJdLFwiZjU2NVwiLFwiTTEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMyVjY0SDMyQzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMkg2NFYzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzUyVjM4NEgxMjhWMzJ6TTM4NCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NDhoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDQ4bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE2MCA2NHY2NGwyMjQgMCAwIDM1MnpcIl19LHV2PUo2LFo2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1vbmV5LWJpbGwtMVwiLGljb246WzU3Niw1MTIsW1wibW9uZXktYmlsbC1hbHRcIl0sXCJmM2QxXCIsXCJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTY0IDMyMEg2NFYzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjR6TTY0IDE5MlYxMjhoNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTQ0OCAzODRjMC0zNS4zIDI4LjctNjQgNjQtNjR2NjRINDQ4em02NC0xOTJjLTM1LjMgMC02NC0yOC43LTY0LTY0aDY0djY0ek00MDAgMjU2YzAgNjEuOS01MC4xIDExMi0xMTIgMTEycy0xMTItNTAuMS0xMTItMTEyczUwLjEtMTEyIDExMi0xMTJzMTEyIDUwLjEgMTEyIDExMnpNMjUyIDIwOGMwIDkuNyA2LjkgMTcuNyAxNiAxOS42VjI3NmgtNGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBoMjQgMjRjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwaC00VjIwOGMwLTExLTktMjAtMjAtMjBIMjcyYy0xMSAwLTIwIDktMjAgMjB6XCJdfSx4dj1aNixZNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsZWZ0LWxvbmdcIixpY29uOls1MTIsNTEyLFtcImxvbmctYXJyb3ctYWx0LWxlZnRcIl0sXCJmMzBhXCIsXCJNMTc3LjUgOThjLTguOC0zLjgtMTktMi0yNiA0LjZsLTE0NCAxMzZDMi43IDI0My4xIDAgMjQ5LjQgMCAyNTZzMi43IDEyLjkgNy41IDE3LjRsMTQ0IDEzNmM3IDYuNiAxNy4yIDguNCAyNiA0LjZzMTQuNS0xMi41IDE0LjUtMjJsMC04OCAyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yODggMCAwLTg4YzAtOS42LTUuNy0xOC4yLTE0LjUtMjJ6XCJdfSxndj1ZNixTdj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkbmFcIixpY29uOls0NDgsNTEyLFsxMjk1MTZdLFwiZjQ3MVwiLFwiTTQxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyYzAgNTkuOC0zMC4zIDEwNy41LTY5LjQgMTQ2LjZjLTI4IDI4LTYyLjUgNTMuNS05Ny4zIDc3LjRsLTIuNSAxLjdjLTExLjkgOC4xLTIzLjggMTYuMS0zNS41IDIzLjlsMCAwIDAgMCAwIDAtMS42IDFjLTYgNC0xMS45IDcuOS0xNy44IDExLjljLTIwLjkgMTQtNDAuOCAyNy43LTU5LjMgNDEuNUgyODMuM2MtOS44LTcuNC0yMC4xLTE0LjctMzAuNy0yMi4xbDctNC43IDMtMmMxNS4xLTEwLjEgMzAuOS0yMC42IDQ2LjctMzEuNmMyNSAxOC4xIDQ4LjkgMzcuMyA2OS40IDU3LjdDNDE3LjcgMzcyLjUgNDQ4IDQyMC4yIDQ0OCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJINjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC01OS44IDMwLjMtMTA3LjUgNjkuNC0xNDYuNmMyOC0yOCA2Mi41LTUzLjUgOTcuMy03Ny40Yy0zNC44LTIzLjktNjkuMy00OS4zLTk3LjMtNzcuNEMzMC4zIDEzOS41IDAgOTEuOCAwIDMyQzAgMTQuMyAxNC4zIDAgMzIgMFM2NCAxNC4zIDY0IDMySDM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzM4LjYgMzg0SDEwOS40Yy0xMC4xIDEwLjYtMTguNiAyMS4zLTI1LjUgMzJIMzY0LjFjLTYuOC0xMC43LTE1LjMtMjEuNC0yNS41LTMyek0xMDkuNCAxMjhIMzM4LjZjMTAuMS0xMC43IDE4LjYtMjEuMyAyNS41LTMySDgzLjljNi44IDEwLjcgMTUuMyAyMS4zIDI1LjUgMzJ6bTU1LjQgNDhjMTguNCAxMy44IDM4LjQgMjcuNSA1OS4zIDQxLjVjMjAuOS0xNCA0MC44LTI3LjcgNTkuMy00MS41SDE2NC43elwiXX0sTnY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidmlydXMtc2xhc2hcIixpY29uOls2NDAsNTEyLFtdLFwiZTA3NVwiLFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdsLTE1NC4zLTEyMWMtMi0zMC4xIDIwLjgtNjAuMSA1Ni02MC4xSDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg1MzIuNWMtNDkuOSAwLTc0LjktNjAuMy0zOS42LTk1LjZsOC4yLTguMmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOC4yIDguMkM0MTIuMyAxMTguNCAzNTIgOTMuNCAzNTIgNDMuNVYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY0My41YzAgNDkuOS02MC4zIDc0LjktOTUuNiAzOS42TDE4NC4yIDc1Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGMtMS42IDEuNi0zLjEgMy40LTQuMyA1LjNMMzguOCA1LjF6bTIyNS44IDE3N2M2LjktMy45IDE0LjktNi4xIDIzLjQtNi4xYzI2LjUgMCA0OCAyMS41IDQ4IDQ4YzAgNC40LS42IDguNy0xLjcgMTIuN2wtNjkuNy01NC42ek0xMDcuNSAyMjRIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMTEuNWM0OS45IDAgNzQuOSA2MC4zIDM5LjYgOTUuNmwtOC4yIDguMmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw4LjItOC4yYzM1LjMtMzUuMyA5NS42LTEwLjMgOTUuNiAzOS42VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQ2OC41YzAtMzEuMiAyMy42LTUyLjcgNTAtNTUuN0wxNDQuNyAyMTBjLTkuNSA4LjUtMjIuMiAxNC0zNy4yIDE0elwiXX0sXzY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWludXNcIixpY29uOls0NDgsNTEyLFs4MjExLDg3MjIsMTAxMzQsXCJzdWJ0cmFjdFwiXSxcImYwNjhcIixcIk00MzIgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDQ4IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpcIl19LHd2PV82LGt2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNoaWxkLXJpZmxlXCIsaWNvbjpbNTc2LDUxMixbXSxcImU0ZTBcIixcIk0xNzYgMTI4YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjR6bS04IDM1MlYzNTJoMTZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzAwLjVMMjYwLjkgMzIxYzkuNCAxNSAyOS4yIDE5LjQgNDQuMSAxMHMxOS40LTI5LjIgMTAtNDQuMWwtNTEuNy04Mi4xYy0xNy42LTI3LjktNDguMy00NC45LTgxLjItNDQuOUgxNjkuOGMtMzMgMC02My43IDE2LjktODEuMiA0NC45TDM2LjkgMjg3Yy05LjQgMTUtNC45IDM0LjcgMTAgNDQuMXMzNC43IDQuOSA0NC4xLTEwTDEwNCAzMDAuNVY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNNDQ4IDBINDMyIDQxNmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNlYxMzIuM2MtOS42IDUuNS0xNiAxNS45LTE2IDI3Ljd2MzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjM2OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmgxNnY5NmMwIDguOCA3LjIgMTYgMTYgMTZoNTkuNWMxMC40IDAgMTgtOS44IDE1LjUtMTkuOUw0ODQgNDAwaDQ0YzguOCAwIDE2LTcuMiAxNi0xNlYzNjhjMC04LjgtNy4yLTE2LTE2LTE2SDQ4MFYzMjUuM2w1My4xLTE3LjdjNi41LTIuMiAxMC45LTguMyAxMC45LTE1LjJWMjA4YzAtOC44LTcuMi0xNi0xNi0xNkg1MTJjLTguOCAwLTE2IDcuMi0xNiAxNnY1NmwtMTYgNS4zVjE2MGMwLTExLjgtNi40LTIyLjItMTYtMjcuN1YxNmMwLTguOC03LjItMTYtMTYtMTZ6XCJdfSxidj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGVzc1wiLGljb246WzUxMiw1MTIsW10sXCJmNDM5XCIsXCJNMTQ0IDE2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjMySDk2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDE2Vjk2SDU5LjRDNDguNyA5NiA0MCAxMDQuNyA0MCAxMTUuNGMwIDMgLjcgNS45IDIgOC43YzYgMTIuNCAyMy44IDUwLjggMzIuOCA4My45SDcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDcuN0M3OCAzMDIuOSA2OS40IDM1Mi43IDYzLjEgMzg0SDE5Mi45Yy02LjQtMzEuMy0xNC45LTgxLjEtMTYuNi0xMjhIMTg0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0aC0yLjhjOS0zMy4yIDI2LjgtNzEuNSAzMi44LTgzLjljMS4zLTIuNyAyLTUuNiAyLTguN2MwLTEwLjctOC43LTE5LjQtMTkuNC0xOS40SDE0NFY2NGgxNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxNDRWMTZ6TTI1LjIgNDUxLjRsLTguOCA0LjRDNi4zIDQ2MC44IDAgNDcxLjEgMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDIyNi4zYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43YzAtMTEuMi02LjMtMjEuNS0xNi40LTI2LjVsLTguOC00LjRjLTQuMS0yLjEtNi44LTYuMy02LjgtMTAuOWMwLTEzLjUtMTAuOS0yNC40LTI0LjQtMjQuNEg1Ni40QzQyLjkgNDE2IDMyIDQyNi45IDMyIDQ0MC40YzAgNC42LTIuNiA4LjktNi44IDEwLjl6bTI3OS4yIDQuNGMtMTAuMSA1LTE2LjQgMTUuMy0xNi40IDI2LjVjMCAxNi40IDEzLjMgMjkuNyAyOS43IDI5LjdINDgyLjNjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjdjMC0xMS4yLTYuMy0yMS41LTE2LjQtMjYuNWwtOC44LTQuNGMtNC4xLTIuMS02LjgtNi4zLTYuOC0xMC45YzAtMTMuNS0xMC45LTI0LjQtMjQuNC0yNC40SDM0NC40Yy0xMy41IDAtMjQuNCAxMC45LTI0LjQgMjQuNGMwIDQuNi0yLjYgOC45LTYuOCAxMC45bC04LjggNC40ek0zMDQgMjU5LjljMCA3LjggMi44IDE1LjMgOCAyMS4xbDE4LjkgMjEuNGM1LjQgNi4xIDguMiAxNCA4IDIyLjFMMzM3IDM4NEg0NjIuNWwtMi43LTU4LjdjLS40LTguNSAyLjYtMTYuOSA4LjQtMjMuMWwxOS4zLTIxYzUuNC01LjkgOC41LTEzLjYgOC41LTIxLjdWMjAwYzAtNC40LTMuNi04LTgtOEg0NjRjLTQuNCAwLTggMy42LTggOHYxNmMwIDQuNC0zLjYgOC04IDhoLThjLTQuNCAwLTgtMy42LTgtOFYyMDBjMC00LjQtMy42LTgtOC04SDM3NmMtNC40IDAtOCAzLjYtOCA4djE2YzAgNC40LTMuNiA4LTggOGgtOGMtNC40IDAtOC0zLjYtOC04VjIwMGMwLTQuNC0zLjYtOC04LThIMzEyYy00LjQgMC04IDMuNi04IDh2NTkuOXpNMzkyIDMzNmMtNC40IDAtOC0zLjYtOC04VjMwNGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djI0YzAgNC40LTMuNiA4LTggOEgzOTJ6XCJdfSwkNj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy1sZWZ0LWxvbmdcIixpY29uOls1MTIsNTEyLFtcImxvbmctYXJyb3ctbGVmdFwiXSxcImYxNzdcIixcIk0xMDkuMyAyODhMNDgwIDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzcwLjcgMCA3My40LTczLjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDEyOCAxMjhjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAyODh6XCJdfSxBdj0kNixCdj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwbHVnLWNpcmNsZS1jaGVja1wiLGljb246WzU3Niw1MTIsW10sXCJlNTVjXCIsXCJNOTYgMEM3OC4zIDAgNjQgMTQuMyA2NCAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ2MzJjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDEyLjhjMTIuMy0yLjUgMjQuMS02LjQgMzUuMS0xMS41Yy0yLjEtMTAuOC0zLjEtMjEuOS0zLjEtMzMuM2MwLTgwLjMgNTMuOC0xNDggMTI3LjMtMTY5LjJjLjUtMi4yIC43LTQuNSAuNy02LjhjMC0xNy43LTE0LjMtMzItMzItMzJIMzJ6TTU3NiAzNjhjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0em0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDE2IDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl19LFR2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN0cmVldC12aWV3XCIsaWNvbjpbNTEyLDUxMixbXSxcImYyMWRcIixcIk0zMjAgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRzMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0em0tOTYgOTZjLTM1LjMgMC02NCAyOC43LTY0IDY0djQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDEuOGwxMS4xIDk5LjVjMS44IDE2LjIgMTUuNSAyOC41IDMxLjggMjguNWgzOC43YzE2LjMgMCAzMC0xMi4zIDMxLjgtMjguNUwzMTguMiAzMDRIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjIyNGMwLTM1LjMtMjguNy02NC02NC02NEgyMjR6TTEzMi4zIDM5NC4yYzEzLTIuNCAyMS43LTE0LjkgMTkuMy0yNy45cy0xNC45LTIxLjctMjcuOS0xOS4zYy0zMi40IDUuOS02MC45IDE0LjItODIgMjQuOGMtMTAuNSA1LjMtMjAuMyAxMS43LTI3LjggMTkuNkM2LjQgMzk5LjUgMCA0MTAuNSAwIDQyNGMwIDIxLjQgMTUuNSAzNi4xIDI5LjEgNDVjMTQuNyA5LjYgMzQuMyAxNy4zIDU2LjQgMjMuNEMxMzAuMiA1MDQuNyAxOTAuNCA1MTIgMjU2IDUxMnMxMjUuOC03LjMgMTcwLjQtMTkuNmMyMi4xLTYuMSA0MS44LTEzLjggNTYuNC0yMy40YzEzLjctOC45IDI5LjEtMjMuNiAyOS4xLTQ1YzAtMTMuNS02LjQtMjQuNS0xNC0zMi42Yy03LjUtNy45LTE3LjMtMTQuMy0yNy44LTE5LjZjLTIxLTEwLjYtNDkuNS0xOC45LTgyLTI0LjhjLTEzLTIuNC0yNS41IDYuMy0yNy45IDE5LjNzNi4zIDI1LjUgMTkuMyAyNy45YzMwLjIgNS41IDUzLjcgMTIuOCA2OSAyMC41YzMuMiAxLjYgNS44IDMuMSA3LjkgNC41YzMuNiAyLjQgMy42IDcuMiAwIDkuNmMtOC44IDUuNy0yMy4xIDExLjgtNDMgMTcuM0MzNzQuMyA0NTcgMzE4LjUgNDY0IDI1NiA0NjRzLTExOC4zLTctMTU3LjctMTcuOWMtMTkuOS01LjUtMzQuMi0xMS42LTQzLTE3LjNjLTMuNi0yLjQtMy42LTcuMiAwLTkuNmMyLjEtMS40IDQuOC0yLjkgNy45LTQuNWMxNS4zLTcuNyAzOC44LTE0LjkgNjktMjAuNXpcIl19LHl2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZyYW5jLXNpZ25cIixpY29uOlszMjAsNTEyLFtdLFwiZTE4ZlwiLFwiTTgwIDMyQzYyLjMgMzIgNDggNDYuMyA0OCA2NFYyMjR2OTZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDh2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzODRoODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTEyVjI1NkgyNTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTEyVjk2SDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg4MHpcIl19LFB2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZvbHVtZS1vZmZcIixpY29uOlszMjAsNTEyLFtdLFwiZjAyNlwiLFwiTTMyMCA2NGMwLTEyLjYtNy40LTI0LTE4LjktMjkuMnMtMjUtMy4xLTM0LjQgNS4zTDEzMS44IDE2MEg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2NjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRoNjcuOEwyNjYuNyA0NzEuOWM5LjQgOC40IDIyLjkgMTAuNCAzNC40IDUuM1MzMjAgNDYwLjYgMzIwIDQ0OFY2NHpcIl19LG09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZHMtYXNsLWludGVycHJldGluZ1wiLGljb246WzY0MCw1MTIsW1wiYW1lcmljYW4tc2lnbi1sYW5ndWFnZS1pbnRlcnByZXRpbmdcIixcImFzbC1pbnRlcnByZXRpbmdcIixcImhhbmRzLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nXCJdLFwiZjJhM1wiLFwiTTE1Ni42IDQ2LjNjNy45LTE1LjggMS41LTM1LTE0LjMtNDIuOXMtMzUtMS41LTQyLjkgMTQuM0wxMy41IDE4OS40QzQuNiAyMDcuMiAwIDIyNi44IDAgMjQ2LjdWMjU2YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4aDcyIDh2LS4zYzM1LjItMi43IDY1LjQtMjIuOCA4Mi4xLTUxLjdjOC44LTE1LjMgMy42LTM0LjktMTEuNy00My43cy0zNC45LTMuNi00My43IDExLjdjLTcgMTItMTkuOSAyMC0zNC43IDIwYy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwYzE0LjggMCAyNy43IDggMzQuNyAyMGM4LjggMTUuMyAyOC40IDIwLjUgNDMuNyAxMS43czIwLjUtMjguNCAxMS43LTQzLjdjLTEyLjgtMjIuMS0zMy42LTM5LjEtNTguNC00Ny4xbDgwLjgtMjJjMTctNC42IDI3LjEtMjIuMiAyMi41LTM5LjNzLTIyLjItMjcuMS0zOS4zLTIyLjVMMTk0LjkgMTI0LjZsODEuNi02OGMxMy42LTExLjMgMTUuNC0zMS41IDQuMS00NS4xUzI0OS4xLTMuOSAyMzUuNSA3LjRMMTMzLjYgOTIuM2wyMy00NnpNNDgzLjQgNDY1LjdjLTcuOSAxNS44LTEuNSAzNSAxNC4zIDQyLjlzMzUgMS41IDQyLjktMTQuM2w4NS45LTE3MS43YzguOS0xNy44IDEzLjUtMzcuNCAxMy41LTU3LjJWMjU2YzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4SDQ0MGgtOHYuM2MtMzUuMiAyLjctNjUuNCAyMi44LTgyLjEgNTEuN2MtOC45IDE1LjMtMy42IDM0LjkgMTEuNyA0My43czM0LjkgMy42IDQzLjctMTEuN2M3LTEyIDE5LjktMjAgMzQuNy0yMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGMtMTQuOCAwLTI3LjctOC0zNC43LTIwYy04LjktMTUuMy0yOC40LTIwLjUtNDMuNy0xMS43cy0yMC41IDI4LjQtMTEuNyA0My43YzEyLjggMjIuMSAzMy42IDM5LjEgNTguNCA0Ny4xbC04MC44IDIyYy0xNy4xIDQuNy0yNy4xIDIyLjItMjIuNSAzOS4zczIyLjIgMjcuMSAzOS4zIDIyLjVsMTAwLjctMjcuNS04MS42IDY4Yy0xMy42IDExLjMtMTUuNCAzMS41LTQuMSA0NS4xczMxLjUgMTUuNCA0NS4xIDQuMWwxMDEuOS04NC45LTIzIDQ2elwiXX0sRnY9bSxEdj1tLFJ2PW0sYzg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ2VhclwiLGljb246WzUxMiw1MTIsWzk4ODEsXCJjb2dcIl0sXCJmMDEzXCIsXCJNNDk1LjkgMTY2LjZjMy4yIDguNyAuNSAxOC40LTYuNCAyNC42bC00My4zIDM5LjRjMS4xIDguMyAxLjcgMTYuOCAxLjcgMjUuNHMtLjYgMTcuMS0xLjcgMjUuNGw0My4zIDM5LjRjNi45IDYuMiA5LjYgMTUuOSA2LjQgMjQuNmMtNC40IDExLjktOS43IDIzLjMtMTUuOCAzNC4zbC00LjcgOC4xYy02LjYgMTEtMTQgMjEuNC0yMi4xIDMxLjJjLTUuOSA3LjItMTUuNyA5LjYtMjQuNSA2LjhsLTU1LjctMTcuN2MtMTMuNCAxMC4zLTI4LjIgMTguOS00NCAyNS40bC0xMi41IDU3LjFjLTIgOS4xLTkgMTYuMy0xOC4yIDE3LjhjLTEzLjggMi4zLTI4IDMuNS00Mi41IDMuNXMtMjguNy0xLjItNDIuNS0zLjVjLTkuMi0xLjUtMTYuMi04LjctMTguMi0xNy44bC0xMi41LTU3LjFjLTE1LjgtNi41LTMwLjYtMTUuMS00NC0yNS40TDgzLjEgNDI1LjljLTguOCAyLjgtMTguNiAuMy0yNC41LTYuOGMtOC4xLTkuOC0xNS41LTIwLjItMjIuMS0zMS4ybC00LjctOC4xYy02LjEtMTEtMTEuNC0yMi40LTE1LjgtMzQuM2MtMy4yLTguNy0uNS0xOC40IDYuNC0yNC42bDQzLjMtMzkuNEM2NC42IDI3My4xIDY0IDI2NC42IDY0IDI1NnMuNi0xNy4xIDEuNy0yNS40TDIyLjQgMTkxLjJjLTYuOS02LjItOS42LTE1LjktNi40LTI0LjZjNC40LTExLjkgOS43LTIzLjMgMTUuOC0zNC4zbDQuNy04LjFjNi42LTExIDE0LTIxLjQgMjIuMS0zMS4yYzUuOS03LjIgMTUuNy05LjYgMjQuNS02LjhsNTUuNyAxNy43YzEzLjQtMTAuMyAyOC4yLTE4LjkgNDQtMjUuNGwxMi41LTU3LjFjMi05LjEgOS0xNi4zIDE4LjItMTcuOEMyMjcuMyAxLjIgMjQxLjUgMCAyNTYgMHMyOC43IDEuMiA0Mi41IDMuNWM5LjIgMS41IDE2LjIgOC43IDE4LjIgMTcuOGwxMi41IDU3LjFjMTUuOCA2LjUgMzAuNiAxNS4xIDQ0IDI1LjRsNTUuNy0xNy43YzguOC0yLjggMTguNi0uMyAyNC41IDYuOGM4LjEgOS44IDE1LjUgMjAuMiAyMi4xIDMxLjJsNC43IDguMWM2LjEgMTEgMTEuNCAyMi40IDE1LjggMzQuM3pNMjU2IDMzNmM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHMzNS44IDgwIDgwIDgwelwiXX0sVXY9YzgsYTg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZHJvcGxldC1zbGFzaFwiLGljb246WzY0MCw1MTIsW1widGludC1zbGFzaFwiXSxcImY1YzdcIixcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ5MS41IDM1OS45YzMtMTIuOCA0LjUtMjYuMiA0LjUtMzkuOWMwLTc0LjEtMTAyLjMtMjMwLjYtMTUwLjktMzAwLjdjLTEyLjMtMTcuNy0zNy44LTE3LjctNTAuMSAwYy0yMC44IDMwLTUxLjQgNzUuOC03OS42IDEyNC4xTDM4LjggNS4xek0xNDQgMzIwYzAgOTcuMiA3OC44IDE3NiAxNzYgMTc2YzQ4LjEgMCA5MS43LTE5LjMgMTIzLjUtNTAuNkwxNzAgMjI5LjljLTE1LjYgMzQuNy0yNiA2Ni42LTI2IDkwLjF6bTk2IDBjMCA0NC4yIDM1LjggODAgODAgODBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZjLTYxLjkgMC0xMTItNTAuMS0xMTItMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6XCJdfSxxdj1hOCxHdj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtb3NxdWVcIixpY29uOls2NDAsNTEyLFsxMjgzMzJdLFwiZjY3OFwiLFwiTTQwMCAwYzUgMCA5LjggMi40IDEyLjggNi40YzM0LjcgNDYuMyA3OC4xIDc0LjkgMTMzLjUgMTExLjVsMCAwIDAgMGM1LjIgMy40IDEwLjUgNyAxNiAxMC42YzI4LjkgMTkuMiA0NS43IDUxLjcgNDUuNyA4Ni4xYzAgMjguNi0xMS4zIDU0LjUtMjkuOCA3My40SDIyMS44Yy0xOC40LTE5LTI5LjgtNDQuOS0yOS44LTczLjRjMC0zNC40IDE2LjctNjYuOSA0NS43LTg2LjFjNS40LTMuNiAxMC44LTcuMSAxNi0xMC42bDAgMCAwIDBDMzA5LjEgODEuMyAzNTIuNSA1Mi43IDM4Ny4yIDYuNGMzLTQgNy44LTYuNCAxMi44LTYuNHpNMjg4IDUxMlY0NDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NzJIMTkyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzNTJjMC0xNy43IDE0LjMtMzIgMzItMzJINjA4YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkg1NjBWNDQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0djcySDQ0OFY0NTRjMC0xOS04LjQtMzctMjMtNDkuMkw0MDAgMzg0bC0yNSAyMC44QzM2MC40IDQxNyAzNTIgNDM1IDM1MiA0NTR2NThIMjg4ek03MC40IDUuMmM1LjctNC4zIDEzLjUtNC4zIDE5LjIgMGwxNiAxMkMxMzkuOCA0Mi45IDE2MCA4My4yIDE2MCAxMjZ2Mkgwdi0yQzAgODMuMiAyMC4yIDQyLjkgNTQuNCAxNy4ybDE2LTEyek0wIDE2MEgxNjBWMjk2LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRWNDgwYzAgOS42IDIuMSAxOC42IDUuOCAyNi44Yy02LjYgMy40LTE0IDUuMi0yMS44IDUuMkg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTc2IDE2MHpcIl19LFd2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1vc3F1aXRvXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1MmJcIixcIk00NjMuNyA1MDUuOWM5LjgtOC45IDEwLjctMjQuMyAyLjEtMzQuM2wtNDIuMS00OSAwLTU0LjdjMC01LjUtMS44LTEwLjgtNS4xLTE1LjFMMzUyIDI2Ni4zbDAtLjNMNDg1LjQgMzg3LjhDNTQyLjQgNDQ3LjYgNjQwIDQwNS4yIDY0MCAzMjAuNmMwLTQ3LjktMzQtODguMy03OS40LTk0LjJsLTE1My0yMy45IDQwLjgtNDAuOWM3LjgtNy44IDkuNC0yMC4xIDMuOS0yOS44TDQyOC41IDkwLjFsMzguMi01MC45YzgtMTAuNiA2LjEtMjUuOS00LjMtMzQuMXMtMjUuMi02LjMtMzMuMiA0LjRsLTQ4IDYzLjljLTUuOSA3LjktNi42IDE4LjYtMS43IDI3LjJMNDAyLjIgMTQwIDM1MiAxOTAuM2wwLTM4LjJjMC0xNC45LTEwLjItMjcuNC0yNC0zMWwwLTU3LjJjMC00LjQtMy42LTgtOC04cy04IDMuNi04IDhsMCA1Ny4yYy0xMy44IDMuNi0yNCAxNi4xLTI0IDMxbDAgMzguMUwyMzcuOCAxNDBsMjIuNi0zOS41YzQuOS04LjYgNC4yLTE5LjMtMS43LTI3LjJsLTQ4LTYzLjljLTgtMTAuNi0yMi44LTEyLjYtMzMuMi00LjRzLTEyLjIgMjMuNS00LjMgMzQuMWwzOC4yIDUwLjktMjMuOSA0MS43Yy01LjUgOS43LTMuOSAyMiAzLjkgMjkuOGw0MC44IDQwLjktMTUzIDIzLjlDMzQgMjMyLjMgMCAyNzIuNyAwIDMyMC42YzAgODQuNiA5Ny42IDEyNyAxNTQuNiA2Ny4xTDI4OCAyNjZsMCAuMy02Ni41IDg2LjRjLTMuMyA0LjMtNS4xIDkuNi01LjEgMTUuMWwwIDU0LjctNDIuMSA0OWMtOC42IDEwLjEtNy43IDI1LjUgMi4xIDM0LjNzMjQuNyA3LjkgMzMuNC0yLjFsNDgtNTUuOWMzLjgtNC40IDUuOS0xMC4yIDUuOS0xNi4xbDAtNTUuNEwyODggMzQ0LjdsMCA2My4xYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02My4xIDI0LjMgMzEuNiAwIDU1LjRjMCA1LjkgMi4xIDExLjcgNS45IDE2LjFsNDggNTUuOWM4LjYgMTAuMSAyMy42IDExIDMzLjQgMi4xelwiXX0sRXY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3Rhci1vZi1kYXZpZFwiLGljb246WzUxMiw1MTIsWzEwMDE3XSxcImY2OWFcIixcIk00MDQuMiAzMDkuNUwzODMuMSAzNDRoNDIuM2wtMjEuMS0zNC41ek0zNzEuNCAyNTZsLTU0LTg4SDE5NC42bC01NCA4OCA1NCA4OEgzMTcuNGw1NC04OHptNjUuNyAwbDUzLjQgODdjMy42IDUuOSA1LjUgMTIuNyA1LjUgMTkuNmMwIDIwLjctMTYuOCAzNy40LTM3LjQgMzcuNEgzNDguN2wtNTYuMiA5MS41QzI4NC44IDUwNC4zIDI3MC45IDUxMiAyNTYgNTEycy0yOC44LTcuNy0zNi42LTIwLjVMMTYzLjMgNDAwSDUzLjRDMzIuOCA0MDAgMTYgMzgzLjIgMTYgMzYyLjZjMC02LjkgMS45LTEzLjcgNS41LTE5LjZsNTMuNC04N0wyMS41IDE2OWMtMy42LTUuOS01LjUtMTIuNy01LjUtMTkuNkMxNiAxMjguOCAzMi44IDExMiA1My40IDExMkgxNjMuM2w1Ni4yLTkxLjVDMjI3LjIgNy43IDI0MS4xIDAgMjU2IDBzMjguOCA3LjcgMzYuNiAyMC41TDM0OC43IDExMkg0NTguNmMyMC43IDAgMzcuNCAxNi44IDM3LjQgMzcuNGMwIDYuOS0xLjkgMTMuNy01LjUgMTkuNmwtNTMuNCA4N3ptLTU0LTg4bDIxLjEgMzQuNUw0MjUuNCAxNjhIMzgzLjF6TTI4MyAxMTJMMjU2IDY4bC0yNyA0NGg1NHpNMTI4LjkgMTY4SDg2LjZsMjEuMSAzNC41TDEyOC45IDE2OHpNMTA3LjggMzA5LjVMODYuNiAzNDRoNDIuM2wtMjEuMS0zNC41ek0yMjkgNDAwbDI3IDQ0IDI3LTQ0SDIyOXpcIl19LEl2PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1taWxpdGFyeS1yaWZsZVwiLGljb246WzUxMiw1MTIsW10sXCJlNTRiXCIsXCJNMTYwIDM5YzAtMTMgMTAtMjMuOCAyMi45LTI0LjlMMzM0LjcgMS40QzM0NCAuNyAzNTIgOCAzNTIgMTcuNFY0OGMwIDguOC03LjIgMTYtMTYgMTZIMTg1Yy0xMy44IDAtMjUtMTEuMi0yNS0yNXptMTcuNiA1N0gzMzQuNGMxIDUuMiAxLjYgMTAuNSAxLjYgMTZjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBjMC01LjUgLjYtMTAuOCAxLjYtMTZ6bTIyOCAzNjQuM0wzNTIgMzY5LjdWNDgwYzAgMS4zLS4xIDIuNS0uMiAzLjhMMTc3LjUgMjM0LjljMTYuNi03LjEgMzQuNi0xMC45IDUzLjMtMTAuOWg1MC40YzE1LjkgMCAzMS4zIDIuOCA0NS44IDcuOUw0MjEuOSA2Ny43Yy03LjctNC40LTEwLjMtMTQuMi01LjktMjEuOXMxNC4yLTEwLjMgMjEuOS01LjlsMTMuOSA4IDEzLjkgOGM3LjcgNC40IDEwLjMgMTQuMiA1LjkgMjEuOUw0MTYgMTczLjlsMS42IC45YzE1LjMgOC44IDIwLjYgMjguNCAxMS43IDQzLjdMMzkyLjYgMjgyYzIgMi44IDMuOSA1LjggNS43IDguOGw3Ni4xIDEyOC44YzExLjIgMTkgNC45IDQzLjUtMTQuMSA1NC44cy00My41IDQuOS01NC44LTE0LjF6TTMyMCA1MTJIMTkyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzNjkuN2wtNTMuNiA5MC42Yy0xMS4yIDE5LTM1LjggMjUuMy01NC44IDE0LjFzLTI1LjMtMzUuOC0xNC4xLTU0LjhsNzYuMS0xMjguOGM5LjQtMTUuOCAyMS43LTI5LjMgMzYtNDBMMzMxLjEgNTEwYy0zLjUgMS4zLTcuMiAyLTExLjEgMnpNMjk2IDMyMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0elwiXX0sczg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FydC1zaG9wcGluZ1wiLGljb246WzU3Niw1MTIsWzEyODcyMixcInNob3BwaW5nLWNhcnRcIl0sXCJmMDdhXCIsXCJNMjQgMEMxMC43IDAgMCAxMC43IDAgMjRTMTAuNyA0OCAyNCA0OEg3Ni4xbDYwLjMgMzE2LjVjMi4yIDExLjMgMTIuMSAxOS41IDIzLjYgMTkuNUg0ODhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMTc5LjlsLTkuMS00OGgzMTdjMTQuMyAwIDI2LjktOS41IDMwLjgtMjMuM2w1NC0xOTJDNTc4LjMgNTIuMyA1NjMgMzIgNTQxLjggMzJIMTIybC0yLjQtMTIuNUMxMTcuNCA4LjIgMTA3LjUgMCA5NiAwSDI0ek0xNzYgNTEyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6bTMzNi00OGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6XCJdfSxPdj1zOCxYdj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2aWFsc1wiLGljb246WzUxMiw1MTIsW10sXCJmNDkzXCIsXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMkg4OGg0OCA1NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMlY0MDBjMCA0NC4yLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBWOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNMTM2IDk2SDg4VjI1Nmg0OFY5NnpNMjg4IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDU2IDQ4IDU2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyVjQwMGMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MFY5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQyNCA5NkgzNzZWMjU2aDQ4Vjk2elwiXX0sUXY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGx1Zy1jaXJjbGUtcGx1c1wiLGljb246WzU3Niw1MTIsW10sXCJlNTVmXCIsXCJNOTYgMEM3OC4zIDAgNjQgMTQuMyA2NCAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0zMiAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ2MzJjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDEyLjhjMTIuMy0yLjUgMjQuMS02LjQgMzUuMS0xMS41Yy0yLjEtMTAuOC0zLjEtMjEuOS0zLjEtMzMuM2MwLTgwLjMgNTMuOC0xNDggMTI3LjMtMTY5LjJjLjUtMi4yIC43LTQuNSAuNy02LjhjMC0xNy43LTE0LjMtMzItMzItMzJIMzJ6TTQzMiA1MTJjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRzLTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHptMTYtMjA4djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDQ0OHY0OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlYzODRIMzY4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDQ4VjMwNGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXX0sS3Y9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGxhY2Utb2Ytd29yc2hpcFwiLGljb246WzY0MCw1MTIsW10sXCJmNjdmXCIsXCJNMjI0IDEwOS4zVjIxNy42TDE4My4zIDI0MmMtMTQuNSA4LjctMjMuMyAyNC4zLTIzLjMgNDEuMlY1MTJoOTZWNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR2OTZoOTZWMjgzLjJjMC0xNi45LTguOC0zMi41LTIzLjMtNDEuMkw0MTYgMjE3LjZWMTA5LjNjMC04LjUtMy40LTE2LjYtOS40LTIyLjZMMzMxLjMgMTEuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMjMzLjQgODYuNmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42ek0yNC45IDMzMC4zQzkuNSAzMzguOCAwIDM1NC45IDAgMzcyLjRWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDgwVjI3My42TDI0LjkgMzMwLjN6TTU5MiA1MTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzcyLjRjMC0xNy41LTkuNS0zMy42LTI0LjktNDIuMUw1MTIgMjczLjZWNTEyaDgwelwiXX0sanY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ3JpcC12ZXJ0aWNhbFwiLGljb246WzMyMCw1MTIsW10sXCJmNThlXCIsXCJNNDAgMzUyYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMHptMTkyIDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwek00MCAzMjBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwek0yMzIgMTkyYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMHpNNDAgMTYwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OGMwLTIyLjEtMTcuOS00MC00MC00MEw0MCAzMkMxNy45IDMyIDAgNDkuOSAwIDcybDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDB6TTIzMiAzMmMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDhjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDB6XCJdfSxlOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy10dXJuLXVwXCIsaWNvbjpbMzg0LDUxMixbXCJsZXZlbC11cFwiXSxcImYxNDhcIixcIk0zMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMzA2LjcgNzMuNCA3My40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxMDkuMyAxNjAgNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwelwiXX0sSnY9ZTgsWnY9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidVwiLGljb246WzM4NCw1MTIsWzExN10sXCI1NVwiLFwiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjI4OGMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMjg4YzAgMTA2LTg2IDE5Mi0xOTIgMTkyUzAgMzk0IDAgMjg4VjY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyelwiXX0sZjg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3F1YXJlLXJvb3QtdmFyaWFibGVcIixpY29uOls1NzYsNTEyLFtcInNxdWFyZS1yb290LWFsdFwiXSxcImY2OThcIixcIk0yODkgMjQuMkMyOTIuNSAxMCAzMDUuMyAwIDMyMCAwSDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzNDVMMjM5IDQ4Ny44Yy0zLjIgMTMtMTQuMiAyMi42LTI3LjYgMjRzLTI2LjEtNS41LTMyLjEtMTcuNUw3Ni4yIDI4OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg5NmMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43bDczLjMgMTQ2LjZMMjg5IDI0LjJ6TTM5My40IDIzMy40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwTDQ4MCAyNzQuN2w0MS40LTQxLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0w1MjUuMyAzMjBsNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDQ4MCAzNjUuM2wtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MzQuNyAzMjBsLTQxLjQtNDEuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6XCJdfSxZdj1mOCxyOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjbG9ja1wiLGljb246WzUxMiw1MTIsWzEyODMzOSxcImNsb2NrLWZvdXJcIl0sXCJmMDE3XCIsXCJNMjU2IDUxMkMxMTQuNiA1MTIgMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2cy0xMTQuNiAyNTYtMjU2IDI1NnpNMjMyIDEyMFYyNTZjMCA4IDQgMTUuNSAxMC43IDIwbDk2IDY0YzExIDcuNCAyNS45IDQuNCAzMy4zLTYuN3M0LjQtMjUuOS02LjctMzMuM0wyODAgMjQzLjJWMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0elwiXX0sX3Y9cjgsbDg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmFja3dhcmQtc3RlcFwiLGljb246WzMyMCw1MTIsW1wic3RlcC1iYWNrd2FyZFwiXSxcImYwNDhcIixcIk0yNjcuNSA0NDAuNmM5LjUgNy45IDIyLjggOS43IDM0LjEgNC40czE4LjQtMTYuNiAxOC40LTI5Vjk2YzAtMTIuNC03LjItMjMuNy0xOC40LTI5cy0yNC41LTMuNi0zNC4xIDQuNGwtMTkyIDE2MEw2NCAyNDFWOTZjMC0xNy43LTE0LjMtMzItMzItMzJTMCA3OC4zIDAgOTZWNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjcxbDExLjUgOS42IDE5MiAxNjB6XCJdfSwkdj1sOCxjTT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwYWxsZXRcIixpY29uOls2NDAsNTEyLFtdLFwiZjQ4MlwiLFwiTTMyIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NHY2NEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg5NiAzMjAgNTQ0aDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDU3NlYzODRoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINTQ0IDMyMCA5NiAzMnptOTYgNjRIMjg4djY0SDEyOFYzODR6bTIyNCAwSDUxMnY2NEgzNTJWMzg0elwiXX0sYU09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmF1Y2V0XCIsaWNvbjpbNTEyLDUxMixbXSxcImUwMDVcIixcIk0xOTIgOTZ2MTJMOTYgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYtMTIgMzEtMy45IDEtLjEgMSAuMSAzMSAzLjkgOTYgMTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDEyVjk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyek0zMiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMySDEzMi4xYzIwLjIgMjkgNTMuOSA0OCA5MS45IDQ4czcxLjctMTkgOTEuOS00OEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzMTQuMyAzMiAzMiAzMmg2NGMxNy43IDAgMzItMTQuMyAzMi0zMmMwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MEgzMjBsLTIyLjYtMjIuNmMtNi02LTE0LjEtOS40LTIyLjYtOS40SDI1NlYxODAuMmwtMzItNC0zMiA0VjIyNEgxNzMuM2MtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjRMMTI4IDI1NkgzMnpcIl19LHNNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJhc2ViYWxsLWJhdC1iYWxsXCIsaWNvbjpbNjQwLDUxMixbXSxcImY0MzJcIixcIk01NTAuMyAwYy0xMC45IDAtMjEuNCAzLjQtMzAuMiA5LjhMMjc5LjcgMTg0LjZjLTEzLjkgMTAuMS0yNi44IDIxLjQtMzguNyAzMy44TDEzOC43IDMyNS4zYy05LjIgOS42LTE5LjMgMTguNC0zMC4xIDI2LjNMNzkuMyAzNzIuOWMxLjMgMS41IDIuNiAzIDMuOSA0LjdsNDggNjRjMS42IDIuMiAzLjEgNC40IDQuNCA2LjZsMjcuMy0xOS45YzExLjYtOC40IDI0LTE1LjggMzctMjEuOGwxMzUuMy02My4xYzE2LjctNy44IDMyLjctMTcuMiA0Ny42LTI4LjFMNjE5IDE0My42YzEzLjItOS42IDIxLTI0LjkgMjEtNDEuMmMwLTExLTMuNi0yMS44LTEwLjItMzAuNkw2MDkuNiA0NC44IDU5MS40IDIwLjZDNTgxLjcgNy42IDU2Ni41IDAgNTUwLjMgMHpNNDk2IDUxMmM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHMzNS44IDgwIDgwIDgwek01Ny42IDM5Ni44Yy0xMC42LTE0LjEtMzAuNy0xNy00NC44LTYuNHMtMTcgMzAuNy02LjQgNDQuOGw0OCA2NGMxMC42IDE0LjEgMzAuNyAxNyA0NC44IDYuNHMxNy0zMC43IDYuNC00NC44bC00OC02NHpcIl19LGVNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNcIixpY29uOlszODQsNTEyLFsxMTVdLFwiNTNcIixcIk0xMzEuMSAxMDUuNGMtMjAuMSA4LjYtMzAuOCAyMS44LTMzLjkgMzkuNGMtMi40IDE0LjEtLjcgMjMuMiAyIDI5LjRjMi44IDYuMyA3LjkgMTIuNCAxNi43IDE4LjZjMTkuMiAxMy40IDQ4LjMgMjIuMSA4NC45IDMyLjVjMSAuMyAxLjkgLjYgMi45IC44YzMyLjcgOS4zIDcyIDIwLjYgMTAwLjkgNDAuN2MxNS43IDEwLjkgMjkuOSAyNS41IDM4LjYgNDUuMWM4LjggMTkuOCAxMC44IDQyIDYuNiA2Ni4zYy03LjMgNDIuNS0zNS4zIDcxLjctNzEuOCA4Ny4zYy0zNS40IDE1LjItNzkuMSAxNy45LTEyMy43IDEwLjlsLS4yIDAgMCAwYy0yNC0zLjktNjIuNy0xNy4xLTg3LjYtMjUuNmMtNC44LTEuNy05LjItMy4xLTEyLjgtNC4zYy0xNi44LTUuNi0yNS44LTIzLjctMjAuMy00MC41czIzLjctMjUuOCA0MC41LTIwLjNjNC45IDEuNiAxMC4yIDMuNCAxNS45IDUuNGMyNS40IDguNiA1Ni40IDE5LjIgNzQuNCAyMi4xYzM2LjggNS43IDY3LjUgMi41IDg4LjUtNi41YzIwLjEtOC42IDMwLjgtMjEuOCAzMy45LTM5LjRjMi40LTE0LjEgLjctMjMuMi0yLTI5LjRjLTIuOC02LjMtNy45LTEyLjQtMTYuNy0xOC42Yy0xOS4yLTEzLjQtNDguMy0yMi4xLTg0LjktMzIuNWMtMS0uMy0xLjktLjYtMi45LS44Yy0zMi43LTkuMy03Mi0yMC42LTEwMC45LTQwLjdjLTE1LjctMTAuOS0yOS45LTI1LjUtMzguNi00NS4xYy04LjgtMTkuOC0xMC44LTQyLTYuNi02Ni4zbDMxLjUgNS41LTMxLjUtNS41YzcuMy00Mi41IDM1LjMtNzEuNyA3MS44LTg3LjNjMzUuNC0xNS4yIDc5LjEtMTcuOSAxMjMuNy0xMC45YzEzIDIgNTIuNCA5LjYgNjYuNiAxMy40YzE3LjEgNC41IDI3LjIgMjIuMSAyMi43IDM5LjJzLTIyLjEgMjcuMi0zOS4xIDIyLjdjLTExLjItMy00OC4yLTEwLjItNjAuMS0xMmw0LjktMzEuNS00LjkgMzEuNWMtMzYuOS01LjgtNjcuNS0yLjUtODguNiA2LjV6XCJdfSxmTT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0aW1lbGluZVwiLGljb246WzY0MCw1MTIsW10sXCJlMjljXCIsXCJNMTI4IDEyMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0em0zMiA0OS4zYzI4LjMtMTIuMyA0OC00MC41IDQ4LTczLjNjMC00NC4yLTM1LjgtODAtODAtODBTNDggNTEuOCA0OCA5NmMwIDMyLjggMTkuNyA2MSA0OCA3My4zVjIyNEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgyODh2NTQuN2MtMjguMyAxMi4zLTQ4IDQwLjUtNDggNzMuM2MwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMzIuOC0xOS43LTYxLTQ4LTczLjNWMjg4SDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg1NDRWMTY5LjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuM2MwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDMyLjggMTkuNyA2MSA0OCA3My4zVjIyNEgxNjBWMTY5LjN6TTUzNiA5NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTMyMCA0NDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpcIl19LHJNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImtleWJvYXJkXCIsaWNvbjpbNTc2LDUxMixbOWUzXSxcImYxMWNcIixcIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOFYzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NEg2NHptMTYgNjRoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZ6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTYgODBoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwLTE3NmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNDR6bTE2IDgwaDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnpNMTYwIDMzNmMwLTguOCA3LjItMTYgMTYtMTZINDAwYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMzM2ek0yNzIgMTI4aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMTQ0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjU2IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6TTM2OCAxMjhoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNlYxNDRjMC04LjggNy4yLTE2IDE2LTE2ek0zNTIgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHpNNDY0IDEyOGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZ6TTQ0OCAyNDBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZINDY0Yy04LjggMC0xNi03LjItMTYtMTZWMjQwem0xNiA4MGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2VjMzNmMwLTguOCA3LjItMTYgMTYtMTZ6XCJdfSxsTT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYXJldC1kb3duXCIsaWNvbjpbMzIwLDUxMixbXSxcImYwZDdcIixcIk0xMzcuNCAzNzQuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45cy0xNi42LTE5LjgtMjkuNi0xOS44TDMyIDE5MmMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsMTI4IDEyOHpcIl19LGk4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXNlLWNoaW1uZXktbWVkaWNhbFwiLGljb246WzU3Niw1MTIsW1wiY2xpbmljLW1lZGljYWxcIl0sXCJmN2YyXCIsXCJNNTc1LjggMjU1LjVjMCAxOC0xNSAzMi4xLTMyIDMyLjFoLTMybC43IDE2MC4yYy4yIDM1LjUtMjguNSA2NC4zLTY0IDY0LjNIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w0MTYgMTAwLjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTg1bDUyLjggNDYuNGM4IDcgMTIgMTUgMTEgMjR6TTI3MiAxOTJjLTguOCAwLTE2IDcuMi0xNiAxNnY0OEgyMDhjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoNDh2NDhjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYzMjBoNDhjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIMzIwVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMjcyelwiXX0saU09aTgsdj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0ZW1wZXJhdHVyZS10aHJlZS1xdWFydGVyc1wiLGljb246WzMyMCw1MTIsW1widGVtcGVyYXR1cmUtM1wiLFwidGhlcm1vbWV0ZXItM1wiLFwidGhlcm1vbWV0ZXItdGhyZWUtcXVhcnRlcnNcIl0sXCJmMmM4XCIsXCJNMTYwIDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OFYyNzYuNWMwIDE3LjMtNy4xIDMxLjktMTUuMyA0Mi41Qzg2LjIgMzMyLjYgODAgMzQ5LjUgODAgMzY4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0xOC41LTYuMi0zNS40LTE2LjctNDguOWMtOC4yLTEwLjYtMTUuMy0yNS4yLTE1LjMtNDIuNVYxMTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4IDExMkM0OCA1MC4yIDk4LjEgMCAxNjAgMHMxMTIgNTAuMSAxMTIgMTEyVjI3Ni41YzAgLjEgLjEgLjMgLjIgLjZjLjIgLjYgLjggMS42IDEuNyAyLjhjMTguOSAyNC40IDMwLjEgNTUgMzAuMSA4OC4xYzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTMzLjIgMTEuMi02My44IDMwLjEtODguMWMuOS0xLjIgMS41LTIuMiAxLjctMi44Yy4xLS4zIC4yLS41IC4yLS42VjExMnpNMjA4IDM2OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNWMTUyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZWMzIyLjdjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zelwiXX0sb009dixuTT12LEhNPXYsbzg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibW9iaWxlLXNjcmVlblwiLGljb246WzM4NCw1MTIsW1wibW9iaWxlLWFuZHJvaWQtYWx0XCJdLFwiZjNjZlwiLFwiTTE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBIMzA0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6TTE0NCA0NDhjMCA4LjggNy4yIDE2IDE2IDE2aDY0YzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2ek0zMDQgNjRIODBWMzg0SDMwNFY2NHpcIl19LHpNPW84LFZNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBsYW5lLXVwXCIsaWNvbjpbNTEyLDUxMixbXSxcImUyMmRcIixcIk0xOTIgOTMuN0MxOTIgNTkuNSAyMjEgMCAyNTYgMGMzNiAwIDY0IDU5LjUgNjQgOTMuN2wwIDY2LjNMNDk3LjggMjc4LjVjOC45IDUuOSAxNC4yIDE1LjkgMTQuMiAyNi42djU2LjdjMCAxMC45LTEwLjcgMTguNi0yMS4xIDE1LjJMMzIwIDMyMHY4MGw1Ny42IDQzLjJjNCAzIDYuNCA3LjggNi40IDEyLjh2NDJjMCA3LjgtNi4zIDE0LTE0IDE0Yy0xLjMgMC0yLjYtLjItMy45LS41TDI1NiA0ODAgMTQ1LjkgNTExLjVjLTEuMyAuNC0yLjYgLjUtMy45IC41Yy03LjggMC0xNC02LjMtMTQtMTRWNDU2YzAtNSAyLjQtOS44IDYuNC0xMi44TDE5MiA0MDBWMzIwTDIxLjEgMzc3QzEwLjcgMzgwLjQgMCAzNzIuNyAwIDM2MS44VjMwNS4xYzAtMTAuNyA1LjMtMjAuNyAxNC4yLTI2LjZMMTkyIDE2MFY5My43elwiXX0sbU09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGlnZ3ktYmFua1wiLGljb246WzU3Niw1MTIsW10sXCJmNGQzXCIsXCJNNDAwIDk2bDAgLjdjLTUuMy0uNC0xMC42LS43LTE2LS43SDI1NmMtMTYuNSAwLTMyLjUgMi4xLTQ3LjggNmMtLjEtMi0uMi00LS4yLTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NnptLTE2IDMyYzMuNSAwIDcgLjEgMTAuNCAuM2M0LjIgLjMgOC40IC43IDEyLjYgMS4zQzQyNC42IDEwOS4xIDQ1MC44IDk2IDQ4MCA5NmgzMmwtMTguOCA3NS4xYzE1LjggMTQuOCAyOC43IDMyLjggMzcuNSA1Mi45SDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkg1MTJjLTkuMSAxMi4xLTE5LjkgMjIuOS0zMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0MTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQ0OEgyNTZ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJIMTkyYy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MTZjLTM0LjktMjYuMi01OC43LTY2LjMtNjMuMi0xMTJINjhjLTM3LjYgMC02OC0zMC40LTY4LTY4czMwLjQtNjggNjgtNjhoNGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg2OGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBIOTkuMmMxMi4xLTU5LjggNTcuNy0xMDcuNSAxMTYuMy0xMjIuOGMxMi45LTMuNCAyNi41LTUuMiA0MC41LTUuMkgzODR6bTY0IDEzNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6XCJdfSxuOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiYXR0ZXJ5LWhhbGZcIixpY29uOls1NzYsNTEyLFtcImJhdHRlcnktM1wiXSxcImYyNDJcIixcIk0wIDE3NmMwLTQ0LjIgMzUuOC04MCA4MC04MEg0NjRjNDQuMiAwIDgwIDM1LjggODAgODB2MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJ2MTZjMCA0NC4yLTM1LjggODAtODAgODBIODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjE3NnptODAtMTZjLTguOCAwLTE2IDcuMi0xNiAxNlYzMzZjMCA4LjggNy4yIDE2IDE2IDE2SDQ2NGM4LjggMCAxNi03LjIgMTYtMTZWMTc2YzAtOC44LTcuMi0xNi0xNi0xNkg4MHptMjA4IDMyVjMyMEg5NlYxOTJIMjg4elwiXX0sdk09bjgsTU09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibW91bnRhaW4tY2l0eVwiLGljb246WzY0MCw1MTIsW10sXCJlNTJlXCIsXCJNMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djkyLjFsNzEuNCAxMTguNGMyLjUtMS42IDUuNC0yLjUgOC42LTIuNWgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2aC0zLjVsNzMuOCAxMjIuNGMxMi40IDIwLjYgMTIuOSA0Ni4zIDEuMiA2Ny4zYy0uNCAuOC0uOSAxLjYtMS40IDIuM0g1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjQwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDU2OFYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NzJINDgwVjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDMzNnptMzIgNjRoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNlY4MGMwLTguOCA3LjItMTYgMTYtMTZ6TTM1MiAxNzZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZWMTc2em0xNjAgOTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZINTI4Yy04LjggMC0xNi03LjItMTYtMTZWMjcyem0xNiA4MGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDUyOGMtOC44IDAtMTYtNy4yLTE2LTE2VjM2OGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCAxODguOUwyODMuOCAyODhIMjIzbC00OCA2NC0yNC42LTQxLjJMMjI0IDE4OC45em0yOS40LTQ0LjJDMjQ3LjEgMTM0LjMgMjM2IDEyOCAyMjQgMTI4cy0yMy4xIDYuMy0yOS40IDE2LjdMNS4xIDQ1OC45Yy02LjUgMTAuOC02LjcgMjQuMy0uNyAzNS4zUzIyIDUxMiAzNC41IDUxMkg0MTMuNWMxMi41IDAgMjQtNi44IDMwLjEtMTcuOHM1LjgtMjQuNS0uNy0zNS4zTDI1My40IDE0NC43elwiXX0sdE09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29pbnNcIixpY29uOls1MTIsNTEyLFtdLFwiZjUxZVwiLFwiTTUxMiA4MGMwIDE4LTE0LjMgMzQuNi0zOC40IDQ4Yy0yOS4xIDE2LjEtNzIuNSAyNy41LTEyMi4zIDMwLjljLTMuNy0xLjgtNy40LTMuNS0xMS4zLTVDMzAwLjYgMTM3LjQgMjQ4LjIgMTI4IDE5MiAxMjhjLTguMyAwLTE2LjQgLjItMjQuNSAuNmwtMS4xLS42QzE0Mi4zIDExNC42IDEyOCA5OCAxMjggODBjMC00NC4yIDg2LTgwIDE5Mi04MFM1MTIgMzUuOCA1MTIgODB6TTE2MC43IDE2MS4xYzEwLjItLjcgMjAuNy0xLjEgMzEuMy0xLjFjNjIuMiAwIDExNy40IDEyLjMgMTUyLjUgMzEuNEMzNjkuMyAyMDQuOSAzODQgMjIxLjcgMzg0IDI0MGMwIDQtLjcgNy45LTIuMSAxMS43Yy00LjYgMTMuMi0xNyAyNS4zLTM1IDM1LjVjMCAwIDAgMCAwIDBjLS4xIC4xLS4zIC4xLS40IC4ybDAgMCAwIDBjLS4zIC4yLS42IC4zLS45IC41Yy0zNSAxOS40LTkwLjggMzItMTUzLjYgMzJjLTU5LjYgMC0xMTIuOS0xMS4zLTE0OC4yLTI5LjFjLTEuOS0uOS0zLjctMS45LTUuNS0yLjlDMTQuMyAyNzQuNiAwIDI1OCAwIDI0MGMwLTM0LjggNTMuNC02NC41IDEyOC03NS40YzEwLjUtMS41IDIxLjQtMi43IDMyLjctMy41ek00MTYgMjQwYzAtMjEuOS0xMC42LTM5LjktMjQuMS01My40YzI4LjMtNC40IDU0LjItMTEuNCA3Ni4yLTIwLjVjMTYuMy02LjggMzEuNS0xNS4yIDQzLjktMjUuNVYxNzZjMCAxOS4zLTE2LjUgMzcuMS00My44IDUwLjljLTE0LjYgNy40LTMyLjQgMTMuNy01Mi40IDE4LjVjLjEtMS44IC4yLTMuNSAuMi01LjN6bS0zMiA5NmMwIDE4LTE0LjMgMzQuNi0zOC40IDQ4Yy0xLjggMS0zLjYgMS45LTUuNSAyLjlDMzA0LjkgNDA0LjcgMjUxLjYgNDE2IDE5MiA0MTZjLTYyLjggMC0xMTguNi0xMi42LTE1My42LTMyQzE0LjMgMzcwLjYgMCAzNTQgMCAzMzZWMzAwLjZjMTIuNSAxMC4zIDI3LjYgMTguNyA0My45IDI1LjVDODMuNCAzNDIuNiAxMzUuOCAzNTIgMTkyIDM1MnMxMDguNi05LjQgMTQ4LjEtMjUuOWM3LjgtMy4yIDE1LjMtNi45IDIyLjQtMTAuOWM2LjEtMy40IDExLjgtNy4yIDE3LjItMTEuMmMxLjUtMS4xIDIuOS0yLjMgNC4zLTMuNFYzMDR2NS43VjMzNnptMzIgMFYzMDQgMjc4LjFjMTktNC4yIDM2LjUtOS41IDUyLjEtMTZjMTYuMy02LjggMzEuNS0xNS4yIDQzLjktMjUuNVYyNzJjMCAxMC41LTUgMjEtMTQuOSAzMC45Yy0xNi4zIDE2LjMtNDUgMjkuNy04MS4zIDM4LjRjLjEtMS43IC4yLTMuNSAuMi01LjN6TTE5MiA0NDhjNTYuMiAwIDEwOC42LTkuNCAxNDguMS0yNS45YzE2LjMtNi44IDMxLjUtMTUuMiA0My45LTI1LjVWNDMyYzAgNDQuMi04NiA4MC0xOTIgODBTMCA0NzYuMiAwIDQzMlYzOTYuNmMxMi41IDEwLjMgMjcuNiAxOC43IDQzLjkgMjUuNUM4My40IDQzOC42IDEzNS44IDQ0OCAxOTIgNDQ4elwiXX0saE09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwia2hhbmRhXCIsaWNvbjpbNTc2LDUxMixbOTc3Ml0sXCJmNjZkXCIsXCJNMjc3LjggMy43YzUuOS00LjkgMTQuNi00LjkgMjAuNSAwbDQ4IDQwYzUuOSA0LjkgNy41IDEzLjIgMy44IDE5LjlsMCAwIDAgMCAwIDAgMCAwLS4xIC4xLS4zIC42Yy0uMyAuNS0uNyAxLjMtMS4yIDIuM2MtMSAyLTIuNiA1LTQuNCA4LjZjLS41IC45LS45IDEuOS0xLjQgMi45QzM3Ni45IDk3LjQgNDAwIDEzNCA0MDAgMTc2cy0yMy4xIDc4LjYtNTcuMyA5Ny44Yy41IDEgMSAyIDEuNCAyLjljMS44IDMuNyAzLjMgNi42IDQuNCA4LjZjLjUgMSAuOSAxLjggMS4yIDIuM2wuMyAuNiAuMSAuMSAwIDAgMCAwYzMuNiA2LjcgMiAxNS0zLjggMTkuOUwzMDQgMzQzLjV2MTkuOGwzNS42LTI0LjUgNDEuMS0yOC4yYzQyLjgtMjkuNCA2OC40LTc4IDY4LjQtMTMwYzAtMzEuMS05LjItNjEuNi0yNi41LTg3LjVsLTIuOC00LjJjLTQtNi0zLjUtMTQgMS4zLTE5LjVzMTIuNy03IDE5LjItMy43TDQzMy4xIDgwYzcuMi0xNC4zIDcuMi0xNC4zIDcuMi0xNC4zbDAgMCAwIDAgLjEgMCAuMyAuMiAxIC41Yy44IC40IDIgMS4xIDMuNSAxLjljMi45IDEuNyA3IDQuMSAxMS44IDcuM2M5LjYgNi40IDIyLjUgMTYuMSAzNS40IDI5YzI1LjcgMjUuNyA1Mi43IDY1LjYgNTIuNyAxMTkuM2MwIDUzLjEtMjYuNCAxMDAuNS01MS4yIDEzMy42Yy0xMi42IDE2LjctMjUuMSAzMC4zLTM0LjUgMzkuN2MtNC43IDQuNy04LjcgOC40LTExLjUgMTAuOWMtMS40IDEuMy0yLjUgMi4yLTMuMyAyLjlsLS45IC44LS4zIC4yLS4xIC4xIDAgMCAwIDBzMCAwLTEwLjItMTIuM2wxMC4yIDEyLjNjLTUuMSA0LjMtMTIuNCA0LjktMTguMiAxLjZsLTc1LjYtNDMtMzIuNyAyMi41IDQ1LjUgMzEuM2MxLjgtLjQgMy43LS43IDUuNy0uN2MxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMTIuMiAwLTIyLjMtOS4xLTIzLjgtMjFMMzA0IDQyMy40djI4LjljOS42IDUuNSAxNiAxNS45IDE2IDI3LjdjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC0xMS44IDYuNC0yMi4yIDE2LTI3LjdWNDI0LjFsLTQwLjMgMjcuN0MyMjkuOCA0NjMuMyAyMTkuOSA0NzIgMjA4IDQ3MmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyLjIgMCA0LjQgLjMgNi41IC45bDQ1LjgtMzEuNS0zMi43LTIyLjUtNzUuNiA0M2MtNS44IDMuMy0xMyAyLjctMTguMi0xLjZMMTQ0IDQwMGMtMTAuMiAxMi4zLTEwLjIgMTIuMy0xMC4zIDEyLjNsMCAwIDAgMC0uMS0uMS0uMy0uMi0uOS0uOGMtLjgtLjctMS45LTEuNy0zLjMtMi45Yy0yLjgtMi41LTYuNy02LjItMTEuNS0xMC45Yy05LjQtOS40LTIxLjktMjMtMzQuNS0zOS43QzU4LjQgMzI0LjUgMzIgMjc3LjEgMzIgMjI0YzAtNTMuNyAyNi45LTkzLjYgNTIuNy0xMTkuM2MxMi45LTEyLjkgMjUuOC0yMi42IDM1LjQtMjljNC44LTMuMiA4LjktNS43IDExLjgtNy4zYzEuNS0uOCAyLjYtMS41IDMuNS0xLjlsMS0uNSAuMy0uMiAuMSAwIDAgMCAwIDBzMCAwIDcuMiAxNC4zbC03LjItMTQuM2M2LjUtMy4yIDE0LjMtMS43IDE5LjIgMy43czUuMyAxMy40IDEuMyAxOS41bC0yLjggNC4yQzEzNy4yIDExOSAxMjggMTQ5LjUgMTI4IDE4MC42YzAgNTEuOSAyNS42IDEwMC42IDY4LjQgMTMwbDQxLjEgMjguMkwyNzIgMzYyLjZWMzQzLjVsLTQyLjItMzUuMmMtNS45LTQuOS03LjUtMTMuMi0zLjgtMTkuOWwwIDAgMCAwIDAgMCAuMS0uMSAuMy0uNmMuMy0uNSAuNy0xLjMgMS4yLTIuM2MxLTIgMi42LTUgNC40LTguNmMuNS0uOSAuOS0xLjkgMS40LTIuOUMxOTkuMSAyNTQuNiAxNzYgMjE4IDE3NiAxNzZzMjMuMS03OC42IDU3LjMtOTcuOGMtLjUtMS0xLTItMS40LTIuOWMtMS44LTMuNy0zLjMtNi42LTQuNC04LjZjLS41LTEtLjktMS44LTEuMi0yLjNsLS4zLS42LS4xLS4xIDAgMCAwIDAgMCAwYy0zLjYtNi43LTItMTUgMy44LTE5LjlsNDgtNDB6TTI1Mi4yIDEyMi45Yy0xNyAxMS41LTI4LjIgMzEtMjguMiA1My4xczExLjIgNDEuNiAyOC4yIDUzLjFDMjU5IDIxMC4yIDI2NCAxOTAuOSAyNjQgMTc2cy01LTM0LjItMTEuOC01My4xem03MS41IDEwNi4yYzE3LTExLjUgMjguMi0zMSAyOC4yLTUzLjFzLTExLjItNDEuNi0yOC4yLTUzLjFDMzE3IDE0MS44IDMxMiAxNjEuMSAzMTIgMTc2czUgMzQuMiAxMS44IDUzLjF6XCJdfSxIOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzbGlkZXJzXCIsaWNvbjpbNTEyLDUxMixbXCJzbGlkZXJzLWhcIl0sXCJmMWRlXCIsXCJNMCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNTQuNyAwYzEyLjMtMjguMyA0MC41LTQ4IDczLjMtNDhzNjEgMTkuNyA3My4zIDQ4TDQ4MCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI0Ni43IDBjLTEyLjMgMjguMy00MC41IDQ4LTczLjMgNDhzLTYxLTE5LjctNzMuMy00OEwzMiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0xOTIgMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTM4NCAyNTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem0tMzItODBjMzIuOCAwIDYxIDE5LjcgNzMuMyA0OGw1NC43IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTU0LjcgMGMtMTIuMyAyOC4zLTQwLjUgNDgtNzMuMyA0OHMtNjEtMTkuNy03My4zLTQ4TDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyNDYuNyAwYzEyLjMtMjguMyA0MC41LTQ4IDczLjMtNDh6TTE5MiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyem03My4zIDBMNDgwIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMTQuNyAwYy0xMi4zIDI4LjMtNDAuNSA0OC03My4zIDQ4cy02MS0xOS43LTczLjMtNDhMMzIgMTI4QzE0LjMgMTI4IDAgMTEzLjcgMCA5NlMxNC4zIDY0IDMyIDY0bDg2LjcgMEMxMzEgMzUuNyAxNTkuMiAxNiAxOTIgMTZzNjEgMTkuNyA3My4zIDQ4elwiXX0sQ009SDgsTE09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZm9sZGVyLXRyZWVcIixpY29uOls1NzYsNTEyLFtdLFwiZjgwMlwiLFwiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJ2OTZWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDI1NlYzODRINjRWMTYwSDI1NlY5Nkg2NFYzMnpNMjg4IDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMkg1NDRjMTcuNyAwIDMyLTE0LjMgMzItMzJWNjRjMC0xNy43LTE0LjMtMzItMzItMzJINDQ1LjNjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40TDQwOS40IDkuNGMtNi02LTE0LjEtOS40LTIyLjYtOS40SDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWMTkyem0wIDI4OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg1NDRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDQ0NS4zYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTMuMy0xMy4zYy02LTYtMTQuMS05LjQtMjIuNi05LjRIMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMlY0ODB6XCJdfSxwTT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJuZXR3b3JrLXdpcmVkXCIsaWNvbjpbNjQwLDUxMixbXSxcImY2ZmZcIixcIk0yNTYgNjRIMzg0djY0SDI1NlY2NHpNMjQwIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDQ4djMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDk2djMySDgwYy0yNi41IDAtNDggMjEuNS00OCA0OHY5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyNDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzY4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDE5MlYyODhINDQ4djMySDQwMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2OTZjMCAyNi41IDIxLjUgNDggNDggNDhINTYwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjM2OGMwLTI2LjUtMjEuNS00OC00OC00OEg1MTJWMjg4aDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDM1MlYxOTJoNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjQwek05NiA0NDhWMzg0SDIyNHY2NEg5NnptMzIwLTY0SDU0NHY2NEg0MTZWMzg0elwiXX0sZE09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFwLXBpblwiLGljb246WzMyMCw1MTIsWzEyODIwNV0sXCJmMjc2XCIsXCJNMzIwIDE0NGMwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFMzMiAyMjMuNSAzMiAxNDRTOTYuNSAwIDE3NiAwczE0NCA2NC41IDE0NCAxNDR6TTE3NiA4MGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmMtNTMgMC05NiA0My05NiA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2YzAtMzUuMyAyOC43LTY0IDY0LTY0ek0xNDQgNDgwVjMxNy4xYzEwLjQgMS45IDIxLjEgMi45IDMyIDIuOXMyMS42LTEgMzItMi45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnpcIl19LHVNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhbXNhXCIsaWNvbjpbNTEyLDUxMixbXSxcImY2NjVcIixcIk0zNC42IDI4OEg4MGM4LjggMCAxNi03LjIgMTYtMTZWNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYyMDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBWNDBjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYyMDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBWNzJjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MFYyNzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ1LjRjMTkuMSAwIDM0LjYgMTUuNSAzNC42IDM0LjZjMCA4LjYtMy4yIDE2LjktOSAyMy4zTDQxNi42IDQ0MWMtNDEuMSA0NS4yLTk5LjQgNzEtMTYwLjYgNzFzLTExOS40LTI1LjgtMTYwLjYtNzFMOSAzNDUuOWMtNS44LTYuNC05LTE0LjctOS0yMy4zQzAgMzAzLjUgMTUuNSAyODggMzQuNiAyODh6TTI1NiAyODhjLTM4LjQgMC03Ni44IDM1LjgtOTAuNiA1MC4yYy0zLjYgMy43LTUuNCA4LjctNS40IDEzLjhzMS44IDEwLjEgNS40IDEzLjhDMTc5LjIgMzgwLjIgMjE3LjYgNDE2IDI1NiA0MTZzNzYuOC0zNS44IDkwLjYtNTAuMmMzLjYtMy43IDUuNC04LjcgNS40LTEzLjhzLTEuOC0xMC4xLTUuNC0xMy44QzMzMi44IDMyMy44IDI5NC40IDI4OCAyNTYgMjg4em0wIDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdfSx4TT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjZW50LXNpZ25cIixpY29uOlszODQsNTEyLFtdLFwiZTNmNVwiLFwiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY2LjdjMzAuOSA1LjIgNTkuMiAxNy43IDgzLjIgMzUuOGMxNC4xIDEwLjYgMTcgMzAuNyA2LjQgNDQuOHMtMzAuNyAxNy00NC44IDYuNEMyNzkuNCAxMzcuNSAyNTIuOSAxMjggMjI0IDEyOGMtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjhzNTcuMyAxMjggMTI4IDEyOGMyOC45IDAgNTUuNC05LjUgNzYuOC0yNS42YzE0LjEtMTAuNiAzNC4yLTcuOCA0NC44IDYuNHM3LjggMzQuMi02LjQgNDQuOGMtMjQgMTgtNTIuNCAzMC42LTgzLjIgMzUuOFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ1LjNDMTAxLjIgNDMwLjEgMzIgMzUxLjEgMzIgMjU2czY5LjItMTc0LjEgMTYwLTE4OS4zVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXX0sZ009e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmxhc2tcIixpY29uOls0NDgsNTEyLFtdLFwiZjBjM1wiLFwiTTI4OCAwSDE2MCAxMjhDMTEwLjMgMCA5NiAxNC4zIDk2IDMyczE0LjMgMzIgMzIgMzJWMTk2LjhjMCAxMS44LTMuMyAyMy41LTkuNSAzMy41TDEwLjMgNDA2LjJDMy42IDQxNy4yIDAgNDI5LjcgMCA0NDIuNkMwIDQ4MC45IDMxLjEgNTEyIDY5LjQgNTEySDM3OC42YzM4LjMgMCA2OS40LTMxLjEgNjkuNC02OS40YzAtMTIuOC0zLjYtMjUuNC0xMC4zLTM2LjRMMzI5LjUgMjMwLjRjLTYuMi0xMC4xLTkuNS0yMS43LTkuNS0zMy41VjY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI4OHpNMTkyIDE5Ni44VjY0aDY0VjE5Ni44YzAgMjMuNyA2LjYgNDYuOSAxOSA2Ny4xTDMwOS41IDMyMGgtMTcxTDE3MyAyNjMuOWMxMi40LTIwLjIgMTktNDMuNCAxOS02Ny4xelwiXX0sU009e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLXByZWduYW50XCIsaWNvbjpbMzg0LDUxMixbXSxcImUzMWVcIixcIk0xOTIgOTZjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OHpNMTIwIDM4M2MtMTMuOC0zLjYtMjQtMTYuMS0yNC0zMVYyOTYuOWwtNC42IDcuNmMtOS4xIDE1LjEtMjguOCAyMC00My45IDEwLjlzLTIwLTI4LjgtMTAuOS00My45bDU4LjMtOTdjMTUtMjQuOSA0MC4zLTQxLjUgNjguNy00NS42YzQuMS0uNiA4LjItMSAxMi41LTFoMS4xIDEyLjVIMTkyYzEuNCAwIDIuOCAuMSA0LjEgLjNjMzUuNyAyLjkgNjUuNCAyOS4zIDcyLjEgNjVsNi4xIDMyLjVjNDQuMyA4LjYgNzcuNyA0Ny41IDc3LjcgOTQuM3YzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMDQgMjY0djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4NGgtOC04djk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjM4M3pcIl19LE5NPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndhbmQtc3BhcmtsZXNcIixpY29uOls1MTIsNTEyLFtdLFwiZjcyYlwiLFwiTTQ2NCA2LjFjOS41LTguNSAyNC04LjEgMzMgLjlsOCA4YzkgOSA5LjQgMjMuNSAuOSAzM2wtODUuOCA5NS45Yy0yLjYgMi45LTQuMSA2LjctNC4xIDEwLjdWMTc2YzAgOC44LTcuMiAxNi0xNiAxNkgzODQuMmMtNC42IDAtOC45IDEuOS0xMS45IDUuM0wxMDAuNyA1MDAuOUM5NC4zIDUwOCA4NS4zIDUxMiA3NS44IDUxMmMtOC44IDAtMTcuMy0zLjUtMjMuNS05LjhMOS43IDQ1OS43QzMuNSA0NTMuNCAwIDQ0NSAwIDQzNi4yYzAtOS41IDQtMTguNSAxMS4xLTI0LjhsMTExLjYtOTkuOGMzLjQtMyA1LjMtNy40IDUuMy0xMS45VjI3MmMwLTguOCA3LjItMTYgMTYtMTZoMzQuNmMzLjkgMCA3LjctMS41IDEwLjctNC4xTDQ2NCA2LjF6TTQzMiAyODhjMy42IDAgNi43IDIuNCA3LjcgNS44bDE0LjggNTEuNyA1MS43IDE0LjhjMy40IDEgNS44IDQuMSA1LjggNy43cy0yLjQgNi43LTUuOCA3LjdsLTUxLjcgMTQuOC0xNC44IDUxLjdjLTEgMy40LTQuMSA1LjgtNy43IDUuOHMtNi43LTIuNC03LjctNS44bC0xNC44LTUxLjctNTEuNy0xNC44Yy0zLjQtMS01LjgtNC4xLTUuOC03LjdzMi40LTYuNyA1LjgtNy43bDUxLjctMTQuOCAxNC44LTUxLjdjMS0zLjQgNC4xLTUuOCA3LjctNS44ek04Ny43IDY5LjhsMTQuOCA1MS43IDUxLjcgMTQuOGMzLjQgMSA1LjggNC4xIDUuOCA3LjdzLTIuNCA2LjctNS44IDcuN2wtNTEuNyAxNC44TDg3LjcgMjE4LjJjLTEgMy40LTQuMSA1LjgtNy43IDUuOHMtNi43LTIuNC03LjctNS44TDU3LjUgMTY2LjUgNS44IDE1MS43Yy0zLjQtMS01LjgtNC4xLTUuOC03LjdzMi40LTYuNyA1LjgtNy43bDUxLjctMTQuOEw3Mi4zIDY5LjhjMS0zLjQgNC4xLTUuOCA3LjctNS44czYuNyAyLjQgNy43IDUuOHpNMjI0IDBjMy43IDAgNi45IDIuNSA3LjggNi4xbDYuOCAyNy4zIDI3LjMgNi44YzMuNiAuOSA2LjEgNC4xIDYuMSA3LjhzLTIuNSA2LjktNi4xIDcuOGwtMjcuMyA2LjgtNi44IDI3LjNjLS45IDMuNi00LjEgNi4xLTcuOCA2LjFzLTYuOS0yLjUtNy44LTYuMWwtNi44LTI3LjMtMjcuMy02LjhjLTMuNi0uOS02LjEtNC4xLTYuMS03LjhzMi41LTYuOSA2LjEtNy44bDI3LjMtNi44IDYuOC0yNy4zYy45LTMuNiA0LjEtNi4xIDcuOC02LjF6XCJdfSx6OD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJlbGxpcHNpcy12ZXJ0aWNhbFwiLGljb246WzEyOCw1MTIsW1wiZWxsaXBzaXMtdlwiXSxcImYxNDJcIixcIk02NCAzNjBjMzAuOSAwIDU2IDI1LjEgNTYgNTZzLTI1LjEgNTYtNTYgNTZzLTU2LTI1LjEtNTYtNTZzMjUuMS01NiA1Ni01NnptMC0xNjBjMzAuOSAwIDU2IDI1LjEgNTYgNTZzLTI1LjEgNTYtNTYgNTZzLTU2LTI1LjEtNTYtNTZzMjUuMS01NiA1Ni01NnpNMTIwIDk2YzAgMzAuOS0yNS4xIDU2LTU2IDU2UzggMTI2LjkgOCA5NlMzMy4xIDQwIDY0IDQwczU2IDI1LjEgNTYgNTZ6XCJdfSx3TT16OCxrTT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0aWNrZXRcIixpY29uOls1NzYsNTEyLFsxMjc5MDNdLFwiZjE0NVwiLFwiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4djgwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4djgwYzAgMzUuMyAyOC43IDY0IDY0IDY0SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYzMDRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhWMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em02NCA5NmwwIDE5Mkg0NDhWMTYwSDEyOHptLTMyIDBjMC0xNy43IDE0LjMtMzIgMzItMzJINDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjE2MHpcIl19LGJNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBvd2VyLW9mZlwiLGljb246WzUxMiw1MTIsWzkyMTFdLFwiZjAxMVwiLFwiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMnpNMTQzLjUgMTIwLjZjMTMuNi0xMS4zIDE1LjQtMzEuNSA0LjEtNDUuMXMtMzEuNS0xNS40LTQ1LjEtNC4xQzQ5LjcgMTE1LjQgMTYgMTgxLjggMTYgMjU2YzAgMTMyLjUgMTA3LjUgMjQwIDI0MCAyNDBzMjQwLTEwNy41IDI0MC0yNDBjMC03NC4yLTMzLjgtMTQwLjYtODYuNi0xODQuNmMtMTMuNi0xMS4zLTMzLjgtOS40LTQ1LjEgNC4xcy05LjQgMzMuOCA0LjEgNDUuMWMzOC45IDMyLjMgNjMuNSA4MSA2My41IDEzNS40YzAgOTcuMi03OC44IDE3Ni0xNzYgMTc2cy0xNzYtNzguOC0xNzYtMTc2YzAtNTQuNCAyNC43LTEwMy4xIDYzLjUtMTM1LjR6XCJdfSxWOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyaWdodC1sb25nXCIsaWNvbjpbNTEyLDUxMixbXCJsb25nLWFycm93LWFsdC1yaWdodFwiXSxcImYzMGJcIixcIk0zMzQuNSA0MTRjOC44IDMuOCAxOSAyIDI2LTQuNmwxNDQtMTM2YzQuOC00LjUgNy41LTEwLjggNy41LTE3LjRzLTIuNy0xMi45LTcuNS0xNy40bC0xNDQtMTM2Yy03LTYuNi0xNy4yLTguNC0yNi00LjZzLTE0LjUgMTIuNS0xNC41IDIybDAgODhMMzIgMjA4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDI4OCAwIDAgODhjMCA5LjYgNS43IDE4LjIgMTQuNSAyMnpcIl19LEFNPVY4LEJNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZsYWctdXNhXCIsaWNvbjpbNTEyLDUxMixbXSxcImY3NGRcIixcIk02MyAyMy45QzU5LjQgMTAuMSA0Ni45IDAgMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzgwLjFjMi0uOCA0LjgtMS44IDguMi0zYzgtMi44IDE5LjQtNi42IDMyLjYtMTAuNEMxMzEuOSAzNTkgMTY0LjUgMzUyIDE5MiAzNTJjMjYuMyAwIDQ2IDYuNCA3MCAxNC40bDEgLjNjMjMuOCA3LjkgNTEuOSAxNy4zIDg5IDE3LjNjMzYuOCAwIDcyLjUtOS4xIDk4LjEtMTcuNmMxMy00LjMgMjMuOC04LjcgMzEuNS0xMS45YzMuOC0xLjYgNi45LTMgOS00YzEuMS0uNSAxLjktLjkgMi41LTEuMmwuNy0uNCAuMi0uMSAuMSAwIDAgMCAwIDBzMCAwLTE0LjMtMjguNmwxNC4zIDI4LjZjMTAuOC01LjQgMTcuNy0xNi41IDE3LjctMjguNlYyODkuMWMtMi4yIC44LTUgMS44LTguMiAzYy04LjggMy4xLTIxLjEgNy4yLTM1LjUgMTEuM0M0MzkuOCAzMTEuNSA0MDIuMSAzMjAgMzY4IDMyMGMtMzQuMSAwLTYzLjktOC41LTkxLjQtMTYuNGwtLjgtLjJDMjQ3LjUgMjk1LjMgMjIxLjQgMjg4IDE5MiAyODhjLTI5LjcgMC02MS45IDcuNS04Ny4zIDE1LjNDOTIuMSAzMDcuMiA4MS41IDMxMSA3NCAzMTMuOWMtMy43IDEuNC02LjcgMi42LTguNiAzLjVMNjQgMzE4VjI4My41YzcuOS0zIDE4LjctNi45IDMxLjMtMTAuOGMyNi42LTguMiA2Mi40LTE2LjcgOTYuNy0xNi43YzM0LjMgMCA2NC4yIDguNSA5MS44IDE2LjRsLjcgLjJjMjguMyA4LjEgNTQuMiAxNS40IDgzLjUgMTUuNGMyOS42IDAgNjMuOS03LjUgOTEuNS0xNS40YzEzLjYtMy45IDI1LjQtNy44IDMzLjYtMTAuN2M0LjEtMS41IDcuNC0yLjcgOS42LTMuNWMxLjEtLjQgMi0uNyAyLjUtMWwuNi0uMiAuMS0uMSAwIDAgMCAwIDAgMCAwIDAgNS45LTIuNFYxOTMuMWMtMi4yIC44LTUgMS44LTguMiAzYy04LjggMy4xLTIxLjEgNy4yLTM1LjUgMTEuM0M0MzkuOCAyMTUuNSA0MDIuMSAyMjQgMzY4IDIyNGMtMzQuMSAwLTYzLjktOC41LTkxLjQtMTYuNGwtLjgtLjJDMjQ3LjUgMTk5LjMgMjIxLjQgMTkyIDE5MiAxOTJjLTI5LjcgMC02MS45IDcuNS04Ny4zIDE1LjNDOTIuMSAyMTEuMiA4MS41IDIxNSA3NCAyMTcuOWMtMy43IDEuNC02LjcgMi42LTguNiAzLjVMNjQgMjIyVjE4Ny41YzcuOS0zIDE4LjctNi45IDMxLjMtMTAuOGMyNi42LTguMiA2Mi40LTE2LjcgOTYuNy0xNi43YzM0LjMgMCA2NC4yIDguNSA5MS44IDE2LjRsMCAwIC43IC4yYzI4LjMgOC4xIDU0LjIgMTUuNCA4My41IDE1LjRjMjkuNiAwIDYzLjktNy41IDkxLjUtMTUuNGMxMy42LTMuOSAyNS40LTcuOCAzMy42LTEwLjdjNC4xLTEuNSA3LjQtMi43IDkuNi0zLjVjMS4xLS40IDItLjcgMi41LTFsLjYtLjIgLjEtLjEgMCAwIDAgMCAwIDAgMCAwIDUuOS0yLjRWOTcuMWMtMi4yIC44LTUgMS44LTguMiAzYy04LjggMy4xLTIxLjEgNy4yLTM1LjUgMTEuM0M0MzkuOCAxMTkuNSA0MDIuMSAxMjggMzY4IDEyOGMtMzQuMSAwLTYzLjktOC41LTkxLjQtMTYuNGwtLjgtLjJjLTYuNy0xLjktMTMuMi0zLjgtMTkuNy01LjVWNzIuOGM5LjYgMi40IDE4LjggNSAyNy44IDcuNmwuNyAuMkMzMTIuOCA4OC43IDMzOC43IDk2IDM2OCA5NmMyOS42IDAgNjMuOS03LjUgOTEuNS0xNS40YzEzLjYtMy45IDI1LjQtNy44IDMzLjYtMTAuN2M0LjEtMS41IDcuNC0yLjcgOS42LTMuNWMxLjEtLjQgMi0uNyAyLjUtMWwuNi0uMiAuMS0uMSAwIDAgMCAwIDAgMCAwIDAgNS45LTIuNFYzMmMwLTExLjQtNi4xLTIxLjktMTUuOS0yNy43cy0yMi01LjgtMzEuOS0uMmwtLjIgLjFjLS4zIC4yLS43IC40LTEuNCAuOGMtMS4zIC43LTMuNCAxLjgtNi4yIDMuMWMtNS41IDIuNi0xMy42IDYuMi0yMy40IDkuOGMtMjAgNy4zLTQ2LjIgMTQuMS03MyAxNC4xYy0yNi43IDAtNTAuNi02LjYtNzkuMS0xNC44bC0xLjMtLjRDMjUyLjMgOS4xIDIyMC41IDAgMTg0IDBDMTQ3LjMgMCAxMDkuOCA5IDgyLjYgMTcuNGMtNy4yIDIuMi0xMy44IDQuNC0xOS42IDYuNXpNMjA4IDQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6bS02NCA4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6bTQ4IDcyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2em0tNDgtOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2elwiXX0sVE09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibGFwdG9wLWZpbGVcIixpY29uOls2NDAsNTEyLFtdLFwiZTUxZFwiLFwiTTE5MiAwSDQ4QzIxLjUgMCAwIDIxLjUgMCA0OFYzNjhjMCAyNi41IDIxLjUgNDggNDggNDhIMTYyLjdjNi42LTE4LjYgMjQuNC0zMiA0NS4zLTMyVjI3MmMwLTQ0LjIgMzUuOC04MCA4MC04MGgzMlYxMjhIMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlYwem05NiAyMjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djE2IDk2IDMySDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2djE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDU3NmMzNS4zIDAgNjQtMjguNyA2NC02NFY0MzJjMC04LjgtNy4yLTE2LTE2LTE2SDU5MlYyODhjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzIwIDMwNCAyODh6bTMyIDY0SDUyOFY0MTZIMzA0VjI4OGgxNnpNMjI0IDBWOTZoOTZMMjI0IDB6XCJdfSxtOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0dHlcIixpY29uOls1MTIsNTEyLFtcInRlbGV0eXBlXCJdLFwiZjFlNFwiLFwiTTQ3Mi43IDE4OC44Yy04LjUgMTMuOC0yNi44IDE5LjYtNDIuNyAxMy42TDM1NiAxNzQuMmMtMTQtNS4zLTIyLjUtMTguNS0yMS0zMi40bDQuNi00Mi42Yy01NC4xLTE3LjQtMTEzLjItMTcuNC0xNjcuMyAwbDQuNiA0Mi42YzEuNSAxMy45LTcgMjcuMS0yMSAzMi40TDgyIDIwMi40Yy0xNS45IDYuMS0zNC4yIC4zLTQyLjctMTMuNkw0LjUgMTMyLjVjLTcuNy0xMi40LTUuNC0yOCA1LjUtMzguMWMxMzUuOS0xMjUuOCAzNTYuMS0xMjUuOCA0OTIgMGMxMC45IDEwLjEgMTMuMiAyNS43IDUuNSAzOC4xbC0zNC44IDU2LjR6TTMyIDI3MmMwLTguOCA3LjItMTYgMTYtMTZIODBjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg0OGMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MnptMCAxOTJjMC04LjggNy4yLTE2IDE2LTE2SDgwYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZINDhjLTguOCAwLTE2LTcuMi0xNi0xNlY0NjR6TTk2IDM1MmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZWMzY4YzAtOC44IDcuMi0xNiAxNi0xNnptMzItODBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTQ0Yy04LjggMC0xNi03LjItMTYtMTZWMjcyem02NCA4MGgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE5MmMtOC44IDAtMTYtNy4yLTE2LTE2VjM2OGMwLTguOCA3LjItMTYgMTYtMTZ6bTMyLTgwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI0MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI3MnptNjQgODBoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyODhjLTguOCAwLTE2LTcuMi0xNi0xNlYzNjhjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzODRjLTguOCAwLTE2LTcuMi0xNi0xNlYzNjh6TTMzNiAyNTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzMzZjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg0MzJjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJ6bTE2IDE3NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2VjQ2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCA0NjRjMC04LjggNy4yLTE2IDE2LTE2SDM2OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDE0NGMtOC44IDAtMTYtNy4yLTE2LTE2VjQ2NHpcIl19LHlNPW04LFBNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRpYWdyYW0tbmV4dFwiLGljb246WzUxMiw1MTIsW10sXCJlNDc2XCIsXCJNNTEyIDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NEgyODB2NjRoNDYuMWMyMS40IDAgMzIuMSAyNS45IDE3IDQxTDI3MyAzOTljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwTDE2OSAzMjljLTE1LjEtMTUuMS00LjQtNDEgMTctNDFIMjMyVjIyNEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0djY0ek00NDggNDE2VjM1MkgzNjUuM2wuNC0uNGMxOC40LTE4LjQgMjAuNC00My43IDExLTYzLjZsNzEuMyAwYzM1LjMgMCA2NCAyOC43IDY0IDY0djY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMzUyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDcxLjMgMGMtOS40IDE5LjktNy40IDQ1LjIgMTEgNjMuNmwuNCAuNEg2NHY2NEgyMTAuN2w1LjcgNS43YzIxLjkgMjEuOSA1Ny4zIDIxLjkgNzkuMiAwbDUuNy01LjdINDQ4elwiXX0sRk09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLXJpZmxlXCIsaWNvbjpbNTc2LDUxMixbXSxcImU1NGVcIixcIk0yNjUuMiAxOTJjMjUuNCAwIDQ5LjggNy4xIDcwLjggMTkuOVY1MTJIMTQ0VjMzNy43TDkwLjQgNDI4LjNjLTExLjIgMTktMzUuOCAyNS4zLTU0LjggMTQuMXMtMjUuMy0zNS44LTE0LjEtNTQuOEw5Ny43IDI1OC44YzI0LjUtNDEuNCA2OS02Ni44IDExNy4xLTY2LjhoNTAuNHpNMzIwIDgwYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwczM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MHpNNDQ4IDBjOC44IDAgMTYgNy4yIDE2IDE2VjEzMi4zYzkuNiA1LjUgMTYgMTUuOSAxNiAyNy43VjI2OS4zbDE2LTUuM1YyMDhjMC04LjggNy4yLTE2IDE2LTE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnY4NC41YzAgNi45LTQuNCAxMy0xMC45IDE1LjJMNDgwIDMyNS4zVjM1Mmg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MTZjMCA4LjgtNy4yIDE2LTE2IDE2SDQ4NGwyMyA5Mi4xYzIuNSAxMC4xLTUuMSAxOS45LTE1LjUgMTkuOUg0MzJjLTguOCAwLTE2LTcuMi0xNi0xNlY0MDBINDAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlYyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJWMTYwYzAtMTEuOCA2LjQtMjIuMiAxNi0yNy43VjMyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDE2IDE2elwiXX0sRE09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaG91c2UtbWVkaWNhbC1jaXJjbGUtZXhjbGFtYXRpb25cIixpY29uOls2NDAsNTEyLFtdLFwiZTUxMlwiLFwiTTMyMCAzNjhjMCA1OS41IDI5LjUgMTEyLjEgNzQuOCAxNDRIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w1MjIuMSAxOTMuOWMtOC41LTEuMy0xNy4zLTEuOS0yNi4xLTEuOWMtNTQuNyAwLTEwMy41IDI0LjktMTM1LjggNjRIMzIwVjIwOGMwLTguOC03LjItMTYtMTYtMTZIMjcyYy04LjggMC0xNiA3LjItMTYgMTZ2NDhIMjA4Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDQ4djQ4YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZ6TTQ5NiA1MTJjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHMtNjQuNSAxNDQtMTQ0IDE0NHptMC00OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em0wLTE5MmMtOC44IDAtMTYgNy4yLTE2IDE2djgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjg4YzAtOC44LTcuMi0xNi0xNi0xNnpcIl19LFJNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNsb3NlZC1jYXB0aW9uaW5nXCIsaWNvbjpbNTc2LDUxMixbXSxcImYyMGFcIixcIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMySDUxMmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0Vjk2ek0yMDAgMjA4YzE0LjIgMCAyNyA2LjEgMzUuOCAxNmM4LjggOS45IDI0IDEwLjcgMzMuOSAxLjlzMTAuNy0yNCAxLjktMzMuOWMtMTcuNS0xOS42LTQzLjEtMzItNzEuNS0zMmMtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmMyOC40IDAgNTQtMTIuNCA3MS41LTMyYzguOC05LjkgOC0yNS0xLjktMzMuOXMtMjUtOC0zMy45IDEuOWMtOC44IDkuOS0yMS42IDE2LTM1LjggMTZjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDh6bTE0NCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OGMxNC4yIDAgMjcgNi4xIDM1LjggMTZjOC44IDkuOSAyNCAxMC43IDMzLjkgMS45czEwLjctMjQgMS45LTMzLjljLTE3LjUtMTkuNi00My4xLTMyLTcxLjUtMzJjLTUzIDAtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZjMjguNCAwIDU0LTEyLjQgNzEuNS0zMmM4LjgtOS45IDgtMjUtMS45LTMzLjlzLTI1LTgtMzMuOSAxLjljLTguOCA5LjktMjEuNiAxNi0zNS44IDE2Yy0yNi41IDAtNDgtMjEuNS00OC00OHpcIl19LHY4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1oaWtpbmdcIixpY29uOlszODQsNTEyLFtcImhpa2luZ1wiXSxcImY2ZWNcIixcIk0yODggNDhjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4ek0yNDMuMyAyMzAuN0wyMjQuMiAzMDdsNDkuNyA0OS43YzkgOSAxNC4xIDIxLjIgMTQuMSAzMy45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzOTcuM2wtNzMuOS03My45Yy0xNS44LTE1LjgtMjIuMi0zOC42LTE2LjktNjAuM2wyMC40LTg0YzguMy0zNC4xIDQyLjctNTQuOSA3Ni43LTQ2LjRjMTkgNC44IDM1LjYgMTYuNCA0Ni40IDMyLjdMMzA1LjEgMjA4SDMzNlYxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY1NS44YzAgLjEgMCAuMiAwIC4yczAgLjIgMCAuMlY0ODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWMjcySDI5Ni42Yy0xNiAwLTMxLTgtMzkuOS0yMS40bC0xMy4zLTIwek04MS4xIDQ3MS45TDExNy4zIDMzNGMzIDQuMiA2LjQgOC4yIDEwLjEgMTEuOWw0MS45IDQxLjlMMTQyLjkgNDg4LjFjLTQuNSAxNy4xLTIyIDI3LjMtMzkuMSAyMi44cy0yNy4zLTIyLTIyLjgtMzkuMXptNTUuNS0zNDZMMTAxLjQgMjY2LjVjLTMgMTIuMS0xNC45IDE5LjktMjcuMiAxNy45bC00Ny45LThjLTE0LTIuMy0yMi45LTE2LjMtMTkuMi0zMEwzMS45IDE1NWM5LjUtMzQuOCA0MS4xLTU5IDc3LjItNTloNC4yYzE1LjYgMCAyNy4xIDE0LjcgMjMuMyAyOS44elwiXX0sVU09djgscU09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidmVudXMtZG91YmxlXCIsaWNvbjpbNjQwLDUxMixbOTg5MF0sXCJmMjI2XCIsXCJNMTkyIDI4OGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMnMtNTAuMS0xMTItMTEyLTExMlM4MCAxMTQuMSA4MCAxNzZzNTAuMSAxMTIgMTEyIDExMnpNMzY4IDE3NmMwIDg2LjMtNjIuMSAxNTguMS0xNDQgMTczLjFWMzg0aDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY0NDhIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDMyVjM0OS4xQzc4LjEgMzM0LjEgMTYgMjYyLjMgMTYgMTc2QzE2IDc4LjggOTQuOCAwIDE5MiAwczE3NiA3OC44IDE3NiAxNzZ6TTM0NCAzMThjMTQuNi0xNS42IDI2LjgtMzMuNCAzNi01M2MxOC44IDE0LjQgNDIuNCAyMyA2OCAyM2M2MS45IDAgMTEyLTUwLjEgMTEyLTExMnMtNTAuMS0xMTItMTEyLTExMmMtMjUuNiAwLTQ5LjEgOC42LTY4IDIzYy05LjMtMTkuNS0yMS41LTM3LjQtMzYtNTNDMzczLjEgMTIuNiA0MDkuMSAwIDQ0OCAwYzk3LjIgMCAxNzYgNzguOCAxNzYgMTc2YzAgODYuMy02Mi4xIDE1OC4xLTE0NCAxNzMuMVYzODRoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDgwdjMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ0OEgzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoMzJWMzQ5LjFjLTI2LjYtNC45LTUxLjEtMTUuNy03Mi0zMS4xelwiXX0sR009e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaW1hZ2VzXCIsaWNvbjpbNTc2LDUxMixbXSxcImYzMDJcIixcIk0xNjAgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0VjMyMGMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTYwek0zOTYgMTM4LjdsOTYgMTQ0YzQuOSA3LjQgNS40IDE2LjggMS4yIDI0LjZTNDgwLjkgMzIwIDQ3MiAzMjBIMzI4IDI4MCAyMDBjLTkuMiAwLTE3LjYtNS4zLTIxLjYtMTMuNnMtMi45LTE4LjIgMi45LTI1LjRsNjQtODBjNC42LTUuNyAxMS40LTkgMTguNy05czE0LjIgMy4zIDE4LjcgOWwxNy4zIDIxLjYgNTYtODRDMzYwLjUgMTMyIDM2OCAxMjggMzc2IDEyOHMxNS41IDQgMjAgMTAuN3pNMjU2IDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTQ4IDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMwIDEwNi43IDAgMTIwVjM0NGMwIDc1LjEgNjAuOSAxMzYgMTM2IDEzNkg0NTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMTM2Yy00OC42IDAtODgtMzkuNC04OC04OFYxMjB6XCJdfSxXTT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYWxjdWxhdG9yXCIsaWNvbjpbMzg0LDUxMixbMTI4NDI1XSxcImYxZWNcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek05NiA2NEgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek02NCAyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptMzIgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTkyIDE5MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyek0xNjAgMzIwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6TTI4OCAxOTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNMjU2IDMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyem0zMiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXX0sRU09e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVvcGxlLXB1bGxpbmdcIixpY29uOls1NzYsNTEyLFtdLFwiZTUzNVwiLFwiTTgwIDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4UzMyIDIxLjUgMzIgNDhzMjEuNSA0OCA0OCA0OHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NFYzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJjOS44IDAgMTguNS00LjQgMjQuNC0xMS4yTDgwLjQgNDg1LjNjMi45IDE3LjQgMTkuNCAyOS4yIDM2LjggMjYuM3MyOS4yLTE5LjQgMjYuMy0zNi44TDEyMy4xIDM1MmgxNS43bDMwIDEzNC45YzMuOCAxNy4zIDIwLjkgMjguMSAzOC4yIDI0LjNzMjguMS0yMC45IDI0LjMtMzguMmwtNTcuMy0yNTggMTE2LjMgNTMuOGMuNSAuMyAxLjEgLjUgMS42IC43YzguNiAzLjYgMTggMy4xIDI1LjktLjdjMy40LTEuNiA2LjYtMy45IDkuMy02LjdjMy4xLTMuMiA1LjUtNyA3LjEtMTEuNGMuMS0uMyAuMi0uNyAuMy0xbDIuNS03LjVjNS43LTE3LjEgMTguMy0zMC45IDM0LjctMzguMmw4LTMuNWMxLS40IDEuOS0uOCAyLjktMS4ybC0xNi45IDYzLjVjLTUuNiAyMS4xLS4xIDQzLjYgMTQuNyA1OS43bDcwLjcgNzcuMSAyMiA4OC4xYzQuMyAxNy4xIDIxLjcgMjcuNiAzOC44IDIzLjNzMjcuNi0yMS43IDIzLjMtMzguOGwtMjMtOTIuMWMtMS45LTcuOC01LjgtMTQuOS0xMS4yLTIwLjhsLTQ5LjUtNTQgMTkuMy02NS41IDkuNiAyM2M0LjQgMTAuNiAxMi41IDE5LjMgMjIuOCAyNC41bDI2LjcgMTMuM2MxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlMNTM3IDIzMi43bC0xNS4zLTM2LjhDNTA0LjUgMTU0LjggNDY0LjMgMTI4IDQxOS43IDEyOGMtMjIuOCAwLTQ1LjMgNC44LTY2LjEgMTRsLTggMy41Yy0yNC40IDEwLjktNDQuNiAyOS01OC4xIDUxLjZMMTU3LjMgMTM2LjlDMTQ0LjcgMTMxIDEzMC45IDEyOCAxMTcgMTI4SDY0ek00NjQgOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHpNMzQ5LjcgMzM1LjZsLTI1IDYyLjQtNTkuNCA1OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDM3Mi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6XCJdfSxJTT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJuXCIsaWNvbjpbMzg0LDUxMixbMTEwXSxcIjRlXCIsXCJNMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkgwek0zMiA2NEw1Ni42IDQzLjVDNDggMzMuMiAzMy44IDI5LjMgMjEuMSAzMy45UzAgNTAuNSAwIDY0bDMyIDB6TTM1MiA0NDhsLTI0LjYgMjAuNWM4LjYgMTAuMyAyMi44IDE0LjIgMzUuNSA5LjZzMjEuMS0xNi42IDIxLjEtMzAuMUgzNTJ6TTM4NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmg2NHpNNjQgNDQ4VjY0SDBWNDQ4SDY0ek03LjQgODQuNWwzMjAgMzg0IDQ5LjItNDEtMzIwLTM4NEw3LjQgODQuNXpNMzg0IDQ0OFY2NEgzMjBWNDQ4aDY0elwiXX0sTTg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FibGUtY2FyXCIsaWNvbjpbNTEyLDUxMixbMTI4NjczLDU3NTUxLFwidHJhbVwiXSxcImY3ZGFcIixcIk0yODggNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnptLTY0LThjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyek0zMiAyODhjMC0zNS4zIDI4LjctNjQgNjQtNjRIMjMyVjE1Ny41bC0yMDMuMSA0MmMtMTMgMi43LTI1LjctNS43LTI4LjQtMTguNnM1LjctMjUuNyAxOC42LTI4LjRsMjMyLTQ4IDIzMi00OGMxMy0yLjcgMjUuNyA1LjcgMjguNCAxOC42cy01LjcgMjUuNy0xOC42IDI4LjRMMjgwIDE0Ny41VjIyNEg0MTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDk2Yy0zNS4zIDAtNjQtMjguNy02NC02NFYyODh6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoNjRjOC44IDAgMTYtNy4yIDE2LTE2VjMwNGMwLTguOC03LjItMTYtMTYtMTZIOTZ6bTExMiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoNjRjOC44IDAgMTYtNy4yIDE2LTE2VjMwNGMwLTguOC03LjItMTYtMTYtMTZIMjI0Yy04LjggMC0xNiA3LjItMTYgMTZ6bTE0NC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNmg2NGM4LjggMCAxNi03LjIgMTYtMTZWMzA0YzAtOC44LTcuMi0xNi0xNi0xNkgzNTJ6XCJdfSxPTT1NOCxYTT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjbG91ZC1yYWluXCIsaWNvbjpbNTEyLDUxMixbMTI3NzgzLDk5MjZdLFwiZjczZFwiLFwiTTk2IDMyMGMtNTMgMC05Ni00My05Ni05NmMwLTQyLjUgMjcuNi03OC42IDY1LjktOTEuMkM2NC43IDEyNi4xIDY0IDExOS4xIDY0IDExMkM2NCA1MC4xIDExNC4xIDAgMTc2IDBjNDMuMSAwIDgwLjUgMjQuMyA5OS4yIDYwYzE0LjctMTcuMSAzNi41LTI4IDYwLjgtMjhjNDQuMiAwIDgwIDM1LjggODAgODBjMCA1LjUtLjYgMTAuOC0xLjYgMTZjLjUgMCAxLjEgMCAxLjYgMGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5Nkg5NnptLTYuOCA1MmMxLjMtMi41IDMuOS00IDYuOC00czUuNCAxLjUgNi44IDRsMzUuMSA2NC42YzQuMSA3LjUgNi4yIDE1LjggNi4yIDI0LjN2M2MwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHYtM2MwLTguNSAyLjEtMTYuOSA2LjItMjQuM0w4OS4yIDM3MnptMTYwIDBjMS4zLTIuNSAzLjktNCA2LjgtNHM1LjQgMS41IDYuOCA0bDM1LjEgNjQuNmM0LjEgNy41IDYuMiAxNS44IDYuMiAyNC4zdjNjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh2LTNjMC04LjUgMi4xLTE2LjkgNi4yLTI0LjNMMjQ5LjIgMzcyem0xMjQuOSA2NC42TDQwOS4yIDM3MmMxLjMtMi41IDMuOS00IDYuOC00czUuNCAxLjUgNi44IDRsMzUuMSA2NC42YzQuMSA3LjUgNi4yIDE1LjggNi4yIDI0LjN2M2MwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHYtM2MwLTguNSAyLjEtMTYuOSA2LjItMjQuM3pcIl19LFFNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJ1aWxkaW5nLWNpcmNsZS14bWFya1wiLGljb246WzY0MCw1MTIsW10sXCJlNGQ0XCIsXCJNNDggMEMyMS41IDAgMCAyMS41IDAgNDhWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDk2VjQzMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4djgwaDk2YzE1LjEgMCAyOC41LTYuOSAzNy4zLTE3LjhDMzQwLjQgNDYyLjIgMzIwIDQxNy41IDMyMCAzNjhjMC01NC43IDI0LjktMTAzLjUgNjQtMTM1LjhWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTY0IDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MHptMTEyLTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjQwek04MCA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMTEyek0yNzIgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2ek00OTYgNTEyYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDR6bTU5LjMtMTgwLjdMNTE4LjYgMzY4bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwTDQ5NiAzOTAuNmwtMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42TDQ3My40IDM2OGwtMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDk2IDM0NS40bDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6XCJdfSxLTT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzaGlwXCIsaWNvbjpbNTc2LDUxMixbMTI4Njc0XSxcImYyMWFcIixcIk0xOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJIMzUyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjY0aDQ4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjI0MGw0NC40IDE0LjhjMjMuMSA3LjcgMjkuNSAzNy41IDExLjUgNTMuOWwtMTAxIDkyLjZjLTE2LjIgOS40LTM0LjcgMTUuMS01MC45IDE1LjFjLTE5LjYgMC00MC44LTcuNy01OS4yLTIwLjNjLTIyLjEtMTUuNS01MS42LTE1LjUtNzMuNyAwYy0xNy4xIDExLjgtMzggMjAuMy01OS4yIDIwLjNjLTE2LjIgMC0zNC43LTUuNy01MC45LTE1LjFsLTEwMS05Mi42Yy0xOC0xNi41LTExLjYtNDYuMiAxMS41LTUzLjlMOTYgMjQwVjExMmMwLTI2LjUgMjEuNS00OCA0OC00OGg0OFYzMnpNMTYwIDIxOC43bDEwNy44LTM1LjljMTMuMS00LjQgMjcuMy00LjQgNDAuNSAwTDQxNiAyMTguN1YxMjhIMTYwdjkwLjd6TTMwNi41IDQyMS45QzMyOSA0MzcuNCAzNTYuNSA0NDggMzg0IDQ0OGMyNi45IDAgNTUuNC0xMC44IDc3LjQtMjYuMWwwIDBjMTEuOS04LjUgMjguMS03LjggMzkuMiAxLjdjMTQuNCAxMS45IDMyLjUgMjEgNTAuNiAyNS4yYzE3LjIgNCAyNy45IDIxLjIgMjMuOSAzOC40cy0yMS4yIDI3LjktMzguNCAyMy45Yy0yNC41LTUuNy00NC45LTE2LjUtNTguMi0yNUM0NDkuNSA1MDEuNyA0MTcgNTEyIDM4NCA1MTJjLTMxLjkgMC02MC42LTkuOS04MC40LTE4LjljLTUuOC0yLjctMTEuMS01LjMtMTUuNi03LjdjLTQuNSAyLjQtOS43IDUuMS0xNS42IDcuN2MtMTkuOCA5LTQ4LjUgMTguOS04MC40IDE4LjljLTMzIDAtNjUuNS0xMC4zLTk0LjUtMjUuOGMtMTMuNCA4LjQtMzMuNyAxOS4zLTU4LjIgMjVjLTE3LjIgNC0zNC40LTYuNy0zOC40LTIzLjlzNi43LTM0LjQgMjMuOS0zOC40YzE4LjEtNC4yIDM2LjItMTMuMyA1MC42LTI1LjJjMTEuMS05LjQgMjcuMy0xMC4xIDM5LjItMS43bDAgMEMxMzYuNyA0MzcuMiAxNjUuMSA0NDggMTkyIDQ0OGMyNy41IDAgNTUtMTAuNiA3Ny41LTI2LjFjMTEuMS03LjkgMjUuOS03LjkgMzcgMHpcIl19LGpNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93cy1kb3duLXRvLWxpbmVcIixpY29uOls2NDAsNTEyLFtdLFwiZTRiOFwiLFwiTTU3NiA0MTZMNjQgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyem0yMi42LTEzNy40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDUxMiAyNzQuNyA1MTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuNy00MS40LTQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDk2LTk2em0tMzIwLTQ1LjNjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwTDE5MiAyNzQuNyAxOTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyMTAuN0w4Ni42IDIzMy40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3pcIl19LEpNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRvd25sb2FkXCIsaWNvbjpbNTEyLDUxMixbXSxcImYwMTlcIixcIk0yODggMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjc0LjdsLTczLjQtNzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTI4IDEyOGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDI4OCAyNzQuN1YzMnpNNjQgMzUyYy0zNS4zIDAtNjQgMjguNy02NCA2NHYzMmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNDE2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDM0Ni41bC00NS4zIDQ1LjNjLTI1IDI1LTY1LjUgMjUtOTAuNSAwTDE2NS41IDM1Mkg2NHpNNDMyIDQ1NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0elwiXX0sdDg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1ncmluXCIsaWNvbjpbNTEyLDUxMixbMTI4NTEyLFwiZ3JpblwiXSxcImY1ODBcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0zODguMSAzMTIuOGMxMi4zLTMuOCAyNC4zIDYuOSAxOS4zIDE4LjdDMzgyLjQgMzkwLjYgMzI0LjIgNDMyIDI1Ni4zIDQzMnMtMTI2LjItNDEuNC0xNTEuMS0xMDAuNWMtNS0xMS44IDctMjIuNSAxOS4zLTE4LjdjMzkuNyAxMi4yIDg0LjUgMTkgMTMxLjggMTlzOTIuMS02LjggMTMxLjgtMTl6TTIwOC40IDIwOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTEyOCAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXX0sWk09dDgsaDg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZGVsZXRlLWxlZnRcIixpY29uOls1NzYsNTEyLFs5MDAzLFwiYmFja3NwYWNlXCJdLFwiZjU1YVwiLFwiTTU3NiAxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRIMjA1LjNjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43TDkuNCAyMzMuNGMtNiA2LTkuNCAxNC4xLTkuNCAyMi42czMuNCAxNi42IDkuNCAyMi42TDE2MCA0MjkuM2MxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxMjh6TTI3MSAxNzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNDcgNDcgNDctNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC00NyA0NyA0NyA0N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00Ny00NyA0N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Ny00Ny00Ny00N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6XCJdfSxZTT1oOCxYPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImV5ZS1kcm9wcGVyXCIsaWNvbjpbNTEyLDUxMixbXCJleWUtZHJvcHBlci1lbXB0eVwiLFwiZXllZHJvcHBlclwiXSxcImYxZmJcIixcIk0zNDEuNiAyOS4yTDI0MC4xIDEzMC44bC05LjQtOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjRMNDgyLjggMTcwLjRjMzktMzkgMzktMTAyLjIgMC0xNDEuMXMtMTAyLjItMzktMTQxLjEgMHpNNTUuNCAzMjMuM2MtMTUgMTUtMjMuNCAzNS40LTIzLjQgNTYuNnY0Mi40TDUuNCA0NjIuMmMtOC41IDEyLjctNi44IDI5LjYgNCA0MC40czI3LjcgMTIuNSA0MC40IDRMODkuNyA0ODBoNDIuNGMyMS4yIDAgNDEuNi04LjQgNTYuNi0yMy40TDMwOS40IDMzNS45bC00NS4zLTQ1LjNMMTQzLjQgNDExLjNjLTMgMy03LjEgNC43LTExLjMgNC43SDk2VjM3OS45YzAtNC4yIDEuNy04LjMgNC43LTExLjNMMjIxLjQgMjQ3LjlsLTQ1LjMtNDUuM0w1NS40IDMyMy4zelwiXX0sX009WCwkTT1YLGN0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpbGUtY2lyY2xlLWNoZWNrXCIsaWNvbjpbNTc2LDUxMixbXSxcImU1YTBcIixcIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEgyMjRWMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM4NHYzOC42QzMxMC4xIDIxOS41IDI1NiAyODcuNCAyNTYgMzY4YzAgNTkuMSAyOS4xIDExMS4zIDczLjcgMTQzLjNjLTMuMiAuNS02LjQgLjctOS43IC43SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptMzg0IDY0SDI1NlYwTDM4NCAxMjh6TTU3NiAzNjhjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRzLTE0NC02NC41LTE0NC0xNDRzNjQuNS0xNDQgMTQ0LTE0NHMxNDQgNjQuNSAxNDQgMTQ0em0tNzYuNy00My4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEw0MTYgMzg1LjRsLTI4LjctMjguN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw3Mi03MmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpcIl19LGF0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZvcndhcmRcIixpY29uOls1MTIsNTEyLFs5MTkzXSxcImYwNGVcIixcIk01Mi41IDQ0MC42Yy05LjUgNy45LTIyLjggOS43LTM0LjEgNC40UzAgNDI4LjQgMCA0MTZWOTZDMCA4My42IDcuMiA3Mi4zIDE4LjQgNjdzMjQuNS0zLjYgMzQuMSA0LjRMMjI0IDIxNC4zVjI1NnY0MS43TDUyLjUgNDQwLjZ6TTI1NiAzNTJWMjU2IDEyOCA5NmMwLTEyLjQgNy4yLTIzLjcgMTguNC0yOXMyNC41LTMuNiAzNC4xIDQuNGwxOTIgMTYwYzcuMyA2LjEgMTEuNSAxNS4xIDExLjUgMjQuNnMtNC4yIDE4LjUtMTEuNSAyNC42bC0xOTIgMTYwYy05LjUgNy45LTIyLjggOS43LTM0LjEgNC40cy0xOC40LTE2LjYtMTguNC0yOVYzNTJ6XCJdfSxRPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1vYmlsZVwiLGljb246WzM4NCw1MTIsWzEyODI0MSxcIm1vYmlsZS1hbmRyb2lkXCIsXCJtb2JpbGUtcGhvbmVcIl0sXCJmM2NlXCIsXCJNODAgMEM0NC43IDAgMTYgMjguNyAxNiA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzA0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDgwem04MCA0MzJoNjRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTYwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXX0sc3Q9USxldD1RLEM4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2UtbWVoXCIsaWNvbjpbNTEyLDUxMixbMTI4NTI4LFwibWVoXCJdLFwiZjExYVwiLFwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJ6TTE3Ni40IDI0MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyem0xOTItMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyek0xNjAgMzM2SDM1MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxNjBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6XCJdfSxmdD1DOCxydD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhbGlnbi1jZW50ZXJcIixpY29uOls0NDgsNTEyLFtdLFwiZjAzN1wiLFwiTTM1MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem05NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNTIgMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzMjBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6XCJdfSxMOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib29rLXNrdWxsXCIsaWNvbjpbNDQ4LDUxMixbXCJib29rLWRlYWRcIl0sXCJmNmI3XCIsXCJNMCA5NkMwIDQzIDQzIDAgOTYgMEgzODRoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMydjY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NCA5NmMtNTMgMC05Ni00My05Ni05NlY5NnpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM1MlYzODRIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zMjAgMTEyYzAtMzUuMy0zNS44LTY0LTgwLTY0cy04MCAyOC43LTgwIDY0YzAgMjAuOSAxMi42IDM5LjUgMzIgNTEuMlYxNzZjMCA4LjggNy4yIDE2IDE2IDE2aDY0YzguOCAwIDE2LTcuMiAxNi0xNlYxNjMuMmMxOS40LTExLjcgMzItMzAuMyAzMi01MS4yek0yMDggMTI4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2em04MC0xNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2ek0xMzQuMyAyMDkuM2MtOC4xLTMuNS0xNy41IC4zLTIxIDguNHMuMyAxNy41IDguNCAyMUwxOTkuNCAyNzJsLTc3LjcgMzMuM2MtOC4xIDMuNS0xMS45IDEyLjktOC40IDIxczEyLjkgMTEuOSAyMSA4LjRMMjQwIDI4OS40bDEwNS43IDQ1LjNjOC4xIDMuNSAxNy41LS4zIDIxLTguNHMtLjMtMTcuNS04LjQtMjFMMjgwLjYgMjcybDc3LjctMzMuM2M4LjEtMy41IDExLjktMTIuOSA4LjQtMjFzLTEyLjktMTEuOS0yMS04LjRMMjQwIDI1NC42IDEzNC4zIDIwOS4zelwiXX0sbHQ9TDgscDg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaWQtY2FyZFwiLGljb246WzU3Niw1MTIsWzYyMTQ3LFwiZHJpdmVycy1saWNlbnNlXCJdLFwiZjJjMlwiLFwiTTAgOTZsNTc2IDBjMC0zNS4zLTI4LjctNjQtNjQtNjRINjRDMjguNyAzMiAwIDYwLjcgMCA5NnptMCAzMlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOEgwek02NCA0MDUuM2MwLTI5LjUgMjMuOS01My4zIDUzLjMtNTMuM0gyMzQuN2MyOS41IDAgNTMuMyAyMy45IDUzLjMgNTMuM2MwIDUuOS00LjggMTAuNy0xMC43IDEwLjdINzQuN2MtNS45IDAtMTAuNy00LjgtMTAuNy0xMC43ek0xNzYgMzIwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6TTM1MiAyMDhjMC04LjggNy4yLTE2IDE2LTE2SDQ5NmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNnptMCA2NGMwLTguOCA3LjItMTYgMTYtMTZINDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDM2OGMtOC44IDAtMTYtNy4yLTE2LTE2em0wIDY0YzAtOC44IDcuMi0xNiAxNi0xNkg0OTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZ6XCJdfSxpdD1wOCxkOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJvdXRkZW50XCIsaWNvbjpbNTEyLDUxMixbXCJkZWRlbnRcIl0sXCJmMDNiXCIsXCJNMzIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJINDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDY0QzQ2LjMgOTYgMzIgODEuNyAzMiA2NHpNMjI0IDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgOTZINDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNMzIgNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ0OGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bS4yLTE3OS40Yy04LjItNi40LTguMi0xOC45IDAtMjUuM2wxMDEuOS03OS4zYzEwLjUtOC4yIDI1LjgtLjcgMjUuOCAxMi42VjMzNS4zYzAgMTMuMy0xNS4zIDIwLjgtMjUuOCAxMi42TDMyLjIgMjY4LjZ6XCJdfSxvdD1kOCxudD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoZWFydC1jaXJjbGUtZXhjbGFtYXRpb25cIixpY29uOls1NzYsNTEyLFtdLFwiZTRmZVwiLFwiTTQ3LjYgMzAwLjRMMjI4LjMgNDY5LjFjNy41IDcgMTcuNCAxMC45IDI3LjcgMTAuOXMyMC4yLTMuOSAyNy43LTEwLjlsMi42LTIuNEMyNjcuMiA0MzguNiAyNTYgNDA0LjYgMjU2IDM2OGMwLTk3LjIgNzguOC0xNzYgMTc2LTE3NmMyOC4zIDAgNTUgNi43IDc4LjcgMTguNWMuOS02LjUgMS4zLTEzIDEuMy0xOS42di01LjhjMC02OS45LTUwLjUtMTI5LjUtMTE5LjQtMTQxQzM0NyAzNi41IDMwMC42IDUxLjQgMjY4IDg0TDI1NiA5NiAyNDQgODRjLTMyLjYtMzIuNi03OS00Ny41LTEyNC42LTM5LjlDNTAuNSA1NS42IDAgMTE1LjIgMCAxODUuMXY1LjhjMCA0MS41IDE3LjIgODEuMiA0Ny42IDEwOS41ek00MzIgNTEyYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDR6bTAtNDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptMC0xOTJjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdfSxNPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXNlXCIsaWNvbjpbNTc2LDUxMixbMTI3OTY4LDYzNDk4LDYzNTAwLFwiaG9tZVwiLFwiaG9tZS1hbHRcIixcImhvbWUtbGctYWx0XCJdLFwiZjAxNVwiLFwiTTU3NS44IDI1NS41YzAgMTgtMTUgMzIuMS0zMiAzMi4xaC0zMmwuNyAxNjAuMmMwIDIuNy0uMiA1LjQtLjUgOC4xVjQ3MmMwIDIyLjEtMTcuOSA0MC00MCA0MEg0NTZjLTEuMSAwLTIuMiAwLTMuMy0uMWMtMS40IC4xLTIuOCAuMS00LjIgLjFINDE2IDM5MmMtMjIuMSAwLTQwLTE3LjktNDAtNDBWNDQ4IDM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0IDI0YzAgMjIuMS0xNy45IDQwLTQwIDQwSDE2MCAxMjguMWMtMS41IDAtMy0uMS00LjUtLjJjLTEuMiAuMS0yLjQgLjItMy42IC4ySDEwNGMtMjIuMSAwLTQwLTE3LjktNDAtNDBWMzYwYzAtLjkgMC0xLjkgLjEtMi44VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w1NjQuOCAyMzEuNWM4IDcgMTIgMTUgMTEgMjR6XCJdfSxIdD1NLHp0PU0sVnQ9TSxtdD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYWxlbmRhci13ZWVrXCIsaWNvbjpbNDQ4LDUxMixbXSxcImY3ODRcIixcIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY2NEgyODhWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlY2NGg0OGMyNi41IDAgNDggMjEuNSA0OCA0OHY0OEgwVjExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NEg5NlYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMCAxOTJINDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMTkyem04MCA2NGMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNkgzNjhjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIODB6XCJdfSx2dD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsYXB0b3AtbWVkaWNhbFwiLGljb246WzY0MCw1MTIsW10sXCJmODEyXCIsXCJNNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjM1Mkg1MTJWOTZIMTI4VjM1Mkg2NFY5NnpNMCA0MDMuMkMwIDM5Mi42IDguNiAzODQgMTkuMiAzODRINjIwLjhjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMmMwIDQyLjQtMzQuNCA3Ni44LTc2LjggNzYuOEg3Ni44QzM0LjQgNDgwIDAgNDQ1LjYgMCA0MDMuMnpNMjg4IDE2MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzUydjQ4YzAgOC44LTcuMiAxNi0xNiAxNkgzMDRjLTguOCAwLTE2LTcuMi0xNi0xNlYyNzJIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMjI0YzAtOC44IDcuMi0xNiAxNi0xNmg0OFYxNjB6XCJdfSxNdD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiXCIsaWNvbjpbMzIwLDUxMixbOThdLFwiNDJcIixcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0VjI1NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMTkyYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4YzAtNDYuNS0yNC44LTg3LjMtNjItMTA5LjdjMTguNy0yMi4zIDMwLTUxIDMwLTgyLjNjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhIMzJ6TTE2MCAyMjRINjRWOTZoOTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6TTY0IDI4OGg5NiAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NEg2NFYyODh6XCJdfSx0dD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLW1lZGljYWxcIixpY29uOlszODQsNTEyLFtdLFwiZjQ3N1wiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNMTYwIDI0MGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjI0djQ4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYzNTJIMTEyYy04LjggMC0xNi03LjItMTYtMTZWMzA0YzAtOC44IDcuMi0xNiAxNi0xNmg0OFYyNDB6XCJdfSxodD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkaWNlLW9uZVwiLGljb246WzQ0OCw1MTIsWzk4NTZdLFwiZjUyNVwiLFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNMjI0IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXX0sQ3Q9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwia2l3aS1iaXJkXCIsaWNvbjpbNTc2LDUxMixbXSxcImY1MzVcIixcIk0yOTEuMiAzODguNGMzMS4yLTE4LjggNjQuNy0zNi40IDEwMS4xLTM2LjRINDQ4YzQuNiAwIDkuMS0uMiAxMy42LS43bDg1LjMgMTIxLjljNCA1LjcgMTEuMyA4LjIgMTcuOSA2LjFzMTEuMi04LjMgMTEuMi0xNS4zVjIyNGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEgzOTIuM2MtMzYuNCAwLTY5LjktMTcuNi0xMDEuMS0zNi40QzI2Mi4zIDQyLjEgMjI4LjMgMzIgMTkyIDMyQzg2IDMyIDAgMTE4IDAgMjI0YzAgNzEuMSAzOC42IDEzMy4xIDk2IDE2Ni4zVjQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjQxMGMxNS4zIDMuOSAzMS40IDYgNDggNmM1LjQgMCAxMC43LS4yIDE2LS43VjQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjQwNS4xYzEyLjQtNC40IDI0LjItMTAgMzUuMi0xNi43ek00NDggMjQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6XCJdfSx1OD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy1yaWdodC1hcnJvdy1sZWZ0XCIsaWNvbjpbNTc2LDUxMixbODY0NCxcImV4Y2hhbmdlXCJdLFwiZjBlY1wiLFwiTTQyMi42IDI3OC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MzQuNyAxNzZINjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDM0LjdMMzc3LjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGwxMTIgMTEyYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC0xMTIgMTEyem0tMjY5LjMgMjI0bC0xMTItMTEyYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxMTItMTEyYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMTQxLjMgMzM2SDUxMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgxNDEuM2w1Ny40IDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDB6XCJdfSxMdD11OCxLPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJvdGF0ZS1yaWdodFwiLGljb246WzUxMiw1MTIsW1wicmVkby1hbHRcIixcInJvdGF0ZS1mb3J3YXJkXCJdLFwiZjJmOVwiLFwiTTQ2My41IDIyNEg0NzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNzJjMC05LjctNS44LTE4LjUtMTQuOC0yMi4ycy0xOS4zLTEuNy0yNi4yIDUuMkw0MTMuNCA5Ni42Yy04Ny42LTg2LjUtMjI4LjctODYuMi0zMTUuOCAxYy04Ny41IDg3LjUtODcuNSAyMjkuMyAwIDMxNi44czIyOS4zIDg3LjUgMzE2LjggMGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGMtNjIuNSA2Mi41LTE2My44IDYyLjUtMjI2LjMgMHMtNjIuNS0xNjMuOCAwLTIyNi4zYzYyLjItNjIuMiAxNjIuNy02Mi41IDIyNS4zLTFMMzI3IDE4M2MtNi45IDYuOS04LjkgMTcuMi01LjIgMjYuMnMxMi41IDE0LjggMjIuMiAxNC44SDQ2My41elwiXX0scHQ9SyxkdD1LLHg4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInV0ZW5zaWxzXCIsaWNvbjpbNDQ4LDUxMixbMTI3ODYwLDYxNjg1LFwiY3V0bGVyeVwiXSxcImYyZTdcIixcIk00MTYgMEM0MDAgMCAyODggMzIgMjg4IDE3NlYyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRoMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzUyIDI0MCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNjQgMTZDNjQgNy44IDU3LjkgMSA0OS43IC4xUzM0LjIgNC42IDMyLjQgMTIuNUwyLjEgMTQ4LjhDLjcgMTU1LjEgMCAxNjEuNSAwIDE2Ny45YzAgNDUuOSAzNS4xIDgzLjYgODAgODcuN1Y0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNTUuNmM0NC45LTQuMSA4MC00MS44IDgwLTg3LjdjMC02LjQtLjctMTIuOC0yLjEtMTkuMUwxOTEuNiAxMi41Yy0xLjgtOC05LjMtMTMuMy0xNy40LTEyLjRTMTYwIDcuOCAxNjAgMTZWMTUwLjJjMCA1LjQtNC40IDkuOC05LjggOS44Yy01LjEgMC05LjMtMy45LTkuOC05TDEyNy45IDE0LjZDMTI3LjIgNi4zIDEyMC4zIDAgMTEyIDBzLTE1LjIgNi4zLTE1LjkgMTQuNkw4My43IDE1MWMtLjUgNS4xLTQuNyA5LTkuOCA5Yy01LjQgMC05LjgtNC40LTkuOC05LjhWMTZ6bTQ4LjMgMTUybC0uMyAwLS4zIDAgLjMtLjcgLjMgLjd6XCJdfSx1dD14OCxnOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy11cC13aWRlLXNob3J0XCIsaWNvbjpbNTc2LDUxMixbXCJzb3J0LWFtb3VudC11cFwiXSxcImYxNjFcIixcIk0xNTEuNiA0Mi40QzE0NS41IDM1LjggMTM3IDMyIDEyOCAzMnMtMTcuNSAzLjgtMjMuNiAxMC40bC04OCA5NmMtMTEuOSAxMy0xMS4xIDMzLjMgMiA0NS4yczMzLjMgMTEuMSA0NS4yLTJMOTYgMTQ2LjNWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTQ2LjNsMzIuNCAzNS40YzExLjkgMTMgMzIuMiAxMy45IDQ1LjIgMnMxMy45LTMyLjIgMi00NS4ybC04OC05NnpNMzIwIDQ4MGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4aDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMC0xMjhINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMC0xMjhINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl19LHh0PWc4LGd0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1pbGwtc2lnblwiLGljb246WzM4NCw1MTIsW10sXCJlMWVkXCIsXCJNMzAyLjEgNDIuOGM1LjktMTYuNi0yLjctMzUtMTkuNC00MC45cy0zNSAyLjctNDAuOSAxOS40TDIwOCAxMTYuMWMtNS43IDQtMTEuMSA4LjUtMTYgMTMuNUMxNzEuNyAxMDguOSAxNDMuMyA5NiAxMTIgOTZjLTE5LjUgMC0zNy44IDUtNTMuNyAxMy43QzUyLjUgMTAxLjQgNDIuOSA5NiAzMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjh2ODBWNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjA4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh2NDIuNUw4MS45IDQ2OS4yYy01LjkgMTYuNiAyLjcgMzUgMTkuNCA0MC45czM1LTIuNyA0MC45LTE5LjRsMjEuNC02MEMxNjguOSA0NDEgMTc5LjYgNDQ4IDE5MiA0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjYxLjVsMzUuNy0xMDBjMy45LTEgOC4xLTEuNiAxMi4zLTEuNmMyNi41IDAgNDggMjEuNSA0OCA0OFY0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMDhjMC01OC4yLTQ0LjMtMTA2LTEwMS4xLTExMS41bDE5LjItNTMuOHpcIl19LFN0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJvd2wtcmljZVwiLGljb246WzUxMiw1MTIsW10sXCJlMmViXCIsXCJNMTc2IDU2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDIwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTI0IDQ4aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDIwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNNTYgMTc2SDcyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDU2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0wIDI4My40QzAgMjY4LjMgMTIuMyAyNTYgMjcuNCAyNTZINDg0LjZjMTUuMSAwIDI3LjQgMTIuMyAyNy40IDI3LjRjMCA3MC41LTQ0LjQgMTMwLjctMTA2LjcgMTU0LjFMNDAzLjUgNDUyYy0yIDE2LTE1LjYgMjgtMzEuOCAyOEgxNDAuMmMtMTYuMSAwLTI5LjgtMTItMzEuOC0yOGwtMS44LTE0LjRDNDQuNCA0MTQuMSAwIDM1My45IDAgMjgzLjR6TTIyNCAyMDBjMC0xMy4zIDEwLjctMjQgMjQtMjRoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptLTk2IDBjMC0xMy4zIDEwLjctMjQgMjQtMjRoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMTUyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptLTI0LTk2aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDEwNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMjE2IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0aDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDM0NGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bS0yNC05NmgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgyOTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTEyMCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg0NDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0tMjQtOTZoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMzkyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yOTYgMzJoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjk2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0elwiXX0sTnQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2t1bGxcIixpY29uOls1MTIsNTEyLFsxMjgxMjhdLFwiZjU0Y1wiLFwiTTQxNiAzOTguOWM1OC41LTQxLjEgOTYtMTA0LjEgOTYtMTc0LjlDNTEyIDEwMC4zIDM5Ny40IDAgMjU2IDBTMCAxMDAuMyAwIDIyNGMwIDcwLjcgMzcuNSAxMzMuOCA5NiAxNzQuOWMwIC40IDAgLjcgMCAxLjF2NjRjMCAyNi41IDIxLjUgNDggNDggNDhoNDhWNDY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2NDhoNjRWNDY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ2NDhoNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWNDAwYzAtLjQgMC0uNyAwLTEuMXpNMjI0IDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6bTEyOCA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0elwiXX0sUzg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidG93ZXItYnJvYWRjYXN0XCIsaWNvbjpbNTc2LDUxMixbXCJicm9hZGNhc3QtdG93ZXJcIl0sXCJmNTE5XCIsXCJNODAuMyA0NEM2OS44IDY5LjkgNjQgOTguMiA2NCAxMjhzNS44IDU4LjEgMTYuMyA4NGM2LjYgMTYuNC0xLjMgMzUtMTcuNyA0MS43cy0zNS0xLjMtNDEuNy0xNy43QzcuNCAyMDIuNiAwIDE2Ni4xIDAgMTI4UzcuNCA1My40IDIwLjkgMjBDMjcuNiAzLjYgNDYuMi00LjMgNjIuNiAyLjNTODYuOSAyNy42IDgwLjMgNDR6TTU1NS4xIDIwQzU2OC42IDUzLjQgNTc2IDg5LjkgNTc2IDEyOHMtNy40IDc0LjYtMjAuOSAxMDhjLTYuNiAxNi40LTI1LjMgMjQuMy00MS43IDE3LjdTNDg5LjEgMjI4LjQgNDk1LjcgMjEyYzEwLjUtMjUuOSAxNi4zLTU0LjIgMTYuMy04NHMtNS44LTU4LjEtMTYuMy04NEM0ODkuMSAyNy42IDQ5NyA5IDUxMy40IDIuM3MzNSAxLjMgNDEuNyAxNy43ek0zNTIgMTI4YzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNFY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTgzLjRjLTE5LjEtMTEuMS0zMi0zMS43LTMyLTU1LjRjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHpNMTcwLjYgNzYuOEMxNjMuOCA5Mi40IDE2MCAxMDkuNyAxNjAgMTI4czMuOCAzNS42IDEwLjYgNTEuMmM3LjEgMTYuMi0uMyAzNS4xLTE2LjUgNDIuMXMtMzUuMS0uMy00Mi4xLTE2LjVjLTEwLjMtMjMuNi0xNi00OS42LTE2LTc2LjhzNS43LTUzLjIgMTYtNzYuOGM3LjEtMTYuMiAyNS45LTIzLjYgNDIuMS0xNi41czIzLjYgMjUuOSAxNi41IDQyLjF6TTQ2NCA1MS4yYzEwLjMgMjMuNiAxNiA0OS42IDE2IDc2LjhzLTUuNyA1My4yLTE2IDc2LjhjLTcuMSAxNi4yLTI1LjkgMjMuNi00Mi4xIDE2LjVzLTIzLjYtMjUuOS0xNi41LTQyLjFjNi44LTE1LjYgMTAuNi0zMi45IDEwLjYtNTEuMnMtMy44LTM1LjYtMTAuNi01MS4yYy03LjEtMTYuMiAuMy0zNS4xIDE2LjUtNDIuMXMzNS4xIC4zIDQyLjEgMTYuNXpcIl19LHd0PVM4LGt0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRydWNrLXBpY2t1cFwiLGljb246WzY0MCw1MTIsWzEyODc2M10sXCJmNjNjXCIsXCJNMzY4LjYgOTZsNzYuOCA5NkgyODhWOTZoODAuNnpNMjI0IDgwVjE5Mkg2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjUuMWMtLjcgNS4yLTEuMSAxMC42LTEuMSAxNmMwIDYxLjkgNTAuMSAxMTIgMTEyIDExMnMxMTItNTAuMSAxMTItMTEyYzAtNS40LS40LTEwLjgtMS4xLTE2aDY2LjNjLS43IDUuMi0xLjEgMTAuNi0xLjEgMTZjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJzMTEyLTUwLjEgMTEyLTExMmMwLTUuNC0uNC0xMC44LTEuMS0xNkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDUyNy40TDQxOC42IDU2Yy0xMi4xLTE1LjItMzAuNS0yNC01MC0yNEgyNzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4ek0xMjggMzY4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh6bTI4OCAwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh6XCJdfSxOOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1cC1sb25nXCIsaWNvbjpbMzIwLDUxMixbXCJsb25nLWFycm93LWFsdC11cFwiXSxcImYzMGNcIixcIk0zMTggMTc3LjVjMy44LTguOCAyLTE5LTQuNi0yNmwtMTM2LTE0NEMxNzIuOSAyLjcgMTY2LjYgMCAxNjAgMHMtMTIuOSAyLjctMTcuNCA3LjVsLTEzNiAxNDRjLTYuNiA3LTguNCAxNy4yLTQuNiAyNlMxNC40IDE5MiAyNCAxOTJoODhsMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yODhoODhjOS42IDAgMTguMi01LjcgMjItMTQuNXpcIl19LGJ0PU44LEF0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN0b3BcIixpY29uOlszODQsNTEyLFs5MjA5XSxcImYwNGRcIixcIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxMjh6XCJdfSxCdD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjb2RlLW1lcmdlXCIsaWNvbjpbNDQ4LDUxMixbXSxcImYzODdcIixcIk04MCAxMDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptMzIuNCA0OS4yYzI4LTEyLjQgNDcuNi00MC41IDQ3LjYtNzMuMmMwLTQ0LjItMzUuOC04MC04MC04MFMwIDM1LjggMCA4MGMwIDMyLjggMTkuNyA2MSA0OCA3My4zVjM1OC43QzE5LjcgMzcxIDAgMzk5LjIgMCA0MzJjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTMyLjgtMTkuNy02MS00OC03My4zVjI3MmMyNi43IDIwLjEgNjAgMzIgOTYgMzJoODYuN2MxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwYy0zMi44IDAtNjEgMTkuNy03My4zIDQ4SDIwOGMtNDkuOSAwLTkxLTM4LjEtOTUuNi04Ni44ek04MCA0NTZjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpNMzkyIDI3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6XCJdfSxUdD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1cGxvYWRcIixpY29uOls1MTIsNTEyLFtdLFwiZjA5M1wiLFwiTTI4OCAxMDkuM1YzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMTA5LjNsLTczLjQgNzMuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTI4LTEyOGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxMjggMTI4YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDI4OCAxMDkuM3pNNjQgMzUySDE5MmMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0SDQ0OGMzNS4zIDAgNjQgMjguNyA2NCA2NHYzMmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0ek00MzIgNDU2YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6XCJdfSx5dD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJodXJyaWNhbmVcIixpY29uOlszODQsNTEyLFtdLFwiZjc1MVwiLFwiTTAgMjA4QzAgMTA0LjQgNzUuNyAxOC41IDE3NC45IDIuNkMxODQgMS4yIDE5MiA4LjYgMTkyIDE3LjlWODEuMmMwIDguNCA2LjUgMTUuMyAxNC43IDE2LjVDMzA3IDExMi41IDM4NCAxOTkgMzg0IDMwMy40YzAgMTAzLjYtNzUuNyAxODkuNS0xNzQuOSAyMDUuNGMtOS4yIDEuNS0xNy4xLTUuOS0xNy4xLTE1LjJWNDMwLjJjMC04LjQtNi41LTE1LjMtMTQuNy0xNi41Qzc3IDM5OC45IDAgMzEyLjQgMCAyMDh6bTI4OCA0OGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NnM0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NnptLTk2IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdfSxQdD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtb3VuZFwiLGljb246WzU3Niw1MTIsW10sXCJlNTJkXCIsXCJNMTQ0LjEgMTc5LjJDMTczLjggMTI3LjcgMjI4LjYgOTYgMjg4IDk2czExNC4yIDMxLjcgMTQzLjkgODMuMkw1NDAuNCAzNjhjMTIuMyAyMS4zLTMuMSA0OC0yNy43IDQ4SDYzLjNjLTI0LjYgMC00MC0yNi42LTI3LjctNDhMMTQ0LjEgMTc5LjJ6XCJdfSxGdD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0b2lsZXQtcG9ydGFibGVcIixpY29uOlszMjAsNTEyLFtdLFwiZTU4M1wiLFwiTTAgMzJWNjRIMzIwVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyQzE0LjMgMCAwIDE0LjMgMCAzMnpNMjQgOTZIMHYyNFY0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHYtOEgyNzJ2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjEyMCA5NkgyOTYgMjR6TTI1NiAyNDB2NjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjQwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6XCJdfSxEdD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjb21wYWN0LWRpc2NcIixpY29uOls1MTIsNTEyLFsxMjgxOTEsMTI4MTkyLDEyODQ0MF0sXCJmNTFmXCIsXCJNNTEyIDI1NmMwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpNMjU2IDIyNGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0tOTYgMzJjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2ek05NiAyNDBjMC0zNSAxNy41LTcxLjEgNDUuMi05OC44UzIwNSA5NiAyNDAgOTZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZjLTQ1LjQgMC04OS4yIDIyLjMtMTIxLjUgNTQuNVM2NCAxOTQuNiA2NCAyNDBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNnpcIl19LHc4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpbGUtYXJyb3ctZG93blwiLGljb246WzM4NCw1MTIsW1wiZmlsZS1kb3dubG9hZFwiXSxcImY1NmRcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0VjE2MEgyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjBINjR6TTI1NiAwVjEyOEgzODRMMjU2IDB6TTIxNiAyMzJWMzM0LjFsMzEtMzFjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTcyLTcyYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzEgMzFWMjMyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6XCJdfSxSdD13OCxVdD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYXJhdmFuXCIsaWNvbjpbNjQwLDUxMixbXSxcImY4ZmZcIixcIk0wIDExMkMwIDY3LjggMzUuOCAzMiA4MCAzMkg0MTZjODguNCAwIDE2MCA3MS42IDE2MCAxNjBWMzUyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwSDI4OGMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05Nkg4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBWMTEyek0zMjAgMzUySDQ0OFYyNTZINDE2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDMyVjE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjM1MnpNOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgyMjRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTYwYzAtMTcuNy0xNC4zLTMyLTMyLTMySDk2em05NiAzMzZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHpcIl19LHF0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNoaWVsZC1jYXRcIixpY29uOls1MTIsNTEyLFtdLFwiZTU3MlwiLFwiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yYy41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMmMxNi43IDggMzYuMSA4IDUyLjggMEM0NTQuNyA0MjAuNyA0OTUuNSAyMzkuMiA0OTYgMTQwYy4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTE2MCAxNTQuNGMwLTUuOCA0LjctMTAuNCAxMC40LTEwLjRoLjJjMy40IDAgNi41IDEuNiA4LjUgNC4zbDQwIDUzLjNjMyA0IDcuOCA2LjQgMTIuOCA2LjRoNDhjNSAwIDkuOC0yLjQgMTIuOC02LjRsNDAtNTMuM2MyLTIuNyA1LjItNC4zIDguNS00LjNoLjJjNS44IDAgMTAuNCA0LjcgMTAuNCAxMC40VjI3MmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NlYxNTQuNHpNMjE2IDI4OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnptOTYtMTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNnpcIl19LGs4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJvbHRcIixpY29uOls0NDgsNTEyLFs5ODg5LFwiemFwXCJdLFwiZjBlN1wiLFwiTTM0OS40IDQ0LjZjNS45LTEzLjcgMS41LTI5LjctMTAuNi0zOC41cy0yOC42LTgtMzkuOSAxLjhsLTI1NiAyMjRjLTEwIDguOC0xMy42IDIyLjktOC45IDM1LjNTNTAuNyAyODggNjQgMjg4SDE3NS41TDk4LjYgNDY3LjRjLTUuOSAxMy43LTEuNSAyOS43IDEwLjYgMzguNXMyOC42IDggMzkuOS0xLjhsMjU2LTIyNGMxMC04LjggMTMuNi0yMi45IDguOS0zNS4zcy0xNi42LTIwLjctMzAtMjAuN0gyNzIuNUwzNDkuNCA0NC42elwiXX0sR3Q9azgsV3Q9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ2xhc3Mtd2F0ZXJcIixpY29uOls0NDgsNTEyLFtdLFwiZTRmNFwiLFwiTTY0IDBDNTUuMSAwIDQ2LjYgMy43IDQwLjYgMTAuMnMtOS4xIDE1LjItOC41IDI0LjFMNjAuOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM0gzMDcuM2M0MiAwIDc2LjgtMzIuNCA3OS44LTc0LjNMNDE1LjkgMzQuM2MuNi04LjktMi40LTE3LjYtOC41LTI0LjFTMzkyLjkgMCAzODQgMEg2NHptNDEgMTU2LjVMOTguNCA2NEgzNDkuNkwzNDMgMTU2LjVsLTI0LjIgMTIuMWMtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwYy0yMC45LTEwLjQtNDUuNS0xMC40LTY2LjQgMGMtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwTDEwNSAxNTYuNXpcIl19LEV0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm9pbC13ZWxsXCIsaWNvbjpbNTc2LDUxMixbXSxcImU1MzJcIixcIk01MjguMyA2MS4zYy0xMS40LTQyLjctNTUuMy02OC05OC01Ni42TDQxNC45IDguOEMzOTcuOCAxMy40IDM4Ny43IDMxIDM5Mi4zIDQ4bDI0LjUgOTEuNEwzMDguNSAxNjcuNWwtNi4zLTE4LjFDMjk3LjcgMTM2LjYgMjg1LjYgMTI4IDI3MiAxMjhzLTI1LjcgOC42LTMwLjIgMjEuNGwtMTMuNiAzOUw5NiAyMjIuNlYxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWNDQ4SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDU0NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0MDYuN0wzNDAgMjU3LjVsLTYyLjIgMTYuMUwzMDUuMyAzNTJIMjM4LjdMMjY1IDI3N2wtNzQuNiAxOS4zTDEzNy4zIDQ0OEg5NlYyODguOGwzMzcuNC04Ny41IDI1LjIgOTRjNC42IDE3LjEgMjIuMSAyNy4yIDM5LjIgMjIuNmwxNS41LTQuMWM0Mi43LTExLjQgNjgtNTUuMyA1Ni42LTk4TDUyOC4zIDYxLjN6TTIwNS4xIDQ0OGwxMS4yLTMySDMyNy43bDExLjIgMzJIMjA1LjF6XCJdfSxJdD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2YXVsdFwiLGljb246WzU3Niw1MTIsW10sXCJlMmM1XCIsXCJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDgwbDE2IDMyaDY0bDE2LTMySDQwMGwxNiAzMmg2NGwxNi0zMmgxNmMzNS4zIDAgNjQtMjguNyA2NC02NFY2NGMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNMjI0IDMyMGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHMzNS44IDgwIDgwIDgwem0wIDgwYy04OC40IDAtMTYwLTcxLjYtMTYwLTE2MHM3MS42LTE2MCAxNjAtMTYwczE2MCA3MS42IDE2MCAxNjBzLTcxLjYgMTYwLTE2MCAxNjB6TTQ4MCAyMjEuM1YzMzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjIxLjNjLTE4LjYtNi42LTMyLTI0LjQtMzItNDUuM2MwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4YzAgMjAuOS0xMy40IDM4LjctMzIgNDUuM3pcIl19LE90PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1hcnNcIixpY29uOls0NDgsNTEyLFs5Nzk0XSxcImYyMjJcIixcIk0yODkuOCA0Ni44YzMuNy05IDEyLjUtMTQuOCAyMi4yLTE0LjhINDI0YzEzLjMgMCAyNCAxMC43IDI0IDI0VjE2OGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC0zMy40LTMzLjRMMzIxIDIwNC4yYzE5LjUgMjguNCAzMSA2Mi43IDMxIDk5LjhjMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZTMCA0MDEuMiAwIDMwNHM3OC44LTE3NiAxNzYtMTc2YzM3IDAgNzEuNCAxMS40IDk5LjggMzFsNTIuNi01Mi42TDI5NSA3M2MtNi45LTYuOS04LjktMTcuMi01LjItMjYuMnpNNDAwIDgwbDAgMGgwdjB6TTE3NiA0MTZjNjEuOSAwIDExMi01MC4xIDExMi0xMTJzLTUwLjEtMTEyLTExMi0xMTJzLTExMiA1MC4xLTExMiAxMTJzNTAuMSAxMTIgMTEyIDExMnpcIl19LFh0PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRvaWxldFwiLGljb246WzQ0OCw1MTIsWzEyODcwMV0sXCJmN2Q4XCIsXCJNMjQgMEMxMC43IDAgMCAxMC43IDAgMjRTMTAuNyA0OCAyNCA0OGg4VjE5Ni45Yy0xLjkgMS40LTMuOCAyLjktNS42IDQuNEMxMC45IDIxNC41IDAgMjMyLjkgMCAyNTZjMCA0Ni45IDE0LjMgODQuMSAzNyAxMTIuNWMxNC4yIDE3LjcgMzEuMSAzMS4zIDQ4LjUgNDEuOEw2NS42IDQ2OS45Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44czE1LjcgMTMuMyAyNiAxMy4zSDM1MmMxMC4zIDAgMTkuOS00LjkgMjYtMTMuM3M3LjctMTkuMSA0LjQtMjguOGwtMTkuOC01OS41YzE3LjQtMTAuNSAzNC4zLTI0LjEgNDguNS00MS44YzIyLjctMjguNCAzNy02NS41IDM3LTExMi41YzAtMjMuMS0xMC45LTQxLjUtMjYuNC01NC42Yy0xLjgtMS41LTMuNy0zLTUuNi00LjRWNDhoOGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgyNHpNMzg0IDI1Ni4zYzAgMS0uMyAyLjYtMy44IDUuNmMtNC44IDQuMS0xNCA5LTI5LjMgMTMuNEMzMjAuNSAyODQgMjc2LjEgMjg4IDIyNCAyODhzLTk2LjUtNC0xMjYuOS0xMi44Yy0xNS4zLTQuNC0yNC41LTkuMy0yOS4zLTEzLjRjLTMuNS0zLTMuOC00LjYtMy44LTUuNmwwLS4zIDAtLjFjMC0xIDAtMi41IDMuOC01LjhjNC44LTQuMSAxNC05IDI5LjMtMTMuNEMxMjcuNSAyMjggMTcxLjkgMjI0IDIyNCAyMjRzOTYuNSA0IDEyNi45IDEyLjhjMTUuMyA0LjQgMjQuNSA5LjMgMjkuMyAxMy40YzMuOCAzLjIgMy44IDQuOCAzLjggNS44bDAgLjEgMCAuM3pNMzI4LjIgMzg0bC0uMiAuNSAwLS41aC4yek0xMTIgNjRoMzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXX0sUXQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGxhbmUtY2lyY2xlLXhtYXJrXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1NTdcIixcIk0yNTYgMGMtMzUgMC02NCA1OS41LTY0IDkzLjd2ODQuNkw4LjEgMjgzLjRjLTUgMi44LTguMSA4LjItOC4xIDEzLjl2NjUuNWMwIDEwLjYgMTAuMiAxOC4zIDIwLjQgMTUuNGwxNzEuNi00OSAwIDcwLjktNTcuNiA0My4yYy00IDMtNi40IDcuOC02LjQgMTIuOHY0MmMwIDcuOCA2LjMgMTQgMTQgMTRjMS4zIDAgMi42LS4yIDMuOS0uNUwyNTYgNDgwbDExMC4xIDMxLjVjMS4zIC40IDIuNiAuNSAzLjkgLjVjNiAwIDExLjEtMy43IDEzLjEtOUMzNDQuNSA0NzAuNyAzMjAgNDIyLjIgMzIwIDM2OGMwLTYwLjYgMzAuNi0xMTQgNzcuMS0xNDUuNkwzMjAgMTc4LjNWOTMuN0MzMjAgNTkuNSAyOTIgMCAyNTYgMHpNNDk2IDUxMmM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NHMtMTQ0IDY0LjUtMTQ0IDE0NHM2NC41IDE0NCAxNDQgMTQ0em01OS4zLTE4MC43TDUxOC42IDM2OGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0OTYgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0NzMuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ5NiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXX0sYT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ5ZW4tc2lnblwiLGljb246WzMyMCw1MTIsWzE2NSxcImNueVwiLFwianB5XCIsXCJybWJcIixcInllblwiXSxcImYxNTdcIixcIk01OC42IDQ2LjJDNDguOCAzMS41IDI5IDI3LjYgMTQuMiAzNy40Uy00LjQgNjcgNS40IDgxLjdMMTAwLjIgMjI0SDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDgwdjMySDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDgwdjY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzg0aDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MlYyODhoODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjE5LjhMMzE0LjYgODEuN2M5LjgtMTQuNyA1LjgtMzQuNi04LjktNDQuNHMtMzQuNi01LjgtNDQuNCA4LjlMMTYwIDE5OC4zIDU4LjYgNDYuMnpcIl19LEt0PWEsanQ9YSxKdD1hLFp0PWEsdD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJydWJsZS1zaWduXCIsaWNvbjpbMzg0LDUxMixbODM4MSxcInJvdWJsZVwiLFwicnViXCIsXCJydWJsZVwiXSxcImYxNThcIixcIk05NiAzMkM3OC4zIDMyIDY0IDQ2LjMgNjQgNjRWMjU2SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0djMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDY0djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNDE2SDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxMjhWMzIwSDI0MGM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NEg5NnpNMjQwIDI1NkgxMjhWOTZIMjQwYzQ0LjIgMCA4MCAzNS44IDgwIDgwcy0zNS44IDgwLTgwIDgwelwiXX0sWXQ9dCxfdD10LCR0PXQsY2g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3VuXCIsaWNvbjpbNTEyLDUxMixbOTcyOF0sXCJmMTg1XCIsXCJNMzYxLjUgMS4yYzUgMi4xIDguNiA2LjYgOS42IDExLjlMMzkxIDEyMWwxMDcuOSAxOS44YzUuMyAxIDkuOCA0LjYgMTEuOSA5LjZzMS41IDEwLjctMS42IDE1LjJMNDQ2LjkgMjU2bDYyLjMgOTAuM2MzLjEgNC41IDMuNyAxMC4yIDEuNiAxNS4ycy02LjYgOC42LTExLjkgOS42TDM5MSAzOTEgMzcxLjEgNDk4LjljLTEgNS4zLTQuNiA5LjgtOS42IDExLjlzLTEwLjcgMS41LTE1LjItMS42TDI1NiA0NDYuOWwtOTAuMyA2Mi4zYy00LjUgMy4xLTEwLjIgMy43LTE1LjIgMS42cy04LjYtNi42LTkuNi0xMS45TDEyMSAzOTEgMTMuMSAzNzEuMWMtNS4zLTEtOS44LTQuNi0xMS45LTkuNnMtMS41LTEwLjcgMS42LTE1LjJMNjUuMSAyNTYgMi44IDE2NS43Yy0zLjEtNC41LTMuNy0xMC4yLTEuNi0xNS4yczYuNi04LjYgMTEuOS05LjZMMTIxIDEyMSAxNDAuOSAxMy4xYzEtNS4zIDQuNi05LjggOS42LTExLjlzMTAuNy0xLjUgMTUuMiAxLjZMMjU2IDY1LjEgMzQ2LjMgMi44YzQuNS0zLjEgMTAuMi0zLjcgMTUuMi0xLjZ6TTM1MiAyNTZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZzNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZ6bTMyIDBjMC03MC43LTU3LjMtMTI4LTEyOC0xMjhzLTEyOCA1Ny4zLTEyOCAxMjhzNTcuMyAxMjggMTI4IDEyOHMxMjgtNTcuMyAxMjgtMTI4elwiXX0sYWg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ3VpdGFyXCIsaWNvbjpbNTEyLDUxMixbXSxcImY3YTZcIixcIk00NjUgN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMMzgzIDU1Yy0yLjQgMi40LTQuMyA1LjMtNS41IDguNWwtMTUuNCA0MS03Ny41IDc3LjZjLTQ1LjEtMjkuNC05OS4zLTMwLjItMTMxIDEuNmMtMTEgMTEtMTggMjQuNi0yMS40IDM5LjZjLTMuNyAxNi42LTE5LjEgMzAuNy0zNi4xIDMxLjZjLTI1LjYgMS4zLTQ5LjMgMTAuNy02Ny4zIDI4LjZDLTE2IDMyOC40LTcuNiA0MDkuNCA0Ny41IDQ2NC41czEzNi4xIDYzLjUgMTgwLjkgMTguN2MxNy45LTE3LjkgMjcuNC00MS43IDI4LjYtNjcuM2MuOS0xNyAxNS0zMi4zIDMxLjYtMzYuMWMxNS0zLjQgMjguNi0xMC41IDM5LjYtMjEuNGMzMS44LTMxLjggMzEtODUuOSAxLjYtMTMxbDc3LjYtNzcuNiA0MS0xNS40YzMuMi0xLjIgNi4xLTMuMSA4LjUtNS41bDQ4LTQ4YzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDQ2NSA3ek0yMDggMzUyYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6XCJdfSxiOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmYWNlLWxhdWdoLXdpbmtcIixpY29uOls1MTIsNTEyLFtcImxhdWdoLXdpbmtcIl0sXCJmNTljXCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNOTYuOCAzMTQuMWMtMy44LTEzLjcgNy40LTI2LjEgMjEuNi0yNi4xSDM5My42YzE0LjIgMCAyNS41IDEyLjQgMjEuNiAyNi4xQzM5Ni4yIDM4MiAzMzIuMSA0MzIgMjU2IDQzMnMtMTQwLjItNTAtMTU5LjItMTE3Ljl6TTIwOC40IDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTkyLjQgMjUuNmMtNS4zIDcuMS0xNS4zIDguNS0yMi40IDMuMnMtOC41LTE1LjMtMy4yLTIyLjRjMzAuNC00MC41IDkxLjItNDAuNSAxMjEuNiAwYzUuMyA3LjEgMy45IDE3LjEtMy4yIDIyLjRzLTE3LjEgMy45LTIyLjQtMy4yYy0xNy42LTIzLjUtNTIuOC0yMy41LTcwLjQgMHpcIl19LHNoPWI4LGVoPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvcnNlLWhlYWRcIixpY29uOls1MTIsNTEyLFtdLFwiZjdhYlwiLFwiTTAgNDY0VjMxNi45QzAgMjA4LjUgNjguMyAxMTEuOCAxNzAuNSA3NS42TDM0MC4yIDE1LjVDMzYxLjYgNy45IDM4NCAyMy44IDM4NCA0Ni40YzAgMTEtNS41IDIxLjItMTQuNiAyNy4zTDMzNiA5NmM0OC4xIDAgOTEuMiAyOS44IDEwOC4xIDc0LjlsNDguNiAxMjkuNWMxMS44IDMxLjQgNC4xIDY2LjgtMTkuNiA5MC41Yy0xNiAxNi0zNy44IDI1LjEtNjAuNSAyNS4xaC0zLjRjLTI2LjEgMC01MC45LTExLjYtNjcuNi0zMS43bC0zMi4zLTM4LjdjLTExLjcgNC4xLTI0LjIgNi40LTM3LjMgNi40bC0uMSAwIDAgMGMtNi4zIDAtMTIuNS0uNS0xOC42LTEuNWMtMy42LS42LTcuMi0xLjQtMTAuNy0yLjNsMCAwYy0yOC45LTcuOC01My4xLTI2LjgtNjcuOC01Mi4yYy00LjQtNy42LTE0LjItMTAuMy0yMS45LTUuOHMtMTAuMyAxNC4yLTUuOCAyMS45YzI0IDQxLjUgNjguMyA3MCAxMTkuMyA3MS45bDQ3LjIgNzAuOGM0IDYuMSA2LjIgMTMuMiA2LjIgMjAuNGMwIDIwLjMtMTYuNSAzNi44LTM2LjggMzYuOEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6TTMyOCAyMjRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHpcIl19LGZoPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJvcmUtaG9sZVwiLGljb246WzUxMiw1MTIsW10sXCJlNGMzXCIsXCJNMjU2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjI5Ni42Yy0xOS4xIDExLjEtMzIgMzEuNy0zMiA1NS40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC0yMy43LTEyLjktNDQuNC0zMi01NS40VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek00OCAxMjhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMTc2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDM1MlYzNTJjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZWMTI4SDQ4elwiXX0scmg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaW5kdXN0cnlcIixpY29uOls1MTIsNTEyLFtdLFwiZjI3NVwiLFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRWMzA0djQ4IDgwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQ2NGMyNi41IDAgNDgtMjEuNSA0OC00OFYzMDQgMTUyLjJjMC0xOC4yLTE5LjQtMjkuNy0zNS40LTIxLjFMMzIwIDIxNS40VjE1Mi4yYzAtMTguMi0xOS40LTI5LjctMzUuNC0yMS4xTDEyOCAyMTUuNFY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMnpcIl19LEE4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNpcmNsZS1kb3duXCIsaWNvbjpbNTEyLDUxMixbNjE0NjYsXCJhcnJvdy1hbHQtY2lyY2xlLWRvd25cIl0sXCJmMzU4XCIsXCJNMjU2IDBDMTE0LjYgMCAwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyczI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDB6TTI0NC43IDM5NS4zbC0xMTItMTEyYy00LjYtNC42LTUuOS0xMS41LTMuNS0xNy40czguMy05LjkgMTQuOC05LjlsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45czEuMSAxMi45LTMuNSAxNy40bC0xMTIgMTEyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHpcIl19LGxoPUE4LGloPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93cy10dXJuLXRvLWRvdHNcIixpY29uOls1MTIsNTEyLFtdLFwiZTRjMVwiLFwiTTI0OS40IDI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wyNjkuMyA5NiA0MTYgOTZjNTMgMCA5NiA0MyA5NiA5NnYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxOTJjMC0xNy43LTE0LjMtMzItMzItMzJsLTE0Ni43IDAgMjUuNCAyNS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsODAtODB6bTEzLjMgMjU2bDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQyLjcgNDE2IDk2IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ4YzAtNTMgNDMtOTYgOTYtOTZsMTQ2LjcgMC0yNS40LTI1LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDB6TTUxMiAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0ek02NCA2NGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NFMyOC43IDY0IDY0IDY0elwiXX0sb2g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmxvcmluLXNpZ25cIixpY29uOlszODQsNTEyLFtdLFwiZTE4NFwiLFwiTTMxNC43IDMyYy0zOC44IDAtNzMuNyAyMy4zLTg4LjYgNTkuMUwxNzAuNyAyMjRINjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoODBMOTguOSAzOTYuM2MtNSAxMS45LTE2LjYgMTkuNy0yOS41IDE5LjdIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjkuM2MzOC44IDAgNzMuNy0yMy4zIDg4LjYtNTkuMUwyMTMuMyAyODhIMzIwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI0MGw0NS4xLTEwOC4zYzUtMTEuOSAxNi42LTE5LjcgMjkuNS0xOS43SDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMTQuN3pcIl19LGo9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctZG93bi1zaG9ydC13aWRlXCIsaWNvbjpbNTc2LDUxMixbXCJzb3J0LWFtb3VudC1kZXNjXCIsXCJzb3J0LWFtb3VudC1kb3duLWFsdFwiXSxcImY4ODRcIixcIk0xNTEuNiA0NjkuNkMxNDUuNSA0NzYuMiAxMzcgNDgwIDEyOCA0ODBzLTE3LjUtMy44LTIzLjYtMTAuNGwtODgtOTZjLTExLjktMTMtMTEuMS0zMy4zIDItNDUuMnMzMy4zLTExLjEgNDUuMiAyTDk2IDM2NS43VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMzY1LjdsMzIuNC0zNS40YzExLjktMTMgMzIuMi0xMy45IDQ1LjItMnMxMy45IDMyLjIgMiA0NS4ybC04OCA5NnpNMzIwIDMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxMjhoOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDEyOEg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDEyOEg1NDRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyelwiXX0sbmg9aixIaD1qLHpoPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxlc3MtdGhhblwiLGljb246WzM4NCw1MTIsWzYyNzc0XSxcIjNjXCIsXCJNMzgwLjYgODEuN2M3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45TDEwMy42IDI1NiAzNjYuMyAzODcuNGMxNS44IDcuOSAyMi4yIDI3LjEgMTQuMyA0Mi45cy0yNy4xIDIyLjItNDIuOSAxNC4zbC0zMjAtMTYwQzYuOCAyNzkuMiAwIDI2OC4xIDAgMjU2czYuOC0yMy4yIDE3LjctMjguNmwzMjAtMTYwYzE1LjgtNy45IDM1LTEuNSA0Mi45IDE0LjN6XCJdfSxWaD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhbmdsZS1kb3duXCIsaWNvbjpbNDQ4LDUxMixbODk2NF0sXCJmMTA3XCIsXCJNMjAxLjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzA2LjcgODYuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHpcIl19LG1oPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNhci10dW5uZWxcIixpY29uOls1MTIsNTEyLFtdLFwiZTRkZVwiLFwiTTI1NiAwQzExNC42IDAgMCAxMTQuNiAwIDI1NlY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRoNjRIMzg0aDY0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjI1NkM1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMHpNMzg0IDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDQ4SDE2MHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNzZjMC0yMC44IDExLjMtMzguOSAyOC4xLTQ4LjZsMjEtNjQuN2M3LjUtMjMuMSAyOS0zOC43IDUzLjMtMzguN0gzMTMuNmMyNC4zIDAgNDUuOCAxNS42IDUzLjMgMzguN2wyMSA2NC43YzE2LjggOS43IDI4LjIgMjcuOCAyOC4yIDQ4LjZWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMyek0xOTAuOCAyNzcuNUwxNzcgMzIwSDMzNWwtMTMuOC00Mi41Yy0xLjEtMy4zLTQuMS01LjUtNy42LTUuNUgxOTguNGMtMy41IDAtNi41IDIuMi03LjYgNS41ek0xNjggNDA4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjR6bTIwMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6XCJdfSx2aD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoZWFkLXNpZGUtY291Z2hcIixpY29uOls2NDAsNTEyLFtdLFwiZTA2MVwiLFwiTTAgMjAxLjdDMCA5MC4zIDkwLjMgMCAyMDEuNyAwSDIyNGM5NS4yIDAgMTc0LjIgNjkuMyAxODkuNCAxNjAuMWMyLjIgMTMgNi43IDI1LjcgMTUgMzYuMWw0MiA1Mi42YzYuMiA3LjggOS42IDE3LjQgOS42IDI3LjRjMCAyNC4yLTE5LjYgNDMuOC00My44IDQzLjhINDE2djMySDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg2NGMwIDM1LjMtMjguNyA2NC02NCA2NEgyODhjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM3NS44YzAtMTctNy4xLTMzLTE3LjUtNDYuNEMxOC4zIDI5My4yIDAgMjQ2LjUgMCAyMDEuN3pNMzM2IDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem0yNzIgODhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptLTQwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHptLTY0IDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHptMTI4IDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek02MDggNTA0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bS00MC03MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6XCJdfSxNaD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJncmlwLWxpbmVzXCIsaWNvbjpbNDQ4LDUxMixbXSxcImY3YTRcIixcIk0zMiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMjg4em0wLTEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAxNjB6XCJdfSx0aD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0aHVtYnMtZG93blwiLGljb246WzUxMiw1MTIsWzEyODA3OCw2MTU3Nl0sXCJmMTY1XCIsXCJNMzEzLjQgNDc5LjFjMjYtNS4yIDQyLjktMzAuNSAzNy43LTU2LjVsLTIuMy0xMS40Yy01LjMtMjYuNy0xNS4xLTUyLjEtMjguOC03NS4ySDQ2NGMyNi41IDAgNDgtMjEuNSA0OC00OGMwLTI1LjMtMTkuNS00Ni00NC4zLTQ3LjljNy43LTguNSAxMi4zLTE5LjggMTIuMy0zMi4xYzAtMjMuNC0xNi44LTQyLjktMzguOS00Ny4xYzQuNC03LjMgNi45LTE1LjggNi45LTI0LjljMC0yMS4zLTEzLjktMzkuNC0zMy4xLTQ1LjZjLjctMy4zIDEuMS02LjggMS4xLTEwLjRjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjk0LjVjLTE5IDAtMzcuNSA1LjYtNTMuMyAxNi4xTDIwMi43IDczLjhDMTc2IDkxLjYgMTYwIDEyMS42IDE2MCAxNTMuN1YxOTJ2NDggMjQuOWMwIDI5LjIgMTMuMyA1Ni43IDM2IDc1bDcuNCA1LjljMjYuNSAyMS4yIDQ0LjYgNTEgNTEuMiA4NC4ybDIuMyAxMS40YzUuMiAyNiAzMC41IDQyLjkgNTYuNSAzNy43ek0zMiAzMjBIOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWNjRjMC0xNy43LTE0LjMtMzItMzItMzJIMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFYyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJ6XCJdfSxoaD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLWxvY2tcIixpY29uOls2NDAsNTEyLFtdLFwiZjUwMlwiLFwiTTIyNCAyNTZjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhTMjk0LjcgMCAyMjQgMFM5NiA1Ny4zIDk2IDEyOHM1Ny4zIDEyOCAxMjggMTI4em0tNDUuNyA0OEM3OS44IDMwNCAwIDM4My44IDAgNDgyLjNDMCA0OTguNyAxMy4zIDUxMiAyOS43IDUxMkgzOTIuNmMtNS40LTkuNC04LjYtMjAuMy04LjYtMzJWMzUyYzAtMi4xIC4xLTQuMiAuMy02LjNjLTMxLTI2LTcxLTQxLjctMTE0LjYtNDEuN0gxNzguM3pNNTI4IDI0MGMxNy43IDAgMzIgMTQuMyAzMiAzMnY0OEg0OTZWMjcyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tODAgMzJ2NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMyVjI3MmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHpcIl19LEI4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93LXJpZ2h0LWxvbmdcIixpY29uOls1MTIsNTEyLFtcImxvbmctYXJyb3ctcmlnaHRcIl0sXCJmMTc4XCIsXCJNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcwLjcgMC03My40IDczLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMTI4LTEyOHpcIl19LENoPUI4LExoPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFuY2hvci1jaXJjbGUteG1hcmtcIixpY29uOls2NDAsNTEyLFtdLFwiZTRhY1wiLFwiTTI1NiA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyem04NS4xIDgwQzM2NyAxNTguOCAzODQgMTI5LjQgMzg0IDk2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMzMuNCAxNyA2Mi44IDQyLjkgODBIMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyVjQ0OEgyMDhjLTUzIDAtOTYtNDMtOTYtOTZ2LTYuMWw3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDk3IDI2M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNyAzMTljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3LTdWMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwaDgwIDgwYzguMiAwIDE2LjMtLjYgMjQuMi0xLjhjLTIyLjItMTYuMi00MC40LTM3LjUtNTMtNjIuMkgzMjBWMzY4IDI0MGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNDEuMXpNNDk2IDUxMmM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NHMtMTQ0IDY0LjUtMTQ0IDE0NHM2NC41IDE0NCAxNDQgMTQ0em01OS4zLTE4MC43TDUxOC42IDM2OGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0OTYgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0NzMuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQ5NiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXX0sVDg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZWxsaXBzaXNcIixpY29uOls0NDgsNTEyLFtcImVsbGlwc2lzLWhcIl0sXCJmMTQxXCIsXCJNMTIwIDI1NmMwIDMwLjktMjUuMSA1Ni01NiA1NnMtNTYtMjUuMS01Ni01NnMyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZ6bTE2MCAwYzAgMzAuOS0yNS4xIDU2LTU2IDU2cy01Ni0yNS4xLTU2LTU2czI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NnptMTA0IDU2Yy0zMC45IDAtNTYtMjUuMS01Ni01NnMyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZzLTI1LjEgNTYtNTYgNTZ6XCJdfSxwaD1UOCxkaD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGVzcy1wYXduXCIsaWNvbjpbMzIwLDUxMixbOTgyM10sXCJmNDQzXCIsXCJNMjY0IDEzNmMwIDM3LjEtMTkuNCA2OS42LTQ4LjYgODhIMjI0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyYzAgOTYgMjQgMTI4IDI0IDEyOEg3MnMyNC0zMiAyNC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoOC41Qzc1LjQgMjA1LjYgNTYgMTczLjEgNTYgMTM2QzU2IDc4LjYgMTAyLjYgMzIgMTYwIDMyczEwNCA0Ni42IDEwNCAxMDR6TTMyIDQ0OEgyODhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdfSx5OD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJraXQtbWVkaWNhbFwiLGljb246WzU3Niw1MTIsW1wiZmlyc3QtYWlkXCJdLFwiZjQ3OVwiLFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDk2VjMySDY0em02NCAwVjQ4MEg0NDhWMzJIMTI4ek01MTIgNDgwYzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDQ4MFY0ODBoMzJ6TTI1NiAxNzZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnY0OGg0OGM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDMyMHY0OGMwIDguOC03LjIgMTYtMTYgMTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZWMjg4SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2VjI0MGMwLTguOCA3LjItMTYgMTYtMTZoNDhWMTc2elwiXX0sdWg9eTgseGg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLXRocm91Z2gtd2luZG93XCIsaWNvbjpbNjQwLDUxMixbXSxcImU1YTlcIixcIk02NCA2NGwyMjQgMCAwIDkuOGMwIDM5LTIzLjcgNzQtNTkuOSA4OC40QzE2Ny42IDE4Ni41IDEyOCAyNDUgMTI4IDMxMC4ybDAgNzMuOHMwIDAgMCAwSDY0VjY0em0yODggMGwyMjQgMFYzODRINTA4LjNsLTMuNy00LjUtNzUuMi05MC4yYy05LjEtMTAuOS0yMi42LTE3LjMtMzYuOS0xNy4zbC03MS4xIDAtNDEtNjMuMWMtLjMtLjUtLjYtMS0xLTEuNGM0NC43LTI5IDcyLjUtNzkgNzIuNS0xMzMuNmwwLTkuOHptNzMgMzIwSDM3OS4ybDQyLjcgNjRINTkyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ4QzIxLjUgMCAwIDIxLjUgMCA0OFY0MDBjMCAyNi41IDIxLjUgNDggNDggNDhIMzA4LjJsMzMuMiA0OS44YzkuOCAxNC43IDI5LjcgMTguNyA0NC40IDguOXMxOC43LTI5LjcgOC45LTQ0LjRMMzEwLjUgMzM2bDc0LjYgMCA0MCA0OHptLTE1OS41IDBIMTkyczAgMCAwIDBsMC03My44YzAtMTAuMiAxLjYtMjAuMSA0LjctMjkuNUwyNjUuNSAzODR6TTE5MiAxMjhjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4elwiXX0sZ2g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidG9vbGJveFwiLGljb246WzUxMiw1MTIsWzEyOTUyMF0sXCJmNTUyXCIsXCJNMTc2IDg4djQwSDMzNlY4OGMwLTQuNC0zLjYtOC04LThIMTg0Yy00LjQgMC04IDMuNi04IDh6bS00OCA0MFY4OGMwLTMwLjkgMjUuMS01NiA1Ni01NkgzMjhjMzAuOSAwIDU2IDI1LjEgNTYgNTZ2NDBoMjguMWMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xbDUxLjkgNTEuOWM5IDkgMTQuMSAyMS4yIDE0LjEgMzMuOVYzMDRIMzg0VjI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnYxNkgxOTJWMjg4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjE2SDBWMjI3LjljMC0xMi43IDUuMS0yNC45IDE0LjEtMzMuOWw1MS45LTUxLjljOS05IDIxLjItMTQuMSAzMy45LTE0LjFIMTI4ek0wIDQxNlYzMzZIMTI4djE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzM2SDMyMHYxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMzNkg1MTJ2ODBjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0elwiXX0sU2g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZHMtaG9sZGluZy1jaXJjbGVcIixpY29uOls2NDAsNTEyLFtdLFwiZTRmYlwiLFwiTTMyMCAyNTZjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4UzI0OS4zIDAgMzIwIDBzMTI4IDU3LjMgMTI4IDEyOHMtNTcuMyAxMjgtMTI4IDEyOHpNNDAgNjRjMjIuMSAwIDQwIDE3LjkgNDAgNDB2NDAgODAgNDAuMmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2w1MS4xIDUxLjFjOC4zIDguMyAyMS4zIDkuNiAzMSAzLjFjMTIuOS04LjYgMTQuNy0yNi45IDMuNy0zNy44bC0xNS4yLTE1LjItMzItMzJjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMzIgMzIgMTUuMiAxNS4yIDAgMCAyNS4zIDI1LjNjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMlY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhIMTczLjNjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43TDI4LjEgMzkzLjRDMTAuMSAzNzUuNCAwIDM1MSAwIDMyNS41VjIyNCAxNjAgMTA0QzAgODEuOSAxNy45IDY0IDQwIDY0em01NjAgMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHY1NiA2NFYzMjUuNWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUw1MTIgNDkzLjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdINDAwYy0yNi41IDAtNDgtMjEuNS00OC00OFYzODUuMWMwLTI5LjcgMTEuOC01OC4yIDMyLjgtNzkuMmwyNS4zLTI1LjMgMCAwIDE1LjItMTUuMiAzMi0zMmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC0zMiAzMi0xNS4yIDE1LjJjLTExIDExLTkuMiAyOS4yIDMuNyAzNy44YzkuNyA2LjUgMjIuNyA1LjIgMzEtMy4xbDUxLjEtNTEuMWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zVjIyNCAxNDQgMTA0YzAtMjIuMSAxNy45LTQwIDQwLTQwelwiXX0sTmg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnVnXCIsaWNvbjpbNTEyLDUxMixbXSxcImYxODhcIixcIk0yNTYgMGM1MyAwIDk2IDQzIDk2IDk2djMuNmMwIDE1LjctMTIuNyAyOC40LTI4LjQgMjguNEgxODguNGMtMTUuNyAwLTI4LjQtMTIuNy0yOC40LTI4LjRWOTZjMC01MyA0My05NiA5Ni05NnpNNDEuNCAxMDUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw2NCA2NGMuNyAuNyAxLjMgMS40IDEuOSAyLjFjMTQuMi03LjMgMzAuNC0xMS40IDQ3LjUtMTEuNEgzMTJjMTcuMSAwIDMzLjIgNC4xIDQ3LjUgMTEuNGMuNi0uNyAxLjItMS40IDEuOS0yLjFsNjQtNjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtNjQgNjRjLS43IC43LTEuNCAxLjMtMi4xIDEuOWM2LjIgMTIgMTAuMSAyNS4zIDExLjEgMzkuNUg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDE2YzAgMjQuNi01LjUgNDcuOC0xNS40IDY4LjZjMi4yIDEuMyA0LjIgMi45IDYgNC44bDY0IDY0YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC02My4xLTYzLjFjLTI0LjUgMjEuOC01NS44IDM2LjItOTAuMyAzOS42VjI0MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNlY0NzkuMmMtMzQuNS0zLjQtNjUuOC0xNy44LTkwLjMtMzkuNkw4Ni42IDUwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w2NC02NGMxLjktMS45IDMuOS0zLjQgNi00LjhDMTAxLjUgMzY3LjggOTYgMzQ0LjYgOTYgMzIwSDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDk2LjNjMS4xLTE0LjEgNS0yNy41IDExLjEtMzkuNWMtLjctLjYtMS40LTEuMi0yLjEtMS45bC02NC02NGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjN6XCJdfSxQOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjcmVkaXQtY2FyZFwiLGljb246WzU3Niw1MTIsWzEyODE3OSw2MjA4MyxcImNyZWRpdC1jYXJkLWFsdFwiXSxcImYwOWRcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2djMySDU3NlY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNNTc2IDIyNEgwVjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMjI0ek0xMTIgMzUyaDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMTEyIDE2YzAtOC44IDcuMi0xNiAxNi0xNkgzNjhjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMjQwYy04LjggMC0xNi03LjItMTYtMTZ6XCJdfSx3aD1QOCxGOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYXJcIixpY29uOls1MTIsNTEyLFsxMjg2NjQsXCJhdXRvbW9iaWxlXCJdLFwiZjFiOVwiLFwiTTEzNS4yIDExNy40TDEwOS4xIDE5Mkg0MDIuOWwtMjYuMS03NC42QzM3Mi4zIDEwNC42IDM2MC4yIDk2IDM0Ni42IDk2SDE2NS40Yy0xMy42IDAtMjUuNyA4LjYtMzAuMiAyMS40ek0zOS42IDE5Ni44TDc0LjggOTYuM0M4OC4zIDU3LjggMTI0LjYgMzIgMTY1LjQgMzJIMzQ2LjZjNDAuOCAwIDc3LjEgMjUuOCA5MC42IDY0LjNsMzUuMiAxMDAuNWMyMy4yIDkuNiAzOS42IDMyLjUgMzkuNiA1OS4yVjQwMHY0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkg0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjQwMEg5NnY0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWNDAwIDI1NmMwLTI2LjcgMTYuNC00OS42IDM5LjYtNTkuMnpNMTI4IDI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6bTI4OCAzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyelwiXX0sa2g9RjgsYmg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZC1ob2xkaW5nLWhhbmRcIixpY29uOls1NzYsNTEyLFtdLFwiZTRmN1wiLFwiTTcuOCAyMDcuN2MtMTMuMS0xNy44LTkuMy00Mi44IDguNS01NS45TDE0Mi45IDU4LjVDMTY2LjIgNDEuMyAxOTQuNSAzMiAyMjMuNSAzMkgzODQgNTQ0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDUwNy4ybC00NC45IDM2Yy0yMi43IDE4LjItNTAuOSAyOC04MCAyOEgzMDQgMjg4IDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg2NCAxNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgxODMuNEw2My43IDIxNi4yYy0xNy44IDEzLjEtNDIuOCA5LjMtNTUuOS04LjV6TTM4Mi40IDE2MGwwIDAgLjkgMGMtLjMgMC0uNiAwLS45IDB6TTU2OC4yIDMwNC4zYzEzLjEgMTcuOCA5LjMgNDIuOC04LjUgNTUuOUw0MzMuMSA0NTMuNWMtMjMuNCAxNy4yLTUxLjYgMjYuNS04MC43IDI2LjVIMTkyIDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzODRjMC0xNy43IDE0LjMtMzIgMzItMzJINjguOGw0NC45LTM2YzIyLjctMTguMiA1MC45LTI4IDgwLTI4SDI3MmgxNiA2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyODggMjcyYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDM5Mi42bDExOS43LTg4LjJjMTcuOC0xMy4xIDQyLjgtOS4zIDU1LjkgOC41ek0xOTMuNiAzNTJsMCAwLS45IDBjLjMgMCAuNiAwIC45IDB6XCJdfSxEOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib29rLW9wZW4tcmVhZGVyXCIsaWNvbjpbNTEyLDUxMixbXCJib29rLXJlYWRlclwiXSxcImY1ZGFcIixcIk0zNTIgOTZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZzNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZ6TTI0MCAyNDhWNTEybC00OC40LTI0LjJjLTIwLjktMTAuNC00My41LTE3LTY2LjgtMTkuM2wtOTYtOS42QzEyLjUgNDU3LjIgMCA0NDMuNSAwIDQyN1YyMjRjMC0xNy43IDE0LjMtMzIgMzItMzJINjIuM2M2My42IDAgMTI1LjYgMTkuNiAxNzcuNyA1NnptMzIgMjY0VjI0OGM1Mi4xLTM2LjQgMTE0LjEtNTYgMTc3LjctNTZINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQyN2MwIDE2LjQtMTIuNSAzMC4yLTI4LjggMzEuOGwtOTYgOS42Yy0yMy4yIDIuMy00NS45IDguOS02Ni44IDE5LjNMMjcyIDUxMnpcIl19LEFoPUQ4LEJoPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1vdW50YWluLXN1blwiLGljb246WzY0MCw1MTIsW10sXCJlNTJmXCIsXCJNNTYwIDE2MGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHMzNS44IDgwIDgwIDgwek01NS45IDUxMkgzODEuMWg3NUg1NzguOWMzMy44IDAgNjEuMS0yNy40IDYxLjEtNjEuMWMwLTExLjItMy4xLTIyLjItOC45LTMxLjhsLTEzMi0yMTYuM0M0OTUgMTk2LjEgNDg3LjggMTkyIDQ4MCAxOTJzLTE1IDQuMS0xOS4xIDEwLjdsLTQ4LjIgNzlMMjg2LjggODFjLTYuNi0xMC42LTE4LjMtMTctMzAuOC0xN3MtMjQuMSA2LjQtMzAuOCAxN0w4LjYgNDI2LjRDMyA0MzUuMyAwIDQ0NS42IDAgNDU2LjFDMCA0ODcgMjUgNTEyIDU1LjkgNTEyelwiXX0sVGg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3dzLWxlZnQtcmlnaHQtdG8tbGluZVwiLGljb246WzY0MCw1MTIsW10sXCJlNGJhXCIsXCJNMzIgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWOTZDMCA3OC4zIDE0LjMgNjQgMzIgNjR6bTIxNC42IDczLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNMMjA1LjMgMjI0bDIyOS41IDAtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC05NiA5NmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMNDM0LjcgMjg4bC0yMjkuNSAwIDQxLjQgNDEuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwek02NDAgOTZWNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdfSx5aD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkaWNlLWQyMFwiLGljb246WzUxMiw1MTIsW10sXCJmNmNmXCIsXCJNNjQuNyAxMjUuOGw1My4yIDMxLjljNy44IDQuNyAxNy44IDIgMjIuMi01LjlMMjE3LjYgMTIuMWMzLTUuNC0uOS0xMi4xLTcuMS0xMi4xYy0xLjYgMC0zLjIgLjUtNC42IDEuNEw2My45IDk4LjhjLTkuNiA2LjYtOS4yIDIwLjkgLjggMjYuOXpNMzIgMTcxLjdWMjk1LjNjMCA4IDEwLjQgMTEgMTQuNyA0LjRsNjAtOTJjNS03LjYgMi42LTE3LjgtNS4yLTIyLjVMNTYuMiAxNThDNDUuNiAxNTEuNiAzMiAxNTkuMyAzMiAxNzEuN3pNMzI2LjQgMTIuMWw3Ny42IDEzOS42YzQuNCA3LjkgMTQuNSAxMC42IDIyLjIgNS45bDUzLjItMzEuOWMxMC02IDEwLjQtMjAuMyAuOC0yNi45TDMzOC4xIDEuNGMtMS40LS45LTMtMS40LTQuNi0xLjRjLTYuMiAwLTEwLjEgNi43LTcuMSAxMi4xek01MTIgMTcxLjdjMC0xMi40LTEzLjYtMjAuMS0yNC4yLTEzLjdsLTQ1LjMgMjcuMmMtNy44IDQuNy0xMC4xIDE0LjktNS4yIDIyLjVsNjAgOTJjNC4zIDYuNyAxNC43IDMuNiAxNC43LTQuNFYxNzEuN3ptLTQ5LjMgMjQ2TDMwMi4xIDQzNi42Yy04LjEgLjktMTQuMSA3LjgtMTQuMSAxNS45djUyLjhjMCAzLjcgMyA2LjggNi44IDYuOGMuOCAwIDEuNi0uMSAyLjQtLjRsMTcyLjctNjRjNi4xLTIuMiAxMC4xLTggMTAuMS0xNC41YzAtOS4zLTguMS0xNi41LTE3LjMtMTUuNHpNMjQ5LjIgNTEyYzMuNyAwIDYuOC0zIDYuOC02LjhWNDUyLjZjMC04LjEtNi4xLTE0LjktMTQuMS0xNS45bC0xNjAuNi0xOWMtOS4yLTEuMS0xNy4zIDYuMS0xNy4zIDE1LjRjMCA2LjUgNCAxMi4zIDEwLjEgMTQuNWwxNzIuNyA2NGMuOCAuMyAxLjYgLjQgMi40IC40ek01Ny43IDM4Mi45bDE3MC45IDIwLjJjNy44IC45IDEzLjQtNy41IDkuNS0xNC4zbC04NS43LTE1MGMtNS45LTEwLjQtMjAuNy0xMC44LTI3LjMtLjhMNDYuMiAzNTguMmMtNi41IDkuOS0uMyAyMy4zIDExLjUgMjQuN3ptNDM5LjYtMjQuOEw0MTguOSAyMzguMWMtNi41LTEwLTIxLjQtOS42LTI3LjMgLjhMMzA2LjIgMzg4LjVjLTMuOSA2LjggMS42IDE1LjIgOS41IDE0LjNsMTcwLjEtMjBjMTEuOC0xLjQgMTgtMTQuNyAxMS41LTI0LjZ6bS0yMTYuOSAxMWw3OC40LTEzNy4yYzYuMS0xMC43LTEuNi0yMy45LTEzLjktMjMuOUgxOTkuMWMtMTIuMyAwLTIwIDEzLjMtMTMuOSAyMy45bDc4LjQgMTM3LjJjMy43IDYuNCAxMyA2LjQgMTYuNyAwek0xOTAuNCAxNzZIMzUzLjZjMTIuMiAwIDE5LjktMTMuMSAxNC0yMy44bC04MC0xNDRjLTIuOC01LjEtOC4yLTguMi0xNC04LjJoLTMuMmMtNS44IDAtMTEuMiAzLjItMTQgOC4ybC04MCAxNDRjLTUuOSAxMC43IDEuOCAyMy44IDE0IDIzLjh6XCJdfSxQaD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0cnVjay1kcm9wbGV0XCIsaWNvbjpbNjQwLDUxMixbXSxcImU1OGNcIixcIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEgzNjhjMjYuNSAwIDQ4IDIxLjUgNDggNDhWOTZoNTAuN2MxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w1ODkuMyAxOTJjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM1YyNTZ2MzIgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINTc2YzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2SDI1NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05Nkg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDh6TTQxNiAyNTZINTQ0VjIzNy4zTDQ2Ni43IDE2MEg0MTZ2OTZ6TTE2MCA0NjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHptMzY4LTQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OHpNMjA4IDI3MmMzOS44IDAgNzItMjkuNiA3Mi02NmMwLTI3LTM5LjQtODIuOS01OS45LTExMC4zYy02LjEtOC4yLTE4LjEtOC4yLTI0LjIgMEMxNzUuNCAxMjMgMTM2IDE3OSAxMzYgMjA2YzAgMzYuNSAzMi4yIDY2IDcyIDY2elwiXX0sRmg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsZS1jaXJjbGUteG1hcmtcIixpY29uOls1NzYsNTEyLFtdLFwiZTVhMVwiLFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDIyNFYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0djM4LjZDMzEwLjEgMjE5LjUgMjU2IDI4Ny40IDI1NiAzNjhjMCA1OS4xIDI5LjEgMTExLjMgNzMuNyAxNDMuM2MtMy4yIC41LTYuNCAuNy05LjcgLjdINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0em0zODQgNjRIMjU2VjBMMzg0IDEyOHptNDggMzg0Yy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NHM2NC41LTE0NCAxNDQtMTQ0czE0NCA2NC41IDE0NCAxNDRzLTY0LjUgMTQ0LTE0NCAxNDR6bTU5LjMtMTgwLjdjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMEw0MzIgMzQ1LjRsLTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw0MDkuNCAzNjhsLTM2LjcgMzYuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwTDQzMiAzOTAuNmwzNi43IDM2LjdjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42TDQ1NC42IDM2OGwzNi43LTM2Ljd6XCJdfSxSOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0ZW1wZXJhdHVyZS1hcnJvdy11cFwiLGljb246WzUxMiw1MTIsW1widGVtcGVyYXR1cmUtdXBcIl0sXCJlMDQwXCIsXCJNOTYgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhWMjc2LjVjMCAxNy4zIDcuMSAzMS45IDE1LjMgNDIuNUMyMTcuOCAzMzIuNiAyMjQgMzQ5LjUgMjI0IDM2OGMwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTE4LjUgNi4yLTM1LjQgMTYuNy00OC45Qzg4LjkgMzA4LjQgOTYgMjkzLjggOTYgMjc2LjVWMTEyek0xNDQgMEM4Mi4xIDAgMzIgNTAuMSAzMiAxMTJWMjc2LjRjMCAuMS0uMSAuMy0uMiAuNmMtLjIgLjYtLjggMS42LTEuNyAyLjhDMTEuMiAzMDQuMiAwIDMzNC44IDAgMzY4YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0czE0NC02NC41IDE0NC0xNDRjMC0zMy4yLTExLjMtNjMuOC0zMC4xLTg4LjFjLS45LTEuMi0xLjUtMi4yLTEuNy0yLjhjLS4xLS4zLS4yLS41LS4yLS42VjExMkMyNTYgNTAuMSAyMDUuOSAwIDE0NCAwem0wIDQxNmMyNi41IDAgNDgtMjEuNSA0OC00OGMwLTIwLjktMTMuNC0zOC43LTMyLTQ1LjNWMTEyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjMyMi43Yy0xOC42IDYuNi0zMiAyNC40LTMyIDQ1LjNjMCAyNi41IDIxLjUgNDggNDggNDh6TTQ0OCAxNjBoMzJjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlzMTYuNiAxOS44IDI5LjYgMTkuOGgzMlY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxNjB6XCJdfSxEaD1SOCxSaD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtZWRhbFwiLGljb246WzUxMiw1MTIsWzEyNzk0MV0sXCJmNWEyXCIsXCJNMTYgMEgxNDRjNS4zIDAgMTAuMyAyLjcgMTMuMyA3LjFsODEuMSAxMjEuNmMtNDkuNSA0LjEtOTQgMjUuNi0xMjcuNiA1OC4zTDIuNyAyNC45Qy0uNiAyMC0uOSAxMy43IDEuOSA4LjVTMTAuMSAwIDE2IDB6TTUwOS4zIDI0LjlMNDAxLjIgMTg3LjFjLTMzLjUtMzIuNy03OC4xLTU0LjItMTI3LjYtNTguM0wzNTQuNyA3LjFjMy00LjUgOC03LjEgMTMuMy03LjFINDk2YzUuOSAwIDExLjMgMy4yIDE0LjEgOC41czIuNSAxMS41LS44IDE2LjR6TTQzMiAzMzZjMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZzLTE3Ni03OC44LTE3Ni0xNzZzNzguOC0xNzYgMTc2LTE3NnMxNzYgNzguOCAxNzYgMTc2ek0yNjQuNCAyNDEuMWMtMy40LTctMTMuMy03LTE2LjggMGwtMjIuNCA0NS40Yy0xLjQgMi44LTQgNC43LTcgNS4xTDE2OCAyOTguOWMtNy43IDEuMS0xMC43IDEwLjUtNS4yIDE2bDM2LjMgMzUuNGMyLjIgMi4yIDMuMiA1LjIgMi43IDguM2wtOC42IDQ5LjljLTEuMyA3LjYgNi43IDEzLjUgMTMuNiA5LjlsNDQuOC0yMy42YzIuNy0xLjQgNi0xLjQgOC43IDBsNDQuOCAyMy42YzYuOSAzLjYgMTQuOS0yLjIgMTMuNi05LjlsLTguNi00OS45Yy0uNS0zIC41LTYuMSAyLjctOC4zbDM2LjMtMzUuNGM1LjYtNS40IDIuNS0xNC44LTUuMi0xNmwtNTAuMS03LjNjLTMtLjQtNS43LTIuNC03LTUuMWwtMjIuNC00NS40elwiXX0sVWg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmVkXCIsaWNvbjpbNjQwLDUxMixbMTI4NzE2XSxcImYyMzZcIixcIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMlYzMjBIMjg4VjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1NDRjNTMgMCA5NiA0MyA5NiA5NlY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDE2SDM1MiAzMjAgNjR2MzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJ6TTE3NiAyODhjLTQ0LjIgMC04MC0zNS44LTgwLTgwczM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHpcIl19LFU4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNxdWFyZS1oXCIsaWNvbjpbNDQ4LDUxMixbXCJoLXNxdWFyZVwiXSxcImYwZmRcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTMzNiAxNTJWMjU2IDM2MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFYyODBIMTYwbDAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0yMDhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY4MEgyODhWMTUyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6XCJdfSxxaD1VOCxHaD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwb2RjYXN0XCIsaWNvbjpbNDQ4LDUxMixbXSxcImYyY2VcIixcIk0zMTkuNCAzNzJjNDguNS0zMS4zIDgwLjYtODUuOSA4MC42LTE0OGMwLTk3LjItNzguOC0xNzYtMTc2LTE3NlM0OCAxMjYuOCA0OCAyMjRjMCA2Mi4xIDMyLjEgMTE2LjYgODAuNiAxNDhjMS4yIDE3LjMgNCAzOCA3LjIgNTcuMWwuMiAxQzU2IDM5NS44IDAgMzE2LjUgMCAyMjRDMCAxMDAuMyAxMDAuMyAwIDIyNCAwUzQ0OCAxMDAuMyA0NDggMjI0YzAgOTIuNS01NiAxNzEuOS0xMzYgMjA2LjFsLjItMS4xYzMuMS0xOS4yIDYtMzkuOCA3LjItNTd6bS0yLjMtMzguMWMtMS42LTUuNy0zLjktMTEuMS03LTE2LjJjLTUuOC05LjctMTMuNS0xNy0yMS45LTIyLjRjMTkuNS0xNy42IDMxLjgtNDMgMzEuOC03MS4zYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2YzAgMjguMyAxMi4zIDUzLjggMzEuOCA3MS4zYy04LjQgNS40LTE2LjEgMTIuNy0yMS45IDIyLjRjLTMuMSA1LjEtNS40IDEwLjUtNyAxNi4yQzk5LjggMzA3LjUgODAgMjY4IDgwIDIyNGMwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NHMxNDQgNjQuNSAxNDQgMTQ0YzAgNDQtMTkuOCA4My41LTUwLjkgMTA5Ljl6TTIyNCAzMTJjMzIuOSAwIDY0IDguNiA2NCA0My44YzAgMzMtMTIuOSAxMDQuMS0yMC42IDEzMi45Yy01LjEgMTktMjQuNSAyMy40LTQzLjQgMjMuNHMtMzguMi00LjQtNDMuNC0yMy40Yy03LjgtMjguNS0yMC42LTk5LjctMjAuNi0xMzIuOGMwLTM1LjEgMzEuMS00My44IDY0LTQzLjh6bTAtMzJjLTMwLjkgMC01Ni0yNS4xLTU2LTU2czI1LjEtNTYgNTYtNTZzNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1NnpcIl19LGg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGVtcGVyYXR1cmUtZnVsbFwiLGljb246WzMyMCw1MTIsW1widGVtcGVyYXR1cmUtNFwiLFwidGhlcm1vbWV0ZXItNFwiLFwidGhlcm1vbWV0ZXItZnVsbFwiXSxcImYyYzdcIixcIk0xNjAgNjRjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjI3Ni41YzAgMTcuMy03LjEgMzEuOS0xNS4zIDQyLjVDODYuMiAzMzIuNiA4MCAzNDkuNSA4MCAzNjhjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTE4LjUtNi4yLTM1LjQtMTYuNy00OC45Yy04LjItMTAuNi0xNS4zLTI1LjItMTUuMy00Mi41VjExMmMwLTI2LjUtMjEuNS00OC00OC00OHpNNDggMTEyQzQ4IDUwLjIgOTguMSAwIDE2MCAwczExMiA1MC4xIDExMiAxMTJWMjc2LjVjMCAuMSAuMSAuMyAuMiAuNmMuMiAuNiAuOCAxLjYgMS43IDIuOGMxOC45IDI0LjQgMzAuMSA1NSAzMC4xIDg4LjFjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTMTYgNDQ3LjUgMTYgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZWMTEyek0yMDggMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM1YxMTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNlYzMjIuN2MxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjN6XCJdfSxXaD1oLEVoPWgsSWg9aCxPaD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiZWxsXCIsaWNvbjpbNDQ4LDUxMixbMTI4Mjc2LDYxNjAyXSxcImYwZjNcIixcIk0yMjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNTEuMkMxMTkgNjYgNjQgMTMwLjYgNjQgMjA4djE4LjhjMCA0Ny0xNy4zIDkyLjQtNDguNSAxMjcuNmwtNy40IDguM2MtOC40IDkuNC0xMC40IDIyLjktNS4zIDM0LjRTMTkuNCA0MTYgMzIgNDE2SDQxNmMxMi42IDAgMjQtNy40IDI5LjItMTguOXMzLjEtMjUtNS4zLTM0LjRsLTcuNC04LjNDNDAxLjMgMzE5LjIgMzg0IDI3My45IDM4NCAyMjYuOFYyMDhjMC03Ny40LTU1LTE0Mi0xMjgtMTU2LjhWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6bTQ1LjMgNDkzLjNjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0gyMjQgMTYwYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zczI4LjMgMTguNyA0NS4zIDE4LjdzMzMuMy02LjcgNDUuMy0xOC43elwiXX0sWGg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3VwZXJzY3JpcHRcIixpY29uOls1MTIsNTEyLFtdLFwiZjEyYlwiLFwiTTQ4MCAzMmMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZjLTE1LjggNy45LTIyLjIgMjcuMS0xNC4zIDQyLjlDMzkzIDczLjUgNDA0LjMgODAgNDE2IDgwdjgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDMyIDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyVjMyek0zMiA2NEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJINDcuM2w4OS42IDEyOEw0Ny4zIDM4NEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NGMxMC40IDAgMjAuMi01LjEgMjYuMi0xMy42TDE3NiAzMTEuOGw4NS44IDEyMi42YzYgOC42IDE1LjggMTMuNiAyNi4yIDEzLjZoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzA0LjdMMjE1LjEgMjU2bDg5LjYtMTI4SDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgyODhjLTEwLjQgMC0yMC4yIDUuMS0yNi4yIDEzLjZMMTc2IDIwMC4yIDkwLjIgNzcuNkM4NC4yIDY5LjEgNzQuNCA2NCA2NCA2NEgzMnpcIl19LFFoPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBsdWctY2lyY2xlLXhtYXJrXCIsaWNvbjpbNTc2LDUxMixbXSxcImU1NjBcIixcIk05NiAwQzc4LjMgMCA2NCAxNC4zIDY0IDMydjk2aDY0VjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yODggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnYzMmMwIDc3LjQgNTUgMTQyIDEyOCAxNTYuOFY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0MTIuOGMxMi4zLTIuNSAyNC4xLTYuNCAzNS4xLTExLjVjLTIuMS0xMC44LTMuMS0yMS45LTMuMS0zMy4zYzAtODAuMyA1My44LTE0OCAxMjcuMy0xNjkuMmMuNS0yLjIgLjctNC41IC43LTYuOGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzMnpNNDMyIDUxMmM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NHMtMTQ0IDY0LjUtMTQ0IDE0NHM2NC41IDE0NCAxNDQgMTQ0em01OS4zLTE4MC43TDQ1NC42IDM2OGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMEw0MzIgMzkwLjZsLTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNkw0MDkuNCAzNjhsLTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDQzMiAzNDUuNGwzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXX0sS2g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3Rhci1vZi1saWZlXCIsaWNvbjpbNTEyLDUxMixbXSxcImY2MjFcIixcIk0yMDggMzJjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTcyLjlsMTIyLTcwLjRjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43bDE2IDI3LjdjOC44IDE1LjMgMy42IDM0LjktMTEuNyA0My43TDM1MiAyNTZsMTIyIDcwLjRjMTUuMyA4LjggMjAuNSAyOC40IDExLjcgNDMuN2wtMTYgMjcuN2MtOC44IDE1LjMtMjguNCAyMC42LTQzLjcgMTEuN0wzMDQgMzM5LjFWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDI0MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzM5LjFMODYgNDA5LjZjLTE1LjMgOC44LTM0LjkgMy42LTQzLjctMTEuN2wtMTYtMjcuN2MtOC44LTE1LjMtMy42LTM0LjkgMTEuNy00My43TDE2MCAyNTYgMzggMTg1LjZjLTE1LjMtOC44LTIwLjUtMjguNC0xMS43LTQzLjdsMTYtMjcuN0M1MS4xIDk4LjggNzAuNyA5My42IDg2IDEwMi40bDEyMiA3MC40VjMyelwiXX0samg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGhvbmUtc2xhc2hcIixpY29uOls2NDAsNTEyLFtdLFwiZjNkZFwiLFwiTTYwMS4yIDUuMWMxMC40LTguMiAyNS41LTYuMyAzMy43IDQuMXM2LjMgMjUuNS00LjEgMzMuN2wtNTkyIDQ2NGMtMTAuNCA4LjItMjUuNSA2LjMtMzMuNy00LjFzLTYuMy0yNS41IDQuMS0zMy43bDE1NS42LTEyMkMxMDEuOCAyNzAgNjQgMTcxLjQgNjQgNjRjMC0xOCAxMi4xLTMzLjggMjkuNS0zOC42bDg4LTI0YzE5LjQtNS4zIDM5LjcgNC42IDQ3LjQgMjMuMmw0MCA5NmM2LjggMTYuMyAyLjEgMzUuMi0xMS42IDQ2LjNMMjA4IDIwNy4zYzEyIDI1LjUgMjcuMiA0OS4yIDQ1IDcwLjdMNjAxLjIgNS4xek0zMjUuNyAzNDMuN2MxMy43IDkuMSAyOCAxNy4zIDQzIDI0LjNMNDA5IDMxOC43YzExLjItMTMuNyAzMC0xOC40IDQ2LjMtMTEuNmw5NiA0MGMxOC42IDcuNyAyOC41IDI4IDIzLjIgNDcuNGwtMjQgODhDNTQ1LjggNDk5LjkgNTMwIDUxMiA1MTIgNTEyYy0xMDQuOSAwLTIwMS4zLTM2LTI3Ny43LTk2LjRsOTEuMy03MnpcIl19LEpoPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBhaW50LXJvbGxlclwiLGljb246WzUxMiw1MTIsW10sXCJmNWFhXCIsXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMzUyYzM1LjMgMCA2NCAyOC43IDY0IDY0djY0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHpNMTYwIDM1MmMwLTE3LjcgMTQuMy0zMiAzMi0zMlYzMDRjMC00NC4yIDM1LjgtODAgODAtODBINDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE2MCA2OS41YzM3LjMgMTMuMiA2NCA0OC43IDY0IDkwLjV2MzJjMCA1My00MyA5Ni05NiA5NkgyNzJjLTguOCAwLTE2IDcuMi0xNiAxNnYxNmMxNy43IDAgMzIgMTQuMyAzMiAzMlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJIMTkyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzNTJ6XCJdfSxxOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW5kc2hha2UtYW5nbGVcIixpY29uOls2NDAsNTEyLFtcImhhbmRzLWhlbHBpbmdcIl0sXCJmNGM0XCIsXCJNNTQzLjkgMjUxLjRjMC0xLjEgLjEtMi4yIC4xLTMuNGMwLTQ4LjYtMzkuNC04OC04OC04OGwtNDAgMEgzMjBsLTE2IDAgMCAwdjE2IDcyYzAgMjIuMS0xNy45IDQwLTQwIDQwcy00MC0xNy45LTQwLTQwVjEyOGguNGM0LTM2IDM0LjUtNjQgNzEuNi02NEg0MDhjMi44IDAgNS42IC4yIDguMyAuNWw0MC4xLTQwLjFjMjEuOS0yMS45IDU3LjMtMjEuOSA3OS4yIDBsNzguMSA3OC4xYzIxLjkgMjEuOSAyMS45IDU3LjMgMCA3OS4ybC02OS43IDY5Ljd6TTE5MiAxMjhWMjQ4YzAgMzkuOCAzMi4yIDcyIDcyIDcyczcyLTMyLjIgNzItNzJWMTkyaDgwbDQwIDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZjMCAyNy4yLTE5LjQgNDkuOS00NS4yIDU1YzguMiA4LjYgMTMuMiAyMC4yIDEzLjIgMzNjMCAyNi41LTIxLjUgNDgtNDggNDhoLTIuN2MxLjggNSAyLjcgMTAuNCAyLjcgMTZjMCAyNi41LTIxLjUgNDgtNDggNDhIMjI0Yy0uOSAwLTEuOCAwLTIuNy0uMWwtMzcuNyAzNy43Yy0yMS45IDIxLjktNTcuMyAyMS45LTc5LjIgMEwyNi4zIDQwNy42Yy0yMS45LTIxLjktMjEuOS01Ny4zIDAtNzkuMkw5NiAyNTguN1YyMjRjMC01MyA0My05NiA5Ni05NnpcIl19LFpoPXE4LEc4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxvY2F0aW9uLWRvdFwiLGljb246WzM4NCw1MTIsW1wibWFwLW1hcmtlci1hbHRcIl0sXCJmM2M1XCIsXCJNMjE1LjcgNDk5LjJDMjY3IDQzNSAzODQgMjc5LjQgMzg0IDE5MkMzODQgODYgMjk4IDAgMTkyIDBTMCA4NiAwIDE5MmMwIDg3LjQgMTE3IDI0MyAxNjguMyAzMDcuMmMxMi4zIDE1LjMgMzUuMSAxNS4zIDQ3LjQgMHpNMTkyIDI1NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0elwiXX0sWWg9RzgsX2g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsZVwiLGljb246WzM4NCw1MTIsWzEyODE5NiwxMjg0NTksNjE0NjJdLFwiZjE1YlwiLFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDIyNFYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4elwiXX0sJGg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ3JlYXRlci10aGFuXCIsaWNvbjpbMzg0LDUxMixbNjI3NjldLFwiM2VcIixcIk0zLjQgODEuN2MtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOUwyODAuNSAyNTYgMTcuNyAzODcuNEMxLjkgMzk1LjMtNC41IDQxNC41IDMuNCA0MzAuM3MyNy4xIDIyLjIgNDIuOSAxNC4zbDMyMC0xNjBjMTAuOC01LjQgMTcuNy0xNi41IDE3LjctMjguNnMtNi44LTIzLjItMTcuNy0yOC42bC0zMjAtMTYwYy0xNS44LTcuOS0zNS0xLjUtNDIuOSAxNC4zelwiXX0sVzg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLXN3aW1taW5nXCIsaWNvbjpbNTc2LDUxMixbMTI3OTQ2LFwic3dpbW1lclwiXSxcImY1YzRcIixcIk0zMDkuNSAxNzguNEw0NDcuOSAyOTcuMWMtMS42IC45LTMuMiAyLTQuOCAzYy0xOCAxMi40LTQwLjEgMjAuMy01OS4yIDIwLjNjLTE5LjYgMC00MC44LTcuNy01OS4yLTIwLjNjLTIyLjEtMTUuNS01MS42LTE1LjUtNzMuNyAwYy0xNy4xIDExLjgtMzggMjAuMy01OS4yIDIwLjNjLTEwLjEgMC0yMS4xLTIuMi0zMS45LTYuMkMxNjMuMSAxOTMuMiAyNjIuMiA5NiAzODQgOTZoNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzg0Yy0yNi45IDAtNTIuMyA2LjYtNzQuNSAxOC40ek0zMiAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NHpNMzA2LjUgMzI1LjlDMzI5IDM0MS40IDM1Ni41IDM1MiAzODQgMzUyYzI2LjkgMCA1NS40LTEwLjggNzcuNC0yNi4xbDAgMGMxMS45LTguNSAyOC4xLTcuOCAzOS4yIDEuN2MxNC40IDExLjkgMzIuNSAyMSA1MC42IDI1LjJjMTcuMiA0IDI3LjkgMjEuMiAyMy45IDM4LjRzLTIxLjIgMjcuOS0zOC40IDIzLjljLTI0LjUtNS43LTQ0LjktMTYuNS01OC4yLTI1QzQ0OS41IDQwNS43IDQxNyA0MTYgMzg0IDQxNmMtMzEuOSAwLTYwLjYtOS45LTgwLjQtMTguOWMtNS44LTIuNy0xMS4xLTUuMy0xNS42LTcuN2MtNC41IDIuNC05LjcgNS4xLTE1LjYgNy43Yy0xOS44IDktNDguNSAxOC45LTgwLjQgMTguOWMtMzMgMC02NS41LTEwLjMtOTQuNS0yNS44Yy0xMy40IDguNC0zMy43IDE5LjMtNTguMiAyNWMtMTcuMiA0LTM0LjQtNi43LTM4LjQtMjMuOXM2LjctMzQuNCAyMy45LTM4LjRjMTguMS00LjIgMzYuMi0xMy4zIDUwLjYtMjUuMmMxMS4xLTkuNCAyNy4zLTEwLjEgMzkuMi0xLjdsMCAwQzEzNi43IDM0MS4yIDE2NS4xIDM1MiAxOTIgMzUyYzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwelwiXX0sY0M9VzgsYUM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctZG93blwiLGljb246WzM4NCw1MTIsWzg1OTVdLFwiZjA2M1wiLFwiTTE2OS40IDQ3MC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDM3MC44IDIyNCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMwNi43TDU0LjYgMjY1LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjB6XCJdfSxFOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkcm9wbGV0XCIsaWNvbjpbMzg0LDUxMixbMTI4MTY3LFwidGludFwiXSxcImYwNDNcIixcIk0xOTIgNDk2Yzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2YzAtNzQuMS0xMDIuMy0yMzAuNi0xNTAuOS0zMDAuN2MtMTIuMy0xNy43LTM3LjgtMTcuNy01MC4xIDBDMTE4LjMgODkuNCAxNiAyNDUuOSAxNiAzMjBjMCA5Ny4yIDc4LjggMTc2IDE3NiAxNzZ6TTExMiAzMjBjMCA0NC4yIDM1LjggODAgODAgODBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZjLTYxLjkgMC0xMTItNTAuMS0xMTItMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6XCJdfSxzQz1FOCxlQz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJlcmFzZXJcIixpY29uOls1NzYsNTEyLFtdLFwiZjEyZFwiLFwiTTI5MC43IDU3LjRMNTcuNCAyOTAuN2MtMjUgMjUtMjUgNjUuNSAwIDkwLjVsODAgODBjMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0gyODhoOS40SDUxMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzODcuOUw1MTguNiAyODUuM2MyNS0yNSAyNS02NS41IDAtOTAuNUwzODEuMyA1Ny40Yy0yNS0yNS02NS41LTI1LTkwLjUgMHpNMjk3LjQgNDE2SDI4OGwtMTA1LjQgMC04MC04MEwyMjcuMyAyMTEuMyAzNjQuNyAzNDguNyAyOTcuNCA0MTZ6XCJdfSxDPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImVhcnRoLWFtZXJpY2FzXCIsaWNvbjpbNTEyLDUxMixbMTI3NzU4LFwiZWFydGhcIixcImVhcnRoLWFtZXJpY2FcIixcImdsb2JlLWFtZXJpY2FzXCJdLFwiZjU3ZFwiLFwiTTU3LjcgMTkzbDkuNCAxNi40YzguMyAxNC41IDIxLjkgMjUuMiAzOCAyOS44TDE2MyAyNTUuN2MxNy4yIDQuOSAyOSAyMC42IDI5IDM4LjV2MzkuOWMwIDExIDYuMiAyMSAxNiAyNS45czE2IDE0LjkgMTYgMjUuOXYzOWMwIDE1LjYgMTQuOSAyNi45IDI5LjkgMjIuNmMxNi4xLTQuNiAyOC42LTE3LjUgMzIuNy0zMy44bDIuOC0xMS4yYzQuMi0xNi45IDE1LjItMzEuNCAzMC4zLTQwbDguMS00LjZjMTUtOC41IDI0LjItMjQuNSAyNC4yLTQxLjd2LTguM2MwLTEyLjctNS4xLTI0LjktMTQuMS0zMy45bC0zLjktMy45Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUgyNTdjLTExLjEgMC0yMi4xLTIuOS0zMS44LTguNGwtMzQuNS0xOS43Yy00LjMtMi41LTcuNi02LjUtOS4yLTExLjJjLTMuMi05LjYgMS4xLTIwIDEwLjItMjQuNWw1LjktM2M2LjYtMy4zIDE0LjMtMy45IDIxLjMtMS41bDIzLjIgNy43YzguMiAyLjcgMTcuMi0uNCAyMS45LTcuNWM0LjctNyA0LjItMTYuMy0xLjItMjIuOGwtMTMuNi0xNi4zYy0xMC0xMi05LjktMjkuNSAuMy00MS4zbDE1LjctMTguM2M4LjgtMTAuMyAxMC4yLTI1IDMuNS0zNi43bC0yLjQtNC4yYy0zLjUtLjItNi45LS4zLTEwLjQtLjNDMTYzLjEgNDggODQuNCAxMDguOSA1Ny43IDE5M3pNNDY0IDI1NmMwLTM2LjgtOS42LTcxLjQtMjYuNC0xMDEuNUw0MTIgMTY0LjhjLTE1LjcgNi4zLTIzLjggMjMuOC0xOC41IDM5LjhsMTYuOSA1MC43YzMuNSAxMC40IDEyIDE4LjMgMjIuNiAyMC45bDI5LjEgNy4zYzEuMi05IDEuOC0xOC4yIDEuOC0yNy41em00OCAwYzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2elwiXX0sZkM9QyxyQz1DLGxDPUMsaUM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLWJ1cnN0XCIsaWNvbjpbNjQwLDUxMixbXSxcImU1M2JcIixcIk00ODAgOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHptLTggMzg0VjM1MmgxNlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyNTYuOWwyOC42IDQ3LjVjOS4xIDE1LjEgMjguOCAyMCA0My45IDEwLjlzMjAtMjguOCAxMC45LTQzLjlsLTU4LjMtOTdjLTE3LjQtMjguOS00OC42LTQ2LjYtODIuMy00Ni42SDQ2NS4xYy0zMy43IDAtNjQuOSAxNy43LTgyLjMgNDYuNmwtNTguMyA5N2MtOS4xIDE1LjEtNC4yIDM0LjggMTAuOSA0My45czM0LjggNC4yIDQzLjktMTAuOUw0MDggMjU2LjlWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTE5MC45IDE4LjFDMTg4LjQgMTIgMTgyLjYgOCAxNzYgOHMtMTIuNCA0LTE0LjkgMTAuMWwtMjkuNCA3NEw1NS42IDY4LjljLTYuMy0xLjktMTMuMSAuMi0xNy4yIDUuM3MtNC42IDEyLjItMS40IDE3LjlsMzkuNSA2OS4xTDEwLjkgMjA2LjRjLTUuNCAzLjctOCAxMC4zLTYuNSAxNi43czYuNyAxMS4yIDEzLjEgMTIuMmw3OC43IDEyLjJMOTAuNiAzMjdjLS41IDYuNSAzLjEgMTIuNyA5IDE1LjVzMTIuOSAxLjggMTcuOC0yLjZMMTc2IDI4Ni4xbDU4LjYgNTMuOWM0LjggNC40IDExLjkgNS41IDE3LjggMi42czkuNS05IDktMTUuNWwtNS42LTc5LjQgNTAuNS03LjggMjQuNC00MC41LTU1LjItMzhMMzE1IDkyLjJjMy4zLTUuNyAyLjctMTIuOC0xLjQtMTcuOXMtMTAuOS03LjItMTcuMi01LjNMMjIwLjMgOTIuMWwtMjkuNC03NHpcIl19LG9DPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRvdmVcIixpY29uOls1MTIsNTEyLFsxMjgzMzBdLFwiZjRiYVwiLFwiTTE2MC44IDk2LjVjMTQgMTcgMzEgMzAuOSA0OS41IDQyLjJjMjUuOSAxNS44IDUzLjcgMjUuOSA3Ny43IDMxLjZWMTM4LjhDMjY1LjggMTA4LjUgMjUwIDcxLjUgMjQ4LjYgMjhjLS40LTExLjMtNy41LTIxLjUtMTguNC0yNC40Yy03LjYtMi0xNS44LS4yLTIxIDUuOGMtMTMuMyAxNS40LTMyLjcgNDQuNi00OC40IDg3LjJ6TTMyMCAxNDR2MzAuNmwwIDB2MS4zbDAgMCAwIDMyLjFjLTYwLjgtNS4xLTE4NS00My44LTIxOS4zLTE1Ny4yQzk3LjQgNDAgODcuOSAzMiA3Ni42IDMyYy03LjkgMC0xNS4zIDMuOS0xOC44IDExQzQ2LjggNjUuOSAzMiAxMTIuMSAzMiAxNzZjMCAxMTYuOSA4MC4xIDE4MC41IDExOC40IDIwMi44TDExLjggNDE2LjZDNi43IDQxOCAyLjYgNDIxLjggLjkgNDI2LjhzLS44IDEwLjYgMi4zIDE0LjhDMjEuNyA0NjYuMiA3Ny4zIDUxMiAxNjAgNTEyYzMuNiAwIDcuMi0xLjIgMTAtMy41TDI0NS42IDQ0OEgzMjBjODguNCAwIDE2MC03MS42IDE2MC0xNjBWMTI4bDI5LjktNDQuOWMxLjMtMiAyLjEtNC40IDIuMS02LjhjMC02LjgtNS41LTEyLjMtMTIuMy0xMi4zSDQwMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6bTgwIDE2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2elwiXX0sSTg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmF0dGVyeS1lbXB0eVwiLGljb246WzU3Niw1MTIsW1wiYmF0dGVyeS0wXCJdLFwiZjI0NFwiLFwiTTgwIDk2QzM1LjggOTYgMCAxMzEuOCAwIDE3NlYzMzZjMCA0NC4yIDM1LjggODAgODAgODBINDY0YzQ0LjIgMCA4MC0zNS44IDgwLTgwVjMyMGMxNy43IDAgMzItMTQuMyAzMi0zMlYyMjRjMC0xNy43LTE0LjMtMzItMzItMzJWMTc2YzAtNDQuMi0zNS44LTgwLTgwLTgwSDgwek02NCAxNzZjMC04LjggNy4yLTE2IDE2LTE2SDQ2NGM4LjggMCAxNiA3LjIgMTYgMTZWMzM2YzAgOC44LTcuMiAxNi0xNiAxNkg4MGMtOC44IDAtMTYtNy4yLTE2LTE2VjE3NnpcIl19LG5DPUk4LEhDPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNvY2tzXCIsaWNvbjpbNTEyLDUxMixbMTI5NTEwXSxcImY2OTZcIixcIk0xNzUuMiA0NzYuNmMtOS43LTE4LTE1LjItMzguNy0xNS4yLTYwLjZjMC00MC4zIDE5LTc4LjIgNTEuMi0xMDIuNGw2NC00OGM4LjEtNiAxMi44LTE1LjUgMTIuOC0yNS42Vjk2SDEyOFYyNDBjMCAyMC4xLTkuNSAzOS4xLTI1LjYgNTEuMmwtNjQgNDhDMTQuMiAzNTcuMyAwIDM4NS44IDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZjMjAuOCAwIDQxLTYuNyA1Ny42LTE5LjJsMjEuNi0xNi4yek0xMjggNjRIMjg4VjQ4YzAtMTQuNSAzLjktMjguMiAxMC43LTM5LjlDMjkxIDMgMjgxLjkgMCAyNzIgMEgxNzZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4VjY0ek0zMjAgOTZWMjQwYzAgMjAuMS05LjUgMzkuMS0yNS42IDUxLjJsLTY0IDQ4QzIwNi4yIDM1Ny4zIDE5MiAzODUuOCAxOTIgNDE2YzAgNTMgNDMgOTYgOTYgOTZjMjAuOCAwIDQxLTYuNyA1Ny42LTE5LjJsMTE1LjItODYuNEM0OTMgMzgyLjIgNTEyIDM0NC4zIDUxMiAzMDRWOTZIMzIwek01MTIgNjRWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzY4Yy0yNi41IDAtNDggMjEuNS00OCA0OFY2NEg1MTJ6XCJdfSx6Qz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJpbmJveFwiLGljb246WzUxMiw1MTIsW10sXCJmMDFjXCIsXCJNMTIxIDMyQzkxLjYgMzIgNjYgNTIgNTguOSA4MC41TDEuOSAzMDguNEMuNiAzMTMuNSAwIDMxOC43IDAgMzIzLjlWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYzMjMuOWMwLTUuMi0uNi0xMC40LTEuOS0xNS41bC01Ny0yMjcuOUM0NDYgNTIgNDIwLjQgMzIgMzkxIDMySDEyMXptMCA2NEgzOTFsNDggMTkySDM4Ny44Yy0xMi4xIDAtMjMuMiA2LjgtMjguNiAxNy43bC0xNC4zIDI4LjZjLTUuNCAxMC44LTE2LjUgMTcuNy0yOC42IDE3LjdIMTk1LjhjLTEyLjEgMC0yMy4yLTYuOC0yOC42LTE3LjdsLTE0LjMtMjguNmMtNS40LTEwLjgtMTYuNS0xNy43LTI4LjYtMTcuN0g3M0wxMjEgOTZ6XCJdfSxWQz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzZWN0aW9uXCIsaWNvbjpbMzIwLDUxMixbXSxcImU0NDdcIixcIk05Ni45IDk2YzIuMS0xMS42IDguNy0xOS44IDIxLjEtMjUuNGMxMy44LTYuMiAzNC44LTguOSA2MS4yLTQuNWM4LjggMS40IDM2LjEgNy4xIDQ0LjEgOS4zYzE3IDQuOCAzNC43LTUuMSAzOS41LTIyLjJzLTUuMS0zNC43LTIyLjItMzkuNWMtMTEuMS0zLjEtNDEtOS4yLTUwLjktMTAuOGMtMzQuNy01LjctNjkuNC0zLjYtOTggOS4zYy0yOS44IDEzLjUtNTIuMiAzOC42LTU4IDc0LjFjLS4xIC41LS4yIDEuMS0uMiAxLjZjLTIuMiAxOS43IC4zIDM3LjkgOC4xIDU0LjFjNy43IDE2LjEgMTkuNCAyOCAzMiAzNi45Yy42IC41IDEuMyAuOSAyIDEuNEM1NC4zIDE5NC4yIDM4LjUgMjE1LjEgMzMuNyAyNDNjLS4xIC42LS4yIDEuMS0uMiAxLjdjLTIuMyAxOS4zIC40IDM3LjEgOC40IDUzYzcuOSAxNS42IDE5LjggMjcgMzIuMyAzNS41YzIyLjQgMTUuMiA1MS45IDI0IDc1LjQgMzFsMCAwIDMuNyAxLjFjMjcuMiA4LjIgNDYuOSAxNC42IDU5LjQgMjMuOGM1LjUgNCA4LjIgNy42IDkuNSAxMC45YzEuMyAzLjIgMi42IDguNiAuOSAxOC4xYy0xLjcgMTAuMS03LjcgMTgtMjAuNyAyMy41Yy0xNCA2LTM1LjQgOC41LTYyIDQuNGMtMTIuOC0yLjEtMzUuMS05LjctNTQuMS0xNi4ybDAgMGMtNC4zLTEuNS04LjUtMi45LTEyLjMtNC4yYy0xNi44LTUuNi0zNC45IDMuNS00MC41IDIwLjNzMy41IDM0LjkgMjAuMyA0MC41YzIuNiAuOCA1LjcgMS45IDkuMiAzLjFjMTguNiA2LjMgNDguNSAxNi42IDY3LjMgMTkuNmwwIDAgLjIgMGMzNC41IDUuNCA2OC44IDMuNCA5Ny4yLTguN2MyOS40LTEyLjYgNTIuNS0zNi41IDU4LjUtNzEuNWMzLjMtMTkuMyAxLjktMzcuNC01LTUzLjljLTYuMy0xNS0xNi40LTI2LjQtMjcuNi0zNS4yYzE2LjUtMTMuOSAyOC41LTMzLjIgMzIuNi01OC4yYzMuMi0xOS44IDEuOS0zOC4zLTQuOC01NS4xYy02LjctMTYuOC0xNy44LTI5LjQtMzAuMi0zOWMtMjIuOC0xNy42LTUzLjYtMjcuNC03Ny43LTM1bC0xLjQtLjVjLTI3LjQtOC43LTQ3LjgtMTUuMy02MS41LTI1Yy02LjEtNC40LTkuNS04LjUtMTEuNC0xMi40Yy0xLjgtMy43LTMuMi05LjMtMi4zLTE4LjV6bTc2LjcgMjA4LjVjLS4yLS4xLS40LS4xLS42LS4ybC0xLjQtLjRjLTI3LjQtOC4yLTQ3LjktMTQuNS02MS43LTIzLjhjLTYuMi00LjItOS4zLTcuOS0xMS0xMS4zYy0xLjUtMy0yLjktNy43LTIuMS0xNS43YzEuOS05LjcgNy45LTE3LjMgMjAuNS0yMi43YzE0LTYgMzUuNC04LjUgNjIuMS00LjNsMTYuNCAyLjZjNi4zIDIuOSAxMS43IDYgMTYuMiA5LjVjNS41IDQuMiA4LjQgOC4yIDEwIDEyLjJjMS42IDQgMi44IDEwLjQgMS4xIDIwLjljLTIuNCAxNC43LTEyLjggMjYuNC0zNy4xIDMxbC0xMi40IDIuM3pcIl19LEo9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ2F1Z2UtaGlnaFwiLGljb246WzUxMiw1MTIsWzYyNDYxLFwidGFjaG9tZXRlci1hbHRcIixcInRhY2hvbWV0ZXItYWx0LWZhc3RcIl0sXCJmNjI1XCIsXCJNNTEyIDI1NmMwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpNMjg4IDk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNMjU2IDQxNmMzNS4zIDAgNjQtMjguNyA2NC02NGMwLTE3LjQtNi45LTMzLjEtMTguMS00NC42TDM2NiAxNjEuN2M1LjMtMTIuMS0uMi0yNi4zLTEyLjMtMzEuNnMtMjYuMyAuMi0zMS42IDEyLjNMMjU3LjkgMjg4Yy0uNiAwLTEuMyAwLTEuOSAwYy0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0ek0xNzYgMTQ0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNOTYgMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTM1Mi0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6XCJdfSxtQz1KLHZDPUosTUM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZW52ZWxvcGUtb3Blbi10ZXh0XCIsaWNvbjpbNTEyLDUxMixbXSxcImY2NThcIixcIk0yMTUuNCA5NkgxNDQgMTA3LjggOTZ2OC44VjE0NHY0MC40IDg5TC4yIDIwMi41YzEuNi0xOC4xIDEwLjktMzQuOSAyNS43LTQ1LjhMNDggMTQwLjNWOTZjMC0yNi41IDIxLjUtNDggNDgtNDhoNzYuNmw0OS45LTM2LjlDMjMyLjIgMy45IDI0My45IDAgMjU2IDBzMjMuOCAzLjkgMzMuNSAxMUwzMzkuNCA0OEg0MTZjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDQuM2wyMi4xIDE2LjRjMTQuOCAxMC45IDI0LjEgMjcuNyAyNS43IDQ1LjhMNDE2IDI3My40di04OVYxNDQgMTA0LjggOTZINDA0LjIgMzY4IDI5Ni42IDIxNS40ek0wIDQ0OFYyNDIuMUwyMTcuNiA0MDMuM2MxMS4xIDguMiAyNC42IDEyLjcgMzguNCAxMi43czI3LjMtNC40IDM4LjQtMTIuN0w1MTIgMjQyLjFWNDQ4djBjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0djB6TTE3NiAxNjBIMzM2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMCA2NEgzMzZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTc2Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXX0sWj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob3NwaXRhbFwiLGljb246WzY0MCw1MTIsWzEyNzk3Myw2MjU4OSxcImhvc3BpdGFsLWFsdFwiLFwiaG9zcGl0YWwtd2lkZVwiXSxcImYwZjhcIixcIk0xOTIgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhINDAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjUxMkgzNjhWNDMyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4djgwSDE5MlY0OHpNNDggOTZIMTYwVjUxMkg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzIwSDgwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDBWMjI0SDgwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDBWMTQ0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em01NDQgMGMyNi41IDAgNDggMjEuNSA0OCA0OHY0OEg1NjBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoODB2NjRINTYwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDgwVjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEg0ODBWOTZINTkyek0zMTIgNjRjLTguOCAwLTE2IDcuMi0xNiAxNnYyNEgyNzJjLTguOCAwLTE2IDcuMi0xNiAxNnYxNmMwIDguOCA3LjIgMTYgMTYgMTZoMjR2MjRjMCA4LjggNy4yIDE2IDE2IDE2aDE2YzguOCAwIDE2LTcuMiAxNi0xNlYxNTJoMjRjOC44IDAgMTYtNy4yIDE2LTE2VjEyMGMwLTguOC03LjItMTYtMTYtMTZIMzQ0VjgwYzAtOC44LTcuMi0xNi0xNi0xNkgzMTJ6XCJdfSx0Qz1aLGhDPVosQ0M9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwid2luZS1ib3R0bGVcIixpY29uOls1MTIsNTEyLFtdLFwiZjcyZlwiLFwiTTM5My40IDkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw2NCA2NGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2MtMTEuOCAxMS44LTMwLjcgMTIuNS00My4yIDEuOWwtOS41IDkuNS00OC44IDQ4LjhjLTkuMiA5LjItMTEuNSAyMi45LTguNiAzNS42YzkuNCA0MC45LTEuOSA4NS42LTMzLjggMTE3LjVMMTk3LjMgNDkzLjNjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC04OC04OGMtMjUtMjUtMjUtNjUuNSAwLTkwLjVMMTgwLjIgMTUzLjNjMzEuOS0zMS45IDc2LjYtNDMuMSAxMTcuNS0zMy44YzEyLjYgMi45IDI2LjQgLjUgMzUuNS04LjZsNDguOC00OC44IDkuNS05LjVjLTEwLjYtMTIuNi0xMC0zMS40IDEuOS00My4yek05OS4zIDM0Ny4zbDY1LjQgNjUuNGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw5Ny40LTk3LjRjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTY1LjQtNjUuNGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMOTkuMyAzMjQuN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZ6XCJdfSxMQz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGVzcy1yb29rXCIsaWNvbjpbMzg0LDUxMixbOTgyMF0sXCJmNDQ3XCIsXCJNMCAyMDQuMlY0OGMwLTguOCA3LjItMTYgMTYtMTZINzJjOC44IDAgMTYgNy4yIDE2IDE2Vjg4YzAgNC40IDMuNiA4IDggOGgzMmM0LjQgMCA4LTMuNiA4LThWNDhjMC04LjggNy4yLTE2IDE2LTE2aDgwYzguOCAwIDE2IDcuMiAxNiAxNlY4OGMwIDQuNCAzLjYgOCA4IDhoMzJjNC40IDAgOC0zLjYgOC04VjQ4YzAtOC44IDcuMi0xNiAxNi0xNmg1NmM4LjggMCAxNiA3LjIgMTYgMTZWMjA0LjJjMCAxMi4xLTYuOCAyMy4yLTE3LjcgMjguNmwtMjguNiAxNC4zYy0xMC44IDUuNC0xNy43IDE2LjUtMTcuNSAyOC42QzMyMi4yIDM2MC43IDMzNiA0MTYgMzM2IDQxNkg0OHMxMy44LTU1LjMgMTUuOC0xNDAuMmMuMy0xMi4xLTYuNi0yMy4yLTE3LjUtMjguNkwxNy43IDIzMi44QzYuOCAyMjcuNCAwIDIxNi4zIDAgMjA0LjJ6TTE3NiAzMjBoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY0OGMwIDguOCA3LjIgMTYgMTYgMTZ6TTMyIDQ0OEgzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdfSxZPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJhcnMtc3RhZ2dlcmVkXCIsaWNvbjpbNTEyLDUxMixbXCJyZW9yZGVyXCIsXCJzdHJlYW1cIl0sXCJmNTUwXCIsXCJNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NEg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJDMTQuMyAxMjggMCAxMTMuNyAwIDk2ek02NCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJINDgwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6XCJdfSxwQz1ZLGRDPVksdUM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZGhhcm1hY2hha3JhXCIsaWNvbjpbNTEyLDUxMixbOTc4NF0sXCJmNjU1XCIsXCJNMzM3LjggMjA1LjdsNDguNi00Mi41YzEzLjggMTkuMyAyMy40IDQxLjkgMjcuNCA2Ni4ybC02NC40IDQuM2MtMi40LTEwLjEtNi40LTE5LjUtMTEuNi0yOHptMTQwLjEgMTkuNWMtNS4zLTM4LjgtMjAuNi03NC41LTQzLjItMTA0LjNsLjgtLjdDNDQ5IDEwOC40IDQ0OS43IDg3LjYgNDM3IDc1cy0zMy40LTEyLTQ1LjIgMS41bC0uNyAuOGMtMjkuOC0yMi42LTY1LjUtMzcuOS0xMDQuMy00My4ybC4xLTEuMWMxLjItMTcuOS0xMy0zMy0zMC45LTMzcy0zMi4xIDE1LjItMzAuOSAzM2wuMSAxLjFjLTM4LjggNS4zLTc0LjUgMjAuNi0xMDQuMyA0My4ybC0uNy0uOEMxMDguNCA2MyA4Ny42IDYyLjMgNzUgNzVzLTEyIDMzLjQgMS41IDQ1LjJsLjggLjdjLTIyLjYgMjkuOC0zNy45IDY1LjUtNDMuMiAxMDQuM2wtMS4xLS4xYy0xNy45LTEuMi0zMyAxMy0zMyAzMC45czE1LjIgMzIuMSAzMyAzMC45bDEuMS0uMWM1LjMgMzguOCAyMC42IDc0LjUgNDMuMiAxMDQuM2wtLjggLjdDNjMgNDAzLjYgNjIuMyA0MjQuNCA3NSA0MzdzMzMuNCAxMiA0NS4yLTEuNWwuNy0uOGMyOS44IDIyLjYgNjUuNSAzNy45IDEwNC4zIDQzLjJsLS4xIDEuMWMtMS4yIDE3LjkgMTMgMzMgMzAuOSAzM3MzMi4xLTE1LjIgMzAuOS0zM2wtLjEtMS4xYzM4LjgtNS4zIDc0LjUtMjAuNiAxMDQuMy00My4ybC43IC44YzExLjggMTMuNSAzMi41IDE0LjIgNDUuMiAxLjVzMTItMzMuNC0xLjUtNDUuMmwtLjgtLjdjMjIuNi0yOS44IDM3LjktNjUuNSA0My4yLTEwNC4zbDEuMSAuMWMxNy45IDEuMiAzMy0xMyAzMy0zMC45cy0xNS4yLTMyLjEtMzMtMzAuOWwtMS4xIC4xek0xNjMuMiAxMjUuNmMxOS4zLTEzLjggNDEuOS0yMy40IDY2LjItMjcuNWw0LjMgNjQuNGMtMTAgMi40LTE5LjUgNi40LTI4IDExLjZsLTQyLjUtNDguNnptLTY1IDEwMy44YzQuMS0yNC40IDEzLjctNDYuOSAyNy41LTY2LjJsNDguNiA0Mi41Yy01LjMgOC41LTkuMiAxOC0xMS42IDI4bC02NC40LTQuM3ptMjcuNSAxMTkuNGMtMTMuOC0xOS4zLTIzLjQtNDEuOS0yNy41LTY2LjJsNjQuNC00LjNjMi40IDEwIDYuNCAxOS41IDExLjYgMjhsLTQ4LjYgNDIuNXptMTAzLjggNjVjLTI0LjQtNC4xLTQ2LjktMTMuNy02Ni4yLTI3LjRsNDIuNS00OC42YzguNSA1LjMgMTggOS4yIDI4IDExLjZsLTQuMyA2NC40em0xMTkuNC0yNy40Yy0xOS4zIDEzLjgtNDEuOSAyMy40LTY2LjIgMjcuNGwtNC4zLTY0LjRjMTAtMi40IDE5LjUtNi40IDI4LTExLjZsNDIuNSA0OC42em02NS0xMDMuOGMtNC4xIDI0LjQtMTMuNyA0Ni45LTI3LjQgNjYuMmwtNDguNi00Mi41YzUuMy04LjUgOS4yLTE4IDExLjYtMjhsNjQuNCA0LjN6bS02NS0xNTYuOWwtNDIuNSA0OC42Yy04LjYtNS4zLTE4LTkuMi0yOC0xMS42bDQuMy02NC40YzI0LjQgNC4xIDQ2LjkgMTMuNyA2Ni4yIDI3LjV6TTI1NiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LHhDPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdGRvZ1wiLGljb246WzUxMiw1MTIsWzEyNzc4OV0sXCJmODBmXCIsXCJNNDg4LjYgMjMuNGMzMS4yIDMxLjIgMzEuMiA4MS45IDAgMTEzLjFsLTM1MiAzNTJjLTMxLjIgMzEuMi04MS45IDMxLjItMTEzLjEgMHMtMzEuMi04MS45IDAtMTEzLjFsMzUyLTM1MmMzMS4yLTMxLjIgODEuOS0zMS4yIDExMy4xIDB6TTQ0My4zIDkyLjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwYy0xMi41IDEyLjUtMjMuOCAxNS4xLTM3LjUgMTcuNmwtMi41IC40Yy0xMy44IDIuNS0zMS42IDUuNi00OCAyMmMtMTYuNyAxNi43LTIwLjkgMzYtMjQuMSA1MC45bDAgMHYwbC0uMiAxYy0zLjQgMTUuNi02IDI2LjQtMTUuNyAzNi4xcy0yMC41IDEyLjMtMzYuMSAxNS43bC0xIC4yYy0xNC45IDMuMi0zNC4yIDcuNC01MC45IDI0LjFzLTIwLjkgMzYtMjQuMSA1MC45bC0uMiAxYy0zLjQgMTUuNi02IDI2LjQtMTUuNyAzNi4xYy05LjIgOS4yLTE4IDEwLjgtMzIuNyAxMy40bDAgMC0uOSAuMmMtMTUuNiAyLjgtMzQuOSA2LjktNTQuNCAyNi40Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBjMTIuNS0xMi41IDIzLjgtMTUuMSAzNy41LTE3LjZsMi41LS40YzEzLjgtMi41IDMxLjYtNS42IDQ4LTIyYzE2LjctMTYuNyAyMC45LTM2IDI0LjEtNTAuOWwuMi0xYzMuNC0xNS42IDYtMjYuNCAxNS43LTM2LjFzMjAuNS0xMi4zIDM2LjEtMTUuN2wxLS4yYzE0LjktMy4yIDM0LjItNy40IDUwLjktMjQuMXMyMC45LTM2IDI0LjEtNTAuOWwuMi0xYzMuNC0xNS42IDYtMjYuNCAxNS43LTM2LjFjOS4yLTkuMiAxOC0xMC44IDMyLjctMTMuNGwuOS0uMmMxNS42LTIuOCAzNC45LTYuOSA1NC40LTI2LjRjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6TTE5MS4yIDQ3OS4ybDI4OC0yODhMNDk1IDIwN2MxMC45IDEwLjkgMTcgMjUuNiAxNyA0MXMtNi4xIDMwLjEtMTcgNDFMMjg5IDQ5NWMtMTAuOSAxMC45LTI1LjYgMTctNDEgMTdzLTMwLjEtNi4xLTQxLTE3bC0xNS44LTE1Ljh6TTE3IDMwNUM2LjEgMjk0LjEgMCAyNzkuNCAwIDI2NHM2LjEtMzAuMSAxNy00MUwyMjMgMTdDMjMzLjkgNi4xIDI0OC42IDAgMjY0IDBzMzAuMSA2LjEgNDEgMTdsMTUuOCAxNS44LTI4OCAyODhMMTcgMzA1elwiXX0sTzg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLXdhbGtpbmctd2l0aC1jYW5lXCIsaWNvbjpbNTEyLDUxMixbXCJibGluZFwiXSxcImYyOWRcIixcIk0xNzYgOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHptLTguNCAzMmMtMzYuNCAwLTY5LjYgMjAuNS04NS45IDUzLjFMMzUuNCAyNzMuN2MtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zTDEyOCAyMzEuNnY0My4yYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zTDIyNCAzOTcuM1Y0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzOTAuNmMwLTEyLjctNS4xLTI0LjktMTQuMS0zMy45TDIyNCAzMDYuN1YyMTMuM2w3MC40IDkzLjljMTAuNiAxNC4xIDMwLjcgMTcgNDQuOCA2LjRzMTctMzAuNyA2LjQtNDQuOEwyNjguOCAxNjYuNEMyNTAuNyAxNDIuMiAyMjIuMiAxMjggMTkyIDEyOEgxNjcuNnpNMTI4LjMgMzQ2LjhMOTcgNDcyLjJjLTQuMyAxNy4xIDYuMSAzNC41IDIzLjMgMzguOHMzNC41LTYuMSAzOC44LTIzLjNsMjItODguMi01Mi44LTUyLjh6TTQ1MC44IDUwNS4xYzUgNy4zIDE1IDkuMSAyMi4zIDRzOS4xLTE1IDQtMjIuM0wzNTguOSAzMTYuMWMtMi44IDMuOC02LjEgNy4zLTEwLjEgMTAuM2MtNSAzLjgtMTAuNSA2LjQtMTYuMiA3LjlMNDUwLjggNTA1LjF6XCJdfSxnQz1POCxTQz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkcnVtXCIsaWNvbjpbNTc2LDUxMixbMTI5MzQ1XSxcImY1NjlcIixcIk01MzMuMiA3Ni4xYzExLjEtNy4zIDE0LjItMjIuMSA2LjktMzMuMnMtMjIuMS0xNC4yLTMzLjItNi45TDQwMi4yIDEwNC41QzM2Ny44IDk4LjcgMzI5IDk2IDI4OCA5NkMxNDYuNiA5NiAzMiAxMjggMzIgMjA4VjM2OGMwIDMxLjMgMjcuNCA1OC44IDcyIDc4LjdWMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRWNDYzLjRjMzMgOC45IDcxLjEgMTQuNSAxMTIgMTYuMVYzNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNFY0NzkuNWM0MC45LTEuNiA3OS03LjIgMTEyLTE2LjFWMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRWNDQ2LjdjNDQuNi0xOS45IDcyLTQ3LjQgNzItNzguN1YyMDhjMC00MS4xLTMwLjItNjkuNS03OC44LTg3LjRsNjcuOS00NC41ek0zMzkuNCAxNDUuNmwtNjQuNiA0Mi4zYy0xMS4xIDcuMy0xNC4yIDIyLjEtNi45IDMzLjJzMjIuMSAxNC4yIDMzLjIgNi45bDExMS4xLTcyLjhjMTQuNyAzLjIgMjcuOSA3IDM5LjQgMTEuNUM0OTAuNCAxODEuOCA0OTYgMTk3LjQgNDk2IDIwOGMwIC44LTIuNyAxNy4yLTQ2IDM1LjlDNDExLjEgMjYwLjcgMzU0IDI3MiAyODggMjcycy0xMjMuMS0xMS4zLTE2Mi0yOC4xQzgyLjcgMjI1LjIgODAgMjA4LjggODAgMjA4YzAtMTAuNiA1LjYtMjYuMiA0NC40LTQxLjNDMTYyLjYgMTUxLjkgMjE5LjggMTQ0IDI4OCAxNDRjMTggMCAzNS4xIC41IDUxLjQgMS42elwiXX0sTkM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaWNlLWNyZWFtXCIsaWNvbjpbMzg0LDUxMixbMTI3ODQ4XSxcImY4MTBcIixcIk0zMzUuMSAxNjBjLjYtNS4zIC45LTEwLjYgLjktMTZDMzM2IDY0LjUgMjcxLjUgMCAxOTIgMFM0OCA2NC41IDQ4IDE0NGMwIDUuNCAuMyAxMC43IC45IDE2SDQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4aDUzLjUgMTgxSDMzNmMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OGgtLjl6TTY0IDI4OEwxNjguOCA0OTcuN2M0LjQgOC44IDEzLjMgMTQuMyAyMy4yIDE0LjNzMTguOC01LjUgMjMuMi0xNC4zTDMyMCAyODhINjR6XCJdfSx3Qz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoZWFydC1jaXJjbGUtYm9sdFwiLGljb246WzU3Niw1MTIsW10sXCJlNGZjXCIsXCJNNDcuNiAzMDAuNEwyMjguMyA0NjkuMWM3LjUgNyAxNy40IDEwLjkgMjcuNyAxMC45czIwLjItMy45IDI3LjctMTAuOWwyLjYtMi40QzI2Ny4yIDQzOC42IDI1NiA0MDQuNiAyNTYgMzY4YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2YzI4LjMgMCA1NSA2LjcgNzguNyAxOC41Yy45LTYuNSAxLjMtMTMgMS4zLTE5LjZ2LTUuOGMwLTY5LjktNTAuNS0xMjkuNS0xMTkuNC0xNDFDMzQ3IDM2LjUgMzAwLjYgNTEuNCAyNjggODRMMjU2IDk2IDI0NCA4NGMtMzIuNi0zMi42LTc5LTQ3LjUtMTI0LjYtMzkuOUM1MC41IDU1LjYgMCAxMTUuMiAwIDE4NS4xdjUuOGMwIDQxLjUgMTcuMiA4MS4yIDQ3LjYgMTA5LjV6TTQzMiA1MTJjNzkuNSAwIDE0NC02NC41IDE0NC0xNDRzLTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHptNDcuOS0yMjVjNC4zIDMuNyA1LjQgOS45IDIuNiAxNC45TDQ1Mi40IDM1Nkg0ODhjNS4yIDAgOS44IDMuMyAxMS40IDguMnMtLjEgMTAuMy00LjIgMTMuNGwtOTYgNzJjLTQuNSAzLjQtMTAuOCAzLjItMTUuMS0uNnMtNS40LTkuOS0yLjYtMTQuOUw0MTEuNiAzODBIMzc2Yy01LjIgMC05LjgtMy4zLTExLjQtOC4ycy4xLTEwLjMgNC4yLTEzLjRsOTYtNzJjNC41LTMuNCAxMC44LTMuMiAxNS4xIC42elwiXX0sa0M9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmF4XCIsaWNvbjpbNTEyLDUxMixbMTI4MjI0LDEyODQzOV0sXCJmMWFjXCIsXCJNMTI4IDY0djk2aDY0VjY0SDM4Ni43TDQxNiA5My4zVjE2MGg2NFY5My4zYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDQzMiAxOC43QzQyMCA2LjcgNDAzLjcgMCAzODYuNyAwSDE5MmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6TTAgMTYwVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg2NGMxNy43IDAgMzItMTQuMyAzMi0zMlYxNjBjMC0xNy43LTE0LjMtMzItMzItMzJIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem00ODAgMzJIMTI4VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkg0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yNTYgMzIwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bTE2MC0zMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTM4NCA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnptLTk2LTMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpcIl19LGJDPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBhcmFncmFwaFwiLGljb246WzQ0OCw1MTIsWzE4Ml0sXCJmMWRkXCIsXCJNMTkyIDMyaDY0SDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzODRsMCAzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNTJIMjg4VjQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMTkyYy04OC40IDAtMTYwLTcxLjYtMTYwLTE2MHM3MS42LTE2MCAxNjAtMTYwelwiXX0sWDg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hlY2stdG8tc2xvdFwiLGljb246WzU3Niw1MTIsW1widm90ZS15ZWFcIl0sXCJmNzcyXCIsXCJNOTYgODBjMC0yNi41IDIxLjUtNDggNDgtNDhINDMyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjM4NEg5NlY4MHptMzEzIDQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtMTExIDExMS00Ny00N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw2NCA2NGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMEw0MDkgMTYxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45ek0wIDMzNmMwLTI2LjUgMjEuNS00OCA0OC00OEg2NFY0MTZINTEyVjI4OGgxNmMyNi41IDAgNDggMjEuNSA0OCA0OHY5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0OGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWMzM2elwiXX0sQUM9WDgsQkM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3Rhci1oYWxmXCIsaWNvbjpbNTc2LDUxMixbNjE3MzFdLFwiZjA4OVwiLFwiTTI4OCAwYy0xMi4yIC4xLTIzLjMgNy0yOC42IDE4TDE5NSAxNTAuMyA1MS40IDE3MS41Yy0xMiAxLjgtMjIgMTAuMi0yNS43IDIxLjdzLS43IDI0LjIgNy45IDMyLjdMMTM3LjggMzI5IDExMy4yIDQ3NC43Yy0yIDEyIDMgMjQuMiAxMi45IDMxLjNzMjMgOCAzMy44IDIuM0wyODggNDM5LjhWMHpNNDI5LjkgNTEyYzEuMSAuMSAyLjEgLjEgMy4yIDBoLTMuMnpcIl19LF89e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm94ZXMtc3RhY2tlZFwiLGljb246WzU3Niw1MTIsWzYyNjI1LFwiYm94ZXNcIixcImJveGVzLWFsdFwiXSxcImY0NjhcIixcIk0xNjAgNDhjMC0yNi41IDIxLjUtNDggNDgtNDhoNDhWODBjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYwaDQ4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjE3NmMwIDI2LjUtMjEuNSA0OC00OCA0OEgyMDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQ4ek00OCAyODhIOTZ2ODBjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyODhoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYzMzZjMC0yNi41IDIxLjUtNDggNDgtNDh6bTMyMCAwaDQ4djgwYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjg4aDQ4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEgzNjhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjMzNmMwLTI2LjUgMjEuNS00OCA0OC00OHpcIl19LFRDPV8seUM9XyxROD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsaW5rXCIsaWNvbjpbNjQwLDUxMixbMTI4Mjc5LFwiY2hhaW5cIl0sXCJmMGMxXCIsXCJNNTc5LjggMjY3LjdjNTYuNS01Ni41IDU2LjUtMTQ4IDAtMjA0LjVjLTUwLTUwLTEyOC44LTU2LjUtMTg2LjMtMTUuNGwtMS42IDEuMWMtMTQuNCAxMC4zLTE3LjcgMzAuMy03LjQgNDQuNnMzMC4zIDE3LjcgNDQuNiA3LjRsMS42LTEuMWMzMi4xLTIyLjkgNzYtMTkuMyAxMDMuOCA4LjZjMzEuNSAzMS41IDMxLjUgODIuNSAwIDExNEw0MjIuMyAzMzQuOGMtMzEuNSAzMS41LTgyLjUgMzEuNS0xMTQgMGMtMjcuOS0yNy45LTMxLjUtNzEuOC04LjYtMTAzLjhsMS4xLTEuNmMxMC4zLTE0LjQgNi45LTM0LjQtNy40LTQ0LjZzLTM0LjQtNi45LTQ0LjYgNy40bC0xLjEgMS42QzIwNi41IDI1MS4yIDIxMyAzMzAgMjYzIDM4MGM1Ni41IDU2LjUgMTQ4IDU2LjUgMjA0LjUgMEw1NzkuOCAyNjcuN3pNNjAuMiAyNDQuM2MtNTYuNSA1Ni41LTU2LjUgMTQ4IDAgMjA0LjVjNTAgNTAgMTI4LjggNTYuNSAxODYuMyAxNS40bDEuNi0xLjFjMTQuNC0xMC4zIDE3LjctMzAuMyA3LjQtNDQuNnMtMzAuMy0xNy43LTQ0LjYtNy40bC0xLjYgMS4xYy0zMi4xIDIyLjktNzYgMTkuMy0xMDMuOC04LjZDNzQgMzcyIDc0IDMyMSAxMDUuNSAyODkuNUwyMTcuNyAxNzcuMmMzMS41LTMxLjUgODIuNS0zMS41IDExNCAwYzI3LjkgMjcuOSAzMS41IDcxLjggOC42IDEwMy45bC0xLjEgMS42Yy0xMC4zIDE0LjQtNi45IDM0LjQgNy40IDQ0LjZzMzQuNCA2LjkgNDQuNi03LjRsMS4xLTEuNkM0MzMuNSAyNjAuOCA0MjcgMTgyIDM3NyAxMzJjLTU2LjUtNTYuNS0xNDgtNTYuNS0yMDQuNSAwTDYwLjIgMjQ0LjN6XCJdfSxQQz1ROCxLOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJlYXItbGlzdGVuXCIsaWNvbjpbNTEyLDUxMixbXCJhc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXNcIl0sXCJmMmEyXCIsXCJNMzk4LjMgMy40Yy0xNS44LTcuOS0zNS0xLjUtNDIuOSAxNC4zYy03LjkgMTUuOC0xLjUgMzQuOSAxNC4yIDQyLjlsLjQgLjJjLjQgLjIgMS4xIC42IDIuMSAxLjJjMiAxLjIgNSAzIDguNyA1LjZjNy41IDUuMiAxNy42IDEzLjIgMjcuNyAyNC4yQzQyOC41IDExMy40IDQ0OCAxNDYgNDQ4IDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNjYtMjguNS0xMTMuNC01Ni41LTE0My43QzQ0MS42IDMzLjIgNDI3LjcgMjIuMiA0MTcuMyAxNWMtNS4zLTMuNy05LjctNi40LTEzLTguM2MtMS42LTEtMy0xLjctNC0yLjJjLS41LS4zLS45LS41LTEuMi0uN2wtLjQtLjItLjItLjEtLjEgMCAwIDBjMCAwIDAgMC0xNC4zIDI4LjZMMzk4LjMgMy40ek0xMjguNyAyMjcuNWM2LjItNTYgNTMuNy05OS41IDExMS4zLTk5LjVjNjEuOSAwIDExMiA1MC4xIDExMiAxMTJjMCAyOS4zLTExLjIgNTUuOS0yOS42IDc1LjljLTE3IDE4LjQtMzQuNCA0NS4xLTM0LjQgNzhWNDAwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyYzYxLjkgMCAxMTItNTAuMSAxMTItMTEydi02LjFjMC05LjggNS40LTIxLjcgMTcuNC0zNC43QzM5OC4zIDMyNy45IDQxNiAyODYgNDE2IDI0MGMwLTk3LjItNzguOC0xNzYtMTc2LTE3NkMxNDkuNCA2NCA3NC44IDEzMi41IDY1LjEgMjIwLjVjLTEuOSAxNy42IDEwLjcgMzMuNCAyOC4zIDM1LjNzMzMuNC0xMC43IDM1LjMtMjguM3pNMzIgNTEyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6TTE5MiAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek00MS40IDM2MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDB6TTIwOCAyNDBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6XCJdfSxGQz1LOCxEQz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0cmVlLWNpdHlcIixpY29uOls2NDAsNTEyLFtdLFwiZTU4N1wiLFwiTTI4OCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OGg5NmMyNi41IDAgNDggMjEuNSA0OCA0OFYxOTJoNDBWMTIwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2NzJoMjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhWNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDQzMiAzMzZjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQ4em02NCAzMnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjgwYzAtOC44LTcuMi0xNi0xNi0xNkgzNjhjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjE3NmMwLTguOC03LjItMTYtMTYtMTZIMzY4ek0zNTIgMjcydjMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjcyYzAtOC44LTcuMi0xNi0xNi0xNkgzNjhjLTguOCAwLTE2IDcuMi0xNiAxNnptMTc2LTE2Yy04LjggMC0xNiA3LjItMTYgMTZ2MzJjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyNzJjMC04LjgtNy4yLTE2LTE2LTE2SDUyOHpNNTEyIDM2OHYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjM2OGMwLTguOC03LjItMTYtMTYtMTZINTI4Yy04LjggMC0xNiA3LjItMTYgMTZ6TTIyNCAxNjBjMCA2LTEgMTEtMiAxNmMyMCAxNCAzNCAzOCAzNCA2NGMwIDQ1LTM2IDgwLTgwIDgwSDE2MFY0ODBjMCAxOC0xNSAzMi0zMiAzMmMtMTggMC0zMi0xNC0zMi0zMlYzMjBIODBjLTQ1IDAtODAtMzUtODAtODBjMC0yNiAxMy01MCAzMy02NGMtMS01LTEtMTAtMS0xNmMwLTUzIDQyLTk2IDk2LTk2YzUzIDAgOTYgNDMgOTYgOTZ6XCJdfSxSQz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwbGF5XCIsaWNvbjpbMzg0LDUxMixbOTY1NF0sXCJmMDRiXCIsXCJNNzMgMzljLTE0LjgtOS4xLTMzLjQtOS40LTQ4LjUtLjlTMCA2Mi42IDAgODBWNDMyYzAgMTcuNCA5LjQgMzMuNCAyNC41IDQxLjlzMzMuNyA4LjEgNDguNS0uOUwzNjEgMjk3YzE0LjMtOC43IDIzLTI0LjIgMjMtNDFzLTguNy0zMi4yLTIzLTQxTDczIDM5elwiXX0sVUM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZm9udFwiLGljb246WzQ0OCw1MTIsW10sXCJmMDMxXCIsXCJNMjU0IDUyLjhDMjQ5LjMgNDAuMyAyMzcuMyAzMiAyMjQgMzJzLTI1LjMgOC4zLTMwIDIwLjhMNTcuOCA0MTZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJoLTEuOGwxOC00OEgzMDMuOGwxOCA0OEgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzkwLjJMMjU0IDUyLjh6TTI3OS44IDMwNEgxNjguMkwyMjQgMTU1LjEgMjc5LjggMzA0elwiXX0scUM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicnVwaWFoLXNpZ25cIixpY29uOls1MTIsNTEyLFtdLFwiZTIzZFwiLFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJoODBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRjMCA1OC44LTM1LjIgMTA5LjMtODUuNyAxMzEuN2w1MS40IDEyOC40YzYuNiAxNi40LTEuNCAzNS0xNy44IDQxLjZzLTM1LTEuNC00MS42LTE3LjhMMTA2LjMgMzIwSDY0VjQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyODggNjR6TTY0IDI1Nmg0OGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MEg2NFYyNTZ6bTI1Ni05Nmg4MGM2MS45IDAgMTEyIDUwLjEgMTEyIDExMnMtNTAuMSAxMTItMTEyIDExMkgzNTJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMzUyIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptODAgMTYwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4SDM1MnY5Nmg0OHpcIl19LGo4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1hZ25pZnlpbmctZ2xhc3NcIixpY29uOls1MTIsNTEyLFsxMjgyNjksXCJzZWFyY2hcIl0sXCJmMDAyXCIsXCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NmMtMzQuNCAyNS4yLTc2LjggNDAtMTIyLjcgNDBDOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDBTNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDM1MmM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NHMtNjQuNS0xNDQtMTQ0LTE0NFM2NCAxMjguNSA2NCAyMDhzNjQuNSAxNDQgMTQ0IDE0NHpcIl19LEdDPWo4LCQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGFibGUtdGVubmlzLXBhZGRsZS1iYWxsXCIsaWNvbjpbNTEyLDUxMixbMTI3OTU1LFwicGluZy1wb25nLXBhZGRsZS1iYWxsXCIsXCJ0YWJsZS10ZW5uaXNcIl0sXCJmNDVkXCIsXCJNNDE2IDI4OGMtNTAuMSAwLTkzLjYgMjguOC0xMTQuNiA3MC44TDY4LjkgMTI2LjNsLjYtLjYgNjAuMS02MC4xYzg3LjUtODcuNSAyMjkuMy04Ny41IDMxNi44IDBjNjcuMSA2Ny4xIDgyLjcgMTY2LjMgNDYuOCAyNDguM0M0NzEuOCAyOTcuNiA0NDUgMjg4IDQxNiAyODh6TTQ5LjMgMTUxLjlMMjkwLjEgMzkyLjdjLTEuNCA3LjUtMi4xIDE1LjMtMi4xIDIzLjNjMCAyMy4yIDYuMiA0NC45IDE2LjkgNjMuN2MtMyAuMi02LjEgLjMtOS4yIC4zSDI5M2MtMzMuOSAwLTY2LjUtMTMuNS05MC41LTM3LjVsLTkuOC05LjhjLTEzLjEtMTMuMS0zNC42LTEyLjQtNDYuOCAxLjdMODguMiA1MDFjLTUuOCA2LjctMTQuMiAxMC43LTIzIDExcy0xNy41LTMuMS0yMy44LTkuNGwtMzItMzJDMy4xIDQ2NC4zLS4zIDQ1NS43IDAgNDQ2LjlzNC4zLTE3LjIgMTEtMjNsNjYuNi01Ny43YzE0LTEyLjIgMTQuOC0zMy43IDEuNy00Ni44bC05LjgtOS44QzQ1LjUgMjg1LjUgMzIgMjUyLjkgMzIgMjE5di0yLjdjMC0yMi44IDYuMS00NC45IDE3LjMtNjQuM3pNNDE2IDUxMmMtNTMgMC05Ni00My05Ni05NnM0My05NiA5Ni05NnM5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZ6XCJdfSxXQz0kLEVDPSQsSjg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLWRvdHMtZnJvbS1saW5lXCIsaWNvbjpbNTc2LDUxMixbXCJkaWFnbm9zZXNcIl0sXCJmNDcwXCIsXCJNMjg4IDE3NmM0OC42IDAgODgtMzkuNCA4OC04OHMtMzkuNC04OC04OC04OHMtODggMzkuNC04OCA4OHMzOS40IDg4IDg4IDg4ek03OC43IDM3Mi45YzE1LTEyLjUgNTAtMzQuNCA5Ny4zLTUwLjFWNDMySDQwMFYzMjIuN2M0Ny4zIDE1LjggODIuMyAzNy43IDk3LjMgNTAuMWMyMC40IDE3IDUwLjYgMTQuMiA2Ny42LTYuMXMxNC4yLTUwLjYtNi4xLTY3LjZjLTEyLTEwLTMwLjEtMjIuNS01My4yLTM1QzQ5Ny4yIDI3OC40IDQ4MS43IDI4OCA0NjQgMjg4Yy0yNi41IDAtNDgtMjEuNS00OC00OGMwLTQuMyAuNi04LjQgMS42LTEyLjRDMzc5LjEgMjE1LjkgMzM1LjMgMjA4IDI4OCAyMDhjLTYwLjIgMC0xMTQuOSAxMi45LTE2MCAyOS45YzAgLjcgMCAxLjQgMCAyLjFjMCAyNi41LTIxLjUgNDgtNDggNDhjLTExLjggMC0yMi43LTQuMy0zMS0xMS40Yy0xMy4xIDguMS0yMy43IDE1LjktMzEuNyAyMi41Yy0yMC40IDE3LTIzLjEgNDcuMi02LjEgNjcuNnM0Ny4yIDIzLjEgNjcuNiA2LjF6TTI0IDQ2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEg1NTJjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMjR6TTI3MiAyODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em01NiAxMDRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpNOTYgMjQwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6bTM2OCAxNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnpcIl19LElDPUo4LFo4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRyYXNoLWNhbi1hcnJvdy11cFwiLGljb246WzQ0OCw1MTIsW1widHJhc2gtcmVzdG9yZS1hbHRcIl0sXCJmODJhXCIsXCJNMTYzLjggMEgyODQuMmMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43TDMyMCAzMmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJoOTZsNy4yLTE0LjNDMTQwLjYgNi44IDE1MS43IDAgMTYzLjggMHpNMzIgMTI4SDQxNlY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIOTZjLTM1LjMgMC02NC0yOC43LTY0LTY0VjEyOHptMTkyIDY0Yy02LjQgMC0xMi41IDIuNS0xNyA3bC04MCA4MGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDM5LTM5VjQwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI3My45bDM5IDM5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODAtODBjLTQuNS00LjUtMTAuNi03LTE3LTd6XCJdfSxPQz1aOCxYQz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJuYWlyYS1zaWduXCIsaWNvbjpbNDQ4LDUxMixbXSxcImUxZjZcIixcIk0xMjIuNiA0Ni4zYy03LjgtMTEuNy0yMi40LTE3LTM1LjktMTIuOVM2NCA0OS45IDY0IDY0VjI1NkgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2NFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzMjBIMjI4LjJsOTcuMiAxNDUuOGM3LjggMTEuNyAyMi40IDE3IDM1LjkgMTIuOXMyMi43LTE2LjUgMjIuNy0zMC42VjMyMGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzODRWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMjU2SDI2Mi41TDEyMi42IDQ2LjN6TTMwNS4xIDMyMEgzMjB2MjIuM0wzMDUuMSAzMjB6TTE4NS41IDI1NkgxMjhWMTY5LjdMMTg1LjUgMjU2elwiXX0sUUM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FydC1hcnJvdy1kb3duXCIsaWNvbjpbNTc2LDUxMixbXSxcImYyMThcIixcIk0wIDI0QzAgMTAuNyAxMC43IDAgMjQgMEg5NmMxMS41IDAgMjEuNCA4LjIgMjMuNiAxOS41TDEyMiAzMkgzMTJWMTM0LjFsLTIzLTIzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDY0IDY0YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDY0LTY0YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTIzIDIzVjMySDU0MS44YzIxLjIgMCAzNi41IDIwLjMgMzAuOCA0MC43bC01NCAxOTJjLTMuOSAxMy44LTE2LjUgMjMuMy0zMC44IDIzLjNoLTMxN2w5LjEgNDhINDg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDE2MGMtMTEuNSAwLTIxLjQtOC4yLTIzLjYtMTkuNUw3Ni4xIDQ4SDI0QzEwLjcgNDggMCAzNy4zIDAgMjR6TTIyNCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4em0yNDAgNDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OHpcIl19LEtDPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndhbGtpZS10YWxraWVcIixpY29uOlszODQsNTEyLFtdLFwiZjhlZlwiLFwiTTExMiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNFM2NCAxMC43IDY0IDI0Vjk2SDQ4QzIxLjUgOTYgMCAxMTcuNSAwIDE0NFYzMDAuMWMwIDEyLjcgNS4xIDI0LjkgMTQuMSAzMy45bDMuOSAzLjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlWNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDMwNGMyNi41IDAgNDgtMjEuNSA0OC00OFYzNzEuOWMwLTEyLjcgNS4xLTI0LjkgMTQuMS0zMy45bDMuOS0zLjljOS05IDE0LjEtMjEuMiAxNC4xLTMzLjlWMTQ0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMkgyMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJIMTEyVjI0em0wIDEzNkgyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0wIDY0SDI3MmM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRIMjcyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl19LFk4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpbGUtcGVuXCIsaWNvbjpbNTc2LDUxMixbMTI4MjIxLFwiZmlsZS1lZGl0XCJdLFwiZjMxY1wiLFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwSDIyNFYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzg0VjI4NS43bC04Ni44IDg2LjhjLTEwLjMgMTAuMy0xNy41IDIzLjEtMjEgMzcuMmwtMTguNyA3NC45Yy0yLjMgOS4yLTEuOCAxOC44IDEuMyAyNy41SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NHptMzg0IDY0SDI1NlYwTDM4NCAxMjh6TTU0OS44IDIzNS43bDE0LjQgMTQuNGMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtMjkuNCAyOS40LTcxLTcxIDI5LjQtMjkuNGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHpNMzExLjkgNDE3TDQ0MS4xIDI4Ny44bDcxIDcxTDM4Mi45IDQ4Ny45Yy00LjEgNC4xLTkuMiA3LTE0LjkgOC40bC02MC4xIDE1Yy01LjUgMS40LTExLjItLjItMTUuMi00LjJzLTUuNi05LjctNC4yLTE1LjJsMTUtNjAuMWMxLjQtNS42IDQuMy0xMC44IDguNC0xNC45elwiXX0sakM9WTgsSkM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicmVjZWlwdFwiLGljb246WzM4NCw1MTIsWzEyOTUzNF0sXCJmNTQzXCIsXCJNMTQgMi4yQzIyLjUtMS43IDMyLjUtLjMgMzkuNiA1LjhMODAgNDAuNCAxMjAuNCA1LjhjOS03LjcgMjIuMy03LjcgMzEuMiAwTDE5MiA0MC40IDIzMi40IDUuOGM5LTcuNyAyMi4yLTcuNyAzMS4yIDBMMzA0IDQwLjQgMzQ0LjQgNS44YzcuMS02LjEgMTcuMS03LjUgMjUuNi0zLjZzMTQgMTIuNCAxNCAyMS44VjQ4OGMwIDkuNC01LjUgMTcuOS0xNCAyMS44cy0xOC41IDIuNS0yNS42LTMuNkwzMDQgNDcxLjZsLTQwLjQgMzQuNmMtOSA3LjctMjIuMiA3LjctMzEuMiAwTDE5MiA0NzEuNmwtNDAuNCAzNC42Yy05IDcuNy0yMi4zIDcuNy0zMS4yIDBMODAgNDcxLjYgMzkuNiA1MDYuMmMtNy4xIDYuMS0xNy4xIDcuNS0yNS42IDMuNlMwIDQ5Ny40IDAgNDg4VjI0QzAgMTQuNiA1LjUgNi4xIDE0IDIuMnpNOTYgMTQ0Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDI4OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg5NnpNODAgMzUyYzAgOC44IDcuMiAxNiAxNiAxNkgyODhjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIOTZjLTguOCAwLTE2IDcuMi0xNiAxNnpNOTYgMjQwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDI4OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg5NnpcIl19LGMyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNxdWFyZS1wZW5cIixpY29uOls0NDgsNTEyLFtcInBlbi1zcXVhcmVcIixcInBlbmNpbC1zcXVhcmVcIl0sXCJmMTRiXCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0zMjUuOCAxMzkuN2wxNC40IDE0LjRjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZsLTIxLjQgMjEuNC03MS03MSAyMS40LTIxLjRjMTUuNi0xNS42IDQwLjktMTUuNiA1Ni42IDB6TTExOS45IDI4OUwyMjUuMSAxODMuOGw3MSA3MUwxOTAuOSAzNTkuOWMtNC4xIDQuMS05LjIgNy0xNC45IDguNGwtNjAuMSAxNWMtNS41IDEuNC0xMS4yLS4yLTE1LjItNC4ycy01LjYtOS43LTQuMi0xNS4ybDE1LTYwLjFjMS40LTUuNiA0LjMtMTAuOCA4LjQtMTQuOXpcIl19LFpDPWMyLFlDPWMyLF9DPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN1aXRjYXNlLXJvbGxpbmdcIixpY29uOlszODQsNTEyLFtdLFwiZjVjMVwiLFwiTTE0NCA1NmMwLTQuNCAzLjYtOCA4LThoODBjNC40IDAgOCAzLjYgOCA4djcySDE0NFY1NnptMTc2IDcySDI4OFY1NmMwLTMwLjktMjUuMS01Ni01Ni01NkgxNTJDMTIxLjEgMCA5NiAyNS4xIDk2IDU2djcySDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NFY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkgyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmMzNS4zIDAgNjQtMjguNyA2NC02NFYxOTJjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTExMiAyMjRIMjcyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptMCAxMjhIMjcyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDExMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl19LCRDPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1jaXJjbGUtZXhjbGFtYXRpb25cIixpY29uOls1NzYsNTEyLFtdLFwiZTUzZlwiLFwiTTIwOCA0OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6TTE1MiAzNTJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1Ni45TDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42aDI5LjdjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNDQuOSA3NC43Yy0xNi4xIDE3LjYtMjguNiAzOC41LTM2LjYgNjEuNWMtMS45LTEuOC0zLjUtMy45LTQuOS02LjNMMjMyIDI1Ni45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMTUyek00MzIgNTEyYy03OS41IDAtMTQ0LTY0LjUtMTQ0LTE0NHM2NC41LTE0NCAxNDQtMTQ0czE0NCA2NC41IDE0NCAxNDRzLTY0LjUgMTQ0LTE0NCAxNDR6bTAtNDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMC0xOTJjLTguOCAwLTE2IDcuMi0xNiAxNnY4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjI4OGMwLTguOC03LjItMTYtMTYtMTZ6XCJdfSxjTD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGV2cm9uLWRvd25cIixpY29uOls1MTIsNTEyLFtdLFwiZjA3OFwiLFwiTTIzMy40IDQwNi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE5Mi0xOTJjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjU2IDMzOC43IDg2LjYgMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJ6XCJdfSxhMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiYXR0ZXJ5LWZ1bGxcIixpY29uOls1NzYsNTEyLFsxMjgyNjcsXCJiYXR0ZXJ5XCIsXCJiYXR0ZXJ5LTVcIl0sXCJmMjQwXCIsXCJNMCAxNzZjMC00NC4yIDM1LjgtODAgODAtODBINDY0YzQ0LjIgMCA4MCAzNS44IDgwIDgwdjE2YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMydjE2YzAgNDQuMi0zNS44IDgwLTgwIDgwSDgwYy00NC4yIDAtODAtMzUuOC04MC04MFYxNzZ6bTgwLTE2Yy04LjggMC0xNiA3LjItMTYgMTZWMzM2YzAgOC44IDcuMiAxNiAxNiAxNkg0NjRjOC44IDAgMTYtNy4yIDE2LTE2VjE3NmMwLTguOC03LjItMTYtMTYtMTZIODB6bTM2OCAzMlYzMjBIOTZWMTkySDQ0OHpcIl19LGFMPWEyLHNMPWEyLGVMPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNrdWxsLWNyb3NzYm9uZXNcIixpY29uOls1MTIsNTEyLFsxMjgzNjksOTc2MF0sXCJmNzE0XCIsXCJNNDAwIDEyOGMwIDQ0LjQtMjUuNCA4My41LTY0IDEwNi40VjI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgyMDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIzNC40Yy0zOC42LTIzLTY0LTYyLjEtNjQtMTA2LjRDMTEyIDU3LjMgMTc2LjUgMCAyNTYgMHMxNDQgNTcuMyAxNDQgMTI4ek0yMDAgMTc2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTE0NC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTM1LjQgMjczLjdjNy45LTE1LjggMjcuMS0yMi4yIDQyLjktMTQuM0wyNTYgMzQ4LjJsMTc3LjctODguOGMxNS44LTcuOSAzNS0xLjUgNDIuOSAxNC4zczEuNSAzNS0xNC4zIDQyLjlMMzI3LjYgMzg0bDEzNC44IDY3LjRjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOXMtMjcuMSAyMi4yLTQyLjkgMTQuM0wyNTYgNDE5LjggNzguMyA1MDguNmMtMTUuOCA3LjktMzUgMS41LTQyLjktMTQuM3MtMS41LTM1IDE0LjMtNDIuOUwxODQuNCAzODQgNDkuNyAzMTYuNmMtMTUuOC03LjktMjIuMi0yNy4xLTE0LjMtNDIuOXpcIl19LGZMPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNvZGUtY29tcGFyZVwiLGljb246WzUxMiw1MTIsW10sXCJlMTNhXCIsXCJNMzIwIDQ4OGMwIDkuNS01LjYgMTguMS0xNC4yIDIxLjlzLTE4LjggMi4zLTI1LjgtNC4xbC04MC03MmMtNS4xLTQuNi03LjktMTEtNy45LTE3LjhzMi45LTEzLjMgNy45LTE3LjhsODAtNzJjNy02LjMgMTcuMi03LjkgMjUuOC00LjFzMTQuMiAxMi40IDE0LjIgMjEuOXY0MGgxNmMzNS4zIDAgNjQtMjguNyA2NC02NFYxNTMuM0MzNzEuNyAxNDEgMzUyIDExMi44IDM1MiA4MGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjNWMzIwYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4SDMyMHY0MHpNNDU2IDgwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHpNMTkyIDI0YzAtOS41IDUuNi0xOC4xIDE0LjItMjEuOXMxOC44LTIuMyAyNS44IDQuMWw4MCA3MmM1LjEgNC42IDcuOSAxMSA3LjkgMTcuOHMtMi45IDEzLjMtNy45IDE3LjhsLTgwIDcyYy03IDYuMy0xNy4yIDcuOS0yNS44IDQuMXMtMTQuMi0xMi40LTE0LjItMjEuOVYxMjhIMTc2Yy0zNS4zIDAtNjQgMjguNy02NCA2NFYzNTguN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zYzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNWMTkyYzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4aDE2VjI0ek01NiA0MzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHpcIl19LF84PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxpc3QtdWxcIixpY29uOls1MTIsNTEyLFtcImxpc3QtZG90c1wiXSxcImYwY2FcIixcIk02NCAxNDRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhTMTYgNjkuNSAxNiA5NnMyMS41IDQ4IDQ4IDQ4ek0xOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MnpNNjQgNDY0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6bTQ4LTIwOGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6XCJdfSxyTD1fOCxsTD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzY2hvb2wtbG9ja1wiLGljb246WzY0MCw1MTIsW10sXCJlNTZmXCIsXCJNMzAyLjIgNS40YzEwLjctNy4yIDI0LjgtNy4yIDM1LjUgMGwxMzkgOTIuN0w2MDIuNCAxMjZjMjIgNC45IDM3LjYgMjQuNCAzNy42IDQ2LjlWMjcyYzAtNjEuOS01MC4xLTExMi0xMTItMTEycy0xMTIgNTAuMS0xMTIgMTEydjI0LjZjLTE5LjEgMTEuMS0zMiAzMS43LTMyIDU1LjRIMzIwLjNsLS4zIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0djk2aDY0djBINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE3Mi44YzAtMjIuNSAxNS42LTQyIDM3LjYtNDYuOUwxNjMuMiA5OC4xbDEzOS05Mi43ek04MCAyMDh2NjRjMCA4LjggNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNlYyMDhjMC04LjgtNy4yLTE2LTE2LTE2SDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6bTAgMTI4djY0YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMzM2YzAtOC44LTcuMi0xNi0xNi0xNkg5NmMtOC44IDAtMTYgNy4yLTE2IDE2em0yNDAtNzJjNDguNiAwIDg4LTM5LjQgODgtODhzLTM5LjQtODgtODgtODhzLTg4IDM5LjQtODggODhzMzkuNCA4OCA4OCA4OHptMTYtMTIwdjE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDMyMGMtOC44IDAtMTYtNy4yLTE2LTE2VjE0NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0xOTIgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjQ4aDY0VjI3MmMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTgwIDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODB2NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzUyYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjI3MnpcIl19LGlMPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRvd2VyLWNlbGxcIixpY29uOls1NzYsNTEyLFtdLFwiZTU4NVwiLFwiTTYyLjYgMi4zQzQ2LjItNC4zIDI3LjYgMy42IDIwLjkgMjBDNy40IDUzLjQgMCA4OS45IDAgMTI4czcuNCA3NC42IDIwLjkgMTA4YzYuNiAxNi40IDI1LjMgMjQuMyA0MS43IDE3LjdTODYuOSAyMjguNCA4MC4zIDIxMkM2OS44IDE4Ni4xIDY0IDE1Ny44IDY0IDEyOHM1LjgtNTguMSAxNi4zLTg0Qzg2LjkgMjcuNiA3OSA5IDYyLjYgMi4zem00NTAuOCAwQzQ5NyA5IDQ4OS4xIDI3LjYgNDk1LjcgNDRDNTA2LjIgNjkuOSA1MTIgOTguMiA1MTIgMTI4cy01LjggNTguMS0xNi4zIDg0Yy02LjYgMTYuNCAxLjMgMzUgMTcuNyA0MS43czM1LTEuMyA0MS43LTE3LjdjMTMuNS0zMy40IDIwLjktNjkuOSAyMC45LTEwOHMtNy40LTc0LjYtMjAuOS0xMDhDNTQ4LjQgMy42IDUyOS44LTQuMyA1MTMuNCAyLjN6TTM0MC4xIDE2NS4yYzcuNS0xMC41IDExLjktMjMuMyAxMS45LTM3LjJjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRjMCAxMy45IDQuNCAyNi43IDExLjkgMzcuMkw5OC45IDQ2Ni44Yy03LjMgMTYuMS0uMiAzNS4xIDE1LjkgNDIuNHMzNS4xIC4yIDQyLjQtMTUuOUwxNzcuNyA0NDhIMzk4LjNsMjAuNiA0NS4yYzcuMyAxNi4xIDI2LjMgMjMuMiA0Mi40IDE1LjlzMjMuMi0yNi4zIDE1LjktNDIuNEwzNDAuMSAxNjUuMnpNMzY5LjIgMzg0SDIwNi44bDE0LjUtMzJIMzU0LjdsMTQuNSAzMnpNMjg4IDIwNS4zTDMyNS42IDI4OEgyNTAuNEwyODggMjA1LjN6TTE2My4zIDczLjZjNS4zLTEyLjEtLjItMjYuMy0xMi40LTMxLjZzLTI2LjMgLjItMzEuNiAxMi40QzEwOS41IDc3IDEwNCAxMDEuOSAxMDQgMTI4czUuNSA1MSAxNS4zIDczLjZjNS4zIDEyLjEgMTkuNSAxNy43IDMxLjYgMTIuNHMxNy43LTE5LjUgMTIuNC0zMS42QzE1NiAxNjUuOCAxNTIgMTQ3LjQgMTUyIDEyOHM0LTM3LjggMTEuMy01NC40ek00NTYuNyA1NC40Yy01LjMtMTIuMS0xOS41LTE3LjctMzEuNi0xMi40cy0xNy43IDE5LjUtMTIuNCAzMS42QzQyMCA5MC4yIDQyNCAxMDguNiA0MjQgMTI4cy00IDM3LjgtMTEuMyA1NC40Yy01LjMgMTIuMSAuMiAyNi4zIDEyLjQgMzEuNnMyNi4zLS4yIDMxLjYtMTIuNEM0NjYuNSAxNzkgNDcyIDE1NC4xIDQ3MiAxMjhzLTUuNS01MS0xNS4zLTczLjZ6XCJdfSwkOD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkb3duLWxvbmdcIixpY29uOlszMjAsNTEyLFtcImxvbmctYXJyb3ctYWx0LWRvd25cIl0sXCJmMzA5XCIsXCJNMzE4IDMzNC41YzMuOCA4LjggMiAxOS00LjYgMjZsLTEzNiAxNDRjLTQuNSA0LjgtMTAuOCA3LjUtMTcuNCA3LjVzLTEyLjktMi43LTE3LjQtNy41bC0xMzYtMTQ0Yy02LjYtNy04LjQtMTcuMi00LjYtMjZTMTQuNCAzMjAgMjQgMzIwaDg4bDAtMjg4YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjg4aDg4YzkuNiAwIDE4LjIgNS43IDIyIDE0LjV6XCJdfSxvTD0kOCxuTD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyYW5raW5nLXN0YXJcIixpY29uOls2NDAsNTEyLFtdLFwiZTU2MVwiLFwiTTM1My44IDU0LjFMMzMwLjIgNi4zYy0zLjktOC4zLTE2LjEtOC42LTIwLjQgMEwyODYuMiA1NC4xbC01Mi4zIDcuNWMtOS4zIDEuNC0xMy4zIDEyLjktNi40IDE5LjhsMzggMzctOSA1Mi4xYy0xLjQgOS4zIDguMiAxNi41IDE2LjggMTIuMmw0Ni45LTI0LjggNDYuNiAyNC40YzguNiA0LjMgMTguMy0yLjkgMTYuOC0xMi4ybC05LTUyLjEgMzgtMzYuNmM2LjgtNi44IDIuOS0xOC4zLTYuNC0xOS44bC01Mi4zLTcuNXpNMjU2IDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMlYyODhjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2ek0zMiAzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgxNjBjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyem00MTYgOTZ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJINjA4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjQxNmMwLTE3LjctMTQuMy0zMi0zMi0zMkg0ODBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyelwiXX0sSEw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hlc3Mta2luZ1wiLGljb246WzQ0OCw1MTIsWzk4MThdLFwiZjQzZlwiLFwiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ4aDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDI1NnY0OEg0MTZjMTAuMyAwIDE5LjkgNC45IDI2IDEzLjNzNy43IDE5LjEgNC40IDI4LjhMMzc1LjEgNDE2SDcyLjlMMS42IDIwMi4xQy0xLjYgMTkyLjQgMCAxODEuNiA2IDE3My4zczE1LjctMTMuMyAyNi0xMy4zSDE5MlYxMTJIMTc2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDE2VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0zMiA0ODBjMC0xNy43IDE0LjMtMzIgMzItMzJIODMuNiAzNjQuNCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzIwIDEyOCA2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6XCJdfSx6TD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24taGFyYXNzaW5nXCIsaWNvbjpbNTc2LDUxMixbXSxcImU1NDlcIixcIk0xOTIgOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHpNNTkuNCAzMDQuNUw4OCAyNTYuOVY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYzNTJoMTZWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjM1LjNsNDcuNCA1Ny4xYzExLjMgMTMuNiAzMS41IDE1LjUgNDUuMSA0LjJzMTUuNS0zMS41IDQuMi00NS4xbC03My43LTg4LjljLTE4LjItMjItNDUuMy0zNC43LTczLjktMzQuN0gxNDUuMWMtMzMuNyAwLTY0LjkgMTcuNy04Mi4zIDQ2LjZsLTU4LjMgOTdjLTkuMSAxNS4xLTQuMiAzNC44IDEwLjkgNDMuOXMzNC44IDQuMiA0My45LTEwLjl6TTQ4MCAyNDBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4ek00NjQgMzQ0djU4LjdsLTQxLjQtNDEuNGMtNy4zLTcuMy0xNy42LTEwLjYtMjcuOC05cy0xOC45IDguMS0yMy41IDE3LjNsLTQ4IDk2Yy03LjkgMTUuOC0xLjUgMzUgMTQuMyA0Mi45czM1IDEuNSA0Mi45LTE0LjNMNDA4LjggNDM4bDU0LjcgNTQuN2MxMi40IDEyLjQgMjkuMSAxOS4zIDQ2LjYgMTkuM2MzNi40IDAgNjUuOS0yOS41IDY1LjktNjUuOVYzNDRjMC0zMC45LTI1LjEtNTYtNTYtNTZzLTU2IDI1LjEtNTYgNTZ6TTI4OCA0OGMwIDguOCA3LjIgMTYgMTYgMTZoNTZjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzA0Yy04LjggMC0xNiA3LjItMTYgMTZ6bS0uOCA0OS43Yy03LjktNC0xNy41LS43LTIxLjUgNy4ycy0uNyAxNy41IDcuMiAyMS41bDQ4IDI0YzcuOSA0IDE3LjUgLjcgMjEuNS03LjJzLjctMTcuNS03LjItMjEuNWwtNDgtMjR6XCJdfSxWTD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJicmF6aWxpYW4tcmVhbC1zaWduXCIsaWNvbjpbNTEyLDUxMixbXSxcImU0NmNcIixcIk00MDAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY1MC4yYzEyLjUgMi4zIDI0LjcgNi40IDM2LjIgMTIuMWwxMC4xIDUuMWMxNS44IDcuOSAyMi4yIDI3LjEgMTQuMyA0Mi45cy0yNy4xIDIyLjItNDIuOSAxNC4zbC0xMC4yLTUuMWMtOS45LTUtMjAuOS03LjUtMzItNy41aC0xLjdjLTI5LjggMC01My45IDI0LjEtNTMuOSA1My45YzAgMjIgMTMuNCA0MS44IDMzLjkgNTBsNTIgMjAuOGM0NC43IDE3LjkgNzQuMSA2MS4yIDc0LjEgMTA5LjR2My40YzAgNTEuMi0zMy42IDk0LjYtODAgMTA5LjJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjQ2MC42Yy0xNS0zLjUtMjkuNC05LjctNDIuMy0xOC4zbC0yMy40LTE1LjZjLTE0LjctOS44LTE4LjctMjkuNy04LjktNDQuNHMyOS43LTE4LjcgNDQuNC04LjlMMzYxLjIgMzg5YzEwLjggNy4yIDIzLjQgMTEgMzYuMyAxMWMyNy45IDAgNTAuNS0yMi42IDUwLjUtNTAuNXYtMy40YzAtMjItMTMuNC00MS44LTMzLjktNTBsLTUyLTIwLjhDMzE3LjMgMjU3LjQgMjg4IDIxNC4xIDI4OCAxNjUuOUMyODggMTE0IDMyMS41IDcwIDM2OCA1NC4yVjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyek0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyaDgwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0YzAgNTguOC0zNS4yIDEwOS4zLTg1LjcgMTMxLjdsNTEuNCAxMjguNGM2LjYgMTYuNC0xLjQgMzUtMTcuOCA0MS42cy0zNS0xLjQtNDEuNi0xNy44TDEwNi4zIDMyMEg2NFY0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjg4IDY0ek02NCAyNTZoNDhjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBINjRWMjU2elwiXX0sYzA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibGFuZG1hcmstZG9tZVwiLGljb246WzUxMiw1MTIsW1wibGFuZG1hcmstYWx0XCJdLFwiZjc1MlwiLFwiTTI0OCAwaDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0VjM0LjdDMzY4LjQgNDguMSA0MzEuOSAxMTEuNiA0NDUuMyAxOTJINDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDIuN0M4MC4xIDExMS42IDE0My42IDQ4LjEgMjI0IDM0LjdWMjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTY0IDI4OGg2NFY0MTZoNDBWMjg4aDY0VjQxNmg0OFYyODhoNjRWNDE2aDQwVjI4OGg2NFY0MjAuM2MuNiAuMyAxLjIgLjcgMS43IDEuMWw0OCAzMmMxMS43IDcuOCAxNyAyMi40IDEyLjkgMzUuOVM0OTQuMSA1MTIgNDgwIDUxMkgzMmMtMTQuMSAwLTI2LjUtOS4yLTMwLjYtMjIuN3MxLjEtMjguMSAxMi45LTM1LjlsNDgtMzJjLjYtLjQgMS4yLS43IDEuOC0xLjFWMjg4elwiXX0sbUw9YzAsdkw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctdXBcIixpY29uOlszODQsNTEyLFs4NTkzXSxcImYwNjJcIixcIk0yMTQuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTQxLjJWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTQxLjJMMzI5LjQgMjQ2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MHpcIl19LHMyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInR2XCIsaWNvbjpbNjQwLDUxMixbNjM3MTcsXCJ0ZWxldmlzaW9uXCIsXCJ0di1hbHRcIl0sXCJmMjZjXCIsXCJNNjQgNjRWMzUySDU3NlY2NEg2NHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBINTc2YzM1LjMgMCA2NCAyOC43IDY0IDY0VjM1MmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6TTEyOCA0NDhINTEyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl19LE1MPXMyLHRMPXMyLGhMPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNocmltcFwiLGljb246WzUxMiw1MTIsWzEyOTQyNF0sXCJlNDQ4XCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NnMyOC43IDY0IDY0IDY0aDFjMy43IDg4LjkgNzcgMTYwIDE2NyAxNjBoNTZWMTI4SDI2NCA4OC44IDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQ2NGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg2NHpNMjI0IDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGg3MlY0MDcuOGwtNjQuMS0yMi40Yy0xMi41LTQuNC0yNi4yIDIuMi0zMC42IDE0LjdzMi4yIDI2LjIgMTQuNyAzMC42bDQuNSAxLjZDMjMzIDQzMy45IDIyNCA0NDMuOSAyMjQgNDU2em0xMjggMjMuM2MzNi40LTMuMyA2OS41LTE3LjYgOTYuMS0zOS42bC04Ni41LTM0LjZjLTMgMS44LTYuMiAzLjItOS42IDQuM3Y2OS45ek00NzIuNiA0MTVjMjQuNi0zMC4zIDM5LjQtNjguOSAzOS40LTExMWMwLTEyLjMtMS4zLTI0LjMtMy43LTM1LjlMMzgyLjggMzU1LjFjLjggMy40IDEuMiA3IDEuMiAxMC42YzAgNC42LS43IDktMS45IDEzLjFMNDcyLjYgNDE1ek0zMzYgMTI4SDMyMFYzMjBoMTguM2M5LjkgMCAxOS4xIDMuMiAyNi42IDguNWwxMzMuNS05Mi40QzQ3MS44IDE3Mi42IDQwOS4xIDEyOCAzMzYgMTI4ek0yMTYgMTkyYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpcIl19LGEwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxpc3QtY2hlY2tcIixpY29uOls1NzYsNTEyLFtcInRhc2tzXCJdLFwiZjBhZVwiLFwiTTE4NC4xIDM4LjJjOS45IDguOSAxMC43IDI0IDEuOCAzMy45bC03MiA4MGMtNC40IDQuOS0xMC42IDcuOC0xNy4yIDcuOXMtMTIuOS0yLjQtMTcuNi03TDM5IDExM2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDIyLjEgMjIuMSA1NS4xLTYxLjJjOC45LTkuOSAyNC0xMC43IDMzLjktMS44em0wIDE2MGM5LjkgOC45IDEwLjcgMjQgMS44IDMzLjlsLTcyIDgwYy00LjQgNC45LTEwLjYgNy44LTE3LjIgNy45cy0xMi45LTIuNC0xNy42LTdMMzkgMjczYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjIuMSAyMi4xIDU1LjEtNjEuMmM4LjktOS45IDI0LTEwLjcgMzMuOS0xLjh6TTI1NiA5NmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg1MTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnptMCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJINTEyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTE5MiA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJINTEyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTgwIDQ2NGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4elwiXX0sQ0w9YTAsTEw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwianVnLWRldGVyZ2VudFwiLGljb246WzM4NCw1MTIsW10sXCJlNTE5XCIsXCJNOTYgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRoODBjMTMuMyAwIDI0IDEwLjcgMjQgMjRWNDhoOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg4OEM3NC43IDk2IDY0IDg1LjMgNjQgNzJzMTAuNy0yNCAyNC0yNGg4VjI0ek0wIDI1NmMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOEgyNTZjNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYyNTZ6bTI1NiAwdjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyelwiXX0sczA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2lyY2xlLXVzZXJcIixpY29uOls1MTIsNTEyLFs2MjE0MixcInVzZXItY2lyY2xlXCJdLFwiZjJiZFwiLFwiTTM5OSAzODQuMkMzNzYuOSAzNDUuOCAzMzUuNCAzMjAgMjg4IDMyMEgyMjRjLTQ3LjQgMC04OC45IDI1LjgtMTExIDY0LjJjMzUuMiAzOS4yIDg2LjIgNjMuOCAxNDMgNjMuOHMxMDcuOC0yNC43IDE0My02My44ek01MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2ek0yNTYgMjcyYzM5LjggMCA3Mi0zMi4yIDcyLTcycy0zMi4yLTcyLTcyLTcycy03MiAzMi4yLTcyIDcyczMyLjIgNzIgNzIgNzJ6XCJdfSxwTD1zMCxkTD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLXNoaWVsZFwiLGljb246WzY0MCw1MTIsW10sXCJmNTA1XCIsXCJNMjI0IDI1NmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFMyOTQuNyAwIDIyNCAwUzk2IDU3LjMgOTYgMTI4czU3LjMgMTI4IDEyOCAxMjh6bS00NS43IDQ4Qzc5LjggMzA0IDAgMzgzLjggMCA0ODIuM0MwIDQ5OC43IDEzLjMgNTEyIDI5LjcgNTEySDQxOC4zYzEuOCAwIDMuNS0uMiA1LjMtLjVjLTc2LjMtNTUuMS05OS44LTE0MS0xMDMuMS0yMDAuMmMtMTYuMS00LjgtMzMuMS03LjMtNTAuNy03LjNIMTc4LjN6bTMwOC44LTc4LjNsLTEyMCA0OEMzNTggMjc3LjQgMzUyIDI4Ni4yIDM1MiAyOTZjMCA2My4zIDI1LjkgMTY4LjggMTM0LjggMjE0LjJjNS45IDIuNSAxMi42IDIuNSAxOC41IDBDNjE0LjEgNDY0LjggNjQwIDM1OS4zIDY0MCAyOTZjMC05LjgtNi0xOC42LTE1LjEtMjIuM2wtMTIwLTQ4Yy01LjctMi4zLTEyLjEtMi4zLTE3LjggMHpNNTkxLjQgMzEyYy0zLjkgNTAuNy0yNy4yIDExNi43LTk1LjQgMTQ5LjdWMjczLjhMNTkxLjQgMzEyelwiXX0sdUw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwid2luZFwiLGljb246WzUxMiw1MTIsW10sXCJmNzJlXCIsXCJNMjg4IDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDM1MmM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NkgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem02NCAzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJoMzJjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTEyOCA1MTJoMzJjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMTYwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl19LGUwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNhci1idXJzdFwiLGljb246WzY0MCw1MTIsW1wiY2FyLWNyYXNoXCJdLFwiZjVlMVwiLFwiTTE3NiA4Yy02LjYgMC0xMi40IDQtMTQuOSAxMC4xbC0yOS40IDc0TDU1LjYgNjguOWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zcy00LjYgMTIuMi0xLjQgMTcuOWwzOS41IDY5LjFMMTAuOSAyMDYuNGMtNS40IDMuNy04IDEwLjMtNi41IDE2LjdzNi43IDExLjIgMTMuMSAxMi4ybDc4LjcgMTIuMkw5MC42IDMyN2MtLjUgNi41IDMuMSAxMi43IDkgMTUuNXMxMi45IDEuOCAxNy44LTIuNmwzNS4zLTMyLjUgOS41LTM1LjQgMTAuNC0zOC42YzgtMjkuOSAzMC41LTUyLjEgNTcuOS02MC45bDQxLTU5LjJjMTEuMy0xNi4zIDI2LjQtMjguOSA0My41LTM3LjJjLS40LS42LS44LTEuMi0xLjMtMS44Yy00LjEtNS4xLTEwLjktNy4yLTE3LjItNS4zTDIyMC4zIDkyLjFsLTI5LjQtNzRDMTg4LjQgMTIgMTgyLjYgOCAxNzYgOHpNMzY3LjcgMTYxLjVsMTM1LjYgMzYuM2M2LjUgMS44IDExLjMgNy40IDExLjggMTQuMmw0LjYgNTYuNS0yMDEuNS01NCAzMi4yLTQ2LjZjMy44LTUuNiAxMC44LTguMSAxNy4zLTYuNHptLTY5LjktMzBsLTQ3LjkgNjkuM2MtMjEuNiAzLTQwLjMgMTguNi00Ni4zIDQxbC0xMC40IDM4LjYtMTYuNiA2MS44LTguMyAzMC45Yy00LjYgMTcuMSA1LjYgMzQuNiAyMi42IDM5LjJsMTUuNSA0LjFjMTcuMSA0LjYgMzQuNi01LjYgMzkuMi0yMi42bDguMy0zMC45IDI0Ny4zIDY2LjMtOC4zIDMwLjljLTQuNiAxNy4xIDUuNiAzNC42IDIyLjYgMzkuMmwxNS41IDQuMWMxNy4xIDQuNiAzNC42LTUuNiAzOS4yLTIyLjZsOC4zLTMwLjlMNTk1IDM4OGwxMC40LTM4LjZjNi0yMi40LTIuNS00NS4yLTE5LjYtNTguN2wtNi44LTg0Yy0yLjctMzMuNy0yNi40LTYyLTU5LTcwLjhMMzg0LjIgOTkuN2MtMzIuNy04LjgtNjcuMyA0LTg2LjUgMzEuOHpNMjY4LjMgMzA4LjhjLTEyLjgtMy40LTIwLjQtMTYuNi0xNy0yOS40czE2LjYtMjAuNCAyOS40LTE3czIwLjQgMTYuNiAxNyAyOS40cy0xNi42IDIwLjQtMjkuNCAxN3pNNTQ1IDM1OC4xYy0zLjQgMTIuOC0xNi42IDIwLjQtMjkuNCAxN3MtMjAuNC0xNi42LTE3LTI5LjRzMTYuNi0yMC40IDI5LjQtMTdzMjAuNCAxNi42IDE3IDI5LjR6XCJdfSx4TD1lMCxnTD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ5XCIsaWNvbjpbMzg0LDUxMixbMTIxXSxcIjU5XCIsXCJNNTggNDUuNEM0Ny44IDMxIDI3LjggMjcuNyAxMy40IDM4Uy00LjMgNjguMiA2IDgyLjZMMTYwIDI5OC4zVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI5OC4zTDM3OCA4Mi42YzEwLjMtMTQuNCA2LjktMzQuNC03LjQtNDQuNlMzMzYuMiAzMSAzMjYgNDUuNEwxOTIgMjMyLjkgNTggNDUuNHpcIl19LGYwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1zbm93Ym9hcmRpbmdcIixpY29uOls1NzYsNTEyLFsxMjc5MzgsXCJzbm93Ym9hcmRpbmdcIl0sXCJmN2NlXCIsXCJNMjQxLjcgMy40YzE1LjgtNy45IDM1LTEuNSA0Mi45IDE0LjNsMjUgNTAgNDIuNCA4LjVjMTkuNSAzLjkgMzcuOCAxMi4zIDUzLjUgMjQuNWwxMjYuMSA5OC4xYzE0IDEwLjkgMTYuNSAzMSA1LjYgNDQuOXMtMzEgMTYuNS00NC45IDUuNmwtNzIuMS01Ni4xLTcxLjUgMzEuOCAzMy4xIDI3LjZjMjMuMiAxOS4zIDMzLjUgNTAgMjYuNyA3OS40bC0xNy40IDc1LjJjLTIuMiA5LjQtOC4yIDE2LjgtMTYuMSAyMWw4Ni41IDMzLjFjNC42IDEuOCA5LjQgMi42IDE0LjMgMi42SDUwNGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEg0NzUuOGMtMTAuOCAwLTIxLjQtMi0zMS41LTUuOEw5Mi4xIDM3MS4zYy0xMS41LTQuNC0yMi0xMS4yLTMwLjgtMjBMMzkgMzI5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMjIuNCAyMi40YzQgNCA4LjcgNy4xIDE0IDkuMWwyMi40IDguNmMtLjgtMS42LTEuNS0zLjItMi4xLTQuOWMtNS42LTE2LjggMy41LTM0LjkgMjAuMi00MC41TDIyNCAyNjQuOWwwLTUzLjJjMC0yNC4yIDEzLjctNDYuNCAzNS40LTU3LjJsNDUuMi0yMi42LTcuNS0xLjVjLTE5LjQtMy45LTM1LjktMTYuNS00NC43LTM0LjFsLTI1LTUwYy03LjktMTUuOC0xLjUtMzUgMTQuMy00Mi45ek0xNzEgMzUwLjFsMTU5IDYwLjljLTIuMS01LjYtMi42LTExLjktMS4xLTE4LjJsMTcuNC03NS4yYzEuNC01LjktLjctMTItNS40LTE1LjlsLTUyLjgtNDQgMCAxOC44YzAgMjAuNy0xMy4yIDM5LTMyLjggNDUuNUwxNzEgMzUwLjF6TTQ2NCA5NmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4elwiXX0sU0w9ZjAscjA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidHJ1Y2stZmFzdFwiLGljb246WzY0MCw1MTIsW1wic2hpcHBpbmctZmFzdFwiXSxcImY0OGJcIixcIk0xMTIgMEM4NS41IDAgNjQgMjEuNSA2NCA0OFY5NkgxNmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg2NCAyNzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZINjQgNDhjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZINjQgMjQwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDY0IDE2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDY0IDIwOGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkg2NFY0MTZjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NkgzODRjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYyODggMjU2IDIzNy4zYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxMTQuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN0g0MTZWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMTEyek01NDQgMjM3LjNWMjU2SDQxNlYxNjBoNTAuN0w1NDQgMjM3LjN6TTE2MCA0NjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OHptMzY4LTQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpcIl19LE5MPXIwLHdMPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpc2hcIixpY29uOls1NzYsNTEyLFsxMjgwMzFdLFwiZjU3OFwiLFwiTTE4MC41IDE0MS41QzIxOS43IDEwOC41IDI3Mi42IDgwIDMzNiA4MHMxMTYuMyAyOC41IDE1NS41IDYxLjVjMzkuMSAzMyA2Ni45IDcyLjQgODEgOTkuOGM0LjcgOS4yIDQuNyAyMC4xIDAgMjkuM2MtMTQuMSAyNy40LTQxLjkgNjYuOC04MSA5OS44QzQ1Mi4zIDQwMy41IDM5OS40IDQzMiAzMzYgNDMycy0xMTYuMy0yOC41LTE1NS41LTYxLjVjLTE2LjItMTMuNy0zMC41LTI4LjUtNDIuNy00My4xTDQ4LjEgMzc5LjZjLTEyLjUgNy4zLTI4LjQgNS4zLTM4LjctNC45Uy0zIDM0OC43IDQuMiAzMzYuMUw1MCAyNTYgNC4yIDE3NS45Yy03LjItMTIuNi01LTI4LjQgNS4zLTM4LjZzMjYuMS0xMi4yIDM4LjctNC45bDg5LjcgNTIuM2MxMi4yLTE0LjYgMjYuNS0yOS40IDQyLjctNDMuMXpNNDQ4IDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6XCJdfSxrTD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLWdyYWR1YXRlXCIsaWNvbjpbNDQ4LDUxMixbXSxcImY1MDFcIixcIk0yMTkuMyAuNWMzLjEtLjYgNi4zLS42IDkuNCAwbDIwMCA0MEM0MzkuOSA0Mi43IDQ0OCA1Mi42IDQ0OCA2NHMtOC4xIDIxLjMtMTkuMyAyMy41TDM1MiAxMDIuOVYxNjBjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhzLTEyOC01Ny4zLTEyOC0xMjhWMTAyLjlMNDggOTMuM3Y2NS4xbDE1LjcgNzguNGMuOSA0LjctLjMgOS42LTMuMyAxMy4zcy03LjYgNS45LTEyLjQgNS45SDE2Yy00LjggMC05LjMtMi4xLTEyLjQtNS45cy00LjMtOC42LTMuMy0xMy4zTDE2IDE1OC40Vjg2LjZDNi41IDgzLjMgMCA3NC4zIDAgNjRDMCA1Mi42IDguMSA0Mi43IDE5LjMgNDAuNWwyMDAtNDB6TTEyOS4xIDMyMy4ybDgzLjIgODguNGM2LjMgNi43IDE3IDYuNyAyMy4zIDBsODMuMi04OC40YzczLjcgMTQuOSAxMjkuMSA4MCAxMjkuMSAxNTguMWMwIDE3LTEzLjggMzAuNy0zMC43IDMwLjdIMzAuN0MxMy44IDUxMiAwIDQ5OC4yIDAgNDgxLjNjMC03OC4xIDU1LjUtMTQzLjIgMTI5LjEtMTU4LjF6XCJdfSxsMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaXJjbGUtaGFsZi1zdHJva2VcIixpY29uOls1MTIsNTEyLFs5NjgwLFwiYWRqdXN0XCJdLFwiZjA0MlwiLFwiTTQ0OCAyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJWNDQ4YzEwNiAwIDE5Mi04NiAxOTItMTkyem02NCAwYzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2elwiXX0sYkw9bDAsQUw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2xhcHBlcmJvYXJkXCIsaWNvbjpbNTEyLDUxMixbXSxcImUxMzFcIixcIk00NDggMzJIMzYxLjlsLTEgMS0xMjcgMTI3aDkyLjFsMS0xTDQ1My44IDMyLjNjLTEuOS0uMi0zLjgtLjMtNS44LS4zem02NCAxMjhWOTZjMC0xNS4xLTUuMy0yOS4xLTE0LTQwbC0xMDQgMTA0SDUxMnpNMjk0LjEgMzJIMjAxLjlsLTEgMUw3My45IDE2MGg5Mi4xbDEtMSAxMjctMTI3ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2djY0SDYuMWwxLTEgMTI3LTEyN0g2NHpNNTEyIDE5MkgwVjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTkyelwiXX0saTA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2lyY2xlLXJhZGlhdGlvblwiLGljb246WzUxMiw1MTIsWzk3NjIsXCJyYWRpYXRpb24tYWx0XCJdLFwiZjdiYVwiLFwiTTI1NiA0NDhDMTUwIDQ0OCA2NCAzNjIgNjQgMjU2UzE1MCA2NCAyNTYgNjRzMTkyIDg2IDE5MiAxOTJzLTg2IDE5Mi0xOTIgMTkyem0wIDY0YzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0yMDAgMjU2YzAtMjAuNyAxMS4zLTM4LjggMjgtNDguNWwtMzYtNjIuM2MtOC44LTE1LjMtMjguNy0yMC44LTQyLTljLTI1LjYgMjIuNi00My45IDUzLjMtNTAuOSA4OC4xQzk1LjcgMjQxLjUgMTEwLjMgMjU2IDEyOCAyNTZsNzIgMHptMjggNDguNWwtMzYgNjIuNGMtOC44IDE1LjMtMy42IDM1LjIgMTMuMSA0MC44YzE2IDUuNCAzMy4xIDguMyA1MC45IDguM3MzNC45LTIuOSA1MC45LTguM2MxNi43LTUuNiAyMS45LTI1LjUgMTMuMS00MC44bC0zNi02Mi40Yy04LjIgNC44LTE3LjggNy41LTI4IDcuNXMtMTkuOC0yLjctMjgtNy41ek0zMTIgMjU2bDcyIDBjMTcuNyAwIDMyLjMtMTQuNSAyOC44LTMxLjhjLTctMzQuOC0yNS4zLTY1LjUtNTAuOS04OC4xYy0xMy4yLTExLjctMzMuMS02LjMtNDIgOWwtMzYgNjIuM2MxNi43IDkuNyAyOCAyNy44IDI4IDQ4LjV6bS01NiAzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyelwiXX0sQkw9aTAsbzA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmFzZWJhbGxcIixpY29uOls1MTIsNTEyLFsxMjkzNTgsOTkxOCxcImJhc2ViYWxsLWJhbGxcIl0sXCJmNDMzXCIsXCJNNjIuNyAyMjMuNGMtNC44IC40LTkuNyAuNi0xNC43IC42Yy0xNS42IDAtMzAuOC0yLTQ1LjItNS45QzE5LjIgMTA3LjEgMTA3LjEgMTkuMiAyMTguMSAyLjhDMjIyIDE3LjIgMjI0IDMyLjQgMjI0IDQ4YzAgNC45LS4yIDkuOC0uNiAxNC43Yy0uNyA4LjggNS44IDE2LjUgMTQuNiAxNy4zczE2LjUtNS44IDE3LjMtMTQuNmMuNS01LjcgLjctMTEuNSAuNy0xNy4zYzAtMTYuNS0xLjktMzIuNi01LjYtNDcuOWMxLjggMCAzLjctLjEgNS42LS4xQzM5Ny40IDAgNTEyIDExNC42IDUxMiAyNTZjMCAxLjkgMCAzLjctLjEgNS42Yy0xNS40LTMuNi0zMS40LTUuNi00Ny45LTUuNmMtNS44IDAtMTEuNiAuMi0xNy4zIC43Yy04LjggLjctMTUuNCA4LjUtMTQuNiAxNy4zczguNSAxNS40IDE3LjMgMTQuNmM0LjgtLjQgOS43LS42IDE0LjctLjZjMTUuNiAwIDMwLjggMiA0NS4yIDUuOUM0OTIuOCA0MDQuOSA0MDQuOSA0OTIuOCAyOTMuOSA1MDkuMkMyOTAgNDk0LjggMjg4IDQ3OS42IDI4OCA0NjRjMC00LjkgLjItOS44IC42LTE0LjdjLjctOC44LTUuOC0xNi41LTE0LjYtMTcuM3MtMTYuNSA1LjgtMTcuMyAxNC42Yy0uNSA1LjctLjcgMTEuNS0uNyAxNy4zYzAgMTYuNSAxLjkgMzIuNiA1LjYgNDcuOWMtMS44IDAtMy43IC4xLTUuNiAuMUMxMTQuNiA1MTIgMCAzOTcuNCAwIDI1NmMwLTEuOSAwLTMuNyAuMS01LjZDMTUuNCAyNTQuMSAzMS41IDI1NiA0OCAyNTZjNS44IDAgMTEuNi0uMiAxNy4zLS43YzguOC0uNyAxNS40LTguNSAxNC42LTE3LjNzLTguNS0xNS40LTE3LjMtMTQuNnpNMTIxLjMgMjA4Yy04IDMuNy0xMS42IDEzLjItNy45IDIxLjJzMTMuMiAxMS42IDIxLjIgNy45YzQ1LjItMjAuOCA4MS43LTU3LjIgMTAyLjUtMTAyLjVjMy43LTggLjItMTcuNS03LjktMjEuMnMtMTcuNS0uMi0yMS4yIDcuOWMtMTcuNiAzOC4zLTQ4LjUgNjkuMi04Ni43IDg2Ljd6bTI3Ny4yIDc0LjdjLTMuNy04LTEzLjItMTEuNi0yMS4yLTcuOWMtNDUuMiAyMC44LTgxLjcgNTcuMi0xMDIuNSAxMDIuNWMtMy43IDgtLjIgMTcuNSA3LjkgMjEuMnMxNy41IC4yIDIxLjItNy45YzE3LjYtMzguMyA0OC41LTY5LjIgODYuNy04Ni43YzgtMy43IDExLjYtMTMuMiA3LjktMjEuMnpcIl19LFRMPW8wLHlMPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImpldC1maWdodGVyLXVwXCIsaWNvbjpbNTEyLDUxMixbXSxcImU1MThcIixcIk0yNzAuNyA5LjdDMjY4LjIgMy44IDI2Mi40IDAgMjU2IDBzLTEyLjIgMy44LTE0LjcgOS43TDE5Ny4yIDExMi42Yy0zLjQgOC01LjIgMTYuNS01LjIgMjUuMnY3N2wtMTQ0IDg0VjI4MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY1NiAzMiAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0di04SDE5MnYzMi43TDEzMy41IDQ2OGMtMy41IDMtNS41IDcuNC01LjUgMTJ2MTZjMCA4LjggNy4yIDE2IDE2IDE2aDk2VjQ0OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2djY0aDk2YzguOCAwIDE2LTcuMiAxNi0xNlY0ODBjMC00LjYtMi05LTUuNS0xMkwzMjAgNDE2LjdWMzg0SDQ2NHY4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMzY4IDMzNiAyODBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2MTguOGwtMTQ0LTg0di03N2MwLTguNy0xLjgtMTcuMi01LjItMjUuMkwyNzAuNyA5Ljd6XCJdfSxuMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkaWFncmFtLXByb2plY3RcIixpY29uOls1NzYsNTEyLFtcInByb2plY3QtZGlhZ3JhbVwiXSxcImY1NDJcIixcIk0wIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMyaDk2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4Vjk2SDM4NFY4MGMwLTI2LjUgMjEuNS00OCA0OC00OGg5NmMyNi41IDAgNDggMjEuNSA0OCA0OHY5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEg0MzJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE2MEgxOTJ2MTZjMCAxLjctLjEgMy40LS4zIDVMMjcyIDI4OGg5NmMyNi41IDAgNDggMjEuNSA0OCA0OHY5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEgyNzJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjMzNmMwLTEuNyAuMS0zLjQgLjMtNUwxNDQgMjI0SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFY4MHpcIl19LFBMPW4wLEZMPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNvcHlcIixpY29uOls1MTIsNTEyLFtdLFwiZjBjNVwiLFwiTTIyNCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NFYyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDIyNHpNNjQgMTYwYy0zNS4zIDAtNjQgMjguNy02NCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMjg4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjM4NEgyODh2NjRINjRWMjI0aDY0VjE2MEg2NHpcIl19LGUyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZvbHVtZS14bWFya1wiLGljb246WzU3Niw1MTIsW1widm9sdW1lLW11dGVcIixcInZvbHVtZS10aW1lc1wiXSxcImY2YTlcIixcIk0zMDEuMSAzNC44QzMxMi42IDQwIDMyMCA1MS40IDMyMCA2NFY0NDhjMCAxMi42LTcuNCAyNC0xOC45IDI5LjJzLTI1IDMuMS0zNC40LTUuM0wxMzEuOCAzNTJINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjIyNGMwLTM1LjMgMjguNy02NCA2NC02NGg2Ny44TDI2Ni43IDQwLjFjOS40LTguNCAyMi45LTEwLjQgMzQuNC01LjN6TTQyNSAxNjdsNTUgNTUgNTUtNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC01NSA1NSA1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC01NS01NS01NSA1NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw1NS01NS01NS01NWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwelwiXX0sREw9ZTIsUkw9ZTIsVUw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZC1zcGFya2xlc1wiLGljb246WzY0MCw1MTIsW10sXCJlMDVkXCIsXCJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMjQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYyNDBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlYxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMlYzMjMuMWMtMTEuOSA0LjgtMjEuMyAxNC45LTI1IDI3LjhsLTguOSAzMS4yTDQ3OC45IDM5MUM0NjAuNiAzOTYuMyA0NDggNDEzIDQ0OCA0MzJjMCAxOC45IDEyLjUgMzUuNiAzMC42IDQwLjlDNDQ4LjQgNDk3LjQgNDA5LjkgNTEyIDM2OCA1MTJIMzQ4LjhjLTU5LjYgMC0xMTYuOS0yMi45LTE2MC02NEw3Ni40IDM0MWMtMTYtMTUuMi0xNi42LTQwLjYtMS40LTU2LjZzNDAuNi0xNi42IDU2LjYtMS40bDYwLjUgNTcuNmMwLTEuNS0uMS0zLjEtLjEtNC42VjY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWMjQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS03LjMgMzI2LjZjLTEuMS0zLjktNC43LTYuNi04LjctNi42cy03LjYgMi43LTguNyA2LjZMMjg4IDM1MmwtMjUuNCA3LjNjLTMuOSAxLjEtNi42IDQuNy02LjYgOC43czIuNyA3LjYgNi42IDguN0wyODggMzg0bDcuMyAyNS40YzEuMSAzLjkgNC43IDYuNiA4LjcgNi42czcuNi0yLjcgOC43LTYuNkwzMjAgMzg0bDI1LjQtNy4zYzMuOS0xLjEgNi42LTQuNyA2LjYtOC43cy0yLjctNy42LTYuNi04LjdMMzIwIDM1MmwtNy4zLTI1LjR6TTEwNCAxMjBsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkwxMDQgMTY4IDkwLjIgMjE2LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1NiAxNjggNy43IDE1NC4yQzMuMSAxNTIuOSAwIDE0OC43IDAgMTQ0czMuMS04LjkgNy43LTEwLjJMNTYgMTIwIDY5LjggNzEuN0M3MS4xIDY3LjEgNzUuMyA2NCA4MCA2NHM4LjkgMy4xIDEwLjIgNy43TDEwNCAxMjB6TTU4NCA0MDhsNDguMyAxMy44YzQuNiAxLjMgNy43IDUuNSA3LjcgMTAuMnMtMy4xIDguOS03LjcgMTAuMkw1ODQgNDU2bC0xMy44IDQ4LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1MzYgNDU2bC00OC4zLTEzLjhjLTQuNi0xLjMtNy43LTUuNS03LjctMTAuMnMzLjEtOC45IDcuNy0xMC4yTDUzNiA0MDhsMTMuOC00OC4zYzEuMy00LjYgNS41LTcuNyAxMC4yLTcuN3M4LjkgMy4xIDEwLjIgNy43TDU4NCA0MDh6XCJdfSxIMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJncmlwXCIsaWNvbjpbNDQ4LDUxMixbXCJncmlwLWhvcml6b250YWxcIl0sXCJmNThkXCIsXCJNMTI4IDEzNmMwLTIyLjEtMTcuOS00MC00MC00MEw0MCA5NkMxNy45IDk2IDAgMTEzLjkgMCAxMzZsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MEg4OGMyMi4xIDAgNDAtMTcuOSA0MC00MFYxMzZ6bTAgMTkyYzAtMjIuMS0xNy45LTQwLTQwLTQwSDQwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHY0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MEg4OGMyMi4xIDAgNDAtMTcuOSA0MC00MFYzMjh6bTMyLTE5MnY0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGg0OGMyMi4xIDAgNDAtMTcuOSA0MC00MFYxMzZjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwek0yODggMzI4YzAtMjIuMS0xNy45LTQwLTQwLTQwSDIwMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGg0OGMyMi4xIDAgNDAtMTcuOSA0MC00MFYzMjh6bTMyLTE5MnY0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGg0OGMyMi4xIDAgNDAtMTcuOSA0MC00MFYxMzZjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwek00NDggMzI4YzAtMjIuMS0xNy45LTQwLTQwLTQwSDM2MGMtMjIuMSAwLTQwIDE3LjktNDAgNDB2NDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBoNDhjMjIuMSAwIDQwLTE3LjkgNDAtNDBWMzI4elwiXX0scUw9SDAsejA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2hhcmUtZnJvbS1zcXVhcmVcIixpY29uOls1NzYsNTEyLFs2MTUwOSxcInNoYXJlLXNxdWFyZVwiXSxcImYxNGRcIixcIk0zODQgMjRjMC05LjYgNS43LTE4LjIgMTQuNS0yMnMxOS0yIDI2IDQuNmwxNDQgMTM2YzQuOCA0LjUgNy41IDEwLjggNy41IDE3LjRzLTIuNyAxMi45LTcuNSAxNy40bC0xNDQgMTM2Yy03IDYuNi0xNy4yIDguNC0yNiA0LjZzLTE0LjUtMTIuNS0xNC41LTIyVjIyNEgzNTIgMzM3LjVjLTQ1IDAtODEuNSAzNi41LTgxLjUgODEuNWMwIDIyLjMgMTAuMyAzNC4zIDE5LjIgNDAuNWM2LjggNC43IDEyLjggMTIgMTIuOCAyMC4zYzAgOS44LTggMTcuOC0xNy44IDE3LjhoLTIuNWMtMi40IDAtNC44LS40LTcuMS0xLjRDMjQyLjggMzc0LjggMTYwIDMzMy40IDE2MCAyNDBjMC03OS41IDY0LjUtMTQ0IDE0NC0xNDRoODBWMjR6TTAgMTQ0QzAgOTkuOCAzNS44IDY0IDgwIDY0SDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDgwYy04LjggMC0xNiA3LjItMTYgMTZWNDMyYzAgOC44IDcuMiAxNiAxNiAxNkgzNjhjOC44IDAgMTYtNy4yIDE2LTE2VjQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjE2YzAgNDQuMi0zNS44IDgwLTgwIDgwSDgwYy00NC4yIDAtODAtMzUuOC04MC04MFYxNDR6XCJdfSxHTD16MCxXTD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJndW5cIixpY29uOls1NzYsNTEyLFtdLFwiZTE5YlwiLFwiTTUyOCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHY4SDMyQzE0LjMgNjQgMCA3OC4zIDAgOTZWMjA4YzAgMTcuNyAxNC4zIDMyIDMyIDMySDQyYzIwLjggMCAzNi4xIDE5LjYgMzEgMzkuOEwzMyA0NDAuMmMtMi40IDkuNi0uMiAxOS43IDUuOCAyNy41UzU0LjEgNDgwIDY0IDQ4MGg5NmMxNC43IDAgMjcuNS0xMCAzMS0yNC4yTDIxNyAzNTJIMzIxLjRjMjMuNyAwIDQ0LjgtMTQuOSA1Mi43LTM3LjJMNDAwLjkgMjQwSDQzMmM4LjUgMCAxNi42LTMuNCAyMi42LTkuNEw0NzcuMyAyMDhINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjk2YzAtMTcuNy0xNC4zLTMyLTMyLTMySDUyOFY1NnpNMzIxLjQgMzA0SDIyOWwxNi02NGgxMDVsLTIxIDU4LjdjLTEuMSAzLjItNC4yIDUuMy03LjUgNS4zek04MCAxMjhINDY0YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXX0sVjA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3F1YXJlLXBob25lXCIsaWNvbjpbNDQ4LDUxMixbXCJwaG9uZS1zcXVhcmVcIl0sXCJmMDk4XCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em05MC43IDk2LjdjOS43LTIuNiAxOS45IDIuMyAyMy43IDExLjZsMjAgNDhjMy40IDguMiAxIDE3LjYtNS44IDIzLjJMMTY4IDIzMS43YzE2LjYgMzUuMiA0NS4xIDYzLjcgODAuMyA4MC4zbDIwLjItMjQuN2M1LjYtNi44IDE1LTkuMiAyMy4yLTUuOGw0OCAyMGM5LjMgMy45IDE0LjIgMTQgMTEuNiAyMy43bC0xMiA0NEMzMzYuOSAzNzggMzI5IDM4NCAzMjAgMzg0QzE5Ni4zIDM4NCA5NiAyODMuNyA5NiAxNjBjMC05IDYtMTYuOSAxNC43LTE5LjNsNDQtMTJ6XCJdfSxFTD1WMCxtMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwbHVzXCIsaWNvbjpbNDQ4LDUxMixbMTAxMzMsNjE1NDMsXCJhZGRcIl0sXCIyYlwiLFwiTTI1NiA4MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyMjRINDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJIMTkyVjQzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI4OEg0MDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjU2VjgwelwiXX0sSUw9bTAsT0w9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZXhwYW5kXCIsaWNvbjpbNDQ4LDUxMixbXSxcImYwNjVcIixcIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0djk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWOTZoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6TTY0IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmg5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg2NFYzNTJ6TTMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg2NHY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyMHpNNDQ4IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NEgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzUyelwiXX0sWEw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29tcHV0ZXJcIixpY29uOls2NDAsNTEyLFtdLFwiZTRlNVwiLFwiTTM4NCA5NlYzMjBINjRMNjQgOTZIMzg0ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjMyMGMwIDM1LjMgMjguNyA2NCA2NCA2NEgxODEuM2wtMTAuNyAzMkg5NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjc3LjNsLTEwLjctMzJIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em00NjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDY0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDUyOHptMTYgNjRoMzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZINTQ0Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0tMTYgODBjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDU0NGMtOC44IDAtMTYtNy4yLTE2LTE2em0zMiAyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LHM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwieG1hcmtcIixpY29uOlszMjAsNTEyLFsxMjg0NzMsMTAwMDUsMTAwMDYsMTAwNjAsMjE1LFwiY2xvc2VcIixcIm11bHRpcGx5XCIsXCJyZW1vdmVcIixcInRpbWVzXCJdLFwiZjAwZFwiLFwiTTMxMC42IDE1MC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE2MCAyMTAuNyA1NC42IDEwNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0wxMTQuNyAyNTYgOS40IDM2MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAzMDEuMyAyNjUuNCA0MDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIwNS4zIDI1NiAzMTAuNiAxNTAuNnpcIl19LFFMPXMsS0w9cyxqTD1zLEpMPXMsdjA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3dzLXVwLWRvd24tbGVmdC1yaWdodFwiLGljb246WzUxMiw1MTIsW1wiYXJyb3dzXCJdLFwiZjA0N1wiLFwiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDkuNC05LjRWMjI0SDEwOS4zbDkuNC05LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40SDIyNFY0MDIuN2wtOS40LTkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTkuNCA5LjRWMjg4SDQwMi43bC05LjQgOS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNEgyODhWMTA5LjNsOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHpcIl19LFpMPXYwLE0wPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNoYWxrYm9hcmQtdXNlclwiLGljb246WzY0MCw1MTIsW1wiY2hhbGtib2FyZC10ZWFjaGVyXCJdLFwiZjUxY1wiLFwiTTE2MCA2NGMwLTM1LjMgMjguNy02NCA2NC02NEg1NzZjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzUyYzAgMzUuMy0yOC43IDY0LTY0IDY0SDMzNi44Yy0xMS44LTI1LjUtMjkuOS00Ny41LTUyLjQtNjRIMzg0VjMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmg2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnYzMmg2NFY2NEwyMjQgNjR2NDkuMUMyMDUuMiAxMDIuMiAxODMuMyA5NiAxNjAgOTZWNjR6bTAgMjU2Yy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2czk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnptLTI2LjcgMzJoNTMuM0MyNjAuMyAzNTIgMzIwIDQxMS43IDMyMCA0ODUuM2MwIDE0LjctMTEuOSAyNi43LTI2LjcgMjYuN0gyNi43QzExLjkgNTEyIDAgNTAwLjEgMCA0ODUuM0MwIDQxMS43IDU5LjcgMzUyIDEzMy4zIDM1MnpcIl19LFlMPU0wLF9MPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlc28tc2lnblwiLGljb246WzM4NCw1MTIsW10sXCJlMjIyXCIsXCJNNjQgMzJDNDYuMyAzMiAzMiA0Ni4zIDMyIDY0djY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCA2NHY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjM4NGg4MGM2OC40IDAgMTI3LjctMzkgMTU2LjgtOTZIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyaC0uN2MuNS01LjMgLjctMTAuNiAuNy0xNnMtLjItMTAuNy0uNy0xNmguN2MxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMzIuOEMzMDMuNyA3MSAyNDQuNCAzMiAxNzYgMzJINjR6bTE5MC40IDk2SDk2Vjk2aDgwYzMwLjUgMCA1OC4yIDEyLjIgNzguNCAzMnpNOTYgMTkySDI4Ni45Yy43IDUuMiAxLjEgMTAuNiAxLjEgMTZzLS40IDEwLjgtMS4xIDE2SDk2VjE5MnptMTU4LjQgOTZjLTIwLjIgMTkuOC00Ny45IDMyLTc4LjQgMzJIOTZWMjg4SDI1NC40elwiXX0sJEw9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnVpbGRpbmctc2hpZWxkXCIsaWNvbjpbNTc2LDUxMixbXSxcImU0ZDhcIixcIk0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEgzMzZjMjYuNSAwIDQ4IDIxLjUgNDggNDhWMjA3bC00Mi40IDE3SDMwNCAyNzJjLTguOCAwLTE2IDcuMi0xNiAxNnYzMiAyNC4yVjMwNGMwIC45IC4xIDEuNyAuMiAyLjZjMi4zIDU4LjEgMjQuMSAxNDQuOCA5OC43IDIwMS41Yy01LjggMi41LTEyLjIgMy45LTE4LjkgMy45SDI0MFY0MzJjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh2ODBINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQ4ek04MCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIODB6bTgwIDE2djMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMjQwYzAtOC44LTcuMi0xNi0xNi0xNkgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnpNNjQgMTEydjMyYzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkg4MGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNzYgOTZjLTguOCAwLTE2IDcuMi0xNiAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZIMTc2em04MCAxNnYzMmMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjExMmMwLTguOC03LjItMTYtMTYtMTZIMjcyYy04LjggMC0xNiA3LjItMTYgMTZ6TTQyMy4xIDIyNS43YzUuNy0yLjMgMTIuMS0yLjMgMTcuOCAwbDEyMCA0OEM1NzAgMjc3LjQgNTc2IDI4Ni4yIDU3NiAyOTZjMCA2My4zLTI1LjkgMTY4LjgtMTM0LjggMjE0LjJjLTUuOSAyLjUtMTIuNiAyLjUtMTguNSAwQzMxMy45IDQ2NC44IDI4OCAzNTkuMyAyODggMjk2YzAtOS44IDYtMTguNiAxNS4xLTIyLjNsMTIwLTQ4ek01MjcuNCAzMTJMNDMyIDI3My44VjQ2MS43YzY4LjItMzMgOTEuNS05OSA5NS40LTE0OS43elwiXX0sY3A9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmFieVwiLGljb246WzQ0OCw1MTIsW10sXCJmNzdjXCIsXCJNMjk2IDg4YzAgMzkuOC0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJzNzIgMzIuMiA3MiA3MnpNMzkuNyAxNDQuNWMxMy0xNy45IDM4LTIxLjggNTUuOS04LjhMMTMxLjggMTYyYzI2LjggMTkuNSA1OS4xIDMwIDkyLjIgMzBzNjUuNC0xMC41IDkyLjItMzBsMzYuMi0yNi40YzE3LjktMTMgNDIuOS05IDU1LjkgOC44czkgNDIuOS04LjggNTUuOWwtMzYuMiAyNi40Yy0xMy42IDkuOS0yOC4xIDE4LjItNDMuMyAyNVYyODhIMTI4VjI1MS43Yy0xNS4yLTYuNy0yOS43LTE1LjEtNDMuMy0yNUw0OC41IDIwMC4zYy0xNy45LTEzLTIxLjgtMzgtOC44LTU1Ljl6bTg5LjggMTg0LjhsNjAuNiA1My0yNiAzNy4yIDI0LjMgMjQuM2MxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNnMtNDAuOSAxNS42LTU2LjYgMGwtNDgtNDhDNzAgNDM4LjYgNjguMSA0MTcgNzkuMiA0MDEuMWw1MC4yLTcxLjh6bTEyOC41IDUzbDYwLjYtNTMgNTAuMiA3MS44YzExLjEgMTUuOSA5LjIgMzcuNS00LjUgNTEuMmwtNDggNDhjLTE1LjYgMTUuNi00MC45IDE1LjYtNTYuNiAwcy0xNS42LTQwLjkgMC01Ni42TDI4NCA0MTkuNGwtMjYtMzcuMnpcIl19LGFwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInVzZXJzLWxpbmVcIixpY29uOls2NDAsNTEyLFtdLFwiZTU5MlwiLFwiTTIxMS4yIDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNMzIgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDg1LjZjMTAuMS0zOS40IDM4LjYtNzEuNSA3NS44LTg2LjZjLTkuNy02LTIxLjItOS40LTMzLjQtOS40SDk2Yy0zNS4zIDAtNjQgMjguNy02NCA2NHptNDYxLjYgMzJINTc2YzE3LjcgMCAzMi0xNC4zIDMyLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0SDQ0OGMtMTEuNyAwLTIyLjcgMy4xLTMyLjEgOC42YzM4LjEgMTQuOCA2Ny40IDQ3LjMgNzcuNyA4Ny40ek0zOTEuMiAyMjYuNGMtNi45LTEuNi0xNC4yLTIuNC0yMS42LTIuNGgtOTZjLTguNSAwLTE2LjcgMS4xLTI0LjUgMy4xYy0zMC44IDguMS01NS42IDMxLjEtNjYuMSA2MC45Yy0zLjUgMTAtNS41IDIwLjgtNS41IDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMmMwLTExLjItMS45LTIyLTUuNS0zMmMtMTAuOC0zMC43LTM2LjgtNTQuMi02OC45LTYxLjZ6TTU2My4yIDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNMzIxLjYgMTkyYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwczM1LjggODAgODAgODB6TTMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzJ6XCJdfSx0MD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJxdW90ZS1sZWZ0XCIsaWNvbjpbNDQ4LDUxMixbODIyMCxcInF1b3RlLWxlZnQtYWx0XCJdLFwiZjEwZFwiLFwiTTAgMjE2QzAgMTQ5LjcgNTMuNyA5NiAxMjAgOTZoOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmgtOGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ2OGg2NGMzNS4zIDAgNjQgMjguNyA2NCA2NHY2NGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMzIwIDI4OCAyMTZ6bTI1NiAwYzAtNjYuMyA1My43LTEyMCAxMjAtMTIwaDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJoLThjLTMwLjkgMC01NiAyNS4xLTU2IDU2djhoNjRjMzUuMyAwIDY0IDI4LjcgNjQgNjR2NjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMzIwYy0zNS4zIDAtNjQtMjguNy02NC02NFYzMjAgMjg4IDIxNnpcIl19LHNwPXQwLGVwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRyYWN0b3JcIixpY29uOls2NDAsNTEyLFsxMjg2NjhdLFwiZjcyMlwiLFwiTTk2IDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0SDI2Ni4zYzI2LjIgMCA0OS43IDE1LjkgNTkuNCA0MC4yTDM3My43IDE2MEg0ODBWMTI2LjJjMC0yNC44IDUuOC00OS4zIDE2LjktNzEuNmwyLjUtNWM3LjktMTUuOCAyNy4xLTIyLjIgNDIuOS0xNC4zczIyLjIgMjcuMSAxNC4zIDQyLjlsLTIuNSA1Yy02LjcgMTMuMy0xMC4xIDI4LTEwLjEgNDIuOVYxNjBoNTZjMjIuMSAwIDQwIDE3LjkgNDAgNDB2NDUuNGMwIDE2LjUtOC41IDMxLjktMjIuNiA0MC43bC00My4zIDI3LjFjLTE0LjItNS45LTI5LjgtOS4yLTQ2LjEtOS4yYy0zOS4zIDAtNzQuMSAxOC45LTk2IDQ4SDM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMmgtOC4yYy0xLjcgNC44LTMuNyA5LjUtNS44IDE0LjFsNS44IDUuOGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMjIuNiAyMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNS44LTUuOGMtNC42IDIuMi05LjMgNC4xLTE0LjEgNS44VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMydi04LjJjLTQuOC0xLjctOS41LTMuNy0xNC4xLTUuOGwtNS44IDUuOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBMNDAuMiA0NDkuMWMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsNS44LTUuOGMtMi4yLTQuNi00LjEtOS4zLTUuOC0xNC4xSDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYzMjBjMC0xNy43IDE0LjMtMzIgMzItMzJoOC4yYzEuNy00LjggMy43LTkuNSA1LjgtMTQuMWwtNS44LTUuOGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsMjIuNi0yMi42YzktOSAyMS45LTExLjUgMzMuMS03LjZWMTkyIDE2MCA2NHptMTcwLjMgMEgxNjB2OTZoMzJIMzA0LjdMMjY2LjMgNjR6TTE3NiAyNTZjLTQ0LjIgMC04MCAzNS44LTgwIDgwczM1LjggODAgODAgODBzODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MHpNNTI4IDQ0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em0wIDY0Yy00OC42IDAtODgtMzkuNC04OC04OGMwLTI5LjggMTQuOC01Ni4xIDM3LjQtNzJjMTQuMy0xMC4xIDMxLjgtMTYgNTAuNi0xNmMyLjcgMCA1LjMgLjEgNy45IC4zYzQ0LjkgNCA4MC4xIDQxLjcgODAuMSA4Ny43YzAgNDguNi0zOS40IDg4LTg4IDg4elwiXX0saDA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidHJhc2gtYXJyb3ctdXBcIixpY29uOls0NDgsNTEyLFtcInRyYXNoLXJlc3RvcmVcIl0sXCJmODI5XCIsXCJNMTYzLjggMEgyODQuMmMxMi4xIDAgMjMuMiA2LjggMjguNiAxNy43TDMyMCAzMmg5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJoOTZsNy4yLTE0LjNDMTQwLjYgNi44IDE1MS43IDAgMTYzLjggMHpNMzIgMTI4SDQxNkwzOTQuOCA0NjdjLTEuNiAyNS4zLTIyLjYgNDUtNDcuOSA0NUgxMDEuMWMtMjUuMyAwLTQ2LjMtMTkuNy00Ny45LTQ1TDMyIDEyOHptMTkyIDY0Yy02LjQgMC0xMi41IDIuNS0xNyA3bC04MCA4MGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDM5LTM5VjQwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjI3My45bDM5IDM5YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODAtODBjLTQuNS00LjUtMTAuNi03LTE3LTd6XCJdfSxmcD1oMCxycD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy1kb3duLXVwLWxvY2tcIixpY29uOls2NDAsNTEyLFtdLFwiZTRiMFwiLFwiTTE1MC42IDUwMi42bDk2LTk2YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDE2MCA0MDIuN1YyODhINDE2VjI3MmMwLTE3LjIgMy45LTMzLjUgMTAuOC00OEgzNTJWMTA5LjNsNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy02LTYtMTQuMS05LjQtMjIuNi05LjRzLTE2LjYgMy40LTIyLjYgOS40bC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyODggMTA5LjNWMjI0bC0xMjggMEg5NmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg5NlY0MDIuN0w1NC42IDM2MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHpNMTYwIDE5MlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYxOTJoNjR6TTI4OCAzMjBWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzIwSDI4OHptMjQwLTgwYzE3LjcgMCAzMiAxNC4zIDMyIDMydjQ4SDQ5NlYyNzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bS04MCAzMnY0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMySDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMlYzNTJjMC0xNy43LTE0LjMtMzItMzItMzJWMjcyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwelwiXX0sbHA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibGluZXMtbGVhbmluZ1wiLGljb246WzQ0OCw1MTIsW10sXCJlNTFlXCIsXCJNMjIyLjQgNzQuMWM1LjYtMTYuOC0zLjUtMzQuOS0yMC4yLTQwLjVzLTM0LjkgMy41LTQwLjUgMjAuMmwtMTI4IDM4NGMtNS42IDE2LjggMy41IDM0LjkgMjAuMiA0MC41czM0LjktMy41IDQwLjUtMjAuMmwxMjgtMzg0em03MC45LTQxLjdjLTE3LjQtMi45LTMzLjkgOC45LTM2LjggMjYuM2wtNjQgMzg0Yy0yLjkgMTcuNCA4LjkgMzMuOSAyNi4zIDM2LjhzMzMuOS04LjkgMzYuOC0yNi4zbDY0LTM4NGMyLjktMTcuNC04LjktMzMuOS0yNi4zLTM2Ljh6TTM4NCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNjRjMC0xNy43LTE0LjMtMzItMzItMzJ6XCJdfSxpcD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJydWxlci1jb21iaW5lZFwiLGljb246WzUxMiw1MTIsW10sXCJmNTQ2XCIsXCJNLjIgNDY4LjlDMi43IDQ5My4xIDIzLjEgNTEyIDQ4IDUxMmw5NiAwIDMyMCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTY0IDAgMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwLTgwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODAgMCAwLTY0LTgwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODAgMCAwLTY0LTgwIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODAgMCAwLTQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgMzY4bDAgOTZjMCAxLjcgLjEgMy4zIC4yIDQuOXpcIl19LG9wPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNvcHlyaWdodFwiLGljb246WzUxMiw1MTIsWzE2OV0sXCJmMWY5XCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMTk5LjQgMzEyLjZjMzEuMiAzMS4yIDgxLjkgMzEuMiAxMTMuMSAwYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtNTAgNTAtMTMxIDUwLTE4MSAwcy01MC0xMzEgMC0xODFzMTMxLTUwIDE4MSAwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTMxLjItMzEuMi04MS45LTMxLjItMTEzLjEgMHMtMzEuMiA4MS45IDAgMTEzLjF6XCJdfSxucD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJlcXVhbHNcIixpY29uOls0NDgsNTEyLFs2Mjc2NF0sXCIzZFwiLFwiTTQ4IDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0MDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJINDh6bTAgMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQwMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg0OHpcIl19LEhwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJsZW5kZXJcIixpY29uOls1MTIsNTEyLFtdLFwiZjUxN1wiLFwiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwaDY0IDMySDQ3MC4xYzIxLjEgMCAzNi40IDIwLjEgMzAuOSA0MC40TDQ5NC41IDY0SDMzNmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNkg0ODUuOGwtMTcuNSA2NEgzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZINDU5LjZsLTE3LjUgNjRIMzM2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDk3LjVMNDE2IDM1MkgxNjBsLTguNy05Nkg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6TTE0NS41IDE5MkwxMzMuOCA2NEg2NFYxOTJoODEuNXpNMTQ0IDM4NEg0MzJjMjYuNSAwIDQ4IDIxLjUgNDggNDh2MzJjMCAyNi41LTIxLjUgNDgtNDggNDhIMTQ0Yy0yNi41IDAtNDgtMjEuNS00OC00OFY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTE0NCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMGg2NCAzMkg0NzAuMWMyMS4xIDAgMzYuNCAyMC4xIDMwLjkgNDAuNEw0OTQuNSA2NEgzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZINDg1LjhsLTE3LjUgNjRIMzM2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2SDQ1OS42bC0xNy41IDY0SDMzNmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg5Ny41TDQxNiAzNTJIMTYwbC04LjctOTZINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjY0ek0xNDUuNSAxOTJMMTMzLjggNjRINjRWMTkyaDgxLjV6TTE0NCAzODRINDMyYzI2LjUgMCA0OCAyMS41IDQ4IDQ4djMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDE0NGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhWNDMyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em0xNDQgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl19LHpwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRlZXRoXCIsaWNvbjpbNTc2LDUxMixbXSxcImY2MmVcIixcIk0wIDEyOEMwIDc1IDQzIDMyIDk2IDMySDQ4MGM1MyAwIDk2IDQzIDk2IDk2VjM4NGMwIDUzLTQzIDk2LTk2IDk2SDk2Yy01MyAwLTk2LTQzLTk2LTk2VjEyOHptMTc2IDQ4djU2YzAgMTMuMyAxMC43IDI0IDI0IDI0aDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE3NmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHptMTc2LTQ4Yy0yNi41IDAtNDggMjEuNS00OCA0OHY1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTQ4IDIwOHYyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYyMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6TTk2IDM4NGMyNi41IDAgNDgtMjEuNSA0OC00OFYzMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRINzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0djI0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em04MC00OGMwIDI2LjUgMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4VjMxMmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyMDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0djI0em0xNzYgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzEyYzAtMTMuMy0xMC43LTI0LTI0LTI0SDMyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2MjRjMCAyNi41IDIxLjUgNDggNDggNDh6bTgwLTE3NnYyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg0OGMxMy4zIDAgMjQtMTAuNyAyNC0yNFYyMDhjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6bTQ4IDE3NmMyNi41IDAgNDgtMjEuNSA0OC00OFYzMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRINDU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHYyNGMwIDI2LjUgMjEuNSA0OCA0OCA0OHpcIl19LGU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2hla2VsLXNpZ25cIixpY29uOls0NDgsNTEyLFs4MzYyLFwiaWxzXCIsXCJzaGVrZWxcIixcInNoZXFlbFwiLFwic2hlcWVsLXNpZ25cIl0sXCJmMjBiXCIsXCJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY5NkgxOTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMTYwYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4SDMyek0zMjAgNDgwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjM1MmMwIDM1LjMtMjguNyA2NC02NCA2NEgxOTJWMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzMjB6XCJdfSxWcD1lLG1wPWUsdnA9ZSxNcD1lLHRwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1hcFwiLGljb246WzU3Niw1MTIsWzEyODUwNiw2MjA3Ml0sXCJmMjc5XCIsXCJNMzg0IDQ3Ni4xTDE5MiA0MjEuMlYzNS45TDM4NCA5MC44VjQ3Ni4xem0zMi0xLjJWODguNEw1NDMuMSAzNy41YzE1LjgtNi4zIDMyLjkgNS4zIDMyLjkgMjIuM1YzOTQuNmMwIDkuOC02IDE4LjYtMTUuMSAyMi4zTDQxNiA0NzQuOHpNMTUuMSA5NS4xTDE2MCAzNy4yVjQyMy42TDMyLjkgNDc0LjVDMTcuMSA0ODAuOCAwIDQ2OS4yIDAgNDUyLjJWMTE3LjRjMC05LjggNi0xOC42IDE1LjEtMjIuM3pcIl19LGhwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJvY2tldFwiLGljb246WzUxMiw1MTIsW10sXCJmMTM1XCIsXCJNMTU2LjYgMzg0LjlMMTI1LjcgMzU0Yy04LjUtOC41LTExLjUtMjAuOC03LjctMzIuMmMzLTguOSA3LTIwLjUgMTEuOC0zMy44TDI0IDI4OGMtOC42IDAtMTYuNi00LjYtMjAuOS0xMi4xcy00LjItMTYuNyAuMi0yNC4xbDUyLjUtODguNWMxMy0yMS45IDM2LjUtMzUuMyA2MS45LTM1LjNsODIuMyAwYzIuNC00IDQuOC03LjcgNy4yLTExLjNDMjg5LjEtNC4xIDQxMS4xLTguMSA0ODMuOSA1LjNjMTEuNiAyLjEgMjAuNiAxMS4yIDIyLjggMjIuOGMxMy40IDcyLjkgOS4zIDE5NC44LTExMS40IDI3Ni43Yy0zLjUgMi40LTcuMyA0LjgtMTEuMyA3LjJ2ODIuM2MwIDI1LjQtMTMuNCA0OS0zNS4zIDYxLjlsLTg4LjUgNTIuNWMtNy40IDQuNC0xNi42IDQuNS0yNC4xIC4ycy0xMi4xLTEyLjItMTIuMS0yMC45VjM4MC44Yy0xNC4xIDQuOS0yNi40IDguOS0zNS43IDExLjljLTExLjIgMy42LTIzLjQgLjUtMzEuOC03Ljh6TTM4NCAxNjhjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MHpcIl19LEMwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBob3RvLWZpbG1cIixpY29uOls2NDAsNTEyLFtcInBob3RvLXZpZGVvXCJdLFwiZjg3Y1wiLFwiTTI1NiAwSDU3NmMzNS4zIDAgNjQgMjguNyA2NCA2NFYyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRIMjU2Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NGMwLTM1LjMgMjguNy02NCA2NC02NHpNNDc2IDEwNi43QzQ3MS41IDEwMCA0NjQgOTYgNDU2IDk2cy0xNS41IDQtMjAgMTAuN2wtNTYgODRMMzYyLjcgMTY5Yy00LjYtNS43LTExLjUtOS0xOC43LTlzLTE0LjIgMy4zLTE4LjcgOWwtNjQgODBjLTUuOCA3LjItNi45IDE3LjEtMi45IDI1LjRzMTIuNCAxMy42IDIxLjYgMTMuNmg4MCA0OEg1NTJjOC45IDAgMTctNC45IDIxLjItMTIuN3MzLjctMTcuMy0xLjItMjQuNmwtOTYtMTQ0ek0zMzYgOTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek02NCAxMjhoOTZWMzg0djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMySDMyMGMxNy43IDAgMzItMTQuMyAzMi0zMlYzODRINTEydjY0YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxOTJjMC0zNS4zIDI4LjctNjQgNjQtNjR6bTggNjRjLTguOCAwLTE2IDcuMi0xNiAxNnYxNmMwIDguOCA3LjIgMTYgMTYgMTZIODhjOC44IDAgMTYtNy4yIDE2LTE2VjIwOGMwLTguOC03LjItMTYtMTYtMTZINzJ6bTAgMTA0Yy04LjggMC0xNiA3LjItMTYgMTZ2MTZjMCA4LjggNy4yIDE2IDE2IDE2SDg4YzguOCAwIDE2LTcuMiAxNi0xNlYzMTJjMC04LjgtNy4yLTE2LTE2LTE2SDcyem0wIDEwNGMtOC44IDAtMTYgNy4yLTE2IDE2djE2YzAgOC44IDcuMiAxNiAxNiAxNkg4OGM4LjggMCAxNi03LjIgMTYtMTZWNDE2YzAtOC44LTcuMi0xNi0xNi0xNkg3MnptMzM2IDE2djE2YzAgOC44IDcuMiAxNiAxNiAxNmgxNmM4LjggMCAxNi03LjIgMTYtMTZWNDE2YzAtOC44LTcuMi0xNi0xNi0xNkg0MjRjLTguOCAwLTE2IDcuMi0xNiAxNnpcIl19LENwPUMwLExwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZvbGRlci1taW51c1wiLGljb246WzUxMiw1MTIsW10sXCJmNjVkXCIsXCJNNDQ4IDQ4MEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMTgxLjVjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMjYuNSAyNi41YzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdINDQ4YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NHpNMTg0IDI3MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgzMjhjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMTg0elwiXX0scHA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3RvcmVcIixpY29uOls1NzYsNTEyLFtdLFwiZjU0ZVwiLFwiTTU0Ny42IDEwMy44TDQ5MC4zIDEzLjFDNDg1LjIgNSA0NzYuMSAwIDQ2Ni40IDBIMTA5LjZDOTkuOSAwIDkwLjggNSA4NS43IDEzLjFMMjguMyAxMDMuOGMtMjkuNiA0Ni44LTMuNCAxMTEuOSA1MS45IDExOS40YzQgLjUgOC4xIC44IDEyLjEgLjhjMjYuMSAwIDQ5LjMtMTEuNCA2NS4yLTI5YzE1LjkgMTcuNiAzOS4xIDI5IDY1LjIgMjljMjYuMSAwIDQ5LjMtMTEuNCA2NS4yLTI5YzE1LjkgMTcuNiAzOS4xIDI5IDY1LjIgMjljMjYuMiAwIDQ5LjMtMTEuNCA2NS4yLTI5YzE2IDE3LjYgMzkuMSAyOSA2NS4yIDI5YzQuMSAwIDguMS0uMyAxMi4xLS44YzU1LjUtNy40IDgxLjgtNzIuNSA1Mi4xLTExOS40ek00OTkuNyAyNTQuOWwtLjEgMGMtNS4zIC43LTEwLjcgMS4xLTE2LjIgMS4xYy0xMi40IDAtMjQuMy0xLjktMzUuNC01LjNWMzg0SDEyOFYyNTAuNmMtMTEuMiAzLjUtMjMuMiA1LjQtMzUuNiA1LjRjLTUuNSAwLTExLS40LTE2LjMtMS4xbC0uMSAwYy00LjEtLjYtOC4xLTEuMy0xMi0yLjNWMzg0djY0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYzODQgMjUyLjZjLTQgMS04IDEuOC0xMi4zIDIuM3pcIl19LGRwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFycm93LXRyZW5kLXVwXCIsaWNvbjpbNTc2LDUxMixbXSxcImUwOThcIixcIk0zODQgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMlYyODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjA1LjNMMzQyLjYgMzc0LjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwTDE5MiAyNjkuMyA1NC42IDQwNi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwTDMyMCAzMDYuNyA0NjYuNyAxNjBIMzg0elwiXX0sdXA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGx1Zy1jaXJjbGUtbWludXNcIixpY29uOls1NzYsNTEyLFtdLFwiZTU1ZVwiLFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMydjMyYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQxMi44YzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyek01NzYgMzY4YzAtNzkuNS02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NHptLTY0IDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNkg0OTZjOC44IDAgMTYgNy4yIDE2IDE2elwiXX0sTDA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic2lnbi1oYW5naW5nXCIsaWNvbjpbNTEyLDUxMixbXCJzaWduXCJdLFwiZjRkOVwiLFwiTTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRsMzUyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM1MiAwVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxMjhIMzJDMTQuMyAxMjggMCAxMTMuNyAwIDk2UzE0LjMgNjQgMzIgNjRINjRWMzJDNjQgMTQuMyA3OC4zIDAgOTYgMHptOTYgMTYwSDQ0OGMxNy43IDAgMzIgMTQuMyAzMiAzMlYzNTJjMCAxNy43LTE0LjMgMzItMzIgMzJIMTkyYy0xNy43IDAtMzItMTQuMy0zMi0zMlYxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdfSx4cD1MMCxncD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiZXppZXItY3VydmVcIixpY29uOls2NDAsNTEyLFtdLFwiZjU1YlwiLFwiTTI5NiAxMzZWODhoNDh2NDhIMjk2ek0yODggMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djRIMTIxLjZDMTExLjIgNjIuNyA4OS4zIDQ4IDY0IDQ4QzI4LjcgNDggMCA3Ni43IDAgMTEyczI4LjcgNjQgNjQgNjRjMjUuMyAwIDQ3LjItMTQuNyA1Ny42LTM2aDY2LjljLTU4LjkgMzkuNi05OC45IDEwNS0xMDQgMTgwSDgwYy0yNi41IDAtNDggMjEuNS00OCA0OHY2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg2NGMyNi41IDAgNDgtMjEuNSA0OC00OFYzNjhjMC0yNi41LTIxLjUtNDgtNDgtNDhoLTMuM2M1LjktNjcgNDguNS0xMjMuNCAxMDcuNS0xNDkuMWM4LjYgMTIuNyAyMy4yIDIxLjEgMzkuOCAyMS4xaDY0YzE2LjYgMCAzMS4xLTguNCAzOS44LTIxLjFjNTkgMjUuNyAxMDEuNiA4Mi4xIDEwNy41IDE0OS4xSDQ5NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2NjRjMCAyNi41IDIxLjUgNDggNDggNDhoNjRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMzY4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4aC00LjVjLTUtNzUtNDUuMS0xNDAuNC0xMDQtMTgwaDY2LjljMTAuNCAyMS4zIDMyLjMgMzYgNTcuNiAzNmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NGMtMjUuMyAwLTQ3LjIgMTQuNy01Ny42IDM2SDQwMFY4MGMwLTI2LjUtMjEuNS00OC00OC00OEgyODh6TTg4IDM3Nmg0OHY0OEg4OFYzNzZ6bTQxNiA0OFYzNzZoNDh2NDhINTA0elwiXX0sU3A9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmVsbC1zbGFzaFwiLGljb246WzY0MCw1MTIsWzEyODI3Nyw2MTk0M10sXCJmMWY2XCIsXCJNMzguOCA1LjFDMjguNC0zLjEgMTMuMy0xLjIgNS4xIDkuMlMtMS4yIDM0LjcgOS4yIDQyLjlsNTkyIDQ2NGMxMC40IDguMiAyNS41IDYuMyAzMy43LTQuMXM2LjMtMjUuNS00LjEtMzMuN2wtODcuNS02OC42Yy41LTEuNyAuNy0zLjUgLjctNS40YzAtMjcuNi0xMS01NC4xLTMwLjUtNzMuN0w1MTIgMzIwYy0yMC41LTIwLjUtMzItNDguMy0zMi03Ny4zVjIwOGMwLTc3LjQtNTUtMTQyLTEyOC0xNTYuOFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlY1MS4yYy00Mi42IDguNi03OSAzNC4yLTEwMiA2OS4zTDM4LjggNS4xek0xNjAgMjQyLjdjMCAyOS0xMS41IDU2LjgtMzIgNzcuM2wtMS41IDEuNUMxMDcgMzQxIDk2IDM2Ny41IDk2IDM5NS4yYzAgMTEuNSA5LjMgMjAuOCAyMC44IDIwLjhINDA2LjJMMTYwIDIyMi4xdjIwLjd6TTM4NCA0NDhIMzIwIDI1NmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM3MyOC4zIDE4LjcgNDUuMyAxOC43czMzLjMtNi43IDQ1LjMtMTguN3MxOC43LTI4LjMgMTguNy00NS4zelwiXX0scDA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGFibGV0XCIsaWNvbjpbNDQ4LDUxMixbXCJ0YWJsZXQtYW5kcm9pZFwiXSxcImYzZmJcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0xNzYgNDMyaDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE3NmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnpcIl19LE5wPXAwLHdwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNjaG9vbC1mbGFnXCIsaWNvbjpbNTc2LDUxMixbXSxcImU1NmVcIixcIk0yODggMEg0MDBjOC44IDAgMTYgNy4yIDE2IDE2VjY0YzAgOC44LTcuMiAxNi0xNiAxNkgzMjBWOTUuNUw0MTAuMyAxNjBINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEgzMzZWNDAwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4VjUxMkg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0SDE2NS43TDI1NiA5NS41VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem00OCAyNDBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4ek04MCAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZIODB6bTM2OCAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjI0MGMwLTguOC03LjItMTYtMTYtMTZINDY0Yy04LjggMC0xNiA3LjItMTYgMTZ6TTgwIDM1MmMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZWMzY4YzAtOC44LTcuMi0xNi0xNi0xNkg4MHptMzg0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnY2NGMwIDguOCA3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2VjM2OGMwLTguOC03LjItMTYtMTYtMTZINDY0elwiXX0sa3A9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsbFwiLGljb246WzU3Niw1MTIsW10sXCJmNTc1XCIsXCJNMTE4LjYgOS40QzEwNi4xLTMuMSA4NS45LTMuMSA3My40IDkuNHMtMTIuNSAzMi44IDAgNDUuM0wxNTQuNyAxMzYgNjIuNiAyMjguMWMtMzcuNSAzNy41LTM3LjUgOTguMyAwIDEzNS44TDE4MC4xIDQ4MS40YzM3LjUgMzcuNSA5OC4zIDM3LjUgMTM1LjggMEw1MDYuMyAyOTAuOWMyOC4xLTI4LjEgMjguMS03My43IDAtMTAxLjhMMzU0LjkgMzcuN2MtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwTDIwMCA5MC43IDExOC42IDkuNHpNMjAwIDE4MS4zbDQ5LjQgNDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDI0NS4zIDEzNmw1My4xLTUzLjFjMy4xLTMuMSA4LjItMy4xIDExLjMgMEw0NjEuMSAyMzQuM2MzLjEgMy4xIDMuMSA4LjIgMCAxMS4zTDQxOC43IDI4OEg5OS41YzEuNC01LjQgNC4yLTEwLjQgOC40LTE0LjZMMjAwIDE4MS4zelwiXX0sYnA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYW5nbGUtdXBcIixpY29uOls0NDgsNTEyLFs4OTYzXSxcImYxMDZcIixcIk0yMDEuNCAxMzcuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDIyNCAyMDUuMyA4Ni42IDM0Mi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYwelwiXX0sQXA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZHJ1bXN0aWNrLWJpdGVcIixpY29uOls1MTIsNTEyLFtdLFwiZjZkN1wiLFwiTTE2MCAyNjUuMmMwIDguNS0zLjQgMTYuNi05LjQgMjIuNmwtMjYuOCAyNi44Yy0xMi4zIDEyLjMtMzIuNSAxMS40LTQ5LjQgNy4yQzY5LjggMzIwLjYgNjUgMzIwIDYwIDMyMGMtMzMuMSAwLTYwIDI2LjktNjAgNjBzMjYuOSA2MCA2MCA2MGM2LjMgMCAxMiA1LjcgMTIgMTJjMCAzMy4xIDI2LjkgNjAgNjAgNjBzNjAtMjYuOSA2MC02MGMwLTUtLjYtOS44LTEuOC0xNC41Yy00LjItMTYuOS01LjItMzcuMSA3LjItNDkuNGwyNi44LTI2LjhjNi02IDE0LjEtOS40IDIyLjYtOS40SDMzNmM2LjMgMCAxMi40LS4zIDE4LjUtMWMxMS45LTEuMiAxNi40LTE1LjUgMTAuOC0yNmMtOC41LTE1LjgtMTMuMy0zMy44LTEzLjMtNTNjMC02MS45IDUwLjEtMTEyIDExMi0xMTJjOCAwIDE1LjcgLjggMjMuMiAyLjRjMTEuNyAyLjUgMjQuMS01LjkgMjItMTcuNkM0OTQuNSA2Mi41IDQyMi41IDAgMzM2IDBDMjM4LjggMCAxNjAgNzguOCAxNjAgMTc2djg5LjJ6XCJdfSxCcD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob2xseS1iZXJyeVwiLGljb246WzUxMiw1MTIsW10sXCJmN2FhXCIsXCJNMjU2IDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6bS04MCA5NmMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4ek0yNzYuOCAzODMuOGMxIC4xIDIuMSAuMiAzLjIgLjJjMzkuOCAwIDcyIDMyLjIgNzIgNzJ2MjIuN2MwIDE2LjQgMTYgMjcuOSAzMS42IDIyLjhsMTIuOC00LjNjMTgtNiAzNy4zLTYuNSA1NS42LTEuNWwxOS40IDUuM2MxNy45IDQuOSAzNC40LTExLjYgMjkuNS0yOS41TDQ5NS42IDQ1MmMtNS0xOC4zLTQuNC0zNy42IDEuNS01NS42bDQuMy0xMi44YzUuMi0xNS41LTYuNC0zMS42LTIyLjgtMzEuNmMtMzQuNiAwLTYyLjctMjguMS02Mi43LTYyLjd2LTMyYzAtMTYuNC0xNi0yNy45LTMxLjYtMjIuOGwtMTIuOCA0LjNjLTE4IDYtMzcuMyA2LjUtNTUuNiAxLjVsLTI5LjYtOC4xYy0yLjktLjgtNS45LTEtOC43LS43YzQuMiA5LjcgNS44IDIwLjggMy43IDMyLjNMMjc1IDI5OC43Yy0xLjUgOC40LTEuNCAxNyAuNSAyNS4zbDUuMyAyMy45YzIuOCAxMi43IDEuMSAyNS4yLTQgMzUuOXpNMTI3LjYgMjM0LjVjLTE1LjUtNS4yLTMxLjYgNi40LTMxLjYgMjIuOHYzMkM5NiAzMjMuOSA2Ny45IDM1MiAzMy4zIDM1MmMtMTYuNCAwLTI3LjkgMTYtMjIuOCAzMS42bDQuMyAxMi44YzYgMTggNi41IDM3LjMgMS41IDU1LjZsLTUuMyAxOS40QzYuMiA0ODkuNCAyMi42IDUwNS44IDQwLjUgNTAxTDYwIDQ5NS42YzE4LjMtNSAzNy42LTQuNSA1NS42IDEuNWwxMi44IDQuM2MxNS41IDUuMiAzMS42LTYuNCAzMS42LTIyLjh2LTMyYzAtMzQuNiAyOC4xLTYyLjcgNjIuNy02Mi43YzE2LjQgMCAyNy45LTE2IDIyLjgtMzEuNmwtNC4zLTEyLjhjLTYtMTgtNi41LTM3LjMtMS41LTU1LjZsNS4zLTE5LjRjNC45LTE3LjktMTEuNi0zNC40LTI5LjUtMjkuNUwxOTYgMjQwLjRjLTE4LjMgNS0zNy42IDQuNC01NS42LTEuNWwtMTIuOC00LjN6TTM4NCAxNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4elwiXX0sVHA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hldnJvbi1sZWZ0XCIsaWNvbjpbMzg0LDUxMixbOTAwMV0sXCJmMDUzXCIsXCJNNDEuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTkyIDE5MmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDEwOS4zIDI1NiAyNzguNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyelwiXX0seXA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmFjdGVyaWFcIixpY29uOls2NDAsNTEyLFtdLFwiZTA1OVwiLFwiTTMwNC45IC43Yy05LjYtMi43LTE5LjUgMi44LTIyLjMgMTIuNGwtMy4xIDExYy03LjQtLjMtMTQuOSAuNC0yMi40IDIuMWMtOSAyLjEtMTcuOCA0LjQtMjYuMiA3bC00LjQtMTAuM2MtMy45LTkuMS0xNC41LTEzLjQtMjMuNi05LjVzLTEzLjQgMTQuNS05LjUgMjMuNmwzLjYgOC41Yy0xNi41IDcuMS0zMS41IDE1LjEtNDUuMiAyMy45TDE0NyA2MmMtNS41LTguMy0xNi43LTEwLjUtMjUtNXMtMTAuNSAxNi43LTUgMjVsNS44IDguN2MtMTMuNSAxMS4yLTI1LjMgMjMuMS0zNS41IDM1LjNsLTEwLjEtOC4xYy03LjgtNi4yLTE5LjEtNS0yNS4zIDIuOHMtNSAxOS4xIDIuOCAyNS4zTDY2IDE1NWMtMS42IDIuNC0zLjEgNC44LTQuNSA3LjNjLTcuMSAxMS44LTEyLjggMjMuMi0xNy40IDM0bC03LjQtM2MtOS4yLTMuNy0xOS43IC44LTIzLjQgMTBzLjggMTkuNyAxMCAyMy40bDguNyAzLjVjLS4yIC44LS40IDEuNi0uNyAyLjNjLTIuNiA5LjQtNC4yIDE3LjQtNS4zIDIzLjVjLS41IDMuMS0uOSA1LjctMS4yIDcuN2MtLjEgMS0uMiAyLS4zIDIuN2wtLjEgMS4xIDAgLjUgMCAuMiAwIC4xYzAgMCAwIC4xIDI5LjQgMi44bDAgMC0yOS40LTIuN2MtLjMgMy44LS40IDcuNS0uMyAxMS4ybC0xMSAzLjFDMy41IDI4NS40LTIgMjk1LjQgLjcgMzA0LjlzMTIuNyAxNS4xIDIyLjMgMTIuNGwxMC4zLTIuOWM4IDE1LjUgMjAuNyAyOC4zIDM2LjQgMzYuNEw2Ni43IDM2MWMtMi43IDkuNiAyLjggMTkuNSAxMi40IDIyLjNzMTkuNS0yLjggMjIuMy0xMi40bDMuMS0xMWMxNy44IC44IDM0LjctNC4xIDQ4LjgtMTMuMmw4IDhjNyA3IDE4LjQgNyAyNS41IDBzNy0xOC40IDAtMjUuNWwtOC04YzYuOC0xMC42IDExLjMtMjIuOSAxMi43LTM2LjJsLjEtLjZjLjItMS4zIC43LTMuOCAxLjctNy40bC4yLS42IDkuNCA0YzkuMSAzLjkgMTkuNy0uMyAyMy42LTkuNXMtLjMtMTkuNy05LjUtMjMuNmwtOC41LTMuNmM3LjUtMTEuMSAxOC43LTIzLjcgMzYuNS0zNC41bDEuNiA1LjZjMi43IDkuNiAxMi43IDE1LjEgMjIuMyAxMi40czE1LjEtMTIuNyAxMi40LTIyLjNsLTMtMTAuNmM1LjItMS43IDEwLjctMy4yIDE2LjYtNC42YzkuNy0yLjIgMTguNS02IDI2LjQtMTEuMWw4IDhjNyA3IDE4LjQgNyAyNS41IDBzNy0xOC40IDAtMjUuNWwtOC04YzkuMS0xNC4zIDE0LTMxLjIgMTMuMi00OC44bDExLTMuMWM5LjYtMi43IDE1LjEtMTIuNyAxMi40LTIyLjNTMzcwLjYgNjQgMzYxIDY2LjdsLTEwLjMgMi45Yy04LjEtMTUuOS0yMS0yOC41LTM2LjQtMzYuNGwyLjktMTAuM2MyLjctOS42LTIuOC0xOS41LTEyLjQtMjIuM3pNMTA2LjIgMjc1LjhsLTM3LjEtMy40IDAgMCAzNy4xIDMuNHpNMTI4IDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyem05Ni0xMTJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptOTguNyAzNDVjLTIuNyA5LjYgMi44IDE5LjUgMTIuNCAyMi4zczE5LjUtMi44IDIyLjItMTIuNGwzLjEtMTFjNy40IC4zIDE0LjktLjQgMjIuNC0yLjFjOS0yLjEgMTcuOC00LjQgMjYuMi03bDQuNCAxMC4zYzMuOSA5LjEgMTQuNSAxMy40IDIzLjYgOS41czEzLjQtMTQuNSA5LjUtMjMuNmwtMy42LTguNWMxNi41LTcuMSAzMS41LTE1LjEgNDUuMi0yMy45TDQ5MyA0NTBjNS41IDguMyAxNi43IDEwLjUgMjUgNXMxMC41LTE2LjcgNS0yNWwtNS44LTguN2MxMy41LTExLjIgMjUuMy0yMy4xIDM1LjUtMzUuM2wxMC4xIDguMWM3LjggNi4yIDE5LjEgNSAyNS4zLTIuOHM1LTE5LjEtMi44LTI1LjNMNTc0IDM1N2MxLjYtMi40IDMuMS00LjggNC41LTcuM2M3LjEtMTEuOCAxMi44LTIzLjIgMTcuNC0zNGw3LjQgM2M5LjIgMy43IDE5LjctLjggMjMuNC0xMHMtLjgtMTkuNy0xMC0yMy40bC04LjctMy41Yy4yLS44IC40LTEuNiAuNy0yLjNjMi42LTkuNCA0LjItMTcuNCA1LjMtMjMuNWMuNS0zLjEgLjktNS43IDEuMi03LjdjLjEtMSAuMi0yIC4zLTIuN2wuMS0xLjEgMC0uNSAwLS4yIDAtLjFjMCAwIDAtLjEtMjkuNC0yLjhsMCAwIDI5LjQgMi43Yy4zLTMuOCAuNC03LjUgLjMtMTEuMmwxMS0zLjFjOS42LTIuNyAxNS4xLTEyLjcgMTIuNC0yMi4zcy0xMi43LTE1LjEtMjIuMy0xMi40bC0xMC4zIDIuOWMtOC0xNS41LTIwLjctMjguMy0zNi40LTM2LjRsMi45LTEwLjNjMi43LTkuNi0yLjgtMTkuNS0xMi40LTIyLjNzLTE5LjUgMi44LTIyLjIgMTIuNGwtMy4xIDExYy0xNy44LS44LTM0LjcgNC4xLTQ4LjggMTMuMmwtOC04Yy03LTctMTguNC03LTI1LjUgMHMtNyAxOC40IDAgMjUuNWw4IDhjLTYuOCAxMC42LTExLjMgMjIuOS0xMi43IDM2LjJsLS4xIC42Yy0uMiAxLjMtLjcgMy44LTEuNyA3LjRsLS4yIC42LTkuNC00Yy05LjEtMy45LTE5LjcgLjMtMjMuNiA5LjVzLjMgMTkuNyA5LjUgMjMuNmw4LjUgMy42Yy03LjUgMTEuMS0xOC43IDIzLjctMzYuNSAzNC41bC0xLjYtNS42Yy0yLjctOS42LTEyLjctMTUuMS0yMi4zLTEyLjRzLTE1LjEgMTIuNy0xMi40IDIyLjNsMyAxMC42Yy01LjIgMS43LTEwLjcgMy4yLTE2LjYgNC42Yy05LjcgMi4yLTE4LjUgNi0yNi40IDExLjFsLTgtOGMtNy03LTE4LjQtNy0yNS41IDBzLTcgMTguNCAwIDI1LjVsOCA4Yy05LjEgMTQuMi0xNCAzMS4yLTEzLjIgNDguOGwtMTEgMy4xYy05LjYgMi43LTE1LjEgMTIuNy0xMi40IDIyLjJzMTIuNyAxNS4xIDIyLjMgMTIuNGwxMC4zLTIuOWM4LjEgMTUuOSAyMSAyOC41IDM2LjQgMzYuNGwtMyAxMC4zek01NzAuOSAyMzkuNWwwIDAtMzcuMS0zLjQgMzcuMSAzLjR6TTM4NCAzODRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnpcIl19LFBwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhbmQtbGl6YXJkXCIsaWNvbjpbNTEyLDUxMixbXSxcImYyNThcIixcIk0wIDExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NEgxNjBoODAgNDYuNWMzNi44IDAgNzEuMiAxOCA5Mi4xIDQ4LjJsMTEzLjUgMTY0YzEzIDE4LjcgMTkuOSA0MSAxOS45IDYzLjh2MTIgMTYgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJIMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MDIuMkwyNzMuOSAzNTJIMjQwIDE2MCAxMTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhoNDggODBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhIMTYwIDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OHpcIl19LEZwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRpc2Vhc2VcIixpY29uOls1MTIsNTEyLFtdLFwiZjdmYVwiLFwiTTIzOC41IDUzLjFDMjUxIDM5LjYgMjY4LjYgMzIgMjg3IDMyYzI4LjkgMCA1NC41IDE4LjcgNjMuMiA0Ni4zTDM2NiAxMjguNmM3LjMgMjMgMjUuMiA0MSA0OC4yIDQ4LjNsNjIuMiAxOS45YzIxLjIgNi44IDM1LjYgMjYuNSAzNS42IDQ4LjdjMCAxNy41LTguOSAzMy43LTIzLjYgNDMuMWwtODUuOSA1NC44Yy0xMC42IDYuOC0xNi42IDE4LjgtMTUuNyAzMS4zbDIuNSAzMy45YzIuOCAzOC41LTI3LjcgNzEuNC02Ni40IDcxLjRjLTEzLjYgMC0yNi45LTQuMi0zOC4xLTEybC00OC4yLTMzLjZjLTE0LjgtMTAuMy0zMi4zLTE1LjgtNTAuMy0xNS44SDE3MC4yYy00LjkgMC05LjkgLjQtMTQuOCAxLjJMODMuOSA0MzIuMWMtMjEuMyAzLjYtNDIuOC01LjctNTQuNi0yMy45Yy0xMS44LTE4LjEtMTEuOC00MS40IDAtNTkuNEw1Ni41IDMwN2M0LjktNy41IDcuNS0xNi4zIDcuNS0yNS4zYzAtOS45LTMuMi0xOS41LTktMjcuNEwxMS4zIDE5NC42Qy02LjUgMTcwLjMtLjcgMTM2LjIgMjQuMiAxMTkuMmM5LjctNi42IDIxLjItOS44IDMyLjktOS4xbDgwLjYgNC42YzI2LjEgMS41IDUxLjUtOC43IDY5LjQtMjcuOWwzMS41LTMzLjh6TTE2MCAyNTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMTYwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6TTI4OCAzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl19LERwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJyaWVmY2FzZS1tZWRpY2FsXCIsaWNvbjpbNTEyLDUxMixbXSxcImY0NjlcIixcIk0xODQgNDhIMzI4YzQuNCAwIDggMy42IDggOFY5NkgxNzZWNTZjMC00LjQgMy42LTggOC04em0tNTYgOFY5Nkg2NEMyOC43IDk2IDAgMTI0LjcgMCAxNjBWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDQ0OGMzNS4zIDAgNjQtMjguNyA2NC02NFYxNjBjMC0zNS4zLTI4LjctNjQtNjQtNjRIMzg0VjU2YzAtMzAuOS0yNS4xLTU2LTU2LTU2SDE4NGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZ6bTk2IDE1MmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjg4djQ4YzAgOC44LTcuMiAxNi0xNiAxNkgyNDBjLTguOCAwLTE2LTcuMi0xNi0xNlYzMjBIMTc2Yy04LjggMC0xNi03LjItMTYtMTZWMjcyYzAtOC44IDcuMi0xNiAxNi0xNmg0OFYyMDh6XCJdfSxScD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJnZW5kZXJsZXNzXCIsaWNvbjpbMzg0LDUxMixbXSxcImYyMmRcIixcIk0xOTIgMzY4Yy02MS45IDAtMTEyLTUwLjEtMTEyLTExMnM1MC4xLTExMiAxMTItMTEyczExMiA1MC4xIDExMiAxMTJzLTUwLjEgMTEyLTExMiAxMTJ6bTAgNjRjOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzZzLTc4LjgtMTc2LTE3Ni0xNzZTMTYgMTU4LjggMTYgMjU2czc4LjggMTc2IDE3NiAxNzZ6XCJdfSxVcD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjaGV2cm9uLXJpZ2h0XCIsaWNvbjpbMzg0LDUxMixbOTAwMl0sXCJmMDU0XCIsXCJNMzQyLjYgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTE5MiAxOTJjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI3NC43IDI1NiAxMDUuNCA4Ni42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDE5MiAxOTJ6XCJdfSxxcD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyZXR3ZWV0XCIsaWNvbjpbNTc2LDUxMixbXSxcImYwNzlcIixcIk0yNzIgNDE2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE2MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMTkyaDMyYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTY0LTY0Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhsMzIgMCAwIDEyOGMwIDUzIDQzIDk2IDk2IDk2SDI3MnpNMzA0IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDExMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4SDQxNmMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlzLTE2LjYtMTkuOC0yOS42LTE5LjhsLTMyIDBWMTkyYzAtNTMtNDMtOTYtOTYtOTZMMzA0IDk2elwiXX0sZDA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2FyLXJlYXJcIixpY29uOls1MTIsNTEyLFtcImNhci1hbHRcIl0sXCJmNWRlXCIsXCJNMTY1LjQgOTZIMzQ2LjZjMTMuNiAwIDI1LjcgOC42IDMwLjIgMjEuNEw0MDIuOSAxOTJIMTA5LjFsMjYuMS03NC42YzQuNS0xMi44IDE2LjYtMjEuNCAzMC4yLTIxLjR6bS05MC42IC4zTDM5LjYgMTk2LjhDMTYuNCAyMDYuNCAwIDIyOS4zIDAgMjU2djgwYzAgMjMuNyAxMi45IDQ0LjQgMzIgNTUuNFY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJIOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJWNDAwSDM4NHY0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMlYzOTEuNGMxOS4xLTExLjEgMzItMzEuNyAzMi01NS40VjI1NmMwLTI2LjctMTYuNC00OS42LTM5LjYtNTkuMkw0MzcuMiA5Ni4zQzQyMy43IDU3LjggMzg3LjQgMzIgMzQ2LjYgMzJIMTY1LjRjLTQwLjggMC03Ny4xIDI1LjgtOTAuNiA2NC4zek0yMDggMjcyaDk2YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjA4Yy04LjggMC0xNi03LjItMTYtMTZWMjg4YzAtOC44IDcuMi0xNiAxNi0xNnpNNDggMjgwYzAtMTMuMyAxMC43LTI0IDI0LTI0aDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDcyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMzYwLTI0aDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDQwOGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpcIl19LEdwPWQwLFdwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInB1bXAtc29hcFwiLGljb246WzQ0OCw1MTIsW10sXCJlMDZiXCIsXCJNMTI4IDMydjk2SDI1NlY5Nmg2MC4xYzQuMiAwIDguMyAxLjcgMTEuMyA0LjdsMzMuOSAzMy45YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMzcyLjcgNTUuNGMtMTUtMTUtMzUuNC0yMy40LTU2LjYtMjMuNEgyNTZjMC0xNy43LTE0LjMtMzItMzItMzJIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTE3LjQgMTYwYy0zMy4zIDAtNjEgMjUuNS02My44IDU4LjdMMzUgNDQyLjdDMzEuOSA0ODAgNjEuMyA1MTIgOTguOCA1MTJIMjg1LjJjMzcuNCAwIDY2LjktMzIgNjMuOC02OS4zbC0xOC43LTIyNGMtMi44LTMzLjItMzAuNS01OC43LTYzLjgtNTguN0gxMTcuNHpNMjU2IDM2MGMwIDM1LjMtMjguNyA1Ni02NCA1NnMtNjQtMjAuNy02NC01NmMwLTMyLjUgMzctODAuOSA1MC45LTk3LjljMy4yLTMuOSA4LjEtNi4xIDEzLjEtNi4xczkuOSAyLjIgMTMuMSA2LjFDMjE5IDI3OS4xIDI1NiAzMjcuNSAyNTYgMzYwelwiXX0sRXA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidmlkZW8tc2xhc2hcIixpY29uOls2NDAsNTEyLFtdLFwiZjRlMlwiLFwiTTM4LjggNS4xQzI4LjQtMy4xIDEzLjMtMS4yIDUuMSA5LjJTLTEuMiAzNC43IDkuMiA0Mi45bDU5MiA0NjRjMTAuNCA4LjIgMjUuNSA2LjMgMzMuNy00LjFzNi4zLTI1LjUtNC4xLTMzLjdsLTg2LjQtNjcuNyAxMy44IDkuMmM5LjggNi41IDIyLjQgNy4yIDMyLjkgMS42czE2LjktMTYuNCAxNi45LTI4LjJWMTI4YzAtMTEuOC02LjUtMjIuNi0xNi45LTI4LjJzLTIzLTUtMzIuOSAxLjZsLTk2IDY0TDQ0OCAxNzQuOVYxOTIgMzIwdjUuOGwtMzItMjUuMVYxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTEzLjlMMzguOCA1LjF6TTMyIDEyOFYzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzUyYzIzLjQgMCA0My45LTEyLjYgNTUtMzEuM0wzMi4zIDEyMS41Yy0uMiAyLjEtLjMgNC4zLS4zIDYuNXpcIl19LHUwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJhdHRlcnktcXVhcnRlclwiLGljb246WzU3Niw1MTIsW1wiYmF0dGVyeS0yXCJdLFwiZjI0M1wiLFwiTTAgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwSDQ2NGM0NC4yIDAgODAgMzUuOCA4MCA4MHYxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnYxNmMwIDQ0LjItMzUuOCA4MC04MCA4MEg4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBWMTc2em04MC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2VjMzNmMwIDguOCA3LjIgMTYgMTYgMTZINDY0YzguOCAwIDE2LTcuMiAxNi0xNlYxNzZjMC04LjgtNy4yLTE2LTE2LTE2SDgwem0xMTIgMzJWMzIwSDk2VjE5Mmg5NnpcIl19LElwPXUwLE9wPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJhZGlvXCIsaWNvbjpbNTEyLDUxMixbMTI4MjUxXSxcImY4ZDdcIixcIk00OTQuOCA0N2MxMi43LTMuNyAyMC0xNy4xIDE2LjMtMjkuOFM0OTQtMi44IDQ4MS4yIDFMNTEuNyAxMjYuOWMtOS40IDIuNy0xNy45IDcuMy0yNS4xIDEzLjJDMTAuNSAxNTEuNyAwIDE3MC42IDAgMTkydjRWMzA0IDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0SDIxOC41TDQ5NC44IDQ3ek0zNjggNDAwYy00NC4yIDAtODAtMzUuOC04MC04MHMzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBzLTM1LjggODAtODAgODB6TTgwIDI1NmMwLTguOCA3LjItMTYgMTYtMTZoOTZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIOTZjLTguOCAwLTE2LTcuMi0xNi0xNnpNNjQgMzIwYzAtOC44IDcuMi0xNiAxNi0xNkgyMDhjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNnptMTYgNjRjMC04LjggNy4yLTE2IDE2LTE2aDk2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDk2Yy04LjggMC0xNi03LjItMTYtMTZ6XCJdfSx4MD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiYWJ5LWNhcnJpYWdlXCIsaWNvbjpbNTEyLDUxMixbXCJjYXJyaWFnZS1iYWJ5XCJdLFwiZjc3ZFwiLFwiTTI1NiAxOTJILjFDMi43IDExNy45IDQxLjMgNTIuOSA5OSAxNC4xYzEzLjMtOC45IDMwLjgtNC4zIDM5LjkgOC44TDI1NiAxOTJ6bTEyOC0zMmMwLTM1LjMgMjguNy02NCA2NC02NGgzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMHY2NGMwIDI1LjItNS44IDUwLjItMTcgNzMuNXMtMjcuOCA0NC41LTQ4LjYgNjIuM3MtNDUuNSAzMi03Mi43IDQxLjZTMjUzLjQgNDE2IDIyNCA0MTZzLTU4LjUtNS04NS43LTE0LjZzLTUxLjktMjMuOC03Mi43LTQxLjZzLTM3LjMtMzktNDguNi02Mi4zUzAgMjQ5LjIgMCAyMjRsMjI0IDAgMTYwIDBWMTYwek04MCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OHptMzM2LTQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpcIl19LFhwPXgwLFFwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRyYWZmaWMtbGlnaHRcIixpY29uOlszMjAsNTEyLFsxMjg2NzhdLFwiZjYzN1wiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjM1MmMwIDg4LjQgNzEuNiAxNjAgMTYwIDE2MHMxNjAtNzEuNiAxNjAtMTYwVjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0em05NiAzMjBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHptLTQ4LTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDh6TTE2MCA2NGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4elwiXX0sS3A9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGhlcm1vbWV0ZXJcIixpY29uOls1MTIsNTEyLFtdLFwiZjQ5MVwiLFwiTTk2IDM4Mi4xVjI5My4zYzAtMTQuOSA1LjktMjkuMSAxNi40LTM5LjZsMjcuMy0yNy4zIDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDEuNC00MS40IDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDEuNC00MS40IDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDUuNS00NS41QzM1NS4yIDEwLjkgMzgxLjQgMCA0MDguOCAwQzQ2NS44IDAgNTEyIDQ2LjIgNTEyIDEwMy4yYzAgMjcuNC0xMC45IDUzLjYtMzAuMiA3M0wyNTguMyAzOTkuNmMtMTAuNSAxMC41LTI0LjcgMTYuNC0zOS42IDE2LjRIMTI5LjlMNDEgNTA1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDg5LTg5elwiXX0sanA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidnItY2FyZGJvYXJkXCIsaWNvbjpbNjQwLDUxMixbXSxcImY3MjlcIixcIk01NzYgNjRINjRDMjguNyA2NCAwIDkyLjcgMCAxMjhWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0SDE4NC40YzI0LjIgMCA0Ni40LTEzLjcgNTcuMi0zNS40bDMyLTY0YzguOC0xNy41IDI2LjctMjguNiA0Ni4zLTI4LjZzMzcuNSAxMS4xIDQ2LjMgMjguNmwzMiA2NGMxMC44IDIxLjcgMzMgMzUuNCA1Ny4yIDM1LjRINTc2YzM1LjMgMCA2NC0yOC43IDY0LTY0VjEyOGMwLTM1LjMtMjguNy02NC02NC02NHpNMjI0IDI0MGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6bTI1NiA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0elwiXX0sSnA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZC1taWRkbGUtZmluZ2VyXCIsaWNvbjpbNDQ4LDUxMixbMTI4NDA1XSxcImY4MDZcIixcIk0yMzIgMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBWMjA0LjJjLTguNS03LjYtMTkuNy0xMi4yLTMyLTEyLjJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djcgNzNjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMjY0LjNjLTIgMS40LTMuOSAzLTUuOCA0LjVMNTUgMjg0LjhDNDAuNCAyOTcgMzIgMzE1IDMyIDMzNFYzNzJjMCAzOCAxNi45IDc0IDQ2LjEgOTguM2w1LjQgNC41YzI4LjggMjQgNjUgMzcuMSAxMDIuNCAzNy4xSDMwNGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOFYzMjAgMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4Yy0xMi40IDAtMjMuNiA0LjctMzIuMSAxMi4zQzM1MCAyMjcuNSAzMjkuMyAyMDggMzA0IDIwOGMtMTIuMyAwLTIzLjUgNC42LTMyIDEyLjJWNDBjMC0yMi4xLTE3LjktNDAtNDAtNDB6XCJdfSxnMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJjZW50XCIsaWNvbjpbMzg0LDUxMixbNjIxMDEsNjI3ODUsXCJwZXJjZW50YWdlXCJdLFwiMjVcIixcIk0zNzQuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtMzIwIDMyMGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwzMjAtMzIwek0xMjggMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0UzAgOTIuNyAwIDEyOHMyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6TTM4NCAzODRjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRzMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0elwiXX0sWnA9ZzAsWXA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidHJ1Y2stbW92aW5nXCIsaWNvbjpbNjQwLDUxMixbXSxcImY0ZGZcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjMwNHY4MCAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGMyNi4yIDAgNDkuNC0xMi42IDY0LTMyYzE0LjYgMTkuNCAzNy44IDMyIDY0IDMyYzQ0LjIgMCA4MC0zNS44IDgwLTgwYzAtNS41LS42LTEwLjgtMS42LTE2SDQxNmgzMy42Yy0xIDUuMi0xLjYgMTAuNS0xLjYgMTZjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTUuNS0uNi0xMC44LTEuNi0xNkg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjg4IDI3MiAyNjEuN2MwLTkuMi0zLjItMTguMi05LTI1LjNsLTU4LjgtNzEuOGMtMTAuNi0xMy0yNi41LTIwLjUtNDMuMy0yMC41SDQ4MFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNNTg1IDI1Nkg0ODBWMTkyaDQ4LjhjMi40IDAgNC43IDEuMSA2LjIgMi45TDU4NSAyNTZ6TTUyOCA0MzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpNMjQwIDQwMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6TTgwIDQzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXX0sX3A9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ2xhc3Mtd2F0ZXItZHJvcGxldFwiLGljb246WzQ0OCw1MTIsW10sXCJlNGY1XCIsXCJNNjQgMEM1NS4xIDAgNDYuNiAzLjcgNDAuNiAxMC4ycy05LjEgMTUuMi04LjUgMjQuMUw2MC45IDQzNy43YzMgNDEuOSAzNy44IDc0LjMgNzkuOCA3NC4zSDMwNy4zYzQyIDAgNzYuOC0zMi40IDc5LjgtNzQuM0w0MTUuOSAzNC4zYy42LTguOS0yLjQtMTcuNi04LjUtMjQuMVMzOTIuOSAwIDM4NCAwSDY0em01MSAyOTcuNUw5OC40IDY0SDM0OS42TDMzMyAyOTcuNSAzMjAgMzA0Yy0yMC4xIDEwLjEtNDMuOSAxMC4xLTY0IDBzLTQzLjktMTAuMS02NCAwcy00My45IDEwLjEtNjQgMGwtMTMtNi41ek0yODggMTk2YzAtMjQtMzMuNy03MC4xLTUyLjItOTMuNWMtNi4xLTcuNy0xNy41LTcuNy0yMy42IDBDMTkzLjcgMTI1LjkgMTYwIDE3MiAxNjAgMTk2YzAgMzMuMSAyOC43IDYwIDY0IDYwczY0LTI2LjkgNjQtNjB6XCJdfSwkcD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkaXNwbGF5XCIsaWNvbjpbNTc2LDUxMixbXSxcImUxNjNcIixcIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NFYzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMjQwbC0xMC43IDMySDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg0MTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzQ2LjdMMzM2IDQxNkg1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRWNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTUxMiA2NFYzNTJINjRWNjRINTEyelwiXX0sUzA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1zbWlsZVwiLGljb246WzUxMiw1MTIsWzEyODU3OCxcInNtaWxlXCJdLFwiZjExOFwiLFwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJ6TTE2NC4xIDMyNS41QzE4MiAzNDYuMiAyMTIuNiAzNjggMjU2IDM2OHM3NC0yMS44IDkxLjktNDIuNWM1LjgtNi43IDE1LjktNy40IDIyLjYtMS42czcuNCAxNS45IDEuNiAyMi42QzM0OS44IDM3Mi4xIDMxMS4xIDQwMCAyNTYgNDAwcy05My44LTI3LjktMTE2LjEtNTMuNWMtNS44LTYuNy01LjEtMTYuOCAxLjYtMjIuNnMxNi44LTUuMSAyMi42IDEuNnpNMjA4LjQgMjA4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdfSxjZD1TMCxOMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0aHVtYnRhY2tcIixpY29uOlszODQsNTEyLFsxMjgyMDQsMTI4MzkyLFwidGh1bWItdGFja1wiXSxcImYwOGRcIixcIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwSDMyMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgyOTAuNWwxMS40IDE0OC4yYzM2LjcgMTkuOSA2NS43IDUzLjIgNzkuNSA5NC43bDEgM2MzLjMgOS44IDEuNiAyMC41LTQuNCAyOC44cy0xNS43IDEzLjMtMjYgMTMuM0gzMmMtMTAuMyAwLTE5LjktNC45LTI2LTEzLjNzLTcuNy0xOS4xLTQuNC0yOC44bDEtM2MxMy44LTQxLjUgNDIuOC03NC44IDc5LjUtOTQuN0w5My41IDY0SDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnpNMTYwIDM4NGg2NHY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzODR6XCJdfSxhZD1OMCxzZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0cm9waHlcIixpY29uOls1NzYsNTEyLFsxMjc5NDJdLFwiZjA5MVwiLFwiTTQwMCAwSDE3NmMtMjYuNSAwLTQ4LjEgMjEuOC00Ny4xIDQ4LjJjLjIgNS4zIC40IDEwLjYgLjcgMTUuOEgyNEMxMC43IDY0IDAgNzQuNyAwIDg4YzAgOTIuNiAzMy41IDE1NyA3OC41IDIwMC43YzQ0LjMgNDMuMSA5OC4zIDY0LjggMTM4LjEgNzUuOGMyMy40IDYuNSAzOS40IDI2IDM5LjQgNDUuNmMwIDIwLjktMTcgMzcuOS0zNy45IDM3LjlIMTkyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNTcuOUMzMzcgNDQ4IDMyMCA0MzEgMzIwIDQxMC4xYzAtMTkuNiAxNS45LTM5LjIgMzkuNC00NS42YzM5LjktMTEgOTMuOS0zMi43IDEzOC4yLTc1LjhDNTQyLjUgMjQ1IDU3NiAxODAuNiA1NzYgODhjMC0xMy4zLTEwLjctMjQtMjQtMjRINDQ2LjRjLjMtNS4yIC41LTEwLjQgLjctMTUuOEM0NDguMSAyMS44IDQyNi41IDAgNDAwIDB6TTQ4LjkgMTEyaDg0LjRjOS4xIDkwLjEgMjkuMiAxNTAuMyA1MS45IDE5MC42Yy0yNC45LTExLTUwLjgtMjYuNS03My4yLTQ4LjNjLTMyLTMxLjEtNTgtNzYtNjMtMTQyLjN6TTQ2NC4xIDI1NC4zYy0yMi40IDIxLjgtNDguMyAzNy4zLTczLjIgNDguM2MyMi43LTQwLjMgNDIuOC0xMDAuNSA1MS45LTE5MC42aDg0LjRjLTUuMSA2Ni4zLTMxLjEgMTExLjItNjMgMTQyLjN6XCJdfSx3MD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24tcHJheWluZ1wiLGljb246WzQ0OCw1MTIsWzEyODcyMCxcInByYXlcIl0sXCJmNjgzXCIsXCJNMzUyIDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNMjMyLjcgMjY0bDIyLjkgMzEuNWM2LjUgOC45IDE2LjMgMTQuNyAyNy4yIDE2LjFzMjEuOS0xLjcgMzAuNC04LjdsODgtNzJjMTcuMS0xNCAxOS42LTM5LjIgNS42LTU2LjNzLTM5LjItMTkuNi01Ni4zLTUuNmwtNTUuMiA0NS4yLTI2LjItMzZDMjUzLjYgMTU2LjcgMjI4LjYgMTQ0IDIwMiAxNDRjLTMwLjkgMC01OS4yIDE3LjEtNzMuNiA0NC40TDc5LjggMjgwLjljLTIwLjIgMzguNS05LjQgODUuOSAyNS42IDExMS44TDE1OC42IDQzMkg3MmMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MEgyODBjMTcuMyAwIDMyLjYtMTEuMSAzOC0yNy41cy0uMy0zNC40LTE0LjItNDQuN0wxODcuNyAzNTRsNDUtOTB6XCJdfSxlZD13MCxmZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW1tZXJcIixpY29uOls1NzYsNTEyLFsxMjgyOTZdLFwiZjZlM1wiLFwiTTQxMy41IDIzNy41Yy0yOC4yIDQuOC01OC4yLTMuNi04MC0yNS40bC0zOC4xLTM4LjFDMjgwLjQgMTU5IDI3MiAxMzguOCAyNzIgMTE3LjZWMTA1LjVMMTkyLjMgNjJjLTUuMy0yLjktOC42LTguNi04LjMtMTQuN3MzLjktMTEuNSA5LjUtMTRsNDcuMi0yMUMyNTkuMSA0LjIgMjc5IDAgMjk5LjIgMGgxOC4xYzM2LjcgMCA3MiAxNCA5OC43IDM5LjFsNDQuNiA0MmMyNC4yIDIyLjggMzMuMiA1NS43IDI2LjYgODZMNTAzIDE4M2w4LThjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMjQgMjRjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg4IDg4Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMjQtMjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDgtOC0xNy41LTE3LjV6TTI3LjQgMzc3LjFMMjYwLjkgMTgyLjZjMy41IDQuOSA3LjUgOS42IDExLjggMTRsMzguMSAzOC4xYzYgNiAxMi40IDExLjIgMTkuMiAxNS43TDEzNC45IDQ4NC42Yy0xNC41IDE3LjQtMzYgMjcuNC01OC42IDI3LjRDMzQuMSA1MTIgMCA0NzcuOCAwIDQzNS43YzAtMjIuNiAxMC4xLTQ0LjEgMjcuNC01OC42elwiXX0scmQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZC1wZWFjZVwiLGljb246WzUxMiw1MTIsWzk5OTZdLFwiZjI1YlwiLFwiTTIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjI0MEgxOTJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0ek05My4zIDUxLjJMMTc1LjkgMjQwSDEwNi4xTDM0LjcgNzYuOEMyNy42IDYwLjYgMzUgNDEuOCA1MS4yIDM0LjdzMzUuMSAuMyA0Mi4xIDE2LjV6bTI3IDIyMS4zbC0uMi0uNWg2OS45SDIxNmMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MEgxNjBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoNTZjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNmMxMy4yIDAgMjUuNC00IDM1LjYtMTAuOGM4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44YzExLjcgMCAyMi42LTMuMSAzMi04LjZWMzUyYzAgODguNC03MS42IDE2MC0xNjAgMTYwSDIyNi4zYy00Mi40IDAtODMuMS0xNi45LTExMy4xLTQ2LjlsLTExLjYtMTEuNkM3Ny41IDQyOS41IDY0IDM5Ni45IDY0IDM2M1YzMzZjMC0zMi43IDI0LjYtNTkuNyA1Ni4zLTYzLjV6XCJdfSxrMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJyb3RhdGVcIixpY29uOls1MTIsNTEyLFsxMjgyNjAsXCJzeW5jLWFsdFwiXSxcImYyZjFcIixcIk0xNDIuOSAxNDIuOWM2Mi4yLTYyLjIgMTYyLjctNjIuNSAyMjUuMy0xTDMyNyAxODNjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJzMTIuNSAxNC44IDIyLjIgMTQuOEg0NjMuNWMwIDAgMCAwIDAgMEg0NzJjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNzJjMC05LjctNS44LTE4LjUtMTQuOC0yMi4ycy0xOS4zLTEuNy0yNi4yIDUuMkw0MTMuNCA5Ni42Yy04Ny42LTg2LjUtMjI4LjctODYuMi0zMTUuOCAxQzczLjIgMTIyIDU1LjYgMTUwLjcgNDQuOCAxODEuNGMtNS45IDE2LjcgMi45IDM0LjkgMTkuNSA0MC44czM0LjktMi45IDQwLjgtMTkuNWM3LjctMjEuOCAyMC4yLTQyLjMgMzcuOC01OS44ek0xNiAzMTJ2Ny42IC43VjQ0MGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJsNDEuNi00MS42Yzg3LjYgODYuNSAyMjguNyA4Ni4yIDMxNS44LTFjMjQuNC0yNC40IDQyLjEtNTMuMSA1Mi45LTgzLjdjNS45LTE2LjctMi45LTM0LjktMTkuNS00MC44cy0zNC45IDIuOS00MC44IDE5LjVjLTcuNyAyMS44LTIwLjIgNDIuMy0zNy44IDU5LjhjLTYyLjIgNjIuMi0xNjIuNyA2Mi41LTIyNS4zIDFMMTg1IDMyOWM2LjktNi45IDguOS0xNy4yIDUuMi0yNi4ycy0xMi41LTE0LjgtMjIuMi0xNC44SDQ4LjRoLS43SDQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpcIl19LGxkPWswLGlkPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNwaW5uZXJcIixpY29uOls1MTIsNTEyLFtdLFwiZjExMFwiLFwiTTMwNCA0OGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6bTAgNDE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OHpNNDggMzA0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6bTQ2NC00OGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6TTE0Mi45IDQzN2MxOC43LTE4LjcgMTguNy00OS4xIDAtNjcuOXMtNDkuMS0xOC43LTY3LjkgMHMtMTguNyA0OS4xIDAgNjcuOXM0OS4xIDE4LjcgNjcuOSAwem0wLTI5NC4yYzE4LjctMTguNyAxOC43LTQ5LjEgMC02Ny45UzkzLjcgNTYuMiA3NSA3NXMtMTguNyA0OS4xIDAgNjcuOXM0OS4xIDE4LjcgNjcuOSAwek0zNjkuMSA0MzdjMTguNyAxOC43IDQ5LjEgMTguNyA2Ny45IDBzMTguNy00OS4xIDAtNjcuOXMtNDkuMS0xOC43LTY3LjkgMHMtMTguNyA0OS4xIDAgNjcuOXpcIl19LG9kPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJvYm90XCIsaWNvbjpbNjQwLDUxMixbMTI5MzAyXSxcImY1NDRcIixcIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY5Nkg0ODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDE2MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0SDI4OFYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMjA4IDM4NGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmgzMmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkgyMDh6bTk2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoMzJjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIMzA0em05NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDMyYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2SDQwMHpNMjY0IDI1NmMwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDB6bTE1MiA0MGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwek00OCAyMjRINjRWNDE2SDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OFYyNzJjMC0yNi41IDIxLjUtNDggNDgtNDh6bTU0NCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4djk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDU3NlYyMjRoMTZ6XCJdfSxuZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZWFjZVwiLGljb246WzUxMiw1MTIsWzk3NzRdLFwiZjY3Y1wiLFwiTTIyNCA0NDUuM1YzMjMuNWwtOTQuMyA3Ny4xYzI2LjEgMjIuOCA1OC41IDM4LjcgOTQuMyA0NC43ek04OS4yIDM1MS4xTDIyNCAyNDAuOFY2Ni43QzEzMy4yIDgxLjkgNjQgMTYwLjkgNjQgMjU2YzAgMzQuNiA5LjIgNjcuMSAyNS4yIDk1LjF6bTI5My4xIDQ5LjVMMjg4IDMyMy41VjQ0NS4zYzM1LjctNiA2OC4xLTIxLjkgOTQuMy00NC43em00MC42LTQ5LjVjMTYtMjggMjUuMi02MC41IDI1LjItOTUuMWMwLTk1LjEtNjkuMi0xNzQuMS0xNjAtMTg5LjNWMjQwLjhMNDIyLjggMzUxLjF6TTUxMiAyNTZjMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTZ6XCJdfSxiMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJnZWFyc1wiLGljb246WzY0MCw1MTIsW1wiY29nc1wiXSxcImYwODVcIixcIk0zMDguNSAxMzUuM2M3LjEtNi4zIDkuOS0xNi4yIDYuMi0yNWMtMi4zLTUuMy00LjgtMTAuNS03LjYtMTUuNUwzMDQgODkuNGMtMy01LTYuMy05LjktOS44LTE0LjZjLTUuNy03LjYtMTUuNy0xMC4xLTI0LjctNy4xbC0yOC4yIDkuM2MtMTAuNy04LjgtMjMtMTYtMzYuMi0yMC45TDE5OSAyNy4xYy0xLjktOS4zLTkuMS0xNi43LTE4LjUtMTcuOEMxNzMuNyA4LjQgMTY2LjkgOCAxNjAgOHMtMTMuNyAuNC0yMC40IDEuMmMtOS40IDEuMS0xNi42IDguNi0xOC41IDE3LjhMMTE1IDU2LjFjLTEzLjMgNS0yNS41IDEyLjEtMzYuMiAyMC45TDUwLjUgNjcuOGMtOS0zLTE5LS41LTI0LjcgNy4xYy0zLjUgNC43LTYuOCA5LjYtOS45IDE0LjZsLTMgNS4zYy0yLjggNS01LjMgMTAuMi03LjYgMTUuNmMtMy43IDguNy0uOSAxOC42IDYuMiAyNWwyMi4yIDE5LjhDMzIuNiAxNjEuOSAzMiAxNjguOSAzMiAxNzZzLjYgMTQuMSAxLjcgMjAuOUwxMS41IDIxNi43Yy03LjEgNi4zLTkuOSAxNi4yLTYuMiAyNWMyLjMgNS4zIDQuOCAxMC41IDcuNiAxNS42bDMgNS4yYzMgNS4xIDYuMyA5LjkgOS45IDE0LjZjNS43IDcuNiAxNS43IDEwLjEgMjQuNyA3LjFsMjguMi05LjNjMTAuNyA4LjggMjMgMTYgMzYuMiAyMC45bDYuMSAyOS4xYzEuOSA5LjMgOS4xIDE2LjcgMTguNSAxNy44YzYuNyAuOCAxMy41IDEuMiAyMC40IDEuMnMxMy43LS40IDIwLjQtMS4yYzkuNC0xLjEgMTYuNi04LjYgMTguNS0xNy44bDYuMS0yOS4xYzEzLjMtNSAyNS41LTEyLjEgMzYuMi0yMC45bDI4LjIgOS4zYzkgMyAxOSAuNSAyNC43LTcuMWMzLjUtNC43IDYuOC05LjUgOS44LTE0LjZsMy4xLTUuNGMyLjgtNSA1LjMtMTAuMiA3LjYtMTUuNWMzLjctOC43IC45LTE4LjYtNi4yLTI1bC0yMi4yLTE5LjhjMS4xLTYuOCAxLjctMTMuOCAxLjctMjAuOXMtLjYtMTQuMS0xLjctMjAuOWwyMi4yLTE5Ljh6TTIwOCAxNzZjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4ek01MDQuNyA1MDAuNWM2LjMgNy4xIDE2LjIgOS45IDI1IDYuMmM1LjMtMi4zIDEwLjUtNC44IDE1LjUtNy42bDUuNC0zLjFjNS0zIDkuOS02LjMgMTQuNi05LjhjNy42LTUuNyAxMC4xLTE1LjcgNy4xLTI0LjdsLTkuMy0yOC4yYzguOC0xMC43IDE2LTIzIDIwLjktMzYuMmwyOS4xLTYuMWM5LjMtMS45IDE2LjctOS4xIDE3LjgtMTguNWMuOC02LjcgMS4yLTEzLjUgMS4yLTIwLjRzLS40LTEzLjctMS4yLTIwLjRjLTEuMS05LjQtOC42LTE2LjYtMTcuOC0xOC41TDU4My45IDMwN2MtNS0xMy4zLTEyLjEtMjUuNS0yMC45LTM2LjJsOS4zLTI4LjJjMy05IC41LTE5LTcuMS0yNC43Yy00LjctMy41LTkuNi02LjgtMTQuNi05LjlsLTUuMy0zYy01LTIuOC0xMC4yLTUuMy0xNS42LTcuNmMtOC43LTMuNy0xOC42LS45LTI1IDYuMmwtMTkuOCAyMi4yYy02LjgtMS4xLTEzLjgtMS43LTIwLjktMS43cy0xNC4xIC42LTIwLjkgMS43bC0xOS44LTIyLjJjLTYuMy03LjEtMTYuMi05LjktMjUtNi4yYy01LjMgMi4zLTEwLjUgNC44LTE1LjYgNy42bC01LjIgM2MtNS4xIDMtOS45IDYuMy0xNC42IDkuOWMtNy42IDUuNy0xMC4xIDE1LjctNy4xIDI0LjdsOS4zIDI4LjJjLTguOCAxMC43LTE2IDIzLTIwLjkgMzYuMkwzMTUuMSAzMTNjLTkuMyAxLjktMTYuNyA5LjEtMTcuOCAxOC41Yy0uOCA2LjctMS4yIDEzLjUtMS4yIDIwLjRzLjQgMTMuNyAxLjIgMjAuNGMxLjEgOS40IDguNiAxNi42IDE3LjggMTguNWwyOS4xIDYuMWM1IDEzLjMgMTIuMSAyNS41IDIwLjkgMzYuMmwtOS4zIDI4LjJjLTMgOS0uNSAxOSA3LjEgMjQuN2M0LjcgMy41IDkuNSA2LjggMTQuNiA5LjhsNS40IDMuMWM1IDIuOCAxMC4yIDUuMyAxNS41IDcuNmM4LjcgMy43IDE4LjYgLjkgMjUtNi4ybDE5LjgtMjIuMmM2LjggMS4xIDEzLjggMS43IDIwLjkgMS43czE0LjEtLjYgMjAuOS0xLjdsMTkuOCAyMi4yek00NjQgNDAwYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6XCJdfSxIZD1iMCx6ZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ3YXJlaG91c2VcIixpY29uOls2NDAsNTEyLFtdLFwiZjQ5NFwiLFwiTTAgNDg4VjE3MS4zYzAtMjYuMiAxNS45LTQ5LjcgNDAuMi01OS40TDMwOC4xIDQuOGM3LjYtMy4xIDE2LjEtMy4xIDIzLjggMEw1OTkuOCAxMTEuOWMyNC4zIDkuNyA0MC4yIDMzLjMgNDAuMiA1OS40VjQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEg1NjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMkgxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyVjQ4OGMwIDEzLjMtMTAuNyAyNC0yNCAyNEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTQ4OCAyNGwtMzM2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjQzMkg1MTJsMCA1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHpNMTI4IDQwMFYzMzZINTEydjY0SDEyOHptMC05NlYyMjRINTEybDAgODBIMTI4elwiXX0sVmQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctdXAtcmlnaHQtZG90c1wiLGljb246WzU3Niw1MTIsW10sXCJlNGI3XCIsXCJNMTYwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoNTAuN0w5LjQgMjY1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMjU2IDEwOS4zVjE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMySDE2MHpNNTc2IDgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OHpNNDQ4IDIwOGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6TTQwMCAzODRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHptNDggODBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4em0xMjggMGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6TTI3MiAzODRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHptNDggODBjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4ek0xNDQgNTEyYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6TTU3NiAzMzZjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4em0tNDgtODBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHpcIl19LG1kPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNwbG90Y2hcIixpY29uOls1MTIsNTEyLFtdLFwiZjViY1wiLFwiTTI4Ny42IC4xYy0xOS43IDAtMzguMyA5LjEtNTAuNCAyNC42TDIwNS45IDY0LjljLTE3LjkgMjMtNDYgMzUuNi03NS4xIDMzLjdMNTkuMSA5NGMtMTMuNS0uOS0yNi45IDMuMi0zNy43IDExLjZDLTEuMyAxMjMuMi02LjcgMTU1LjIgOC44IDE3OS40bDQ0LjUgNjkuMmM3LjEgMTEgMTAuOCAyMy44IDEwLjggMzYuOGMwIDExLjktMy4xIDIzLjUtOSAzMy44TDI3LjQgMzY3LjdjLTEwIDE3LjUtMTAgMzkuMSAwIDU2LjZjMTIuMSAyMS4yIDM2LjQgMzIuMyA2MC40IDI3LjdsNjctMTNjNS41LTEuMSAxMS4yLTEuNiAxNi44LTEuNkgxODBjMjAuOSAwIDQxIDcuNCA1Ni45IDIwLjlsNDUgMzguMmMxMS44IDEwIDI2LjkgMTUuNiA0Mi40IDE1LjZjMzcuOCAwIDY3LjctMzEuOSA2NS40LTY5LjZsLTMuMS01MC42Yy0xLTE2LjggNi42LTMyLjkgMjAuMS00Mi44bDgyLjUtNjAuMmMxNC4yLTEwLjQgMjIuNy0yNyAyMi43LTQ0LjZjMC0yMy4yLTE0LjUtNDMuOS0zNi4zLTUxLjhsLTU4LjItMjEuMmMtMjQuNC04LjktNDIuOS0yOS4xLTQ5LjctNTQuMkwzNDkuMyA0Ny40QzM0MS44IDE5LjUgMzE2LjUgLjEgMjg3LjYgLjF6XCJdfSxBMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmYWNlLWdyaW4taGVhcnRzXCIsaWNvbjpbNTEyLDUxMixbMTI4NTI1LFwiZ3Jpbi1oZWFydHNcIl0sXCJmNTg0XCIsXCJNMjU2IDUxMmMxNDEuNCAwIDI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMnpNMzgzLjggMzE3LjhjMTIuMy0zLjcgMjQuMyA3IDE5LjIgMTguN2MtMjQuNSA1Ni45LTgxLjEgOTYuNy0xNDcgOTYuN3MtMTIyLjUtMzkuOC0xNDctOTYuN2MtNS4xLTExLjggNi45LTIyLjQgMTkuMi0xOC43QzE2Ni43IDMyOS40IDIxMC4xIDMzNiAyNTYgMzM2czg5LjMtNi42IDEyNy44LTE4LjJ6TTE5OS4zIDEyOS4xYzE3LjggNC44IDI4LjQgMjMuMSAyMy42IDQwLjhsLTE3LjQgNjVjLTIuMyA4LjUtMTEuMSAxMy42LTE5LjYgMTEuM2wtNjUuMS0xNy40Yy0xNy44LTQuOC0yOC40LTIzLjEtMjMuNi00MC44czIzLjEtMjguNCA0MC44LTIzLjZsMTYuMSA0LjMgNC4zLTE2LjFjNC44LTE3LjggMjMuMS0yOC40IDQwLjgtMjMuNnptMTU0LjMgMjMuNmw0LjMgMTYuMSAxNi4xLTQuM2MxNy44LTQuOCAzNi4xIDUuOCA0MC44IDIzLjZzLTUuOCAzNi4xLTIzLjYgNDAuOGwtNjUuMSAxNy40Yy04LjUgMi4zLTE3LjMtMi44LTE5LjYtMTEuM2wtMTcuNC02NWMtNC44LTE3LjggNS44LTM2LjEgMjMuNi00MC44czM2LjEgNS44IDQwLjkgMjMuNnpcIl19LHZkPUEwLE1kPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRpY2UtZm91clwiLGljb246WzQ0OCw1MTIsWzk4NTldLFwiZjUyNFwiLFwiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJIMzg0YzM1LjMgMCA2NCAyOC43IDY0IDY0VjQxNmMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWOTZ6bTE2MCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTEyOCAzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpNMzUyIDE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6TTMyMCAzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnpcIl19LHRkPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNpbS1jYXJkXCIsaWNvbjpbMzg0LDUxMixbXSxcImY3YzRcIixcIk02NCAwSDI0Mi43YzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDk2YzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY2NEMwIDI4LjcgMjguNyAwIDY0IDB6TTk2IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzJoNjRWMTkySDk2ek02NCAzNTJoODAgOTYgODBWMjg4SDI0MCAxNDQgNjR2NjR6TTMyMCAyMjRjMC0xNy43LTE0LjMtMzItMzItMzJIMjU2djY0aDY0VjIyNHpNMTYwIDE5MnY2NGg2NFYxOTJIMTYwek0yODggNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4NEgyNTZ2NjRoMzJ6TTE2MCAzODR2NjRoNjRWMzg0SDE2MHpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMyVjM4NEg2NHYzMnpcIl19LEIwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRyYW5zZ2VuZGVyXCIsaWNvbjpbNTEyLDUxMixbOTg5NSxcInRyYW5zZ2VuZGVyLWFsdFwiXSxcImYyMjVcIixcIk0xMTIgMGM2LjUgMCAxMi4zIDMuOSAxNC44IDkuOXMxLjEgMTIuOS0zLjUgMTcuNGwtMzEgMzFMMTEyIDc4LjFsNy03YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNyA3IDE1LjIgMTUuMkMxODcuNyAxMDcuNiAyMjAuNSA5NiAyNTYgOTZzNjguMyAxMS42IDk0LjkgMzEuMmw2OC44LTY4LjgtMzEtMzFjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjRzOC4zLTkuOSAxNC44LTkuOWg5NmM4LjggMCAxNiA3LjIgMTYgMTZ2OTZjMCA2LjUtMy45IDEyLjMtOS45IDE0LjhzLTEyLjkgMS4xLTE3LjQtMy41bC0zMS0zMS02OC44IDY4LjhDNDA0LjQgMTg3LjcgNDE2IDIyMC41IDQxNiAyNTZjMCA4MC4yLTU5IDE0Ni42LTEzNiAxNTguMlY0MzJoMTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjgwdjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjR2LThIMjE2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDE2VjQxNC4yQzE1NSA0MDIuNiA5NiAzMzYuMiA5NiAyNTZjMC0zNS41IDExLjYtNjguMyAzMS4yLTk0LjlMMTEyIDE0NS45bC03IDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNy03TDU4LjMgOTIuM2wtMzEgMzFjLTQuNiA0LjYtMTEuNSA1LjktMTcuNCAzLjVTMCAxMTguNSAwIDExMlYxNkMwIDcuMiA3LjIgMCAxNiAwaDk2ek0zNTIgMjU2YzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2czk2LTQzIDk2LTk2elwiXX0saGQ9QjAsQ2Q9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWVyY3VyeVwiLGljb246WzM4NCw1MTIsWzk3OTFdLFwiZjIyM1wiLFwiTTcyLjEgN0M4NS44LTQgMTA2LTEuOCAxMTcgMTJjMTcuNiAyMiA0NC43IDM2IDc1IDM2czU3LjMtMTQgNzUtMzZjMTEuMS0xMy44IDMxLjItMTYgNDUtNXMxNiAzMS4yIDUgNDVjLTcuOCA5LjctMTYuNiAxOC40LTI2LjQgMjYuMUMzMzcuMyAxMDkuNyAzNjggMTYzLjMgMzY4IDIyNGMwIDg5LjEtNjYuMiAxNjIuNy0xNTIgMTc0LjRWNDI0aDMyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDIxNnYxNmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFY0NzJIMTM2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0aDMyVjM5OC40QzgyLjIgMzg2LjcgMTYgMzEzLjEgMTYgMjI0YzAtNjAuNyAzMC43LTExNC4zIDc3LjUtMTQ1LjlDODMuNyA3MC41IDc0LjkgNjEuNyA2Ny4xIDUyYy0xMS4xLTEzLjgtOC44LTMzLjkgNS00NXpNODAgMjI0YzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJzLTUwLjEtMTEyLTExMi0xMTJzLTExMiA1MC4xLTExMiAxMTJ6XCJdfSxUMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy10dXJuLWRvd25cIixpY29uOlszODQsNTEyLFtcImxldmVsLWRvd25cIl0sXCJmMTQ5XCIsXCJNMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMlMxNC4zIDAgMzIgMGw5NiAwYzUzIDAgOTYgNDMgOTYgOTZsMCAzMDYuNyA3My40LTczLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMTI4IDEyOGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMMTYwIDQwMi43IDE2MCA5NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiA2NHpcIl19LExkPVQwLHBkPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1mYWxsaW5nLWJ1cnN0XCIsaWNvbjpbNjQwLDUxMixbXSxcImU1NDdcIixcIk0yNTYgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5LjhjMCAzOS0yMy43IDc0LTU5LjkgODguNEM3MS42IDE1NC41IDMyIDIxMyAzMiAyNzguMlYzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTczLjhjMC0xMCAxLjYtMTkuOCA0LjUtMjlMMjYxLjEgNDk3LjRjOS42IDE0LjggMjkuNCAxOS4xIDQ0LjMgOS41czE5LjEtMjkuNCA5LjUtNDQuM0wyMjIuNiAzMjBIMjI0bDgwIDAgMzguNCA1MS4yYzEwLjYgMTQuMSAzMC43IDE3IDQ0LjggNi40czE3LTMwLjcgNi40LTQ0LjhsLTQzLjItNTcuNkMzNDEuMyAyNjMuMSAzMjcuMSAyNTYgMzEyIDI1NmwtNzEuNSAwLTU2LjgtODAuMi0uMi0uM2M0NC43LTI5IDcyLjUtNzkgNzIuNS0xMzMuNmwwLTkuOHpNOTYgODBjMC0yNi41LTIxLjUtNDgtNDgtNDhTMCA1My41IDAgODBzMjEuNSA0OCA0OCA0OHM0OC0yMS41IDQ4LTQ4ek00NjQgMjg2LjFsNTguNiA1My45YzQuOCA0LjQgMTEuOSA1LjUgMTcuOCAyLjZzOS41LTkgOS0xNS41bC01LjYtNzkuNCA3OC43LTEyLjJjNi41LTEgMTEuNy01LjkgMTMuMS0xMi4ycy0xLjEtMTMtNi41LTE2LjdsLTY1LjYtNDUuMUw2MDMgOTIuMmMzLjMtNS43IDIuNy0xMi44LTEuNC0xNy45cy0xMC45LTcuMi0xNy4yLTUuM0w1MDguMyA5Mi4xbC0yOS40LTc0QzQ3Ni40IDEyIDQ3MC42IDggNDY0IDhzLTEyLjQgNC0xNC45IDEwLjFsLTI5LjQgNzRMMzQzLjYgNjguOWMtNi4zLTEuOS0xMy4xIC4yLTE3LjIgNS4zcy00LjYgMTIuMi0xLjQgMTcuOWwzOS41IDY5LjEtNjUuNiA0NS4xYy01LjQgMy43LTggMTAuMy02LjUgMTYuN2MuMSAuMyAuMSAuNiAuMiAuOGwxOS40IDBjMjAuMSAwIDM5LjIgNy41IDUzLjggMjAuOGwxOC40IDIuOUwzODMgMjY1LjNsMzYuMiA0OC4zYzIuMSAyLjggMy45IDUuNyA1LjUgOC42TDQ2NCAyODYuMXpcIl19LGRkPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImF3YXJkXCIsaWNvbjpbMzg0LDUxMixbXSxcImY1NTlcIixcIk0xNzMuOCA1LjVjMTEtNy4zIDI1LjQtNy4zIDM2LjQgMEwyMjggMTcuMmM2IDMuOSAxMyA1LjggMjAuMSA1LjRsMjEuMy0xLjNjMTMuMi0uOCAyNS42IDYuNCAzMS41IDE4LjJsOS42IDE5LjFjMy4yIDYuNCA4LjQgMTEuNSAxNC43IDE0LjdMMzQ0LjUgODNjMTEuOCA1LjkgMTkgMTguMyAxOC4yIDMxLjVsLTEuMyAyMS4zYy0uNCA3LjEgMS41IDE0LjIgNS40IDIwLjFsMTEuOCAxNy44YzcuMyAxMSA3LjMgMjUuNCAwIDM2LjRMMzY2LjggMjI4Yy0zLjkgNi01LjggMTMtNS40IDIwLjFsMS4zIDIxLjNjLjggMTMuMi02LjQgMjUuNi0xOC4yIDMxLjVsLTE5LjEgOS42Yy02LjQgMy4yLTExLjUgOC40LTE0LjcgMTQuN0wzMDEgMzQ0LjVjLTUuOSAxMS44LTE4LjMgMTktMzEuNSAxOC4ybC0yMS4zLTEuM2MtNy4xLS40LTE0LjIgMS41LTIwLjEgNS40bC0xNy44IDExLjhjLTExIDcuMy0yNS40IDcuMy0zNi40IDBMMTU2IDM2Ni44Yy02LTMuOS0xMy01LjgtMjAuMS01LjRsLTIxLjMgMS4zYy0xMy4yIC44LTI1LjYtNi40LTMxLjUtMTguMmwtOS42LTE5LjFjLTMuMi02LjQtOC40LTExLjUtMTQuNy0xNC43TDM5LjUgMzAxYy0xMS44LTUuOS0xOS0xOC4zLTE4LjItMzEuNWwxLjMtMjEuM2MuNC03LjEtMS41LTE0LjItNS40LTIwLjFMNS41IDIxMC4yYy03LjMtMTEtNy4zLTI1LjQgMC0zNi40TDE3LjIgMTU2YzMuOS02IDUuOC0xMyA1LjQtMjAuMWwtMS4zLTIxLjNjLS44LTEzLjIgNi40LTI1LjYgMTguMi0zMS41bDE5LjEtOS42QzY1IDcwLjIgNzAuMiA2NSA3My40IDU4LjZMODMgMzkuNWM1LjktMTEuOCAxOC4zLTE5IDMxLjUtMTguMmwyMS4zIDEuM2M3LjEgLjQgMTQuMi0xLjUgMjAuMS01LjRMMTczLjggNS41ek0yNzIgMTkyYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwczM1LjggODAgODAgODBzODAtMzUuOCA4MC04MHpNMS4zIDQ0MS44TDQ0LjQgMzM5LjNjLjIgLjEgLjMgLjIgLjQgLjRsOS42IDE5LjFjMTEuNyAyMy4yIDM2IDM3LjMgNjIgMzUuOGwyMS4zLTEuM2MuMiAwIC41IDAgLjcgLjJsMTcuOCAxMS44YzUuMSAzLjMgMTAuNSA1LjkgMTYuMSA3LjdsLTM3LjYgODkuM2MtMi4zIDUuNS03LjQgOS4yLTEzLjMgOS43cy0xMS42LTIuMi0xNC44LTcuMkw3NC40IDQ1NS41bC01Ni4xIDguM2MtNS43IC44LTExLjQtMS41LTE1LTZzLTQuMy0xMC43LTIuMS0xNnptMjQ4IDYwLjRMMjExLjcgNDEzYzUuNi0xLjggMTEtNC4zIDE2LjEtNy43bDE3LjgtMTEuOGMuMi0uMSAuNC0uMiAuNy0uMmwyMS4zIDEuM2MyNiAxLjUgNTAuMy0xMi42IDYyLTM1LjhsOS42LTE5LjFjLjEtLjIgLjItLjMgLjQtLjRsNDMuMiAxMDIuNWMyLjIgNS4zIDEuNCAxMS40LTIuMSAxNnMtOS4zIDYuOS0xNSA2bC01Ni4xLTguMy0zMi4yIDQ5LjJjLTMuMiA1LTguOSA3LjctMTQuOCA3LjJzLTExLTQuMy0xMy4zLTkuN3pcIl19LHkwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRpY2tldC1zaW1wbGVcIixpY29uOls1NzYsNTEyLFtcInRpY2tldC1hbHRcIl0sXCJmM2ZmXCIsXCJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRINTEyYzM1LjMgMCA2NCAyOC43IDY0IDY0djgwYy0yNi41IDAtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4djgwYzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYzMDRjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhWMTI4elwiXX0sdWQ9eTAseGQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnVpbGRpbmdcIixpY29uOlszODQsNTEyLFsxMjc5NzAsNjE2ODddLFwiZjFhZFwiLFwiTTQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NlY0MzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHY4MGg5NmMyNi41IDAgNDgtMjEuNSA0OC00OFY0OGMwLTI2LjUtMjEuNS00OC00OC00OEg0OHpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDgwYy04LjggMC0xNi03LjItMTYtMTZWMjQwem0xMTItMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDBjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYyNDB6TTgwIDk2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2em04MCAxNmMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJ6TTI3MiA5NmgzMmM4LjggMCAxNiA3LjIgMTYgMTZ2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDI3MmMtOC44IDAtMTYtNy4yLTE2LTE2VjExMmMwLTguOCA3LjItMTYgMTYtMTZ6XCJdfSxQMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhbmdsZXMtbGVmdFwiLGljb246WzUxMiw1MTIsWzE3MSxcImFuZ2xlLWRvdWJsZS1sZWZ0XCJdLFwiZjEwMFwiLFwiTTQxLjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wxMDkuMyAyNTYgMjQ2LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjB6bTM1Mi0xNjBsLTE2MCAxNjBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzMDEuMyAyNTYgNDM4LjYgMTE4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDB6XCJdfSxnZD1QMCxTZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJxcmNvZGVcIixpY29uOls0NDgsNTEyLFtdLFwiZjAyOVwiLFwiTTQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODB2OTZjMCAyNi41IDIxLjUgNDggNDggNDhoOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6bTgwIDY0djY0SDY0Vjk2aDY0ek00OCAyODhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4aDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjMzNmMwLTI2LjUtMjEuNS00OC00OC00OEg0OHptODAgNjR2NjRINjRWMzUyaDY0ek0yNTYgODB2OTZjMCAyNi41IDIxLjUgNDggNDggNDhoOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWODBjMC0yNi41LTIxLjUtNDgtNDgtNDhIMzA0Yy0yNi41IDAtNDggMjEuNS00OCA0OHptNjQgMTZoNjR2NjRIMzIwVjk2em0zMiAzNTJ2MzJoMzJWNDQ4SDM1MnptOTYgMEg0MTZ2MzJoMzJWNDQ4ek00MTYgMjg4djMySDM1MlYyODhIMjU2djk2IDk2aDY0VjM4NGgzMnYzMmg5NlYzNTIgMzIwIDI4OEg0MTZ6XCJdfSxGMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjbG9jay1yb3RhdGUtbGVmdFwiLGljb246WzUxMiw1MTIsW1wiaGlzdG9yeVwiXSxcImYxZGFcIixcIk03NSA3NUw0MSA0MUMyNS45IDI1LjkgMCAzNi42IDAgNTcuOVYxNjhjMCAxMy4zIDEwLjcgMjQgMjQgMjRIMTM0LjFjMjEuNCAwIDMyLjEtMjUuOSAxNy00MWwtMzAuOC0zMC44QzE1NSA4NS41IDIwMyA2NCAyNTYgNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJzLTg2IDE5Mi0xOTIgMTkyYy00MC44IDAtNzguNi0xMi43LTEwOS43LTM0LjRjLTE0LjUtMTAuMS0zNC40LTYuNi00NC42IDcuOXMtNi42IDM0LjQgNy45IDQ0LjZDMTUxLjIgNDk1IDIwMS43IDUxMiAyNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMEMxODUuMyAwIDEyMS4zIDI4LjcgNzUgNzV6bTE4MSA1M2MtMTMuMyAwLTI0IDEwLjctMjQgMjRWMjU2YzAgNi40IDIuNSAxMi41IDcgMTdsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NS02NVYxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6XCJdfSxOZD1GMCxEMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmYWNlLWdyaW4tYmVhbS1zd2VhdFwiLGljb246WzUxMiw1MTIsWzEyODUxNyxcImdyaW4tYmVhbS1zd2VhdFwiXSxcImY1ODNcIixcIk00NzYuOCAxMjYuM2MtNC4xIDEuMS04LjQgMS43LTEyLjggMS43Yy0yNi41IDAtNDgtMjEtNDgtNDdjMC01IDEuOC0xMS4zIDQuNi0xOC4xYy4zLS43IC42LTEuNCAuOS0yLjFjOS0yMC4yIDI2LjUtNDQuOSAzNi01Ny41YzMuMi00LjQgOS42LTQuNCAxMi44IDBDNDgzLjQgMjAuNiA1MTIgNjEgNTEyIDgxYzAgMjEuNy0xNC45IDM5LjgtMzUuMiA0NS4zek0yNTYgMGM1MS40IDAgOTkuMyAxNS4yIDEzOS40IDQxLjJjLTEuNSAzLjEtMyA2LjItNC4zIDkuM2MtMy40IDgtNy4xIDE5LTcuMSAzMC41YzAgNDQuMyAzNi42IDc5IDgwIDc5YzkuNiAwIDE4LjgtMS43IDI3LjQtNC44YzEzLjMgMzAuOSAyMC42IDY1IDIwLjYgMTAwLjhjMCAxNDEuNC0xMTQuNiAyNTYtMjU2IDI1NlMwIDM5Ny40IDAgMjU2UzExNC42IDAgMjU2IDB6TTM4My44IDMxNy44QzM0NS4zIDMyOS40IDMwMS45IDMzNiAyNTYgMzM2cy04OS4zLTYuNi0xMjcuOC0xOC4yYy0xMi4zLTMuNy0yNC4zIDctMTkuMiAxOC43YzI0LjUgNTYuOSA4MS4xIDk2LjcgMTQ3IDk2LjdzMTIyLjUtMzkuOCAxNDctOTYuN2M1LjEtMTEuOC02LjktMjIuNC0xOS4yLTE4Ljd6bS0xNjYuMi04OWwwIDAgMCAwYzIuMSAyLjggNS43IDMuOSA4LjkgMi44czUuNS00LjEgNS41LTcuNmMwLTE3LjktNi43LTM1LjYtMTYuNi00OC44Yy05LjgtMTMtMjMuOS0yMy4yLTM5LjQtMjMuMnMtMjkuNiAxMC4yLTM5LjQgMjMuMkMxMjYuNyAxODguNCAxMjAgMjA2LjEgMTIwIDIyNGMwIDMuNCAyLjIgNi41IDUuNSA3LjZzNi45IDAgOC45LTIuOGwwIDAgMCAwIDAgMCAuMi0uMmMuMi0uMiAuNC0uNSAuNy0uOWMuNi0uOCAxLjYtMiAyLjgtMy40YzIuNS0yLjggNi02LjYgMTAuMi0xMC4zYzguOC03LjggMTguOC0xNCAyNy43LTE0czE4LjkgNi4yIDI3LjcgMTRjNC4yIDMuNyA3LjcgNy41IDEwLjIgMTAuM2MxLjIgMS40IDIuMiAyLjYgMi44IDMuNGMuMyAuNCAuNiAuNyAuNyAuOWwuMiAuMiAwIDAgMCAwem0xNjAgMGwwIDAgMCAwIDAgMGMyLjEgMi44IDUuNyAzLjkgOC45IDIuOHM1LjUtNC4xIDUuNS03LjZjMC0xNy45LTYuNy0zNS42LTE2LjYtNDguOGMtOS44LTEzLTIzLjktMjMuMi0zOS40LTIzLjJzLTI5LjYgMTAuMi0zOS40IDIzLjJDMjg2LjcgMTg4LjQgMjgwIDIwNi4xIDI4MCAyMjRjMCAzLjQgMi4yIDYuNSA1LjUgNy42czYuOSAwIDguOS0yLjhsMCAwIDAgMCAwIDAgLjItLjJjLjItLjIgLjQtLjUgLjctLjljLjYtLjggMS42LTIgMi44LTMuNGMyLjUtMi44IDYtNi42IDEwLjItMTAuM2M4LjgtNy44IDE4LjgtMTQgMjcuNy0xNHMxOC45IDYuMiAyNy43IDE0YzQuMiAzLjcgNy43IDcuNSAxMC4yIDEwLjNjMS4yIDEuNCAyLjIgMi42IDIuOCAzLjRjLjMgLjQgLjYgLjcgLjcgLjlsLjIgLjIgMCAwelwiXX0sd2Q9RDAsUjA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlsZS1leHBvcnRcIixpY29uOls2NDAsNTEyLFtcImFycm93LXJpZ2h0LWZyb20tZmlsZVwiXSxcImY1NmVcIixcIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwSDI1NlYxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJINDE2VjI4OEgyNDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRINDE2VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEg5NmMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6TTQxNiAzMzZWMjg4SDUyNi4xbC0zOS0zOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04MCA4MGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzOS0zOUg0MTZ6bTAtMjA4SDI4OFYwTDQxNiAxMjh6XCJdfSxrZD1SMCxVMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzaGllbGRcIixpY29uOls1MTIsNTEyLFsxMjg3MzcsXCJzaGllbGQtYmxhbmtcIl0sXCJmMTMyXCIsXCJNMjU2IDBjNC42IDAgOS4yIDEgMTMuNCAyLjlMNDU3LjcgODIuOGMyMiA5LjMgMzguNCAzMSAzOC4zIDU3LjJjLS41IDk5LjItNDEuMyAyODAuNy0yMTMuNyAzNjMuMmMtMTYuNyA4LTM2LjEgOC01Mi44IDBDNTcuMyA0MjAuNyAxNi41IDIzOS4yIDE2IDE0MGMtLjEtMjYuMiAxNi4zLTQ3LjkgMzguMy01Ny4yTDI0Mi43IDIuOUMyNDYuOCAxIDI1MS40IDAgMjU2IDB6XCJdfSxiZD1VMCxxMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy11cC1zaG9ydC13aWRlXCIsaWNvbjpbNTc2LDUxMixbXCJzb3J0LWFtb3VudC11cC1hbHRcIl0sXCJmODg1XCIsXCJNMTUxLjYgNDIuNEMxNDUuNSAzNS44IDEzNyAzMiAxMjggMzJzLTE3LjUgMy44LTIzLjYgMTAuNGwtODggOTZjLTExLjkgMTMtMTEuMSAzMy4zIDIgNDUuMnMzMy4zIDExLjEgNDUuMi0yTDk2IDE0Ni4zVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE0Ni4zbDMyLjQgMzUuNGMxMS45IDEzIDMyLjIgMTMuOSA0NS4yIDJzMTMuOS0zMi4yIDItNDUuMmwtODgtOTZ6TTMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMjB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDk2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMHptMCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMHptMCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINTQ0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyMHpcIl19LEFkPXEwLEJkPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdXNlLW1lZGljYWxcIixpY29uOls1NzYsNTEyLFtdLFwiZTNiMlwiLFwiTTU0My44IDI4Ny42YzE3IDAgMzItMTQgMzItMzIuMWMxLTktMy0xNy0xMS0yNEwzMDkuNSA3Yy02LTUtMTQtNy0yMS03cy0xNSAxLTIyIDhMMTAgMjMxLjVjLTcgNy0xMCAxNS0xMCAyNGMwIDE4IDE0IDMyLjEgMzIgMzIuMWgzMlY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRINDQ4LjVjMzUuNSAwIDY0LjItMjguOCA2NC02NC4zbC0uNy0xNjAuMmgzMnpNMjU2IDIwOGMwLTguOCA3LjItMTYgMTYtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djQ4aDQ4YzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzIwdjQ4YzAgOC44LTcuMiAxNi0xNiAxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNlYzMjBIMjA4Yy04LjggMC0xNi03LjItMTYtMTZWMjcyYzAtOC44IDcuMi0xNiAxNi0xNmg0OFYyMDh6XCJdfSxHMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJnb2xmLWJhbGwtdGVlXCIsaWNvbjpbMzg0LDUxMixbXCJnb2xmLWJhbGxcIl0sXCJmNDUwXCIsXCJNMzg0IDE5MmMwIDY2LjgtMzQuMSAxMjUuNi04NS44IDE2MEg4NS44QzM0LjEgMzE3LjYgMCAyNTguOCAwIDE5MkMwIDg2IDg2IDAgMTkyIDBTMzg0IDg2IDM4NCAxOTJ6TTI0Mi4xIDI1Ni42YzAgMTguNS0xNSAzMy41LTMzLjUgMzMuNWMtNC45IDAtOS42LTEuMS0xMy44LTNjNS4zIDExLjYgMTYuOSAxOS43IDMwLjUgMTkuN2MxOC41IDAgMzMuNS0xNSAzMy41LTMzLjVjMC0xMy42LTguMS0yNS4zLTE5LjctMzAuNWMxLjkgNC4yIDMgOC45IDMgMTMuOHptLTUyLjMtNDkuM2MtNC45IDAtOS42LTEuMS0xMy44LTNjNS4zIDExLjYgMTYuOSAxOS43IDMwLjUgMTkuN2MxOC41IDAgMzMuNS0xNSAzMy41LTMzLjVjMC0xMy42LTguMS0yNS4zLTE5LjctMzAuNWMxLjkgNC4yIDMgOC45IDMgMTMuOGMwIDE4LjUtMTUgMzMuNS0zMy41IDMzLjV6bTExMy41LTE3LjVjMCAxOC41LTE1IDMzLjUtMzMuNSAzMy41Yy00LjkgMC05LjYtMS4xLTEzLjgtM2M1LjMgMTEuNiAxNi45IDE5LjcgMzAuNSAxOS43YzE4LjUgMCAzMy41LTE1IDMzLjUtMzMuNWMwLTEzLjYtOC4xLTI1LjMtMTkuNy0zMC41YzEuOSA0LjIgMyA4LjkgMyAxMy44ek05NiA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJoNjQgNjRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMjQwYy04LjggMC0xNiA3LjItMTYgMTZ2MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDY0YzAtOC44LTcuMi0xNi0xNi0xNkgxMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyelwiXX0sVGQ9RzAsVzA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2lyY2xlLWNoZXZyb24tbGVmdFwiLGljb246WzUxMiw1MTIsW1wiY2hldnJvbi1jaXJjbGUtbGVmdFwiXSxcImYxMzdcIixcIk01MTIgMjU2QzUxMiAxMTQuNiAzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJzMjU2LTExNC42IDI1Ni0yNTZ6TTI3MSAxMzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC04NyA4NyA4NyA4N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDE2NyAyNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDI3MSAxMzV6XCJdfSx5ZD1XMCxQZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJob3VzZS1jaGltbmV5LXdpbmRvd1wiLGljb246WzU3Niw1MTIsW10sXCJlMDBkXCIsXCJNNTc1LjggMjU1LjVjMCAxOC0xNSAzMi4xLTMyIDMyLjFoLTMybC43IDE2MC4yYy4yIDM1LjUtMjguNSA2NC4zLTY0IDY0LjNIMTI4LjFjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4Ny42SDMyYy0xOCAwLTMyLTE0LTMyLTMyLjFjMC05IDMtMTcgMTAtMjRMMjY2LjQgOGM3LTcgMTUtOCAyMi04czE1IDIgMjEgN0w0MTYgMTAwLjdWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTg1bDUyLjggNDYuNGM4IDcgMTIgMTUgMTEgMjR6TTI0OCAxOTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0djgwYzAgMTMuMyAxMC43IDI0IDI0IDI0aDgwYzEzLjMgMCAyNC0xMC43IDI0LTI0VjIxNmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyNDh6XCJdfSxGZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZW4tbmliXCIsaWNvbjpbNTEyLDUxMixbMTAwMDFdLFwiZjVhZFwiLFwiTTM2OC40IDE4LjNMMzEyLjcgNzQuMSA0MzcuOSAxOTkuM2w1NS43LTU1LjdjMjEuOS0yMS45IDIxLjktNTcuMyAwLTc5LjJMNDQ3LjYgMTguM2MtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDB6TTI4OCA5NC42bC05LjIgMi44TDEzNC43IDE0MC42Yy0xOS45IDYtMzUuNyAyMS4yLTQyLjMgNDFMMy44IDQ0NS44Yy0zLjggMTEuMy0xIDIzLjkgNy4zIDMyLjRMMTY0LjcgMzI0LjdjLTMtNi4zLTQuNy0xMy4zLTQuNy0yMC43YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhjLTcuNCAwLTE0LjQtMS43LTIwLjctNC43TDMzLjcgNTAwLjljOC42IDguMyAyMS4xIDExLjIgMzIuNCA3LjNsMjY0LjMtODguNmMxOS43LTYuNiAzNS0yMi40IDQxLTQyLjNsNDMuMi0xNDQuMSAyLjgtOS4yTDI4OCA5NC42elwiXX0sRGQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGVudC1hcnJvdy10dXJuLWxlZnRcIixpY29uOls2NDAsNTEyLFtdLFwiZTU4MFwiLFwiTTE1Mi4xIDQxLjhjOS45LTguOSAxMC43LTI0IDEuOC0zMy45cy0yNC0xMC43LTMzLjktMS44bC04MCA3MkMzNC45IDgyLjcgMzIgODkuMiAzMiA5NnMyLjkgMTMuMyA3LjkgMTcuOGw4MCA3MmM5LjkgOC45IDI1IDguMSAzMy45LTEuOHM4LjEtMjUtMS44LTMzLjlMMTE4LjUgMTIwIDQ4OCAxMjBjMzkuOCAwIDcyIDMyLjIgNzIgNzJ2NDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNFYxOTJjMC02Ni4zLTUzLjctMTIwLTEyMC0xMjBMMTE4LjUgNzJsMzMuNS0zMC4yek0zMzkuNCAxNjYuNWMtMTEuNS04LjctMjcuMy04LjctMzguOCAwbC0xNjggMTI4Yy02LjYgNS0xMSAxMi41LTEyLjMgMjAuN2wtMjQgMTYwYy0xLjQgOS4yIDEuMyAxOC42IDcuNCAyNS42czE0LjkgMTEuMSAyNC4yIDExLjFIMzIwVjM1Mmw5NiAxNjBoOTZjOS4zIDAgMTguMi00LjEgMjQuMi0xMS4xczguOC0xNi40IDcuNC0yNS42bC0yNC0xNjBjLTEuMi04LjItNS42LTE1LjctMTIuMy0yMC43bC0xNjgtMTI4elwiXX0sUmQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGVudHNcIixpY29uOls2NDAsNTEyLFtdLFwiZTU4MlwiLFwiTTM5Ni42IDYuNUwyMzUuOCAxMjkuMWM5LjYgMS44IDE4LjkgNS44IDI3IDEybDE2OCAxMjhjMTMuMiAxMC4xIDIyIDI0LjkgMjQuNSA0MS40bDYuMiA0MS41SDYwOGM5LjMgMCAxOC4yLTQuMSAyNC4yLTExLjFzOC44LTE2LjQgNy40LTI1LjZsLTI0LTE2MGMtMS4yLTguMi01LjYtMTUuNy0xMi4zLTIwLjdsLTE2OC0xMjhjLTExLjUtOC43LTI3LjMtOC43LTM4LjggMHptLTE1My4yIDE2MGMtMTEuNS04LjctMjcuMy04LjctMzguOCAwbC0xNjggMTI4Yy02LjYgNS0xMSAxMi41LTEyLjMgMjAuN2wtMjQgMTYwYy0xLjQgOS4yIDEuMyAxOC42IDcuNCAyNS42UzIyLjcgNTEyIDMyIDUxMkgyMjRWMzUybDk2IDE2MGg5NmM5LjMgMCAxOC4yLTQuMSAyNC4yLTExLjFzOC44LTE2LjQgNy40LTI1LjZsLTI0LTE2MGMtMS4yLTguMi01LjYtMTUuNy0xMi4zLTIwLjdsLTE2OC0xMjh6XCJdfSxFMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ3YW5kLW1hZ2ljXCIsaWNvbjpbNTEyLDUxMixbXCJtYWdpY1wiXSxcImYwZDBcIixcIk0xNC4xIDQ2My4zYy0xOC43LTE4LjctMTguNy00OS4xIDAtNjcuOUwzOTUuNCAxNC4xYzE4LjctMTguNyA0OS4xLTE4LjcgNjcuOSAwbDM0LjYgMzQuNmMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOUwxMTYuNSA0OTcuOWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMTQuMSA0NjMuM3pNMzQ3LjYgMTg3LjZsMTA1LTEwNUw0MjkuNCA1OS4zbC0xMDUgMTA1IDIzLjMgMjMuM3pcIl19LFVkPUUwLHFkPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRvZ1wiLGljb246WzU3Niw1MTIsWzEyODAyMV0sXCJmNmQzXCIsXCJNMzA5LjYgMTU4LjVMMzMyLjcgMTkuOEMzMzQuNiA4LjQgMzQ0LjUgMCAzNTYuMSAwYzcuNSAwIDE0LjUgMy41IDE5IDkuNUwzOTIgMzJoNTIuMWMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xTDQ5NiA2NGg1NmMxMy4zIDAgMjQgMTAuNyAyNCAyNHYyNGMwIDQ0LjItMzUuOCA4MC04MCA4MEg0NjQgNDQ4IDQyNi43bC01LjEgMzAuNS0xMTItNjR6TTQxNiAyNTYuMUw0MTYgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMySDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzY0LjhjLTI0IDEyLjMtNTEuMiAxOS4yLTgwIDE5LjJzLTU2LTYuOS04MC0xOS4yVjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjQ5LjhjLTI4LjgtMTAuOS01MS40LTM1LjMtNTkuMi02Ni41TDEgMTY3LjhjLTQuMy0xNy4xIDYuMS0zNC41IDIzLjMtMzguOHMzNC41IDYuMSAzOC44IDIzLjNsMy45IDE1LjVDNzAuNSAxODIgODMuMyAxOTIgOTggMTkyaDMwIDE2SDMwMy44TDQxNiAyNTYuMXpNNDY0IDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZ6XCJdfSxHZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYXJyb3RcIixpY29uOls1MTIsNTEyLFsxMjkzNjVdLFwiZjc4N1wiLFwiTTM0Ni43IDZDMzM3LjYgMTcgMzIwIDQyLjMgMzIwIDcyYzAgNDAgMTUuMyA1NS4zIDQwIDgwczQwIDQwIDgwIDQwYzI5LjcgMCA1NS0xNy42IDY2LTI2LjdjNC0zLjMgNi04LjIgNi0xMy4zcy0yLTEwLTYtMTMuMmMtMTEuNC05LjEtMzguMy0yNi44LTc0LTI2LjhjLTMyIDAtNDAgOC00MCA4czgtOCA4LTQwYzAtMzUuNy0xNy43LTYyLjYtMjYuOC03NEMzNzAgMiAzNjUuMSAwIDM2MCAwcy0xMCAyLTEzLjMgNnpNMjQ0LjYgMTM2Yy00MCAwLTc3LjEgMTguMS0xMDEuNyA0OC4ybDYwLjUgNjAuNWM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC01NS4zLTU1LjMgMCAuMUwyLjIgNDc3LjlDLTIgNDg3LS4xIDQ5Ny44IDcgNTA1czE3LjkgOSAyNy4xIDQuOGwxMzQuNy02Mi40LTUyLjEtNTIuMWMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwTDE5OS43IDQzM2wxMDAuMi00Ni40YzQ2LjQtMjEuNSA3Ni4yLTY4IDc2LjItMTE5LjJDMzc2IDE5NC44IDMxNy4yIDEzNiAyNDQuNiAxMzZ6XCJdfSxXZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtb29uXCIsaWNvbjpbMzg0LDUxMixbMTI3NzY5LDkyMTRdLFwiZjE4NlwiLFwiTTIyMy41IDMyQzEwMCAzMiAwIDEzMi4zIDAgMjU2UzEwMCA0ODAgMjIzLjUgNDgwYzYwLjYgMCAxMTUuNS0yNC4yIDE1NS44LTYzLjRjNS00LjkgNi4zLTEyLjUgMy4xLTE4LjdzLTEwLjEtOS43LTE3LTguNWMtOS44IDEuNy0xOS44IDIuNi0zMC4xIDIuNmMtOTYuOSAwLTE3NS41LTc4LjgtMTc1LjUtMTc2YzAtNjUuOCAzNi0xMjMuMSA4OS4zLTE1My4zYzYuMS0zLjUgOS4yLTEwLjUgNy43LTE3LjNzLTcuMy0xMS45LTE0LjMtMTIuNWMtNi4zLS41LTEyLjYtLjgtMTktLjh6XCJdfSxJMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ3aW5lLWdsYXNzLWVtcHR5XCIsaWNvbjpbMzIwLDUxMixbXCJ3aW5lLWdsYXNzLWFsdFwiXSxcImY1Y2VcIixcIk02NCAwQzQ3LjQgMCAzMy41IDEyLjggMzIuMSAyOS4zbC0xNCAxNjguNGMtNiA3MiA0Mi41IDEzNS4yIDEwOS45IDE1MC42VjQ0OEg4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmg4MCA4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxOTJWMzQ4LjRjNjcuNC0xNS40IDExNS45LTc4LjYgMTA5LjktMTUwLjZsLTE0LTE2OC40QzI4Ni41IDEyLjggMjcyLjYgMCAyNTYgMEg2NHpNODEuOSAyMDMuMUw5My40IDY0SDIyNi42bDExLjYgMTM5LjFDMjQyIDI0OC44IDIwNS45IDI4OCAxNjAgMjg4cy04Mi0zOS4yLTc4LjEtODQuOXpcIl19LEVkPUkwLElkPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNoZWVzZVwiLGljb246WzUxMiw1MTIsW10sXCJmN2VmXCIsXCJNNTEyIDI0MC4yVjI1NkgwYzAtMjAgMTAtMzguNyAyNi42LTQ5LjhMMjc0LjkgNDAuN2M4LjYtNS43IDE4LjYtOC43IDI4LjktOC43QzQxOC44IDMyIDUxMiAxMjUuMiA1MTIgMjQwLjJ6bTAgNDcuOFY0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjI4OEg1MTJ6XCJdfSxPZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ5aW4teWFuZ1wiLGljb246WzUxMiw1MTIsWzk3NzVdLFwiZjZhZFwiLFwiTTI1NiA2NGM1MyAwIDk2IDQzIDk2IDk2cy00MyA5Ni05NiA5NnMtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZDMTUwIDQ0OCA2NCAzNjIgNjQgMjU2UzE1MCA2NCAyNTYgNjR6bTAgNDQ4YzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyem0zMi0zNTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem0wIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdfSxYZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtdXNpY1wiLGljb246WzUxMiw1MTIsWzEyNzkyNV0sXCJmMDAxXCIsXCJNNDk5LjEgNi4zYzguMSA2IDEyLjkgMTUuNiAxMi45IDI1Ljd2NzJWMzY4YzAgNDQuMi00MyA4MC05NiA4MHMtOTYtMzUuOC05Ni04MHM0My04MCA5Ni04MGMxMS4yIDAgMjIgMS42IDMyIDQuNlYxNDdMMTkyIDIyMy44VjQzMmMwIDQ0LjItNDMgODAtOTYgODBzLTk2LTM1LjgtOTYtODBzNDMtODAgOTYtODBjMTEuMiAwIDIyIDEuNiAzMiA0LjZWMjAwIDEyOGMwLTE0LjEgOS4zLTI2LjYgMjIuOC0zMC43bDMyMC05NmM5LjctMi45IDIwLjItMS4xIDI4LjMgNXpcIl19LFFkPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNvZGUtY29tbWl0XCIsaWNvbjpbNjQwLDUxMixbXSxcImYzODZcIixcIk0zMjAgMzM2YzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwczM1LjggODAgODAgODB6bTE1Ni44LTQ4QzQ2MiAzNjEgMzk3LjQgNDE2IDMyMCA0MTZzLTE0Mi01NS0xNTYuOC0xMjhIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJIMTYzLjJDMTc4IDE1MSAyNDIuNiA5NiAzMjAgOTZzMTQyIDU1IDE1Ni44IDEyOEg2MDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDc2Ljh6XCJdfSxLZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0ZW1wZXJhdHVyZS1sb3dcIixpY29uOls1MTIsNTEyLFtdLFwiZjc2YlwiLFwiTTQ0OCA5NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6bTY0IDBjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZzNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZ6TTE0NCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWMjc2LjVjMCAxNy4zLTcuMSAzMS45LTE1LjMgNDIuNUM3MC4yIDMzMi42IDY0IDM0OS41IDY0IDM2OGMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtMTguNS02LjItMzUuNC0xNi43LTQ4LjljLTguMi0xMC42LTE1LjMtMjUuMi0xNS4zLTQyLjVWMTEyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek0zMiAxMTJDMzIgNTAuMiA4Mi4xIDAgMTQ0IDBzMTEyIDUwLjEgMTEyIDExMlYyNzYuNWMwIC4xIC4xIC4zIC4yIC42Yy4yIC42IC44IDEuNiAxLjcgMi44YzE4LjkgMjQuNCAzMC4xIDU1IDMwLjEgODguMWMwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFMwIDQ0Ny41IDAgMzY4YzAtMzMuMiAxMS4yLTYzLjggMzAuMS04OC4xYy45LTEuMiAxLjUtMi4yIDEuNy0yLjhjLjEtLjMgLjItLjUgLjItLjZWMTEyek0xOTIgMzY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM1YyNzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY1MC43YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM3pcIl19LE8wPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1iaWtpbmdcIixpY29uOls2NDAsNTEyLFsxMjg2OTIsXCJiaWtpbmdcIl0sXCJmODRhXCIsXCJNNDAwIDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6bTI3LjIgNjRsLTYxLjgtNDguOGMtMTcuMy0xMy42LTQxLjctMTMuOC01OS4xLS4zbC04My4xIDY0LjJjLTMwLjcgMjMuOC0yOC41IDcwLjggNC4zIDkxLjZMMjg4IDMwNS4xVjQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjI4OGMwLTEwLjctNS4zLTIwLjctMTQuMi0yNi42TDI5NSAyMzIuOWw2MC4zLTQ4LjVMMzk2IDIxN2M1LjcgNC41IDEyLjcgNyAyMCA3aDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQyNy4yek0yMDAgMzg0YzAgMzkuOC0zMi4yIDcyLTcyIDcycy03Mi0zMi4yLTcyLTcyczMyLjItNzIgNzItNzJzNzIgMzIuMiA3MiA3MnptNTYgMGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOFMwIDMxMy4zIDAgMzg0czU3LjMgMTI4IDEyOCAxMjhzMTI4LTU3LjMgMTI4LTEyOHptMzI4IDBjMCAzOS44LTMyLjIgNzItNzIgNzJzLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MnM3MiAzMi4yIDcyIDcyem01NiAwYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4cy0xMjggNTcuMy0xMjggMTI4czU3LjMgMTI4IDEyOCAxMjhzMTI4LTU3LjMgMTI4LTEyOHpcIl19LGpkPU8wLEpkPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJyb29tXCIsaWNvbjpbNjQwLDUxMixbMTI5NTI5XSxcImY1MWFcIixcIk02MjcuNiA1Ny4zYzE0LTEwLjkgMTYuNS0zMSA1LjYtNDQuOXMtMzEtMTYuNS00NC45LTUuNmwtMTQ0IDExMi03MiA1Ni04LjcgNi44LTMwLjgtMzkuNGMtMy43LTQuOC05LjgtNy0xNS44LTUuOHMtMTAuNyA1LjctMTIuMyAxMS41bC0xMi41IDQ2LjNMMzcxLjEgMjk1bDQ4LS45YzYuMS0uMSAxMS41LTMuNyAxNC4xLTkuMXMxLjktMTEuOS0xLjgtMTYuN0w0MDMgMjMxLjlsOC42LTYuNyA3Mi01NiAxNDQtMTEyek0xNi43IDUwNy43YzM3LjQgMi44IDE5Ni44IDEyIDI1Mi4zLTMxLjRjNTcuNy00NS4xIDc2LjgtMTYxLjUgNzYuOC0xNjEuNUwyNjcuMSAyMTMuOXMtMTE3LjYtOS42LTE3NS4zIDM1LjVDNjkgMjY3LjEgNTAuNSAzMDQuMSAzNi4zIDM0NGMtMi40IDYuNyA0LjcgMTIuOCAxMSA5LjRMODYuMiAzMzNjNC4xLTIuMiA5LjItMS4xIDEyIDIuNnMyLjcgOC44LS40IDEyLjNMMjQuNCA0MzAuNEMxMy4yIDQ0Mi45IDUuNSA0NTguMSAyLjQgNDc0LjVjLS45IDQuOC0xLjYgOC45LTIuMiAxMi4xYy0uOSA1IC41IDEwLjEgMy42IDE0LjFzNy43IDYuNiAxMi44IDd6XCJdfSxaZD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzaGllbGQtaGVhcnRcIixpY29uOls1MTIsNTEyLFtdLFwiZTU3NFwiLFwiTTI2OS40IDIuOUMyNjUuMiAxIDI2MC43IDAgMjU2IDBzLTkuMiAxLTEzLjQgMi45TDU0LjMgODIuOGMtMjIgOS4zLTM4LjQgMzEtMzguMyA1Ny4yYy41IDk5LjIgNDEuMyAyODAuNyAyMTMuNiAzNjMuMmMxNi43IDggMzYuMSA4IDUyLjggMEM0NTQuNyA0MjAuNyA0OTUuNSAyMzkuMiA0OTYgMTQwYy4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTE0NCAyMjEuM2MwLTMzLjggMjcuNC02MS4zIDYxLjMtNjEuM2MxNi4yIDAgMzEuOCA2LjUgNDMuMyAxNy45bDcuNCA3LjQgNy40LTcuNGMxMS41LTExLjUgMjcuMS0xNy45IDQzLjMtMTcuOWMzMy44IDAgNjEuMyAyNy40IDYxLjMgNjEuM2MwIDE2LjItNi41IDMxLjgtMTcuOSA0My4zbC04Mi43IDgyLjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC04Mi43LTgyLjdjLTExLjUtMTEuNS0xNy45LTI3LjEtMTcuOS00My4zelwiXX0sWWQ9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ29wdXJhbVwiLGljb246WzUxMiw1MTIsW10sXCJmNjY0XCIsXCJNMTIwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjR2OGg0MFYyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0djhoNDhWMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHY4aDQwVjI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2OFY2NHY2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMxNy43IDAgMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkg0MTZWMzUySDM4NFYyMjRIMzUyVjEyOEgzMjB2OTZoMzJWMzUyaDMyVjUxMkgzMDRWNDY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4djQ4SDEyOFYzNTJoMzJWMjI0aDMyVjEyOEgxNjB2OTZIMTI4VjM1Mkg5NlY1MTJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMlYyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJWMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMyVjY0IDMyIDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0ek0yNTYgMjcyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY0OGg2NFYzMDRjMC0xNy43LTE0LjMtMzItMzItMzJ6bS0zMi04MHYzMmg2NFYxOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6XCJdfSxYMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJlYXJ0aC1vY2VhbmlhXCIsaWNvbjpbNTEyLDUxMixbXCJnbG9iZS1vY2VhbmlhXCJdLFwiZTQ3YlwiLFwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJ6TTIwOC42IDM1Ny4zbC0zOS0xMy41Yy02LjUtMi4yLTEzLjYtMi4zLTIwLjEtLjNsLTE1LjMgNC45Yy0xOC41IDUuOS0zOC41LTIuNC00Ny41LTE5LjVsLTMuMy02LjJjLTEwLjYtMjAuMS0yLjMtNDUgMTguMi01NC43bDM1LjMtMTYuOGMyLjMtMS4xIDQuNC0yLjggNS45LTQuOGw1LjMtN2M3LjItOS42IDE4LjYtMTUuMyAzMC42LTE1LjNzMjMuNCA1LjcgMzAuNiAxNS4zbDQuNiA2LjFjMiAyLjYgNC45IDQuNSA4LjEgNS4xYzcuOCAxLjYgMTUuNy0xLjUgMjAuNC03LjlsMTAuNC0xNC4yYzItMi44IDUuMy00LjQgOC43LTQuNGM0LjQgMCA4LjQgMi43IDEwIDYuOGwxMC4xIDI1LjljMi44IDcuMiA2LjcgMTQgMTEuNSAyMC4yTDMxMSAyOTkuOGM1LjggNy40IDkgMTYuNiA5IDI2cy0zLjIgMTguNi05IDI2TDI5OSAzNjcuMmMtOC4zIDEwLjYtMjEgMTYuOC0zNC40IDE2LjhjLTguNCAwLTE2LjYtMi40LTIzLjctN2wtMjUuNC0xNi40Yy0yLjItMS40LTQuNS0yLjUtNi45LTMuNHptNjUuMi0yMTQuOEwyOTYgMTY0LjdjMTAuMSAxMC4xIDIuOSAyNy4zLTExLjMgMjcuM0gyNTQuOGMtNS42IDAtMTEuMS0xLjItMTYuMi0zLjRsLTQyLjgtMTljLTE0LjMtNi4zLTExLjktMjcuMyAzLjQtMzAuM2wzOC41LTcuN2MxMy4xLTIuNiAyNi43IDEuNSAzNi4xIDEwLjl6TTI0OCA0MzJjMC04LjggNy4yLTE2IDE2LTE2aDE2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI2NGMtOC44IDAtMTYtNy4yLTE2LTE2ek00MzEuMiAyOTguOWw4IDI0YzIuOCA4LjQtMS43IDE3LjQtMTAuMSAyMC4ycy0xNy40LTEuNy0yMC4yLTEwLjFsLTgtMjRjLTIuOC04LjQgMS43LTE3LjQgMTAuMS0yMC4yczE3LjQgMS43IDIwLjIgMTAuMXptLTE5LjkgODAuNGwtMzIgMzJjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzItMzJjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42elwiXX0sX2Q9WDAsZjI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3F1YXJlLXhtYXJrXCIsaWNvbjpbNDQ4LDUxMixbMTAwNjIsXCJ0aW1lcy1zcXVhcmVcIixcInhtYXJrLXNxdWFyZVwiXSxcImYyZDNcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEgzODRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTc5IDE0M2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw0NyA0NyA0Ny00N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTQ3IDQ3IDQ3IDQ3YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ3LTQ3LTQ3IDQ3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ3LTQ3LTQ3LTQ3Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXpcIl19LCRkPWYyLGN1PWYyLGF1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhc2h0YWdcIixpY29uOls0NDgsNTEyLFs2MjA5OF0sXCIyM1wiLFwiTTE4MS4zIDMyLjRjMTcuNCAyLjkgMjkuMiAxOS40IDI2LjMgMzYuOEwxOTcuOCAxMjhoOTUuMWwxMS41LTY5LjNjMi45LTE3LjQgMTkuNC0yOS4yIDM2LjgtMjYuM3MyOS4yIDE5LjQgMjYuMyAzNi44TDM1Ny44IDEyOEg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzQ3LjFMMzI1LjggMzIwSDM4NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMTUuMWwtMTEuNSA2OS4zYy0yLjkgMTcuNC0xOS40IDI5LjItMzYuOCAyNi4zcy0yOS4yLTE5LjQtMjYuMy0zNi44bDkuOC01OC43SDE1NS4xbC0xMS41IDY5LjNjLTIuOSAxNy40LTE5LjQgMjkuMi0zNi44IDI2LjNzLTI5LjItMTkuNC0yNi4zLTM2LjhMOTAuMiAzODRIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJoNjguOWwyMS4zLTEyOEg2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmg2OC45bDExLjUtNjkuM2MyLjktMTcuNCAxOS40LTI5LjIgMzYuOC0yNi4zek0xODcuMSAxOTJMMTY1LjggMzIwaDk1LjFsMjEuMy0xMjhIMTg3LjF6XCJdfSxRMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1cC1yaWdodC1hbmQtZG93bi1sZWZ0LWZyb20tY2VudGVyXCIsaWNvbjpbNTEyLDUxMixbXCJleHBhbmQtYWx0XCJdLFwiZjQyNFwiLFwiTTM0NCAwSDQ4OGMxMy4zIDAgMjQgMTAuNyAyNCAyNFYxNjhjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzktMzktODcgODdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC0zMi0zMmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODctODdMMzI3IDQxYy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yUzMzNC4zIDAgMzQ0IDB6TTE4NCA0OTZINDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0VjMyOGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJzMTkuMy0xLjcgMjYuMiA1LjJsMzkgMzkgODctODdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJzLTEyLjUgMTQuOC0yMi4yIDE0Ljh6XCJdfSxzdT1RMCxldT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJvaWwtY2FuXCIsaWNvbjpbNjQwLDUxMixbXSxcImY2MTNcIixcIk0zMjAgMTI4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmgzMnYzMkgxNDQgOTYgNDhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djY0LjhjMCAxOSAxMS4yIDM2LjIgMjguNSA0My45bDY3LjUgMzBWMzY4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDQwMy4xYzE4LjQgMCAzNS44LTcuOSA0OC0yMS43TDYzMy41IDE4Ny43YzEyLjMtMTMuOS0uMy0zNS40LTE4LjQtMzEuNUw0NDggMTkybC01MC41LTI1LjJjLTguOS00LjQtMTguNy02LjgtMjguNi02LjhIMjg4VjEyOGgzMnpNOTYgMjA4djg2LjFMNDggMjcyLjhWMjA4SDk2elwiXX0sZnU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidFwiLGljb246WzM4NCw1MTIsWzExNl0sXCI1NFwiLFwiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NkgxNjBWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWOTZIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDE5MiAzMnpcIl19LHJ1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhpcHBvXCIsaWNvbjpbNjQwLDUxMixbMTI5NDM1XSxcImY2ZWRcIixcIk00MDcgNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMTcuMiAxNy4yYzEuOS0uMSAzLjktLjIgNS44LS4yaDMyYzExLjIgMCAyMS45IDIuMyAzMS42IDYuNUw1NDMgNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDU2NCAxMDEuOWM3LjYgMTIuMiAxMiAyNi43IDEyIDQyLjFjMCAxMC4yIDcuNCAxOC44IDE2LjcgMjNjMjcuOSAxMi41IDQ3LjMgNDAuNSA0Ny4zIDczYzAgMjYuMi0xMi42IDQ5LjQtMzIgNjR2MzJjMCA4LjgtNy4yIDE2LTE2IDE2SDU2MGMtOC44IDAtMTYtNy4yLTE2LTE2VjMyMEg0ODB2MTZjMCA4LjgtNy4yIDE2LTE2IDE2SDQzMmMtOC44IDAtMTYtNy4yLTE2LTE2VjMxOC40Yy0xMS44LTIuNC0yMi43LTcuNC0zMi0xNC40Yy0xLjUtMS4xLTIuOS0yLjMtNC4zLTMuNWMtMTctMTQuNy0yNy43LTM2LjQtMjcuNy02MC41YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2YzAgNDQuNyAyNi4yIDgzLjIgNjQgMTAxLjJWMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMySDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzcyYy0xOS44IDcuNy00MS40IDEyLTY0IDEycy00NC4yLTQuMy02NC0xMnY3NmMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzI5LjFMNDUuOSAzNjkuN2MtNS40IDEyLjEtMTkuNiAxNy42LTMxLjcgMTIuMlMtMy4zIDM2Mi40IDIuMSAzNTAuM0wyNCAzMDAuOWM1LjMtMTEuOSA4LTI0LjcgOC0zNy43QzMyIDE1NS43IDExNy4yIDY4IDIyMy44IDY0LjFsLjItLjFoNy4ySDI1NmgzMmM0MS43IDAgODMuNCAxMi4xIDExNy4yIDI1LjdjMS43LTEuOCAzLjUtMy42IDUuMy01LjJMNDA3IDgxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptNzMgMTg1YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNHptODggMjRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHpNNDgwIDE0NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2em00OCAxNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNnpcIl19LGx1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNoYXJ0LWNvbHVtblwiLGljb246WzUxMiw1MTIsW10sXCJlMGUzXCIsXCJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNDAwYzAgOC44IDcuMiAxNiAxNiAxNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyek0xNjAgMjI0YzE3LjcgMCAzMiAxNC4zIDMyIDMydjY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTI4LTY0VjMyMGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptNjQgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00ODAgOTZWMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6XCJdfSxpdT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJpbmZpbml0eVwiLGljb246WzY0MCw1MTIsWzg3MzQsOTg1NF0sXCJmNTM0XCIsXCJNMCAyNDEuMUMwIDE2MSA2NSA5NiAxNDUuMSA5NmMzOC41IDAgNzUuNCAxNS4zIDEwMi42IDQyLjVMMzIwIDIxMC43bDcyLjItNzIuMkM0MTkuNSAxMTEuMyA0NTYuNCA5NiA0OTQuOSA5NkM1NzUgOTYgNjQwIDE2MSA2NDAgMjQxLjF2MjkuN0M2NDAgMzUxIDU3NSA0MTYgNDk0LjkgNDE2Yy0zOC41IDAtNzUuNC0xNS4zLTEwMi42LTQyLjVMMzIwIDMwMS4zbC03Mi4yIDcyLjJDMjIwLjUgNDAwLjcgMTgzLjYgNDE2IDE0NS4xIDQxNkM2NSA0MTYgMCAzNTEgMCAyNzAuOVYyNDEuMXpNMjc0LjcgMjU2bC03Mi4yLTcyLjJjLTE1LjItMTUuMi0zNS45LTIzLjgtNTcuNC0yMy44QzEwMC4zIDE2MCA2NCAxOTYuMyA2NCAyNDEuMXYyOS43YzAgNDQuOCAzNi4zIDgxLjEgODEuMSA4MS4xYzIxLjUgMCA0Mi4yLTguNSA1Ny40LTIzLjhMMjc0LjcgMjU2em05MC41IDBsNzIuMiA3Mi4yYzE1LjIgMTUuMiAzNS45IDIzLjggNTcuNCAyMy44YzQ0LjggMCA4MS4xLTM2LjMgODEuMS04MS4xVjI0MS4xYzAtNDQuOC0zNi4zLTgxLjEtODEuMS04MS4xYy0yMS41IDAtNDIuMiA4LjUtNTcuNCAyMy44TDM2NS4zIDI1NnpcIl19LG91PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZpYWwtY2lyY2xlLWNoZWNrXCIsaWNvbjpbNTEyLDUxMixbXSxcImU1OTZcIixcIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMySDk2aDY0IDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyVjI2Ni44Yy0yMC4yIDI4LjYtMzIgNjMuNS0zMiAxMDEuMmMwIDI1LjIgNS4zIDQ5LjEgMTQuOCA3MC44QzE4OS41IDQ2My43IDE2MC42IDQ4MCAxMjggNDgwYy01MyAwLTk2LTQzLTk2LTk2Vjk2QzE0LjMgOTYgMCA4MS43IDAgNjR6TTk2IDk2djk2aDY0Vjk2SDk2ek01MTIgMzY4YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHptLTc2LjctNDMuM2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMzUyIDM4NS40bC0yOC43LTI4LjdjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNzItNzJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6XCJdfSxudT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24tYXJyb3ctZG93bi10by1saW5lXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1MzhcIixcIk0xOTIgOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHptLTggMzUyVjM1MmgxNnY5NkgxODR6bS02NCAwSDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDE1Mmg4MEg2MDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjY0VjI1Ni45bDI4LjYgNDcuNWM5LjEgMTUuMSAyOC44IDIwIDQzLjkgMTAuOXMyMC0yOC44IDEwLjktNDMuOWwtNTguMy05N2MtMTcuNC0yOC45LTQ4LjYtNDYuNi04Mi4zLTQ2LjZIMTc3LjFjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45TDEyMCAyNTYuOVY0NDh6TTQ2NCA2NFYzMDYuN2wtMjUuNC0yNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w4MCA4MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw4MC04MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEw1MjggMzA2LjdWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6XCJdfSxIdT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ2b2ljZW1haWxcIixpY29uOls2NDAsNTEyLFtdLFwiZjg5N1wiLFwiTTE0NCAxNjBjNDQuMiAwIDgwIDM1LjggODAgODBzLTM1LjggODAtODAgODBzLTgwLTM1LjgtODAtODBzMzUuOC04MCA4MC04MHpNMjYzLjggMzIwYzE1LjMtMjIuOSAyNC4yLTUwLjQgMjQuMi04MGMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NFMwIDE2MC41IDAgMjQwczY0LjUgMTQ0IDE0NCAxNDRINDk2Yzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0YzAgMjkuNiA4LjkgNTcuMSAyNC4yIDgwSDI2My44ek00OTYgMzIwYy00NC4yIDAtODAtMzUuOC04MC04MHMzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBzLTM1LjggODAtODAgODB6XCJdfSx6dT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmYW5cIixpY29uOls1MTIsNTEyLFtdLFwiZjg2M1wiLFwiTTI1OC42IDBjLTEuNyAwLTMuNCAuMS01LjEgLjVDMTY4IDE3IDExNS42IDEwMi4zIDEzMC41IDE4OS4zYzIuOSAxNyA4LjQgMzIuOSAxNS45IDQ3LjRMMzIgMjI0SDI5LjRDMTMuMiAyMjQgMCAyMzcuMiAwIDI1My40YzAgMS43IC4xIDMuNCAuNSA1LjFDMTcgMzQ0IDEwMi4zIDM5Ni40IDE4OS4zIDM4MS41YzE3LTIuOSAzMi45LTguNCA0Ny40LTE1LjlMMjI0IDQ4MHYyLjZjMCAxNi4yIDEzLjIgMjkuNCAyOS40IDI5LjRjMS43IDAgMy40LS4xIDUuMS0uNUMzNDQgNDk1IDM5Ni40IDQwOS43IDM4MS41IDMyMi43Yy0yLjktMTctOC40LTMyLjktMTUuOS00Ny40TDQ4MCAyODhoMi42YzE2LjIgMCAyOS40LTEzLjIgMjkuNC0yOS40YzAtMS43LS4xLTMuNC0uNS01LjFDNDk1IDE2OCA0MDkuNyAxMTUuNiAzMjIuNyAxMzAuNWMtMTcgMi45LTMyLjkgOC40LTQ3LjQgMTUuOUwyODggMzJWMjkuNEMyODggMTMuMiAyNzQuOCAwIDI1OC42IDB6TTI1NiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LFZ1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi13YWxraW5nLWx1Z2dhZ2VcIixpY29uOls1NzYsNTEyLFtdLFwiZTU1NFwiLFwiTTQzMiA5NmMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4ek0zNDcuNyAyMDAuNWMxLS40IDEuOS0uOCAyLjktMS4ybC0xNi45IDYzLjVjLTUuNiAyMS4xLS4xIDQzLjYgMTQuNyA1OS43bDcwLjcgNzcuMSAyMiA4OC4xYzQuMyAxNy4xIDIxLjcgMjcuNiAzOC44IDIzLjNzMjcuNi0yMS43IDIzLjMtMzguOGwtMjMtOTIuMWMtMS45LTcuOC01LjgtMTQuOS0xMS4yLTIwLjhsLTQ5LjUtNTQgMTkuMy02NS41IDkuNiAyM2M0LjQgMTAuNiAxMi41IDE5LjMgMjIuOCAyNC41bDI2LjcgMTMuM2MxNS44IDcuOSAzNSAxLjUgNDIuOS0xNC4zczEuNS0zNS0xNC4zLTQyLjlMNTA1IDIzMi43bC0xNS4zLTM2LjhDNDcyLjUgMTU0LjggNDMyLjMgMTI4IDM4Ny43IDEyOGMtMjIuOCAwLTQ1LjMgNC44LTY2LjEgMTRsLTggMy41Yy0zMi45IDE0LjYtNTguMSA0Mi40LTY5LjQgNzYuNWwtMi42IDcuOGMtNS42IDE2LjggMy41IDM0LjkgMjAuMiA0MC41czM0LjktMy41IDQwLjUtMjAuMmwyLjYtNy44YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjV6bS0zMCAxMzUuMWwtMjUgNjIuNC01OS40IDU5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMzQwLjMgNDQxYzQuNi00LjYgOC4yLTEwLjEgMTAuNi0xNi4xbDE0LjUtMzYuMi00MC43LTQ0LjRjLTIuNS0yLjctNC44LTUuNi03LTguNnpNMjU2IDI3NC4xYy03LjctNC40LTE3LjQtMS44LTIxLjkgNS45bC0zMiA1NS40TDE0Ny43IDMwNGMtMTUuMy04LjgtMzQuOS0zLjYtNDMuNyAxMS43TDQwIDQyNi42Yy04LjggMTUuMy0zLjYgMzQuOSAxMS43IDQzLjdsNTUuNCAzMmMxNS4zIDguOCAzNC45IDMuNiA0My43LTExLjdsNjQtMTEwLjljMS41LTIuNiAyLjYtNS4yIDMuMy04TDI2MS45IDI5NmM0LjQtNy43IDEuOC0xNy40LTUuOS0yMS45elwiXX0sSzA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXAtZG93blwiLGljb246WzI1Niw1MTIsWzg1OTcsMTEwMjEsXCJhcnJvd3MtYWx0LXZcIl0sXCJmMzM4XCIsXCJNMTQ1LjYgNy43QzE0MSAyLjggMTM0LjcgMCAxMjggMHMtMTMgMi44LTE3LjYgNy43bC0xMDQgMTEyYy02LjUgNy04LjIgMTcuMi00LjQgMjUuOVMxNC41IDE2MCAyNCAxNjBIODBWMzUySDI0Yy05LjUgMC0xOC4yIDUuNy0yMiAxNC40cy0yLjEgMTguOSA0LjQgMjUuOWwxMDQgMTEyYzQuNSA0LjkgMTAuOSA3LjcgMTcuNiA3LjdzMTMtMi44IDE3LjYtNy43bDEwNC0xMTJjNi41LTcgOC4yLTE3LjIgNC40LTI1LjlzLTEyLjUtMTQuNC0yMi0xNC40SDE3NlYxNjBoNTZjOS41IDAgMTguMi01LjcgMjItMTQuNHMyLjEtMTguOS00LjQtMjUuOWwtMTA0LTExMnpcIl19LG11PUswLHZ1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNsb3VkLW1vb24tcmFpblwiLGljb246WzY0MCw1MTIsW10sXCJmNzNjXCIsXCJNNTEzLjIgMEM0NDkgMCAzOTUuNSA0Ni41IDM4NS43IDEwNy42YzM1LjQgMTcuNiA2MC4yIDUzLjMgNjIuMSA5NS4xYzIzLjIgMTEgNDIgMjkuNyA1My4xIDUyLjdjNCAuNCA4LjEgLjYgMTIuMyAuNmMzNC45IDAgNjYuNy0xMy44IDg5LjktMzYuMWM1LjEtNC45IDYuNC0xMi41IDMuMi0xOC43cy0xMC4xLTkuNy0xNy04LjZjLTQuOSAuOC0xMCAxLjMtMTUuMiAxLjNjLTQ5IDAtODguNC0zOS4zLTg4LjQtODcuNGMwLTMyLjYgMTgtNjEuMSA0NC45LTc2LjFjNi4xLTMuNCA5LjMtMTAuNSA3LjgtMTcuNHMtNy4zLTEyLTE0LjMtMTIuNmMtMy42LS4zLTcuMy0uNS0xMC45LS41ek0zOTkuOSAzODMuOWM0NC4yIDAgODAtMzUuOCA4MC04MGMwLTM5LjMtMjguNC03Mi4xLTY1LjgtNzguN2MxLjItNS42IDEuOS0xMS4zIDEuOS0xNy4yYzAtNDQuMi0zNS44LTgwLTgwLTgwYy0xNyAwLTMyLjggNS4zLTQ1LjggMTQuNEMyNzMuMyAxMTQuNiAyNDIuOCA5NiAyMDggOTZjLTUzIDAtOTYgNDMtOTYgOTZsMCAxLjNjLTQ1LjQgNy42LTgwIDQ3LjEtODAgOTQuNmMwIDUzIDQzIDk2IDk2IDk2SDM5OS45ek0xMTcuNCA0MjAuMWMtMTEtNy40LTI1LjktNC40LTMzLjMgNi43bC0zMiA0OGMtNy40IDExLTQuNCAyNS45IDYuNyAzMy4zczI1LjkgNC40IDMzLjMtNi43bDMyLTQ4YzcuNC0xMSA0LjQtMjUuOS02LjctMzMuM3ptOTYgMGMtMTEtNy40LTI1LjktNC40LTMzLjMgNi43bC0zMiA0OGMtNy40IDExLTQuNCAyNS45IDYuNyAzMy4zczI1LjkgNC40IDMzLjMtNi43bDMyLTQ4YzcuNC0xMSA0LjQtMjUuOS02LjctMzMuM3ptOTYgMGMtMTEtNy40LTI1LjktNC40LTMzLjMgNi43bC0zMiA0OGMtNy40IDExLTQuNCAyNS45IDYuNyAzMy4zczI1LjkgNC40IDMzLjMtNi43bDMyLTQ4YzcuNC0xMSA0LjQtMjUuOS02LjctMzMuM3ptOTYgMGMtMTEtNy40LTI1LjktNC40LTMzLjMgNi43bC0zMiA0OGMtNy40IDExLTQuNCAyNS45IDYuNyAzMy4zczI1LjkgNC40IDMzLjMtNi43bDMyLTQ4YzcuNC0xMSA0LjQtMjUuOS02LjctMzMuM3pcIl19LE11PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNhbGVuZGFyXCIsaWNvbjpbNDQ4LDUxMixbMTI4MTk3LDEyODE5OF0sXCJmMTMzXCIsXCJNOTYgMzJWNjRINDhDMjEuNSA2NCAwIDg1LjUgMCAxMTJ2NDhINDQ4VjExMmMwLTI2LjUtMjEuNS00OC00OC00OEgzNTJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWNjRIMTYwVjMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzk2IDE0LjMgOTYgMzJ6TTQ0OCAxOTJIMFY0NjRjMCAyNi41IDIxLjUgNDggNDggNDhINDAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjE5MnpcIl19LHR1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRyYWlsZXJcIixpY29uOls2NDAsNTEyLFtdLFwiZTA0MVwiLFwiTTQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBWMzM2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDY1LjFjNy44LTU0LjMgNTQuNC05NiAxMTAuOS05NnMxMDMuMSA0MS43IDExMC45IDk2SDQ4OGg4SDYwOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkg1NDRWODBjMC0yNi41LTIxLjUtNDgtNDgtNDhINDh6TTgwIDk2YzguOCAwIDE2IDcuMiAxNiAxNmwwIDEzMS4yYy0xMS40IDUuOS0yMi4yIDEyLjktMzIgMjFWMTEyYzAtOC44IDcuMi0xNiAxNi0xNnptOTYgMTI4Yy01LjQgMC0xMC43IC4yLTE2IC43TDE2MCAxMTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDExMi43Yy01LjMtLjUtMTAuNi0uNy0xNi0uN3ptODAgMTkuMkwyNTYgMTEyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNTIuMmMtOS44LTguMS0yMC42LTE1LjItMzItMjF6TTM2OCA5NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAxOTJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xOTJjMC04LjggNy4yLTE2IDE2LTE2em0xMTIgMTZsMCAxOTJjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0xOTJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnpNMTc2IDQ4MGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MHMzNS44IDgwIDgwIDgwem0wLTQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6XCJdfSxqMD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiYWhhaVwiLGljb246WzU3Niw1MTIsW1wiaGF5a2FsXCJdLFwiZjY2NlwiLFwiTTI4OCAwYzE0LjUgMCAyNy4yIDkuNyAzMC45IDIzLjhsMjMuOSA4OS42IDc1LjktNTMuM2MxMS45LTguMyAyNy44LTcuNiAzOSAxLjdzMTQuNiAyNC45IDguNCAzOC4xbC0zOS4zIDg0IDkyLjQgOGMxNC40IDEuMiAyNi4yIDEyIDI4LjggMjYuM3MtNC45IDI4LjUtMTggMzQuNmwtODQuMSAzOS4xIDY1LjcgNjUuNWMxMC4zIDEwLjIgMTIuNCAyNi4xIDUuMSAzOC43cy0yMiAxOC43LTM2IDE0LjlMMzkxIDM4Ni44bDguMiA5Mi40YzEuMyAxNC40LTcuMyAyNy45LTIwLjkgMzIuOXMtMjguOSAuMS0zNy4yLTExLjdsLTUzLjEtNzYtNTMuMSA3NmMtOC4zIDExLjktMjMuNiAxNi43LTM3LjIgMTEuN3MtMjIuMi0xOC41LTIwLjktMzIuOWw4LjItOTIuNEw5NS40IDQxMC45Yy0xNCAzLjgtMjguOC0yLjMtMzYtMTQuOXMtNS4yLTI4LjQgNS4xLTM4LjdsNjUuNy02NS41TDQ2IDI1Mi43Yy0xMy4xLTYuMS0yMC41LTIwLjMtMTgtMzQuNnMxNC4zLTI1LjEgMjguOC0yNi4zbDkyLjQtOC0zOS4zLTg0Yy02LjEtMTMuMS0yLjctMjguOCA4LjQtMzguMXMyNy4xLTEwIDM5LTEuN2w3NS45IDUzLjMgMjMuOS04OS42QzI2MC44IDkuNyAyNzMuNSAwIDI4OCAwem0wIDE1Ni4ybC00LjggMThjLTIuNyAxMC4xLTEwLjIgMTguMi0yMCAyMS44cy0yMC44IDIuMS0yOS4zLTMuOWwtMTUuMi0xMC43IDcuOSAxNi44YzQuNCA5LjUgNCAyMC41LTEuMyAyOS42cy0xNC41IDE1LTI1IDE1LjlsLTE4LjUgMS42IDE2LjggNy44YzkuNSA0LjQgMTYuMiAxMy4yIDE4IDIzLjVzLTEuNSAyMC44LTguOSAyOC4ybC0xMy4yIDEzLjEgMTcuOS00LjhjMTAuMS0yLjcgMjAuOS0uMyAyOC45IDYuNHMxMi4yIDE2LjkgMTEuMyAyNy4zbC0xLjYgMTguNSAxMC42LTE1LjJjNi04LjYgMTUuOC0xMy43IDI2LjItMTMuN3MyMC4yIDUuMSAyNi4yIDEzLjdsMTAuNiAxNS4yLTEuNi0xOC41Yy0uOS0xMC40IDMuMy0yMC42IDExLjMtMjcuM3MxOC44LTkuMSAyOC45LTYuNGwxNy45IDQuOC0xMy4yLTEzLjFjLTcuNC03LjQtMTAuNy0xNy45LTguOS0yOC4yczguNS0xOS4xIDE4LTIzLjVsMTYuOC03LjgtMTguNS0xLjZjLTEwLjQtLjktMTkuNy02LjgtMjUtMTUuOXMtNS43LTIwLjEtMS4zLTI5LjZsNy45LTE2LjgtMTUuMiAxMC43Yy04LjYgNi0xOS41IDcuNS0yOS4zIDMuOXMtMTcuMy0xMS43LTIwLTIxLjhsLTQuOC0xOHpcIl19LGh1PWowLEN1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNkLWNhcmRcIixpY29uOlszODQsNTEyLFtdLFwiZjdjMlwiLFwiTTMyMCAwSDE0MS4zQzEyNC4zIDAgMTA4IDYuNyA5NiAxOC43TDE4LjcgOTZDNi43IDEwOCAwIDEyNC4zIDAgMTQxLjNWNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDMyMGMzNS4zIDAgNjQtMjguNyA2NC02NFY2NGMwLTM1LjMtMjguNy02NC02NC02NHpNMTYwIDg4djQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0Vjg4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTgwIDB2NDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRWODhjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHptODAgMHY0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNFY4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXX0sTHU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZHJhZ29uXCIsaWNvbjpbNjQwLDUxMixbMTI4MDA5XSxcImY2ZDVcIixcIk0zNTIgMTI0LjVsLTUxLjktMTNjLTYuNS0xLjYtMTEuMy03LjEtMTItMTMuOHMyLjgtMTMuMSA4LjctMTYuMWw0MC44LTIwLjRMMjk0LjQgMjguOGMtNS41LTQuMS03LjgtMTEuMy01LjYtMTcuOVMyOTcuMSAwIDMwNCAwSDQxNmgzMiAxNmMzMC4yIDAgNTguNyAxNC4yIDc2LjggMzguNGw1Ny42IDc2LjhjNi4yIDguMyA5LjYgMTguNCA5LjYgMjguOGMwIDI2LjUtMjEuNSA0OC00OCA0OEg1MzguNWMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMNDgwIDE2MEg0NDh2MjEuNWMwIDI0LjggMTIuOCA0Ny45IDMzLjggNjEuMWwxMDYuNiA2Ni42YzMyLjEgMjAuMSA1MS42IDU1LjIgNTEuNiA5My4xQzY0MCA0NjIuOSA1OTAuOSA1MTIgNTMwLjIgNTEySDQ5NiA0MzIgMzIuM2MtMy4zIDAtNi42LS40LTkuNi0xLjRDMTMuNSA1MDcuOCA2IDUwMSAyLjQgNDkyLjFDMSA0ODguNyAuMiA0ODUuMiAwIDQ4MS40Yy0uMi0zLjcgLjMtNy4zIDEuMy0xMC43YzIuOC05LjIgOS42LTE2LjcgMTguNi0yMC40YzMtMS4yIDYuMi0yIDkuNS0yLjJMNDMzLjMgNDEyYzguMy0uNyAxNC43LTcuNyAxNC43LTE2LjFjMC00LjMtMS43LTguNC00LjctMTEuNGwtNDQuNC00NC40Yy0zMC0zMC00Ni45LTcwLjctNDYuOS0xMTMuMVYxODEuNXYtNTd6TTUxMiA3Mi4zYzAtLjEgMC0uMiAwLS4zczAtLjIgMC0uM3YuNnptLTEuMyA3LjRMNDY0LjMgNjguMWMtLjIgMS4zLS4zIDIuNi0uMyAzLjljMCAxMy4zIDEwLjcgMjQgMjQgMjRjMTAuNiAwIDE5LjUtNi44IDIyLjctMTYuM3pNMTMwLjkgMTE2LjVjMTYuMy0xNC41IDQwLjQtMTYuMiA1OC41LTQuMWwxMzAuNiA4N1YyMjdjMCAzMi44IDguNCA2NC44IDI0IDkzSDExMmMtNi43IDAtMTIuNy00LjItMTUtMTAuNHMtLjUtMTMuMyA0LjYtMTcuN0wxNzEgMjMyLjMgMTguNCAyNTUuOGMtNyAxLjEtMTMuOS0yLjYtMTYuOS05cy0xLjUtMTQuMSAzLjgtMTguOEwxMzAuOSAxMTYuNXpcIl19LHB1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNob2UtcHJpbnRzXCIsaWNvbjpbNjQwLDUxMixbXSxcImY1NGJcIixcIk00MTYgMEMzNTIuMyAwIDI1NiAzMiAyNTYgMzJWMTYwYzQ4IDAgNzYgMTYgMTA0IDMyczU2IDMyIDEwNCAzMmM1Ni40IDAgMTc2LTE2IDE3Ni05NlM1MTIgMCA0MTYgMHpNMTI4IDk2YzAgMzUuMyAyOC43IDY0IDY0IDY0aDMyVjMySDE5MmMtMzUuMyAwLTY0IDI4LjctNjQgNjR6TTI4OCA1MTJjOTYgMCAyMjQtNDggMjI0LTEyOHMtMTE5LjYtOTYtMTc2LTk2Yy00OCAwLTc2IDE2LTEwNCAzMnMtNTYgMzItMTA0IDMyVjQ4MHM5Ni4zIDMyIDE2MCAzMnpNMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIOTZWMzUySDY0Yy0zNS4zIDAtNjQgMjguNy02NCA2NHpcIl19LEowPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNpcmNsZS1wbHVzXCIsaWNvbjpbNTEyLDUxMixbXCJwbHVzLWNpcmNsZVwiXSxcImYwNTVcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0yMzIgMzQ0VjI4MEgxNjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoNjRWMTY4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2NjRoNjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRIMjgwdjY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0elwiXX0sZHU9SjAsWjA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1ncmluLXRvbmd1ZS13aW5rXCIsaWNvbjpbNTEyLDUxMixbMTI4NTQwLFwiZ3Jpbi10b25ndWUtd2lua1wiXSxcImY1OGJcIixcIk0xNzQuNSA0OTguOEM3My4xIDQ2NC43IDAgMzY4LjkgMCAyNTZDMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2YzAgMTEyLjktNzMuMSAyMDguNy0xNzQuNSAyNDIuOEMzNDYuNyA0ODQgMzUyIDQ2Ni42IDM1MiA0NDhWNDAxLjFjMjQuMy0xNy41IDQzLjYtNDEuNiA1NS40LTY5LjZjNS0xMS44LTctMjIuNS0xOS4zLTE4LjdjLTM5LjcgMTIuMi04NC41IDE5LTEzMS44IDE5cy05Mi4xLTYuOC0xMzEuOC0xOWMtMTIuMy0zLjgtMjQuMyA2LjktMTkuMyAxOC43YzExLjcgMjcuOCAzMC44IDUxLjcgNTQuOCA2OS4yVjQ0OGMwIDE4LjYgNS4zIDM2IDE0LjUgNTAuOHptMjAuNy0yNjUuMmM1LjMgNy4xIDE1LjMgOC41IDIyLjQgMy4yczguNS0xNS4zIDMuMi0yMi40Yy0zMC40LTQwLjUtOTEuMi00MC41LTEyMS42IDBjLTUuMyA3LjEtMy45IDE3LjEgMy4yIDIyLjRzMTcuMSAzLjkgMjIuNC0zLjJjMTcuNi0yMy41IDUyLjgtMjMuNSA3MC40IDB6TTMzNiAyNzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRzMjguNyA2NCA2NCA2NHpNMzIwIDQwMi42VjQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NFY0MDIuNmMwLTE0LjcgMTEuOS0yNi42IDI2LjYtMjYuNmgyYzExLjMgMCAyMS4xIDcuOSAyMy42IDE4LjljMi44IDEyLjYgMjAuOCAxMi42IDIzLjYgMGMyLjUtMTEuMSAxMi4zLTE4LjkgMjMuNi0xOC45aDJjMTQuNyAwIDI2LjYgMTEuOSAyNi42IDI2LjZ6TTMzNiAyMzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpcIl19LHV1PVowLHh1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhbmQtaG9sZGluZ1wiLGljb246WzU3Niw1MTIsW10sXCJmNGJkXCIsXCJNNTU5LjcgMzkyLjJjMTcuOC0xMy4xIDIxLjYtMzguMSA4LjUtNTUuOXMtMzguMS0yMS42LTU1LjktOC41TDM5Mi42IDQxNkgyNzJjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZoMTYgNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMjg4IDI3MiAxOTMuN2MtMjkuMSAwLTU3LjMgOS45LTgwIDI4TDY4LjggMzg0SDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgxOTIgMzUyLjVjMjkgMCA1Ny4zLTkuMyA4MC43LTI2LjVsMTI2LjYtOTMuM3ptLTM2Ny04LjJjLjMgMCAuNiAwIC45IDBjMCAwIDAgMCAwIDBjLS4zIDAtLjYgMC0uOSAwelwiXX0sZ3U9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGx1Zy1jaXJjbGUtZXhjbGFtYXRpb25cIixpY29uOls1NzYsNTEyLFtdLFwiZTU1ZFwiLFwiTTk2IDBDNzguMyAwIDY0IDE0LjMgNjQgMzJ2OTZoNjRWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTI4OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY5Nmg2NFYzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMydjMyYzAgNzcuNCA1NSAxNDIgMTI4IDE1Ni44VjQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjQxMi44YzEyLjMtMi41IDI0LjEtNi40IDM1LjEtMTEuNWMtMi4xLTEwLjgtMy4xLTIxLjktMy4xLTMzLjNjMC04MC4zIDUzLjgtMTQ4IDEyNy4zLTE2OS4yYy41LTIuMiAuNy00LjUgLjctNi44YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyek00MzIgNTEyYzc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0cy02NC41LTE0NC0xNDQtMTQ0cy0xNDQgNjQuNS0xNDQgMTQ0czY0LjUgMTQ0IDE0NCAxNDR6bTAtNDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptMC0xOTJjOC44IDAgMTYgNy4yIDE2IDE2djgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI4OGMwLTguOCA3LjItMTYgMTYtMTZ6XCJdfSxMPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImxpbmstc2xhc2hcIixpY29uOls2NDAsNTEyLFtcImNoYWluLWJyb2tlblwiLFwiY2hhaW4tc2xhc2hcIixcInVubGlua1wiXSxcImYxMjdcIixcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ4OS4zIDM1OC4ybDkwLjUtOTAuNWM1Ni41LTU2LjUgNTYuNS0xNDggMC0yMDQuNWMtNTAtNTAtMTI4LjgtNTYuNS0xODYuMy0xNS40bC0xLjYgMS4xYy0xNC40IDEwLjMtMTcuNyAzMC4zLTcuNCA0NC42czMwLjMgMTcuNyA0NC42IDcuNGwxLjYtMS4xYzMyLjEtMjIuOSA3Ni0xOS4zIDEwMy44IDguNmMzMS41IDMxLjUgMzEuNSA4Mi41IDAgMTE0bC05NiA5Ni0zMS45LTI1QzQzMC45IDIzOS42IDQyMC4xIDE3NS4xIDM3NyAxMzJjLTUyLjItNTIuMy0xMzQuNS01Ni4yLTE5MS4zLTExLjdMMzguOCA1LjF6TTIzOSAxNjJjMzAuMS0xNC45IDY3LjctOS45IDkyLjggMTUuM2MyMCAyMCAyNy41IDQ4LjMgMjEuNyA3NC41TDIzOSAxNjJ6TTQwNi42IDQxNi40TDIyMC45IDI3MGMtMi4xIDM5LjggMTIuMiA4MC4xIDQyLjIgMTEwYzM4LjkgMzguOSA5NC40IDUxIDE0My42IDM2LjN6bS0yOTAtMjI4LjVMNjAuMiAyNDQuM2MtNTYuNSA1Ni41LTU2LjUgMTQ4IDAgMjA0LjVjNTAgNTAgMTI4LjggNTYuNSAxODYuMyAxNS40bDEuNi0xLjFjMTQuNC0xMC4zIDE3LjctMzAuMyA3LjQtNDQuNnMtMzAuMy0xNy43LTQ0LjYtNy40bC0xLjYgMS4xYy0zMi4xIDIyLjktNzYgMTkuMy0xMDMuOC04LjZDNzQgMzcyIDc0IDMyMSAxMDUuNSAyODkuNWw2MS44LTYxLjgtNTAuNi0zOS45elwiXX0sU3U9TCxOdT1MLHd1PUwsa3U9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2xvbmVcIixpY29uOls1MTIsNTEyLFtdLFwiZjI0ZFwiLFwiTTAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0SDI4OGMzNS4zIDAgNjQtMjguNyA2NC02NFYzODRIMjI0Yy01MyAwLTk2LTQzLTk2LTk2VjE2MEg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWNDQ4em0yMjQtOTZINDQ4YzM1LjMgMCA2NC0yOC43IDY0LTY0VjY0YzAtMzUuMy0yOC43LTY0LTY0LTY0SDIyNGMtMzUuMyAwLTY0IDI4LjctNjQgNjRWMjg4YzAgMzUuMyAyOC43IDY0IDY0IDY0elwiXX0sYnU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLXdhbGtpbmctYXJyb3ctbG9vcC1sZWZ0XCIsaWNvbjpbNjQwLDUxMixbXSxcImU1NTFcIixcIk0yMDggOTZjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OHpNMTIzLjcgMjAwLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45TDI4MSAyMzIuN2wtMTUuMy0zNi44QzI0OC41IDE1NC44IDIwOC4zIDEyOCAxNjMuNyAxMjhjLTIyLjggMC00NS4zIDQuOC02Ni4xIDE0bC04IDMuNWMtMzIuOSAxNC42LTU4LjEgNDIuNC02OS40IDc2LjVsLTIuNiA3LjhjLTUuNiAxNi44IDMuNSAzNC45IDIwLjIgNDAuNXMzNC45LTMuNSA0MC41LTIwLjJsMi42LTcuOGM1LjctMTcuMSAxOC4zLTMwLjkgMzQuNy0zOC4ybDgtMy41em0tMzAgMTM1LjFMNjguNyAzOTggOS40IDQ1Ny40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDExNi4zIDQ0MWM0LjYtNC42IDguMi0xMC4xIDEwLjYtMTYuMWwxNC41LTM2LjItNDAuNy00NC40Yy0yLjUtMi43LTQuOC01LjYtNy04LjZ6bTM0Ny43IDExOWMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDQ2MS4zIDM4NEg0ODBjODguNCAwIDE2MC03MS42IDE2MC0xNjBzLTcxLjYtMTYwLTE2MC0xNjBMMzUyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2SDQ2MS4zbDI1LjQtMjUuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDgwIDgwelwiXX0sWTA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctdXAtei1hXCIsaWNvbjpbNTc2LDUxMixbXCJzb3J0LWFscGhhLXVwLWFsdFwiXSxcImY4ODJcIixcIk0xODMuNiA0Mi40QzE3Ny41IDM1LjggMTY5IDMyIDE2MCAzMnMtMTcuNSAzLjgtMjMuNiAxMC40bC04OCA5NmMtMTEuOSAxMy0xMS4xIDMzLjMgMiA0NS4yczMzLjMgMTEuMSA0NS4yLTJMMTI4IDE0Ni4zVjQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjE0Ni4zbDMyLjQgMzUuNGMxMS45IDEzIDMyLjIgMTMuOSA0NS4yIDJzMTMuOS0zMi4yIDItNDUuMmwtODgtOTZ6TTMyMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmg1MC43bC03My40IDczLjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45czE2LjYgMTkuOCAyOS42IDE5LjhINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQyOS4zbDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOXMtMTYuNi0xOS44LTI5LjYtMTkuOEgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem05NiAxOTJjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTY0IDEyOC0xNiAzMmMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zaDg4LjRsNy4yIDE0LjNjNy45IDE1LjggMjcuMSAyMi4yIDQyLjkgMTQuM3MyMi4yLTI3LjEgMTQuMy00Mi45bC0xNi0zMi02NC0xMjhDNDM5LjIgMjYyLjggNDI4LjEgMjU2IDQxNiAyNTZ6TTM5NS44IDQwMEw0MTYgMzU5LjYgNDM2LjIgNDAwSDM5NS44elwiXX0sQXU9WTAsXzA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmlyZS1mbGFtZS1jdXJ2ZWRcIixpY29uOlszODQsNTEyLFtcImZpcmUtYWx0XCJdLFwiZjdlNFwiLFwiTTE1My42IDI5LjlsMTYtMjEuM0MxNzMuNiAzLjIgMTgwIDAgMTg2LjcgMEMxOTguNCAwIDIwOCA5LjYgMjA4IDIxLjNWNDMuNWMwIDEzLjEgNS40IDI1LjcgMTQuOSAzNC43TDMwNy42IDE1OUMzNTYuNCAyMDUuNiAzODQgMjcwLjIgMzg0IDMzNy43QzM4NCA0MzQgMzA2IDUxMiAyMDkuNyA1MTJIMTkyQzg2IDUxMiAwIDQyNiAwIDMyMHYtMy44YzAtNDguOCAxOS40LTk1LjYgNTMuOS0xMzAuMWwzLjUtMy41YzQuMi00LjIgMTAtNi42IDE2LTYuNkM4NS45IDE3NiA5NiAxODYuMSA5NiAxOTguNlYyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHYtMy45YzAtMTgtNy4yLTM1LjMtMTkuOS00OGwtMzguNi0zOC42Yy0yNC0yNC0zNy41LTU2LjctMzcuNS05MC43YzAtMjcuNyA5LTU0LjggMjUuNi03Ni45elwiXX0sQnU9XzAsVHU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidG9ybmFkb1wiLGljb246WzQ0OCw1MTIsWzEyNzc4Nl0sXCJmNzZmXCIsXCJNMCAzMlY0NS42QzAgNjIuNyAxLjcgNzkuNiA1IDk2SDM1Ny44YzMuMi02LjkgNy41LTEzLjMgMTMtMTguOGwzOC42LTM4LjZjNC4yLTQuMiA2LjYtMTAgNi42LTE2QzQxNiAxMC4xIDQwNS45IDAgMzkzLjQgMEgzMkMxNC4zIDAgMCAxNC4zIDAgMzJ6bTM1Mi4yIDk2SDEzLjZjMTIuMiAzNS45IDMyLjMgNjguNyA1OC44IDk2SDQxMmwtNDcuMi02Mi45Yy03LjMtOS43LTExLjYtMjEuMi0xMi42LTMzLjF6bS0yMjYgMTM4LjJsMTE2LjQgNjguNWM4LjIgNC44IDE1LjggMTAuNyAyMi41IDE3LjNINDQ1YzItOS44IDMtMTkuOSAzLTMwLjFjMC0yMy01LjMtNDUuNS0xNS4zLTY1LjlIMTEwLjJjNS4yIDMuNiAxMC41IDcgMTYgMTAuMnpNMjg4IDM4NGMxMC4zIDIxLjQgMTMuOCA0NS41IDkuOSA2OWwtNS45IDM1LjdjLTIgMTIuMiA3LjQgMjMuNCAxOS44IDIzLjRjNS4zIDAgMTAuNC0yLjEgMTQuMi01LjlsNzguMi03OC4yYzEyLjgtMTIuOCAyMy4xLTI3LjcgMzAuNC00My45SDI4OHpcIl19LHl1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZpbGUtY2lyY2xlLXBsdXNcIixpY29uOls1NzYsNTEyLFs1ODYwNl0sXCJlNDk0XCIsXCJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBIMjI0VjEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMkgzODR2MzguNkMzMTAuMSAyMTkuNSAyNTYgMjg3LjQgMjU2IDM2OGMwIDU5LjEgMjkuMSAxMTEuMyA3My43IDE0My4zYy0zLjIgLjUtNi40IC43LTkuNyAuN0g2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWNjR6bTM4NCA2NEgyNTZWMEwzODQgMTI4em00OCAzODRjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHMtNjQuNSAxNDQtMTQ0IDE0NHptMTYtMjA4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2djQ4SDM2OGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg0OHY0OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjM4NGg0OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg0NDhWMzA0elwiXX0sJDA9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9vay1xdXJhblwiLGljb246WzQ0OCw1MTIsW1wicXVyYW5cIl0sXCJmNjg3XCIsXCJNMzUyIDBjNTMgMCA5NiA0MyA5NiA5NlY0MTZjMCA1My00MyA5Ni05NiA5Nkg2NCAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMlYzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjMyQzAgMTQuMyAxNC4zIDAgMzIgMEg2NCAzNTJ6bTAgMzg0SDk2djY0SDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnpNMjc0LjEgMTUwLjJsLTguOSAyMS40LTIzLjEgMS45Yy01LjcgLjUtOCA3LjUtMy43IDExLjJMMjU2IDE5OS44bC01LjQgMjIuNmMtMS4zIDUuNSA0LjcgOS45IDkuNiA2LjlMMjgwIDIxNy4ybDE5LjggMTIuMWM0LjkgMyAxMC45LTEuNCA5LjYtNi45TDMwNCAxOTkuOGwxNy42LTE1LjFjNC4zLTMuNyAyLTEwLjgtMy43LTExLjJsLTIzLjEtMS45LTguOS0yMS40Yy0yLjItNS4zLTkuNi01LjMtMTEuOCAwek05NiAxOTJjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhjMjUuNiAwIDQ5LjUtNy41IDY5LjUtMjAuNWMzLjItMi4xIDQuNS02LjIgMy4xLTkuN3MtNS4yLTUuNi05LTQuOGMtNi4xIDEuMi0xMi41IDEuOS0xOSAxLjljLTUyLjQgMC05NC45LTQyLjUtOTQuOS05NC45czQyLjUtOTQuOSA5NC45LTk0LjljNi41IDAgMTIuOCAuNyAxOSAxLjljMy44IC44IDcuNS0xLjMgOS00LjhzLjItNy42LTMuMS05LjdDMjczLjUgNzEuNSAyNDkuNiA2NCAyMjQgNjRDMTUzLjMgNjQgOTYgMTIxLjMgOTYgMTkyelwiXX0sUHU9JDAsRnU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYW5jaG9yXCIsaWNvbjpbNTc2LDUxMixbOTg3NV0sXCJmMTNkXCIsXCJNMjU2IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6bTg1LjEgODBDMzY3IDE1OC44IDM4NCAxMjkuNCAzODQgOTZjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAzMy40IDE3IDYyLjggNDIuOSA4MEgyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMzJWNDQ4SDIwOGMtNTMgMC05Ni00My05Ni05NnYtNi4xbDcgN2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMOTcgMjYzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw3IDMxOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDctN1YzNTJjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBoODAgODBjODguNCAwIDE2MC03MS42IDE2MC0xNjB2LTYuMWw3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01Ni01NmMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTU2IDU2Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNy03VjM1MmMwIDUzLTQzIDk2LTk2IDk2SDMyMFYyNDBoMzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMzQxLjF6XCJdfSxEdT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib3JkZXItYWxsXCIsaWNvbjpbNDQ4LDUxMixbXSxcImY4NGNcIixcIk0zODQgOTZWMjI0SDI1NlY5NkgzODR6bTAgMTkyVjQxNkgyNTZWMjg4SDM4NHpNMTkyIDIyNEg2NFY5NkgxOTJWMjI0ek02NCAyODhIMTkyVjQxNkg2NFYyODh6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpcIl19LGM1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2UtYW5ncnlcIixpY29uOls1MTIsNTEyLFsxMjg1NDQsXCJhbmdyeVwiXSxcImY1NTZcIixcIk01MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2ek0xNjEuMyAzODIuMWMtNS40IDEyLjMgOC43IDIxLjYgMjEuMSAxNi40YzIyLjQtOS41IDQ3LjQtMTQuOCA3My43LTE0LjhzNTEuMyA1LjMgNzMuNyAxNC44YzEyLjQgNS4yIDI2LjUtNC4xIDIxLjEtMTYuNGMtMTYtMzYuNi01Mi40LTYyLjEtOTQuOC02Mi4xcy03OC44IDI1LjYtOTQuOCA2Mi4xek0xNzYuNCAyNzJjMTcuNyAwIDMyLTE0LjMgMzItMzJjMC0xLjUtLjEtMy0uMy00LjRsMTAuOSAzLjZjOC40IDIuOCAxNy40LTEuNyAyMC4yLTEwLjFzLTEuNy0xNy40LTEwLjEtMjAuMmwtOTYtMzJjLTguNC0yLjgtMTcuNCAxLjctMjAuMiAxMC4xczEuNyAxNy40IDEwLjEgMjAuMmwzMC43IDEwLjJjLTUuOCA1LjgtOS4zIDEzLjgtOS4zIDIyLjZjMCAxNy43IDE0LjMgMzIgMzIgMzJ6bTE5Mi0zMmMwLTguOS0zLjYtMTctOS41LTIyLjhsMzAuMi0xMC4xYzguNC0yLjggMTIuOS0xMS45IDEwLjEtMjAuMnMtMTEuOS0xMi45LTIwLjItMTAuMWwtOTYgMzJjLTguNCAyLjgtMTIuOSAxMS45LTEwLjEgMjAuMnMxMS45IDEyLjkgMjAuMiAxMC4xbDExLjctMy45Yy0uMiAxLjUtLjMgMy4xLS4zIDQuN2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyelwiXX0sUnU9YzUsVXU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29va2llLWJpdGVcIixpY29uOls1MTIsNTEyLFtdLFwiZjU2NFwiLFwiTTI1Ny41IDI3LjZjLS44LTUuNC00LjktOS44LTEwLjMtMTAuNmMtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45Yy0uOS01LjMtNS4zLTkuMy0xMC42LTEwLjFjLTUxLjUtOC4yLTkyLjgtNDcuMS0xMDQuNS05Ny40Yy0xLjgtNy42LTgtMTMuNC0xNS43LTE0LjZjLTU0LjYtOC43LTk3LjctNTItMTA2LjItMTA2Ljh6TTIwOCAyMDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnptMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xNjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXX0scXU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3ctdHJlbmQtZG93blwiLGljb246WzU3Niw1MTIsW10sXCJlMDk3XCIsXCJNMzg0IDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1NDRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMydjgyLjdMMzQyLjYgMTM3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwTDE5MiAyNDIuNyA1NC42IDEwNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwTDMyMCAyMDUuMyA0NjYuNyAzNTJIMzg0elwiXX0sYTU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicnNzXCIsaWNvbjpbNDQ4LDUxMixbXCJmZWVkXCJdLFwiZjA5ZVwiLFwiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJjMjI5LjggMCA0MTYgMTg2LjIgNDE2IDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkMzODQgMjUzLjYgMjI2LjQgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHpNMTI4IDQxNmMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6TTMyIDE2MGMxNTkuMSAwIDI4OCAxMjguOSAyODggMjg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMTIzLjctMTAwLjMtMjI0LTIyNC0yMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6XCJdfSxHdT1hNSxXdT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkcmF3LXBvbHlnb25cIixpY29uOls0NDgsNTEyLFtdLFwiZjVlZVwiLFwiTTk2IDE1MS40VjM2MC42YzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNEgzMjguNmMwLS4xIC4xLS4yIC4xLS4zbC00LjUtNy45LTMyLTU2IDAgMGMtMS40IC4xLTIuOCAuMS00LjIgLjFjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMS40IDAgMi44IDAgNC4yIC4xbDAgMCAzMi01NiA0LjUtNy45LS4xLS4zSDExOS40Yy01LjYgOS43LTEzLjcgMTcuOC0yMy40IDIzLjR6TTM4NC4zIDM1MmMzNS4yIC4yIDYzLjcgMjguNyA2My43IDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0Yy0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJIMTE5LjRjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzJjLTM1LjMgMC02NC0yOC43LTY0LTY0YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNFYxNTEuNEMxMi45IDE0MC40IDAgMTE5LjcgMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJIMzI4LjZjMTEuMS0xOS4xIDMxLjctMzIgNTUuNC0zMmMzNS4zIDAgNjQgMjguNyA2NCA2NGMwIDM1LjMtMjguNSA2My44LTYzLjcgNjRsLTQuNSA3LjktMzIgNTYtMi4zIDRjNC4yIDguNSA2LjUgMTggNi41IDI4LjFzLTIuMyAxOS42LTYuNSAyOC4xbDIuMyA0IDMyIDU2IDQuNSA3Ljl6XCJdfSxzNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzY2FsZS1iYWxhbmNlZFwiLGljb246WzY0MCw1MTIsWzk4NzgsXCJiYWxhbmNlLXNjYWxlXCJdLFwiZjI0ZVwiLFwiTTM4NCAzMkg1MTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzk4LjRjLTUuMiAyNS44LTIyLjkgNDcuMS00Ni40IDU3LjNWNDQ4SDUxMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMjAgMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDI4OFYxNTMuM2MtMjMuNS0xMC4zLTQxLjItMzEuNi00Ni40LTU3LjNIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDI1NmMxNC42LTE5LjQgMzcuOC0zMiA2NC0zMnM0OS40IDEyLjYgNjQgMzJ6TTEyNS44IDE3Ny4zTDUxLjEgMzIwSDIwNC45TDEzMC4yIDE3Ny4zYy0uNC0uOC0xLjMtMS4zLTIuMi0xLjNzLTEuNyAuNS0yLjIgMS4zek0xMjggMTI4YzE4LjggMCAzNiAxMC40IDQ0LjcgMjdsNzcuOCAxNDguNWMzLjEgNS44IDYuMSAxNCA1LjUgMjMuOGMtLjcgMTIuMS00LjggMzUuMi0yNC44IDU1LjFDMjEwLjkgNDAyLjYgMTc4LjIgNDE2IDEyOCA0MTZzLTgyLjktMTMuNC0xMDMuMi0zMy41Yy0yMC0yMC0yNC4yLTQzLTI0LjgtNTUuMWMtLjYtOS44IDIuNS0xOCA1LjUtMjMuOEw4My4zIDE1NWM4LjctMTYuNiAyNS45LTI3IDQ0LjctMjd6bTM4NCA0OGMtLjkgMC0xLjcgLjUtMi4yIDEuM0w0MzUuMSAzMjBINTg4LjlMNTE0LjIgMTc3LjNjLS40LS44LTEuMy0xLjMtMi4yLTEuM3ptLTQ0LjctMjFjOC43LTE2LjYgMjUuOS0yNyA0NC43LTI3czM2IDEwLjQgNDQuNyAyN2w3Ny44IDE0OC41YzMuMSA1LjggNi4xIDE0IDUuNSAyMy44Yy0uNyAxMi4xLTQuOCAzNS4yLTI0LjggNTUuMUM1OTQuOSA0MDIuNiA1NjIuMiA0MTYgNTEyIDQxNnMtODIuOS0xMy40LTEwMy4yLTMzLjVjLTIwLTIwLTI0LjItNDMtMjQuOC01NS4xYy0uNi05LjggMi41LTE4IDUuNS0yMy44TDQ2Ny4zIDE1NXpcIl19LEV1PXM1LHIyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImdhdWdlLXNpbXBsZS1oaWdoXCIsaWNvbjpbNTEyLDUxMixbNjE2NjgsXCJ0YWNob21ldGVyXCIsXCJ0YWNob21ldGVyLWZhc3RcIl0sXCJmNjJhXCIsXCJNNTEyIDI1NmMwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NnpNMzIwIDM1MmMwLTE1LjktNS44LTMwLjQtMTUuMy00MS42bDc2LjYtMTQ3LjRjNi4xLTExLjggMS41LTI2LjMtMTAuMi0zMi40cy0yNi4yLTEuNS0zMi40IDEwLjJMMjYyLjEgMjg4LjNjLTItLjItNC0uMy02LjEtLjNjLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpcIl19LEl1PXIyLE91PXIyLFh1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNob3dlclwiLGljb246WzUxMiw1MTIsWzEyODcwM10sXCJmMmNjXCIsXCJNNjQgMTMxLjlDNjQgMTEyLjEgODAuMSA5NiA5OS45IDk2YzkuNSAwIDE4LjYgMy44IDI1LjQgMTAuNWwxNi4yIDE2LjJjLTIxIDM4LjktMTcuNCA4Ny41IDEwLjkgMTIzTDE1MSAyNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMEwzNDUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTEuMyAxLjNjLTM1LjUtMjguMy04NC4xLTMxLjktMTIzLTEwLjlMMTcwLjUgNjEuM0MxNTEuOCA0Mi41IDEyNi40IDMyIDk5LjkgMzJDNDQuNyAzMiAwIDc2LjcgMCAxMzEuOVY0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYxMzEuOXpNMjU2IDM1MmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyem02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6bTAtMTI4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnptMC0xMjhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem0zMi0zMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyelwiXX0sZTU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZGVza3RvcFwiLGljb246WzU3Niw1MTIsWzEyODQyMSw2MTcwNCxcImRlc2t0b3AtYWx0XCJdLFwiZjM5MFwiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NEgyNDBsLTEwLjcgMzJIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDQxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzNDYuN0wzMzYgNDE2SDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NFY2NGMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNNTEyIDY0VjI4OEg2NFY2NEg1MTJ6XCJdfSxRdT1lNSxLdT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtXCIsaWNvbjpbNDQ4LDUxMixbMTA5XSxcIjRkXCIsXCJNMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkgwek0zMiA2NEw1OC42IDQ2LjJjLTcuOC0xMS43LTIyLjQtMTctMzUuOS0xMi45UzAgNDkuOSAwIDY0bDMyIDB6TTIyNCAzNTJsLTI2LjYgMTcuOGM1LjkgOC45IDE1LjkgMTQuMiAyNi42IDE0LjJzMjAuNy01LjMgMjYuNi0xNC4yTDIyNCAzNTJ6TTQxNiA2NGgzMmMwLTE0LjEtOS4yLTI2LjUtMjIuNy0zMC42cy0yOC4xIDEuMS0zNS45IDEyLjlMNDE2IDY0ek0zODQgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJIMzg0ek02NCA0NDhWNjRIMFY0NDhINjR6TTUuNCA4MS44bDE5MiAyODggNTMuMy0zNS41LTE5Mi0yODhMNS40IDgxLjh6bTI0NS4zIDI4OGwxOTItMjg4TDM4OS40IDQ2LjJsLTE5MiAyODggNTMuMyAzNS41ek0zODQgNjRWNDQ4aDY0VjY0SDM4NHpcIl19LGY1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRhYmxlLWxpc3RcIixpY29uOls1MTIsNTEyLFtcInRoLWxpc3RcIl0sXCJmMDBiXCIsXCJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMkg0NDhjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFY5NnptNjQgMHY2NGg2NFY5Nkg2NHptMzg0IDBIMTkydjY0SDQ0OFY5NnpNNjQgMjI0djY0aDY0VjIyNEg2NHptMzg0IDBIMTkydjY0SDQ0OFYyMjR6TTY0IDM1MnY2NGg2NFYzNTJINjR6bTM4NCAwSDE5MnY2NEg0NDhWMzUyelwiXX0sanU9ZjUscjU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY29tbWVudC1zbXNcIixpY29uOls1MTIsNTEyLFtcInNtc1wiXSxcImY3Y2RcIixcIk0yNTYgNDQ4YzE0MS40IDAgMjU2LTkzLjEgMjU2LTIwOFMzOTcuNCAzMiAyNTYgMzJTMCAxMjUuMSAwIDI0MGMwIDQ1LjEgMTcuNyA4Ni44IDQ3LjcgMTIwLjljLTEuOSAyNC41LTExLjQgNDYuMy0yMS40IDYyLjljLTUuNSA5LjItMTEuMSAxNi42LTE1LjIgMjEuNmMtMi4xIDIuNS0zLjcgNC40LTQuOSA1LjdjLS42IC42LTEgMS4xLTEuMyAxLjRsLS4zIC4zIDAgMCAwIDAgMCAwIDAgMGMtNC42IDQuNi01LjkgMTEuNC0zLjQgMTcuNGMyLjUgNiA4LjMgOS45IDE0LjggOS45YzI4LjcgMCA1Ny42LTguOSA4MS42LTE5LjNjMjIuOS0xMCA0Mi40LTIxLjkgNTQuMy0zMC42YzMxLjggMTEuNSA2NyAxNy45IDEwNC4xIDE3Ljl6TTIwMi45IDE3Ni44YzYuNS0yLjIgMTMuNyAuMSAxNy45IDUuNkwyNTYgMjI5LjNsMzUuMi00Ni45YzQuMS01LjUgMTEuMy03LjggMTcuOS01LjZzMTAuOSA4LjMgMTAuOSAxNS4ydjk2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjI0MGwtMTkuMiAyNS42Yy0zIDQtNy44IDYuNC0xMi44IDYuNHMtOS44LTIuNC0xMi44LTYuNEwyMjQgMjQwdjQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2VjE5MmMwLTYuOSA0LjQtMTMgMTAuOS0xNS4yem0xNzMuMSAzOGMwIC4yIDAgLjQgMCAuNGMuMSAuMSAuNiAuOCAyLjIgMS43YzMuOSAyLjMgOS42IDQuMSAxOC4zIDYuOGwuNiAuMmM3LjQgMi4yIDE3LjMgNS4yIDI1LjIgMTAuMmM5LjEgNS43IDE3LjQgMTUuMiAxNy42IDI5LjljLjIgMTUtNy42IDI2LTE3LjggMzIuM2MtOS41IDUuOS0yMC45IDcuOS0zMC43IDcuNmMtMTIuMi0uNC0yMy43LTQuNC0zMi42LTcuNGwwIDAgMCAwYy0xLjQtLjUtMi43LS45LTQtMS40Yy04LjQtMi44LTEyLjktMTEuOS0xMC4xLTIwLjJzMTEuOS0xMi45IDIwLjItMTAuMWMxLjcgLjYgMy4zIDEuMSA0LjkgMS42bDAgMCAwIDBjOS4xIDMuMSAxNS42IDUuMyAyMi42IDUuNWM1LjMgLjIgMTAtMSAxMi44LTIuOGMxLjItLjggMS44LTEuNSAyLjEtMmMuMi0uNCAuNi0xLjIgLjYtMi43bDAtLjJjMC0uNyAwLTEuNC0yLjctMy4xYy0zLjgtMi40LTkuNi00LjMtMTgtNi45bC0xLjItLjRjLTcuMi0yLjItMTYuNy01LTI0LjMtOS42Yy05LTUuNC0xNy43LTE0LjctMTcuNy0yOS40Yy0uMS0xNS4yIDguNi0yNS43IDE4LjUtMzEuNmM5LjQtNS41IDIwLjUtNy41IDI5LjctNy40YzEwIC4yIDE5LjcgMi4zIDI3LjkgNC40YzguNSAyLjMgMTMuNiAxMSAxMS4zIDE5LjZzLTExIDEzLjYtMTkuNiAxMS4zYy03LjMtMS45LTE0LjEtMy4zLTIwLjEtMy40Yy00LjktLjEtOS44IDEuMS0xMi45IDIuOWMtMS40IC44LTIuMSAxLjYtMi40IDJjLS4yIC4zLS40IC44LS40IDEuOXptLTI3MiAwYzAgLjIgMCAuNCAwIC40Yy4xIC4xIC42IC44IDIuMiAxLjdjMy45IDIuMyA5LjYgNC4xIDE4LjMgNi44bC42IC4yYzcuNCAyLjIgMTcuMyA1LjIgMjUuMiAxMC4yYzkuMSA1LjcgMTcuNCAxNS4yIDE3LjYgMjkuOWMuMiAxNS03LjYgMjYtMTcuOCAzMi4zYy05LjUgNS45LTIwLjkgNy45LTMwLjcgNy42Yy0xMi4zLS40LTI0LjItNC41LTMzLjItNy42bDAgMCAwIDBjLTEuMy0uNC0yLjUtLjgtMy42LTEuMmMtOC40LTIuOC0xMi45LTExLjktMTAuMS0yMC4yczExLjktMTIuOSAyMC4yLTEwLjFjMS40IC41IDIuNyAuOSA0IDEuNGwwIDAgMCAwIDAgMGM5LjUgMy4yIDE2LjUgNS42IDIzLjcgNS44YzUuMyAuMiAxMC0xIDEyLjgtMi44YzEuMi0uOCAxLjgtMS41IDIuMS0yYy4yLS40IC42LTEuMiAuNi0yLjdsMC0uMmMwLS43IDAtMS40LTIuNy0zLjFjLTMuOC0yLjQtOS42LTQuMy0xOC02LjlsLTEuMi0uNCAwIDBjLTcuMi0yLjItMTYuNy01LTI0LjMtOS42QzgwLjggMjM5IDcyLjEgMjI5LjcgNzIgMjE1Yy0uMS0xNS4yIDguNi0yNS43IDE4LjUtMzEuNmM5LjQtNS41IDIwLjUtNy41IDI5LjctNy40YzkuNSAuMSAyMi4yIDIuMSAzMS4xIDQuNGM4LjUgMi4zIDEzLjYgMTEgMTEuMyAxOS42cy0xMSAxMy42LTE5LjYgMTEuM2MtNi42LTEuOC0xNi44LTMuMy0yMy4zLTMuNGMtNC45LS4xLTkuOCAxLjEtMTIuOSAyLjljLTEuNCAuOC0yLjEgMS42LTIuNCAyYy0uMiAuMy0uNCAuOC0uNCAxLjl6XCJdfSxKdT1yNSxadT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib29rXCIsaWNvbjpbNDQ4LDUxMixbMTI4MjEyXSxcImYwMmRcIixcIk05NiAwQzQzIDAgMCA0MyAwIDk2VjQxNmMwIDUzIDQzIDk2IDk2IDk2SDM4NGgzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlYzODRjMTcuNyAwIDMyLTE0LjMgMzItMzJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJIMzg0IDk2em0wIDM4NEgzNTJ2NjRIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTMyLTI0MGMwLTguOCA3LjItMTYgMTYtMTZIMzM2YzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDE0NGMtOC44IDAtMTYtNy4yLTE2LTE2em0xNiA0OEgzMzZjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMTQ0Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXX0sWXU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXNlci1wbHVzXCIsaWNvbjpbNjQwLDUxMixbXSxcImYyMzRcIixcIk0zNTIgMTI4YzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4cy0xMjgtNTcuMy0xMjgtMTI4UzE1My4zIDAgMjI0IDBzMTI4IDU3LjMgMTI4IDEyOHpNMCA0ODIuM0MwIDM4My44IDc5LjggMzA0IDE3OC4zIDMwNGg5MS40QzM2OC4yIDMwNCA0NDggMzgzLjggNDQ4IDQ4Mi4zYzAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43SDI5LjdDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zek01MDQgMzEyVjI0OEg0NDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoNjRWMTM2YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR2NjRoNjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINTUydjY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0elwiXX0sX3U9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2hlY2tcIixpY29uOls1MTIsNTEyLFsxMDAwMywxMDAwNF0sXCJmMDBjXCIsXCJNNDcwLjYgMTA1LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTI1NiAyNTZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0xMjgtMTI4Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDE5MiAzMzguNyA0MjUuNCAxMDUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHpcIl19LGw1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJhdHRlcnktdGhyZWUtcXVhcnRlcnNcIixpY29uOls1NzYsNTEyLFtcImJhdHRlcnktNFwiXSxcImYyNDFcIixcIk0wIDE3NmMwLTQ0LjIgMzUuOC04MCA4MC04MEg0NjRjNDQuMiAwIDgwIDM1LjggODAgODB2MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJ2NjRjMCAxNy43LTE0LjMgMzItMzIgMzJ2MTZjMCA0NC4yLTM1LjggODAtODAgODBIODBjLTQ0LjIgMC04MC0zNS44LTgwLTgwVjE3NnptODAtMTZjLTguOCAwLTE2IDcuMi0xNiAxNlYzMzZjMCA4LjggNy4yIDE2IDE2IDE2SDQ2NGM4LjggMCAxNi03LjIgMTYtMTZWMTc2YzAtOC44LTcuMi0xNi0xNi0xNkg4MHptMjcyIDMyVjMyMEg5NlYxOTJIMzUyelwiXX0sJHU9bDUsY3g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaG91c2UtY2lyY2xlLWNoZWNrXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1MDlcIixcIk0zMjAuNyAzNTEuN0MzMjkgMjYyLjEgNDA0LjMgMTkyIDQ5NiAxOTJjOC45IDAgMTcuNiAuNyAyNi4xIDEuOUwzMDkuNSA3Yy02LTUtMTQtNy0yMS03cy0xNSAxLTIyIDhMMTAgMjMxLjVjLTcgNy0xMCAxNS0xMCAyNGMwIDE4IDE0IDMyLjEgMzIgMzIuMWgzMlY0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJIMTkyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjM4My43YzAtMTcuNyAxNC4zLTMyIDMyLTMyaDY0bC43IDB6TTY0MCAzNjhjMC03OS41LTY0LjUtMTQ0LTE0NC0xNDRzLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NHMxNDQtNjQuNSAxNDQtMTQ0em0tNzYuNy00My4zYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03MiA3MmMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBMNDgwIDM4NS40bDYwLjctNjAuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHpcIl19LGF4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImFuZ2xlLWxlZnRcIixpY29uOlszMjAsNTEyLFs4MjQ5XSxcImYxMDRcIixcIk00MS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjU2IDI0Ni42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwelwiXX0sc3g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZGlhZ3JhbS1zdWNjZXNzb3JcIixpY29uOls1MTIsNTEyLFtdLFwiZTQ3YVwiLFwiTTUxMiA0MTZsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjR6TTY0IDE2MGwwLTY0IDE0NCAwIDE2IDAgMCA2NEw2NCAxNjB6bTIyNCAwbDAtNjQgODAgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNi0zOC4xIDBjLTIxLjQgMC0zMi4xIDI1LjktMTcgNDFMMzk5IDIzOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMEw1MDMgMTY5YzE1LjEtMTUuMSA0LjQtNDEtMTctNDFMNDQ4IDEyOGwwLTE2YzAtNDQuMi0zNS44LTgwLTgwLTgwTDIyNCAzMmwtMTYgMEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTYwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjR6XCJdfSxleD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0cnVjay1hcnJvdy1yaWdodFwiLGljb246WzY0MCw1MTIsW10sXCJlNThiXCIsXCJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBIMzY4YzI2LjUgMCA0OCAyMS41IDQ4IDQ4Vjk2aDUwLjdjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNTg5LjMgMTkyYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNWMjU2djMyIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDU3NmMwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NkgyNTZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQ4ek00MTYgMjU2SDU0NFYyMzcuM0w0NjYuNyAxNjBINDE2djk2ek0xNjAgNDY0YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6bTM2OC00OGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDh6TTI1NyA5NWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzOSAzOUg5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgyNjIuMWwtMzkgMzljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4MC04MGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUwyNTcgOTV6XCJdfSxmeD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvd3Mtc3BsaXQtdXAtYW5kLWxlZnRcIixpY29uOls1MTIsNTEyLFtdLFwiZTRiY1wiLFwiTTI0Ni42IDE1MC42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzNTIgMTA5LjNWMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0aDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDQxNmMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRIMTA5LjNsNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wxMDkuMyAyNTZIMjI0YzIzLjMgMCA0NS4yIDYuMiA2NCAxNy4xVjEwOS4zbC00MS40IDQxLjR6XCJdfSxpNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJoYW5kLWZpc3RcIixpY29uOlszODQsNTEyLFs5OTk0LFwiZmlzdC1yYWlzZWRcIl0sXCJmNmRlXCIsXCJNMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMTQ0SDEyOFYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY4MEgzMlY2NHptMTkyIDBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlY2NHptOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxMjh6bS05NiA4OGwwLS42YzkuNCA1LjQgMjAuMyA4LjYgMzIgOC42YzEzLjIgMCAyNS40LTQgMzUuNi0xMC44YzguNyAyNC45IDMyLjUgNDIuOCA2MC40IDQyLjhjMTEuNyAwIDIyLjYtMy4xIDMyLTguNlYyNTZjMCA1Mi4zLTI1LjEgOTguOC02NCAxMjh2OTZjMCAxNy43LTE0LjMgMzItMzIgMzJIMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMlY0MDEuNmMtMTcuMy03LjktMzMuMi0xOC44LTQ2LjktMzIuNUwzNy41IDM1Ny41QzEzLjUgMzMzLjUgMCAzMDAuOSAwIDI2N1YyNDBjMC0zNS4zIDI4LjctNjQgNjQtNjRoODhjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBIOTZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoNTZjMzkuOCAwIDcyLTMyLjIgNzItNzJ6XCJdfSxyeD1pNSxseD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjbG91ZC1tb29uXCIsaWNvbjpbNjQwLDUxMixbXSxcImY2YzNcIixcIk00OTUuOCAwYzUuNSAwIDEwLjkgLjIgMTYuMyAuN2M3IC42IDEyLjggNS43IDE0LjMgMTIuNXMtMS42IDEzLjktNy43IDE3LjNjLTQ0LjQgMjUuMi03NC40IDczLTc0LjQgMTI3LjhjMCA4MSA2NS41IDE0Ni42IDE0Ni4yIDE0Ni42YzguNiAwIDE3LS43IDI1LjEtMi4xYzYuOS0xLjIgMTMuOCAyLjIgMTcgOC41czEuOSAxMy44LTMuMSAxOC43Yy0zNC41IDMzLjYtODEuNyA1NC40LTEzMy42IDU0LjRjLTkuMyAwLTE4LjQtLjctMjcuNC0xLjljLTExLjItMjIuNi0yOS44LTQwLjktNTIuNi01MS43Yy0yLjctNTguNS01MC4zLTEwNS4zLTEwOS4yLTEwNi43Yy0xLjctMTAuNC0yLjYtMjEtMi42LTMxLjhDMzA0IDg2LjEgMzg5LjggMCA0OTUuOCAwek00NDcuOSA0MzEuOWMwIDQ0LjItMzUuOCA4MC04MCA4MEg5NmMtNTMgMC05Ni00My05Ni05NmMwLTQ3LjYgMzQuNi04NyA4MC05NC42bDAtMS4zYzAtNTMgNDMtOTYgOTYtOTZjMzQuOSAwIDY1LjQgMTguNiA4Mi4yIDQ2LjRjMTMtOS4xIDI4LjgtMTQuNCA0NS44LTE0LjRjNDQuMiAwIDgwIDM1LjggODAgODBjMCA1LjktLjYgMTEuNy0xLjkgMTcuMmMzNy40IDYuNyA2NS44IDM5LjQgNjUuOCA3OC43elwiXX0saXg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnJpZWZjYXNlXCIsaWNvbjpbNTEyLDUxMixbMTI4MTg4XSxcImYwYjFcIixcIk0xODQgNDhIMzI4YzQuNCAwIDggMy42IDggOFY5NkgxNzZWNTZjMC00LjQgMy42LTggOC04em0tNTYgOFY5Nkg2NEMyOC43IDk2IDAgMTI0LjcgMCAxNjB2OTZIMTkyIDMyMCA1MTJWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDM4NFY1NmMwLTMwLjktMjUuMS01Ni01Ni01NkgxODRjLTMwLjkgMC01NiAyNS4xLTU2IDU2ek01MTIgMjg4SDMyMHYzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkgyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjI4OEgwVjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMjg4elwiXX0sb3g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGVyc29uLWZhbGxpbmdcIixpY29uOls1MTIsNTEyLFtdLFwiZTU0NlwiLFwiTTI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOS44YzAgNTQuNi0yNy45IDEwNC42LTcyLjUgMTMzLjZsLjIgLjNMMzA0LjUgMjU2bDg3LjUgMGMxNS4xIDAgMjkuMyA3LjEgMzguNCAxOS4ybDQzLjIgNTcuNmMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhzLTM0LjIgNy43LTQ0LjgtNi40TDM4NCAzMjBsLTk2IDBoLTEuNGw5Mi4zIDE0Mi42YzkuNiAxNC44IDUuNCAzNC42LTkuNSA0NC4zcy0zNC42IDUuNC00NC4zLTkuNUwxNjQuNSAyNDkuMmMtMi45IDkuMi00LjUgMTktNC41IDI5bDAgNzMuOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYyNzguMmMwLTY1LjEgMzkuNi0xMjMuNyAxMDAuMS0xNDcuOUMyMzIuMyAxMTUuOCAyNTYgODAuOCAyNTYgNDEuOGwwLTkuOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTEyIDEyOGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4elwiXX0sbzU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaW1hZ2UtcG9ydHJhaXRcIixpY29uOlszODQsNTEyLFtcInBvcnRyYWl0XCJdLFwiZjNlMFwiLFwiTTM4NCA2NGMwLTM1LjMtMjguNy02NC02NC02NEg2NEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0ek0yNTYgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHpNODAgMzU2LjZjMC0zNy45IDMwLjctNjguNiA2OC42LTY4LjZoODYuOWMzNy45IDAgNjguNiAzMC43IDY4LjYgNjguNmMwIDE1LjEtMTIuMyAyNy40LTI3LjQgMjcuNEgxMDcuNEM5Mi4zIDM4NCA4MCAzNzEuNyA4MCAzNTYuNnpcIl19LG54PW81LEh4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInVzZXItdGFnXCIsaWNvbjpbNjQwLDUxMixbXSxcImY1MDdcIixcIk0yMjQgMjU2YzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4UzI5NC43IDAgMjI0IDBTOTYgNTcuMyA5NiAxMjhzNTcuMyAxMjggMTI4IDEyOHptLTQ1LjcgNDhDNzkuOCAzMDQgMCAzODMuOCAwIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJINDE4LjNjMTAgMCAxOC44LTQuOSAyNC4yLTEyLjVsLTk5LjItOTkuMmMtMTQuOS0xNC45LTIzLjMtMzUuMS0yMy4zLTU2LjF2LTMzYy0xNS45LTQuNy0zMi44LTcuMi01MC4zLTcuMkgxNzguM3pNMzg0IDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2ODIuN2MwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM0w0NzguMSA0OTEuM2MxOC43IDE4LjcgNDkuMSAxOC43IDY3LjkgMGw3My40LTczLjRjMTguNy0xOC43IDE4LjctNDkuMSAwLTY3LjlMNTEyIDI0Mi43Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43SDM4NHptNzIgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0elwiXX0seng9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicnVnXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1NjlcIixcIk0yNCA2NEg1NiA4MFY4OHY4OCA4MCA4MCA4OCAyNEg1NiAyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjM2MEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjI4MEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjIwMEgyNGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGg4VjExMkgyNEMxMC43IDExMiAwIDEwMS4zIDAgODhTMTAuNyA2NCAyNCA2NHptODggMEg1MjhWNDQ4SDExMlY2NHpNNjQwIDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0aC04djQwaDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRoLTh2MzJoOGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGgtOHYzMmg4YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0aC04djQwaDhjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRINTg0IDU2MFY0MjQgMzM2IDI1NiAxNzYgODggNjRoMjQgMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjR6XCJdfSxuNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJlYXJ0aC1ldXJvcGVcIixpY29uOls1MTIsNTEyLFtcImdsb2JlLWV1cm9wZVwiXSxcImY3YTJcIixcIk0yNjYuMyA0OC4zTDIzMi41IDczLjZjLTUuNCA0LTguNSAxMC40LTguNSAxNy4xdjkuMWMwIDYuOCA1LjUgMTIuMyAxMi4zIDEyLjNjMi40IDAgNC44LS43IDYuOC0yLjFsNDEuOC0yNy45YzItMS4zIDQuNC0yLjEgNi44LTIuMWgxYzYuMiAwIDExLjMgNS4xIDExLjMgMTEuM2MwIDMtMS4yIDUuOS0zLjMgOGwtMTkuOSAxOS45Yy01LjggNS44LTEyLjkgMTAuMi0yMC43IDEyLjhsLTI2LjUgOC44Yy01LjggMS45LTkuNiA3LjMtOS42IDEzLjRjMCAzLjctMS41IDcuMy00LjEgMTBsLTE3LjkgMTcuOWMtNi40IDYuNC05LjkgMTUtOS45IDI0djQuM2MwIDE2LjQgMTMuNiAyOS43IDI5LjkgMjkuN2MxMSAwIDIxLjItNi4yIDI2LjEtMTZsNC04LjFjMi40LTQuOCA3LjQtNy45IDEyLjgtNy45YzQuNSAwIDguNyAyLjEgMTEuNCA1LjdsMTYuMyAyMS43YzIuMSAyLjkgNS41IDQuNSA5LjEgNC41YzguNCAwIDEzLjktOC45IDEwLjEtMTYuNGwtMS4xLTIuM2MtMy41LTcgMC0xNS41IDcuNS0xOGwyMS4yLTcuMWM3LjYtMi41IDEyLjctOS42IDEyLjctMTcuNmMwLTEwLjMgOC4zLTE4LjYgMTguNi0xOC42SDQwMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNkgzNzkuM2MtNy4yIDAtMTQuMiAyLjktMTkuMyA4bC00LjcgNC43Yy0yLjEgMi4xLTMuMyA1LTMuMyA4YzAgNi4yIDUuMSAxMS4zIDExLjMgMTEuM2gxMS4zYzYgMCAxMS44IDIuNCAxNiA2LjZsNi41IDYuNWMxLjggMS44IDIuOCA0LjMgMi44IDYuOHMtMSA1LTIuOCA2LjhsLTcuNSA3LjVDMzg2IDI2MiAzODQgMjY2LjkgMzg0IDI3MnMyIDEwIDUuNyAxMy43TDQwOCAzMDRjMTAuMiAxMC4yIDI0LjEgMTYgMzguNiAxNkg0NTRjNi41LTIwLjIgMTAtNDEuNyAxMC02NGMwLTExMS40LTg3LjYtMjAyLjQtMTk3LjctMjA3Ljd6bTE3MiAzMDcuOWMtMy43LTIuNi04LjItNC4xLTEzLTQuMWMtNiAwLTExLjgtMi40LTE2LTYuNkwzOTYgMzMyYy03LjctNy43LTE4LTEyLTI4LjktMTJjLTkuNyAwLTE5LjItMy41LTI2LjYtOS44TDMxNCAyODcuNGMtMTEuNi05LjktMjYuNC0xNS40LTQxLjYtMTUuNEgyNTEuNGMtMTIuNiAwLTI1IDMuNy0zNS41IDEwLjdMMTg4LjUgMzAxYy0xNy44IDExLjktMjguNSAzMS45LTI4LjUgNTMuM3YzLjJjMCAxNyA2LjcgMzMuMyAxOC43IDQ1LjNsMTYgMTZjOC41IDguNSAyMCAxMy4zIDMyIDEzLjNIMjQ4YzEzLjMgMCAyNCAxMC43IDI0IDI0YzAgMi41IC40IDUgMS4xIDcuM2M3MS4zLTUuOCAxMzIuNS00Ny42IDE2NS4yLTEwNy4yek01MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2ek0xODcuMyAxMDAuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBsLTMyIDMyYy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzItMzJjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6XCJdfSxWeD1uNSxINT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYXJ0LWZsYXRiZWQtc3VpdGNhc2VcIixpY29uOls2NDAsNTEyLFtcImx1Z2dhZ2UtY2FydFwiXSxcImY1OWRcIixcIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEg0OGM0NC4yIDAgODAgMzUuOCA4MCA4MFYzNjhjMCA4LjggNy4yIDE2IDE2IDE2SDYwOGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg1NDEuM2MxLjggNSAyLjcgMTAuNCAyLjcgMTZjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhjMC01LjYgMS0xMSAyLjctMTZIMjUzLjNjMS44IDUgMi43IDEwLjQgMi43IDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtNS42IDEtMTEgMi43LTE2SDE0NGMtNDQuMiAwLTgwLTM1LjgtODAtODBWODBjMC04LjgtNy4yLTE2LTE2LTE2SDMyQzE0LjMgNjQgMCA0OS43IDAgMzJ6TTQzMiA5NlY1NmMwLTQuNC0zLjYtOC04LThIMzQ0Yy00LjQgMC04IDMuNi04IDhWOTZoOTZ6TTI4OCA5NlY1NmMwLTMwLjkgMjUuMS01NiA1Ni01Nmg4MGMzMC45IDAgNTYgMjUuMSA1NiA1NlY5NiAzMjBIMjg4Vjk2ek01MTIgMzIwVjk2aDE2YzI2LjUgMCA0OCAyMS41IDQ4IDQ4VjI3MmMwIDI2LjUtMjEuNSA0OC00OCA0OEg1MTJ6TTI0MCA5NmgxNlYzMjBIMjQwYy0yNi41IDAtNDgtMjEuNS00OC00OFYxNDRjMC0yNi41IDIxLjUtNDggNDgtNDh6XCJdfSxteD1INSxwPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInJlY3RhbmdsZS14bWFya1wiLGljb246WzUxMiw1MTIsWzYyMTY0LFwicmVjdGFuZ2xlLXRpbWVzXCIsXCJ0aW1lcy1yZWN0YW5nbGVcIixcIndpbmRvdy1jbG9zZVwiXSxcImY0MTBcIixcIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2VjQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NEg0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6TTE3NSAxNzVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsNDcgNDcgNDctNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC00NyA0NyA0NyA0N2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00Ny00NyA0N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Ny00Ny00Ny00N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6XCJdfSx2eD1wLE14PXAsdHg9cCxoeD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJiYWh0LXNpZ25cIixpY29uOlszMjAsNTEyLFtdLFwiZTBhY1wiLFwiTTE0NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMlY2NEgzNy42QzE2LjggNjQgMCA4MC44IDAgMTAxLjZWMjI0djQxLjdWMjg4IDQwNi4zYzAgMjMgMTguNyA0MS43IDQxLjcgNDEuN0gxMTJ2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlY0NDhoMzJjNjEuOSAwIDExMi01MC4xIDExMi0xMTJjMC00MC4xLTIxLjEtNzUuMy01Mi43LTk1LjFDMjgwLjMgMjIyLjYgMjg4IDIwMC4yIDI4OCAxNzZjMC02MS45LTUwLjEtMTEyLTExMi0xMTJWMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTExMiAxMjh2OTZINjRWMTI4aDQ4em02NCA5NlYxMjhjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDh6bS02NCA2NHY5Nkg2NFYyODhoNDh6bTY0IDk2VjI4OGgzMmMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEgxNzZ6XCJdfSxDeD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib29rLW9wZW5cIixpY29uOls1NzYsNTEyLFsxMjgyMTQsMTI4MzY2XSxcImY1MThcIixcIk0yNDkuNiA0NzEuNWMxMC44IDMuOCAyMi40LTQuMSAyMi40LTE1LjVWNzguNmMwLTQuMi0xLjYtOC40LTUtMTFDMjQ3LjQgNTIgMjAyLjQgMzIgMTQ0IDMyQzg3LjUgMzIgMzUuMSA0OC42IDkgNTkuOWMtNS42IDIuNC05IDgtOSAxNFY0NTQuMWMwIDExLjkgMTIuOCAyMC4yIDI0LjEgMTYuNUM1NS42IDQ2MC4xIDEwNS41IDQ0OCAxNDQgNDQ4YzMzLjkgMCA3OSAxNCAxMDUuNiAyMy41em03Ni44IDBDMzUzIDQ2MiAzOTguMSA0NDggNDMyIDQ0OGMzOC41IDAgODguNCAxMi4xIDExOS45IDIyLjZjMTEuMyAzLjggMjQuMS00LjYgMjQuMS0xNi41VjczLjljMC02LjEtMy40LTExLjYtOS0xNEM1NDAuOSA0OC42IDQ4OC41IDMyIDQzMiAzMmMtNTguNCAwLTEwMy40IDIwLTEyMyAzNS42Yy0zLjMgMi42LTUgNi44LTUgMTFWNDU2YzAgMTEuNCAxMS43IDE5LjMgMjIuNCAxNS41elwiXX0sejU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9vay1qb3VybmFsLXdoaWxsc1wiLGljb246WzQ0OCw1MTIsW1wiam91cm5hbC13aGlsbHNcIl0sXCJmNjZhXCIsXCJNMCA5NkMwIDQzIDQzIDAgOTYgMEgzODRoMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJWMzUyYzAgMTcuNy0xNC4zIDMyLTMyIDMydjY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDM4NCA5NmMtNTMgMC05Ni00My05Ni05NlY5NnpNNjQgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDM1MlYzODRIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem05MC40LTIzNC40bC0yMS4yLTIxLjJjLTMgMTAuMS01LjEgMjAuNi01LjEgMzEuNmMwIC4yIDAgLjUgLjEgLjhzLjEgLjUgLjEgLjhMMTY1LjIgMjI2YzIuNSAyLjEgMy40IDUuOCAyLjMgOC45Yy0xLjMgMy00LjEgNS4xLTcuNSA1LjFjLTEuOS0uMS0zLjgtLjgtNS4yLTJsLTIzLjYtMjAuNkMxNDIuOCAyNjcgMTg2LjkgMzA0IDI0MCAzMDRzOTcuMy0zNyAxMDguOS04Ni42TDMyNS4zIDIzOGMtMS40IDEuMi0zLjMgMi01LjMgMmMtMi4yLS4xLTQuNC0xLjEtNi0yLjhjLTEuMy0xLjUtMS45LTMuNC0yLTUuMmMuMS0yLjIgMS4xLTQuNCAyLjctNmwzNy4xLTMyLjVjMC0uMyAwLS41IC4xLS44cy4xLS41IC4xLS44YzAtMTEtMi4xLTIxLjUtNS4xLTMxLjZsLTIxLjIgMjEuMmMtMy4xIDMuMS04LjEgMy4xLTExLjMgMHMtMy4xLTguMSAwLTExLjJsMjYuNC0yNi41Yy0xMC0yMC43LTI2LjEtMzgtNDYuNC00OS4yYzE3IDI3LjEgMTEgNjIuOC0xNCA4Mi42YzE0LjEgMTQuNiAxOS4xIDM1LjkgMTMuMSA1NS4yYy01LjkgMTkuNC0yMiAzNC4xLTQxLjkgMzguM2wtMS40LTM0LjMgMTIuNiA4LjZjLjYgLjQgMS41IC42IDIuMyAuNmMxLjUgMCAyLjctLjggMy41LTJzLjYtMi44LS4xLTRMMjYwIDIyNS40bDE4LTMuNmMxLjgtLjQgMy4xLTIuMSAzLjEtNHMtMS40LTMuNS0zLjEtMy45bC0xOC0zLjcgOC41LTE0LjNjLjgtMS4yIC45LTIuOSAuMS00LjFzLTItMi0zLjUtMmwtLjEgMGMtLjcgLjEtMS41IC4zLTIuMSAuN2wtMTQuMSA5LjZMMjQ0IDg3LjljLS4xLTIuMi0xLjktMy45LTQtMy45cy0zLjkgMS42LTQgMy45bC00LjYgMTEwLjgtMTItOC4xYy0xLjUtMS4xLTMuNi0uOS01IC40cy0xLjYgMy40LS44IDVsOC42IDE0LjMtMTggMy43Yy0xLjggLjQtMy4xIDItMy4xIDMuOXMxLjQgMy42IDMuMSA0bDE4IDMuOC04LjYgMTQuMmMtLjIgLjYtLjUgMS40LS41IDJjMCAxLjEgLjUgMi4xIDEuMiAzYy44IC42IDEuOCAxIDIuOCAxYy43IDAgMS42LS4yIDIuMi0uNmwxMC40LTcuMS0xLjQgMzIuOGMtMTkuOS00LjEtMzYtMTguOS00MS45LTM4LjNjLTYtMTkuNC0xLTQwLjUgMTMuMS01NS4yYy0yNS0xOS45LTMxLTU1LjUtMTQtODIuNmMtMjAuMSAxMS4yLTM2LjQgMjguNS00Ni40IDQ5LjJsMjYuNCAyNi41YzMuMSAzLjEgMy4xIDguMSAwIDExLjJzLTguMSAzLjEtMTEuMiAwelwiXX0sTHg9ejUscHg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZGN1ZmZzXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0ZjhcIixcIk0zMDQgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyek0xOTIgMTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJ6bS0zMiAxNmMxNy43IDAgMzIgMTQuMyAzMiAzMmg4YzEzLjMgMCAyNCAxMC43IDI0IDI0djE2YzAgMS43LS4yIDMuNC0uNSA1LjFDMjgwLjMgMjI5LjYgMzIwIDI4Ni4yIDMyMCAzNTJjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBTMCA0NDAuNCAwIDM1MmMwLTY1LjggMzkuNy0xMjIuNCA5Ni41LTE0Ni45Yy0uNC0xLjYtLjUtMy4zLS41LTUuMVYxODRjMC0xMy4zIDEwLjctMjQgMjQtMjRoOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMCAzMjBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2em0xOTItOTZjMC0yNS45LTUuMS01MC41LTE0LjQtNzMuMWMxNi45LTMyLjkgNDQuOC01OS4xIDc4LjktNzMuOWMtLjQtMS42LS41LTMuMy0uNS01LjFWMTg0YzAtMTMuMyAxMC43LTI0IDI0LTI0aDhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmg4YzEzLjMgMCAyNCAxMC43IDI0IDI0djE2YzAgMS43LS4yIDMuNC0uNSA1LjFDNjAwLjMgMjI5LjYgNjQwIDI4Ni4yIDY0MCAzNTJjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBjLTYyIDAtMTE1LjgtMzUuMy0xNDIuNC04Ni45YzkuMy0yMi41IDE0LjQtNDcuMiAxNC40LTczLjF6bTIyNCAwYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2czk2LTQzIDk2LTk2ek0zNjggNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnptODAgNDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LGwyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRyaWFuZ2xlLWV4Y2xhbWF0aW9uXCIsaWNvbjpbNTEyLDUxMixbOTg4OCxcImV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCIsXCJ3YXJuaW5nXCJdLFwiZjA3MVwiLFwiTTI1NiAzMmMxNC4yIDAgMjcuMyA3LjUgMzQuNSAxOS44bDIxNiAzNjhjNy4zIDEyLjQgNy4zIDI3LjcgLjIgNDAuMVM0ODYuMyA0ODAgNDcyIDQ4MEg0MGMtMTQuMyAwLTI3LjYtNy43LTM0LjctMjAuMXMtNy0yNy44IC4yLTQwLjFsMjE2LTM2OEMyMjguNyAzOS41IDI0MS44IDMyIDI1NiAzMnptMCAxMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjI5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0VjE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMzIgMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpcIl19LGR4PWwyLHV4PWwyLHh4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImRhdGFiYXNlXCIsaWNvbjpbNDQ4LDUxMixbXSxcImYxYzBcIixcIk00NDggODB2NDhjMCA0NC4yLTEwMC4zIDgwLTIyNCA4MFMwIDE3Mi4yIDAgMTI4VjgwQzAgMzUuOCAxMDAuMyAwIDIyNCAwUzQ0OCAzNS44IDQ0OCA4MHpNMzkzLjIgMjE0LjdjMjAuOC03LjQgMzkuOS0xNi45IDU0LjgtMjguNlYyODhjMCA0NC4yLTEwMC4zIDgwLTIyNCA4MFMwIDMzMi4yIDAgMjg4VjE4Ni4xYzE0LjkgMTEuOCAzNCAyMS4yIDU0LjggMjguNkM5OS43IDIzMC43IDE1OS41IDI0MCAyMjQgMjQwczEyNC4zLTkuMyAxNjkuMi0yNS4zek0wIDM0Ni4xYzE0LjkgMTEuOCAzNCAyMS4yIDU0LjggMjguNkM5OS43IDM5MC43IDE1OS41IDQwMCAyMjQgNDAwczEyNC4zLTkuMyAxNjkuMi0yNS4zYzIwLjgtNy40IDM5LjktMTYuOSA1NC44LTI4LjZWNDMyYzAgNDQuMi0xMDAuMyA4MC0yMjQgODBTMCA0NzYuMiAwIDQzMlYzNDYuMXpcIl19LGkyPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNoYXJlXCIsaWNvbjpbNTEyLDUxMixbXCJhcnJvdy10dXJuLXJpZ2h0XCIsXCJtYWlsLWZvcndhcmRcIl0sXCJmMDY0XCIsXCJNMzA3IDM0LjhjLTExLjUgNS4xLTE5IDE2LjYtMTkgMjkuMnY2NEgxNzZDNzguOCAxMjggMCAyMDYuOCAwIDMwNEMwIDQxNy4zIDgxLjUgNDY3LjkgMTAwLjIgNDc4LjFjMi41IDEuNCA1LjMgMS45IDguMSAxLjljMTAuOSAwIDE5LjctOC45IDE5LjctMTkuN2MwLTcuNS00LjMtMTQuNC05LjgtMTkuNUMxMDguOCA0MzEuOSA5NiA0MTQuNCA5NiAzODRjMC01MyA0My05NiA5Ni05Nmg5NnY2NGMwIDEyLjYgNy40IDI0LjEgMTkgMjkuMnMyNSAzIDM0LjQtNS40bDE2MC0xNDRjNi43LTYuMSAxMC42LTE0LjcgMTAuNi0yMy44cy0zLjgtMTcuNy0xMC42LTIzLjhsLTE2MC0xNDRjLTkuNC04LjUtMjIuOS0xMC42LTM0LjQtNS40elwiXX0sZ3g9aTIsU3g9aTIsTng9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm90dGxlLWRyb3BsZXRcIixpY29uOlsyNTYsNTEyLFtdLFwiZTRjNFwiLFwiTTY0IDBDNTAuNyAwIDQwIDEwLjcgNDAgMjRzMTAuNyAyNCAyNCAyNGM0LjQgMCA4IDMuNiA4IDh2NjQuOWMwIDEyLjItNy4yIDIzLjEtMTcuMiAzMC4xQzIxLjcgMTc0LjEgMCAyMTIuNSAwIDI1NlY0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMTkyYzM1LjMgMCA2NC0yOC43IDY0LTY0VjI1NmMwLTQzLjUtMjEuNy04MS45LTU0LjgtMTA1Yy0xMC03LTE3LjItMTcuOS0xNy4yLTMwLjFWNTZjMC00LjQgMy42LTggOC04YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMCAwIDAgMEg3MmwwIDAgMCAwTDY0IDB6bTY0IDM4MmMtMjYuNSAwLTQ4LTIwLjEtNDgtNDVjMC0xNi44IDIyLjEtNDguMSAzNi4zLTY2LjRjNi03LjggMTcuNS03LjggMjMuNSAwQzE1My45IDI4OC45IDE3NiAzMjAuMiAxNzYgMzM3YzAgMjQuOS0yMS41IDQ1LTQ4IDQ1elwiXX0sd3g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFzay1mYWNlXCIsaWNvbjpbNjQwLDUxMixbXSxcImUxZDdcIixcIk0zMjAgNjRjLTI3LjIgMC01My44IDgtNzYuNCAyMy4xbC0zNy4xIDI0LjhjLTE1LjggMTAuNS0zNC4zIDE2LjEtNTMuMyAxNi4xSDE0NCAxMjggNTZjLTMwLjkgMC01NiAyNS4xLTU2IDU2djg1YzAgNTUuMSAzNy41IDEwMy4xIDkwLjkgMTE2LjRsMTA4IDI3QzIzMy44IDQzNSAyNzUuNCA0NDggMzIwIDQ0OHM4Ni4yLTEzIDEyMS4xLTM1LjVsMTA4LTI3QzYwMi41IDM3Mi4xIDY0MCAzMjQuMSA2NDAgMjY5VjE4NGMwLTMwLjktMjUuMS01Ni01Ni01Nkg1MTIgNDk2aC05LjJjLTE5IDAtMzcuNS01LjYtNTMuMy0xNi4xTDM5Ni40IDg3LjFDMzczLjggNzIgMzQ3LjIgNjQgMzIwIDY0ek0xMzIuMyAzNDYuM2wtMjkuOC03LjRDNzAuNSAzMzAuOSA0OCAzMDIuMSA0OCAyNjlWMTg0YzAtNC40IDMuNi04IDgtOEg5NnY0OGMwIDQ1LjEgMTMuNCA4Ny4yIDM2LjMgMTIyLjN6bTQwNS4xLTcuNGwtMjkuOCA3LjRjMjMtMzUuMiAzNi4zLTc3LjIgMzYuMy0xMjIuM1YxNzZoNDBjNC40IDAgOCAzLjYgOCA4djg1YzAgMzMtMjIuNSA2MS44LTU0LjUgNjkuOXpNMTkyIDIwOGMwLTguOCA3LjItMTYgMTYtMTZINDMyYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDIwOGMtOC44IDAtMTYtNy4yLTE2LTE2em0xNiA0OEg0MzJjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMjA4Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0xNiA4MGMwLTguOCA3LjItMTYgMTYtMTZINDAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2SDI0MGMtOC44IDAtMTYtNy4yLTE2LTE2elwiXX0sa3g9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGlsbC1yb2Nrc2xpZGVcIixpY29uOls1NzYsNTEyLFtdLFwiZTUwOFwiLFwiTTI1Mi40IDEwMy44bDI3IDQ4YzIuOCA1IDguMiA4LjIgMTMuOSA4LjJsNTMuMyAwYzUuOCAwIDExLjEtMy4xIDEzLjktOC4ybDI3LTQ4YzIuNy00LjkgMi43LTEwLjggMC0xNS43bC0yNy00OGMtMi44LTUtOC4yLTguMi0xMy45LTguMkgyOTMuNGMtNS44IDAtMTEuMSAzLjEtMTMuOSA4LjJsLTI3IDQ4Yy0yLjcgNC45LTIuNyAxMC44IDAgMTUuN3pNNjguMyA4N0M0My4xIDYxLjggMCA3OS43IDAgMTE1LjNWNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwSDM5Ni43YzM1LjYgMCA1My41LTQzLjEgMjguMy02OC4zTDY4LjMgODd6TTUwNC4yIDQwMy42YzQuOSAyLjcgMTAuOCAyLjcgMTUuNyAwbDQ4LTI3YzUtMi44IDguMi04LjIgOC4yLTEzLjlWMzA5LjRjMC01LjgtMy4xLTExLjEtOC4yLTEzLjlsLTQ4LTI3Yy00LjktMi43LTEwLjgtMi43LTE1LjcgMGwtNDggMjdjLTUgMi44LTguMiA4LjItOC4yIDEzLjl2NTMuM2MwIDUuOCAzLjEgMTEuMSA4LjIgMTMuOWw0OCAyN3pNMTkyIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnpNMzg0IDI4OGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyelwiXX0sVjU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicmlnaHQtbGVmdFwiLGljb246WzUxMiw1MTIsW1wiZXhjaGFuZ2UtYWx0XCJdLFwiZjM2MlwiLFwiTTMyIDk2bDMyMCAwVjMyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsOTYgOTZjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtOTYgOTZjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45cy0xOS44LTE2LjYtMTkuOC0yOS42VjE2MEwzMiAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6TTQ4MCAzNTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMTYwdjY0YzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC05Ni05NmMtNi02LTkuNC0xNC4xLTkuNC0yMi42czMuNC0xNi42IDkuNC0yMi42bDk2LTk2YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45czE5LjggMTYuNiAxOS44IDI5LjZsMCA2NEg0ODB6XCJdfSxieD1WNSxBeD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwYXBlci1wbGFuZVwiLGljb246WzUxMiw1MTIsWzYxOTEzXSxcImYxZDhcIixcIk00OTguMSA1LjZjMTAuMSA3IDE1LjQgMTkuMSAxMy41IDMxLjJsLTY0IDQxNmMtMS41IDkuNy03LjQgMTguMi0xNiAyM3MtMTguOSA1LjQtMjggMS42TDI3Ny4zIDQyNC45bC00MC4xIDc0LjVjLTUuMiA5LjctMTYuMyAxNC42LTI3IDExLjlTMTkyIDQ5OSAxOTIgNDg4VjM5MmMwLTUuMyAxLjgtMTAuNSA1LjEtMTQuN0wzNjIuNCAxNjQuN2MyLjUtNy4xLTYuNS0xNC4zLTEzLTguNEwxNzAuNCAzMTguMmwtMzIgMjguOSAwIDBjLTkuMiA4LjMtMjIuMyAxMC42LTMzLjggNS44bC04NS0zNS40QzguNCAzMTIuOCAuOCAzMDIuMiAuMSAyOTBzNS41LTIzLjcgMTYuMS0yOS44bDQ0OC0yNTZjMTAuNy02LjEgMjMuOS01LjUgMzQgMS40elwiXX0sQng9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicm9hZC1jaXJjbGUtZXhjbGFtYXRpb25cIixpY29uOls2NDAsNTEyLFtdLFwiZTU2NVwiLFwiTTIxMy4yIDMySDI4OFY5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyVjMyaDc0LjhjMjcuMSAwIDUxLjMgMTcuMSA2MC4zIDQyLjZsNDIuNyAxMjAuNmMtMTAuOS0yLjEtMjIuMi0zLjItMzMuOC0zLjJjLTU5LjUgMC0xMTIuMSAyOS42LTE0NCA3NC44VjIyNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnY2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmMyLjMgMCA0LjYtLjMgNi44LS43Yy00LjUgMTUuNS02LjggMzEuOC02LjggNDguN2MwIDUuNCAuMiAxMC43IC43IDE2bC0uNyAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnY2NEg4Ni42QzU2LjUgNDgwIDMyIDQ1NS41IDMyIDQyNS40YzAtNi4yIDEuMS0xMi40IDMuMS0xOC4yTDE1Mi45IDc0LjZDMTYyIDQ5LjEgMTg2LjEgMzIgMjEzLjIgMzJ6TTQ5NiA1MTJjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHMtNjQuNSAxNDQtMTQ0IDE0NHptMC00OGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em0wLTE5MmMtOC44IDAtMTYgNy4yLTE2IDE2djgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjg4YzAtOC44LTcuMi0xNi0xNi0xNnpcIl19LFR4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImR1bmdlb25cIixpY29uOls1MTIsNTEyLFtdLFwiZjZkOVwiLFwiTTMzNi42IDE1Ni41YzEuMyAxLjEgMi43IDIuMiAzLjkgMy4zYzkuMyA4LjIgMjMgMTAuNSAzMy40IDMuNmw2Ny42LTQ1LjFjMTEuNC03LjYgMTQuMi0yMy4yIDUuMS0zMy40QzQzMCA2Ni42IDQxMC45IDUwLjYgMzg5LjcgMzcuNmMtMTEuOS03LjMtMjYuOS0xLjQtMzIuMSAxMS42bC0zMC41IDc2LjJjLTQuNSAxMS4xIC4yIDIzLjYgOS41IDMxLjJ6TTMyOCAzNi44YzUuMS0xMi44LTEuNi0yNy40LTE1LTMwLjVDMjk0LjcgMi4yIDI3NS42IDAgMjU2IDBzLTM4LjcgMi4yLTU3IDYuNEMxODUuNSA5LjQgMTc4LjggMjQgMTg0IDM2LjhsMzAuMyA3NS44YzQuNSAxMS4zIDE2LjggMTcuMiAyOSAxNmM0LjItLjQgOC40LS42IDEyLjctLjZzOC42IC4yIDEyLjcgLjZjMTIuMSAxLjIgMjQuNC00LjcgMjktMTZMMzI4IDM2Ljh6TTY1LjUgODVjLTkuMSAxMC4yLTYuMyAyNS44IDUuMSAzMy40bDY3LjYgNDUuMWMxMC4zIDYuOSAyNC4xIDQuNiAzMy40LTMuNmMxLjMtMS4xIDIuNi0yLjMgNC0zLjNjOS4zLTcuNSAxMy45LTIwLjEgOS41LTMxLjJMMTU0LjQgNDkuMmMtNS4yLTEyLjktMjAuMy0xOC44LTMyLjEtMTEuNkMxMDEuMSA1MC42IDgyIDY2LjYgNjUuNSA4NXptMzE0IDEzNy4xYy45IDMuMyAxLjcgNi42IDIuMyAxMGMyLjUgMTMgMTMgMjMuOSAyNi4yIDIzLjloODBjMTMuMyAwIDI0LjEtMTAuOCAyMi45LTI0Yy0yLjUtMjcuMi05LjMtNTMuMi0xOS43LTc3LjNjLTUuNS0xMi45LTIxLjQtMTYuNi0zMy4xLTguOWwtNjguNiA0NS43Yy05LjggNi41LTEzLjIgMTkuMi0xMCAzMC41ek01My45IDE0NS44Yy0xMS42LTcuOC0yNy42LTQtMzMuMSA4LjlDMTAuNCAxNzguOCAzLjYgMjA0LjggMS4xIDIzMmMtMS4yIDEzLjIgOS42IDI0IDIyLjkgMjRoODBjMTMuMyAwIDIzLjgtMTAuOCAyNi4yLTIzLjljLjYtMy40IDEuNC02LjcgMi4zLTEwYzMuMS0xMS40LS4yLTI0LTEwLTMwLjVMNTMuOSAxNDUuOHpNMTA0IDI4OEgyNGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2NDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0zMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR2NDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRoODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWMzEyYzAtMTMuMy0xMC43LTI0LTI0LTI0SDQwOHpNMjQgNDE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNFY0NDBjMC0xMy4zLTEwLjctMjQtMjQtMjRIMjR6bTM4NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHY0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGg4MGMxMy4zIDAgMjQtMTAuNyAyNC0yNFY0NDBjMC0xMy4zLTEwLjctMjQtMjQtMjRINDA4ek0yNzIgMTkyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjQ2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjE5MnptLTY0IDMyYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2VjQ2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2VjIyNHptMTI4IDBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZWNDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWMjI0elwiXX0seXg9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYWxpZ24tcmlnaHRcIixpY29uOls0NDgsNTEyLFtdLFwiZjAzOFwiLFwiTTQ0OCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyem0wIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMkgxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJINDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMyek0wIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMkg0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMySDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnpcIl19LG01PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIm1vbmV5LWJpbGwtMS13YXZlXCIsaWNvbjpbNTc2LDUxMixbXCJtb25leS1iaWxsLXdhdmUtYWx0XCJdLFwiZjUzYlwiLFwiTTAgMTEyLjVWNDIyLjNjMCAxOCAxMC4xIDM1IDI3IDQxLjNjODcgMzIuNSAxNzQgMTAuMyAyNjEtMTEuOWM3OS44LTIwLjMgMTU5LjYtNDAuNyAyMzkuMy0xOC45YzIzIDYuMyA0OC43LTkuNSA0OC43LTMzLjRWODkuN2MwLTE4LTEwLjEtMzUtMjctNDEuM0M0NjIgMTUuOSAzNzUgMzguMSAyODggNjAuM0MyMDguMiA4MC42IDEyOC40IDEwMC45IDQ4LjcgNzkuMUMyNS42IDcyLjggMCA4OC42IDAgMTEyLjV6TTEyOCA0MTZINjRWMzUyYzM1LjMgMCA2NCAyOC43IDY0IDY0ek02NCAyMjRWMTYwaDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0ek00NDggMzUyYzAtMzUuMyAyOC43LTY0IDY0LTY0djY0SDQ0OHptNjQtMTkyYy0zNS4zIDAtNjQtMjguNy02NC02NGg2NHY2NHpNMzg0IDI1NmMwIDYxLjktNDMgMTEyLTk2IDExMnMtOTYtNTAuMS05Ni0xMTJzNDMtMTEyIDk2LTExMnM5NiA1MC4xIDk2IDExMnpNMjUyIDIwOGMwIDkuNyA2LjkgMTcuNyAxNiAxOS42VjI3NmgtNGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBoMjQgMjRjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwaC00VjIwOGMwLTExLTktMjAtMjAtMjBIMjcyYy0xMSAwLTIwIDktMjAgMjB6XCJdfSxQeD1tNSxGeD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJsaWZlLXJpbmdcIixpY29uOls1MTIsNTEyLFtdLFwiZjFjZFwiLFwiTTM2Ny4yIDQxMi41QzMzNS45IDQzNC45IDI5Ny41IDQ0OCAyNTYgNDQ4cy03OS45LTEzLjEtMTExLjItMzUuNWw1OC01OGMxNS44IDguNiAzNCAxMy41IDUzLjMgMTMuNXMzNy40LTQuOSA1My4zLTEzLjVsNTggNTh6bTkxIC41YzMzLjctNDMuMyA1My44LTk3LjggNTMuOC0xNTdzLTIwLjEtMTEzLjYtNTMuOC0xNTdsMTIuNC0xMi40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDQxMyA1My44QzM2OS42IDIwLjEgMzE1LjIgMCAyNTYgMFMxNDIuNCAyMC4xIDk5IDUzLjhMODYuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w1My44IDk5QzIwLjEgMTQyLjQgMCAxOTYuOCAwIDI1NnMyMC4xIDExMy42IDUzLjggMTU3TDQxLjQgNDI1LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTkgNDU4LjJjNDMuMyAzMy43IDk3LjggNTMuOCAxNTcgNTMuOHMxMTMuNi0yMC4xIDE1Ny01My44bDEyLjQgMTIuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDQ1OC4yIDQxM3ptLTQ1LjctNDUuN2wtNTgtNThjOC42LTE1LjggMTMuNS0zNCAxMy41LTUzLjNzLTQuOS0zNy40LTEzLjUtNTMuM2w1OC01OEM0MzQuOSAxNzYuMSA0NDggMjE0LjUgNDQ4IDI1NnMtMTMuMSA3OS45LTM1LjUgMTExLjJ6TTM2Ny4yIDk5LjVsLTU4IDU4Yy0xNS44LTguNi0zNC0xMy41LTUzLjMtMTMuNXMtMzcuNCA0LjktNTMuMyAxMy41bC01OC01OEMxNzYuMSA3Ny4xIDIxNC41IDY0IDI1NiA2NHM3OS45IDEzLjEgMTExLjIgMzUuNXpNMTU3LjUgMzA5LjNsLTU4IDU4Qzc3LjEgMzM1LjkgNjQgMjk3LjUgNjQgMjU2czEzLjEtNzkuOSAzNS41LTExMS4ybDU4IDU4Yy04LjYgMTUuOC0xMy41IDM0LTEzLjUgNTMuM3M0LjkgMzcuNCAxMy41IDUzLjN6TTMwNCAyNTZjMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4elwiXX0sbzI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZHNcIixpY29uOls1MTIsNTEyLFtcInNpZ24tbGFuZ3VhZ2VcIixcInNpZ25pbmdcIl0sXCJmMmE3XCIsXCJNMTU0LjkgMTYyYy4zIC43IC43IDEuNSAxLjEgMi4ybDE3LjggMzAuOWMxMS4xLTEyLjYgMjcuNC0xOS44IDQ0LjQtMTkuMWwtMjAuNy0zNS44Yy02LjYtMTEuNS0yMS4zLTE1LjQtMzIuOC04LjhjLTEwLjggNi4yLTE0LjkgMTkuNS05LjkgMzAuNnptMTczLjYgNDdDMzk5LjcgMjMxLjcgNDQ4IDI5Ny44IDQ0OCAzNzIuNWMwIDEuNSAwIDMtLjEgNC41YzM5LjctMjUuNiA2NC4xLTY5LjcgNjQuMS0xMTcuNFYxMzZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4MS43TDM0Ny44IDE2LjVDMzQxLjIgNSAzMjYuNSAxLjEgMzE1LjEgNy43cy0xNS40IDIxLjMtOC44IDMyLjhsNjQgMTEwLjljMi4yIDMuOCAuOSA4LjctMi45IDEwLjlzLTguNyAuOS0xMC45LTIuOWwtODAtMTM4LjZDMjY5LjggOS4zIDI1NS4xIDUuNCAyNDMuNiAxMnMtMTUuNCAyMS4zLTguOCAzMi44bDgwIDEzOC42YzIuMiAzLjggLjkgOC43LTIuOSAxMC45cy04LjcgLjktMTAuOS0yLjlMMjM3IDgwLjVjLTYuNi0xMS41LTIxLjMtMTUuNC0zMi44LTguOHMtMTUuNCAyMS4zLTguOCAzMi44bDQ0IDc2LjJMMzI4LjUgMjA5ek02NCA0ODhjMCAxMi40IDkuNCAyMi42IDIxLjUgMjMuOWMuOCAuMSAxLjYgLjEgMi41IC4xSDI4OC43IDI5NmM2Ni4zIDAgMTIwLTUzLjcgMTIwLTEyMGMwLTEuMiAwLTIuNC0uMS0zLjZjMC0xLjIgLjEtMi41IC4xLTMuN2MwLTY4LTQ0LTEyOC4yLTEwOC45LTE0OC45bC04My45LTI2LjdjLTEyLjYtNC0yNi4xIDMtMzAuMSAxNS42czMgMjYuMSAxNS42IDMwLjFMMjYyLjYgMjcySDU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0SDE4NGM0LjQgMCA4IDMuNiA4IDhzLTMuNiA4LTggOEgyNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgxODRjNC40IDAgOCAzLjYgOCA4cy0zLjYgOC04IDhINTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMTg0YzQuNCAwIDggMy42IDggOHMtMy42IDgtOCA4SDg4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpcIl19LER4PW8yLFJ4PW8yLFV4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImNhbGVuZGFyLWRheVwiLGljb246WzQ0OCw1MTIsW10sXCJmNzgzXCIsXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnptODAgNjRjLTguOCAwLTE2IDcuMi0xNiAxNnY5NmMwIDguOCA3LjIgMTYgMTYgMTZoOTZjOC44IDAgMTYtNy4yIDE2LTE2VjI3MmMwLTguOC03LjItMTYtMTYtMTZIODB6XCJdfSxuMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ3YXRlci1sYWRkZXJcIixpY29uOls1NzYsNTEyLFtcImxhZGRlci13YXRlclwiLFwic3dpbW1pbmctcG9vbFwiXSxcImY1YzVcIixcIk0xMjggMTI3LjdDMTI4IDc0LjkgMTcwLjkgMzIgMjIzLjcgMzJjNDguMyAwIDg5IDM2IDk1IDgzLjlsMSA4LjJjMi4yIDE3LjUtMTAuMiAzMy41LTI3LjggMzUuN3MtMzMuNS0xMC4yLTM1LjctMjcuOGwtMS04LjJjLTItMTUuOS0xNS41LTI3LjgtMzEuNS0yNy44Yy0xNy41IDAtMzEuNyAxNC4yLTMxLjcgMzEuN1YyMjRIMzg0VjEyNy43QzM4NCA3NC45IDQyNi45IDMyIDQ3OS43IDMyYzQ4LjMgMCA4OSAzNiA5NSA4My45bDEgOC4yYzIuMiAxNy41LTEwLjIgMzMuNS0yNy44IDM1LjdzLTMzLjUtMTAuMi0zNS43LTI3LjhsLTEtOC4yYy0yLTE1LjktMTUuNS0yNy44LTMxLjUtMjcuOGMtMTcuNSAwLTMxLjcgMTQuMi0zMS43IDMxLjdWMzYxYy0xLjYgMS0zLjMgMi00LjggMy4xYy0xOCAxMi40LTQwLjEgMjAuMy01OS4yIDIwLjNoMFYyODhIMTkydjk2LjVjLTE5IDAtNDEuMi03LjktNTkuMS0yMC4zYy0xLjYtMS4xLTMuMi0yLjItNC45LTMuMVYxMjcuN3pNMzA2LjUgMzg5LjlDMzI5IDQwNS40IDM1Ni41IDQxNiAzODQgNDE2YzI2LjkgMCA1NS40LTEwLjggNzcuNC0yNi4xbDAgMGMxMS45LTguNSAyOC4xLTcuOCAzOS4yIDEuN2MxNC40IDExLjkgMzIuNSAyMSA1MC42IDI1LjJjMTcuMiA0IDI3LjkgMjEuMiAyMy45IDM4LjRzLTIxLjIgMjcuOS0zOC40IDIzLjljLTI0LjUtNS43LTQ0LjktMTYuNS01OC4yLTI1QzQ0OS41IDQ2OS43IDQxNyA0ODAgMzg0IDQ4MGMtMzEuOSAwLTYwLjYtOS45LTgwLjQtMTguOWMtNS44LTIuNy0xMS4xLTUuMy0xNS42LTcuN2MtNC41IDIuNC05LjcgNS4xLTE1LjYgNy43Yy0xOS44IDktNDguNSAxOC45LTgwLjQgMTguOWMtMzMgMC02NS41LTEwLjMtOTQuNS0yNS44Yy0xMy40IDguNC0zMy43IDE5LjMtNTguMiAyNWMtMTcuMiA0LTM0LjQtNi43LTM4LjQtMjMuOXM2LjctMzQuNCAyMy45LTM4LjRjMTguMS00LjIgMzYuMi0xMy4zIDUwLjYtMjUuMmMxMS4xLTkuNCAyNy4zLTEwLjEgMzkuMi0xLjdsMCAwQzEzNi43IDQwNS4yIDE2NS4xIDQxNiAxOTIgNDE2YzI3LjUgMCA1NS0xMC42IDc3LjUtMjYuMWMxMS4xLTcuOSAyNS45LTcuOSAzNyAwelwiXX0scXg9bjIsR3g9bjIsdjU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3dzLXVwLWRvd25cIixpY29uOlszMjAsNTEyLFtcImFycm93cy12XCJdLFwiZjA3ZFwiLFwiTTE4Mi42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDEyOCAxMDkuM1Y0MDIuN0w4Ni42IDM2MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGw5Ni05NmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgNDAyLjdWMTA5LjNsNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2elwiXX0sV3g9djUsTTU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZmFjZS1ncmltYWNlXCIsaWNvbjpbNTEyLDUxMixbMTI4NTU2LFwiZ3JpbWFjZVwiXSxcImY1N2ZcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyem05Ni0xMTJoLThWMzYwbDU1LjMgMGMtMy44IDIyLjctMjMuNiA0MC00Ny4zIDQwem00Ny4zLTU2TDM0NCAzNDRWMzA0aDhjMjMuOCAwIDQzLjUgMTcuMyA0Ny4zIDQwek0zMjggMzQ0SDI2NFYzMDRoNjR2NDB6bTAgNTZIMjY0VjM2MGg2NHY0MHptLTgwLTk2djQwbC02NCAwVjMwNGg2NHptMCA1NnY0MEgxODRWMzYwbDY0IDB6bS04MC0xNkgxMTIuN2MzLjgtMjIuNyAyMy42LTQwIDQ3LjMtNDBoOHY0MHptMCA1NmgtOGMtMjMuOCAwLTQzLjUtMTcuMy00Ny4zLTQwSDE2OHY0MHptNDAuNC0xOTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xMjggMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LEV4PU01LHQ1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcIndoZWVsY2hhaXItbW92ZVwiLGljb246WzQ0OCw1MTIsW1wid2hlZWxjaGFpci1hbHRcIl0sXCJlMmNlXCIsXCJNNDE2IDQ4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHpNMjA0LjUgMTIxLjNjLTUuNC0yLjUtMTEuNy0xLjktMTYuNCAxLjdsLTQwLjkgMzAuN2MtMTQuMSAxMC42LTM0LjIgNy43LTQ0LjgtNi40cy03LjctMzQuMiA2LjQtNDQuOGw0MC45LTMwLjdjMjMuNy0xNy44IDU1LjMtMjEgODIuMS04LjRsOTAuNCA0Mi41YzI5LjEgMTMuNyAzNi44IDUxLjYgMTUuMiA3NS41TDI5OS4xIDIyNGg5Ny40YzMwLjMgMCA1MyAyNy43IDQ3LjEgNTcuNEw0MTUuNCA0MjIuM2MtMy41IDE3LjMtMjAuMyAyOC42LTM3LjcgMjUuMXMtMjguNi0yMC4zLTI1LjEtMzcuN0wzNzcgMjg4SDMwNi43YzguNiAxOS42IDEzLjMgNDEuMiAxMy4zIDY0YzAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDQwLjQgMCAzNTJzNzEuNi0xNjAgMTYwLTE2MGMxMS4xIDAgMjIgMS4xIDMyLjQgMy4zbDU0LjItNTQuMi00Mi4xLTE5Ljh6TTE2MCA0NDhjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2elwiXX0sSXg9dDUsaDU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidHVybi1kb3duXCIsaWNvbjpbMzg0LDUxMixbMTA1NDksXCJsZXZlbC1kb3duLWFsdFwiXSxcImYzYmVcIixcIk0xNzguMyA1MDYuM0w0MC4zIDM2OC4zQzM1IDM2MyAzMiAzNTUuOCAzMiAzNDguM0MzMiAzMzIuNyA0NC43IDMyMCA2MC4zIDMyMEgxNDRWMTEyYzAtOC44LTcuMi0xNi0xNi0xNkgzMkMxNC4zIDk2IDAgODEuNyAwIDY0VjMyQzAgMTQuMyAxNC4zIDAgMzIgMGg5NmM2MS45IDAgMTEyIDUwLjEgMTEyIDExMlYzMjBoODMuN2MxNS42IDAgMjguMyAxMi43IDI4LjMgMjguM2MwIDcuNS0zIDE0LjctOC4zIDIwTDIwNS43IDUwNi4zQzIwMiA1MTAgMTk3LjEgNTEyIDE5MiA1MTJzLTEwLTItMTMuNy01Ljd6XCJdfSxPeD1oNSxYeD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24td2Fsa2luZy1hcnJvdy1yaWdodFwiLGljb246WzY0MCw1MTIsW10sXCJlNTUyXCIsXCJNMjA4IDk2YzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDh6TTEyMy43IDIwMC41YzEtLjQgMS45LS44IDIuOS0xLjJsLTE2LjkgNjMuNWMtNS42IDIxLjEtLjEgNDMuNiAxNC43IDU5LjdsNzAuNyA3Ny4xIDIyIDg4LjFjNC4zIDE3LjEgMjEuNyAyNy42IDM4LjggMjMuM3MyNy42LTIxLjcgMjMuMy0zOC44bC0yMy05Mi4xYy0xLjktNy44LTUuOC0xNC45LTExLjItMjAuOGwtNDkuNS01NCAxOS4zLTY1LjUgOS42IDIzYzQuNCAxMC42IDEyLjUgMTkuMyAyMi44IDI0LjVsMjYuNyAxMy4zYzE1LjggNy45IDM1IDEuNSA0Mi45LTE0LjNzMS41LTM1LTE0LjMtNDIuOUwyODEgMjMyLjdsLTE1LjMtMzYuOEMyNDguNSAxNTQuOCAyMDguMyAxMjggMTYzLjcgMTI4Yy0yMi44IDAtNDUuMyA0LjgtNjYuMSAxNGwtOCAzLjVjLTMyLjkgMTQuNi01OC4xIDQyLjQtNjkuNCA3Ni41bC0yLjYgNy44Yy01LjYgMTYuOCAzLjUgMzQuOSAyMC4yIDQwLjVzMzQuOS0zLjUgNDAuNS0yMC4ybDIuNi03LjhjNS43LTE3LjEgMTguMy0zMC45IDM0LjctMzguMmw4LTMuNXptLTMwIDEzNS4xTDY4LjcgMzk4IDkuNCA0NTcuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxMTYuMyA0NDFjNC42LTQuNiA4LjItMTAuMSAxMC42LTE2LjFsMTQuNS0zNi4yLTQwLjctNDQuNGMtMi41LTIuNy00LjgtNS42LTctOC42ek01NTAuNiAxNTMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMNTMwLjcgMjI0SDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkg1MzAuN2wtMjUuNCAyNS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDgwLTgwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC04MC04MHpcIl19LEM1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInNxdWFyZS1lbnZlbG9wZVwiLGljb246WzQ0OCw1MTIsW1wiZW52ZWxvcGUtc3F1YXJlXCJdLFwiZjE5OVwiLFwiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZWNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0SDM4NGMzNS4zIDAgNjQtMjguNyA2NC02NFY5NmMwLTM1LjMtMjguNy02NC02NC02NEg2NHpNMjE4IDI3MS43TDY0LjIgMTcyLjRDNjYgMTU2LjQgNzkuNSAxNDQgOTYgMTQ0SDM1MmMxNi41IDAgMzAgMTIuNCAzMS44IDI4LjRMMjMwIDI3MS43Yy0xLjggMS4yLTMuOSAxLjgtNiAxLjhzLTQuMi0uNi02LTEuOHptMjkuNCAyNi45TDM4NCAyMTAuNFYzMzZjMCAxNy43LTE0LjMgMzItMzIgMzJIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIxMC40bDEzNi42IDg4LjJjNyA0LjUgMTUuMSA2LjkgMjMuNCA2LjlzMTYuNC0yLjQgMjMuNC02Ljl6XCJdfSxReD1DNSxLeD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkaWNlXCIsaWNvbjpbNjQwLDUxMixbMTI3OTIyXSxcImY1MjJcIixcIk0yNTIuMyAxMS43Yy0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMGwtMTg0IDE4NGMtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZsMTg0IDE4NGMxNS42IDE1LjYgNDAuOSAxNS42IDU2LjYgMGwxODQtMTg0YzE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42bC0xODQtMTg0ek0yNDggMjI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHpNOTYgMjQ4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTEyOCA4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0xMjgtODBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpNMjI0IDcyYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTk2IDM5MmMwIDI2LjUgMjEuNSA0OCA0OCA0OEg1OTJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhWMjQwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDQ3Mi41YzEzLjQgMjYuOSA4LjggNjAuNS0xMy42IDgyLjlMMzIwIDQxMy44VjQ2NHptMTYwLTg4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6XCJdfSxqeD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJib3dsaW5nLWJhbGxcIixpY29uOls1MTIsNTEyLFtdLFwiZjQzNlwiLFwiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NlMzOTcuNCAwIDI1NiAwUzAgMTE0LjYgMCAyNTZTMTE0LjYgNTEyIDI1NiA1MTJ6TTI0MCAxNDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnptMzIgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0tMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LEp4PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJyYWluXCIsaWNvbjpbNTEyLDUxMixbMTI5NTA0XSxcImY1ZGNcIixcIk0xODQgMGMzMC45IDAgNTYgMjUuMSA1NiA1NlY0NTZjMCAzMC45LTI1LjEgNTYtNTYgNTZjLTI4LjkgMC01Mi43LTIxLjktNTUuNy01MC4xYy01LjIgMS40LTEwLjcgMi4xLTE2LjMgMi4xYy0zNS4zIDAtNjQtMjguNy02NC02NGMwLTcuNCAxLjMtMTQuNiAzLjYtMjEuMkMyMS40IDM2Ny40IDAgMzM4LjIgMCAzMDRjMC0zMS45IDE4LjctNTkuNSA0NS44LTcyLjNDMzcuMSAyMjAuOCAzMiAyMDcgMzIgMTkyYzAtMzAuNyAyMS42LTU2LjMgNTAuNC02Mi42QzgwLjggMTIzLjkgODAgMTE4IDgwIDExMmMwLTI5LjkgMjAuNi01NS4xIDQ4LjMtNjIuMUMxMzEuMyAyMS45IDE1NS4xIDAgMTg0IDB6TTMyOCAwYzI4LjkgMCA1Mi42IDIxLjkgNTUuNyA0OS45YzI3LjggNyA0OC4zIDMyLjEgNDguMyA2Mi4xYzAgNi0uOCAxMS45LTIuNCAxNy40YzI4LjggNi4yIDUwLjQgMzEuOSA1MC40IDYyLjZjMCAxNS01LjEgMjguOC0xMy44IDM5LjdDNDkzLjMgMjQ0LjUgNTEyIDI3Mi4xIDUxMiAzMDRjMCAzNC4yLTIxLjQgNjMuNC01MS42IDc0LjhjMi4zIDYuNiAzLjYgMTMuOCAzLjYgMjEuMmMwIDM1LjMtMjguNyA2NC02NCA2NGMtNS42IDAtMTEuMS0uNy0xNi4zLTIuMWMtMyAyOC4yLTI2LjggNTAuMS01NS43IDUwLjFjLTMwLjkgMC01Ni0yNS4xLTU2LTU2VjU2YzAtMzAuOSAyNS4xLTU2IDU2LTU2elwiXX0sTDU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmFuZGFnZVwiLGljb246WzY0MCw1MTIsWzEyOTY1NyxcImJhbmQtYWlkXCJdLFwiZjQ2MlwiLFwiTTQ4MCA0MTZoOTZjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwYzAtMzUuMy0yOC43LTY0LTY0LTY0SDQ4MFY0MTZ6TTQ0OCA5NkgxOTJWNDE2SDQ0OFY5NnpNNjQgOTZDMjguNyA5NiAwIDEyNC43IDAgMTYwVjM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGg5NlY5Nkg2NHpNMjk2IDIwOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTcyIDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bS03MiA3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTcyIDI0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6XCJdfSxaeD1MNSxZeD17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjYWxlbmRhci1taW51c1wiLGljb246WzQ0OCw1MTIsW10sXCJmMjcyXCIsXCJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJWNjRIMjg4VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJWNjRoNDhjMjYuNSAwIDQ4IDIxLjUgNDggNDh2NDhIMFYxMTJDMCA4NS41IDIxLjUgNjQgNDggNjRIOTZWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTAgMTkySDQ0OFY0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjE5MnpNMzEyIDM3NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEgxMzZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRIMzEyelwiXX0sSDI9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiY2lyY2xlLXhtYXJrXCIsaWNvbjpbNTEyLDUxMixbNjE1MzIsXCJ0aW1lcy1jaXJjbGVcIixcInhtYXJrLWNpcmNsZVwiXSxcImYwNTdcIixcIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTZTMzk3LjQgMCAyNTYgMFMwIDExNC42IDAgMjU2UzExNC42IDUxMiAyNTYgNTEyek0xNzUgMTc1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDQ3IDQ3IDQ3LTQ3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNDcgNDcgNDcgNDdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDctNDctNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNDctNDctNDctNDdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45elwiXX0sX3g9SDIsJHg9SDIsY2c9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZ2lmdHNcIixpY29uOls2NDAsNTEyLFtdLFwiZjc5Y1wiLFwiTTIwMC42IDMyQzIwNSAxOS41IDE5OC41IDUuOCAxODYgMS40UzE1OS44IDMuNSAxNTUuNCAxNkwxNDQuNyA0Ni4ybC05LjktMjkuOEMxMzAuNiAzLjggMTE3LTMgMTA0LjQgMS4yUzg1IDE5IDg5LjIgMzEuNmw4LjMgMjUtMjcuNC0yMGMtMTAuNy03LjgtMjUuNy01LjQtMzMuNSA1LjNzLTUuNCAyNS43IDUuMyAzMy41TDcwLjIgOTZINDhDMjEuNSA5NiAwIDExNy41IDAgMTQ0VjQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEgyMDAuNmMtNS40LTkuNC04LjYtMjAuMy04LjYtMzJWMjU2YzAtMjkuOSAyMC41LTU1IDQ4LjItNjJjMS44LTMxIDE3LjEtNTguMiA0MC4xLTc2LjFDMjcxLjcgMTA0LjcgMjU2LjkgOTYgMjQwIDk2SDIxNy44bDI4LjMtMjAuNmMxMC43LTcuOCAxMy4xLTIyLjggNS4zLTMzLjVzLTIyLjgtMTMuMS0zMy41LTUuM0wxOTIuNSA1NS4xIDIwMC42IDMyek0zNjMuNSAxODUuNUwzOTMuMSAyMjRIMzQ0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNGMwLTEzLjEgMTAuOC0yNCAyNC4yLTI0YzcuNiAwIDE0LjcgMy41IDE5LjMgOS41ek0yNzIgMjAwYzAgOC40IDEuNCAxNi41IDQuMSAyNEgyNzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4djgwSDQxNlYyNTZoMzJ2OTZINjQwVjI3MmMwLTI2LjUtMjEuNS00OC00OC00OGgtNC4xYzIuNy03LjUgNC4xLTE1LjYgNC4xLTI0YzAtMzkuOS0zMi41LTcyLTcyLjItNzJjLTIyLjQgMC00My42IDEwLjQtNTcuMyAyOC4yTDQzMiAxOTUuOGwtMzAuNS0zOS42Yy0xMy43LTE3LjgtMzUtMjguMi01Ny4zLTI4LjJjLTM5LjcgMC03Mi4yIDMyLjEtNzIuMiA3MnpNMjI0IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OEg0MTZWMzg0SDIyNHY4MHptMjI0IDQ4SDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYzODRINDQ4VjUxMnptOTYtMzEyYzAgMTMuMy0xMC43IDI0LTI0IDI0SDQ3MC45bDI5LjYtMzguNWM0LjYtNS45IDExLjctOS41IDE5LjMtOS41YzEzLjQgMCAyNC4yIDEwLjkgMjQuMiAyNHpcIl19LGFnPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhvdGVsXCIsaWNvbjpbNTEyLDUxMixbMTI3OTc2XSxcImY1OTRcIixcIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0VjQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMkgyMDhWNDQ4aDk2djY0SDQ4MGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMlY2NGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgzMnptODAgOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgxMTJjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2em0xMTIgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMjQwYy04LjggMC0xNi03LjItMTYtMTZWMTEyek0zNjggOTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgzNjhjLTguOCAwLTE2LTcuMi0xNi0xNlYxMTJjMC04LjggNy4yLTE2IDE2LTE2ek05NiAyMDhjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMTEyYy04LjggMC0xNi03LjItMTYtMTZWMjA4em0xNDQtMTZoMzJjOC44IDAgMTYgNy4yIDE2IDE2djMyYzAgOC44LTcuMiAxNi0xNiAxNkgyNDBjLTguOCAwLTE2LTcuMi0xNi0xNlYyMDhjMC04LjggNy4yLTE2IDE2LTE2em0xMTIgMTZjMC04LjggNy4yLTE2IDE2LTE2aDMyYzguOCAwIDE2IDcuMiAxNiAxNnYzMmMwIDguOC03LjIgMTYtMTYgMTZIMzY4Yy04LjggMC0xNi03LjItMTYtMTZWMjA4em0tMyAxNTIuMmMzLjMgMTIuOC03LjggMjMuOC0yMSAyMy44SDE4NGMtMTMuMyAwLTI0LjMtMTAuOS0yMS0yMy44YzEwLjYtNDEuNSA0OC4yLTcyLjIgOTMtNzIuMnM4Mi41IDMwLjcgOTMgNzIuMnpcIl19LHA1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImVhcnRoLWFzaWFcIixpY29uOls1MTIsNTEyLFsxMjc3NTksXCJnbG9iZS1hc2lhXCJdLFwiZjU3ZVwiLFwiTTUxLjcgMjk1LjFsMzEuNyA2LjNjNy45IDEuNiAxNi0uOSAyMS43LTYuNmwxNS40LTE1LjRjMTEuNi0xMS42IDMxLjEtOC40IDM4LjQgNi4ybDkuMyAxOC41YzQuOCA5LjYgMTQuNiAxNS43IDI1LjQgMTUuN2MxNS4yIDAgMjYuMS0xNC42IDIxLjctMjkuMmwtNi0xOS45Yy00LjYtMTUuNCA2LjktMzAuOSAyMy0zMC45aDIuM2MxMy40IDAgMjUuOS02LjcgMzMuMy0xNy44bDEwLjctMTYuMWM1LjYtOC41IDUuMy0xOS42LS44LTI3LjdsLTE2LjEtMjEuNWMtMTAuMy0xMy43LTMuMy0zMy41IDEzLjQtMzcuN2wxNy00LjNjNy41LTEuOSAxMy42LTcuMiAxNi41LTE0LjRsMTYuNC00MC45QzMwMy40IDUyLjEgMjgwLjIgNDggMjU2IDQ4QzE0MS4xIDQ4IDQ4IDE0MS4xIDQ4IDI1NmMwIDEzLjQgMS4zIDI2LjUgMy43IDM5LjF6bTQwNy43IDQuNmMtMy0uMy02LS4xLTkgLjhsLTE1LjggNC40Yy02LjcgMS45LTEzLjgtLjktMTcuNS02LjdsLTItMy4xYy02LTkuNC0xNi40LTE1LjEtMjcuNi0xNS4xcy0yMS42IDUuNy0yNy42IDE1LjFsLTYuMSA5LjVjLTEuNCAyLjItMy40IDQuMS01LjcgNS4zTDMxMiAzMzAuMWMtMTguMSAxMC4xLTI1LjUgMzIuNC0xNyA1MS4zbDUuNSAxMi40YzguNiAxOS4yIDMwLjcgMjguNSA1MC41IDIxLjFsMi42LTFjMTAtMy43IDIxLjMtMi4yIDI5LjkgNC4xbDEuNSAxLjFjMzcuMi0yOS41IDY0LjEtNzEuNCA3NC40LTExOS41ek01MTIgMjU2YzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NlMxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2ek0xNDQuNSAzNDguMWMtMi4xIDguNiAzLjEgMTcuMyAxMS42IDE5LjRsMzIgOGM4LjYgMi4xIDE3LjMtMy4xIDE5LjQtMTEuNnMtMy4xLTE3LjMtMTEuNi0xOS40bC0zMi04Yy04LjYtMi4xLTE3LjMgMy4xLTE5LjQgMTEuNnptOTItMjBjLTIuMSA4LjYgMy4xIDE3LjMgMTEuNiAxOS40czE3LjMtMy4xIDE5LjQtMTEuNmw4LTMyYzIuMS04LjYtMy4xLTE3LjMtMTEuNi0xOS40cy0xNy4zIDMuMS0xOS40IDExLjZsLTggMzJ6TTM0My4yIDExMy43Yy03LjktNC0xNy41LS43LTIxLjUgNy4ybC0xNiAzMmMtNCA3LjktLjcgMTcuNSA3LjIgMjEuNXMxNy41IC43IDIxLjUtNy4ybDE2LTMyYzQtNy45IC43LTE3LjUtNy4yLTIxLjV6XCJdfSxzZz1wNSxkNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJpZC1jYXJkLWNsaXBcIixpY29uOls1NzYsNTEyLFtcImlkLWNhcmQtYWx0XCJdLFwiZjQ3ZlwiLFwiTTI1NiAwaDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk2YzAgMTcuNy0xNC4zIDMyLTMyIDMySDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDY0SDE5MnY0OGMwIDI2LjUgMjEuNSA0OCA0OCA0OGg5NmMyNi41IDAgNDgtMjEuNSA0OC00OFY2NEg1MTJjMzUuMyAwIDY0IDI4LjcgNjQgNjRWNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0SDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NFYxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjR6TTE3NiA0MzcuM2MwIDUuOSA0LjggMTAuNyAxMC43IDEwLjdIMzg5LjNjNS45IDAgMTAuNy00LjggMTAuNy0xMC43YzAtMjkuNS0yMy45LTUzLjMtNTMuMy01My4zSDIyOS4zYy0yOS41IDAtNTMuMyAyMy45LTUzLjMgNTMuM3pNMjg4IDM1MmMzNS4zIDAgNjQtMjguNyA2NC02NHMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0elwiXX0sZWc9ZDUsdTU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFnbmlmeWluZy1nbGFzcy1wbHVzXCIsaWNvbjpbNTEyLDUxMixbXCJzZWFyY2gtcGx1c1wiXSxcImYwMGVcIixcIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2Yy0zNC40IDI1LjItNzYuOCA0MC0xMjIuNyA0MEM5My4xIDQxNiAwIDMyMi45IDAgMjA4UzkzLjEgMCAyMDggMFM0MTYgOTMuMSA0MTYgMjA4ek0xODQgMjk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRWMjMyaDY0YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0SDIzMlYxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR2NjRIMTIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0aDY0djY0elwiXX0sZmc9dTUscmc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidGh1bWJzLXVwXCIsaWNvbjpbNTEyLDUxMixbMTI4MDc3LDYxNTc1XSxcImYxNjRcIixcIk0zMTMuNCAzMi45YzI2IDUuMiA0Mi45IDMwLjUgMzcuNyA1Ni41bC0yLjMgMTEuNGMtNS4zIDI2LjctMTUuMSA1Mi4xLTI4LjggNzUuMkg0NjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhjMCAyNS4zLTE5LjUgNDYtNDQuMyA0Ny45YzcuNyA4LjUgMTIuMyAxOS44IDEyLjMgMzIuMWMwIDIzLjQtMTYuOCA0Mi45LTM4LjkgNDcuMWM0LjQgNy4yIDYuOSAxNS44IDYuOSAyNC45YzAgMjEuMy0xMy45IDM5LjQtMzMuMSA0NS42Yy43IDMuMyAxLjEgNi44IDEuMSAxMC40YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4SDI5NC41Yy0xOSAwLTM3LjUtNS42LTUzLjMtMTYuMWwtMzguNS0yNS43QzE3NiA0MjAuNCAxNjAgMzkwLjQgMTYwIDM1OC4zVjMyMCAyNzIgMjQ3LjFjMC0yOS4yIDEzLjMtNTYuNyAzNi03NWw3LjQtNS45YzI2LjUtMjEuMiA0NC42LTUxIDUxLjItODQuMmwyLjMtMTEuNGM1LjItMjYgMzAuNS00Mi45IDU2LjUtMzcuN3pNMzIgMTkySDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyelwiXX0sbGc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXNlci1jbG9ja1wiLGljb246WzY0MCw1MTIsW10sXCJmNGZkXCIsXCJNMjI0IDI1NmMtNzAuNyAwLTEyOC01Ny4zLTEyOC0xMjhTMTUzLjMgMCAyMjQgMHMxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4em0tNDUuNyA0OGg5MS40YzIwLjYgMCA0MC40IDMuNSA1OC44IDkuOUMzMjMgMzMxIDMyMCAzNDkuMSAzMjAgMzY4YzAgNTkuNSAyOS41IDExMi4xIDc0LjggMTQ0SDI5LjdDMTMuMyA1MTIgMCA0OTguNyAwIDQ4Mi4zQzAgMzgzLjggNzkuOCAzMDQgMTc4LjMgMzA0ek02NDAgMzY4YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0czY0LjUtMTQ0IDE0NC0xNDRzMTQ0IDY0LjUgMTQ0IDE0NHpNNDk2IDI4OGMtOC44IDAtMTYgNy4yLTE2IDE2djY0YzAgOC44IDcuMiAxNiAxNiAxNmg0OGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkg1MTJWMzA0YzAtOC44LTcuMi0xNi0xNi0xNnpcIl19LHg1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhbmQtZG90c1wiLGljb246WzUxMiw1MTIsW1wiYWxsZXJnaWVzXCJdLFwiZjQ2MVwiLFwiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMzM2YzAgMS41IDAgMy4xIC4xIDQuNkw2Ny42IDI4M2MtMTYtMTUuMi00MS4zLTE0LjYtNTYuNiAxLjRzLTE0LjYgNDEuMyAxLjQgNTYuNkwxMjQuOCA0NDhjNDMuMSA0MS4xIDEwMC40IDY0IDE2MCA2NEgzMDRjOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzZWMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyVjI0MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNlY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMlYyNDBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZWMzJ6TTI3MiAzMzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnptNDggNDhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6bTgwLTQ4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6TTM1MiA0NDhjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6bS04MC0xNmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2em0tODAtMTZjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6XCJdfSxpZz14NSxvZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJmaWxlLWludm9pY2VcIixpY29uOlszODQsNTEyLFtdLFwiZjU3MFwiLFwiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0VjQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NEgzMjBjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMTYwSDI1NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMEg2NHpNMjU2IDBWMTI4SDM4NEwyNTYgMHpNODAgNjRoNjRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTAgNjRoNjRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIODBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTE2IDk2SDI4OGMxNy43IDAgMzIgMTQuMyAzMiAzMnY2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkg5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0wIDMydjY0SDI4OFYyNTZIOTZ6TTI0MCA0MTZoNjRjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZIMjQwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2elwiXX0sbmc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwid2luZG93LW1pbmltaXplXCIsaWNvbjpbNTEyLDUxMixbMTI4NDY5XSxcImYyZDFcIixcIk0zMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyelwiXX0sZzU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibXVnLXNhdWNlclwiLGljb246WzY0MCw1MTIsW1wiY29mZmVlXCJdLFwiZjBmNFwiLFwiTTk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMySDQ0OGg2NGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOHMtNTcuMyAxMjgtMTI4IDEyOEg0ODBjMCA1My00MyA5Ni05NiA5NkgxOTJjLTUzIDAtOTYtNDMtOTYtOTZWNjR6TTQ4MCAyMjRoMzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRINDgwVjIyNHpNMzIgNDE2SDU0NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpcIl19LEhnPWc1LHpnPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImJydXNoXCIsaWNvbjpbMzg0LDUxMixbXSxcImY1NWRcIixcIk0xOTIgNjRMMTYwIDBIMTI4TDk2IDY0IDY0IDBINDhDMjEuNSAwIDAgMjEuNSAwIDQ4VjI1NkgzODRWNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjI0TDE5MiA2NHpNMCAyODh2MzJjMCAzNS4zIDI4LjcgNjQgNjQgNjRoNjR2NjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NFYzODRoNjRjMzUuMyAwIDY0LTI4LjcgNjQtNjRWMjg4SDB6TTE5MiA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZ6XCJdfSxWZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtYXNrXCIsaWNvbjpbNTc2LDUxMixbXSxcImY2ZmFcIixcIk0yODggNjRDNjQgNjQgMCAxNjAgMCAyNzJTODAgNDQ4IDE3NiA0NDhoOC40YzI0LjIgMCA0Ni40LTEzLjcgNTcuMi0zNS40bDIzLjItNDYuM2M0LjQtOC44IDEzLjMtMTQuMyAyMy4yLTE0LjNzMTguOCA1LjUgMjMuMiAxNC4zbDIzLjIgNDYuM2MxMC44IDIxLjcgMzMgMzUuNCA1Ny4yIDM1LjRINDAwYzk2IDAgMTc2LTY0IDE3Ni0xNzZzLTY0LTIwOC0yODgtMjA4ek0yMjQgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NHptMTkyIDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6XCJdfSxTNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJtYWduaWZ5aW5nLWdsYXNzLW1pbnVzXCIsaWNvbjpbNTEyLDUxMixbXCJzZWFyY2gtbWludXNcIl0sXCJmMDEwXCIsXCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NmMtMzQuNCAyNS4yLTc2LjggNDAtMTIyLjcgNDBDOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDBTNDE2IDkzLjEgNDE2IDIwOHpNMTM2IDE4NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNEgyODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRIMTM2elwiXX0sbWc9UzUsdmc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicnVsZXItdmVydGljYWxcIixpY29uOlsyNTYsNTEyLFtdLFwiZjU0OFwiLFwiTTAgNDhDMCAyMS41IDIxLjUgMCA0OCAwSDIwOGMyNi41IDAgNDggMjEuNSA0OCA0OFY5NkgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoODB2NjRIMTc2Yy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2aDgwdjY0SDE3NmMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmg4MHY2NEgxNzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoODB2NDhjMCAyNi41LTIxLjUgNDgtNDggNDhINDhjLTI2LjUgMC00OC0yMS41LTQ4LTQ4VjQ4elwiXX0sTjU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidXNlci1sYXJnZVwiLGljb246WzUxMiw1MTIsW1widXNlci1hbHRcIl0sXCJmNDA2XCIsXCJNMjU2IDI4OGM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NFMzMzUuNSAwIDI1NiAwUzExMiA2NC41IDExMiAxNDRzNjQuNSAxNDQgMTQ0IDE0NHptLTk0LjcgMzJDNzIuMiAzMjAgMCAzOTIuMiAwIDQ4MS4zYzAgMTcgMTMuOCAzMC43IDMwLjcgMzAuN0g0ODEuM2MxNyAwIDMwLjctMTMuOCAzMC43LTMwLjdDNTEyIDM5Mi4yIDQzOS44IDMyMCAzNTAuNyAzMjBIMTYxLjN6XCJdfSxNZz1ONSx0Zz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0cmFpbi10cmFtXCIsaWNvbjpbNDQ4LDUxMixbMTI4NjUwXSxcImU1YjRcIixcIk04Ni44IDQ4Yy0xMi4yIDAtMjMuNiA1LjUtMzEuMiAxNUw0Mi43IDc5QzM0LjUgODkuMyAxOS40IDkxIDkgODIuN1MtMyA1OS40IDUuMyA0OUwxOCAzM0MzNC43IDEyLjIgNjAgMCA4Ni44IDBIMzYxLjJjMjYuNyAwIDUyIDEyLjIgNjguNyAzM2wxMi44IDE2YzguMyAxMC40IDYuNiAyNS41LTMuNyAzMy43cy0yNS41IDYuNi0zMy43LTMuN0wzOTIuNSA2M2MtNy42LTkuNS0xOS4xLTE1LTMxLjItMTVIMjQ4Vjk2aDQwYzUzIDAgOTYgNDMgOTYgOTZWMzUyYzAgMzAuNi0xNC4zIDU3LjgtMzYuNiA3NS40bDY1LjUgNjUuNWM3LjEgNy4xIDIuMSAxOS4xLTcuOSAxOS4xSDM2NS4zYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNEwyODggNDQ4SDE2MGwtNTQuNiA1NC42Yy02IDYtMTQuMSA5LjQtMjIuNiA5LjRINDNjLTEwIDAtMTUtMTIuMS03LjktMTkuMWw2NS41LTY1LjVDNzguMyA0MDkuOCA2NCAzODIuNiA2NCAzNTJWMTkyYzAtNTMgNDMtOTYgOTYtOTZoNDBWNDhIODYuOHpNMTYwIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2MzJjMCAxNy43IDE0LjMgMzIgMzIgMzJIMjg4YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMkgxNjB6bTMyIDE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6bTk2IDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6XCJdfSxoZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLW51cnNlXCIsaWNvbjpbNDQ4LDUxMixbXSxcImY4MmZcIixcIk05NiAxMjhWNzAuMmMwLTEzLjMgOC4zLTI1LjMgMjAuOC0zMGw5Ni0zNmM3LjItMi43IDE1LjItMi43IDIyLjUgMGw5NiAzNmMxMi41IDQuNyAyMC44IDE2LjYgMjAuOCAzMFYxMjhoLS4zYy4yIDIuNiAuMyA1LjMgLjMgOHY0MGMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOHMtMTI4LTU3LjMtMTI4LTEyOFYxMzZjMC0yLjcgLjEtNS40IC4zLThIOTZ6bTQ4IDQ4YzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBWMTYwSDE0NHYxNnpNMTI5LjEgMzIzLjJsODMuMiA4OC40YzYuMyA2LjcgMTcgNi43IDIzLjMgMGw4My4yLTg4LjRjNzMuNyAxNC45IDEyOS4xIDgwIDEyOS4xIDE1OC4xYzAgMTctMTMuOCAzMC43LTMwLjcgMzAuN0gzMC43QzEzLjggNTEyIDAgNDk4LjIgMCA0ODEuM2MwLTc4LjEgNTUuNS0xNDMuMiAxMjkuMS0xNTguMXpNMjA4IDQ4VjY0SDE5MmMtNC40IDAtOCAzLjYtOCA4Vjg4YzAgNC40IDMuNiA4IDggOGgxNnYxNmMwIDQuNCAzLjYgOCA4IDhoMTZjNC40IDAgOC0zLjYgOC04Vjk2aDE2YzQuNCAwIDgtMy42IDgtOFY3MmMwLTQuNC0zLjYtOC04LThIMjQwVjQ4YzAtNC40LTMuNi04LTgtOEgyMTZjLTQuNCAwLTggMy42LTggOHpcIl19LENnPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN5cmluZ2VcIixpY29uOls1MTIsNTEyLFsxMjgxMzddLFwiZjQ4ZVwiLFwiTTQ0MSA3bDMyIDMyIDMyIDMyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTE1LTE1TDQxNy45IDEyOGw1NSA1NWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03Mi03MkwyOTUgNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1NSA1NUw0MjIuMSA1NiA0MDcgNDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMHpNMjEwLjMgMTU1LjdsNjEuMS02MS4xYy4zIC4zIC42IC43IDEgMWwxNiAxNiA1NiA1NiA1NiA1NiAxNiAxNmMuMyAuMyAuNiAuNiAxIDFsLTE5MSAxOTFjLTEwLjUgMTAuNS0yNC43IDE2LjQtMzkuNiAxNi40SDk3LjlMNDEgNTA1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU3LTU3VjMyNS4zYzAtMTQuOSA1LjktMjkuMSAxNi40LTM5LjZsNDMuMy00My4zIDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTcgNDEuNC00MS40IDU3IDU3YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtNTctNTd6XCJdfSxMZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJjbG91ZC1zdW5cIixpY29uOls2NDAsNTEyLFs5OTI1XSxcImY2YzRcIixcIk0xMjIuNCAxLjJDMTI3LjYtLjkgMTMzLjQtLjIgMTM3LjkgM2w3MC4zIDUwLjNMMjc4LjUgM2M0LjUtMy4yIDEwLjMtMy45IDE1LjQtMS44czguOCA2LjcgOS43IDEyLjJsMTQuMSA4NS4zTDQwMyAxMTIuOGM1LjQgLjkgMTAuMSA0LjYgMTIuMiA5LjdzMS40IDEwLjktMS44IDE1LjRsLTM4LjggNTQuM2MtMi4yLS4xLTQuMy0uMi02LjUtLjJjLTIzLjIgMC00NSA2LjItNjMuOCAxN2MuMS0xMi41LTIuMi0yNS4zLTcuMy0zNy42Yy0yMC4zLTQ5LTc2LjQtNzIuMi0xMjUuNC01MnMtNzIuMiA3Ni40LTUyIDEyNS40YzE4LjMgNDQuMyA2NiA2Ny41IDExMS4xIDU2LjZjLTM2LjMgMTguMi02Mi44IDUzLjMtNjkuMSA5NC45bC0yMy42IDE2LjljLTQuNSAzLjItMTAuMyAzLjktMTUuNCAxLjhzLTguOC02LjctOS43LTEyLjJMOTguNyAzMTcuNyAxMy40IDMwMy42Yy01LjUtLjktMTAuMS00LjYtMTIuMi05LjdTLS4yIDI4Mi45IDMgMjc4LjVsNTAuMy03MC4zTDMgMTM3LjljLTMuMi00LjUtMy45LTEwLjMtMS44LTE1LjRzNi43LTguOCAxMi4yLTkuN0w5OC43IDk4LjdsMTQuMS04NS4zYy45LTUuNSA0LjYtMTAuMSA5LjctMTIuMnpNMTQ5IDIzMi43Yy0xMy41LTMyLjcgMi03MC4xIDM0LjYtODMuNnM3MC4xIDIgODMuNiAzNC42cy0yIDcwLjEtMzQuNiA4My42cy03MC4xLTItODMuNi0zNC42ek02MzkuOSA0MzEuOWMwIDQ0LjItMzUuOCA4MC04MCA4MEgyODhjLTUzIDAtOTYtNDMtOTYtOTZjMC00Ny42IDM0LjYtODcgODAtOTQuNmwwLTEuM2MwLTUzIDQzLTk2IDk2LTk2YzM0LjkgMCA2NS40IDE4LjYgODIuMiA0Ni40YzEzLTkuMSAyOC44LTE0LjQgNDUuOC0xNC40YzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgNS45LS42IDExLjctMS45IDE3LjJjMzcuNCA2LjcgNjUuOCAzOS40IDY1LjggNzguN3pcIl19LHBnPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInN0b3B3YXRjaC0yMFwiLGljb246WzQ0OCw1MTIsW10sXCJlMDZmXCIsXCJNMTc2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoMTZWOTguNEM5Mi4zIDExMy44IDE2IDIwMCAxNiAzMDRjMCAxMTQuOSA5My4xIDIwOCAyMDggMjA4czIwOC05My4xIDIwOC0yMDhjMC00MS44LTEyLjMtODAuNy0zMy41LTExMy4ybDI0LjEtMjQuMWMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwzNTUuNyAxNDNjLTI4LjEtMjMtNjIuMi0zOC44LTk5LjctNDQuNlY2NGgxNmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkgxNzZ6TTI4OCAyMDRjMjguNyAwIDUyIDIzLjMgNTIgNTJ2OTZjMCAyOC43LTIzLjMgNTItNTIgNTJzLTUyLTIzLjMtNTItNTJWMjU2YzAtMjguNyAyMy4zLTUyIDUyLTUyem0tMTIgNTJ2OTZjMCA2LjYgNS40IDEyIDEyIDEyczEyLTUuNCAxMi0xMlYyNTZjMC02LjYtNS40LTEyLTEyLTEycy0xMiA1LjQtMTIgMTJ6TTE1OS41IDI0NGMtNS40IDAtMTAuMiAzLjUtMTEuOSA4LjZsLS42IDEuN2MtMy41IDEwLjUtMTQuOCAxNi4xLTI1LjMgMTIuNnMtMTYuMS0xNC44LTEyLjYtMjUuM2wuNi0xLjdjNy4yLTIxLjUgMjcuMi0zNS45IDQ5LjgtMzUuOWMyOSAwIDUyLjUgMjMuNSA1Mi41IDUyLjV2Mi4yYzAgMTMuNC00LjkgMjYuNC0xMy44IDM2LjRsLTM5IDQzLjljLTYuMiA3LTEwIDE1LjctMTAuOSAyNC45SDE5MmMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBIMTI4Yy0xMSAwLTIwLTktMjAtMjBWMzY4LjNjMC0yMC42IDcuNS00MC40IDIxLjItNTUuOGwzOS00My45YzIuNC0yLjcgMy43LTYuMiAzLjctOS44di0yLjJjMC02LjktNS42LTEyLjUtMTIuNS0xMi41elwiXX0sZGc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwic3F1YXJlLWZ1bGxcIixpY29uOls1MTIsNTEyLFsxMjg5OTcsMTI4OTk4LDEyODk5OSwxMjllMywxMjkwMDEsMTI5MDAyLDEyOTAwMywxMTAzNSwxMTAzNl0sXCJmNDVjXCIsXCJNMCAwSDUxMlY1MTJIMFYwelwiXX0sdWc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFnbmV0XCIsaWNvbjpbNDQ4LDUxMixbMTI5NTIyXSxcImYwNzZcIixcIk0wIDE2MHY5NkMwIDM3OS43IDEwMC4zIDQ4MCAyMjQgNDgwczIyNC0xMDAuMyAyMjQtMjI0VjE2MEgzMjB2OTZjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZWMTYwSDB6bTAtMzJIMTI4VjY0YzAtMTcuNy0xNC4zLTMyLTMyLTMySDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjR2NjR6bTMyMCAwSDQ0OFY2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkgzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0elwiXX0seGc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiamFyXCIsaWNvbjpbMzIwLDUxMixbXSxcImU1MTZcIixcIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwSDI1NmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkg2NEM0Ni4zIDY0IDMyIDQ5LjcgMzIgMzJ6TTAgMTYwYzAtMzUuMyAyOC43LTY0IDY0LTY0SDI1NmMzNS4zIDAgNjQgMjguNyA2NCA2NFY0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRINjRjLTM1LjMgMC02NC0yOC43LTY0LTY0VjE2MHptOTYgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjk2YzAgMTcuNyAxNC4zIDMyIDMyIDMySDIyNGMxNy43IDAgMzItMTQuMyAzMi0zMlYyNTZjMC0xNy43LTE0LjMtMzItMzItMzJIOTZ6XCJdfSx3NT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJub3RlLXN0aWNreVwiLGljb246WzQ0OCw1MTIsWzYyMDI2LFwic3RpY2t5LW5vdGVcIl0sXCJmMjQ5XCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMjkwLjdjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDI5LjMgMzY4YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNWOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRINjR6bTAgNjRIMzg0VjMyMEgzMjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjY0SDY0Vjk2elwiXX0sZ2c9dzUsU2c9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYnVnLXNsYXNoXCIsaWNvbjpbNjQwLDUxMixbXSxcImU0OTBcIixcIk0zOC44IDUuMUMyOC40LTMuMSAxMy4zLTEuMiA1LjEgOS4yUy0xLjIgMzQuNyA5LjIgNDIuOWw1OTIgNDY0YzEwLjQgOC4yIDI1LjUgNi4zIDMzLjctNC4xczYuMy0yNS41LTQuMS0zMy43TDQ3Ny40IDM0OC45YzEuNy05LjQgMi42LTE5IDIuNi0yOC45aDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDQ3OS43Yy0xLjEtMTQuMS01LTI3LjUtMTEuMS0zOS41Yy43LS42IDEuNC0xLjIgMi4xLTEuOWw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLS43IC43LTEuMyAxLjQtMS45IDIuMUM0MDkuMiAxNjQuMSAzOTMuMSAxNjAgMzc2IDE2MEgyNjRjLTguMyAwLTE2LjMgMS0yNCAyLjhMMzguOCA1LjF6TTMyMCAwYy01MyAwLTk2IDQzLTk2IDk2djMuNmMwIDE1LjcgMTIuNyAyOC40IDI4LjQgMjguNEgzODcuNmMxNS43IDAgMjguNC0xMi43IDI4LjQtMjguNFY5NmMwLTUzLTQzLTk2LTk2LTk2ek0xNjAuMyAyNTZIOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoNjRjMCAyNC42IDUuNSA0Ny44IDE1LjQgNjguNmMtMi4yIDEuMy00LjIgMi45LTYgNC44bC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2My4xLTYzLjFjMjQuNSAyMS44IDU1LjggMzYuMiA5MC4zIDM5LjZWMzM1LjVMMTY2LjcgMjI3LjNjLTMuNCA5LTUuNiAxOC43LTYuNCAyOC43ek0zMzYgNDc5LjJjMzYuNi0zLjYgNjkuNy0xOS42IDk0LjgtNDMuOEwzMzYgMzYwLjdWNDc5LjJ6XCJdfSxOZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJhcnJvdy11cC1mcm9tLXdhdGVyLXB1bXBcIixpY29uOls1NzYsNTEyLFtdLFwiZTRiNlwiLFwiTTExMiAwQzg1LjUgMCA2NCAyMS41IDY0IDQ4VjI1Nkg0OGMtMjYuNSAwLTQ4IDIxLjUtNDggNDh2OTZjMCA4IDIgMTUuNiA1LjQgMjIuMmMzLjgtMS43IDcuOC0zLjEgMTItNC4xYzEzLjEtMy4xIDI2LjctOS44IDM3LjMtMTguNmMyMi4yLTE4LjcgNTQuMy0yMC4xIDc4LjEtMy40YzE4IDEyLjQgNDAuMSAyMC4zIDU5LjIgMjAuM2MyMS4xIDAgNDItOC41IDU5LjItMjAuM2MyMi4xLTE1LjUgNTEuNi0xNS41IDczLjcgMGMxOC40IDEyLjcgMzkuNiAyMC4zIDU5LjIgMjAuM2MxOSAwIDQxLjItNy45IDU5LjItMjAuM2MyMy44LTE2LjcgNTUuOC0xNS4zIDc4LjEgMy40YzEwLjYgOC44IDI0LjIgMTUuNiAzNy4zIDE4LjZjNC4yIDEgOC4yIDIuNCAxMiA0LjFDNTc0IDQxNS42IDU3NiA0MDggNTc2IDQwMFYzMDRjMC0yNi41LTIxLjUtNDgtNDgtNDhINDgwbDAtMTQ2LjcgMjUuNCAyNS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTgwLTgwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMNDE2IDEwOS4zIDQxNiAyNTZIMjg4VjQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4SDExMnpNMzA2LjUgNDIxLjljLTExLjEtNy45LTI1LjktNy45LTM3IDBDMjQ3IDQzNy40IDIxOS41IDQ0OCAxOTIgNDQ4Yy0yNi45IDAtNTUuMy0xMC44LTc3LjQtMjYuMWwwIDBjLTExLjktOC41LTI4LjEtNy44LTM5LjIgMS43Yy0xNC40IDExLjktMzIuNSAyMS01MC42IDI1LjJjLTE3LjIgNC0yNy45IDIxLjItMjMuOSAzOC40czIxLjIgMjcuOSAzOC40IDIzLjljMjQuNS01LjcgNDQuOS0xNi41IDU4LjItMjVDMTI2LjUgNTAxLjcgMTU5IDUxMiAxOTIgNTEyYzMxLjkgMCA2MC42LTkuOSA4MC40LTE4LjljNS44LTIuNyAxMS4xLTUuMyAxNS42LTcuN2M0LjUgMi40IDkuNyA1LjEgMTUuNiA3LjdjMTkuOCA5IDQ4LjYgMTguOSA4MC40IDE4LjljMzMgMCA2NS41LTEwLjMgOTQuNS0yNS44YzEzLjQgOC40IDMzLjcgMTkuMyA1OC4yIDI1YzE3LjIgNCAzNC40LTYuNyAzOC40LTIzLjlzLTYuNy0zNC40LTIzLjktMzguNGMtMTguMS00LjItMzYuMi0xMy4zLTUwLjYtMjUuMmMtMTEuMS05LjQtMjcuMy0xMC4xLTM5LjItMS43bDAgMEM0MzkuNCA0MzcuMiA0MTAuOSA0NDggMzg0IDQ0OGMtMjcuNSAwLTU1LTEwLjYtNzcuNS0yNi4xelwiXX0sd2c9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYm9uZVwiLGljb246WzU3Niw1MTIsWzEyOTQ2MF0sXCJmNWQ3XCIsXCJNMTUzLjcgMTQ0LjhjNi45IDE2LjMgMjAuNiAzMS4yIDM4LjMgMzEuMkgzODRjMTcuNyAwIDMxLjQtMTQuOSAzOC4zLTMxLjJDNDM0LjQgMTE2LjEgNDYyLjkgOTYgNDk2IDk2YzQ0LjIgMCA4MCAzNS44IDgwIDgwYzAgMzAuNC0xNyA1Ni45LTQyIDcwLjRjLTMuNiAxLjktNiA1LjUtNiA5LjZzMi40IDcuNyA2IDkuNmMyNSAxMy41IDQyIDQwIDQyIDcwLjRjMCA0NC4yLTM1LjggODAtODAgODBjLTMzLjEgMC02MS42LTIwLjEtNzMuNy00OC44QzQxNS40IDM1MC45IDQwMS43IDMzNiAzODQgMzM2SDE5MmMtMTcuNyAwLTMxLjQgMTQuOS0zOC4zIDMxLjJDMTQxLjYgMzk1LjkgMTEzLjEgNDE2IDgwIDQxNmMtNDQuMiAwLTgwLTM1LjgtODAtODBjMC0zMC40IDE3LTU2LjkgNDItNzAuNGMzLjYtMS45IDYtNS41IDYtOS42cy0yLjQtNy43LTYtOS42QzE3IDIzMi45IDAgMjA2LjQgMCAxNzZjMC00NC4yIDM1LjgtODAgODAtODBjMzMuMSAwIDYxLjYgMjAuMSA3My43IDQ4Ljh6XCJdfSxrZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2VyLWluanVyZWRcIixpY29uOls0NDgsNTEyLFtdLFwiZjcyOFwiLFwiTTI0MCA4MEgzNDIuN2MtNy45LTE5LjUtMjAuNC0zNi41LTM2LjItNDkuOUwyNDAgODB6bTM3LjctNjguMkMyNjEuMyA0LjIgMjQzLjIgMCAyMjQgMGMtNTMuNyAwLTk5LjcgMzMuMS0xMTguNyA4MGg4MS40bDkxLTY4LjJ6TTIyNCAyNTZjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhjMC01LjQtLjMtMTAuOC0xLTE2SDk3Yy0uNyA1LjItMSAxMC42LTEgMTZjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjh6TTEyNCAzMTIuNGMtOS43IDMuMS0xOS4xIDctMjggMTEuN1Y1MTJIMjQzLjdMMTgxLjUgNDA4LjIgMTI0IDMxMi40em0zMy03LjJMMjA0LjMgMzg0SDI3MmM0NC4yIDAgODAgMzUuOCA4MCA4MGMwIDE4LTYgMzQuNi0xNiA0OGg4Mi4zYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43QzQ0OCAzODMuOCAzNjguMiAzMDQgMjY5LjcgMzA0SDE3OC4zYy03LjIgMC0xNC4zIC40LTIxLjMgMS4zek0wIDQ4Mi4zQzAgNDk4LjcgMTMuMyA1MTIgMjkuNyA1MTJINjRWMzQ1LjRDMjQuOSAzNzguMSAwIDQyNy4zIDAgNDgyLjN6TTMyMCA0NjRjMC0yNi41LTIxLjUtNDgtNDgtNDhIMjIzLjVsNTcuMSA5NS4yQzMwMyA1MDcuMiAzMjAgNDg3LjYgMzIwIDQ2NHpcIl19LGs1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImZhY2Utc2FkLXRlYXJcIixpY29uOls1MTIsNTEyLFsxMjg1NDYsXCJzYWQtdGVhclwiXSxcImY1YjRcIixcIk0wIDI1NkMwIDM5Ny40IDExNC42IDUxMiAyNTYgNTEyczI1Ni0xMTQuNiAyNTYtMjU2UzM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NnptMjQwIDgwYzAtOC44IDcuMi0xNiAxNi0xNmM0NSAwIDg1LjYgMjAuNSAxMTUuNyA1My4xYzYgNi41IDUuNiAxNi42LS45IDIyLjZzLTE2LjYgNS42LTIyLjYtLjljLTI1LTI3LjEtNTcuNC00Mi45LTkyLjMtNDIuOWMtOC44IDAtMTYtNy4yLTE2LTE2em0tODAgODBjLTI2LjUgMC00OC0yMS00OC00N2MwLTIwIDI4LjYtNjAuNCA0MS42LTc3LjdjMy4yLTQuNCA5LjYtNC40IDEyLjggMEMxNzkuNiAzMDguNiAyMDggMzQ5IDIwOCAzNjljMCAyNi0yMS41IDQ3LTQ4IDQ3ek0zMDMuNiAyMDhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptLTEyOCAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyelwiXX0sYmc9azUsQWc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwicGxhbmVcIixpY29uOls1NzYsNTEyLFtdLFwiZjA3MlwiLFwiTTQ4Mi4zIDE5MmMzNC4yIDAgOTMuNyAyOSA5My43IDY0YzAgMzYtNTkuNSA2NC05My43IDY0bC0xMTYuNiAwTDI2NS4yIDQ5NS45Yy01LjcgMTAtMTYuMyAxNi4xLTI3LjggMTYuMWwtNTYuMiAwYy0xMC42IDAtMTguMy0xMC4yLTE1LjQtMjAuNGw0OS0xNzEuNkwxMTIgMzIwIDY4LjggMzc3LjZjLTMgNC03LjggNi40LTEyLjggNi40bC00MiAwYy03LjggMC0xNC02LjMtMTQtMTRjMC0xLjMgLjItMi42IC41LTMuOUwzMiAyNTYgLjUgMTQ1LjljLS40LTEuMy0uNS0yLjYtLjUtMy45YzAtNy44IDYuMy0xNCAxNC0xNGw0MiAwYzUgMCA5LjggMi40IDEyLjggNi40TDExMiAxOTJsMTAyLjkgMC00OS0xNzEuNkMxNjIuOSAxMC4yIDE3MC42IDAgMTgxLjIgMGw1Ni4yIDBjMTEuNSAwIDIyLjEgNi4yIDI3LjggMTYuMUwzNjUuNyAxOTJsMTE2LjYgMHpcIl19LEJnPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInRlbnQtYXJyb3dzLWRvd25cIixpY29uOls1NzYsNTEyLFtdLFwiZTU4MVwiLFwiTTIwOS44IDExMS45Yy04LjktOS45LTI0LTEwLjctMzMuOS0xLjhsLTM5LjkgMzZMMTM2IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0Uzg4IDEwLjcgODggMjRsMCAxMjIuMS0zOS45LTM2Yy05LjktOC45LTI1LTguMS0zMy45IDEuOHMtOC4xIDI1IDEuOCAzMy45bDgwIDcyYzkuMSA4LjIgMjMgOC4yIDMyLjEgMGw4MC03MmM5LjktOC45IDEwLjctMjQgMS44LTMzLjl6bTM1MiAwYy04LjktOS45LTI0LTEwLjctMzMuOS0xLjhsLTM5LjkgMzZWMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRWMTQ2LjFsLTM5LjktMzZjLTkuOS04LjktMjUtOC4xLTMzLjkgMS44cy04LjEgMjUgMS44IDMzLjlsODAgNzJjOS4xIDguMiAyMyA4LjIgMzIuMSAwbDgwLTcyYzkuOS04LjkgMTAuNy0yNCAxLjgtMzMuOXpNMzA3LjQgMTY2LjVjLTExLjUtOC43LTI3LjMtOC43LTM4LjggMGwtMTY4IDEyOGMtNi42IDUtMTEgMTIuNS0xMi4zIDIwLjdsLTI0IDE2MGMtMS40IDkuMiAxLjMgMTguNiA3LjQgMjUuNlM4Ni43IDUxMiA5NiA1MTJIMjg4VjM1Mmw5NiAxNjBoOTZjOS4zIDAgMTguMi00LjEgMjQuMi0xMS4xczguOC0xNi40IDcuNC0yNS42bC0yNC0xNjBjLTEuMi04LjItNS42LTE1LjctMTIuMy0yMC43bC0xNjgtMTI4elwiXX0sVGc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiZXhjbGFtYXRpb25cIixpY29uOlsxMjgsNTEyLFsxMDA2OSwxMDA3MSw2MTczOF0sXCIyMVwiLFwiTTk2IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzMyIDQ2LjMgMzIgNjRWMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWNjR6TTY0IDQ4MGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwelwiXX0seWc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYXJyb3dzLXNwaW5cIixpY29uOls0NDgsNTEyLFtdLFwiZTRiYlwiLFwiTTIyNCA5NmMzOC40IDAgNzMuNyAxMy41IDEwMS4zIDM2LjFsLTMyLjYgMzIuNmMtNC42IDQuNi01LjkgMTEuNS0zLjUgMTcuNHM4LjMgOS45IDE0LjggOS45SDQxNmM4LjggMCAxNi03LjIgMTYtMTZWNjRjMC02LjUtMy45LTEyLjMtOS45LTE0LjhzLTEyLjktMS4xLTE3LjQgMy41bC0zNCAzNEMzMzEuNCA1Mi42IDI4MC4xIDMyIDIyNCAzMmMtMTAuOSAwLTIxLjUgLjgtMzIgMi4zVjk5LjJjMTAuMy0yLjEgMjEtMy4yIDMyLTMuMnpNMTAwLjEgMTU0LjdsMzIuNiAzMi42YzQuNiA0LjYgMTEuNSA1LjkgMTcuNCAzLjVzOS45LTguMyA5LjktMTQuOFY2NGMwLTguOC03LjItMTYtMTYtMTZIMzJjLTYuNSAwLTEyLjMgMy45LTE0LjggOS45cy0xLjEgMTIuOSAzLjUgMTcuNGwzNCAzNEMyMC42IDE0OC42IDAgMTk5LjkgMCAyNTZjMCAxMC45IC44IDIxLjUgMi4zIDMySDY3LjJjLTIuMS0xMC4zLTMuMi0yMS0zLjItMzJjMC0zOC40IDEzLjUtNzMuNyAzNi4xLTEwMS4zek00NDUuNyAyMjRIMzgwLjhjMi4xIDEwLjMgMy4yIDIxIDMuMiAzMmMwIDM4LjQtMTMuNSA3My43LTM2LjEgMTAxLjNsLTMyLjYtMzIuNmMtNC42LTQuNi0xMS41LTUuOS0xNy40LTMuNXMtOS45IDguMy05LjkgMTQuOFY0NDhjMCA4LjggNy4yIDE2IDE2IDE2SDQxNmM2LjUgMCAxMi4zLTMuOSAxNC44LTkuOXMxLjEtMTIuOS0zLjUtMTcuNGwtMzQtMzRDNDI3LjQgMzYzLjQgNDQ4IDMxMi4xIDQ0OCAyNTZjMC0xMC45LS44LTIxLjUtMi4zLTMyek0yMjQgNDE2Yy0zOC40IDAtNzMuNy0xMy41LTEwMS4zLTM2LjFsMzIuNi0zMi42YzQuNi00LjYgNS45LTExLjUgMy41LTE3LjRzLTguMy05LjktMTQuOC05LjlIMzJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMmMwIDYuNSAzLjkgMTIuMyA5LjkgMTQuOHMxMi45IDEuMSAxNy40LTMuNWwzNC0zNEMxMTYuNiA0NTkuNCAxNjcuOSA0ODAgMjI0IDQ4MGMxMC45IDAgMjEuNS0uOCAzMi0yLjNWNDEyLjhjLTEwLjMgMi4xLTIxIDMuMi0zMiAzLjJ6XCJdfSxQZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwcmludFwiLGljb246WzUxMiw1MTIsWzEyODQyNCwxMjg0MzgsOTExM10sXCJmMDJmXCIsXCJNMTI4IDBDOTIuNyAwIDY0IDI4LjcgNjQgNjR2OTZoNjRWNjRIMzU0LjdMMzg0IDkzLjNWMTYwaDY0VjkzLjNjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNDAwIDE4LjdDMzg4IDYuNyAzNzEuNyAwIDM1NC43IDBIMTI4ek0zODQgMzUydjMyIDY0SDEyOFYzODQgMzY4IDM1MkgzODR6bTY0IDMyaDMyYzE3LjcgMCAzMi0xNC4zIDMyLTMyVjI1NmMwLTM1LjMtMjguNy02NC02NC02NEg2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2OTZjMCAxNy43IDE0LjMgMzIgMzIgMzJINjR2NjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0VjM4NHptLTE2LTg4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6XCJdfSx6Mj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ0dXJraXNoLWxpcmEtc2lnblwiLGljb246WzQ0OCw1MTIsW1widHJ5XCIsXCJ0dXJraXNoLWxpcmFcIl0sXCJlMmJiXCIsXCJNMTI4IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjk5LjNMMjc5LjIgNjUuMmMxNy00LjkgMzQuNyA1IDM5LjYgMjJzLTUgMzQuNy0yMiAzOS42TDE2MCAxNjUuOXYyOS40bDExOS4yLTM0LjFjMTctNC45IDM0LjcgNSAzOS42IDIycy01IDM0LjctMjIgMzkuNkwxNjAgMjYxLjlWNDE2aDYzLjhjNjguMiAwIDEyNC40LTUzLjUgMTI3LjgtMTIxLjZsLjQtOGMuOS0xNy43IDE1LjktMzEuMiAzMy42LTMwLjRzMzEuMiAxNS45IDMwLjQgMzMuNmwtLjQgOEM0MTAuNSAzOTkuOCAzMjYuMSA0ODAgMjIzLjggNDgwSDEyOGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjgwLjFsLTIzLjIgNi42Yy0xNyA0LjktMzQuNy01LTM5LjYtMjJzNS0zNC43IDIyLTM5LjZMOTYgMjEzLjZWMTg0LjFsLTIzLjIgNi42Yy0xNyA0LjktMzQuNy01LTM5LjYtMjJzNS0zNC43IDIyLTM5LjZMOTYgMTE3LjZWNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6XCJdfSxGZz16MixEZz16MixWMj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkb2xsYXItc2lnblwiLGljb246WzMyMCw1MTIsWzEyODE3OCw2MTc4MSxcImRvbGxhclwiLFwidXNkXCJdLFwiMjRcIixcIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY2Ny43YzEuNiAuMiAzLjEgLjQgNC43IC43YzEwLjYgMS42IDQyLjEgNi43IDU1LjEgMTBjMTcuMSA0LjMgMjcuNSAyMS43IDIzLjIgMzguOXMtMjEuNyAyNy41LTM4LjkgMjMuMmMtOS4zLTIuNC0zNy42LTctNDguOS04LjdjLTMyLjEtNC44LTU5LjYtMi40LTc4LjUgNC45Yy0xOC4zIDctMjUuOSAxNi45LTI3LjkgMjhjLTEuOSAxMC43LS41IDE2LjggMS4zIDIwLjZjMS45IDQgNS42IDguNSAxMi45IDEzLjRjMTYuMiAxMC44IDQxLjEgMTcuOSA3My4zIDI2LjdsMi44IC44YzI4LjQgNy43IDYzLjIgMTcuMiA4OSAzNC4zYzE0LjEgOS40IDI3LjMgMjIuMSAzNS41IDM5LjdjOC4zIDE3LjggMTAuMSAzNy44IDYuMyA1OS4xYy02LjkgMzgtMzMuMSA2My40LTY1LjYgNzYuN2MtMTMuNyA1LjYtMjguNiA5LjItNDQuNCAxMVY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDQ1LjFjLS40LS4xLS45LS4xLTEuMy0uMmwtLjIgMCAwIDBjLTI0LjQtMy44LTY0LjUtMTQuMy05MS41LTI2LjNjLTE2LjItNy4yLTIzLjQtMjYuMS0xNi4yLTQyLjJzMjYuMS0yMy40IDQyLjItMTYuMmMyMC45IDkuMyA1NS4zIDE4LjQgNzUuMiAyMS42YzMxLjkgNC43IDU4LjIgMiA3Ni01LjNjMTYuOS02LjkgMjQuNi0xNi45IDI2LjgtMjguOWMxLjktMTAuNyAuNS0xNi44LTEuMy0yMC42Yy0xLjktNC01LjYtOC41LTEyLjktMTMuNGMtMTYuMi0xMC44LTQxLjEtMTcuOS03My4zLTI2LjdsLTIuOC0uOGMtMjguNC03LjctNjMuMi0xNy4yLTg5LTM0LjNjLTE0LjEtOS40LTI3LjMtMjIuMS0zNS41LTM5LjdjLTguMy0xNy44LTEwLjEtMzcuOC02LjMtNTkuMUMyNSAxMTQuMSA1MyA4OS4zIDg2IDc2LjdjMTMtNSAyNy4yLTguMiA0Mi0xMFYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpcIl19LFJnPVYyLFVnPVYyLHFnPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInhcIixpY29uOlszODQsNTEyLFsxMjBdLFwiNThcIixcIk0zNzYuNiA4NC41YzExLjMtMTMuNiA5LjUtMzMuOC00LjEtNDUuMXMtMzMuOC05LjUtNDUuMSA0LjFMMTkyIDIwNiA1Ni42IDQzLjVDNDUuMyAyOS45IDI1LjEgMjguMSAxMS41IDM5LjRTLTMuOSA3MC45IDcuNCA4NC41TDE1MC4zIDI1NiA3LjQgNDI3LjVjLTExLjMgMTMuNi05LjUgMzMuOCA0LjEgNDUuMXMzMy44IDkuNSA0NS4xLTQuMUwxOTIgMzA2IDMyNy40IDQ2OC41YzExLjMgMTMuNiAzMS41IDE1LjQgNDUuMSA0LjFzMTUuNC0zMS41IDQuMS00NS4xTDIzMy43IDI1NiAzNzYuNiA4NC41elwiXX0sYjU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFnbmlmeWluZy1nbGFzcy1kb2xsYXJcIixpY29uOls1MTIsNTEyLFtcInNlYXJjaC1kb2xsYXJcIl0sXCJmNjg4XCIsXCJNNDE2IDIwOGMwIDQ1LjktMTQuOSA4OC4zLTQwIDEyMi43TDUwMi42IDQ1Ny40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDMzMC43IDM3NmMtMzQuNCAyNS4yLTc2LjggNDAtMTIyLjcgNDBDOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDBTNDE2IDkzLjEgNDE2IDIwOHpNMjI4IDEwNGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjB2MTRjLTcuNiAxLjctMTUuMiA0LjQtMjIuMiA4LjVjLTEzLjkgOC4zLTI1LjkgMjIuOC0yNS44IDQzLjljLjEgMjAuMyAxMiAzMy4xIDI0LjcgNDAuN2MxMSA2LjYgMjQuNyAxMC44IDM1LjYgMTRsMS43IC41YzEyLjYgMy44IDIxLjggNi44IDI4IDEwLjdjNS4xIDMuMiA1LjggNS40IDUuOSA4LjJjLjEgNS0xLjggOC01LjkgMTAuNWMtNSAzLjEtMTIuOSA1LTIxLjQgNC43Yy0xMS4xLS40LTIxLjUtMy45LTM1LjEtOC41Yy0yLjMtLjgtNC43LTEuNi03LjItMi40Yy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjZzMi4yIDIxLjggMTIuNiAyNS4zYzEuOSAuNiA0IDEuMyA2LjEgMi4xbDAgMCAwIDBjOC4zIDIuOSAxNy45IDYuMiAyOC4yIDguNFYzMTJjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBWMjk4LjJjOC0xLjcgMTYtNC41IDIzLjItOWMxNC4zLTguOSAyNS4xLTI0LjEgMjQuOC00NWMtLjMtMjAuMy0xMS43LTMzLjQtMjQuNi00MS42Yy0xMS41LTcuMi0yNS45LTExLjYtMzcuMS0xNWwtLjctLjJjLTEyLjgtMy45LTIxLjktNi43LTI4LjMtMTAuNWMtNS4yLTMuMS01LjMtNC45LTUuMy02LjdjMC0zLjcgMS40LTYuNSA2LjItOS4zYzUuNC0zLjIgMTMuNi01LjEgMjEuNS01YzkuNiAuMSAyMC4yIDIuMiAzMS4yIDUuMmMxMC43IDIuOCAyMS42LTMuNSAyNC41LTE0LjJzLTMuNS0yMS42LTE0LjItMjQuNWMtNi41LTEuNy0xMy43LTMuNC0yMS4xLTQuN1YxMDR6XCJdfSxHZz1iNSxBNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJ1c2Vycy1nZWFyXCIsaWNvbjpbNjQwLDUxMixbXCJ1c2Vycy1jb2dcIl0sXCJmNTA5XCIsXCJNMTQ0IDE2MGM0NC4yIDAgODAtMzUuOCA4MC04MHMtMzUuOC04MC04MC04MFM2NCAzNS44IDY0IDgwczM1LjggODAgODAgODB6bTM2OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwczM1LjggODAgODAgODB6TTAgMjk4LjdDMCAzMTAuNCA5LjYgMzIwIDIxLjMgMzIwSDIzNC43Yy4yIDAgLjQgMCAuNyAwYy0yNi42LTIzLjUtNDMuMy01Ny44LTQzLjMtOTZjMC03LjYgLjctMTUgMS45LTIyLjNjLTEzLjYtNi4zLTI4LjctOS43LTQ0LjYtOS43SDEwNi43QzQ3LjggMTkyIDAgMjM5LjggMCAyOTguN3pNMzIwIDMyMGMyNCAwIDQ1LjktOC44IDYyLjctMjMuM2MyLjUtMy43IDUuMi03LjMgOC0xMC43YzIuNy0zLjMgNS43LTYuMSA5LTguM0M0MTAgMjYyLjMgNDE2IDI0My45IDQxNiAyMjRjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZzNDMgOTYgOTYgOTZ6bTY1LjQgNjAuMmMtMTAuMy01LjktMTguMS0xNi4yLTIwLjgtMjguMkgyNjEuM0MxODcuNyAzNTIgMTI4IDQxMS43IDEyOCA0ODUuM2MwIDE0LjcgMTEuOSAyNi43IDI2LjcgMjYuN0g0NTUuMmMtMi4xLTUuMi0zLjItMTAuOS0zLjItMTYuNHYtM2MtMS4zLS43LTIuNy0xLjUtNC0yLjNsLTIuNiAxLjVjLTE2LjggOS43LTQwLjUgOC01NC43LTkuN2MtNC41LTUuNi04LjYtMTEuNS0xMi40LTE3LjZsLS4xLS4yLS4xLS4yLTIuNC00LjEtLjEtLjItLjEtLjJjLTMuNC02LjItNi40LTEyLjYtOS0xOS4zYy04LjItMjEuMiAyLjItNDIuNiAxOS01Mi4zbDIuNy0xLjVjMC0uOCAwLTEuNSAwLTIuM3MwLTEuNSAwLTIuM2wtMi43LTEuNXpNNTMzLjMgMTkySDQ5MC43Yy0xNS45IDAtMzEgMy41LTQ0LjYgOS43YzEuMyA3LjIgMS45IDE0LjcgMS45IDIyLjNjMCAxNy40LTMuNSAzMy45LTkuNyA0OWMyLjUgLjkgNC45IDIgNy4xIDMuM2wyLjYgMS41YzEuMy0uOCAyLjYtMS42IDQtMi4zdi0zYzAtMTkuNCAxMy4zLTM5LjEgMzUuOC00Mi42YzcuOS0xLjIgMTYtMS45IDI0LjItMS45czE2LjMgLjYgMjQuMiAxLjljMjIuNSAzLjUgMzUuOCAyMy4yIDM1LjggNDIuNnYzYzEuMyAuNyAyLjcgMS41IDQgMi4zbDIuNi0xLjVjMTYuOC05LjcgNDAuNS04IDU0LjcgOS43YzIuMyAyLjggNC41IDUuOCA2LjYgOC43Yy0yLjEtNTcuMS00OS0xMDIuNy0xMDYuNi0xMDIuN3ptOTEuMyAxNjMuOWM2LjMtMy42IDkuNS0xMS4xIDYuOC0xOGMtMi4xLTUuNS00LjYtMTAuOC03LjQtMTUuOWwtMi4zLTRjLTMuMS01LjEtNi41LTkuOS0xMC4yLTE0LjVjLTQuNi01LjctMTIuNy02LjctMTktM0w1NzQuNCAzMTFjLTguOS03LjYtMTkuMS0xMy42LTMwLjQtMTcuNnYtMjFjMC03LjMtNC45LTEzLjgtMTIuMS0xNC45Yy02LjUtMS0xMy4xLTEuNS0xOS45LTEuNXMtMTMuNCAuNS0xOS45IDEuNWMtNy4yIDEuMS0xMi4xIDcuNi0xMi4xIDE0Ljl2MjFjLTExLjIgNC0yMS41IDEwLTMwLjQgMTcuNmwtMTguMi0xMC41Yy02LjMtMy42LTE0LjQtMi42LTE5IDNjLTMuNyA0LjYtNy4xIDkuNS0xMC4yIDE0LjZsLTIuMyAzLjljLTIuOCA1LjEtNS4zIDEwLjQtNy40IDE1LjljLTIuNiA2LjggLjUgMTQuMyA2LjggMTcuOWwxOC4yIDEwLjVjLTEgNS43LTEuNiAxMS42LTEuNiAxNy42cy42IDExLjkgMS42IDE3LjVsLTE4LjIgMTAuNWMtNi4zIDMuNi05LjUgMTEuMS02LjggMTcuOWMyLjEgNS41IDQuNiAxMC43IDcuNCAxNS44bDIuNCA0LjFjMyA1LjEgNi40IDkuOSAxMC4xIDE0LjVjNC42IDUuNyAxMi43IDYuNyAxOSAzTDQ0OS42IDQ1N2M4LjkgNy42IDE5LjIgMTMuNiAzMC40IDE3LjZ2MjFjMCA3LjMgNC45IDEzLjggMTIuMSAxNC45YzYuNSAxIDEzLjEgMS41IDE5LjkgMS41czEzLjQtLjUgMTkuOS0xLjVjNy4yLTEuMSAxMi4xLTcuNiAxMi4xLTE0Ljl2LTIxYzExLjItNCAyMS41LTEwIDMwLjQtMTcuNmwxOC4yIDEwLjVjNi4zIDMuNiAxNC40IDIuNiAxOS0zYzMuNy00LjYgNy4xLTkuNCAxMC4xLTE0LjVsMi40LTQuMmMyLjgtNS4xIDUuMy0xMC4zIDcuNC0xNS44YzIuNi02LjgtLjUtMTQuMy02LjgtMTcuOWwtMTguMi0xMC41YzEtNS43IDEuNi0xMS42IDEuNi0xNy41cy0uNi0xMS45LTEuNi0xNy42bDE4LjItMTAuNXpNNTUyIDM4NGMwIDIyLjEtMTcuOSA0MC00MCA0MHMtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDB6XCJdfSxXZz1BNSxFZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwZXJzb24tbWlsaXRhcnktcG9pbnRpbmdcIixpY29uOls1NzYsNTEyLFtdLFwiZTU0YVwiLFwiTTI0Ni45IDE0LjFDMjM0IDE1LjIgMjI0IDI2IDIyNCAzOWMwIDEzLjggMTEuMiAyNSAyNSAyNUg0MDBjOC44IDAgMTYtNy4yIDE2LTE2VjE3LjRDNDE2IDggNDA4IC43IDM5OC43IDEuNEwyNDYuOSAxNC4xek0yNDAgMTEyYzAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC01LjUtLjYtMTAuOC0xLjYtMTZIMjQxLjZjLTEgNS4yLTEuNiAxMC41LTEuNiAxNnpNNzIgMjI0Yy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwSDIyNHY4OS40TDM4Ni44IDIzMC41Yy0xMy4zLTQuMy0yNy4zLTYuNS00MS42LTYuNUgyNDAgNzJ6bTM0NS43IDIwLjlMMjQ2LjYgNDE2SDQxNlYzNjkuN2w1My42IDkwLjZjMTEuMiAxOSAzNS44IDI1LjMgNTQuOCAxNC4xczI1LjMtMzUuOCAxNC4xLTU0LjhMNDYyLjMgMjkwLjhjLTExLjItMTguOS0yNi42LTM0LjUtNDQuNi00NS45ek0yMjQgNDQ4djMyYzAgMTcuNyAxNC4zIDMyIDMyIDMySDM4NGMxNy43IDAgMzItMTQuMyAzMi0zMlY0NDhIMjI0elwiXX0sZj17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJidWlsZGluZy1jb2x1bW5zXCIsaWNvbjpbNTEyLDUxMixbXCJiYW5rXCIsXCJpbnN0aXR1dGlvblwiLFwibXVzZXVtXCIsXCJ1bml2ZXJzaXR5XCJdLFwiZjE5Y1wiLFwiTTI0My40IDIuNmwtMjI0IDk2Yy0xNCA2LTIxLjggMjEtMTguNyAzNS44UzE2LjggMTYwIDMyIDE2MHY4YzAgMTMuMyAxMC43IDI0IDI0IDI0SDQ1NmMxMy4zIDAgMjQtMTAuNyAyNC0yNHYtOGMxNS4yIDAgMjguMy0xMC43IDMxLjMtMjUuNnMtNC44LTI5LjktMTguNy0zNS44bC0yMjQtOTZjLTguMS0zLjQtMTcuMi0zLjQtMjUuMiAwek0xMjggMjI0SDY0VjQyMC4zYy0uNiAuMy0xLjIgLjctMS44IDEuMWwtNDggMzJjLTExLjcgNy44LTE3IDIyLjQtMTIuOSAzNS45UzE3LjkgNTEyIDMyIDUxMkg0ODBjMTQuMSAwIDI2LjUtOS4yIDMwLjYtMjIuN3MtMS4xLTI4LjEtMTIuOS0zNS45bC00OC0zMmMtLjYtLjQtMS4yLS43LTEuOC0xLjFWMjI0SDM4NFY0MTZIMzQ0VjIyNEgyODBWNDE2SDIzMlYyMjRIMTY4VjQxNkgxMjhWMjI0em0xMjgtOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMnpcIl19LElnPWYsT2c9ZixYZz1mLFFnPWYsS2c9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidW1icmVsbGFcIixpY29uOls2NDAsNTEyLFtdLFwiZjBlOVwiLFwiTTMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyVjQ5LjdDNDgzLjggNjMuNCA1ODkuNyAxNjEgNjA1LjkgMjg1LjljMiAxNS42LTE3LjMgMjQuNC0yNy44IDEyLjdDNTY0LjEgMjgzIDUzNi44IDI3MiA1MTIgMjcyYy0zOC43IDAtNzEgMjcuNS03OC40IDY0LjFjLTEuNyA4LjctOC43IDE1LjktMTcuNiAxNS45cy0xNS44LTcuMi0xNy42LTE1LjlDMzkxIDI5OS41IDM1OC43IDI3MiAzMjAgMjcycy03MSAyNy41LTc4LjQgNjQuMWMtMS43IDguNy04LjcgMTUuOS0xNy42IDE1LjlzLTE1LjgtNy4yLTE3LjYtMTUuOUMxOTkgMjk5LjUgMTY2LjcgMjcyIDEyOCAyNzJjLTI0LjggMC01Mi4xIDExLTY2LjEgMjYuN2MtMTAuNSAxMS43LTI5LjggMi45LTI3LjgtMTIuN0M1MC4zIDE2MSAxNTYuMiA2My40IDI4OCA0OS43VjMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0wIDMwNGMxMi4zIDAgMjMuNSA0LjYgMzIgMTIuMlY0MzAuNmMwIDQ1LTM2LjUgODEuNC04MS40IDgxLjRjLTMwLjggMC01OS0xNy40LTcyLjgtNDVsLTIuMy00LjdjLTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlzMzUtMS41IDQyLjkgMTQuM2wyLjMgNC43YzMgNS45IDkgOS42IDE1LjYgOS42YzkuNiAwIDE3LjQtNy44IDE3LjQtMTcuNFYzMTYuMmM4LjUtNy42IDE5LjctMTIuMiAzMi0xMi4yelwiXX0samc9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwidHJvd2VsXCIsaWNvbjpbNTEyLDUxMixbXSxcImU1ODlcIixcIk0zNDMuOSAyMTMuNEwyNDUuMyAzMTJsNjUuNCA2NS40YzcuOSA3LjkgMTEuMSAxOS40IDguNCAzMC4zcy0xMC44IDE5LjYtMjEuNSAyMi45bC0yNTYgODBjLTExLjQgMy41LTIzLjggLjUtMzIuMi03LjlTLTIuMSA0ODEuOCAxLjUgNDcwLjVsODAtMjU2YzMuMy0xMC43IDEyLTE4LjkgMjIuOS0yMS41czIyLjQgLjUgMzAuMyA4LjRMMjAwIDI2Ni43bDk4LjYtOTguNmMtMTQuMy0xNC42LTE0LjItMzggLjMtNTIuNWw5NS40LTk1LjRjMjYuOS0yNi45IDcwLjUtMjYuOSA5Ny41IDBzMjYuOSA3MC41IDAgOTcuNWwtOTUuNCA5NS40Yy0xNC41IDE0LjUtMzcuOSAxNC42LTUyLjUgLjN6XCJdfSxKZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJkXCIsaWNvbjpbMzg0LDUxMixbMTAwXSxcIjQ0XCIsXCJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMkgxNjBjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNHMtMTAwLjMgMjI0LTIyNCAyMjRIMzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjY0ek02NCA5NlY0MTZoOTZjODguNCAwIDE2MC03MS42IDE2MC0xNjBzLTcxLjYtMTYwLTE2MC0xNjBINjR6XCJdfSxaZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzdGFwbGVyXCIsaWNvbjpbNjQwLDUxMixbXSxcImU1YWZcIixcIk02NDAgMjk5LjNWMzA0IDQzMmMwIDI2LjUtMjEuNSA0OC00OCA0OEg1MTIgNDQ4IDY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMySDQ0OFYzNjhIOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyVjIxOS40TDMzLjggMjE0QzE0LjIgMjEwLjUgMCAxOTMuNSAwIDE3My43YzAtOC45IDIuOS0xNy41IDguMi0yNC42bDM1LjYtNDcuNUM3Ni43IDU3LjggMTI4LjIgMzIgMTgyLjkgMzJjMjcgMCA1My42IDYuMyA3Ny44IDE4LjRMNTg2LjkgMjEzLjVDNjE5LjUgMjI5LjcgNjQwIDI2MyA2NDAgMjk5LjN6TTQ0OCAzMDRWMjg4TDEyOCAyMzAuOVYzMDRINDQ4elwiXX0sQjU9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwibWFza3MtdGhlYXRlclwiLGljb246WzY0MCw1MTIsWzEyNzkxNyxcInRoZWF0ZXItbWFza3NcIl0sXCJmNjMwXCIsXCJNMzk5LjMgNTA5LjdjLTU4LjItOC44LTEwOC4yLTcyLjgtMTM3LjYtMTE5LjdjLTIwLTMxLjktMjUuMS03MC4zLTE5LjYtMTA3LjdMMjY2LjMgMTE4YzEuNC05LjggNS4xLTE5LjIgMTIuOS0yNS4yYzIwLjItMTUuNiA3Mi40LTQxLjUgMTg1LjEtMjQuNXMxNTUuMiA1Ny40IDE3MCA3OC4zYzUuNyA4IDYuNSAxOC4xIDUuMSAyNy45TDYxNS4yIDMzOC44Yy01LjUgMzcuMy0yMS41IDcyLjYtNDkuOCA5Ny4yYy00MS43IDM2LjEtMTA4IDgyLjUtMTY2LjEgNzMuN3ptMTcuMS0yNzcuN2MuMS0uNSAuMi0xLjEgLjMtMS42YzMuMi0yMS44LTExLjYtNDItMzMuMS00NS4zcy00MS41IDExLjgtNDQuNyAzMy41Yy0uMSAuNS0uMSAxLjEtLjIgMS42Yy0uNiA1LjQgNS4yIDguNCAxMC4zIDYuN2M5LTMgMTguOC0zLjkgMjguNy0yLjRzMTkuMSA1LjMgMjYuOCAxMC44YzQuNCAzLjEgMTAuOCAyIDExLjgtMy4zem0xMTIuNiAyMi4yYzQuNCAzLjEgMTAuOCAyIDExLjgtMy4zYy4xLS41IC4yLTEuMSAuMy0xLjZjMy4yLTIxLjgtMTEuNi00Mi0zMy4xLTQ1LjNzLTQxLjUgMTEuOC00NC43IDMzLjVjLS4xIC41LS4xIDEuMS0uMiAxLjZjLS42IDUuNCA1LjIgOC40IDEwLjMgNi43YzktMyAxOC44LTMuOSAyOC43LTIuNHMxOS4xIDUuMyAyNi44IDEwLjh6bS0xMS41IDg1LjJjLTI4LjggMTIuOC02MS40IDE3LjgtOTQuOSAxMi44cy02My4yLTE5LjUtODctNDAuM2MtNi4zLTUuNS0xNi4yLTEuNy0xNS4yIDYuN2M1LjkgNDguNSA0MyA4OS4xIDkzIDk2LjdzOTcuMi0yMC4yIDExNi44LTY0LjljMy40LTcuNy01LTE0LjMtMTIuNi0xMC45ek0yNDAuNyA0NDYuOWMtNTguMiA4LjgtMTI0LjUtMzcuNS0xNjYuMS03My43Yy0yOC4zLTI0LjUtNDQuMy01OS44LTQ5LjgtOTcuMkwuNiAxMTEuOEMtLjggMTAyIDAgOTEuOSA1LjcgODMuOUMyMC41IDYzIDYzIDIyLjcgMTc1LjcgNS42czE2NC45IDguOSAxODUuMSAyNC41Yy45IC43IDEuNyAxLjQgMi40IDIuMWMtNTIuOCA0LjgtODUuMSAyMS0xMDMuNiAzNS4zYy0xNyAxMy4xLTIzIDMyLTI1IDQ1LjlMMjE1LjMgMjQ0LjdjLTIuNiAuMS01LjIgLjQtNy45IC44Yy0zNS4yIDUuMy02MS44IDMyLjctNjguMiA2Ni4zYy0xLjYgOC4yIDguMyAxMi4yIDE0LjggN2MxNS42LTEyLjQgMzQuMS0yMS4zIDU0LjctMjUuNGMtMyAzOC40IDQgNzguNyAyNS45IDExMy42YzYuOSAxMSAxNSAyMy4xIDI0LjIgMzUuNGMtNS45IDIuMS0xMS45IDMuNi0xOCA0LjV6TTE3NC4xIDE1N2MtMS01LjMtNy40LTYuNC0xMS44LTMuM2MtNy43IDUuNS0xNi44IDkuMy0yNi44IDEwLjhzLTE5LjggLjYtMjguNy0yLjRjLTUuMS0xLjctMTAuOSAxLjMtMTAuMyA2LjdjLjEgLjUgLjEgMS4xIC4yIDEuNmMzLjIgMjEuOCAyMy4yIDM2LjggNDQuNyAzMy41czM2LjMtMjMuNSAzMy4xLTQ1LjNjLS4xLS41LS4yLTEuMS0uMy0xLjZ6XCJdfSxZZz1CNSxfZz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJraXAtc2lnblwiLGljb246WzM4NCw1MTIsW10sXCJlMWM0XCIsXCJNMzQwLjggODguM2MxMy40LTExLjUgMTUtMzEuNyAzLjUtNDUuMXMtMzEuNy0xNS00NS4xLTMuNUwxMjggMTg2LjRWNjRjMC0xNy43LTE0LjMtMzItMzItMzJTNjQgNDYuMyA2NCA2NFYyMjRIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJINjRWNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJWMzI1LjZMMjk5LjIgNDcyLjNjMTMuNCAxMS41IDMzLjYgOS45IDQ1LjEtMy41czkuOS0zMy42LTMuNS00NS4xTDE4Mi41IDI4OEgzNTJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTgyLjVMMzQwLjggODguM3pcIl19LCRnPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhbmQtcG9pbnQtbGVmdFwiLGljb246WzUxMiw1MTIsW10sXCJmMGE1XCIsXCJNMzIgOTZDMTQuMyA5NiAwIDExMC4zIDAgMTI4czE0LjMgMzIgMzIgMzJsMjA4IDBWOTZMMzIgOTZ6TTE5MiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJoNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTkyem0tNjQtNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJoNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJIMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTYgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyaDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDIyNHptODgtOTZsLS42IDBjNS40IDkuNCA4LjYgMjAuMyA4LjYgMzJjMCAxMy4yLTQgMjUuNC0xMC44IDM1LjZjMjQuOSA4LjcgNDIuOCAzMi41IDQyLjggNjAuNGMwIDExLjctMy4xIDIyLjYtOC42IDMySDM1MmM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MFYyMjYuM2MwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFsLTExLjYtMTEuNkM0MjkuNSA3Ny41IDM5Ni45IDY0IDM2MyA2NGwtMjcgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjR2ODhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MFYxNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNnY1NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnpcIl19LFQ1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImhhbmRzaGFrZS1zaW1wbGVcIixpY29uOls2NDAsNTEyLFsxMjkzMDksXCJoYW5kc2hha2UtYWx0XCJdLFwiZjRjNlwiLFwiTTMyMy40IDg1LjJsLTk2LjggNzguNGMtMTYuMSAxMy0xOS4yIDM2LjQtNyA1My4xYzEyLjkgMTcuOCAzOCAyMS4zIDU1LjMgNy44bDk5LjMtNzcuMmM3LTUuNCAxNy00LjIgMjIuNSAyLjhzNC4yIDE3LTIuOCAyMi41bC0yMC45IDE2LjJMNTUwLjIgMzUySDU5MmMyNi41IDAgNDgtMjEuNSA0OC00OFYxNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhINTE2aC00LS43bC0zLjktMi41TDQzNC44IDc5Yy0xNS4zLTkuOC0zMy4yLTE1LTUxLjQtMTVjLTIxLjggMC00MyA3LjUtNjAgMjEuMnptMjIuOCAxMjQuNGwtNTEuNyA0MC4yQzI2MyAyNzQuNCAyMTcuMyAyNjggMTkzLjcgMjM1LjZjLTIyLjItMzAuNS0xNi42LTczLjEgMTIuNy05Ni44bDgzLjItNjcuM2MtMTEuNi00LjktMjQuMS03LjQtMzYuOC03LjRDMjM0IDY0IDIxNS43IDY5LjYgMjAwIDgwbC03MiA0OEg0OGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhWMzA0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4SDE1Ni4ybDkxLjQgODMuNGMxOS42IDE3LjkgNDkuOSAxNi41IDY3LjgtMy4xYzUuNS02LjEgOS4yLTEzLjIgMTEuMS0yMC42bDE3IDE1LjZjMTkuNSAxNy45IDQ5LjkgMTYuNiA2Ny44LTIuOWM0LjUtNC45IDcuOC0xMC42IDkuOS0xNi41YzE5LjQgMTMgNDUuOCAxMC4zIDYyLjEtNy41YzE3LjktMTkuNSAxNi42LTQ5LjktMi45LTY3LjhsLTEzNC4yLTEyM3pcIl19LGNTPVQ1LHk1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcImpldC1maWdodGVyXCIsaWNvbjpbNjQwLDUxMixbXCJmaWdodGVyLWpldFwiXSxcImYwZmJcIixcIk0xNjAgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRIMjk2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0SDI4MEwzODQgMTkySDUwMC40YzcuNyAwIDE1LjMgMS40IDIyLjUgNC4xTDYyNSAyMzQuNGM5IDMuNCAxNSAxMiAxNSAyMS42cy02IDE4LjItMTUgMjEuNkw1MjIuOSAzMTUuOWMtNy4yIDIuNy0xNC44IDQuMS0yMi41IDQuMUgzODRMMjgwIDQ2NGgxNmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEgxODRjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRoOFYzMjBIMTYwbC01NC42IDU0LjZjLTYgNi0xNC4xIDkuNC0yMi42IDkuNEg2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJWMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyVjE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMkg4Mi43YzguNSAwIDE2LjYgMy40IDIyLjYgOS40TDE2MCAxOTJoMzJWNDhoLThjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek04MCAyNDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZoNjRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZIODB6XCJdfSxhUz15NSxQNT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJzcXVhcmUtc2hhcmUtbm9kZXNcIixpY29uOls0NDgsNTEyLFtcInNoYXJlLWFsdC1zcXVhcmVcIl0sXCJmMWUxXCIsXCJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NlY0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRIMzg0YzM1LjMgMCA2NC0yOC43IDY0LTY0Vjk2YzAtMzUuMy0yOC43LTY0LTY0LTY0SDY0ek0zODQgMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0Yy0xNS40IDAtMjkuNS01LjQtNDAuNi0xNC41TDE5NC4xIDI1Nmw4NS4zIDQ2LjVjMTEtOS4xIDI1LjItMTQuNSA0MC42LTE0LjVjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yLjUgLjEtNC45IC40LTcuM0wxNzQuNSAzMDBjLTExLjcgMTIuMy0yOC4yIDIwLTQ2LjUgMjBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRjMTguMyAwIDM0LjggNy43IDQ2LjUgMjBsODEuOS00NC43Yy0uMy0yLjQtLjQtNC45LS40LTcuM2MwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0elwiXX0sc1M9UDUsZVM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiYmFyY29kZVwiLGljb246WzUxMiw1MTIsW10sXCJmMDJhXCIsXCJNMjQgMzJDMTAuNyAzMiAwIDQyLjcgMCA1NlY0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRINDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRIMjR6bTg4IDBjLTguOCAwLTE2IDcuMi0xNiAxNlY0NjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNlY0OGMwLTguOC03LjItMTYtMTYtMTZ6bTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgxODR6bTk2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0VjQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGgxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNFY1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNEgyODB6TTQ0OCA1NlY0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRoMTZjMTMuMyAwIDI0LTEwLjcgMjQtMjRWNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRINDcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptLTY0LThWNDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZWNDhjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ6XCJdfSxmUz17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJwbHVzLW1pbnVzXCIsaWNvbjpbMzg0LDUxMixbXSxcImU0M2NcIixcIk0yMjQgMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJWMTQ0SDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMySDE2MFYzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMlYyMDhIMzM2YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDIyNFYzMnpNMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJIMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnpcIl19LEY1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInZpZGVvXCIsaWNvbjpbNTc2LDUxMixbXCJ2aWRlby1jYW1lcmFcIl0sXCJmMDNkXCIsXCJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRIMzIwYzM1LjMgMCA2NCAyOC43IDY0IDY0VjM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEg2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRWMTI4ek01NTkuMSA5OS44YzEwLjQgNS42IDE2LjkgMTYuNCAxNi45IDI4LjJWMzg0YzAgMTEuOC02LjUgMjIuNi0xNi45IDI4LjJzLTIzIDUtMzIuOS0xLjZsLTk2LTY0TDQxNiAzMzcuMVYzMjAgMTkyIDE3NC45bDE0LjItOS41IDk2LTY0YzkuOC02LjUgMjIuNC03LjIgMzIuOS0xLjZ6XCJdfSxyUz1GNSxENT17cHJlZml4OlwiZmFzXCIsaWNvbk5hbWU6XCJncmFkdWF0aW9uLWNhcFwiLGljb246WzY0MCw1MTIsWzEyNzg5MSxcIm1vcnRhci1ib2FyZFwiXSxcImYxOWRcIixcIk0zMjAgMzJjLTguMSAwLTE2LjEgMS40LTIzLjcgNC4xTDE1LjggMTM3LjRDNi4zIDE0MC45IDAgMTQ5LjkgMCAxNjBzNi4zIDE5LjEgMTUuOCAyMi42bDU3LjkgMjAuOUM1Ny4zIDIyOS4zIDQ4IDI1OS44IDQ4IDI5MS45djI4LjFjMCAyOC40LTEwLjggNTcuNy0yMi4zIDgwLjhjLTYuNSAxMy0xMy45IDI1LjgtMjIuNSAzNy42QzAgNDQyLjctLjkgNDQ4LjMgLjkgNDUzLjRzNiA4LjkgMTEuMiAxMC4ybDY0IDE2YzQuMiAxLjEgOC43IC4zIDEyLjQtMnM2LjMtNi4xIDcuMS0xMC40YzguNi00Mi44IDQuMy04MS4yLTIuMS0xMDguN0M5MC4zIDM0NC4zIDg2IDMyOS44IDgwIDMxNi41VjI5MS45YzAtMzAuMiAxMC4yLTU4LjcgMjcuOS04MS41YzEyLjktMTUuNSAyOS42LTI4IDQ5LjItMzUuN2wxNTctNjEuN2M4LjItMy4yIDE3LjUgLjggMjAuNyA5cy0uOCAxNy41LTkgMjAuN2wtMTU3IDYxLjdjLTEyLjQgNC45LTIzLjMgMTIuNC0zMi4yIDIxLjZsMTU5LjYgNTcuNmM3LjYgMi43IDE1LjYgNC4xIDIzLjcgNC4xczE2LjEtMS40IDIzLjctNC4xTDYyNC4yIDE4Mi42YzkuNS0zLjQgMTUuOC0xMi41IDE1LjgtMjIuNnMtNi4zLTE5LjEtMTUuOC0yMi42TDM0My43IDM2LjFDMzM2LjEgMzMuNCAzMjguMSAzMiAzMjAgMzJ6TTEyOCA0MDhjMCAzNS4zIDg2IDcyIDE5MiA3MnMxOTItMzYuNyAxOTItNzJMNDk2LjcgMjYyLjYgMzU0LjUgMzE0Yy0xMS4xIDQtMjIuOCA2LTM0LjUgNnMtMjMuNS0yLTM0LjUtNkwxNDMuMyAyNjIuNiAxMjggNDA4elwiXX0sbFM9RDUsaVM9e3ByZWZpeDpcImZhc1wiLGljb25OYW1lOlwiaGFuZC1ob2xkaW5nLW1lZGljYWxcIixpY29uOls1NzYsNTEyLFtdLFwiZTA1Y1wiLFwiTTIyNCAyNFY4MEgxNjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0djQ4YzAgMTMuMyAxMC43IDI0IDI0IDI0aDU2djU2YzAgMTMuMyAxMC43IDI0IDI0IDI0aDQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0VjE3Nmg1NmMxMy4zIDAgMjQtMTAuNyAyNC0yNFYxMDRjMC0xMy4zLTEwLjctMjQtMjQtMjRIMzIwVjI0YzAtMTMuMy0xMC43LTI0LTI0LTI0SDI0OGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTU1OS43IDM5Mi4yYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MTZIMjcyYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2aDE2IDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMySDI4OCAyNzIgMTkzLjdjLTI5LjEgMC01Ny4zIDkuOS04MCAyOEw2OC44IDM4NEgzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ2NjRjMCAxNy43IDE0LjMgMzIgMzIgMzJIMTkyIDM1Mi41YzI5IDAgNTcuMy05LjMgODAuNy0yNi41bDEyNi42LTkzLjN6bS0zNjctOC4ybC45IDAgMCAwYy0uMyAwLS42IDAtLjkgMHpcIl19LG9TPXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInBlcnNvbi1jaXJjbGUtY2hlY2tcIixpY29uOls1NzYsNTEyLFtdLFwiZTUzZVwiLFwiTTIwOCA0OGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDh6TTE1MiAzNTJWNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyVjI1Ni45TDU5LjQgMzA0LjVjLTkuMSAxNS4xLTI4LjggMjAtNDMuOSAxMC45cy0yMC0yOC44LTEwLjktNDMuOWw1OC4zLTk3YzE3LjQtMjguOSA0OC42LTQ2LjYgODIuMy00Ni42aDI5LjdjMzMuNyAwIDY0LjkgMTcuNyA4Mi4zIDQ2LjZsNDQuOSA3NC43Yy0xNi4xIDE3LjYtMjguNiAzOC41LTM2LjYgNjEuNWMtMS45LTEuOC0zLjUtMy45LTQuOS02LjNMMjMyIDI1Ni45VjQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYzNTJIMTUyem00MjQgMTZjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRzLTE0NC02NC41LTE0NC0xNDRzNjQuNS0xNDQgMTQ0LTE0NHMxNDQgNjQuNSAxNDQgMTQ0em0tNzYuNy00My4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMEw0MTYgMzg1LjRsLTI4LjctMjguN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw3Mi03MmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpcIl19LFI1PXtwcmVmaXg6XCJmYXNcIixpY29uTmFtZTpcInR1cm4tdXBcIixpY29uOlszODQsNTEyLFsxMDU0OCxcImxldmVsLXVwLWFsdFwiXSxcImYzYmZcIixcIk0xNzguMyA1LjdMNDAuMyAxNDMuN0MzNSAxNDkgMzIgMTU2LjIgMzIgMTYzLjdDMzIgMTc5LjMgNDQuNyAxOTIgNjAuMyAxOTJIMTQ0VjQwMGMwIDguOC03LjIgMTYtMTYgMTZIMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMydjMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyaDk2YzYxLjkgMCAxMTItNTAuMSAxMTItMTEyVjE5Mmg4My43YzE1LjYgMCAyOC4zLTEyLjcgMjguMy0yOC4zYzAtNy41LTMtMTQuNy04LjMtMjBMMjA1LjcgNS43QzIwMiAyIDE5Ny4xIDAgMTkyIDBzLTEwIDItMTMuNyA1Ljd6XCJdfSxuUz1SNSx6Uz17ZmEwOlU1LGZhMTpxNSxmYTI6RzUsZmEzOlc1LGZhNDpFNSxmYTU6STUsZmE2Ok81LGZhNzpYNSxmYTg6UTUsZmE5Oks1LGZhRmlsbERyaXA6ajUsZmFBcnJvd3NUb0NpcmNsZTpKNSxmYUNpcmNsZUNoZXZyb25SaWdodDptMixmYUNoZXZyb25DaXJjbGVSaWdodDpaNSxmYUF0Olk1LGZhVHJhc2hDYW46djIsZmFUcmFzaEFsdDpfNSxmYVRleHRIZWlnaHQ6JDUsZmFVc2VyWG1hcms6TTIsZmFVc2VyVGltZXM6YzcsZmFTdGV0aG9zY29wZTphNyxmYU1lc3NhZ2U6dDIsZmFDb21tZW50QWx0OnM3LGZhSW5mbzplNyxmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyOmgyLGZhQ29tcHJlc3NBbHQ6ZjcsZmFFeHBsb3Npb246cjcsZmFGaWxlTGluZXM6ZCxmYUZpbGVBbHQ6bDcsZmFGaWxlVGV4dDppNyxmYVdhdmVTcXVhcmU6bzcsZmFSaW5nOm43LGZhQnVpbGRpbmdVbjpINyxmYURpY2VUaHJlZTp6NyxmYUNhbGVuZGFyRGF5czpDMixmYUNhbGVuZGFyQWx0OlY3LGZhQW5jaG9yQ2lyY2xlQ2hlY2s6bTcsZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQ6djcsZmFWb2xsZXliYWxsOkwyLGZhVm9sbGV5YmFsbEJhbGw6TTcsZmFBcnJvd3NVcFRvTGluZTp0NyxmYVNvcnREb3duOnAyLGZhU29ydERlc2M6aDcsZmFDaXJjbGVNaW51czpkMixmYU1pbnVzQ2lyY2xlOkM3LGZhRG9vck9wZW46TDcsZmFSaWdodEZyb21CcmFja2V0OnUyLGZhU2lnbk91dEFsdDpwNyxmYUF0b206ZDcsZmFTb2FwOnU3LGZhSWNvbnM6eDIsZmFIZWFydE11c2ljQ2FtZXJhQm9sdDp4NyxmYU1pY3JvcGhvbmVMaW5lc1NsYXNoOmcyLGZhTWljcm9waG9uZUFsdFNsYXNoOmc3LGZhQnJpZGdlQ2lyY2xlQ2hlY2s6UzcsZmFQdW1wTWVkaWNhbDpONyxmYUZpbmdlcnByaW50Onc3LGZhSGFuZFBvaW50UmlnaHQ6azcsZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbjpTMixmYVNlYXJjaExvY2F0aW9uOmI3LGZhRm9yd2FyZFN0ZXA6TjIsZmFTdGVwRm9yd2FyZDpBNyxmYUZhY2VTbWlsZUJlYW06dzIsZmFTbWlsZUJlYW06QjcsZmFGbGFnQ2hlY2tlcmVkOlQ3LGZhRm9vdGJhbGw6azIsZmFGb290YmFsbEJhbGw6eTcsZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbjpQNyxmYUNyb3A6RjcsZmFBbmdsZXNEb3duOmIyLGZhQW5nbGVEb3VibGVEb3duOkQ3LGZhVXNlcnNSZWN0YW5nbGU6UjcsZmFQZW9wbGVSb29mOlU3LGZhUGVvcGxlTGluZTpxNyxmYUJlZXJNdWdFbXB0eTpBMixmYUJlZXI6RzcsZmFEaWFncmFtUHJlZGVjZXNzb3I6VzcsZmFBcnJvd1VwTG9uZzpCMixmYUxvbmdBcnJvd1VwOkU3LGZhRmlyZUZsYW1lU2ltcGxlOlQyLGZhQnVybjpJNyxmYVBlcnNvbjp5MixmYU1hbGU6TzcsZmFMYXB0b3A6WDcsZmFGaWxlQ3N2OlE3LGZhTWVub3JhaDpLNyxmYVRydWNrUGxhbmU6ajcsZmFSZWNvcmRWaW55bDpKNyxmYUZhY2VHcmluU3RhcnM6UDIsZmFHcmluU3RhcnM6WjcsZmFCb25nOlk3LGZhU3BhZ2hldHRpTW9uc3RlckZseWluZzpGMixmYVBhc3RhZmFyaWFuaXNtOl83LGZhQXJyb3dEb3duVXBBY3Jvc3NMaW5lOiQ3LGZhU3Bvb246RDIsZmFVdGVuc2lsU3Bvb246YzksZmFKYXJXaGVhdDphOSxmYUVudmVsb3Blc0J1bGs6UjIsZmFNYWlsQnVsazpzOSxmYUZpbGVDaXJjbGVFeGNsYW1hdGlvbjplOSxmYUNpcmNsZUg6VTIsZmFIb3NwaXRhbFN5bWJvbDpmOSxmYVBhZ2VyOnI5LGZhQWRkcmVzc0Jvb2s6cTIsZmFDb250YWN0Qm9vazpsOSxmYVN0cmlrZXRocm91Z2g6aTksZmFLOm85LGZhTGFuZG1hcmtGbGFnOm45LGZhUGVuY2lsOkcyLGZhUGVuY2lsQWx0Okg5LGZhQmFja3dhcmQ6ejksZmFDYXJldFJpZ2h0OlY5LGZhQ29tbWVudHM6bTksZmFQYXN0ZTpXMixmYUZpbGVDbGlwYm9hcmQ6djksZmFDb2RlUHVsbFJlcXVlc3Q6TTksZmFDbGlwYm9hcmRMaXN0OnQ5LGZhVHJ1Y2tSYW1wQm94OkUyLGZhVHJ1Y2tMb2FkaW5nOmg5LGZhVXNlckNoZWNrOkM5LGZhVmlhbFZpcnVzOkw5LGZhU2hlZXRQbGFzdGljOnA5LGZhQmxvZzpkOSxmYVVzZXJOaW5qYTp1OSxmYVBlcnNvbkFycm93VXBGcm9tTGluZTp4OSxmYVNjcm9sbFRvcmFoOkkyLGZhVG9yYWg6ZzksZmFCcm9vbUJhbGw6dSxmYVF1aWRkaXRjaDpTOSxmYVF1aWRkaXRjaEJyb29tQmFsbDpOOSxmYVRvZ2dsZU9mZjp3OSxmYUJveEFyY2hpdmU6TzIsZmFBcmNoaXZlOms5LGZhUGVyc29uRHJvd25pbmc6YjksZmFBcnJvd0Rvd245MTp4LGZhU29ydE51bWVyaWNEZXNjOkE5LGZhU29ydE51bWVyaWNEb3duQWx0OkI5LGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQ6WDIsZmFHcmluVG9uZ3VlU3F1aW50OlQ5LGZhU3ByYXlDYW46eTksZmFUcnVja01vbnN0ZXI6UDksZmFXOkY5LGZhRWFydGhBZnJpY2E6UTIsZmFHbG9iZUFmcmljYTpEOSxmYVJhaW5ib3c6UjksZmFDaXJjbGVOb3RjaDpVOSxmYVRhYmxldFNjcmVlbkJ1dHRvbjpLMixmYVRhYmxldEFsdDpxOSxmYVBhdzpHOSxmYUNsb3VkOlc5LGZhVHJvd2VsQnJpY2tzOkU5LGZhRmFjZUZsdXNoZWQ6ajIsZmFGbHVzaGVkOkk5LGZhSG9zcGl0YWxVc2VyOk85LGZhVGVudEFycm93TGVmdFJpZ2h0Olg5LGZhR2F2ZWw6SjIsZmFMZWdhbDpROSxmYUJpbm9jdWxhcnM6SzksZmFNaWNyb3Bob25lU2xhc2g6ajksZmFCb3hUaXNzdWU6SjksZmFNb3RvcmN5Y2xlOlo5LGZhQmVsbENvbmNpZXJnZTpaMixmYUNvbmNpZXJnZUJlbGw6WTksZmFQZW5SdWxlcjpZMixmYVBlbmNpbFJ1bGVyOl85LGZhUGVvcGxlQXJyb3dzOl8yLGZhUGVvcGxlQXJyb3dzTGVmdFJpZ2h0OiQ5LGZhTWFyc0FuZFZlbnVzQnVyc3Q6Y2MsZmFTcXVhcmVDYXJldFJpZ2h0OiQyLGZhQ2FyZXRTcXVhcmVSaWdodDphYyxmYVNjaXNzb3JzOmMxLGZhQ3V0OnNjLGZhU3VuUGxhbnRXaWx0OmVjLGZhVG9pbGV0c1BvcnRhYmxlOmZjLGZhSG9ja2V5UHVjazpyYyxmYVRhYmxlOmxjLGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodDppYyxmYVRhY2hvZ3JhcGhEaWdpdGFsOmExLGZhRGlnaXRhbFRhY2hvZ3JhcGg6b2MsZmFVc2Vyc1NsYXNoOm5jLGZhQ2xvdmVyOkhjLGZhUmVwbHk6czEsZmFNYWlsUmVwbHk6emMsZmFTdGFyQW5kQ3Jlc2NlbnQ6VmMsZmFIb3VzZUZpcmU6bWMsZmFTcXVhcmVNaW51czplMSxmYU1pbnVzU3F1YXJlOnZjLGZhSGVsaWNvcHRlcjpNYyxmYUNvbXBhc3M6dGMsZmFTcXVhcmVDYXJldERvd246ZjEsZmFDYXJldFNxdWFyZURvd246aGMsZmFGaWxlQ2lyY2xlUXVlc3Rpb246Q2MsZmFMYXB0b3BDb2RlOkxjLGZhU3dhdGNoYm9vazpwYyxmYVByZXNjcmlwdGlvbkJvdHRsZTpkYyxmYUJhcnM6cjEsZmFOYXZpY29uOnVjLGZhUGVvcGxlR3JvdXA6eGMsZmFIb3VyZ2xhc3NFbmQ6bDEsZmFIb3VyZ2xhc3MzOmdjLGZhSGVhcnRDcmFjazppMSxmYUhlYXJ0QnJva2VuOlNjLGZhU3F1YXJlVXBSaWdodDpvMSxmYUV4dGVybmFsTGlua1NxdWFyZUFsdDpOYyxmYUZhY2VLaXNzQmVhbTpuMSxmYUtpc3NCZWFtOndjLGZhRmlsbTprYyxmYVJ1bGVySG9yaXpvbnRhbDpiYyxmYVBlb3BsZVJvYmJlcnk6QWMsZmFMaWdodGJ1bGI6QmMsZmFDYXJldExlZnQ6VGMsZmFDaXJjbGVFeGNsYW1hdGlvbjpIMSxmYUV4Y2xhbWF0aW9uQ2lyY2xlOnljLGZhU2Nob29sQ2lyY2xlWG1hcms6UGMsZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQ6ejEsZmFTaWduT3V0OkZjLGZhQ2lyY2xlQ2hldnJvbkRvd246VjEsZmFDaGV2cm9uQ2lyY2xlRG93bjpEYyxmYVVubG9ja0tleWhvbGU6bTEsZmFVbmxvY2tBbHQ6UmMsZmFDbG91ZFNob3dlcnNIZWF2eTpVYyxmYUhlYWRwaG9uZXNTaW1wbGU6djEsZmFIZWFkcGhvbmVzQWx0OnFjLGZhU2l0ZW1hcDpHYyxmYUNpcmNsZURvbGxhclRvU2xvdDpNMSxmYURvbmF0ZTpXYyxmYU1lbW9yeTpFYyxmYVJvYWRTcGlrZXM6SWMsZmFGaXJlQnVybmVyOk9jLGZhRmxhZzpYYyxmYUhhbnVraWFoOlFjLGZhRmVhdGhlcjpLYyxmYVZvbHVtZUxvdzp0MSxmYVZvbHVtZURvd246amMsZmFDb21tZW50U2xhc2g6SmMsZmFDbG91ZFN1blJhaW46WmMsZmFDb21wcmVzczpZYyxmYVdoZWF0QXduOmgxLGZhV2hlYXRBbHQ6X2MsZmFBbmtoOiRjLGZhSGFuZHNIb2xkaW5nQ2hpbGQ6Y2EsZmFBc3RlcmlzazphYSxmYVNxdWFyZUNoZWNrOkMxLGZhQ2hlY2tTcXVhcmU6c2EsZmFQZXNldGFTaWduOmVhLGZhSGVhZGluZzpMMSxmYUhlYWRlcjpmYSxmYUdob3N0OnJhLGZhTGlzdDpwMSxmYUxpc3RTcXVhcmVzOmxhLGZhU3F1YXJlUGhvbmVGbGlwOmQxLGZhUGhvbmVTcXVhcmVBbHQ6aWEsZmFDYXJ0UGx1czpvYSxmYUdhbWVwYWQ6bmEsZmFDaXJjbGVEb3Q6dTEsZmFEb3RDaXJjbGU6SGEsZmFGYWNlRGl6enk6eDEsZmFEaXp6eTp6YSxmYUVnZzpWYSxmYUhvdXNlTWVkaWNhbENpcmNsZVhtYXJrOm1hLGZhQ2FtcGdyb3VuZDp2YSxmYUZvbGRlclBsdXM6TWEsZmFGdXRib2w6ZyxmYUZ1dGJvbEJhbGw6dGEsZmFTb2NjZXJCYWxsOmhhLGZhUGFpbnRicnVzaDpnMSxmYVBhaW50QnJ1c2g6Q2EsZmFMb2NrOkxhLGZhR2FzUHVtcDpwYSxmYUhvdFR1YlBlcnNvbjpTMSxmYUhvdFR1YjpkYSxmYU1hcExvY2F0aW9uOk4xLGZhTWFwTWFya2VkOnVhLGZhSG91c2VGbG9vZFdhdGVyOnhhLGZhVHJlZTpnYSxmYUJyaWRnZUxvY2s6U2EsZmFTYWNrRG9sbGFyOk5hLGZhUGVuVG9TcXVhcmU6dzEsZmFFZGl0OndhLGZhQ2FyU2lkZTprYSxmYVNoYXJlTm9kZXM6azEsZmFTaGFyZUFsdDpiYSxmYUhlYXJ0Q2lyY2xlTWludXM6QWEsZmFIb3VyZ2xhc3NIYWxmOmIxLGZhSG91cmdsYXNzMjpCYSxmYU1pY3Jvc2NvcGU6VGEsZmFTaW5rOnlhLGZhQmFnU2hvcHBpbmc6QTEsZmFTaG9wcGluZ0JhZzpQYSxmYUFycm93RG93blpBOlMsZmFTb3J0QWxwaGFEZXNjOkZhLGZhU29ydEFscGhhRG93bkFsdDpEYSxmYU1pdHRlbjpSYSxmYVBlcnNvblJheXM6VWEsZmFVc2VyczpxYSxmYUV5ZVNsYXNoOkdhLGZhRmxhc2tWaWFsOldhLGZhSGFuZDpCMSxmYUhhbmRQYXBlcjpFYSxmYU9tOklhLGZhV29ybTpPYSxmYUhvdXNlQ2lyY2xlWG1hcms6WGEsZmFQbHVnOlFhLGZhQ2hldnJvblVwOkthLGZhSGFuZFNwb2NrOmphLGZhU3RvcHdhdGNoOkphLGZhRmFjZUtpc3M6VDEsZmFLaXNzOlphLGZhQnJpZGdlQ2lyY2xlWG1hcms6WWEsZmFGYWNlR3JpblRvbmd1ZTp5MSxmYUdyaW5Ub25ndWU6X2EsZmFDaGVzc0Jpc2hvcDokYSxmYUZhY2VHcmluV2luazpQMSxmYUdyaW5XaW5rOmNzLGZhRWFyRGVhZjpyLGZhRGVhZjphcyxmYURlYWZuZXNzOnNzLGZhSGFyZE9mSGVhcmluZzplcyxmYVJvYWRDaXJjbGVDaGVjazpmcyxmYURpY2VGaXZlOnJzLGZhU3F1YXJlUnNzOkYxLGZhUnNzU3F1YXJlOmxzLGZhTGFuZE1pbmVPbjppcyxmYUlDdXJzb3I6b3MsZmFTdGFtcDpucyxmYVN0YWlyczpIcyxmYUk6enMsZmFIcnl2bmlhU2lnbjpEMSxmYUhyeXZuaWE6VnMsZmFQaWxsczptcyxmYUZhY2VHcmluV2lkZTpSMSxmYUdyaW5BbHQ6dnMsZmFUb290aDpNcyxmYVY6dHMsZmFCaWN5Y2xlOmhzLGZhU3RhZmZTbmFrZTpsLGZhUm9kQXNjbGVwaXVzOkNzLGZhUm9kU25ha2U6THMsZmFTdGFmZkFlc2N1bGFwaXVzOnBzLGZhSGVhZFNpZGVDb3VnaFNsYXNoOmRzLGZhVHJ1Y2tNZWRpY2FsOlUxLGZhQW1idWxhbmNlOnVzLGZhV2hlYXRBd25DaXJjbGVFeGNsYW1hdGlvbjp4cyxmYVNub3dtYW46Z3MsZmFNb3J0YXJQZXN0bGU6U3MsZmFSb2FkQmFycmllcjpOcyxmYVNjaG9vbDp3cyxmYUlnbG9vOmtzLGZhSm9pbnQ6YnMsZmFBbmdsZVJpZ2h0OkFzLGZhSG9yc2U6QnMsZmFROlRzLGZhRzp5cyxmYU5vdGVzTWVkaWNhbDpQcyxmYVRlbXBlcmF0dXJlSGFsZjppLGZhVGVtcGVyYXR1cmUyOkZzLGZhVGhlcm1vbWV0ZXIyOkRzLGZhVGhlcm1vbWV0ZXJIYWxmOlJzLGZhRG9uZ1NpZ246VXMsZmFDYXBzdWxlczpxcyxmYVBvb1N0b3JtOnExLGZhUG9vQm9sdDpHcyxmYUZhY2VGcm93bk9wZW46RzEsZmFGcm93bk9wZW46V3MsZmFIYW5kUG9pbnRVcDpFcyxmYU1vbmV5QmlsbDpJcyxmYUJvb2ttYXJrOk9zLGZhQWxpZ25KdXN0aWZ5OlhzLGZhVW1icmVsbGFCZWFjaDpRcyxmYUhlbG1ldFVuOktzLGZhQnVsbHNleWU6anMsZmFCYWNvbjpKcyxmYUhhbmRQb2ludERvd246WnMsZmFBcnJvd1VwRnJvbUJyYWNrZXQ6WXMsZmFGb2xkZXI6VzEsZmFGb2xkZXJCbGFuazpfcyxmYUZpbGVXYXZlZm9ybTpFMSxmYUZpbGVNZWRpY2FsQWx0OiRzLGZhUmFkaWF0aW9uOmNlLGZhQ2hhcnRTaW1wbGU6YWUsZmFNYXJzU3Ryb2tlOnNlLGZhVmlhbDplZSxmYUdhdWdlOm8sZmFEYXNoYm9hcmQ6ZmUsZmFHYXVnZU1lZDpyZSxmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlOmxlLGZhV2FuZE1hZ2ljU3BhcmtsZXM6STEsZmFNYWdpY1dhbmRTcGFya2xlczppZSxmYUU6b2UsZmFQZW5DbGlwOk8xLGZhUGVuQWx0Om5lLGZhQnJpZGdlQ2lyY2xlRXhjbGFtYXRpb246SGUsZmFVc2VyOnplLGZhU2Nob29sQ2lyY2xlQ2hlY2s6VmUsZmFEdW1wc3RlcjptZSxmYVZhblNodXR0bGU6WDEsZmFTaHV0dGxlVmFuOnZlLGZhQnVpbGRpbmdVc2VyOk1lLGZhU3F1YXJlQ2FyZXRMZWZ0OlExLGZhQ2FyZXRTcXVhcmVMZWZ0OnRlLGZhSGlnaGxpZ2h0ZXI6aGUsZmFLZXk6Q2UsZmFCdWxsaG9ybjpMZSxmYUdsb2JlOnBlLGZhU3luYWdvZ3VlOmRlLGZhUGVyc29uSGFsZkRyZXNzOnVlLGZhUm9hZEJyaWRnZTp4ZSxmYUxvY2F0aW9uQXJyb3c6Z2UsZmFDOlNlLGZhVGFibGV0QnV0dG9uOk5lLGZhQnVpbGRpbmdMb2NrOndlLGZhUGl6emFTbGljZTprZSxmYU1vbmV5QmlsbFdhdmU6YmUsZmFDaGFydEFyZWE6SzEsZmFBcmVhQ2hhcnQ6QWUsZmFIb3VzZUZsYWc6QmUsZmFQZXJzb25DaXJjbGVNaW51czpUZSxmYUJhbjpqMSxmYUNhbmNlbDp5ZSxmYUNhbWVyYVJvdGF0ZTpQZSxmYVNwcmF5Q2FuU3BhcmtsZXM6SjEsZmFBaXJGcmVzaGVuZXI6RmUsZmFTdGFyOkRlLGZhUmVwZWF0OlJlLGZhQ3Jvc3M6VWUsZmFCb3g6cWUsZmFWZW51c01hcnM6R2UsZmFBcnJvd1BvaW50ZXI6WjEsZmFNb3VzZVBvaW50ZXI6V2UsZmFNYXhpbWl6ZTpZMSxmYUV4cGFuZEFycm93c0FsdDpFZSxmYUNoYXJnaW5nU3RhdGlvbjpJZSxmYVNoYXBlczpfMSxmYVRyaWFuZ2xlQ2lyY2xlU3F1YXJlOk9lLGZhU2h1ZmZsZTokMSxmYVJhbmRvbTpYZSxmYVBlcnNvblJ1bm5pbmc6YzQsZmFSdW5uaW5nOlFlLGZhTW9iaWxlUmV0cm86S2UsZmFHcmlwTGluZXNWZXJ0aWNhbDpqZSxmYVNwaWRlcjpKZSxmYUhhbmRzQm91bmQ6WmUsZmFGaWxlSW52b2ljZURvbGxhcjpZZSxmYVBsYW5lQ2lyY2xlRXhjbGFtYXRpb246X2UsZmFYUmF5OiRlLGZhU3BlbGxDaGVjazpjZixmYVNsYXNoOmFmLGZhQ29tcHV0ZXJNb3VzZTphNCxmYU1vdXNlOnNmLGZhQXJyb3dSaWdodFRvQnJhY2tldDpzNCxmYVNpZ25JbjplZixmYVNob3BTbGFzaDplNCxmYVN0b3JlQWx0U2xhc2g6ZmYsZmFTZXJ2ZXI6cmYsZmFWaXJ1c0NvdmlkU2xhc2g6bGYsZmFTaG9wTG9jazpvZixmYUhvdXJnbGFzc1N0YXJ0OmY0LGZhSG91cmdsYXNzMTpuZixmYUJsZW5kZXJQaG9uZTpIZixmYUJ1aWxkaW5nV2hlYXQ6emYsZmFQZXJzb25CcmVhc3RmZWVkaW5nOlZmLGZhUmlnaHRUb0JyYWNrZXQ6cjQsZmFTaWduSW5BbHQ6bWYsZmFWZW51czp2ZixmYVBhc3Nwb3J0Ok1mLGZhSGVhcnRQdWxzZTpsNCxmYUhlYXJ0YmVhdDp0ZixmYVBlb3BsZUNhcnJ5Qm94Omk0LGZhUGVvcGxlQ2Fycnk6aGYsZmFUZW1wZXJhdHVyZUhpZ2g6Q2YsZmFNaWNyb2NoaXA6TGYsZmFDcm93bjpwZixmYVdlaWdodEhhbmdpbmc6ZGYsZmFYbWFya3NMaW5lczp1ZixmYUZpbGVQcmVzY3JpcHRpb246eGYsZmFXZWlnaHRTY2FsZTpvNCxmYVdlaWdodDpnZixmYVVzZXJHcm91cDpuNCxmYVVzZXJGcmllbmRzOlNmLGZhQXJyb3dVcEFaOkg0LGZhU29ydEFscGhhVXA6TmYsZmFDaGVzc0tuaWdodDp3ZixmYUZhY2VMYXVnaFNxdWludDp6NCxmYUxhdWdoU3F1aW50OmtmLGZhV2hlZWxjaGFpcjpiZixmYUNpcmNsZUFycm93VXA6VjQsZmFBcnJvd0NpcmNsZVVwOkFmLGZhVG9nZ2xlT246QmYsZmFQZXJzb25XYWxraW5nOm00LGZhV2Fsa2luZzpUZixmYUw6eWYsZmFGaXJlOlBmLGZhQmVkUHVsc2U6djQsZmFQcm9jZWR1cmVzOkZmLGZhU2h1dHRsZVNwYWNlOk00LGZhU3BhY2VTaHV0dGxlOkRmLGZhRmFjZUxhdWdoOnQ0LGZhTGF1Z2g6UmYsZmFGb2xkZXJPcGVuOlVmLGZhSGVhcnRDaXJjbGVQbHVzOnFmLGZhQ29kZUZvcms6R2YsZmFDaXR5OldmLGZhTWljcm9waG9uZUxpbmVzOmg0LGZhTWljcm9waG9uZUFsdDpFZixmYVBlcHBlckhvdDpJZixmYVVubG9jazpPZixmYUNvbG9uU2lnbjpYZixmYUhlYWRzZXQ6UWYsZmFTdG9yZVNsYXNoOktmLGZhUm9hZENpcmNsZVhtYXJrOmpmLGZhVXNlck1pbnVzOkpmLGZhTWFyc1N0cm9rZVVwOkM0LGZhTWFyc1N0cm9rZVY6WmYsZmFDaGFtcGFnbmVHbGFzc2VzOkw0LGZhR2xhc3NDaGVlcnM6WWYsZmFDbGlwYm9hcmQ6X2YsZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uOiRmLGZhRmlsZUFycm93VXA6cDQsZmFGaWxlVXBsb2FkOmNyLGZhV2lmaTpOLGZhV2lmaTM6YXIsZmFXaWZpU3Ryb25nOnNyLGZhQmF0aDpkNCxmYUJhdGh0dWI6ZXIsZmFVbmRlcmxpbmU6ZnIsZmFVc2VyUGVuOnU0LGZhVXNlckVkaXQ6cnIsZmFTaWduYXR1cmU6bHIsZmFTdHJvb3B3YWZlbDppcixmYUJvbGQ6b3IsZmFBbmNob3JMb2NrOm5yLGZhQnVpbGRpbmdOZ286SHIsZmFNYW5hdFNpZ246enIsZmFOb3RFcXVhbDpWcixmYUJvcmRlclRvcExlZnQ6eDQsZmFCb3JkZXJTdHlsZTptcixmYU1hcExvY2F0aW9uRG90Omc0LGZhTWFwTWFya2VkQWx0OnZyLGZhSmVkaTpNcixmYVNxdWFyZVBvbGxWZXJ0aWNhbDpTNCxmYVBvbGw6dHIsZmFNdWdIb3Q6aHIsZmFDYXJCYXR0ZXJ5Ok40LGZhQmF0dGVyeUNhcjpDcixmYUdpZnQ6THIsZmFEaWNlVHdvOnByLGZhQ2hlc3NRdWVlbjpkcixmYUdsYXNzZXM6dXIsZmFDaGVzc0JvYXJkOnhyLGZhQnVpbGRpbmdDaXJjbGVDaGVjazpncixmYVBlcnNvbkNoYWxrYm9hcmQ6U3IsZmFNYXJzU3Ryb2tlUmlnaHQ6dzQsZmFNYXJzU3Ryb2tlSDpOcixmYUhhbmRCYWNrRmlzdDprNCxmYUhhbmRSb2NrOndyLGZhU3F1YXJlQ2FyZXRVcDpiNCxmYUNhcmV0U3F1YXJlVXA6a3IsZmFDbG91ZFNob3dlcnNXYXRlcjpicixmYUNoYXJ0QmFyOkE0LGZhQmFyQ2hhcnQ6QXIsZmFIYW5kc0J1YmJsZXM6QjQsZmFIYW5kc1dhc2g6QnIsZmFMZXNzVGhhbkVxdWFsOlRyLGZhVHJhaW46eXIsZmFFeWVMb3dWaXNpb246VDQsZmFMb3dWaXNpb246UHIsZmFDcm93OkZyLGZhU2FpbGJvYXQ6RHIsZmFXaW5kb3dSZXN0b3JlOlJyLGZhU3F1YXJlUGx1czp5NCxmYVBsdXNTcXVhcmU6VXIsZmFUb3JpaUdhdGU6cXIsZmFGcm9nOkdyLGZhQnVja2V0OldyLGZhSW1hZ2U6RXIsZmFNaWNyb3Bob25lOklyLGZhQ293Ok9yLGZhQ2FyZXRVcDpYcixmYVNjcmV3ZHJpdmVyOlFyLGZhRm9sZGVyQ2xvc2VkOktyLGZhSG91c2VUc3VuYW1pOmpyLGZhU3F1YXJlTmZpOkpyLGZhQXJyb3dVcEZyb21Hcm91bmRXYXRlcjpacixmYU1hcnRpbmlHbGFzczpQNCxmYUdsYXNzTWFydGluaUFsdDpZcixmYVJvdGF0ZUxlZnQ6bixmYVJvdGF0ZUJhY2s6X3IsZmFSb3RhdGVCYWNrd2FyZDokcixmYVVuZG9BbHQ6Y2wsZmFUYWJsZUNvbHVtbnM6RjQsZmFDb2x1bW5zOmFsLGZhTGVtb246c2wsZmFIZWFkU2lkZU1hc2s6ZWwsZmFIYW5kc2hha2U6ZmwsZmFHZW06cmwsZmFEb2xseTpENCxmYURvbGx5Qm94OmxsLGZhU21va2luZzppbCxmYU1pbmltaXplOlI0LGZhQ29tcHJlc3NBcnJvd3NBbHQ6b2wsZmFNb251bWVudDpubCxmYVNub3dwbG93OkhsLGZhQW5nbGVzUmlnaHQ6VTQsZmFBbmdsZURvdWJsZVJpZ2h0OnpsLGZhQ2FubmFiaXM6VmwsZmFDaXJjbGVQbGF5OnE0LGZhUGxheUNpcmNsZTptbCxmYVRhYmxldHM6dmwsZmFFdGhlcm5ldDpNbCxmYUV1cm9TaWduOncsZmFFdXI6dGwsZmFFdXJvOmhsLGZhQ2hhaXI6Q2wsZmFDaXJjbGVDaGVjazpHNCxmYUNoZWNrQ2lyY2xlOkxsLGZhQ2lyY2xlU3RvcDpXNCxmYVN0b3BDaXJjbGU6cGwsZmFDb21wYXNzRHJhZnRpbmc6RTQsZmFEcmFmdGluZ0NvbXBhc3M6ZGwsZmFQbGF0ZVdoZWF0OnVsLGZhSWNpY2xlczp4bCxmYVBlcnNvblNoZWx0ZXI6Z2wsZmFOZXV0ZXI6U2wsZmFJZEJhZGdlOk5sLGZhTWFya2VyOndsLGZhRmFjZUxhdWdoQmVhbTpJNCxmYUxhdWdoQmVhbTprbCxmYUhlbGljb3B0ZXJTeW1ib2w6YmwsZmFVbml2ZXJzYWxBY2Nlc3M6QWwsZmFDaXJjbGVDaGV2cm9uVXA6TzQsZmFDaGV2cm9uQ2lyY2xlVXA6QmwsZmFMYXJpU2lnbjpUbCxmYVZvbGNhbm86eWwsZmFQZXJzb25XYWxraW5nRGFzaGVkTGluZUFycm93UmlnaHQ6UGwsZmFTdGVybGluZ1NpZ246ayxmYUdicDpGbCxmYVBvdW5kU2lnbjpEbCxmYVZpcnVzZXM6UmwsZmFTcXVhcmVQZXJzb25Db25maW5lZDpVbCxmYVVzZXJUaWU6cWwsZmFBcnJvd0Rvd25Mb25nOlg0LGZhTG9uZ0Fycm93RG93bjpHbCxmYVRlbnRBcnJvd0Rvd25Ub0xpbmU6V2wsZmFDZXJ0aWZpY2F0ZTpFbCxmYVJlcGx5QWxsOlE0LGZhTWFpbFJlcGx5QWxsOklsLGZhU3VpdGNhc2U6T2wsZmFQZXJzb25Ta2F0aW5nOks0LGZhU2thdGluZzpYbCxmYUZpbHRlckNpcmNsZURvbGxhcjpqNCxmYUZ1bm5lbERvbGxhcjpRbCxmYUNhbWVyYVJldHJvOktsLGZhQ2lyY2xlQXJyb3dEb3duOko0LGZhQXJyb3dDaXJjbGVEb3duOmpsLGZhRmlsZUltcG9ydDpaNCxmYUFycm93UmlnaHRUb0ZpbGU6SmwsZmFTcXVhcmVBcnJvd1VwUmlnaHQ6WTQsZmFFeHRlcm5hbExpbmtTcXVhcmU6WmwsZmFCb3hPcGVuOllsLGZhU2Nyb2xsOl9sLGZhU3BhOiRsLGZhTG9jYXRpb25QaW5Mb2NrOmNpLGZhUGF1c2U6YWksZmFIaWxsQXZhbGFuY2hlOnNpLGZhVGVtcGVyYXR1cmVFbXB0eTpILGZhVGVtcGVyYXR1cmUwOmVpLGZhVGhlcm1vbWV0ZXIwOmZpLGZhVGhlcm1vbWV0ZXJFbXB0eTpyaSxmYUJvbWI6bGksZmFSZWdpc3RlcmVkOmlpLGZhQWRkcmVzc0NhcmQ6YixmYUNvbnRhY3RDYXJkOm9pLGZhVmNhcmQ6bmksZmFTY2FsZVVuYmFsYW5jZWRGbGlwOl80LGZhQmFsYW5jZVNjYWxlUmlnaHQ6SGksZmFTdWJzY3JpcHQ6emksZmFEaWFtb25kVHVyblJpZ2h0OiQ0LGZhRGlyZWN0aW9uczpWaSxmYUJ1cnN0Om1pLGZhSG91c2VMYXB0b3A6YzMsZmFMYXB0b3BIb3VzZTp2aSxmYUZhY2VUaXJlZDphMyxmYVRpcmVkOk1pLGZhTW9uZXlCaWxsczp0aSxmYVNtb2c6aGksZmFDcnV0Y2g6Q2ksZmFGb250QXdlc29tZTpBLGZhRm9udEF3ZXNvbWVGbGFnOkxpLGZhRm9udEF3ZXNvbWVMb2dvRnVsbDpwaSxmYUNsb3VkQXJyb3dVcDpCLGZhQ2xvdWRVcGxvYWQ6ZGksZmFDbG91ZFVwbG9hZEFsdDp1aSxmYVBhbGV0dGU6eGksZmFBcnJvd3NUdXJuUmlnaHQ6Z2ksZmFWZXN0OlNpLGZhRmVycnk6TmksZmFBcnJvd3NEb3duVG9QZW9wbGU6d2ksZmFTZWVkbGluZzpzMyxmYVNwcm91dDpraSxmYUxlZnRSaWdodDplMyxmYUFycm93c0FsdEg6YmksZmFCb3hlc1BhY2tpbmc6QWksZmFDaXJjbGVBcnJvd0xlZnQ6ZjMsZmFBcnJvd0NpcmNsZUxlZnQ6QmksZmFHcm91cEFycm93c1JvdGF0ZTpUaSxmYUJvd2xGb29kOnlpLGZhQ2FuZHlDYW5lOlBpLGZhQXJyb3dEb3duV2lkZVNob3J0OlQsZmFTb3J0QW1vdW50QXNjOkZpLGZhU29ydEFtb3VudERvd246RGksZmFDbG91ZEJvbHQ6cjMsZmFUaHVuZGVyc3Rvcm06UmksZmFUZXh0U2xhc2g6bDMsZmFSZW1vdmVGb3JtYXQ6VWksZmFGYWNlU21pbGVXaW5rOmkzLGZhU21pbGVXaW5rOnFpLGZhRmlsZVdvcmQ6R2ksZmFGaWxlUG93ZXJwb2ludDpXaSxmYUFycm93c0xlZnRSaWdodDpvMyxmYUFycm93c0g6RWksZmFIb3VzZUxvY2s6SWksZmFDbG91ZEFycm93RG93bjp5LGZhQ2xvdWREb3dubG9hZDpPaSxmYUNsb3VkRG93bmxvYWRBbHQ6WGksZmFDaGlsZHJlbjpRaSxmYUNoYWxrYm9hcmQ6bjMsZmFCbGFja2JvYXJkOktpLGZhVXNlckxhcmdlU2xhc2g6SDMsZmFVc2VyQWx0U2xhc2g6amksZmFFbnZlbG9wZU9wZW46SmksZmFIYW5kc2hha2VTaW1wbGVTbGFzaDp6MyxmYUhhbmRzaGFrZUFsdFNsYXNoOlppLGZhTWF0dHJlc3NQaWxsb3c6WWksZmFHdWFyYW5pU2lnbjpfaSxmYUFycm93c1JvdGF0ZTpQLGZhUmVmcmVzaDokaSxmYVN5bmM6Y28sZmFGaXJlRXh0aW5ndWlzaGVyOmFvLGZhQ3J1emVpcm9TaWduOnNvLGZhR3JlYXRlclRoYW5FcXVhbDplbyxmYVNoaWVsZEhhbHZlZDpWMyxmYVNoaWVsZEFsdDpmbyxmYUJvb2tBdGxhczptMyxmYUF0bGFzOnJvLGZhVmlydXM6bG8sZmFFbnZlbG9wZUNpcmNsZUNoZWNrOmlvLGZhTGF5ZXJHcm91cDpvbyxmYUFycm93c1RvRG90Om5vLGZhQXJjaHdheTpIbyxmYUhlYXJ0Q2lyY2xlQ2hlY2s6em8sZmFIb3VzZUNoaW1uZXlDcmFjazp2MyxmYUhvdXNlRGFtYWdlOlZvLGZhRmlsZVppcHBlcjpNMyxmYUZpbGVBcmNoaXZlOm1vLGZhU3F1YXJlOnZvLGZhTWFydGluaUdsYXNzRW1wdHk6dDMsZmFHbGFzc01hcnRpbmk6TW8sZmFDb3VjaDp0byxmYUNlZGlTaWduOmhvLGZhSXRhbGljOkNvLGZhQ2h1cmNoOkxvLGZhQ29tbWVudHNEb2xsYXI6cG8sZmFEZW1vY3JhdDp1byxmYVo6eG8sZmFQZXJzb25Ta2lpbmc6aDMsZmFTa2lpbmc6Z28sZmFSb2FkTG9jazpTbyxmYUE6Tm8sZmFUZW1wZXJhdHVyZUFycm93RG93bjpDMyxmYVRlbXBlcmF0dXJlRG93bjp3byxmYUZlYXRoZXJQb2ludGVkOkwzLGZhRmVhdGhlckFsdDprbyxmYVA6Ym8sZmFTbm93Zmxha2U6QW8sZmFOZXdzcGFwZXI6Qm8sZmFSZWN0YW5nbGVBZDpwMyxmYUFkOlRvLGZhQ2lyY2xlQXJyb3dSaWdodDpkMyxmYUFycm93Q2lyY2xlUmlnaHQ6eW8sZmFGaWx0ZXJDaXJjbGVYbWFyazpQbyxmYUxvY3VzdDpGbyxmYVNvcnQ6dTMsZmFVbnNvcnRlZDpEbyxmYUxpc3RPbDpGLGZhTGlzdDEyOlJvLGZhTGlzdE51bWVyaWM6VW8sZmFQZXJzb25EcmVzc0J1cnN0OnFvLGZhTW9uZXlDaGVja0RvbGxhcjp4MyxmYU1vbmV5Q2hlY2tBbHQ6R28sZmFWZWN0b3JTcXVhcmU6V28sZmFCcmVhZFNsaWNlOkVvLGZhTGFuZ3VhZ2U6SW8sZmFGYWNlS2lzc1dpbmtIZWFydDpnMyxmYUtpc3NXaW5rSGVhcnQ6T28sZmFGaWx0ZXI6WG8sZmFRdWVzdGlvbjpRbyxmYUZpbGVTaWduYXR1cmU6S28sZmFVcERvd25MZWZ0UmlnaHQ6UzMsZmFBcnJvd3NBbHQ6am8sZmFIb3VzZUNoaW1uZXlVc2VyOkpvLGZhSGFuZEhvbGRpbmdIZWFydDpabyxmYVB1enpsZVBpZWNlOllvLGZhTW9uZXlDaGVjazpfbyxmYVN0YXJIYWxmU3Ryb2tlOk4zLGZhU3RhckhhbGZBbHQ6JG8sZmFDb2RlOmNuLGZhV2hpc2tleUdsYXNzOnczLGZhR2xhc3NXaGlza2V5OmFuLGZhQnVpbGRpbmdDaXJjbGVFeGNsYW1hdGlvbjpzbixmYU1hZ25pZnlpbmdHbGFzc0NoYXJ0OmVuLGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTprMyxmYUV4dGVybmFsTGluazpmbixmYUN1YmVzU3RhY2tlZDpybixmYVdvblNpZ246RCxmYUtydzpsbixmYVdvbjpvbixmYVZpcnVzQ292aWQ6bm4sZmFBdXN0cmFsU2lnbjpIbixmYUY6em4sZmFMZWFmOlZuLGZhUm9hZDptbixmYVRheGk6YjMsZmFDYWI6dm4sZmFQZXJzb25DaXJjbGVQbHVzOk1uLGZhQ2hhcnRQaWU6QTMsZmFQaWVDaGFydDp0bixmYUJvbHRMaWdodG5pbmc6aG4sZmFTYWNrWG1hcms6Q24sZmFGaWxlRXhjZWw6TG4sZmFGaWxlQ29udHJhY3Q6cG4sZmFGaXNoRmluczpkbixmYUJ1aWxkaW5nRmxhZzp1bixmYUZhY2VHcmluQmVhbTpCMyxmYUdyaW5CZWFtOnhuLGZhT2JqZWN0VW5ncm91cDpnbixmYVBvb3A6U24sZmFMb2NhdGlvblBpbjpUMyxmYU1hcE1hcmtlcjpObixmYUthYWJhOnduLGZhVG9pbGV0UGFwZXI6a24sZmFIZWxtZXRTYWZldHk6UixmYUhhcmRIYXQ6Ym4sZmFIYXRIYXJkOkFuLGZhRWplY3Q6Qm4sZmFDaXJjbGVSaWdodDp5MyxmYUFycm93QWx0Q2lyY2xlUmlnaHQ6VG4sZmFQbGFuZUNpcmNsZUNoZWNrOnluLGZhRmFjZVJvbGxpbmdFeWVzOlAzLGZhTWVoUm9sbGluZ0V5ZXM6UG4sZmFPYmplY3RHcm91cDpGbixmYUNoYXJ0TGluZTpGMyxmYUxpbmVDaGFydDpEbixmYU1hc2tWZW50aWxhdG9yOlJuLGZhQXJyb3dSaWdodDpVbixmYVNpZ25zUG9zdDpEMyxmYU1hcFNpZ25zOnFuLGZhQ2FzaFJlZ2lzdGVyOkduLGZhUGVyc29uQ2lyY2xlUXVlc3Rpb246V24sZmFIOkVuLGZhVGFycDpJbixmYVNjcmV3ZHJpdmVyV3JlbmNoOlIzLGZhVG9vbHM6T24sZmFBcnJvd3NUb0V5ZTpYbixmYVBsdWdDaXJjbGVCb2x0OlFuLGZhSGVhcnQ6S24sZmFNYXJzQW5kVmVudXM6am4sZmFIb3VzZVVzZXI6VTMsZmFIb21lVXNlcjpKbixmYUR1bXBzdGVyRmlyZTpabixmYUhvdXNlQ3JhY2s6WW4sZmFNYXJ0aW5pR2xhc3NDaXRydXM6cTMsZmFDb2NrdGFpbDpfbixmYUZhY2VTdXJwcmlzZTpHMyxmYVN1cnByaXNlOiRuLGZhQm90dGxlV2F0ZXI6Y0gsZmFDaXJjbGVQYXVzZTpXMyxmYVBhdXNlQ2lyY2xlOmFILGZhVG9pbGV0UGFwZXJTbGFzaDpzSCxmYUFwcGxlV2hvbGU6RTMsZmFBcHBsZUFsdDplSCxmYUtpdGNoZW5TZXQ6ZkgsZmFSOnJILGZhVGVtcGVyYXR1cmVRdWFydGVyOnosZmFUZW1wZXJhdHVyZTE6bEgsZmFUaGVybW9tZXRlcjE6aUgsZmFUaGVybW9tZXRlclF1YXJ0ZXI6b0gsZmFDdWJlOm5ILGZhQml0Y29pblNpZ246SEgsZmFTaGllbGREb2c6ekgsZmFTb2xhclBhbmVsOlZILGZhTG9ja09wZW46bUgsZmFFbGV2YXRvcjp2SCxmYU1vbmV5QmlsbFRyYW5zZmVyOk1ILGZhTW9uZXlCaWxsVHJlbmRVcDp0SCxmYUhvdXNlRmxvb2RXYXRlckNpcmNsZUFycm93UmlnaHQ6aEgsZmFTcXVhcmVQb2xsSG9yaXpvbnRhbDpJMyxmYVBvbGxIOkNILGZhQ2lyY2xlOkxILGZhQmFja3dhcmRGYXN0Ok8zLGZhRmFzdEJhY2t3YXJkOnBILGZhUmVjeWNsZTpkSCxmYVVzZXJBc3Ryb25hdXQ6dUgsZmFQbGFuZVNsYXNoOnhILGZhVHJhZGVtYXJrOmdILGZhQmFza2V0YmFsbDpYMyxmYUJhc2tldGJhbGxCYWxsOlNILGZhU2F0ZWxsaXRlRGlzaDpOSCxmYUNpcmNsZVVwOlEzLGZhQXJyb3dBbHRDaXJjbGVVcDp3SCxmYU1vYmlsZVNjcmVlbkJ1dHRvbjpLMyxmYU1vYmlsZUFsdDprSCxmYVZvbHVtZUhpZ2g6ajMsZmFWb2x1bWVVcDpiSCxmYVVzZXJzUmF5czpBSCxmYVdhbGxldDpCSCxmYUNsaXBib2FyZENoZWNrOlRILGZhRmlsZUF1ZGlvOnlILGZhQnVyZ2VyOkozLGZhSGFtYnVyZ2VyOlBILGZhV3JlbmNoOkZILGZhQnVnczpESCxmYVJ1cGVlU2lnbjpaMyxmYVJ1cGVlOlJILGZhRmlsZUltYWdlOlVILGZhQ2lyY2xlUXVlc3Rpb246WTMsZmFRdWVzdGlvbkNpcmNsZTpxSCxmYVBsYW5lRGVwYXJ0dXJlOkdILGZhSGFuZHNoYWtlU2xhc2g6V0gsZmFCb29rQm9va21hcms6RUgsZmFDb2RlQnJhbmNoOklILGZhSGF0Q293Ym95Ok9ILGZhQnJpZGdlOlhILGZhUGhvbmVGbGlwOl8zLGZhUGhvbmVBbHQ6UUgsZmFUcnVja0Zyb250OktILGZhQ2F0OmpILGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb246SkgsZmFUcnVja0ZpZWxkOlpILGZhUm91dGU6WUgsZmFDbGlwYm9hcmRRdWVzdGlvbjpfSCxmYVBhbm9yYW1hOiRILGZhQ29tbWVudE1lZGljYWw6Y3osZmFUZWV0aE9wZW46YXosZmFGaWxlQ2lyY2xlTWludXM6c3osZmFUYWdzOmV6LGZhV2luZUdsYXNzOmZ6LGZhRm9yd2FyZEZhc3Q6JDMsZmFGYXN0Rm9yd2FyZDpyeixmYUZhY2VNZWhCbGFuazpjNixmYU1laEJsYW5rOmx6LGZhU3F1YXJlUGFya2luZzphNixmYVBhcmtpbmc6aXosZmFIb3VzZVNpZ25hbDpveixmYUJhcnNQcm9ncmVzczpzNixmYVRhc2tzQWx0Om56LGZhRmF1Y2V0RHJpcDpIeixmYUNhcnRGbGF0YmVkOmU2LGZhRG9sbHlGbGF0YmVkOnp6LGZhQmFuU21va2luZzpmNixmYVNtb2tpbmdCYW46VnosZmFUZXJtaW5hbDpteixmYU1vYmlsZUJ1dHRvbjp2eixmYUhvdXNlTWVkaWNhbEZsYWc6TXosZmFCYXNrZXRTaG9wcGluZzpyNixmYVNob3BwaW5nQmFza2V0OnR6LGZhVGFwZTpoeixmYUJ1c1NpbXBsZTpsNixmYUJ1c0FsdDpDeixmYUV5ZTpMeixmYUZhY2VTYWRDcnk6aTYsZmFTYWRDcnk6cHosZmFBdWRpb0Rlc2NyaXB0aW9uOmR6LGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbjp1eixmYUZpbGVTaGllbGQ6eHosZmFVc2VyU2xhc2g6Z3osZmFQZW46U3osZmFUb3dlck9ic2VydmF0aW9uOk56LGZhRmlsZUNvZGU6d3osZmFTaWduYWw6VSxmYVNpZ25hbDU6a3osZmFTaWduYWxQZXJmZWN0OmJ6LGZhQnVzOkF6LGZhSGVhcnRDaXJjbGVYbWFyazpCeixmYUhvdXNlQ2hpbW5leTpvNixmYUhvbWVMZzpUeixmYVdpbmRvd01heGltaXplOnl6LGZhRmFjZUZyb3duOm42LGZhRnJvd246UHosZmFQcmVzY3JpcHRpb246RnosZmFTaG9wOkg2LGZhU3RvcmVBbHQ6RHosZmFGbG9wcHlEaXNrOno2LGZhU2F2ZTpSeixmYVZpaGFyYTpVeixmYVNjYWxlVW5iYWxhbmNlZDpWNixmYUJhbGFuY2VTY2FsZUxlZnQ6cXosZmFTb3J0VXA6bTYsZmFTb3J0QXNjOkd6LGZhQ29tbWVudERvdHM6djYsZmFDb21tZW50aW5nOld6LGZhUGxhbnRXaWx0OkV6LGZhRGlhbW9uZDpJeixmYUZhY2VHcmluU3F1aW50Ok02LGZhR3JpblNxdWludDpPeixmYUhhbmRIb2xkaW5nRG9sbGFyOnQ2LGZhSGFuZEhvbGRpbmdVc2Q6WHosZmFCYWN0ZXJpdW06UXosZmFIYW5kUG9pbnRlcjpLeixmYURydW1TdGVlbHBhbjpqeixmYUhhbmRTY2lzc29yczpKeixmYUhhbmRzUHJheWluZzpoNixmYVByYXlpbmdIYW5kczpaeixmYUFycm93Um90YXRlUmlnaHQ6VixmYUFycm93UmlnaHRSb3RhdGU6WXosZmFBcnJvd1JvdGF0ZUZvcndhcmQ6X3osZmFSZWRvOiR6LGZhQmlvaGF6YXJkOmNWLGZhTG9jYXRpb25Dcm9zc2hhaXJzOkM2LGZhTG9jYXRpb246YVYsZmFNYXJzRG91YmxlOnNWLGZhQ2hpbGREcmVzczplVixmYVVzZXJzQmV0d2VlbkxpbmVzOmZWLGZhTHVuZ3NWaXJ1czpyVixmYUZhY2VHcmluVGVhcnM6TDYsZmFHcmluVGVhcnM6bFYsZmFQaG9uZTppVixmYUNhbGVuZGFyWG1hcms6cDYsZmFDYWxlbmRhclRpbWVzOm9WLGZhQ2hpbGRSZWFjaGluZzpuVixmYUhlYWRTaWRlVmlydXM6SFYsZmFVc2VyR2VhcjpkNixmYVVzZXJDb2c6elYsZmFBcnJvd1VwMTk6dTYsZmFTb3J0TnVtZXJpY1VwOlZWLGZhRG9vckNsb3NlZDptVixmYVNoaWVsZFZpcnVzOnZWLGZhRGljZVNpeDpNVixmYU1vc3F1aXRvTmV0OnRWLGZhQnJpZGdlV2F0ZXI6aFYsZmFQZXJzb25Cb290aDpDVixmYVRleHRXaWR0aDpMVixmYUhhdFdpemFyZDpwVixmYVBlbkZhbmN5OmRWLGZhUGVyc29uRGlnZ2luZzp4NixmYURpZ2dpbmc6dVYsZmFUcmFzaDp4VixmYUdhdWdlU2ltcGxlOnEsZmFHYXVnZVNpbXBsZU1lZDpnVixmYVRhY2hvbWV0ZXJBdmVyYWdlOlNWLGZhQm9va01lZGljYWw6TlYsZmFQb286d1YsZmFRdW90ZVJpZ2h0Omc2LGZhUXVvdGVSaWdodEFsdDprVixmYVNoaXJ0OkcsZmFUU2hpcnQ6YlYsZmFUc2hpcnQ6QVYsZmFDdWJlczpCVixmYURpdmlkZTpUVixmYVRlbmdlU2lnbjpTNixmYVRlbmdlOnlWLGZhSGVhZHBob25lczpQVixmYUhhbmRzSG9sZGluZzpGVixmYUhhbmRzQ2xhcHBpbmc6RFYsZmFSZXB1YmxpY2FuOlJWLGZhQXJyb3dMZWZ0OlVWLGZhUGVyc29uQ2lyY2xlWG1hcms6cVYsZmFSdWxlcjpHVixmYUFsaWduTGVmdDpXVixmYURpY2VENjpFVixmYVJlc3Ryb29tOklWLGZhSjpPVixmYVVzZXJzVmlld2ZpbmRlcjpYVixmYUZpbGVWaWRlbzpRVixmYVVwUmlnaHRGcm9tU3F1YXJlOk42LGZhRXh0ZXJuYWxMaW5rQWx0OktWLGZhVGFibGVDZWxsczp3NixmYVRoOmpWLGZhRmlsZVBkZjpKVixmYUJvb2tCaWJsZTprNixmYUJpYmxlOlpWLGZhTzpZVixmYVN1aXRjYXNlTWVkaWNhbDpiNixmYU1lZGtpdDpfVixmYVVzZXJTZWNyZXQ6JFYsZmFPdHRlcjpjbSxmYVBlcnNvbkRyZXNzOkE2LGZhRmVtYWxlOmFtLGZhQ29tbWVudERvbGxhcjpzbSxmYUJ1c2luZXNzVGltZTpCNixmYUJyaWVmY2FzZUNsb2NrOmVtLGZhVGFibGVDZWxsc0xhcmdlOlQ2LGZhVGhMYXJnZTpmbSxmYUJvb2tUYW5ha2g6eTYsZmFUYW5ha2g6cm0sZmFQaG9uZVZvbHVtZTpQNixmYVZvbHVtZUNvbnRyb2xQaG9uZTpsbSxmYUhhdENvd2JveVNpZGU6aW0sZmFDbGlwYm9hcmRVc2VyOm9tLGZhQ2hpbGQ6bm0sZmFMaXJhU2lnbjpIbSxmYVNhdGVsbGl0ZTp6bSxmYVBsYW5lTG9jazpWbSxmYVRhZzptbSxmYUNvbW1lbnQ6dm0sZmFDYWtlQ2FuZGxlczpXLGZhQmlydGhkYXlDYWtlOk1tLGZhQ2FrZTp0bSxmYUVudmVsb3BlOmhtLGZhQW5nbGVzVXA6RjYsZmFBbmdsZURvdWJsZVVwOkNtLGZhUGFwZXJjbGlwOkxtLGZhQXJyb3dSaWdodFRvQ2l0eTpwbSxmYVJpYmJvbjpkbSxmYUx1bmdzOnVtLGZhQXJyb3dVcDkxOkQ2LGZhU29ydE51bWVyaWNVcEFsdDp4bSxmYUxpdGVjb2luU2lnbjpnbSxmYUJvcmRlck5vbmU6U20sZmFDaXJjbGVOb2RlczpObSxmYVBhcmFjaHV0ZUJveDp3bSxmYUluZGVudDprbSxmYVRydWNrRmllbGRVbjpibSxmYUhvdXJnbGFzczpSNixmYUhvdXJnbGFzc0VtcHR5OkFtLGZhTW91bnRhaW46Qm0sZmFVc2VyRG9jdG9yOlU2LGZhVXNlck1kOlRtLGZhQ2lyY2xlSW5mbzpxNixmYUluZm9DaXJjbGU6eW0sZmFDbG91ZE1lYXRiYWxsOlBtLGZhQ2FtZXJhOkc2LGZhQ2FtZXJhQWx0OkZtLGZhU3F1YXJlVmlydXM6RG0sZmFNZXRlb3I6Um0sZmFDYXJPbjpVbSxmYVNsZWlnaDpxbSxmYUFycm93RG93bjE5OkUsZmFTb3J0TnVtZXJpY0FzYzpHbSxmYVNvcnROdW1lcmljRG93bjpXbSxmYUhhbmRIb2xkaW5nRHJvcGxldDpXNixmYUhhbmRIb2xkaW5nV2F0ZXI6RW0sZmFXYXRlcjpJbSxmYUNhbGVuZGFyQ2hlY2s6T20sZmFCcmFpbGxlOlhtLGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbDpFNixmYVByZXNjcmlwdGlvbkJvdHRsZUFsdDpRbSxmYUxhbmRtYXJrOkttLGZhVHJ1Y2s6am0sZmFDcm9zc2hhaXJzOkptLGZhUGVyc29uQ2FuZTpabSxmYVRlbnQ6WW0sZmFWZXN0UGF0Y2hlczpfbSxmYUNoZWNrRG91YmxlOiRtLGZhQXJyb3dEb3duQVo6SSxmYVNvcnRBbHBoYUFzYzpjdixmYVNvcnRBbHBoYURvd246YXYsZmFNb25leUJpbGxXaGVhdDpzdixmYUNvb2tpZTpldixmYUFycm93Um90YXRlTGVmdDpjLGZhQXJyb3dMZWZ0Um90YXRlOmZ2LGZhQXJyb3dSb3RhdGVCYWNrOnJ2LGZhQXJyb3dSb3RhdGVCYWNrd2FyZDpsdixmYVVuZG86aXYsZmFIYXJkRHJpdmU6STYsZmFIZGQ6b3YsZmFGYWNlR3JpblNxdWludFRlYXJzOk82LGZhR3JpblNxdWludFRlYXJzOm52LGZhRHVtYmJlbGw6SHYsZmFSZWN0YW5nbGVMaXN0Olg2LGZhTGlzdEFsdDp6dixmYVRhcnBEcm9wbGV0OlZ2LGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2s6bXYsZmFQZXJzb25Ta2lpbmdOb3JkaWM6UTYsZmFTa2lpbmdOb3JkaWM6dnYsZmFDYWxlbmRhclBsdXM6TXYsZmFQbGFuZUFycml2YWw6dHYsZmFDaXJjbGVMZWZ0Oks2LGZhQXJyb3dBbHRDaXJjbGVMZWZ0Omh2LGZhVHJhaW5TdWJ3YXk6ajYsZmFTdWJ3YXk6Q3YsZmFDaGFydEdhbnR0Okx2LGZhSW5kaWFuUnVwZWVTaWduOk8sZmFJbmRpYW5SdXBlZTpwdixmYUlucjpkdixmYUNyb3BTaW1wbGU6SjYsZmFDcm9wQWx0OnV2LGZhTW9uZXlCaWxsMTpaNixmYU1vbmV5QmlsbEFsdDp4dixmYUxlZnRMb25nOlk2LGZhTG9uZ0Fycm93QWx0TGVmdDpndixmYURuYTpTdixmYVZpcnVzU2xhc2g6TnYsZmFNaW51czpfNixmYVN1YnRyYWN0Ond2LGZhQ2hpbGRSaWZsZTprdixmYUNoZXNzOmJ2LGZhQXJyb3dMZWZ0TG9uZzokNixmYUxvbmdBcnJvd0xlZnQ6QXYsZmFQbHVnQ2lyY2xlQ2hlY2s6QnYsZmFTdHJlZXRWaWV3OlR2LGZhRnJhbmNTaWduOnl2LGZhVm9sdW1lT2ZmOlB2LGZhSGFuZHNBc2xJbnRlcnByZXRpbmc6bSxmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nOkZ2LGZhQXNsSW50ZXJwcmV0aW5nOkR2LGZhSGFuZHNBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZzpSdixmYUdlYXI6YzgsZmFDb2c6VXYsZmFEcm9wbGV0U2xhc2g6YTgsZmFUaW50U2xhc2g6cXYsZmFNb3NxdWU6R3YsZmFNb3NxdWl0bzpXdixmYVN0YXJPZkRhdmlkOkV2LGZhUGVyc29uTWlsaXRhcnlSaWZsZTpJdixmYUNhcnRTaG9wcGluZzpzOCxmYVNob3BwaW5nQ2FydDpPdixmYVZpYWxzOlh2LGZhUGx1Z0NpcmNsZVBsdXM6UXYsZmFQbGFjZU9mV29yc2hpcDpLdixmYUdyaXBWZXJ0aWNhbDpqdixmYUFycm93VHVyblVwOmU4LGZhTGV2ZWxVcDpKdixmYVU6WnYsZmFTcXVhcmVSb290VmFyaWFibGU6ZjgsZmFTcXVhcmVSb290QWx0Oll2LGZhQ2xvY2s6cjgsZmFDbG9ja0ZvdXI6X3YsZmFCYWNrd2FyZFN0ZXA6bDgsZmFTdGVwQmFja3dhcmQ6JHYsZmFQYWxsZXQ6Y00sZmFGYXVjZXQ6YU0sZmFCYXNlYmFsbEJhdEJhbGw6c00sZmFTOmVNLGZhVGltZWxpbmU6Zk0sZmFLZXlib2FyZDpyTSxmYUNhcmV0RG93bjpsTSxmYUhvdXNlQ2hpbW5leU1lZGljYWw6aTgsZmFDbGluaWNNZWRpY2FsOmlNLGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzOnYsZmFUZW1wZXJhdHVyZTM6b00sZmFUaGVybW9tZXRlcjM6bk0sZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnM6SE0sZmFNb2JpbGVTY3JlZW46bzgsZmFNb2JpbGVBbmRyb2lkQWx0OnpNLGZhUGxhbmVVcDpWTSxmYVBpZ2d5QmFuazptTSxmYUJhdHRlcnlIYWxmOm44LGZhQmF0dGVyeTM6dk0sZmFNb3VudGFpbkNpdHk6TU0sZmFDb2luczp0TSxmYUtoYW5kYTpoTSxmYVNsaWRlcnM6SDgsZmFTbGlkZXJzSDpDTSxmYUZvbGRlclRyZWU6TE0sZmFOZXR3b3JrV2lyZWQ6cE0sZmFNYXBQaW46ZE0sZmFIYW1zYTp1TSxmYUNlbnRTaWduOnhNLGZhRmxhc2s6Z00sZmFQZXJzb25QcmVnbmFudDpTTSxmYVdhbmRTcGFya2xlczpOTSxmYUVsbGlwc2lzVmVydGljYWw6ejgsZmFFbGxpcHNpc1Y6d00sZmFUaWNrZXQ6a00sZmFQb3dlck9mZjpiTSxmYVJpZ2h0TG9uZzpWOCxmYUxvbmdBcnJvd0FsdFJpZ2h0OkFNLGZhRmxhZ1VzYTpCTSxmYUxhcHRvcEZpbGU6VE0sZmFUdHk6bTgsZmFUZWxldHlwZTp5TSxmYURpYWdyYW1OZXh0OlBNLGZhUGVyc29uUmlmbGU6Rk0sZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbjpETSxmYUNsb3NlZENhcHRpb25pbmc6Uk0sZmFQZXJzb25IaWtpbmc6djgsZmFIaWtpbmc6VU0sZmFWZW51c0RvdWJsZTpxTSxmYUltYWdlczpHTSxmYUNhbGN1bGF0b3I6V00sZmFQZW9wbGVQdWxsaW5nOkVNLGZhTjpJTSxmYUNhYmxlQ2FyOk04LGZhVHJhbTpPTSxmYUNsb3VkUmFpbjpYTSxmYUJ1aWxkaW5nQ2lyY2xlWG1hcms6UU0sZmFTaGlwOktNLGZhQXJyb3dzRG93blRvTGluZTpqTSxmYURvd25sb2FkOkpNLGZhRmFjZUdyaW46dDgsZmFHcmluOlpNLGZhRGVsZXRlTGVmdDpoOCxmYUJhY2tzcGFjZTpZTSxmYUV5ZURyb3BwZXI6WCxmYUV5ZURyb3BwZXJFbXB0eTpfTSxmYUV5ZWRyb3BwZXI6JE0sZmFGaWxlQ2lyY2xlQ2hlY2s6Y3QsZmFGb3J3YXJkOmF0LGZhTW9iaWxlOlEsZmFNb2JpbGVBbmRyb2lkOnN0LGZhTW9iaWxlUGhvbmU6ZXQsZmFGYWNlTWVoOkM4LGZhTWVoOmZ0LGZhQWxpZ25DZW50ZXI6cnQsZmFCb29rU2t1bGw6TDgsZmFCb29rRGVhZDpsdCxmYUlkQ2FyZDpwOCxmYURyaXZlcnNMaWNlbnNlOml0LGZhT3V0ZGVudDpkOCxmYURlZGVudDpvdCxmYUhlYXJ0Q2lyY2xlRXhjbGFtYXRpb246bnQsZmFIb3VzZTpNLGZhSG9tZTpIdCxmYUhvbWVBbHQ6enQsZmFIb21lTGdBbHQ6VnQsZmFDYWxlbmRhcldlZWs6bXQsZmFMYXB0b3BNZWRpY2FsOnZ0LGZhQjpNdCxmYUZpbGVNZWRpY2FsOnR0LGZhRGljZU9uZTpodCxmYUtpd2lCaXJkOkN0LGZhQXJyb3dSaWdodEFycm93TGVmdDp1OCxmYUV4Y2hhbmdlOkx0LGZhUm90YXRlUmlnaHQ6SyxmYVJlZG9BbHQ6cHQsZmFSb3RhdGVGb3J3YXJkOmR0LGZhVXRlbnNpbHM6eDgsZmFDdXRsZXJ5OnV0LGZhQXJyb3dVcFdpZGVTaG9ydDpnOCxmYVNvcnRBbW91bnRVcDp4dCxmYU1pbGxTaWduOmd0LGZhQm93bFJpY2U6U3QsZmFTa3VsbDpOdCxmYVRvd2VyQnJvYWRjYXN0OlM4LGZhQnJvYWRjYXN0VG93ZXI6d3QsZmFUcnVja1BpY2t1cDprdCxmYVVwTG9uZzpOOCxmYUxvbmdBcnJvd0FsdFVwOmJ0LGZhU3RvcDpBdCxmYUNvZGVNZXJnZTpCdCxmYVVwbG9hZDpUdCxmYUh1cnJpY2FuZTp5dCxmYU1vdW5kOlB0LGZhVG9pbGV0UG9ydGFibGU6RnQsZmFDb21wYWN0RGlzYzpEdCxmYUZpbGVBcnJvd0Rvd246dzgsZmFGaWxlRG93bmxvYWQ6UnQsZmFDYXJhdmFuOlV0LGZhU2hpZWxkQ2F0OnF0LGZhQm9sdDprOCxmYVphcDpHdCxmYUdsYXNzV2F0ZXI6V3QsZmFPaWxXZWxsOkV0LGZhVmF1bHQ6SXQsZmFNYXJzOk90LGZhVG9pbGV0Olh0LGZhUGxhbmVDaXJjbGVYbWFyazpRdCxmYVllblNpZ246YSxmYUNueTpLdCxmYUpweTpqdCxmYVJtYjpKdCxmYVllbjpadCxmYVJ1YmxlU2lnbjp0LGZhUm91YmxlOll0LGZhUnViOl90LGZhUnVibGU6JHQsZmFTdW46Y2gsZmFHdWl0YXI6YWgsZmFGYWNlTGF1Z2hXaW5rOmI4LGZhTGF1Z2hXaW5rOnNoLGZhSG9yc2VIZWFkOmVoLGZhQm9yZUhvbGU6ZmgsZmFJbmR1c3RyeTpyaCxmYUNpcmNsZURvd246QTgsZmFBcnJvd0FsdENpcmNsZURvd246bGgsZmFBcnJvd3NUdXJuVG9Eb3RzOmloLGZhRmxvcmluU2lnbjpvaCxmYUFycm93RG93blNob3J0V2lkZTpqLGZhU29ydEFtb3VudERlc2M6bmgsZmFTb3J0QW1vdW50RG93bkFsdDpIaCxmYUxlc3NUaGFuOnpoLGZhQW5nbGVEb3duOlZoLGZhQ2FyVHVubmVsOm1oLGZhSGVhZFNpZGVDb3VnaDp2aCxmYUdyaXBMaW5lczpNaCxmYVRodW1ic0Rvd246dGgsZmFVc2VyTG9jazpoaCxmYUFycm93UmlnaHRMb25nOkI4LGZhTG9uZ0Fycm93UmlnaHQ6Q2gsZmFBbmNob3JDaXJjbGVYbWFyazpMaCxmYUVsbGlwc2lzOlQ4LGZhRWxsaXBzaXNIOnBoLGZhQ2hlc3NQYXduOmRoLGZhS2l0TWVkaWNhbDp5OCxmYUZpcnN0QWlkOnVoLGZhUGVyc29uVGhyb3VnaFdpbmRvdzp4aCxmYVRvb2xib3g6Z2gsZmFIYW5kc0hvbGRpbmdDaXJjbGU6U2gsZmFCdWc6TmgsZmFDcmVkaXRDYXJkOlA4LGZhQ3JlZGl0Q2FyZEFsdDp3aCxmYUNhcjpGOCxmYUF1dG9tb2JpbGU6a2gsZmFIYW5kSG9sZGluZ0hhbmQ6YmgsZmFCb29rT3BlblJlYWRlcjpEOCxmYUJvb2tSZWFkZXI6QWgsZmFNb3VudGFpblN1bjpCaCxmYUFycm93c0xlZnRSaWdodFRvTGluZTpUaCxmYURpY2VEMjA6eWgsZmFUcnVja0Ryb3BsZXQ6UGgsZmFGaWxlQ2lyY2xlWG1hcms6RmgsZmFUZW1wZXJhdHVyZUFycm93VXA6UjgsZmFUZW1wZXJhdHVyZVVwOkRoLGZhTWVkYWw6UmgsZmFCZWQ6VWgsZmFTcXVhcmVIOlU4LGZhSFNxdWFyZTpxaCxmYVBvZGNhc3Q6R2gsZmFUZW1wZXJhdHVyZUZ1bGw6aCxmYVRlbXBlcmF0dXJlNDpXaCxmYVRoZXJtb21ldGVyNDpFaCxmYVRoZXJtb21ldGVyRnVsbDpJaCxmYUJlbGw6T2gsZmFTdXBlcnNjcmlwdDpYaCxmYVBsdWdDaXJjbGVYbWFyazpRaCxmYVN0YXJPZkxpZmU6S2gsZmFQaG9uZVNsYXNoOmpoLGZhUGFpbnRSb2xsZXI6SmgsZmFIYW5kc2hha2VBbmdsZTpxOCxmYUhhbmRzSGVscGluZzpaaCxmYUxvY2F0aW9uRG90Okc4LGZhTWFwTWFya2VyQWx0OlloLGZhRmlsZTpfaCxmYUdyZWF0ZXJUaGFuOiRoLGZhUGVyc29uU3dpbW1pbmc6VzgsZmFTd2ltbWVyOmNDLGZhQXJyb3dEb3duOmFDLGZhRHJvcGxldDpFOCxmYVRpbnQ6c0MsZmFFcmFzZXI6ZUMsZmFFYXJ0aEFtZXJpY2FzOkMsZmFFYXJ0aDpmQyxmYUVhcnRoQW1lcmljYTpyQyxmYUdsb2JlQW1lcmljYXM6bEMsZmFQZXJzb25CdXJzdDppQyxmYURvdmU6b0MsZmFCYXR0ZXJ5RW1wdHk6STgsZmFCYXR0ZXJ5MDpuQyxmYVNvY2tzOkhDLGZhSW5ib3g6ekMsZmFTZWN0aW9uOlZDLGZhR2F1Z2VIaWdoOkosZmFUYWNob21ldGVyQWx0Om1DLGZhVGFjaG9tZXRlckFsdEZhc3Q6dkMsZmFFbnZlbG9wZU9wZW5UZXh0Ok1DLGZhSG9zcGl0YWw6WixmYUhvc3BpdGFsQWx0OnRDLGZhSG9zcGl0YWxXaWRlOmhDLGZhV2luZUJvdHRsZTpDQyxmYUNoZXNzUm9vazpMQyxmYUJhcnNTdGFnZ2VyZWQ6WSxmYVJlb3JkZXI6cEMsZmFTdHJlYW06ZEMsZmFEaGFybWFjaGFrcmE6dUMsZmFIb3Rkb2c6eEMsZmFQZXJzb25XYWxraW5nV2l0aENhbmU6TzgsZmFCbGluZDpnQyxmYURydW06U0MsZmFJY2VDcmVhbTpOQyxmYUhlYXJ0Q2lyY2xlQm9sdDp3QyxmYUZheDprQyxmYVBhcmFncmFwaDpiQyxmYUNoZWNrVG9TbG90Olg4LGZhVm90ZVllYTpBQyxmYVN0YXJIYWxmOkJDLGZhQm94ZXNTdGFja2VkOl8sZmFCb3hlczpUQyxmYUJveGVzQWx0OnlDLGZhTGluazpROCxmYUNoYWluOlBDLGZhRWFyTGlzdGVuOks4LGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtczpGQyxmYVRyZWVDaXR5OkRDLGZhUGxheTpSQyxmYUZvbnQ6VUMsZmFSdXBpYWhTaWduOnFDLGZhTWFnbmlmeWluZ0dsYXNzOmo4LGZhU2VhcmNoOkdDLGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsOiQsZmFQaW5nUG9uZ1BhZGRsZUJhbGw6V0MsZmFUYWJsZVRlbm5pczpFQyxmYVBlcnNvbkRvdHNGcm9tTGluZTpKOCxmYURpYWdub3NlczpJQyxmYVRyYXNoQ2FuQXJyb3dVcDpaOCxmYVRyYXNoUmVzdG9yZUFsdDpPQyxmYU5haXJhU2lnbjpYQyxmYUNhcnRBcnJvd0Rvd246UUMsZmFXYWxraWVUYWxraWU6S0MsZmFGaWxlUGVuOlk4LGZhRmlsZUVkaXQ6akMsZmFSZWNlaXB0OkpDLGZhU3F1YXJlUGVuOmMyLGZhUGVuU3F1YXJlOlpDLGZhUGVuY2lsU3F1YXJlOllDLGZhU3VpdGNhc2VSb2xsaW5nOl9DLGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb246JEMsZmFDaGV2cm9uRG93bjpjTCxmYUJhdHRlcnlGdWxsOmEyLGZhQmF0dGVyeTphTCxmYUJhdHRlcnk1OnNMLGZhU2t1bGxDcm9zc2JvbmVzOmVMLGZhQ29kZUNvbXBhcmU6ZkwsZmFMaXN0VWw6XzgsZmFMaXN0RG90czpyTCxmYVNjaG9vbExvY2s6bEwsZmFUb3dlckNlbGw6aUwsZmFEb3duTG9uZzokOCxmYUxvbmdBcnJvd0FsdERvd246b0wsZmFSYW5raW5nU3RhcjpuTCxmYUNoZXNzS2luZzpITCxmYVBlcnNvbkhhcmFzc2luZzp6TCxmYUJyYXppbGlhblJlYWxTaWduOlZMLGZhTGFuZG1hcmtEb21lOmMwLGZhTGFuZG1hcmtBbHQ6bUwsZmFBcnJvd1VwOnZMLGZhVHY6czIsZmFUZWxldmlzaW9uOk1MLGZhVHZBbHQ6dEwsZmFTaHJpbXA6aEwsZmFMaXN0Q2hlY2s6YTAsZmFUYXNrczpDTCxmYUp1Z0RldGVyZ2VudDpMTCxmYUNpcmNsZVVzZXI6czAsZmFVc2VyQ2lyY2xlOnBMLGZhVXNlclNoaWVsZDpkTCxmYVdpbmQ6dUwsZmFDYXJCdXJzdDplMCxmYUNhckNyYXNoOnhMLGZhWTpnTCxmYVBlcnNvblNub3dib2FyZGluZzpmMCxmYVNub3dib2FyZGluZzpTTCxmYVRydWNrRmFzdDpyMCxmYVNoaXBwaW5nRmFzdDpOTCxmYUZpc2g6d0wsZmFVc2VyR3JhZHVhdGU6a0wsZmFDaXJjbGVIYWxmU3Ryb2tlOmwwLGZhQWRqdXN0OmJMLGZhQ2xhcHBlcmJvYXJkOkFMLGZhQ2lyY2xlUmFkaWF0aW9uOmkwLGZhUmFkaWF0aW9uQWx0OkJMLGZhQmFzZWJhbGw6bzAsZmFCYXNlYmFsbEJhbGw6VEwsZmFKZXRGaWdodGVyVXA6eUwsZmFEaWFncmFtUHJvamVjdDpuMCxmYVByb2plY3REaWFncmFtOlBMLGZhQ29weTpGTCxmYVZvbHVtZVhtYXJrOmUyLGZhVm9sdW1lTXV0ZTpETCxmYVZvbHVtZVRpbWVzOlJMLGZhSGFuZFNwYXJrbGVzOlVMLGZhR3JpcDpIMCxmYUdyaXBIb3Jpem9udGFsOnFMLGZhU2hhcmVGcm9tU3F1YXJlOnowLGZhU2hhcmVTcXVhcmU6R0wsZmFHdW46V0wsZmFTcXVhcmVQaG9uZTpWMCxmYVBob25lU3F1YXJlOkVMLGZhUGx1czptMCxmYUFkZDpJTCxmYUV4cGFuZDpPTCxmYUNvbXB1dGVyOlhMLGZhWG1hcms6cyxmYUNsb3NlOlFMLGZhTXVsdGlwbHk6S0wsZmFSZW1vdmU6akwsZmFUaW1lczpKTCxmYUFycm93c1VwRG93bkxlZnRSaWdodDp2MCxmYUFycm93czpaTCxmYUNoYWxrYm9hcmRVc2VyOk0wLGZhQ2hhbGtib2FyZFRlYWNoZXI6WUwsZmFQZXNvU2lnbjpfTCxmYUJ1aWxkaW5nU2hpZWxkOiRMLGZhQmFieTpjcCxmYVVzZXJzTGluZTphcCxmYVF1b3RlTGVmdDp0MCxmYVF1b3RlTGVmdEFsdDpzcCxmYVRyYWN0b3I6ZXAsZmFUcmFzaEFycm93VXA6aDAsZmFUcmFzaFJlc3RvcmU6ZnAsZmFBcnJvd0Rvd25VcExvY2s6cnAsZmFMaW5lc0xlYW5pbmc6bHAsZmFSdWxlckNvbWJpbmVkOmlwLGZhQ29weXJpZ2h0Om9wLGZhRXF1YWxzOm5wLGZhQmxlbmRlcjpIcCxmYVRlZXRoOnpwLGZhU2hla2VsU2lnbjplLGZhSWxzOlZwLGZhU2hla2VsOm1wLGZhU2hlcWVsOnZwLGZhU2hlcWVsU2lnbjpNcCxmYU1hcDp0cCxmYVJvY2tldDpocCxmYVBob3RvRmlsbTpDMCxmYVBob3RvVmlkZW86Q3AsZmFGb2xkZXJNaW51czpMcCxmYVN0b3JlOnBwLGZhQXJyb3dUcmVuZFVwOmRwLGZhUGx1Z0NpcmNsZU1pbnVzOnVwLGZhU2lnbkhhbmdpbmc6TDAsZmFTaWduOnhwLGZhQmV6aWVyQ3VydmU6Z3AsZmFCZWxsU2xhc2g6U3AsZmFUYWJsZXQ6cDAsZmFUYWJsZXRBbmRyb2lkOk5wLGZhU2Nob29sRmxhZzp3cCxmYUZpbGw6a3AsZmFBbmdsZVVwOmJwLGZhRHJ1bXN0aWNrQml0ZTpBcCxmYUhvbGx5QmVycnk6QnAsZmFDaGV2cm9uTGVmdDpUcCxmYUJhY3RlcmlhOnlwLGZhSGFuZExpemFyZDpQcCxmYURpc2Vhc2U6RnAsZmFCcmllZmNhc2VNZWRpY2FsOkRwLGZhR2VuZGVybGVzczpScCxmYUNoZXZyb25SaWdodDpVcCxmYVJldHdlZXQ6cXAsZmFDYXJSZWFyOmQwLGZhQ2FyQWx0OkdwLGZhUHVtcFNvYXA6V3AsZmFWaWRlb1NsYXNoOkVwLGZhQmF0dGVyeVF1YXJ0ZXI6dTAsZmFCYXR0ZXJ5MjpJcCxmYVJhZGlvOk9wLGZhQmFieUNhcnJpYWdlOngwLGZhQ2FycmlhZ2VCYWJ5OlhwLGZhVHJhZmZpY0xpZ2h0OlFwLGZhVGhlcm1vbWV0ZXI6S3AsZmFWckNhcmRib2FyZDpqcCxmYUhhbmRNaWRkbGVGaW5nZXI6SnAsZmFQZXJjZW50OmcwLGZhUGVyY2VudGFnZTpacCxmYVRydWNrTW92aW5nOllwLGZhR2xhc3NXYXRlckRyb3BsZXQ6X3AsZmFEaXNwbGF5OiRwLGZhRmFjZVNtaWxlOlMwLGZhU21pbGU6Y2QsZmFUaHVtYnRhY2s6TjAsZmFUaHVtYlRhY2s6YWQsZmFUcm9waHk6c2QsZmFQZXJzb25QcmF5aW5nOncwLGZhUHJheTplZCxmYUhhbW1lcjpmZCxmYUhhbmRQZWFjZTpyZCxmYVJvdGF0ZTprMCxmYVN5bmNBbHQ6bGQsZmFTcGlubmVyOmlkLGZhUm9ib3Q6b2QsZmFQZWFjZTpuZCxmYUdlYXJzOmIwLGZhQ29nczpIZCxmYVdhcmVob3VzZTp6ZCxmYUFycm93VXBSaWdodERvdHM6VmQsZmFTcGxvdGNoOm1kLGZhRmFjZUdyaW5IZWFydHM6QTAsZmFHcmluSGVhcnRzOnZkLGZhRGljZUZvdXI6TWQsZmFTaW1DYXJkOnRkLGZhVHJhbnNnZW5kZXI6QjAsZmFUcmFuc2dlbmRlckFsdDpoZCxmYU1lcmN1cnk6Q2QsZmFBcnJvd1R1cm5Eb3duOlQwLGZhTGV2ZWxEb3duOkxkLGZhUGVyc29uRmFsbGluZ0J1cnN0OnBkLGZhQXdhcmQ6ZGQsZmFUaWNrZXRTaW1wbGU6eTAsZmFUaWNrZXRBbHQ6dWQsZmFCdWlsZGluZzp4ZCxmYUFuZ2xlc0xlZnQ6UDAsZmFBbmdsZURvdWJsZUxlZnQ6Z2QsZmFRcmNvZGU6U2QsZmFDbG9ja1JvdGF0ZUxlZnQ6RjAsZmFIaXN0b3J5Ok5kLGZhRmFjZUdyaW5CZWFtU3dlYXQ6RDAsZmFHcmluQmVhbVN3ZWF0OndkLGZhRmlsZUV4cG9ydDpSMCxmYUFycm93UmlnaHRGcm9tRmlsZTprZCxmYVNoaWVsZDpVMCxmYVNoaWVsZEJsYW5rOmJkLGZhQXJyb3dVcFNob3J0V2lkZTpxMCxmYVNvcnRBbW91bnRVcEFsdDpBZCxmYUhvdXNlTWVkaWNhbDpCZCxmYUdvbGZCYWxsVGVlOkcwLGZhR29sZkJhbGw6VGQsZmFDaXJjbGVDaGV2cm9uTGVmdDpXMCxmYUNoZXZyb25DaXJjbGVMZWZ0OnlkLGZhSG91c2VDaGltbmV5V2luZG93OlBkLGZhUGVuTmliOkZkLGZhVGVudEFycm93VHVybkxlZnQ6RGQsZmFUZW50czpSZCxmYVdhbmRNYWdpYzpFMCxmYU1hZ2ljOlVkLGZhRG9nOnFkLGZhQ2Fycm90OkdkLGZhTW9vbjpXZCxmYVdpbmVHbGFzc0VtcHR5OkkwLGZhV2luZUdsYXNzQWx0OkVkLGZhQ2hlZXNlOklkLGZhWWluWWFuZzpPZCxmYU11c2ljOlhkLGZhQ29kZUNvbW1pdDpRZCxmYVRlbXBlcmF0dXJlTG93OktkLGZhUGVyc29uQmlraW5nOk8wLGZhQmlraW5nOmpkLGZhQnJvb206SmQsZmFTaGllbGRIZWFydDpaZCxmYUdvcHVyYW06WWQsZmFFYXJ0aE9jZWFuaWE6WDAsZmFHbG9iZU9jZWFuaWE6X2QsZmFTcXVhcmVYbWFyazpmMixmYVRpbWVzU3F1YXJlOiRkLGZhWG1hcmtTcXVhcmU6Y3UsZmFIYXNodGFnOmF1LGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlcjpRMCxmYUV4cGFuZEFsdDpzdSxmYU9pbENhbjpldSxmYVQ6ZnUsZmFIaXBwbzpydSxmYUNoYXJ0Q29sdW1uOmx1LGZhSW5maW5pdHk6aXUsZmFWaWFsQ2lyY2xlQ2hlY2s6b3UsZmFQZXJzb25BcnJvd0Rvd25Ub0xpbmU6bnUsZmFWb2ljZW1haWw6SHUsZmFGYW46enUsZmFQZXJzb25XYWxraW5nTHVnZ2FnZTpWdSxmYVVwRG93bjpLMCxmYUFycm93c0FsdFY6bXUsZmFDbG91ZE1vb25SYWluOnZ1LGZhQ2FsZW5kYXI6TXUsZmFUcmFpbGVyOnR1LGZhQmFoYWk6ajAsZmFIYXlrYWw6aHUsZmFTZENhcmQ6Q3UsZmFEcmFnb246THUsZmFTaG9lUHJpbnRzOnB1LGZhQ2lyY2xlUGx1czpKMCxmYVBsdXNDaXJjbGU6ZHUsZmFGYWNlR3JpblRvbmd1ZVdpbms6WjAsZmFHcmluVG9uZ3VlV2luazp1dSxmYUhhbmRIb2xkaW5nOnh1LGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uOmd1LGZhTGlua1NsYXNoOkwsZmFDaGFpbkJyb2tlbjpTdSxmYUNoYWluU2xhc2g6TnUsZmFVbmxpbms6d3UsZmFDbG9uZTprdSxmYVBlcnNvbldhbGtpbmdBcnJvd0xvb3BMZWZ0OmJ1LGZhQXJyb3dVcFpBOlkwLGZhU29ydEFscGhhVXBBbHQ6QXUsZmFGaXJlRmxhbWVDdXJ2ZWQ6XzAsZmFGaXJlQWx0OkJ1LGZhVG9ybmFkbzpUdSxmYUZpbGVDaXJjbGVQbHVzOnl1LGZhQm9va1F1cmFuOiQwLGZhUXVyYW46UHUsZmFBbmNob3I6RnUsZmFCb3JkZXJBbGw6RHUsZmFGYWNlQW5ncnk6YzUsZmFBbmdyeTpSdSxmYUNvb2tpZUJpdGU6VXUsZmFBcnJvd1RyZW5kRG93bjpxdSxmYVJzczphNSxmYUZlZWQ6R3UsZmFEcmF3UG9seWdvbjpXdSxmYVNjYWxlQmFsYW5jZWQ6czUsZmFCYWxhbmNlU2NhbGU6RXUsZmFHYXVnZVNpbXBsZUhpZ2g6cjIsZmFUYWNob21ldGVyOkl1LGZhVGFjaG9tZXRlckZhc3Q6T3UsZmFTaG93ZXI6WHUsZmFEZXNrdG9wOmU1LGZhRGVza3RvcEFsdDpRdSxmYU06S3UsZmFUYWJsZUxpc3Q6ZjUsZmFUaExpc3Q6anUsZmFDb21tZW50U21zOnI1LGZhU21zOkp1LGZhQm9vazpadSxmYVVzZXJQbHVzOll1LGZhQ2hlY2s6X3UsZmFCYXR0ZXJ5VGhyZWVRdWFydGVyczpsNSxmYUJhdHRlcnk0OiR1LGZhSG91c2VDaXJjbGVDaGVjazpjeCxmYUFuZ2xlTGVmdDpheCxmYURpYWdyYW1TdWNjZXNzb3I6c3gsZmFUcnVja0Fycm93UmlnaHQ6ZXgsZmFBcnJvd3NTcGxpdFVwQW5kTGVmdDpmeCxmYUhhbmRGaXN0Omk1LGZhRmlzdFJhaXNlZDpyeCxmYUNsb3VkTW9vbjpseCxmYUJyaWVmY2FzZTppeCxmYVBlcnNvbkZhbGxpbmc6b3gsZmFJbWFnZVBvcnRyYWl0Om81LGZhUG9ydHJhaXQ6bngsZmFVc2VyVGFnOkh4LGZhUnVnOnp4LGZhRWFydGhFdXJvcGU6bjUsZmFHbG9iZUV1cm9wZTpWeCxmYUNhcnRGbGF0YmVkU3VpdGNhc2U6SDUsZmFMdWdnYWdlQ2FydDpteCxmYVJlY3RhbmdsZVhtYXJrOnAsZmFSZWN0YW5nbGVUaW1lczp2eCxmYVRpbWVzUmVjdGFuZ2xlOk14LGZhV2luZG93Q2xvc2U6dHgsZmFCYWh0U2lnbjpoeCxmYUJvb2tPcGVuOkN4LGZhQm9va0pvdXJuYWxXaGlsbHM6ejUsZmFKb3VybmFsV2hpbGxzOkx4LGZhSGFuZGN1ZmZzOnB4LGZhVHJpYW5nbGVFeGNsYW1hdGlvbjpsMixmYUV4Y2xhbWF0aW9uVHJpYW5nbGU6ZHgsZmFXYXJuaW5nOnV4LGZhRGF0YWJhc2U6eHgsZmFTaGFyZTppMixmYUFycm93VHVyblJpZ2h0Omd4LGZhTWFpbEZvcndhcmQ6U3gsZmFCb3R0bGVEcm9wbGV0Ok54LGZhTWFza0ZhY2U6d3gsZmFIaWxsUm9ja3NsaWRlOmt4LGZhUmlnaHRMZWZ0OlY1LGZhRXhjaGFuZ2VBbHQ6YngsZmFQYXBlclBsYW5lOkF4LGZhUm9hZENpcmNsZUV4Y2xhbWF0aW9uOkJ4LGZhRHVuZ2VvbjpUeCxmYUFsaWduUmlnaHQ6eXgsZmFNb25leUJpbGwxV2F2ZTptNSxmYU1vbmV5QmlsbFdhdmVBbHQ6UHgsZmFMaWZlUmluZzpGeCxmYUhhbmRzOm8yLGZhU2lnbkxhbmd1YWdlOkR4LGZhU2lnbmluZzpSeCxmYUNhbGVuZGFyRGF5OlV4LGZhV2F0ZXJMYWRkZXI6bjIsZmFMYWRkZXJXYXRlcjpxeCxmYVN3aW1taW5nUG9vbDpHeCxmYUFycm93c1VwRG93bjp2NSxmYUFycm93c1Y6V3gsZmFGYWNlR3JpbWFjZTpNNSxmYUdyaW1hY2U6RXgsZmFXaGVlbGNoYWlyTW92ZTp0NSxmYVdoZWVsY2hhaXJBbHQ6SXgsZmFUdXJuRG93bjpoNSxmYUxldmVsRG93bkFsdDpPeCxmYVBlcnNvbldhbGtpbmdBcnJvd1JpZ2h0Olh4LGZhU3F1YXJlRW52ZWxvcGU6QzUsZmFFbnZlbG9wZVNxdWFyZTpReCxmYURpY2U6S3gsZmFCb3dsaW5nQmFsbDpqeCxmYUJyYWluOkp4LGZhQmFuZGFnZTpMNSxmYUJhbmRBaWQ6WngsZmFDYWxlbmRhck1pbnVzOll4LGZhQ2lyY2xlWG1hcms6SDIsZmFUaW1lc0NpcmNsZTpfeCxmYVhtYXJrQ2lyY2xlOiR4LGZhR2lmdHM6Y2csZmFIb3RlbDphZyxmYUVhcnRoQXNpYTpwNSxmYUdsb2JlQXNpYTpzZyxmYUlkQ2FyZENsaXA6ZDUsZmFJZENhcmRBbHQ6ZWcsZmFNYWduaWZ5aW5nR2xhc3NQbHVzOnU1LGZhU2VhcmNoUGx1czpmZyxmYVRodW1ic1VwOnJnLGZhVXNlckNsb2NrOmxnLGZhSGFuZERvdHM6eDUsZmFBbGxlcmdpZXM6aWcsZmFGaWxlSW52b2ljZTpvZyxmYVdpbmRvd01pbmltaXplOm5nLGZhTXVnU2F1Y2VyOmc1LGZhQ29mZmVlOkhnLGZhQnJ1c2g6emcsZmFNYXNrOlZnLGZhTWFnbmlmeWluZ0dsYXNzTWludXM6UzUsZmFTZWFyY2hNaW51czptZyxmYVJ1bGVyVmVydGljYWw6dmcsZmFVc2VyTGFyZ2U6TjUsZmFVc2VyQWx0Ok1nLGZhVHJhaW5UcmFtOnRnLGZhVXNlck51cnNlOmhnLGZhU3lyaW5nZTpDZyxmYUNsb3VkU3VuOkxnLGZhU3RvcHdhdGNoMjA6cGcsZmFTcXVhcmVGdWxsOmRnLGZhTWFnbmV0OnVnLGZhSmFyOnhnLGZhTm90ZVN0aWNreTp3NSxmYVN0aWNreU5vdGU6Z2csZmFCdWdTbGFzaDpTZyxmYUFycm93VXBGcm9tV2F0ZXJQdW1wOk5nLGZhQm9uZTp3ZyxmYVVzZXJJbmp1cmVkOmtnLGZhRmFjZVNhZFRlYXI6azUsZmFTYWRUZWFyOmJnLGZhUGxhbmU6QWcsZmFUZW50QXJyb3dzRG93bjpCZyxmYUV4Y2xhbWF0aW9uOlRnLGZhQXJyb3dzU3Bpbjp5ZyxmYVByaW50OlBnLGZhVHVya2lzaExpcmFTaWduOnoyLGZhVHJ5OkZnLGZhVHVya2lzaExpcmE6RGcsZmFEb2xsYXJTaWduOlYyLGZhRG9sbGFyOlJnLGZhVXNkOlVnLGZhWDpxZyxmYU1hZ25pZnlpbmdHbGFzc0RvbGxhcjpiNSxmYVNlYXJjaERvbGxhcjpHZyxmYVVzZXJzR2VhcjpBNSxmYVVzZXJzQ29nOldnLGZhUGVyc29uTWlsaXRhcnlQb2ludGluZzpFZyxmYUJ1aWxkaW5nQ29sdW1uczpmLGZhQmFuazpJZyxmYUluc3RpdHV0aW9uOk9nLGZhTXVzZXVtOlhnLGZhVW5pdmVyc2l0eTpRZyxmYVVtYnJlbGxhOktnLGZhVHJvd2VsOmpnLGZhRDpKZyxmYVN0YXBsZXI6WmcsZmFNYXNrc1RoZWF0ZXI6QjUsZmFUaGVhdGVyTWFza3M6WWcsZmFLaXBTaWduOl9nLGZhSGFuZFBvaW50TGVmdDokZyxmYUhhbmRzaGFrZVNpbXBsZTpUNSxmYUhhbmRzaGFrZUFsdDpjUyxmYUpldEZpZ2h0ZXI6eTUsZmFGaWdodGVySmV0OmFTLGZhU3F1YXJlU2hhcmVOb2RlczpQNSxmYVNoYXJlQWx0U3F1YXJlOnNTLGZhQmFyY29kZTplUyxmYVBsdXNNaW51czpmUyxmYVZpZGVvOkY1LGZhVmlkZW9DYW1lcmE6clMsZmFHcmFkdWF0aW9uQ2FwOkQ1LGZhTW9ydGFyQm9hcmQ6bFMsZmFIYW5kSG9sZGluZ01lZGljYWw6aVMsZmFQZXJzb25DaXJjbGVDaGVjazpvUyxmYVR1cm5VcDpSNSxmYUxldmVsVXBBbHQ6blN9O2V4cG9ydHtVNSBhcyBmYTAscTUgYXMgZmExLEc1IGFzIGZhMixXNSBhcyBmYTMsRTUgYXMgZmE0LEk1IGFzIGZhNSxPNSBhcyBmYTYsWDUgYXMgZmE3LFE1IGFzIGZhOCxLNSBhcyBmYTksTm8gYXMgZmFBLFRvIGFzIGZhQWQsSUwgYXMgZmFBZGQscTIgYXMgZmFBZGRyZXNzQm9vayxiIGFzIGZhQWRkcmVzc0NhcmQsYkwgYXMgZmFBZGp1c3QsRmUgYXMgZmFBaXJGcmVzaGVuZXIscnQgYXMgZmFBbGlnbkNlbnRlcixYcyBhcyBmYUFsaWduSnVzdGlmeSxXViBhcyBmYUFsaWduTGVmdCx5eCBhcyBmYUFsaWduUmlnaHQsaWcgYXMgZmFBbGxlcmdpZXMsdXMgYXMgZmFBbWJ1bGFuY2UsRnYgYXMgZmFBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZyxGdSBhcyBmYUFuY2hvcixtNyBhcyBmYUFuY2hvckNpcmNsZUNoZWNrLEpIIGFzIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sTGggYXMgZmFBbmNob3JDaXJjbGVYbWFyayxuciBhcyBmYUFuY2hvckxvY2ssRDcgYXMgZmFBbmdsZURvdWJsZURvd24sZ2QgYXMgZmFBbmdsZURvdWJsZUxlZnQsemwgYXMgZmFBbmdsZURvdWJsZVJpZ2h0LENtIGFzIGZhQW5nbGVEb3VibGVVcCxWaCBhcyBmYUFuZ2xlRG93bixheCBhcyBmYUFuZ2xlTGVmdCxBcyBhcyBmYUFuZ2xlUmlnaHQsYnAgYXMgZmFBbmdsZVVwLGIyIGFzIGZhQW5nbGVzRG93bixQMCBhcyBmYUFuZ2xlc0xlZnQsVTQgYXMgZmFBbmdsZXNSaWdodCxGNiBhcyBmYUFuZ2xlc1VwLFJ1IGFzIGZhQW5ncnksJGMgYXMgZmFBbmtoLGVIIGFzIGZhQXBwbGVBbHQsRTMgYXMgZmFBcHBsZVdob2xlLGs5IGFzIGZhQXJjaGl2ZSxIbyBhcyBmYUFyY2h3YXksQWUgYXMgZmFBcmVhQ2hhcnQsbGggYXMgZmFBcnJvd0FsdENpcmNsZURvd24saHYgYXMgZmFBcnJvd0FsdENpcmNsZUxlZnQsVG4gYXMgZmFBcnJvd0FsdENpcmNsZVJpZ2h0LHdIIGFzIGZhQXJyb3dBbHRDaXJjbGVVcCxqbCBhcyBmYUFycm93Q2lyY2xlRG93bixCaSBhcyBmYUFycm93Q2lyY2xlTGVmdCx5byBhcyBmYUFycm93Q2lyY2xlUmlnaHQsQWYgYXMgZmFBcnJvd0NpcmNsZVVwLGFDIGFzIGZhQXJyb3dEb3duLEUgYXMgZmFBcnJvd0Rvd24xOSx4IGFzIGZhQXJyb3dEb3duOTEsSSBhcyBmYUFycm93RG93bkFaLFg0IGFzIGZhQXJyb3dEb3duTG9uZyxqIGFzIGZhQXJyb3dEb3duU2hvcnRXaWRlLCQ3IGFzIGZhQXJyb3dEb3duVXBBY3Jvc3NMaW5lLHJwIGFzIGZhQXJyb3dEb3duVXBMb2NrLFQgYXMgZmFBcnJvd0Rvd25XaWRlU2hvcnQsUyBhcyBmYUFycm93RG93blpBLFVWIGFzIGZhQXJyb3dMZWZ0LCQ2IGFzIGZhQXJyb3dMZWZ0TG9uZyxmdiBhcyBmYUFycm93TGVmdFJvdGF0ZSxaMSBhcyBmYUFycm93UG9pbnRlcixVbiBhcyBmYUFycm93UmlnaHQsdTggYXMgZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0LHoxIGFzIGZhQXJyb3dSaWdodEZyb21CcmFja2V0LGtkIGFzIGZhQXJyb3dSaWdodEZyb21GaWxlLEI4IGFzIGZhQXJyb3dSaWdodExvbmcsWXogYXMgZmFBcnJvd1JpZ2h0Um90YXRlLHM0IGFzIGZhQXJyb3dSaWdodFRvQnJhY2tldCxwbSBhcyBmYUFycm93UmlnaHRUb0NpdHksSmwgYXMgZmFBcnJvd1JpZ2h0VG9GaWxlLHJ2IGFzIGZhQXJyb3dSb3RhdGVCYWNrLGx2IGFzIGZhQXJyb3dSb3RhdGVCYWNrd2FyZCxfeiBhcyBmYUFycm93Um90YXRlRm9yd2FyZCxjIGFzIGZhQXJyb3dSb3RhdGVMZWZ0LFYgYXMgZmFBcnJvd1JvdGF0ZVJpZ2h0LHF1IGFzIGZhQXJyb3dUcmVuZERvd24sZHAgYXMgZmFBcnJvd1RyZW5kVXAsVDAgYXMgZmFBcnJvd1R1cm5Eb3duLGd4IGFzIGZhQXJyb3dUdXJuUmlnaHQsZTggYXMgZmFBcnJvd1R1cm5VcCx2TCBhcyBmYUFycm93VXAsdTYgYXMgZmFBcnJvd1VwMTksRDYgYXMgZmFBcnJvd1VwOTEsSDQgYXMgZmFBcnJvd1VwQVosWXMgYXMgZmFBcnJvd1VwRnJvbUJyYWNrZXQsWnIgYXMgZmFBcnJvd1VwRnJvbUdyb3VuZFdhdGVyLE5nIGFzIGZhQXJyb3dVcEZyb21XYXRlclB1bXAsQjIgYXMgZmFBcnJvd1VwTG9uZyxWZCBhcyBmYUFycm93VXBSaWdodERvdHMsazMgYXMgZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlLHEwIGFzIGZhQXJyb3dVcFNob3J0V2lkZSxnOCBhcyBmYUFycm93VXBXaWRlU2hvcnQsWTAgYXMgZmFBcnJvd1VwWkEsWkwgYXMgZmFBcnJvd3Msam8gYXMgZmFBcnJvd3NBbHQsYmkgYXMgZmFBcnJvd3NBbHRILG11IGFzIGZhQXJyb3dzQWx0VixqTSBhcyBmYUFycm93c0Rvd25Ub0xpbmUsd2kgYXMgZmFBcnJvd3NEb3duVG9QZW9wbGUsRWkgYXMgZmFBcnJvd3NILG8zIGFzIGZhQXJyb3dzTGVmdFJpZ2h0LFRoIGFzIGZhQXJyb3dzTGVmdFJpZ2h0VG9MaW5lLFAgYXMgZmFBcnJvd3NSb3RhdGUseWcgYXMgZmFBcnJvd3NTcGluLGZ4IGFzIGZhQXJyb3dzU3BsaXRVcEFuZExlZnQsSjUgYXMgZmFBcnJvd3NUb0NpcmNsZSxubyBhcyBmYUFycm93c1RvRG90LFhuIGFzIGZhQXJyb3dzVG9FeWUsZ2kgYXMgZmFBcnJvd3NUdXJuUmlnaHQsaWggYXMgZmFBcnJvd3NUdXJuVG9Eb3RzLHY1IGFzIGZhQXJyb3dzVXBEb3duLHYwIGFzIGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0LHQ3IGFzIGZhQXJyb3dzVXBUb0xpbmUsV3ggYXMgZmFBcnJvd3NWLER2IGFzIGZhQXNsSW50ZXJwcmV0aW5nLEZDIGFzIGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtcyxhYSBhcyBmYUFzdGVyaXNrLFk1IGFzIGZhQXQscm8gYXMgZmFBdGxhcyxkNyBhcyBmYUF0b20sZHogYXMgZmFBdWRpb0Rlc2NyaXB0aW9uLEhuIGFzIGZhQXVzdHJhbFNpZ24sa2ggYXMgZmFBdXRvbW9iaWxlLGRkIGFzIGZhQXdhcmQsTXQgYXMgZmFCLGNwIGFzIGZhQmFieSx4MCBhcyBmYUJhYnlDYXJyaWFnZSxZTSBhcyBmYUJhY2tzcGFjZSx6OSBhcyBmYUJhY2t3YXJkLE8zIGFzIGZhQmFja3dhcmRGYXN0LGw4IGFzIGZhQmFja3dhcmRTdGVwLEpzIGFzIGZhQmFjb24seXAgYXMgZmFCYWN0ZXJpYSxReiBhcyBmYUJhY3Rlcml1bSxBMSBhcyBmYUJhZ1Nob3BwaW5nLGowIGFzIGZhQmFoYWksaHggYXMgZmFCYWh0U2lnbixFdSBhcyBmYUJhbGFuY2VTY2FsZSxxeiBhcyBmYUJhbGFuY2VTY2FsZUxlZnQsSGkgYXMgZmFCYWxhbmNlU2NhbGVSaWdodCxqMSBhcyBmYUJhbixmNiBhcyBmYUJhblNtb2tpbmcsWnggYXMgZmFCYW5kQWlkLEw1IGFzIGZhQmFuZGFnZSxJZyBhcyBmYUJhbmssQXIgYXMgZmFCYXJDaGFydCxlUyBhcyBmYUJhcmNvZGUscjEgYXMgZmFCYXJzLHM2IGFzIGZhQmFyc1Byb2dyZXNzLFkgYXMgZmFCYXJzU3RhZ2dlcmVkLG8wIGFzIGZhQmFzZWJhbGwsVEwgYXMgZmFCYXNlYmFsbEJhbGwsc00gYXMgZmFCYXNlYmFsbEJhdEJhbGwscjYgYXMgZmFCYXNrZXRTaG9wcGluZyxYMyBhcyBmYUJhc2tldGJhbGwsU0ggYXMgZmFCYXNrZXRiYWxsQmFsbCxkNCBhcyBmYUJhdGgsZXIgYXMgZmFCYXRodHViLGFMIGFzIGZhQmF0dGVyeSxuQyBhcyBmYUJhdHRlcnkwLElwIGFzIGZhQmF0dGVyeTIsdk0gYXMgZmFCYXR0ZXJ5MywkdSBhcyBmYUJhdHRlcnk0LHNMIGFzIGZhQmF0dGVyeTUsQ3IgYXMgZmFCYXR0ZXJ5Q2FyLEk4IGFzIGZhQmF0dGVyeUVtcHR5LGEyIGFzIGZhQmF0dGVyeUZ1bGwsbjggYXMgZmFCYXR0ZXJ5SGFsZix1MCBhcyBmYUJhdHRlcnlRdWFydGVyLGw1IGFzIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMsVWggYXMgZmFCZWQsdjQgYXMgZmFCZWRQdWxzZSxHNyBhcyBmYUJlZXIsQTIgYXMgZmFCZWVyTXVnRW1wdHksT2ggYXMgZmFCZWxsLFoyIGFzIGZhQmVsbENvbmNpZXJnZSxTcCBhcyBmYUJlbGxTbGFzaCxncCBhcyBmYUJlemllckN1cnZlLFpWIGFzIGZhQmlibGUsaHMgYXMgZmFCaWN5Y2xlLGpkIGFzIGZhQmlraW5nLEs5IGFzIGZhQmlub2N1bGFycyxjViBhcyBmYUJpb2hhemFyZCxNbSBhcyBmYUJpcnRoZGF5Q2FrZSxISCBhcyBmYUJpdGNvaW5TaWduLEtpIGFzIGZhQmxhY2tib2FyZCxIcCBhcyBmYUJsZW5kZXIsSGYgYXMgZmFCbGVuZGVyUGhvbmUsZ0MgYXMgZmFCbGluZCxkOSBhcyBmYUJsb2csb3IgYXMgZmFCb2xkLGs4IGFzIGZhQm9sdCxobiBhcyBmYUJvbHRMaWdodG5pbmcsbGkgYXMgZmFCb21iLHdnIGFzIGZhQm9uZSxZNyBhcyBmYUJvbmcsWnUgYXMgZmFCb29rLG0zIGFzIGZhQm9va0F0bGFzLGs2IGFzIGZhQm9va0JpYmxlLEVIIGFzIGZhQm9va0Jvb2ttYXJrLGx0IGFzIGZhQm9va0RlYWQsejUgYXMgZmFCb29rSm91cm5hbFdoaWxscyxOViBhcyBmYUJvb2tNZWRpY2FsLEN4IGFzIGZhQm9va09wZW4sRDggYXMgZmFCb29rT3BlblJlYWRlciwkMCBhcyBmYUJvb2tRdXJhbixBaCBhcyBmYUJvb2tSZWFkZXIsTDggYXMgZmFCb29rU2t1bGwseTYgYXMgZmFCb29rVGFuYWtoLE9zIGFzIGZhQm9va21hcmssRHUgYXMgZmFCb3JkZXJBbGwsU20gYXMgZmFCb3JkZXJOb25lLG1yIGFzIGZhQm9yZGVyU3R5bGUseDQgYXMgZmFCb3JkZXJUb3BMZWZ0LGZoIGFzIGZhQm9yZUhvbGUsTnggYXMgZmFCb3R0bGVEcm9wbGV0LGNIIGFzIGZhQm90dGxlV2F0ZXIseWkgYXMgZmFCb3dsRm9vZCxTdCBhcyBmYUJvd2xSaWNlLGp4IGFzIGZhQm93bGluZ0JhbGwscWUgYXMgZmFCb3gsTzIgYXMgZmFCb3hBcmNoaXZlLFlsIGFzIGZhQm94T3BlbixKOSBhcyBmYUJveFRpc3N1ZSxUQyBhcyBmYUJveGVzLHlDIGFzIGZhQm94ZXNBbHQsQWkgYXMgZmFCb3hlc1BhY2tpbmcsXyBhcyBmYUJveGVzU3RhY2tlZCxYbSBhcyBmYUJyYWlsbGUsSnggYXMgZmFCcmFpbixWTCBhcyBmYUJyYXppbGlhblJlYWxTaWduLEVvIGFzIGZhQnJlYWRTbGljZSxYSCBhcyBmYUJyaWRnZSxTNyBhcyBmYUJyaWRnZUNpcmNsZUNoZWNrLEhlIGFzIGZhQnJpZGdlQ2lyY2xlRXhjbGFtYXRpb24sWWEgYXMgZmFCcmlkZ2VDaXJjbGVYbWFyayxTYSBhcyBmYUJyaWRnZUxvY2ssaFYgYXMgZmFCcmlkZ2VXYXRlcixpeCBhcyBmYUJyaWVmY2FzZSxlbSBhcyBmYUJyaWVmY2FzZUNsb2NrLERwIGFzIGZhQnJpZWZjYXNlTWVkaWNhbCx3dCBhcyBmYUJyb2FkY2FzdFRvd2VyLEpkIGFzIGZhQnJvb20sdSBhcyBmYUJyb29tQmFsbCx6ZyBhcyBmYUJydXNoLFdyIGFzIGZhQnVja2V0LE5oIGFzIGZhQnVnLFNnIGFzIGZhQnVnU2xhc2gsREggYXMgZmFCdWdzLHhkIGFzIGZhQnVpbGRpbmcsdjcgYXMgZmFCdWlsZGluZ0NpcmNsZUFycm93UmlnaHQsZ3IgYXMgZmFCdWlsZGluZ0NpcmNsZUNoZWNrLHNuIGFzIGZhQnVpbGRpbmdDaXJjbGVFeGNsYW1hdGlvbixRTSBhcyBmYUJ1aWxkaW5nQ2lyY2xlWG1hcmssZiBhcyBmYUJ1aWxkaW5nQ29sdW1ucyx1biBhcyBmYUJ1aWxkaW5nRmxhZyx3ZSBhcyBmYUJ1aWxkaW5nTG9jayxIciBhcyBmYUJ1aWxkaW5nTmdvLCRMIGFzIGZhQnVpbGRpbmdTaGllbGQsSDcgYXMgZmFCdWlsZGluZ1VuLE1lIGFzIGZhQnVpbGRpbmdVc2VyLHpmIGFzIGZhQnVpbGRpbmdXaGVhdCxMZSBhcyBmYUJ1bGxob3JuLGpzIGFzIGZhQnVsbHNleWUsSjMgYXMgZmFCdXJnZXIsSTcgYXMgZmFCdXJuLG1pIGFzIGZhQnVyc3QsQXogYXMgZmFCdXMsQ3ogYXMgZmFCdXNBbHQsbDYgYXMgZmFCdXNTaW1wbGUsQjYgYXMgZmFCdXNpbmVzc1RpbWUsU2UgYXMgZmFDLHZuIGFzIGZhQ2FiLE04IGFzIGZhQ2FibGVDYXIsdG0gYXMgZmFDYWtlLFcgYXMgZmFDYWtlQ2FuZGxlcyxXTSBhcyBmYUNhbGN1bGF0b3IsTXUgYXMgZmFDYWxlbmRhcixWNyBhcyBmYUNhbGVuZGFyQWx0LE9tIGFzIGZhQ2FsZW5kYXJDaGVjayxVeCBhcyBmYUNhbGVuZGFyRGF5LEMyIGFzIGZhQ2FsZW5kYXJEYXlzLFl4IGFzIGZhQ2FsZW5kYXJNaW51cyxNdiBhcyBmYUNhbGVuZGFyUGx1cyxvViBhcyBmYUNhbGVuZGFyVGltZXMsbXQgYXMgZmFDYWxlbmRhcldlZWsscDYgYXMgZmFDYWxlbmRhclhtYXJrLEc2IGFzIGZhQ2FtZXJhLEZtIGFzIGZhQ2FtZXJhQWx0LEtsIGFzIGZhQ2FtZXJhUmV0cm8sUGUgYXMgZmFDYW1lcmFSb3RhdGUsdmEgYXMgZmFDYW1wZ3JvdW5kLHllIGFzIGZhQ2FuY2VsLFBpIGFzIGZhQ2FuZHlDYW5lLFZsIGFzIGZhQ2FubmFiaXMscXMgYXMgZmFDYXBzdWxlcyxGOCBhcyBmYUNhcixHcCBhcyBmYUNhckFsdCxONCBhcyBmYUNhckJhdHRlcnksZTAgYXMgZmFDYXJCdXJzdCx4TCBhcyBmYUNhckNyYXNoLFVtIGFzIGZhQ2FyT24sZDAgYXMgZmFDYXJSZWFyLGthIGFzIGZhQ2FyU2lkZSxtaCBhcyBmYUNhclR1bm5lbCxVdCBhcyBmYUNhcmF2YW4sbE0gYXMgZmFDYXJldERvd24sVGMgYXMgZmFDYXJldExlZnQsVjkgYXMgZmFDYXJldFJpZ2h0LGhjIGFzIGZhQ2FyZXRTcXVhcmVEb3duLHRlIGFzIGZhQ2FyZXRTcXVhcmVMZWZ0LGFjIGFzIGZhQ2FyZXRTcXVhcmVSaWdodCxrciBhcyBmYUNhcmV0U3F1YXJlVXAsWHIgYXMgZmFDYXJldFVwLFhwIGFzIGZhQ2FycmlhZ2VCYWJ5LEdkIGFzIGZhQ2Fycm90LFFDIGFzIGZhQ2FydEFycm93RG93bixlNiBhcyBmYUNhcnRGbGF0YmVkLEg1IGFzIGZhQ2FydEZsYXRiZWRTdWl0Y2FzZSxvYSBhcyBmYUNhcnRQbHVzLHM4IGFzIGZhQ2FydFNob3BwaW5nLEduIGFzIGZhQ2FzaFJlZ2lzdGVyLGpIIGFzIGZhQ2F0LGhvIGFzIGZhQ2VkaVNpZ24seE0gYXMgZmFDZW50U2lnbixFbCBhcyBmYUNlcnRpZmljYXRlLFBDIGFzIGZhQ2hhaW4sU3UgYXMgZmFDaGFpbkJyb2tlbixOdSBhcyBmYUNoYWluU2xhc2gsQ2wgYXMgZmFDaGFpcixuMyBhcyBmYUNoYWxrYm9hcmQsWUwgYXMgZmFDaGFsa2JvYXJkVGVhY2hlcixNMCBhcyBmYUNoYWxrYm9hcmRVc2VyLEw0IGFzIGZhQ2hhbXBhZ25lR2xhc3NlcyxJZSBhcyBmYUNoYXJnaW5nU3RhdGlvbixLMSBhcyBmYUNoYXJ0QXJlYSxBNCBhcyBmYUNoYXJ0QmFyLGx1IGFzIGZhQ2hhcnRDb2x1bW4sTHYgYXMgZmFDaGFydEdhbnR0LEYzIGFzIGZhQ2hhcnRMaW5lLEEzIGFzIGZhQ2hhcnRQaWUsYWUgYXMgZmFDaGFydFNpbXBsZSxfdSBhcyBmYUNoZWNrLExsIGFzIGZhQ2hlY2tDaXJjbGUsJG0gYXMgZmFDaGVja0RvdWJsZSxzYSBhcyBmYUNoZWNrU3F1YXJlLFg4IGFzIGZhQ2hlY2tUb1Nsb3QsSWQgYXMgZmFDaGVlc2UsYnYgYXMgZmFDaGVzcywkYSBhcyBmYUNoZXNzQmlzaG9wLHhyIGFzIGZhQ2hlc3NCb2FyZCxITCBhcyBmYUNoZXNzS2luZyx3ZiBhcyBmYUNoZXNzS25pZ2h0LGRoIGFzIGZhQ2hlc3NQYXduLGRyIGFzIGZhQ2hlc3NRdWVlbixMQyBhcyBmYUNoZXNzUm9vayxEYyBhcyBmYUNoZXZyb25DaXJjbGVEb3duLHlkIGFzIGZhQ2hldnJvbkNpcmNsZUxlZnQsWjUgYXMgZmFDaGV2cm9uQ2lyY2xlUmlnaHQsQmwgYXMgZmFDaGV2cm9uQ2lyY2xlVXAsY0wgYXMgZmFDaGV2cm9uRG93bixUcCBhcyBmYUNoZXZyb25MZWZ0LFVwIGFzIGZhQ2hldnJvblJpZ2h0LEthIGFzIGZhQ2hldnJvblVwLG5tIGFzIGZhQ2hpbGQsZVYgYXMgZmFDaGlsZERyZXNzLG5WIGFzIGZhQ2hpbGRSZWFjaGluZyxrdiBhcyBmYUNoaWxkUmlmbGUsUWkgYXMgZmFDaGlsZHJlbixMbyBhcyBmYUNodXJjaCxMSCBhcyBmYUNpcmNsZSxKNCBhcyBmYUNpcmNsZUFycm93RG93bixmMyBhcyBmYUNpcmNsZUFycm93TGVmdCxkMyBhcyBmYUNpcmNsZUFycm93UmlnaHQsVjQgYXMgZmFDaXJjbGVBcnJvd1VwLEc0IGFzIGZhQ2lyY2xlQ2hlY2ssVjEgYXMgZmFDaXJjbGVDaGV2cm9uRG93bixXMCBhcyBmYUNpcmNsZUNoZXZyb25MZWZ0LG0yIGFzIGZhQ2lyY2xlQ2hldnJvblJpZ2h0LE80IGFzIGZhQ2lyY2xlQ2hldnJvblVwLE0xIGFzIGZhQ2lyY2xlRG9sbGFyVG9TbG90LHUxIGFzIGZhQ2lyY2xlRG90LEE4IGFzIGZhQ2lyY2xlRG93bixIMSBhcyBmYUNpcmNsZUV4Y2xhbWF0aW9uLFUyIGFzIGZhQ2lyY2xlSCxsMCBhcyBmYUNpcmNsZUhhbGZTdHJva2UscTYgYXMgZmFDaXJjbGVJbmZvLEs2IGFzIGZhQ2lyY2xlTGVmdCxkMiBhcyBmYUNpcmNsZU1pbnVzLE5tIGFzIGZhQ2lyY2xlTm9kZXMsVTkgYXMgZmFDaXJjbGVOb3RjaCxXMyBhcyBmYUNpcmNsZVBhdXNlLHE0IGFzIGZhQ2lyY2xlUGxheSxKMCBhcyBmYUNpcmNsZVBsdXMsWTMgYXMgZmFDaXJjbGVRdWVzdGlvbixpMCBhcyBmYUNpcmNsZVJhZGlhdGlvbix5MyBhcyBmYUNpcmNsZVJpZ2h0LFc0IGFzIGZhQ2lyY2xlU3RvcCxRMyBhcyBmYUNpcmNsZVVwLHMwIGFzIGZhQ2lyY2xlVXNlcixIMiBhcyBmYUNpcmNsZVhtYXJrLFdmIGFzIGZhQ2l0eSxBTCBhcyBmYUNsYXBwZXJib2FyZCxpTSBhcyBmYUNsaW5pY01lZGljYWwsX2YgYXMgZmFDbGlwYm9hcmQsVEggYXMgZmFDbGlwYm9hcmRDaGVjayx0OSBhcyBmYUNsaXBib2FyZExpc3QsX0ggYXMgZmFDbGlwYm9hcmRRdWVzdGlvbixvbSBhcyBmYUNsaXBib2FyZFVzZXIscjggYXMgZmFDbG9jayxfdiBhcyBmYUNsb2NrRm91cixGMCBhcyBmYUNsb2NrUm90YXRlTGVmdCxrdSBhcyBmYUNsb25lLFFMIGFzIGZhQ2xvc2UsUk0gYXMgZmFDbG9zZWRDYXB0aW9uaW5nLFc5IGFzIGZhQ2xvdWQseSBhcyBmYUNsb3VkQXJyb3dEb3duLEIgYXMgZmFDbG91ZEFycm93VXAscjMgYXMgZmFDbG91ZEJvbHQsT2kgYXMgZmFDbG91ZERvd25sb2FkLFhpIGFzIGZhQ2xvdWREb3dubG9hZEFsdCxQbSBhcyBmYUNsb3VkTWVhdGJhbGwsbHggYXMgZmFDbG91ZE1vb24sdnUgYXMgZmFDbG91ZE1vb25SYWluLFhNIGFzIGZhQ2xvdWRSYWluLFVjIGFzIGZhQ2xvdWRTaG93ZXJzSGVhdnksYnIgYXMgZmFDbG91ZFNob3dlcnNXYXRlcixMZyBhcyBmYUNsb3VkU3VuLFpjIGFzIGZhQ2xvdWRTdW5SYWluLGRpIGFzIGZhQ2xvdWRVcGxvYWQsdWkgYXMgZmFDbG91ZFVwbG9hZEFsdCxIYyBhcyBmYUNsb3ZlcixLdCBhcyBmYUNueSxfbiBhcyBmYUNvY2t0YWlsLGNuIGFzIGZhQ29kZSxJSCBhcyBmYUNvZGVCcmFuY2gsUWQgYXMgZmFDb2RlQ29tbWl0LGZMIGFzIGZhQ29kZUNvbXBhcmUsR2YgYXMgZmFDb2RlRm9yayxCdCBhcyBmYUNvZGVNZXJnZSxNOSBhcyBmYUNvZGVQdWxsUmVxdWVzdCxIZyBhcyBmYUNvZmZlZSxVdiBhcyBmYUNvZyxIZCBhcyBmYUNvZ3MsdE0gYXMgZmFDb2lucyxYZiBhcyBmYUNvbG9uU2lnbixhbCBhcyBmYUNvbHVtbnMsdm0gYXMgZmFDb21tZW50LHM3IGFzIGZhQ29tbWVudEFsdCxzbSBhcyBmYUNvbW1lbnREb2xsYXIsdjYgYXMgZmFDb21tZW50RG90cyxjeiBhcyBmYUNvbW1lbnRNZWRpY2FsLEpjIGFzIGZhQ29tbWVudFNsYXNoLHI1IGFzIGZhQ29tbWVudFNtcyxXeiBhcyBmYUNvbW1lbnRpbmcsbTkgYXMgZmFDb21tZW50cyxwbyBhcyBmYUNvbW1lbnRzRG9sbGFyLER0IGFzIGZhQ29tcGFjdERpc2MsdGMgYXMgZmFDb21wYXNzLEU0IGFzIGZhQ29tcGFzc0RyYWZ0aW5nLFljIGFzIGZhQ29tcHJlc3MsZjcgYXMgZmFDb21wcmVzc0FsdCxvbCBhcyBmYUNvbXByZXNzQXJyb3dzQWx0LFhMIGFzIGZhQ29tcHV0ZXIsYTQgYXMgZmFDb21wdXRlck1vdXNlLFk5IGFzIGZhQ29uY2llcmdlQmVsbCxsOSBhcyBmYUNvbnRhY3RCb29rLG9pIGFzIGZhQ29udGFjdENhcmQsZXYgYXMgZmFDb29raWUsVXUgYXMgZmFDb29raWVCaXRlLEZMIGFzIGZhQ29weSxvcCBhcyBmYUNvcHlyaWdodCx0byBhcyBmYUNvdWNoLE9yIGFzIGZhQ293LFA4IGFzIGZhQ3JlZGl0Q2FyZCx3aCBhcyBmYUNyZWRpdENhcmRBbHQsRjcgYXMgZmFDcm9wLHV2IGFzIGZhQ3JvcEFsdCxKNiBhcyBmYUNyb3BTaW1wbGUsVWUgYXMgZmFDcm9zcyxKbSBhcyBmYUNyb3NzaGFpcnMsRnIgYXMgZmFDcm93LHBmIGFzIGZhQ3Jvd24sQ2kgYXMgZmFDcnV0Y2gsc28gYXMgZmFDcnV6ZWlyb1NpZ24sbkggYXMgZmFDdWJlLEJWIGFzIGZhQ3ViZXMscm4gYXMgZmFDdWJlc1N0YWNrZWQsc2MgYXMgZmFDdXQsdXQgYXMgZmFDdXRsZXJ5LEpnIGFzIGZhRCxmZSBhcyBmYURhc2hib2FyZCx4eCBhcyBmYURhdGFiYXNlLGFzIGFzIGZhRGVhZixzcyBhcyBmYURlYWZuZXNzLG90IGFzIGZhRGVkZW50LGg4IGFzIGZhRGVsZXRlTGVmdCx1byBhcyBmYURlbW9jcmF0LGU1IGFzIGZhRGVza3RvcCxRdSBhcyBmYURlc2t0b3BBbHQsdUMgYXMgZmFEaGFybWFjaGFrcmEsSUMgYXMgZmFEaWFnbm9zZXMsUE0gYXMgZmFEaWFncmFtTmV4dCxXNyBhcyBmYURpYWdyYW1QcmVkZWNlc3NvcixuMCBhcyBmYURpYWdyYW1Qcm9qZWN0LHN4IGFzIGZhRGlhZ3JhbVN1Y2Nlc3NvcixJeiBhcyBmYURpYW1vbmQsJDQgYXMgZmFEaWFtb25kVHVyblJpZ2h0LEt4IGFzIGZhRGljZSx5aCBhcyBmYURpY2VEMjAsRVYgYXMgZmFEaWNlRDYscnMgYXMgZmFEaWNlRml2ZSxNZCBhcyBmYURpY2VGb3VyLGh0IGFzIGZhRGljZU9uZSxNViBhcyBmYURpY2VTaXgsejcgYXMgZmFEaWNlVGhyZWUscHIgYXMgZmFEaWNlVHdvLHVWIGFzIGZhRGlnZ2luZyxvYyBhcyBmYURpZ2l0YWxUYWNob2dyYXBoLFZpIGFzIGZhRGlyZWN0aW9ucyxGcCBhcyBmYURpc2Vhc2UsJHAgYXMgZmFEaXNwbGF5LFRWIGFzIGZhRGl2aWRlLHphIGFzIGZhRGl6enksU3YgYXMgZmFEbmEscWQgYXMgZmFEb2csUmcgYXMgZmFEb2xsYXIsVjIgYXMgZmFEb2xsYXJTaWduLEQ0IGFzIGZhRG9sbHksbGwgYXMgZmFEb2xseUJveCx6eiBhcyBmYURvbGx5RmxhdGJlZCxXYyBhcyBmYURvbmF0ZSxVcyBhcyBmYURvbmdTaWduLG1WIGFzIGZhRG9vckNsb3NlZCxMNyBhcyBmYURvb3JPcGVuLEhhIGFzIGZhRG90Q2lyY2xlLG9DIGFzIGZhRG92ZSxoMiBhcyBmYURvd25MZWZ0QW5kVXBSaWdodFRvQ2VudGVyLCQ4IGFzIGZhRG93bkxvbmcsSk0gYXMgZmFEb3dubG9hZCxkbCBhcyBmYURyYWZ0aW5nQ29tcGFzcyxMdSBhcyBmYURyYWdvbixXdSBhcyBmYURyYXdQb2x5Z29uLGl0IGFzIGZhRHJpdmVyc0xpY2Vuc2UsRTggYXMgZmFEcm9wbGV0LGE4IGFzIGZhRHJvcGxldFNsYXNoLFNDIGFzIGZhRHJ1bSxqeiBhcyBmYURydW1TdGVlbHBhbixBcCBhcyBmYURydW1zdGlja0JpdGUsSHYgYXMgZmFEdW1iYmVsbCxtZSBhcyBmYUR1bXBzdGVyLFpuIGFzIGZhRHVtcHN0ZXJGaXJlLFR4IGFzIGZhRHVuZ2VvbixvZSBhcyBmYUUsciBhcyBmYUVhckRlYWYsSzggYXMgZmFFYXJMaXN0ZW4sZkMgYXMgZmFFYXJ0aCxRMiBhcyBmYUVhcnRoQWZyaWNhLHJDIGFzIGZhRWFydGhBbWVyaWNhLEMgYXMgZmFFYXJ0aEFtZXJpY2FzLHA1IGFzIGZhRWFydGhBc2lhLG41IGFzIGZhRWFydGhFdXJvcGUsWDAgYXMgZmFFYXJ0aE9jZWFuaWEsd2EgYXMgZmFFZGl0LFZhIGFzIGZhRWdnLEJuIGFzIGZhRWplY3QsdkggYXMgZmFFbGV2YXRvcixUOCBhcyBmYUVsbGlwc2lzLHBoIGFzIGZhRWxsaXBzaXNILHdNIGFzIGZhRWxsaXBzaXNWLHo4IGFzIGZhRWxsaXBzaXNWZXJ0aWNhbCxobSBhcyBmYUVudmVsb3BlLGlvIGFzIGZhRW52ZWxvcGVDaXJjbGVDaGVjayxKaSBhcyBmYUVudmVsb3BlT3BlbixNQyBhcyBmYUVudmVsb3BlT3BlblRleHQsUXggYXMgZmFFbnZlbG9wZVNxdWFyZSxSMiBhcyBmYUVudmVsb3Blc0J1bGssbnAgYXMgZmFFcXVhbHMsZUMgYXMgZmFFcmFzZXIsTWwgYXMgZmFFdGhlcm5ldCx0bCBhcyBmYUV1cixobCBhcyBmYUV1cm8sdyBhcyBmYUV1cm9TaWduLEx0IGFzIGZhRXhjaGFuZ2UsYnggYXMgZmFFeGNoYW5nZUFsdCxUZyBhcyBmYUV4Y2xhbWF0aW9uLHljIGFzIGZhRXhjbGFtYXRpb25DaXJjbGUsZHggYXMgZmFFeGNsYW1hdGlvblRyaWFuZ2xlLE9MIGFzIGZhRXhwYW5kLHN1IGFzIGZhRXhwYW5kQWx0LEVlIGFzIGZhRXhwYW5kQXJyb3dzQWx0LHI3IGFzIGZhRXhwbG9zaW9uLGZuIGFzIGZhRXh0ZXJuYWxMaW5rLEtWIGFzIGZhRXh0ZXJuYWxMaW5rQWx0LFpsIGFzIGZhRXh0ZXJuYWxMaW5rU3F1YXJlLE5jIGFzIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0LEx6IGFzIGZhRXllLFggYXMgZmFFeWVEcm9wcGVyLF9NIGFzIGZhRXllRHJvcHBlckVtcHR5LFQ0IGFzIGZhRXllTG93VmlzaW9uLEdhIGFzIGZhRXllU2xhc2gsJE0gYXMgZmFFeWVkcm9wcGVyLHpuIGFzIGZhRixjNSBhcyBmYUZhY2VBbmdyeSx4MSBhcyBmYUZhY2VEaXp6eSxqMiBhcyBmYUZhY2VGbHVzaGVkLG42IGFzIGZhRmFjZUZyb3duLEcxIGFzIGZhRmFjZUZyb3duT3BlbixNNSBhcyBmYUZhY2VHcmltYWNlLHQ4IGFzIGZhRmFjZUdyaW4sQjMgYXMgZmFGYWNlR3JpbkJlYW0sRDAgYXMgZmFGYWNlR3JpbkJlYW1Td2VhdCxBMCBhcyBmYUZhY2VHcmluSGVhcnRzLE02IGFzIGZhRmFjZUdyaW5TcXVpbnQsTzYgYXMgZmFGYWNlR3JpblNxdWludFRlYXJzLFAyIGFzIGZhRmFjZUdyaW5TdGFycyxMNiBhcyBmYUZhY2VHcmluVGVhcnMseTEgYXMgZmFGYWNlR3JpblRvbmd1ZSxYMiBhcyBmYUZhY2VHcmluVG9uZ3VlU3F1aW50LFowIGFzIGZhRmFjZUdyaW5Ub25ndWVXaW5rLFIxIGFzIGZhRmFjZUdyaW5XaWRlLFAxIGFzIGZhRmFjZUdyaW5XaW5rLFQxIGFzIGZhRmFjZUtpc3MsbjEgYXMgZmFGYWNlS2lzc0JlYW0sZzMgYXMgZmFGYWNlS2lzc1dpbmtIZWFydCx0NCBhcyBmYUZhY2VMYXVnaCxJNCBhcyBmYUZhY2VMYXVnaEJlYW0sejQgYXMgZmFGYWNlTGF1Z2hTcXVpbnQsYjggYXMgZmFGYWNlTGF1Z2hXaW5rLEM4IGFzIGZhRmFjZU1laCxjNiBhcyBmYUZhY2VNZWhCbGFuayxQMyBhcyBmYUZhY2VSb2xsaW5nRXllcyxpNiBhcyBmYUZhY2VTYWRDcnksazUgYXMgZmFGYWNlU2FkVGVhcixTMCBhcyBmYUZhY2VTbWlsZSx3MiBhcyBmYUZhY2VTbWlsZUJlYW0saTMgYXMgZmFGYWNlU21pbGVXaW5rLEczIGFzIGZhRmFjZVN1cnByaXNlLGEzIGFzIGZhRmFjZVRpcmVkLHp1IGFzIGZhRmFuLHBIIGFzIGZhRmFzdEJhY2t3YXJkLHJ6IGFzIGZhRmFzdEZvcndhcmQsYU0gYXMgZmFGYXVjZXQsSHogYXMgZmFGYXVjZXREcmlwLGtDIGFzIGZhRmF4LEtjIGFzIGZhRmVhdGhlcixrbyBhcyBmYUZlYXRoZXJBbHQsTDMgYXMgZmFGZWF0aGVyUG9pbnRlZCxHdSBhcyBmYUZlZWQsYW0gYXMgZmFGZW1hbGUsTmkgYXMgZmFGZXJyeSxhUyBhcyBmYUZpZ2h0ZXJKZXQsX2ggYXMgZmFGaWxlLGw3IGFzIGZhRmlsZUFsdCxtbyBhcyBmYUZpbGVBcmNoaXZlLHc4IGFzIGZhRmlsZUFycm93RG93bixwNCBhcyBmYUZpbGVBcnJvd1VwLHlIIGFzIGZhRmlsZUF1ZGlvLGN0IGFzIGZhRmlsZUNpcmNsZUNoZWNrLGU5IGFzIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uLHN6IGFzIGZhRmlsZUNpcmNsZU1pbnVzLHl1IGFzIGZhRmlsZUNpcmNsZVBsdXMsQ2MgYXMgZmFGaWxlQ2lyY2xlUXVlc3Rpb24sRmggYXMgZmFGaWxlQ2lyY2xlWG1hcmssdjkgYXMgZmFGaWxlQ2xpcGJvYXJkLHd6IGFzIGZhRmlsZUNvZGUscG4gYXMgZmFGaWxlQ29udHJhY3QsUTcgYXMgZmFGaWxlQ3N2LFJ0IGFzIGZhRmlsZURvd25sb2FkLGpDIGFzIGZhRmlsZUVkaXQsTG4gYXMgZmFGaWxlRXhjZWwsUjAgYXMgZmFGaWxlRXhwb3J0LFVIIGFzIGZhRmlsZUltYWdlLFo0IGFzIGZhRmlsZUltcG9ydCxvZyBhcyBmYUZpbGVJbnZvaWNlLFllIGFzIGZhRmlsZUludm9pY2VEb2xsYXIsZCBhcyBmYUZpbGVMaW5lcyx0dCBhcyBmYUZpbGVNZWRpY2FsLCRzIGFzIGZhRmlsZU1lZGljYWxBbHQsSlYgYXMgZmFGaWxlUGRmLFk4IGFzIGZhRmlsZVBlbixXaSBhcyBmYUZpbGVQb3dlcnBvaW50LHhmIGFzIGZhRmlsZVByZXNjcmlwdGlvbix4eiBhcyBmYUZpbGVTaGllbGQsS28gYXMgZmFGaWxlU2lnbmF0dXJlLGk3IGFzIGZhRmlsZVRleHQsY3IgYXMgZmFGaWxlVXBsb2FkLFFWIGFzIGZhRmlsZVZpZGVvLEUxIGFzIGZhRmlsZVdhdmVmb3JtLEdpIGFzIGZhRmlsZVdvcmQsTTMgYXMgZmFGaWxlWmlwcGVyLGtwIGFzIGZhRmlsbCxqNSBhcyBmYUZpbGxEcmlwLGtjIGFzIGZhRmlsbSxYbyBhcyBmYUZpbHRlcixqNCBhcyBmYUZpbHRlckNpcmNsZURvbGxhcixQbyBhcyBmYUZpbHRlckNpcmNsZVhtYXJrLHc3IGFzIGZhRmluZ2VycHJpbnQsUGYgYXMgZmFGaXJlLEJ1IGFzIGZhRmlyZUFsdCxPYyBhcyBmYUZpcmVCdXJuZXIsYW8gYXMgZmFGaXJlRXh0aW5ndWlzaGVyLF8wIGFzIGZhRmlyZUZsYW1lQ3VydmVkLFQyIGFzIGZhRmlyZUZsYW1lU2ltcGxlLHVoIGFzIGZhRmlyc3RBaWQsd0wgYXMgZmFGaXNoLGRuIGFzIGZhRmlzaEZpbnMscnggYXMgZmFGaXN0UmFpc2VkLFhjIGFzIGZhRmxhZyxUNyBhcyBmYUZsYWdDaGVja2VyZWQsQk0gYXMgZmFGbGFnVXNhLGdNIGFzIGZhRmxhc2ssV2EgYXMgZmFGbGFza1ZpYWwsejYgYXMgZmFGbG9wcHlEaXNrLG9oIGFzIGZhRmxvcmluU2lnbixJOSBhcyBmYUZsdXNoZWQsVzEgYXMgZmFGb2xkZXIsX3MgYXMgZmFGb2xkZXJCbGFuayxLciBhcyBmYUZvbGRlckNsb3NlZCxMcCBhcyBmYUZvbGRlck1pbnVzLFVmIGFzIGZhRm9sZGVyT3BlbixNYSBhcyBmYUZvbGRlclBsdXMsTE0gYXMgZmFGb2xkZXJUcmVlLFVDIGFzIGZhRm9udCxBIGFzIGZhRm9udEF3ZXNvbWUsTGkgYXMgZmFGb250QXdlc29tZUZsYWcscGkgYXMgZmFGb250QXdlc29tZUxvZ29GdWxsLGsyIGFzIGZhRm9vdGJhbGwseTcgYXMgZmFGb290YmFsbEJhbGwsYXQgYXMgZmFGb3J3YXJkLCQzIGFzIGZhRm9yd2FyZEZhc3QsTjIgYXMgZmFGb3J3YXJkU3RlcCx5diBhcyBmYUZyYW5jU2lnbixHciBhcyBmYUZyb2csUHogYXMgZmFGcm93bixXcyBhcyBmYUZyb3duT3BlbixRbCBhcyBmYUZ1bm5lbERvbGxhcixnIGFzIGZhRnV0Ym9sLHRhIGFzIGZhRnV0Ym9sQmFsbCx5cyBhcyBmYUcsbmEgYXMgZmFHYW1lcGFkLHBhIGFzIGZhR2FzUHVtcCxvIGFzIGZhR2F1Z2UsSiBhcyBmYUdhdWdlSGlnaCxyZSBhcyBmYUdhdWdlTWVkLHEgYXMgZmFHYXVnZVNpbXBsZSxyMiBhcyBmYUdhdWdlU2ltcGxlSGlnaCxnViBhcyBmYUdhdWdlU2ltcGxlTWVkLEoyIGFzIGZhR2F2ZWwsRmwgYXMgZmFHYnAsYzggYXMgZmFHZWFyLGIwIGFzIGZhR2VhcnMscmwgYXMgZmFHZW0sUnAgYXMgZmFHZW5kZXJsZXNzLHJhIGFzIGZhR2hvc3QsTHIgYXMgZmFHaWZ0LGNnIGFzIGZhR2lmdHMsWWYgYXMgZmFHbGFzc0NoZWVycyxNbyBhcyBmYUdsYXNzTWFydGluaSxZciBhcyBmYUdsYXNzTWFydGluaUFsdCxXdCBhcyBmYUdsYXNzV2F0ZXIsX3AgYXMgZmFHbGFzc1dhdGVyRHJvcGxldCxhbiBhcyBmYUdsYXNzV2hpc2tleSx1ciBhcyBmYUdsYXNzZXMscGUgYXMgZmFHbG9iZSxEOSBhcyBmYUdsb2JlQWZyaWNhLGxDIGFzIGZhR2xvYmVBbWVyaWNhcyxzZyBhcyBmYUdsb2JlQXNpYSxWeCBhcyBmYUdsb2JlRXVyb3BlLF9kIGFzIGZhR2xvYmVPY2VhbmlhLFRkIGFzIGZhR29sZkJhbGwsRzAgYXMgZmFHb2xmQmFsbFRlZSxZZCBhcyBmYUdvcHVyYW0sRDUgYXMgZmFHcmFkdWF0aW9uQ2FwLCRoIGFzIGZhR3JlYXRlclRoYW4sZW8gYXMgZmFHcmVhdGVyVGhhbkVxdWFsLEV4IGFzIGZhR3JpbWFjZSxaTSBhcyBmYUdyaW4sdnMgYXMgZmFHcmluQWx0LHhuIGFzIGZhR3JpbkJlYW0sd2QgYXMgZmFHcmluQmVhbVN3ZWF0LHZkIGFzIGZhR3JpbkhlYXJ0cyxPeiBhcyBmYUdyaW5TcXVpbnQsbnYgYXMgZmFHcmluU3F1aW50VGVhcnMsWjcgYXMgZmFHcmluU3RhcnMsbFYgYXMgZmFHcmluVGVhcnMsX2EgYXMgZmFHcmluVG9uZ3VlLFQ5IGFzIGZhR3JpblRvbmd1ZVNxdWludCx1dSBhcyBmYUdyaW5Ub25ndWVXaW5rLGNzIGFzIGZhR3JpbldpbmssSDAgYXMgZmFHcmlwLHFMIGFzIGZhR3JpcEhvcml6b250YWwsTWggYXMgZmFHcmlwTGluZXMsamUgYXMgZmFHcmlwTGluZXNWZXJ0aWNhbCxqdiBhcyBmYUdyaXBWZXJ0aWNhbCxUaSBhcyBmYUdyb3VwQXJyb3dzUm90YXRlLF9pIGFzIGZhR3VhcmFuaVNpZ24sYWggYXMgZmFHdWl0YXIsV0wgYXMgZmFHdW4sRW4gYXMgZmFILHFoIGFzIGZhSFNxdWFyZSxQSCBhcyBmYUhhbWJ1cmdlcixmZCBhcyBmYUhhbW1lcix1TSBhcyBmYUhhbXNhLEIxIGFzIGZhSGFuZCxrNCBhcyBmYUhhbmRCYWNrRmlzdCx4NSBhcyBmYUhhbmREb3RzLGk1IGFzIGZhSGFuZEZpc3QseHUgYXMgZmFIYW5kSG9sZGluZyx0NiBhcyBmYUhhbmRIb2xkaW5nRG9sbGFyLFc2IGFzIGZhSGFuZEhvbGRpbmdEcm9wbGV0LGJoIGFzIGZhSGFuZEhvbGRpbmdIYW5kLFpvIGFzIGZhSGFuZEhvbGRpbmdIZWFydCxpUyBhcyBmYUhhbmRIb2xkaW5nTWVkaWNhbCxYeiBhcyBmYUhhbmRIb2xkaW5nVXNkLEVtIGFzIGZhSGFuZEhvbGRpbmdXYXRlcixQcCBhcyBmYUhhbmRMaXphcmQsSnAgYXMgZmFIYW5kTWlkZGxlRmluZ2VyLEVhIGFzIGZhSGFuZFBhcGVyLHJkIGFzIGZhSGFuZFBlYWNlLFpzIGFzIGZhSGFuZFBvaW50RG93biwkZyBhcyBmYUhhbmRQb2ludExlZnQsazcgYXMgZmFIYW5kUG9pbnRSaWdodCxFcyBhcyBmYUhhbmRQb2ludFVwLEt6IGFzIGZhSGFuZFBvaW50ZXIsd3IgYXMgZmFIYW5kUm9jayxKeiBhcyBmYUhhbmRTY2lzc29ycyxVTCBhcyBmYUhhbmRTcGFya2xlcyxqYSBhcyBmYUhhbmRTcG9jayxweCBhcyBmYUhhbmRjdWZmcyxvMiBhcyBmYUhhbmRzLFJ2IGFzIGZhSGFuZHNBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZyxtIGFzIGZhSGFuZHNBc2xJbnRlcnByZXRpbmcsWmUgYXMgZmFIYW5kc0JvdW5kLEI0IGFzIGZhSGFuZHNCdWJibGVzLERWIGFzIGZhSGFuZHNDbGFwcGluZyxaaCBhcyBmYUhhbmRzSGVscGluZyxGViBhcyBmYUhhbmRzSG9sZGluZyxjYSBhcyBmYUhhbmRzSG9sZGluZ0NoaWxkLFNoIGFzIGZhSGFuZHNIb2xkaW5nQ2lyY2xlLGg2IGFzIGZhSGFuZHNQcmF5aW5nLEJyIGFzIGZhSGFuZHNXYXNoLGZsIGFzIGZhSGFuZHNoYWtlLGNTIGFzIGZhSGFuZHNoYWtlQWx0LFppIGFzIGZhSGFuZHNoYWtlQWx0U2xhc2gscTggYXMgZmFIYW5kc2hha2VBbmdsZSxUNSBhcyBmYUhhbmRzaGFrZVNpbXBsZSx6MyBhcyBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoLFdIIGFzIGZhSGFuZHNoYWtlU2xhc2gsUWMgYXMgZmFIYW51a2lhaCxJNiBhcyBmYUhhcmREcml2ZSxibiBhcyBmYUhhcmRIYXQsZXMgYXMgZmFIYXJkT2ZIZWFyaW5nLGF1IGFzIGZhSGFzaHRhZyxPSCBhcyBmYUhhdENvd2JveSxpbSBhcyBmYUhhdENvd2JveVNpZGUsQW4gYXMgZmFIYXRIYXJkLHBWIGFzIGZhSGF0V2l6YXJkLGh1IGFzIGZhSGF5a2FsLG92IGFzIGZhSGRkLHZoIGFzIGZhSGVhZFNpZGVDb3VnaCxkcyBhcyBmYUhlYWRTaWRlQ291Z2hTbGFzaCxlbCBhcyBmYUhlYWRTaWRlTWFzayxIViBhcyBmYUhlYWRTaWRlVmlydXMsZmEgYXMgZmFIZWFkZXIsTDEgYXMgZmFIZWFkaW5nLFBWIGFzIGZhSGVhZHBob25lcyxxYyBhcyBmYUhlYWRwaG9uZXNBbHQsdjEgYXMgZmFIZWFkcGhvbmVzU2ltcGxlLFFmIGFzIGZhSGVhZHNldCxLbiBhcyBmYUhlYXJ0LFNjIGFzIGZhSGVhcnRCcm9rZW4sd0MgYXMgZmFIZWFydENpcmNsZUJvbHQsem8gYXMgZmFIZWFydENpcmNsZUNoZWNrLG50IGFzIGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbixBYSBhcyBmYUhlYXJ0Q2lyY2xlTWludXMscWYgYXMgZmFIZWFydENpcmNsZVBsdXMsQnogYXMgZmFIZWFydENpcmNsZVhtYXJrLGkxIGFzIGZhSGVhcnRDcmFjayx4NyBhcyBmYUhlYXJ0TXVzaWNDYW1lcmFCb2x0LGw0IGFzIGZhSGVhcnRQdWxzZSx0ZiBhcyBmYUhlYXJ0YmVhdCxNYyBhcyBmYUhlbGljb3B0ZXIsYmwgYXMgZmFIZWxpY29wdGVyU3ltYm9sLFIgYXMgZmFIZWxtZXRTYWZldHksS3MgYXMgZmFIZWxtZXRVbixoZSBhcyBmYUhpZ2hsaWdodGVyLFVNIGFzIGZhSGlraW5nLHNpIGFzIGZhSGlsbEF2YWxhbmNoZSxreCBhcyBmYUhpbGxSb2Nrc2xpZGUscnUgYXMgZmFIaXBwbyxOZCBhcyBmYUhpc3RvcnkscmMgYXMgZmFIb2NrZXlQdWNrLEJwIGFzIGZhSG9sbHlCZXJyeSxIdCBhcyBmYUhvbWUsenQgYXMgZmFIb21lQWx0LFR6IGFzIGZhSG9tZUxnLFZ0IGFzIGZhSG9tZUxnQWx0LEpuIGFzIGZhSG9tZVVzZXIsQnMgYXMgZmFIb3JzZSxlaCBhcyBmYUhvcnNlSGVhZCxaIGFzIGZhSG9zcGl0YWwsdEMgYXMgZmFIb3NwaXRhbEFsdCxmOSBhcyBmYUhvc3BpdGFsU3ltYm9sLE85IGFzIGZhSG9zcGl0YWxVc2VyLGhDIGFzIGZhSG9zcGl0YWxXaWRlLGRhIGFzIGZhSG90VHViLFMxIGFzIGZhSG90VHViUGVyc29uLHhDIGFzIGZhSG90ZG9nLGFnIGFzIGZhSG90ZWwsUjYgYXMgZmFIb3VyZ2xhc3MsbmYgYXMgZmFIb3VyZ2xhc3MxLEJhIGFzIGZhSG91cmdsYXNzMixnYyBhcyBmYUhvdXJnbGFzczMsQW0gYXMgZmFIb3VyZ2xhc3NFbXB0eSxsMSBhcyBmYUhvdXJnbGFzc0VuZCxiMSBhcyBmYUhvdXJnbGFzc0hhbGYsZjQgYXMgZmFIb3VyZ2xhc3NTdGFydCxNIGFzIGZhSG91c2UsbzYgYXMgZmFIb3VzZUNoaW1uZXksdjMgYXMgZmFIb3VzZUNoaW1uZXlDcmFjayxpOCBhcyBmYUhvdXNlQ2hpbW5leU1lZGljYWwsSm8gYXMgZmFIb3VzZUNoaW1uZXlVc2VyLFBkIGFzIGZhSG91c2VDaGltbmV5V2luZG93LGN4IGFzIGZhSG91c2VDaXJjbGVDaGVjaywkZiBhcyBmYUhvdXNlQ2lyY2xlRXhjbGFtYXRpb24sWGEgYXMgZmFIb3VzZUNpcmNsZVhtYXJrLFluIGFzIGZhSG91c2VDcmFjayxWbyBhcyBmYUhvdXNlRGFtYWdlLG1jIGFzIGZhSG91c2VGaXJlLEJlIGFzIGZhSG91c2VGbGFnLHhhIGFzIGZhSG91c2VGbG9vZFdhdGVyLGhIIGFzIGZhSG91c2VGbG9vZFdhdGVyQ2lyY2xlQXJyb3dSaWdodCxjMyBhcyBmYUhvdXNlTGFwdG9wLElpIGFzIGZhSG91c2VMb2NrLEJkIGFzIGZhSG91c2VNZWRpY2FsLG12IGFzIGZhSG91c2VNZWRpY2FsQ2lyY2xlQ2hlY2ssRE0gYXMgZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbixtYSBhcyBmYUhvdXNlTWVkaWNhbENpcmNsZVhtYXJrLE16IGFzIGZhSG91c2VNZWRpY2FsRmxhZyxveiBhcyBmYUhvdXNlU2lnbmFsLGpyIGFzIGZhSG91c2VUc3VuYW1pLFUzIGFzIGZhSG91c2VVc2VyLFZzIGFzIGZhSHJ5dm5pYSxEMSBhcyBmYUhyeXZuaWFTaWduLHl0IGFzIGZhSHVycmljYW5lLHpzIGFzIGZhSSxvcyBhcyBmYUlDdXJzb3IsTkMgYXMgZmFJY2VDcmVhbSx4bCBhcyBmYUljaWNsZXMseDIgYXMgZmFJY29ucyxObCBhcyBmYUlkQmFkZ2UscDggYXMgZmFJZENhcmQsZWcgYXMgZmFJZENhcmRBbHQsZDUgYXMgZmFJZENhcmRDbGlwLGtzIGFzIGZhSWdsb28sVnAgYXMgZmFJbHMsRXIgYXMgZmFJbWFnZSxvNSBhcyBmYUltYWdlUG9ydHJhaXQsR00gYXMgZmFJbWFnZXMsekMgYXMgZmFJbmJveCxrbSBhcyBmYUluZGVudCxwdiBhcyBmYUluZGlhblJ1cGVlLE8gYXMgZmFJbmRpYW5SdXBlZVNpZ24scmggYXMgZmFJbmR1c3RyeSxpdSBhcyBmYUluZmluaXR5LGU3IGFzIGZhSW5mbyx5bSBhcyBmYUluZm9DaXJjbGUsZHYgYXMgZmFJbnIsT2cgYXMgZmFJbnN0aXR1dGlvbixDbyBhcyBmYUl0YWxpYyxPViBhcyBmYUoseGcgYXMgZmFKYXIsYTkgYXMgZmFKYXJXaGVhdCxNciBhcyBmYUplZGkseTUgYXMgZmFKZXRGaWdodGVyLHlMIGFzIGZhSmV0RmlnaHRlclVwLGJzIGFzIGZhSm9pbnQsTHggYXMgZmFKb3VybmFsV2hpbGxzLGp0IGFzIGZhSnB5LExMIGFzIGZhSnVnRGV0ZXJnZW50LG85IGFzIGZhSyx3biBhcyBmYUthYWJhLENlIGFzIGZhS2V5LHJNIGFzIGZhS2V5Ym9hcmQsaE0gYXMgZmFLaGFuZGEsX2cgYXMgZmFLaXBTaWduLFphIGFzIGZhS2lzcyx3YyBhcyBmYUtpc3NCZWFtLE9vIGFzIGZhS2lzc1dpbmtIZWFydCx5OCBhcyBmYUtpdE1lZGljYWwsZkggYXMgZmFLaXRjaGVuU2V0LEN0IGFzIGZhS2l3aUJpcmQsbG4gYXMgZmFLcncseWYgYXMgZmFMLHF4IGFzIGZhTGFkZGVyV2F0ZXIsaXMgYXMgZmFMYW5kTWluZU9uLEttIGFzIGZhTGFuZG1hcmssbUwgYXMgZmFMYW5kbWFya0FsdCxjMCBhcyBmYUxhbmRtYXJrRG9tZSxuOSBhcyBmYUxhbmRtYXJrRmxhZyxJbyBhcyBmYUxhbmd1YWdlLFg3IGFzIGZhTGFwdG9wLExjIGFzIGZhTGFwdG9wQ29kZSxUTSBhcyBmYUxhcHRvcEZpbGUsdmkgYXMgZmFMYXB0b3BIb3VzZSx2dCBhcyBmYUxhcHRvcE1lZGljYWwsVGwgYXMgZmFMYXJpU2lnbixSZiBhcyBmYUxhdWdoLGtsIGFzIGZhTGF1Z2hCZWFtLGtmIGFzIGZhTGF1Z2hTcXVpbnQsc2ggYXMgZmFMYXVnaFdpbmssb28gYXMgZmFMYXllckdyb3VwLFZuIGFzIGZhTGVhZixZNiBhcyBmYUxlZnRMb25nLGUzIGFzIGZhTGVmdFJpZ2h0LFE5IGFzIGZhTGVnYWwsc2wgYXMgZmFMZW1vbix6aCBhcyBmYUxlc3NUaGFuLFRyIGFzIGZhTGVzc1RoYW5FcXVhbCxMZCBhcyBmYUxldmVsRG93bixPeCBhcyBmYUxldmVsRG93bkFsdCxKdiBhcyBmYUxldmVsVXAsblMgYXMgZmFMZXZlbFVwQWx0LEZ4IGFzIGZhTGlmZVJpbmcsQmMgYXMgZmFMaWdodGJ1bGIsRG4gYXMgZmFMaW5lQ2hhcnQsbHAgYXMgZmFMaW5lc0xlYW5pbmcsUTggYXMgZmFMaW5rLEwgYXMgZmFMaW5rU2xhc2gsSG0gYXMgZmFMaXJhU2lnbixwMSBhcyBmYUxpc3QsUm8gYXMgZmFMaXN0MTIsenYgYXMgZmFMaXN0QWx0LGEwIGFzIGZhTGlzdENoZWNrLHJMIGFzIGZhTGlzdERvdHMsVW8gYXMgZmFMaXN0TnVtZXJpYyxGIGFzIGZhTGlzdE9sLGxhIGFzIGZhTGlzdFNxdWFyZXMsXzggYXMgZmFMaXN0VWwsZ20gYXMgZmFMaXRlY29pblNpZ24sYVYgYXMgZmFMb2NhdGlvbixnZSBhcyBmYUxvY2F0aW9uQXJyb3csQzYgYXMgZmFMb2NhdGlvbkNyb3NzaGFpcnMsRzggYXMgZmFMb2NhdGlvbkRvdCxUMyBhcyBmYUxvY2F0aW9uUGluLGNpIGFzIGZhTG9jYXRpb25QaW5Mb2NrLExhIGFzIGZhTG9jayxtSCBhcyBmYUxvY2tPcGVuLEZvIGFzIGZhTG9jdXN0LG9MIGFzIGZhTG9uZ0Fycm93QWx0RG93bixndiBhcyBmYUxvbmdBcnJvd0FsdExlZnQsQU0gYXMgZmFMb25nQXJyb3dBbHRSaWdodCxidCBhcyBmYUxvbmdBcnJvd0FsdFVwLEdsIGFzIGZhTG9uZ0Fycm93RG93bixBdiBhcyBmYUxvbmdBcnJvd0xlZnQsQ2ggYXMgZmFMb25nQXJyb3dSaWdodCxFNyBhcyBmYUxvbmdBcnJvd1VwLFByIGFzIGZhTG93VmlzaW9uLG14IGFzIGZhTHVnZ2FnZUNhcnQsdW0gYXMgZmFMdW5ncyxyViBhcyBmYUx1bmdzVmlydXMsS3UgYXMgZmFNLFVkIGFzIGZhTWFnaWMsaWUgYXMgZmFNYWdpY1dhbmRTcGFya2xlcyx1ZyBhcyBmYU1hZ25ldCxqOCBhcyBmYU1hZ25pZnlpbmdHbGFzcyxpYyBhcyBmYU1hZ25pZnlpbmdHbGFzc0Fycm93UmlnaHQsZW4gYXMgZmFNYWduaWZ5aW5nR2xhc3NDaGFydCxiNSBhcyBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhcixTMiBhcyBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uLFM1IGFzIGZhTWFnbmlmeWluZ0dsYXNzTWludXMsdTUgYXMgZmFNYWduaWZ5aW5nR2xhc3NQbHVzLHM5IGFzIGZhTWFpbEJ1bGssU3ggYXMgZmFNYWlsRm9yd2FyZCx6YyBhcyBmYU1haWxSZXBseSxJbCBhcyBmYU1haWxSZXBseUFsbCxPNyBhcyBmYU1hbGUsenIgYXMgZmFNYW5hdFNpZ24sdHAgYXMgZmFNYXAsTjEgYXMgZmFNYXBMb2NhdGlvbixnNCBhcyBmYU1hcExvY2F0aW9uRG90LHVhIGFzIGZhTWFwTWFya2VkLHZyIGFzIGZhTWFwTWFya2VkQWx0LE5uIGFzIGZhTWFwTWFya2VyLFloIGFzIGZhTWFwTWFya2VyQWx0LGRNIGFzIGZhTWFwUGluLHFuIGFzIGZhTWFwU2lnbnMsd2wgYXMgZmFNYXJrZXIsT3QgYXMgZmFNYXJzLGpuIGFzIGZhTWFyc0FuZFZlbnVzLGNjIGFzIGZhTWFyc0FuZFZlbnVzQnVyc3Qsc1YgYXMgZmFNYXJzRG91YmxlLHNlIGFzIGZhTWFyc1N0cm9rZSxOciBhcyBmYU1hcnNTdHJva2VILHc0IGFzIGZhTWFyc1N0cm9rZVJpZ2h0LEM0IGFzIGZhTWFyc1N0cm9rZVVwLFpmIGFzIGZhTWFyc1N0cm9rZVYsUDQgYXMgZmFNYXJ0aW5pR2xhc3MscTMgYXMgZmFNYXJ0aW5pR2xhc3NDaXRydXMsdDMgYXMgZmFNYXJ0aW5pR2xhc3NFbXB0eSxWZyBhcyBmYU1hc2ssd3ggYXMgZmFNYXNrRmFjZSxSbiBhcyBmYU1hc2tWZW50aWxhdG9yLEI1IGFzIGZhTWFza3NUaGVhdGVyLFlpIGFzIGZhTWF0dHJlc3NQaWxsb3csWTEgYXMgZmFNYXhpbWl6ZSxSaCBhcyBmYU1lZGFsLF9WIGFzIGZhTWVka2l0LGZ0IGFzIGZhTWVoLGx6IGFzIGZhTWVoQmxhbmssUG4gYXMgZmFNZWhSb2xsaW5nRXllcyxFYyBhcyBmYU1lbW9yeSxLNyBhcyBmYU1lbm9yYWgsQ2QgYXMgZmFNZXJjdXJ5LHQyIGFzIGZhTWVzc2FnZSxSbSBhcyBmYU1ldGVvcixMZiBhcyBmYU1pY3JvY2hpcCxJciBhcyBmYU1pY3JvcGhvbmUsRWYgYXMgZmFNaWNyb3Bob25lQWx0LGc3IGFzIGZhTWljcm9waG9uZUFsdFNsYXNoLGg0IGFzIGZhTWljcm9waG9uZUxpbmVzLGcyIGFzIGZhTWljcm9waG9uZUxpbmVzU2xhc2gsajkgYXMgZmFNaWNyb3Bob25lU2xhc2gsVGEgYXMgZmFNaWNyb3Njb3BlLGd0IGFzIGZhTWlsbFNpZ24sUjQgYXMgZmFNaW5pbWl6ZSxfNiBhcyBmYU1pbnVzLEM3IGFzIGZhTWludXNDaXJjbGUsdmMgYXMgZmFNaW51c1NxdWFyZSxSYSBhcyBmYU1pdHRlbixRIGFzIGZhTW9iaWxlLGtIIGFzIGZhTW9iaWxlQWx0LHN0IGFzIGZhTW9iaWxlQW5kcm9pZCx6TSBhcyBmYU1vYmlsZUFuZHJvaWRBbHQsdnogYXMgZmFNb2JpbGVCdXR0b24sZXQgYXMgZmFNb2JpbGVQaG9uZSxLZSBhcyBmYU1vYmlsZVJldHJvLG84IGFzIGZhTW9iaWxlU2NyZWVuLEszIGFzIGZhTW9iaWxlU2NyZWVuQnV0dG9uLElzIGFzIGZhTW9uZXlCaWxsLFo2IGFzIGZhTW9uZXlCaWxsMSxtNSBhcyBmYU1vbmV5QmlsbDFXYXZlLHh2IGFzIGZhTW9uZXlCaWxsQWx0LE1IIGFzIGZhTW9uZXlCaWxsVHJhbnNmZXIsdEggYXMgZmFNb25leUJpbGxUcmVuZFVwLGJlIGFzIGZhTW9uZXlCaWxsV2F2ZSxQeCBhcyBmYU1vbmV5QmlsbFdhdmVBbHQsc3YgYXMgZmFNb25leUJpbGxXaGVhdCx0aSBhcyBmYU1vbmV5QmlsbHMsX28gYXMgZmFNb25leUNoZWNrLEdvIGFzIGZhTW9uZXlDaGVja0FsdCx4MyBhcyBmYU1vbmV5Q2hlY2tEb2xsYXIsbmwgYXMgZmFNb251bWVudCxXZCBhcyBmYU1vb24sbFMgYXMgZmFNb3J0YXJCb2FyZCxTcyBhcyBmYU1vcnRhclBlc3RsZSxHdiBhcyBmYU1vc3F1ZSxXdiBhcyBmYU1vc3F1aXRvLHRWIGFzIGZhTW9zcXVpdG9OZXQsWjkgYXMgZmFNb3RvcmN5Y2xlLFB0IGFzIGZhTW91bmQsQm0gYXMgZmFNb3VudGFpbixNTSBhcyBmYU1vdW50YWluQ2l0eSxCaCBhcyBmYU1vdW50YWluU3VuLHNmIGFzIGZhTW91c2UsV2UgYXMgZmFNb3VzZVBvaW50ZXIsaHIgYXMgZmFNdWdIb3QsZzUgYXMgZmFNdWdTYXVjZXIsS0wgYXMgZmFNdWx0aXBseSxYZyBhcyBmYU11c2V1bSxYZCBhcyBmYU11c2ljLElNIGFzIGZhTixYQyBhcyBmYU5haXJhU2lnbix1YyBhcyBmYU5hdmljb24scE0gYXMgZmFOZXR3b3JrV2lyZWQsU2wgYXMgZmFOZXV0ZXIsQm8gYXMgZmFOZXdzcGFwZXIsVnIgYXMgZmFOb3RFcXVhbCx3NSBhcyBmYU5vdGVTdGlja3ksUHMgYXMgZmFOb3Rlc01lZGljYWwsWVYgYXMgZmFPLEZuIGFzIGZhT2JqZWN0R3JvdXAsZ24gYXMgZmFPYmplY3RVbmdyb3VwLGV1IGFzIGZhT2lsQ2FuLEV0IGFzIGZhT2lsV2VsbCxJYSBhcyBmYU9tLGNtIGFzIGZhT3R0ZXIsZDggYXMgZmFPdXRkZW50LGJvIGFzIGZhUCxyOSBhcyBmYVBhZ2VyLENhIGFzIGZhUGFpbnRCcnVzaCxKaCBhcyBmYVBhaW50Um9sbGVyLGcxIGFzIGZhUGFpbnRicnVzaCx4aSBhcyBmYVBhbGV0dGUsY00gYXMgZmFQYWxsZXQsJEggYXMgZmFQYW5vcmFtYSxBeCBhcyBmYVBhcGVyUGxhbmUsTG0gYXMgZmFQYXBlcmNsaXAsd20gYXMgZmFQYXJhY2h1dGVCb3gsYkMgYXMgZmFQYXJhZ3JhcGgsaXogYXMgZmFQYXJraW5nLE1mIGFzIGZhUGFzc3BvcnQsXzcgYXMgZmFQYXN0YWZhcmlhbmlzbSxXMiBhcyBmYVBhc3RlLGFpIGFzIGZhUGF1c2UsYUggYXMgZmFQYXVzZUNpcmNsZSxHOSBhcyBmYVBhdyxuZCBhcyBmYVBlYWNlLFN6IGFzIGZhUGVuLG5lIGFzIGZhUGVuQWx0LE8xIGFzIGZhUGVuQ2xpcCxkViBhcyBmYVBlbkZhbmN5LEZkIGFzIGZhUGVuTmliLFkyIGFzIGZhUGVuUnVsZXIsWkMgYXMgZmFQZW5TcXVhcmUsdzEgYXMgZmFQZW5Ub1NxdWFyZSxHMiBhcyBmYVBlbmNpbCxIOSBhcyBmYVBlbmNpbEFsdCxfOSBhcyBmYVBlbmNpbFJ1bGVyLFlDIGFzIGZhUGVuY2lsU3F1YXJlLF8yIGFzIGZhUGVvcGxlQXJyb3dzLCQ5IGFzIGZhUGVvcGxlQXJyb3dzTGVmdFJpZ2h0LGhmIGFzIGZhUGVvcGxlQ2FycnksaTQgYXMgZmFQZW9wbGVDYXJyeUJveCx4YyBhcyBmYVBlb3BsZUdyb3VwLHE3IGFzIGZhUGVvcGxlTGluZSxFTSBhcyBmYVBlb3BsZVB1bGxpbmcsQWMgYXMgZmFQZW9wbGVSb2JiZXJ5LFU3IGFzIGZhUGVvcGxlUm9vZixJZiBhcyBmYVBlcHBlckhvdCxnMCBhcyBmYVBlcmNlbnQsWnAgYXMgZmFQZXJjZW50YWdlLHkyIGFzIGZhUGVyc29uLG51IGFzIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lLHg5IGFzIGZhUGVyc29uQXJyb3dVcEZyb21MaW5lLE8wIGFzIGZhUGVyc29uQmlraW5nLENWIGFzIGZhUGVyc29uQm9vdGgsVmYgYXMgZmFQZXJzb25CcmVhc3RmZWVkaW5nLGlDIGFzIGZhUGVyc29uQnVyc3QsWm0gYXMgZmFQZXJzb25DYW5lLFNyIGFzIGZhUGVyc29uQ2hhbGtib2FyZCxvUyBhcyBmYVBlcnNvbkNpcmNsZUNoZWNrLCRDIGFzIGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb24sVGUgYXMgZmFQZXJzb25DaXJjbGVNaW51cyxNbiBhcyBmYVBlcnNvbkNpcmNsZVBsdXMsV24gYXMgZmFQZXJzb25DaXJjbGVRdWVzdGlvbixxViBhcyBmYVBlcnNvbkNpcmNsZVhtYXJrLHg2IGFzIGZhUGVyc29uRGlnZ2luZyxKOCBhcyBmYVBlcnNvbkRvdHNGcm9tTGluZSxBNiBhcyBmYVBlcnNvbkRyZXNzLHFvIGFzIGZhUGVyc29uRHJlc3NCdXJzdCxiOSBhcyBmYVBlcnNvbkRyb3duaW5nLG94IGFzIGZhUGVyc29uRmFsbGluZyxwZCBhcyBmYVBlcnNvbkZhbGxpbmdCdXJzdCx1ZSBhcyBmYVBlcnNvbkhhbGZEcmVzcyx6TCBhcyBmYVBlcnNvbkhhcmFzc2luZyx2OCBhcyBmYVBlcnNvbkhpa2luZyxFZyBhcyBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcsSXYgYXMgZmFQZXJzb25NaWxpdGFyeVJpZmxlLHV6IGFzIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbix3MCBhcyBmYVBlcnNvblByYXlpbmcsU00gYXMgZmFQZXJzb25QcmVnbmFudCxVYSBhcyBmYVBlcnNvblJheXMsRk0gYXMgZmFQZXJzb25SaWZsZSxjNCBhcyBmYVBlcnNvblJ1bm5pbmcsZ2wgYXMgZmFQZXJzb25TaGVsdGVyLEs0IGFzIGZhUGVyc29uU2thdGluZyxoMyBhcyBmYVBlcnNvblNraWluZyxRNiBhcyBmYVBlcnNvblNraWluZ05vcmRpYyxmMCBhcyBmYVBlcnNvblNub3dib2FyZGluZyxXOCBhcyBmYVBlcnNvblN3aW1taW5nLHhoIGFzIGZhUGVyc29uVGhyb3VnaFdpbmRvdyxtNCBhcyBmYVBlcnNvbldhbGtpbmcsYnUgYXMgZmFQZXJzb25XYWxraW5nQXJyb3dMb29wTGVmdCxYeCBhcyBmYVBlcnNvbldhbGtpbmdBcnJvd1JpZ2h0LFBsIGFzIGZhUGVyc29uV2Fsa2luZ0Rhc2hlZExpbmVBcnJvd1JpZ2h0LFZ1IGFzIGZhUGVyc29uV2Fsa2luZ0x1Z2dhZ2UsTzggYXMgZmFQZXJzb25XYWxraW5nV2l0aENhbmUsZWEgYXMgZmFQZXNldGFTaWduLF9MIGFzIGZhUGVzb1NpZ24saVYgYXMgZmFQaG9uZSxRSCBhcyBmYVBob25lQWx0LF8zIGFzIGZhUGhvbmVGbGlwLGpoIGFzIGZhUGhvbmVTbGFzaCxFTCBhcyBmYVBob25lU3F1YXJlLGlhIGFzIGZhUGhvbmVTcXVhcmVBbHQsUDYgYXMgZmFQaG9uZVZvbHVtZSxDMCBhcyBmYVBob3RvRmlsbSxDcCBhcyBmYVBob3RvVmlkZW8sdG4gYXMgZmFQaWVDaGFydCxtTSBhcyBmYVBpZ2d5QmFuayxtcyBhcyBmYVBpbGxzLFdDIGFzIGZhUGluZ1BvbmdQYWRkbGVCYWxsLGtlIGFzIGZhUGl6emFTbGljZSxLdiBhcyBmYVBsYWNlT2ZXb3JzaGlwLEFnIGFzIGZhUGxhbmUsdHYgYXMgZmFQbGFuZUFycml2YWwseW4gYXMgZmFQbGFuZUNpcmNsZUNoZWNrLF9lIGFzIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbixRdCBhcyBmYVBsYW5lQ2lyY2xlWG1hcmssR0ggYXMgZmFQbGFuZURlcGFydHVyZSxWbSBhcyBmYVBsYW5lTG9jayx4SCBhcyBmYVBsYW5lU2xhc2gsVk0gYXMgZmFQbGFuZVVwLEV6IGFzIGZhUGxhbnRXaWx0LHVsIGFzIGZhUGxhdGVXaGVhdCxSQyBhcyBmYVBsYXksbWwgYXMgZmFQbGF5Q2lyY2xlLFFhIGFzIGZhUGx1ZyxRbiBhcyBmYVBsdWdDaXJjbGVCb2x0LEJ2IGFzIGZhUGx1Z0NpcmNsZUNoZWNrLGd1IGFzIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uLHVwIGFzIGZhUGx1Z0NpcmNsZU1pbnVzLFF2IGFzIGZhUGx1Z0NpcmNsZVBsdXMsUWggYXMgZmFQbHVnQ2lyY2xlWG1hcmssbTAgYXMgZmFQbHVzLGR1IGFzIGZhUGx1c0NpcmNsZSxmUyBhcyBmYVBsdXNNaW51cyxVciBhcyBmYVBsdXNTcXVhcmUsR2ggYXMgZmFQb2RjYXN0LHRyIGFzIGZhUG9sbCxDSCBhcyBmYVBvbGxILHdWIGFzIGZhUG9vLEdzIGFzIGZhUG9vQm9sdCxxMSBhcyBmYVBvb1N0b3JtLFNuIGFzIGZhUG9vcCxueCBhcyBmYVBvcnRyYWl0LERsIGFzIGZhUG91bmRTaWduLGJNIGFzIGZhUG93ZXJPZmYsZWQgYXMgZmFQcmF5LFp6IGFzIGZhUHJheWluZ0hhbmRzLEZ6IGFzIGZhUHJlc2NyaXB0aW9uLGRjIGFzIGZhUHJlc2NyaXB0aW9uQm90dGxlLFFtIGFzIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0LEU2IGFzIGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbCxQZyBhcyBmYVByaW50LEZmIGFzIGZhUHJvY2VkdXJlcyxQTCBhcyBmYVByb2plY3REaWFncmFtLE43IGFzIGZhUHVtcE1lZGljYWwsV3AgYXMgZmFQdW1wU29hcCxZbyBhcyBmYVB1enpsZVBpZWNlLFRzIGFzIGZhUSxTZCBhcyBmYVFyY29kZSxRbyBhcyBmYVF1ZXN0aW9uLHFIIGFzIGZhUXVlc3Rpb25DaXJjbGUsUzkgYXMgZmFRdWlkZGl0Y2gsTjkgYXMgZmFRdWlkZGl0Y2hCcm9vbUJhbGwsdDAgYXMgZmFRdW90ZUxlZnQsc3AgYXMgZmFRdW90ZUxlZnRBbHQsZzYgYXMgZmFRdW90ZVJpZ2h0LGtWIGFzIGZhUXVvdGVSaWdodEFsdCxQdSBhcyBmYVF1cmFuLHJIIGFzIGZhUixjZSBhcyBmYVJhZGlhdGlvbixCTCBhcyBmYVJhZGlhdGlvbkFsdCxPcCBhcyBmYVJhZGlvLFI5IGFzIGZhUmFpbmJvdyxYZSBhcyBmYVJhbmRvbSxuTCBhcyBmYVJhbmtpbmdTdGFyLEpDIGFzIGZhUmVjZWlwdCxKNyBhcyBmYVJlY29yZFZpbnlsLHAzIGFzIGZhUmVjdGFuZ2xlQWQsWDYgYXMgZmFSZWN0YW5nbGVMaXN0LHZ4IGFzIGZhUmVjdGFuZ2xlVGltZXMscCBhcyBmYVJlY3RhbmdsZVhtYXJrLGRIIGFzIGZhUmVjeWNsZSwkeiBhcyBmYVJlZG8scHQgYXMgZmFSZWRvQWx0LCRpIGFzIGZhUmVmcmVzaCxpaSBhcyBmYVJlZ2lzdGVyZWQsakwgYXMgZmFSZW1vdmUsVWkgYXMgZmFSZW1vdmVGb3JtYXQscEMgYXMgZmFSZW9yZGVyLFJlIGFzIGZhUmVwZWF0LHMxIGFzIGZhUmVwbHksUTQgYXMgZmFSZXBseUFsbCxSViBhcyBmYVJlcHVibGljYW4sSVYgYXMgZmFSZXN0cm9vbSxxcCBhcyBmYVJldHdlZXQsZG0gYXMgZmFSaWJib24sdTIgYXMgZmFSaWdodEZyb21CcmFja2V0LFY1IGFzIGZhUmlnaHRMZWZ0LFY4IGFzIGZhUmlnaHRMb25nLHI0IGFzIGZhUmlnaHRUb0JyYWNrZXQsbjcgYXMgZmFSaW5nLEp0IGFzIGZhUm1iLG1uIGFzIGZhUm9hZCxOcyBhcyBmYVJvYWRCYXJyaWVyLHhlIGFzIGZhUm9hZEJyaWRnZSxmcyBhcyBmYVJvYWRDaXJjbGVDaGVjayxCeCBhcyBmYVJvYWRDaXJjbGVFeGNsYW1hdGlvbixqZiBhcyBmYVJvYWRDaXJjbGVYbWFyayxTbyBhcyBmYVJvYWRMb2NrLEljIGFzIGZhUm9hZFNwaWtlcyxvZCBhcyBmYVJvYm90LGhwIGFzIGZhUm9ja2V0LENzIGFzIGZhUm9kQXNjbGVwaXVzLExzIGFzIGZhUm9kU25ha2UsazAgYXMgZmFSb3RhdGUsX3IgYXMgZmFSb3RhdGVCYWNrLCRyIGFzIGZhUm90YXRlQmFja3dhcmQsZHQgYXMgZmFSb3RhdGVGb3J3YXJkLG4gYXMgZmFSb3RhdGVMZWZ0LEsgYXMgZmFSb3RhdGVSaWdodCxZdCBhcyBmYVJvdWJsZSxZSCBhcyBmYVJvdXRlLGE1IGFzIGZhUnNzLGxzIGFzIGZhUnNzU3F1YXJlLF90IGFzIGZhUnViLCR0IGFzIGZhUnVibGUsdCBhcyBmYVJ1YmxlU2lnbix6eCBhcyBmYVJ1ZyxHViBhcyBmYVJ1bGVyLGlwIGFzIGZhUnVsZXJDb21iaW5lZCxiYyBhcyBmYVJ1bGVySG9yaXpvbnRhbCx2ZyBhcyBmYVJ1bGVyVmVydGljYWwsUWUgYXMgZmFSdW5uaW5nLFJIIGFzIGZhUnVwZWUsWjMgYXMgZmFSdXBlZVNpZ24scUMgYXMgZmFSdXBpYWhTaWduLGVNIGFzIGZhUyxOYSBhcyBmYVNhY2tEb2xsYXIsQ24gYXMgZmFTYWNrWG1hcmsscHogYXMgZmFTYWRDcnksYmcgYXMgZmFTYWRUZWFyLERyIGFzIGZhU2FpbGJvYXQsem0gYXMgZmFTYXRlbGxpdGUsTkggYXMgZmFTYXRlbGxpdGVEaXNoLFJ6IGFzIGZhU2F2ZSxzNSBhcyBmYVNjYWxlQmFsYW5jZWQsVjYgYXMgZmFTY2FsZVVuYmFsYW5jZWQsXzQgYXMgZmFTY2FsZVVuYmFsYW5jZWRGbGlwLHdzIGFzIGZhU2Nob29sLFZlIGFzIGZhU2Nob29sQ2lyY2xlQ2hlY2ssUDcgYXMgZmFTY2hvb2xDaXJjbGVFeGNsYW1hdGlvbixQYyBhcyBmYVNjaG9vbENpcmNsZVhtYXJrLHdwIGFzIGZhU2Nob29sRmxhZyxsTCBhcyBmYVNjaG9vbExvY2ssYzEgYXMgZmFTY2lzc29ycyxRciBhcyBmYVNjcmV3ZHJpdmVyLFIzIGFzIGZhU2NyZXdkcml2ZXJXcmVuY2gsX2wgYXMgZmFTY3JvbGwsSTIgYXMgZmFTY3JvbGxUb3JhaCxDdSBhcyBmYVNkQ2FyZCxHQyBhcyBmYVNlYXJjaCxHZyBhcyBmYVNlYXJjaERvbGxhcixiNyBhcyBmYVNlYXJjaExvY2F0aW9uLG1nIGFzIGZhU2VhcmNoTWludXMsZmcgYXMgZmFTZWFyY2hQbHVzLFZDIGFzIGZhU2VjdGlvbixzMyBhcyBmYVNlZWRsaW5nLHJmIGFzIGZhU2VydmVyLF8xIGFzIGZhU2hhcGVzLGkyIGFzIGZhU2hhcmUsYmEgYXMgZmFTaGFyZUFsdCxzUyBhcyBmYVNoYXJlQWx0U3F1YXJlLHowIGFzIGZhU2hhcmVGcm9tU3F1YXJlLGsxIGFzIGZhU2hhcmVOb2RlcyxHTCBhcyBmYVNoYXJlU3F1YXJlLHA5IGFzIGZhU2hlZXRQbGFzdGljLG1wIGFzIGZhU2hla2VsLGUgYXMgZmFTaGVrZWxTaWduLHZwIGFzIGZhU2hlcWVsLE1wIGFzIGZhU2hlcWVsU2lnbixVMCBhcyBmYVNoaWVsZCxmbyBhcyBmYVNoaWVsZEFsdCxiZCBhcyBmYVNoaWVsZEJsYW5rLHF0IGFzIGZhU2hpZWxkQ2F0LHpIIGFzIGZhU2hpZWxkRG9nLFYzIGFzIGZhU2hpZWxkSGFsdmVkLFpkIGFzIGZhU2hpZWxkSGVhcnQsdlYgYXMgZmFTaGllbGRWaXJ1cyxLTSBhcyBmYVNoaXAsTkwgYXMgZmFTaGlwcGluZ0Zhc3QsRyBhcyBmYVNoaXJ0LHB1IGFzIGZhU2hvZVByaW50cyxINiBhcyBmYVNob3Asb2YgYXMgZmFTaG9wTG9jayxlNCBhcyBmYVNob3BTbGFzaCxQYSBhcyBmYVNob3BwaW5nQmFnLHR6IGFzIGZhU2hvcHBpbmdCYXNrZXQsT3YgYXMgZmFTaG9wcGluZ0NhcnQsWHUgYXMgZmFTaG93ZXIsaEwgYXMgZmFTaHJpbXAsJDEgYXMgZmFTaHVmZmxlLE00IGFzIGZhU2h1dHRsZVNwYWNlLHZlIGFzIGZhU2h1dHRsZVZhbix4cCBhcyBmYVNpZ24sTDAgYXMgZmFTaWduSGFuZ2luZyxlZiBhcyBmYVNpZ25JbixtZiBhcyBmYVNpZ25JbkFsdCxEeCBhcyBmYVNpZ25MYW5ndWFnZSxGYyBhcyBmYVNpZ25PdXQscDcgYXMgZmFTaWduT3V0QWx0LFUgYXMgZmFTaWduYWwsa3ogYXMgZmFTaWduYWw1LGJ6IGFzIGZhU2lnbmFsUGVyZmVjdCxsciBhcyBmYVNpZ25hdHVyZSxSeCBhcyBmYVNpZ25pbmcsRDMgYXMgZmFTaWduc1Bvc3QsdGQgYXMgZmFTaW1DYXJkLHlhIGFzIGZhU2luayxHYyBhcyBmYVNpdGVtYXAsWGwgYXMgZmFTa2F0aW5nLGdvIGFzIGZhU2tpaW5nLHZ2IGFzIGZhU2tpaW5nTm9yZGljLE50IGFzIGZhU2t1bGwsZUwgYXMgZmFTa3VsbENyb3NzYm9uZXMsYWYgYXMgZmFTbGFzaCxxbSBhcyBmYVNsZWlnaCxIOCBhcyBmYVNsaWRlcnMsQ00gYXMgZmFTbGlkZXJzSCxjZCBhcyBmYVNtaWxlLEI3IGFzIGZhU21pbGVCZWFtLHFpIGFzIGZhU21pbGVXaW5rLGhpIGFzIGZhU21vZyxpbCBhcyBmYVNtb2tpbmcsVnogYXMgZmFTbW9raW5nQmFuLEp1IGFzIGZhU21zLFNMIGFzIGZhU25vd2JvYXJkaW5nLEFvIGFzIGZhU25vd2ZsYWtlLGdzIGFzIGZhU25vd21hbixIbCBhcyBmYVNub3dwbG93LHU3IGFzIGZhU29hcCxoYSBhcyBmYVNvY2NlckJhbGwsSEMgYXMgZmFTb2NrcyxWSCBhcyBmYVNvbGFyUGFuZWwsdTMgYXMgZmFTb3J0LGN2IGFzIGZhU29ydEFscGhhQXNjLEZhIGFzIGZhU29ydEFscGhhRGVzYyxhdiBhcyBmYVNvcnRBbHBoYURvd24sRGEgYXMgZmFTb3J0QWxwaGFEb3duQWx0LE5mIGFzIGZhU29ydEFscGhhVXAsQXUgYXMgZmFTb3J0QWxwaGFVcEFsdCxGaSBhcyBmYVNvcnRBbW91bnRBc2MsbmggYXMgZmFTb3J0QW1vdW50RGVzYyxEaSBhcyBmYVNvcnRBbW91bnREb3duLEhoIGFzIGZhU29ydEFtb3VudERvd25BbHQseHQgYXMgZmFTb3J0QW1vdW50VXAsQWQgYXMgZmFTb3J0QW1vdW50VXBBbHQsR3ogYXMgZmFTb3J0QXNjLGg3IGFzIGZhU29ydERlc2MscDIgYXMgZmFTb3J0RG93bixHbSBhcyBmYVNvcnROdW1lcmljQXNjLEE5IGFzIGZhU29ydE51bWVyaWNEZXNjLFdtIGFzIGZhU29ydE51bWVyaWNEb3duLEI5IGFzIGZhU29ydE51bWVyaWNEb3duQWx0LFZWIGFzIGZhU29ydE51bWVyaWNVcCx4bSBhcyBmYVNvcnROdW1lcmljVXBBbHQsbTYgYXMgZmFTb3J0VXAsJGwgYXMgZmFTcGEsRGYgYXMgZmFTcGFjZVNodXR0bGUsRjIgYXMgZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nLGNmIGFzIGZhU3BlbGxDaGVjayxKZSBhcyBmYVNwaWRlcixpZCBhcyBmYVNwaW5uZXIsbWQgYXMgZmFTcGxvdGNoLEQyIGFzIGZhU3Bvb24seTkgYXMgZmFTcHJheUNhbixKMSBhcyBmYVNwcmF5Q2FuU3BhcmtsZXMsa2kgYXMgZmFTcHJvdXQsdm8gYXMgZmFTcXVhcmUsWTQgYXMgZmFTcXVhcmVBcnJvd1VwUmlnaHQsZjEgYXMgZmFTcXVhcmVDYXJldERvd24sUTEgYXMgZmFTcXVhcmVDYXJldExlZnQsJDIgYXMgZmFTcXVhcmVDYXJldFJpZ2h0LGI0IGFzIGZhU3F1YXJlQ2FyZXRVcCxDMSBhcyBmYVNxdWFyZUNoZWNrLEM1IGFzIGZhU3F1YXJlRW52ZWxvcGUsZGcgYXMgZmFTcXVhcmVGdWxsLFU4IGFzIGZhU3F1YXJlSCxlMSBhcyBmYVNxdWFyZU1pbnVzLEpyIGFzIGZhU3F1YXJlTmZpLGE2IGFzIGZhU3F1YXJlUGFya2luZyxjMiBhcyBmYVNxdWFyZVBlbixVbCBhcyBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkLFYwIGFzIGZhU3F1YXJlUGhvbmUsZDEgYXMgZmFTcXVhcmVQaG9uZUZsaXAseTQgYXMgZmFTcXVhcmVQbHVzLEkzIGFzIGZhU3F1YXJlUG9sbEhvcml6b250YWwsUzQgYXMgZmFTcXVhcmVQb2xsVmVydGljYWwsWXYgYXMgZmFTcXVhcmVSb290QWx0LGY4IGFzIGZhU3F1YXJlUm9vdFZhcmlhYmxlLEYxIGFzIGZhU3F1YXJlUnNzLFA1IGFzIGZhU3F1YXJlU2hhcmVOb2RlcyxvMSBhcyBmYVNxdWFyZVVwUmlnaHQsRG0gYXMgZmFTcXVhcmVWaXJ1cyxmMiBhcyBmYVNxdWFyZVhtYXJrLHBzIGFzIGZhU3RhZmZBZXNjdWxhcGl1cyxsIGFzIGZhU3RhZmZTbmFrZSxIcyBhcyBmYVN0YWlycyxucyBhcyBmYVN0YW1wLFpnIGFzIGZhU3RhcGxlcixEZSBhcyBmYVN0YXIsVmMgYXMgZmFTdGFyQW5kQ3Jlc2NlbnQsQkMgYXMgZmFTdGFySGFsZiwkbyBhcyBmYVN0YXJIYWxmQWx0LE4zIGFzIGZhU3RhckhhbGZTdHJva2UsRXYgYXMgZmFTdGFyT2ZEYXZpZCxLaCBhcyBmYVN0YXJPZkxpZmUsJHYgYXMgZmFTdGVwQmFja3dhcmQsQTcgYXMgZmFTdGVwRm9yd2FyZCxrIGFzIGZhU3RlcmxpbmdTaWduLGE3IGFzIGZhU3RldGhvc2NvcGUsZ2cgYXMgZmFTdGlja3lOb3RlLEF0IGFzIGZhU3RvcCxwbCBhcyBmYVN0b3BDaXJjbGUsSmEgYXMgZmFTdG9wd2F0Y2gscGcgYXMgZmFTdG9wd2F0Y2gyMCxwcCBhcyBmYVN0b3JlLER6IGFzIGZhU3RvcmVBbHQsZmYgYXMgZmFTdG9yZUFsdFNsYXNoLEtmIGFzIGZhU3RvcmVTbGFzaCxkQyBhcyBmYVN0cmVhbSxUdiBhcyBmYVN0cmVldFZpZXcsaTkgYXMgZmFTdHJpa2V0aHJvdWdoLGlyIGFzIGZhU3Ryb29wd2FmZWwsemkgYXMgZmFTdWJzY3JpcHQsd3YgYXMgZmFTdWJ0cmFjdCxDdiBhcyBmYVN1YndheSxPbCBhcyBmYVN1aXRjYXNlLGI2IGFzIGZhU3VpdGNhc2VNZWRpY2FsLF9DIGFzIGZhU3VpdGNhc2VSb2xsaW5nLGNoIGFzIGZhU3VuLGVjIGFzIGZhU3VuUGxhbnRXaWx0LFhoIGFzIGZhU3VwZXJzY3JpcHQsJG4gYXMgZmFTdXJwcmlzZSxwYyBhcyBmYVN3YXRjaGJvb2ssY0MgYXMgZmFTd2ltbWVyLEd4IGFzIGZhU3dpbW1pbmdQb29sLGRlIGFzIGZhU3luYWdvZ3VlLGNvIGFzIGZhU3luYyxsZCBhcyBmYVN5bmNBbHQsQ2cgYXMgZmFTeXJpbmdlLGZ1IGFzIGZhVCxiViBhcyBmYVRTaGlydCxsYyBhcyBmYVRhYmxlLHc2IGFzIGZhVGFibGVDZWxscyxUNiBhcyBmYVRhYmxlQ2VsbHNMYXJnZSxGNCBhcyBmYVRhYmxlQ29sdW1ucyxmNSBhcyBmYVRhYmxlTGlzdCxFQyBhcyBmYVRhYmxlVGVubmlzLCQgYXMgZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGwscDAgYXMgZmFUYWJsZXQscTkgYXMgZmFUYWJsZXRBbHQsTnAgYXMgZmFUYWJsZXRBbmRyb2lkLE5lIGFzIGZhVGFibGV0QnV0dG9uLEsyIGFzIGZhVGFibGV0U2NyZWVuQnV0dG9uLHZsIGFzIGZhVGFibGV0cyxhMSBhcyBmYVRhY2hvZ3JhcGhEaWdpdGFsLEl1IGFzIGZhVGFjaG9tZXRlcixtQyBhcyBmYVRhY2hvbWV0ZXJBbHQsbGUgYXMgZmFUYWNob21ldGVyQWx0QXZlcmFnZSx2QyBhcyBmYVRhY2hvbWV0ZXJBbHRGYXN0LFNWIGFzIGZhVGFjaG9tZXRlckF2ZXJhZ2UsT3UgYXMgZmFUYWNob21ldGVyRmFzdCxtbSBhcyBmYVRhZyxleiBhcyBmYVRhZ3Mscm0gYXMgZmFUYW5ha2gsaHogYXMgZmFUYXBlLEluIGFzIGZhVGFycCxWdiBhcyBmYVRhcnBEcm9wbGV0LENMIGFzIGZhVGFza3MsbnogYXMgZmFUYXNrc0FsdCxiMyBhcyBmYVRheGksenAgYXMgZmFUZWV0aCxheiBhcyBmYVRlZXRoT3Blbix5TSBhcyBmYVRlbGV0eXBlLE1MIGFzIGZhVGVsZXZpc2lvbixlaSBhcyBmYVRlbXBlcmF0dXJlMCxsSCBhcyBmYVRlbXBlcmF0dXJlMSxGcyBhcyBmYVRlbXBlcmF0dXJlMixvTSBhcyBmYVRlbXBlcmF0dXJlMyxXaCBhcyBmYVRlbXBlcmF0dXJlNCxDMyBhcyBmYVRlbXBlcmF0dXJlQXJyb3dEb3duLFI4IGFzIGZhVGVtcGVyYXR1cmVBcnJvd1VwLHdvIGFzIGZhVGVtcGVyYXR1cmVEb3duLEggYXMgZmFUZW1wZXJhdHVyZUVtcHR5LGggYXMgZmFUZW1wZXJhdHVyZUZ1bGwsaSBhcyBmYVRlbXBlcmF0dXJlSGFsZixDZiBhcyBmYVRlbXBlcmF0dXJlSGlnaCxLZCBhcyBmYVRlbXBlcmF0dXJlTG93LHogYXMgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsdiBhcyBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycyxEaCBhcyBmYVRlbXBlcmF0dXJlVXAseVYgYXMgZmFUZW5nZSxTNiBhcyBmYVRlbmdlU2lnbixZbSBhcyBmYVRlbnQsV2wgYXMgZmFUZW50QXJyb3dEb3duVG9MaW5lLFg5IGFzIGZhVGVudEFycm93TGVmdFJpZ2h0LERkIGFzIGZhVGVudEFycm93VHVybkxlZnQsQmcgYXMgZmFUZW50QXJyb3dzRG93bixSZCBhcyBmYVRlbnRzLG16IGFzIGZhVGVybWluYWwsJDUgYXMgZmFUZXh0SGVpZ2h0LGwzIGFzIGZhVGV4dFNsYXNoLExWIGFzIGZhVGV4dFdpZHRoLGpWIGFzIGZhVGgsZm0gYXMgZmFUaExhcmdlLGp1IGFzIGZhVGhMaXN0LFlnIGFzIGZhVGhlYXRlck1hc2tzLEtwIGFzIGZhVGhlcm1vbWV0ZXIsZmkgYXMgZmFUaGVybW9tZXRlcjAsaUggYXMgZmFUaGVybW9tZXRlcjEsRHMgYXMgZmFUaGVybW9tZXRlcjIsbk0gYXMgZmFUaGVybW9tZXRlcjMsRWggYXMgZmFUaGVybW9tZXRlcjQscmkgYXMgZmFUaGVybW9tZXRlckVtcHR5LEloIGFzIGZhVGhlcm1vbWV0ZXJGdWxsLFJzIGFzIGZhVGhlcm1vbWV0ZXJIYWxmLG9IIGFzIGZhVGhlcm1vbWV0ZXJRdWFydGVyLEhNIGFzIGZhVGhlcm1vbWV0ZXJUaHJlZVF1YXJ0ZXJzLGFkIGFzIGZhVGh1bWJUYWNrLHRoIGFzIGZhVGh1bWJzRG93bixyZyBhcyBmYVRodW1ic1VwLE4wIGFzIGZhVGh1bWJ0YWNrLFJpIGFzIGZhVGh1bmRlcnN0b3JtLGtNIGFzIGZhVGlja2V0LHVkIGFzIGZhVGlja2V0QWx0LHkwIGFzIGZhVGlja2V0U2ltcGxlLGZNIGFzIGZhVGltZWxpbmUsSkwgYXMgZmFUaW1lcyxfeCBhcyBmYVRpbWVzQ2lyY2xlLE14IGFzIGZhVGltZXNSZWN0YW5nbGUsJGQgYXMgZmFUaW1lc1NxdWFyZSxzQyBhcyBmYVRpbnQscXYgYXMgZmFUaW50U2xhc2gsTWkgYXMgZmFUaXJlZCx3OSBhcyBmYVRvZ2dsZU9mZixCZiBhcyBmYVRvZ2dsZU9uLFh0IGFzIGZhVG9pbGV0LGtuIGFzIGZhVG9pbGV0UGFwZXIsc0ggYXMgZmFUb2lsZXRQYXBlclNsYXNoLEZ0IGFzIGZhVG9pbGV0UG9ydGFibGUsZmMgYXMgZmFUb2lsZXRzUG9ydGFibGUsZ2ggYXMgZmFUb29sYm94LE9uIGFzIGZhVG9vbHMsTXMgYXMgZmFUb290aCxnOSBhcyBmYVRvcmFoLHFyIGFzIGZhVG9yaWlHYXRlLFR1IGFzIGZhVG9ybmFkbyxTOCBhcyBmYVRvd2VyQnJvYWRjYXN0LGlMIGFzIGZhVG93ZXJDZWxsLE56IGFzIGZhVG93ZXJPYnNlcnZhdGlvbixlcCBhcyBmYVRyYWN0b3IsZ0ggYXMgZmFUcmFkZW1hcmssUXAgYXMgZmFUcmFmZmljTGlnaHQsdHUgYXMgZmFUcmFpbGVyLHlyIGFzIGZhVHJhaW4sajYgYXMgZmFUcmFpblN1YndheSx0ZyBhcyBmYVRyYWluVHJhbSxPTSBhcyBmYVRyYW0sQjAgYXMgZmFUcmFuc2dlbmRlcixoZCBhcyBmYVRyYW5zZ2VuZGVyQWx0LHhWIGFzIGZhVHJhc2gsXzUgYXMgZmFUcmFzaEFsdCxoMCBhcyBmYVRyYXNoQXJyb3dVcCx2MiBhcyBmYVRyYXNoQ2FuLFo4IGFzIGZhVHJhc2hDYW5BcnJvd1VwLGZwIGFzIGZhVHJhc2hSZXN0b3JlLE9DIGFzIGZhVHJhc2hSZXN0b3JlQWx0LGdhIGFzIGZhVHJlZSxEQyBhcyBmYVRyZWVDaXR5LE9lIGFzIGZhVHJpYW5nbGVDaXJjbGVTcXVhcmUsbDIgYXMgZmFUcmlhbmdsZUV4Y2xhbWF0aW9uLHNkIGFzIGZhVHJvcGh5LGpnIGFzIGZhVHJvd2VsLEU5IGFzIGZhVHJvd2VsQnJpY2tzLGptIGFzIGZhVHJ1Y2ssZXggYXMgZmFUcnVja0Fycm93UmlnaHQsUGggYXMgZmFUcnVja0Ryb3BsZXQscjAgYXMgZmFUcnVja0Zhc3QsWkggYXMgZmFUcnVja0ZpZWxkLGJtIGFzIGZhVHJ1Y2tGaWVsZFVuLEtIIGFzIGZhVHJ1Y2tGcm9udCxoOSBhcyBmYVRydWNrTG9hZGluZyxVMSBhcyBmYVRydWNrTWVkaWNhbCxQOSBhcyBmYVRydWNrTW9uc3RlcixZcCBhcyBmYVRydWNrTW92aW5nLGt0IGFzIGZhVHJ1Y2tQaWNrdXAsajcgYXMgZmFUcnVja1BsYW5lLEUyIGFzIGZhVHJ1Y2tSYW1wQm94LEZnIGFzIGZhVHJ5LEFWIGFzIGZhVHNoaXJ0LG04IGFzIGZhVHR5LERnIGFzIGZhVHVya2lzaExpcmEsejIgYXMgZmFUdXJraXNoTGlyYVNpZ24saDUgYXMgZmFUdXJuRG93bixSNSBhcyBmYVR1cm5VcCxzMiBhcyBmYVR2LHRMIGFzIGZhVHZBbHQsWnYgYXMgZmFVLEtnIGFzIGZhVW1icmVsbGEsUXMgYXMgZmFVbWJyZWxsYUJlYWNoLGZyIGFzIGZhVW5kZXJsaW5lLGl2IGFzIGZhVW5kbyxjbCBhcyBmYVVuZG9BbHQsQWwgYXMgZmFVbml2ZXJzYWxBY2Nlc3MsUWcgYXMgZmFVbml2ZXJzaXR5LHd1IGFzIGZhVW5saW5rLE9mIGFzIGZhVW5sb2NrLFJjIGFzIGZhVW5sb2NrQWx0LG0xIGFzIGZhVW5sb2NrS2V5aG9sZSxEbyBhcyBmYVVuc29ydGVkLEswIGFzIGZhVXBEb3duLFMzIGFzIGZhVXBEb3duTGVmdFJpZ2h0LE44IGFzIGZhVXBMb25nLFEwIGFzIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlcixONiBhcyBmYVVwUmlnaHRGcm9tU3F1YXJlLFR0IGFzIGZhVXBsb2FkLFVnIGFzIGZhVXNkLHplIGFzIGZhVXNlcixNZyBhcyBmYVVzZXJBbHQsamkgYXMgZmFVc2VyQWx0U2xhc2gsdUggYXMgZmFVc2VyQXN0cm9uYXV0LEM5IGFzIGZhVXNlckNoZWNrLHBMIGFzIGZhVXNlckNpcmNsZSxsZyBhcyBmYVVzZXJDbG9jayx6ViBhcyBmYVVzZXJDb2csVTYgYXMgZmFVc2VyRG9jdG9yLHJyIGFzIGZhVXNlckVkaXQsU2YgYXMgZmFVc2VyRnJpZW5kcyxkNiBhcyBmYVVzZXJHZWFyLGtMIGFzIGZhVXNlckdyYWR1YXRlLG40IGFzIGZhVXNlckdyb3VwLGtnIGFzIGZhVXNlckluanVyZWQsTjUgYXMgZmFVc2VyTGFyZ2UsSDMgYXMgZmFVc2VyTGFyZ2VTbGFzaCxoaCBhcyBmYVVzZXJMb2NrLFRtIGFzIGZhVXNlck1kLEpmIGFzIGZhVXNlck1pbnVzLHU5IGFzIGZhVXNlck5pbmphLGhnIGFzIGZhVXNlck51cnNlLHU0IGFzIGZhVXNlclBlbixZdSBhcyBmYVVzZXJQbHVzLCRWIGFzIGZhVXNlclNlY3JldCxkTCBhcyBmYVVzZXJTaGllbGQsZ3ogYXMgZmFVc2VyU2xhc2gsSHggYXMgZmFVc2VyVGFnLHFsIGFzIGZhVXNlclRpZSxjNyBhcyBmYVVzZXJUaW1lcyxNMiBhcyBmYVVzZXJYbWFyayxxYSBhcyBmYVVzZXJzLGZWIGFzIGZhVXNlcnNCZXR3ZWVuTGluZXMsV2cgYXMgZmFVc2Vyc0NvZyxBNSBhcyBmYVVzZXJzR2VhcixhcCBhcyBmYVVzZXJzTGluZSxBSCBhcyBmYVVzZXJzUmF5cyxSNyBhcyBmYVVzZXJzUmVjdGFuZ2xlLG5jIGFzIGZhVXNlcnNTbGFzaCxYViBhcyBmYVVzZXJzVmlld2ZpbmRlcixjOSBhcyBmYVV0ZW5zaWxTcG9vbix4OCBhcyBmYVV0ZW5zaWxzLHRzIGFzIGZhVixYMSBhcyBmYVZhblNodXR0bGUsSXQgYXMgZmFWYXVsdCxuaSBhcyBmYVZjYXJkLFdvIGFzIGZhVmVjdG9yU3F1YXJlLHZmIGFzIGZhVmVudXMscU0gYXMgZmFWZW51c0RvdWJsZSxHZSBhcyBmYVZlbnVzTWFycyxTaSBhcyBmYVZlc3QsX20gYXMgZmFWZXN0UGF0Y2hlcyxlZSBhcyBmYVZpYWwsb3UgYXMgZmFWaWFsQ2lyY2xlQ2hlY2ssTDkgYXMgZmFWaWFsVmlydXMsWHYgYXMgZmFWaWFscyxGNSBhcyBmYVZpZGVvLHJTIGFzIGZhVmlkZW9DYW1lcmEsRXAgYXMgZmFWaWRlb1NsYXNoLFV6IGFzIGZhVmloYXJhLGxvIGFzIGZhVmlydXMsbm4gYXMgZmFWaXJ1c0NvdmlkLGxmIGFzIGZhVmlydXNDb3ZpZFNsYXNoLE52IGFzIGZhVmlydXNTbGFzaCxSbCBhcyBmYVZpcnVzZXMsSHUgYXMgZmFWb2ljZW1haWwseWwgYXMgZmFWb2xjYW5vLEwyIGFzIGZhVm9sbGV5YmFsbCxNNyBhcyBmYVZvbGxleWJhbGxCYWxsLGxtIGFzIGZhVm9sdW1lQ29udHJvbFBob25lLGpjIGFzIGZhVm9sdW1lRG93bixqMyBhcyBmYVZvbHVtZUhpZ2gsdDEgYXMgZmFWb2x1bWVMb3csREwgYXMgZmFWb2x1bWVNdXRlLFB2IGFzIGZhVm9sdW1lT2ZmLFJMIGFzIGZhVm9sdW1lVGltZXMsYkggYXMgZmFWb2x1bWVVcCxlMiBhcyBmYVZvbHVtZVhtYXJrLEFDIGFzIGZhVm90ZVllYSxqcCBhcyBmYVZyQ2FyZGJvYXJkLEY5IGFzIGZhVyxLQyBhcyBmYVdhbGtpZVRhbGtpZSxUZiBhcyBmYVdhbGtpbmcsQkggYXMgZmFXYWxsZXQsRTAgYXMgZmFXYW5kTWFnaWMsSTEgYXMgZmFXYW5kTWFnaWNTcGFya2xlcyxOTSBhcyBmYVdhbmRTcGFya2xlcyx6ZCBhcyBmYVdhcmVob3VzZSx1eCBhcyBmYVdhcm5pbmcsSW0gYXMgZmFXYXRlcixuMiBhcyBmYVdhdGVyTGFkZGVyLG83IGFzIGZhV2F2ZVNxdWFyZSxnZiBhcyBmYVdlaWdodCxkZiBhcyBmYVdlaWdodEhhbmdpbmcsbzQgYXMgZmFXZWlnaHRTY2FsZSxfYyBhcyBmYVdoZWF0QWx0LGgxIGFzIGZhV2hlYXRBd24seHMgYXMgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uLGJmIGFzIGZhV2hlZWxjaGFpcixJeCBhcyBmYVdoZWVsY2hhaXJBbHQsdDUgYXMgZmFXaGVlbGNoYWlyTW92ZSx3MyBhcyBmYVdoaXNrZXlHbGFzcyxOIGFzIGZhV2lmaSxhciBhcyBmYVdpZmkzLHNyIGFzIGZhV2lmaVN0cm9uZyx1TCBhcyBmYVdpbmQsdHggYXMgZmFXaW5kb3dDbG9zZSx5eiBhcyBmYVdpbmRvd01heGltaXplLG5nIGFzIGZhV2luZG93TWluaW1pemUsUnIgYXMgZmFXaW5kb3dSZXN0b3JlLENDIGFzIGZhV2luZUJvdHRsZSxmeiBhcyBmYVdpbmVHbGFzcyxFZCBhcyBmYVdpbmVHbGFzc0FsdCxJMCBhcyBmYVdpbmVHbGFzc0VtcHR5LG9uIGFzIGZhV29uLEQgYXMgZmFXb25TaWduLE9hIGFzIGZhV29ybSxGSCBhcyBmYVdyZW5jaCxxZyBhcyBmYVgsJGUgYXMgZmFYUmF5LHMgYXMgZmFYbWFyaywkeCBhcyBmYVhtYXJrQ2lyY2xlLGN1IGFzIGZhWG1hcmtTcXVhcmUsdWYgYXMgZmFYbWFya3NMaW5lcyxnTCBhcyBmYVksWnQgYXMgZmFZZW4sYSBhcyBmYVllblNpZ24sT2QgYXMgZmFZaW5ZYW5nLHhvIGFzIGZhWixHdCBhcyBmYVphcCx6UyBhcyBmYXMsSFMgYXMgcHJlZml4fTtcbiIsICJpbXBvcnQgeyBpc01hY0xpa2UgfSBmcm9tIFwiLi4vLi4vY29tbW9uL3V0aWwudHNcIjtcbmltcG9ydCB7IEZpbHRlckxpc3QgfSBmcm9tIFwiLi9maWx0ZXIudHN4XCI7XG5pbXBvcnQgeyBmYVBlcnNvblJ1bm5pbmcgfSBmcm9tIFwiaHR0cHM6Ly9lc20uc2gvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zQDYuMi4wXCI7XG5pbXBvcnQgeyBBcHBDb21tYW5kIH0gZnJvbSBcIi4uL2hvb2tzL2NvbW1hbmQudHNcIjtcbmltcG9ydCB7IEZpbHRlck9wdGlvbiB9IGZyb20gXCIuLi8uLi9jb21tb24vdHlwZXMudHNcIjtcblxuaW1wb3J0IHtSZWFjdH0gZnJvbSBcIi4uLy4uLy4uL2RlcF93ZWIudHNcIlxuXG5cbmV4cG9ydCBmdW5jdGlvbiBDb21tYW5kUGFsZXR0ZSh7XG4gIGNvbW1hbmRzLFxuICByZWNlbnRDb21tYW5kcyxcbiAgb25UcmlnZ2VyLFxufToge1xuICBjb21tYW5kczogTWFwPHN0cmluZywgQXBwQ29tbWFuZD47XG4gIHJlY2VudENvbW1hbmRzOiBNYXA8c3RyaW5nLCBEYXRlPjtcbiAgb25UcmlnZ2VyOiAoY29tbWFuZDogQXBwQ29tbWFuZCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbn0pIHtcbiAgbGV0IG9wdGlvbnM6IEZpbHRlck9wdGlvbltdID0gW107XG4gIGNvbnN0IGlzTWFjID0gaXNNYWNMaWtlKCk7XG4gIGZvciAobGV0IFtuYW1lLCBkZWZdIG9mIGNvbW1hbmRzLmVudHJpZXMoKSkge1xuICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgaGludDogaXNNYWMgJiYgZGVmLmNvbW1hbmQubWFjID8gZGVmLmNvbW1hbmQubWFjIDogZGVmLmNvbW1hbmQua2V5LFxuICAgICAgb3JkZXJJZDogcmVjZW50Q29tbWFuZHMuaGFzKG5hbWUpXG4gICAgICAgID8gLXJlY2VudENvbW1hbmRzLmdldChuYW1lKSEuZ2V0VGltZSgpXG4gICAgICAgIDogMCxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxGaWx0ZXJMaXN0XG4gICAgICBsYWJlbD1cIlJ1blwiXG4gICAgICBwbGFjZWhvbGRlcj1cIkNvbW1hbmRcIlxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIGFsbG93TmV3PXtmYWxzZX1cbiAgICAgIGljb249e2ZhUGVyc29uUnVubmluZ31cbiAgICAgIGhlbHBUZXh0PVwiU3RhcnQgdHlwaW5nIHRoZSBjb21tYW5kIG5hbWUgdG8gZmlsdGVyIHJlc3VsdHMsIHByZXNzIDxjb2RlPlJldHVybjwvY29kZT4gdG8gcnVuLlwiXG4gICAgICBvblNlbGVjdD17KG9wdCkgPT4ge1xuICAgICAgICBpZiAob3B0KSB7XG4gICAgICAgICAgb25UcmlnZ2VyKGNvbW1hbmRzLmdldChvcHQubmFtZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uVHJpZ2dlcih1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgIC8+XG4gICk7XG59XG4iLCAiaW1wb3J0IHsgRmlsdGVyTGlzdCB9IGZyb20gXCIuL2ZpbHRlci50c3hcIjtcbmltcG9ydCB7IEZpbHRlck9wdGlvbiwgUGFnZU1ldGEgfSBmcm9tIFwiLi4vLi4vY29tbW9uL3R5cGVzLnRzXCI7XG5cbmltcG9ydCB7UmVhY3R9IGZyb20gXCIuLi8uLi8uLi9kZXBfd2ViLnRzXCJcblxuXG5leHBvcnQgZnVuY3Rpb24gUGFnZU5hdmlnYXRvcih7XG4gIGFsbFBhZ2VzLFxuICBvbk5hdmlnYXRlLFxuICBjdXJyZW50UGFnZSxcbn06IHtcbiAgYWxsUGFnZXM6IFNldDxQYWdlTWV0YT47XG4gIG9uTmF2aWdhdGU6IChwYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIGN1cnJlbnRQYWdlPzogc3RyaW5nO1xufSkge1xuICBsZXQgb3B0aW9uczogRmlsdGVyT3B0aW9uW10gPSBbXTtcbiAgZm9yIChsZXQgcGFnZU1ldGEgb2YgYWxsUGFnZXMpIHtcbiAgICAvLyBPcmRlciBieSBsYXN0IG1vZGlmaWVkIGRhdGUgaW4gZGVzY2VuZGluZyBvcmRlclxuICAgIGxldCBvcmRlcklkID0gLXBhZ2VNZXRhLmxhc3RNb2RpZmllZDtcbiAgICAvLyBVbmxlc3MgaXQgd2FzIG9wZW5lZCBpbiB0aGlzIHNlc3Npb25cbiAgICBpZiAocGFnZU1ldGEubGFzdE9wZW5lZCkge1xuICAgICAgb3JkZXJJZCA9IC1wYWdlTWV0YS5sYXN0T3BlbmVkO1xuICAgIH1cbiAgICAvLyBPciBpdCdzIHRoZSBjdXJyZW50bHkgb3BlbiBwYWdlXG4gICAgaWYgKGN1cnJlbnRQYWdlICYmIGN1cnJlbnRQYWdlID09PSBwYWdlTWV0YS5uYW1lKSB7XG4gICAgICAvLyAuLi4gdGhlbiB3ZSBwdXQgaXQgYWxsIHRoZSB3YXkgdG8gdGhlIGVuZFxuICAgICAgb3JkZXJJZCA9IEluZmluaXR5O1xuICAgIH1cbiAgICBvcHRpb25zLnB1c2goe1xuICAgICAgLi4ucGFnZU1ldGEsXG4gICAgICBvcmRlcklkOiBvcmRlcklkLFxuICAgIH0pO1xuICB9XG4gIGxldCBjb21wbGV0ZVByZWZpeDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBpZiAoY3VycmVudFBhZ2UgJiYgY3VycmVudFBhZ2UuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgY29uc3QgcGllY2VzID0gY3VycmVudFBhZ2Uuc3BsaXQoXCIvXCIpO1xuICAgIGNvbXBsZXRlUHJlZml4ID0gcGllY2VzLnNsaWNlKDAsIHBpZWNlcy5sZW5ndGggLSAxKS5qb2luKFwiL1wiKSArIFwiL1wiO1xuICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlICYmIGN1cnJlbnRQYWdlLmluY2x1ZGVzKFwiIFwiKSkge1xuICAgIGNvbXBsZXRlUHJlZml4ID0gY3VycmVudFBhZ2Uuc3BsaXQoXCIgXCIpWzBdICsgXCIgXCI7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8RmlsdGVyTGlzdFxuICAgICAgcGxhY2Vob2xkZXI9XCJQYWdlXCJcbiAgICAgIGxhYmVsPVwiT3BlblwiXG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgLy8gaWNvbj17ZmFGaWxlTGluZXN9XG4gICAgICBhbGxvd05ldz17dHJ1ZX1cbiAgICAgIGhlbHBUZXh0PVwiU3RhcnQgdHlwaW5nIHRoZSBwYWdlIG5hbWUgdG8gZmlsdGVyIHJlc3VsdHMsIHByZXNzIDxjb2RlPlJldHVybjwvY29kZT4gdG8gb3Blbi5cIlxuICAgICAgbmV3SGludD1cIkNyZWF0ZSBwYWdlXCJcbiAgICAgIGNvbXBsZXRlUHJlZml4PXtjb21wbGV0ZVByZWZpeH1cbiAgICAgIG9uU2VsZWN0PXsob3B0KSA9PiB7XG4gICAgICAgIG9uTmF2aWdhdGUob3B0Py5uYW1lKTtcbiAgICAgIH19XG4gICAgLz5cbiAgKTtcbn1cbiIsICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCIuLi8uLi8uLi9kZXBfd2ViLnRzXCI7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tIFwiLi4vZWRpdG9yLnRzeFwiO1xuaW1wb3J0IHsgUGFuZWxDb25maWcgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcblxuaW1wb3J0IHtSZWFjdH0gZnJvbSBcIi4uLy4uLy4uL2RlcF93ZWIudHNcIjtcblxuY29uc3QgcGFuZWxIdG1sID0gYDwhRE9DVFlQRSBodG1sPlxuPGh0bWwgbGFuZz1cImVuXCI+XG48aGVhZD5cbiAgICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgICA8YmFzZSB0YXJnZXQ9XCJfdG9wXCI+XG48c2NyaXB0Plxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIChtZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGRhdGEgPSBtZXNzYWdlLmRhdGE7XG4gIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgY2FzZSBcImh0bWxcIjpcbiAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gZGF0YS5odG1sO1xuICAgICAgaWYgKGRhdGEuc2NyaXB0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZXZhbChkYXRhLnNjcmlwdCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZXZhbGluZyBzY3JpcHRcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc2VuZEV2ZW50KG5hbWUsIC4uLmFyZ3MpIHtcbiAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShcbiAgICB7XG4gICAgICB0eXBlOiBcImV2ZW50XCIsXG4gICAgICBuYW1lLFxuICAgICAgYXJncyxcbiAgICB9LFxuICAgIFwiKlwiXG4gICk7XG59XG48L3NjcmlwdD5cbjwvaGVhZD5cbjxib2R5PlxuU2VuZCBtZSBIVE1MXG48L2JvZHk+XG48L2h0bWw+YDtcblxuZXhwb3J0IGZ1bmN0aW9uIFBhbmVsKHtcbiAgY29uZmlnLFxuICBlZGl0b3IsXG59OiB7XG4gIGNvbmZpZzogUGFuZWxDb25maWc7XG4gIGVkaXRvcjogRWRpdG9yO1xufSkge1xuICBjb25zdCBpRnJhbWVSZWYgPSB1c2VSZWY8SFRNTElGcmFtZUVsZW1lbnQ+KG51bGwpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZ1bmN0aW9uIGxvYWRDb250ZW50KCkge1xuICAgICAgaWYgKGlGcmFtZVJlZi5jdXJyZW50Py5jb250ZW50V2luZG93KSB7XG4gICAgICAgIGlGcmFtZVJlZi5jdXJyZW50LmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHR5cGU6IFwiaHRtbFwiLFxuICAgICAgICAgIGh0bWw6IGNvbmZpZy5odG1sLFxuICAgICAgICAgIHNjcmlwdDogY29uZmlnLnNjcmlwdCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaUZyYW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGlmcmFtZSA9IGlGcmFtZVJlZi5jdXJyZW50O1xuICAgIGlmcmFtZS5vbmxvYWQgPSBsb2FkQ29udGVudDtcbiAgICBsb2FkQ29udGVudCgpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZnJhbWUub25sb2FkID0gbnVsbDtcbiAgICB9O1xuICB9LCBbY29uZmlnLmh0bWwsIGNvbmZpZy5zY3JpcHRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBtZXNzYWdlTGlzdGVuZXIgPSAoZXZ0OiBhbnkpID0+IHtcbiAgICAgIGlmIChldnQuc291cmNlICE9PSBpRnJhbWVSZWYuY3VycmVudCEuY29udGVudFdpbmRvdykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZGF0YSA9IGV2dC5kYXRhO1xuICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgICBpZiAoZGF0YS50eXBlID09PSBcImV2ZW50XCIpIHtcbiAgICAgICAgZWRpdG9yLmRpc3BhdGNoQXBwRXZlbnQoZGF0YS5uYW1lLCAuLi5kYXRhLmFyZ3MpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG1lc3NhZ2VMaXN0ZW5lcik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBtZXNzYWdlTGlzdGVuZXIpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwic2ItcGFuZWxcIiBzdHlsZT17eyBmbGV4OiBjb25maWcubW9kZSB9fT5cbiAgICAgIDxpZnJhbWUgc3JjRG9jPXtwYW5lbEh0bWx9IHJlZj17aUZyYW1lUmVmfSAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwgImltcG9ydCB7XG4gIGZhSG9tZSxcbiAgZmFNb29uLFxuICBmYVJ1bm5pbmcsXG4gIGZhU3VuLFxufSBmcm9tIFwiaHR0cHM6Ly9lc20uc2gvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zQDYuMi4wXCI7XG5pbXBvcnQgeyBGb250QXdlc29tZUljb24gfSBmcm9tIFwiaHR0cHM6Ly9lc20uc2gvQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lQDAuMi4wXCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi9kZXBfd2ViLnRzXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcbmltcG9ydCB7IGlzTWFjTGlrZSB9IGZyb20gXCIuLi8uLi9jb21tb24vdXRpbC50c1wiO1xuaW1wb3J0IHsgUmVhY3QgfSBmcm9tIFwiLi4vLi4vLi4vZGVwX3dlYi50c1wiO1xuXG5mdW5jdGlvbiBwcmV0dHlOYW1lKHM6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHJldHVybiBzLnJlcGxhY2VBbGwoXCIvXCIsIFwiIC8gXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVG9wQmFyKHtcbiAgcGFnZU5hbWUsXG4gIHVuc2F2ZWRDaGFuZ2VzLFxuICBpc0xvYWRpbmcsXG4gIG5vdGlmaWNhdGlvbnMsXG4gIG9uQ2xpY2ssXG4gIG9uVGhlbWVDbGljayxcbiAgb25Ib21lQ2xpY2ssXG4gIG9uQWN0aW9uQ2xpY2ssXG4gIGxocyxcbiAgcmhzLFxufToge1xuICBwYWdlTmFtZT86IHN0cmluZztcbiAgdW5zYXZlZENoYW5nZXM6IGJvb2xlYW47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uW107XG4gIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gIG9uVGhlbWVDbGljazogKCkgPT4gdm9pZDtcbiAgb25Ib21lQ2xpY2s6ICgpID0+IHZvaWQ7XG4gIG9uQWN0aW9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gIGxocz86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgcmhzPzogUmVhY3QuUmVhY3ROb2RlO1xufSkge1xuICBjb25zdCBbdGhlbWUsIHNldFRoZW1lXSA9IHVzZVN0YXRlPHN0cmluZz4obG9jYWxTdG9yYWdlLnRoZW1lID8/IFwibGlnaHRcIik7XG5cbiAgY29uc3QgaXNNYWMgPSBpc01hY0xpa2UoKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgaWQ9XCJzYi10b3BcIiBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgIHtsaHN9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1haW5cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJpbm5lclwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9e2BzYi1jdXJyZW50LXBhZ2UgJHtcbiAgICAgICAgICAgICAgaXNMb2FkaW5nXG4gICAgICAgICAgICAgICAgPyBcInNiLWxvYWRpbmdcIlxuICAgICAgICAgICAgICAgIDogdW5zYXZlZENoYW5nZXNcbiAgICAgICAgICAgICAgICA/IFwic2ItdW5zYXZlZFwiXG4gICAgICAgICAgICAgICAgOiBcInNiLXNhdmVkXCJcbiAgICAgICAgICAgIH1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtwcmV0dHlOYW1lKHBhZ2VOYW1lKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge25vdGlmaWNhdGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNiLW5vdGlmaWNhdGlvbnNcIj5cbiAgICAgICAgICAgICAge25vdGlmaWNhdGlvbnMubWFwKChub3RpZmljYXRpb24pID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e25vdGlmaWNhdGlvbi5pZH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YHNiLW5vdGlmaWNhdGlvbi0ke25vdGlmaWNhdGlvbi50eXBlfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge25vdGlmaWNhdGlvbi5tZXNzYWdlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzYi1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgb25Ib21lQ2xpY2soKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0aXRsZT1cIk5hdmlnYXRlIHRvIHRoZSAnaW5kZXgnIHBhZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIGljb249e2ZhSG9tZX0gLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIG9uQWN0aW9uQ2xpY2soKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0aXRsZT17XCJPcGVuIHRoZSBjb21tYW5kIHBhbGV0dGUgKFwiICsgKGlzTWFjID8gXCJDbWRcIiA6IFwiQ3RybFwiKSArXG4gICAgICAgICAgICAgICAgXCIrLylcIn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEZvbnRBd2Vzb21lSWNvbiBpY29uPXtmYVJ1bm5pbmd9IC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBvblRoZW1lQ2xpY2soKTtcbiAgICAgICAgICAgICAgICBzZXRUaGVtZShsb2NhbFN0b3JhZ2UudGhlbWUgPz8gXCJsaWdodFwiKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0aXRsZT1cIlRvZ2dsZSB0aGVtZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxGb250QXdlc29tZUljb24gaWNvbj17dGhlbWUgPT09IFwiZGFya1wiID8gZmFTdW4gOiBmYU1vb259IC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtyaHN9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLCAiZXhwb3J0IGNvbnN0IG1heGltdW1BdHRhY2htZW50U2l6ZSA9IDEwMCAqIDEwMjQgKiAxMDI0OyAvLyAxMDAgTUJcblxuZXhwb3J0IHR5cGUgRmlsZU1ldGEgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFzdE1vZGlmaWVkOiBudW1iZXI7XG4gIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gIHNpemU6IG51bWJlcjtcbiAgcGVybTogXCJyb1wiIHwgXCJyd1wiO1xufTtcblxuZXhwb3J0IHR5cGUgUGFnZU1ldGEgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFzdE1vZGlmaWVkOiBudW1iZXI7XG4gIGxhc3RPcGVuZWQ/OiBudW1iZXI7XG4gIHBlcm06IFwicm9cIiB8IFwicndcIjtcbn07XG5cbmV4cG9ydCB0eXBlIEF0dGFjaG1lbnRNZXRhID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gIGxhc3RNb2RpZmllZDogbnVtYmVyO1xuICBzaXplOiBudW1iZXI7XG4gIHBlcm06IFwicm9cIiB8IFwicndcIjtcbn07XG5cbi8vIFVzZWQgYnkgRmlsdGVyQm94XG5leHBvcnQgdHlwZSBGaWx0ZXJPcHRpb24gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgb3JkZXJJZD86IG51bWJlcjtcbiAgaGludD86IHN0cmluZztcbn07XG4iLCAiaW1wb3J0IHsgRWRpdG9yVmlldywgVmlld1BsdWdpbiwgVmlld1VwZGF0ZSB9IGZyb20gXCIuLi8uLi9kZXBfd2ViLnRzXCI7XG5pbXBvcnQgeyBzYWZlUnVuIH0gZnJvbSBcIi4uL3BsdWdvcy91dGlsLnRzXCI7XG5pbXBvcnQgeyBtYXhpbXVtQXR0YWNobWVudFNpemUgfSBmcm9tIFwiLi4vY29tbW9uL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tIFwiLi9lZGl0b3IudHN4XCI7XG5cbmNvbnN0IHVybFJlZ2V4cCA9XG4gIC9eaHR0cHM/OlxcL1xcL1stYS16QS1aMC05QDolLl9cXCt+Iz1dezEsMjU2fShbLWEtekEtWjAtOSgpQDolX1xcKy5+Iz8mLy89XSopLztcblxuLy8gS25vd24gaU9TIFNhZmFyaSBwYXN0ZSBpc3N1ZSAodW5yZWxhdGVkIHRvIHRoaXMgaW1wbGVtZW50YXRpb24pOiBodHRwczovL3ZveHBlbGxpLmNvbS8yMDE1LzAzL2lvcy1zYWZhcmktdXJsLWNvcHktcGFzdGUtYnVnL1xuZXhwb3J0IGNvbnN0IHBhc3RlTGlua0V4dGVuc2lvbiA9IFZpZXdQbHVnaW4uZnJvbUNsYXNzKFxuICBjbGFzcyB7XG4gICAgdXBkYXRlKHVwZGF0ZTogVmlld1VwZGF0ZSk6IHZvaWQge1xuICAgICAgdXBkYXRlLnRyYW5zYWN0aW9ucy5mb3JFYWNoKCh0cikgPT4ge1xuICAgICAgICBpZiAodHIuaXNVc2VyRXZlbnQoXCJpbnB1dC5wYXN0ZVwiKSkge1xuICAgICAgICAgIGxldCBwYXN0ZWRUZXh0OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGxldCBmcm9tID0gMDtcbiAgICAgICAgICBsZXQgdG8gPSAwO1xuICAgICAgICAgIHRyLmNoYW5nZXMuaXRlckNoYW5nZXMoKGZyb21BLCB0b0EsIGZyb21CLCB0b0IsIGluc2VydGVkKSA9PiB7XG4gICAgICAgICAgICBwYXN0ZWRUZXh0LnB1c2goaW5zZXJ0ZWQuc2xpY2VTdHJpbmcoMCkpO1xuICAgICAgICAgICAgZnJvbSA9IGZyb21BO1xuICAgICAgICAgICAgdG8gPSB0b0I7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IHBhc3RlZFN0cmluZyA9IHBhc3RlZFRleHQuam9pbihcIlwiKTtcbiAgICAgICAgICBpZiAocGFzdGVkU3RyaW5nLm1hdGNoKHVybFJlZ2V4cCkpIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB1cGRhdGUuc3RhcnRTdGF0ZS5zZWxlY3Rpb24ubWFpbjtcbiAgICAgICAgICAgIGlmICghc2VsZWN0aW9uLmVtcHR5KSB7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS52aWV3LmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgIGNoYW5nZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGZyb206IGZyb20sXG4gICAgICAgICAgICAgICAgICAgICAgdG86IHRvLFxuICAgICAgICAgICAgICAgICAgICAgIGluc2VydDogYFske1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlLnN0YXJ0U3RhdGUuc2xpY2VEb2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5mcm9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24udG8sXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgfV0oJHtwYXN0ZWRTdHJpbmd9KWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50RXh0ZW5zaW9uKGVkaXRvcjogRWRpdG9yKSB7XG4gIHJldHVybiBFZGl0b3JWaWV3LmRvbUV2ZW50SGFuZGxlcnMoe1xuICAgIGRyYWdvdmVyOiAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSxcbiAgICBkcm9wOiAoZXZlbnQ6IERyYWdFdmVudCkgPT4ge1xuICAgICAgLy8gVE9ETzogVGhpcyBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRoZSB0YXJnZXQgY3Vyc29yIHBvc2l0aW9uLFxuICAgICAgLy8gaXQganVzdCBkcm9wcyB0aGUgYXR0YWNobWVudCB3aGVyZXZlciB0aGUgY3Vyc29yIHdhcyBsYXN0LlxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcikge1xuICAgICAgICBsZXQgcGF5bG9hZCA9IFsuLi5ldmVudC5kYXRhVHJhbnNmZXIuZmlsZXNdO1xuICAgICAgICBpZiAoIXBheWxvYWQubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNhZmVSdW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHByb2Nlc3NGaWxlVHJhbnNmZXIocGF5bG9hZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGFzdGU6IChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGxldCBwYXlsb2FkID0gWy4uLmV2ZW50LmNsaXBib2FyZERhdGEhLml0ZW1zXTtcbiAgICAgIGlmICghcGF5bG9hZC5sZW5ndGggfHwgcGF5bG9hZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgc2FmZVJ1bihhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHByb2Nlc3NJdGVtVHJhbnNmZXIocGF5bG9hZCk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRmlsZVRyYW5zZmVyKHBheWxvYWQ6IEZpbGVbXSkge1xuICAgIGxldCBkYXRhID0gYXdhaXQgcGF5bG9hZFswXS5hcnJheUJ1ZmZlcigpO1xuICAgIGF3YWl0IHNhdmVGaWxlKGRhdGEhLCBwYXlsb2FkWzBdLm5hbWUsIHBheWxvYWRbMF0udHlwZSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzSXRlbVRyYW5zZmVyKHBheWxvYWQ6IERhdGFUcmFuc2Zlckl0ZW1bXSkge1xuICAgIGxldCBmaWxlID0gcGF5bG9hZC5maW5kKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09IFwiZmlsZVwiKTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZmlsZVR5cGUgPSBmaWxlLnR5cGU7XG4gICAgbGV0IGV4dCA9IGZpbGVUeXBlLnNwbGl0KFwiL1wiKVsxXTtcbiAgICBsZXQgZmlsZU5hbWUgPSBuZXcgRGF0ZSgpXG4gICAgICAudG9JU09TdHJpbmcoKVxuICAgICAgLnNwbGl0KFwiLlwiKVswXVxuICAgICAgLnJlcGxhY2UoXCJUXCIsIFwiX1wiKVxuICAgICAgLnJlcGxhY2VBbGwoXCI6XCIsIFwiLVwiKTtcbiAgICBsZXQgZGF0YSA9IGF3YWl0IGZpbGUhLmdldEFzRmlsZSgpPy5hcnJheUJ1ZmZlcigpO1xuICAgIGF3YWl0IHNhdmVGaWxlKGRhdGEhLCBgJHtmaWxlTmFtZX0uJHtleHR9YCwgZmlsZVR5cGUpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2F2ZUZpbGUoXG4gICAgZGF0YTogQXJyYXlCdWZmZXIsXG4gICAgc3VnZ2VzdGVkTmFtZTogc3RyaW5nLFxuICAgIG1pbWVUeXBlOiBzdHJpbmcsXG4gICkge1xuICAgIGlmIChkYXRhIS5ieXRlTGVuZ3RoID4gbWF4aW11bUF0dGFjaG1lbnRTaXplKSB7XG4gICAgICBlZGl0b3IuZmxhc2hOb3RpZmljYXRpb24oXG4gICAgICAgIGBBdHRhY2htZW50IGlzIHRvbyBsYXJnZSwgbWF4aW11bSBpcyAke1xuICAgICAgICAgIG1heGltdW1BdHRhY2htZW50U2l6ZSAvIDEwMjQgLyAxMDI0XG4gICAgICAgIH1NQmAsXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpbmFsRmlsZU5hbWUgPSBwcm9tcHQoXG4gICAgICBcIkZpbGUgbmFtZSBmb3IgcGFzdGVkIGF0dGFjaG1lbnRcIixcbiAgICAgIHN1Z2dlc3RlZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoIWZpbmFsRmlsZU5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgZWRpdG9yLnNwYWNlLndyaXRlQXR0YWNobWVudChmaW5hbEZpbGVOYW1lLCBcImFycmF5YnVmZmVyXCIsIGRhdGEhKTtcbiAgICBsZXQgYXR0YWNobWVudE1hcmtkb3duID0gYFske2ZpbmFsRmlsZU5hbWV9XSgke2ZpbmFsRmlsZU5hbWV9KWA7XG4gICAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcbiAgICAgIGF0dGFjaG1lbnRNYXJrZG93biA9IGAhW10oJHtmaW5hbEZpbGVOYW1lfSlgO1xuICAgIH1cbiAgICBlZGl0b3IuZWRpdG9yVmlldyEuZGlzcGF0Y2goe1xuICAgICAgY2hhbmdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5zZXJ0OiBhdHRhY2htZW50TWFya2Rvd24sXG4gICAgICAgICAgZnJvbTogZWRpdG9yLmVkaXRvclZpZXchLnN0YXRlLnNlbGVjdGlvbi5tYWluLmZyb20sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgSG9vaywgTWFuaWZlc3QgfSBmcm9tIFwiLi4vLi4vcGx1Z29zL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBTeXN0ZW0gfSBmcm9tIFwiLi4vLi4vcGx1Z29zL3N5c3RlbS50c1wiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIi4uLy4uL3BsdWdvcy9ldmVudC50c1wiO1xuXG5leHBvcnQgdHlwZSBDb21tYW5kRGVmID0ge1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgY29udGV4dHM/OiBzdHJpbmdbXTtcblxuICAvLyBCaW5kIHRvIGtleWJvYXJkIHNob3J0Y3V0XG4gIGtleT86IHN0cmluZztcbiAgbWFjPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQXBwQ29tbWFuZCA9IHtcbiAgY29tbWFuZDogQ29tbWFuZERlZjtcbiAgcnVuOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuZXhwb3J0IHR5cGUgQ29tbWFuZEhvb2tUID0ge1xuICBjb21tYW5kPzogQ29tbWFuZERlZjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbW1hbmRIb29rRXZlbnRzID0ge1xuICBjb21tYW5kc1VwZGF0ZWQoY29tbWFuZE1hcDogTWFwPHN0cmluZywgQXBwQ29tbWFuZD4pOiB2b2lkO1xufTtcblxuZXhwb3J0IGNsYXNzIENvbW1hbmRIb29rIGV4dGVuZHMgRXZlbnRFbWl0dGVyPENvbW1hbmRIb29rRXZlbnRzPlxuICBpbXBsZW1lbnRzIEhvb2s8Q29tbWFuZEhvb2tUPiB7XG4gIGVkaXRvckNvbW1hbmRzID0gbmV3IE1hcDxzdHJpbmcsIEFwcENvbW1hbmQ+KCk7XG5cbiAgYnVpbGRBbGxDb21tYW5kcyhzeXN0ZW06IFN5c3RlbTxDb21tYW5kSG9va1Q+KSB7XG4gICAgdGhpcy5lZGl0b3JDb21tYW5kcy5jbGVhcigpO1xuICAgIGZvciAobGV0IHBsdWcgb2Ygc3lzdGVtLmxvYWRlZFBsdWdzLnZhbHVlcygpKSB7XG4gICAgICBmb3IgKFxuICAgICAgICBjb25zdCBbbmFtZSwgZnVuY3Rpb25EZWZdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgIHBsdWcubWFuaWZlc3QhLmZ1bmN0aW9ucyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmICghZnVuY3Rpb25EZWYuY29tbWFuZCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNtZCA9IGZ1bmN0aW9uRGVmLmNvbW1hbmQ7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29tbWFuZHMuc2V0KGNtZC5uYW1lLCB7XG4gICAgICAgICAgY29tbWFuZDogY21kLFxuICAgICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHBsdWcuaW52b2tlKG5hbWUsIFtjbWRdKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lbWl0KFwiY29tbWFuZHNVcGRhdGVkXCIsIHRoaXMuZWRpdG9yQ29tbWFuZHMpO1xuICB9XG5cbiAgYXBwbHkoc3lzdGVtOiBTeXN0ZW08Q29tbWFuZEhvb2tUPik6IHZvaWQge1xuICAgIHRoaXMuYnVpbGRBbGxDb21tYW5kcyhzeXN0ZW0pO1xuICAgIHN5c3RlbS5vbih7XG4gICAgICBwbHVnTG9hZGVkOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuYnVpbGRBbGxDb21tYW5kcyhzeXN0ZW0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlTWFuaWZlc3QobWFuaWZlc3Q6IE1hbmlmZXN0PENvbW1hbmRIb29rVD4pOiBzdHJpbmdbXSB7XG4gICAgbGV0IGVycm9ycyA9IFtdO1xuICAgIGZvciAoY29uc3QgW25hbWUsIGZ1bmN0aW9uRGVmXSBvZiBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5mdW5jdGlvbnMpKSB7XG4gICAgICBpZiAoIWZ1bmN0aW9uRGVmLmNvbW1hbmQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBjbWQgPSBmdW5jdGlvbkRlZi5jb21tYW5kO1xuICAgICAgaWYgKCFjbWQubmFtZSkge1xuICAgICAgICBlcnJvcnMucHVzaChgRnVuY3Rpb24gJHtuYW1lfSBoYXMgYSBjb21tYW5kIGJ1dCBubyBuYW1lYCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEhvb2ssIE1hbmlmZXN0IH0gZnJvbSBcIi4uLy4uL3BsdWdvcy90eXBlcy50c1wiO1xuaW1wb3J0IHsgU3lzdGVtIH0gZnJvbSBcIi4uLy4uL3BsdWdvcy9zeXN0ZW0udHNcIjtcbmltcG9ydCB7XG4gIENvbXBsZXRpb24sXG4gIENvbXBsZXRpb25Db250ZXh0LFxuICBDb21wbGV0aW9uUmVzdWx0LFxufSBmcm9tIFwiLi4vLi4vLi4vZGVwX3dlYi50c1wiO1xuaW1wb3J0IHsgc2FmZVJ1biB9IGZyb20gXCIuLi8uLi9jb21tb24vdXRpbC50c1wiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIi4uL2VkaXRvci50c3hcIjtcbmltcG9ydCB7IHN5bnRheFRyZWUgfSBmcm9tIFwiLi4vLi4vLi4vZGVwX3dlYi50c1wiO1xuXG5leHBvcnQgdHlwZSBTbGFzaENvbW1hbmREZWYgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBcHBTbGFzaENvbW1hbmQgPSB7XG4gIHNsYXNoQ29tbWFuZDogU2xhc2hDb21tYW5kRGVmO1xuICBydW46ICgpID0+IFByb21pc2U8dm9pZD47XG59O1xuXG5leHBvcnQgdHlwZSBTbGFzaENvbW1hbmRIb29rVCA9IHtcbiAgc2xhc2hDb21tYW5kPzogU2xhc2hDb21tYW5kRGVmO1xufTtcblxuY29uc3Qgc2xhc2hDb21tYW5kUmVnZXhwID0gLyhbXlxcd118XilcXC9bXFx3XFwtXSovO1xuXG5leHBvcnQgY2xhc3MgU2xhc2hDb21tYW5kSG9vayBpbXBsZW1lbnRzIEhvb2s8U2xhc2hDb21tYW5kSG9va1Q+IHtcbiAgc2xhc2hDb21tYW5kcyA9IG5ldyBNYXA8c3RyaW5nLCBBcHBTbGFzaENvbW1hbmQ+KCk7XG4gIHByaXZhdGUgZWRpdG9yOiBFZGl0b3I7XG5cbiAgY29uc3RydWN0b3IoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgfVxuXG4gIGJ1aWxkQWxsQ29tbWFuZHMoc3lzdGVtOiBTeXN0ZW08U2xhc2hDb21tYW5kSG9va1Q+KSB7XG4gICAgdGhpcy5zbGFzaENvbW1hbmRzLmNsZWFyKCk7XG4gICAgZm9yIChsZXQgcGx1ZyBvZiBzeXN0ZW0ubG9hZGVkUGx1Z3MudmFsdWVzKCkpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIGNvbnN0IFtuYW1lLCBmdW5jdGlvbkRlZl0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgcGx1Zy5tYW5pZmVzdCEuZnVuY3Rpb25zLFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKCFmdW5jdGlvbkRlZi5zbGFzaENvbW1hbmQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbWQgPSBmdW5jdGlvbkRlZi5zbGFzaENvbW1hbmQ7XG4gICAgICAgIHRoaXMuc2xhc2hDb21tYW5kcy5zZXQoY21kLm5hbWUsIHtcbiAgICAgICAgICBzbGFzaENvbW1hbmQ6IGNtZCxcbiAgICAgICAgICBydW46ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBwbHVnLmludm9rZShuYW1lLCBbY21kXSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcGxldGVyIGZvciBDb2RlTWlycm9yXG4gIHB1YmxpYyBzbGFzaENvbW1hbmRDb21wbGV0ZXIoXG4gICAgY3R4OiBDb21wbGV0aW9uQ29udGV4dCxcbiAgKTogQ29tcGxldGlvblJlc3VsdCB8IG51bGwge1xuICAgIGxldCBwcmVmaXggPSBjdHgubWF0Y2hCZWZvcmUoc2xhc2hDb21tYW5kUmVnZXhwKTtcbiAgICBpZiAoIXByZWZpeCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByZWZpeFRleHQgPSBwcmVmaXgudGV4dDtcbiAgICBsZXQgb3B0aW9uczogQ29tcGxldGlvbltdID0gW107XG5cbiAgICAvLyBObyBzbGFzaCBjb21tYW5kcyBpbiBjb21tZW50IGJsb2NrcyAocXVlcmllcyBhbmQgc3VjaClcbiAgICBsZXQgY3VycmVudE5vZGUgPSBzeW50YXhUcmVlKGN0eC5zdGF0ZSkucmVzb2x2ZUlubmVyKGN0eC5wb3MpO1xuICAgIGlmIChjdXJyZW50Tm9kZS50eXBlLm5hbWUgPT09IFwiQ29tbWVudEJsb2NrXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmb3IgKGxldCBbbmFtZSwgZGVmXSBvZiB0aGlzLnNsYXNoQ29tbWFuZHMuZW50cmllcygpKSB7XG4gICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICBsYWJlbDogZGVmLnNsYXNoQ29tbWFuZC5uYW1lLFxuICAgICAgICBkZXRhaWw6IGRlZi5zbGFzaENvbW1hbmQuZGVzY3JpcHRpb24sXG4gICAgICAgIGFwcGx5OiAoKSA9PiB7XG4gICAgICAgICAgLy8gRGVsZXRlIHNsYXNoIGNvbW1hbmQgcGFydFxuICAgICAgICAgIHRoaXMuZWRpdG9yLmVkaXRvclZpZXc/LmRpc3BhdGNoKHtcbiAgICAgICAgICAgIGNoYW5nZXM6IHtcbiAgICAgICAgICAgICAgZnJvbTogcHJlZml4IS5mcm9tICsgcHJlZml4VGV4dC5pbmRleE9mKFwiL1wiKSxcbiAgICAgICAgICAgICAgdG86IGN0eC5wb3MsXG4gICAgICAgICAgICAgIGluc2VydDogXCJcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gUmVwbGFjZSB3aXRoIHdoYXRldmVyIHRoZSBjb21wbGV0aW9uIGlzXG4gICAgICAgICAgc2FmZVJ1bihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBkZWYucnVuKCk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5mb2N1cygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAvLyArIDEgYmVjYXVzZSBvZiB0aGUgJy8nXG4gICAgICBmcm9tOiBwcmVmaXguZnJvbSArIHByZWZpeFRleHQuaW5kZXhPZihcIi9cIikgKyAxLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgYXBwbHkoc3lzdGVtOiBTeXN0ZW08U2xhc2hDb21tYW5kSG9va1Q+KTogdm9pZCB7XG4gICAgdGhpcy5idWlsZEFsbENvbW1hbmRzKHN5c3RlbSk7XG4gICAgc3lzdGVtLm9uKHtcbiAgICAgIHBsdWdMb2FkZWQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5idWlsZEFsbENvbW1hbmRzKHN5c3RlbSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVNYW5pZmVzdChtYW5pZmVzdDogTWFuaWZlc3Q8U2xhc2hDb21tYW5kSG9va1Q+KTogc3RyaW5nW10ge1xuICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBmdW5jdGlvbkRlZl0gb2YgT2JqZWN0LmVudHJpZXMobWFuaWZlc3QuZnVuY3Rpb25zKSkge1xuICAgICAgaWYgKCFmdW5jdGlvbkRlZi5zbGFzaENvbW1hbmQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBjbWQgPSBmdW5jdGlvbkRlZi5zbGFzaENvbW1hbmQ7XG4gICAgICBpZiAoIWNtZC5uYW1lKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBGdW5jdGlvbiAke25hbWV9IGhhcyBhIGNvbW1hbmQgYnV0IG5vIG5hbWVgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgc3ludGF4VHJlZSB9IGZyb20gXCIuLi8uLi9kZXBfd2ViLnRzXCI7XG5pbXBvcnQgeyBSYW5nZSB9IGZyb20gXCIuLi8uLi9kZXBfd2ViLnRzXCI7XG5pbXBvcnQge1xuICBEZWNvcmF0aW9uLFxuICBEZWNvcmF0aW9uU2V0LFxuICBFZGl0b3JWaWV3LFxuICBWaWV3UGx1Z2luLFxuICBWaWV3VXBkYXRlLFxuICBXaWRnZXRUeXBlLFxufSBmcm9tIFwiLi4vLi4vZGVwX3dlYi50c1wiO1xuXG5jbGFzcyBJbmxpbmVJbWFnZVdpZGdldCBleHRlbmRzIFdpZGdldFR5cGUge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSB1cmw6IHN0cmluZywgcmVhZG9ubHkgdGl0bGU6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBlcShvdGhlcjogSW5saW5lSW1hZ2VXaWRnZXQpIHtcbiAgICByZXR1cm4gb3RoZXIudXJsID09PSB0aGlzLnVybCAmJiBvdGhlci50aXRsZSA9PT0gdGhpcy50aXRsZTtcbiAgfVxuXG4gIHRvRE9NKCkge1xuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgaWYgKHRoaXMudXJsLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICBpbWcuc3JjID0gdGhpcy51cmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGltZy5zcmMgPSBgZnMvJHt0aGlzLnVybH1gO1xuICAgIH1cbiAgICBpbWcuYWx0ID0gdGhpcy50aXRsZTtcbiAgICBpbWcudGl0bGUgPSB0aGlzLnRpdGxlO1xuICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIGltZy5jbGFzc05hbWUgPSBcInNiLWlubGluZS1pbWdcIjtcblxuICAgIHJldHVybiBpbWc7XG4gIH1cbn1cblxuY29uc3QgaW5saW5lSW1hZ2VzID0gKHZpZXc6IEVkaXRvclZpZXcpID0+IHtcbiAgbGV0IHdpZGdldHM6IFJhbmdlPERlY29yYXRpb24+W10gPSBbXTtcbiAgY29uc3QgaW1hZ2VSZWdleCA9IC8hXFxbKD88dGl0bGU+W15cXF1dKilcXF1cXCgoPzx1cmw+LispXFwpLztcblxuICBmb3IgKGxldCB7IGZyb20sIHRvIH0gb2Ygdmlldy52aXNpYmxlUmFuZ2VzKSB7XG4gICAgc3ludGF4VHJlZSh2aWV3LnN0YXRlKS5pdGVyYXRlKHtcbiAgICAgIGZyb20sXG4gICAgICB0byxcbiAgICAgIGVudGVyOiAobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS5uYW1lICE9PSBcIkltYWdlXCIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbWFnZVJleGV4UmVzdWx0ID0gaW1hZ2VSZWdleC5leGVjKFxuICAgICAgICAgIHZpZXcuc3RhdGUuc2xpY2VEb2Mobm9kZS5mcm9tLCBub2RlLnRvKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGltYWdlUmV4ZXhSZXN1bHQgPT09IG51bGwgfHwgIWltYWdlUmV4ZXhSZXN1bHQuZ3JvdXBzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXJsID0gaW1hZ2VSZXhleFJlc3VsdC5ncm91cHMudXJsO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGltYWdlUmV4ZXhSZXN1bHQuZ3JvdXBzLnRpdGxlO1xuICAgICAgICBsZXQgZGVjbyA9IERlY29yYXRpb24ud2lkZ2V0KHtcbiAgICAgICAgICB3aWRnZXQ6IG5ldyBJbmxpbmVJbWFnZVdpZGdldCh1cmwsIHRpdGxlKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHdpZGdldHMucHVzaChkZWNvLnJhbmdlKG5vZGUudG8pKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gRGVjb3JhdGlvbi5zZXQod2lkZ2V0cywgdHJ1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5saW5lSW1hZ2VzUGx1Z2luID0gKCkgPT5cbiAgVmlld1BsdWdpbi5mcm9tQ2xhc3MoXG4gICAgY2xhc3Mge1xuICAgICAgZGVjb3JhdGlvbnM6IERlY29yYXRpb25TZXQ7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHZpZXc6IEVkaXRvclZpZXcpIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IGlubGluZUltYWdlcyh2aWV3KTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlKHVwZGF0ZTogVmlld1VwZGF0ZSkge1xuICAgICAgICBpZiAodXBkYXRlLmRvY0NoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmRlY29yYXRpb25zID0gaW5saW5lSW1hZ2VzKHVwZGF0ZS52aWV3KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZGVjb3JhdGlvbnM6ICh2KSA9PiB2LmRlY29yYXRpb25zLFxuICAgIH0sXG4gICk7XG4iLCAiaW1wb3J0IHsgc3ludGF4VHJlZSB9IGZyb20gXCIuLi8uLi9kZXBfY29tbW9uLnRzXCI7XG5pbXBvcnQge1xuICBEZWNvcmF0aW9uLFxuICBEZWNvcmF0aW9uU2V0LFxuICBFZGl0b3JWaWV3LFxuICBWaWV3UGx1Z2luLFxuICBWaWV3VXBkYXRlLFxufSBmcm9tIFwiLi4vLi4vZGVwX2NvbW1vbi50c1wiO1xuXG5pbXBvcnQgeyBSYW5nZSB9IGZyb20gXCIuLi8uLi9kZXBfd2ViLnRzXCI7XG5cbmludGVyZmFjZSBXcmFwRWxlbWVudCB7XG4gIHNlbGVjdG9yOiBzdHJpbmc7XG4gIGNsYXNzOiBzdHJpbmc7XG4gIG5lc3Rpbmc/OiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiB3cmFwTGluZXModmlldzogRWRpdG9yVmlldywgd3JhcEVsZW1lbnRzOiBXcmFwRWxlbWVudFtdKSB7XG4gIGxldCB3aWRnZXRzOiBSYW5nZTxEZWNvcmF0aW9uPltdID0gW107XG4gIGxldCBlbGVtZW50U3RhY2s6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGRvYyA9IHZpZXcuc3RhdGUuZG9jO1xuICAvLyBEaXNhYmxpbmcgdGhlIHZpc2libGUgcmFuZ2VzIGZvciBub3csIGJlY2F1c2UgaXQgbWF5IGJlIGEgYml0IGJ1Z2d5LlxuICAvLyBSSVNLOiB0aGlzIG1heSBhY3R1YWxseSBiZWNvbWUgc2xvdyBmb3IgbGFyZ2UgZG9jdW1lbnRzLlxuICBmb3IgKGxldCB7IGZyb20sIHRvIH0gb2Ygdmlldy52aXNpYmxlUmFuZ2VzKSB7XG4gICAgc3ludGF4VHJlZSh2aWV3LnN0YXRlKS5pdGVyYXRlKHtcbiAgICAgIGZyb20sXG4gICAgICB0byxcbiAgICAgIGVudGVyOiAoeyB0eXBlLCBmcm9tLCB0byB9KSA9PiB7XG4gICAgICAgIGZvciAobGV0IHdyYXBFbGVtZW50IG9mIHdyYXBFbGVtZW50cykge1xuICAgICAgICAgIGlmICh0eXBlLm5hbWUgPT0gd3JhcEVsZW1lbnQuc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGlmICh3cmFwRWxlbWVudC5uZXN0aW5nKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnRTdGFjay5wdXNoKHR5cGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBib2R5VGV4dCA9IGRvYy5zbGljZVN0cmluZyhmcm9tLCB0byk7XG4gICAgICAgICAgICBsZXQgaWR4ID0gZnJvbTtcbiAgICAgICAgICAgIGZvciAobGV0IGxpbmUgb2YgYm9keVRleHQuc3BsaXQoXCJcXG5cIikpIHtcbiAgICAgICAgICAgICAgbGV0IGNscyA9IHdyYXBFbGVtZW50LmNsYXNzO1xuICAgICAgICAgICAgICBpZiAod3JhcEVsZW1lbnQubmVzdGluZykge1xuICAgICAgICAgICAgICAgIGNscyA9IGAke2Nsc30gJHtjbHN9LSR7ZWxlbWVudFN0YWNrLmxlbmd0aH1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHdpZGdldHMucHVzaChcbiAgICAgICAgICAgICAgICBEZWNvcmF0aW9uLmxpbmUoe1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IGNscyxcbiAgICAgICAgICAgICAgICB9KS5yYW5nZShkb2MubGluZUF0KGlkeCkuZnJvbSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlkeCArPSBsaW5lLmxlbmd0aCArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbGVhdmUoeyB0eXBlIH0pIHtcbiAgICAgICAgZm9yIChsZXQgd3JhcEVsZW1lbnQgb2Ygd3JhcEVsZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKHR5cGUubmFtZSA9PSB3cmFwRWxlbWVudC5zZWxlY3RvciAmJiB3cmFwRWxlbWVudC5uZXN0aW5nKSB7XG4gICAgICAgICAgICBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIC8vIFdpZGdldHMgaGF2ZSB0byBiZSBzb3J0ZWQgYnkgYGZyb21gIGluIGFzY2VuZGluZyBvcmRlclxuICB3aWRnZXRzID0gd2lkZ2V0cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEuZnJvbSA8IGIuZnJvbSA/IC0xIDogMTtcbiAgfSk7XG4gIHJldHVybiBEZWNvcmF0aW9uLnNldCh3aWRnZXRzKTtcbn1cblxuZXhwb3J0IGNvbnN0IGxpbmVXcmFwcGVyID0gKHdyYXBFbGVtZW50czogV3JhcEVsZW1lbnRbXSkgPT5cbiAgVmlld1BsdWdpbi5mcm9tQ2xhc3MoXG4gICAgY2xhc3Mge1xuICAgICAgZGVjb3JhdGlvbnM6IERlY29yYXRpb25TZXQ7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHZpZXc6IEVkaXRvclZpZXcpIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IHdyYXBMaW5lcyh2aWV3LCB3cmFwRWxlbWVudHMpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUodXBkYXRlOiBWaWV3VXBkYXRlKSB7XG4gICAgICAgIGlmICh1cGRhdGUuZG9jQ2hhbmdlZCB8fCB1cGRhdGUudmlld3BvcnRDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IHdyYXBMaW5lcyh1cGRhdGUudmlldywgd3JhcEVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZGVjb3JhdGlvbnM6ICh2KSA9PiB2LmRlY29yYXRpb25zLFxuICAgIH0sXG4gICk7XG4iLCAiaW1wb3J0IHsgc2FmZVJ1biB9IGZyb20gXCIuLi9jb21tb24vdXRpbC50c1wiO1xuXG5mdW5jdGlvbiBlbmNvZGVQYWdlVXJsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBuYW1lLnJlcGxhY2VBbGwoXCIgXCIsIFwiX1wiKTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlUGFnZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB1cmwucmVwbGFjZUFsbChcIl9cIiwgXCIgXCIpO1xufVxuXG5leHBvcnQgY2xhc3MgUGF0aFBhZ2VOYXZpZ2F0b3Ige1xuICBuYXZpZ2F0aW9uUmVzb2x2ZT86ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgaW5kZXhQYWdlOiBzdHJpbmcsIHJlYWRvbmx5IHJvb3Q6IHN0cmluZyA9IFwiXCIpIHt9XG5cbiAgYXN5bmMgbmF2aWdhdGUocGFnZTogc3RyaW5nLCBwb3M/OiBudW1iZXIgfCBzdHJpbmcsIHJlcGxhY2VTdGF0ZSA9IGZhbHNlKSB7XG4gICAgbGV0IGVuY29kZWRQYWdlID0gZW5jb2RlUGFnZVVybChwYWdlKTtcbiAgICBpZiAocGFnZSA9PT0gdGhpcy5pbmRleFBhZ2UpIHtcbiAgICAgIGVuY29kZWRQYWdlID0gXCJcIjtcbiAgICB9XG4gICAgaWYgKHJlcGxhY2VTdGF0ZSkge1xuICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKFxuICAgICAgICB7IHBhZ2UsIHBvcyB9LFxuICAgICAgICBwYWdlLFxuICAgICAgICBgJHt0aGlzLnJvb3R9LyR7ZW5jb2RlZFBhZ2V9YCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShcbiAgICAgICAgeyBwYWdlLCBwb3MgfSxcbiAgICAgICAgcGFnZSxcbiAgICAgICAgYCR7dGhpcy5yb290fS8ke2VuY29kZWRQYWdlfWAsXG4gICAgICApO1xuICAgIH1cbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBQb3BTdGF0ZUV2ZW50KFwicG9wc3RhdGVcIiwge1xuICAgICAgICBzdGF0ZTogeyBwYWdlLCBwb3MgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMubmF2aWdhdGlvblJlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pO1xuICAgIHRoaXMubmF2aWdhdGlvblJlc29sdmUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBzdWJzY3JpYmUoXG4gICAgcGFnZUxvYWRDYWxsYmFjazogKHBhZ2VOYW1lOiBzdHJpbmcsIHBvczogbnVtYmVyIHwgc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjYiA9IChldmVudD86IFBvcFN0YXRlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGdvdG9QYWdlID0gdGhpcy5nZXRDdXJyZW50UGFnZSgpO1xuICAgICAgaWYgKCFnb3RvUGFnZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzYWZlUnVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcGFnZUxvYWRDYWxsYmFjayhcbiAgICAgICAgICB0aGlzLmdldEN1cnJlbnRQYWdlKCksXG4gICAgICAgICAgZXZlbnQ/LnN0YXRlPy5wb3MgfHwgdGhpcy5nZXRDdXJyZW50UG9zKCksXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25SZXNvbHZlKSB7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uUmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgY2IpO1xuICAgIGNiKCk7XG4gIH1cblxuICBkZWNvZGVVUkkoKTogW3N0cmluZywgbnVtYmVyIHwgc3RyaW5nXSB7XG4gICAgbGV0IFtwYWdlLCBwb3NdID0gZGVjb2RlVVJJKFxuICAgICAgbG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKHRoaXMucm9vdC5sZW5ndGggKyAxKSxcbiAgICApLnNwbGl0KFwiQFwiKTtcbiAgICBpZiAocG9zKSB7XG4gICAgICBpZiAocG9zLm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgICByZXR1cm4gW3BhZ2UsICtwb3NdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtwYWdlLCBwb3NdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3BhZ2UsIDBdO1xuICAgIH1cbiAgfVxuXG4gIGdldEN1cnJlbnRQYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlY29kZVBhZ2VVcmwodGhpcy5kZWNvZGVVUkkoKVswXSkgfHwgdGhpcy5pbmRleFBhZ2U7XG4gIH1cblxuICBnZXRDdXJyZW50UG9zKCk6IG51bWJlciB8IHN0cmluZyB7XG4gICAgLy8gY29uc29sZS5sb2coXCJQb3NcIiwgdGhpcy5kZWNvZGVVUkkoKVsxXSk7XG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlVVJJKClbMV07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBBY3Rpb24sIEFwcFZpZXdTdGF0ZSB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5cbmxldCBtID0gbmV3IE1hcCgpO1xubS5zaXplO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWR1Y2VyKFxuICBzdGF0ZTogQXBwVmlld1N0YXRlLFxuICBhY3Rpb246IEFjdGlvbixcbik6IEFwcFZpZXdTdGF0ZSB7XG4gIC8vIGNvbnNvbGUubG9nKFwiR290IGFjdGlvblwiLCBhY3Rpb24pO1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBcInBhZ2UtbG9hZGluZ1wiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgY3VycmVudFBhZ2U6IGFjdGlvbi5uYW1lLFxuICAgICAgfTtcbiAgICBjYXNlIFwicGFnZS1sb2FkZWRcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBhbGxQYWdlczogbmV3IFNldChcbiAgICAgICAgICBbLi4uc3RhdGUuYWxsUGFnZXNdLm1hcCgocGFnZU1ldGEpID0+XG4gICAgICAgICAgICBwYWdlTWV0YS5uYW1lID09PSBhY3Rpb24ubWV0YS5uYW1lXG4gICAgICAgICAgICAgID8geyAuLi5wYWdlTWV0YSwgbGFzdE9wZW5lZDogRGF0ZS5ub3coKSB9XG4gICAgICAgICAgICAgIDogcGFnZU1ldGFcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICBwZXJtOiBhY3Rpb24ubWV0YS5wZXJtLFxuICAgICAgICBjdXJyZW50UGFnZTogYWN0aW9uLm1ldGEubmFtZSxcbiAgICAgIH07XG4gICAgY2FzZSBcInBhZ2UtY2hhbmdlZFwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHVuc2F2ZWRDaGFuZ2VzOiB0cnVlLFxuICAgICAgfTtcbiAgICBjYXNlIFwicGFnZS1zYXZlZFwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICAgIH07XG4gICAgY2FzZSBcInN0YXJ0LW5hdmlnYXRlXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2hvd1BhZ2VOYXZpZ2F0b3I6IHRydWUsXG4gICAgICB9O1xuICAgIGNhc2UgXCJzdG9wLW5hdmlnYXRlXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2hvd1BhZ2VOYXZpZ2F0b3I6IGZhbHNlLFxuICAgICAgfTtcbiAgICBjYXNlIFwicGFnZXMtbGlzdGVkXCI6XG4gICAgICAvLyBMZXQncyBtb3ZlIG92ZXIgYW55IFwibGFzdE9wZW5lZFwiIHRpbWVzIHRvIHRoZSBcImFsbFBhZ2VzXCIgbGlzdFxuICAgICAgbGV0IG9sZFBhZ2VNZXRhID0gbmV3IE1hcChbLi4uc3RhdGUuYWxsUGFnZXNdLm1hcCgocG0pID0+IFtwbS5uYW1lLCBwbV0pKTtcbiAgICAgIGZvciAobGV0IHBhZ2VNZXRhIG9mIGFjdGlvbi5wYWdlcykge1xuICAgICAgICBsZXQgb2xkUGFnZU1ldGFJdGVtID0gb2xkUGFnZU1ldGEuZ2V0KHBhZ2VNZXRhLm5hbWUpO1xuICAgICAgICBpZiAob2xkUGFnZU1ldGFJdGVtICYmIG9sZFBhZ2VNZXRhSXRlbS5sYXN0T3BlbmVkKSB7XG4gICAgICAgICAgcGFnZU1ldGEubGFzdE9wZW5lZCA9IG9sZFBhZ2VNZXRhSXRlbS5sYXN0T3BlbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYWxsUGFnZXM6IGFjdGlvbi5wYWdlcyxcbiAgICAgIH07XG4gICAgY2FzZSBcInNob3ctcGFsZXR0ZVwiOlxuICAgICAgbGV0IGNvbW1hbmRzID0gbmV3IE1hcChzdGF0ZS5jb21tYW5kcyk7XG4gICAgICBmb3IgKGxldCBbaywgdl0gb2Ygc3RhdGUuY29tbWFuZHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2LmNvbW1hbmQuY29udGV4dHMgJiZcbiAgICAgICAgICAoIWFjdGlvbi5jb250ZXh0IHx8ICF2LmNvbW1hbmQuY29udGV4dHMuaW5jbHVkZXMoYWN0aW9uLmNvbnRleHQpKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb21tYW5kcy5kZWxldGUoayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjb21tYW5kcyxcbiAgICAgICAgc2hvd0NvbW1hbmRQYWxldHRlOiB0cnVlLFxuICAgICAgfTtcbiAgICBjYXNlIFwiaGlkZS1wYWxldHRlXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2hvd0NvbW1hbmRQYWxldHRlOiBmYWxzZSxcbiAgICAgIH07XG4gICAgY2FzZSBcImNvbW1hbmQtcnVuXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgcmVjZW50Q29tbWFuZHM6IHN0YXRlLnJlY2VudENvbW1hbmRzLnNldChhY3Rpb24uY29tbWFuZCwgbmV3IERhdGUoKSksXG4gICAgICB9O1xuICAgIGNhc2UgXCJ1cGRhdGUtY29tbWFuZHNcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjb21tYW5kczogYWN0aW9uLmNvbW1hbmRzLFxuICAgICAgfTtcbiAgICBjYXNlIFwic2hvdy1ub3RpZmljYXRpb25cIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBub3RpZmljYXRpb25zOiBbLi4uc3RhdGUubm90aWZpY2F0aW9ucywgYWN0aW9uLm5vdGlmaWNhdGlvbl0sXG4gICAgICB9O1xuICAgIGNhc2UgXCJkaXNtaXNzLW5vdGlmaWNhdGlvblwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IHN0YXRlLm5vdGlmaWNhdGlvbnMuZmlsdGVyKChuKSA9PiBuLmlkICE9PSBhY3Rpb24uaWQpLFxuICAgICAgfTtcbiAgICBjYXNlIFwic2hvdy1wYW5lbFwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHBhbmVsczoge1xuICAgICAgICAgIC4uLnN0YXRlLnBhbmVscyxcbiAgICAgICAgICBbYWN0aW9uLmlkXTogYWN0aW9uLmNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgY2FzZSBcImhpZGUtcGFuZWxcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBwYW5lbHM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5wYW5lbHMsXG4gICAgICAgICAgW2FjdGlvbi5pZF06IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgIGNhc2UgXCJzaG93LWZpbHRlcmJveFwiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIHNob3dGaWx0ZXJCb3g6IHRydWUsXG4gICAgICAgIGZpbHRlckJveE9uU2VsZWN0OiBhY3Rpb24ub25TZWxlY3QsXG4gICAgICAgIGZpbHRlckJveFBsYWNlSG9sZGVyOiBhY3Rpb24ucGxhY2VIb2xkZXIsXG4gICAgICAgIGZpbHRlckJveE9wdGlvbnM6IGFjdGlvbi5vcHRpb25zLFxuICAgICAgICBmaWx0ZXJCb3hMYWJlbDogYWN0aW9uLmxhYmVsLFxuICAgICAgICBmaWx0ZXJCb3hIZWxwVGV4dDogYWN0aW9uLmhlbHBUZXh0LFxuICAgICAgfTtcbiAgICBjYXNlIFwiaGlkZS1maWx0ZXJib3hcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzaG93RmlsdGVyQm94OiBmYWxzZSxcbiAgICAgICAgZmlsdGVyQm94T25TZWxlY3Q6ICgpID0+IHt9LFxuICAgICAgICBmaWx0ZXJCb3hQbGFjZUhvbGRlcjogXCJcIixcbiAgICAgICAgZmlsdGVyQm94T3B0aW9uczogW10sXG4gICAgICAgIGZpbHRlckJveEhlbHBUZXh0OiBcIlwiLFxuICAgICAgfTtcbiAgICBjYXNlIFwic2V0LWVkaXRvci1yb1wiOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZvcmNlZFJPTW9kZTogYWN0aW9uLmVuYWJsZWQsXG4gICAgICB9O1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cbiIsICJpbXBvcnQgeyBLZXlCaW5kaW5nIH0gZnJvbSBcIi4uLy4uL2RlcF93ZWIudHNcIjtcbmltcG9ydCB7IHN5bnRheFRyZWUgfSBmcm9tIFwiLi4vLi4vZGVwX2NvbW1vbi50c1wiO1xuXG5jb25zdCBzdHJhaWdodFF1b3RlQ29udGV4dHMgPSBbXCJDb21tZW50QmxvY2tcIiwgXCJGZW5jZWRDb2RlXCIsIFwiSW5saW5lQ29kZVwiXTtcblxuLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIHNlbGVjdGlvbiAocHV0IHF1b3RlcyBhcm91bmQgb3IgY3JlYXRlIGJsb2NrcXVvdGUgYmxvY2s/KVxuZnVuY3Rpb24ga2V5QmluZGluZ0ZvclF1b3RlKFxuICBxdW90ZTogc3RyaW5nLFxuICBsZWZ0OiBzdHJpbmcsXG4gIHJpZ2h0OiBzdHJpbmcsXG4pOiBLZXlCaW5kaW5nIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IHF1b3RlLFxuICAgIHJ1bjogKHRhcmdldCk6IGJvb2xlYW4gPT4ge1xuICAgICAgbGV0IGN1cnNvclBvcyA9IHRhcmdldC5zdGF0ZS5zZWxlY3Rpb24ubWFpbi5mcm9tO1xuICAgICAgbGV0IGNoQmVmb3JlID0gdGFyZ2V0LnN0YXRlLnNsaWNlRG9jKGN1cnNvclBvcyAtIDEsIGN1cnNvclBvcyk7XG5cbiAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGNvbnRleHQsIGlmIGluIHNvbWUgc29ydCBvZiBjb2RlL2NvbW1lbnQgZnJhZ21lbnQgZG9uJ3QgYmUgc21hcnRcbiAgICAgIGxldCBub2RlID0gc3ludGF4VHJlZSh0YXJnZXQuc3RhdGUpLnJlc29sdmVJbm5lcihjdXJzb3JQb3MpO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKHN0cmFpZ2h0UXVvdGVDb250ZXh0cy5pbmNsdWRlcyhub2RlLnR5cGUubmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucGFyZW50KSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE9rLCBzdGlsbCBoZXJlLCBsZXQncyB1c2UgYSBzbWFydCBxdW90ZVxuICAgICAgbGV0IHF1b3RlID0gcmlnaHQ7XG4gICAgICBpZiAoL1xcVy8uZXhlYyhjaEJlZm9yZSkgJiYgIS9bIVxcPyxcXC5cXC09XHUyMDFDXS8uZXhlYyhjaEJlZm9yZSkpIHtcbiAgICAgICAgcXVvdGUgPSBsZWZ0O1xuICAgICAgfVxuICAgICAgdGFyZ2V0LmRpc3BhdGNoKHtcbiAgICAgICAgY2hhbmdlczoge1xuICAgICAgICAgIGluc2VydDogcXVvdGUsXG4gICAgICAgICAgZnJvbTogY3Vyc29yUG9zLFxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICBhbmNob3I6IGN1cnNvclBvcyArIDEsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBzbWFydFF1b3RlS2V5bWFwOiBLZXlCaW5kaW5nW10gPSBbXG4gIGtleUJpbmRpbmdGb3JRdW90ZSgnXCInLCBcIlx1MjAxQ1wiLCBcIlx1MjAxRFwiKSxcbiAga2V5QmluZGluZ0ZvclF1b3RlKFwiJ1wiLCBcIlx1MjAxOFwiLCBcIlx1MjAxOVwiKSxcbl07XG4iLCAiaW1wb3J0IHsgSGlnaGxpZ2h0U3R5bGUgfSBmcm9tIFwiLi4vLi4vZGVwX2NvbW1vbi50c1wiO1xuaW1wb3J0IHsgdGFnSGlnaGxpZ2h0ZXIsIHRhZ3MgYXMgdCB9IGZyb20gXCIuLi8uLi9kZXBfd2ViLnRzXCI7XG5pbXBvcnQgKiBhcyBjdCBmcm9tIFwiLi4vY29tbW9uL2N1c3RvbXRhZ3MudHNcIjtcbmltcG9ydCB7IE1ERXh0IH0gZnJvbSBcIi4uL2NvbW1vbi9tYXJrZG93bl9leHQudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGlnaGxpZ2h0U3R5bGVzKG1kRXh0ZW5zaW9uOiBNREV4dFtdKSB7XG4gIHRhZ0hpZ2hsaWdodGVyO1xuICBjb25zdCBobHMgPSBIaWdobGlnaHRTdHlsZS5kZWZpbmUoW1xuICAgIHsgdGFnOiB0LmhlYWRpbmcxLCBjbGFzczogXCJzYi1oMVwiIH0sXG4gICAgeyB0YWc6IHQuaGVhZGluZzIsIGNsYXNzOiBcInNiLWgyXCIgfSxcbiAgICB7IHRhZzogdC5oZWFkaW5nMywgY2xhc3M6IFwic2ItaDNcIiB9LFxuICAgIHsgdGFnOiB0LmxpbmssIGNsYXNzOiBcInNiLWxpbmtcIiB9LFxuICAgIHsgdGFnOiB0Lm1ldGEsIGNsYXNzOiBcInNiLW1ldGFcIiB9LFxuICAgIHsgdGFnOiB0LnF1b3RlLCBjbGFzczogXCJzYi1xdW90ZVwiIH0sXG4gICAgeyB0YWc6IHQubW9ub3NwYWNlLCBjbGFzczogXCJzYi1jb2RlXCIgfSxcbiAgICB7IHRhZzogdC51cmwsIGNsYXNzOiBcInNiLXVybFwiIH0sXG4gICAgeyB0YWc6IGN0Lldpa2lMaW5rVGFnLCBjbGFzczogXCJzYi13aWtpLWxpbmtcIiB9LFxuICAgIHsgdGFnOiBjdC5XaWtpTGlua1BhZ2VUYWcsIGNsYXNzOiBcInNiLXdpa2ktbGluay1wYWdlXCIgfSxcbiAgICB7IHRhZzogY3QuVGFza1RhZywgY2xhc3M6IFwic2ItdGFza1wiIH0sXG4gICAgeyB0YWc6IGN0LlRhc2tNYXJrZXJUYWcsIGNsYXNzOiBcInNiLXRhc2stbWFya2VyXCIgfSxcbiAgICB7IHRhZzogY3QuQ29kZUluZm9UYWcsIGNsYXNzOiBcInNiLWNvZGUtaW5mb1wiIH0sXG4gICAgeyB0YWc6IGN0LkNvbW1lbnRUYWcsIGNsYXNzOiBcInNiLWNvbW1lbnRcIiB9LFxuICAgIHsgdGFnOiBjdC5Db21tZW50TWFya2VyVGFnLCBjbGFzczogXCJzYi1jb21tZW50LW1hcmtlclwiIH0sXG4gICAgeyB0YWc6IGN0LkhpZ2hsaWdodCwgY2xhc3M6IFwic2ItaGlnaGxpZ2h0XCIgfSxcbiAgICB7IHRhZzogdC5lbXBoYXNpcywgY2xhc3M6IFwic2ItZW1waGFzaXNcIiB9LFxuICAgIHsgdGFnOiB0LnN0cm9uZywgY2xhc3M6IFwic2Itc3Ryb25nXCIgfSxcbiAgICB7IHRhZzogdC5hdG9tLCBjbGFzczogXCJzYi1hdG9tXCIgfSxcbiAgICB7IHRhZzogdC5ib29sLCBjbGFzczogXCJzYi1ib29sXCIgfSxcbiAgICB7IHRhZzogdC51cmwsIGNsYXNzOiBcInNiLXVybFwiIH0sXG4gICAgeyB0YWc6IHQuaW5zZXJ0ZWQsIGNsYXNzOiBcInNiLWluc2VydGVkXCIgfSxcbiAgICB7IHRhZzogdC5kZWxldGVkLCBjbGFzczogXCJzYi1kZWxldGVkXCIgfSxcbiAgICB7IHRhZzogdC5saXRlcmFsLCBjbGFzczogXCJzYi1saXRlcmFsXCIgfSxcbiAgICB7IHRhZzogdC5rZXl3b3JkLCBjbGFzczogXCJzYi1rZXl3b3JkXCIgfSxcbiAgICB7IHRhZzogdC5saXN0LCBjbGFzczogXCJzYi1saXN0XCIgfSxcbiAgICAvLyB7IHRhZzogdC5kZWYsIGNsYXNzOiBcInNiLWxpXCIgfSxcbiAgICB7IHRhZzogdC5zdHJpbmcsIGNsYXNzOiBcInNiLXN0cmluZ1wiIH0sXG4gICAgeyB0YWc6IHQubnVtYmVyLCBjbGFzczogXCJzYi1udW1iZXJcIiB9LFxuICAgIHsgdGFnOiBbdC5yZWdleHAsIHQuZXNjYXBlLCB0LnNwZWNpYWwodC5zdHJpbmcpXSwgY2xhc3M6IFwic2Itc3RyaW5nMlwiIH0sXG4gICAgeyB0YWc6IHQudmFyaWFibGVOYW1lLCBjbGFzczogXCJzYi12YXJpYWJsZU5hbWVcIiB9LFxuICAgIHsgdGFnOiB0LnR5cGVOYW1lLCBjbGFzczogXCJzYi10eXBlTmFtZVwiIH0sXG4gICAgeyB0YWc6IHQuY29tbWVudCwgY2xhc3M6IFwic2ItY29tbWVudFwiIH0sXG4gICAgeyB0YWc6IHQuaW52YWxpZCwgY2xhc3M6IFwic2ItaW52YWxpZFwiIH0sXG4gICAgeyB0YWc6IHQucHJvY2Vzc2luZ0luc3RydWN0aW9uLCBjbGFzczogXCJzYi1tZXRhXCIgfSxcbiAgICAvLyB7IHRhZzogdC5jb250ZW50LCBjbGFzczogXCJ0YmwtY29udGVudFwiIH0sXG4gICAgeyB0YWc6IHQucHVuY3R1YXRpb24sIGNsYXNzOiBcInNiLXB1bmN0dWF0aW9uXCIgfSxcbiAgICB7IHRhZzogY3QuSG9yaXpvbnRhbFJ1bGVUYWcsIGNsYXNzOiBcInNiLWhyXCIgfSxcbiAgICAuLi5tZEV4dGVuc2lvbi5tYXAoKG1kRXh0KSA9PiB7XG4gICAgICByZXR1cm4geyB0YWc6IG1kRXh0LnRhZywgLi4ubWRFeHQuc3R5bGVzLCBjbGFzczogbWRFeHQuY2xhc3NOYW1lIH07XG4gICAgfSksXG4gIF0pO1xuICBjb25zdCBmbjAgPSBobHMuc3R5bGU7XG4gIC8vIEhhY2s6IGh0dHBzOi8vZGlzY3Vzcy5jb2RlbWlycm9yLm5ldC90L2hpZ2hsaWdodGluZy10aGF0LXNlZW1zLWlnbm9yZWQtaW4tY202LzQzMjAvMTZcbiAgLy8gQHRzLWlnbm9yZVxuICBobHMuc3R5bGUgPSAodGFncykgPT4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiVGFnc1wiLCB0YWdzKTtcbiAgICByZXR1cm4gZm4wKHRhZ3MgfHwgW10pO1xuICB9O1xuXG4gIHJldHVybiBobHM7XG59XG4iLCAiaW1wb3J0IHsgU3lzY2FsbENvbnRleHQsIFN5c0NhbGxNYXBwaW5nIH0gZnJvbSBcIi4uL3N5c3RlbS50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJveHlTeXNjYWxscyhcbiAgbmFtZXM6IHN0cmluZ1tdLFxuICB0cmFuc3BvcnRDYWxsOiAoXG4gICAgY3R4OiBTeXNjYWxsQ29udGV4dCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKSA9PiBQcm9taXNlPGFueT4sXG4pOiBTeXNDYWxsTWFwcGluZyB7XG4gIGxldCBzeXNjYWxsczogU3lzQ2FsbE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKGxldCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgc3lzY2FsbHNbbmFtZV0gPSAoY3R4LCAuLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgcmV0dXJuIHRyYW5zcG9ydENhbGwoY3R4LCBuYW1lLCAuLi5hcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN5c2NhbGxzO1xufVxuIiwgIi8qIGVzbS5zaCAtIGVzYnVpbGQgYnVuZGxlKGRleGllQDMuMi4yKSBkZW5vIHByb2R1Y3Rpb24gKi9cbnZhciBfX2dsb2JhbCQgPSBnbG9iYWxUaGlzIHx8ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogc2VsZik7dmFyIF9fc2V0SW1tZWRpYXRlJCA9IChjYiwgLi4uYXJncykgPT4gc2V0VGltZW91dChjYiwgMCwgLi4uYXJncyk7dmFyIFA9dHlwZW9mIGdsb2JhbFRoaXM8XCJ1XCI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjxcInVcIj9zZWxmOnR5cGVvZiBkb2N1bWVudDxcInVcIj93aW5kb3c6X19nbG9iYWwkLE09T2JqZWN0LmtleXMsaj1BcnJheS5pc0FycmF5O3R5cGVvZiBQcm9taXNlPFwidVwiJiYhUC5Qcm9taXNlJiYoUC5Qcm9taXNlPVByb21pc2UpO2Z1bmN0aW9uIEwodCxlKXtyZXR1cm4gdHlwZW9mIGUhPVwib2JqZWN0XCJ8fE0oZSkuZm9yRWFjaChmdW5jdGlvbihuKXt0W25dPWVbbl19KSx0fXZhciBNZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsYXI9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gVyh0LGUpe3JldHVybiBhci5jYWxsKHQsZSl9ZnVuY3Rpb24gU2UodCxlKXt0eXBlb2YgZT09XCJmdW5jdGlvblwiJiYoZT1lKE1lKHQpKSksKHR5cGVvZiBSZWZsZWN0PlwidVwiP006UmVmbGVjdC5vd25LZXlzKShlKS5mb3JFYWNoKG49PntyZSh0LG4sZVtuXSl9KX12YXIgSW49T2JqZWN0LmRlZmluZVByb3BlcnR5O2Z1bmN0aW9uIHJlKHQsZSxuLHIpe0luKHQsZSxMKG4mJlcobixcImdldFwiKSYmdHlwZW9mIG4uZ2V0PT1cImZ1bmN0aW9uXCI/e2dldDpuLmdldCxzZXQ6bi5zZXQsY29uZmlndXJhYmxlOiEwfTp7dmFsdWU6bixjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9LHIpKX1mdW5jdGlvbiBBZSh0KXtyZXR1cm57ZnJvbTpmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkscmUodC5wcm90b3R5cGUsXCJjb25zdHJ1Y3RvclwiLHQpLHtleHRlbmQ6U2UuYmluZChudWxsLHQucHJvdG90eXBlKX19fX12YXIgdXI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtmdW5jdGlvbiBlbih0LGUpe2xldCBuPXVyKHQsZSkscjtyZXR1cm4gbnx8KHI9TWUodCkpJiZlbihyLGUpfXZhciBscj1bXS5zbGljZTtmdW5jdGlvbiB5dCh0LGUsbil7cmV0dXJuIGxyLmNhbGwodCxlLG4pfWZ1bmN0aW9uIERuKHQsZSl7cmV0dXJuIGUodCl9ZnVuY3Rpb24gRGUodCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiQXNzZXJ0aW9uIEZhaWxlZFwiKX1mdW5jdGlvbiBSbih0KXtQLnNldEltbWVkaWF0ZT9fX3NldEltbWVkaWF0ZSQodCk6c2V0VGltZW91dCh0LDApfWZ1bmN0aW9uIFBuKHQsZSl7cmV0dXJuIHQucmVkdWNlKChuLHIsaSk9Pnt2YXIgcz1lKHIsaSk7cmV0dXJuIHMmJihuW3NbMF1dPXNbMV0pLG59LHt9KX1mdW5jdGlvbiBjcih0LGUsbil7dHJ5e3QuYXBwbHkobnVsbCxuKX1jYXRjaChyKXtlJiZlKHIpfX1mdW5jdGlvbiBuZSh0LGUpe2lmKFcodCxlKSlyZXR1cm4gdFtlXTtpZighZSlyZXR1cm4gdDtpZih0eXBlb2YgZSE9XCJzdHJpbmdcIil7Zm9yKHZhciBuPVtdLHI9MCxpPWUubGVuZ3RoO3I8aTsrK3Ipe3ZhciBzPW5lKHQsZVtyXSk7bi5wdXNoKHMpfXJldHVybiBufXZhciBvPWUuaW5kZXhPZihcIi5cIik7aWYobyE9PS0xKXt2YXIgYT10W2Uuc3Vic3RyKDAsbyldO3JldHVybiBhPT09dm9pZCAwP3ZvaWQgMDpuZShhLGUuc3Vic3RyKG8rMSkpfX1mdW5jdGlvbiBRKHQsZSxuKXtpZighKCF0fHxlPT09dm9pZCAwKSYmIShcImlzRnJvemVuXCJpbiBPYmplY3QmJk9iamVjdC5pc0Zyb3plbih0KSkpaWYodHlwZW9mIGUhPVwic3RyaW5nXCImJlwibGVuZ3RoXCJpbiBlKXtEZSh0eXBlb2YgbiE9XCJzdHJpbmdcIiYmXCJsZW5ndGhcImluIG4pO2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGg7cjxpOysrcilRKHQsZVtyXSxuW3JdKX1lbHNle3ZhciBzPWUuaW5kZXhPZihcIi5cIik7aWYocyE9PS0xKXt2YXIgbz1lLnN1YnN0cigwLHMpLGE9ZS5zdWJzdHIocysxKTtpZihhPT09XCJcIiluPT09dm9pZCAwP2oodCkmJiFpc05hTihwYXJzZUludChvKSk/dC5zcGxpY2UobywxKTpkZWxldGUgdFtvXTp0W29dPW47ZWxzZXt2YXIgdT10W29dOyghdXx8IVcodCxvKSkmJih1PXRbb109e30pLFEodSxhLG4pfX1lbHNlIG49PT12b2lkIDA/aih0KSYmIWlzTmFOKHBhcnNlSW50KGUpKT90LnNwbGljZShlLDEpOmRlbGV0ZSB0W2VdOnRbZV09bn19ZnVuY3Rpb24gZnIodCxlKXt0eXBlb2YgZT09XCJzdHJpbmdcIj9RKHQsZSx2b2lkIDApOlwibGVuZ3RoXCJpbiBlJiZbXS5tYXAuY2FsbChlLGZ1bmN0aW9uKG4pe1EodCxuLHZvaWQgMCl9KX1mdW5jdGlvbiBrbih0KXt2YXIgZT17fTtmb3IodmFyIG4gaW4gdClXKHQsbikmJihlW25dPXRbbl0pO3JldHVybiBlfXZhciBocj1bXS5jb25jYXQ7ZnVuY3Rpb24gT24odCl7cmV0dXJuIGhyLmFwcGx5KFtdLHQpfXZhciBNbj1cIkJvb2xlYW4sU3RyaW5nLERhdGUsUmVnRXhwLEJsb2IsRmlsZSxGaWxlTGlzdCxGaWxlU3lzdGVtRmlsZUhhbmRsZSxBcnJheUJ1ZmZlcixEYXRhVmlldyxVaW50OENsYW1wZWRBcnJheSxJbWFnZUJpdG1hcCxJbWFnZURhdGEsTWFwLFNldCxDcnlwdG9LZXlcIi5zcGxpdChcIixcIikuY29uY2F0KE9uKFs4LDE2LDMyLDY0XS5tYXAodD0+W1wiSW50XCIsXCJVaW50XCIsXCJGbG9hdFwiXS5tYXAoZT0+ZSt0K1wiQXJyYXlcIikpKSkuZmlsdGVyKHQ9PlBbdF0pLGRyPU1uLm1hcCh0PT5QW3RdKTtQbihNbix0PT5bdCwhMF0pO3ZhciBvZT1udWxsO2Z1bmN0aW9uICRlKHQpe29lPXR5cGVvZiBXZWFrTWFwPFwidVwiJiZuZXcgV2Vha01hcDtsZXQgZT1DdCh0KTtyZXR1cm4gb2U9bnVsbCxlfWZ1bmN0aW9uIEN0KHQpe2lmKCF0fHx0eXBlb2YgdCE9XCJvYmplY3RcIilyZXR1cm4gdDtsZXQgZT1vZSYmb2UuZ2V0KHQpO2lmKGUpcmV0dXJuIGU7aWYoaih0KSl7ZT1bXSxvZSYmb2Uuc2V0KHQsZSk7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHI7KytuKWUucHVzaChDdCh0W25dKSl9ZWxzZSBpZihkci5pbmRleE9mKHQuY29uc3RydWN0b3IpPj0wKWU9dDtlbHNle2xldCBzPU1lKHQpO2U9cz09PU9iamVjdC5wcm90b3R5cGU/e306T2JqZWN0LmNyZWF0ZShzKSxvZSYmb2Uuc2V0KHQsZSk7Zm9yKHZhciBpIGluIHQpVyh0LGkpJiYoZVtpXT1DdCh0W2ldKSl9cmV0dXJuIGV9dmFye3RvU3RyaW5nOnByfT17fTtmdW5jdGlvbiBLdCh0KXtyZXR1cm4gcHIuY2FsbCh0KS5zbGljZSg4LC0xKX12YXIgVHQ9dHlwZW9mIFN5bWJvbDxcInVcIj9TeW1ib2wuaXRlcmF0b3I6XCJAQGl0ZXJhdG9yXCIseXI9dHlwZW9mIFR0PT1cInN5bWJvbFwiP2Z1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0IT1udWxsJiYoZT10W1R0XSkmJmUuYXBwbHkodCl9OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHhlPXt9O2Z1bmN0aW9uIGVlKHQpe3ZhciBlLG4scixpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0xKXtpZihqKHQpKXJldHVybiB0LnNsaWNlKCk7aWYodGhpcz09PXhlJiZ0eXBlb2YgdD09XCJzdHJpbmdcIilyZXR1cm5bdF07aWYoaT15cih0KSl7Zm9yKG49W107cj1pLm5leHQoKSwhci5kb25lOyluLnB1c2goci52YWx1ZSk7cmV0dXJuIG59aWYodD09bnVsbClyZXR1cm5bdF07aWYoZT10Lmxlbmd0aCx0eXBlb2YgZT09XCJudW1iZXJcIil7Zm9yKG49bmV3IEFycmF5KGUpO2UtLTspbltlXT10W2VdO3JldHVybiBufXJldHVyblt0XX1mb3IoZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGUpO2UtLTspbltlXT1hcmd1bWVudHNbZV07cmV0dXJuIG59dmFyIHRuPXR5cGVvZiBTeW1ib2w8XCJ1XCI/dD0+dFtTeW1ib2wudG9TdHJpbmdUYWddPT09XCJBc3luY0Z1bmN0aW9uXCI6KCk9PiExLHE9dHlwZW9mIGxvY2F0aW9uPFwidVwiJiYvXihodHRwfGh0dHBzKTpcXC9cXC8obG9jYWxob3N0fDEyN1xcLjBcXC4wXFwuMSkvLnRlc3QobG9jYXRpb24uaHJlZik7ZnVuY3Rpb24gQm4odCxlKXtxPXQsRm49ZX12YXIgRm49KCk9PiEwLG1yPSFuZXcgRXJyb3IoXCJcIikuc3RhY2s7ZnVuY3Rpb24gdmUoKXtpZihtcil0cnl7dGhyb3cgdmUuYXJndW1lbnRzLG5ldyBFcnJvcn1jYXRjaCh0KXtyZXR1cm4gdH1yZXR1cm4gbmV3IEVycm9yfWZ1bmN0aW9uIEl0KHQsZSl7dmFyIG49dC5zdGFjaztyZXR1cm4gbj8oZT1lfHwwLG4uaW5kZXhPZih0Lm5hbWUpPT09MCYmKGUrPSh0Lm5hbWUrdC5tZXNzYWdlKS5zcGxpdChgXG5gKS5sZW5ndGgpLG4uc3BsaXQoYFxuYCkuc2xpY2UoZSkuZmlsdGVyKEZuKS5tYXAocj0+YFxuYCtyKS5qb2luKFwiXCIpKTpcIlwifXZhciBncj1bXCJNb2RpZnlcIixcIkJ1bGtcIixcIk9wZW5GYWlsZWRcIixcIlZlcnNpb25DaGFuZ2VcIixcIlNjaGVtYVwiLFwiVXBncmFkZVwiLFwiSW52YWxpZFRhYmxlXCIsXCJNaXNzaW5nQVBJXCIsXCJOb1N1Y2hEYXRhYmFzZVwiLFwiSW52YWxpZEFyZ3VtZW50XCIsXCJTdWJUcmFuc2FjdGlvblwiLFwiVW5zdXBwb3J0ZWRcIixcIkludGVybmFsXCIsXCJEYXRhYmFzZUNsb3NlZFwiLFwiUHJlbWF0dXJlQ29tbWl0XCIsXCJGb3JlaWduQXdhaXRcIl0sTm49W1wiVW5rbm93blwiLFwiQ29uc3RyYWludFwiLFwiRGF0YVwiLFwiVHJhbnNhY3Rpb25JbmFjdGl2ZVwiLFwiUmVhZE9ubHlcIixcIlZlcnNpb25cIixcIk5vdEZvdW5kXCIsXCJJbnZhbGlkU3RhdGVcIixcIkludmFsaWRBY2Nlc3NcIixcIkFib3J0XCIsXCJUaW1lb3V0XCIsXCJRdW90YUV4Y2VlZGVkXCIsXCJTeW50YXhcIixcIkRhdGFDbG9uZVwiXSxubj1nci5jb25jYXQoTm4pLHZyPXtWZXJzaW9uQ2hhbmdlZDpcIkRhdGFiYXNlIHZlcnNpb24gY2hhbmdlZCBieSBvdGhlciBkYXRhYmFzZSBjb25uZWN0aW9uXCIsRGF0YWJhc2VDbG9zZWQ6XCJEYXRhYmFzZSBoYXMgYmVlbiBjbG9zZWRcIixBYm9ydDpcIlRyYW5zYWN0aW9uIGFib3J0ZWRcIixUcmFuc2FjdGlvbkluYWN0aXZlOlwiVHJhbnNhY3Rpb24gaGFzIGFscmVhZHkgY29tcGxldGVkIG9yIGZhaWxlZFwiLE1pc3NpbmdBUEk6XCJJbmRleGVkREIgQVBJIG1pc3NpbmcuIFBsZWFzZSB2aXNpdCBodHRwczovL3Rpbnl1cmwuY29tL3kydXV2c2tiXCJ9O2Z1bmN0aW9uIENlKHQsZSl7dGhpcy5fZT12ZSgpLHRoaXMubmFtZT10LHRoaXMubWVzc2FnZT1lfUFlKENlKS5mcm9tKEVycm9yKS5leHRlbmQoe3N0YWNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2t8fCh0aGlzLl9zdGFjaz10aGlzLm5hbWUrXCI6IFwiK3RoaXMubWVzc2FnZStJdCh0aGlzLl9lLDIpKX19LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZStcIjogXCIrdGhpcy5tZXNzYWdlfX0pO2Z1bmN0aW9uIGpuKHQsZSl7cmV0dXJuIHQrXCIuIEVycm9yczogXCIrT2JqZWN0LmtleXMoZSkubWFwKG49PmVbbl0udG9TdHJpbmcoKSkuZmlsdGVyKChuLHIsaSk9PmkuaW5kZXhPZihuKT09PXIpLmpvaW4oYFxuYCl9ZnVuY3Rpb24gc3QodCxlLG4scil7dGhpcy5fZT12ZSgpLHRoaXMuZmFpbHVyZXM9ZSx0aGlzLmZhaWxlZEtleXM9cix0aGlzLnN1Y2Nlc3NDb3VudD1uLHRoaXMubWVzc2FnZT1qbih0LGUpfUFlKHN0KS5mcm9tKENlKTtmdW5jdGlvbiBQZSh0LGUpe3RoaXMuX2U9dmUoKSx0aGlzLm5hbWU9XCJCdWxrRXJyb3JcIix0aGlzLmZhaWx1cmVzPU9iamVjdC5rZXlzKGUpLm1hcChuPT5lW25dKSx0aGlzLmZhaWx1cmVzQnlQb3M9ZSx0aGlzLm1lc3NhZ2U9am4odCxlKX1BZShQZSkuZnJvbShDZSk7dmFyIHJuPW5uLnJlZHVjZSgodCxlKT0+KHRbZV09ZStcIkVycm9yXCIsdCkse30pLF9yPUNlLEM9bm4ucmVkdWNlKCh0LGUpPT57dmFyIG49ZStcIkVycm9yXCI7ZnVuY3Rpb24gcihpLHMpe3RoaXMuX2U9dmUoKSx0aGlzLm5hbWU9bixpP3R5cGVvZiBpPT1cInN0cmluZ1wiPyh0aGlzLm1lc3NhZ2U9YCR7aX0ke3M/YFxuIGArczpcIlwifWAsdGhpcy5pbm5lcj1zfHxudWxsKTp0eXBlb2YgaT09XCJvYmplY3RcIiYmKHRoaXMubWVzc2FnZT1gJHtpLm5hbWV9ICR7aS5tZXNzYWdlfWAsdGhpcy5pbm5lcj1pKToodGhpcy5tZXNzYWdlPXZyW2VdfHxuLHRoaXMuaW5uZXI9bnVsbCl9cmV0dXJuIEFlKHIpLmZyb20oX3IpLHRbZV09cix0fSx7fSk7Qy5TeW50YXg9U3ludGF4RXJyb3I7Qy5UeXBlPVR5cGVFcnJvcjtDLlJhbmdlPVJhbmdlRXJyb3I7dmFyIGduPU5uLnJlZHVjZSgodCxlKT0+KHRbZStcIkVycm9yXCJdPUNbZV0sdCkse30pO2Z1bmN0aW9uIHdyKHQsZSl7aWYoIXR8fHQgaW5zdGFuY2VvZiBDZXx8dCBpbnN0YW5jZW9mIFR5cGVFcnJvcnx8dCBpbnN0YW5jZW9mIFN5bnRheEVycm9yfHwhdC5uYW1lfHwhZ25bdC5uYW1lXSlyZXR1cm4gdDt2YXIgbj1uZXcgZ25bdC5uYW1lXShlfHx0Lm1lc3NhZ2UsdCk7cmV0dXJuXCJzdGFja1wiaW4gdCYmcmUobixcInN0YWNrXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLnN0YWNrfX0pLG59dmFyIG10PW5uLnJlZHVjZSgodCxlKT0+KFtcIlN5bnRheFwiLFwiVHlwZVwiLFwiUmFuZ2VcIl0uaW5kZXhPZihlKT09PS0xJiYodFtlK1wiRXJyb3JcIl09Q1tlXSksdCkse30pO210Lk1vZGlmeUVycm9yPXN0O210LkRleGllRXJyb3I9Q2U7bXQuQnVsa0Vycm9yPVBlO2Z1bmN0aW9uIFIoKXt9ZnVuY3Rpb24gemUodCl7cmV0dXJuIHR9ZnVuY3Rpb24gYnIodCxlKXtyZXR1cm4gdD09bnVsbHx8dD09PXplP2U6ZnVuY3Rpb24obil7cmV0dXJuIGUodChuKSl9fWZ1bmN0aW9uIG1lKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHhyKHQsZSl7cmV0dXJuIHQ9PT1SP2U6ZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuIT09dm9pZCAwJiYoYXJndW1lbnRzWzBdPW4pO3ZhciByPXRoaXMub25zdWNjZXNzLGk9dGhpcy5vbmVycm9yO3RoaXMub25zdWNjZXNzPW51bGwsdGhpcy5vbmVycm9yPW51bGw7dmFyIHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHImJih0aGlzLm9uc3VjY2Vzcz10aGlzLm9uc3VjY2Vzcz9tZShyLHRoaXMub25zdWNjZXNzKTpyKSxpJiYodGhpcy5vbmVycm9yPXRoaXMub25lcnJvcj9tZShpLHRoaXMub25lcnJvcik6aSkscyE9PXZvaWQgMD9zOm59fWZ1bmN0aW9uIEVyKHQsZSl7cmV0dXJuIHQ9PT1SP2U6ZnVuY3Rpb24oKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj10aGlzLm9uc3VjY2VzcyxyPXRoaXMub25lcnJvcjt0aGlzLm9uc3VjY2Vzcz10aGlzLm9uZXJyb3I9bnVsbCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuJiYodGhpcy5vbnN1Y2Nlc3M9dGhpcy5vbnN1Y2Nlc3M/bWUobix0aGlzLm9uc3VjY2Vzcyk6biksciYmKHRoaXMub25lcnJvcj10aGlzLm9uZXJyb3I/bWUocix0aGlzLm9uZXJyb3IpOnIpfX1mdW5jdGlvbiBTcih0LGUpe3JldHVybiB0PT09Uj9lOmZ1bmN0aW9uKG4pe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO0wobixyKTt2YXIgaT10aGlzLm9uc3VjY2VzcyxzPXRoaXMub25lcnJvcjt0aGlzLm9uc3VjY2Vzcz1udWxsLHRoaXMub25lcnJvcj1udWxsO3ZhciBvPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpJiYodGhpcy5vbnN1Y2Nlc3M9dGhpcy5vbnN1Y2Nlc3M/bWUoaSx0aGlzLm9uc3VjY2Vzcyk6aSkscyYmKHRoaXMub25lcnJvcj10aGlzLm9uZXJyb3I/bWUocyx0aGlzLm9uZXJyb3IpOnMpLHI9PT12b2lkIDA/bz09PXZvaWQgMD92b2lkIDA6bzpMKHIsbyl9fWZ1bmN0aW9uIEFyKHQsZSl7cmV0dXJuIHQ9PT1SP2U6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk9PT0hMT8hMTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gc24odCxlKXtyZXR1cm4gdD09PVI/ZTpmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKG4mJnR5cGVvZiBuLnRoZW49PVwiZnVuY3Rpb25cIil7Zm9yKHZhciByPXRoaXMsaT1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KGkpO2ktLTspc1tpXT1hcmd1bWVudHNbaV07cmV0dXJuIG4udGhlbihmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHIscyl9KX1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fXZhciBCZT17fSxDcj0xMDAsS3I9MjAsVm49MTAwLFtEdCxvdCxSdF09dHlwZW9mIFByb21pc2U+XCJ1XCI/W106KCgpPT57bGV0IHQ9UHJvbWlzZS5yZXNvbHZlKCk7aWYodHlwZW9mIGNyeXB0bz5cInVcInx8IWNyeXB0by5zdWJ0bGUpcmV0dXJuW3QsTWUodCksdF07bGV0IGU9Y3J5cHRvLnN1YnRsZS5kaWdlc3QoXCJTSEEtNTEyXCIsbmV3IFVpbnQ4QXJyYXkoWzBdKSk7cmV0dXJuW2UsTWUoZSksdF19KSgpLExuPW90JiZvdC50aGVuLFplPUR0JiZEdC5jb25zdHJ1Y3Rvcixvbj0hIVJ0LFB0PSExLFRyPVJ0PygpPT57UnQudGhlbihYZSl9OlAuc2V0SW1tZWRpYXRlP19fc2V0SW1tZWRpYXRlJC5iaW5kKG51bGwsWGUpOlAuTXV0YXRpb25PYnNlcnZlcj8oKT0+e3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntYZSgpLHQ9bnVsbH0pLm9ic2VydmUodCx7YXR0cmlidXRlczohMH0pLHQuc2V0QXR0cmlidXRlKFwiaVwiLFwiMVwiKX06KCk9PntzZXRUaW1lb3V0KFhlLDApfSxGZT1mdW5jdGlvbih0LGUpe1JlLnB1c2goW3QsZV0pLGF0JiYoVHIoKSxhdD0hMSl9LGt0PSEwLGF0PSEwLHBlPVtdLGV0PVtdLE90PW51bGwsTXQ9emUsRWU9e2lkOlwiZ2xvYmFsXCIsZ2xvYmFsOiEwLHJlZjowLHVuaGFuZGxlZHM6W10sb251bmhhbmRsZWQ6d24scGdwOiExLGVudjp7fSxmaW5hbGl6ZTpmdW5jdGlvbigpe3RoaXMudW5oYW5kbGVkcy5mb3JFYWNoKHQ9Pnt0cnl7d24odFswXSx0WzFdKX1jYXRjaHt9fSl9fSxBPUVlLFJlPVtdLHllPTAsdHQ9W107ZnVuY3Rpb24gYih0KXtpZih0eXBlb2YgdGhpcyE9XCJvYmplY3RcIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3XCIpO3RoaXMuX2xpc3RlbmVycz1bXSx0aGlzLm9udW5jYXRjaGVkPVIsdGhpcy5fbGliPSExO3ZhciBlPXRoaXMuX1BTRD1BO2lmKHEmJih0aGlzLl9zdGFja0hvbGRlcj12ZSgpLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9udW1QcmV2PTApLHR5cGVvZiB0IT1cImZ1bmN0aW9uXCIpe2lmKHQhPT1CZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm90IGEgZnVuY3Rpb25cIik7dGhpcy5fc3RhdGU9YXJndW1lbnRzWzFdLHRoaXMuX3ZhbHVlPWFyZ3VtZW50c1syXSx0aGlzLl9zdGF0ZT09PSExJiZGdCh0aGlzLHRoaXMuX3ZhbHVlKTtyZXR1cm59dGhpcy5fc3RhdGU9bnVsbCx0aGlzLl92YWx1ZT1udWxsLCsrZS5yZWYsem4odGhpcyx0KX12YXIgQnQ9e2dldDpmdW5jdGlvbigpe3ZhciB0PUEsZT11dDtmdW5jdGlvbiBuKHIsaSl7dmFyIHM9IXQuZ2xvYmFsJiYodCE9PUF8fGUhPT11dCk7bGV0IG89cyYmIWllKCk7dmFyIGE9bmV3IGIoKHUsbCk9Pnthbih0aGlzLG5ldyAkbihjdChyLHQscyxvKSxjdChpLHQscyxvKSx1LGwsdCkpfSk7cmV0dXJuIHEmJkhuKGEsdGhpcyksYX1yZXR1cm4gbi5wcm90b3R5cGU9QmUsbn0sc2V0OmZ1bmN0aW9uKHQpe3JlKHRoaXMsXCJ0aGVuXCIsdCYmdC5wcm90b3R5cGU9PT1CZT9CdDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9LHNldDpCdC5zZXR9KX19O1NlKGIucHJvdG90eXBlLHt0aGVuOkJ0LF90aGVuOmZ1bmN0aW9uKHQsZSl7YW4odGhpcyxuZXcgJG4obnVsbCxudWxsLHQsZSxBKSl9LGNhdGNoOmZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0xKXJldHVybiB0aGlzLnRoZW4obnVsbCx0KTt2YXIgZT1hcmd1bWVudHNbMF0sbj1hcmd1bWVudHNbMV07cmV0dXJuIHR5cGVvZiBlPT1cImZ1bmN0aW9uXCI/dGhpcy50aGVuKG51bGwscj0+ciBpbnN0YW5jZW9mIGU/bihyKTpudChyKSk6dGhpcy50aGVuKG51bGwscj0+ciYmci5uYW1lPT09ZT9uKHIpOm50KHIpKX0sZmluYWxseTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKGU9Pih0KCksZSksZT0+KHQoKSxudChlKSkpfSxzdGFjazp7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2spcmV0dXJuIHRoaXMuX3N0YWNrO3RyeXtQdD0hMDt2YXIgdD1Xbih0aGlzLFtdLEtyKSxlPXQuam9pbihgXG5Gcm9tIHByZXZpb3VzOiBgKTtyZXR1cm4gdGhpcy5fc3RhdGUhPT1udWxsJiYodGhpcy5fc3RhY2s9ZSksZX1maW5hbGx5e1B0PSExfX19LHRpbWVvdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDwxLzA/bmV3IGIoKG4scik9Pnt2YXIgaT1zZXRUaW1lb3V0KCgpPT5yKG5ldyBDLlRpbWVvdXQoZSkpLHQpO3RoaXMudGhlbihuLHIpLmZpbmFsbHkoY2xlYXJUaW1lb3V0LmJpbmQobnVsbCxpKSl9KTp0aGlzfX0pO3R5cGVvZiBTeW1ib2w8XCJ1XCImJlN5bWJvbC50b1N0cmluZ1RhZyYmcmUoYi5wcm90b3R5cGUsU3ltYm9sLnRvU3RyaW5nVGFnLFwiRGV4aWUuUHJvbWlzZVwiKTtFZS5lbnY9WW4oKTtmdW5jdGlvbiAkbih0LGUsbixyLGkpe3RoaXMub25GdWxmaWxsZWQ9dHlwZW9mIHQ9PVwiZnVuY3Rpb25cIj90Om51bGwsdGhpcy5vblJlamVjdGVkPXR5cGVvZiBlPT1cImZ1bmN0aW9uXCI/ZTpudWxsLHRoaXMucmVzb2x2ZT1uLHRoaXMucmVqZWN0PXIsdGhpcy5wc2Q9aX1TZShiLHthbGw6ZnVuY3Rpb24oKXt2YXIgdD1lZS5hcHBseShudWxsLGFyZ3VtZW50cykubWFwKGx0KTtyZXR1cm4gbmV3IGIoZnVuY3Rpb24oZSxuKXt0Lmxlbmd0aD09PTAmJmUoW10pO3ZhciByPXQubGVuZ3RoO3QuZm9yRWFjaCgoaSxzKT0+Yi5yZXNvbHZlKGkpLnRoZW4obz0+e3Rbc109bywtLXJ8fGUodCl9LG4pKX0pfSxyZXNvbHZlOnQ9PntpZih0IGluc3RhbmNlb2YgYilyZXR1cm4gdDtpZih0JiZ0eXBlb2YgdC50aGVuPT1cImZ1bmN0aW9uXCIpcmV0dXJuIG5ldyBiKChuLHIpPT57dC50aGVuKG4scil9KTt2YXIgZT1uZXcgYihCZSwhMCx0KTtyZXR1cm4gSG4oZSxPdCksZX0scmVqZWN0Om50LHJhY2U6ZnVuY3Rpb24oKXt2YXIgdD1lZS5hcHBseShudWxsLGFyZ3VtZW50cykubWFwKGx0KTtyZXR1cm4gbmV3IGIoKGUsbik9Pnt0Lm1hcChyPT5iLnJlc29sdmUocikudGhlbihlLG4pKX0pfSxQU0Q6e2dldDooKT0+QSxzZXQ6dD0+QT10fSx0b3RhbEVjaG9lczp7Z2V0OigpPT51dH0sbmV3UFNEOmxlLHVzZVBTRDpUZSxzY2hlZHVsZXI6e2dldDooKT0+RmUsc2V0OnQ9PntGZT10fX0scmVqZWN0aW9uTWFwcGVyOntnZXQ6KCk9Pk10LHNldDp0PT57TXQ9dH19LGZvbGxvdzoodCxlKT0+bmV3IGIoKG4scik9PmxlKChpLHMpPT57dmFyIG89QTtvLnVuaGFuZGxlZHM9W10sby5vbnVuaGFuZGxlZD1zLG8uZmluYWxpemU9bWUoZnVuY3Rpb24oKXtEcigoKT0+e3RoaXMudW5oYW5kbGVkcy5sZW5ndGg9PT0wP2koKTpzKHRoaXMudW5oYW5kbGVkc1swXSl9KX0sby5maW5hbGl6ZSksdCgpfSxlLG4scikpfSk7WmUmJihaZS5hbGxTZXR0bGVkJiZyZShiLFwiYWxsU2V0dGxlZFwiLGZ1bmN0aW9uKCl7bGV0IHQ9ZWUuYXBwbHkobnVsbCxhcmd1bWVudHMpLm1hcChsdCk7cmV0dXJuIG5ldyBiKGU9Pnt0Lmxlbmd0aD09PTAmJmUoW10pO2xldCBuPXQubGVuZ3RoLHI9bmV3IEFycmF5KG4pO3QuZm9yRWFjaCgoaSxzKT0+Yi5yZXNvbHZlKGkpLnRoZW4obz0+cltzXT17c3RhdHVzOlwiZnVsZmlsbGVkXCIsdmFsdWU6b30sbz0+cltzXT17c3RhdHVzOlwicmVqZWN0ZWRcIixyZWFzb246b30pLnRoZW4oKCk9Pi0tbnx8ZShyKSkpfSl9KSxaZS5hbnkmJnR5cGVvZiBBZ2dyZWdhdGVFcnJvcjxcInVcIiYmcmUoYixcImFueVwiLGZ1bmN0aW9uKCl7bGV0IHQ9ZWUuYXBwbHkobnVsbCxhcmd1bWVudHMpLm1hcChsdCk7cmV0dXJuIG5ldyBiKChlLG4pPT57dC5sZW5ndGg9PT0wJiZuKG5ldyBBZ2dyZWdhdGVFcnJvcihbXSkpO2xldCByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpO3QuZm9yRWFjaCgocyxvKT0+Yi5yZXNvbHZlKHMpLnRoZW4oYT0+ZShhKSxhPT57aVtvXT1hLC0tcnx8bihuZXcgQWdncmVnYXRlRXJyb3IoaSkpfSkpfSl9KSk7ZnVuY3Rpb24gem4odCxlKXt0cnl7ZShuPT57aWYodC5fc3RhdGU9PT1udWxsKXtpZihuPT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQSBwcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0c2VsZi5cIik7dmFyIHI9dC5fbGliJiZVZSgpO24mJnR5cGVvZiBuLnRoZW49PVwiZnVuY3Rpb25cIj96bih0LChpLHMpPT57biBpbnN0YW5jZW9mIGI/bi5fdGhlbihpLHMpOm4udGhlbihpLHMpfSk6KHQuX3N0YXRlPSEwLHQuX3ZhbHVlPW4sVW4odCkpLHImJldlKCl9fSxGdC5iaW5kKG51bGwsdCkpfWNhdGNoKG4pe0Z0KHQsbil9fWZ1bmN0aW9uIEZ0KHQsZSl7aWYoZXQucHVzaChlKSx0Ll9zdGF0ZT09PW51bGwpe3ZhciBuPXQuX2xpYiYmVWUoKTtlPU10KGUpLHQuX3N0YXRlPSExLHQuX3ZhbHVlPWUscSYmZSE9PW51bGwmJnR5cGVvZiBlPT1cIm9iamVjdFwiJiYhZS5fcHJvbWlzZSYmY3IoKCk9Pnt2YXIgcj1lbihlLFwic3RhY2tcIik7ZS5fcHJvbWlzZT10LHJlKGUsXCJzdGFja1wiLHtnZXQ6KCk9PlB0P3ImJihyLmdldD9yLmdldC5hcHBseShlKTpyLnZhbHVlKTp0LnN0YWNrfSl9KSxScih0KSxVbih0KSxuJiZXZSgpfX1mdW5jdGlvbiBVbih0KXt2YXIgZT10Ll9saXN0ZW5lcnM7dC5fbGlzdGVuZXJzPVtdO2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyOysrbilhbih0LGVbbl0pO3ZhciBpPXQuX1BTRDstLWkucmVmfHxpLmZpbmFsaXplKCkseWU9PT0wJiYoKyt5ZSxGZSgoKT0+ey0teWU9PT0wJiZ1bigpfSxbXSkpfWZ1bmN0aW9uIGFuKHQsZSl7aWYodC5fc3RhdGU9PT1udWxsKXt0Ll9saXN0ZW5lcnMucHVzaChlKTtyZXR1cm59dmFyIG49dC5fc3RhdGU/ZS5vbkZ1bGZpbGxlZDplLm9uUmVqZWN0ZWQ7aWYobj09PW51bGwpcmV0dXJuKHQuX3N0YXRlP2UucmVzb2x2ZTplLnJlamVjdCkodC5fdmFsdWUpOysrZS5wc2QucmVmLCsreWUsRmUoSXIsW24sdCxlXSl9ZnVuY3Rpb24gSXIodCxlLG4pe3RyeXtPdD1lO3ZhciByLGk9ZS5fdmFsdWU7ZS5fc3RhdGU/cj10KGkpOihldC5sZW5ndGgmJihldD1bXSkscj10KGkpLGV0LmluZGV4T2YoaSk9PT0tMSYmUHIoZSkpLG4ucmVzb2x2ZShyKX1jYXRjaChzKXtuLnJlamVjdChzKX1maW5hbGx5e090PW51bGwsLS15ZT09PTAmJnVuKCksLS1uLnBzZC5yZWZ8fG4ucHNkLmZpbmFsaXplKCl9fWZ1bmN0aW9uIFduKHQsZSxuKXtpZihlLmxlbmd0aD09PW4pcmV0dXJuIGU7dmFyIHI9XCJcIjtpZih0Ll9zdGF0ZT09PSExKXt2YXIgaT10Ll92YWx1ZSxzLG87aSE9bnVsbD8ocz1pLm5hbWV8fFwiRXJyb3JcIixvPWkubWVzc2FnZXx8aSxyPUl0KGksMCkpOihzPWksbz1cIlwiKSxlLnB1c2gocysobz9cIjogXCIrbzpcIlwiKStyKX1yZXR1cm4gcSYmKHI9SXQodC5fc3RhY2tIb2xkZXIsMiksciYmZS5pbmRleE9mKHIpPT09LTEmJmUucHVzaChyKSx0Ll9wcmV2JiZXbih0Ll9wcmV2LGUsbikpLGV9ZnVuY3Rpb24gSG4odCxlKXt2YXIgbj1lP2UuX251bVByZXYrMTowO248Q3ImJih0Ll9wcmV2PWUsdC5fbnVtUHJldj1uKX1mdW5jdGlvbiBYZSgpe1VlKCkmJldlKCl9ZnVuY3Rpb24gVWUoKXt2YXIgdD1rdDtyZXR1cm4ga3Q9ITEsYXQ9ITEsdH1mdW5jdGlvbiBXZSgpe3ZhciB0LGUsbjtkbyBmb3IoO1JlLmxlbmd0aD4wOylmb3IodD1SZSxSZT1bXSxuPXQubGVuZ3RoLGU9MDtlPG47KytlKXt2YXIgcj10W2VdO3JbMF0uYXBwbHkobnVsbCxyWzFdKX13aGlsZShSZS5sZW5ndGg+MCk7a3Q9ITAsYXQ9ITB9ZnVuY3Rpb24gdW4oKXt2YXIgdD1wZTtwZT1bXSx0LmZvckVhY2gocj0+e3IuX1BTRC5vbnVuaGFuZGxlZC5jYWxsKG51bGwsci5fdmFsdWUscil9KTtmb3IodmFyIGU9dHQuc2xpY2UoMCksbj1lLmxlbmd0aDtuOyllWy0tbl0oKX1mdW5jdGlvbiBEcih0KXtmdW5jdGlvbiBlKCl7dCgpLHR0LnNwbGljZSh0dC5pbmRleE9mKGUpLDEpfXR0LnB1c2goZSksKyt5ZSxGZSgoKT0+ey0teWU9PT0wJiZ1bigpfSxbXSl9ZnVuY3Rpb24gUnIodCl7cGUuc29tZShlPT5lLl92YWx1ZT09PXQuX3ZhbHVlKXx8cGUucHVzaCh0KX1mdW5jdGlvbiBQcih0KXtmb3IodmFyIGU9cGUubGVuZ3RoO2U7KWlmKHBlWy0tZV0uX3ZhbHVlPT09dC5fdmFsdWUpe3BlLnNwbGljZShlLDEpO3JldHVybn19ZnVuY3Rpb24gbnQodCl7cmV0dXJuIG5ldyBiKEJlLCExLHQpfWZ1bmN0aW9uIE8odCxlKXt2YXIgbj1BO3JldHVybiBmdW5jdGlvbigpe3ZhciByPVVlKCksaT1BO3RyeXtyZXR1cm4gY2UobiwhMCksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2gocyl7ZSYmZShzKX1maW5hbGx5e2NlKGksITEpLHImJldlKCl9fX12YXIgTj17YXdhaXRzOjAsZWNob2VzOjAsaWQ6MH0sa3I9MCxydD1bXSx3dD0wLHV0PTAsT3I9MDtmdW5jdGlvbiBsZSh0LGUsbixyKXt2YXIgaT1BLHM9T2JqZWN0LmNyZWF0ZShpKTtzLnBhcmVudD1pLHMucmVmPTAscy5nbG9iYWw9ITEscy5pZD0rK09yO3ZhciBvPUVlLmVudjtzLmVudj1vbj97UHJvbWlzZTpiLFByb21pc2VQcm9wOnt2YWx1ZTpiLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0sYWxsOmIuYWxsLHJhY2U6Yi5yYWNlLGFsbFNldHRsZWQ6Yi5hbGxTZXR0bGVkLGFueTpiLmFueSxyZXNvbHZlOmIucmVzb2x2ZSxyZWplY3Q6Yi5yZWplY3QsbnRoZW46dm4oby5udGhlbixzKSxndGhlbjp2bihvLmd0aGVuLHMpfTp7fSxlJiZMKHMsZSksKytpLnJlZixzLmZpbmFsaXplPWZ1bmN0aW9uKCl7LS10aGlzLnBhcmVudC5yZWZ8fHRoaXMucGFyZW50LmZpbmFsaXplKCl9O3ZhciBhPVRlKHMsdCxuLHIpO3JldHVybiBzLnJlZj09PTAmJnMuZmluYWxpemUoKSxhfWZ1bmN0aW9uIEtlKCl7cmV0dXJuIE4uaWR8fChOLmlkPSsra3IpLCsrTi5hd2FpdHMsTi5lY2hvZXMrPVZuLE4uaWR9ZnVuY3Rpb24gaWUoKXtyZXR1cm4gTi5hd2FpdHM/KC0tTi5hd2FpdHM9PT0wJiYoTi5pZD0wKSxOLmVjaG9lcz1OLmF3YWl0cypWbiwhMCk6ITF9KFwiXCIrTG4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpPT09LTEmJihLZT1pZT1SKTtmdW5jdGlvbiBsdCh0KXtyZXR1cm4gTi5lY2hvZXMmJnQmJnQuY29uc3RydWN0b3I9PT1aZT8oS2UoKSx0LnRoZW4oZT0+KGllKCksZSksZT0+KGllKCksQihlKSkpKTp0fWZ1bmN0aW9uIE1yKHQpeysrdXQsKCFOLmVjaG9lc3x8LS1OLmVjaG9lcz09PTApJiYoTi5lY2hvZXM9Ti5pZD0wKSxydC5wdXNoKEEpLGNlKHQsITApfWZ1bmN0aW9uIEJyKCl7dmFyIHQ9cnRbcnQubGVuZ3RoLTFdO3J0LnBvcCgpLGNlKHQsITEpfWZ1bmN0aW9uIGNlKHQsZSl7dmFyIG49QTtpZigoZT9OLmVjaG9lcyYmKCF3dCsrfHx0IT09QSk6d3QmJighLS13dHx8dCE9PUEpKSYmWG4oZT9Nci5iaW5kKG51bGwsdCk6QnIpLHQhPT1BJiYoQT10LG49PT1FZSYmKEVlLmVudj1ZbigpKSxvbikpe3ZhciByPUVlLmVudi5Qcm9taXNlLGk9dC5lbnY7b3QudGhlbj1pLm50aGVuLHIucHJvdG90eXBlLnRoZW49aS5ndGhlbiwobi5nbG9iYWx8fHQuZ2xvYmFsKSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQLFwiUHJvbWlzZVwiLGkuUHJvbWlzZVByb3ApLHIuYWxsPWkuYWxsLHIucmFjZT1pLnJhY2Usci5yZXNvbHZlPWkucmVzb2x2ZSxyLnJlamVjdD1pLnJlamVjdCxpLmFsbFNldHRsZWQmJihyLmFsbFNldHRsZWQ9aS5hbGxTZXR0bGVkKSxpLmFueSYmKHIuYW55PWkuYW55KSl9fWZ1bmN0aW9uIFluKCl7dmFyIHQ9UC5Qcm9taXNlO3JldHVybiBvbj97UHJvbWlzZTp0LFByb21pc2VQcm9wOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUCxcIlByb21pc2VcIiksYWxsOnQuYWxsLHJhY2U6dC5yYWNlLGFsbFNldHRsZWQ6dC5hbGxTZXR0bGVkLGFueTp0LmFueSxyZXNvbHZlOnQucmVzb2x2ZSxyZWplY3Q6dC5yZWplY3QsbnRoZW46b3QudGhlbixndGhlbjp0LnByb3RvdHlwZS50aGVufTp7fX1mdW5jdGlvbiBUZSh0LGUsbixyLGkpe3ZhciBzPUE7dHJ5e3JldHVybiBjZSh0LCEwKSxlKG4scixpKX1maW5hbGx5e2NlKHMsITEpfX1mdW5jdGlvbiBYbih0KXtMbi5jYWxsKER0LHQpfWZ1bmN0aW9uIGN0KHQsZSxuLHIpe3JldHVybiB0eXBlb2YgdCE9XCJmdW5jdGlvblwiP3Q6ZnVuY3Rpb24oKXt2YXIgaT1BO24mJktlKCksY2UoZSwhMCk7dHJ5e3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2NlKGksITEpLHImJlhuKGllKX19fWZ1bmN0aW9uIHZuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIHQuY2FsbCh0aGlzLGN0KG4sZSksY3QocixlKSl9fXZhciBfbj1cInVuaGFuZGxlZHJlamVjdGlvblwiO2Z1bmN0aW9uIHduKHQsZSl7dmFyIG47dHJ5e249ZS5vbnVuY2F0Y2hlZCh0KX1jYXRjaHt9aWYobiE9PSExKXRyeXt2YXIgcixpPXtwcm9taXNlOmUscmVhc29uOnR9O2lmKFAuZG9jdW1lbnQmJmRvY3VtZW50LmNyZWF0ZUV2ZW50PyhyPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIiksci5pbml0RXZlbnQoX24sITAsITApLEwocixpKSk6UC5DdXN0b21FdmVudCYmKHI9bmV3IEN1c3RvbUV2ZW50KF9uLHtkZXRhaWw6aX0pLEwocixpKSksciYmUC5kaXNwYXRjaEV2ZW50JiYoZGlzcGF0Y2hFdmVudChyKSwhUC5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJlAub251bmhhbmRsZWRyZWplY3Rpb24pKXRyeXtQLm9udW5oYW5kbGVkcmVqZWN0aW9uKHIpfWNhdGNoe31xJiZyJiYhci5kZWZhdWx0UHJldmVudGVkJiZjb25zb2xlLndhcm4oYFVuaGFuZGxlZCByZWplY3Rpb246ICR7dC5zdGFja3x8dH1gKX1jYXRjaHt9fXZhciBCPWIucmVqZWN0O2Z1bmN0aW9uIE50KHQsZSxuLHIpe2lmKCF0LmlkYmRifHwhdC5fc3RhdGUub3BlbkNvbXBsZXRlJiYhQS5sZXRUaHJvdWdoJiYhdC5fdmlwKXtpZih0Ll9zdGF0ZS5vcGVuQ29tcGxldGUpcmV0dXJuIEIobmV3IEMuRGF0YWJhc2VDbG9zZWQodC5fc3RhdGUuZGJPcGVuRXJyb3IpKTtpZighdC5fc3RhdGUuaXNCZWluZ09wZW5lZCl7aWYoIXQuX29wdGlvbnMuYXV0b09wZW4pcmV0dXJuIEIobmV3IEMuRGF0YWJhc2VDbG9zZWQpO3Qub3BlbigpLmNhdGNoKFIpfXJldHVybiB0Ll9zdGF0ZS5kYlJlYWR5UHJvbWlzZS50aGVuKCgpPT5OdCh0LGUsbixyKSl9ZWxzZXt2YXIgaT10Ll9jcmVhdGVUcmFuc2FjdGlvbihlLG4sdC5fZGJTY2hlbWEpO3RyeXtpLmNyZWF0ZSgpLHQuX3N0YXRlLlBSMTM5OF9tYXhMb29wPTN9Y2F0Y2gocyl7cmV0dXJuIHMubmFtZT09PXJuLkludmFsaWRTdGF0ZSYmdC5pc09wZW4oKSYmLS10Ll9zdGF0ZS5QUjEzOThfbWF4TG9vcD4wPyhjb25zb2xlLndhcm4oXCJEZXhpZTogTmVlZCB0byByZW9wZW4gZGJcIiksdC5fY2xvc2UoKSx0Lm9wZW4oKS50aGVuKCgpPT5OdCh0LGUsbixyKSkpOkIocyl9cmV0dXJuIGkuX3Byb21pc2UoZSwocyxvKT0+bGUoKCk9PihBLnRyYW5zPWkscihzLG8saSkpKSkudGhlbihzPT5pLl9jb21wbGV0aW9uLnRoZW4oKCk9PnMpKX19dmFyIGJuPVwiMy4yLjJcIixkZT1TdHJpbmcuZnJvbUNoYXJDb2RlKDY1NTM1KSxqdD0tMS8wLEo9XCJJbnZhbGlkIGtleSBwcm92aWRlZC4gS2V5cyBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLCBudW1iZXIsIERhdGUgb3IgQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgRGF0ZT4uXCIsUW49XCJTdHJpbmcgZXhwZWN0ZWQuXCIsa2U9W10sZ3Q9dHlwZW9mIG5hdmlnYXRvcjxcInVcIiYmLyhNU0lFfFRyaWRlbnR8RWRnZSkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksRnI9Z3QsTnI9Z3QsR249dD0+IS8oZGV4aWVcXC5qc3xkZXhpZVxcLm1pblxcLmpzKS8udGVzdCh0KSx2dD1cIl9fZGJuYW1lc1wiLGJ0PVwicmVhZG9ubHlcIix4dD1cInJlYWR3cml0ZVwiO2Z1bmN0aW9uIGdlKHQsZSl7cmV0dXJuIHQ/ZT9mdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9OnQ6ZX12YXIgcW49e3R5cGU6Myxsb3dlcjotMS8wLGxvd2VyT3BlbjohMSx1cHBlcjpbW11dLHVwcGVyT3BlbjohMX07ZnVuY3Rpb24gUWUodCl7cmV0dXJuIHR5cGVvZiB0PT1cInN0cmluZ1wiJiYhL1xcLi8udGVzdCh0KT9lPT4oZVt0XT09PXZvaWQgMCYmdCBpbiBlJiYoZT0kZShlKSxkZWxldGUgZVt0XSksZSk6ZT0+ZX12YXIgVnQ9Y2xhc3N7X3RyYW5zKGUsbixyKXtsZXQgaT10aGlzLl90eHx8QS50cmFucyxzPXRoaXMubmFtZTtmdW5jdGlvbiBvKHUsbCxoKXtpZighaC5zY2hlbWFbc10pdGhyb3cgbmV3IEMuTm90Rm91bmQoXCJUYWJsZSBcIitzK1wiIG5vdCBwYXJ0IG9mIHRyYW5zYWN0aW9uXCIpO3JldHVybiBuKGguaWRidHJhbnMsaCl9bGV0IGE9VWUoKTt0cnl7cmV0dXJuIGkmJmkuZGI9PT10aGlzLmRiP2k9PT1BLnRyYW5zP2kuX3Byb21pc2UoZSxvLHIpOmxlKCgpPT5pLl9wcm9taXNlKGUsbyxyKSx7dHJhbnM6aSx0cmFuc2xlc3M6QS50cmFuc2xlc3N8fEF9KTpOdCh0aGlzLmRiLGUsW3RoaXMubmFtZV0sbyl9ZmluYWxseXthJiZXZSgpfX1nZXQoZSxuKXtyZXR1cm4gZSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdD90aGlzLndoZXJlKGUpLmZpcnN0KG4pOnRoaXMuX3RyYW5zKFwicmVhZG9ubHlcIixyPT50aGlzLmNvcmUuZ2V0KHt0cmFuczpyLGtleTplfSkudGhlbihpPT50aGlzLmhvb2sucmVhZGluZy5maXJlKGkpKSkudGhlbihuKX13aGVyZShlKXtpZih0eXBlb2YgZT09XCJzdHJpbmdcIilyZXR1cm4gbmV3IHRoaXMuZGIuV2hlcmVDbGF1c2UodGhpcyxlKTtpZihqKGUpKXJldHVybiBuZXcgdGhpcy5kYi5XaGVyZUNsYXVzZSh0aGlzLGBbJHtlLmpvaW4oXCIrXCIpfV1gKTtsZXQgbj1NKGUpO2lmKG4ubGVuZ3RoPT09MSlyZXR1cm4gdGhpcy53aGVyZShuWzBdKS5lcXVhbHMoZVtuWzBdXSk7bGV0IHI9dGhpcy5zY2hlbWEuaW5kZXhlcy5jb25jYXQodGhpcy5zY2hlbWEucHJpbUtleSkuZmlsdGVyKGw9PmwuY29tcG91bmQmJm4uZXZlcnkoaD0+bC5rZXlQYXRoLmluZGV4T2YoaCk+PTApJiZsLmtleVBhdGguZXZlcnkoaD0+bi5pbmRleE9mKGgpPj0wKSlbMF07aWYociYmdGhpcy5kYi5fbWF4S2V5IT09ZGUpcmV0dXJuIHRoaXMud2hlcmUoci5uYW1lKS5lcXVhbHMoci5rZXlQYXRoLm1hcChsPT5lW2xdKSk7IXImJnEmJmNvbnNvbGUud2FybihgVGhlIHF1ZXJ5ICR7SlNPTi5zdHJpbmdpZnkoZSl9IG9uICR7dGhpcy5uYW1lfSB3b3VsZCBiZW5lZml0IG9mIGEgY29tcG91bmQgaW5kZXggWyR7bi5qb2luKFwiK1wiKX1dYCk7bGV0e2lkeEJ5TmFtZTppfT10aGlzLnNjaGVtYSxzPXRoaXMuZGIuX2RlcHMuaW5kZXhlZERCO2Z1bmN0aW9uIG8obCxoKXt0cnl7cmV0dXJuIHMuY21wKGwsaCk9PT0wfWNhdGNoe3JldHVybiExfX1sZXRbYSx1XT1uLnJlZHVjZSgoW2wsaF0sZCk9PntsZXQgYz1pW2RdLGY9ZVtkXTtyZXR1cm5bbHx8YyxsfHwhYz9nZShoLGMmJmMubXVsdGk/Zz0+e2xldCBwPW5lKGcsZCk7cmV0dXJuIGoocCkmJnAuc29tZSh2PT5vKGYsdikpfTpnPT5vKGYsbmUoZyxkKSkpOmhdfSxbbnVsbCxudWxsXSk7cmV0dXJuIGE/dGhpcy53aGVyZShhLm5hbWUpLmVxdWFscyhlW2Eua2V5UGF0aF0pLmZpbHRlcih1KTpyP3RoaXMuZmlsdGVyKHUpOnRoaXMud2hlcmUobikuZXF1YWxzKFwiXCIpfWZpbHRlcihlKXtyZXR1cm4gdGhpcy50b0NvbGxlY3Rpb24oKS5hbmQoZSl9Y291bnQoZSl7cmV0dXJuIHRoaXMudG9Db2xsZWN0aW9uKCkuY291bnQoZSl9b2Zmc2V0KGUpe3JldHVybiB0aGlzLnRvQ29sbGVjdGlvbigpLm9mZnNldChlKX1saW1pdChlKXtyZXR1cm4gdGhpcy50b0NvbGxlY3Rpb24oKS5saW1pdChlKX1lYWNoKGUpe3JldHVybiB0aGlzLnRvQ29sbGVjdGlvbigpLmVhY2goZSl9dG9BcnJheShlKXtyZXR1cm4gdGhpcy50b0NvbGxlY3Rpb24oKS50b0FycmF5KGUpfXRvQ29sbGVjdGlvbigpe3JldHVybiBuZXcgdGhpcy5kYi5Db2xsZWN0aW9uKG5ldyB0aGlzLmRiLldoZXJlQ2xhdXNlKHRoaXMpKX1vcmRlckJ5KGUpe3JldHVybiBuZXcgdGhpcy5kYi5Db2xsZWN0aW9uKG5ldyB0aGlzLmRiLldoZXJlQ2xhdXNlKHRoaXMsaihlKT9gWyR7ZS5qb2luKFwiK1wiKX1dYDplKSl9cmV2ZXJzZSgpe3JldHVybiB0aGlzLnRvQ29sbGVjdGlvbigpLnJldmVyc2UoKX1tYXBUb0NsYXNzKGUpe3RoaXMuc2NoZW1hLm1hcHBlZENsYXNzPWU7bGV0IG49cj0+e2lmKCFyKXJldHVybiByO2xldCBpPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgcyBpbiByKWlmKFcocixzKSl0cnl7aVtzXT1yW3NdfWNhdGNoe31yZXR1cm4gaX07cmV0dXJuIHRoaXMuc2NoZW1hLnJlYWRIb29rJiZ0aGlzLmhvb2sucmVhZGluZy51bnN1YnNjcmliZSh0aGlzLnNjaGVtYS5yZWFkSG9vayksdGhpcy5zY2hlbWEucmVhZEhvb2s9bix0aGlzLmhvb2soXCJyZWFkaW5nXCIsbiksZX1kZWZpbmVDbGFzcygpe2Z1bmN0aW9uIGUobil7TCh0aGlzLG4pfXJldHVybiB0aGlzLm1hcFRvQ2xhc3MoZSl9YWRkKGUsbil7bGV0e2F1dG86cixrZXlQYXRoOml9PXRoaXMuc2NoZW1hLnByaW1LZXkscz1lO3JldHVybiBpJiZyJiYocz1RZShpKShlKSksdGhpcy5fdHJhbnMoXCJyZWFkd3JpdGVcIixvPT50aGlzLmNvcmUubXV0YXRlKHt0cmFuczpvLHR5cGU6XCJhZGRcIixrZXlzOm4hPW51bGw/W25dOm51bGwsdmFsdWVzOltzXX0pKS50aGVuKG89Pm8ubnVtRmFpbHVyZXM/Yi5yZWplY3Qoby5mYWlsdXJlc1swXSk6by5sYXN0UmVzdWx0KS50aGVuKG89PntpZihpKXRyeXtRKGUsaSxvKX1jYXRjaHt9cmV0dXJuIG99KX11cGRhdGUoZSxuKXtpZih0eXBlb2YgZT09XCJvYmplY3RcIiYmIWooZSkpe2xldCByPW5lKGUsdGhpcy5zY2hlbWEucHJpbUtleS5rZXlQYXRoKTtpZihyPT09dm9pZCAwKXJldHVybiBCKG5ldyBDLkludmFsaWRBcmd1bWVudChcIkdpdmVuIG9iamVjdCBkb2VzIG5vdCBjb250YWluIGl0cyBwcmltYXJ5IGtleVwiKSk7dHJ5e3R5cGVvZiBuIT1cImZ1bmN0aW9uXCI/TShuKS5mb3JFYWNoKGk9PntRKGUsaSxuW2ldKX0pOm4oZSx7dmFsdWU6ZSxwcmltS2V5OnJ9KX1jYXRjaHt9cmV0dXJuIHRoaXMud2hlcmUoXCI6aWRcIikuZXF1YWxzKHIpLm1vZGlmeShuKX1lbHNlIHJldHVybiB0aGlzLndoZXJlKFwiOmlkXCIpLmVxdWFscyhlKS5tb2RpZnkobil9cHV0KGUsbil7bGV0e2F1dG86cixrZXlQYXRoOml9PXRoaXMuc2NoZW1hLnByaW1LZXkscz1lO3JldHVybiBpJiZyJiYocz1RZShpKShlKSksdGhpcy5fdHJhbnMoXCJyZWFkd3JpdGVcIixvPT50aGlzLmNvcmUubXV0YXRlKHt0cmFuczpvLHR5cGU6XCJwdXRcIix2YWx1ZXM6W3NdLGtleXM6biE9bnVsbD9bbl06bnVsbH0pKS50aGVuKG89Pm8ubnVtRmFpbHVyZXM/Yi5yZWplY3Qoby5mYWlsdXJlc1swXSk6by5sYXN0UmVzdWx0KS50aGVuKG89PntpZihpKXRyeXtRKGUsaSxvKX1jYXRjaHt9cmV0dXJuIG99KX1kZWxldGUoZSl7cmV0dXJuIHRoaXMuX3RyYW5zKFwicmVhZHdyaXRlXCIsbj0+dGhpcy5jb3JlLm11dGF0ZSh7dHJhbnM6bix0eXBlOlwiZGVsZXRlXCIsa2V5czpbZV19KSkudGhlbihuPT5uLm51bUZhaWx1cmVzP2IucmVqZWN0KG4uZmFpbHVyZXNbMF0pOnZvaWQgMCl9Y2xlYXIoKXtyZXR1cm4gdGhpcy5fdHJhbnMoXCJyZWFkd3JpdGVcIixlPT50aGlzLmNvcmUubXV0YXRlKHt0cmFuczplLHR5cGU6XCJkZWxldGVSYW5nZVwiLHJhbmdlOnFufSkpLnRoZW4oZT0+ZS5udW1GYWlsdXJlcz9iLnJlamVjdChlLmZhaWx1cmVzWzBdKTp2b2lkIDApfWJ1bGtHZXQoZSl7cmV0dXJuIHRoaXMuX3RyYW5zKFwicmVhZG9ubHlcIixuPT50aGlzLmNvcmUuZ2V0TWFueSh7a2V5czplLHRyYW5zOm59KS50aGVuKHI9PnIubWFwKGk9PnRoaXMuaG9vay5yZWFkaW5nLmZpcmUoaSkpKSl9YnVsa0FkZChlLG4scil7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uOnZvaWQgMDtyPXJ8fChpP3ZvaWQgMDpuKTtsZXQgcz1yP3IuYWxsS2V5czp2b2lkIDA7cmV0dXJuIHRoaXMuX3RyYW5zKFwicmVhZHdyaXRlXCIsbz0+e2xldHthdXRvOmEsa2V5UGF0aDp1fT10aGlzLnNjaGVtYS5wcmltS2V5O2lmKHUmJmkpdGhyb3cgbmV3IEMuSW52YWxpZEFyZ3VtZW50KFwiYnVsa0FkZCgpOiBrZXlzIGFyZ3VtZW50IGludmFsaWQgb24gdGFibGVzIHdpdGggaW5ib3VuZCBrZXlzXCIpO2lmKGkmJmkubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEMuSW52YWxpZEFyZ3VtZW50KFwiQXJndW1lbnRzIG9iamVjdHMgYW5kIGtleXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtsZXQgbD1lLmxlbmd0aCxoPXUmJmE/ZS5tYXAoUWUodSkpOmU7cmV0dXJuIHRoaXMuY29yZS5tdXRhdGUoe3RyYW5zOm8sdHlwZTpcImFkZFwiLGtleXM6aSx2YWx1ZXM6aCx3YW50UmVzdWx0czpzfSkudGhlbigoe251bUZhaWx1cmVzOmQscmVzdWx0czpjLGxhc3RSZXN1bHQ6ZixmYWlsdXJlczpnfSk9PntsZXQgcD1zP2M6ZjtpZihkPT09MClyZXR1cm4gcDt0aHJvdyBuZXcgUGUoYCR7dGhpcy5uYW1lfS5idWxrQWRkKCk6ICR7ZH0gb2YgJHtsfSBvcGVyYXRpb25zIGZhaWxlZGAsZyl9KX0pfWJ1bGtQdXQoZSxuLHIpe2xldCBpPUFycmF5LmlzQXJyYXkobik/bjp2b2lkIDA7cj1yfHwoaT92b2lkIDA6bik7bGV0IHM9cj9yLmFsbEtleXM6dm9pZCAwO3JldHVybiB0aGlzLl90cmFucyhcInJlYWR3cml0ZVwiLG89PntsZXR7YXV0bzphLGtleVBhdGg6dX09dGhpcy5zY2hlbWEucHJpbUtleTtpZih1JiZpKXRocm93IG5ldyBDLkludmFsaWRBcmd1bWVudChcImJ1bGtQdXQoKToga2V5cyBhcmd1bWVudCBpbnZhbGlkIG9uIHRhYmxlcyB3aXRoIGluYm91bmQga2V5c1wiKTtpZihpJiZpLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBDLkludmFsaWRBcmd1bWVudChcIkFyZ3VtZW50cyBvYmplY3RzIGFuZCBrZXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7bGV0IGw9ZS5sZW5ndGgsaD11JiZhP2UubWFwKFFlKHUpKTplO3JldHVybiB0aGlzLmNvcmUubXV0YXRlKHt0cmFuczpvLHR5cGU6XCJwdXRcIixrZXlzOmksdmFsdWVzOmgsd2FudFJlc3VsdHM6c30pLnRoZW4oKHtudW1GYWlsdXJlczpkLHJlc3VsdHM6YyxsYXN0UmVzdWx0OmYsZmFpbHVyZXM6Z30pPT57bGV0IHA9cz9jOmY7aWYoZD09PTApcmV0dXJuIHA7dGhyb3cgbmV3IFBlKGAke3RoaXMubmFtZX0uYnVsa1B1dCgpOiAke2R9IG9mICR7bH0gb3BlcmF0aW9ucyBmYWlsZWRgLGcpfSl9KX1idWxrRGVsZXRlKGUpe2xldCBuPWUubGVuZ3RoO3JldHVybiB0aGlzLl90cmFucyhcInJlYWR3cml0ZVwiLHI9PnRoaXMuY29yZS5tdXRhdGUoe3RyYW5zOnIsdHlwZTpcImRlbGV0ZVwiLGtleXM6ZX0pKS50aGVuKCh7bnVtRmFpbHVyZXM6cixsYXN0UmVzdWx0OmksZmFpbHVyZXM6c30pPT57aWYocj09PTApcmV0dXJuIGk7dGhyb3cgbmV3IFBlKGAke3RoaXMubmFtZX0uYnVsa0RlbGV0ZSgpOiAke3J9IG9mICR7bn0gb3BlcmF0aW9ucyBmYWlsZWRgLHMpfSl9fTtmdW5jdGlvbiBIZSh0KXt2YXIgZT17fSxuPWZ1bmN0aW9uKGEsdSl7aWYodSl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkobC0xKTstLWw7KWhbbC0xXT1hcmd1bWVudHNbbF07cmV0dXJuIGVbYV0uc3Vic2NyaWJlLmFwcGx5KG51bGwsaCksdH1lbHNlIGlmKHR5cGVvZiBhPT1cInN0cmluZ1wiKXJldHVybiBlW2FdfTtuLmFkZEV2ZW50VHlwZT1zO2Zvcih2YXIgcj0xLGk9YXJndW1lbnRzLmxlbmd0aDtyPGk7KytyKXMoYXJndW1lbnRzW3JdKTtyZXR1cm4gbjtmdW5jdGlvbiBzKGEsdSxsKXtpZih0eXBlb2YgYT09XCJvYmplY3RcIilyZXR1cm4gbyhhKTt1fHwodT1BciksbHx8KGw9Uik7dmFyIGg9e3N1YnNjcmliZXJzOltdLGZpcmU6bCxzdWJzY3JpYmU6ZnVuY3Rpb24oZCl7aC5zdWJzY3JpYmVycy5pbmRleE9mKGQpPT09LTEmJihoLnN1YnNjcmliZXJzLnB1c2goZCksaC5maXJlPXUoaC5maXJlLGQpKX0sdW5zdWJzY3JpYmU6ZnVuY3Rpb24oZCl7aC5zdWJzY3JpYmVycz1oLnN1YnNjcmliZXJzLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYyE9PWR9KSxoLmZpcmU9aC5zdWJzY3JpYmVycy5yZWR1Y2UodSxsKX19O3JldHVybiBlW2FdPW5bYV09aCxofWZ1bmN0aW9uIG8oYSl7TShhKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe3ZhciBsPWFbdV07aWYoaihsKSlzKHUsYVt1XVswXSxhW3VdWzFdKTtlbHNlIGlmKGw9PT1cImFzYXBcIil2YXIgaD1zKHUsemUsZnVuY3Rpb24oKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShjKTtjLS07KWZbY109YXJndW1lbnRzW2NdO2guc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbihnKXtSbihmdW5jdGlvbigpe2cuYXBwbHkobnVsbCxmKX0pfSl9KTtlbHNlIHRocm93IG5ldyBDLkludmFsaWRBcmd1bWVudChcIkludmFsaWQgZXZlbnQgY29uZmlnXCIpfSl9fWZ1bmN0aW9uIFllKHQsZSl7cmV0dXJuIEFlKGUpLmZyb20oe3Byb3RvdHlwZTp0fSksZX1mdW5jdGlvbiBqcih0KXtyZXR1cm4gWWUoVnQucHJvdG90eXBlLGZ1bmN0aW9uKG4scixpKXt0aGlzLmRiPXQsdGhpcy5fdHg9aSx0aGlzLm5hbWU9bix0aGlzLnNjaGVtYT1yLHRoaXMuaG9vaz10Ll9hbGxUYWJsZXNbbl0/dC5fYWxsVGFibGVzW25dLmhvb2s6SGUobnVsbCx7Y3JlYXRpbmc6W3hyLFJdLHJlYWRpbmc6W2JyLHplXSx1cGRhdGluZzpbU3IsUl0sZGVsZXRpbmc6W0VyLFJdfSl9KX1mdW5jdGlvbiB3ZSh0LGUpe3JldHVybiEodC5maWx0ZXJ8fHQuYWxnb3JpdGhtfHx0Lm9yKSYmKGU/dC5qdXN0TGltaXQ6IXQucmVwbGF5RmlsdGVyKX1mdW5jdGlvbiBFdCh0LGUpe3QuZmlsdGVyPWdlKHQuZmlsdGVyLGUpfWZ1bmN0aW9uIFN0KHQsZSxuKXt2YXIgcj10LnJlcGxheUZpbHRlcjt0LnJlcGxheUZpbHRlcj1yPygpPT5nZShyKCksZSgpKTplLHQuanVzdExpbWl0PW4mJiFyfWZ1bmN0aW9uIFZyKHQsZSl7dC5pc01hdGNoPWdlKHQuaXNNYXRjaCxlKX1mdW5jdGlvbiBpdCh0LGUpe2lmKHQuaXNQcmltS2V5KXJldHVybiBlLnByaW1hcnlLZXk7bGV0IG49ZS5nZXRJbmRleEJ5S2V5UGF0aCh0LmluZGV4KTtpZighbil0aHJvdyBuZXcgQy5TY2hlbWEoXCJLZXlQYXRoIFwiK3QuaW5kZXgrXCIgb24gb2JqZWN0IHN0b3JlIFwiK2UubmFtZStcIiBpcyBub3QgaW5kZXhlZFwiKTtyZXR1cm4gbn1mdW5jdGlvbiB4bih0LGUsbil7bGV0IHI9aXQodCxlLnNjaGVtYSk7cmV0dXJuIGUub3BlbkN1cnNvcih7dHJhbnM6bix2YWx1ZXM6IXQua2V5c09ubHkscmV2ZXJzZTp0LmRpcj09PVwicHJldlwiLHVuaXF1ZTohIXQudW5pcXVlLHF1ZXJ5OntpbmRleDpyLHJhbmdlOnQucmFuZ2V9fSl9ZnVuY3Rpb24gR2UodCxlLG4scil7bGV0IGk9dC5yZXBsYXlGaWx0ZXI/Z2UodC5maWx0ZXIsdC5yZXBsYXlGaWx0ZXIoKSk6dC5maWx0ZXI7aWYodC5vcil7bGV0IHM9e30sbz0oYSx1LGwpPT57aWYoIWl8fGkodSxsLGM9PnUuc3RvcChjKSxjPT51LmZhaWwoYykpKXt2YXIgaD11LnByaW1hcnlLZXksZD1cIlwiK2g7ZD09PVwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIiYmKGQ9XCJcIituZXcgVWludDhBcnJheShoKSksVyhzLGQpfHwoc1tkXT0hMCxlKGEsdSxsKSl9fTtyZXR1cm4gUHJvbWlzZS5hbGwoW3Qub3IuX2l0ZXJhdGUobyxuKSxFbih4bih0LHIsbiksdC5hbGdvcml0aG0sbywhdC5rZXlzT25seSYmdC52YWx1ZU1hcHBlcildKX1lbHNlIHJldHVybiBFbih4bih0LHIsbiksZ2UodC5hbGdvcml0aG0saSksZSwhdC5rZXlzT25seSYmdC52YWx1ZU1hcHBlcil9ZnVuY3Rpb24gRW4odCxlLG4scil7dmFyIGk9cj8obyxhLHUpPT5uKHIobyksYSx1KTpuLHM9TyhpKTtyZXR1cm4gdC50aGVuKG89PntpZihvKXJldHVybiBvLnN0YXJ0KCgpPT57dmFyIGE9KCk9Pm8uY29udGludWUoKTsoIWV8fGUobyx1PT5hPXUsdT0+e28uc3RvcCh1KSxhPVJ9LHU9PntvLmZhaWwodSksYT1SfSkpJiZzKG8udmFsdWUsbyx1PT5hPXUpLGEoKX0pfSl9ZnVuY3Rpb24gVih0LGUpe3RyeXtsZXQgbj1Tbih0KSxyPVNuKGUpO2lmKG4hPT1yKXJldHVybiBuPT09XCJBcnJheVwiPzE6cj09PVwiQXJyYXlcIj8tMTpuPT09XCJiaW5hcnlcIj8xOnI9PT1cImJpbmFyeVwiPy0xOm49PT1cInN0cmluZ1wiPzE6cj09PVwic3RyaW5nXCI/LTE6bj09PVwiRGF0ZVwiPzE6ciE9PVwiRGF0ZVwiP05hTjotMTtzd2l0Y2gobil7Y2FzZVwibnVtYmVyXCI6Y2FzZVwiRGF0ZVwiOmNhc2VcInN0cmluZ1wiOnJldHVybiB0PmU/MTp0PGU/LTE6MDtjYXNlXCJiaW5hcnlcIjpyZXR1cm4gJHIoQW4odCksQW4oZSkpO2Nhc2VcIkFycmF5XCI6cmV0dXJuIExyKHQsZSl9fWNhdGNoe31yZXR1cm4gTmFOfWZ1bmN0aW9uIExyKHQsZSl7bGV0IG49dC5sZW5ndGgscj1lLmxlbmd0aCxpPW48cj9uOnI7Zm9yKGxldCBzPTA7czxpOysrcyl7bGV0IG89Vih0W3NdLGVbc10pO2lmKG8hPT0wKXJldHVybiBvfXJldHVybiBuPT09cj8wOm48cj8tMToxfWZ1bmN0aW9uICRyKHQsZSl7bGV0IG49dC5sZW5ndGgscj1lLmxlbmd0aCxpPW48cj9uOnI7Zm9yKGxldCBzPTA7czxpOysrcylpZih0W3NdIT09ZVtzXSlyZXR1cm4gdFtzXTxlW3NdPy0xOjE7cmV0dXJuIG49PT1yPzA6bjxyPy0xOjF9ZnVuY3Rpb24gU24odCl7bGV0IGU9dHlwZW9mIHQ7aWYoZSE9PVwib2JqZWN0XCIpcmV0dXJuIGU7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVyblwiYmluYXJ5XCI7bGV0IG49S3QodCk7cmV0dXJuIG49PT1cIkFycmF5QnVmZmVyXCI/XCJiaW5hcnlcIjpufWZ1bmN0aW9uIEFuKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVWludDhBcnJheT90OkFycmF5QnVmZmVyLmlzVmlldyh0KT9uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKTpuZXcgVWludDhBcnJheSh0KX12YXIgTHQ9Y2xhc3N7X3JlYWQoZSxuKXt2YXIgcj10aGlzLl9jdHg7cmV0dXJuIHIuZXJyb3I/ci50YWJsZS5fdHJhbnMobnVsbCxCLmJpbmQobnVsbCxyLmVycm9yKSk6ci50YWJsZS5fdHJhbnMoXCJyZWFkb25seVwiLGUpLnRoZW4obil9X3dyaXRlKGUpe3ZhciBuPXRoaXMuX2N0eDtyZXR1cm4gbi5lcnJvcj9uLnRhYmxlLl90cmFucyhudWxsLEIuYmluZChudWxsLG4uZXJyb3IpKTpuLnRhYmxlLl90cmFucyhcInJlYWR3cml0ZVwiLGUsXCJsb2NrZWRcIil9X2FkZEFsZ29yaXRobShlKXt2YXIgbj10aGlzLl9jdHg7bi5hbGdvcml0aG09Z2Uobi5hbGdvcml0aG0sZSl9X2l0ZXJhdGUoZSxuKXtyZXR1cm4gR2UodGhpcy5fY3R4LGUsbix0aGlzLl9jdHgudGFibGUuY29yZSl9Y2xvbmUoZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0aGlzLmNvbnN0cnVjdG9yLnByb3RvdHlwZSkscj1PYmplY3QuY3JlYXRlKHRoaXMuX2N0eCk7cmV0dXJuIGUmJkwocixlKSxuLl9jdHg9cixufXJhdygpe3JldHVybiB0aGlzLl9jdHgudmFsdWVNYXBwZXI9bnVsbCx0aGlzfWVhY2goZSl7dmFyIG49dGhpcy5fY3R4O3JldHVybiB0aGlzLl9yZWFkKHI9PkdlKG4sZSxyLG4udGFibGUuY29yZSkpfWNvdW50KGUpe3JldHVybiB0aGlzLl9yZWFkKG49PntsZXQgcj10aGlzLl9jdHgsaT1yLnRhYmxlLmNvcmU7aWYod2UociwhMCkpcmV0dXJuIGkuY291bnQoe3RyYW5zOm4scXVlcnk6e2luZGV4Oml0KHIsaS5zY2hlbWEpLHJhbmdlOnIucmFuZ2V9fSkudGhlbihvPT5NYXRoLm1pbihvLHIubGltaXQpKTt2YXIgcz0wO3JldHVybiBHZShyLCgpPT4oKytzLCExKSxuLGkpLnRoZW4oKCk9PnMpfSkudGhlbihlKX1zb3J0QnkoZSxuKXtsZXQgcj1lLnNwbGl0KFwiLlwiKS5yZXZlcnNlKCksaT1yWzBdLHM9ci5sZW5ndGgtMTtmdW5jdGlvbiBvKGwsaCl7cmV0dXJuIGg/byhsW3JbaF1dLGgtMSk6bFtpXX12YXIgYT10aGlzLl9jdHguZGlyPT09XCJuZXh0XCI/MTotMTtmdW5jdGlvbiB1KGwsaCl7dmFyIGQ9byhsLHMpLGM9byhoLHMpO3JldHVybiBkPGM/LWE6ZD5jP2E6MH1yZXR1cm4gdGhpcy50b0FycmF5KGZ1bmN0aW9uKGwpe3JldHVybiBsLnNvcnQodSl9KS50aGVuKG4pfXRvQXJyYXkoZSl7cmV0dXJuIHRoaXMuX3JlYWQobj0+e3ZhciByPXRoaXMuX2N0eDtpZihyLmRpcj09PVwibmV4dFwiJiZ3ZShyLCEwKSYmci5saW1pdD4wKXtsZXR7dmFsdWVNYXBwZXI6aX09cixzPWl0KHIsci50YWJsZS5jb3JlLnNjaGVtYSk7cmV0dXJuIHIudGFibGUuY29yZS5xdWVyeSh7dHJhbnM6bixsaW1pdDpyLmxpbWl0LHZhbHVlczohMCxxdWVyeTp7aW5kZXg6cyxyYW5nZTpyLnJhbmdlfX0pLnRoZW4oKHtyZXN1bHQ6b30pPT5pP28ubWFwKGkpOm8pfWVsc2V7bGV0IGk9W107cmV0dXJuIEdlKHIscz0+aS5wdXNoKHMpLG4sci50YWJsZS5jb3JlKS50aGVuKCgpPT5pKX19LGUpfW9mZnNldChlKXt2YXIgbj10aGlzLl9jdHg7cmV0dXJuIGU8PTA/dGhpczoobi5vZmZzZXQrPWUsd2Uobik/U3QobiwoKT0+e3ZhciByPWU7cmV0dXJuKGkscyk9PnI9PT0wPyEwOnI9PT0xPygtLXIsITEpOihzKCgpPT57aS5hZHZhbmNlKHIpLHI9MH0pLCExKX0pOlN0KG4sKCk9Pnt2YXIgcj1lO3JldHVybigpPT4tLXI8MH0pLHRoaXMpfWxpbWl0KGUpe3JldHVybiB0aGlzLl9jdHgubGltaXQ9TWF0aC5taW4odGhpcy5fY3R4LmxpbWl0LGUpLFN0KHRoaXMuX2N0eCwoKT0+e3ZhciBuPWU7cmV0dXJuIGZ1bmN0aW9uKHIsaSxzKXtyZXR1cm4tLW48PTAmJmkocyksbj49MH19LCEwKSx0aGlzfXVudGlsKGUsbil7cmV0dXJuIEV0KHRoaXMuX2N0eCxmdW5jdGlvbihyLGkscyl7cmV0dXJuIGUoci52YWx1ZSk/KGkocyksbik6ITB9KSx0aGlzfWZpcnN0KGUpe3JldHVybiB0aGlzLmxpbWl0KDEpLnRvQXJyYXkoZnVuY3Rpb24obil7cmV0dXJuIG5bMF19KS50aGVuKGUpfWxhc3QoZSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpcnN0KGUpfWZpbHRlcihlKXtyZXR1cm4gRXQodGhpcy5fY3R4LGZ1bmN0aW9uKG4pe3JldHVybiBlKG4udmFsdWUpfSksVnIodGhpcy5fY3R4LGUpLHRoaXN9YW5kKGUpe3JldHVybiB0aGlzLmZpbHRlcihlKX1vcihlKXtyZXR1cm4gbmV3IHRoaXMuZGIuV2hlcmVDbGF1c2UodGhpcy5fY3R4LnRhYmxlLGUsdGhpcyl9cmV2ZXJzZSgpe3JldHVybiB0aGlzLl9jdHguZGlyPXRoaXMuX2N0eC5kaXI9PT1cInByZXZcIj9cIm5leHRcIjpcInByZXZcIix0aGlzLl9vbmRpcmVjdGlvbmNoYW5nZSYmdGhpcy5fb25kaXJlY3Rpb25jaGFuZ2UodGhpcy5fY3R4LmRpciksdGhpc31kZXNjKCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpfWVhY2hLZXkoZSl7dmFyIG49dGhpcy5fY3R4O3JldHVybiBuLmtleXNPbmx5PSFuLmlzTWF0Y2gsdGhpcy5lYWNoKGZ1bmN0aW9uKHIsaSl7ZShpLmtleSxpKX0pfWVhY2hVbmlxdWVLZXkoZSl7cmV0dXJuIHRoaXMuX2N0eC51bmlxdWU9XCJ1bmlxdWVcIix0aGlzLmVhY2hLZXkoZSl9ZWFjaFByaW1hcnlLZXkoZSl7dmFyIG49dGhpcy5fY3R4O3JldHVybiBuLmtleXNPbmx5PSFuLmlzTWF0Y2gsdGhpcy5lYWNoKGZ1bmN0aW9uKHIsaSl7ZShpLnByaW1hcnlLZXksaSl9KX1rZXlzKGUpe3ZhciBuPXRoaXMuX2N0eDtuLmtleXNPbmx5PSFuLmlzTWF0Y2g7dmFyIHI9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpLHMpe3IucHVzaChzLmtleSl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KS50aGVuKGUpfXByaW1hcnlLZXlzKGUpe3ZhciBuPXRoaXMuX2N0eDtpZihuLmRpcj09PVwibmV4dFwiJiZ3ZShuLCEwKSYmbi5saW1pdD4wKXJldHVybiB0aGlzLl9yZWFkKGk9Pnt2YXIgcz1pdChuLG4udGFibGUuY29yZS5zY2hlbWEpO3JldHVybiBuLnRhYmxlLmNvcmUucXVlcnkoe3RyYW5zOmksdmFsdWVzOiExLGxpbWl0Om4ubGltaXQscXVlcnk6e2luZGV4OnMscmFuZ2U6bi5yYW5nZX19KX0pLnRoZW4oKHtyZXN1bHQ6aX0pPT5pKS50aGVuKGUpO24ua2V5c09ubHk9IW4uaXNNYXRjaDt2YXIgcj1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkscyl7ci5wdXNoKHMucHJpbWFyeUtleSl9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KS50aGVuKGUpfXVuaXF1ZUtleXMoZSl7cmV0dXJuIHRoaXMuX2N0eC51bmlxdWU9XCJ1bmlxdWVcIix0aGlzLmtleXMoZSl9Zmlyc3RLZXkoZSl7cmV0dXJuIHRoaXMubGltaXQoMSkua2V5cyhmdW5jdGlvbihuKXtyZXR1cm4gblswXX0pLnRoZW4oZSl9bGFzdEtleShlKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmlyc3RLZXkoZSl9ZGlzdGluY3QoKXt2YXIgZT10aGlzLl9jdHgsbj1lLmluZGV4JiZlLnRhYmxlLnNjaGVtYS5pZHhCeU5hbWVbZS5pbmRleF07aWYoIW58fCFuLm11bHRpKXJldHVybiB0aGlzO3ZhciByPXt9O3JldHVybiBFdCh0aGlzLl9jdHgsZnVuY3Rpb24oaSl7dmFyIHM9aS5wcmltYXJ5S2V5LnRvU3RyaW5nKCksbz1XKHIscyk7cmV0dXJuIHJbc109ITAsIW99KSx0aGlzfW1vZGlmeShlKXt2YXIgbj10aGlzLl9jdHg7cmV0dXJuIHRoaXMuX3dyaXRlKHI9Pnt2YXIgaTtpZih0eXBlb2YgZT09XCJmdW5jdGlvblwiKWk9ZTtlbHNle3ZhciBzPU0oZSksbz1zLmxlbmd0aDtpPWZ1bmN0aW9uKHApe2Zvcih2YXIgdj0hMSx5PTA7eTxvOysreSl7dmFyIF89c1t5XSx3PWVbX107bmUocCxfKSE9PXcmJihRKHAsXyx3KSx2PSEwKX1yZXR1cm4gdn19bGV0IGE9bi50YWJsZS5jb3JlLHtvdXRib3VuZDp1LGV4dHJhY3RLZXk6bH09YS5zY2hlbWEucHJpbWFyeUtleSxoPXRoaXMuZGIuX29wdGlvbnMubW9kaWZ5Q2h1bmtTaXplfHwyMDAsZD1bXSxjPTAsZj1bXSxnPShwLHYpPT57bGV0e2ZhaWx1cmVzOnksbnVtRmFpbHVyZXM6X309djtjKz1wLV87Zm9yKGxldCB3IG9mIE0oeSkpZC5wdXNoKHlbd10pfTtyZXR1cm4gdGhpcy5jbG9uZSgpLnByaW1hcnlLZXlzKCkudGhlbihwPT57bGV0IHY9eT0+e2xldCBfPU1hdGgubWluKGgscC5sZW5ndGgteSk7cmV0dXJuIGEuZ2V0TWFueSh7dHJhbnM6cixrZXlzOnAuc2xpY2UoeSx5K18pLGNhY2hlOlwiaW1tdXRhYmxlXCJ9KS50aGVuKHc9PntsZXQgbT1bXSx4PVtdLEU9dT9bXTpudWxsLFM9W107Zm9yKGxldCBJPTA7STxfOysrSSl7bGV0IGs9d1tJXSxEPXt2YWx1ZTokZShrKSxwcmltS2V5OnBbeStJXX07aS5jYWxsKEQsRC52YWx1ZSxEKSE9PSExJiYoRC52YWx1ZT09bnVsbD9TLnB1c2gocFt5K0ldKTohdSYmVihsKGspLGwoRC52YWx1ZSkpIT09MD8oUy5wdXNoKHBbeStJXSksbS5wdXNoKEQudmFsdWUpKTooeC5wdXNoKEQudmFsdWUpLHUmJkUucHVzaChwW3krSV0pKSl9bGV0IEs9d2UobikmJm4ubGltaXQ9PT0xLzAmJih0eXBlb2YgZSE9XCJmdW5jdGlvblwifHxlPT09QXQpJiZ7aW5kZXg6bi5pbmRleCxyYW5nZTpuLnJhbmdlfTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG0ubGVuZ3RoPjAmJmEubXV0YXRlKHt0cmFuczpyLHR5cGU6XCJhZGRcIix2YWx1ZXM6bX0pLnRoZW4oST0+e2ZvcihsZXQgayBpbiBJLmZhaWx1cmVzKVMuc3BsaWNlKHBhcnNlSW50KGspLDEpO2cobS5sZW5ndGgsSSl9KSkudGhlbigoKT0+KHgubGVuZ3RoPjB8fEsmJnR5cGVvZiBlPT1cIm9iamVjdFwiKSYmYS5tdXRhdGUoe3RyYW5zOnIsdHlwZTpcInB1dFwiLGtleXM6RSx2YWx1ZXM6eCxjcml0ZXJpYTpLLGNoYW5nZVNwZWM6dHlwZW9mIGUhPVwiZnVuY3Rpb25cIiYmZX0pLnRoZW4oST0+Zyh4Lmxlbmd0aCxJKSkpLnRoZW4oKCk9PihTLmxlbmd0aD4wfHxLJiZlPT09QXQpJiZhLm11dGF0ZSh7dHJhbnM6cix0eXBlOlwiZGVsZXRlXCIsa2V5czpTLGNyaXRlcmlhOkt9KS50aGVuKEk9PmcoUy5sZW5ndGgsSSkpKS50aGVuKCgpPT5wLmxlbmd0aD55K18mJnYoeStoKSl9KX07cmV0dXJuIHYoMCkudGhlbigoKT0+e2lmKGQubGVuZ3RoPjApdGhyb3cgbmV3IHN0KFwiRXJyb3IgbW9kaWZ5aW5nIG9uZSBvciBtb3JlIG9iamVjdHNcIixkLGMsZik7cmV0dXJuIHAubGVuZ3RofSl9KX0pfWRlbGV0ZSgpe3ZhciBlPXRoaXMuX2N0eCxuPWUucmFuZ2U7cmV0dXJuIHdlKGUpJiYoZS5pc1ByaW1LZXkmJiFOcnx8bi50eXBlPT09Myk/dGhpcy5fd3JpdGUocj0+e2xldHtwcmltYXJ5S2V5Oml9PWUudGFibGUuY29yZS5zY2hlbWEscz1uO3JldHVybiBlLnRhYmxlLmNvcmUuY291bnQoe3RyYW5zOnIscXVlcnk6e2luZGV4OmkscmFuZ2U6c319KS50aGVuKG89PmUudGFibGUuY29yZS5tdXRhdGUoe3RyYW5zOnIsdHlwZTpcImRlbGV0ZVJhbmdlXCIscmFuZ2U6c30pLnRoZW4oKHtmYWlsdXJlczphLGxhc3RSZXN1bHQ6dSxyZXN1bHRzOmwsbnVtRmFpbHVyZXM6aH0pPT57aWYoaCl0aHJvdyBuZXcgc3QoXCJDb3VsZCBub3QgZGVsZXRlIHNvbWUgdmFsdWVzXCIsT2JqZWN0LmtleXMoYSkubWFwKGQ9PmFbZF0pLG8taCk7cmV0dXJuIG8taH0pKX0pOnRoaXMubW9kaWZ5KEF0KX19LEF0PSh0LGUpPT5lLnZhbHVlPW51bGw7ZnVuY3Rpb24genIodCl7cmV0dXJuIFllKEx0LnByb3RvdHlwZSxmdW5jdGlvbihuLHIpe3RoaXMuZGI9dDtsZXQgaT1xbixzPW51bGw7aWYocil0cnl7aT1yKCl9Y2F0Y2gobCl7cz1sfWxldCBvPW4uX2N0eCxhPW8udGFibGUsdT1hLmhvb2sucmVhZGluZy5maXJlO3RoaXMuX2N0eD17dGFibGU6YSxpbmRleDpvLmluZGV4LGlzUHJpbUtleTohby5pbmRleHx8YS5zY2hlbWEucHJpbUtleS5rZXlQYXRoJiZvLmluZGV4PT09YS5zY2hlbWEucHJpbUtleS5uYW1lLHJhbmdlOmksa2V5c09ubHk6ITEsZGlyOlwibmV4dFwiLHVuaXF1ZTpcIlwiLGFsZ29yaXRobTpudWxsLGZpbHRlcjpudWxsLHJlcGxheUZpbHRlcjpudWxsLGp1c3RMaW1pdDohMCxpc01hdGNoOm51bGwsb2Zmc2V0OjAsbGltaXQ6MS8wLGVycm9yOnMsb3I6by5vcix2YWx1ZU1hcHBlcjp1IT09emU/dTpudWxsfX0pfWZ1bmN0aW9uIFVyKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PT09ZT8wOjF9ZnVuY3Rpb24gV3IodCxlKXtyZXR1cm4gdD5lPy0xOnQ9PT1lPzA6MX1mdW5jdGlvbiBVKHQsZSxuKXt2YXIgcj10IGluc3RhbmNlb2YgZnQ/bmV3IHQuQ29sbGVjdGlvbih0KTp0O3JldHVybiByLl9jdHguZXJyb3I9bj9uZXcgbihlKTpuZXcgVHlwZUVycm9yKGUpLHJ9ZnVuY3Rpb24gYmUodCl7cmV0dXJuIG5ldyB0LkNvbGxlY3Rpb24odCwoKT0+Sm4oXCJcIikpLmxpbWl0KDApfWZ1bmN0aW9uIEhyKHQpe3JldHVybiB0PT09XCJuZXh0XCI/ZT0+ZS50b1VwcGVyQ2FzZSgpOmU9PmUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBZcih0KXtyZXR1cm4gdD09PVwibmV4dFwiP2U9PmUudG9Mb3dlckNhc2UoKTplPT5lLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gWHIodCxlLG4scixpLHMpe2Zvcih2YXIgbz1NYXRoLm1pbih0Lmxlbmd0aCxyLmxlbmd0aCksYT0tMSx1PTA7dTxvOysrdSl7dmFyIGw9ZVt1XTtpZihsIT09clt1XSlyZXR1cm4gaSh0W3VdLG5bdV0pPDA/dC5zdWJzdHIoMCx1KStuW3VdK24uc3Vic3RyKHUrMSk6aSh0W3VdLHJbdV0pPDA/dC5zdWJzdHIoMCx1KStyW3VdK24uc3Vic3RyKHUrMSk6YT49MD90LnN1YnN0cigwLGEpK2VbYV0rbi5zdWJzdHIoYSsxKTpudWxsO2kodFt1XSxsKTwwJiYoYT11KX1yZXR1cm4gbzxyLmxlbmd0aCYmcz09PVwibmV4dFwiP3Qrbi5zdWJzdHIodC5sZW5ndGgpOm88dC5sZW5ndGgmJnM9PT1cInByZXZcIj90LnN1YnN0cigwLG4ubGVuZ3RoKTphPDA/bnVsbDp0LnN1YnN0cigwLGEpK3JbYV0rbi5zdWJzdHIoYSsxKX1mdW5jdGlvbiBxZSh0LGUsbixyKXt2YXIgaSxzLG8sYSx1LGwsaCxkPW4ubGVuZ3RoO2lmKCFuLmV2ZXJ5KHA9PnR5cGVvZiBwPT1cInN0cmluZ1wiKSlyZXR1cm4gVSh0LFFuKTtmdW5jdGlvbiBjKHApe2k9SHIocCkscz1ZcihwKSxvPXA9PT1cIm5leHRcIj9VcjpXcjt2YXIgdj1uLm1hcChmdW5jdGlvbih5KXtyZXR1cm57bG93ZXI6cyh5KSx1cHBlcjppKHkpfX0pLnNvcnQoZnVuY3Rpb24oeSxfKXtyZXR1cm4gbyh5Lmxvd2VyLF8ubG93ZXIpfSk7YT12Lm1hcChmdW5jdGlvbih5KXtyZXR1cm4geS51cHBlcn0pLHU9di5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIHkubG93ZXJ9KSxsPXAsaD1wPT09XCJuZXh0XCI/XCJcIjpyfWMoXCJuZXh0XCIpO3ZhciBmPW5ldyB0LkNvbGxlY3Rpb24odCwoKT0+c2UoYVswXSx1W2QtMV0rcikpO2YuX29uZGlyZWN0aW9uY2hhbmdlPWZ1bmN0aW9uKHApe2MocCl9O3ZhciBnPTA7cmV0dXJuIGYuX2FkZEFsZ29yaXRobShmdW5jdGlvbihwLHYseSl7dmFyIF89cC5rZXk7aWYodHlwZW9mIF8hPVwic3RyaW5nXCIpcmV0dXJuITE7dmFyIHc9cyhfKTtpZihlKHcsdSxnKSlyZXR1cm4hMDtmb3IodmFyIG09bnVsbCx4PWc7eDxkOysreCl7dmFyIEU9WHIoXyx3LGFbeF0sdVt4XSxvLGwpO0U9PT1udWxsJiZtPT09bnVsbD9nPXgrMToobT09PW51bGx8fG8obSxFKT4wKSYmKG09RSl9cmV0dXJuIHYobSE9PW51bGw/ZnVuY3Rpb24oKXtwLmNvbnRpbnVlKG0raCl9OnkpLCExfSksZn1mdW5jdGlvbiBzZSh0LGUsbixyKXtyZXR1cm57dHlwZToyLGxvd2VyOnQsdXBwZXI6ZSxsb3dlck9wZW46bix1cHBlck9wZW46cn19ZnVuY3Rpb24gSm4odCl7cmV0dXJue3R5cGU6MSxsb3dlcjp0LHVwcGVyOnR9fXZhciBmdD1jbGFzc3tnZXQgQ29sbGVjdGlvbigpe3JldHVybiB0aGlzLl9jdHgudGFibGUuZGIuQ29sbGVjdGlvbn1iZXR3ZWVuKGUsbixyLGkpe3I9ciE9PSExLGk9aT09PSEwO3RyeXtyZXR1cm4gdGhpcy5fY21wKGUsbik+MHx8dGhpcy5fY21wKGUsbik9PT0wJiYocnx8aSkmJiEociYmaSk/YmUodGhpcyk6bmV3IHRoaXMuQ29sbGVjdGlvbih0aGlzLCgpPT5zZShlLG4sIXIsIWkpKX1jYXRjaHtyZXR1cm4gVSh0aGlzLEopfX1lcXVhbHMoZSl7cmV0dXJuIGU9PW51bGw/VSh0aGlzLEopOm5ldyB0aGlzLkNvbGxlY3Rpb24odGhpcywoKT0+Sm4oZSkpfWFib3ZlKGUpe3JldHVybiBlPT1udWxsP1UodGhpcyxKKTpuZXcgdGhpcy5Db2xsZWN0aW9uKHRoaXMsKCk9PnNlKGUsdm9pZCAwLCEwKSl9YWJvdmVPckVxdWFsKGUpe3JldHVybiBlPT1udWxsP1UodGhpcyxKKTpuZXcgdGhpcy5Db2xsZWN0aW9uKHRoaXMsKCk9PnNlKGUsdm9pZCAwLCExKSl9YmVsb3coZSl7cmV0dXJuIGU9PW51bGw/VSh0aGlzLEopOm5ldyB0aGlzLkNvbGxlY3Rpb24odGhpcywoKT0+c2Uodm9pZCAwLGUsITEsITApKX1iZWxvd09yRXF1YWwoZSl7cmV0dXJuIGU9PW51bGw/VSh0aGlzLEopOm5ldyB0aGlzLkNvbGxlY3Rpb24odGhpcywoKT0+c2Uodm9pZCAwLGUpKX1zdGFydHNXaXRoKGUpe3JldHVybiB0eXBlb2YgZSE9XCJzdHJpbmdcIj9VKHRoaXMsUW4pOnRoaXMuYmV0d2VlbihlLGUrZGUsITAsITApfXN0YXJ0c1dpdGhJZ25vcmVDYXNlKGUpe3JldHVybiBlPT09XCJcIj90aGlzLnN0YXJ0c1dpdGgoZSk6cWUodGhpcywobixyKT0+bi5pbmRleE9mKHJbMF0pPT09MCxbZV0sZGUpfWVxdWFsc0lnbm9yZUNhc2UoZSl7cmV0dXJuIHFlKHRoaXMsKG4scik9Pm49PT1yWzBdLFtlXSxcIlwiKX1hbnlPZklnbm9yZUNhc2UoKXt2YXIgZT1lZS5hcHBseSh4ZSxhcmd1bWVudHMpO3JldHVybiBlLmxlbmd0aD09PTA/YmUodGhpcyk6cWUodGhpcywobixyKT0+ci5pbmRleE9mKG4pIT09LTEsZSxcIlwiKX1zdGFydHNXaXRoQW55T2ZJZ25vcmVDYXNlKCl7dmFyIGU9ZWUuYXBwbHkoeGUsYXJndW1lbnRzKTtyZXR1cm4gZS5sZW5ndGg9PT0wP2JlKHRoaXMpOnFlKHRoaXMsKG4scik9PnIuc29tZShpPT5uLmluZGV4T2YoaSk9PT0wKSxlLGRlKX1hbnlPZigpe2xldCBlPWVlLmFwcGx5KHhlLGFyZ3VtZW50cyksbj10aGlzLl9jbXA7dHJ5e2Uuc29ydChuKX1jYXRjaHtyZXR1cm4gVSh0aGlzLEopfWlmKGUubGVuZ3RoPT09MClyZXR1cm4gYmUodGhpcyk7bGV0IHI9bmV3IHRoaXMuQ29sbGVjdGlvbih0aGlzLCgpPT5zZShlWzBdLGVbZS5sZW5ndGgtMV0pKTtyLl9vbmRpcmVjdGlvbmNoYW5nZT1zPT57bj1zPT09XCJuZXh0XCI/dGhpcy5fYXNjZW5kaW5nOnRoaXMuX2Rlc2NlbmRpbmcsZS5zb3J0KG4pfTtsZXQgaT0wO3JldHVybiByLl9hZGRBbGdvcml0aG0oKHMsbyxhKT0+e2xldCB1PXMua2V5O2Zvcig7bih1LGVbaV0pPjA7KWlmKCsraSxpPT09ZS5sZW5ndGgpcmV0dXJuIG8oYSksITE7cmV0dXJuIG4odSxlW2ldKT09PTA/ITA6KG8oKCk9PntzLmNvbnRpbnVlKGVbaV0pfSksITEpfSkscn1ub3RFcXVhbChlKXtyZXR1cm4gdGhpcy5pbkFueVJhbmdlKFtbanQsZV0sW2UsdGhpcy5kYi5fbWF4S2V5XV0se2luY2x1ZGVMb3dlcnM6ITEsaW5jbHVkZVVwcGVyczohMX0pfW5vbmVPZigpe2xldCBlPWVlLmFwcGx5KHhlLGFyZ3VtZW50cyk7aWYoZS5sZW5ndGg9PT0wKXJldHVybiBuZXcgdGhpcy5Db2xsZWN0aW9uKHRoaXMpO3RyeXtlLnNvcnQodGhpcy5fYXNjZW5kaW5nKX1jYXRjaHtyZXR1cm4gVSh0aGlzLEopfWxldCBuPWUucmVkdWNlKChyLGkpPT5yP3IuY29uY2F0KFtbcltyLmxlbmd0aC0xXVsxXSxpXV0pOltbanQsaV1dLG51bGwpO3JldHVybiBuLnB1c2goW2VbZS5sZW5ndGgtMV0sdGhpcy5kYi5fbWF4S2V5XSksdGhpcy5pbkFueVJhbmdlKG4se2luY2x1ZGVMb3dlcnM6ITEsaW5jbHVkZVVwcGVyczohMX0pfWluQW55UmFuZ2UoZSxuKXtsZXQgcj10aGlzLl9jbXAsaT10aGlzLl9hc2NlbmRpbmcscz10aGlzLl9kZXNjZW5kaW5nLG89dGhpcy5fbWluLGE9dGhpcy5fbWF4O2lmKGUubGVuZ3RoPT09MClyZXR1cm4gYmUodGhpcyk7aWYoIWUuZXZlcnkobT0+bVswXSE9PXZvaWQgMCYmbVsxXSE9PXZvaWQgMCYmaShtWzBdLG1bMV0pPD0wKSlyZXR1cm4gVSh0aGlzLFwiRmlyc3QgYXJndW1lbnQgdG8gaW5BbnlSYW5nZSgpIG11c3QgYmUgYW4gQXJyYXkgb2YgdHdvLXZhbHVlIEFycmF5cyBbbG93ZXIsdXBwZXJdIHdoZXJlIHVwcGVyIG11c3Qgbm90IGJlIGxvd2VyIHRoYW4gbG93ZXJcIixDLkludmFsaWRBcmd1bWVudCk7bGV0IHU9IW58fG4uaW5jbHVkZUxvd2VycyE9PSExLGw9biYmbi5pbmNsdWRlVXBwZXJzPT09ITA7ZnVuY3Rpb24gaChtLHgpe2xldCBFPTAsUz1tLmxlbmd0aDtmb3IoO0U8UzsrK0Upe2xldCBLPW1bRV07aWYocih4WzBdLEtbMV0pPDAmJnIoeFsxXSxLWzBdKT4wKXtLWzBdPW8oS1swXSx4WzBdKSxLWzFdPWEoS1sxXSx4WzFdKTticmVha319cmV0dXJuIEU9PT1TJiZtLnB1c2goeCksbX1sZXQgZD1pO2Z1bmN0aW9uIGMobSx4KXtyZXR1cm4gZChtWzBdLHhbMF0pfWxldCBmO3RyeXtmPWUucmVkdWNlKGgsW10pLGYuc29ydChjKX1jYXRjaHtyZXR1cm4gVSh0aGlzLEopfWxldCBnPTAscD1sP209PmkobSxmW2ddWzFdKT4wOm09PmkobSxmW2ddWzFdKT49MCx2PXU/bT0+cyhtLGZbZ11bMF0pPjA6bT0+cyhtLGZbZ11bMF0pPj0wO2Z1bmN0aW9uIHkobSl7cmV0dXJuIXAobSkmJiF2KG0pfWxldCBfPXAsdz1uZXcgdGhpcy5Db2xsZWN0aW9uKHRoaXMsKCk9PnNlKGZbMF1bMF0sZltmLmxlbmd0aC0xXVsxXSwhdSwhbCkpO3JldHVybiB3Ll9vbmRpcmVjdGlvbmNoYW5nZT1tPT57bT09PVwibmV4dFwiPyhfPXAsZD1pKTooXz12LGQ9cyksZi5zb3J0KGMpfSx3Ll9hZGRBbGdvcml0aG0oKG0seCxFKT0+e2Zvcih2YXIgUz1tLmtleTtfKFMpOylpZigrK2csZz09PWYubGVuZ3RoKXJldHVybiB4KEUpLCExO3JldHVybiB5KFMpPyEwOih0aGlzLl9jbXAoUyxmW2ddWzFdKT09PTB8fHRoaXMuX2NtcChTLGZbZ11bMF0pPT09MHx8eCgoKT0+e2Q9PT1pP20uY29udGludWUoZltnXVswXSk6bS5jb250aW51ZShmW2ddWzFdKX0pLCExKX0pLHd9c3RhcnRzV2l0aEFueU9mKCl7bGV0IGU9ZWUuYXBwbHkoeGUsYXJndW1lbnRzKTtyZXR1cm4gZS5ldmVyeShuPT50eXBlb2Ygbj09XCJzdHJpbmdcIik/ZS5sZW5ndGg9PT0wP2JlKHRoaXMpOnRoaXMuaW5BbnlSYW5nZShlLm1hcChuPT5bbixuK2RlXSkpOlUodGhpcyxcInN0YXJ0c1dpdGhBbnlPZigpIG9ubHkgd29ya3Mgd2l0aCBzdHJpbmdzXCIpfX07ZnVuY3Rpb24gUXIodCl7cmV0dXJuIFllKGZ0LnByb3RvdHlwZSxmdW5jdGlvbihuLHIsaSl7dGhpcy5kYj10LHRoaXMuX2N0eD17dGFibGU6bixpbmRleDpyPT09XCI6aWRcIj9udWxsOnIsb3I6aX07bGV0IHM9dC5fZGVwcy5pbmRleGVkREI7aWYoIXMpdGhyb3cgbmV3IEMuTWlzc2luZ0FQSTt0aGlzLl9jbXA9dGhpcy5fYXNjZW5kaW5nPXMuY21wLmJpbmQocyksdGhpcy5fZGVzY2VuZGluZz0obyxhKT0+cy5jbXAoYSxvKSx0aGlzLl9tYXg9KG8sYSk9PnMuY21wKG8sYSk+MD9vOmEsdGhpcy5fbWluPShvLGEpPT5zLmNtcChvLGEpPDA/bzphLHRoaXMuX0lEQktleVJhbmdlPXQuX2RlcHMuSURCS2V5UmFuZ2V9KX1mdW5jdGlvbiBHKHQpe3JldHVybiBPKGZ1bmN0aW9uKGUpe3JldHVybiBOZShlKSx0KGUudGFyZ2V0LmVycm9yKSwhMX0pfWZ1bmN0aW9uIE5lKHQpe3Quc3RvcFByb3BhZ2F0aW9uJiZ0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQmJnQucHJldmVudERlZmF1bHQoKX12YXIgamU9XCJzdG9yYWdlbXV0YXRlZFwiLGFlPVwieC1zdG9yYWdlbXV0YXRlZC0xXCIsZmU9SGUobnVsbCxqZSksJHQ9Y2xhc3N7X2xvY2soKXtyZXR1cm4gRGUoIUEuZ2xvYmFsKSwrK3RoaXMuX3JlY3Vsb2NrLHRoaXMuX3JlY3Vsb2NrPT09MSYmIUEuZ2xvYmFsJiYoQS5sb2NrT3duZXJGb3I9dGhpcyksdGhpc31fdW5sb2NrKCl7aWYoRGUoIUEuZ2xvYmFsKSwtLXRoaXMuX3JlY3Vsb2NrPT09MClmb3IoQS5nbG9iYWx8fChBLmxvY2tPd25lckZvcj1udWxsKTt0aGlzLl9ibG9ja2VkRnVuY3MubGVuZ3RoPjAmJiF0aGlzLl9sb2NrZWQoKTspe3ZhciBlPXRoaXMuX2Jsb2NrZWRGdW5jcy5zaGlmdCgpO3RyeXtUZShlWzFdLGVbMF0pfWNhdGNoe319cmV0dXJuIHRoaXN9X2xvY2tlZCgpe3JldHVybiB0aGlzLl9yZWN1bG9jayYmQS5sb2NrT3duZXJGb3IhPT10aGlzfWNyZWF0ZShlKXtpZighdGhpcy5tb2RlKXJldHVybiB0aGlzO2xldCBuPXRoaXMuZGIuaWRiZGIscj10aGlzLmRiLl9zdGF0ZS5kYk9wZW5FcnJvcjtpZihEZSghdGhpcy5pZGJ0cmFucyksIWUmJiFuKXN3aXRjaChyJiZyLm5hbWUpe2Nhc2VcIkRhdGFiYXNlQ2xvc2VkRXJyb3JcIjp0aHJvdyBuZXcgQy5EYXRhYmFzZUNsb3NlZChyKTtjYXNlXCJNaXNzaW5nQVBJRXJyb3JcIjp0aHJvdyBuZXcgQy5NaXNzaW5nQVBJKHIubWVzc2FnZSxyKTtkZWZhdWx0OnRocm93IG5ldyBDLk9wZW5GYWlsZWQocil9aWYoIXRoaXMuYWN0aXZlKXRocm93IG5ldyBDLlRyYW5zYWN0aW9uSW5hY3RpdmU7cmV0dXJuIERlKHRoaXMuX2NvbXBsZXRpb24uX3N0YXRlPT09bnVsbCksZT10aGlzLmlkYnRyYW5zPWV8fCh0aGlzLmRiLmNvcmU/dGhpcy5kYi5jb3JlLnRyYW5zYWN0aW9uKHRoaXMuc3RvcmVOYW1lcyx0aGlzLm1vZGUse2R1cmFiaWxpdHk6dGhpcy5jaHJvbWVUcmFuc2FjdGlvbkR1cmFiaWxpdHl9KTpuLnRyYW5zYWN0aW9uKHRoaXMuc3RvcmVOYW1lcyx0aGlzLm1vZGUse2R1cmFiaWxpdHk6dGhpcy5jaHJvbWVUcmFuc2FjdGlvbkR1cmFiaWxpdHl9KSksZS5vbmVycm9yPU8oaT0+e05lKGkpLHRoaXMuX3JlamVjdChlLmVycm9yKX0pLGUub25hYm9ydD1PKGk9PntOZShpKSx0aGlzLmFjdGl2ZSYmdGhpcy5fcmVqZWN0KG5ldyBDLkFib3J0KGUuZXJyb3IpKSx0aGlzLmFjdGl2ZT0hMSx0aGlzLm9uKFwiYWJvcnRcIikuZmlyZShpKX0pLGUub25jb21wbGV0ZT1PKCgpPT57dGhpcy5hY3RpdmU9ITEsdGhpcy5fcmVzb2x2ZSgpLFwibXV0YXRlZFBhcnRzXCJpbiBlJiZmZS5zdG9yYWdlbXV0YXRlZC5maXJlKGUubXV0YXRlZFBhcnRzKX0pLHRoaXN9X3Byb21pc2UoZSxuLHIpe2lmKGU9PT1cInJlYWR3cml0ZVwiJiZ0aGlzLm1vZGUhPT1cInJlYWR3cml0ZVwiKXJldHVybiBCKG5ldyBDLlJlYWRPbmx5KFwiVHJhbnNhY3Rpb24gaXMgcmVhZG9ubHlcIikpO2lmKCF0aGlzLmFjdGl2ZSlyZXR1cm4gQihuZXcgQy5UcmFuc2FjdGlvbkluYWN0aXZlKTtpZih0aGlzLl9sb2NrZWQoKSlyZXR1cm4gbmV3IGIoKHMsbyk9Pnt0aGlzLl9ibG9ja2VkRnVuY3MucHVzaChbKCk9Pnt0aGlzLl9wcm9taXNlKGUsbixyKS50aGVuKHMsbyl9LEFdKX0pO2lmKHIpcmV0dXJuIGxlKCgpPT57dmFyIHM9bmV3IGIoKG8sYSk9Pnt0aGlzLl9sb2NrKCk7bGV0IHU9bihvLGEsdGhpcyk7dSYmdS50aGVuJiZ1LnRoZW4obyxhKX0pO3JldHVybiBzLmZpbmFsbHkoKCk9PnRoaXMuX3VubG9jaygpKSxzLl9saWI9ITAsc30pO3ZhciBpPW5ldyBiKChzLG8pPT57dmFyIGE9bihzLG8sdGhpcyk7YSYmYS50aGVuJiZhLnRoZW4ocyxvKX0pO3JldHVybiBpLl9saWI9ITAsaX1fcm9vdCgpe3JldHVybiB0aGlzLnBhcmVudD90aGlzLnBhcmVudC5fcm9vdCgpOnRoaXN9d2FpdEZvcihlKXt2YXIgbj10aGlzLl9yb290KCk7bGV0IHI9Yi5yZXNvbHZlKGUpO2lmKG4uX3dhaXRpbmdGb3Ipbi5fd2FpdGluZ0Zvcj1uLl93YWl0aW5nRm9yLnRoZW4oKCk9PnIpO2Vsc2V7bi5fd2FpdGluZ0Zvcj1yLG4uX3dhaXRpbmdRdWV1ZT1bXTt2YXIgaT1uLmlkYnRyYW5zLm9iamVjdFN0b3JlKG4uc3RvcmVOYW1lc1swXSk7KGZ1bmN0aW9uIG8oKXtmb3IoKytuLl9zcGluQ291bnQ7bi5fd2FpdGluZ1F1ZXVlLmxlbmd0aDspbi5fd2FpdGluZ1F1ZXVlLnNoaWZ0KCkoKTtuLl93YWl0aW5nRm9yJiYoaS5nZXQoLTEvMCkub25zdWNjZXNzPW8pfSkoKX12YXIgcz1uLl93YWl0aW5nRm9yO3JldHVybiBuZXcgYigobyxhKT0+e3IudGhlbih1PT5uLl93YWl0aW5nUXVldWUucHVzaChPKG8uYmluZChudWxsLHUpKSksdT0+bi5fd2FpdGluZ1F1ZXVlLnB1c2goTyhhLmJpbmQobnVsbCx1KSkpKS5maW5hbGx5KCgpPT57bi5fd2FpdGluZ0Zvcj09PXMmJihuLl93YWl0aW5nRm9yPW51bGwpfSl9KX1hYm9ydCgpe3RoaXMuYWN0aXZlJiYodGhpcy5hY3RpdmU9ITEsdGhpcy5pZGJ0cmFucyYmdGhpcy5pZGJ0cmFucy5hYm9ydCgpLHRoaXMuX3JlamVjdChuZXcgQy5BYm9ydCkpfXRhYmxlKGUpe2xldCBuPXRoaXMuX21lbW9pemVkVGFibGVzfHwodGhpcy5fbWVtb2l6ZWRUYWJsZXM9e30pO2lmKFcobixlKSlyZXR1cm4gbltlXTtsZXQgcj10aGlzLnNjaGVtYVtlXTtpZighcil0aHJvdyBuZXcgQy5Ob3RGb3VuZChcIlRhYmxlIFwiK2UrXCIgbm90IHBhcnQgb2YgdHJhbnNhY3Rpb25cIik7bGV0IGk9bmV3IHRoaXMuZGIuVGFibGUoZSxyLHRoaXMpO3JldHVybiBpLmNvcmU9dGhpcy5kYi5jb3JlLnRhYmxlKGUpLG5bZV09aSxpfX07ZnVuY3Rpb24gR3IodCl7cmV0dXJuIFllKCR0LnByb3RvdHlwZSxmdW5jdGlvbihuLHIsaSxzLG8pe3RoaXMuZGI9dCx0aGlzLm1vZGU9bix0aGlzLnN0b3JlTmFtZXM9cix0aGlzLnNjaGVtYT1pLHRoaXMuY2hyb21lVHJhbnNhY3Rpb25EdXJhYmlsaXR5PXMsdGhpcy5pZGJ0cmFucz1udWxsLHRoaXMub249SGUodGhpcyxcImNvbXBsZXRlXCIsXCJlcnJvclwiLFwiYWJvcnRcIiksdGhpcy5wYXJlbnQ9b3x8bnVsbCx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9yZWN1bG9jaz0wLHRoaXMuX2Jsb2NrZWRGdW5jcz1bXSx0aGlzLl9yZXNvbHZlPW51bGwsdGhpcy5fcmVqZWN0PW51bGwsdGhpcy5fd2FpdGluZ0Zvcj1udWxsLHRoaXMuX3dhaXRpbmdRdWV1ZT1udWxsLHRoaXMuX3NwaW5Db3VudD0wLHRoaXMuX2NvbXBsZXRpb249bmV3IGIoKGEsdSk9Pnt0aGlzLl9yZXNvbHZlPWEsdGhpcy5fcmVqZWN0PXV9KSx0aGlzLl9jb21wbGV0aW9uLnRoZW4oKCk9Pnt0aGlzLmFjdGl2ZT0hMSx0aGlzLm9uLmNvbXBsZXRlLmZpcmUoKX0sYT0+e3ZhciB1PXRoaXMuYWN0aXZlO3JldHVybiB0aGlzLmFjdGl2ZT0hMSx0aGlzLm9uLmVycm9yLmZpcmUoYSksdGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQuX3JlamVjdChhKTp1JiZ0aGlzLmlkYnRyYW5zJiZ0aGlzLmlkYnRyYW5zLmFib3J0KCksQihhKX0pfSl9ZnVuY3Rpb24genQodCxlLG4scixpLHMsbyl7cmV0dXJue25hbWU6dCxrZXlQYXRoOmUsdW5pcXVlOm4sbXVsdGk6cixhdXRvOmksY29tcG91bmQ6cyxzcmM6KG4mJiFvP1wiJlwiOlwiXCIpKyhyP1wiKlwiOlwiXCIpKyhpP1wiKytcIjpcIlwiKStabihlKX19ZnVuY3Rpb24gWm4odCl7cmV0dXJuIHR5cGVvZiB0PT1cInN0cmluZ1wiP3Q6dD9cIltcIitbXS5qb2luLmNhbGwodCxcIitcIikrXCJdXCI6XCJcIn1mdW5jdGlvbiBlcih0LGUsbil7cmV0dXJue25hbWU6dCxwcmltS2V5OmUsaW5kZXhlczpuLG1hcHBlZENsYXNzOm51bGwsaWR4QnlOYW1lOlBuKG4scj0+W3IubmFtZSxyXSl9fWZ1bmN0aW9uIHFyKHQpe3JldHVybiB0Lmxlbmd0aD09PTE/dFswXTp0fXZhciBWZT10PT57dHJ5e3JldHVybiB0Lm9ubHkoW1tdXSksVmU9KCk9PltbXV0sW1tdXX1jYXRjaHtyZXR1cm4gVmU9KCk9PmRlLGRlfX07ZnVuY3Rpb24gVXQodCl7cmV0dXJuIHQ9PW51bGw/KCk9Pnt9OnR5cGVvZiB0PT1cInN0cmluZ1wiP0pyKHQpOmU9Pm5lKGUsdCl9ZnVuY3Rpb24gSnIodCl7cmV0dXJuIHQuc3BsaXQoXCIuXCIpLmxlbmd0aD09PTE/bj0+blt0XTpuPT5uZShuLHQpfWZ1bmN0aW9uIENuKHQpe3JldHVybltdLnNsaWNlLmNhbGwodCl9dmFyIFpyPTA7ZnVuY3Rpb24gT2UodCl7cmV0dXJuIHQ9PW51bGw/XCI6aWRcIjp0eXBlb2YgdD09XCJzdHJpbmdcIj90OmBbJHt0LmpvaW4oXCIrXCIpfV1gfWZ1bmN0aW9uIGVpKHQsZSxuKXtmdW5jdGlvbiByKGgsZCl7bGV0IGM9Q24oaC5vYmplY3RTdG9yZU5hbWVzKTtyZXR1cm57c2NoZW1hOntuYW1lOmgubmFtZSx0YWJsZXM6Yy5tYXAoZj0+ZC5vYmplY3RTdG9yZShmKSkubWFwKGY9PntsZXR7a2V5UGF0aDpnLGF1dG9JbmNyZW1lbnQ6cH09Zix2PWooZykseT1nPT1udWxsLF89e30sdz17bmFtZTpmLm5hbWUscHJpbWFyeUtleTp7bmFtZTpudWxsLGlzUHJpbWFyeUtleTohMCxvdXRib3VuZDp5LGNvbXBvdW5kOnYsa2V5UGF0aDpnLGF1dG9JbmNyZW1lbnQ6cCx1bmlxdWU6ITAsZXh0cmFjdEtleTpVdChnKX0saW5kZXhlczpDbihmLmluZGV4TmFtZXMpLm1hcChtPT5mLmluZGV4KG0pKS5tYXAobT0+e2xldHtuYW1lOngsdW5pcXVlOkUsbXVsdGlFbnRyeTpTLGtleVBhdGg6S309bSxJPWooSyksaz17bmFtZTp4LGNvbXBvdW5kOkksa2V5UGF0aDpLLHVuaXF1ZTpFLG11bHRpRW50cnk6UyxleHRyYWN0S2V5OlV0KEspfTtyZXR1cm4gX1tPZShLKV09ayxrfSksZ2V0SW5kZXhCeUtleVBhdGg6bT0+X1tPZShtKV19O3JldHVybiBfW1wiOmlkXCJdPXcucHJpbWFyeUtleSxnIT1udWxsJiYoX1tPZShnKV09dy5wcmltYXJ5S2V5KSx3fSl9LGhhc0dldEFsbDpjLmxlbmd0aD4wJiZcImdldEFsbFwiaW4gZC5vYmplY3RTdG9yZShjWzBdKSYmISh0eXBlb2YgbmF2aWdhdG9yPFwidVwiJiYvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhLyhDaHJvbWVcXC98RWRnZVxcLykvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJltdLmNvbmNhdChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9TYWZhcmlcXC8oXFxkKikvKSlbMV08NjA0KX19ZnVuY3Rpb24gaShoKXtpZihoLnR5cGU9PT0zKXJldHVybiBudWxsO2lmKGgudHlwZT09PTQpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNvbnZlcnQgbmV2ZXIgdHlwZSB0byBJREJLZXlSYW5nZVwiKTtsZXR7bG93ZXI6ZCx1cHBlcjpjLGxvd2VyT3BlbjpmLHVwcGVyT3BlbjpnfT1oO3JldHVybiBkPT09dm9pZCAwP2M9PT12b2lkIDA/bnVsbDplLnVwcGVyQm91bmQoYywhIWcpOmM9PT12b2lkIDA/ZS5sb3dlckJvdW5kKGQsISFmKTplLmJvdW5kKGQsYywhIWYsISFnKX1mdW5jdGlvbiBzKGgpe2xldCBkPWgubmFtZTtmdW5jdGlvbiBjKHt0cmFuczpwLHR5cGU6dixrZXlzOnksdmFsdWVzOl8scmFuZ2U6d30pe3JldHVybiBuZXcgUHJvbWlzZSgobSx4KT0+e209TyhtKTtsZXQgRT1wLm9iamVjdFN0b3JlKGQpLFM9RS5rZXlQYXRoPT1udWxsLEs9dj09PVwicHV0XCJ8fHY9PT1cImFkZFwiO2lmKCFLJiZ2IT09XCJkZWxldGVcIiYmdiE9PVwiZGVsZXRlUmFuZ2VcIil0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG9wZXJhdGlvbiB0eXBlOiBcIit2KTtsZXR7bGVuZ3RoOkl9PXl8fF98fHtsZW5ndGg6MX07aWYoeSYmXyYmeS5sZW5ndGghPT1fLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJHaXZlbiBrZXlzIGFycmF5IG11c3QgaGF2ZSBzYW1lIGxlbmd0aCBhcyBnaXZlbiB2YWx1ZXMgYXJyYXkuXCIpO2lmKEk9PT0wKXJldHVybiBtKHtudW1GYWlsdXJlczowLGZhaWx1cmVzOnt9LHJlc3VsdHM6W10sbGFzdFJlc3VsdDp2b2lkIDB9KTtsZXQgayxEPVtdLCQ9W10sVD0wLFk9ej0+eysrVCxOZSh6KX07aWYodj09PVwiZGVsZXRlUmFuZ2VcIil7aWYody50eXBlPT09NClyZXR1cm4gbSh7bnVtRmFpbHVyZXM6VCxmYWlsdXJlczokLHJlc3VsdHM6W10sbGFzdFJlc3VsdDp2b2lkIDB9KTt3LnR5cGU9PT0zP0QucHVzaChrPUUuY2xlYXIoKSk6RC5wdXNoKGs9RS5kZWxldGUoaSh3KSkpfWVsc2V7bGV0W3osSF09Sz9TP1tfLHldOltfLG51bGxdOlt5LG51bGxdO2lmKEspZm9yKGxldCBGPTA7RjxJOysrRilELnB1c2goaz1IJiZIW0ZdIT09dm9pZCAwP0Vbdl0oeltGXSxIW0ZdKTpFW3ZdKHpbRl0pKSxrLm9uZXJyb3I9WTtlbHNlIGZvcihsZXQgRj0wO0Y8STsrK0YpRC5wdXNoKGs9RVt2XSh6W0ZdKSksay5vbmVycm9yPVl9bGV0IFg9ej0+e2xldCBIPXoudGFyZ2V0LnJlc3VsdDtELmZvckVhY2goKEYsSWUpPT5GLmVycm9yIT1udWxsJiYoJFtJZV09Ri5lcnJvcikpLG0oe251bUZhaWx1cmVzOlQsZmFpbHVyZXM6JCxyZXN1bHRzOnY9PT1cImRlbGV0ZVwiP3k6RC5tYXAoRj0+Ri5yZXN1bHQpLGxhc3RSZXN1bHQ6SH0pfTtrLm9uZXJyb3I9ej0+e1koeiksWCh6KX0say5vbnN1Y2Nlc3M9WH0pfWZ1bmN0aW9uIGYoe3RyYW5zOnAsdmFsdWVzOnYscXVlcnk6eSxyZXZlcnNlOl8sdW5pcXVlOnd9KXtyZXR1cm4gbmV3IFByb21pc2UoKG0seCk9PnttPU8obSk7bGV0e2luZGV4OkUscmFuZ2U6U309eSxLPXAub2JqZWN0U3RvcmUoZCksST1FLmlzUHJpbWFyeUtleT9LOksuaW5kZXgoRS5uYW1lKSxrPV8/dz9cInByZXZ1bmlxdWVcIjpcInByZXZcIjp3P1wibmV4dHVuaXF1ZVwiOlwibmV4dFwiLEQ9dnx8IShcIm9wZW5LZXlDdXJzb3JcImluIEkpP0kub3BlbkN1cnNvcihpKFMpLGspOkkub3BlbktleUN1cnNvcihpKFMpLGspO0Qub25lcnJvcj1HKHgpLEQub25zdWNjZXNzPU8oJD0+e2xldCBUPUQucmVzdWx0O2lmKCFUKXttKG51bGwpO3JldHVybn1ULl9fX2lkPSsrWnIsVC5kb25lPSExO2xldCBZPVQuY29udGludWUuYmluZChUKSxYPVQuY29udGludWVQcmltYXJ5S2V5O1gmJihYPVguYmluZChUKSk7bGV0IHo9VC5hZHZhbmNlLmJpbmQoVCksSD0oKT0+e3Rocm93IG5ldyBFcnJvcihcIkN1cnNvciBub3Qgc3RhcnRlZFwiKX0sRj0oKT0+e3Rocm93IG5ldyBFcnJvcihcIkN1cnNvciBub3Qgc3RvcHBlZFwiKX07VC50cmFucz1wLFQuc3RvcD1ULmNvbnRpbnVlPVQuY29udGludWVQcmltYXJ5S2V5PVQuYWR2YW5jZT1ILFQuZmFpbD1PKHgpLFQubmV4dD1mdW5jdGlvbigpe2xldCBJZT0xO3JldHVybiB0aGlzLnN0YXJ0KCgpPT5JZS0tP3RoaXMuY29udGludWUoKTp0aGlzLnN0b3AoKSkudGhlbigoKT0+dGhpcyl9LFQuc3RhcnQ9SWU9PntsZXQgc3I9bmV3IFByb21pc2UoKF9lLG1uKT0+e19lPU8oX2UpLEQub25lcnJvcj1HKG1uKSxULmZhaWw9bW4sVC5zdG9wPW9yPT57VC5zdG9wPVQuY29udGludWU9VC5jb250aW51ZVByaW1hcnlLZXk9VC5hZHZhbmNlPUYsX2Uob3IpfX0pLF90PSgpPT57aWYoRC5yZXN1bHQpdHJ5e0llKCl9Y2F0Y2goX2Upe1QuZmFpbChfZSl9ZWxzZSBULmRvbmU9ITAsVC5zdGFydD0oKT0+e3Rocm93IG5ldyBFcnJvcihcIkN1cnNvciBiZWhpbmQgbGFzdCBlbnRyeVwiKX0sVC5zdG9wKCl9O3JldHVybiBELm9uc3VjY2Vzcz1PKF9lPT57RC5vbnN1Y2Nlc3M9X3QsX3QoKX0pLFQuY29udGludWU9WSxULmNvbnRpbnVlUHJpbWFyeUtleT1YLFQuYWR2YW5jZT16LF90KCksc3J9LG0oVCl9LHgpfSl9ZnVuY3Rpb24gZyhwKXtyZXR1cm4gdj0+bmV3IFByb21pc2UoKHksXyk9Pnt5PU8oeSk7bGV0e3RyYW5zOncsdmFsdWVzOm0sbGltaXQ6eCxxdWVyeTpFfT12LFM9eD09PTEvMD92b2lkIDA6eCx7aW5kZXg6SyxyYW5nZTpJfT1FLGs9dy5vYmplY3RTdG9yZShkKSxEPUsuaXNQcmltYXJ5S2V5P2s6ay5pbmRleChLLm5hbWUpLCQ9aShJKTtpZih4PT09MClyZXR1cm4geSh7cmVzdWx0OltdfSk7aWYocCl7bGV0IFQ9bT9ELmdldEFsbCgkLFMpOkQuZ2V0QWxsS2V5cygkLFMpO1Qub25zdWNjZXNzPVk9Pnkoe3Jlc3VsdDpZLnRhcmdldC5yZXN1bHR9KSxULm9uZXJyb3I9RyhfKX1lbHNle2xldCBUPTAsWT1tfHwhKFwib3BlbktleUN1cnNvclwiaW4gRCk/RC5vcGVuQ3Vyc29yKCQpOkQub3BlbktleUN1cnNvcigkKSxYPVtdO1kub25zdWNjZXNzPXo9PntsZXQgSD1ZLnJlc3VsdDtpZighSClyZXR1cm4geSh7cmVzdWx0Olh9KTtpZihYLnB1c2gobT9ILnZhbHVlOkgucHJpbWFyeUtleSksKytUPT09eClyZXR1cm4geSh7cmVzdWx0Olh9KTtILmNvbnRpbnVlKCl9LFkub25lcnJvcj1HKF8pfX0pfXJldHVybntuYW1lOmQsc2NoZW1hOmgsbXV0YXRlOmMsZ2V0TWFueSh7dHJhbnM6cCxrZXlzOnZ9KXtyZXR1cm4gbmV3IFByb21pc2UoKHksXyk9Pnt5PU8oeSk7bGV0IHc9cC5vYmplY3RTdG9yZShkKSxtPXYubGVuZ3RoLHg9bmV3IEFycmF5KG0pLEU9MCxTPTAsSyxJPUQ9PntsZXQgJD1ELnRhcmdldDsoeFskLl9wb3NdPSQucmVzdWx0KSE9bnVsbCwrK1M9PT1FJiZ5KHgpfSxrPUcoXyk7Zm9yKGxldCBEPTA7RDxtOysrRCl2W0RdIT1udWxsJiYoSz13LmdldCh2W0RdKSxLLl9wb3M9RCxLLm9uc3VjY2Vzcz1JLEsub25lcnJvcj1rLCsrRSk7RT09PTAmJnkoeCl9KX0sZ2V0KHt0cmFuczpwLGtleTp2fSl7cmV0dXJuIG5ldyBQcm9taXNlKCh5LF8pPT57eT1PKHkpO2xldCBtPXAub2JqZWN0U3RvcmUoZCkuZ2V0KHYpO20ub25zdWNjZXNzPXg9PnkoeC50YXJnZXQucmVzdWx0KSxtLm9uZXJyb3I9RyhfKX0pfSxxdWVyeTpnKGEpLG9wZW5DdXJzb3I6Zixjb3VudCh7cXVlcnk6cCx0cmFuczp2fSl7bGV0e2luZGV4OnkscmFuZ2U6X309cDtyZXR1cm4gbmV3IFByb21pc2UoKHcsbSk9PntsZXQgeD12Lm9iamVjdFN0b3JlKGQpLEU9eS5pc1ByaW1hcnlLZXk/eDp4LmluZGV4KHkubmFtZSksUz1pKF8pLEs9Uz9FLmNvdW50KFMpOkUuY291bnQoKTtLLm9uc3VjY2Vzcz1PKEk9PncoSS50YXJnZXQucmVzdWx0KSksSy5vbmVycm9yPUcobSl9KX19fWxldHtzY2hlbWE6byxoYXNHZXRBbGw6YX09cih0LG4pLHU9by50YWJsZXMubWFwKGg9PnMoaCkpLGw9e307cmV0dXJuIHUuZm9yRWFjaChoPT5sW2gubmFtZV09aCkse3N0YWNrOlwiZGJjb3JlXCIsdHJhbnNhY3Rpb246dC50cmFuc2FjdGlvbi5iaW5kKHQpLHRhYmxlKGgpe2lmKCFsW2hdKXRocm93IG5ldyBFcnJvcihgVGFibGUgJyR7aH0nIG5vdCBmb3VuZGApO3JldHVybiBsW2hdfSxNSU5fS0VZOi0xLzAsTUFYX0tFWTpWZShlKSxzY2hlbWE6b319ZnVuY3Rpb24gdGkodCxlKXtyZXR1cm4gZS5yZWR1Y2UoKG4se2NyZWF0ZTpyfSk9Pih7Li4ubiwuLi5yKG4pfSksdCl9ZnVuY3Rpb24gbmkodCxlLHtJREJLZXlSYW5nZTpuLGluZGV4ZWREQjpyfSxpKXtyZXR1cm57ZGJjb3JlOnRpKGVpKGUsbixpKSx0LmRiY29yZSl9fWZ1bmN0aW9uIGxuKHtfbm92aXA6dH0sZSl7bGV0IG49ZS5kYixyPW5pKHQuX21pZGRsZXdhcmVzLG4sdC5fZGVwcyxlKTt0LmNvcmU9ci5kYmNvcmUsdC50YWJsZXMuZm9yRWFjaChpPT57bGV0IHM9aS5uYW1lO3QuY29yZS5zY2hlbWEudGFibGVzLnNvbWUobz0+by5uYW1lPT09cykmJihpLmNvcmU9dC5jb3JlLnRhYmxlKHMpLHRbc11pbnN0YW5jZW9mIHQuVGFibGUmJih0W3NdLmNvcmU9aS5jb3JlKSl9KX1mdW5jdGlvbiBodCh7X25vdmlwOnR9LGUsbixyKXtuLmZvckVhY2goaT0+e2xldCBzPXJbaV07ZS5mb3JFYWNoKG89PntsZXQgYT1lbihvLGkpOyghYXx8XCJ2YWx1ZVwiaW4gYSYmYS52YWx1ZT09PXZvaWQgMCkmJihvPT09dC5UcmFuc2FjdGlvbi5wcm90b3R5cGV8fG8gaW5zdGFuY2VvZiB0LlRyYW5zYWN0aW9uP3JlKG8saSx7Z2V0KCl7cmV0dXJuIHRoaXMudGFibGUoaSl9LHNldCh1KXtJbih0aGlzLGkse3ZhbHVlOnUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KX19KTpvW2ldPW5ldyB0LlRhYmxlKGkscykpfSl9KX1mdW5jdGlvbiBXdCh7X25vdmlwOnR9LGUpe2UuZm9yRWFjaChuPT57Zm9yKGxldCByIGluIG4pbltyXWluc3RhbmNlb2YgdC5UYWJsZSYmZGVsZXRlIG5bcl19KX1mdW5jdGlvbiByaSh0LGUpe3JldHVybiB0Ll9jZmcudmVyc2lvbi1lLl9jZmcudmVyc2lvbn1mdW5jdGlvbiBpaSh0LGUsbixyKXtsZXQgaT10Ll9kYlNjaGVtYSxzPXQuX2NyZWF0ZVRyYW5zYWN0aW9uKFwicmVhZHdyaXRlXCIsdC5fc3RvcmVOYW1lcyxpKTtzLmNyZWF0ZShuKSxzLl9jb21wbGV0aW9uLmNhdGNoKHIpO2xldCBvPXMuX3JlamVjdC5iaW5kKHMpLGE9QS50cmFuc2xlc3N8fEE7bGUoKCk9PntBLnRyYW5zPXMsQS50cmFuc2xlc3M9YSxlPT09MD8oTShpKS5mb3JFYWNoKHU9PntjbihuLHUsaVt1XS5wcmltS2V5LGlbdV0uaW5kZXhlcyl9KSxsbih0LG4pLGIuZm9sbG93KCgpPT50Lm9uLnBvcHVsYXRlLmZpcmUocykpLmNhdGNoKG8pKTpzaSh0LGUscyxuKS5jYXRjaChvKX0pfWZ1bmN0aW9uIHNpKHtfbm92aXA6dH0sZSxuLHIpe2xldCBpPVtdLHM9dC5fdmVyc2lvbnMsbz10Ll9kYlNjaGVtYT1mbih0LHQuaWRiZGIsciksYT0hMTtzLmZpbHRlcihoPT5oLl9jZmcudmVyc2lvbj49ZSkuZm9yRWFjaChoPT57aS5wdXNoKCgpPT57bGV0IGQ9byxjPWguX2NmZy5kYnNjaGVtYTtZdCh0LGQsciksWXQodCxjLHIpLG89dC5fZGJTY2hlbWE9YztsZXQgZj10cihkLGMpO2YuYWRkLmZvckVhY2gocD0+e2NuKHIscFswXSxwWzFdLnByaW1LZXkscFsxXS5pbmRleGVzKX0pLGYuY2hhbmdlLmZvckVhY2gocD0+e2lmKHAucmVjcmVhdGUpdGhyb3cgbmV3IEMuVXBncmFkZShcIk5vdCB5ZXQgc3VwcG9ydCBmb3IgY2hhbmdpbmcgcHJpbWFyeSBrZXlcIik7e2xldCB2PXIub2JqZWN0U3RvcmUocC5uYW1lKTtwLmFkZC5mb3JFYWNoKHk9Pkh0KHYseSkpLHAuY2hhbmdlLmZvckVhY2goeT0+e3YuZGVsZXRlSW5kZXgoeS5uYW1lKSxIdCh2LHkpfSkscC5kZWwuZm9yRWFjaCh5PT52LmRlbGV0ZUluZGV4KHkpKX19KTtsZXQgZz1oLl9jZmcuY29udGVudFVwZ3JhZGU7aWYoZyYmaC5fY2ZnLnZlcnNpb24+ZSl7bG4odCxyKSxuLl9tZW1vaXplZFRhYmxlcz17fSxhPSEwO2xldCBwPWtuKGMpO2YuZGVsLmZvckVhY2godz0+e3Bbd109ZFt3XX0pLFd0KHQsW3QuVHJhbnNhY3Rpb24ucHJvdG90eXBlXSksaHQodCxbdC5UcmFuc2FjdGlvbi5wcm90b3R5cGVdLE0ocCkscCksbi5zY2hlbWE9cDtsZXQgdj10bihnKTt2JiZLZSgpO2xldCB5LF89Yi5mb2xsb3coKCk9PntpZih5PWcobikseSYmdil7dmFyIHc9aWUuYmluZChudWxsLG51bGwpO3kudGhlbih3LHcpfX0pO3JldHVybiB5JiZ0eXBlb2YgeS50aGVuPT1cImZ1bmN0aW9uXCI/Yi5yZXNvbHZlKHkpOl8udGhlbigoKT0+eSl9fSksaS5wdXNoKGQ9PntpZighYXx8IUZyKXtsZXQgYz1oLl9jZmcuZGJzY2hlbWE7YWkoYyxkKX1XdCh0LFt0LlRyYW5zYWN0aW9uLnByb3RvdHlwZV0pLGh0KHQsW3QuVHJhbnNhY3Rpb24ucHJvdG90eXBlXSx0Ll9zdG9yZU5hbWVzLHQuX2RiU2NoZW1hKSxuLnNjaGVtYT10Ll9kYlNjaGVtYX0pfSk7ZnVuY3Rpb24gbCgpe3JldHVybiBpLmxlbmd0aD9iLnJlc29sdmUoaS5zaGlmdCgpKG4uaWRidHJhbnMpKS50aGVuKGwpOmIucmVzb2x2ZSgpfXJldHVybiBsKCkudGhlbigoKT0+e29pKG8scil9KX1mdW5jdGlvbiB0cih0LGUpe2xldCBuPXtkZWw6W10sYWRkOltdLGNoYW5nZTpbXX0scjtmb3IociBpbiB0KWVbcl18fG4uZGVsLnB1c2gocik7Zm9yKHIgaW4gZSl7bGV0IGk9dFtyXSxzPWVbcl07aWYoIWkpbi5hZGQucHVzaChbcixzXSk7ZWxzZXtsZXQgbz17bmFtZTpyLGRlZjpzLHJlY3JlYXRlOiExLGRlbDpbXSxhZGQ6W10sY2hhbmdlOltdfTtpZihcIlwiKyhpLnByaW1LZXkua2V5UGF0aHx8XCJcIikhPVwiXCIrKHMucHJpbUtleS5rZXlQYXRofHxcIlwiKXx8aS5wcmltS2V5LmF1dG8hPT1zLnByaW1LZXkuYXV0byYmIWd0KW8ucmVjcmVhdGU9ITAsbi5jaGFuZ2UucHVzaChvKTtlbHNle2xldCBhPWkuaWR4QnlOYW1lLHU9cy5pZHhCeU5hbWUsbDtmb3IobCBpbiBhKXVbbF18fG8uZGVsLnB1c2gobCk7Zm9yKGwgaW4gdSl7bGV0IGg9YVtsXSxkPXVbbF07aD9oLnNyYyE9PWQuc3JjJiZvLmNoYW5nZS5wdXNoKGQpOm8uYWRkLnB1c2goZCl9KG8uZGVsLmxlbmd0aD4wfHxvLmFkZC5sZW5ndGg+MHx8by5jaGFuZ2UubGVuZ3RoPjApJiZuLmNoYW5nZS5wdXNoKG8pfX19cmV0dXJuIG59ZnVuY3Rpb24gY24odCxlLG4scil7bGV0IGk9dC5kYi5jcmVhdGVPYmplY3RTdG9yZShlLG4ua2V5UGF0aD97a2V5UGF0aDpuLmtleVBhdGgsYXV0b0luY3JlbWVudDpuLmF1dG99OnthdXRvSW5jcmVtZW50Om4uYXV0b30pO3JldHVybiByLmZvckVhY2gocz0+SHQoaSxzKSksaX1mdW5jdGlvbiBvaSh0LGUpe00odCkuZm9yRWFjaChuPT57ZS5kYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKG4pfHxjbihlLG4sdFtuXS5wcmltS2V5LHRbbl0uaW5kZXhlcyl9KX1mdW5jdGlvbiBhaSh0LGUpe1tdLnNsaWNlLmNhbGwoZS5kYi5vYmplY3RTdG9yZU5hbWVzKS5mb3JFYWNoKG49PnRbbl09PW51bGwmJmUuZGIuZGVsZXRlT2JqZWN0U3RvcmUobikpfWZ1bmN0aW9uIEh0KHQsZSl7dC5jcmVhdGVJbmRleChlLm5hbWUsZS5rZXlQYXRoLHt1bmlxdWU6ZS51bmlxdWUsbXVsdGlFbnRyeTplLm11bHRpfSl9ZnVuY3Rpb24gZm4odCxlLG4pe2xldCByPXt9O3JldHVybiB5dChlLm9iamVjdFN0b3JlTmFtZXMsMCkuZm9yRWFjaChzPT57bGV0IG89bi5vYmplY3RTdG9yZShzKSxhPW8ua2V5UGF0aCx1PXp0KFpuKGEpLGF8fFwiXCIsITEsITEsISFvLmF1dG9JbmNyZW1lbnQsYSYmdHlwZW9mIGEhPVwic3RyaW5nXCIsITApLGw9W107Zm9yKGxldCBkPTA7ZDxvLmluZGV4TmFtZXMubGVuZ3RoOysrZCl7bGV0IGM9by5pbmRleChvLmluZGV4TmFtZXNbZF0pO2E9Yy5rZXlQYXRoO3ZhciBoPXp0KGMubmFtZSxhLCEhYy51bmlxdWUsISFjLm11bHRpRW50cnksITEsYSYmdHlwZW9mIGEhPVwic3RyaW5nXCIsITEpO2wucHVzaChoKX1yW3NdPWVyKHMsdSxsKX0pLHJ9ZnVuY3Rpb24gdWkoe19ub3ZpcDp0fSxlLG4pe3QudmVybm89ZS52ZXJzaW9uLzEwO2xldCByPXQuX2RiU2NoZW1hPWZuKHQsZSxuKTt0Ll9zdG9yZU5hbWVzPXl0KGUub2JqZWN0U3RvcmVOYW1lcywwKSxodCh0LFt0Ll9hbGxUYWJsZXNdLE0ocikscil9ZnVuY3Rpb24gbGkodCxlKXtsZXQgbj1mbih0LHQuaWRiZGIsZSkscj10cihuLHQuX2RiU2NoZW1hKTtyZXR1cm4hKHIuYWRkLmxlbmd0aHx8ci5jaGFuZ2Uuc29tZShpPT5pLmFkZC5sZW5ndGh8fGkuY2hhbmdlLmxlbmd0aCkpfWZ1bmN0aW9uIFl0KHtfbm92aXA6dH0sZSxuKXtsZXQgcj1uLmRiLm9iamVjdFN0b3JlTmFtZXM7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDsrK2kpe2xldCBzPXJbaV0sbz1uLm9iamVjdFN0b3JlKHMpO3QuX2hhc0dldEFsbD1cImdldEFsbFwiaW4gbztmb3IobGV0IGE9MDthPG8uaW5kZXhOYW1lcy5sZW5ndGg7KythKXtsZXQgdT1vLmluZGV4TmFtZXNbYV0sbD1vLmluZGV4KHUpLmtleVBhdGgsaD10eXBlb2YgbD09XCJzdHJpbmdcIj9sOlwiW1wiK3l0KGwpLmpvaW4oXCIrXCIpK1wiXVwiO2lmKGVbc10pe2xldCBkPWVbc10uaWR4QnlOYW1lW2hdO2QmJihkLm5hbWU9dSxkZWxldGUgZVtzXS5pZHhCeU5hbWVbaF0sZVtzXS5pZHhCeU5hbWVbdV09ZCl9fX10eXBlb2YgbmF2aWdhdG9yPFwidVwiJiYvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhLyhDaHJvbWVcXC98RWRnZVxcLykvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJlAuV29ya2VyR2xvYmFsU2NvcGUmJlAgaW5zdGFuY2VvZiBQLldvcmtlckdsb2JhbFNjb3BlJiZbXS5jb25jYXQobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvU2FmYXJpXFwvKFxcZCopLykpWzFdPDYwNCYmKHQuX2hhc0dldEFsbD0hMSl9ZnVuY3Rpb24gY2kodCl7cmV0dXJuIHQuc3BsaXQoXCIsXCIpLm1hcCgoZSxuKT0+e2U9ZS50cmltKCk7bGV0IHI9ZS5yZXBsYWNlKC8oWyYqXXxcXCtcXCspL2csXCJcIiksaT0vXlxcWy8udGVzdChyKT9yLm1hdGNoKC9eXFxbKC4qKVxcXSQvKVsxXS5zcGxpdChcIitcIik6cjtyZXR1cm4genQocixpfHxudWxsLC9cXCYvLnRlc3QoZSksL1xcKi8udGVzdChlKSwvXFwrXFwrLy50ZXN0KGUpLGooaSksbj09PTApfSl9dmFyIFh0PWNsYXNze19wYXJzZVN0b3Jlc1NwZWMoZSxuKXtNKGUpLmZvckVhY2gocj0+e2lmKGVbcl0hPT1udWxsKXt2YXIgaT1jaShlW3JdKSxzPWkuc2hpZnQoKTtpZihzLm11bHRpKXRocm93IG5ldyBDLlNjaGVtYShcIlByaW1hcnkga2V5IGNhbm5vdCBiZSBtdWx0aS12YWx1ZWRcIik7aS5mb3JFYWNoKG89PntpZihvLmF1dG8pdGhyb3cgbmV3IEMuU2NoZW1hKFwiT25seSBwcmltYXJ5IGtleSBjYW4gYmUgbWFya2VkIGFzIGF1dG9JbmNyZW1lbnQgKCsrKVwiKTtpZighby5rZXlQYXRoKXRocm93IG5ldyBDLlNjaGVtYShcIkluZGV4IG11c3QgaGF2ZSBhIG5hbWUgYW5kIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmdcIil9KSxuW3JdPWVyKHIscyxpKX19KX1zdG9yZXMoZSl7bGV0IG49dGhpcy5kYjt0aGlzLl9jZmcuc3RvcmVzU291cmNlPXRoaXMuX2NmZy5zdG9yZXNTb3VyY2U/TCh0aGlzLl9jZmcuc3RvcmVzU291cmNlLGUpOmU7bGV0IHI9bi5fdmVyc2lvbnMsaT17fSxzPXt9O3JldHVybiByLmZvckVhY2gobz0+e0woaSxvLl9jZmcuc3RvcmVzU291cmNlKSxzPW8uX2NmZy5kYnNjaGVtYT17fSxvLl9wYXJzZVN0b3Jlc1NwZWMoaSxzKX0pLG4uX2RiU2NoZW1hPXMsV3Qobixbbi5fYWxsVGFibGVzLG4sbi5UcmFuc2FjdGlvbi5wcm90b3R5cGVdKSxodChuLFtuLl9hbGxUYWJsZXMsbixuLlRyYW5zYWN0aW9uLnByb3RvdHlwZSx0aGlzLl9jZmcudGFibGVzXSxNKHMpLHMpLG4uX3N0b3JlTmFtZXM9TShzKSx0aGlzfXVwZ3JhZGUoZSl7cmV0dXJuIHRoaXMuX2NmZy5jb250ZW50VXBncmFkZT1zbih0aGlzLl9jZmcuY29udGVudFVwZ3JhZGV8fFIsZSksdGhpc319O2Z1bmN0aW9uIGZpKHQpe3JldHVybiBZZShYdC5wcm90b3R5cGUsZnVuY3Rpb24obil7dGhpcy5kYj10LHRoaXMuX2NmZz17dmVyc2lvbjpuLHN0b3Jlc1NvdXJjZTpudWxsLGRic2NoZW1hOnt9LHRhYmxlczp7fSxjb250ZW50VXBncmFkZTpudWxsfX0pfWZ1bmN0aW9uIGhuKHQsZSl7bGV0IG49dC5fZGJOYW1lc0RCO3JldHVybiBufHwobj10Ll9kYk5hbWVzREI9bmV3IHVlKHZ0LHthZGRvbnM6W10saW5kZXhlZERCOnQsSURCS2V5UmFuZ2U6ZX0pLG4udmVyc2lvbigxKS5zdG9yZXMoe2RibmFtZXM6XCJuYW1lXCJ9KSksbi50YWJsZShcImRibmFtZXNcIil9ZnVuY3Rpb24gZG4odCl7cmV0dXJuIHQmJnR5cGVvZiB0LmRhdGFiYXNlcz09XCJmdW5jdGlvblwifWZ1bmN0aW9uIGhpKHtpbmRleGVkREI6dCxJREJLZXlSYW5nZTplfSl7cmV0dXJuIGRuKHQpP1Byb21pc2UucmVzb2x2ZSh0LmRhdGFiYXNlcygpKS50aGVuKG49Pm4ubWFwKHI9PnIubmFtZSkuZmlsdGVyKHI9PnIhPT12dCkpOmhuKHQsZSkudG9Db2xsZWN0aW9uKCkucHJpbWFyeUtleXMoKX1mdW5jdGlvbiBkaSh7aW5kZXhlZERCOnQsSURCS2V5UmFuZ2U6ZX0sbil7IWRuKHQpJiZuIT09dnQmJmhuKHQsZSkucHV0KHtuYW1lOm59KS5jYXRjaChSKX1mdW5jdGlvbiBwaSh7aW5kZXhlZERCOnQsSURCS2V5UmFuZ2U6ZX0sbil7IWRuKHQpJiZuIT09dnQmJmhuKHQsZSkuZGVsZXRlKG4pLmNhdGNoKFIpfWZ1bmN0aW9uIFF0KHQpe3JldHVybiBsZShmdW5jdGlvbigpe3JldHVybiBBLmxldFRocm91Z2g9ITAsdCgpfSl9ZnVuY3Rpb24geWkoKXt2YXIgdD0hbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEmJi9TYWZhcmlcXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvQ2hyb20oZXxpdW0pXFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO2lmKCF0fHwhaW5kZXhlZERCLmRhdGFiYXNlcylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7dmFyIGU7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4pe3ZhciByPWZ1bmN0aW9uKCl7cmV0dXJuIGluZGV4ZWREQi5kYXRhYmFzZXMoKS5maW5hbGx5KG4pfTtlPXNldEludGVydmFsKHIsMTAwKSxyKCl9KS5maW5hbGx5KGZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFySW50ZXJ2YWwoZSl9KX1mdW5jdGlvbiBtaSh0KXtsZXQgZT10Ll9zdGF0ZSx7aW5kZXhlZERCOm59PXQuX2RlcHM7aWYoZS5pc0JlaW5nT3BlbmVkfHx0LmlkYmRiKXJldHVybiBlLmRiUmVhZHlQcm9taXNlLnRoZW4oKCk9PmUuZGJPcGVuRXJyb3I/QihlLmRiT3BlbkVycm9yKTp0KTtxJiYoZS5vcGVuQ2FuY2VsbGVyLl9zdGFja0hvbGRlcj12ZSgpKSxlLmlzQmVpbmdPcGVuZWQ9ITAsZS5kYk9wZW5FcnJvcj1udWxsLGUub3BlbkNvbXBsZXRlPSExO2xldCByPWUub3BlbkNhbmNlbGxlcjtmdW5jdGlvbiBpKCl7aWYoZS5vcGVuQ2FuY2VsbGVyIT09cil0aHJvdyBuZXcgQy5EYXRhYmFzZUNsb3NlZChcImRiLm9wZW4oKSB3YXMgY2FuY2VsbGVkXCIpfWxldCBzPWUuZGJSZWFkeVJlc29sdmUsbz1udWxsLGE9ITE7cmV0dXJuIGIucmFjZShbciwodHlwZW9mIG5hdmlnYXRvcj5cInVcIj9iLnJlc29sdmUoKTp5aSgpKS50aGVuKCgpPT5uZXcgYigodSxsKT0+e2lmKGkoKSwhbil0aHJvdyBuZXcgQy5NaXNzaW5nQVBJO2xldCBoPXQubmFtZSxkPWUuYXV0b1NjaGVtYT9uLm9wZW4oaCk6bi5vcGVuKGgsTWF0aC5yb3VuZCh0LnZlcm5vKjEwKSk7aWYoIWQpdGhyb3cgbmV3IEMuTWlzc2luZ0FQSTtkLm9uZXJyb3I9RyhsKSxkLm9uYmxvY2tlZD1PKHQuX2ZpcmVPbkJsb2NrZWQpLGQub251cGdyYWRlbmVlZGVkPU8oYz0+e2lmKG89ZC50cmFuc2FjdGlvbixlLmF1dG9TY2hlbWEmJiF0Ll9vcHRpb25zLmFsbG93RW1wdHlEQil7ZC5vbmVycm9yPU5lLG8uYWJvcnQoKSxkLnJlc3VsdC5jbG9zZSgpO2xldCBnPW4uZGVsZXRlRGF0YWJhc2UoaCk7Zy5vbnN1Y2Nlc3M9Zy5vbmVycm9yPU8oKCk9PntsKG5ldyBDLk5vU3VjaERhdGFiYXNlKGBEYXRhYmFzZSAke2h9IGRvZXNudCBleGlzdGApKX0pfWVsc2V7by5vbmVycm9yPUcobCk7dmFyIGY9Yy5vbGRWZXJzaW9uPk1hdGgucG93KDIsNjIpPzA6Yy5vbGRWZXJzaW9uO2E9ZjwxLHQuX25vdmlwLmlkYmRiPWQucmVzdWx0LGlpKHQsZi8xMCxvLGwpfX0sbCksZC5vbnN1Y2Nlc3M9TygoKT0+e289bnVsbDtsZXQgYz10Ll9ub3ZpcC5pZGJkYj1kLnJlc3VsdCxmPXl0KGMub2JqZWN0U3RvcmVOYW1lcyk7aWYoZi5sZW5ndGg+MCl0cnl7bGV0IGc9Yy50cmFuc2FjdGlvbihxcihmKSxcInJlYWRvbmx5XCIpO2UuYXV0b1NjaGVtYT91aSh0LGMsZyk6KFl0KHQsdC5fZGJTY2hlbWEsZyksbGkodCxnKXx8Y29uc29sZS53YXJuKFwiRGV4aWUgU2NoZW1hRGlmZjogU2NoZW1hIHdhcyBleHRlbmRlZCB3aXRob3V0IGluY3JlYXNpbmcgdGhlIG51bWJlciBwYXNzZWQgdG8gZGIudmVyc2lvbigpLiBTb21lIHF1ZXJpZXMgbWF5IGZhaWwuXCIpKSxsbih0LGcpfWNhdGNoe31rZS5wdXNoKHQpLGMub252ZXJzaW9uY2hhbmdlPU8oZz0+e2UudmNGaXJlZD0hMCx0Lm9uKFwidmVyc2lvbmNoYW5nZVwiKS5maXJlKGcpfSksYy5vbmNsb3NlPU8oZz0+e3Qub24oXCJjbG9zZVwiKS5maXJlKGcpfSksYSYmZGkodC5fZGVwcyxoKSx1KCl9LGwpfSkpXSkudGhlbigoKT0+KGkoKSxlLm9uUmVhZHlCZWluZ0ZpcmVkPVtdLGIucmVzb2x2ZShRdCgoKT0+dC5vbi5yZWFkeS5maXJlKHQudmlwKSkpLnRoZW4oZnVuY3Rpb24gdSgpe2lmKGUub25SZWFkeUJlaW5nRmlyZWQubGVuZ3RoPjApe2xldCBsPWUub25SZWFkeUJlaW5nRmlyZWQucmVkdWNlKHNuLFIpO3JldHVybiBlLm9uUmVhZHlCZWluZ0ZpcmVkPVtdLGIucmVzb2x2ZShRdCgoKT0+bCh0LnZpcCkpKS50aGVuKHUpfX0pKSkuZmluYWxseSgoKT0+e2Uub25SZWFkeUJlaW5nRmlyZWQ9bnVsbCxlLmlzQmVpbmdPcGVuZWQ9ITF9KS50aGVuKCgpPT50KS5jYXRjaCh1PT57ZS5kYk9wZW5FcnJvcj11O3RyeXtvJiZvLmFib3J0KCl9Y2F0Y2h7fXJldHVybiByPT09ZS5vcGVuQ2FuY2VsbGVyJiZ0Ll9jbG9zZSgpLEIodSl9KS5maW5hbGx5KCgpPT57ZS5vcGVuQ29tcGxldGU9ITAscygpfSl9ZnVuY3Rpb24gR3QodCl7dmFyIGU9bz0+dC5uZXh0KG8pLG49bz0+dC50aHJvdyhvKSxyPXMoZSksaT1zKG4pO2Z1bmN0aW9uIHMobyl7cmV0dXJuIGE9Pnt2YXIgdT1vKGEpLGw9dS52YWx1ZTtyZXR1cm4gdS5kb25lP2w6IWx8fHR5cGVvZiBsLnRoZW4hPVwiZnVuY3Rpb25cIj9qKGwpP1Byb21pc2UuYWxsKGwpLnRoZW4ocixpKTpyKGwpOmwudGhlbihyLGkpfX1yZXR1cm4gcyhlKSgpfWZ1bmN0aW9uIGdpKHQsZSxuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO2lmKHI8Mil0aHJvdyBuZXcgQy5JbnZhbGlkQXJndW1lbnQoXCJUb28gZmV3IGFyZ3VtZW50c1wiKTtmb3IodmFyIGk9bmV3IEFycmF5KHItMSk7LS1yOylpW3ItMV09YXJndW1lbnRzW3JdO249aS5wb3AoKTt2YXIgcz1PbihpKTtyZXR1cm5bdCxzLG5dfWZ1bmN0aW9uIG5yKHQsZSxuLHIsaSl7cmV0dXJuIGIucmVzb2x2ZSgpLnRoZW4oKCk9PntsZXQgcz1BLnRyYW5zbGVzc3x8QSxvPXQuX2NyZWF0ZVRyYW5zYWN0aW9uKGUsbix0Ll9kYlNjaGVtYSxyKSxhPXt0cmFuczpvLHRyYW5zbGVzczpzfTtpZihyKW8uaWRidHJhbnM9ci5pZGJ0cmFucztlbHNlIHRyeXtvLmNyZWF0ZSgpLHQuX3N0YXRlLlBSMTM5OF9tYXhMb29wPTN9Y2F0Y2goZCl7cmV0dXJuIGQubmFtZT09PXJuLkludmFsaWRTdGF0ZSYmdC5pc09wZW4oKSYmLS10Ll9zdGF0ZS5QUjEzOThfbWF4TG9vcD4wPyhjb25zb2xlLndhcm4oXCJEZXhpZTogTmVlZCB0byByZW9wZW4gZGJcIiksdC5fY2xvc2UoKSx0Lm9wZW4oKS50aGVuKCgpPT5ucih0LGUsbixudWxsLGkpKSk6QihkKX1sZXQgdT10bihpKTt1JiZLZSgpO2xldCBsLGg9Yi5mb2xsb3coKCk9PntpZihsPWkuY2FsbChvLG8pLGwpaWYodSl7dmFyIGQ9aWUuYmluZChudWxsLG51bGwpO2wudGhlbihkLGQpfWVsc2UgdHlwZW9mIGwubmV4dD09XCJmdW5jdGlvblwiJiZ0eXBlb2YgbC50aHJvdz09XCJmdW5jdGlvblwiJiYobD1HdChsKSl9LGEpO3JldHVybihsJiZ0eXBlb2YgbC50aGVuPT1cImZ1bmN0aW9uXCI/Yi5yZXNvbHZlKGwpLnRoZW4oZD0+by5hY3RpdmU/ZDpCKG5ldyBDLlByZW1hdHVyZUNvbW1pdChcIlRyYW5zYWN0aW9uIGNvbW1pdHRlZCB0b28gZWFybHkuIFNlZSBodHRwOi8vYml0Lmx5LzJrZGNrTW5cIikpKTpoLnRoZW4oKCk9PmwpKS50aGVuKGQ9PihyJiZvLl9yZXNvbHZlKCksby5fY29tcGxldGlvbi50aGVuKCgpPT5kKSkpLmNhdGNoKGQ9PihvLl9yZWplY3QoZCksQihkKSkpfSl9ZnVuY3Rpb24gSmUodCxlLG4pe2xldCByPWoodCk/dC5zbGljZSgpOlt0XTtmb3IobGV0IGk9MDtpPG47KytpKXIucHVzaChlKTtyZXR1cm4gcn1mdW5jdGlvbiB2aSh0KXtyZXR1cm57Li4udCx0YWJsZShlKXtsZXQgbj10LnRhYmxlKGUpLHtzY2hlbWE6cn09bixpPXt9LHM9W107ZnVuY3Rpb24gbyhjLGYsZyl7bGV0IHA9T2UoYyksdj1pW3BdPWlbcF18fFtdLHk9Yz09bnVsbD8wOnR5cGVvZiBjPT1cInN0cmluZ1wiPzE6Yy5sZW5ndGgsXz1mPjAsdz17Li4uZyxpc1ZpcnR1YWw6XyxrZXlUYWlsOmYsa2V5TGVuZ3RoOnksZXh0cmFjdEtleTpVdChjKSx1bmlxdWU6IV8mJmcudW5pcXVlfTtpZih2LnB1c2godyksdy5pc1ByaW1hcnlLZXl8fHMucHVzaCh3KSx5PjEpe2xldCBtPXk9PT0yP2NbMF06Yy5zbGljZSgwLHktMSk7byhtLGYrMSxnKX1yZXR1cm4gdi5zb3J0KChtLHgpPT5tLmtleVRhaWwteC5rZXlUYWlsKSx3fWxldCBhPW8oci5wcmltYXJ5S2V5LmtleVBhdGgsMCxyLnByaW1hcnlLZXkpO2lbXCI6aWRcIl09W2FdO2ZvcihsZXQgYyBvZiByLmluZGV4ZXMpbyhjLmtleVBhdGgsMCxjKTtmdW5jdGlvbiB1KGMpe2xldCBmPWlbT2UoYyldO3JldHVybiBmJiZmWzBdfWZ1bmN0aW9uIGwoYyxmKXtyZXR1cm57dHlwZTpjLnR5cGU9PT0xPzI6Yy50eXBlLGxvd2VyOkplKGMubG93ZXIsYy5sb3dlck9wZW4/dC5NQVhfS0VZOnQuTUlOX0tFWSxmKSxsb3dlck9wZW46ITAsdXBwZXI6SmUoYy51cHBlcixjLnVwcGVyT3Blbj90Lk1JTl9LRVk6dC5NQVhfS0VZLGYpLHVwcGVyT3BlbjohMH19ZnVuY3Rpb24gaChjKXtsZXQgZj1jLnF1ZXJ5LmluZGV4O3JldHVybiBmLmlzVmlydHVhbD97Li4uYyxxdWVyeTp7aW5kZXg6ZixyYW5nZTpsKGMucXVlcnkucmFuZ2UsZi5rZXlUYWlsKX19OmN9cmV0dXJuey4uLm4sc2NoZW1hOnsuLi5yLHByaW1hcnlLZXk6YSxpbmRleGVzOnMsZ2V0SW5kZXhCeUtleVBhdGg6dX0sY291bnQoYyl7cmV0dXJuIG4uY291bnQoaChjKSl9LHF1ZXJ5KGMpe3JldHVybiBuLnF1ZXJ5KGgoYykpfSxvcGVuQ3Vyc29yKGMpe2xldHtrZXlUYWlsOmYsaXNWaXJ0dWFsOmcsa2V5TGVuZ3RoOnB9PWMucXVlcnkuaW5kZXg7aWYoIWcpcmV0dXJuIG4ub3BlbkN1cnNvcihjKTtmdW5jdGlvbiB2KHkpe2Z1bmN0aW9uIF8obSl7bSE9bnVsbD95LmNvbnRpbnVlKEplKG0sYy5yZXZlcnNlP3QuTUFYX0tFWTp0Lk1JTl9LRVksZikpOmMudW5pcXVlP3kuY29udGludWUoeS5rZXkuc2xpY2UoMCxwKS5jb25jYXQoYy5yZXZlcnNlP3QuTUlOX0tFWTp0Lk1BWF9LRVksZikpOnkuY29udGludWUoKX1yZXR1cm4gT2JqZWN0LmNyZWF0ZSh5LHtjb250aW51ZTp7dmFsdWU6X30sY29udGludWVQcmltYXJ5S2V5Ont2YWx1ZShtLHgpe3kuY29udGludWVQcmltYXJ5S2V5KEplKG0sdC5NQVhfS0VZLGYpLHgpfX0scHJpbWFyeUtleTp7Z2V0KCl7cmV0dXJuIHkucHJpbWFyeUtleX19LGtleTp7Z2V0KCl7bGV0IG09eS5rZXk7cmV0dXJuIHA9PT0xP21bMF06bS5zbGljZSgwLHApfX0sdmFsdWU6e2dldCgpe3JldHVybiB5LnZhbHVlfX19KX1yZXR1cm4gbi5vcGVuQ3Vyc29yKGgoYykpLnRoZW4oeT0+eSYmdih5KSl9fX19fXZhciBfaT17c3RhY2s6XCJkYmNvcmVcIixuYW1lOlwiVmlydHVhbEluZGV4TWlkZGxld2FyZVwiLGxldmVsOjEsY3JlYXRlOnZpfTtmdW5jdGlvbiBwbih0LGUsbixyKXtyZXR1cm4gbj1ufHx7fSxyPXJ8fFwiXCIsTSh0KS5mb3JFYWNoKGk9PntpZighVyhlLGkpKW5bcitpXT12b2lkIDA7ZWxzZXt2YXIgcz10W2ldLG89ZVtpXTtpZih0eXBlb2Ygcz09XCJvYmplY3RcIiYmdHlwZW9mIG89PVwib2JqZWN0XCImJnMmJm8pe2xldCBhPUt0KHMpLHU9S3Qobyk7YSE9PXU/bltyK2ldPWVbaV06YT09PVwiT2JqZWN0XCI/cG4ocyxvLG4scitpK1wiLlwiKTpzIT09byYmKG5bcitpXT1lW2ldKX1lbHNlIHMhPT1vJiYobltyK2ldPWVbaV0pfX0pLE0oZSkuZm9yRWFjaChpPT57Vyh0LGkpfHwobltyK2ldPWVbaV0pfSksbn1mdW5jdGlvbiB3aSh0LGUpe3JldHVybiBlLnR5cGU9PT1cImRlbGV0ZVwiP2Uua2V5czplLmtleXN8fGUudmFsdWVzLm1hcCh0LmV4dHJhY3RLZXkpfXZhciBiaT17c3RhY2s6XCJkYmNvcmVcIixuYW1lOlwiSG9va3NNaWRkbGV3YXJlXCIsbGV2ZWw6MixjcmVhdGU6dD0+KHsuLi50LHRhYmxlKGUpe2xldCBuPXQudGFibGUoZSkse3ByaW1hcnlLZXk6cn09bi5zY2hlbWE7cmV0dXJuey4uLm4sbXV0YXRlKHMpe2xldCBvPUEudHJhbnMse2RlbGV0aW5nOmEsY3JlYXRpbmc6dSx1cGRhdGluZzpsfT1vLnRhYmxlKGUpLmhvb2s7c3dpdGNoKHMudHlwZSl7Y2FzZVwiYWRkXCI6aWYodS5maXJlPT09UilicmVhaztyZXR1cm4gby5fcHJvbWlzZShcInJlYWR3cml0ZVwiLCgpPT5oKHMpLCEwKTtjYXNlXCJwdXRcIjppZih1LmZpcmU9PT1SJiZsLmZpcmU9PT1SKWJyZWFrO3JldHVybiBvLl9wcm9taXNlKFwicmVhZHdyaXRlXCIsKCk9PmgocyksITApO2Nhc2VcImRlbGV0ZVwiOmlmKGEuZmlyZT09PVIpYnJlYWs7cmV0dXJuIG8uX3Byb21pc2UoXCJyZWFkd3JpdGVcIiwoKT0+aChzKSwhMCk7Y2FzZVwiZGVsZXRlUmFuZ2VcIjppZihhLmZpcmU9PT1SKWJyZWFrO3JldHVybiBvLl9wcm9taXNlKFwicmVhZHdyaXRlXCIsKCk9PmQocyksITApfXJldHVybiBuLm11dGF0ZShzKTtmdW5jdGlvbiBoKGYpe2xldCBnPUEudHJhbnMscD1mLmtleXN8fHdpKHIsZik7aWYoIXApdGhyb3cgbmV3IEVycm9yKFwiS2V5cyBtaXNzaW5nXCIpO3JldHVybiBmPWYudHlwZT09PVwiYWRkXCJ8fGYudHlwZT09PVwicHV0XCI/ey4uLmYsa2V5czpwfTp7Li4uZn0sZi50eXBlIT09XCJkZWxldGVcIiYmKGYudmFsdWVzPVsuLi5mLnZhbHVlc10pLGYua2V5cyYmKGYua2V5cz1bLi4uZi5rZXlzXSkseGkobixmLHApLnRoZW4odj0+e2xldCB5PXAubWFwKChfLHcpPT57bGV0IG09dlt3XSx4PXtvbmVycm9yOm51bGwsb25zdWNjZXNzOm51bGx9O2lmKGYudHlwZT09PVwiZGVsZXRlXCIpYS5maXJlLmNhbGwoeCxfLG0sZyk7ZWxzZSBpZihmLnR5cGU9PT1cImFkZFwifHxtPT09dm9pZCAwKXtsZXQgRT11LmZpcmUuY2FsbCh4LF8sZi52YWx1ZXNbd10sZyk7Xz09bnVsbCYmRSE9bnVsbCYmKF89RSxmLmtleXNbd109XyxyLm91dGJvdW5kfHxRKGYudmFsdWVzW3ddLHIua2V5UGF0aCxfKSl9ZWxzZXtsZXQgRT1wbihtLGYudmFsdWVzW3ddKSxTPWwuZmlyZS5jYWxsKHgsRSxfLG0sZyk7aWYoUyl7bGV0IEs9Zi52YWx1ZXNbd107T2JqZWN0LmtleXMoUykuZm9yRWFjaChJPT57VyhLLEkpP0tbSV09U1tJXTpRKEssSSxTW0ldKX0pfX1yZXR1cm4geH0pO3JldHVybiBuLm11dGF0ZShmKS50aGVuKCh7ZmFpbHVyZXM6XyxyZXN1bHRzOncsbnVtRmFpbHVyZXM6bSxsYXN0UmVzdWx0Onh9KT0+e2ZvcihsZXQgRT0wO0U8cC5sZW5ndGg7KytFKXtsZXQgUz13P3dbRV06cFtFXSxLPXlbRV07Uz09bnVsbD9LLm9uZXJyb3ImJksub25lcnJvcihfW0VdKTpLLm9uc3VjY2VzcyYmSy5vbnN1Y2Nlc3MoZi50eXBlPT09XCJwdXRcIiYmdltFXT9mLnZhbHVlc1tFXTpTKX1yZXR1cm57ZmFpbHVyZXM6XyxyZXN1bHRzOncsbnVtRmFpbHVyZXM6bSxsYXN0UmVzdWx0Onh9fSkuY2F0Y2goXz0+KHkuZm9yRWFjaCh3PT53Lm9uZXJyb3ImJncub25lcnJvcihfKSksUHJvbWlzZS5yZWplY3QoXykpKX0pfWZ1bmN0aW9uIGQoZil7cmV0dXJuIGMoZi50cmFucyxmLnJhbmdlLDFlNCl9ZnVuY3Rpb24gYyhmLGcscCl7cmV0dXJuIG4ucXVlcnkoe3RyYW5zOmYsdmFsdWVzOiExLHF1ZXJ5OntpbmRleDpyLHJhbmdlOmd9LGxpbWl0OnB9KS50aGVuKCh7cmVzdWx0OnZ9KT0+aCh7dHlwZTpcImRlbGV0ZVwiLGtleXM6dix0cmFuczpmfSkudGhlbih5PT55Lm51bUZhaWx1cmVzPjA/UHJvbWlzZS5yZWplY3QoeS5mYWlsdXJlc1swXSk6di5sZW5ndGg8cD97ZmFpbHVyZXM6W10sbnVtRmFpbHVyZXM6MCxsYXN0UmVzdWx0OnZvaWQgMH06YyhmLHsuLi5nLGxvd2VyOnZbdi5sZW5ndGgtMV0sbG93ZXJPcGVuOiEwfSxwKSkpfX19fX0pfTtmdW5jdGlvbiB4aSh0LGUsbil7cmV0dXJuIGUudHlwZT09PVwiYWRkXCI/UHJvbWlzZS5yZXNvbHZlKFtdKTp0LmdldE1hbnkoe3RyYW5zOmUudHJhbnMsa2V5czpuLGNhY2hlOlwiaW1tdXRhYmxlXCJ9KX1mdW5jdGlvbiBycih0LGUsbil7dHJ5e2lmKCFlfHxlLmtleXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybiBudWxsO2xldCByPVtdO2ZvcihsZXQgaT0wLHM9MDtpPGUua2V5cy5sZW5ndGgmJnM8dC5sZW5ndGg7KytpKVYoZS5rZXlzW2ldLHRbc10pPT09MCYmKHIucHVzaChuPyRlKGUudmFsdWVzW2ldKTplLnZhbHVlc1tpXSksKytzKTtyZXR1cm4gci5sZW5ndGg9PT10Lmxlbmd0aD9yOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fXZhciBFaT17c3RhY2s6XCJkYmNvcmVcIixsZXZlbDotMSxjcmVhdGU6dD0+KHt0YWJsZTplPT57bGV0IG49dC50YWJsZShlKTtyZXR1cm57Li4ubixnZXRNYW55OnI9PntpZighci5jYWNoZSlyZXR1cm4gbi5nZXRNYW55KHIpO2xldCBpPXJyKHIua2V5cyxyLnRyYW5zLl9jYWNoZSxyLmNhY2hlPT09XCJjbG9uZVwiKTtyZXR1cm4gaT9iLnJlc29sdmUoaSk6bi5nZXRNYW55KHIpLnRoZW4ocz0+KHIudHJhbnMuX2NhY2hlPXtrZXlzOnIua2V5cyx2YWx1ZXM6ci5jYWNoZT09PVwiY2xvbmVcIj8kZShzKTpzfSxzKSl9LG11dGF0ZTpyPT4oci50eXBlIT09XCJhZGRcIiYmKHIudHJhbnMuX2NhY2hlPW51bGwpLG4ubXV0YXRlKHIpKX19fSl9O2Z1bmN0aW9uIHluKHQpe3JldHVybiEoXCJmcm9tXCJpbiB0KX12YXIgWj1mdW5jdGlvbih0LGUpe2lmKHRoaXMpTCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/e2Q6MSxmcm9tOnQsdG86YXJndW1lbnRzLmxlbmd0aD4xP2U6dH06e2Q6MH0pO2Vsc2V7bGV0IG49bmV3IFo7cmV0dXJuIHQmJlwiZFwiaW4gdCYmTChuLHQpLG59fTtTZShaLnByb3RvdHlwZSx7YWRkKHQpe3JldHVybiBkdCh0aGlzLHQpLHRoaXN9LGFkZEtleSh0KXtyZXR1cm4gTGUodGhpcyx0LHQpLHRoaXN9LGFkZEtleXModCl7cmV0dXJuIHQuZm9yRWFjaChlPT5MZSh0aGlzLGUsZSkpLHRoaXN9LFtUdF0oKXtyZXR1cm4gcXQodGhpcyl9fSk7ZnVuY3Rpb24gTGUodCxlLG4pe2xldCByPVYoZSxuKTtpZihpc05hTihyKSlyZXR1cm47aWYocj4wKXRocm93IFJhbmdlRXJyb3IoKTtpZih5bih0KSlyZXR1cm4gTCh0LHtmcm9tOmUsdG86bixkOjF9KTtsZXQgaT10Lmwscz10LnI7aWYoVihuLHQuZnJvbSk8MClyZXR1cm4gaT9MZShpLGUsbik6dC5sPXtmcm9tOmUsdG86bixkOjEsbDpudWxsLHI6bnVsbH0sS24odCk7aWYoVihlLHQudG8pPjApcmV0dXJuIHM/TGUocyxlLG4pOnQucj17ZnJvbTplLHRvOm4sZDoxLGw6bnVsbCxyOm51bGx9LEtuKHQpO1YoZSx0LmZyb20pPDAmJih0LmZyb209ZSx0Lmw9bnVsbCx0LmQ9cz9zLmQrMToxKSxWKG4sdC50byk+MCYmKHQudG89bix0LnI9bnVsbCx0LmQ9dC5sP3QubC5kKzE6MSk7bGV0IG89IXQucjtpJiYhdC5sJiZkdCh0LGkpLHMmJm8mJmR0KHQscyl9ZnVuY3Rpb24gZHQodCxlKXtmdW5jdGlvbiBuKHIse2Zyb206aSx0bzpzLGw6byxyOmF9KXtMZShyLGkscyksbyYmbihyLG8pLGEmJm4ocixhKX15bihlKXx8bih0LGUpfWZ1bmN0aW9uIFNpKHQsZSl7bGV0IG49cXQoZSkscj1uLm5leHQoKTtpZihyLmRvbmUpcmV0dXJuITE7bGV0IGk9ci52YWx1ZSxzPXF0KHQpLG89cy5uZXh0KGkuZnJvbSksYT1vLnZhbHVlO2Zvcig7IXIuZG9uZSYmIW8uZG9uZTspe2lmKFYoYS5mcm9tLGkudG8pPD0wJiZWKGEudG8saS5mcm9tKT49MClyZXR1cm4hMDtWKGkuZnJvbSxhLmZyb20pPDA/aT0ocj1uLm5leHQoYS5mcm9tKSkudmFsdWU6YT0obz1zLm5leHQoaS5mcm9tKSkudmFsdWV9cmV0dXJuITF9ZnVuY3Rpb24gcXQodCl7bGV0IGU9eW4odCk/bnVsbDp7czowLG46dH07cmV0dXJue25leHQobil7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4wO2Zvcig7ZTspc3dpdGNoKGUucyl7Y2FzZSAwOmlmKGUucz0xLHIpZm9yKDtlLm4ubCYmVihuLGUubi5mcm9tKTwwOyllPXt1cDplLG46ZS5uLmwsczoxfTtlbHNlIGZvcig7ZS5uLmw7KWU9e3VwOmUsbjplLm4ubCxzOjF9O2Nhc2UgMTppZihlLnM9Miwhcnx8VihuLGUubi50byk8PTApcmV0dXJue3ZhbHVlOmUubixkb25lOiExfTtjYXNlIDI6aWYoZS5uLnIpe2Uucz0zLGU9e3VwOmUsbjplLm4ucixzOjB9O2NvbnRpbnVlfWNhc2UgMzplPWUudXB9cmV0dXJue2RvbmU6ITB9fX19ZnVuY3Rpb24gS24odCl7dmFyIGUsbjtsZXQgcj0oKChlPXQucik9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLmQpfHwwKS0oKChuPXQubCk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLmQpfHwwKSxpPXI+MT9cInJcIjpyPC0xP1wibFwiOlwiXCI7aWYoaSl7bGV0IHM9aT09PVwiclwiP1wibFwiOlwiclwiLG89ey4uLnR9LGE9dFtpXTt0LmZyb209YS5mcm9tLHQudG89YS50byx0W2ldPWFbaV0sb1tpXT1hW3NdLHRbc109byxvLmQ9VG4obyl9dC5kPVRuKHQpfWZ1bmN0aW9uIFRuKHtyOnQsbDplfSl7cmV0dXJuKHQ/ZT9NYXRoLm1heCh0LmQsZS5kKTp0LmQ6ZT9lLmQ6MCkrMX12YXIgQWk9e3N0YWNrOlwiZGJjb3JlXCIsbGV2ZWw6MCxjcmVhdGU6dD0+e2xldCBlPXQuc2NoZW1hLm5hbWUsbj1uZXcgWih0Lk1JTl9LRVksdC5NQVhfS0VZKTtyZXR1cm57Li4udCx0YWJsZTpyPT57bGV0IGk9dC50YWJsZShyKSx7c2NoZW1hOnN9PWkse3ByaW1hcnlLZXk6b309cyx7ZXh0cmFjdEtleTphLG91dGJvdW5kOnV9PW8sbD17Li4uaSxtdXRhdGU6Yz0+e2xldCBmPWMudHJhbnMsZz1mLm11dGF0ZWRQYXJ0c3x8KGYubXV0YXRlZFBhcnRzPXt9KSxwPUU9PntsZXQgUz1gaWRiOi8vJHtlfS8ke3J9LyR7RX1gO3JldHVybiBnW1NdfHwoZ1tTXT1uZXcgWil9LHY9cChcIlwiKSx5PXAoXCI6ZGVsc1wiKSx7dHlwZTpffT1jLFt3LG1dPWMudHlwZT09PVwiZGVsZXRlUmFuZ2VcIj9bYy5yYW5nZV06Yy50eXBlPT09XCJkZWxldGVcIj9bYy5rZXlzXTpjLnZhbHVlcy5sZW5ndGg8NTA/W1tdLGMudmFsdWVzXTpbXSx4PWMudHJhbnMuX2NhY2hlO3JldHVybiBpLm11dGF0ZShjKS50aGVuKEU9PntpZihqKHcpKXtfIT09XCJkZWxldGVcIiYmKHc9RS5yZXN1bHRzKSx2LmFkZEtleXModyk7bGV0IFM9cnIodyx4KTshUyYmXyE9PVwiYWRkXCImJnkuYWRkS2V5cyh3KSwoU3x8bSkmJkNpKHAscyxTLG0pfWVsc2UgaWYodyl7bGV0IFM9e2Zyb206dy5sb3dlcix0bzp3LnVwcGVyfTt5LmFkZChTKSx2LmFkZChTKX1lbHNlIHYuYWRkKG4pLHkuYWRkKG4pLHMuaW5kZXhlcy5mb3JFYWNoKFM9PnAoUy5uYW1lKS5hZGQobikpO3JldHVybiBFfSl9fSxoPSh7cXVlcnk6e2luZGV4OmMscmFuZ2U6Zn19KT0+e3ZhciBnLHA7cmV0dXJuW2MsbmV3IFooKGc9Zi5sb3dlcikhPT1udWxsJiZnIT09dm9pZCAwP2c6dC5NSU5fS0VZLChwPWYudXBwZXIpIT09bnVsbCYmcCE9PXZvaWQgMD9wOnQuTUFYX0tFWSldfSxkPXtnZXQ6Yz0+W28sbmV3IFooYy5rZXkpXSxnZXRNYW55OmM9PltvLG5ldyBaKCkuYWRkS2V5cyhjLmtleXMpXSxjb3VudDpoLHF1ZXJ5Omgsb3BlbkN1cnNvcjpofTtyZXR1cm4gTShkKS5mb3JFYWNoKGM9PntsW2NdPWZ1bmN0aW9uKGYpe2xldHtzdWJzY3I6Z309QTtpZihnKXtsZXQgcD1tPT57bGV0IHg9YGlkYjovLyR7ZX0vJHtyfS8ke219YDtyZXR1cm4gZ1t4XXx8KGdbeF09bmV3IFopfSx2PXAoXCJcIikseT1wKFwiOmRlbHNcIiksW18sd109ZFtjXShmKTtpZihwKF8ubmFtZXx8XCJcIikuYWRkKHcpLCFfLmlzUHJpbWFyeUtleSlpZihjPT09XCJjb3VudFwiKXkuYWRkKG4pO2Vsc2V7bGV0IG09Yz09PVwicXVlcnlcIiYmdSYmZi52YWx1ZXMmJmkucXVlcnkoey4uLmYsdmFsdWVzOiExfSk7cmV0dXJuIGlbY10uYXBwbHkodGhpcyxhcmd1bWVudHMpLnRoZW4oeD0+e2lmKGM9PT1cInF1ZXJ5XCIpe2lmKHUmJmYudmFsdWVzKXJldHVybiBtLnRoZW4oKHtyZXN1bHQ6U30pPT4odi5hZGRLZXlzKFMpLHgpKTtsZXQgRT1mLnZhbHVlcz94LnJlc3VsdC5tYXAoYSk6eC5yZXN1bHQ7Zi52YWx1ZXM/di5hZGRLZXlzKEUpOnkuYWRkS2V5cyhFKX1lbHNlIGlmKGM9PT1cIm9wZW5DdXJzb3JcIil7bGV0IEU9eCxTPWYudmFsdWVzO3JldHVybiBFJiZPYmplY3QuY3JlYXRlKEUse2tleTp7Z2V0KCl7cmV0dXJuIHkuYWRkS2V5KEUucHJpbWFyeUtleSksRS5rZXl9fSxwcmltYXJ5S2V5OntnZXQoKXtsZXQgSz1FLnByaW1hcnlLZXk7cmV0dXJuIHkuYWRkS2V5KEspLEt9fSx2YWx1ZTp7Z2V0KCl7cmV0dXJuIFMmJnYuYWRkS2V5KEUucHJpbWFyeUtleSksRS52YWx1ZX19fSl9cmV0dXJuIHh9KX19cmV0dXJuIGlbY10uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pLGx9fX19O2Z1bmN0aW9uIENpKHQsZSxuLHIpe2Z1bmN0aW9uIGkocyl7bGV0IG89dChzLm5hbWV8fFwiXCIpO2Z1bmN0aW9uIGEobCl7cmV0dXJuIGwhPW51bGw/cy5leHRyYWN0S2V5KGwpOm51bGx9bGV0IHU9bD0+cy5tdWx0aUVudHJ5JiZqKGwpP2wuZm9yRWFjaChoPT5vLmFkZEtleShoKSk6by5hZGRLZXkobCk7KG58fHIpLmZvckVhY2goKGwsaCk9PntsZXQgZD1uJiZhKG5baF0pLGM9ciYmYShyW2hdKTtWKGQsYykhPT0wJiYoZCE9bnVsbCYmdShkKSxjIT1udWxsJiZ1KGMpKX0pfWUuaW5kZXhlcy5mb3JFYWNoKGkpfXZhciB1ZT1jbGFzc3tjb25zdHJ1Y3RvcihlLG4pe3RoaXMuX21pZGRsZXdhcmVzPXt9LHRoaXMudmVybm89MDtsZXQgcj11ZS5kZXBlbmRlbmNpZXM7dGhpcy5fb3B0aW9ucz1uPXthZGRvbnM6dWUuYWRkb25zLGF1dG9PcGVuOiEwLGluZGV4ZWREQjpyLmluZGV4ZWREQixJREJLZXlSYW5nZTpyLklEQktleVJhbmdlLC4uLm59LHRoaXMuX2RlcHM9e2luZGV4ZWREQjpuLmluZGV4ZWREQixJREJLZXlSYW5nZTpuLklEQktleVJhbmdlfTtsZXR7YWRkb25zOml9PW47dGhpcy5fZGJTY2hlbWE9e30sdGhpcy5fdmVyc2lvbnM9W10sdGhpcy5fc3RvcmVOYW1lcz1bXSx0aGlzLl9hbGxUYWJsZXM9e30sdGhpcy5pZGJkYj1udWxsLHRoaXMuX25vdmlwPXRoaXM7bGV0IHM9e2RiT3BlbkVycm9yOm51bGwsaXNCZWluZ09wZW5lZDohMSxvblJlYWR5QmVpbmdGaXJlZDpudWxsLG9wZW5Db21wbGV0ZTohMSxkYlJlYWR5UmVzb2x2ZTpSLGRiUmVhZHlQcm9taXNlOm51bGwsY2FuY2VsT3BlbjpSLG9wZW5DYW5jZWxsZXI6bnVsbCxhdXRvU2NoZW1hOiEwLFBSMTM5OF9tYXhMb29wOjN9O3MuZGJSZWFkeVByb21pc2U9bmV3IGIobz0+e3MuZGJSZWFkeVJlc29sdmU9b30pLHMub3BlbkNhbmNlbGxlcj1uZXcgYigobyxhKT0+e3MuY2FuY2VsT3Blbj1hfSksdGhpcy5fc3RhdGU9cyx0aGlzLm5hbWU9ZSx0aGlzLm9uPUhlKHRoaXMsXCJwb3B1bGF0ZVwiLFwiYmxvY2tlZFwiLFwidmVyc2lvbmNoYW5nZVwiLFwiY2xvc2VcIix7cmVhZHk6W3NuLFJdfSksdGhpcy5vbi5yZWFkeS5zdWJzY3JpYmU9RG4odGhpcy5vbi5yZWFkeS5zdWJzY3JpYmUsbz0+KGEsdSk9Pnt1ZS52aXAoKCk9PntsZXQgbD10aGlzLl9zdGF0ZTtpZihsLm9wZW5Db21wbGV0ZSlsLmRiT3BlbkVycm9yfHxiLnJlc29sdmUoKS50aGVuKGEpLHUmJm8oYSk7ZWxzZSBpZihsLm9uUmVhZHlCZWluZ0ZpcmVkKWwub25SZWFkeUJlaW5nRmlyZWQucHVzaChhKSx1JiZvKGEpO2Vsc2V7byhhKTtsZXQgaD10aGlzO3V8fG8oZnVuY3Rpb24gZCgpe2gub24ucmVhZHkudW5zdWJzY3JpYmUoYSksaC5vbi5yZWFkeS51bnN1YnNjcmliZShkKX0pfX0pfSksdGhpcy5Db2xsZWN0aW9uPXpyKHRoaXMpLHRoaXMuVGFibGU9anIodGhpcyksdGhpcy5UcmFuc2FjdGlvbj1Hcih0aGlzKSx0aGlzLlZlcnNpb249ZmkodGhpcyksdGhpcy5XaGVyZUNsYXVzZT1Rcih0aGlzKSx0aGlzLm9uKFwidmVyc2lvbmNoYW5nZVwiLG89PntvLm5ld1ZlcnNpb24+MD9jb25zb2xlLndhcm4oYEFub3RoZXIgY29ubmVjdGlvbiB3YW50cyB0byB1cGdyYWRlIGRhdGFiYXNlICcke3RoaXMubmFtZX0nLiBDbG9zaW5nIGRiIG5vdyB0byByZXN1bWUgdGhlIHVwZ3JhZGUuYCk6Y29uc29sZS53YXJuKGBBbm90aGVyIGNvbm5lY3Rpb24gd2FudHMgdG8gZGVsZXRlIGRhdGFiYXNlICcke3RoaXMubmFtZX0nLiBDbG9zaW5nIGRiIG5vdyB0byByZXN1bWUgdGhlIGRlbGV0ZSByZXF1ZXN0LmApLHRoaXMuY2xvc2UoKX0pLHRoaXMub24oXCJibG9ja2VkXCIsbz0+eyFvLm5ld1ZlcnNpb258fG8ubmV3VmVyc2lvbjxvLm9sZFZlcnNpb24/Y29uc29sZS53YXJuKGBEZXhpZS5kZWxldGUoJyR7dGhpcy5uYW1lfScpIHdhcyBibG9ja2VkYCk6Y29uc29sZS53YXJuKGBVcGdyYWRlICcke3RoaXMubmFtZX0nIGJsb2NrZWQgYnkgb3RoZXIgY29ubmVjdGlvbiBob2xkaW5nIHZlcnNpb24gJHtvLm9sZFZlcnNpb24vMTB9YCl9KSx0aGlzLl9tYXhLZXk9VmUobi5JREJLZXlSYW5nZSksdGhpcy5fY3JlYXRlVHJhbnNhY3Rpb249KG8sYSx1LGwpPT5uZXcgdGhpcy5UcmFuc2FjdGlvbihvLGEsdSx0aGlzLl9vcHRpb25zLmNocm9tZVRyYW5zYWN0aW9uRHVyYWJpbGl0eSxsKSx0aGlzLl9maXJlT25CbG9ja2VkPW89Pnt0aGlzLm9uKFwiYmxvY2tlZFwiKS5maXJlKG8pLGtlLmZpbHRlcihhPT5hLm5hbWU9PT10aGlzLm5hbWUmJmEhPT10aGlzJiYhYS5fc3RhdGUudmNGaXJlZCkubWFwKGE9PmEub24oXCJ2ZXJzaW9uY2hhbmdlXCIpLmZpcmUobykpfSx0aGlzLnVzZShfaSksdGhpcy51c2UoYmkpLHRoaXMudXNlKEFpKSx0aGlzLnVzZShFaSksdGhpcy52aXA9T2JqZWN0LmNyZWF0ZSh0aGlzLHtfdmlwOnt2YWx1ZTohMH19KSxpLmZvckVhY2gobz0+byh0aGlzKSl9dmVyc2lvbihlKXtpZihpc05hTihlKXx8ZTwuMSl0aHJvdyBuZXcgQy5UeXBlKFwiR2l2ZW4gdmVyc2lvbiBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXJcIik7aWYoZT1NYXRoLnJvdW5kKGUqMTApLzEwLHRoaXMuaWRiZGJ8fHRoaXMuX3N0YXRlLmlzQmVpbmdPcGVuZWQpdGhyb3cgbmV3IEMuU2NoZW1hKFwiQ2Fubm90IGFkZCB2ZXJzaW9uIHdoZW4gZGF0YWJhc2UgaXMgb3BlblwiKTt0aGlzLnZlcm5vPU1hdGgubWF4KHRoaXMudmVybm8sZSk7bGV0IG49dGhpcy5fdmVyc2lvbnM7dmFyIHI9bi5maWx0ZXIoaT0+aS5fY2ZnLnZlcnNpb249PT1lKVswXTtyZXR1cm4gcnx8KHI9bmV3IHRoaXMuVmVyc2lvbihlKSxuLnB1c2gociksbi5zb3J0KHJpKSxyLnN0b3Jlcyh7fSksdGhpcy5fc3RhdGUuYXV0b1NjaGVtYT0hMSxyKX1fd2hlblJlYWR5KGUpe3JldHVybiB0aGlzLmlkYmRiJiYodGhpcy5fc3RhdGUub3BlbkNvbXBsZXRlfHxBLmxldFRocm91Z2h8fHRoaXMuX3ZpcCk/ZSgpOm5ldyBiKChuLHIpPT57aWYodGhpcy5fc3RhdGUub3BlbkNvbXBsZXRlKXJldHVybiByKG5ldyBDLkRhdGFiYXNlQ2xvc2VkKHRoaXMuX3N0YXRlLmRiT3BlbkVycm9yKSk7aWYoIXRoaXMuX3N0YXRlLmlzQmVpbmdPcGVuZWQpe2lmKCF0aGlzLl9vcHRpb25zLmF1dG9PcGVuKXtyKG5ldyBDLkRhdGFiYXNlQ2xvc2VkKTtyZXR1cm59dGhpcy5vcGVuKCkuY2F0Y2goUil9dGhpcy5fc3RhdGUuZGJSZWFkeVByb21pc2UudGhlbihuLHIpfSkudGhlbihlKX11c2Uoe3N0YWNrOmUsY3JlYXRlOm4sbGV2ZWw6cixuYW1lOml9KXtpJiZ0aGlzLnVudXNlKHtzdGFjazplLG5hbWU6aX0pO2xldCBzPXRoaXMuX21pZGRsZXdhcmVzW2VdfHwodGhpcy5fbWlkZGxld2FyZXNbZV09W10pO3JldHVybiBzLnB1c2goe3N0YWNrOmUsY3JlYXRlOm4sbGV2ZWw6cj8/MTAsbmFtZTppfSkscy5zb3J0KChvLGEpPT5vLmxldmVsLWEubGV2ZWwpLHRoaXN9dW51c2Uoe3N0YWNrOmUsbmFtZTpuLGNyZWF0ZTpyfSl7cmV0dXJuIGUmJnRoaXMuX21pZGRsZXdhcmVzW2VdJiYodGhpcy5fbWlkZGxld2FyZXNbZV09dGhpcy5fbWlkZGxld2FyZXNbZV0uZmlsdGVyKGk9PnI/aS5jcmVhdGUhPT1yOm4/aS5uYW1lIT09bjohMSkpLHRoaXN9b3Blbigpe3JldHVybiBtaSh0aGlzKX1fY2xvc2UoKXtsZXQgZT10aGlzLl9zdGF0ZSxuPWtlLmluZGV4T2YodGhpcyk7aWYobj49MCYma2Uuc3BsaWNlKG4sMSksdGhpcy5pZGJkYil7dHJ5e3RoaXMuaWRiZGIuY2xvc2UoKX1jYXRjaHt9dGhpcy5fbm92aXAuaWRiZGI9bnVsbH1lLmRiUmVhZHlQcm9taXNlPW5ldyBiKHI9PntlLmRiUmVhZHlSZXNvbHZlPXJ9KSxlLm9wZW5DYW5jZWxsZXI9bmV3IGIoKHIsaSk9PntlLmNhbmNlbE9wZW49aX0pfWNsb3NlKCl7dGhpcy5fY2xvc2UoKTtsZXQgZT10aGlzLl9zdGF0ZTt0aGlzLl9vcHRpb25zLmF1dG9PcGVuPSExLGUuZGJPcGVuRXJyb3I9bmV3IEMuRGF0YWJhc2VDbG9zZWQsZS5pc0JlaW5nT3BlbmVkJiZlLmNhbmNlbE9wZW4oZS5kYk9wZW5FcnJvcil9ZGVsZXRlKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wLG49dGhpcy5fc3RhdGU7cmV0dXJuIG5ldyBiKChyLGkpPT57bGV0IHM9KCk9Pnt0aGlzLmNsb3NlKCk7dmFyIG89dGhpcy5fZGVwcy5pbmRleGVkREIuZGVsZXRlRGF0YWJhc2UodGhpcy5uYW1lKTtvLm9uc3VjY2Vzcz1PKCgpPT57cGkodGhpcy5fZGVwcyx0aGlzLm5hbWUpLHIoKX0pLG8ub25lcnJvcj1HKGkpLG8ub25ibG9ja2VkPXRoaXMuX2ZpcmVPbkJsb2NrZWR9O2lmKGUpdGhyb3cgbmV3IEMuSW52YWxpZEFyZ3VtZW50KFwiQXJndW1lbnRzIG5vdCBhbGxvd2VkIGluIGRiLmRlbGV0ZSgpXCIpO24uaXNCZWluZ09wZW5lZD9uLmRiUmVhZHlQcm9taXNlLnRoZW4ocyk6cygpfSl9YmFja2VuZERCKCl7cmV0dXJuIHRoaXMuaWRiZGJ9aXNPcGVuKCl7cmV0dXJuIHRoaXMuaWRiZGIhPT1udWxsfWhhc0JlZW5DbG9zZWQoKXtsZXQgZT10aGlzLl9zdGF0ZS5kYk9wZW5FcnJvcjtyZXR1cm4gZSYmZS5uYW1lPT09XCJEYXRhYmFzZUNsb3NlZFwifWhhc0ZhaWxlZCgpe3JldHVybiB0aGlzLl9zdGF0ZS5kYk9wZW5FcnJvciE9PW51bGx9ZHluYW1pY2FsbHlPcGVuZWQoKXtyZXR1cm4gdGhpcy5fc3RhdGUuYXV0b1NjaGVtYX1nZXQgdGFibGVzKCl7cmV0dXJuIE0odGhpcy5fYWxsVGFibGVzKS5tYXAoZT0+dGhpcy5fYWxsVGFibGVzW2VdKX10cmFuc2FjdGlvbigpe2xldCBlPWdpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb24uYXBwbHkodGhpcyxlKX1fdHJhbnNhY3Rpb24oZSxuLHIpe2xldCBpPUEudHJhbnM7KCFpfHxpLmRiIT09dGhpc3x8ZS5pbmRleE9mKFwiIVwiKSE9PS0xKSYmKGk9bnVsbCk7bGV0IHM9ZS5pbmRleE9mKFwiP1wiKSE9PS0xO2U9ZS5yZXBsYWNlKFwiIVwiLFwiXCIpLnJlcGxhY2UoXCI/XCIsXCJcIik7bGV0IG8sYTt0cnl7aWYoYT1uLm1hcChsPT57dmFyIGg9bCBpbnN0YW5jZW9mIHRoaXMuVGFibGU/bC5uYW1lOmw7aWYodHlwZW9mIGghPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgdGFibGUgYXJndW1lbnQgdG8gRGV4aWUudHJhbnNhY3Rpb24oKS4gT25seSBUYWJsZSBvciBTdHJpbmcgYXJlIGFsbG93ZWRcIik7cmV0dXJuIGh9KSxlPT1cInJcInx8ZT09PWJ0KW89YnQ7ZWxzZSBpZihlPT1cInJ3XCJ8fGU9PXh0KW89eHQ7ZWxzZSB0aHJvdyBuZXcgQy5JbnZhbGlkQXJndW1lbnQoXCJJbnZhbGlkIHRyYW5zYWN0aW9uIG1vZGU6IFwiK2UpO2lmKGkpe2lmKGkubW9kZT09PWJ0JiZvPT09eHQpaWYocylpPW51bGw7ZWxzZSB0aHJvdyBuZXcgQy5TdWJUcmFuc2FjdGlvbihcIkNhbm5vdCBlbnRlciBhIHN1Yi10cmFuc2FjdGlvbiB3aXRoIFJFQURXUklURSBtb2RlIHdoZW4gcGFyZW50IHRyYW5zYWN0aW9uIGlzIFJFQURPTkxZXCIpO2kmJmEuZm9yRWFjaChsPT57aWYoaSYmaS5zdG9yZU5hbWVzLmluZGV4T2YobCk9PT0tMSlpZihzKWk9bnVsbDtlbHNlIHRocm93IG5ldyBDLlN1YlRyYW5zYWN0aW9uKFwiVGFibGUgXCIrbCtcIiBub3QgaW5jbHVkZWQgaW4gcGFyZW50IHRyYW5zYWN0aW9uLlwiKX0pLHMmJmkmJiFpLmFjdGl2ZSYmKGk9bnVsbCl9fWNhdGNoKGwpe3JldHVybiBpP2kuX3Byb21pc2UobnVsbCwoaCxkKT0+e2QobCl9KTpCKGwpfWxldCB1PW5yLmJpbmQobnVsbCx0aGlzLG8sYSxpLHIpO3JldHVybiBpP2kuX3Byb21pc2Uobyx1LFwibG9ja1wiKTpBLnRyYW5zP1RlKEEudHJhbnNsZXNzLCgpPT50aGlzLl93aGVuUmVhZHkodSkpOnRoaXMuX3doZW5SZWFkeSh1KX10YWJsZShlKXtpZighVyh0aGlzLl9hbGxUYWJsZXMsZSkpdGhyb3cgbmV3IEMuSW52YWxpZFRhYmxlKGBUYWJsZSAke2V9IGRvZXMgbm90IGV4aXN0YCk7cmV0dXJuIHRoaXMuX2FsbFRhYmxlc1tlXX19LEtpPXR5cGVvZiBTeW1ib2w8XCJ1XCImJlwib2JzZXJ2YWJsZVwiaW4gU3ltYm9sP1N5bWJvbC5vYnNlcnZhYmxlOlwiQEBvYnNlcnZhYmxlXCIsSnQ9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5fc3Vic2NyaWJlPWV9c3Vic2NyaWJlKGUsbixyKXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKCFlfHx0eXBlb2YgZT09XCJmdW5jdGlvblwiP3tuZXh0OmUsZXJyb3I6bixjb21wbGV0ZTpyfTplKX1bS2ldKCl7cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiBpcih0LGUpe3JldHVybiBNKGUpLmZvckVhY2gobj0+e2xldCByPXRbbl18fCh0W25dPW5ldyBaKTtkdChyLGVbbl0pfSksdH1mdW5jdGlvbiBUaSh0KXtyZXR1cm4gbmV3IEp0KGU9PntsZXQgbj10bih0KTtmdW5jdGlvbiByKGYpe24mJktlKCk7bGV0IGc9KCk9PmxlKHQse3N1YnNjcjpmLHRyYW5zOm51bGx9KSxwPUEudHJhbnM/VGUoQS50cmFuc2xlc3MsZyk6ZygpO3JldHVybiBuJiZwLnRoZW4oaWUsaWUpLHB9bGV0IGk9ITEscz17fSxvPXt9LGE9e2dldCBjbG9zZWQoKXtyZXR1cm4gaX0sdW5zdWJzY3JpYmU6KCk9PntpPSEwLGZlLnN0b3JhZ2VtdXRhdGVkLnVuc3Vic2NyaWJlKGQpfX07ZS5zdGFydCYmZS5zdGFydChhKTtsZXQgdT0hMSxsPSExO2Z1bmN0aW9uIGgoKXtyZXR1cm4gTShvKS5zb21lKGY9PnNbZl0mJlNpKHNbZl0sb1tmXSkpfWxldCBkPWY9PntpcihzLGYpLGgoKSYmYygpfSxjPSgpPT57aWYodXx8aSlyZXR1cm47cz17fTtsZXQgZj17fSxnPXIoZik7bHx8KGZlKGplLGQpLGw9ITApLHU9ITAsUHJvbWlzZS5yZXNvbHZlKGcpLnRoZW4ocD0+e3U9ITEsIWkmJihoKCk/YygpOihzPXt9LG89ZixlLm5leHQmJmUubmV4dChwKSkpfSxwPT57dT0hMSxlLmVycm9yJiZlLmVycm9yKHApLGEudW5zdWJzY3JpYmUoKX0pfTtyZXR1cm4gYygpLGF9KX12YXIgWnQ7dHJ5e1p0PXtpbmRleGVkREI6UC5pbmRleGVkREJ8fFAubW96SW5kZXhlZERCfHxQLndlYmtpdEluZGV4ZWREQnx8UC5tc0luZGV4ZWREQixJREJLZXlSYW5nZTpQLklEQktleVJhbmdlfHxQLndlYmtpdElEQktleVJhbmdlfX1jYXRjaHtadD17aW5kZXhlZERCOm51bGwsSURCS2V5UmFuZ2U6bnVsbH19dmFyIGhlPXVlO1NlKGhlLHsuLi5tdCxkZWxldGUodCl7cmV0dXJuIG5ldyBoZSh0LHthZGRvbnM6W119KS5kZWxldGUoKX0sZXhpc3RzKHQpe3JldHVybiBuZXcgaGUodCx7YWRkb25zOltdfSkub3BlbigpLnRoZW4oZT0+KGUuY2xvc2UoKSwhMCkpLmNhdGNoKFwiTm9TdWNoRGF0YWJhc2VFcnJvclwiLCgpPT4hMSl9LGdldERhdGFiYXNlTmFtZXModCl7dHJ5e3JldHVybiBoaShoZS5kZXBlbmRlbmNpZXMpLnRoZW4odCl9Y2F0Y2h7cmV0dXJuIEIobmV3IEMuTWlzc2luZ0FQSSl9fSxkZWZpbmVDbGFzcygpe2Z1bmN0aW9uIHQoZSl7TCh0aGlzLGUpfXJldHVybiB0fSxpZ25vcmVUcmFuc2FjdGlvbih0KXtyZXR1cm4gQS50cmFucz9UZShBLnRyYW5zbGVzcyx0KTp0KCl9LHZpcDpRdCxhc3luYzpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0cnl7dmFyIGU9R3QodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpO3JldHVybiFlfHx0eXBlb2YgZS50aGVuIT1cImZ1bmN0aW9uXCI/Yi5yZXNvbHZlKGUpOmV9Y2F0Y2gobil7cmV0dXJuIEIobil9fX0sc3Bhd246ZnVuY3Rpb24odCxlLG4pe3RyeXt2YXIgcj1HdCh0LmFwcGx5KG4sZXx8W10pKTtyZXR1cm4hcnx8dHlwZW9mIHIudGhlbiE9XCJmdW5jdGlvblwiP2IucmVzb2x2ZShyKTpyfWNhdGNoKGkpe3JldHVybiBCKGkpfX0sY3VycmVudFRyYW5zYWN0aW9uOntnZXQ6KCk9PkEudHJhbnN8fG51bGx9LHdhaXRGb3I6ZnVuY3Rpb24odCxlKXtsZXQgbj1iLnJlc29sdmUodHlwZW9mIHQ9PVwiZnVuY3Rpb25cIj9oZS5pZ25vcmVUcmFuc2FjdGlvbih0KTp0KS50aW1lb3V0KGV8fDZlNCk7cmV0dXJuIEEudHJhbnM/QS50cmFucy53YWl0Rm9yKG4pOm59LFByb21pc2U6YixkZWJ1Zzp7Z2V0OigpPT5xLHNldDp0PT57Qm4odCx0PT09XCJkZXhpZVwiPygpPT4hMDpHbil9fSxkZXJpdmU6QWUsZXh0ZW5kOkwscHJvcHM6U2Usb3ZlcnJpZGU6RG4sRXZlbnRzOkhlLG9uOmZlLGxpdmVRdWVyeTpUaSxleHRlbmRPYnNlcnZhYmlsaXR5U2V0OmlyLGdldEJ5S2V5UGF0aDpuZSxzZXRCeUtleVBhdGg6USxkZWxCeUtleVBhdGg6ZnIsc2hhbGxvd0Nsb25lOmtuLGRlZXBDbG9uZTokZSxnZXRPYmplY3REaWZmOnBuLGNtcDpWLGFzYXA6Um4sbWluS2V5Omp0LGFkZG9uczpbXSxjb25uZWN0aW9uczprZSxlcnJuYW1lczpybixkZXBlbmRlbmNpZXM6WnQsc2VtVmVyOmJuLHZlcnNpb246Ym4uc3BsaXQoXCIuXCIpLm1hcCh0PT5wYXJzZUludCh0KSkucmVkdWNlKCh0LGUsbik9PnQrZS9NYXRoLnBvdygxMCxuKjIpKX0pO2hlLm1heEtleT1WZShoZS5kZXBlbmRlbmNpZXMuSURCS2V5UmFuZ2UpO3R5cGVvZiBkaXNwYXRjaEV2ZW50PFwidVwiJiZ0eXBlb2YgYWRkRXZlbnRMaXN0ZW5lcjxcInVcIiYmKGZlKGplLHQ9PntpZighdGUpe2xldCBlO2d0PyhlPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiQ3VzdG9tRXZlbnRcIiksZS5pbml0Q3VzdG9tRXZlbnQoYWUsITAsITAsdCkpOmU9bmV3IEN1c3RvbUV2ZW50KGFlLHtkZXRhaWw6dH0pLHRlPSEwLGRpc3BhdGNoRXZlbnQoZSksdGU9ITF9fSksYWRkRXZlbnRMaXN0ZW5lcihhZSwoe2RldGFpbDp0fSk9Pnt0ZXx8cHQodCl9KSk7ZnVuY3Rpb24gcHQodCl7bGV0IGU9dGU7dHJ5e3RlPSEwLGZlLnN0b3JhZ2VtdXRhdGVkLmZpcmUodCl9ZmluYWxseXt0ZT1lfX12YXIgdGU9ITE7aWYodHlwZW9mIEJyb2FkY2FzdENoYW5uZWw8XCJ1XCIpe2xldCB0PW5ldyBCcm9hZGNhc3RDaGFubmVsKGFlKTtmZShqZSxlPT57dGV8fHQucG9zdE1lc3NhZ2UoZSl9KSx0Lm9ubWVzc2FnZT1lPT57ZS5kYXRhJiZwdChlLmRhdGEpfX1lbHNlIGlmKHR5cGVvZiBzZWxmPFwidVwiJiZ0eXBlb2YgbmF2aWdhdG9yPFwidVwiKXtmZShqZSxlPT57dHJ5e3RlfHwodHlwZW9mIGxvY2FsU3RvcmFnZTxcInVcIiYmbG9jYWxTdG9yYWdlLnNldEl0ZW0oYWUsSlNPTi5zdHJpbmdpZnkoe3RyaWc6TWF0aC5yYW5kb20oKSxjaGFuZ2VkUGFydHM6ZX0pKSx0eXBlb2Ygc2VsZi5jbGllbnRzPT1cIm9iamVjdFwiJiZbLi4uc2VsZi5jbGllbnRzLm1hdGNoQWxsKHtpbmNsdWRlVW5jb250cm9sbGVkOiEwfSldLmZvckVhY2gobj0+bi5wb3N0TWVzc2FnZSh7dHlwZTphZSxjaGFuZ2VkUGFydHM6ZX0pKSl9Y2F0Y2h7fX0pLHR5cGVvZiBhZGRFdmVudExpc3RlbmVyPFwidVwiJiZhZGRFdmVudExpc3RlbmVyKFwic3RvcmFnZVwiLGU9PntpZihlLmtleT09PWFlKXtsZXQgbj1KU09OLnBhcnNlKGUubmV3VmFsdWUpO24mJnB0KG4uY2hhbmdlZFBhcnRzKX19KTtsZXQgdD1zZWxmLmRvY3VtZW50JiZuYXZpZ2F0b3Iuc2VydmljZVdvcmtlcjt0JiZ0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsSWkpfWZ1bmN0aW9uIElpKHtkYXRhOnR9KXt0JiZ0LnR5cGU9PT1hZSYmcHQodC5jaGFuZ2VkUGFydHMpfWIucmVqZWN0aW9uTWFwcGVyPXdyO0JuKHEsR24pO2V4cG9ydHt1ZSBhcyBEZXhpZSxaIGFzIFJhbmdlU2V0LHVlIGFzIGRlZmF1bHQsVGkgYXMgbGl2ZVF1ZXJ5LGR0IGFzIG1lcmdlUmFuZ2VzLFNpIGFzIHJhbmdlc092ZXJsYXB9O1xuIiwgImltcG9ydCBEZXhpZSBmcm9tIFwiaHR0cHM6Ly9lc20uc2gvZGV4aWVAMy4yLjJcIjtcbmltcG9ydCB7IFN5c0NhbGxNYXBwaW5nIH0gZnJvbSBcIi4uL3N5c3RlbS50c1wiO1xuXG5leHBvcnQgdHlwZSBLViA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVTeXNjYWxscyhcbiAgZGJOYW1lOiBzdHJpbmcsXG4gIHRhYmxlTmFtZTogc3RyaW5nLFxuKTogU3lzQ2FsbE1hcHBpbmcge1xuICBjb25zdCBkYiA9IG5ldyBEZXhpZShkYk5hbWUpO1xuICBkYi52ZXJzaW9uKDEpLnN0b3Jlcyh7XG4gICAgW3RhYmxlTmFtZV06IFwia2V5XCIsXG4gIH0pO1xuICBjb25zdCBpdGVtcyA9IGRiLnRhYmxlKHRhYmxlTmFtZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBcInN0b3JlLmRlbGV0ZVwiOiBhc3luYyAoY3R4LCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgYXdhaXQgaXRlbXMuZGVsZXRlKGtleSk7XG4gICAgfSxcblxuICAgIFwic3RvcmUuZGVsZXRlUHJlZml4XCI6IGFzeW5jIChjdHgsIHByZWZpeDogc3RyaW5nKSA9PiB7XG4gICAgICBhd2FpdCBpdGVtcy53aGVyZShcImtleVwiKS5zdGFydHNXaXRoKHByZWZpeCkuZGVsZXRlKCk7XG4gICAgfSxcblxuICAgIFwic3RvcmUuZGVsZXRlQWxsXCI6IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGl0ZW1zLmNsZWFyKCk7XG4gICAgfSxcblxuICAgIFwic3RvcmUuc2V0XCI6IGFzeW5jIChjdHgsIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICBhd2FpdCBpdGVtcy5wdXQoe1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIFwic3RvcmUuYmF0Y2hTZXRcIjogYXN5bmMgKGN0eCwga3ZzOiBLVltdKSA9PiB7XG4gICAgICBhd2FpdCBpdGVtcy5idWxrUHV0KFxuICAgICAgICBrdnMubWFwKCh7IGtleSwgdmFsdWUgfSkgPT4gKHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gICAgfSxcblxuICAgIFwic3RvcmUuZ2V0XCI6IGFzeW5jIChjdHgsIGtleTogc3RyaW5nKTogUHJvbWlzZTxhbnkgfCBudWxsPiA9PiB7XG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgaXRlbXMuZ2V0KHtcbiAgICAgICAga2V5LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LnZhbHVlIDogbnVsbDtcbiAgICB9LFxuXG4gICAgXCJzdG9yZS5xdWVyeVByZWZpeFwiOiBhc3luYyAoXG4gICAgICBjdHgsXG4gICAgICBrZXlQcmVmaXg6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHsga2V5OiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdPiA9PiB7XG4gICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IGl0ZW1zLndoZXJlKFwia2V5XCIpLnN0YXJ0c1dpdGgoa2V5UHJlZml4KS50b0FycmF5KCk7XG4gICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gKHtcbiAgICAgICAga2V5OiByZXN1bHQua2V5LFxuICAgICAgICB2YWx1ZTogcmVzdWx0LnZhbHVlLFxuICAgICAgfSkpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgcHJveHlTeXNjYWxscyB9IGZyb20gXCIuLi8uLi9wbHVnb3Mvc3lzY2FsbHMvdHJhbnNwb3J0LnRzXCI7XG5pbXBvcnQgeyBTeXNDYWxsTWFwcGluZyB9IGZyb20gXCIuLi8uLi9wbHVnb3Mvc3lzdGVtLnRzXCI7XG5pbXBvcnQgeyBzdG9yZVN5c2NhbGxzIH0gZnJvbSBcIi4uLy4uL3BsdWdvcy9zeXNjYWxscy9zdG9yZS5kZXhpZV9icm93c2VyLnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGllbnRTdG9yZVN5c2NhbGxzKCk6IFN5c0NhbGxNYXBwaW5nIHtcbiAgY29uc3Qgc3RvcmVDYWxscyA9IHN0b3JlU3lzY2FsbHMoXCJsb2NhbFwiLCBcImxvY2FsRGF0YVwiKTtcbiAgcmV0dXJuIHByb3h5U3lzY2FsbHMoXG4gICAgW1wiY2xpZW50U3RvcmUuZ2V0XCIsIFwiY2xpZW50U3RvcmUuc2V0XCIsIFwiY2xpZW50U3RvcmUuZGVsZXRlXCJdLFxuICAgIChjdHgsIG5hbWUsIC4uLmFyZ3MpID0+IHtcbiAgICAgIHJldHVybiBzdG9yZUNhbGxzW25hbWUucmVwbGFjZShcImNsaWVudFN0b3JlLlwiLCBcInN0b3JlLlwiKV0oY3R4LCAuLi5hcmdzKTtcbiAgICB9LFxuICApO1xufVxuIiwgImltcG9ydCB7IEVkaXRvciB9IGZyb20gXCIuLi9lZGl0b3IudHN4XCI7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9kZXBfd2ViLnRzXCI7XG5pbXBvcnQgeyBTeXNDYWxsTWFwcGluZyB9IGZyb20gXCIuLi8uLi9wbHVnb3Mvc3lzdGVtLnRzXCI7XG5pbXBvcnQgeyBGaWx0ZXJPcHRpb24gfSBmcm9tIFwiLi4vLi4vY29tbW9uL3R5cGVzLnRzXCI7XG5cbnR5cGUgU3ludGF4Tm9kZSA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGZyb206IG51bWJlcjtcbiAgdG86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIGVuc3VyZUFuY2hvcihleHByOiBhbnksIHN0YXJ0OiBib29sZWFuKSB7XG4gIHZhciBfYTtcbiAgbGV0IHsgc291cmNlIH0gPSBleHByO1xuICBsZXQgYWRkU3RhcnQgPSBzdGFydCAmJiBzb3VyY2VbMF0gIT0gXCJeXCIsXG4gICAgYWRkRW5kID0gc291cmNlW3NvdXJjZS5sZW5ndGggLSAxXSAhPSBcIiRcIjtcbiAgaWYgKCFhZGRTdGFydCAmJiAhYWRkRW5kKSByZXR1cm4gZXhwcjtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoXG4gICAgYCR7YWRkU3RhcnQgPyBcIl5cIiA6IFwiXCJ9KD86JHtzb3VyY2V9KSR7YWRkRW5kID8gXCIkXCIgOiBcIlwifWAsXG4gICAgKF9hID0gZXhwci5mbGFncykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMFxuICAgICAgPyBfYVxuICAgICAgOiBleHByLmlnbm9yZUNhc2VcbiAgICAgID8gXCJpXCJcbiAgICAgIDogXCJcIixcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVkaXRvclN5c2NhbGxzKGVkaXRvcjogRWRpdG9yKTogU3lzQ2FsbE1hcHBpbmcge1xuICBjb25zdCBzeXNjYWxsczogU3lzQ2FsbE1hcHBpbmcgPSB7XG4gICAgXCJlZGl0b3IuZ2V0Q3VycmVudFBhZ2VcIjogKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gZWRpdG9yLmN1cnJlbnRQYWdlITtcbiAgICB9LFxuICAgIFwiZWRpdG9yLmdldFRleHRcIjogKCkgPT4ge1xuICAgICAgcmV0dXJuIGVkaXRvci5lZGl0b3JWaWV3Py5zdGF0ZS5zbGljZURvYygpO1xuICAgIH0sXG4gICAgXCJlZGl0b3IuZ2V0Q3Vyc29yXCI6ICgpOiBudW1iZXIgPT4ge1xuICAgICAgcmV0dXJuIGVkaXRvci5lZGl0b3JWaWV3IS5zdGF0ZS5zZWxlY3Rpb24ubWFpbi5mcm9tO1xuICAgIH0sXG4gICAgXCJlZGl0b3IuZ2V0U2VsZWN0aW9uXCI6ICgpOiB7IGZyb206IG51bWJlcjsgdG86IG51bWJlciB9ID0+IHtcbiAgICAgIHJldHVybiBlZGl0b3IuZWRpdG9yVmlldyEuc3RhdGUuc2VsZWN0aW9uLm1haW47XG4gICAgfSxcbiAgICBcImVkaXRvci5zYXZlXCI6IGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBlZGl0b3Iuc2F2ZSh0cnVlKTtcbiAgICB9LFxuICAgIFwiZWRpdG9yLm5hdmlnYXRlXCI6IGFzeW5jIChcbiAgICAgIGN0eCxcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIHBvczogbnVtYmVyIHwgc3RyaW5nLFxuICAgICAgcmVwbGFjZVN0YXRlID0gZmFsc2UsXG4gICAgKSA9PiB7XG4gICAgICBhd2FpdCBlZGl0b3IubmF2aWdhdGUobmFtZSwgcG9zLCByZXBsYWNlU3RhdGUpO1xuICAgIH0sXG4gICAgXCJlZGl0b3IucmVsb2FkUGFnZVwiOiBhc3luYyAoY3R4KSA9PiB7XG4gICAgICBhd2FpdCBlZGl0b3IucmVsb2FkUGFnZSgpO1xuICAgIH0sXG4gICAgXCJlZGl0b3Iub3BlblVybFwiOiBhc3luYyAoY3R4LCB1cmw6IHN0cmluZykgPT4ge1xuICAgICAgbGV0IHdpbiA9IHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XG4gICAgICBpZiAod2luKSB7XG4gICAgICAgIHdpbi5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJlZGl0b3IuZmxhc2hOb3RpZmljYXRpb25cIjogKFxuICAgICAgY3R4LFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgdHlwZTogXCJlcnJvclwiIHwgXCJpbmZvXCIgPSBcImluZm9cIixcbiAgICApID0+IHtcbiAgICAgIGVkaXRvci5mbGFzaE5vdGlmaWNhdGlvbihtZXNzYWdlLCB0eXBlKTtcbiAgICB9LFxuICAgIFwiZWRpdG9yLmZpbHRlckJveFwiOiAoXG4gICAgICBjdHgsXG4gICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgb3B0aW9uczogRmlsdGVyT3B0aW9uW10sXG4gICAgICBoZWxwVGV4dDogc3RyaW5nID0gXCJcIixcbiAgICAgIHBsYWNlSG9sZGVyOiBzdHJpbmcgPSBcIlwiLFxuICAgICk6IFByb21pc2U8RmlsdGVyT3B0aW9uIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgICByZXR1cm4gZWRpdG9yLmZpbHRlckJveChsYWJlbCwgb3B0aW9ucywgaGVscFRleHQsIHBsYWNlSG9sZGVyKTtcbiAgICB9LFxuICAgIFwiZWRpdG9yLnNob3dQYW5lbFwiOiAoXG4gICAgICBjdHgsXG4gICAgICBpZDogc3RyaW5nLFxuICAgICAgbW9kZTogbnVtYmVyLFxuICAgICAgaHRtbDogc3RyaW5nLFxuICAgICAgc2NyaXB0OiBzdHJpbmcsXG4gICAgKSA9PiB7XG4gICAgICBlZGl0b3Iudmlld0Rpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogXCJzaG93LXBhbmVsXCIsXG4gICAgICAgIGlkOiBpZCBhcyBhbnksXG4gICAgICAgIGNvbmZpZzogeyBodG1sLCBzY3JpcHQsIG1vZGUgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgXCJlZGl0b3IuaGlkZVBhbmVsXCI6IChjdHgsIGlkOiBzdHJpbmcpID0+IHtcbiAgICAgIGVkaXRvci52aWV3RGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBcImhpZGUtcGFuZWxcIixcbiAgICAgICAgaWQ6IGlkIGFzIGFueSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgLy8gRGVwcmVjYXRlZCBpbiBmYXZvciBvZiB1c2luZyBcImhpZGVQYW5lbFwiIGFuZCBcInNob3dQYW5lbFwiXG4gICAgXCJlZGl0b3Iuc2hvd1Joc1wiOiAoY3R4LCBodG1sOiBzdHJpbmcsIHNjcmlwdDogc3RyaW5nLCBmbGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHN5c2NhbGxzW1wiZWRpdG9yLnNob3dQYW5lbFwiXShjdHgsIFwicmhzXCIsIGZsZXgsIGh0bWwsIHNjcmlwdCk7XG4gICAgfSxcbiAgICBcImVkaXRvci5oaWRlUmhzXCI6IChjdHgpID0+IHtcbiAgICAgIHN5c2NhbGxzW1wiZWRpdG9yLmhpZGVQYW5lbFwiXShjdHgsIFwicmhzXCIpO1xuICAgIH0sXG4gICAgXCJlZGl0b3Iuc2hvd0xoc1wiOiAoY3R4LCBodG1sOiBzdHJpbmcsIHNjcmlwdDogc3RyaW5nLCBmbGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHN5c2NhbGxzW1wiZWRpdG9yLnNob3dQYW5lbFwiXShjdHgsIFwibGhzXCIsIGZsZXgsIGh0bWwsIHNjcmlwdCk7XG4gICAgfSxcbiAgICBcImVkaXRvci5oaWRlTGhzXCI6IChjdHgpID0+IHtcbiAgICAgIHN5c2NhbGxzW1wiZWRpdG9yLmhpZGVQYW5lbFwiXShjdHgsIFwibGhzXCIpO1xuICAgIH0sXG4gICAgXCJlZGl0b3Iuc2hvd0Joc1wiOiAoY3R4LCBodG1sOiBzdHJpbmcsIHNjcmlwdDogc3RyaW5nLCBmbGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHN5c2NhbGxzW1wiZWRpdG9yLnNob3dQYW5lbFwiXShjdHgsIFwiYmhzXCIsIGZsZXgsIGh0bWwsIHNjcmlwdCk7XG4gICAgfSxcbiAgICBcImVkaXRvci5oaWRlQmhzXCI6IChjdHgpID0+IHtcbiAgICAgIHN5c2NhbGxzW1wiZWRpdG9yLmhpZGVQYW5lbFwiXShjdHgsIFwiYmhzXCIpO1xuICAgIH0sXG4gICAgXCJlZGl0b3IuaW5zZXJ0QXRQb3NcIjogKGN0eCwgdGV4dDogc3RyaW5nLCBwb3M6IG51bWJlcikgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvclZpZXchLmRpc3BhdGNoKHtcbiAgICAgICAgY2hhbmdlczoge1xuICAgICAgICAgIGluc2VydDogdGV4dCxcbiAgICAgICAgICBmcm9tOiBwb3MsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFwiZWRpdG9yLnJlcGxhY2VSYW5nZVwiOiAoY3R4LCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvclZpZXchLmRpc3BhdGNoKHtcbiAgICAgICAgY2hhbmdlczoge1xuICAgICAgICAgIGluc2VydDogdGV4dCxcbiAgICAgICAgICBmcm9tOiBmcm9tLFxuICAgICAgICAgIHRvOiB0byxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgXCJlZGl0b3IubW92ZUN1cnNvclwiOiAoY3R4LCBwb3M6IG51bWJlcikgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvclZpZXchLmRpc3BhdGNoKHtcbiAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgYW5jaG9yOiBwb3MsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFwiZWRpdG9yLnNldFNlbGVjdGlvblwiOiAoY3R4LCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpID0+IHtcbiAgICAgIGxldCBlZGl0b3JWaWV3ID0gZWRpdG9yLmVkaXRvclZpZXchO1xuICAgICAgZWRpdG9yVmlldy5kaXNwYXRjaCh7XG4gICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgIGFuY2hvcjogZnJvbSxcbiAgICAgICAgICBoZWFkOiB0byxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBcImVkaXRvci5pbnNlcnRBdEN1cnNvclwiOiAoY3R4LCB0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIGxldCBlZGl0b3JWaWV3ID0gZWRpdG9yLmVkaXRvclZpZXchO1xuICAgICAgbGV0IGZyb20gPSBlZGl0b3JWaWV3LnN0YXRlLnNlbGVjdGlvbi5tYWluLmZyb207XG4gICAgICBlZGl0b3JWaWV3LmRpc3BhdGNoKHtcbiAgICAgICAgY2hhbmdlczoge1xuICAgICAgICAgIGluc2VydDogdGV4dCxcbiAgICAgICAgICBmcm9tOiBmcm9tLFxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICBhbmNob3I6IGZyb20gKyB0ZXh0Lmxlbmd0aCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBcImVkaXRvci5tYXRjaEJlZm9yZVwiOiAoXG4gICAgICBjdHgsXG4gICAgICByZWdleHA6IHN0cmluZyxcbiAgICApOiB7IGZyb206IG51bWJlcjsgdG86IG51bWJlcjsgdGV4dDogc3RyaW5nIH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGVkaXRvclN0YXRlID0gZWRpdG9yLmVkaXRvclZpZXchLnN0YXRlO1xuICAgICAgbGV0IHNlbGVjdGlvbiA9IGVkaXRvclN0YXRlLnNlbGVjdGlvbi5tYWluO1xuICAgICAgbGV0IGZyb20gPSBzZWxlY3Rpb24uZnJvbTtcbiAgICAgIGlmIChzZWxlY3Rpb24uZW1wdHkpIHtcbiAgICAgICAgbGV0IGxpbmUgPSBlZGl0b3JTdGF0ZS5kb2MubGluZUF0KGZyb20pO1xuICAgICAgICBsZXQgc3RhcnQgPSBNYXRoLm1heChsaW5lLmZyb20sIGZyb20gLSAyNTApO1xuICAgICAgICBsZXQgc3RyID0gbGluZS50ZXh0LnNsaWNlKHN0YXJ0IC0gbGluZS5mcm9tLCBmcm9tIC0gbGluZS5mcm9tKTtcbiAgICAgICAgbGV0IGZvdW5kID0gc3RyLnNlYXJjaChlbnN1cmVBbmNob3IobmV3IFJlZ0V4cChyZWdleHApLCBmYWxzZSkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkxpbmVcIiwgbGluZSwgc3RhcnQsIHN0ciwgbmV3IFJlZ0V4cChyZWdleHApLCBmb3VuZCk7XG4gICAgICAgIHJldHVybiBmb3VuZCA8IDBcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHsgZnJvbTogc3RhcnQgKyBmb3VuZCwgdG86IGZyb20sIHRleHQ6IHN0ci5zbGljZShmb3VuZCkgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgXCJlZGl0b3IuZGlzcGF0Y2hcIjogKGN0eCwgY2hhbmdlOiBUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgZWRpdG9yLmVkaXRvclZpZXchLmRpc3BhdGNoKGNoYW5nZSk7XG4gICAgfSxcbiAgICBcImVkaXRvci5wcm9tcHRcIjogKFxuICAgICAgY3R4LFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgZGVmYXVsdFZhbHVlID0gXCJcIixcbiAgICApOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgICAgIHJldHVybiBwcm9tcHQobWVzc2FnZSwgZGVmYXVsdFZhbHVlKTtcbiAgICB9LFxuICAgIFwiZWRpdG9yLmVuYWJsZVJlYWRPbmx5TW9kZVwiOiAoY3R4LCBlbmFibGVkOiBib29sZWFuKSA9PiB7XG4gICAgICBlZGl0b3Iudmlld0Rpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogXCJzZXQtZWRpdG9yLXJvXCIsXG4gICAgICAgIGVuYWJsZWQsXG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBzeXNjYWxscztcbn1cbiIsICJpbXBvcnQgeyBTeXNDYWxsTWFwcGluZyB9IGZyb20gXCIuLi8uLi9wbHVnb3Mvc3lzdGVtLnRzXCI7XG5pbXBvcnQgeyBwcm94eVN5c2NhbGxzIH0gZnJvbSBcIi4uLy4uL3BsdWdvcy9zeXNjYWxscy90cmFuc3BvcnQudHNcIjtcbmltcG9ydCB7IFNwYWNlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9zcGFjZXMvc3BhY2UudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZ1bGx0ZXh0U3lzY2FsbHMoc3BhY2U6IFNwYWNlKTogU3lzQ2FsbE1hcHBpbmcge1xuICByZXR1cm4gcHJveHlTeXNjYWxscyhcbiAgICBbXCJmdWxsdGV4dC5zZWFyY2hcIiwgXCJmdWxsdGV4dC5kZWxldGVcIiwgXCJmdWxsdGV4dC5pbmRleFwiXSxcbiAgICAoY3R4LCBuYW1lLCAuLi5hcmdzKSA9PiBzcGFjZS5wcm94eVN5c2NhbGwoY3R4LnBsdWcsIG5hbWUsIGFyZ3MpLFxuICApO1xufVxuIiwgImltcG9ydCB7IFN5c0NhbGxNYXBwaW5nIH0gZnJvbSBcIi4uLy4uL3BsdWdvcy9zeXN0ZW0udHNcIjtcbmltcG9ydCB7IHByb3h5U3lzY2FsbHMgfSBmcm9tIFwiLi4vLi4vcGx1Z29zL3N5c2NhbGxzL3RyYW5zcG9ydC50c1wiO1xuaW1wb3J0IHsgU3BhY2UgfSBmcm9tIFwiLi4vLi4vY29tbW9uL3NwYWNlcy9zcGFjZS50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhlclN5c2NhbGxzKHNwYWNlOiBTcGFjZSk6IFN5c0NhbGxNYXBwaW5nIHtcbiAgcmV0dXJuIHByb3h5U3lzY2FsbHMoXG4gICAgW1xuICAgICAgXCJpbmRleC5xdWVyeVByZWZpeFwiLFxuICAgICAgXCJpbmRleC5nZXRcIixcbiAgICAgIFwiaW5kZXguc2V0XCIsXG4gICAgICBcImluZGV4LmJhdGNoU2V0XCIsXG4gICAgICBcImluZGV4LmRlbGV0ZVwiLFxuICAgIF0sXG4gICAgKGN0eCwgbmFtZSwgLi4uYXJncykgPT4gc3BhY2UucHJveHlTeXNjYWxsKGN0eC5wbHVnLCBuYW1lLCBhcmdzKSxcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBFZGl0b3IgfSBmcm9tIFwiLi4vZWRpdG9yLnRzeFwiO1xuaW1wb3J0IHsgU3lzQ2FsbE1hcHBpbmcgfSBmcm9tIFwiLi4vLi4vcGx1Z29zL3N5c3RlbS50c1wiO1xuaW1wb3J0IHsgQXR0YWNobWVudE1ldGEsIFBhZ2VNZXRhIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi90eXBlcy50c1wiO1xuaW1wb3J0IHtcbiAgRmlsZURhdGEsXG4gIEZpbGVFbmNvZGluZyxcbn0gZnJvbSBcIi4uLy4uL2NvbW1vbi9zcGFjZXMvc3BhY2VfcHJpbWl0aXZlcy50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3BhY2VTeXNjYWxscyhlZGl0b3I6IEVkaXRvcik6IFN5c0NhbGxNYXBwaW5nIHtcbiAgcmV0dXJuIHtcbiAgICBcInNwYWNlLmxpc3RQYWdlc1wiOiAoKTogUGFnZU1ldGFbXSA9PiB7XG4gICAgICByZXR1cm4gWy4uLmVkaXRvci5zcGFjZS5saXN0UGFnZXMoKV07XG4gICAgfSxcbiAgICBcInNwYWNlLnJlYWRQYWdlXCI6IGFzeW5jIChcbiAgICAgIGN0eCxcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHsgdGV4dDogc3RyaW5nOyBtZXRhOiBQYWdlTWV0YSB9PiA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgZWRpdG9yLnNwYWNlLnJlYWRQYWdlKG5hbWUpO1xuICAgIH0sXG4gICAgXCJzcGFjZS5nZXRQYWdlTWV0YVwiOiBhc3luYyAoY3R4LCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBhZ2VNZXRhPiA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgZWRpdG9yLnNwYWNlLmdldFBhZ2VNZXRhKG5hbWUpO1xuICAgIH0sXG4gICAgXCJzcGFjZS53cml0ZVBhZ2VcIjogYXN5bmMgKFxuICAgICAgY3R4LFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgdGV4dDogc3RyaW5nLFxuICAgICk6IFByb21pc2U8UGFnZU1ldGE+ID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCBlZGl0b3Iuc3BhY2Uud3JpdGVQYWdlKG5hbWUsIHRleHQpO1xuICAgIH0sXG4gICAgXCJzcGFjZS5kZWxldGVQYWdlXCI6IGFzeW5jIChjdHgsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgLy8gSWYgd2UncmUgZGVsZXRpbmcgdGhlIGN1cnJlbnQgcGFnZSwgbmF2aWdhdGUgdG8gdGhlIGluZGV4IHBhZ2VcbiAgICAgIGlmIChlZGl0b3IuY3VycmVudFBhZ2UgPT09IG5hbWUpIHtcbiAgICAgICAgYXdhaXQgZWRpdG9yLm5hdmlnYXRlKFwiXCIpO1xuICAgICAgfVxuICAgICAgLy8gUmVtb3ZlIHBhZ2UgZnJvbSBvcGVuIHBhZ2VzIGluIGVkaXRvclxuICAgICAgZWRpdG9yLm9wZW5QYWdlcy5kZWxldGUobmFtZSk7XG4gICAgICBjb25zb2xlLmxvZyhcIkRlbGV0aW5nIHBhZ2VcIik7XG4gICAgICBhd2FpdCBlZGl0b3Iuc3BhY2UuZGVsZXRlUGFnZShuYW1lKTtcbiAgICB9LFxuICAgIFwic3BhY2UubGlzdFBsdWdzXCI6IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgZWRpdG9yLnNwYWNlLmxpc3RQbHVncygpO1xuICAgIH0sXG4gICAgXCJzcGFjZS5saXN0QXR0YWNobWVudHNcIjogYXN5bmMgKGN0eCk6IFByb21pc2U8QXR0YWNobWVudE1ldGFbXT4gPT4ge1xuICAgICAgcmV0dXJuIGF3YWl0IGVkaXRvci5zcGFjZS5mZXRjaEF0dGFjaG1lbnRMaXN0KCk7XG4gICAgfSxcbiAgICBcInNwYWNlLnJlYWRBdHRhY2htZW50XCI6IGFzeW5jIChcbiAgICAgIGN0eCxcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHsgZGF0YTogRmlsZURhdGE7IG1ldGE6IEF0dGFjaG1lbnRNZXRhIH0+ID0+IHtcbiAgICAgIHJldHVybiBhd2FpdCBlZGl0b3Iuc3BhY2UucmVhZEF0dGFjaG1lbnQobmFtZSwgXCJkYXRhdXJsXCIpO1xuICAgIH0sXG4gICAgXCJzcGFjZS5nZXRBdHRhY2htZW50TWV0YVwiOiBhc3luYyAoXG4gICAgICBjdHgsXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxBdHRhY2htZW50TWV0YT4gPT4ge1xuICAgICAgcmV0dXJuIGF3YWl0IGVkaXRvci5zcGFjZS5nZXRBdHRhY2htZW50TWV0YShuYW1lKTtcbiAgICB9LFxuICAgIFwic3BhY2Uud3JpdGVBdHRhY2htZW50XCI6IGFzeW5jIChcbiAgICAgIGN0eCxcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIGVuY29kaW5nOiBGaWxlRW5jb2RpbmcsXG4gICAgICBkYXRhOiBGaWxlRGF0YSxcbiAgICApOiBQcm9taXNlPEF0dGFjaG1lbnRNZXRhPiA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgZWRpdG9yLnNwYWNlLndyaXRlQXR0YWNobWVudChuYW1lLCBlbmNvZGluZywgZGF0YSk7XG4gICAgfSxcbiAgICBcInNwYWNlLmRlbGV0ZUF0dGFjaG1lbnRcIjogYXN5bmMgKGN0eCwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBhd2FpdCBlZGl0b3Iuc3BhY2UuZGVsZXRlQXR0YWNobWVudChuYW1lKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IFN5c0NhbGxNYXBwaW5nIH0gZnJvbSBcIi4uLy4uL3BsdWdvcy9zeXN0ZW0udHNcIjtcbmltcG9ydCB7IHByb3h5U3lzY2FsbHMgfSBmcm9tIFwiLi4vLi4vcGx1Z29zL3N5c2NhbGxzL3RyYW5zcG9ydC50c1wiO1xuaW1wb3J0IHsgU3BhY2UgfSBmcm9tIFwiLi4vLi4vY29tbW9uL3NwYWNlcy9zcGFjZS50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVTeXNjYWxscyhzcGFjZTogU3BhY2UpOiBTeXNDYWxsTWFwcGluZyB7XG4gIHJldHVybiBwcm94eVN5c2NhbGxzKFxuICAgIFtcbiAgICAgIFwic3RvcmUucXVlcnlQcmVmaXhcIixcbiAgICAgIFwic3RvcmUuZ2V0XCIsXG4gICAgICBcInN0b3JlLnNldFwiLFxuICAgICAgXCJzdG9yZS5iYXRjaFNldFwiLFxuICAgICAgXCJzdG9yZS5kZWxldGVcIixcbiAgICAgIFwic3RvcmUuZGVsZXRlUHJlZml4XCIsXG4gICAgXSxcbiAgICAoY3R4LCBuYW1lLCAuLi5hcmdzKSA9PiBzcGFjZS5wcm94eVN5c2NhbGwoY3R4LnBsdWcsIG5hbWUsIGFyZ3MpLFxuICApO1xufVxuIiwgImltcG9ydCB7IFN5c0NhbGxNYXBwaW5nIH0gZnJvbSBcIi4uLy4uL3BsdWdvcy9zeXN0ZW0udHNcIjtcbmltcG9ydCB0eXBlIHsgRWRpdG9yIH0gZnJvbSBcIi4uL2VkaXRvci50c3hcIjtcbmltcG9ydCB7IENvbW1hbmREZWYgfSBmcm9tIFwiLi4vaG9va3MvY29tbWFuZC50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3lzdGVtU3lzY2FsbHMoZWRpdG9yOiBFZGl0b3IpOiBTeXNDYWxsTWFwcGluZyB7XG4gIHJldHVybiB7XG4gICAgXCJzeXN0ZW0uaW52b2tlRnVuY3Rpb25cIjogYXN5bmMgKFxuICAgICAgY3R4LFxuICAgICAgZW52OiBzdHJpbmcsXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAuLi5hcmdzOiBhbnlbXVxuICAgICkgPT4ge1xuICAgICAgaWYgKCFjdHgucGx1Zykge1xuICAgICAgICB0aHJvdyBFcnJvcihcIk5vIHBsdWcgYXNzb2NpYXRlZCB3aXRoIGNvbnRleHRcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbnYgPT09IFwiY2xpZW50XCIpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5wbHVnLmludm9rZShuYW1lLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVkaXRvci5zcGFjZS5pbnZva2VGdW5jdGlvbihjdHgucGx1ZywgZW52LCBuYW1lLCBhcmdzKTtcbiAgICB9LFxuICAgIFwic3lzdGVtLmludm9rZUNvbW1hbmRcIjogYXN5bmMgKGN0eCwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gZWRpdG9yLnJ1bkNvbW1hbmRCeU5hbWUobmFtZSk7XG4gICAgfSxcbiAgICBcInN5c3RlbS5saXN0Q29tbWFuZHNcIjogYXN5bmMgKFxuICAgICAgY3R4LFxuICAgICk6IFByb21pc2U8eyBba2V5OiBzdHJpbmddOiBDb21tYW5kRGVmIH0+ID0+IHtcbiAgICAgIGxldCBhbGxDb21tYW5kczogeyBba2V5OiBzdHJpbmddOiBDb21tYW5kRGVmIH0gPSB7fTtcbiAgICAgIGZvciAobGV0IFtjbWQsIGRlZl0gb2YgZWRpdG9yLmNvbW1hbmRIb29rLmVkaXRvckNvbW1hbmRzKSB7XG4gICAgICAgIGFsbENvbW1hbmRzW2NtZF0gPSBkZWYuY29tbWFuZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhbGxDb21tYW5kcztcbiAgICB9LFxuICAgIFwic3lzdGVtLnJlbG9hZFBsdWdzXCI6IGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBlZGl0b3IucmVsb2FkUGx1Z3MoKTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmdldFNlcnZlckxvZ3NcIjogYXN5bmMgKGN0eCkgPT4ge1xuICAgICAgcmV0dXJuIGVkaXRvci5zcGFjZS5wcm94eVN5c2NhbGwoY3R4LnBsdWcsIFwic2FuZGJveC5nZXRMb2dzXCIsIFtdKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IEFwcENvbW1hbmQgfSBmcm9tIFwiLi9ob29rcy9jb21tYW5kLnRzXCI7XG5pbXBvcnQgeyBGaWx0ZXJPcHRpb24sIFBhZ2VNZXRhIH0gZnJvbSBcIi4uL2NvbW1vbi90eXBlcy50c1wiO1xuXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb24gPSB7XG4gIGlkOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdHlwZTogXCJpbmZvXCIgfCBcImVycm9yXCI7XG4gIGRhdGU6IERhdGU7XG59O1xuXG50eXBlIEVkaXRvck1vZGUgPSBcInJvXCIgfCBcInJ3XCI7XG5cbmV4cG9ydCB0eXBlIFBhbmVsTW9kZSA9IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgUGFuZWxDb25maWcgPSB7XG4gIG1vZGU/OiBQYW5lbE1vZGU7XG4gIGh0bWw/OiBzdHJpbmc7XG4gIHNjcmlwdD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFwcFZpZXdTdGF0ZSA9IHtcbiAgY3VycmVudFBhZ2U/OiBzdHJpbmc7XG4gIHBlcm06IEVkaXRvck1vZGU7XG4gIGZvcmNlZFJPTW9kZTogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzaG93UGFnZU5hdmlnYXRvcjogYm9vbGVhbjtcbiAgc2hvd0NvbW1hbmRQYWxldHRlOiBib29sZWFuO1xuICB1bnNhdmVkQ2hhbmdlczogYm9vbGVhbjtcbiAgcGFuZWxzOiB7IFtrZXk6IHN0cmluZ106IFBhbmVsQ29uZmlnIH07XG4gIGFsbFBhZ2VzOiBTZXQ8UGFnZU1ldGE+O1xuICBjb21tYW5kczogTWFwPHN0cmluZywgQXBwQ29tbWFuZD47XG4gIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbltdO1xuICByZWNlbnRDb21tYW5kczogTWFwPHN0cmluZywgRGF0ZT47XG5cbiAgc2hvd0ZpbHRlckJveDogYm9vbGVhbjtcbiAgZmlsdGVyQm94TGFiZWw6IHN0cmluZztcbiAgZmlsdGVyQm94UGxhY2VIb2xkZXI6IHN0cmluZztcbiAgZmlsdGVyQm94T3B0aW9uczogRmlsdGVyT3B0aW9uW107XG4gIGZpbHRlckJveEhlbHBUZXh0OiBzdHJpbmc7XG4gIGZpbHRlckJveE9uU2VsZWN0OiAob3B0aW9uOiBGaWx0ZXJPcHRpb24gfCB1bmRlZmluZWQpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbFZpZXdTdGF0ZTogQXBwVmlld1N0YXRlID0ge1xuICBwZXJtOiBcInJ3XCIsXG4gIGZvcmNlZFJPTW9kZTogZmFsc2UsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIHNob3dQYWdlTmF2aWdhdG9yOiBmYWxzZSxcbiAgc2hvd0NvbW1hbmRQYWxldHRlOiBmYWxzZSxcbiAgdW5zYXZlZENoYW5nZXM6IGZhbHNlLFxuICBwYW5lbHM6IHtcbiAgICBsaHM6IHt9LFxuICAgIHJoczoge30sXG4gICAgYmhzOiB7fSxcbiAgICBtb2RhbDoge30sXG4gIH0sXG4gIGFsbFBhZ2VzOiBuZXcgU2V0KCksXG4gIGNvbW1hbmRzOiBuZXcgTWFwKCksXG4gIHJlY2VudENvbW1hbmRzOiBuZXcgTWFwKCksXG4gIG5vdGlmaWNhdGlvbnM6IFtdLFxuICBzaG93RmlsdGVyQm94OiBmYWxzZSxcbiAgZmlsdGVyQm94SGVscFRleHQ6IFwiXCIsXG4gIGZpbHRlckJveExhYmVsOiBcIlwiLFxuICBmaWx0ZXJCb3hPblNlbGVjdDogKCkgPT4ge30sXG4gIGZpbHRlckJveE9wdGlvbnM6IFtdLFxuICBmaWx0ZXJCb3hQbGFjZUhvbGRlcjogXCJcIixcbn07XG5cbmV4cG9ydCB0eXBlIEFjdGlvbiA9XG4gIHwgeyB0eXBlOiBcInBhZ2UtbG9hZGVkXCI7IG1ldGE6IFBhZ2VNZXRhIH1cbiAgfCB7IHR5cGU6IFwicGFnZS1sb2FkaW5nXCI7IG5hbWU6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcInBhZ2VzLWxpc3RlZFwiOyBwYWdlczogU2V0PFBhZ2VNZXRhPiB9XG4gIHwgeyB0eXBlOiBcInBhZ2UtY2hhbmdlZFwiIH1cbiAgfCB7IHR5cGU6IFwicGFnZS1zYXZlZFwiIH1cbiAgfCB7IHR5cGU6IFwic3RhcnQtbmF2aWdhdGVcIiB9XG4gIHwgeyB0eXBlOiBcInN0b3AtbmF2aWdhdGVcIiB9XG4gIHwge1xuICAgIHR5cGU6IFwidXBkYXRlLWNvbW1hbmRzXCI7XG4gICAgY29tbWFuZHM6IE1hcDxzdHJpbmcsIEFwcENvbW1hbmQ+O1xuICB9XG4gIHwgeyB0eXBlOiBcInNob3ctcGFsZXR0ZVwiOyBjb250ZXh0Pzogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwiaGlkZS1wYWxldHRlXCIgfVxuICB8IHsgdHlwZTogXCJzaG93LW5vdGlmaWNhdGlvblwiOyBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbiB9XG4gIHwgeyB0eXBlOiBcImRpc21pc3Mtbm90aWZpY2F0aW9uXCI7IGlkOiBudW1iZXIgfVxuICB8IHtcbiAgICB0eXBlOiBcInNob3ctcGFuZWxcIjtcbiAgICBpZDogXCJyaHNcIiB8IFwibGhzXCIgfCBcImJoc1wiIHwgXCJtb2RhbFwiO1xuICAgIGNvbmZpZzogUGFuZWxDb25maWc7XG4gIH1cbiAgfCB7IHR5cGU6IFwiaGlkZS1wYW5lbFwiOyBpZDogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwiY29tbWFuZC1ydW5cIjsgY29tbWFuZDogc3RyaW5nIH1cbiAgfCB7XG4gICAgdHlwZTogXCJzaG93LWZpbHRlcmJveFwiO1xuICAgIG9wdGlvbnM6IEZpbHRlck9wdGlvbltdO1xuICAgIHBsYWNlSG9sZGVyOiBzdHJpbmc7XG4gICAgaGVscFRleHQ6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIG9uU2VsZWN0OiAob3B0aW9uOiBGaWx0ZXJPcHRpb24gfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIH1cbiAgfCB7IHR5cGU6IFwiaGlkZS1maWx0ZXJib3hcIiB9XG4gIHwgeyB0eXBlOiBcInNldC1lZGl0b3Itcm9cIjsgZW5hYmxlZDogYm9vbGVhbiB9O1xuIiwgImltcG9ydCBSZWFjdERPTSBmcm9tIFwiaHR0cHM6Ly9lc20uc2gvcmVhY3QtZG9tQDE3XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWR1Y2VyIH0gZnJvbSBcImh0dHBzOi8vZXNtLnNoL3JlYWN0QDE3XCI7XG5cbmltcG9ydCB7XG4gIGF1dG9jb21wbGV0aW9uLFxuICBjbG9zZUJyYWNrZXRzLFxuICBjbG9zZUJyYWNrZXRzS2V5bWFwLFxuICBjb21wbGV0aW9uS2V5bWFwLFxuICBDb21wbGV0aW9uUmVzdWx0LFxuICBkcmF3U2VsZWN0aW9uLFxuICBkcm9wQ3Vyc29yLFxuICBFZGl0b3JTZWxlY3Rpb24sXG4gIEVkaXRvclN0YXRlLFxuICBFZGl0b3JWaWV3LFxuICBoaWdobGlnaHRTcGVjaWFsQ2hhcnMsXG4gIGhpc3RvcnksXG4gIGhpc3RvcnlLZXltYXAsXG4gIGluZGVudE9uSW5wdXQsXG4gIGluZGVudFdpdGhUYWIsXG4gIGphdmFzY3JpcHRMYW5ndWFnZSxcbiAgS2V5QmluZGluZyxcbiAga2V5bWFwLFxuICBMYW5ndWFnZURlc2NyaXB0aW9uLFxuICBMYW5ndWFnZVN1cHBvcnQsXG4gIHJ1blNjb3BlSGFuZGxlcnMsXG4gIHNlYXJjaEtleW1hcCxcbiAgc3RhbmRhcmRLZXltYXAsXG4gIFN0cmVhbUxhbmd1YWdlLFxuICBzeW50YXhIaWdobGlnaHRpbmcsXG4gIHN5bnRheFRyZWUsXG4gIHR5cGVzY3JpcHRMYW5ndWFnZSxcbiAgVmlld1BsdWdpbixcbiAgVmlld1VwZGF0ZSxcbiAgeWFtbExhbmd1YWdlLFxufSBmcm9tIFwiLi4vLi4vZGVwX2NvbW1vbi50c1wiO1xuaW1wb3J0IHsgU2lsdmVyQnVsbGV0SG9va3MgfSBmcm9tIFwiLi4vY29tbW9uL21hbmlmZXN0LnRzXCI7XG4vLyBpbXBvcnQgeyBtYXJrZG93biB9IGZyb20gXCIuLi9jb21tb24vX21hcmtkb3duL2luZGV4LnRzXCI7XG5pbXBvcnQgeyBtYXJrZG93biB9IGZyb20gXCIuLi8uLi9kZXBfY29tbW9uLnRzXCI7XG5cbmltcG9ydCB7IGxvYWRNYXJrZG93bkV4dGVuc2lvbnMsIE1ERXh0IH0gZnJvbSBcIi4uL2NvbW1vbi9tYXJrZG93bl9leHQudHNcIjtcbmltcG9ydCBidWlsZE1hcmtkb3duIGZyb20gXCIuLi9jb21tb24vcGFyc2VyLnRzXCI7XG5pbXBvcnQgeyBTcGFjZSB9IGZyb20gXCIuLi9jb21tb24vc3BhY2VzL3NwYWNlLnRzXCI7XG5pbXBvcnQgeyBtYXJrZG93blN5c2NhbGxzIH0gZnJvbSBcIi4uL2NvbW1vbi9zeXNjYWxscy9tYXJrZG93bi50c1wiO1xuaW1wb3J0IHsgRmlsdGVyT3B0aW9uLCBQYWdlTWV0YSB9IGZyb20gXCIuLi9jb21tb24vdHlwZXMudHNcIjtcbmltcG9ydCB7IHNhZmVSdW4sIHRocm90dGxlIH0gZnJvbSBcIi4uL2NvbW1vbi91dGlsLnRzXCI7XG5pbXBvcnQgeyBjcmVhdGVTYW5kYm94IGFzIGNyZWF0ZUlGcmFtZVNhbmRib3ggfSBmcm9tIFwiLi4vcGx1Z29zL2Vudmlyb25tZW50cy93ZWJ3b3JrZXJfc2FuZGJveC50c1wiO1xuaW1wb3J0IHsgRXZlbnRIb29rIH0gZnJvbSBcIi4uL3BsdWdvcy9ob29rcy9ldmVudC50c1wiO1xuaW1wb3J0IHsgZXZlbnRTeXNjYWxscyB9IGZyb20gXCIuLi9wbHVnb3Mvc3lzY2FsbHMvZXZlbnQudHNcIjtcbmltcG9ydCBzYW5kYm94U3lzY2FsbHMgZnJvbSBcIi4uL3BsdWdvcy9zeXNjYWxscy9zYW5kYm94LnRzXCI7XG5pbXBvcnQgeyBTeXN0ZW0gfSBmcm9tIFwiLi4vcGx1Z29zL3N5c3RlbS50c1wiO1xuXG5pbXBvcnQgeyBBcHBFdmVudCwgQ2xpY2tFdmVudCB9IGZyb20gXCIuL2FwcF9ldmVudC50c1wiO1xuaW1wb3J0IHsgQ29tbWFuZFBhbGV0dGUgfSBmcm9tIFwiLi9jb21wb25lbnRzL2NvbW1hbmRfcGFsZXR0ZS50c3hcIjtcbmltcG9ydCB7IEZpbHRlckxpc3QgfSBmcm9tIFwiLi9jb21wb25lbnRzL2ZpbHRlci50c3hcIjtcbmltcG9ydCB7IFBhZ2VOYXZpZ2F0b3IgfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhZ2VfbmF2aWdhdG9yLnRzeFwiO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi9jb21wb25lbnRzL3BhbmVsLnRzeFwiO1xuaW1wb3J0IHsgVG9wQmFyIH0gZnJvbSBcIi4vY29tcG9uZW50cy90b3BfYmFyLnRzeFwiO1xuaW1wb3J0IHsgYXR0YWNobWVudEV4dGVuc2lvbiwgcGFzdGVMaW5rRXh0ZW5zaW9uIH0gZnJvbSBcIi4vZWRpdG9yX3Bhc3RlLnRzXCI7XG5pbXBvcnQgeyBDb21tYW5kSG9vayB9IGZyb20gXCIuL2hvb2tzL2NvbW1hbmQudHNcIjtcbmltcG9ydCB7IFNsYXNoQ29tbWFuZEhvb2sgfSBmcm9tIFwiLi9ob29rcy9zbGFzaF9jb21tYW5kLnRzXCI7XG5pbXBvcnQgeyBpbmxpbmVJbWFnZXNQbHVnaW4gfSBmcm9tIFwiLi9pbmxpbmVfaW1hZ2UudHNcIjtcbmltcG9ydCB7IGxpbmVXcmFwcGVyIH0gZnJvbSBcIi4vbGluZV93cmFwcGVyLnRzXCI7XG5pbXBvcnQgeyBQYXRoUGFnZU5hdmlnYXRvciB9IGZyb20gXCIuL25hdmlnYXRvci50c1wiO1xuaW1wb3J0IHJlZHVjZXIgZnJvbSBcIi4vcmVkdWNlci50c1wiO1xuaW1wb3J0IHsgc21hcnRRdW90ZUtleW1hcCB9IGZyb20gXCIuL3NtYXJ0X3F1b3Rlcy50c1wiO1xuaW1wb3J0IGN1c3RvbU1hcmtkb3duU3R5bGUgZnJvbSBcIi4vc3R5bGUudHNcIjtcbmltcG9ydCB7IGNsaWVudFN0b3JlU3lzY2FsbHMgfSBmcm9tIFwiLi9zeXNjYWxscy9jbGllbnRTdG9yZS50c1wiO1xuaW1wb3J0IHsgZWRpdG9yU3lzY2FsbHMgfSBmcm9tIFwiLi9zeXNjYWxscy9lZGl0b3IudHNcIjtcbmltcG9ydCB7IGZ1bGx0ZXh0U3lzY2FsbHMgfSBmcm9tIFwiLi9zeXNjYWxscy9mdWxsdGV4dC50c1wiO1xuaW1wb3J0IHsgaW5kZXhlclN5c2NhbGxzIH0gZnJvbSBcIi4vc3lzY2FsbHMvaW5kZXgudHNcIjtcbmltcG9ydCB7IHNwYWNlU3lzY2FsbHMgfSBmcm9tIFwiLi9zeXNjYWxscy9zcGFjZS50c1wiO1xuaW1wb3J0IHsgc3RvcmVTeXNjYWxscyB9IGZyb20gXCIuL3N5c2NhbGxzL3N0b3JlLnRzXCI7XG5pbXBvcnQgeyBzeXN0ZW1TeXNjYWxscyB9IGZyb20gXCIuL3N5c2NhbGxzL3N5c3RlbS50c1wiO1xuaW1wb3J0IHsgQWN0aW9uLCBBcHBWaWV3U3RhdGUsIGluaXRpYWxWaWV3U3RhdGUgfSBmcm9tIFwiLi90eXBlcy50c1wiO1xuXG5jbGFzcyBQYWdlU3RhdGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBzY3JvbGxUb3A6IG51bWJlcixcbiAgICByZWFkb25seSBzZWxlY3Rpb246IEVkaXRvclNlbGVjdGlvbixcbiAgKSB7fVxufVxuXG5jb25zdCBzYXZlSW50ZXJ2YWwgPSAxMDAwO1xuXG4vLyBNb25rZXkgcGF0Y2hpbmcgdGhlIGxhbmd1YWdlRGF0YUF0LCBzb21laG93IHRoZSBsYW5ndWFnZURhdGEgZmFjZXQgaXMgbm90IHNldFxuLy8gcHJvcGVybHksIG5vIGlkZWEgd2h5XG5cbi8vIFRPRE86IFJlbW92ZSBhdCBzb21lIHBvaW50XG4vLyBFZGl0b3JTdGF0ZS5wcm90b3R5cGUubGFuZ3VhZ2VEYXRhQXQgPSBmdW5jdGlvbiAoXG4vLyAgIG5hbWU6IHN0cmluZyxcbi8vICAgcG9zOiBudW1iZXIsXG4vLyAgIHNpZGUgPSAtMSxcbi8vICkge1xuLy8gICBsZXQgdmFsdWVzID0gW107XG4vLyAgIC8vIGNvbnNvbGUubG9nKFwiR2V0dGluZyBsYW5ndWFnZSBkYXRhXCIpO1xuLy8gICAvLyBAdHMtaWdub3JlXG4vLyAgIGZvciAobGV0IHByb3ZpZGVyIG9mIHRoaXMuZmFjZXQoRWRpdG9yU3RhdGUubGFuZ3VhZ2VEYXRhKSkge1xuLy8gICAgIGxldCBwcm92aWRlclJlc3VsdCA9IHByb3ZpZGVyKHRoaXMsIHBvcywgc2lkZSk7XG4vLyAgICAgaWYgKCFwcm92aWRlclJlc3VsdCkge1xuLy8gICAgICAgLy8gY29uc29sZS5sb2coXCJFbXB0eSBwcm92aWRlciByZXN1bHRcIik7XG4vLyAgICAgICBjb250aW51ZTtcbi8vICAgICB9XG4vLyAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHByb3ZpZGVyUmVzdWx0KSB7XG4vLyAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwgbmFtZSkpIHtcbi8vICAgICAgICAgdmFsdWVzLnB1c2gocmVzdWx0W25hbWVdKTtcbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH1cbi8vICAgcmV0dXJuIHZhbHVlcztcbi8vIH07XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3Ige1xuICByZWFkb25seSBjb21tYW5kSG9vazogQ29tbWFuZEhvb2s7XG4gIHJlYWRvbmx5IHNsYXNoQ29tbWFuZEhvb2s6IFNsYXNoQ29tbWFuZEhvb2s7XG4gIG9wZW5QYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBQYWdlU3RhdGU+KCk7XG4gIGVkaXRvclZpZXc/OiBFZGl0b3JWaWV3O1xuICB2aWV3U3RhdGU6IEFwcFZpZXdTdGF0ZTtcbiAgdmlld0Rpc3BhdGNoOiBSZWFjdC5EaXNwYXRjaDxBY3Rpb24+O1xuICBzcGFjZTogU3BhY2U7XG4gIHBhZ2VOYXZpZ2F0b3I6IFBhdGhQYWdlTmF2aWdhdG9yO1xuICBldmVudEhvb2s6IEV2ZW50SG9vaztcbiAgc2F2ZVRpbWVvdXQ6IGFueTtcbiAgZGVib3VuY2VkVXBkYXRlRXZlbnQgPSB0aHJvdHRsZSgoKSA9PiB7XG4gICAgdGhpcy5ldmVudEhvb2tcbiAgICAgIC5kaXNwYXRjaEV2ZW50KFwiZWRpdG9yOnVwZGF0ZWRcIilcbiAgICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcihcIkVycm9yIGRpc3BhdGNoaW5nIGVkaXRvcjp1cGRhdGVkIGV2ZW50XCIsIGUpKTtcbiAgfSwgMTAwMCk7XG4gIHByaXZhdGUgc3lzdGVtID0gbmV3IFN5c3RlbTxTaWx2ZXJCdWxsZXRIb29rcz4oXCJjbGllbnRcIik7XG4gIHByaXZhdGUgbWRFeHRlbnNpb25zOiBNREV4dFtdID0gW107XG4gIHVybFByZWZpeDogc3RyaW5nO1xuICBpbmRleFBhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzcGFjZTogU3BhY2UsXG4gICAgcGFyZW50OiBFbGVtZW50LFxuICAgIHVybFByZWZpeDogc3RyaW5nLFxuICAgIGluZGV4UGFnZTogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLnNwYWNlID0gc3BhY2U7XG4gICAgdGhpcy51cmxQcmVmaXggPSB1cmxQcmVmaXg7XG4gICAgdGhpcy52aWV3U3RhdGUgPSBpbml0aWFsVmlld1N0YXRlO1xuICAgIHRoaXMudmlld0Rpc3BhdGNoID0gKCkgPT4ge307XG4gICAgdGhpcy5pbmRleFBhZ2UgPSBpbmRleFBhZ2U7XG5cbiAgICAvLyBFdmVudCBob29rXG4gICAgdGhpcy5ldmVudEhvb2sgPSBuZXcgRXZlbnRIb29rKCk7XG4gICAgdGhpcy5zeXN0ZW0uYWRkSG9vayh0aGlzLmV2ZW50SG9vayk7XG5cbiAgICAvLyBDb21tYW5kIGhvb2tcbiAgICB0aGlzLmNvbW1hbmRIb29rID0gbmV3IENvbW1hbmRIb29rKCk7XG4gICAgdGhpcy5jb21tYW5kSG9vay5vbih7XG4gICAgICBjb21tYW5kc1VwZGF0ZWQ6IChjb21tYW5kTWFwKSA9PiB7XG4gICAgICAgIHRoaXMudmlld0Rpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBcInVwZGF0ZS1jb21tYW5kc1wiLFxuICAgICAgICAgIGNvbW1hbmRzOiBjb21tYW5kTWFwLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5zeXN0ZW0uYWRkSG9vayh0aGlzLmNvbW1hbmRIb29rKTtcblxuICAgIC8vIFNsYXNoIGNvbW1hbmQgaG9va1xuICAgIHRoaXMuc2xhc2hDb21tYW5kSG9vayA9IG5ldyBTbGFzaENvbW1hbmRIb29rKHRoaXMpO1xuICAgIHRoaXMuc3lzdGVtLmFkZEhvb2sodGhpcy5zbGFzaENvbW1hbmRIb29rKTtcblxuICAgIHRoaXMucmVuZGVyKHBhcmVudCk7XG4gICAgdGhpcy5lZGl0b3JWaWV3ID0gbmV3IEVkaXRvclZpZXcoe1xuICAgICAgc3RhdGU6IHRoaXMuY3JlYXRlRWRpdG9yU3RhdGUoXCJcIiwgXCJcIiksXG4gICAgICBwYXJlbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2ItZWRpdG9yXCIpISxcbiAgICB9KTtcbiAgICB0aGlzLnBhZ2VOYXZpZ2F0b3IgPSBuZXcgUGF0aFBhZ2VOYXZpZ2F0b3IoaW5kZXhQYWdlLCB1cmxQcmVmaXgpO1xuXG4gICAgdGhpcy5zeXN0ZW0ucmVnaXN0ZXJTeXNjYWxscyhcbiAgICAgIFtdLFxuICAgICAgZXZlbnRTeXNjYWxscyh0aGlzLmV2ZW50SG9vayksXG4gICAgICBlZGl0b3JTeXNjYWxscyh0aGlzKSxcbiAgICAgIHNwYWNlU3lzY2FsbHModGhpcyksXG4gICAgICBpbmRleGVyU3lzY2FsbHModGhpcy5zcGFjZSksXG4gICAgICBmdWxsdGV4dFN5c2NhbGxzKHRoaXMuc3BhY2UpLFxuICAgICAgc3lzdGVtU3lzY2FsbHModGhpcyksXG4gICAgICBtYXJrZG93blN5c2NhbGxzKGJ1aWxkTWFya2Rvd24odGhpcy5tZEV4dGVuc2lvbnMpKSxcbiAgICAgIGNsaWVudFN0b3JlU3lzY2FsbHMoKSxcbiAgICAgIHN0b3JlU3lzY2FsbHModGhpcy5zcGFjZSksXG4gICAgICBzYW5kYm94U3lzY2FsbHModGhpcy5zeXN0ZW0pLFxuICAgICk7XG5cbiAgICAvLyBNYWtlIGtleWJvYXJkIHNob3J0Y3V0cyB3b3JrIGV2ZW4gd2hlbiB0aGUgZWRpdG9yIGlzIGluIHJlYWQgb25seSBtb2RlIG9yIG5vdCBmb2N1c2VkXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChldikgPT4ge1xuICAgICAgaWYgKCF0aGlzLmVkaXRvclZpZXc/Lmhhc0ZvY3VzKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAvLyAgIFwiV2luZG93LWxldmVsIGtleWJvYXJkIGV2ZW50XCIsXG4gICAgICAgIC8vICAgZXZcbiAgICAgICAgLy8gKTtcbiAgICAgICAgaWYgKChldi50YXJnZXQgYXMgYW55KS5jbGFzc0xpc3QuY29udGFpbnMoXCJjbS10ZXh0ZmllbGRcIikpIHtcbiAgICAgICAgICAvLyBTZWFyY2ggJiByZXBsYWNlIGZlYXR1cmUsIGlnbm9yZSB0aGlzXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydW5TY29wZUhhbmRsZXJzKHRoaXMuZWRpdG9yVmlldyEsIGV2LCBcImVkaXRvclwiKSkge1xuICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCAoZXYpID0+IHtcbiAgICAgIC8vIExhdW5jaCB0aGUgY29tbWFuZCBwYWxldHRlIHVzaW5nIGEgdGhyZWUtZmluZ2VyIHRhcFxuICAgICAgaWYgKGV2LnRvdWNoZXMubGVuZ3RoID4gMikge1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy52aWV3RGlzcGF0Y2goeyB0eXBlOiBcInNob3ctcGFsZXR0ZVwiIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRQYWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudmlld1N0YXRlLmN1cnJlbnRQYWdlO1xuICB9XG5cbiAgYXN5bmMgaW5pdCgpIHtcbiAgICB0aGlzLmZvY3VzKCk7XG5cbiAgICB0aGlzLnBhZ2VOYXZpZ2F0b3Iuc3Vic2NyaWJlKGFzeW5jIChwYWdlTmFtZSwgcG9zOiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiTm93IG5hdmlnYXRpbmcgdG9cIiwgcGFnZU5hbWUpO1xuXG4gICAgICBpZiAoIXRoaXMuZWRpdG9yVmlldykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBzdGF0ZVJlc3RvcmVkID0gYXdhaXQgdGhpcy5sb2FkUGFnZShwYWdlTmFtZSk7XG4gICAgICBpZiAocG9zKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcG9zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJOYXZpZ2F0aW5nIHRvIGFuY2hvclwiLCBwb3MpO1xuXG4gICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gbG9vayB1cCB0aGUgYW5jaG9yIHRocm91Z2ggYSBkaXJlY3QgcGFnZSBzdG9yZSBxdWVyeS4uLlxuICAgICAgICAgIGxldCBwb3NMb29rdXAgPSBhd2FpdCB0aGlzLnN5c3RlbS5sb2NhbFN5c2NhbGwoXCJjb3JlXCIsIFwiaW5kZXguZ2V0XCIsIFtcbiAgICAgICAgICAgIHBhZ2VOYW1lLFxuICAgICAgICAgICAgYGE6JHtwYWdlTmFtZX06QCR7cG9zfWAsXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBpZiAoIXBvc0xvb2t1cCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmxhc2hOb3RpZmljYXRpb24oXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBhbmNob3IgQCR7cG9zfWAsXG4gICAgICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvcyA9ICtwb3NMb29rdXA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yVmlldy5kaXNwYXRjaCh7XG4gICAgICAgICAgc2VsZWN0aW9uOiB7IGFuY2hvcjogcG9zIH0sXG4gICAgICAgICAgc2Nyb2xsSW50b1ZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICghc3RhdGVSZXN0b3JlZCkge1xuICAgICAgICB0aGlzLmVkaXRvclZpZXcuZGlzcGF0Y2goe1xuICAgICAgICAgIHNlbGVjdGlvbjogeyBhbmNob3I6IDAgfSxcbiAgICAgICAgICBzY3JvbGxJbnRvVmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgZ2xvYmFsTW9kdWxlczogYW55ID0gYXdhaXQgKFxuICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy51cmxQcmVmaXh9L2dsb2JhbC5wbHVnLmpzb25gKVxuICAgICkuanNvbigpO1xuXG4gICAgdGhpcy5zeXN0ZW0ub24oe1xuICAgICAgcGx1Z0xvYWRlZDogKHBsdWcpID0+IHtcbiAgICAgICAgc2FmZVJ1bihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGxldCBbbW9kTmFtZSwgY29kZV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgICAgIGdsb2JhbE1vZHVsZXMuZGVwZW5kZW5jaWVzLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgYXdhaXQgcGx1Zy5zYW5kYm94LmxvYWREZXBlbmRlbmN5KG1vZE5hbWUsIGNvZGUgYXMgc3RyaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuc3BhY2Uub24oe1xuICAgICAgcGFnZUNoYW5nZWQ6IChtZXRhKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09PSBtZXRhLm5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIlBhZ2UgY2hhbmdlZCBvbiBkaXNrLCByZWxvYWRpbmdcIik7XG4gICAgICAgICAgdGhpcy5mbGFzaE5vdGlmaWNhdGlvbihcIlBhZ2UgY2hhbmdlZCBvbiBkaXNrLCByZWxvYWRpbmdcIik7XG4gICAgICAgICAgdGhpcy5yZWxvYWRQYWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwYWdlTGlzdFVwZGF0ZWQ6IChwYWdlcykgPT4ge1xuICAgICAgICB0aGlzLnZpZXdEaXNwYXRjaCh7XG4gICAgICAgICAgdHlwZTogXCJwYWdlcy1saXN0ZWRcIixcbiAgICAgICAgICBwYWdlczogcGFnZXMsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMucmVsb2FkUGx1Z3MoKTtcbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoQXBwRXZlbnQoXCJlZGl0b3I6aW5pdFwiKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoaW1tZWRpYXRlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnZpZXdTdGF0ZS51bnNhdmVkQ2hhbmdlcykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2F2ZVRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2F2ZVRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zYXZlVGltZW91dCA9IHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTYXZpbmcgcGFnZVwiLCB0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgIHRoaXMuc3BhY2VcbiAgICAgICAgICAgICAgLndyaXRlUGFnZShcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yVmlldyEuc3RhdGUuc2xpY2VEb2MoMCksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3RGlzcGF0Y2goeyB0eXBlOiBcInBhZ2Utc2F2ZWRcIiB9KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhc2hOb3RpZmljYXRpb24oXG4gICAgICAgICAgICAgICAgICBcIkNvdWxkIG5vdCBzYXZlIHBhZ2UsIHJldHJ5aW5nIGFnYWluIGluIDEwIHNlY29uZHNcIixcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuc2F2ZS5iaW5kKHRoaXMpLCAxMDAwMCk7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaW1tZWRpYXRlID8gMCA6IHNhdmVJbnRlcnZhbCxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBmbGFzaE5vdGlmaWNhdGlvbihtZXNzYWdlOiBzdHJpbmcsIHR5cGU6IFwiaW5mb1wiIHwgXCJlcnJvclwiID0gXCJpbmZvXCIpIHtcbiAgICBsZXQgaWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcbiAgICB0aGlzLnZpZXdEaXNwYXRjaCh7XG4gICAgICB0eXBlOiBcInNob3ctbm90aWZpY2F0aW9uXCIsXG4gICAgICBub3RpZmljYXRpb246IHtcbiAgICAgICAgaWQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMudmlld0Rpc3BhdGNoKHtcbiAgICAgICAgICB0eXBlOiBcImRpc21pc3Mtbm90aWZpY2F0aW9uXCIsXG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB0eXBlID09PSBcImluZm9cIiA/IDIwMDAgOiA1MDAwLFxuICAgICk7XG4gIH1cblxuICBmaWx0ZXJCb3goXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBGaWx0ZXJPcHRpb25bXSxcbiAgICBoZWxwVGV4dDogc3RyaW5nID0gXCJcIixcbiAgICBwbGFjZUhvbGRlcjogc3RyaW5nID0gXCJcIixcbiAgKTogUHJvbWlzZTxGaWx0ZXJPcHRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMudmlld0Rpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogXCJzaG93LWZpbHRlcmJveFwiLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgcGxhY2VIb2xkZXIsXG4gICAgICAgIGhlbHBUZXh0LFxuICAgICAgICBvblNlbGVjdDogKG9wdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMudmlld0Rpc3BhdGNoKHsgdHlwZTogXCJoaWRlLWZpbHRlcmJveFwiIH0pO1xuICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICByZXNvbHZlKG9wdGlvbik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRpc3BhdGNoQXBwRXZlbnQobmFtZTogQXBwRXZlbnQsIGRhdGE/OiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRIb29rLmRpc3BhdGNoRXZlbnQobmFtZSwgZGF0YSk7XG4gIH1cblxuICBjcmVhdGVFZGl0b3JTdGF0ZShwYWdlTmFtZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBFZGl0b3JTdGF0ZSB7XG4gICAgbGV0IGNvbW1hbmRLZXlCaW5kaW5nczogS2V5QmluZGluZ1tdID0gW107XG4gICAgZm9yIChsZXQgZGVmIG9mIHRoaXMuY29tbWFuZEhvb2suZWRpdG9yQ29tbWFuZHMudmFsdWVzKCkpIHtcbiAgICAgIGlmIChkZWYuY29tbWFuZC5rZXkpIHtcbiAgICAgICAgY29tbWFuZEtleUJpbmRpbmdzLnB1c2goe1xuICAgICAgICAgIGtleTogZGVmLmNvbW1hbmQua2V5LFxuICAgICAgICAgIG1hYzogZGVmLmNvbW1hbmQubWFjLFxuICAgICAgICAgIHJ1bjogKCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgaWYgKGRlZi5jb21tYW5kLmNvbnRleHRzKSB7XG4gICAgICAgICAgICAgIGxldCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG4gICAgICAgICAgICAgIGlmICghY29udGV4dCB8fCAhZGVmLmNvbW1hbmQuY29udGV4dHMuaW5jbHVkZXMoY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgICAgIC50aGVuKGRlZi5ydW4pXG4gICAgICAgICAgICAgIC5jYXRjaCgoZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXNoTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgICAgICAgYEVycm9yIHJ1bm5pbmcgY29tbWFuZDogJHtlLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQWx3YXlzIGJlIGZvY3VzaW5nIHRoZSBlZGl0b3IgYWZ0ZXIgcnVubmluZyBhIGNvbW1hbmRcbiAgICAgICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcztcbiAgICByZXR1cm4gRWRpdG9yU3RhdGUuY3JlYXRlKHtcbiAgICAgIGRvYzogdGV4dCxcbiAgICAgIGV4dGVuc2lvbnM6IFtcbiAgICAgICAgbWFya2Rvd24oe1xuICAgICAgICAgIGJhc2U6IGJ1aWxkTWFya2Rvd24odGhpcy5tZEV4dGVuc2lvbnMpLFxuICAgICAgICAgIGNvZGVMYW5ndWFnZXM6IFtcbiAgICAgICAgICAgIExhbmd1YWdlRGVzY3JpcHRpb24ub2Yoe1xuICAgICAgICAgICAgICBuYW1lOiBcInlhbWxcIixcbiAgICAgICAgICAgICAgYWxpYXM6IFtcIm1ldGFcIiwgXCJkYXRhXCJdLFxuICAgICAgICAgICAgICBzdXBwb3J0OiBuZXcgTGFuZ3VhZ2VTdXBwb3J0KFN0cmVhbUxhbmd1YWdlLmRlZmluZSh5YW1sTGFuZ3VhZ2UpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgTGFuZ3VhZ2VEZXNjcmlwdGlvbi5vZih7XG4gICAgICAgICAgICAgIG5hbWU6IFwiamF2YXNjcmlwdFwiLFxuICAgICAgICAgICAgICBhbGlhczogW1wianNcIl0sXG4gICAgICAgICAgICAgIHN1cHBvcnQ6IG5ldyBMYW5ndWFnZVN1cHBvcnQoamF2YXNjcmlwdExhbmd1YWdlKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgTGFuZ3VhZ2VEZXNjcmlwdGlvbi5vZih7XG4gICAgICAgICAgICAgIG5hbWU6IFwidHlwZXNjcmlwdFwiLFxuICAgICAgICAgICAgICBhbGlhczogW1widHNcIl0sXG4gICAgICAgICAgICAgIHN1cHBvcnQ6IG5ldyBMYW5ndWFnZVN1cHBvcnQodHlwZXNjcmlwdExhbmd1YWdlKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWRkS2V5bWFwOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICAgc3ludGF4SGlnaGxpZ2h0aW5nKGN1c3RvbU1hcmtkb3duU3R5bGUodGhpcy5tZEV4dGVuc2lvbnMpKSxcbiAgICAgICAgYXV0b2NvbXBsZXRpb24oe1xuICAgICAgICAgIG92ZXJyaWRlOiBbXG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlci5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdGhpcy5zbGFzaENvbW1hbmRIb29rLnNsYXNoQ29tbWFuZENvbXBsZXRlci5iaW5kKFxuICAgICAgICAgICAgICB0aGlzLnNsYXNoQ29tbWFuZEhvb2ssXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgICBpbmxpbmVJbWFnZXNQbHVnaW4oKSxcbiAgICAgICAgaGlnaGxpZ2h0U3BlY2lhbENoYXJzKCksXG4gICAgICAgIGhpc3RvcnkoKSxcbiAgICAgICAgZHJhd1NlbGVjdGlvbigpLFxuICAgICAgICBkcm9wQ3Vyc29yKCksXG4gICAgICAgIGluZGVudE9uSW5wdXQoKSxcbiAgICAgICAgRWRpdG9yVmlldy5saW5lV3JhcHBpbmcsXG4gICAgICAgIGxpbmVXcmFwcGVyKFtcbiAgICAgICAgICB7IHNlbGVjdG9yOiBcIkFUWEhlYWRpbmcxXCIsIGNsYXNzOiBcInNiLWxpbmUtaDFcIiB9LFxuICAgICAgICAgIHsgc2VsZWN0b3I6IFwiQVRYSGVhZGluZzJcIiwgY2xhc3M6IFwic2ItbGluZS1oMlwiIH0sXG4gICAgICAgICAgeyBzZWxlY3RvcjogXCJBVFhIZWFkaW5nM1wiLCBjbGFzczogXCJzYi1saW5lLWgzXCIgfSxcbiAgICAgICAgICB7IHNlbGVjdG9yOiBcIkxpc3RJdGVtXCIsIGNsYXNzOiBcInNiLWxpbmUtbGlcIiwgbmVzdGluZzogdHJ1ZSB9LFxuICAgICAgICAgIHsgc2VsZWN0b3I6IFwiQmxvY2txdW90ZVwiLCBjbGFzczogXCJzYi1saW5lLWJsb2NrcXVvdGVcIiB9LFxuICAgICAgICAgIHsgc2VsZWN0b3I6IFwiVGFza1wiLCBjbGFzczogXCJzYi1saW5lLXRhc2tcIiB9LFxuICAgICAgICAgIHsgc2VsZWN0b3I6IFwiQ29kZUJsb2NrXCIsIGNsYXNzOiBcInNiLWxpbmUtY29kZVwiIH0sXG4gICAgICAgICAgeyBzZWxlY3RvcjogXCJGZW5jZWRDb2RlXCIsIGNsYXNzOiBcInNiLWxpbmUtZmVuY2VkLWNvZGVcIiB9LFxuICAgICAgICAgIHsgc2VsZWN0b3I6IFwiQ29tbWVudFwiLCBjbGFzczogXCJzYi1saW5lLWNvbW1lbnRcIiB9LFxuICAgICAgICAgIHsgc2VsZWN0b3I6IFwiQnVsbGV0TGlzdFwiLCBjbGFzczogXCJzYi1saW5lLXVsXCIgfSxcbiAgICAgICAgICB7IHNlbGVjdG9yOiBcIk9yZGVyZWRMaXN0XCIsIGNsYXNzOiBcInNiLWxpbmUtb2xcIiB9LFxuICAgICAgICAgIHsgc2VsZWN0b3I6IFwiVGFibGVIZWFkZXJcIiwgY2xhc3M6IFwic2ItbGluZS10YmwtaGVhZGVyXCIgfSxcbiAgICAgICAgXSksXG4gICAgICAgIGtleW1hcC5vZihbXG4gICAgICAgICAgLi4uc21hcnRRdW90ZUtleW1hcCxcbiAgICAgICAgICAuLi5jbG9zZUJyYWNrZXRzS2V5bWFwLFxuICAgICAgICAgIC4uLnN0YW5kYXJkS2V5bWFwLFxuICAgICAgICAgIC4uLnNlYXJjaEtleW1hcCxcbiAgICAgICAgICAuLi5oaXN0b3J5S2V5bWFwLFxuICAgICAgICAgIC4uLmNvbXBsZXRpb25LZXltYXAsXG4gICAgICAgICAgaW5kZW50V2l0aFRhYixcbiAgICAgICAgICAuLi5jb21tYW5kS2V5QmluZGluZ3MsXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcIkN0cmwta1wiLFxuICAgICAgICAgICAgbWFjOiBcIkNtZC1rXCIsXG4gICAgICAgICAgICBydW46ICgpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgICAgdGhpcy52aWV3RGlzcGF0Y2goeyB0eXBlOiBcInN0YXJ0LW5hdmlnYXRlXCIgfSk7XG4gICAgICAgICAgICAgIHRoaXMuc3BhY2UudXBkYXRlUGFnZUxpc3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcIkN0cmwtL1wiLFxuICAgICAgICAgICAgbWFjOiBcIkNtZC0vXCIsXG4gICAgICAgICAgICBydW46ICgpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgICAgbGV0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICAgICAgICAgICAgdGhpcy52aWV3RGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic2hvdy1wYWxldHRlXCIsXG4gICAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJDdHJsLWxcIixcbiAgICAgICAgICAgIG1hYzogXCJDbWQtbFwiLFxuICAgICAgICAgICAgcnVuOiAoKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZWRpdG9yVmlldz8uZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIGVmZmVjdHM6IFtcbiAgICAgICAgICAgICAgICAgIEVkaXRvclZpZXcuc2Nyb2xsSW50b1ZpZXcoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yVmlldy5zdGF0ZS5zZWxlY3Rpb24ubWFpbi5hbmNob3IsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB5OiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pLFxuXG4gICAgICAgIEVkaXRvclZpZXcuZG9tRXZlbnRIYW5kbGVycyh7XG4gICAgICAgICAgY2xpY2s6IChldmVudDogTW91c2VFdmVudCwgdmlldzogRWRpdG9yVmlldykgPT4ge1xuICAgICAgICAgICAgc2FmZVJ1bihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBjbGlja0V2ZW50OiBDbGlja0V2ZW50ID0ge1xuICAgICAgICAgICAgICAgIHBhZ2U6IHBhZ2VOYW1lLFxuICAgICAgICAgICAgICAgIGN0cmxLZXk6IGV2ZW50LmN0cmxLZXksXG4gICAgICAgICAgICAgICAgbWV0YUtleTogZXZlbnQubWV0YUtleSxcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2ZW50LmFsdEtleSxcbiAgICAgICAgICAgICAgICBwb3M6IHZpZXcucG9zQXRDb29yZHMoZXZlbnQpISxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaEFwcEV2ZW50KFwicGFnZTpjbGlja1wiLCBjbGlja0V2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBWaWV3UGx1Z2luLmZyb21DbGFzcyhcbiAgICAgICAgICBjbGFzcyB7XG4gICAgICAgICAgICB1cGRhdGUodXBkYXRlOiBWaWV3VXBkYXRlKTogdm9pZCB7XG4gICAgICAgICAgICAgIGlmICh1cGRhdGUuZG9jQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIGVkaXRvci52aWV3RGlzcGF0Y2goeyB0eXBlOiBcInBhZ2UtY2hhbmdlZFwiIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5kZWJvdW5jZWRVcGRhdGVFdmVudCgpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zYXZlKCkuY2F0Y2goKGUpID0+IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzYXZpbmdcIiwgZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICAgcGFzdGVMaW5rRXh0ZW5zaW9uLFxuICAgICAgICBhdHRhY2htZW50RXh0ZW5zaW9uKHRoaXMpLFxuICAgICAgICBjbG9zZUJyYWNrZXRzKCksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkUGx1Z3MoKSB7XG4gICAgY29uc29sZS5sb2coXCJMb2FkaW5nIHBsdWdzXCIpO1xuICAgIGF3YWl0IHRoaXMuc3BhY2UudXBkYXRlUGFnZUxpc3QoKTtcbiAgICBhd2FpdCB0aGlzLnN5c3RlbS51bmxvYWRBbGwoKTtcbiAgICBjb25zb2xlLmxvZyhcIihSZSlsb2FkaW5nIHBsdWdzXCIpO1xuICAgIGZvciAobGV0IHBsdWdOYW1lIG9mIGF3YWl0IHRoaXMuc3BhY2UubGlzdFBsdWdzKCkpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiTG9hZGluZyBwbHVnXCIsIHBhZ2VJbmZvLm5hbWUpO1xuICAgICAgbGV0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5zcGFjZS5yZWFkQXR0YWNobWVudChwbHVnTmFtZSwgXCJzdHJpbmdcIik7XG4gICAgICBhd2FpdCB0aGlzLnN5c3RlbS5sb2FkKEpTT04ucGFyc2UoZGF0YSBhcyBzdHJpbmcpLCBjcmVhdGVJRnJhbWVTYW5kYm94KTtcbiAgICB9XG4gICAgdGhpcy5yZWJ1aWxkRWRpdG9yU3RhdGUoKTtcbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoQXBwRXZlbnQoXCJwbHVnczpsb2FkZWRcIik7XG4gIH1cblxuICByZWJ1aWxkRWRpdG9yU3RhdGUoKSB7XG4gICAgY29uc3QgZWRpdG9yVmlldyA9IHRoaXMuZWRpdG9yVmlldztcbiAgICBjb25zb2xlLmxvZyhcIlJlYnVpbGRpbmcgZWRpdG9yIHN0YXRlXCIpO1xuICAgIGlmIChlZGl0b3JWaWV3ICYmIHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiR2V0dGluZyBhbGwgc3ludGF4IGV4dGVuc2lvbnNcIik7XG4gICAgICB0aGlzLm1kRXh0ZW5zaW9ucyA9IGxvYWRNYXJrZG93bkV4dGVuc2lvbnModGhpcy5zeXN0ZW0pO1xuXG4gICAgICAvLyBBbmQgcmVsb2FkIHRoZSBzeXNjYWxscyB0byB1c2UgdGhlIG5ldyBzeW50YXggZXh0ZW5zaW9uc1xuICAgICAgdGhpcy5zeXN0ZW0ucmVnaXN0ZXJTeXNjYWxscyhcbiAgICAgICAgW10sXG4gICAgICAgIG1hcmtkb3duU3lzY2FsbHMoYnVpbGRNYXJrZG93bih0aGlzLm1kRXh0ZW5zaW9ucykpLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5zYXZlU3RhdGUodGhpcy5jdXJyZW50UGFnZSk7XG5cbiAgICAgIGVkaXRvclZpZXcuc2V0U3RhdGUoXG4gICAgICAgIHRoaXMuY3JlYXRlRWRpdG9yU3RhdGUodGhpcy5jdXJyZW50UGFnZSwgZWRpdG9yVmlldy5zdGF0ZS5zbGljZURvYygpKSxcbiAgICAgICk7XG4gICAgICBpZiAoZWRpdG9yVmlldy5jb250ZW50RE9NKSB7XG4gICAgICAgIHRoaXMudHdlYWtFZGl0b3JET00oXG4gICAgICAgICAgZWRpdG9yVmlldy5jb250ZW50RE9NLFxuICAgICAgICAgIHRoaXMudmlld1N0YXRlLnBlcm0gPT09IFwicm9cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXN0b3JlU3RhdGUodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29tcGxldGVyKCk6IFByb21pc2U8Q29tcGxldGlvblJlc3VsdCB8IG51bGw+IHtcbiAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZGlzcGF0Y2hBcHBFdmVudChcInBhZ2U6Y29tcGxldGVcIik7XG4gICAgbGV0IGFjdHVhbFJlc3VsdCA9IG51bGw7XG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBpZiAoYWN0dWFsUmVzdWx0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiR290IGNvbXBsZXRpb24gcmVzdWx0cyBmcm9tIG11bHRpcGxlIHNvdXJjZXMsIGNhbm5vdCBkZWFsIHdpdGggdGhhdFwiLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgYWN0dWFsUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWN0dWFsUmVzdWx0O1xuICB9XG5cbiAgcmVsb2FkUGFnZSgpIHtcbiAgICBjb25zb2xlLmxvZyhcIlJlbG9hZGluZyBwYWdlXCIpO1xuICAgIHNhZmVSdW4oYXN5bmMgKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2F2ZVRpbWVvdXQpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkUGFnZSh0aGlzLmN1cnJlbnRQYWdlISk7XG4gICAgfSk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICB0aGlzLmVkaXRvclZpZXchLmZvY3VzKCk7XG4gIH1cblxuICBhc3luYyBuYXZpZ2F0ZShuYW1lOiBzdHJpbmcsIHBvcz86IG51bWJlciB8IHN0cmluZywgcmVwbGFjZVN0YXRlID0gZmFsc2UpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIG5hbWUgPSB0aGlzLmluZGV4UGFnZTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5wYWdlTmF2aWdhdG9yLm5hdmlnYXRlKG5hbWUsIHBvcywgcmVwbGFjZVN0YXRlKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRQYWdlKHBhZ2VOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2FkaW5nRGlmZmVyZW50UGFnZSA9IHBhZ2VOYW1lICE9PSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIGNvbnN0IGVkaXRvclZpZXcgPSB0aGlzLmVkaXRvclZpZXc7XG4gICAgaWYgKCFlZGl0b3JWaWV3KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNQYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcblxuICAgIC8vIFBlcnNpc3QgY3VycmVudCBwYWdlIHN0YXRlIGFuZCBuaWNlbHkgY2xvc2UgcGFnZVxuICAgIGlmIChwcmV2aW91c1BhZ2UpIHtcbiAgICAgIHRoaXMuc2F2ZVN0YXRlKHByZXZpb3VzUGFnZSk7XG4gICAgICB0aGlzLnNwYWNlLnVud2F0Y2hQYWdlKHByZXZpb3VzUGFnZSk7XG4gICAgICBhd2FpdCB0aGlzLnNhdmUodHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy52aWV3RGlzcGF0Y2goe1xuICAgICAgdHlwZTogXCJwYWdlLWxvYWRpbmdcIixcbiAgICAgIG5hbWU6IHBhZ2VOYW1lLFxuICAgIH0pO1xuXG4gICAgLy8gRmV0Y2ggbmV4dCBwYWdlIHRvIG9wZW5cbiAgICBsZXQgZG9jO1xuICAgIHRyeSB7XG4gICAgICBkb2MgPSBhd2FpdCB0aGlzLnNwYWNlLnJlYWRQYWdlKHBhZ2VOYW1lKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIE5vdCBmb3VuZCwgbmV3IHBhZ2VcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlYXRpbmcgbmV3IHBhZ2VcIiwgcGFnZU5hbWUpO1xuICAgICAgZG9jID0ge1xuICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICBtZXRhOiB7IG5hbWU6IHBhZ2VOYW1lLCBsYXN0TW9kaWZpZWQ6IDAsIHBlcm06IFwicndcIiB9IGFzIFBhZ2VNZXRhLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgZWRpdG9yU3RhdGUgPSB0aGlzLmNyZWF0ZUVkaXRvclN0YXRlKHBhZ2VOYW1lLCBkb2MudGV4dCk7XG4gICAgZWRpdG9yVmlldy5zZXRTdGF0ZShlZGl0b3JTdGF0ZSk7XG4gICAgaWYgKGVkaXRvclZpZXcuY29udGVudERPTSkge1xuICAgICAgdGhpcy50d2Vha0VkaXRvckRPTShlZGl0b3JWaWV3LmNvbnRlbnRET00sIGRvYy5tZXRhLnBlcm0gPT09IFwicm9cIik7XG4gICAgfVxuICAgIGxldCBzdGF0ZVJlc3RvcmVkID0gdGhpcy5yZXN0b3JlU3RhdGUocGFnZU5hbWUpO1xuICAgIHRoaXMuc3BhY2Uud2F0Y2hQYWdlKHBhZ2VOYW1lKTtcblxuICAgIHRoaXMudmlld0Rpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFwicGFnZS1sb2FkZWRcIixcbiAgICAgIG1ldGE6IGRvYy5tZXRhLFxuICAgIH0pO1xuXG4gICAgaWYgKGxvYWRpbmdEaWZmZXJlbnRQYWdlKSB7XG4gICAgICBhd2FpdCB0aGlzLmV2ZW50SG9vay5kaXNwYXRjaEV2ZW50KFwiZWRpdG9yOnBhZ2VMb2FkZWRcIiwgcGFnZU5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmV2ZW50SG9vay5kaXNwYXRjaEV2ZW50KFwiZWRpdG9yOnBhZ2VSZWxvYWRlZFwiLCBwYWdlTmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlUmVzdG9yZWQ7XG4gIH1cblxuICB0d2Vha0VkaXRvckRPTShjb250ZW50RE9NOiBIVE1MRWxlbWVudCwgcmVhZE9ubHk6IGJvb2xlYW4pIHtcbiAgICBjb250ZW50RE9NLnNwZWxsY2hlY2sgPSB0cnVlO1xuICAgIGNvbnRlbnRET00uc2V0QXR0cmlidXRlKFwiYXV0b2NvcnJlY3RcIiwgXCJvblwiKTtcbiAgICBjb250ZW50RE9NLnNldEF0dHJpYnV0ZShcImF1dG9jYXBpdGFsaXplXCIsIFwib25cIik7XG4gICAgY29udGVudERPTS5zZXRBdHRyaWJ1dGUoXG4gICAgICBcImNvbnRlbnRlZGl0YWJsZVwiLFxuICAgICAgcmVhZE9ubHkgfHwgdGhpcy52aWV3U3RhdGUuZm9yY2VkUk9Nb2RlID8gXCJmYWxzZVwiIDogXCJ0cnVlXCIsXG4gICAgKTtcblxuICAgIGlmIChpc01vYmlsZVNhZmFyaSgpICYmIHJlYWRPbmx5KSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlNhZmFyaSByZWFkIG9ubHkgaGFja1wiKTtcbiAgICAgIGNvbnRlbnRET00uY2xhc3NMaXN0LmFkZChcImlvcy1zYWZhcmktcmVhZG9ubHlcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnRET00uY2xhc3NMaXN0LnJlbW92ZShcImlvcy1zYWZhcmktcmVhZG9ubHlcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb2JpbGVTYWZhcmkoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC8oaVBvZHxpUGhvbmV8aVBhZCkvKSAmJlxuICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdC8pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzdG9yZVN0YXRlKHBhZ2VOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgcGFnZVN0YXRlID0gdGhpcy5vcGVuUGFnZXMuZ2V0KHBhZ2VOYW1lKTtcbiAgICBjb25zdCBlZGl0b3JWaWV3ID0gdGhpcy5lZGl0b3JWaWV3ITtcbiAgICBpZiAocGFnZVN0YXRlKSB7XG4gICAgICAvLyBSZXN0b3JlIHN0YXRlXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIlJlc3RvcmluZyBzZWxlY3Rpb24gc3RhdGVcIiwgcGFnZVN0YXRlKTtcbiAgICAgIGVkaXRvclZpZXcuc2Nyb2xsRE9NLnNjcm9sbFRvcCA9IHBhZ2VTdGF0ZSEuc2Nyb2xsVG9wO1xuICAgICAgZWRpdG9yVmlldy5kaXNwYXRjaCh7XG4gICAgICAgIHNlbGVjdGlvbjogcGFnZVN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgc2Nyb2xsSW50b1ZpZXc6IHRydWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWRpdG9yVmlldy5zY3JvbGxET00uc2Nyb2xsVG9wID0gMDtcbiAgICAgIGVkaXRvclZpZXcuZGlzcGF0Y2goe1xuICAgICAgICBzZWxlY3Rpb246IHsgYW5jaG9yOiAwIH0sXG4gICAgICAgIHNjcm9sbEludG9WaWV3OiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGVkaXRvclZpZXcuZm9jdXMoKTtcbiAgICByZXR1cm4gISFwYWdlU3RhdGU7XG4gIH1cblxuICBwcml2YXRlIHNhdmVTdGF0ZShjdXJyZW50UGFnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5vcGVuUGFnZXMuc2V0KFxuICAgICAgY3VycmVudFBhZ2UsXG4gICAgICBuZXcgUGFnZVN0YXRlKFxuICAgICAgICB0aGlzLmVkaXRvclZpZXchLnNjcm9sbERPTS5zY3JvbGxUb3AsXG4gICAgICAgIHRoaXMuZWRpdG9yVmlldyEuc3RhdGUuc2VsZWN0aW9uLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgVmlld0NvbXBvbmVudCgpOiBSZWFjdC5SZWFjdEVsZW1lbnQge1xuICAgIGNvbnN0IFt2aWV3U3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbFZpZXdTdGF0ZSk7XG4gICAgdGhpcy52aWV3U3RhdGUgPSB2aWV3U3RhdGU7XG4gICAgdGhpcy52aWV3RGlzcGF0Y2ggPSBkaXNwYXRjaDtcblxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXM7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHZpZXdTdGF0ZS5jdXJyZW50UGFnZSkge1xuICAgICAgICBkb2N1bWVudC50aXRsZSA9IHZpZXdTdGF0ZS5jdXJyZW50UGFnZTtcbiAgICAgIH1cbiAgICB9LCBbdmlld1N0YXRlLmN1cnJlbnRQYWdlXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGVkaXRvci5lZGl0b3JWaWV3KSB7XG4gICAgICAgIGVkaXRvci50d2Vha0VkaXRvckRPTShcbiAgICAgICAgICBlZGl0b3IuZWRpdG9yVmlldy5jb250ZW50RE9NLFxuICAgICAgICAgIHZpZXdTdGF0ZS5wZXJtID09PSBcInJvXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSwgW3ZpZXdTdGF0ZS5mb3JjZWRST01vZGVdKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7dmlld1N0YXRlLnNob3dQYWdlTmF2aWdhdG9yICYmIChcbiAgICAgICAgICA8UGFnZU5hdmlnYXRvclxuICAgICAgICAgICAgYWxsUGFnZXM9e3ZpZXdTdGF0ZS5hbGxQYWdlc31cbiAgICAgICAgICAgIGN1cnJlbnRQYWdlPXt0aGlzLmN1cnJlbnRQYWdlfVxuICAgICAgICAgICAgb25OYXZpZ2F0ZT17KHBhZ2UpID0+IHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2goeyB0eXBlOiBcInN0b3AtbmF2aWdhdGVcIiB9KTtcbiAgICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGlmIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgc2FmZVJ1bihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBlZGl0b3IubmF2aWdhdGUocGFnZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3ZpZXdTdGF0ZS5zaG93Q29tbWFuZFBhbGV0dGUgJiYgKFxuICAgICAgICAgIDxDb21tYW5kUGFsZXR0ZVxuICAgICAgICAgICAgb25UcmlnZ2VyPXsoY21kKSA9PiB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoKHsgdHlwZTogXCJoaWRlLXBhbGV0dGVcIiB9KTtcbiAgICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGlmIChjbWQpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwiY29tbWFuZC1ydW5cIiwgY29tbWFuZDogY21kLmNvbW1hbmQubmFtZSB9KTtcbiAgICAgICAgICAgICAgICBjbWRcbiAgICAgICAgICAgICAgICAgIC5ydW4oKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHJ1bm5pbmcgY29tbWFuZFwiLCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIGJlIGZvY3VzaW5nIHRoZSBlZGl0b3IgYWZ0ZXIgcnVubmluZyBhIGNvbW1hbmRcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGNvbW1hbmRzPXt2aWV3U3RhdGUuY29tbWFuZHN9XG4gICAgICAgICAgICByZWNlbnRDb21tYW5kcz17dmlld1N0YXRlLnJlY2VudENvbW1hbmRzfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHt2aWV3U3RhdGUuc2hvd0ZpbHRlckJveCAmJiAoXG4gICAgICAgICAgPEZpbHRlckxpc3RcbiAgICAgICAgICAgIGxhYmVsPXt2aWV3U3RhdGUuZmlsdGVyQm94TGFiZWx9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17dmlld1N0YXRlLmZpbHRlckJveFBsYWNlSG9sZGVyfVxuICAgICAgICAgICAgb3B0aW9ucz17dmlld1N0YXRlLmZpbHRlckJveE9wdGlvbnN9XG4gICAgICAgICAgICBhbGxvd05ldz17ZmFsc2V9XG4gICAgICAgICAgICBoZWxwVGV4dD17dmlld1N0YXRlLmZpbHRlckJveEhlbHBUZXh0fVxuICAgICAgICAgICAgb25TZWxlY3Q9e3ZpZXdTdGF0ZS5maWx0ZXJCb3hPblNlbGVjdH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8VG9wQmFyXG4gICAgICAgICAgcGFnZU5hbWU9e3ZpZXdTdGF0ZS5jdXJyZW50UGFnZX1cbiAgICAgICAgICBub3RpZmljYXRpb25zPXt2aWV3U3RhdGUubm90aWZpY2F0aW9uc31cbiAgICAgICAgICB1bnNhdmVkQ2hhbmdlcz17dmlld1N0YXRlLnVuc2F2ZWRDaGFuZ2VzfVxuICAgICAgICAgIGlzTG9hZGluZz17dmlld1N0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwic3RhcnQtbmF2aWdhdGVcIiB9KTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uVGhlbWVDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS50aGVtZSA9PT0gXCJkYXJrXCIpIGxvY2FsU3RvcmFnZS50aGVtZSA9IFwibGlnaHRcIjtcbiAgICAgICAgICAgIGVsc2UgbG9jYWxTdG9yYWdlLnRoZW1lID0gXCJkYXJrXCI7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC50aGVtZSA9IGxvY2FsU3RvcmFnZS50aGVtZTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uSG9tZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBlZGl0b3IubmF2aWdhdGUoXCJcIik7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkFjdGlvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICBkaXNwYXRjaCh7IHR5cGU6IFwic2hvdy1wYWxldHRlXCIgfSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICByaHM9eyEhdmlld1N0YXRlLnBhbmVscy5yaHMubW9kZSAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInBhbmVsXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogdmlld1N0YXRlLnBhbmVscy5yaHMubW9kZSB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIGxocz17ISF2aWV3U3RhdGUucGFuZWxzLmxocy5tb2RlICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicGFuZWxcIlxuICAgICAgICAgICAgICBzdHlsZT17eyBmbGV4OiB2aWV3U3RhdGUucGFuZWxzLmxocy5tb2RlIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXYgaWQ9XCJzYi1tYWluXCI+XG4gICAgICAgICAgeyEhdmlld1N0YXRlLnBhbmVscy5saHMubW9kZSAmJiAoXG4gICAgICAgICAgICA8UGFuZWwgY29uZmlnPXt2aWV3U3RhdGUucGFuZWxzLmxoc30gZWRpdG9yPXtlZGl0b3J9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IGlkPVwic2ItZWRpdG9yXCIgLz5cbiAgICAgICAgICB7ISF2aWV3U3RhdGUucGFuZWxzLnJocy5tb2RlICYmIChcbiAgICAgICAgICAgIDxQYW5lbCBjb25maWc9e3ZpZXdTdGF0ZS5wYW5lbHMucmhzfSBlZGl0b3I9e2VkaXRvcn0gLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeyEhdmlld1N0YXRlLnBhbmVscy5tb2RhbC5tb2RlICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJzYi1tb2RhbFwiXG4gICAgICAgICAgICBzdHlsZT17eyBpbnNldDogYCR7dmlld1N0YXRlLnBhbmVscy5tb2RhbC5tb2RlfXB4YCB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxQYW5lbCBjb25maWc9e3ZpZXdTdGF0ZS5wYW5lbHMubW9kYWx9IGVkaXRvcj17ZWRpdG9yfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7ISF2aWV3U3RhdGUucGFuZWxzLmJocy5tb2RlICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNiLWJoc1wiPlxuICAgICAgICAgICAgPFBhbmVsIGNvbmZpZz17dmlld1N0YXRlLnBhbmVscy5iaHN9IGVkaXRvcj17ZWRpdG9yfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJ1bkNvbW1hbmRCeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY21kID0gdGhpcy52aWV3U3RhdGUuY29tbWFuZHMuZ2V0KG5hbWUpO1xuICAgIGlmIChjbWQpIHtcbiAgICAgIGF3YWl0IGNtZC5ydW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21tYW5kICR7bmFtZX0gbm90IGZvdW5kYCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKGNvbnRhaW5lcjogUmVhY3RET00uQ29udGFpbmVyKSB7XG4gICAgY29uc3QgVmlld0NvbXBvbmVudCA9IHRoaXMuVmlld0NvbXBvbmVudC5iaW5kKHRoaXMpO1xuICAgIFJlYWN0RE9NLnJlbmRlcig8Vmlld0NvbXBvbmVudCAvPiwgY29udGFpbmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGV4dCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuZWRpdG9yVmlldyEuc3RhdGU7XG4gICAgbGV0IHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbi5tYWluO1xuICAgIGlmIChzZWxlY3Rpb24uZW1wdHkpIHtcbiAgICAgIHJldHVybiBzeW50YXhUcmVlKHN0YXRlKS5yZXNvbHZlSW5uZXIoc2VsZWN0aW9uLmZyb20pLm5hbWU7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxufVxuIiwgImV4cG9ydCBjb25zdCBwbHVnUHJlZml4ID0gXCJfcGx1Zy9cIjtcbiIsICJpbXBvcnQgeyBGaWxlRGF0YSwgRmlsZUVuY29kaW5nLCBTcGFjZVByaW1pdGl2ZXMgfSBmcm9tIFwiLi9zcGFjZV9wcmltaXRpdmVzLnRzXCI7XG5pbXBvcnQgeyBBdHRhY2htZW50TWV0YSwgRmlsZU1ldGEsIFBhZ2VNZXRhIH0gZnJvbSBcIi4uL3R5cGVzLnRzXCI7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiLi4vLi4vcGx1Z29zL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBQbHVnIH0gZnJvbSBcIi4uLy4uL3BsdWdvcy9wbHVnLnRzXCI7XG5pbXBvcnQgeyBwbHVnUHJlZml4IH0gZnJvbSBcIi4vY29uc3RhbnRzLnRzXCI7XG5pbXBvcnQgeyBzYWZlUnVuIH0gZnJvbSBcIi4uL3V0aWwudHNcIjtcblxuY29uc3QgcGFnZVdhdGNoSW50ZXJ2YWwgPSAyMDAwO1xuXG5leHBvcnQgdHlwZSBTcGFjZUV2ZW50cyA9IHtcbiAgcGFnZUNyZWF0ZWQ6IChtZXRhOiBQYWdlTWV0YSkgPT4gdm9pZDtcbiAgcGFnZUNoYW5nZWQ6IChtZXRhOiBQYWdlTWV0YSkgPT4gdm9pZDtcbiAgcGFnZURlbGV0ZWQ6IChuYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHBhZ2VMaXN0VXBkYXRlZDogKHBhZ2VzOiBTZXQ8UGFnZU1ldGE+KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGNsYXNzIFNwYWNlIGV4dGVuZHMgRXZlbnRFbWl0dGVyPFNwYWNlRXZlbnRzPiB7XG4gIHBhZ2VNZXRhQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgUGFnZU1ldGE+KCk7XG4gIHdhdGNoZWRQYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIGluaXRpYWxQYWdlTGlzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIHNhdmluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3BhY2U6IFNwYWNlUHJpbWl0aXZlcykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUGFnZUxpc3QoKSB7XG4gICAgbGV0IG5ld1BhZ2VMaXN0ID0gYXdhaXQgdGhpcy5mZXRjaFBhZ2VMaXN0KCk7XG4gICAgLy8gY29uc29sZS5sb2coXCJVcGRhdGluZyBwYWdlIGxpc3RcIiwgbmV3UGFnZUxpc3QpO1xuICAgIGxldCBkZWxldGVkUGFnZXMgPSBuZXcgU2V0PHN0cmluZz4odGhpcy5wYWdlTWV0YUNhY2hlLmtleXMoKSk7XG4gICAgbmV3UGFnZUxpc3QuZm9yRWFjaCgobWV0YSkgPT4ge1xuICAgICAgY29uc3QgcGFnZU5hbWUgPSBtZXRhLm5hbWU7XG4gICAgICBjb25zdCBvbGRQYWdlTWV0YSA9IHRoaXMucGFnZU1ldGFDYWNoZS5nZXQocGFnZU5hbWUpO1xuICAgICAgY29uc3QgbmV3UGFnZU1ldGE6IFBhZ2VNZXRhID0ge1xuICAgICAgICBuYW1lOiBwYWdlTmFtZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiBtZXRhLmxhc3RNb2RpZmllZCxcbiAgICAgICAgcGVybTogbWV0YS5wZXJtLFxuICAgICAgfTtcbiAgICAgIGlmIChcbiAgICAgICAgIW9sZFBhZ2VNZXRhICYmXG4gICAgICAgIChwYWdlTmFtZS5zdGFydHNXaXRoKHBsdWdQcmVmaXgpIHx8ICF0aGlzLmluaXRpYWxQYWdlTGlzdExvYWQpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbWl0KFwicGFnZUNyZWF0ZWRcIiwgbmV3UGFnZU1ldGEpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb2xkUGFnZU1ldGEgJiZcbiAgICAgICAgb2xkUGFnZU1ldGEubGFzdE1vZGlmaWVkICE9PSBuZXdQYWdlTWV0YS5sYXN0TW9kaWZpZWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVtaXQoXCJwYWdlQ2hhbmdlZFwiLCBuZXdQYWdlTWV0YSk7XG4gICAgICB9XG4gICAgICAvLyBQYWdlIGZvdW5kLCBub3QgZGVsZXRlZFxuICAgICAgZGVsZXRlZFBhZ2VzLmRlbGV0ZShwYWdlTmFtZSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBpbiBjYWNoZVxuICAgICAgdGhpcy5wYWdlTWV0YUNhY2hlLnNldChwYWdlTmFtZSwgbmV3UGFnZU1ldGEpO1xuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBkZWxldGVkUGFnZSBvZiBkZWxldGVkUGFnZXMpIHtcbiAgICAgIHRoaXMucGFnZU1ldGFDYWNoZS5kZWxldGUoZGVsZXRlZFBhZ2UpO1xuICAgICAgdGhpcy5lbWl0KFwicGFnZURlbGV0ZWRcIiwgZGVsZXRlZFBhZ2UpO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdChcInBhZ2VMaXN0VXBkYXRlZFwiLCB0aGlzLmxpc3RQYWdlcygpKTtcbiAgICB0aGlzLmluaXRpYWxQYWdlTGlzdExvYWQgPSBmYWxzZTtcbiAgfVxuXG4gIHdhdGNoKCkge1xuICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHNhZmVSdW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zYXZpbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwYWdlTmFtZSBvZiB0aGlzLndhdGNoZWRQYWdlcykge1xuICAgICAgICAgIGNvbnN0IG9sZE1ldGEgPSB0aGlzLnBhZ2VNZXRhQ2FjaGUuZ2V0KHBhZ2VOYW1lKTtcbiAgICAgICAgICBpZiAoIW9sZE1ldGEpIHtcbiAgICAgICAgICAgIC8vIE5vIGxvbmdlciBpbiBjYWNoZSwgbWVhbmluZyBwcm9iYWJseSBkZWxldGVkIGxldCdzIHVud2F0Y2hcbiAgICAgICAgICAgIHRoaXMud2F0Y2hlZFBhZ2VzLmRlbGV0ZShwYWdlTmFtZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVGhpcyBzZWVtcyB3ZWlyZCwgYnV0IHNpbXBseSBmZXRjaGluZyBpdCB3aWxsIGNvbXBhcmUgdG8gbG9jYWwgY2FjaGUgYW5kIHRyaWdnZXIgYW4gZXZlbnQgaWYgbmVjZXNzYXJ5XG4gICAgICAgICAgYXdhaXQgdGhpcy5nZXRQYWdlTWV0YShwYWdlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHBhZ2VXYXRjaEludGVydmFsKTtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VMaXN0KCkuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gIH1cblxuICBhc3luYyBkZWxldGVQYWdlKG5hbWU6IHN0cmluZywgZGVsZXRlRGF0ZT86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZ2V0UGFnZU1ldGEobmFtZSk7IC8vIENoZWNrIGlmIHBhZ2UgZXhpc3RzLCBpZiBub3QgdGhyb3dzIEVycm9yXG4gICAgYXdhaXQgdGhpcy5zcGFjZS5kZWxldGVGaWxlKGAke25hbWV9Lm1kYCk7XG5cbiAgICB0aGlzLnBhZ2VNZXRhQ2FjaGUuZGVsZXRlKG5hbWUpO1xuICAgIHRoaXMuZW1pdChcInBhZ2VEZWxldGVkXCIsIG5hbWUpO1xuICAgIHRoaXMuZW1pdChcInBhZ2VMaXN0VXBkYXRlZFwiLCBuZXcgU2V0KFsuLi50aGlzLnBhZ2VNZXRhQ2FjaGUudmFsdWVzKCldKSk7XG4gIH1cblxuICBhc3luYyBnZXRQYWdlTWV0YShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBhZ2VNZXRhPiB7XG4gICAgbGV0IG9sZE1ldGEgPSB0aGlzLnBhZ2VNZXRhQ2FjaGUuZ2V0KG5hbWUpO1xuICAgIGxldCBuZXdNZXRhID0gZmlsZU1ldGFUb1BhZ2VNZXRhKFxuICAgICAgYXdhaXQgdGhpcy5zcGFjZS5nZXRGaWxlTWV0YShgJHtuYW1lfS5tZGApXG4gICAgKTtcbiAgICBpZiAob2xkTWV0YSkge1xuICAgICAgaWYgKG9sZE1ldGEubGFzdE1vZGlmaWVkICE9PSBuZXdNZXRhLmxhc3RNb2RpZmllZCkge1xuICAgICAgICAvLyBDaGFuZ2VkIG9uIGRpc2ssIHRyaWdnZXIgZXZlbnRcbiAgICAgICAgdGhpcy5lbWl0KFwicGFnZUNoYW5nZWRcIiwgbmV3TWV0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1ldGFDYWNoZXIobmFtZSwgbmV3TWV0YSk7XG4gIH1cblxuICBpbnZva2VGdW5jdGlvbihcbiAgICBwbHVnOiBQbHVnPGFueT4sXG4gICAgZW52OiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc3BhY2UuaW52b2tlRnVuY3Rpb24ocGx1ZywgZW52LCBuYW1lLCBhcmdzKTtcbiAgfVxuXG4gIGxpc3RQYWdlcygpOiBTZXQ8UGFnZU1ldGE+IHtcbiAgICByZXR1cm4gbmV3IFNldCh0aGlzLnBhZ2VNZXRhQ2FjaGUudmFsdWVzKCkpO1xuICB9XG5cbiAgYXN5bmMgbGlzdFBsdWdzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBsZXQgYWxsRmlsZXMgPSBhd2FpdCB0aGlzLnNwYWNlLmZldGNoRmlsZUxpc3QoKTtcbiAgICByZXR1cm4gYWxsRmlsZXNcbiAgICAgIC5maWx0ZXIoKGZpbGVNZXRhKSA9PiBmaWxlTWV0YS5uYW1lLmVuZHNXaXRoKFwiLnBsdWcuanNvblwiKSlcbiAgICAgIC5tYXAoKGZpbGVNZXRhKSA9PiBmaWxlTWV0YS5uYW1lKTtcbiAgfVxuXG4gIHByb3h5U3lzY2FsbChwbHVnOiBQbHVnPGFueT4sIG5hbWU6IHN0cmluZywgYXJnczogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNwYWNlLnByb3h5U3lzY2FsbChwbHVnLCBuYW1lLCBhcmdzKTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRQYWdlKG5hbWU6IHN0cmluZyk6IFByb21pc2U8eyB0ZXh0OiBzdHJpbmc7IG1ldGE6IFBhZ2VNZXRhIH0+IHtcbiAgICBsZXQgcGFnZURhdGEgPSBhd2FpdCB0aGlzLnNwYWNlLnJlYWRGaWxlKGAke25hbWV9Lm1kYCwgXCJzdHJpbmdcIik7XG4gICAgbGV0IHByZXZpb3VzTWV0YSA9IHRoaXMucGFnZU1ldGFDYWNoZS5nZXQobmFtZSk7XG4gICAgbGV0IG5ld01ldGEgPSBmaWxlTWV0YVRvUGFnZU1ldGEocGFnZURhdGEubWV0YSk7XG4gICAgaWYgKHByZXZpb3VzTWV0YSkge1xuICAgICAgaWYgKHByZXZpb3VzTWV0YS5sYXN0TW9kaWZpZWQgIT09IG5ld01ldGEubGFzdE1vZGlmaWVkKSB7XG4gICAgICAgIC8vIFBhZ2UgY2hhbmdlZCBzaW5jZSBsYXN0IGNhY2hlZCBtZXRhZGF0YSwgdHJpZ2dlciBldmVudFxuICAgICAgICB0aGlzLmVtaXQoXCJwYWdlQ2hhbmdlZFwiLCBuZXdNZXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IG1ldGEgPSB0aGlzLm1ldGFDYWNoZXIobmFtZSwgbmV3TWV0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQ6IHBhZ2VEYXRhLmRhdGEgYXMgc3RyaW5nLFxuICAgICAgbWV0YTogbWV0YSxcbiAgICB9O1xuICB9XG5cbiAgd2F0Y2hQYWdlKHBhZ2VOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLndhdGNoZWRQYWdlcy5hZGQocGFnZU5hbWUpO1xuICB9XG5cbiAgdW53YXRjaFBhZ2UocGFnZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMud2F0Y2hlZFBhZ2VzLmRlbGV0ZShwYWdlTmFtZSk7XG4gIH1cblxuICBhc3luYyB3cml0ZVBhZ2UoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBzZWxmVXBkYXRlPzogYm9vbGVhblxuICApOiBQcm9taXNlPFBhZ2VNZXRhPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcbiAgICAgIGxldCBwYWdlTWV0YSA9IGZpbGVNZXRhVG9QYWdlTWV0YShcbiAgICAgICAgYXdhaXQgdGhpcy5zcGFjZS53cml0ZUZpbGUoYCR7bmFtZX0ubWRgLCBcInN0cmluZ1wiLCB0ZXh0LCBzZWxmVXBkYXRlKVxuICAgICAgKTtcbiAgICAgIGlmICghc2VsZlVwZGF0ZSkge1xuICAgICAgICB0aGlzLmVtaXQoXCJwYWdlQ2hhbmdlZFwiLCBwYWdlTWV0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5tZXRhQ2FjaGVyKG5hbWUsIHBhZ2VNZXRhKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaFBhZ2VMaXN0KCk6IFByb21pc2U8UGFnZU1ldGFbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zcGFjZS5mZXRjaEZpbGVMaXN0KCkpXG4gICAgICAuZmlsdGVyKChmaWxlTWV0YSkgPT4gZmlsZU1ldGEubmFtZS5lbmRzV2l0aChcIi5tZFwiKSlcbiAgICAgIC5tYXAoZmlsZU1ldGFUb1BhZ2VNZXRhKTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoQXR0YWNobWVudExpc3QoKTogUHJvbWlzZTxBdHRhY2htZW50TWV0YVtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnNwYWNlLmZldGNoRmlsZUxpc3QoKSkuZmlsdGVyKFxuICAgICAgKGZpbGVNZXRhKSA9PlxuICAgICAgICAhZmlsZU1ldGEubmFtZS5lbmRzV2l0aChcIi5tZFwiKSAmJiAhZmlsZU1ldGEubmFtZS5lbmRzV2l0aChcIi5wbHVnLmpzb25cIilcbiAgICApO1xuICB9XG5cbiAgcmVhZEF0dGFjaG1lbnQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGVuY29kaW5nOiBGaWxlRW5jb2RpbmdcbiAgKTogUHJvbWlzZTx7IGRhdGE6IEZpbGVEYXRhOyBtZXRhOiBBdHRhY2htZW50TWV0YSB9PiB7XG4gICAgcmV0dXJuIHRoaXMuc3BhY2UucmVhZEZpbGUobmFtZSwgZW5jb2RpbmcpO1xuICB9XG5cbiAgZ2V0QXR0YWNobWVudE1ldGEobmFtZTogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2htZW50TWV0YT4ge1xuICAgIHJldHVybiB0aGlzLnNwYWNlLmdldEZpbGVNZXRhKG5hbWUpO1xuICB9XG5cbiAgd3JpdGVBdHRhY2htZW50KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlbmNvZGluZzogRmlsZUVuY29kaW5nLFxuICAgIGRhdGE6IEZpbGVEYXRhLFxuICAgIHNlbGZVcGRhdGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8QXR0YWNobWVudE1ldGE+IHtcbiAgICByZXR1cm4gdGhpcy5zcGFjZS53cml0ZUZpbGUobmFtZSwgZW5jb2RpbmcsIGRhdGEsIHNlbGZVcGRhdGUpO1xuICB9XG5cbiAgZGVsZXRlQXR0YWNobWVudChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zcGFjZS5kZWxldGVGaWxlKG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXRhQ2FjaGVyKG5hbWU6IHN0cmluZywgbWV0YTogUGFnZU1ldGEpOiBQYWdlTWV0YSB7XG4gICAgdGhpcy5wYWdlTWV0YUNhY2hlLnNldChuYW1lLCBtZXRhKTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWxlTWV0YVRvUGFnZU1ldGEoZmlsZU1ldGE6IEZpbGVNZXRhKTogUGFnZU1ldGEge1xuICByZXR1cm4ge1xuICAgIC4uLmZpbGVNZXRhLFxuICAgIG5hbWU6IGZpbGVNZXRhLm5hbWUuc3Vic3RyaW5nKDAsIGZpbGVNZXRhLm5hbWUubGVuZ3RoIC0gMyksXG4gIH0gYXMgUGFnZU1ldGE7XG59XG4iLCAiaW1wb3J0IHsgQXR0YWNobWVudE1ldGEsIEZpbGVNZXRhLCBQYWdlTWV0YSB9IGZyb20gXCIuLi90eXBlcy50c1wiO1xuaW1wb3J0IHsgUGx1ZyB9IGZyb20gXCIuLi8uLi9wbHVnb3MvcGx1Zy50c1wiO1xuaW1wb3J0IHsgRmlsZURhdGEsIEZpbGVFbmNvZGluZywgU3BhY2VQcmltaXRpdmVzIH0gZnJvbSBcIi4vc3BhY2VfcHJpbWl0aXZlcy50c1wiO1xuXG5leHBvcnQgY2xhc3MgSHR0cFNwYWNlUHJpbWl0aXZlcyBpbXBsZW1lbnRzIFNwYWNlUHJpbWl0aXZlcyB7XG4gIGZzVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcGx1Z1VybDogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih1cmw6IHN0cmluZywgdG9rZW4/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmZzVXJsID0gdXJsICsgXCIvZnNcIjtcbiAgICB0aGlzLnBsdWdVcmwgPSB1cmwgKyBcIi9wbHVnXCI7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhdXRoZW50aWNhdGVkRmV0Y2goXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogYW55XG4gICk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICBpZiAodGhpcy50b2tlbikge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0aGlzLnRva2VufWA7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSBhd2FpdCBmZXRjaCh1cmwsIG9wdGlvbnMpO1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgIHRocm93IEVycm9yKFwiVW5hdXRob3JpemVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZldGNoRmlsZUxpc3QoKTogUHJvbWlzZTxGaWxlTWV0YVtdPiB7XG4gICAgbGV0IHJlcSA9IGF3YWl0IHRoaXMuYXV0aGVudGljYXRlZEZldGNoKHRoaXMuZnNVcmwsIHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICB9KTtcblxuICAgIGxldCByZXN1bHQ6IEZpbGVNZXRhW10gPSBhd2FpdCByZXEuanNvbigpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIHJlYWRGaWxlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlbmNvZGluZzogRmlsZUVuY29kaW5nXG4gICk6IFByb21pc2U8eyBkYXRhOiBGaWxlRGF0YTsgbWV0YTogRmlsZU1ldGEgfT4ge1xuICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZWRGZXRjaChgJHt0aGlzLmZzVXJsfS8ke25hbWV9YCwge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgIH0pO1xuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFnZSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgbGV0IGRhdGE6IEZpbGVEYXRhIHwgbnVsbCA9IG51bGw7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSBcImFycmF5YnVmZmVyXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBsZXQgYWJCbG9iID0gYXdhaXQgcmVzLmJsb2IoKTtcbiAgICAgICAgICBkYXRhID0gYXdhaXQgYWJCbG9iLmFycmF5QnVmZmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGF0YXVybFwiOlxuICAgICAgICB7XG4gICAgICAgICAgbGV0IGRVQmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG4gICAgICAgICAgZGF0YSA9IGFycmF5QnVmZmVyVG9EYXRhVXJsKGF3YWl0IGRVQmxvYi5hcnJheUJ1ZmZlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgZGF0YSA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIG1ldGE6IHRoaXMucmVzcG9uc2VUb01ldGEobmFtZSwgcmVzKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgd3JpdGVGaWxlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlbmNvZGluZzogRmlsZUVuY29kaW5nLFxuICAgIGRhdGE6IEZpbGVEYXRhLFxuICAgIHNlbGZVcGRhdGU/OiBib29sZWFuXG4gICk6IFByb21pc2U8RmlsZU1ldGE+IHtcbiAgICBsZXQgYm9keTogYW55ID0gbnVsbDtcblxuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgXCJhcnJheWJ1ZmZlclwiOlxuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICBib2R5ID0gZGF0YTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiZGF0YXVybFwiOlxuICAgICAgICBkYXRhID0gZGF0YVVybFRvQXJyYXlCdWZmZXIoZGF0YSBhcyBzdHJpbmcpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuYXV0aGVudGljYXRlZEZldGNoKGAke3RoaXMuZnNVcmx9LyR7bmFtZX1gLCB7XG4gICAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICB9LFxuICAgICAgYm9keSxcbiAgICB9KTtcbiAgICBjb25zdCBuZXdNZXRhID0gdGhpcy5yZXNwb25zZVRvTWV0YShuYW1lLCByZXMpO1xuICAgIHJldHVybiBuZXdNZXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcmVxID0gYXdhaXQgdGhpcy5hdXRoZW50aWNhdGVkRmV0Y2goYCR7dGhpcy5mc1VybH0vJHtuYW1lfWAsIHtcbiAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICB9KTtcbiAgICBpZiAocmVxLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBFcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBmaWxlOiAke3JlcS5zdGF0dXNUZXh0fWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVNZXRhKG5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZU1ldGE+IHtcbiAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy5hdXRoZW50aWNhdGVkRmV0Y2goYCR7dGhpcy5mc1VybH0vJHtuYW1lfWAsIHtcbiAgICAgIG1ldGhvZDogXCJPUFRJT05TXCIsXG4gICAgfSk7XG4gICAgaWYgKHJlcy5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZVRvTWV0YShuYW1lLCByZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNwb25zZVRvTWV0YShuYW1lOiBzdHJpbmcsIHJlczogUmVzcG9uc2UpOiBGaWxlTWV0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBzaXplOiArcmVzLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1sZW5ndGhcIikhLFxuICAgICAgY29udGVudFR5cGU6IHJlcy5oZWFkZXJzLmdldChcIkNvbnRlbnQtdHlwZVwiKSEsXG4gICAgICBsYXN0TW9kaWZpZWQ6ICsocmVzLmhlYWRlcnMuZ2V0KFwiTGFzdC1Nb2RpZmllZFwiKSB8fCBcIjBcIiksXG4gICAgICBwZXJtOiAocmVzLmhlYWRlcnMuZ2V0KFwiWC1QZXJtaXNzaW9uXCIpIGFzIFwicndcIiB8IFwicm9cIikgfHwgXCJyd1wiLFxuICAgIH07XG4gIH1cblxuICAvLyBQbHVnc1xuXG4gIGFzeW5jIHByb3h5U3lzY2FsbChwbHVnOiBQbHVnPGFueT4sIG5hbWU6IHN0cmluZywgYXJnczogYW55W10pOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCByZXEgPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZWRGZXRjaChcbiAgICAgIGAke3RoaXMucGx1Z1VybH0vJHtwbHVnLm5hbWV9L3N5c2NhbGwvJHtuYW1lfWAsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYXJncyksXG4gICAgICB9XG4gICAgKTtcbiAgICBpZiAocmVxLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICBsZXQgZXJyb3IgPSBhd2FpdCByZXEudGV4dCgpO1xuICAgICAgdGhyb3cgRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBpZiAocmVxLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1sZW5ndGhcIikgPT09IFwiMFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCByZXEuanNvbigpO1xuICB9XG5cbiAgYXN5bmMgaW52b2tlRnVuY3Rpb24oXG4gICAgcGx1ZzogUGx1Zzxhbnk+LFxuICAgIGVudjogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIEludm9rZSBsb2NhbGx5XG4gICAgaWYgKCFlbnYgfHwgZW52ID09PSBcImNsaWVudFwiKSB7XG4gICAgICByZXR1cm4gcGx1Zy5pbnZva2UobmFtZSwgYXJncyk7XG4gICAgfVxuICAgIC8vIE9yIGRpc3BhdGNoIHRvIHNlcnZlclxuICAgIGxldCByZXEgPSBhd2FpdCB0aGlzLmF1dGhlbnRpY2F0ZWRGZXRjaChcbiAgICAgIGAke3RoaXMucGx1Z1VybH0vJHtwbHVnLm5hbWV9L2Z1bmN0aW9uLyR7bmFtZX1gLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGFyZ3MpLFxuICAgICAgfVxuICAgICk7XG4gICAgaWYgKHJlcS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgbGV0IGVycm9yID0gYXdhaXQgcmVxLnRleHQoKTtcbiAgICAgIHRocm93IEVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHJlcS5oZWFkZXJzLmdldChcIkNvbnRlbnQtbGVuZ3RoXCIpID09PSBcIjBcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVxLmhlYWRlcnMuZ2V0KFwiQ29udGVudC10eXBlXCIpPy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXEuanNvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVxLnRleHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0YVVybFRvQXJyYXlCdWZmZXIoZGF0YVVybDogc3RyaW5nKTogQXJyYXlCdWZmZXIge1xuICB2YXIgYmluYXJ5X3N0cmluZyA9IHdpbmRvdy5hdG9iKGRhdGFVcmwuc3BsaXQoXCIsXCIpWzFdKTtcbiAgdmFyIGxlbiA9IGJpbmFyeV9zdHJpbmcubGVuZ3RoO1xuICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYnl0ZXNbaV0gPSBiaW5hcnlfc3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzLmJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0RhdGFVcmwoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XG4gIHZhciBiaW5hcnkgPSBcIlwiO1xuICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICB2YXIgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcbiAgfVxuICByZXR1cm4gYGRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtLCR7d2luZG93LmJ0b2EoYmluYXJ5KX1gO1xufVxuIiwgImltcG9ydCB7IEVkaXRvciB9IGZyb20gXCIuL2VkaXRvci50c3hcIjtcbmltcG9ydCB7IHBhcnNlWWFtbFNldHRpbmdzLCBzYWZlUnVuIH0gZnJvbSBcIi4uL2NvbW1vbi91dGlsLnRzXCI7XG5pbXBvcnQgeyBTcGFjZSB9IGZyb20gXCIuLi9jb21tb24vc3BhY2VzL3NwYWNlLnRzXCI7XG5pbXBvcnQgeyBIdHRwU3BhY2VQcmltaXRpdmVzIH0gZnJvbSBcIi4uL2NvbW1vbi9zcGFjZXMvaHR0cF9zcGFjZV9wcmltaXRpdmVzLnRzXCI7XG5cbnNhZmVSdW4oYXN5bmMgKCkgPT4ge1xuICBsZXQgcGFzc3dvcmQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwicGFzc3dvcmRcIikgfHxcbiAgICB1bmRlZmluZWQ7XG5cbiAgbGV0IGh0dHBQcmltaXRpdmVzID0gbmV3IEh0dHBTcGFjZVByaW1pdGl2ZXMoXCJcIiwgcGFzc3dvcmQpO1xuICBsZXQgc2V0dGluZ3NQYWdlVGV4dCA9IFwiXCI7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNldHRpbmdzUGFnZVRleHQgPSAoXG4gICAgICAgIGF3YWl0IGh0dHBQcmltaXRpdmVzLnJlYWRGaWxlKFwiU0VUVElOR1MubWRcIiwgXCJzdHJpbmdcIilcbiAgICAgICkuZGF0YSBhcyBzdHJpbmc7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLm1lc3NhZ2UgPT09IFwiVW5hdXRob3JpemVkXCIpIHtcbiAgICAgICAgcGFzc3dvcmQgPSBwcm9tcHQoXCJQYXNzd29yZDogXCIpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFwYXNzd29yZCkge1xuICAgICAgICAgIGFsZXJ0KFwiU29ycnksIG5lZWQgYSBwYXNzd29yZFwiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJwYXNzd29yZFwiLCBwYXNzd29yZCEpO1xuICAgICAgICBodHRwUHJpbWl0aXZlcyA9IG5ldyBIdHRwU3BhY2VQcmltaXRpdmVzKFwiXCIsIHBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbGV0IHNlcnZlclNwYWNlID0gbmV3IFNwYWNlKGh0dHBQcmltaXRpdmVzKTtcbiAgc2VydmVyU3BhY2Uud2F0Y2goKTtcblxuICBjb25zb2xlLmxvZyhcIkJvb3RpbmcuLi5cIik7XG5cbiAgbGV0IHNldHRpbmdzID0gcGFyc2VZYW1sU2V0dGluZ3Moc2V0dGluZ3NQYWdlVGV4dCk7XG5cbiAgbGV0IGVkaXRvciA9IG5ldyBFZGl0b3IoXG4gICAgc2VydmVyU3BhY2UsXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYi1yb290XCIpISxcbiAgICBcIlwiLFxuICAgIHNldHRpbmdzLmluZGV4UGFnZSB8fCBcImluZGV4XCIsXG4gICk7XG4gIGF3YWl0IGVkaXRvci5pbml0KCk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgd2luZG93LmVkaXRvciA9IGVkaXRvcjtcbn0pO1xuXG4vLyBpZiAoIWlzRGVza3RvcCkge1xuLy8gaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZGlzYWJsZV9zd1wiKSAhPT0gXCJ0cnVlXCIpIHtcbi8vICAgaWYgKG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyKSB7XG4vLyAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXJcbi8vICAgICAgIC5yZWdpc3RlcihuZXcgVVJMKFwic2VydmljZV93b3JrZXIudHNcIiwgaW1wb3J0Lm1ldGEudXJsKSwge1xuLy8gICAgICAgICB0eXBlOiBcIm1vZHVsZVwiLFxuLy8gICAgICAgfSlcbi8vICAgICAgIC50aGVuKChyKSA9PiB7XG4vLyAgICAgICAgIGNvbnNvbGUubG9nKFwiU2VydmljZSB3b3JrZXIgcmVnaXN0ZXJlZC4uLlwiKTtcbi8vICAgICAgIH0pO1xuLy8gICB9IGVsc2Uge1xuLy8gICAgIGNvbnNvbGUubG9nKFxuLy8gICAgICAgXCJObyBsYXVuY2hpbmcgc2VydmljZSB3b3JrZXIgKG5vdCBwcmVzZW50LCBtYXliZSBiZWNhdXNlIG5vdCBydW5uaW5nIG9uIGxvY2FsaG9zdCBvciBvdmVyIFNTTClcIixcbi8vICAgICApO1xuLy8gICB9XG4vLyB9IGVsc2Uge1xuLy8gICBjb25zb2xlLmxvZyhcIlNlcnZpY2Ugd29ya2VyIGRpc2FibGVkIHZpYSBkaXNhYmxlX3N3XCIpO1xuLy8gfVxuXG4vLyB9XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7QUFDQSxNQUFJLElBQUUsT0FBTztBQUFPLE1BQUksSUFBRSxPQUFPO0FBQWUsTUFBSSxJQUFFLE9BQU87QUFBeUIsTUFBSSxJQUFFLE9BQU87QUFBb0IsTUFBSSxLQUFHLE9BQU87QUFBZCxNQUE2QixLQUFHLE9BQU8sVUFBVTtBQUFlLE1BQUksSUFBRSxDQUFDQSxJQUFFQyxPQUFJLE9BQUtBLE1BQUdELElBQUdDLEtBQUUsRUFBQyxTQUFRLENBQUMsRUFBQyxHQUFHLFNBQVFBLEVBQUMsR0FBRUEsR0FBRTtBQUFTLE1BQUksS0FBRyxDQUFDRCxJQUFFQyxJQUFFQyxJQUFFQyxPQUFJO0FBQUMsUUFBR0YsTUFBRyxPQUFPQSxNQUFHLFlBQVUsT0FBT0EsTUFBRztBQUFXLGVBQVFHLE1BQUssRUFBRUgsRUFBQztBQUFFLFNBQUMsR0FBRyxLQUFLRCxJQUFFSSxFQUFDLEtBQUdBLE9BQUlGLE1BQUcsRUFBRUYs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QUFFLE1BQU0sR0FBRUEsR0FBRSxTQUFPZixFQUFDLEdBQUU7QUFBSyxVQUFBQSxNQUFHZSxHQUFFO0FBQUEsUUFBTSxPQUFLO0FBQUMsY0FBSUEsS0FBRVosR0FBRSxTQUFTSSxNQUFHTixLQUFFLElBQUUsS0FBRztBQUFJLFVBQUFELEtBQUVlLEdBQUUsVUFBUWYsTUFBR2UsR0FBRSxRQUFPLEtBQUssUUFBUWIsT0FBSUQsT0FBSUEsS0FBRSxLQUFHLEtBQUssUUFBUUMsT0FBSyxLQUFLLE1BQU0sS0FBS2EsRUFBQyxHQUFFLEtBQUssUUFBUSxLQUFLZCxLQUFFLElBQUUsS0FBR2MsY0FBYSxJQUFFQSxHQUFFLEtBQUssU0FBT0EsR0FBRSxTQUFTLFdBQVMsQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsS0FBS2YsS0FBRSxHQUFFO0FBQUMsYUFBT0EsS0FBRSxNQUFJLEtBQUssVUFBVSxDQUFDQSxJQUFFLENBQUMsS0FBSyxHQUFHLEdBQUVBLEtBQUUsS0FBSyxNQUFNLFNBQVEsS0FBSyxVQUFVQSxJQUFFLEtBQUssR0FBRztBQUFBLElBQUM7QUFBQSxFQUFDO0FBRHFnQyxNQUNuZ0NTLE1BQUcsTUFBSztBQUFBLElBQUMsWUFBWVQsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLFdBQUssUUFBTSxJQUFHLEtBQUssT0FBSyxPQUFHLEtBQUssU0FBTyxJQUFJRyxHQUFFTCxJQUFFQyxLQUFFQyxLQUFFLEtBQUcsQ0FBQyxHQUFFLEtBQUssTUFBSUQsS0FBRUMsS0FBRUYsR0FBRSxTQUFPLEdBQUUsS0FBSyxPQUFLLEtBQUssSUFBSUMsSUFBRUMsRUFBQyxHQUFFLEtBQUssS0FBRyxLQUFLLElBQUlELElBQUVDLEVBQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxVQUFVRixJQUFFQyxJQUFFO0FBQUMsVUFBR0EsS0FBRSxJQUFFLEtBQUssT0FBSyxLQUFLLE9BQUssS0FBSyxPQUFLLEtBQUs7QUFBRyxlQUFPLEtBQUssUUFBTSxJQUFHLEtBQUssT0FBSyxNQUFHO0FBQUssTUFB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QUFLO0FBQUEsSUFBQyxZQUFZZixJQUFFO0FBQUMsV0FBSyxNQUFJQSxJQUFFLEtBQUssSUFBRSxHQUFFLEtBQUssS0FBSztBQUFBLElBQUM7QUFBQSxJQUFDLE9BQU07QUFBQyxVQUFHLEVBQUMsVUFBU0EsR0FBQyxJQUFFLEtBQUs7QUFBSSxXQUFLLElBQUVBLEdBQUUsVUFBUSxLQUFLLE1BQUlBLEdBQUUsS0FBSyxNQUFLLEtBQUssTUFBSUEsR0FBRSxLQUFLLFNBQU8sS0FBSyxNQUFJLEdBQUUsS0FBSyxNQUFJLEtBQUksS0FBSyxNQUFJO0FBQUEsSUFBQztBQUFBLElBQUMsSUFBSSxPQUFNO0FBQUMsYUFBTyxLQUFLLE9BQUs7QUFBQSxJQUFFO0FBQUEsSUFBQyxJQUFJLE9BQU07QUFBQyxhQUFPLEtBQUssTUFBSSxJQUFFLEtBQUssTUFBSSxLQUFLO0FBQUEsSUFBRztBQUFBLElBQUMsSUFBSSxPQUFNO0FBQUMsVUFBRyxFQUFDLFVBQVNBLEdBQUMsSUFBRSxLQUFLLEtBQUlDLEtBQUUsS0FBSyxJQUFFLEtBQUc7QUFBRSxhQUFPQSxNQUFHRCxHQUFFLFNBQU8sRUFBRSxRQUFNQSxHQUFFQztBQUFBLElBQUU7QUFBQSxJQUFDLFFBQVFELElBQUU7QUFBQyxVQUFHLEVBQUMsVUFBU0MsR0FBQyxJQUFFLEtBQUssS0FBSUMsS0FBRSxLQUFLLElBQUUsS0FBRztBQUFFLGFBQU9BLE1BQUdELEdBQUUsVUFBUSxDQUFDRCxLQUFFLEVBQUUsUUFBTUMsR0FBRUMsSUFBRyxNQUFNLEtBQUssS0FBSUYsTUFBRyxPQUFLLFNBQU8sS0FBSyxNQUFJQSxFQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsUUFBUUEsSUFBRTtBQUFDLE1BQUFBLE1BQUcsS0FBSyxNQUFJLEtBQUssS0FBSyxLQUFHLEtBQUssT0FBS0EsSUFBRSxLQUFLLE9BQUtBO0FBQUEsSUFBRTtBQUFBLElBQUMsU0FBU0EsSUFBRTtBQUFDLFdBQUssT0FBSyxLQUFHLEtBQUssUUFBUUEsRUFBQyxJQUFFQSxNQUFHLEtBQUssTUFBSSxLQUFLLEtB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RSxLQUFLLFlBQVVFLEdBQUUsWUFBVSxLQUFLLEtBQUssYUFBVztBQUFFLGNBQU0sSUFBSSxNQUFNLGdFQUFnRTtBQUFFLGFBQU9DLEtBQUUsSUFBRSxTQUFJLEtBQUssS0FBSyxVQUFRLE9BQUssS0FBSyxZQUFZLElBQUUsR0FBRSxLQUFLLGFBQVcsTUFBSSxLQUFLLGFBQVdILEtBQUcsS0FBSyxLQUFLLEtBQUtBLEtBQUUsS0FBSyxVQUFVLEdBQUUsS0FBSyxHQUFHLEtBQUtDLEtBQUUsS0FBSyxVQUFVLEdBQUUsS0FBSyxPQUFLQyxJQUFFLEtBQUssV0FBU0YsSUFBRSxLQUFLLFNBQU9DLElBQUUsS0FBSyxNQUFNLEtBQUtDLEVBQUMsR0FBRUEsR0FBRSxVQUFRLEtBQUssV0FBUyxLQUFLLElBQUksS0FBSyxVQUFTRCxLQUFFRCxFQUFDLElBQUc7QUFBQSxJQUFHO0FBQUEsSUFBQyxTQUFTQSxJQUFFQyxJQUFFO0FBQUMsV0FBSUQsS0FBRSxLQUFLLFVBQVFDLEdBQUUsTUFBTSxHQUFHLFlBQVUsS0FBSyxLQUFLLFdBQVM7QUFBRSxlQUFNO0FBQUcsV0FBSyxLQUFLLFVBQVEsS0FBSyxZQUFZLElBQUUsR0FBRSxLQUFLLGNBQVksS0FBSyxJQUFJLEtBQUssYUFBWUEsR0FBRSxRQUFRLEdBQUUsS0FBSyxPQUFPLEtBQUtBLEVBQUMsR0FBRSxLQUFLLFNBQVMsS0FBS0QsRUFBQztBQUFFLFVBQUlFLEtBQUVELEdBQUUsTUFBTSxTQUFPO0FBQUUsYUFBTyxLQUFLLE9BQUtBLEdBQUUsTUFBTUMsS0FBRyxLQUFLLFdBQVNELEdBQUUsS0FBS0MsTUFBR0YsSUFBRSxLQUFLLFNBQU9DLEdBQUUsR0FBR0MsTUFBR0YsSUFBRTtBQUFBLElBQUU7QUFBQSxJQUFDLFNBQVE7QUFBQyxhQUFPLEtBQUssWUFBWSxFQUFFLEtBQUs7QUFBQSxJQUFDO0FBQUEsSUFBQyxZQUFZQSxJQUFFO0FBQUMsVUFBRyxLQUFLLEtBQUssVUFBUSxLQUFLLFlBQVksS0FBRSxHQUFFLEtBQUssT0FBTyxVQUFRO0FBQUUsZUFBT0E7QUFBRSxVQUFJQyxLQUFFLEVBQUUsT0FBTyxLQUFLLFVBQVMsS0FBSyxRQUFPLEtBQUssWUFBVSxLQUFLLFVBQVUsWUFBWUQsRUFBQyxJQUFFQSxJQUFFLEtBQUssV0FBVztBQUFFLGFBQU8sS0FBSyxPQUFLLE1BQUtDO0FBQUEsSUFBQztBQUFBLEVBQUM7QUFBRSxXQUFTLEdBQUdzQixJQUFFdkIsSUFBRUMsSUFBRTtBQUFDLFFBQUlDLEtBQUUsb0JBQUk7QUFBSSxhQUFRSSxNQUFLaUI7QUFBRSxlQUFRaEIsS0FBRSxHQUFFQSxLQUFFRCxHQUFFLE1BQU0sUUFBT0M7QUFBSSxRQUFBRCxHQUFFLE1BQU1DLElBQUcsWUFBVSxLQUFHTCxHQUFFLElBQUlJLEdBQUUsTUFBTUMsS0FBR0QsR0FBRSxTQUFTQyxHQUFFO0FBQUUsUUFBSUosS0FBRSxvQkFBSTtBQUFJLGFBQVFHLE1BQUtOO0FBQUUsZUFBUU8sS0FBRSxHQUFFQSxLQUFFRCxHQUFFLE1BQU0sUUFBT0MsTUFBSTtBQUFDLFlBQUlDLE1BQUVOLEdBQUUsSUFBSUksR0FBRSxNQUFNQyxHQUFFO0FBQUUsUUFBQUMsT0FBRyxTQUFPUCxLQUFFQSxHQUFFLE9BQU9PLEdBQUMsSUFBRUEsUUFBSUYsR0FBRSxTQUFTQyxPQUFJLENBQUNOLElBQUcsYUFBYU8sS0FBRUEsTUFBRUYsR0FBRSxNQUFNQyxJQUFHLE1BQU0sS0FBR0osR0FBRSxJQUFJRyxHQUFFLE1BQU1DLEdBQUU7QUFBQSxNQUFDO0FBQUMsV0FBT0o7QUFBQSxFQUFDO0FBQUMsTUFBSWdFLE1BQUcsTUFBSztBQUFBLElBQUMsWUFBWW5FLElBQUVDLElBQUVDLElBQUVDLEtBQUUsR0FBRTtBQUFDLFdBQUssUUFBTUgsSUFBRSxLQUFLLE9BQUtDLElBQUUsS0FBSyxXQUFTQyxJQUFFLEtBQUssT0FBS0M7QUFBQSxJQUFDO0FBQUEsSUFBQyxJQUFJLFlBQVc7QUFBQyxhQUFPLEtBQUssUUFBTSxLQUFLLE1BQU0sWUFBVTtBQUFBLElBQUM7QUFBQSxJQUFDLElBQUksVUFBUztBQUFDLGFBQU8sS0FBSyxRQUFNLEtBQUssTUFBTSxVQUFRO0FBQUEsSUFBQztBQUFBLElBQUMsS0FBS0gsSUFBRUMsS0FBRSxNQUFLO0FBQUMsYUFBTyxLQUFLLGFBQVcsS0FBSyxhQUFXLEdBQUUsS0FBSyxVQUFVRCxJQUFFQyxJQUFFLEtBQUUsR0FBRTtBQUFBLElBQUk7QUFBQSxJQUFDLFVBQVVELElBQUVDLElBQUVDLElBQUU7QUFBQyxhQUFLLEtBQUssYUFBVyxLQUFLLE1BQU0sTUFBTSxVQUFRO0FBQUMsWUFBSUMsS0FBRSxLQUFLLE1BQU0sTUFBTSxLQUFLO0FBQVksWUFBRyxFQUFFLEtBQUssUUFBTSxLQUFLLEtBQUssSUFBSUEsRUFBQyxLQUFHLEtBQUssTUFBTSxTQUFTLEtBQUssVUFBVSxJQUFFSCxNQUFHRyxHQUFFLFdBQVMsS0FBSztBQUFVO0FBQU0sYUFBSyxjQUFhRCxLQUFFO0FBQUEsTUFBRTtBQUFDLFVBQUcsS0FBSyxhQUFXLEtBQUssTUFBTSxNQUFNLFFBQU87QUFBQyxZQUFJQyxLQUFFLEtBQUssTUFBTSxNQUFNLEtBQUssWUFBWSxVQUFVSCxLQUFFLEtBQUssTUFBTSxTQUFTLEtBQUssYUFBWUMsSUFBRSxJQUFFO0FBQUUsU0FBQyxDQUFDQyxNQUFHLEtBQUssYUFBV0MsT0FBSSxLQUFLLGNBQWNBLEVBQUM7QUFBQSxNQUFDO0FBQUMsV0FBSyxLQUFLO0FBQUEsSUFBQztBQUFBLElBQUMsUUFBUUgsSUFBRUMsSUFBRTtBQUFDLE9BQUMsS0FBSyxLQUFHRCxNQUFHLEtBQUssVUFBUUMsTUFBRyxLQUFHLEtBQUssVUFBVUQsSUFBRUMsSUFBRSxJQUFFO0FBQUEsSUFBQztBQUFBLElBQUMsT0FBTTtBQUFDO0FBQU8sWUFBRyxLQUFLLGNBQVksS0FBSyxNQUFNLE1BQU0sUUFBTztBQUFDLGVBQUssT0FBSyxLQUFLLEtBQUcsS0FBSSxLQUFLLFFBQU07QUFBSztBQUFBLFFBQUssT0FBSztBQUFDLGNBQUlELEtBQUUsS0FBSyxNQUFNLFNBQVMsS0FBSyxhQUFZQyxLQUFFLEtBQUssTUFBTSxNQUFN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RUFBQyxNQUFLRyxHQUFFLE1BQUssSUFBR0EsR0FBRSxJQUFHLFFBQU9ULEdBQUUsTUFBTSxJQUFJLE1BQU1TLEdBQUUsTUFBS0EsR0FBRSxFQUFFLEVBQUMsSUFBRUgsTUFBR0EsR0FBRSxRQUFNRyxHQUFFLFFBQU1ILEdBQUUsTUFBSUcsR0FBRSxPQUFLSCxHQUFFLFFBQU1HLEdBQUUsUUFBTUgsR0FBRSxNQUFJRyxHQUFFLE9BQUtBLEdBQUUsS0FBR0EsR0FBRSxRQUFNSCxHQUFFLEtBQUdBLEdBQUUsU0FBTyxJQUFFQSxLQUFFLEVBQUMsTUFBS0csR0FBRSxNQUFLLElBQUdBLEdBQUUsSUFBRyxRQUFPVCxHQUFFLE1BQU0sSUFBSSxNQUFNUyxHQUFFLE1BQUtILEdBQUUsSUFBSSxFQUFFLE9BQU9BLEdBQUUsTUFBTSxFQUFFLE9BQU9OLEdBQUUsTUFBTSxJQUFJLE1BQU1NLEdBQUUsSUFBR0csR0FBRSxFQUFFLENBQUMsRUFBQyxLQUFHdUIsR0FBRSxPQUFLQSxHQUFFLFlBQVUxQixNQUFHQSxHQUFFLFFBQU1BLEdBQUUsTUFBSUEsR0FBRSxRQUFNRyxHQUFFLE9BQUssS0FBRyxTQUFTLEtBQUtILEdBQUUsT0FBTyxTQUFTLENBQUMsTUFBSUMsTUFBR0QsR0FBRSxPQUFPLFVBQVEsTUFBSUMsS0FBRWEsR0FBRSxPQUFPYixHQUFFLEtBQUssU0FBTyxHQUFFQSxHQUFFLEtBQUssT0FBSyxDQUFDLElBQUdELEtBQUUsRUFBQyxNQUFLRyxHQUFFLE1BQUssSUFBR0EsR0FBRSxJQUFHLFFBQU8sRUFBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUMsSUFBR0gsSUFBRTtBQUFDLFVBQUlJLEtBQUVWLEdBQUU7QUFBTSxVQUFHZ0MsR0FBRSxPQUFLaEMsR0FBRSxXQUFXLFlBQVlBLEVBQUMsS0FBR2dDLEdBQUUsWUFBVTFCLEdBQUUsUUFBTUcsR0FBRSxRQUFNSCxHQUFFLE1BQUlHLEdBQUUsTUFBSUgsR0FBRSxPQUFPLFVBQVEsS0FBR0EsR0FBRSxPQUFPLFNBQU8sS0FBRyxHQUFHTixHQUFFLFlBQVcs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SSxDQUFBRyxPQUFHLElBQUksR0FBR0EsRUFBQyxDQUFDLEdBQUUsS0FBSyxVQUFVLE1BQU07QUFBRSxpQkFBUUEsTUFBSyxLQUFLO0FBQVEsVUFBQUEsR0FBRSxPQUFPLElBQUk7QUFBRSxhQUFLLFVBQVEsSUFBSXVFLElBQUcsSUFBSSxHQUFFLEtBQUssV0FBVyxlQUFlLE1BQUssS0FBSyxPQUFPLEdBQUUsS0FBSyxZQUFZLEdBQUUsS0FBSyxZQUFZLEdBQUUsS0FBSyxZQUFVLENBQUM7QUFBQSxNQUFDLFVBQUM7QUFBUSxhQUFLLGNBQVk7QUFBQSxNQUFDO0FBQUMsTUFBQXhFLE1BQUcsS0FBSyxNQUFNLEdBQUUsS0FBSyxlQUFlO0FBQUEsSUFBQztBQUFBLElBQUMsY0FBY0YsSUFBRTtBQUFDLFVBQUlFLEtBQUVGLEdBQUUsV0FBVyxNQUFNLEVBQUUsR0FBRUcsS0FBRUgsR0FBRSxNQUFNLE1BQU0sRUFBRTtBQUFFLFVBQUdFLE1BQUdDLElBQUU7QUFBQyxZQUFJRSxLQUFFLENBQUM7QUFBRSxpQkFBUUMsTUFBS0gsSUFBRTtBQUFDLGNBQUlLLEtBQUVOLEdBQUUsUUFBUUksRUFBQztBQUFFLGNBQUdFLEtBQUU7QUFBRSxZQUFBSCxHQUFFLEtBQUssSUFBSSxHQUFHQyxFQUFDLENBQUM7QUFBQSxlQUFNO0FBQUMsZ0JBQUlHLEtBQUUsS0FBSyxRQUFRRDtBQUFHLFlBQUFDLEdBQUUsYUFBV1QsSUFBRUssR0FBRSxLQUFLSSxFQUFDO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQyxpQkFBUUgsTUFBSyxLQUFLO0FBQVEsVUFBQUEsR0FBRSxjQUFZTixNQUFHTSxHQUFFLFFBQVEsSUFBSTtBQUFFLGFBQUssVUFBUUQsSUFBRSxLQUFLLFVBQVUsTUFBTSxHQUFFLEtBQUssV0FBVyxlQUFlLE1BQUssS0FBSyxPQUFPO0FBQUEsTUFBQztBQUFNLGlCQUFRQSxNQUFLLEtBQUs7QUFBUSxVQUFBQSxHQUFFLGFBQVdMO0FBQUUsZUFBUUssS0FBRSxHQUFFQSxLQUFFLEtBQUssUUFBUSxRQUFPQTtBQUFJLGFB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SUUsS0FBRSxLQUFLLEtBQUssVUFBVSxzQkFBc0I7QUFBRSxhQUFNLEVBQUMsTUFBS0YsR0FBRSxPQUFLRSxHQUFFLE9BQUssS0FBSyxLQUFLLFVBQVUsWUFBVyxLQUFJRixHQUFFLE1BQUlFLEdBQUUsTUFBSSxLQUFLLEtBQUssVUFBVSxXQUFVLFFBQU9GLEdBQUUsU0FBT0EsR0FBRSxJQUFHO0FBQUEsSUFBQztBQUFBLElBQUMsV0FBV0QsSUFBRTtBQUFDLFdBQUssV0FBU0EsTUFBRyxLQUFLLE9BQU8sTUFBTSxPQUFLQSxHQUFFLE9BQUssTUFBSyxLQUFLLE9BQU8sTUFBTSxNQUFJQSxHQUFFLE1BQUksTUFBSyxLQUFLLE9BQU8sTUFBTSxTQUFPQSxHQUFFLFNBQU8sUUFBTSxLQUFLLE9BQU8sTUFBTSxPQUFLO0FBQUEsSUFBWTtBQUFBLElBQUMsVUFBUztBQUFDLFdBQUssVUFBUSxLQUFLLE9BQU8sT0FBTztBQUFBLElBQUM7QUFBQSxJQUFDLFdBQVdBLElBQUU7QUFBQyxXQUFLLEtBQUssTUFBTSxNQUFNLEVBQUUsS0FBR0EsTUFBRyxLQUFLLEtBQUssU0FBUyxFQUFDLFNBQVEsR0FBRyxHQUFHQSxFQUFDLEVBQUMsQ0FBQztBQUFBLElBQUM7QUFBQSxFQUFDLEdBQUUsRUFBQyxlQUFjLEVBQUMsU0FBU0EsSUFBRTtBQUFDLFNBQUssV0FBVyxLQUFLLEtBQUssWUFBWSxFQUFDLEdBQUVBLEdBQUUsU0FBUSxHQUFFQSxHQUFFLFFBQU8sQ0FBQyxDQUFDO0FBQUEsRUFBQyxHQUFFLFVBQVVBLElBQUU7QUFBQyxLQUFDQSxHQUFFLFVBQVEsS0FBSyxLQUFLLGNBQVksQ0FBQyxLQUFLLEtBQUssV0FBVyxTQUFTQSxHQUFFLGFBQWEsTUFBSSxLQUFLLFdBQVcsSUFBSTtBQUFBLEVBQUMsR0FBRSxVQUFTO0FBQUMsU0FBSyxXQUFXLElBQUk7QUFBQSxFQUFDLEdBQUUsT0FBTTtBQUFDLFNBQUssV0FBVyxJQUFJO0FBQUEsRUFBQyxFQUFDLEVBQUMsQ0FBQztBQUFFLFdBQVMsS0FBSTtBQUFDLFdBQU0s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QUM7QUFBQSxJQUFDLElBQUksYUFBWTtBQUFDLGFBQU8sS0FBSyxNQUFNLEdBQUUsR0FBRSxDQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsSUFBSSxZQUFXO0FBQUMsYUFBTyxLQUFLLE1BQU0sSUFBRyxHQUFFLENBQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxXQUFXVCxJQUFFO0FBQUMsYUFBTyxLQUFLLE1BQU0sR0FBRUEsSUFBRSxDQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsWUFBWUEsSUFBRTtBQUFDLGFBQU8sS0FBSyxNQUFNLElBQUdBLElBQUUsRUFBRTtBQUFBLElBQUM7QUFBQSxJQUFDLE1BQU1BLElBQUVDLElBQUVHLEtBQUUsR0FBRTtBQUFDLFVBQUdBLEtBQUVVLEdBQUU7QUFBZSxlQUFPO0FBQUssVUFBRyxFQUFDLFFBQU9OLEdBQUMsSUFBRSxLQUFLLFNBQVFDLEtBQUVELEdBQUUsVUFBVSxLQUFLLFFBQU0sR0FBRUEsR0FBRSxPQUFPLEtBQUssUUFBTSxJQUFHUCxLQUFFLElBQUUsSUFBRSxJQUFHRCxLQUFFLEtBQUssUUFBUSxPQUFNQyxFQUFDO0FBQUUsYUFBT1EsS0FBRSxJQUFFLE9BQUssSUFBSXNCLEdBQUUsS0FBSyxTQUFRLE1BQUt0QixFQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsSUFBSSxTQUFRO0FBQUMsYUFBTyxLQUFLLFdBQVMsS0FBSyxRQUFRLE9BQU8sc0JBQXNCO0FBQUEsSUFBQztBQUFBLElBQUMsZ0JBQWdCVCxJQUFFO0FBQUMsYUFBTyxLQUFLLFVBQVEsT0FBSyxLQUFLLFFBQVEsT0FBTyxVQUFVLEtBQUssUUFBUSxRQUFNQSxJQUFFQSxJQUFFLEdBQUUsQ0FBQztBQUFBLElBQUM7QUFBQSxJQUFDLElBQUksY0FBYTtBQUFDLFVBQUcsRUFBQyxRQUFPQSxHQUFDLElBQUUsS0FBSyxTQUFRQyxLQUFFRCxHQUFFLE9BQU8sS0FBSyxRQUFNO0FBQUcsYUFBT0MsTUFBRyxLQUFLLFVBQVFELEdBQUUsT0FBTyxLQUFLLFFBQVEsUUFBTSxLQUFHQSxHQUFFLE9BQU8sVUFB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QUFPRCxLQUFFQSxHQUFFLE9BQUtFLEdBQUU7QUFBQSxFQUFLO0FBQW9jLE1BQUlDLE1BQUcsTUFBSztBQUFBLElBQUMsWUFBWUMsSUFBRUMsS0FBRUQsR0FBRSxRQUFPO0FBQUMsV0FBSyxNQUFJQSxJQUFFLEtBQUssU0FBT0MsSUFBRSxLQUFLLFlBQVUsR0FBRSxLQUFLLFNBQU8sSUFBRyxLQUFLLFNBQU9ELEdBQUUsS0FBSztBQUFBLElBQUM7QUFBQSxJQUFDLE9BQU9BLElBQUU7QUFBQyxhQUFPLEtBQUssU0FBTyxLQUFLLE9BQU8sS0FBS0EsS0FBRSxLQUFLLFNBQVMsRUFBRSxPQUFNLEtBQUssWUFBVUEsS0FBRSxLQUFLLE9BQU8sUUFBTyxLQUFLLFlBQVUsS0FBSyxPQUFPO0FBQUEsSUFBTTtBQUFBLElBQUMsTUFBTUEsSUFBRTtBQUFDLGFBQU8sS0FBSyxPQUFPQSxFQUFDLEdBQUUsS0FBSztBQUFBLElBQU07QUFBQSxJQUFDLElBQUksYUFBWTtBQUFDLGFBQU07QUFBQSxJQUFFO0FBQUEsSUFBQyxLQUFLQSxJQUFFQyxJQUFFO0FBQUMsVUFBSUMsS0FBRSxLQUFLLFlBQVUsS0FBSyxPQUFPO0FBQU8sYUFBT0YsS0FBRUUsTUFBR0QsTUFBRyxLQUFLLFlBQVUsS0FBSyxJQUFJLFlBQVlELElBQUVDLEVBQUMsSUFBRSxLQUFLLE9BQU8sTUFBTUQsS0FBRUUsSUFBRUQsS0FBRUMsRUFBQztBQUFBLElBQUM7QUFBQSxFQUFDO0FBQTNjLE1BQTZjQyxLQUFFO0FBQS9jLE1BQW9kQyxLQUFFLE1BQUs7QUFBQSxJQUFDLFlBQVlKLElBQUVDLElBQUVDLEtBQUUsQ0FBQyxHQUFFRyxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsV0FBSyxTQUFPVCxJQUFFLEtBQUssUUFBTUMsSUFBRSxLQUFLLFlBQVVDLElBQUUsS0FBSyxPQUFLRyxJQUFFLEtBQUssVUFBUUMsSUFBRSxLQUFLLFdBQVNDLElBQUUsS0FBSyxVQUFRQyxJQUFFLEtBQUssYUFBV0MsSUFBRSxLQUFLLFFBQU0sTUFBSyxL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TUFBSyxPQUFNLFVBQVMsR0FBRSxFQUFDLEtBQUlBLEdBQUUsTUFBSyxnQkFBZSxZQUFXLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFNBQVEsZ0JBQWUsYUFBWSxZQUFXLE9BQU0sR0FBRSxFQUFDLEtBQUlBLEdBQUUsVUFBUyxXQUFVLFNBQVEsR0FBRSxFQUFDLEtBQUlBLEdBQUUsUUFBTyxZQUFXLE9BQU0sR0FBRSxFQUFDLEtBQUlBLEdBQUUsZUFBYyxnQkFBZSxlQUFjLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFNBQVEsT0FBTSxPQUFNLEdBQUUsRUFBQyxLQUFJLENBQUNBLEdBQUUsTUFBS0EsR0FBRSxNQUFLQSxHQUFFLEtBQUlBLEdBQUUsa0JBQWlCQSxHQUFFLFNBQVMsR0FBRSxPQUFNLE9BQU0sR0FBRSxFQUFDLEtBQUksQ0FBQ0EsR0FBRSxTQUFRQSxHQUFFLFFBQVEsR0FBRSxPQUFNLE9BQU0sR0FBRSxFQUFDLEtBQUksQ0FBQ0EsR0FBRSxRQUFPQSxHQUFFLE9BQU8sR0FBRSxPQUFNLE9BQU0sR0FBRSxFQUFDLEtBQUksQ0FBQ0EsR0FBRSxRQUFPQSxHQUFFLFFBQU9BLEdBQUUsUUFBUUEsR0FBRSxNQUFNLENBQUMsR0FBRSxPQUFNLE9BQU0sR0FBRSxFQUFDLEtBQUlBLEdBQUUsV0FBV0EsR0FBRSxZQUFZLEdBQUUsT0FBTSxPQUFNLEdBQUUsRUFBQyxLQUFJQSxHQUFFLE1BQU1BLEdBQUUsWUFBWSxHQUFFLE9BQU0sT0FBTSxHQUFFLEVBQUMsS0FBSSxDQUFDQSxHQUFFLFVBQVNBLEdBQUUsU0FBUyxHQUFFLE9BQU0sT0FBTSxHQUFFLEVBQUMsS0FBSUEsR0FBRSxXQUFVLE9BQU0sT0FBTSxHQUFFLEVBQUMsS0FBSSxDQUFDQSxHQUFFLFFBQVFBLEdBQUUsWUFBWSxHQUFFQSxHQUFFLFNBQVMsR0FBRSxPQUFNLE9BQU0sR0FBRSxFQUFDLEtBQUlBLEdBQUUsV0FBV0EsR0FBRSxZQUFZLEdBQUUsT0FBTSxPQUFNLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFNBQVEsT0FBTSxPQUFNLEdBQUUsRUFB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LE9BQU1DLElBQUUsVUFBU0MsR0FBQyxNQUFJO0FBQUMsUUFBR0QsR0FBRTtBQUFTLGFBQU07QUFBRyxRQUFJRSxLQUFFRixHQUFFLGNBQWMsQ0FBQUcsUUFBSSxFQUFDLFNBQVEsRUFBQyxNQUFLQSxHQUFFLE1BQUssSUFBR0EsR0FBRSxJQUFHLFFBQU8sRUFBRyxHQUFHLENBQUMsSUFBRyxFQUFFLENBQUMsRUFBQyxHQUFFLE9BQU1DLEdBQUUsT0FBT0QsR0FBRSxJQUFJLEVBQUMsRUFBRTtBQUFFLFdBQU9GLEdBQUVELEdBQUUsT0FBT0UsSUFBRSxFQUFDLGdCQUFlLE1BQUcsV0FBVSxRQUFPLENBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBRTtBQUExNUMsTUFBNDVDRyxNQUFHLENBQUMsRUFBQyxPQUFNTCxJQUFFLFVBQVNDLEdBQUMsTUFBSTtBQUFDLFFBQUdELEdBQUU7QUFBUyxhQUFNO0FBQUcsUUFBSUUsS0FBRUYsR0FBRSxjQUFjLENBQUFHLE9BQUc7QUFBQyxVQUFHLENBQUNBLEdBQUUsU0FBT0EsR0FBRSxRQUFNLEtBQUdBLEdBQUUsUUFBTUgsR0FBRSxJQUFJO0FBQU8sZUFBTSxFQUFDLE9BQU1HLEdBQUM7QUFBRSxVQUFJRyxLQUFFSCxHQUFFLE1BQUtJLEtBQUVQLEdBQUUsSUFBSSxPQUFPTSxFQUFDLEdBQUVFLE1BQUVGLE1BQUdDLEdBQUUsT0FBS0QsS0FBRSxJQUFFRyxJQUFFRixHQUFFLE1BQUtELEtBQUVDLEdBQUUsTUFBSyxLQUFFLElBQUVBLEdBQUUsTUFBS0csS0FBRUosTUFBR0MsR0FBRSxLQUFHRCxLQUFFLElBQUVHLElBQUVGLEdBQUUsTUFBS0QsS0FBRUMsR0FBRSxNQUFLLElBQUUsSUFBRUEsR0FBRTtBQUFLLGFBQU0sRUFBQyxTQUFRLEVBQUMsTUFBS0MsS0FBRSxJQUFHRSxJQUFFLFFBQU9WLEdBQUUsSUFBSSxNQUFNTSxJQUFFSSxFQUFDLEVBQUUsT0FBT1YsR0FBRSxJQUFJLE1BQU1RLEtBQUVGLEVBQUMsQ0FBQyxFQUFDLEdBQUUsT0FBTUYsR0FBRSxPQUFPTSxF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QUFFLFNBQVEsT0FBTSxjQUFhLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFVBQVMsT0FBTSxlQUFjLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFFBQU8sT0FBTSxhQUFZLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFNBQVEsT0FBTSxjQUFhLEdBQUUsRUFBQyxLQUFJQSxHQUFFLE1BQUssT0FBTSxXQUFVLEdBQUUsRUFBQyxLQUFJQSxHQUFFLE1BQUssT0FBTSxXQUFVLEdBQUUsRUFBQyxLQUFJQSxHQUFFLEtBQUksT0FBTSxVQUFTLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFdBQVUsT0FBTSxnQkFBZSxHQUFFLEVBQUMsS0FBSUEsR0FBRSxVQUFTLE9BQU0sZUFBYyxHQUFFLEVBQUMsS0FBSUEsR0FBRSxTQUFRLE9BQU0sY0FBYSxHQUFFLEVBQUMsS0FBSUEsR0FBRSxTQUFRLE9BQU0sY0FBYSxHQUFFLEVBQUMsS0FBSUEsR0FBRSxRQUFPLE9BQU0sYUFBWSxHQUFFLEVBQUMsS0FBSUEsR0FBRSxRQUFPLE9BQU0sYUFBWSxHQUFFLEVBQUMsS0FBSSxDQUFDQSxHQUFFLFFBQU9BLEdBQUUsUUFBT0EsR0FBRSxRQUFRQSxHQUFFLE1BQU0sQ0FBQyxHQUFFLE9BQU0sY0FBYSxHQUFFLEVBQUMsS0FBSUEsR0FBRSxjQUFhLE9BQU0sbUJBQWtCLEdBQUUsRUFBQyxLQUFJQSxHQUFFLE1BQU1BLEdBQUUsWUFBWSxHQUFFLE9BQU0sNkJBQTRCLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFdBQVdBLEdBQUUsWUFBWSxHQUFFLE9BQU0sa0NBQWlDLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFFBQVFBLEdBQUUsWUFBWSxHQUFFLE9BQU0sb0JBQW1CLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFdBQVdBLEdBQUUsWUFBWSxHQUFFLE9BQU0sa0NBQWlDLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFVBQVMsT0FBTSxlQUFjLEdBQUUsRUFBQyxLQUFJQSxHQUFFLFdBQVUsT0FBTSxnQkFBZSxHQUFFLEVBQUMsS0FBSUEsR0FBRSxXQUFVLE9BQU0sZ0JBQWUs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O0FBQUUsVUFBSUMsS0FBRSxLQUFLLFFBQU1ELEdBQUUsTUFBTSxNQUFNTyxFQUFDLEVBQUUsTUFBTTtBQUFLLFdBQUssU0FBTyxLQUFLLE9BQU8sS0FBSyxJQUFJLEdBQUUsS0FBSyxjQUFZSSxHQUFFLFNBQVEsRUFBQyxPQUFNVixHQUFFLFFBQU8sYUFBWXNDLEdBQUV2QyxJQUFFLE1BQU0sR0FBRSxjQUFhdUMsR0FBRXZDLElBQUUsTUFBTSxHQUFFLE9BQU0sZ0JBQWUsTUFBSyxVQUFTLGNBQWEsUUFBTyxVQUFTLEtBQUssUUFBTyxTQUFRLEtBQUssT0FBTSxDQUFDLEdBQUUsS0FBSyxlQUFhVyxHQUFFLFNBQVEsRUFBQyxPQUFNVixHQUFFLFNBQVEsYUFBWXNDLEdBQUV2QyxJQUFFLFNBQVMsR0FBRSxjQUFhdUMsR0FBRXZDLElBQUUsU0FBUyxHQUFFLE9BQU0sZ0JBQWUsTUFBSyxXQUFVLFVBQVMsS0FBSyxRQUFPLFNBQVEsS0FBSyxPQUFNLENBQUMsR0FBRSxLQUFLLFlBQVVXLEdBQUUsU0FBUSxFQUFDLE1BQUssWUFBVyxNQUFLLFFBQU8sU0FBUVYsR0FBRSxlQUFjLFVBQVMsS0FBSyxPQUFNLENBQUMsR0FBRSxLQUFLLFVBQVFVLEdBQUUsU0FBUSxFQUFDLE1BQUssWUFBVyxNQUFLLE1BQUssU0FBUVYsR0FBRSxRQUFPLFVBQVMsS0FBSyxPQUFNLENBQUMsR0FBRSxLQUFLLFlBQVVVLEdBQUUsU0FBUSxFQUFDLE1BQUssWUFBVyxNQUFLLFFBQU8sU0FBUVYsR0FBRSxXQUFVLFVBQVMsS0FBSyxPQUFNLENBQUM7QUFBRSxlQUFTTyxHQUFFRSxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsZUFBT0QsR0FBRSxVQUFTLEVBQUMsT0FBTSxhQUFZLE1BQUtELElBQUUsU0FBUUMsSUFBRSxNQUFLLFNBQVEsR0FBRUMsRUFBQztBQUFBLE1BQUM7QUFBQyxXQUFLLE1BQUlELEdBQUUsT0FBTSxFQUFDLFdBQVUsQ0FBQUQsT0FBRyxLQUFLLFFBQVFBLEVBQUMsR0FBRSxPQUFNLFlBQVcsR0FBRSxDQUFDLEtB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QU8sRUFBQyxLQUFJLENBQUNLLElBQUcsTUFBTUgsR0FBRSxNQUFNLE1BQUtBLEdBQUUsTUFBTSxFQUFFLENBQUMsRUFBQyxDQUFDLElBQUVBLEdBQUUsR0FBR0ksR0FBQyxNQUFJTixLQUFFQSxHQUFFLE9BQU8sRUFBQyxRQUFPLENBQUNPLElBQUVDLE9BQUlOLEdBQUUsTUFBTSxRQUFNSyxNQUFHTCxHQUFFLE1BQU0sTUFBSU0sSUFBRSxZQUFXTixHQUFFLE1BQU0sTUFBSyxVQUFTQSxHQUFFLE1BQU0sR0FBRSxDQUFDO0FBQUcsUUFBR0QsR0FBRSxXQUFVO0FBQUMsVUFBSUMsS0FBRSxPQUFHLEVBQUMsTUFBS0ssR0FBQyxJQUFFTixHQUFFLFVBQVU7QUFBSyxNQUFBRCxHQUFFLFFBQVFPLElBQUVBLElBQUUsQ0FBQ0MsSUFBRUMsT0FBSTtBQUFDLFFBQUFELEtBQUVELE1BQUdFLEtBQUVGLE9BQUlMLEtBQUU7QUFBQSxNQUFHLENBQUMsR0FBRUEsT0FBSUYsS0FBRUEsR0FBRSxPQUFPLEVBQUMsWUFBV08sSUFBRSxVQUFTQSxJQUFFLFFBQU8sQ0FBQ0MsSUFBRUMsT0FBSUEsTUFBR0YsTUFBR0MsTUFBR0QsR0FBQyxDQUFDO0FBQUEsSUFBRTtBQUFDLFdBQU9QO0FBQUEsRUFBQyxHQUFFLFNBQVEsQ0FBQUEsT0FBR1UsR0FBRSxZQUFZLEtBQUtWLEVBQUMsR0FBRSxPQUFPQSxJQUFFQyxJQUFFO0FBQUMsUUFBSUMsS0FBRSxDQUFDO0FBQUUsV0FBT0YsR0FBRSxRQUFRLEdBQUVDLEdBQUUsSUFBSSxRQUFPLENBQUNNLElBQUVDLE9BQUk7QUFBQyxNQUFBTixHQUFFLEtBQUtLLElBQUVDLEVBQUM7QUFBQSxJQUFDLENBQUMsR0FBRU47QUFBQSxFQUFDLEdBQUUsU0FBU0YsSUFBRTtBQUFDLFFBQUcsQ0FBQyxNQUFNLFFBQVFBLEVBQUMsS0FBR0EsR0FBRSxTQUFPO0FBQUUsWUFBTSxJQUFJLFdBQVcsNkJBQTZCO0FBQUUsUUFBSUMsS0FBRSxDQUFDO0FBQUUsYUFBUUMsS0FBRSxHQUFFQSxLQUFF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SUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUM1RDtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQzVEO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBUTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFDaEU7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUM1RDtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQzVEO0FBQUEsSUFBUztBQUFBLElBQVM7QUFBQSxJQUFTO0FBQUEsSUFBUztBQUFBLElBQVM7QUFBQSxJQUFTO0FBQUEsSUFBUztBQUFBLElBQy9EO0FBQUEsSUFBUztBQUFBLElBQVM7QUFBQSxJQUFTO0FBQUEsSUFBUztBQUFBLElBQVM7QUFBQSxJQUFTO0FBQUEsSUFBUztBQUFBLElBQy9EO0FBQUEsSUFBUztBQUFBLElBQVM7QUFBQSxJQUFTO0FBQUEsSUFB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Q1M7QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBRU07QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FFTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUEsV0FDTTtBQUNiLGVBQU87QUFBQSxXQUNNO0FBQ2IsZUFBTztBQUFBLFdBQ007QUFDYixlQUFPO0FBQUE7QUFFUCxlQUFPO0FBQUE7QUFBQSxFQUViOzs7QUNwT0E7QUFBQTtBQUFBLGtCQUFBSTtBQUFBLElBQUE7QUFBQSxjQUFBQztBQUFBLElBQUE7QUFBQTtBQUFBO0FBQ08sTUFBTUEsTUFBSztBQUFBLElBQ2hCLGlCQUFpQjtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLGtCQUFrQjtBQUFBLElBQ2xCLG1CQUFtQjtBQUFBLElBQ25CLGtCQUFrQjtBQUFBLElBQ2xCLHNCQUFzQjtBQUFBLElBQ3RCLGlCQUFpQjtBQUFBLElBQ2pCLFFBQVE7QUFBQSxNQUNOLFdBQVc7QUFBQSxNQUNYLFVBQVU7QUFBQSxNQUNWLGFBQWE7QUFBQSxNQUNiLFlBQVk7QUFBQSxJQUNkO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixZQUFZO0FBQUEsTUFDWixlQUFlO0FBQUEsTUFDZixjQUFjO0FBQUEsTUFDZCxRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixPQUFPO0FBQUEsTUFDUCxTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxXQUFXO0FBQUEsTUFDWCxRQUFRO0FBQUEsTUFDUixjQUFjO0FBQUEsTUFDZCxjQUFjO0FBQUEsTUFDZCxZQUFZO0FBQUEsTUFDWixTQUFTO0FBQUEsTUFDVCxjQUFjO0FBQUEsTUFDZCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxjQUFjO0FBQUEsTUFDZCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixhQUFhO0FBQUEsTUFDYixPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixLQUFLO0FBQUEsTUFDTCxTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixXQUFXO0FBQUEsTUFDWCxjQUFjO0FBQUEsTUFDZCxVQUFVO0FBQUEsTUFDVixXQUFXO0FBQUEsTUFDWCxhQUFhO0FBQUEsTUFDYixRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsTUFDUixTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixhQUFhO0FBQUEsTUFDYixRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsTUFDVCxXQUFXO0FBQUEsTUFDWCxVQUFVO0FBQUEsTUFDVixTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxZQUFZO0FBQUEsTUFDWixXQUFXO0FBQUEsTUFDWCxPQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixpQkFBaUI7QUFBQSxNQUNqQixZQUFZO0FBQUEsTUFDWixRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixPQUFPO0FBQUEsTUFDUCxXQUFXO0FBQUEsTUFDWCxTQUFTO0FBQUEsTUFDVCxhQUFhO0FBQUEsTUFDYixPQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ1AsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1YsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLE1BQ1IsU0FBUztBQUFBLE1BQ1QsU0FBUztBQUFBLE1BQ1QsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLE1BQ1QsVUFBVTtBQUFBLE1BQ1YsT0FBTztBQUFBLE1BQ1AsU0FBUztBQUFBLE1BQ1QsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLE1BQ1IsV0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLGNBQWM7QUFBQSxNQUNkLHVCQUF1QjtBQUFBLE1BQ3ZCLGlCQUFpQjtBQUFBLE1BQ2pCLHVCQUF1QjtBQUFBLE1BQ3ZCLGVBQWU7QUFBQSxNQUNmLGtCQUFrQjtBQUFBLElBQ3BCO0FBQUEsRUFDRjtBQUNPLE1BQU0sS0FBSztBQUFBLElBQ2hCLG1CQUFtQjtBQUFBLElBQ25CLHdCQUF3QjtBQUFBLElBQ3hCLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLG1CQUFtQjtBQUFBLElBQ25CLGdCQUFnQjtBQUFBLElBQ2hCLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLGdCQUFnQjtBQUFBLElBQ2hCLGtCQUFrQjtBQUFBLElBQ2xCLGdCQUFnQjtBQUFBLElBQ2hCLGlCQUFpQjtBQUFBLElBQ2pCLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLGlCQUFpQjtBQUFBLElBQ2pCLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLHFCQUFxQjtBQUFBLElBQ3JCLGVBQWU7QUFBQSxJQUNmLHdCQUF3QjtBQUFBLElBQ3hCLGtCQUFrQjtBQUFBLElBQ2xCLDhCQUE4QjtBQUFBLElBQzlCLHdCQUF3QjtBQUFBLEVBQzFCO0FBQ08sTUFBTUQsVUFBUztBQUFBLElBQ3BCLHdCQUF3QjtBQUFBLElBQ3hCLFlBQVk7QUFBQSxJQUNaLHlCQUF5QjtBQUFBLElBQ3pCLDBDQUEwQztBQUFBLElBQzFDLGlDQUFpQztBQUFBLElBQ2pDLHlCQUF5QjtBQUFBLElBQ3pCLHdCQUF3QjtBQUFBLElBQ3hCLDZCQUE2QjtBQUFBLElBQzdCLG9DQUFvQztBQUFBLElBQ3BDLHNCQUFzQjtBQUFBLElBQ3RCLDhCQUE4QjtBQUFBLElBQzlCLG1DQUFtQztBQUFBLElBQ25DLDhCQUE4QjtBQUFBLElBQzlCLCtCQUErQjtBQUFBLElBQy9CLDJCQUEyQjtBQUFBLElBQzNCLCtCQUErQjtBQUFBLElBQy9CLHdDQUF3QztBQUFBLElBQ3hDLHlDQUF5QztBQUFBLElBQ3pDLHVCQUF1QjtBQUFBLElBQ3ZCLDRCQUE0QjtBQUFBLElBQzVCLHFCQUFxQjtBQUFBLElBQ3JCLHlCQUF5QjtBQUFBLElBQ3pCLCtDQUErQztBQUFBLElBQy9DLGlCQUFpQjtBQUFBLElBQ2pCLGlCQUFpQjtBQUFBLElBQ2pCLGtCQUFrQjtBQUFBLElBQ2xCLGlCQUFpQjtBQUFBLElBQ2pCLG1CQUFtQjtBQUFBLElBQ25CLG1CQUFtQjtBQUFBLElBQ25CLG1CQUFtQjtBQUFBLElBQ25CLHNCQUFzQjtBQUFBLElBQ3RCLHNCQUFzQjtBQUFBLElBQ3RCLDBCQUEwQjtBQUFBLElBQzFCLHNCQUFzQjtBQUFBLElBQ3RCLHdCQUF3QjtBQUFBLElBQ3hCLGlDQUFpQztBQUFBLElBQ2pDLG9DQUFvQztBQUFBLElBQ3BDLDhCQUE4QjtBQUFBLElBQzlCLG1CQUFtQjtBQUFBLElBQ25CLHlCQUF5QjtBQUFBLElBQ3pCLG1CQUFtQjtBQUFBLElBQ25CLG1CQUFtQjtBQUFBLElBQ25CLGtCQUFrQjtBQUFBLElBQ2xCLG9CQUFvQjtBQUFBLElBQ3BCLGtCQUFrQjtBQUFBLElBQ2xCLHVCQUF1QjtBQUFBLElBQ3ZCLHVCQUF1QjtBQUFBLElBQ3ZCLDBCQUEwQjtBQUFBLElBQzFCLCtCQUErQjtBQUFBLElBQy9CLG1CQUFtQjtBQUFBLElBQ25CLG9CQUFvQjtBQUFBLElBQ3BCLDJCQUEyQjtBQUFBLElBQzNCLHNCQUFzQjtBQUFBLElBQ3RCLDhCQUE4QjtBQUFBLElBQzlCLDJCQUEyQjtBQUFBLElBQzNCLGNBQWM7QUFBQSxJQUNkLG1CQUFtQjtBQUFBLElBQ25CLG9CQUFvQjtBQUFBLElBQ3BCLGdCQUFnQjtBQUFBLElBQ2hCLHdCQUF3QjtBQUFBLElBQ3hCLGtCQUFrQjtBQUFBLElBQ2xCLHVCQUF1QjtBQUFBLElBQ3ZCLHdCQUF3QjtBQUFBLElBQ3hCLDBCQUEwQjtBQUFBLElBQzFCLHNCQUFzQjtBQUFBLElBQ3RCLHVCQUNFO0FBQUEsSUFDRixjQUFjO0FBQUEsSUFDZCxnQkFBZ0I7QUFBQSxJQUNoQixnQkFBZ0I7QUFBQSxJQUNoQixnQkFBZ0I7QUFBQSxJQUNoQiw2QkFBNkI7QUFBQSxJQUM3QiwrQkFBK0I7QUFBQSxJQUMvQix5QkFBeUI7QUFBQSxFQUMzQjtBQUNPLE1BQU0sT0FBTztBQUFBLElBQ2xCLFlBQVk7QUFBQSxJQUNaLGlCQUFpQjtBQUFBLElBQ2pCLGNBQWM7QUFBQSxJQUNkLGNBQWM7QUFBQSxJQUNkLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULGdCQUFnQjtBQUFBLElBQ2hCLGNBQWM7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLGlCQUFpQjtBQUFBLElBQ2pCLGtCQUFrQjtBQUFBLElBQ2xCLGNBQWM7QUFBQSxJQUNkLG9CQUFvQjtBQUFBLElBQ3BCLHVCQUF1QjtBQUFBLElBQ3ZCLFlBQVk7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxJQUNULG9CQUFvQjtBQUFBLElBQ3BCLGFBQWE7QUFBQSxJQUNiLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFlBQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxJQUNaLE9BQU87QUFBQSxJQUNQLGVBQWU7QUFBQSxJQUNmLGVBQWU7QUFBQSxJQUNmLGtCQUFrQjtBQUFBLElBQ2xCLGtCQUFrQjtBQUFBLElBQ2xCLHNCQUFzQjtBQUFBLElBQ3RCLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLGlCQUFpQjtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLGdCQUFnQjtBQUFBLElBQ2hCLG9CQUFvQjtBQUFBLElBQ3BCLGFBQWE7QUFBQSxJQUNiLGFBQWE7QUFBQSxJQUNiLGlCQUFpQjtBQUFBLElBQ2pCLDBCQUEwQjtBQUFBLElBQzFCLHdCQUF3QjtBQUFBLElBQ3hCLHlCQUF5QjtBQUFBLElBQ3pCLGdDQUFnQztBQUFBLElBQ2hDLG1CQUFtQjtBQUFBLElBQ25CLHFCQUFxQjtBQUFBLElBQ3JCLGtCQUFrQjtBQUFBLElBQ2xCLGtCQUFrQjtBQUFBLElBQ2xCLHFCQUFxQjtBQUFBLElBQ3JCLHNCQUFzQjtBQUFBLElBQ3RCLG9CQUFvQjtBQUFBLElBQ3BCLG9CQUFvQjtBQUFBLElBQ3BCLHdCQUF3QjtBQUFBLElBQ3hCLG9CQUFvQjtBQUFBLElBQ3BCLHdCQUF3QjtBQUFBLElBQ3hCLHdCQUF3QjtBQUFBLElBQ3hCLDhCQUE4QjtBQUFBLElBQzlCLHVCQUF1QjtBQUFBLElBQ3ZCLHNCQUFzQjtBQUFBLElBQ3RCLDZCQUE2QjtBQUFBLElBQzdCLDZCQUE2QjtBQUFBLElBQzdCLCtDQUErQztBQUFBLElBQy9DLHdCQUF3QjtBQUFBLElBQ3hCLDJCQUEyQjtBQUFBLElBQzNCLHVCQUF1QjtBQUFBLElBQ3ZCLHNCQUFzQjtBQUFBLElBQ3RCLDZCQUE2QjtBQUFBLElBQzdCLCtCQUErQjtBQUFBLElBQy9CLHdDQUF3QztBQUFBLElBQ3hDLHlDQUF5QztBQUFBLElBQ3pDLHVEQUF1RDtBQUFBLElBQ3ZELG1DQUFtQztBQUFBLElBQ25DLHlCQUF5QjtBQUFBLElBQ3pCLHdCQUF3QjtBQUFBLElBQ3hCLGlDQUFpQztBQUFBLElBQ2pDLGtDQUFrQztBQUFBLElBQ2xDLDhDQUE4QztBQUFBLElBQzlDLHNDQUFzQztBQUFBLElBQ3RDLG1EQUFtRDtBQUFBLElBQ25ELHFEQUFxRDtBQUFBLElBQ3JELGlEQUFpRDtBQUFBLElBQ2pELHNDQUFzQztBQUFBLElBQ3RDLDJDQUEyQztBQUFBLElBQzNDLGdEQUFnRDtBQUFBLElBQ2hELDRDQUE0QztBQUFBLElBQzVDLDRDQUE0QztBQUFBLElBQzVDLHVDQUF1QztBQUFBLElBQ3ZDLHdDQUF3QztBQUFBLElBQ3hDLHlDQUF5QztBQUFBLElBQ3pDLHVDQUF1QztBQUFBLElBQ3ZDLHVDQUF1QztBQUFBLElBQ3ZDLHNDQUFzQztBQUFBLElBQ3RDLHlDQUF5QztBQUFBLElBQ3pDLHdDQUF3QztBQUFBLElBQ3hDLDBDQUEwQztBQUFBLElBQzFDLHdDQUF3QztBQUFBLElBQ3hDLHdDQUF3QztBQUFBLElBQ3hDLDBDQUEwQztBQUFBLElBQzFDLDBDQUEwQztBQUFBLElBQzFDLDZDQUE2QztBQUFBLElBQzdDLGtDQUFrQztBQUFBLEVBQ3BDO0FBQ08sTUFBTSxRQUFRO0FBQUEsSUFDbkIseUJBQXlCO0FBQUEsSUFDekIsdUJBQXVCO0FBQUEsSUFDdkIsNEJBQTRCO0FBQUEsSUFDNUIsMkJBQTJCO0FBQUEsSUFDM0IsK0JBQStCO0FBQUEsSUFDL0IsbUNBQW1DO0FBQUEsSUFDbkMsbUNBQW1DO0FBQUEsSUFDbkMsNkJBQTZCO0FBQUEsSUFDN0Isd0NBQXdDO0FBQUEsSUFDeEMsc0NBQXNDO0FBQUEsSUFDdEMsMENBQTBDO0FBQUEsSUFDMUMsOEJBQThCO0FBQUEsSUFDOUIsNkJBQTZCO0FBQUEsSUFDN0IsNEJBQTRCO0FBQUEsSUFDNUIsNEJBQTRCO0FBQUEsSUFDNUIsMkJBQTJCO0FBQUEsSUFDM0IsMEJBQTBCO0FBQUEsSUFDMUIsaUNBQWlDO0FBQUEsSUFDakMsbUNBQW1DO0FBQUEsSUFDbkMsaUNBQWlDO0FBQUEsSUFDakMsK0JBQStCO0FBQUEsSUFDL0Isd0JBQXdCO0FBQUEsSUFDeEIsOEJBQThCO0FBQUEsSUFDOUIsaUNBQWlDO0FBQUEsSUFDakMsaUNBQWlDO0FBQUEsSUFDakMsNEJBQTRCO0FBQUEsRUFDOUI7OztBSjFYTyxNQUFNLFlBQVlFLElBQUcsTUFBTTtBQUMzQixNQUFNLFlBQVlBLElBQUcsTUFBTTtBQWlCbEMsTUFBTSxxQkFBbUM7QUFBQSxJQUN2QyxDQUFDLE9BQU8sQ0FBQyxTQUFTLHdCQUF3QixDQUFDO0FBQUEsSUFDM0MsQ0FBQyxPQUFPLENBQUMsVUFBVSxtQkFBbUIsQ0FBQztBQUFBLElBQ3ZDLENBQUMsT0FBTyxDQUFDLGNBQWMsd0JBQXdCLENBQUM7QUFBQSxJQUNoRCxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsdUJBQXVCLENBQUM7QUFBQSxJQUNsRCxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsOEJBQThCLENBQUM7QUFBQSxJQUN4RCxDQUFDLE9BQU8sQ0FBQyxVQUFVLGtDQUFrQyxDQUFDO0FBQUEsSUFDdEQsQ0FBQyxNQUFPLENBQUMsa0JBQWtCLDhCQUE4QixDQUFDO0FBQUEsSUFDMUQsQ0FBQyxPQUFPLENBQUMsYUFBYSxtQkFBbUIsQ0FBQztBQUFBLElBQzFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixvQkFBb0IsQ0FBQztBQUFBLElBQzlDLENBQUMsT0FBTyxDQUFDLGdCQUFnQix5QkFBeUIsQ0FBQztBQUFBLElBQ25ELENBQUMsT0FBTyxDQUFDLGdCQUFnQixrQkFBa0IsQ0FBQztBQUFBLElBQzVDLENBQUMsT0FBTyxDQUFDLFlBQVksbUJBQW1CLENBQUM7QUFBQSxJQUN6QyxDQUFDLE9BQU8sQ0FBQyxjQUFjLHlCQUF5QixDQUFDO0FBQUEsSUFDakQsQ0FBQyxPQUFPLENBQUMsY0FBYyxlQUFlLENBQUM7QUFBQSxJQUN2QyxDQUFDLE9BQU8sQ0FBQyxjQUFjLFlBQVksQ0FBQztBQUFBLElBQ3BDLENBQUMsT0FBTyxDQUFDLGNBQWMseUJBQXlCLENBQUM7QUFBQSxJQUNqRCxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsMEJBQTBCLENBQUM7QUFBQSxJQUNwRCxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsOEJBQThCLENBQUM7QUFBQSxJQUN4RCxDQUFDLE9BQU8sQ0FBQyxlQUFlLHVDQUF1QyxDQUFDO0FBQUEsSUFDaEUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLDJCQUEyQixDQUFDO0FBQUEsSUFDckQsQ0FBQyxPQUFPLENBQUMsWUFBWSxnQ0FBZ0MsQ0FBQztBQUFBLElBQ3RELENBQUMsT0FBTyxDQUFDLFNBQVMscUJBQXFCLENBQUM7QUFBQSxJQUN4QyxDQUFDLE9BQU8sQ0FBQyxTQUFTLHlCQUF5QixDQUFDO0FBQUEsSUFDNUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxvQkFBb0IsQ0FBQztBQUFBLElBQzNDLENBQUMsT0FBTyxDQUFDLFlBQVksMkJBQTJCLENBQUM7QUFBQSxJQUNqRCxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0Isa0NBQWtDLENBQUM7QUFBQSxJQUM1RCxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0Isb0JBQW9CLENBQUM7QUFBQSxJQUM5QyxDQUFDLE9BQU8sQ0FBQyxjQUFjLDBCQUEwQixDQUFDO0FBQUEsSUFDbEQsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLDhCQUE4QixDQUFDO0FBQUEsSUFDeEQsQ0FBQyxPQUFPLENBQUMsVUFBVSxxQkFBcUIsQ0FBQztBQUFBLElBQ3pDLENBQUMsT0FBTyxDQUFDLFVBQVUscUNBQXFDLENBQUM7QUFBQSxJQUN6RCxDQUFDLE9BQU8sQ0FBQyxTQUFTLGdCQUFnQixDQUFDO0FBQUEsSUFDbkMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLHFCQUFxQixDQUFDO0FBQUEsSUFDL0MsQ0FBQyxPQUFPLENBQUMsU0FBUyx5QkFBeUIsQ0FBQztBQUFBLElBQzVDLENBQUMsT0FBTyxDQUFDLFVBQVUsa0JBQWtCLENBQUM7QUFBQSxJQUN0QyxDQUFDLE9BQU8sQ0FBQyxPQUFPLFdBQVcsQ0FBQztBQUFBLElBQzVCLENBQUMsT0FBTyxDQUFDLFdBQVcsNkJBQTZCLENBQUM7QUFBQSxJQUNsRCxDQUFDLE9BQU8sQ0FBQyxVQUFVLGtDQUFrQyxDQUFDO0FBQUEsSUFDdEQsQ0FBQyxPQUFPLENBQUMsU0FBUyxxQ0FBcUMsQ0FBQztBQUFBLElBQ3hELENBQUMsT0FBTyxDQUFDLFVBQVUscUJBQXFCLENBQUM7QUFBQSxJQUN6QyxDQUFDLE9BQU8sQ0FBQyxZQUFZLGtCQUFrQixDQUFDO0FBQUEsSUFDeEMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLGVBQWUsQ0FBQztBQUFBLElBQ3pDLENBQUMsT0FBTyxDQUFDLFlBQVksaUJBQWlCLENBQUM7QUFBQSxJQUN2QyxDQUFDLE9BQU8sQ0FBQyxlQUFlLHdCQUF3QixDQUFDO0FBQUEsSUFDakQsQ0FBQyxPQUFPLENBQUMsVUFBVSxxQkFBcUIsQ0FBQztBQUFBLElBQ3pDLENBQUMsT0FBTyxDQUFDLFdBQVcsMkJBQTJCLENBQUM7QUFBQSxJQUNoRCxDQUFDLE9BQU8sQ0FBQyxVQUFVLGdCQUFnQixDQUFDO0FBQUEsSUFDcEMsQ0FBQyxPQUFPLENBQUMsVUFBVSwyQkFBMkIsQ0FBQztBQUFBLElBQy9DLENBQUMsT0FBTyxDQUFDLFVBQVUsbUJBQW1CLENBQUM7QUFBQSxJQUN2QyxDQUFDLE9BQU8sQ0FBQyxVQUFVLCtCQUErQixDQUFDO0FBQUEsSUFDbkQsQ0FBQyxPQUFPLENBQUMsZUFBZSx3QkFBd0IsQ0FBQztBQUFBLElBQ2pELENBQUMsT0FBTyxDQUFDLFVBQVUseUJBQXlCLENBQUM7QUFBQSxJQUM3QyxDQUFDLE9BQU8sQ0FBQyxVQUFVLDBCQUEwQixDQUFDO0FBQUEsSUFDOUMsQ0FBQyxPQUFPLENBQUMsWUFBWSx5QkFBeUIsQ0FBQztBQUFBLElBQy9DLENBQUMsT0FBTyxDQUFDLFdBQVcsaUJBQWlCLENBQUM7QUFBQSxJQUN0QyxDQUFDLE9BQU8sQ0FBQyxhQUFhLHFCQUFxQixDQUFDO0FBQUEsSUFDNUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxnQ0FBZ0MsQ0FBQztBQUFBLElBQ3RELENBQUMsT0FBTyxDQUFDLFdBQVcsbUNBQW1DLENBQUM7QUFBQSxJQUN4RCxDQUFDLE9BQU8sQ0FBQyxTQUFTLHlCQUF5QixDQUFDO0FBQUEsSUFDNUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxhQUFhLENBQUM7QUFBQSxJQUNoQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLGdCQUFnQixDQUFDO0FBQUEsSUFDcEMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLHdCQUF3QixDQUFDO0FBQUEsSUFDckQsQ0FBQyxPQUFPLENBQUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUFBLElBQ3hELENBQUMsT0FBTyxDQUFDLFVBQVUsa0JBQWtCLENBQUM7QUFBQSxJQUN0QyxDQUFDLE9BQU8sQ0FBQyxTQUFTLHVCQUF1QixDQUFDO0FBQUEsSUFDMUMsQ0FBQyxPQUFPLENBQUMsYUFBYSwrQ0FBK0MsQ0FBQztBQUFBLElBQ3RFLENBQUMsT0FBTyxDQUFDLFVBQVUsY0FBYyxDQUFDO0FBQUEsSUFDbEMsQ0FBQyxPQUFPLENBQUMsU0FBUyxpQkFBaUIsQ0FBQztBQUFBLElBQ3BDLENBQUMsT0FBTyxDQUFDLGFBQWEsc0JBQXNCLENBQUM7QUFBQSxJQUM3QyxDQUFDLE9BQU8sQ0FBQyxXQUFXLG1CQUFtQixDQUFDO0FBQUEsSUFDeEMsQ0FBQyxPQUFPLENBQUMsU0FBUyxpQ0FBaUMsQ0FBQztBQUFBLElBQ3BELENBQUMsT0FBTyxDQUFDLFdBQVcsZUFBZSxDQUFDO0FBQUEsSUFDcEMsQ0FBQyxPQUFPLENBQUMsT0FBTyxhQUFhLENBQUM7QUFBQSxJQUM5QixDQUFDLE9BQU8sQ0FBQyxTQUFTLDJCQUEyQixDQUFDO0FBQUEsSUFDOUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxnQkFBZ0IsQ0FBQztBQUFBLElBQ3BDLENBQUMsT0FBTyxDQUFDLGFBQWEsY0FBYyxDQUFDO0FBQUEsSUFDckMsQ0FBQyxPQUFPLENBQUMsYUFBYSxrQkFBa0IsQ0FBQztBQUFBLElBQ3pDLENBQUMsT0FBTyxDQUFDLFVBQVUsZ0NBQWdDLENBQUM7QUFBQSxJQUNwRCxDQUFDLE9BQU8sQ0FBQyxVQUFVLG1DQUFtQyxDQUFDO0FBQUEsSUFDdkQsQ0FBQyxPQUFPLENBQUMsVUFBVSx1QkFBdUIsQ0FBQztBQUFBLEVBQzdDO0FBRUEsTUFBTSxxQkFBa0MsbUJBQW1CLElBQUksQ0FDN0QsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQ2IsQ0FBQyxPQUFPLE1BQU0sQ0FBQztBQUVwQixNQUFNLG9CQUFrQztBQUFBLElBQ3RDLENBQUMsSUFBSSxDQUFDLFNBQVMsd0JBQXdCLENBQUM7QUFBQSxJQUN4QyxDQUFDLEtBQUssQ0FBQyxVQUFVLG1CQUFtQixDQUFDO0FBQUEsSUFDckMsQ0FBQyxLQUFLLENBQUMsY0FBYyx3QkFBd0IsQ0FBQztBQUFBLElBQzlDLENBQUMsS0FBSyxDQUFDLGlCQUFpQix1QkFBdUIsQ0FBQztBQUFBLElBQ2hELENBQUMsS0FBSyxDQUFDLGdCQUFnQiw4QkFBOEIsQ0FBQztBQUFBLElBQ3RELENBQUMsS0FBSyxDQUFDLFVBQVUsa0NBQWtDLENBQUM7QUFBQSxJQUNwRCxDQUFDLE1BQU8sQ0FBQyxrQkFBa0IsOEJBQThCLENBQUM7QUFBQSxJQUMxRCxDQUFDLE9BQU8sQ0FBQyxhQUFhLG1CQUFtQixDQUFDO0FBQUEsSUFDMUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLG9CQUFvQixDQUFDO0FBQUEsSUFDOUMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLHlCQUF5QixDQUFDO0FBQUEsSUFDbkQsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLGtCQUFrQixDQUFDO0FBQUEsSUFDNUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxtQkFBbUIsQ0FBQztBQUFBLElBQ3pDLENBQUMsT0FBTyxDQUFDLGNBQWMseUJBQXlCLENBQUM7QUFBQSxJQUNqRCxDQUFDLE9BQU8sQ0FBQyxjQUFjLGVBQWUsQ0FBQztBQUFBLElBQ3ZDLENBQUMsT0FBTyxDQUFDLGNBQWMsWUFBWSxDQUFDO0FBQUEsSUFDcEMsQ0FBQyxPQUFPLENBQUMsY0FBYyx5QkFBeUIsQ0FBQztBQUFBLElBQ2pELENBQUMsT0FBTyxDQUFDLGdCQUFnQiwwQkFBMEIsQ0FBQztBQUFBLElBQ3BELENBQUMsT0FBTyxDQUFDLGdCQUFnQiw4QkFBOEIsQ0FBQztBQUFBLElBQ3hELENBQUMsT0FBTyxDQUFDLGVBQWUsdUNBQXVDLENBQUM7QUFBQSxJQUNoRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsMkJBQTJCLENBQUM7QUFBQSxJQUNyRCxDQUFDLEtBQUssQ0FBQyxZQUFZLGdDQUFnQyxDQUFDO0FBQUEsSUFDcEQsQ0FBQyxJQUFJLENBQUMsU0FBUyxxQkFBcUIsQ0FBQztBQUFBLElBQ3JDLENBQUMsS0FBSyxDQUFDLFNBQVMseUJBQXlCLENBQUM7QUFBQSxJQUMxQyxDQUFDLEtBQUssQ0FBQyxhQUFhLG9CQUFvQixDQUFDO0FBQUEsSUFDekMsQ0FBQyxPQUFPLENBQUMsWUFBWSwyQkFBMkIsQ0FBQztBQUFBLElBQ2pELENBQUMsS0FBSyxDQUFDLGdCQUFnQixrQ0FBa0MsQ0FBQztBQUFBLElBQzFELENBQUMsS0FBSyxDQUFDLGdCQUFnQixvQkFBb0IsQ0FBQztBQUFBLElBQzVDLENBQUMsS0FBSyxDQUFDLGNBQWMsMEJBQTBCLENBQUM7QUFBQSxJQUNoRCxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsOEJBQThCLENBQUM7QUFBQSxJQUN0RCxDQUFDLEtBQUssQ0FBQyxVQUFVLHFCQUFxQixDQUFDO0FBQUEsSUFDdkMsQ0FBQyxLQUFLLENBQUMsVUFBVSxxQ0FBcUMsQ0FBQztBQUFBLElBQ3ZELENBQUMsS0FBSyxDQUFDLFNBQVMsZ0JBQWdCLENBQUM7QUFBQSxJQUNqQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IscUJBQXFCLENBQUM7QUFBQSxJQUM3QyxDQUFDLElBQUksQ0FBQyxTQUFTLHlCQUF5QixDQUFDO0FBQUEsSUFDekMsQ0FBQyxLQUFLLENBQUMsVUFBVSxrQkFBa0IsQ0FBQztBQUFBLElBQ3BDLENBQUMsSUFBSSxDQUFDLE9BQU8sV0FBVyxDQUFDO0FBQUEsSUFDekIsQ0FBQyxLQUFLLENBQUMsV0FBVyw2QkFBNkIsQ0FBQztBQUFBLElBQ2hELENBQUMsS0FBSyxDQUFDLFVBQVUsa0NBQWtDLENBQUM7QUFBQSxJQUNwRCxDQUFDLEtBQUssQ0FBQyxTQUFTLHFDQUFxQyxDQUFDO0FBQUEsSUFDdEQsQ0FBQyxLQUFLLENBQUMsVUFBVSxxQkFBcUIsQ0FBQztBQUFBLElBQ3ZDLENBQUMsS0FBSyxDQUFDLFlBQVksa0JBQWtCLENBQUM7QUFBQSxJQUN0QyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDO0FBQUEsSUFDdkMsQ0FBQyxLQUFLLENBQUMsWUFBWSxpQkFBaUIsQ0FBQztBQUFBLElBQ3JDLENBQUMsS0FBSyxDQUFDLGVBQWUsd0JBQXdCLENBQUM7QUFBQSxJQUMvQyxDQUFDLEtBQUssQ0FBQyxVQUFVLHFCQUFxQixDQUFDO0FBQUEsSUFDdkMsQ0FBQyxLQUFLLENBQUMsV0FBVywyQkFBMkIsQ0FBQztBQUFBLElBQzlDLENBQUMsS0FBSyxDQUFDLFVBQVUsZ0JBQWdCLENBQUM7QUFBQSxJQUNsQyxDQUFDLElBQUksQ0FBQyxVQUFVLDJCQUEyQixDQUFDO0FBQUEsSUFDNUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxtQkFBbUIsQ0FBQztBQUFBLElBQ3JDLENBQUMsT0FBTyxDQUFDLFVBQVUsK0JBQStCLENBQUM7QUFBQSxJQUNuRCxDQUFDLEtBQUssQ0FBQyxlQUFlLHdCQUF3QixDQUFDO0FBQUEsSUFDL0MsQ0FBQyxLQUFLLENBQUMsVUFBVSx5QkFBeUIsQ0FBQztBQUFBLElBQzNDLENBQUMsS0FBSyxDQUFDLFVBQVUsMEJBQTBCLENBQUM7QUFBQSxJQUM1QyxDQUFDLEtBQUssQ0FBQyxZQUFZLHlCQUF5QixDQUFDO0FBQUEsSUFDN0MsQ0FBQyxLQUFLLENBQUMsV0FBVyxpQkFBaUIsQ0FBQztBQUFBLElBQ3BDLENBQUMsS0FBSyxDQUFDLGFBQWEscUJBQXFCLENBQUM7QUFBQSxJQUMxQyxDQUFDLEtBQUssQ0FBQyxZQUFZLGdDQUFnQyxDQUFDO0FBQUEsSUFDcEQsQ0FBQyxLQUFLLENBQUMsV0FBVyxtQ0FBbUMsQ0FBQztBQUFBLElBQ3RELENBQUMsSUFBSSxDQUFDLFNBQVMseUJBQXlCLENBQUM7QUFBQSxJQUN6QyxDQUFDLEtBQUssQ0FBQyxTQUFTLGFBQWEsQ0FBQztBQUFBLElBQzlCLENBQUMsTUFBTSxDQUFDLFVBQVUsZ0JBQWdCLENBQUM7QUFBQSxJQUNuQyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsd0JBQXdCLENBQUM7QUFBQSxJQUNuRCxDQUFDLEtBQUssQ0FBQyxjQUFjLGdDQUFnQyxDQUFDO0FBQUEsSUFDdEQsQ0FBQyxLQUFLLENBQUMsVUFBVSxrQkFBa0IsQ0FBQztBQUFBLElBQ3BDLENBQUMsS0FBSyxDQUFDLFNBQVMsdUJBQXVCLENBQUM7QUFBQSxJQUN4QyxDQUFDLEtBQUssQ0FBQyxhQUFhLCtDQUErQyxDQUFDO0FBQUEsSUFDcEUsQ0FBQyxLQUFLLENBQUMsVUFBVSxjQUFjLENBQUM7QUFBQSxJQUNoQyxDQUFDLElBQUksQ0FBQyxTQUFTLGlCQUFpQixDQUFDO0FBQUEsSUFDakMsQ0FBQyxLQUFLLENBQUMsYUFBYSxzQkFBc0IsQ0FBQztBQUFBLElBQzNDLENBQUMsS0FBSyxDQUFDLFdBQVcsbUJBQW1CLENBQUM7QUFBQSxJQUN0QyxDQUFDLEtBQUssQ0FBQyxTQUFTLGlDQUFpQyxDQUFDO0FBQUEsSUFDbEQsQ0FBQyxPQUFPLENBQUMsV0FBVyxlQUFlLENBQUM7QUFBQSxJQUNwQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLGFBQWEsQ0FBQztBQUFBLElBQzlCLENBQUMsSUFBSSxDQUFDLFNBQVMsMkJBQTJCLENBQUM7QUFBQSxJQUMzQyxDQUFDLEtBQUssQ0FBQyxVQUFVLGdCQUFnQixDQUFDO0FBQUEsSUFDbEMsQ0FBQyxLQUFLLENBQUMsYUFBYSxjQUFjLENBQUM7QUFBQSxJQUNuQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLGtCQUFrQixDQUFDO0FBQUEsSUFDekMsQ0FBQyxLQUFLLENBQUMsVUFBVSxnQ0FBZ0MsQ0FBQztBQUFBLElBQ2xELENBQUMsS0FBSyxDQUFDLFVBQVUsbUNBQW1DLENBQUM7QUFBQSxJQUNyRCxDQUFDLEtBQUssQ0FBQyxVQUFVLHVCQUF1QixDQUFDO0FBQUEsRUFDM0M7QUFFQSxNQUFNLG9CQUFpQyxrQkFBa0IsSUFBSSxDQUMzRCxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFDWixDQUFDLE1BQU0sTUFBTSxDQUFDO0FBRW5CLE1BQU0sbUJBQWlDO0FBQUEsSUFDckMsQ0FBQyxJQUFJLENBQUMsU0FBUyx3QkFBd0IsQ0FBQztBQUFBLElBQ3hDLENBQUMsS0FBSyxDQUFDLFVBQVUsbUJBQW1CLENBQUM7QUFBQSxJQUNyQyxDQUFDLEtBQUssQ0FBQyxjQUFjLHdCQUF3QixDQUFDO0FBQUEsSUFDOUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLHVCQUF1QixDQUFDO0FBQUEsSUFDaEQsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLDhCQUE4QixDQUFDO0FBQUEsSUFDdEQsQ0FBQyxLQUFLLENBQUMsVUFBVSxrQ0FBa0MsQ0FBQztBQUFBLElBQ3BELENBQUMsTUFBTyxDQUFDLGtCQUFrQiw4QkFBOEIsQ0FBQztBQUFBLElBQzFELENBQUMsT0FBTyxDQUFDLGFBQWEsbUJBQW1CLENBQUM7QUFBQSxJQUMxQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0Isb0JBQW9CLENBQUM7QUFBQSxJQUM5QyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IseUJBQXlCLENBQUM7QUFBQSxJQUNuRCxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0Isa0JBQWtCLENBQUM7QUFBQSxJQUM1QyxDQUFDLE9BQU8sQ0FBQyxZQUFZLG1CQUFtQixDQUFDO0FBQUEsSUFDekMsQ0FBQyxPQUFPLENBQUMsY0FBYyx5QkFBeUIsQ0FBQztBQUFBLElBQ2pELENBQUMsT0FBTyxDQUFDLGNBQWMsZUFBZSxDQUFDO0FBQUEsSUFDdkMsQ0FBQyxPQUFPLENBQUMsY0FBYyxZQUFZLENBQUM7QUFBQSxJQUNwQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLHlCQUF5QixDQUFDO0FBQUEsSUFDakQsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLDBCQUEwQixDQUFDO0FBQUEsSUFDcEQsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLDhCQUE4QixDQUFDO0FBQUEsSUFDeEQsQ0FBQyxPQUFPLENBQUMsZUFBZSx1Q0FBdUMsQ0FBQztBQUFBLElBQ2hFLENBQUMsT0FBTyxDQUFDLGdCQUFnQiwyQkFBMkIsQ0FBQztBQUFBLElBQ3JELENBQUMsTUFBTSxDQUFDLFlBQVksZ0NBQWdDLENBQUM7QUFBQSxJQUNyRCxDQUFDLElBQUksQ0FBQyxTQUFTLHFCQUFxQixDQUFDO0FBQUEsSUFDckMsQ0FBQyxLQUFLLENBQUMsU0FBUyx5QkFBeUIsQ0FBQztBQUFBLElBQzFDLENBQUMsTUFBTSxDQUFDLGFBQWEsb0JBQW9CLENBQUM7QUFBQSxJQUMxQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLDJCQUEyQixDQUFDO0FBQUEsSUFDakQsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLGtDQUFrQyxDQUFDO0FBQUEsSUFDM0QsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLG9CQUFvQixDQUFDO0FBQUEsSUFDN0MsQ0FBQyxNQUFNLENBQUMsY0FBYywwQkFBMEIsQ0FBQztBQUFBLElBQ2pELENBQUMsS0FBSyxDQUFDLGdCQUFnQiw4QkFBOEIsQ0FBQztBQUFBLElBQ3RELENBQUMsS0FBSyxDQUFDLFVBQVUscUJBQXFCLENBQUM7QUFBQSxJQUN2QyxDQUFDLEtBQUssQ0FBQyxVQUFVLHFDQUFxQyxDQUFDO0FBQUEsSUFDdkQsQ0FBQyxLQUFLLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQztBQUFBLElBQ2pDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixxQkFBcUIsQ0FBQztBQUFBLElBQzlDLENBQUMsSUFBSSxDQUFDLFNBQVMseUJBQXlCLENBQUM7QUFBQSxJQUN6QyxDQUFDLEtBQUssQ0FBQyxVQUFVLGtCQUFrQixDQUFDO0FBQUEsSUFDcEMsQ0FBQyxJQUFJLENBQUMsT0FBTyxXQUFXLENBQUM7QUFBQSxJQUN6QixDQUFDLE1BQU0sQ0FBQyxXQUFXLDZCQUE2QixDQUFDO0FBQUEsSUFDakQsQ0FBQyxLQUFLLENBQUMsVUFBVSxrQ0FBa0MsQ0FBQztBQUFBLElBQ3BELENBQUMsS0FBSyxDQUFDLFNBQVMscUNBQXFDLENBQUM7QUFBQSxJQUN0RCxDQUFDLEtBQUssQ0FBQyxVQUFVLHFCQUFxQixDQUFDO0FBQUEsSUFDdkMsQ0FBQyxLQUFLLENBQUMsWUFBWSxrQkFBa0IsQ0FBQztBQUFBLElBQ3RDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixlQUFlLENBQUM7QUFBQSxJQUN2QyxDQUFDLE1BQU0sQ0FBQyxZQUFZLGlCQUFpQixDQUFDO0FBQUEsSUFDdEMsQ0FBQyxNQUFNLENBQUMsZUFBZSx3QkFBd0IsQ0FBQztBQUFBLElBQ2hELENBQUMsS0FBSyxDQUFDLFVBQVUscUJBQXFCLENBQUM7QUFBQSxJQUN2QyxDQUFDLE1BQU0sQ0FBQyxXQUFXLDJCQUEyQixDQUFDO0FBQUEsSUFDL0MsQ0FBQyxLQUFLLENBQUMsVUFBVSxnQkFBZ0IsQ0FBQztBQUFBLElBQ2xDLENBQUMsSUFBSSxDQUFDLFVBQVUsMkJBQTJCLENBQUM7QUFBQSxJQUM1QyxDQUFDLEtBQUssQ0FBQyxVQUFVLG1CQUFtQixDQUFDO0FBQUEsSUFDckMsQ0FBQyxLQUFLLENBQUMsVUFBVSwrQkFBK0IsQ0FBQztBQUFBLElBQ2pELENBQUMsS0FBSyxDQUFDLGVBQWUsd0JBQXdCLENBQUM7QUFBQSxJQUMvQyxDQUFDLEtBQUssQ0FBQyxVQUFVLHlCQUF5QixDQUFDO0FBQUEsSUFDM0MsQ0FBQyxLQUFLLENBQUMsVUFBVSwwQkFBMEIsQ0FBQztBQUFBLElBQzVDLENBQUMsTUFBTSxDQUFDLFlBQVkseUJBQXlCLENBQUM7QUFBQSxJQUM5QyxDQUFDLEtBQUssQ0FBQyxXQUFXLGlCQUFpQixDQUFDO0FBQUEsSUFDcEMsQ0FBQyxLQUFLLENBQUMsYUFBYSxxQkFBcUIsQ0FBQztBQUFBLElBQzFDLENBQUMsS0FBSyxDQUFDLFlBQVksZ0NBQWdDLENBQUM7QUFBQSxJQUNwRCxDQUFDLEtBQUssQ0FBQyxXQUFXLG1DQUFtQyxDQUFDO0FBQUEsSUFDdEQsQ0FBQyxJQUFJLENBQUMsU0FBUyx5QkFBeUIsQ0FBQztBQUFBLElBQ3pDLENBQUMsS0FBSyxDQUFDLFNBQVMsYUFBYSxDQUFDO0FBQUEsSUFDOUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxnQkFBZ0IsQ0FBQztBQUFBLElBQ2xDLENBQUMsS0FBSyxDQUFDLG1CQUFtQix3QkFBd0IsQ0FBQztBQUFBLElBQ25ELENBQUMsS0FBSyxDQUFDLGNBQWMsZ0NBQWdDLENBQUM7QUFBQSxJQUN0RCxDQUFDLEtBQUssQ0FBQyxVQUFVLGtCQUFrQixDQUFDO0FBQUEsSUFDcEMsQ0FBQyxLQUFLLENBQUMsU0FBUyx1QkFBdUIsQ0FBQztBQUFBLElBQ3hDLENBQUMsTUFBTSxDQUFDLGFBQWEsK0NBQStDLENBQUM7QUFBQSxJQUNyRSxDQUFDLEtBQUssQ0FBQyxVQUFVLGNBQWMsQ0FBQztBQUFBLElBQ2hDLENBQUMsSUFBSSxDQUFDLFNBQVMsaUJBQWlCLENBQUM7QUFBQSxJQUNqQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLHNCQUFzQixDQUFDO0FBQUEsSUFDNUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxtQkFBbUIsQ0FBQztBQUFBLElBQ3RDLENBQUMsS0FBSyxDQUFDLFNBQVMsaUNBQWlDLENBQUM7QUFBQSxJQUNsRCxDQUFDLE9BQU8sQ0FBQyxXQUFXLGVBQWUsQ0FBQztBQUFBLElBQ3BDLENBQUMsT0FBTyxDQUFDLE9BQU8sYUFBYSxDQUFDO0FBQUEsSUFDOUIsQ0FBQyxJQUFJLENBQUMsU0FBUywyQkFBMkIsQ0FBQztBQUFBLElBQzNDLENBQUMsS0FBSyxDQUFDLFVBQVUsZ0JBQWdCLENBQUM7QUFBQSxJQUNsQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLGNBQWMsQ0FBQztBQUFBLElBQ3BDLENBQUMsTUFBTSxDQUFDLGFBQWEsa0JBQWtCLENBQUM7QUFBQSxJQUN4QyxDQUFDLEtBQUssQ0FBQyxVQUFVLGdDQUFnQyxDQUFDO0FBQUEsSUFDbEQsQ0FBQyxPQUFPLENBQUMsVUFBVSxtQ0FBbUMsQ0FBQztBQUFBLElBQ3ZELENBQUMsS0FBSyxDQUFDLFVBQVUsdUJBQXVCLENBQUM7QUFBQSxFQUMzQztBQUVBLE1BQU0sbUJBQWdDLGlCQUFpQixJQUFJLENBQ3pELENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUNaLENBQUMsTUFBTSxNQUFNLENBQUM7QUFFWixNQUFNLFdBQVcsSUFBSTtBQUFBLElBQzFCQyxZQUFXLFlBQ1AscUJBQ0FBLFlBQVcsV0FDWCxvQkFDQUEsWUFBVyxVQUNYLG1CQUNBLFlBQVk7QUFBQSxFQUNsQjtBQUVPLE1BQU0sVUFBVSxJQUFJO0FBQUEsSUFDekJBLFlBQVcsWUFDUCxxQkFDQUEsWUFBVyxXQUNYLG9CQUNBQSxZQUFXLFVBQ1gsbUJBQ0EsWUFBWTtBQUFBLEVBQ2xCO0FBRU8sV0FBUyxxQkFBcUIsVUFBMEI7QUFDN0QsUUFBSUEsWUFBVyxXQUFXO0FBQ3hCLFlBQU0sT0FBTyxvQkFBb0IsUUFBUTtBQUN6QyxhQUFPLFFBQVEsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUFBLElBQy9CLE9BQU87QUFDTCxhQUFPLENBQUM7QUFBQSxJQUNWO0FBQUEsRUFDRjtBQUVPLE1BQU0sZ0JBQWdCLFFBQVEsSUFBSSxZQUFZO0FBQzlDLE1BQU0sYUFBYSxRQUFRLElBQUksU0FBUztBQUN4QyxNQUFNLFdBQVcsUUFBUSxJQUFJLE9BQU87QUFDcEMsTUFBTSxZQUFZLFFBQVEsSUFBSSxRQUFRO0FBQ3RDLE1BQU0sY0FBYyxRQUFRLElBQUksVUFBVTs7O0FLdFZqRCxNQUFPQyxpQkFBUSxFQUFFLEdBQUdDLGVBQU07OztBQ0gxQjtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNPTyxNQUFLLFlBQUwsa0JBQUtDLGVBQUw7QUFDTCxJQUFBQSxzQkFBQTtBQUNBLElBQUFBLHNCQUFBO0FBQ0EsSUFBQUEsc0JBQUE7QUFDQSxJQUFBQSxzQkFBQTtBQUNBLElBQUFBLHNCQUFBO0FBQ0EsSUFBQUEsc0JBQUE7QUFDQSxJQUFBQSxzQkFBQTtBQUNBLElBQUFBLHNCQUFBO0FBQ0EsSUFBQUEsc0JBQUEsWUFBUyxLQUFUO0FBVFUsV0FBQUE7QUFBQSxLQUFBOzs7QURKWixNQUFNLFlBQVksQ0FBQztBQUNuQiw2QkFBNkI7QUFDN0IsOEJBQThCO0FBQzlCLGlDQUFpQztBQUNqQyw4QkFBOEI7QUFDOUIsMkJBQTJCO0FBQzNCLDhCQUE4QjtBQUM5Qiw0QkFBNEI7QUFDNUIsNEJBQTRCO0FBRTVCLE1BQU8seUJBQVEsRUFBRSxVQUFVOzs7QUViM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJTyxXQUFTLGNBQWNDLElBQXVCO0FBQ25ELFFBQUlBLE9BQU07QUFBRyxhQUFPLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztBQUV0QyxVQUFNLFFBQVEsQ0FBQztBQUNmLFVBQU0sUUFBUUEsS0FBSSxHQUFHO0FBQ3JCLFdBQU9BLE1BQUssS0FBSztBQUNmLE1BQUFBLEtBQUlBLE9BQU07QUFDVixZQUFNLFFBQVFBLEtBQUksR0FBRztBQUFBLElBQ3ZCO0FBQ0EsV0FBTyxJQUFJLFdBQVcsS0FBSztBQUFBLEVBQzdCO0FBUUEsV0FBUyxjQUNQLGNBQ0EsUUFDQSxRQUNBO0FBQ0EsYUFBUyxTQUFTLGFBQWEsU0FBUyxhQUFhLFNBQVM7QUFFOUQsVUFBTSxtQkFBbUIsYUFBYSxNQUFNLEdBQUcsU0FBUyxPQUFPLE1BQU07QUFDckUsVUFBTSw0QkFBNEIsaUJBQWlCLFNBQVM7QUFDNUQsVUFBTSxrQkFBa0IsT0FBTyxTQUFTO0FBS3hDLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksVUFBVTtBQUNkLFFBQUksUUFBUTtBQUNaLGFBQVNDLE1BQUksR0FBR0EsT0FBSywyQkFBMkJBLE9BQUs7QUFDbkQsVUFDRSxpQkFBaUIsNEJBQTRCQSxTQUMzQyxPQUFPLGtCQUFrQixVQUMzQjtBQUNBLFlBQUksbUJBQW1CLElBQUk7QUFDekIsMkJBQWlCQTtBQUFBLFFBQ25CO0FBQ0E7QUFBQSxNQUNGLE9BQU87QUFDTCxrQkFBVTtBQUNWLFlBQUksbUJBQW1CLElBQUk7QUFFekIsVUFBQUEsTUFBSSxpQkFBaUI7QUFDckIsMkJBQWlCO0FBQUEsUUFDbkI7QUFDQTtBQUFBLE1BQ0Y7QUFFQSxVQUFJLFlBQVksT0FBTyxRQUFRO0FBQzdCLGdCQUFRQTtBQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFVBQVU7QUFBSSxhQUFPO0FBRXpCLFdBQU8sNEJBQTRCO0FBQUEsRUFDckM7QUFJQSxXQUFTLGNBQ1AsY0FDQSxRQUNBLFlBQ0EsVUFDQSxrQkFDQTtBQUNBLFFBQUksQ0FBQyxVQUFVLGNBQWMsUUFBVztBQUN0QyxZQUFNLElBQUksTUFBTSx5QkFBeUIsVUFBVTtBQUFBLElBQ3JEO0FBRUEsUUFBSSxDQUFDLGtCQUFrQjtBQUdyQixVQUFJLGFBQWEsR0FBRztBQUNsQixxQkFBYSxhQUFhLFNBQVM7QUFBQSxNQUNyQztBQUVBLFVBQUksT0FBTyxXQUFXLEdBQUc7QUFDdkIsZUFBTyxjQUFjLGFBQWEsU0FDOUIsYUFDQSxhQUFhO0FBQUEsTUFDbkI7QUFFQSxhQUFPLGNBQWMsY0FBYyxRQUFRLFVBQVU7QUFBQSxJQUN2RDtBQUVBLFFBQUksT0FBTyxXQUFXLEdBQUc7QUFDdkIsYUFBTyxjQUFjLGFBQWEsU0FBUyxhQUFhLGFBQWE7QUFBQSxJQUN2RTtBQUVBLFdBQU8sY0FBYyxjQUFjLFFBQVEsVUFBVTtBQUFBLEVBQ3ZEO0FBSUEsV0FBUyxjQUNQLGNBQ0EsUUFDQSxZQUNBLGtCQUNBO0FBQ0EsVUFBTSxRQUFRLGNBQWMsTUFBTTtBQUVsQyxRQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3BCLFlBQU0sSUFBSSxNQUFNLDJDQUEyQztBQUFBLElBQzdEO0FBRUEsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBLGNBQWMsTUFBTTtBQUFBLE1BQ3BCO0FBQUE7QUFBQSxNQUVBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxNQUFPLGlCQUFRLEVBQUUsZUFBZSxjQUFjOzs7QUNySDlDLE1BQU0sWUFBWTtBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQU9PLFdBQVMsT0FBTyxNQUFvQztBQUN6RCxVQUFNLFFBQVEsT0FBTyxTQUFTLFdBQzFCLElBQUksWUFBWSxFQUFFLE9BQU8sSUFBSSxJQUM3QixnQkFBZ0IsYUFDaEIsT0FDQSxJQUFJLFdBQVcsSUFBSTtBQUN2QixRQUFJLFNBQVMsSUFDWEM7QUFDRixVQUFNQyxLQUFJLE1BQU07QUFDaEIsU0FBS0QsS0FBSSxHQUFHQSxLQUFJQyxJQUFHRCxNQUFLLEdBQUc7QUFDekIsZ0JBQVUsVUFBVSxNQUFNQSxLQUFJLE1BQU07QUFDcEMsZ0JBQVUsV0FBWSxNQUFNQSxLQUFJLEtBQUssTUFBUyxJQUFNLE1BQU1BLEtBQUksTUFBTTtBQUNwRSxnQkFBVSxXQUFZLE1BQU1BLEtBQUksS0FBSyxPQUFTLElBQU0sTUFBTUEsT0FBTTtBQUNoRSxnQkFBVSxVQUFVLE1BQU1BLE1BQUs7QUFBQSxJQUNqQztBQUNBLFFBQUlBLE9BQU1DLEtBQUksR0FBRztBQUVmLGdCQUFVLFVBQVUsTUFBTUQsS0FBSSxNQUFNO0FBQ3BDLGdCQUFVLFdBQVcsTUFBTUEsS0FBSSxLQUFLLE1BQVM7QUFDN0MsZ0JBQVU7QUFBQSxJQUNaO0FBQ0EsUUFBSUEsT0FBTUMsSUFBRztBQUVYLGdCQUFVLFVBQVUsTUFBTUQsS0FBSSxNQUFNO0FBQ3BDLGdCQUFVLFdBQVksTUFBTUEsS0FBSSxLQUFLLE1BQVMsSUFBTSxNQUFNQSxLQUFJLE1BQU07QUFDcEUsZ0JBQVUsV0FBVyxNQUFNQSxLQUFJLEtBQUssT0FBUztBQUM3QyxnQkFBVTtBQUFBLElBQ1o7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQU1PLFdBQVMsT0FBTyxLQUF5QjtBQUM5QyxVQUFNLFlBQVksS0FBSyxHQUFHO0FBQzFCLFVBQU0sT0FBTyxVQUFVO0FBQ3ZCLFVBQU0sUUFBUSxJQUFJLFdBQVcsSUFBSTtBQUNqQyxhQUFTQSxLQUFJLEdBQUdBLEtBQUksTUFBTUEsTUFBSztBQUM3QixZQUFNQSxNQUFLLFVBQVUsV0FBV0EsRUFBQztBQUFBLElBQ25DO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7OztBQzVHQSxXQUFTLHNCQUFzQixXQUEyQjtBQUN4RCxRQUFJLFVBQVUsU0FBUyxNQUFNO0FBQUcsYUFBTyxZQUFZO0FBQ25ELFFBQUksVUFBVSxTQUFTLE1BQU07QUFBRyxhQUFPLFlBQVk7QUFDbkQsUUFBSSxVQUFVLFNBQVMsTUFBTSxHQUFHO0FBQzlCLFlBQU0sSUFBSSxVQUFVLDJCQUEyQjtBQUFBLElBQ2pEO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLHlCQUF5QixRQUF3QjtBQUN4RCxRQUFJLENBQUMsd0JBQXdCLEtBQUssTUFBTSxHQUFHO0FBRXpDLFlBQU0sSUFBSSxVQUFVLCtDQUErQztBQUFBLElBQ3JFO0FBQ0EsV0FBTyxzQkFBc0IsTUFBTSxFQUFFLFFBQVEsT0FBTyxHQUFHLEVBQUUsUUFBUSxNQUFNLEdBQUc7QUFBQSxFQUM1RTtBQUVBLFdBQVMseUJBQXlCLEtBQXFCO0FBQ3JELFdBQU8sSUFBSSxRQUFRLE1BQU0sRUFBRSxFQUFFLFFBQVEsT0FBTyxHQUFHLEVBQUUsUUFBUSxPQUFPLEdBQUc7QUFBQSxFQUNyRTtBQU1PLFdBQVNFLFFBQU8sTUFBb0M7QUFDekQsV0FBTyx5QkFBZ0MsT0FBTyxJQUFJLENBQUM7QUFBQSxFQUNyRDtBQU1PLFdBQVNDLFFBQU8sUUFBNEI7QUFDakQsV0FBYyxPQUFPLHlCQUF5QixNQUFNLENBQUM7QUFBQSxFQUN2RDs7O0FDakRPLFdBQVMsYUFBYUMsTUFBYTtBQUN4QyxVQUFNLFlBQVksQ0FBQztBQUNuQixhQUFTQyxLQUFJLEdBQUdBLEtBQUlELEtBQUksUUFBUSxFQUFFQyxJQUFHO0FBQ25DLGdCQUFVLEtBQUtELEtBQUksV0FBV0MsRUFBQyxJQUFJLEdBQUc7QUFBQSxJQUN4QztBQUNBLFdBQU8sSUFBSSxXQUFXLFNBQVM7QUFBQSxFQUNqQztBQUVPLFdBQVMsY0FBY0QsTUFBYTtBQUN6QyxJQUFBQSxPQUFNLFlBQVlBLElBQUc7QUFDckIsSUFBQUEsT0FBTUEsS0FBSSxXQUFXLEtBQUssR0FBRyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2xELFdBQWMsT0FBT0EsSUFBRztBQUFBLEVBQzFCO0FBRUEsTUFBTSxvQkFBb0I7QUFDMUIsV0FBUyxZQUFZQSxNQUFhO0FBRWhDLElBQUFBLE9BQU1BLEtBQUksTUFBTSxHQUFHLEVBQUU7QUFFckIsSUFBQUEsT0FBTUEsS0FBSSxLQUFLLEVBQUUsUUFBUSxtQkFBbUIsRUFBRTtBQUU5QyxRQUFJQSxLQUFJLFNBQVM7QUFBRyxhQUFPO0FBRTNCLFdBQU9BLEtBQUksU0FBUyxNQUFNLEdBQUc7QUFDM0IsTUFBQUEsT0FBTUEsT0FBTTtBQUFBLElBQ2Q7QUFDQSxXQUFPQTtBQUFBLEVBQ1Q7QUFFTyxXQUFTLGlCQUFpQkEsTUFBYTtBQUM1QyxJQUFBQSxPQUFNLFlBQVlBLElBQUc7QUFDckIsSUFBQUEsT0FBTUEsS0FBSSxXQUFXLEtBQUssR0FBRyxFQUFFLFdBQVcsS0FBSyxHQUFHO0FBQ2xELFdBQWlCRSxRQUFPRixJQUFHO0FBQUEsRUFDN0I7QUFFTyxXQUFTLFdBQVdBLE1BQWE7QUFDdEMsVUFBTSxZQUFZLElBQUksV0FBVyxLQUFLLE9BQU9BLFFBQU8sSUFBSSxTQUFTLENBQUMsQ0FBQztBQUNuRSxRQUFJQztBQUNKLFNBQUtBLEtBQUksR0FBR0EsS0FBSSxVQUFVLFFBQVFBLE1BQUs7QUFDckMsWUFBTUUsS0FBSSxPQUFPLFNBQVNILEtBQUlDLEtBQUksSUFBSSxFQUFFO0FBQ3hDLFlBQU1HLE1BQUksT0FBTyxTQUFTSixLQUFJQyxLQUFJLElBQUksSUFBSSxFQUFFO0FBQzVDLFVBQUksT0FBTyxNQUFNRSxFQUFDLEtBQUssT0FBTyxNQUFNQyxHQUFDLEdBQUc7QUFDdEM7QUFBQSxNQUNGO0FBQ0EsZ0JBQVVILE1BQU1FLE1BQUssSUFBS0M7QUFBQSxJQUM1QjtBQUNBLFdBQU8sSUFBSTtBQUFBLE1BQ1RILE9BQU0sVUFBVSxTQUFTLFlBQVksVUFBVSxNQUFNLEdBQUdBLEVBQUM7QUFBQSxJQUMzRDtBQUFBLEVBQ0Y7QUFFTyxXQUFTLGVBQWVELE1BQWEsT0FBZTtBQUN6RCxRQUFJSyxLQUFHQyxLQUFJO0FBQ1gsVUFBTSxZQUFZLENBQUM7QUFDbkIsYUFBU0wsS0FBSSxHQUFHQSxLQUFJRCxLQUFJLFFBQVEsRUFBRUMsSUFBRztBQUNuQyxXQUFLLFNBQVMsS0FBSyxHQUFHO0FBQ3BCO0FBQUEsTUFDRjtBQUNBLE1BQUFJLE1BQUlMLEtBQUksV0FBV0MsRUFBQztBQUNwQixNQUFBSyxNQUFLRCxPQUFLO0FBQ1YsV0FBS0EsTUFBSTtBQUNULGdCQUFVLEtBQUssRUFBRTtBQUNqQixnQkFBVSxLQUFLQyxHQUFFO0FBQUEsSUFDbkI7QUFDQSxXQUFPLElBQUksV0FBVyxTQUFTO0FBQUEsRUFDakM7QUFFTyxXQUFTLGFBQWEsT0FBbUI7QUFDOUMsUUFBSSxNQUFNO0FBQ1YsYUFBU0wsS0FBSSxHQUFHQSxLQUFJLE1BQU0sUUFBUSxFQUFFQSxJQUFHO0FBQ3JDLGFBQU8sT0FBTyxhQUFhLE1BQU1BLE1BQUssR0FBRztBQUFBLElBQzNDO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFTyxXQUFTLGVBQWUsT0FBbUI7QUFDaEQsUUFBSSxNQUFNO0FBQ1YsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLE1BQU0sU0FBUyxHQUFHQSxNQUFLLEdBQUc7QUFDNUMsYUFBTyxPQUFPLGFBQWEsTUFBTUEsTUFBSyxNQUFNQSxLQUFJLEtBQUssR0FBRztBQUFBLElBQzFEO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7OztBQ3RFQSxNQUFNLGNBQWMsSUFBSSxZQUFZO0FBR3BDLE1BQU0sZUFBZSxJQUFJLGFBQWEsQ0FBQztBQUN2QyxNQUFNLG9CQUFvQixJQUFJLFdBQVcsYUFBYSxNQUFNO0FBQzVELE1BQU0sZUFBZSxJQUFJLGFBQWEsQ0FBQztBQUN2QyxNQUFNLG9CQUFvQixJQUFJLFdBQVcsYUFBYSxNQUFNO0FBRzVELGVBQWEsS0FBSztBQUdYLE1BQU0sWUFBWSxrQkFBa0IsT0FBTztBQUUzQyxXQUFTLGFBQWEsS0FBSyxTQUFTLEdBQUc7QUFDNUMsbUJBQWUsUUFBUSxRQUFRO0FBQy9CLFVBQU0sUUFBUSxJQUFJO0FBQ2xCLFVBQU0sT0FBTyxJQUFJLFNBQVM7QUFDMUIsUUFBSSxVQUFVLFVBQWEsU0FBUyxRQUFXO0FBQzdDLGtCQUFZLFFBQVEsSUFBSSxTQUFTLENBQUM7QUFBQSxJQUNwQztBQUVBLFdBQU8sUUFDTCxJQUFJLEVBQUUsVUFBVSxLQUFLLElBQ3JCLElBQUksRUFBRSxVQUFVLEtBQUssS0FDckIsSUFBSSxFQUFFLFVBQVUsS0FBSyxNQUNwQixJQUFJLEVBQUUsVUFBVSxPQUFPLEtBQUssS0FBSyxLQUFLO0FBQUEsRUFDM0M7QUFFTyxXQUFTLGFBQWEsS0FBSyxTQUFTLEdBQUc7QUFDNUMsbUJBQWUsUUFBUSxRQUFRO0FBQy9CLFVBQU0sUUFBUSxJQUFJO0FBQ2xCLFVBQU0sT0FBTyxJQUFJLFNBQVM7QUFDMUIsUUFBSSxVQUFVLFVBQWEsU0FBUyxRQUFXO0FBQzdDLGtCQUFZLFFBQVEsSUFBSSxTQUFTLENBQUM7QUFBQSxJQUNwQztBQUVBLFdBQU8sUUFDTCxJQUFJLEVBQUUsVUFBVSxLQUFLLElBQ3JCLElBQUksRUFBRSxVQUFVLEtBQUssS0FDckIsSUFBSSxFQUFFLFVBQVUsS0FBSyxLQUNyQixPQUFPLEtBQUs7QUFBQSxFQUNoQjtBQUVPLFdBQVMsYUFBYSxLQUFLLFNBQVMsR0FBRztBQUM1QyxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsVUFBTSxRQUFRLElBQUk7QUFDbEIsVUFBTSxPQUFPLElBQUksU0FBUztBQUMxQixRQUFJLFVBQVUsVUFBYSxTQUFTLFFBQVc7QUFDN0Msa0JBQVksUUFBUSxJQUFJLFNBQVMsQ0FBQztBQUFBLElBQ3BDO0FBRUEsV0FBTyxRQUFRLElBQUksRUFBRSxVQUFVLEtBQUssSUFBSSxPQUFPLEtBQUs7QUFBQSxFQUN0RDtBQUVPLFdBQVMsYUFBYSxLQUFLLFNBQVMsR0FBRztBQUM1QyxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsVUFBTSxRQUFRLElBQUk7QUFDbEIsVUFBTSxPQUFPLElBQUksU0FBUztBQUMxQixRQUFJLFVBQVUsVUFBYSxTQUFTLFFBQVc7QUFDN0Msa0JBQVksUUFBUSxJQUFJLFNBQVMsQ0FBQztBQUFBLElBQ3BDO0FBRUEsWUFBUSxRQUFRLEtBQUssSUFBSSxJQUFJLEVBQUUsV0FBVyxLQUFLLEtBQzdDLElBQUksRUFBRSxVQUFVLEtBQUssS0FDckIsSUFBSSxFQUFFLFVBQVUsS0FBSyxLQUNyQixJQUFJLEVBQUUsVUFBVSxLQUFLLElBQ3JCO0FBQUEsRUFDSjtBQUVPLFdBQVMsYUFBYSxLQUFLLFNBQVMsR0FBRztBQUM1QyxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsVUFBTSxRQUFRLElBQUk7QUFDbEIsVUFBTSxPQUFPLElBQUksU0FBUztBQUMxQixRQUFJLFVBQVUsVUFBYSxTQUFTLFFBQVc7QUFDN0Msa0JBQVksUUFBUSxJQUFJLFNBQVMsQ0FBQztBQUFBLElBQ3BDO0FBRUEsV0FBTyxRQUFRLEtBQUssS0FDbEIsSUFBSSxFQUFFLFVBQVUsS0FBSyxLQUNyQixJQUFJLEVBQUUsVUFBVSxLQUFLLEtBQ3JCLElBQUksRUFBRSxVQUFVLEtBQUssSUFDckI7QUFBQSxFQUNKO0FBRU8sV0FBUyxhQUFhLEtBQUssU0FBUyxHQUFHO0FBQzVDLG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsSUFBSTtBQUNsQixVQUFNLE9BQU8sSUFBSSxTQUFTO0FBQzFCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDcEM7QUFFQSxXQUFPLFFBQVEsS0FBSyxLQUFLLElBQUksRUFBRSxVQUFVLEtBQUssSUFBSTtBQUFBLEVBQ3BEO0FBRU8sV0FBUyxhQUFhLFNBQVMsR0FBRztBQUN2QyxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsVUFBTSxRQUFRLEtBQUs7QUFDbkIsVUFBTSxPQUFPLEtBQUssU0FBUztBQUMzQixRQUFJLFVBQVUsVUFBYSxTQUFTLFFBQVc7QUFDN0Msa0JBQVksUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUFBLElBQ3JDO0FBRUEsV0FBTyxRQUFRLEtBQUssSUFBSTtBQUFBLEVBQzFCO0FBRU8sV0FBUyxhQUFhLFNBQVMsR0FBRztBQUN2QyxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsVUFBTSxRQUFRLEtBQUs7QUFDbkIsVUFBTSxPQUFPLEtBQUssU0FBUztBQUMzQixRQUFJLFVBQVUsVUFBYSxTQUFTLFFBQVc7QUFDN0Msa0JBQVksUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUFBLElBQ3JDO0FBRUEsV0FBTyxRQUFRLEtBQUssS0FDbEIsS0FBSyxFQUFFLFVBQVUsS0FBSyxLQUN0QixLQUFLLEVBQUUsVUFBVSxLQUFLLElBQ3RCO0FBQUEsRUFDSjtBQUVPLFdBQVMsb0JBQW9CLFFBQVEsU0FBUyxHQUFHO0FBQ3RELG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsT0FBTztBQUNyQixVQUFNLE9BQU8sT0FBTyxTQUFTO0FBQzdCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQUEsSUFDdkM7QUFFQSxzQkFBa0IsS0FBSztBQUN2QixzQkFBa0IsS0FBSyxPQUFPLEVBQUU7QUFDaEMsc0JBQWtCLEtBQUssT0FBTyxFQUFFO0FBQ2hDLHNCQUFrQixLQUFLLE9BQU8sRUFBRTtBQUNoQyxzQkFBa0IsS0FBSyxPQUFPLEVBQUU7QUFDaEMsc0JBQWtCLEtBQUssT0FBTyxFQUFFO0FBQ2hDLHNCQUFrQixLQUFLLE9BQU8sRUFBRTtBQUNoQyxzQkFBa0IsS0FBSztBQUN2QixXQUFPLGFBQWE7QUFBQSxFQUN0QjtBQUVPLFdBQVMsbUJBQW1CLFFBQVEsU0FBUyxHQUFHO0FBQ3JELG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsT0FBTztBQUNyQixVQUFNLE9BQU8sT0FBTyxTQUFTO0FBQzdCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQUEsSUFDdkM7QUFFQSxzQkFBa0IsS0FBSztBQUN2QixzQkFBa0IsS0FBSyxPQUFPLEVBQUU7QUFDaEMsc0JBQWtCLEtBQUssT0FBTyxFQUFFO0FBQ2hDLHNCQUFrQixLQUFLLE9BQU8sRUFBRTtBQUNoQyxzQkFBa0IsS0FBSyxPQUFPLEVBQUU7QUFDaEMsc0JBQWtCLEtBQUssT0FBTyxFQUFFO0FBQ2hDLHNCQUFrQixLQUFLLE9BQU8sRUFBRTtBQUNoQyxzQkFBa0IsS0FBSztBQUN2QixXQUFPLGFBQWE7QUFBQSxFQUN0QjtBQUVPLFdBQVMsb0JBQW9CLFFBQVEsS0FBSyxTQUFTLEdBQUc7QUFDM0QsVUFBTSxDQUFDO0FBQ1AsZ0JBQVksUUFBUSxRQUFRLENBQUM7QUFFN0IsaUJBQWEsS0FBSztBQUNsQixXQUFPLFlBQVksa0JBQWtCO0FBQ3JDLFdBQU8sWUFBWSxrQkFBa0I7QUFDckMsV0FBTyxZQUFZLGtCQUFrQjtBQUNyQyxXQUFPLFlBQVksa0JBQWtCO0FBQ3JDLFdBQU8sWUFBWSxrQkFBa0I7QUFDckMsV0FBTyxZQUFZLGtCQUFrQjtBQUNyQyxXQUFPLFlBQVksa0JBQWtCO0FBQ3JDLFdBQU8sWUFBWSxrQkFBa0I7QUFDckMsV0FBTztBQUFBLEVBQ1Q7QUFFTyxXQUFTLHFCQUFxQixRQUFRLEtBQUssU0FBUyxHQUFHO0FBQzVELFVBQU0sQ0FBQztBQUNQLGdCQUFZLFFBQVEsUUFBUSxDQUFDO0FBRTdCLGlCQUFhLEtBQUs7QUFDbEIsV0FBTyxZQUFZLGtCQUFrQjtBQUNyQyxXQUFPLFlBQVksa0JBQWtCO0FBQ3JDLFdBQU8sWUFBWSxrQkFBa0I7QUFDckMsV0FBTyxZQUFZLGtCQUFrQjtBQUNyQyxXQUFPLFlBQVksa0JBQWtCO0FBQ3JDLFdBQU8sWUFBWSxrQkFBa0I7QUFDckMsV0FBTyxZQUFZLGtCQUFrQjtBQUNyQyxXQUFPLFlBQVksa0JBQWtCO0FBQ3JDLFdBQU87QUFBQSxFQUNUO0FBRU8sV0FBUyxtQkFBbUIsUUFBUSxTQUFTLEdBQUc7QUFDckQsbUJBQWUsUUFBUSxRQUFRO0FBQy9CLFVBQU0sUUFBUSxPQUFPO0FBQ3JCLFVBQU0sT0FBTyxPQUFPLFNBQVM7QUFDN0IsUUFBSSxVQUFVLFVBQWEsU0FBUyxRQUFXO0FBQzdDLGtCQUFZLFFBQVEsT0FBTyxTQUFTLENBQUM7QUFBQSxJQUN2QztBQUVBLHNCQUFrQixLQUFLO0FBQ3ZCLHNCQUFrQixLQUFLLE9BQU8sRUFBRTtBQUNoQyxzQkFBa0IsS0FBSyxPQUFPLEVBQUU7QUFDaEMsc0JBQWtCLEtBQUs7QUFDdkIsV0FBTyxhQUFhO0FBQUEsRUFDdEI7QUFFTyxXQUFTLGtCQUFrQixRQUFRLFNBQVMsR0FBRztBQUNwRCxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsVUFBTSxRQUFRLE9BQU87QUFDckIsVUFBTSxPQUFPLE9BQU8sU0FBUztBQUM3QixRQUFJLFVBQVUsVUFBYSxTQUFTLFFBQVc7QUFDN0Msa0JBQVksUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUFBLElBQ3ZDO0FBRUEsc0JBQWtCLEtBQUs7QUFDdkIsc0JBQWtCLEtBQUssT0FBTyxFQUFFO0FBQ2hDLHNCQUFrQixLQUFLLE9BQU8sRUFBRTtBQUNoQyxzQkFBa0IsS0FBSztBQUN2QixXQUFPLGFBQWE7QUFBQSxFQUN0QjtBQUVPLFdBQVMsbUJBQW1CLFFBQVEsS0FBSyxTQUFTLEdBQUc7QUFDMUQsVUFBTSxDQUFDO0FBQ1AsZ0JBQVksUUFBUSxRQUFRLENBQUM7QUFFN0IsaUJBQWEsS0FBSztBQUNsQixXQUFPLFlBQVksa0JBQWtCO0FBQ3JDLFdBQU8sWUFBWSxrQkFBa0I7QUFDckMsV0FBTyxZQUFZLGtCQUFrQjtBQUNyQyxXQUFPLFlBQVksa0JBQWtCO0FBQ3JDLFdBQU87QUFBQSxFQUNUO0FBRU8sV0FBUyxvQkFBb0IsUUFBUSxLQUFLLFNBQVMsR0FBRztBQUMzRCxVQUFNLENBQUM7QUFDUCxnQkFBWSxRQUFRLFFBQVEsQ0FBQztBQUU3QixpQkFBYSxLQUFLO0FBQ2xCLFdBQU8sWUFBWSxrQkFBa0I7QUFDckMsV0FBTyxZQUFZLGtCQUFrQjtBQUNyQyxXQUFPLFlBQVksa0JBQWtCO0FBQ3JDLFdBQU8sWUFBWSxrQkFBa0I7QUFDckMsV0FBTztBQUFBLEVBQ1Q7QUFFTyxXQUFTLFlBQVksS0FBSyxTQUFTLEdBQUc7QUFDM0MsbUJBQWUsUUFBUSxRQUFRO0FBQy9CLFVBQU0sUUFBUSxJQUFJO0FBQ2xCLFVBQU0sT0FBTyxJQUFJLFNBQVM7QUFDMUIsUUFBSSxVQUFVLFVBQWEsU0FBUyxRQUFXO0FBQzdDLGtCQUFZLFFBQVEsSUFBSSxTQUFTLENBQUM7QUFBQSxJQUNwQztBQUVBLFVBQU0sTUFBTSxRQUFRLElBQUksRUFBRSxVQUFVLEtBQUssSUFBSSxPQUFPLEtBQUs7QUFDekQsV0FBTyxPQUFPLE1BQU0sS0FBSyxNQUFNO0FBQUEsRUFDakM7QUFFTyxXQUFTLFlBQVksS0FBSyxTQUFTLEdBQUc7QUFDM0MsbUJBQWUsUUFBUSxRQUFRO0FBQy9CLFVBQU0sUUFBUSxJQUFJO0FBQ2xCLFVBQU0sT0FBTyxJQUFJLFNBQVM7QUFDMUIsUUFBSSxVQUFVLFVBQWEsU0FBUyxRQUFXO0FBQzdDLGtCQUFZLFFBQVEsSUFBSSxTQUFTLENBQUM7QUFBQSxJQUNwQztBQUVBLFlBQVEsUUFBUSxPQUFPLEtBQUssS0FBSyxZQUFhLEtBQUssS0FDakQsUUFDQSxJQUFJLEVBQUUsVUFBVSxLQUFLLElBQ3JCLElBQUksRUFBRSxVQUFVLEtBQUssS0FDckIsSUFBSSxFQUFFLFVBQVUsS0FBSztBQUFBLEVBQ3pCO0FBRU8sV0FBUyxZQUFZLEtBQUssU0FBUyxHQUFHO0FBQzNDLG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsSUFBSTtBQUNsQixVQUFNLE9BQU8sSUFBSSxTQUFTO0FBQzFCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDcEM7QUFFQSxVQUFNLE1BQU0sSUFBSSxTQUFTLEtBQUssT0FBTyxLQUFLO0FBQzFDLFlBQVEsT0FBTyxNQUFNLEtBQUssTUFBTSxVQUFXLEtBQUssS0FDOUMsUUFDQSxJQUFJLEVBQUUsVUFBVSxLQUFLLElBQ3JCLElBQUksRUFBRSxVQUFVLEtBQUssS0FDckIsSUFBSSxFQUFFLFVBQVUsS0FBSztBQUFBLEVBQ3pCO0FBRU8sV0FBUyxZQUFZLEtBQUssU0FBUyxHQUFHO0FBQzNDLG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsSUFBSTtBQUNsQixVQUFNLE9BQU8sSUFBSSxTQUFTO0FBQzFCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDcEM7QUFFQSxVQUFNLE1BQU0sUUFBUSxLQUFLLEtBQUssSUFBSSxFQUFFLFVBQVUsS0FBSyxJQUFJO0FBQ3ZELFdBQU8sT0FBTyxNQUFNLEtBQUssTUFBTTtBQUFBLEVBQ2pDO0FBRU8sV0FBUyxZQUFZLEtBQUssU0FBUyxHQUFHO0FBQzNDLG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsSUFBSTtBQUNsQixVQUFNLE9BQU8sSUFBSSxTQUFTO0FBQzFCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDcEM7QUFFQSxVQUFNLE1BQU0sSUFBSSxFQUFFLFVBQVUsUUFBUSxLQUFLO0FBQ3pDLFlBQVEsT0FBTyxNQUFNLEtBQUssTUFBTSxVQUFXLEtBQUssS0FDOUMsSUFBSSxFQUFFLFVBQVUsS0FBSyxLQUNyQixJQUFJLEVBQUUsVUFBVSxLQUFLLEtBQ3JCLElBQUksRUFBRSxVQUFVLEtBQUssSUFDckI7QUFBQSxFQUNKO0FBRU8sV0FBUyxZQUFZLEtBQUssU0FBUyxHQUFHO0FBQzNDLG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsSUFBSTtBQUNsQixVQUFNLE9BQU8sSUFBSSxTQUFTO0FBQzFCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDcEM7QUFFQSxZQUFRLFNBQVMsUUFBUSxLQUFLLEtBQUssWUFBYSxLQUFLLEtBQ25ELElBQUksRUFBRSxVQUFVLEtBQUssS0FDckIsSUFBSSxFQUFFLFVBQVUsS0FBSyxLQUNyQixJQUFJLEVBQUUsVUFBVSxLQUFLLElBQ3JCO0FBQUEsRUFDSjtBQUVPLFdBQVMsZUFBZU0sTUFBSztBQUNsQyxXQUFPLFlBQVksT0FBT0EsSUFBRyxFQUFFO0FBQUEsRUFDakM7QUFFQSxXQUFTLGlCQUFpQkEsTUFBSyxPQUFPO0FBRXBDLFFBQUlBLEtBQUksV0FBVyxRQUFRLENBQUMsTUFBTSxJQUFNO0FBQ3RDO0FBQUEsSUFDRjtBQUNBLFFBQUksUUFBUSxLQUFLQSxLQUFJLFdBQVcsUUFBUSxDQUFDLE1BQU0sSUFBTTtBQUNuRDtBQUFBLElBQ0Y7QUFHQSxXQUFRLFFBQVEsTUFBTztBQUFBLEVBQ3pCO0FBRU8sTUFBTSxlQUFlLHVCQUFPLE9BQU8sSUFBSTtBQUM5QyxXQUFTQyxLQUFJLEdBQUdBLEtBQUksVUFBVSxRQUFRLEVBQUVBLElBQUc7QUFDekMsaUJBQWEsVUFBVUEsT0FBTUE7QUFBQSxFQUMvQjtBQUVPLE1BQU0sY0FBYztBQUFBLElBQ3pCLE9BQU87QUFBQSxNQUNMLFlBQVksQ0FBQyxXQUFXLE9BQU87QUFBQSxNQUMvQixVQUFVO0FBQUEsTUFDVixhQUFhLGFBQWE7QUFBQSxNQUMxQixTQUFTLENBQUMsS0FBSyxLQUFLLFlBQVksUUFDOUI7QUFBQSxRQUNFO0FBQUEsUUFDQSxhQUFhLEdBQUc7QUFBQSxRQUNoQjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBQUEsTUFDRixPQUFPLENBQUMsS0FBSyxPQUFPLFFBQVEsSUFBSSxXQUFXLE9BQU8sR0FBRztBQUFBLE1BQ3JELE9BQU8sQ0FBQyxLQUFLLFFBQVEsUUFBUSxRQUFRLElBQUksV0FBVyxRQUFRLFFBQVEsR0FBRztBQUFBLElBQ3pFO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixZQUFZLENBQUMsV0FBVyxpQkFBaUIsUUFBUSxPQUFPLE1BQU07QUFBQSxNQUM5RCxVQUFVO0FBQUEsTUFDVixhQUFhLGFBQWE7QUFBQSxNQUMxQixTQUFTLENBQUMsS0FBSyxLQUFLLFlBQVksUUFDOUI7QUFBQSxRQUNFO0FBQUEsUUFDQSxjQUFjLEdBQUc7QUFBQSxRQUNqQjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBQUEsTUFDRixPQUFPLENBQUMsS0FBSyxPQUFPLFFBQVEsSUFBSSxZQUFZLE9BQU8sR0FBRztBQUFBLE1BQ3RELE9BQU8sQ0FBQyxLQUFLLFFBQVEsUUFBUSxRQUFRLElBQUksWUFBWSxRQUFRLFFBQVEsR0FBRztBQUFBLElBQzFFO0FBQUEsSUFDQSxXQUFXO0FBQUEsTUFDVCxZQUFZLENBQUMsV0FBVyxpQkFBaUIsUUFBUSxPQUFPLE1BQU07QUFBQSxNQUM5RCxVQUFVO0FBQUEsTUFDVixhQUFhLGFBQWE7QUFBQSxNQUMxQixTQUFTLENBQUMsS0FBSyxLQUFLLFlBQVksUUFDOUI7QUFBQSxRQUNFO0FBQUEsUUFDQSxpQkFBaUIsR0FBRztBQUFBLFFBQ3BCO0FBQUEsUUFDQSxhQUFhO0FBQUEsUUFDYjtBQUFBLE1BQ0Y7QUFBQSxNQUNGLE9BQU8sQ0FBQyxLQUFLLE9BQU8sUUFBUSxJQUFJLGVBQWUsT0FBTyxHQUFHO0FBQUEsTUFDekQsT0FBTyxDQUFDLEtBQUssUUFBUSxRQUFRLFFBQzNCLElBQUksZUFBZSxRQUFRLFFBQVEsR0FBRztBQUFBLElBQzFDO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDSCxZQUFZLENBQUMsV0FBVyxPQUFPLFdBQVc7QUFBQSxNQUMxQyxVQUFVO0FBQUEsTUFDVixhQUFhLGFBQWE7QUFBQSxNQUMxQixTQUFTLENBQUMsS0FBSyxLQUFLLFlBQVksUUFDOUI7QUFBQSxRQUNFO0FBQUEsUUFDQSxXQUFXLEdBQUc7QUFBQSxRQUNkO0FBQUEsUUFDQSxhQUFhO0FBQUEsUUFDYjtBQUFBLE1BQ0Y7QUFBQSxNQUNGLE9BQU8sQ0FBQyxLQUFLLE9BQU8sUUFBUSxJQUFJLFNBQVMsT0FBTyxHQUFHO0FBQUEsTUFDbkQsT0FBTyxDQUFDLEtBQUssUUFBUSxRQUFRLFFBQVEsSUFBSSxTQUFTLFFBQVEsUUFBUSxHQUFHO0FBQUEsSUFDdkU7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLFlBQVksQ0FBQyxXQUFXLE9BQU87QUFBQSxNQUMvQixVQUFVO0FBQUEsTUFDVixhQUFhLGFBQWE7QUFBQSxNQUMxQixTQUFTLENBQUMsS0FBSyxLQUFLLFlBQVksUUFDOUI7QUFBQSxRQUNFO0FBQUEsUUFDQSxhQUFhLEdBQUc7QUFBQSxRQUNoQjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBQUEsTUFDRixPQUFPLENBQUMsS0FBSyxPQUFPLFFBQVEsSUFBSSxZQUFZLE9BQU8sR0FBRztBQUFBLE1BQ3RELE9BQU8sQ0FBQyxLQUFLLFFBQVEsUUFBUSxRQUFRLElBQUksWUFBWSxRQUFRLFFBQVEsR0FBRztBQUFBLElBQzFFO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixZQUFZLENBQUMsV0FBVyxPQUFPLFNBQVM7QUFBQSxNQUN4QyxVQUFVO0FBQUEsTUFDVixhQUFhLGFBQWE7QUFBQSxNQUMxQixTQUFTLENBQUMsS0FBSyxLQUFLLFlBQVksUUFDOUI7QUFBQSxRQUNFO0FBQUEsUUFDQSxlQUFlLEdBQUc7QUFBQSxRQUNsQjtBQUFBLFFBQ0EsYUFBYTtBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBQUEsTUFDRixPQUFPLENBQUMsS0FBSyxPQUFPLFFBQVEsSUFBSSxVQUFVLE9BQU8sR0FBRztBQUFBLE1BQ3BELE9BQU8sQ0FBQyxLQUFLLFFBQVEsUUFBUSxRQUFRLElBQUksVUFBVSxRQUFRLFFBQVEsR0FBRztBQUFBLElBQ3hFO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDSixZQUFZO0FBQUEsTUFDWixVQUFVO0FBQUEsTUFDVixhQUFhLGFBQWE7QUFBQSxNQUMxQixTQUFTLENBQUMsS0FBSyxLQUFLLFlBQVksUUFDOUI7QUFBQSxRQUNFO0FBQUEsUUFDQSxZQUFZLE9BQU8sR0FBRztBQUFBLFFBQ3RCO0FBQUEsUUFDQSxhQUFhO0FBQUEsUUFDYjtBQUFBLE1BQ0Y7QUFBQSxNQUNGLE9BQU8sQ0FBQyxLQUFLLE9BQU8sUUFBUSxJQUFJLFVBQVUsT0FBTyxHQUFHO0FBQUEsTUFDcEQsT0FBTyxDQUFDLEtBQUssUUFBUSxRQUFRLFFBQVEsSUFBSSxVQUFVLFFBQVEsUUFBUSxHQUFHO0FBQUEsSUFDeEU7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLFlBQVksQ0FBQyxXQUFXLE9BQU8sU0FBUztBQUFBLE1BQ3hDLFVBQVU7QUFBQSxNQUNWLGFBQWEsYUFBYTtBQUFBLE1BQzFCLFNBQVMsQ0FBQyxLQUFLLEtBQUssWUFBWSxRQUM5QjtBQUFBLFFBQ0U7QUFBQSxRQUNBLGVBQWUsR0FBRztBQUFBLFFBQ2xCO0FBQUEsUUFDQSxhQUFhO0FBQUEsUUFDYjtBQUFBLE1BQ0Y7QUFBQSxNQUNGLE9BQU8sQ0FBQyxLQUFLLE9BQU8sUUFBUSxJQUFJLFVBQVUsT0FBTyxHQUFHO0FBQUEsTUFDcEQsT0FBTyxDQUFDLEtBQUssUUFBUSxRQUFRLFFBQVEsSUFBSSxVQUFVLFFBQVEsUUFBUSxHQUFHO0FBQUEsSUFDeEU7QUFBQSxFQUNGO0FBRU8sV0FBUyxlQUFlLFVBQVU7QUFDdkMsZUFBVyxPQUFPLFFBQVEsRUFBRSxZQUFZO0FBQ3hDLFlBQVEsU0FBUztBQUFBLFdBQ1Y7QUFDSCxZQUFJLGFBQWE7QUFBUSxpQkFBTyxZQUFZO0FBQzVDLFlBQUksYUFBYTtBQUFRLGlCQUFPLFlBQVk7QUFDNUM7QUFBQSxXQUNHO0FBQ0gsWUFBSSxhQUFhO0FBQVMsaUJBQU8sWUFBWTtBQUM3QyxZQUFJLGFBQWE7QUFBUyxpQkFBTyxZQUFZO0FBQzdDLFlBQUksYUFBYTtBQUFTLGlCQUFPLFlBQVk7QUFDN0M7QUFBQSxXQUNHO0FBQ0gsWUFBSSxhQUFhLFdBQVc7QUFDMUIsaUJBQU8sWUFBWTtBQUFBLFFBQ3JCO0FBQ0E7QUFBQSxXQUNHO0FBQ0gsWUFBSSxhQUFhLFlBQVk7QUFDM0IsaUJBQU8sWUFBWTtBQUFBLFFBQ3JCO0FBQ0E7QUFBQSxXQUVHO0FBQ0gsWUFBSSxhQUFhLFlBQVksYUFBYSxVQUFVO0FBQ2xELGlCQUFPLFlBQVk7QUFBQSxRQUNyQjtBQUNBLFlBQUksYUFBYTtBQUFVLGlCQUFPLFlBQVk7QUFBQSxXQUMzQztBQUNILFlBQUksYUFBYSxPQUFPO0FBQ3RCLGlCQUFPLFlBQVk7QUFBQSxRQUNyQjtBQUNBO0FBQUEsV0FDRztBQUNILFlBQUksYUFBYSxhQUFhO0FBQzVCLGlCQUFPLFlBQVk7QUFBQSxRQUNyQjtBQUNBO0FBQUE7QUFBQSxFQUVOO0FBRU8sV0FBUyxZQUNkLFFBQ0EsUUFDQSxhQUNBLGFBQ0EsV0FDQTtBQUNBLFFBQUksWUFBWSxjQUFjLE9BQU8sU0FBUyxhQUFhO0FBQ3pELGtCQUFZLGNBQWMsT0FBTyxTQUFTO0FBQUEsSUFDNUM7QUFFQSxRQUFJLEtBQUssWUFBWTtBQUNyQixVQUFNLFlBQVksT0FBTyxTQUFTO0FBQ2xDLFFBQUksS0FBSyxXQUFXO0FBQ2xCLFdBQUs7QUFBQSxJQUNQO0FBRUEsUUFBSSxnQkFBZ0IsS0FBSyxZQUFZLE9BQU8sUUFBUTtBQUNsRCxlQUFTLElBQUksV0FBVyxPQUFPLFFBQVEsT0FBTyxhQUFhLGFBQWEsRUFBRTtBQUFBLElBQzVFO0FBRUEsV0FBTyxJQUFJLFFBQVEsV0FBVztBQUU5QixXQUFPO0FBQUEsRUFDVDtBQUVPLFdBQVMsWUFBWSxPQUFPLFFBQVEsTUFBTTtBQUMvQyxRQUFJLEtBQUssTUFBTSxLQUFLLE1BQU0sT0FBTztBQUMvQixxQkFBZSxPQUFPLElBQUk7QUFDMUIsWUFBTSxJQUFJLE1BQU0saUJBQWlCLFFBQVEsVUFBVSxjQUFjLEtBQUs7QUFBQSxJQUN4RTtBQUVBLFFBQUksU0FBUyxHQUFHO0FBQ2QsWUFBTSxJQUFJLE1BQU0seUJBQXlCO0FBQUEsSUFDM0M7QUFFQSxVQUFNLElBQUksTUFBTTtBQUFBLE1BQ2QsUUFBUTtBQUFBLE1BQ1IsTUFBTSxPQUFPLElBQUksWUFBWTtBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFTyxXQUFTLGVBQWUsT0FBTyxNQUFNO0FBQzFDLFFBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsWUFBTSxJQUFJLE1BQU0scUJBQXFCLE1BQU0sVUFBVSxLQUFLO0FBQUEsSUFDNUQ7QUFBQSxFQUNGO0FBRUEsV0FBUyxZQUFZLEtBQUssUUFBUUMsYUFBWTtBQUM1QyxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsUUFBSSxJQUFJLFlBQVksVUFBYSxJQUFJLFNBQVNBLGlCQUFnQixRQUFXO0FBQ3ZFLGtCQUFZLFFBQVEsSUFBSSxVQUFVQSxjQUFhLEVBQUU7QUFBQSxJQUNuRDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFNBQVMsT0FBT0MsTUFBSyxLQUFLLEtBQUssUUFBUUQsYUFBWTtBQUMxRCxRQUFJLFFBQVEsT0FBTyxRQUFRQyxNQUFLO0FBQzlCLFlBQU1DLEtBQUksT0FBT0QsU0FBUSxXQUFXLE1BQU07QUFDMUMsVUFBSTtBQUNKLFVBQUlELGNBQWEsR0FBRztBQUNsQixZQUFJQyxTQUFRLEtBQUtBLFNBQVEsSUFBSTtBQUMzQixrQkFBUSxPQUFPQyxhQUFZQSxVQUFTRixjQUFhLEtBQUssSUFBSUU7QUFBQSxRQUM1RCxPQUFPO0FBQ0wsa0JBQVEsU0FBU0EsVUFBU0YsY0FBYSxLQUFLLElBQUksSUFBSUUsY0FDNUNBLFVBQVNGLGNBQWEsS0FBSyxJQUFJLElBQUlFO0FBQUEsUUFDN0M7QUFBQSxNQUNGLE9BQU87QUFDTCxnQkFBUSxNQUFNRCxPQUFNQyxhQUFZLE1BQU1BO0FBQUEsTUFDeEM7QUFDQSxZQUFNLElBQUksTUFBTSxpQkFBaUIsU0FBUyxPQUFPLEtBQUs7QUFBQSxJQUN4RDtBQUNBLGdCQUFZLEtBQUssUUFBUUYsV0FBVTtBQUFBLEVBQ3JDO0FBRU8sV0FBUyxVQUFVRSxJQUFHLFlBQVk7QUFDdkMsSUFBQUEsS0FBSSxDQUFDQTtBQUNMLFFBQ0UsQ0FBQyxPQUFPLE1BQU1BLEVBQUMsS0FDZkEsTUFBSyxPQUFPLG9CQUNaQSxNQUFLLE9BQU8sa0JBQ1o7QUFDQSxhQUFTQSxLQUFJLE1BQU8sSUFBSUEsS0FBSSxLQUFLLE1BQU1BLEVBQUM7QUFBQSxJQUMxQztBQUNBLFdBQU87QUFBQSxFQUNUO0FBR08sV0FBUyxZQUFZLEtBQUssT0FBTyxRQUFRRCxNQUFLLEtBQUs7QUFDeEQsWUFBUSxDQUFDO0FBQ1QsbUJBQWUsUUFBUSxRQUFRO0FBQy9CLFFBQUksUUFBUSxPQUFPLFFBQVFBLE1BQUs7QUFDOUIsWUFBTSxJQUFJLE1BQU0saUJBQWlCLFNBQVMsTUFBTUEsZUFBYyxPQUFPLEtBQUs7QUFBQSxJQUM1RTtBQUNBLFFBQUksSUFBSSxZQUFZLFFBQVc7QUFDN0Isa0JBQVksUUFBUSxJQUFJLFNBQVMsQ0FBQztBQUFBLElBQ3BDO0FBRUEsUUFBSSxVQUFVO0FBQ2QsV0FBTyxTQUFTO0FBQUEsRUFDbEI7QUFHTyxXQUFTLGVBQWUsS0FBSyxPQUFPLFFBQVFBLE1BQUssS0FBSztBQUMzRCxZQUFRLENBQUM7QUFDVCxhQUFTLE9BQU9BLE1BQUssS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUV4QyxRQUFJLFlBQVksVUFBVTtBQUMxQixRQUFJLFlBQVk7QUFDaEIsV0FBTztBQUFBLEVBQ1Q7QUFFTyxXQUFTLGVBQWUsS0FBSyxPQUFPLFFBQVFBLE1BQUssS0FBSztBQUMzRCxZQUFRLENBQUM7QUFDVCxhQUFTLE9BQU9BLE1BQUssS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUV4QyxRQUFJLFlBQVk7QUFDaEIsWUFBUSxVQUFVO0FBQ2xCLFFBQUksWUFBWTtBQUNoQixZQUFRLFVBQVU7QUFDbEIsUUFBSSxZQUFZO0FBQ2hCLFlBQVEsVUFBVTtBQUNsQixRQUFJLFlBQVk7QUFDaEIsV0FBTztBQUFBLEVBQ1Q7QUFHTyxXQUFTLGVBQWUsS0FBSyxPQUFPLFFBQVFBLE1BQUssS0FBSztBQUMzRCxZQUFRLENBQUM7QUFDVCxhQUFTLE9BQU9BLE1BQUssS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUV4QyxRQUFJLFlBQVk7QUFDaEIsUUFBSSxZQUFZLFVBQVU7QUFDMUIsV0FBTztBQUFBLEVBQ1Q7QUFFTyxXQUFTLGVBQWUsS0FBSyxPQUFPLFFBQVFBLE1BQUssS0FBSztBQUMzRCxZQUFRLENBQUM7QUFDVCxhQUFTLE9BQU9BLE1BQUssS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUV4QyxRQUFJLFNBQVMsS0FBSztBQUNsQixZQUFRLFVBQVU7QUFDbEIsUUFBSSxTQUFTLEtBQUs7QUFDbEIsWUFBUSxVQUFVO0FBQ2xCLFFBQUksU0FBUyxLQUFLO0FBQ2xCLFlBQVEsVUFBVTtBQUNsQixRQUFJLFVBQVU7QUFDZCxXQUFPLFNBQVM7QUFBQSxFQUNsQjtBQUdPLFdBQVMsZUFBZSxLQUFLLE9BQU8sUUFBUUEsTUFBSyxLQUFLO0FBQzNELFlBQVEsQ0FBQztBQUNULGFBQVMsT0FBT0EsTUFBSyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBRXhDLFVBQU0sU0FBUyxLQUFLLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDMUMsUUFBSSxZQUFZLFdBQVc7QUFDM0IsUUFBSSxZQUFZO0FBQ2hCLFFBQUksU0FBUyxLQUFLO0FBQ2xCLFlBQVEsVUFBVTtBQUNsQixRQUFJLFNBQVMsS0FBSztBQUNsQixZQUFRLFVBQVU7QUFDbEIsUUFBSSxTQUFTLEtBQUs7QUFDbEIsWUFBUSxVQUFVO0FBQ2xCLFFBQUksVUFBVTtBQUNkLFdBQU8sU0FBUztBQUFBLEVBQ2xCO0FBR08sV0FBUyxlQUFlLEtBQUssT0FBTyxRQUFRQSxNQUFLLEtBQUs7QUFDM0QsWUFBUSxDQUFDO0FBQ1QsYUFBUyxPQUFPQSxNQUFLLEtBQUssS0FBSyxRQUFRLENBQUM7QUFFeEMsUUFBSSxZQUFZLEtBQUssTUFBTSxRQUFRLEtBQUssR0FBRztBQUMzQyxRQUFJLFNBQVMsS0FBSztBQUNsQixZQUFRLFVBQVU7QUFDbEIsUUFBSSxTQUFTLEtBQUs7QUFDbEIsWUFBUSxVQUFVO0FBQ2xCLFFBQUksU0FBUyxLQUFLO0FBQ2xCLFlBQVEsVUFBVTtBQUNsQixRQUFJLFVBQVU7QUFDZCxXQUFPLFNBQVM7QUFBQSxFQUNsQjtBQUdPLFdBQVMsZUFBZSxLQUFLLE9BQU8sUUFBUUEsTUFBSyxLQUFLO0FBQzNELFlBQVEsQ0FBQztBQUNULGFBQVMsT0FBT0EsTUFBSyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBRXhDLFFBQUksU0FBUyxLQUFLO0FBQ2xCLFlBQVEsVUFBVTtBQUNsQixRQUFJLFNBQVMsS0FBSztBQUNsQixZQUFRLFVBQVU7QUFDbEIsUUFBSSxTQUFTLEtBQUs7QUFDbEIsWUFBUSxVQUFVO0FBQ2xCLFFBQUksVUFBVTtBQUNkLFdBQU8sU0FBUztBQUFBLEVBQ2xCO0FBR08sV0FBUyxlQUFlLEtBQUssT0FBTyxRQUFRQSxNQUFLLEtBQUs7QUFDM0QsWUFBUSxDQUFDO0FBQ1QsYUFBUyxPQUFPQSxNQUFLLEtBQUssS0FBSyxRQUFRLENBQUM7QUFFeEMsUUFBSSxTQUFTLEtBQUs7QUFDbEIsWUFBUSxVQUFVO0FBQ2xCLFFBQUksU0FBUyxLQUFLO0FBQ2xCLFlBQVEsVUFBVTtBQUNsQixRQUFJLFVBQVU7QUFDZCxXQUFPLFNBQVM7QUFBQSxFQUNsQjtBQUVPLFdBQVMsZUFDZCxPQUNBLE1BQ0FBLE9BQU0sR0FDTixNQUFNLE9BQU8sa0JBQ2I7QUFDQSxRQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLFlBQU0sSUFBSSxNQUFNLHFCQUFxQixNQUFNLFVBQVUsS0FBSztBQUFBLElBQzVEO0FBQ0EsUUFBSSxDQUFDLE9BQU8sVUFBVSxLQUFLLEdBQUc7QUFDNUIsWUFBTSxJQUFJLE1BQU0saUJBQWlCLE1BQU0sY0FBYyxLQUFLO0FBQUEsSUFDNUQ7QUFDQSxRQUFJLFFBQVFBLFFBQU8sUUFBUSxLQUFLO0FBQzlCLFlBQU0sSUFBSSxNQUFNLGlCQUFpQixNQUFNLE1BQU1BLGNBQWEsT0FBTyxLQUFLO0FBQUEsSUFDeEU7QUFBQSxFQUNGO0FBR08sV0FBUyxlQUFlLEtBQUssT0FBTyxRQUFRQSxNQUFLLEtBQUs7QUFDM0QsWUFBUSxDQUFDO0FBQ1QsYUFBUyxPQUFPQSxNQUFLLEtBQUssS0FBSyxRQUFRLENBQUM7QUFFeEMsVUFBTSxTQUFTLEtBQUssTUFBTSxRQUFRLEtBQUssR0FBRztBQUMxQyxRQUFJLFlBQVk7QUFDaEIsWUFBUSxVQUFVO0FBQ2xCLFFBQUksWUFBWTtBQUNoQixZQUFRLFVBQVU7QUFDbEIsUUFBSSxZQUFZO0FBQ2hCLFlBQVEsVUFBVTtBQUNsQixRQUFJLFlBQVk7QUFDaEIsUUFBSSxZQUFZO0FBQ2hCLFFBQUksWUFBWSxXQUFXO0FBQzNCLFdBQU87QUFBQSxFQUNUO0FBR08sV0FBUyxlQUFlLEtBQUssT0FBTyxRQUFRQSxNQUFLLEtBQUs7QUFDM0QsWUFBUSxDQUFDO0FBQ1QsYUFBUyxPQUFPQSxNQUFLLEtBQUssS0FBSyxRQUFRLENBQUM7QUFFeEMsVUFBTSxTQUFTO0FBQ2YsUUFBSSxZQUFZO0FBQ2hCLFlBQVEsVUFBVTtBQUNsQixRQUFJLFlBQVk7QUFDaEIsWUFBUSxVQUFVO0FBQ2xCLFFBQUksWUFBWTtBQUNoQixZQUFRLFVBQVU7QUFDbEIsUUFBSSxZQUFZO0FBQ2hCLFFBQUksWUFBWSxLQUFLLE1BQU0sU0FBUyxLQUFLLEdBQUc7QUFDNUMsV0FBTztBQUFBLEVBQ1Q7QUFHTyxXQUFTLGVBQWUsS0FBSyxPQUFPLFFBQVFBLE1BQUssS0FBSztBQUMzRCxZQUFRLENBQUM7QUFDVCxhQUFTLE9BQU9BLE1BQUssS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUV4QyxRQUFJLFlBQVk7QUFDaEIsWUFBUSxVQUFVO0FBQ2xCLFFBQUksWUFBWTtBQUNoQixZQUFRLFVBQVU7QUFDbEIsUUFBSSxZQUFZO0FBQ2hCLFlBQVEsVUFBVTtBQUNsQixRQUFJLFlBQVk7QUFDaEIsV0FBTztBQUFBLEVBQ1Q7QUFHTyxXQUFTLGVBQWUsS0FBSyxPQUFPLFFBQVFBLE1BQUssS0FBSztBQUMzRCxZQUFRLENBQUM7QUFDVCxhQUFTLE9BQU9BLE1BQUssS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUV4QyxRQUFJLFlBQVk7QUFDaEIsWUFBUSxVQUFVO0FBQ2xCLFFBQUksWUFBWTtBQUNoQixZQUFRLFVBQVU7QUFDbEIsUUFBSSxZQUFZO0FBQ2hCLFdBQU87QUFBQSxFQUNUOzs7QUNudUJPLE1BQU0sYUFBYTtBQUUxQixNQUFNLGFBQWEsS0FBSztBQUV4QixNQUFNRSx1QkFDSixPQUFPLFdBQVcsY0FBYyxPQUFPLE9BQU8sV0FBVyxhQUNyRCxPQUFPLE9BQU8sNEJBQTRCLElBQzFDO0FBRU4sTUFBTSxvQkFBb0I7QUFPMUIsU0FBTyxlQUFlQyxRQUFPLFdBQVcsVUFBVTtBQUFBLElBQ2hELFlBQVk7QUFBQSxJQUNaLEtBQUssV0FBWTtBQUNmLFVBQUksQ0FBQ0EsUUFBTyxTQUFTLElBQUksR0FBRztBQUMxQixlQUFPO0FBQUEsTUFDVDtBQUNBLGFBQU8sS0FBSztBQUFBLElBQ2Q7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPLGVBQWVBLFFBQU8sV0FBVyxVQUFVO0FBQUEsSUFDaEQsWUFBWTtBQUFBLElBQ1osS0FBSyxXQUFZO0FBQ2YsVUFBSSxDQUFDQSxRQUFPLFNBQVMsSUFBSSxHQUFHO0FBQzFCLGVBQU87QUFBQSxNQUNUO0FBQ0EsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUFBLEVBQ0YsQ0FBQztBQUVELFdBQVMsYUFBYSxRQUFRO0FBQzVCLFFBQUksU0FBUyxZQUFZO0FBQ3ZCLFlBQU0sSUFBSTtBQUFBLFFBQ1IsZ0JBQWdCLFNBQVM7QUFBQSxNQUMzQjtBQUFBLElBQ0Y7QUFDQSxVQUFNLE1BQU0sSUFBSSxXQUFXLE1BQU07QUFDakMsV0FBTyxlQUFlLEtBQUtBLFFBQU8sU0FBUztBQUMzQyxXQUFPO0FBQUEsRUFDVDtBQUVPLFdBQVNBLFFBQU8sS0FBSyxrQkFBa0IsUUFBUTtBQUNwRCxRQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLFVBQUksT0FBTyxxQkFBcUIsVUFBVTtBQUN4QyxjQUFNLElBQUksTUFBTTtBQUFBLFVBQ2Q7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0EsYUFBTyxhQUFhLEdBQUc7QUFBQSxJQUN6QjtBQUNBLFdBQU8sTUFBTSxLQUFLLGtCQUFrQixNQUFNO0FBQUEsRUFDNUM7QUFFQSxFQUFBQSxRQUFPLFdBQVc7QUFFbEIsV0FBUyxNQUFNLE9BQU8sa0JBQWtCLFFBQVE7QUFDOUMsUUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixhQUFPLFdBQVcsT0FBTyxnQkFBZ0I7QUFBQSxJQUMzQztBQUVBLFFBQUksT0FBTyxVQUFVLFlBQVksVUFBVSxNQUFNO0FBQy9DLFVBQUlDLGtCQUFpQixLQUFLLEdBQUc7QUFDM0IsZUFBTyxnQkFBZ0IsT0FBTyxrQkFBa0IsTUFBTTtBQUFBLE1BQ3hEO0FBRUEsWUFBTSxVQUFVLE1BQU0sV0FBVyxNQUFNLFFBQVE7QUFDL0MsVUFDRSxXQUFXLFFBQ1gsWUFBWSxVQUNYLE9BQU8sWUFBWSxZQUFZLE9BQU8sWUFBWSxXQUNuRDtBQUNBLGVBQU8sTUFBTSxTQUFTLGtCQUFrQixNQUFNO0FBQUEsTUFDaEQ7QUFFQSxZQUFNQyxNQUFJLFdBQVcsS0FBSztBQUMxQixVQUFJQSxLQUFHO0FBQ0wsZUFBT0E7QUFBQSxNQUNUO0FBRUEsVUFBSSxPQUFPLE1BQU0sT0FBTyxpQkFBaUIsWUFBWTtBQUNuRCxjQUFNLFlBQVksTUFBTSxPQUFPLGFBQWEsUUFBUTtBQUNwRCxZQUFJLE9BQU8sY0FBYyxVQUFVO0FBQ2pDLGlCQUFPLFdBQVcsV0FBVyxnQkFBZ0I7QUFBQSxRQUMvQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsVUFBTSxJQUFJLE1BQU07QUFBQSxNQUNkO0FBQUEsTUFDQSxDQUFDLFVBQVUsVUFBVSxlQUFlLFNBQVMsbUJBQW1CO0FBQUEsTUFDaEU7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLEVBQUFGLFFBQU8sT0FBTyxTQUFTLEtBQUssT0FBTyxrQkFBa0IsUUFBUTtBQUMzRCxXQUFPLE1BQU0sT0FBTyxrQkFBa0IsTUFBTTtBQUFBLEVBQzlDO0FBRUEsU0FBTyxlQUFlQSxRQUFPLFdBQVcsV0FBVyxTQUFTO0FBRTVELFNBQU8sZUFBZUEsU0FBUSxVQUFVO0FBRXhDLFdBQVMsV0FBVyxNQUFNO0FBQ3hCLG1CQUFlLE1BQU0sTUFBTTtBQUMzQixRQUFJLEVBQUUsUUFBUSxLQUFLLFFBQVEsYUFBYTtBQUN0QyxZQUFNLElBQUksTUFBTSxzQkFBc0IsV0FBVyxRQUFRLElBQUk7QUFBQSxJQUMvRDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLE9BQU8sTUFBTUcsT0FBTSxVQUFVO0FBQ3BDLGVBQVcsSUFBSTtBQUVmLFVBQU0sU0FBUyxhQUFhLElBQUk7QUFDaEMsUUFBSUEsVUFBUyxRQUFXO0FBQ3RCLFVBQUksYUFBYSxVQUFhLE9BQU8sYUFBYSxVQUFVO0FBQzFELGNBQU0sSUFBSSxNQUFNO0FBQUEsVUFDZDtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFDQSxhQUFPLE9BQU8sS0FBS0EsT0FBTSxRQUFRO0FBQUEsSUFDbkM7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLEVBQUFILFFBQU8sUUFBUSxTQUFTLE1BQU0sTUFBTUcsT0FBTSxVQUFVO0FBQ2xELFdBQU8sT0FBTyxNQUFNQSxPQUFNLFFBQVE7QUFBQSxFQUNwQztBQUVBLFdBQVMsYUFBYSxNQUFNO0FBQzFCLGVBQVcsSUFBSTtBQUNmLFdBQU8sYUFBYSxPQUFPLElBQUksSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDO0FBQUEsRUFDdEQ7QUFFQSxFQUFBSCxRQUFPLGNBQWMsU0FBUyxZQUFZLE1BQU07QUFDOUMsV0FBTyxhQUFhLElBQUk7QUFBQSxFQUMxQjtBQUVBLEVBQUFBLFFBQU8sa0JBQWtCLFNBQVMsZ0JBQWdCLE1BQU07QUFDdEQsV0FBTyxhQUFhLElBQUk7QUFBQSxFQUMxQjtBQUVBLFdBQVMsV0FBVyxRQUFRLFVBQVU7QUFDcEMsUUFBSSxPQUFPLGFBQWEsWUFBWSxhQUFhLElBQUk7QUFDbkQsaUJBQVc7QUFBQSxJQUNiO0FBQ0EsUUFBSSxDQUFDQSxRQUFPLFdBQVcsUUFBUSxHQUFHO0FBQ2hDLFlBQU0sSUFBSSxNQUFNLHFCQUFxQixRQUFRO0FBQUEsSUFDL0M7QUFDQSxVQUFNLFNBQVMsV0FBVyxRQUFRLFFBQVEsSUFBSTtBQUM5QyxRQUFJLE1BQU0sYUFBYSxNQUFNO0FBQzdCLFVBQU0sU0FBUyxJQUFJLE1BQU0sUUFBUSxRQUFRO0FBQ3pDLFFBQUksV0FBVyxRQUFRO0FBQ3JCLFlBQU0sSUFBSSxNQUFNLEdBQUcsTUFBTTtBQUFBLElBQzNCO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLGNBQWMsT0FBTztBQUM1QixVQUFNLFNBQVMsTUFBTSxTQUFTLElBQUksSUFBSSxRQUFRLE1BQU0sTUFBTSxJQUFJO0FBQzlELFVBQU0sTUFBTSxhQUFhLE1BQU07QUFDL0IsYUFBU0ksS0FBSSxHQUFHQSxLQUFJLFFBQVFBLE1BQUssR0FBRztBQUNsQyxVQUFJQSxNQUFLLE1BQU1BLE1BQUs7QUFBQSxJQUN0QjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxXQUFXLEtBQUs7QUFDdkIsUUFBSSxJQUFJLFdBQVcsVUFBYUgsa0JBQWlCLElBQUksTUFBTSxHQUFHO0FBQzVELFVBQUksT0FBTyxJQUFJLFdBQVcsVUFBVTtBQUNsQyxlQUFPLGFBQWEsQ0FBQztBQUFBLE1BQ3ZCO0FBQ0EsYUFBTyxjQUFjLEdBQUc7QUFBQSxJQUMxQjtBQUVBLFFBQUksSUFBSSxTQUFTLFlBQVksTUFBTSxRQUFRLElBQUksSUFBSSxHQUFHO0FBQ3BELGFBQU8sY0FBYyxJQUFJLElBQUk7QUFBQSxJQUMvQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFFBQVEsUUFBUTtBQUN2QixRQUFJLFVBQVUsWUFBWTtBQUN4QixZQUFNLElBQUk7QUFBQSxRQUNSLDREQUNFLFdBQVcsU0FBUyxFQUFFLElBQUk7QUFBQSxNQUM5QjtBQUFBLElBQ0Y7QUFDQSxXQUFPLFNBQVM7QUFBQSxFQUNsQjtBQUVPLFdBQVMsV0FBVyxRQUFRO0FBQ2pDLGVBQVcsTUFBTTtBQUNqQixXQUFPRCxRQUFPLE1BQU0sQ0FBQyxNQUFNO0FBQUEsRUFDN0I7QUFFQSxTQUFPLGVBQWUsV0FBVyxXQUFXLFdBQVcsU0FBUztBQUVoRSxTQUFPLGVBQWUsWUFBWSxVQUFVO0FBRTVDLEVBQUFBLFFBQU8sV0FBVyxTQUFTLFNBQVNFLEtBQUc7QUFDckMsV0FBT0EsT0FBSyxRQUFRQSxJQUFFLGNBQWMsUUFBUUEsUUFBTUYsUUFBTztBQUFBLEVBQzNEO0FBRUEsRUFBQUEsUUFBTyxVQUFVLFNBQVMsUUFBUUssSUFBR0gsS0FBRztBQUN0QyxRQUFJLFdBQVdHLElBQUcsVUFBVSxHQUFHO0FBQzdCLE1BQUFBLEtBQUlMLFFBQU8sS0FBS0ssSUFBR0EsR0FBRSxRQUFRQSxHQUFFLFVBQVU7QUFBQSxJQUMzQztBQUNBLFFBQUksV0FBV0gsS0FBRyxVQUFVLEdBQUc7QUFDN0IsTUFBQUEsTUFBSUYsUUFBTyxLQUFLRSxLQUFHQSxJQUFFLFFBQVFBLElBQUUsVUFBVTtBQUFBLElBQzNDO0FBQ0EsUUFBSSxDQUFDRixRQUFPLFNBQVNLLEVBQUMsS0FBSyxDQUFDTCxRQUFPLFNBQVNFLEdBQUMsR0FBRztBQUM5QyxZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxRQUFJRyxPQUFNSCxLQUFHO0FBQ1gsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJSSxNQUFJRCxHQUFFO0FBQ1YsUUFBSUUsTUFBSUwsSUFBRTtBQUNWLGFBQVNFLEtBQUksR0FBRyxNQUFNLEtBQUssSUFBSUUsS0FBR0MsR0FBQyxHQUFHSCxLQUFJLEtBQUssRUFBRUEsSUFBRztBQUNsRCxVQUFJQyxHQUFFRCxRQUFPRixJQUFFRSxLQUFJO0FBQ2pCLFFBQUFFLE1BQUlELEdBQUVEO0FBQ04sUUFBQUcsTUFBSUwsSUFBRUU7QUFDTjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSUUsTUFBSUMsS0FBRztBQUNULGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSUEsTUFBSUQsS0FBRztBQUNULGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxFQUFBTixRQUFPLGFBQWEsU0FBUyxXQUFXLFVBQVU7QUFDaEQsV0FBTyxPQUFPLGFBQWEsWUFBWSxTQUFTLFdBQVcsS0FDekRRLG1CQUFrQixRQUFRLE1BQU07QUFBQSxFQUNwQztBQUVBLEVBQUFSLFFBQU8sU0FBUyxTQUFTUyxRQUFPLE1BQU0sUUFBUTtBQUM1QyxRQUFJLENBQUMsTUFBTSxRQUFRLElBQUksR0FBRztBQUN4QixZQUFNLElBQUksTUFBTSxxQkFBcUIsUUFBUSxTQUFTLElBQUk7QUFBQSxJQUM1RDtBQUVBLFFBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsYUFBT1QsUUFBTyxNQUFNLENBQUM7QUFBQSxJQUN2QjtBQUVBLFFBQUksV0FBVyxRQUFXO0FBQ3hCLGVBQVM7QUFDVCxlQUFTSSxLQUFJLEdBQUdBLEtBQUksS0FBSyxRQUFRQSxNQUFLO0FBQ3BDLFlBQUksS0FBS0EsSUFBRyxRQUFRO0FBQ2xCLG9CQUFVLEtBQUtBLElBQUc7QUFBQSxRQUNwQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxxQkFBZSxRQUFRLFFBQVE7QUFBQSxJQUNqQztBQUVBLFVBQU0sU0FBU0osUUFBTyxZQUFZLE1BQU07QUFDeEMsUUFBSSxNQUFNO0FBQ1YsYUFBU0ksS0FBSSxHQUFHQSxLQUFJLEtBQUssUUFBUUEsTUFBSztBQUNwQyxZQUFNLE1BQU0sS0FBS0E7QUFDakIsVUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHO0FBR3RCLGNBQU0sSUFBSSxNQUFNO0FBQUEsVUFDZCxRQUFRQTtBQUFBLFVBQ1IsQ0FBQyxVQUFVLFlBQVk7QUFBQSxVQUN2QixLQUFLQTtBQUFBLFFBQ1A7QUFBQSxNQUNGO0FBQ0EsYUFBTyxZQUFZLEtBQUssUUFBUSxLQUFLLEdBQUcsSUFBSSxNQUFNO0FBQUEsSUFDcEQ7QUFHQSxRQUFJLE1BQU0sUUFBUTtBQUloQixhQUFPLEtBQUssR0FBRyxLQUFLLE1BQU07QUFBQSxJQUM1QjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxXQUFXLFFBQVEsVUFBVTtBQUNwQyxRQUFJLE9BQU8sV0FBVyxVQUFVO0FBQzlCLFVBQUksa0JBQWtCLE1BQU0sS0FBS0gsa0JBQWlCLE1BQU0sR0FBRztBQUN6RCxlQUFPLE9BQU87QUFBQSxNQUNoQjtBQUVBLFlBQU0sSUFBSSxNQUFNO0FBQUEsUUFDZDtBQUFBLFFBQ0EsQ0FBQyxVQUFVLFVBQVUsYUFBYTtBQUFBLFFBQ2xDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxVQUFNLE1BQU0sT0FBTztBQUNuQixVQUFNLFlBQWEsVUFBVSxTQUFTLEtBQUssVUFBVSxPQUFPO0FBQzVELFFBQUksQ0FBQyxhQUFhLFFBQVEsR0FBRztBQUMzQixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksQ0FBQyxVQUFVO0FBQ2IsYUFBUSxZQUFZLEtBQUssZUFBZSxNQUFNO0FBQUEsSUFDaEQ7QUFFQSxVQUFNLE1BQU0sZUFBZSxRQUFRO0FBQ25DLFFBQUksUUFBUSxRQUFXO0FBQ3JCLGFBQVEsWUFBWSxLQUFLLGVBQWUsTUFBTTtBQUFBLElBQ2hEO0FBQ0EsV0FBTyxJQUFJLFdBQVcsTUFBTTtBQUFBLEVBQzlCO0FBRUEsRUFBQUQsUUFBTyxhQUFhO0FBRXBCLEVBQUFBLFFBQU8sVUFBVSxZQUFZO0FBRTdCLFdBQVMsS0FBS0UsS0FBR1EsSUFBR0MsS0FBRztBQUNyQixVQUFNUCxLQUFJRixJQUFFUTtBQUNaLElBQUFSLElBQUVRLE1BQUtSLElBQUVTO0FBQ1QsSUFBQVQsSUFBRVMsT0FBS1A7QUFBQSxFQUNUO0FBRUEsRUFBQUosUUFBTyxVQUFVLFNBQVMsU0FBUyxTQUFTO0FBQzFDLFVBQU0sTUFBTSxLQUFLO0FBQ2pCLFFBQUksTUFBTSxNQUFNLEdBQUc7QUFDakIsWUFBTSxJQUFJLFdBQVcsMkNBQTJDO0FBQUEsSUFDbEU7QUFDQSxhQUFTSSxLQUFJLEdBQUdBLEtBQUksS0FBS0EsTUFBSyxHQUFHO0FBQy9CLFdBQUssTUFBTUEsSUFBR0EsS0FBSSxDQUFDO0FBQUEsSUFDckI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLEVBQUFKLFFBQU8sVUFBVSxTQUFTLFNBQVMsU0FBUztBQUMxQyxVQUFNLE1BQU0sS0FBSztBQUNqQixRQUFJLE1BQU0sTUFBTSxHQUFHO0FBQ2pCLFlBQU0sSUFBSSxXQUFXLDJDQUEyQztBQUFBLElBQ2xFO0FBQ0EsYUFBU0ksS0FBSSxHQUFHQSxLQUFJLEtBQUtBLE1BQUssR0FBRztBQUMvQixXQUFLLE1BQU1BLElBQUdBLEtBQUksQ0FBQztBQUNuQixXQUFLLE1BQU1BLEtBQUksR0FBR0EsS0FBSSxDQUFDO0FBQUEsSUFDekI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLEVBQUFKLFFBQU8sVUFBVSxTQUFTLFNBQVMsU0FBUztBQUMxQyxVQUFNLE1BQU0sS0FBSztBQUNqQixRQUFJLE1BQU0sTUFBTSxHQUFHO0FBQ2pCLFlBQU0sSUFBSSxXQUFXLDJDQUEyQztBQUFBLElBQ2xFO0FBQ0EsYUFBU0ksS0FBSSxHQUFHQSxLQUFJLEtBQUtBLE1BQUssR0FBRztBQUMvQixXQUFLLE1BQU1BLElBQUdBLEtBQUksQ0FBQztBQUNuQixXQUFLLE1BQU1BLEtBQUksR0FBR0EsS0FBSSxDQUFDO0FBQ3ZCLFdBQUssTUFBTUEsS0FBSSxHQUFHQSxLQUFJLENBQUM7QUFDdkIsV0FBSyxNQUFNQSxLQUFJLEdBQUdBLEtBQUksQ0FBQztBQUFBLElBQ3pCO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxFQUFBSixRQUFPLFVBQVUsV0FBVyxTQUFTLFNBQVMsVUFBVSxPQUFPLEtBQUs7QUFDbEUsUUFBSSxVQUFVLFdBQVcsR0FBRztBQUMxQixhQUFPLEtBQUssVUFBVSxHQUFHLEtBQUssTUFBTTtBQUFBLElBQ3RDO0FBRUEsVUFBTSxNQUFNLEtBQUs7QUFFakIsUUFBSSxTQUFTLEdBQUc7QUFDZCxjQUFRO0FBQUEsSUFDVixXQUFXLFNBQVMsS0FBSztBQUN2QixhQUFPO0FBQUEsSUFDVCxPQUFPO0FBQ0wsZUFBUztBQUFBLElBQ1g7QUFFQSxRQUFJLFFBQVEsVUFBYSxNQUFNLEtBQUs7QUFDbEMsWUFBTTtBQUFBLElBQ1IsT0FBTztBQUNMLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxPQUFPLE9BQU87QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLGFBQWEsUUFBVztBQUMxQixhQUFPLEtBQUssVUFBVSxPQUFPLEdBQUc7QUFBQSxJQUNsQztBQUVBLFVBQU0sTUFBTSxlQUFlLFFBQVE7QUFDbkMsUUFBSSxRQUFRLFFBQVc7QUFDckIsWUFBTSxJQUFJLE1BQU0scUJBQXFCLFFBQVE7QUFBQSxJQUMvQztBQUVBLFdBQU8sSUFBSSxNQUFNLE1BQU0sT0FBTyxHQUFHO0FBQUEsRUFDbkM7QUFFQSxFQUFBQSxRQUFPLFVBQVUsaUJBQWlCQSxRQUFPLFVBQVU7QUFFbkQsRUFBQUEsUUFBTyxVQUFVLFNBQVMsU0FBU1ksUUFBT1YsS0FBRztBQUMzQyxRQUFJLENBQUMsYUFBYUEsR0FBQyxHQUFHO0FBQ3BCLFlBQU0sSUFBSSxNQUFNO0FBQUEsUUFDZDtBQUFBLFFBQ0EsQ0FBQyxVQUFVLFlBQVk7QUFBQSxRQUN2QkE7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFFBQUksU0FBU0EsS0FBRztBQUNkLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBT0YsUUFBTyxRQUFRLE1BQU1FLEdBQUMsTUFBTTtBQUFBLEVBQ3JDO0FBRUEsRUFBQUYsUUFBTyxVQUFVLFVBQVUsU0FBU2EsV0FBVTtBQUM1QyxRQUFJQyxPQUFNO0FBQ1YsVUFBTSxNQUFNO0FBQ1osSUFBQUEsT0FBTSxLQUFLLFNBQVMsT0FBTyxHQUFHLEdBQUcsRUFBRSxRQUFRLFdBQVcsS0FBSyxFQUFFLEtBQUs7QUFDbEUsUUFBSSxLQUFLLFNBQVMsS0FBSztBQUNyQixNQUFBQSxRQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sYUFBYUEsT0FBTTtBQUFBLEVBQzVCO0FBRUEsTUFBSUMsc0JBQXFCO0FBQ3ZCLElBQUFmLFFBQU8sVUFBVWUsd0JBQXVCZixRQUFPLFVBQVU7QUFBQSxFQUMzRDtBQUVBLEVBQUFBLFFBQU8sVUFBVSxVQUFVLFNBQVNnQixTQUNsQyxRQUNBLE9BQ0EsS0FDQSxXQUNBLFNBQ0E7QUFDQSxRQUFJLFdBQVcsUUFBUSxVQUFVLEdBQUc7QUFDbEMsZUFBU2hCLFFBQU8sS0FBSyxRQUFRLE9BQU8sUUFBUSxPQUFPLFVBQVU7QUFBQSxJQUMvRDtBQUNBLFFBQUksQ0FBQ0EsUUFBTyxTQUFTLE1BQU0sR0FBRztBQUM1QixZQUFNLElBQUksTUFBTTtBQUFBLFFBQ2Q7QUFBQSxRQUNBLENBQUMsVUFBVSxZQUFZO0FBQUEsUUFDdkI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFFBQUksVUFBVSxRQUFXO0FBQ3ZCLGNBQVE7QUFBQSxJQUNWLE9BQU87QUFDTCxxQkFBZSxPQUFPLGVBQWUsR0FBRyxVQUFVO0FBQUEsSUFDcEQ7QUFFQSxRQUFJLFFBQVEsUUFBVztBQUNyQixZQUFNLE9BQU87QUFBQSxJQUNmLE9BQU87QUFDTCxxQkFBZSxLQUFLLGFBQWEsR0FBRyxPQUFPLE1BQU07QUFBQSxJQUNuRDtBQUVBLFFBQUksY0FBYyxRQUFXO0FBQzNCLGtCQUFZO0FBQUEsSUFDZCxPQUFPO0FBQ0wscUJBQWUsT0FBTyxlQUFlLEdBQUcsVUFBVTtBQUFBLElBQ3BEO0FBRUEsUUFBSSxZQUFZLFFBQVc7QUFDekIsZ0JBQVUsS0FBSztBQUFBLElBQ2pCLE9BQU87QUFDTCxxQkFBZSxLQUFLLGFBQWEsR0FBRyxLQUFLLE1BQU07QUFBQSxJQUNqRDtBQUVBLFFBQ0UsUUFBUSxLQUFLLE1BQU0sT0FBTyxVQUFVLFlBQVksS0FDaEQsVUFBVSxLQUFLLFFBQ2Y7QUFDQSxZQUFNLElBQUksTUFBTSxpQkFBaUIsc0JBQXNCLE9BQU87QUFBQSxJQUNoRTtBQUVBLFFBQUksYUFBYSxXQUFXLFNBQVMsS0FBSztBQUN4QyxhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksYUFBYSxTQUFTO0FBQ3hCLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxTQUFTLEtBQUs7QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxlQUFXO0FBQ1gsYUFBUztBQUNULG1CQUFlO0FBQ2YsaUJBQWE7QUFDYixRQUFJLFNBQVMsUUFBUTtBQUNuQixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUlNLE1BQUksVUFBVTtBQUNsQixRQUFJQyxNQUFJLE1BQU07QUFDZCxVQUFNLE1BQU0sS0FBSyxJQUFJRCxLQUFHQyxHQUFDO0FBQ3pCLFVBQU0sV0FBVyxLQUFLLE1BQU0sV0FBVyxPQUFPO0FBQzlDLFVBQU0sYUFBYSxPQUFPLE1BQU0sT0FBTyxHQUFHO0FBQzFDLGFBQVNILEtBQUksR0FBR0EsS0FBSSxLQUFLLEVBQUVBLElBQUc7QUFDNUIsVUFBSSxTQUFTQSxRQUFPLFdBQVdBLEtBQUk7QUFDakMsUUFBQUUsTUFBSSxTQUFTRjtBQUNiLFFBQUFHLE1BQUksV0FBV0g7QUFDZjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSUUsTUFBSUMsS0FBRztBQUNULGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSUEsTUFBSUQsS0FBRztBQUNULGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLHFCQUFxQixRQUFRLEtBQUssWUFBWSxVQUFVLEtBQUs7QUFDcEUsbUJBQWUsTUFBTTtBQUVyQixRQUFJLE9BQU8sZUFBZSxVQUFVO0FBQ2xDLGlCQUFXO0FBQ1gsbUJBQWE7QUFBQSxJQUNmLFdBQVcsYUFBYSxZQUFZO0FBQ2xDLG1CQUFhO0FBQUEsSUFDZixXQUFXLGFBQWEsYUFBYTtBQUNuQyxtQkFBYTtBQUFBLElBQ2Y7QUFDQSxpQkFBYSxDQUFDO0FBQ2QsUUFBSSxPQUFPLE1BQU0sVUFBVSxHQUFHO0FBQzVCLG1CQUFhLE1BQU0sSUFBSyxPQUFPLFVBQVUsT0FBTztBQUFBLElBQ2xEO0FBQ0EsVUFBTSxDQUFDLENBQUM7QUFFUixRQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLGFBQU8sY0FBYyxRQUFRLFFBQVEsR0FBRyxZQUFZLEdBQUc7QUFBQSxJQUN6RDtBQUVBLFFBQUk7QUFDSixRQUFJLGFBQWEsUUFBVztBQUMxQixZQUFNLFlBQVk7QUFBQSxJQUNwQixPQUFPO0FBQ0wsWUFBTSxlQUFlLFFBQVE7QUFBQSxJQUMvQjtBQUVBLFFBQUksT0FBTyxRQUFRLFVBQVU7QUFDM0IsVUFBSSxRQUFRLFFBQVc7QUFDckIsY0FBTSxJQUFJLE1BQU0scUJBQXFCLFFBQVE7QUFBQSxNQUMvQztBQUNBLGFBQU8sSUFBSSxRQUFRLFFBQVEsS0FBSyxZQUFZLEdBQUc7QUFBQSxJQUNqRDtBQUVBLFFBQUksYUFBYSxHQUFHLEdBQUc7QUFDckIsWUFBTSxjQUNILFFBQVEsU0FBWSxhQUFhLE9BQU8sSUFBSTtBQUMvQyxhQUFPLGNBQWMsUUFBUSxLQUFLLFlBQVksYUFBYSxHQUFHO0FBQUEsSUFDaEU7QUFFQSxVQUFNLElBQUksTUFBTTtBQUFBLE1BQ2Q7QUFBQSxNQUNBLENBQUMsVUFBVSxVQUFVLFVBQVUsWUFBWTtBQUFBLE1BQzNDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxFQUFBTixRQUFPLFVBQVUsV0FBVyxTQUFTLFNBQVMsS0FBSyxZQUFZLFVBQVU7QUFDdkUsV0FBTyxLQUFLLFFBQVEsS0FBSyxZQUFZLFFBQVEsTUFBTTtBQUFBLEVBQ3JEO0FBRUEsRUFBQUEsUUFBTyxVQUFVLFVBQVUsU0FBUyxRQUFRLEtBQUssWUFBWSxVQUFVO0FBQ3JFLFdBQU8scUJBQXFCLE1BQU0sS0FBSyxZQUFZLFVBQVUsSUFBSTtBQUFBLEVBQ25FO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGNBQWMsU0FBUyxZQUN0QyxLQUNBLFlBQ0EsVUFDQTtBQUNBLFdBQU8scUJBQXFCLE1BQU0sS0FBSyxZQUFZLFVBQVUsS0FBSztBQUFBLEVBQ3BFO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGFBQWEsU0FBUyxXQUFXLFFBQVEsUUFBUTtBQUNoRSxRQUFJLFdBQVcsS0FBSyxXQUFXLEtBQUssUUFBUTtBQUMxQyxhQUFPLGFBQWEsSUFBSTtBQUFBLElBQzFCLE9BQU87QUFDTCxhQUFPLGFBQWEsS0FBSyxNQUFNLFFBQVEsTUFBTSxDQUFDO0FBQUEsSUFDaEQ7QUFBQSxFQUNGO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGFBQWEsU0FBUyxXQUFXLFFBQVEsUUFBUSxRQUFRO0FBQ3hFLFdBQU8sV0FBVyxhQUFhLE1BQU0sR0FBRyxNQUFNLFFBQVEsTUFBTTtBQUFBLEVBQzlEO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGNBQWMsU0FBUyxZQUN0QyxRQUNBLFFBQ0E7QUFDQSxRQUFJLFdBQVcsS0FBSyxXQUFXLEtBQUssUUFBUTtBQUMxQyxhQUFjLE9BQU8sSUFBSTtBQUFBLElBQzNCLE9BQU87QUFDTCxhQUFjLE9BQU8sS0FBSyxNQUFNLFFBQVEsTUFBTSxDQUFDO0FBQUEsSUFDakQ7QUFBQSxFQUNGO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGNBQWMsU0FBUyxZQUN0QyxRQUNBLFFBQ0EsUUFDQTtBQUNBLFdBQU8sV0FBVyxjQUFjLE1BQU0sR0FBRyxNQUFNLFFBQVEsTUFBTTtBQUFBLEVBQy9EO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGlCQUFpQixTQUFTLGVBQ3pDLFFBQ0EsUUFDQTtBQUNBLFFBQUksV0FBVyxLQUFLLFdBQVcsS0FBSyxRQUFRO0FBQzFDLGFBQWlCaUIsUUFBTyxJQUFJO0FBQUEsSUFDOUIsT0FBTztBQUNMLGFBQWlCQSxRQUFPLEtBQUssTUFBTSxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQUVBLEVBQUFqQixRQUFPLFVBQVUsaUJBQWlCLFNBQVMsZUFDekMsUUFDQSxRQUNBLFFBQ0E7QUFDQSxXQUFPLFdBQVcsaUJBQWlCLE1BQU0sR0FBRyxNQUFNLFFBQVEsTUFBTTtBQUFBLEVBQ2xFO0FBRUEsRUFBQUEsUUFBTyxVQUFVLFdBQVcsU0FBUyxTQUFTLFFBQVEsUUFBUSxRQUFRO0FBQ3BFLFdBQU87QUFBQSxNQUNMLFdBQVcsUUFBUSxLQUFLLFNBQVMsTUFBTTtBQUFBLE1BQ3ZDO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLEVBQUFBLFFBQU8sVUFBVSxXQUFXLFNBQVNrQixVQUFTLFFBQVEsUUFBUSxRQUFRO0FBQ3BFLFdBQU8sVUFBVSxNQUFNLFFBQVEsUUFBUSxNQUFNO0FBQUEsRUFDL0M7QUFFQSxFQUFBbEIsUUFBTyxVQUFVLGNBQWMsU0FBUyxZQUN0QyxRQUNBLFFBQ0EsUUFDQTtBQUNBLFdBQU8sYUFBYSxNQUFNLFFBQVEsUUFBUSxNQUFNO0FBQUEsRUFDbEQ7QUFFQSxFQUFBQSxRQUFPLFVBQVUsY0FBYyxTQUFTLFlBQ3RDLFFBQ0EsUUFDQSxRQUNBO0FBQ0EsV0FBTyxXQUFXLGFBQWEsTUFBTSxHQUFHLE1BQU0sUUFBUSxNQUFNO0FBQUEsRUFDOUQ7QUFFQSxFQUFBQSxRQUFPLFVBQVUsWUFBWSxTQUFTLFVBQVUsUUFBUSxRQUFRO0FBQzlELFFBQUksV0FBVyxLQUFLLFdBQVcsS0FBSyxRQUFRO0FBQzFDLGFBQU8sZUFBZSxJQUFJO0FBQUEsSUFDNUIsT0FBTztBQUNMLGFBQU8sZUFBZSxLQUFLLE1BQU0sUUFBUSxNQUFNLENBQUM7QUFBQSxJQUNsRDtBQUFBLEVBQ0Y7QUFFQSxFQUFBQSxRQUFPLFVBQVUsWUFBWSxTQUFTLFVBQVUsUUFBUSxRQUFRLFFBQVE7QUFDdEUsV0FBTztBQUFBLE1BQ0wsZUFBZSxRQUFRLEtBQUssU0FBUyxNQUFNO0FBQUEsTUFDM0M7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsRUFBQUEsUUFBTyxVQUFVLFlBQVksU0FBUyxVQUFVLFFBQVEsUUFBUSxRQUFRO0FBQ3RFLFdBQU8sV0FBVyxNQUFNLFFBQVEsUUFBUSxNQUFNO0FBQUEsRUFDaEQ7QUFFQSxFQUFBQSxRQUFPLFVBQVUsWUFBWSxTQUFTLFVBQVUsUUFBUSxRQUFRLFFBQVE7QUFDdEUsV0FBTztBQUFBLE1BQ0wsWUFBWSxRQUFRLEtBQUssU0FBUyxNQUFNO0FBQUEsTUFDeEM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsRUFBQUEsUUFBTyxVQUFVLFFBQVEsU0FBUyxNQUFNLFFBQVEsUUFBUSxRQUFRLFVBQVU7QUFFeEUsUUFBSSxXQUFXLFFBQVc7QUFDeEIsYUFBTyxLQUFLLFVBQVUsUUFBUSxHQUFHLEtBQUssTUFBTTtBQUFBLElBQzlDO0FBRUEsUUFBSSxXQUFXLFVBQWEsT0FBTyxXQUFXLFVBQVU7QUFDdEQsaUJBQVc7QUFDWCxlQUFTLEtBQUs7QUFDZCxlQUFTO0FBQUEsSUFHWCxPQUFPO0FBQ0wscUJBQWUsUUFBUSxVQUFVLEdBQUcsS0FBSyxNQUFNO0FBRS9DLFlBQU0sWUFBWSxLQUFLLFNBQVM7QUFFaEMsVUFBSSxXQUFXLFFBQVc7QUFDeEIsaUJBQVM7QUFBQSxNQUNYLFdBQVcsT0FBTyxXQUFXLFVBQVU7QUFDckMsbUJBQVc7QUFDWCxpQkFBUztBQUFBLE1BQ1gsT0FBTztBQUNMLHVCQUFlLFFBQVEsVUFBVSxHQUFHLEtBQUssTUFBTTtBQUMvQyxZQUFJLFNBQVMsV0FBVztBQUN0QixtQkFBUztBQUFBLFFBQ1g7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFFBQUksQ0FBQyxVQUFVO0FBQ2IsYUFBTyxLQUFLLFVBQVUsUUFBUSxRQUFRLE1BQU07QUFBQSxJQUM5QztBQUVBLFVBQU0sTUFBTSxlQUFlLFFBQVE7QUFDbkMsUUFBSSxRQUFRLFFBQVc7QUFDckIsWUFBTSxJQUFJLE1BQU0scUJBQXFCLFFBQVE7QUFBQSxJQUMvQztBQUNBLFdBQU8sSUFBSSxNQUFNLE1BQU0sUUFBUSxRQUFRLE1BQU07QUFBQSxFQUMvQztBQUVBLEVBQUFBLFFBQU8sVUFBVSxTQUFTLFNBQVMsU0FBUztBQUMxQyxXQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixNQUFNLE1BQU0sVUFBVSxNQUFNLEtBQUssS0FBSyxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQ3ZEO0FBQUEsRUFDRjtBQUNBLFdBQVMsZ0JBQWdCLEtBQUssWUFBWSxRQUFRO0FBRWhELFFBQUksZUFBZSxRQUFXO0FBQzVCLG1CQUFhO0FBQUEsSUFDZixPQUFPO0FBQ0wsbUJBQWEsQ0FBQztBQUNkLFVBQUksT0FBTyxNQUFNLFVBQVUsR0FBRztBQUM1QixxQkFBYTtBQUFBLE1BQ2Y7QUFBQSxJQUNGO0FBRUEsVUFBTSxZQUFZLElBQUksYUFBYTtBQUVuQyxRQUFJLFlBQVksR0FBRztBQUNqQixZQUFNLElBQUksTUFBTSx5QkFBeUIsUUFBUTtBQUFBLElBQ25EO0FBRUEsUUFBSSxXQUFXLFFBQVc7QUFDeEIsZUFBUztBQUFBLElBQ1gsT0FBTztBQUVMLGVBQVMsQ0FBQztBQUNWLFVBQUksU0FBUyxHQUFHO0FBQ2QsWUFBSSxTQUFTLFdBQVc7QUFDdEIsZ0JBQU0sSUFBSSxNQUFNLHlCQUF5QixRQUFRO0FBQUEsUUFDbkQ7QUFBQSxNQUNGLE9BQU87QUFDTCxpQkFBUztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBRUEsVUFBTSxTQUFTLElBQUksV0FBVyxLQUFLLFlBQVksTUFBTTtBQUNyRCxXQUFPLGVBQWUsUUFBUUEsUUFBTyxTQUFTO0FBQzlDLFdBQU87QUFBQSxFQUNUO0FBVUEsV0FBUyxXQUFXLEtBQUssT0FBTyxLQUFLO0FBQ25DLFVBQU0sS0FBSyxJQUFJLElBQUksUUFBUSxHQUFHO0FBQzlCLFVBQU0sTUFBTSxDQUFDO0FBQ2IsUUFBSW1CLEtBQUk7QUFDUixXQUFPQSxLQUFJLEtBQUs7QUFDZCxZQUFNLFlBQVksSUFBSUE7QUFDdEIsVUFBSSxZQUFZO0FBQ2hCLFVBQUksbUJBQW1CLFlBQVksTUFDL0IsSUFDQSxZQUFZLE1BQ1osSUFDQSxZQUFZLE1BQ1osSUFDQTtBQUNKLFVBQUlBLEtBQUksb0JBQW9CLEtBQUs7QUFDL0IsWUFBSSxZQUFZLFdBQVcsWUFBWTtBQUN2QyxnQkFBUTtBQUFBLGVBQ0Q7QUFDSCxnQkFBSSxZQUFZLEtBQUs7QUFDbkIsMEJBQVk7QUFBQSxZQUNkO0FBQ0E7QUFBQSxlQUNHO0FBQ0gseUJBQWEsSUFBSUEsS0FBSTtBQUNyQixpQkFBSyxhQUFhLFNBQVMsS0FBSztBQUM5QiwrQkFBaUIsWUFBWSxPQUFPLElBQUksYUFBYTtBQUNyRCxrQkFBSSxnQkFBZ0IsS0FBSztBQUN2Qiw0QkFBWTtBQUFBLGNBQ2Q7QUFBQSxZQUNGO0FBQ0E7QUFBQSxlQUNHO0FBQ0gseUJBQWEsSUFBSUEsS0FBSTtBQUNyQix3QkFBWSxJQUFJQSxLQUFJO0FBQ3BCLGlCQUFLLGFBQWEsU0FBUyxRQUFRLFlBQVksU0FBUyxLQUFLO0FBQzNELCtCQUFpQixZQUFZLE9BQU8sTUFDakMsYUFBYSxPQUFPLElBQUksWUFBWTtBQUN2QyxrQkFDRSxnQkFBZ0IsU0FDZixnQkFBZ0IsU0FBUyxnQkFBZ0IsUUFDMUM7QUFDQSw0QkFBWTtBQUFBLGNBQ2Q7QUFBQSxZQUNGO0FBQ0E7QUFBQSxlQUNHO0FBQ0gseUJBQWEsSUFBSUEsS0FBSTtBQUNyQix3QkFBWSxJQUFJQSxLQUFJO0FBQ3BCLHlCQUFhLElBQUlBLEtBQUk7QUFDckIsaUJBQ0csYUFBYSxTQUFTLFFBQVEsWUFBWSxTQUFTLFFBQ25ELGFBQWEsU0FBUyxLQUN2QjtBQUNBLCtCQUFpQixZQUFZLE9BQU8sTUFDakMsYUFBYSxPQUFPLE1BQU0sWUFBWSxPQUFPLElBQzlDLGFBQWE7QUFDZixrQkFBSSxnQkFBZ0IsU0FBUyxnQkFBZ0IsU0FBUztBQUNwRCw0QkFBWTtBQUFBLGNBQ2Q7QUFBQSxZQUNGO0FBQUE7QUFBQSxNQUVOO0FBQ0EsVUFBSSxjQUFjLE1BQU07QUFDdEIsb0JBQVk7QUFDWiwyQkFBbUI7QUFBQSxNQUNyQixXQUFXLFlBQVksT0FBTztBQUM1QixxQkFBYTtBQUNiLFlBQUksS0FBSyxjQUFjLEtBQUssT0FBTyxLQUFLO0FBQ3hDLG9CQUFZLFFBQVEsWUFBWTtBQUFBLE1BQ2xDO0FBQ0EsVUFBSSxLQUFLLFNBQVM7QUFDbEIsTUFBQUEsTUFBSztBQUFBLElBQ1A7QUFDQSxXQUFPLHNCQUFzQixHQUFHO0FBQUEsRUFDbEM7QUFFQSxNQUFNLHVCQUF1QjtBQUU3QixXQUFTLHNCQUFzQixZQUFZO0FBQ3pDLFVBQU0sTUFBTSxXQUFXO0FBQ3ZCLFFBQUksT0FBTyxzQkFBc0I7QUFDL0IsYUFBTyxPQUFPLGFBQWEsTUFBTSxRQUFRLFVBQVU7QUFBQSxJQUNyRDtBQUNBLFFBQUksTUFBTTtBQUNWLFFBQUlBLEtBQUk7QUFDUixXQUFPQSxLQUFJLEtBQUs7QUFDZCxhQUFPLE9BQU8sYUFBYTtBQUFBLFFBQ3pCO0FBQUEsUUFDQSxXQUFXLE1BQU1BLElBQUdBLE1BQUssb0JBQW9CO0FBQUEsTUFDL0M7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLGFBQWEsS0FBSyxPQUFPLEtBQUs7QUFDckMsUUFBSSxNQUFNO0FBQ1YsVUFBTSxLQUFLLElBQUksSUFBSSxRQUFRLEdBQUc7QUFDOUIsYUFBU0EsS0FBSSxPQUFPQSxLQUFJLEtBQUssRUFBRUEsSUFBRztBQUNoQyxhQUFPLE9BQU8sYUFBYSxJQUFJQSxHQUFFO0FBQUEsSUFDbkM7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsVUFBVSxLQUFLLE9BQU8sS0FBSztBQUNsQyxVQUFNLE1BQU0sSUFBSTtBQUNoQixRQUFJLENBQUMsU0FBUyxRQUFRLEdBQUc7QUFDdkIsY0FBUTtBQUFBLElBQ1Y7QUFDQSxRQUFJLENBQUMsT0FBTyxNQUFNLEtBQUssTUFBTSxLQUFLO0FBQ2hDLFlBQU07QUFBQSxJQUNSO0FBQ0EsUUFBSSxNQUFNO0FBQ1YsYUFBU0EsS0FBSSxPQUFPQSxLQUFJLEtBQUssRUFBRUEsSUFBRztBQUNoQyxhQUFPLG9CQUFvQixJQUFJQTtBQUFBLElBQ2pDO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxFQUFBQyxRQUFPLFVBQVUsUUFBUSxTQUFTLE1BQU0sT0FBTyxLQUFLO0FBQ2xELFVBQU0sTUFBTSxLQUFLO0FBQ2pCLFlBQVEsQ0FBQyxDQUFDO0FBQ1YsVUFBTSxRQUFRLFNBQVMsTUFBTSxDQUFDLENBQUM7QUFDL0IsUUFBSSxRQUFRLEdBQUc7QUFDYixlQUFTO0FBQ1QsVUFBSSxRQUFRLEdBQUc7QUFDYixnQkFBUTtBQUFBLE1BQ1Y7QUFBQSxJQUNGLFdBQVcsUUFBUSxLQUFLO0FBQ3RCLGNBQVE7QUFBQSxJQUNWO0FBQ0EsUUFBSSxNQUFNLEdBQUc7QUFDWCxhQUFPO0FBQ1AsVUFBSSxNQUFNLEdBQUc7QUFDWCxjQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0YsV0FBVyxNQUFNLEtBQUs7QUFDcEIsWUFBTTtBQUFBLElBQ1I7QUFDQSxRQUFJLE1BQU0sT0FBTztBQUNmLFlBQU07QUFBQSxJQUNSO0FBQ0EsVUFBTSxTQUFTLEtBQUssU0FBUyxPQUFPLEdBQUc7QUFDdkMsV0FBTyxlQUFlLFFBQVFBLFFBQU8sU0FBUztBQUM5QyxXQUFPO0FBQUEsRUFDVDtBQUVBLEVBQUFBLFFBQU8sVUFBVSxhQUFhQSxRQUFPLFVBQVUsYUFBYSxTQUFTLFdBQ25FLFFBQ0FDLGFBQ0E7QUFDQSxRQUFJLFdBQVcsUUFBVztBQUN4QixZQUFNLElBQUksTUFBTSxxQkFBcUIsVUFBVSxVQUFVLE1BQU07QUFBQSxJQUNqRTtBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxhQUFhLE1BQU0sTUFBTTtBQUFBLElBQ2xDO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLGFBQWEsTUFBTSxNQUFNO0FBQUEsSUFDbEM7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sYUFBYSxNQUFNLE1BQU07QUFBQSxJQUNsQztBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxLQUFLLGFBQWEsTUFBTTtBQUFBLElBQ2pDO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLEtBQUssYUFBYSxNQUFNO0FBQUEsSUFDakM7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sS0FBSyxVQUFVLE1BQU07QUFBQSxJQUM5QjtBQUVBLGdCQUFZQSxhQUFZLEdBQUcsWUFBWTtBQUFBLEVBQ3pDO0FBRUEsRUFBQUQsUUFBTyxVQUFVLGFBQWFBLFFBQU8sVUFBVSxhQUFhLFNBQVMsV0FDbkUsUUFDQUMsYUFDQTtBQUNBLFFBQUksV0FBVyxRQUFXO0FBQ3hCLFlBQU0sSUFBSSxNQUFNLHFCQUFxQixVQUFVLFVBQVUsTUFBTTtBQUFBLElBQ2pFO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLGFBQWEsTUFBTSxNQUFNO0FBQUEsSUFDbEM7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sYUFBYSxNQUFNLE1BQU07QUFBQSxJQUNsQztBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxhQUFhLE1BQU0sTUFBTTtBQUFBLElBQ2xDO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLEtBQUssYUFBYSxNQUFNO0FBQUEsSUFDakM7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sS0FBSyxhQUFhLE1BQU07QUFBQSxJQUNqQztBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxLQUFLLFVBQVUsTUFBTTtBQUFBLElBQzlCO0FBRUEsZ0JBQVlBLGFBQVksR0FBRyxZQUFZO0FBQUEsRUFDekM7QUFFQSxFQUFBRCxRQUFPLFVBQVUsWUFBWUEsUUFBTyxVQUFVLFlBQVksU0FBUyxVQUNqRSxTQUFTLEdBQ1Q7QUFDQSxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsVUFBTSxNQUFNLEtBQUs7QUFDakIsUUFBSSxRQUFRLFFBQVc7QUFDckIsa0JBQVksUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUFBLElBQ3JDO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxFQUFBQSxRQUFPLFVBQVUsZUFBZUEsUUFBTyxVQUFVLGVBQWU7QUFFaEUsRUFBQUEsUUFBTyxVQUFVLGVBQ2ZBLFFBQU8sVUFBVSxlQUNmLFNBQVMsYUFBYSxTQUFTLEdBQUc7QUFDaEMsbUJBQWUsUUFBUSxRQUFRO0FBQy9CLFVBQU0sUUFBUSxLQUFLO0FBQ25CLFVBQU0sT0FBTyxLQUFLLFNBQVM7QUFDM0IsUUFBSSxVQUFVLFVBQWEsU0FBUyxRQUFXO0FBQzdDLGtCQUFZLFFBQVEsS0FBSyxTQUFTLENBQUM7QUFBQSxJQUNyQztBQUVBLFdBQU8sUUFBUSxPQUFPLEtBQUs7QUFBQSxFQUM3QjtBQUVKLEVBQUFBLFFBQU8sVUFBVSxlQUNmQSxRQUFPLFVBQVUsZUFDZixTQUFTLGFBQWEsU0FBUyxHQUFHO0FBQ2hDLG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsS0FBSztBQUNuQixVQUFNLE9BQU8sS0FBSyxTQUFTO0FBQzNCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLEtBQUssU0FBUyxDQUFDO0FBQUEsSUFDckM7QUFFQSxXQUFPLFFBQ0wsS0FBSyxFQUFFLFVBQVUsS0FBSyxJQUN0QixLQUFLLEVBQUUsVUFBVSxLQUFLLEtBQ3RCLE9BQU8sS0FBSztBQUFBLEVBQ2hCO0FBRUosRUFBQUEsUUFBTyxVQUFVLGVBQWVBLFFBQU8sVUFBVSxlQUFlO0FBRWhFLEVBQUFBLFFBQU8sVUFBVSxrQkFDZkEsUUFBTyxVQUFVLGtCQUNmO0FBQUEsSUFDRSxTQUFTLGdCQUFnQixRQUFRO0FBQy9CLGVBQVMsV0FBVztBQUNwQixxQkFBZSxRQUFRLFFBQVE7QUFDL0IsWUFBTSxRQUFRLEtBQUs7QUFDbkIsWUFBTSxPQUFPLEtBQUssU0FBUztBQUMzQixVQUFJLFVBQVUsVUFBVSxTQUFTLFFBQVE7QUFDdkMsb0JBQVksUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUFBLE1BQ3JDO0FBQ0EsWUFBTSxLQUFLLFFBQVEsS0FBSyxFQUFFLFVBQVUsS0FBSyxJQUN2QyxLQUFLLEVBQUUsVUFBVSxLQUFLLEtBQ3RCLEtBQUssRUFBRSxVQUFVLEtBQUs7QUFDeEIsWUFBTUUsTUFBSyxLQUFLLEVBQUUsVUFBVSxLQUFLLEVBQUUsVUFBVSxLQUFLLElBQ2hELEtBQUssRUFBRSxVQUFVLEtBQUssS0FBSyxPQUFPLEtBQUs7QUFDekMsYUFBTyxPQUFPLEVBQUUsS0FBSyxPQUFPQSxHQUFFLEtBQUssT0FBTyxFQUFFO0FBQUEsSUFDOUM7QUFBQSxFQUNGO0FBRUosRUFBQUYsUUFBTyxVQUFVLGtCQUNmQSxRQUFPLFVBQVUsa0JBQ2Y7QUFBQSxJQUNFLFNBQVMsZ0JBQWdCLFFBQVE7QUFDL0IsZUFBUyxXQUFXO0FBQ3BCLHFCQUFlLFFBQVEsUUFBUTtBQUMvQixZQUFNLFFBQVEsS0FBSztBQUNuQixZQUFNLE9BQU8sS0FBSyxTQUFTO0FBQzNCLFVBQUksVUFBVSxVQUFVLFNBQVMsUUFBUTtBQUN2QyxvQkFBWSxRQUFRLEtBQUssU0FBUyxDQUFDO0FBQUEsTUFDckM7QUFDQSxZQUFNRSxNQUFLLFFBQVEsS0FBSyxLQUFLLEtBQUssRUFBRSxVQUFVLEtBQUssS0FDakQsS0FBSyxFQUFFLFVBQVUsS0FBSyxJQUFJLEtBQUssRUFBRTtBQUNuQyxZQUFNLEtBQUssS0FBSyxFQUFFLFVBQVUsS0FBSyxLQUFLLEtBQUssRUFBRSxVQUFVLEtBQUssS0FDMUQsS0FBSyxFQUFFLFVBQVUsS0FBSyxJQUFJO0FBQzVCLGNBQVEsT0FBT0EsR0FBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLE9BQU8sRUFBRTtBQUFBLElBQy9DO0FBQUEsRUFDRjtBQUVKLEVBQUFGLFFBQU8sVUFBVSxZQUFZLFNBQVMsVUFDcEMsUUFDQUMsYUFDQTtBQUNBLFFBQUksV0FBVyxRQUFXO0FBQ3hCLFlBQU0sSUFBSSxNQUFNLHFCQUFxQixVQUFVLFVBQVUsTUFBTTtBQUFBLElBQ2pFO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLFlBQVksTUFBTSxNQUFNO0FBQUEsSUFDakM7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sWUFBWSxNQUFNLE1BQU07QUFBQSxJQUNqQztBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxZQUFZLE1BQU0sTUFBTTtBQUFBLElBQ2pDO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLEtBQUssWUFBWSxNQUFNO0FBQUEsSUFDaEM7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sS0FBSyxZQUFZLE1BQU07QUFBQSxJQUNoQztBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxLQUFLLFNBQVMsTUFBTTtBQUFBLElBQzdCO0FBRUEsZ0JBQVlBLGFBQVksR0FBRyxZQUFZO0FBQUEsRUFDekM7QUFFQSxFQUFBRCxRQUFPLFVBQVUsWUFBWSxTQUFTLFVBQVUsUUFBUUMsYUFBWTtBQUNsRSxRQUFJLFdBQVcsUUFBVztBQUN4QixZQUFNLElBQUksTUFBTSxxQkFBcUIsVUFBVSxVQUFVLE1BQU07QUFBQSxJQUNqRTtBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxZQUFZLE1BQU0sTUFBTTtBQUFBLElBQ2pDO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLFlBQVksTUFBTSxNQUFNO0FBQUEsSUFDakM7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sWUFBWSxNQUFNLE1BQU07QUFBQSxJQUNqQztBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxLQUFLLFlBQVksTUFBTTtBQUFBLElBQ2hDO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLEtBQUssWUFBWSxNQUFNO0FBQUEsSUFDaEM7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sS0FBSyxTQUFTLE1BQU07QUFBQSxJQUM3QjtBQUVBLGdCQUFZQSxhQUFZLEdBQUcsWUFBWTtBQUFBLEVBQ3pDO0FBRUEsRUFBQUQsUUFBTyxVQUFVLFdBQVcsU0FBUyxTQUFTLFNBQVMsR0FBRztBQUN4RCxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsVUFBTSxNQUFNLEtBQUs7QUFDakIsUUFBSSxRQUFRLFFBQVc7QUFDckIsa0JBQVksUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUFBLElBQ3JDO0FBRUEsV0FBTyxPQUFPLE1BQU0sS0FBSyxLQUFLO0FBQUEsRUFDaEM7QUFFQSxFQUFBQSxRQUFPLFVBQVUsY0FBYyxTQUFTLFlBQVksU0FBUyxHQUFHO0FBQzlELG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsS0FBSztBQUNuQixVQUFNLE9BQU8sS0FBSyxTQUFTO0FBQzNCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLEtBQUssU0FBUyxDQUFDO0FBQUEsSUFDckM7QUFFQSxVQUFNLE1BQU0sUUFBUSxPQUFPLEtBQUs7QUFDaEMsV0FBTyxPQUFPLE1BQU0sS0FBSyxNQUFNO0FBQUEsRUFDakM7QUFFQSxFQUFBQSxRQUFPLFVBQVUsY0FBYyxTQUFTLFlBQVksU0FBUyxHQUFHO0FBQzlELG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsS0FBSztBQUNuQixVQUFNLE9BQU8sS0FBSyxTQUFTO0FBQzNCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLEtBQUssU0FBUyxDQUFDO0FBQUEsSUFDckM7QUFFQSxVQUFNLE1BQU0sUUFBUSxLQUFLLElBQUk7QUFDN0IsV0FBTyxPQUFPLE1BQU0sS0FBSyxNQUFNO0FBQUEsRUFDakM7QUFFQSxFQUFBQSxRQUFPLFVBQVUsY0FBYyxTQUFTLFlBQVksU0FBUyxHQUFHO0FBQzlELG1CQUFlLFFBQVEsUUFBUTtBQUMvQixVQUFNLFFBQVEsS0FBSztBQUNuQixVQUFNLE9BQU8sS0FBSyxTQUFTO0FBQzNCLFFBQUksVUFBVSxVQUFhLFNBQVMsUUFBVztBQUM3QyxrQkFBWSxRQUFRLEtBQUssU0FBUyxDQUFDO0FBQUEsSUFDckM7QUFFQSxXQUFPLFFBQ0wsS0FBSyxFQUFFLFVBQVUsS0FBSyxJQUN0QixLQUFLLEVBQUUsVUFBVSxLQUFLLE1BQ3JCLFFBQVE7QUFBQSxFQUNiO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGNBQWMsU0FBUyxZQUFZLFNBQVMsR0FBRztBQUM5RCxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsVUFBTSxRQUFRLEtBQUs7QUFDbkIsVUFBTSxPQUFPLEtBQUssU0FBUztBQUMzQixRQUFJLFVBQVUsVUFBYSxTQUFTLFFBQVc7QUFDN0Msa0JBQVksUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUFBLElBQ3JDO0FBRUEsWUFBUSxTQUFTLE1BQ2YsS0FBSyxFQUFFLFVBQVUsS0FBSyxLQUN0QixLQUFLLEVBQUUsVUFBVSxLQUFLLElBQ3RCO0FBQUEsRUFDSjtBQUVBLEVBQUFBLFFBQU8sVUFBVSxpQkFBaUI7QUFBQSxJQUNoQyxTQUFTLGVBQWUsUUFBUTtBQUM5QixlQUFTLFdBQVc7QUFDcEIscUJBQWUsUUFBUSxRQUFRO0FBQy9CLFlBQU0sUUFBUSxLQUFLO0FBQ25CLFlBQU0sT0FBTyxLQUFLLFNBQVM7QUFDM0IsVUFBSSxVQUFVLFVBQVUsU0FBUyxRQUFRO0FBQ3ZDLG9CQUFZLFFBQVEsS0FBSyxTQUFTLENBQUM7QUFBQSxNQUNyQztBQUNBLFlBQU0sTUFBTSxLQUFLLFNBQVMsS0FBSyxLQUFLLFNBQVMsS0FBSyxLQUFLLElBQ3JELEtBQUssU0FBUyxLQUFLLEtBQUssTUFBTSxRQUFRO0FBQ3hDLGNBQVEsT0FBTyxHQUFHLEtBQUssT0FBTyxFQUFFLEtBQzlCO0FBQUEsUUFDRSxRQUFRLEtBQUssRUFBRSxVQUFVLEtBQUssSUFBSSxLQUFLLEVBQUUsVUFBVSxLQUFLLEtBQ3RELEtBQUssRUFBRSxVQUFVLEtBQUs7QUFBQSxNQUMxQjtBQUFBLElBQ0o7QUFBQSxFQUNGO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGlCQUFpQjtBQUFBLElBQ2hDLFNBQVMsZUFBZSxRQUFRO0FBQzlCLGVBQVMsV0FBVztBQUNwQixxQkFBZSxRQUFRLFFBQVE7QUFDL0IsWUFBTSxRQUFRLEtBQUs7QUFDbkIsWUFBTSxPQUFPLEtBQUssU0FBUztBQUMzQixVQUFJLFVBQVUsVUFBVSxTQUFTLFFBQVE7QUFDdkMsb0JBQVksUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUFBLE1BQ3JDO0FBQ0EsWUFBTSxPQUFPLFNBQVMsTUFBTSxLQUFLLEVBQUUsVUFBVSxLQUFLLEtBQ2hELEtBQUssRUFBRSxVQUFVLEtBQUssSUFBSSxLQUFLLEVBQUU7QUFDbkMsY0FBUSxPQUFPLEdBQUcsS0FBSyxPQUFPLEVBQUUsS0FDOUI7QUFBQSxRQUNFLEtBQUssRUFBRSxVQUFVLEtBQUssS0FBSyxLQUFLLEVBQUUsVUFBVSxLQUFLLEtBQy9DLEtBQUssRUFBRSxVQUFVLEtBQUssSUFBSTtBQUFBLE1BQzlCO0FBQUEsSUFDSjtBQUFBLEVBQ0Y7QUFFQSxFQUFBQSxRQUFPLFVBQVUsY0FBYyxTQUFTLFlBQVksUUFBUTtBQUMxRCxXQUFPLFlBQ0gsbUJBQW1CLE1BQU0sTUFBTSxJQUMvQixrQkFBa0IsTUFBTSxNQUFNO0FBQUEsRUFDcEM7QUFFQSxFQUFBQSxRQUFPLFVBQVUsY0FBYyxTQUFTLFlBQVksUUFBUTtBQUMxRCxXQUFPLFlBQ0gsa0JBQWtCLE1BQU0sTUFBTSxJQUM5QixtQkFBbUIsTUFBTSxNQUFNO0FBQUEsRUFDckM7QUFFQSxFQUFBQSxRQUFPLFVBQVUsZUFBZSxTQUFTLGFBQWEsUUFBUTtBQUM1RCxXQUFPLFlBQ0gsb0JBQW9CLE1BQU0sTUFBTSxJQUNoQyxtQkFBbUIsTUFBTSxNQUFNO0FBQUEsRUFDckM7QUFFQSxFQUFBQSxRQUFPLFVBQVUsZUFBZSxTQUFTLGFBQWEsUUFBUTtBQUM1RCxXQUFPLFlBQ0gsbUJBQW1CLE1BQU0sTUFBTSxJQUMvQixvQkFBb0IsTUFBTSxNQUFNO0FBQUEsRUFDdEM7QUFFQSxFQUFBQSxRQUFPLFVBQVUsY0FDZkEsUUFBTyxVQUFVLGNBQ2YsU0FBUyxZQUFZLE9BQU8sUUFBUUMsYUFBWTtBQUM5QyxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sZUFBZSxNQUFNLE9BQU8sUUFBUSxHQUFHLGVBQWM7QUFBQSxJQUM5RDtBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxlQUFlLE1BQU0sT0FBTyxRQUFRLEdBQUcsYUFBWTtBQUFBLElBQzVEO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLGVBQWUsTUFBTSxPQUFPLFFBQVEsR0FBRyxRQUFRO0FBQUEsSUFDeEQ7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sZUFBZSxNQUFNLE9BQU8sUUFBUSxHQUFHLFVBQVU7QUFBQSxJQUMxRDtBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxlQUFlLE1BQU0sT0FBTyxRQUFRLEdBQUcsS0FBTTtBQUFBLElBQ3REO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLFlBQVksTUFBTSxPQUFPLFFBQVEsR0FBRyxHQUFJO0FBQUEsSUFDakQ7QUFFQSxnQkFBWUEsYUFBWSxHQUFHLFlBQVk7QUFBQSxFQUN6QztBQUVKLEVBQUFELFFBQU8sVUFBVSxjQUNmQSxRQUFPLFVBQVUsY0FDZixTQUFTLFlBQVksT0FBTyxRQUFRQyxhQUFZO0FBQzlDLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxlQUFlLE1BQU0sT0FBTyxRQUFRLEdBQUcsZUFBYztBQUFBLElBQzlEO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLGVBQWUsTUFBTSxPQUFPLFFBQVEsR0FBRyxhQUFZO0FBQUEsSUFDNUQ7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sZUFBZSxNQUFNLE9BQU8sUUFBUSxHQUFHLFFBQVE7QUFBQSxJQUN4RDtBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxlQUFlLE1BQU0sT0FBTyxRQUFRLEdBQUcsVUFBVTtBQUFBLElBQzFEO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLGVBQWUsTUFBTSxPQUFPLFFBQVEsR0FBRyxLQUFNO0FBQUEsSUFDdEQ7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sWUFBWSxNQUFNLE9BQU8sUUFBUSxHQUFHLEdBQUk7QUFBQSxJQUNqRDtBQUVBLGdCQUFZQSxhQUFZLEdBQUcsWUFBWTtBQUFBLEVBQ3pDO0FBRUosRUFBQUQsUUFBTyxVQUFVLGFBQWFBLFFBQU8sVUFBVSxhQUFhLFNBQVMsV0FDbkUsT0FDQSxTQUFTLEdBQ1Q7QUFDQSxXQUFPLFlBQVksTUFBTSxPQUFPLFFBQVEsR0FBRyxHQUFJO0FBQUEsRUFDakQ7QUFFQSxFQUFBQSxRQUFPLFVBQVUsZ0JBQ2ZBLFFBQU8sVUFBVSxnQkFDZixTQUFTLGNBQWMsT0FBTyxTQUFTLEdBQUc7QUFDeEMsV0FBTyxlQUFlLE1BQU0sT0FBTyxRQUFRLEdBQUcsS0FBTTtBQUFBLEVBQ3REO0FBRUosRUFBQUEsUUFBTyxVQUFVLGdCQUNmQSxRQUFPLFVBQVUsZ0JBQ2YsU0FBUyxjQUFjLE9BQU8sU0FBUyxHQUFHO0FBQ3hDLFdBQU8sZUFBZSxNQUFNLE9BQU8sUUFBUSxHQUFHLEtBQU07QUFBQSxFQUN0RDtBQUVKLEVBQUFBLFFBQU8sVUFBVSxnQkFDZkEsUUFBTyxVQUFVLGdCQUNmLFNBQVMsY0FBYyxPQUFPLFNBQVMsR0FBRztBQUN4QyxXQUFPLGVBQWUsTUFBTSxPQUFPLFFBQVEsR0FBRyxVQUFVO0FBQUEsRUFDMUQ7QUFFSixFQUFBQSxRQUFPLFVBQVUsZ0JBQ2ZBLFFBQU8sVUFBVSxnQkFDZixTQUFTLGNBQWMsT0FBTyxTQUFTLEdBQUc7QUFDeEMsV0FBTyxlQUFlLE1BQU0sT0FBTyxRQUFRLEdBQUcsVUFBVTtBQUFBLEVBQzFEO0FBRUosV0FBUyxlQUFlLEtBQUssT0FBTyxRQUFRRyxNQUFLLEtBQUs7QUFDcEQsZUFBVyxPQUFPQSxNQUFLLEtBQUssS0FBSyxRQUFRLENBQUM7QUFDMUMsUUFBSSxLQUFLLE9BQU8sUUFBUSxPQUFPLFVBQVUsQ0FBQztBQUMxQyxRQUFJLFlBQVk7QUFDaEIsU0FBSyxNQUFNO0FBQ1gsUUFBSSxZQUFZO0FBQ2hCLFNBQUssTUFBTTtBQUNYLFFBQUksWUFBWTtBQUNoQixTQUFLLE1BQU07QUFDWCxRQUFJLFlBQVk7QUFDaEIsUUFBSUQsTUFBSyxPQUFPLFNBQVMsT0FBTyxFQUFFLElBQUksT0FBTyxVQUFVLENBQUM7QUFDeEQsUUFBSSxZQUFZQTtBQUNoQixJQUFBQSxNQUFLQSxPQUFNO0FBQ1gsUUFBSSxZQUFZQTtBQUNoQixJQUFBQSxNQUFLQSxPQUFNO0FBQ1gsUUFBSSxZQUFZQTtBQUNoQixJQUFBQSxNQUFLQSxPQUFNO0FBQ1gsUUFBSSxZQUFZQTtBQUNoQixXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsZUFBZSxLQUFLLE9BQU8sUUFBUUMsTUFBSyxLQUFLO0FBQ3BELGVBQVcsT0FBT0EsTUFBSyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQzFDLFFBQUksS0FBSyxPQUFPLFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUMsUUFBSSxTQUFTLEtBQUs7QUFDbEIsU0FBSyxNQUFNO0FBQ1gsUUFBSSxTQUFTLEtBQUs7QUFDbEIsU0FBSyxNQUFNO0FBQ1gsUUFBSSxTQUFTLEtBQUs7QUFDbEIsU0FBSyxNQUFNO0FBQ1gsUUFBSSxTQUFTLEtBQUs7QUFDbEIsUUFBSUQsTUFBSyxPQUFPLFNBQVMsT0FBTyxFQUFFLElBQUksT0FBTyxVQUFVLENBQUM7QUFDeEQsUUFBSSxTQUFTLEtBQUtBO0FBQ2xCLElBQUFBLE1BQUtBLE9BQU07QUFDWCxRQUFJLFNBQVMsS0FBS0E7QUFDbEIsSUFBQUEsTUFBS0EsT0FBTTtBQUNYLFFBQUksU0FBUyxLQUFLQTtBQUNsQixJQUFBQSxNQUFLQSxPQUFNO0FBQ1gsUUFBSSxVQUFVQTtBQUNkLFdBQU8sU0FBUztBQUFBLEVBQ2xCO0FBRUEsRUFBQUYsUUFBTyxVQUFVLG1CQUNmQSxRQUFPLFVBQVUsbUJBQ2Y7QUFBQSxJQUNFLFNBQVMsaUJBQWlCLE9BQU8sU0FBUyxHQUFHO0FBQzNDLGFBQU87QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLE9BQU8sQ0FBQztBQUFBLFFBQ1IsT0FBTyxvQkFBb0I7QUFBQSxNQUM3QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUosRUFBQUEsUUFBTyxVQUFVLG1CQUNmQSxRQUFPLFVBQVUsbUJBQ2Y7QUFBQSxJQUNFLFNBQVMsaUJBQWlCLE9BQU8sU0FBUyxHQUFHO0FBQzNDLGFBQU87QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLE9BQU8sQ0FBQztBQUFBLFFBQ1IsT0FBTyxvQkFBb0I7QUFBQSxNQUM3QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUosRUFBQUEsUUFBTyxVQUFVLGFBQWEsU0FBUyxXQUNyQyxPQUNBLFFBQ0FDLGFBQ0E7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU87QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLGVBQWUsTUFBTSxPQUFPLFFBQVEsZUFBZSxZQUFZO0FBQUEsSUFDeEU7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sZUFBZSxNQUFNLE9BQU8sUUFBUSxVQUFXLE9BQVE7QUFBQSxJQUNoRTtBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxlQUFlLE1BQU0sT0FBTyxRQUFRLGFBQWEsVUFBVTtBQUFBLElBQ3BFO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLGVBQWUsTUFBTSxPQUFPLFFBQVEsUUFBUyxLQUFNO0FBQUEsSUFDNUQ7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sWUFBWSxNQUFNLE9BQU8sUUFBUSxNQUFPLEdBQUk7QUFBQSxJQUNyRDtBQUVBLGdCQUFZQSxhQUFZLEdBQUcsWUFBWTtBQUFBLEVBQ3pDO0FBRUEsRUFBQUQsUUFBTyxVQUFVLGFBQWEsU0FBUyxXQUNyQyxPQUNBLFFBQ0FDLGFBQ0E7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU87QUFBQSxRQUNMO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLGVBQWUsTUFBTSxPQUFPLFFBQVEsZUFBZSxZQUFZO0FBQUEsSUFDeEU7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sZUFBZSxNQUFNLE9BQU8sUUFBUSxVQUFXLE9BQVE7QUFBQSxJQUNoRTtBQUNBLFFBQUlBLGdCQUFlLEdBQUc7QUFDcEIsYUFBTyxlQUFlLE1BQU0sT0FBTyxRQUFRLGFBQWEsVUFBVTtBQUFBLElBQ3BFO0FBQ0EsUUFBSUEsZ0JBQWUsR0FBRztBQUNwQixhQUFPLGVBQWUsTUFBTSxPQUFPLFFBQVEsUUFBUyxLQUFNO0FBQUEsSUFDNUQ7QUFDQSxRQUFJQSxnQkFBZSxHQUFHO0FBQ3BCLGFBQU8sWUFBWSxNQUFNLE9BQU8sUUFBUSxNQUFPLEdBQUk7QUFBQSxJQUNyRDtBQUVBLGdCQUFZQSxhQUFZLEdBQUcsWUFBWTtBQUFBLEVBQ3pDO0FBRUEsRUFBQUQsUUFBTyxVQUFVLFlBQVksU0FBUyxVQUFVLE9BQU8sU0FBUyxHQUFHO0FBQ2pFLFdBQU8sWUFBWSxNQUFNLE9BQU8sUUFBUSxNQUFPLEdBQUk7QUFBQSxFQUNyRDtBQUVBLEVBQUFBLFFBQU8sVUFBVSxlQUFlLFNBQVMsYUFBYSxPQUFPLFNBQVMsR0FBRztBQUN2RSxXQUFPLGVBQWUsTUFBTSxPQUFPLFFBQVEsUUFBUyxLQUFNO0FBQUEsRUFDNUQ7QUFFQSxFQUFBQSxRQUFPLFVBQVUsZUFBZSxTQUFTLGFBQ3ZDLE9BQ0EsU0FBUyxHQUNUO0FBQ0EsV0FBTyxlQUFlLE1BQU0sT0FBTyxRQUFRLFFBQVMsS0FBTTtBQUFBLEVBQzVEO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGVBQWUsU0FBUyxhQUFhLE9BQU8sU0FBUyxHQUFHO0FBQ3ZFLFdBQU8sZUFBZSxNQUFNLE9BQU8sUUFBUSxhQUFhLFVBQVU7QUFBQSxFQUNwRTtBQUVBLEVBQUFBLFFBQU8sVUFBVSxlQUFlLFNBQVMsYUFBYSxPQUFPLFNBQVMsR0FBRztBQUN2RSxXQUFPLGVBQWUsTUFBTSxPQUFPLFFBQVEsYUFBYSxVQUFVO0FBQUEsRUFDcEU7QUFFQSxFQUFBQSxRQUFPLFVBQVUsa0JBQWtCO0FBQUEsSUFDakMsU0FBUyxnQkFBZ0IsT0FBTyxTQUFTLEdBQUc7QUFDMUMsYUFBTztBQUFBLFFBQ0w7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsQ0FBQyxPQUFPLG9CQUFvQjtBQUFBLFFBQzVCLE9BQU8sb0JBQW9CO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLEVBQUFBLFFBQU8sVUFBVSxrQkFBa0I7QUFBQSxJQUNqQyxTQUFTLGdCQUFnQixPQUFPLFNBQVMsR0FBRztBQUMxQyxhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxDQUFDLE9BQU8sb0JBQW9CO0FBQUEsUUFDNUIsT0FBTyxvQkFBb0I7QUFBQSxNQUM3QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGVBQWUsU0FBUyxhQUN2QyxPQUNBLFFBQ0E7QUFDQSxXQUFPLFlBQ0gsb0JBQW9CLE1BQU0sT0FBTyxNQUFNLElBQ3ZDLG1CQUFtQixNQUFNLE9BQU8sTUFBTTtBQUFBLEVBQzVDO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGVBQWUsU0FBUyxhQUN2QyxPQUNBLFFBQ0E7QUFDQSxXQUFPLFlBQ0gsbUJBQW1CLE1BQU0sT0FBTyxNQUFNLElBQ3RDLG9CQUFvQixNQUFNLE9BQU8sTUFBTTtBQUFBLEVBQzdDO0FBRUEsRUFBQUEsUUFBTyxVQUFVLGdCQUFnQixTQUFTLGNBQ3hDLE9BQ0EsUUFDQTtBQUNBLFdBQU8sWUFDSCxxQkFBcUIsTUFBTSxPQUFPLE1BQU0sSUFDeEMsb0JBQW9CLE1BQU0sT0FBTyxNQUFNO0FBQUEsRUFDN0M7QUFFQSxFQUFBQSxRQUFPLFVBQVUsZ0JBQWdCLFNBQVMsY0FDeEMsT0FDQSxRQUNBO0FBQ0EsV0FBTyxZQUNILG9CQUFvQixNQUFNLE9BQU8sTUFBTSxJQUN2QyxxQkFBcUIsTUFBTSxPQUFPLE1BQU07QUFBQSxFQUM5QztBQUVBLEVBQUFBLFFBQU8sVUFBVSxPQUFPLFNBQVNJLE1BQy9CLFFBQ0EsYUFDQSxhQUNBLFdBQ0E7QUFDQSxRQUFJLENBQUMsYUFBYSxJQUFJLEdBQUc7QUFDdkIsWUFBTSxJQUFJLE1BQU07QUFBQSxRQUNkO0FBQUEsUUFDQSxDQUFDLFVBQVUsWUFBWTtBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJLENBQUMsYUFBYSxNQUFNLEdBQUc7QUFDekIsWUFBTSxJQUFJLE1BQU07QUFBQSxRQUNkO0FBQUEsUUFDQSxDQUFDLFVBQVUsWUFBWTtBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJLGdCQUFnQixRQUFXO0FBQzdCLG9CQUFjO0FBQUEsSUFDaEIsT0FBTztBQUNMLG9CQUFjLFVBQVUsYUFBYSxDQUFDO0FBQ3RDLFVBQUksY0FBYyxHQUFHO0FBQ25CLGNBQU0sSUFBSSxNQUFNLGlCQUFpQixlQUFlLFFBQVEsV0FBVztBQUFBLE1BQ3JFO0FBQUEsSUFDRjtBQUVBLFFBQUksZ0JBQWdCLFFBQVc7QUFDN0Isb0JBQWM7QUFBQSxJQUNoQixPQUFPO0FBQ0wsb0JBQWMsVUFBVSxhQUFhLENBQUM7QUFDdEMsVUFBSSxjQUFjLEdBQUc7QUFDbkIsY0FBTSxJQUFJLE1BQU0saUJBQWlCLGVBQWUsUUFBUSxXQUFXO0FBQUEsTUFDckU7QUFDQSxVQUFJLGVBQWUsWUFBWTtBQUM3QixjQUFNLElBQUksTUFBTTtBQUFBLFVBQ2Q7QUFBQSxVQUNBLEtBQUs7QUFBQSxVQUNMO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxjQUFjLFFBQVc7QUFDM0Isa0JBQVksS0FBSztBQUFBLElBQ25CLE9BQU87QUFDTCxrQkFBWSxVQUFVLFdBQVcsQ0FBQztBQUNsQyxVQUFJLFlBQVksR0FBRztBQUNqQixjQUFNLElBQUksTUFBTSxpQkFBaUIsYUFBYSxRQUFRLFNBQVM7QUFBQSxNQUNqRTtBQUNBLFVBQUksYUFBYSxZQUFZO0FBQzNCLGNBQU0sSUFBSSxNQUFNO0FBQUEsVUFDZDtBQUFBLFVBQ0EsS0FBSztBQUFBLFVBQ0w7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJLGVBQWUsT0FBTyxRQUFRO0FBQ2hDLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxZQUFZLEtBQUssWUFBWSxhQUFhO0FBQzVDLGtCQUFZO0FBQUEsSUFDZDtBQUNBLFFBQUksY0FBYyxhQUFhO0FBQzdCLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxPQUFPLFdBQVcsS0FBSyxLQUFLLFdBQVcsR0FBRztBQUM1QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksWUFBWSxLQUFLLFFBQVE7QUFDM0Isa0JBQVksS0FBSztBQUFBLElBQ25CO0FBRUEsUUFBSSxPQUFPLFNBQVMsY0FBYyxZQUFZLGFBQWE7QUFDekQsa0JBQVksT0FBTyxTQUFTLGNBQWM7QUFBQSxJQUM1QztBQUVBLFVBQU0sTUFBTSxZQUFZO0FBQ3hCLFFBQ0UsU0FBUyxVQUFVLE9BQU8sV0FBVyxVQUFVLGVBQWUsWUFDOUQ7QUFDQSxXQUFLLFdBQVcsYUFBYSxhQUFhLFNBQVM7QUFBQSxJQUNyRCxPQUFPO0FBQ0wsaUJBQVcsVUFBVSxJQUFJO0FBQUEsUUFDdkI7QUFBQSxRQUNBLEtBQUssU0FBUyxhQUFhLFNBQVM7QUFBQSxRQUNwQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxFQUFBSixRQUFPLFVBQVUsT0FBTyxTQUFTLEtBQUssS0FBSyxPQUFPLEtBQUssVUFBVTtBQUMvRCxRQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLFVBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsbUJBQVc7QUFDWCxnQkFBUTtBQUNSLGNBQU0sS0FBSztBQUFBLE1BQ2IsV0FBVyxPQUFPLFFBQVEsVUFBVTtBQUNsQyxtQkFBVztBQUNYLGNBQU0sS0FBSztBQUFBLE1BQ2I7QUFDQSxVQUFJLGFBQWEsVUFBVSxPQUFPLGFBQWEsVUFBVTtBQUN2RCxjQUFNLElBQUksVUFBVSwyQkFBMkI7QUFBQSxNQUNqRDtBQUNBLFVBQUksT0FBTyxhQUFhLFlBQVksQ0FBQ0EsUUFBTyxXQUFXLFFBQVEsR0FBRztBQUNoRSxjQUFNLElBQUksVUFBVSx1QkFBdUIsUUFBUTtBQUFBLE1BQ3JEO0FBQ0EsVUFBSSxJQUFJLFdBQVcsR0FBRztBQUNwQixjQUFNLE9BQU8sSUFBSSxXQUFXLENBQUM7QUFDN0IsWUFBSSxhQUFhLFVBQVUsT0FBTyxPQUFPLGFBQWEsVUFBVTtBQUM5RCxnQkFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsSUFDRixXQUFXLE9BQU8sUUFBUSxVQUFVO0FBQ2xDLFlBQU0sTUFBTTtBQUFBLElBQ2QsV0FBVyxPQUFPLFFBQVEsV0FBVztBQUNuQyxZQUFNLE9BQU8sR0FBRztBQUFBLElBQ2xCO0FBQ0EsUUFBSSxRQUFRLEtBQUssS0FBSyxTQUFTLFNBQVMsS0FBSyxTQUFTLEtBQUs7QUFDekQsWUFBTSxJQUFJLFdBQVcsb0JBQW9CO0FBQUEsSUFDM0M7QUFDQSxRQUFJLE9BQU8sT0FBTztBQUNoQixhQUFPO0FBQUEsSUFDVDtBQUNBLFlBQVEsVUFBVTtBQUNsQixVQUFNLFFBQVEsU0FBUyxLQUFLLFNBQVMsUUFBUTtBQUM3QyxRQUFJLENBQUMsS0FBSztBQUNSLFlBQU07QUFBQSxJQUNSO0FBQ0EsUUFBSUQ7QUFDSixRQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLFdBQUtBLEtBQUksT0FBT0EsS0FBSSxLQUFLLEVBQUVBLElBQUc7QUFDNUIsYUFBS0EsTUFBSztBQUFBLE1BQ1o7QUFBQSxJQUNGLE9BQU87QUFDTCxZQUFNLFFBQVFDLFFBQU8sU0FBUyxHQUFHLElBQUksTUFBTUEsUUFBTyxLQUFLLEtBQUssUUFBUTtBQUNwRSxZQUFNLE1BQU0sTUFBTTtBQUNsQixVQUFJLFFBQVEsR0FBRztBQUNiLGNBQU0sSUFBSSxNQUFNO0FBQUEsVUFDZDtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLFdBQUtELEtBQUksR0FBR0EsS0FBSSxNQUFNLE9BQU8sRUFBRUEsSUFBRztBQUNoQyxhQUFLQSxLQUFJLFNBQVMsTUFBTUEsS0FBSTtBQUFBLE1BQzlCO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBU00sYUFBWSxLQUFLLFFBQVEsYUFBYTtBQUM3QyxtQkFBZSxRQUFRLFFBQVE7QUFDL0IsUUFBSSxJQUFJLFlBQVksVUFBVSxJQUFJLFNBQVMsaUJBQWlCLFFBQVE7QUFDbEUsa0JBQVksUUFBUSxJQUFJLFVBQVUsY0FBYyxFQUFFO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBRUEsV0FBUyxXQUFXLE9BQU9GLE1BQUssS0FBSyxLQUFLLFFBQVEsYUFBYTtBQUM3RCxRQUFJLFFBQVEsT0FBTyxRQUFRQSxNQUFLO0FBQzlCLFlBQU1HLEtBQUksT0FBT0gsU0FBUSxXQUFXLE1BQU07QUFDMUMsVUFBSTtBQUNKLFVBQUksY0FBYyxHQUFHO0FBQ25CLFlBQUlBLFNBQVEsS0FBS0EsU0FBUSxPQUFPLENBQUMsR0FBRztBQUNsQyxrQkFBUSxPQUFPRyxhQUFZQSxVQUFTLGNBQWMsS0FBSyxJQUFJQTtBQUFBLFFBQzdELE9BQU87QUFDTCxrQkFBUSxTQUFTQSxVQUFTLGNBQWMsS0FBSyxJQUFJLElBQUlBLG1CQUNsRCxjQUFjLEtBQUssSUFBSSxJQUN2QkE7QUFBQSxRQUNMO0FBQUEsTUFDRixPQUFPO0FBQ0wsZ0JBQVEsTUFBTUgsT0FBTUcsYUFBWSxNQUFNQTtBQUFBLE1BQ3hDO0FBQ0EsWUFBTSxJQUFJLE1BQU0saUJBQWlCLFNBQVMsT0FBTyxLQUFLO0FBQUEsSUFDeEQ7QUFDQSxJQUFBRCxhQUFZLEtBQUssUUFBUSxXQUFXO0FBQUEsRUFDdEM7QUFFQSxXQUFTLFlBQVksUUFBUSxPQUFPO0FBQ2xDLFlBQVEsU0FBUztBQUNqQixRQUFJO0FBQ0osVUFBTSxTQUFTLE9BQU87QUFDdEIsUUFBSSxnQkFBZ0I7QUFDcEIsVUFBTSxRQUFRLENBQUM7QUFDZixhQUFTTixLQUFJLEdBQUdBLEtBQUksUUFBUSxFQUFFQSxJQUFHO0FBQy9CLGtCQUFZLE9BQU8sV0FBV0EsRUFBQztBQUMvQixVQUFJLFlBQVksU0FBUyxZQUFZLE9BQU87QUFDMUMsWUFBSSxDQUFDLGVBQWU7QUFDbEIsY0FBSSxZQUFZLE9BQU87QUFDckIsaUJBQUssU0FBUyxLQUFLLElBQUk7QUFDckIsb0JBQU0sS0FBSyxLQUFLLEtBQUssR0FBRztBQUFBLFlBQzFCO0FBQ0E7QUFBQSxVQUNGLFdBQVdBLEtBQUksTUFBTSxRQUFRO0FBQzNCLGlCQUFLLFNBQVMsS0FBSyxJQUFJO0FBQ3JCLG9CQUFNLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQSxZQUMxQjtBQUNBO0FBQUEsVUFDRjtBQUNBLDBCQUFnQjtBQUNoQjtBQUFBLFFBQ0Y7QUFDQSxZQUFJLFlBQVksT0FBTztBQUNyQixlQUFLLFNBQVMsS0FBSyxJQUFJO0FBQ3JCLGtCQUFNLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQSxVQUMxQjtBQUNBLDBCQUFnQjtBQUNoQjtBQUFBLFFBQ0Y7QUFDQSxxQkFBYSxnQkFBZ0IsU0FBUyxLQUFLLFlBQVksU0FBUztBQUFBLE1BQ2xFLFdBQVcsZUFBZTtBQUN4QixhQUFLLFNBQVMsS0FBSyxJQUFJO0FBQ3JCLGdCQUFNLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQSxRQUMxQjtBQUFBLE1BQ0Y7QUFDQSxzQkFBZ0I7QUFDaEIsVUFBSSxZQUFZLEtBQUs7QUFDbkIsYUFBSyxTQUFTLEtBQUssR0FBRztBQUNwQjtBQUFBLFFBQ0Y7QUFDQSxjQUFNLEtBQUssU0FBUztBQUFBLE1BQ3RCLFdBQVcsWUFBWSxNQUFNO0FBQzNCLGFBQUssU0FBUyxLQUFLLEdBQUc7QUFDcEI7QUFBQSxRQUNGO0FBQ0EsY0FBTSxLQUFLLGFBQWEsSUFBSSxLQUFLLFlBQVksS0FBSyxHQUFHO0FBQUEsTUFDdkQsV0FBVyxZQUFZLE9BQU87QUFDNUIsYUFBSyxTQUFTLEtBQUssR0FBRztBQUNwQjtBQUFBLFFBQ0Y7QUFDQSxjQUFNO0FBQUEsVUFDSixhQUFhLEtBQUs7QUFBQSxVQUNsQixhQUFhLElBQUksS0FBSztBQUFBLFVBQ3RCLFlBQVksS0FBSztBQUFBLFFBQ25CO0FBQUEsTUFDRixXQUFXLFlBQVksU0FBUztBQUM5QixhQUFLLFNBQVMsS0FBSyxHQUFHO0FBQ3BCO0FBQUEsUUFDRjtBQUNBLGNBQU07QUFBQSxVQUNKLGFBQWEsS0FBSztBQUFBLFVBQ2xCLGFBQWEsS0FBSyxLQUFLO0FBQUEsVUFDdkIsYUFBYSxJQUFJLEtBQUs7QUFBQSxVQUN0QixZQUFZLEtBQUs7QUFBQSxRQUNuQjtBQUFBLE1BQ0YsT0FBTztBQUNMLGNBQU0sSUFBSSxNQUFNLG9CQUFvQjtBQUFBLE1BQ3RDO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxXQUFXLEtBQUssS0FBSyxRQUFRRSxhQUFZO0FBQ2hELFFBQUlGO0FBQ0osVUFBTSxTQUFTRSxnQkFBZSxTQUFZLElBQUksU0FBU0E7QUFDdkQsU0FBS0YsS0FBSSxHQUFHQSxLQUFJLFFBQVEsRUFBRUEsSUFBRztBQUMzQixVQUFJQSxLQUFJLFVBQVUsSUFBSSxVQUFVQSxNQUFLLElBQUksUUFBUTtBQUMvQztBQUFBLE1BQ0Y7QUFDQSxVQUFJQSxLQUFJLFVBQVUsSUFBSUE7QUFBQSxJQUN4QjtBQUNBLFdBQU9BO0FBQUEsRUFDVDtBQUVBLFdBQVMsV0FBVyxLQUFLLE1BQU07QUFDN0IsV0FBTyxlQUFlLFFBQ3BCLE9BQU8sUUFBUSxJQUFJLGVBQWUsUUFDaEMsSUFBSSxZQUFZLFFBQVEsUUFBUSxJQUFJLFlBQVksU0FBUyxLQUFLO0FBQUEsRUFDcEU7QUFFQSxNQUFNLHNCQUFzQixXQUFZO0FBQ3RDLFVBQU0sV0FBVztBQUNqQixVQUFNLFFBQVEsSUFBSSxNQUFNLEdBQUc7QUFDM0IsYUFBU0EsS0FBSSxHQUFHQSxLQUFJLElBQUksRUFBRUEsSUFBRztBQUMzQixZQUFNLE1BQU1BLEtBQUk7QUFDaEIsZUFBU1EsTUFBSSxHQUFHQSxNQUFJLElBQUksRUFBRUEsS0FBRztBQUMzQixjQUFNLE1BQU1BLE9BQUssU0FBU1IsTUFBSyxTQUFTUTtBQUFBLE1BQzFDO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNULEVBQUU7QUFFRixXQUFTLG1CQUFtQkMsS0FBSTtBQUM5QixXQUFPLE9BQU8sV0FBVyxjQUFjLHlCQUF5QkE7QUFBQSxFQUNsRTtBQUVBLFdBQVMseUJBQXlCO0FBQ2hDLFVBQU0sSUFBSSxNQUFNLHNCQUFzQjtBQUFBLEVBQ3hDO0FBRU8sTUFBTUMsUUFBTyxXQUFXO0FBQ3hCLE1BQU1DLFFBQU8sV0FBVztBQUN4QixNQUFNLE9BQU8sV0FBVzs7O0FDejNEL0IsTUFBTSxzQkFBc0IsT0FBTztBQW1HNUIsV0FBUyxtQkFBbUIsTUFBa0M7QUFDbkUsUUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixZQUFNLElBQUksTUFBTSxxQkFBcUIsT0FBTyxVQUFVLElBQUk7QUFBQSxJQUM1RDtBQUNBLFFBQUksUUFBUSxLQUFLLENBQUMsb0JBQW9CLElBQUksR0FBRztBQUMzQyxZQUFNLElBQUksTUFBTSxpQkFBaUIsT0FBTyxzQkFBc0IsSUFBSTtBQUFBLElBQ3BFO0FBQ0EsV0FBTyxTQUFTLElBQUksSUFBSSxJQUFJO0FBQUEsRUFDOUI7OztBQzlHQSxNQUFNO0FBQUEsSUFDSixPQUFPLEVBQUUsU0FBUyxPQUFPO0FBQUEsRUFDM0IsSUFBSUM7QUFLSixNQUFNLGVBQWUsT0FBTyxjQUFjO0FBSzFDLE1BQU1DLGVBQWM7QUFNcEIsTUFBTSxTQUFTO0FBQUEsSUFDYjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBRUE7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUtPLE1BQU0sYUFBTixjQUF5QixNQUFNO0FBQUEsSUFHcEMsY0FBYztBQUNaLFlBQU0sMkJBQTJCO0FBQ2pDLFdBQUssT0FBTztBQUNaLFdBQUssT0FBTztBQUFBLElBQ2Q7QUFBQSxFQUNGO0FBNEJBLFdBQVMsc0JBQXNCLEtBQWE7QUFDMUMsUUFBSSxNQUFNO0FBQ1YsUUFBSUMsS0FBSSxJQUFJO0FBQ1osVUFBTSxRQUFRLElBQUksT0FBTyxNQUFNLElBQUk7QUFDbkMsV0FBT0EsTUFBSyxRQUFRLEdBQUdBLE1BQUssR0FBRztBQUM3QixZQUFNLElBQUksSUFBSSxNQUFNQSxLQUFJLEdBQUdBLEVBQUMsSUFBSTtBQUFBLElBQ2xDO0FBQ0EsV0FBTyxHQUFHLElBQUksTUFBTSxHQUFHQSxFQUFDLElBQUk7QUFBQSxFQUM5QjtBQUVBLE1BQU0sMEJBQTBCO0FBQUEsSUFDOUIsU0FBU0MseUJBQXdCLEtBQUs7QUFFcEMsWUFBTSxrQkFBa0IsR0FBRztBQUUzQixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFvQk8sTUFBTSwwQkFBMEI7QUFBQSxJQUNyQyxTQUFTQyx5QkFDUCxLQUNBLFNBQ0EsU0FDQSxNQUNBO0FBQ0EsWUFBTSxFQUFFLEdBQUcsTUFBTSxHQUFHLE1BQU0sSUFBSSxZQUFZLEdBQUcsS0FBSztBQUNsRCxZQUFNLFVBQVUsR0FBRyxXQUFXLFNBQVM7QUFDdkMsVUFBSSxVQUFVO0FBRWQsVUFBSSxRQUFRLE9BQU8sR0FBRztBQUNwQixrQkFBVSxJQUFJLFdBQVc7QUFBQSxNQUMzQixXQUFXLFNBQVM7QUFDbEIsa0JBQVUsSUFBSTtBQUFBLE1BQ2hCO0FBR0EsWUFBTSxLQUFVLElBQUksTUFBTSxHQUFHLFVBQVUsU0FBUztBQUNoRCxTQUFHLE9BQU87QUFDVixTQUFHLFFBQVE7QUFDWCxTQUFHLFVBQVU7QUFDYixTQUFHLFVBQVU7QUFFYixVQUFJLE1BQU07QUFDUixXQUFHLE9BQU87QUFBQSxNQUNaO0FBRUEsYUFBTyx3QkFBd0IsRUFBRTtBQUFBLElBQ25DO0FBQUEsRUFDRjtBQVVPLE1BQU0saUJBQWlCLGdCQUFnQixTQUFTQyxnQkFDckQsS0FDQSxTQUNBLFVBQ2dCO0FBQ2hCLFVBQU0sT0FBTyxtQkFBbUIsR0FBRztBQUNuQyxVQUFNLFVBQVUsV0FDWixHQUFHLFdBQVcsUUFBUSxhQUN0QixHQUFHLFdBQVc7QUFHbEIsVUFBTSxLQUFVLElBQUksTUFBTSxPQUFPO0FBQ2pDLE9BQUcsUUFBUTtBQUNYLE9BQUcsT0FBTztBQUNWLE9BQUcsVUFBVTtBQUViLFdBQU8sd0JBQXdCLEVBQUU7QUFBQSxFQUNuQyxDQUFDO0FBRUQsV0FBUyxZQUFZLE1BQWM7QUFDakMsV0FBTyxTQUFTLElBQUksSUFBSTtBQUFBLEVBQzFCO0FBRUEsTUFBTSxrQkFBa0IsQ0FBQyxXQUFXLGVBQWU7QUFXNUMsTUFBTSxjQUFjLGdCQUFnQixTQUFTQyxhQUFZLEtBQUs7QUFDbkUsVUFBTSxFQUFFLEdBQUcsTUFBTSxHQUFHLE1BQU0sSUFBSSxZQUFZLElBQUksS0FBSyxLQUFLO0FBRXhELFFBQUksVUFBVSxHQUFHLFNBQVMsSUFBSSxXQUFXLFVBQVUsSUFBSTtBQUV2RCxRQUFJQztBQUNKLFFBQUk7QUFFSixRQUFJLElBQUksTUFBTTtBQUNaLE1BQUFBLFFBQU8sSUFBSSxLQUFLLFNBQVM7QUFDekIsaUJBQVcsS0FBS0E7QUFBQSxJQUNsQjtBQUNBLFFBQUksSUFBSSxNQUFNO0FBQ1osYUFBTyxJQUFJLEtBQUssU0FBUztBQUN6QixpQkFBVyxRQUFRO0FBQUEsSUFDckI7QUFHQSxVQUFNLE1BQVcsSUFBSSxNQUFNLE9BQU87QUFFbEMsZUFBVyxRQUFRLE9BQU8sS0FBSyxHQUFHLEdBQUc7QUFDbkMsVUFBSSxTQUFTLGFBQWEsU0FBUyxVQUFVLFNBQVMsUUFBUTtBQUM1RDtBQUFBLE1BQ0Y7QUFFQSxVQUFJLFFBQVEsSUFBSTtBQUFBLElBQ2xCO0FBRUEsUUFBSSxPQUFPO0FBRVgsUUFBSUEsT0FBTTtBQUNSLFVBQUksT0FBT0E7QUFBQSxJQUNiO0FBRUEsUUFBSSxNQUFNO0FBQ1IsVUFBSSxPQUFPO0FBQUEsSUFDYjtBQUVBLFdBQU8sd0JBQXdCLEdBQUc7QUFBQSxFQUNwQyxDQUFDO0FBWU0sTUFBTSx3QkFBd0I7QUFBQSxJQUNuQyxTQUFTQyx1QkFDUCxLQUNBLFNBQ0EsU0FDQSxNQUNBLFlBQ0E7QUFDQSxZQUFNLE9BQU8sbUJBQW1CLEdBQUc7QUFDbkMsVUFBSSxVQUFVO0FBRWQsVUFBSSxRQUFRLE9BQU8sR0FBRztBQUNwQixrQkFBVSxJQUFJLFdBQVc7QUFBQSxNQUMzQixXQUFXLFNBQVM7QUFDbEIsa0JBQVUsSUFBSTtBQUFBLE1BQ2hCO0FBRUEsVUFBSSxZQUFZO0FBQ2QsbUJBQVcsYUFBYTtBQUFBLE1BQzFCO0FBR0EsWUFBTSxLQUFVLElBQUksTUFBTSxHQUFHLFdBQVcsT0FBTyxTQUFTO0FBQ3hELFNBQUcsUUFBUTtBQUNYLFNBQUcsT0FBTztBQUNWLFNBQUcsVUFBVTtBQUNiLFNBQUcsVUFBVTtBQUViLFVBQUksTUFBTTtBQUNSLFdBQUcsT0FBTztBQUFBLE1BQ1o7QUFFQSxhQUFPLHdCQUF3QixFQUFFO0FBQUEsSUFDbkM7QUFBQSxFQUNGO0FBT08sTUFBTSxlQUFlLGdCQUFnQixTQUFVLE1BQU0sU0FBUyxVQUFVO0FBQzdFLFFBQUk7QUFJSixRQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLGNBQVE7QUFHUixVQUNFLFNBQVMsUUFBUSxJQUFJLFlBQVksS0FDakMsU0FBUyxRQUFRLElBQUksWUFBWSxHQUNqQztBQUNBLGVBQU87QUFBQSxNQUNULE9BQU87QUFDTCxlQUFPLG1CQUFtQixJQUFJO0FBQUEsTUFDaEM7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFVLEdBQUcsV0FBVyxPQUFPLFdBQVcsSUFBSSxhQUFhO0FBR2pFLFVBQU0sS0FBVSxJQUFJLE1BQU0sT0FBTztBQUNqQyxPQUFHLFFBQVE7QUFDWCxPQUFHLE9BQU87QUFDVixPQUFHLFVBQVU7QUFFYixRQUFJLFVBQVU7QUFDWixTQUFHLFdBQVc7QUFBQSxJQUNoQjtBQUVBLFdBQU8sd0JBQXdCLEVBQUU7QUFBQSxFQUNuQyxDQUFDO0FBTU0sTUFBTSx1QkFBTixjQUFtQyxNQUFNO0FBQUEsSUFHOUMsWUFBWSxNQUFjLE1BQWMsU0FBaUI7QUFDdkQsWUFBTSxPQUFPO0FBQ2IsV0FBSyxPQUFPO0FBQ1osV0FBSyxPQUFPO0FBR1osV0FBSyxRQUFRLEtBQUssU0FBUyxHQUFHLFNBQVMsS0FBSyxRQUFRLEtBQUssTUFBTSxNQUFNLEVBQUU7QUFBQSxJQUN6RTtBQUFBLElBRVMsV0FBVztBQUNsQixhQUFPLEdBQUcsS0FBSyxTQUFTLEtBQUssVUFBVSxLQUFLO0FBQUEsSUFDOUM7QUFBQSxFQUNGO0FBRU8sTUFBTSxZQUFOLGNBQXdCLHFCQUFxQjtBQUFBLElBQ2xELFlBQVksTUFBYyxTQUFpQjtBQUN6QyxZQUFNLE1BQU0sVUFBVSxNQUFNLE1BQU0sT0FBTztBQUFBLElBQzNDO0FBQUEsRUFDRjtBQWFPLE1BQU0saUJBQU4sY0FBNkIscUJBQXFCO0FBQUEsSUFDdkQsWUFBWSxNQUFjLFNBQWlCO0FBQ3pDLFlBQU0sV0FBVyxVQUFVLE1BQU0sTUFBTSxPQUFPO0FBQzlDLGFBQU8sZUFBZSxNQUFNLFdBQVcsU0FBUztBQUNoRCxXQUFLLFdBQVcsV0FBWTtBQUMxQixlQUFPLEdBQUcsS0FBSyxTQUFTLEtBQUssVUFBVSxLQUFLO0FBQUEsTUFDOUM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVPLE1BQU0sZ0JBQU4sY0FBNEIscUJBQTBDO0FBQUEsSUFDM0UsWUFBWSxNQUFjLFNBQWlCO0FBQ3pDLFlBQU0sVUFBVSxVQUFVLE1BQU0sTUFBTSxPQUFPO0FBQzdDLGFBQU8sZUFBZSxNQUFNLFVBQVUsU0FBUztBQUMvQyxXQUFLLFdBQVcsV0FBWTtBQUMxQixlQUFPLEdBQUcsS0FBSyxTQUFTLEtBQUssVUFBVSxLQUFLO0FBQUEsTUFDOUM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQTRCQSxNQUFNLGtCQUFOLGNBQThCLHFCQUFxQjtBQUFBLElBQ2pELFlBQVksS0FBYSxTQUE2QixXQUFtQjtBQUN2RSxVQUFJLFVBQVUsR0FBRyxjQUFjLFFBQVEsb0JBQ2xDLFFBQVEsU0FBUyxRQUFRO0FBRTlCLFVBQUksUUFBUSxTQUFTLFFBQVc7QUFDOUIsbUJBQVcsSUFBSSxRQUFRO0FBQUEsTUFDekI7QUFDQSxVQUFJLFFBQVEsU0FBUyxRQUFXO0FBQzlCLG1CQUFXLE9BQU8sUUFBUTtBQUFBLE1BQzVCO0FBRUEsWUFBTSxlQUFlLEtBQUssT0FBTztBQUVqQyw4QkFBd0IsSUFBSTtBQUU1QixhQUFPLGlCQUFpQixNQUFNO0FBQUEsUUFDNUIsQ0FBQyxlQUFlO0FBQUEsVUFDZCxPQUFPO0FBQUEsVUFDUCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsVUFDVixjQUFjO0FBQUEsUUFDaEI7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNKLE9BQU87QUFBQSxVQUNQLFlBQVk7QUFBQSxVQUNaLGNBQWM7QUFBQSxVQUNkLFVBQVU7QUFBQSxRQUNaO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDTCxNQUFNO0FBQ0osbUJBQU8sUUFBUTtBQUFBLFVBQ2pCO0FBQUEsVUFDQSxLQUFLLENBQUMsVUFBVTtBQUNkLG9CQUFRLFFBQVE7QUFBQSxVQUNsQjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBQ1osY0FBYztBQUFBLFFBQ2hCO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDUCxNQUFNO0FBQ0osbUJBQU8sUUFBUTtBQUFBLFVBQ2pCO0FBQUEsVUFDQSxLQUFLLENBQUMsVUFBVTtBQUNkLG9CQUFRLFVBQVU7QUFBQSxVQUNwQjtBQUFBLFVBQ0EsWUFBWTtBQUFBLFVBQ1osY0FBYztBQUFBLFFBQ2hCO0FBQUEsTUFDRixDQUFDO0FBRUQsVUFBSSxRQUFRLFNBQVMsUUFBVztBQUM5QixlQUFPLGVBQWUsTUFBTSxRQUFRO0FBQUEsVUFDbEMsTUFBTTtBQUNKLG1CQUFPLFFBQVE7QUFBQSxVQUNqQjtBQUFBLFVBQ0EsS0FBSyxDQUFDLFVBQVU7QUFDZCxvQkFBUSxPQUFPO0FBQUEsVUFDakI7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGNBQWM7QUFBQSxRQUNoQixDQUFDO0FBQUEsTUFDSDtBQUVBLFVBQUksUUFBUSxTQUFTLFFBQVc7QUFDOUIsZUFBTyxlQUFlLE1BQU0sUUFBUTtBQUFBLFVBQ2xDLE1BQU07QUFDSixtQkFBTyxRQUFRO0FBQUEsVUFDakI7QUFBQSxVQUNBLEtBQUssQ0FBQyxVQUFVO0FBQ2Qsb0JBQVEsT0FBTztBQUFBLFVBQ2pCO0FBQUEsVUFDQSxZQUFZO0FBQUEsVUFDWixjQUFjO0FBQUEsUUFDaEIsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsSUFFUyxXQUFXO0FBQ2xCLGFBQU8sR0FBRyxLQUFLLFNBQVMsS0FBSyxVQUFVLEtBQUs7QUFBQSxJQUM5QztBQUFBLEVBQ0Y7QUFFQSxXQUFTLHdCQUF3QixLQUFhLFVBQWtCO0FBQzlELFdBQU8sTUFBTSxrQkFBa0IsZ0JBQWdCO0FBQUEsTUFDN0MsWUFBWSxLQUF5QjtBQUNuQyxjQUFNLEtBQUssS0FBSyxRQUFRO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVPLE1BQU0sZ0JBQWdCO0FBQUEsSUFDM0I7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUVBLFdBQVMscUJBQ1AsTUFDQSxVQUNRO0FBRVIsZUFBVyxNQUFNLFFBQVEsUUFBUSxJQUFJLFdBQVcsQ0FBQyxRQUFRO0FBQ3pELFFBQUksTUFBTTtBQUNWLFFBQUksS0FBSyxTQUFTLFdBQVcsR0FBRztBQUU5QixhQUFPLEdBQUc7QUFBQSxJQUNaLE9BQU87QUFDTCxZQUFNLE9BQU8sS0FBSyxTQUFTLEdBQUcsSUFBSSxhQUFhO0FBQy9DLGFBQU8sSUFBSSxTQUFTO0FBQUEsSUFDdEI7QUFDQSxXQUFPO0FBRVAsVUFBTSxRQUFRLENBQUM7QUFDZixVQUFNLFlBQVksQ0FBQztBQUNuQixVQUFNLFFBQVEsQ0FBQztBQUNmLGVBQVcsU0FBUyxVQUFVO0FBQzVCLFVBQUksT0FBTyxTQUFTLEtBQUssR0FBRztBQUMxQixjQUFNLEtBQUssTUFBTSxrQkFBa0IsQ0FBQztBQUFBLE1BQ3RDLFdBQVdDLGFBQVksS0FBSyxLQUFLLEdBQUc7QUFDbEMsa0JBQVUsS0FBSyxLQUFLO0FBQUEsTUFDdEIsT0FBTztBQUNMLGNBQU0sS0FBSyxLQUFLO0FBQUEsTUFDbEI7QUFBQSxJQUNGO0FBSUEsUUFBSSxVQUFVLFNBQVMsR0FBRztBQUN4QixZQUFNLE1BQU0sTUFBTSxRQUFRLFFBQVE7QUFDbEMsVUFBSSxRQUFRLElBQUk7QUFDZCxjQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLGtCQUFVLEtBQUssUUFBUTtBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUVBLFFBQUksTUFBTSxTQUFTLEdBQUc7QUFDcEIsVUFBSSxNQUFNLFNBQVMsR0FBRztBQUNwQixjQUFNLE9BQU8sTUFBTSxJQUFJO0FBQ3ZCLGVBQU8sZUFBZSxNQUFNLEtBQUssSUFBSSxTQUFTO0FBQUEsTUFDaEQsV0FBVyxNQUFNLFdBQVcsR0FBRztBQUM3QixlQUFPLGVBQWUsTUFBTSxTQUFTLE1BQU07QUFBQSxNQUM3QyxPQUFPO0FBQ0wsZUFBTyxXQUFXLE1BQU07QUFBQSxNQUMxQjtBQUNBLFVBQUksVUFBVSxTQUFTLEtBQUssTUFBTSxTQUFTLEdBQUc7QUFDNUMsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsUUFBSSxVQUFVLFNBQVMsR0FBRztBQUN4QixVQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3hCLGNBQU0sT0FBTyxVQUFVLElBQUk7QUFDM0IsZUFBTyxrQkFBa0IsVUFBVSxLQUFLLElBQUksU0FBUztBQUFBLE1BQ3ZELE9BQU87QUFDTCxlQUFPLGtCQUFrQixVQUFVO0FBQ25DLFlBQUksVUFBVSxXQUFXLEdBQUc7QUFDMUIsaUJBQU8sT0FBTyxVQUFVO0FBQUEsUUFDMUI7QUFBQSxNQUNGO0FBQ0EsVUFBSSxNQUFNLFNBQVMsR0FBRztBQUNwQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxRQUFJLE1BQU0sU0FBUyxHQUFHO0FBQ3BCLFVBQUksTUFBTSxTQUFTLEdBQUc7QUFDcEIsY0FBTSxPQUFPLE1BQU0sSUFBSTtBQUN2QixlQUFPLFVBQVUsTUFBTSxLQUFLLElBQUksU0FBUztBQUFBLE1BQzNDLFdBQVcsTUFBTSxXQUFXLEdBQUc7QUFDN0IsZUFBTyxVQUFVLE1BQU0sU0FBUyxNQUFNO0FBQUEsTUFDeEMsT0FBTztBQUNMLFlBQUksTUFBTSxHQUFHLFlBQVksTUFBTSxNQUFNLElBQUk7QUFDdkMsaUJBQU87QUFBQSxRQUNUO0FBQ0EsZUFBTyxHQUFHLE1BQU07QUFBQSxNQUNsQjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVPLE1BQU0sNkJBQU4sY0FBeUMsZUFBZTtBQUFBLElBQzdELFlBQVksTUFBYyxVQUE2QixRQUFpQjtBQUN0RSxZQUFNLE1BQU0scUJBQXFCLE1BQU0sUUFBUTtBQUUvQyxZQUFNLHdCQUF3QixHQUFHLE9BQU8scUJBQXFCLE1BQU0sR0FBRztBQUFBLElBQ3hFO0FBQUEsRUFDRjtBQUVPLE1BQU0sdUJBQU4sY0FBbUMsY0FBYztBQUFBLElBQ3RELFlBQVksTUFBYyxVQUE2QixRQUFpQjtBQUN0RSxZQUFNLE1BQU0scUJBQXFCLE1BQU0sUUFBUTtBQUUvQyxZQUFNLHdCQUF3QixHQUFHLE9BQU8scUJBQXFCLE1BQU0sR0FBRztBQUFBLElBQ3hFO0FBQUEsRUFHRjtBQURFLEVBUFcscUJBT0osYUFBYTtBQUdmLE1BQU0sOEJBQU4sY0FBMEMsZUFBZTtBQUFBLElBQzlELFlBQVksTUFBYyxPQUFnQixTQUFpQixjQUFjO0FBQ3ZFLFlBQU0sT0FBTyxLQUFLLFNBQVMsR0FBRyxJQUFJLGFBQWE7QUFDL0MsWUFBTSxZQUFZLFFBQVEsS0FBSztBQUUvQjtBQUFBLFFBQ0U7QUFBQSxRQUNBLE9BQU8sU0FBUyxTQUFTLG9CQUFvQjtBQUFBLE1BQy9DO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFTyxNQUFNLHdCQUFOLGNBQW9DLGNBQWM7QUFBQSxJQUN2RCxZQUFZLE1BQWMsT0FBZ0IsU0FBaUIsY0FBYztBQUN2RSxZQUFNLE9BQU8sS0FBSyxTQUFTLEdBQUcsSUFBSSxhQUFhO0FBQy9DLFlBQU0sWUFBWSxRQUFRLEtBQUs7QUFFL0I7QUFBQSxRQUNFO0FBQUEsUUFDQSxPQUFPLFNBQVMsU0FBUyxvQkFBb0I7QUFBQSxNQUMvQztBQUFBLElBQ0Y7QUFBQSxFQUdGO0FBREUsRUFYVyxzQkFXSixhQUFhO0FBS3RCLFdBQVMscUJBQXFCLE9BQVk7QUFDeEMsUUFBSSxTQUFTLE1BQU07QUFDakIsYUFBTyxhQUFhO0FBQUEsSUFDdEI7QUFDQSxRQUFJLE9BQU8sVUFBVSxjQUFjLE1BQU0sTUFBTTtBQUM3QyxhQUFPLHNCQUFzQixNQUFNO0FBQUEsSUFDckM7QUFDQSxRQUFJLE9BQU8sVUFBVSxVQUFVO0FBQzdCLFVBQUksTUFBTSxlQUFlLE1BQU0sWUFBWSxNQUFNO0FBQy9DLGVBQU8sNEJBQTRCLE1BQU0sWUFBWTtBQUFBLE1BQ3ZEO0FBQ0EsYUFBTyxhQUFhLFFBQVEsT0FBTyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQUEsSUFDbEQ7QUFDQSxRQUFJLFlBQVksUUFBUSxPQUFPLEVBQUUsUUFBUSxNQUFNLENBQUM7QUFDaEQsUUFBSSxVQUFVLFNBQVMsSUFBSTtBQUN6QixrQkFBWSxHQUFHLFVBQVUsTUFBTSxHQUFHLEVBQUU7QUFBQSxJQUN0QztBQUNBLFdBQU8sa0JBQWtCLE9BQU8sVUFBVTtBQUFBLEVBQzVDO0FBRU8sTUFBTSxtQkFBTixjQUErQixXQUFXO0FBQUEsSUFHL0MsWUFDRUMsTUFDQSxPQUNBLE9BQ0Esd0JBQXdCLE9BQ3hCO0FBQ0EsTUFBQUMsUUFBTyxPQUFPLDBCQUEwQjtBQUN4QyxVQUFJLE1BQU0sd0JBQ05ELE9BQ0EsaUJBQWlCQTtBQUNyQixVQUFJO0FBQ0osVUFBSSxPQUFPLFVBQVUsS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFlLElBQUksS0FBSyxJQUFJO0FBQ2xFLG1CQUFXLHNCQUFzQixPQUFPLEtBQUssQ0FBQztBQUFBLE1BQ2hELFdBQVcsT0FBTyxVQUFVLFVBQVU7QUFDcEMsbUJBQVcsT0FBTyxLQUFLO0FBQ3ZCLFlBQUksUUFBUSxNQUFNLE9BQU8sUUFBUSxFQUFFLE1BQU0sTUFBTTtBQUM3QyxxQkFBVyxzQkFBc0IsUUFBUTtBQUFBLFFBQzNDO0FBQ0Esb0JBQVk7QUFBQSxNQUNkLE9BQU87QUFDTCxtQkFBVyxRQUFRLEtBQUs7QUFBQSxNQUMxQjtBQUNBLGFBQU8sZUFBZSxtQkFBbUI7QUFFekMsWUFBTSxHQUFHO0FBMUJYLGtCQUFPO0FBNEJMLFlBQU0sRUFBRSxLQUFLLElBQUk7QUFFakIsV0FBSyxPQUFPLEdBQUcsU0FBUyxLQUFLO0FBRTdCLFdBQUs7QUFFTCxXQUFLLE9BQU87QUFBQSxJQUNkO0FBQUEsRUFDRjtBQXNDTyxNQUFNLDJCQUFOLGNBQXVDLGVBQWU7QUFBQSxJQUMzRCxZQUFZLE1BQWU7QUFDekI7QUFBQSxRQUNFO0FBQUEsUUFDQSxPQUNJLElBQUksc0NBQ0o7QUFBQSxNQUNOO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUEycUJPLE1BQU0sdUJBQU4sY0FBbUMsY0FBYztBQUFBLElBQ3RELFlBQVksUUFBaUI7QUFDM0I7QUFBQSxRQUNFO0FBQUEsUUFDQSx5Q0FBeUMsUUFBUSxNQUFNO0FBQUEsTUFDekQ7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNPLE1BQU0seUJBQU4sY0FBcUMsY0FBYztBQUFBLElBQ3hELGNBQWM7QUFDWjtBQUFBLFFBQ0U7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBbUdPLE1BQU0seUJBQU4sY0FBcUMsVUFBVTtBQUFBLElBQ3BELGNBQWM7QUFDWixZQUFNLDBCQUEwQixnQkFBZ0I7QUFBQSxJQUNsRDtBQUFBLEVBQ0Y7QUFxRE8sTUFBTSw2QkFBTixjQUF5QyxVQUFVO0FBQUEsSUFDeEQsWUFBWUUsS0FBVztBQUNyQixZQUFNLDhCQUE4QixPQUFPQSwrQkFBNkI7QUFBQSxJQUMxRTtBQUFBLEVBQ0Y7QUFDTyxNQUFNLG1CQUFOLGNBQStCLGNBQWM7QUFBQSxJQUNsRCxlQUFlLE1BQTZCO0FBQzFDLFVBQUksTUFBTTtBQUVWLFlBQU0sTUFBTSxLQUFLO0FBRWpCLFlBQU1DLFFBQU8sQ0FBQ0MsT0FBZSxJQUFJQTtBQUVqQyxhQUFPLEtBQUs7QUFBQSxRQUFJLENBQUNBLE9BQ2YsTUFBTSxRQUFRQSxFQUFDLElBQUlBLEdBQUUsSUFBSUQsS0FBSSxFQUFFLEtBQUssTUFBTSxJQUFJQSxNQUFLQyxFQUFDO0FBQUEsTUFDdEQ7QUFFQSxjQUFRO0FBQUEsYUFDRDtBQUNILGlCQUFPLEdBQUcsS0FBSztBQUNmO0FBQUEsYUFDRztBQUNILGlCQUFPLEdBQUcsS0FBSyxVQUFVLEtBQUs7QUFDOUI7QUFBQTtBQUVBLGlCQUFPLEtBQUssTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSTtBQUN2QyxpQkFBTyxTQUFTLEtBQUssTUFBTTtBQUMzQjtBQUFBO0FBR0osWUFBTSxvQkFBb0IsR0FBRyx1QkFBdUI7QUFBQSxJQUN0RDtBQUFBLEVBQ0Y7QUFNTyxNQUFNLHdCQUFOLGNBQW9DLFVBQVU7QUFBQSxJQUNuRCxjQUFjO0FBQ1osWUFBTSx5QkFBeUIsZ0NBQWdDO0FBQUEsSUFDakU7QUFBQSxFQUNGO0FBK0tPLE1BQU0sc0JBQU4sY0FBa0MsZUFBZTtBQUFBLElBQ3RELFlBQVksTUFBYyxNQUFlLFlBQVksTUFBTTtBQUN6RCxNQUFBQztBQUFBLFFBQ0UsT0FBTyxjQUFjO0FBQUEsUUFDckI7QUFBQSxNQUNGO0FBRUEsWUFBTSxXQUFXLFlBQVksT0FBTztBQUVwQztBQUFBLFFBQ0U7QUFBQSxRQUNBLEdBQUcsa0JBQWtCLG9DQUFvQztBQUFBLE1BQzNEO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUEwQ08sTUFBTSw4QkFBTixjQUEwQyxVQUFVO0FBQUEsSUFDekQsWUFBWUMsS0FBVztBQUNyQjtBQUFBLFFBQ0U7QUFBQSxRQUNBLGVBQWVBO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNPLE1BQU0seUJBQU4sY0FBcUMsVUFBVTtBQUFBLElBQ3BELGNBQWM7QUFDWixZQUFNLDBCQUEwQiwyQkFBMkI7QUFBQSxJQUM3RDtBQUFBLEVBQ0Y7QUFDTyxNQUFNLHVCQUFOLGNBQW1DLFVBQVU7QUFBQSxJQUNsRCxZQUFZQSxLQUFXO0FBQ3JCO0FBQUEsUUFDRTtBQUFBLFFBQ0EsZUFBZUE7QUFBQSxNQUNqQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ08sTUFBTSx5QkFBTixjQUFxQyxjQUFjO0FBQUEsSUFDeEQsY0FBYztBQUNaLFlBQU0sMEJBQTBCLHFDQUFxQztBQUFBLElBQ3ZFO0FBQUEsRUFDRjtBQUNPLE1BQU0sNkJBQU4sY0FBeUMsVUFBVTtBQUFBLElBQ3hELGNBQWM7QUFDWixZQUFNLDhCQUE4QixpQkFBaUI7QUFBQSxJQUN2RDtBQUFBLEVBQ0Y7QUFDTyxNQUFNLDRCQUFOLGNBQXdDLFVBQVU7QUFBQSxJQUN2RCxjQUFjO0FBQ1osWUFBTSw2QkFBNkIseUJBQXlCO0FBQUEsSUFDOUQ7QUFBQSxFQUNGO0FBQ08sTUFBTSxxQ0FBTixjQUFpRCxVQUFVO0FBQUEsSUFDaEUsY0FBYztBQUNaO0FBQUEsUUFDRTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFTTyxNQUFNLDZCQUFOLGNBQXlDLFVBQVU7QUFBQSxJQUN4RCxjQUFjO0FBQ1osWUFBTSw4QkFBOEIsaUJBQWlCO0FBQUEsSUFDdkQ7QUFBQSxFQUNGO0FBOEhPLE1BQU0sc0JBQU4sY0FBa0MsVUFBVTtBQUFBLElBQ2pELFlBQVlDLEtBQVc7QUFDckIsWUFBTSx1QkFBdUIscUJBQXFCQSxNQUFJO0FBQUEsSUFDeEQ7QUFBQSxFQUNGO0FBV08sTUFBTSx1QkFBTixjQUFtQyxjQUFjO0FBQUEsSUFDdEQsWUFBWUMsS0FBVztBQUNyQixZQUFNLHdCQUF3QixxQkFBcUJBLEtBQUc7QUFBQSxJQUN4RDtBQUFBLEVBQ0Y7QUFjTyxNQUFNLHFCQUFOLGNBQWlDLGNBQWM7QUFBQSxJQUNwRCxZQUFZQyxLQUFXO0FBQ3JCLFlBQU0sc0JBQXNCLG1CQUFtQkEsS0FBRztBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQXlOQSxXQUFTLHdCQUF3QixPQUFZO0FBQzNDLFFBQUksU0FBUyxNQUFNLGVBQWUsTUFBTSxZQUFZLE1BQU07QUFDeEQsYUFBTyxlQUFlLE1BQU0sWUFBWTtBQUFBLElBQzFDLE9BQU87QUFDTCxhQUFPLFFBQVEsT0FBTztBQUFBLElBQ3hCO0FBQUEsRUFDRjtBQWVPLE1BQU0sMkJBQU4sY0FBdUMsY0FBYztBQUFBLElBQzFELFlBQVksT0FBZSxNQUFjLE9BQWdCO0FBQ3ZEO0FBQUEsUUFDRTtBQUFBLFFBQ0EsWUFBWSxrQ0FBa0MsMEJBQzVDO0FBQUEsVUFDRTtBQUFBLFFBQ0Y7QUFBQSxNQUVKO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFpTE8sV0FBUyxtQkFDZCxZQUNBLFlBQ0E7QUFDQSxRQUFJLGNBQWMsY0FBYyxlQUFlLFlBQVk7QUFDekQsVUFBSSxNQUFNLFFBQVEsV0FBVyxNQUFNLEdBQUc7QUFFcEMsbUJBQVcsT0FBTyxLQUFLLFVBQVU7QUFDakMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLE1BQU0sSUFBSTtBQUFBLFFBQ2Q7QUFBQSxVQUNFO0FBQUEsVUFDQTtBQUFBLFFBQ0Y7QUFBQSxRQUNBLFdBQVc7QUFBQSxNQUNiO0FBRUEsTUFBQyxJQUFZLE9BQU8sV0FBVztBQUMvQixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sY0FBYztBQUFBLEVBQ3ZCO0FBQ0EsUUFBTSx5QkFBeUI7QUFDL0IsUUFBTSx1QkFBdUI7QUFDN0IsUUFBTSx3QkFBd0I7QUFDOUIsUUFBTSx1QkFBdUI7QUFDN0IsUUFBTSxtQkFBbUI7QUFDekIsUUFBTSxzQkFBc0I7QUFDNUIsUUFBTSwyQkFBMkI7QUFDakMsUUFBTSx1QkFBdUI7QUFVN0IsTUFBTSxtQkFBbUI7QUFBQSxJQUN2QixTQUFTQyxrQkFBaUIsU0FBUyxpQkFBaUI7QUFFbEQsWUFBTSxNQUFNLElBQUksTUFBTSxPQUFPO0FBQzdCLGFBQU8sT0FBTyxLQUFLLGVBQWU7QUFFbEMsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGOzs7QUNqL0VBLE1BQU0sYUFBYSxPQUFPLElBQUksa0JBQWtCO0FBa0JoRCxNQUFNLFdBQVcsT0FBTyxVQUFVO0FBQ2xDLE1BQU0sZ0JBQWdCLE9BQU8scUJBQXFCO0FBQ2xELE1BQU0sMkJBQTJCLE9BQU8sZ0NBQWdDO0FBQ3hFLE1BQU0saUNBQWlDO0FBQUEsSUFDckM7QUFBQSxFQUNGO0FBT08sV0FBUyxhQUFhLE1BQU07QUFDakMsaUJBQWEsS0FBSyxLQUFLLE1BQU0sSUFBSTtBQUFBLEVBQ25DO0FBQ0EsTUFBTyxpQkFBUTtBQUNmLGVBQWEsS0FBS0M7QUFDbEIsZUFBYSxPQUFPQztBQUNwQixlQUFhLG9CQUFvQjtBQUNqQyxlQUFhLGtCQUFrQjtBQUMvQixlQUFhLGdCQUFnQkM7QUFFN0IsZUFBYSxlQUFlO0FBQzVCLGVBQWEsZUFBZTtBQUU1QixlQUFhLHlCQUF5QjtBQUMvQixNQUFNLHlCQUF5QixhQUFhO0FBQzVDLE1BQU0sZUFBZSxhQUFhO0FBRXpDLFNBQU8sZUFBZSxjQUFjLHFCQUFxQjtBQUFBLElBQ3ZELE1BQU07QUFDSixhQUFPLGFBQWEsVUFBVTtBQUFBLElBQ2hDO0FBQUEsSUFDQSxJQUFJLE9BQU87QUFDVCxzQkFBZ0IsT0FBTyxnQ0FBZ0M7QUFFdkQsbUJBQWEsVUFBVSxZQUFZO0FBQUEsSUFDckM7QUFBQSxJQUNBLFlBQVk7QUFBQSxFQUNkLENBQUM7QUFFRCxlQUFhLGVBQWU7QUFHNUIsU0FBTyxlQUFlLGFBQWEsV0FBVyxVQUFVO0FBQUEsSUFDdEQsT0FBTztBQUFBLElBQ1AsVUFBVTtBQUFBLElBQ1YsWUFBWTtBQUFBLEVBQ2QsQ0FBQztBQUVELGVBQWEsVUFBVSxVQUFVO0FBQ2pDLGVBQWEsVUFBVSxlQUFlO0FBQ3RDLGVBQWEsVUFBVSxnQkFBZ0I7QUFJaEMsTUFBSSxzQkFBc0I7QUFFakMsV0FBUyxjQUFjLFVBQVU7QUFDL0IscUJBQWlCLFVBQVUsVUFBVTtBQUFBLEVBQ3ZDO0FBRUEsU0FBTyxlQUFlLGNBQWMsdUJBQXVCO0FBQUEsSUFDekQsWUFBWTtBQUFBLElBQ1osS0FBSyxXQUFZO0FBQ2YsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssU0FBVSxLQUFLO0FBQ2xCLFVBQUksT0FBTyxRQUFRLFlBQVksTUFBTSxLQUFLLE9BQU8sTUFBTSxHQUFHLEdBQUc7QUFDM0QsY0FBTSxJQUFJO0FBQUEsVUFDUjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFDQSw0QkFBc0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQU8saUJBQWlCLGNBQWM7QUFBQSxJQUNwQywwQkFBMEI7QUFBQSxNQUN4QixPQUFPO0FBQUEsTUFDUCxZQUFZO0FBQUEsTUFDWixjQUFjO0FBQUEsTUFDZCxVQUFVO0FBQUEsSUFDWjtBQUFBLElBQ0EsZ0NBQWdDO0FBQUEsTUFDOUIsT0FBTztBQUFBLE1BQ1AsWUFBWTtBQUFBLE1BQ1osY0FBYztBQUFBLE1BQ2QsVUFBVTtBQUFBLElBQ1o7QUFBQSxFQUNGLENBQUM7QUFRTSxXQUFTLGdCQUNkQyxLQUFJLHdCQUNELGNBQ0g7QUFDQSxRQUFJLE9BQU9BLE9BQU0sWUFBWUEsS0FBSSxLQUFLLE9BQU8sTUFBTUEsRUFBQyxHQUFHO0FBQ3JELFlBQU0sSUFBSSxpQkFBaUIsS0FBSyx5QkFBeUJBLEVBQUM7QUFBQSxJQUM1RDtBQUNBLFFBQUksYUFBYSxXQUFXLEdBQUc7QUFDN0IsNEJBQXNCQTtBQUFBLElBQ3hCLE9BQU87QUFDTCxlQUFTQyxLQUFJLEdBQUdBLEtBQUksYUFBYSxRQUFRQSxNQUFLO0FBQzVDLGNBQU0sU0FBUyxhQUFhQTtBQUM1QixZQUFJLGtCQUFrQixhQUFhO0FBQ2pDLGlCQUFPLDRCQUE0QkQ7QUFDbkMsaUJBQU8sa0NBQWtDO0FBQUEsUUFDM0MsV0FBVyxPQUFPLE9BQU8sb0JBQW9CLFlBQVk7QUFDdkQsaUJBQU8sZ0JBQWdCQSxFQUFDO0FBQUEsUUFDMUIsT0FBTztBQUNMLGdCQUFNLElBQUk7QUFBQSxZQUNSO0FBQUEsWUFDQSxDQUFDLGdCQUFnQixhQUFhO0FBQUEsWUFDOUI7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLGVBQWEsT0FBTyxTQUFVLE1BQU07QUFDbEMsUUFDRSxLQUFLLFlBQVksVUFDakIsS0FBSyxZQUFZLE9BQU8sZUFBZSxJQUFJLEVBQUUsU0FDN0M7QUFDQSxXQUFLLFVBQVUsdUJBQU8sT0FBTyxJQUFJO0FBQ2pDLFdBQUssZUFBZTtBQUFBLElBQ3RCO0FBRUEsU0FBSyxnQkFBZ0IsS0FBSyxpQkFBaUI7QUFFM0MsUUFBSSxNQUFNLG1CQUFtQjtBQUMzQixzQkFBZ0IsS0FBSyxtQkFBbUIsMkJBQTJCO0FBQ25FLFdBQUssWUFBWSxRQUFRLEtBQUssaUJBQWlCO0FBQUEsSUFDakQsT0FBTztBQUdMLFdBQUssWUFBWSxhQUFhLFVBQVU7QUFBQSxJQUMxQztBQUFBLEVBQ0Y7QUFFQSxXQUFTLFNBQVMsTUFBTSxTQUFTLE1BQU0sTUFBTTtBQUMzQyxRQUFJLENBQUMsS0FBSyxXQUFXO0FBQ25CO0FBQUEsSUFDRjtBQUlBLFFBQUk7QUFDRixZQUFNLE9BQU8sUUFBUTtBQUVyQixVQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCLGFBQUssS0FBSyxTQUFTLFFBQVcsU0FBVSxLQUFLO0FBRzNDLGtCQUFRLFNBQVMsNkJBQTZCLE1BQU0sS0FBSyxNQUFNLElBQUk7QUFBQSxRQUNyRSxDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsU0FBUyxLQUFQO0FBQ0EsV0FBSyxLQUFLLFNBQVMsR0FBRztBQUFBLElBQ3hCO0FBQUEsRUFDRjtBQUVBLFdBQVMsNEJBQTRCRSxNQUFJLEtBQUssTUFBTSxNQUFNO0FBQ3hELFFBQUksT0FBT0EsS0FBRyxnQkFBZ0IsWUFBWTtBQUN4QyxNQUFBQSxLQUFHLFlBQVksS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUFBLElBQ25DLE9BQU87QUFHTCxZQUFNLE9BQU9BLEtBQUc7QUFNaEIsVUFBSTtBQUNGLFFBQUFBLEtBQUcsWUFBWTtBQUNmLFFBQUFBLEtBQUcsS0FBSyxTQUFTLEdBQUc7QUFBQSxNQUN0QixVQUFFO0FBQ0EsUUFBQUEsS0FBRyxZQUFZO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQU9BLGVBQWEsVUFBVSxrQkFBa0IsU0FBU0MsaUJBQWdCSCxJQUFHO0FBQ25FLFFBQUksT0FBT0EsT0FBTSxZQUFZQSxLQUFJLEtBQUssT0FBTyxNQUFNQSxFQUFDLEdBQUc7QUFDckQsWUFBTSxJQUFJLGlCQUFpQixLQUFLLHlCQUF5QkEsRUFBQztBQUFBLElBQzVEO0FBQ0EsU0FBSyxnQkFBZ0JBO0FBQ3JCLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxpQkFBaUIsTUFBTTtBQUM5QixRQUFJLEtBQUssa0JBQWtCLFFBQVc7QUFDcEMsYUFBTyxhQUFhO0FBQUEsSUFDdEI7QUFDQSxXQUFPLEtBQUs7QUFBQSxFQUNkO0FBTUEsZUFBYSxVQUFVLGtCQUFrQixTQUFTLGtCQUFrQjtBQUNsRSxXQUFPLGlCQUFpQixJQUFJO0FBQUEsRUFDOUI7QUE4REEsZUFBYSxVQUFVLE9BQU8sU0FBUyxLQUFLLFNBQVMsTUFBTTtBQUN6RCxRQUFJLFVBQVcsU0FBUztBQUV4QixVQUFNLFNBQVMsS0FBSztBQUNwQixRQUFJLFdBQVcsUUFBVztBQUN4QixVQUFJLFdBQVcsT0FBTyxtQkFBbUIsUUFBVztBQUNsRCxhQUFLLEtBQUssZUFBZSxHQUFHLElBQUk7QUFBQSxNQUNsQztBQUNBLGdCQUFVLFdBQVcsT0FBTyxVQUFVO0FBQUEsSUFDeEMsV0FBVyxDQUFDLFNBQVM7QUFDbkIsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUFJLFNBQVM7QUFDWCxVQUFJSTtBQUNKLFVBQUksS0FBSyxTQUFTLEdBQUc7QUFDbkIsUUFBQUEsTUFBSyxLQUFLO0FBQUEsTUFDWjtBQUNBLFVBQUlBLGVBQWMsT0FBTztBQUN2QixZQUFJO0FBQ0YsZ0JBQU0sVUFBVSxDQUFDO0FBQ2pCLGdCQUFNLGtCQUFrQixTQUFTLGFBQWEsVUFBVSxJQUFJO0FBQUEsUUFLOUQsUUFBRTtBQUFBLFFBRUY7QUFJQSxjQUFNQTtBQUFBLE1BQ1I7QUFFQSxVQUFJO0FBQ0osVUFBSTtBQUNGLHdCQUFnQixRQUFRQSxHQUFFO0FBQUEsTUFDNUIsUUFBRTtBQUNBLHdCQUFnQkE7QUFBQSxNQUNsQjtBQUdBLFlBQU0sTUFBTSxJQUFJLG9CQUFvQixhQUFhO0FBQ2pELFVBQUksVUFBVUE7QUFDZCxZQUFNO0FBQUEsSUFDUjtBQUVBLFVBQU0sVUFBVSxPQUFPO0FBRXZCLFFBQUksWUFBWSxRQUFXO0FBQ3pCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxPQUFPLFlBQVksWUFBWTtBQUNqQyxZQUFNLFNBQVMsUUFBUSxNQUFNLE1BQU0sSUFBSTtBQUt2QyxVQUFJLFdBQVcsVUFBYSxXQUFXLE1BQU07QUFDM0MsaUJBQVMsTUFBTSxRQUFRLE1BQU0sSUFBSTtBQUFBLE1BQ25DO0FBQUEsSUFDRixPQUFPO0FBQ0wsWUFBTSxNQUFNLFFBQVE7QUFDcEIsWUFBTUMsYUFBWSxXQUFXLE9BQU87QUFDcEMsZUFBU0MsS0FBSSxHQUFHQSxLQUFJLEtBQUssRUFBRUEsSUFBRztBQUM1QixjQUFNLFNBQVNELFdBQVVDLElBQUcsTUFBTSxNQUFNLElBQUk7QUFPNUMsWUFBSSxXQUFXLFVBQWEsV0FBVyxNQUFNO0FBQzNDLG1CQUFTLE1BQU0sUUFBUSxNQUFNLElBQUk7QUFBQSxRQUNuQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLGFBQWEsUUFBUSxNQUFNLFVBQVUsU0FBUztBQUNyRCxRQUFJQztBQUNKLFFBQUk7QUFDSixRQUFJO0FBRUosa0JBQWMsUUFBUTtBQUV0QixhQUFTLE9BQU87QUFDaEIsUUFBSSxXQUFXLFFBQVc7QUFDeEIsZUFBUyxPQUFPLFVBQVUsdUJBQU8sT0FBTyxJQUFJO0FBQzVDLGFBQU8sZUFBZTtBQUFBLElBQ3hCLE9BQU87QUFHTCxVQUFJLE9BQU8sZ0JBQWdCLFFBQVc7QUFDcEMsZUFBTyxLQUFLLGVBQWUsTUFBTSxTQUFTLFlBQVksUUFBUTtBQUk5RCxpQkFBUyxPQUFPO0FBQUEsTUFDbEI7QUFDQSxpQkFBVyxPQUFPO0FBQUEsSUFDcEI7QUFFQSxRQUFJLGFBQWEsUUFBVztBQUUxQixhQUFPLFFBQVE7QUFDZixRQUFFLE9BQU87QUFBQSxJQUNYLE9BQU87QUFDTCxVQUFJLE9BQU8sYUFBYSxZQUFZO0FBRWxDLG1CQUFXLE9BQU8sUUFBUSxVQUN0QixDQUFDLFVBQVUsUUFBUSxJQUNuQixDQUFDLFVBQVUsUUFBUTtBQUFBLE1BRXpCLFdBQVcsU0FBUztBQUNsQixpQkFBUyxRQUFRLFFBQVE7QUFBQSxNQUMzQixPQUFPO0FBQ0wsaUJBQVMsS0FBSyxRQUFRO0FBQUEsTUFDeEI7QUFHQSxNQUFBQSxNQUFJLGlCQUFpQixNQUFNO0FBQzNCLFVBQUlBLE1BQUksS0FBSyxTQUFTLFNBQVNBLE9BQUssQ0FBQyxTQUFTLFFBQVE7QUFDcEQsaUJBQVMsU0FBUztBQUdsQixjQUFNQyxNQUFJLElBQUk7QUFBQSxVQUNaLCtDQUNLLFNBQVMsVUFBVSxPQUFPLElBQUksd0JBQ3JCLFFBQVEsUUFBUSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQUEsUUFFN0M7QUFDQSxRQUFBQSxJQUFFLE9BQU87QUFDVCxRQUFBQSxJQUFFLFVBQVU7QUFDWixRQUFBQSxJQUFFLE9BQU87QUFDVCxRQUFBQSxJQUFFLFFBQVEsU0FBUztBQUNuQixnQkFBUSxZQUFZQSxHQUFDO0FBQUEsTUFDdkI7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFRQSxlQUFhLFVBQVUsY0FBYyxTQUFTLFlBQVksTUFBTSxVQUFVO0FBQ3hFLFdBQU8sYUFBYSxNQUFNLE1BQU0sVUFBVSxLQUFLO0FBQUEsRUFDakQ7QUFFQSxlQUFhLFVBQVUsS0FBSyxhQUFhLFVBQVU7QUFTbkQsZUFBYSxVQUFVLGtCQUFrQixTQUFTLGdCQUNoRCxNQUNBLFVBQ0E7QUFDQSxXQUFPLGFBQWEsTUFBTSxNQUFNLFVBQVUsSUFBSTtBQUFBLEVBQ2hEO0FBRUEsV0FBUyxjQUFjO0FBQ3JCLFFBQUksQ0FBQyxLQUFLLE9BQU87QUFDZixXQUFLLE9BQU8sZUFBZSxLQUFLLE1BQU0sS0FBSyxNQUFNO0FBQ2pELFdBQUssUUFBUTtBQUNiLFVBQUksVUFBVSxXQUFXLEdBQUc7QUFDMUIsZUFBTyxLQUFLLFNBQVMsS0FBSyxLQUFLLE1BQU07QUFBQSxNQUN2QztBQUNBLGFBQU8sS0FBSyxTQUFTLE1BQU0sS0FBSyxRQUFRLFNBQVM7QUFBQSxJQUNuRDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFVBQVUsUUFBUSxNQUFNLFVBQVU7QUFDekMsVUFBTSxRQUFRLEVBQUUsT0FBTyxPQUFPLFFBQVEsUUFBVyxRQUFRLE1BQU0sU0FBUztBQUN4RSxVQUFNLFVBQVUsWUFBWSxLQUFLLEtBQUs7QUFDdEMsWUFBUSxXQUFXO0FBQ25CLFVBQU0sU0FBUztBQUNmLFdBQU87QUFBQSxFQUNUO0FBUUEsZUFBYSxVQUFVLE9BQU8sU0FBU0MsTUFBSyxNQUFNLFVBQVU7QUFDMUQsa0JBQWMsUUFBUTtBQUV0QixTQUFLLEdBQUcsTUFBTSxVQUFVLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDN0MsV0FBTztBQUFBLEVBQ1Q7QUFTQSxlQUFhLFVBQVUsc0JBQXNCLFNBQVMsb0JBQ3BELE1BQ0EsVUFDQTtBQUNBLGtCQUFjLFFBQVE7QUFFdEIsU0FBSyxnQkFBZ0IsTUFBTSxVQUFVLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDMUQsV0FBTztBQUFBLEVBQ1Q7QUFRQSxlQUFhLFVBQVUsaUJBQWlCLFNBQVMsZUFDL0MsTUFDQSxVQUNBO0FBQ0Esa0JBQWMsUUFBUTtBQUV0QixVQUFNLFNBQVMsS0FBSztBQUNwQixRQUFJLFdBQVcsUUFBVztBQUN4QixhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sT0FBTyxPQUFPO0FBQ3BCLFFBQUksU0FBUyxRQUFXO0FBQ3RCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxTQUFTLFlBQVksS0FBSyxhQUFhLFVBQVU7QUFDbkQsVUFBSSxFQUFFLEtBQUssaUJBQWlCLEdBQUc7QUFDN0IsYUFBSyxVQUFVLHVCQUFPLE9BQU8sSUFBSTtBQUFBLE1BQ25DLE9BQU87QUFDTCxlQUFPLE9BQU87QUFDZCxZQUFJLE9BQU8sZ0JBQWdCO0FBQ3pCLGVBQUssS0FBSyxrQkFBa0IsTUFBTSxLQUFLLFlBQVksUUFBUTtBQUFBLFFBQzdEO0FBQUEsTUFDRjtBQUFBLElBQ0YsV0FBVyxPQUFPLFNBQVMsWUFBWTtBQUNyQyxVQUFJLFdBQVc7QUFFZixlQUFTSCxLQUFJLEtBQUssU0FBUyxHQUFHQSxNQUFLLEdBQUdBLE1BQUs7QUFDekMsWUFBSSxLQUFLQSxRQUFPLFlBQVksS0FBS0EsSUFBRyxhQUFhLFVBQVU7QUFDekQscUJBQVdBO0FBQ1g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLFVBQUksV0FBVyxHQUFHO0FBQ2hCLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxhQUFhLEdBQUc7QUFDbEIsYUFBSyxNQUFNO0FBQUEsTUFDYixPQUFPO0FBQ0wsa0JBQVUsTUFBTSxRQUFRO0FBQUEsTUFDMUI7QUFFQSxVQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCLGVBQU8sUUFBUSxLQUFLO0FBQUEsTUFDdEI7QUFFQSxVQUFJLE9BQU8sbUJBQW1CLFFBQVc7QUFDdkMsYUFBSyxLQUFLLGtCQUFrQixNQUFNLFFBQVE7QUFBQSxNQUM1QztBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLGVBQWEsVUFBVSxNQUFNLGFBQWEsVUFBVTtBQVNwRCxlQUFhLFVBQVUscUJBQXFCLFNBQVMsbUJBQW1CLE1BQU07QUFDNUUsVUFBTSxTQUFTLEtBQUs7QUFDcEIsUUFBSSxXQUFXLFFBQVc7QUFDeEIsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUFJLE9BQU8sbUJBQW1CLFFBQVc7QUFDdkMsVUFBSSxVQUFVLFdBQVcsR0FBRztBQUMxQixhQUFLLFVBQVUsdUJBQU8sT0FBTyxJQUFJO0FBQ2pDLGFBQUssZUFBZTtBQUFBLE1BQ3RCLFdBQVcsT0FBTyxVQUFVLFFBQVc7QUFDckMsWUFBSSxFQUFFLEtBQUssaUJBQWlCLEdBQUc7QUFDN0IsZUFBSyxVQUFVLHVCQUFPLE9BQU8sSUFBSTtBQUFBLFFBQ25DLE9BQU87QUFDTCxpQkFBTyxPQUFPO0FBQUEsUUFDaEI7QUFBQSxNQUNGO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUFJLFVBQVUsV0FBVyxHQUFHO0FBQzFCLGlCQUFXLE9BQU8sUUFBUSxRQUFRLE1BQU0sR0FBRztBQUN6QyxZQUFJLFFBQVE7QUFBa0I7QUFDOUIsYUFBSyxtQkFBbUIsR0FBRztBQUFBLE1BQzdCO0FBQ0EsV0FBSyxtQkFBbUIsZ0JBQWdCO0FBQ3hDLFdBQUssVUFBVSx1QkFBTyxPQUFPLElBQUk7QUFDakMsV0FBSyxlQUFlO0FBQ3BCLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTUQsYUFBWSxPQUFPO0FBRXpCLFFBQUksT0FBT0EsZUFBYyxZQUFZO0FBQ25DLFdBQUssZUFBZSxNQUFNQSxVQUFTO0FBQUEsSUFDckMsV0FBV0EsZUFBYyxRQUFXO0FBRWxDLGVBQVNDLEtBQUlELFdBQVUsU0FBUyxHQUFHQyxNQUFLLEdBQUdBLE1BQUs7QUFDOUMsYUFBSyxlQUFlLE1BQU1ELFdBQVVDLEdBQUU7QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsV0FBVyxRQUFRLE1BQU0sUUFBUTtBQUN4QyxVQUFNLFNBQVMsT0FBTztBQUV0QixRQUFJLFdBQVcsUUFBVztBQUN4QixhQUFPLENBQUM7QUFBQSxJQUNWO0FBRUEsVUFBTSxhQUFhLE9BQU87QUFDMUIsUUFBSSxlQUFlLFFBQVc7QUFDNUIsYUFBTyxDQUFDO0FBQUEsSUFDVjtBQUVBLFFBQUksT0FBTyxlQUFlLFlBQVk7QUFDcEMsYUFBTyxTQUFTLENBQUMsV0FBVyxZQUFZLFVBQVUsSUFBSSxDQUFDLFVBQVU7QUFBQSxJQUNuRTtBQUVBLFdBQU8sU0FBUyxnQkFBZ0IsVUFBVSxJQUFJLFdBQVcsVUFBVTtBQUFBLEVBQ3JFO0FBUUEsZUFBYSxVQUFVLFlBQVksU0FBUyxVQUFVLE1BQU07QUFDMUQsV0FBTyxXQUFXLE1BQU0sTUFBTSxJQUFJO0FBQUEsRUFDcEM7QUFRQSxlQUFhLFVBQVUsZUFBZSxTQUFTLGFBQWEsTUFBTTtBQUNoRSxXQUFPLFdBQVcsTUFBTSxNQUFNLEtBQUs7QUFBQSxFQUNyQztBQVFBLE1BQU0saUJBQWlCLFNBQVMsY0FBYyxNQUFNO0FBQ2xELFVBQU0sU0FBUyxLQUFLO0FBRXBCLFFBQUksV0FBVyxRQUFXO0FBQ3hCLFlBQU0sYUFBYSxPQUFPO0FBRTFCLFVBQUksT0FBTyxlQUFlLFlBQVk7QUFDcEMsZUFBTztBQUFBLE1BQ1QsV0FBVyxlQUFlLFFBQVc7QUFDbkMsZUFBTyxXQUFXO0FBQUEsTUFDcEI7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxlQUFhLFVBQVUsZ0JBQWdCO0FBVWhDLFdBQVNJLGVBQWMsU0FBUyxNQUFNO0FBQzNDLFFBQUksT0FBTyxRQUFRLGtCQUFrQixZQUFZO0FBQy9DLGFBQU8sUUFBUSxjQUFjLElBQUk7QUFBQSxJQUNuQztBQUNBLFdBQU8sZUFBZSxLQUFLLFNBQVMsSUFBSTtBQUFBLEVBQzFDO0FBT0EsZUFBYSxVQUFVLGFBQWEsU0FBUyxhQUFhO0FBQ3hELFdBQU8sS0FBSyxlQUFlLElBQUksUUFBUSxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUM7QUFBQSxFQUNsRTtBQUVBLFdBQVMsV0FBVyxLQUFLO0FBR3ZCLFlBQVEsSUFBSTtBQUFBLFdBQ0w7QUFDSCxlQUFPLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtBQUFBLFdBQ25CO0FBQ0gsZUFBTyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQUEsV0FDM0I7QUFDSCxlQUFPLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQUEsV0FDbkM7QUFDSCxlQUFPLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUFBLFdBQzNDO0FBQ0gsZUFBTyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQUE7QUFFMUQsV0FBTyxJQUFJLE1BQU07QUFBQSxFQUNuQjtBQUVBLFdBQVMsZ0JBQWdCLEtBQUs7QUFDNUIsVUFBTSxNQUFNLFdBQVcsR0FBRztBQUMxQixhQUFTSixLQUFJLEdBQUdBLEtBQUksSUFBSSxRQUFRLEVBQUVBLElBQUc7QUFDbkMsWUFBTSxPQUFPLElBQUlBLElBQUc7QUFDcEIsVUFBSSxPQUFPLFNBQVMsWUFBWTtBQUM5QixZQUFJQSxNQUFLO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQVNPLFdBQVMsa0JBQWtCLGlCQUFpQixNQUFNO0FBRXZELFFBQUksT0FBTyxnQkFBZ0IsY0FBYyxZQUFZO0FBQ25ELGFBQU8sZ0JBQWdCLFVBQVUsSUFBSTtBQUFBLElBQ3ZDO0FBQ0EsUUFBSSwyQkFBMkIsYUFBYTtBQUUxQyxZQUFNLE9BQU8sZ0JBQWdCLFNBQVMsSUFBSSxJQUFJO0FBQzlDLFlBQU1ELGFBQVksQ0FBQztBQUNuQixVQUFJLFVBQVUsTUFBTTtBQUNwQixhQUFPLFNBQVMsYUFBYSxRQUFXO0FBQ3RDLGNBQU0sV0FBVyxRQUFRLFVBQVUsUUFDL0IsUUFBUSxTQUFTLE1BQU0sSUFDdkIsUUFBUTtBQUNaLFFBQUFBLFdBQVUsS0FBSyxRQUFRO0FBQ3ZCLGtCQUFVLFFBQVE7QUFBQSxNQUNwQjtBQUNBLGFBQU9BO0FBQUEsSUFDVDtBQUNBLFVBQU0sSUFBSTtBQUFBLE1BQ1I7QUFBQSxNQUNBLENBQUMsZ0JBQWdCLGFBQWE7QUFBQSxNQUM5QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBV0EsaUJBQXNCSSxNQUFLLFNBQVMsTUFBTSxVQUFVLENBQUMsR0FBRztBQUN0RCxVQUFNLFNBQVMsU0FBUztBQUN4Qix3QkFBb0IsUUFBUSxnQkFBZ0I7QUFDNUMsUUFBSSxRQUFRLFNBQVM7QUFDbkIsWUFBTSxJQUFJLFdBQVc7QUFBQSxJQUN2QjtBQUNBLFdBQU8sSUFBSSxRQUFRLENBQUNFLFVBQVMsV0FBVztBQUN0QyxZQUFNLGdCQUFnQixDQUFDLFFBQVE7QUFDN0IsZ0JBQVEsZUFBZSxNQUFNLFFBQVE7QUFDckMsWUFBSSxVQUFVLE1BQU07QUFDbEIsNENBQWtDLFFBQVEsU0FBUyxhQUFhO0FBQUEsUUFDbEU7QUFDQSxlQUFPLEdBQUc7QUFBQSxNQUNaO0FBQ0EsWUFBTSxXQUFXLElBQUksU0FBUztBQUM1QixZQUFJLE9BQU8sUUFBUSxtQkFBbUIsWUFBWTtBQUNoRCxrQkFBUSxlQUFlLFNBQVMsYUFBYTtBQUFBLFFBQy9DO0FBQ0EsWUFBSSxVQUFVLE1BQU07QUFDbEIsNENBQWtDLFFBQVEsU0FBUyxhQUFhO0FBQUEsUUFDbEU7QUFDQSxRQUFBQSxTQUFRLElBQUk7QUFBQSxNQUNkO0FBQ0EscUNBQStCLFNBQVMsTUFBTSxVQUFVLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDdEUsVUFBSSxTQUFTLFdBQVcsT0FBTyxRQUFRLFNBQVMsWUFBWTtBQUMxRCxnQkFBUSxLQUFLLFNBQVMsYUFBYTtBQUFBLE1BQ3JDO0FBQ0EsZUFBUyxnQkFBZ0I7QUFDdkIsMENBQWtDLFNBQVMsTUFBTSxRQUFRO0FBQ3pELDBDQUFrQyxTQUFTLFNBQVMsYUFBYTtBQUNqRSxlQUFPLElBQUksV0FBVyxDQUFDO0FBQUEsTUFDekI7QUFDQSxVQUFJLFVBQVUsTUFBTTtBQUNsQjtBQUFBLFVBQ0U7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsRUFBRSxNQUFNLEtBQUs7QUFBQSxRQUNmO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFFQSxNQUFNLHlCQUF5QixPQUFPO0FBQUEsSUFDcEMsT0FBTyxlQUFlLG1CQUFtQjtBQUFBLElBQUMsQ0FBQyxFQUFFO0FBQUEsRUFDL0M7QUFFQSxXQUFTLGlCQUFpQixPQUFPLE1BQU07QUFDckMsV0FBTyxFQUFFLE9BQU8sS0FBSztBQUFBLEVBQ3ZCO0FBRUEsV0FBUyxrQ0FBa0MsU0FBUyxNQUFNLFVBQVUsT0FBTztBQUN6RSxRQUFJLE9BQU8sUUFBUSxtQkFBbUIsWUFBWTtBQUNoRCxjQUFRLGVBQWUsTUFBTSxRQUFRO0FBQUEsSUFDdkMsV0FBVyxPQUFPLFFBQVEsd0JBQXdCLFlBQVk7QUFDNUQsY0FBUSxvQkFBb0IsTUFBTSxVQUFVLEtBQUs7QUFBQSxJQUNuRCxPQUFPO0FBQ0wsWUFBTSxJQUFJLHFCQUFxQixXQUFXLGdCQUFnQixPQUFPO0FBQUEsSUFDbkU7QUFBQSxFQUNGO0FBRUEsV0FBUywrQkFBK0IsU0FBUyxNQUFNLFVBQVUsT0FBTztBQUN0RSxRQUFJLE9BQU8sUUFBUSxPQUFPLFlBQVk7QUFDcEMsVUFBSSxPQUFPLE1BQU07QUFDZixnQkFBUSxLQUFLLE1BQU0sUUFBUTtBQUFBLE1BQzdCLE9BQU87QUFDTCxnQkFBUSxHQUFHLE1BQU0sUUFBUTtBQUFBLE1BQzNCO0FBQUEsSUFDRixXQUFXLE9BQU8sUUFBUSxxQkFBcUIsWUFBWTtBQUd6RCxjQUFRLGlCQUFpQixNQUFNLENBQUMsUUFBUTtBQUN0QyxpQkFBUyxHQUFHO0FBQUEsTUFDZCxHQUFHLEtBQUs7QUFBQSxJQUNWLE9BQU87QUFDTCxZQUFNLElBQUkscUJBQXFCLFdBQVcsZ0JBQWdCLE9BQU87QUFBQSxJQUNuRTtBQUFBLEVBQ0Y7QUFTTyxXQUFTQyxJQUFHLFNBQVMsT0FBTyxTQUFTO0FBQzFDLFVBQU0sU0FBUyxTQUFTO0FBQ3hCLHdCQUFvQixRQUFRLGdCQUFnQjtBQUM1QyxRQUFJLFFBQVEsU0FBUztBQUNuQixZQUFNLElBQUksV0FBVztBQUFBLElBQ3ZCO0FBRUEsVUFBTSxtQkFBbUIsQ0FBQztBQUMxQixVQUFNLHFCQUFxQixDQUFDO0FBQzVCLFFBQUksUUFBUTtBQUNaLFFBQUlDLFlBQVc7QUFFZixVQUFNLFdBQVcsT0FBTyxlQUFlO0FBQUEsTUFDckMsT0FBTztBQUVMLGNBQU0sUUFBUSxpQkFBaUIsTUFBTTtBQUNyQyxZQUFJLE9BQU87QUFDVCxpQkFBTyxRQUFRLFFBQVEsaUJBQWlCLE9BQU8sS0FBSyxDQUFDO0FBQUEsUUFDdkQ7QUFLQSxZQUFJLE9BQU87QUFDVCxnQkFBTUMsTUFBSSxRQUFRLE9BQU8sS0FBSztBQUU5QixrQkFBUTtBQUNSLGlCQUFPQTtBQUFBLFFBQ1Q7QUFHQSxZQUFJRCxXQUFVO0FBQ1osaUJBQU8sUUFBUSxRQUFRLGlCQUFpQixRQUFXLElBQUksQ0FBQztBQUFBLFFBQzFEO0FBR0EsZUFBTyxJQUFJLFFBQVEsU0FBVUYsVUFBUyxRQUFRO0FBQzVDLDZCQUFtQixLQUFLLEVBQUUsU0FBQUEsVUFBUyxPQUFPLENBQUM7QUFBQSxRQUM3QyxDQUFDO0FBQUEsTUFDSDtBQUFBLE1BRUEsU0FBUztBQUNQLDBDQUFrQyxTQUFTLE9BQU8sWUFBWTtBQUM5RCwwQ0FBa0MsU0FBUyxTQUFTLFlBQVk7QUFFaEUsWUFBSSxRQUFRO0FBQ1Y7QUFBQSxZQUNFO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLEVBQUUsTUFBTSxLQUFLO0FBQUEsVUFDZjtBQUFBLFFBQ0Y7QUFFQSxRQUFBRSxZQUFXO0FBRVgsbUJBQVcsV0FBVyxvQkFBb0I7QUFDeEMsa0JBQVEsUUFBUSxpQkFBaUIsUUFBVyxJQUFJLENBQUM7QUFBQSxRQUNuRDtBQUVBLGVBQU8sUUFBUSxRQUFRLGlCQUFpQixRQUFXLElBQUksQ0FBQztBQUFBLE1BQzFEO0FBQUEsTUFFQSxNQUFNLEtBQUs7QUFDVCxZQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsUUFBUTtBQUNuQyxnQkFBTSxJQUFJO0FBQUEsWUFDUjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFDQSxnQkFBUTtBQUNSLDBDQUFrQyxTQUFTLE9BQU8sWUFBWTtBQUM5RCwwQ0FBa0MsU0FBUyxTQUFTLFlBQVk7QUFBQSxNQUNsRTtBQUFBLE1BRUEsQ0FBQyxPQUFPLGlCQUFpQjtBQUN2QixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0YsR0FBRyxzQkFBc0I7QUFFekIsbUNBQStCLFNBQVMsT0FBTyxZQUFZO0FBQzNELFFBQUksVUFBVSxXQUFXLE9BQU8sUUFBUSxPQUFPLFlBQVk7QUFDekQsY0FBUSxHQUFHLFNBQVMsWUFBWTtBQUFBLElBQ2xDO0FBRUEsUUFBSSxRQUFRO0FBQ1Y7QUFBQSxRQUNFO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLEVBQUUsTUFBTSxLQUFLO0FBQUEsTUFDZjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBRVAsYUFBUyxnQkFBZ0I7QUFDdkIsbUJBQWEsSUFBSSxXQUFXLENBQUM7QUFBQSxJQUMvQjtBQUVBLGFBQVMsZ0JBQWdCLE1BQU07QUFDN0IsWUFBTSxVQUFVLG1CQUFtQixNQUFNO0FBQ3pDLFVBQUksU0FBUztBQUNYLGdCQUFRLFFBQVEsaUJBQWlCLE1BQU0sS0FBSyxDQUFDO0FBQUEsTUFDL0MsT0FBTztBQUNMLHlCQUFpQixLQUFLLElBQUk7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFFQSxhQUFTLGFBQWEsS0FBSztBQUN6QixNQUFBQSxZQUFXO0FBRVgsWUFBTSxVQUFVLG1CQUFtQixNQUFNO0FBRXpDLFVBQUksU0FBUztBQUNYLGdCQUFRLE9BQU8sR0FBRztBQUFBLE1BQ3BCLE9BQU87QUFFTCxnQkFBUTtBQUFBLE1BQ1Y7QUFFQSxlQUFTLE9BQU87QUFBQSxJQUNsQjtBQUFBLEVBQ0Y7OztBQ2p1QkEsTUFBTSxFQUFFLFFBQUFFLFFBQU8sSUFBSTtBQUVuQixXQUFTLElBQU8sS0FBd0IsS0FBNEI7QUFDbEUsUUFBSUEsUUFBTyxLQUFLLEdBQUcsR0FBRztBQUNwQixhQUFPLElBQUk7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUVBLFdBQVMsU0FBWSxLQUF3QixLQUFnQjtBQUMzRCxVQUFNQyxNQUFJLElBQUksS0FBSyxHQUFHO0FBQ3RCLElBQUFDLFFBQU9ELE9BQUssSUFBSTtBQUNoQixXQUFPQTtBQUFBLEVBQ1Q7QUFFQSxXQUFTLFNBQVNFLEtBQXFCO0FBQ3JDLFFBQUksT0FBT0EsUUFBTTtBQUFVLGFBQU87QUFDbEMsUUFBSSxpQkFBaUIsS0FBSyxPQUFPQSxHQUFDLENBQUM7QUFBRyxhQUFPO0FBQzdDLFdBQU8sNkNBQTZDLEtBQUssT0FBT0EsR0FBQyxDQUFDO0FBQUEsRUFDcEU7QUFFQSxXQUFTLE9BQU8sS0FBb0IsTUFBeUI7QUFDM0QsUUFBSUMsS0FBSTtBQUNSLFNBQUssTUFBTSxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUNDLFNBQVE7QUFDakMsTUFBQUQsS0FBSyxJQUFJQSxJQUFHQyxJQUFHLEtBQUssQ0FBQztBQUFBLElBQ3ZCLENBQUM7QUFFRCxVQUFNLE1BQU0sS0FBSyxLQUFLLFNBQVM7QUFDL0IsV0FBT0wsUUFBT0ksSUFBRyxHQUFHO0FBQUEsRUFDdEI7QUFxQk8sV0FBU0UsT0FZZCxNQUNBO0FBQUEsSUFDRSxNQUFNLGFBQWE7QUFBQSxJQUNuQixRQUFRLENBQUM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLFNBQVMsV0FBVyxDQUFDO0FBQUEsSUFDckIsWUFBWTtBQUFBLElBQ1osU0FBUyxDQUFDO0FBQUEsSUFDVixVQUFVLENBQUM7QUFBQSxJQUNYLFlBQVksQ0FBQztBQUFBLElBQ2IsVUFBVSxDQUFDQyxPQUF1QkE7QUFBQSxFQUNwQyxJQUF3QyxDQUFDLEdBQzVCO0FBQ2IsVUFBTSxRQUFlO0FBQUEsTUFDbkIsT0FBTyxDQUFDO0FBQUEsTUFDUixTQUFTLENBQUM7QUFBQSxNQUNWLFdBQVc7QUFBQSxNQUNYLFVBQVU7QUFBQSxNQUNWLFNBQVMsQ0FBQztBQUFBLE1BQ1YsV0FBVyxDQUFDO0FBQUEsSUFDZDtBQUVBLFFBQUksWUFBWSxRQUFXO0FBQ3pCLFVBQUksT0FBTyxZQUFZLFdBQVc7QUFDaEMsY0FBTSxXQUFXLENBQUMsQ0FBQztBQUFBLE1BQ3JCLE9BQU87QUFDTCxjQUFNLGNBQXFDLE9BQU8sWUFBWSxXQUMxRCxDQUFDLE9BQU8sSUFDUjtBQUVKLG1CQUFXLE9BQU8sWUFBWSxPQUFPLE9BQU8sR0FBRztBQUM3QyxnQkFBTSxNQUFNLE9BQU87QUFBQSxRQUNyQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFvQyxDQUFDO0FBQzNDLFFBQUksVUFBVSxRQUFXO0FBQ3ZCLGlCQUFXLE9BQU8sT0FBTztBQUN2QixjQUFNLE1BQU0sU0FBUyxPQUFPLEdBQUc7QUFDL0IsWUFBSSxPQUFPLFFBQVEsVUFBVTtBQUMzQixrQkFBUSxPQUFPLENBQUMsR0FBRztBQUFBLFFBQ3JCLE9BQU87QUFDTCxrQkFBUSxPQUFPO0FBQUEsUUFDakI7QUFDQSxtQkFBV0MsVUFBUyxTQUFTLFNBQVMsR0FBRyxHQUFHO0FBQzFDLGtCQUFRQSxVQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sUUFBUSxLQUFLLE9BQU8sQ0FBQ0MsUUFBTUQsV0FBVUMsR0FBQyxDQUFDO0FBQUEsUUFDdkU7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFFBQUksV0FBVyxRQUFXO0FBQ3hCLFlBQU0sYUFBb0MsT0FBTyxXQUFXLFdBQ3hELENBQUMsTUFBTSxJQUNQO0FBRUosaUJBQVcsT0FBTyxXQUFXLE9BQU8sT0FBTyxHQUFHO0FBQzVDLGNBQU0sUUFBUSxPQUFPO0FBQ3JCLGNBQU1ELFNBQVEsSUFBSSxTQUFTLEdBQUc7QUFDOUIsWUFBSUEsUUFBTztBQUNULHFCQUFXLE1BQU1BLFFBQU87QUFDdEIsa0JBQU0sUUFBUSxNQUFNO0FBQUEsVUFDdEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFlBQVksUUFBVztBQUN6QixZQUFNLGNBQXFDLE9BQU8sWUFBWSxXQUMxRCxDQUFDLE9BQU8sSUFDUjtBQUVKLGlCQUFXLE9BQU8sWUFBWSxPQUFPLE9BQU8sR0FBRztBQUM3QyxjQUFNLFFBQVEsT0FBTztBQUNyQixjQUFNQSxTQUFRLElBQUksU0FBUyxHQUFHO0FBQzlCLFlBQUlBLFFBQU87QUFDVCxxQkFBVyxNQUFNQSxRQUFPO0FBQ3RCLGtCQUFNLFFBQVEsTUFBTTtBQUFBLFVBQ3RCO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxjQUFjLFFBQVc7QUFDM0IsWUFBTSxnQkFBdUMsT0FBTyxjQUFjLFdBQzlELENBQUMsU0FBUyxJQUNWO0FBRUosaUJBQVcsT0FBTyxjQUFjLE9BQU8sT0FBTyxHQUFHO0FBQy9DLGNBQU0sVUFBVSxPQUFPO0FBQ3ZCLGNBQU1BLFNBQVEsSUFBSSxTQUFTLEdBQUc7QUFDOUIsWUFBSUEsUUFBTztBQUNULHFCQUFXLE1BQU1BLFFBQU87QUFDdEIsa0JBQU0sVUFBVSxNQUFNO0FBQUEsVUFDeEI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxVQUFNRSxRQUFhLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFFM0IsYUFBUyxXQUFXLEtBQWEsS0FBc0I7QUFDckQsYUFDRyxNQUFNLFlBQVksWUFBWSxLQUFLLEdBQUcsS0FDdkMsSUFBSSxNQUFNLE9BQU8sR0FBRyxLQUNwQixDQUFDLENBQUMsSUFBSSxNQUFNLFNBQVMsR0FBRyxLQUN4QixDQUFDLENBQUMsSUFBSSxTQUFTLEdBQUc7QUFBQSxJQUV0QjtBQUVBLGFBQVMsT0FDUCxLQUNBLE1BQ0EsT0FDQUMsV0FBVSxNQUNWO0FBQ0EsVUFBSVAsS0FBSTtBQUNSLFlBQU0sT0FBTyxLQUFLLE1BQU0sR0FBRztBQUMzQixXQUFLLE1BQU0sR0FBRyxFQUFFLEVBQUUsUUFBUSxTQUFVQyxNQUFLO0FBQ3ZDLFlBQUksSUFBSUQsSUFBR0MsSUFBRyxNQUFNLFFBQVc7QUFDN0IsVUFBQUQsR0FBRUMsUUFBTyxDQUFDO0FBQUEsUUFDWjtBQUNBLFFBQUFELEtBQUksSUFBSUEsSUFBR0MsSUFBRztBQUFBLE1BQ2hCLENBQUM7QUFFRCxZQUFNLE1BQU0sS0FBSyxLQUFLLFNBQVM7QUFDL0IsWUFBTSxjQUFjTSxZQUFXLENBQUMsQ0FBQyxJQUFJLE1BQU0sU0FBUyxJQUFJO0FBRXhELFVBQUksQ0FBQyxhQUFhO0FBQ2hCLFFBQUFQLEdBQUUsT0FBTztBQUFBLE1BQ1gsV0FBVyxJQUFJQSxJQUFHLEdBQUcsTUFBTSxRQUFXO0FBQ3BDLFFBQUFBLEdBQUUsT0FBTyxDQUFDLEtBQUs7QUFBQSxNQUNqQixXQUFXLE1BQU0sUUFBUSxJQUFJQSxJQUFHLEdBQUcsQ0FBQyxHQUFHO0FBQ3JDLFFBQUNBLEdBQUUsS0FBbUIsS0FBSyxLQUFLO0FBQUEsTUFDbEMsT0FBTztBQUNMLFFBQUFBLEdBQUUsT0FBTyxDQUFDLElBQUlBLElBQUcsR0FBRyxHQUFHLEtBQUs7QUFBQSxNQUM5QjtBQUFBLElBQ0Y7QUFFQSxhQUFTLE9BQ1AsS0FDQSxLQUNBLE1BQTBCLFFBQzFCTyxVQUNBO0FBQ0EsVUFBSSxPQUFPLE1BQU0sYUFBYSxDQUFDLFdBQVcsS0FBSyxHQUFHLEdBQUc7QUFDbkQsWUFBSSxNQUFNLFVBQVUsS0FBSyxLQUFLLEdBQUcsTUFBTTtBQUFPO0FBQUEsTUFDaEQ7QUFFQSxZQUFNLFFBQVEsQ0FBQyxJQUFJLE1BQU0sU0FBUyxHQUFHLEtBQUssU0FBUyxHQUFHLElBQUksT0FBTyxHQUFHLElBQUk7QUFDeEUsYUFBT0QsT0FBTSxLQUFLLE9BQU9DLFFBQU87QUFFaEMsWUFBTUgsU0FBUSxJQUFJLFNBQVMsR0FBRztBQUM5QixVQUFJQSxRQUFPO0FBQ1QsbUJBQVdMLE9BQUtLLFFBQU87QUFDckIsaUJBQU9FLE9BQU1QLEtBQUcsT0FBT1EsUUFBTztBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxhQUFTLGVBQWUsS0FBc0I7QUFDNUMsYUFBTyxTQUFTLFNBQVMsR0FBRyxFQUFFO0FBQUEsUUFDNUIsQ0FBQ1IsUUFBTSxPQUFPLElBQUksTUFBTSxPQUFPQSxHQUFDLE1BQU07QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFFQSxRQUFJLFdBQXFCLENBQUM7QUFHMUIsUUFBSSxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQ3ZCLGlCQUFXLEtBQUssTUFBTSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDNUMsYUFBTyxLQUFLLE1BQU0sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDO0FBQUEsSUFDekM7QUFFQSxhQUFTSSxLQUFJLEdBQUdBLEtBQUksS0FBSyxRQUFRQSxNQUFLO0FBQ3BDLFlBQU0sTUFBTSxLQUFLQTtBQUVqQixVQUFJLFNBQVMsS0FBSyxHQUFHLEdBQUc7QUFDdEIsY0FBTUssTUFBSSxJQUFJLE1BQU0sbUJBQW1CO0FBQ3ZDLFFBQUFWLFFBQU9VLE9BQUssSUFBSTtBQUNoQixjQUFNLENBQUMsRUFBRSxLQUFLLEtBQUssSUFBSUE7QUFFdkIsWUFBSSxNQUFNLE1BQU0sTUFBTTtBQUNwQixnQkFBTSxlQUFlLFVBQVU7QUFDL0IsaUJBQU8sS0FBSyxjQUFjLEdBQUc7QUFBQSxRQUMvQixPQUFPO0FBQ0wsaUJBQU8sS0FBSyxPQUFPLEdBQUc7QUFBQSxRQUN4QjtBQUFBLE1BQ0YsV0FDRSxXQUFXLEtBQUssR0FBRyxLQUFLLElBQUksTUFBTSxXQUFXLElBQUksUUFBUSxVQUFVLEVBQUUsQ0FBQyxHQUN0RTtBQUNBLGNBQU1BLE1BQUksSUFBSSxNQUFNLFlBQVk7QUFDaEMsUUFBQVYsUUFBT1UsT0FBSyxJQUFJO0FBQ2hCLGVBQU9BLElBQUUsSUFBSSxPQUFPLEtBQUssS0FBSztBQUFBLE1BQ2hDLFdBQVcsUUFBUSxLQUFLLEdBQUcsR0FBRztBQUM1QixjQUFNQSxNQUFJLElBQUksTUFBTSxTQUFTO0FBQzdCLFFBQUFWLFFBQU9VLE9BQUssSUFBSTtBQUNoQixjQUFNLENBQUMsRUFBRSxHQUFHLElBQUlBO0FBQ2hCLGNBQU0sT0FBTyxLQUFLTCxLQUFJO0FBQ3RCLFlBQ0UsU0FBUyxVQUNULENBQUMsS0FBSyxLQUFLLElBQUksS0FDZixDQUFDLElBQUksTUFBTSxPQUFPLEdBQUcsS0FDckIsQ0FBQyxNQUFNLGFBQ04sSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLE9BQzVDO0FBQ0EsaUJBQU8sS0FBSyxNQUFNLEdBQUc7QUFDckIsVUFBQUE7QUFBQSxRQUNGLFdBQVcsaUJBQWlCLEtBQUssSUFBSSxHQUFHO0FBQ3RDLGlCQUFPLEtBQUssU0FBUyxRQUFRLEdBQUc7QUFDaEMsVUFBQUE7QUFBQSxRQUNGLE9BQU87QUFDTCxpQkFBTyxLQUFLLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLE1BQU0sR0FBRztBQUFBLFFBQ3REO0FBQUEsTUFDRixXQUFXLFVBQVUsS0FBSyxHQUFHLEdBQUc7QUFDOUIsY0FBTSxVQUFVLElBQUksTUFBTSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUU7QUFFekMsWUFBSSxTQUFTO0FBQ2IsaUJBQVNNLE1BQUksR0FBR0EsTUFBSSxRQUFRLFFBQVFBLE9BQUs7QUFDdkMsZ0JBQU0sT0FBTyxJQUFJLE1BQU1BLE1BQUksQ0FBQztBQUU1QixjQUFJLFNBQVMsS0FBSztBQUNoQixtQkFBTyxRQUFRQSxNQUFJLE1BQU0sR0FBRztBQUM1QjtBQUFBLFVBQ0Y7QUFFQSxjQUFJLFdBQVcsS0FBSyxRQUFRQSxJQUFFLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRztBQUNqRCxtQkFBTyxRQUFRQSxNQUFJLEtBQUssTUFBTSxPQUFPLEVBQUUsSUFBSSxHQUFHO0FBQzlDLHFCQUFTO0FBQ1Q7QUFBQSxVQUNGO0FBRUEsY0FDRSxXQUFXLEtBQUssUUFBUUEsSUFBRSxLQUMxQiwwQkFBMEIsS0FBSyxJQUFJLEdBQ25DO0FBQ0EsbUJBQU8sUUFBUUEsTUFBSSxNQUFNLEdBQUc7QUFDNUIscUJBQVM7QUFDVDtBQUFBLFVBQ0Y7QUFFQSxjQUFJLFFBQVFBLE1BQUksTUFBTSxRQUFRQSxNQUFJLEdBQUcsTUFBTSxJQUFJLEdBQUc7QUFDaEQsbUJBQU8sUUFBUUEsTUFBSSxJQUFJLE1BQU1BLE1BQUksQ0FBQyxHQUFHLEdBQUc7QUFDeEMscUJBQVM7QUFDVDtBQUFBLFVBQ0YsT0FBTztBQUNMLG1CQUFPLFFBQVFBLE1BQUksSUFBSSxNQUFNLFNBQVMsUUFBUUEsSUFBRSxJQUFJLEtBQUssTUFBTSxHQUFHO0FBQUEsVUFDcEU7QUFBQSxRQUNGO0FBRUEsY0FBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLE1BQU0sRUFBRTtBQUMxQixZQUFJLENBQUMsVUFBVSxRQUFRLEtBQUs7QUFDMUIsY0FDRSxLQUFLTixLQUFJLE1BQ1QsQ0FBQyxjQUFjLEtBQUssS0FBS0EsS0FBSSxFQUFFLEtBQy9CLENBQUMsSUFBSSxNQUFNLE9BQU8sR0FBRyxNQUNwQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksT0FDNUM7QUFDQSxtQkFBTyxLQUFLLEtBQUtBLEtBQUksSUFBSSxHQUFHO0FBQzVCLFlBQUFBO0FBQUEsVUFDRixXQUFXLEtBQUtBLEtBQUksTUFBTSxpQkFBaUIsS0FBSyxLQUFLQSxLQUFJLEVBQUUsR0FBRztBQUM1RCxtQkFBTyxLQUFLLEtBQUtBLEtBQUksT0FBTyxRQUFRLEdBQUc7QUFDdkMsWUFBQUE7QUFBQSxVQUNGLE9BQU87QUFDTCxtQkFBTyxLQUFLLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLE1BQU0sR0FBRztBQUFBLFVBQ3REO0FBQUEsUUFDRjtBQUFBLE1BQ0YsT0FBTztBQUNMLFlBQUksQ0FBQyxNQUFNLGFBQWEsTUFBTSxVQUFVLEdBQUcsTUFBTSxPQUFPO0FBQ3RELFVBQUFHLE1BQUssRUFBRSxLQUFLLE1BQU0sUUFBUSxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksTUFBTSxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQ3RFO0FBQ0EsWUFBSSxXQUFXO0FBQ2IsVUFBQUEsTUFBSyxFQUFFLEtBQUssR0FBRyxLQUFLLE1BQU1ILEtBQUksQ0FBQyxDQUFDO0FBQ2hDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsZUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxRQUFRLEdBQUc7QUFDbkQsVUFBSSxDQUFDLE9BQU9HLE9BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHO0FBQ2pDLGVBQU9BLE9BQU0sS0FBSyxLQUFLO0FBRXZCLFlBQUksUUFBUSxNQUFNO0FBQ2hCLHFCQUFXUCxPQUFLLFFBQVEsTUFBTTtBQUM1QixtQkFBT08sT0FBTVAsS0FBRyxLQUFLO0FBQUEsVUFDdkI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxlQUFXLE9BQU8sT0FBTyxLQUFLLE1BQU0sS0FBSyxHQUFHO0FBQzFDLFVBQUksQ0FBQyxPQUFPTyxPQUFNLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRztBQUNqQyxjQUFNLFFBQVEsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSTtBQUM3QztBQUFBLFVBQ0VBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsZUFBVyxPQUFPLE9BQU8sS0FBSyxNQUFNLE9BQU8sR0FBRztBQUM1QyxVQUFJLENBQUMsT0FBT0EsT0FBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLEtBQUssSUFBSSxNQUFNLFNBQVMsR0FBRyxHQUFHO0FBQzVEO0FBQUEsVUFDRUE7QUFBQSxVQUNBO0FBQUEsVUFDQSxDQUFDO0FBQUEsVUFDRDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFFBQUksWUFBWTtBQUNkLE1BQUFBLE1BQUssUUFBUSxDQUFDO0FBQ2QsaUJBQVcsT0FBTyxVQUFVO0FBQzFCLFFBQUFBLE1BQUssTUFBTSxLQUFLLEdBQUc7QUFBQSxNQUNyQjtBQUFBLElBQ0YsT0FBTztBQUNMLGlCQUFXLE9BQU8sVUFBVTtBQUMxQixRQUFBQSxNQUFLLEVBQUUsS0FBSyxHQUFHO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBRUEsV0FBT0E7QUFBQSxFQUNUOzs7QUM1b0JPLFdBQVMsYUFBYTtBQUMzQixVQUFNLE9BQU9JLE9BQU0sS0FBSyxJQUFJO0FBQzVCLFVBQU0sVUFBVSxJQUFJO0FBQUEsTUFDbEIsT0FBTyxRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUFBLElBQzdEO0FBRUEsV0FBTyxFQUFFLFFBQVE7QUFBQSxFQUNuQjs7O0FDWkEsTUFBSTtBQUVKLFdBQVMsd0JBQXdCO0FBQy9CLFFBQUksQ0FBQyxZQUFZO0FBQ2YsT0FBQyxFQUFFLFNBQVMsV0FBVyxJQUFJLFdBQVc7QUFBQSxJQUN4QztBQUVBLFdBQU87QUFBQSxFQUNUO0FBRU8sV0FBUyxlQUFlLFlBQW9CO0FBQ2pELFVBQU0sVUFBVSxzQkFBc0I7QUFFdEMsUUFBSSxXQUFXLFdBQVcsT0FBTyxHQUFHO0FBQ2xDLFlBQU0sU0FBUyxRQUFRLElBQUksT0FBTyxXQUFXLE1BQU0sQ0FBQyxDQUFDO0FBRXJELGFBQU8sVUFBVSxDQUFDLE9BQU87QUFBQSxJQUMzQjtBQUVBLFdBQU8sUUFBUSxJQUFJLFVBQVUsR0FBRztBQUFBLEVBQ2xDOzs7QUM1Q0EsTUFBQUMsaUJBQUE7QUFBQSxXQUFBQSxnQkFBQTtBQUFBLG9CQUFBQztBQUFBLElBQUEsaUJBQUFDO0FBQUEsSUFBQSxlQUFBQztBQUFBLElBQUEsZUFBQUM7QUFBQSxJQUFBLGNBQUFDO0FBQUEsSUFBQSxtQkFBQUM7QUFBQSxJQUFBLGtCQUFBQztBQUFBLElBQUEsWUFBQUM7QUFBQSxJQUFBLGlCQUFBQztBQUFBLElBQUEsYUFBQUM7QUFBQSxJQUFBLGdCQUFBQztBQUFBLElBQUEsZUFBQUM7QUFBQSxJQUFBLFdBQUFDO0FBQUEsSUFBQSxpQkFBQUM7QUFBQSxJQUFBLHdCQUFBQztBQUFBOzs7QUNNTyxNQUFNQyxvQkFBbUI7QUFDekIsTUFBTUMsb0JBQW1CO0FBQ3pCLE1BQU1DLG9CQUFtQjtBQUN6QixNQUFNQyxvQkFBbUI7QUFHekIsTUFBTUMsWUFBVztBQUNqQixNQUFNQyxzQkFBcUI7QUFDM0IsTUFBTUMsdUJBQXNCO0FBRTVCLE1BQU1DLGNBQWE7QUFDbkIsTUFBTUMsc0JBQXFCOzs7QUNEM0IsV0FBU0MsWUFBV0MsT0FBYztBQUN2QyxRQUFJLE9BQU9BLFVBQVMsVUFBVTtBQUM1QixZQUFNLElBQUk7QUFBQSxRQUNSLG1DQUFtQyxLQUFLLFVBQVVBLEtBQUk7QUFBQSxNQUN4RDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRU8sV0FBU0Msc0JBQXFCLE1BQXVCO0FBQzFELFdBQU8sU0FBU0M7QUFBQSxFQUNsQjtBQUVPLFdBQVNDLGlCQUFnQixNQUF1QjtBQUNyRCxXQUFPRixzQkFBcUIsSUFBSSxLQUFLLFNBQVNHO0FBQUEsRUFDaEQ7QUFFTyxXQUFTQyxxQkFBb0IsTUFBdUI7QUFDekQsV0FDRyxRQUFRQyxxQkFBb0IsUUFBUUMscUJBQ3BDLFFBQVFDLHFCQUFvQixRQUFRQztBQUFBLEVBRXpDO0FBR08sV0FBU0MsaUJBQ2RWLE9BQ0EsZ0JBQ0EsV0FDQUcsa0JBQ1E7QUFDUixRQUFJLE1BQU07QUFDVixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLFlBQVk7QUFDaEIsUUFBSSxPQUFPO0FBQ1gsUUFBSTtBQUNKLGFBQVNRLEtBQUksR0FBRyxNQUFNWCxNQUFLLFFBQVFXLE1BQUssS0FBSyxFQUFFQSxJQUFHO0FBQ2hELFVBQUlBLEtBQUk7QUFBSyxlQUFPWCxNQUFLLFdBQVdXLEVBQUM7QUFBQSxlQUM1QlIsaUJBQWdCLElBQUs7QUFBRztBQUFBO0FBQzVCLGVBQU9EO0FBRVosVUFBSUMsaUJBQWdCLElBQUssR0FBRztBQUMxQixZQUFJLGNBQWNRLEtBQUksS0FBSyxTQUFTLEdBQUc7QUFBQSxRQUV2QyxXQUFXLGNBQWNBLEtBQUksS0FBSyxTQUFTLEdBQUc7QUFDNUMsY0FDRSxJQUFJLFNBQVMsS0FDYixzQkFBc0IsS0FDdEIsSUFBSSxXQUFXLElBQUksU0FBUyxDQUFDLE1BQU1DLGFBQ25DLElBQUksV0FBVyxJQUFJLFNBQVMsQ0FBQyxNQUFNQSxXQUNuQztBQUNBLGdCQUFJLElBQUksU0FBUyxHQUFHO0FBQ2xCLG9CQUFNLGlCQUFpQixJQUFJLFlBQVksU0FBUztBQUNoRCxrQkFBSSxtQkFBbUIsSUFBSTtBQUN6QixzQkFBTTtBQUNOLG9DQUFvQjtBQUFBLGNBQ3RCLE9BQU87QUFDTCxzQkFBTSxJQUFJLE1BQU0sR0FBRyxjQUFjO0FBQ2pDLG9DQUFvQixJQUFJLFNBQVMsSUFBSSxJQUFJLFlBQVksU0FBUztBQUFBLGNBQ2hFO0FBQ0EsMEJBQVlEO0FBQ1oscUJBQU87QUFDUDtBQUFBLFlBQ0YsV0FBVyxJQUFJLFdBQVcsS0FBSyxJQUFJLFdBQVcsR0FBRztBQUMvQyxvQkFBTTtBQUNOLGtDQUFvQjtBQUNwQiwwQkFBWUE7QUFDWixxQkFBTztBQUNQO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLGdCQUFnQjtBQUNsQixnQkFBSSxJQUFJLFNBQVM7QUFBRyxxQkFBTyxHQUFHO0FBQUE7QUFDekIsb0JBQU07QUFDWCxnQ0FBb0I7QUFBQSxVQUN0QjtBQUFBLFFBQ0YsT0FBTztBQUNMLGNBQUksSUFBSSxTQUFTO0FBQUcsbUJBQU8sWUFBWVgsTUFBSyxNQUFNLFlBQVksR0FBR1csRUFBQztBQUFBO0FBQzdELGtCQUFNWCxNQUFLLE1BQU0sWUFBWSxHQUFHVyxFQUFDO0FBQ3RDLDhCQUFvQkEsS0FBSSxZQUFZO0FBQUEsUUFDdEM7QUFDQSxvQkFBWUE7QUFDWixlQUFPO0FBQUEsTUFDVCxXQUFXLFNBQVNDLGFBQVksU0FBUyxJQUFJO0FBQzNDLFVBQUU7QUFBQSxNQUNKLE9BQU87QUFDTCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVPLFdBQVNDLFNBQ2RDLE1BQ0EsWUFDUTtBQUNSLFVBQU0sTUFBMEIsV0FBVyxPQUFPLFdBQVc7QUFDN0QsVUFBTSxPQUFlLFdBQVcsU0FDN0IsV0FBVyxRQUFRLE9BQU8sV0FBVyxPQUFPO0FBQy9DLFFBQUksQ0FBQztBQUFLLGFBQU87QUFDakIsUUFBSSxRQUFRLFdBQVc7QUFBTSxhQUFPLE1BQU07QUFDMUMsV0FBTyxNQUFNQSxPQUFNO0FBQUEsRUFDckI7QUFFQSxNQUFNQyx3QkFBK0M7QUFBQSxJQUNuRCxLQUFVO0FBQUEsSUFDVixNQUFVO0FBQUEsSUFDVixNQUFVO0FBQUEsSUFDVixNQUFVO0FBQUEsSUFDVixNQUFVO0FBQUEsSUFDVixLQUFVO0FBQUEsRUFDWjtBQUVPLFdBQVNDLGtCQUFpQixRQUF3QjtBQUN2RCxXQUFPLE9BQU8sV0FBVyxTQUFTLENBQUNDLFFBQU07QUFDdkMsYUFBT0Ysc0JBQXFCRSxRQUFNQTtBQUFBLElBQ3BDLENBQUM7QUFBQSxFQUNIOzs7QUY3R08sTUFBTUMsT0FBTTtBQUNaLE1BQU1DLGFBQVk7QUFNbEIsV0FBU0MsWUFBVyxjQUFnQztBQUN6RCxRQUFJLGlCQUFpQjtBQUNyQixRQUFJLGVBQWU7QUFDbkIsUUFBSSxtQkFBbUI7QUFFdkIsYUFBU0MsS0FBSSxhQUFhLFNBQVMsR0FBR0EsTUFBSyxJQUFJQSxNQUFLO0FBQ2xELFVBQUlDO0FBRUosWUFBTSxFQUFFLE1BQUFDLE1BQUssSUFBSTtBQUNqQixVQUFJRixNQUFLLEdBQUc7QUFDVixRQUFBQyxRQUFPLGFBQWFEO0FBQUEsTUFDdEIsV0FBVyxDQUFDLGdCQUFnQjtBQUMxQixZQUFJLE9BQU9FLE9BQU0sUUFBUSxZQUFZO0FBQ25DLGdCQUFNLElBQUksVUFBVSxrREFBa0Q7QUFBQSxRQUN4RTtBQUNBLFFBQUFELFFBQU9DLE1BQUssSUFBSTtBQUFBLE1BQ2xCLE9BQU87QUFDTCxZQUNFLE9BQU9BLE9BQU0sS0FBSyxRQUFRLGNBQWMsT0FBT0EsT0FBTSxRQUFRLFlBQzdEO0FBQ0EsZ0JBQU0sSUFBSSxVQUFVLHlDQUF5QztBQUFBLFFBQy9EO0FBQ0EsUUFBQUQsUUFBT0MsTUFBSyxJQUFJO0FBSWhCLFlBQ0VELFVBQVMsVUFDVEEsTUFBSyxNQUFNLEdBQUcsQ0FBQyxFQUFFLFlBQVksTUFBTSxHQUFHLGVBQWUsWUFBWSxPQUNqRTtBQUNBLFVBQUFBLFFBQU8sR0FBRztBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBRUEsTUFBQUUsWUFBV0YsS0FBSTtBQUVmLFlBQU0sTUFBTUEsTUFBSztBQUdqQixVQUFJLFFBQVE7QUFBRztBQUVmLFVBQUksVUFBVTtBQUNkLFVBQUksU0FBUztBQUNiLFVBQUlHLGNBQWE7QUFDakIsWUFBTSxPQUFPSCxNQUFLLFdBQVcsQ0FBQztBQUc5QixVQUFJLE1BQU0sR0FBRztBQUNYLFlBQUlJLGlCQUFnQixJQUFJLEdBQUc7QUFLekIsVUFBQUQsY0FBYTtBQUViLGNBQUlDLGlCQUFnQkosTUFBSyxXQUFXLENBQUMsQ0FBQyxHQUFHO0FBRXZDLGdCQUFJSyxNQUFJO0FBQ1IsZ0JBQUksT0FBT0E7QUFFWCxtQkFBT0EsTUFBSSxLQUFLLEVBQUVBLEtBQUc7QUFDbkIsa0JBQUlELGlCQUFnQkosTUFBSyxXQUFXSyxHQUFDLENBQUM7QUFBRztBQUFBLFlBQzNDO0FBQ0EsZ0JBQUlBLE1BQUksT0FBT0EsUUFBTSxNQUFNO0FBQ3pCLG9CQUFNLFlBQVlMLE1BQUssTUFBTSxNQUFNSyxHQUFDO0FBRXBDLHFCQUFPQTtBQUVQLHFCQUFPQSxNQUFJLEtBQUssRUFBRUEsS0FBRztBQUNuQixvQkFBSSxDQUFDRCxpQkFBZ0JKLE1BQUssV0FBV0ssR0FBQyxDQUFDO0FBQUc7QUFBQSxjQUM1QztBQUNBLGtCQUFJQSxNQUFJLE9BQU9BLFFBQU0sTUFBTTtBQUV6Qix1QkFBT0E7QUFFUCx1QkFBT0EsTUFBSSxLQUFLLEVBQUVBLEtBQUc7QUFDbkIsc0JBQUlELGlCQUFnQkosTUFBSyxXQUFXSyxHQUFDLENBQUM7QUFBRztBQUFBLGdCQUMzQztBQUNBLG9CQUFJQSxRQUFNLEtBQUs7QUFFYiwyQkFBUyxPQUFPLGNBQWNMLE1BQUssTUFBTSxJQUFJO0FBQzdDLDRCQUFVSztBQUFBLGdCQUNaLFdBQVdBLFFBQU0sTUFBTTtBQUdyQiwyQkFBUyxPQUFPLGNBQWNMLE1BQUssTUFBTSxNQUFNSyxHQUFDO0FBQ2hELDRCQUFVQTtBQUFBLGdCQUNaO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxVQUNGLE9BQU87QUFDTCxzQkFBVTtBQUFBLFVBQ1o7QUFBQSxRQUNGLFdBQVdDLHFCQUFvQixJQUFJLEdBQUc7QUFHcEMsY0FBSU4sTUFBSyxXQUFXLENBQUMsTUFBTU8sYUFBWTtBQUNyQyxxQkFBU1AsTUFBSyxNQUFNLEdBQUcsQ0FBQztBQUN4QixzQkFBVTtBQUNWLGdCQUFJLE1BQU0sR0FBRztBQUNYLGtCQUFJSSxpQkFBZ0JKLE1BQUssV0FBVyxDQUFDLENBQUMsR0FBRztBQUd2QyxnQkFBQUcsY0FBYTtBQUNiLDBCQUFVO0FBQUEsY0FDWjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0YsV0FBV0MsaUJBQWdCLElBQUksR0FBRztBQUVoQyxrQkFBVTtBQUNWLFFBQUFELGNBQWE7QUFBQSxNQUNmO0FBRUEsVUFDRSxPQUFPLFNBQVMsS0FDaEIsZUFBZSxTQUFTLEtBQ3hCLE9BQU8sWUFBWSxNQUFNLGVBQWUsWUFBWSxHQUNwRDtBQUVBO0FBQUEsTUFDRjtBQUVBLFVBQUksZUFBZSxXQUFXLEtBQUssT0FBTyxTQUFTLEdBQUc7QUFDcEQseUJBQWlCO0FBQUEsTUFDbkI7QUFDQSxVQUFJLENBQUMsa0JBQWtCO0FBQ3JCLHVCQUFlLEdBQUdILE1BQUssTUFBTSxPQUFPLE1BQU07QUFDMUMsMkJBQW1CRztBQUFBLE1BQ3JCO0FBRUEsVUFBSSxvQkFBb0IsZUFBZSxTQUFTO0FBQUc7QUFBQSxJQUNyRDtBQU9BLG1CQUFlSztBQUFBLE1BQ2I7QUFBQSxNQUNBLENBQUM7QUFBQSxNQUNEO0FBQUEsTUFDQUo7QUFBQSxJQUNGO0FBRUEsV0FBTyxrQkFBa0IsbUJBQW1CLE9BQU8sTUFBTSxnQkFBZ0I7QUFBQSxFQUMzRTtBQU1PLFdBQVNLLFdBQVVULE9BQXNCO0FBQzlDLElBQUFFLFlBQVdGLEtBQUk7QUFDZixVQUFNLE1BQU1BLE1BQUs7QUFDakIsUUFBSSxRQUFRO0FBQUcsYUFBTztBQUN0QixRQUFJLFVBQVU7QUFDZCxRQUFJO0FBQ0osUUFBSUcsY0FBYTtBQUNqQixVQUFNLE9BQU9ILE1BQUssV0FBVyxDQUFDO0FBRzlCLFFBQUksTUFBTSxHQUFHO0FBQ1gsVUFBSUksaUJBQWdCLElBQUksR0FBRztBQUt6QixRQUFBRCxjQUFhO0FBRWIsWUFBSUMsaUJBQWdCSixNQUFLLFdBQVcsQ0FBQyxDQUFDLEdBQUc7QUFFdkMsY0FBSUssTUFBSTtBQUNSLGNBQUksT0FBT0E7QUFFWCxpQkFBT0EsTUFBSSxLQUFLLEVBQUVBLEtBQUc7QUFDbkIsZ0JBQUlELGlCQUFnQkosTUFBSyxXQUFXSyxHQUFDLENBQUM7QUFBRztBQUFBLFVBQzNDO0FBQ0EsY0FBSUEsTUFBSSxPQUFPQSxRQUFNLE1BQU07QUFDekIsa0JBQU0sWUFBWUwsTUFBSyxNQUFNLE1BQU1LLEdBQUM7QUFFcEMsbUJBQU9BO0FBRVAsbUJBQU9BLE1BQUksS0FBSyxFQUFFQSxLQUFHO0FBQ25CLGtCQUFJLENBQUNELGlCQUFnQkosTUFBSyxXQUFXSyxHQUFDLENBQUM7QUFBRztBQUFBLFlBQzVDO0FBQ0EsZ0JBQUlBLE1BQUksT0FBT0EsUUFBTSxNQUFNO0FBRXpCLHFCQUFPQTtBQUVQLHFCQUFPQSxNQUFJLEtBQUssRUFBRUEsS0FBRztBQUNuQixvQkFBSUQsaUJBQWdCSixNQUFLLFdBQVdLLEdBQUMsQ0FBQztBQUFHO0FBQUEsY0FDM0M7QUFDQSxrQkFBSUEsUUFBTSxLQUFLO0FBS2IsdUJBQU8sT0FBTyxjQUFjTCxNQUFLLE1BQU0sSUFBSTtBQUFBLGNBQzdDLFdBQVdLLFFBQU0sTUFBTTtBQUdyQix5QkFBUyxPQUFPLGNBQWNMLE1BQUssTUFBTSxNQUFNSyxHQUFDO0FBQ2hELDBCQUFVQTtBQUFBLGNBQ1o7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0YsT0FBTztBQUNMLG9CQUFVO0FBQUEsUUFDWjtBQUFBLE1BQ0YsV0FBV0MscUJBQW9CLElBQUksR0FBRztBQUdwQyxZQUFJTixNQUFLLFdBQVcsQ0FBQyxNQUFNTyxhQUFZO0FBQ3JDLG1CQUFTUCxNQUFLLE1BQU0sR0FBRyxDQUFDO0FBQ3hCLG9CQUFVO0FBQ1YsY0FBSSxNQUFNLEdBQUc7QUFDWCxnQkFBSUksaUJBQWdCSixNQUFLLFdBQVcsQ0FBQyxDQUFDLEdBQUc7QUFHdkMsY0FBQUcsY0FBYTtBQUNiLHdCQUFVO0FBQUEsWUFDWjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsV0FBV0MsaUJBQWdCLElBQUksR0FBRztBQUdoQyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUk7QUFDSixRQUFJLFVBQVUsS0FBSztBQUNqQixhQUFPSTtBQUFBLFFBQ0xSLE1BQUssTUFBTSxPQUFPO0FBQUEsUUFDbEIsQ0FBQ0c7QUFBQSxRQUNEO0FBQUEsUUFDQUM7QUFBQSxNQUNGO0FBQUEsSUFDRixPQUFPO0FBQ0wsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLEtBQUssV0FBVyxLQUFLLENBQUNEO0FBQVksYUFBTztBQUM3QyxRQUFJLEtBQUssU0FBUyxLQUFLQyxpQkFBZ0JKLE1BQUssV0FBVyxNQUFNLENBQUMsQ0FBQyxHQUFHO0FBQ2hFLGNBQVE7QUFBQSxJQUNWO0FBQ0EsUUFBSSxXQUFXLFFBQVc7QUFDeEIsVUFBSUcsYUFBWTtBQUNkLFlBQUksS0FBSyxTQUFTO0FBQUcsaUJBQU8sS0FBSztBQUFBO0FBQzVCLGlCQUFPO0FBQUEsTUFDZCxXQUFXLEtBQUssU0FBUyxHQUFHO0FBQzFCLGVBQU87QUFBQSxNQUNULE9BQU87QUFDTCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0YsV0FBV0EsYUFBWTtBQUNyQixVQUFJLEtBQUssU0FBUztBQUFHLGVBQU8sR0FBRyxXQUFXO0FBQUE7QUFDckMsZUFBTyxHQUFHO0FBQUEsSUFDakIsV0FBVyxLQUFLLFNBQVMsR0FBRztBQUMxQixhQUFPLFNBQVM7QUFBQSxJQUNsQixPQUFPO0FBQ0wsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBTU8sV0FBU0EsWUFBV0gsT0FBdUI7QUFDaEQsSUFBQUUsWUFBV0YsS0FBSTtBQUNmLFVBQU0sTUFBTUEsTUFBSztBQUNqQixRQUFJLFFBQVE7QUFBRyxhQUFPO0FBRXRCLFVBQU0sT0FBT0EsTUFBSyxXQUFXLENBQUM7QUFDOUIsUUFBSUksaUJBQWdCLElBQUksR0FBRztBQUN6QixhQUFPO0FBQUEsSUFDVCxXQUFXRSxxQkFBb0IsSUFBSSxHQUFHO0FBR3BDLFVBQUksTUFBTSxLQUFLTixNQUFLLFdBQVcsQ0FBQyxNQUFNTyxhQUFZO0FBQ2hELFlBQUlILGlCQUFnQkosTUFBSyxXQUFXLENBQUMsQ0FBQztBQUFHLGlCQUFPO0FBQUEsTUFDbEQ7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFNTyxXQUFTVSxTQUFRLE9BQXlCO0FBQy9DLFVBQU0sYUFBYSxNQUFNO0FBQ3pCLFFBQUksZUFBZTtBQUFHLGFBQU87QUFFN0IsUUFBSTtBQUNKLFFBQUksWUFBMkI7QUFDL0IsYUFBU1gsS0FBSSxHQUFHQSxLQUFJLFlBQVksRUFBRUEsSUFBRztBQUNuQyxZQUFNQyxRQUFPLE1BQU1EO0FBQ25CLE1BQUFHLFlBQVdGLEtBQUk7QUFDZixVQUFJQSxNQUFLLFNBQVMsR0FBRztBQUNuQixZQUFJLFdBQVc7QUFBVyxtQkFBUyxZQUFZQTtBQUFBO0FBQzFDLG9CQUFVLEtBQUtBO0FBQUEsTUFDdEI7QUFBQSxJQUNGO0FBRUEsUUFBSSxXQUFXO0FBQVcsYUFBTztBQWVqQyxRQUFJLGVBQWU7QUFDbkIsUUFBSSxhQUFhO0FBQ2pCLElBQUFXLFFBQU8sYUFBYSxJQUFJO0FBQ3hCLFFBQUlQLGlCQUFnQixVQUFVLFdBQVcsQ0FBQyxDQUFDLEdBQUc7QUFDNUMsUUFBRTtBQUNGLFlBQU0sV0FBVyxVQUFVO0FBQzNCLFVBQUksV0FBVyxHQUFHO0FBQ2hCLFlBQUlBLGlCQUFnQixVQUFVLFdBQVcsQ0FBQyxDQUFDLEdBQUc7QUFDNUMsWUFBRTtBQUNGLGNBQUksV0FBVyxHQUFHO0FBQ2hCLGdCQUFJQSxpQkFBZ0IsVUFBVSxXQUFXLENBQUMsQ0FBQztBQUFHLGdCQUFFO0FBQUEsaUJBQzNDO0FBRUgsNkJBQWU7QUFBQSxZQUNqQjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxRQUFJLGNBQWM7QUFFaEIsYUFBTyxhQUFhLE9BQU8sUUFBUSxFQUFFLFlBQVk7QUFDL0MsWUFBSSxDQUFDQSxpQkFBZ0IsT0FBTyxXQUFXLFVBQVUsQ0FBQztBQUFHO0FBQUEsTUFDdkQ7QUFHQSxVQUFJLGNBQWM7QUFBRyxpQkFBUyxLQUFLLE9BQU8sTUFBTSxVQUFVO0FBQUEsSUFDNUQ7QUFFQSxXQUFPSyxXQUFVLE1BQU07QUFBQSxFQUN6QjtBQVVPLFdBQVNHLFVBQVNDLE9BQWMsSUFBb0I7QUFDekQsSUFBQVgsWUFBV1csS0FBSTtBQUNmLElBQUFYLFlBQVcsRUFBRTtBQUViLFFBQUlXLFVBQVM7QUFBSSxhQUFPO0FBRXhCLFVBQU0sV0FBV2YsU0FBUWUsS0FBSTtBQUM3QixVQUFNLFNBQVNmLFNBQVEsRUFBRTtBQUV6QixRQUFJLGFBQWE7QUFBUSxhQUFPO0FBRWhDLElBQUFlLFFBQU8sU0FBUyxZQUFZO0FBQzVCLFNBQUssT0FBTyxZQUFZO0FBRXhCLFFBQUlBLFVBQVM7QUFBSSxhQUFPO0FBR3hCLFFBQUksWUFBWTtBQUNoQixRQUFJLFVBQVVBLE1BQUs7QUFDbkIsV0FBTyxZQUFZLFNBQVMsRUFBRSxXQUFXO0FBQ3ZDLFVBQUlBLE1BQUssV0FBVyxTQUFTLE1BQU1DO0FBQXFCO0FBQUEsSUFDMUQ7QUFFQSxXQUFPLFVBQVUsSUFBSSxXQUFXLEVBQUUsU0FBUztBQUN6QyxVQUFJRCxNQUFLLFdBQVcsVUFBVSxDQUFDLE1BQU1DO0FBQXFCO0FBQUEsSUFDNUQ7QUFDQSxVQUFNLFVBQVUsVUFBVTtBQUcxQixRQUFJLFVBQVU7QUFDZCxRQUFJLFFBQVEsR0FBRztBQUNmLFdBQU8sVUFBVSxPQUFPLEVBQUUsU0FBUztBQUNqQyxVQUFJLEdBQUcsV0FBVyxPQUFPLE1BQU1BO0FBQXFCO0FBQUEsSUFDdEQ7QUFFQSxXQUFPLFFBQVEsSUFBSSxTQUFTLEVBQUUsT0FBTztBQUNuQyxVQUFJLEdBQUcsV0FBVyxRQUFRLENBQUMsTUFBTUE7QUFBcUI7QUFBQSxJQUN4RDtBQUNBLFVBQU0sUUFBUSxRQUFRO0FBR3RCLFVBQU0sU0FBUyxVQUFVLFFBQVEsVUFBVTtBQUMzQyxRQUFJLGdCQUFnQjtBQUNwQixRQUFJZixLQUFJO0FBQ1IsV0FBT0EsTUFBSyxRQUFRLEVBQUVBLElBQUc7QUFDdkIsVUFBSUEsT0FBTSxRQUFRO0FBQ2hCLFlBQUksUUFBUSxRQUFRO0FBQ2xCLGNBQUksR0FBRyxXQUFXLFVBQVVBLEVBQUMsTUFBTWUsc0JBQXFCO0FBR3RELG1CQUFPLE9BQU8sTUFBTSxVQUFVZixLQUFJLENBQUM7QUFBQSxVQUNyQyxXQUFXQSxPQUFNLEdBQUc7QUFHbEIsbUJBQU8sT0FBTyxNQUFNLFVBQVVBLEVBQUM7QUFBQSxVQUNqQztBQUFBLFFBQ0Y7QUFDQSxZQUFJLFVBQVUsUUFBUTtBQUNwQixjQUFJYyxNQUFLLFdBQVcsWUFBWWQsRUFBQyxNQUFNZSxzQkFBcUI7QUFHMUQsNEJBQWdCZjtBQUFBLFVBQ2xCLFdBQVdBLE9BQU0sR0FBRztBQUdsQiw0QkFBZ0I7QUFBQSxVQUNsQjtBQUFBLFFBQ0Y7QUFDQTtBQUFBLE1BQ0Y7QUFDQSxZQUFNLFdBQVdjLE1BQUssV0FBVyxZQUFZZCxFQUFDO0FBQzlDLFlBQU0sU0FBUyxHQUFHLFdBQVcsVUFBVUEsRUFBQztBQUN4QyxVQUFJLGFBQWE7QUFBUTtBQUFBLGVBQ2hCLGFBQWFlO0FBQXFCLHdCQUFnQmY7QUFBQSxJQUM3RDtBQUlBLFFBQUlBLE9BQU0sVUFBVSxrQkFBa0IsSUFBSTtBQUN4QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksTUFBTTtBQUNWLFFBQUksa0JBQWtCO0FBQUksc0JBQWdCO0FBRzFDLFNBQUtBLEtBQUksWUFBWSxnQkFBZ0IsR0FBR0EsTUFBSyxTQUFTLEVBQUVBLElBQUc7QUFDekQsVUFBSUEsT0FBTSxXQUFXYyxNQUFLLFdBQVdkLEVBQUMsTUFBTWUsc0JBQXFCO0FBQy9ELFlBQUksSUFBSSxXQUFXO0FBQUcsaUJBQU87QUFBQTtBQUN4QixpQkFBTztBQUFBLE1BQ2Q7QUFBQSxJQUNGO0FBSUEsUUFBSSxJQUFJLFNBQVMsR0FBRztBQUNsQixhQUFPLE1BQU0sT0FBTyxNQUFNLFVBQVUsZUFBZSxLQUFLO0FBQUEsSUFDMUQsT0FBTztBQUNMLGlCQUFXO0FBQ1gsVUFBSSxPQUFPLFdBQVcsT0FBTyxNQUFNQTtBQUFxQixVQUFFO0FBQzFELGFBQU8sT0FBTyxNQUFNLFNBQVMsS0FBSztBQUFBLElBQ3BDO0FBQUEsRUFDRjtBQU1PLFdBQVNDLGtCQUFpQmYsT0FBc0I7QUFFckQsUUFBSSxPQUFPQSxVQUFTO0FBQVUsYUFBT0E7QUFDckMsUUFBSUEsTUFBSyxXQUFXO0FBQUcsYUFBTztBQUU5QixVQUFNLGVBQWVGLFNBQVFFLEtBQUk7QUFFakMsUUFBSSxhQUFhLFVBQVUsR0FBRztBQUM1QixVQUFJLGFBQWEsV0FBVyxDQUFDLE1BQU1jLHNCQUFxQjtBQUd0RCxZQUFJLGFBQWEsV0FBVyxDQUFDLE1BQU1BLHNCQUFxQjtBQUN0RCxnQkFBTSxPQUFPLGFBQWEsV0FBVyxDQUFDO0FBQ3RDLGNBQUksU0FBU0UsdUJBQXNCLFNBQVNDLFdBQVU7QUFFcEQsbUJBQU8sZUFBZSxhQUFhLE1BQU0sQ0FBQztBQUFBLFVBQzVDO0FBQUEsUUFDRjtBQUFBLE1BQ0YsV0FBV1gscUJBQW9CLGFBQWEsV0FBVyxDQUFDLENBQUMsR0FBRztBQUcxRCxZQUNFLGFBQWEsV0FBVyxDQUFDLE1BQU1DLGVBQy9CLGFBQWEsV0FBVyxDQUFDLE1BQU1PLHNCQUMvQjtBQUVBLGlCQUFPLFVBQVU7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsV0FBT2Q7QUFBQSxFQUNUO0FBTU8sV0FBU2tCLFNBQVFsQixPQUFzQjtBQUM1QyxJQUFBRSxZQUFXRixLQUFJO0FBQ2YsVUFBTSxNQUFNQSxNQUFLO0FBQ2pCLFFBQUksUUFBUTtBQUFHLGFBQU87QUFDdEIsUUFBSSxVQUFVO0FBQ2QsUUFBSSxNQUFNO0FBQ1YsUUFBSSxlQUFlO0FBQ25CLFFBQUksU0FBUztBQUNiLFVBQU0sT0FBT0EsTUFBSyxXQUFXLENBQUM7QUFHOUIsUUFBSSxNQUFNLEdBQUc7QUFDWCxVQUFJSSxpQkFBZ0IsSUFBSSxHQUFHO0FBR3pCLGtCQUFVLFNBQVM7QUFFbkIsWUFBSUEsaUJBQWdCSixNQUFLLFdBQVcsQ0FBQyxDQUFDLEdBQUc7QUFFdkMsY0FBSUssTUFBSTtBQUNSLGNBQUksT0FBT0E7QUFFWCxpQkFBT0EsTUFBSSxLQUFLLEVBQUVBLEtBQUc7QUFDbkIsZ0JBQUlELGlCQUFnQkosTUFBSyxXQUFXSyxHQUFDLENBQUM7QUFBRztBQUFBLFVBQzNDO0FBQ0EsY0FBSUEsTUFBSSxPQUFPQSxRQUFNLE1BQU07QUFFekIsbUJBQU9BO0FBRVAsbUJBQU9BLE1BQUksS0FBSyxFQUFFQSxLQUFHO0FBQ25CLGtCQUFJLENBQUNELGlCQUFnQkosTUFBSyxXQUFXSyxHQUFDLENBQUM7QUFBRztBQUFBLFlBQzVDO0FBQ0EsZ0JBQUlBLE1BQUksT0FBT0EsUUFBTSxNQUFNO0FBRXpCLHFCQUFPQTtBQUVQLHFCQUFPQSxNQUFJLEtBQUssRUFBRUEsS0FBRztBQUNuQixvQkFBSUQsaUJBQWdCSixNQUFLLFdBQVdLLEdBQUMsQ0FBQztBQUFHO0FBQUEsY0FDM0M7QUFDQSxrQkFBSUEsUUFBTSxLQUFLO0FBRWIsdUJBQU9MO0FBQUEsY0FDVDtBQUNBLGtCQUFJSyxRQUFNLE1BQU07QUFLZCwwQkFBVSxTQUFTQSxNQUFJO0FBQUEsY0FDekI7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLFdBQVdDLHFCQUFvQixJQUFJLEdBQUc7QUFHcEMsWUFBSU4sTUFBSyxXQUFXLENBQUMsTUFBTU8sYUFBWTtBQUNyQyxvQkFBVSxTQUFTO0FBQ25CLGNBQUksTUFBTSxHQUFHO0FBQ1gsZ0JBQUlILGlCQUFnQkosTUFBSyxXQUFXLENBQUMsQ0FBQztBQUFHLHdCQUFVLFNBQVM7QUFBQSxVQUM5RDtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRixXQUFXSSxpQkFBZ0IsSUFBSSxHQUFHO0FBR2hDLGFBQU9KO0FBQUEsSUFDVDtBQUVBLGFBQVNELEtBQUksTUFBTSxHQUFHQSxNQUFLLFFBQVEsRUFBRUEsSUFBRztBQUN0QyxVQUFJSyxpQkFBZ0JKLE1BQUssV0FBV0QsRUFBQyxDQUFDLEdBQUc7QUFDdkMsWUFBSSxDQUFDLGNBQWM7QUFDakIsZ0JBQU1BO0FBQ047QUFBQSxRQUNGO0FBQUEsTUFDRixPQUFPO0FBRUwsdUJBQWU7QUFBQSxNQUNqQjtBQUFBLElBQ0Y7QUFFQSxRQUFJLFFBQVEsSUFBSTtBQUNkLFVBQUksWUFBWTtBQUFJLGVBQU87QUFBQTtBQUN0QixjQUFNO0FBQUEsSUFDYjtBQUNBLFdBQU9DLE1BQUssTUFBTSxHQUFHLEdBQUc7QUFBQSxFQUMxQjtBQU9PLFdBQVNtQixVQUFTbkIsT0FBYyxNQUFNLElBQVk7QUFDdkQsUUFBSSxRQUFRLFVBQWEsT0FBTyxRQUFRLFVBQVU7QUFDaEQsWUFBTSxJQUFJLFVBQVUsaUNBQWlDO0FBQUEsSUFDdkQ7QUFFQSxJQUFBRSxZQUFXRixLQUFJO0FBRWYsUUFBSSxRQUFRO0FBQ1osUUFBSSxNQUFNO0FBQ1YsUUFBSSxlQUFlO0FBQ25CLFFBQUlEO0FBS0osUUFBSUMsTUFBSyxVQUFVLEdBQUc7QUFDcEIsWUFBTSxRQUFRQSxNQUFLLFdBQVcsQ0FBQztBQUMvQixVQUFJTSxxQkFBb0IsS0FBSyxHQUFHO0FBQzlCLFlBQUlOLE1BQUssV0FBVyxDQUFDLE1BQU1PO0FBQVksa0JBQVE7QUFBQSxNQUNqRDtBQUFBLElBQ0Y7QUFFQSxRQUFJLFFBQVEsVUFBYSxJQUFJLFNBQVMsS0FBSyxJQUFJLFVBQVVQLE1BQUssUUFBUTtBQUNwRSxVQUFJLElBQUksV0FBV0EsTUFBSyxVQUFVLFFBQVFBO0FBQU0sZUFBTztBQUN2RCxVQUFJLFNBQVMsSUFBSSxTQUFTO0FBQzFCLFVBQUksbUJBQW1CO0FBQ3ZCLFdBQUtELEtBQUlDLE1BQUssU0FBUyxHQUFHRCxNQUFLLE9BQU8sRUFBRUEsSUFBRztBQUN6QyxjQUFNLE9BQU9DLE1BQUssV0FBV0QsRUFBQztBQUM5QixZQUFJSyxpQkFBZ0IsSUFBSSxHQUFHO0FBR3pCLGNBQUksQ0FBQyxjQUFjO0FBQ2pCLG9CQUFRTCxLQUFJO0FBQ1o7QUFBQSxVQUNGO0FBQUEsUUFDRixPQUFPO0FBQ0wsY0FBSSxxQkFBcUIsSUFBSTtBQUczQiwyQkFBZTtBQUNmLCtCQUFtQkEsS0FBSTtBQUFBLFVBQ3pCO0FBQ0EsY0FBSSxVQUFVLEdBQUc7QUFFZixnQkFBSSxTQUFTLElBQUksV0FBVyxNQUFNLEdBQUc7QUFDbkMsa0JBQUksRUFBRSxXQUFXLElBQUk7QUFHbkIsc0JBQU1BO0FBQUEsY0FDUjtBQUFBLFlBQ0YsT0FBTztBQUdMLHVCQUFTO0FBQ1Qsb0JBQU07QUFBQSxZQUNSO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsVUFBSSxVQUFVO0FBQUssY0FBTTtBQUFBLGVBQ2hCLFFBQVE7QUFBSSxjQUFNQyxNQUFLO0FBQ2hDLGFBQU9BLE1BQUssTUFBTSxPQUFPLEdBQUc7QUFBQSxJQUM5QixPQUFPO0FBQ0wsV0FBS0QsS0FBSUMsTUFBSyxTQUFTLEdBQUdELE1BQUssT0FBTyxFQUFFQSxJQUFHO0FBQ3pDLFlBQUlLLGlCQUFnQkosTUFBSyxXQUFXRCxFQUFDLENBQUMsR0FBRztBQUd2QyxjQUFJLENBQUMsY0FBYztBQUNqQixvQkFBUUEsS0FBSTtBQUNaO0FBQUEsVUFDRjtBQUFBLFFBQ0YsV0FBVyxRQUFRLElBQUk7QUFHckIseUJBQWU7QUFDZixnQkFBTUEsS0FBSTtBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBRUEsVUFBSSxRQUFRO0FBQUksZUFBTztBQUN2QixhQUFPQyxNQUFLLE1BQU0sT0FBTyxHQUFHO0FBQUEsSUFDOUI7QUFBQSxFQUNGO0FBT08sV0FBU29CLFNBQVFwQixPQUFzQjtBQUM1QyxJQUFBRSxZQUFXRixLQUFJO0FBQ2YsUUFBSSxRQUFRO0FBQ1osUUFBSSxXQUFXO0FBQ2YsUUFBSSxZQUFZO0FBQ2hCLFFBQUksTUFBTTtBQUNWLFFBQUksZUFBZTtBQUduQixRQUFJLGNBQWM7QUFNbEIsUUFDRUEsTUFBSyxVQUFVLEtBQ2ZBLE1BQUssV0FBVyxDQUFDLE1BQU1PLGVBQ3ZCRCxxQkFBb0JOLE1BQUssV0FBVyxDQUFDLENBQUMsR0FDdEM7QUFDQSxjQUFRLFlBQVk7QUFBQSxJQUN0QjtBQUVBLGFBQVNELEtBQUlDLE1BQUssU0FBUyxHQUFHRCxNQUFLLE9BQU8sRUFBRUEsSUFBRztBQUM3QyxZQUFNLE9BQU9DLE1BQUssV0FBV0QsRUFBQztBQUM5QixVQUFJSyxpQkFBZ0IsSUFBSSxHQUFHO0FBR3pCLFlBQUksQ0FBQyxjQUFjO0FBQ2pCLHNCQUFZTCxLQUFJO0FBQ2hCO0FBQUEsUUFDRjtBQUNBO0FBQUEsTUFDRjtBQUNBLFVBQUksUUFBUSxJQUFJO0FBR2QsdUJBQWU7QUFDZixjQUFNQSxLQUFJO0FBQUEsTUFDWjtBQUNBLFVBQUksU0FBU2tCLFdBQVU7QUFFckIsWUFBSSxhQUFhO0FBQUkscUJBQVdsQjtBQUFBLGlCQUN2QixnQkFBZ0I7QUFBRyx3QkFBYztBQUFBLE1BQzVDLFdBQVcsYUFBYSxJQUFJO0FBRzFCLHNCQUFjO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBRUEsUUFDRSxhQUFhLE1BQ2IsUUFBUSxNQUVSLGdCQUFnQixLQUVmLGdCQUFnQixLQUFLLGFBQWEsTUFBTSxLQUFLLGFBQWEsWUFBWSxHQUN2RTtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBT0MsTUFBSyxNQUFNLFVBQVUsR0FBRztBQUFBLEVBQ2pDO0FBTU8sV0FBU3FCLFFBQU8sWUFBMkM7QUFDaEUsUUFBSSxlQUFlLFFBQVEsT0FBTyxlQUFlLFVBQVU7QUFDekQsWUFBTSxJQUFJO0FBQUEsUUFDUixtRUFBbUUsT0FBTztBQUFBLE1BQzVFO0FBQUEsSUFDRjtBQUNBLFdBQU9DLFNBQVEsTUFBTSxVQUFVO0FBQUEsRUFDakM7QUFNTyxXQUFTQyxPQUFNdkIsT0FBMEI7QUFDOUMsSUFBQUUsWUFBV0YsS0FBSTtBQUVmLFVBQU0sTUFBa0IsRUFBRSxNQUFNLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksTUFBTSxHQUFHO0FBRXpFLFVBQU0sTUFBTUEsTUFBSztBQUNqQixRQUFJLFFBQVE7QUFBRyxhQUFPO0FBRXRCLFFBQUksVUFBVTtBQUNkLFFBQUksT0FBT0EsTUFBSyxXQUFXLENBQUM7QUFHNUIsUUFBSSxNQUFNLEdBQUc7QUFDWCxVQUFJSSxpQkFBZ0IsSUFBSSxHQUFHO0FBR3pCLGtCQUFVO0FBQ1YsWUFBSUEsaUJBQWdCSixNQUFLLFdBQVcsQ0FBQyxDQUFDLEdBQUc7QUFFdkMsY0FBSUssTUFBSTtBQUNSLGNBQUksT0FBT0E7QUFFWCxpQkFBT0EsTUFBSSxLQUFLLEVBQUVBLEtBQUc7QUFDbkIsZ0JBQUlELGlCQUFnQkosTUFBSyxXQUFXSyxHQUFDLENBQUM7QUFBRztBQUFBLFVBQzNDO0FBQ0EsY0FBSUEsTUFBSSxPQUFPQSxRQUFNLE1BQU07QUFFekIsbUJBQU9BO0FBRVAsbUJBQU9BLE1BQUksS0FBSyxFQUFFQSxLQUFHO0FBQ25CLGtCQUFJLENBQUNELGlCQUFnQkosTUFBSyxXQUFXSyxHQUFDLENBQUM7QUFBRztBQUFBLFlBQzVDO0FBQ0EsZ0JBQUlBLE1BQUksT0FBT0EsUUFBTSxNQUFNO0FBRXpCLHFCQUFPQTtBQUVQLHFCQUFPQSxNQUFJLEtBQUssRUFBRUEsS0FBRztBQUNuQixvQkFBSUQsaUJBQWdCSixNQUFLLFdBQVdLLEdBQUMsQ0FBQztBQUFHO0FBQUEsY0FDM0M7QUFDQSxrQkFBSUEsUUFBTSxLQUFLO0FBR2IsMEJBQVVBO0FBQUEsY0FDWixXQUFXQSxRQUFNLE1BQU07QUFHckIsMEJBQVVBLE1BQUk7QUFBQSxjQUNoQjtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0YsV0FBV0MscUJBQW9CLElBQUksR0FBRztBQUdwQyxZQUFJTixNQUFLLFdBQVcsQ0FBQyxNQUFNTyxhQUFZO0FBQ3JDLG9CQUFVO0FBQ1YsY0FBSSxNQUFNLEdBQUc7QUFDWCxnQkFBSUgsaUJBQWdCSixNQUFLLFdBQVcsQ0FBQyxDQUFDLEdBQUc7QUFDdkMsa0JBQUksUUFBUSxHQUFHO0FBR2Isb0JBQUksT0FBTyxJQUFJLE1BQU1BO0FBQ3JCLHVCQUFPO0FBQUEsY0FDVDtBQUNBLHdCQUFVO0FBQUEsWUFDWjtBQUFBLFVBQ0YsT0FBTztBQUdMLGdCQUFJLE9BQU8sSUFBSSxNQUFNQTtBQUNyQixtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsV0FBV0ksaUJBQWdCLElBQUksR0FBRztBQUdoQyxVQUFJLE9BQU8sSUFBSSxNQUFNSjtBQUNyQixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksVUFBVTtBQUFHLFVBQUksT0FBT0EsTUFBSyxNQUFNLEdBQUcsT0FBTztBQUVqRCxRQUFJLFdBQVc7QUFDZixRQUFJLFlBQVk7QUFDaEIsUUFBSSxNQUFNO0FBQ1YsUUFBSSxlQUFlO0FBQ25CLFFBQUlELEtBQUlDLE1BQUssU0FBUztBQUl0QixRQUFJLGNBQWM7QUFHbEIsV0FBT0QsTUFBSyxTQUFTLEVBQUVBLElBQUc7QUFDeEIsYUFBT0MsTUFBSyxXQUFXRCxFQUFDO0FBQ3hCLFVBQUlLLGlCQUFnQixJQUFJLEdBQUc7QUFHekIsWUFBSSxDQUFDLGNBQWM7QUFDakIsc0JBQVlMLEtBQUk7QUFDaEI7QUFBQSxRQUNGO0FBQ0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxRQUFRLElBQUk7QUFHZCx1QkFBZTtBQUNmLGNBQU1BLEtBQUk7QUFBQSxNQUNaO0FBQ0EsVUFBSSxTQUFTa0IsV0FBVTtBQUVyQixZQUFJLGFBQWE7QUFBSSxxQkFBV2xCO0FBQUEsaUJBQ3ZCLGdCQUFnQjtBQUFHLHdCQUFjO0FBQUEsTUFDNUMsV0FBVyxhQUFhLElBQUk7QUFHMUIsc0JBQWM7QUFBQSxNQUNoQjtBQUFBLElBQ0Y7QUFFQSxRQUNFLGFBQWEsTUFDYixRQUFRLE1BRVIsZ0JBQWdCLEtBRWYsZ0JBQWdCLEtBQUssYUFBYSxNQUFNLEtBQUssYUFBYSxZQUFZLEdBQ3ZFO0FBQ0EsVUFBSSxRQUFRLElBQUk7QUFDZCxZQUFJLE9BQU8sSUFBSSxPQUFPQyxNQUFLLE1BQU0sV0FBVyxHQUFHO0FBQUEsTUFDakQ7QUFBQSxJQUNGLE9BQU87QUFDTCxVQUFJLE9BQU9BLE1BQUssTUFBTSxXQUFXLFFBQVE7QUFDekMsVUFBSSxPQUFPQSxNQUFLLE1BQU0sV0FBVyxHQUFHO0FBQ3BDLFVBQUksTUFBTUEsTUFBSyxNQUFNLFVBQVUsR0FBRztBQUFBLElBQ3BDO0FBS0EsUUFBSSxZQUFZLEtBQUssY0FBYyxTQUFTO0FBQzFDLFVBQUksTUFBTUEsTUFBSyxNQUFNLEdBQUcsWUFBWSxDQUFDO0FBQUEsSUFDdkM7QUFBTyxVQUFJLE1BQU0sSUFBSTtBQUVyQixXQUFPO0FBQUEsRUFDVDtBQWFPLFdBQVN3QixhQUFZLEtBQTJCO0FBQ3JELFVBQU0sZUFBZSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUc7QUFDNUMsUUFBSSxJQUFJLFlBQVksU0FBUztBQUMzQixZQUFNLElBQUksVUFBVSxxQkFBcUI7QUFBQSxJQUMzQztBQUNBLFFBQUl4QixRQUFPO0FBQUEsTUFDVCxJQUFJLFNBQVMsUUFBUSxPQUFPLElBQUksRUFBRSxRQUFRLHdCQUF3QixLQUFLO0FBQUEsSUFDekUsRUFBRSxRQUFRLHlCQUF5QixNQUFNO0FBQ3pDLFFBQUksSUFBSSxZQUFZLElBQUk7QUFJdEIsTUFBQUEsUUFBTyxPQUFPLElBQUksV0FBV0E7QUFBQSxJQUMvQjtBQUNBLFdBQU9BO0FBQUEsRUFDVDtBQWFPLFdBQVN5QixXQUFVekIsT0FBbUI7QUFDM0MsUUFBSSxDQUFDRyxZQUFXSCxLQUFJLEdBQUc7QUFDckIsWUFBTSxJQUFJLFVBQVUsMkJBQTJCO0FBQUEsSUFDakQ7QUFDQSxVQUFNLENBQUMsRUFBRSxVQUFVLFFBQVEsSUFBSUEsTUFBSztBQUFBLE1BQ2xDO0FBQUEsSUFDRjtBQUNBLFVBQU0sTUFBTSxJQUFJLElBQUksVUFBVTtBQUM5QixRQUFJLFdBQVcwQixrQkFBaUIsU0FBUyxRQUFRLE1BQU0sS0FBSyxDQUFDO0FBQzdELFFBQUksWUFBWSxRQUFRLFlBQVksYUFBYTtBQUMvQyxVQUFJLFdBQVc7QUFDZixVQUFJLENBQUMsSUFBSSxVQUFVO0FBQ2pCLGNBQU0sSUFBSSxVQUFVLG1CQUFtQjtBQUFBLE1BQ3pDO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxFQUNUOzs7QUdoL0JBLE1BQUFDLGlCQUFBO0FBQUEsV0FBQUEsZ0JBQUE7QUFBQSxvQkFBQUM7QUFBQSxJQUFBLGlCQUFBQztBQUFBLElBQUEsZUFBQUM7QUFBQSxJQUFBLGVBQUFDO0FBQUEsSUFBQSxjQUFBQztBQUFBLElBQUEsbUJBQUFDO0FBQUEsSUFBQSxrQkFBQUM7QUFBQSxJQUFBLFlBQUFDO0FBQUEsSUFBQSxpQkFBQUM7QUFBQSxJQUFBLGFBQUFDO0FBQUEsSUFBQSxnQkFBQUM7QUFBQSxJQUFBLGVBQUFDO0FBQUEsSUFBQSxXQUFBQztBQUFBLElBQUEsaUJBQUFDO0FBQUEsSUFBQSx3QkFBQUM7QUFBQTtBQWdCTyxNQUFNQyxPQUFNO0FBQ1osTUFBTUMsYUFBWTtBQU9sQixXQUFTQyxZQUFXLGNBQWdDO0FBQ3pELFFBQUksZUFBZTtBQUNuQixRQUFJLG1CQUFtQjtBQUV2QixhQUFTQyxLQUFJLGFBQWEsU0FBUyxHQUFHQSxNQUFLLE1BQU0sQ0FBQyxrQkFBa0JBLE1BQUs7QUFDdkUsVUFBSUM7QUFFSixVQUFJRCxNQUFLO0FBQUcsUUFBQUMsUUFBTyxhQUFhRDtBQUFBLFdBQzNCO0FBRUgsY0FBTSxFQUFFLE1BQUFFLE1BQUssSUFBSTtBQUNqQixZQUFJLE9BQU9BLE9BQU0sUUFBUSxZQUFZO0FBQ25DLGdCQUFNLElBQUksVUFBVSx5Q0FBeUM7QUFBQSxRQUMvRDtBQUNBLFFBQUFELFFBQU9DLE1BQUssSUFBSTtBQUFBLE1BQ2xCO0FBRUEsTUFBQUMsWUFBV0YsS0FBSTtBQUdmLFVBQUlBLE1BQUssV0FBVyxHQUFHO0FBQ3JCO0FBQUEsTUFDRjtBQUVBLHFCQUFlLEdBQUdBLFNBQVE7QUFDMUIseUJBQW1CQSxNQUFLLFdBQVcsQ0FBQyxNQUFNRztBQUFBLElBQzVDO0FBTUEsbUJBQWVDO0FBQUEsTUFDYjtBQUFBLE1BQ0EsQ0FBQztBQUFBLE1BQ0Q7QUFBQSxNQUNBQztBQUFBLElBQ0Y7QUFFQSxRQUFJLGtCQUFrQjtBQUNwQixVQUFJLGFBQWEsU0FBUztBQUFHLGVBQU8sSUFBSTtBQUFBO0FBQ25DLGVBQU87QUFBQSxJQUNkLFdBQVcsYUFBYSxTQUFTO0FBQUcsYUFBTztBQUFBO0FBQ3RDLGFBQU87QUFBQSxFQUNkO0FBTU8sV0FBU0MsV0FBVU4sT0FBc0I7QUFDOUMsSUFBQUUsWUFBV0YsS0FBSTtBQUVmLFFBQUlBLE1BQUssV0FBVztBQUFHLGFBQU87QUFFOUIsVUFBTU8sY0FBYVAsTUFBSyxXQUFXLENBQUMsTUFBTUc7QUFDMUMsVUFBTSxvQkFDSkgsTUFBSyxXQUFXQSxNQUFLLFNBQVMsQ0FBQyxNQUFNRztBQUd2QyxJQUFBSCxRQUFPSSxpQkFBZ0JKLE9BQU0sQ0FBQ08sYUFBWSxLQUFLRixxQkFBb0I7QUFFbkUsUUFBSUwsTUFBSyxXQUFXLEtBQUssQ0FBQ087QUFBWSxNQUFBUCxRQUFPO0FBQzdDLFFBQUlBLE1BQUssU0FBUyxLQUFLO0FBQW1CLE1BQUFBLFNBQVE7QUFFbEQsUUFBSU87QUFBWSxhQUFPLElBQUlQO0FBQzNCLFdBQU9BO0FBQUEsRUFDVDtBQU1PLFdBQVNPLFlBQVdQLE9BQXVCO0FBQ2hELElBQUFFLFlBQVdGLEtBQUk7QUFDZixXQUFPQSxNQUFLLFNBQVMsS0FBS0EsTUFBSyxXQUFXLENBQUMsTUFBTUc7QUFBQSxFQUNuRDtBQU1PLFdBQVNLLFNBQVEsT0FBeUI7QUFDL0MsUUFBSSxNQUFNLFdBQVc7QUFBRyxhQUFPO0FBQy9CLFFBQUk7QUFDSixhQUFTVCxLQUFJLEdBQUcsTUFBTSxNQUFNLFFBQVFBLEtBQUksS0FBSyxFQUFFQSxJQUFHO0FBQ2hELFlBQU1DLFFBQU8sTUFBTUQ7QUFDbkIsTUFBQUcsWUFBV0YsS0FBSTtBQUNmLFVBQUlBLE1BQUssU0FBUyxHQUFHO0FBQ25CLFlBQUksQ0FBQztBQUFRLG1CQUFTQTtBQUFBO0FBQ2pCLG9CQUFVLElBQUlBO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxDQUFDO0FBQVEsYUFBTztBQUNwQixXQUFPTSxXQUFVLE1BQU07QUFBQSxFQUN6QjtBQU9PLFdBQVNHLFVBQVNDLE9BQWMsSUFBb0I7QUFDekQsSUFBQVIsWUFBV1EsS0FBSTtBQUNmLElBQUFSLFlBQVcsRUFBRTtBQUViLFFBQUlRLFVBQVM7QUFBSSxhQUFPO0FBRXhCLElBQUFBLFFBQU9aLFNBQVFZLEtBQUk7QUFDbkIsU0FBS1osU0FBUSxFQUFFO0FBRWYsUUFBSVksVUFBUztBQUFJLGFBQU87QUFHeEIsUUFBSSxZQUFZO0FBQ2hCLFVBQU0sVUFBVUEsTUFBSztBQUNyQixXQUFPLFlBQVksU0FBUyxFQUFFLFdBQVc7QUFDdkMsVUFBSUEsTUFBSyxXQUFXLFNBQVMsTUFBTVA7QUFBb0I7QUFBQSxJQUN6RDtBQUNBLFVBQU0sVUFBVSxVQUFVO0FBRzFCLFFBQUksVUFBVTtBQUNkLFVBQU0sUUFBUSxHQUFHO0FBQ2pCLFdBQU8sVUFBVSxPQUFPLEVBQUUsU0FBUztBQUNqQyxVQUFJLEdBQUcsV0FBVyxPQUFPLE1BQU1BO0FBQW9CO0FBQUEsSUFDckQ7QUFDQSxVQUFNLFFBQVEsUUFBUTtBQUd0QixVQUFNLFNBQVMsVUFBVSxRQUFRLFVBQVU7QUFDM0MsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSUosS0FBSTtBQUNSLFdBQU9BLE1BQUssUUFBUSxFQUFFQSxJQUFHO0FBQ3ZCLFVBQUlBLE9BQU0sUUFBUTtBQUNoQixZQUFJLFFBQVEsUUFBUTtBQUNsQixjQUFJLEdBQUcsV0FBVyxVQUFVQSxFQUFDLE1BQU1JLHFCQUFvQjtBQUdyRCxtQkFBTyxHQUFHLE1BQU0sVUFBVUosS0FBSSxDQUFDO0FBQUEsVUFDakMsV0FBV0EsT0FBTSxHQUFHO0FBR2xCLG1CQUFPLEdBQUcsTUFBTSxVQUFVQSxFQUFDO0FBQUEsVUFDN0I7QUFBQSxRQUNGLFdBQVcsVUFBVSxRQUFRO0FBQzNCLGNBQUlXLE1BQUssV0FBVyxZQUFZWCxFQUFDLE1BQU1JLHFCQUFvQjtBQUd6RCw0QkFBZ0JKO0FBQUEsVUFDbEIsV0FBV0EsT0FBTSxHQUFHO0FBR2xCLDRCQUFnQjtBQUFBLFVBQ2xCO0FBQUEsUUFDRjtBQUNBO0FBQUEsTUFDRjtBQUNBLFlBQU0sV0FBV1csTUFBSyxXQUFXLFlBQVlYLEVBQUM7QUFDOUMsWUFBTSxTQUFTLEdBQUcsV0FBVyxVQUFVQSxFQUFDO0FBQ3hDLFVBQUksYUFBYTtBQUFRO0FBQUEsZUFDaEIsYUFBYUk7QUFBb0Isd0JBQWdCSjtBQUFBLElBQzVEO0FBRUEsUUFBSSxNQUFNO0FBR1YsU0FBS0EsS0FBSSxZQUFZLGdCQUFnQixHQUFHQSxNQUFLLFNBQVMsRUFBRUEsSUFBRztBQUN6RCxVQUFJQSxPQUFNLFdBQVdXLE1BQUssV0FBV1gsRUFBQyxNQUFNSSxxQkFBb0I7QUFDOUQsWUFBSSxJQUFJLFdBQVc7QUFBRyxpQkFBTztBQUFBO0FBQ3hCLGlCQUFPO0FBQUEsTUFDZDtBQUFBLElBQ0Y7QUFJQSxRQUFJLElBQUksU0FBUztBQUFHLGFBQU8sTUFBTSxHQUFHLE1BQU0sVUFBVSxhQUFhO0FBQUEsU0FDNUQ7QUFDSCxpQkFBVztBQUNYLFVBQUksR0FBRyxXQUFXLE9BQU8sTUFBTUE7QUFBb0IsVUFBRTtBQUNyRCxhQUFPLEdBQUcsTUFBTSxPQUFPO0FBQUEsSUFDekI7QUFBQSxFQUNGO0FBTU8sV0FBU1Esa0JBQWlCWCxPQUFzQjtBQUVyRCxXQUFPQTtBQUFBLEVBQ1Q7QUFNTyxXQUFTWSxTQUFRWixPQUFzQjtBQUM1QyxJQUFBRSxZQUFXRixLQUFJO0FBQ2YsUUFBSUEsTUFBSyxXQUFXO0FBQUcsYUFBTztBQUM5QixVQUFNLFVBQVVBLE1BQUssV0FBVyxDQUFDLE1BQU1HO0FBQ3ZDLFFBQUksTUFBTTtBQUNWLFFBQUksZUFBZTtBQUNuQixhQUFTSixLQUFJQyxNQUFLLFNBQVMsR0FBR0QsTUFBSyxHQUFHLEVBQUVBLElBQUc7QUFDekMsVUFBSUMsTUFBSyxXQUFXRCxFQUFDLE1BQU1JLHFCQUFvQjtBQUM3QyxZQUFJLENBQUMsY0FBYztBQUNqQixnQkFBTUo7QUFDTjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLE9BQU87QUFFTCx1QkFBZTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUVBLFFBQUksUUFBUTtBQUFJLGFBQU8sVUFBVSxNQUFNO0FBQ3ZDLFFBQUksV0FBVyxRQUFRO0FBQUcsYUFBTztBQUNqQyxXQUFPQyxNQUFLLE1BQU0sR0FBRyxHQUFHO0FBQUEsRUFDMUI7QUFPTyxXQUFTYSxVQUFTYixPQUFjLE1BQU0sSUFBWTtBQUN2RCxRQUFJLFFBQVEsVUFBYSxPQUFPLFFBQVEsVUFBVTtBQUNoRCxZQUFNLElBQUksVUFBVSxpQ0FBaUM7QUFBQSxJQUN2RDtBQUNBLElBQUFFLFlBQVdGLEtBQUk7QUFFZixRQUFJLFFBQVE7QUFDWixRQUFJLE1BQU07QUFDVixRQUFJLGVBQWU7QUFDbkIsUUFBSUQ7QUFFSixRQUFJLFFBQVEsVUFBYSxJQUFJLFNBQVMsS0FBSyxJQUFJLFVBQVVDLE1BQUssUUFBUTtBQUNwRSxVQUFJLElBQUksV0FBV0EsTUFBSyxVQUFVLFFBQVFBO0FBQU0sZUFBTztBQUN2RCxVQUFJLFNBQVMsSUFBSSxTQUFTO0FBQzFCLFVBQUksbUJBQW1CO0FBQ3ZCLFdBQUtELEtBQUlDLE1BQUssU0FBUyxHQUFHRCxNQUFLLEdBQUcsRUFBRUEsSUFBRztBQUNyQyxjQUFNLE9BQU9DLE1BQUssV0FBV0QsRUFBQztBQUM5QixZQUFJLFNBQVNJLHFCQUFvQjtBQUcvQixjQUFJLENBQUMsY0FBYztBQUNqQixvQkFBUUosS0FBSTtBQUNaO0FBQUEsVUFDRjtBQUFBLFFBQ0YsT0FBTztBQUNMLGNBQUkscUJBQXFCLElBQUk7QUFHM0IsMkJBQWU7QUFDZiwrQkFBbUJBLEtBQUk7QUFBQSxVQUN6QjtBQUNBLGNBQUksVUFBVSxHQUFHO0FBRWYsZ0JBQUksU0FBUyxJQUFJLFdBQVcsTUFBTSxHQUFHO0FBQ25DLGtCQUFJLEVBQUUsV0FBVyxJQUFJO0FBR25CLHNCQUFNQTtBQUFBLGNBQ1I7QUFBQSxZQUNGLE9BQU87QUFHTCx1QkFBUztBQUNULG9CQUFNO0FBQUEsWUFDUjtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLFVBQUksVUFBVTtBQUFLLGNBQU07QUFBQSxlQUNoQixRQUFRO0FBQUksY0FBTUMsTUFBSztBQUNoQyxhQUFPQSxNQUFLLE1BQU0sT0FBTyxHQUFHO0FBQUEsSUFDOUIsT0FBTztBQUNMLFdBQUtELEtBQUlDLE1BQUssU0FBUyxHQUFHRCxNQUFLLEdBQUcsRUFBRUEsSUFBRztBQUNyQyxZQUFJQyxNQUFLLFdBQVdELEVBQUMsTUFBTUkscUJBQW9CO0FBRzdDLGNBQUksQ0FBQyxjQUFjO0FBQ2pCLG9CQUFRSixLQUFJO0FBQ1o7QUFBQSxVQUNGO0FBQUEsUUFDRixXQUFXLFFBQVEsSUFBSTtBQUdyQix5QkFBZTtBQUNmLGdCQUFNQSxLQUFJO0FBQUEsUUFDWjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLFFBQVE7QUFBSSxlQUFPO0FBQ3ZCLGFBQU9DLE1BQUssTUFBTSxPQUFPLEdBQUc7QUFBQSxJQUM5QjtBQUFBLEVBQ0Y7QUFPTyxXQUFTYyxTQUFRZCxPQUFzQjtBQUM1QyxJQUFBRSxZQUFXRixLQUFJO0FBQ2YsUUFBSSxXQUFXO0FBQ2YsUUFBSSxZQUFZO0FBQ2hCLFFBQUksTUFBTTtBQUNWLFFBQUksZUFBZTtBQUduQixRQUFJLGNBQWM7QUFDbEIsYUFBU0QsS0FBSUMsTUFBSyxTQUFTLEdBQUdELE1BQUssR0FBRyxFQUFFQSxJQUFHO0FBQ3pDLFlBQU0sT0FBT0MsTUFBSyxXQUFXRCxFQUFDO0FBQzlCLFVBQUksU0FBU0kscUJBQW9CO0FBRy9CLFlBQUksQ0FBQyxjQUFjO0FBQ2pCLHNCQUFZSixLQUFJO0FBQ2hCO0FBQUEsUUFDRjtBQUNBO0FBQUEsTUFDRjtBQUNBLFVBQUksUUFBUSxJQUFJO0FBR2QsdUJBQWU7QUFDZixjQUFNQSxLQUFJO0FBQUEsTUFDWjtBQUNBLFVBQUksU0FBU2dCLFdBQVU7QUFFckIsWUFBSSxhQUFhO0FBQUkscUJBQVdoQjtBQUFBLGlCQUN2QixnQkFBZ0I7QUFBRyx3QkFBYztBQUFBLE1BQzVDLFdBQVcsYUFBYSxJQUFJO0FBRzFCLHNCQUFjO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBRUEsUUFDRSxhQUFhLE1BQ2IsUUFBUSxNQUVSLGdCQUFnQixLQUVmLGdCQUFnQixLQUFLLGFBQWEsTUFBTSxLQUFLLGFBQWEsWUFBWSxHQUN2RTtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBT0MsTUFBSyxNQUFNLFVBQVUsR0FBRztBQUFBLEVBQ2pDO0FBTU8sV0FBU2dCLFFBQU8sWUFBMkM7QUFDaEUsUUFBSSxlQUFlLFFBQVEsT0FBTyxlQUFlLFVBQVU7QUFDekQsWUFBTSxJQUFJO0FBQUEsUUFDUixtRUFBbUUsT0FBTztBQUFBLE1BQzVFO0FBQUEsSUFDRjtBQUNBLFdBQU9DLFNBQVEsS0FBSyxVQUFVO0FBQUEsRUFDaEM7QUFNTyxXQUFTQyxPQUFNbEIsT0FBMEI7QUFDOUMsSUFBQUUsWUFBV0YsS0FBSTtBQUVmLFVBQU0sTUFBa0IsRUFBRSxNQUFNLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksTUFBTSxHQUFHO0FBQ3pFLFFBQUlBLE1BQUssV0FBVztBQUFHLGFBQU87QUFDOUIsVUFBTU8sY0FBYVAsTUFBSyxXQUFXLENBQUMsTUFBTUc7QUFDMUMsUUFBSTtBQUNKLFFBQUlJLGFBQVk7QUFDZCxVQUFJLE9BQU87QUFDWCxjQUFRO0FBQUEsSUFDVixPQUFPO0FBQ0wsY0FBUTtBQUFBLElBQ1Y7QUFDQSxRQUFJLFdBQVc7QUFDZixRQUFJLFlBQVk7QUFDaEIsUUFBSSxNQUFNO0FBQ1YsUUFBSSxlQUFlO0FBQ25CLFFBQUlSLEtBQUlDLE1BQUssU0FBUztBQUl0QixRQUFJLGNBQWM7QUFHbEIsV0FBT0QsTUFBSyxPQUFPLEVBQUVBLElBQUc7QUFDdEIsWUFBTSxPQUFPQyxNQUFLLFdBQVdELEVBQUM7QUFDOUIsVUFBSSxTQUFTSSxxQkFBb0I7QUFHL0IsWUFBSSxDQUFDLGNBQWM7QUFDakIsc0JBQVlKLEtBQUk7QUFDaEI7QUFBQSxRQUNGO0FBQ0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxRQUFRLElBQUk7QUFHZCx1QkFBZTtBQUNmLGNBQU1BLEtBQUk7QUFBQSxNQUNaO0FBQ0EsVUFBSSxTQUFTZ0IsV0FBVTtBQUVyQixZQUFJLGFBQWE7QUFBSSxxQkFBV2hCO0FBQUEsaUJBQ3ZCLGdCQUFnQjtBQUFHLHdCQUFjO0FBQUEsTUFDNUMsV0FBVyxhQUFhLElBQUk7QUFHMUIsc0JBQWM7QUFBQSxNQUNoQjtBQUFBLElBQ0Y7QUFFQSxRQUNFLGFBQWEsTUFDYixRQUFRLE1BRVIsZ0JBQWdCLEtBRWYsZ0JBQWdCLEtBQUssYUFBYSxNQUFNLEtBQUssYUFBYSxZQUFZLEdBQ3ZFO0FBQ0EsVUFBSSxRQUFRLElBQUk7QUFDZCxZQUFJLGNBQWMsS0FBS1EsYUFBWTtBQUNqQyxjQUFJLE9BQU8sSUFBSSxPQUFPUCxNQUFLLE1BQU0sR0FBRyxHQUFHO0FBQUEsUUFDekMsT0FBTztBQUNMLGNBQUksT0FBTyxJQUFJLE9BQU9BLE1BQUssTUFBTSxXQUFXLEdBQUc7QUFBQSxRQUNqRDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxVQUFJLGNBQWMsS0FBS08sYUFBWTtBQUNqQyxZQUFJLE9BQU9QLE1BQUssTUFBTSxHQUFHLFFBQVE7QUFDakMsWUFBSSxPQUFPQSxNQUFLLE1BQU0sR0FBRyxHQUFHO0FBQUEsTUFDOUIsT0FBTztBQUNMLFlBQUksT0FBT0EsTUFBSyxNQUFNLFdBQVcsUUFBUTtBQUN6QyxZQUFJLE9BQU9BLE1BQUssTUFBTSxXQUFXLEdBQUc7QUFBQSxNQUN0QztBQUNBLFVBQUksTUFBTUEsTUFBSyxNQUFNLFVBQVUsR0FBRztBQUFBLElBQ3BDO0FBRUEsUUFBSSxZQUFZO0FBQUcsVUFBSSxNQUFNQSxNQUFLLE1BQU0sR0FBRyxZQUFZLENBQUM7QUFBQSxhQUMvQ087QUFBWSxVQUFJLE1BQU07QUFFL0IsV0FBTztBQUFBLEVBQ1Q7QUFXTyxXQUFTWSxhQUFZLEtBQTJCO0FBQ3JELFVBQU0sZUFBZSxNQUFNLE1BQU0sSUFBSSxJQUFJLEdBQUc7QUFDNUMsUUFBSSxJQUFJLFlBQVksU0FBUztBQUMzQixZQUFNLElBQUksVUFBVSxxQkFBcUI7QUFBQSxJQUMzQztBQUNBLFdBQU87QUFBQSxNQUNMLElBQUksU0FBUyxRQUFRLHdCQUF3QixLQUFLO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBV08sV0FBU0MsV0FBVXBCLE9BQW1CO0FBQzNDLFFBQUksQ0FBQ08sWUFBV1AsS0FBSSxHQUFHO0FBQ3JCLFlBQU0sSUFBSSxVQUFVLDJCQUEyQjtBQUFBLElBQ2pEO0FBQ0EsVUFBTSxNQUFNLElBQUksSUFBSSxVQUFVO0FBQzlCLFFBQUksV0FBV3FCO0FBQUEsTUFDYnJCLE1BQUssUUFBUSxNQUFNLEtBQUssRUFBRSxRQUFRLE9BQU8sS0FBSztBQUFBLElBQ2hEO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7OztBQzNmQSxNQUFNc0IsUUFBT0MsYUFBWUMsaUJBQVNDO0FBQ2xDLE1BQU0sRUFBRSxNQUFBQyxPQUFNLFdBQUFDLFdBQVUsSUFBSUw7OztBQ001QixNQUFNTSxRQUFPQyxhQUFZQyxpQkFBU0M7QUFJM0IsTUFBTTtBQUFBLElBQ1gsVUFBQUM7QUFBQSxJQUNBLFdBQUFDO0FBQUEsSUFDQSxTQUFBQztBQUFBLElBQ0EsU0FBQUM7QUFBQSxJQUNBLFFBQUFDO0FBQUEsSUFDQSxhQUFBQztBQUFBLElBQ0EsWUFBQUM7QUFBQSxJQUNBLE1BQUFDO0FBQUEsSUFDQSxXQUFBQztBQUFBLElBQ0EsT0FBQUM7QUFBQSxJQUNBLFVBQUFDO0FBQUEsSUFDQSxTQUFBQztBQUFBLElBQ0EsS0FBQUM7QUFBQSxJQUNBLFdBQUFDO0FBQUEsSUFDQSxrQkFBQUM7QUFBQSxFQUNGLElBQUlDOzs7QUN6QkosV0FBUyxRQUFnQjtBQUN2QixRQUFJLEtBQUssTUFBTSxRQUFRLFVBQVU7QUFDL0IsYUFBTztBQUFBLElBQ1QsV0FBVyxLQUFLLE1BQU0sUUFBUSxXQUFXO0FBQ3ZDLGFBQU87QUFBQSxJQUNULE9BQU87QUFDTCxZQUFNLE1BQU0sYUFBYTtBQUFBLElBQzNCO0FBQUEsRUFDRjtBQUdPLE1BQU0sT0FBTyxNQUFNO0FBR25CLE1BQU0sUUFBUSxLQUFLO0FBR25CLE1BQU0sTUFBTSxLQUFLO0FBR2pCLE1BQU1DLFlBQVdBO0FBRXhCLE1BQU0sMEJBQTBCLE9BQU8sb0JBQW9CLE9BQU8sU0FBUztBQUtwRSxNQUFNLE1BQ1gsSUFBSSxNQUFNLE9BQU8sR0FBRztBQUFBLElBQ2xCLEtBQUssQ0FBQyxRQUFRLFNBQVM7QUFDckIsVUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixlQUFPLE9BQU87QUFBQSxNQUNoQjtBQUVBLFlBQU0sV0FBVyxLQUFLLElBQUksSUFBSSxJQUFJO0FBRWxDLFVBQUksVUFBVTtBQUNaLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSx3QkFBd0IsU0FBUyxJQUFJLEdBQUc7QUFDMUMsZUFBTyxPQUFPO0FBQUEsTUFDaEI7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsU0FBUyxNQUFNLFFBQVEsUUFBUSxLQUFLLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDbEQsMEJBQTBCLENBQUMsU0FBUyxTQUFTO0FBQzNDLFlBQU1DLEtBQUksS0FBSyxJQUFJLFNBQVM7QUFDNUIsVUFBSSxRQUFRLEtBQUssSUFBSSxTQUFTLEdBQUc7QUFDL0IsY0FBTUMsS0FBSSxFQUFFLFlBQVksTUFBTSxjQUFjLEtBQUs7QUFDakQsWUFBSSxPQUFPLFNBQVMsVUFBVTtBQUU1QixVQUFBQSxHQUFFLFFBQVFELEdBQUU7QUFBQSxRQUNkO0FBQ0EsZUFBT0M7QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLElBQ0EsSUFBSSxTQUFTLE1BQU0sT0FBTztBQUN4QixXQUFLLElBQUksSUFBSSxPQUFPLElBQUksR0FBRyxPQUFPLEtBQUssQ0FBQztBQUN4QyxhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FBSyxDQUFDLFNBQVMsU0FBUyxRQUFRLFFBQVEsS0FBSyxJQUFJLFNBQVMsQ0FBQyxFQUFFLFNBQVMsSUFBSTtBQUFBLEVBQzVFLENBQUM7QUFHSSxNQUFNLE1BQU0sS0FBSztBQUdqQixNQUFNLFdBQVdDLGFBQVksVUFBVSxLQUFLLE1BQU07QUFVbEQsTUFBTSxVQUFVO0FBVWhCLE1BQU0sV0FBVztBQUFBLElBQ3RCLE1BQU07QUFBQSxJQUNOLElBQUk7QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLFNBQVM7QUFBQSxJQUNULE1BQU07QUFBQSxJQUNOLEtBQUs7QUFBQSxJQUNMLElBQUk7QUFBQSxJQUNKLFNBQVM7QUFBQSxJQUNULEdBQUcsS0FBSztBQUFBLEVBQ1Y7OztBQzNGQSxNQUFNLFVBQVU7QUFDVCxNQUFNLG1CQUFtQixPQUFPLGtCQUFrQjtBQUVsRCxXQUFTLElBQUksWUFBWSxNQUFNO0FBQ3BDLFFBQUksTUFBTSxHQUFHO0FBQ2IsYUFBU0MsS0FBSSxHQUFHQSxLQUFJLFFBQVEsUUFBUUEsTUFBSztBQUN2QyxhQUFPLFFBQVFBO0FBQ2YsVUFBSUEsS0FBSSxLQUFLLFFBQVE7QUFDbkIsZUFBTyxLQUFLQTtBQUFBLE1BQ2Q7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLFVBQVU7QUFDZCxNQUFJLHdCQUF3QjtBQUM1QixNQUFJLGtCQUFrQjtBQUN0QixNQUFJLGFBQWE7QUFDakIsTUFBSSxtQkFBbUI7OztBQ2J2QixNQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQU1HLFdBQVMsU0FBUyxRQUFRQyxLQUFHQyxLQUFHLFVBQVU7QUFDL0MsUUFBSSxhQUFhLFFBQVc7QUFDMUIsdUJBQWlCLFFBQVE7QUFBQSxJQUMzQjtBQUVBLFFBQUksT0FBT0EsUUFBTSxZQUFZO0FBQzNCLGlCQUFXQTtBQUNYLE1BQUFBLE1BQUk7QUFBQSxJQUNOO0FBRUEsUUFBSSxPQUFPLE1BQU1ELEdBQUM7QUFBRyxZQUFNLElBQUksc0JBQXNCLEtBQUtBLEdBQUM7QUFDM0QsUUFBSSxPQUFPLE1BQU1DLEdBQUM7QUFBRyxZQUFNLElBQUksc0JBQXNCLEtBQUtBLEdBQUM7QUFFM0QsUUFBSSxVQUFVLFFBQVMsT0FBT0QsUUFBTSxZQUFZLE9BQU9DLFFBQU0sVUFBVztBQUN0RSxVQUFJLE9BQU8sYUFBYTtBQUFZLGdCQUFRLFNBQVMsVUFBVSxJQUFJO0FBQ25FLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxPQUFPRCxRQUFNO0FBQVUsWUFBTSxJQUFJLHVCQUF1QjtBQUU1RCxVQUFNLE9BQU8sT0FBT0MsUUFBTSxXQUFXLE1BQU1ELE1BQUksT0FBTyxNQUFNQyxNQUFJLEtBQUtELE1BQUk7QUFDekUsV0FBTyxPQUFPLE1BQU0sTUFBTSxRQUFRO0FBQUEsRUFDcEM7QUFNTyxXQUFTLFdBQVcsUUFBUSxJQUFJLElBQUksVUFBVTtBQUNuRCxRQUFJLGFBQWEsUUFBVztBQUMxQix1QkFBaUIsUUFBUTtBQUFBLElBQzNCO0FBRUEsUUFBSSxVQUFVLFFBQVEsRUFBRSxNQUFNLEtBQUs7QUFDakMsVUFBSSxPQUFPLGFBQWE7QUFBWSxnQkFBUSxTQUFTLFVBQVUsSUFBSTtBQUNuRSxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksT0FBTztBQUVYLFFBQUksS0FBSyxHQUFHO0FBQ1YsY0FBUSxNQUFNLENBQUM7QUFBQSxJQUNqQixXQUFXLEtBQUssR0FBRztBQUNqQixjQUFRLE1BQU07QUFBQSxJQUNoQjtBQUVBLFFBQUksS0FBSyxHQUFHO0FBQ1YsY0FBUSxNQUFNLENBQUM7QUFBQSxJQUNqQixXQUFXLEtBQUssR0FBRztBQUNqQixjQUFRLE1BQU07QUFBQSxJQUNoQjtBQUVBLFdBQU8sT0FBTyxNQUFNLE1BQU0sUUFBUTtBQUFBLEVBQ3BDO0FBU08sV0FBUyxVQUFVLFFBQVEsS0FBSyxVQUFVO0FBQy9DLFFBQUksYUFBYSxRQUFXO0FBQzFCLHVCQUFpQixRQUFRO0FBQUEsSUFDM0I7QUFFQSxRQUFJLFdBQVcsUUFBUSxXQUFXLFFBQVc7QUFDM0MsVUFBSSxPQUFPLGFBQWE7QUFBWSxnQkFBUSxTQUFTLFVBQVUsSUFBSTtBQUNuRSxhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sT0FBTyxNQUFNLElBQ2Ysd0JBQ0EsTUFBTSxJQUNOLGtCQUNBO0FBQ0osV0FBTyxPQUFPLE1BQU0sTUFBTSxRQUFRO0FBQUEsRUFDcEM7QUFNTyxXQUFTLGdCQUFnQixRQUFRLFVBQVU7QUFDaEQsUUFBSSxhQUFhLFFBQVc7QUFDMUIsdUJBQWlCLFFBQVE7QUFBQSxJQUMzQjtBQUVBLFFBQUksV0FBVyxRQUFRLFdBQVcsUUFBVztBQUMzQyxVQUFJLE9BQU8sYUFBYTtBQUFZLGdCQUFRLFNBQVMsVUFBVSxJQUFJO0FBQ25FLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTyxPQUFPLE1BQU0sa0JBQWtCLFFBQVE7QUFBQSxFQUNoRDs7O0FDcklPLFdBQVMsb0JBQW9CLE9BQW1CO0FBQ3JELFdBQU9FLFFBQU87QUFBQSxNQUNaLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxNQUNOLE1BQU07QUFBQSxJQUNSO0FBQUEsRUFDRjs7O0FDSUEsV0FBUyxVQUFVLFFBQVE7QUFDekIsV0FBTyxPQUFPLGFBQWEsT0FBTyxPQUFPLFVBQVU7QUFBQSxFQUNyRDtBQUVBLFdBQVMsaUJBQWlCLFFBQVE7QUFDaEMsV0FDRSxPQUFPLE9BQU8sYUFBYSxhQUMzQixPQUFPLE9BQU8sdUJBQXVCLGFBQ3JDLE9BQU8sT0FBTyxvQkFBb0IsYUFDbEMsT0FBTyxPQUFPLGVBQWUsYUFDN0IsT0FBTyxPQUFPLFlBQVk7QUFBQSxFQUU5QjtBQUVBLFdBQVMsV0FBVyxRQUFRO0FBQzFCLFdBQU8sT0FBTyxPQUFPLGFBQWEsYUFDaEMsT0FBTyxPQUFPLGtCQUFrQixhQUNoQyxDQUFDLENBQUMsT0FBTztBQUFBLEVBQ2I7QUFFQSxXQUFTLFdBQVcsUUFBUTtBQUMxQixXQUFPLE9BQU8sT0FBTyxhQUFhLGFBQ2hDLE9BQU8sT0FBTyxrQkFBa0IsYUFDaEMsQ0FBQyxDQUFDLE9BQU87QUFBQSxFQUNiO0FBRUEsV0FBUyxtQkFBbUIsUUFBUTtBQUNsQyxRQUFJLE9BQU87QUFBa0IsYUFBTztBQUNwQyxVQUFNLFNBQVMsT0FBTztBQUN0QixRQUFJLENBQUMsVUFBVSxPQUFPO0FBQVMsYUFBTztBQUN0QyxXQUFPLE9BQU8sWUFBYSxPQUFPLFNBQVMsT0FBTyxXQUFXO0FBQUEsRUFDL0Q7QUFFQSxNQUFNLE1BQU0sTUFBTTtBQUFBLEVBQUM7QUFFbkIsV0FBUyxnQkFBZ0IsUUFBUTtBQUMvQixRQUFJLE9BQU87QUFBZSxhQUFPO0FBQ2pDLFVBQU0sU0FBUyxPQUFPO0FBQ3RCLFFBQUksQ0FBQyxVQUFVLE9BQU87QUFBUyxhQUFPO0FBQ3RDLFdBQU8sT0FBTyxjQUFlLE9BQU8sU0FBUyxPQUFPLFdBQVc7QUFBQSxFQUNqRTtBQUVBLFdBQVMsSUFBSSxRQUFRLFNBQVMsVUFBVTtBQUN0QyxRQUFJLFVBQVUsV0FBVyxHQUFHO0FBQzFCLGlCQUFXO0FBQ1gsZ0JBQVUsQ0FBQztBQUFBLElBQ2IsV0FBVyxXQUFXLE1BQU07QUFDMUIsZ0JBQVUsQ0FBQztBQUFBLElBQ2IsT0FBTztBQUNMLHFCQUFlLFNBQVMsU0FBUztBQUFBLElBQ25DO0FBQ0EscUJBQWlCLFVBQVUsVUFBVTtBQUNyQyx3QkFBb0IsUUFBUSxRQUFRLGdCQUFnQjtBQUVwRCxlQUFXLEtBQUssUUFBUTtBQUV4QixVQUFNLFdBQVcsUUFBUSxZQUN0QixRQUFRLGFBQWEsU0FBUyxXQUFXLE1BQU07QUFDbEQsVUFBTSxXQUFXLFFBQVEsWUFDdEIsUUFBUSxhQUFhLFNBQVMsV0FBVyxNQUFNO0FBRWxELFVBQU0sU0FBUyxPQUFPO0FBQ3RCLFVBQU0sU0FBUyxPQUFPO0FBQ3RCLFVBQU0sUUFBUSxVQUFVO0FBRXhCLFVBQU0saUJBQWlCLE1BQU07QUFDM0IsVUFBSSxDQUFDLE9BQU87QUFBVSxpQkFBUztBQUFBLElBQ2pDO0FBS0EsUUFBSSxnQkFBZ0IsaUJBQWlCLE1BQU0sS0FDekMsU0FDQSxNQUFNLGVBQ04sTUFBTSxhQUNOLE1BQU0sV0FBVyxTQUNqQixXQUFXLE1BQU0sTUFBTSxZQUN2QixXQUFXLE1BQU0sTUFBTTtBQUd6QixRQUFJLG1CQUFtQixPQUFPLG9CQUMzQixVQUFVLE9BQU87QUFDcEIsVUFBTSxXQUFXLE1BQU07QUFDckIseUJBQW1CO0FBSW5CLFVBQUksT0FBTztBQUFXLHdCQUFnQjtBQUV0QyxVQUFJLGtCQUFrQixDQUFDLE9BQU8sWUFBWTtBQUFXO0FBQ3JELFVBQUksQ0FBQyxZQUFZO0FBQWUsaUJBQVMsS0FBSyxNQUFNO0FBQUEsSUFDdEQ7QUFFQSxRQUFJLGdCQUFnQixPQUFPLGlCQUN4QixVQUFVLE9BQU87QUFDcEIsVUFBTSxRQUFRLE1BQU07QUFDbEIsc0JBQWdCO0FBSWhCLFVBQUksT0FBTztBQUFXLHdCQUFnQjtBQUV0QyxVQUFJLGtCQUFrQixDQUFDLE9BQU8sWUFBWTtBQUFXO0FBQ3JELFVBQUksQ0FBQyxZQUFZO0FBQWtCLGlCQUFTLEtBQUssTUFBTTtBQUFBLElBQ3pEO0FBRUEsVUFBTSxVQUFVLENBQUMsUUFBUTtBQUN2QixlQUFTLEtBQUssUUFBUSxHQUFHO0FBQUEsSUFDM0I7QUFFQSxVQUFNLFVBQVUsTUFBTTtBQUNwQixVQUFJLFlBQVksQ0FBQyxlQUFlO0FBQzlCLFlBQUksQ0FBQyxnQkFBZ0IsTUFBTSxHQUFHO0FBQzVCLGlCQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksMkJBQTJCLENBQUM7QUFBQSxRQUMvRDtBQUFBLE1BQ0Y7QUFDQSxVQUFJLFlBQVksQ0FBQyxrQkFBa0I7QUFDakMsWUFBSSxDQUFDLG1CQUFtQixNQUFNLEdBQUc7QUFDL0IsaUJBQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSwyQkFBMkIsQ0FBQztBQUFBLFFBQy9EO0FBQUEsTUFDRjtBQUNBLGVBQVMsS0FBSyxNQUFNO0FBQUEsSUFDdEI7QUFFQSxVQUFNLFlBQVksTUFBTTtBQUN0QixhQUFPLElBQUksR0FBRyxVQUFVLFFBQVE7QUFBQSxJQUNsQztBQUVBLFFBQUksVUFBVSxNQUFNLEdBQUc7QUFDckIsYUFBTyxHQUFHLFlBQVksUUFBUTtBQUM5QixVQUFJLENBQUMsZUFBZTtBQUNsQixlQUFPLEdBQUcsU0FBUyxPQUFPO0FBQUEsTUFDNUI7QUFDQSxVQUFJLE9BQU87QUFBSyxrQkFBVTtBQUFBO0FBQ3JCLGVBQU8sR0FBRyxXQUFXLFNBQVM7QUFBQSxJQUNyQyxXQUFXLFlBQVksQ0FBQyxRQUFRO0FBQzlCLGFBQU8sR0FBRyxPQUFPLGNBQWM7QUFDL0IsYUFBTyxHQUFHLFNBQVMsY0FBYztBQUFBLElBQ25DO0FBR0EsUUFBSSxDQUFDLGlCQUFpQixPQUFPLE9BQU8sWUFBWSxXQUFXO0FBQ3pELGFBQU8sR0FBRyxXQUFXLE9BQU87QUFBQSxJQUM5QjtBQUVBLFdBQU8sR0FBRyxPQUFPLEtBQUs7QUFDdEIsV0FBTyxHQUFHLFVBQVUsUUFBUTtBQUM1QixRQUFJLFFBQVEsVUFBVTtBQUFPLGFBQU8sR0FBRyxTQUFTLE9BQU87QUFDdkQsV0FBTyxHQUFHLFNBQVMsT0FBTztBQUcxQixVQUFNLFNBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxPQUFPLFlBQVksU0FDdEQsVUFBVSxPQUFPLFVBQ2pCLFVBQVUsT0FBTyxVQUNqQixVQUFVLE9BQU8sZ0JBQ2pCLFVBQVUsT0FBTyxnQkFDakIsVUFBVSxPQUFPLE9BQU8sT0FBTyxZQUU3QixDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsT0FBTyxPQUFPLFdBQVcsZUFDdEQsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLE9BQU8sT0FBTyxXQUFXLGVBQ3RELENBQUMsWUFBYSxVQUFVLE9BQU8sY0FDL0IsQ0FBQyxZQUFhLFVBQVUsT0FBTztBQUlwQyxRQUFJLFFBQVE7QUFPVixNQUFRQyxVQUFTLE1BQU07QUFDckIsaUJBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNIO0FBRUEsVUFBTSxVQUFVLE1BQU07QUFDcEIsaUJBQVc7QUFDWCxhQUFPLGVBQWUsV0FBVyxPQUFPO0FBQ3hDLGFBQU8sZUFBZSxZQUFZLFFBQVE7QUFDMUMsYUFBTyxlQUFlLFNBQVMsT0FBTztBQUN0QyxhQUFPLGVBQWUsV0FBVyxTQUFTO0FBQzFDLFVBQUksT0FBTztBQUFLLGVBQU8sSUFBSSxlQUFlLFVBQVUsUUFBUTtBQUM1RCxhQUFPLGVBQWUsT0FBTyxjQUFjO0FBQzNDLGFBQU8sZUFBZSxTQUFTLGNBQWM7QUFDN0MsYUFBTyxlQUFlLFVBQVUsUUFBUTtBQUN4QyxhQUFPLGVBQWUsT0FBTyxLQUFLO0FBQ2xDLGFBQU8sZUFBZSxTQUFTLE9BQU87QUFDdEMsYUFBTyxlQUFlLFNBQVMsT0FBTztBQUFBLElBQ3hDO0FBRUEsUUFBSSxRQUFRLFVBQVUsQ0FBQyxRQUFRO0FBQzdCLFlBQU0sUUFBUSxNQUFNO0FBRWxCLGNBQU0sY0FBYztBQUNwQixnQkFBUTtBQUNSLG9CQUFZLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQztBQUFBLE1BQzNDO0FBQ0EsVUFBSSxRQUFRLE9BQU8sU0FBUztBQUMxQixRQUFRQSxVQUFTLEtBQUs7QUFBQSxNQUN4QixPQUFPO0FBQ0wsY0FBTSxtQkFBbUI7QUFDekIsbUJBQVcsS0FBSyxJQUFJLFNBQVM7QUFDM0Isa0JBQVEsT0FBTyxvQkFBb0IsU0FBUyxLQUFLO0FBQ2pELDJCQUFpQixNQUFNLFFBQVEsSUFBSTtBQUFBLFFBQ3JDLENBQUM7QUFDRCxnQkFBUSxPQUFPLGlCQUFpQixTQUFTLEtBQUs7QUFBQSxNQUNoRDtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQU8sd0JBQVE7OztBQzFOZixNQUFNQyx1QkFBc0IsQ0FBQyxRQUFRLFNBQVM7QUFDNUMsUUFDRSxPQUFPLFdBQVcsWUFDbEIsRUFBRSxhQUFhLFNBQ2Y7QUFDQSxZQUFNLElBQUkscUJBQXFCLE1BQU0sZUFBZSxNQUFNO0FBQUEsSUFDNUQ7QUFBQSxFQUNGO0FBRUEsV0FBUyxTQUFTLEtBQUs7QUFDckIsV0FBTyxDQUFDLEVBQUUsT0FBTyxPQUFPLElBQUksU0FBUztBQUFBLEVBQ3ZDO0FBRUEsV0FBUyxlQUFlLFFBQVEsUUFBUTtBQUN0QyxJQUFBQSxxQkFBb0IsUUFBUSxRQUFRO0FBQ3BDLFFBQUksQ0FBQyxTQUFTLE1BQU0sR0FBRztBQUNyQixZQUFNLElBQUkscUJBQXFCLFVBQVUsaUJBQWlCLE1BQU07QUFBQSxJQUNsRTtBQUNBLFdBQU8seUJBQXlCLFFBQVEsTUFBTTtBQUFBLEVBQ2hEO0FBQ0EsV0FBUyx5QkFBeUIsUUFBUSxRQUFRO0FBQ2hELFFBQUksT0FBTyxXQUFXLFlBQVksRUFBRSxhQUFhLFNBQVM7QUFDeEQsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLFVBQVUsTUFBTTtBQUNwQixhQUFPLFFBQVEsSUFBSSxXQUFXLENBQUM7QUFBQSxJQUNqQztBQUNBLFFBQUksT0FBTyxTQUFTO0FBQ2xCLGNBQVE7QUFBQSxJQUNWLE9BQU87QUFDTCxhQUFPLGlCQUFpQixTQUFTLE9BQU87QUFDeEMsNEJBQUksUUFBUSxNQUFNLE9BQU8sb0JBQW9CLFNBQVMsT0FBTyxDQUFDO0FBQUEsSUFDaEU7QUFDQSxXQUFPO0FBQUEsRUFDVDs7O0FDckNBLE1BQU0sV0FBVyxPQUFPLFVBQVU7QUFDbEMsTUFBTSxhQUFhLE9BQU8sWUFBWTtBQUV0QyxXQUFTLFdBQVcsS0FBS0MsS0FBR0MsSUFBRztBQUM3QixRQUFJLEtBQUs7QUFFUCxVQUFJO0FBRUosVUFBSUQsT0FBSyxDQUFDQSxJQUFFLFNBQVM7QUFDbkIsUUFBQUEsSUFBRSxVQUFVO0FBQUEsTUFDZDtBQUNBLFVBQUlDLE1BQUssQ0FBQ0EsR0FBRSxTQUFTO0FBQ25CLFFBQUFBLEdBQUUsVUFBVTtBQUFBLE1BQ2Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUlBLFdBQVNDLFNBQVEsS0FBSyxJQUFJO0FBQ3hCLFVBQU1ELEtBQUksS0FBSztBQUNmLFVBQU1ELE1BQUksS0FBSztBQUVmLFVBQU1HLEtBQUlILE9BQUtDO0FBRWYsUUFBS0QsT0FBS0EsSUFBRSxhQUFlQyxNQUFLQSxHQUFFLFdBQVk7QUFDNUMsVUFBSSxPQUFPLE9BQU8sWUFBWTtBQUM1QixXQUFHO0FBQUEsTUFDTDtBQUVBLGFBQU87QUFBQSxJQUNUO0FBSUEsZUFBVyxLQUFLRCxLQUFHQyxFQUFDO0FBRXBCLFFBQUlELEtBQUc7QUFDTCxNQUFBQSxJQUFFLFlBQVk7QUFBQSxJQUNoQjtBQUNBLFFBQUlDLElBQUc7QUFDTCxNQUFBQSxHQUFFLFlBQVk7QUFBQSxJQUNoQjtBQUdBLFFBQUksQ0FBQ0UsR0FBRSxhQUFhO0FBQ2xCLFdBQUssS0FBSyxVQUFVLFNBQVVDLEtBQUk7QUFDaEMsaUJBQVMsTUFBTSxtQkFBbUJBLEtBQUksR0FBRyxHQUFHLEVBQUU7QUFBQSxNQUNoRCxDQUFDO0FBQUEsSUFDSCxPQUFPO0FBQ0wsZUFBUyxNQUFNLEtBQUssRUFBRTtBQUFBLElBQ3hCO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLFNBQVNDLE9BQU0sS0FBSyxJQUFJO0FBQy9CLFFBQUksU0FBUztBQUViLGFBQVMsVUFBVUMsTUFBSztBQUN0QixVQUFJLFFBQVE7QUFDVjtBQUFBLE1BQ0Y7QUFDQSxlQUFTO0FBRVQsWUFBTUwsS0FBSUksTUFBSztBQUNmLFlBQU1MLE1BQUlLLE1BQUs7QUFFZixpQkFBV0MsTUFBS04sS0FBR0MsRUFBQztBQUVwQixVQUFJRCxLQUFHO0FBQ0wsUUFBQUEsSUFBRSxTQUFTO0FBQUEsTUFDYjtBQUNBLFVBQUlDLElBQUc7QUFDTCxRQUFBQSxHQUFFLFNBQVM7QUFBQSxNQUNiO0FBRUEsVUFBSSxPQUFPLE9BQU8sWUFBWTtBQUM1QixXQUFHSyxJQUFHO0FBQUEsTUFDUjtBQUVBLFVBQUlBLE1BQUs7QUFDUCxRQUFRQyxVQUFTLGtCQUFrQkYsT0FBTUMsSUFBRztBQUFBLE1BQzlDLE9BQU87QUFDTCxRQUFRQyxVQUFTLGFBQWFGLEtBQUk7QUFBQSxNQUNwQztBQUFBLElBQ0Y7QUFDQSxRQUFJO0FBQ0YsWUFBTSxTQUFTQSxNQUFLLFNBQVMsT0FBTyxNQUFNLFNBQVM7QUFDbkQsVUFBSSxVQUFVLE1BQU07QUFDbEIsY0FBTSxPQUFPLE9BQU87QUFDcEIsWUFBSSxPQUFPLFNBQVMsWUFBWTtBQUM5QixlQUFLO0FBQUEsWUFDSDtBQUFBLFlBQ0EsV0FBWTtBQUNWLGNBQVFFLFVBQVMsV0FBVyxJQUFJO0FBQUEsWUFDbEM7QUFBQSxZQUNBLFNBQVVELE1BQUs7QUFDYixjQUFRQyxVQUFTLFdBQVdELElBQUc7QUFBQSxZQUNqQztBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsU0FBU0EsTUFBUDtBQUNBLGdCQUFVQSxJQUFHO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGlCQUFpQkQsT0FBTSxLQUFLO0FBQ25DLGdCQUFZQSxPQUFNLEdBQUc7QUFDckIsZ0JBQVlBLEtBQUk7QUFBQSxFQUNsQjtBQUVBLFdBQVMsWUFBWUEsT0FBTTtBQUN6QixVQUFNSixLQUFJSSxNQUFLO0FBQ2YsVUFBTUwsTUFBSUssTUFBSztBQUVmLFFBQUlMLEtBQUc7QUFDTCxNQUFBQSxJQUFFLGVBQWU7QUFBQSxJQUNuQjtBQUNBLFFBQUlDLElBQUc7QUFDTCxNQUFBQSxHQUFFLGVBQWU7QUFBQSxJQUNuQjtBQUVBLFFBQUtELE9BQUtBLElBQUUsYUFBZUMsTUFBS0EsR0FBRSxXQUFZO0FBQzVDLE1BQUFJLE1BQUssS0FBSyxPQUFPO0FBQUEsSUFDbkI7QUFBQSxFQUNGO0FBRUEsV0FBUyxZQUFZQSxPQUFNLEtBQUs7QUFDOUIsVUFBTUosS0FBSUksTUFBSztBQUNmLFVBQU1MLE1BQUlLLE1BQUs7QUFFZixRQUFLTCxPQUFLQSxJQUFFLGdCQUFrQkMsTUFBS0EsR0FBRSxjQUFlO0FBQ2xEO0FBQUEsSUFDRjtBQUVBLFFBQUlELEtBQUc7QUFDTCxNQUFBQSxJQUFFLGVBQWU7QUFBQSxJQUNuQjtBQUNBLFFBQUlDLElBQUc7QUFDTCxNQUFBQSxHQUFFLGVBQWU7QUFBQSxJQUNuQjtBQUVBLElBQUFJLE1BQUssS0FBSyxTQUFTLEdBQUc7QUFBQSxFQUN4QjtBQUVBLFdBQVMsWUFBWTtBQUNuQixVQUFNSixLQUFJLEtBQUs7QUFDZixVQUFNRCxNQUFJLEtBQUs7QUFFZixRQUFJQyxJQUFHO0FBQ0wsTUFBQUEsR0FBRSxjQUFjO0FBQ2hCLE1BQUFBLEdBQUUsU0FBUztBQUNYLE1BQUFBLEdBQUUsZUFBZTtBQUNqQixNQUFBQSxHQUFFLFlBQVk7QUFDZCxNQUFBQSxHQUFFLFVBQVU7QUFDWixNQUFBQSxHQUFFLGVBQWU7QUFDakIsTUFBQUEsR0FBRSxVQUFVO0FBQ1osTUFBQUEsR0FBRSxRQUFRO0FBQ1YsTUFBQUEsR0FBRSxhQUFhO0FBQUEsSUFDakI7QUFFQSxRQUFJRCxLQUFHO0FBQ0wsTUFBQUEsSUFBRSxjQUFjO0FBQ2hCLE1BQUFBLElBQUUsWUFBWTtBQUNkLE1BQUFBLElBQUUsU0FBUztBQUNYLE1BQUFBLElBQUUsZUFBZTtBQUNqQixNQUFBQSxJQUFFLFVBQVU7QUFDWixNQUFBQSxJQUFFLGVBQWU7QUFDakIsTUFBQUEsSUFBRSxRQUFRO0FBQ1YsTUFBQUEsSUFBRSxTQUFTO0FBQ1gsTUFBQUEsSUFBRSxjQUFjO0FBQ2hCLE1BQUFBLElBQUUsY0FBYztBQUNoQixNQUFBQSxJQUFFLFdBQVc7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUVBLFdBQVMsZUFBZSxRQUFRLEtBQUssTUFBTTtBQU96QyxVQUFNQyxLQUFJLE9BQU87QUFDakIsVUFBTUQsTUFBSSxPQUFPO0FBRWpCLFFBQUtBLE9BQUtBLElBQUUsYUFBZUMsTUFBS0EsR0FBRSxXQUFZO0FBQzVDLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBS0EsTUFBS0EsR0FBRSxlQUFpQkQsT0FBS0EsSUFBRSxhQUFjO0FBQ2hELGFBQU8sUUFBUSxHQUFHO0FBQUEsSUFDcEIsV0FBVyxLQUFLO0FBRWQsVUFBSTtBQUVKLFVBQUlBLE9BQUssQ0FBQ0EsSUFBRSxTQUFTO0FBQ25CLFFBQUFBLElBQUUsVUFBVTtBQUFBLE1BQ2Q7QUFDQSxVQUFJQyxNQUFLLENBQUNBLEdBQUUsU0FBUztBQUNuQixRQUFBQSxHQUFFLFVBQVU7QUFBQSxNQUNkO0FBQ0EsVUFBSSxNQUFNO0FBQ1IsUUFBUU0sVUFBUyxhQUFhLFFBQVEsR0FBRztBQUFBLE1BQzNDLE9BQU87QUFDTCxvQkFBWSxRQUFRLEdBQUc7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBUyxVQUFVLFFBQVEsSUFBSTtBQUM3QixRQUFJLE9BQU8sT0FBTyxlQUFlLFlBQVk7QUFDM0M7QUFBQSxJQUNGO0FBRUEsVUFBTU4sS0FBSSxPQUFPO0FBQ2pCLFVBQU1ELE1BQUksT0FBTztBQUVqQixRQUFJQyxJQUFHO0FBQ0wsTUFBQUEsR0FBRSxjQUFjO0FBQUEsSUFDbEI7QUFDQSxRQUFJRCxLQUFHO0FBQ0wsTUFBQUEsSUFBRSxjQUFjO0FBQUEsSUFDbEI7QUFFQSxXQUFPLEtBQUssWUFBWSxFQUFFO0FBRTFCLFFBQUksT0FBTyxjQUFjLFVBQVUsSUFBSSxHQUFHO0FBRXhDO0FBQUEsSUFDRjtBQUVBLElBQVFPLFVBQVMsYUFBYSxNQUFNO0FBQUEsRUFDdEM7QUFFQSxXQUFTLFlBQVksUUFBUTtBQUMzQixRQUFJLFNBQVM7QUFFYixhQUFTLFlBQVksS0FBSztBQUN4QixVQUFJLFFBQVE7QUFDVix1QkFBZSxRQUFRLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQztBQUN6RDtBQUFBLE1BQ0Y7QUFDQSxlQUFTO0FBRVQsWUFBTU4sS0FBSSxPQUFPO0FBQ2pCLFlBQU1ELE1BQUksT0FBTztBQUNqQixZQUFNRyxLQUFJSCxPQUFLQztBQUVmLFVBQUlBLElBQUc7QUFDTCxRQUFBQSxHQUFFLGNBQWM7QUFBQSxNQUNsQjtBQUNBLFVBQUlELEtBQUc7QUFDTCxRQUFBQSxJQUFFLGNBQWM7QUFBQSxNQUNsQjtBQUVBLFVBQUlHLEdBQUUsV0FBVztBQUNmLGVBQU8sS0FBSyxVQUFVLEdBQUc7QUFBQSxNQUMzQixXQUFXLEtBQUs7QUFDZCx1QkFBZSxRQUFRLEtBQUssSUFBSTtBQUFBLE1BQ2xDLE9BQU87QUFDTCxRQUFRSSxVQUFTLGlCQUFpQixNQUFNO0FBQUEsTUFDMUM7QUFBQSxJQUNGO0FBRUEsUUFBSTtBQUNGLFlBQU0sU0FBUyxPQUFPLFdBQVcsV0FBVztBQUM1QyxVQUFJLFVBQVUsTUFBTTtBQUNsQixjQUFNLE9BQU8sT0FBTztBQUNwQixZQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCLGVBQUs7QUFBQSxZQUNIO0FBQUEsWUFDQSxXQUFZO0FBQ1YsY0FBUUEsVUFBUyxhQUFhLElBQUk7QUFBQSxZQUNwQztBQUFBLFlBQ0EsU0FBVSxLQUFLO0FBQ2IsY0FBUUEsVUFBUyxhQUFhLEdBQUc7QUFBQSxZQUNuQztBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsU0FBUyxLQUFQO0FBQ0Esa0JBQVksR0FBRztBQUFBLElBQ2pCO0FBQUEsRUFDRjtBQUVBLFdBQVMsZ0JBQWdCLFFBQVE7QUFDL0IsV0FBTyxLQUFLLFVBQVU7QUFBQSxFQUN4QjtBQUVBLFdBQVNDLFdBQVUsUUFBUTtBQUN6QixXQUFPLFVBQVUsT0FBTyxhQUFhLE9BQU8sT0FBTyxVQUFVO0FBQUEsRUFDL0Q7QUFHQSxXQUFTLFVBQVUsUUFBUSxLQUFLO0FBQzlCLFFBQUksQ0FBQztBQUFRO0FBQ2IsUUFBSUEsV0FBVSxNQUFNO0FBQUcsYUFBTyxPQUFPLE1BQU07QUFDM0MsUUFBSUEsV0FBVSxPQUFPLEdBQUc7QUFBRyxhQUFPLE9BQU8sSUFBSSxNQUFNO0FBQ25ELFFBQUksT0FBTyxPQUFPLFlBQVk7QUFBWSxhQUFPLE9BQU8sUUFBUSxHQUFHO0FBQ25FLFFBQUksT0FBTyxPQUFPLFVBQVU7QUFBWSxhQUFPLE9BQU8sTUFBTTtBQUFBLEVBQzlEO0FBRUEsTUFBTyxrQkFBUTtBQUFBLElBQ2I7QUFBQSxJQUNBO0FBQUEsSUFDQSxTQUFBTjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRjs7O0FDMVRBLE1BQU0sZUFBZSxPQUFPLGNBQWM7QUFFMUMsV0FBUyxxQkFBcUIsS0FBSztBQUNqQyxXQUFPLENBQUMsRUFDTixPQUNBLE9BQU8sSUFBSSxTQUFTLGNBQ3BCLE9BQU8sSUFBSSxPQUFPLGVBQ2pCLENBQUMsSUFBSSxrQkFBa0IsSUFBSSxnQkFBZ0IsYUFBYSxXQUN4RCxDQUFDLElBQUksa0JBQWtCLElBQUk7QUFBQSxFQUVoQztBQUVBLFdBQVMscUJBQXFCLEtBQUs7QUFDakMsV0FBTyxDQUFDLEVBQ04sT0FDQSxPQUFPLElBQUksVUFBVSxjQUNyQixPQUFPLElBQUksT0FBTyxlQUNqQixDQUFDLElBQUksa0JBQWtCLElBQUksZ0JBQWdCLGFBQWE7QUFBQSxFQUU3RDtBQUVBLFdBQVMsbUJBQW1CLEtBQUs7QUFDL0IsV0FBTyxDQUFDLEVBQ04sUUFDQyxPQUFPLElBQUksU0FBUyxjQUFjLElBQUksbUJBQ3ZDLE9BQU8sSUFBSSxPQUFPLGNBQ2xCLE9BQU8sSUFBSSxVQUFVO0FBQUEsRUFFekI7QUFFQSxXQUFTLGFBQWEsS0FBSztBQUN6QixXQUNFLFFBRUUsSUFBSSxrQkFDSixJQUFJLGtCQUNILE9BQU8sSUFBSSxVQUFVLGNBQWMsT0FBTyxJQUFJLE9BQU8sY0FDckQsT0FBTyxJQUFJLFNBQVMsY0FBYyxPQUFPLElBQUksT0FBTztBQUFBLEVBRzNEO0FBRUEsV0FBUyxXQUFXLEtBQUssU0FBUztBQUNoQyxRQUFJLE9BQU87QUFBTSxhQUFPO0FBQ3hCLFFBQUksWUFBWTtBQUFNLGFBQU8sT0FBTyxJQUFJLE9BQU8sbUJBQW1CO0FBQ2xFLFFBQUksWUFBWTtBQUFPLGFBQU8sT0FBTyxJQUFJLE9BQU8sY0FBYztBQUM5RCxXQUFPLE9BQU8sSUFBSSxPQUFPLG1CQUFtQixjQUMxQyxPQUFPLElBQUksT0FBTyxjQUFjO0FBQUEsRUFDcEM7QUFFQSxXQUFTLFlBQVksUUFBUTtBQUMzQixRQUFJLENBQUMsYUFBYSxNQUFNO0FBQUcsYUFBTztBQUNsQyxVQUFNLFNBQVMsT0FBTztBQUN0QixVQUFNLFNBQVMsT0FBTztBQUN0QixVQUFNLFFBQVEsVUFBVTtBQUN4QixXQUFPLENBQUMsRUFBRSxPQUFPLGFBQWEsT0FBTztBQUFBLEVBQ3ZDO0FBR0EsV0FBUyxnQkFBZ0IsUUFBUTtBQUMvQixRQUFJLENBQUMscUJBQXFCLE1BQU07QUFBRyxhQUFPO0FBQzFDLFFBQUksT0FBTyxrQkFBa0I7QUFBTSxhQUFPO0FBQzFDLFVBQU0sU0FBUyxPQUFPO0FBQ3RCLFFBQUksUUFBUTtBQUFTLGFBQU87QUFDNUIsUUFBSSxPQUFPLFFBQVEsVUFBVTtBQUFXLGFBQU87QUFDL0MsV0FBTyxPQUFPO0FBQUEsRUFDaEI7QUFnQkEsV0FBU08saUJBQWdCLFFBQVE7QUFDL0IsUUFBSSxDQUFDLHFCQUFxQixNQUFNO0FBQUcsYUFBTztBQUMxQyxRQUFJLE9BQU8sa0JBQWtCO0FBQU0sYUFBTztBQUMxQyxVQUFNLFNBQVMsT0FBTztBQUN0QixRQUFJLENBQUMsVUFBVSxPQUFPO0FBQVMsYUFBTztBQUN0QyxRQUFJLE9BQU8sUUFBUSxVQUFVO0FBQVcsYUFBTztBQUMvQyxXQUFPLE9BQU87QUFBQSxFQUNoQjtBQUdBLFdBQVMsbUJBQW1CLFFBQVEsUUFBUTtBQUMxQyxRQUFJLENBQUMscUJBQXFCLE1BQU07QUFBRyxhQUFPO0FBQzFDLFVBQU0sU0FBUyxPQUFPO0FBQ3RCLFFBQUksUUFBUTtBQUFTLGFBQU87QUFDNUIsUUFBSSxPQUFPLFFBQVEsZUFBZTtBQUFXLGFBQU87QUFDcEQsV0FBTyxDQUFDLEVBQ04sT0FBTyxjQUNOLFdBQVcsU0FBUyxPQUFPLFVBQVUsUUFBUSxPQUFPLFdBQVc7QUFBQSxFQUVwRTtBQUVBLFdBQVMsWUFBWSxRQUFRO0FBQzNCLFdBQU8sQ0FBQyxFQUFFLFdBQ1IsT0FBTyxtQkFDUCxPQUFPLG1CQUNQLE9BQU87QUFBQSxFQUVYO0FBRUEsV0FBU0MsWUFBVyxRQUFRO0FBQzFCLFVBQU1DLEtBQUkscUJBQXFCLE1BQU07QUFDckMsUUFBSUEsT0FBTSxRQUFRLE9BQU8sUUFBUSxhQUFhO0FBQVcsYUFBTztBQUNoRSxRQUFJLFlBQVksTUFBTTtBQUFHLGFBQU87QUFDaEMsV0FBT0EsTUFBSyxPQUFPLFlBQVksQ0FBQyxtQkFBbUIsTUFBTTtBQUFBLEVBQzNEO0FBRUEsV0FBU0MsWUFBVyxRQUFRO0FBQzFCLFVBQU1ELEtBQUkscUJBQXFCLE1BQU07QUFDckMsUUFBSUEsT0FBTSxRQUFRLE9BQU8sUUFBUSxhQUFhO0FBQVcsYUFBTztBQUNoRSxRQUFJLFlBQVksTUFBTTtBQUFHLGFBQU87QUFDaEMsV0FBT0EsTUFBSyxPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsTUFBTTtBQUFBLEVBQ3hEOzs7QUN6SE8sTUFBTSxRQUFRLENBQUM7OztBQ0ZmLFdBQVMsT0FBTyxRQUFRO0FBQzdCLFdBQU8sa0JBQWtCO0FBQUEsRUFDM0I7OztBQ0VBLFdBQVNFLE9BQU1DLFdBQVUsVUFBVSxNQUFNO0FBQ3ZDLFFBQUk7QUFDSixRQUFJLE9BQU8sYUFBYSxZQUFZLG9CQUFvQkMsU0FBUTtBQUM5RCxhQUFPLElBQUlELFVBQVM7QUFBQSxRQUNsQixZQUFZO0FBQUEsUUFDWixHQUFHO0FBQUEsUUFDSCxPQUFPO0FBQ0wsZUFBSyxLQUFLLFFBQVE7QUFDbEIsZUFBSyxLQUFLLElBQUk7QUFBQSxRQUNoQjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJO0FBQ0osUUFBSSxZQUFZLFNBQVMsT0FBTyxnQkFBZ0I7QUFDOUMsZ0JBQVU7QUFDVixpQkFBVyxTQUFTLE9BQU8sZUFBZTtBQUFBLElBQzVDLFdBQVcsWUFBWSxTQUFTLE9BQU8sV0FBVztBQUNoRCxnQkFBVTtBQUNWLGlCQUFXLFNBQVMsT0FBTyxVQUFVO0FBQUEsSUFDdkMsT0FBTztBQUNMLFlBQU0sSUFBSSxxQkFBcUIsWUFBWSxDQUFDLFVBQVUsR0FBRyxRQUFRO0FBQUEsSUFDbkU7QUFFQSxVQUFNLFdBQVcsSUFBSUEsVUFBUztBQUFBLE1BQzVCLFlBQVk7QUFBQSxNQUNaLGVBQWU7QUFBQSxNQUVmLEdBQUc7QUFBQSxJQUNMLENBQUM7QUFJRCxRQUFJLFVBQVU7QUFFZCxhQUFTLFFBQVEsV0FBWTtBQUMzQixVQUFJLENBQUMsU0FBUztBQUNaLGtCQUFVO0FBQ1YsYUFBSztBQUFBLE1BQ1A7QUFBQSxJQUNGO0FBRUEsYUFBUyxXQUFXLFNBQVUsT0FBTyxJQUFJO0FBQ3ZDLFlBQU0sS0FBSyxFQUFFO0FBQUEsUUFDWCxNQUFjRSxVQUFTLElBQUksS0FBSztBQUFBLFFBQ2hDLENBQUNDLE9BQWNELFVBQVMsSUFBSUMsTUFBSyxLQUFLO0FBQUEsTUFDeEM7QUFBQSxJQUNGO0FBRUEsbUJBQWUsTUFBTSxPQUFPO0FBQzFCLFlBQU0sV0FBWSxVQUFVLFVBQWUsVUFBVTtBQUNyRCxZQUFNLFdBQVcsT0FBTyxTQUFTLFVBQVU7QUFDM0MsVUFBSSxZQUFZLFVBQVU7QUFDeEIsY0FBTSxFQUFFLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxNQUFNLEtBQUs7QUFDbEQsY0FBTTtBQUNOLFlBQUksTUFBTTtBQUNSO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLE9BQU8sU0FBUyxXQUFXLFlBQVk7QUFDekMsY0FBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLFNBQVMsT0FBTztBQUN4QyxjQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFFQSxtQkFBZSxPQUFPO0FBQ3BCLGlCQUFTO0FBQ1AsWUFBSTtBQUNGLGdCQUFNLEVBQUUsT0FBTyxLQUFLLElBQUksVUFDcEIsTUFBTSxTQUFTLEtBQUssSUFDcEIsU0FBUyxLQUFLO0FBRWxCLGNBQUksTUFBTTtBQUNSLHFCQUFTLEtBQUssSUFBSTtBQUFBLFVBQ3BCLE9BQU87QUFDTCxrQkFBTSxNQUFPLFNBQ1QsT0FBTyxNQUFNLFNBQVMsYUFDdEIsTUFBTSxRQUNOO0FBQ0osZ0JBQUksUUFBUSxNQUFNO0FBQ2hCLHdCQUFVO0FBQ1Ysb0JBQU0sSUFBSSx1QkFBdUI7QUFBQSxZQUNuQyxXQUFXLFNBQVMsS0FBSyxHQUFHLEdBQUc7QUFDN0I7QUFBQSxZQUNGLE9BQU87QUFDTCx3QkFBVTtBQUFBLFlBQ1o7QUFBQSxVQUNGO0FBQUEsUUFDRixTQUFTLEtBQVA7QUFDQSxtQkFBUyxRQUFRLEdBQUc7QUFBQSxRQUN0QjtBQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQU8sZUFBUUo7OztBQ25HZixXQUFTLGtCQUFrQixTQUFTLFVBQVUsV0FBVztBQUN2RCxXQUFPLFFBQVEsaUJBQWlCLE9BQzVCLFFBQVEsZ0JBQ1IsV0FDQSxRQUFRLGFBQ1I7QUFBQSxFQUNOO0FBRUEsV0FBUyx3QkFBd0IsWUFBWTtBQUMzQyxXQUFPLGFBQWEsS0FBSyxLQUFLO0FBQUEsRUFDaEM7QUFFQSxXQUFTLGlCQUFpQixPQUFPLFNBQVMsV0FBVyxVQUFVO0FBQzdELFVBQU0sTUFBTSxrQkFBa0IsU0FBUyxVQUFVLFNBQVM7QUFDMUQsUUFBSSxPQUFPLE1BQU07QUFDZixVQUFJLENBQUMsT0FBTyxVQUFVLEdBQUcsS0FBSyxNQUFNLEdBQUc7QUFDckMsY0FBTSxPQUFPLFdBQVcsV0FBVyxjQUFjO0FBQ2pELGNBQU0sSUFBSSxzQkFBc0IsTUFBTSxHQUFHO0FBQUEsTUFDM0M7QUFDQSxhQUFPLEtBQUssTUFBTSxHQUFHO0FBQUEsSUFDdkI7QUFHQSxXQUFPLHdCQUF3QixNQUFNLFVBQVU7QUFBQSxFQUNqRDs7O0FDeEJBLFdBQVMsT0FBTyxNQUFNO0FBQ3BCLG1CQUFHLEtBQUssTUFBTSxJQUFJO0FBQUEsRUFDcEI7QUFDQSxTQUFPLGVBQWUsT0FBTyxXQUFXLGVBQUcsU0FBUztBQUNwRCxTQUFPLGVBQWUsUUFBUSxjQUFFO0FBRWhDLFNBQU8sVUFBVSxPQUFPLFNBQVUsTUFBTSxTQUFTO0FBRS9DLFVBQU0sU0FBUztBQUVmLGFBQVMsT0FBTyxPQUFPO0FBQ3JCLFVBQUksS0FBSyxZQUFZLEtBQUssTUFBTSxLQUFLLE1BQU0sU0FBUyxPQUFPLE9BQU87QUFDaEUsZUFBTyxNQUFNO0FBQUEsTUFDZjtBQUFBLElBQ0Y7QUFFQSxXQUFPLEdBQUcsUUFBUSxNQUFNO0FBRXhCLGFBQVMsVUFBVTtBQUNqQixVQUFJLE9BQU8sWUFBWSxPQUFPLFFBQVE7QUFDcEMsZUFBTyxPQUFPO0FBQUEsTUFDaEI7QUFBQSxJQUNGO0FBRUEsU0FBSyxHQUFHLFNBQVMsT0FBTztBQUl4QixRQUFJLENBQUMsS0FBSyxhQUFhLENBQUMsV0FBVyxRQUFRLFFBQVEsUUFBUTtBQUN6RCxhQUFPLEdBQUcsT0FBTyxLQUFLO0FBQ3RCLGFBQU8sR0FBRyxTQUFTLE9BQU87QUFBQSxJQUM1QjtBQUVBLFFBQUksV0FBVztBQUNmLGFBQVMsUUFBUTtBQUNmLFVBQUk7QUFBVTtBQUNkLGlCQUFXO0FBRVgsV0FBSyxJQUFJO0FBQUEsSUFDWDtBQUVBLGFBQVMsVUFBVTtBQUNqQixVQUFJO0FBQVU7QUFDZCxpQkFBVztBQUVYLFVBQUksT0FBTyxLQUFLLFlBQVk7QUFBWSxhQUFLLFFBQVE7QUFBQSxJQUN2RDtBQUdBLGFBQVMsUUFBUUssS0FBSTtBQUNuQixjQUFRO0FBQ1IsVUFBSSxlQUFHLGNBQWMsTUFBTSxPQUFPLE1BQU0sR0FBRztBQUN6QyxhQUFLLEtBQUssU0FBU0EsR0FBRTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRjtBQUVBLElBQUFDLGlCQUFnQixRQUFRLFNBQVMsT0FBTztBQUN4QyxJQUFBQSxpQkFBZ0IsTUFBTSxTQUFTLE9BQU87QUFHdEMsYUFBUyxVQUFVO0FBQ2pCLGFBQU8sZUFBZSxRQUFRLE1BQU07QUFDcEMsV0FBSyxlQUFlLFNBQVMsT0FBTztBQUVwQyxhQUFPLGVBQWUsT0FBTyxLQUFLO0FBQ2xDLGFBQU8sZUFBZSxTQUFTLE9BQU87QUFFdEMsYUFBTyxlQUFlLFNBQVMsT0FBTztBQUN0QyxXQUFLLGVBQWUsU0FBUyxPQUFPO0FBRXBDLGFBQU8sZUFBZSxPQUFPLE9BQU87QUFDcEMsYUFBTyxlQUFlLFNBQVMsT0FBTztBQUV0QyxXQUFLLGVBQWUsU0FBUyxPQUFPO0FBQUEsSUFDdEM7QUFFQSxXQUFPLEdBQUcsT0FBTyxPQUFPO0FBQ3hCLFdBQU8sR0FBRyxTQUFTLE9BQU87QUFFMUIsU0FBSyxHQUFHLFNBQVMsT0FBTztBQUN4QixTQUFLLEtBQUssUUFBUSxNQUFNO0FBR3hCLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBU0EsaUJBQWdCLFNBQVMsT0FBT0MsS0FBSTtBQUczQyxRQUFJLE9BQU8sUUFBUSxvQkFBb0IsWUFBWTtBQUNqRCxhQUFPLFFBQVEsZ0JBQWdCLE9BQU9BLEdBQUU7QUFBQSxJQUMxQztBQU1BLFFBQUksQ0FBQyxRQUFRLFdBQVcsQ0FBQyxRQUFRLFFBQVEsUUFBUTtBQUMvQyxjQUFRLEdBQUcsT0FBT0EsR0FBRTtBQUFBLElBQ3RCLFdBQVcsTUFBTSxRQUFRLFFBQVEsUUFBUSxNQUFNLEdBQUc7QUFDaEQsY0FBUSxRQUFRLE9BQU8sUUFBUUEsR0FBRTtBQUFBLElBQ25DLE9BQU87QUFDTCxjQUFRLFFBQVEsU0FBUyxDQUFDQSxLQUFJLFFBQVEsUUFBUSxNQUFNO0FBQUEsSUFDdEQ7QUFBQSxFQUNGOzs7QUNyRkEsTUFBSyxpQkFBTCxrQkFBS0Msb0JBQUw7QUFDRSxJQUFBQSxnQ0FBQTtBQUNBLElBQUFBLGdDQUFBO0FBQ0EsSUFBQUEsZ0NBQUE7QUFIRyxXQUFBQTtBQUFBLEtBQUE7QUFNTCxXQUFTQyxtQkFBa0IsS0FBc0I7QUFDL0MsVUFBTSxXQUFXLGtCQUFhLE9BQU8sSUFBSTtBQUN6QyxRQUFJLFlBQVksWUFBWTtBQUFnQixxQkFBZSxRQUFRO0FBQ25FLFFBQUksQ0FBQyxZQUFZLE9BQU8sUUFBUSxZQUFZLElBQUksWUFBWSxNQUFNLE9BQU87QUFDdkUsWUFBTSxJQUFJLE1BQU0scUJBQXFCLEtBQUs7QUFBQSxJQUM1QztBQUNBLFdBQU8sT0FBTyxRQUFRO0FBQUEsRUFDeEI7QUFLQSxXQUFTLGNBQWMsTUFBc0I7QUFDM0MsUUFBSSxRQUFRO0FBQU0sYUFBTztBQUFBLGFBQ2hCLFFBQVEsTUFBTTtBQUFNLGFBQU87QUFBQSxhQUMzQixRQUFRLE1BQU07QUFBTSxhQUFPO0FBQUEsYUFDM0IsUUFBUSxNQUFNO0FBQU0sYUFBTztBQUNwQyxXQUFPLFFBQVEsTUFBTSxJQUFPLEtBQUs7QUFBQSxFQUNuQztBQU9BLFdBQVMsb0JBQ1BDLE9BQ0EsS0FDQUMsSUFDUTtBQUNSLFFBQUlDLE1BQUksSUFBSSxTQUFTO0FBQ3JCLFFBQUlBLE1BQUlEO0FBQUcsYUFBTztBQUNsQixRQUFJLEtBQUssY0FBYyxJQUFJQyxJQUFFO0FBQzdCLFFBQUksTUFBTSxHQUFHO0FBQ1gsVUFBSSxLQUFLO0FBQUcsUUFBQUYsTUFBSyxXQUFXLEtBQUs7QUFDakMsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLEVBQUVFLE1BQUlELE1BQUssT0FBTztBQUFJLGFBQU87QUFDakMsU0FBSyxjQUFjLElBQUlDLElBQUU7QUFDekIsUUFBSSxNQUFNLEdBQUc7QUFDWCxVQUFJLEtBQUs7QUFBRyxRQUFBRixNQUFLLFdBQVcsS0FBSztBQUNqQyxhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksRUFBRUUsTUFBSUQsTUFBSyxPQUFPO0FBQUksYUFBTztBQUNqQyxTQUFLLGNBQWMsSUFBSUMsSUFBRTtBQUN6QixRQUFJLE1BQU0sR0FBRztBQUNYLFVBQUksS0FBSyxHQUFHO0FBQ1YsWUFBSSxPQUFPO0FBQUcsZUFBSztBQUFBO0FBQ2QsVUFBQUYsTUFBSyxXQUFXLEtBQUs7QUFBQSxNQUM1QjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFZQSxXQUFTLG9CQUNQQSxPQUNBLEtBQ29CO0FBQ3BCLFNBQUssSUFBSSxLQUFLLFNBQVUsS0FBTTtBQUM1QixNQUFBQSxNQUFLLFdBQVc7QUFDaEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJQSxNQUFLLFdBQVcsS0FBSyxJQUFJLFNBQVMsR0FBRztBQUN2QyxXQUFLLElBQUksS0FBSyxTQUFVLEtBQU07QUFDNUIsUUFBQUEsTUFBSyxXQUFXO0FBQ2hCLGVBQU87QUFBQSxNQUNUO0FBQ0EsVUFBSUEsTUFBSyxXQUFXLEtBQUssSUFBSSxTQUFTLEdBQUc7QUFDdkMsYUFBSyxJQUFJLEtBQUssU0FBVSxLQUFNO0FBQzVCLFVBQUFBLE1BQUssV0FBVztBQUNoQixpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFLQSxXQUFTLHFCQUVQLEtBQ29CO0FBQ3BCLFVBQU1HLE1BQUksS0FBSyxZQUFZLEtBQUs7QUFDaEMsVUFBTUMsS0FBSSxvQkFBb0IsTUFBTSxHQUFHO0FBQ3ZDLFFBQUlBLE9BQU07QUFBVyxhQUFPQTtBQUM1QixRQUFJLEtBQUssWUFBWSxJQUFJLFFBQVE7QUFDL0IsVUFBSSxLQUFLLEtBQUssVUFBVUQsS0FBRyxHQUFHLEtBQUssUUFBUTtBQUMzQyxhQUFPLEtBQUssU0FBUyxTQUFTLEtBQUssVUFBVSxHQUFHLEtBQUssU0FBUztBQUFBLElBQ2hFO0FBQ0EsUUFBSSxLQUFLLEtBQUssVUFBVUEsS0FBRyxHQUFHLElBQUksTUFBTTtBQUN4QyxTQUFLLFlBQVksSUFBSTtBQUFBLEVBQ3ZCO0FBS0EsV0FBUyx1QkFFUCxLQUNvQjtBQUNwQixRQUFJLEtBQUssWUFBWSxJQUFJLFFBQVE7QUFDL0IsVUFBSSxLQUFLLEtBQUssVUFBVSxLQUFLLFlBQVksS0FBSyxVQUFVLEdBQUcsS0FBSyxRQUFRO0FBQ3hFLGFBQU8sS0FBSyxTQUFTLFNBQVMsS0FBSyxVQUFVLEdBQUcsS0FBSyxTQUFTO0FBQUEsSUFDaEU7QUFDQSxRQUFJLEtBQUssS0FBSyxVQUFVLEtBQUssWUFBWSxLQUFLLFVBQVUsR0FBRyxJQUFJLE1BQU07QUFDckUsU0FBSyxZQUFZLElBQUk7QUFBQSxFQUN2QjtBQU9BLFdBQVMsU0FBa0MsS0FBYUYsSUFBbUI7QUFDekUsVUFBTSxRQUFRLG9CQUFvQixNQUFNLEtBQUtBLEVBQUM7QUFDOUMsUUFBSSxDQUFDLEtBQUs7QUFBVSxhQUFPLElBQUksU0FBUyxRQUFRQSxFQUFDO0FBQ2pELFNBQUssWUFBWTtBQUNqQixVQUFNLE1BQU0sSUFBSSxVQUFVLFFBQVEsS0FBSztBQUN2QyxRQUFJLEtBQUssS0FBSyxVQUFVLEdBQUcsR0FBRztBQUM5QixXQUFPLElBQUksU0FBUyxRQUFRQSxJQUFHLEdBQUc7QUFBQSxFQUNwQztBQU1BLFdBQVMsUUFBMkIsS0FBc0I7QUFDeEQsVUFBTUcsS0FBSSxPQUFPLElBQUksU0FBUyxLQUFLLE1BQU0sR0FBRyxJQUFJO0FBQ2hELFFBQUksS0FBSztBQUFVLGFBQU9BLEtBQUk7QUFDOUIsV0FBT0E7QUFBQSxFQUNUO0FBRUEsV0FBU0MsV0FFUCxLQUNRO0FBQ1IsUUFBSSxPQUFPLFFBQVEsVUFBVTtBQUMzQixhQUFPO0FBQUEsSUFDVDtBQUNBLFFBQUksSUFBSSxXQUFXO0FBQUcsYUFBTztBQUM3QixRQUFJRDtBQUNKLFFBQUlIO0FBQ0osUUFBSSxLQUFLLFVBQVU7QUFDakIsTUFBQUcsS0FBSSxLQUFLLFNBQVMsR0FBRztBQUNyQixVQUFJQSxPQUFNO0FBQVcsZUFBTztBQUM1QixNQUFBSCxLQUFJLEtBQUs7QUFDVCxXQUFLLFdBQVc7QUFBQSxJQUNsQixPQUFPO0FBQ0wsTUFBQUEsS0FBSTtBQUFBLElBQ047QUFDQSxRQUFJQSxLQUFJLElBQUk7QUFBUSxhQUFPRyxLQUFJQSxLQUFJLEtBQUssS0FBSyxLQUFLSCxFQUFDLElBQUksS0FBSyxLQUFLLEtBQUtBLEVBQUM7QUFDdkUsV0FBT0csTUFBSztBQUFBLEVBQ2Q7QUFFQSxXQUFTLFdBQW9DLEtBQWFILElBQW1CO0FBQzNFLFVBQU1LLE1BQUssSUFBSSxTQUFTTCxNQUFLO0FBQzdCLFFBQUlLLE9BQU07QUFBRyxhQUFPLElBQUksU0FBUyxVQUFVTCxFQUFDO0FBQzVDLFNBQUssV0FBVyxJQUFJSztBQUNwQixTQUFLLFlBQVk7QUFDakIsUUFBSUEsT0FBTSxHQUFHO0FBQ1gsV0FBSyxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVM7QUFBQSxJQUN0QyxPQUFPO0FBQ0wsV0FBSyxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVM7QUFDcEMsV0FBSyxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVM7QUFBQSxJQUN0QztBQUNBLFdBQU8sSUFBSSxTQUFTLFVBQVVMLElBQUcsSUFBSSxTQUFTSyxFQUFDO0FBQUEsRUFDakQ7QUFFQSxXQUFTLFVBQStCLEtBQXNCO0FBQzVELFVBQU1GLEtBQUksT0FBTyxJQUFJLFNBQVMsS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUNoRCxRQUFJLEtBQUssVUFBVTtBQUNqQixhQUFPQSxLQUFJLEtBQUssU0FBUyxTQUFTLFVBQVUsR0FBRyxJQUFJLEtBQUssUUFBUTtBQUFBLElBQ2xFO0FBQ0EsV0FBT0E7QUFBQSxFQUNUO0FBRUEsV0FBUyxZQUVQLEtBQ1E7QUFDUixRQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLGFBQU87QUFBQSxJQUNUO0FBQ0EsV0FBTyxJQUFJLFNBQVMsS0FBSyxRQUFRO0FBQUEsRUFDbkM7QUFFQSxXQUFTLFVBQWdDLEtBQXNCO0FBQzdELFdBQU8sT0FBTyxJQUFJLFNBQVMsS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUFBLEVBQy9DO0FBRUEsTUFBTSxvQkFBTixNQUF3QjtBQUFBLElBSXRCLFlBQW1CLFVBQWtCLElBQVk7QUFBOUI7QUFGbkIsV0FBTyxXQUFXO0FBQ2xCLFdBQU8sWUFBWTtBQUVqQixXQUFLLFdBQVdHLFFBQU8sWUFBWSxFQUFFO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBRUEsTUFBTSxnQkFBTixjQUE0QixrQkFBa0I7QUFBQSxJQU01QyxZQUFZLFVBQW1CO0FBQzdCLFlBQU1SLG1CQUFrQixRQUFRLEdBQUcsQ0FBQztBQU50QyxXQUFPLE1BQU07QUFDYixXQUFPLFdBQVc7QUFDbEIsV0FBTyxPQUFPO0FBQ2QsV0FBTyxRQUFRTTtBQUFBLElBSWY7QUFBQSxFQUNGO0FBRUEsTUFBTSxpQkFBTixjQUE2QixrQkFBa0I7QUFBQSxJQU03QyxZQUFZLFVBQW1CO0FBQzdCLFlBQU1OLG1CQUFrQixRQUFRLEdBQUcsQ0FBQztBQU50QyxXQUFPLE1BQU07QUFDYixXQUFPLFdBQVc7QUFDbEIsV0FBTyxPQUFPO0FBQ2QsV0FBTyxRQUFRO0FBQUEsSUFJZjtBQUFBLEVBQ0Y7QUFFQSxNQUFNLGNBQU4sY0FBMEIsa0JBQWtCO0FBQUEsSUFNMUMsWUFBWSxVQUFtQjtBQUM3QixZQUFNQSxtQkFBa0IsUUFBUSxHQUFHLENBQUM7QUFOdEMsV0FBTyxNQUFNO0FBQ2IsV0FBTyxXQUFXO0FBQ2xCLFdBQU8sT0FBTztBQUNkLFdBQU8sUUFBUU07QUFBQSxJQUlmO0FBQUEsRUFDRjtBQU9PLE1BQU0sZ0JBQU4sTUFBb0I7QUFBQSxJQVV6QixZQUFZLFVBQW1CO0FBQzdCLFVBQUk7QUFDSixjQUFRO0FBQUEsYUFDRDtBQUNILG9CQUFVLElBQUksWUFBWSxRQUFRO0FBQ2xDO0FBQUEsYUFDRztBQUNILG9CQUFVLElBQUksY0FBYyxRQUFRO0FBQ3BDO0FBQUE7QUFFQSxvQkFBVSxJQUFJLGVBQWUsUUFBUTtBQUFBO0FBRXpDLFdBQUssV0FBVyxRQUFRO0FBQ3hCLFdBQUssTUFBTSxRQUFRO0FBQ25CLFdBQUssV0FBVyxRQUFRO0FBQ3hCLFdBQUssV0FBVyxRQUFRO0FBQ3hCLFdBQUssV0FBVyxRQUFRO0FBQ3hCLFdBQUssWUFBWSxRQUFRO0FBQ3pCLFdBQUssT0FBTyxRQUFRO0FBQ3BCLFdBQUssUUFBUSxRQUFRO0FBQUEsSUFDdkI7QUFBQSxFQUNGO0FBRUEsTUFBTSxpQkFBaUIsSUFBSSxNQUFNLGVBQWU7QUFBQSxJQUM5QyxNQUFNLFNBQVMsU0FBUyxNQUFNO0FBRTVCLGFBQU8sT0FBTyxPQUFPLFNBQVMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQUEsSUFDMUQ7QUFBQSxFQUNGLENBQUM7OztBQ3ZURCxNQUFNLGFBQU4sTUFBaUI7QUFBQSxJQUNmLGNBQWM7QUFDWixXQUFLLE9BQU87QUFDWixXQUFLLE9BQU87QUFDWixXQUFLLFNBQVM7QUFBQSxJQUNoQjtBQUFBLElBRUEsS0FBS0csS0FBRztBQUNOLFlBQU0sUUFBUSxFQUFFLE1BQU1BLEtBQUcsTUFBTSxLQUFLO0FBQ3BDLFVBQUksS0FBSyxTQUFTLEdBQUc7QUFDbkIsYUFBSyxLQUFLLE9BQU87QUFBQSxNQUNuQixPQUFPO0FBQ0wsYUFBSyxPQUFPO0FBQUEsTUFDZDtBQUNBLFdBQUssT0FBTztBQUNaLFFBQUUsS0FBSztBQUFBLElBQ1Q7QUFBQSxJQUVBLFFBQVFBLEtBQUc7QUFDVCxZQUFNLFFBQVEsRUFBRSxNQUFNQSxLQUFHLE1BQU0sS0FBSyxLQUFLO0FBQ3pDLFVBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsYUFBSyxPQUFPO0FBQUEsTUFDZDtBQUNBLFdBQUssT0FBTztBQUNaLFFBQUUsS0FBSztBQUFBLElBQ1Q7QUFBQSxJQUVBLFFBQVE7QUFDTixVQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCO0FBQUEsTUFDRjtBQUNBLFlBQU0sTUFBTSxLQUFLLEtBQUs7QUFDdEIsVUFBSSxLQUFLLFdBQVcsR0FBRztBQUNyQixhQUFLLE9BQU8sS0FBSyxPQUFPO0FBQUEsTUFDMUIsT0FBTztBQUNMLGFBQUssT0FBTyxLQUFLLEtBQUs7QUFBQSxNQUN4QjtBQUNBLFFBQUUsS0FBSztBQUNQLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxRQUFRO0FBQ04sV0FBSyxPQUFPLEtBQUssT0FBTztBQUN4QixXQUFLLFNBQVM7QUFBQSxJQUNoQjtBQUFBLElBRUEsS0FBS0MsSUFBRztBQUNOLFVBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsZUFBTztBQUFBLE1BQ1Q7QUFDQSxVQUFJQyxNQUFJLEtBQUs7QUFDYixVQUFJLE1BQU0sS0FBS0EsSUFBRTtBQUNqQixhQUFPQSxNQUFJQSxJQUFFLE1BQU07QUFDakIsZUFBT0QsS0FBSUMsSUFBRTtBQUFBLE1BQ2Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsT0FBT0MsSUFBRztBQUNSLFVBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsZUFBT0MsUUFBTyxNQUFNLENBQUM7QUFBQSxNQUN2QjtBQUNBLFlBQU0sTUFBTUEsUUFBTyxZQUFZRCxPQUFNLENBQUM7QUFDdEMsVUFBSUQsTUFBSSxLQUFLO0FBQ2IsVUFBSUcsS0FBSTtBQUNSLGFBQU9ILEtBQUc7QUFDUixZQUFJLElBQUlBLElBQUUsTUFBTUcsRUFBQztBQUNqQixRQUFBQSxNQUFLSCxJQUFFLEtBQUs7QUFDWixRQUFBQSxNQUFJQSxJQUFFO0FBQUEsTUFDUjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFHQSxRQUFRQyxJQUFHLFlBQVk7QUFDckIsWUFBTSxPQUFPLEtBQUssS0FBSztBQUN2QixVQUFJQSxLQUFJLEtBQUssUUFBUTtBQUVuQixjQUFNRyxTQUFRLEtBQUssTUFBTSxHQUFHSCxFQUFDO0FBQzdCLGFBQUssS0FBSyxPQUFPLEtBQUssTUFBTUEsRUFBQztBQUM3QixlQUFPRztBQUFBLE1BQ1Q7QUFDQSxVQUFJSCxPQUFNLEtBQUssUUFBUTtBQUVyQixlQUFPLEtBQUssTUFBTTtBQUFBLE1BQ3BCO0FBRUEsYUFBTyxhQUFhLEtBQUssV0FBV0EsRUFBQyxJQUFJLEtBQUssV0FBV0EsRUFBQztBQUFBLElBQzVEO0FBQUEsSUFFQSxRQUFRO0FBQ04sYUFBTyxLQUFLLEtBQUs7QUFBQSxJQUNuQjtBQUFBLElBRUEsRUFBRSxPQUFPLFlBQVk7QUFDbkIsZUFBU0QsTUFBSSxLQUFLLE1BQU1BLEtBQUdBLE1BQUlBLElBQUUsTUFBTTtBQUNyQyxjQUFNQSxJQUFFO0FBQUEsTUFDVjtBQUFBLElBQ0Y7QUFBQSxJQUdBLFdBQVdDLElBQUc7QUFDWixVQUFJLE1BQU07QUFDVixVQUFJRCxNQUFJLEtBQUs7QUFDYixVQUFJSyxNQUFJO0FBQ1IsU0FBRztBQUNELGNBQU1DLE9BQU1OLElBQUU7QUFDZCxZQUFJQyxLQUFJSyxLQUFJLFFBQVE7QUFDbEIsaUJBQU9BO0FBQ1AsVUFBQUwsTUFBS0ssS0FBSTtBQUFBLFFBQ1gsT0FBTztBQUNMLGNBQUlMLE9BQU1LLEtBQUksUUFBUTtBQUNwQixtQkFBT0E7QUFDUCxjQUFFRDtBQUNGLGdCQUFJTCxJQUFFLE1BQU07QUFDVixtQkFBSyxPQUFPQSxJQUFFO0FBQUEsWUFDaEIsT0FBTztBQUNMLG1CQUFLLE9BQU8sS0FBSyxPQUFPO0FBQUEsWUFDMUI7QUFBQSxVQUNGLE9BQU87QUFDTCxtQkFBT00sS0FBSSxNQUFNLEdBQUdMLEVBQUM7QUFDckIsaUJBQUssT0FBT0Q7QUFDWixZQUFBQSxJQUFFLE9BQU9NLEtBQUksTUFBTUwsRUFBQztBQUFBLFVBQ3RCO0FBQ0E7QUFBQSxRQUNGO0FBQ0EsVUFBRUk7QUFBQSxNQUNKLFNBQVNMLE1BQUlBLElBQUU7QUFDZixXQUFLLFVBQVVLO0FBQ2YsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUdBLFdBQVdKLElBQUc7QUFDWixZQUFNLE1BQU1DLFFBQU8sWUFBWUQsRUFBQztBQUNoQyxZQUFNLFNBQVNBO0FBQ2YsVUFBSUQsTUFBSSxLQUFLO0FBQ2IsVUFBSUssTUFBSTtBQUNSLFNBQUc7QUFDRCxjQUFNLE1BQU1MLElBQUU7QUFDZCxZQUFJQyxLQUFJLElBQUksUUFBUTtBQUNsQixjQUFJLElBQUksS0FBSyxTQUFTQSxFQUFDO0FBQ3ZCLFVBQUFBLE1BQUssSUFBSTtBQUFBLFFBQ1gsT0FBTztBQUNMLGNBQUlBLE9BQU0sSUFBSSxRQUFRO0FBQ3BCLGdCQUFJLElBQUksS0FBSyxTQUFTQSxFQUFDO0FBQ3ZCLGNBQUVJO0FBQ0YsZ0JBQUlMLElBQUUsTUFBTTtBQUNWLG1CQUFLLE9BQU9BLElBQUU7QUFBQSxZQUNoQixPQUFPO0FBQ0wsbUJBQUssT0FBTyxLQUFLLE9BQU87QUFBQSxZQUMxQjtBQUFBLFVBQ0YsT0FBTztBQUNMLGdCQUFJO0FBQUEsY0FDRixJQUFJLFdBQVcsSUFBSSxRQUFRLElBQUksWUFBWUMsRUFBQztBQUFBLGNBQzVDLFNBQVNBO0FBQUEsWUFDWDtBQUNBLGlCQUFLLE9BQU9EO0FBQ1osWUFBQUEsSUFBRSxPQUFPLElBQUksTUFBTUMsRUFBQztBQUFBLFVBQ3RCO0FBQ0E7QUFBQSxRQUNGO0FBQ0EsVUFBRUk7QUFBQSxNQUNKLFNBQVNMLE1BQUlBLElBQUU7QUFDZixXQUFLLFVBQVVLO0FBQ2YsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUdBLENBQUMsUUFBUSxRQUFRRSxLQUFHLFNBQVM7QUFDM0IsYUFBTyxRQUFRLE1BQU07QUFBQSxRQUNuQixHQUFHO0FBQUEsUUFFSCxPQUFPO0FBQUEsUUFFUCxlQUFlO0FBQUEsTUFDakIsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBRUEsTUFBTyxzQkFBUTs7O0FDaktmLE1BQUksUUFBUSxTQUFTLFVBQVUsQ0FBQ0MsUUFBTztBQUNyQyxZQUFRQTtBQUFBLEVBQ1YsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLFNBQVM7QUFFaEMsU0FBTyxlQUFlLFNBQVMsV0FBVyxPQUFPLFNBQVM7QUFDMUQsU0FBTyxlQUFlLFVBQVUsTUFBTTtBQUN0QyxNQUFNQyxPQUFNLE1BQU07QUFBQSxFQUFDO0FBRW5CLE1BQU0sRUFBRSxnQkFBQUMsZ0JBQWUsSUFBSTtBQUUzQixXQUFTLGNBQWMsU0FBUyxRQUFRLFVBQVU7QUFNaEQsUUFBSSxPQUFPLGFBQWEsV0FBVztBQUNqQyxpQkFBVyxrQkFBa0IsT0FBTztBQUFBLElBQ3RDO0FBSUEsU0FBSyxhQUFhLENBQUMsRUFBRSxXQUFXLFFBQVE7QUFFeEMsUUFBSSxVQUFVO0FBQ1osV0FBSyxhQUFhLEtBQUssY0FDckIsQ0FBQyxFQUFFLFdBQVcsUUFBUTtBQUFBLElBQzFCO0FBSUEsU0FBSyxnQkFBZ0IsVUFDakIsaUJBQWlCLE1BQU0sU0FBUyx5QkFBeUIsUUFBUSxJQUNqRSx3QkFBd0IsS0FBSztBQUtqQyxTQUFLLFNBQVMsSUFBSSxvQkFBVztBQUM3QixTQUFLLFNBQVM7QUFDZCxTQUFLLFFBQVEsQ0FBQztBQUNkLFNBQUssVUFBVTtBQUNmLFNBQUssUUFBUTtBQUNiLFNBQUssYUFBYTtBQUNsQixTQUFLLFVBQVU7QUFNZixTQUFLLGNBQWM7QUFNbkIsU0FBSyxPQUFPO0FBSVosU0FBSyxlQUFlO0FBQ3BCLFNBQUssa0JBQWtCO0FBQ3ZCLFNBQUssb0JBQW9CO0FBQ3pCLFNBQUssa0JBQWtCO0FBQ3ZCLFNBQUssV0FBVztBQUdoQixTQUFLLGVBQWU7QUFHcEIsU0FBSyxZQUFZLENBQUMsV0FBVyxRQUFRLGNBQWM7QUFHbkQsU0FBSyxjQUFjLENBQUMsV0FBVyxRQUFRLGdCQUFnQjtBQUd2RCxTQUFLLFlBQVk7QUFNakIsU0FBSyxVQUFVO0FBR2YsU0FBSyxTQUFTO0FBSWQsU0FBSyxlQUFlO0FBS3BCLFNBQUssa0JBQW1CLFdBQVcsUUFBUSxtQkFBb0I7QUFJL0QsU0FBSyxvQkFBb0I7QUFDekIsU0FBSyxrQkFBa0I7QUFHdkIsU0FBSyxjQUFjO0FBRW5CLFNBQUssY0FBYztBQUVuQixTQUFLLFVBQVU7QUFDZixTQUFLLFdBQVc7QUFDaEIsUUFBSSxXQUFXLFFBQVEsVUFBVTtBQUMvQixXQUFLLFVBQVUsSUFBSSxjQUFjLFFBQVEsUUFBUTtBQUNqRCxXQUFLLFdBQVcsUUFBUTtBQUFBLElBQzFCO0FBQUEsRUFDRjtBQUVBLFdBQVMsU0FBUyxTQUFTO0FBQ3pCLFFBQUksRUFBRSxnQkFBZ0IsV0FBVztBQUMvQixhQUFPLElBQUksU0FBUyxPQUFPO0FBQUEsSUFDN0I7QUFJQSxVQUFNLFdBQVcsZ0JBQWdCLE9BQU87QUFFeEMsU0FBSyxpQkFBaUIsSUFBSSxjQUFjLFNBQVMsTUFBTSxRQUFRO0FBRS9ELFFBQUksU0FBUztBQUNYLFVBQUksT0FBTyxRQUFRLFNBQVMsWUFBWTtBQUN0QyxhQUFLLFFBQVEsUUFBUTtBQUFBLE1BQ3ZCO0FBRUEsVUFBSSxPQUFPLFFBQVEsWUFBWSxZQUFZO0FBQ3pDLGFBQUssV0FBVyxRQUFRO0FBQUEsTUFDMUI7QUFFQSxVQUFJLE9BQU8sUUFBUSxjQUFjLFlBQVk7QUFDM0MsYUFBSyxhQUFhLFFBQVE7QUFBQSxNQUM1QjtBQUNBLFVBQUksUUFBUSxVQUFVLENBQUMsVUFBVTtBQUMvQixpQ0FBeUIsUUFBUSxRQUFRLElBQUk7QUFBQSxNQUMvQztBQUFBLElBQ0Y7QUFFQSxXQUFPLEtBQUssTUFBTSxPQUFPO0FBRXpCLG9CQUFZLFVBQVUsTUFBTSxNQUFNO0FBQ2hDLFVBQUksS0FBSyxlQUFlLGNBQWM7QUFDcEMsc0JBQWMsTUFBTSxLQUFLLGNBQWM7QUFBQSxNQUN6QztBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFFQSxXQUFTLFVBQVUsVUFBVSxnQkFBWTtBQUN6QyxXQUFTLFVBQVUsYUFBYSxnQkFBWTtBQUM1QyxXQUFTLFVBQVUsV0FBVyxTQUFVLEtBQUssSUFBSTtBQUMvQyxPQUFHLEdBQUc7QUFBQSxFQUNSO0FBRUEsV0FBUyxVQUFVLGVBQUcsMEJBQTBCLFNBQVUsS0FBSztBQUM3RCxTQUFLLFFBQVEsR0FBRztBQUFBLEVBQ2xCO0FBTUEsV0FBUyxVQUFVLE9BQU8sU0FBVSxPQUFPLFVBQVU7QUFDbkQsV0FBTyxpQkFBaUIsTUFBTSxPQUFPLFVBQVUsS0FBSztBQUFBLEVBQ3REO0FBR0EsV0FBUyxVQUFVLFVBQVUsU0FBVSxPQUFPLFVBQVU7QUFDdEQsV0FBTyxpQkFBaUIsTUFBTSxPQUFPLFVBQVUsSUFBSTtBQUFBLEVBQ3JEO0FBRUEsV0FBUyxpQkFBaUIsUUFBUSxPQUFPLFVBQVUsWUFBWTtBQUM3RCxVQUFNLG9CQUFvQixLQUFLO0FBQy9CLFVBQU0sUUFBUSxPQUFPO0FBRXJCLFFBQUk7QUFDSixRQUFJLENBQUMsTUFBTSxZQUFZO0FBQ3JCLFVBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsbUJBQVcsWUFBWSxNQUFNO0FBQzdCLFlBQUksTUFBTSxhQUFhLFVBQVU7QUFDL0IsY0FBSSxjQUFjLE1BQU0sVUFBVTtBQUdoQyxvQkFBUUMsUUFBTyxLQUFLLE9BQU8sUUFBUSxFQUFFLFNBQVMsTUFBTSxRQUFRO0FBQUEsVUFDOUQsT0FBTztBQUNMLG9CQUFRQSxRQUFPLEtBQUssT0FBTyxRQUFRO0FBQ25DLHVCQUFXO0FBQUEsVUFDYjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLFdBQVcsaUJBQWlCQSxTQUFRO0FBQ2xDLG1CQUFXO0FBQUEsTUFDYixXQUFXLE9BQU8sY0FBYyxLQUFLLEdBQUc7QUFDdEMsZ0JBQVEsT0FBTyxvQkFBb0IsS0FBSztBQUN4QyxtQkFBVztBQUFBLE1BQ2IsV0FBVyxTQUFTLE1BQU07QUFDeEIsY0FBTSxJQUFJO0FBQUEsVUFDUjtBQUFBLFVBQ0EsQ0FBQyxVQUFVLFVBQVUsWUFBWTtBQUFBLFVBQ2pDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxLQUFLO0FBQ1AsTUFBQUQsZ0JBQWUsUUFBUSxHQUFHO0FBQUEsSUFDNUIsV0FBVyxVQUFVLE1BQU07QUFDekIsWUFBTSxVQUFVO0FBQ2hCLGlCQUFXLFFBQVEsS0FBSztBQUFBLElBQzFCLFdBQVcsTUFBTSxjQUFlLFNBQVMsTUFBTSxTQUFTLEdBQUk7QUFDMUQsVUFBSSxZQUFZO0FBQ2QsWUFBSSxNQUFNLFlBQVk7QUFDcEIsVUFBQUEsZ0JBQWUsUUFBUSxJQUFJLG1DQUFtQyxDQUFDO0FBQUEsUUFDakUsT0FBTztBQUNMLG1CQUFTLFFBQVEsT0FBTyxPQUFPLElBQUk7QUFBQSxRQUNyQztBQUFBLE1BQ0YsV0FBVyxNQUFNLE9BQU87QUFDdEIsUUFBQUEsZ0JBQWUsUUFBUSxJQUFJLDBCQUEwQixDQUFDO0FBQUEsTUFDeEQsV0FBVyxNQUFNLGFBQWEsTUFBTSxTQUFTO0FBQzNDLGVBQU87QUFBQSxNQUNULE9BQU87QUFDTCxjQUFNLFVBQVU7QUFDaEIsWUFBSSxNQUFNLFdBQVcsQ0FBQyxVQUFVO0FBQzlCLGtCQUFRLE1BQU0sUUFBUSxNQUFNLEtBQUs7QUFDakMsY0FBSSxNQUFNLGNBQWMsTUFBTSxXQUFXLEdBQUc7QUFDMUMscUJBQVMsUUFBUSxPQUFPLE9BQU8sS0FBSztBQUFBLFVBQ3RDLE9BQU87QUFDTCwwQkFBYyxRQUFRLEtBQUs7QUFBQSxVQUM3QjtBQUFBLFFBQ0YsT0FBTztBQUNMLG1CQUFTLFFBQVEsT0FBTyxPQUFPLEtBQUs7QUFBQSxRQUN0QztBQUFBLE1BQ0Y7QUFBQSxJQUNGLFdBQVcsQ0FBQyxZQUFZO0FBQ3RCLFlBQU0sVUFBVTtBQUNoQixvQkFBYyxRQUFRLEtBQUs7QUFBQSxJQUM3QjtBQUtBLFdBQU8sQ0FBQyxNQUFNLFVBQ1gsTUFBTSxTQUFTLE1BQU0saUJBQWlCLE1BQU0sV0FBVztBQUFBLEVBQzVEO0FBRUEsV0FBUyxTQUFTLFFBQVEsT0FBTyxPQUFPLFlBQVk7QUFDbEQsUUFDRSxNQUFNLFdBQVcsTUFBTSxXQUFXLEtBQUssQ0FBQyxNQUFNLFFBQzlDLE9BQU8sY0FBYyxNQUFNLElBQUksR0FDL0I7QUFHQSxVQUFJLE1BQU0saUJBQWlCO0FBQ3pCLGNBQU0sa0JBQWtCLE1BQU07QUFBQSxNQUNoQyxPQUFPO0FBQ0wsY0FBTSxvQkFBb0I7QUFBQSxNQUM1QjtBQUNBLFlBQU0sY0FBYztBQUNwQixhQUFPLEtBQUssUUFBUSxLQUFLO0FBQUEsSUFDM0IsT0FBTztBQUVMLFlBQU0sVUFBVSxNQUFNLGFBQWEsSUFBSSxNQUFNO0FBQzdDLFVBQUksWUFBWTtBQUNkLGNBQU0sT0FBTyxRQUFRLEtBQUs7QUFBQSxNQUM1QixPQUFPO0FBQ0wsY0FBTSxPQUFPLEtBQUssS0FBSztBQUFBLE1BQ3pCO0FBRUEsVUFBSSxNQUFNLGNBQWM7QUFDdEIscUJBQWEsTUFBTTtBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUNBLGtCQUFjLFFBQVEsS0FBSztBQUFBLEVBQzdCO0FBRUEsV0FBUyxVQUFVLFdBQVcsV0FBWTtBQUN4QyxVQUFNLFFBQVEsS0FBSztBQUNuQixXQUFPLE1BQU0sYUFBYSxRQUFRLE1BQU0sWUFBWTtBQUFBLEVBQ3REO0FBR0EsV0FBUyxVQUFVLGNBQWMsU0FBVSxLQUFLO0FBQzlDLFVBQU0sVUFBVSxJQUFJLGNBQWMsR0FBRztBQUNyQyxTQUFLLGVBQWUsVUFBVTtBQUU5QixTQUFLLGVBQWUsV0FBVyxLQUFLLGVBQWUsUUFBUTtBQUUzRCxVQUFNLFNBQVMsS0FBSyxlQUFlO0FBRW5DLFFBQUksVUFBVTtBQUNkLGVBQVcsUUFBUSxRQUFRO0FBQ3pCLGlCQUFXLFFBQVEsTUFBTSxJQUFJO0FBQUEsSUFDL0I7QUFDQSxXQUFPLE1BQU07QUFDYixRQUFJLFlBQVksSUFBSTtBQUNsQixhQUFPLEtBQUssT0FBTztBQUFBLElBQ3JCO0FBQ0EsU0FBSyxlQUFlLFNBQVMsUUFBUTtBQUNyQyxXQUFPO0FBQUEsRUFDVDtBQUdBLE1BQU0sVUFBVTtBQUNoQixXQUFTLHdCQUF3QkUsSUFBRztBQUNsQyxRQUFJQSxNQUFLLFNBQVM7QUFFaEIsTUFBQUEsS0FBSTtBQUFBLElBQ04sT0FBTztBQUdMLE1BQUFBO0FBQ0EsTUFBQUEsTUFBS0EsT0FBTTtBQUNYLE1BQUFBLE1BQUtBLE9BQU07QUFDWCxNQUFBQSxNQUFLQSxPQUFNO0FBQ1gsTUFBQUEsTUFBS0EsT0FBTTtBQUNYLE1BQUFBLE1BQUtBLE9BQU07QUFDWCxNQUFBQTtBQUFBLElBQ0Y7QUFDQSxXQUFPQTtBQUFBLEVBQ1Q7QUFJQSxXQUFTLGNBQWNBLElBQUcsT0FBTztBQUMvQixRQUFJQSxNQUFLLEtBQU0sTUFBTSxXQUFXLEtBQUssTUFBTSxPQUFRO0FBQ2pELGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxNQUFNLFlBQVk7QUFDcEIsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLE9BQU8sTUFBTUEsRUFBQyxHQUFHO0FBRW5CLFVBQUksTUFBTSxXQUFXLE1BQU0sUUFBUTtBQUNqQyxlQUFPLE1BQU0sT0FBTyxNQUFNLEVBQUU7QUFBQSxNQUM5QjtBQUNBLGFBQU8sTUFBTTtBQUFBLElBQ2Y7QUFDQSxRQUFJQSxNQUFLLE1BQU0sUUFBUTtBQUNyQixhQUFPQTtBQUFBLElBQ1Q7QUFDQSxXQUFPLE1BQU0sUUFBUSxNQUFNLFNBQVM7QUFBQSxFQUN0QztBQUdBLFdBQVMsVUFBVSxPQUFPLFNBQVVBLElBQUc7QUFDckMsVUFBTSxRQUFRQSxFQUFDO0FBR2YsUUFBSUEsT0FBTSxRQUFXO0FBQ25CLE1BQUFBLEtBQUk7QUFBQSxJQUNOLFdBQVcsQ0FBQyxPQUFPLFVBQVVBLEVBQUMsR0FBRztBQUMvQixNQUFBQSxLQUFJLE9BQU8sU0FBU0EsSUFBRyxFQUFFO0FBQUEsSUFDM0I7QUFDQSxVQUFNLFFBQVEsS0FBSztBQUNuQixVQUFNLFFBQVFBO0FBR2QsUUFBSUEsS0FBSSxNQUFNLGVBQWU7QUFDM0IsWUFBTSxnQkFBZ0Isd0JBQXdCQSxFQUFDO0FBQUEsSUFDakQ7QUFFQSxRQUFJQSxPQUFNLEdBQUc7QUFDWCxZQUFNLGtCQUFrQjtBQUFBLElBQzFCO0FBS0EsUUFDRUEsT0FBTSxLQUNOLE1BQU0sa0JBQ0osTUFBTSxrQkFBa0IsSUFDdEIsTUFBTSxVQUFVLE1BQU0sZ0JBQ3RCLE1BQU0sU0FBUyxNQUNqQixNQUFNLFFBQ1I7QUFDQSxZQUFNLHNCQUFzQixNQUFNLFFBQVEsTUFBTSxLQUFLO0FBQ3JELFVBQUksTUFBTSxXQUFXLEtBQUssTUFBTSxPQUFPO0FBQ3JDLG9CQUFZLElBQUk7QUFBQSxNQUNsQixPQUFPO0FBQ0wscUJBQWEsSUFBSTtBQUFBLE1BQ25CO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBQSxLQUFJLGNBQWNBLElBQUcsS0FBSztBQUcxQixRQUFJQSxPQUFNLEtBQUssTUFBTSxPQUFPO0FBQzFCLFVBQUksTUFBTSxXQUFXLEdBQUc7QUFDdEIsb0JBQVksSUFBSTtBQUFBLE1BQ2xCO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUF5QkEsUUFBSSxTQUFTLE1BQU07QUFDbkIsVUFBTSxpQkFBaUIsTUFBTTtBQUc3QixRQUFJLE1BQU0sV0FBVyxLQUFLLE1BQU0sU0FBU0EsS0FBSSxNQUFNLGVBQWU7QUFDaEUsZUFBUztBQUNULFlBQU0sOEJBQThCLE1BQU07QUFBQSxJQUM1QztBQUtBLFFBQ0UsTUFBTSxTQUFTLE1BQU0sV0FBVyxNQUFNLGFBQWEsTUFBTSxXQUN6RCxDQUFDLE1BQU0sYUFDUDtBQUNBLGVBQVM7QUFDVCxZQUFNLGtDQUFrQyxNQUFNO0FBQUEsSUFDaEQsV0FBVyxRQUFRO0FBQ2pCLFlBQU0sU0FBUztBQUNmLFlBQU0sVUFBVTtBQUNoQixZQUFNLE9BQU87QUFFYixVQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCLGNBQU0sZUFBZTtBQUFBLE1BQ3ZCO0FBR0EsV0FBSyxNQUFNLE1BQU0sYUFBYTtBQUU5QixZQUFNLE9BQU87QUFHYixVQUFJLENBQUMsTUFBTSxTQUFTO0FBQ2xCLFFBQUFBLEtBQUksY0FBYyxPQUFPLEtBQUs7QUFBQSxNQUNoQztBQUFBLElBQ0Y7QUFFQSxRQUFJO0FBQ0osUUFBSUEsS0FBSSxHQUFHO0FBQ1QsWUFBTSxTQUFTQSxJQUFHLEtBQUs7QUFBQSxJQUN6QixPQUFPO0FBQ0wsWUFBTTtBQUFBLElBQ1I7QUFFQSxRQUFJLFFBQVEsTUFBTTtBQUNoQixZQUFNLGVBQWUsTUFBTSxVQUFVLE1BQU07QUFDM0MsTUFBQUEsS0FBSTtBQUFBLElBQ04sT0FBTztBQUNMLFlBQU0sVUFBVUE7QUFDaEIsVUFBSSxNQUFNLGlCQUFpQjtBQUN6QixjQUFNLGtCQUFrQixNQUFNO0FBQUEsTUFDaEMsT0FBTztBQUNMLGNBQU0sb0JBQW9CO0FBQUEsTUFDNUI7QUFBQSxJQUNGO0FBRUEsUUFBSSxNQUFNLFdBQVcsR0FBRztBQUd0QixVQUFJLENBQUMsTUFBTSxPQUFPO0FBQ2hCLGNBQU0sZUFBZTtBQUFBLE1BQ3ZCO0FBR0EsVUFBSSxVQUFVQSxNQUFLLE1BQU0sT0FBTztBQUM5QixvQkFBWSxJQUFJO0FBQUEsTUFDbEI7QUFBQSxJQUNGO0FBRUEsUUFBSSxRQUFRLE1BQU07QUFDaEIsWUFBTSxjQUFjO0FBQ3BCLFdBQUssS0FBSyxRQUFRLEdBQUc7QUFBQSxJQUN2QjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxXQUFXLFFBQVEsT0FBTztBQUNqQyxVQUFNLFlBQVk7QUFDbEIsUUFBSSxNQUFNO0FBQU87QUFDakIsUUFBSSxNQUFNLFNBQVM7QUFDakIsWUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFJO0FBQ2hDLFVBQUksU0FBUyxNQUFNLFFBQVE7QUFDekIsY0FBTSxPQUFPLEtBQUssS0FBSztBQUN2QixjQUFNLFVBQVUsTUFBTSxhQUFhLElBQUksTUFBTTtBQUFBLE1BQy9DO0FBQUEsSUFDRjtBQUNBLFVBQU0sUUFBUTtBQUVkLFFBQUksTUFBTSxNQUFNO0FBSWQsbUJBQWEsTUFBTTtBQUFBLElBQ3JCLE9BQU87QUFFTCxZQUFNLGVBQWU7QUFDckIsWUFBTSxrQkFBa0I7QUFHeEIsb0JBQWMsTUFBTTtBQUFBLElBQ3RCO0FBQUEsRUFDRjtBQUtBLFdBQVMsYUFBYSxRQUFRO0FBQzVCLFVBQU0sUUFBUSxPQUFPO0FBQ3JCLFVBQU0sZ0JBQWdCLE1BQU0sY0FBYyxNQUFNLGVBQWU7QUFDL0QsVUFBTSxlQUFlO0FBQ3JCLFFBQUksQ0FBQyxNQUFNLGlCQUFpQjtBQUMxQixZQUFNLGdCQUFnQixNQUFNLE9BQU87QUFDbkMsWUFBTSxrQkFBa0I7QUFDeEIsTUFBQUMsVUFBUyxlQUFlLE1BQU07QUFBQSxJQUNoQztBQUFBLEVBQ0Y7QUFFQSxXQUFTLGNBQWMsUUFBUTtBQUM3QixVQUFNLFFBQVEsT0FBTztBQUNyQixVQUFNLGlCQUFpQixNQUFNLFdBQVcsTUFBTSxRQUFRLE1BQU0sS0FBSztBQUNqRSxRQUFJLENBQUMsTUFBTSxhQUFhLENBQUMsTUFBTSxZQUFZLE1BQU0sVUFBVSxNQUFNLFFBQVE7QUFDdkUsYUFBTyxLQUFLLFVBQVU7QUFDdEIsWUFBTSxrQkFBa0I7QUFBQSxJQUMxQjtBQVFBLFVBQU0sZUFBZSxDQUFDLE1BQU0sV0FDMUIsQ0FBQyxNQUFNLFNBQ1AsTUFBTSxVQUFVLE1BQU07QUFDeEIsU0FBSyxNQUFNO0FBQUEsRUFDYjtBQVFBLFdBQVMsY0FBYyxRQUFRLE9BQU87QUFDcEMsUUFBSSxDQUFDLE1BQU0sZUFBZSxNQUFNLGFBQWE7QUFDM0MsWUFBTSxjQUFjO0FBQ3BCLE1BQUFBLFVBQVMsZ0JBQWdCLFFBQVEsS0FBSztBQUFBLElBQ3hDO0FBQUEsRUFDRjtBQUVBLFdBQVMsZUFBZSxRQUFRLE9BQU87QUF3QnJDLFdBQ0UsQ0FBQyxNQUFNLFdBQVcsQ0FBQyxNQUFNLFVBQ3hCLE1BQU0sU0FBUyxNQUFNLGlCQUNuQixNQUFNLFdBQVcsTUFBTSxXQUFXLElBQ3JDO0FBQ0EsWUFBTSxNQUFNLE1BQU07QUFDbEIsWUFBTSxzQkFBc0I7QUFDNUIsYUFBTyxLQUFLLENBQUM7QUFDYixVQUFJLFFBQVEsTUFBTSxRQUFRO0FBRXhCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxVQUFNLGNBQWM7QUFBQSxFQUN0QjtBQU1BLFdBQVMsVUFBVSxRQUFRLFNBQVVELElBQUc7QUFDdEMsVUFBTSxJQUFJLDJCQUEyQixTQUFTO0FBQUEsRUFDaEQ7QUFFQSxXQUFTLFVBQVUsT0FBTyxTQUFVLE1BQU0sVUFBVTtBQUNsRCxVQUFNLE1BQU07QUFDWixVQUFNLFFBQVEsS0FBSztBQUVuQixRQUFJLE1BQU0sTUFBTSxXQUFXLEdBQUc7QUFDNUIsVUFBSSxDQUFDLE1BQU0saUJBQWlCO0FBQzFCLGNBQU0sa0JBQWtCO0FBQ3hCLGNBQU0sb0JBQW9CLElBQUk7QUFBQSxVQUM1QixNQUFNLG9CQUFvQixDQUFDLE1BQU0saUJBQWlCLElBQUksQ0FBQztBQUFBLFFBQ3pEO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxVQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCLFVBQU0seUJBQXlCLE1BQU0sTUFBTSxRQUFRLFFBQVE7QUFFM0QsVUFBTSxTQUFTLENBQUMsWUFBWSxTQUFTLFFBQVEsVUFDM0MsU0FBUyxNQUFNLFVBQ2YsU0FBUyxNQUFNO0FBRWpCLFVBQU0sUUFBUSxRQUFRLFFBQVE7QUFDOUIsUUFBSSxNQUFNLFlBQVk7QUFDcEIsTUFBQUMsVUFBUyxLQUFLO0FBQUEsSUFDaEIsT0FBTztBQUNMLFVBQUksS0FBSyxPQUFPLEtBQUs7QUFBQSxJQUN2QjtBQUVBLFNBQUssR0FBRyxVQUFVLFFBQVE7QUFDMUIsYUFBUyxTQUFTLFVBQVUsWUFBWTtBQUN0QyxZQUFNLFVBQVU7QUFDaEIsVUFBSSxhQUFhLEtBQUs7QUFDcEIsWUFBSSxjQUFjLFdBQVcsZUFBZSxPQUFPO0FBQ2pELHFCQUFXLGFBQWE7QUFDeEIsa0JBQVE7QUFBQSxRQUNWO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxhQUFTLFFBQVE7QUFDZixZQUFNLE9BQU87QUFDYixXQUFLLElBQUk7QUFBQSxJQUNYO0FBRUEsUUFBSTtBQUVKLFFBQUksWUFBWTtBQUNoQixhQUFTLFVBQVU7QUFDakIsWUFBTSxTQUFTO0FBRWYsV0FBSyxlQUFlLFNBQVMsT0FBTztBQUNwQyxXQUFLLGVBQWUsVUFBVSxRQUFRO0FBQ3RDLFVBQUksU0FBUztBQUNYLGFBQUssZUFBZSxTQUFTLE9BQU87QUFBQSxNQUN0QztBQUNBLFdBQUssZUFBZSxTQUFTLE9BQU87QUFDcEMsV0FBSyxlQUFlLFVBQVUsUUFBUTtBQUN0QyxVQUFJLGVBQWUsT0FBTyxLQUFLO0FBQy9CLFVBQUksZUFBZSxPQUFPLE1BQU07QUFDaEMsVUFBSSxlQUFlLFFBQVEsTUFBTTtBQUVqQyxrQkFBWTtBQU9aLFVBQ0UsV0FBVyxNQUFNLHNCQUNoQixDQUFDLEtBQUssa0JBQWtCLEtBQUssZUFBZSxZQUM3QztBQUNBLGdCQUFRO0FBQUEsTUFDVjtBQUFBLElBQ0Y7QUFFQSxhQUFTLFFBQVE7QUFLZixVQUFJLENBQUMsV0FBVztBQUNkLFlBQUksTUFBTSxNQUFNLFdBQVcsS0FBSyxNQUFNLE1BQU0sT0FBTyxNQUFNO0FBQ3ZELGdCQUFNLCtCQUErQixDQUFDO0FBQ3RDLGdCQUFNLG9CQUFvQjtBQUMxQixnQkFBTSxrQkFBa0I7QUFBQSxRQUMxQixXQUFXLE1BQU0sTUFBTSxTQUFTLEtBQUssTUFBTSxNQUFNLFNBQVMsSUFBSSxHQUFHO0FBQy9ELGdCQUFNLCtCQUErQixNQUFNLGtCQUFrQixJQUFJO0FBQ2pFLGdCQUFNLGtCQUFrQixJQUFJLElBQUk7QUFBQSxRQUNsQztBQUNBLFlBQUksTUFBTTtBQUFBLE1BQ1o7QUFDQSxVQUFJLENBQUMsU0FBUztBQUtaLGtCQUFVLFlBQVksS0FBSyxJQUFJO0FBQy9CLGFBQUssR0FBRyxTQUFTLE9BQU87QUFBQSxNQUMxQjtBQUFBLElBQ0Y7QUFFQSxRQUFJLEdBQUcsUUFBUSxNQUFNO0FBQ3JCLGFBQVMsT0FBTyxPQUFPO0FBQ3JCLFlBQU0sUUFBUTtBQUNkLFlBQU0sTUFBTSxLQUFLLE1BQU0sS0FBSztBQUM1QixZQUFNLGNBQWMsR0FBRztBQUN2QixVQUFJLFFBQVEsT0FBTztBQUNqQixjQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFJQSxhQUFTLFFBQVFDLEtBQUk7QUFDbkIsWUFBTSxXQUFXQSxHQUFFO0FBQ25CLGFBQU87QUFDUCxXQUFLLGVBQWUsU0FBUyxPQUFPO0FBQ3BDLFVBQUksZUFBRyxjQUFjLE1BQU0sT0FBTyxNQUFNLEdBQUc7QUFDekMsY0FBTUMsS0FBSSxLQUFLLGtCQUFrQixLQUFLO0FBQ3RDLFlBQUlBLE1BQUssQ0FBQ0EsR0FBRSxjQUFjO0FBRXhCLFVBQUFMLGdCQUFlLE1BQU1JLEdBQUU7QUFBQSxRQUN6QixPQUFPO0FBQ0wsZUFBSyxLQUFLLFNBQVNBLEdBQUU7QUFBQSxRQUN2QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBR0EsSUFBQUUsaUJBQWdCLE1BQU0sU0FBUyxPQUFPO0FBR3RDLGFBQVMsVUFBVTtBQUNqQixXQUFLLGVBQWUsVUFBVSxRQUFRO0FBQ3RDLGFBQU87QUFBQSxJQUNUO0FBQ0EsU0FBSyxLQUFLLFNBQVMsT0FBTztBQUMxQixhQUFTLFdBQVc7QUFDbEIsWUFBTSxVQUFVO0FBQ2hCLFdBQUssZUFBZSxTQUFTLE9BQU87QUFDcEMsYUFBTztBQUFBLElBQ1Q7QUFDQSxTQUFLLEtBQUssVUFBVSxRQUFRO0FBRTVCLGFBQVMsU0FBUztBQUNoQixZQUFNLFFBQVE7QUFDZCxVQUFJLE9BQU8sSUFBSTtBQUFBLElBQ2pCO0FBR0EsU0FBSyxLQUFLLFFBQVEsR0FBRztBQUlyQixRQUFJLEtBQUssc0JBQXNCLE1BQU07QUFDbkMsVUFBSSxNQUFNLFNBQVM7QUFDakIsY0FBTTtBQUFBLE1BQ1I7QUFBQSxJQUNGLFdBQVcsQ0FBQyxNQUFNLFNBQVM7QUFDekIsWUFBTSxhQUFhO0FBQ25CLFVBQUksT0FBTztBQUFBLElBQ2I7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsWUFBWSxLQUFLLE1BQU07QUFDOUIsV0FBTyxTQUFTLDRCQUE0QjtBQUMxQyxZQUFNLFFBQVEsSUFBSTtBQUtsQixVQUFJLE1BQU0sc0JBQXNCLE1BQU07QUFDcEMsY0FBTSxlQUFlLENBQUM7QUFDdEIsY0FBTSxvQkFBb0I7QUFBQSxNQUM1QixXQUFXLE1BQU0saUJBQWlCO0FBQ2hDLGNBQU0sZUFBZSxNQUFNLGtCQUFrQixJQUFJO0FBQ2pELGNBQU0sa0JBQWtCLE9BQU8sSUFBSTtBQUFBLE1BQ3JDO0FBRUEsV0FDRyxDQUFDLE1BQU0scUJBQXFCLE1BQU0sa0JBQWtCLFNBQVMsTUFDOUQsZUFBRyxjQUFjLEtBQUssTUFBTSxHQUM1QjtBQUNBLGNBQU0sVUFBVTtBQUNoQixhQUFLLEdBQUc7QUFBQSxNQUNWO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFVBQVUsU0FBUyxTQUFVLE1BQU07QUFDMUMsVUFBTSxRQUFRLEtBQUs7QUFDbkIsVUFBTSxhQUFhLEVBQUUsWUFBWSxNQUFNO0FBR3ZDLFFBQUksTUFBTSxNQUFNLFdBQVcsR0FBRztBQUM1QixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksQ0FBQyxNQUFNO0FBRVQsWUFBTSxRQUFRLE1BQU07QUFDcEIsWUFBTSxRQUFRLENBQUM7QUFDZixXQUFLLE1BQU07QUFFWCxlQUFTQyxLQUFJLEdBQUdBLEtBQUksTUFBTSxRQUFRQSxNQUFLO0FBQ3JDLGNBQU1BLElBQUcsS0FBSyxVQUFVLE1BQU0sRUFBRSxZQUFZLE1BQU0sQ0FBQztBQUFBLE1BQ3JEO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFHQSxVQUFNLFFBQVEsTUFBTSxNQUFNLFFBQVEsSUFBSTtBQUN0QyxRQUFJLFVBQVUsSUFBSTtBQUNoQixhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sTUFBTSxPQUFPLE9BQU8sQ0FBQztBQUMzQixRQUFJLE1BQU0sTUFBTSxXQUFXLEdBQUc7QUFDNUIsV0FBSyxNQUFNO0FBQUEsSUFDYjtBQUVBLFNBQUssS0FBSyxVQUFVLE1BQU0sVUFBVTtBQUVwQyxXQUFPO0FBQUEsRUFDVDtBQUlBLFdBQVMsVUFBVSxLQUFLLFNBQVUsSUFBSVQsS0FBSTtBQUN4QyxVQUFNLE1BQU0sT0FBTyxVQUFVLEdBQUcsS0FBSyxNQUFNLElBQUlBLEdBQUU7QUFDakQsVUFBTSxRQUFRLEtBQUs7QUFFbkIsUUFBSSxPQUFPLFFBQVE7QUFHakIsWUFBTSxvQkFBb0IsS0FBSyxjQUFjLFVBQVUsSUFBSTtBQUczRCxVQUFJLE1BQU0sWUFBWSxPQUFPO0FBQzNCLGFBQUssT0FBTztBQUFBLE1BQ2Q7QUFBQSxJQUNGLFdBQVcsT0FBTyxZQUFZO0FBQzVCLFVBQUksQ0FBQyxNQUFNLGNBQWMsQ0FBQyxNQUFNLG1CQUFtQjtBQUNqRCxjQUFNLG9CQUFvQixNQUFNLGVBQWU7QUFDL0MsY0FBTSxVQUFVO0FBQ2hCLGNBQU0sa0JBQWtCO0FBQ3hCLGNBQU0sZUFBZSxNQUFNLFFBQVEsTUFBTSxPQUFPO0FBQ2hELFlBQUksTUFBTSxRQUFRO0FBQ2hCLHVCQUFhLElBQUk7QUFBQSxRQUNuQixXQUFXLENBQUMsTUFBTSxTQUFTO0FBQ3pCLFVBQUFLLFVBQVMsa0JBQWtCLElBQUk7QUFBQSxRQUNqQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFDQSxXQUFTLFVBQVUsY0FBYyxTQUFTLFVBQVU7QUFFcEQsV0FBUyxVQUFVLGlCQUFpQixTQUFVLElBQUlMLEtBQUk7QUFDcEQsVUFBTSxNQUFNLE9BQU8sVUFBVSxlQUFlLEtBQUssTUFBTSxJQUFJQSxHQUFFO0FBRTdELFFBQUksT0FBTyxZQUFZO0FBT3JCLE1BQUFLLFVBQVMseUJBQXlCLElBQUk7QUFBQSxJQUN4QztBQUVBLFdBQU87QUFBQSxFQUNUO0FBQ0EsV0FBUyxVQUFVLE1BQU0sU0FBUyxVQUFVO0FBRTVDLFdBQVMsVUFBVSxxQkFBcUIsU0FBVSxJQUFJO0FBQ3BELFVBQU0sTUFBTSxPQUFPLFVBQVUsbUJBQW1CLE1BQU0sTUFBTSxTQUFTO0FBRXJFLFFBQUksT0FBTyxjQUFjLE9BQU8sUUFBVztBQU96QyxNQUFBQSxVQUFTLHlCQUF5QixJQUFJO0FBQUEsSUFDeEM7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsd0JBQXdCSyxPQUFNO0FBQ3JDLFVBQU0sUUFBUUEsTUFBSztBQUNuQixVQUFNLG9CQUFvQkEsTUFBSyxjQUFjLFVBQVUsSUFBSTtBQUUzRCxRQUFJLE1BQU0sbUJBQW1CLE1BQU0sYUFBYSxPQUFPO0FBR3JELFlBQU0sVUFBVTtBQUFBLElBR2xCLFdBQVdBLE1BQUssY0FBYyxNQUFNLElBQUksR0FBRztBQUN6QyxNQUFBQSxNQUFLLE9BQU87QUFBQSxJQUNkLFdBQVcsQ0FBQyxNQUFNLG1CQUFtQjtBQUNuQyxZQUFNLFVBQVU7QUFBQSxJQUNsQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGlCQUFpQkEsT0FBTTtBQUM5QixVQUFNLDBCQUEwQjtBQUNoQyxJQUFBQSxNQUFLLEtBQUssQ0FBQztBQUFBLEVBQ2I7QUFJQSxXQUFTLFVBQVUsU0FBUyxXQUFZO0FBQ3RDLFVBQU0sUUFBUSxLQUFLO0FBQ25CLFFBQUksQ0FBQyxNQUFNLFNBQVM7QUFDbEIsWUFBTSxRQUFRO0FBSWQsWUFBTSxVQUFVLENBQUMsTUFBTTtBQUN2QixhQUFPLE1BQU0sS0FBSztBQUFBLElBQ3BCO0FBQ0EsVUFBTSxXQUFXO0FBQ2pCLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxPQUFPLFFBQVEsT0FBTztBQUM3QixRQUFJLENBQUMsTUFBTSxpQkFBaUI7QUFDMUIsWUFBTSxrQkFBa0I7QUFDeEIsTUFBQUwsVUFBUyxTQUFTLFFBQVEsS0FBSztBQUFBLElBQ2pDO0FBQUEsRUFDRjtBQUVBLFdBQVMsUUFBUSxRQUFRLE9BQU87QUFDOUIsVUFBTSxVQUFVLE1BQU0sT0FBTztBQUM3QixRQUFJLENBQUMsTUFBTSxTQUFTO0FBQ2xCLGFBQU8sS0FBSyxDQUFDO0FBQUEsSUFDZjtBQUVBLFVBQU0sa0JBQWtCO0FBQ3hCLFdBQU8sS0FBSyxRQUFRO0FBQ3BCLFNBQUssTUFBTTtBQUNYLFFBQUksTUFBTSxXQUFXLENBQUMsTUFBTSxTQUFTO0FBQ25DLGFBQU8sS0FBSyxDQUFDO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFVBQVUsUUFBUSxXQUFZO0FBQ3JDLFVBQU0seUJBQXlCLEtBQUssZUFBZSxPQUFPO0FBQzFELFFBQUksS0FBSyxlQUFlLFlBQVksT0FBTztBQUN6QyxZQUFNLE9BQU87QUFDYixXQUFLLGVBQWUsVUFBVTtBQUM5QixXQUFLLEtBQUssT0FBTztBQUFBLElBQ25CO0FBQ0EsU0FBSyxlQUFlLFdBQVc7QUFDL0IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLEtBQUssUUFBUTtBQUNwQixVQUFNLFFBQVEsT0FBTztBQUNyQixVQUFNLFFBQVEsTUFBTSxPQUFPO0FBQzNCLFdBQU8sTUFBTSxXQUFXLE9BQU8sS0FBSyxNQUFNO0FBQUs7QUFBQSxFQUNqRDtBQUtBLFdBQVMsVUFBVSxPQUFPLFNBQVUsUUFBUTtBQUMxQyxRQUFJLFNBQVM7QUFNYixXQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVU7QUFDM0IsVUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxPQUFPO0FBQ3JDLGlCQUFTO0FBQ1QsZUFBTyxNQUFNO0FBQUEsTUFDZjtBQUFBLElBQ0YsQ0FBQztBQUVELFdBQU8sR0FBRyxPQUFPLE1BQU07QUFDckIsV0FBSyxLQUFLLElBQUk7QUFBQSxJQUNoQixDQUFDO0FBRUQsV0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRO0FBQzFCLE1BQUFILGdCQUFlLE1BQU0sR0FBRztBQUFBLElBQzFCLENBQUM7QUFFRCxXQUFPLEdBQUcsU0FBUyxNQUFNO0FBQ3ZCLFdBQUssUUFBUTtBQUFBLElBQ2YsQ0FBQztBQUVELFdBQU8sR0FBRyxXQUFXLE1BQU07QUFDekIsV0FBSyxRQUFRO0FBQUEsSUFDZixDQUFDO0FBRUQsU0FBSyxRQUFRLE1BQU07QUFDakIsVUFBSSxVQUFVLE9BQU8sUUFBUTtBQUMzQixpQkFBUztBQUNULGVBQU8sT0FBTztBQUFBLE1BQ2hCO0FBQUEsSUFDRjtBQUdBLFVBQU0sYUFBYSxPQUFPLEtBQUssTUFBTTtBQUNyQyxhQUFTUyxNQUFJLEdBQUdBLE1BQUksV0FBVyxRQUFRQSxPQUFLO0FBQzFDLFlBQU1GLEtBQUksV0FBV0U7QUFDckIsVUFBSSxLQUFLRixRQUFPLFVBQWEsT0FBTyxPQUFPQSxRQUFPLFlBQVk7QUFDNUQsYUFBS0EsTUFBSyxPQUFPQSxJQUFHLEtBQUssTUFBTTtBQUFBLE1BQ2pDO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxVQUFVLE9BQU8saUJBQWlCLFdBQVk7QUFDckQsV0FBTyxzQkFBc0IsSUFBSTtBQUFBLEVBQ25DO0FBRUEsV0FBUyxVQUFVLFdBQVcsU0FBVSxTQUFTO0FBQy9DLFFBQUksWUFBWSxRQUFXO0FBQ3pCLHFCQUFlLFNBQVMsU0FBUztBQUFBLElBQ25DO0FBQ0EsV0FBTyxzQkFBc0IsTUFBTSxPQUFPO0FBQUEsRUFDNUM7QUFFQSxXQUFTLHNCQUFzQixRQUFRLFNBQVM7QUFDOUMsUUFBSSxPQUFPLE9BQU8sU0FBUyxZQUFZO0FBQ3JDLGVBQVMsU0FBUyxLQUFLLFFBQVEsRUFBRSxZQUFZLEtBQUssQ0FBQztBQUFBLElBQ3JEO0FBRUEsVUFBTSxPQUFPLG9CQUFvQixRQUFRLE9BQU87QUFDaEQsU0FBSyxTQUFTO0FBQ2QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxrQkFBZ0Isb0JBQW9CLFFBQVEsU0FBUztBQUNuRCxRQUFJLFdBQVdSO0FBRWYsVUFBTSxPQUFPO0FBQUEsTUFDWCxpQkFBaUI7QUFBQSxNQUNqQixnQkFBZ0I7QUFBQSxNQUNoQixHQUFHO0FBQUEsSUFDTDtBQUVBLGFBQVMsS0FBS1csVUFBUztBQUNyQixVQUFJLFNBQVMsUUFBUTtBQUNuQixpQkFBUztBQUNULG1CQUFXWDtBQUFBLE1BQ2IsT0FBTztBQUNMLG1CQUFXVztBQUFBLE1BQ2I7QUFBQSxJQUNGO0FBRUEsVUFBTSxRQUFRLE9BQU87QUFFckIsUUFBSSxRQUFRLE1BQU07QUFDbEIsUUFBSSxlQUFlLE1BQU07QUFDekIsUUFBSSxhQUFhLE1BQU07QUFDdkIsUUFBSSxlQUFlLE1BQU07QUFFekIsV0FDRyxHQUFHLFlBQVksSUFBSSxFQUNuQixHQUFHLFNBQVMsU0FBVSxLQUFLO0FBQzFCLGNBQVE7QUFDUixxQkFBZTtBQUNmLFdBQUssS0FBSyxJQUFJO0FBQUEsSUFDaEIsQ0FBQyxFQUNBLEdBQUcsT0FBTyxXQUFZO0FBQ3JCLG1CQUFhO0FBQ2IsV0FBSyxLQUFLLElBQUk7QUFBQSxJQUNoQixDQUFDLEVBQ0EsR0FBRyxTQUFTLFdBQVk7QUFDdkIscUJBQWU7QUFDZixXQUFLLEtBQUssSUFBSTtBQUFBLElBQ2hCLENBQUM7QUFFSCxRQUFJLGNBQWM7QUFDbEIsUUFBSTtBQUNGLGFBQU8sTUFBTTtBQUNYLGNBQU0sUUFBUSxPQUFPLFlBQVksT0FBTyxPQUFPLEtBQUs7QUFDcEQsWUFBSSxVQUFVLE1BQU07QUFDbEIsZ0JBQU07QUFBQSxRQUNSLFdBQVcsY0FBYztBQUN2QixnQkFBTTtBQUFBLFFBQ1IsV0FBVyxZQUFZO0FBQ3JCO0FBQUEsUUFDRixXQUFXLGNBQWM7QUFDdkI7QUFBQSxRQUNGLE9BQU87QUFDTCxnQkFBTSxJQUFJLFFBQVEsSUFBSTtBQUFBLFFBQ3hCO0FBQUEsTUFDRjtBQUFBLElBQ0YsU0FBUyxLQUFQO0FBQ0EsVUFBSSxLQUFLLGdCQUFnQjtBQUN2Qix3QkFBWSxVQUFVLFFBQVEsR0FBRztBQUFBLE1BQ25DO0FBQ0Esb0JBQWM7QUFDZCxZQUFNO0FBQUEsSUFDUixVQUFFO0FBQ0EsVUFBSSxDQUFDLGVBQWUsS0FBSyxpQkFBaUI7QUFDeEMsWUFBSSxNQUFNLGVBQWUsQ0FBQyxZQUFZO0FBRXBDLDBCQUFZLFVBQVUsUUFBUSxJQUFJO0FBQUEsUUFDcEM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFLQSxTQUFPLGlCQUFpQixTQUFTLFdBQVc7QUFBQSxJQUMxQyxVQUFVO0FBQUEsTUFDUixNQUFNO0FBQ0osY0FBTUMsS0FBSSxLQUFLO0FBS2YsZUFBTyxDQUFDLENBQUNBLE1BQUtBLEdBQUUsYUFBYSxTQUFTLENBQUNBLEdBQUUsYUFBYSxDQUFDQSxHQUFFLGdCQUN2RCxDQUFDQSxHQUFFO0FBQUEsTUFDUDtBQUFBLE1BQ0EsSUFBSSxLQUFLO0FBRVAsWUFBSSxLQUFLLGdCQUFnQjtBQUN2QixlQUFLLGVBQWUsV0FBVyxDQUFDLENBQUM7QUFBQSxRQUNuQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFFQSxpQkFBaUI7QUFBQSxNQUNmLFlBQVk7QUFBQSxNQUNaLEtBQUssV0FBWTtBQUNmLGVBQU8sS0FBSyxlQUFlO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUEsSUFFQSxpQkFBaUI7QUFBQSxNQUNmLFlBQVk7QUFBQSxNQUNaLEtBQUssV0FBWTtBQUNmLGVBQU8sQ0FBQyxFQUFFLEtBQUssZUFBZSxhQUFhLEtBQUssZUFBZSxZQUM3RCxDQUFDLEtBQUssZUFBZTtBQUFBLE1BQ3pCO0FBQUEsSUFDRjtBQUFBLElBRUEsdUJBQXVCO0FBQUEsTUFDckIsWUFBWTtBQUFBLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBTyxLQUFLLGVBQWU7QUFBQSxNQUM3QjtBQUFBLElBQ0Y7QUFBQSxJQUVBLGdCQUFnQjtBQUFBLE1BQ2QsWUFBWTtBQUFBLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBTyxLQUFLLGtCQUFrQixLQUFLLGVBQWU7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFBQSxJQUVBLGlCQUFpQjtBQUFBLE1BQ2YsWUFBWTtBQUFBLE1BQ1osS0FBSyxXQUFZO0FBQ2YsZUFBTyxLQUFLLGVBQWU7QUFBQSxNQUM3QjtBQUFBLE1BQ0EsS0FBSyxTQUFVLE9BQU87QUFDcEIsWUFBSSxLQUFLLGdCQUFnQjtBQUN2QixlQUFLLGVBQWUsVUFBVTtBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUVBLGdCQUFnQjtBQUFBLE1BQ2QsWUFBWTtBQUFBLE1BQ1osTUFBTTtBQUNKLGVBQU8sS0FBSyxlQUFlO0FBQUEsTUFDN0I7QUFBQSxJQUNGO0FBQUEsSUFFQSxvQkFBb0I7QUFBQSxNQUNsQixZQUFZO0FBQUEsTUFDWixNQUFNO0FBQ0osZUFBTyxLQUFLLGlCQUFpQixLQUFLLGVBQWUsYUFBYTtBQUFBLE1BQ2hFO0FBQUEsSUFDRjtBQUFBLElBRUEsa0JBQWtCO0FBQUEsTUFDaEIsWUFBWTtBQUFBLE1BQ1osTUFBTTtBQUNKLGVBQU8sS0FBSyxpQkFBaUIsS0FBSyxlQUFlLFdBQVc7QUFBQSxNQUM5RDtBQUFBLElBQ0Y7QUFBQSxJQUVBLFdBQVc7QUFBQSxNQUNULFlBQVk7QUFBQSxNQUNaLE1BQU07QUFDSixZQUFJLEtBQUssbUJBQW1CLFFBQVc7QUFDckMsaUJBQU87QUFBQSxRQUNUO0FBQ0EsZUFBTyxLQUFLLGVBQWU7QUFBQSxNQUM3QjtBQUFBLE1BQ0EsSUFBSSxPQUFPO0FBR1QsWUFBSSxDQUFDLEtBQUssZ0JBQWdCO0FBQ3hCO0FBQUEsUUFDRjtBQUlBLGFBQUssZUFBZSxZQUFZO0FBQUEsTUFDbEM7QUFBQSxJQUNGO0FBQUEsSUFFQSxlQUFlO0FBQUEsTUFDYixZQUFZO0FBQUEsTUFDWixNQUFNO0FBQ0osZUFBTyxLQUFLLGlCQUFpQixLQUFLLGVBQWUsYUFBYTtBQUFBLE1BQ2hFO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQU8saUJBQWlCLGNBQWMsV0FBVztBQUFBLElBRS9DLFlBQVk7QUFBQSxNQUNWLE1BQU07QUFDSixlQUFPLEtBQUssTUFBTTtBQUFBLE1BQ3BCO0FBQUEsSUFDRjtBQUFBLElBR0EsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUNKLGVBQU8sS0FBSyxhQUFhO0FBQUEsTUFDM0I7QUFBQSxNQUNBLElBQUksT0FBTztBQUNULGFBQUssV0FBVyxDQUFDLENBQUM7QUFBQSxNQUNwQjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFNRCxXQUFTLFNBQVNULElBQUcsT0FBTztBQUUxQixRQUFJLE1BQU0sV0FBVyxHQUFHO0FBQ3RCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSTtBQUNKLFFBQUksTUFBTSxZQUFZO0FBQ3BCLFlBQU0sTUFBTSxPQUFPLE1BQU07QUFBQSxJQUMzQixXQUFXLENBQUNBLE1BQUtBLE1BQUssTUFBTSxRQUFRO0FBRWxDLFVBQUksTUFBTSxTQUFTO0FBQ2pCLGNBQU0sTUFBTSxPQUFPLEtBQUssRUFBRTtBQUFBLE1BQzVCLFdBQVcsTUFBTSxPQUFPLFdBQVcsR0FBRztBQUNwQyxjQUFNLE1BQU0sT0FBTyxNQUFNO0FBQUEsTUFDM0IsT0FBTztBQUNMLGNBQU0sTUFBTSxPQUFPLE9BQU8sTUFBTSxNQUFNO0FBQUEsTUFDeEM7QUFDQSxZQUFNLE9BQU8sTUFBTTtBQUFBLElBQ3JCLE9BQU87QUFFTCxZQUFNLE1BQU0sT0FBTyxRQUFRQSxJQUFHLE1BQU0sT0FBTztBQUFBLElBQzdDO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLFlBQVksUUFBUTtBQUMzQixVQUFNLFFBQVEsT0FBTztBQUVyQixVQUFNLGVBQWUsTUFBTSxVQUFVO0FBQ3JDLFFBQUksQ0FBQyxNQUFNLFlBQVk7QUFDckIsWUFBTSxRQUFRO0FBQ2QsTUFBQUMsVUFBUyxlQUFlLE9BQU8sTUFBTTtBQUFBLElBQ3ZDO0FBQUEsRUFDRjtBQUVBLFdBQVMsY0FBYyxPQUFPLFFBQVE7QUFDcEMsVUFBTSxpQkFBaUIsTUFBTSxZQUFZLE1BQU0sTUFBTTtBQUdyRCxRQUNFLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxNQUFNLGdCQUM5QixDQUFDLE1BQU0sY0FBYyxNQUFNLFdBQVcsR0FDdEM7QUFDQSxZQUFNLGFBQWE7QUFDbkIsYUFBTyxLQUFLLEtBQUs7QUFFakIsVUFBSSxPQUFPLFlBQVksT0FBTyxrQkFBa0IsT0FBTztBQUNyRCxRQUFBQSxVQUFTLGVBQWUsTUFBTTtBQUFBLE1BQ2hDLFdBQVcsTUFBTSxhQUFhO0FBRzVCLGNBQU0sU0FBUyxPQUFPO0FBQ3RCLGNBQU0sY0FBYyxDQUFDLFVBQ25CLE9BQU8sZ0JBR04sT0FBTyxZQUFZLE9BQU8sYUFBYTtBQUcxQyxZQUFJLGFBQWE7QUFDZixpQkFBTyxRQUFRO0FBQUEsUUFDakI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGNBQWMsUUFBUTtBQUM3QixVQUFNLFdBQVcsT0FBTyxZQUFZLENBQUMsT0FBTyxpQkFDMUMsQ0FBQyxPQUFPO0FBQ1YsUUFBSSxVQUFVO0FBQ1osYUFBTyxJQUFJO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGFBQWEsVUFBVSxNQUFNO0FBQ3BDLFdBQU8sYUFBTSxVQUFVLFVBQVUsSUFBSTtBQUFBLEVBQ3ZDO0FBRUEsV0FBUyxpQkFBaUIsUUFBUTtBQUNoQyxXQUFPLGtCQUFrQjtBQUFBLEVBQzNCO0FBRU8sTUFBTSxVQUFVLFNBQVMsVUFBVSxTQUN4QyxnQkFDQSxVQUFVLENBQUMsR0FDWDtBQUNBLFFBQUksQ0FBQyxpQkFBaUIsY0FBYyxHQUFHO0FBQ3JDLFlBQU0sSUFBSTtBQUFBLFFBQ1I7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsbUJBQWUsU0FBUyxTQUFTO0FBQ2pDLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0EsYUFBYTtBQUFBLE1BQ2I7QUFBQSxJQUNGLElBQUk7QUFFSixRQUFJLGFBQWEsVUFBYSxDQUFDRixRQUFPLFdBQVcsUUFBUSxHQUFHO0FBQzFELFlBQU0sSUFBSSxzQkFBc0IsVUFBVSxrQkFBa0I7QUFBQSxJQUM5RDtBQUNBLG9CQUFnQixZQUFZLG9CQUFvQjtBQUVoRCxVQUFNLFNBQVMsZUFBZSxVQUFVO0FBQ3hDLFFBQUksU0FBUztBQUViLFVBQU0sV0FBVyxJQUFJLFNBQVM7QUFBQSxNQUM1QjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUEsT0FBTztBQUNMLGVBQU8sS0FBSyxFQUFFO0FBQUEsVUFDWixDQUFDLFVBQVU7QUFDVCxnQkFBSSxNQUFNLE1BQU07QUFDZCx1QkFBUyxLQUFLLElBQUk7QUFBQSxZQUNwQixPQUFPO0FBQ0wsdUJBQVMsS0FBSyxNQUFNLEtBQUs7QUFBQSxZQUMzQjtBQUFBLFVBQ0Y7QUFBQSxVQUNBLENBQUMsVUFBVSxRQUFRLEtBQUssVUFBVSxLQUFLO0FBQUEsUUFDekM7QUFBQSxNQUNGO0FBQUEsTUFFQSxRQUFRLE9BQU8sVUFBVTtBQUN2QixpQkFBUyxPQUFPO0FBQ2QsY0FBSTtBQUNGLHFCQUFTLEtBQUs7QUFBQSxVQUNoQixTQUFTVyxRQUFQO0FBTUEsb0JBQVEsU0FBUyxNQUFNO0FBQ3JCLG9CQUFNQTtBQUFBLFlBQ1IsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBRUEsWUFBSSxDQUFDLFFBQVE7QUFDWCxpQkFBTyxPQUFPLEtBQUssRUFBRSxLQUFLLE1BQU0sSUFBSTtBQUNwQztBQUFBLFFBQ0Y7QUFFQSxhQUFLO0FBQUEsTUFDUDtBQUFBLElBQ0YsQ0FBQztBQUVELFdBQU8sT0FBTztBQUFBLE1BQ1osTUFBTTtBQUNKLGlCQUFTO0FBQ1QsWUFBSSxDQUFDQyxpQkFBZ0IsUUFBUSxHQUFHO0FBQzlCLG1CQUFTLEtBQUssSUFBSTtBQUFBLFFBQ3BCO0FBQUEsTUFDRjtBQUFBLE1BQ0EsQ0FBQyxVQUFVO0FBQ1QsaUJBQVM7QUFDVCxnQkFBUSxLQUFLLFVBQVUsS0FBSztBQUFBLE1BQzlCO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxLQUFLLEtBQUssU0FBUztBQUMxQixXQUFPLElBQUksU0FBUztBQUFBLE1BQ2xCLFlBQVksSUFBSSxzQkFBc0IsSUFBSSxjQUFjO0FBQUEsTUFDeEQsR0FBRztBQUFBLE1BQ0gsUUFBUSxLQUFLLFVBQVU7QUFDckIsd0JBQVksVUFBVSxLQUFLLEdBQUc7QUFDOUIsaUJBQVMsR0FBRztBQUFBLE1BQ2Q7QUFBQSxJQUNGLENBQUMsRUFBRSxLQUFLLEdBQUc7QUFBQSxFQUNiO0FBR0EsV0FBUyxZQUFZO0FBQ3JCLFdBQVMsZ0JBQWdCO0FBQ3pCLFdBQVMsT0FBTztBQUNoQixXQUFTLE9BQU87QUFFaEIsTUFBTyxtQkFBUTs7O0FDcDdDZixNQUFNLEVBQUUsZ0JBQUFDLGdCQUFlLElBQUk7QUFLM0IsV0FBUyxlQUFlLGNBQWM7QUFDcEMsVUFBTUMsY0FBYSxpQkFBUyxVQUFVLGNBQWMsWUFBWTtBQUVoRSxRQUFJLFlBQVk7QUFDaEIsUUFBSSxXQUFXO0FBQ2YsV0FBTyxXQUFXLGVBQWUsVUFBVSxZQUFZLFNBQVMsVUFBVTtBQUN4RSxVQUFJLFVBQVUsWUFBWSxTQUFTLFVBQVU7QUFDM0MsbUJBQVc7QUFDWDtBQUFBLE1BQ0Y7QUFDQSxrQkFBWSxPQUFPLGVBQWUsU0FBUztBQUFBLElBQzdDO0FBRUEsV0FBT0EsZUFBYztBQUFBLEVBQ3ZCO0FBRUEsU0FBTyxlQUFlLFNBQVMsV0FBVyxPQUFPLFNBQVM7QUFDMUQsU0FBTyxlQUFlLFVBQVUsTUFBTTtBQUV0QyxXQUFTQyxPQUFNO0FBQUEsRUFBQztBQUVoQixNQUFNLGNBQWMsT0FBTyxhQUFhO0FBRXhDLFdBQVMsY0FBYyxTQUFTLFFBQVEsVUFBVTtBQU1oRCxRQUFJLE9BQU8sYUFBYSxXQUFXO0FBQ2pDLGlCQUFXLGVBQWUsTUFBTTtBQUFBLElBQ2xDO0FBSUEsU0FBSyxhQUFhLENBQUMsRUFBRSxXQUFXLFFBQVE7QUFFeEMsUUFBSSxVQUFVO0FBQ1osV0FBSyxhQUFhLEtBQUssY0FDckIsQ0FBQyxFQUFFLFdBQVcsUUFBUTtBQUFBLElBQzFCO0FBS0EsU0FBSyxnQkFBZ0IsVUFDakIsaUJBQWlCLE1BQU0sU0FBUyx5QkFBeUIsUUFBUSxJQUNqRSx3QkFBd0IsS0FBSztBQUdqQyxTQUFLLGNBQWM7QUFHbkIsU0FBSyxZQUFZO0FBRWpCLFNBQUssU0FBUztBQUVkLFNBQUssUUFBUTtBQUViLFNBQUssV0FBVztBQUdoQixTQUFLLFlBQVk7QUFLakIsVUFBTSxXQUFXLENBQUMsRUFBRSxXQUFXLFFBQVEsa0JBQWtCO0FBQ3pELFNBQUssZ0JBQWdCLENBQUM7QUFLdEIsU0FBSyxrQkFBbUIsV0FBVyxRQUFRLG1CQUFvQjtBQUsvRCxTQUFLLFNBQVM7QUFHZCxTQUFLLFVBQVU7QUFHZixTQUFLLFNBQVM7QUFNZCxTQUFLLE9BQU87QUFLWixTQUFLLG1CQUFtQjtBQUd4QixTQUFLLFVBQVUsUUFBUSxLQUFLLFFBQVcsTUFBTTtBQUc3QyxTQUFLLFVBQVU7QUFHZixTQUFLLFdBQVc7QUFJaEIsU0FBSyxxQkFBcUI7QUFFMUIsZ0JBQVksSUFBSTtBQUloQixTQUFLLFlBQVk7QUFNakIsU0FBSyxjQUFjO0FBSW5CLFNBQUssY0FBYztBQUduQixTQUFLLGVBQWU7QUFHcEIsU0FBSyxZQUFZLENBQUMsV0FBVyxRQUFRLGNBQWM7QUFHbkQsU0FBSyxjQUFjLENBQUMsV0FBVyxRQUFRLGdCQUFnQjtBQUt2RCxTQUFLLFVBQVU7QUFHZixTQUFLLFNBQVM7QUFJZCxTQUFLLGVBQWU7QUFFcEIsU0FBSyxlQUFlLENBQUM7QUFBQSxFQUN2QjtBQUVBLFdBQVMsWUFBWSxPQUFPO0FBQzFCLFVBQU0sV0FBVyxDQUFDO0FBQ2xCLFVBQU0sZ0JBQWdCO0FBQ3RCLFVBQU0sYUFBYTtBQUNuQixVQUFNLFVBQVU7QUFBQSxFQUNsQjtBQUVBLGdCQUFjLFVBQVUsWUFBWSxTQUFTLFlBQVk7QUFDdkQsV0FBTyxLQUFLLFNBQVMsTUFBTSxLQUFLLGFBQWE7QUFBQSxFQUMvQztBQUVBLFNBQU8sZUFBZSxjQUFjLFdBQVcsd0JBQXdCO0FBQUEsSUFDckUsTUFBTTtBQUNKLGFBQU8sS0FBSyxTQUFTLFNBQVMsS0FBSztBQUFBLElBQ3JDO0FBQUEsRUFDRixDQUFDO0FBRUQsV0FBUyxTQUFTLFNBQVM7QUFXekIsVUFBTSxXQUFXLGVBQWUsSUFBSTtBQUVwQyxRQUNFLENBQUMsWUFBWSxDQUFDLFNBQVMsVUFBVSxPQUFPLGFBQWEsS0FBSyxVQUFVLElBQUksR0FDeEU7QUFDQSxhQUFPLElBQUksU0FBUyxPQUFPO0FBQUEsSUFDN0I7QUFFQSxTQUFLLGlCQUFpQixJQUFJLGNBQWMsU0FBUyxNQUFNLFFBQVE7QUFFL0QsUUFBSSxTQUFTO0FBQ1gsVUFBSSxPQUFPLFFBQVEsVUFBVSxZQUFZO0FBQ3ZDLGFBQUssU0FBUyxRQUFRO0FBQUEsTUFDeEI7QUFFQSxVQUFJLE9BQU8sUUFBUSxXQUFXLFlBQVk7QUFDeEMsYUFBSyxVQUFVLFFBQVE7QUFBQSxNQUN6QjtBQUVBLFVBQUksT0FBTyxRQUFRLFlBQVksWUFBWTtBQUN6QyxhQUFLLFdBQVcsUUFBUTtBQUFBLE1BQzFCO0FBRUEsVUFBSSxPQUFPLFFBQVEsVUFBVSxZQUFZO0FBQ3ZDLGFBQUssU0FBUyxRQUFRO0FBQUEsTUFDeEI7QUFFQSxVQUFJLE9BQU8sUUFBUSxjQUFjLFlBQVk7QUFDM0MsYUFBSyxhQUFhLFFBQVE7QUFBQSxNQUM1QjtBQUNBLFVBQUksUUFBUSxRQUFRO0FBQ2xCLGlDQUF5QixRQUFRLFFBQVEsSUFBSTtBQUFBLE1BQy9DO0FBQUEsSUFDRjtBQUVBLFdBQU8sS0FBSyxNQUFNLE9BQU87QUFFekIsb0JBQVksVUFBVSxNQUFNLE1BQU07QUFDaEMsWUFBTSxRQUFRLEtBQUs7QUFFbkIsVUFBSSxDQUFDLE1BQU0sU0FBUztBQUNsQixvQkFBWSxNQUFNLEtBQUs7QUFBQSxNQUN6QjtBQUVBLGtCQUFZLE1BQU0sS0FBSztBQUFBLElBQ3pCLENBQUM7QUFBQSxFQUNIO0FBRUEsU0FBTyxlQUFlLFVBQVUsT0FBTyxhQUFhO0FBQUEsSUFDbEQsT0FBTyxTQUFVLFFBQVE7QUFDdkIsVUFBSSxTQUFTLFVBQVUsT0FBTyxhQUFhLEtBQUssTUFBTSxNQUFNO0FBQUcsZUFBTztBQUN0RSxVQUFJLFNBQVM7QUFBVSxlQUFPO0FBRTlCLGFBQU8sVUFBVSxPQUFPLDBCQUEwQjtBQUFBLElBQ3BEO0FBQUEsRUFDRixDQUFDO0FBR0QsV0FBUyxVQUFVLE9BQU8sV0FBWTtBQUNwQyxJQUFBRixnQkFBZSxNQUFNLElBQUksdUJBQXVCLENBQUM7QUFBQSxFQUNuRDtBQUVBLFdBQVMsT0FBTyxRQUFRLE9BQU8sVUFBVSxJQUFJO0FBQzNDLFVBQU0sUUFBUSxPQUFPO0FBRXJCLFFBQUksT0FBTyxhQUFhLFlBQVk7QUFDbEMsV0FBSztBQUNMLGlCQUFXLE1BQU07QUFBQSxJQUNuQixPQUFPO0FBQ0wsVUFBSSxDQUFDLFVBQVU7QUFDYixtQkFBVyxNQUFNO0FBQUEsTUFDbkIsV0FBVyxhQUFhLFlBQVksQ0FBQ0csUUFBTyxXQUFXLFFBQVEsR0FBRztBQUNoRSxjQUFNLElBQUkscUJBQXFCLFFBQVE7QUFBQSxNQUN6QztBQUNBLFVBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsYUFBS0Q7QUFBQSxNQUNQO0FBQUEsSUFDRjtBQUVBLFFBQUksVUFBVSxNQUFNO0FBQ2xCLFlBQU0sSUFBSSx1QkFBdUI7QUFBQSxJQUNuQyxXQUFXLENBQUMsTUFBTSxZQUFZO0FBQzVCLFVBQUksT0FBTyxVQUFVLFVBQVU7QUFDN0IsWUFBSSxNQUFNLGtCQUFrQixPQUFPO0FBQ2pDLGtCQUFRQyxRQUFPLEtBQUssT0FBTyxRQUFRO0FBQ25DLHFCQUFXO0FBQUEsUUFDYjtBQUFBLE1BQ0YsV0FBVyxpQkFBaUJBLFNBQVE7QUFDbEMsbUJBQVc7QUFBQSxNQUNiLFdBQVcsYUFBYSxLQUFLLEdBQUc7QUFDOUIsZ0JBQVEsb0JBQW9CLEtBQUs7QUFDakMsbUJBQVc7QUFBQSxNQUNiLE9BQU87QUFDTCxjQUFNLElBQUk7QUFBQSxVQUNSO0FBQUEsVUFDQSxDQUFDLFVBQVUsVUFBVSxZQUFZO0FBQUEsVUFDakM7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJO0FBQ0osUUFBSSxNQUFNLFFBQVE7QUFDaEIsWUFBTSxJQUFJLDJCQUEyQjtBQUFBLElBQ3ZDLFdBQVcsTUFBTSxXQUFXO0FBQzFCLFlBQU0sSUFBSSxxQkFBcUIsT0FBTztBQUFBLElBQ3hDO0FBRUEsUUFBSSxLQUFLO0FBQ1AsTUFBUUMsVUFBUyxJQUFJLEdBQUc7QUFDeEIsTUFBQUosZ0JBQWUsUUFBUSxLQUFLLElBQUk7QUFDaEMsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNO0FBQ04sV0FBTyxjQUFjLFFBQVEsT0FBTyxPQUFPLFVBQVUsRUFBRTtBQUFBLEVBQ3pEO0FBRUEsV0FBUyxVQUFVLFFBQVEsU0FBVSxPQUFPLFVBQVUsSUFBSTtBQUN4RCxXQUFPLE9BQU8sTUFBTSxPQUFPLFVBQVUsRUFBRSxNQUFNO0FBQUEsRUFDL0M7QUFFQSxXQUFTLFVBQVUsT0FBTyxXQUFZO0FBQ3BDLFNBQUssZUFBZTtBQUFBLEVBQ3RCO0FBRUEsV0FBUyxVQUFVLFNBQVMsV0FBWTtBQUN0QyxVQUFNLFFBQVEsS0FBSztBQUVuQixRQUFJLE1BQU0sUUFBUTtBQUNoQixZQUFNO0FBRU4sVUFBSSxDQUFDLE1BQU0sU0FBUztBQUNsQixvQkFBWSxNQUFNLEtBQUs7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBUyxVQUFVLHFCQUFxQixTQUFTLG1CQUFtQixVQUFVO0FBRTVFLFFBQUksT0FBTyxhQUFhLFVBQVU7QUFDaEMsaUJBQVcsU0FBUyxZQUFZO0FBQUEsSUFDbEM7QUFDQSxRQUFJLENBQUNHLFFBQU8sV0FBVyxRQUFRLEdBQUc7QUFDaEMsWUFBTSxJQUFJLHFCQUFxQixRQUFRO0FBQUEsSUFDekM7QUFDQSxTQUFLLGVBQWUsa0JBQWtCO0FBQ3RDLFdBQU87QUFBQSxFQUNUO0FBS0EsV0FBUyxjQUFjLFFBQVEsT0FBTyxPQUFPLFVBQVUsVUFBVTtBQUMvRCxVQUFNLE1BQU0sTUFBTSxhQUFhLElBQUksTUFBTTtBQUV6QyxVQUFNLFVBQVU7QUFHaEIsVUFBTSxNQUFNLE1BQU0sU0FBUyxNQUFNO0FBRWpDLFFBQUksQ0FBQyxLQUFLO0FBQ1IsWUFBTSxZQUFZO0FBQUEsSUFDcEI7QUFFQSxRQUFJLE1BQU0sV0FBVyxNQUFNLFVBQVUsTUFBTSxXQUFXLENBQUMsTUFBTSxhQUFhO0FBQ3hFLFlBQU0sU0FBUyxLQUFLLEVBQUUsT0FBTyxVQUFVLFNBQVMsQ0FBQztBQUNqRCxVQUFJLE1BQU0sY0FBYyxhQUFhLFVBQVU7QUFDN0MsY0FBTSxhQUFhO0FBQUEsTUFDckI7QUFDQSxVQUFJLE1BQU0sV0FBVyxhQUFhRCxNQUFLO0FBQ3JDLGNBQU0sVUFBVTtBQUFBLE1BQ2xCO0FBQUEsSUFDRixPQUFPO0FBQ0wsWUFBTSxXQUFXO0FBQ2pCLFlBQU0sVUFBVTtBQUNoQixZQUFNLFVBQVU7QUFDaEIsWUFBTSxPQUFPO0FBQ2IsYUFBTyxPQUFPLE9BQU8sVUFBVSxNQUFNLE9BQU87QUFDNUMsWUFBTSxPQUFPO0FBQUEsSUFDZjtBQUlBLFdBQU8sT0FBTyxDQUFDLE1BQU0sV0FBVyxDQUFDLE1BQU07QUFBQSxFQUN6QztBQUVBLFdBQVMsUUFBUSxRQUFRLE9BQU8sUUFBUSxLQUFLLE9BQU8sVUFBVSxJQUFJO0FBQ2hFLFVBQU0sV0FBVztBQUNqQixVQUFNLFVBQVU7QUFDaEIsVUFBTSxVQUFVO0FBQ2hCLFVBQU0sT0FBTztBQUNiLFFBQUksTUFBTSxXQUFXO0FBQ25CLFlBQU0sUUFBUSxJQUFJLHFCQUFxQixPQUFPLENBQUM7QUFBQSxJQUNqRCxXQUFXLFFBQVE7QUFDakIsYUFBTyxRQUFRLE9BQU8sTUFBTSxPQUFPO0FBQUEsSUFDckMsT0FBTztBQUNMLGFBQU8sT0FBTyxPQUFPLFVBQVUsTUFBTSxPQUFPO0FBQUEsSUFDOUM7QUFDQSxVQUFNLE9BQU87QUFBQSxFQUNmO0FBRUEsV0FBUyxhQUFhLFFBQVEsT0FBT0csS0FBSSxJQUFJO0FBQzNDLE1BQUUsTUFBTTtBQUVSLE9BQUdBLEdBQUU7QUFLTCxnQkFBWSxLQUFLO0FBRWpCLElBQUFMLGdCQUFlLFFBQVFLLEdBQUU7QUFBQSxFQUMzQjtBQUVBLFdBQVMsUUFBUSxRQUFRQSxLQUFJO0FBQzNCLFVBQU0sUUFBUSxPQUFPO0FBQ3JCLFVBQU0sT0FBTyxNQUFNO0FBQ25CLFVBQU0sS0FBSyxNQUFNO0FBRWpCLFFBQUksT0FBTyxPQUFPLFlBQVk7QUFDNUIsTUFBQUwsZ0JBQWUsUUFBUSxJQUFJLHNCQUFzQixDQUFDO0FBQ2xEO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBVTtBQUNoQixVQUFNLFVBQVU7QUFDaEIsVUFBTSxVQUFVLE1BQU07QUFDdEIsVUFBTSxXQUFXO0FBRWpCLFFBQUlLLEtBQUk7QUFFTixNQUFBQSxJQUFHO0FBRUgsVUFBSSxDQUFDLE1BQU0sU0FBUztBQUNsQixjQUFNLFVBQVVBO0FBQUEsTUFDbEI7QUFJQSxVQUFJLE9BQU8sa0JBQWtCLENBQUMsT0FBTyxlQUFlLFNBQVM7QUFDM0QsZUFBTyxlQUFlLFVBQVVBO0FBQUEsTUFDbEM7QUFFQSxVQUFJLE1BQU07QUFDUixRQUFRRCxVQUFTLGNBQWMsUUFBUSxPQUFPQyxLQUFJLEVBQUU7QUFBQSxNQUN0RCxPQUFPO0FBQ0wscUJBQWEsUUFBUSxPQUFPQSxLQUFJLEVBQUU7QUFBQSxNQUNwQztBQUFBLElBQ0YsT0FBTztBQUNMLFVBQUksTUFBTSxTQUFTLFNBQVMsTUFBTSxlQUFlO0FBQy9DLG9CQUFZLFFBQVEsS0FBSztBQUFBLE1BQzNCO0FBRUEsVUFBSSxNQUFNO0FBS1IsWUFDRSxNQUFNLHVCQUF1QixRQUM3QixNQUFNLG1CQUFtQixPQUFPLElBQ2hDO0FBQ0EsZ0JBQU0sbUJBQW1CO0FBQUEsUUFDM0IsT0FBTztBQUNMLGdCQUFNLHFCQUFxQixFQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTTtBQUN6RCxVQUFRRCxVQUFTLGdCQUFnQixNQUFNLGtCQUFrQjtBQUFBLFFBQzNEO0FBQUEsTUFDRixPQUFPO0FBQ0wsbUJBQVcsUUFBUSxPQUFPLEdBQUcsRUFBRTtBQUFBLE1BQ2pDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGVBQWUsRUFBRSxRQUFRLE9BQU8sT0FBTyxHQUFHLEdBQUc7QUFDcEQsVUFBTSxxQkFBcUI7QUFDM0IsV0FBTyxXQUFXLFFBQVEsT0FBTyxPQUFPLEVBQUU7QUFBQSxFQUM1QztBQUVBLFdBQVMsV0FBVyxRQUFRLE9BQU8sT0FBTyxJQUFJO0FBQzVDLFVBQU0sWUFBWSxDQUFDLE1BQU0sVUFBVSxDQUFDLE9BQU8sYUFBYSxNQUFNLFdBQVcsS0FDdkUsTUFBTTtBQUNSLFFBQUksV0FBVztBQUNiLFlBQU0sWUFBWTtBQUNsQixhQUFPLEtBQUssT0FBTztBQUFBLElBQ3JCO0FBRUEsV0FBTyxVQUFVLEdBQUc7QUFDbEIsWUFBTTtBQUNOLFNBQUc7QUFBQSxJQUNMO0FBRUEsUUFBSSxNQUFNLFdBQVc7QUFDbkIsa0JBQVksS0FBSztBQUFBLElBQ25CO0FBRUEsZ0JBQVksUUFBUSxLQUFLO0FBQUEsRUFDM0I7QUFHQSxXQUFTLFlBQVksT0FBTztBQUMxQixRQUFJLE1BQU0sU0FBUztBQUNqQjtBQUFBLElBQ0Y7QUFFQSxhQUFTRSxLQUFJLE1BQU0sZUFBZUEsS0FBSSxNQUFNLFNBQVMsUUFBUSxFQUFFQSxJQUFHO0FBQ2hFLFlBQU0sRUFBRSxPQUFPLFNBQVMsSUFBSSxNQUFNLFNBQVNBO0FBQzNDLFlBQU0sTUFBTSxNQUFNLGFBQWEsSUFBSSxNQUFNO0FBQ3pDLFlBQU0sVUFBVTtBQUNoQixlQUFTLElBQUkscUJBQXFCLE9BQU8sQ0FBQztBQUFBLElBQzVDO0FBRUEsVUFBTSxvQkFBb0IsTUFBTSxhQUFhLE9BQU8sQ0FBQztBQUNyRCxhQUFTQyxLQUFJLEdBQUdBLEtBQUksa0JBQWtCLFFBQVFBLE1BQUs7QUFDakQsd0JBQWtCQSxJQUFHLElBQUkscUJBQXFCLEtBQUssQ0FBQztBQUFBLElBQ3REO0FBRUEsZ0JBQVksS0FBSztBQUFBLEVBQ25CO0FBR0EsV0FBUyxZQUFZLFFBQVEsT0FBTztBQUNsQyxRQUNFLE1BQU0sVUFDTixNQUFNLG9CQUNOLE1BQU0sYUFDTixDQUFDLE1BQU0sYUFDUDtBQUNBO0FBQUEsSUFDRjtBQUVBLFVBQU0sRUFBRSxVQUFVLGVBQWUsV0FBVyxJQUFJO0FBQ2hELFVBQU0saUJBQWlCLFNBQVMsU0FBUztBQUV6QyxRQUFJLENBQUMsZ0JBQWdCO0FBQ25CO0FBQUEsSUFDRjtBQUVBLFFBQUlBLEtBQUk7QUFFUixVQUFNLG1CQUFtQjtBQUN6QixRQUFJLGlCQUFpQixLQUFLLE9BQU8sU0FBUztBQUN4QyxZQUFNLGFBQWEsaUJBQWlCO0FBRXBDLFlBQU0sV0FBVyxNQUFNLFVBQVVMLE9BQU0sQ0FBQyxRQUFRO0FBQzlDLGlCQUFTSSxLQUFJQyxJQUFHRCxLQUFJLFNBQVMsUUFBUSxFQUFFQSxJQUFHO0FBQ3hDLG1CQUFTQSxJQUFHLFNBQVMsR0FBRztBQUFBLFFBQzFCO0FBQUEsTUFDRjtBQUdBLFlBQU0sU0FBUyxNQUFNLFdBQVdDLE9BQU0sSUFBSSxXQUFXLFNBQVMsTUFBTUEsRUFBQztBQUNyRSxhQUFPLGFBQWEsTUFBTTtBQUUxQixjQUFRLFFBQVEsT0FBTyxNQUFNLE1BQU0sUUFBUSxRQUFRLElBQUksUUFBUTtBQUUvRCxrQkFBWSxLQUFLO0FBQUEsSUFDbkIsT0FBTztBQUNMLFNBQUc7QUFDRCxjQUFNLEVBQUUsT0FBTyxVQUFVLFNBQVMsSUFBSSxTQUFTQTtBQUMvQyxpQkFBU0EsUUFBTztBQUNoQixjQUFNLE1BQU0sYUFBYSxJQUFJLE1BQU07QUFDbkMsZ0JBQVEsUUFBUSxPQUFPLE9BQU8sS0FBSyxPQUFPLFVBQVUsUUFBUTtBQUFBLE1BQzlELFNBQVNBLEtBQUksU0FBUyxVQUFVLENBQUMsTUFBTTtBQUV2QyxVQUFJQSxPQUFNLFNBQVMsUUFBUTtBQUN6QixvQkFBWSxLQUFLO0FBQUEsTUFDbkIsV0FBV0EsS0FBSSxLQUFLO0FBQ2xCLGlCQUFTLE9BQU8sR0FBR0EsRUFBQztBQUNwQixjQUFNLGdCQUFnQjtBQUFBLE1BQ3hCLE9BQU87QUFDTCxjQUFNLGdCQUFnQkE7QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFDQSxVQUFNLG1CQUFtQjtBQUFBLEVBQzNCO0FBRUEsV0FBUyxVQUFVLFNBQVMsU0FBVSxPQUFPLFVBQVUsSUFBSTtBQUN6RCxRQUFJLEtBQUssU0FBUztBQUNoQixXQUFLLFFBQVEsQ0FBQyxFQUFFLE9BQU8sU0FBUyxDQUFDLEdBQUcsRUFBRTtBQUFBLElBQ3hDLE9BQU87QUFDTCxZQUFNLElBQUksMkJBQTJCLFVBQVU7QUFBQSxJQUNqRDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFVBQVUsVUFBVTtBQUU3QixXQUFTLFVBQVUsTUFBTSxTQUFVLE9BQU8sVUFBVSxJQUFJO0FBQ3RELFVBQU0sUUFBUSxLQUFLO0FBRW5CLFFBQUksT0FBTyxVQUFVLFlBQVk7QUFDL0IsV0FBSztBQUNMLGNBQVE7QUFDUixpQkFBVztBQUFBLElBQ2IsV0FBVyxPQUFPLGFBQWEsWUFBWTtBQUN6QyxXQUFLO0FBQ0wsaUJBQVc7QUFBQSxJQUNiO0FBRUEsUUFBSTtBQUVKLFFBQUksVUFBVSxRQUFRLFVBQVUsUUFBVztBQUN6QyxZQUFNLE1BQU0sT0FBTyxNQUFNLE9BQU8sUUFBUTtBQUN4QyxVQUFJLGVBQWUsT0FBTztBQUN4QixjQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0Y7QUFHQSxRQUFJLE1BQU0sUUFBUTtBQUNoQixZQUFNLFNBQVM7QUFDZixXQUFLLE9BQU87QUFBQSxJQUNkO0FBRUEsUUFBSSxLQUFLO0FBQUEsSUFFVCxXQUFXLENBQUMsTUFBTSxXQUFXLENBQUMsTUFBTSxRQUFRO0FBTzFDLFlBQU0sU0FBUztBQUNmLGtCQUFZLE1BQU0sT0FBTyxJQUFJO0FBQzdCLFlBQU0sUUFBUTtBQUFBLElBQ2hCLFdBQVcsTUFBTSxVQUFVO0FBQ3pCLFlBQU0sSUFBSSw0QkFBNEIsS0FBSztBQUFBLElBQzdDLFdBQVcsTUFBTSxXQUFXO0FBQzFCLFlBQU0sSUFBSSxxQkFBcUIsS0FBSztBQUFBLElBQ3RDO0FBRUEsUUFBSSxPQUFPLE9BQU8sWUFBWTtBQUM1QixVQUFJLE9BQU8sTUFBTSxVQUFVO0FBQ3pCLFFBQVFILFVBQVMsSUFBSSxHQUFHO0FBQUEsTUFDMUIsT0FBTztBQUNMLGNBQU0sYUFBYSxLQUFLLEVBQUU7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsV0FBVyxPQUFPO0FBQ3pCLFdBQVEsTUFBTSxVQUNaLE1BQU0sZUFDTixNQUFNLFdBQVcsS0FDakIsQ0FBQyxNQUFNLFdBQ1AsTUFBTSxTQUFTLFdBQVcsS0FDMUIsQ0FBQyxNQUFNLFlBQ1AsQ0FBQyxNQUFNLFdBQ1AsQ0FBQyxNQUFNLGdCQUNQLENBQUMsTUFBTTtBQUFBLEVBQ1g7QUFFQSxXQUFTLFVBQVUsUUFBUSxPQUFPO0FBQ2hDLFFBQUksU0FBUztBQUViLGFBQVMsU0FBUyxLQUFLO0FBQ3JCLFVBQUksUUFBUTtBQUNWLFFBQUFKLGdCQUFlLFFBQVEsT0FBTyxzQkFBc0IsQ0FBQztBQUNyRDtBQUFBLE1BQ0Y7QUFDQSxlQUFTO0FBRVQsWUFBTTtBQUNOLFVBQUksS0FBSztBQUNQLGNBQU0sb0JBQW9CLE1BQU0sYUFBYSxPQUFPLENBQUM7QUFDckQsaUJBQVNPLEtBQUksR0FBR0EsS0FBSSxrQkFBa0IsUUFBUUEsTUFBSztBQUNqRCw0QkFBa0JBLElBQUcsR0FBRztBQUFBLFFBQzFCO0FBQ0EsUUFBQVAsZ0JBQWUsUUFBUSxLQUFLLE1BQU0sSUFBSTtBQUFBLE1BQ3hDLFdBQVcsV0FBVyxLQUFLLEdBQUc7QUFDNUIsY0FBTSxjQUFjO0FBQ3BCLGVBQU8sS0FBSyxXQUFXO0FBSXZCLGNBQU07QUFDTixRQUFRSSxVQUFTLFFBQVEsUUFBUSxLQUFLO0FBQUEsTUFDeEM7QUFBQSxJQUNGO0FBRUEsVUFBTSxPQUFPO0FBQ2IsVUFBTTtBQUVOLFFBQUk7QUFDRixZQUFNLFNBQVMsT0FBTyxPQUFPLFFBQVE7QUFDckMsVUFBSSxVQUFVLE1BQU07QUFDbEIsY0FBTSxPQUFPLE9BQU87QUFDcEIsWUFBSSxPQUFPLFNBQVMsWUFBWTtBQUM5QixlQUFLO0FBQUEsWUFDSDtBQUFBLFlBQ0EsV0FBWTtBQUNWLGNBQVFBLFVBQVMsVUFBVSxJQUFJO0FBQUEsWUFDakM7QUFBQSxZQUNBLFNBQVUsS0FBSztBQUNiLGNBQVFBLFVBQVMsVUFBVSxHQUFHO0FBQUEsWUFDaEM7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLFNBQVMsS0FBUDtBQUNBLGVBQVMsUUFBUSxPQUFPLEdBQUc7QUFBQSxJQUM3QjtBQUVBLFVBQU0sT0FBTztBQUFBLEVBQ2Y7QUFFQSxXQUFTLFVBQVUsUUFBUSxPQUFPO0FBQ2hDLFFBQUksQ0FBQyxNQUFNLGVBQWUsQ0FBQyxNQUFNLGFBQWE7QUFDNUMsVUFBSSxPQUFPLE9BQU8sV0FBVyxjQUFjLENBQUMsTUFBTSxXQUFXO0FBQzNELGNBQU0sY0FBYztBQUNwQixrQkFBVSxRQUFRLEtBQUs7QUFBQSxNQUN6QixPQUFPO0FBQ0wsY0FBTSxjQUFjO0FBQ3BCLGVBQU8sS0FBSyxXQUFXO0FBQUEsTUFDekI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFdBQVMsWUFBWSxRQUFRLE9BQU8sTUFBTTtBQUN4QyxRQUFJLFdBQVcsS0FBSyxHQUFHO0FBQ3JCLGdCQUFVLFFBQVEsS0FBSztBQUN2QixVQUFJLE1BQU0sY0FBYyxLQUFLLFdBQVcsS0FBSyxHQUFHO0FBQzlDLGNBQU07QUFDTixZQUFJLE1BQU07QUFDUixVQUFRQSxVQUFTLFFBQVEsUUFBUSxLQUFLO0FBQUEsUUFDeEMsT0FBTztBQUNMLGlCQUFPLFFBQVEsS0FBSztBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBUyxPQUFPLFFBQVEsT0FBTztBQUM3QixVQUFNO0FBQ04sVUFBTSxXQUFXO0FBRWpCLFVBQU0sb0JBQW9CLE1BQU0sYUFBYSxPQUFPLENBQUM7QUFDckQsYUFBU0csS0FBSSxHQUFHQSxLQUFJLGtCQUFrQixRQUFRQSxNQUFLO0FBQ2pELHdCQUFrQkEsSUFBRztBQUFBLElBQ3ZCO0FBRUEsV0FBTyxLQUFLLFFBQVE7QUFFcEIsUUFBSSxNQUFNLGFBQWE7QUFHckIsWUFBTSxTQUFTLE9BQU87QUFDdEIsWUFBTSxjQUFjLENBQUMsVUFDbkIsT0FBTyxnQkFHTixPQUFPLGNBQWMsT0FBTyxhQUFhO0FBRTVDLFVBQUksYUFBYTtBQUNmLGVBQU8sUUFBUTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPLGlCQUFpQixTQUFTLFdBQVc7QUFBQSxJQUMxQyxXQUFXO0FBQUEsTUFDVCxNQUFNO0FBQ0osZUFBTyxLQUFLLGlCQUFpQixLQUFLLGVBQWUsWUFBWTtBQUFBLE1BQy9EO0FBQUEsTUFDQSxJQUFJLE9BQU87QUFFVCxZQUFJLEtBQUssZ0JBQWdCO0FBQ3ZCLGVBQUssZUFBZSxZQUFZO0FBQUEsUUFDbEM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBRUEsVUFBVTtBQUFBLE1BQ1IsTUFBTTtBQUNKLGNBQU1DLE1BQUksS0FBSztBQUtmLGVBQU8sQ0FBQyxDQUFDQSxPQUFLQSxJQUFFLGFBQWEsU0FBUyxDQUFDQSxJQUFFLGFBQWEsQ0FBQ0EsSUFBRSxXQUN2RCxDQUFDQSxJQUFFLFVBQVUsQ0FBQ0EsSUFBRTtBQUFBLE1BQ3BCO0FBQUEsTUFDQSxJQUFJLEtBQUs7QUFFUCxZQUFJLEtBQUssZ0JBQWdCO0FBQ3ZCLGVBQUssZUFBZSxXQUFXLENBQUMsQ0FBQztBQUFBLFFBQ25DO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUVBLGtCQUFrQjtBQUFBLE1BQ2hCLE1BQU07QUFDSixlQUFPLEtBQUssaUJBQWlCLEtBQUssZUFBZSxXQUFXO0FBQUEsTUFDOUQ7QUFBQSxJQUNGO0FBQUEsSUFFQSxvQkFBb0I7QUFBQSxNQUNsQixNQUFNO0FBQ0osZUFBTyxLQUFLLGlCQUFpQixLQUFLLGVBQWUsYUFBYTtBQUFBLE1BQ2hFO0FBQUEsSUFDRjtBQUFBLElBRUEsZ0JBQWdCO0FBQUEsTUFDZCxNQUFNO0FBQ0osZUFBTyxLQUFLLGtCQUFrQixLQUFLLGVBQWUsVUFBVTtBQUFBLE1BQzlEO0FBQUEsSUFDRjtBQUFBLElBRUEsZUFBZTtBQUFBLE1BQ2IsTUFBTTtBQUNKLGVBQU8sS0FBSyxpQkFBaUIsS0FBSyxlQUFlLFNBQVM7QUFBQSxNQUM1RDtBQUFBLElBQ0Y7QUFBQSxJQUVBLG1CQUFtQjtBQUFBLE1BQ2pCLE1BQU07QUFDSixjQUFNLFNBQVMsS0FBSztBQUNwQixZQUFJLENBQUM7QUFBUSxpQkFBTztBQUNwQixlQUFPLENBQUMsT0FBTyxhQUFhLENBQUMsT0FBTyxVQUFVLE9BQU87QUFBQSxNQUN2RDtBQUFBLElBQ0Y7QUFBQSxJQUVBLHVCQUF1QjtBQUFBLE1BQ3JCLE1BQU07QUFDSixlQUFPLEtBQUssa0JBQWtCLEtBQUssZUFBZTtBQUFBLE1BQ3BEO0FBQUEsSUFDRjtBQUFBLElBRUEsZ0JBQWdCO0FBQUEsTUFDZCxNQUFNO0FBQ0osZUFBTyxLQUFLLGlCQUFpQixLQUFLLGVBQWUsU0FBUztBQUFBLE1BQzVEO0FBQUEsSUFDRjtBQUFBLElBRUEsZ0JBQWdCO0FBQUEsTUFDZCxNQUFNO0FBQ0osZUFBTyxLQUFLLGtCQUFrQixLQUFLLGVBQWU7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFFRCxNQUFNQyxXQUFVLGdCQUFZO0FBQzVCLFdBQVMsVUFBVSxVQUFVLFNBQVUsS0FBSyxJQUFJO0FBQzlDLFVBQU0sUUFBUSxLQUFLO0FBR25CLFFBQ0UsQ0FBQyxNQUFNLGNBQ04sTUFBTSxnQkFBZ0IsTUFBTSxTQUFTLFVBQ3BDLE1BQU0sYUFBYSxTQUNyQjtBQUNBLE1BQVFMLFVBQVMsYUFBYSxLQUFLO0FBQUEsSUFDckM7QUFFQSxJQUFBSyxTQUFRLEtBQUssTUFBTSxLQUFLLEVBQUU7QUFDMUIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLFVBQVUsYUFBYSxnQkFBWTtBQUM1QyxXQUFTLFVBQVUsV0FBVyxTQUFVLEtBQUssSUFBSTtBQUMvQyxPQUFHLEdBQUc7QUFBQSxFQUNSO0FBRUEsV0FBUyxVQUFVLGVBQUcsMEJBQTBCLFNBQVUsS0FBSztBQUM3RCxTQUFLLFFBQVEsR0FBRztBQUFBLEVBQ2xCO0FBRUEsV0FBUyxnQkFBZ0I7QUFFekIsV0FBUyxpQkFBaUIsUUFBUTtBQUNoQyxXQUFPLGtCQUFrQjtBQUFBLEVBQzNCO0FBRU8sTUFBTUMsV0FBVSxTQUFTLFVBQVUsU0FDeEMsZ0JBQ0EsVUFBVSxDQUFDLEdBQ1g7QUFDQSxRQUFJLENBQUMsaUJBQWlCLGNBQWMsR0FBRztBQUNyQyxZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLG1CQUFlLFNBQVMsU0FBUztBQUNqQyxVQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0EsZ0JBQWdCO0FBQUEsTUFDaEIsYUFBYTtBQUFBLE1BQ2I7QUFBQSxJQUNGLElBQUk7QUFFSixvQkFBZ0IsWUFBWSxvQkFBb0I7QUFDaEQsb0JBQWdCLGVBQWUsdUJBQXVCO0FBRXRELFVBQU0sU0FBUyxlQUFlLFVBQVU7QUFDeEMsUUFBSSxTQUFTO0FBRWIsVUFBTSxXQUFXLElBQUksU0FBUztBQUFBLE1BQzVCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxPQUFPLFFBQVEsVUFBVTtBQUN2QixpQkFBUyxLQUFLLE9BQU87QUFDbkIsa0JBQVEsTUFBTSxPQUFPLENBQUNDLE9BQU1BLEVBQUM7QUFDN0IsY0FBSTtBQUNGLHFCQUFTLE1BQU0sV0FBVyxJQUFJLFNBQVksS0FBSztBQUFBLFVBQ2pELFNBQVNDLFFBQVA7QUFNQSxZQUFRUixVQUFTLE1BQU1LLFNBQVEsS0FBSyxVQUFVRyxNQUFLLENBQUM7QUFBQSxVQUN0RDtBQUFBLFFBQ0Y7QUFFQSxlQUFPLE1BQU07QUFBQSxVQUNYLE1BQ0UsUUFBUTtBQUFBLFlBQ04sT0FBTyxJQUFJLENBQUMsU0FBUyxPQUFPLE1BQU0sS0FBSyxLQUFLLENBQUM7QUFBQSxVQUMvQyxFQUFFLEtBQUssTUFBTSxJQUFJO0FBQUEsVUFDbkI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLE1BRUEsTUFBTSxPQUFPLFVBQVUsVUFBVTtBQUMvQixZQUFJLE9BQU8sVUFBVSxZQUFZLGlCQUFpQixDQUFDLFlBQVk7QUFDN0Qsa0JBQVFULFFBQU8sS0FBSyxPQUFPLFFBQVE7QUFDbkMsa0JBQVEsSUFBSTtBQUFBLFlBQ1YsTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFlBQ04sTUFBTTtBQUFBLFVBQ1I7QUFBQSxRQUNGO0FBRUEsaUJBQVMsS0FBSyxPQUFPO0FBQ25CLGNBQUk7QUFDRixxQkFBUyxLQUFLO0FBQUEsVUFDaEIsU0FBU1MsUUFBUDtBQUNBLFlBQUFILFNBQVEsTUFBTSxRQUFRRyxNQUFLO0FBQUEsVUFDN0I7QUFBQSxRQUNGO0FBRUEsZUFBTyxNQUFNO0FBQUEsVUFDWCxNQUFNLE9BQU8sTUFBTSxLQUFLLEVBQUUsS0FBSyxNQUFNLElBQUk7QUFBQSxVQUN6QztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsTUFFQSxRQUFRLE9BQU8sVUFBVTtBQUN2QixpQkFBUyxPQUFPO0FBQ2QsY0FBSTtBQUNGLHFCQUFTLEtBQUs7QUFBQSxVQUNoQixTQUFTQSxRQUFQO0FBTUEsWUFBUVIsVUFBUyxNQUFNO0FBQ3JCLG9CQUFNUTtBQUFBLFlBQ1IsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBRUEsWUFBSSxDQUFDLFFBQVE7QUFDWCxjQUFJLFNBQVMsTUFBTTtBQUNqQixtQkFBTyxNQUFNLEtBQUssRUFBRSxLQUFLLE1BQU0sSUFBSTtBQUFBLFVBQ3JDLE9BQU87QUFDTCxtQkFBTyxNQUFNLEVBQUUsS0FBSyxNQUFNLElBQUk7QUFBQSxVQUNoQztBQUNBO0FBQUEsUUFDRjtBQUVBLGFBQUs7QUFBQSxNQUNQO0FBQUEsTUFFQSxNQUFNLFVBQVU7QUFDZCxpQkFBUyxLQUFLLE9BQU87QUFDbkIsY0FBSTtBQUNGLHFCQUFTLEtBQUs7QUFBQSxVQUNoQixTQUFTQSxRQUFQO0FBTUEsWUFBUVIsVUFBUyxNQUFNSyxTQUFRLEtBQUssVUFBVUcsTUFBSyxDQUFDO0FBQUEsVUFDdEQ7QUFBQSxRQUNGO0FBRUEsWUFBSSxDQUFDLFFBQVE7QUFDWCxpQkFBTyxNQUFNLEVBQUUsS0FBSyxNQUFNLElBQUk7QUFBQSxRQUNoQztBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFFRCxXQUFPLE9BQU87QUFBQSxNQUNaLE1BQU07QUFDSixpQkFBUztBQUNULFlBQUksQ0FBQyxnQkFBZ0IsUUFBUSxHQUFHO0FBQzlCLFVBQUFILFNBQVEsS0FBSyxVQUFVLElBQUksMkJBQTJCLENBQUM7QUFBQSxRQUN6RDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLENBQUMsVUFBVTtBQUNULGlCQUFTO0FBQ1QsUUFBQUEsU0FBUSxLQUFLLFVBQVUsS0FBSztBQUFBLE1BQzlCO0FBQUEsSUFDRjtBQUVBLFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxXQUFXO0FBRXBCLE1BQU8sbUJBQVE7OztBQ3grQmYsU0FBTyxlQUFlLE9BQU8sV0FBVyxpQkFBUyxTQUFTO0FBQzFELFNBQU8sZUFBZSxRQUFRLGdCQUFRO0FBRXRDO0FBRUUsZUFBVyxVQUFVLE9BQU8sS0FBSyxpQkFBUyxTQUFTLEdBQUc7QUFDcEQsVUFBSSxDQUFDLE9BQU8sVUFBVSxTQUFTO0FBQzdCLGVBQU8sVUFBVSxVQUFVLGlCQUFTLFVBQVU7QUFBQSxNQUNoRDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBUyxPQUFPLFNBQVM7QUFDdkIsUUFBSSxFQUFFLGdCQUFnQixTQUFTO0FBQzdCLGFBQU8sSUFBSSxPQUFPLE9BQU87QUFBQSxJQUMzQjtBQUVBLHFCQUFTLEtBQUssTUFBTSxPQUFPO0FBQzNCLHFCQUFTLEtBQUssTUFBTSxPQUFPO0FBQzNCLFNBQUssZ0JBQWdCO0FBRXJCLFFBQUksU0FBUztBQUNYLFVBQUksUUFBUSxhQUFhLE9BQU87QUFDOUIsYUFBSyxXQUFXO0FBQUEsTUFDbEI7QUFFQSxVQUFJLFFBQVEsYUFBYSxPQUFPO0FBQzlCLGFBQUssV0FBVztBQUFBLE1BQ2xCO0FBRUEsVUFBSSxRQUFRLGtCQUFrQixPQUFPO0FBQ25DLGFBQUssZ0JBQWdCO0FBQUEsTUFDdkI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFNBQU8saUJBQWlCLE9BQU8sV0FBVztBQUFBLElBQ3hDLFVBQVUsT0FBTyx5QkFBeUIsaUJBQVMsV0FBVyxVQUFVO0FBQUEsSUFDeEUsdUJBQXVCLE9BQU87QUFBQSxNQUM1QixpQkFBUztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFDQSxvQkFBb0IsT0FBTztBQUFBLE1BQ3pCLGlCQUFTO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxJQUNBLGdCQUFnQixPQUFPO0FBQUEsTUFDckIsaUJBQVM7QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLElBQ0EsZ0JBQWdCLE9BQU87QUFBQSxNQUNyQixpQkFBUztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFDQSxrQkFBa0IsT0FBTztBQUFBLE1BQ3ZCLGlCQUFTO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxJQUNBLGdCQUFnQixPQUFPO0FBQUEsTUFDckIsaUJBQVM7QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLElBQ0EsZUFBZSxPQUFPO0FBQUEsTUFDcEIsaUJBQVM7QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLElBQ0EsbUJBQW1CLE9BQU87QUFBQSxNQUN4QixpQkFBUztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsSUFFQSxXQUFXO0FBQUEsTUFDVCxNQUFNO0FBQ0osWUFDRSxLQUFLLG1CQUFtQixVQUN4QixLQUFLLG1CQUFtQixRQUN4QjtBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGVBQU8sS0FBSyxlQUFlLGFBQWEsS0FBSyxlQUFlO0FBQUEsTUFDOUQ7QUFBQSxNQUNBLElBQUksT0FBTztBQUdULFlBQUksS0FBSyxrQkFBa0IsS0FBSyxnQkFBZ0I7QUFDOUMsZUFBSyxlQUFlLFlBQVk7QUFDaEMsZUFBSyxlQUFlLFlBQVk7QUFBQSxRQUNsQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBRUQsV0FBU0ksa0JBQWlCLFFBQVE7QUFDaEMsV0FBTyxrQkFBa0I7QUFBQSxFQUMzQjtBQUVBLFdBQVNDLGtCQUFpQixRQUFRO0FBQ2hDLFdBQU8sa0JBQWtCO0FBQUEsRUFDM0I7QUFFTyxNQUFNQyxXQUFVLE9BQU8sVUFBVSxTQUFVLE1BQU0sU0FBUztBQUMvRCxtQkFBZSxNQUFNLE1BQU07QUFDM0IsVUFBTTtBQUFBLE1BQ0osVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLElBQ1osSUFBSTtBQUVKLFFBQUksQ0FBQ0Ysa0JBQWlCLGNBQWMsR0FBRztBQUNyQyxZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFFBQUksQ0FBQ0Msa0JBQWlCLGNBQWMsR0FBRztBQUNyQyxZQUFNLElBQUk7QUFBQSxRQUNSO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLG1CQUFlLFNBQVMsU0FBUztBQUNqQyxVQUFNO0FBQUEsTUFDSixnQkFBZ0I7QUFBQSxNQUNoQixhQUFhO0FBQUEsTUFDYjtBQUFBLE1BQ0EsZ0JBQWdCO0FBQUEsTUFDaEI7QUFBQSxNQUNBO0FBQUEsSUFDRixJQUFJO0FBRUosb0JBQWdCLFlBQVksb0JBQW9CO0FBQ2hELFFBQUksYUFBYSxVQUFhLENBQUNFLFFBQU8sV0FBVyxRQUFRLEdBQUc7QUFDMUQsWUFBTSxJQUFJLHNCQUFzQixVQUFVLGtCQUFrQjtBQUFBLElBQzlEO0FBRUEsVUFBTSxTQUFTLGVBQWUsVUFBVTtBQUN4QyxVQUFNLFNBQVMsZUFBZSxVQUFVO0FBQ3hDLFFBQUksaUJBQWlCO0FBQ3JCLFFBQUksaUJBQWlCO0FBRXJCLFVBQU1DLFVBQVMsSUFBSSxPQUFPO0FBQUEsTUFDeEI7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUEsT0FBTyxRQUFRLFVBQVU7QUFDdkIsaUJBQVMsS0FBSyxPQUFPO0FBQ25CLGtCQUFRLE1BQU0sT0FBTyxDQUFDQyxPQUFNQSxFQUFDO0FBQzdCLGNBQUk7QUFDRixxQkFBUyxNQUFNLFdBQVcsSUFBSSxTQUFZLEtBQUs7QUFBQSxVQUNqRCxTQUFTQyxRQUFQO0FBTUEsWUFBUUMsVUFBUyxNQUFNLFFBQVFILFNBQVFFLE1BQUssQ0FBQztBQUFBLFVBQy9DO0FBQUEsUUFDRjtBQUVBLGVBQU8sTUFBTTtBQUFBLFVBQ1gsTUFDRSxRQUFRO0FBQUEsWUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLE9BQU8sTUFBTSxLQUFLLEtBQUssQ0FBQztBQUFBLFVBQy9DLEVBQUUsS0FBSyxNQUFNLElBQUk7QUFBQSxVQUNuQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsTUFFQSxNQUFNLE9BQU9FLFdBQVUsVUFBVTtBQUMvQixZQUFJLE9BQU8sVUFBVSxZQUFZLGlCQUFpQixDQUFDLFlBQVk7QUFDN0Qsa0JBQVFMLFFBQU8sS0FBSyxPQUFPSyxTQUFRO0FBQ25DLGtCQUFRLElBQUk7QUFBQSxZQUNWLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxZQUNOLE1BQU07QUFBQSxVQUNSO0FBQUEsUUFDRjtBQUVBLGlCQUFTLEtBQUssT0FBTztBQUNuQixjQUFJO0FBQ0YscUJBQVMsS0FBSztBQUFBLFVBQ2hCLFNBQVNGLFFBQVA7QUFDQSxvQkFBUUYsU0FBUUUsTUFBSztBQUFBLFVBQ3ZCO0FBQUEsUUFDRjtBQUVBLGVBQU8sTUFBTTtBQUFBLFVBQ1gsTUFBTSxPQUFPLE1BQU0sS0FBSyxFQUFFLEtBQUssTUFBTSxJQUFJO0FBQUEsVUFDekM7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLE1BRUEsTUFBTSxVQUFVO0FBQ2QsaUJBQVMsS0FBSyxPQUFPO0FBQ25CLGNBQUk7QUFDRixxQkFBUyxLQUFLO0FBQUEsVUFDaEIsU0FBU0EsUUFBUDtBQU1BLFlBQVFDLFVBQVMsTUFBTSxRQUFRSCxTQUFRRSxNQUFLLENBQUM7QUFBQSxVQUMvQztBQUFBLFFBQ0Y7QUFFQSxZQUFJLENBQUMsZ0JBQWdCO0FBQ25CLGlCQUFPLE1BQU0sRUFBRSxLQUFLLE1BQU0sSUFBSTtBQUFBLFFBQ2hDO0FBQUEsTUFDRjtBQUFBLE1BRUEsT0FBTztBQUNMLGVBQU8sS0FBSyxFQUFFO0FBQUEsVUFDWixDQUFDLFVBQVU7QUFDVCxnQkFBSSxNQUFNLE1BQU07QUFDZCxjQUFBRixRQUFPLEtBQUssSUFBSTtBQUFBLFlBQ2xCLE9BQU87QUFDTCxjQUFBQSxRQUFPLEtBQUssTUFBTSxLQUFLO0FBQUEsWUFDekI7QUFBQSxVQUNGO0FBQUEsVUFDQSxDQUFDLFVBQVUsUUFBUUEsU0FBUSxLQUFLO0FBQUEsUUFDbEM7QUFBQSxNQUNGO0FBQUEsTUFFQSxRQUFRLE9BQU8sVUFBVTtBQUN2QixpQkFBUyxPQUFPO0FBQ2QsY0FBSTtBQUNGLHFCQUFTLEtBQUs7QUFBQSxVQUNoQixTQUFTRSxRQUFQO0FBTUEsWUFBUUMsVUFBUyxNQUFNO0FBQ3JCLG9CQUFNRDtBQUFBLFlBQ1IsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBRUEsdUJBQWUsY0FBYztBQUMzQixjQUFJLENBQUMsZ0JBQWdCO0FBQ25CLGtCQUFNLE9BQU8sTUFBTSxLQUFLO0FBQUEsVUFDMUI7QUFBQSxRQUNGO0FBRUEsdUJBQWUsY0FBYztBQUMzQixjQUFJLENBQUMsZ0JBQWdCO0FBQ25CLGtCQUFNLE9BQU8sT0FBTyxLQUFLO0FBQUEsVUFDM0I7QUFBQSxRQUNGO0FBRUEsWUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQjtBQUN0QyxrQkFBUSxJQUFJO0FBQUEsWUFDVixZQUFZO0FBQUEsWUFDWixZQUFZO0FBQUEsVUFDZCxDQUFDLEVBQUUsS0FBSyxNQUFNLElBQUk7QUFDbEI7QUFBQSxRQUNGO0FBRUEsYUFBSztBQUFBLE1BQ1A7QUFBQSxJQUNGLENBQUM7QUFFRCxXQUFPLE9BQU87QUFBQSxNQUNaLE1BQU07QUFDSix5QkFBaUI7QUFDakIsWUFBSSxDQUFDLGdCQUFnQkYsT0FBTSxHQUFHO0FBQzVCLGtCQUFRQSxTQUFRLElBQUksMkJBQTJCLENBQUM7QUFBQSxRQUNsRDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLENBQUMsVUFBVTtBQUNULHlCQUFpQjtBQUNqQix5QkFBaUI7QUFDakIsZ0JBQVFBLFNBQVEsS0FBSztBQUFBLE1BQ3ZCO0FBQUEsSUFDRjtBQUVBLFdBQU8sT0FBTztBQUFBLE1BQ1osTUFBTTtBQUNKLHlCQUFpQjtBQUNqQixZQUFJLENBQUNLLGlCQUFnQkwsT0FBTSxHQUFHO0FBQzVCLFVBQUFBLFFBQU8sS0FBSyxJQUFJO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQUEsTUFDQSxDQUFDLFVBQVU7QUFDVCx5QkFBaUI7QUFDakIseUJBQWlCO0FBQ2pCLGdCQUFRQSxTQUFRLEtBQUs7QUFBQSxNQUN2QjtBQUFBLElBQ0Y7QUFFQSxXQUFPQTtBQUFBLEVBQ1Q7QUFRQSxNQUFNLFlBQU4sY0FBd0IsT0FBTztBQUFBLElBQzdCLFlBQVksU0FBUztBQUNuQixZQUFNLE9BQU87QUFJYixVQUFJLFNBQVMsYUFBYSxPQUFPO0FBQy9CLGFBQUssZUFBZSxXQUFXO0FBQy9CLGFBQUssZUFBZSxRQUFRO0FBQzVCLGFBQUssZUFBZSxhQUFhO0FBQUEsTUFDbkM7QUFFQSxVQUFJLFNBQVMsYUFBYSxPQUFPO0FBQy9CLGFBQUssZUFBZSxXQUFXO0FBQy9CLGFBQUssZUFBZSxTQUFTO0FBQzdCLGFBQUssZUFBZSxRQUFRO0FBQzVCLGFBQUssZUFBZSxXQUFXO0FBQUEsTUFDakM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFdBQVMsVUFBVSxNQUFNLE1BQU07QUFDN0IsUUFBSSxtQkFBbUIsSUFBSSxHQUFHO0FBQzVCLGFBQU87QUFBQSxJQUNUO0FBRUEsUUFBSSxxQkFBcUIsSUFBSSxHQUFHO0FBQzlCLGFBQU8sV0FBVyxFQUFFLFVBQVUsS0FBSyxDQUFDO0FBQUEsSUFDdEM7QUFFQSxRQUFJLHFCQUFxQixJQUFJLEdBQUc7QUFDOUIsYUFBTyxXQUFXLEVBQUUsVUFBVSxLQUFLLENBQUM7QUFBQSxJQUN0QztBQUVBLFFBQUksYUFBYSxJQUFJLEdBQUc7QUFDdEIsYUFBTyxXQUFXLEVBQUUsVUFBVSxPQUFPLFVBQVUsTUFBTSxDQUFDO0FBQUEsSUFDeEQ7QUFZQSxRQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCLFlBQU0sRUFBRSxPQUFPLE9BQUFNLFFBQU8sT0FBQUMsUUFBTyxTQUFBQyxTQUFRLElBQUksYUFBYSxJQUFJO0FBRTFELFVBQUksV0FBVyxLQUFLLEdBQUc7QUFDckIsZUFBTyxhQUFNLFdBQVcsT0FBTztBQUFBLFVBRTdCLFlBQVk7QUFBQSxVQUNaLE9BQUFGO0FBQUEsVUFDQSxPQUFBQztBQUFBLFVBQ0EsU0FBQUM7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNIO0FBRUEsWUFBTUMsUUFBTyxPQUFPO0FBQ3BCLFVBQUksT0FBT0EsVUFBUyxZQUFZO0FBQzlCLFlBQUlDO0FBRUosY0FBTSxVQUFVRCxNQUFLO0FBQUEsVUFDbkI7QUFBQSxVQUNBLENBQUMsUUFBUTtBQUNQLGdCQUFJLE9BQU8sTUFBTTtBQUNmLG9CQUFNLElBQUkseUJBQXlCLFNBQVMsUUFBUSxHQUFHO0FBQUEsWUFDekQ7QUFBQSxVQUNGO0FBQUEsVUFDQSxDQUFDLFFBQVE7QUFDUCxzQkFBVUMsS0FBRyxHQUFHO0FBQUEsVUFDbEI7QUFBQSxRQUNGO0FBRUEsZUFBT0EsTUFBSSxJQUFJLFVBQVU7QUFBQSxVQUV2QixZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsVUFDVixPQUFBSjtBQUFBLFVBQ0EsTUFBTSxJQUFJO0FBQ1IsWUFBQUMsT0FBTSxZQUFZO0FBQ2hCLGtCQUFJO0FBQ0Ysc0JBQU07QUFDTixnQkFBUUosVUFBUyxJQUFJLElBQUk7QUFBQSxjQUMzQixTQUFTLEtBQVA7QUFDQSxnQkFBUUEsVUFBUyxJQUFJLEdBQUc7QUFBQSxjQUMxQjtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0g7QUFBQSxVQUNBLFNBQUFLO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUVBLFlBQU0sSUFBSTtBQUFBLFFBQ1I7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxPQUFPLElBQUksR0FBRztBQUNoQixhQUFPLFVBQVUsS0FBSyxZQUFZLENBQUM7QUFBQSxJQUNyQztBQUVBLFFBQUksV0FBVyxJQUFJLEdBQUc7QUFDcEIsYUFBTyxhQUFNLFdBQVcsTUFBTTtBQUFBLFFBRTVCLFlBQVk7QUFBQSxRQUNaLFVBQVU7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNIO0FBVUEsUUFDRSxPQUFPLE1BQU0sYUFBYSxZQUMxQixPQUFPLE1BQU0sYUFBYSxVQUMxQjtBQUNBLFlBQU0sV0FBVyxNQUFNLFdBQ25CLHFCQUFxQixNQUFNLFFBQVEsSUFDakMsTUFBTSxXQUNOLFVBQVUsS0FBSyxRQUFRLElBQ3pCO0FBRUosWUFBTSxXQUFXLE1BQU0sV0FDbkIscUJBQXFCLE1BQU0sUUFBUSxJQUNqQyxNQUFNLFdBQ04sVUFBVSxLQUFLLFFBQVEsSUFDekI7QUFFSixhQUFPLFdBQVcsRUFBRSxVQUFVLFNBQVMsQ0FBQztBQUFBLElBQzFDO0FBRUEsVUFBTSxPQUFPLE1BQU07QUFDbkIsUUFBSSxPQUFPLFNBQVMsWUFBWTtBQUM5QixVQUFJRTtBQUVKLFdBQUs7QUFBQSxRQUNIO0FBQUEsUUFDQSxDQUFDLFFBQVE7QUFDUCxjQUFJLE9BQU8sTUFBTTtBQUNmLFlBQUFBLElBQUUsS0FBSyxHQUFHO0FBQUEsVUFDWjtBQUNBLFVBQUFBLElBQUUsS0FBSyxJQUFJO0FBQUEsUUFDYjtBQUFBLFFBQ0EsQ0FBQyxRQUFRO0FBQ1Asb0JBQVVBLEtBQUcsR0FBRztBQUFBLFFBQ2xCO0FBQUEsTUFDRjtBQUVBLGFBQU9BLE1BQUksSUFBSSxVQUFVO0FBQUEsUUFDdkIsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLFFBQ1YsT0FBTztBQUFBLFFBQUM7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUNIO0FBRUEsVUFBTSxJQUFJO0FBQUEsTUFDUjtBQUFBLE1BQ0E7QUFBQSxRQUNFO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBUyxhQUFhQyxLQUFJO0FBQ3hCLFFBQUksRUFBRSxTQUFTLFNBQUFDLFNBQVEsSUFBSSxzQkFBc0I7QUFDakQsVUFBTSxLQUFLLElBQUksZ0JBQWdCO0FBQy9CLFVBQU0sU0FBUyxHQUFHO0FBQ2xCLFVBQU0sUUFBUUQ7QUFBQSxNQUNaLG1CQUFtQjtBQUNqQixlQUFPLE1BQU07QUFDWCxnQkFBTSxXQUFXO0FBQ2pCLG9CQUFVO0FBQ1YsZ0JBQU0sRUFBRSxPQUFPLE1BQU0sR0FBRyxJQUFJLE1BQU07QUFDbEMsVUFBUVIsVUFBUyxFQUFFO0FBQ25CLGNBQUk7QUFBTTtBQUNWLGNBQUksT0FBTztBQUFTLGtCQUFNLElBQUksV0FBVztBQUN6QyxXQUFDLEVBQUUsU0FBUyxTQUFBUyxTQUFRLElBQUksc0JBQXNCO0FBQzlDLGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0YsRUFBRTtBQUFBLE1BQ0YsRUFBRSxPQUFPO0FBQUEsSUFDWDtBQUVBLFdBQU87QUFBQSxNQUNMO0FBQUEsTUFDQSxNQUFNLE9BQU8sVUFBVSxJQUFJO0FBQ3pCLGNBQU0sV0FBV0E7QUFDakIsUUFBQUEsV0FBVTtBQUNWLGlCQUFTLEVBQUUsT0FBTyxNQUFNLE9BQU8sR0FBRyxDQUFDO0FBQUEsTUFDckM7QUFBQSxNQUNBLE1BQU0sSUFBSTtBQUNSLGNBQU0sV0FBV0E7QUFDakIsUUFBQUEsV0FBVTtBQUNWLGlCQUFTLEVBQUUsTUFBTSxNQUFNLEdBQUcsQ0FBQztBQUFBLE1BQzdCO0FBQUEsTUFDQSxRQUFRLEtBQUssSUFBSTtBQUNmLFdBQUcsTUFBTTtBQUNULFdBQUcsR0FBRztBQUFBLE1BQ1I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFdBQVMsV0FBVyxNQUFNO0FBQ3hCLFVBQU1DLEtBQUksS0FBSyxZQUFZLE9BQU8sS0FBSyxTQUFTLFNBQVMsYUFDckQsaUJBQVMsS0FBSyxLQUFLLFFBQVEsSUFDM0IsS0FBSztBQUNULFVBQU1DLE1BQUksS0FBSztBQUVmLFFBQUksV0FBVyxDQUFDLENBQUNDLFlBQVdGLEVBQUM7QUFDN0IsUUFBSSxXQUFXLENBQUMsQ0FBQ0csWUFBV0YsR0FBQztBQUU3QixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSUo7QUFFSixhQUFTLFdBQVcsS0FBSztBQUN2QixZQUFNLEtBQUs7QUFDWCxnQkFBVTtBQUVWLFVBQUksSUFBSTtBQUNOLFdBQUcsR0FBRztBQUFBLE1BQ1IsV0FBVyxLQUFLO0FBQ2QsUUFBQUEsSUFBRSxRQUFRLEdBQUc7QUFBQSxNQUNmLFdBQVcsQ0FBQyxZQUFZLENBQUMsVUFBVTtBQUNqQyxRQUFBQSxJQUFFLFFBQVE7QUFBQSxNQUNaO0FBQUEsSUFDRjtBQUtBLElBQUFBLE1BQUksSUFBSSxVQUFVO0FBQUEsTUFFaEIsb0JBQW9CLENBQUMsQ0FBQ0csSUFBRztBQUFBLE1BQ3pCLG9CQUFvQixDQUFDLENBQUNDLEtBQUc7QUFBQSxNQUN6QjtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUM7QUFFRCxRQUFJLFVBQVU7QUFDWiw0QkFBSUEsS0FBRyxDQUFDLFFBQVE7QUFDZCxtQkFBVztBQUNYLFlBQUksS0FBSztBQUNQLG9CQUFVRCxJQUFHLEdBQUc7QUFBQSxRQUNsQjtBQUNBLG1CQUFXLEdBQUc7QUFBQSxNQUNoQixDQUFDO0FBRUQsTUFBQUgsSUFBRSxTQUFTLFNBQVUsT0FBTyxVQUFVLFVBQVU7QUFDOUMsWUFBSUksSUFBRSxNQUFNLE9BQU8sUUFBUSxHQUFHO0FBQzVCLG1CQUFTO0FBQUEsUUFDWCxPQUFPO0FBQ0wsb0JBQVU7QUFBQSxRQUNaO0FBQUEsTUFDRjtBQUVBLE1BQUFKLElBQUUsU0FBUyxTQUFVLFVBQVU7QUFDN0IsUUFBQUksSUFBRSxJQUFJO0FBQ04sbUJBQVc7QUFBQSxNQUNiO0FBRUEsTUFBQUEsSUFBRSxHQUFHLFNBQVMsV0FBWTtBQUN4QixZQUFJLFNBQVM7QUFDWCxnQkFBTSxLQUFLO0FBQ1gsb0JBQVU7QUFDVixhQUFHO0FBQUEsUUFDTDtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQUFBLElBQUUsR0FBRyxVQUFVLFdBQVk7QUFDekIsWUFBSSxVQUFVO0FBQ1osZ0JBQU0sS0FBSztBQUNYLHFCQUFXO0FBQ1gsYUFBRztBQUFBLFFBQ0w7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsUUFBSSxVQUFVO0FBQ1osNEJBQUlELElBQUcsQ0FBQyxRQUFRO0FBQ2QsbUJBQVc7QUFDWCxZQUFJLEtBQUs7QUFDUCxvQkFBVUEsSUFBRyxHQUFHO0FBQUEsUUFDbEI7QUFDQSxtQkFBVyxHQUFHO0FBQUEsTUFDaEIsQ0FBQztBQUVELE1BQUFBLEdBQUUsR0FBRyxZQUFZLFdBQVk7QUFDM0IsWUFBSSxZQUFZO0FBQ2QsZ0JBQU0sS0FBSztBQUNYLHVCQUFhO0FBQ2IsYUFBRztBQUFBLFFBQ0w7QUFBQSxNQUNGLENBQUM7QUFFRCxNQUFBQSxHQUFFLEdBQUcsT0FBTyxXQUFZO0FBQ3RCLFFBQUFILElBQUUsS0FBSyxJQUFJO0FBQUEsTUFDYixDQUFDO0FBRUQsTUFBQUEsSUFBRSxRQUFRLFdBQVk7QUFDcEIsZUFBTyxNQUFNO0FBQ1gsZ0JBQU0sTUFBTUcsR0FBRSxLQUFLO0FBRW5CLGNBQUksUUFBUSxNQUFNO0FBQ2hCLHlCQUFhSCxJQUFFO0FBQ2Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxDQUFDQSxJQUFFLEtBQUssR0FBRyxHQUFHO0FBQ2hCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLElBQUFBLElBQUUsV0FBVyxTQUFVLEtBQUssVUFBVTtBQUNwQyxVQUFJLENBQUMsT0FBTyxZQUFZLE1BQU07QUFDNUIsY0FBTSxJQUFJLFdBQVc7QUFBQSxNQUN2QjtBQUVBLG1CQUFhO0FBQ2IsZ0JBQVU7QUFDVixpQkFBVztBQUVYLFVBQUksWUFBWSxNQUFNO0FBQ3BCLGlCQUFTLEdBQUc7QUFBQSxNQUNkLE9BQU87QUFDTCxrQkFBVTtBQUNWLGtCQUFVSSxLQUFHLEdBQUc7QUFDaEIsa0JBQVVELElBQUcsR0FBRztBQUFBLE1BQ2xCO0FBQUEsSUFDRjtBQUVBLFdBQU9IO0FBQUEsRUFDVDtBQUlBLFdBQVMsV0FBVyxNQUFNO0FBQ3hCLFdBQU8sVUFBVSxNQUFNLE1BQU07QUFBQSxFQUMvQjtBQUVBLFNBQU8sT0FBTztBQUNkLFNBQU8sWUFBWTtBQUVuQixNQUFPLGlCQUFROzs7QUMzckJmLFNBQU8sZUFBZSxVQUFVLFdBQVcsZUFBTyxTQUFTO0FBQzNELFNBQU8sZUFBZSxXQUFXLGNBQU07QUFFdkMsTUFBTSxZQUFZLE9BQU8sV0FBVztBQUVwQyxXQUFTLFVBQVUsU0FBUztBQUMxQixRQUFJLEVBQUUsZ0JBQWdCLFlBQVk7QUFDaEMsYUFBTyxJQUFJLFVBQVUsT0FBTztBQUFBLElBQzlCO0FBRUEsbUJBQU8sS0FBSyxNQUFNLE9BQU87QUFLekIsU0FBSyxlQUFlLE9BQU87QUFFM0IsU0FBSyxhQUFhO0FBRWxCLFFBQUksU0FBUztBQUNYLFVBQUksT0FBTyxRQUFRLGNBQWMsWUFBWTtBQUMzQyxhQUFLLGFBQWEsUUFBUTtBQUFBLE1BQzVCO0FBRUEsVUFBSSxPQUFPLFFBQVEsVUFBVSxZQUFZO0FBQ3ZDLGFBQUssU0FBUyxRQUFRO0FBQUEsTUFDeEI7QUFBQSxJQUNGO0FBTUEsU0FBSyxHQUFHLGFBQWFPLFVBQVM7QUFBQSxFQUNoQztBQUVBLFdBQVMsTUFBTSxJQUFJO0FBQ2pCLFFBQUksU0FBUztBQUNiLFFBQUksT0FBTyxLQUFLLFdBQVcsY0FBYyxDQUFDLEtBQUssV0FBVztBQUN4RCxZQUFNLFNBQVMsS0FBSyxPQUFPLENBQUNDLEtBQUksU0FBUztBQUN2QyxpQkFBUztBQUNULFlBQUlBLEtBQUk7QUFDTixjQUFJLElBQUk7QUFDTixlQUFHQSxHQUFFO0FBQUEsVUFDUCxPQUFPO0FBQ0wsaUJBQUssUUFBUUEsR0FBRTtBQUFBLFVBQ2pCO0FBQ0E7QUFBQSxRQUNGO0FBRUEsWUFBSSxRQUFRLE1BQU07QUFDaEIsZUFBSyxLQUFLLElBQUk7QUFBQSxRQUNoQjtBQUNBLGFBQUssS0FBSyxJQUFJO0FBQ2QsWUFBSSxJQUFJO0FBQ04sYUFBRztBQUFBLFFBQ0w7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLFdBQVcsVUFBYSxXQUFXLE1BQU07QUFDM0MsWUFBSTtBQUNGLGdCQUFNLE9BQU8sT0FBTztBQUNwQixjQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCLGlCQUFLO0FBQUEsY0FDSDtBQUFBLGNBQ0EsQ0FBQyxTQUFTO0FBQ1Isb0JBQUksUUFBUTtBQUNWO0FBQUEsZ0JBQ0Y7QUFDQSxvQkFBSSxRQUFRLE1BQU07QUFDaEIsdUJBQUssS0FBSyxJQUFJO0FBQUEsZ0JBQ2hCO0FBQ0EscUJBQUssS0FBSyxJQUFJO0FBQ2Qsb0JBQUksSUFBSTtBQUNOLGtCQUFRQyxVQUFTLEVBQUU7QUFBQSxnQkFDckI7QUFBQSxjQUNGO0FBQUEsY0FDQSxDQUFDLFFBQVE7QUFDUCxvQkFBSSxJQUFJO0FBQ04sa0JBQVFBLFVBQVMsSUFBSSxHQUFHO0FBQUEsZ0JBQzFCLE9BQU87QUFDTCxrQkFBUUEsVUFBUyxNQUFNLEtBQUssUUFBUSxHQUFHLENBQUM7QUFBQSxnQkFDMUM7QUFBQSxjQUNGO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLFNBQVMsS0FBUDtBQUNBLFVBQVFBLFVBQVMsTUFBTSxLQUFLLFFBQVEsR0FBRyxDQUFDO0FBQUEsUUFDMUM7QUFBQSxNQUNGO0FBQUEsSUFDRixPQUFPO0FBQ0wsV0FBSyxLQUFLLElBQUk7QUFDZCxVQUFJLElBQUk7QUFDTixXQUFHO0FBQUEsTUFDTDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBU0YsYUFBWTtBQUNuQixRQUFJLEtBQUssV0FBVyxPQUFPO0FBQ3pCLFlBQU0sS0FBSyxJQUFJO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBRUEsWUFBVSxVQUFVLFNBQVM7QUFFN0IsWUFBVSxVQUFVLGFBQWEsU0FBVSxPQUFPLFVBQVUsVUFBVTtBQUNwRSxVQUFNLElBQUksMkJBQTJCLGNBQWM7QUFBQSxFQUNyRDtBQUVBLFlBQVUsVUFBVSxTQUFTLFNBQVUsT0FBTyxVQUFVLFVBQVU7QUFDaEUsVUFBTSxTQUFTLEtBQUs7QUFDcEIsVUFBTSxTQUFTLEtBQUs7QUFDcEIsVUFBTSxTQUFTLE9BQU87QUFFdEIsUUFBSSxTQUFTO0FBQ2IsVUFBTSxTQUFTLEtBQUssV0FBVyxPQUFPLFVBQVUsQ0FBQyxLQUFLLFFBQVE7QUFDNUQsZUFBUztBQUNULFVBQUksS0FBSztBQUNQLGlCQUFTLEdBQUc7QUFDWjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLE9BQU8sTUFBTTtBQUNmLGFBQUssS0FBSyxHQUFHO0FBQUEsTUFDZjtBQUVBLFVBQ0UsT0FBTyxTQUNQLFdBQVcsT0FBTyxVQUNsQixPQUFPLFNBQVMsT0FBTyxpQkFDdkIsT0FBTyxXQUFXLEdBQ2xCO0FBQ0EsaUJBQVM7QUFBQSxNQUNYLE9BQU87QUFDTCxhQUFLLGFBQWE7QUFBQSxNQUNwQjtBQUFBLElBQ0YsQ0FBQztBQUNELFFBQUksV0FBVyxVQUFhLFVBQVUsTUFBTTtBQUMxQyxVQUFJO0FBQ0YsY0FBTSxPQUFPLE9BQU87QUFDcEIsWUFBSSxPQUFPLFNBQVMsWUFBWTtBQUM5QixlQUFLO0FBQUEsWUFDSDtBQUFBLFlBQ0EsQ0FBQyxRQUFRO0FBQ1Asa0JBQUksUUFBUTtBQUNWO0FBQUEsY0FDRjtBQUVBLGtCQUFJLE9BQU8sTUFBTTtBQUNmLHFCQUFLLEtBQUssR0FBRztBQUFBLGNBQ2Y7QUFFQSxrQkFDRSxPQUFPLFNBQ1AsV0FBVyxPQUFPLFVBQ2xCLE9BQU8sU0FBUyxPQUFPLGlCQUN2QixPQUFPLFdBQVcsR0FDbEI7QUFDQSxnQkFBUUUsVUFBUyxRQUFRO0FBQUEsY0FDM0IsT0FBTztBQUNMLHFCQUFLLGFBQWE7QUFBQSxjQUNwQjtBQUFBLFlBQ0Y7QUFBQSxZQUNBLENBQUMsUUFBUTtBQUNQLGNBQVFBLFVBQVMsVUFBVSxHQUFHO0FBQUEsWUFDaEM7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0YsU0FBUyxLQUFQO0FBQ0EsUUFBUUEsVUFBUyxVQUFVLEdBQUc7QUFBQSxNQUNoQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsWUFBVSxVQUFVLFFBQVEsV0FBWTtBQUN0QyxRQUFJLEtBQUssWUFBWTtBQUNuQixZQUFNLFdBQVcsS0FBSztBQUN0QixXQUFLLGFBQWE7QUFDbEIsZUFBUztBQUFBLElBQ1g7QUFBQSxFQUNGO0FBRUEsTUFBTyxvQkFBUTs7O0FDeExmLFNBQU8sZUFBZSxZQUFZLFdBQVcsa0JBQVUsU0FBUztBQUNoRSxTQUFPLGVBQWUsYUFBYSxpQkFBUztBQUU1QyxXQUFTLFlBQVksU0FBUztBQUM1QixRQUFJLEVBQUUsZ0JBQWdCLGNBQWM7QUFDbEMsYUFBTyxJQUFJLFlBQVksT0FBTztBQUFBLElBQ2hDO0FBRUEsc0JBQVUsS0FBSyxNQUFNLE9BQU87QUFBQSxFQUM5QjtBQUVBLGNBQVksVUFBVSxhQUFhLFNBQVUsT0FBTyxVQUFVLElBQUk7QUFDaEUsT0FBRyxNQUFNLEtBQUs7QUFBQSxFQUNoQjtBQUVBLE1BQU8sc0JBQVE7OztBQ0VmLFdBQVNDLFdBQVUsUUFBUSxTQUFTLFNBQVMsVUFBVTtBQUNyRCxlQUFXLEtBQUssUUFBUTtBQUV4QixRQUFJQyxZQUFXO0FBQ2YsV0FBTyxHQUFHLFNBQVMsTUFBTTtBQUN2QixNQUFBQSxZQUFXO0FBQUEsSUFDYixDQUFDO0FBRUQsMEJBQUksUUFBUSxFQUFFLFVBQVUsU0FBUyxVQUFVLFFBQVEsR0FBRyxDQUFDLFFBQVE7QUFDN0QsTUFBQUEsWUFBVyxDQUFDO0FBRVosWUFBTSxTQUFTLE9BQU87QUFDdEIsVUFDRSxPQUNBLElBQUksU0FBUyxnQ0FDYixZQUNDLFVBQVUsT0FBTyxTQUFTLENBQUMsT0FBTyxXQUFXLENBQUMsT0FBTyxlQUN0RDtBQVNBLGVBQ0csS0FBSyxPQUFPLFFBQVEsRUFDcEIsS0FBSyxTQUFTLFFBQVE7QUFBQSxNQUMzQixPQUFPO0FBQ0wsaUJBQVMsR0FBRztBQUFBLE1BQ2Q7QUFBQSxJQUNGLENBQUM7QUFFRCxXQUFPLENBQUMsUUFBUTtBQUNkLFVBQUlBO0FBQVU7QUFDZCxNQUFBQSxZQUFXO0FBQ1gsc0JBQVksVUFBVSxRQUFRLEdBQUc7QUFDakMsZUFBUyxPQUFPLElBQUkscUJBQXFCLE1BQU0sQ0FBQztBQUFBLElBQ2xEO0FBQUEsRUFDRjtBQUVBLFdBQVMsWUFBWSxTQUFTO0FBSTVCLHFCQUFpQixRQUFRLFFBQVEsU0FBUyxFQUFFO0FBQzVDLFdBQU8sUUFBUSxJQUFJO0FBQUEsRUFDckI7QUFFQSxXQUFTLGtCQUFrQixLQUFLO0FBQzlCLFFBQUksV0FBVyxHQUFHLEdBQUc7QUFDbkIsYUFBTztBQUFBLElBQ1QsV0FBVyxxQkFBcUIsR0FBRyxHQUFHO0FBRXBDLGFBQU8sYUFBYSxHQUFHO0FBQUEsSUFDekI7QUFDQSxVQUFNLElBQUk7QUFBQSxNQUNSO0FBQUEsTUFDQSxDQUFDLFlBQVksWUFBWSxlQUFlO0FBQUEsTUFDeEM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLGtCQUFnQixhQUFhLEtBQUs7QUFDaEMsV0FBTyxpQkFBUyxVQUFVLE9BQU8sZUFBZSxLQUFLLEdBQUc7QUFBQSxFQUMxRDtBQUVBLGlCQUFlLEtBQUssVUFBVSxVQUFVQyxTQUFRO0FBQzlDLFFBQUk7QUFDSixRQUFJLFlBQVk7QUFFaEIsVUFBTUMsVUFBUyxDQUFDLFFBQVE7QUFDdEIsVUFBSSxLQUFLO0FBQ1AsZ0JBQVE7QUFBQSxNQUNWO0FBRUEsVUFBSSxXQUFXO0FBQ2IsY0FBTSxXQUFXO0FBQ2pCLG9CQUFZO0FBQ1osaUJBQVM7QUFBQSxNQUNYO0FBQUEsSUFDRjtBQUVBLFVBQU0sT0FBTyxNQUNYLElBQUksUUFBUSxDQUFDQyxVQUFTLFdBQVc7QUFDL0IsVUFBSSxPQUFPO0FBQ1QsZUFBTyxLQUFLO0FBQUEsTUFDZCxPQUFPO0FBQ0wsb0JBQVksTUFBTTtBQUNoQixjQUFJLE9BQU87QUFDVCxtQkFBTyxLQUFLO0FBQUEsVUFDZCxPQUFPO0FBQ0wsWUFBQUEsU0FBUTtBQUFBLFVBQ1Y7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUVILGFBQVMsR0FBRyxTQUFTRCxPQUFNO0FBQzNCLFVBQU0sVUFBVSxzQkFBSSxVQUFVLEVBQUUsVUFBVSxNQUFNLEdBQUdBLE9BQU07QUFFekQsUUFBSTtBQUNGLFVBQUksU0FBUyxtQkFBbUI7QUFDOUIsY0FBTSxLQUFLO0FBQUEsTUFDYjtBQUVBLHVCQUFpQixTQUFTLFVBQVU7QUFDbEMsWUFBSSxDQUFDLFNBQVMsTUFBTSxLQUFLLEdBQUc7QUFDMUIsZ0JBQU0sS0FBSztBQUFBLFFBQ2I7QUFBQSxNQUNGO0FBRUEsZUFBUyxJQUFJO0FBRWIsWUFBTSxLQUFLO0FBRVgsTUFBQUQsUUFBTztBQUFBLElBQ1QsU0FBUyxLQUFQO0FBQ0EsTUFBQUEsUUFBTyxVQUFVLE1BQU0sbUJBQW1CLE9BQU8sR0FBRyxJQUFJLEdBQUc7QUFBQSxJQUM3RCxVQUFFO0FBQ0EsY0FBUTtBQUNSLGVBQVMsSUFBSSxTQUFTQyxPQUFNO0FBQUEsSUFDOUI7QUFBQSxFQUNGO0FBRUEsV0FBUyxZQUFZLFNBQVM7QUFDNUIsVUFBTSxXQUFXLEtBQUssWUFBWSxPQUFPLENBQUM7QUFHMUMsUUFBSSxNQUFNLFFBQVEsUUFBUSxFQUFFLEtBQUssUUFBUSxXQUFXLEdBQUc7QUFDckQsZ0JBQVUsUUFBUTtBQUFBLElBQ3BCO0FBRUEsV0FBTyxhQUFhLFNBQVMsUUFBUTtBQUFBLEVBQ3ZDO0FBRUEsV0FBUyxhQUFhLFNBQVMsVUFBVSxNQUFNO0FBQzdDLFFBQUksUUFBUSxTQUFTLEdBQUc7QUFDdEIsWUFBTSxJQUFJLGlCQUFpQixTQUFTO0FBQUEsSUFDdEM7QUFFQSxVQUFNLEtBQUssSUFBSSxnQkFBZ0I7QUFDL0IsVUFBTSxTQUFTLEdBQUc7QUFDbEIsVUFBTSxjQUFjLE1BQU07QUFFMUIsd0JBQW9CLGFBQWEsZ0JBQWdCO0FBRWpELGFBQVMsUUFBUTtBQUNmLGlCQUFXLElBQUksV0FBVyxDQUFDO0FBQUEsSUFDN0I7QUFFQSxpQkFBYSxpQkFBaUIsU0FBUyxLQUFLO0FBRTVDLFFBQUk7QUFDSixRQUFJO0FBQ0osVUFBTSxXQUFXLENBQUM7QUFFbEIsUUFBSSxjQUFjO0FBRWxCLGFBQVNELFFBQU8sS0FBSztBQUNuQixpQkFBVyxLQUFLLEVBQUUsZ0JBQWdCLENBQUM7QUFBQSxJQUNyQztBQUVBLGFBQVMsV0FBVyxLQUFLRyxRQUFPO0FBQzlCLFVBQUksUUFBUSxDQUFDLFNBQVMsTUFBTSxTQUFTLCtCQUErQjtBQUNsRSxnQkFBUTtBQUFBLE1BQ1Y7QUFFQSxVQUFJLENBQUMsU0FBUyxDQUFDQSxRQUFPO0FBQ3BCO0FBQUEsTUFDRjtBQUVBLGFBQU8sU0FBUyxRQUFRO0FBQ3RCLGlCQUFTLE1BQU0sRUFBRSxLQUFLO0FBQUEsTUFDeEI7QUFFQSxtQkFBYSxvQkFBb0IsU0FBUyxLQUFLO0FBQy9DLFNBQUcsTUFBTTtBQUVULFVBQUlBLFFBQU87QUFDVCxpQkFBUyxPQUFPLEtBQUs7QUFBQSxNQUN2QjtBQUFBLElBQ0Y7QUFFQSxRQUFJO0FBQ0osYUFBU0MsS0FBSSxHQUFHQSxLQUFJLFFBQVEsUUFBUUEsTUFBSztBQUN2QyxZQUFNLFNBQVMsUUFBUUE7QUFDdkIsWUFBTSxVQUFVQSxLQUFJLFFBQVEsU0FBUztBQUNyQyxZQUFNLFVBQVVBLEtBQUk7QUFFcEIsVUFBSSxhQUFhLE1BQU0sR0FBRztBQUN4QjtBQUNBLGlCQUFTLEtBQUtOLFdBQVUsUUFBUSxTQUFTLFNBQVNFLE9BQU0sQ0FBQztBQUFBLE1BQzNEO0FBRUEsVUFBSUksT0FBTSxHQUFHO0FBQ1gsWUFBSSxPQUFPLFdBQVcsWUFBWTtBQUNoQyxnQkFBTSxPQUFPLEVBQUUsT0FBTyxDQUFDO0FBQ3ZCLGNBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRztBQUNwQixrQkFBTSxJQUFJO0FBQUEsY0FDUjtBQUFBLGNBQ0E7QUFBQSxjQUNBO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLFdBQVcsV0FBVyxNQUFNLEtBQUsscUJBQXFCLE1BQU0sR0FBRztBQUM3RCxnQkFBTTtBQUFBLFFBQ1IsT0FBTztBQUNMLGdCQUFNLGVBQU8sS0FBSyxNQUFNO0FBQUEsUUFDMUI7QUFBQSxNQUNGLFdBQVcsT0FBTyxXQUFXLFlBQVk7QUFDdkMsY0FBTSxrQkFBa0IsR0FBRztBQUMzQixjQUFNLE9BQU8sS0FBSyxFQUFFLE9BQU8sQ0FBQztBQUU1QixZQUFJLFNBQVM7QUFDWCxjQUFJLENBQUMsV0FBVyxLQUFLLElBQUksR0FBRztBQUMxQixrQkFBTSxJQUFJO0FBQUEsY0FDUjtBQUFBLGNBQ0EsYUFBYUEsS0FBSTtBQUFBLGNBQ2pCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLE9BQU87QUFNTCxnQkFBTUMsT0FBSyxJQUFJLG9CQUFZO0FBQUEsWUFDekIsWUFBWTtBQUFBLFVBQ2QsQ0FBQztBQUlELGdCQUFNLE9BQU8sS0FBSztBQUNsQixjQUFJLE9BQU8sU0FBUyxZQUFZO0FBQzlCLGlCQUFLLEtBQUssS0FBSyxDQUFDLFFBQVE7QUFDdEIsc0JBQVE7QUFDUixjQUFBQSxLQUFHLElBQUksR0FBRztBQUFBLFlBQ1osR0FBRyxDQUFDLFFBQVE7QUFDVixjQUFBQSxLQUFHLFFBQVEsR0FBRztBQUFBLFlBQ2hCLENBQUM7QUFBQSxVQUNILFdBQVcsV0FBVyxLQUFLLElBQUksR0FBRztBQUNoQztBQUNBLGlCQUFLLEtBQUtBLE1BQUlMLE9BQU07QUFBQSxVQUN0QixPQUFPO0FBQ0wsa0JBQU0sSUFBSTtBQUFBLGNBQ1I7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsZ0JBQU1LO0FBRU47QUFDQSxtQkFBUyxLQUFLUCxXQUFVLEtBQUssT0FBTyxNQUFNRSxPQUFNLENBQUM7QUFBQSxRQUNuRDtBQUFBLE1BQ0YsV0FBVyxhQUFhLE1BQU0sR0FBRztBQUMvQixZQUFJLHFCQUFxQixHQUFHLEdBQUc7QUFDN0IsY0FBSSxLQUFLLE1BQU07QUFLZixjQUFJLFdBQVcsTUFBTSxVQUFVLFdBQVcsTUFBTSxRQUFRO0FBQ3RELGdCQUFJLEdBQUcsT0FBTyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQUEsVUFDbEM7QUFBQSxRQUNGLE9BQU87QUFDTCxnQkFBTSxrQkFBa0IsR0FBRztBQUUzQjtBQUNBLGVBQUssS0FBSyxRQUFRQSxPQUFNO0FBQUEsUUFDMUI7QUFDQSxjQUFNO0FBQUEsTUFDUixPQUFPO0FBQ0wsY0FBTSxlQUFPLEtBQUssTUFBTTtBQUFBLE1BQzFCO0FBQUEsSUFDRjtBQUVBLFFBQUksUUFBUSxXQUFXLGFBQWEsU0FBUztBQUMzQyxNQUFRTSxVQUFTLEtBQUs7QUFBQSxJQUN4QjtBQUVBLFdBQU87QUFBQSxFQUNUOzs7QUN0U0EsTUFBTSxnQkFBTixjQUE0QixlQUFPO0FBQUEsSUFDakMsWUFBWSxTQUFTO0FBQ25CLFlBQU0sT0FBTztBQUliLFVBQUksU0FBUyxhQUFhLE9BQU87QUFDL0IsYUFBSyxlQUFlLFdBQVc7QUFDL0IsYUFBSyxlQUFlLFFBQVE7QUFDNUIsYUFBSyxlQUFlLGFBQWE7QUFBQSxNQUNuQztBQUVBLFVBQUksU0FBUyxhQUFhLE9BQU87QUFDL0IsYUFBSyxlQUFlLFdBQVc7QUFDL0IsYUFBSyxlQUFlLFNBQVM7QUFDN0IsYUFBSyxlQUFlLFFBQVE7QUFDNUIsYUFBSyxlQUFlLFdBQVc7QUFBQSxNQUNqQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsV0FBUyxXQUFXLFNBQVM7QUFDM0IsUUFBSSxRQUFRLFdBQVcsR0FBRztBQUN4QixZQUFNLElBQUksaUJBQWlCLFNBQVM7QUFBQSxJQUN0QztBQUVBLFFBQUksUUFBUSxXQUFXLEdBQUc7QUFDeEIsYUFBTyxlQUFPLEtBQUssUUFBUSxFQUFFO0FBQUEsSUFDL0I7QUFFQSxVQUFNLGFBQWEsQ0FBQyxHQUFHLE9BQU87QUFFOUIsUUFBSSxPQUFPLFFBQVEsT0FBTyxZQUFZO0FBQ3BDLGNBQVEsS0FBSyxlQUFPLEtBQUssUUFBUSxFQUFFO0FBQUEsSUFDckM7QUFFQSxRQUFJLE9BQU8sUUFBUSxRQUFRLFNBQVMsT0FBTyxZQUFZO0FBQ3JELFlBQU0sTUFBTSxRQUFRLFNBQVM7QUFDN0IsY0FBUSxPQUFPLGVBQU8sS0FBSyxRQUFRLElBQUk7QUFBQSxJQUN6QztBQUVBLGFBQVNDLEtBQUksR0FBR0EsS0FBSSxRQUFRLFFBQVEsRUFBRUEsSUFBRztBQUN2QyxVQUFJLENBQUMsYUFBYSxRQUFRQSxHQUFFLEdBQUc7QUFFN0I7QUFBQSxNQUNGO0FBQ0EsVUFBSUEsS0FBSSxRQUFRLFNBQVMsS0FBSyxDQUFDQyxZQUFXLFFBQVFELEdBQUUsR0FBRztBQUNyRCxjQUFNLElBQUk7QUFBQSxVQUNSLFdBQVdBO0FBQUEsVUFDWCxXQUFXQTtBQUFBLFVBQ1g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLFVBQUlBLEtBQUksS0FBSyxDQUFDRSxZQUFXLFFBQVFGLEdBQUUsR0FBRztBQUNwQyxjQUFNLElBQUk7QUFBQSxVQUNSLFdBQVdBO0FBQUEsVUFDWCxXQUFXQTtBQUFBLFVBQ1g7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFDSixRQUFJO0FBQ0osUUFBSUc7QUFFSixhQUFTLFdBQVcsS0FBSztBQUN2QixZQUFNLEtBQUs7QUFDWCxnQkFBVTtBQUVWLFVBQUksSUFBSTtBQUNOLFdBQUcsR0FBRztBQUFBLE1BQ1IsV0FBVyxLQUFLO0FBQ2QsUUFBQUEsSUFBRSxRQUFRLEdBQUc7QUFBQSxNQUNmLFdBQVcsQ0FBQyxZQUFZLENBQUMsVUFBVTtBQUNqQyxRQUFBQSxJQUFFLFFBQVE7QUFBQSxNQUNaO0FBQUEsSUFDRjtBQUVBLFVBQU0sT0FBTyxRQUFRO0FBQ3JCLFVBQU0sT0FBTyxTQUFTLFNBQVMsVUFBVTtBQUV6QyxVQUFNLFdBQVcsQ0FBQyxDQUFDRCxZQUFXLElBQUk7QUFDbEMsVUFBTSxXQUFXLENBQUMsQ0FBQ0QsWUFBVyxJQUFJO0FBS2xDLElBQUFFLE1BQUksSUFBSSxjQUFjO0FBQUEsTUFFcEIsb0JBQW9CLENBQUMsQ0FBQyxNQUFNO0FBQUEsTUFDNUIsb0JBQW9CLENBQUMsQ0FBQyxNQUFNO0FBQUEsTUFDNUI7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBRUQsUUFBSSxVQUFVO0FBQ1osTUFBQUEsSUFBRSxTQUFTLFNBQVUsT0FBTyxVQUFVLFVBQVU7QUFDOUMsWUFBSSxLQUFLLE1BQU0sT0FBTyxRQUFRLEdBQUc7QUFDL0IsbUJBQVM7QUFBQSxRQUNYLE9BQU87QUFDTCxvQkFBVTtBQUFBLFFBQ1o7QUFBQSxNQUNGO0FBRUEsTUFBQUEsSUFBRSxTQUFTLFNBQVUsVUFBVTtBQUM3QixhQUFLLElBQUk7QUFDVCxtQkFBVztBQUFBLE1BQ2I7QUFFQSxXQUFLLEdBQUcsU0FBUyxXQUFZO0FBQzNCLFlBQUksU0FBUztBQUNYLGdCQUFNLEtBQUs7QUFDWCxvQkFBVTtBQUNWLGFBQUc7QUFBQSxRQUNMO0FBQUEsTUFDRixDQUFDO0FBRUQsV0FBSyxHQUFHLFVBQVUsV0FBWTtBQUM1QixZQUFJLFVBQVU7QUFDWixnQkFBTSxLQUFLO0FBQ1gscUJBQVc7QUFDWCxhQUFHO0FBQUEsUUFDTDtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxRQUFJLFVBQVU7QUFDWixXQUFLLEdBQUcsWUFBWSxXQUFZO0FBQzlCLFlBQUksWUFBWTtBQUNkLGdCQUFNLEtBQUs7QUFDWCx1QkFBYTtBQUNiLGFBQUc7QUFBQSxRQUNMO0FBQUEsTUFDRixDQUFDO0FBRUQsV0FBSyxHQUFHLE9BQU8sV0FBWTtBQUN6QixRQUFBQSxJQUFFLEtBQUssSUFBSTtBQUFBLE1BQ2IsQ0FBQztBQUVELE1BQUFBLElBQUUsUUFBUSxXQUFZO0FBQ3BCLGVBQU8sTUFBTTtBQUNYLGdCQUFNLE1BQU0sS0FBSyxLQUFLO0FBRXRCLGNBQUksUUFBUSxNQUFNO0FBQ2hCLHlCQUFhQSxJQUFFO0FBQ2Y7QUFBQSxVQUNGO0FBRUEsY0FBSSxDQUFDQSxJQUFFLEtBQUssR0FBRyxHQUFHO0FBQ2hCO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLElBQUFBLElBQUUsV0FBVyxTQUFVLEtBQUssVUFBVTtBQUNwQyxVQUFJLENBQUMsT0FBTyxZQUFZLE1BQU07QUFDNUIsY0FBTSxJQUFJLFdBQVc7QUFBQSxNQUN2QjtBQUVBLG1CQUFhO0FBQ2IsZ0JBQVU7QUFDVixpQkFBVztBQUVYLFVBQUksWUFBWSxNQUFNO0FBQ3BCLGlCQUFTLEdBQUc7QUFBQSxNQUNkLE9BQU87QUFDTCxrQkFBVTtBQUNWLGtCQUFVLE1BQU0sR0FBRztBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUVBLFdBQU9BO0FBQUEsRUFDVDtBQUVBLE1BQU8sa0JBQVE7OztBQzFMZixXQUFTQyxhQUFZLFNBQVM7QUFDNUIsV0FBTyxJQUFJLFFBQVEsQ0FBQ0MsVUFBUyxXQUFXO0FBQ3RDLFVBQUk7QUFDSixVQUFJO0FBQ0osWUFBTSxVQUFVLFFBQVEsUUFBUSxTQUFTO0FBQ3pDLFVBQ0UsV0FBVyxPQUFPLFlBQVksWUFDOUIsQ0FBQyxhQUFhLE9BQU8sS0FBSyxDQUFDLFdBQVcsT0FBTyxHQUM3QztBQUNBLGNBQU0sVUFBVSxRQUFRLElBQUk7QUFDNUIsaUJBQVMsUUFBUTtBQUNqQixjQUFNLFFBQVE7QUFBQSxNQUNoQjtBQUVBLG1CQUFHLFNBQVMsQ0FBQyxLQUFLLFVBQVU7QUFDMUIsWUFBSSxLQUFLO0FBQ1AsaUJBQU8sR0FBRztBQUFBLFFBQ1osT0FBTztBQUNMLFVBQUFBLFNBQVEsS0FBSztBQUFBLFFBQ2Y7QUFBQSxNQUNGLEdBQUcsRUFBRSxRQUFRLElBQUksQ0FBQztBQUFBLElBQ3BCLENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxTQUFTLFFBQVEsTUFBTTtBQUM5QixXQUFPLElBQUksUUFBUSxDQUFDQSxVQUFTLFdBQVc7QUFDdEMsNEJBQUksUUFBUSxNQUFNLENBQUMsUUFBUTtBQUN6QixZQUFJLEtBQUs7QUFDUCxpQkFBTyxHQUFHO0FBQUEsUUFDWixPQUFPO0FBQ0wsVUFBQUEsU0FBUTtBQUFBLFFBQ1Y7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNIO0FBRUEsTUFBTyxtQkFBUTtBQUFBLElBQ2I7QUFBQSxJQUNBLFVBQUFEO0FBQUEsRUFDRjs7O0FDMUJBLE1BQU0sRUFBRSxRQUFRLGdCQUFnQixJQUFJO0FBRXBDLFNBQU8sY0FBYztBQUNyQixTQUFPLFdBQVc7QUFDbEIsU0FBTyxXQUFXO0FBQ2xCLFNBQU8sU0FBUztBQUNoQixTQUFPLFlBQVk7QUFDbkIsU0FBTyxjQUFjO0FBQ3JCLFNBQU8sV0FBVztBQUNsQixTQUFPLGlCQUFpQjtBQUN4QixTQUFPLFdBQVc7QUFDbEIsU0FBTyxVQUFVO0FBQ2pCLFNBQU8sVUFBVTtBQUVqQixTQUFPLGVBQWUsUUFBUSxZQUFZO0FBQUEsSUFDeEMsY0FBYztBQUFBLElBQ2QsWUFBWTtBQUFBLElBQ1osTUFBTTtBQUNKLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FBTyxlQUFlLFVBQVUsaUJBQWlCO0FBQUEsSUFDL0MsWUFBWTtBQUFBLElBQ1osTUFBTTtBQUNKLGFBQU8saUJBQVM7QUFBQSxJQUNsQjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQU8sZUFBZSx1QkFBSyxpQkFBaUI7QUFBQSxJQUMxQyxZQUFZO0FBQUEsSUFDWixNQUFNO0FBQ0osYUFBTyxpQkFBUztBQUFBLElBQ2xCO0FBQUEsRUFDRixDQUFDO0FBR0QsU0FBTyxTQUFTO0FBQ2hCLFNBQU8sZ0JBQWdCO0FBQ3ZCLFNBQU8sc0JBQXNCOzs7QUM3QzdCLFdBQVMsMEJBQTBCLFFBQVEsTUFBTTtBQUMvQyxVQUFNLFNBQVMsSUFBSSxpQkFBUztBQUFBLE1BQzFCLE1BQU0sS0FBSyxLQUFLLElBQUk7QUFDbEIsWUFBSSxDQUFDLFFBQVE7QUFDWCxlQUFLO0FBQUEsWUFDSCxJQUFJLE1BQU0sUUFBUSwyQ0FBMkM7QUFBQSxVQUMvRDtBQUNBO0FBQUEsUUFDRjtBQUNBLGVBQU8sVUFBVSxlQUFlLGFBQWEsTUFBTUUsUUFBTyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQ3hFLFdBQUc7QUFBQSxNQUNMO0FBQUEsTUFDQSxRQUFRLEtBQUssSUFBSTtBQUNmLFdBQUcsR0FBRztBQUNOLGFBQUssV0FBVztBQUNoQixZQUFJLENBQUMsS0FBSyxlQUFlLFdBQVc7QUFDbEMsbUJBQVMsTUFBTSxLQUFLLEtBQUssT0FBTyxDQUFDO0FBQUEsUUFDbkM7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQ0QsV0FBTyxLQUFLLFFBQVEsT0FBTztBQUMzQixXQUFPLGNBQWMsT0FBTztBQUM1QixXQUFPLFdBQVc7QUFDbEIsV0FBTyxLQUFLLFNBQVMsTUFBTSxRQUFRLE1BQU0sQ0FBQztBQUMxQyxXQUFPLGlCQUFpQixRQUFRO0FBQUEsTUFDOUIsU0FBUztBQUFBLFFBQ1AsWUFBWTtBQUFBLFFBQ1osY0FBYztBQUFBLFFBQ2QsS0FBSyxNQUNILEtBQUssU0FBUyxRQUFRLEdBQUcsSUFDckIsS0FBSyxjQUFjLFFBQVEsR0FBRyxFQUFFLFVBQ2hDO0FBQUEsTUFDUjtBQUFBLE1BQ0EsTUFBTTtBQUFBLFFBQ0osWUFBWTtBQUFBLFFBQ1osY0FBYztBQUFBLFFBQ2QsS0FBSyxNQUNILEtBQUssU0FBUyxRQUFRLEdBQUcsSUFDckIsS0FBSyxjQUFjLFFBQVEsR0FBRyxFQUFFLE9BQ2hDO0FBQUEsTUFDUjtBQUFBLE1BQ0EsT0FBTztBQUFBLFFBQ0wsWUFBWTtBQUFBLFFBQ1osY0FBYztBQUFBLFFBQ2QsS0FBSyxNQUFNLEtBQUssU0FBUyxRQUFRLEdBQUc7QUFBQSxNQUN0QztBQUFBLE1BQ0EsZUFBZTtBQUFBLFFBQ2IsWUFBWTtBQUFBLFFBQ1osY0FBYztBQUFBLFFBQ2QsT0FBTyxNQUNMLEtBQUssU0FBUyxRQUFRLEdBQUcsSUFDckIsT0FBTyxPQUFPLEtBQUssY0FBYyxRQUFRLEdBQUcsQ0FBQyxJQUM3QztBQUFBLE1BQ1I7QUFBQSxJQUNGLENBQUM7QUFFRCxRQUFJLEtBQUssU0FBUyxRQUFRLEdBQUcsR0FBRztBQUs5QixhQUFPLFdBQVcsU0FBVUMsS0FBR0MsS0FBRyxVQUFVO0FBQzFDLGVBQU8sU0FBUyxNQUFNRCxLQUFHQyxLQUFHLFFBQVE7QUFBQSxNQUN0QztBQUVBLGFBQU8sYUFBYSxTQUFVLElBQUksSUFBSSxVQUFVO0FBQzlDLGVBQU8sV0FBVyxNQUFNLElBQUksSUFBSSxRQUFRO0FBQUEsTUFDMUM7QUFFQSxhQUFPLFlBQVksU0FBVSxLQUFLLFVBQVU7QUFDMUMsZUFBTyxVQUFVLE1BQU0sS0FBSyxRQUFRO0FBQUEsTUFDdEM7QUFFQSxhQUFPLGtCQUFrQixTQUFVLFVBQVU7QUFDM0MsZUFBTyxnQkFBZ0IsTUFBTSxRQUFRO0FBQUEsTUFDdkM7QUFBQSxJQUNGO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFHTyxNQUFNLFNBQVMsTUFBTSxTQUFTO0FBQUEsSUFDbkMsS0FBSztBQUFBLElBQ0w7QUFBQSxFQUNGO0FBR08sTUFBTSxTQUFTLE1BQU0sU0FBUztBQUFBLElBQ25DLEtBQUs7QUFBQSxJQUNMO0FBQUEsRUFDRjtBQUdPLE1BQU0sUUFBUSxNQUFNLFFBQVEsSUFBSSxpQkFBUztBQUFBLElBQzlDLGVBQWU7QUFBQSxJQUNmLFdBQVc7QUFBQSxJQUNYLEtBQUssTUFBTTtBQUNULFlBQU1DLE1BQUlILFFBQU8sTUFBTSxRQUFRLEtBQUssSUFBSTtBQUV4QyxVQUFJLENBQUMsS0FBSyxPQUFPO0FBQ2YsYUFBSztBQUFBLFVBQ0gsSUFBSSxNQUFNLGlEQUFpRDtBQUFBLFFBQzdEO0FBQ0E7QUFBQSxNQUNGO0FBRUEsV0FBSyxNQUFNLEtBQUtHLEdBQUMsRUFBRSxLQUFLLENBQUMsV0FBVztBQUNsQyxhQUFLLEtBQUssV0FBVyxPQUFPLE9BQU9BLElBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUFBLE1BQ3ZELEdBQUcsQ0FBQyxVQUFVO0FBQ1osYUFBSyxRQUFRLEtBQUs7QUFBQSxNQUNwQixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0YsQ0FBQztBQUNELFFBQU0sR0FBRyxTQUFTLE1BQU0sS0FBSyxPQUFPLE1BQU0sQ0FBQztBQUMzQyxRQUFNLEtBQUssS0FBSyxPQUFPLE9BQU87QUFDOUIsU0FBTyxlQUFlLE9BQU8sU0FBUztBQUFBLElBQ3BDLFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxJQUNkLE1BQU07QUFDSixhQUFPLEtBQUssU0FBUyxLQUFLLE1BQU0sR0FBRztBQUFBLElBQ3JDO0FBQUEsRUFDRixDQUFDO0FBQ0QsUUFBTSxhQUFhO0FBQ25CLFFBQU0sYUFBYSxDQUFDLFdBQVc7QUFDN0IsSUFBYSxTQUFTLEtBQUssT0FBTyxLQUFLLE1BQU07QUFDN0MsVUFBTSxhQUFhO0FBQ25CLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxlQUFlLE9BQU8sU0FBUztBQUFBLElBQ3BDLFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxJQUNkLE1BQU07QUFDSixhQUFPLE1BQU07QUFBQSxJQUNmO0FBQUEsRUFDRixDQUFDOzs7QUNySkQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBQUFDO0FBQUEsSUFBQTtBQUFBO0FBQUE7QUFBQTtBQTJCTyxXQUFTLG9CQUVkLFNBQ0EsVUFDQSxPQUNBO0FBQUEsRUFFRjtBQUVPLE1BQUtBLGFBQUwsa0JBQUtBLGVBQUw7QUFDTCxJQUFBQSxzQkFBQTtBQUNBLElBQUFBLHNCQUFBO0FBQ0EsSUFBQUEsc0JBQUE7QUFDQSxJQUFBQSxzQkFBQTtBQUNBLElBQUFBLHNCQUFBO0FBQ0EsSUFBQUEsc0JBQUE7QUFDQSxJQUFBQSxzQkFBQTtBQUNBLElBQUFBLHNCQUFBO0FBQ0EsSUFBQUEsc0JBQUE7QUFDQSxJQUFBQSxzQkFBQTtBQUNBLElBQUFBLHNCQUFBO0FBQ0EsSUFBQUEsc0JBQUE7QUFDQSxJQUFBQSxzQkFBQTtBQWJVLFdBQUFBO0FBQUEsbUJBQUE7QUFnQlosTUFBTSxrQkFBa0IsSUFBSSxZQUFZLE9BQU8sS0FBS0EsVUFBUyxFQUFFLE1BQU07QUFLOUQsV0FBUyxhQUFhO0FBQzNCLFdBQU8sRUFBRSxjQUFjO0FBQUEsRUFDekI7QUFFTyxNQUFLLFlBQUwsa0JBQUtDLGVBQUw7QUFDTCxJQUFBQSxzQkFBQTtBQUNBLElBQUFBLHNCQUFBO0FBQ0EsSUFBQUEsc0JBQUE7QUFDQSxJQUFBQSxzQkFBQTtBQUNBLElBQUFBLHNCQUFBO0FBTFUsV0FBQUE7QUFBQSxLQUFBO0FBUVosTUFBTSxnQkFBZ0IsSUFBSSxhQUFhLE9BQU8sS0FBSyxTQUFTLEVBQUUsTUFBTTtBQUlwRSxnQkFBYywyQkFBNkI7QUFNM0MsZ0JBQWMsa0NBQW9DO0FBSTNDLE1BQUssZUFBTCxrQkFBS0Msa0JBQUw7QUFDTCxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQUNBLElBQUFBLDRCQUFBO0FBQ0EsSUFBQUEsNEJBQUE7QUFDQSxJQUFBQSw0QkFBQTtBQTNDVSxXQUFBQTtBQUFBLEtBQUE7QUE4Q1osTUFBTSxrQkFBa0I7QUFFakIsTUFBTSxZQUFOLE1BQWdCO0FBQUEsSUFJckIsWUFBWSxVQUF3QjtBQUhwQyxzQkFBeUI7QUFDekIscUJBQVU7QUFHUixXQUFLLFdBQVc7QUFDaEIsV0FBSyxXQUFXO0FBQUEsSUFDbEI7QUFBQSxJQUVBLGFBQXFCO0FBQ25CLFdBQUssVUFBVSxLQUFLLFlBQVksa0JBQzVCLFdBQVcsSUFDWCxLQUFLO0FBRVQsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUFBLElBRUEsa0JBQWtCO0FBQ2hCLGFBQU8sS0FBSztBQUFBLElBQ2Q7QUFBQSxFQUNGOzs7QUN2SkE7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQzJCQSxNQUFNLFFBQVE7QUFDZCxNQUFNLFFBQVEsSUFBSSxlQUFlO0FBQ2pDLE1BQU0sVUFBVSxJQUFJLE9BQU8sSUFBSSxRQUFRO0FBR3ZDLE1BQU0sUUFBUTtBQUNkLE1BQU0sVUFBVSxJQUFJO0FBQUEsSUFDbEIsUUFDUSxnQkFBZ0IsZUFDaEIsZ0JBQWdCLFVBQVUsZUFDMUIsaUJBQWlCLFdBQVcscUJBQzVCLGtCQUFrQixlQUFlLFdBQVcscUJBQzVDLGtCQUFrQixlQUFlLFdBQVcscUJBQzVDLGtCQUFrQixlQUFlLFdBQVcscUJBQzVDLGtCQUFrQixlQUFlLFdBQVcsMkJBQ3RDLGVBQWUsYUFBYTtBQUFBLEVBRTVDO0FBRU8sV0FBUyxPQUFPLElBQVk7QUFDakMsV0FBTyxPQUFPLFVBQVUsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUFBLEVBQy9DO0FBRU8sV0FBUyxPQUFPLElBQVk7QUFDakMsV0FBTyxPQUFPLFVBQVUsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUFBLEVBQy9DO0FBRU8sV0FBUyxLQUFLLElBQVk7QUFDL0IsUUFBSSxPQUFPLEVBQUUsR0FBRztBQUNkLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxPQUFPLEVBQUUsR0FBRztBQUNkLGFBQU87QUFBQSxJQUNUO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUErQk8sTUFBTSx1QkFBdUIsT0FBTyxnQkFBZ0I7OztBQzVFcEQsTUFBTSxvQkFBb0IsS0FBSztBQUMvQixNQUFNLHNCQUFzQixLQUFLO0FBQ2pDLE1BQU0sa0JBQWtCLEtBQUs7QUFDN0IsTUFBTSxzQkFBc0IsS0FBSztBQUNqQyxNQUFNLGNBQWMsS0FBSztBQUN6QixNQUFNLFNBQVMsS0FBSztBQUNwQixNQUFNLGdCQUFnQixLQUFLO0FBQzNCLE1BQU0saUJBQWlCLEtBQUs7QUFDNUIsTUFBTSxtQkFBbUIsS0FBSztBQUk5QixXQUFTLGNBQWMsTUFBYztBQUUxQyxVQUFNLFlBQVk7QUFBQSxNQUNoQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFFQSxRQUFJLFFBQVEsS0FBSyxPQUFPLFVBQVUsUUFBUTtBQUN4QyxhQUFPLFVBQVU7QUFBQSxJQUNuQixPQUFPO0FBQ0wsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGOzs7QUYxQk8sTUFBTSxxQkFBTixjQUFpQyxVQUFVO0FBQUEsSUFhaEQsY0FBYztBQUNaLHVDQUFxQztBQUFBLElBQ3ZDO0FBQUEsRUFDRjtBQUVPLFdBQVMsWUFDZCxLQUNBLFVBQ0EsUUFDQSxRQUNBLFVBQ1E7QUFDUixRQUFJLFlBQXNCLENBQUM7QUFLM0IsVUFBTSxjQUFnQyxDQUFDO0FBRXZDLFFBQUksV0FBVyxLQUFLLFdBQVcsR0FBRztBQUNoQyxrQkFBWSxLQUFLLEdBQUc7QUFBQSxJQUN0QjtBQUNBLFFBQUksV0FBVyxLQUFLLFdBQVcsR0FBRztBQUNoQyxrQkFBWSxLQUFLLE1BQU07QUFBQSxJQUN6QjtBQUVBLEtBQUMsWUFBWTtBQUNYLFlBQU0sUUFBUTtBQUFBLFFBQ1osWUFBWTtBQUFBLFVBQUksQ0FBQyxlQUNmLEtBQUssV0FBVyxVQUFVLFVBQVUsRUFBRSxLQUFLLENBQUMsWUFBWTtBQUN0RCxvQkFBUSxRQUFRLENBQUMsV0FBVyxVQUFVLEtBQUssTUFBTSxDQUFDO0FBQUEsVUFDcEQsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBRUEsWUFBTSxRQUFRLFVBQVUsU0FBUyxJQUFJLFFBQVEsSUFBSSxZQUFZO0FBSTdELFVBQUksQ0FBQyxVQUFVO0FBQ2Isa0JBQVUsS0FBSyxDQUFDQyxJQUFXQyxRQUFzQjtBQUMvQyxjQUFJLE9BQU9ELEVBQUMsR0FBRztBQUNiLG1CQUFPO0FBQUEsVUFDVCxXQUFXLE9BQU9DLEdBQUMsR0FBRztBQUNwQixtQkFBTztBQUFBLFVBQ1Q7QUFFQSxpQkFBTztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0g7QUFLQSxVQUFJQyxjQUFhLGFBQWEsYUFBYTtBQUN6QyxvQkFBWSxVQUFVLE9BQU8sQ0FBQyxZQUFZLE9BQU8sT0FBTyxDQUFDO0FBQUEsTUFDM0Q7QUFFQSxVQUFJLFdBQVcsT0FBTyxTQUFTO0FBQUEsSUFDakMsR0FBRztBQUVILFdBQU87QUFBQSxFQUNUO0FBRU8sTUFBTSxlQUFOLGNBQTJCLFVBQVU7QUFBQSxJQW9CMUMsY0FBYztBQUNaLDhCQUE0QjtBQUFBLElBQzlCO0FBQUEsRUFDRjtBQWtCQSxXQUFTLGVBQWUsTUFBc0I7QUFDNUMsV0FBTyxLQUFLLFFBQVEsT0FBTyxFQUFFO0FBQUEsRUFDL0I7QUFFQSxXQUFTLGFBQWEsU0FBeUI7QUFDN0MsVUFBTSxZQUFZLFFBQVEsUUFBUSxpQkFBaUIsR0FBRztBQUN0RCxVQUFNLGVBQWUsVUFDbEIsTUFBTSxHQUFHLEVBQ1QsSUFBSSxDQUFDLFVBQVU7QUFDZCxVQUFJLE1BQU0sTUFBTSxzQkFBc0IsR0FBRztBQUV2QyxlQUFPLE9BQU8sTUFBTSxXQUFXLEtBQUssRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQUEsTUFDdEQ7QUFFQSxhQUFPLE1BQU0sUUFBUSxTQUFTLEVBQUU7QUFBQSxJQUNsQyxDQUFDLEVBQ0EsS0FBSyxHQUFHO0FBRVgsV0FBTztBQUFBLEVBQ1Q7QUFFTyxNQUFNLGNBQU4sY0FBMEIsVUFBc0M7QUFBQSxJQUNyRSxXQUErQixDQUFDO0FBQUEsSUFDaEM7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFZLFNBQWlCLE9BQWU7QUFDMUMsOEJBQTZCO0FBRTdCLFdBQUssV0FBVztBQUNoQixXQUFLLFNBQVM7QUFBQSxJQUNoQjtBQUFBLElBRUEsTUFBTSxPQUFPLE9BQWUsWUFBNkI7QUFHdkQsVUFBSTtBQUNKLFVBQUk7QUFFSixVQUFJLEtBQUssU0FBUyxRQUFRO0FBQ3hCLG1CQUFXLENBQUMsUUFBUSxJQUFJLEtBQUssS0FBSyxVQUFVO0FBQzFDLGdCQUFNLGlCQUFpQjtBQUFBLFlBQ3JCLFlBQVk7QUFBQSxjQUNWO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBRUEsV0FBQyxFQUFFLE1BQU0sSUFBSSxJQUFJLE1BQU0sS0FBSztBQUFBLFlBQzFCO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNGO0FBRUEsY0FBSSxTQUFTLEtBQUssU0FBUyxRQUFRLElBQUksWUFBWSxHQUFJO0FBQ3JEO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGLE9BQU87QUFDTCxTQUFDLEVBQUUsTUFBTSxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsT0FBTyxVQUFVO0FBQUEsTUFDeEQ7QUFFQSxhQUFPLEVBQUUsTUFBYSxJQUFVO0FBQUEsSUFDbEM7QUFBQSxJQUVBLE1BQU0sU0FDSixPQUNBLFlBQ0EsZ0JBSUM7QUFDRCxVQUFJLE1BQW1ELENBQUM7QUFDeEQsVUFBSSxPQUFPO0FBRVgsVUFBSTtBQUNGLGNBQU0sTUFBTSxLQUFLLFdBQVcsT0FBTyxZQUFZLGNBQWM7QUFBQSxNQUMvRCxTQUFTQyxJQUFQO0FBQ0EsWUFBSUEsY0FBYSxLQUFLLE9BQU8sVUFBVTtBQUNyQyxpQkFBTyxRQUFRLElBQUksWUFBWTtBQUFBLFFBQ2pDLE9BQU87QUFFTCxpQkFBTyxRQUFRLElBQUksU0FBUztBQUFBLFFBQzlCO0FBQUEsTUFDRjtBQUVBLGFBQU8sRUFBRSxNQUFNLElBQUk7QUFBQSxJQUNyQjtBQUFBLElBRUEsU0FBUyxLQUFtQixNQUFzQjtBQU1oRCxPQUFDLFlBQVk7QUFDWCxjQUFNLFVBQStELENBQUM7QUFFdEUsY0FBTSxRQUFRLFdBQVc7QUFBQSxVQUN2QixLQUFLLE9BQU8sTUFBTSxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxNQUFNO0FBQ3ZDLGdCQUFJLFFBQVEsQ0FBQyxXQUFXLFFBQVEsS0FBSyxFQUFFLE1BQU0sS0FBSyxTQUFTLE9BQU8sQ0FBQyxDQUFDO0FBQUEsVUFDdEUsQ0FBQztBQUFBLFVBQ0QsS0FBSyxPQUFPLE1BQU0sTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksTUFBTTtBQUMxQyxZQUFDLElBQWlCO0FBQUEsY0FBUSxDQUFDLFdBQ3pCLFFBQVEsS0FBSyxFQUFFLE1BQU0sUUFBUSxTQUFTLGFBQWEsTUFBTSxFQUFFLENBQUM7QUFBQSxZQUM5RDtBQUFBLFVBQ0YsQ0FBQztBQUFBLFVBQ0QsS0FBSyxPQUFPLE1BQU0sS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksTUFBTTtBQUN6QyxZQUFDLElBQXlCO0FBQUEsY0FBUSxDQUFDLEVBQUUsVUFBVSxLQUFLLE1BQU0sTUFDeEQsUUFBUSxLQUFLO0FBQUEsZ0JBQ1gsTUFBTTtBQUFBLGdCQUNOLENBQUMsTUFBTTtBQUFBLGdCQUNQLFVBQVUsQ0FBQyxZQUFZO0FBQUEsY0FDekIsQ0FBQztBQUFBLFlBQ0g7QUFBQSxVQUNGLENBQUM7QUFBQSxVQUNELEtBQUssT0FBTyxNQUFNLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLE1BQU07QUFDM0MsZ0JBQUk7QUFBQSxjQUFRLENBQUMsV0FDWCxRQUFRLEtBQUssRUFBRSxNQUFNLFNBQVMsT0FBTyxPQUFPLENBQUM7QUFBQSxZQUMvQztBQUFBLFVBQ0YsQ0FBQztBQUFBLFVBQ0QsS0FBSyxPQUFPLE1BQU0sSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksTUFBTTtBQUN4QyxZQUFDLElBQXdCO0FBQUEsY0FBUSxDQUFDLEVBQUUsWUFBWSxTQUFTLE1BQ3ZELFFBQVEsS0FBSztBQUFBLGdCQUNYLE1BQU07QUFBQSxnQkFDTixVQUFVO0FBQUEsZ0JBQ1YsVUFBVSxlQUFlLFFBQVE7QUFBQSxjQUNuQyxDQUFDO0FBQUEsWUFDSDtBQUFBLFVBQ0YsQ0FBQztBQUFBLFVBQ0QsS0FBSyxPQUFPLE1BQU0sT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksTUFBTTtBQUMzQyxZQUFDLElBQTJCO0FBQUEsY0FDMUIsQ0FBQyxFQUFFLE9BQU8sWUFBWSxPQUFPLFVBQVUsUUFBQUMsU0FBUSxZQUFZLE1BQ3pELFFBQVEsS0FBSztBQUFBLGdCQUNYLE1BQU07QUFBQSxnQkFDTjtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQSxTQUFTO0FBQUEsZ0JBQ1QsUUFBQUE7QUFBQSxnQkFDQTtBQUFBLGNBQ0YsQ0FBQztBQUFBLFlBQ0w7QUFBQSxVQUNGLENBQUM7QUFBQSxVQUNELEtBQUssT0FBTyxNQUFNLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLE1BQU07QUFDeEMsWUFBQyxJQUFpQjtBQUFBLGNBQVEsQ0FBQyxXQUN6QixRQUFRLEtBQUssRUFBRSxNQUFNLE1BQU0sT0FBTyxlQUFlLE1BQU0sRUFBRSxDQUFDO0FBQUEsWUFDNUQ7QUFBQSxVQUNGLENBQUM7QUFBQSxVQUNELEtBQUssT0FBTyxNQUFNLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLE1BQU07QUFDekMsWUFBQyxJQUFpQjtBQUFBLGNBQVEsQ0FBQyxXQUN6QixRQUFRLEtBQUssRUFBRSxNQUFNLE9BQU8sT0FBTyxlQUFlLE1BQU0sRUFBRSxDQUFDO0FBQUEsWUFDN0Q7QUFBQSxVQUNGLENBQUM7QUFBQSxVQUNELEtBQUssT0FBTyxNQUFNLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLE1BQU07QUFDekMsWUFBQyxJQUF5QjtBQUFBLGNBQ3hCLENBQUMsRUFBRSxPQUFPLE9BQU8sUUFBUSxTQUFTLE9BQU8sUUFBUSxRQUFRLE1BQ3ZELFFBQVEsS0FBSztBQUFBLGdCQUNYLE1BQU07QUFBQSxnQkFDTixRQUFRLGVBQWUsS0FBSztBQUFBLGdCQUM1QixZQUFZLGVBQWUsS0FBSztBQUFBLGdCQUNoQztBQUFBLGdCQUNBO0FBQUEsZ0JBQ0E7QUFBQSxnQkFDQTtBQUFBLGdCQUNBLFFBQVE7QUFBQSxjQUNWLENBQUM7QUFBQSxZQUNMO0FBQUEsVUFDRixDQUFDO0FBQUEsVUFDRCxLQUFLLE9BQU8sTUFBTSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxNQUFNO0FBQ3pDLFlBQUMsSUFBeUI7QUFBQSxjQUN4QixDQUFDLEVBQUUsVUFBVSxRQUFRLE1BQU0sT0FBTyxNQUNoQyxRQUFRLEtBQUs7QUFBQSxnQkFDWCxNQUFNO0FBQUEsZ0JBQ047QUFBQSxnQkFDQTtBQUFBLGdCQUNBO0FBQUEsZ0JBQ0EsTUFBTTtBQUFBLGNBQ1IsQ0FBQztBQUFBLFlBQ0w7QUFBQSxVQUNGLENBQUM7QUFBQSxVQUNELEtBQUssT0FBTyxNQUFNLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLE1BQU07QUFDekMsZ0JBQUk7QUFBQSxjQUFRLENBQUMsV0FDWCxRQUFRLEtBQUssRUFBRSxNQUFNLE9BQU8sU0FBUyxPQUFPLENBQUM7QUFBQSxZQUMvQztBQUFBLFVBQ0YsQ0FBQztBQUFBLFFBQ0gsQ0FBQztBQUVELGNBQU0sTUFBTSxRQUFRLFNBQVMsSUFBSSxRQUFRLElBQUksWUFBWTtBQUV6RCxZQUFJLFdBQVcsS0FBSyxPQUFPO0FBQUEsTUFDN0IsR0FBRztBQUVILGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxPQUFPLEtBQW1CLE1BQXNCO0FBQzlDLFdBQUssT0FBTyxNQUFNLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksTUFBTTtBQUM3QyxZQUFJLFdBQVcsTUFBTSxHQUFHO0FBQUEsTUFDMUIsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxVQUFVLEtBQW1CLE1BQXNCO0FBQ2pELFdBQUssT0FBTyxNQUFNLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksTUFBTTtBQUNoRCxjQUFNLFVBQVcsSUFBaUIsSUFBSSxDQUFDLFdBQVcsYUFBYSxNQUFNLENBQUM7QUFFdEUsWUFBSSxXQUFXLE1BQU0sT0FBTztBQUFBLE1BQzlCLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsU0FBUyxLQUFtQixNQUFzQjtBQUNoRCxXQUFLLE9BQU8sTUFBTSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxJQUFJLE1BQU07QUFDL0MsY0FBTSxVQUFXLElBQXlCO0FBQUEsVUFDeEMsQ0FBQyxFQUFFLFVBQVUsS0FBSyxNQUFNLE9BQU87QUFBQSxZQUM3QixDQUFDLE1BQU07QUFBQSxZQUNQLFVBQVUsQ0FBQyxZQUFZO0FBQUEsVUFDekI7QUFBQSxRQUNGO0FBRUEsWUFBSSxXQUFXLE1BQU0sT0FBTztBQUFBLE1BQzlCLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsV0FBVyxLQUFtQixNQUFzQjtBQUNsRCxXQUFLLE9BQU8sTUFBTSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxJQUFJLE1BQU07QUFDakQsWUFBSSxXQUFXLE1BQU0sR0FBRztBQUFBLE1BQzFCLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsUUFBUSxLQUFtQixNQUFzQjtBQUMvQyxXQUFLLE9BQU8sTUFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxJQUFJLE1BQU07QUFDOUMsY0FBTSxVQUFXLElBQXdCO0FBQUEsVUFDdkMsQ0FBQyxFQUFFLFlBQVksU0FBUyxPQUFPO0FBQUEsWUFDN0IsVUFBVTtBQUFBLFlBQ1YsVUFBVSxlQUFlLFFBQVE7QUFBQSxVQUNuQztBQUFBLFFBQ0Y7QUFFQSxZQUFJLFdBQVcsTUFBTSxPQUFPO0FBQUEsTUFDOUIsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxXQUFXLEtBQW1CLE1BQXNCO0FBQ2xELFdBQUssT0FBTyxNQUFNLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksTUFBTTtBQUNqRCxjQUFNLFVBQVcsSUFBMkI7QUFBQSxVQUMxQyxDQUFDLEVBQUUsT0FBTyxZQUFZLE9BQU8sVUFBVSxRQUFBQSxTQUFRLFlBQVksT0FBTztBQUFBLFlBQ2hFO0FBQUEsWUFDQSxTQUFTO0FBQUEsWUFDVCxRQUFBQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBRUEsWUFBSSxXQUFXLE1BQU0sT0FBTztBQUFBLE1BQzlCLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsUUFBUSxLQUFtQixNQUFzQjtBQUMvQyxXQUFLLE9BQU8sTUFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxJQUFJLE1BQU07QUFDOUMsY0FBTSxVQUFXLElBQWlCLElBQUksQ0FBQyxXQUFXLGVBQWUsTUFBTSxDQUFDO0FBRXhFLFlBQUksV0FBVyxNQUFNLE9BQU87QUFBQSxNQUM5QixDQUFDO0FBRUQsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLFNBQVMsS0FBbUIsTUFBc0I7QUFDaEQsV0FBSyxPQUFPLE1BQU0sS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sSUFBSSxNQUFNO0FBQy9DLGNBQU0sVUFBVyxJQUFpQixJQUFJLENBQUMsV0FBVyxlQUFlLE1BQU0sQ0FBQztBQUV4RSxZQUFJLFdBQVcsTUFBTSxPQUFPO0FBQUEsTUFDOUIsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxTQUFTLEtBQW1CLE1BQXNCO0FBQ2hELFdBQUssT0FBTyxNQUFNLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksTUFBTTtBQUMvQyxZQUFJLFNBQVMsQ0FBQztBQUVkLFlBQUksSUFBSSxRQUFRO0FBQ2QsZ0JBQU0sRUFBRSxPQUFPLE9BQU8sUUFBUSxTQUFTLE9BQU8sUUFBUSxRQUFRLElBQzVELElBQUk7QUFFTixtQkFBUztBQUFBLFlBQ1AsUUFBUSxlQUFlLEtBQUs7QUFBQSxZQUM1QixZQUFZLGVBQWUsS0FBSztBQUFBLFlBQ2hDO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQSxRQUFRO0FBQUEsVUFDVjtBQUFBLFFBQ0Y7QUFFQSxZQUFJLFdBQVcsTUFBTSxNQUFNO0FBQUEsTUFDN0IsQ0FBQztBQUVELGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxTQUFTLEtBQW1CLE1BQXNCO0FBQ2hELFdBQUssT0FBTyxNQUFNLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLElBQUksTUFBTTtBQUMvQyxjQUFNLFVBQVcsSUFBeUI7QUFBQSxVQUN4QyxDQUFDLEVBQUUsVUFBVSxRQUFRLE1BQU0sT0FBTyxPQUFPO0FBQUEsWUFDdkM7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0EsTUFBTTtBQUFBLFVBQ1I7QUFBQSxRQUNGO0FBRUEsWUFBSSxXQUFXLE1BQU0sT0FBTztBQUFBLE1BQzlCLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsU0FBUyxLQUFtQixNQUFzQjtBQUNoRCxXQUFLLE9BQU8sTUFBTSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxJQUFJLE1BQU07QUFDL0MsWUFBSSxXQUFXLE1BQU0sR0FBRztBQUFBLE1BQzFCLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsY0FBYyxNQUFvQixPQUF1QjtBQUV2RCxxQkFBZSwyQ0FBMkM7QUFBQSxJQUM1RDtBQUFBLElBRUEsYUFBaUM7QUFDL0IsYUFBTyxLQUFLO0FBQUEsSUFDZDtBQUFBLElBRUEsV0FBVyxTQUFzRDtBQUMvRCxVQUFJLE9BQU8sWUFBWSxVQUFVO0FBQy9CLGNBQU0sU0FBNkIsQ0FBQztBQUVwQyxpQkFBU0MsS0FBSSxHQUFHQSxLQUFJLFFBQVEsUUFBUUEsTUFBSyxHQUFHO0FBQzFDLGlCQUFPLEtBQUssQ0FBQyxRQUFRQSxLQUFJLFNBQVMsUUFBUUEsS0FBSSxFQUFFLENBQUMsQ0FBQztBQUFBLFFBQ3BEO0FBRUEsYUFBSyxXQUFXO0FBQUEsTUFDbEIsT0FBTztBQUNMLGFBQUssV0FBVyxRQUFRLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQztBQUFBLE1BQ3BFO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLGdCQUFnQixRQUFnQixRQUFpQjtBQUMvQyxxQkFBZSw2Q0FBNkM7QUFBQSxJQUM5RDtBQUFBLElBRUEsU0FBUztBQUNQLHFCQUFlLG9DQUFvQztBQUFBLElBQ3JEO0FBQUEsRUFDRjtBQUVBLE1BQU0scUJBQXFCO0FBQzNCLE1BQU0sc0JBQXNCO0FBRXJCLFdBQVMsU0FBUyxNQUFjO0FBQ3JDLFdBQU8sU0FBUyxxQkFDWixzQkFDQSxjQUFjLElBQUk7QUFBQSxFQUN4Qjs7O0FHNWhCQTs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSwyQkFBQUM7QUFBQTs7O0FDTU8sV0FBUyxnQkFDZEMsSUFDQUMsS0FDUztBQUNULFFBQUlELEdBQUUsZUFBZUMsSUFBRSxZQUFZO0FBQ2pDLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxFQUFFRCxjQUFhLFdBQVc7QUFDNUIsTUFBQUEsS0FBSSxJQUFJLFNBQVMsWUFBWSxPQUFPQSxFQUFDLElBQUlBLEdBQUUsU0FBU0EsRUFBQztBQUFBLElBQ3ZEO0FBQ0EsUUFBSSxFQUFFQyxlQUFhLFdBQVc7QUFDNUIsTUFBQUEsTUFBSSxJQUFJLFNBQVMsWUFBWSxPQUFPQSxHQUFDLElBQUlBLElBQUUsU0FBU0EsR0FBQztBQUFBLElBQ3ZEO0FBQ0EsSUFBQUMsUUFBT0YsY0FBYSxRQUFRO0FBQzVCLElBQUFFLFFBQU9ELGVBQWEsUUFBUTtBQUM1QixVQUFNLFNBQVNELEdBQUU7QUFDakIsUUFBSSxNQUFNO0FBQ1YsUUFBSUcsS0FBSTtBQUNSLFdBQU8sRUFBRUEsS0FBSSxRQUFRO0FBQ25CLGFBQU9ILEdBQUUsU0FBU0csRUFBQyxJQUFJRixJQUFFLFNBQVNFLEVBQUM7QUFBQSxJQUNyQztBQUNBLFdBQU8sUUFBUTtBQUFBLEVBQ2pCOzs7QUN4Qk8sTUFBTUMsbUJBQWtCLENBQzdCQyxJQUNBQyxRQUNZO0FBQ1osUUFBSUQsY0FBYUU7QUFBUSxNQUFBRixLQUFJLElBQUksU0FBU0EsR0FBRSxNQUFNO0FBQ2xELFFBQUlBLGNBQWFFO0FBQVEsTUFBQUQsTUFBSSxJQUFJLFNBQVNELEdBQUUsTUFBTTtBQUNsRCxXQUFPLGdCQUFtQkEsSUFBR0MsR0FBQztBQUFBLEVBQ2hDOzs7QUZKTyxXQUFTLGdCQUF5QjtBQUN2QyxtQkFBZSxzQkFBc0I7QUFBQSxFQUN2QztBQUVPLFdBQVMsY0FBYyxPQUFnQjtBQUM1QyxtQkFBZSxzQkFBc0I7QUFBQSxFQUN2Qzs7O0FHYkE7OztBQ0FBOzs7QUNBQTs7O0FDQUE7OztBQ0FBOzs7QUNBQTs7O0FDQUE7OztBQ0FBOzs7QUNBQTs7O0FDQUE7OztBQ0FBOzs7QUNBQTs7O0FDQUE7OztBQ0FBOzs7QUNBQTs7O0FDQUE7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBQUFFO0FBQUEsSUFBQTtBQUFBOzs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDNkJPLE1BQU0sYUFBTixjQUF5QixVQUFVO0FBQUEsSUFDeEMsWUFBWSxVQUF3QjtBQUNsQyxZQUFNLFFBQVE7QUFBQSxJQUNoQjtBQUFBLElBRUEsTUFBTSxLQUFpQixNQUFNO0FBQUEsSUFBQyxHQUFHO0FBQy9CLFdBQUssU0FBUztBQUNkLFNBQUc7QUFBQSxJQUNMO0FBQUEsSUFFQSxNQUFNO0FBQ0osa0JBQVk7QUFBQSxJQUNkO0FBQUEsSUFFQSxRQUFRO0FBQ04sa0JBQVk7QUFBQSxJQUNkO0FBQUEsSUFHQSxXQUFnQjtBQUFBLElBQUM7QUFBQSxFQUNuQjs7O0FETE8sTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSw0QkFDWDtBQUVLLE1BQU0sa0JBQWtCLElBQUksV0FBVyxDQUFDO0FBRy9DLGtCQUFnQixzQkFBc0I7QUFFL0IsTUFBTSxZQUFOLGNBQThDLFVBQVU7QUFBQSxJQVM3RCxjQUFjO0FBQ1osOEJBQTRCO0FBQUEsSUFDOUI7QUFBQSxFQUNGO0FBRU8sTUFBTSxlQUFOLGNBQWlELFVBQVU7QUFBQSxJQUtoRSxjQUFjO0FBQ1osaUNBQStCO0FBQUEsSUFDakM7QUFBQSxFQUNGO0FBRU8sTUFBTSxtQkFBbUIsT0FBTyxrQkFBa0I7QUFFekQsTUFBTSxpQkFBaUIsS0FBSztBQUVyQixNQUFNLGtCQUFOLGNBQThCLFdBQVc7QUFBQSxJQVk5QyxZQUNFLFVBQ0EsUUFDQTtBQUNBLFlBQU0sUUFBUTtBQVpoQixzQkFBVztBQUNYLHVCQUFZO0FBQ1osNEJBQWlCO0FBQ2pCLHVCQUFZO0FBQ1osMEJBQWU7QUFTYixXQUFLLGdCQUFnQixNQUFNO0FBQUEsSUFDN0I7QUFBQSxJQWRBO0FBQUEsSUFvQkEsWUFBb0I7QUFDbEIsVUFBSSxDQUFDLEtBQUssVUFBVTtBQUNsQixhQUFLLFdBQVc7QUFDaEIsYUFBSyxNQUFNO0FBQUEsTUFDYjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFNQSxXQUFtQjtBQUNqQixXQUFLLFdBQVc7QUFFaEIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQU9BLFNBQVMsS0FBNEM7QUFDbkQsWUFBTSxTQUFTLEtBQUssU0FBUztBQUU3QixVQUFJO0FBQ0YsWUFBSSxXQUFXLE1BQU07QUFBQSxNQUN2QixRQUFFO0FBQUEsTUFFRjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFNQSxjQUFjLFVBQTJCO0FBRXZDLHFCQUFlLHlDQUF5QztBQUFBLElBQzFEO0FBQUEsSUFRQSxZQUFZLEtBQWlDLE1BQTBCO0FBQ3JFLFdBQUssT0FBTyxLQUFLLElBQUk7QUFFckIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQVNBLE9BQ0UsS0FDQSxRQUNBLFlBQ1E7QUFDUixZQUFNLFFBQVEsYUFBYSxPQUFPLFNBQVMsT0FBTyxVQUFVO0FBQzVELFlBQU0sVUFBb0IsSUFBSSxNQUFNLEtBQUs7QUFFekMsVUFBSSxDQUFDLFlBQVk7QUFDZixpQkFBU0MsS0FBSSxHQUFHQSxLQUFJLE9BQU9BLE1BQUs7QUFDOUIsZ0JBQU0sUUFBUSxPQUFPQSxLQUFJO0FBRXpCLGNBQUlDLFFBQU8sU0FBUyxLQUFLLEdBQUc7QUFDMUIsb0JBQVFELE1BQUs7QUFBQSxVQUNmO0FBR0EsZ0JBQU0sV0FBbUIsT0FBT0EsS0FBSSxJQUFJO0FBQ3hDLGtCQUFRQSxNQUFLQyxRQUFPLEtBQUssT0FBaUIsUUFBUTtBQUFBLFFBQ3BEO0FBQUEsTUFDRixPQUFPO0FBQ0wsaUJBQVNELEtBQUksR0FBR0EsS0FBSSxPQUFPQSxNQUFLO0FBQzlCLGtCQUFRQSxNQUFLLE9BQU9BO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBRUEsYUFBTyxLQUFLLFlBQVksS0FBS0MsUUFBTyxPQUFPLE9BQU8sQ0FBQztBQUFBLElBQ3JEO0FBQUEsSUFNQSxpQkFBaUIsS0FBaUMsTUFBc0I7QUFDdEUsWUFBTSxTQUFTLElBQUksWUFBWSxFQUFFLE9BQU8sSUFBSTtBQUU1QyxhQUFPLEtBQUssWUFBWSxLQUFLLE1BQU07QUFBQSxJQUNyQztBQUFBLElBTUEsZ0JBQWdCLEtBQWlDLE1BQXNCO0FBQ3JFLFlBQU0sU0FBUyxJQUFJLFlBQVksRUFBRSxPQUFPLElBQUk7QUFFNUMsYUFBTyxLQUFLLFlBQVksS0FBSyxNQUFNO0FBQUEsSUFDckM7QUFBQSxJQU1BLGdCQUFnQixNQUFrQyxPQUF1QjtBQUN2RSxxQkFBZSwyQ0FBMkM7QUFBQSxJQUM1RDtBQUFBLElBTUEsa0JBQWtCLEtBQWlDLE1BQXNCO0FBQ3ZFLFlBQU0sU0FBU0EsUUFBTyxLQUFLLE1BQU0sUUFBUTtBQUN6QyxhQUFPLEtBQUssWUFBWSxLQUFLLE1BQU07QUFBQSxJQUNyQztBQUFBLElBRVMsV0FBbUI7QUFDMUIsVUFBSSxTQUFTO0FBQ2IsV0FBSyxXQUFXO0FBRWhCLFVBQUk7QUFDRixhQUFLLG1CQUFtQixNQUFNO0FBQUEsTUFDaEMsUUFBRTtBQUNBLGlCQUFTLFFBQVEsSUFBSSxVQUFVO0FBQUEsTUFDakM7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBTUEsZ0JBQWdCLFFBQWtEO0FBQ2hFLFdBQUssb0JBQW9CO0FBQUEsSUFDM0I7QUFBQSxJQUdBLE1BQU0sUUFBUTtBQUNaLFVBQUksTUFBTSxJQUFJLFdBQVcsY0FBYztBQUV2QyxVQUFJO0FBQ0osVUFBSTtBQUNGLGdCQUFRLE1BQU0sS0FBSyxrQkFBbUIsS0FBSyxHQUFHO0FBQUEsTUFDaEQsU0FBU0MsSUFBUDtBQUNBLFlBQ0VBLGNBQWEsS0FBSyxPQUFPLGVBQ3pCQSxjQUFhLEtBQUssT0FBTyxhQUN6QjtBQUNBLGtCQUFRLFFBQVEsSUFBSSxLQUFLO0FBQUEsUUFDM0IsV0FDRUEsY0FBYSxLQUFLLE9BQU8sbUJBQ3pCQSxjQUFhLEtBQUssT0FBTyxtQkFDekI7QUFDQSxrQkFBUSxRQUFRLElBQUksWUFBWTtBQUFBLFFBQ2xDLE9BQU87QUFDTCxrQkFBUSxRQUFRLElBQUksU0FBUztBQUFBLFFBQy9CO0FBRUEsY0FBTSxJQUFJLFdBQVcsQ0FBQztBQUFBLE1BQ3hCO0FBRUEsZ0JBQVUsUUFBUSxJQUFJLEtBQUs7QUFFM0Isc0JBQWdCLHFCQUFxQjtBQUVyQyxVQUFJLFFBQVEsR0FBRztBQUNiLGFBQUssYUFBYTtBQUFBLE1BQ3BCO0FBRUEsWUFBTSxJQUFJLE1BQU0sR0FBRyxLQUFLO0FBRXhCLHNCQUFnQixzQkFBc0I7QUFFdEMsVUFBSTtBQUNGLGFBQUssT0FBUSxLQUFLLEtBQUs7QUFBQSxNQUN6QixRQUFFO0FBQUEsTUFFRjtBQUVBLFVBQUksU0FBUyxLQUFLLEtBQUssVUFBVTtBQUMvQixhQUFLLE1BQU07QUFBQSxNQUNiO0FBQUEsSUFDRjtBQUFBLElBT0EsTUFBTSxPQUFPLEtBQWlDLE1BQWtCO0FBQzlELFlBQU0sRUFBRSxZQUFBQyxZQUFXLElBQUk7QUFFdkIsVUFBSTtBQUNGLGNBQU0sU0FBUyxLQUFLLG1CQUFvQixJQUFJO0FBQUEsTUFDOUMsU0FBU0QsSUFBUDtBQUNBLFlBQUk7QUFHSixZQUNFQSxjQUFhLEtBQUssT0FBTyxlQUN6QkEsY0FBYSxLQUFLLE9BQU8sWUFDekI7QUFDQSxtQkFBUyxRQUFRLElBQUksT0FBTztBQUFBLFFBQzlCLE9BQU87QUFDTCxtQkFBUyxRQUFRLElBQUksU0FBUztBQUFBLFFBQ2hDO0FBRUEsWUFBSTtBQUNGLGNBQUksV0FBVyxNQUFNO0FBQUEsUUFDdkIsUUFBRTtBQUFBLFFBRUY7QUFFQTtBQUFBLE1BQ0Y7QUFFQSxzQkFBZ0IsaUJBQWlCQztBQUNqQyxXQUFLLGdCQUFnQkE7QUFFckIsVUFBSTtBQUNGLFlBQUksV0FBVyxDQUFDO0FBQUEsTUFDbEIsUUFBRTtBQUFBLE1BRUY7QUFFQTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBOVZBLEVBcUZHOzs7QUV4REksTUFBTSxpQkFBTixjQUE2QixnQkFBZ0I7QUFBQSxJQVVsRCxZQUNFLFVBQ0EsUUFDQTtBQUNBLFlBQU0sVUFBVSxNQUFNO0FBWnhCLDBCQUNFO0FBQUEsSUFZRjtBQUFBLElBTUEsYUFXRSxLQUNBLFFBQ0E7QUFDQSxZQUFNLGtCQUFrQixDQUFDO0FBQ3pCLFlBQU0sV0FBVztBQUNqQixZQUFNLFdBQVc7QUFFakIsVUFBSTtBQUNGLFlBQUksV0FBVyxRQUFRLE1BQU0sS0FBSyxVQUFVLFFBQVE7QUFBQSxNQUN0RCxRQUFFO0FBQUEsTUFFRjtBQUVBO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7OztBQ3ZFTyxXQUFTLFdBQVdDLElBQVc7QUFDcEMsVUFBTSxjQUFjLEtBQU0sS0FBSyxLQUFLLE1BQU1BLEVBQUM7QUFFM0MsV0FBTyxjQUFjQSxLQUFJLGNBQWMsSUFBSTtBQUFBLEVBQzdDO0FBR08sTUFBTSwrQkFBK0I7QUFHckMsTUFBTSwyQkFBMkI7OztBSjRCakMsTUFBSyxhQUFMLGtCQUFLQyxnQkFBTDtBQUNMLElBQUFBLHdCQUFBO0FBQ0EsSUFBQUEsd0JBQUE7QUFDQSxJQUFBQSx3QkFBQTtBQUhVLFdBQUFBO0FBQUEsS0FBQTtBQU1MLE1BQU0sT0FBTixjQUFtQixlQUFlO0FBQUEsSUFnQnZDLFlBQVksTUFBYyxNQUFzQjtBQUM5QyxVQUFJO0FBQ0osVUFBSTtBQUVKLGNBQVE7QUFBQSxhQUNELGdCQUFtQjtBQUN0QjtBQUNBLGdCQUFNO0FBRU47QUFBQSxRQUNGO0FBQUEsYUFDSyxnQkFBbUI7QUFDdEI7QUFDQSxnQkFBTTtBQUVOO0FBQUEsUUFDRjtBQUFBLGFBQ0ssYUFBZ0I7QUFDbkI7QUFDQSxnQkFBTTtBQUVOO0FBQUEsUUFDRjtBQUFBLGlCQUNTO0FBQ1Asc0JBQVk7QUFBQSxRQUNkO0FBQUE7QUFHRixZQUFNLFVBQVUsSUFBSTtBQTNDdEIsV0FBUyxVQUFVO0FBSW5CLCtCQUFvQjtBQU1wQiwwQkFBZTtBQUVmLHFCQUFVO0FBaUNSLFdBQUssTUFBTTtBQUVYLFVBQUksUUFBUSxnQ0FBb0M7QUFDOUMsY0FBTSxZQUFZLEtBQUs7QUFDdkIsYUFBSyxXQUFXLFVBQVU7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFBQSxJQS9DQTtBQUFBLElBRUE7QUFBQSxJQUVBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBO0FBQUEsSUFDQTtBQUFBLElBd0NBLEtBQUssS0FBcUI7QUFFeEIscUJBQWUscUJBQXFCO0FBQUEsSUFDdEM7QUFBQSxJQU9BLEtBQUssTUFBYztBQUtqQixXQUFLLFdBQVc7QUFFaEIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQVFBLFFBQVEsS0FBc0IsU0FBaUI7QUFDN0MsVUFBSUMsWUFBVztBQUViLHVCQUFlLGtDQUFrQztBQUFBLE1BQ25EO0FBRUEsWUFBTSxpQkFBa0Q7QUFBQSxRQUN0RCxNQUFNO0FBQUEsUUFDTixXQUFXO0FBQUEsTUFDYjtBQUVBLE1BQWEsUUFBUSxjQUFjLEVBQUU7QUFBQSxRQUNuQyxDQUFDLFNBQXdCO0FBQ3ZCLGdCQUFNLFlBQVksS0FBSztBQUV2QixlQUFLLFdBQVcsSUFBSSxVQUFVLFVBQVU7QUFDeEMsZUFBSyxvQkFBb0I7QUFFekIsY0FBSTtBQUNGLGlCQUFLLGFBQWEsS0FBSyxDQUFDO0FBQUEsVUFDMUIsUUFBRTtBQUFBLFVBRUY7QUFBQSxRQUNGO0FBQUEsUUFDQSxDQUFDQyxPQUFNO0FBRUwsY0FBSTtBQUVKLGNBQUlBLGNBQWEsS0FBSyxPQUFPLFVBQVU7QUFDckMsbUJBQU8sUUFBUSxJQUFJLFFBQVE7QUFBQSxVQUM3QixXQUFXQSxjQUFhLEtBQUssT0FBTyxrQkFBa0I7QUFDcEQsbUJBQU8sUUFBUSxJQUFJLFFBQVE7QUFBQSxVQUM3QixPQUFPO0FBQ0wsbUJBQU8sUUFBUSxJQUFJLGNBQWM7QUFBQSxVQUNuQztBQUVBLGNBQUk7QUFDRixpQkFBSyxhQUFhLEtBQUssSUFBSTtBQUFBLFVBQzdCLFFBQUU7QUFBQSxVQUVGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUFBLElBT0EsT0FBTyxTQUF5QjtBQUM5QixVQUFJRCxZQUFXO0FBRWIsdUJBQWUsaUNBQWlDO0FBQUEsTUFDbEQ7QUFFQSxXQUFLLFdBQVdBLGFBQ1osS0FBSyxvQkFDTCxXQUFXLFVBQVUsQ0FBQztBQUUxQixZQUFNLGdCQUFnQjtBQUFBLFFBQ3BCLE1BQU0sS0FBSztBQUFBLFFBQ1gsV0FBVztBQUFBLE1BQ2I7QUFFQSxVQUFJO0FBRUosVUFBSTtBQUNGLG1CQUF3QixPQUFPLGFBQWE7QUFBQSxNQUM5QyxTQUFTQyxJQUFQO0FBQ0EsWUFBSUEsY0FBYSxLQUFLLE9BQU8sV0FBVztBQUN0QyxpQkFBTyxRQUFRLElBQUksWUFBWTtBQUFBLFFBQ2pDLFdBQVdBLGNBQWEsS0FBSyxPQUFPLGtCQUFrQjtBQUNwRCxpQkFBTyxRQUFRLElBQUksZUFBZTtBQUFBLFFBQ3BDO0FBR0EsZUFBTyxRQUFRLElBQUksU0FBUztBQUFBLE1BQzlCO0FBRUEsWUFBTSxVQUFVLFNBQVM7QUFDekIsV0FBSyxXQUFXLFFBQVE7QUFFeEIsV0FBSyxZQUFZO0FBQ2pCLFdBQUssUUFBUTtBQUViLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFUyxNQUFNO0FBQ2IsVUFBSSxLQUFLLFdBQVc7QUFDbEIsUUFBYSxZQUFZLEtBQUssU0FBUztBQUFBLE1BQ3pDO0FBQUEsSUFDRjtBQUFBLElBRVMsUUFBUTtBQUNmLFVBQUksS0FBSyxXQUFXO0FBQ2xCLFFBQWEsY0FBYyxLQUFLLFNBQVM7QUFBQSxNQUMzQztBQUFBLElBQ0Y7QUFBQSxJQU9BLG9CQUFvQixXQUFtQjtBQUNyQyxXQUFLLG9CQUFvQjtBQUFBLElBQzNCO0FBQUEsSUFVQSxPQUFPLE1BQWM7QUFDbkIsVUFDRSxRQUFRQyxXQUFVLGVBQ2xCLFFBQVFBLFdBQVUsZUFDbEIsU0FBU0EsV0FBVSxjQUFjQSxXQUFVLGNBQzNDO0FBQ0EsZUFBTyxRQUFRLElBQUksUUFBUTtBQUFBLE1BQzdCO0FBRUEsVUFBSSxlQUFlO0FBRW5CLFVBQUksT0FBT0EsV0FBVSxhQUFhO0FBQ2hDLHdCQUFnQixHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUc7QUFBQSxNQUMvQztBQUNBLFVBQUksT0FBT0EsV0FBVSxhQUFhO0FBQ2hDLHdCQUFnQixHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUc7QUFBQSxNQUMvQztBQUlBLFVBQUk7QUFDRixhQUFLLFVBQVUsS0FBSyxVQUFXLFlBQVk7QUFBQSxNQUM3QyxRQUFFO0FBRUEsZUFBTyxRQUFRLElBQUksU0FBUztBQUFBLE1BQzlCO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUdBLE1BQU0saUJBQWlCO0FBSXJCLFVBQUksQ0FBQyxLQUFLLHFCQUFxQjtBQUM3QixhQUFLLHNCQUFzQjtBQUFBLE1BQzdCLE9BQU87QUFDTCxhQUFLLHVCQUF1QjtBQUFBLE1BQzlCO0FBRUEsVUFBSSxLQUFLLHVCQUF1QiwwQkFBMEI7QUFDeEQsYUFBSyxzQkFBc0I7QUFBQSxNQUM3QjtBQUVBLFlBQU0sTUFBTSxLQUFLLG1CQUFtQjtBQUVwQyxXQUFLLFFBQVE7QUFBQSxJQUNmO0FBQUEsSUFHQSxNQUFNLFVBQXlCO0FBQzdCLFVBQUksS0FBSyxTQUFTO0FBQ2hCO0FBQUEsTUFDRjtBQUVBLFVBQUksS0FBSyxlQUFlLEtBQUssVUFBVztBQUN0QyxhQUFLLGVBQWU7QUFFcEI7QUFBQSxNQUNGO0FBRUEsVUFBSTtBQUVKLFVBQUk7QUFDRixxQkFBYSxNQUFNLEtBQUssVUFBVSxPQUFPO0FBQUEsTUFDM0MsU0FBU0QsSUFBUDtBQUNBLFlBQUlBLGNBQWEsS0FBSyxPQUFPLGVBQWUsS0FBSyxTQUFTO0FBRXhEO0FBQUEsUUFDRjtBQUVBLFlBQUk7QUFFRixlQUFLLGFBQWMsUUFBUSxJQUFJLFNBQVMsR0FBSSxNQUFTO0FBQUEsUUFDdkQsUUFBRTtBQUFBLFFBRUY7QUFFQSxhQUFLLGVBQWU7QUFFcEI7QUFBQSxNQUNGO0FBR0EsV0FBSyxzQkFBc0I7QUFFM0IsWUFBTSxtQkFBbUIsSUFBSSxLQUFLLGdCQUFtQixVQUFVO0FBQy9ELFdBQUs7QUFFTCxVQUFJO0FBQ0YsYUFBSyxhQUFjLEdBQUcsZ0JBQWdCO0FBQUEsTUFDeEMsUUFBRTtBQUFBLE1BRUY7QUFFQSxhQUFPLEtBQUssUUFBUTtBQUFBLElBQ3RCO0FBQUEsSUFHUyxXQUFtQjtBQUMxQixXQUFLLFVBQVU7QUFDZixXQUFLLFVBQVU7QUFFZixXQUFLLFdBQVc7QUFFaEIsV0FBSyxXQUFXO0FBQ2hCLFdBQUssZUFBZTtBQUNwQixXQUFLLHNCQUFzQjtBQUUzQixVQUFJLEtBQUssc0NBQTBDO0FBQ2pELFlBQUk7QUFDRixlQUFLLFVBQVUsTUFBTTtBQUFBLFFBQ3ZCLFFBQUU7QUFBQSxRQUVGO0FBQUEsTUFDRjtBQUVBLGFBQU8sZ0JBQWdCLFVBQVUsU0FBUyxLQUFLLElBQUk7QUFBQSxJQUNyRDtBQUFBLEVBQ0Y7QUFFTyxNQUFNLGtCQUFOLGNBQThCLFVBQVU7QUFBQSxJQVU3QyxjQUFjO0FBQ1osb0NBQWtDO0FBQUEsSUFDcEM7QUFBQSxFQUNGO0FBRU8sTUFBS0MsYUFBTCxrQkFBS0EsZUFBTDtBQUNMLElBQUFBLHNCQUFBLFlBQVMsa0JBQVQ7QUFDQSxJQUFBQSxzQkFBQSxZQUFTLGtCQUFUO0FBQ0EsSUFBQUEsc0JBQUEsU0FBTSxlQUFOO0FBQ0EsSUFBQUEsc0JBQUEsaUJBQWMsS0FBZDtBQUNBLElBQUFBLHNCQUFBLGlCQUFjLEtBQWQ7QUFMVSxXQUFBQTtBQUFBLG1CQUFBOzs7QUtsWVo7OztBQ0FBOzs7QUNBQTs7O0FDQUE7OztBQ0FBOzs7QUNBQTs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlCTyxNQUFNLGdCQUErQixPQUFPLGVBQWU7QUFDM0QsTUFBTSxjQUE2QixPQUFPLGFBQWE7OztBQzFCOUQ7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQUEscUJBQUFDO0FBQUE7QUF1RE8sTUFBTSxpQkFBTixjQUE2QixVQUFVO0FBQUEsSUFhNUMsY0FBYztBQUNaLG1DQUFpQztBQUFBLElBQ25DO0FBQUEsRUFDRjtBQUVPLE1BQUtDLGFBQUwsa0JBQUtBLGVBQUw7QUFDTCxJQUFBQSxzQkFBQSxZQUFTLGtCQUFUO0FBQ0EsSUFBQUEsc0JBQUEsWUFBUyxrQkFBVDtBQUNBLElBQUFBLHNCQUFBO0FBSFUsV0FBQUE7QUFBQSxtQkFBQTtBQXpFWjtBQStFTyxNQUFNLE9BQU4sY0FBa0IsZUFBZTtBQUFBLElBdUJ0QyxZQUFZLE1BQWMsTUFBa0I7QUFDMUMsVUFBSTtBQUVKLGNBQVE7QUFBQSxhQUNELGdCQUFtQjtBQUN0QjtBQUVBO0FBQUEsUUFDRjtBQUFBLGFBQ0ssZ0JBQW1CO0FBQ3RCO0FBRUE7QUFBQSxRQUNGO0FBQUEsaUJBQ1M7QUFDUCxzQkFBWTtBQUFBLFFBQ2Q7QUFBQTtBQUdGLFlBQU0sVUFBVSxJQUFJO0FBekN0QixXQUFDLE1BQXdCO0FBQ3pCLFdBQVMsVUFBVTtBQVduQiwwQkFBZTtBQUVmLHFCQUFVO0FBK0JSLFVBQUksUUFBUSwrQkFBbUM7QUFDN0MsY0FBTSxZQUFZLEtBQUs7QUFDdkIsYUFBSyxXQUFXLFVBQVU7QUFDMUIsYUFBSyxRQUFRLFVBQVU7QUFFdkIsY0FBTSxhQUFhLEtBQUs7QUFDeEIsYUFBSyxpQkFBaUIsV0FBVztBQUNqQyxhQUFLLGNBQWMsV0FBVztBQUM5QixhQUFLLGdCQUFnQixLQUFLLFdBQVcsUUFBUTtBQUFBLE1BQy9DO0FBQUEsSUFDRjtBQUFBLElBcERBO0FBQUEsSUFDQTtBQUFBLElBRUE7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBRUE7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBRUE7QUFBQSxJQUNBO0FBQUEsSUErQ0EsS0FBSyxLQUFxQjtBQUV4QixxQkFBZSxvQkFBb0I7QUFBQSxJQUNyQztBQUFBLElBUUEsS0FBSyxTQUFpQixNQUFzQjtBQUMxQyxhQUFPLEtBQUssTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUFBLElBQ3BDO0FBQUEsSUFRQSxNQUFNLFNBQWlCLE1BQWMsT0FBdUI7QUFDMUQsYUFBTyxLQUFLLE1BQU0sU0FBUyxNQUFNLEtBQUs7QUFBQSxJQUN4QztBQUFBLElBU0EsUUFBUSxLQUFxQixTQUFpQixNQUFzQjtBQUNsRSxhQUFPLEtBQUssU0FBUyxLQUFLLFNBQVMsSUFBSTtBQUFBLElBQ3pDO0FBQUEsSUFTQSxTQUFTLEtBQXFCLFNBQWlCLE1BQXNCO0FBQ25FLGFBQU8sS0FBSyxTQUFTLEtBQUssU0FBUyxJQUFJO0FBQUEsSUFDekM7QUFBQSxJQU9BLE9BQU8sU0FBeUI7QUFDOUIsV0FBSyxXQUFXLFdBQVcsVUFBVSxDQUFDO0FBRXRDLFlBQU0sZ0JBQWdCO0FBQUEsUUFDcEIsVUFBVSxLQUFLO0FBQUEsUUFDZixNQUFNLEtBQUs7QUFBQSxRQUNYLFdBQVc7QUFBQSxNQUNiO0FBRUEsVUFBSTtBQUVKLFVBQUk7QUFDRixtQkFBVyxLQUFLLE9BQU8sYUFBYTtBQUFBLE1BQ3RDLFNBQVNDLElBQVA7QUFDQSxZQUFJQSxjQUFhLEtBQUssT0FBTyxXQUFXO0FBQ3RDLGlCQUFPLFFBQVEsSUFBSSxZQUFZO0FBQUEsUUFDakMsV0FBV0EsY0FBYSxLQUFLLE9BQU8sa0JBQWtCO0FBQ3BELGlCQUFPLFFBQVEsSUFBSSxlQUFlO0FBQUEsUUFDcEM7QUFHQSxlQUFPLFFBQVEsSUFBSSxTQUFTO0FBQUEsTUFDOUI7QUFFQSxZQUFNLFVBQVUsU0FBUztBQUN6QixXQUFLLFdBQVcsUUFBUTtBQUN4QixXQUFLLFFBQVEsUUFBUTtBQUVyQixXQUFLLFlBQVk7QUFDakIsV0FBSyxRQUFRO0FBRWIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVTLE1BQU07QUFDYixVQUFJLEtBQUssV0FBVztBQUNsQixRQUFhLFlBQVksS0FBSyxTQUFTO0FBQUEsTUFDekM7QUFBQSxJQUNGO0FBQUEsSUFFUyxRQUFRO0FBQ2YsVUFBSSxLQUFLLFdBQVc7QUFDbEIsUUFBYSxjQUFjLEtBQUssU0FBUztBQUFBLE1BQzNDO0FBQUEsSUFDRjtBQUFBLElBT0EsWUFBWSxVQUF1RDtBQUNqRSxVQUNFLE9BQU8sS0FBSyxhQUFhLGVBQ3pCLE9BQU8sS0FBSyxVQUFVLGFBQ3RCO0FBQ0EsZUFBTyxRQUFRLElBQUksZUFBZTtBQUFBLE1BQ3BDO0FBRUEsZUFBUyxVQUFVLEtBQUs7QUFDeEIsZUFBUyxPQUFPLEtBQUs7QUFDckIsZUFBUyxTQUFTLEtBQUssS0FBSyxRQUFRO0FBRXBDLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFPQSxZQUFZLFVBQXVEO0FBQ2pFLFVBQ0UsT0FBTyxLQUFLLG1CQUFtQixlQUMvQixPQUFPLEtBQUssZ0JBQWdCLGFBQzVCO0FBQ0EsZUFBTyxRQUFRLElBQUksZUFBZTtBQUFBLE1BQ3BDO0FBRUEsZUFBUyxVQUFVLEtBQUs7QUFDeEIsZUFBUyxPQUFPLEtBQUs7QUFDckIsZUFBUyxTQUFTLEtBQUs7QUFFdkIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQU1BLFdBQVcsVUFBMkI7QUFFcEMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQU9BLGFBQWEsU0FBa0IsZUFBK0I7QUFFNUQsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQVlBLHVCQUF1QixTQUFrQjtBQUV2QyxxQkFBZSxzQ0FBc0M7QUFBQSxJQUN2RDtBQUFBLElBU0EsTUFBTSxTQUFpQixNQUFjLFFBQXdCO0FBWTNELFdBQUssV0FBVztBQUNoQixXQUFLLFFBQVE7QUFFYixhQUFPO0FBQUEsSUFDVDtBQUFBLElBU0EsU0FBUyxLQUFxQixTQUFpQixNQUFzQjtBQUNuRSxXQUFLLGlCQUFpQjtBQUN0QixXQUFLLGNBQWM7QUFDbkIsV0FBSyxnQkFBZ0IsS0FBSyxPQUFPO0FBRWpDLFlBQU0saUJBQXNDO0FBQUEsUUFDMUMsVUFBVTtBQUFBLFFBQ1Y7QUFBQSxRQUNBLFdBQVc7QUFBQSxNQUNiO0FBRUEsV0FBSyxRQUFRLGNBQWMsRUFBRTtBQUFBLFFBQzNCLENBQUMsU0FBb0I7QUFHbkIsZ0JBQU0sWUFBWSxLQUFLO0FBQ3ZCLGVBQUssV0FBVyxJQUFJLGVBQWUsVUFBVTtBQUM3QyxlQUFLLFFBQVEsSUFBSSxZQUFZLFVBQVU7QUFDdkMsZUFBSyxvQkFBb0I7QUFFekIsY0FBSTtBQUNGLGlCQUFLLGFBQWEsS0FBSyxDQUFDO0FBQUEsVUFDMUIsUUFBRTtBQUFBLFVBRUY7QUFBQSxRQUNGO0FBQUEsUUFDQSxNQUFNO0FBQ0osY0FBSTtBQUVGLGlCQUFLLGFBQWEsS0FBSyxRQUFRLElBQUksY0FBYyxDQUFFO0FBQUEsVUFDckQsUUFBRTtBQUFBLFVBRUY7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFHQSxNQUFNLGlCQUFpQjtBQUlyQixVQUFJLENBQUMsS0FBSyxxQkFBcUI7QUFDN0IsYUFBSyxzQkFBc0I7QUFBQSxNQUM3QixPQUFPO0FBQ0wsYUFBSyx1QkFBdUI7QUFBQSxNQUM5QjtBQUVBLFVBQUksS0FBSyx1QkFBdUIsMEJBQTBCO0FBQ3hELGFBQUssc0JBQXNCO0FBQUEsTUFDN0I7QUFFQSxZQUFNLE1BQU0sS0FBSyxtQkFBbUI7QUFFcEMsV0FBSyxRQUFRO0FBQUEsSUFDZjtBQUFBLElBR0EsTUFBTSxVQUF5QjtBQUM3QixVQUFJLEtBQUssU0FBUztBQUNoQjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLEtBQUssZUFBZSxLQUFLLFVBQVc7QUFDdEMsYUFBSyxlQUFlO0FBRXBCO0FBQUEsTUFDRjtBQUVBLFVBQUk7QUFFSixVQUFJO0FBQ0YscUJBQWEsTUFBTSxLQUFLLFVBQVUsT0FBTztBQUFBLE1BQzNDLFNBQVNBLElBQVA7QUFDQSxZQUFJQSxjQUFhLEtBQUssT0FBTyxlQUFlLEtBQUssU0FBUztBQUV4RDtBQUFBLFFBQ0Y7QUFFQSxZQUFJO0FBRUYsZUFBSyxhQUFjLFFBQVEsSUFBSSxTQUFTLEdBQUksTUFBUztBQUFBLFFBQ3ZELFFBQUU7QUFBQSxRQUVGO0FBRUEsYUFBSyxlQUFlO0FBRXBCO0FBQUEsTUFDRjtBQUdBLFdBQUssc0JBQXNCO0FBRTNCLFlBQU0sbUJBQW1CLElBQUksS0FBSSxnQkFBbUIsVUFBVTtBQUM5RCxXQUFLO0FBRUwsVUFBSTtBQUNGLGFBQUssYUFBYyxHQUFHLGdCQUFnQjtBQUFBLE1BQ3hDLFFBQUU7QUFBQSxNQUVGO0FBRUEsYUFBTyxLQUFLLFFBQVE7QUFBQSxJQUN0QjtBQUFBLElBR1MsV0FBbUI7QUFDMUIsV0FBSyxVQUFVO0FBQ2YsV0FBSyxVQUFVO0FBRWYsV0FBSyxXQUFXO0FBQ2hCLFdBQUssUUFBUTtBQUViLFdBQUssaUJBQWlCO0FBQ3RCLFdBQUssZ0JBQWdCO0FBQ3JCLFdBQUssY0FBYztBQUVuQixXQUFLLFdBQVc7QUFDaEIsV0FBSyxlQUFlO0FBQ3BCLFdBQUssc0JBQXNCO0FBRTNCLFVBQUksS0FBSyxxQ0FBeUM7QUFDaEQsWUFBSTtBQUNGLGVBQUssVUFBVSxNQUFNO0FBQUEsUUFDdkIsUUFBRTtBQUFBLFFBRUY7QUFBQSxNQUNGO0FBRUEsYUFBTyxnQkFBZ0IsVUFBVSxTQUFTLEtBQUssSUFBSTtBQUFBLElBQ3JEO0FBQUEsRUFDRjtBQWpaTyxNQUFNLE1BQU47QUEvRVAsRUFnRkc7OztBQ2hGSDs7O0FDQUE7OztBQ0FBOzs7QUNBQTs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9DQSxNQUFNLFVBQVU7QUFDaEIsTUFBTSxXQUFXO0FBRWpCLE1BQU0sb0JBQW9CLEtBQUs7QUFFeEIsTUFBTSxXQUFOLGNBQXVCLFVBQVU7QUFBQSxJQVF0QyxjQUFjO0FBQ1osZ0NBQThCO0FBQUEsSUFDaEM7QUFBQSxFQUNGO0FBcERBLE1BQUFDO0FBc0RPLE1BQU0sTUFBTixjQUFrQixXQUFXO0FBQUEsSUFzQ2xDLGNBQWM7QUFDWiw0QkFBMEI7QUF0QzVCLFdBQUNBLE9BQXdCO0FBV3pCLHdCQUFhO0FBRWIsNkJBQWtCO0FBQ2xCLDZCQUFrQjtBQUFBLElBeUJsQjtBQUFBLElBckNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBO0FBQUEsSUFDQTtBQUFBLElBRUE7QUFBQSxJQUNBO0FBQUEsSUEyQkEsY0FBYyxtQkFBMkIsbUJBQW9DO0FBQzNFLHFCQUFlLGlDQUFpQztBQUFBLElBQ2xEO0FBQUEsSUFFQSw0QkFDRSxnQkFDQSxlQUNBLG1CQUNRO0FBQ1IscUJBQWUsK0NBQStDO0FBQUEsSUFDaEU7QUFBQSxJQVFBLEtBQUssSUFBWSxNQUFjLE9BQXVCO0FBQ3BELGFBQU8sS0FBSyxRQUFRLElBQUksTUFBTSxPQUFPLE9BQU87QUFBQSxJQUM5QztBQUFBLElBUUEsTUFBTSxJQUFZLE1BQWMsT0FBdUI7QUFDckQsYUFBTyxLQUFLLFFBQVEsSUFBSSxNQUFNLE9BQU8sUUFBUTtBQUFBLElBQy9DO0FBQUEsSUFFQSxXQUNFLE1BQ0EsUUFDQSxLQUNvQjtBQUNwQixVQUFJO0FBRUosVUFBSSxPQUFPLG1CQUFtQjtBQUM1QixjQUFNO0FBQUEsTUFDUixXQUFXLENBQUMsS0FBSyxVQUFVO0FBQ3pCLGNBQU1DLGFBQVksYUFBYTtBQUFBLE1BQ2pDO0FBRUEsVUFBSSxLQUFLO0FBQ1AsWUFBSSxRQUFRLFFBQVEsSUFBSSxHQUFHO0FBQzNCLFlBQUksT0FBTztBQUNYLFlBQUksVUFBVSxTQUFTLElBQUksSUFBSSxLQUFLLEVBQUc7QUFDdkMsWUFBSSxVQUFVLFNBQVMsd0JBQXdCO0FBRS9DO0FBQUEsTUFDRjtBQUVBLFVBQUksU0FBUyxHQUFHO0FBQ2QsZUFBTyxVQUFVLE9BQU8sSUFBSTtBQUU1QixZQUFJLFFBQVE7QUFDVixpQkFBUSxLQUFLLGtCQUFrQjtBQUFBLFFBQ2pDO0FBRUEsZUFBUSxLQUFLLGtCQUFrQjtBQUFBLE1BQ2pDO0FBRUEsYUFBTyxTQUFTLEtBQUssa0JBQWtCLEtBQUs7QUFBQSxJQUM5QztBQUFBLElBRUEsUUFBUSxJQUFZLE1BQXNCO0FBQ3hDLGFBQU8sS0FBSyxXQUFXLElBQUksTUFBTSxPQUFPO0FBQUEsSUFDMUM7QUFBQSxJQUVBLFNBQVMsSUFBWSxNQUFzQjtBQUN6QyxhQUFPLEtBQUssV0FBVyxJQUFJLE1BQU0sUUFBUTtBQUFBLElBQzNDO0FBQUEsSUFFQSxhQUFxQjtBQUNuQixXQUFLLGlCQUFpQjtBQUN0QixXQUFLLGNBQWM7QUFDbkIsV0FBSyxnQkFBZ0I7QUFFckIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLGVBQ0UsbUJBQ0EsbUJBQ1E7QUFDUixxQkFBZSxrQ0FBa0M7QUFBQSxJQUNuRDtBQUFBLElBRUEsNkJBQ0UsZ0JBQ0EsZUFDQSxtQkFDUTtBQUNSLHFCQUFlLGdEQUFnRDtBQUFBLElBQ2pFO0FBQUEsSUFPQSxZQUFZLFVBQW1EO0FBQzdELFVBQUksS0FBSyxtQkFBbUIsUUFBVztBQUNyQyxlQUFPLFFBQVEsSUFBSSxPQUFPO0FBQUEsTUFDNUI7QUFFQSxlQUFTLFVBQVUsS0FBSztBQUN4QixlQUFTLE9BQU8sS0FBSztBQUNyQixlQUFTLFNBQVMsS0FBSztBQUV2QixhQUFPO0FBQUEsSUFDVDtBQUFBLElBT0EsWUFBWSxVQUFtRDtBQUM3RCxVQUFJLEtBQUssYUFBYSxRQUFXO0FBQy9CLGVBQU8sUUFBUSxJQUFJLE9BQU87QUFBQSxNQUM1QjtBQUVBLGVBQVMsVUFBVSxLQUFLO0FBQ3hCLGVBQVMsT0FBTyxLQUFLO0FBQ3JCLGVBQVMsU0FBUyxLQUFLO0FBRXZCLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFPQSxLQUFLLEtBQXFCO0FBRXhCLHFCQUFlLHdCQUF3QjtBQUFBLElBQ3pDO0FBQUEsSUFNQSxZQUFvQjtBQUNsQixVQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3BCLGFBQUssYUFBYTtBQUNsQixhQUFLLFNBQVM7QUFBQSxNQUNoQjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFNQSxXQUFtQjtBQUNqQixXQUFLLGFBQWE7QUFFbEIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVTLE1BQU07QUFDYixxQkFBZSx1QkFBdUI7QUFBQSxJQUN4QztBQUFBLElBRUEsS0FDRSxLQUNBLE1BQ0EsVUFDRyxNQUNLO0FBQ1IsYUFBTyxLQUFLLFFBQVEsS0FBSyxNQUFNLE9BQU8sTUFBTSxPQUFPO0FBQUEsSUFDckQ7QUFBQSxJQUVBLE1BQ0UsS0FDQSxNQUNBLFVBQ0csTUFDSztBQUNSLGFBQU8sS0FBSyxRQUFRLEtBQUssTUFBTSxPQUFPLE1BQU0sUUFBUTtBQUFBLElBQ3REO0FBQUEsSUFFQSxhQUFhLE9BQXNCO0FBQ2pDLHFCQUFlLGdDQUFnQztBQUFBLElBQ2pEO0FBQUEsSUFFQSxzQkFBc0IsbUJBQW1DO0FBQ3ZELHFCQUFlLHlDQUF5QztBQUFBLElBQzFEO0FBQUEsSUFFQSxxQkFBcUIsT0FBc0I7QUFDekMscUJBQWUsd0NBQXdDO0FBQUEsSUFDekQ7QUFBQSxJQUVBLGdCQUFnQixNQUFzQjtBQUNwQyxxQkFBZSxtQ0FBbUM7QUFBQSxJQUNwRDtBQUFBLElBRUEsT0FBTyxNQUFzQjtBQUMzQixxQkFBZSwwQkFBMEI7QUFBQSxJQUMzQztBQUFBLElBRVMsUUFBUTtBQUNmLHFCQUFlLHlCQUF5QjtBQUFBLElBQzFDO0FBQUEsSUFFQSxRQUFRLElBQVksTUFBYyxRQUFnQixRQUF3QjtBQUV4RSxZQUFNLGdCQUFnQjtBQUFBLFFBQ3BCO0FBQUEsUUFDQSxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsTUFDYjtBQUVBLFVBQUk7QUFFSixVQUFJO0FBQ0YsbUJBQXdCLGVBQWUsYUFBYTtBQUFBLE1BQ3RELFNBQVNDLElBQVA7QUFDQSxZQUFJQSxjQUFhLEtBQUssT0FBTyxXQUFXO0FBQ3RDLGlCQUFPLFFBQVEsSUFBSSxZQUFZO0FBQUEsUUFDakMsV0FBV0EsY0FBYSxLQUFLLE9BQU8sa0JBQWtCO0FBQ3BELGlCQUFPLFFBQVEsSUFBSSxlQUFlO0FBQUEsUUFDcEM7QUFHQSxlQUFPLFFBQVEsSUFBSSxTQUFTO0FBQUEsTUFDOUI7QUFFQSxZQUFNLFVBQVUsU0FBUztBQUN6QixXQUFLLFdBQVcsUUFBUTtBQUN4QixXQUFLLFFBQVEsUUFBUTtBQUNyQixXQUFLLFVBQVUsV0FBVyxXQUFZLFNBQW9CO0FBQzFELFdBQUssWUFBWTtBQUVqQixhQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsV0FBVyxJQUFZLE1BQWMsUUFBd0I7QUFDM0QsV0FBSyxpQkFBaUI7QUFDdEIsV0FBSyxjQUFjO0FBQ25CLFdBQUssZ0JBQWdCLFdBQVcsV0FDM0IsU0FDQTtBQUVMLGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxRQUNFLEtBQ0EsTUFDQSxRQUNBLE1BQ0EsU0FDUTtBQUNSLFVBQUk7QUFFSixVQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCLGFBQUssY0FBYyxLQUFLO0FBQ3hCLGFBQUssaUJBQWlCLEtBQUs7QUFDM0Isc0JBQWMsS0FBSztBQUFBLE1BQ3JCLE9BQU87QUFDTCxzQkFBYyxLQUFLO0FBQUEsTUFDckI7QUFFQSxZQUFNLE9BQXFCO0FBQUEsUUFDekIsVUFBVSxLQUFLO0FBQUEsUUFDZixNQUFNLEtBQUs7QUFBQSxRQUNYLFdBQVc7QUFBQSxNQUNiO0FBR0EsWUFBTSxVQUFVLElBQUk7QUFBQSxRQUNsQkMsUUFBTztBQUFBLFVBQ0wsS0FBSyxJQUFJLENBQUMsUUFBUTtBQUNoQixnQkFBSSxPQUFPLFFBQVEsVUFBVTtBQUMzQixxQkFBT0EsUUFBTyxLQUFLLEdBQUc7QUFBQSxZQUN4QjtBQUVBLG1CQUFPQSxRQUFPLEtBQUssSUFBSSxRQUFRLElBQUksWUFBWSxJQUFJLFVBQVU7QUFBQSxVQUMvRCxDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFFQSxPQUFDLFlBQVk7QUFDWCxZQUFJO0FBQ0osWUFBSSxNQUFxQjtBQUV6QixZQUFJO0FBQ0YsaUJBQU8sTUFBTSxLQUFLLFVBQVcsS0FBSyxTQUFTLElBQUk7QUFBQSxRQUNqRCxTQUFTRCxJQUFQO0FBRUEsY0FBSUEsY0FBYSxLQUFLLE9BQU8sYUFBYTtBQUN4QyxrQkFBTSxRQUFRLElBQUksT0FBTztBQUFBLFVBQzNCLFdBQ0VBLGNBQWEsU0FDYkEsR0FBRSxRQUFRLE1BQU0sd0JBQXdCLEdBQ3hDO0FBQ0Esa0JBQU0sUUFBUSxJQUFJLFVBQVU7QUFBQSxVQUM5QixPQUFPO0FBQ0wsa0JBQU0sUUFBUSxJQUFJLFNBQVM7QUFBQSxVQUM3QjtBQUVBLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFlBQUksYUFBYTtBQUNmLGNBQUk7QUFDRixnQkFBSSxXQUFXLEtBQUssSUFBSTtBQUFBLFVBQzFCLFFBQUU7QUFBQSxVQUVGO0FBQUEsUUFDRjtBQUFBLE1BQ0YsR0FBRztBQUVILGFBQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxNQUFNLFdBQVc7QUFDZixVQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3BCO0FBQUEsTUFDRjtBQUVBLFlBQU1FLE1BQUksSUFBSSxXQUFXLEtBQUssZUFBZTtBQUU3QyxVQUFJO0FBQ0osVUFBSTtBQUNKLFVBQUk7QUFFSixVQUFJO0FBQ0YsU0FBQyxLQUFLLFVBQVUsSUFBSyxNQUFNLEtBQUssVUFBVyxRQUFRQSxHQUFDO0FBS3BELGdCQUFRLElBQUk7QUFBQSxNQUNkLFNBQVNGLElBQVA7QUFFQSxZQUNFQSxjQUFhLEtBQUssT0FBTyxlQUN6QkEsY0FBYSxLQUFLLE9BQU8sYUFDekI7QUFDQSxrQkFBUTtBQUFBLFFBQ1YsT0FBTztBQUNMLGtCQUFRLFFBQVEsSUFBSSxTQUFTO0FBQUEsUUFDL0I7QUFFQSxjQUFNLElBQUksV0FBVyxDQUFDO0FBQ3RCLHFCQUFhO0FBQUEsTUFDZjtBQUVBLGdCQUFVO0FBRVYsWUFBTSxRQUFRLGFBQ1Y7QUFBQSxRQUNBLFNBQVMsV0FBVztBQUFBLFFBQ3BCLE1BQU0sV0FBVztBQUFBLFFBQ2pCLFFBQVEsS0FBSyxXQUFXLFFBQVEsTUFBTSxJQUNqQyxTQUNBO0FBQUEsTUFDUCxJQUNFO0FBRUosVUFBSTtBQUNGLGFBQUssVUFBVSxPQUFPLE1BQU1DLFFBQU8sS0FBSyxHQUFHLEdBQUcsS0FBSztBQUFBLE1BQ3JELFFBQUU7QUFBQSxNQUVGO0FBRUEsV0FBSyxTQUFTO0FBQUEsSUFDaEI7QUFBQSxJQUdTLFdBQW1CO0FBQzFCLFdBQUssYUFBYTtBQUVsQixXQUFLLFdBQVc7QUFDaEIsV0FBSyxRQUFRO0FBQ2IsV0FBSyxVQUFVO0FBRWYsVUFBSTtBQUNGLGFBQUssVUFBVyxNQUFNO0FBQUEsTUFDeEIsUUFBRTtBQUFBLE1BRUY7QUFFQSxXQUFLLFlBQVk7QUFFakIsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBM2VBLEVBdURHSCxNQUFBOzs7QUN2REg7OztBQ0FBOzs7QUNBQTs7O0FDQUE7OztBQ2lEQSxNQUFNLFVBQVU7QUFBQSxJQUNkLGNBQWM7QUFBQSxJQUNkO0FBQUEsSUFDQSxjQUFjO0FBQUEsSUFDZDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsaUJBQWlCO0FBQUEsSUFDakIsY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2Y7QUFBQSxJQUNBO0FBQUEsSUFDQSxhQUFhO0FBQUEsSUFDYjtBQUFBLElBQ0EsZUFBZTtBQUFBLElBQ2YsaUJBQWlCO0FBQUEsSUFDakI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLGFBQWE7QUFBQSxJQUNiLG1CQUFtQjtBQUFBLElBQ25CO0FBQUEsSUFDQTtBQUFBLElBQ0EsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2Ysa0JBQWtCO0FBQUEsSUFDbEI7QUFBQSxJQUNBLGNBQWM7QUFBQSxJQUNkLFlBQVk7QUFBQSxJQUNaO0FBQUEsSUFDQSxZQUFZO0FBQUEsSUFDWixnQkFBZ0I7QUFBQSxJQUNoQixZQUFZO0FBQUEsSUFDWjtBQUFBLElBQ0EsWUFBWTtBQUFBLElBQ1o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFJTyxXQUFTLFdBQVcsTUFBbUI7QUFDNUMsVUFBTSxNQUFNLFFBQVE7QUFDcEIsUUFBSSxDQUFDLEtBQUs7QUFDUixZQUFNLElBQUksTUFBTSxtQkFBbUIsTUFBTTtBQUFBLElBQzNDO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7OztBQ3hHQSxNQUFNLFlBQVksT0FBTyxxQkFBcUI7QUFFOUMsTUFBTSwwQkFBMEI7QUFDaEMsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSxzQkFBc0I7QUFJckIsV0FBUyxvQkFBb0I7QUFDbEMsVUFBTSw4QkFBOEI7QUFBQSxNQUNsQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBNEJBLFVBQU0sb0JBQW9CLENBQUMsU0FBUyxLQUFLLFFBQVEsb0JBQW9CLEVBQUU7QUFJdkUsVUFBTSxZQUFZLDRCQUE0QixJQUFJLGlCQUFpQjtBQUVuRSxVQUFNLGdDQUFnQyxJQUFJO0FBQUEsTUFDeEMsWUFBWSxPQUFP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LEdBQUUsSUFBRTtBQUFFO0FBQUEsUUFBSztBQUFDLGFBQU87QUFBQSxJQUFJO0FBQUEsSUFBQyxJQUFJLFVBQVM7QUFBQyxVQUFHLEtBQUssTUFBTSxVQUFRO0FBQUUsZUFBTTtBQUFHLFVBQUcsRUFBQyxRQUFPQSxHQUFDLElBQUUsS0FBSztBQUFFLGFBQU9BLEdBQUUsS0FBS0EsR0FBRSxVQUFVLEtBQUssT0FBTSxDQUFDLE1BQUksU0FBTyxDQUFDQSxHQUFFLFVBQVUsS0FBSyxPQUFNLENBQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxVQUFTO0FBQUMsV0FBSyxRQUFNLEtBQUssTUFBTSxJQUFHLEtBQUssTUFBTSxTQUFPO0FBQUEsSUFBQztBQUFBLElBQUMsVUFBVUEsSUFBRTtBQUFDLFVBQUcsS0FBSyxTQUFPQSxHQUFFLFNBQU8sS0FBSyxNQUFNLFVBQVFBLEdBQUUsTUFBTTtBQUFPLGVBQU07QUFBRyxlQUFRQyxLQUFFLEdBQUVBLEtBQUUsS0FBSyxNQUFNLFFBQU9BLE1BQUc7QUFBRSxZQUFHLEtBQUssTUFBTUEsT0FBSUQsR0FBRSxNQUFNQztBQUFHLGlCQUFNO0FBQUcsYUFBTTtBQUFBLElBQUU7QUFBQSxJQUFDLElBQUksU0FBUTtBQUFDLGFBQU8sS0FBSyxFQUFFO0FBQUEsSUFBTTtBQUFBLElBQUMsZUFBZUQsSUFBRTtBQUFDLGFBQU8sS0FBSyxFQUFFLE9BQU8sUUFBUSxNQUFNQTtBQUFBLElBQUU7QUFBQSxJQUFDLGFBQWFBLElBQUVDLElBQUU7QUFBQyxXQUFLLGNBQVksS0FBSyxjQUFjLEtBQUssV0FBVyxRQUFRLE1BQU0sS0FBSyxXQUFXLFNBQVFELElBQUUsTUFBSyxLQUFLLEVBQUUsT0FBTyxNQUFNQyxFQUFDLENBQUMsQ0FBQztBQUFBLElBQUM7QUFBQSxJQUFDLGNBQWNELElBQUVDLElBQUU7QUFBQyxXQUFLLGNBQVksS0FBSyxjQUFjLEtBQUssV0FBVyxRQUFRLE9BQU8sS0FBSyxXQUFXLFNBQVFELElBQUUsTUFBSyxLQUFLLEVBQUUsT0FBTyxNQUFNQyxFQUFDLENBQUMs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UUFBTyxFQUFDLFFBQU8sTUFBRyxVQUFTLEtBQUUsR0FBRSxVQUFTLEVBQUMsVUFBUyxLQUFFLEdBQUUsR0FBRSxFQUFDLFNBQVEsTUFBRyxTQUFRLE1BQUcsT0FBTSxNQUFHLFlBQVcsTUFBRyxLQUFJLE1BQUcsS0FBSSxNQUFHLElBQUcsTUFBRyxVQUFTLE1BQUcsUUFBTyxNQUFHLE1BQUssTUFBRyxJQUFHLE1BQUcsSUFBRyxNQUFHLElBQUcsTUFBRyxJQUFHLE1BQUcsSUFBRyxNQUFHLElBQUcsTUFBRyxRQUFPLE1BQUcsUUFBTyxNQUFHLElBQUcsTUFBRyxNQUFLLE1BQUcsS0FBSSxNQUFHLElBQUcsTUFBRyxHQUFFLE1BQUcsS0FBSSxNQUFHLFNBQVEsTUFBRyxPQUFNLE1BQUcsSUFBRyxLQUFFLEdBQUUsSUFBRyxFQUFDLElBQUcsTUFBRyxJQUFHLEtBQUUsR0FBRSxJQUFHLEVBQUMsSUFBRyxNQUFHLElBQUcsS0FBRSxHQUFFLE9BQU0sRUFBQyxPQUFNLE1BQUcsT0FBTSxLQUFFLEdBQUUsSUFBRyxFQUFDLElBQUcsTUFBRyxJQUFHLEtBQUUsR0FBRSxPQUFNLEVBQUMsT0FBTSxLQUFFLEdBQUUsSUFBRyxFQUFDLElBQUcsTUFBRyxJQUFHLEtBQUUsR0FBRSxPQUFNLEVBQUMsT0FBTSxNQUFHLE9BQU0sS0FBRSxHQUFFLElBQUcsRUFBQyxJQUFHLEtBQUUsRUFBQztBQUFFLFdBQVNDLElBQUVDLElBQUU7QUFBQyxXQUFPQSxNQUFHLE1BQUlBLE1BQUcsTUFBSUEsTUFBRyxNQUFJQSxNQUFHLE1BQUlBLE1BQUcsTUFBSUEsTUFBRyxNQUFJQSxNQUFHLE1BQUlBLE1BQUcsT0FBS0EsTUFBRztBQUFBLEVBQUc7QUFBQyxXQUFTQyxJQUFFRCxJQUFFO0FBQUMsV0FBT0EsTUFBRyxLQUFHQSxNQUFHLE1BQUlBLE1BQUcsTUFBSUEsTUFBRztBQUFBLEVBQUU7QUFBQyxNQUFJRSxLQUFFO0FBQU4sTUFBV0MsTUFBRTtBQUFiLE1BQWtCQyxNQUFFO0FBQUUsV0FBU0MsSUFBRUwsSUFBRU0sS0FBRTtB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R0FBRSxZQUFXRixLQUFFLE1BQUssQ0FBQyxVQUFTLFNBQVEsUUFBUSxFQUFDLEVBQUMsR0FBRSxRQUFPLEVBQUMsT0FBTSxFQUFDLE9BQU0sTUFBSyxRQUFPLEtBQUksRUFBQyxHQUFFLFNBQVFLLElBQUUsUUFBT0EsSUFBRSxNQUFLQSxJQUFFLE1BQUtBLElBQUUsS0FBSSxFQUFDLE9BQU0sRUFBQyxNQUFLLEtBQUksRUFBQyxHQUFFLFVBQVMsRUFBQyxPQUFNLEVBQUMsTUFBSyxLQUFJLEVBQUMsR0FBRSxTQUFRLEVBQUMsT0FBTSxFQUFDLE1BQUssQ0FBQyxXQUFVLFlBQVcsT0FBTyxHQUFFLE9BQU0sTUFBSyxNQUFLLE1BQUssWUFBVyxNQUFLLFNBQVEsTUFBSyxPQUFNLE1BQUssVUFBUyxDQUFDLFVBQVUsR0FBRSxTQUFRLENBQUMsU0FBUyxFQUFDLEVBQUMsR0FBRSxNQUFLLEVBQUMsT0FBTSxFQUFDLE9BQU0sS0FBSSxFQUFDLEdBQUUsVUFBUyxFQUFDLE9BQU0sRUFBQyxVQUFTLENBQUMsVUFBVSxHQUFFLFVBQVMsQ0FBQyxVQUFVLEVBQUMsRUFBQyxHQUFFLFVBQVMsRUFBQyxPQUFNLEVBQUMsTUFBSyxLQUFJLEVBQUMsR0FBRSxJQUFHQSxJQUFFLEtBQUksRUFBQyxPQUFNLEVBQUMsTUFBSyxNQUFLLFVBQVMsS0FBSSxFQUFDLEdBQUUsU0FBUSxFQUFDLE9BQU0sRUFBQyxNQUFLLENBQUMsTUFBTSxFQUFDLEVBQUMsR0FBRSxLQUFJQSxJQUFFLEtBQUlBLElBQUUsS0FBSUEsSUFBRSxJQUFHQSxJQUFFLElBQUdBLElBQUUsSUFBR0EsSUFBRSxPQUFNLEVBQUMsT0FBTSxFQUFDLEtBQUksTUFBSyxNQUFLLE1BQUssT0FBTSxNQUFLLFFBQU8sS0FBSSxFQUFDLEdBQUUsYUFBWSxFQUFDLE9BQU0sRUFBQyxLQUFJLEtBQUksRUFBQyxHQUFFLFVBQVMsRUFBQyxPQUFNLEVBQUMsVUFBUyxDQUFDLFVBQVUsR0FBRSxNQUFLLE1BQUssTUFBSyxLQUFJLEVBQUMsR0FBRSxZQUFXQSxJQUFFLFFBQU9BLElBQUUsTUFBS0EsSUFBRSxRQUFPQSxJQUFFLE1BQUssRUFBQyxPQUFNLEVBQUMsUUFBTyxNQUFLLE1BQUssTUFBSyxrQkFBaUJKLEtBQUUsY0FBYSxDQUFDLE1BQUssS0FBSyxHQUFFLFNBQVFFLEtBQUUsUUFBT0QsS0FBRSxZQUFXLENBQUMsWUFBWSxHQUFFLFFBQU9GLElBQUMsRUFBQyxHQUFFLE9BQU1LLElBQUUsVUFBU0EsSUFBRSxJQUFHQSxJQUFFLElBQUdBLElBQUUsSUFBR0EsSUFBRSxJQUFHQSxJQUFFLElBQUdBLElBQUUsSUFBR0EsSUFBRSxNQUFLLEVBQUMsVUFBUyxDQUFDLFNBQVEsUUFBTyxRQUFPLFNBQVEsUUFBTyxVQUFTLFlBQVcsU0FBUyxFQUFDLEdBQUUsUUFBT0EsSUFBRSxRQUFPQSxJQUFFLElBQUdBLElBQUUsTUFBSyxFQUFDLE9BQU0sRUFBQyxVQUFTLEtBQUksRUFBQyxHQUFFLEdBQUVBLElBQUUsUUFBTyxFQUFDLE9BQU0sRUFBQyxLQUFJLE1BQUssUUFBTyxNQUFLLE1BQUssTUFBSyxPQUFNLE1BQUssUUFBTyxNQUFLLFNBQVEsQ0FBQyx3QkFBdUIscUJBQW9CLGVBQWMsZUFBZSxHQUFFLFVBQVMsQ0FBQyxVQUFVLEVBQUMsRUFBQyxHQUFFLEtBQUksRUFBQyxPQUFNLEVBQUMsS0FBSSxNQUFLLEtBQUksTUFBSyxPQUFNLE1BQUssUUFBTyxNQUFLLE9BQU0sTUFBSyxRQUFPLE1BQUssYUFBWSxDQUFDLGFBQVksaUJBQWlCLEVBQUMsRUFBQyxHQUFFLE9BQU0sRUFBQyxPQUFNLEVBQUMsS0FBSSxNQUFLLFNBQVEsTUFBSyxNQUFLLE1BQUssWUFBVyxNQUFLLFFBQU8sTUFBSyxNQUFLLE1BQUssS0FBSSxNQUFLLFdBQVUsTUFBSyxLQUFJLE1BQUssTUFBSyxNQUFLLFNBQVEsTUFBSyxhQUFZLE1BQUssTUFBSyxNQUFLLEtBQUksTUFBSyxNQUFLLE1BQUssT0FBTSxNQUFLLE9BQU0sTUFBSyxRQUFPLENBQUMsV0FBVSxXQUFVLFNBQVMsR0FBRSxjQUFhLENBQUMsTUFBSyxLQUFLLEdBQUUsV0FBVSxDQUFDLFdBQVcsR0FBRSxTQUFRLENBQUMsU0FBUyxHQUFFLFVBQVMsQ0FBQyxVQUFVLEdBQUUsYUFBWUYsS0FBRSxZQUFXRCxLQUFFLGdCQUFlLENBQUMsWUFBWSxHQUFFLFlBQVdGLEtBQUUsVUFBUyxDQUFDLFVBQVUsR0FBRSxVQUFTLENBQUMsVUFBVSxHQUFFLFVBQVMsQ0FBQyxVQUFVLEdBQUUsTUFBSyxDQUFDLFVBQVMsUUFBTyxVQUFTLE9BQU0sT0FBTSxTQUFRLFlBQVcsWUFBVyxRQUFPLFNBQVEsUUFBTyxRQUFPLGtCQUFpQixVQUFTLFNBQVEsU0FBUSxZQUFXLFNBQVEsUUFBTyxVQUFTLFNBQVEsU0FBUSxRQUFRLEVBQUMsRUFBQyxHQUFFLEtBQUksRUFBQyxPQUFNLEVBQUMsTUFBSyxNQUFLLFVBQVMsS0FBSSxFQUFDLEdBQUUsS0FBSUssSUFBRSxRQUFPLEVBQUMsT0FBTSxFQUFDLFdBQVUsTUFBSyxNQUFLLE1BQUssTUFBSyxNQUFLLFdBQVUsQ0FBQyxXQUFXLEdBQUUsVUFBUyxDQUFDLFVBQVUsR0FBRSxTQUFRLENBQUMsS0FBSyxFQUFDLEVBQUMsR0FBRSxPQUFNLEVBQUMsT0FBTSxFQUFDLEtBQUksTUFBSyxNQUFLLEtBQUksRUFBQyxHQUFFLFFBQU9BLElBQUUsSUFBRyxFQUFDLE9BQU0sRUFBQyxPQUFNLEtBQUksRUFBQyxHQUFFLE1BQUssRUFBQyxPQUFNLEVBQUMsTUFBSyxNQUFLLE1BQUssTUFBSyxVQUFTLE1BQUssT0FBTSxNQUFLLE9BQU0sQ0FBQyxPQUFNLFNBQVEsZUFBYyxtQkFBbUIsRUFBQyxFQUFDLEdBQUUsS0FBSSxFQUFDLE9BQU0sRUFBQyxNQUFLLEtBQUksRUFBQyxHQUFFLE1BQUtBLElBQUUsTUFBSyxFQUFDLE9BQU0sRUFBQyxPQUFNLE1BQUssTUFBSyxDQUFDLFFBQU8sV0FBVSxTQUFTLEVBQUMsRUFBQyxHQUFFLE1BQUssRUFBQyxPQUFNLEVBQUMsU0FBUSxNQUFLLFNBQVFKLEtBQUUsTUFBSyxDQUFDLFlBQVcsb0JBQW1CLFVBQVMsZUFBYyxhQUFZLFVBQVUsR0FBRSxjQUFhLENBQUMsb0JBQW1CLGdCQUFlLGlCQUFnQixTQUFTLEVBQUMsRUFBQyxHQUFFLE9BQU0sRUFBQyxPQUFNLEVBQUMsT0FBTSxNQUFLLEtBQUksTUFBSyxLQUFJLE1BQUssTUFBSyxNQUFLLEtBQUksTUFBSyxTQUFRLEtBQUksRUFBQyxHQUFFLEtBQUlJLElBQUUsVUFBU0EsSUFBRSxVQUFTQSxJQUFFLFFBQU8sRUFBQyxPQUFNLEVBQUMsTUFBSyxNQUFLLE1BQUssTUFBSyxNQUFLLE1BQUssUUFBTyxNQUFLLE1BQUssTUFBSyxPQUFNLE1BQUssUUFBTyxNQUFLLGVBQWMsQ0FBQyxlQUFlLEVBQUMsRUFBQyxHQUFFLElBQUcsRUFBQyxPQUFNLEVBQUMsVUFBUyxDQUFDLFVBQVUsR0FBRSxPQUFNLE1BQUssTUFBSyxDQUFDLEtBQUksS0FBSSxLQUFJLEtBQUksR0FBRyxFQUFDLEdBQUUsVUFBUyxDQUFDLE1BQUssVUFBUyxZQUFXLE1BQUssSUFBSSxFQUFDLEdBQUUsVUFBUyxFQUFDLE9BQU0sRUFBQyxVQUFTLENBQUMsVUFBVSxHQUFFLE9BQU0sS0FBSSxFQUFDLEdBQUUsUUFBTyxFQUFDLE9BQU0sRUFBQyxVQUFTLENBQUMsVUFBVSxHQUFFLE9BQU0sTUFBSyxVQUFTLENBQUMsVUFBVSxHQUFFLE9BQU0sS0FBSSxFQUFDLEdBQUUsUUFBTyxFQUFDLE9BQU0sRUFBQyxLQUFJLE1BQUssTUFBSyxNQUFLLE1BQUssS0FBSSxFQUFDLEdBQUUsR0FBRUEsSUFBRSxPQUFNLEVBQUMsT0FBTSxFQUFDLE1BQUssTUFBSyxPQUFNLEtBQUksRUFBQyxHQUFFLEtBQUlBLElBQUUsVUFBUyxFQUFDLE9BQU0sRUFBQyxPQUFNLE1BQUssS0FBSSxLQUFJLEVBQUMsR0FBRSxHQUFFLEVBQUMsT0FBTSxFQUFDLE1BQUssS0FBSSxFQUFDLEdBQUUsSUFBR0EsSUFBRSxJQUFHQSxJQUFFLE1BQUtBLElBQUUsR0FBRUEsSUFBRSxNQUFLQSxJQUFFLFFBQU8sRUFBQyxPQUFNLEVBQUMsTUFBSyxDQUFDLGlCQUFpQixHQUFFLEtBQUksTUFBSyxPQUFNLENBQUMsT0FBTyxHQUFFLE9BQU0sQ0FBQyxPQUFPLEdBQUUsU0FBUUosSUFBQyxFQUFDLEdBQUUsU0FBUUksSUFBRSxRQUFPLEVBQUMsT0FBTSxFQUFDLE1BQUssTUFBSyxNQUFLLE1BQUssTUFBSyxNQUFLLFdBQVUsQ0FBQyxXQUFXLEdBQUUsVUFBUyxDQUFDLFVBQVUsR0FBRSxVQUFTLENBQUMsVUFBVSxFQUFDLEVBQUMsR0FBRSxNQUFLLEVBQUMsT0FBTSxFQUFDLE1BQUssS0FBSSxFQUFDLEdBQUUsT0FBTUEsSUFBRSxRQUFPLEVBQUMsT0FBTSxFQUFDLEtBQUksTUFBSyxNQUFLLE1BQUssT0FBTSxLQUFJLEVBQUMsR0FBRSxNQUFLQSxJQUFFLFFBQU9BLElBQUUsUUFBT0EsSUFBRSxPQUFNLEVBQUMsT0FBTSxFQUFDLE1BQUssQ0FBQyxVQUFVLEdBQUUsT0FBTSxNQUFLLFFBQU8sS0FBSSxFQUFDLEdBQUUsS0FBSUEsSUFBRSxTQUFRQSxJQUFFLEtBQUlBLElBQUUsT0FBTUEsSUFBRSxPQUFNQSxJQUFFLElBQUcsRUFBQyxPQUFNLEVBQUMsU0FBUSxNQUFLLFNBQVEsTUFBSyxTQUFRLEtBQUksRUFBQyxHQUFFLFVBQVNBLElBQUUsVUFBUyxFQUFDLE9BQU0sRUFBQyxTQUFRLE1BQUssTUFBSyxNQUFLLFdBQVUsTUFBSyxNQUFLLE1BQUssYUFBWSxNQUFLLE1BQUssTUFBSyxNQUFLLE1BQUssV0FBVSxDQUFDLFdBQVcsR0FBRSxVQUFTLENBQUMsVUFBVSxHQUFFLFVBQVMsQ0FBQyxVQUFVLEdBQUUsVUFBUyxDQUFDLFVBQVUsR0FBRSxNQUFLLENBQUMsUUFBTyxNQUFNLEVBQUMsRUFBQyxHQUFFLE9BQU1BLElBQUUsSUFBRyxFQUFDLE9BQU0sRUFBQyxTQUFRLE1BQUssU0FBUSxNQUFLLFNBQVEsTUFBSyxPQUFNLENBQUMsT0FBTSxPQUFNLFlBQVcsVUFBVSxFQUFDLEVBQUMsR0FBRSxPQUFNQSxJQUFFLE1BQUss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QUFFLEtBQUcsS0FBSyxPQUFPQSxLQUFFLElBQUcsS0FBSyxPQUFPQSxLQUFFLEtBQUcsS0FBSyxPQUFPQSxLQUFFLElBQUdBLE1BQUcsR0FBRUYsS0FBRSxNQUFJQSxNQUFHO0FBQUcsYUFBSyxPQUFPRSxNQUFHTCxJQUFFLEtBQUssT0FBT0ssS0FBRSxLQUFHSixJQUFFLEtBQUssT0FBT0ksS0FBRSxLQUFHSCxJQUFFLEtBQUssT0FBT0csS0FBRSxLQUFHRjtBQUFBLE1BQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxNQUFNSCxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsVUFBSUMsS0FBRSxLQUFLO0FBQUksVUFBR0gsS0FBRTtBQUFPLGFBQUssVUFBVUEsS0FBRSxPQUFNLEtBQUssR0FBRztBQUFBLGdCQUFXQSxLQUFFLFdBQVMsR0FBRTtBQUFDLFlBQUlJLE1BQUVKLElBQUUsRUFBQyxRQUFPSyxHQUFDLElBQUUsS0FBSztBQUFFLFNBQUNILEtBQUUsS0FBSyxPQUFLRCxNQUFHSSxHQUFFLGFBQVcsS0FBSyxNQUFJSCxJQUFFRyxHQUFFLFVBQVVELEtBQUUsQ0FBQyxNQUFJLEtBQUssWUFBVUYsTUFBSSxLQUFLLFVBQVVFLEtBQUVELEVBQUMsR0FBRSxLQUFLLGFBQWFGLElBQUVFLEVBQUMsR0FBRUYsTUFBR0ksR0FBRSxXQUFTLEtBQUssT0FBTyxLQUFLSixJQUFFRSxJQUFFRCxJQUFFLENBQUM7QUFBQSxNQUFDO0FBQU0sYUFBSyxNQUFJQSxJQUFFLEtBQUssYUFBYUQsSUFBRUUsRUFBQyxHQUFFRixNQUFHLEtBQUssRUFBRSxPQUFPLFdBQVMsS0FBSyxPQUFPLEtBQUtBLElBQUVFLElBQUVELElBQUUsQ0FBQztBQUFBLElBQUM7QUFBQSxJQUFDLE1BQU1GLElBQUVDLElBQUVDLElBQUU7QUFBQyxNQUFBRixLQUFFLFFBQU0sS0FBSyxPQUFPQSxFQUFDLElBQUUsS0FBSyxNQUFNQSxJQUFFQyxJQUFFQyxFQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsUUFBUUYsSUFBRUMsSUFBRTtBQUFDLFVBQUlDLEtB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QUM7QUFBRyxZQUFHLENBQUMsS0FBSyxZQUFZLEdBQUU7QUFBQyxlQUFLLFVBQVUsR0FBRSxLQUFLLEtBQUksS0FBSyxLQUFJLEdBQUUsSUFBRTtBQUFFO0FBQUEsUUFBSztBQUFDLGFBQU87QUFBQSxJQUFJO0FBQUEsSUFBQyxJQUFJLFVBQVM7QUFBQyxVQUFHLEtBQUssTUFBTSxVQUFRO0FBQUUsZUFBTTtBQUFHLFVBQUcsRUFBQyxRQUFPQSxHQUFDLElBQUUsS0FBSztBQUFFLGFBQU9BLEdBQUUsS0FBS0EsR0FBRSxVQUFVLEtBQUssT0FBTSxDQUFDLE1BQUksU0FBTyxDQUFDQSxHQUFFLFVBQVUsS0FBSyxPQUFNLENBQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxVQUFTO0FBQUMsV0FBSyxRQUFNLEtBQUssTUFBTSxJQUFHLEtBQUssTUFBTSxTQUFPO0FBQUEsSUFBQztBQUFBLElBQUMsVUFBVUEsSUFBRTtBQUFDLFVBQUcsS0FBSyxTQUFPQSxHQUFFLFNBQU8sS0FBSyxNQUFNLFVBQVFBLEdBQUUsTUFBTTtBQUFPLGVBQU07QUFBRyxlQUFRQyxLQUFFLEdBQUVBLEtBQUUsS0FBSyxNQUFNLFFBQU9BLE1BQUc7QUFBRSxZQUFHLEtBQUssTUFBTUEsT0FBSUQsR0FBRSxNQUFNQztBQUFHLGlCQUFNO0FBQUcsYUFBTTtBQUFBLElBQUU7QUFBQSxJQUFDLElBQUksU0FBUTtBQUFDLGFBQU8sS0FBSyxFQUFFO0FBQUEsSUFBTTtBQUFBLElBQUMsZUFBZUQsSUFBRTtBQUFDLGFBQU8sS0FBSyxFQUFFLE9BQU8sUUFBUSxNQUFNQTtBQUFBLElBQUU7QUFBQSxJQUFDLGFBQWFBLElBQUVDLElBQUU7QUFBQyxXQUFLLGNBQVksS0FBSyxjQUFjLEtBQUssV0FBVyxRQUFRLE1BQU0sS0FBSyxXQUFXLFNBQVFELElBQUUsTUFBSyxLQUFLLEVBQUUsT0FBTyxNQUFNQyxFQUFDLENBQUMsQ0FBQztBQUFBLElBQUM7QUFBQSxJQUFDLGNBQWNELElBQUVDLElBQUU7QUFBQyxXQUFLLGNBQVksS0FBSyxjQUFjLEtBQUss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RSxJQUFFMkQsS0FBRSxNQUFNLEdBQUU1QyxPQUFHLFNBQVMsT0FBT2YsR0FBRSxPQUFLMkQsT0FBRzNELEdBQUUsUUFBTSxLQUFHLElBQUcsSUFBSSxFQUFFLE9BQU9BLEdBQUUsT0FBSzJELE9BQUczRCxHQUFFLFFBQU0sS0FBRyxJQUFHLElBQUksR0FBRWUsT0FBRyxVQUFVLE9BQU9mLEdBQUUsUUFBTyxPQUFPLEdBQUVlO0FBQUEsRUFBQztBQUFDLE1BQUksS0FBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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QUFrQixJQUFFLGNBQVk7QUFBa0IsRUFBQUEsSUFBRSxZQUFVLEVBQUMsTUFBS0ksS0FBRSxNQUFLLFFBQU9BLEtBQUUsTUFBSyxVQUFTQSxLQUFFLE1BQUssUUFBT0EsS0FBRSxNQUFLLFdBQVVBLEtBQUUsUUFBTyxNQUFLQSxLQUFFLE1BQUssT0FBTUEsS0FBRSxNQUFLLE1BQUtBLEtBQUUsVUFBVSxDQUFDQSxLQUFFLFFBQU9BLEtBQUUsT0FBTUEsS0FBRSxNQUFNLENBQUMsR0FBRSxRQUFPQSxLQUFFLFFBQU8sWUFBV0EsS0FBRSxNQUFLLFNBQVFBLEtBQUUsTUFBSyxNQUFLQSxLQUFFLE1BQU0sQ0FBQyxNQUFHLE9BQUcsY0FBYSxZQUFXLE1BQU0sQ0FBQyxHQUFFLE1BQUtBLEtBQUUsVUFBVSxDQUFDQSxLQUFFLFFBQU9BLEtBQUUsT0FBTUEsS0FBRSxNQUFNLENBQUMsR0FBRSxVQUFTQSxLQUFFLE1BQUssTUFBS0EsS0FBRSxNQUFNLENBQUMsU0FBUSxNQUFNLENBQUMsR0FBRSxPQUFNQSxLQUFFLE1BQUssVUFBU0EsS0FBRSxNQUFNLENBQUMsR0FBRSxJQUFHLEtBQUksR0FBRyxDQUFDLEdBQUUsT0FBTUEsS0FBRSxNQUFLLE1BQUtBLEtBQUUsTUFBTSxDQUFDLE9BQU0sTUFBSyxNQUFLLE1BQUssTUFBSyxPQUFNLE1BQUssTUFBSyxNQUFLLE1BQUssTUFBSyxNQUFLLE1BQUssTUFBSyxNQUFLLEtBQUssQ0FBQyxHQUFFLE1BQUtBLEtBQUUsTUFBSyxXQUFVQSxLQUFFLE1BQUssYUFBWUEsS0FBRSxNQUFLLFFBQU9BLEtBQUUsVUFBVSxDQUFDQSxLQUFFLE1BQUtBLEtBQUUsTUFBTSxDQUFDLEdBQUUsT0FBTUEsS0FBRSxRQUFPLFNBQVFBLEtBQUUsUUFBTyxXQUFVQSxLQUFFLFVBQVUsQ0FBQ0EsS0FBRSxRQUFPQSxLQUFFLE1BQU0sQ0FBQyxHQUFFLGFBQVlBLEtBQUUsS0FBSTtBQUFFLEVBQUFKLElBQUUsZUFBYSxFQUFDLFFBQU8sT0FBRyxXQUFVLElBQUcsTUFBSyxNQUFLLFFBQU8s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cUJBQVcsT0FBTyxZQUFZLEtBQUs7QUFDbkMsY0FBSSxDQUFDLFVBQVU7QUFDYixrQkFBTSx3QkFBd0I7QUFDOUI7QUFBQSxVQUNGO0FBQ0EsdUJBQWEsUUFBUSxZQUFZLFFBQVM7QUFDMUMsMkJBQWlCLElBQUksb0JBQW9CLElBQUksUUFBUTtBQUFBLFFBQ3ZEO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxRQUFJLGNBQWMsSUFBSSxNQUFNLGNBQWM7QUFDMUMsZ0JBQVksTUFBTTtBQUVsQixZQUFRLElBQUksWUFBWTtBQUV4QixRQUFJLFdBQVcsa0JBQWtCLGdCQUFnQjtBQUVqRCxRQUFJLFNBQVMsSUFBSTtBQUFBLE1BQ2Y7QUFBQSxNQUNBLFNBQVMsZUFBZSxTQUFTO0FBQUEsTUFDakM7QUFBQSxNQUNBLFNBQVMsYUFBYTtBQUFBLElBQ3hCO0FBQ0EsVUFBTSxPQUFPLEtBQUs7QUFFbEIsV0FBTyxTQUFTO0FBQUEsRUFDbEIsQ0FBQzsiLAogICJuYW1lcyI6IFsiZSIsICJuIiwgInQiLCAibCIsICJvIiwgInIiLCAieSIsICJoIiwgIlQiLCAicSIsICJIIiwgIkMiLCAiSiIsICJwIiwgIkwiLCAiTiIsICJLIiwgIlEiLCAiUyIsICJtIiwgInciLCAiZyIsICJqIiwgIkUiLCAiRiIsICJQIiwgIlIiLCAieCIsICJhIiwgIkkiLCAiZiIsICJiIiwgInYiLCAiZCIsICJzIiwgImMiLCAibGUiLCAidSIsICJpIiwgIk0iLCAiXyIsICJrIiwgIlkiLCAiVSIsICJXIiwgIm9lIiwgInNlIiwgIloiLCAiJCIsICJHIiwgIlgiLCAiZSIsICJ0IiwgInIiLCAidSIsICJvIiwgIlYiLCAibiIsICJFIiwgInkiLCAiaiIsICJ4IiwgIkkiLCAidyIsICJBIiwgIkYiLCAibCIsICJPIiwgImVlIiwgIl8iLCAiTCIsICJxIiwgImQiLCAiRCIsICJTIiwgIkMiLCAiUiIsICJNIiwgIk4iLCAiVSIsICJmIiwgInMiLCAiYyIsICJpIiwgInAiLCAidGUiLCAiayIsICJyZSIsICJQIiwgImgiLCAibSIsICJ2IiwgIm5lIiwgIlQiLCAiYSIsICJvZSIsICJ6IiwgImNlIiwgIkIiLCAicGUiLCAieWUiLCAiZGUiLCAiX2UiLCAidmUiLCAibWUiLCAiaGUiLCAiQ2UiLCAia2UiLCAiZ2UiLCAiUGUiLCAieGUiLCAiSWUiLCAid2UiLCAiTWUiLCAiX19vYmplY3RfYXNzaWduJCIsICJlIiwgIm4iLCAidCIsICJyIiwgImwiLCAiaWUiLCAieXIiLCAiTWUiLCAiTSIsICJVIiwgInYiLCAib3QiLCAiSmUiLCAia24iLCAid2UiLCAiUnMiLCAiUmkiLCAiRGkiLCAiSWkiLCAiRHMiLCAiSXMiLCAiRnMiLCAiWCIsICJpIiwgIm8iLCAiSCIsICJxZSIsICJBbiIsICJXZSIsICJrZSIsICJLbiIsICJnciIsICJHbiIsICJLdCIsICJ3ciIsICJGIiwgIkZpIiwgIk9uIiwgIk1yIiwgIlFuIiwgIlJyIiwgIl90IiwgInMiLCAidSIsICJqcyIsICJkbiIsICJEZSIsICJVcyIsICJOdCIsICJHdCIsICJqaSIsICJVaSIsICJWcyIsICJwbiIsICJWaSIsICJCaSIsICJQdCIsICJ1dCIsICJabiIsICJCcyIsICJIcyIsICJtbiIsICJobiIsICJIaSIsICJFdCIsICJfciIsICJBZSIsICJEciIsICJXcyIsICJzdCIsICJubiIsICJBcyIsICJkIiwgInkiLCAiSm4iLCAiWnQiLCAiSnQiLCAiUXMiLCAiJHMiLCAiWXMiLCAiYmUiLCAiV2kiLCAiWHMiLCAiQWkiLCAiZWkiLCAic2UiLCAiTmUiLCAiUGUiLCAiVGUiLCAiYXQiLCAiZnQiLCAiTW4iLCAiUWkiLCAiJGkiLCAiUm4iLCAiS3MiLCAiR3MiLCAiUWUiLCAiVXQiLCAibGkiLCAiWWkiLCAiWnMiLCAiRG4iLCAiVHQiLCAib24iLCAiSXIiLCAiU3IiLCAibmkiLCAiSnMiLCAidGkiLCAicXMiLCAiTCIsICJybiIsICJicyIsICJlYSIsICJjdCIsICJJZSIsICJxdCIsICJsbiIsICJGciIsICJFciIsICJyYSIsICJuYSIsICJsYSIsICJpYSIsICJWdCIsICJvYSIsICJyaSIsICJ1YSIsICJ4ZSIsICJpaSIsICJCdCIsICJIdCIsICJMdCIsICJYaSIsICJiIiwgIk5uIiwgIm9pIiwgIlN0IiwgInNhIiwgImpyIiwgIlVyIiwgIkluIiwgImtyIiwgInVpIiwgIktpIiwgImFhIiwgImZhIiwgImNhIiwgIlZyIiwgImRhIiwgInBhIiwgIm1hIiwgImhhIiwgInZhIiwgIkdpIiwgInlhIiwgImdhIiwgIndhIiwgIlNhIiwgIkVhIiwgImthIiwgInhhIiwgIlppIiwgIkNhIiwgIl9hIiwgIk5hIiwgIlBhIiwgIlRhIiwgIkxhIiwgInphIiwgInNpIiwgInFuIiwgIk9hIiwgIkppIiwgInFpIiwgInVuIiwgIk1hIiwgIlJhIiwgIkRhIiwgImJpIiwgImJ0IiwgImJuIiwgImR0IiwgIklhIiwgInhyIiwgImFuIiwgIkZhIiwgIk90IiwgIkJyIiwgInp0IiwgImVvIiwgImphIiwgIlVhIiwgIlZhIiwgIkJhIiwgIkhhIiwgImVlIiwgIldhIiwgInB0IiwgIm5vIiwgIkFhIiwgInNuIiwgImV0IiwgIkhyIiwgIk10IiwgIiRuIiwgImlvIiwgInoiLCAidW8iLCAiQyIsICJoIiwgIlMiLCAiayIsICJFIiwgImMiLCAiYSIsICJmIiwgInAiLCAibSIsICJtdCIsICJQbiIsICJ0biIsICJzbyIsICJfIiwgInciLCAiTiIsICJUIiwgImVyIiwgIldyIiwgIkFyIiwgIlFhIiwgImFpIiwgInZuIiwgIlFyIiwgIiRhIiwgIkNyIiwgIkNlIiwgIm5yIiwgImZuIiwgIlZlIiwgIk8iLCAiRCIsICJGZSIsICIkIiwgIloiLCAiS2UiLCAieG4iLCAiSiIsICJ0ciIsICJXdCIsICJtbyIsICJmaSIsICJYZSIsICJZYSIsICJjaSIsICJYYSIsICJLYSIsICJOciIsICIkciIsICJHYSIsICJtZSIsICJBdCIsICJZciIsICJBIiwgIkNuIiwgIkdlIiwgImh0IiwgInBlIiwgIlphIiwgIm9lIiwgInJyIiwgImxyIiwgImNuIiwgImlyIiwgImRpIiwgInBpIiwgInluIiwgInVlIiwgInJlIiwgIkVlIiwgIm1pIiwgIkxlIiwgInplIiwgInlvIiwgInZ0IiwgInh0IiwgIm9yIiwgIlByIiwgInEiLCAiT2UiLCAid28iLCAiUnQiLCAiRm4iLCAiRHQiLCAiVWUiLCAiSnIiLCAiWHQiLCAicXIiLCAiRW4iLCAiUCIsICJTZSIsICJfcyIsICJ1ciIsICJrdCIsICJjZSIsICJ5dCIsICJndCIsICIkZSIsICJfbiIsICJoaSIsICJSIiwgInNyIiwgInZlIiwgIl9lIiwgImRlIiwgIm5lIiwgIkl0IiwgIlhyIiwgImduIiwgInZpIiwgIm50IiwgInRlIiwgInd0IiwgIkkiLCAiVyIsICJWIiwgImFyIiwgInR0IiwgIksiLCAieWkiLCAiZ2kiLCAicWEiLCAiYmEiLCAicHIiLCAiWWUiLCAiZW4iLCAiYWUiLCAiam4iLCAiVW4iLCAiWSIsICJFaSIsICJWbiIsICJmciIsICJjciIsICJ3aSIsICJkciIsICJTaSIsICJlcyIsICJKYSIsICJHIiwgInllIiwgIlBpIiwgIm5zIiwgIktyIiwgImp0IiwgInRzIiwgIkZ0IiwgIlRpIiwgIkdyIiwgInJzIiwgIkJuIiwgIkIiLCAiTG4iLCAid24iLCAiUSIsICJOaSIsICJraSIsICJvcyIsICJociIsICJ1cyIsICJmZSIsICJSZSIsICJ2cyIsICJzcyIsICJaciIsICJfaSIsICJtciIsICJ4aSIsICJ4IiwgImoiLCAiWmUiLCAiVHIiLCAiVG4iLCAiQ2kiLCAiem4iLCAiZyIsICJqZSIsICJydCIsICJZbiIsICJnZSIsICJsdCIsICJRdCIsICJoZSIsICIkdCIsICJpdCIsICJZdCIsICJMciIsICJsZSIsICJCZSIsICJwcyIsICJTbiIsICJkcyIsICJYbiIsICJIZSIsICJmcyIsICJtcyIsICJ5cyIsICJ2ciIsICJiciIsICJMaSIsICJ6aSIsICJDdCIsICJ6ciIsICJncyIsICJIbiIsICJXbiIsICJFcyIsICJTcyIsICJlIiwgInQiLCAibiIsICJpIiwgImIiLCAiViIsICJzIiwgInIiLCAiaCIsICJ0ZSIsICJuZSIsICJqZSIsICJmZSIsICJJZSIsICJlZSIsICJvIiwgImEiLCAiZiIsICJjIiwgInAiLCAidSIsICJFIiwgImQiLCAibCIsICIkIiwgIkFlIiwgIlBlIiwgImllIiwgIkZlIiwgIlRlIiwgImJlIiwgInVlIiwgIk8iLCAiY2UiLCAiQ2UiLCAiZGUiLCAiQiIsICJnIiwgInllIiwgIkEiLCAiU2UiLCAieiIsICJnZSIsICJPZSIsICJyZSIsICJrIiwgIkoiLCAiSyIsICJFZSIsICJIIiwgInNlIiwgIlEiLCAiRyIsICJoZSIsICJEZSIsICJxZSIsICJMZSIsICIkZSIsICJEIiwgInBlIiwgIm1lIiwgIndlIiwgIlciLCAiX2UiLCAidmUiLCAia2UiLCAiWCIsICJsZSIsICJaIiwgIk1lIiwgInhlIiwgImFlIiwgIlkiLCAiUmUiLCAiUyIsICJ3IiwgImIiLCAiVCIsICJlIiwgImwiLCAidSIsICJuIiwgInQiLCAicyIsICJpIiwgImgiLCAieCIsICJkIiwgInIiLCAiZyIsICJhIiwgIm8iLCAiZiIsICJ5IiwgIm0iLCAicCIsICJnIiwgInkiLCAibyIsICJmIiwgImUiLCAic2UiLCAicyIsICJ0IiwgIm5lIiwgImUiLCAiaSIsICJyZSIsICJuIiwgInIiLCAieGUiLCAibyIsICJsIiwgImgiLCAiYSIsICJjIiwgImYiLCAiZCIsICJiIiwgInUiLCAicCIsICJtIiwgImciLCAiRWUiLCAiQiIsICJBIiwgIk1pIiwgIm9lIiwgInoiLCAiQmUiLCAiUGUiLCAiSGUiLCAiU2UiLCAiTWUiLCAieSIsICIkIiwgIk5lIiwgInEiLCAiaiIsICJsZSIsICJWZSIsICJ3cyIsICJsdCIsICJ4cyIsICJXZSIsICJGZSIsICJYIiwgIlQiLCAiVSIsICJDcyIsICJ6ZSIsICJIIiwgIlkiLCAiaGUiLCAiTXMiLCAia3MiLCAiSWUiLCAiVHMiLCAiT3MiLCAibnQiLCAiQ2UiLCAiViIsICJMcyIsICJJIiwgIlIiLCAicWUiLCAiS2UiLCAiSyIsICJydCIsICJPIiwgIlBzIiwgIk5zIiwgImllIiwgInN0IiwgImFlIiwgIk9pIiwgImNlIiwgImZlIiwgImRlIiwgImplIiwgIl9lIiwgImtlIiwgIiRlIiwgIlMiLCAidyIsICJ6cyIsICJBZSIsICJHZSIsICJQIiwgIlhlIiwgIlllIiwgIlVlIiwgInVlIiwgInBlIiwgIl8iLCAiRCIsICJOIiwgIlciLCAiSmUiLCAibWUiLCAiWmUiLCAiUWUiLCAiZ2UiLCAidiIsICJEZSIsICJMIiwgIk0iLCAiaXQiLCAiYmUiLCAiSiIsICJaIiwgIl90IiwgInhpIiwgImh0IiwgIlEiLCAiZnQiLCAiYXQiLCAiTXQiLCAidHQiLCAiZXQiLCAiJHQiLCAiR3QiLCAiVGUiLCAidGUiLCAiT3IiLCAiViIsICJzIiwgInQiLCAiZSIsICJpIiwgIm4iLCAiT2UiLCAieWUiLCAidCIsICJlIiwgImkiLCAibiIsICJyIiwgIm8iLCAibCIsICJoIiwgImEiLCAicyIsICJ0IiwgImVlIiwgIkEiLCAiZSIsICJpIiwgInkiLCAibiIsICJWIiwgInllIiwgIk9lIiwgInIiLCAibyIsICJsIiwgImgiLCAiYSIsICJjIiwgImYiLCAiZCIsICJ1IiwgInAiLCAiYiIsICJSIiwgIm0iLCAiZyIsICJTIiwgInciLCAidiIsICJNIiwgInMiLCAidCIsICJlIiwgImkiLCAiQSIsICJzIiwgInQiLCAiZSIsICJpIiwgInMiLCAidCIsICJlIiwgImkiLCAiViIsICJoIiwgIm4iLCAiciIsICJvIiwgImwiLCAiYSIsICJjIiwgIk0iLCAiQSIsICJHIiwgImllIiwgIkEiLCAiQSIsICJzIiwgInQiLCAiViIsICJzIiwgInQiLCAid2UiLCAiZSIsICJpIiwgImllIiwgIm4iLCAiciIsICJvIiwgImwiLCAiVCIsICJNIiwgIlIiLCAiaCIsICJ2ZSIsICJhIiwgImMiLCAiZiIsICJBIiwgIkciLCAiUmUiLCAicyIsICJ0IiwgIkciLCAiaWUiLCAiZSIsICJpIiwgIm4iLCAiSWUiLCAiQ2UiLCAiQiIsICJlIiwgInQiLCAidyIsICJOIiwgInIiLCAiaCIsICJuZSIsICJfZSIsICJpIiwgIm4iLCAicyIsICJaIiwgIlgiLCAiZ2UiLCAiQSIsICJQIiwgImwiLCAiViIsICJJIiwgInEiLCAicGUiLCAiU2UiLCAiSyIsICJUIiwgImYiLCAia2UiLCAiQWUiLCAidSIsICJvIiwgImMiLCAiYSIsICJNIiwgInNlIiwgImFlIiwgInkiLCAiZWUiLCAidGUiLCAieCIsICJ2IiwgInAiLCAibSIsICJDIiwgImIiLCAiZyIsICJrIiwgInoiLCAiTyIsICJXIiwgIkoiLCAiVSIsICJMIiwgImNlIiwgIlMiLCAiaiIsICJSIiwgIkQiLCAiSCIsICIkIiwgIlEiLCAiZGUiLCAiZCIsICJFIiwgIkYiLCAiXyIsICJtZSIsICJZIiwgImJlIiwgIkciLCAieWUiLCAibGUiLCAiTmUiLCAib2UiLCAicmUiLCAiaGUiLCAiZmUiLCAidWUiLCAiUGUiLCAiemUiLCAid2UiLCAidmUiLCAieGUiLCAiaWUiLCAiQmUiLCAiTCIsICJ0IiwgImEiLCAiaSIsICJ2IiwgImwiLCAiUSIsICJvIiwgIlUiLCAicyIsICJjIiwgIlYiLCAiZCIsICJyIiwgIiQiLCAicCIsICJoIiwgIk4iLCAiZyIsICJPIiwgIk0iLCAieiIsICJ3IiwgIlciLCAiWCIsICJfIiwgIlAiLCAiWSIsICJHIiwgIngiLCAiRCIsICJTIiwgIkEiLCAicSIsICJIIiwgIkUiLCAiSSIsICJiIiwgIkIiLCAiRiIsICJ5IiwgIkMiLCAiSyIsICJrIiwgIm0iLCAiaiIsICJSIiwgIlQiLCAibiIsICJ0dCIsICJZIiwgIlQiLCAidyIsICJjIiwgInQiLCAiZSIsICJyIiwgIm0iLCAiUCIsICJpIiwgInMiLCAibyIsICJ1dCIsICJUIiwgImwiLCAidyIsICJhIiwgImgiLCAibiIsICJBIiwgIm0iLCAibiIsICJ0IiwgImMiLCAiUCIsICJldCIsICJ0IiwgImUiLCAiciIsICJJIiwgIngiLCAiaSIsICJzIiwgIm8iLCAibCIsICJhIiwgIlAiLCAiRyIsICJjdCIsICJoIiwgInUiLCAiZCIsICJnIiwgInllIiwgIk4iLCAibiIsICJTIiwgImMiLCAiSiIsICJ4dCIsICJaIiwgIlkiLCAiU3QiLCAiViIsICJudCIsICJBIiwgIlB0IiwgIkEiLCAiQXQiLCAibiIsICJyZSIsICJ3IiwgInVlIiwgIkEiLCAiY2UiLCAidyIsICJPdCIsICJuIiwgInQiLCAiZSIsICJyIiwgIl8iLCAiUiIsICJBIiwgIkoiLCAibiIsICJ0IiwgImUiLCAiXyIsICJtZSIsICJwdCIsICJSIiwgInIiLCAiaSIsICJzIiwgIk0iLCAieiIsICJuIiwgInQiLCAiZSIsICJyIiwgImkiLCAiQSIsICJzIiwgIm8iLCAibWUiLCAieWUiLCAiRXQiLCAiQSIsICJuIiwgInB0IiwgIlgiLCAibiIsICJ0IiwgImUiLCAiRXQiLCAiciIsICJzIiwgIm8iLCAibCIsICJ6IiwgIlIiLCAiaSIsICJ4ZSIsICJNIiwgIkQiLCAidCIsICJlIiwgInIiLCAiaSIsICJsIiwgImEiLCAiVCIsICJzIiwgIm8iLCAiYyIsICJXIiwgIm50IiwgIkEiLCAiUnQiLCAibiIsICJMIiwgInJ0IiwgInQiLCAibSIsICJMIiwgImUiLCAiciIsICJpIiwgIloiLCAicyIsICJfIiwgIm8iLCAibCIsICJhIiwgIlNlIiwgIlYiLCAibiIsICJzbiIsICJEIiwgIlBlIiwgIk0iLCAiVXQiLCAiV3QiLCAiQSIsICJUZSIsICJBZSIsICJDZSIsICJEZSIsICJKIiwgIlUiLCAiaXQiLCAibiIsICJ0IiwgImUiLCAiciIsICJ3IiwgImkiLCAiVSIsICJVdCIsICJzIiwgIld0IiwgIm8iLCAibSIsICJsIiwgImEiLCAiaCIsICJPZSIsICJOZSIsICJ1IiwgImQiLCAiZyIsICJRIiwgIkMiLCAiR3QiLCAiWCIsICJodCIsICJGIiwgIk4iLCAiRmUiLCAiWiIsICJWdCIsICJuIiwgInQiLCAienQiLCAiSCIsICJSZSIsICJ0dCIsICJlIiwgInMiLCAibyIsICJyIiwgImkiLCAiJCIsICJGIiwgImUiLCAidCIsICJpIiwgIm0iLCAibyIsICJzIiwgIkFlIiwgInVlIiwgIm4iLCAiWWUiLCAiR2UiLCAiTiIsICJlIiwgInQiLCAiaSIsICJJIiwgIm4iLCAiQWUiLCAibyIsICJzIiwgIkh0IiwgIkQiLCAiSmUiLCAiZyIsICJUZSIsICJoZSIsICJaZSIsICJHZSIsICJfIiwgImJlIiwgInIiLCAiaCIsICJsIiwgImMiLCAiYSIsICJRIiwgIlQiLCAiZiIsICJ1IiwgIkMiLCAiYiIsICJBIiwgIksiLCAiamUiLCAieiIsICJtIiwgImoiLCAiWCIsICJ4IiwgIl9lIiwgImV0IiwgInBlIiwgImVlIiwgIm50IiwgIlIiLCAidHQiLCAiZGUiLCAiaXQiLCAiUCIsICJtZSIsICJkIiwgIk0iLCAibHQiLCAicCIsICJvdCIsICJsZSIsICJzdCIsICJ0ZSIsICJzZSIsICJIIiwgIk1lIiwgIk8iLCAicnQiLCAiRiIsICJKIiwgIlUiLCAiY3QiLCAiYXQiLCAibmUiLCAiZ2UiLCAidXQiLCAiaHQiLCAicHQiLCAiViIsICJSZSIsICJpZSIsICJCIiwgIkF0IiwgImR0IiwgIm10IiwgIlMiLCAiJCIsICJndCIsICJyZSIsICJDdCIsICJJdCIsICJCZSIsICJ4dCIsICJ5dCIsICJ3dCIsICJ2dCIsICJWdCIsICJMIiwgIkUiLCAibiIsICJlIiwgInQiLCAiY2UiLCAiYWUiLCAiTGUiLCAiSiIsICJpIiwgIlkiLCAia2UiLCAibiIsICJlIiwgIldlIiwgIkwiLCAiUHQiLCAiT3QiLCAiTSIsICJ0IiwgImkiLCAibyIsICJiZSIsICJzIiwgIlR0IiwgIlR0IiwgIm4iLCAiZSIsICJ0IiwgIldlIiwgImkiLCAiTCIsICJvIiwgInMiLCAia2UiLCAiRHQiLCAiUnQiLCAiJGUiLCAiQnQiLCAiTGUiLCAicSIsICJiZSIsICJSdCIsICJuIiwgImUiLCAidCIsICJpIiwgIm8iLCAicyIsICJyIiwgIkUiLCAiZyIsICJsIiwgInEiLCAiQnQiLCAiY2UiLCAiRHQiLCAiTCIsICJjIiwgImEiLCAiZiIsICJ2ZSIsICIkZSIsICJ1IiwgIkNlIiwgIkx0IiwgIm0iLCAiUXQiLCAiZCIsICJ4IiwgInB0IiwgIld0IiwgIlJlIiwgImF0IiwgIlUiLCAiY3QiLCAic3RyIiwgImkiLCAiQnVmZmVyIiwgIm4iLCAibCIsICJwIiwgInJyIiwgIm0iLCAiaSIsICJjIiwgInIiLCAibWFwIiwgIkJ1ZmZlciIsICJ2IiwgImQiLCAiZnVuYyIsICJjIiwgImNoIiwgInYiLCAiZCIsICJfdG9TdHJpbmciLCAicmVnZXhwIiwgImhhc093biIsICJqc29uIiwgImhhc093biIsICJjIiwgImkiLCAiY2giLCAiZm4iLCAiaGFzT3duIiwgIm1hcCIsICJfdG9TdHJpbmciLCAiaGFzT3duIiwgInN0ciIsICJjIiwgImkiLCAiRGVubyIsICJuYXZpZ2F0b3IiLCAicGFyc2UiLCAiQ0hBUl9DT0xPTiIsICJwYXRoIiwgImlzUGF0aFNlcGFyYXRvciIsICJpIiwgInNlcCIsICJjIiwgImkiLCAicGF0aCIsICJEZW5vIiwgImlzQWJzb2x1dGUiLCAiaiIsICJDSEFSX0NPTE9OIiwgImZyb20iLCAicGFyc2UiLCAiYmFzZW5hbWUiLCAiZGVsaW1pdGVyIiwgImRpcm5hbWUiLCAiZXh0bmFtZSIsICJmb3JtYXQiLCAiZnJvbUZpbGVVcmwiLCAiaXNBYnNvbHV0ZSIsICJqb2luIiwgIm5vcm1hbGl6ZSIsICJwYXJzZSIsICJyZWxhdGl2ZSIsICJyZXNvbHZlIiwgInNlcCIsICJ0b0ZpbGVVcmwiLCAidG9OYW1lc3BhY2VkUGF0aCIsICJzZXAiLCAiZGVsaW1pdGVyIiwgInJlc29sdmUiLCAiaSIsICJwYXRoIiwgIkRlbm8iLCAibm9ybWFsaXplIiwgImlzQWJzb2x1dGUiLCAiam9pbiIsICJyZWxhdGl2ZSIsICJmcm9tIiwgInRvTmFtZXNwYWNlZFBhdGgiLCAiZGlybmFtZSIsICJiYXNlbmFtZSIsICJleHRuYW1lIiwgImZvcm1hdCIsICJwYXJzZSIsICJmcm9tRmlsZVVybCIsICJ0b0ZpbGVVcmwiLCAiam9pbiIsICJub3JtYWxpemUiLCAicGF0aCIsICJiYXNlbmFtZSIsICJkZWxpbWl0ZXIiLCAiZGlybmFtZSIsICJleHRuYW1lIiwgImZvcm1hdCIsICJmcm9tRmlsZVVybCIsICJpc0Fic29sdXRlIiwgImpvaW4iLCAibm9ybWFsaXplIiwgInBhcnNlIiwgInJlbGF0aXZlIiwgInJlc29sdmUiLCAic2VwIiwgInRvRmlsZVVybCIsICJ0b05hbWVzcGFjZWRQYXRoIiwgInBhdGgiLCAiQ2UiLCAiQiIsICJlIiwgInQiLCAidyIsICJOIiwgInIiLCAiaCIsICJfZSIsICJOIiwgImUiLCAidCIsICJyIiwgImkiLCAibiIsICJ3IiwgInMiLCAiWiIsICJYIiwgImdlIiwgIkEiLCAiaCIsICJQIiwgImwiLCAiViIsICJJIiwgInEiLCAicGUiLCAiU2UiLCAiSyIsICJUIiwgImYiLCAia2UiLCAiQWUiLCAidSIsICJvIiwgImMiLCAiYSIsICJNIiwgInNlIiwgImFlIiwgInkiLCAiZWUiLCAidGUiLCAieCIsICJ2IiwgInAiLCAibSIsICJDIiwgImIiLCAiZyIsICJrIiwgInoiLCAiTyIsICJXIiwgIkoiLCAiVSIsICJMIiwgImNlIiwgIlMiLCAiaiIsICJSIiwgIkQiLCAiSCIsICIkIiwgIlEiLCAiZGUiLCAiZCIsICJFIiwgIkYiLCAiXyIsICJtZSIsICJZIiwgIkciLCAiZSIsICJ0IiwgInIiLCAiaSIsICJuIiwgInMiLCAibCIsICJmIiwgInUiLCAibyIsICJjIiwgImEiLCAieSIsICJkIiwgInllIiwgImxlIiwgIkIiLCAiZmUiLCAidyIsICJMIiwgImYiLCAidCIsICJhIiwgImkiLCAidiIsICJsIiwgIlEiLCAibyIsICJVIiwgInMiLCAiYyIsICJWIiwgImQiLCAiciIsICIkIiwgInAiLCAiaCIsICJOIiwgImciLCAiTyIsICJNIiwgInoiLCAidyIsICJXIiwgIlgiLCAiXyIsICJQIiwgIlkiLCAiRyIsICJ4IiwgIkQiLCAiUyIsICJBIiwgInEiLCAiSCIsICJFIiwgImUiLCAiSSIsICJiIiwgIkIiLCAiRiIsICJ5IiwgIkMiLCAiSyIsICJrIiwgIm0iLCAidSIsICJqIiwgIlIiLCAiVCIsICJuIiwgInR0IiwgIlMiLCAidyIsICJjIiwgImIiLCAiVCIsICJlIiwgImwiLCAidSIsICJuIiwgInQiLCAicyIsICJpIiwgImgiLCAieCIsICJkIiwgInIiLCAiZyIsICJhIiwgIm8iLCAiZiIsICJ5IiwgIm0iLCAicCIsICJZIiwgIlQiLCAidyIsICJjIiwgInQiLCAiZSIsICJyIiwgIm0iLCAiUCIsICJpIiwgInMiLCAibyIsICJ1dCIsICJUIiwgImwiLCAidyIsICJhIiwgImgiLCAibiIsICJBIiwgIm0iLCAibiIsICJ0IiwgImMiLCAiUCIsICJldCIsICJ0IiwgImUiLCAiciIsICJJIiwgIngiLCAiaSIsICJzIiwgIm8iLCAibCIsICJhIiwgIlAiLCAiRyIsICJjdCIsICJoIiwgInUiLCAiZCIsICJnIiwgInllIiwgIk4iLCAibiIsICJTIiwgImMiLCAiSiIsICJ4dCIsICJaIiwgIlkiLCAiU3QiLCAiViIsICJudCIsICJBIiwgIlB0IiwgIkEiLCAiQXQiLCAibiIsICIkIiwgInQiLCAiQ3QiLCAiZSIsICJyIiwgImkiLCAiVHQiLCAiTSIsICJtIiwgImllIiwgIk0iLCAidCIsICJlIiwgIiQiLCAiciIsICJpIiwgInMiLCAibyIsICJyZSIsICJ3IiwgImllIiwgIm4iLCAiRHQiLCAic2UiLCAib2UiLCAiSXQiLCAibGUiLCAiRSIsICJhZSIsICJoZSIsICJsIiwgImEiLCAiSXQiLCAibiIsICJ0IiwgImUiLCAiciIsICJpIiwgInMiLCAibyIsICJsIiwgImEiLCAiaGUiLCAidWUiLCAiQSIsICJjZSIsICJ3IiwgIk90IiwgIm4iLCAidCIsICJlIiwgInIiLCAiXyIsICJSIiwgIkEiLCAiSiIsICJuIiwgInQiLCAiZSIsICJfIiwgIm1lIiwgInB0IiwgIlIiLCAiciIsICJpIiwgInMiLCAiTSIsICJ6IiwgIm4iLCAidCIsICJlIiwgInIiLCAiaSIsICJBIiwgInMiLCAibyIsICJtZSIsICJ5ZSIsICJFdCIsICJBIiwgIm4iLCAicHQiLCAiWCIsICJuIiwgInQiLCAiZSIsICJFdCIsICJyIiwgInMiLCAibyIsICJsIiwgInoiLCAiUiIsICJpIiwgInhlIiwgIk0iLCAiRCIsICJ0IiwgImUiLCAiciIsICJpIiwgImwiLCAiYSIsICJUIiwgInMiLCAibyIsICJjIiwgIlciLCAibnQiLCAiQSIsICJSdCIsICJuIiwgIkwiLCAicnQiLCAidCIsICJtIiwgIkwiLCAiZSIsICJyIiwgImkiLCAiWiIsICJzIiwgIl8iLCAibyIsICJsIiwgImEiLCAiU2UiLCAiViIsICJuIiwgInNuIiwgIkQiLCAiUGUiLCAiTSIsICJVdCIsICJXdCIsICJMdCIsICJBIiwgIlRlIiwgIkFlIiwgIkNlIiwgIkRlIiwgIkoiLCAiVSIsICJpdCIsICJuIiwgInQiLCAiZSIsICJyIiwgInciLCAiaSIsICJVIiwgIlV0IiwgInMiLCAiV3QiLCAibyIsICJtIiwgImwiLCAiYSIsICJoIiwgIk9lIiwgIk5lIiwgInUiLCAiZCIsICJnIiwgIlEiLCAiQyIsICJHdCIsICJYIiwgImh0IiwgIkYiLCAiTiIsICJGZSIsICJaIiwgImd0IiwgIlZ0IiwgIm4iLCAidCIsICJ6dCIsICJIIiwgIlJlIiwgInR0IiwgImUiLCAicyIsICJvIiwgInIiLCAiaSIsICIkIiwgInR0IiwgImUiLCAidCIsICJlZSIsICJudCIsICJvdCIsICJEIiwgInIiLCAibiIsICJsIiwgInRlIiwgInJ0IiwgInciLCAiaG4iLCAiY3QiLCAiTyIsICJsdCIsICJvIiwgImMiLCAicyIsICJpIiwgInUiLCAiZiIsICJhIiwgImQiLCAiUyIsICJNIiwgIlgiLCAic3QiLCAiaXQiLCAiQSIsICJ5ZSIsICJ1dCIsICJHIiwgIkoiLCAiayIsICJnIiwgIm0iLCAiTiIsICJTZSIsICJrZSIsICJZIiwgIlYiLCAiZSIsICJ0IiwgInIiLCAibiIsICJsIiwgIkciLCAibyIsICJrZSIsICJZIiwgImZ0IiwgImF0IiwgIkFlIiwgImduIiwgInluIiwgIm0iLCAiTyIsICJnIiwgInkiLCAiaXQiLCAiTiIsICJodCIsICJjIiwgInMiLCAiaSIsICJ1IiwgImYiLCAiZHQiLCAiQmUiLCAibXQiLCAiU2UiLCAicHQiLCAiVyIsICJndCIsICJ5dCIsICJrIiwgIlgiLCAia24iLCAieCIsICJCIiwgIkEiLCAiYiIsICJQIiwgInAiLCAiUiIsICJDZSIsICJEZSIsICJ2IiwgImUiLCAidCIsICJBIiwgInIiLCAiYiIsICJrdCIsICJwIiwgIkF0IiwgIkJ0IiwgImUiLCAidCIsICJyIiwgIm4iLCAiSiIsICJtIiwgImwiLCAidyIsICJpIiwgInUiLCAibyIsICJjIiwgInMiLCAiVSIsICJnIiwgIlN0IiwgIkEiLCAicCIsICJDdCIsICJNZSIsICJiIiwgIk9lIiwgIkVlIiwgImJlIiwgIlRlIiwgIngiLCAiTSIsICJCIiwgIm9lIiwgIloiLCAiQyIsICJEdCIsICJMdCIsICJ4dCIsICJPdCIsICJFdCIsICJSZSIsICJidCIsICJnIiwgImUiLCAidCIsICJyIiwgIngiLCAibiIsICJsIiwgIkIiLCAiRiIsICJJZSIsICJwIiwgIlVlIiwgInoiLCAiZSIsICJ0IiwgImciLCAiciIsICJUdCIsICJwIiwgIlJ0IiwgIkl0IiwgImUiLCAiZyIsICJ0IiwgIkoiLCAicCIsICJVdCIsICJ3ZSIsICJyIiwgIkdlIiwgIlZlIiwgIlBlIiwgImJlIiwgImxlIiwgImNlIiwgIk50IiwgIkMiLCAid3QiLCAiVnQiLCAiUHQiLCAidnQiLCAic2UiLCAiQiIsICJpZSIsICJ1ZSIsICJmZSIsICJKdCIsICJGdCIsICIkIiwgIm4iLCAibCIsICJ6dCIsICJ4IiwgIm8iLCAibSIsICJxdCIsICJxIiwgImMiLCAicyIsICJpIiwgIlIiLCAiTSIsICJ2ZSIsICJ1IiwgIl8iLCAiSmUiLCAiRmUiLCAiZiIsICJ6ZSIsICJxZSIsICJLdCIsICJXdCIsICJlIiwgInQiLCAiciIsICJuIiwgImciLCAiSHQiLCAibCIsICJvIiwgImMiLCAiaWUiLCAicyIsICIkIiwgIiRlIiwgImkiLCAiUXQiLCAiWHQiLCAiS2UiLCAiWXQiLCAiWnQiLCAieCIsICJlIiwgInQiLCAiciIsICJtIiwgIm4iLCAibCIsICJvIiwgInciLCAiZW4iLCAiV2UiLCAidG4iLCAiYyIsICJzIiwgImkiLCAidSIsICJNIiwgImYiLCAiVHQiLCAiYSIsICJDdCIsICJnIiwgIm5lIiwgIm5uIiwgInJlIiwgIkF0IiwgIkhlIiwgIiQiLCAicm4iLCAiQ2UiLCAiSWUiLCAiRGUiLCAiVWUiLCAiT2UiLCAiR2UiLCAiRWUiLCAiVmUiLCAiT3QiLCAiUHQiLCAiRXQiLCAidnQiLCAiSmUiLCAiXyIsICJxZSIsICJ6ZSIsICJXdCIsICJIdCIsICJaIiwgIm9uIiwgImt0IiwgIlR0IiwgInh0IiwgIkF0IiwgIlJ0IiwgIlZ0IiwgInNlIiwgInVlIiwgIm9lIiwgImxlIiwgImllIiwgImZlIiwgImNlIiwgIkx0IiwgInd0IiwgIkR0IiwgIk50IiwgImVuIiwgIkp0IiwgIkt0IiwgImUiLCAid24iLCAiU3QiLCAiSXQiLCAiQ3QiLCAiVXQiLCAiUXQiLCAiWXQiLCAiWHQiLCAiWnQiLCAicXQiLCAidG4iLCAiRnQiLCAienQiLCAiSGUiLCAicmUiLCAibm4iLCAiYnQiLCAidHQiLCAicnQiLCAiR24iLCAiTCIsICJmIiwgInQiLCAiYSIsICJpIiwgInYiLCAibCIsICJRIiwgIm8iLCAiVSIsICJzIiwgImMiLCAiViIsICJkIiwgInIiLCAiJCIsICJwIiwgImgiLCAiTiIsICJnIiwgIk8iLCAiTSIsICJ6IiwgInciLCAiVyIsICJYIiwgIl8iLCAiUCIsICJZIiwgIkciLCAieCIsICJEIiwgIlMiLCAiQSIsICJxIiwgIkgiLCAiRSIsICJlIiwgIkkiLCAiYiIsICJCIiwgIkYiLCAieSIsICJDIiwgIksiLCAiayIsICJtIiwgInUiLCAiaiIsICJSIiwgIlQiLCAibiIsICJ0dCIsICJTIiwgInciLCAiYyIsICJiIiwgIlQiLCAiZSIsICJsIiwgInUiLCAibiIsICJ0IiwgInMiLCAiaSIsICJoIiwgIngiLCAiZCIsICJyIiwgImciLCAiYSIsICJvIiwgImYiLCAieSIsICJtIiwgInAiLCAiWSIsICJUIiwgInciLCAiYyIsICJ0IiwgImUiLCAiciIsICJtIiwgIlAiLCAiaSIsICJzIiwgIm8iLCAidXQiLCAiVCIsICJsIiwgInciLCAiYSIsICJoIiwgIm4iLCAiQSIsICJtIiwgIm4iLCAidCIsICJjIiwgIlAiLCAiZXQiLCAidCIsICJlIiwgInIiLCAiSSIsICJ4IiwgImkiLCAicyIsICJvIiwgImwiLCAiYSIsICJQIiwgIkciLCAiY3QiLCAiaCIsICJ1IiwgImQiLCAiZyIsICJ5ZSIsICJOIiwgIm4iLCAiUyIsICJjIiwgIkoiLCAieHQiLCAiWiIsICJZIiwgIlN0IiwgIlYiLCAibnQiLCAiQSIsICJQdCIsICJBIiwgIkF0IiwgIm4iLCAicmUiLCAidyIsICJ1ZSIsICJBIiwgImNlIiwgInciLCAiT3QiLCAibiIsICJ0IiwgImUiLCAiciIsICJfIiwgIlIiLCAiQSIsICJKIiwgIm4iLCAidCIsICJlIiwgIl8iLCAibWUiLCAicHQiLCAiUiIsICJyIiwgImkiLCAicyIsICJNIiwgInoiLCAibiIsICJ0IiwgImUiLCAiciIsICJpIiwgIkEiLCAicyIsICJvIiwgIm1lIiwgInllIiwgIkV0IiwgIkEiLCAibiIsICJwdCIsICJYIiwgIm4iLCAidCIsICJlIiwgIkV0IiwgInIiLCAicyIsICJvIiwgImwiLCAieiIsICJSIiwgImkiLCAieGUiLCAiTSIsICJEIiwgInQiLCAiZSIsICJyIiwgImkiLCAibCIsICJhIiwgIlQiLCAicyIsICJvIiwgImMiLCAiVyIsICJudCIsICJBIiwgIlJ0IiwgIm4iLCAiTCIsICJydCIsICJ0IiwgIm0iLCAiTCIsICJlIiwgInIiLCAiaSIsICJaIiwgInMiLCAiXyIsICJvIiwgImwiLCAiYSIsICJTZSIsICJWIiwgIm4iLCAic24iLCAiRCIsICJQZSIsICJNIiwgIlV0IiwgIld0IiwgIkx0IiwgIkEiLCAiVGUiLCAiQWUiLCAiQ2UiLCAiRGUiLCAiSiIsICJVIiwgIml0IiwgIm4iLCAidCIsICJlIiwgInIiLCAidyIsICJpIiwgIlUiLCAiVXQiLCAicyIsICJXdCIsICJvIiwgIm0iLCAibCIsICJhIiwgImgiLCAiT2UiLCAiTmUiLCAidSIsICJkIiwgImciLCAiUSIsICJDIiwgIkd0IiwgIlgiLCAiaHQiLCAiRiIsICJOIiwgIkZlIiwgIloiLCAiZ3QiLCAiVnQiLCAibiIsICJ0IiwgInp0IiwgIkgiLCAiUmUiLCAidHQiLCAiZSIsICJzIiwgIm8iLCAiciIsICJpIiwgIiQiLCAiRiIsICJlIiwgInQiLCAiaSIsICJtIiwgIm8iLCAicyIsICJBZSIsICJ1ZSIsICJuIiwgIlllIiwgIkdlIiwgIk4iLCAiZSIsICJ0IiwgImkiLCAiSSIsICJuIiwgIkFlIiwgIm8iLCAicyIsICJIdCIsICJEIiwgIkplIiwgImciLCAiVGUiLCAiaGUiLCAiWmUiLCAiR2UiLCAiXyIsICJiZSIsICJyIiwgImgiLCAibCIsICJjIiwgImEiLCAiUSIsICJUIiwgImYiLCAidSIsICJDIiwgImIiLCAiQSIsICJLIiwgImplIiwgInoiLCAibSIsICJqIiwgIlgiLCAieCIsICJfZSIsICJldCIsICJwZSIsICJlZSIsICJudCIsICJSIiwgInR0IiwgImRlIiwgIml0IiwgIlAiLCAibWUiLCAiZCIsICJNIiwgImx0IiwgInAiLCAib3QiLCAibGUiLCAic3QiLCAidGUiLCAic2UiLCAiSCIsICJNZSIsICJPIiwgInJ0IiwgIkYiLCAiSiIsICJVIiwgImN0IiwgImF0IiwgImZ0IiwgIm5lIiwgImdlIiwgInV0IiwgImh0IiwgInB0IiwgIlYiLCAiUmUiLCAiZHQiLCAiWCIsICJuIiwgIm10IiwgIlMiLCAiZSIsICJ0IiwgImkiLCAibyIsICIkIiwgImd0IiwgIkQiLCAiSiIsICJNIiwgInJlIiwgImciLCAiQmUiLCAibiIsICJlIiwgInQiLCAiaSIsICJEIiwgIm8iLCAicyIsICJyIiwgInJlIiwgIiQiLCAiUyIsICJ4dCIsICJ5dCIsICJ3dCIsICJ2dCIsICJiZSIsICJBIiwgIkN0IiwgIkl0IiwgIk0iLCAibiIsICJlIiwgInQiLCAiRCIsICJpIiwgIm8iLCAicyIsICJyZSIsICIkIiwgIlMiLCAiTCIsICJFIiwgIm4iLCAiZSIsICJ0IiwgImNlIiwgImFlIiwgIkxlIiwgIkoiLCAiaSIsICJLdCIsICJPdCIsICJZIiwgImtlIiwgIldlIiwgIlB0IiwgIk0iLCAibyIsICJiZSIsICJzIiwgIlR0IiwgIkF0IiwgInIiLCAibCIsICJNdCIsICJjIiwgInEiLCAiZyIsICJ6dCIsICJEdCIsICJSdCIsICIkZSIsICJCdCIsICJhIiwgImYiLCAidmUiLCAidSIsICJDZSIsICJMdCIsICJtIiwgImt0IiwgImF0IiwgImZ0IiwgIlUiLCAiY3QiLCAiV3QiLCAieCIsICJuIiwgIkwiLCAiZiIsICJ0IiwgImEiLCAiaSIsICJ2IiwgImwiLCAiUSIsICJvIiwgIlUiLCAicyIsICJjIiwgIlYiLCAiZCIsICJyIiwgIiQiLCAicCIsICJoIiwgIk4iLCAiZyIsICJPIiwgIk0iLCAieiIsICJ3IiwgIlciLCAiWCIsICJfIiwgIlAiLCAiWSIsICJHIiwgIngiLCAiRCIsICJTIiwgIkEiLCAicSIsICJIIiwgIkUiLCAiZSIsICJJIiwgImIiLCAiQiIsICJGIiwgInkiLCAiQyIsICJLIiwgImsiLCAibSIsICJ1IiwgImoiLCAiUiIsICJUIiwgIm4iLCAidHQiLCAiRSIsICJ0IiwgInMiLCAiciIsICJuIiwgImkiLCAibyIsICJhIiwgInciLCAiUCIsICJOIiwgImUiLCAicSIsICJRIiwgIngiLCAib3QiLCAiaXQiLCAibnQiLCAicnQiLCAiZ3QiLCAiYyIsICJTIiwgImh0IiwgIm10IiwgImt0IiwgIlN0IiwgIkx0IiwgImJ0IiwgIloiLCAiQ3QiLCAid3QiLCAiRyIsICJBdCIsICJsdCIsICJDIiwgIk8iLCAibCIsICJkIiwgInUiLCAiZyIsICJtIiwgImYiLCAiViIsICJ2dCIsICJNdCIsICJ4dCIsICJfIiwgIkoiLCAiVHQiLCAiRHQiLCAiRnQiLCAiSyIsICJldCIsICJJIiwgInR0IiwgIkV0IiwgIlgiLCAieSIsICJ5ZSIsICJZIiwgIkgiLCAiTCIsICJrIiwgInp0IiwgIkQiLCAiQiIsICIkIiwgIk90IiwgIlJ0IiwgIkYiLCAiYXQiLCAiUiIsICJXIiwgIkl0IiwgIkJ0IiwgIkh0IiwgIk0iLCAiZnQiLCAiYiIsICJkdCIsICJ6IiwgIlUiLCAiJHQiLCAiX3QiLCAiVXQiLCAiWXQiLCAicXQiLCAiV3QiLCAiTmUiLCAiUXQiLCAiWnQiLCAidiIsICJ1dCIsICJQdCIsICJqIiwgIkd0IiwgInN0IiwgIlZ0IiwgInRlIiwgIk50IiwgImVlIiwgInNlIiwgInJlIiwgInMiLCAiciIsICJlIiwgInQiLCAibiIsICJvIiwgImYiLCAidGUiLCAibiIsICJNIiwgImUiLCAidCIsICJyIiwgImkiLCAicyIsICJsIiwgIm8iLCAiYmUiLCAiYyIsICJ1ZSIsICJVIiwgIkUiLCAiUCIsICJxIiwgIkgiLCAidiIsICJLIiwgIlIiLCAiZCIsICJoIiwgImciLCAieCIsICJOIiwgImVlIiwgIm5lIiwgIkoiLCAia2UiLCAiQ2UiLCAiTGUiLCAiZmUiLCAiQSIsICJXZSIsICJBZSIsICJyZSIsICJuIiwgImUiLCAidCIsICJyIiwgIkZlIiwgIndlIiwgIlYiLCAiZmUiLCAiaSIsICJzIiwgImwiLCAiYyIsICJvIiwgImQiLCAiTSIsICJoIiwgImciLCAiRGUiLCAiRWUiLCAiUGUiLCAicWUiLCAiQiIsICJBIiwgImoiLCAiSSIsICJlIiwgImJlIiwgInQiLCAiciIsICJRIiwgIkciLCAiaSIsICJrIiwgImIiLCAiTyIsICJuIiwgIk0iLCAiUmUiLCAicyIsICIkIiwgIlQiLCAibCIsICJvIiwgIkUiLCAiSWUiLCAiaWUiLCAiTCIsICJYIiwgInAiLCAiSiIsICJDIiwgIl8iLCAiWSIsICJDIiwgImUiLCAidCIsICJPZSIsICIkZSIsICJUZSIsICJWIiwgIm4iLCAicCIsICJyIiwgIloiLCAiaSIsICJzIiwgImwiLCAibyIsICJjIiwgImQiLCAiaCIsICJnIiwgIngiLCAiQSIsICJkZSIsICJ6IiwgInplIiwgIlZlIiwgIk0iLCAiaWUiLCAiX2UiLCAiWSIsICJCIiwgIl8iLCAiSSIsICJMIiwgIlgiLCAiSiIsICJtZSIsICJVZSIsICJrZSIsICJxZSIsICJqIiwgInUiLCAiRiIsICJ3IiwgIkJlIiwgIlMiLCAidyIsICJjIiwgImIiLCAiVCIsICJlIiwgImwiLCAidSIsICJuIiwgInQiLCAicyIsICJpIiwgImgiLCAieCIsICJkIiwgInIiLCAiZyIsICJhIiwgIm8iLCAiZiIsICJ5IiwgIm0iLCAicCIsICJZIiwgIlQiLCAidyIsICJ2dCIsICJuIiwgIkEiLCAidCIsICJjIiwgImUiLCAiciIsICJtIiwgIlAiLCAiaSIsICJzIiwgIm8iLCAidXQiLCAibCIsICJhIiwgImgiLCAiQiIsICJldCIsICJ0IiwgImUiLCAiciIsICJJIiwgIngiLCAiaSIsICJzIiwgIm8iLCAibCIsICJhIiwgIlAiLCAiRyIsICJjdCIsICJoIiwgInUiLCAiZCIsICJnIiwgInllIiwgIk4iLCAibiIsICJTIiwgImMiLCAiSiIsICJ4dCIsICJaIiwgIlkiLCAiU3QiLCAiViIsICJudCIsICJBIiwgImR0IiwgImoiLCAiUHQiLCAiQXQiLCAiJCIsICJDdCIsICJUdCIsICJNIiwgIm0iLCAiaWUiLCAiTSIsICJ0IiwgImUiLCAiJCIsICJyIiwgImkiLCAicyIsICJvIiwgInJlIiwgInciLCAiaWUiLCAibiIsICJEdCIsICJzZSIsICJvZSIsICJJdCIsICJsZSIsICJFIiwgImFlIiwgImhlIiwgImwiLCAiYSIsICJLZSIsICJfZSIsICJRZSIsICJmZSIsICJYZSIsICJoIiwgInUiLCAiZCIsICJUdCIsICJnIiwgIkN0IiwgInVlIiwgIkEiLCAiY2UiLCAiWWUiLCAiT3QiLCAibiIsICJ0IiwgImUiLCAiciIsICJfIiwgIlIiLCAiQSIsICJKIiwgIm4iLCAidCIsICJlIiwgIl8iLCAibWUiLCAicHQiLCAiUiIsICJyIiwgImkiLCAicyIsICJNIiwgInoiLCAibiIsICJ0IiwgImUiLCAiciIsICJpIiwgIkEiLCAicyIsICJvIiwgIm1lIiwgInllIiwgIkV0IiwgIkEiLCAibiIsICJwdCIsICJYIiwgIm4iLCAidCIsICJlIiwgIkV0IiwgInIiLCAicyIsICJvIiwgImwiLCAieiIsICJSIiwgImkiLCAieGUiLCAiTSIsICJEIiwgInQiLCAiZSIsICJyIiwgImkiLCAibCIsICJhIiwgIlQiLCAicyIsICJvIiwgImMiLCAiVyIsICJudCIsICJBIiwgIlJ0IiwgIm4iLCAiTCIsICJubiIsICJTZSIsICJydCIsICJ0IiwgIm0iLCAiTCIsICJlIiwgInIiLCAiaSIsICJaIiwgInMiLCAiXyIsICJvIiwgImwiLCAiYSIsICJTZSIsICJWIiwgIm4iLCAic24iLCAiRCIsICJQZSIsICJNIiwgIlV0IiwgIld0IiwgIkx0IiwgIkEiLCAiVGUiLCAiQWUiLCAiQ2UiLCAiRGUiLCAiSiIsICJVIiwgIml0IiwgIm4iLCAidCIsICJlIiwgInIiLCAidyIsICJpIiwgIlUiLCAiVXQiLCAicyIsICJXdCIsICJvIiwgIm0iLCAibCIsICJhIiwgImgiLCAiT2UiLCAiTmUiLCAidSIsICJkIiwgImciLCAiUSIsICJDIiwgIkd0IiwgIlgiLCAibXQiLCAiRyIsICJCZSIsICJNZSIsICJodCIsICJxIiwgImMiLCAidnQiLCAieWUiLCAic3QiLCAiUHQiLCAiVWUiLCAiSCIsICJSZSIsICJhdCIsICIkdCIsICJQIiwgImp0IiwgIkVlIiwgIiQiLCAieCIsICJGZSIsICJGIiwgIk4iLCAiWiIsICJndCIsICJWdCIsICJ6dCIsICJ0dCIsICJUIiwgInJlc29sdmUiLCAibXMiLCAicmVzb2x2ZSIsICJpIiwgImUiLCAiaSIsICJEZW5vIiwgImFzc2VydCIsICJEZW5vU3RkSW50ZXJuYWxFcnJvciIsICJhc3NlcnQiLCAicyIsICJpIiwgImoiLCAiTUlOX1JFQUQiLCAiTUFYX1NJWkUiLCAiQ1IiLCAiTEYiLCAiREVGQVVMVF9CVUZGRVJfU0laRSIsICJ3IiwgInR5cGVzX2V4cG9ydHMiLCAiaXNBbnlBcnJheUJ1ZmZlciIsICJpc0FyZ3VtZW50c09iamVjdCIsICJpc0FycmF5QnVmZmVyIiwgImlzQXN5bmNGdW5jdGlvbiIsICJpc0JpZ0ludE9iamVjdCIsICJpc0Jvb2xlYW5PYmplY3QiLCAiaXNCb3hlZFByaW1pdGl2ZSIsICJpc0RhdGFWaWV3IiwgImlzRGF0ZSIsICJpc0dlbmVyYXRvckZ1bmN0aW9uIiwgImlzR2VuZXJhdG9yT2JqZWN0IiwgImlzTWFwIiwgImlzTWFwSXRlcmF0b3IiLCAiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiLCAiaXNOYXRpdmVFcnJvciIsICJpc051bWJlck9iamVjdCIsICJpc1Byb21pc2UiLCAiaXNSZWdFeHAiLCAiaXNTZXQiLCAiaXNTZXRJdGVyYXRvciIsICJpc1NoYXJlZEFycmF5QnVmZmVyIiwgImlzU3RyaW5nT2JqZWN0IiwgImlzU3ltYm9sT2JqZWN0IiwgImlzV2Vha01hcCIsICJpc1dlYWtTZXQiLCAiX3RvU3RyaW5nIiwgImlzRGF0ZSIsICJpc0FyZ3VtZW50c09iamVjdCIsICJpc0JpZ0ludE9iamVjdCIsICJpc0Jvb2xlYW5PYmplY3QiLCAiaXNOdW1iZXJPYmplY3QiLCAiaXNTdHJpbmdPYmplY3QiLCAiaXNTeW1ib2xPYmplY3QiLCAiaXNOYXRpdmVFcnJvciIsICJpc1JlZ0V4cCIsICJpc0FzeW5jRnVuY3Rpb24iLCAiaXNHZW5lcmF0b3JGdW5jdGlvbiIsICJpc0dlbmVyYXRvck9iamVjdCIsICJpc1Byb21pc2UiLCAiaXNNYXAiLCAiaXNTZXQiLCAiaXNNYXBJdGVyYXRvciIsICJpc1NldEl0ZXJhdG9yIiwgImlzV2Vha01hcCIsICJpc1dlYWtTZXQiLCAiaXNBcnJheUJ1ZmZlciIsICJpc0RhdGFWaWV3IiwgImlzU2hhcmVkQXJyYXlCdWZmZXIiLCAiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiLCAiaXNBbnlBcnJheUJ1ZmZlciIsICJpc0JveGVkUHJpbWl0aXZlIiwgImZuIiwgIm5vcm1hbGl6ZUVuY29kaW5nIiwgInNsb3dDYXNlcyIsICJtaW4iLCAidiIsICJjaCIsICJpIiwgImsiLCAidiIsICJpIiwgInN0ciIsICJpc1NldCIsICJpc01hcCIsICJpc01hcEl0ZXJhdG9yIiwgImlzU2V0SXRlcmF0b3IiLCAiaXNBcmd1bWVudHNPYmplY3QiLCAiaXNSZWdFeHAiLCAiaXNEYXRlIiwgImlzQW55QXJyYXlCdWZmZXIiLCAiaXNBcnJheUJ1ZmZlciIsICJpc0RhdGFWaWV3IiwgImlzUHJvbWlzZSIsICJpc1dlYWtTZXQiLCAiaXNXZWFrTWFwIiwgImlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0IiwgImlzQm94ZWRQcmltaXRpdmUiLCAiZSIsICJmbiIsICJrIiwgInNsaWNlIiwgImlzR2VuZXJhdG9yRnVuY3Rpb24iLCAiaXNBc3luY0Z1bmN0aW9uIiwgIm5hbWUiLCAicG9zIiwgImRpZmYiLCAicyIsICJpc051bWJlck9iamVjdCIsICJpc1N0cmluZ09iamVjdCIsICJpc0Jvb2xlYW5PYmplY3QiLCAiaXNCaWdJbnRPYmplY3QiLCAiam9pbiIsICJpbmRlbnRhdGlvbiIsICJsbiIsICJqIiwgInN0ciIsICJjdXN0b21JbnNwZWN0U3ltYm9sIiwgInJlc29sdmUiLCAiZm4iLCAicmVzb2x2ZSIsICJpIiwgImNvcmUiLCAiY29yZSIsICJpIiwgIm5leHRUaWNrIiwgImZvcm1hdCIsICJjIiwgImkiLCAic3RyIiwgInMiLCAibiIsICJtIiwgImUiLCAiciIsICJ0IiwgIlAiLCAiWCIsICJwIiwgImRlYnVnRW52IiwgInN0ciIsICJzZXQiLCAiZGVidWciLCAib3NUeXBlIiwgIkRlbm8iLCAibmF2aWdhdG9yIiwgImlzV2luZG93cyIsICJjcnlwdG8iLCAib3MiLCAib3MiLCAib3NUeXBlIiwgInR5cGVzX2RlZmF1bHQiLCAidHlwZXNfZXhwb3J0cyIsICJFbmNvZGluZ3MiLCAibiIsICJ4IiwgImkiLCAibCIsICJlbmNvZGUiLCAiZGVjb2RlIiwgInN0ciIsICJpIiwgImRlY29kZSIsICJhIiwgImIiLCAiYyIsICJoaSIsICJzdHIiLCAiaSIsICJieXRlTGVuZ3RoIiwgIm1pbiIsICJuIiwgImN1c3RvbUluc3BlY3RTeW1ib2wiLCAiQnVmZmVyIiwgImlzQW55QXJyYXlCdWZmZXIiLCAiYiIsICJmaWxsIiwgImkiLCAiYSIsICJ4IiwgInkiLCAibm9ybWFsaXplRW5jb2RpbmciLCAiY29uY2F0IiwgIm4iLCAibSIsICJlcXVhbHMiLCAiaW5zcGVjdCIsICJzdHIiLCAiY3VzdG9tSW5zcGVjdFN5bWJvbCIsICJjb21wYXJlIiwgImVuY29kZSIsICJoZXhTbGljZSIsICJpIiwgIkJ1ZmZlciIsICJieXRlTGVuZ3RoIiwgImhpIiwgIm1pbiIsICJjb3B5IiwgImNoZWNrQm91bmRzIiwgIm4iLCAiaiIsICJmbiIsICJhdG9iIiwgIkJsb2IiLCAib3MiLCAiY2xhc3NSZWdFeHAiLCAiaSIsICJjYXB0dXJlTGFyZ2VyU3RhY2tUcmFjZSIsICJ1dkV4Y2VwdGlvbldpdGhIb3N0UG9ydCIsICJlcnJub0V4Y2VwdGlvbiIsICJ1dkV4Y2VwdGlvbiIsICJwYXRoIiwgImV4Y2VwdGlvbldpdGhIb3N0UG9ydCIsICJjbGFzc1JlZ0V4cCIsICJzdHIiLCAiYXNzZXJ0IiwgIngiLCAid3JhcCIsICJhIiwgImFzc2VydCIsICJ4IiwgIngiLCAieCIsICJ4IiwgImdlbmVyaWNOb2RlRXJyb3IiLCAib24iLCAib25jZSIsICJsaXN0ZW5lckNvdW50IiwgIm4iLCAiaSIsICJlZSIsICJzZXRNYXhMaXN0ZW5lcnMiLCAiZXIiLCAibGlzdGVuZXJzIiwgImkiLCAibSIsICJ3IiwgIm9uY2UiLCAibGlzdGVuZXJDb3VudCIsICJyZXNvbHZlIiwgIm9uIiwgImZpbmlzaGVkIiwgInAiLCAiaGFzT3duIiwgInYiLCAiYXNzZXJ0IiwgIngiLCAibyIsICJrZXkiLCAicGFyc2UiLCAiaSIsICJhbGlhcyIsICJ5IiwgImFyZ3YiLCAiY29sbGVjdCIsICJtIiwgImoiLCAicGFyc2UiLCAid2luMzJfZXhwb3J0cyIsICJiYXNlbmFtZSIsICJkZWxpbWl0ZXIiLCAiZGlybmFtZSIsICJleHRuYW1lIiwgImZvcm1hdCIsICJmcm9tRmlsZVVybCIsICJpc0Fic29sdXRlIiwgImpvaW4iLCAibm9ybWFsaXplIiwgInBhcnNlIiwgInJlbGF0aXZlIiwgInJlc29sdmUiLCAic2VwIiwgInRvRmlsZVVybCIsICJ0b05hbWVzcGFjZWRQYXRoIiwgIkNIQVJfVVBQRVJDQVNFX0EiLCAiQ0hBUl9MT1dFUkNBU0VfQSIsICJDSEFSX1VQUEVSQ0FTRV9aIiwgIkNIQVJfTE9XRVJDQVNFX1oiLCAiQ0hBUl9ET1QiLCAiQ0hBUl9GT1JXQVJEX1NMQVNIIiwgIkNIQVJfQkFDS1dBUkRfU0xBU0giLCAiQ0hBUl9DT0xPTiIsICJDSEFSX1FVRVNUSU9OX01BUksiLCAiYXNzZXJ0UGF0aCIsICJwYXRoIiwgImlzUG9zaXhQYXRoU2VwYXJhdG9yIiwgIkNIQVJfRk9SV0FSRF9TTEFTSCIsICJpc1BhdGhTZXBhcmF0b3IiLCAiQ0hBUl9CQUNLV0FSRF9TTEFTSCIsICJpc1dpbmRvd3NEZXZpY2VSb290IiwgIkNIQVJfTE9XRVJDQVNFX0EiLCAiQ0hBUl9MT1dFUkNBU0VfWiIsICJDSEFSX1VQUEVSQ0FTRV9BIiwgIkNIQVJfVVBQRVJDQVNFX1oiLCAibm9ybWFsaXplU3RyaW5nIiwgImkiLCAiQ0hBUl9ET1QiLCAiX2Zvcm1hdCIsICJzZXAiLCAiV0hJVEVTUEFDRV9FTkNPRElOR1MiLCAiZW5jb2RlV2hpdGVzcGFjZSIsICJjIiwgInNlcCIsICJkZWxpbWl0ZXIiLCAicmVzb2x2ZSIsICJpIiwgInBhdGgiLCAiRGVubyIsICJhc3NlcnRQYXRoIiwgImlzQWJzb2x1dGUiLCAiaXNQYXRoU2VwYXJhdG9yIiwgImoiLCAiaXNXaW5kb3dzRGV2aWNlUm9vdCIsICJDSEFSX0NPTE9OIiwgIm5vcm1hbGl6ZVN0cmluZyIsICJub3JtYWxpemUiLCAiam9pbiIsICJhc3NlcnQiLCAicmVsYXRpdmUiLCAiZnJvbSIsICJDSEFSX0JBQ0tXQVJEX1NMQVNIIiwgInRvTmFtZXNwYWNlZFBhdGgiLCAiQ0hBUl9RVUVTVElPTl9NQVJLIiwgIkNIQVJfRE9UIiwgImRpcm5hbWUiLCAiYmFzZW5hbWUiLCAiZXh0bmFtZSIsICJmb3JtYXQiLCAiX2Zvcm1hdCIsICJwYXJzZSIsICJmcm9tRmlsZVVybCIsICJ0b0ZpbGVVcmwiLCAiZW5jb2RlV2hpdGVzcGFjZSIsICJwb3NpeF9leHBvcnRzIiwgImJhc2VuYW1lIiwgImRlbGltaXRlciIsICJkaXJuYW1lIiwgImV4dG5hbWUiLCAiZm9ybWF0IiwgImZyb21GaWxlVXJsIiwgImlzQWJzb2x1dGUiLCAiam9pbiIsICJub3JtYWxpemUiLCAicGFyc2UiLCAicmVsYXRpdmUiLCAicmVzb2x2ZSIsICJzZXAiLCAidG9GaWxlVXJsIiwgInRvTmFtZXNwYWNlZFBhdGgiLCAic2VwIiwgImRlbGltaXRlciIsICJyZXNvbHZlIiwgImkiLCAicGF0aCIsICJEZW5vIiwgImFzc2VydFBhdGgiLCAiQ0hBUl9GT1JXQVJEX1NMQVNIIiwgIm5vcm1hbGl6ZVN0cmluZyIsICJpc1Bvc2l4UGF0aFNlcGFyYXRvciIsICJub3JtYWxpemUiLCAiaXNBYnNvbHV0ZSIsICJqb2luIiwgInJlbGF0aXZlIiwgImZyb20iLCAidG9OYW1lc3BhY2VkUGF0aCIsICJkaXJuYW1lIiwgImJhc2VuYW1lIiwgImV4dG5hbWUiLCAiQ0hBUl9ET1QiLCAiZm9ybWF0IiwgIl9mb3JtYXQiLCAicGFyc2UiLCAiZnJvbUZpbGVVcmwiLCAidG9GaWxlVXJsIiwgImVuY29kZVdoaXRlc3BhY2UiLCAicGF0aCIsICJpc1dpbmRvd3MiLCAid2luMzJfZXhwb3J0cyIsICJwb3NpeF9leHBvcnRzIiwgImpvaW4iLCAibm9ybWFsaXplIiwgInBhdGgiLCAiaXNXaW5kb3dzIiwgIndpbjMyX2V4cG9ydHMiLCAicG9zaXhfZXhwb3J0cyIsICJiYXNlbmFtZSIsICJkZWxpbWl0ZXIiLCAiZGlybmFtZSIsICJleHRuYW1lIiwgImZvcm1hdCIsICJmcm9tRmlsZVVybCIsICJpc0Fic29sdXRlIiwgImpvaW4iLCAibm9ybWFsaXplIiwgInBhcnNlIiwgInJlbGF0aXZlIiwgInJlc29sdmUiLCAic2VwIiwgInRvRmlsZVVybCIsICJ0b05hbWVzcGFjZWRQYXRoIiwgInBhdGgiLCAibmV4dFRpY2siLCAiZSIsICJvIiwgImlzV2luZG93cyIsICJuIiwgIngiLCAieSIsICJCdWZmZXIiLCAibmV4dFRpY2siLCAidmFsaWRhdGVBYm9ydFNpZ25hbCIsICJ3IiwgInIiLCAiZGVzdHJveSIsICJzIiwgImVyIiwgInNlbGYiLCAiZXJyIiwgIm5leHRUaWNrIiwgImlzUmVxdWVzdCIsICJpc1JlYWRhYmxlRW5kZWQiLCAiaXNSZWFkYWJsZSIsICJyIiwgImlzV3JpdGFibGUiLCAiX2Zyb20iLCAiUmVhZGFibGUiLCAiQnVmZmVyIiwgIm5leHRUaWNrIiwgImUiLCAiZXIiLCAicHJlcGVuZExpc3RlbmVyIiwgImZuIiwgIk5vdEltcGxlbWVudGVkIiwgIm5vcm1hbGl6ZUVuY29kaW5nIiwgInNlbGYiLCAiaSIsICJqIiwgInAiLCAiciIsICJ1dGY4V3JpdGUiLCAibiIsICJCdWZmZXIiLCAidiIsICJzIiwgInAiLCAibiIsICJCdWZmZXIiLCAiaSIsICJzbGljZSIsICJjIiwgInN0ciIsICJfIiwgImZuIiwgIm5vcCIsICJlcnJvck9yRGVzdHJveSIsICJCdWZmZXIiLCAibiIsICJuZXh0VGljayIsICJlciIsICJzIiwgInByZXBlbmRMaXN0ZW5lciIsICJpIiwgInNlbGYiLCAiaiIsICJyZXNvbHZlIiwgInIiLCAiZXJyb3IiLCAiaXNSZWFkYWJsZUVuZGVkIiwgImVycm9yT3JEZXN0cm95IiwgImlzUmVhZGFibGUiLCAibm9wIiwgIkJ1ZmZlciIsICJuZXh0VGljayIsICJlciIsICJuIiwgImkiLCAidyIsICJkZXN0cm95IiwgImZyb21XZWIiLCAiZSIsICJlcnJvciIsICJpc1JlYWRhYmxlU3RyZWFtIiwgImlzV3JpdGFibGVTdHJlYW0iLCAiZnJvbVdlYiIsICJCdWZmZXIiLCAiZHVwbGV4IiwgImUiLCAiZXJyb3IiLCAibmV4dFRpY2siLCAiZW5jb2RpbmciLCAiaXNSZWFkYWJsZUVuZGVkIiwgIndyaXRlIiwgImZpbmFsIiwgImRlc3Ryb3kiLCAidGhlbiIsICJkIiwgImZuIiwgInJlc29sdmUiLCAiciIsICJ3IiwgImlzUmVhZGFibGUiLCAiaXNXcml0YWJsZSIsICJwcmVmaW5pc2giLCAiZXIiLCAibmV4dFRpY2siLCAiZGVzdHJveWVyIiwgImZpbmlzaGVkIiwgImZpbmlzaCIsICJyZXN1bWUiLCAicmVzb2x2ZSIsICJmaW5hbCIsICJpIiwgInB0IiwgIm5leHRUaWNrIiwgIm4iLCAiaXNSZWFkYWJsZSIsICJpc1dyaXRhYmxlIiwgImQiLCAicGlwZWxpbmUiLCAicmVzb2x2ZSIsICJCdWZmZXIiLCAieCIsICJ5IiwgInAiLCAiY29uc3RhbnRzIiwgIlVpZEZpZWxkcyIsICJwcm92aWRlclR5cGUiLCAiYSIsICJiIiwgImlzV2luZG93cyIsICJlIiwgInJlZ2V4cCIsICJpIiwgInRpbWluZ1NhZmVFcXVhbCIsICJhIiwgImIiLCAiYXNzZXJ0IiwgImkiLCAidGltaW5nU2FmZUVxdWFsIiwgImEiLCAiYiIsICJCdWZmZXIiLCAiY29uc3RhbnRzIiwgImkiLCAiQnVmZmVyIiwgImUiLCAiYnl0ZUxlbmd0aCIsICJuIiwgInNvY2tldFR5cGUiLCAiaXNXaW5kb3dzIiwgImUiLCAiY29uc3RhbnRzIiwgImNvbnN0YW50cyIsICJjb25zdGFudHMiLCAiZSIsICJfYSIsICJpc1dpbmRvd3MiLCAiZSIsICJCdWZmZXIiLCAicCIsICJ2IiwgInN0ZGVyciIsICJzdGRpbiIsICJzdGRvdXQiLCAiZnJvbUZpbGVVcmwiLCAiam9pbiIsICJwcm9jZXNzIiwgImFzc2VydCIsICJwaWQiLCAiZSIsICJuZXh0VGljayIsICJzdGRlcnIiLCAic3RkaW4iLCAic3Rkb3V0IiwgImNvcmUiLCAicmVtb3ZlTGlzdGVuZXIiLCAicmVtb3ZlQWxsTGlzdGVuZXJzIiwgImIiLCAidCIsICJlIiwgInMiLCAiaSIsICJoIiwgInIiLCAibiIsICJhIiwgImwiLCAidSIsICJmIiwgInciLCAiTiIsICJCIiwgIm8iLCAiUCIsICJtIiwgIkYiLCAiVCIsICJ4IiwgIlgiLCAiTCIsICJjIiwgInAiLCAiZyIsICJXIiwgIkEiLCAiZCIsICJ5IiwgIiQiLCAiaiIsICJEIiwgIkkiLCAiayIsICJSIiwgInoiLCAiWSIsICJHIiwgIk0iLCAiQyIsICJFIiwgIlMiLCAieWUiLCAiWiIsICJJZSIsICJIIiwgIlUiLCAiWiIsICJfIiwgInkiLCAiViIsICJFIiwgIlkiLCAidSIsICJkIiwgIlAiLCAiUSIsICJ3IiwgIkQiLCAiRyIsICJqIiwgImciLCAiTiIsICJwIiwgIkwiLCAiQSIsICJJIiwgIlUiLCAiTSIsICJ6IiwgIksiLCAiRiIsICJjIiwgIkIiLCAiZSIsICJYIiwgImkiLCAiVCIsICJiIiwgIiQiLCAiTyIsICJzIiwgInIiLCAidCIsICJKIiwgIkgiLCAicSIsICJ2IiwgImgiLCAiZWUiLCAiZiIsICJ0ZSIsICJPZSIsICJyZSIsICJhIiwgImFlIiwgIngiLCAiayIsICJuIiwgInNlIiwgIm9lIiwgImtlIiwgIm5lIiwgImxlIiwgIlMiLCAidWUiLCAiUiIsICJ4ZSIsICJOZSIsICJ6IiwgIlMiLCAicCIsICJuIiwgInMiLCAiWCIsICJkIiwgIlciLCAibSIsICJSIiwgImYiLCAiZyIsICJyIiwgIlEiLCAiYiIsICJoIiwgIkwiLCAiZSIsICJ0IiwgImkiLCAiJCIsICJhIiwgIlQiLCAiVSIsICJaIiwgIl8iLCAiayIsICJ1IiwgIkciLCAicyIsICJkIiwgImUiLCAiciIsICJjIiwgInUiLCAiayIsICJhIiwgIngiLCAibyIsICJ0IiwgIm0iLCAibiIsICJpIiwgImwiLCAicCIsICJCIiwgIkciLCAicmUiLCAiUWUiLCAiY2UiLCAiWWUiLCAiRiIsICJkdCIsICJYIiwgIlMiLCAiUCIsICJjIiwgIlQiLCAiaiIsICJwIiwgInQiLCAiVyIsICJnIiwgImQiLCAieCIsICJsIiwgIl8iLCAiWiIsICJiIiwgInMiLCAibyIsICJxIiwgIkciLCAiZiIsICJ5IiwgIm0iLCAieiIsICJoIiwgIkUiLCAiUSIsICJpIiwgIlUiLCAiTCIsICIkIiwgImsiLCAiYSIsICJ1IiwgInciLCAiWSIsICJ2IiwgIm4iLCAiQyIsICJWIiwgIkkiLCAiSiIsICJGIiwgImUiLCAidCIsICJpIiwgIm0iLCAibyIsICJzIiwgIkFlIiwgInVlIiwgIm4iLCAiWWUiLCAiR2UiLCAiTnQiLCAibiIsICJlIiwgInQiLCAiaSIsICJtIiwgIk4iLCAiSSIsICJBZSIsICJvIiwgInMiLCAiSHQiLCAiRCIsICJKZSIsICJnIiwgIlRlIiwgImhlIiwgIlplIiwgIkdlIiwgIl8iLCAiYmUiLCAiciIsICJoIiwgImwiLCAiYyIsICJhIiwgIlEiLCAiVCIsICJmIiwgInUiLCAiQyIsICJiIiwgIkEiLCAiSyIsICJqZSIsICJ6IiwgImoiLCAiWCIsICJ4IiwgIl9lIiwgImV0IiwgInBlIiwgImVlIiwgIm50IiwgIlIiLCAidHQiLCAiZGUiLCAiaXQiLCAiUCIsICJtZSIsICJkIiwgIk0iLCAibHQiLCAicCIsICJvdCIsICJsZSIsICJzdCIsICJ0ZSIsICJzZSIsICJIIiwgIk1lIiwgIk8iLCAicnQiLCAiRiIsICJKIiwgIlUiLCAiY3QiLCAiYXQiLCAiZnQiLCAibmUiLCAiZ2UiLCAidXQiLCAiaHQiLCAicHQiLCAiViIsICJSZSIsICJpZSIsICJCIiwgIkF0IiwgImR0IiwgIm10IiwgIlMiLCAiJCIsICJndCIsICJyZSIsICJidCIsICJDdCIsICJJdCIsICJCZSIsICJ4dCIsICJ5dCIsICJ3dCIsICJ2dCIsICJWdCIsICJMIiwgIkUiLCAibiIsICJlIiwgInQiLCAiY2UiLCAiYWUiLCAiTGUiLCAiSiIsICJpIiwgIlkiLCAia2UiLCAibiIsICJlIiwgIldlIiwgIkwiLCAiUHQiLCAiT3QiLCAiTSIsICJ0IiwgImkiLCAibyIsICJiZSIsICJzIiwgIlR0IiwgIlR0IiwgIm4iLCAiZSIsICJ0IiwgIldlIiwgImkiLCAiTCIsICJvIiwgInMiLCAia2UiLCAiRHQiLCAiUnQiLCAiJGUiLCAiQnQiLCAiTGUiLCAicSIsICJiZSIsICJSdCIsICJuIiwgImUiLCAidCIsICJpIiwgIm8iLCAicyIsICJyIiwgIkUiLCAiZyIsICJsIiwgInEiLCAiQnQiLCAiY2UiLCAiRHQiLCAiTCIsICJjIiwgImEiLCAiZiIsICJ2ZSIsICIkZSIsICJ1IiwgIkNlIiwgIkx0IiwgIm0iLCAia3QiLCAiYXQiLCAiZnQiLCAiVSIsICJjdCIsICJXdCIsICJ4IiwgIm4iLCAiUiIsICJWdCIsICJJIiwgImJlIiwgIlQiLCAiZCIsICJlIiwgInQiLCAiciIsICJuIiwgIlciLCAiSCIsICJ4IiwgIm8iLCAiYSIsICJsIiwgImkiLCAiYyIsICJBIiwgImIiLCAiayIsICJaIiwgIm0iLCAicCIsICJCIiwgIkoiLCAicmUiLCAiUWUiLCAiX2UiLCAiZSIsICJ0IiwgInIiLCAibiIsICJLZSIsICJjZSIsICJZZSIsICJHIiwgIksiLCAiUSIsICJVIiwgImZlIiwgImR0IiwgIk50IiwgImsiLCAiR2UiLCAiUiIsICJaIiwgImVlIiwgIkQiLCAiWSIsICJNIiwgIm8iLCAiYSIsICJsIiwgImkiLCAiYyIsICJtIiwgInMiLCAidSIsICJ5IiwgImciLCAiaCIsICJDIiwgInYiLCAiVCIsICJrIiwgIkMiLCAibSIsICJsIiwgIkgiLCAiSiIsICJoIiwgImEiLCAibiIsICJ5IiwgImUiLCAidCIsICJvIiwgInciLCAicSIsICJBIiwgIkkiLCAiTyIsICJyIiwgInMiLCAiYyIsICJFIiwgIksiLCAiUSIsICJkIiwgIlgiLCAiYiIsICJ1IiwgImkiLCAicCIsICJmIiwgImciLCAiXyIsICJZIiwgImUiLCAiYSIsICJuIiwgInQiLCAiaCIsICJvIiwgIl8iLCAieCIsICJCIiwgImxlIiwgInJlIiwgImNlIiwgInhlIiwgInAiLCAic2UiLCAiZHQiLCAiWiIsICJmZSIsICJGIiwgIk0iLCAiciIsICJzIiwgImMiLCAiZCIsICJiIiwgInUiLCAiaSIsICJtIiwgInkiLCAiZiIsICJnIiwgIk4iLCAiUyIsICJEIiwgIkkiLCAidnQiLCAiRCIsICJZdCIsICJjZSIsICJ0IiwgInMiLCAibyIsICJyZSIsICJUIiwgIkIiLCAiYyIsICJZIiwgIloiLCAidGUiLCAic2UiLCAiZWUiLCAiRSIsICJfIiwgInIiLCAiaiIsICJ4IiwgInYiLCAiZiIsICJhIiwgImkiLCAibCIsICJPIiwgIk4iLCAiZSIsICJ1IiwgIm4iLCAicCIsICJkIiwgIkEiLCAibSIsICJoIiwgInciLCAiZyIsICJMIiwgImIiLCAiUCIsICJuZSIsICJDIiwgImFlIiwgImR0IiwgIld0IiwgImwiLCAiZiIsICJhIiwgIm4iLCAiaSIsICJyIiwgImUiLCAiYiIsICJ0IiwgImUiLCAicyIsICJpIiwgImgiLCAiciIsICJuIiwgImEiLCAibCIsICJ1IiwgImYiLCAidyIsICJOIiwgIkIiLCAibyIsICJQIiwgIm0iLCAiRiIsICJUIiwgIngiLCAiWCIsICJMIiwgImMiLCAicCIsICJnIiwgIlciLCAiQSIsICJkIiwgInkiLCAiJCIsICJqIiwgIkQiLCAiSSIsICJrIiwgIlIiLCAieiIsICJZIiwgIkciLCAiTSIsICJDIiwgIkUiLCAiUyIsICJ5ZSIsICJaIiwgIkllIiwgIkgiLCAiVSIsICJYIiwgIlMiLCAiUCIsICJjIiwgIlQiLCAiaiIsICJwIiwgInQiLCAiVyIsICJnIiwgImQiLCAieCIsICJsIiwgIl8iLCAiWiIsICJiIiwgInMiLCAibyIsICJxIiwgIkciLCAiZiIsICJ5IiwgIm0iLCAieiIsICJoIiwgIkUiLCAiUSIsICJpIiwgIlUiLCAiTCIsICIkIiwgImsiLCAiYSIsICJ1IiwgInciLCAiWSIsICJ2IiwgIm4iLCAiQyIsICJWIiwgIkkiLCAiSiIsICJSIiwgIlZ0IiwgIkkiLCAiYmUiLCAiZCIsICJlIiwgInQiLCAiciIsICJuIiwgIlciLCAiSCIsICJwIiwgIkIiLCAiSiIsICJyZSIsICJRZSIsICJfZSIsICJlIiwgInQiLCAiciIsICJuIiwgIktlIiwgImNlIiwgIlllIiwgIkciLCAiSyIsICJRIiwgIlUiLCAiRCIsICJlIiwgInQiLCAiciIsICJuIiwgIlkiLCAiZWUiLCAiTSIsICJwIiwgIm8iLCAiYSIsICJsIiwgImkiLCAiYyIsICJtIiwgInMiLCAidSIsICJ5IiwgImciLCAiaCIsICJDIiwgImRlZiIsICJmIiwgImNoIiwgImYiLCAibiIsICJhZSIsICJWdCIsICJHdCIsICIkIiwgIm4iLCAiY2hpbGQiLCAicyIsICJwYXJzZSIsICJwYXJzZSIsICJmbiIsICJlIiwgImZ1bmMiLCAic2FmZVJ1biIsICJmbiIsICJlIiwgInJlc29sdmUiLCAiZSIsICJzYWZlUnVuIiwgImV2ZW50TmFtZXMiLCAic2FmZVJ1biIsICJhIiwgImIiLCAiRXZlbnRFbWl0dGVyIiwgImgiLCAiZm4iLCAiRXZlbnRFbWl0dGVyIiwgImVudiIsICJqc29uIiwgImF0IiwgIm4iLCAidCIsICJhIiwgImUiLCAiciIsICJjIiwgInkiLCAia24iLCAiZXQiLCAiV24iLCAiQ3QiLCAib24iLCAiVG4iLCAibyIsICJpIiwgInMiLCAiZiIsICJydCIsICJIbiIsICJJdCIsICJOdCIsICJfdCIsICJpdCIsICJvdCIsICJEIiwgImIiLCAic3QiLCAiTWUiLCAiTCIsICJUdCIsICJtbiIsICJkbiIsICJ2biIsICJfIiwgIk1uIiwgIk10IiwgIkx0IiwgIkgiLCAiTG4iLCAiR24iLCAiWG4iLCAiZnQiLCAiUnQiLCAiZyIsICJoIiwgIkJuIiwgInNuIiwgIm5uIiwgInRuIiwgImFuIiwgIkZ0IiwgIkR0IiwgIlUiLCAiZW4iLCAiSiIsICJsdCIsICJ6dCIsICJxIiwgIm0iLCAiWiIsICJGIiwgIk4iLCAicm4iLCAiSyIsICJWbiIsICJqdCIsICJBbiIsICJxbiIsICJ1IiwgIll0IiwgImN0IiwgIkNuIiwgIlQiLCAiUCIsICIkdCIsICJfYSIsICJ3biIsICJmbiIsICJ1dCIsICJJbiIsICJsIiwgIlJuIiwgIm10IiwgIkZuIiwgImduIiwgImJuIiwgIlgiLCAiS24iLCAiVXQiLCAiV3QiLCAiSHQiLCAiR3QiLCAiWHQiLCAiQnQiLCAiU24iLCAiUW4iLCAiVyIsICJWdCIsICJ6IiwgIkpuIiwgImR0IiwgIkVuIiwgImQiLCAidiIsICJwIiwgInZ0IiwgIkIiLCAiViIsICJEbiIsICJHIiwgIk0iLCAiem4iLCAicXQiLCAiUyIsICJPbiIsICJabiIsICJ3IiwgIkUiLCAiTyIsICJDIiwgImsiLCAiUiIsICJ4IiwgIkkiLCAiQSIsICJZIiwgIiQiLCAiUG4iLCAicHQiLCAiTm4iLCAiam4iLCAibmUiLCAiWW4iLCAiZ3QiLCAiJG4iLCAiUSIsICJ0ZSIsICJLdCIsICJudCIsICJobiIsICJidCIsICJhZSIsICJlZSIsICJyZSIsICJ5biIsICJpZSIsICJvZSIsICJRdCIsICJzZSIsICJodCIsICJKdCIsICJ0dCIsICJadCIsICJVbiIsICJ4biIsICJ5dCIsICJmZSIsICJsZSIsICJjZSIsICJ1ZSIsICJtZSIsICJrdCIsICJkZSIsICJqIiwgInd0IiwgInZlIiwgInBlIiwgImdlIiwgImJlIiwgImhlIiwgInllIiwgImtlIiwgIndlIiwgInh0IiwgInhlIiwgIkF0IiwgIkFlIiwgIlNlIiwgIlN0IiwgIkVlIiwgIkV0IiwgIk9lIiwgIk90IiwgIlBlIiwgIl9uIiwgIlB0IiwgIkNlIiwgIkllIiwgIk5lIiwgIl9lIiwgIlRlIiwgIkxlIiwgIlJlIiwgIkZlIiwgIkRlIiwgInplIiwgImplIiwgIlllIiwgIiRlIiwgIlVlIiwgIldlIiwgIkhlIiwgImQiLCAiYyIsICJiIiwgIlAiLCAiUiIsICJnIiwgInMiLCAiZSIsICJyIiwgInYiLCAidCIsICJuIiwgIm8iLCAieCIsICJpIiwgInEiLCAicCIsICJFIiwgImwiLCAiRCIsICJmIiwgIlMiLCAidSIsICJ5IiwgIkMiLCAiSSIsICJOIiwgIl8iLCAiYSIsICJoIiwgIkYiLCAibSIsICJqIiwgInciLCAiTyIsICJBIiwgIkwiLCAiVSIsICJWIiwgIkIiLCAiSCIsICJZIiwgInoiLCAiRyIsICJKIiwgIksiLCAiTSIsICJRIiwgIlgiLCAiWiIsICIkIiwgImVlIiwgInJlIiwgInRlIiwgIm9lIiwgIm5lIiwgInNlIiwgIlQiLCAiayIsICJhZSIsICJVIiwgIkMiLCAicSIsICJBIiwgIk0iLCAieiIsICJrIiwgImUiLCAidCIsICJCIiwgInIiLCAibyIsICJ1IiwgIkgiLCAiRCIsICJuIiwgInkiLCAiVyIsICJZIiwgIkciLCAiSiIsICJLIiwgIlEiLCAiWCIsICJaIiwgImVlIiwgInRlIiwgInciLCAicmUiLCAieCIsICJPIiwgImoiLCAicCIsICJJIiwgInYiLCAiUyIsICJiIiwgImciLCAiRSIsICJQIiwgIlQiLCAiYyIsICJmIiwgImkiLCAicyIsICJhIiwgIm5lIiwgIlIiLCAidWUiLCAiJCIsICJoIiwgIl8iLCAiZCIsICJvZSIsICJsIiwgIm0iLCAic2UiLCAiTCIsICJsZSIsICJWIiwgIkYiLCAiYWUiLCAicGUiLCAieWUiLCAiZGUiLCAiX2UiLCAibWUiLCAiaGUiLCAidmUiLCAiU2UiLCAiRWUiLCAiUmUiLCAiQ2UiLCAia2UiLCAid2UiLCAiYmUiLCAiJGUiLCAieGUiLCAiT2UiLCAiamUiLCAiSWUiLCAiZ2UiLCAiUGUiLCAiVGUiLCAiRGUiLCAiVmUiLCAiTGUiLCAiTmUiLCAiRmUiLCAiVWUiLCAicWUiLCAiQWUiLCAiTWUiLCAiemUiLCAiQmUiLCAiSGUiLCAiTiIsICJjZSIsICJXZSIsICJUIiwgImUiLCAidCIsICJyIiwgImEiLCAiaSIsICJjIiwgImIiLCAiaCIsICJGIiwgIm8iLCAiTCIsICJTIiwgIlUiLCAiSyIsICIkIiwgIkgiLCAiXyIsICJNIiwgInkiLCAibSIsICJsIiwgInMiLCAidSIsICJ4IiwgInciLCAiZCIsICJQIiwgInAiLCAiZiIsICJJIiwgInYiLCAiQSIsICJOIiwgIk8iLCAiViIsICJXIiwgInEiLCAiQiIsICJHIiwgIkUiLCAiUiIsICJKIiwgInoiLCAiemUiLCAiaiIsICJnIiwgIldlIiwgIiRlIiwgIlEiLCAiYWUiLCAic2UiLCAiTyIsICJvZSIsICJnZSIsICJkZSIsICJjZSIsICJ1ZSIsICJ3IiwgIl8iLCAiX2UiLCAibSIsICJQIiwgInkiLCAiaGUiLCAiaiIsICJVIiwgInEiLCAiciIsICJlIiwgImciLCAiYSIsICJHIiwgIkEiLCAiayIsICJuIiwgIk4iLCAicmUiLCAiVyIsICJmIiwgInQiLCAidiIsICJCIiwgImkiLCAiUSIsICJsIiwgInMiLCAibyIsICJoIiwgInUiLCAiUyIsICJkIiwgIk0iLCAieCIsICJwIiwgIlYiLCAidmUiLCAiWCIsICJ6IiwgImIiLCAiYyIsICJUIiwgIkwiLCAiZWUiLCAiRSIsICJIIiwgIiQiLCAiSiIsICJLIiwgImFlIiwgIkMiLCAiaWUiLCAiRiIsICJZIiwgIkkiLCAiRCIsICJsZSIsICJaIiwgIm5lIiwgImZlIiwgInRlIiwgInhlIiwgIlIiLCAid2UiLCAiYmUiLCAiYSIsICJiIiwgImJlIiwgImUiLCAieGUiLCAiTWUiLCAiZyIsICJjNCIsICJRZSIsICJNIiwgIkh0IiwgImRlZiIsICJNZSIsICJjNCIsICJNZSIsICJ4ZSIsICJNZSIsICJzIiwgIk1lIiwgImUiLCAiZyIsICJIdCIsICJRZSIsICJWIiwgInRyIiwgImZyb20iLCAiTSIsICJzYWZlUnVuIiwgIkV2ZW50RW1pdHRlciIsICJtIiwgImRlZiIsICJYIiwgImZyb20iLCAibSIsICJWIiwgInYiLCAiZnJvbSIsICJtIiwgInRvIiwgImEiLCAiYiIsICJWIiwgInYiLCAicmVzb2x2ZSIsICJtIiwgImsiLCAidiIsICJuIiwgIm0iLCAicXVvdGUiLCAiVyIsICJEIiwgIm4iLCAiUCIsICJNIiwgImoiLCAiTCIsICJ0IiwgImUiLCAibiIsICJNZSIsICJhciIsICJXIiwgIlNlIiwgInJlIiwgIkluIiwgInIiLCAiQWUiLCAidXIiLCAiZW4iLCAibHIiLCAieXQiLCAiRG4iLCAiRGUiLCAiUm4iLCAiUG4iLCAiaSIsICJzIiwgImNyIiwgIm5lIiwgIm8iLCAiYSIsICJRIiwgInUiLCAiZnIiLCAia24iLCAiaHIiLCAiT24iLCAiTW4iLCAiZHIiLCAib2UiLCAiJGUiLCAiQ3QiLCAicHIiLCAiS3QiLCAiVHQiLCAieXIiLCAieGUiLCAiZWUiLCAidG4iLCAicSIsICJCbiIsICJGbiIsICJtciIsICJ2ZSIsICJJdCIsICJnciIsICJObiIsICJubiIsICJ2ciIsICJDZSIsICJqbiIsICJzdCIsICJQZSIsICJybiIsICJDIiwgImduIiwgIndyIiwgIm10IiwgIlIiLCAiemUiLCAiYnIiLCAibWUiLCAieHIiLCAiRXIiLCAiU3IiLCAiQXIiLCAic24iLCAiQmUiLCAiQ3IiLCAiVm4iLCAiRHQiLCAib3QiLCAiUnQiLCAiTG4iLCAiWmUiLCAib24iLCAiUHQiLCAiVHIiLCAiWGUiLCAiRmUiLCAiUmUiLCAiYXQiLCAia3QiLCAicGUiLCAiZXQiLCAiT3QiLCAiTXQiLCAiRWUiLCAid24iLCAiQSIsICJ5ZSIsICJ0dCIsICJiIiwgIkZ0IiwgInpuIiwgIkJ0IiwgInV0IiwgImllIiwgImwiLCAiYW4iLCAiJG4iLCAiY3QiLCAiSG4iLCAibnQiLCAiV24iLCAiWW4iLCAibHQiLCAibGUiLCAiVGUiLCAiRHIiLCAiVWUiLCAiVW4iLCAiV2UiLCAiUnIiLCAidW4iLCAiSXIiLCAiTyIsICJjZSIsICJOIiwgImtyIiwgInJ0IiwgInd0IiwgIk9yIiwgInZuIiwgIktlIiwgIkIiLCAiTXIiLCAiQnIiLCAiWG4iLCAiX24iLCAiTnQiLCAiYm4iLCAiZGUiLCAianQiLCAiSiIsICJRbiIsICJrZSIsICJndCIsICJGciIsICJHbiIsICJ2dCIsICJidCIsICJ4dCIsICJnZSIsICJxbiIsICJRZSIsICJWdCIsICJoIiwgImQiLCAiYyIsICJmIiwgImciLCAicCIsICJ2IiwgIkhlIiwgIlllIiwgIndlIiwgIkV0IiwgIlN0IiwgIml0IiwgInhuIiwgIkdlIiwgIkVuIiwgIlYiLCAiU24iLCAiJHIiLCAiQW4iLCAiTHIiLCAiTHQiLCAieSIsICJfIiwgInciLCAibSIsICJ4IiwgIkUiLCAiUyIsICJJIiwgImsiLCAiRCIsICJLIiwgIkF0IiwgInpyIiwgIlVyIiwgIlUiLCAiZnQiLCAiYmUiLCAiSm4iLCAiWXIiLCAiWHIiLCAicWUiLCAic2UiLCAiRyIsICJOZSIsICJqZSIsICJhZSIsICJmZSIsICIkdCIsICJHciIsICJ6dCIsICJabiIsICJlciIsICJxciIsICJWZSIsICJVdCIsICJKciIsICJDbiIsICJPZSIsICJlaSIsICIkIiwgIlQiLCAiWSIsICJ6IiwgIkgiLCAiRiIsICJYIiwgIkllIiwgInNyIiwgIl9lIiwgIm1uIiwgIm9yIiwgIl90IiwgInRpIiwgIm5pIiwgImxuIiwgImh0IiwgIld0IiwgInJpIiwgImlpIiwgImNuIiwgInNpIiwgImZuIiwgIll0IiwgInRyIiwgIkh0IiwgIm9pIiwgInVpIiwgImxpIiwgIlh0IiwgImhuIiwgInVlIiwgImRuIiwgImhpIiwgImRpIiwgInBpIiwgIlF0IiwgInlpIiwgIkd0IiwgIm5yIiwgIkplIiwgInZpIiwgIl9pIiwgInBuIiwgIndpIiwgImJpIiwgInJyIiwgIkVpIiwgInluIiwgIloiLCAiZHQiLCAiTGUiLCAicXQiLCAiS24iLCAiU2kiLCAiVG4iLCAiQWkiLCAiQ2kiLCAiS2kiLCAiSnQiLCAiaXIiLCAiVGkiLCAiWnQiLCAiaGUiLCAidGUiLCAicHQiLCAiSWkiLCAidWUiLCAiX2EiLCAiZnJvbSIsICJyZWdleHAiLCAic3RyIiwgInN0b3JlU3lzY2FsbHMiLCAiZW52IiwgImRlZiIsICJlIiwgIk0iLCAic3RvcmVTeXNjYWxscyIsICJtZXRhIiwgInJlc29sdmUiLCAiZGVmIiwgImFlIiwgImoiLCAiZHQiLCAicSIsICJhIiwgInAiLCAiRyIsICJubiIsICJRdCIsICJYZSIsICJ6dCIsICJvbiIsICJVZSIsICJrbiIsICJHbiIsICJWIiwgIkt0IiwgInhlIiwgIk1lIiwgIm0iLCAiRXZlbnRFbWl0dGVyIiwgIm1ldGEiLCAiZW52IiwgImVudiIsICJpIiwgImJpbmFyeSIsICJlIl0KfQo=", "dist/worker.js.map": "ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy91dGlsLnRzIiwgImRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy9wbHVnb3MvZW52aXJvbm1lbnRzL2N1c3RvbV9sb2dnZXIudHMiLCAiZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9lbnZpcm9ubWVudHMvc2FuZGJveF93b3JrZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCBmdW5jdGlvbiBzYWZlUnVuKGZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIGZuKCkuY2F0Y2goKGU6IGFueSkgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJDYXVnaHQgZXJyb3JcIiwgZS5tZXNzYWdlKTtcblxuICAgIC8vIHRocm93IGU7XG4gIH0pO1xufVxuIiwgImV4cG9ydCB0eXBlIExvZ0xldmVsID0gXCJpbmZvXCIgfCBcIndhcm5cIiB8IFwiZXJyb3JcIiB8IFwibG9nXCI7XG5cbmV4cG9ydCBjbGFzcyBDb25zb2xlTG9nZ2VyIHtcbiAgcHJpbnQ6IGJvb2xlYW47XG4gIGNhbGxiYWNrOiAobGV2ZWw6IExvZ0xldmVsLCBlbnRyeTogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNhbGxiYWNrOiAobGV2ZWw6IExvZ0xldmVsLCBlbnRyeTogc3RyaW5nKSA9PiB2b2lkLFxuICAgIHByaW50OiBib29sZWFuID0gdHJ1ZVxuICApIHtcbiAgICB0aGlzLnByaW50ID0gcHJpbnQ7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgbG9nKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5wdXNoKFwibG9nXCIsIGFyZ3MpO1xuICB9XG5cbiAgd2FybiguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMucHVzaChcIndhcm5cIiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMucHVzaChcImVycm9yXCIsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMucHVzaChcImluZm9cIiwgYXJncyk7XG4gIH1cblxuICBwdXNoKGxldmVsOiBMb2dMZXZlbCwgYXJnczogYW55W10pIHtcbiAgICB0aGlzLmNhbGxiYWNrKGxldmVsLCB0aGlzLmxvZ01lc3NhZ2UoYXJncykpO1xuICAgIGlmICh0aGlzLnByaW50KSB7XG4gICAgICBjb25zb2xlW2xldmVsXSguLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICBsb2dNZXNzYWdlKHZhbHVlczogYW55W10pOiBzdHJpbmcge1xuICAgIGxldCBwaWVjZXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgdmFsIG9mIHZhbHVlcykge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgIHBpZWNlcy5wdXNoKFwiXCIgKyB2YWwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgcGllY2VzLnB1c2goXCJ1bmRlZmluZWRcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBzID0gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGlmIChzLmxlbmd0aCA+IDUwMCkge1xuICAgICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcoMCwgNTAwKSArIFwiLi4uXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwaWVjZXMucHVzaChzKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIE1heSBiZSBjeWNsaWNhbCByZWZlcmVuY2VcbiAgICAgICAgICAgIHBpZWNlcy5wdXNoKFwiW2NpcmN1bGFyIG9iamVjdF1cIik7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGllY2VzLmpvaW4oXCIgXCIpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgc2FmZVJ1biB9IGZyb20gXCIuLi91dGlsLnRzXCI7XG5pbXBvcnQgeyBDb25zb2xlTG9nZ2VyIH0gZnJvbSBcIi4vY3VzdG9tX2xvZ2dlci50c1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlck1lc3NhZ2UsIFdvcmtlck1lc3NhZ2UgfSBmcm9tIFwiLi93b3JrZXIudHNcIjtcblxuaWYgKHR5cGVvZiBEZW5vID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIC8vIEB0cy1pZ25vcmU6IERlbm8gaGFja1xuICBzZWxmLkRlbm8gPSB7XG4gICAgYXJnczogW10sXG4gICAgLy8gQHRzLWlnbm9yZTogRGVubyBoYWNrXG4gICAgYnVpbGQ6IHtcbiAgICAgIGFyY2g6IFwieDg2XzY0XCIsXG4gICAgfSxcbiAgICBlbnY6IHtcbiAgICAgIC8vIEB0cy1pZ25vcmU6IERlbm8gaGFja1xuICAgICAgZ2V0KCkge1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5sZXQgbG9hZGVkRnVuY3Rpb25zID0gbmV3IE1hcDxzdHJpbmcsIEZ1bmN0aW9uPigpO1xubGV0IHBlbmRpbmdSZXF1ZXN0cyA9IG5ldyBNYXA8XG4gIG51bWJlcixcbiAge1xuICAgIHJlc29sdmU6IChyZXN1bHQ6IHVua25vd24pID0+IHZvaWQ7XG4gICAgcmVqZWN0OiAoZTogYW55KSA9PiB2b2lkO1xuICB9XG4+KCk7XG5cbmZ1bmN0aW9uIHdvcmtlclBvc3RNZXNzYWdlKG1zZzogQ29udHJvbGxlck1lc3NhZ2UpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LnBhcmVudCAhPT0gd2luZG93KSB7XG4gICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShtc2csIFwiKlwiKTtcbiAgfSBlbHNlIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKG1zZyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBmdW5jdGlvbiBzeXNjYWxsKG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPGFueT47XG4gIC8vIGZ1bmN0aW9uIHJlcXVpcmUobW9kdWxlTmFtZTogc3RyaW5nKTogYW55O1xufVxuXG5sZXQgc3lzY2FsbFJlcUlkID0gMDtcblxuc2VsZi5zeXNjYWxsID0gYXN5bmMgKG5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pID0+IHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzeXNjYWxsUmVxSWQrKztcbiAgICBwZW5kaW5nUmVxdWVzdHMuc2V0KHN5c2NhbGxSZXFJZCwgeyByZXNvbHZlLCByZWplY3QgfSk7XG4gICAgd29ya2VyUG9zdE1lc3NhZ2Uoe1xuICAgICAgdHlwZTogXCJzeXNjYWxsXCIsXG4gICAgICBpZDogc3lzY2FsbFJlcUlkLFxuICAgICAgbmFtZSxcbiAgICAgIGFyZ3MsXG4gICAgfSk7XG4gIH0pO1xufTtcblxubGV0IGxvYWRlZE1vZHVsZXMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuXG4vLyBAdHMtaWdub3JlOiBnbG9iYWwgdG8gbG9hZCBkeW5hbWljIGltcG9ydHNcbnNlbGYucmVxdWlyZSA9IChtb2R1bGVOYW1lOiBzdHJpbmcpOiBhbnkgPT4ge1xuICAvLyBjb25zb2xlLmxvZyhcIlJlcXVpcmluZ1wiLCBtb2R1bGVOYW1lLCBsb2FkZWRNb2R1bGVzLmdldChtb2R1bGVOYW1lKSk7XG4gIGNvbnN0IG1vZCA9IGxvYWRlZE1vZHVsZXMuZ2V0KG1vZHVsZU5hbWUpO1xuICBpZiAoIW1vZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEeW5hbWljYWxseSBpbXBvcnRpbmcgbm9uLXByZWxvYWRlZCBsaWJyYXJ5ICR7bW9kdWxlTmFtZX1gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG1vZDtcbn07XG5cbi8vIEB0cy1pZ25vcmVcbnNlbGYuY29uc29sZSA9IG5ldyBDb25zb2xlTG9nZ2VyKChsZXZlbCwgbWVzc2FnZSkgPT4ge1xuICB3b3JrZXJQb3N0TWVzc2FnZSh7IHR5cGU6IFwibG9nXCIsIGxldmVsLCBtZXNzYWdlIH0pO1xufSwgZmFsc2UpO1xuXG5mdW5jdGlvbiB3cmFwU2NyaXB0KGNvZGU6IHN0cmluZykge1xuICByZXR1cm4gYHJldHVybiAoJHtjb2RlfSlbXCJkZWZhdWx0XCJdYDtcbn1cblxuc2VsZi5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoZXZlbnQ6IHsgZGF0YTogV29ya2VyTWVzc2FnZSB9KSA9PiB7XG4gIHNhZmVSdW4oYXN5bmMgKCkgPT4ge1xuICAgIGxldCBkYXRhID0gZXZlbnQuZGF0YTtcbiAgICBzd2l0Y2ggKGRhdGEudHlwZSkge1xuICAgICAgY2FzZSBcImxvYWRcIjpcbiAgICAgICAge1xuICAgICAgICAgIGxldCBmbjIgPSBuZXcgRnVuY3Rpb24od3JhcFNjcmlwdChkYXRhLmNvZGUhKSk7XG4gICAgICAgICAgbG9hZGVkRnVuY3Rpb25zLnNldChkYXRhLm5hbWUhLCBmbjIoKSk7XG4gICAgICAgICAgd29ya2VyUG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgdHlwZTogXCJpbml0ZWRcIixcbiAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxvYWQtZGVwZW5kZW5jeVwiOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJSZWNlaXZlZCBkZXBcIiwgZGF0YS5uYW1lKTtcbiAgICAgICAgICBsZXQgZm4zID0gbmV3IEZ1bmN0aW9uKGByZXR1cm4gJHtkYXRhLmNvZGUhfWApO1xuICAgICAgICAgIGxldCB2ID0gZm4zKCk7XG4gICAgICAgICAgbG9hZGVkTW9kdWxlcy5zZXQoZGF0YS5uYW1lISwgdik7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJEZXAgdmFsXCIsIHYpO1xuICAgICAgICAgIHdvcmtlclBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHR5cGU6IFwiZGVwZW5kZW5jeS1pbml0ZWRcIixcbiAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpbnZva2VcIjpcbiAgICAgICAge1xuICAgICAgICAgIGxldCBmbiA9IGxvYWRlZEZ1bmN0aW9ucy5nZXQoZGF0YS5uYW1lISk7XG4gICAgICAgICAgaWYgKCFmbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGdW5jdGlvbiBub3QgbG9hZGVkOiAke2RhdGEubmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoZm4oLi4uKGRhdGEuYXJncyB8fCBbXSkpKTtcbiAgICAgICAgICAgIHdvcmtlclBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgdHlwZTogXCJyZXN1bHRcIixcbiAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgICAgICAgICAgfSBhcyBDb250cm9sbGVyTWVzc2FnZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICB3b3JrZXJQb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIHR5cGU6IFwicmVzdWx0XCIsXG4gICAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgICAgICAgICBlcnJvcjogZS5tZXNzYWdlLFxuICAgICAgICAgICAgICBzdGFjazogZS5zdGFjayxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gY29uc29sZS5lcnJvcihcIkVycm9yIGludm9raW5nIGZ1bmN0aW9uXCIsIGRhdGEubmFtZSwgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic3lzY2FsbC1yZXNwb25zZVwiOlxuICAgICAgICB7XG4gICAgICAgICAgbGV0IHN5c2NhbGxJZCA9IGRhdGEuaWQhO1xuICAgICAgICAgIGNvbnN0IGxvb2t1cCA9IHBlbmRpbmdSZXF1ZXN0cy5nZXQoc3lzY2FsbElkKTtcbiAgICAgICAgICBpZiAoIWxvb2t1cCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgIFwiQ3VycmVudCBvdXRzdGFuZGluZyByZXF1ZXN0c1wiLFxuICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMsXG4gICAgICAgICAgICAgIFwibG9va2luZyB1cFwiLFxuICAgICAgICAgICAgICBzeXNjYWxsSWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIHJlcXVlc3QgaWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0cy5kZWxldGUoc3lzY2FsbElkKTtcbiAgICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgbG9va3VwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5lcnJvcikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb29rdXAucmVzb2x2ZShkYXRhLnJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9KTtcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7QUFBTyxXQUFTLFFBQVEsSUFBeUI7QUFDL0MsT0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFXO0FBQ3JCLGNB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", "dist/index.html": "PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCIgLz4KICAgIDxiYXNlIGhyZWY9Ii8iIC8+CgogICAgPHRpdGxlPlNpbHZlciBCdWxsZXQ8L3RpdGxlPgogICAgPHNjcmlwdD4KICAgICAgRGVubyA9IHsKICAgICAgICBhcmdzOiBbXSwKICAgICAgICBidWlsZDogewogICAgICAgICAgYXJjaDogIng4Nl82NCIsCiAgICAgICAgfSwKICAgICAgICBlbnY6IHsKICAgICAgICAgIGdldChrZXkpIHsKICAgICAgICAgICAgLy8gcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfTsKICAgIDwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICBodG1sLAogICAgICBib2R5IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzY3JpcHQ+CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kYXRhc2V0LnRoZW1lID0gbG9jYWxTdG9yYWdlLnRoZW1lID8/ICJsaWdodCI7CiAgICA8L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibWFpbi5jc3MiIC8+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgc3JjPSJjbGllbnQuanMiPjwvc2NyaXB0PgogICAgPCEtLWxpbmsgcmVsPSJtYW5pZmVzdCIgaHJlZj0ibWFuaWZlc3QuanNvbiIgLy0tPgogICAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImltYWdlcy9mYXZpY29uLmdpZiIgLz4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8ZGl2IGlkPSJzYi1yb290Ij48L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K", "dist/.DS_Store": "AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", "dist/worker.js": "KCgpID0+IHsKICAvLyBkZW5vOmZpbGU6Ly8vVXNlcnMvemVmL2dpdC9zaWx2ZXJidWxsZXQvcGFja2FnZXMvcGx1Z29zL3V0aWwudHMKICBmdW5jdGlvbiBzYWZlUnVuKGZuKSB7CiAgICBmbigpLmNhdGNoKChlKSA9PiB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkNhdWdodCBlcnJvciIsIGUubWVzc2FnZSk7CiAgICB9KTsKICB9CgogIC8vIGRlbm86ZmlsZTovLy9Vc2Vycy96ZWYvZ2l0L3NpbHZlcmJ1bGxldC9wYWNrYWdlcy9wbHVnb3MvZW52aXJvbm1lbnRzL2N1c3RvbV9sb2dnZXIudHMKICB2YXIgQ29uc29sZUxvZ2dlciA9IGNsYXNzIHsKICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBwcmludCA9IHRydWUpIHsKICAgICAgdGhpcy5wcmludCA9IHByaW50OwogICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICB9CiAgICBsb2coLi4uYXJncykgewogICAgICB0aGlzLnB1c2goImxvZyIsIGFyZ3MpOwogICAgfQogICAgd2FybiguLi5hcmdzKSB7CiAgICAgIHRoaXMucHVzaCgid2FybiIsIGFyZ3MpOwogICAgfQogICAgZXJyb3IoLi4uYXJncykgewogICAgICB0aGlzLnB1c2goImVycm9yIiwgYXJncyk7CiAgICB9CiAgICBpbmZvKC4uLmFyZ3MpIHsKICAgICAgdGhpcy5wdXNoKCJpbmZvIiwgYXJncyk7CiAgICB9CiAgICBwdXNoKGxldmVsLCBhcmdzKSB7CiAgICAgIHRoaXMuY2FsbGJhY2sobGV2ZWwsIHRoaXMubG9nTWVzc2FnZShhcmdzKSk7CiAgICAgIGlmICh0aGlzLnByaW50KSB7CiAgICAgICAgY29uc29sZVtsZXZlbF0oLi4uYXJncyk7CiAgICAgIH0KICAgIH0KICAgIGxvZ01lc3NhZ2UodmFsdWVzKSB7CiAgICAgIGxldCBwaWVjZXMgPSBbXTsKICAgICAgZm9yIChsZXQgdmFsIG9mIHZhbHVlcykgewogICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbCkgewogICAgICAgICAgY2FzZSAic3RyaW5nIjoKICAgICAgICAgIGNhc2UgIm51bWJlciI6CiAgICAgICAgICAgIHBpZWNlcy5wdXNoKCIiICsgdmFsKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJ1bmRlZmluZWQiOgogICAgICAgICAgICBwaWVjZXMucHVzaCgidW5kZWZpbmVkIik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBsZXQgcyA9IEpTT04uc3RyaW5naWZ5KHZhbCwgbnVsbCwgMik7CiAgICAgICAgICAgICAgaWYgKHMubGVuZ3RoID4gNTAwKSB7CiAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcoMCwgNTAwKSArICIuLi4iOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwaWVjZXMucHVzaChzKTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgICAgcGllY2VzLnB1c2goIltjaXJjdWxhciBvYmplY3RdIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBpZWNlcy5qb2luKCIgIik7CiAgICB9CiAgfTsKCiAgLy8gZGVubzpmaWxlOi8vL1VzZXJzL3plZi9naXQvc2lsdmVyYnVsbGV0L3BhY2thZ2VzL3BsdWdvcy9lbnZpcm9ubWVudHMvc2FuZGJveF93b3JrZXIudHMKICBpZiAodHlwZW9mIERlbm8gPT09ICJ1bmRlZmluZWQiKSB7CiAgICBzZWxmLkRlbm8gPSB7CiAgICAgIGFyZ3M6IFtdLAogICAgICBidWlsZDogewogICAgICAgIGFyY2g6ICJ4ODZfNjQiCiAgICAgIH0sCiAgICAgIGVudjogewogICAgICAgIGdldCgpIHsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQogIHZhciBsb2FkZWRGdW5jdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIHZhciBwZW5kaW5nUmVxdWVzdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGZ1bmN0aW9uIHdvcmtlclBvc3RNZXNzYWdlKG1zZykgewogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiICYmIHdpbmRvdy5wYXJlbnQgIT09IHdpbmRvdykgewogICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKG1zZywgIioiKTsKICAgIH0gZWxzZSB7CiAgICAgIHNlbGYucG9zdE1lc3NhZ2UobXNnKTsKICAgIH0KICB9CiAgdmFyIHN5c2NhbGxSZXFJZCA9IDA7CiAgc2VsZi5zeXNjYWxsID0gYXN5bmMgKG5hbWUsIC4uLmFyZ3MpID0+IHsKICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIHN5c2NhbGxSZXFJZCsrOwogICAgICBwZW5kaW5nUmVxdWVzdHMuc2V0KHN5c2NhbGxSZXFJZCwgeyByZXNvbHZlLCByZWplY3QgfSk7CiAgICAgIHdvcmtlclBvc3RNZXNzYWdlKHsKICAgICAgICB0eXBlOiAic3lzY2FsbCIsCiAgICAgICAgaWQ6IHN5c2NhbGxSZXFJZCwKICAgICAgICBuYW1lLAogICAgICAgIGFyZ3MKICAgICAgfSk7CiAgICB9KTsKICB9OwogIHZhciBsb2FkZWRNb2R1bGVzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICBzZWxmLnJlcXVpcmUgPSAobW9kdWxlTmFtZSkgPT4gewogICAgY29uc3QgbW9kID0gbG9hZGVkTW9kdWxlcy5nZXQobW9kdWxlTmFtZSk7CiAgICBpZiAoIW1vZCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgYER5bmFtaWNhbGx5IGltcG9ydGluZyBub24tcHJlbG9hZGVkIGxpYnJhcnkgJHttb2R1bGVOYW1lfWAKICAgICAgKTsKICAgIH0KICAgIHJldHVybiBtb2Q7CiAgfTsKICBzZWxmLmNvbnNvbGUgPSBuZXcgQ29uc29sZUxvZ2dlcigobGV2ZWwsIG1lc3NhZ2UpID0+IHsKICAgIHdvcmtlclBvc3RNZXNzYWdlKHsgdHlwZTogImxvZyIsIGxldmVsLCBtZXNzYWdlIH0pOwogIH0sIGZhbHNlKTsKICBmdW5jdGlvbiB3cmFwU2NyaXB0KGNvZGUpIHsKICAgIHJldHVybiBgcmV0dXJuICgke2NvZGV9KVsiZGVmYXVsdCJdYDsKICB9CiAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgKGV2ZW50KSA9PiB7CiAgICBzYWZlUnVuKGFzeW5jICgpID0+IHsKICAgICAgbGV0IGRhdGEgPSBldmVudC5kYXRhOwogICAgICBzd2l0Y2ggKGRhdGEudHlwZSkgewogICAgICAgIGNhc2UgImxvYWQiOgogICAgICAgICAgewogICAgICAgICAgICBsZXQgZm4yID0gbmV3IEZ1bmN0aW9uKHdyYXBTY3JpcHQoZGF0YS5jb2RlKSk7CiAgICAgICAgICAgIGxvYWRlZEZ1bmN0aW9ucy5zZXQoZGF0YS5uYW1lLCBmbjIoKSk7CiAgICAgICAgICAgIHdvcmtlclBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICB0eXBlOiAiaW5pdGVkIiwKICAgICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJsb2FkLWRlcGVuZGVuY3kiOgogICAgICAgICAgewogICAgICAgICAgICBsZXQgZm4zID0gbmV3IEZ1bmN0aW9uKGByZXR1cm4gJHtkYXRhLmNvZGV9YCk7CiAgICAgICAgICAgIGxldCB2ID0gZm4zKCk7CiAgICAgICAgICAgIGxvYWRlZE1vZHVsZXMuc2V0KGRhdGEubmFtZSwgdik7CiAgICAgICAgICAgIHdvcmtlclBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICB0eXBlOiAiZGVwZW5kZW5jeS1pbml0ZWQiLAogICAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImludm9rZSI6CiAgICAgICAgICB7CiAgICAgICAgICAgIGxldCBmbiA9IGxvYWRlZEZ1bmN0aW9ucy5nZXQoZGF0YS5uYW1lKTsKICAgICAgICAgICAgaWYgKCFmbikgewogICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gbm90IGxvYWRlZDogJHtkYXRhLm5hbWV9YCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGZuKC4uLmRhdGEuYXJncyB8fCBbXSkpOwogICAgICAgICAgICAgIHdvcmtlclBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJyZXN1bHQiLAogICAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgICAgICByZXN1bHQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHdvcmtlclBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICAgIHR5cGU6ICJyZXN1bHQiLAogICAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsCiAgICAgICAgICAgICAgICBlcnJvcjogZS5tZXNzYWdlLAogICAgICAgICAgICAgICAgc3RhY2s6IGUuc3RhY2sKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAic3lzY2FsbC1yZXNwb25zZSI6CiAgICAgICAgICB7CiAgICAgICAgICAgIGxldCBzeXNjYWxsSWQgPSBkYXRhLmlkOwogICAgICAgICAgICBjb25zdCBsb29rdXAgPSBwZW5kaW5nUmVxdWVzdHMuZ2V0KHN5c2NhbGxJZCk7CiAgICAgICAgICAgIGlmICghbG9va3VwKSB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coCiAgICAgICAgICAgICAgICAiQ3VycmVudCBvdXRzdGFuZGluZyByZXF1ZXN0cyIsCiAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMsCiAgICAgICAgICAgICAgICAibG9va2luZyB1cCIsCiAgICAgICAgICAgICAgICBzeXNjYWxsSWQKICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIHRocm93IEVycm9yKCJJbnZhbGlkIHJlcXVlc3QgaWQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMuZGVsZXRlKHN5c2NhbGxJZCk7CiAgICAgICAgICAgIGlmIChkYXRhLmVycm9yKSB7CiAgICAgICAgICAgICAgbG9va3VwLnJlamVjdChuZXcgRXJyb3IoZGF0YS5lcnJvcikpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxvb2t1cC5yZXNvbHZlKGRhdGEucmVzdWx0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0pOwogIH0pOwp9KSgpOwovLyMgc291cmNlTWFwcGluZ1VSTD13b3JrZXIuanMubWFwCg==", "dist/main.css": "LmNtLWVkaXRvciB7CiAgZm9udC1zaXplOiAxOHB4OwogIHBhZGRpbmc6IDAgMjBweDsKICAtLW1heC13aWR0aDogODAwcHg7Cn0KLmNtLWVkaXRvciAuY20tY29udGVudCB7CiAgbWFyZ2luOiBhdXRvOwogIG1heC13aWR0aDogdmFyKC0tbWF4LXdpZHRoKTsKfQouY20tZWRpdG9yIC5zYi1pbmxpbmUtaW1nIHsKICBtYXgtd2lkdGg6IGNhbGModmFyKC0tbWF4LXdpZHRoKSAqIDAuOSk7Cn0KLmNtLWVkaXRvci5jbS1mb2N1c2VkIHsKICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7Cn0KLmNtLWVkaXRvciAuaW9zLXNhZmFyaS1yZWFkb25seSB7CiAgZm9udC1zaXplOiA2MCU7Cn0KLmNtLWVkaXRvciAuc2ItbGluZS11bC5zYi1saW5lLWxpLTEgewogIHRleHQtaW5kZW50OiAtMmNoOwogIHBhZGRpbmctbGVmdDogMmNoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtdWwuc2ItbGluZS1saS0xLnNiLWxpbmUtdGFzayB7CiAgdGV4dC1pbmRlbnQ6IC02Y2g7CiAgcGFkZGluZy1sZWZ0OiA2Y2g7Cn0KLmNtLWVkaXRvciAuc2ItbGluZS11bC5zYi1saW5lLWxpLTEuc2ItbGluZS1ibG9ja3F1b3RlIHsKICB0ZXh0LWluZGVudDogLTRjaDsKICBwYWRkaW5nLWxlZnQ6IDRjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLXVsLnNiLWxpbmUtbGktMS5zYi1saW5lLWxpLTIgewogIHRleHQtaW5kZW50OiAtNGNoOwogIHBhZGRpbmctbGVmdDogNGNoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtdWwuc2ItbGluZS1saS0xLnNiLWxpbmUtbGktMi5zYi1saW5lLXRhc2sgewogIHRleHQtaW5kZW50OiAtOGNoOwogIHBhZGRpbmctbGVmdDogOGNoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtdWwuc2ItbGluZS1saS0xLnNiLWxpbmUtbGktMi5zYi1saW5lLWJsb2NrcXVvdGUgewogIHRleHQtaW5kZW50OiAtNmNoOwogIHBhZGRpbmctbGVmdDogNmNoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtdWwuc2ItbGluZS1saS0xLnNiLWxpbmUtbGktMi5zYi1saW5lLWxpLTMgewogIHRleHQtaW5kZW50OiAtNmNoOwogIHBhZGRpbmctbGVmdDogNmNoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtdWwuc2ItbGluZS1saS0xLnNiLWxpbmUtbGktMi5zYi1saW5lLWxpLTMuc2ItbGluZS10YXNrIHsKICB0ZXh0LWluZGVudDogLTEwY2g7CiAgcGFkZGluZy1sZWZ0OiAxMGNoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtdWwuc2ItbGluZS1saS0xLnNiLWxpbmUtbGktMi5zYi1saW5lLWxpLTMuc2ItbGluZS1ibG9ja3F1b3RlIHsKICB0ZXh0LWluZGVudDogLThjaDsKICBwYWRkaW5nLWxlZnQ6IDhjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLXVsLnNiLWxpbmUtbGktMS5zYi1saW5lLWxpLTIuc2ItbGluZS1saS0zLnNiLWxpbmUtbGktNCB7CiAgdGV4dC1pbmRlbnQ6IC04Y2g7CiAgcGFkZGluZy1sZWZ0OiA4Y2g7Cn0KLmNtLWVkaXRvciAuc2ItbGluZS11bC5zYi1saW5lLWxpLTEuc2ItbGluZS1saS0yLnNiLWxpbmUtbGktMy5zYi1saW5lLWxpLTQuc2ItbGluZS10YXNrIHsKICB0ZXh0LWluZGVudDogLTEyY2g7CiAgcGFkZGluZy1sZWZ0OiAxMmNoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtdWwuc2ItbGluZS1saS0xLnNiLWxpbmUtbGktMi5zYi1saW5lLWxpLTMuc2ItbGluZS1saS00LnNiLWxpbmUtYmxvY2txdW90ZSB7CiAgdGV4dC1pbmRlbnQ6IC0xMGNoOwogIHBhZGRpbmctbGVmdDogMTBjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLXVsLnNiLWxpbmUtbGktMS5zYi1saW5lLWxpLTIuc2ItbGluZS1saS0zLnNiLWxpbmUtbGktNC5zYi1saW5lLWxpLTUgewogIHRleHQtaW5kZW50OiAtMTBjaDsKICBwYWRkaW5nLWxlZnQ6IDEwY2g7Cn0KLmNtLWVkaXRvciAuc2ItbGluZS11bC5zYi1saW5lLWxpLTEuc2ItbGluZS1saS0yLnNiLWxpbmUtbGktMy5zYi1saW5lLWxpLTQuc2ItbGluZS1saS01LnNiLWxpbmUtdGFzayB7CiAgdGV4dC1pbmRlbnQ6IC0xNGNoOwogIHBhZGRpbmctbGVmdDogMTRjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLXVsLnNiLWxpbmUtbGktMS5zYi1saW5lLWxpLTIuc2ItbGluZS1saS0zLnNiLWxpbmUtbGktNC5zYi1saW5lLWxpLTUuc2ItbGluZS1ibG9ja3F1b3RlIHsKICB0ZXh0LWluZGVudDogLTEyY2g7CiAgcGFkZGluZy1sZWZ0OiAxMmNoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtb2wuc2ItbGluZS1saS0xIHsKICB0ZXh0LWluZGVudDogLTNjaDsKICBwYWRkaW5nLWxlZnQ6IDNjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLW9sLnNiLWxpbmUtbGktMS5zYi1saW5lLXRhc2sgewogIHRleHQtaW5kZW50OiAtN2NoOwogIHBhZGRpbmctbGVmdDogN2NoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtb2wuc2ItbGluZS1saS0xLnNiLWxpbmUtYmxvY2txdW90ZSB7CiAgdGV4dC1pbmRlbnQ6IC01Y2g7CiAgcGFkZGluZy1sZWZ0OiA1Y2g7Cn0KLmNtLWVkaXRvciAuc2ItbGluZS1vbC5zYi1saW5lLWxpLTEuc2ItbGluZS1saS0yIHsKICB0ZXh0LWluZGVudDogLTRjaDsKICBwYWRkaW5nLWxlZnQ6IDRjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLW9sLnNiLWxpbmUtbGktMS5zYi1saW5lLWxpLTIuc2ItbGluZS10YXNrIHsKICB0ZXh0LWluZGVudDogLThjaDsKICBwYWRkaW5nLWxlZnQ6IDhjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLW9sLnNiLWxpbmUtbGktMS5zYi1saW5lLWxpLTIuc2ItbGluZS1ibG9ja3F1b3RlIHsKICB0ZXh0LWluZGVudDogLTZjaDsKICBwYWRkaW5nLWxlZnQ6IDZjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLW9sLnNiLWxpbmUtbGktMS5zYi1saW5lLWxpLTIuc2ItbGluZS1saS0zIHsKICB0ZXh0LWluZGVudDogLTZjaDsKICBwYWRkaW5nLWxlZnQ6IDZjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLW9sLnNiLWxpbmUtbGktMS5zYi1saW5lLWxpLTIuc2ItbGluZS1saS0zLnNiLWxpbmUtdGFzayB7CiAgdGV4dC1pbmRlbnQ6IC0xMGNoOwogIHBhZGRpbmctbGVmdDogMTBjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLW9sLnNiLWxpbmUtbGktMS5zYi1saW5lLWxpLTIuc2ItbGluZS1saS0zLnNiLWxpbmUtYmxvY2txdW90ZSB7CiAgdGV4dC1pbmRlbnQ6IC04Y2g7CiAgcGFkZGluZy1sZWZ0OiA4Y2g7Cn0KLmNtLWVkaXRvciAuc2ItbGluZS1vbC5zYi1saW5lLWxpLTEuc2ItbGluZS1saS0yLnNiLWxpbmUtbGktMy5zYi1saW5lLWxpLTQgewogIHRleHQtaW5kZW50OiAtOGNoOwogIHBhZGRpbmctbGVmdDogOGNoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtb2wuc2ItbGluZS1saS0xLnNiLWxpbmUtbGktMi5zYi1saW5lLWxpLTMuc2ItbGluZS1saS00LnNiLWxpbmUtdGFzayB7CiAgdGV4dC1pbmRlbnQ6IC0xMmNoOwogIHBhZGRpbmctbGVmdDogMTJjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLW9sLnNiLWxpbmUtbGktMS5zYi1saW5lLWxpLTIuc2ItbGluZS1saS0zLnNiLWxpbmUtbGktNC5zYi1saW5lLWJsb2NrcXVvdGUgewogIHRleHQtaW5kZW50OiAtMTBjaDsKICBwYWRkaW5nLWxlZnQ6IDEwY2g7Cn0KLmNtLWVkaXRvciAuc2ItbGluZS1vbC5zYi1saW5lLWxpLTEuc2ItbGluZS1saS0yLnNiLWxpbmUtbGktMy5zYi1saW5lLWxpLTQuc2ItbGluZS1saS01IHsKICB0ZXh0LWluZGVudDogLTEwY2g7CiAgcGFkZGluZy1sZWZ0OiAxMGNoOwp9Ci5jbS1lZGl0b3IgLnNiLWxpbmUtb2wuc2ItbGluZS1saS0xLnNiLWxpbmUtbGktMi5zYi1saW5lLWxpLTMuc2ItbGluZS1saS00LnNiLWxpbmUtbGktNS5zYi1saW5lLXRhc2sgewogIHRleHQtaW5kZW50OiAtMTRjaDsKICBwYWRkaW5nLWxlZnQ6IDE0Y2g7Cn0KLmNtLWVkaXRvciAuc2ItbGluZS1vbC5zYi1saW5lLWxpLTEuc2ItbGluZS1saS0yLnNiLWxpbmUtbGktMy5zYi1saW5lLWxpLTQuc2ItbGluZS1saS01LnNiLWxpbmUtYmxvY2txdW90ZSB7CiAgdGV4dC1pbmRlbnQ6IC0xMmNoOwogIHBhZGRpbmctbGVmdDogMTJjaDsKfQouY20tZWRpdG9yIC5zYi1saW5lLWNvbW1lbnQgewogIHRleHQtaW5kZW50OiAtM2NoOwogIHBhZGRpbmctbGVmdDogM2NoOwp9Cgouc2ItZmlsdGVyLXdyYXBwZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBtYXJnaW46IGF1dG87CiAgbWF4LXdpZHRoOiA1MDBweDsKICBoZWlnaHQ6IDYwMHB4OwogIGxlZnQ6IDA7CiAgcmlnaHQ6IDA7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBtYXgtaGVpZ2h0OiAyOTBweDsKICB6LWluZGV4OiAxMDA7Cn0KCi5zYi1maWx0ZXItYm94IHsKICBib3JkZXItcmFkaXVzOiA4cHg7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBtYXJnaW46IDEwcHg7Cn0KLnNiLWZpbHRlci1ib3ggLnNiLWhlYWRlciB7CiAgcGFkZGluZzogMTNweCAxMHB4IDEwcHggMTBweDsKICBkaXNwbGF5OiBmbGV4Owp9Ci5zYi1maWx0ZXItYm94IC5zYi1oZWFkZXIgbGFiZWwgewogIGNvbG9yOiB2YXIoLS1oaWdobGlnaHQtY29sb3IpOwogIG1hcmdpbjogM3B4Owp9Ci5zYi1maWx0ZXItYm94IC5zYi1oZWFkZXIgaW5wdXQgewogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGJvcmRlcjogMDsKICBwYWRkaW5nOiAzcHg7CiAgb3V0bGluZTogMDsKICBmb250LXNpemU6IDFlbTsKICBmbGV4LWdyb3c6IDEwMDsKfQouc2ItZmlsdGVyLWJveCAuc2ItaGVscC10ZXh0IHsKICBwYWRkaW5nOiA1cHg7Cn0KLnNiLWZpbHRlci1ib3ggLnNiLXJlc3VsdC1saXN0IHsKICBtYXgtaGVpZ2h0OiAyMTZweDsKICBvdmVyZmxvdy15OiBzY3JvbGw7Cn0KLnNiLWZpbHRlci1ib3ggLnNiLXJlc3VsdC1saXN0IC5zYi1pY29uIHsKICBwYWRkaW5nOiAwIDhweCAwIDVweDsKfQouc2ItZmlsdGVyLWJveCAuc2ItcmVzdWx0LWxpc3QgLnNiLW5hbWUgewogIHBhZGRpbmctdG9wOiAtM3B4Owp9Ci5zYi1maWx0ZXItYm94IC5zYi1vcHRpb24sCi5zYi1maWx0ZXItYm94IC5zYi1zZWxlY3RlZC1vcHRpb24gewogIHBhZGRpbmc6IDhweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgaGVpZ2h0OiAyMHB4OwogIGxpbmUtaGVpZ2h0OiAyMHB4Owp9Ci5zYi1maWx0ZXItYm94IC5zYi1zZWxlY3RlZC1vcHRpb24gewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWhpZ2hsaWdodC1jb2xvcik7Cn0KLnNiLWZpbHRlci1ib3ggLnNiLW9wdGlvbiAuc2ItaGludCwKLnNiLWZpbHRlci1ib3ggLnNiLXNlbGVjdGVkLW9wdGlvbiAuc2ItaGludCB7CiAgZmxvYXQ6IHJpZ2h0OwogIG1hcmdpbi1yaWdodDogMDsKICBtYXJnaW4tdG9wOiAtNHB4OwogIHBhZGRpbmctbGVmdDogNXB4OwogIHBhZGRpbmctcmlnaHQ6IDVweDsKICBwYWRkaW5nLXRvcDogM3B4OwogIHBhZGRpbmctYm90dG9tOiAzcHg7CiAgYm9yZGVyLXJhZGl1czogNXB4Owp9Cgojc2Itcm9vdCB7CiAgZm9udC1mYW1pbHk6IEFyaWFsOwogIC0taGlnaGxpZ2h0LWNvbG9yOiAjNDY0Y2ZjOwp9Cgojc2ItdG9wIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDVkNWQ1OwogIGJvcmRlci1ib3R0b206ICNjMWMxYzEgMXB4IHNvbGlkOwogIGNvbG9yOiAjMzczNzM3Owp9Cgouc2ItcGFuZWwgewogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2VlZTsKfQoKLnNiLWJocyB7CiAgYm9yZGVyLXRvcDogI2MxYzFjMSAxcHggc29saWQ7Cn0KCi5zYi1tb2RhbCB7CiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9Cgouc2Itbm90aWZpY2F0aW9ucyB7CiAgZm9udC1mYW1pbHk6ICJpQS1Nb25vIjsKfQoKLnNiLW5vdGlmaWNhdGlvbnMgPiBkaXYgewogIGJvcmRlcjogIzI5MjkyOSAxcHggc29saWQ7Cn0KCi5zYi1ub3RpZmljYXRpb24taW5mbyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2JiZGRmNzsKfQoKLnNiLW5vdGlmaWNhdGlvbi1lcnJvciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmNTQ1NDsKfQoKLnNiLXNhdmVkIHsKICBjb2xvcjogIzExMTsKfQoKLnNiLXVuc2F2ZWQgewogIGNvbG9yOiAjNWU1ZTVlOwp9Cgouc2ItbG9hZGluZyB7CiAgY29sb3I6ICM3YTdhN2E7Cn0KCi5zYi1hY3Rpb25zIGJ1dHRvbiB7CiAgYm9yZGVyOiAxcHggc29saWQgIzc4OTdkMDsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgbWFyZ2luOiAzcHg7CiAgZm9udC1zaXplOiAxNXB4OwogIHBhZGRpbmc6IDVweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2Owp9CgovKiBGaWx0ZXIgYm94ZXMgKi8KLnNiLWZpbHRlci1ib3ggewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgYm9yZGVyOiAjNjc2NzY3IDFweCBzb2xpZDsKICBib3gtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMzUpIDBweCAyMHB4IDIwcHg7Cn0KCi5zYi1maWx0ZXItYm94IC5zYi1oZWFkZXIgewogIGJvcmRlci1ib3R0b206IDFweCAjNmM2YzZjIHNvbGlkOwp9Cgouc2ItZmlsdGVyLWJveCAuc2ItaGVhZGVyIGlucHV0IHsKICBmb250LWZhbWlseTogIkFyaWFsIjsKICBjb2xvcjogIzAwMDsKfQoKLnNiLWZpbHRlci1ib3ggLnNiLWhlYWRlciBpbnB1dDo6cGxhY2Vob2xkZXIgewogIGNvbG9yOiAjYzdjN2M3OwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KCi5zYi1maWx0ZXItYm94IC5zYi1oZWxwLXRleHQgewogIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CiAgYm9yZGVyLWJvdHRvbTogMXB4ICM2YzZjNmMgc29saWQ7CiAgY29sb3I6ICM1NTU7Cn0KCi5zYi1maWx0ZXItYm94IC5zYi1zZWxlY3RlZC1vcHRpb24gewogIGNvbG9yOiAjZWVlOwp9Cgouc2ItZmlsdGVyLWJveCAuc2Itb3B0aW9uIC5zYi1oaW50LAouc2ItZmlsdGVyLWJveCAuc2Itc2VsZWN0ZWQtb3B0aW9uIC5zYi1oaW50IHsKICBjb2xvcjogI2VlZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyNDc2Owp9CgovKiBFZGl0b3IgKi8KLmNtLWNvbnRlbnQgewogIGZvbnQtZmFtaWx5OiAiaUEtTW9ubyIsICJNZW5sbyI7Cn0KCi5jbS1zZWxlY3Rpb25CYWNrZ3JvdW5kIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDdlMWY2ICFpbXBvcnRhbnQ7Cn0KCi5jbS1lZGl0b3IgLmNtLXRvb2x0aXAtYXV0b2NvbXBsZXRlIC5jbS1jb21wbGV0aW9uRGV0YWlsIHsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiA4MCU7CiAgbWFyZ2luLWxlZnQ6IDVweDsKICBjb2xvcjogIzU1NTsKfQouY20tZWRpdG9yIC5jbS10b29sdGlwLWF1dG9jb21wbGV0ZSBsaVthcmlhLXNlbGVjdGVkXSAuY20tY29tcGxldGlvbkRldGFpbCB7CiAgY29sb3I6ICNkMmQyZDI7Cn0KLmNtLWVkaXRvciAuY20tdG9vbHRpcC1hdXRvY29tcGxldGUgLmNtLWNvbXBsZXRpb25MYWJlbCB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDVweDsKfQouY20tZWRpdG9yIC5jbS10b29sdGlwLWF1dG9jb21wbGV0ZSAuY20tY29tcGxldGlvbkljb24gewogIGRpc3BsYXk6IG5vbmU7Cn0KCi5zYi1saW5lLWgxLAouc2ItbGluZS1oMiwKLnNiLWxpbmUtaDMgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMzAsIDc3LCAwLjUpOwogIGNvbG9yOiAjZmZmOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIHBhZGRpbmc6IDJweCAycHggIWltcG9ydGFudDsKfQoKLnNiLWxpbmUtaDEgLnNiLW1ldGEsCi5zYi1saW5lLWgyIC5zYi1tZXRhLAouc2ItbGluZS1oMyAuc2ItbWV0YSB7CiAgY29sb3I6IG9yYW5nZTsKfQoKLnNiLWxpbmUtaDEgewogIGZvbnQtc2l6ZTogMS41ZW07Cn0KCi5zYi1saW5lLWgyIHsKICBmb250LXNpemU6IDEuMmVtOwp9Cgouc2ItbGluZS1oMyB7CiAgZm9udC1zaXplOiAxLjFlbTsKfQoKLnNiLWhhc2h0YWcgewogIGNvbG9yOiBibHVlOwp9Cgouc2ItaHIgewogIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CiAgbGluZS1oZWlnaHQ6IDAuOWVtOwogIGRpc3BsYXk6IGJsb2NrOwogIGNvbG9yOiAjOGQ4YThhOwp9Cgouc2ItbmFrZWQtdXJsIHsKICBjb2xvcjogIzAzMzBjYjsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5zYi1uYW1lZC1hbmNob3IgewogIGNvbG9yOiAjOTU5NTk1Owp9Cgouc2ItY29tbWFuZC1saW5rIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNkZmRmOwogIGN1cnNvcjogcG9pbnRlcjsKICBib3JkZXItdG9wOiAxcHggc29saWQgc2lsdmVyOwogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgc2lsdmVyOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBncmF5OwogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIGdyYXk7CiAgYm9yZGVyLXJhZGl1czogNHB4OwogIHBhZGRpbmc6IDAgNHB4Owp9CgovKiBDb2xvciBsaXN0IGl0ZW0gdGhpcyB3YXkgKi8KLnNiLWxpbmUtbGkgLnNiLW1ldGEgewogIGNvbG9yOiAjOTY5Njk2Owp9CgovKiBUaGVuIHVuZG8gb3RoZXIgbWV0YSAqLwouc2ItbGluZS1saSAuc2ItbWV0YSB+IC5zYi1tZXRhIHsKICBjb2xvcjogIzY1MDAwNzsKfQoKLnNiLWxpbmUtY29kZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg3MiwgNzIsIDcyLCAwLjEpOwp9Cgouc2ItbGluZS1jb2RlIC5zYi1jb2RlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLnNiLWxpbmUtdGJsLWhlYWRlciB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5zYi1saW5lLXRibC1oZWFkZXIgLm1ldGEgewogIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KCi5zYi1zdHJ1Y3QgewogIGNvbG9yOiBkYXJrcmVkOwp9Cgouc2ItY29kZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg3MiwgNzIsIDcyLCAwLjEpOwp9Cgouc2ItaGlnaGxpZ2h0IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAwLCAwLjUpOwp9Cgouc2ItbGluZS1mZW5jZWQtY29kZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSg3MiwgNzIsIDcyLCAwLjEpOwp9CgovKiBNb3N0bHkgZm9yIEpTIHdoZW4gdGhhdCBjb21lcyBiYWNrICovCi5zYi1saW5lLWZlbmNlZC1jb2RlIC5zYi1jb2RlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoKLnNiLWxpbmUtZmVuY2VkLWNvZGUgLnNiLWNvbW1lbnQgewogIGNvbG9yOiAjOTg5Nzk3OwogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1yYWRpdXM6IDA7CiAgZm9udC1zdHlsZTogaW5oZXJpdDsKICBmb250LXNpemU6IGluaGVyaXQ7CiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7Cn0KCi5zYi1saW5lLWZlbmNlZC1jb2RlIC5zYi1rZXl3b3JkIHsKICBjb2xvcjogIzgzMDAwMDsKfQoKLnNiLWxpbmUtZmVuY2VkLWNvZGUgLnNiLXZhcmlhYmxlTmFtZSB7CiAgY29sb3I6ICMwMzZkOWI7Cn0KCi5zYi1saW5lLWZlbmNlZC1jb2RlIC5zYi10eXBlTmFtZSB7CiAgY29sb3I6ICMwMzgxMzg7Cn0KCi5zYi1saW5lLWZlbmNlZC1jb2RlIC5zYi1zdHJpbmcsCi5zYi1saW5lLWZlbmNlZC1jb2RlIC5zYi1zdHJpbmcyIHsKICBjb2xvcjogIzQ0MDM3NzsKfQoKLnNiLW1ldGEgewogIGNvbG9yOiAjNjUwMDA3Owp9Cgouc2ItbGluZS1ibG9ja3F1b3RlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIyMCwgMjIwLCAyMjAsIDAuNSk7CiAgY29sb3I6ICM2NzY3Njc7CiAgdGV4dC1pbmRlbnQ6IC0yY2g7CiAgcGFkZGluZy1sZWZ0OiAyY2g7Cn0KCi5zYi1lbXBoYXNpcyB7CiAgZm9udC1zdHlsZTogaXRhbGljOwp9Cgouc2Itc3Ryb25nIHsKICBmb250LXdlaWdodDogOTAwOwp9Cgouc2ItbGluayB7CiAgY3Vyc29yOiBwb2ludGVyOwp9Cgouc2ItbGluazpub3QoLnNiLW1ldGEsIC5zYi11cmwpIHsKICBjb2xvcjogIzAzMzBjYjsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoKLnNiLWxpbmsuc2ItdXJsIHsKICBjb2xvcjogIzdlN2Q3ZDsKfQoKLnNiLXVybDpub3QoLnNiLWxpbmspIHsKICBjb2xvcjogIzAzMzBjYjsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5zYi1hdG9tIHsKICBjb2xvcjogZGFya3JlZDsKfQoKLnNiLXdpa2ktbGluay1wYWdlIHsKICBjb2xvcjogIzAzMzBjYjsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDc3LCAxNDEsIDI1NSwgMC4wNyk7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIHBhZGRpbmc6IDAgNXB4OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgY3Vyc29yOiBwb2ludGVyOwp9Cgouc2Itd2lraS1saW5rIHsKICBjdXJzb3I6IHBvaW50ZXI7CiAgY29sb3I6ICM4Zjk2YzI7Cn0KCi5zYi10YXNrLW1hcmtlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDsKfQoKLnNiLWxpbmUtY29tbWVudCB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMCwgMC41KTsKfQoKLnNiLWNvbW1lbnQgewogIGNvbG9yOiAjOTg5Nzk3OwogIGZvbnQtc2l6ZTogNzUlOwogIGxpbmUtaGVpZ2h0OiA3NSU7Cn0KCmh0bWxbZGF0YS10aGVtZT1kYXJrXSAjc2Itcm9vdCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzU1NTsKICBjb2xvcjogI2M4YzhjODsKfQpodG1sW2RhdGEtdGhlbWU9ZGFya10gI3NiLXRvcCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzI2MjYyNjsKICBib3JkZXItYm90dG9tOiAjM2UzZTNlIDFweCBzb2xpZDsKICBjb2xvcjogI2M4YzhjODsKfQpodG1sW2RhdGEtdGhlbWU9ZGFya10gLnNiLXNhdmVkIHsKICBjb2xvcjogI2UxZTFlMTsKfQpodG1sW2RhdGEtdGhlbWU9ZGFya10gLnNiLWZpbHRlci1ib3gsCmh0bWxbZGF0YS10aGVtZT1kYXJrXSAuc2ItaGVscC10ZXh0LnNiLWhlbHAtdGV4dCB7CiAgY29sb3I6ICNjY2M7CiAgYmFja2dyb3VuZC1jb2xvcjogIzI2MjYyNjsKfQpodG1sW2RhdGEtdGhlbWU9ZGFya10gLnNiLWhlbHAtdGV4dCB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM2YzZjNmM7Cn0KaHRtbFtkYXRhLXRoZW1lPWRhcmtdIC5zYi1saW5lLWxpIC5zYi1tZXRhIH4gLnNiLW1ldGEsCmh0bWxbZGF0YS10aGVtZT1kYXJrXSAuc2ItbGluZS1mZW5jZWQtY29kZSAuc2ItbWV0YSB7CiAgY29sb3I6ICNkMTcyNzg7Cn0KaHRtbFtkYXRhLXRoZW1lPWRhcmtdIC5zYi13aWtpLWxpbmstcGFnZSB7CiAgY29sb3I6ICM3ZTk5ZmM7CiAgYmFja2dyb3VuZC1jb2xvcjogI2EzYmNlNzEyOwp9Cmh0bWxbZGF0YS10aGVtZT1kYXJrXSAuc2ItY29kZSwKaHRtbFtkYXRhLXRoZW1lPWRhcmtdIC5zYi1saW5lLWZlbmNlZC1jb2RlLApodG1sW2RhdGEtdGhlbWU9ZGFya10gLnNiLXRhc2stbWFya2VyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwp9Cmh0bWxbZGF0YS10aGVtZT1kYXJrXSAuc2Itbm90aWZpY2F0aW9ucyA+IGRpdiB7CiAgYm9yZGVyOiAjYzVjNWM1IDFweCBzb2xpZDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwp9Cmh0bWxbZGF0YS10aGVtZT1kYXJrXSAuc2ItaGFzaHRhZyB7CiAgY29sb3I6ICM5NGIwZjQ7Cn0KaHRtbFtkYXRhLXRoZW1lPWRhcmtdIC5zYi1uYWtlZC11cmwgewogIGNvbG9yOiAjOTRiMGY0Owp9Cmh0bWxbZGF0YS10aGVtZT1kYXJrXSAuc2ItY29tbWFuZC1saW5rIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTk1OTU5Owp9CgpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogImlBLU1vbm8iOwogIHNyYzogdXJsKCIvaUFXcml0ZXJNb25vUy1SZWd1bGFyLndvZmYyIik7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICJpQS1Nb25vIjsKICBzcmM6IHVybCgiL2lBV3JpdGVyTW9ub1MtQm9sZC53b2ZmMiIpOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogImlBLU1vbm8iOwogIHNyYzogdXJsKCIvaUFXcml0ZXJNb25vUy1JdGFsaWMud29mZjIiKTsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogImlBLU1vbm8iOwogIHNyYzogdXJsKCIvaUFXcml0ZXJNb25vUy1Cb2xkSXRhbGljLndvZmYyIik7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1zdHlsZTogaXRhbGljOwp9CiNzYi1yb290IHsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwp9Cgojc2ItdG9wIHsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgei1pbmRleDogMjA7CiAgaGVpZ2h0OiA1NXB4Owp9CiNzYi10b3AgLm1haW4gewogIGZsZXg6IDI7CiAgbWF4LXdpZHRoOiAxMDAlOwp9CiNzYi10b3AgLm1haW4gLmlubmVyIHsKICBtYXgtd2lkdGg6IDgwMHB4OwogIG1hcmdpbjogYXV0bzsKICBmb250LXNpemU6IDI4cHg7CiAgcGFkZGluZzogMTBweCAyMHB4OwogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IHJvdzsKfQojc2ItdG9wIC5tYWluIC5pbm5lciAuc2Itbm90aWZpY2F0aW9ucyB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogMDsKICBsZWZ0OiA1cHg7CiAgcmlnaHQ6IDVweDsKICBmb250LXNpemU6IDE1cHg7CiAgei1pbmRleDogMTAwOwp9CiNzYi10b3AgLm1haW4gLmlubmVyIC5zYi1ub3RpZmljYXRpb25zID4gZGl2IHsKICBwYWRkaW5nOiAzcHg7CiAgbWFyZ2luLWJvdHRvbTogM3B4OwogIGJvcmRlci1yYWRpdXM6IDVweDsKfQojc2ItdG9wIC5tYWluIC5pbm5lciAuc2ItY3VycmVudC1wYWdlIHsKICBmb250LXdlaWdodDogYm9sZDsKICBmbGV4OiAxOwogIGZvbnQtc2l6ZTogMjhweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgdGV4dC1hbGlnbjogbGVmdDsKICBkaXNwbGF5OiBibG9jazsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQojc2ItdG9wIC5tYWluIC5zYi1hY3Rpb25zIHsKICB0ZXh0LWFsaWduOiByaWdodDsKfQojc2ItdG9wIC5zYi1wYW5lbCB7CiAgZmxleDogMTsKfQoKI3NiLW1haW4gewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IHJvdzsKICBmbGV4LWdyb3c6IDE7CiAgaGVpZ2h0OiAwOwp9CiNzYi1tYWluIC5zYi1wYW5lbCB7CiAgZmxleDogMTsKfQojc2ItbWFpbiAuc2ItcGFuZWwgaWZyYW1lIHsKICBib3JkZXI6IDA7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luOiAwOwp9Cgojc2ItZWRpdG9yIHsKICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgZmxleDogMjsKICBoZWlnaHQ6IDEwMCU7Cn0KCi5zYi1iaHMgewogIGhlaWdodDogMzAwcHg7CiAgd2lkdGg6IDEwMCU7Cn0KLnNiLWJocyAuc2ItcGFuZWwgewogIGhlaWdodDogMTAwJTsKfQouc2ItYmhzIC5zYi1wYW5lbCBpZnJhbWUgewogIGJvcmRlcjogMDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgcGFkZGluZzogMDsKICBtYXJnaW46IDA7Cn0KCi5zYi1tb2RhbCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IDEwMDsKfQouc2ItbW9kYWwgLnNiLXBhbmVsIHsKICBoZWlnaHQ6IDEwMCU7Cn0KLnNiLW1vZGFsIC5zYi1wYW5lbCBpZnJhbWUgewogIGJvcmRlcjogMDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgcGFkZGluZzogMDsKICBtYXJnaW46IDA7Cn0K", "dist/iAWriterMonoS-BoldItalic.woff2": "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", "dist/iAWriterMonoS-Bold.woff2": "d09GMgABAAAAAJKkABEAAAABd5AAAJJAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoMiG4pOHJJWBmAAkDAIgT4JnBURCAqEriCD6TkBNgIkA5owC40mAAQgBYxUB7gMDIFhW1RNkQDObcrzFD3o26qeB+D/KlGCN49JulOsvDdMDaxg27TowXkQ6P4XG8n+////35N8ecb1tl9v26+oUkI4cnAO1MzMBRE5PChcmGVGlel1ZbAIb7KJKja+za0LI4kGXUTIfthFyNBHlmZyEZjQ+F4Gp6pTZhcH1GjbgMsjTRCzn1oPES0W4bMIfUnozuMFJq+F9kkx/9y6SJnMFILqxFS7w13taa1cg1SHzlY88lCbcoVplTF+8RQZm4RBtT7N/YVd+Ba38pzUHbZgIgUlJSkG9HD9Xezuib1GnaX5/AnKDwa6nOljaDfiKwxBkwdD5cVEe/wqtv5rb+8PSj77VJo19QNqBNVT8Re1z9XyEA2qEgZG9XuXOSGrHEsw4H1p5II4L6jTm41uxf1trtdWfOdptvXQ46WSJTzrL5VcSrLCpgz3Eo1GR3v2SfTgH//OnnM/6KQnO5ltKgAV3KVLC/Yg3/Wf57d57vtEiYUCfkAkSgzM3NpFVLlqFxW6dlEF/v+XqnXDe///KpCioEwFQKlzFMwjs9WBdJ2m6Qk8mgSCtKdUXsmasPTBBHK39rIHYJs6QcSYVaiARIcIKAgoVmOigtHDnJEbU1eu4nNza936y364x+pZixc8vXP/3SSTSZq27/8+oCwQOsKqxTF6rVvHQu7x7Azx//zfC7nPfZ90RmS8FR2soUahKpgV4GBDDsbbh57+nt/u3sN//AvEXs+DxssC00tVXZRRs6J+om/0bZot7Q8QneT4HjxFFaAJEOw9qE/qCq0qVXv2Dg7TWEUGhxS+KbxFaHfngKN4ok42VIZzIL7EW8ExZACUY/j5bV/qSjvfSfU/lwHmiiR7JjVQVaZmsHWI5iMwrKTQT7pXH5xOhJ9RZpAdwAsBl1Mgp9vQYcy8xfen/puiA0IW9wHGHfil9W3KMqYABBoxLU/upU5ZpuC01MAjL2tPsT8ocN5SgNoAoEIm7TrLWzyOVGAseIT3BCUgTwihPmr7mZem6HGIF9OpiMkjjKKzTaLrfRmZ//zXn0v/hOowES7FL1SAgIq6imRK7dLxE0w4/7IlBAhga8iBv829rgSrQOQOMn08eLOALAsyq+3WqjWvrnrlQdtDkiUZaMTGIVjWDxDU+1KlbvfeZe/3ZYbmdQ5lcFtthzaVvlTwwqAXCiREcRdQa8stOsgxC8Lk+Hl0DNp0+v+nv8y6/dUykbyWWjdhK1iJkTjbwCUj80I7Q0wgB6DVH56n3Kr3yyCEhVQMiWGhRSxj0jK3yxbAwOZaxN0DVOYn4VYmBeOf0CH8/2szg0UFpMBTfqr10YRoQjIlvMtSULN2XNQu6umqqwlP3bwiSQAD+rFWDdO778CpJUzgH/LEf7lSUteelyr61IYTyWD1+9d9+7P4nRe2ozaroONQlLQvP58N57y/oikxS8Bn2KJCVFutNLKuFSVaP/aZtYn9DEcED+asJy6gao0mToYAp8G11AKgIldbIVsHipzIPXIBOYUBkCK2tcOUc8Pcje6HuQGABJaIRg6e/1+aUo3/v+4CcqnIqbRzaZlZY0Qzv+yORk868cx3l1tbL5B71W5qQQkLbL0yoxwDEhjYCQsKRHjj39H4BQ8HtDcc8CwryTjBSDPt+l41u/4HkEpOlCPtcUh0iPLGq9KmePNtw23zka/fe//j/fc+QOADpECAlACQ0pCARCGQIxKU9PEByggcL8WRqxScgsIGSs6yd4sgSEkkR2OGSdI4pHzSOK3WG2I+3Pfo63k3X/dwPazfOy3x3nhPl1YJCgsgX+dNK4x6NL59iex1eoPHUlCTFo2cJuhLqYAc4GmUZuqmfhM005/NydR5QFMXjYk9x8Hz/2OuTrS2eQpbSbx/9tFL+iRCNm2bv5mGjGmIJA6RSKJ1ahKDN1V+91L+gBiwz0lCoUgsGMhc/TOgYuMWThEREQLEECCEgFi23F5x3y818Di1vnnSHu2HFCqCGYwRwQQRQghe4X9tfw9jaVWMSTNp+uym/ZNWDfhFFBUQ5BNN7/43K0Oze0+efdnLBnFlKsENQ3qFDOPs+ZfHvTG2yzzulMoqihR/tBcwk8u15GNUSCgDYmRCLJ64xCYRSZaF5MhF8lVGqqiHNNAEaaYfMsBgI4OMREYbg4w37CcTLUaWOoWccQW55gZS7AXyymAjb3xCvviL/DeEEx9FUMQkB8WP/EEJTAiKKkSU6MKixIaDkho+SkYRomTFiFKzVpRB9UAZXQgoYxyAZUJRgDLJMSjTXQ9lkZuhLHMHlDXuhrK5IqBsQ0DZ6XEop4oClAtehXLd21BKfACl1MdQnvkeyufiBuWr36D88CeU3/6ByogAlQABKjGTgspQhKiMhURlKzwqdzFQ5VQEqovZUPNnh+IQmC7PQNw+jwtqQ/WxtWdnGL8s7N0VbgJg9CFEEFbTwQx3/vuenaDylVHclCbn1KzDBWSChDE5TWMgiU/M0LfpPNS9TxeiEMbevmbzdol66m+o0Saarqc3NNpci6O9e5puqJW2N19svS12KXLU0CA9jewiKdvl731diYdWskTPXu4NAiRuqHSVoEJWeGA8DkKSB1VeORWvMlWMClOJqkDlK4WyqX7q4sHhIPWkV0rYPwiBlWSbFzNxiJYgTY63qpwCMfNK85XEKjSbGFnO2TgoU/bDP/g3kFrcEf6PzS0ckKWbG3o1/XFsZ9D8MGlGGm+q2RZabq1NRnrRjmxfeAzu6bCTiTpvdt5Vt933xCsffMOyq/7YsfkigSaTgoI8MUZfHZvmIFcR1OBf+AoUt5qg7KqCClEelaTiRqXmVloqIXNhBV9ATglUqooe5cxNRFaQyMabKkZlqjDVQrlU+F2bVjJWls0l2GSh4+VAgvoMisnKKznKCvEyo3oLQx3co3oniRie/lzZpEiVJVdVNdTSQEPNdTHAYMONN8Ucy62w1jpb7XTRJTcUP3TP5VffIiAx+ZGSQpIQWlgRRlZSltLKKrviKhHqUESGsck1xU7FbGluzjKGc/9tAqC3bwVllz2peCQNoxUv7WNfl0F2dL5O9Pau30LWID7kUIU8kbW+rvqc/QMRgVpuMEjGg3T+ubugMsa0frE90ESkFNHvDxJCg2cQwcLORZMS/ngxGT8BgoXS0glnYuUQiZ+HEZKQUwqkohZGz8jMxskt6n1h594U5OshUYadWtylO2GhmnuavVsXkqK2/oueLVqRiQznfd2nS08qofKu+6bn86ImNOg4e57exyCM2/1MXdvSBrZ69/MfsTQ6wJE4lXQ6x+W4mQy6z9N4lkx6wTfxU7Loj/Z+YB69vu3ei4Hwd8g1pT27sSjivyNBgdieUI+8h1hrYS2qBXXAJB26ECLv1Sz1bYiir3LelyF+fZbjPg1R9lGKfBji3/v6DpZBSGbZv0FsoiXJUlVdTbXVVV9DjTXVXEuttcUeBNK7ToUpGWZ2bvxxX2SSP1GQIdSwC0jKtIqUK0NtM7awicKR1kMpT3jWx4u3GZSgIRZHIVr9NxYm5b7GEWEt5NKxFnEZWEu5PKz9IEzEnTUMLEfaVllRdkXG5T+wgsvFWtlHcVVyliY31ip1OYcUn/Wb9GYwL1F9OsWsWUQ61oxO9m5huHQfNIjOFzYIwDLOQWhgEAmyy8N0oSdHABOXOJCu2dWasooqHW09Jppp4Y4Ay3kIJnPzybxyMv84WVBPFj5NFr1lYlYAAFByzMe7kNUuQ63CuKlhMI2EzwRm7IVCRI5yFklE3RzVeXkmYg1HKcjvmJpFySgXHqJEHn5hlefIlfBjIJhqOUZUCwlFNRsXqqkoUM1EBoGKny9hVVZVdTXZq81WXfU5ctZQeY011VxLFbXWVnsddY5W9GJAAqq2ZkEKVDncPkyDKokcMoCqpgqYfwNGcH/FulqVy257LHf7NT0nNWMUt2QeJ5qdN8Vx1gorqriSSiurvIrar+M6r+u6r+d6r+/6b+AGb+iGbwSRAH5gZBMrSYY8FVRV+614sK2u2BvorxlI2ZqbqA+juvVjVK8BjOo3iFGDhjBq2DBGjRrBqHGjGDVpDKOmjePYXlXV49hSZQVjWCjENyu4QGGvc4Bo1wDn3pOEk719H0wsBQHB20ip5OvHjkg5GMSm+PDxYv5AQAgcYDUkxM7C7XaSPXKB3e5vy2q7d7M96AmMlbVUAvBfGJkQwuwsHMMqqfhQu3gOQgxVYolBwkkxnJ3OQd6nBurBK4EGk0J+pDCTPs4JCCGoTjATOmqnnhv49WcxYuQ0K79z8k6d0Iu3JfxEupHxRD+liANpGNOZheOwW8GJEXhrCAi5hVpDI3mbTQoh+FesiyBIS5nUW7hWYRLInizEVf2dCb6mpCaWAfadNidoHQuYyv3aj2IXvoXxO493yOEv6lWFkfEfxyl8lojDCgqG3AOogRUBa9/inTAWfhrG9b6HpurAG4YTKRAj1VCr6mrCNW5zwf9ZLU5l7kzXenAEnIIL6vCGSPXvHbYvLGxADJSBMbAG3sAfFFf+5bw2b9c+2NGd3qXd2aO93vf9fmWvHmNYavi9tiEsZSUTzLA9e2Q/UqfVkMLCyklrcPXwqvGQC274lv++Zda86+92p7f/sJw2sYTJCXMS5pvCTAZTpKlCQkFCKeqmPdheQAh++/Kvp88nb3qsNMutkeTxt3rI92m+/umuVnLATUboahCsGJADdWAObONSBIPyclyT27r9O7gTu7Aru78n+7BfBhr+1ZeDobGY5Yw5H+7TwPVD22j05qv/XfO02Sdv18dXY/1DfQkKcAglKLj9Jv5CDUT3fc07uQhGr++f76fvk++DtwH+v3GDnkUvHtrLMGv9dhp8/BfwyU8wqgT4IvPFzhclL1DPf/YeevEF6IWvSpf0/M/nz59/h/jT57ufP0gEY55D/B72c9pzxuZ9iXuOpR1Lr5SeKT0CfPRn6YHSraVdpQl4/8G9B/fWFH+kLgD1QS6Cr+peE9AbG93YpkdXuE2zm9vyo+WC06+vg77VuuDN5/I5fUrPm/Pu/BgEI1szxA/EgQ9Ae71Uv+zH/gDv8A2x7C+7a/hpX4J81NbkUYavcP9mkxrella3t0d9bXnDjTTQ6To2WfsG61zXLnWki43st8+WOZ/ZtNmd3nhDTXSj2Sf+U6b+1v7mgfr5DRwNH2Mb7X1TutaKutvdiZb6u+9HV385ro1db0ZvjrHedaoWKzqR9bBvjT4xVdBgm6pZ5ezrJQhHRvPRMK4VLn79volVUb6yyjFrppMWWumnw87SxyxTTTfDegMTOGGXA8455swvIv4v5ZkS9zz2x3c//XIzVWCJSFSIia9z4pOYPGWqcqIkj8opAruFOE3vMqNrIlxncIXFLVa3JXrB4Q6PJ5K85HRXuvfSvJPpowwf5Pgi22dV+PCJ/8r4oYBXed/k+ad6ANTMi0SoHRh180WdfFAvP9TPH40KRJNCNC44QZoWqnc4LYvUK6z+kQyJblhMQ2MYEdvoeEbFNTKOyUlNTGxCIssyW5zRtBSWZrIogyWlWpXVhnIV2laJHZXZXqkuJZhTErWzwlzQN4Ix8U1K0nCm6Ud8z3f8zB/8zp/8yubi5h3vune8kX+GeObqTsHRDLqXZLXYHU6T2cXjyHU4PIFIoTKYLDZXoVSrNFqDUW9ze/xe+cFbv/31xz//F7cL+ZTJmYKe++pKetyLCZiYSZiU6X+LHJPRe997w6soQFN9TgfpYAgIgxEoCg9DhqMjsJH4KGI0OYYKoccy49jxnNthHyFcnCBFyJFKlBqtxeixRpwZbyXYiU6SzwkWneVi8qxYa8q0snSryxDouGAnyR3k5zClI/wdpXCI0B5i+0jsJ1VEZK84TyV4Ltkrke6L8lC0R2KUcnugkr8q+K1jUJ2DL/9f5Ghtg2hXrPbFaVOMriF0D6VHaD3D6BbSzNRmpzE3rfnpLSjZwlLMS2dTBTaWb3OFtlS09W1oXTPNNt0/eRvT0RY73r62N9+pDvdBB9rVyY51qMa1rWrVW+5Wxd3pQQ+73+1KutuVDna5E4Df5yldL7glUAMwpuzq/cYC0nz7aUwggeV1rqlUie6qBchlK/7MFs/soFua97DurFI/l7Xpqodcef8hvRu2ZNIuuO8HBJABd2mapbf/YPDqLfLmU2JhjuFTWak//wh5998Q3iyNhR0674EngDYZQIUlBhA00ypAMF9voQBDy588fuZIHBNTpcRK4+NYe22EuLsWju33HHdLxOV6IOEyemm1LnlC8uBNHN25pEOSxSHWMXItAy7TjzzktVSZIlI4yDFNuslznHmpTkvxVSHyT8NQBzhdTJF7ycOetz+ngsmuv5Rx6vKUZysfK2Fi5SmrAgvDh6csFhQzEx8zVMpXLkUM2isyrMtUEnqTrFuhY0lZailZcznIcbgArhNwUpD7eNS9pW6l1k+6f4Esci/yT5N6zssug5Gz8ErGslyaxRzQoKkQ3i2Fzs2EbhHDovLTM5gCsqungEPLqtejMqCt0jUd/MHINF2g1by1heqd/L9Gnelw5SxiK5VN123nZNlnkd0ksu5UwpoxXUAHJkcDlPqYG8eXY9EE2E4H1VdgA0zotYAJCcq9NilCF3OULOVss0ys81kYzEHhNG74i2YcGxeRdDjMhWEAEV407TtFj5KO9sFcb/TRnCPrrAzYrZuUPxr3XC9dhjEw166cpeJBa5J+uv3StlfD5TrzecMHfFQq7XGvmAQCgEnC55uz8b7XYiaIoWsRDJUSmgQdwiU/b9T6diNkUX8rI7RogQhvd1MVzUm+jtuydSDG2630difF6/zCGT9mggqj3HNFa26wiISRAUIeq79FwVTgpAn2zVS7rgfhsR/cc3QKgpo3sIiky4PiJvmaZyn4XHQ+J9j0VCH9N28FGbMJSGDjF1VXl5bDkUppbzcRWdQUzyKuIVMUSeICBSz+FqePyoickihQQnvCQl5yTbqDLzF3LQfyqDARgQIqBkrRQUrJwUrZIZSKQ1OqDqnUHLpSdxhKw2F2prBeCCJTd6eYGvDtmlE0DExkmHzxiZOmX3xhny+jJo4wjtaCnHW/YZ4jG2qhDLUh4B0AeBcA3gOA9wHgAwD4EAA+AoCPAYhNQe2oVaaTC8WksR2L8bBGMTF14V47A6ajXzu1wCykufo0at1De7gXnqs7yd1zwxytXufeZVeL2VrVdGKabmYJi+e7pqD82AJ0T+iORRxBhb36jg2GGECKwuQ/uEN2n9nDuqATcr5MlqBWc9F/JQHsHgaW0ZxrAyvFIiAXRedYRSWZdDWaA3bNXPu63zswRzqlQ1UsHrQ4rKhOnN4IrAGY/C5YRPh3UmTW6sgONkc/+imT2p5fmXWYauxdQlqkvKC4dZlEdpV+iuxk5tY8+cnZHKMJi+o71Gdos4LkLZsoAuO1qYpgWRoau2VWRLBzkV7ud7b0wc5EGcxtNrzcuEdmkO9IDTdYNNEN3Ii8BBE07za2BTA3aIDDOfvsfmqpZ3sObKjBJXWg5biOtQ8Dm+kmVp5rBlQIA+jZ6j5oCVVyNnCbGrXmX3VZii6RWD8EkR4ref0OhvZg3pHOBgqLenhgWwg3+6ql0GVX7VX7tzeDqVFg8owC06Z7Zb3TanNTZ3R8FNjJ+Z7bbrPyLlvB1D/lfWAtKkvaD9ajFwvGF25RYWYNJBtmInCgvTA2Za70RIdjsd1wcfY3tWrsIe+BB1Gtdo/FD+Tl/BUxH8EgDzzCvK3dp6xjJeCziMqhTlgJhfDDse7V8OYwSbT2oyNy4pr3DXBzv1ZONSzVAkdJ1x5DBX14WZ5EjoPVnaIGw+SeqdGsF4HNfCdwMXtR35JOYgDZ36NTDlVOr0FBZ0hCObsW5ICfg0OV8wLBL4Ag+SJ+ggin/FLoVOWyxBW/Agrl6j1BlF+DU5XrEsFvgEK/WR/ac9yCvX4bAP0OAMrdtSCH6J5DlftrUNADkhAPRUK7zkcQiscAiCcAiKcAiGcAiOcAiBcA9L1EhbXeE69iXrJ53Wu0o7/pcGKi3e63qJgv31kA5/t6VD60wTpH8TFGID8dAPI7wDf0PcuUP5gA+SMAyk9tsMFL/BwjkL8cAPIzAOhXlil/MwHydwCUP9pgk5f4M0Yg/zoA5N8AoH9YpvzXBMg9AGJf8Gu/vx2MnBtEqW0v3THP7XOOI4wWvLy5fqXeGSD1IPRUQrs+xP+Td/KToF4FW/8GbPcQWPjSA7Mug7N/xkCNrkoBQYxRVESin5wCXR9uLBQm8qnIuimdTcjoNWZCvF4SVYsbFpB5FnaLPw7G2VaYPHE7WQqhP5DKLbIiVWCviBO4YGYifhkmTp5haRVOjoLz2Jb8A+vUe9P0r888AIrOgcZNFdRgCizhqLSImjMScwIyXB561qHKkZKqYiyOSvNyWK//6BL+hYuo8rSqcKQmG2uFwEbYp8foWjkZbAN1Su4xkof0tEpefyZIMUmpyU5v/YKGxIZNIyMYwrEjOC9HaR0cgSIt4lnIxWwI1PrVXIsVJCLvG5GYZCpn9RldGzE4Q2FjLc94t1dIRaYwbZxbiIebCB4GqoossVEz8ofZKWEQ00qBILLcO/aqTQ40kwZqEQZRR8WI7FyUTryEBDn/qaPjMNZrSUnlUO/11mmP9SGTFfSkGwZ36WrPuWKoJEJqVCqYQtLhQMOqGLjFmkPvDc6nP++5DOWs7E/KJD1O8Ag9uIZqH2lPFWDDsMdX2HoOwZisGrRjzx1xkV722jxh4qrOoZzflKMSUNI4LXnCTtyZw1JU5kPAXite0NpTW59GGQZbh3Z+W47qcoGaxmXRqBDdbjs6mOEasHD5ONnQLZcP3e+9W9uyn98ly2aKWpyTy833hpnIuyuxzBjf35nJ3M1aOpiIxXMVKXbiIzYHxmygdWH7lC8L9aDVkJnkQTo1ckY8J2JZSc8NZuY5PlrKanj1Ph8aYmjGpITvmEcHsHOb1rXWuPTWzs6MET3HtYTnENIa4IVj4NmjrcuTcnVEw9QRBTvburIC5pHGYF/wzBWiqxu0Ii2pRND/brnyaCGYd53qoUIpFpZsd4TLHlHmov5vjn82k9drUdKgFdedqwV3Sxl+Bqy7Zl4PKMKSZDvlC96b63WhuAfAm+pmrmBWccCBYDsr0JQDx6hvE9g1mIdoxjMOv85SSsPdPgUQLg3qETD4kmoL4evkai2vUka5002svyzRDrKKM2k1XzYgbKBSH8GVKsxSqFiJhofBpsgd8rTL408Vd7U+CWm2Yi4nMVKh0646bdAxYx6lZyoUYqMj7hOd4zTunShxwLWkR4R4lyffRLagSaeWla8h7k7UYjSJq3QDqrt8MxZtZYO5R21TglhGZ7DwuqZFR6NQayNNlAI62wb30DUzCAcpI+2oGwqiMG8hJ27RzrQDC+mRiUOprBNOPELiD/mJ7KZLlhG7YTEUjPUsluxF/60TS4WJPVbLOGltyFZY2WywOrGAl8ouNghOW0md860PhYAL7HTxtw0JT15qSoC1LO/KiVxuW1VBNpfia1w6P+5YS2P24GxgTCkKazWOzjj8F4cvNAVReQ65E+soTXMeFm8ImZQ79hrWmqcR01xHwsgLeUQlyc7WtdF7R7k2VJaj9SKCiAMR5xa+lJLiPLcFdMK1iKBkAaFFyDORbkxkgHkmO58+X8KPC0u6rWk4x3aklZwNQyXbsfm1o8VyTUlD0LLDGMdbG+UAY276blM8mrxfnJV0+fjwYZY2LpOOlGvfoJhijKSFd7EeO0ZDtRf5aE+wBtYGFnh00MvUxaRmKelC+nZdStKIuQrlyrGUOYd0echeFy3p++wqVS3aDdnl6PiM4qHQIOD3xKgfV9iHTHVvWnW7jUIlemnm/TEPnE2O4B6Vc/8w+eD1J8cPQFbCmChcWVDfzNNPNdeycVn3nbD/AlEqBjOqctClbYmIQbeP7ecrSmoy6F40LlCjdrWbnVIk3Y2vAnvI+qpMDg9H0c6rTCsS3TaZePAyYhO3E008+8NupTdU2m4U6bFDH2+CvZYOLBpoPep85sJCAc3mNmIfzO3CQo/RsdA7NOv7/bRjKBvSlUdOvAfI7J0Vz9qMhd4KE7zpW89c5x+BvkWkNf6757ppbR2lbVG+xBmyevwqoSetAepNR4NI0HpEXiN5KAMfcHCC3NN2u8ORWsWtzEljQR1aQHJtW3LSikEjSWnjuaYIK8vzLgAhOwV6LhN5D+Cu3AGBDaWV3SDMo3IzfB+dsmgMdSePSggNa0xf9hQH6no4bSj9IiWP9mtD9SyQjBzBe9+T6d/2Q9M20ZbGn5e5fkcpTJ1KZjX883UumJHoM846toSNJfMBBH+iDubo2haMFN4KZEjhgFH4N0LoaB54rgl6nyJQWlHWOuh8MSI2Ju7i0Fo6ArAMVs/yY6aiGYPDIVTro00ftIBuwZPO30O5Xin9b0Am8RVF2OaFCnBOrMdmK7ZVAAu7lWWKBmqH8aCrx9knecG/fnwaN0eCSuibDcee4cvbQlkradOdcj6Yab5uz9uWOONSxLT4KEMM4AOJZzp6L1TEA45XKPL2OtVSd5N4cATp5YHKjU0GAA+2yzsh1Ez9YqZQnos8PwIPFY9PRtf7eGWztlEfq5I2q7JvILxcM3WMQr57GRu9Z0AOX7RzunhCiUdBhT2o3tFKmSivdZOFDqLvh3ZuBYhpS2O7f9HUBjDEtOS6gkL3dmnGpQXyOZ1KE+gpYuhhIy3U7gnGG22WkpY4tWPJcGt7BG+8arzN0JEWH+MthWyqlfVDAj0pwCTgYERN7egCS+aamRYnNKe5GrhjFeMbzMDibCg1Gso2Zx7sg1VvSN3j+IBcG+o5miFThylh4wV8EyWy+yJzoRqWQpeI+pqrlbZ7/xgR9DzVqUyeq282mPPQ4bT6wKBoWRyND1A3OxSojM5WY4QjssQ2QkPxYjmexoYo0pB7/up41fEIINDWsOqintBt0HKwJlAb47ByhKGBnQ8UT+/AyGaIt0VSKR2ee4wk1CYJnt0AfyKDCFP0P+5kv4o/oURjSUABPp1FyYR0LQUFtFtabbm9IkyaER6dED3topvnmRVU2riAvbLpraOMRVXd/3VbM8xo0gRAcJ6PAOnnQyLpPh6E5VR2PTJK/BnBTuM47HGAvz8PVncbGmx12g9I8tOnAEEh1dGLJy/TrvBDmVmBhMXwR9gDQ/xQ4tjRfS4LmEl91gAgKt7YhkbGvYq+qAwsdN1Np0bpqYWmyPFu258u0Xs3M6+l62kLk57Z7W+MsEMdgpNe4HfebXd/WUMPcQYC/uA97jzgRAi8YaCo93KEWWfrLYYCq+5wHGtFJGmdoTcNKCkfWVWwQmOywiFvAtmhP+78DuEKBmFHBHVCcvI+WAf3afQeq/SFAeM1IHkEMXkQGJX9K8UdpkQRQiK8sQhh0pztpre2B5ppFVkNtDSqUjLskjL9riWYFmOoTiMMcSwb9aAYEbGKN0jwCJeLBEWQA12pJ5b4k+QKSGARFJb7IkRZ72HkMBKwihwS78mEkVHjS9MVSdrDRZFgsX5A9aYUJuTApKzhc2HUi5BTV/WwMYWkoWFRpE9lFRcB4w80gy3W7aypB6P+x3cU4xb58DY47Ohn8rBOZJeoR5hijTaPcW8rZiI9YYViMdid1Pf73IgUqFB8DC6gby1b2JanORtxzCWNAeEpcfRCrT8v9pUD8f28L6Ryxp0jgS2bGhbHihfb4kuLLEx7WkvYMEs7jQw28kBOCevC3iJobFxUABbd7jggqhyTNtKEjmbkNeNE2QepGkpurPXBzYZEClP4EHa3+rJMU05fuJ1Ze4hOJ5ncuZk0JWJhpiEZc3oXwvZNYQKOIWnE6t5xvqutaZIe1nUrUFmx1FUiKT4d4qUp3UoPQwMzvbIZ7AuG6NHC4THlfCr9SEhKru2Y5CEkmyDElVqScjfsjm37WJj+CbCBHymMXiyp41LafcL/5c5ZikgZ4pa0FbfbT9rMHAAbTCk6ZWnhjFGIJyqQcltUl1BxyNNfgVF+dmykT5l2buywHvwJ1DP6psD8qutiFnAiIWVYxQbkhHUaWAYp+USa3dSQJr4nku5lycB9DaEwuRPHnNDPZRvqFSjCg2pttEvbNKk0O7mCUdjhkixPzd/nrTD2WQprJU7pK0vUAngQOo9LwOyVXEb37t2qcCcDZqTtP1Yvd3PqVCXVRsaexrbpgYiGVHYEmYJA4C0taQRrJU5g0ZGf/O8dNbiM1pb5ydA1PIiD9gQjgNghPc150NLedoFCqlKf7zGtLN/T96qR/t/rMzmIq6CQqlWfHqb7oKfrJd8DNZyjZTidEYGeiIWGQ28NiL1VSULYCEgPZK0TY0QgUl7Y+oImGDsctiKIHyVeM3Ei7VAvoGMMStkKI5b+eswoRBBDduoGAkHtcBfhXRjmAzQwXsur5q/h1d8XBKmJcM/PxR8bhUZUM+qLoM/4b9y9XYP6uffdjyyyZEStt3BsyduuLYc/GvUTMYA40/nQ5lmsnnTHg5vwGIkGEU5cb15vkfkwFAOLA3jTufnQByQkhNLPdj28xRJdxoUP7X5kq5FK3NEVwFmn2qEpbKiYeBx6SZbD/2pnoYSUFQGhrrrVuw+2zLg0077oHh/tjMp0gXkXV+vD3ZROCB4tuMG6tiMg2miLIniAo32t4ku8YDT6x3ySukzFFBXTXDxzyyweNyEirX8Gpa04jHx3c0G35fnyku6HQNDq3RQ5M6/2IU6+lU+fdAcORbDoIaPZahfdurg1FIHDMAdbcgrdvrNAmtvpXHEf5vJ+1LWnnJS65l2eh/t2UJ7bX7+KddbcTf5kjcpN5Q/HUFyN+mhIn2Oj3klvxeVOizy0Ih52tvUSGW2pEAddXAkvRcXEglSlonfvDPgi+mnz5MQ6FGuBKAd8Vq1rmklT/Naimd8br6dYIRDgwWwb3bNUzsc2kJdzqPsaLQgsS02xvCmf7FPizXuf2eQ/6d5ICIsb72Orq6GPHodnQUwOjyAC2IvwQBovAHEpAeiwhtTbiHWPrE+KL3ZhGt8x4J51oL5Xl/HmJhFF4Q9aeUWQhydbkDuCUXdLQONE/GDBcEFTQPSUbjMwJAMBTdIly8OCOvcx2UsqHOjP4dsFF7Z8d6z6hYfkJE+Y1I7GRG4N+QfJzNVQgvJKYMlSlnJfW0j/kDaI2N374PqVTCwMWI5GQNqLXoS2GRBKFNOZvAP0dCDsz0OQvbFU5zNtW8NFZ+rTKJa0i4yeyJA1G4NUIttYDxCWigBSvvHqwQhkk8OvBm6JCVbLBplH1aRGFfUIT4FO9Evvog1Sb8pmvQwUM2zUTr28lmJIzvTh5EtrpCnxqDfSntfVddmVSraXJonG6B7PuR7m1NoLJ28L0DHd6Bzhve1M5wl/2UOblSHzG26zy5j3pI8BeWVEvAk+CVjFdVje04JTdMnnN6WUjjSit42KJ2FlnFEs/Xdm6+giSLPd5TfoFqawg6K3DuLn2at1MPKe2MpCx5pJcfcZ1LLh7znZSovYblvH9WDXMMtFYyIFRzn1N9uglerJW2RPaJ0UVmeTZjYlrK7ZpSr7r6h+P3XXTimR+DqtPTmidle85+K0uKYeTXjmtOmhnT0znUByZzZzYmTdBbowKalFQ0mspLUexY1rJhMxTBXXnBBer90WnSZENUjqAWdNpD4I57Qm4EBWxUPOcFyk4mqGH14GR1CKkxYoVVxErJpUcqeFkTnrrTOS55EWTaupORrtJZnIKMmVlr1M4BXJRSTXEpCzdV3YUVDncQ8yIEucOpriq0LJxpVvUu7ZWVxfBuq6+JsNOKgvPVgBF7DqGfrTmA6TGuhXEq81/JoTCHWc79gPS/hvqbREzE0RVe/2nk91MBKHGIyjGbpI96qXnWG1R5EsaYgZwNBXHTfp3uE9a5exaIdOMe+0HYehor8YKeFVCaXjqSMygrTqr6fqGAxvFVQw4yP/ClUm+r3uu/YlIz+vpZZjejtwnfi1qqE5izraaC5RtW5bnuZsmDMLaMxVwRj/G/DCsfRy66tgjcYXW96gQtis4V8sjCSoNFm3/VZiZ28ojqNRPRTThrlNttKfDn1oG2hZbNDhiI5DjM6Lz3pJIBQVoVo7Y6TRqZiGNNztsDCC/k3lyd+RO2hCfPZQFKeEvPmv6BPSi8vply6vkmOsznAER1lJy685LPwRTUtFJgLOInhoKJVx0/Kudpo8PKIMOjAZUQOrAjU12G4vDcQ7Hc3/9maZlM08skI4NV7LoNc09UToOKKu/mVWC0sBcwoDg/aSxZ/zEA+dv0LD1394JaUbS3JmH7dacVhW3HYkhmTd1AyvYACRxwPM6MjRQtpY6+rMWdlZIuaa9LPPVlv3r6V8b6SAtdK8b01pae3oYvZnnHd7K5X4sQvtmgFMC3gsBH+GZ/G1OKJrnwb4pAxqQ1a6+eTkaaPHPL6Nz0KHbKXLOB4KZtYUDfRhpZjZN/knJTXBoDBL250cF+t2kbcbWV3UUtq0ZJeRbQY7WS7R6FCdZVblcufN0RI6OyvclXlG9Q3HTQfejbXEs4bpFH+6sa7fglHHYgeQO3cqocqd96uEE65tWdyuzKzOF6Drf/SAst/ROgMcthiGPwj76IQGS7dHuv+39/otZcYmLeRvhCsm5FzvqsdwGeOAB4CR63u99P+scnsEoEn7LLq2MkZMwKxhxFyK/8eiWLBjcAW3xFf4kZv1j2zmNV/51954W/bvl3Lt4gvm4/3RYqVRiTtK2HMev2f2zOLjHoLGghXek+iLXzdPhV8KhaOh7fJrn1I4SgwJu/t0qASNwnw48SL2lMP2rJlb3Fa78chU7dTpjbWo8FQB3yRo0i/+WWovTnfUw0CrYQMZdbYi/5tT7JekeNILNu+8DssBUuLIXhz9FdFhv8HFQ4dSdfgG6foI/No7Wjozu47N804LaO+uTYKTrt8g/6v//heBcH7Re4RxIgzWjaBoCTzKJ88/6sCHdfjDtSDZSll9YO3xLUXtOUKy+Hxk6Mj+/bk1I8+fNnbvXbWnW3EXrWQLHILgZ7F3ffbg10m81V5uv2ozLp1rx26Nb4/fh22nGBaP8hHkUgF5CuPSvXbe1qj2KCRuQ5EPTC8SllUv7T3WuzRwhYzBJT9ZpnCoWRmOLFaBmManMpor/20cqO9FLCBnlmYgC5AXAT+p9jenBydlJm0hbSblY56/Z7YULxTbdbXTz6ZrLwW/Pzj/xTf57bXV5c22oIwpqOsKHjNF/4Y73T9N1dph8nZbsFD0X7bqXbWVtuayoKyx2JASw82bq+ardmJkgij99vTSNBKsc7Yd2nsf/emafdCcpRkJsR3qAz35hzqivh8jbQZ7Ulg/yW4Y+iDb+5JPd5ldPmd3Ts/S4bTvwGPaXUs96Gv3/O67lo7NvQYQos+pf1QajMkX7ceCPFoq4UeEu81voMOVAWP4bTJhCyMrszWTkSkSxZfZ9n5niMYrpJ8af2UbXLlIZ06vMjo7vj4PO3XNMz8705LLklXysnbcljEcp9cFxx4XrCbvfPNHXnzRcd8iieH9/d3fnLZ+FgNPgrQ/AykkmZlNmXMSBV+/FFBW22SzjaWWNf/XnMqcIceTZ5ipBP3STKujrLa57Kbb0f9fcuyrTKZ8heGPpwzX78uwkZk5OKFxY7PL13ukOSodbv7SnfuMWmnllsGInQ2eqjRnPv/A0m/Sb/n1cnvS8zVZWCprgoTahdH4ZQZYy40lvbXNKa3UbEve+WQ4udSMOMbV+FsCsotT5cKyFl4a0/MRV5z1XY1XPTs5Pe/hmtK+2qZ98vnSnFITckf4PPmtrbVD7G3UTVr8r7t9E6hHj6WlKQpr2mvyJsW2XrLaikywYtMbu7Yvq9f29OotoQ/5pXNzZSyedLmbGpnnKikbJcSe0kZ2dhbgl+CsvTSZqEksmZbcaMe2w5uiY6ZjJhwTR09abhy9F0i5vbjEPN2Dx/ecZi5N7y7DtFWIi4tzAqatbDc8/tWnOjtsaOH6HlNyGVLa8+v806l6lWrrH/7B+UED4vYRUd2fhv0W3dwmQbeV7uZeOrW4J7UIex2Mu24q2vKYHM7GL3aHbvPq9RGMre5JfbxWhe7qwC+eo7t8681HMXyQOEyt8aHVJA1v/rD8hPEDrp1eC2bUCuybT5iwz988O74naRtrEFzN27VtVHmDsL/pVZ4WtL98+SfTgP6aPMH3umhmCvWZqZot35hjKGfpxG12Y+J8Pdtc1VhUcCGAERBZ5bFkI8QG4k/xYZAR5LhwQD/zawK4uXS94EHqU3+aIHBqhLgg2S8pRWvMNWdgeQkfxUYvrMmG/WeQCDIRGiBOk6LP6qhU/RwoQKoQMVddBTH/J/fLOWaeL3D4W9ovFwlD7CFiVsAe2KYYtDiUExEaOxE1y3/pFnvLNBxBZvnA6tX5Jy1ToOHIvPPcyLJqtpFdTcNbMbMYK775qt/wRFfn8GTrRkFnvejLVxh6G8PCbGVikSG1kps1cjP508DYl9FiuSxlxbCoT5EXBFYN2ws8Rv9gLgYZYvcrN6usdEmryodB84tjWsLspqdrB8db20fG2rW02myhsIKR3xudaTVnswipFDUni/LCN9pCM4538rjcYTpjlMvmHqSXVPul9g8O5q9APa3xN7Bo7NVYLvi3NZr8527Ww+TXhzJxm3CZMLWtwabu2H8u50bto3Q3nWPnKCv0j/XaRb/VY12rBiYbnP2jrcRCH8bf/Jr5hnRwDS1FcHiYDr4PpldSpcxHKgwR7T4VBoQ3Do26ulAH/hpZ+c3lHwEU4sMB03Bq1iMsa1DFlbguFJjMgqhyX6B2zMZvd27XCetIyiHnDAVGdIvOxe/Lu0uLjW/o63INJ2pTcpF6wQaOzVteuy09XV1R+ztxo8eK6apTEotdQzsnZYtLAFG0PL4+uzQnxc2nHSGgrAizGyNTcu1cQmByVJpLvG0i8IZv5rbMbW7cGb/TyZ2add7n5jq+gvDn7xL40yCV8qcb6P6QrlqCZ507qxriuOsydfiGnh2ZW+uc+xzeOS4TfBzA2UUuX3ei8FzKTm+lscqx/9qtZ5yFdS89jrqRXi8DgO773sqcyCpQhWPuvzknvX4OCy/Y52TbmAtX0xz4U2g/+FLs7SLHA5v13h9/jkb90Ab6hkys3lLfXCQjha2Prms5DYTwfadKlwHdeTV/p+i9XnbLHqrs/qN5oEAVj6sy5GWnj/IZZaiE9+hao9mPLUcmiJiTefJuZYoxZV/GEb+hyc7OBFpb34bTajp5Jl4nnR7eGaK6yUaYA3kyZOUIp6WOqJ3VYUipjQVKE11RCZK0YxJ9quD47vKqlsln7K8Nidh53YWkST4XrUr1w8uAWJk+2dI9GrDThE4C4pP0ugyZonz9WAgVjBCUeDN1/RKGkIj9Mj7+Syxx/NnPhN2EnyGQ11NM8AHuPN55XrQbSZYmoyiROvYoFQWceAZ57ttuFlkqfEwkOZrjm51+a7yRUy7aoJ01R1u/33l8632/VYx/THqJqpgIgYS9AJr8dX4ZKlVqR3btWkVKkrktCUrFL0WHvwCm+utjT+zMdTABY+8r2L1EYCXtZA7H62qyS0DgI2aYMkl1UgFqfnkNT6et5QrKVXlc/LbYsNnl7z9mKdjmktxcbh7iiClZy4bwoOGtf3//kqmgixO1Sn8fAYTHeS+UT15LcjP6cvY4z6cYjMp/Rp2jJ9wnbjhv4EK/TS3JqMiwjDqz4UsJrYNxn0fLTMVM4Q0euCeXgz/PQLcpLRDX+XH3QRo+pdXZ0RSpK1dkIvo3ys19fAqwSf6M+gG4wVZNP1BwEKAduc1XuK1HsGDUtkYhYIFe7HvdBguYyAteR//dxzbh5GC8nGPaePTPC377pQVEJZiglBWg5wEzv6VXJvOkZc6CuKHcex5btB+T14GJ6xLk7fHh4c4LYAVwTiJDzBYoloucI49wnjK0rH5e8SOL1vKz3R631f3DyWuHa0U8fJw/CKeGIV5/CnpNM3IzWvJttA2x0N3I7OoOn12kZHZGa345lbc5KiIH3VRZZFD9SStERCH2E/AbXnlswLvRYYTD1OiYAxRrIfue0CCc/wlztQfqjZXDl00BmUXmihF7m7yWJzlAiaQty6Nq2w5eWJc096hc56+eLK+CPnKpyJxDSW/Lt11ObaroUmIeXJLf/2c2q9bB4tSZmeo42DpK9zGik6gTOPspdFbWcIHuqZ1T7n3ayZiBipxVNdXO6ik35+UYfMlIB8ywAjJwjRvP+pZeu50fAv8CAR3wqqcY0Hxdqkoxh9Vd3QD1Cg8I+TA6jh9N+D/+ti6/JCMjGWlpb30T9FUYPqYKgQjpECWLh9tj1g0XOpz5YkZhPlsKBzaatXit2X6OWrm4qz1AMhNNSeT0ePDHJYH6ttEN6bjzzRJF8PA0dnrY9nFx3hj0wBfbCN9h8RzsavLb7h41CJw/SvhmFQuKh/XA8EO16vPBHM0Hg9Q93eS3qzlYPK6Htsovszg9/0EqBsfIxfrhd1ELWguw1XiftHy8IuGBxfq8jqFv7CrNFyUb5L4gNTBNp5JJi5qZRhV7cQzgt+T74OzY0vulRQgXZ2IzaiHrCt++Ve8CHQ/+iubaB4lt11L2M3RXMlAzpHGxveUA7cz+n9TRrLhuVVjCzpnPJ5dmVMLFz9cfJVmQzECq25oorwO2lL5B9gNAm61vZj8RRys1LEkJ/Dn1RlTIkG1doZ/Zbf5s7iMxgJsGmqbu3qugPlTvn16lMmMRlVyT88XMy8SrHOYvxpmlGdziCNmSOUmGSA4eR0AWXUnGpBtoCQZ9fmWpJUky0I7nbce83osLp6W90+MIxeLMP71F9c22MkdLYcy/XeIgHsX2EN8ibmj3+2cl1mfFq5yUh9SCL9U/xIblLWW28uasA7Al15JPXZpWo02LeCZcoWFbtgQeg+d+tl/n24w+E733+mn8P5BEE4tUrFKFgonF2jhcF6dCapCqOL9nlX9gG+BcSy5YJsz1T3x9W1N5edmfMTdWh2xAaVANyIBn3EsIoJWdLWJxtozAwzPaSqvGhqwTgGms6ucQwjNG4AtopoBtXmHwPdkuOOr38x3awmGJ2NlW4Mn2k77AHbVM9EK2syQYFPe1b2nvW++FYskMeGShZXnmC54vChlEn6Fp/fQczIBnIwerE+N41qO69RypIlmI2jg5ht6UIpbF1PUkvU3qgUBez6sd2iZkFH/v6wClAiylmUWOxsKgpRk/Rt6JiWKiMVeRa9bStOZcGlQxiihhdpKyNV48uPgBgaNN2rH/fRBL55skMp55RcZ5LS+r0Pt9eOGuUXDbRshcs8ejBx0HY2Zi0hykQIVji8nGDA6eTLTxBpO8Zdu3SxU8TxkHi8X14LCDxxEbD/vSjF4t8rYL73qVhci04ZAWmz0zcHJcfO3T4bc8MaelAXOGecHjjLtoHGZ4aTgeN145DrXFDWe+edruGugK6jK+czg2tl1EvQlQXIOOVYoaqPD4Y5XFEHeWh4hBx1nXsG3DsTHtibR7YZLzStQMYzEdudk3Y90MYX0H/IdxOL4rHt2wST2M7cIOY/4AlIWXHJ3xW20dcttw/Jpx/Jd/WYLNehw9/dP9a0UpdygWJLvr+7Tgcdpi+l9er+U1ZY1Dy1xZN0MnTaZi0o3+4xdVwLJGF6/2YF7/drZyYxjnT8u/vBKPuyqtEmVOfw3mWw13wm9gZmSr6PJQQYPXBtDACFCxIgkfn+6p84aXVebUdDV2Dkw2EmtyGSl0JoWczOPyksmlBgAmUZ8ozKkO83os59PV1tQU3D8kVXq47EsPq6npukzER4WXhq+qEbUCBpy/TbmjWwEe/w38/3GpoD4OISdt81zrlPH/o1Ha6EDuf/FtKMnhrRzaLw889AercPtmeVjv6xHd+J1tjJukW023SMybre8PXnfEdW8sbxa3z0V7QHvYRLvv186AWFKea+JZpEAIiMxtLaoW0EFRPxGJstg7qbp5O9moLkPkYykbwV4cqZSe6LI0qRSAyd1+M6Al0QjwXUSYGuC+qrdd2Vx8OKCmD/REgth5EhLrVBHWJCq69XfcpHCHuiqiNOv4sCrD16uXZbLTskgqTkUDTJd9DG54ENjyBpgF7vI1VzAw600LTAFwX9l7xQ1039572w1XAO5nId875Ya8mNzv/Mq5f2oN5Gep96fbYCJe+5o1YewsRbBtn3oDWgDfb4ZPSzBOjD6BFkfEjLFb2GMxL15lxP3iBhufejGVWRmp2fkn3QsYE4F4B3KxRB/qIo7ts1Nu4qYj4gDNs9mzh2mAEOj3D4BNs8mzNxHJ20pMNaFalwLcNTowuguRBnCv7TOUFlgzygpMYW+q4hBxkcE5StbjuyedTu+1tfF3//9tH8N6ahygYy1/03Jk7tetBHb8WCJKjE4UsfaQq6mioIrWGfxa2NnFr52VU2oDuiDy5jRdyDZb7GNUNOpxLGJ+QzUHXC+/3ryWgNR/7n75/ebewuAI8jzXV/CRUs17GY6ju1N8txdt95G4mYS03yqFktZNgq/p2/2TjzII4X9U82+VyyztIxNdXcMTbZskrZXC39IIjBMS8HYWw89UAXJKH1b0jbglBddaylLzzJ2TE2ldOSHlsglSNWlCFhLy/hfGTnQIR4aYILmXQS1OLsxJhgHdi1JRTWsB2ZC0wR5zPzwy/LMYe4kNlteRpbbYxuWLY5+65ftdzGkOM+0kZ+V3fthTbMXEktHNvxw2vEbbrn7ajQm0lGycxasZbFIXK/U4Vj/W9btlGfIrMipmPKuI9V7MFdf3IQd9KftR8bZS+Blo0Epes60pzDGm+/YNiE9eX/sjX1QAcs1bl/f/AOPuHeLdfmD/NWJzQTOy8Op49uF/a46DXhqeH5iNjbbziB9G8VzIqgJRM0PNe1WYf2VzwbF/dMdBT/J/njnFdw89puO1C70MNh+Zs1fo+I+p0bzbs7fd+DhA/zXnNVLt3nX9d513+zH/ArODS4eqPEiDKYWVYasH8C+uOhENl6l7XHu2a/pxVtfdcc/Leyp6ovCPvnw3bjHBaSi/yaXw2jfgUR13Me8jry4VCm825uQNvIehFWjMPOC4ZHLHba+olNwCbWVaRtFJ9+lIXdlwwfAZzLCU5EkC877zZV24YVLoJDiF8YLueD3/kSk3SinvLmnkZFl7rLNVKn1PFZ2kRlDFYvA/JVFe65nHPmOL+drdy1/J3K1kwl9DyyemqIkYX4KIaIUU9tCiUnqLynXVLG6eiEPJTtZ/3ldmxATt4rQmeKOFZIIWP5NnPeUQpOvqSCIzR6o37QPJ/VLTVWJFThvdVNiqqbanzanobNY2ojdeRhDIOhPNA3xX+NFjF7IasgaM7y5afVj+bEXgM5+GJK6IX8DklSgTJbVt4rQPUvur0+blDAZnIxNM20NXLLQFRQ8fFjzza1aIOyw5Sbsd3TLCvdGiiY2heT15STwxP4/FKpIlyuzNIgOzoYUZwBxgMWYY+83UwmLv/FnyYtWqd3/1fMUxfeLXxBDnCGTatF/AZomBz+aaash6ff4lwDWx+RKDGfxLb5pMIM5pYpiou/XYQEwOlZqDCcTqaXTGKlwY3s5k2vFhuFUMJc2CgTBXM/BEtaPVKU/poquQF/BzstpAgNfvzyfLf06saDL+spehKCfHUGg0BgcXKjLGmA0oPdIAgRiQetRbamxylE9UXNz2fx+iM4bcqykIVGItpzIh1YC7BM+oNnUdDF8RsiUYfzsD9n0KSyjXiRkUkVK49TAm9lWMKwC40hEesevVp+dl8Qy1gU2Gn/4dmHYaQU8XqIUajEnHW8eK3B7siRRBTVqGenea+4nzC7KerC709DbUWSl/RYtKvY7IUCy1hCM06/SVBG0S72NhTPT+SGDodEToTzaTb8AjD6vktVeqUalObTw+kcYzGYZTy0U0qZgpsGjVFC3ZN3wgMnJ3uG/E6ij263ZYmSJ9LTy9IcZ0xgUEVNgYF/gJFkpM4sjlWTgRiv0EyB2DUVMF6rDnvUHg4N7w8N5gcNBVJWzGGeQbVBwRUWwc5wxXXt1YVdq+fARNKplybSP8fdFrTq92z+lIykuvxEyLOas0Gq/ZElQ934BSoxtiYxvQatTEY+zef7MFi8q0Szr0u1Jmnq9O9RZRqK0wRNdFeAbVheACNJCrUhpPqOaS0DiLZacKhLrphZd920qLqg8ChwAgEAk0Zk0geGVBWET/C9qmD0hiDQ0HHXwEZA7AyHqWRMkRz2h7rpQ/IoqIEktHl5e5k3zTC6P4dqc6KnoowitsdVjwXavO2//CN6oD3uVeH3QiqV/R2Hq5iv+Dl0YjkmprjB0GhlHXmup2IYjryUydXBpH9iVTKNsL5Fr9ixVJ/V5JVV756h/GBVgEaLM38BQqDiunC4WZDRuHOgX0boYSkliSsJsN6ow4w8OdylUa9NHjBzRGRDQeLUIOqsAtq7ltbqGqYVxIL0sUGuEvHkoNKzyeG/JmSYKCs4+5JCPvhxKNYW0uSvNDSUYZaI5T+7L8UXByWjN9clEz1ZN0QddM388XnZzy4D2X4/BKA+PkurwyW4+fF20HCDZ3oU+KXH34yOKR6Bfz5waV9igfn9DfuH9vrbw1zQopKYex2sc0+52Pq6mmKLXufbPe4GmisgMwX6ExudOt9FBFfXaBupLBzxGmllXo/DVNtFbZRoaZb6XNcdQhVYAPHfzf2/IwxqasX7efh3bsFh52HZ4mtOOBr19nU1a7Y+4OBWRW2DvhFxtbm+wvp9ruOh3wz+SAzOQ2zVBYaE//Jos8FOLm3Zz53KEN7mJl74Pmsub53BUr3RtyhzjzeaR9H6fTThqS3aCToCvxbMDtoJgqVlZJFqsqJug2IASNgpLoN2RHihepcKSusjM2vdEf3K+m9NjOSh0STl0sLln5hm3UE0M9yuI7Z+4Uq7e+CbEj345Lx+MFv7d+2Rr/R2tG68vxvB7dXySElzVc1bnQNy8PD6lqQhtQ1/b0NUzM7x7qHgYd75vgCzykSTTo283qPnX0Vb/1Zz/4IIRDOTbJYLXOugvHUQhOfp71SvMq6/OT37cbB7fLWq0btElyVL8v1jsc4DRQfnGK0wEFSQNUZqWluCwDGF7vqD+2dBZ7kXtxHeDEMRgcduxE7uur3KvrPFopMUiMsngbT1Rvqc9eyvaZcJA2WaA6W8XnJrq+3HKb6M2F2pWNlkxPHutPkp78is37Rc8BUeLJII5+8Ka3EWY8sHpP+4l2nwsrS5yBznIUoq0BPdICkX8Kgum9I+29UNL1657k27L6MoZpzWqrrEavqK/ODbINV1eXD+cEVTsq64JptkpewRTjy6PlfLqtObhyHxzsT/0nymGhiPw8o4tAtkRwW0pCygd9M6XHbOGgqkRQiW/AWlB5GjITjSurYy2A4vZmJJ0ShmsVJIvniqvwH81BAfDvS6N6xg/E7m7tbGv5x+cpAQehSEKpxf9UcW5QbrnBUl6Z71/hKHcGyHRp+Zv/3VOcG5xbmmwpd+Y3SpBAvyJpRuUr+y7QM2OXOlBDavsHRPydXZBZUFiYS6dn/04UDXVVdDFGGfQK+vZRYu6VGGbMFTR2EzIEuQn7BFB1u+qHeMu2KLTEtSPEsTO0xVeRqk5Z/B5qexQ6tPVAsOOgZNXpY3KKdBm4TRq1r+1kJ8h/ZUlDYHMOCtFSh3lxHXLp/EhVQ285iOqzsrih5pILTcpMb3e02OKuHKTQkiN2yn/0K6bTrex4h9LU6DaDfE2puSHoaYyUrc2IKCGIZXlkWjIF1qg31edwB5nS66Jx/kSEHMbSZejqGYlpy9NYegv9CQUW7M7obQejp1pWH8Psncf8NPhSvBpEJeVklmVGp2QSa2NEopw6hnbSUF6UM+VAUyzUUPHxzDVgbUfmIOaqT1Jy9VUVtLy1cr/Z85GtW5PK0cphxzhZq0gtHR/s29t3mx+qJOWRvj4j+7HkJ/vXh9lQj6FQtuJP378+9ybu4KZPx0WMPAZN9MnfUouUoVpRHpVGzROF6IpUppK2nR2tON3ey7x9PO0ofqhmF3frb/WOGYewRsg02PnA0tr6oiJ7XVkN827NnZWJT504Qs9cogi1NG3NzbNy8JmreceuWeFkbNB3CT8F/4PJSdFKY/TJqHRXFBodnPyf/heTm6a16rKlEVrehZUy+HboQRQedRCacGSg4OSfbTWtDlDibzm/MXLgzNYaUM1Dr2LpxtGcXp9qG/FBkDJh6VpaaUlhcr6e20BOLyCH5C+mkfu4v9v+KCwrSb9iVw3W38GBAVX2xOfv4KqlE738xSH7qDf5jodPkktBNFb8V3F0Yev01uMVHsx2HD4y3uDilLTW4nc9fqcR23inOYGkRpTzsoXglcfiT0cN1bEvnDCbt0LHyWF67e1a+H2hfSOZORyzNSqPng/Ipxe/jzl189Xz9eVbqjaNVvmOVc3MVdnqrSG+IX8vOnWw6eApl/82iaI/m541xROWJyctlslJIwfULv/9tHlOn2/ewg1zZKLyqXn59faNKFkIRl5qk1tc+6hpJSOvy2nmsExgN4E7cHj+dS7I8v1elkCCLIHQfG9oYdv8pqExdOzBhoMJnk9hhd6w/C54zJtqGrDfn9wtmHW3y3/3SCebnzVzgzsemGRB/wSr712qQAUqjSZ+bBwjn2RdMDfdZiOv/TQr9+9v2s665N580Y3O7EzJTUsz5eqYGlG4HLhKJiUlOnvDl/Z98G1eXLgbHgB3hwfvtPFOiRZimX0aTDfqOYOJDriEmPIJXwVMNdqwZnCutzemNQ0fBAqY70TF7/MlSCujZKaycqaEccMl879TzV2b+Y9bwKogXwLYtvAxSrD45ZJbckrihkVe+7znhRBYsXs+b+ddDS25djzik8bVxo5D3A8ZT8Gcp9WtHXcWqeSeofHmtuGxTi21LkskLGfk90L0G4Zdqk8rpSMP3fcPdfK4vw2X7EZgSa/ddlPtacjE37tjb58hkRZBsX2F9VmppiKrNRlabbA3ia1+mlA/GtOMIqKaY2OtxV0+RuEVw0l8R4s6oZ/QmxM1elNi4mXWJEZ9I1K2R8Oit0dGWs0yVt8ZC5WPt1MOTbaoE1PMCmjkH+A/uEF5PJsohlk/W1JwxDw1GE5nUwGGubY5gIGafdpg+OmnMBKkPo0Hz4LB0tKu7rtC1qbVm3AFNVRDHQcYAP5t/gYA4LgRgFk2hqwN2RWYBectlyJ8wS8Z3PZk/9Il3V7TcgP1Pkn/DDp4pnzG77v2px5itZ6eWTP2Vgfop6hv12qwGjx+7uGQlpPEWVJpdpSTpBohOmnlfJqcTOk4w2Lehwla7HsJbhuvIN2HlLr8fSrG28Avvx2gz0ZhKsPv4DR/L6PDu637B4CxDR1w45j1fX7obvN2fDtAnEN4NcbjbsDQ29ZUaGsuEOSw6AWiuLY40i40apBjp7k7piHZzhlEoXeR8q9ERC/IYQkKbM2FTfh0ky7WGTeE/vBE3F5UrBzr0JrMnVrlcI6Z33fdrEpN7hTgrGoSQW0uLxKh8tf/RMux1CWKch11lhzaT+tR+aIic7maoCbhrILO1GSz6jq/z5yjHO7Umk0dWuVYcZG4/ckPoRuMdYnc4OC/PmlsvXq7jd429BwdBOi+GPyrAaRwkXEIzF/YuNpF8J/fGbL5AfUBwa46CjgMsCsjwaCzdRX2vizBicl1gsOO5IyOVYP2hiqRd7hGI5RU1NTEJNRA6A1J1ajlhuT6ie7WrI6SirjjX0BGIdzKsUssOWspdtUaPyubmM1pa1TGxytRNLoxg8RJLNN4lrK3vIqPV8R5xdxhKbmJlCTQfOERu9pXHifv3jxnKPAuSuaJM+uaXTuaQqCe5ARC1x9/itvyBWVSaYFDUcwwNC+rlpsR/9GTjSUEGdcG79dYy7QEJTRmy/fJYcZwTQqNyFaVBb0tYxY7e7TsMM0zfdjLiAxC7B6u+yh40JgyXVycNQeNFssLLGdXS4V1SqFyrlUtVShWgpIMJZUZAnKGicoW6FgUC95MikPGJcUj4ym9hSYlcyR57zLNFKqJwbjAWZhOj1rs1SUKwgRbg2BPzchdzEHSY3FQtFT0JKLF/xNfb59P/aMo5amzr1SiL0WqV1nwbE4lqOE0uKbQOweYMmUV8CAKFW+S06i0NBYrgIWZzKgXKu8PrOMPtM1nSflhqKerh/XDpK3L1hmzbZnyw7WCheqFf5otY1IqwEX4ZeDoeibgVpCk7AsV5Y/K4mKLNa8kM6typikblyiMP32zefAy1GQa4S2HkfO7yakMX2hNKP+Ha6zGMC7SkHDqlAX+NEGVq4ZLhdbt21I7chQ7bbaAo0uNLkD/a8YnsMcJCY9hn0h2KPm5hedaGs6db7inXDoUnRIE8k/P2PcdW/MQq8M+jIjYcahdSH6WXPmtf6HX082wUEVMRrD1bnj3Rk8wP4LHxsvnDmsTsNltKO/eDxP04zoCWYd405ldzg61TzJrc/rTDJiAYsU3fdEmBC3zMgqjEk04wz46BELfZzDhohILYST9KOud0/JaHO5Xzeudg/s+w7RFuE0RbPk60tq2iB0hlJaQjifvDgmz7ts2YdFFKx70gGdEF110ctWHgnHAa+7QbXTYhudp1jJk+qz7ctDr0j2RCiRaisOiZQokDhf1jdTuj0qI2hAdtXsjbrEhuuLWu+DAEX+G4lBi2Op1JQbDDd7IvsDoBhJaJgkxc+iCT1ru+O3S6N5lL5+z/LJLUqB+/H7t6IgdZ+KNYLBPsbvFCb3M8WG0TFdBlOfdlqWPWvwOyznAI9SrHXhopWntypVrTWd7OPBqQv0q1IGXJNjzM03CWKwqiSgQpCp2TJOA675o5NBolREXZzV+lfA/wvw98pEyKKhXyOOElSsTAgL8mdVRdibCJQJE2JmbgZFx21tSUWOKq2Hcq4oDRvb2uMg/WmRnu1Hu2o0t104l3lppaLlJbyoPxSBDG4roRQ2hnsjQHFOMKSf0M2QoNxRkohZ55FQTyJKeNB5JN2lzVjEOcRHVwNC3zA2VI01RikCDMUs8/U2cScH/z8wxbZu6Yy0+6N2XQnGUEDNa42pIMt63pkk5nGTI5WYvtorkG7UzluOXsEMepVypIft+6rk4I9etJeuu3oLBbl3Vaclc9xTWZ21fPbfoYgq6c+uFdxiMODTI/AhGF+m3yqD4oraAiHIlA+D0beXM0LYy0eKXnwozDD7XYT5w+JpSt23gGvL3k2uUknabTXLJnaGL5goGfQBXpYedZNAP6OoAqybXqMSOMgIouHgFs19J4LlOxcWdcvGUhF+Igb+GGwTSVaZO0wJ3AS+U8TeLLlNUJZ7FhwbaFsAQ6/qB4wuawapLJWSftXUjPKONuPaGsAHOXVVCbfNj/XJJe55NUsm90TqrvmW+/5+sKDFueL/dHa/740SRRx+s329j1Y/v413f09nv/+/j27dlHfC6ZnD4FNmj7/fSX++tpF017dPgOBKij7/k3Qb3e1s7+3gb3pDijM/6J0wYqLb+DzL2Z7rLhvPp17PrdAeHqIjl1naXR6wwrHZa2gVlOLuqXc2uga5IP6x2s6m/XEfXqmMIy1AsaTda9yh0MBMd6BxFPihWuTGJFr4hW2ZtRDs6jJODukKRKxQdnDJEya6GNSqE9hiZBgu0m7X9s+gGivWpS2YPGec63argIUUWWQ4pV1sR7VEZXSYyaLfkIDFGrI5GiqWqh1kXkbOt4ZpUvlY+3Tq2n07Yu1cV0X9nCqc34/8MTFg4qpJksCzXRFa8aIg1YkC02AwdESvEEbSA6MA2YOpKpP3Qr8RoQ9NfSjmyjBptqkkkLemfdUscxVLAZLAcIAloZygvQKzBsZiQ+jTDPnMOtDIKJYvBB3GgbGlbppajy6zRWZMIyUiRCPVdSxBxiJd1dKQYTBrPfVEGIFk84BNCrPS0/3BYuVX/GM3tOLl5nP3J8vrB6do4JdmpmDbEvKWdVabbOXaunY+6SD/EBtZWamOt2kSYRGY6v6/6H6dL8Iha5ElPxYepD9Sg1vAci2yyphiKI6teEXMYogPMrxDaoz6yGmIDmyq1aCSzf7tkml9C/jD2k/T+0z16f/6qeyT4dlf9DFCDPOnar06zfmxnEDBGqI3akfnXL5f+WiAjAnbuvsHqNyK+Dbn/XKhd9uFed6oHhkeLqa9qWFQ1n58+1294F8ATuKsWsBgtQ1Y+lsxNolgtocbwvBm60lQhugvUxTTnwM7F/MoKWTsYDWOlzvGX5sgxpywns3yZZuEjMvYX103mpopTT2i0HCBFU12mvgFqDc9iyvf1DV0l4uA4cPzicgiqpdfrBTXIGx0HoouV2sCOlbrHMu2RY09Zj7asp8MJjWgis54IVwB51En7mhmpCpE3Ovas38TawDbKwbUGMutZD0KoJX278tzQudnOReU3WH1Ho+EnVSCoUNwjizTlIE0z1LyJnVWm2zl2PuoixRAbXGsjoQmTyEwHh2n+kEc20j/nKhYGSqtpdNU6D6h5Zv7EUc8om1qXxSHpZZr9nbU8UBqAmidkaLxoQCKdH59o++/ipnqgrAU1FH5ArtmiqRlAhhUpZK1dv54KddyEOHJRrbheP649UMbppGsaN6lf68iiQTCACwwrRa6z6KmALopqdnMLv+n5Oh7fCdb35YlXB/364qdr/Tze1LeZp4gM3Q+90h5Zd0Xy1JA1UpCuUnsr3dMeqDTkziIRlK+enaEKQHzeZX4C6/taV2TEGcfz1xglatxRnU7siQfKax29b8hvqGj0PsZYMI6unjaHVyldVzbeVULV4Um+59DvY7ZCTfuQ9cQ4nj87jW7E2Ial34LP0ypAVxVzmfqqm7bayOqrVc4AG6hc3bJydbWKm860wfoalbMYG6xcEyrXWr9yLUsVN51jA87a6evXDpmyO/5QpnUcJMxrvz3l+99Ay6uFrNuLYqymf6xZ9xOawxj7KuvvKqBrAWndNmzDoXNhdP02/34YS4Rzzt12oGrpF7B+W/+Wass/gc27Rq9Afvaz/2T2fQS8V+fWe2CMbsaSZVX88lzrJr4GdOsnhoYBNeHwaNFgwowRtpJ8/X5WcdjE8N+34DqslkXIwGb2O/8/EnH6273tbTrwlO8HRQqZ5IENBzXmAd1Wc2HN/ffaO///z1j2Pacf9vdfvfOjeS42vP/6/t9o7vNOs39/9vOz8VFJeqvz39F7Pz/yPSit/fTtpiwmWDP+U3WbbKn0S9jo+/uH8hXtfn8tQf4v3g6YDGv+HdPEUwNiX8DL7jeAs2eb9o19i7fwjdLAtO6YcLJ9zbtwuR8MNZ2ekKnypJywqX/D2+L9jP0bNrLhJgacIV/KzRdgiUn6iFu7G4HHfYR9vqYOpneiLq8+SrNHw2Mt2IyeVUeqeWWGNWcRWJHKNeEE/a8+DWKC5yvJsf9fg3O63USgUttdB1zuo7DPw4zSrLGjzIq4Jieg/xWnQc/j/2J3AXAHKffcPztTDmiIkbHeY0ZDY2wUsSmdxa02pNZtgEwirOJTMs0/szoNykX7XTMkyrQeKnJ6gnORJ1EnWWrvFKRM5Qnf8hG423tT8FpHpG6DHmyV1kpn8REicQrVlFizyllJxq39ic5FgUzSqHK1NFMzzlWJDT5k5CzR7+FJnWQZW1JEykp5wrcygw6quy2yCb9XN/gBqLOROLufAAHOqQVZZynwG4RMvIeTww1UMMgWzq7uxpyECUjkH4kyAS/HirWt3oWza2lPQXkCWhOO1oJ7aOO1YgHO0ZxYRhtq6JrN9ImeosUCQVesUnD+BmV+PUkYkiAvTY+VqeanN6At4SIacs/VLZjF9AhMp673ueFoHX4pD0wlgGg2loqpI5814Wit7P6Klqwl2dfsSYmkx9vl/r/qe6cESf80LpVxLQrbygKnyGRRRFimb1kJQTVnZW2HklCIYpX88zcQkwEZhSHx83qaHisoAloTLkrLEnsPQGijFI5r9UfQuUe4F7neEimWrVowV1or6fERttKFwKPJmVhFL7FYXigCnQtMF0Osq0OZbBVNkVggmo2jIiSkJhylZelbBiC0UQrHtfIsOohyezXvCbWVh1u8AU6fQLOQ4nC+4OWOE2g2LhUhITXv0dpOWeRwFla1/jI+Yaa4vA9oadwWCwIS+UeiTOBYsXa6Z352Te0pqFZAa3C5F2mD18MtlMWuIwbTqUWfbyFmZkpOJ4iqWsFbghPP8MoMHJPxRitPRGnmjTCt2VkYiyF3PmNWzjDfgvgZEhMFpapH5NM6OXvilpnR/TO8MYPFx/8Z7WuxRZ6tC2/B+mk63wr1R27vi2C9ptcS0COw2eucvVZtNNk0nCvuoEa+2ykWbGCzdk+6gQAy9ISZF6hMEWIVvvLtiVHspktfrsJmstC75+/kngRqsDOaAc2y9mf2+UzLfM7eZVRsUUD76ExyFNRs6I/YJpGNd2YKoxVFcG+9Kpus2Ii996MUy36XuxRglfh8PB6s3tn1rSceddYILzTxkVuCxj9WdKFGqHChlcsmlgrqWYin+hXITXmh8K5wm6SCOsqOX5Z12Y11iMnedNH+3HdFaFtENHfGPEsQ9ynT2YbJezwormdAc35RuymLpmMWAJJxccYTz1tglJfk4L6+O9KpsW9vx/gqHMx4KqrCIxjTymq/2zyKx3P8BIHkiEf8wUpf51BmH0WPt7TR4b2+7bJZsLt3ewrNTwzULKzaq7tjTDXu676ZI5rJcOOpZhSq+5L6rpe/8Ej5fa8zg0f77lARp6vz+bl/aVhlUxVoFCZ99hwx13wSJ/+NgzdbvRXCse+nVmIACbxDeqXGSeQKBwh7VNS5vJMMcAlXBUdHuqfogYJwiXeA4O8e9koBUhukP/k580grDaf5JP3lR+vjb7bGIFvkSANcw1iGytQ6vXRQCtdJmr212w7w97jdB3jOZuPn28wGkVzY/gCBRcFZLlP76JDioIQMxRCzsc5o+lQE14Rc2Ga6Wp/WY57wkCxv/m3E3HxQb8Uup26EyAESG8CnEUjeCPswTMCUSavUGCmLxYedPwXK8/JCQvso4eHph3fAs1coRuhDUkpuyIxjDyAbyEMGR/gC+0/B1etALxIVW28JZlcBnHB8oJQk2s3H2NP27MEjUrUy9na7m9beZeM9Cv7yYyo31ZgDKxHEeMpQX80V4TX2io++YA0OFaWOEFDvELN4tNzPU4LR4s6763IEvXyY2h4FhzxCZmgpICLXKnOlDUCI2fz2t/Q0H6XW+mrM0eot9PQQchF1Ta0rBTLLhlL+pJOwCJ4b3FxUMCGmHotYiQEI0AXik2wlf9vdUTHLBSXzGTAMcEtBRqEOQrr6x+mlcpOQh7T4GrZgaqBCkSxBQIHrNXtQHNOEFLmqVaIBMUbBVoJLKZRPSo1Wi0WInsl9k2bW2JkBD/uMKuKV8irEL9Mai17Zj4kb4baZDVN5I4IXjR2a0RcXO40GiccXbgTAyLybfojBgQitQ1F1w9foouczfwWJboFg7PZvdSZV5bjHASowaJfGSHCnNykhDZO8Fra7YpNORJQoyWaXk4dOgxw88pUaAh55m6YoGNGdzKllUaTOA2lFA2CR83CUxT2+kH/7txllBhlm1zKsVr2b8QOpY3Fc0UUGhymdU4YigYMD5EqO40wZEhQECH+ZlgFqjd2TA5vnJTy3vSAlC3NLKVh7GYy7TZmEk+Zz7Nc1iitzxGMuQ3Gv0dxpG5Qanp4xmx4hseV0GzDcd+5iBEL0L2XeT+mZf55GyaG+KBL2S7rN0fTVMfK+j0eMq3gM1475kawzKrbx32Z2ea0sGQqDkGpoYxE/Wq4SXuQDUVC0B7Z62eA4RPEov3PtrQBVW6gkAgnx7tG57A2NSMeoDRY0zIlMrDNWp3Dh4YwEq3V3B1u3tSZuym7mvdTWaFDmSAS7M2zXSONFoUf/skWXj9EjyMBwaZBD45k5UYPtAfJ0tWDHuOnSpxivOTtD8w0KqeH/x3c1VqIj0x+UoGv0lE6LUFcBXuhwbr25zNIIAqIlZFmCg8pzz5dt95bsAjg4qIARHsksDDkoBv/O0Tn1hiGHUzqf85A75H0mJBoeXujOjgCgk3q8HbZtp9+AdO2IXgYDeG9HwV/YYoSYyNbqahXiMGNLAOZ9I1cF2AuV+ad4XaxhXggHvvYw0RBmSnk4Vl2vACXGLXA6ZJDjBuVdPo4z1O8oGd0q5QShsLZDUx+TJrqjYK4kEsmQYi1BBHKGdxYp2QzD7sdh6f9hfJdJxKix0E4Ke6NttoRlDsjrsEhjkJG2Erttt6M0IrFGBUUAaEiO8VJ6B7UqQhwjO9aIZQ0Od7acPxHupkWRc/3VBdKhlwChDVFBqI2dig4QdRUDjZgBtGNdpaN7iKix7absZZ0MGA9RpEELpGLCEYe6C9UfagAOONhRHekQjIEbIm7Mw6vMvCZAd5eM5/0KVUZJ7iLzXHgRteH1hHrwN2nQjWs/76Y5QMPEVmwyKm5ZxPLB8SVPyQZG3z4ixOxulJA9yuJZbXGm54DIv5cP4EWWVyhxB2mzplU7qTDKNwI7NkS8GUEmNq4LeHz11HoEQ3cUDSyVQmRnYaXLyFbCac+PRF9pViZRABfVCp7JuyWX3kL/rkTz2yhxF3uZg1KrhBqJMlBqq6VtcWHpxXUkwtDDFzJbo0IcNABZGvknNy+e3q/7p8MT1lL2SvmknQ8lDnRjV+D3OmJomiYaXI7pAz0jEVM/RGoTSG/G5Sqlm9w1lXKou9EcoIrA5rhxaTZDX7xZdnPbbgE3n2+fnu+31+3leABHHHKFS8ZUKxMfJef0I4N7VGqoR8iaGtoKTyrG+YaWbR76wCapG9ir84IQr1wXymJ4bYhSEOQx0zf69b4zprc1ilZkEN8X8nstMjQ/Rc0w1X1aYv48ALdJSnlj0eDAzBxG5p8EvLy0Us4tHAXBU07CdqoVYK2E9nuDoEe54FtVQtAUtk2SFqgmkwVcg4iSs+A5JThwnLqJwjKThMdPPxol1WV3scWB7qzmUqt2CQIH/SVCTvw2s4tHpTd53SRay58Z/M6CG1QVDwqpxBThzD1QSufAUIprk5P4/di1qxDwnvJd2JvckVObjScRYLKKeJm7HREQ42vH/X7VSOpo9R0ctdUONNaYyJyQvI5mZqC19hvo6zpsEnlH28MRbZaiqq3QEhR6eJ1VBmFyEwc07SVyyLk03pcAFRxTBzEardP5Fxkgq2ieRCAlWWM12vx+/T4R0UNs/hYqvi0WMTQq5KqRUjqe4kCcLP8mj72zndoH7J+3h90G7LG7n5/vxz4NRO49YBM1NLzsynCOdqbjjcppMVAVVcE7n5yCwBbXD9pkLam5pAM1BfTXtLYydF5ivCrQWHbHLMHMMe9QpZDKLY9ugYiNBOueLo7Nget7M3IVqYpn5Xoo3yP1z0cHKk1j4kAhjpbQ28nIM4JYNEFbEbgNUdeTgm3RSJV2I0XQa5WC90QgMc5oRo5UFPQPVWHxxxA1XZdVH6k4IOvgmHSAWuV6f6+rlJUcrXEqHT21+7lwR3zffAl9F1YyMT/TGoALd0plTUqmAw8tGTA8N8xndzkuph2oISCLuRKOB8Gs/ZcfeZNOKJyiJXXOPeAigr6qoLecB8rrUO1EopRvoACIqc3mRoFJjhFcViUYNf6Q0GHP9xci9CMMPcZePdSprmmIyFWZgQm/D8l3aNsUrf0pz02KWYqXcuxaEp3f0wW9X8BvXCt5hJXoPGgmBDrg+s+Y7UiQ4GFWKQTSc53kgXYRnsVEZ8i1JDd+oLXqZnykdhuxKR0L9K5zCCiGuWKX1pWZgAHfeivgiTBDJ1Jn8gQ8v7ot7YnxpXyDM9R2K3qzW2sWupZOW2ERaKV57fg0neMQjDY2zqZ1nOWsiHYWVlZj15pdtKekrAmCXH5On6mqiJG58+kVqGuKE64RqCJLEkRaOIwlx8z6F1RPJgR3fe6SzhdllNvlgbgPAUAl+ms3I7Cmk1WDzO5s0KzXbD+Wur1mL39jfK3XNsgjC4d1uTeWnsHPkUZq6tfGyRNEmj9sRXmeXpN61Uz/g9nSLLyYD0S33OZmzgrHM8GRwFsQRvdWhDjNaSQnWa3d2fOvVhY+LA3UJLS/m1AhKhzVY1YK1jPMhyKwKUV/PFuYIkIyruWHvrDZcqcqS8DOZXXa9qVxVHJQiTCXlL4Qfgk/MqDxqZQCmSnVWXQ3Ofo4qI5X/tkAtCbnC4ruWmV+89Ga0W5biK4ldaQBSz9bdCgrtjbdbJ+cR9ciEwfTfUoiONQ/H84RYTMaYdrfkzutQP8mhauf28cAsU+zPpeNDeByz404h277u/XVMvDfS2MPqUPenTzY6JvHa9lsOvUYydJRP09j7JEKlbKynqvGEXAfiFCvmq1ecwSgd5HV+qdkbb38HMGCLRqVcT2PPKwzHLaGynM0Zll+o3CJhoVoulOt3w6LtMbXowm6HKYdKB/FgKwVQgRkxioacShtLEZ2Y8GozI9JRBGgt3UtLLWRRzntcfsHZxfTDfAovzX4BiwaJobvA3LO9GEIc9FTq679KTqyF0cyfWQJO9aqnlv73m8Zq/MkzoAPOtM/QUGhE1TSPQAIbYBQoIHnLgkXYvgaYUQ4YhXLZFrw+zDhejHe7JNpVcJesmExVsr3woAZNi4cjGgpL1WEVV4lHdRlse3gERD3F1xtmLwBtSEo2OeSYgSMwqIOeGgzf4T/RFsy8f3JaWi4nUkWq4dj08/DFa5gLVGJsDeTUJ1AJ701gRxlMvIxRhYM9YGEYhpwSXQ9Lp13hhCQ+lN5jbmPGh6hxuGslVJUk4ZMSgJW2LtRMnZq7KXXel4ZF7+0FFesVy4dL9dbbHztDoE5J80c474RGShPUTDwQXOHuI2LPSKhVoK7gJYAJV43LpKIZ0NMGpwAdtSEkU6iv545x78/EuN9cbTVgPZcH/oWbFi3RHVekHl+PHWET9H9XZ9RG5u1j4q3Yo+CizwWFZE1JodKf7kjFk3HQgEXr3UJ1hW2WSZOtC7bmNW6P8Sug/Z2+NvzRRYipGdJz4+/+OkPvzu+HF8fbjsf01trXRZZRPks7qf2J76iJzazaCBLLVm3ABFYNtE491kqV60LJVjFM3pyLXxLY80rhKQXT1I7e3Hommwh2e3uzAIxMSYZv/VNDpZWGJKbIvOZtka+5wKv0xFsN9KUT+fgUt9kCfR1mVNgEBLuG+VyB91ddADxQOuim/Okz0ll0bMs6LxLOFaXX2Tj1OnwtHS7PuwBX2+/PPQP/f10AAfsb2WZxzOt3cE87rlzs7TYxEYAT68+wL6EO5I4NcVT60qvvphUgaZNF0SFHhXhlXQGBqTB6TEfFNBpL9RVrnIIbuCwEf0a9jAuJqx1MmnkB/w74oBrAyspVN1yogC5dn5cRmHWGAdsYcCMgozn6FEdS6pMU7jFv/D4br18BWHrJdRbiaPTCRor1NO3lvMhdQ1sIAsJt6/+JSb/3WaLtdOGeF/L2iL3J0+4kBdrumfTrH+xiV8qU6fdcL0Ds8dE5X4Rn413wbNI696Jlhf/0uMIRVGIgh+HLGgMHg5jpnUfBLxCOkOy8uFOH2WpUVsY/jtKYd2dT9Q0ysVVFr65f7pdGLqxSO12NiXMIXIjaIyaVXM8UV4TucBxeIUS1KQEQT+WDlL1RCQeIP0cIT2en0zkgECI/nnl+YKA3ajMF9oA7LPXKt4wfiUsw8Rc6/DqFZA+j7CHeYpGOInHvW2A5GYVMpAjWpod56oOjUPC23Y4DX0TLKxYCJCRtBTthMACrXQ1EqfTFp98C9SYelNk4LhCRXFbymE67U6WroHPI2QIgFlhZRE+nAWJt0gUKYWLnmgEByDEme4wC3iyygfxILVmDO2nhzQgwAhfhsJobRKxJGJMmi6r/Pv4wMjcd2vNrDWstueGwvJ0eU7mQksaquip/n1MSk96M/cO35Kex6XcG3mtg3BcAbIrBGHGSJTA2K98qi9odOvcr1vOscuRSvYZm5lMNuDrTvbb4eLsnbvLeEDDV4mhuIYoSdN8QPXqyixh0t1xze7Gq2sQzlbDZcBkoJ3dwzCou6KpbzvdKieFdPtoumQyPeFewDI2mNKiKlci14U2nCF0r+kXuWDRkG3CQO9qEflkzsl/rpfwzpPl4mBO8nrhJx/0lfevyz0jA3WrQmogChNxdYrnuR6svCCdEq8TrbR298Vp7yke0JZAcdVXqyhbgYTm27io76Jejk4ey8m3qHVFcCEGi3nkoKE+XdYs4lBZa9e9yUWt6GnOw5lOUAom+J5AUs82xidkNlwEaNhEMgJyspJCCPtVG2ThwoGyKSrz6GQ40V9pRBc0DlvBoq3aVPYeOSiVolL0UYXTzC0ViAEFrmGJPtPHsYv4A8nW+15QiFSM/nexUhsxblSLW6b0sTSno+IaI07bcyl5zZLKn9SLKeZPussYGdfIQXa4oVRSnYS37IiNrzzzHl3vpK7VHX5oFmThkBWTfeFIj1k/u2yaMp8o3s6ueTu+1SpLZS/s9fnj6qc52kcvkJ/3+9R86wXHnkt6aeexV+4Kzc2vz947zRwg+QkGrDGSKFk+73U6EHzDfmmCVFQ+wqdG7oh+mxboa/S/DMF3iVp5kflgwKElW/P2Wj/ANLIfoIBMhBIqgkETedSKQ4utCW9E0hIqDFiCIwW11MuIlDcwILw86vqRVns0UVUDeSJgeltNQq+HuA/Kkne75csFychKxpLziBCXvRtq6X/+LszZmp5QUlC8nU1X0p/bVjz4UrAV8aI6wcK7i3Ze8Xn/AYNpfglP2pHuHukDiWWWfx0v5y7h60Wjkox87Oo/Y1k5mA/MkcA5qmWYWe8qJBTL9CFGwZwjK5FBWLTgZRwI8oGMidgXvCaEOp61JcOWoYqXv8tQXmytXXGWDrzSaX8Us0QsRFuuXbVR0O9B12uUReN2BleTJTzlEV3dBXFbY+OBjrT5zUabjWwnWCq3yWvXRHiskpGmRByyQsA3cKkO0soCm/HyLkr3FYPJmtIIN6/D3gnPPalDPiPJ2WzmBf2tMSeKH0h7c0ErSyQTXKRywDgN3/c8NZJ4sfCTD5t7rz12l+YCxUPV7CwaRVHcH7Z6lidWVfZ9VWN+5rJwAQrL1zAMltX2UVhZ6rbtelew4uvRKWuIfKlGvBXM3csLmYvCTAIc4IXsOU73Quxf9s+3i9iJrb+6uX1yTgNS+OlyzLcVy+81kfgbsPyGNpu/7DaO6x7PMaMLCDbW/IjdDmdn57yx5ZPdjRdX7+rutDZ/wKlwx2jJvzteeRHaCtdrJYpAUashxtX6EnQDelNpWSm0QoviARtio1qQb6irc4SzBGc6sGjbYleuCipSwVKZSVMpNzHwFL06vYPIOoAAaNaGCqApGujqh7TUU6pfRzPvQTM5PP3VSoo1wkoFj0HfgoFIZ0122ED+3s3zcmpIeRE/tFFa9mJButrmL1cuN+PlbAkGJBss8xTE+NWNI6CTTqs0VxrgByoCNXxYWwFgNPBJvDykRmVsoaJmZ1/and8EtDvRW+agcZgwJ9rHddqG1l6ObaT7pgnWdN0zcxxsZujx6EgEbNxSseBFoutBIYz0Ja6pt4xZMp+BpMBpFM6PzsFfzT2HOVwZMInCf4yBYdzMwQupQyz5+xg7SBp55KVnbHRYCi+FcP8DBi+FfZ6VYVoqVSHTkiKUltAF3FaCYkLWjXBcehHyaKEFOjfw5pMGCquvPpCe0ZhmyGiomx4oDjRRvgvoQXqmUhToRvsLRmidEcjIS6gix+iTVP6GOgUTMY/Gt3JJYJvWCgH9unglCGiKNT85OMKXFDGYjzMR8RpKVIIQR7sB+3akW1iqNjd/oAglriJ+yBc4kN7L/VVhGtORk5a4c1qnV7ydz2dgvk7FupBrrTbzxM6ZoAs6wRBg1qYejwwxm8deq7yADct0ky0zR++93tQ380czVE/wLhqeLQaaMah6sngKx4ByOLcLP9zXssxXSyv4kfzpOp/zHTVUOEQyEWoytfnsLGswm2UoevTzMEDubm/BvS4QHGlygEoxt+2ie6rinleGPzjVnbNWGTF2Gz4NcVhsXh6d0d5MWJuoS7ns9RQwbWO1LsCEfBtN80H6WUndEDpWt7/A4AeApQabcSKT38f31tvX7DyAPpq+c9p31DHcrB6PSEeZWhpFDDLOHJYlQJ4dLLuy8OKgojxyftF9HwwOUYAITnPJoZz06V7EGmMwVrNuRRys1EK0oT63Z6ISJQCu4Co2Pzsnx6Hnobz1/23mZ6h2Gqu2t/VkHFiExD8NE+D0VAka1z7RrTxVPhxLVCt+iu68JkvRXKBEnq08dXz2eN/dCpanD/uefOl12j4UiR5kLzER8SnNqRt9muq+zwLjcbEU7fsZAFrwpCT9nhPZJUbHnoCGJtVKwWk9orqNBuu/K5+RTv7hDS6T6LlbOi2wqdh5sulPtb9zgaO+HYFd/x/O+3JP7KYpYPeqPu82aZUavgYzpgfleQi9czC6CaZccw1lZF0rE0yqqu4HqIAmGrJQzmYugOy6mRGBe4FXTLXrHoZXYRFmS4HAl7A3KkccG3JVQZT9Ti5+sRgc8BMCVnhqsT3TuXPRb4/dVnO1X0M3pE6nn3ilKYqR7/oWvnZVgIJoJmDA+C1zEHOmmZyQip4qsmx2kdFQbxBRvstPIqENzcAMhHhPMRZiYcPBF4zgymc6szglgLQiueFQZEunQUz1BUUraFyASLTSF9crw9xfO+1b1Ncz3giIGcp6JkKykM9mLogcb4cCghWypigAFZiD3rOeZrpXUaUnaZXciAafdvpKgxHFHro+7aworswHwMGfIwOeruRMEGFy3zEB6GazrEYv+LQT5BdC3iEGJpunGuKa5MQWbOSqkYuWBmFvCnKoZhy7b15+pWmEQkRQBNCbtLDi2nmcX+AoW70uIgabP60XZV/rlNPnKIOQllKhxCA/XUrxA5+IAPtqpqUMJB19MUJCTQL0eCi69idytjG6pigVRvcAs9xCWnm6NhWwyYRqOcgtUcrIceODxcgyNRHiywlO9YWrisDg8cqarHJEKTHLdEav8LGJv6n8rdpP4YTvYaMydSCIl4vp3zGYGDaZUE0K18GIJjiyOoCuqrzycAQCtUW+l1+b0RF+j8jFUHaECupPasnWq+E5i25l6TRkxxANjG0D7u/0o8lrut0biBjuWOy0VU3wPWhoBVznxlaR+i0d3fi3lrJaGFXHRGgQuIHGHNHPVAj+YLUe3UpMMnYzCpjOZi15dUjxagD4ZbqHAg3A0QlbAapztYkA7SrsTRMQm7QazeA9nfVZDwrSGDrjz60z5ny5ScD/Omq0xx+JhxwW/FWt/d4v4De/kfG1cwUCcuaPEJwUqxEZvs6TYXEHR4D/l6K7DM3GG1+PXUiLAsdW171Sy1NXam3rblFrB6YK7bUz34jPC0Cr76IwqHOaLaGpixwUzOhow+iWaGmgYtV5JMFrwBMJT+kHCK5E8r/tk5b7Ax7QM5tJzuW8LKSsqP2vkJyoDv1VMNH9IALIGQWpHsc+fyAgIQj+ujMUmOJIFiJxadTCRfRXxdEIOcYA2YA9IxNr2EEnZrG0X18pJoaWAVwt+I389wBx8t+MfAyBghoQcPgybDueLIA301IRp8IoNs4ycUjh5GnMOt6oEgcNSUXJlMh2W2fahLpiKp1bqaoJDBBAcAnV7o8I4LczhmiNaLRzGEdH8UJKN5dun1ZbXqQv5fN7Ww8Jb2qdsRYWSWHfr/1q8OdrdbG1WcPbcsCd/YHXJT6pDjw53+OzRI5Lg0xRSt1ktR6mo9CCRrkp9EzlJVmikfG8MvDsWMuPB4Ne9Q+RfWMHMIH3iNRXjVhnf1cU1Fbq2GpkO3uONG7C+690ntZuBwZXEHUduKrZYi2jCLDeSulfMEojpp4C5OQebdDczWcbD3buX+0htt6cy5uwcQg73icE5CsaZn2bjXSdNZy/72VkZAav3gX1xZX7jPDarWk2ON02lVG8RLc+ODeWGy5XIUVwMff6LXBwKhebfujmtI6HJtbReUIxQ5xsp6/c0YTRqAQfmj4FS7dJPGf1jyZqVRZZGke+16dMlENETqM00H30Ppq1CiIEoxYTSJ0HCOsqHljey1pmZ+edIuBxwPSEfwu2+42SZRQSjJZRwrg5Z2fM/qYZK9RyEfz2PQ/RAcHbZExUmG3iFH0/W/dms5UtYKKGuER74QYdJnNGFl9uyC+A7oSgdWzTWf4IoBO4216TZU3vg7vWJNKxXNVaWdSIaq3reaVfobyOHPYBf6AIrPE2mmddCE+l8tGRVnwdU75LUzMhbKtHWgm3yDwoV+V4gXGEbG2Xb/9ARfMOSvwYEz+R6mNQrmze9s/YET1hhy0+PozVm0457AGcM5t4kNEcUaXQE1lIJaNyKnV2/vJdQbAVK6xLrjj8Px+/IOJ5F7V8hzijhyQarfDYUE/OxJEVf1pnM/4q6eSuVlIgLKFRgDBzyJtN3Ovsa8mYCXNNIin9Hbnl2kxSsaCsoofiJhbc6Doz+p4DaJ+7dFvGKU6jmwlu3OjWQkAY3Iym1ojIcCPPDDDv5fzhXNtlqC9s2WDueVRIhk0yK8pcdl/RfJ2vKx7jJizFI/AFmso6hq7YrSqWxxxG3bpp8r0z2FVWj71+ZGeHe1eXU8A5y3aImeOMWSRllsZN4c2LUZ+Bju6sZlWrGKsr1eiGSZZJfZ2/SEQJIj8tbxn2MUCU8lJSeNZEtwf3fVw+sBQAaVKphpYPzYlXzCwhtxtM20bx2rlppzwVFcmaI60tXdGfjE1TZVgy2h6uz1PKyiwOw17IbHR+ANzdHB6Pj+DUqUmr2prPGOCWfZdKI4eiQ3dNFoYzVhLK280PBRQUnqBxup0czXxJPhiEIkNOLcXNEPU0tffrPk9d6uN1Koyo4GmYYn4NmxOoilkCxSykAVlnYRe7L2LucdgoWPc2wi8EXMoMU2dMOtxMuK7zTORtgK15xqIhg8Iud8zJDTG2TotsaulAAx93w8zCoNbiGhvypH8p8Tw3Ea5oRHH9XINPUKWSu2rg2ROlrwtHSw2bC8/APhhue2MrwFTBPx+9MJu41aTdr+n7A7XAxVcUFmpztSoWHN0uCq6XE2bB8pzSC6uQiJyV7ZxKlY3bmQfndN3KrOP+cDUops4CBpHEiJRrlcoTFpcqUKhTvP1rUhjzvjrXhIrlYpVOecwyIs/y0KxqxknuEUB/1jBotUJ2mCftwZAXdkZS6hZYagoKU9Bmi7BTq+iA4KvIpWLId/wPP3sOEev2WT+ZCwC8Dq1MhcO9CrMBkDCEAlZq/1pD9FxTJdZUdnKi4licXTsdeGW9lSLOl/v+6/vgIHtBfnpjFuVYQeoaMl/cu7fThmjlgXzojRpvh+m+/6OvwH+/gbfcITsaGhaC48xHCNZbCGj5tNgML+TpKhu4MQVAePMQ15Br5alXLAtywQ70jEnGxVGQ0MwPtiq4kZ/uS+pqBgcHZeGS7NI6p5RvX2WuJXHLUqfHd9IUsHNRHbd9alLNyjytmnnArqUc8RFoF2CyXmP4RL7pYyMxuN+mwUuGOjc9wJi8YFQe5ouu+LJ+iRo48SnPgG5WXEJx5IJklsw1FE8qiD5Ms1ahQfEaKG0UFRN0olYBkNSEmdY9uZhJpkYM6DOlmq6LQtJgOzcOxopApxQaRm5qiNndEI13axzHCSForoy61bxdySNocHozAyesoZpP/KEGyBSzC5fmXTRzo9qXorA4k8q4TbXepguQEKNtI/+dLQtJuyfVj64L9RPk5BuEBXq7PKGzpMuWxp6t3/bMHbIlJwr6WeknjORrA5/GldmsXjSH+lzPau1+GJEtcqb22XA9xuIwJ9xFmG2Pt2UJIeD4Yft4OW341/OWTVkrAQuYR9S6xRE0/DeTJT9G+Nu1QY9foHcx9LxDhongCXu2LtqE6N4w3Nx1ZTNZWCflwU/ut2VZIX+dvz//yR9+/cv7t/vXt6fyVl4Pu65RQka7OvQ52nVGZxYcq4GguivGBLVJzxRHQHBNgvcabqGpRlAvTb+Jxw67mQcvmpnWPkjKz2Nh20KzvsAbChjhxn5rBKtlZ8OjuxLG8ciOKaWj6AhRDkBFHRxnqexR3ceOWzdBUj4egch1oM742XNQWL+VQX6izWxO6M9Hu9A4Xk+WSyS75vEP27/uD+vfebYC8DEKNNT5oJZjEyI2tcQ11zz5YdqhcMiHZd/d7AGVJ5WpqdqGr/gw+Ko2CmLvxrmu6xs8pkEIHfSnYsGQg5pIQgM8F0Ag++zB1ZyoAEyYgrJHZWaTKPjrjNtQnoX6VPkT5SVXJme4tSOVuwy56ksuCwf2yLcD+To+CriyL5NxZA1ZjreOzTWnh9M6B0ZFUzO02iUUTo8kIPtRA/EswUPlL36MwdrWh1k6MCIygsIuiqciZe+sb9AEf1UuS0fiVjhkOHw4HUCDW1bt20mJbyXJEep0iBKGY29dV3xzkG2/7WXLQa/BVBAw6SjtKMWtbj1j1YoZld6xNr92iqtzzB7Lg4g9qvUvZjEBmqnSNFFw7740mSVLlpKGWD9oLgdvUM1N3kL/1OHS7PaaRbv1aIPX6GFpFBvmD27WDaMVxR9rnOlH3Xzo/g5qiVy4mdmrRVK2t6uU2KSilUMqKH9idA5BqBTddxiHCMs47AGHV/0ZHLCfoEx33hpyLcC+hrZC6f81i8WrUQtplue5VXThiD6+ebbnUTjtdCGo4NovQADBF8MJdzAzLaZ9DJYpvRtu5gsMBurbPttlHo2jGfbH+03fjTynlVEwheHsE6VndalTw6TfPj/U3GTVeXpoBSFg9SAeryM6vqZaJ9KbRJuOG9+2FZ4k4Rv5t5FoHFRU1xhR0jP5ORJdy27qNNRoskACnK2zrDlzcCMXZ925P7dNXQm2Lrs1sot6d5JblqYBmplRczettDB8HUME5OzlQsTaA3GSO9B/YFBLBPpOOhz2fb8Q3JtpdRmzoVkvYgCbtKiAaUjSrZeWEQOrYrs84nnzThtoU0ClEnKUaU9AHSGyuSGW6TmLObkPxBbbnsyst2WaYC9caQ7APh8OT02AT3g3Y18NqHfLClSUO/3EH6S0N0z0wEZ0yqfSjxaCGODrutcNLZZX27QeRhseg404tko2GIHhW8ZzHQ8sxsnc0nTlkzMjjPQIhHgrjd0Gnq7kWjtZYaPE1JGQ9o6HZEfsb5t+QZuEUDqVcaLbIfuOE/0eZ+5nI87sHBeS674pnSdH2yjyJqDdvfyVMd2IelfzSoFAVY2zHq3rRTC5bcrTlsYdDRXYtgImJFVwrDTovEbregFRoK8j/J/fK7uJQhSp9xlxnG//tHaU2879q599hl4MB0cD3gP/9ud1T6vQzCY+EvjzAP3EsKxoJSkmfJ5ngupTwnWECKcMexLHjveqAA5F/T3fwfNjZkPiI1sAoCjnBOLvgXYK59IXwvBntcv8xteVS0eH+ibk63AAmJuHTR5x6Prc/7WC7v8QMYJRUVIgq5k/558lBP08Le8vhCpyAA47vRp5T50QH46s4bLUmiUyykzn1CHvmoTa0joF9pm/z4R8o1bt4kzeNgjVcCxEQLQ2VFvGm6FKT6hx7KeUMa49Ryk0PUvIERKTEgUQ0TNR76Wlimo39M07AQdebDCVH0tKHLiihjwd6CI+MIc7cog9/u+VuR/zBpd/ezXYdj2UqOQnX60f+cnqPxy3kmB5/gx8WkvhvWJkcU4U1Ch1IqAWmor2h/YnjN3WTfecHTtzdx6ZEyUIvpPkZ+foFL2DOz+cqzyh/4nleiT5Obwph9F7Lg/Hit/Dh3qavTN5Ufzv8KVdrt/rrRp+nI5dnBFjQKV4I/AJCBuZ6Ik3U0gmIIGKJ9iYdE9qGothAdLYVJqNz/VkWwW8dCBHyObYJGJPoUgktL40v3bLz5RmAES8uwzXrl24cObMsWMLC3v37ty5adPsrFv6xD05OTo6ONjX53J1dLS0NDTU1GRnp6ZqtWIxne5Rrt30Y9y4fuXyhQ8bL108c36dc2dPLy2eOnay8cTxhaPrHDl86OD8gb0fNO7ft3PP4N27dmzftnXTlk3/A+SW2Y00bljvnmmcXje5tnHN1OhE4/jY4Ejj8FDf6saBfldvY093x6rGrs6W9sYZu5xTu4imLmMZKvWnI7viQMxll/yntpeWlZqpNWoNyXpxklijlNNFdCGXLWL5EPDFVVzBYKS3o7LkfiI7nK7nabHgWAxd080rLHVYqVoj62QtLT0W7OP2pMnmpFDS9Y9UzOkabXFj+fOQHq87qFQpzCWKzcU+AgckyF77nC7mVsuqhxZup/gtG7hapT2wb/2IgdJfVZ5X9WKVJiN1DJ6/cG7LrsiMt3otR4k81S7HlQq5mZ8WzeOLRGQlzCvCq3bBRJnMVSQg67+pbl4h0CCqPFe/R0h59bsV3/19jUTTqlJYQLiqUa5D1NmrkODWKqYoKQRV5NNr/Ql3OIKQOPXUJKxaAe3Gbbs7tXdj11D0VgPK3QEXkvN8uU63uaZwPLoQYKk5XSJXb3Cy7TVMMXC8CGbCdCTGwTW8O0N0cgC2o4RihZZkQOAew6pAdGOHE7RadRTis9bBmC5cc7cX2KgmRidF0jimUkz15BXf+IRns1c4m8TE9jU8+TMXfNekcEcgDyvDbBrrkQq2XQNFVIlrIFoTJ2lIaa52/tI7rTVD/TviqNa0tfzKFpWT9AcLOVMV0F//wZM3ef+u5Dfb6r8lfsVj+1A4fvDYPsvPu+C9NPF16m19X2UAjuIBvb88PG14LpkehS/vUAcDYwCXCJdpbnuXPlFVUnF6c7TM2qyO6dOt6iQzezMRqbdyMKEmxNqCZZI19kZg36MsKfBj7tarIxgseGUUoPnVkko40d5WGn5K8sMrTSaXWicCEsVmKGGKWzq733nSgwxZsweOM5O1zTiZYK9VGjL7lWQp95wedAOa0phfnlzVMBCbm6gMiWhDuxn8beaOt7nPvXAuQbUoiisQyWYPKqXiyQWXuH5K5iMXH4i1eiQrIlFehu3T2PS1ioEMs+O/a0jQrwx3OWW37rQMkVPGOkZZWDTa9kz6FJSBQZ6Cq1zTBAGLrLukVJ+1/EEnZN67JWFp8l9qfeHleVEu5z1mtskKX1vLDDuQ2IaOLKKdY36co/q0Ual8vMKZZo7cij+2zWEdsGDt7xLKquPVg4HSTDbupympvvjxo7wQ2pZnnNhc0qn3SaKvqYOUSGuGIMy7VjfwfwaGZ7v0KcoHpC2iVpz9qLRNIpLZ1sJ9dMY5oI7b5ylbhigpXys6ts2AolEhpX/RnUa1D+arQHN8XKX0w3JnbKTXTQ6rw9wwMUwJM8LssMZeNj0sDqvCyrA8rChlG5vWbi311GTPn0DL8SsMCg2sIo9nBhWDSwzWnSnSZ5FrtoRyvaVZ2xuaxBchoxcZfZ27tz1knQFH7tPznmBz2BMGBEfrzZa+qOULzh44I8zsuXJfvk771kZ6YL9PaEfc5gUmw331SPqTtehyq5CojjxjQdTxyzl0YIlG2ujgvMuwPbyZBHoJLHFF0K42UImnkwzDEhQjHAU7/5CI9HaozMDW7lNtJqMM9UF+qLvxfjEyzwnMCIuGJvQ8gDFP0Q7UEe1DddbPMjq3UTtjPOZ2L4Fx1Da0HM3c27UMz1ZfRzEOG+puPLzvaIR/1jIIzUddjf5bintvU9nYI9VvdF6MqkdCCSebDWMSqExxju0sCybeXHk+7jxrsDAvpLw5G1fZf5DwUvMg6ENcYNKeCLMrtCmQr14hOCsGa/tSFUHHARAFI8CmaCoCTZuaXsumQYhhTZP4md00WZAVTVPxdjZNU8HlphkCi0Az6zBPFJgfF6Ve21QILoc3bX1t8oCwXHD7/lLAg20wm4hx7CZGUnWbOGnLaxJwbbZJKGyXmkQse7ZFIgmG7VLTD78mOdO5yhWo++aJCNh4+SKqJzcx2C5TEwfT1fLmESDh2jCVpFbnwIVL8HB3/wq9zgi6GqobQLHQk0PdoRITq0AWjONEJkX4LfO/G8i8B6ZZIwSKFBqyN5zBJlBcKMBIRWHRUW8fbu6kf2rfJvzJWQ5M1iyubQvrMI2uKcTqCFMe+kIEupSemJsRnwiyPGc5XcEUaw8NCtiyI0NEOfUx1QPOY881lujp/hPPzR5zYuNIIpOwuJSqj9vbVrg9z3MjlE4c+Js4cll5Aq8tBYORAKdbiuj3IEcWpC7z0l/dhYJWHlksL/rGHCGYznqbUrxQSv+6Wp0DFy7Bw939K/Q6I6Dgwc6+ARRLDsmBNLjExGrPDlkwjhMZg8d1+m+Z/zEHM+8VQ30ixmajSKEhe2PFM9jQiEQMwagGrvZ8i456+3Bz5w3+XA024xAYc2bq7H6L6xFx94At1jmeKKGlvhHXcQDVBJTcrNNHfCIanntBlji6ik+xVp9ohoKDTQUPDTFBKbYyyaRSxecaRejwhODE20aD+JxYJMgTkRnqhUFKTtXHreds6QCFbqSWgnJXIo9rXgLq5eBzNaFGbhwRk9cXgQrhYyBeugWpRxcVXlwCoewCxS4oFyFVjpBBKag2REDPk2fSgoz7g42X0ZqvD9kOZXEuRhx9DSxbRGKcSULS/76/T3MFWrYSmwsgfwrQqmBbTC+Elc1/PnxeaMLYvS4kERzaFJkoZ9MmJpDEJs75DIG6kDHwJATByeVXLEEFLTJMsNzhXMzlksv+JNKV3CGFHIp1R6ihiY4uJkaYYYXtiVieOOFqHeyOtRXnaumulRFRxJFEql0yN8pLoQmct726xDQlpTUjna22ifdegsT0JZciKYNn/qZ6qZkyS9aCzvzpWaW4WX23tC/Tbb3ovPNyyi2v/AoqrKjiSiqVKq2ybJVXIV2Gt3V0QJNI55VZrRd1V0YHfSLhmakTCFp0xq+jZpKWpGsuulheN2WV4w1woY6RalLem0a7AhV016SY3lPrTVTzNl562fExejSugZvhU66hokp+6+LGS2X7bTlDgWK9m6Wvfq2nTxvc6CY3O0eVtrjVbVRtuzuopreb7N3u4anqamjvhu+f1TpAfzUNaJ5B2r+pteBhjzC4owzUCI44odubj45FlzztGVZ0liG2q+WD2up0zvNeoG4Xee5fjnuCCep12VOe9gz1De06w43oBsO6qZub95KXvOwVr3rN697wprdooGFPLbbEOzTS2LvuUtSy933gQ5r0BS/1QWb6RMM4l/PcF770la9941vf+d4PfvSTn/2iI7I1fidayOF/bIwL6+WoY5ZY2rM0FJd1h9Gtt26yOHPhyo07CjChYRQnaZYX5ZrpAOkNkkqbqm7art9sd3vNMy3vfLne7g+PT88vrxpf+lgEEGFCGRey64dxUrM21vkQUy61Leu2H+d1P+/3i2+vuZs7yoUcjjgqfTpfrrf7Q/NAD/v7j9Umkql0JpvTUVCyWCpX7FpavdFstbWHA3rEqR4MR+PJdOa8bfLFcrXebC0KJjSUABabw+XxM/3iBI+n2cd+3bRdP4zTfLne7o/n652kWV6UVd20XT+M07ysmzP+dfjTj3+u+/n929B9feXcsUeV9phA/vQMNhJYxWSlE8bx+6j8tswmp9BUc1lyBOwFO+yU56RTdtltj702KHTYkX9C/qft0571vBe9ZPS+QVyvWbvvetu73vehj33qc1/62jfG7M9+9JO5lD76ZB+jaSKEm2O2WdZpYbVcMy3e236z0AJrzN97JE7vb//6n7eveDuhSKjOfnjYfIIo3f2IVa9POZn/i2gQJxZfhhA+bnKWEhed4v4x8s2lxcl0Nl8sr7O8KKu6WWk0Kjemf6H/0g+VmKpP/s/uKvXAnTMPj0/PL69v7x8+fvr85eu3NggjnUj9UnXTdv0wTvOybjqC/mc5wgmMWnb+jCYoZ4JHoKPRQUVCRoF32WDLStqhFB9LN1LAwc7CTmxopxUY2bfxZZyu2WGn+ZrBxe5aqWjXgVDky9Cz4t1OKKki302tY1KcQLoJPQnwCFZHh++yXHHJzE5hfDdKfzvSXSrnV5AkuZeHRIffMh7o6y+n6Pzl3/+j1ye9bgy9CDrZ1uOueweQXtqxHpwSnyqEAAMe+xWtZytDhdR3v5QxYVm+DKsvyDi9evyEos/fsiEThOEFZAREXlVUuzffEydR5LjGtyYDlTSkd/bOE6fFhqLmjGplTNqYO5MfQ6xwMt8d28gNamUx1CMtWhwIzaLNYmvrell28U3I8tyVhEG+t1FZyRlmFNwleV2JL7O0sLy4l0cq3L2ZrsTXq8JY9dOi79UIzcmqtwqyWVVt/grWxu4AYdyNZFMgPYGzkyeudkVUdunuWJJgRVb2Zd3E3o/yYXgd0pLiExJ7i5qUnBK/E24IsAonIlWbKqNtk26/GqIlxSdcYHwg8qmlQbVkpHnIHmk7FrfhPHwoRrkqdzPCc8rd8ic+GgxYsa2kYL8dJ1j0fXxHP50KBBCMin7XEX9hV/t13F/81amk2xEc5Kg+hd9nC0Su1Io9U43ikxMS+06lvmv7raD0DNTSYn7/rGi1StgdhyleYt9xeXtJV2ZNIufjUhPPm77W5PhefKkxfzutqalVrWvdVrdjWt32fZ4vLmfSKXm5jLnI9Mbb5c3bH8rD2NyRO3KxYZCfkN0fGVUcTzusjc2daa2v45vc3zb+eC7DY7O2rk11ufiKajk+p+U31HSIg7tX+JjteIvseN+w657bPcRzMINiEbYipbdQwa3eP8uS3NgWPbfb2588+UfkVPQrNpZpXp82eoKAy0Bf0yxAq3kQrQJSBhQDl4o0GBIlXRKPRyZ6BQIDIR9VpogIimNUH8n3phOOFnh8ZH90v4cMdQIAARIfze3lr0DcRjcEoxIuYggAQhwTY4YEIEfIivOGDmgsD4AQjEp3e8kUJpMp0xMWKIQ4AgOgYyKzKK3WQlABPJg4fg/dyjokSrqkeLxHJu4qg4CBjpZEdd6yCIpjUtVH8r3phKOlHh/ZH93vIUOdoGjQxEeThb+bsDcUp5EyAGHUaYiFgwzp0EgWBMIoTmOwYBSnOcJCYLTczscm8N1lYKG5ceDqbxFOeDCibwygQgB6EoygGE7N277cQz78ktxUgX2R2sR2OzkEe8g6qMYw8IlmSuTL9kgnEKsG/dnIFpoiLCz/2b9+czT7BAkckoOFDRMYmgQGFuZgYQoZJLCyNP0WEhj6AhIdSM4TCVAMpxprY4DKQFAMp3oWAiDpDKYdK034XBFbO8HLd43yqDnvEKsCSPNT6dkok4JLAYri9cuq2KQLQcvuMb48I3UkUlyL7ZUTBzJIVGlxwsG+IsRwLWwSj4LAqnOobhhQnvVgrWh+iJvfJbqXCXU/0LeIpW6rGKzztQ2tpNpapUlP6at1zepgQgBCiqcmTL3KCJ4WE4fnqTN0gaUpHM3gMoSvirynqHacKugTtiM6lD1QKfxmXif3/fu9wU7ylfXxLQkd2dNB0gMsj/27vGOpd5CdU3k4aU3323/evx0hKyAF6G/Ik1W1AibP7IEM+E3r8b3kNTeHj5jMTy/W7qSxP1y6g/tc4qDn7zM53k3f/fJazd5lOhb56MtIlj9+OKd1PgqzddaypLg0Iar8m//I5ofZb+ufbMom3fj4w/amXr+zPjbLmeHBNcNbYDVKiqto2nxHOY05eadw54Ytd3Rh3JUVwtFChAZwfbOAkkTqcOVEUAHv+p2SA+HDeKDMLkCOMCtQXBoi0ZzToC/TENmc2RfWwrlOcEn0hbXVmT2h8spyTqvnnhk0uJlkj8Epj7OmjL/w2jWeubBC+1Nz1R32EMtPekDJIiFBHuPYRaUBVpAOxAPTgDggxBvkm8Jzf98QlIFYv70wE7zMOfzk5yM8OqrL3+Xr8v6SCbdXSrDX46hXLwXoi19rmUp5GLliMDVjQTqYEVfuObDhU2CPaQooMyGHMfY5lsAuDwJKB4stqeAGpQHZv/UICkCM36HMEucFCsCfWvH/1QJw7LDn35K7xasEtHQlAA==", "dist/iAWriterMonoS-Regular.woff2": "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", "dist/global.plug.json": "ewogICJuYW1lIjogImdsb2JhbCIsCiAgImRlcGVuZGVuY2llcyI6IHsKICAgICJodHRwczovL2VzbS5zaC9oYW5kbGViYXJzIjogIigoKSA9PiB7IHZhciBtb2Q9KCgpPT57dmFyIE1zPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgbFM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgdVM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIGZTPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIEVyPShlPT50eXBlb2YgcmVxdWlyZSE9XCJ1bmRlZmluZWRcIj9yZXF1aXJlOnR5cGVvZiBQcm94eSE9XCJ1bmRlZmluZWRcIj9uZXcgUHJveHkoZSx7Z2V0Oih0LHIpPT4odHlwZW9mIHJlcXVpcmUhPVwidW5kZWZpbmVkXCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT1cInVuZGVmaW5lZFwiKXJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiBcIicrZSsnXCIgaXMgbm90IHN1cHBvcnRlZCcpfSk7dmFyIEE9KGUsdCk9PigpPT4oZSYmKHQ9ZShlPTApKSx0KTt2YXIgcFM9KGUsdCk9PigpPT4odHx8ZSgodD17ZXhwb3J0czp7fX0pLmV4cG9ydHMsdCksdC5leHBvcnRzKSxjZT0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KU1zKGUscix7Z2V0OnRbcl0sZW51bWVyYWJsZTohMH0pfSxSUz0oZSx0LHIsbik9PntpZih0JiZ0eXBlb2YgdD09XCJvYmplY3RcInx8dHlwZW9mIHQ9PVwiZnVuY3Rpb25cIilmb3IobGV0IG8gb2YgdVModCkpIWZTLmNhbGwoZSxvKSYmbyE9PXImJk1zKGUsbyx7Z2V0OigpPT50W29dLGVudW1lcmFibGU6IShuPWxTKHQsbykpfHxuLmVudW1lcmFibGV9KTtyZXR1cm4gZX07dmFyIEVTPWU9PlJTKE1zKHt9LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLGUpO3ZhciBfUyxZdSxkUyxoUyxPUyxtUyxFdCxTUyxnUyxBUyxqdSxtbixLdSx4UyxYdSxOUyxJUyx5UyxUUyxEUyxxdSxKeSxlVCx0VCxHdSxiUyxRdSx6dT1BKCgpPT57X1M9T2JqZWN0LmNyZWF0ZSxZdT1PYmplY3QuZGVmaW5lUHJvcGVydHksZFM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixoUz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxPUz1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbVM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFdD0oZSx0KT0+KCk9Pih0fHxlKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLFNTPShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT1cIm9iamVjdFwifHx0eXBlb2YgdD09XCJmdW5jdGlvblwiKWZvcihsZXQgbyBvZiBoUyh0KSkhbVMuY2FsbChlLG8pJiZvIT09ciYmWXUoZSxvLHtnZXQ6KCk9PnRbb10sZW51bWVyYWJsZTohKG49ZFModCxvKSl8fG4uZW51bWVyYWJsZX0pO3JldHVybiBlfSxnUz0oZSx0LHIpPT4ocj1lIT1udWxsP19TKE9TKGUpKTp7fSxTUyh0fHwhZXx8IWUuX19lc01vZHVsZT9ZdShyLFwiZGVmYXVsdFwiLHt2YWx1ZTplLGVudW1lcmFibGU6ITB9KTpyLGUpKSxBUz1FdChlPT57dmFyIHQ9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIuc3BsaXQoXCJcIik7ZS5lbmNvZGU9ZnVuY3Rpb24ocil7aWYoMDw9ciYmcjx0Lmxlbmd0aClyZXR1cm4gdFtyXTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIityKX0sZS5kZWNvZGU9ZnVuY3Rpb24ocil7dmFyIG49NjUsbz05MCxpPTk3LHM9MTIyLGE9NDgsYz01Nyx1PTQzLFI9NDcsZj0yNixwPTUyO3JldHVybiBuPD1yJiZyPD1vP3ItbjppPD1yJiZyPD1zP3ItaStmOmE8PXImJnI8PWM/ci1hK3A6cj09dT82MjpyPT1SPzYzOi0xfX0pLGp1PUV0KGU9Pnt2YXIgdD1BUygpLHI9NSxuPTE8PHIsbz1uLTEsaT1uO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGM8MD8oLWM8PDEpKzE6KGM8PDEpKzB9ZnVuY3Rpb24gYShjKXt2YXIgdT0oYyYxKT09PTEsUj1jPj4xO3JldHVybiB1Py1SOlJ9ZS5lbmNvZGU9ZnVuY3Rpb24oYyl7dmFyIHU9XCJcIixSLGY9cyhjKTtkbyBSPWYmbyxmPj4+PXIsZj4wJiYoUnw9aSksdSs9dC5lbmNvZGUoUik7d2hpbGUoZj4wKTtyZXR1cm4gdX0sZS5kZWNvZGU9ZnVuY3Rpb24oYyx1LFIpe3ZhciBmPWMubGVuZ3RoLHA9MCxsPTAsXyxFO2Rve2lmKHU+PWYpdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO2lmKEU9dC5kZWNvZGUoYy5jaGFyQ29kZUF0KHUrKykpLEU9PT0tMSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIrYy5jaGFyQXQodS0xKSk7Xz0hIShFJmkpLEUmPW8scD1wKyhFPDxsKSxsKz1yfXdoaWxlKF8pO1IudmFsdWU9YShwKSxSLnJlc3Q9dX19KSxtbj1FdChlPT57ZnVuY3Rpb24gdChPLG0sTil7aWYobSBpbiBPKXJldHVybiBPW21dO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0zKXJldHVybiBOO3Rocm93IG5ldyBFcnJvcignXCInK20rJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyl9ZS5nZXRBcmc9dDt2YXIgcj0vXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Li1dKikoPzo6KFxcZCspKT8oLiopJC8sbj0vXmRhdGE6LitcXCwuKyQvO2Z1bmN0aW9uIG8oTyl7dmFyIG09Ty5tYXRjaChyKTtyZXR1cm4gbT97c2NoZW1lOm1bMV0sYXV0aDptWzJdLGhvc3Q6bVszXSxwb3J0Om1bNF0scGF0aDptWzVdfTpudWxsfWUudXJsUGFyc2U9bztmdW5jdGlvbiBpKE8pe3ZhciBtPVwiXCI7cmV0dXJuIE8uc2NoZW1lJiYobSs9Ty5zY2hlbWUrXCI6XCIpLG0rPVwiLy9cIixPLmF1dGgmJihtKz1PLmF1dGgrXCJAXCIpLE8uaG9zdCYmKG0rPU8uaG9zdCksTy5wb3J0JiYobSs9XCI6XCIrTy5wb3J0KSxPLnBhdGgmJihtKz1PLnBhdGgpLG19ZS51cmxHZW5lcmF0ZT1pO2Z1bmN0aW9uIHMoTyl7dmFyIG09TyxOPW8oTyk7aWYoTil7aWYoIU4ucGF0aClyZXR1cm4gTzttPU4ucGF0aH1mb3IodmFyIEk9ZS5pc0Fic29sdXRlKG0pLGI9bS5zcGxpdCgvXFwvKy8pLEwsdj0wLHk9Yi5sZW5ndGgtMTt5Pj0wO3ktLSlMPWJbeV0sTD09PVwiLlwiP2Iuc3BsaWNlKHksMSk6TD09PVwiLi5cIj92Kys6dj4wJiYoTD09PVwiXCI/KGIuc3BsaWNlKHkrMSx2KSx2PTApOihiLnNwbGljZSh5LDIpLHYtLSkpO3JldHVybiBtPWIuam9pbihcIi9cIiksbT09PVwiXCImJihtPUk/XCIvXCI6XCIuXCIpLE4/KE4ucGF0aD1tLGkoTikpOm19ZS5ub3JtYWxpemU9cztmdW5jdGlvbiBhKE8sbSl7Tz09PVwiXCImJihPPVwiLlwiKSxtPT09XCJcIiYmKG09XCIuXCIpO3ZhciBOPW8obSksST1vKE8pO2lmKEkmJihPPUkucGF0aHx8XCIvXCIpLE4mJiFOLnNjaGVtZSlyZXR1cm4gSSYmKE4uc2NoZW1lPUkuc2NoZW1lKSxpKE4pO2lmKE58fG0ubWF0Y2gobikpcmV0dXJuIG07aWYoSSYmIUkuaG9zdCYmIUkucGF0aClyZXR1cm4gSS5ob3N0PW0saShJKTt2YXIgYj1tLmNoYXJBdCgwKT09PVwiL1wiP206cyhPLnJlcGxhY2UoL1xcLyskLyxcIlwiKStcIi9cIittKTtyZXR1cm4gST8oSS5wYXRoPWIsaShJKSk6Yn1lLmpvaW49YSxlLmlzQWJzb2x1dGU9ZnVuY3Rpb24oTyl7cmV0dXJuIE8uY2hhckF0KDApPT09XCIvXCJ8fHIudGVzdChPKX07ZnVuY3Rpb24gYyhPLG0pe089PT1cIlwiJiYoTz1cIi5cIiksTz1PLnJlcGxhY2UoL1xcLyQvLFwiXCIpO2Zvcih2YXIgTj0wO20uaW5kZXhPZihPK1wiL1wiKSE9PTA7KXt2YXIgST1PLmxhc3RJbmRleE9mKFwiL1wiKTtpZihJPDB8fChPPU8uc2xpY2UoMCxJKSxPLm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSlyZXR1cm4gbTsrK059cmV0dXJuIEFycmF5KE4rMSkuam9pbihcIi4uL1wiKSttLnN1YnN0cihPLmxlbmd0aCsxKX1lLnJlbGF0aXZlPWM7dmFyIHU9ZnVuY3Rpb24oKXt2YXIgTz1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiEoXCJfX3Byb3RvX19cImluIE8pfSgpO2Z1bmN0aW9uIFIoTyl7cmV0dXJuIE99ZnVuY3Rpb24gZihPKXtyZXR1cm4gbChPKT9cIiRcIitPOk99ZS50b1NldFN0cmluZz11P1I6ZjtmdW5jdGlvbiBwKE8pe3JldHVybiBsKE8pP08uc2xpY2UoMSk6T31lLmZyb21TZXRTdHJpbmc9dT9SOnA7ZnVuY3Rpb24gbChPKXtpZighTylyZXR1cm4hMTt2YXIgbT1PLmxlbmd0aDtpZihtPDl8fE8uY2hhckNvZGVBdChtLTEpIT09OTV8fE8uY2hhckNvZGVBdChtLTIpIT09OTV8fE8uY2hhckNvZGVBdChtLTMpIT09MTExfHxPLmNoYXJDb2RlQXQobS00KSE9PTExNnx8Ty5jaGFyQ29kZUF0KG0tNSkhPT0xMTF8fE8uY2hhckNvZGVBdChtLTYpIT09MTE0fHxPLmNoYXJDb2RlQXQobS03KSE9PTExMnx8Ty5jaGFyQ29kZUF0KG0tOCkhPT05NXx8Ty5jaGFyQ29kZUF0KG0tOSkhPT05NSlyZXR1cm4hMTtmb3IodmFyIE49bS0xMDtOPj0wO04tLSlpZihPLmNoYXJDb2RlQXQoTikhPT0zNilyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBfKE8sbSxOKXt2YXIgST1oKE8uc291cmNlLG0uc291cmNlKTtyZXR1cm4gSSE9PTB8fChJPU8ub3JpZ2luYWxMaW5lLW0ub3JpZ2luYWxMaW5lLEkhPT0wKXx8KEk9Ty5vcmlnaW5hbENvbHVtbi1tLm9yaWdpbmFsQ29sdW1uLEkhPT0wfHxOKXx8KEk9Ty5nZW5lcmF0ZWRDb2x1bW4tbS5nZW5lcmF0ZWRDb2x1bW4sSSE9PTApfHwoST1PLmdlbmVyYXRlZExpbmUtbS5nZW5lcmF0ZWRMaW5lLEkhPT0wKT9JOmgoTy5uYW1lLG0ubmFtZSl9ZS5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucz1fO2Z1bmN0aW9uIEUoTyxtLE4pe3ZhciBJPU8uZ2VuZXJhdGVkTGluZS1tLmdlbmVyYXRlZExpbmU7cmV0dXJuIEkhPT0wfHwoST1PLmdlbmVyYXRlZENvbHVtbi1tLmdlbmVyYXRlZENvbHVtbixJIT09MHx8Til8fChJPWgoTy5zb3VyY2UsbS5zb3VyY2UpLEkhPT0wKXx8KEk9Ty5vcmlnaW5hbExpbmUtbS5vcmlnaW5hbExpbmUsSSE9PTApfHwoST1PLm9yaWdpbmFsQ29sdW1uLW0ub3JpZ2luYWxDb2x1bW4sSSE9PTApP0k6aChPLm5hbWUsbS5uYW1lKX1lLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkPUU7ZnVuY3Rpb24gaChPLG0pe3JldHVybiBPPT09bT8wOk89PT1udWxsPzE6bT09PW51bGw/LTE6Tz5tPzE6LTF9ZnVuY3Rpb24gUyhPLG0pe3ZhciBOPU8uZ2VuZXJhdGVkTGluZS1tLmdlbmVyYXRlZExpbmU7cmV0dXJuIE4hPT0wfHwoTj1PLmdlbmVyYXRlZENvbHVtbi1tLmdlbmVyYXRlZENvbHVtbixOIT09MCl8fChOPWgoTy5zb3VyY2UsbS5zb3VyY2UpLE4hPT0wKXx8KE49Ty5vcmlnaW5hbExpbmUtbS5vcmlnaW5hbExpbmUsTiE9PTApfHwoTj1PLm9yaWdpbmFsQ29sdW1uLW0ub3JpZ2luYWxDb2x1bW4sTiE9PTApP046aChPLm5hbWUsbS5uYW1lKX1lLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkPVM7ZnVuY3Rpb24gZChPKXtyZXR1cm4gSlNPTi5wYXJzZShPLnJlcGxhY2UoL15cXCldfSdbXlxcbl0qXFxuLyxcIlwiKSl9ZS5wYXJzZVNvdXJjZU1hcElucHV0PWQ7ZnVuY3Rpb24gZyhPLG0sTil7aWYobT1tfHxcIlwiLE8mJihPW08ubGVuZ3RoLTFdIT09XCIvXCImJm1bMF0hPT1cIi9cIiYmKE8rPVwiL1wiKSxtPU8rbSksTil7dmFyIEk9byhOKTtpZighSSl0aHJvdyBuZXcgRXJyb3IoXCJzb3VyY2VNYXBVUkwgY291bGQgbm90IGJlIHBhcnNlZFwiKTtpZihJLnBhdGgpe3ZhciBiPUkucGF0aC5sYXN0SW5kZXhPZihcIi9cIik7Yj49MCYmKEkucGF0aD1JLnBhdGguc3Vic3RyaW5nKDAsYisxKSl9bT1hKGkoSSksbSl9cmV0dXJuIHMobSl9ZS5jb21wdXRlU291cmNlVVJMPWd9KSxLdT1FdChlPT57dmFyIHQ9bW4oKSxyPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbj10eXBlb2YgTWFwPFwidVwiO2Z1bmN0aW9uIG8oKXt0aGlzLl9hcnJheT1bXSx0aGlzLl9zZXQ9bj9uZXcgTWFwOk9iamVjdC5jcmVhdGUobnVsbCl9by5mcm9tQXJyYXk9ZnVuY3Rpb24oaSxzKXtmb3IodmFyIGE9bmV3IG8sYz0wLHU9aS5sZW5ndGg7Yzx1O2MrKylhLmFkZChpW2NdLHMpO3JldHVybiBhfSxvLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIG4/dGhpcy5fc2V0LnNpemU6T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGh9LG8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihpLHMpe3ZhciBhPW4/aTp0LnRvU2V0U3RyaW5nKGkpLGM9bj90aGlzLmhhcyhpKTpyLmNhbGwodGhpcy5fc2V0LGEpLHU9dGhpcy5fYXJyYXkubGVuZ3RoOyghY3x8cykmJnRoaXMuX2FycmF5LnB1c2goaSksY3x8KG4/dGhpcy5fc2V0LnNldChpLHUpOnRoaXMuX3NldFthXT11KX0sby5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGkpe2lmKG4pcmV0dXJuIHRoaXMuX3NldC5oYXMoaSk7dmFyIHM9dC50b1NldFN0cmluZyhpKTtyZXR1cm4gci5jYWxsKHRoaXMuX3NldCxzKX0sby5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihpKXtpZihuKXt2YXIgcz10aGlzLl9zZXQuZ2V0KGkpO2lmKHM+PTApcmV0dXJuIHN9ZWxzZXt2YXIgYT10LnRvU2V0U3RyaW5nKGkpO2lmKHIuY2FsbCh0aGlzLl9zZXQsYSkpcmV0dXJuIHRoaXMuX3NldFthXX10aHJvdyBuZXcgRXJyb3IoJ1wiJytpKydcIiBpcyBub3QgaW4gdGhlIHNldC4nKX0sby5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24oaSl7aWYoaT49MCYmaTx0aGlzLl9hcnJheS5sZW5ndGgpcmV0dXJuIHRoaXMuX2FycmF5W2ldO3Rocm93IG5ldyBFcnJvcihcIk5vIGVsZW1lbnQgaW5kZXhlZCBieSBcIitpKX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheS5zbGljZSgpfSxlLkFycmF5U2V0PW99KSx4Uz1FdChlPT57dmFyIHQ9bW4oKTtmdW5jdGlvbiByKG8saSl7dmFyIHM9by5nZW5lcmF0ZWRMaW5lLGE9aS5nZW5lcmF0ZWRMaW5lLGM9by5nZW5lcmF0ZWRDb2x1bW4sdT1pLmdlbmVyYXRlZENvbHVtbjtyZXR1cm4gYT5zfHxhPT1zJiZ1Pj1jfHx0LmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG8saSk8PTB9ZnVuY3Rpb24gbigpe3RoaXMuX2FycmF5PVtdLHRoaXMuX3NvcnRlZD0hMCx0aGlzLl9sYXN0PXtnZW5lcmF0ZWRMaW5lOi0xLGdlbmVyYXRlZENvbHVtbjowfX1uLnByb3RvdHlwZS51bnNvcnRlZEZvckVhY2g9ZnVuY3Rpb24obyxpKXt0aGlzLl9hcnJheS5mb3JFYWNoKG8saSl9LG4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihvKXtyKHRoaXMuX2xhc3Qsbyk/KHRoaXMuX2xhc3Q9byx0aGlzLl9hcnJheS5wdXNoKG8pKToodGhpcy5fc29ydGVkPSExLHRoaXMuX2FycmF5LnB1c2gobykpfSxuLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvcnRlZHx8KHRoaXMuX2FycmF5LnNvcnQodC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCksdGhpcy5fc29ydGVkPSEwKSx0aGlzLl9hcnJheX0sZS5NYXBwaW5nTGlzdD1ufSksWHU9RXQoZT0+e3ZhciB0PWp1KCkscj1tbigpLG49S3UoKS5BcnJheVNldCxvPXhTKCkuTWFwcGluZ0xpc3Q7ZnVuY3Rpb24gaShzKXtzfHwocz17fSksdGhpcy5fZmlsZT1yLmdldEFyZyhzLFwiZmlsZVwiLG51bGwpLHRoaXMuX3NvdXJjZVJvb3Q9ci5nZXRBcmcocyxcInNvdXJjZVJvb3RcIixudWxsKSx0aGlzLl9za2lwVmFsaWRhdGlvbj1yLmdldEFyZyhzLFwic2tpcFZhbGlkYXRpb25cIiwhMSksdGhpcy5fc291cmNlcz1uZXcgbix0aGlzLl9uYW1lcz1uZXcgbix0aGlzLl9tYXBwaW5ncz1uZXcgbyx0aGlzLl9zb3VyY2VzQ29udGVudHM9bnVsbH1pLnByb3RvdHlwZS5fdmVyc2lvbj0zLGkuZnJvbVNvdXJjZU1hcD1mdW5jdGlvbihzKXt2YXIgYT1zLnNvdXJjZVJvb3QsYz1uZXcgaSh7ZmlsZTpzLmZpbGUsc291cmNlUm9vdDphfSk7cmV0dXJuIHMuZWFjaE1hcHBpbmcoZnVuY3Rpb24odSl7dmFyIFI9e2dlbmVyYXRlZDp7bGluZTp1LmdlbmVyYXRlZExpbmUsY29sdW1uOnUuZ2VuZXJhdGVkQ29sdW1ufX07dS5zb3VyY2UhPW51bGwmJihSLnNvdXJjZT11LnNvdXJjZSxhIT1udWxsJiYoUi5zb3VyY2U9ci5yZWxhdGl2ZShhLFIuc291cmNlKSksUi5vcmlnaW5hbD17bGluZTp1Lm9yaWdpbmFsTGluZSxjb2x1bW46dS5vcmlnaW5hbENvbHVtbn0sdS5uYW1lIT1udWxsJiYoUi5uYW1lPXUubmFtZSkpLGMuYWRkTWFwcGluZyhSKX0pLHMuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uKHUpe3ZhciBSPXU7YSE9PW51bGwmJihSPXIucmVsYXRpdmUoYSx1KSksYy5fc291cmNlcy5oYXMoUil8fGMuX3NvdXJjZXMuYWRkKFIpO3ZhciBmPXMuc291cmNlQ29udGVudEZvcih1KTtmIT1udWxsJiZjLnNldFNvdXJjZUNvbnRlbnQodSxmKX0pLGN9LGkucHJvdG90eXBlLmFkZE1hcHBpbmc9ZnVuY3Rpb24ocyl7dmFyIGE9ci5nZXRBcmcocyxcImdlbmVyYXRlZFwiKSxjPXIuZ2V0QXJnKHMsXCJvcmlnaW5hbFwiLG51bGwpLHU9ci5nZXRBcmcocyxcInNvdXJjZVwiLG51bGwpLFI9ci5nZXRBcmcocyxcIm5hbWVcIixudWxsKTt0aGlzLl9za2lwVmFsaWRhdGlvbnx8dGhpcy5fdmFsaWRhdGVNYXBwaW5nKGEsYyx1LFIpLHUhPW51bGwmJih1PVN0cmluZyh1KSx0aGlzLl9zb3VyY2VzLmhhcyh1KXx8dGhpcy5fc291cmNlcy5hZGQodSkpLFIhPW51bGwmJihSPVN0cmluZyhSKSx0aGlzLl9uYW1lcy5oYXMoUil8fHRoaXMuX25hbWVzLmFkZChSKSksdGhpcy5fbWFwcGluZ3MuYWRkKHtnZW5lcmF0ZWRMaW5lOmEubGluZSxnZW5lcmF0ZWRDb2x1bW46YS5jb2x1bW4sb3JpZ2luYWxMaW5lOmMhPW51bGwmJmMubGluZSxvcmlnaW5hbENvbHVtbjpjIT1udWxsJiZjLmNvbHVtbixzb3VyY2U6dSxuYW1lOlJ9KX0saS5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudD1mdW5jdGlvbihzLGEpe3ZhciBjPXM7dGhpcy5fc291cmNlUm9vdCE9bnVsbCYmKGM9ci5yZWxhdGl2ZSh0aGlzLl9zb3VyY2VSb290LGMpKSxhIT1udWxsPyh0aGlzLl9zb3VyY2VzQ29udGVudHN8fCh0aGlzLl9zb3VyY2VzQ29udGVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5fc291cmNlc0NvbnRlbnRzW3IudG9TZXRTdHJpbmcoYyldPWEpOnRoaXMuX3NvdXJjZXNDb250ZW50cyYmKGRlbGV0ZSB0aGlzLl9zb3VyY2VzQ29udGVudHNbci50b1NldFN0cmluZyhjKV0sT2JqZWN0LmtleXModGhpcy5fc291cmNlc0NvbnRlbnRzKS5sZW5ndGg9PT0wJiYodGhpcy5fc291cmNlc0NvbnRlbnRzPW51bGwpKX0saS5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXA9ZnVuY3Rpb24ocyxhLGMpe3ZhciB1PWE7aWYoYT09bnVsbCl7aWYocy5maWxlPT1udWxsKXRocm93IG5ldyBFcnJvcihgU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCByZXF1aXJlcyBlaXRoZXIgYW4gZXhwbGljaXQgc291cmNlIGZpbGUsIG9yIHRoZSBzb3VyY2UgbWFwJ3MgXCJmaWxlXCIgcHJvcGVydHkuIEJvdGggd2VyZSBvbWl0dGVkLmApO3U9cy5maWxlfXZhciBSPXRoaXMuX3NvdXJjZVJvb3Q7UiE9bnVsbCYmKHU9ci5yZWxhdGl2ZShSLHUpKTt2YXIgZj1uZXcgbixwPW5ldyBuO3RoaXMuX21hcHBpbmdzLnVuc29ydGVkRm9yRWFjaChmdW5jdGlvbihsKXtpZihsLnNvdXJjZT09PXUmJmwub3JpZ2luYWxMaW5lIT1udWxsKXt2YXIgXz1zLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe2xpbmU6bC5vcmlnaW5hbExpbmUsY29sdW1uOmwub3JpZ2luYWxDb2x1bW59KTtfLnNvdXJjZSE9bnVsbCYmKGwuc291cmNlPV8uc291cmNlLGMhPW51bGwmJihsLnNvdXJjZT1yLmpvaW4oYyxsLnNvdXJjZSkpLFIhPW51bGwmJihsLnNvdXJjZT1yLnJlbGF0aXZlKFIsbC5zb3VyY2UpKSxsLm9yaWdpbmFsTGluZT1fLmxpbmUsbC5vcmlnaW5hbENvbHVtbj1fLmNvbHVtbixfLm5hbWUhPW51bGwmJihsLm5hbWU9Xy5uYW1lKSl9dmFyIEU9bC5zb3VyY2U7RSE9bnVsbCYmIWYuaGFzKEUpJiZmLmFkZChFKTt2YXIgaD1sLm5hbWU7aCE9bnVsbCYmIXAuaGFzKGgpJiZwLmFkZChoKX0sdGhpcyksdGhpcy5fc291cmNlcz1mLHRoaXMuX25hbWVzPXAscy5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIF89cy5zb3VyY2VDb250ZW50Rm9yKGwpO18hPW51bGwmJihjIT1udWxsJiYobD1yLmpvaW4oYyxsKSksUiE9bnVsbCYmKGw9ci5yZWxhdGl2ZShSLGwpKSx0aGlzLnNldFNvdXJjZUNvbnRlbnQobCxfKSl9LHRoaXMpfSxpLnByb3RvdHlwZS5fdmFsaWRhdGVNYXBwaW5nPWZ1bmN0aW9uKHMsYSxjLHUpe2lmKGEmJnR5cGVvZiBhLmxpbmUhPVwibnVtYmVyXCImJnR5cGVvZiBhLmNvbHVtbiE9XCJudW1iZXJcIil0aHJvdyBuZXcgRXJyb3IoXCJvcmlnaW5hbC5saW5lIGFuZCBvcmlnaW5hbC5jb2x1bW4gYXJlIG5vdCBudW1iZXJzIC0tIHlvdSBwcm9iYWJseSBtZWFudCB0byBvbWl0IHRoZSBvcmlnaW5hbCBtYXBwaW5nIGVudGlyZWx5IGFuZCBvbmx5IG1hcCB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uLiBJZiBzbywgcGFzcyBudWxsIGZvciB0aGUgb3JpZ2luYWwgbWFwcGluZyBpbnN0ZWFkIG9mIGFuIG9iamVjdCB3aXRoIGVtcHR5IG9yIG51bGwgdmFsdWVzLlwiKTtpZighKHMmJlwibGluZVwiaW4gcyYmXCJjb2x1bW5cImluIHMmJnMubGluZT4wJiZzLmNvbHVtbj49MCYmIWEmJiFjJiYhdSkpe2lmKHMmJlwibGluZVwiaW4gcyYmXCJjb2x1bW5cImluIHMmJmEmJlwibGluZVwiaW4gYSYmXCJjb2x1bW5cImluIGEmJnMubGluZT4wJiZzLmNvbHVtbj49MCYmYS5saW5lPjAmJmEuY29sdW1uPj0wJiZjKXJldHVybjt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIG1hcHBpbmc6IFwiK0pTT04uc3RyaW5naWZ5KHtnZW5lcmF0ZWQ6cyxzb3VyY2U6YyxvcmlnaW5hbDphLG5hbWU6dX0pKX19LGkucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncz1mdW5jdGlvbigpe2Zvcih2YXIgcz0wLGE9MSxjPTAsdT0wLFI9MCxmPTAscD1cIlwiLGwsXyxFLGgsUz10aGlzLl9tYXBwaW5ncy50b0FycmF5KCksZD0wLGc9Uy5sZW5ndGg7ZDxnO2QrKyl7aWYoXz1TW2RdLGw9XCJcIixfLmdlbmVyYXRlZExpbmUhPT1hKWZvcihzPTA7Xy5nZW5lcmF0ZWRMaW5lIT09YTspbCs9XCI7XCIsYSsrO2Vsc2UgaWYoZD4wKXtpZighci5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChfLFNbZC0xXSkpY29udGludWU7bCs9XCIsXCJ9bCs9dC5lbmNvZGUoXy5nZW5lcmF0ZWRDb2x1bW4tcykscz1fLmdlbmVyYXRlZENvbHVtbixfLnNvdXJjZSE9bnVsbCYmKGg9dGhpcy5fc291cmNlcy5pbmRleE9mKF8uc291cmNlKSxsKz10LmVuY29kZShoLWYpLGY9aCxsKz10LmVuY29kZShfLm9yaWdpbmFsTGluZS0xLXUpLHU9Xy5vcmlnaW5hbExpbmUtMSxsKz10LmVuY29kZShfLm9yaWdpbmFsQ29sdW1uLWMpLGM9Xy5vcmlnaW5hbENvbHVtbixfLm5hbWUhPW51bGwmJihFPXRoaXMuX25hbWVzLmluZGV4T2YoXy5uYW1lKSxsKz10LmVuY29kZShFLVIpLFI9RSkpLHArPWx9cmV0dXJuIHB9LGkucHJvdG90eXBlLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50PWZ1bmN0aW9uKHMsYSl7cmV0dXJuIHMubWFwKGZ1bmN0aW9uKGMpe2lmKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpcmV0dXJuIG51bGw7YSE9bnVsbCYmKGM9ci5yZWxhdGl2ZShhLGMpKTt2YXIgdT1yLnRvU2V0U3RyaW5nKGMpO3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLHUpP3RoaXMuX3NvdXJjZXNDb250ZW50c1t1XTpudWxsfSx0aGlzKX0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIHM9e3ZlcnNpb246dGhpcy5fdmVyc2lvbixzb3VyY2VzOnRoaXMuX3NvdXJjZXMudG9BcnJheSgpLG5hbWVzOnRoaXMuX25hbWVzLnRvQXJyYXkoKSxtYXBwaW5nczp0aGlzLl9zZXJpYWxpemVNYXBwaW5ncygpfTtyZXR1cm4gdGhpcy5fZmlsZSE9bnVsbCYmKHMuZmlsZT10aGlzLl9maWxlKSx0aGlzLl9zb3VyY2VSb290IT1udWxsJiYocy5zb3VyY2VSb290PXRoaXMuX3NvdXJjZVJvb3QpLHRoaXMuX3NvdXJjZXNDb250ZW50cyYmKHMuc291cmNlc0NvbnRlbnQ9dGhpcy5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzLnNvdXJjZXMscy5zb3VyY2VSb290KSksc30saS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pTT04oKSl9LGUuU291cmNlTWFwR2VuZXJhdG9yPWl9KSxOUz1FdChlPT57ZS5HUkVBVEVTVF9MT1dFUl9CT1VORD0xLGUuTEVBU1RfVVBQRVJfQk9VTkQ9MjtmdW5jdGlvbiB0KHIsbixvLGkscyxhKXt2YXIgYz1NYXRoLmZsb29yKChuLXIpLzIpK3IsdT1zKG8saVtjXSwhMCk7cmV0dXJuIHU9PT0wP2M6dT4wP24tYz4xP3QoYyxuLG8saSxzLGEpOmE9PWUuTEVBU1RfVVBQRVJfQk9VTkQ/bjxpLmxlbmd0aD9uOi0xOmM6Yy1yPjE/dChyLGMsbyxpLHMsYSk6YT09ZS5MRUFTVF9VUFBFUl9CT1VORD9jOnI8MD8tMTpyfWUuc2VhcmNoPWZ1bmN0aW9uKHIsbixvLGkpe2lmKG4ubGVuZ3RoPT09MClyZXR1cm4tMTt2YXIgcz10KC0xLG4ubGVuZ3RoLHIsbixvLGl8fGUuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO2lmKHM8MClyZXR1cm4tMTtmb3IoO3MtMT49MCYmbyhuW3NdLG5bcy0xXSwhMCk9PT0wOyktLXM7cmV0dXJuIHN9fSksSVM9RXQoZT0+e2Z1bmN0aW9uIHQobyxpLHMpe3ZhciBhPW9baV07b1tpXT1vW3NdLG9bc109YX1mdW5jdGlvbiByKG8saSl7cmV0dXJuIE1hdGgucm91bmQobytNYXRoLnJhbmRvbSgpKihpLW8pKX1mdW5jdGlvbiBuKG8saSxzLGEpe2lmKHM8YSl7dmFyIGM9cihzLGEpLHU9cy0xO3QobyxjLGEpO2Zvcih2YXIgUj1vW2FdLGY9cztmPGE7ZisrKWkob1tmXSxSKTw9MCYmKHUrPTEsdChvLHUsZikpO3Qobyx1KzEsZik7dmFyIHA9dSsxO24obyxpLHMscC0xKSxuKG8saSxwKzEsYSl9fWUucXVpY2tTb3J0PWZ1bmN0aW9uKG8saSl7bihvLGksMCxvLmxlbmd0aC0xKX19KSx5Uz1FdChlPT57dmFyIHQ9bW4oKSxyPU5TKCksbj1LdSgpLkFycmF5U2V0LG89anUoKSxpPUlTKCkucXVpY2tTb3J0O2Z1bmN0aW9uIHMoUixmKXt2YXIgcD1SO3JldHVybiB0eXBlb2YgUj09XCJzdHJpbmdcIiYmKHA9dC5wYXJzZVNvdXJjZU1hcElucHV0KFIpKSxwLnNlY3Rpb25zIT1udWxsP25ldyB1KHAsZik6bmV3IGEocCxmKX1zLmZyb21Tb3VyY2VNYXA9ZnVuY3Rpb24oUixmKXtyZXR1cm4gYS5mcm9tU291cmNlTWFwKFIsZil9LHMucHJvdG90eXBlLl92ZXJzaW9uPTMscy5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncz1udWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLnByb3RvdHlwZSxcIl9nZW5lcmF0ZWRNYXBwaW5nc1wiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzfHx0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLHRoaXMuc291cmNlUm9vdCksdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzfX0pLHMucHJvdG90eXBlLl9fb3JpZ2luYWxNYXBwaW5ncz1udWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLnByb3RvdHlwZSxcIl9vcmlnaW5hbE1hcHBpbmdzXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc3x8dGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncyx0aGlzLnNvdXJjZVJvb3QpLHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzfX0pLHMucHJvdG90eXBlLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yPWZ1bmN0aW9uKFIsZil7dmFyIHA9Ui5jaGFyQXQoZik7cmV0dXJuIHA9PT1cIjtcInx8cD09PVwiLFwifSxzLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihSLGYpe3Rocm93IG5ldyBFcnJvcihcIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgX3BhcnNlTWFwcGluZ3NcIil9LHMuR0VORVJBVEVEX09SREVSPTEscy5PUklHSU5BTF9PUkRFUj0yLHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQ9MSxzLkxFQVNUX1VQUEVSX0JPVU5EPTIscy5wcm90b3R5cGUuZWFjaE1hcHBpbmc9ZnVuY3Rpb24oUixmLHApe3ZhciBsPWZ8fG51bGwsXz1wfHxzLkdFTkVSQVRFRF9PUkRFUixFO3N3aXRjaChfKXtjYXNlIHMuR0VORVJBVEVEX09SREVSOkU9dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7YnJlYWs7Y2FzZSBzLk9SSUdJTkFMX09SREVSOkU9dGhpcy5fb3JpZ2luYWxNYXBwaW5nczticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3JkZXIgb2YgaXRlcmF0aW9uLlwiKX12YXIgaD10aGlzLnNvdXJjZVJvb3Q7RS5tYXAoZnVuY3Rpb24oUyl7dmFyIGQ9Uy5zb3VyY2U9PT1udWxsP251bGw6dGhpcy5fc291cmNlcy5hdChTLnNvdXJjZSk7cmV0dXJuIGQ9dC5jb21wdXRlU291cmNlVVJMKGgsZCx0aGlzLl9zb3VyY2VNYXBVUkwpLHtzb3VyY2U6ZCxnZW5lcmF0ZWRMaW5lOlMuZ2VuZXJhdGVkTGluZSxnZW5lcmF0ZWRDb2x1bW46Uy5nZW5lcmF0ZWRDb2x1bW4sb3JpZ2luYWxMaW5lOlMub3JpZ2luYWxMaW5lLG9yaWdpbmFsQ29sdW1uOlMub3JpZ2luYWxDb2x1bW4sbmFtZTpTLm5hbWU9PT1udWxsP251bGw6dGhpcy5fbmFtZXMuYXQoUy5uYW1lKX19LHRoaXMpLmZvckVhY2goUixsKX0scy5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yPWZ1bmN0aW9uKFIpe3ZhciBmPXQuZ2V0QXJnKFIsXCJsaW5lXCIpLHA9e3NvdXJjZTp0LmdldEFyZyhSLFwic291cmNlXCIpLG9yaWdpbmFsTGluZTpmLG9yaWdpbmFsQ29sdW1uOnQuZ2V0QXJnKFIsXCJjb2x1bW5cIiwwKX07aWYocC5zb3VyY2U9dGhpcy5fZmluZFNvdXJjZUluZGV4KHAuc291cmNlKSxwLnNvdXJjZTwwKXJldHVybltdO3ZhciBsPVtdLF89dGhpcy5fZmluZE1hcHBpbmcocCx0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFwib3JpZ2luYWxMaW5lXCIsXCJvcmlnaW5hbENvbHVtblwiLHQuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsci5MRUFTVF9VUFBFUl9CT1VORCk7aWYoXz49MCl7dmFyIEU9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tfXTtpZihSLmNvbHVtbj09PXZvaWQgMClmb3IodmFyIGg9RS5vcmlnaW5hbExpbmU7RSYmRS5vcmlnaW5hbExpbmU9PT1oOylsLnB1c2goe2xpbmU6dC5nZXRBcmcoRSxcImdlbmVyYXRlZExpbmVcIixudWxsKSxjb2x1bW46dC5nZXRBcmcoRSxcImdlbmVyYXRlZENvbHVtblwiLG51bGwpLGxhc3RDb2x1bW46dC5nZXRBcmcoRSxcImxhc3RHZW5lcmF0ZWRDb2x1bW5cIixudWxsKX0pLEU9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK19dO2Vsc2UgZm9yKHZhciBTPUUub3JpZ2luYWxDb2x1bW47RSYmRS5vcmlnaW5hbExpbmU9PT1mJiZFLm9yaWdpbmFsQ29sdW1uPT1TOylsLnB1c2goe2xpbmU6dC5nZXRBcmcoRSxcImdlbmVyYXRlZExpbmVcIixudWxsKSxjb2x1bW46dC5nZXRBcmcoRSxcImdlbmVyYXRlZENvbHVtblwiLG51bGwpLGxhc3RDb2x1bW46dC5nZXRBcmcoRSxcImxhc3RHZW5lcmF0ZWRDb2x1bW5cIixudWxsKX0pLEU9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK19dfXJldHVybiBsfSxlLlNvdXJjZU1hcENvbnN1bWVyPXM7ZnVuY3Rpb24gYShSLGYpe3ZhciBwPVI7dHlwZW9mIFI9PVwic3RyaW5nXCImJihwPXQucGFyc2VTb3VyY2VNYXBJbnB1dChSKSk7dmFyIGw9dC5nZXRBcmcocCxcInZlcnNpb25cIiksXz10LmdldEFyZyhwLFwic291cmNlc1wiKSxFPXQuZ2V0QXJnKHAsXCJuYW1lc1wiLFtdKSxoPXQuZ2V0QXJnKHAsXCJzb3VyY2VSb290XCIsbnVsbCksUz10LmdldEFyZyhwLFwic291cmNlc0NvbnRlbnRcIixudWxsKSxkPXQuZ2V0QXJnKHAsXCJtYXBwaW5nc1wiKSxnPXQuZ2V0QXJnKHAsXCJmaWxlXCIsbnVsbCk7aWYobCE9dGhpcy5fdmVyc2lvbil0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB2ZXJzaW9uOiBcIitsKTtoJiYoaD10Lm5vcm1hbGl6ZShoKSksXz1fLm1hcChTdHJpbmcpLm1hcCh0Lm5vcm1hbGl6ZSkubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBoJiZ0LmlzQWJzb2x1dGUoaCkmJnQuaXNBYnNvbHV0ZShPKT90LnJlbGF0aXZlKGgsTyk6T30pLHRoaXMuX25hbWVzPW4uZnJvbUFycmF5KEUubWFwKFN0cmluZyksITApLHRoaXMuX3NvdXJjZXM9bi5mcm9tQXJyYXkoXywhMCksdGhpcy5fYWJzb2x1dGVTb3VyY2VzPXRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbihPKXtyZXR1cm4gdC5jb21wdXRlU291cmNlVVJMKGgsTyxmKX0pLHRoaXMuc291cmNlUm9vdD1oLHRoaXMuc291cmNlc0NvbnRlbnQ9Uyx0aGlzLl9tYXBwaW5ncz1kLHRoaXMuX3NvdXJjZU1hcFVSTD1mLHRoaXMuZmlsZT1nfWEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocy5wcm90b3R5cGUpLGEucHJvdG90eXBlLmNvbnN1bWVyPXMsYS5wcm90b3R5cGUuX2ZpbmRTb3VyY2VJbmRleD1mdW5jdGlvbihSKXt2YXIgZj1SO2lmKHRoaXMuc291cmNlUm9vdCE9bnVsbCYmKGY9dC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsZikpLHRoaXMuX3NvdXJjZXMuaGFzKGYpKXJldHVybiB0aGlzLl9zb3VyY2VzLmluZGV4T2YoZik7dmFyIHA7Zm9yKHA9MDtwPHRoaXMuX2Fic29sdXRlU291cmNlcy5sZW5ndGg7KytwKWlmKHRoaXMuX2Fic29sdXRlU291cmNlc1twXT09UilyZXR1cm4gcDtyZXR1cm4tMX0sYS5mcm9tU291cmNlTWFwPWZ1bmN0aW9uKFIsZil7dmFyIHA9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSksbD1wLl9uYW1lcz1uLmZyb21BcnJheShSLl9uYW1lcy50b0FycmF5KCksITApLF89cC5fc291cmNlcz1uLmZyb21BcnJheShSLl9zb3VyY2VzLnRvQXJyYXkoKSwhMCk7cC5zb3VyY2VSb290PVIuX3NvdXJjZVJvb3QscC5zb3VyY2VzQ29udGVudD1SLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHAuX3NvdXJjZXMudG9BcnJheSgpLHAuc291cmNlUm9vdCkscC5maWxlPVIuX2ZpbGUscC5fc291cmNlTWFwVVJMPWYscC5fYWJzb2x1dGVTb3VyY2VzPXAuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbihOKXtyZXR1cm4gdC5jb21wdXRlU291cmNlVVJMKHAuc291cmNlUm9vdCxOLGYpfSk7Zm9yKHZhciBFPVIuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpLGg9cC5fX2dlbmVyYXRlZE1hcHBpbmdzPVtdLFM9cC5fX29yaWdpbmFsTWFwcGluZ3M9W10sZD0wLGc9RS5sZW5ndGg7ZDxnO2QrKyl7dmFyIE89RVtkXSxtPW5ldyBjO20uZ2VuZXJhdGVkTGluZT1PLmdlbmVyYXRlZExpbmUsbS5nZW5lcmF0ZWRDb2x1bW49Ty5nZW5lcmF0ZWRDb2x1bW4sTy5zb3VyY2UmJihtLnNvdXJjZT1fLmluZGV4T2YoTy5zb3VyY2UpLG0ub3JpZ2luYWxMaW5lPU8ub3JpZ2luYWxMaW5lLG0ub3JpZ2luYWxDb2x1bW49Ty5vcmlnaW5hbENvbHVtbixPLm5hbWUmJihtLm5hbWU9bC5pbmRleE9mKE8ubmFtZSkpLFMucHVzaChtKSksaC5wdXNoKG0pfXJldHVybiBpKHAuX19vcmlnaW5hbE1hcHBpbmdzLHQuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpLHB9LGEucHJvdG90eXBlLl92ZXJzaW9uPTMsT2JqZWN0LmRlZmluZVByb3BlcnR5KGEucHJvdG90eXBlLFwic291cmNlc1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWJzb2x1dGVTb3VyY2VzLnNsaWNlKCl9fSk7ZnVuY3Rpb24gYygpe3RoaXMuZ2VuZXJhdGVkTGluZT0wLHRoaXMuZ2VuZXJhdGVkQ29sdW1uPTAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLm9yaWdpbmFsTGluZT1udWxsLHRoaXMub3JpZ2luYWxDb2x1bW49bnVsbCx0aGlzLm5hbWU9bnVsbH1hLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihSLGYpe2Zvcih2YXIgcD0xLGw9MCxfPTAsRT0wLGg9MCxTPTAsZD1SLmxlbmd0aCxnPTAsTz17fSxtPXt9LE49W10sST1bXSxiLEwsdix5LEM7ZzxkOylpZihSLmNoYXJBdChnKT09PVwiO1wiKXArKyxnKyssbD0wO2Vsc2UgaWYoUi5jaGFyQXQoZyk9PT1cIixcIilnKys7ZWxzZXtmb3IoYj1uZXcgYyxiLmdlbmVyYXRlZExpbmU9cCx5PWc7eTxkJiYhdGhpcy5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcihSLHkpO3krKyk7aWYoTD1SLnNsaWNlKGcseSksdj1PW0xdLHYpZys9TC5sZW5ndGg7ZWxzZXtmb3Iodj1bXTtnPHk7KW8uZGVjb2RlKFIsZyxtKSxDPW0udmFsdWUsZz1tLnJlc3Qsdi5wdXNoKEMpO2lmKHYubGVuZ3RoPT09Mil0aHJvdyBuZXcgRXJyb3IoXCJGb3VuZCBhIHNvdXJjZSwgYnV0IG5vIGxpbmUgYW5kIGNvbHVtblwiKTtpZih2Lmxlbmd0aD09PTMpdGhyb3cgbmV3IEVycm9yKFwiRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW5cIik7T1tMXT12fWIuZ2VuZXJhdGVkQ29sdW1uPWwrdlswXSxsPWIuZ2VuZXJhdGVkQ29sdW1uLHYubGVuZ3RoPjEmJihiLnNvdXJjZT1oK3ZbMV0saCs9dlsxXSxiLm9yaWdpbmFsTGluZT1fK3ZbMl0sXz1iLm9yaWdpbmFsTGluZSxiLm9yaWdpbmFsTGluZSs9MSxiLm9yaWdpbmFsQ29sdW1uPUUrdlszXSxFPWIub3JpZ2luYWxDb2x1bW4sdi5sZW5ndGg+NCYmKGIubmFtZT1TK3ZbNF0sUys9dls0XSkpLEkucHVzaChiKSx0eXBlb2YgYi5vcmlnaW5hbExpbmU9PVwibnVtYmVyXCImJk4ucHVzaChiKX1pKEksdC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCksdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzPUksaShOLHQuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpLHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzPU59LGEucHJvdG90eXBlLl9maW5kTWFwcGluZz1mdW5jdGlvbihSLGYscCxsLF8sRSl7aWYoUltwXTw9MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTGluZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgXCIrUltwXSk7aWYoUltsXTwwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgZ290IFwiK1JbbF0pO3JldHVybiByLnNlYXJjaChSLGYsXyxFKX0sYS5wcm90b3R5cGUuY29tcHV0ZUNvbHVtblNwYW5zPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPTA7Ujx0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7KytSKXt2YXIgZj10aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tSXTtpZihSKzE8dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoKXt2YXIgcD10aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tSKzFdO2lmKGYuZ2VuZXJhdGVkTGluZT09PXAuZ2VuZXJhdGVkTGluZSl7Zi5sYXN0R2VuZXJhdGVkQ29sdW1uPXAuZ2VuZXJhdGVkQ29sdW1uLTE7Y29udGludWV9fWYubGFzdEdlbmVyYXRlZENvbHVtbj0xLzB9fSxhLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yPWZ1bmN0aW9uKFIpe3ZhciBmPXtnZW5lcmF0ZWRMaW5lOnQuZ2V0QXJnKFIsXCJsaW5lXCIpLGdlbmVyYXRlZENvbHVtbjp0LmdldEFyZyhSLFwiY29sdW1uXCIpfSxwPXRoaXMuX2ZpbmRNYXBwaW5nKGYsdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXCJnZW5lcmF0ZWRMaW5lXCIsXCJnZW5lcmF0ZWRDb2x1bW5cIix0LmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLHQuZ2V0QXJnKFIsXCJiaWFzXCIscy5HUkVBVEVTVF9MT1dFUl9CT1VORCkpO2lmKHA+PTApe3ZhciBsPXRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW3BdO2lmKGwuZ2VuZXJhdGVkTGluZT09PWYuZ2VuZXJhdGVkTGluZSl7dmFyIF89dC5nZXRBcmcobCxcInNvdXJjZVwiLG51bGwpO18hPT1udWxsJiYoXz10aGlzLl9zb3VyY2VzLmF0KF8pLF89dC5jb21wdXRlU291cmNlVVJMKHRoaXMuc291cmNlUm9vdCxfLHRoaXMuX3NvdXJjZU1hcFVSTCkpO3ZhciBFPXQuZ2V0QXJnKGwsXCJuYW1lXCIsbnVsbCk7cmV0dXJuIEUhPT1udWxsJiYoRT10aGlzLl9uYW1lcy5hdChFKSkse3NvdXJjZTpfLGxpbmU6dC5nZXRBcmcobCxcIm9yaWdpbmFsTGluZVwiLG51bGwpLGNvbHVtbjp0LmdldEFyZyhsLFwib3JpZ2luYWxDb2x1bW5cIixudWxsKSxuYW1lOkV9fX1yZXR1cm57c291cmNlOm51bGwsbGluZTpudWxsLGNvbHVtbjpudWxsLG5hbWU6bnVsbH19LGEucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQ/dGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGg+PXRoaXMuX3NvdXJjZXMuc2l6ZSgpJiYhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKGZ1bmN0aW9uKFIpe3JldHVybiBSPT1udWxsfSk6ITF9LGEucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3I9ZnVuY3Rpb24oUixmKXtpZighdGhpcy5zb3VyY2VzQ29udGVudClyZXR1cm4gbnVsbDt2YXIgcD10aGlzLl9maW5kU291cmNlSW5kZXgoUik7aWYocD49MClyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFtwXTt2YXIgbD1SO3RoaXMuc291cmNlUm9vdCE9bnVsbCYmKGw9dC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsbCkpO3ZhciBfO2lmKHRoaXMuc291cmNlUm9vdCE9bnVsbCYmKF89dC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSl7dmFyIEU9bC5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLFwiXCIpO2lmKF8uc2NoZW1lPT1cImZpbGVcIiYmdGhpcy5fc291cmNlcy5oYXMoRSkpcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKEUpXTtpZigoIV8ucGF0aHx8Xy5wYXRoPT1cIi9cIikmJnRoaXMuX3NvdXJjZXMuaGFzKFwiL1wiK2wpKXJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIitsKV19aWYoZilyZXR1cm4gbnVsbDt0aHJvdyBuZXcgRXJyb3IoJ1wiJytsKydcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKX0sYS5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3I9ZnVuY3Rpb24oUil7dmFyIGY9dC5nZXRBcmcoUixcInNvdXJjZVwiKTtpZihmPXRoaXMuX2ZpbmRTb3VyY2VJbmRleChmKSxmPDApcmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9O3ZhciBwPXtzb3VyY2U6ZixvcmlnaW5hbExpbmU6dC5nZXRBcmcoUixcImxpbmVcIiksb3JpZ2luYWxDb2x1bW46dC5nZXRBcmcoUixcImNvbHVtblwiKX0sbD10aGlzLl9maW5kTWFwcGluZyhwLHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXCJvcmlnaW5hbExpbmVcIixcIm9yaWdpbmFsQ29sdW1uXCIsdC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyx0LmdldEFyZyhSLFwiYmlhc1wiLHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpKTtpZihsPj0wKXt2YXIgXz10aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2xdO2lmKF8uc291cmNlPT09cC5zb3VyY2UpcmV0dXJue2xpbmU6dC5nZXRBcmcoXyxcImdlbmVyYXRlZExpbmVcIixudWxsKSxjb2x1bW46dC5nZXRBcmcoXyxcImdlbmVyYXRlZENvbHVtblwiLG51bGwpLGxhc3RDb2x1bW46dC5nZXRBcmcoXyxcImxhc3RHZW5lcmF0ZWRDb2x1bW5cIixudWxsKX19cmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9fSxlLkJhc2ljU291cmNlTWFwQ29uc3VtZXI9YTtmdW5jdGlvbiB1KFIsZil7dmFyIHA9Ujt0eXBlb2YgUj09XCJzdHJpbmdcIiYmKHA9dC5wYXJzZVNvdXJjZU1hcElucHV0KFIpKTt2YXIgbD10LmdldEFyZyhwLFwidmVyc2lvblwiKSxfPXQuZ2V0QXJnKHAsXCJzZWN0aW9uc1wiKTtpZihsIT10aGlzLl92ZXJzaW9uKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHZlcnNpb246IFwiK2wpO3RoaXMuX3NvdXJjZXM9bmV3IG4sdGhpcy5fbmFtZXM9bmV3IG47dmFyIEU9e2xpbmU6LTEsY29sdW1uOjB9O3RoaXMuX3NlY3Rpb25zPV8ubWFwKGZ1bmN0aW9uKGgpe2lmKGgudXJsKXRocm93IG5ldyBFcnJvcihcIlN1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuXCIpO3ZhciBTPXQuZ2V0QXJnKGgsXCJvZmZzZXRcIiksZD10LmdldEFyZyhTLFwibGluZVwiKSxnPXQuZ2V0QXJnKFMsXCJjb2x1bW5cIik7aWYoZDxFLmxpbmV8fGQ9PT1FLmxpbmUmJmc8RS5jb2x1bW4pdGhyb3cgbmV3IEVycm9yKFwiU2VjdGlvbiBvZmZzZXRzIG11c3QgYmUgb3JkZXJlZCBhbmQgbm9uLW92ZXJsYXBwaW5nLlwiKTtyZXR1cm4gRT1TLHtnZW5lcmF0ZWRPZmZzZXQ6e2dlbmVyYXRlZExpbmU6ZCsxLGdlbmVyYXRlZENvbHVtbjpnKzF9LGNvbnN1bWVyOm5ldyBzKHQuZ2V0QXJnKGgsXCJtYXBcIiksZil9fSl9dS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzLnByb3RvdHlwZSksdS5wcm90b3R5cGUuY29uc3RydWN0b3I9cyx1LnByb3RvdHlwZS5fdmVyc2lvbj0zLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LnByb3RvdHlwZSxcInNvdXJjZXNcIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBSPVtdLGY9MDtmPHRoaXMuX3NlY3Rpb25zLmxlbmd0aDtmKyspZm9yKHZhciBwPTA7cDx0aGlzLl9zZWN0aW9uc1tmXS5jb25zdW1lci5zb3VyY2VzLmxlbmd0aDtwKyspUi5wdXNoKHRoaXMuX3NlY3Rpb25zW2ZdLmNvbnN1bWVyLnNvdXJjZXNbcF0pO3JldHVybiBSfX0pLHUucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3I9ZnVuY3Rpb24oUil7dmFyIGY9e2dlbmVyYXRlZExpbmU6dC5nZXRBcmcoUixcImxpbmVcIiksZ2VuZXJhdGVkQ29sdW1uOnQuZ2V0QXJnKFIsXCJjb2x1bW5cIil9LHA9ci5zZWFyY2goZix0aGlzLl9zZWN0aW9ucyxmdW5jdGlvbihfLEUpe3ZhciBoPV8uZ2VuZXJhdGVkTGluZS1FLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lO3JldHVybiBofHxfLmdlbmVyYXRlZENvbHVtbi1FLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW59KSxsPXRoaXMuX3NlY3Rpb25zW3BdO3JldHVybiBsP2wuY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7bGluZTpmLmdlbmVyYXRlZExpbmUtKGwuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUtMSksY29sdW1uOmYuZ2VuZXJhdGVkQ29sdW1uLShsLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lPT09Zi5nZW5lcmF0ZWRMaW5lP2wuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbi0xOjApLGJpYXM6Ui5iaWFzfSk6e3NvdXJjZTpudWxsLGxpbmU6bnVsbCxjb2x1bW46bnVsbCxuYW1lOm51bGx9fSx1LnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWN0aW9ucy5ldmVyeShmdW5jdGlvbihSKXtyZXR1cm4gUi5jb25zdW1lci5oYXNDb250ZW50c09mQWxsU291cmNlcygpfSl9LHUucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3I9ZnVuY3Rpb24oUixmKXtmb3IodmFyIHA9MDtwPHRoaXMuX3NlY3Rpb25zLmxlbmd0aDtwKyspe3ZhciBsPXRoaXMuX3NlY3Rpb25zW3BdLF89bC5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKFIsITApO2lmKF8pcmV0dXJuIF99aWYoZilyZXR1cm4gbnVsbDt0aHJvdyBuZXcgRXJyb3IoJ1wiJytSKydcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKX0sdS5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3I9ZnVuY3Rpb24oUil7Zm9yKHZhciBmPTA7Zjx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7ZisrKXt2YXIgcD10aGlzLl9zZWN0aW9uc1tmXTtpZihwLmNvbnN1bWVyLl9maW5kU291cmNlSW5kZXgodC5nZXRBcmcoUixcInNvdXJjZVwiKSkhPT0tMSl7dmFyIGw9cC5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihSKTtpZihsKXt2YXIgXz17bGluZTpsLmxpbmUrKHAuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUtMSksY29sdW1uOmwuY29sdW1uKyhwLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lPT09bC5saW5lP3AuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbi0xOjApfTtyZXR1cm4gX319fXJldHVybntsaW5lOm51bGwsY29sdW1uOm51bGx9fSx1LnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbihSLGYpe3RoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncz1bXSx0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncz1bXTtmb3IodmFyIHA9MDtwPHRoaXMuX3NlY3Rpb25zLmxlbmd0aDtwKyspZm9yKHZhciBsPXRoaXMuX3NlY3Rpb25zW3BdLF89bC5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3MsRT0wO0U8Xy5sZW5ndGg7RSsrKXt2YXIgaD1fW0VdLFM9bC5jb25zdW1lci5fc291cmNlcy5hdChoLnNvdXJjZSk7Uz10LmNvbXB1dGVTb3VyY2VVUkwobC5jb25zdW1lci5zb3VyY2VSb290LFMsdGhpcy5fc291cmNlTWFwVVJMKSx0aGlzLl9zb3VyY2VzLmFkZChTKSxTPXRoaXMuX3NvdXJjZXMuaW5kZXhPZihTKTt2YXIgZD1udWxsO2gubmFtZSYmKGQ9bC5jb25zdW1lci5fbmFtZXMuYXQoaC5uYW1lKSx0aGlzLl9uYW1lcy5hZGQoZCksZD10aGlzLl9uYW1lcy5pbmRleE9mKGQpKTt2YXIgZz17c291cmNlOlMsZ2VuZXJhdGVkTGluZTpoLmdlbmVyYXRlZExpbmUrKGwuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUtMSksZ2VuZXJhdGVkQ29sdW1uOmguZ2VuZXJhdGVkQ29sdW1uKyhsLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lPT09aC5nZW5lcmF0ZWRMaW5lP2wuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbi0xOjApLG9yaWdpbmFsTGluZTpoLm9yaWdpbmFsTGluZSxvcmlnaW5hbENvbHVtbjpoLm9yaWdpbmFsQ29sdW1uLG5hbWU6ZH07dGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goZyksdHlwZW9mIGcub3JpZ2luYWxMaW5lPT1cIm51bWJlclwiJiZ0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGcpfWkodGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLHQuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpLGkodGhpcy5fX29yaWdpbmFsTWFwcGluZ3MsdC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyl9LGUuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyPXV9KSxUUz1FdChlPT57dmFyIHQ9WHUoKS5Tb3VyY2VNYXBHZW5lcmF0b3Iscj1tbigpLG49LyhcXHI/XFxuKS8sbz0xMCxpPVwiJCQkaXNTb3VyY2VOb2RlJCQkXCI7ZnVuY3Rpb24gcyhhLGMsdSxSLGYpe3RoaXMuY2hpbGRyZW49W10sdGhpcy5zb3VyY2VDb250ZW50cz17fSx0aGlzLmxpbmU9YT8/bnVsbCx0aGlzLmNvbHVtbj1jPz9udWxsLHRoaXMuc291cmNlPXU/P251bGwsdGhpcy5uYW1lPWY/P251bGwsdGhpc1tpXT0hMCxSIT1udWxsJiZ0aGlzLmFkZChSKX1zLmZyb21TdHJpbmdXaXRoU291cmNlTWFwPWZ1bmN0aW9uKGEsYyx1KXt2YXIgUj1uZXcgcyxmPWEuc3BsaXQobikscD0wLGw9ZnVuY3Rpb24oKXt2YXIgZD1PKCksZz1PKCl8fFwiXCI7cmV0dXJuIGQrZztmdW5jdGlvbiBPKCl7cmV0dXJuIHA8Zi5sZW5ndGg/ZltwKytdOnZvaWQgMH19LF89MSxFPTAsaD1udWxsO3JldHVybiBjLmVhY2hNYXBwaW5nKGZ1bmN0aW9uKGQpe2lmKGghPT1udWxsKWlmKF88ZC5nZW5lcmF0ZWRMaW5lKVMoaCxsKCkpLF8rKyxFPTA7ZWxzZXt2YXIgZz1mW3BdfHxcIlwiLE89Zy5zdWJzdHIoMCxkLmdlbmVyYXRlZENvbHVtbi1FKTtmW3BdPWcuc3Vic3RyKGQuZ2VuZXJhdGVkQ29sdW1uLUUpLEU9ZC5nZW5lcmF0ZWRDb2x1bW4sUyhoLE8pLGg9ZDtyZXR1cm59Zm9yKDtfPGQuZ2VuZXJhdGVkTGluZTspUi5hZGQobCgpKSxfKys7aWYoRTxkLmdlbmVyYXRlZENvbHVtbil7dmFyIGc9ZltwXXx8XCJcIjtSLmFkZChnLnN1YnN0cigwLGQuZ2VuZXJhdGVkQ29sdW1uKSksZltwXT1nLnN1YnN0cihkLmdlbmVyYXRlZENvbHVtbiksRT1kLmdlbmVyYXRlZENvbHVtbn1oPWR9LHRoaXMpLHA8Zi5sZW5ndGgmJihoJiZTKGgsbCgpKSxSLmFkZChmLnNwbGljZShwKS5qb2luKFwiXCIpKSksYy5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIGc9Yy5zb3VyY2VDb250ZW50Rm9yKGQpO2chPW51bGwmJih1IT1udWxsJiYoZD1yLmpvaW4odSxkKSksUi5zZXRTb3VyY2VDb250ZW50KGQsZykpfSksUjtmdW5jdGlvbiBTKGQsZyl7aWYoZD09PW51bGx8fGQuc291cmNlPT09dm9pZCAwKVIuYWRkKGcpO2Vsc2V7dmFyIE89dT9yLmpvaW4odSxkLnNvdXJjZSk6ZC5zb3VyY2U7Ui5hZGQobmV3IHMoZC5vcmlnaW5hbExpbmUsZC5vcmlnaW5hbENvbHVtbixPLGcsZC5uYW1lKSl9fX0scy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe2lmKEFycmF5LmlzQXJyYXkoYSkpYS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3RoaXMuYWRkKGMpfSx0aGlzKTtlbHNlIGlmKGFbaV18fHR5cGVvZiBhPT1cInN0cmluZ1wiKWEmJnRoaXMuY2hpbGRyZW4ucHVzaChhKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5kIHN0cmluZ3MuIEdvdCBcIithKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUucHJlcGVuZD1mdW5jdGlvbihhKXtpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgYz1hLmxlbmd0aC0xO2M+PTA7Yy0tKXRoaXMucHJlcGVuZChhW2NdKTtlbHNlIGlmKGFbaV18fHR5cGVvZiBhPT1cInN0cmluZ1wiKXRoaXMuY2hpbGRyZW4udW5zaGlmdChhKTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5kIHN0cmluZ3MuIEdvdCBcIithKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUud2Fsaz1mdW5jdGlvbihhKXtmb3IodmFyIGMsdT0wLFI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7dTxSO3UrKyljPXRoaXMuY2hpbGRyZW5bdV0sY1tpXT9jLndhbGsoYSk6YyE9PVwiXCImJmEoYyx7c291cmNlOnRoaXMuc291cmNlLGxpbmU6dGhpcy5saW5lLGNvbHVtbjp0aGlzLmNvbHVtbixuYW1lOnRoaXMubmFtZX0pfSxzLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGEpe3ZhciBjLHUsUj10aGlzLmNoaWxkcmVuLmxlbmd0aDtpZihSPjApe2ZvcihjPVtdLHU9MDt1PFItMTt1KyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bdV0pLGMucHVzaChhKTtjLnB1c2godGhpcy5jaGlsZHJlblt1XSksdGhpcy5jaGlsZHJlbj1jfXJldHVybiB0aGlzfSxzLnByb3RvdHlwZS5yZXBsYWNlUmlnaHQ9ZnVuY3Rpb24oYSxjKXt2YXIgdT10aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdO3JldHVybiB1W2ldP3UucmVwbGFjZVJpZ2h0KGEsYyk6dHlwZW9mIHU9PVwic3RyaW5nXCI/dGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aC0xXT11LnJlcGxhY2UoYSxjKTp0aGlzLmNoaWxkcmVuLnB1c2goXCJcIi5yZXBsYWNlKGEsYykpLHRoaXN9LHMucHJvdG90eXBlLnNldFNvdXJjZUNvbnRlbnQ9ZnVuY3Rpb24oYSxjKXt0aGlzLnNvdXJjZUNvbnRlbnRzW3IudG9TZXRTdHJpbmcoYSldPWN9LHMucHJvdG90eXBlLndhbGtTb3VyY2VDb250ZW50cz1mdW5jdGlvbihhKXtmb3IodmFyIGM9MCx1PXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2M8dTtjKyspdGhpcy5jaGlsZHJlbltjXVtpXSYmdGhpcy5jaGlsZHJlbltjXS53YWxrU291cmNlQ29udGVudHMoYSk7Zm9yKHZhciBSPU9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpLGM9MCx1PVIubGVuZ3RoO2M8dTtjKyspYShyLmZyb21TZXRTdHJpbmcoUltjXSksdGhpcy5zb3VyY2VDb250ZW50c1tSW2NdXSl9LHMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9XCJcIjtyZXR1cm4gdGhpcy53YWxrKGZ1bmN0aW9uKGMpe2ErPWN9KSxhfSxzLnByb3RvdHlwZS50b1N0cmluZ1dpdGhTb3VyY2VNYXA9ZnVuY3Rpb24oYSl7dmFyIGM9e2NvZGU6XCJcIixsaW5lOjEsY29sdW1uOjB9LHU9bmV3IHQoYSksUj0hMSxmPW51bGwscD1udWxsLGw9bnVsbCxfPW51bGw7cmV0dXJuIHRoaXMud2FsayhmdW5jdGlvbihFLGgpe2MuY29kZSs9RSxoLnNvdXJjZSE9PW51bGwmJmgubGluZSE9PW51bGwmJmguY29sdW1uIT09bnVsbD8oKGYhPT1oLnNvdXJjZXx8cCE9PWgubGluZXx8bCE9PWguY29sdW1ufHxfIT09aC5uYW1lKSYmdS5hZGRNYXBwaW5nKHtzb3VyY2U6aC5zb3VyY2Usb3JpZ2luYWw6e2xpbmU6aC5saW5lLGNvbHVtbjpoLmNvbHVtbn0sZ2VuZXJhdGVkOntsaW5lOmMubGluZSxjb2x1bW46Yy5jb2x1bW59LG5hbWU6aC5uYW1lfSksZj1oLnNvdXJjZSxwPWgubGluZSxsPWguY29sdW1uLF89aC5uYW1lLFI9ITApOlImJih1LmFkZE1hcHBpbmcoe2dlbmVyYXRlZDp7bGluZTpjLmxpbmUsY29sdW1uOmMuY29sdW1ufX0pLGY9bnVsbCxSPSExKTtmb3IodmFyIFM9MCxkPUUubGVuZ3RoO1M8ZDtTKyspRS5jaGFyQ29kZUF0KFMpPT09bz8oYy5saW5lKyssYy5jb2x1bW49MCxTKzE9PT1kPyhmPW51bGwsUj0hMSk6UiYmdS5hZGRNYXBwaW5nKHtzb3VyY2U6aC5zb3VyY2Usb3JpZ2luYWw6e2xpbmU6aC5saW5lLGNvbHVtbjpoLmNvbHVtbn0sZ2VuZXJhdGVkOntsaW5lOmMubGluZSxjb2x1bW46Yy5jb2x1bW59LG5hbWU6aC5uYW1lfSkpOmMuY29sdW1uKyt9KSx0aGlzLndhbGtTb3VyY2VDb250ZW50cyhmdW5jdGlvbihFLGgpe3Uuc2V0U291cmNlQ29udGVudChFLGgpfSkse2NvZGU6Yy5jb2RlLG1hcDp1fX0sZS5Tb3VyY2VOb2RlPXN9KSxEUz1FdChlPT57ZS5Tb3VyY2VNYXBHZW5lcmF0b3I9WHUoKS5Tb3VyY2VNYXBHZW5lcmF0b3IsZS5Tb3VyY2VNYXBDb25zdW1lcj15UygpLlNvdXJjZU1hcENvbnN1bWVyLGUuU291cmNlTm9kZT1UUygpLlNvdXJjZU5vZGV9KSxxdT1nUyhEUygpKSx7U291cmNlTWFwR2VuZXJhdG9yOkp5LFNvdXJjZU1hcENvbnN1bWVyOmVULFNvdXJjZU5vZGU6dFR9PXF1LHtkZWZhdWx0Okd1LC4uLmJTfT1xdSxRdT1HdSE9PXZvaWQgMD9HdTpiU30pO2Z1bmN0aW9uIGtzKC4uLmUpe2lmKHR5cGVvZiBEZW5vLmFkZFNpZ25hbExpc3RlbmVyPT1cImZ1bmN0aW9uXCIpcmV0dXJuIERlbm8uYWRkU2lnbmFsTGlzdGVuZXIoLi4uZSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIil9ZnVuY3Rpb24gWnUoLi4uZSl7cmV0dXJuIHR5cGVvZiBEZW5vLmZ1dGltZT09XCJmdW5jdGlvblwiP0Rlbm8uZnV0aW1lKC4uLmUpOlByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJSZXF1aXJlcyAtLXVuc3RhYmxlXCIpKX1mdW5jdGlvbiBKdSguLi5lKXtpZih0eXBlb2YgRGVuby5mdXRpbWVTeW5jPT1cImZ1bmN0aW9uXCIpcmV0dXJuIERlbm8uZnV0aW1lU3luYyguLi5lKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKX1mdW5jdGlvbiBlZiguLi5lKXtpZih0eXBlb2YgRGVuby5nZXRVaWQ9PVwiZnVuY3Rpb25cIilyZXR1cm4gRGVuby5nZXRVaWQoLi4uZSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIil9ZnVuY3Rpb24gdGYoLi4uZSl7aWYodHlwZW9mIERlbm8ucmVtb3ZlU2lnbmFsTGlzdGVuZXI9PVwiZnVuY3Rpb25cIilyZXR1cm4gRGVuby5yZW1vdmVTaWduYWxMaXN0ZW5lciguLi5lKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKX1mdW5jdGlvbiByZiguLi5lKXtpZih0eXBlb2YgRGVuby5zZXRSYXc9PVwiZnVuY3Rpb25cIilyZXR1cm4gRGVuby5zZXRSYXcoLi4uZSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIil9ZnVuY3Rpb24gbmYoLi4uZSl7cmV0dXJuIHR5cGVvZiBEZW5vLnV0aW1lPT1cImZ1bmN0aW9uXCI/RGVuby51dGltZSguLi5lKTpQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKSl9ZnVuY3Rpb24gb2YoLi4uZSl7aWYodHlwZW9mIERlbm8udXRpbWVTeW5jPT1cImZ1bmN0aW9uXCIpcmV0dXJuIERlbm8udXRpbWVTeW5jKC4uLmUpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJSZXF1aXJlcyAtLXVuc3RhYmxlXCIpfWFzeW5jIGZ1bmN0aW9uIHNmKGUpe3JldHVybiBhd2FpdCBEZW5vLmNvbm5lY3QoZSl9ZnVuY3Rpb24gYWYoZSl7cmV0dXJuIERlbm8ubGlzdGVuKGUpfWZ1bmN0aW9uIGNmKGUpe3JldHVybiBEZW5vLmxpc3RlbkRhdGFncmFtKGUpfWZ1bmN0aW9uIENvKGUsLi4udCl7aWYodHlwZW9mIGUucmVmPT1cImZ1bmN0aW9uXCIpcmV0dXJuIGUucmVmKC4uLnQpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJSZXF1aXJlcyAtLXVuc3RhYmxlXCIpfWZ1bmN0aW9uIExvKGUsLi4udCl7aWYodHlwZW9mIGUudW5yZWY9PVwiZnVuY3Rpb25cIilyZXR1cm4gZS51bnJlZiguLi50KTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKX1mdW5jdGlvbiBsZiguLi5lKXtpZih0eXBlb2YgRGVuby51bnJlZlRpbWVyPT1cImZ1bmN0aW9uXCIpcmV0dXJuIERlbm8udW5yZWZUaW1lciguLi5lKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKX12YXIgZ3Q9QSgoKT0+e30pO3ZhciBELF9yPUEoKCk9PntEPXt9fSk7ZnVuY3Rpb24gWChlKXtsZXQgdD1cIl9fbm9kZV9pbnRlcm5hbF9cIitlLm5hbWU7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwibmFtZVwiLHt2YWx1ZTp0fSksZX12YXIgQnM9QSgoKT0+e30pO3ZhciBTbj17fTtjZShTbix7ZGVmYXVsdDooKT0+d1MsaXNBbnlBcnJheUJ1ZmZlcjooKT0+ZmYsaXNBcmd1bWVudHNPYmplY3Q6KCk9PnBmLGlzQXJyYXlCdWZmZXI6KCk9PlJmLGlzQXN5bmNGdW5jdGlvbjooKT0+RWYsaXNCaWdJbnRPYmplY3Q6KCk9PldzLGlzQm9vbGVhbk9iamVjdDooKT0+RnMsaXNCb3hlZFByaW1pdGl2ZTooKT0+X2YsaXNEYXRhVmlldzooKT0+ZGYsaXNEYXRlOigpPT5oZixpc0dlbmVyYXRvckZ1bmN0aW9uOigpPT5PZixpc0dlbmVyYXRvck9iamVjdDooKT0+Q1MsaXNNYXA6KCk9Pm1mLGlzTWFwSXRlcmF0b3I6KCk9PlNmLGlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0OigpPT5nZixpc05hdGl2ZUVycm9yOigpPT5BZixpc051bWJlck9iamVjdDooKT0+dnMsaXNQcm9taXNlOigpPT54Zixpc1JlZ0V4cDooKT0+TmYsaXNTZXQ6KCk9PklmLGlzU2V0SXRlcmF0b3I6KCk9PnlmLGlzU2hhcmVkQXJyYXlCdWZmZXI6KCk9PkxTLGlzU3RyaW5nT2JqZWN0OigpPT5Wcyxpc1N5bWJvbE9iamVjdDooKT0+VGYsaXNXZWFrTWFwOigpPT5EZixpc1dlYWtTZXQ6KCk9PmJmfSk7ZnVuY3Rpb24gZmYoZSl7cmV0dXJuIGxlKGUpJiYobmUuY2FsbChlKT09PVwiW29iamVjdCBBcnJheUJ1ZmZlcl1cInx8bmUuY2FsbChlKT09PVwiW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl1cIil9ZnVuY3Rpb24gcGYoZSl7cmV0dXJuIGxlKGUpJiZuZS5jYWxsKGUpPT09XCJbb2JqZWN0IEFyZ3VtZW50c11cIn1mdW5jdGlvbiBSZihlKXtyZXR1cm4gbGUoZSkmJm5lLmNhbGwoZSk9PT1cIltvYmplY3QgQXJyYXlCdWZmZXJdXCJ9ZnVuY3Rpb24gRWYoZSl7cmV0dXJuIHVmKGUpJiZuZS5jYWxsKGUpPT09XCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dXCJ9ZnVuY3Rpb24gRnMoZSl7cmV0dXJuIGxlKGUpJiZuZS5jYWxsKGUpPT09XCJbb2JqZWN0IEJvb2xlYW5dXCJ9ZnVuY3Rpb24gX2YoZSl7cmV0dXJuIEZzKGUpfHxWcyhlKXx8dnMoZSl8fFRmKGUpfHxXcyhlKX1mdW5jdGlvbiBkZihlKXtyZXR1cm4gbGUoZSkmJm5lLmNhbGwoZSk9PT1cIltvYmplY3QgRGF0YVZpZXddXCJ9ZnVuY3Rpb24gaGYoZSl7cmV0dXJuIGxlKGUpJiZuZS5jYWxsKGUpPT09XCJbb2JqZWN0IERhdGVdXCJ9ZnVuY3Rpb24gT2YoZSl7cmV0dXJuIHVmKGUpJiZuZS5jYWxsKGUpPT09XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwifWZ1bmN0aW9uIENTKGUpe3JldHVybiBsZShlKSYmbmUuY2FsbChlKT09PVwiW29iamVjdCBHZW5lcmF0b3JdXCJ9ZnVuY3Rpb24gbWYoZSl7cmV0dXJuIGxlKGUpJiZuZS5jYWxsKGUpPT09XCJbb2JqZWN0IE1hcF1cIn1mdW5jdGlvbiBTZihlKXtyZXR1cm4gbGUoZSkmJm5lLmNhbGwoZSk9PT1cIltvYmplY3QgTWFwIEl0ZXJhdG9yXVwifWZ1bmN0aW9uIGdmKGUpe3JldHVybiBsZShlKSYmbmUuY2FsbChlKT09PVwiW29iamVjdCBNb2R1bGVdXCJ9ZnVuY3Rpb24gQWYoZSl7cmV0dXJuIGxlKGUpJiZuZS5jYWxsKGUpPT09XCJbb2JqZWN0IEVycm9yXVwifWZ1bmN0aW9uIHZzKGUpe3JldHVybiBsZShlKSYmbmUuY2FsbChlKT09PVwiW29iamVjdCBOdW1iZXJdXCJ9ZnVuY3Rpb24gV3MoZSl7cmV0dXJuIGxlKGUpJiZuZS5jYWxsKGUpPT09XCJbb2JqZWN0IEJpZ0ludF1cIn1mdW5jdGlvbiB4ZihlKXtyZXR1cm4gbGUoZSkmJm5lLmNhbGwoZSk9PT1cIltvYmplY3QgUHJvbWlzZV1cIn1mdW5jdGlvbiBOZihlKXtyZXR1cm4gbGUoZSkmJm5lLmNhbGwoZSk9PT1cIltvYmplY3QgUmVnRXhwXVwifWZ1bmN0aW9uIElmKGUpe3JldHVybiBsZShlKSYmbmUuY2FsbChlKT09PVwiW29iamVjdCBTZXRdXCJ9ZnVuY3Rpb24geWYoZSl7cmV0dXJuIGxlKGUpJiZuZS5jYWxsKGUpPT09XCJbb2JqZWN0IFNldCBJdGVyYXRvcl1cIn1mdW5jdGlvbiBMUyhlKXtyZXR1cm4gbGUoZSkmJm5lLmNhbGwoZSk9PT1cIltvYmplY3QgU2hhcmVkQXJyYXlCdWZmZXJdXCJ9ZnVuY3Rpb24gVnMoZSl7cmV0dXJuIGxlKGUpJiZuZS5jYWxsKGUpPT09XCJbb2JqZWN0IFN0cmluZ11cIn1mdW5jdGlvbiBUZihlKXtyZXR1cm4gbGUoZSkmJm5lLmNhbGwoZSk9PT1cIltvYmplY3QgU3ltYm9sXVwifWZ1bmN0aW9uIERmKGUpe3JldHVybiBsZShlKSYmbmUuY2FsbChlKT09PVwiW29iamVjdCBXZWFrTWFwXVwifWZ1bmN0aW9uIGJmKGUpe3JldHVybiBsZShlKSYmbmUuY2FsbChlKT09PVwiW29iamVjdCBXZWFrU2V0XVwifXZhciBuZSxsZSx1Zix3UyxIcz1BKCgpPT57bmU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxsZT1lPT5lIT09bnVsbCYmdHlwZW9mIGU9PVwib2JqZWN0XCIsdWY9ZT0+ZSE9PW51bGwmJnR5cGVvZiBlPT1cImZ1bmN0aW9uXCI7d1M9e2lzQXN5bmNGdW5jdGlvbjpFZixpc0dlbmVyYXRvckZ1bmN0aW9uOk9mLGlzQW55QXJyYXlCdWZmZXI6ZmYsaXNBcnJheUJ1ZmZlcjpSZixpc0FyZ3VtZW50c09iamVjdDpwZixpc0JveGVkUHJpbWl0aXZlOl9mLGlzRGF0YVZpZXc6ZGYsaXNNYXA6bWYsaXNNYXBJdGVyYXRvcjpTZixpc01vZHVsZU5hbWVzcGFjZU9iamVjdDpnZixpc05hdGl2ZUVycm9yOkFmLGlzUHJvbWlzZTp4Zixpc1NldDpJZixpc1NldEl0ZXJhdG9yOnlmLGlzV2Vha01hcDpEZixpc1dlYWtTZXQ6YmYsaXNSZWdFeHA6TmYsaXNEYXRlOmhmLGlzU3RyaW5nT2JqZWN0OlZzLGlzTnVtYmVyT2JqZWN0OnZzLGlzQm9vbGVhbk9iamVjdDpGcyxpc0JpZ0ludE9iamVjdDpXc319KTt2YXIgaVQsQ2YsTGY9QSgoKT0+e2lUPVN5bWJvbChcImtIYW5kbGVcIiksQ2Y9U3ltYm9sKFwia0tleU9iamVjdFwiKX0pO2Z1bmN0aW9uIHdmKGUpe3JldHVybiBlIT1udWxsJiZlW1BTXSE9PXZvaWQgMH1mdW5jdGlvbiBQZihlKXtyZXR1cm4gZSE9bnVsbCYmZVtDZl0hPT12b2lkIDB9dmFyIFBTLFVmPUEoKCk9PntMZigpO1BTPVN5bWJvbChcImtLZXlUeXBlXCIpfSk7dmFyIFZvPXt9O2NlKFZvLHtpc0FueUFycmF5QnVmZmVyOigpPT5KdCxpc0FyZ3VtZW50c09iamVjdDooKT0+JHMsaXNBcnJheUJ1ZmZlcjooKT0+enMsaXNBcnJheUJ1ZmZlclZpZXc6KCk9Pl90LGlzQXN5bmNGdW5jdGlvbjooKT0+R3MsaXNCaWdJbnQ2NEFycmF5OigpPT5VUyxpc0JpZ0ludE9iamVjdDooKT0+UG8saXNCaWdVaW50NjRBcnJheTooKT0+TWYsaXNCb29sZWFuT2JqZWN0OigpPT5Vbyxpc0JveGVkUHJpbWl0aXZlOigpPT5Xbyxpc0NyeXB0b0tleTooKT0+UGYsaXNEYXRhVmlldzooKT0+WnMsaXNEYXRlOigpPT5nbixpc0Zsb2F0MzJBcnJheTooKT0+a2YsaXNGbG9hdDY0QXJyYXk6KCk9PkJmLGlzR2VuZXJhdG9yRnVuY3Rpb246KCk9PllzLGlzR2VuZXJhdG9yT2JqZWN0OigpPT5WUyxpc0ludDE2QXJyYXk6KCk9PmtTLGlzSW50MzJBcnJheTooKT0+QlMsaXNJbnQ4QXJyYXk6KCk9Pk1TLGlzS2V5T2JqZWN0OigpPT53Zixpc01hcDooKT0+Rm8saXNNYXBJdGVyYXRvcjooKT0+S3MsaXNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6KCk9PkpzLGlzTmF0aXZlRXJyb3I6KCk9PnZmLGlzTnVtYmVyT2JqZWN0OigpPT5Nbyxpc1Byb21pc2U6KCk9PmpzLGlzUmVnRXhwOigpPT5Cbyxpc1NldDooKT0+dm8saXNTZXRJdGVyYXRvcjooKT0+WHMsaXNTaGFyZWRBcnJheUJ1ZmZlcjooKT0+SFMsaXNTdHJpbmdPYmplY3Q6KCk9PmtvLGlzU3ltYm9sT2JqZWN0OigpPT5GZixpc1R5cGVkQXJyYXk6KCk9PndvLGlzVWludDE2QXJyYXk6KCk9PnZTLGlzVWludDMyQXJyYXk6KCk9PldTLGlzVWludDhBcnJheTooKT0+RmUsaXNVaW50OENsYW1wZWRBcnJheTooKT0+RlMsaXNXZWFrTWFwOigpPT5xcyxpc1dlYWtTZXQ6KCk9PlFzfSk7ZnVuY3Rpb24gX3QoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKX1mdW5jdGlvbiBVUyhlKXtyZXR1cm4gYXQuY2FsbChlKT09PVwiQmlnSW50NjRBcnJheVwifWZ1bmN0aW9uIE1mKGUpe3JldHVybiBhdC5jYWxsKGUpPT09XCJCaWdVaW50NjRBcnJheVwifWZ1bmN0aW9uIGtmKGUpe3JldHVybiBhdC5jYWxsKGUpPT09XCJGbG9hdDMyQXJyYXlcIn1mdW5jdGlvbiBCZihlKXtyZXR1cm4gYXQuY2FsbChlKT09PVwiRmxvYXQ2NEFycmF5XCJ9ZnVuY3Rpb24gTVMoZSl7cmV0dXJuIGF0LmNhbGwoZSk9PT1cIkludDhBcnJheVwifWZ1bmN0aW9uIGtTKGUpe3JldHVybiBhdC5jYWxsKGUpPT09XCJJbnQxNkFycmF5XCJ9ZnVuY3Rpb24gQlMoZSl7cmV0dXJuIGF0LmNhbGwoZSk9PT1cIkludDMyQXJyYXlcIn1mdW5jdGlvbiB3byhlKXtyZXR1cm4gYXQuY2FsbChlKSE9PXZvaWQgMH1mdW5jdGlvbiBGZShlKXtyZXR1cm4gYXQuY2FsbChlKT09PVwiVWludDhBcnJheVwifWZ1bmN0aW9uIEZTKGUpe3JldHVybiBhdC5jYWxsKGUpPT09XCJVaW50OENsYW1wZWRBcnJheVwifWZ1bmN0aW9uIHZTKGUpe3JldHVybiBhdC5jYWxsKGUpPT09XCJVaW50MTZBcnJheVwifWZ1bmN0aW9uIFdTKGUpe3JldHVybiBhdC5jYWxsKGUpPT09XCJVaW50MzJBcnJheVwifXZhciBhdCxnbiwkcyxQbyxVbyxNbyxrbyxGZix2ZixCbyxHcyxZcyxWUyxqcyxGbyx2byxLcyxYcyxxcyxRcyx6cyxacyxIUyxKcyxKdCxXbyxjdD1BKCgpPT57SHMoKTtVZigpO2F0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpLnByb3RvdHlwZSxTeW1ib2wudG9TdHJpbmdUYWcpLmdldDsoe2lzRGF0ZTpnbixpc0FyZ3VtZW50c09iamVjdDokcyxpc0JpZ0ludE9iamVjdDpQbyxpc0Jvb2xlYW5PYmplY3Q6VW8saXNOdW1iZXJPYmplY3Q6TW8saXNTdHJpbmdPYmplY3Q6a28saXNTeW1ib2xPYmplY3Q6RmYsaXNOYXRpdmVFcnJvcjp2Zixpc1JlZ0V4cDpCbyxpc0FzeW5jRnVuY3Rpb246R3MsaXNHZW5lcmF0b3JGdW5jdGlvbjpZcyxpc0dlbmVyYXRvck9iamVjdDpWUyxpc1Byb21pc2U6anMsaXNNYXA6Rm8saXNTZXQ6dm8saXNNYXBJdGVyYXRvcjpLcyxpc1NldEl0ZXJhdG9yOlhzLGlzV2Vha01hcDpxcyxpc1dlYWtTZXQ6UXMsaXNBcnJheUJ1ZmZlcjp6cyxpc0RhdGFWaWV3OlpzLGlzU2hhcmVkQXJyYXlCdWZmZXI6SFMsaXNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6SnMsaXNBbnlBcnJheUJ1ZmZlcjpKdCxpc0JveGVkUHJpbWl0aXZlOldvfT1Tbil9KTtmdW5jdGlvbiBBbihlKXtyZXR1cm4gZT09bnVsbHx8ZT09PVwidXRmOFwifHxlPT09XCJ1dGYtOFwiP1widXRmOFwiOldmKGUpfWZ1bmN0aW9uIFdmKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSA0OmlmKGU9PT1cIlVURjhcIilyZXR1cm5cInV0ZjhcIjtpZihlPT09XCJ1Y3MyXCJ8fGU9PT1cIlVDUzJcIilyZXR1cm5cInV0ZjE2bGVcIjtpZihlPWAke2V9YC50b0xvd2VyQ2FzZSgpLGU9PT1cInV0ZjhcIilyZXR1cm5cInV0ZjhcIjtpZihlPT09XCJ1Y3MyXCIpcmV0dXJuXCJ1dGYxNmxlXCI7YnJlYWs7Y2FzZSAzOmlmKGU9PT1cImhleFwifHxlPT09XCJIRVhcInx8YCR7ZX1gLnRvTG93ZXJDYXNlKCk9PT1cImhleFwiKXJldHVyblwiaGV4XCI7YnJlYWs7Y2FzZSA1OmlmKGU9PT1cImFzY2lpXCIpcmV0dXJuXCJhc2NpaVwiO2lmKGU9PT1cInVjcy0yXCIpcmV0dXJuXCJ1dGYxNmxlXCI7aWYoZT09PVwiVVRGLThcIilyZXR1cm5cInV0ZjhcIjtpZihlPT09XCJBU0NJSVwiKXJldHVyblwiYXNjaWlcIjtpZihlPT09XCJVQ1MtMlwiKXJldHVyblwidXRmMTZsZVwiO2lmKGU9YCR7ZX1gLnRvTG93ZXJDYXNlKCksZT09PVwidXRmLThcIilyZXR1cm5cInV0ZjhcIjtpZihlPT09XCJhc2NpaVwiKXJldHVyblwiYXNjaWlcIjtpZihlPT09XCJ1Y3MtMlwiKXJldHVyblwidXRmMTZsZVwiO2JyZWFrO2Nhc2UgNjppZihlPT09XCJiYXNlNjRcIilyZXR1cm5cImJhc2U2NFwiO2lmKGU9PT1cImxhdGluMVwifHxlPT09XCJiaW5hcnlcIilyZXR1cm5cImxhdGluMVwiO2lmKGU9PT1cIkJBU0U2NFwiKXJldHVyblwiYmFzZTY0XCI7aWYoZT09PVwiTEFUSU4xXCJ8fGU9PT1cIkJJTkFSWVwiKXJldHVyblwibGF0aW4xXCI7aWYoZT1gJHtlfWAudG9Mb3dlckNhc2UoKSxlPT09XCJiYXNlNjRcIilyZXR1cm5cImJhc2U2NFwiO2lmKGU9PT1cImxhdGluMVwifHxlPT09XCJiaW5hcnlcIilyZXR1cm5cImxhdGluMVwiO2JyZWFrO2Nhc2UgNzppZihlPT09XCJ1dGYxNmxlXCJ8fGU9PT1cIlVURjE2TEVcInx8YCR7ZX1gLnRvTG93ZXJDYXNlKCk9PT1cInV0ZjE2bGVcIilyZXR1cm5cInV0ZjE2bGVcIjticmVhaztjYXNlIDg6aWYoZT09PVwidXRmLTE2bGVcInx8ZT09PVwiVVRGLTE2TEVcInx8YCR7ZX1gLnRvTG93ZXJDYXNlKCk9PT1cInV0Zi0xNmxlXCIpcmV0dXJuXCJ1dGYxNmxlXCI7YnJlYWs7Y2FzZSA5OmlmKGU9PT1cImJhc2U2NHVybFwifHxlPT09XCJCQVNFNjRVUkxcInx8YCR7ZX1gLnRvTG93ZXJDYXNlKCk9PT1cImJhc2U2NHVybFwiKXJldHVyblwiYmFzZTY0dXJsXCI7YnJlYWs7ZGVmYXVsdDppZihlPT09XCJcIilyZXR1cm5cInV0ZjhcIn19dmFyIGVhPUEoKCk9Pnt9KTtmdW5jdGlvbiAkUyhlKXtyZXR1cm4gZT09PShlfDApfWZ1bmN0aW9uIHhuKGUpe3JldHVybiBlPT09ZT4+PjB9ZnVuY3Rpb24gdGEoZSx0LHIpe2lmKGU/Pz1yLHR5cGVvZiBlPT1cInN0cmluZ1wiKXtpZighR1MudGVzdChlKSl0aHJvdyBuZXcgRC5FUlJfSU5WQUxJRF9BUkdfVkFMVUUodCxlLFlTKTtlPU51bWJlci5wYXJzZUludChlLDgpfXJldHVybiBObihlLHQsMCwyKiozMi0xKSxlfWZ1bmN0aW9uIFByKGUsdCl7aWYodHlwZW9mIGUhPVwic3RyaW5nXCIpdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcInN0cmluZ1wiLGUpfWZ1bmN0aW9uIGdlKGUsdCl7aWYodHlwZW9mIGUhPVwiYm9vbGVhblwiKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKHQsXCJib29sZWFuXCIsZSl9ZnVuY3Rpb24gcmEoZSx0KXtsZXQgcj1Bbih0KSxuPWUubGVuZ3RoO2lmKHI9PT1cImhleFwiJiZuJTIhPT0wKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19WQUxVRShcImVuY29kaW5nXCIsdCxgaXMgaW52YWxpZCBmb3IgZGF0YSBvZiBsZW5ndGggJHtufWApfXZhciBHUyxZUyxWZixBdCx2ZSxObixIZixfVCxsdCxrdCxkdCxkVCxkZT1BKCgpPT57X3IoKTtCcygpO2N0KCk7ZWEoKTtHUz0vXlswLTddKyQvLFlTPVwibXVzdCBiZSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIG9yIGFuIG9jdGFsIHN0cmluZ1wiO1ZmPVgoKGUsdD1cImJ1ZmZlclwiKT0+e2lmKCFfdChlKSl0aHJvdyBuZXcgRC5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0LFtcIkJ1ZmZlclwiLFwiVHlwZWRBcnJheVwiLFwiRGF0YVZpZXdcIl0sZSl9KSxBdD1YKChlLHQscj1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUixuPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSKT0+e2lmKHR5cGVvZiBlIT1cIm51bWJlclwiKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKHQsXCJudW1iZXJcIixlKTtpZighTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgRC5FUlJfT1VUX09GX1JBTkdFKHQsXCJhbiBpbnRlZ2VyXCIsZSk7aWYoZTxyfHxlPm4pdGhyb3cgbmV3IEQuRVJSX09VVF9PRl9SQU5HRSh0LGA+PSAke3J9ICYmIDw9ICR7bn1gLGUpfSksdmU9WCgoZSx0LHIpPT57bGV0IG49cj09bnVsbCxvPW4/ITE6ci5hbGxvd0FycmF5LGk9bj8hMTpyLmFsbG93RnVuY3Rpb247aWYoIShuPyExOnIubnVsbGFibGUpJiZlPT09bnVsbHx8IW8mJkFycmF5LmlzQXJyYXkoZSl8fHR5cGVvZiBlIT1cIm9iamVjdFwiJiYoIWl8fHR5cGVvZiBlIT1cImZ1bmN0aW9uXCIpKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKHQsXCJPYmplY3RcIixlKX0pLE5uPVgoKGUsdCxyPS0yMTQ3NDgzNjQ4LG49MjE0NzQ4MzY0Nyk9PntpZighJFMoZSkpdGhyb3cgdHlwZW9mIGUhPVwibnVtYmVyXCI/bmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcIm51bWJlclwiLGUpOk51bWJlci5pc0ludGVnZXIoZSk/bmV3IEQuRVJSX09VVF9PRl9SQU5HRSh0LGA+PSAke3J9ICYmIDw9ICR7bn1gLGUpOm5ldyBELkVSUl9PVVRfT0ZfUkFOR0UodCxcImFuIGludGVnZXJcIixlKTtpZihlPHJ8fGU+bil0aHJvdyBuZXcgRC5FUlJfT1VUX09GX1JBTkdFKHQsYD49ICR7cn0gJiYgPD0gJHtufWAsZSl9KSxIZj1YKChlLHQscik9PntpZigheG4oZSkpe2lmKHR5cGVvZiBlIT1cIm51bWJlclwiKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKHQsXCJudW1iZXJcIixlKTtpZighTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgRC5FUlJfT1VUX09GX1JBTkdFKHQsXCJhbiBpbnRlZ2VyXCIsZSk7bGV0IG49cj8xOjA7dGhyb3cgbmV3IEQuRVJSX09VVF9PRl9SQU5HRSh0LGA+PSAke259ICYmIDwgNDI5NDk2NzI5NmAsZSl9aWYociYmZT09PTApdGhyb3cgbmV3IEQuRVJSX09VVF9PRl9SQU5HRSh0LFwiPj0gMSAmJiA8IDQyOTQ5NjcyOTZcIixlKX0pO19UPVgoKGUsdCxyKT0+e2lmKCFBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMuY2FsbChyLGUpKXtsZXQgbj1BcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChyLGk9PnR5cGVvZiBpPT1cInN0cmluZ1wiP2AnJHtpfSdgOlN0cmluZyhpKSksXCIsIFwiKSxvPVwibXVzdCBiZSBvbmUgb2Y6IFwiK247dGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1ZBTFVFKHQsZSxvKX19KTtsdD1YKGU9PntpZih0eXBlb2YgZSE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0NBTExCQUNLKGUpfSksa3Q9WCgoZSx0KT0+e2lmKGUhPT12b2lkIDAmJihlPT09bnVsbHx8dHlwZW9mIGUhPVwib2JqZWN0XCJ8fCEoXCJhYm9ydGVkXCJpbiBlKSkpdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcIkFib3J0U2lnbmFsXCIsZSl9KSxkdD1YKChlLHQpPT57aWYodHlwZW9mIGUhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgRC5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0LFwiRnVuY3Rpb25cIixlKX0pLGRUPVgoKGUsdCxyPTApPT57aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcIkFycmF5XCIsZSk7aWYoZS5sZW5ndGg8cil7bGV0IG49YG11c3QgYmUgbG9uZ2VyIHRoYW4gJHtyfWA7dGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1ZBTFVFKHQsZSxuKX19KX0pO2Z1bmN0aW9uIFVyKCl7bGV0IGUsdD1cInBlbmRpbmdcIixyPW5ldyBQcm9taXNlKChuLG8pPT57ZT17YXN5bmMgcmVzb2x2ZShpKXthd2FpdCBpLHQ9XCJmdWxmaWxsZWRcIixuKGkpfSxyZWplY3QoaSl7dD1cInJlamVjdGVkXCIsbyhpKX19fSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwic3RhdGVcIix7Z2V0OigpPT50fSksT2JqZWN0LmFzc2lnbihyLGUpfXZhciBJbj1BKCgpPT57fSk7dmFyICRmPUEoKCk9PntJbigpfSk7dmFyIEdmPUEoKCk9PntJbigpfSk7dmFyIFlmPUEoKCk9Pnt9KTtmdW5jdGlvbiBNcihlLHQ9e30pe2xldHtzaWduYWw6cixwZXJzaXN0ZW50Om59PXQ7cmV0dXJuIHI/LmFib3J0ZWQ/UHJvbWlzZS5yZWplY3QobmV3IERPTUV4Y2VwdGlvbihcIkRlbGF5IHdhcyBhYm9ydGVkLlwiLFwiQWJvcnRFcnJvclwiKSk6bmV3IFByb21pc2UoKG8saSk9PntsZXQgcz0oKT0+e2NsZWFyVGltZW91dChjKSxpKG5ldyBET01FeGNlcHRpb24oXCJEZWxheSB3YXMgYWJvcnRlZC5cIixcIkFib3J0RXJyb3JcIikpfSxjPXNldFRpbWVvdXQoKCk9PntyPy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIixzKSxvKCl9LGUpO3I/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLHMse29uY2U6ITB9KSxuPT09ITEmJmxmKGMpfSl9dmFyIG5hPUEoKCk9PntndCgpfSk7dmFyIGpmLEtmPUEoKCk9PntJbigpO2pmPWNsYXNzeyN0PTA7I3I9W107I249W107I2U9VXIoKTthZGQodCl7Kyt0aGlzLiN0LHRoaXMuI2kodFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSl9YXN5bmMjaSh0KXt0cnl7bGV0e3ZhbHVlOnIsZG9uZTpufT1hd2FpdCB0Lm5leHQoKTtuPy0tdGhpcy4jdDp0aGlzLiNyLnB1c2goe2l0ZXJhdG9yOnQsdmFsdWU6cn0pfWNhdGNoKHIpe3RoaXMuI24ucHVzaChyKX10aGlzLiNlLnJlc29sdmUoKX1hc3luYyppdGVyYXRlKCl7Zm9yKDt0aGlzLiN0PjA7KXthd2FpdCB0aGlzLiNlO2ZvcihsZXQgdD0wO3Q8dGhpcy4jci5sZW5ndGg7dCsrKXtsZXR7aXRlcmF0b3I6cix2YWx1ZTpufT10aGlzLiNyW3RdO3lpZWxkIG4sdGhpcy4jaShyKX1pZih0aGlzLiNuLmxlbmd0aCl7Zm9yKGxldCB0IG9mIHRoaXMuI24pdGhyb3cgdDt0aGlzLiNuLmxlbmd0aD0wfXRoaXMuI3IubGVuZ3RoPTAsdGhpcy4jZT1VcigpfX1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuaXRlcmF0ZSgpfX19KTt2YXIgWGY9QSgoKT0+e30pO3ZhciBxZj1BKCgpPT57fSk7dmFyIEhvPUEoKCk9PnskZigpO0dmKCk7WWYoKTtJbigpO25hKCk7S2YoKTtYZigpO3FmKCl9KTt2YXIgUWYsV1QsVlQsb2E9QSgoKT0+eyh7RGVubzpRZn09Z2xvYmFsVGhpcyksV1Q9dHlwZW9mIFFmPy5ub0NvbG9yPT1cImJvb2xlYW5cIj9RZi5ub0NvbG9yOiEwLFZUPW5ldyBSZWdFeHAoW1wiW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KVwiLFwiKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1ucS11eT0+PH5dKSlcIl0uam9pbihcInxcIiksXCJnXCIpfSk7dmFyIHpmPUEoKCk9PntvYSgpfSk7dmFyIFpmPUEoKCk9Pnt9KTtmdW5jdGlvbiB4dChlLHQ9XCJcIil7aWYoIWUpdGhyb3cgbmV3ICRvKHQpfWZ1bmN0aW9uIE50KCl7dGhyb3cgbmV3ICRvKFwidW5yZWFjaGFibGVcIil9dmFyICRvLEJ0PUEoKCk9PntvYSgpO3pmKCk7WmYoKTskbz1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHIpe3N1cGVyKHIpO3RoaXMubmFtZT1cIkFzc2VydGlvbkVycm9yXCJ9fX0pO2Z1bmN0aW9uIEllKGUsdD1cIlwiKXtpZighZSl0aHJvdyBuZXcgaWEodCl9dmFyIGlhLGVyPUEoKCk9PntpYT1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMubmFtZT1cIkRlbm9TdGRJbnRlcm5hbEVycm9yXCJ9fX0pO3ZhciBKZj1BKCgpPT57fSk7dmFyIGVwPUEoKCk9Pnt9KTtmdW5jdGlvbiB0cChlLHQscj0wKXtpZihyPj1lLmxlbmd0aClyZXR1cm4tMTtyPDAmJihyPU1hdGgubWF4KDAsZS5sZW5ndGgrcikpO2xldCBuPXRbMF07Zm9yKGxldCBvPXI7bzxlLmxlbmd0aDtvKyspe2lmKGVbb10hPT1uKWNvbnRpbnVlO2xldCBpPW8scz0xLGE9bztmb3IoO3M8dC5sZW5ndGgmJihhKyssZVthXT09PXRbYS1pXSk7KXMrKztpZihzPT09dC5sZW5ndGgpcmV0dXJuIGl9cmV0dXJuLTF9dmFyIHNhPUEoKCk9PntlcCgpfSk7dmFyIG1ELFNELGdELEFELHJwPUEoKCk9PntlcigpO0pmKCk7c2EoKTttRD0zMioxMDI0LFNEPTIqKjMyLTIsZ0Q9XCJcXHJcIi5jaGFyQ29kZUF0KDApLEFEPWBcbmAuY2hhckNvZGVBdCgwKX0pO2FzeW5jIGZ1bmN0aW9uIG5wKGUsdCl7bGV0IHI9MDtmb3IoO3I8dC5sZW5ndGg7KXIrPWF3YWl0IGUud3JpdGUodC5zdWJhcnJheShyKSl9ZnVuY3Rpb24gb3AoZSx0KXtsZXQgcj0wO2Zvcig7cjx0Lmxlbmd0aDspcis9ZS53cml0ZVN5bmModC5zdWJhcnJheShyKSl9dmFyIHlELEdvPUEoKCk9PntycCgpO3lEPTMyKjEwMjR9KTtmdW5jdGlvbiBVKGUpe2xldCB0PWU/YE5vdCBpbXBsZW1lbnRlZDogJHtlfWA6XCJOb3QgaW1wbGVtZW50ZWRcIjt0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24ga3IoZSl7bGV0IHQ9ZT9gTm90IGltcGxlbWVudGVkOiAke2V9YDpcIk5vdCBpbXBsZW1lbnRlZFwiO2NvbnNvbGUud2Fybih0KX1mdW5jdGlvbiBpcChlLHQsciwuLi5uKXtlKC4uLm4pLnRoZW4obz0+ciYmcihudWxsLHQobykpLG89PnImJnIobykpfWZ1bmN0aW9uIHNwKGUsdCl7Zm9yKDt0KzE8ZS5sZW5ndGg7dCsrKWVbdF09ZVt0KzFdO2UucG9wKCl9ZnVuY3Rpb24gYXAoZSl7cmV0dXJuIGU9PW51bGx8fGU9PT1cInV0ZjhcInx8ZT09PVwidXRmLThcIj9cInV0ZjhcIjpLUyhlKX1mdW5jdGlvbiBLUyhlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgNDppZihlPT09XCJVVEY4XCIpcmV0dXJuXCJ1dGY4XCI7aWYoZT09PVwidWNzMlwifHxlPT09XCJVQ1MyXCIpcmV0dXJuXCJ1dGYxNmxlXCI7aWYoZT1gJHtlfWAudG9Mb3dlckNhc2UoKSxlPT09XCJ1dGY4XCIpcmV0dXJuXCJ1dGY4XCI7aWYoZT09PVwidWNzMlwiKXJldHVyblwidXRmMTZsZVwiO2JyZWFrO2Nhc2UgMzppZihlPT09XCJoZXhcInx8ZT09PVwiSEVYXCJ8fGAke2V9YC50b0xvd2VyQ2FzZSgpPT09XCJoZXhcIilyZXR1cm5cImhleFwiO2JyZWFrO2Nhc2UgNTppZihlPT09XCJhc2NpaVwiKXJldHVyblwiYXNjaWlcIjtpZihlPT09XCJ1Y3MtMlwiKXJldHVyblwidXRmMTZsZVwiO2lmKGU9PT1cIlVURi04XCIpcmV0dXJuXCJ1dGY4XCI7aWYoZT09PVwiQVNDSUlcIilyZXR1cm5cImFzY2lpXCI7aWYoZT09PVwiVUNTLTJcIilyZXR1cm5cInV0ZjE2bGVcIjtpZihlPWAke2V9YC50b0xvd2VyQ2FzZSgpLGU9PT1cInV0Zi04XCIpcmV0dXJuXCJ1dGY4XCI7aWYoZT09PVwiYXNjaWlcIilyZXR1cm5cImFzY2lpXCI7aWYoZT09PVwidWNzLTJcIilyZXR1cm5cInV0ZjE2bGVcIjticmVhaztjYXNlIDY6aWYoZT09PVwiYmFzZTY0XCIpcmV0dXJuXCJiYXNlNjRcIjtpZihlPT09XCJsYXRpbjFcInx8ZT09PVwiYmluYXJ5XCIpcmV0dXJuXCJsYXRpbjFcIjtpZihlPT09XCJCQVNFNjRcIilyZXR1cm5cImJhc2U2NFwiO2lmKGU9PT1cIkxBVElOMVwifHxlPT09XCJCSU5BUllcIilyZXR1cm5cImxhdGluMVwiO2lmKGU9YCR7ZX1gLnRvTG93ZXJDYXNlKCksZT09PVwiYmFzZTY0XCIpcmV0dXJuXCJiYXNlNjRcIjtpZihlPT09XCJsYXRpbjFcInx8ZT09PVwiYmluYXJ5XCIpcmV0dXJuXCJsYXRpbjFcIjticmVhaztjYXNlIDc6aWYoZT09PVwidXRmMTZsZVwifHxlPT09XCJVVEYxNkxFXCJ8fGAke2V9YC50b0xvd2VyQ2FzZSgpPT09XCJ1dGYxNmxlXCIpcmV0dXJuXCJ1dGYxNmxlXCI7YnJlYWs7Y2FzZSA4OmlmKGU9PT1cInV0Zi0xNmxlXCJ8fGU9PT1cIlVURi0xNkxFXCJ8fGAke2V9YC50b0xvd2VyQ2FzZSgpPT09XCJ1dGYtMTZsZVwiKXJldHVyblwidXRmMTZsZVwiO2JyZWFrO2RlZmF1bHQ6aWYoZT09PVwiXCIpcmV0dXJuXCJ1dGY4XCJ9fXZhciB5ZT1BKCgpPT57SG8oKTtCdCgpO0dvKCl9KTtmdW5jdGlvbiBCcihlKXtyZXR1cm4gZT9lLmVuY29kaW5nIT1udWxsfHxlLmZsYWchPW51bGx8fGUuc2lnbmFsIT1udWxsfHxlLm1vZGUhPW51bGw6ITF9ZnVuY3Rpb24gRnIoZSl7aWYoIWV8fHR5cGVvZiBlPT1cImZ1bmN0aW9uXCIpcmV0dXJuIG51bGw7bGV0IHQ9dHlwZW9mIGU9PVwic3RyaW5nXCI/ZTplLmVuY29kaW5nO3JldHVybiB0fHxudWxsfWZ1bmN0aW9uIGFhKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKGU9ZS50b0xvd2VyQ2FzZSgpLFtcInV0ZjhcIixcImhleFwiLFwiYmFzZTY0XCJdLmluY2x1ZGVzKGUpKXJldHVybiBlO2lmKGU9PT1cInV0Zi04XCIpcmV0dXJuXCJ1dGY4XCI7aWYoZT09PVwiYmluYXJ5XCIpcmV0dXJuXCJiaW5hcnlcIjt0aHJvd1tcInV0ZjE2bGVcIixcImxhdGluMVwiLFwiYXNjaWlcIixcInVjczJcIl0uaW5jbHVkZXMoZSkmJlUoYFwiJHtlfVwiIGVuY29kaW5nYCksbmV3IEVycm9yKGBUaGUgdmFsdWUgXCIke2V9XCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwiZW5jb2RpbmdcImApfWZ1bmN0aW9uIHluKGUpe2lmKCFlKXJldHVybntjcmVhdGU6ITAsYXBwZW5kOiEwfTtsZXQgdDtzd2l0Y2goZSl7Y2FzZVwiYVwiOnt0PXtjcmVhdGU6ITAsYXBwZW5kOiEwfTticmVha31jYXNlXCJheFwiOnt0PXtjcmVhdGVOZXc6ITAsd3JpdGU6ITAsYXBwZW5kOiEwfTticmVha31jYXNlXCJhK1wiOnt0PXtyZWFkOiEwLGNyZWF0ZTohMCxhcHBlbmQ6ITB9O2JyZWFrfWNhc2VcImF4K1wiOnt0PXtyZWFkOiEwLGNyZWF0ZU5ldzohMCxhcHBlbmQ6ITB9O2JyZWFrfWNhc2VcInJcIjp7dD17cmVhZDohMH07YnJlYWt9Y2FzZVwicitcIjp7dD17cmVhZDohMCx3cml0ZTohMH07YnJlYWt9Y2FzZVwid1wiOnt0PXtjcmVhdGU6ITAsd3JpdGU6ITAsdHJ1bmNhdGU6ITB9O2JyZWFrfWNhc2VcInd4XCI6e3Q9e2NyZWF0ZU5ldzohMCx3cml0ZTohMH07YnJlYWt9Y2FzZVwidytcIjp7dD17Y3JlYXRlOiEwLHdyaXRlOiEwLHRydW5jYXRlOiEwLHJlYWQ6ITB9O2JyZWFrfWNhc2VcInd4K1wiOnt0PXtjcmVhdGVOZXc6ITAsd3JpdGU6ITAscmVhZDohMH07YnJlYWt9Y2FzZVwiYXNcIjp7dD17Y3JlYXRlOiEwLGFwcGVuZDohMH07YnJlYWt9Y2FzZVwiYXMrXCI6e3Q9e2NyZWF0ZTohMCxyZWFkOiEwLGFwcGVuZDohMH07YnJlYWt9Y2FzZVwicnMrXCI6e3Q9e2NyZWF0ZTohMCxyZWFkOiEwLHdyaXRlOiEwfTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGZpbGUgc3lzdGVtIGZsYWc6ICR7ZX1gKX1yZXR1cm4gdH1mdW5jdGlvbiBkcihlKXtyZXR1cm4gbHQoZSksZX1mdW5jdGlvbiB2cihlKXtyZXR1cm4gbHQoZSksKC4uLnQpPT5SZWZsZWN0LmFwcGx5KGUsdGhpcyx0KX12YXIgSXQ9QSgoKT0+e2RlKCk7eWUoKTtkZSgpfSk7dmFyIGNhPXt9O2NlKGNhLHtjcnlwdG86KCk9PlhTLGZzOigpPT5BZSxvczooKT0+V2UsdHJhY2U6KCk9PlFTLHpsaWI6KCk9PnFTfSk7dmFyIFdlLEFlLFhTLHFTLFFTLEZ0PUEoKCk9PntXZT17VVZfVURQX0lQVjZPTkxZOjEsVVZfVURQX1BBUlRJQUw6MixVVl9VRFBfUkVVU0VBRERSOjQsVVZfVURQX01NU0dfQ0hVTks6OCxVVl9VRFBfTU1TR19GUkVFOjE2LFVWX1VEUF9MSU5VWF9SRUNWRVJSOjMyLFVWX1VEUF9SRUNWTU1TRzoyNTYsZGxvcGVuOntSVExEX0xBWlk6MSxSVExEX05PVzoyLFJUTERfR0xPQkFMOjgsUlRMRF9MT0NBTDo0fSxlcnJubzp7RTJCSUc6NyxFQUNDRVM6MTMsRUFERFJJTlVTRTo0OCxFQUREUk5PVEFWQUlMOjQ5LEVBRk5PU1VQUE9SVDo0NyxFQUdBSU46MzUsRUFMUkVBRFk6MzcsRUJBREY6OSxFQkFETVNHOjk0LEVCVVNZOjE2LEVDQU5DRUxFRDo4OSxFQ0hJTEQ6MTAsRUNPTk5BQk9SVEVEOjUzLEVDT05OUkVGVVNFRDo2MSxFQ09OTlJFU0VUOjU0LEVERUFETEs6MTEsRURFU1RBRERSUkVROjM5LEVET006MzMsRURRVU9UOjY5LEVFWElTVDoxNyxFRkFVTFQ6MTQsRUZCSUc6MjcsRUhPU1RVTlJFQUNIOjY1LEVJRFJNOjkwLEVJTFNFUTo5MixFSU5QUk9HUkVTUzozNixFSU5UUjo0LEVJTlZBTDoyMixFSU86NSxFSVNDT05OOjU2LEVJU0RJUjoyMSxFTE9PUDo2MixFTUZJTEU6MjQsRU1MSU5LOjMxLEVNU0dTSVpFOjQwLEVNVUxUSUhPUDo5NSxFTkFNRVRPT0xPTkc6NjMsRU5FVERPV046NTAsRU5FVFJFU0VUOjUyLEVORVRVTlJFQUNIOjUxLEVORklMRToyMyxFTk9CVUZTOjU1LEVOT0RBVEE6OTYsRU5PREVWOjE5LEVOT0VOVDoyLEVOT0VYRUM6OCxFTk9MQ0s6NzcsRU5PTElOSzo5NyxFTk9NRU06MTIsRU5PTVNHOjkxLEVOT1BST1RPT1BUOjQyLEVOT1NQQzoyOCxFTk9TUjo5OCxFTk9TVFI6OTksRU5PU1lTOjc4LEVOT1RDT05OOjU3LEVOT1RESVI6MjAsRU5PVEVNUFRZOjY2LEVOT1RTT0NLOjM4LEVOT1RTVVA6NDUsRU5PVFRZOjI1LEVOWElPOjYsRU9QTk9UU1VQUDoxMDIsRU9WRVJGTE9XOjg0LEVQRVJNOjEsRVBJUEU6MzIsRVBST1RPOjEwMCxFUFJPVE9OT1NVUFBPUlQ6NDMsRVBST1RPVFlQRTo0MSxFUkFOR0U6MzQsRVJPRlM6MzAsRVNQSVBFOjI5LEVTUkNIOjMsRVNUQUxFOjcwLEVUSU1FOjEwMSxFVElNRURPVVQ6NjAsRVRYVEJTWToyNixFV09VTERCTE9DSzozNSxFWERFVjoxOH0sc2lnbmFsczp7U0lHSFVQOjEsU0lHSU5UOjIsU0lHUVVJVDozLFNJR0lMTDo0LFNJR1RSQVA6NSxTSUdBQlJUOjYsU0lHSU9UOjYsU0lHQlVTOjEwLFNJR0ZQRTo4LFNJR0tJTEw6OSxTSUdVU1IxOjMwLFNJR1NFR1Y6MTEsU0lHVVNSMjozMSxTSUdQSVBFOjEzLFNJR0FMUk06MTQsU0lHVEVSTToxNSxTSUdDSExEOjIwLFNJR0NPTlQ6MTksU0lHU1RPUDoxNyxTSUdUU1RQOjE4LFNJR1RUSU46MjEsU0lHQlJFQUs6MjEsU0lHVFRPVToyMixTSUdVUkc6MTYsU0lHWENQVToyNCxTSUdYRlNaOjI1LFNJR1ZUQUxSTToyNixTSUdQUk9GOjI3LFNJR1dJTkNIOjI4LFNJR0lPOjIzLFNJR0lORk86MjksU0lHU1lTOjEyLFNJR0VNVDo3LFNJR1BXUjozMCxTSUdTVEtGTFQ6MTZ9LHByaW9yaXR5OntQUklPUklUWV9MT1c6MTksUFJJT1JJVFlfQkVMT1dfTk9STUFMOjEwLFBSSU9SSVRZX05PUk1BTDowLFBSSU9SSVRZX0FCT1ZFX05PUk1BTDotNyxQUklPUklUWV9ISUdIOi0xNCxQUklPUklUWV9ISUdIRVNUOi0yMH19LEFlPXtVVl9GU19TWU1MSU5LX0RJUjoxLFVWX0ZTX1NZTUxJTktfSlVOQ1RJT046MixPX1JET05MWTowLE9fV1JPTkxZOjEsT19SRFdSOjIsVVZfRElSRU5UX1VOS05PV046MCxVVl9ESVJFTlRfRklMRToxLFVWX0RJUkVOVF9ESVI6MixVVl9ESVJFTlRfTElOSzozLFVWX0RJUkVOVF9GSUZPOjQsVVZfRElSRU5UX1NPQ0tFVDo1LFVWX0RJUkVOVF9DSEFSOjYsVVZfRElSRU5UX0JMT0NLOjcsU19JRk1UOjYxNDQwLFNfSUZSRUc6MzI3NjgsU19JRkRJUjoxNjM4NCxTX0lGQ0hSOjgxOTIsU19JRkJMSzoyNDU3NixTX0lGSUZPOjQwOTYsU19JRkxOSzo0MDk2MCxTX0lGU09DSzo0OTE1MixPX0NSRUFUOjUxMixPX0VYQ0w6MjA0OCxVVl9GU19PX0ZJTEVNQVA6MCxPX05PQ1RUWToxMzEwNzIsT19UUlVOQzoxMDI0LE9fQVBQRU5EOjgsT19ESVJFQ1RPUlk6MTA0ODU3NixPX05PRk9MTE9XOjI1NixPX1NZTkM6MTI4LE9fRFNZTkM6NDE5NDMwNCxPX1NZTUxJTks6MjA5NzE1MixPX05PTkJMT0NLOjQsU19JUldYVTo0NDgsU19JUlVTUjoyNTYsU19JV1VTUjoxMjgsU19JWFVTUjo2NCxTX0lSV1hHOjU2LFNfSVJHUlA6MzIsU19JV0dSUDoxNixTX0lYR1JQOjgsU19JUldYTzo3LFNfSVJPVEg6NCxTX0lXT1RIOjIsU19JWE9USDoxLEZfT0s6MCxSX09LOjQsV19PSzoyLFhfT0s6MSxVVl9GU19DT1BZRklMRV9FWENMOjEsQ09QWUZJTEVfRVhDTDoxLFVWX0ZTX0NPUFlGSUxFX0ZJQ0xPTkU6MixDT1BZRklMRV9GSUNMT05FOjIsVVZfRlNfQ09QWUZJTEVfRklDTE9ORV9GT1JDRTo0LENPUFlGSUxFX0ZJQ0xPTkVfRk9SQ0U6NH0sWFM9e09QRU5TU0xfVkVSU0lPTl9OVU1CRVI6MjY5NDg4MzE5LFNTTF9PUF9BTEw6MjE0NzQ4NTc4MCxTU0xfT1BfQUxMT1dfTk9fREhFX0tFWDoxMDI0LFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT046MjYyMTQ0LFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0U6NDE5NDMwNCxTU0xfT1BfQ0lTQ09fQU5ZQ09OTkVDVDozMjc2OCxTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFOjgxOTIsU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHOjIxNDc0ODM2NDgsU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUzoyMDQ4LFNTTF9PUF9FUEhFTUVSQUxfUlNBOjAsU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVDo0LFNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUjowLFNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUc6MCxTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORzowLFNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUc6MCxTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRzowLFNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHOjAsU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHOjAsU1NMX09QX05PX0NPTVBSRVNTSU9OOjEzMTA3MixTU0xfT1BfTk9fRU5DUllQVF9USEVOX01BQzo1MjQyODgsU1NMX09QX05PX1FVRVJZX01UVTo0MDk2LFNTTF9PUF9OT19SRU5FR09USUFUSU9OOjEwNzM3NDE4MjQsU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OOjY1NTM2LFNTTF9PUF9OT19TU0x2MjowLFNTTF9PUF9OT19TU0x2MzozMzU1NDQzMixTU0xfT1BfTk9fVElDS0VUOjE2Mzg0LFNTTF9PUF9OT19UTFN2MTo2NzEwODg2NCxTU0xfT1BfTk9fVExTdjFfMToyNjg0MzU0NTYsU1NMX09QX05PX1RMU3YxXzI6MTM0MjE3NzI4LFNTTF9PUF9OT19UTFN2MV8zOjUzNjg3MDkxMixTU0xfT1BfUEtDUzFfQ0hFQ0tfMTowLFNTTF9PUF9QS0NTMV9DSEVDS18yOjAsU1NMX09QX1BSSU9SSVRJWkVfQ0hBQ0hBOjIwOTcxNTIsU1NMX09QX1NJTkdMRV9ESF9VU0U6MCxTU0xfT1BfU0lOR0xFX0VDREhfVVNFOjAsU1NMX09QX1NTTEVBWV8wODBfQ0xJRU5UX0RIX0JVRzowLFNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUc6MCxTU0xfT1BfVExTX0JMT0NLX1BBRERJTkdfQlVHOjAsU1NMX09QX1RMU19ENV9CVUc6MCxTU0xfT1BfVExTX1JPTExCQUNLX0JVRzo4Mzg4NjA4LEVOR0lORV9NRVRIT0RfUlNBOjEsRU5HSU5FX01FVEhPRF9EU0E6MixFTkdJTkVfTUVUSE9EX0RIOjQsRU5HSU5FX01FVEhPRF9SQU5EOjgsRU5HSU5FX01FVEhPRF9FQzoyMDQ4LEVOR0lORV9NRVRIT0RfQ0lQSEVSUzo2NCxFTkdJTkVfTUVUSE9EX0RJR0VTVFM6MTI4LEVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUzo1MTIsRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFM6MTAyNCxFTkdJTkVfTUVUSE9EX0FMTDo2NTUzNSxFTkdJTkVfTUVUSE9EX05PTkU6MCxESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFJTQV9QU1NfU0FMVExFTl9ESUdFU1Q6LTEsUlNBX1BTU19TQUxUTEVOX01BWF9TSUdOOi0yLFJTQV9QU1NfU0FMVExFTl9BVVRPOi0yLGRlZmF1bHRDb3JlQ2lwaGVyTGlzdDpcIlRMU19BRVNfMjU2X0dDTV9TSEEzODQ6VExTX0NIQUNIQTIwX1BPTFkxMzA1X1NIQTI1NjpUTFNfQUVTXzEyOF9HQ01fU0hBMjU2OkVDREhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NjpFQ0RIRS1FQ0RTQS1BRVMxMjgtR0NNLVNIQTI1NjpFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQ6RUNESEUtRUNEU0EtQUVTMjU2LUdDTS1TSEEzODQ6REhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NjpFQ0RIRS1SU0EtQUVTMTI4LVNIQTI1NjpESEUtUlNBLUFFUzEyOC1TSEEyNTY6RUNESEUtUlNBLUFFUzI1Ni1TSEEzODQ6REhFLVJTQS1BRVMyNTYtU0hBMzg0OkVDREhFLVJTQS1BRVMyNTYtU0hBMjU2OkRIRS1SU0EtQUVTMjU2LVNIQTI1NjpISUdIOiFhTlVMTDohZU5VTEw6IUVYUE9SVDohREVTOiFSQzQ6IU1ENTohUFNLOiFTUlA6IUNBTUVMTElBXCIsVExTMV9WRVJTSU9OOjc2OSxUTFMxXzFfVkVSU0lPTjo3NzAsVExTMV8yX1ZFUlNJT046NzcxLFRMUzFfM19WRVJTSU9OOjc3MixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9LHFTPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9NRU1fRVJST1I6LTQsWl9CVUZfRVJST1I6LTUsWl9WRVJTSU9OX0VSUk9SOi02LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWkxJQl9WRVJOVU06NDc4NCxERUZMQVRFOjEsSU5GTEFURToyLEdaSVA6MyxHVU5aSVA6NCxERUZMQVRFUkFXOjUsSU5GTEFURVJBVzo2LFVOWklQOjcsQlJPVExJX0RFQ09ERTo4LEJST1RMSV9FTkNPREU6OSxaX01JTl9XSU5ET1dCSVRTOjgsWl9NQVhfV0lORE9XQklUUzoxNSxaX0RFRkFVTFRfV0lORE9XQklUUzoxNSxaX01JTl9DSFVOSzo2NCxaX01BWF9DSFVOSzoxLzAsWl9ERUZBVUxUX0NIVU5LOjE2Mzg0LFpfTUlOX01FTUxFVkVMOjEsWl9NQVhfTUVNTEVWRUw6OSxaX0RFRkFVTFRfTUVNTEVWRUw6OCxaX01JTl9MRVZFTDotMSxaX01BWF9MRVZFTDo5LFpfREVGQVVMVF9MRVZFTDotMSxCUk9UTElfT1BFUkFUSU9OX1BST0NFU1M6MCxCUk9UTElfT1BFUkFUSU9OX0ZMVVNIOjEsQlJPVExJX09QRVJBVElPTl9GSU5JU0g6MixCUk9UTElfT1BFUkFUSU9OX0VNSVRfTUVUQURBVEE6MyxCUk9UTElfUEFSQU1fTU9ERTowLEJST1RMSV9NT0RFX0dFTkVSSUM6MCxCUk9UTElfTU9ERV9URVhUOjEsQlJPVExJX01PREVfRk9OVDoyLEJST1RMSV9ERUZBVUxUX01PREU6MCxCUk9UTElfUEFSQU1fUVVBTElUWToxLEJST1RMSV9NSU5fUVVBTElUWTowLEJST1RMSV9NQVhfUVVBTElUWToxMSxCUk9UTElfREVGQVVMVF9RVUFMSVRZOjExLEJST1RMSV9QQVJBTV9MR1dJTjoyLEJST1RMSV9NSU5fV0lORE9XX0JJVFM6MTAsQlJPVExJX01BWF9XSU5ET1dfQklUUzoyNCxCUk9UTElfTEFSR0VfTUFYX1dJTkRPV19CSVRTOjMwLEJST1RMSV9ERUZBVUxUX1dJTkRPVzoyMixCUk9UTElfUEFSQU1fTEdCTE9DSzozLEJST1RMSV9NSU5fSU5QVVRfQkxPQ0tfQklUUzoxNixCUk9UTElfTUFYX0lOUFVUX0JMT0NLX0JJVFM6MjQsQlJPVExJX1BBUkFNX0RJU0FCTEVfTElURVJBTF9DT05URVhUX01PREVMSU5HOjQsQlJPVExJX1BBUkFNX1NJWkVfSElOVDo1LEJST1RMSV9QQVJBTV9MQVJHRV9XSU5ET1c6NixCUk9UTElfUEFSQU1fTlBPU1RGSVg6NyxCUk9UTElfUEFSQU1fTkRJUkVDVDo4LEJST1RMSV9ERUNPREVSX1JFU1VMVF9FUlJPUjowLEJST1RMSV9ERUNPREVSX1JFU1VMVF9TVUNDRVNTOjEsQlJPVExJX0RFQ09ERVJfUkVTVUxUX05FRURTX01PUkVfSU5QVVQ6MixCUk9UTElfREVDT0RFUl9SRVNVTFRfTkVFRFNfTU9SRV9PVVRQVVQ6MyxCUk9UTElfREVDT0RFUl9QQVJBTV9ESVNBQkxFX1JJTkdfQlVGRkVSX1JFQUxMT0NBVElPTjowLEJST1RMSV9ERUNPREVSX1BBUkFNX0xBUkdFX1dJTkRPVzoxLEJST1RMSV9ERUNPREVSX05PX0VSUk9SOjAsQlJPVExJX0RFQ09ERVJfU1VDQ0VTUzoxLEJST1RMSV9ERUNPREVSX05FRURTX01PUkVfSU5QVVQ6MixCUk9UTElfREVDT0RFUl9ORUVEU19NT1JFX09VVFBVVDozLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9FWFVCRVJBTlRfTklCQkxFOi0xLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9SRVNFUlZFRDotMixCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfRVhVQkVSQU5UX01FVEFfTklCQkxFOi0zLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9TSU1QTEVfSFVGRk1BTl9BTFBIQUJFVDotNCxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfU0lNUExFX0hVRkZNQU5fU0FNRTotNSxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQ0xfU1BBQ0U6LTYsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0hVRkZNQU5fU1BBQ0U6LTcsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0NPTlRFWFRfTUFQX1JFUEVBVDotOCxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQkxPQ0tfTEVOR1RIXzE6LTksQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0JMT0NLX0xFTkdUSF8yOi0xMCxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfVFJBTlNGT1JNOi0xMSxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfRElDVElPTkFSWTotMTIsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1dJTkRPV19CSVRTOi0xMyxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfUEFERElOR18xOi0xNCxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfUEFERElOR18yOi0xNSxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfRElTVEFOQ0U6LTE2LEJST1RMSV9ERUNPREVSX0VSUk9SX0RJQ1RJT05BUllfTk9UX1NFVDotMTksQlJPVExJX0RFQ09ERVJfRVJST1JfSU5WQUxJRF9BUkdVTUVOVFM6LTIwLEJST1RMSV9ERUNPREVSX0VSUk9SX0FMTE9DX0NPTlRFWFRfTU9ERVM6LTIxLEJST1RMSV9ERUNPREVSX0VSUk9SX0FMTE9DX1RSRUVfR1JPVVBTOi0yMixCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19DT05URVhUX01BUDotMjUsQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfUklOR19CVUZGRVJfMTotMjYsQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfUklOR19CVUZGRVJfMjotMjcsQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfQkxPQ0tfVFlQRV9UUkVFUzotMzAsQlJPVExJX0RFQ09ERVJfRVJST1JfVU5SRUFDSEFCTEU6LTMxfSxRUz17VFJBQ0VfRVZFTlRfUEhBU0VfQkVHSU46NjYsVFJBQ0VfRVZFTlRfUEhBU0VfRU5EOjY5LFRSQUNFX0VWRU5UX1BIQVNFX0NPTVBMRVRFOjg4LFRSQUNFX0VWRU5UX1BIQVNFX0lOU1RBTlQ6NzMsVFJBQ0VfRVZFTlRfUEhBU0VfQVNZTkNfQkVHSU46ODMsVFJBQ0VfRVZFTlRfUEhBU0VfQVNZTkNfU1RFUF9JTlRPOjg0LFRSQUNFX0VWRU5UX1BIQVNFX0FTWU5DX1NURVBfUEFTVDoxMTIsVFJBQ0VfRVZFTlRfUEhBU0VfQVNZTkNfRU5EOjcwLFRSQUNFX0VWRU5UX1BIQVNFX05FU1RBQkxFX0FTWU5DX0JFR0lOOjk4LFRSQUNFX0VWRU5UX1BIQVNFX05FU1RBQkxFX0FTWU5DX0VORDoxMDEsVFJBQ0VfRVZFTlRfUEhBU0VfTkVTVEFCTEVfQVNZTkNfSU5TVEFOVDoxMTAsVFJBQ0VfRVZFTlRfUEhBU0VfRkxPV19CRUdJTjoxMTUsVFJBQ0VfRVZFTlRfUEhBU0VfRkxPV19TVEVQOjExNixUUkFDRV9FVkVOVF9QSEFTRV9GTE9XX0VORDoxMDIsVFJBQ0VfRVZFTlRfUEhBU0VfTUVUQURBVEE6NzcsVFJBQ0VfRVZFTlRfUEhBU0VfQ09VTlRFUjo2NyxUUkFDRV9FVkVOVF9QSEFTRV9TQU1QTEU6ODAsVFJBQ0VfRVZFTlRfUEhBU0VfQ1JFQVRFX09CSkVDVDo3OCxUUkFDRV9FVkVOVF9QSEFTRV9TTkFQU0hPVF9PQkpFQ1Q6NzksVFJBQ0VfRVZFTlRfUEhBU0VfREVMRVRFX09CSkVDVDo2OCxUUkFDRV9FVkVOVF9QSEFTRV9NRU1PUllfRFVNUDoxMTgsVFJBQ0VfRVZFTlRfUEhBU0VfTUFSSzo4MixUUkFDRV9FVkVOVF9QSEFTRV9DTE9DS19TWU5DOjk5LFRSQUNFX0VWRU5UX1BIQVNFX0VOVEVSX0NPTlRFWFQ6NDAsVFJBQ0VfRVZFTlRfUEhBU0VfTEVBVkVfQ09OVEVYVDo0MSxUUkFDRV9FVkVOVF9QSEFTRV9MSU5LX0lEUzo2MX19KTtmdW5jdGlvbiBocihlKXtsZXQgdD0hMTtyZXR1cm4gZnVuY3Rpb24oLi4ucil7dHx8KHQ9ITAsUmVmbGVjdC5hcHBseShlLHRoaXMscikpfX1mdW5jdGlvbiBsYSgpe2xldCBlLHQ7cmV0dXJue3Byb21pc2U6bmV3IFByb21pc2UoKG4sbyk9PntlPW4sdD1vfSkscmVzb2x2ZTplLHJlamVjdDp0fX1mdW5jdGlvbiB3KGUpe2lmKGR0KGUsXCJvcmlnaW5hbFwiKSxlW1RuXSl7bGV0IG49ZVtUbl07cmV0dXJuIGR0KG4sXCJ1dGlsLnByb21pc2lmeS5jdXN0b21cIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sVG4se3ZhbHVlOm4sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KX1sZXQgdD1lW1pTXTtmdW5jdGlvbiByKC4uLm4pe3JldHVybiBuZXcgUHJvbWlzZSgobyxpKT0+e24ucHVzaCgocywuLi5hKT0+e2lmKHMpcmV0dXJuIGkocyk7aWYodCE9PXZvaWQgMCYmYS5sZW5ndGg+MSl7bGV0IGM9e307Zm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspY1t0W3VdXT1hW3VdO28oYyl9ZWxzZSBvKGFbMF0pfSksUmVmbGVjdC5hcHBseShlLHRoaXMsbil9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixUbix7dmFsdWU6cixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZSkpfXZhciBHRCx6UyxUbixaUyx6PUEoKCk9PntkZSgpO2VhKCk7R0Q9U3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpLHpTPU9iamVjdC5jcmVhdGUobnVsbCk7elMuZW51bWVyYWJsZT0hMDtUbj1TeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwucHJvbWlzaWZ5LmN1c3RvbVwiKSxaUz1TeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwucHJvbWlzaWZ5LmN1c3RvbUFyZ3NcIik7dy5jdXN0b209VG59KTt2YXIgWW8sdWE9QSgoKT0+e1lvPSh1PT4odVt1LkFTQ0lJPTBdPVwiQVNDSUlcIix1W3UuVVRGOD0xXT1cIlVURjhcIix1W3UuQkFTRTY0PTJdPVwiQkFTRTY0XCIsdVt1LlVDUzI9M109XCJVQ1MyXCIsdVt1LkJJTkFSWT00XT1cIkJJTkFSWVwiLHVbdS5IRVg9NV09XCJIRVhcIix1W3UuQlVGRkVSPTZdPVwiQlVGRkVSXCIsdVt1LkJBU0U2NFVSTD03XT1cIkJBU0U2NFVSTFwiLHVbdS5MQVRJTjE9NF09XCJMQVRJTjFcIix1KSkoWW98fHt9KX0pO3ZhciBmYT17fTtjZShmYSx7ZGVmYXVsdDooKT0+SlMsZW5jb2RpbmdzOigpPT5udH0pO3ZhciBudCxKUyxwYT1BKCgpPT57dWEoKTtudD1bXTtudFswXT1cImFzY2lpXCI7bnRbMl09XCJiYXNlNjRcIjtudFs3XT1cImJhc2U2NHVybFwiO250WzZdPVwiYnVmZmVyXCI7bnRbNV09XCJoZXhcIjtudFs0XT1cImxhdGluMVwiO250WzNdPVwidXRmMTZsZVwiO250WzFdPVwidXRmOFwiO0pTPXtlbmNvZGluZ3M6bnR9fSk7dmFyIEVhPXt9O2NlKEVhLHtkZWZhdWx0OigpPT50ZyxpbmRleE9mQnVmZmVyOigpPT5YZSxpbmRleE9mTnVtYmVyOigpPT5qbyxudW1iZXJUb0J5dGVzOigpPT5SYX0pO2Z1bmN0aW9uIFJhKGUpe2lmKGU9PT0wKXJldHVybiBuZXcgVWludDhBcnJheShbMF0pO2xldCB0PVtdO2Zvcih0LnVuc2hpZnQoZSYyNTUpO2U+PTI1NjspZT1lPj4+OCx0LnVuc2hpZnQoZSYyNTUpO3JldHVybiBuZXcgVWludDhBcnJheSh0KX1mdW5jdGlvbiBlZyhlLHQscil7cj1yPmUubGVuZ3RoP2UubGVuZ3RoOnI7bGV0IG49ZS5zbGljZSgwLHIrdC5sZW5ndGgpLG89bi5sZW5ndGgtMSxpPXQubGVuZ3RoLTEscz0tMSxhPTAsYz0tMTtmb3IobGV0IHU9MDt1PD1vO3UrKyl7aWYobltvLXVdPT09dFtpLWFdKXM9PT0tMSYmKHM9dSksYSsrO2Vsc2V7YT0wLHMhPT0tMSYmKHU9cysxLHM9LTEpO2NvbnRpbnVlfWlmKGE9PT10Lmxlbmd0aCl7Yz11O2JyZWFrfX1yZXR1cm4gYz09PS0xP2M6by1jfWZ1bmN0aW9uIFhlKGUsdCxyLG4sbyl7aWYoIVlvW25dPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBlbmNvZGluZyBjb2RlICR7bn1gKTtyZXR1cm4gbz90Lmxlbmd0aD09PTA/cjw9ZS5sZW5ndGg/cjplLmxlbmd0aDp0cChlLHQscik6KHI8MCYmKHI9ZS5sZW5ndGgrciksdC5sZW5ndGg9PT0wP3I8PWUubGVuZ3RoP3I6ZS5sZW5ndGg6ZWcoZSx0LHIpKX1mdW5jdGlvbiBqbyhlLHQscixuKXtpZihSYSh0KS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoXCJNdWx0aSBieXRlIG51bWJlciBzZWFyY2ggaXMgbm90IHN1cHBvcnRlZFwiKTtyZXR1cm4gWGUoZSxSYSh0KSxyLDEsbil9dmFyIHRnLEtvPUEoKCk9Pnt1YSgpO3NhKCk7dGc9e2luZGV4T2ZCdWZmZXI6WGUsaW5kZXhPZk51bWJlcjpqb319KTtmdW5jdGlvbiBEbihlKXtsZXQgdD10eXBlb2YgZT09XCJzdHJpbmdcIj9uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZSk6ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/ZTpuZXcgVWludDhBcnJheShlKSxyPVwiXCIsbixvPXQubGVuZ3RoO2ZvcihuPTI7bjxvO24rPTMpcis9dnRbdFtuLTJdPj4yXSxyKz12dFsodFtuLTJdJjMpPDw0fHRbbi0xXT4+NF0scis9dnRbKHRbbi0xXSYxNSk8PDJ8dFtuXT4+Nl0scis9dnRbdFtuXSY2M107cmV0dXJuIG49PT1vKzEmJihyKz12dFt0W24tMl0+PjJdLHIrPXZ0Wyh0W24tMl0mMyk8PDRdLHIrPVwiPT1cIiksbj09PW8mJihyKz12dFt0W24tMl0+PjJdLHIrPXZ0Wyh0W24tMl0mMyk8PDR8dFtuLTFdPj40XSxyKz12dFsodFtuLTFdJjE1KTw8Ml0scis9XCI9XCIpLHJ9ZnVuY3Rpb24gWG8oZSl7bGV0IHQ9YXRvYihlKSxyPXQubGVuZ3RoLG49bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCBvPTA7bzxyO28rKyluW29dPXQuY2hhckNvZGVBdChvKTtyZXR1cm4gbn12YXIgdnQscW89QSgoKT0+e3Z0PVtcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIixcIitcIixcIi9cIl19KTtmdW5jdGlvbiByZyhlKXtpZihlLmxlbmd0aCU0PT09MilyZXR1cm4gZStcIj09XCI7aWYoZS5sZW5ndGglND09PTMpcmV0dXJuIGUrXCI9XCI7aWYoZS5sZW5ndGglND09PTEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyFcIik7cmV0dXJuIGV9ZnVuY3Rpb24gbmcoZSl7aWYoIS9eWy1fQS1aMC05XSo/PXswLDJ9JC9pLnRlc3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBkZWNvZGUgYmFzZTY0dXJsOiBpbnZhbGlkIGNoYXJhY3RlclwiKTtyZXR1cm4gcmcoZSkucmVwbGFjZSgvXFwtL2csXCIrXCIpLnJlcGxhY2UoL18vZyxcIi9cIil9ZnVuY3Rpb24gb2coZSl7cmV0dXJuIGUucmVwbGFjZSgvPS9nLFwiXCIpLnJlcGxhY2UoL1xcKy9nLFwiLVwiKS5yZXBsYWNlKC9cXC8vZyxcIl9cIil9ZnVuY3Rpb24gZGEoZSl7cmV0dXJuIG9nKERuKGUpKX1mdW5jdGlvbiBjcChlKXtyZXR1cm4gWG8obmcoZSkpfXZhciBoYT1BKCgpPT57cW8oKX0pO2Z1bmN0aW9uIFdyKGUpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaChlLmNoYXJDb2RlQXQocikmMjU1KTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodCl9ZnVuY3Rpb24gUW8oZSl7cmV0dXJuIGU9dXAoZSksZT1lLnJlcGxhY2VBbGwoXCItXCIsXCIrXCIpLnJlcGxhY2VBbGwoXCJfXCIsXCIvXCIpLFhvKGUpfWZ1bmN0aW9uIHVwKGUpe2lmKGU9ZS5zcGxpdChcIj1cIilbMF0sZT1lLnRyaW0oKS5yZXBsYWNlKGlnLFwiXCIpLGUubGVuZ3RoPDIpcmV0dXJuXCJcIjtmb3IoO2UubGVuZ3RoJTQhPT0wOyllPWUrXCI9XCI7cmV0dXJuIGV9ZnVuY3Rpb24gem8oZSl7cmV0dXJuIGU9dXAoZSksZT1lLnJlcGxhY2VBbGwoXCIrXCIsXCItXCIpLnJlcGxhY2VBbGwoXCIvXCIsXCJfXCIpLGNwKGUpfWZ1bmN0aW9uIFpvKGUpe2xldCB0PW5ldyBVaW50OEFycmF5KE1hdGguZmxvb3IoKGV8fFwiXCIpLmxlbmd0aC8yKSkscjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj1OdW1iZXIucGFyc2VJbnQoZVtyKjJdLDE2KSxvPU51bWJlci5wYXJzZUludChlW3IqMisxXSwxNik7aWYoTnVtYmVyLmlzTmFOKG4pJiZOdW1iZXIuaXNOYU4obykpYnJlYWs7dFtyXT1uPDw0fG99cmV0dXJuIG5ldyBVaW50OEFycmF5KHI9PT10Lmxlbmd0aD90OnQuc2xpY2UoMCxyKSl9ZnVuY3Rpb24gYm4oZSx0KXtsZXQgcixuLG8saT1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK3Mpcj1lLmNoYXJDb2RlQXQocyksbj1yPj44LG89ciUyNTYsaS5wdXNoKG8pLGkucHVzaChuKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaSl9ZnVuY3Rpb24gT2EoZSl7bGV0IHQ9XCJcIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbcl0mMTI3KTtyZXR1cm4gdH1mdW5jdGlvbiBtYShlKXtsZXQgdD1cIlwiO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGgtMTtyKz0yKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXStlW3IrMV0qMjU2KTtyZXR1cm4gdH12YXIgaWcsU2E9QSgoKT0+e3FvKCk7aGEoKTtpZz0vW14rLzAtOUEtWmEtei1fXS9nfSk7ZnVuY3Rpb24gUnAoZSx0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzVdO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmSCh0LGUubGVuZ3RoLTYpLHIrZVsrK3RdKjIqKjgrZVsrK3RdKjIqKjE2K2VbKyt0XSoyKioyNCsoZVsrK3RdK24qMioqOCkqMioqMzJ9ZnVuY3Rpb24gRXAoZSx0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzRdO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmSCh0LGUubGVuZ3RoLTUpLHIrZVsrK3RdKjIqKjgrZVsrK3RdKjIqKjE2K2VbKyt0XSoyKioyNCtuKjIqKjMyfWZ1bmN0aW9uIF9wKGUsdD0wKXtZKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCsyXTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCxlLmxlbmd0aC0zKSxyK2VbKyt0XSoyKio4K24qMioqMTZ9ZnVuY3Rpb24gZHAoZSx0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzVdO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmSCh0LGUubGVuZ3RoLTYpLChyKjIqKjgrZVsrK3RdKSoyKiozMitlWysrdF0qMioqMjQrZVsrK3RdKjIqKjE2K2VbKyt0XSoyKio4K259ZnVuY3Rpb24gaHAoZSx0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzRdO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmSCh0LGUubGVuZ3RoLTUpLHIqMioqMzIrZVsrK3RdKjIqKjI0K2VbKyt0XSoyKioxNitlWysrdF0qMioqOCtufWZ1bmN0aW9uIE9wKGUsdD0wKXtZKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCsyXTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCxlLmxlbmd0aC0zKSxyKjIqKjE2K2VbKyt0XSoyKio4K259ZnVuY3Rpb24gbXAoZT0wKXtZKGUsXCJvZmZzZXRcIik7bGV0IHQ9dGhpc1tlXSxyPXRoaXNbZSsxXTtyZXR1cm4odD09PXZvaWQgMHx8cj09PXZvaWQgMCkmJkgoZSx0aGlzLmxlbmd0aC0yKSx0KjIqKjgrcn1mdW5jdGlvbiBTcChlPTApe1koZSxcIm9mZnNldFwiKTtsZXQgdD10aGlzW2VdLHI9dGhpc1tlKzNdO3JldHVybih0PT09dm9pZCAwfHxyPT09dm9pZCAwKSYmSChlLHRoaXMubGVuZ3RoLTQpLHQqMioqMjQrdGhpc1srK2VdKjIqKjE2K3RoaXNbKytlXSoyKio4K3J9ZnVuY3Rpb24gZ2EoZSx0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzddO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmSCh0LGUubGVuZ3RoLTgpLFpbN109cixaWzZdPWVbKyt0XSxaWzVdPWVbKyt0XSxaWzRdPWVbKyt0XSxaWzNdPWVbKyt0XSxaWzJdPWVbKyt0XSxaWzFdPWVbKyt0XSxaWzBdPW4sQ25bMF19ZnVuY3Rpb24gQWEoZSx0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzddO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmSCh0LGUubGVuZ3RoLTgpLFpbMF09cixaWzFdPWVbKyt0XSxaWzJdPWVbKyt0XSxaWzNdPWVbKyt0XSxaWzRdPWVbKyt0XSxaWzVdPWVbKyt0XSxaWzZdPWVbKyt0XSxaWzddPW4sQ25bMF19ZnVuY3Rpb24geGEoZSx0LHI9MCl7cmV0dXJuIHQ9K3Qsd24oZSxyLDcpLENuWzBdPXQsZVtyKytdPVpbMF0sZVtyKytdPVpbMV0sZVtyKytdPVpbMl0sZVtyKytdPVpbM10sZVtyKytdPVpbNF0sZVtyKytdPVpbNV0sZVtyKytdPVpbNl0sZVtyKytdPVpbN10scn1mdW5jdGlvbiBOYShlLHQscj0wKXtyZXR1cm4gdD0rdCx3bihlLHIsNyksQ25bMF09dCxlW3IrK109Wls3XSxlW3IrK109Wls2XSxlW3IrK109Wls1XSxlW3IrK109Wls0XSxlW3IrK109WlszXSxlW3IrK109WlsyXSxlW3IrK109WlsxXSxlW3IrK109WlswXSxyfWZ1bmN0aW9uIElhKGUsdD0wKXtZKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCszXTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCxlLmxlbmd0aC00KSxUZVszXT1yLFRlWzJdPWVbKyt0XSxUZVsxXT1lWysrdF0sVGVbMF09bixWclswXX1mdW5jdGlvbiB5YShlLHQ9MCl7WSh0LFwib2Zmc2V0XCIpO2xldCByPWVbdF0sbj1lW3QrM107cmV0dXJuKHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZIKHQsZS5sZW5ndGgtNCksVGVbMF09cixUZVsxXT1lWysrdF0sVGVbMl09ZVsrK3RdLFRlWzNdPW4sVnJbMF19ZnVuY3Rpb24gVGEoZSx0LHI9MCl7cmV0dXJuIHQ9K3Qsd24oZSxyLDMpLFZyWzBdPXQsZVtyKytdPVRlWzBdLGVbcisrXT1UZVsxXSxlW3IrK109VGVbMl0sZVtyKytdPVRlWzNdLHJ9ZnVuY3Rpb24gRGEoZSx0LHI9MCl7cmV0dXJuIHQ9K3Qsd24oZSxyLDMpLFZyWzBdPXQsZVtyKytdPVRlWzNdLGVbcisrXT1UZVsyXSxlW3IrK109VGVbMV0sZVtyKytdPVRlWzBdLHJ9ZnVuY3Rpb24gZ3AoZSx0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzJdOyhyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmSCh0LGUubGVuZ3RoLTMpO2xldCBvPXIrZVsrK3RdKjIqKjgrbioyKioxNjtyZXR1cm4gb3wobyYyKioyMykqNTEwfWZ1bmN0aW9uIEFwKGUsdD0wKXtZKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCs0XTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCxlLmxlbmd0aC01KSwobnwobiYyKio3KSozMzU1NDQzMCkqMioqMzIrcitlWysrdF0qMioqOCtlWysrdF0qMioqMTYrZVsrK3RdKjIqKjI0fWZ1bmN0aW9uIHhwKGUsdD0wKXtZKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCs1XTsocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCxlLmxlbmd0aC02KTtsZXQgbz1lW3QrNF0rbioyKio4O3JldHVybihvfChvJjIqKjE1KSoxMzEwNzApKjIqKjMyK3IrZVsrK3RdKjIqKjgrZVsrK3RdKjIqKjE2K2VbKyt0XSoyKioyNH1mdW5jdGlvbiBOcChlLHQ9MCl7WSh0LFwib2Zmc2V0XCIpO2xldCByPWVbdF0sbj1lW3QrMl07KHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZIKHQsZS5sZW5ndGgtMyk7bGV0IG89cioyKioxNitlWysrdF0qMioqOCtuO3JldHVybiBvfChvJjIqKjIzKSo1MTB9ZnVuY3Rpb24gSXAoZSx0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzVdOyhyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmSCh0LGUubGVuZ3RoLTYpO2xldCBvPWVbKyt0XStyKjIqKjg7cmV0dXJuKG98KG8mMioqMTUpKjEzMTA3MCkqMioqMzIrZVsrK3RdKjIqKjI0K2VbKyt0XSoyKioxNitlWysrdF0qMioqOCtufWZ1bmN0aW9uIHlwKGUsdD0wKXtZKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCs0XTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCxlLmxlbmd0aC01KSwocnwociYyKio3KSozMzU1NDQzMCkqMioqMzIrZVsrK3RdKjIqKjI0K2VbKyt0XSoyKioxNitlWysrdF0qMioqOCtufWZ1bmN0aW9uIEpvKGUpe3JldHVybiBwcC5lbmNvZGUoZSkubGVuZ3RofWZ1bmN0aW9uIGZwKGUsdCl7cmV0dXJuIGUuY2hhckNvZGVBdCh0LTEpPT09NjEmJnQtLSx0PjEmJmUuY2hhckNvZGVBdCh0LTEpPT09NjEmJnQtLSx0KjM+Pj4yfWZ1bmN0aW9uIExuKGUpe3N3aXRjaChlPVN0cmluZyhlKS50b0xvd2VyQ2FzZSgpLGUubGVuZ3RoKXtjYXNlIDQ6aWYoZT09PVwidXRmOFwiKXJldHVybiBvdC51dGY4O2lmKGU9PT1cInVjczJcIilyZXR1cm4gb3QudWNzMjticmVhaztjYXNlIDU6aWYoZT09PVwidXRmLThcIilyZXR1cm4gb3QudXRmODtpZihlPT09XCJhc2NpaVwiKXJldHVybiBvdC5hc2NpaTtpZihlPT09XCJ1Y3MtMlwiKXJldHVybiBvdC51Y3MyO2JyZWFrO2Nhc2UgNzppZihlPT09XCJ1dGYxNmxlXCIpcmV0dXJuIG90LnV0ZjE2bGU7YnJlYWs7Y2FzZSA4OmlmKGU9PT1cInV0Zi0xNmxlXCIpcmV0dXJuIG90LnV0ZjE2bGU7YnJlYWs7Y2FzZSA2OmlmKGU9PT1cImxhdGluMVwifHxlPT09XCJiaW5hcnlcIilyZXR1cm4gb3QubGF0aW4xO2lmKGU9PT1cImJhc2U2NFwiKXJldHVybiBvdC5iYXNlNjQ7Y2FzZSAzOmlmKGU9PT1cImhleFwiKXJldHVybiBvdC5oZXg7YnJlYWs7Y2FzZSA5OmlmKGU9PT1cImJhc2U2NHVybFwiKXJldHVybiBvdC5iYXNlNjR1cmw7YnJlYWt9fWZ1bmN0aW9uIFRwKGUsdCxyLG4sbyl7by1uPnQubGVuZ3RoLXImJihvPW4rdC5sZW5ndGgtcik7bGV0IGk9by1uLHM9ZS5sZW5ndGgtbjtyZXR1cm4gaT5zJiYoaT1zKSwobiE9PTB8fG88ZS5sZW5ndGgpJiYoZT1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrbixpKSksdC5zZXQoZSxyKSxpfWZ1bmN0aW9uIEgoZSx0LHIpe3Rocm93IE1hdGguZmxvb3IoZSkhPT1lPyhZKGUsciksbmV3IEQuRVJSX09VVF9PRl9SQU5HRShyfHxcIm9mZnNldFwiLFwiYW4gaW50ZWdlclwiLGUpKTp0PDA/bmV3IEQuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyBELkVSUl9PVVRfT0ZfUkFOR0Uocnx8XCJvZmZzZXRcIixgPj0gJHtyPzE6MH0gYW5kIDw9ICR7dH1gLGUpfWZ1bmN0aW9uIFkoZSx0KXtpZih0eXBlb2YgZSE9XCJudW1iZXJcIil0aHJvdyBuZXcgRC5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0LFwibnVtYmVyXCIsZSl9ZnVuY3Rpb24gd24oZSx0LHIpe1kodCxcIm9mZnNldFwiKSwoZVt0XT09PXZvaWQgMHx8ZVt0K3JdPT09dm9pZCAwKSYmSCh0LGUubGVuZ3RoLShyKzEpKX1mdW5jdGlvbiB1dChlLHQscixuLG8saSl7aWYoZT5yfHxlPHQpe2xldCBzPXR5cGVvZiB0PT1cImJpZ2ludFwiP1wiblwiOlwiXCIsYTt0aHJvdyBpPjM/dD09PTB8fHQ9PT0wbj9hPWA+PSAwJHtzfSBhbmQgPCAyJHtzfSAqKiAkeyhpKzEpKjh9JHtzfWA6YT1gPj0gLSgyJHtzfSAqKiAkeyhpKzEpKjgtMX0ke3N9KSBhbmQgPCAyJHtzfSAqKiAkeyhpKzEpKjgtMX0ke3N9YDphPWA+PSAke3R9JHtzfSBhbmQgPD0gJHtyfSR7c31gLG5ldyBELkVSUl9PVVRfT0ZfUkFOR0UoXCJ2YWx1ZVwiLGEsZSl9d24obixvLGkpfWZ1bmN0aW9uIGVpKGUsdCl7cmV0dXJuIGU9K2UsIU51bWJlci5pc05hTihlKSYmZT49TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVImJmU8PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSP2UlMT09PTA/ZTpNYXRoLmZsb29yKGUpOnR9ZnVuY3Rpb24gT3IoZSx0LHIsbixvKXtpZih0PSt0LFkocixcIm9mZnNldFwiKSx0Pm98fHQ8bil0aHJvdyBuZXcgRC5FUlJfT1VUX09GX1JBTkdFKFwidmFsdWVcIixgPj0gJHtufSBhbmQgPD0gJHtvfWAsdCk7cmV0dXJuIGVbcl09PT12b2lkIDAmJkgocixlLmxlbmd0aC0xKSxlW3JdPXQscisxfWZ1bmN0aW9uIFBuKGUsdCxyLG4sbyl7cmV0dXJuIHQ9K3QsdXQodCxuLG8sZSxyLDEpLGVbcisrXT10Pj4+OCxlW3IrK109dCxyfWZ1bmN0aW9uIERwKGUsdCxyLG4sbyl7cmV0dXJuIHQ9K3QsdXQodCxuLG8sZSxyLDMpLGVbcisrXT10LHQ9dD4+PjgsZVtyKytdPXQsdD10Pj4+OCxlW3IrK109dCx0PXQ+Pj44LGVbcisrXT10LHJ9ZnVuY3Rpb24gVW4oZSx0LHIsbixvKXtyZXR1cm4gdD0rdCx1dCh0LG4sbyxlLHIsMSksZVtyKytdPXQsZVtyKytdPXQ+Pj44LHJ9ZnVuY3Rpb24gYnAoZSx0LHIsbixvKXtyZXR1cm4gdD0rdCx1dCh0LG4sbyxlLHIsMyksZVtyKzNdPXQsdD10Pj4+OCxlW3IrMl09dCx0PXQ+Pj44LGVbcisxXT10LHQ9dD4+PjgsZVtyXT10LHIrNH1mdW5jdGlvbiBiYShlLHQscixuLG8pe3Q9K3QsdXQodCxuLG8sZSxyLDUpO2xldCBpPU1hdGguZmxvb3IodCoyKiotMzIpO3JldHVybiBlW3IrK109aT4+PjgsZVtyKytdPWksZVtyKzNdPXQsdD10Pj4+OCxlW3IrMl09dCx0PXQ+Pj44LGVbcisxXT10LHQ9dD4+PjgsZVtyXT10LHIrNH1mdW5jdGlvbiBDYShlLHQscixuLG8pe3JldHVybiB0PSt0LHV0KHQsbixvLGUsciw0KSxlW3IrK109TWF0aC5mbG9vcih0KjIqKi0zMiksZVtyKzNdPXQsdD10Pj4+OCxlW3IrMl09dCx0PXQ+Pj44LGVbcisxXT10LHQ9dD4+PjgsZVtyXT10LHIrNH1mdW5jdGlvbiB0aShlLHQscixuLG8pe3JldHVybiB0PSt0LHV0KHQsbixvLGUsciwzKSxlW3IrM109dCx0PXQ+Pj44LGVbcisyXT10LHQ9dD4+PjgsZVtyKzFdPXQsdD10Pj4+OCxlW3JdPXQscis0fWZ1bmN0aW9uIExhKGUsdCxyLG4sbyl7cmV0dXJuIHQ9K3QsdXQodCxuLG8sZSxyLDIpLGVbcisyXT10LHQ9dD4+PjgsZVtyKzFdPXQsdD10Pj4+OCxlW3JdPXQsciszfWZ1bmN0aW9uIHRyKGUsdCxyPTAsbj1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUil7aWYodHlwZW9mIGUhPVwibnVtYmVyXCIpdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcIm51bWJlclwiLGUpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBELkVSUl9PVVRfT0ZfUkFOR0UodCxcImFuIGludGVnZXJcIixlKTtpZihlPHJ8fGU+bil0aHJvdyBuZXcgRC5FUlJfT1VUX09GX1JBTkdFKHQsYD49ICR7cn0gJiYgPD0gJHtufWAsZSl9ZnVuY3Rpb24gd2EoZSx0LHIsbixvKXt0PSt0LHV0KHQsbixvLGUsciw1KTtsZXQgaT1NYXRoLmZsb29yKHQqMioqLTMyKTtyZXR1cm4gZVtyKytdPXQsdD10Pj4+OCxlW3IrK109dCx0PXQ+Pj44LGVbcisrXT10LHQ9dD4+PjgsZVtyKytdPXQsZVtyKytdPWksZVtyKytdPWk+Pj44LHJ9ZnVuY3Rpb24gUGEoZSx0LHIsbixvKXt0PSt0LHV0KHQsbixvLGUsciw0KTtsZXQgaT10O3JldHVybiBlW3IrK109dCx0PXQ+Pj44LGVbcisrXT10LHQ9dD4+PjgsZVtyKytdPXQsdD10Pj4+OCxlW3IrK109dCxlW3IrK109TWF0aC5mbG9vcihpKjIqKi0zMikscn1mdW5jdGlvbiByaShlLHQscixuLG8pe3JldHVybiB0PSt0LHV0KHQsbixvLGUsciwzKSxlW3IrK109dCx0PXQ+Pj44LGVbcisrXT10LHQ9dD4+PjgsZVtyKytdPXQsdD10Pj4+OCxlW3IrK109dCxyfWZ1bmN0aW9uIFVhKGUsdCxyLG4sbyl7cmV0dXJuIHQ9K3QsdXQodCxuLG8sZSxyLDIpLGVbcisrXT10LHQ9dD4+PjgsZVtyKytdPXQsdD10Pj4+OCxlW3IrK109dCxyfXZhciBwcCxWcixUZSxDbixaLFd0LHhlLG90LENwPUEoKCk9PntfcigpO3BhKCk7S28oKTtTYSgpO3BwPW5ldyBUZXh0RW5jb2RlcixWcj1uZXcgRmxvYXQzMkFycmF5KDEpLFRlPW5ldyBVaW50OEFycmF5KFZyLmJ1ZmZlciksQ249bmV3IEZsb2F0NjRBcnJheSgxKSxaPW5ldyBVaW50OEFycmF5KENuLmJ1ZmZlcik7VnJbMF09LTE7V3Q9VGVbM109PT0wO3hlPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPTA7ZTxudC5sZW5ndGg7KytlKXhlW250W2VdXT1lO290PXthc2NpaTp7Ynl0ZUxlbmd0aDplPT5lLmxlbmd0aCxlbmNvZGluZzpcImFzY2lpXCIsZW5jb2RpbmdWYWw6eGUuYXNjaWksaW5kZXhPZjooZSx0LHIsbik9PlhlKGUsV3IodCkscix4ZS5hc2NpaSxuKSxzbGljZTooZSx0LHIpPT5lLmFzY2lpU2xpY2UodCxyKSx3cml0ZTooZSx0LHIsbik9PmUuYXNjaWlXcml0ZSh0LHIsbil9LGJhc2U2NDp7Ynl0ZUxlbmd0aDplPT5mcChlLGUubGVuZ3RoKSxlbmNvZGluZzpcImJhc2U2NFwiLGVuY29kaW5nVmFsOnhlLmJhc2U2NCxpbmRleE9mOihlLHQscixuKT0+WGUoZSxRbyh0KSxyLHhlLmJhc2U2NCxuKSxzbGljZTooZSx0LHIpPT5lLmJhc2U2NFNsaWNlKHQsciksd3JpdGU6KGUsdCxyLG4pPT5lLmJhc2U2NFdyaXRlKHQscixuKX0sYmFzZTY0dXJsOntieXRlTGVuZ3RoOmU9PmZwKGUsZS5sZW5ndGgpLGVuY29kaW5nOlwiYmFzZTY0dXJsXCIsZW5jb2RpbmdWYWw6eGUuYmFzZTY0dXJsLGluZGV4T2Y6KGUsdCxyLG4pPT5YZShlLHpvKHQpLHIseGUuYmFzZTY0dXJsLG4pLHNsaWNlOihlLHQscik9PmUuYmFzZTY0dXJsU2xpY2UodCxyKSx3cml0ZTooZSx0LHIsbik9PmUuYmFzZTY0dXJsV3JpdGUodCxyLG4pfSxoZXg6e2J5dGVMZW5ndGg6ZT0+ZS5sZW5ndGg+Pj4xLGVuY29kaW5nOlwiaGV4XCIsZW5jb2RpbmdWYWw6eGUuaGV4LGluZGV4T2Y6KGUsdCxyLG4pPT5YZShlLFpvKHQpLHIseGUuaGV4LG4pLHNsaWNlOihlLHQscik9PmUuaGV4U2xpY2UodCxyKSx3cml0ZTooZSx0LHIsbik9PmUuaGV4V3JpdGUodCxyLG4pfSxsYXRpbjE6e2J5dGVMZW5ndGg6ZT0+ZS5sZW5ndGgsZW5jb2Rpbmc6XCJsYXRpbjFcIixlbmNvZGluZ1ZhbDp4ZS5sYXRpbjEsaW5kZXhPZjooZSx0LHIsbik9PlhlKGUsV3IodCkscix4ZS5sYXRpbjEsbiksc2xpY2U6KGUsdCxyKT0+ZS5sYXRpbjFTbGljZSh0LHIpLHdyaXRlOihlLHQscixuKT0+ZS5sYXRpbjFXcml0ZSh0LHIsbil9LHVjczI6e2J5dGVMZW5ndGg6ZT0+ZS5sZW5ndGgqMixlbmNvZGluZzpcInVjczJcIixlbmNvZGluZ1ZhbDp4ZS51dGYxNmxlLGluZGV4T2Y6KGUsdCxyLG4pPT5YZShlLGJuKHQpLHIseGUudXRmMTZsZSxuKSxzbGljZTooZSx0LHIpPT5lLnVjczJTbGljZSh0LHIpLHdyaXRlOihlLHQscixuKT0+ZS51Y3MyV3JpdGUodCxyLG4pfSx1dGY4OntieXRlTGVuZ3RoOkpvLGVuY29kaW5nOlwidXRmOFwiLGVuY29kaW5nVmFsOnhlLnV0ZjgsaW5kZXhPZjooZSx0LHIsbik9PlhlKGUscHAuZW5jb2RlKHQpLHIseGUudXRmOCxuKSxzbGljZTooZSx0LHIpPT5lLnV0ZjhTbGljZSh0LHIpLHdyaXRlOihlLHQscixuKT0+ZS51dGY4V3JpdGUodCxyLG4pfSx1dGYxNmxlOntieXRlTGVuZ3RoOmU9PmUubGVuZ3RoKjIsZW5jb2Rpbmc6XCJ1dGYxNmxlXCIsZW5jb2RpbmdWYWw6eGUudXRmMTZsZSxpbmRleE9mOihlLHQscixuKT0+WGUoZSxibih0KSxyLHhlLnV0ZjE2bGUsbiksc2xpY2U6KGUsdCxyKT0+ZS51Y3MyU2xpY2UodCxyKSx3cml0ZTooZSx0LHIsbik9PmUudWNzMldyaXRlKHQscixuKX19fSk7ZnVuY3Rpb24gTW4oZSl7aWYoZT5Tcil0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTtsZXQgdD1uZXcgVWludDhBcnJheShlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHQseC5wcm90b3R5cGUpLHR9ZnVuY3Rpb24geChlLHQscil7aWYodHlwZW9mIGU9PVwibnVtYmVyXCIpe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKFwic3RyaW5nXCIsXCJzdHJpbmdcIixlKTtyZXR1cm4gRmEoZSl9cmV0dXJuIGthKGUsdCxyKX1mdW5jdGlvbiBrYShlLHQscil7aWYodHlwZW9mIGU9PVwic3RyaW5nXCIpcmV0dXJuIHdwKGUsdCk7aWYodHlwZW9mIGU9PVwib2JqZWN0XCImJmUhPT1udWxsKXtpZihKdChlKSlyZXR1cm4gbGcoZSx0LHIpO2xldCBuPWUudmFsdWVPZiYmZS52YWx1ZU9mKCk7aWYobiE9bnVsbCYmbiE9PWUmJih0eXBlb2Ygbj09XCJzdHJpbmdcInx8dHlwZW9mIG49PVwib2JqZWN0XCIpKXJldHVybiBrYShuLHQscik7bGV0IG89Y2coZSk7aWYobylyZXR1cm4gbztpZih0eXBlb2YgZVtTeW1ib2wudG9QcmltaXRpdmVdPT1cImZ1bmN0aW9uXCIpe2xldCBpPWVbU3ltYm9sLnRvUHJpbWl0aXZlXShcInN0cmluZ1wiKTtpZih0eXBlb2YgaT09XCJzdHJpbmdcIilyZXR1cm4gd3AoaSx0KX19dGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJmaXJzdCBhcmd1bWVudFwiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJBcnJheUJ1ZmZlclwiLFwiQXJyYXlcIixcIkFycmF5LWxpa2UgT2JqZWN0XCJdLGUpfWZ1bmN0aW9uIEJhKGUpe2lmKFkoZSxcInNpemVcIiksIShlPj0wJiZlPD1TcikpdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1ZBTFVFLlJhbmdlRXJyb3IoXCJzaXplXCIsZSl9ZnVuY3Rpb24gYWcoZSx0LHIpe0JhKGUpO2xldCBuPU1uKGUpO2lmKHQhPT12b2lkIDApe2lmKHIhPT12b2lkIDAmJnR5cGVvZiByIT1cInN0cmluZ1wiKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKFwiZW5jb2RpbmdcIixcInN0cmluZ1wiLHIpO3JldHVybiBuLmZpbGwodCxyKX1yZXR1cm4gbn1mdW5jdGlvbiBGYShlKXtyZXR1cm4gQmEoZSksTW4oZTwwPzA6TXAoZSl8MCl9ZnVuY3Rpb24gd3AoZSx0KXtpZigodHlwZW9mIHQhPVwic3RyaW5nXCJ8fHQ9PT1cIlwiKSYmKHQ9XCJ1dGY4XCIpLCF4LmlzRW5jb2RpbmcodCkpdGhyb3cgbmV3IEQuRVJSX1VOS05PV05fRU5DT0RJTkcodCk7bGV0IHI9a3AoZSx0KXwwLG49TW4ociksbz1uLndyaXRlKGUsdCk7cmV0dXJuIG8hPT1yJiYobj1uLnNsaWNlKDAsbykpLG59ZnVuY3Rpb24gUHAoZSl7bGV0IHQ9ZS5sZW5ndGg8MD8wOk1wKGUubGVuZ3RoKXwwLHI9TW4odCk7Zm9yKGxldCBuPTA7bjx0O24rPTEpcltuXT1lW25dJjI1NTtyZXR1cm4gcn1mdW5jdGlvbiBjZyhlKXtpZihlLmxlbmd0aCE9PXZvaWQgMHx8SnQoZS5idWZmZXIpKXJldHVybiB0eXBlb2YgZS5sZW5ndGghPVwibnVtYmVyXCI/TW4oMCk6UHAoZSk7aWYoZS50eXBlPT09XCJCdWZmZXJcIiYmQXJyYXkuaXNBcnJheShlLmRhdGEpKXJldHVybiBQcChlLmRhdGEpfWZ1bmN0aW9uIE1wKGUpe2lmKGU+PVNyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK1NyLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gZXwwfWZ1bmN0aW9uIHZhKGUpe3JldHVybiBCYShlKSx4LmFsbG9jKCtlKX1mdW5jdGlvbiBrcChlLHQpe2lmKHR5cGVvZiBlIT1cInN0cmluZ1wiKXtpZihfdChlKXx8SnQoZSkpcmV0dXJuIGUuYnl0ZUxlbmd0aDt0aHJvdyBuZXcgRC5FUlJfSU5WQUxJRF9BUkdfVFlQRShcInN0cmluZ1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJBcnJheUJ1ZmZlclwiXSxlKX1sZXQgcj1lLmxlbmd0aCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdPT09ITA7aWYoIW4mJnI9PT0wKXJldHVybiAwO2lmKCF0KXJldHVybiBuPy0xOkpvKGUpO2xldCBvPUxuKHQpO3JldHVybiBvPT09dm9pZCAwP24/LTE6Sm8oZSk6by5ieXRlTGVuZ3RoKGUpfWZ1bmN0aW9uIG1yKGUsdCxyKXtsZXQgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gQnAoZSx0LHIsbixvKXtpZihWZihlKSx0eXBlb2Ygcj09XCJzdHJpbmdcIj8obj1yLHI9dm9pZCAwKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLE51bWJlci5pc05hTihyKSYmKHI9bz8wOmUubGVuZ3RofHxlLmJ5dGVMZW5ndGgpLG89ISFvLHR5cGVvZiB0PT1cIm51bWJlclwiKXJldHVybiBqbyhlLHQ+Pj4wLHIsbyk7bGV0IGk7aWYobj09PXZvaWQgMD9pPW90LnV0Zjg6aT1MbihuKSx0eXBlb2YgdD09XCJzdHJpbmdcIil7aWYoaT09PXZvaWQgMCl0aHJvdyBuZXcgRC5FUlJfVU5LTk9XTl9FTkNPRElORyhuKTtyZXR1cm4gaS5pbmRleE9mKGUsdCxyLG8pfWlmKEZlKHQpKXtsZXQgcz1pPT09dm9pZCAwP3hlLnV0Zjg6aS5lbmNvZGluZ1ZhbDtyZXR1cm4gWGUoZSx0LHIscyxvKX10aHJvdyBuZXcgRC5FUlJfSU5WQUxJRF9BUkdfVFlQRShcInZhbHVlXCIsW1wibnVtYmVyXCIsXCJzdHJpbmdcIixcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0KX1mdW5jdGlvbiBsZyhlLHQscil7dD09PXZvaWQgMD90PTA6KHQ9K3QsTnVtYmVyLmlzTmFOKHQpJiYodD0wKSk7bGV0IG49ZS5ieXRlTGVuZ3RoLXQ7aWYobjwwKXRocm93IG5ldyBELkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyhcIm9mZnNldFwiKTtpZihyPT09dm9pZCAwKXI9bjtlbHNlIGlmKHI9K3Iscj4wKXtpZihyPm4pdGhyb3cgbmV3IEQuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTKFwibGVuZ3RoXCIpfWVsc2Ugcj0wO2xldCBvPW5ldyBVaW50OEFycmF5KGUsdCxyKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG8seC5wcm90b3R5cGUpLG99ZnVuY3Rpb24gdWcoZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7bGV0IG49W10sbz10O2Zvcig7bzxyOyl7bGV0IGk9ZVtvXSxzPW51bGwsYT1pPjIzOT80Omk+MjIzPzM6aT4xOTE/MjoxO2lmKG8rYTw9cil7bGV0IGMsdSxSLGY7c3dpdGNoKGEpe2Nhc2UgMTppPDEyOCYmKHM9aSk7YnJlYWs7Y2FzZSAyOmM9ZVtvKzFdLChjJjE5Mik9PT0xMjgmJihmPShpJjMxKTw8NnxjJjYzLGY+MTI3JiYocz1mKSk7YnJlYWs7Y2FzZSAzOmM9ZVtvKzFdLHU9ZVtvKzJdLChjJjE5Mik9PT0xMjgmJih1JjE5Mik9PT0xMjgmJihmPShpJjE1KTw8MTJ8KGMmNjMpPDw2fHUmNjMsZj4yMDQ3JiYoZjw1NTI5Nnx8Zj41NzM0MykmJihzPWYpKTticmVhaztjYXNlIDQ6Yz1lW28rMV0sdT1lW28rMl0sUj1lW28rM10sKGMmMTkyKT09PTEyOCYmKHUmMTkyKT09PTEyOCYmKFImMTkyKT09PTEyOCYmKGY9KGkmMTUpPDwxOHwoYyY2Myk8PDEyfCh1JjYzKTw8NnxSJjYzLGY+NjU1MzUmJmY8MTExNDExMiYmKHM9ZikpfX1zPT09bnVsbD8ocz02NTUzMyxhPTEpOnM+NjU1MzUmJihzLT02NTUzNixuLnB1c2gocz4+PjEwJjEwMjN8NTUyOTYpLHM9NTYzMjB8cyYxMDIzKSxuLnB1c2gocyksbys9YX1yZXR1cm4gZmcobil9ZnVuY3Rpb24gZmcoZSl7bGV0IHQ9ZS5sZW5ndGg7aWYodDw9VXApcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2xldCByPVwiXCIsbj0wO2Zvcig7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9VXApKTtyZXR1cm4gcn1mdW5jdGlvbiBwZyhlLHQscil7bGV0IG49XCJcIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2ZvcihsZXQgbz10O288cjsrK28pbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW29dKTtyZXR1cm4gbn1mdW5jdGlvbiBSZyhlLHQscil7bGV0IG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7bGV0IG89XCJcIjtmb3IobGV0IGk9dDtpPHI7KytpKW8rPWRnW2VbaV1dO3JldHVybiBvfWZ1bmN0aW9uIEZwKGUsdCxyLG4sbyl7V3AodCxuLG8sZSxyLDcpO2xldCBpPU51bWJlcih0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7ZVtyKytdPWksaT1pPj44LGVbcisrXT1pLGk9aT4+OCxlW3IrK109aSxpPWk+PjgsZVtyKytdPWk7bGV0IHM9TnVtYmVyKHQ+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gZVtyKytdPXMscz1zPj44LGVbcisrXT1zLHM9cz4+OCxlW3IrK109cyxzPXM+PjgsZVtyKytdPXMscn1mdW5jdGlvbiB2cChlLHQscixuLG8pe1dwKHQsbixvLGUsciw3KTtsZXQgaT1OdW1iZXIodCZCaWdJbnQoNDI5NDk2NzI5NSkpO2Vbcis3XT1pLGk9aT4+OCxlW3IrNl09aSxpPWk+PjgsZVtyKzVdPWksaT1pPj44LGVbcis0XT1pO2xldCBzPU51bWJlcih0Pj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIGVbciszXT1zLHM9cz4+OCxlW3IrMl09cyxzPXM+PjgsZVtyKzFdPXMscz1zPj44LGVbcl09cyxyKzh9ZnVuY3Rpb24gRWcoZSx0LHIpe1kodCxcIm9mZnNldFwiKSwoZVt0XT09PXZvaWQgMHx8ZVt0K3JdPT09dm9pZCAwKSYmSCh0LGUubGVuZ3RoLShyKzEpKX1mdW5jdGlvbiBXcChlLHQscixuLG8saSl7aWYoZT5yfHxlPHQpe2xldCBzPXR5cGVvZiB0PT1cImJpZ2ludFwiP1wiblwiOlwiXCIsYTt0aHJvdyBpPjM/dD09PTB8fHQ9PT1CaWdJbnQoMCk/YT1gPj0gMCR7c30gYW5kIDwgMiR7c30gKiogJHsoaSsxKSo4fSR7c31gOmE9YD49IC0oMiR7c30gKiogJHsoaSsxKSo4LTF9JHtzfSkgYW5kIDwgMiAqKiAkeyhpKzEpKjgtMX0ke3N9YDphPWA+PSAke3R9JHtzfSBhbmQgPD0gJHtyfSR7c31gLG5ldyBELkVSUl9PVVRfT0ZfUkFOR0UoXCJ2YWx1ZVwiLGEsZSl9RWcobixvLGkpfWZ1bmN0aW9uIF9nKGUsdCl7dD10fHwxLzA7bGV0IHIsbj1lLmxlbmd0aCxvPW51bGwsaT1bXTtmb3IobGV0IHM9MDtzPG47KytzKXtpZihyPWUuY2hhckNvZGVBdChzKSxyPjU1Mjk1JiZyPDU3MzQ0KXtpZighbyl7aWYocj41NjMxOSl7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWVsc2UgaWYocysxPT09bil7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW89cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJmkucHVzaCgyMzksMTkxLDE4OSksbz1yO2NvbnRpbnVlfXI9KG8tNTUyOTY8PDEwfHItNTYzMjApKzY1NTM2fWVsc2UgbyYmKHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2lmKG89bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7aS5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztpLnB1c2gocj4+NnwxOTIsciY2M3wxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7aS5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCxyJjYzfDEyOCl9ZWxzZSBpZihyPDExMTQxMTIpe2lmKCh0LT00KTwwKWJyZWFrO2kucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LHImNjN8MTI4KX1lbHNlIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKX1yZXR1cm4gaX1mdW5jdGlvbiBncihlLHQscixuKXtsZXQgbyxpPW49PT12b2lkIDA/ZS5sZW5ndGg6bjtmb3Iobz0wO288aSYmIShvK3I+PXQubGVuZ3RofHxvPj1lLmxlbmd0aCk7KytvKXRbbytyXT1lW29dO3JldHVybiBvfWZ1bmN0aW9uIE1hKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0fHxlIT1udWxsJiZlLmNvbnN0cnVjdG9yIT1udWxsJiZlLmNvbnN0cnVjdG9yLm5hbWUhPW51bGwmJmUuY29uc3RydWN0b3IubmFtZT09PXQubmFtZX1mdW5jdGlvbiBycihlKXtyZXR1cm4gdHlwZW9mIEJpZ0ludD5cInVcIj9oZzplfWZ1bmN0aW9uIGhnKCl7dGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IG5vdCBzdXBwb3J0ZWRcIil9dmFyIFNyLG5pLExwLHNnLFVwLGRnLE9nLG1nLFNnLFdhPUEoKCk9PntfcigpO2N0KCk7eigpO0NwKCk7U2EoKTtLbygpO2RlKCk7Y3QoKTtxbygpO2hhKCk7U3I9MjE0NzQ4MzY0NyxuaT0yKiozMixMcD10eXBlb2YgU3ltYm9sPT1cImZ1bmN0aW9uXCImJnR5cGVvZiBTeW1ib2wuZm9yPT1cImZ1bmN0aW9uXCI/U3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpOm51bGwsc2c9NTA7T2JqZWN0LmRlZmluZVByb3BlcnR5KHgucHJvdG90eXBlLFwicGFyZW50XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoISF4LmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoeC5wcm90b3R5cGUsXCJvZmZzZXRcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZighIXguaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KTt4LnBvb2xTaXplPTgxOTI7eC5mcm9tPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4ga2EodCxyLG4pfTtPYmplY3Quc2V0UHJvdG90eXBlT2YoeC5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZih4LFVpbnQ4QXJyYXkpO3guYWxsb2M9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBhZyh0LHIsbil9O3guYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7cmV0dXJuIEZhKHQpfTt4LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gRmEodCl9O09iamVjdC5zZXRQcm90b3R5cGVPZih2YS5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZih2YSxVaW50OEFycmF5KTt4LmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0Ll9pc0J1ZmZlcj09PSEwJiZ0IT09eC5wcm90b3R5cGV9O3guY29tcGFyZT1mdW5jdGlvbih0LHIpe2lmKE1hKHQsVWludDhBcnJheSkmJih0PXguZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLE1hKHIsVWludDhBcnJheSkmJihyPXguZnJvbShyLHIub2Zmc2V0LHIuYnl0ZUxlbmd0aCkpLCF4LmlzQnVmZmVyKHQpfHwheC5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYodD09PXIpcmV0dXJuIDA7bGV0IG49dC5sZW5ndGgsbz1yLmxlbmd0aDtmb3IobGV0IGk9MCxzPU1hdGgubWluKG4sbyk7aTxzOysraSlpZih0W2ldIT09cltpXSl7bj10W2ldLG89cltpXTticmVha31yZXR1cm4gbjxvPy0xOm88bj8xOjB9O3guaXNFbmNvZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQ9PVwic3RyaW5nXCImJnQubGVuZ3RoIT09MCYmQW4odCkhPT12b2lkIDB9O3guY29uY2F0PWZ1bmN0aW9uKHQscil7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJsaXN0XCIsXCJBcnJheVwiLHQpO2lmKHQubGVuZ3RoPT09MClyZXR1cm4geC5hbGxvYygwKTtpZihyPT09dm9pZCAwKXtyPTA7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXS5sZW5ndGgmJihyKz10W2ldLmxlbmd0aCl9ZWxzZSB0cihyLFwibGVuZ3RoXCIpO2xldCBuPXguYWxsb2NVbnNhZmUociksbz0wO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgcz10W2ldO2lmKCFGZShzKSl0aHJvdyBuZXcgRC5FUlJfSU5WQUxJRF9BUkdfVFlQRShgbGlzdFske2l9XWAsW1wiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHRbaV0pO28rPVRwKHMsbixvLDAscy5sZW5ndGgpfXJldHVybiBvPHImJm4uZmlsbCgwLG8sciksbn07eC5ieXRlTGVuZ3RoPWtwO3gucHJvdG90eXBlLl9pc0J1ZmZlcj0hMDt4LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXtsZXQgdD10aGlzLmxlbmd0aDtpZih0JTIhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHNcIik7Zm9yKGxldCByPTA7cjx0O3IrPTIpbXIodGhpcyxyLHIrMSk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe2xldCB0PXRoaXMubGVuZ3RoO2lmKHQlNCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0c1wiKTtmb3IobGV0IHI9MDtyPHQ7cis9NCltcih0aGlzLHIsciszKSxtcih0aGlzLHIrMSxyKzIpO3JldHVybiB0aGlzfTt4LnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtsZXQgdD10aGlzLmxlbmd0aDtpZih0JTghPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHNcIik7Zm9yKGxldCByPTA7cjx0O3IrPTgpbXIodGhpcyxyLHIrNyksbXIodGhpcyxyKzEscis2KSxtcih0aGlzLHIrMixyKzUpLG1yKHRoaXMsciszLHIrNCk7cmV0dXJuIHRoaXN9O3gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQscixuKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MClyZXR1cm4gdGhpcy51dGY4U2xpY2UoMCx0aGlzLmxlbmd0aCk7bGV0IG89dGhpcy5sZW5ndGg7aWYocjw9MClyPTA7ZWxzZXtpZihyPj1vKXJldHVyblwiXCI7cnw9MH1pZihuPT09dm9pZCAwfHxuPm8/bj1vOm58PTAsbjw9cilyZXR1cm5cIlwiO2lmKHQ9PT12b2lkIDApcmV0dXJuIHRoaXMudXRmOFNsaWNlKHIsbik7bGV0IGk9TG4odCk7aWYoaT09PXZvaWQgMCl0aHJvdyBuZXcgRC5FUlJfVU5LTk9XTl9FTkNPRElORyh0KTtyZXR1cm4gaS5zbGljZSh0aGlzLHIsbil9O3gucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPXgucHJvdG90eXBlLnRvU3RyaW5nO3gucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtpZighRmUodCkpdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJvdGhlckJ1ZmZlclwiLFtcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0KTtyZXR1cm4gdGhpcz09PXQ/ITA6eC5jb21wYXJlKHRoaXMsdCk9PT0wfTt4LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7bGV0IHQ9XCJcIixyPXNnO3JldHVybiB0PXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLHIpLnJlcGxhY2UoLyguezJ9KS9nLFwiJDEgXCIpLnRyaW0oKSx0aGlzLmxlbmd0aD5yJiYodCs9XCIgLi4uIFwiKSxcIjxCdWZmZXIgXCIrdCtcIj5cIn07THAmJih4LnByb3RvdHlwZVtMcF09eC5wcm90b3R5cGUuaW5zcGVjdCk7eC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LHIsbixvLGkpe2lmKE1hKHQsVWludDhBcnJheSkmJih0PXguZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLCF4LmlzQnVmZmVyKHQpKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKFwidGFyZ2V0XCIsW1wiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHQpO2lmKHI9PT12b2lkIDA/cj0wOnRyKHIsXCJ0YXJnZXRTdGFydFwiLDAsU3IpLG49PT12b2lkIDA/bj10Lmxlbmd0aDp0cihuLFwidGFyZ2V0RW5kXCIsMCx0Lmxlbmd0aCksbz09PXZvaWQgMD9vPTA6dHIocixcInNvdXJjZVN0YXJ0XCIsMCxTciksaT09PXZvaWQgMD9pPXRoaXMubGVuZ3RoOnRyKG4sXCJzb3VyY2VFbmRcIiwwLHRoaXMubGVuZ3RoKSxyPDB8fG4+dC5sZW5ndGh8fG88MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgRC5FUlJfT1VUX09GX1JBTkdFKFwib3V0IG9mIHJhbmdlIGluZGV4XCIsXCJyYW5nZVwiKTtpZihvPj1pJiZyPj1uKXJldHVybiAwO2lmKG8+PWkpcmV0dXJuLTE7aWYocj49bilyZXR1cm4gMTtpZihyPj4+PTAsbj4+Pj0wLG8+Pj49MCxpPj4+PTAsdGhpcz09PXQpcmV0dXJuIDA7bGV0IHM9aS1vLGE9bi1yLGM9TWF0aC5taW4ocyxhKSx1PXRoaXMuc2xpY2UobyxpKSxSPXQuc2xpY2UocixuKTtmb3IobGV0IGY9MDtmPGM7KytmKWlmKHVbZl0hPT1SW2ZdKXtzPXVbZl0sYT1SW2ZdO2JyZWFrfXJldHVybiBzPGE/LTE6YTxzPzE6MH07eC5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odCxyLG4pe3JldHVybiB0aGlzLmluZGV4T2YodCxyLG4pIT09LTF9O3gucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBCcCh0aGlzLHQscixuLCEwKX07eC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBCcCh0aGlzLHQscixuLCExKX07eC5wcm90b3R5cGUuYXNjaWlTbGljZT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09MCYmcj09PXRoaXMubGVuZ3RoP09hKHRoaXMpOk9hKHRoaXMuc2xpY2UodCxyKSl9O3gucHJvdG90eXBlLmFzY2lpV3JpdGU9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBncihXcih0KSx0aGlzLHIsbil9O3gucHJvdG90eXBlLmJhc2U2NFNsaWNlPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9PT0wJiZyPT09dGhpcy5sZW5ndGg/RG4odGhpcyk6RG4odGhpcy5zbGljZSh0LHIpKX07eC5wcm90b3R5cGUuYmFzZTY0V3JpdGU9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBncihRbyh0KSx0aGlzLHIsbil9O3gucHJvdG90eXBlLmJhc2U2NHVybFNsaWNlPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9PT0wJiZyPT09dGhpcy5sZW5ndGg/ZGEodGhpcyk6ZGEodGhpcy5zbGljZSh0LHIpKX07eC5wcm90b3R5cGUuYmFzZTY0dXJsV3JpdGU9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBncih6byh0KSx0aGlzLHIsbil9O3gucHJvdG90eXBlLmhleFdyaXRlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZ3IoWm8odCx0aGlzLmxlbmd0aC1yKSx0aGlzLHIsbil9O3gucHJvdG90eXBlLmhleFNsaWNlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gUmcodGhpcyx0LHIsbil9O3gucHJvdG90eXBlLmxhdGluMVNsaWNlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gcGcodGhpcyx0LHIsbil9O3gucHJvdG90eXBlLmxhdGluMVdyaXRlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZ3IoV3IodCksdGhpcyxyLG4pfTt4LnByb3RvdHlwZS51Y3MyU2xpY2U9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD09PTAmJnI9PT10aGlzLmxlbmd0aD9tYSh0aGlzKTptYSh0aGlzLnNsaWNlKHQscikpfTt4LnByb3RvdHlwZS51Y3MyV3JpdGU9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBncihibih0LHRoaXMubGVuZ3RoLXIpLHRoaXMscixuKX07eC5wcm90b3R5cGUudXRmOFNsaWNlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdWcodGhpcyx0LHIsbil9O3gucHJvdG90eXBlLnV0ZjhXcml0ZT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIGdyKF9nKHQsdGhpcy5sZW5ndGgtciksdGhpcyxyLG4pfTt4LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LHIsbixvKXtpZihyPT09dm9pZCAwKXJldHVybiB0aGlzLnV0ZjhXcml0ZSh0LDAsdGhpcy5sZW5ndGgpO2lmKG49PT12b2lkIDAmJnR5cGVvZiByPT1cInN0cmluZ1wiKW89cixuPXRoaXMubGVuZ3RoLHI9MDtlbHNle3RyKHIsXCJvZmZzZXRcIiwwLHRoaXMubGVuZ3RoKTtsZXQgcz10aGlzLmxlbmd0aC1yO249PT12b2lkIDA/bj1zOnR5cGVvZiBuPT1cInN0cmluZ1wiPyhvPW4sbj1zKToodHIobixcImxlbmd0aFwiLDAsdGhpcy5sZW5ndGgpLG4+cyYmKG49cykpfWlmKCFvKXJldHVybiB0aGlzLnV0ZjhXcml0ZSh0LHIsbik7bGV0IGk9TG4obyk7aWYoaT09PXZvaWQgMCl0aHJvdyBuZXcgRC5FUlJfVU5LTk9XTl9FTkNPRElORyhvKTtyZXR1cm4gaS53cml0ZSh0aGlzLHQscixuKX07eC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O1VwPTQwOTY7eC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odCxyKXtsZXQgbj10aGlzLmxlbmd0aDt0PX5+dCxyPXI9PT12b2lkIDA/bjp+fnIsdDwwPyh0Kz1uLHQ8MCYmKHQ9MCkpOnQ+biYmKHQ9bikscjwwPyhyKz1uLHI8MCYmKHI9MCkpOnI+biYmKHI9bikscjx0JiYocj10KTtsZXQgbz10aGlzLnN1YmFycmF5KHQscik7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihvLHgucHJvdG90eXBlKSxvfTt4LnByb3RvdHlwZS5yZWFkVWludExFPXgucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxyKXtpZih0PT09dm9pZCAwKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKFwib2Zmc2V0XCIsXCJudW1iZXJcIix0KTtpZihyPT09NilyZXR1cm4gUnAodGhpcyx0KTtpZihyPT09NSlyZXR1cm4gRXAodGhpcyx0KTtpZihyPT09MylyZXR1cm4gX3AodGhpcyx0KTtpZihyPT09NClyZXR1cm4gdGhpcy5yZWFkVUludDMyTEUodCk7aWYocj09PTIpcmV0dXJuIHRoaXMucmVhZFVJbnQxNkxFKHQpO2lmKHI9PT0xKXJldHVybiB0aGlzLnJlYWRVSW50OCh0KTtIKHIsNixcImJ5dGVMZW5ndGhcIil9O3gucHJvdG90eXBlLnJlYWRVaW50QkU9eC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LHIpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEQuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJvZmZzZXRcIixcIm51bWJlclwiLHQpO2lmKHI9PT02KXJldHVybiBkcCh0aGlzLHQpO2lmKHI9PT01KXJldHVybiBocCh0aGlzLHQpO2lmKHI9PT0zKXJldHVybiBPcCh0aGlzLHQpO2lmKHI9PT00KXJldHVybiB0aGlzLnJlYWRVSW50MzJCRSh0KTtpZihyPT09MilyZXR1cm4gdGhpcy5yZWFkVUludDE2QkUodCk7aWYocj09PTEpcmV0dXJuIHRoaXMucmVhZFVJbnQ4KHQpO0gociw2LFwiYnl0ZUxlbmd0aFwiKX07eC5wcm90b3R5cGUucmVhZFVpbnQ4PXgucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj10aGlzW3RdO3JldHVybiByPT09dm9pZCAwJiZIKHQsdGhpcy5sZW5ndGgtMSkscn07eC5wcm90b3R5cGUucmVhZFVpbnQxNkJFPXgucHJvdG90eXBlLnJlYWRVSW50MTZCRT1tcDt4LnByb3RvdHlwZS5yZWFkVWludDE2TEU9eC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQ9MCl7WSh0LFwib2Zmc2V0XCIpO2xldCByPXRoaXNbdF0sbj10aGlzW3QrMV07cmV0dXJuKHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZIKHQsdGhpcy5sZW5ndGgtMikscituKjIqKjh9O3gucHJvdG90eXBlLnJlYWRVaW50MzJMRT14LnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24odD0wKXtZKHQsXCJvZmZzZXRcIik7bGV0IHI9dGhpc1t0XSxuPXRoaXNbdCszXTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCx0aGlzLmxlbmd0aC00KSxyK3RoaXNbKyt0XSoyKio4K3RoaXNbKyt0XSoyKioxNituKjIqKjI0fTt4LnByb3RvdHlwZS5yZWFkVWludDMyQkU9eC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPVNwO3gucHJvdG90eXBlLnJlYWRCaWdVaW50NjRMRT14LnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEU9cnIoZnVuY3Rpb24odCl7dD10Pj4+MCxZKHQsXCJvZmZzZXRcIik7bGV0IHI9dGhpc1t0XSxuPXRoaXNbdCs3XTsocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCx0aGlzLmxlbmd0aC04KTtsZXQgbz1yK3RoaXNbKyt0XSoyKio4K3RoaXNbKyt0XSoyKioxNit0aGlzWysrdF0qMioqMjQsaT10aGlzWysrdF0rdGhpc1srK3RdKjIqKjgrdGhpc1srK3RdKjIqKjE2K24qMioqMjQ7cmV0dXJuIEJpZ0ludChvKSsoQmlnSW50KGkpPDxCaWdJbnQoMzIpKX0pO3gucHJvdG90eXBlLnJlYWRCaWdVaW50NjRCRT14LnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkU9cnIoZnVuY3Rpb24odCl7dD10Pj4+MCxZKHQsXCJvZmZzZXRcIik7bGV0IHI9dGhpc1t0XSxuPXRoaXNbdCs3XTsocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCx0aGlzLmxlbmd0aC04KTtsZXQgbz1yKjIqKjI0K3RoaXNbKyt0XSoyKioxNit0aGlzWysrdF0qMioqOCt0aGlzWysrdF0saT10aGlzWysrdF0qMioqMjQrdGhpc1srK3RdKjIqKjE2K3RoaXNbKyt0XSoyKio4K247cmV0dXJuKEJpZ0ludChvKTw8QmlnSW50KDMyKSkrQmlnSW50KGkpfSk7eC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHQscil7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRC5FUlJfSU5WQUxJRF9BUkdfVFlQRShcIm9mZnNldFwiLFwibnVtYmVyXCIsdCk7aWYocj09PTYpcmV0dXJuIHhwKHRoaXMsdCk7aWYocj09PTUpcmV0dXJuIEFwKHRoaXMsdCk7aWYocj09PTMpcmV0dXJuIGdwKHRoaXMsdCk7aWYocj09PTQpcmV0dXJuIHRoaXMucmVhZEludDMyTEUodCk7aWYocj09PTIpcmV0dXJuIHRoaXMucmVhZEludDE2TEUodCk7aWYocj09PTEpcmV0dXJuIHRoaXMucmVhZEludDgodCk7SChyLDYsXCJieXRlTGVuZ3RoXCIpfTt4LnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24odCxyKXtpZih0PT09dm9pZCAwKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKFwib2Zmc2V0XCIsXCJudW1iZXJcIix0KTtpZihyPT09NilyZXR1cm4gSXAodGhpcyx0KTtpZihyPT09NSlyZXR1cm4geXAodGhpcyx0KTtpZihyPT09MylyZXR1cm4gTnAodGhpcyx0KTtpZihyPT09NClyZXR1cm4gdGhpcy5yZWFkSW50MzJCRSh0KTtpZihyPT09MilyZXR1cm4gdGhpcy5yZWFkSW50MTZCRSh0KTtpZihyPT09MSlyZXR1cm4gdGhpcy5yZWFkSW50OCh0KTtIKHIsNixcImJ5dGVMZW5ndGhcIil9O3gucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQ9MCl7WSh0LFwib2Zmc2V0XCIpO2xldCByPXRoaXNbdF07cmV0dXJuIHI9PT12b2lkIDAmJkgodCx0aGlzLmxlbmd0aC0xKSxyfChyJjIqKjcpKjMzNTU0NDMwfTt4LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbih0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj10aGlzW3RdLG49dGhpc1t0KzFdOyhyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmSCh0LHRoaXMubGVuZ3RoLTIpO2xldCBvPXIrbioyKio4O3JldHVybiBvfChvJjIqKjE1KSoxMzEwNzB9O3gucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKHQ9MCl7WSh0LFwib2Zmc2V0XCIpO2xldCByPXRoaXNbdF0sbj10aGlzW3QrMV07KHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZIKHQsdGhpcy5sZW5ndGgtMik7bGV0IG89cioyKio4K247cmV0dXJuIG98KG8mMioqMTUpKjEzMTA3MH07eC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odD0wKXtZKHQsXCJvZmZzZXRcIik7bGV0IHI9dGhpc1t0XSxuPXRoaXNbdCszXTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCx0aGlzLmxlbmd0aC00KSxyK3RoaXNbKyt0XSoyKio4K3RoaXNbKyt0XSoyKioxNisobjw8MjQpfTt4LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0PTApe1kodCxcIm9mZnNldFwiKTtsZXQgcj10aGlzW3RdLG49dGhpc1t0KzNdO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmSCh0LHRoaXMubGVuZ3RoLTQpLChyPDwyNCkrdGhpc1srK3RdKjIqKjE2K3RoaXNbKyt0XSoyKio4K259O3gucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPXJyKGZ1bmN0aW9uKHQpe3Q9dD4+PjAsWSh0LFwib2Zmc2V0XCIpO2xldCByPXRoaXNbdF0sbj10aGlzW3QrN107KHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZIKHQsdGhpcy5sZW5ndGgtOCk7bGV0IG89dGhpc1t0KzRdK3RoaXNbdCs1XSoyKio4K3RoaXNbdCs2XSoyKioxNisobjw8MjQpO3JldHVybihCaWdJbnQobyk8PEJpZ0ludCgzMikpK0JpZ0ludChyK3RoaXNbKyt0XSoyKio4K3RoaXNbKyt0XSoyKioxNit0aGlzWysrdF0qMioqMjQpfSk7eC5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkU9cnIoZnVuY3Rpb24odCl7dD10Pj4+MCxZKHQsXCJvZmZzZXRcIik7bGV0IHI9dGhpc1t0XSxuPXRoaXNbdCs3XTsocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkgodCx0aGlzLmxlbmd0aC04KTtsZXQgbz0ocjw8MjQpK3RoaXNbKyt0XSoyKioxNit0aGlzWysrdF0qMioqOCt0aGlzWysrdF07cmV0dXJuKEJpZ0ludChvKTw8QmlnSW50KDMyKSkrQmlnSW50KHRoaXNbKyt0XSoyKioyNCt0aGlzWysrdF0qMioqMTYrdGhpc1srK3RdKjIqKjgrbil9KTt4LnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0KXtyZXR1cm4gV3Q/SWEodGhpcyx0KTp5YSh0aGlzLHQpfTt4LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0KXtyZXR1cm4gV3Q/eWEodGhpcyx0KTpJYSh0aGlzLHQpfTt4LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCl7cmV0dXJuIFd0P2dhKHRoaXMsdCk6QWEodGhpcyx0KX07eC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHQpe3JldHVybiBXdD9BYSh0aGlzLHQpOmdhKHRoaXMsdCl9O3gucHJvdG90eXBlLndyaXRlVWludExFPXgucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQscixuKXtpZihuPT09NilyZXR1cm4gd2EodGhpcyx0LHIsMCwweGZmZmZmZmZmZmZmZik7aWYobj09PTUpcmV0dXJuIFBhKHRoaXMsdCxyLDAsMHhmZmZmZmZmZmZmKTtpZihuPT09MylyZXR1cm4gVWEodGhpcyx0LHIsMCwxNjc3NzIxNSk7aWYobj09PTQpcmV0dXJuIHJpKHRoaXMsdCxyLDAsNDI5NDk2NzI5NSk7aWYobj09PTIpcmV0dXJuIFVuKHRoaXMsdCxyLDAsNjU1MzUpO2lmKG49PT0xKXJldHVybiBPcih0aGlzLHQsciwwLDI1NSk7SChuLDYsXCJieXRlTGVuZ3RoXCIpfTt4LnByb3RvdHlwZS53cml0ZVVpbnRCRT14LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LHIsbil7aWYobj09PTYpcmV0dXJuIGJhKHRoaXMsdCxyLDAsMHhmZmZmZmZmZmZmZmYpO2lmKG49PT01KXJldHVybiBDYSh0aGlzLHQsciwwLDB4ZmZmZmZmZmZmZik7aWYobj09PTMpcmV0dXJuIExhKHRoaXMsdCxyLDAsMTY3NzcyMTUpO2lmKG49PT00KXJldHVybiB0aSh0aGlzLHQsciwwLDQyOTQ5NjcyOTUpO2lmKG49PT0yKXJldHVybiBQbih0aGlzLHQsciwwLDY1NTM1KTtpZihuPT09MSlyZXR1cm4gT3IodGhpcyx0LHIsMCwyNTUpO0gobiw2LFwiYnl0ZUxlbmd0aFwiKX07eC5wcm90b3R5cGUud3JpdGVVaW50OD14LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHQscj0wKXtyZXR1cm4gT3IodGhpcyx0LHIsMCwyNTUpfTt4LnByb3RvdHlwZS53cml0ZVVpbnQxNkxFPXgucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxyPTApe3JldHVybiBVbih0aGlzLHQsciwwLDY1NTM1KX07eC5wcm90b3R5cGUud3JpdGVVaW50MTZCRT14LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQscj0wKXtyZXR1cm4gUG4odGhpcyx0LHIsMCw2NTUzNSl9O3gucHJvdG90eXBlLndyaXRlVWludDMyTEU9eC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LHI9MCl7cmV0dXJuIERwKHRoaXMsdCxyLDAsNDI5NDk2NzI5NSl9O3gucHJvdG90eXBlLndyaXRlVWludDMyQkU9eC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbih0LHI9MCl7cmV0dXJuIGJwKHRoaXMsdCxyLDAsNDI5NDk2NzI5NSl9O3gucHJvdG90eXBlLndyaXRlQmlnVWludDY0TEU9eC5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1ycihmdW5jdGlvbih0LHI9MCl7cmV0dXJuIEZwKHRoaXMsdCxyLEJpZ0ludCgwKSxCaWdJbnQoXCIweGZmZmZmZmZmZmZmZmZmZmZcIikpfSk7eC5wcm90b3R5cGUud3JpdGVCaWdVaW50NjRCRT14LnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPXJyKGZ1bmN0aW9uKHQscj0wKXtyZXR1cm4gdnAodGhpcyx0LHIsQmlnSW50KDApLEJpZ0ludChcIjB4ZmZmZmZmZmZmZmZmZmZmZlwiKSl9KTt4LnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQscixuKXtpZihuPT09NilyZXR1cm4gd2EodGhpcyx0LHIsLTB4ODAwMDAwMDAwMDAwLDB4N2ZmZmZmZmZmZmZmKTtpZihuPT09NSlyZXR1cm4gUGEodGhpcyx0LHIsLTU0OTc1NTgxMzg4OCw1NDk3NTU4MTM4ODcpO2lmKG49PT0zKXJldHVybiBVYSh0aGlzLHQsciwtODM4ODYwOCw4Mzg4NjA3KTtpZihuPT09NClyZXR1cm4gcmkodGhpcyx0LHIsLTIxNDc0ODM2NDgsMjE0NzQ4MzY0Nyk7aWYobj09PTIpcmV0dXJuIFVuKHRoaXMsdCxyLC0zMjc2OCwzMjc2Nyk7aWYobj09PTEpcmV0dXJuIE9yKHRoaXMsdCxyLC0xMjgsMTI3KTtIKG4sNixcImJ5dGVMZW5ndGhcIil9O3gucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24odCxyLG4pe2lmKG49PT02KXJldHVybiBiYSh0aGlzLHQsciwtMHg4MDAwMDAwMDAwMDAsMHg3ZmZmZmZmZmZmZmYpO2lmKG49PT01KXJldHVybiBDYSh0aGlzLHQsciwtNTQ5NzU1ODEzODg4LDU0OTc1NTgxMzg4Nyk7aWYobj09PTMpcmV0dXJuIExhKHRoaXMsdCxyLC04Mzg4NjA4LDgzODg2MDcpO2lmKG49PT00KXJldHVybiB0aSh0aGlzLHQsciwtMjE0NzQ4MzY0OCwyMTQ3NDgzNjQ3KTtpZihuPT09MilyZXR1cm4gUG4odGhpcyx0LHIsLTMyNzY4LDMyNzY3KTtpZihuPT09MSlyZXR1cm4gT3IodGhpcyx0LHIsLTEyOCwxMjcpO0gobiw2LFwiYnl0ZUxlbmd0aFwiKX07eC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHQscj0wKXtyZXR1cm4gT3IodGhpcyx0LHIsLTEyOCwxMjcpfTt4LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24odCxyPTApe3JldHVybiBVbih0aGlzLHQsciwtMzI3NjgsMzI3NjcpfTt4LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxyPTApe3JldHVybiBQbih0aGlzLHQsciwtMzI3NjgsMzI3NjcpfTt4LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odCxyPTApe3JldHVybiByaSh0aGlzLHQsciwtMjE0NzQ4MzY0OCwyMTQ3NDgzNjQ3KX07eC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQscj0wKXtyZXR1cm4gdGkodGhpcyx0LHIsLTIxNDc0ODM2NDgsMjE0NzQ4MzY0Nyl9O3gucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRT1ycihmdW5jdGlvbih0LHI9MCl7cmV0dXJuIEZwKHRoaXMsdCxyLC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pO3gucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRT1ycihmdW5jdGlvbih0LHI9MCl7cmV0dXJuIHZwKHRoaXMsdCxyLC1CaWdJbnQoXCIweDgwMDAwMDAwMDAwMDAwMDBcIiksQmlnSW50KFwiMHg3ZmZmZmZmZmZmZmZmZmZmXCIpKX0pO3gucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbih0LHIpe3JldHVybiBXdD9EYSh0aGlzLHQscik6VGEodGhpcyx0LHIpfTt4LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gV3Q/VGEodGhpcyx0LHIpOkRhKHRoaXMsdCxyKX07eC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LHIpe3JldHVybiBXdD9OYSh0aGlzLHQscik6eGEodGhpcyx0LHIpfTt4LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHQscil7cmV0dXJuIFd0P3hhKHRoaXMsdCxyKTpOYSh0aGlzLHQscil9O3gucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCxyLG4sbyl7aWYoIUZlKHRoaXMpKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKFwic291cmNlXCIsW1wiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHRoaXMpO2lmKCFGZSh0KSl0aHJvdyBuZXcgRC5FUlJfSU5WQUxJRF9BUkdfVFlQRShcInRhcmdldFwiLFtcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0KTtpZihyPT09dm9pZCAwKXI9MDtlbHNlIGlmKHI9ZWkociwwKSxyPDApdGhyb3cgbmV3IEQuRVJSX09VVF9PRl9SQU5HRShcInRhcmdldFN0YXJ0XCIsXCI+PSAwXCIscik7aWYobj09PXZvaWQgMCluPTA7ZWxzZXtpZihuPWVpKG4sMCksbjwwKXRocm93IG5ldyBELkVSUl9PVVRfT0ZfUkFOR0UoXCJzb3VyY2VTdGFydFwiLFwiPj0gMFwiLG4pO2lmKG4+PW5pKXRocm93IG5ldyBELkVSUl9PVVRfT0ZfUkFOR0UoXCJzb3VyY2VTdGFydFwiLGA8ICR7bml9YCxuKX1pZihvPT09dm9pZCAwKW89dGhpcy5sZW5ndGg7ZWxzZXtpZihvPWVpKG8sMCksbzwwKXRocm93IG5ldyBELkVSUl9PVVRfT0ZfUkFOR0UoXCJzb3VyY2VFbmRcIixcIj49IDBcIixvKTtpZihvPj1uaSl0aHJvdyBuZXcgRC5FUlJfT1VUX09GX1JBTkdFKFwic291cmNlRW5kXCIsYDwgJHtuaX1gLG8pfWlmKHI+PXQubGVuZ3RofHwobz4wJiZvPG4mJihvPW4pLG89PT1uKXx8dC5sZW5ndGg9PT0wfHx0aGlzLmxlbmd0aD09PTApcmV0dXJuIDA7bz50aGlzLmxlbmd0aCYmKG89dGhpcy5sZW5ndGgpLHQubGVuZ3RoLXI8by1uJiYobz10Lmxlbmd0aC1yK24pO2xldCBpPW8tbjtyZXR1cm4gdGhpcz09PXQmJnR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluPT1cImZ1bmN0aW9uXCI/dGhpcy5jb3B5V2l0aGluKHIsbixvKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0LHRoaXMuc3ViYXJyYXkobixvKSxyKSxpfTt4LnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQscixuLG8pe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXtpZih0eXBlb2Ygcj09XCJzdHJpbmdcIj8obz1yLHI9MCxuPXRoaXMubGVuZ3RoKTp0eXBlb2Ygbj09XCJzdHJpbmdcIiYmKG89bixuPXRoaXMubGVuZ3RoKSxvIT09dm9pZCAwJiZ0eXBlb2YgbyE9XCJzdHJpbmdcIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZih0eXBlb2Ygbz09XCJzdHJpbmdcIiYmIXguaXNFbmNvZGluZyhvKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbyk7aWYodC5sZW5ndGg9PT0xKXtsZXQgcz10LmNoYXJDb2RlQXQoMCk7KG89PT1cInV0ZjhcIiYmczwxMjh8fG89PT1cImxhdGluMVwiKSYmKHQ9cyl9fWVsc2UgdHlwZW9mIHQ9PVwibnVtYmVyXCI/dD10JjI1NTp0eXBlb2YgdD09XCJib29sZWFuXCImJih0PU51bWJlcih0KSk7aWYocjwwfHx0aGlzLmxlbmd0aDxyfHx0aGlzLmxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKFwiT3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKG48PXIpcmV0dXJuIHRoaXM7cj1yPj4+MCxuPW49PT12b2lkIDA/dGhpcy5sZW5ndGg6bj4+PjAsdHx8KHQ9MCk7bGV0IGk7aWYodHlwZW9mIHQ9PVwibnVtYmVyXCIpZm9yKGk9cjtpPG47KytpKXRoaXNbaV09dDtlbHNle2xldCBzPXguaXNCdWZmZXIodCk/dDp4LmZyb20odCxvKSxhPXMubGVuZ3RoO2lmKGE9PT0wKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19WQUxVRShcInZhbHVlXCIsdCk7Zm9yKGk9MDtpPG4tcjsrK2kpdGhpc1tpK3JdPXNbaSVhXX1yZXR1cm4gdGhpc307ZGc9ZnVuY3Rpb24oKXtsZXQgZT1cIjAxMjM0NTY3ODlhYmNkZWZcIix0PW5ldyBBcnJheSgyNTYpO2ZvcihsZXQgcj0wO3I8MTY7KytyKXtsZXQgbj1yKjE2O2ZvcihsZXQgbz0wO288MTY7KytvKXRbbitvXT1lW3JdK2Vbb119cmV0dXJuIHR9KCk7T2c9Z2xvYmFsVGhpcy5hdG9iLG1nPWdsb2JhbFRoaXMuQmxvYixTZz1nbG9iYWxUaGlzLmJ0b2F9KTt2YXIgdWU9QSgoKT0+e1dhKCl9KTt2YXIgcWUsVmE9QSgoKT0+e0Rlbm8/LmNvcmU/cWU9RGVuby5jb3JlOnFlPXtzZXROZXh0VGlja0NhbGxiYWNrOnZvaWQgMCxldmFsQ29udGV4dChlLHQpe3Rocm93IG5ldyBFcnJvcihcIkRlbm8uY29yZS5ldmFsQ29udGV4dCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnRcIil9LGVuY29kZShlKXtyZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGUpfSxldmVudExvb3BIYXNNb3JlV29yaygpe3JldHVybiExfX19KTt2YXIgb2ksSGE9QSgoKT0+e29pPSExfSk7dmFyIGlpLHNpLFZwPUEoKCk9PntpaT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuYm90dG9tPTAsdGhpcy50b3A9MCx0aGlzLmxpc3Q9bmV3IEFycmF5KDIwNDgpLHRoaXMubmV4dD1udWxsfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy50b3A9PT10aGlzLmJvdHRvbX1pc0Z1bGwoKXtyZXR1cm4odGhpcy50b3ArMSYyMDQ3KT09PXRoaXMuYm90dG9tfXB1c2godCl7dGhpcy5saXN0W3RoaXMudG9wXT10LHRoaXMudG9wPXRoaXMudG9wKzEmMjA0N31zaGlmdCgpe2xldCB0PXRoaXMubGlzdFt0aGlzLmJvdHRvbV07cmV0dXJuIHQ9PT12b2lkIDA/bnVsbDoodGhpcy5saXN0W3RoaXMuYm90dG9tXT12b2lkIDAsdGhpcy5ib3R0b209dGhpcy5ib3R0b20rMSYyMDQ3LHQpfX0sc2k9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW5ldyBpaX1pc0VtcHR5KCl7cmV0dXJuIHRoaXMuaGVhZC5pc0VtcHR5KCl9cHVzaCh0KXt0aGlzLmhlYWQuaXNGdWxsKCkmJih0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQ9bmV3IGlpKSx0aGlzLmhlYWQucHVzaCh0KX1zaGlmdCgpe2xldCB0PXRoaXMudGFpbCxyPXQuc2hpZnQoKTtyZXR1cm4gdC5pc0VtcHR5KCkmJnQubmV4dCE9PW51bGwmJih0aGlzLnRhaWw9dC5uZXh0KSxyfX19KTtmdW5jdGlvbiBjaSgpe2xldCBlO2Rve2Zvcig7ZT1haS5zaGlmdCgpOyl0cnl7bGV0IHQ9ZS5jYWxsYmFjaztpZihlLmFyZ3M9PT12b2lkIDApdCgpO2Vsc2V7bGV0IHI9ZS5hcmdzO3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnQoclswXSk7YnJlYWs7Y2FzZSAyOnQoclswXSxyWzFdKTticmVhaztjYXNlIDM6dChyWzBdLHJbMV0sclsyXSk7YnJlYWs7Y2FzZSA0OnQoclswXSxyWzFdLHJbMl0sclszXSk7YnJlYWs7ZGVmYXVsdDp0KC4uLnIpfX19ZmluYWxseXt9cWUucnVuTWljcm90YXNrcygpfXdoaWxlKCFhaS5pc0VtcHR5KCkpO3FlLnNldEhhc1RpY2tTY2hlZHVsZWQoITEpfWZ1bmN0aW9uIGl0KGUsLi4udCl7JGEoZSwuLi50KX12YXIgYWksJGEsa249QSgoKT0+e1ZhKCk7ZGUoKTtIYSgpO1ZwKCk7YWk9bmV3IHNpO2lmKHR5cGVvZiBxZS5zZXROZXh0VGlja0NhbGxiYWNrPFwidVwiKXtsZXQgZT1mdW5jdGlvbigpe3JldHVybiBxZS5oYXNUaWNrU2NoZWR1bGVkKCl8fHFlLnJ1bk1pY3JvdGFza3MoKSxxZS5oYXNUaWNrU2NoZWR1bGVkKCkmJmNpKCksITB9LHQ9ZnVuY3Rpb24ociwuLi5uKXtpZihsdChyKSxvaSlyZXR1cm47bGV0IG87c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm89W25bMF1dO2JyZWFrO2Nhc2UgMjpvPVtuWzBdLG5bMV1dO2JyZWFrO2Nhc2UgMzpvPVtuWzBdLG5bMV0sblsyXV07YnJlYWs7ZGVmYXVsdDpvPW5ldyBBcnJheShuLmxlbmd0aCk7Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspb1tzXT1uW3NdfWFpLmlzRW1wdHkoKSYmcWUuc2V0SGFzVGlja1NjaGVkdWxlZCghMCk7bGV0IGk9e2NhbGxiYWNrOnIsYXJnczpvfTthaS5wdXNoKGkpfTtxZS5zZXROZXh0VGlja0NhbGxiYWNrKGNpKSxxZS5zZXRNYWNyb3Rhc2tDYWxsYmFjayhlKSwkYT10fWVsc2UgJGE9ZnVuY3Rpb24odCwuLi5yKXtxdWV1ZU1pY3JvdGFzayhyPygpPT50LmNhbGwodGhpcywuLi5yKTp0KX19KTt2YXIgSHA9QSgoKT0+e2tuKCl9KTtmdW5jdGlvbiBHcChlLC4uLnQpe3JldHVybiBuZXcgWWEoZSwuLi50KS5kb1ByaW50ZigpfXZhciBsaSxnZyxBZyxHYSwkcCxZYSxZcD1BKCgpPT57bGk9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLndpZHRoPS0xO3RoaXMucHJlY2lzaW9uPS0xfX0sZ2c9TWF0aC5taW4sQWc9XCJcXHVGRkZEXCIsR2E9NiwkcD0vKC0/KShcXGQpXFwuPyhcXGQqKWUoWystXSkoXFxkKykvLFlhPWNsYXNze2NvbnN0cnVjdG9yKHQsLi4ucil7dGhpcy5zdGF0ZT0wO3RoaXMudmVyYj1cIlwiO3RoaXMuYnVmPVwiXCI7dGhpcy5hcmdOdW09MDt0aGlzLmZsYWdzPW5ldyBsaTt0aGlzLmZvcm1hdD10LHRoaXMuYXJncz1yLHRoaXMuaGF2ZVNlZW49QXJyYXkuZnJvbSh7bGVuZ3RoOnIubGVuZ3RofSksdGhpcy5pPTB9ZG9QcmludGYoKXtmb3IoO3RoaXMuaTx0aGlzLmZvcm1hdC5sZW5ndGg7Kyt0aGlzLmkpe2xldCBuPXRoaXMuZm9ybWF0W3RoaXMuaV07c3dpdGNoKHRoaXMuc3RhdGUpe2Nhc2UgMDpuPT09XCIlXCI/dGhpcy5zdGF0ZT0xOnRoaXMuYnVmKz1uO2JyZWFrO2Nhc2UgMTpuPT09XCIlXCI/KHRoaXMuYnVmKz1uLHRoaXMuc3RhdGU9MCk6dGhpcy5oYW5kbGVGb3JtYXQoKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKFwiU2hvdWxkIGJlIHVucmVhY2hhYmxlLCBjZXJ0YWlubHkgYSBidWcgaW4gdGhlIGxpYi5cIil9fWxldCB0PSExLHI9XCIlIShFWFRSQVwiO2ZvcihsZXQgbj0wO24hPT10aGlzLmhhdmVTZWVuLmxlbmd0aDsrK24pdGhpcy5oYXZlU2VlbltuXXx8KHQ9ITAscis9YCAnJHtEZW5vLmluc3BlY3QodGhpcy5hcmdzW25dKX0nYCk7cmV0dXJuIHIrPVwiKVwiLHQmJih0aGlzLmJ1Zis9ciksdGhpcy5idWZ9aGFuZGxlRm9ybWF0KCl7dGhpcy5mbGFncz1uZXcgbGk7bGV0IHQ9dGhpcy5mbGFncztmb3IoO3RoaXMuaTx0aGlzLmZvcm1hdC5sZW5ndGg7Kyt0aGlzLmkpe2xldCByPXRoaXMuZm9ybWF0W3RoaXMuaV07c3dpdGNoKHRoaXMuc3RhdGUpe2Nhc2UgMTpzd2l0Y2gocil7Y2FzZVwiW1wiOnRoaXMuaGFuZGxlUG9zaXRpb25hbCgpLHRoaXMuc3RhdGU9MjticmVhaztjYXNlXCIrXCI6dC5wbHVzPSEwO2JyZWFrO2Nhc2VcIjxcIjp0Lmxlc3N0aGFuPSEwO2JyZWFrO2Nhc2VcIi1cIjp0LmRhc2g9ITAsdC56ZXJvPSExO2JyZWFrO2Nhc2VcIiNcIjp0LnNoYXJwPSEwO2JyZWFrO2Nhc2VcIiBcIjp0LnNwYWNlPSEwO2JyZWFrO2Nhc2VcIjBcIjp0Lnplcm89IXQuZGFzaDticmVhaztkZWZhdWx0OmlmKFwiMVwiPD1yJiZyPD1cIjlcInx8cj09PVwiLlwifHxyPT09XCIqXCIpcj09PVwiLlwiPyh0aGlzLmZsYWdzLnByZWNpc2lvbj0wLHRoaXMuc3RhdGU9Myx0aGlzLmkrKyk6dGhpcy5zdGF0ZT00LHRoaXMuaGFuZGxlV2lkdGhBbmRQcmVjaXNpb24odCk7ZWxzZXt0aGlzLmhhbmRsZVZlcmIoKTtyZXR1cm59fWJyZWFrO2Nhc2UgMjppZihyPT09XCIqXCIpe2xldCBuPXRoaXMuZmxhZ3MucHJlY2lzaW9uPT09LTE/MDoxO3RoaXMuaGFuZGxlV2lkdGhPclByZWNpc2lvblJlZihuKSx0aGlzLnN0YXRlPTE7YnJlYWt9ZWxzZXt0aGlzLmhhbmRsZVZlcmIoKTtyZXR1cm59ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFNob3VsZCBub3QgYmUgaGVyZSAke3RoaXMuc3RhdGV9LCBsaWJyYXJ5IGJ1ZyFgKX19fWhhbmRsZVdpZHRoT3JQcmVjaXNpb25SZWYodCl7aWYodGhpcy5hcmdOdW0+PXRoaXMuYXJncy5sZW5ndGgpcmV0dXJuO2xldCByPXRoaXMuYXJnc1t0aGlzLmFyZ051bV07aWYodGhpcy5oYXZlU2Vlblt0aGlzLmFyZ051bV09ITAsdHlwZW9mIHI9PVwibnVtYmVyXCIpc3dpdGNoKHQpe2Nhc2UgMDp0aGlzLmZsYWdzLndpZHRoPXI7YnJlYWs7ZGVmYXVsdDp0aGlzLmZsYWdzLnByZWNpc2lvbj1yfWVsc2V7bGV0IG49dD09PTA/XCJXSURUSFwiOlwiUFJFQ1wiO3RoaXMudG1wRXJyb3I9YCUhKEJBRCAke259ICcke3RoaXMuYXJnc1t0aGlzLmFyZ051bV19JylgfXRoaXMuYXJnTnVtKyt9aGFuZGxlV2lkdGhBbmRQcmVjaXNpb24odCl7bGV0IHI9dGhpcy5mb3JtYXQ7Zm9yKDt0aGlzLmkhPT10aGlzLmZvcm1hdC5sZW5ndGg7Kyt0aGlzLmkpe2xldCBuPXJbdGhpcy5pXTtzd2l0Y2godGhpcy5zdGF0ZSl7Y2FzZSA0OnN3aXRjaChuKXtjYXNlXCIuXCI6dGhpcy5mbGFncy5wcmVjaXNpb249MCx0aGlzLnN0YXRlPTM7YnJlYWs7Y2FzZVwiKlwiOnRoaXMuaGFuZGxlV2lkdGhPclByZWNpc2lvblJlZigwKTticmVhaztkZWZhdWx0OntsZXQgbz1wYXJzZUludChuKTtpZihpc05hTihvKSl7dGhpcy5pLS0sdGhpcy5zdGF0ZT0xO3JldHVybn10LndpZHRoPXQud2lkdGg9PS0xPzA6dC53aWR0aCx0LndpZHRoKj0xMCx0LndpZHRoKz1vfX1icmVhaztjYXNlIDM6e2lmKG49PT1cIipcIil7dGhpcy5oYW5kbGVXaWR0aE9yUHJlY2lzaW9uUmVmKDEpO2JyZWFrfWxldCBvPXBhcnNlSW50KG4pO2lmKGlzTmFOKG8pKXt0aGlzLmktLSx0aGlzLnN0YXRlPTE7cmV0dXJufXQucHJlY2lzaW9uKj0xMCx0LnByZWNpc2lvbis9bzticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImNhbid0IGJlIGhlcmUuIGJ1Zy5cIil9fX1oYW5kbGVQb3NpdGlvbmFsKCl7aWYodGhpcy5mb3JtYXRbdGhpcy5pXSE9PVwiW1wiKXRocm93IG5ldyBFcnJvcihcIkNhbid0IGhhcHBlbj8gQnVnLlwiKTtsZXQgdD0wLHI9dGhpcy5mb3JtYXQ7dGhpcy5pKys7bGV0IG49ITE7Zm9yKDt0aGlzLmkhPT10aGlzLmZvcm1hdC5sZW5ndGgmJnJbdGhpcy5pXSE9PVwiXVwiOysrdGhpcy5pKXt0Kj0xMDtsZXQgbz1wYXJzZUludChyW3RoaXMuaV0pO2lzTmFOKG8pJiYodGhpcy50bXBFcnJvcj1cIiUhKEJBRCBJTkRFWClcIixuPSEwKSx0Kz1vfXQtMT49dGhpcy5hcmdzLmxlbmd0aCYmKHRoaXMudG1wRXJyb3I9XCIlIShCQUQgSU5ERVgpXCIsbj0hMCksdGhpcy5hcmdOdW09bj90aGlzLmFyZ051bTp0LTF9aGFuZGxlTGVzc1RoYW4oKXtsZXQgdD10aGlzLmFyZ3NbdGhpcy5hcmdOdW1dO2lmKCh0fHx7fSkuY29uc3RydWN0b3IubmFtZSE9PVwiQXJyYXlcIil0aHJvdyBuZXcgRXJyb3IoYGFyZyAke3R9IGlzIG5vdCBhbiBhcnJheS4gVG9kbyBiZXR0ZXIgZXJyb3IgaGFuZGxpbmdgKTtsZXQgcj1cIlsgXCI7Zm9yKGxldCBuPTA7biE9PXQubGVuZ3RoOysrbiluIT09MCYmKHIrPVwiLCBcIikscis9dGhpcy5faGFuZGxlVmVyYih0W25dKTtyZXR1cm4gcitcIiBdXCJ9aGFuZGxlVmVyYigpe2xldCB0PXRoaXMuZm9ybWF0W3RoaXMuaV07aWYodGhpcy52ZXJiPXQsdGhpcy50bXBFcnJvcil0aGlzLmJ1Zis9dGhpcy50bXBFcnJvcix0aGlzLnRtcEVycm9yPXZvaWQgMCx0aGlzLmFyZ051bTx0aGlzLmhhdmVTZWVuLmxlbmd0aCYmKHRoaXMuaGF2ZVNlZW5bdGhpcy5hcmdOdW1dPSEwKTtlbHNlIGlmKHRoaXMuYXJncy5sZW5ndGg8PXRoaXMuYXJnTnVtKXRoaXMuYnVmKz1gJSEoTUlTU0lORyAnJHt0fScpYDtlbHNle2xldCByPXRoaXMuYXJnc1t0aGlzLmFyZ051bV07dGhpcy5oYXZlU2Vlblt0aGlzLmFyZ051bV09ITAsdGhpcy5mbGFncy5sZXNzdGhhbj90aGlzLmJ1Zis9dGhpcy5oYW5kbGVMZXNzVGhhbigpOnRoaXMuYnVmKz10aGlzLl9oYW5kbGVWZXJiKHIpfXRoaXMuYXJnTnVtKyssdGhpcy5zdGF0ZT0wfV9oYW5kbGVWZXJiKHQpe3N3aXRjaCh0aGlzLnZlcmIpe2Nhc2VcInRcIjpyZXR1cm4gdGhpcy5wYWQodC50b1N0cmluZygpKTtjYXNlXCJiXCI6cmV0dXJuIHRoaXMuZm10TnVtYmVyKHQsMik7Y2FzZVwiY1wiOnJldHVybiB0aGlzLmZtdE51bWJlckNvZGVQb2ludCh0KTtjYXNlXCJkXCI6cmV0dXJuIHRoaXMuZm10TnVtYmVyKHQsMTApO2Nhc2VcIm9cIjpyZXR1cm4gdGhpcy5mbXROdW1iZXIodCw4KTtjYXNlXCJ4XCI6cmV0dXJuIHRoaXMuZm10SGV4KHQpO2Nhc2VcIlhcIjpyZXR1cm4gdGhpcy5mbXRIZXgodCwhMCk7Y2FzZVwiZVwiOnJldHVybiB0aGlzLmZtdEZsb2F0RSh0KTtjYXNlXCJFXCI6cmV0dXJuIHRoaXMuZm10RmxvYXRFKHQsITApO2Nhc2VcImZcIjpjYXNlXCJGXCI6cmV0dXJuIHRoaXMuZm10RmxvYXRGKHQpO2Nhc2VcImdcIjpyZXR1cm4gdGhpcy5mbXRGbG9hdEcodCk7Y2FzZVwiR1wiOnJldHVybiB0aGlzLmZtdEZsb2F0Ryh0LCEwKTtjYXNlXCJzXCI6cmV0dXJuIHRoaXMuZm10U3RyaW5nKHQpO2Nhc2VcIlRcIjpyZXR1cm4gdGhpcy5mbXRTdHJpbmcodHlwZW9mIHQpO2Nhc2VcInZcIjpyZXR1cm4gdGhpcy5mbXRWKHQpO2Nhc2VcImpcIjpyZXR1cm4gdGhpcy5mbXRKKHQpO2RlZmF1bHQ6cmV0dXJuYCUhKEJBRCBWRVJCICcke3RoaXMudmVyYn0nKWB9fXBhZCh0KXtsZXQgcj10aGlzLmZsYWdzLnplcm8/XCIwXCI6XCIgXCI7cmV0dXJuIHRoaXMuZmxhZ3MuZGFzaD90LnBhZEVuZCh0aGlzLmZsYWdzLndpZHRoLHIpOnQucGFkU3RhcnQodGhpcy5mbGFncy53aWR0aCxyKX1wYWROdW0odCxyKXtsZXQgbjtyP249XCItXCI6dGhpcy5mbGFncy5wbHVzfHx0aGlzLmZsYWdzLnNwYWNlP249dGhpcy5mbGFncy5wbHVzP1wiK1wiOlwiIFwiOm49XCJcIjtsZXQgbz10aGlzLmZsYWdzLnplcm87b3x8KHQ9bit0KTtsZXQgaT1vP1wiMFwiOlwiIFwiLHM9bz90aGlzLmZsYWdzLndpZHRoLW4ubGVuZ3RoOnRoaXMuZmxhZ3Mud2lkdGg7cmV0dXJuIHRoaXMuZmxhZ3MuZGFzaD90PXQucGFkRW5kKHMsaSk6dD10LnBhZFN0YXJ0KHMsaSksbyYmKHQ9bit0KSx0fWZtdE51bWJlcih0LHIsbj0hMSl7bGV0IG89TWF0aC5hYnModCkudG9TdHJpbmcociksaT10aGlzLmZsYWdzLnByZWNpc2lvbjtpZihpIT09LTEpZm9yKHRoaXMuZmxhZ3MuemVybz0hMSxvPXQ9PT0wJiZpPT09MD9cIlwiOm87by5sZW5ndGg8aTspbz1cIjBcIitvO2xldCBzPVwiXCI7aWYodGhpcy5mbGFncy5zaGFycClzd2l0Y2gocil7Y2FzZSAyOnMrPVwiMGJcIjticmVhaztjYXNlIDg6cys9by5zdGFydHNXaXRoKFwiMFwiKT9cIlwiOlwiMFwiO2JyZWFrO2Nhc2UgMTY6cys9XCIweFwiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGhhbmRsZSBiYXNlOiBcIityKX1yZXR1cm4gbz1vLmxlbmd0aD09PTA/bzpzK28sbiYmKG89by50b1VwcGVyQ2FzZSgpKSx0aGlzLnBhZE51bShvLHQ8MCl9Zm10TnVtYmVyQ29kZVBvaW50KHQpe2xldCByPVwiXCI7dHJ5e3I9U3RyaW5nLmZyb21Db2RlUG9pbnQodCl9Y2F0Y2h7cj1BZ31yZXR1cm4gdGhpcy5wYWQocil9Zm10RmxvYXRTcGVjaWFsKHQpe3JldHVybiBpc05hTih0KT8odGhpcy5mbGFncy56ZXJvPSExLHRoaXMucGFkTnVtKFwiTmFOXCIsITEpKTp0PT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZPyh0aGlzLmZsYWdzLnplcm89ITEsdGhpcy5mbGFncy5wbHVzPSEwLHRoaXMucGFkTnVtKFwiSW5mXCIsITEpKTp0PT09TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPyh0aGlzLmZsYWdzLnplcm89ITEsdGhpcy5wYWROdW0oXCJJbmZcIiwhMCkpOlwiXCJ9cm91bmRGcmFjdGlvblRvUHJlY2lzaW9uKHQscil7bGV0IG49ITE7aWYodC5sZW5ndGg+cil7dD1cIjFcIit0O2xldCBvPXBhcnNlSW50KHQuc3Vic3RyKDAscisyKSkvMTA7bz1NYXRoLnJvdW5kKG8pLHQ9TWF0aC5mbG9vcihvKS50b1N0cmluZygpLG49dFswXT09PVwiMlwiLHQ9dC5zdWJzdHIoMSl9ZWxzZSBmb3IoO3QubGVuZ3RoPHI7KXQrPVwiMFwiO3JldHVyblt0LG5dfWZtdEZsb2F0RSh0LHI9ITEpe2xldCBuPXRoaXMuZm10RmxvYXRTcGVjaWFsKHQpO2lmKG4hPT1cIlwiKXJldHVybiBuO2xldCBvPXQudG9FeHBvbmVudGlhbCgpLm1hdGNoKCRwKTtpZighbyl0aHJvdyBFcnJvcihcImNhbid0IGhhcHBlbiwgYnVnXCIpO2xldCBpPW9bM10scz10aGlzLmZsYWdzLnByZWNpc2lvbiE9PS0xP3RoaXMuZmxhZ3MucHJlY2lzaW9uOkdhLGE9ITE7W2ksYV09dGhpcy5yb3VuZEZyYWN0aW9uVG9QcmVjaXNpb24oaSxzKTtsZXQgYz1vWzVdLHU9b1s0XSxSPXBhcnNlSW50KG9bMl0pO2lmKGEmJihSKz0xLDEwPD1SKSl7Uj0xO2xldCBwPXBhcnNlSW50KHUrYykrMTtjPXAudG9TdHJpbmcoKSx1PXA8MD9cIi1cIjpcIitcIn1jPWMubGVuZ3RoPT0xP1wiMFwiK2M6YztsZXQgZj1gJHtSfS4ke2l9JHtyP1wiRVwiOlwiZVwifSR7dX0ke2N9YDtyZXR1cm4gdGhpcy5wYWROdW0oZix0PDApfWZtdEZsb2F0Rih0KXtsZXQgcj10aGlzLmZtdEZsb2F0U3BlY2lhbCh0KTtpZihyIT09XCJcIilyZXR1cm4gcjtmdW5jdGlvbiBuKFIpe2lmKE51bWJlci5pc1NhZmVJbnRlZ2VyKFIpKXJldHVybiBSLnRvU3RyaW5nKCkrXCIuXCI7bGV0IGY9Ui50b0V4cG9uZW50aWFsKCkuc3BsaXQoXCJlXCIpLHA9ZlswXS5yZXBsYWNlKFwiLlwiLFwiXCIpLGw9cGFyc2VJbnQoZlsxXSk7aWYobDwwKXtsZXQgXz1cIjAuXCI7Zm9yKGxldCBFPTA7RSE9PU1hdGguYWJzKGwpLTE7KytFKV8rPVwiMFwiO3JldHVybiBfKz1wfWVsc2V7bGV0IF89bCsxO2Zvcig7cC5sZW5ndGg8XzspcCs9XCIwXCI7cmV0dXJuIHAuc3Vic3RyKDAsXykrXCIuXCIrcC5zdWJzdHIoXyl9fWxldCBpPW4oTWF0aC5hYnModCkpLnNwbGl0KFwiLlwiKSxzPWlbMF0sYT1pWzFdLGM9dGhpcy5mbGFncy5wcmVjaXNpb24hPT0tMT90aGlzLmZsYWdzLnByZWNpc2lvbjpHYSx1PSExO3JldHVyblthLHVdPXRoaXMucm91bmRGcmFjdGlvblRvUHJlY2lzaW9uKGEsYyksdSYmKHM9KHBhcnNlSW50KHMpKzEpLnRvU3RyaW5nKCkpLHRoaXMucGFkTnVtKGAke3N9LiR7YX1gLHQ8MCl9Zm10RmxvYXRHKHQscj0hMSl7bGV0IG49dGhpcy5mbXRGbG9hdFNwZWNpYWwodCk7aWYobiE9PVwiXCIpcmV0dXJuIG47bGV0IG89dGhpcy5mbGFncy5wcmVjaXNpb24hPT0tMT90aGlzLmZsYWdzLnByZWNpc2lvbjpHYTtvPW89PT0wPzE6bztsZXQgaT10LnRvRXhwb25lbnRpYWwoKS5tYXRjaCgkcCk7aWYoIWkpdGhyb3cgRXJyb3IoXCJjYW4ndCBoYXBwZW5cIik7bGV0IHM9cGFyc2VJbnQoaVs1XSkqKGlbNF09PT1cIi1cIj8tMToxKSxhPVwiXCI7cmV0dXJuIG8+cyYmcz49LTQ/KHRoaXMuZmxhZ3MucHJlY2lzaW9uPW8tKHMrMSksYT10aGlzLmZtdEZsb2F0Rih0KSx0aGlzLmZsYWdzLnNoYXJwfHwoYT1hLnJlcGxhY2UoL1xcLj8wKiQvLFwiXCIpKSk6KHRoaXMuZmxhZ3MucHJlY2lzaW9uPW8tMSxhPXRoaXMuZm10RmxvYXRFKHQpLHRoaXMuZmxhZ3Muc2hhcnB8fChhPWEucmVwbGFjZSgvXFwuPzAqZS8scj9cIkVcIjpcImVcIikpKSxhfWZtdFN0cmluZyh0KXtyZXR1cm4gdGhpcy5mbGFncy5wcmVjaXNpb24hPT0tMSYmKHQ9dC5zdWJzdHIoMCx0aGlzLmZsYWdzLnByZWNpc2lvbikpLHRoaXMucGFkKHQpfWZtdEhleCh0LHI9ITEpe3N3aXRjaCh0eXBlb2YgdCl7Y2FzZVwibnVtYmVyXCI6cmV0dXJuIHRoaXMuZm10TnVtYmVyKHQsMTYscik7Y2FzZVwic3RyaW5nXCI6e2xldCBuPXRoaXMuZmxhZ3Muc2hhcnAmJnQubGVuZ3RoIT09MCxvPW4/XCIweFwiOlwiXCIsaT10aGlzLmZsYWdzLnByZWNpc2lvbixzPWkhPT0tMT9nZyhpLHQubGVuZ3RoKTp0Lmxlbmd0aDtmb3IobGV0IGE9MDthIT09czsrK2Epe2EhPT0wJiZ0aGlzLmZsYWdzLnNwYWNlJiYobys9bj9cIiAweFwiOlwiIFwiKTtsZXQgYz0odC5jaGFyQ29kZUF0KGEpJjI1NSkudG9TdHJpbmcoMTYpO28rPWMubGVuZ3RoPT09MT9gMCR7Y31gOmN9cmV0dXJuIHImJihvPW8udG9VcHBlckNhc2UoKSksdGhpcy5wYWQobyl9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJjdXJyZW50bHkgb25seSBudW1iZXIgYW5kIHN0cmluZyBhcmUgaW1wbGVtZW50ZWQgZm9yIGhleFwiKX19Zm10Vih0KXtpZih0aGlzLmZsYWdzLnNoYXJwKXtsZXQgcj10aGlzLmZsYWdzLnByZWNpc2lvbiE9PS0xP3tkZXB0aDp0aGlzLmZsYWdzLnByZWNpc2lvbn06e307cmV0dXJuIHRoaXMucGFkKERlbm8uaW5zcGVjdCh0LHIpKX1lbHNle2xldCByPXRoaXMuZmxhZ3MucHJlY2lzaW9uO3JldHVybiByPT09LTE/dC50b1N0cmluZygpOnQudG9TdHJpbmcoKS5zdWJzdHIoMCxyKX19Zm10Sih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9fX0pO3ZhciBLYT17fTtjZShLYSx7QUxMX1BST1BFUlRJRVM6KCk9PmZpLE9OTFlfQ09ORklHVVJBQkxFOigpPT5LcCxPTkxZX0VOVU1FUkFCTEU6KCk9PkJuLE9OTFlfRU5VTV9XUklUQUJMRTooKT0+TmcsT05MWV9XUklUQUJMRTooKT0+anAsU0tJUF9TVFJJTkdTOigpPT5YcCxTS0lQX1NZTUJPTFM6KCk9PmphLGdldE93bk5vbkluZGV4UHJvcGVydGllczooKT0+Rm4sZ3Vlc3NIYW5kbGVUeXBlOigpPT54Zyxpc0FycmF5SW5kZXg6KCk9PnFwfSk7ZnVuY3Rpb24geGcoZSl7VShcInV0aWwuZ3Vlc3NIYW5kbGVUeXBlXCIpfWZ1bmN0aW9uIHFwKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGU+PTAmJihlfDApPT09ZTtjYXNlXCJzdHJpbmdcIjp7bGV0IHQ9dWlbZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdDtsZXQgcj1lLmxlbmd0aDtpZihyPT09MClyZXR1cm4gdWlbZV09ITE7bGV0IG49MCxvPTA7Zm9yKDtvPHI7KytvKWlmKG49ZS5jaGFyQ29kZUF0KG8pLG89PT0wJiZuPT09NDgmJnI+MXx8bjw0OHx8bj41NylyZXR1cm4gdWlbZV09ITE7cmV0dXJuIHVpW2VdPSEwfWRlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEZuKGUsdCl7bGV0IHI9Wy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSldO2lmKEFycmF5LmlzQXJyYXkoZSkmJihyPXIuZmlsdGVyKG89PiFxcChvKSkpLHQ9PT1maSlyZXR1cm4gcjtsZXQgbj1bXTtmb3IobGV0IG8gb2Ygcil7bGV0IGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG8pO2khPT12b2lkIDAmJih0JmpwJiYhaS53cml0YWJsZXx8dCZCbiYmIWkuZW51bWVyYWJsZXx8dCZLcCYmIWkuY29uZmlndXJhYmxlfHx0JlhwJiZ0eXBlb2Ygbz09XCJzdHJpbmdcInx8dCZqYSYmdHlwZW9mIG89PVwic3ltYm9sXCJ8fG4ucHVzaChvKSl9cmV0dXJuIG59dmFyIGZpLGpwLEJuLEtwLE5nLFhwLGphLHVpLHBpPUEoKCk9Pnt5ZSgpO2ZpPTAsanA9MSxCbj0yLEtwPTQsTmc9NixYcD04LGphPTE2LHVpPXt9fSk7ZnVuY3Rpb24gRmcoZSx0KXtsZXQgcj17c3R5bGl6ZTplLnN0eWxpemUsc2hvd0hpZGRlbjplLnNob3dIaWRkZW4sZGVwdGg6ZS5kZXB0aCxjb2xvcnM6ZS5jb2xvcnMsY3VzdG9tSW5zcGVjdDplLmN1c3RvbUluc3BlY3Qsc2hvd1Byb3h5OmUuc2hvd1Byb3h5LG1heEFycmF5TGVuZ3RoOmUubWF4QXJyYXlMZW5ndGgsbWF4U3RyaW5nTGVuZ3RoOmUubWF4U3RyaW5nTGVuZ3RoLGJyZWFrTGVuZ3RoOmUuYnJlYWtMZW5ndGgsY29tcGFjdDplLmNvbXBhY3Qsc29ydGVkOmUuc29ydGVkLGdldHRlcnM6ZS5nZXR0ZXJzLC4uLmUudXNlck9wdGlvbnN9O2lmKHQpe09iamVjdC5zZXRQcm90b3R5cGVPZihyLG51bGwpO2ZvcihsZXQgbiBvZiBPYmplY3Qua2V5cyhyKSkodHlwZW9mIHJbbl09PVwib2JqZWN0XCJ8fHR5cGVvZiByW25dPT1cImZ1bmN0aW9uXCIpJiZyW25dIT09bnVsbCYmZGVsZXRlIHJbbl07ci5zdHlsaXplPU9iamVjdC5zZXRQcm90b3R5cGVPZigobixvKT0+e2xldCBpO3RyeXtpPWAke2Uuc3R5bGl6ZShuLG8pfWB9Y2F0Y2h7fXJldHVybiB0eXBlb2YgaSE9XCJzdHJpbmdcIj9uOml9LG51bGwpfXJldHVybiByfWZ1bmN0aW9uIG9lKGUsdCl7bGV0IHI9e2J1ZGdldDp7fSxpbmRlbnRhdGlvbkx2bDowLHNlZW46W10sY3VycmVudERlcHRoOjAsc3R5bGl6ZTpKYSxzaG93SGlkZGVuOlFlLnNob3dIaWRkZW4sZGVwdGg6UWUuZGVwdGgsY29sb3JzOlFlLmNvbG9ycyxjdXN0b21JbnNwZWN0OlFlLmN1c3RvbUluc3BlY3Qsc2hvd1Byb3h5OlFlLnNob3dQcm94eSxtYXhBcnJheUxlbmd0aDpRZS5tYXhBcnJheUxlbmd0aCxtYXhTdHJpbmdMZW5ndGg6UWUubWF4U3RyaW5nTGVuZ3RoLGJyZWFrTGVuZ3RoOlFlLmJyZWFrTGVuZ3RoLGNvbXBhY3Q6UWUuY29tcGFjdCxzb3J0ZWQ6UWUuc29ydGVkLGdldHRlcnM6UWUuZ2V0dGVyc307aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtpZihhcmd1bWVudHMubGVuZ3RoPjImJihhcmd1bWVudHNbMl0hPT12b2lkIDAmJihyLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDAmJihyLmNvbG9ycz1hcmd1bWVudHNbM10pKSx0eXBlb2YgdD09XCJib29sZWFuXCIpci5zaG93SGlkZGVuPXQ7ZWxzZSBpZih0KXtsZXQgbj1PYmplY3Qua2V5cyh0KTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoOysrbyl7bGV0IGk9bltvXTtRZS5oYXNPd25Qcm9wZXJ0eShpKXx8aT09PVwic3R5bGl6ZVwiP3JbaV09dFtpXTpyLnVzZXJPcHRpb25zPT09dm9pZCAwJiYoci51c2VyT3B0aW9ucz10KX19fXJldHVybiByLmNvbG9ycyYmKHIuc3R5bGl6ZT12Zyksci5tYXhBcnJheUxlbmd0aD09PW51bGwmJihyLm1heEFycmF5TGVuZ3RoPTEvMCksci5tYXhTdHJpbmdMZW5ndGg9PT1udWxsJiYoci5tYXhTdHJpbmdMZW5ndGg9MS8wKSx6ZShyLGUsMCl9ZnVuY3Rpb24gZnQoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkob2UuY29sb3JzLHQse2dldCgpe3JldHVybiB0aGlzW2VdfSxzZXQocil7dGhpc1tlXT1yfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIFhhKGUsdCl7cmV0dXJuIHQ9PT0tMT9gXCIke2V9XCJgOnQ9PT0tMj9gXFxgJHtlfVxcYGA6YCcke2V9J2B9ZnVuY3Rpb24gWmEoZSl7bGV0IHQ9Q2cscj1RYSxuPTM5O2lmKGUuaW5jbHVkZXMoXCInXCIpJiYoZS5pbmNsdWRlcygnXCInKT8hZS5pbmNsdWRlcyhcImBcIikmJiFlLmluY2x1ZGVzKFwiJHtcIikmJihuPS0yKTpuPS0xLG4hPT0zOSYmKHQ9TGcscj13ZykpLGUubGVuZ3RoPDVlMyYmIXQudGVzdChlKSlyZXR1cm4gWGEoZSxuKTtpZihlLmxlbmd0aD4xMDApcmV0dXJuIGU9ZS5yZXBsYWNlKHIsemEpLFhhKGUsbik7bGV0IG89XCJcIixpPTAscz1lLmxlbmd0aDtmb3IobGV0IGE9MDthPHM7YSsrKXtsZXQgYz1lLmNoYXJDb2RlQXQoYSk7KGM9PT1ufHxjPT09OTJ8fGM8MzJ8fGM+MTI2JiZjPDE2MCkmJihpPT09YT9vKz1xYVtjXTpvKz1gJHtlLnNsaWNlKGksYSl9JHtxYVtjXX1gLGk9YSsxKX1yZXR1cm4gaSE9PXMmJihvKz1lLnNsaWNlKGkpKSxYYShvLG4pfWZ1bmN0aW9uIHZnKGUsdCl7bGV0IHI9b2Uuc3R5bGVzW3RdO2lmKHIhPT12b2lkIDApe2xldCBuPW9lLmNvbG9yc1tyXTtpZihuIT09dm9pZCAwKXJldHVybmBcXHgxQlske25bMF19bSR7ZX1cXHgxQlske25bMV19bWB9cmV0dXJuIGV9ZnVuY3Rpb24gSmEoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gemUoZSx0LHIsbil7aWYodHlwZW9mIHQhPVwib2JqZWN0XCImJnR5cGVvZiB0IT1cImZ1bmN0aW9uXCImJiFyUih0KSlyZXR1cm4gdGMoZS5zdHlsaXplLHQsZSk7aWYodD09PW51bGwpcmV0dXJuIGUuc3R5bGl6ZShcIm51bGxcIixcIm51bGxcIik7bGV0IG89dCxpPXZvaWQgMDtpZihlLmN1c3RvbUluc3BlY3Qpe2xldCBzPXRbblJdO2lmKHR5cGVvZiBzPT1cImZ1bmN0aW9uXCImJnMhPT1vZSYmISh0LmNvbnN0cnVjdG9yJiZ0LmNvbnN0cnVjdG9yLnByb3RvdHlwZT09PXQpKXtsZXQgYT1lLmRlcHRoPT09bnVsbD9udWxsOmUuZGVwdGgtcixjPWkhPT12b2lkIDB8fCEobyBpbnN0YW5jZW9mIE9iamVjdCksdT1zLmNhbGwobyxhLEZnKGUsYykpO2lmKHUhPT1vKXJldHVybiB0eXBlb2YgdSE9XCJzdHJpbmdcIj96ZShlLHUscik6dS5yZXBsYWNlKC9cXG4vZyxgXG4ke1wiIFwiLnJlcGVhdChlLmluZGVudGF0aW9uTHZsKX1gKX19aWYoZS5zZWVuLmluY2x1ZGVzKHQpKXtsZXQgcz0xO3JldHVybiBlLmNpcmN1bGFyPT09dm9pZCAwPyhlLmNpcmN1bGFyPW5ldyBNYXAsZS5jaXJjdWxhci5zZXQodCxzKSk6KHM9ZS5jaXJjdWxhci5nZXQodCkscz09PXZvaWQgMCYmKHM9ZS5jaXJjdWxhci5zaXplKzEsZS5jaXJjdWxhci5zZXQodCxzKSkpLGUuc3R5bGl6ZShgW0NpcmN1bGFyICoke3N9XWAsXCJzcGVjaWFsXCIpfXJldHVybiBXZyhlLHQscixuKX1mdW5jdGlvbiBXZyhlLHQscixuKXtsZXQgbyxpO2Uuc2hvd0hpZGRlbiYmKHI8PWUuZGVwdGh8fGUuZGVwdGg9PT1udWxsKSYmKGk9W10pO2xldCBzPWlSKHQsZSxyLGkpO2khPT12b2lkIDAmJmkubGVuZ3RoPT09MCYmKGk9dm9pZCAwKTtsZXQgYT10W1N5bWJvbC50b1N0cmluZ1RhZ107dHlwZW9mIGEhPVwic3RyaW5nXCImJihhPVwiXCIpO2xldCBjPVwiXCIsdT1IZyxSLGY9ITAscD0wLGw9ZS5zaG93SGlkZGVuP2ZpOkJuLF89SHI7aWYodFtTeW1ib2wuaXRlcmF0b3JdfHxzPT09bnVsbClpZihmPSExLEFycmF5LmlzQXJyYXkodCkpe2xldCBPPXMhPT1cIkFycmF5XCJ8fGEhPT1cIlwiP1ZlKHMsYSxcIkFycmF5XCIsYCgke3QubGVuZ3RofSlgKTpcIlwiO2lmKG89Rm4odCxsKSxSPVtgJHtPfVtgLFwiXVwiXSx0Lmxlbmd0aD09PTAmJm8ubGVuZ3RoPT09MCYmaT09PXZvaWQgMClyZXR1cm5gJHtSWzBdfV1gO189X2ksdT1HZ31lbHNlIGlmKHZvKHQpKXtsZXQgTz10LnNpemUsbT1WZShzLGEsXCJTZXRcIixgKCR7T30pYCk7aWYobz12bih0LGUuc2hvd0hpZGRlbiksdT1zIT09bnVsbD9RcC5iaW5kKG51bGwsdCk6UXAuYmluZChudWxsLHQudmFsdWVzKCkpLE89PT0wJiZvLmxlbmd0aD09PTAmJmk9PT12b2lkIDApcmV0dXJuYCR7bX17fWA7Uj1bYCR7bX17YCxcIn1cIl19ZWxzZSBpZihGbyh0KSl7bGV0IE89dC5zaXplLG09VmUocyxhLFwiTWFwXCIsYCgke099KWApO2lmKG89dm4odCxlLnNob3dIaWRkZW4pLHU9cyE9PW51bGw/enAuYmluZChudWxsLHQpOnpwLmJpbmQobnVsbCx0LmVudHJpZXMoKSksTz09PTAmJm8ubGVuZ3RoPT09MCYmaT09PXZvaWQgMClyZXR1cm5gJHttfXt9YDtSPVtgJHttfXtgLFwifVwiXX1lbHNlIGlmKHdvKHQpKXtvPUZuKHQsbCk7bGV0IE89dCxtPVwiXCIsTj10Lmxlbmd0aDtpZihSPVtgJHtWZShzLGEsbSxgKCR7Tn0pYCl9W2AsXCJdXCJdLHQubGVuZ3RoPT09MCYmby5sZW5ndGg9PT0wJiYhZS5zaG93SGlkZGVuKXJldHVybmAke1JbMF19XWA7dT1ZZy5iaW5kKG51bGwsTyxOKSxfPV9pfWVsc2UgS3ModCk/KG89dm4odCxlLnNob3dIaWRkZW4pLFI9WnAoXCJNYXBcIixhKSx1PUpwLmJpbmQobnVsbCxSKSk6WHModCk/KG89dm4odCxlLnNob3dIaWRkZW4pLFI9WnAoXCJTZXRcIixhKSx1PUpwLmJpbmQobnVsbCxSKSk6Zj0hMDtpZihmKWlmKG89dm4odCxlLnNob3dIaWRkZW4pLFI9W1wie1wiLFwifVwiXSxzPT09XCJPYmplY3RcIil7aWYoJHModCk/UlswXT1cIltBcmd1bWVudHNdIHtcIjphIT09XCJcIiYmKFJbMF09YCR7VmUocyxhLFwiT2JqZWN0XCIpfXtgKSxvLmxlbmd0aD09PTAmJmk9PT12b2lkIDApcmV0dXJuYCR7UlswXX19YH1lbHNlIGlmKHR5cGVvZiB0PT1cImZ1bmN0aW9uXCIpe2lmKGM9amcodCxzLGEpLG8ubGVuZ3RoPT09MCYmaT09PXZvaWQgMClyZXR1cm4gZS5zdHlsaXplKGMsXCJzcGVjaWFsXCIpfWVsc2UgaWYoQm8odCkpe2M9UmVnRXhwKHMhPT1udWxsP3Q6bmV3IFJlZ0V4cCh0KSkudG9TdHJpbmcoKTtsZXQgTz1WZShzLGEsXCJSZWdFeHBcIik7aWYoTyE9PVwiUmVnRXhwIFwiJiYoYz1gJHtPfSR7Y31gKSxvLmxlbmd0aD09PTAmJmk9PT12b2lkIDB8fHI+ZS5kZXB0aCYmZS5kZXB0aCE9PW51bGwpcmV0dXJuIGUuc3R5bGl6ZShjLFwicmVnZXhwXCIpfWVsc2UgaWYoZ24odCkpe2M9TnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT90LnRvU3RyaW5nKCk6dC50b0lTT1N0cmluZygpO2xldCBPPVZlKHMsYSxcIkRhdGVcIik7aWYoTyE9PVwiRGF0ZSBcIiYmKGM9YCR7T30ke2N9YCksby5sZW5ndGg9PT0wJiZpPT09dm9pZCAwKXJldHVybiBlLnN0eWxpemUoYyxcImRhdGVcIil9ZWxzZSBpZih0IGluc3RhbmNlb2YgRXJyb3Ipe2lmKGM9S2codCxzLGEsZSxvKSxvLmxlbmd0aD09PTAmJmk9PT12b2lkIDApcmV0dXJuIGN9ZWxzZSBpZihKdCh0KSl7bGV0IE89enModCk/XCJBcnJheUJ1ZmZlclwiOlwiU2hhcmVkQXJyYXlCdWZmZXJcIixtPVZlKHMsYSxPKTtpZihuPT09dm9pZCAwKXU9cWc7ZWxzZSBpZihvLmxlbmd0aD09PTAmJmk9PT12b2lkIDApcmV0dXJuIG0rYHsgYnl0ZUxlbmd0aDogJHtyYyhlLnN0eWxpemUsdC5ieXRlTGVuZ3RoKX0gfWA7UlswXT1gJHttfXtgLEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwobyxcImJ5dGVMZW5ndGhcIil9ZWxzZSBpZihacyh0KSlSWzBdPWAke1ZlKHMsYSxcIkRhdGFWaWV3XCIpfXtgLEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwobyxcImJ5dGVMZW5ndGhcIixcImJ5dGVPZmZzZXRcIixcImJ1ZmZlclwiKTtlbHNlIGlmKGpzKHQpKVJbMF09YCR7VmUocyxhLFwiUHJvbWlzZVwiKX17YCx1PVFnO2Vsc2UgaWYoUXModCkpUlswXT1gJHtWZShzLGEsXCJXZWFrU2V0XCIpfXtgLHU9ZS5zaG93SGlkZGVuP3pnOmVSO2Vsc2UgaWYocXModCkpUlswXT1gJHtWZShzLGEsXCJXZWFrTWFwXCIpfXtgLHU9ZS5zaG93SGlkZGVuP1pnOmVSO2Vsc2UgaWYoSnModCkpUlswXT1gJHtWZShzLGEsXCJNb2R1bGVcIil9e2AsdT10QS5iaW5kKG51bGwsbyk7ZWxzZSBpZihXbyh0KSl7aWYoYz1uQSh0LGUsbyxzLGEpLG8ubGVuZ3RoPT09MCYmaT09PXZvaWQgMClyZXR1cm4gY31lbHNle2lmKG8ubGVuZ3RoPT09MCYmaT09PXZvaWQgMClyZXR1cm5gJHtSaSh0LHMsYSl9e31gO1JbMF09YCR7UmkodCxzLGEpfXtgfWlmKHI+ZS5kZXB0aCYmZS5kZXB0aCE9PW51bGwpe2xldCBPPVJpKHQscyxhKS5zbGljZSgwLC0xKTtyZXR1cm4gcyE9PW51bGwmJihPPWBbJHtPfV1gKSxlLnN0eWxpemUoTyxcInNwZWNpYWxcIil9cis9MSxlLnNlZW4ucHVzaCh0KSxlLmN1cnJlbnREZXB0aD1yO2xldCBFLGg9ZS5pbmRlbnRhdGlvbkx2bDt0cnl7Zm9yKEU9dShlLHQscikscD0wO3A8by5sZW5ndGg7cCsrKUUucHVzaCgkcihlLHQscixvW3BdLF8pKTtpIT09dm9pZCAwJiZFLnB1c2goLi4uaSl9Y2F0Y2goTyl7bGV0IG09UmkodCxzLGEpLnNsaWNlKDAsLTEpO3JldHVybiB2b2lkIDB9aWYoZS5jaXJjdWxhciE9PXZvaWQgMCl7bGV0IE89ZS5jaXJjdWxhci5nZXQodCk7aWYoTyE9PXZvaWQgMCl7bGV0IG09ZS5zdHlsaXplKGA8cmVmICoke099PmAsXCJzcGVjaWFsXCIpO2UuY29tcGFjdCE9PSEwP2M9Yz09PVwiXCI/bTpgJHttfSAke2N9YDpSWzBdPWAke219ICR7UlswXX1gfX1pZihlLnNlZW4ucG9wKCksZS5zb3J0ZWQpe2xldCBPPWUuc29ydGVkPT09ITA/dm9pZCAwOmUuc29ydGVkO2lmKF89PT1IcilFPUUuc29ydChPKTtlbHNlIGlmKG8ubGVuZ3RoPjEpe2xldCBtPUUuc2xpY2UoRS5sZW5ndGgtby5sZW5ndGgpLnNvcnQoTyk7RS5zcGxpY2UoRS5sZW5ndGgtby5sZW5ndGgsby5sZW5ndGgsLi4ubSl9fWxldCBTPWFSKGUsRSxjLFIsXyxyLHQpLGc9KGUuYnVkZ2V0W2UuaW5kZW50YXRpb25MdmxdfHwwKStTLmxlbmd0aDtyZXR1cm4gZS5idWRnZXRbZS5pbmRlbnRhdGlvbkx2bF09ZyxnPjIqKjI3JiYoZS5kZXB0aD0tMSksU31mdW5jdGlvbiBWZyhlLHQscixuLG8pe2xldCBpPTAscyxhO2Rve2lmKGkhPT0wfHx0PT09cil7aWYocj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yocikscj09PW51bGwpcmV0dXJuO2xldCBjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixcImNvbnN0cnVjdG9yXCIpO2lmKGMhPT12b2lkIDAmJnR5cGVvZiBjLnZhbHVlPT1cImZ1bmN0aW9uXCImJm9SLmhhcyhjLnZhbHVlLm5hbWUpKXJldHVybn1pPT09MD9hPW5ldyBTZXQ6QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzLGM9PmEuYWRkKGMpKSxzPVJlZmxlY3Qub3duS2V5cyhyKSxBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKGUuc2Vlbix0KTtmb3IobGV0IGMgb2Ygcyl7aWYoYz09PVwiY29uc3RydWN0b3JcInx8dC5oYXNPd25Qcm9wZXJ0eShjKXx8aSE9PTAmJmEuaGFzKGMpKWNvbnRpbnVlO2xldCB1PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixjKTtpZih0eXBlb2YgdS52YWx1ZT09XCJmdW5jdGlvblwiKWNvbnRpbnVlO2xldCBSPSRyKGUscixuLGMsSHIsdSx0KTtlLmNvbG9ycz9BcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKG8sYFxceDFCWzJtJHtSfVxceDFCWzIybWApOkFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwobyxSKX1BcnJheS5wcm90b3R5cGUucG9wLmNhbGwoZS5zZWVuKX13aGlsZSgrK2khPT0zKX1mdW5jdGlvbiBpUihlLHQscixuKXtsZXQgbyxpPWU7Zm9yKDtlfHxyUihlKTspe2xldCBjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxcImNvbnN0cnVjdG9yXCIpO2lmKGMhPT12b2lkIDAmJnR5cGVvZiBjLnZhbHVlPT1cImZ1bmN0aW9uXCImJmMudmFsdWUubmFtZSE9PVwiXCImJiRnKGksYy52YWx1ZSkpcmV0dXJuIG4hPT12b2lkIDAmJihvIT09ZXx8IW9SLmhhcyhjLnZhbHVlLm5hbWUpKSYmVmcodCxpLG98fGkscixuKSxjLnZhbHVlLm5hbWU7ZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSksbz09PXZvaWQgMCYmKG89ZSl9aWYobz09PW51bGwpcmV0dXJuIG51bGw7bGV0IHM9dm9pZCAwO2lmKHI+dC5kZXB0aCYmdC5kZXB0aCE9PW51bGwpcmV0dXJuYCR7c30gPENvbXBsZXggcHJvdG90eXBlPmA7bGV0IGE9aVIobyx0LHIrMSxuKTtyZXR1cm4gYT09PW51bGw/YCR7c30gPCR7b2Uobyx7Li4udCxjdXN0b21JbnNwZWN0OiExLGRlcHRoOi0xfSl9PmA6YCR7c30gPCR7YX0+YH1mdW5jdGlvbiB0YyhlLHQscil7aWYodHlwZW9mIHQ9PVwic3RyaW5nXCIpe2xldCBuPVwiXCI7aWYodC5sZW5ndGg+ci5tYXhTdHJpbmdMZW5ndGgpe2xldCBvPXQubGVuZ3RoLXIubWF4U3RyaW5nTGVuZ3RoO3Q9dC5zbGljZSgwLHIubWF4U3RyaW5nTGVuZ3RoKSxuPWAuLi4gJHtvfSBtb3JlIGNoYXJhY3RlciR7bz4xP1wic1wiOlwiXCJ9YH1yZXR1cm4gci5jb21wYWN0IT09ITAmJnQubGVuZ3RoPklnJiZ0Lmxlbmd0aD5yLmJyZWFrTGVuZ3RoLXIuaW5kZW50YXRpb25MdmwtND90LnNwbGl0KC8oKS8pLm1hcChvPT5lKFphKG8pLFwic3RyaW5nXCIpKS5qb2luKGAgK1xuJHtcIiBcIi5yZXBlYXQoci5pbmRlbnRhdGlvbkx2bCsyKX1gKStuOmUoWmEodCksXCJzdHJpbmdcIikrbn1yZXR1cm4gdHlwZW9mIHQ9PVwibnVtYmVyXCI/cmMoZSx0KTp0eXBlb2YgdD09XCJiaWdpbnRcIj9zUihlLHQpOnR5cGVvZiB0PT1cImJvb2xlYW5cIj9lKGAke3R9YCxcImJvb2xlYW5cIik6dHlwZW9mIHQ+XCJ1XCI/ZShcInVuZGVmaW5lZFwiLFwidW5kZWZpbmVkXCIpOmUodC50b1N0cmluZygpLFwic3ltYm9sXCIpfWZ1bmN0aW9uIEhnKCl7cmV0dXJuW119ZnVuY3Rpb24gJGcoZSx0KXt0cnl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0fWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBWZShlLHQscixuPVwiXCIpe3JldHVybiBlPT09bnVsbD90IT09XCJcIiYmciE9PXQ/YFske3J9JHtufTogbnVsbCBwcm90b3R5cGVdIFske3R9XSBgOmBbJHtyfSR7bn06IG51bGwgcHJvdG90eXBlXSBgOnQhPT1cIlwiJiZlIT09dD9gJHtlfSR7bn0gWyR7dH1dIGA6YCR7ZX0ke259IGB9ZnVuY3Rpb24gR2coZSx0LHIpe2xldCBuPXQubGVuZ3RoLG89TWF0aC5taW4oTWF0aC5tYXgoMCxlLm1heEFycmF5TGVuZ3RoKSxuKSxpPW4tbyxzPVtdO2ZvcihsZXQgYT0wO2E8bzthKyspe2lmKCF0Lmhhc093blByb3BlcnR5KGEpKXJldHVybiByQShlLHQscixvLHMsYSk7cy5wdXNoKCRyKGUsdCxyLGEsZWMpKX1yZXR1cm4gaT4wJiZzLnB1c2goYC4uLiAke2l9IG1vcmUgaXRlbSR7aT4xP1wic1wiOlwiXCJ9YCksc31mdW5jdGlvbiBSaShlLHQscil7bGV0IG49XCJcIjtyZXR1cm4gdD09PW51bGwmJm49PT1yJiYobj1cIk9iamVjdFwiKSxWZSh0LHIsbil9ZnVuY3Rpb24gdm4oZSx0KXtsZXQgcixuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aWYodClyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLG4ubGVuZ3RoIT09MCYmQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocixuKTtlbHNle3RyeXtyPU9iamVjdC5rZXlzKGUpfWNhdGNoe3I9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSl9bi5sZW5ndGh9cmV0dXJuIHJ9ZnVuY3Rpb24gUXAoZSx0LHIsbil7bGV0IG89W107dC5pbmRlbnRhdGlvbkx2bCs9Mjtmb3IobGV0IGkgb2YgZSlBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKG8semUodCxpLG4pKTtyZXR1cm4gdC5pbmRlbnRhdGlvbkx2bC09MixvfWZ1bmN0aW9uIHpwKGUsdCxyLG4pe2xldCBvPVtdO3QuaW5kZW50YXRpb25MdmwrPTI7Zm9yKGxldHswOmksMTpzfW9mIGUpby5wdXNoKGAke3plKHQsaSxuKX0gPT4gJHt6ZSh0LHMsbil9YCk7cmV0dXJuIHQuaW5kZW50YXRpb25MdmwtPTIsb31mdW5jdGlvbiBZZyhlLHQscixuLG8pe2xldCBpPU1hdGgubWluKE1hdGgubWF4KDAsci5tYXhBcnJheUxlbmd0aCksdCkscz1lLmxlbmd0aC1pLGE9bmV3IEFycmF5KGkpLGM9ZS5sZW5ndGg+MCYmdHlwZW9mIGVbMF09PVwibnVtYmVyXCI/cmM6c1I7Zm9yKGxldCB1PTA7dTxpOysrdSlhW3VdPWMoci5zdHlsaXplLGVbdV0pO2lmKHM+MCYmKGFbaV09YC4uLiAke3N9IG1vcmUgaXRlbSR7cz4xP1wic1wiOlwiXCJ9YCksci5zaG93SGlkZGVuKXtyLmluZGVudGF0aW9uTHZsKz0yO2ZvcihsZXQgdSBvZltcIkJZVEVTX1BFUl9FTEVNRU5UXCIsXCJsZW5ndGhcIixcImJ5dGVMZW5ndGhcIixcImJ5dGVPZmZzZXRcIixcImJ1ZmZlclwiXSl7bGV0IFI9emUocixlW3VdLG8sITApO0FycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoYSxgWyR7dX1dOiAke1J9YCl9ci5pbmRlbnRhdGlvbkx2bC09Mn1yZXR1cm4gYX1mdW5jdGlvbiBacChlLHQpe3JldHVybiB0IT09YCR7ZX0gSXRlcmF0b3JgJiYodCE9PVwiXCImJih0Kz1cIl0gW1wiKSx0Kz1gJHtlfSBJdGVyYXRvcmApLFtgWyR7dH1dIHtgLFwifVwiXX1mdW5jdGlvbiBKcChlLHQscixuKXtsZXR7MDpvLDE6aX09cjtyZXR1cm4gaT8oZVswXT1lWzBdLnJlcGxhY2UoLyBJdGVyYXRvcl0geyQvLFwiIEVudHJpZXNdIHtcIiksY1IodCxuLG8sVGcpKTpsUih0LG4sbyx5Zyl9ZnVuY3Rpb24gamcoZSx0LHIpe2xldCBuPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpO2lmKG4uc2xpY2UoMCw1KT09PVwiY2xhc3NcIiYmbi5lbmRzV2l0aChcIn1cIikpe2xldCBzPW4uc2xpY2UoNSwtMSksYT1zLmluZGV4T2YoXCJ7XCIpO2lmKGEhPT0tMSYmKCFzLnNsaWNlKDAsYSkuaW5jbHVkZXMoXCIoXCIpfHxrZy50ZXN0KHMucmVwbGFjZShCZykpKSlyZXR1cm4gb0EoZSx0LHIpfWxldCBvPVwiRnVuY3Rpb25cIjtZcyhlKSYmKG89YEdlbmVyYXRvciR7b31gKSxHcyhlKSYmKG89YEFzeW5jJHtvfWApO2xldCBpPWBbJHtvfWA7cmV0dXJuIHQ9PT1udWxsJiYoaSs9XCIgKG51bGwgcHJvdG90eXBlKVwiKSxlLm5hbWU9PT1cIlwiP2krPVwiIChhbm9ueW1vdXMpXCI6aSs9YDogJHtlLm5hbWV9YCxpKz1cIl1cIix0IT09byYmdCE9PW51bGwmJihpKz1gICR7dH1gKSxyIT09XCJcIiYmdCE9PXImJihpKz1gIFske3J9XWApLGl9ZnVuY3Rpb24gS2coZSx0LHIsbixvKXtsZXQgaT1lLm5hbWUhPW51bGw/U3RyaW5nKGUubmFtZSk6XCJFcnJvclwiLHM9aS5sZW5ndGgsYT1lLnN0YWNrP1N0cmluZyhlLnN0YWNrKTplLnRvU3RyaW5nKCk7aWYoIW4uc2hvd0hpZGRlbiYmby5sZW5ndGghPT0wKWZvcihsZXQgUiBvZltcIm5hbWVcIixcIm1lc3NhZ2VcIixcInN0YWNrXCJdKXtsZXQgZj1vLmluZGV4T2YoUik7ZiE9PS0xJiZhLmluY2x1ZGVzKGVbUl0pJiZvLnNwbGljZShmLDEpfWlmKHQ9PT1udWxsfHxpLmVuZHNXaXRoKFwiRXJyb3JcIikmJmEuc3RhcnRzV2l0aChpKSYmKGEubGVuZ3RoPT09c3x8YVtzXT09PVwiOlwifHxhW3NdPT09YFxuYCkpe2xldCBSPVwiRXJyb3JcIjtpZih0PT09bnVsbCl7bGV0IHA9YS5tYXRjaCgvXihbQS1aXVthLXpfIEEtWjAtOVtcXF0oKS1dKykoPzo6fFxcbiB7NH1hdCkvKXx8YS5tYXRjaCgvXihbYS16X0EtWjAtOS1dKkVycm9yKSQvKTtSPXAmJnBbMV18fFwiXCIscz1SLmxlbmd0aCxSPVJ8fFwiRXJyb3JcIn1sZXQgZj1WZSh0LHIsUikuc2xpY2UoMCwtMSk7aSE9PWYmJihmLmluY2x1ZGVzKGkpP3M9PT0wP2E9YCR7Zn06ICR7YX1gOmE9YCR7Zn0ke2Euc2xpY2Uocyl9YDphPWAke2Z9IFske2l9XSR7YS5zbGljZShzKX1gKX1sZXQgYz1lLm1lc3NhZ2UmJmEuaW5kZXhPZihlLm1lc3NhZ2UpfHwtMTtjIT09LTEmJihjKz1lLm1lc3NhZ2UubGVuZ3RoKTtsZXQgdT1hLmluZGV4T2YoYFxuICAgIGF0YCxjKTtpZih1PT09LTEpYT1gWyR7YX1dYDtlbHNlIGlmKG4uY29sb3JzKXtsZXQgUj1hLnNsaWNlKDAsdSksZj1hLnNsaWNlKHUrMSkuc3BsaXQoYFxuYCk7Zm9yKGxldCBwIG9mIGYpe2xldCBsO1IrPWBcbmA7bGV0IF89MDtmb3IoO2w9TWcuZXhlYyhwKTspUis9cC5zbGljZShfLGwuaW5kZXgrMTQpLFIrPW4uc3R5bGl6ZShsWzFdLFwibW9kdWxlXCIpLF89bC5pbmRleCtsWzBdLmxlbmd0aDtSKz1fPT09MD9wOnAuc2xpY2UoXyl9YT1SfWlmKG4uaW5kZW50YXRpb25MdmwhPT0wKXtsZXQgUj1cIiBcIi5yZXBlYXQobi5pbmRlbnRhdGlvbkx2bCk7YT1hLnJlcGxhY2UoL1xcbi9nLGBcbiR7Un1gKX1yZXR1cm4gYX1mdW5jdGlvbiBxZyhlLHQpe2xldCByO3RyeXtyPW5ldyBVaW50OEFycmF5KHQpfWNhdGNoe3JldHVybltlLnN0eWxpemUoXCIoZGV0YWNoZWQpXCIsXCJzcGVjaWFsXCIpXX1sZXQgbj1YZyhyLDAsTWF0aC5taW4oZS5tYXhBcnJheUxlbmd0aCxyLmxlbmd0aCkpLnJlcGxhY2UoLyguezJ9KS9nLFwiJDEgXCIpLnRyaW0oKSxvPXIubGVuZ3RoLWUubWF4QXJyYXlMZW5ndGg7cmV0dXJuIG8+MCYmKG4rPWAgLi4uICR7b30gbW9yZSBieXRlJHtvPjE/XCJzXCI6XCJcIn1gKSxbYCR7ZS5zdHlsaXplKFwiW1VpbnQ4Q29udGVudHNdXCIsXCJzcGVjaWFsXCIpfTogPCR7bn0+YF19ZnVuY3Rpb24gcmMoZSx0KXtyZXR1cm4gZShPYmplY3QuaXModCwtMCk/XCItMFwiOmAke3R9YCxcIm51bWJlclwiKX1mdW5jdGlvbiBRZyhlLHQscil7bGV0IG4sezA6bywxOml9PXQ7aWYobz09PURnKW49W2Uuc3R5bGl6ZShcIjxwZW5kaW5nPlwiLFwic3BlY2lhbFwiKV07ZWxzZXtlLmluZGVudGF0aW9uTHZsKz0yO2xldCBzPXplKGUsaSxyKTtlLmluZGVudGF0aW9uTHZsLT0yLG49W289PT1iZz9gJHtlLnN0eWxpemUoXCI8cmVqZWN0ZWQ+XCIsXCJzcGVjaWFsXCIpfSAke3N9YDpzXX1yZXR1cm4gbn1mdW5jdGlvbiBlUihlKXtyZXR1cm5bZS5zdHlsaXplKFwiPGl0ZW1zIHVua25vd24+XCIsXCJzcGVjaWFsXCIpXX1mdW5jdGlvbiB6ZyhlLHQscil7cmV0dXJuIGxSKGUscix0LGRpKX1mdW5jdGlvbiBaZyhlLHQscil7cmV0dXJuIGNSKGUscix0LGRpKX1mdW5jdGlvbiAkcihlLHQscixuLG8saSxzPXQpe2xldCBhLGMsdT1cIiBcIjtpZihpPWl8fE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxuKXx8e3ZhbHVlOnRbbl0sZW51bWVyYWJsZTohMH0saS52YWx1ZSE9PXZvaWQgMCl7bGV0IFI9ZS5jb21wYWN0IT09ITB8fG8hPT1Icj8yOjM7ZS5pbmRlbnRhdGlvbkx2bCs9UixjPXplKGUsaS52YWx1ZSxyKSxSPT09MyYmZS5icmVha0xlbmd0aDx1UihjLGUuY29sb3JzKSYmKHU9YFxuJHtcIiBcIi5yZXBlYXQoZS5pbmRlbnRhdGlvbkx2bCl9YCksZS5pbmRlbnRhdGlvbkx2bC09Un1lbHNlIGlmKGkuZ2V0IT09dm9pZCAwKXtsZXQgUj1pLnNldCE9PXZvaWQgMD9cIkdldHRlci9TZXR0ZXJcIjpcIkdldHRlclwiLGY9ZS5zdHlsaXplLHA9XCJzcGVjaWFsXCI7aWYoZS5nZXR0ZXJzJiYoZS5nZXR0ZXJzPT09ITB8fGUuZ2V0dGVycz09PVwiZ2V0XCImJmkuc2V0PT09dm9pZCAwfHxlLmdldHRlcnM9PT1cInNldFwiJiZpLnNldCE9PXZvaWQgMCkpdHJ5e2xldCBsPWkuZ2V0LmNhbGwocyk7aWYoZS5pbmRlbnRhdGlvbkx2bCs9MixsPT09bnVsbCljPWAke2YoYFske1J9OmAscCl9ICR7ZihcIm51bGxcIixcIm51bGxcIil9JHtmKFwiXVwiLHApfWA7ZWxzZSBpZih0eXBlb2YgbD09XCJvYmplY3RcIiljPWAke2YoYFske1J9XWAscCl9ICR7emUoZSxsLHIpfWA7ZWxzZXtsZXQgXz10YyhmLGwsZSk7Yz1gJHtmKGBbJHtSfTpgLHApfSAke199JHtmKFwiXVwiLHApfWB9ZS5pbmRlbnRhdGlvbkx2bC09Mn1jYXRjaChsKXtsZXQgXz1gPEluc3BlY3Rpb24gdGhyZXcgKCR7bC5tZXNzYWdlfSk+YDtjPWAke2YoYFske1J9OmAscCl9ICR7X30ke2YoXCJdXCIscCl9YH1lbHNlIGM9ZS5zdHlsaXplKGBbJHtSfV1gLHApfWVsc2UgaS5zZXQhPT12b2lkIDA/Yz1lLnN0eWxpemUoXCJbU2V0dGVyXVwiLFwic3BlY2lhbFwiKTpjPWUuc3R5bGl6ZShcInVuZGVmaW5lZFwiLFwidW5kZWZpbmVkXCIpO2lmKG89PT1lYylyZXR1cm4gYztpZih0eXBlb2Ygbj09XCJzeW1ib2xcIil7bGV0IFI9bi50b1N0cmluZygpLnJlcGxhY2UoUWEsemEpO2E9YFske2Uuc3R5bGl6ZShSLFwic3ltYm9sXCIpfV1gfWVsc2Ugbj09PVwiX19wcm90b19fXCI/YT1cIlsnX19wcm90b19fJ11cIjppLmVudW1lcmFibGU9PT0hMT9hPWBbJHtuLnJlcGxhY2UoUWEsemEpfV1gOlBnLnRlc3Qobik/YT1lLnN0eWxpemUobixcIm5hbWVcIik6YT1lLnN0eWxpemUoWmEobiksXCJzdHJpbmdcIik7cmV0dXJuYCR7YX06JHt1fSR7Y31gfWZ1bmN0aW9uIGVBKGUpe3JldHVybiBlLnJlcGxhY2UoSmcsXCJcIil9ZnVuY3Rpb24gdFIoZSx0LHIsbil7bGV0IG89dC5sZW5ndGgrcjtpZihvK3QubGVuZ3RoPmUuYnJlYWtMZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspaWYoZS5jb2xvcnM/bys9ZUEodFtpXSkubGVuZ3RoOm8rPXRbaV0ubGVuZ3RoLG8+ZS5icmVha0xlbmd0aClyZXR1cm4hMTtyZXR1cm4gbj09PVwiXCJ8fCFuLmluY2x1ZGVzKGBcbmApfWZ1bmN0aW9uIHNSKGUsdCl7cmV0dXJuIGUoYCR7dH1uYCxcImJpZ2ludFwiKX1mdW5jdGlvbiB0QShlLHQscixuKXtsZXQgbz1uZXcgQXJyYXkoZS5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXRyeXtvW2ldPSRyKHQscixuLGVbaV0sSHIpfWNhdGNoe2xldCBhPXtbZVtpXV06XCJcIn07b1tpXT0kcih0LGEsbixlW2ldLEhyKTtsZXQgYz1vW2ldLmxhc3RJbmRleE9mKFwiIFwiKTtvW2ldPW9baV0uc2xpY2UoMCxjKzEpK3Quc3R5bGl6ZShcIjx1bmluaXRpYWxpemVkPlwiLFwic3BlY2lhbFwiKX1yZXR1cm4gZS5sZW5ndGg9MCxvfWZ1bmN0aW9uIHJBKGUsdCxyLG4sbyxpKXtsZXQgcz1PYmplY3Qua2V5cyh0KSxhPWk7Zm9yKDtpPHMubGVuZ3RoJiZvLmxlbmd0aDxuO2krKyl7bGV0IHU9c1tpXSxSPSt1O2lmKFI+MioqMzItMilicmVhaztpZihgJHthfWAhPT11KXtpZighVWcudGVzdCh1KSlicmVhaztsZXQgZj1SLWEscD1mPjE/XCJzXCI6XCJcIixsPWA8JHtmfSBlbXB0eSBpdGVtJHtwfT5gO2lmKG8ucHVzaChlLnN0eWxpemUobCxcInVuZGVmaW5lZFwiKSksYT1SLG8ubGVuZ3RoPT09bilicmVha31vLnB1c2goJHIoZSx0LHIsdSxlYykpLGErK31sZXQgYz10Lmxlbmd0aC1hO2lmKG8ubGVuZ3RoIT09bil7aWYoYz4wKXtsZXQgdT1jPjE/XCJzXCI6XCJcIixSPWA8JHtjfSBlbXB0eSBpdGVtJHt1fT5gO28ucHVzaChlLnN0eWxpemUoUixcInVuZGVmaW5lZFwiKSl9fWVsc2UgYz4wJiZvLnB1c2goYC4uLiAke2N9IG1vcmUgaXRlbSR7Yz4xP1wic1wiOlwiXCJ9YCk7cmV0dXJuIG99ZnVuY3Rpb24gbkEoZSx0LHIsbixvKXtsZXQgaTtNbyhlKT9pPVwiTnVtYmVyXCI6a28oZSk/KGk9XCJTdHJpbmdcIixyLnNwbGljZSgwLGUubGVuZ3RoKSk6VW8oZSk/aT1cIkJvb2xlYW5cIjpQbyhlKT9pPVwiQmlnSW50XCI6aT1cIlN5bWJvbFwiO2xldCBzPWBbJHtpfWA7cmV0dXJuIGkhPT1uJiYobj09PW51bGw/cys9XCIgKG51bGwgcHJvdG90eXBlKVwiOnMrPWAgKCR7bn0pYCkscys9YDogJHt0YyhKYSxlLnZhbHVlT2YoKSx0KX1dYCxvIT09XCJcIiYmbyE9PW4mJihzKz1gIFske299XWApLHIubGVuZ3RoIT09MHx8dC5zdHlsaXplPT09SmE/czp0LnN0eWxpemUocyxpLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIG9BKGUsdCxyKXtsZXQgaT1gY2xhc3MgJHtlLmhhc093blByb3BlcnR5KFwibmFtZVwiKSYmZS5uYW1lfHxcIihhbm9ueW1vdXMpXCJ9YDtpZih0IT09XCJGdW5jdGlvblwiJiZ0IT09bnVsbCYmKGkrPWAgWyR7dH1dYCksciE9PVwiXCImJnQhPT1yJiYoaSs9YCBbJHtyfV1gKSx0IT09bnVsbCl7bGV0IHM9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLm5hbWU7cyYmKGkrPWAgZXh0ZW5kcyAke3N9YCl9ZWxzZSBpKz1cIiBleHRlbmRzIFtudWxsIHByb3RvdHlwZV1cIjtyZXR1cm5gWyR7aX1dYH1mdW5jdGlvbiBhUihlLHQscixuLG8saSxzKXtpZihlLmNvbXBhY3QhPT0hMCl7aWYodHlwZW9mIGUuY29tcGFjdD09XCJudW1iZXJcIiYmZS5jb21wYWN0Pj0xKXtsZXQgUj10Lmxlbmd0aDtpZihvPT09X2kmJlI+NiYmKHQ9aUEoZSx0LHMpKSxlLmN1cnJlbnREZXB0aC1pPGUuY29tcGFjdCYmUj09PXQubGVuZ3RoKXtsZXQgZj10Lmxlbmd0aCtlLmluZGVudGF0aW9uTHZsK25bMF0ubGVuZ3RoK3IubGVuZ3RoKzEwO2lmKHRSKGUsdCxmLHIpKXJldHVybmAke3I/YCR7cn0gYDpcIlwifSR7blswXX0gJHtFaSh0LFwiLCBcIil9ICR7blsxXX1gfX1sZXQgdT1gXG4ke1wiIFwiLnJlcGVhdChlLmluZGVudGF0aW9uTHZsKX1gO3JldHVybmAke3I/YCR7cn0gYDpcIlwifSR7blswXX0ke3V9ICAke0VpKHQsYCwke3V9ICBgKX0ke3V9JHtuWzFdfWB9aWYodFIoZSx0LDAscikpcmV0dXJuYCR7blswXX0ke3I/YCAke3J9YDpcIlwifSAke0VpKHQsXCIsIFwiKX0gYCtuWzFdO2xldCBhPVwiIFwiLnJlcGVhdChlLmluZGVudGF0aW9uTHZsKSxjPXI9PT1cIlwiJiZuWzBdLmxlbmd0aD09PTE/XCIgXCI6YCR7cj9gICR7cn1gOlwiXCJ9XG4ke2F9ICBgO3JldHVybmAke25bMF19JHtjfSR7RWkodCxgLFxuJHthfSAgYCl9ICR7blsxXX1gfWZ1bmN0aW9uIEVpKGUsdCl7bGV0IHI9XCJcIjtpZihlLmxlbmd0aCE9PTApe2xldCBuPWUubGVuZ3RoLTE7Zm9yKGxldCBvPTA7bzxuO28rKylyKz1lW29dLHIrPXQ7cis9ZVtuXX1yZXR1cm4gcn1mdW5jdGlvbiBpQShlLHQscil7bGV0IG49MCxvPTAsaT0wLHM9dC5sZW5ndGg7ZS5tYXhBcnJheUxlbmd0aDx0Lmxlbmd0aCYmcy0tO2xldCBhPTIsYz1uZXcgQXJyYXkocyk7Zm9yKDtpPHM7aSsrKXtsZXQgUj11Uih0W2ldLGUuY29sb3JzKTtjW2ldPVIsbis9UithLG88UiYmKG89Uil9bGV0IHU9bythO2lmKHUqMytlLmluZGVudGF0aW9uTHZsPGUuYnJlYWtMZW5ndGgmJihuL3U+NXx8bzw9Nikpe2xldCBmPU1hdGguc3FydCh1LW4vdC5sZW5ndGgpLHA9TWF0aC5tYXgodS0zLWYsMSksbD1NYXRoLm1pbihNYXRoLnJvdW5kKE1hdGguc3FydCgyLjUqcCpzKS9wKSxNYXRoLmZsb29yKChlLmJyZWFrTGVuZ3RoLWUuaW5kZW50YXRpb25MdmwpL3UpLGUuY29tcGFjdCo0LDE1KTtpZihsPD0xKXJldHVybiB0O2xldCBfPVtdLEU9W107Zm9yKGxldCBTPTA7UzxsO1MrKyl7bGV0IGQ9MDtmb3IobGV0IGc9UztnPHQubGVuZ3RoO2crPWwpY1tnXT5kJiYoZD1jW2ddKTtkKz1hLEVbU109ZH1sZXQgaD1TdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0O2lmKHIhPT12b2lkIDApe2ZvcihsZXQgUz0wO1M8dC5sZW5ndGg7UysrKWlmKHR5cGVvZiByW1NdIT1cIm51bWJlclwiJiZ0eXBlb2YgcltTXSE9XCJiaWdpbnRcIil7aD1TdHJpbmcucHJvdG90eXBlLnBhZEVuZDticmVha319Zm9yKGxldCBTPTA7UzxzO1MrPWwpe2xldCBkPU1hdGgubWluKFMrbCxzKSxnPVwiXCIsTz1TO2Zvcig7TzxkLTE7TysrKXtsZXQgbT1FW08tU10rdFtPXS5sZW5ndGgtY1tPXTtnKz1gJHt0W09dfSwgYC5wYWRTdGFydChtLFwiIFwiKX1pZihoPT09U3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCl7bGV0IG09RVtPLVNdK3RbT10ubGVuZ3RoLWNbT10tYTtnKz10W09dLnBhZFN0YXJ0KG0sXCIgXCIpfWVsc2UgZys9dFtPXTtBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKF8sZyl9ZS5tYXhBcnJheUxlbmd0aDx0Lmxlbmd0aCYmQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChfLHRbc10pLHQ9X31yZXR1cm4gdH1mdW5jdGlvbiBjUihlLHQscixuKXtsZXQgbz1NYXRoLm1heChlLm1heEFycmF5TGVuZ3RoLDApLGk9ci5sZW5ndGgvMixzPWktbyxhPU1hdGgubWluKG8saSksYz1uZXcgQXJyYXkoYSksdT0wO2lmKGUuaW5kZW50YXRpb25MdmwrPTIsbj09PWRpKXtmb3IoO3U8YTt1Kyspe2xldCBSPXUqMjtjW3VdPWAke3plKGUscltSXSx0KX0gPT4gJHt6ZShlLHJbUisxXSx0KX1gfWUuc29ydGVkfHwoYz1jLnNvcnQoKSl9ZWxzZSBmb3IoO3U8YTt1Kyspe2xldCBSPXUqMixmPVt6ZShlLHJbUl0sdCksemUoZSxyW1IrMV0sdCldO2NbdV09YVIoZSxmLFwiXCIsW1wiW1wiLFwiXVwiXSxfaSx0KX1yZXR1cm4gZS5pbmRlbnRhdGlvbkx2bC09MixzPjAmJmMucHVzaChgLi4uICR7c30gbW9yZSBpdGVtJHtzPjE/XCJzXCI6XCJcIn1gKSxjfWZ1bmN0aW9uIGxSKGUsdCxyLG4pe2xldCBvPU1hdGgubWF4KGUubWF4QXJyYXlMZW5ndGgsMCksaT1NYXRoLm1pbihvLHIubGVuZ3RoKSxzPW5ldyBBcnJheShpKTtlLmluZGVudGF0aW9uTHZsKz0yO2ZvcihsZXQgYz0wO2M8aTtjKyspc1tjXT16ZShlLHJbY10sdCk7ZS5pbmRlbnRhdGlvbkx2bC09MixuPT09ZGkmJiFlLnNvcnRlZCYmcy5zb3J0KCk7bGV0IGE9ci5sZW5ndGgtaTtyZXR1cm4gYT4wJiZBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKHMsYC4uLiAke2F9IG1vcmUgaXRlbSR7YT4xP1wic1wiOlwiXCJ9YCksc31mdW5jdGlvbiB1UihlLHQ9ITApe2xldCByPTA7dCYmKGU9ZlIoZSkpLGU9ZS5ub3JtYWxpemUoXCJORkNcIik7Zm9yKGxldCBuIG9mIGVbU3ltYm9sLml0ZXJhdG9yXSgpKXtsZXQgbz1uLmNvZGVQb2ludEF0KDApO2NBKG8pP3IrPTI6bEEobyl8fHIrK31yZXR1cm4gcn1mdW5jdGlvbiBmUihlKXtyZXR1cm4gUHIoZSxcInN0clwiKSxlLnJlcGxhY2UoYUEsXCJcIil9dmFyIEhyLGVjLF9pLElnLGRpLHlnLFRnLERnLGJnLHFhLHJSLENnLFFhLExnLHdnLFBnLFVnLE1nLGtnLEJnLFFlLG5SLExlLHdlLHphLG9SLFhnLEpnLHNBLGFBLGNBLGxBLEdyPUEoKCk9PntjdCgpO2RlKCk7X3IoKTtwaSgpO0hyPTAsZWM9MSxfaT0yLElnPTE2LGRpPTAseWc9MSxUZz0yLERnPTAsYmc9MixxYT1bXCJcXFxceDAwXCIsXCJcXFxceDAxXCIsXCJcXFxceDAyXCIsXCJcXFxceDAzXCIsXCJcXFxceDA0XCIsXCJcXFxceDA1XCIsXCJcXFxceDA2XCIsXCJcXFxceDA3XCIsXCJcXFxcYlwiLFwiXFxcXHRcIixcIlxcXFxuXCIsXCJcXFxceDBCXCIsXCJcXFxcZlwiLFwiXFxcXHJcIixcIlxcXFx4MEVcIixcIlxcXFx4MEZcIixcIlxcXFx4MTBcIixcIlxcXFx4MTFcIixcIlxcXFx4MTJcIixcIlxcXFx4MTNcIixcIlxcXFx4MTRcIixcIlxcXFx4MTVcIixcIlxcXFx4MTZcIixcIlxcXFx4MTdcIixcIlxcXFx4MThcIixcIlxcXFx4MTlcIixcIlxcXFx4MUFcIixcIlxcXFx4MUJcIixcIlxcXFx4MUNcIixcIlxcXFx4MURcIixcIlxcXFx4MUVcIixcIlxcXFx4MUZcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXFxcXCdcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXFxcXFxcXFxcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXFxcXHg3RlwiLFwiXFxcXHg4MFwiLFwiXFxcXHg4MVwiLFwiXFxcXHg4MlwiLFwiXFxcXHg4M1wiLFwiXFxcXHg4NFwiLFwiXFxcXHg4NVwiLFwiXFxcXHg4NlwiLFwiXFxcXHg4N1wiLFwiXFxcXHg4OFwiLFwiXFxcXHg4OVwiLFwiXFxcXHg4QVwiLFwiXFxcXHg4QlwiLFwiXFxcXHg4Q1wiLFwiXFxcXHg4RFwiLFwiXFxcXHg4RVwiLFwiXFxcXHg4RlwiLFwiXFxcXHg5MFwiLFwiXFxcXHg5MVwiLFwiXFxcXHg5MlwiLFwiXFxcXHg5M1wiLFwiXFxcXHg5NFwiLFwiXFxcXHg5NVwiLFwiXFxcXHg5NlwiLFwiXFxcXHg5N1wiLFwiXFxcXHg5OFwiLFwiXFxcXHg5OVwiLFwiXFxcXHg5QVwiLFwiXFxcXHg5QlwiLFwiXFxcXHg5Q1wiLFwiXFxcXHg5RFwiLFwiXFxcXHg5RVwiLFwiXFxcXHg5RlwiXSxyUj1lPT50eXBlb2YgZT5cInVcIiYmZSE9PXZvaWQgMCxDZz0vW1xceDAwLVxceDFmXFx4MjdcXHg1Y1xceDdmLVxceDlmXS8sUWE9L1tcXHgwMC1cXHgxZlxceDI3XFx4NWNcXHg3Zi1cXHg5Zl0vZyxMZz0vW1xceDAwLVxceDFmXFx4NWNcXHg3Zi1cXHg5Zl0vLHdnPS9bXFx4MDAtXFx4MWZcXHg1Y1xceDdmLVxceDlmXS9nLFBnPS9eW2EtekEtWl9dW2EtekEtWl8wLTldKiQvLFVnPS9eKDB8WzEtOV1bMC05XSopJC8sTWc9L1svXFxcXF1ub2RlX21vZHVsZXNbL1xcXFxdKC4rPykoPz1bL1xcXFxdKS9nLGtnPS9eKFxccytbXihdKj8pXFxzKnsvLEJnPS8oXFwvXFwvLio/XFxuKXwoXFwvXFwqKC58XFxuKSo/XFwqXFwvKS9nLFFlPXtzaG93SGlkZGVuOiExLGRlcHRoOjIsY29sb3JzOiExLGN1c3RvbUluc3BlY3Q6ITAsc2hvd1Byb3h5OiExLG1heEFycmF5TGVuZ3RoOjEwMCxtYXhTdHJpbmdMZW5ndGg6MWU0LGJyZWFrTGVuZ3RoOjgwLGNvbXBhY3Q6Myxzb3J0ZWQ6ITEsZ2V0dGVyczohMX07blI9U3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpO29lLmN1c3RvbT1uUjtPYmplY3QuZGVmaW5lUHJvcGVydHkob2UsXCJkZWZhdWx0T3B0aW9uc1wiLHtnZXQoKXtyZXR1cm4gUWV9LHNldChlKXtyZXR1cm4gdmUoZSxcIm9wdGlvbnNcIiksT2JqZWN0LmFzc2lnbihRZSxlKX19KTtMZT0zOSx3ZT00OTtvZS5jb2xvcnM9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHtyZXNldDpbMCwwXSxib2xkOlsxLDIyXSxkaW06WzIsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxibGluazpbNSwyNV0saW52ZXJzZTpbNywyN10saGlkZGVuOls4LDI4XSxzdHJpa2V0aHJvdWdoOls5LDI5XSxkb3VibGV1bmRlcmxpbmU6WzIxLDI0XSxibGFjazpbMzAsTGVdLHJlZDpbMzEsTGVdLGdyZWVuOlszMixMZV0seWVsbG93OlszMyxMZV0sYmx1ZTpbMzQsTGVdLG1hZ2VudGE6WzM1LExlXSxjeWFuOlszNixMZV0sd2hpdGU6WzM3LExlXSxiZ0JsYWNrOls0MCx3ZV0sYmdSZWQ6WzQxLHdlXSxiZ0dyZWVuOls0Mix3ZV0sYmdZZWxsb3c6WzQzLHdlXSxiZ0JsdWU6WzQ0LHdlXSxiZ01hZ2VudGE6WzQ1LHdlXSxiZ0N5YW46WzQ2LHdlXSxiZ1doaXRlOls0Nyx3ZV0sZnJhbWVkOls1MSw1NF0sb3ZlcmxpbmVkOls1Myw1NV0sZ3JheTpbOTAsTGVdLHJlZEJyaWdodDpbOTEsTGVdLGdyZWVuQnJpZ2h0Ols5MixMZV0seWVsbG93QnJpZ2h0Ols5MyxMZV0sYmx1ZUJyaWdodDpbOTQsTGVdLG1hZ2VudGFCcmlnaHQ6Wzk1LExlXSxjeWFuQnJpZ2h0Ols5NixMZV0sd2hpdGVCcmlnaHQ6Wzk3LExlXSxiZ0dyYXk6WzEwMCx3ZV0sYmdSZWRCcmlnaHQ6WzEwMSx3ZV0sYmdHcmVlbkJyaWdodDpbMTAyLHdlXSxiZ1llbGxvd0JyaWdodDpbMTAzLHdlXSxiZ0JsdWVCcmlnaHQ6WzEwNCx3ZV0sYmdNYWdlbnRhQnJpZ2h0OlsxMDUsd2VdLGJnQ3lhbkJyaWdodDpbMTA2LHdlXSxiZ1doaXRlQnJpZ2h0OlsxMDcsd2VdfSk7ZnQoXCJncmF5XCIsXCJncmV5XCIpO2Z0KFwiZ3JheVwiLFwiYmxhY2tCcmlnaHRcIik7ZnQoXCJiZ0dyYXlcIixcImJnR3JleVwiKTtmdChcImJnR3JheVwiLFwiYmdCbGFja0JyaWdodFwiKTtmdChcImRpbVwiLFwiZmFpbnRcIik7ZnQoXCJzdHJpa2V0aHJvdWdoXCIsXCJjcm9zc2Vkb3V0XCIpO2Z0KFwic3RyaWtldGhyb3VnaFwiLFwic3RyaWtlVGhyb3VnaFwiKTtmdChcInN0cmlrZXRocm91Z2hcIixcImNyb3NzZWRPdXRcIik7ZnQoXCJoaWRkZW5cIixcImNvbmNlYWxcIik7ZnQoXCJpbnZlcnNlXCIsXCJzd2FwQ29sb3JzXCIpO2Z0KFwiaW52ZXJzZVwiLFwic3dhcGNvbG9yc1wiKTtmdChcImRvdWJsZXVuZGVybGluZVwiLFwiZG91YmxlVW5kZXJsaW5lXCIpO29lLnN0eWxlcz1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCkse3NwZWNpYWw6XCJjeWFuXCIsbnVtYmVyOlwieWVsbG93XCIsYmlnaW50OlwieWVsbG93XCIsYm9vbGVhbjpcInllbGxvd1wiLHVuZGVmaW5lZDpcImdyZXlcIixudWxsOlwiYm9sZFwiLHN0cmluZzpcImdyZWVuXCIsc3ltYm9sOlwiZ3JlZW5cIixkYXRlOlwibWFnZW50YVwiLHJlZ2V4cDpcInJlZFwiLG1vZHVsZTpcInVuZGVybGluZVwifSk7emE9ZT0+cWFbZS5jaGFyQ29kZUF0KDApXTtvUj1uZXcgU2V0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGdsb2JhbFRoaXMpLmZpbHRlcihlPT4vXltBLVpdW2EtekEtWjAtOV0rJC8udGVzdChlKSkpO0pnPS9cXHUwMDFiXFxbXFxkXFxkP20vZztzQT1cIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyl8KD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSlcIixhQT1uZXcgUmVnRXhwKHNBLFwiZ1wiKTtjQT1lPT5lPj00MzUyJiYoZTw9NDQ0N3x8ZT09PTkwMDF8fGU9PT05MDAyfHxlPj0xMTkwNCYmZTw9MTI4NzEmJmUhPT0xMjM1MXx8ZT49MTI4ODAmJmU8PTE5OTAzfHxlPj0xOTk2OCYmZTw9NDIxODJ8fGU+PTQzMzYwJiZlPD00MzM4OHx8ZT49NDQwMzImJmU8PTU1MjAzfHxlPj02Mzc0NCYmZTw9NjQyNTV8fGU+PTY1MDQwJiZlPD02NTA0OXx8ZT49NjUwNzImJmU8PTY1MTMxfHxlPj02NTI4MSYmZTw9NjUzNzZ8fGU+PTY1NTA0JiZlPD02NTUxMHx8ZT49MTEwNTkyJiZlPD0xMTA1OTN8fGU+PTEyNzQ4OCYmZTw9MTI3NTY5fHxlPj0xMjc3NDQmJmU8PTEyODU5MXx8ZT49MTMxMDcyJiZlPD0yNjIxNDEpLGxBPWU9PmU8PTMxfHxlPj0xMjcmJmU8PTE1OXx8ZT49NzY4JiZlPD04Nzl8fGU+PTgyMDMmJmU8PTgyMDd8fGU+PTg0MDAmJmU8PTg0NDd8fGU+PTY1MDI0JiZlPD02NTAzOXx8ZT49NjUwNTYmJmU8PTY1MDcxfHxlPj05MTc3NjAmJmU8PTkxNzk5OX0pO2Z1bmN0aW9uIHVBKGUpe2lmKFduPU9iamVjdC5jcmVhdGUobnVsbCksZSl7ZT1lLnJlcGxhY2UoL1t8XFxcXHt9KClbXFxdXiQrPy5dL2csXCJcXFxcJCZcIikucmVwbGFjZUFsbChcIipcIixcIi4qXCIpLnJlcGxhY2VBbGwoXCIsXCIsXCIkfF5cIik7bGV0IHQ9bmV3IFJlZ0V4cChgXiR7ZX0kYCxcImlcIik7bmM9cj0+dC5leGVjKHIpIT09bnVsbH1lbHNlIG5jPSgpPT4hMX1mdW5jdGlvbiBmQShlKXsoZT09PVwiSFRUUFwifHxlPT09XCJIVFRQMlwiKSYmY29uc29sZS53YXJuKFwiU2V0dGluZyB0aGUgTk9ERV9ERUJVRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byAnXCIrZS50b0xvd2VyQ2FzZSgpK1wiJyBjYW4gZXhwb3NlIHNlbnNpdGl2ZSBkYXRhIChzdWNoIGFzIHBhc3N3b3JkcywgdG9rZW5zIGFuZCBhdXRoZW50aWNhdGlvbiBoZWFkZXJzKSBpbiB0aGUgcmVzdWx0aW5nIGxvZy5cIil9ZnVuY3Rpb24gUkEoZSx0KXtyZXR1cm4gV25bdF09PT12b2lkIDAmJihlPyhmQSh0KSxXblt0XT1mdW5jdGlvbiguLi5uKXtsZXQgbz1uLm1hcChpPT5vZShpKSkuam9pbihcIiBcIik7Y29uc29sZS5lcnJvcihHcChcIiVzICVzOiAlc1wiLHQsU3RyaW5nKERlbm8ucGlkKSxvKSl9KTpXblt0XT1wQSksV25bdF19ZnVuY3Rpb24gaWMoZSx0KXtmdW5jdGlvbiByKCl7ZT1lLnRvVXBwZXJDYXNlKCksbz1uYyhlKX1sZXQgbj0oLi4uYSk9PihyKCksbj1SQShvLGUpLHR5cGVvZiB0PT1cImZ1bmN0aW9uXCImJnQobiksbiguLi5hKSksbyxpPSgpPT4ocigpLGk9KCk9Pm8sbykscz0oLi4uYSk9Pm4oLi4uYSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLFwiZW5hYmxlZFwiLHtnZXQoKXtyZXR1cm4gaSgpfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pLHN9dmFyIFduLG5jLHBBLG9jLHNjPUEoKCk9PntZcCgpO0dyKCk7cEE9KCk9Pnt9O3RyeXtvYz1EZW5vLmVudi5nZXQoXCJOT0RFX0RFQlVHXCIpPz9cIlwifWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5QZXJtaXNzaW9uRGVuaWVkKW9jPVwiXCI7ZWxzZSB0aHJvdyBlfXVBKG9jKX0pO3ZhciBIZSxxLHBSLFBlPUEoKCk9PntIZT0oKCk9PntsZXR7RGVubzplfT1nbG9iYWxUaGlzO2lmKHR5cGVvZiBlPy5idWlsZD8ub3M9PVwic3RyaW5nXCIpcmV0dXJuIGUuYnVpbGQub3M7bGV0e25hdmlnYXRvcjp0fT1nbG9iYWxUaGlzO3JldHVybiB0Py5hcHBWZXJzaW9uPy5pbmNsdWRlcz8uKFwiV2luXCIpP1wid2luZG93c1wiOlwibGludXhcIn0pKCkscT1IZT09PVwid2luZG93c1wiLHBSPUhlPT09XCJsaW51eFwifSk7dmFyIFJSPUEoKCk9Pnt9KTtmdW5jdGlvbiBFUihlKXtzd2l0Y2goZSl7Y2FzZSA1OnJldHVyblwiRUFDQ0VTXCI7Y2FzZSA5OTg6cmV0dXJuXCJFQUNDRVNcIjtjYXNlIDEwMDEzOnJldHVyblwiRUFDQ0VTXCI7Y2FzZSAxOTIwOnJldHVyblwiRUFDQ0VTXCI7Y2FzZSAxMjI3OnJldHVyblwiRUFERFJJTlVTRVwiO2Nhc2UgMTAwNDg6cmV0dXJuXCJFQUREUklOVVNFXCI7Y2FzZSAxMDA0OTpyZXR1cm5cIkVBRERSTk9UQVZBSUxcIjtjYXNlIDEwMDQ3OnJldHVyblwiRUFGTk9TVVBQT1JUXCI7Y2FzZSAxMDAzNTpyZXR1cm5cIkVBR0FJTlwiO2Nhc2UgMTAwMzc6cmV0dXJuXCJFQUxSRUFEWVwiO2Nhc2UgMTAwNDpyZXR1cm5cIkVCQURGXCI7Y2FzZSA2OnJldHVyblwiRUJBREZcIjtjYXNlIDMzOnJldHVyblwiRUJVU1lcIjtjYXNlIDIzMTpyZXR1cm5cIkVCVVNZXCI7Y2FzZSAzMjpyZXR1cm5cIkVCVVNZXCI7Y2FzZSA5OTU6cmV0dXJuXCJFQ0FOQ0VMRURcIjtjYXNlIDEwMDA0OnJldHVyblwiRUNBTkNFTEVEXCI7Y2FzZSAxMTEzOnJldHVyblwiRUNIQVJTRVRcIjtjYXNlIDEyMzY6cmV0dXJuXCJFQ09OTkFCT1JURURcIjtjYXNlIDEwMDUzOnJldHVyblwiRUNPTk5BQk9SVEVEXCI7Y2FzZSAxMjI1OnJldHVyblwiRUNPTk5SRUZVU0VEXCI7Y2FzZSAxMDA2MTpyZXR1cm5cIkVDT05OUkVGVVNFRFwiO2Nhc2UgNjQ6cmV0dXJuXCJFQ09OTlJFU0VUXCI7Y2FzZSAxMDA1NDpyZXR1cm5cIkVDT05OUkVTRVRcIjtjYXNlIDE4MzpyZXR1cm5cIkVFWElTVFwiO2Nhc2UgODA6cmV0dXJuXCJFRVhJU1RcIjtjYXNlIDExMTpyZXR1cm5cIkVGQVVMVFwiO2Nhc2UgMTAwMTQ6cmV0dXJuXCJFRkFVTFRcIjtjYXNlIDEyMzI6cmV0dXJuXCJFSE9TVFVOUkVBQ0hcIjtjYXNlIDEwMDY1OnJldHVyblwiRUhPU1RVTlJFQUNIXCI7Y2FzZSAxMjI6cmV0dXJuXCJFSU5WQUxcIjtjYXNlIDEzOnJldHVyblwiRUlOVkFMXCI7Y2FzZSAxMjM6cmV0dXJuXCJFSU5WQUxcIjtjYXNlIDg3OnJldHVyblwiRUlOVkFMXCI7Y2FzZSAxMDAyMjpyZXR1cm5cIkVJTlZBTFwiO2Nhc2UgMTAwNDY6cmV0dXJuXCJFSU5WQUxcIjtjYXNlIDExMDI6cmV0dXJuXCJFSU9cIjtjYXNlIDExMTE6cmV0dXJuXCJFSU9cIjtjYXNlIDIzOnJldHVyblwiRUlPXCI7Y2FzZSAxMTY2OnJldHVyblwiRUlPXCI7Y2FzZSAxMTY1OnJldHVyblwiRUlPXCI7Y2FzZSAxMzkzOnJldHVyblwiRUlPXCI7Y2FzZSAxMTI5OnJldHVyblwiRUlPXCI7Y2FzZSAxMTAxOnJldHVyblwiRUlPXCI7Y2FzZSAzMTpyZXR1cm5cIkVJT1wiO2Nhc2UgMTEwNjpyZXR1cm5cIkVJT1wiO2Nhc2UgMTExNzpyZXR1cm5cIkVJT1wiO2Nhc2UgMTEwNDpyZXR1cm5cIkVJT1wiO2Nhc2UgMjA1OnJldHVyblwiRUlPXCI7Y2FzZSAxMTA6cmV0dXJuXCJFSU9cIjtjYXNlIDExMDM6cmV0dXJuXCJFSU9cIjtjYXNlIDE1NjpyZXR1cm5cIkVJT1wiO2Nhc2UgMTAwNTY6cmV0dXJuXCJFSVNDT05OXCI7Y2FzZSAxOTIxOnJldHVyblwiRUxPT1BcIjtjYXNlIDQ6cmV0dXJuXCJFTUZJTEVcIjtjYXNlIDEwMDI0OnJldHVyblwiRU1GSUxFXCI7Y2FzZSAxMDA0MDpyZXR1cm5cIkVNU0dTSVpFXCI7Y2FzZSAyMDY6cmV0dXJuXCJFTkFNRVRPT0xPTkdcIjtjYXNlIDEyMzE6cmV0dXJuXCJFTkVUVU5SRUFDSFwiO2Nhc2UgMTAwNTE6cmV0dXJuXCJFTkVUVU5SRUFDSFwiO2Nhc2UgMTAwNTU6cmV0dXJuXCJFTk9CVUZTXCI7Y2FzZSAxNjE6cmV0dXJuXCJFTk9FTlRcIjtjYXNlIDI2NzpyZXR1cm5cIkVOT1RESVJcIjtjYXNlIDIwMzpyZXR1cm5cIkVOT0VOVFwiO2Nhc2UgMjpyZXR1cm5cIkVOT0VOVFwiO2Nhc2UgMTU6cmV0dXJuXCJFTk9FTlRcIjtjYXNlIDQzOTI6cmV0dXJuXCJFTk9FTlRcIjtjYXNlIDEyNjpyZXR1cm5cIkVOT0VOVFwiO2Nhc2UgMzpyZXR1cm5cIkVOT0VOVFwiO2Nhc2UgMTEwMDE6cmV0dXJuXCJFTk9FTlRcIjtjYXNlIDExMDA0OnJldHVyblwiRU5PRU5UXCI7Y2FzZSA4OnJldHVyblwiRU5PTUVNXCI7Y2FzZSAxNDpyZXR1cm5cIkVOT01FTVwiO2Nhc2UgODI6cmV0dXJuXCJFTk9TUENcIjtjYXNlIDExMjpyZXR1cm5cIkVOT1NQQ1wiO2Nhc2UgMjc3OnJldHVyblwiRU5PU1BDXCI7Y2FzZSAxMTAwOnJldHVyblwiRU5PU1BDXCI7Y2FzZSAzOTpyZXR1cm5cIkVOT1NQQ1wiO2Nhc2UgMjI1MDpyZXR1cm5cIkVOT1RDT05OXCI7Y2FzZSAxMDA1NzpyZXR1cm5cIkVOT1RDT05OXCI7Y2FzZSAxNDU6cmV0dXJuXCJFTk9URU1QVFlcIjtjYXNlIDEwMDM4OnJldHVyblwiRU5PVFNPQ0tcIjtjYXNlIDUwOnJldHVyblwiRU5PVFNVUFwiO2Nhc2UgMTA5OnJldHVyblwiRU9GXCI7Y2FzZSAxMzE0OnJldHVyblwiRVBFUk1cIjtjYXNlIDIzMDpyZXR1cm5cIkVQSVBFXCI7Y2FzZSAyMzI6cmV0dXJuXCJFUElQRVwiO2Nhc2UgMjMzOnJldHVyblwiRVBJUEVcIjtjYXNlIDEwMDU4OnJldHVyblwiRVBJUEVcIjtjYXNlIDEwMDQzOnJldHVyblwiRVBST1RPTk9TVVBQT1JUXCI7Y2FzZSAxOTpyZXR1cm5cIkVST0ZTXCI7Y2FzZSAxMjE6cmV0dXJuXCJFVElNRURPVVRcIjtjYXNlIDEwMDYwOnJldHVyblwiRVRJTUVET1VUXCI7Y2FzZSAxNzpyZXR1cm5cIkVYREVWXCI7Y2FzZSAxOnJldHVyblwiRUlTRElSXCI7Y2FzZSAyMDg6cmV0dXJuXCJFMkJJR1wiO2Nhc2UgMTAwNDQ6cmV0dXJuXCJFU09DS1ROT1NVUFBPUlRcIjtkZWZhdWx0OnJldHVyblwiVU5LTk9XTlwifX12YXIgX1I9QSgoKT0+e1JSKCl9KTt2YXIgY2M9e307Y2UoY2Mse1VWX0VBSV9NRU1PUlk6KCk9PmwxLFVWX0VCQURGOigpPT5mMSxVVl9FRVhJU1Q6KCk9Pm8xLFVWX0VJTlZBTDooKT0+cDEsVVZfRU5PRU5UOigpPT5pMSxVVl9FTk9UU09DSzooKT0+UjEsVVZfVU5LTk9XTjooKT0+dTEsY29kZU1hcDooKT0+UCxlcnJvck1hcDooKT0+QXIsbWFwU3lzRXJybm9Ub1V2RXJybm86KCk9PmFjfSk7ZnVuY3Rpb24gYWMoZSl7aWYoSGU9PT1cIndpbmRvd3NcIil7bGV0IHQ9RVIoZSk7cmV0dXJuIFAuZ2V0KHQpPz8tZX1lbHNlIHJldHVybi1lfXZhciBvMSxpMSxkUixzMSxoUixhMSxPUixjMSxBcixQLGwxLHUxLGYxLHAxLFIxLFZ0PUEoKCk9PntCdCgpO1BlKCk7X1IoKTtGdCgpO28xPVdlLmVycm5vLkVFWElTVCxpMT1XZS5lcnJuby5FTk9FTlQsZFI9W1stNDA5MyxbXCJFMkJJR1wiLFwiYXJndW1lbnQgbGlzdCB0b28gbG9uZ1wiXV0sWy00MDkyLFtcIkVBQ0NFU1wiLFwicGVybWlzc2lvbiBkZW5pZWRcIl1dLFstNDA5MSxbXCJFQUREUklOVVNFXCIsXCJhZGRyZXNzIGFscmVhZHkgaW4gdXNlXCJdXSxbLTQwOTAsW1wiRUFERFJOT1RBVkFJTFwiLFwiYWRkcmVzcyBub3QgYXZhaWxhYmxlXCJdXSxbLTQwODksW1wiRUFGTk9TVVBQT1JUXCIsXCJhZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkXCJdXSxbLTQwODgsW1wiRUFHQUlOXCIsXCJyZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZVwiXV0sWy0zZTMsW1wiRUFJX0FERFJGQU1JTFlcIixcImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFstMzAwMSxbXCJFQUlfQUdBSU5cIixcInRlbXBvcmFyeSBmYWlsdXJlXCJdXSxbLTMwMDIsW1wiRUFJX0JBREZMQUdTXCIsXCJiYWQgYWlfZmxhZ3MgdmFsdWVcIl1dLFstMzAxMyxbXCJFQUlfQkFESElOVFNcIixcImludmFsaWQgdmFsdWUgZm9yIGhpbnRzXCJdXSxbLTMwMDMsW1wiRUFJX0NBTkNFTEVEXCIsXCJyZXF1ZXN0IGNhbmNlbGVkXCJdXSxbLTMwMDQsW1wiRUFJX0ZBSUxcIixcInBlcm1hbmVudCBmYWlsdXJlXCJdXSxbLTMwMDUsW1wiRUFJX0ZBTUlMWVwiLFwiYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFstMzAwNixbXCJFQUlfTUVNT1JZXCIsXCJvdXQgb2YgbWVtb3J5XCJdXSxbLTMwMDcsW1wiRUFJX05PREFUQVwiLFwibm8gYWRkcmVzc1wiXV0sWy0zMDA4LFtcIkVBSV9OT05BTUVcIixcInVua25vd24gbm9kZSBvciBzZXJ2aWNlXCJdXSxbLTMwMDksW1wiRUFJX09WRVJGTE9XXCIsXCJhcmd1bWVudCBidWZmZXIgb3ZlcmZsb3dcIl1dLFstMzAxNCxbXCJFQUlfUFJPVE9DT0xcIixcInJlc29sdmVkIHByb3RvY29sIGlzIHVua25vd25cIl1dLFstMzAxMCxbXCJFQUlfU0VSVklDRVwiLFwic2VydmljZSBub3QgYXZhaWxhYmxlIGZvciBzb2NrZXQgdHlwZVwiXV0sWy0zMDExLFtcIkVBSV9TT0NLVFlQRVwiLFwic29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZFwiXV0sWy00MDg0LFtcIkVBTFJFQURZXCIsXCJjb25uZWN0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIl1dLFstNDA4MyxbXCJFQkFERlwiLFwiYmFkIGZpbGUgZGVzY3JpcHRvclwiXV0sWy00MDgyLFtcIkVCVVNZXCIsXCJyZXNvdXJjZSBidXN5IG9yIGxvY2tlZFwiXV0sWy00MDgxLFtcIkVDQU5DRUxFRFwiLFwib3BlcmF0aW9uIGNhbmNlbGVkXCJdXSxbLTQwODAsW1wiRUNIQVJTRVRcIixcImludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXJcIl1dLFstNDA3OSxbXCJFQ09OTkFCT1JURURcIixcInNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0XCJdXSxbLTQwNzgsW1wiRUNPTk5SRUZVU0VEXCIsXCJjb25uZWN0aW9uIHJlZnVzZWRcIl1dLFstNDA3NyxbXCJFQ09OTlJFU0VUXCIsXCJjb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXJcIl1dLFstNDA3NixbXCJFREVTVEFERFJSRVFcIixcImRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWRcIl1dLFstNDA3NSxbXCJFRVhJU1RcIixcImZpbGUgYWxyZWFkeSBleGlzdHNcIl1dLFstNDA3NCxbXCJFRkFVTFRcIixcImJhZCBhZGRyZXNzIGluIHN5c3RlbSBjYWxsIGFyZ3VtZW50XCJdXSxbLTQwMzYsW1wiRUZCSUdcIixcImZpbGUgdG9vIGxhcmdlXCJdXSxbLTQwNzMsW1wiRUhPU1RVTlJFQUNIXCIsXCJob3N0IGlzIHVucmVhY2hhYmxlXCJdXSxbLTQwNzIsW1wiRUlOVFJcIixcImludGVycnVwdGVkIHN5c3RlbSBjYWxsXCJdXSxbLTQwNzEsW1wiRUlOVkFMXCIsXCJpbnZhbGlkIGFyZ3VtZW50XCJdXSxbLTQwNzAsW1wiRUlPXCIsXCJpL28gZXJyb3JcIl1dLFstNDA2OSxbXCJFSVNDT05OXCIsXCJzb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWRcIl1dLFstNDA2OCxbXCJFSVNESVJcIixcImlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5XCJdXSxbLTQwNjcsW1wiRUxPT1BcIixcInRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkXCJdXSxbLTQwNjYsW1wiRU1GSUxFXCIsXCJ0b28gbWFueSBvcGVuIGZpbGVzXCJdXSxbLTQwNjUsW1wiRU1TR1NJWkVcIixcIm1lc3NhZ2UgdG9vIGxvbmdcIl1dLFstNDA2NCxbXCJFTkFNRVRPT0xPTkdcIixcIm5hbWUgdG9vIGxvbmdcIl1dLFstNDA2MyxbXCJFTkVURE9XTlwiLFwibmV0d29yayBpcyBkb3duXCJdXSxbLTQwNjIsW1wiRU5FVFVOUkVBQ0hcIixcIm5ldHdvcmsgaXMgdW5yZWFjaGFibGVcIl1dLFstNDA2MSxbXCJFTkZJTEVcIixcImZpbGUgdGFibGUgb3ZlcmZsb3dcIl1dLFstNDA2MCxbXCJFTk9CVUZTXCIsXCJubyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlXCJdXSxbLTQwNTksW1wiRU5PREVWXCIsXCJubyBzdWNoIGRldmljZVwiXV0sWy00MDU4LFtcIkVOT0VOVFwiLFwibm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiXV0sWy00MDU3LFtcIkVOT01FTVwiLFwibm90IGVub3VnaCBtZW1vcnlcIl1dLFstNDA1NixbXCJFTk9ORVRcIixcIm1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrXCJdXSxbLTQwMzUsW1wiRU5PUFJPVE9PUFRcIixcInByb3RvY29sIG5vdCBhdmFpbGFibGVcIl1dLFstNDA1NSxbXCJFTk9TUENcIixcIm5vIHNwYWNlIGxlZnQgb24gZGV2aWNlXCJdXSxbLTQwNTQsW1wiRU5PU1lTXCIsXCJmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWRcIl1dLFstNDA1MyxbXCJFTk9UQ09OTlwiLFwic29ja2V0IGlzIG5vdCBjb25uZWN0ZWRcIl1dLFstNDA1MixbXCJFTk9URElSXCIsXCJub3QgYSBkaXJlY3RvcnlcIl1dLFstNDA1MSxbXCJFTk9URU1QVFlcIixcImRpcmVjdG9yeSBub3QgZW1wdHlcIl1dLFstNDA1MCxbXCJFTk9UU09DS1wiLFwic29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0XCJdXSxbLTQwNDksW1wiRU5PVFNVUFwiLFwib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gc29ja2V0XCJdXSxbLTQwNDgsW1wiRVBFUk1cIixcIm9wZXJhdGlvbiBub3QgcGVybWl0dGVkXCJdXSxbLTQwNDcsW1wiRVBJUEVcIixcImJyb2tlbiBwaXBlXCJdXSxbLTQwNDYsW1wiRVBST1RPXCIsXCJwcm90b2NvbCBlcnJvclwiXV0sWy00MDQ1LFtcIkVQUk9UT05PU1VQUE9SVFwiLFwicHJvdG9jb2wgbm90IHN1cHBvcnRlZFwiXV0sWy00MDQ0LFtcIkVQUk9UT1RZUEVcIixcInByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldFwiXV0sWy00MDM0LFtcIkVSQU5HRVwiLFwicmVzdWx0IHRvbyBsYXJnZVwiXV0sWy00MDQzLFtcIkVST0ZTXCIsXCJyZWFkLW9ubHkgZmlsZSBzeXN0ZW1cIl1dLFstNDA0MixbXCJFU0hVVERPV05cIixcImNhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93blwiXV0sWy00MDQxLFtcIkVTUElQRVwiLFwiaW52YWxpZCBzZWVrXCJdXSxbLTQwNDAsW1wiRVNSQ0hcIixcIm5vIHN1Y2ggcHJvY2Vzc1wiXV0sWy00MDM5LFtcIkVUSU1FRE9VVFwiLFwiY29ubmVjdGlvbiB0aW1lZCBvdXRcIl1dLFstNDAzOCxbXCJFVFhUQlNZXCIsXCJ0ZXh0IGZpbGUgaXMgYnVzeVwiXV0sWy00MDM3LFtcIkVYREVWXCIsXCJjcm9zcy1kZXZpY2UgbGluayBub3QgcGVybWl0dGVkXCJdXSxbLTQwOTQsW1wiVU5LTk9XTlwiLFwidW5rbm93biBlcnJvclwiXV0sWy00MDk1LFtcIkVPRlwiLFwiZW5kIG9mIGZpbGVcIl1dLFstNDAzMyxbXCJFTlhJT1wiLFwibm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzc1wiXV0sWy00MDMyLFtcIkVNTElOS1wiLFwidG9vIG1hbnkgbGlua3NcIl1dLFstNDAzMSxbXCJFSE9TVERPV05cIixcImhvc3QgaXMgZG93blwiXV0sWy00MDMwLFtcIkVSRU1PVEVJT1wiLFwicmVtb3RlIEkvTyBlcnJvclwiXV0sWy00MDI5LFtcIkVOT1RUWVwiLFwiaW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlXCJdXSxbLTQwMjgsW1wiRUZUWVBFXCIsXCJpbmFwcHJvcHJpYXRlIGZpbGUgdHlwZSBvciBmb3JtYXRcIl1dLFstNDAyNyxbXCJFSUxTRVFcIixcImlsbGVnYWwgYnl0ZSBzZXF1ZW5jZVwiXV1dLHMxPWRSLm1hcCgoW2UsW3RdXSk9Plt0LGVdKSxoUj1bWy03LFtcIkUyQklHXCIsXCJhcmd1bWVudCBsaXN0IHRvbyBsb25nXCJdXSxbLTEzLFtcIkVBQ0NFU1wiLFwicGVybWlzc2lvbiBkZW5pZWRcIl1dLFstNDgsW1wiRUFERFJJTlVTRVwiLFwiYWRkcmVzcyBhbHJlYWR5IGluIHVzZVwiXV0sWy00OSxbXCJFQUREUk5PVEFWQUlMXCIsXCJhZGRyZXNzIG5vdCBhdmFpbGFibGVcIl1dLFstNDcsW1wiRUFGTk9TVVBQT1JUXCIsXCJhZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkXCJdXSxbLTM1LFtcIkVBR0FJTlwiLFwicmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGVcIl1dLFstM2UzLFtcIkVBSV9BRERSRkFNSUxZXCIsXCJhZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkXCJdXSxbLTMwMDEsW1wiRUFJX0FHQUlOXCIsXCJ0ZW1wb3JhcnkgZmFpbHVyZVwiXV0sWy0zMDAyLFtcIkVBSV9CQURGTEFHU1wiLFwiYmFkIGFpX2ZsYWdzIHZhbHVlXCJdXSxbLTMwMTMsW1wiRUFJX0JBREhJTlRTXCIsXCJpbnZhbGlkIHZhbHVlIGZvciBoaW50c1wiXV0sWy0zMDAzLFtcIkVBSV9DQU5DRUxFRFwiLFwicmVxdWVzdCBjYW5jZWxlZFwiXV0sWy0zMDA0LFtcIkVBSV9GQUlMXCIsXCJwZXJtYW5lbnQgZmFpbHVyZVwiXV0sWy0zMDA1LFtcIkVBSV9GQU1JTFlcIixcImFpX2ZhbWlseSBub3Qgc3VwcG9ydGVkXCJdXSxbLTMwMDYsW1wiRUFJX01FTU9SWVwiLFwib3V0IG9mIG1lbW9yeVwiXV0sWy0zMDA3LFtcIkVBSV9OT0RBVEFcIixcIm5vIGFkZHJlc3NcIl1dLFstMzAwOCxbXCJFQUlfTk9OQU1FXCIsXCJ1bmtub3duIG5vZGUgb3Igc2VydmljZVwiXV0sWy0zMDA5LFtcIkVBSV9PVkVSRkxPV1wiLFwiYXJndW1lbnQgYnVmZmVyIG92ZXJmbG93XCJdXSxbLTMwMTQsW1wiRUFJX1BST1RPQ09MXCIsXCJyZXNvbHZlZCBwcm90b2NvbCBpcyB1bmtub3duXCJdXSxbLTMwMTAsW1wiRUFJX1NFUlZJQ0VcIixcInNlcnZpY2Ugbm90IGF2YWlsYWJsZSBmb3Igc29ja2V0IHR5cGVcIl1dLFstMzAxMSxbXCJFQUlfU09DS1RZUEVcIixcInNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWRcIl1dLFstMzcsW1wiRUFMUkVBRFlcIixcImNvbm5lY3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzc1wiXV0sWy05LFtcIkVCQURGXCIsXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCJdXSxbLTE2LFtcIkVCVVNZXCIsXCJyZXNvdXJjZSBidXN5IG9yIGxvY2tlZFwiXV0sWy04OSxbXCJFQ0FOQ0VMRURcIixcIm9wZXJhdGlvbiBjYW5jZWxlZFwiXV0sWy00MDgwLFtcIkVDSEFSU0VUXCIsXCJpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyXCJdXSxbLTUzLFtcIkVDT05OQUJPUlRFRFwiLFwic29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnRcIl1dLFstNjEsW1wiRUNPTk5SRUZVU0VEXCIsXCJjb25uZWN0aW9uIHJlZnVzZWRcIl1dLFstNTQsW1wiRUNPTk5SRVNFVFwiLFwiY29ubmVjdGlvbiByZXNldCBieSBwZWVyXCJdXSxbLTM5LFtcIkVERVNUQUREUlJFUVwiLFwiZGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZFwiXV0sWy0xNyxbXCJFRVhJU1RcIixcImZpbGUgYWxyZWFkeSBleGlzdHNcIl1dLFstMTQsW1wiRUZBVUxUXCIsXCJiYWQgYWRkcmVzcyBpbiBzeXN0ZW0gY2FsbCBhcmd1bWVudFwiXV0sWy0yNyxbXCJFRkJJR1wiLFwiZmlsZSB0b28gbGFyZ2VcIl1dLFstNjUsW1wiRUhPU1RVTlJFQUNIXCIsXCJob3N0IGlzIHVucmVhY2hhYmxlXCJdXSxbLTQsW1wiRUlOVFJcIixcImludGVycnVwdGVkIHN5c3RlbSBjYWxsXCJdXSxbLTIyLFtcIkVJTlZBTFwiLFwiaW52YWxpZCBhcmd1bWVudFwiXV0sWy01LFtcIkVJT1wiLFwiaS9vIGVycm9yXCJdXSxbLTU2LFtcIkVJU0NPTk5cIixcInNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZFwiXV0sWy0yMSxbXCJFSVNESVJcIixcImlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5XCJdXSxbLTYyLFtcIkVMT09QXCIsXCJ0b28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZFwiXV0sWy0yNCxbXCJFTUZJTEVcIixcInRvbyBtYW55IG9wZW4gZmlsZXNcIl1dLFstNDAsW1wiRU1TR1NJWkVcIixcIm1lc3NhZ2UgdG9vIGxvbmdcIl1dLFstNjMsW1wiRU5BTUVUT09MT05HXCIsXCJuYW1lIHRvbyBsb25nXCJdXSxbLTUwLFtcIkVORVRET1dOXCIsXCJuZXR3b3JrIGlzIGRvd25cIl1dLFstNTEsW1wiRU5FVFVOUkVBQ0hcIixcIm5ldHdvcmsgaXMgdW5yZWFjaGFibGVcIl1dLFstMjMsW1wiRU5GSUxFXCIsXCJmaWxlIHRhYmxlIG92ZXJmbG93XCJdXSxbLTU1LFtcIkVOT0JVRlNcIixcIm5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGVcIl1dLFstMTksW1wiRU5PREVWXCIsXCJubyBzdWNoIGRldmljZVwiXV0sWy0yLFtcIkVOT0VOVFwiLFwibm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiXV0sWy0xMixbXCJFTk9NRU1cIixcIm5vdCBlbm91Z2ggbWVtb3J5XCJdXSxbLTQwNTYsW1wiRU5PTkVUXCIsXCJtYWNoaW5lIGlzIG5vdCBvbiB0aGUgbmV0d29ya1wiXV0sWy00MixbXCJFTk9QUk9UT09QVFwiLFwicHJvdG9jb2wgbm90IGF2YWlsYWJsZVwiXV0sWy0yOCxbXCJFTk9TUENcIixcIm5vIHNwYWNlIGxlZnQgb24gZGV2aWNlXCJdXSxbLTc4LFtcIkVOT1NZU1wiLFwiZnVuY3Rpb24gbm90IGltcGxlbWVudGVkXCJdXSxbLTU3LFtcIkVOT1RDT05OXCIsXCJzb2NrZXQgaXMgbm90IGNvbm5lY3RlZFwiXV0sWy0yMCxbXCJFTk9URElSXCIsXCJub3QgYSBkaXJlY3RvcnlcIl1dLFstNjYsW1wiRU5PVEVNUFRZXCIsXCJkaXJlY3Rvcnkgbm90IGVtcHR5XCJdXSxbLTM4LFtcIkVOT1RTT0NLXCIsXCJzb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXRcIl1dLFstNDUsW1wiRU5PVFNVUFwiLFwib3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gc29ja2V0XCJdXSxbLTEsW1wiRVBFUk1cIixcIm9wZXJhdGlvbiBub3QgcGVybWl0dGVkXCJdXSxbLTMyLFtcIkVQSVBFXCIsXCJicm9rZW4gcGlwZVwiXV0sWy0xMDAsW1wiRVBST1RPXCIsXCJwcm90b2NvbCBlcnJvclwiXV0sWy00MyxbXCJFUFJPVE9OT1NVUFBPUlRcIixcInByb3RvY29sIG5vdCBzdXBwb3J0ZWRcIl1dLFstNDEsW1wiRVBST1RPVFlQRVwiLFwicHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0XCJdXSxbLTM0LFtcIkVSQU5HRVwiLFwicmVzdWx0IHRvbyBsYXJnZVwiXV0sWy0zMCxbXCJFUk9GU1wiLFwicmVhZC1vbmx5IGZpbGUgc3lzdGVtXCJdXSxbLTU4LFtcIkVTSFVURE9XTlwiLFwiY2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duXCJdXSxbLTI5LFtcIkVTUElQRVwiLFwiaW52YWxpZCBzZWVrXCJdXSxbLTMsW1wiRVNSQ0hcIixcIm5vIHN1Y2ggcHJvY2Vzc1wiXV0sWy02MCxbXCJFVElNRURPVVRcIixcImNvbm5lY3Rpb24gdGltZWQgb3V0XCJdXSxbLTI2LFtcIkVUWFRCU1lcIixcInRleHQgZmlsZSBpcyBidXN5XCJdXSxbLTE4LFtcIkVYREVWXCIsXCJjcm9zcy1kZXZpY2UgbGluayBub3QgcGVybWl0dGVkXCJdXSxbLTQwOTQsW1wiVU5LTk9XTlwiLFwidW5rbm93biBlcnJvclwiXV0sWy00MDk1LFtcIkVPRlwiLFwiZW5kIG9mIGZpbGVcIl1dLFstNixbXCJFTlhJT1wiLFwibm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzc1wiXV0sWy0zMSxbXCJFTUxJTktcIixcInRvbyBtYW55IGxpbmtzXCJdXSxbLTY0LFtcIkVIT1NURE9XTlwiLFwiaG9zdCBpcyBkb3duXCJdXSxbLTQwMzAsW1wiRVJFTU9URUlPXCIsXCJyZW1vdGUgSS9PIGVycm9yXCJdXSxbLTI1LFtcIkVOT1RUWVwiLFwiaW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlXCJdXSxbLTc5LFtcIkVGVFlQRVwiLFwiaW5hcHByb3ByaWF0ZSBmaWxlIHR5cGUgb3IgZm9ybWF0XCJdXSxbLTkyLFtcIkVJTFNFUVwiLFwiaWxsZWdhbCBieXRlIHNlcXVlbmNlXCJdXV0sYTE9aFIubWFwKChbZSxbdF1dKT0+W3QsZV0pLE9SPVtbLTcsW1wiRTJCSUdcIixcImFyZ3VtZW50IGxpc3QgdG9vIGxvbmdcIl1dLFstMTMsW1wiRUFDQ0VTXCIsXCJwZXJtaXNzaW9uIGRlbmllZFwiXV0sWy05OCxbXCJFQUREUklOVVNFXCIsXCJhZGRyZXNzIGFscmVhZHkgaW4gdXNlXCJdXSxbLTk5LFtcIkVBRERSTk9UQVZBSUxcIixcImFkZHJlc3Mgbm90IGF2YWlsYWJsZVwiXV0sWy05NyxbXCJFQUZOT1NVUFBPUlRcIixcImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFstMTEsW1wiRUFHQUlOXCIsXCJyZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZVwiXV0sWy0zZTMsW1wiRUFJX0FERFJGQU1JTFlcIixcImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFstMzAwMSxbXCJFQUlfQUdBSU5cIixcInRlbXBvcmFyeSBmYWlsdXJlXCJdXSxbLTMwMDIsW1wiRUFJX0JBREZMQUdTXCIsXCJiYWQgYWlfZmxhZ3MgdmFsdWVcIl1dLFstMzAxMyxbXCJFQUlfQkFESElOVFNcIixcImludmFsaWQgdmFsdWUgZm9yIGhpbnRzXCJdXSxbLTMwMDMsW1wiRUFJX0NBTkNFTEVEXCIsXCJyZXF1ZXN0IGNhbmNlbGVkXCJdXSxbLTMwMDQsW1wiRUFJX0ZBSUxcIixcInBlcm1hbmVudCBmYWlsdXJlXCJdXSxbLTMwMDUsW1wiRUFJX0ZBTUlMWVwiLFwiYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFstMzAwNixbXCJFQUlfTUVNT1JZXCIsXCJvdXQgb2YgbWVtb3J5XCJdXSxbLTMwMDcsW1wiRUFJX05PREFUQVwiLFwibm8gYWRkcmVzc1wiXV0sWy0zMDA4LFtcIkVBSV9OT05BTUVcIixcInVua25vd24gbm9kZSBvciBzZXJ2aWNlXCJdXSxbLTMwMDksW1wiRUFJX09WRVJGTE9XXCIsXCJhcmd1bWVudCBidWZmZXIgb3ZlcmZsb3dcIl1dLFstMzAxNCxbXCJFQUlfUFJPVE9DT0xcIixcInJlc29sdmVkIHByb3RvY29sIGlzIHVua25vd25cIl1dLFstMzAxMCxbXCJFQUlfU0VSVklDRVwiLFwic2VydmljZSBub3QgYXZhaWxhYmxlIGZvciBzb2NrZXQgdHlwZVwiXV0sWy0zMDExLFtcIkVBSV9TT0NLVFlQRVwiLFwic29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZFwiXV0sWy0xMTQsW1wiRUFMUkVBRFlcIixcImNvbm5lY3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzc1wiXV0sWy05LFtcIkVCQURGXCIsXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCJdXSxbLTE2LFtcIkVCVVNZXCIsXCJyZXNvdXJjZSBidXN5IG9yIGxvY2tlZFwiXV0sWy0xMjUsW1wiRUNBTkNFTEVEXCIsXCJvcGVyYXRpb24gY2FuY2VsZWRcIl1dLFstNDA4MCxbXCJFQ0hBUlNFVFwiLFwiaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlclwiXV0sWy0xMDMsW1wiRUNPTk5BQk9SVEVEXCIsXCJzb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydFwiXV0sWy0xMTEsW1wiRUNPTk5SRUZVU0VEXCIsXCJjb25uZWN0aW9uIHJlZnVzZWRcIl1dLFstMTA0LFtcIkVDT05OUkVTRVRcIixcImNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlclwiXV0sWy04OSxbXCJFREVTVEFERFJSRVFcIixcImRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWRcIl1dLFstMTcsW1wiRUVYSVNUXCIsXCJmaWxlIGFscmVhZHkgZXhpc3RzXCJdXSxbLTE0LFtcIkVGQVVMVFwiLFwiYmFkIGFkZHJlc3MgaW4gc3lzdGVtIGNhbGwgYXJndW1lbnRcIl1dLFstMjcsW1wiRUZCSUdcIixcImZpbGUgdG9vIGxhcmdlXCJdXSxbLTExMyxbXCJFSE9TVFVOUkVBQ0hcIixcImhvc3QgaXMgdW5yZWFjaGFibGVcIl1dLFstNCxbXCJFSU5UUlwiLFwiaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGxcIl1dLFstMjIsW1wiRUlOVkFMXCIsXCJpbnZhbGlkIGFyZ3VtZW50XCJdXSxbLTUsW1wiRUlPXCIsXCJpL28gZXJyb3JcIl1dLFstMTA2LFtcIkVJU0NPTk5cIixcInNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZFwiXV0sWy0yMSxbXCJFSVNESVJcIixcImlsbGVnYWwgb3BlcmF0aW9uIG9uIGEgZGlyZWN0b3J5XCJdXSxbLTQwLFtcIkVMT09QXCIsXCJ0b28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZFwiXV0sWy0yNCxbXCJFTUZJTEVcIixcInRvbyBtYW55IG9wZW4gZmlsZXNcIl1dLFstOTAsW1wiRU1TR1NJWkVcIixcIm1lc3NhZ2UgdG9vIGxvbmdcIl1dLFstMzYsW1wiRU5BTUVUT09MT05HXCIsXCJuYW1lIHRvbyBsb25nXCJdXSxbLTEwMCxbXCJFTkVURE9XTlwiLFwibmV0d29yayBpcyBkb3duXCJdXSxbLTEwMSxbXCJFTkVUVU5SRUFDSFwiLFwibmV0d29yayBpcyB1bnJlYWNoYWJsZVwiXV0sWy0yMyxbXCJFTkZJTEVcIixcImZpbGUgdGFibGUgb3ZlcmZsb3dcIl1dLFstMTA1LFtcIkVOT0JVRlNcIixcIm5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGVcIl1dLFstMTksW1wiRU5PREVWXCIsXCJubyBzdWNoIGRldmljZVwiXV0sWy0yLFtcIkVOT0VOVFwiLFwibm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiXV0sWy0xMixbXCJFTk9NRU1cIixcIm5vdCBlbm91Z2ggbWVtb3J5XCJdXSxbLTY0LFtcIkVOT05FVFwiLFwibWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmtcIl1dLFstOTIsW1wiRU5PUFJPVE9PUFRcIixcInByb3RvY29sIG5vdCBhdmFpbGFibGVcIl1dLFstMjgsW1wiRU5PU1BDXCIsXCJubyBzcGFjZSBsZWZ0IG9uIGRldmljZVwiXV0sWy0zOCxbXCJFTk9TWVNcIixcImZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZFwiXV0sWy0xMDcsW1wiRU5PVENPTk5cIixcInNvY2tldCBpcyBub3QgY29ubmVjdGVkXCJdXSxbLTIwLFtcIkVOT1RESVJcIixcIm5vdCBhIGRpcmVjdG9yeVwiXV0sWy0zOSxbXCJFTk9URU1QVFlcIixcImRpcmVjdG9yeSBub3QgZW1wdHlcIl1dLFstODgsW1wiRU5PVFNPQ0tcIixcInNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldFwiXV0sWy05NSxbXCJFTk9UU1VQXCIsXCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiBzb2NrZXRcIl1dLFstMSxbXCJFUEVSTVwiLFwib3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWRcIl1dLFstMzIsW1wiRVBJUEVcIixcImJyb2tlbiBwaXBlXCJdXSxbLTcxLFtcIkVQUk9UT1wiLFwicHJvdG9jb2wgZXJyb3JcIl1dLFstOTMsW1wiRVBST1RPTk9TVVBQT1JUXCIsXCJwcm90b2NvbCBub3Qgc3VwcG9ydGVkXCJdXSxbLTkxLFtcIkVQUk9UT1RZUEVcIixcInByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldFwiXV0sWy0zNCxbXCJFUkFOR0VcIixcInJlc3VsdCB0b28gbGFyZ2VcIl1dLFstMzAsW1wiRVJPRlNcIixcInJlYWQtb25seSBmaWxlIHN5c3RlbVwiXV0sWy0xMDgsW1wiRVNIVVRET1dOXCIsXCJjYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd25cIl1dLFstMjksW1wiRVNQSVBFXCIsXCJpbnZhbGlkIHNlZWtcIl1dLFstMyxbXCJFU1JDSFwiLFwibm8gc3VjaCBwcm9jZXNzXCJdXSxbLTExMCxbXCJFVElNRURPVVRcIixcImNvbm5lY3Rpb24gdGltZWQgb3V0XCJdXSxbLTI2LFtcIkVUWFRCU1lcIixcInRleHQgZmlsZSBpcyBidXN5XCJdXSxbLTE4LFtcIkVYREVWXCIsXCJjcm9zcy1kZXZpY2UgbGluayBub3QgcGVybWl0dGVkXCJdXSxbLTQwOTQsW1wiVU5LTk9XTlwiLFwidW5rbm93biBlcnJvclwiXV0sWy00MDk1LFtcIkVPRlwiLFwiZW5kIG9mIGZpbGVcIl1dLFstNixbXCJFTlhJT1wiLFwibm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzc1wiXV0sWy0zMSxbXCJFTUxJTktcIixcInRvbyBtYW55IGxpbmtzXCJdXSxbLTExMixbXCJFSE9TVERPV05cIixcImhvc3QgaXMgZG93blwiXV0sWy0xMjEsW1wiRVJFTU9URUlPXCIsXCJyZW1vdGUgSS9PIGVycm9yXCJdXSxbLTI1LFtcIkVOT1RUWVwiLFwiaW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IgZGV2aWNlXCJdXSxbLTQwMjgsW1wiRUZUWVBFXCIsXCJpbmFwcHJvcHJpYXRlIGZpbGUgdHlwZSBvciBmb3JtYXRcIl1dLFstODQsW1wiRUlMU0VRXCIsXCJpbGxlZ2FsIGJ5dGUgc2VxdWVuY2VcIl1dXSxjMT1PUi5tYXAoKFtlLFt0XV0pPT5bdCxlXSksQXI9bmV3IE1hcChIZT09PVwid2luZG93c1wiP2RSOkhlPT09XCJkYXJ3aW5cIj9oUjpIZT09PVwibGludXhcIj9PUjpOdCgpKSxQPW5ldyBNYXAoSGU9PT1cIndpbmRvd3NcIj9zMTpIZT09PVwiZGFyd2luXCI/YTE6SGU9PT1cImxpbnV4XCI/YzE6TnQoKSk7bDE9UC5nZXQoXCJFQUlfTUVNT1JZXCIpLHUxPVAuZ2V0KFwiVU5LTk9XTlwiKSxmMT1QLmdldChcIkVCQURGXCIpLHAxPVAuZ2V0KFwiRUlOVkFMXCIpLFIxPVAuZ2V0KFwiRU5PVFNPQ0tcIil9KTt2YXIgRTEsbVI9QSgoKT0+e2N0KCk7Y3QoKTtFMT17Li4uVm99fSk7dmFyIFNSPUEoKCk9PntjdCgpO1dhKCk7cGkoKX0pO2Z1bmN0aW9uIGhpKGUpe2lmKHR5cGVvZiBlIT1cIm51bWJlclwiKXRocm93IG5ldyBELkVSUl9JTlZBTElEX0FSR19UWVBFKFwiZXJyXCIsXCJudW1iZXJcIixlKTtpZihlPj0wfHwhXzEoZSkpdGhyb3cgbmV3IEQuRVJSX09VVF9PRl9SQU5HRShcImVyclwiLFwiYSBuZWdhdGl2ZSBpbnRlZ2VyXCIsZSk7cmV0dXJuIEFyLmdldChlKT8uWzBdfXZhciBfMSxsYz1BKCgpPT57eigpO0hwKCk7c2MoKTt6KCk7R3IoKTtfcigpO1Z0KCk7bVIoKTt1ZSgpO1NSKCk7eWUoKTtfMT1OdW1iZXIuaXNTYWZlSW50ZWdlcn0pO2Z1bmN0aW9uIGdSKGUpe2xldCB0PVwiXCIscj1lLmxlbmd0aCxuPWVbMF09PT1cIi1cIj8xOjA7Zm9yKDtyPj1uKzQ7ci09Myl0PWBfJHtlLnNsaWNlKHItMyxyKX0ke3R9YDtyZXR1cm5gJHtlLnNsaWNlKDAscil9JHt0fWB9ZnVuY3Rpb24gQVIoZSl7cmV0dXJuIEFyLmdldChlKX1mdW5jdGlvbiBnMShlLHQpe3JldHVybiBjbGFzcyBleHRlbmRzIE9pe2NvbnN0cnVjdG9yKG4pe3N1cGVyKGUsbix0KX19fWZ1bmN0aW9uIE5SKGUsdCl7dD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2xldCByPVwiVGhlIFwiO2lmKGUuZW5kc1dpdGgoXCIgYXJndW1lbnRcIikpcis9YCR7ZX0gYDtlbHNle2xldCBzPWUuaW5jbHVkZXMoXCIuXCIpP1wicHJvcGVydHlcIjpcImFyZ3VtZW50XCI7cis9YFwiJHtlfVwiICR7c30gYH1yKz1cIm11c3QgYmUgXCI7bGV0IG49W10sbz1bXSxpPVtdO2ZvcihsZXQgcyBvZiB0KVMxLmluY2x1ZGVzKHMpP24ucHVzaChzLnRvTG9jYWxlTG93ZXJDYXNlKCkpOm0xLnRlc3Qocyk/by5wdXNoKHMpOmkucHVzaChzKTtpZihvLmxlbmd0aD4wKXtsZXQgcz1uLmluZGV4T2YoXCJvYmplY3RcIik7cyE9PS0xJiYobi5zcGxpY2UocywxKSxvLnB1c2goXCJPYmplY3RcIikpfWlmKG4ubGVuZ3RoPjApe2lmKG4ubGVuZ3RoPjIpe2xldCBzPW4ucG9wKCk7cis9YG9uZSBvZiB0eXBlICR7bi5qb2luKFwiLCBcIil9LCBvciAke3N9YH1lbHNlIG4ubGVuZ3RoPT09Mj9yKz1gb25lIG9mIHR5cGUgJHtuWzBdfSBvciAke25bMV19YDpyKz1gb2YgdHlwZSAke25bMF19YDsoby5sZW5ndGg+MHx8aS5sZW5ndGg+MCkmJihyKz1cIiBvciBcIil9aWYoby5sZW5ndGg+MCl7aWYoby5sZW5ndGg+Mil7bGV0IHM9by5wb3AoKTtyKz1gYW4gaW5zdGFuY2Ugb2YgJHtvLmpvaW4oXCIsIFwiKX0sIG9yICR7c31gfWVsc2Ugcis9YGFuIGluc3RhbmNlIG9mICR7b1swXX1gLG8ubGVuZ3RoPT09MiYmKHIrPWAgb3IgJHtvWzFdfWApO2kubGVuZ3RoPjAmJihyKz1cIiBvciBcIil9aWYoaS5sZW5ndGg+MClpZihpLmxlbmd0aD4yKXtsZXQgcz1pLnBvcCgpO3IrPWBvbmUgb2YgJHtpLmpvaW4oXCIsIFwiKX0sIG9yICR7c31gfWVsc2UgaS5sZW5ndGg9PT0yP3IrPWBvbmUgb2YgJHtpWzBdfSBvciAke2lbMV19YDooaVswXS50b0xvd2VyQ2FzZSgpIT09aVswXSYmKHIrPVwiYW4gXCIpLHIrPWAke2lbMF19YCk7cmV0dXJuIHJ9ZnVuY3Rpb24gSVIoZSl7aWYoZT09bnVsbClyZXR1cm5gIFJlY2VpdmVkICR7ZX1gO2lmKHR5cGVvZiBlPT1cImZ1bmN0aW9uXCImJmUubmFtZSlyZXR1cm5gIFJlY2VpdmVkIGZ1bmN0aW9uICR7ZS5uYW1lfWA7aWYodHlwZW9mIGU9PVwib2JqZWN0XCIpcmV0dXJuIGUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZT9gIFJlY2VpdmVkIGFuIGluc3RhbmNlIG9mICR7ZS5jb25zdHJ1Y3Rvci5uYW1lfWA6YCBSZWNlaXZlZCAke29lKGUse2RlcHRoOi0xfSl9YDtsZXQgdD1vZShlLHtjb2xvcnM6ITF9KTtyZXR1cm4gdC5sZW5ndGg+MjUmJih0PWAke3Quc2xpY2UoMCwyNSl9Li4uYCksYCBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGV9ICgke3R9KWB9ZnVuY3Rpb24gQTEoZSl7cmV0dXJuIGUmJmUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZT9gaW5zdGFuY2Ugb2YgJHtlLmNvbnN0cnVjdG9yLm5hbWV9YDpgdHlwZSAke3R5cGVvZiBlfWB9ZnVuY3Rpb24gTWUoZSx0KXtsZXQgcj14MShlKTtyZXR1cm4gdHlwZW9mIHI+XCJ1XCI/ZTpfYyh7ZXJybm86YWMociksLi4udH0pfWZ1bmN0aW9uIHgxKGUpe2xldCB0PWUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2UubWF0Y2goL1xcKG9zIGVycm9yIChcXGQrKVxcKS8pOiExO2lmKHQpcmV0dXJuK3RbMV19ZnVuY3Rpb24gQ2koZSx0KXtpZihlJiZ0JiZlIT09dCl7aWYoQXJyYXkuaXNBcnJheSh0LmVycm9ycykpcmV0dXJuIHQuZXJyb3JzLnB1c2goZSksdDtsZXQgcj1uZXcgQWdncmVnYXRlRXJyb3IoW3QsZV0sdC5tZXNzYWdlKTtyZXR1cm4gci5jb2RlPXQuY29kZSxyfXJldHVybiBlfHx0fXZhciBkMSxoMSxPMSxtMSxTMSxoZSx6cixTQyxnQyx4UixfYyxBQyx4QyxZciwkZSxqcixHZSxPaSxkYyx1YyxCLGZjLGFlLFVlLHBjLG1pLFZuLFNpLGdpLEtyLEFpLFJjLG5yLFhyLHhyLEVjLHhpLE5pLHl0LHFyLEh0LElpLHlpLFRpLERpLFFyLEhuLCR0LGJpLCRuLEduLElDLGVlPUEoKCk9PntsYygpO0dyKCk7X3IoKTtWdCgpO2VyKCk7UGUoKTtGdCgpO0JzKCk7KHtlcnJubzp7RU5PVERJUjpkMSxFTk9FTlQ6aDF9fT1XZSksTzE9U3ltYm9sKFwia0lzTm9kZUVycm9yXCIpLG0xPS9eKFtBLVpdW2EtejAtOV0qKSskLyxTMT1bXCJzdHJpbmdcIixcImZ1bmN0aW9uXCIsXCJudW1iZXJcIixcIm9iamVjdFwiLFwiRnVuY3Rpb25cIixcIk9iamVjdFwiLFwiYm9vbGVhblwiLFwiYmlnaW50XCIsXCJzeW1ib2xcIl0saGU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZFwiKTt0aGlzLmNvZGU9XCJBQk9SVF9FUlJcIix0aGlzLm5hbWU9XCJBYm9ydEVycm9yXCJ9fTt6cj1YKGZ1bmN0aW9uKHQpe3JldHVybiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0KSx0fSksU0M9WChmdW5jdGlvbih0LHIsbixvKXtsZXR7MDppLDE6c309QVIodCl8fHhSLGE9YCR7cn0gJHtpfTogJHtzfWAsYz1cIlwiO28mJm8+MD9jPWAgJHtufToke299YDpuJiYoYz1gICR7bn1gKTtsZXQgdT1uZXcgRXJyb3IoYCR7YX0ke2N9YCk7cmV0dXJuIHUuY29kZT1pLHUuZXJybm89dCx1LnN5c2NhbGw9cix1LmFkZHJlc3M9bixvJiYodS5wb3J0PW8pLHpyKHUpfSksZ0M9WChmdW5jdGlvbih0LHIsbil7bGV0IG89aGkodCksaT1uP2Ake3J9ICR7b30gJHtufWA6YCR7cn0gJHtvfWAscz1uZXcgRXJyb3IoaSk7cmV0dXJuIHMuZXJybm89dCxzLmNvZGU9byxzLnN5c2NhbGw9cix6cihzKX0pO3hSPVtcIlVOS05PV05cIixcInVua25vd24gZXJyb3JcIl0sX2M9WChmdW5jdGlvbih0KXtsZXR7MDpyLDE6bn09QVIodC5lcnJubyl8fHhSLG89YCR7cn06ICR7dC5tZXNzYWdlfHxufSwgJHt0LnN5c2NhbGx9YCxpLHM7dC5wYXRoJiYoaT10LnBhdGgudG9TdHJpbmcoKSxvKz1gICcke2l9J2ApLHQuZGVzdCYmKHM9dC5kZXN0LnRvU3RyaW5nKCksbys9YCAtPiAnJHtzfSdgKTtsZXQgYT1uZXcgRXJyb3Iobyk7Zm9yKGxldCBjIG9mIE9iamVjdC5rZXlzKHQpKWM9PT1cIm1lc3NhZ2VcInx8Yz09PVwicGF0aFwifHxjPT09XCJkZXN0XCJ8fChhW2NdPXRbY10pO3JldHVybiBhLmNvZGU9cixpJiYoYS5wYXRoPWkpLHMmJihhLmRlc3Q9cyksenIoYSl9KSxBQz1YKGZ1bmN0aW9uKHQscixuLG8saSl7bGV0IHM9aGkodCksYT1cIlwiO28mJm8+MD9hPWAgJHtufToke299YDpuJiYoYT1gICR7bn1gKSxpJiYoYSs9YCAtIExvY2FsICgke2l9KWApO2xldCBjPW5ldyBFcnJvcihgJHtyfSAke3N9JHthfWApO3JldHVybiBjLmVycm5vPXQsYy5jb2RlPXMsYy5zeXNjYWxsPXIsYy5hZGRyZXNzPW4sbyYmKGMucG9ydD1vKSx6cihjKX0pLHhDPVgoZnVuY3Rpb24oZSx0LHIpe2xldCBuO3R5cGVvZiBlPT1cIm51bWJlclwiJiYobj1lLGU9PT1QLmdldChcIkVBSV9OT0RBVEFcIil8fGU9PT1QLmdldChcIkVBSV9OT05BTUVcIik/ZT1cIkVOT1RGT1VORFwiOmU9aGkoZSkpO2xldCBvPWAke3R9ICR7ZX0ke3I/YCAke3J9YDpcIlwifWAsaT1uZXcgRXJyb3Iobyk7cmV0dXJuIGkuZXJybm89bixpLmNvZGU9ZSxpLnN5c2NhbGw9dCxyJiYoaS5ob3N0bmFtZT1yKSx6cihpKX0pLFlyPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IocixuLG8pe3N1cGVyKG8pO3RoaXMuY29kZT1uLHRoaXMubmFtZT1yLHRoaXMuc3RhY2s9dGhpcy5zdGFjayYmYCR7cn0gWyR7dGhpcy5jb2RlfV0ke3RoaXMuc3RhY2suc2xpY2UoMjApfWB9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFske3RoaXMuY29kZX1dOiAke3RoaXMubWVzc2FnZX1gfX0sJGU9Y2xhc3MgZXh0ZW5kcyBZcntjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKEVycm9yLnByb3RvdHlwZS5uYW1lLHQscil9fSxqcj1jbGFzcyBleHRlbmRzIFlye2NvbnN0cnVjdG9yKHQscil7c3VwZXIoUmFuZ2VFcnJvci5wcm90b3R5cGUubmFtZSx0LHIpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLFJhbmdlRXJyb3IucHJvdG90eXBlKSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCR7dGhpcy5uYW1lfSBbJHt0aGlzLmNvZGV9XTogJHt0aGlzLm1lc3NhZ2V9YH19fSxHZT1jbGFzcyBleHRlbmRzIFlye2NvbnN0cnVjdG9yKHQscil7c3VwZXIoVHlwZUVycm9yLnByb3RvdHlwZS5uYW1lLHQsciksT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsVHlwZUVycm9yLnByb3RvdHlwZSksdGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAke3RoaXMubmFtZX0gWyR7dGhpcy5jb2RlfV06ICR7dGhpcy5tZXNzYWdlfWB9fX0sT2k9Y2xhc3MgZXh0ZW5kcyBZcntjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IG89YCR7bn06ICR7ci5zeXNjYWxsfSByZXR1cm5lZCAke3IuY29kZX0gKCR7ci5tZXNzYWdlfSlgO3IucGF0aCE9PXZvaWQgMCYmKG8rPWAgJHtyLnBhdGh9YCksci5kZXN0IT09dm9pZCAwJiYobys9YCA9PiAke3IuZGVzdH1gKSxzdXBlcihcIlN5c3RlbUVycm9yXCIsdCxvKSx6cih0aGlzKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtbTzFdOnt2YWx1ZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0saW5mbzp7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0sZXJybm86e2dldCgpe3JldHVybiByLmVycm5vfSxzZXQ6aT0+e3IuZXJybm89aX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHN5c2NhbGw6e2dldCgpe3JldHVybiByLnN5c2NhbGx9LHNldDppPT57ci5zeXNjYWxsPWl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHIucGF0aCE9PXZvaWQgMCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYXRoXCIse2dldCgpe3JldHVybiByLnBhdGh9LHNldDppPT57ci5wYXRoPWl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksci5kZXN0IT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImRlc3RcIix7Z2V0KCl7cmV0dXJuIHIuZGVzdH0sc2V0Omk9PntyLmRlc3Q9aX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7dGhpcy5jb2RlfV06ICR7dGhpcy5tZXNzYWdlfWB9fTtkYz1nMShcIkVSUl9GU19FSVNESVJcIixcIlBhdGggaXMgYSBkaXJlY3RvcnlcIik7dWM9Y2xhc3MgZXh0ZW5kcyBqcntjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IG89TlIodCxyKTtzdXBlcihcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsYCR7b30uJHtJUihuKX1gKX19LEI9Y2xhc3MgZXh0ZW5kcyBHZXtjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IG89TlIodCxyKTtzdXBlcihcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsYCR7b30uJHtJUihuKX1gKX19O0IuUmFuZ2VFcnJvcj11YztmYz1jbGFzcyBleHRlbmRzIGpye2NvbnN0cnVjdG9yKHQscixuPVwiaXMgaW52YWxpZFwiKXtsZXQgbz10LmluY2x1ZGVzKFwiLlwiKT9cInByb3BlcnR5XCI6XCJhcmd1bWVudFwiLGk9b2Uocik7c3VwZXIoXCJFUlJfSU5WQUxJRF9BUkdfVkFMVUVcIixgVGhlICR7b30gJyR7dH0nICR7bn0uIFJlY2VpdmVkICR7aX1gKX19LGFlPWNsYXNzIGV4dGVuZHMgR2V7Y29uc3RydWN0b3IodCxyLG49XCJpcyBpbnZhbGlkXCIpe2xldCBvPXQuaW5jbHVkZXMoXCIuXCIpP1wicHJvcGVydHlcIjpcImFyZ3VtZW50XCIsaT1vZShyKTtzdXBlcihcIkVSUl9JTlZBTElEX0FSR19WQUxVRVwiLGBUaGUgJHtvfSAnJHt0fScgJHtufS4gUmVjZWl2ZWQgJHtpfWApfX07YWUuUmFuZ2VFcnJvcj1mYztVZT1jbGFzcyBleHRlbmRzIFJhbmdlRXJyb3J7Y29uc3RydWN0b3IocixuLG8saT0hMSl7SWUobiwnTWlzc2luZyBcInJhbmdlXCIgYXJndW1lbnQnKTtsZXQgcz1pP3I6YFRoZSB2YWx1ZSBvZiBcIiR7cn1cIiBpcyBvdXQgb2YgcmFuZ2UuYCxhO051bWJlci5pc0ludGVnZXIobykmJk1hdGguYWJzKG8pPjIqKjMyP2E9Z1IoU3RyaW5nKG8pKTp0eXBlb2Ygbz09XCJiaWdpbnRcIj8oYT1TdHJpbmcobyksKG8+Mm4qKjMybnx8bzwtKDJuKiozMm4pKSYmKGE9Z1IoYSkpLGErPVwiblwiKTphPW9lKG8pLHMrPWAgSXQgbXVzdCBiZSAke259LiBSZWNlaXZlZCAke2F9YDtzdXBlcihzKTt0aGlzLmNvZGU9XCJFUlJfT1VUX09GX1JBTkdFXCI7bGV0e25hbWU6Y309dGhpczt0aGlzLm5hbWU9YCR7Y30gWyR7dGhpcy5jb2RlfV1gLHRoaXMuc3RhY2ssdGhpcy5uYW1lPWN9fSxwYz1jbGFzcyBleHRlbmRzIGpye2NvbnN0cnVjdG9yKHQpe3N1cGVyKFwiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTXCIsdD9gXCIke3R9XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzYDpcIkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIil9fSxtaT1jbGFzcyBleHRlbmRzICRle2NvbnN0cnVjdG9yKHQpe3N1cGVyKFwiRVJSX0ZTX0lOVkFMSURfU1lNTElOS19UWVBFXCIsYFN5bWxpbmsgdHlwZSBtdXN0IGJlIG9uZSBvZiBcImRpclwiLCBcImZpbGVcIiwgb3IgXCJqdW5jdGlvblwiLiBSZWNlaXZlZCBcIiR7dH1cImApfX0sVm49Y2xhc3MgZXh0ZW5kcyBHZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcihcIkVSUl9JTlZBTElEX0NBTExCQUNLXCIsYENhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbi4gUmVjZWl2ZWQgJHtvZSh0KX1gKX19LFNpPWNsYXNzIGV4dGVuZHMgR2V7Y29uc3RydWN0b3IoKXtzdXBlcihcIkVSUl9JTlZBTElEX0NVUlNPUl9QT1NcIixcIkNhbm5vdCBzZXQgY3Vyc29yIHJvdyB3aXRob3V0IHNldHRpbmcgaXRzIGNvbHVtblwiKX19LGdpPWNsYXNzIGV4dGVuZHMgR2V7Y29uc3RydWN0b3IodCl7c3VwZXIoXCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9IT1NUXCIsYEZpbGUgVVJMIGhvc3QgbXVzdCBiZSBcImxvY2FsaG9zdFwiIG9yIGVtcHR5IG9uICR7dH1gKX19LEtyPWNsYXNzIGV4dGVuZHMgR2V7Y29uc3RydWN0b3IodCl7c3VwZXIoXCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9QQVRIXCIsYEZpbGUgVVJMIHBhdGggJHt0fWApfX0sQWk9Y2xhc3MgZXh0ZW5kcyBHZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcihcIkVSUl9JTlZBTElEX09QVF9WQUxVRV9FTkNPRElOR1wiLGBUaGUgdmFsdWUgXCIke3R9XCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwiZW5jb2RpbmdcImApfX0sUmM9Y2xhc3MgZXh0ZW5kcyAkZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKFwiRVJSX0lQQ19DSEFOTkVMX0NMT1NFRFwiLFwiQ2hhbm5lbCBjbG9zZWRcIil9fSxucj1jbGFzcyBleHRlbmRzICRle2NvbnN0cnVjdG9yKHQpe3N1cGVyKFwiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URURcIixgVGhlICR7dH0gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZGApfX0sWHI9Y2xhc3MgZXh0ZW5kcyBHZXtjb25zdHJ1Y3RvciguLi50KXtsZXQgcj1cIlRoZSBcIixuPXQubGVuZ3RoLG89aT0+YFwiJHtpfVwiYDtzd2l0Y2godD10Lm1hcChpPT5BcnJheS5pc0FycmF5KGkpP2kubWFwKG8pLmpvaW4oXCIgb3IgXCIpOm8oaSkpLG4pe2Nhc2UgMTpyKz1gJHt0WzBdfSBhcmd1bWVudGA7YnJlYWs7Y2FzZSAyOnIrPWAke3RbMF19IGFuZCAke3RbMV19IGFyZ3VtZW50c2A7YnJlYWs7ZGVmYXVsdDpyKz10LnNsaWNlKDAsbi0xKS5qb2luKFwiLCBcIikscis9YCwgYW5kICR7dFtuLTFdfSBhcmd1bWVudHNgO2JyZWFrfXN1cGVyKFwiRVJSX01JU1NJTkdfQVJHU1wiLGAke3J9IG11c3QgYmUgc3BlY2lmaWVkYCl9fSx4cj1jbGFzcyBleHRlbmRzICRle2NvbnN0cnVjdG9yKCl7c3VwZXIoXCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0tcIixcIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1wiKX19LEVjPWNsYXNzIGV4dGVuZHMganJ7Y29uc3RydWN0b3IodCxyLG49ITApe0llKHR5cGVvZiBuPT1cImJvb2xlYW5cIixcIlRoZSAnYWxsb3daZXJvJyBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi5cIik7bGV0IG89bj9cIj49XCI6XCI+XCI7c3VwZXIoXCJFUlJfU09DS0VUX0JBRF9QT1JUXCIsYCR7dH0gc2hvdWxkIGJlICR7b30gMCBhbmQgPCA2NTUzNi4gUmVjZWl2ZWQgJHtyfS5gKX19LHhpPWNsYXNzIGV4dGVuZHMgJGV7Y29uc3RydWN0b3IodCl7c3VwZXIoXCJFUlJfU1RSRUFNX0FMUkVBRFlfRklOSVNIRURcIixgQ2Fubm90IGNhbGwgJHt0fSBhZnRlciBhIHN0cmVhbSB3YXMgZmluaXNoZWRgKX19LE5pPWNsYXNzIGV4dGVuZHMgJGV7Y29uc3RydWN0b3IoKXtzdXBlcihcIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEVcIixcIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGVcIil9fSx5dD1jbGFzcyBleHRlbmRzICRle2NvbnN0cnVjdG9yKHQpe3N1cGVyKFwiRVJSX1NUUkVBTV9ERVNUUk9ZRURcIixgQ2Fubm90IGNhbGwgJHt0fSBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkYCl9fSxxcj1jbGFzcyBleHRlbmRzIEdle2NvbnN0cnVjdG9yKCl7c3VwZXIoXCJFUlJfU1RSRUFNX05VTExfVkFMVUVTXCIsXCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbVwiKX19LEh0PWNsYXNzIGV4dGVuZHMgJGV7Y29uc3RydWN0b3IoKXtzdXBlcihcIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFXCIsXCJQcmVtYXR1cmUgY2xvc2VcIil9fSxJaT1jbGFzcyBleHRlbmRzICRle2NvbnN0cnVjdG9yKCl7c3VwZXIoXCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GXCIsXCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRlwiKX19LHlpPWNsYXNzIGV4dGVuZHMgJGV7Y29uc3RydWN0b3IoKXtzdXBlcihcIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlRcIixcInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50XCIpfX0sVGk9Y2xhc3MgZXh0ZW5kcyAkZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKFwiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkRcIixcIndyaXRlIGFmdGVyIGVuZFwiKX19LERpPWNsYXNzIGV4dGVuZHMgJGV7Y29uc3RydWN0b3IodCl7c3VwZXIoXCJFUlJfVU5IQU5ETEVEX0VSUk9SXCIsYFVuaGFuZGxlZCBlcnJvci4gKCR7dH0pYCl9fSxRcj1jbGFzcyBleHRlbmRzIEdle2NvbnN0cnVjdG9yKHQpe3N1cGVyKFwiRVJSX1VOS05PV05fRU5DT0RJTkdcIixgVW5rbm93biBlbmNvZGluZzogJHt0fWApfX0sSG49Y2xhc3MgZXh0ZW5kcyBHZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcihcIkVSUl9VTktOT1dOX1NJR05BTFwiLGBVbmtub3duIHNpZ25hbDogJHt0fWApfX07JHQ9Y2xhc3MgZXh0ZW5kcyBHZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoXCJFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUVcIixgRXhwZWN0ZWQgJHt0fSB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSBcIiR7cn1cIiBmdW5jdGlvbiBidXQgZ290ICR7QTEobil9LmApfX0sYmk9Y2xhc3MgZXh0ZW5kcyBHZXtjb25zdHJ1Y3Rvcih0KXt0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07bGV0IHI9dC5sZW5ndGg9PT0yP2BvbmUgb2Ygc2NoZW1lICR7dFswXX0gb3IgJHt0WzFdfWA6YG9mIHNjaGVtZSAke3RbMF19YDtzdXBlcihcIkVSUl9JTlZBTElEX1VSTF9TQ0hFTUVcIixgVGhlIFVSTCBtdXN0IGJlICR7cn1gKX19LCRuPWNsYXNzIGV4dGVuZHMgJGV7Y29uc3RydWN0b3IodCl7bGV0IHI9YFRoaXMgaXMgY2F1c2VkIGJ5IGVpdGhlciBhIGJ1ZyBpbiBOb2RlLmpzIG9yIGluY29ycmVjdCB1c2FnZSBvZiBOb2RlLmpzIGludGVybmFscy5cblBsZWFzZSBvcGVuIGFuIGlzc3VlIHdpdGggdGhpcyBzdGFjayB0cmFjZSBhdCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzXG5gO3N1cGVyKFwiRVJSX0lOVEVSTkFMX0FTU0VSVElPTlwiLHQ9PT12b2lkIDA/cjpgJHt0fVxuJHtyfWApfX0sR249Y2xhc3MgZXh0ZW5kcyBPaXtjb25zdHJ1Y3Rvcih0KXtsZXQgcj1xP1wiRU5PRU5UXCI6XCJFTk9URElSXCIsbj17bWVzc2FnZTpcIm5vdCBhIGRpcmVjdG9yeVwiLHBhdGg6dCxzeXNjYWxsOlwicm1kaXJcIixjb2RlOnIsZXJybm86cT9oMTpkMX07c3VwZXIocixuLFwiUGF0aCBpcyBub3QgYSBkaXJlY3RvcnlcIil9fTtELkVSUl9JUENfQ0hBTk5FTF9DTE9TRUQ9UmM7RC5FUlJfSU5WQUxJRF9BUkdfVFlQRT1CO0QuRVJSX0lOVkFMSURfQVJHX1ZBTFVFPWFlO0QuRVJSX0lOVkFMSURfQ0FMTEJBQ0s9Vm47RC5FUlJfT1VUX09GX1JBTkdFPVVlO0QuRVJSX1NPQ0tFVF9CQURfUE9SVD1FYztELkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUz1wYztELkVSUl9VTktOT1dOX0VOQ09ESU5HPVFyO0lDPVgoZnVuY3Rpb24odCxyKXtsZXQgbj1uZXcgRXJyb3IodCk7cmV0dXJuIE9iamVjdC5hc3NpZ24obixyKSxufSl9KTt2YXIgWW49QSgoKT0+e30pO3ZhciBMaT1BKCgpPT57fSk7ZnVuY3Rpb24gZmUoZSl7aWYodHlwZW9mIGUhPVwic3RyaW5nXCIpdGhyb3cgbmV3IEIoXCJwYXRoXCIsW1wic3RyaW5nXCJdLGUpfWZ1bmN0aW9uIHdpKGUpe3JldHVybiBlPT09NDd9ZnVuY3Rpb24gVyhlKXtyZXR1cm4gd2koZSl8fGU9PT05Mn1mdW5jdGlvbiBHdChlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfWZ1bmN0aW9uIFpyKGUsdCxyLG4pe2xldCBvPVwiXCIsaT0wLHM9LTEsYT0wLGM7Zm9yKGxldCB1PTAsUj1lLmxlbmd0aDt1PD1SOysrdSl7aWYodTxSKWM9ZS5jaGFyQ29kZUF0KHUpO2Vsc2V7aWYobihjKSlicmVhaztjPTQ3fWlmKG4oYykpe2lmKCEocz09PXUtMXx8YT09PTEpKWlmKHMhPT11LTEmJmE9PT0yKXtpZihvLmxlbmd0aDwyfHxpIT09Mnx8by5jaGFyQ29kZUF0KG8ubGVuZ3RoLTEpIT09NDZ8fG8uY2hhckNvZGVBdChvLmxlbmd0aC0yKSE9PTQ2KXtpZihvLmxlbmd0aD4yKXtsZXQgZj1vLmxhc3RJbmRleE9mKHIpO2Y9PT0tMT8obz1cIlwiLGk9MCk6KG89by5zbGljZSgwLGYpLGk9by5sZW5ndGgtMS1vLmxhc3RJbmRleE9mKHIpKSxzPXUsYT0wO2NvbnRpbnVlfWVsc2UgaWYoby5sZW5ndGg9PT0yfHxvLmxlbmd0aD09PTEpe289XCJcIixpPTAscz11LGE9MDtjb250aW51ZX19dCYmKG8ubGVuZ3RoPjA/bys9YCR7cn0uLmA6bz1cIi4uXCIsaT0yKX1lbHNlIG8ubGVuZ3RoPjA/bys9citlLnNsaWNlKHMrMSx1KTpvPWUuc2xpY2UocysxLHUpLGk9dS1zLTE7cz11LGE9MH1lbHNlIGM9PT00NiYmYSE9PS0xPysrYTphPS0xfXJldHVybiBvfWZ1bmN0aW9uIFBpKGUsdCl7bGV0IHI9dC5kaXJ8fHQucm9vdCxuPXQuYmFzZXx8KHQubmFtZXx8XCJcIikrKHQuZXh0fHxcIlwiKTtyZXR1cm4gcj9yPT09dC5yb290P3IrbjpyK2UrbjpufWZ1bmN0aW9uIFVpKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoL1tcXHNdL2csdD0+RDFbdF0/P3QpfXZhciBEMSxoYz1BKCgpPT57TGkoKTtlZSgpO0QxPXtcIlx0XCI6XCIlMDlcIixcIlxcblwiOlwiJTBBXCIsXCJcXHZcIjpcIiUwQlwiLFwiXFxmXCI6XCIlMENcIixcIlxcclwiOlwiJTBEXCIsXCIgXCI6XCIlMjBcIn19KTt2YXIgU2M9e307Y2UoU2Mse2Jhc2VuYW1lOigpPT53UixkZWZhdWx0OigpPT5NaSxkZWxpbWl0ZXI6KCk9PlRSLGRpcm5hbWU6KCk9PkxSLGV4dG5hbWU6KCk9PlBSLGZvcm1hdDooKT0+VVIsZnJvbUZpbGVVcmw6KCk9PmtSLGlzQWJzb2x1dGU6KCk9Pm1jLGpvaW46KCk9PkRSLG5vcm1hbGl6ZTooKT0+T2MscGFyc2U6KCk9Pk1SLHJlbGF0aXZlOigpPT5iUixyZXNvbHZlOigpPT5qbixzZXA6KCk9PnlSLHRvRmlsZVVybDooKT0+QlIsdG9OYW1lc3BhY2VkUGF0aDooKT0+Q1J9KTtmdW5jdGlvbiBqbiguLi5lKXtsZXQgdD1cIlwiLHI9XCJcIixuPSExO2ZvcihsZXQgbz1lLmxlbmd0aC0xO28+PS0xO28tLSl7bGV0IGkse0Rlbm86c309Z2xvYmFsVGhpcztpZihvPj0wKWk9ZVtvXTtlbHNlIGlmKHQpe2lmKHR5cGVvZiBzPy5lbnY/LmdldCE9XCJmdW5jdGlvblwifHx0eXBlb2Ygcz8uY3dkIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlc29sdmVkIGEgcmVsYXRpdmUgcGF0aCB3aXRob3V0IGEgQ1dELlwiKTtpPXMuY3dkKCksKGk9PT12b2lkIDB8fGkuc2xpY2UoMCwzKS50b0xvd2VyQ2FzZSgpIT09YCR7dC50b0xvd2VyQ2FzZSgpfVxcXFxgKSYmKGk9YCR7dH1cXFxcYCl9ZWxzZXtpZih0eXBlb2Ygcz8uY3dkIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlc29sdmVkIGEgZHJpdmUtbGV0dGVyLWxlc3MgcGF0aCB3aXRob3V0IGEgQ1dELlwiKTtpPXMuY3dkKCl9ZmUoaSk7bGV0IGE9aS5sZW5ndGg7aWYoYT09PTApY29udGludWU7bGV0IGM9MCx1PVwiXCIsUj0hMSxmPWkuY2hhckNvZGVBdCgwKTtpZihhPjEpaWYoVyhmKSlpZihSPSEwLFcoaS5jaGFyQ29kZUF0KDEpKSl7bGV0IHA9MixsPXA7Zm9yKDtwPGEmJiFXKGkuY2hhckNvZGVBdChwKSk7KytwKTtpZihwPGEmJnAhPT1sKXtsZXQgXz1pLnNsaWNlKGwscCk7Zm9yKGw9cDtwPGEmJlcoaS5jaGFyQ29kZUF0KHApKTsrK3ApO2lmKHA8YSYmcCE9PWwpe2ZvcihsPXA7cDxhJiYhVyhpLmNoYXJDb2RlQXQocCkpOysrcCk7cD09PWE/KHU9YFxcXFxcXFxcJHtffVxcXFwke2kuc2xpY2UobCl9YCxjPXApOnAhPT1sJiYodT1gXFxcXFxcXFwke199XFxcXCR7aS5zbGljZShsLHApfWAsYz1wKX19fWVsc2UgYz0xO2Vsc2UgR3QoZikmJmkuY2hhckNvZGVBdCgxKT09PTU4JiYodT1pLnNsaWNlKDAsMiksYz0yLGE+MiYmVyhpLmNoYXJDb2RlQXQoMikpJiYoUj0hMCxjPTMpKTtlbHNlIFcoZikmJihjPTEsUj0hMCk7aWYoISh1Lmxlbmd0aD4wJiZ0Lmxlbmd0aD4wJiZ1LnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkpJiYodC5sZW5ndGg9PT0wJiZ1Lmxlbmd0aD4wJiYodD11KSxufHwocj1gJHtpLnNsaWNlKGMpfVxcXFwke3J9YCxuPVIpLG4mJnQubGVuZ3RoPjApKWJyZWFrfXJldHVybiByPVpyKHIsIW4sXCJcXFxcXCIsVyksdCsobj9cIlxcXFxcIjpcIlwiKStyfHxcIi5cIn1mdW5jdGlvbiBPYyhlKXtmZShlKTtsZXQgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm5cIi5cIjtsZXQgcj0wLG4sbz0hMSxpPWUuY2hhckNvZGVBdCgwKTtpZih0PjEpaWYoVyhpKSlpZihvPSEwLFcoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGE9MixjPWE7Zm9yKDthPHQmJiFXKGUuY2hhckNvZGVBdChhKSk7KythKTtpZihhPHQmJmEhPT1jKXtsZXQgdT1lLnNsaWNlKGMsYSk7Zm9yKGM9YTthPHQmJlcoZS5jaGFyQ29kZUF0KGEpKTsrK2EpO2lmKGE8dCYmYSE9PWMpe2ZvcihjPWE7YTx0JiYhVyhlLmNoYXJDb2RlQXQoYSkpOysrYSk7aWYoYT09PXQpcmV0dXJuYFxcXFxcXFxcJHt1fVxcXFwke2Uuc2xpY2UoYyl9XFxcXGA7YSE9PWMmJihuPWBcXFxcXFxcXCR7dX1cXFxcJHtlLnNsaWNlKGMsYSl9YCxyPWEpfX19ZWxzZSByPTE7ZWxzZSBHdChpKSYmZS5jaGFyQ29kZUF0KDEpPT09NTgmJihuPWUuc2xpY2UoMCwyKSxyPTIsdD4yJiZXKGUuY2hhckNvZGVBdCgyKSkmJihvPSEwLHI9MykpO2Vsc2UgaWYoVyhpKSlyZXR1cm5cIlxcXFxcIjtsZXQgcztyZXR1cm4gcjx0P3M9WnIoZS5zbGljZShyKSwhbyxcIlxcXFxcIixXKTpzPVwiXCIscy5sZW5ndGg9PT0wJiYhbyYmKHM9XCIuXCIpLHMubGVuZ3RoPjAmJlcoZS5jaGFyQ29kZUF0KHQtMSkpJiYocys9XCJcXFxcXCIpLG49PT12b2lkIDA/bz9zLmxlbmd0aD4wP2BcXFxcJHtzfWA6XCJcXFxcXCI6cy5sZW5ndGg+MD9zOlwiXCI6bz9zLmxlbmd0aD4wP2Ake259XFxcXCR7c31gOmAke259XFxcXGA6cy5sZW5ndGg+MD9uK3M6bn1mdW5jdGlvbiBtYyhlKXtmZShlKTtsZXQgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4hMTtsZXQgcj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIFcocik/ITA6ISEoR3QocikmJnQ+MiYmZS5jaGFyQ29kZUF0KDEpPT09NTgmJlcoZS5jaGFyQ29kZUF0KDIpKSl9ZnVuY3Rpb24gRFIoLi4uZSl7bGV0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuXCIuXCI7bGV0IHIsbj1udWxsO2ZvcihsZXQgcz0wO3M8dDsrK3Mpe2xldCBhPWVbc107ZmUoYSksYS5sZW5ndGg+MCYmKHI9PT12b2lkIDA/cj1uPWE6cis9YFxcXFwke2F9YCl9aWYocj09PXZvaWQgMClyZXR1cm5cIi5cIjtsZXQgbz0hMCxpPTA7aWYoSWUobiE9bnVsbCksVyhuLmNoYXJDb2RlQXQoMCkpKXsrK2k7bGV0IHM9bi5sZW5ndGg7cz4xJiZXKG4uY2hhckNvZGVBdCgxKSkmJigrK2kscz4yJiYoVyhuLmNoYXJDb2RlQXQoMikpPysraTpvPSExKSl9aWYobyl7Zm9yKDtpPHIubGVuZ3RoJiZXKHIuY2hhckNvZGVBdChpKSk7KytpKTtpPj0yJiYocj1gXFxcXCR7ci5zbGljZShpKX1gKX1yZXR1cm4gT2Mocil9ZnVuY3Rpb24gYlIoZSx0KXtpZihmZShlKSxmZSh0KSxlPT09dClyZXR1cm5cIlwiO2xldCByPWpuKGUpLG49am4odCk7aWYocj09PW58fChlPXIudG9Mb3dlckNhc2UoKSx0PW4udG9Mb3dlckNhc2UoKSxlPT09dCkpcmV0dXJuXCJcIjtsZXQgbz0wLGk9ZS5sZW5ndGg7Zm9yKDtvPGkmJmUuY2hhckNvZGVBdChvKT09PTkyOysrbyk7Zm9yKDtpLTE+byYmZS5jaGFyQ29kZUF0KGktMSk9PT05MjstLWkpO2xldCBzPWktbyxhPTAsYz10Lmxlbmd0aDtmb3IoO2E8YyYmdC5jaGFyQ29kZUF0KGEpPT09OTI7KythKTtmb3IoO2MtMT5hJiZ0LmNoYXJDb2RlQXQoYy0xKT09PTkyOy0tYyk7bGV0IHU9Yy1hLFI9czx1P3M6dSxmPS0xLHA9MDtmb3IoO3A8PVI7KytwKXtpZihwPT09Uil7aWYodT5SKXtpZih0LmNoYXJDb2RlQXQoYStwKT09PTkyKXJldHVybiBuLnNsaWNlKGErcCsxKTtpZihwPT09MilyZXR1cm4gbi5zbGljZShhK3ApfXM+UiYmKGUuY2hhckNvZGVBdChvK3ApPT09OTI/Zj1wOnA9PT0yJiYoZj0zKSk7YnJlYWt9bGV0IF89ZS5jaGFyQ29kZUF0KG8rcCksRT10LmNoYXJDb2RlQXQoYStwKTtpZihfIT09RSlicmVhaztfPT09OTImJihmPXApfWlmKHAhPT1SJiZmPT09LTEpcmV0dXJuIG47bGV0IGw9XCJcIjtmb3IoZj09PS0xJiYoZj0wKSxwPW8rZisxO3A8PWk7KytwKShwPT09aXx8ZS5jaGFyQ29kZUF0KHApPT09OTIpJiYobC5sZW5ndGg9PT0wP2wrPVwiLi5cIjpsKz1cIlxcXFwuLlwiKTtyZXR1cm4gbC5sZW5ndGg+MD9sK24uc2xpY2UoYStmLGMpOihhKz1mLG4uY2hhckNvZGVBdChhKT09PTkyJiYrK2Esbi5zbGljZShhLGMpKX1mdW5jdGlvbiBDUihlKXtpZih0eXBlb2YgZSE9XCJzdHJpbmdcIilyZXR1cm4gZTtpZihlLmxlbmd0aD09PTApcmV0dXJuXCJcIjtsZXQgdD1qbihlKTtpZih0Lmxlbmd0aD49Myl7aWYodC5jaGFyQ29kZUF0KDApPT09OTIpe2lmKHQuY2hhckNvZGVBdCgxKT09PTkyKXtsZXQgcj10LmNoYXJDb2RlQXQoMik7aWYociE9PTYzJiZyIT09NDYpcmV0dXJuYFxcXFxcXFxcP1xcXFxVTkNcXFxcJHt0LnNsaWNlKDIpfWB9fWVsc2UgaWYoR3QodC5jaGFyQ29kZUF0KDApKSYmdC5jaGFyQ29kZUF0KDEpPT09NTgmJnQuY2hhckNvZGVBdCgyKT09PTkyKXJldHVybmBcXFxcXFxcXD9cXFxcJHt0fWB9cmV0dXJuIGV9ZnVuY3Rpb24gTFIoZSl7ZmUoZSk7bGV0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuXCIuXCI7bGV0IHI9LTEsbj0tMSxvPSEwLGk9MCxzPWUuY2hhckNvZGVBdCgwKTtpZih0PjEpaWYoVyhzKSl7aWYocj1pPTEsVyhlLmNoYXJDb2RlQXQoMSkpKXtsZXQgYT0yLGM9YTtmb3IoO2E8dCYmIVcoZS5jaGFyQ29kZUF0KGEpKTsrK2EpO2lmKGE8dCYmYSE9PWMpe2ZvcihjPWE7YTx0JiZXKGUuY2hhckNvZGVBdChhKSk7KythKTtpZihhPHQmJmEhPT1jKXtmb3IoYz1hO2E8dCYmIVcoZS5jaGFyQ29kZUF0KGEpKTsrK2EpO2lmKGE9PT10KXJldHVybiBlO2EhPT1jJiYocj1pPWErMSl9fX19ZWxzZSBHdChzKSYmZS5jaGFyQ29kZUF0KDEpPT09NTgmJihyPWk9Mix0PjImJlcoZS5jaGFyQ29kZUF0KDIpKSYmKHI9aT0zKSk7ZWxzZSBpZihXKHMpKXJldHVybiBlO2ZvcihsZXQgYT10LTE7YT49aTstLWEpaWYoVyhlLmNoYXJDb2RlQXQoYSkpKXtpZighbyl7bj1hO2JyZWFrfX1lbHNlIG89ITE7aWYobj09PS0xKXtpZihyPT09LTEpcmV0dXJuXCIuXCI7bj1yfXJldHVybiBlLnNsaWNlKDAsbil9ZnVuY3Rpb24gd1IoZSx0PVwiXCIpe2lmKHQhPT12b2lkIDAmJnR5cGVvZiB0IT1cInN0cmluZ1wiKXRocm93IG5ldyBCKFwiZXh0XCIsW1wic3RyaW5nXCJdLHQpO2ZlKGUpO2xldCByPTAsbj0tMSxvPSEwLGk7aWYoZS5sZW5ndGg+PTIpe2xldCBzPWUuY2hhckNvZGVBdCgwKTtHdChzKSYmZS5jaGFyQ29kZUF0KDEpPT09NTgmJihyPTIpfWlmKHQhPT12b2lkIDAmJnQubGVuZ3RoPjAmJnQubGVuZ3RoPD1lLmxlbmd0aCl7aWYodC5sZW5ndGg9PT1lLmxlbmd0aCYmdD09PWUpcmV0dXJuXCJcIjtsZXQgcz10Lmxlbmd0aC0xLGE9LTE7Zm9yKGk9ZS5sZW5ndGgtMTtpPj1yOy0taSl7bGV0IGM9ZS5jaGFyQ29kZUF0KGkpO2lmKFcoYykpe2lmKCFvKXtyPWkrMTticmVha319ZWxzZSBhPT09LTEmJihvPSExLGE9aSsxKSxzPj0wJiYoYz09PXQuY2hhckNvZGVBdChzKT8tLXM9PT0tMSYmKG49aSk6KHM9LTEsbj1hKSl9cmV0dXJuIHI9PT1uP249YTpuPT09LTEmJihuPWUubGVuZ3RoKSxlLnNsaWNlKHIsbil9ZWxzZXtmb3IoaT1lLmxlbmd0aC0xO2k+PXI7LS1pKWlmKFcoZS5jaGFyQ29kZUF0KGkpKSl7aWYoIW8pe3I9aSsxO2JyZWFrfX1lbHNlIG49PT0tMSYmKG89ITEsbj1pKzEpO3JldHVybiBuPT09LTE/XCJcIjplLnNsaWNlKHIsbil9fWZ1bmN0aW9uIFBSKGUpe2ZlKGUpO2xldCB0PTAscj0tMSxuPTAsbz0tMSxpPSEwLHM9MDtlLmxlbmd0aD49MiYmZS5jaGFyQ29kZUF0KDEpPT09NTgmJkd0KGUuY2hhckNvZGVBdCgwKSkmJih0PW49Mik7Zm9yKGxldCBhPWUubGVuZ3RoLTE7YT49dDstLWEpe2xldCBjPWUuY2hhckNvZGVBdChhKTtpZihXKGMpKXtpZighaSl7bj1hKzE7YnJlYWt9Y29udGludWV9bz09PS0xJiYoaT0hMSxvPWErMSksYz09PTQ2P3I9PT0tMT9yPWE6cyE9PTEmJihzPTEpOnIhPT0tMSYmKHM9LTEpfXJldHVybiByPT09LTF8fG89PT0tMXx8cz09PTB8fHM9PT0xJiZyPT09by0xJiZyPT09bisxP1wiXCI6ZS5zbGljZShyLG8pfWZ1bmN0aW9uIFVSKGUpe2lmKGU9PT1udWxsfHx0eXBlb2YgZSE9XCJvYmplY3RcIil0aHJvdyBuZXcgQihcInBhdGhPYmplY3RcIixbXCJPYmplY3RcIl0sZSk7cmV0dXJuIFBpKFwiXFxcXFwiLGUpfWZ1bmN0aW9uIE1SKGUpe2ZlKGUpO2xldCB0PXtyb290OlwiXCIsZGlyOlwiXCIsYmFzZTpcIlwiLGV4dDpcIlwiLG5hbWU6XCJcIn0scj1lLmxlbmd0aDtpZihyPT09MClyZXR1cm4gdDtsZXQgbj0wLG89ZS5jaGFyQ29kZUF0KDApO2lmKHI+MSl7aWYoVyhvKSl7aWYobj0xLFcoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGY9MixwPWY7Zm9yKDtmPHImJiFXKGUuY2hhckNvZGVBdChmKSk7KytmKTtpZihmPHImJmYhPT1wKXtmb3IocD1mO2Y8ciYmVyhlLmNoYXJDb2RlQXQoZikpOysrZik7aWYoZjxyJiZmIT09cCl7Zm9yKHA9ZjtmPHImJiFXKGUuY2hhckNvZGVBdChmKSk7KytmKTtmPT09cj9uPWY6ZiE9PXAmJihuPWYrMSl9fX19ZWxzZSBpZihHdChvKSYmZS5jaGFyQ29kZUF0KDEpPT09NTgpaWYobj0yLHI+Mil7aWYoVyhlLmNoYXJDb2RlQXQoMikpKXtpZihyPT09MylyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtuPTN9fWVsc2UgcmV0dXJuIHQucm9vdD10LmRpcj1lLHR9ZWxzZSBpZihXKG8pKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O24+MCYmKHQucm9vdD1lLnNsaWNlKDAsbikpO2xldCBpPS0xLHM9bixhPS0xLGM9ITAsdT1lLmxlbmd0aC0xLFI9MDtmb3IoO3U+PW47LS11KXtpZihvPWUuY2hhckNvZGVBdCh1KSxXKG8pKXtpZighYyl7cz11KzE7YnJlYWt9Y29udGludWV9YT09PS0xJiYoYz0hMSxhPXUrMSksbz09PTQ2P2k9PT0tMT9pPXU6UiE9PTEmJihSPTEpOmkhPT0tMSYmKFI9LTEpfXJldHVybiBpPT09LTF8fGE9PT0tMXx8Uj09PTB8fFI9PT0xJiZpPT09YS0xJiZpPT09cysxP2EhPT0tMSYmKHQuYmFzZT10Lm5hbWU9ZS5zbGljZShzLGEpKToodC5uYW1lPWUuc2xpY2UocyxpKSx0LmJhc2U9ZS5zbGljZShzLGEpLHQuZXh0PWUuc2xpY2UoaSxhKSkscz4wJiZzIT09bj90LmRpcj1lLnNsaWNlKDAscy0xKTp0LmRpcj10LnJvb3QsdH1mdW5jdGlvbiBrUihlKXtpZihlPWUgaW5zdGFuY2VvZiBVUkw/ZTpuZXcgVVJMKGUpLGUucHJvdG9jb2whPVwiZmlsZTpcIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBhIGZpbGUgVVJMLlwiKTtsZXQgdD1kZWNvZGVVUklDb21wb25lbnQoZS5wYXRobmFtZS5yZXBsYWNlKC9cXC8vZyxcIlxcXFxcIikucmVwbGFjZSgvJSg/IVswLTlBLUZhLWZdezJ9KS9nLFwiJTI1XCIpKS5yZXBsYWNlKC9eXFxcXCooW0EtWmEtel06KShcXFxcfCQpLyxcIiQxXFxcXFwiKTtyZXR1cm4gZS5ob3N0bmFtZSE9XCJcIiYmKHQ9YFxcXFxcXFxcJHtlLmhvc3RuYW1lfSR7dH1gKSx0fWZ1bmN0aW9uIEJSKGUpe2lmKCFtYyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLlwiKTtsZXRbLHQscl09ZS5tYXRjaCgvXig/OlsvXFxcXF17Mn0oW14vXFxcXF0rKSg/PVsvXFxcXF0oPzpbXi9cXFxcXXwkKSkpPyguKikvKSxuPW5ldyBVUkwoXCJmaWxlOi8vL1wiKTtpZihuLnBhdGhuYW1lPVVpKHIucmVwbGFjZSgvJS9nLFwiJTI1XCIpKSx0IT1udWxsJiZ0IT1cImxvY2FsaG9zdFwiJiYobi5ob3N0bmFtZT10LCFuLmhvc3RuYW1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBob3N0bmFtZS5cIik7cmV0dXJuIG59dmFyIHlSLFRSLE1pLGdjPUEoKCk9PntMaSgpO2VlKCk7aGMoKTtlcigpO3lSPVwiXFxcXFwiLFRSPVwiO1wiO01pPXtiYXNlbmFtZTp3UixkZWxpbWl0ZXI6VFIsZGlybmFtZTpMUixleHRuYW1lOlBSLGZvcm1hdDpVUixmcm9tRmlsZVVybDprUixpc0Fic29sdXRlOm1jLGpvaW46RFIsbm9ybWFsaXplOk9jLHBhcnNlOk1SLHJlbGF0aXZlOmJSLHJlc29sdmU6am4sc2VwOnlSLHRvRmlsZVVybDpCUix0b05hbWVzcGFjZWRQYXRoOkNSfX0pO3ZhciBOYz17fTtjZShOYyx7YmFzZW5hbWU6KCk9PkdSLGRlZmF1bHQ6KCk9PkJpLGRlbGltaXRlcjooKT0+dlIsZGlybmFtZTooKT0+JFIsZXh0bmFtZTooKT0+WVIsZm9ybWF0OigpPT5qUixmcm9tRmlsZVVybDooKT0+WFIsaXNBYnNvbHV0ZTooKT0+eGMsam9pbjooKT0+V1Isbm9ybWFsaXplOigpPT5BYyxwYXJzZTooKT0+S1IscmVsYXRpdmU6KCk9PlZSLHJlc29sdmU6KCk9PmtpLHNlcDooKT0+RlIsdG9GaWxlVXJsOigpPT5xUix0b05hbWVzcGFjZWRQYXRoOigpPT5IUn0pO2Z1bmN0aW9uIGtpKC4uLmUpe2xldCB0PVwiXCIscj0hMTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0tMSYmIXI7bi0tKXtsZXQgbztpZihuPj0wKW89ZVtuXTtlbHNle2xldHtEZW5vOml9PWdsb2JhbFRoaXM7aWYodHlwZW9mIGk/LmN3ZCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJSZXNvbHZlZCBhIHJlbGF0aXZlIHBhdGggd2l0aG91dCBhIENXRC5cIik7bz1pLmN3ZCgpfWZlKG8pLG8ubGVuZ3RoIT09MCYmKHQ9YCR7b30vJHt0fWAscj1vLmNoYXJDb2RlQXQoMCk9PT00Nyl9cmV0dXJuIHQ9WnIodCwhcixcIi9cIix3aSkscj90Lmxlbmd0aD4wP2AvJHt0fWA6XCIvXCI6dC5sZW5ndGg+MD90OlwiLlwifWZ1bmN0aW9uIEFjKGUpe2lmKGZlKGUpLGUubGVuZ3RoPT09MClyZXR1cm5cIi5cIjtsZXQgdD1lLmNoYXJDb2RlQXQoMCk9PT00NyxyPWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKT09PTQ3O3JldHVybiBlPVpyKGUsIXQsXCIvXCIsd2kpLGUubGVuZ3RoPT09MCYmIXQmJihlPVwiLlwiKSxlLmxlbmd0aD4wJiZyJiYoZSs9XCIvXCIpLHQ/YC8ke2V9YDplfWZ1bmN0aW9uIHhjKGUpe3JldHVybiBmZShlKSxlLmxlbmd0aD4wJiZlLmNoYXJDb2RlQXQoMCk9PT00N31mdW5jdGlvbiBXUiguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuXCIuXCI7bGV0IHQ7Zm9yKGxldCByPTAsbj1lLmxlbmd0aDtyPG47KytyKXtsZXQgbz1lW3JdO2ZlKG8pLG8ubGVuZ3RoPjAmJih0P3QrPWAvJHtvfWA6dD1vKX1yZXR1cm4gdD9BYyh0KTpcIi5cIn1mdW5jdGlvbiBWUihlLHQpe2lmKGZlKGUpLGZlKHQpLGU9PT10fHwoZT1raShlKSx0PWtpKHQpLGU9PT10KSlyZXR1cm5cIlwiO2xldCByPTEsbj1lLmxlbmd0aDtmb3IoO3I8biYmZS5jaGFyQ29kZUF0KHIpPT09NDc7KytyKTtsZXQgbz1uLXIsaT0xLHM9dC5sZW5ndGg7Zm9yKDtpPHMmJnQuY2hhckNvZGVBdChpKT09PTQ3OysraSk7bGV0IGE9cy1pLGM9bzxhP286YSx1PS0xLFI9MDtmb3IoO1I8PWM7KytSKXtpZihSPT09Yyl7aWYoYT5jKXtpZih0LmNoYXJDb2RlQXQoaStSKT09PTQ3KXJldHVybiB0LnNsaWNlKGkrUisxKTtpZihSPT09MClyZXR1cm4gdC5zbGljZShpK1IpfWVsc2Ugbz5jJiYoZS5jaGFyQ29kZUF0KHIrUik9PT00Nz91PVI6Uj09PTAmJih1PTApKTticmVha31sZXQgcD1lLmNoYXJDb2RlQXQocitSKSxsPXQuY2hhckNvZGVBdChpK1IpO2lmKHAhPT1sKWJyZWFrO3A9PT00NyYmKHU9Uil9bGV0IGY9XCJcIjtmb3IoUj1yK3UrMTtSPD1uOysrUikoUj09PW58fGUuY2hhckNvZGVBdChSKT09PTQ3KSYmKGYubGVuZ3RoPT09MD9mKz1cIi4uXCI6Zis9XCIvLi5cIik7cmV0dXJuIGYubGVuZ3RoPjA/Zit0LnNsaWNlKGkrdSk6KGkrPXUsdC5jaGFyQ29kZUF0KGkpPT09NDcmJisraSx0LnNsaWNlKGkpKX1mdW5jdGlvbiBIUihlKXtyZXR1cm4gZX1mdW5jdGlvbiAkUihlKXtpZihmZShlKSxlLmxlbmd0aD09PTApcmV0dXJuXCIuXCI7bGV0IHQ9ZS5jaGFyQ29kZUF0KDApPT09NDcscj0tMSxuPSEwO2ZvcihsZXQgbz1lLmxlbmd0aC0xO28+PTE7LS1vKWlmKGUuY2hhckNvZGVBdChvKT09PTQ3KXtpZighbil7cj1vO2JyZWFrfX1lbHNlIG49ITE7cmV0dXJuIHI9PT0tMT90P1wiL1wiOlwiLlwiOnQmJnI9PT0xP1wiLy9cIjplLnNsaWNlKDAscil9ZnVuY3Rpb24gR1IoZSx0PVwiXCIpe2lmKHQhPT12b2lkIDAmJnR5cGVvZiB0IT1cInN0cmluZ1wiKXRocm93IG5ldyBCKFwiZXh0XCIsW1wic3RyaW5nXCJdLHQpO2ZlKGUpO2xldCByPTAsbj0tMSxvPSEwLGk7aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0Lmxlbmd0aD09PWUubGVuZ3RoJiZ0PT09ZSlyZXR1cm5cIlwiO2xldCBzPXQubGVuZ3RoLTEsYT0tMTtmb3IoaT1lLmxlbmd0aC0xO2k+PTA7LS1pKXtsZXQgYz1lLmNoYXJDb2RlQXQoaSk7aWYoYz09PTQ3KXtpZighbyl7cj1pKzE7YnJlYWt9fWVsc2UgYT09PS0xJiYobz0hMSxhPWkrMSkscz49MCYmKGM9PT10LmNoYXJDb2RlQXQocyk/LS1zPT09LTEmJihuPWkpOihzPS0xLG49YSkpfXJldHVybiByPT09bj9uPWE6bj09PS0xJiYobj1lLmxlbmd0aCksZS5zbGljZShyLG4pfWVsc2V7Zm9yKGk9ZS5sZW5ndGgtMTtpPj0wOy0taSlpZihlLmNoYXJDb2RlQXQoaSk9PT00Nyl7aWYoIW8pe3I9aSsxO2JyZWFrfX1lbHNlIG49PT0tMSYmKG89ITEsbj1pKzEpO3JldHVybiBuPT09LTE/XCJcIjplLnNsaWNlKHIsbil9fWZ1bmN0aW9uIFlSKGUpe2ZlKGUpO2xldCB0PS0xLHI9MCxuPS0xLG89ITAsaT0wO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PTA7LS1zKXtsZXQgYT1lLmNoYXJDb2RlQXQocyk7aWYoYT09PTQ3KXtpZighbyl7cj1zKzE7YnJlYWt9Y29udGludWV9bj09PS0xJiYobz0hMSxuPXMrMSksYT09PTQ2P3Q9PT0tMT90PXM6aSE9PTEmJihpPTEpOnQhPT0tMSYmKGk9LTEpfXJldHVybiB0PT09LTF8fG49PT0tMXx8aT09PTB8fGk9PT0xJiZ0PT09bi0xJiZ0PT09cisxP1wiXCI6ZS5zbGljZSh0LG4pfWZ1bmN0aW9uIGpSKGUpe2lmKGU9PT1udWxsfHx0eXBlb2YgZSE9XCJvYmplY3RcIil0aHJvdyBuZXcgQihcInBhdGhPYmplY3RcIixbXCJPYmplY3RcIl0sZSk7cmV0dXJuIFBpKFwiL1wiLGUpfWZ1bmN0aW9uIEtSKGUpe2ZlKGUpO2xldCB0PXtyb290OlwiXCIsZGlyOlwiXCIsYmFzZTpcIlwiLGV4dDpcIlwiLG5hbWU6XCJcIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2xldCByPWUuY2hhckNvZGVBdCgwKT09PTQ3LG47cj8odC5yb290PVwiL1wiLG49MSk6bj0wO2xldCBvPS0xLGk9MCxzPS0xLGE9ITAsYz1lLmxlbmd0aC0xLHU9MDtmb3IoO2M+PW47LS1jKXtsZXQgUj1lLmNoYXJDb2RlQXQoYyk7aWYoUj09PTQ3KXtpZighYSl7aT1jKzE7YnJlYWt9Y29udGludWV9cz09PS0xJiYoYT0hMSxzPWMrMSksUj09PTQ2P289PT0tMT9vPWM6dSE9PTEmJih1PTEpOm8hPT0tMSYmKHU9LTEpfXJldHVybiBvPT09LTF8fHM9PT0tMXx8dT09PTB8fHU9PT0xJiZvPT09cy0xJiZvPT09aSsxP3MhPT0tMSYmKGk9PT0wJiZyP3QuYmFzZT10Lm5hbWU9ZS5zbGljZSgxLHMpOnQuYmFzZT10Lm5hbWU9ZS5zbGljZShpLHMpKTooaT09PTAmJnI/KHQubmFtZT1lLnNsaWNlKDEsbyksdC5iYXNlPWUuc2xpY2UoMSxzKSk6KHQubmFtZT1lLnNsaWNlKGksbyksdC5iYXNlPWUuc2xpY2UoaSxzKSksdC5leHQ9ZS5zbGljZShvLHMpKSxpPjA/dC5kaXI9ZS5zbGljZSgwLGktMSk6ciYmKHQuZGlyPVwiL1wiKSx0fWZ1bmN0aW9uIFhSKGUpe2lmKGU9ZSBpbnN0YW5jZW9mIFVSTD9lOm5ldyBVUkwoZSksZS5wcm90b2NvbCE9XCJmaWxlOlwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGEgZmlsZSBVUkwuXCIpO3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZS5wYXRobmFtZS5yZXBsYWNlKC8lKD8hWzAtOUEtRmEtZl17Mn0pL2csXCIlMjVcIikpfWZ1bmN0aW9uIHFSKGUpe2lmKCF4YyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLlwiKTtsZXQgdD1uZXcgVVJMKFwiZmlsZTovLy9cIik7cmV0dXJuIHQucGF0aG5hbWU9VWkoZS5yZXBsYWNlKC8lL2csXCIlMjVcIikucmVwbGFjZSgvXFxcXC9nLFwiJTVDXCIpKSx0fXZhciBGUix2UixCaSxJYz1BKCgpPT57TGkoKTtlZSgpO2hjKCk7RlI9XCIvXCIsdlI9XCI6XCI7Qmk9e2Jhc2VuYW1lOkdSLGRlbGltaXRlcjp2UixkaXJuYW1lOiRSLGV4dG5hbWU6WVIsZm9ybWF0OmpSLGZyb21GaWxlVXJsOlhSLGlzQWJzb2x1dGU6eGMsam9pbjpXUixub3JtYWxpemU6QWMscGFyc2U6S1IscmVsYXRpdmU6VlIscmVzb2x2ZTpraSxzZXA6RlIsdG9GaWxlVXJsOnFSLHRvTmFtZXNwYWNlZFBhdGg6SFJ9fSk7dmFyIEpyLEZpLHZpPUEoKCk9PntQZSgpO0pyPXE/XCJcXFxcXCI6XCIvXCIsRmk9cT8vW1xcXFwvXSsvOi9cXC8rL30pO2Z1bmN0aW9uIEMxKGUsdD1Kcil7bGV0W3I9XCJcIiwuLi5uXT1lO2lmKHI9PT1cIlwifHxuLmxlbmd0aD09PTApcmV0dXJuIHIuc3Vic3RyaW5nKDAsci5sYXN0SW5kZXhPZih0KSsxKTtsZXQgbz1yLnNwbGl0KHQpLGk9by5sZW5ndGg7Zm9yKGxldCBhIG9mIG4pe2xldCBjPWEuc3BsaXQodCk7Zm9yKGxldCB1PTA7dTxpO3UrKyljW3VdIT09b1t1XSYmKGk9dSk7aWYoaT09PTApcmV0dXJuXCJcIn1sZXQgcz1vLnNsaWNlKDAsaSkuam9pbih0KTtyZXR1cm4gcy5lbmRzV2l0aCh0KT9zOmAke3N9JHt0fWB9dmFyIFFSPUEoKCk9Pnt2aSgpfSk7dmFyIHpSPUEoKCk9Pnt9KTtmdW5jdGlvbiBVMShlLHtleHRlbmRlZDp0PSEwLGdsb2JzdGFyOnI9ITAsb3M6bj1IZSxjYXNlSW5zZW5zaXRpdmU6bz0hMX09e30pe2lmKGU9PVwiXCIpcmV0dXJuLyg/ISkvO2xldCBpPW49PVwid2luZG93c1wiP1wiKD86XFxcXFxcXFx8LykrXCI6XCIvK1wiLHM9bj09XCJ3aW5kb3dzXCI/XCIoPzpcXFxcXFxcXHwvKSpcIjpcIi8qXCIsYT1uPT1cIndpbmRvd3NcIj9bXCJcXFxcXCIsXCIvXCJdOltcIi9cIl0sYz1uPT1cIndpbmRvd3NcIj9cIig/OlteXFxcXFxcXFwvXSooPzpcXFxcXFxcXHwvfCQpKykqXCI6XCIoPzpbXi9dKig/Oi98JCkrKSpcIix1PW49PVwid2luZG93c1wiP1wiW15cXFxcXFxcXC9dKlwiOlwiW14vXSpcIixSPW49PVwid2luZG93c1wiP1wiYFwiOlwiXFxcXFwiLGY9ZS5sZW5ndGg7Zm9yKDtmPjEmJmEuaW5jbHVkZXMoZVtmLTFdKTtmLS0pO2U9ZS5zbGljZSgwLGYpO2xldCBwPVwiXCI7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDspe2xldCBfPVwiXCIsRT1bXSxoPSExLFM9ITEsZD0hMSxnPWw7Zm9yKDtnPGUubGVuZ3RoJiYhYS5pbmNsdWRlcyhlW2ddKTtnKyspe2lmKFMpe1M9ITEsXys9KGg/UDE6eWMpLmluY2x1ZGVzKGVbZ10pP2BcXFxcJHtlW2ddfWA6ZVtnXTtjb250aW51ZX1pZihlW2ddPT1SKXtTPSEwO2NvbnRpbnVlfWlmKGVbZ109PVwiW1wiKWlmKGgpe2lmKGVbZysxXT09XCI6XCIpe2xldCBPPWcrMSxtPVwiXCI7Zm9yKDtlW08rMV0hPW51bGwmJmVbTysxXSE9XCI6XCI7KW0rPWVbTysxXSxPKys7aWYoZVtPKzFdPT1cIjpcIiYmZVtPKzJdPT1cIl1cIil7Zz1PKzIsbT09XCJhbG51bVwiP18rPVwiXFxcXGRBLVphLXpcIjptPT1cImFscGhhXCI/Xys9XCJBLVphLXpcIjptPT1cImFzY2lpXCI/Xys9XCJcXDAtXFx4N0ZcIjptPT1cImJsYW5rXCI/Xys9XCJcdCBcIjptPT1cImNudHJsXCI/Xys9XCJcXDAtXHUwMDFmXFx4N0ZcIjptPT1cImRpZ2l0XCI/Xys9XCJcXFxcZFwiOm09PVwiZ3JhcGhcIj9fKz1cIiEtflwiOm09PVwibG93ZXJcIj9fKz1cImEtelwiOm09PVwicHJpbnRcIj9fKz1cIiAtflwiOm09PVwicHVuY3RcIj9fKz1gIVwiIyQlJicoKSorLFxcXFwtLi86Ozw9Pj9AW1xcXFxcXFxcXFxcXF1eX1xcdTIwMTh7fH1+YDptPT1cInNwYWNlXCI/Xys9XCJcXFxcc1xcdlwiOm09PVwidXBwZXJcIj9fKz1cIkEtWlwiOm09PVwid29yZFwiP18rPVwiXFxcXHdcIjptPT1cInhkaWdpdFwiJiYoXys9XCJcXFxcZEEtRmEtZlwiKTtjb250aW51ZX19fWVsc2V7aD0hMCxfKz1cIltcIixlW2crMV09PVwiIVwiPyhnKyssXys9XCJeXCIpOmVbZysxXT09XCJeXCImJihnKyssXys9XCJcXFxcXlwiKTtjb250aW51ZX1pZihlW2ddPT1cIl1cIiYmaCl7aD0hMSxfKz1cIl1cIjtjb250aW51ZX1pZihoKXtlW2ddPT1cIlxcXFxcIj9fKz1cIlxcXFxcXFxcXCI6Xys9ZVtnXTtjb250aW51ZX1pZihlW2ddPT1cIilcIiYmRS5sZW5ndGg+MCYmRVtFLmxlbmd0aC0xXSE9XCJCUkFDRVwiKXtfKz1cIilcIjtsZXQgTz1FLnBvcCgpO089PVwiIVwiP18rPXU6TyE9XCJAXCImJihfKz1PKTtjb250aW51ZX1pZihlW2ddPT1cInxcIiYmRS5sZW5ndGg+MCYmRVtFLmxlbmd0aC0xXSE9XCJCUkFDRVwiKXtfKz1cInxcIjtjb250aW51ZX1pZihlW2ddPT1cIitcIiYmdCYmZVtnKzFdPT1cIihcIil7ZysrLEUucHVzaChcIitcIiksXys9XCIoPzpcIjtjb250aW51ZX1pZihlW2ddPT1cIkBcIiYmdCYmZVtnKzFdPT1cIihcIil7ZysrLEUucHVzaChcIkBcIiksXys9XCIoPzpcIjtjb250aW51ZX1pZihlW2ddPT1cIj9cIil7dCYmZVtnKzFdPT1cIihcIj8oZysrLEUucHVzaChcIj9cIiksXys9XCIoPzpcIik6Xys9XCIuXCI7Y29udGludWV9aWYoZVtnXT09XCIhXCImJnQmJmVbZysxXT09XCIoXCIpe2crKyxFLnB1c2goXCIhXCIpLF8rPVwiKD8hXCI7Y29udGludWV9aWYoZVtnXT09XCJ7XCIpe0UucHVzaChcIkJSQUNFXCIpLF8rPVwiKD86XCI7Y29udGludWV9aWYoZVtnXT09XCJ9XCImJkVbRS5sZW5ndGgtMV09PVwiQlJBQ0VcIil7RS5wb3AoKSxfKz1cIilcIjtjb250aW51ZX1pZihlW2ddPT1cIixcIiYmRVtFLmxlbmd0aC0xXT09XCJCUkFDRVwiKXtfKz1cInxcIjtjb250aW51ZX1pZihlW2ddPT1cIipcIil7aWYodCYmZVtnKzFdPT1cIihcIilnKyssRS5wdXNoKFwiKlwiKSxfKz1cIig/OlwiO2Vsc2V7bGV0IE89ZVtnLTFdLG09MTtmb3IoO2VbZysxXT09XCIqXCI7KWcrKyxtKys7bGV0IE49ZVtnKzFdO3ImJm09PTImJlsuLi5hLHZvaWQgMF0uaW5jbHVkZXMoTykmJlsuLi5hLHZvaWQgMF0uaW5jbHVkZXMoTik/KF8rPWMsZD0hMCk6Xys9dX1jb250aW51ZX1fKz15Yy5pbmNsdWRlcyhlW2ddKT9gXFxcXCR7ZVtnXX1gOmVbZ119aWYoRS5sZW5ndGg+MHx8aHx8Uyl7Xz1cIlwiO2ZvcihsZXQgTyBvZiBlLnNsaWNlKGwsZykpXys9eWMuaW5jbHVkZXMoTyk/YFxcXFwke099YDpPLGQ9ITF9Zm9yKHArPV8sZHx8KHArPWc8ZS5sZW5ndGg/aTpzLGQ9ITApO2EuaW5jbHVkZXMoZVtnXSk7KWcrKztpZighKGc+bCkpdGhyb3cgbmV3IEVycm9yKFwiQXNzZXJ0aW9uIGZhaWx1cmU6IGkgPiBqIChwb3RlbnRpYWwgaW5maW5pdGUgbG9vcClcIik7bD1nfXJldHVybiBwPWBeJHtwfSRgLG5ldyBSZWdFeHAocCxvP1wiaVwiOlwiXCIpfWZ1bmN0aW9uIE0xKGUpe2xldCB0PXtcIntcIjpcIn1cIixcIihcIjpcIilcIixcIltcIjpcIl1cIn0scj0vXFxcXCguKXwoXiF8XFwqfFxcP3xbXFxdLispXVxcP3xcXFtbXlxcXFxcXF1dK1xcXXxcXHtbXlxcXFx9XStcXH18XFwoXFw/WzohPV1bXlxcXFwpXStcXCl8XFwoW158XStcXHxbXlxcXFwpXStcXCkpLztpZihlPT09XCJcIilyZXR1cm4hMTtsZXQgbjtmb3IoO249ci5leGVjKGUpOyl7aWYoblsyXSlyZXR1cm4hMDtsZXQgbz1uLmluZGV4K25bMF0ubGVuZ3RoLGk9blsxXSxzPWk/dFtpXTpudWxsO2lmKGkmJnMpe2xldCBhPWUuaW5kZXhPZihzLG8pO2EhPT0tMSYmKG89YSsxKX1lPWUuc2xpY2Uobyl9cmV0dXJuITF9ZnVuY3Rpb24gSlIoZSx7Z2xvYnN0YXI6dD0hMX09e30pe2lmKGUubWF0Y2goL1xcMC9nKSl0aHJvdyBuZXcgRXJyb3IoYEdsb2IgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiBcIiR7ZX1cImApO2lmKCF0KXJldHVybiBaUihlKTtsZXQgcj1GaS5zb3VyY2Usbj1uZXcgUmVnRXhwKGAoPzw9KCR7cn18XilcXFxcKlxcXFwqJHtyfSlcXFxcLlxcXFwuKD89JHtyfXwkKWAsXCJnXCIpO3JldHVybiBaUihlLnJlcGxhY2UobixcIlxcMFwiKSkucmVwbGFjZSgvXFwwL2csXCIuLlwiKX1mdW5jdGlvbiBrMShlLHtleHRlbmRlZDp0PSEwLGdsb2JzdGFyOnI9ITF9PXt9KXtpZighcnx8ZS5sZW5ndGg9PTApcmV0dXJuIHcxKC4uLmUpO2lmKGUubGVuZ3RoPT09MClyZXR1cm5cIi5cIjtsZXQgbjtmb3IobGV0IG8gb2YgZSl7bGV0IGk9bztpLmxlbmd0aD4wJiYobj9uKz1gJHtKcn0ke2l9YDpuPWkpfXJldHVybiBuP0pSKG4se2V4dGVuZGVkOnQsZ2xvYnN0YXI6cn0pOlwiLlwifXZhciBMMSx3MSxaUix5YyxQMSxlRT1BKCgpPT57UGUoKTt2aSgpO2djKCk7SWMoKTtMMT1xP1NjOk5jLHtqb2luOncxLG5vcm1hbGl6ZTpaUn09TDEseWM9W1wiIVwiLFwiJFwiLFwiKFwiLFwiKVwiLFwiKlwiLFwiK1wiLFwiLlwiLFwiPVwiLFwiP1wiLFwiW1wiLFwiXFxcXFwiLFwiXlwiLFwie1wiLFwifFwiXSxQMT1bXCItXCIsXCJcXFxcXCIsXCJdXCJdfSk7dmFyIERjPXt9O2NlKERjLHtTRVA6KCk9PkpyLFNFUF9QQVRURVJOOigpPT5GaSxiYXNlbmFtZTooKT0+VGMsY29tbW9uOigpPT5DMSxkZWxpbWl0ZXI6KCk9PlcxLGRpcm5hbWU6KCk9PlYxLGV4dG5hbWU6KCk9PkgxLGZvcm1hdDooKT0+JDEsZnJvbUZpbGVVcmw6KCk9PiQsZ2xvYlRvUmVnRXhwOigpPT5VMSxpc0Fic29sdXRlOigpPT5HMSxpc0dsb2I6KCk9Pk0xLGpvaW46KCk9PlkxLGpvaW5HbG9iczooKT0+azEsbm9ybWFsaXplOigpPT5qMSxub3JtYWxpemVHbG9iOigpPT5KUixwYXJzZTooKT0+SzEscG9zaXg6KCk9PnYxLHJlbGF0aXZlOigpPT5YMSxyZXNvbHZlOigpPT50RSxzZXA6KCk9PnJFLHRvRmlsZVVybDooKT0+cTEsdG9OYW1lc3BhY2VkUGF0aDooKT0+V2ksd2luMzI6KCk9PkYxfSk7dmFyIEIxLEYxLHYxLFRjLFcxLFYxLEgxLCQxLCQsRzEsWTEsajEsSzEsWDEsdEUsckUscTEsV2ksYmM9QSgoKT0+e1BlKCk7Z2MoKTtJYygpO1FSKCk7dmkoKTt6UigpO2VFKCk7QjE9cT9NaTpCaSxGMT1NaSx2MT1CaSx7YmFzZW5hbWU6VGMsZGVsaW1pdGVyOlcxLGRpcm5hbWU6VjEsZXh0bmFtZTpIMSxmb3JtYXQ6JDEsZnJvbUZpbGVVcmw6JCxpc0Fic29sdXRlOkcxLGpvaW46WTEsbm9ybWFsaXplOmoxLHBhcnNlOksxLHJlbGF0aXZlOlgxLHJlc29sdmU6dEUsc2VwOnJFLHRvRmlsZVVybDpxMSx0b05hbWVzcGFjZWRQYXRoOldpfT1CMX0pO3ZhciBuRSxEZT1BKCgpPT57YmMoKTtiYygpO25FPXsuLi5EY319KTt2YXIgZUwsb0U9QSgoKT0+e1widXNlIHN0cmljdFwiO2VMPTM2LTF9KTt2YXIgQ2Msb0wsTGM9QSgoKT0+e2VlKCk7Q2M9bmV3IEFycmF5KDI1Nik7Zm9yKGxldCBlPTA7ZTwyNTY7KytlKUNjW2VdPVwiJVwiKygoZTwxNj9cIjBcIjpcIlwiKStlLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKTtvTD1uZXcgSW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSl9KTt2YXIgY0wsbEwsdUwsaUU9QSgoKT0+e3VlKCk7TGMoKTtjTD1uZXcgSW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSksbEw9bmV3IEludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMSwxLDEsMSwwLDAsMSwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDEsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMSwwXSksdUw9bmV3IEludDhBcnJheShbLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsMCwxLDIsMyw0LDUsNiw3LDgsOSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwxMCwxMSwxMiwxMywxNCwxNSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwxMCwxMSwxMiwxMywxNCwxNSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0pfSk7ZnVuY3Rpb24gbEUoZSl7aWYodHlwZW9mIGU9PVwic3RyaW5nXCIpZT1uZXcgVVJMKGUpO2Vsc2UgaWYoIShlIGluc3RhbmNlb2YgVVJMKSl0aHJvdyBuZXcgQihcInBhdGhcIixbXCJzdHJpbmdcIixcIlVSTFwiXSxlKTtpZihlLnByb3RvY29sIT09XCJmaWxlOlwiKXRocm93IG5ldyBiaShcImZpbGVcIik7cmV0dXJuIHE/SjEoZSk6ZXgoZSl9ZnVuY3Rpb24gSjEoZSl7bGV0IHQ9ZS5ob3N0bmFtZSxyPWUucGF0aG5hbWU7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXT09PVwiJVwiKXtsZXQgbz1yLmNvZGVQb2ludEF0KG4rMil8MzI7aWYocltuKzFdPT09XCIyXCImJm89PT0xMDJ8fHJbbisxXT09PVwiNVwiJiZvPT09OTkpdGhyb3cgbmV3IEtyKFwibXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIFxcXFwgb3IgLyBjaGFyYWN0ZXJzXCIpfWlmKHI9ci5yZXBsYWNlKFoxLFwiXFxcXFwiKSxyPWRlY29kZVVSSUNvbXBvbmVudChyKSx0IT09XCJcIilyZXR1cm5gXFxcXFxcXFwke3R9JHtyfWA7e2xldCBuPXIuY29kZVBvaW50QXQoMSl8MzIsbz1yWzJdO2lmKG48OTd8fG4+MTIyfHxvIT09XCI6XCIpdGhyb3cgbmV3IEtyKFwibXVzdCBiZSBhYnNvbHV0ZVwiKTtyZXR1cm4gci5zbGljZSgxKX19ZnVuY3Rpb24gZXgoZSl7aWYoZS5ob3N0bmFtZSE9PVwiXCIpdGhyb3cgbmV3IGdpKEhlKTtsZXQgdD1lLnBhdGhuYW1lO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl09PT1cIiVcIil7bGV0IG49dC5jb2RlUG9pbnRBdChyKzIpfDMyO2lmKHRbcisxXT09PVwiMlwiJiZuPT09MTAyKXRocm93IG5ldyBLcihcIm11c3Qgbm90IGluY2x1ZGUgZW5jb2RlZCAvIGNoYXJhY3RlcnNcIil9cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX12YXIgWjEsS0wsdUU9QSgoKT0+e2VlKCk7WW4oKTtEZSgpO29FKCk7UGUoKTtMYygpO2lFKCk7WjE9L1xcLy9nLEtMPW5ldyBJbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDEsMSwxLDEsMCwwLDEsMSwwLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMCwwLDAsMCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwxLDAsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDEsMF0pfSk7ZnVuY3Rpb24gVmkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBVUkw/bEUoZSk6ZX12YXIgUUwsVWM9QSgoKT0+e3VFKCk7UUw9U3ltYm9sKFwicXVlcnlcIil9KTtmdW5jdGlvbiBmRShlLHQpe2lmKCFlKXRocm93IG5ldyAkbih0KX1mdW5jdGlvbiB0eChlKXt0aHJvdyBuZXcgJG4oZSl9dmFyIHBFLFJFPUEoKCk9PntlZSgpO2ZFLmZhaWw9dHg7cEU9ZkV9KTtmdW5jdGlvbiByeChlKXtyZXR1cm57ZGV2OmUuZGV2LGlubzplLmlubyxtb2RlOmUubW9kZSxubGluazplLm5saW5rLHVpZDplLnVpZCxnaWQ6ZS5naWQscmRldjplLnJkZXYsc2l6ZTplLnNpemUsYmxrc2l6ZTplLmJsa3NpemUsYmxvY2tzOmUuYmxvY2tzLG10aW1lOmUubXRpbWUsYXRpbWU6ZS5hdGltZSxiaXJ0aHRpbWU6ZS5iaXJ0aHRpbWUsbXRpbWVNczplLm10aW1lPy5nZXRUaW1lKCl8fG51bGwsYXRpbWVNczplLmF0aW1lPy5nZXRUaW1lKCl8fG51bGwsYmlydGh0aW1lTXM6ZS5iaXJ0aHRpbWU/LmdldFRpbWUoKXx8bnVsbCxpc0ZpbGU6KCk9PmUuaXNGaWxlLGlzRGlyZWN0b3J5OigpPT5lLmlzRGlyZWN0b3J5LGlzU3ltYm9saWNMaW5rOigpPT5lLmlzU3ltbGluayxpc0Jsb2NrRGV2aWNlOigpPT4hMSxpc0ZJRk86KCk9PiExLGlzQ2hhcmFjdGVyRGV2aWNlOigpPT4hMSxpc1NvY2tldDooKT0+ITEsY3RpbWU6ZS5tdGltZSxjdGltZU1zOmUubXRpbWU/LmdldFRpbWUoKXx8bnVsbH19ZnVuY3Rpb24gRHQoZSl7cmV0dXJuIGU9PW51bGw/bnVsbDpCaWdJbnQoZSl9ZnVuY3Rpb24gbngoZSl7cmV0dXJue2RldjpEdChlLmRldiksaW5vOkR0KGUuaW5vKSxtb2RlOkR0KGUubW9kZSksbmxpbms6RHQoZS5ubGluayksdWlkOkR0KGUudWlkKSxnaWQ6RHQoZS5naWQpLHJkZXY6RHQoZS5yZGV2KSxzaXplOkR0KGUuc2l6ZSl8fDBuLGJsa3NpemU6RHQoZS5ibGtzaXplKSxibG9ja3M6RHQoZS5ibG9ja3MpLG10aW1lOmUubXRpbWUsYXRpbWU6ZS5hdGltZSxiaXJ0aHRpbWU6ZS5iaXJ0aHRpbWUsbXRpbWVNczplLm10aW1lP0JpZ0ludChlLm10aW1lLmdldFRpbWUoKSk6bnVsbCxhdGltZU1zOmUuYXRpbWU/QmlnSW50KGUuYXRpbWUuZ2V0VGltZSgpKTpudWxsLGJpcnRodGltZU1zOmUuYmlydGh0aW1lP0JpZ0ludChlLmJpcnRodGltZS5nZXRUaW1lKCkpOm51bGwsbXRpbWVOczplLm10aW1lP0JpZ0ludChlLm10aW1lLmdldFRpbWUoKSkqMTAwMDAwMG46bnVsbCxhdGltZU5zOmUuYXRpbWU/QmlnSW50KGUuYXRpbWUuZ2V0VGltZSgpKSoxMDAwMDAwbjpudWxsLGJpcnRodGltZU5zOmUuYmlydGh0aW1lP0JpZ0ludChlLmJpcnRodGltZS5nZXRUaW1lKCkpKjEwMDAwMDBuOm51bGwsaXNGaWxlOigpPT5lLmlzRmlsZSxpc0RpcmVjdG9yeTooKT0+ZS5pc0RpcmVjdG9yeSxpc1N5bWJvbGljTGluazooKT0+ZS5pc1N5bWxpbmssaXNCbG9ja0RldmljZTooKT0+ITEsaXNGSUZPOigpPT4hMSxpc0NoYXJhY3RlckRldmljZTooKT0+ITEsaXNTb2NrZXQ6KCk9PiExLGN0aW1lOmUubXRpbWUsY3RpbWVNczplLm10aW1lP0JpZ0ludChlLm10aW1lLmdldFRpbWUoKSk6bnVsbCxjdGltZU5zOmUubXRpbWU/QmlnSW50KGUubXRpbWUuZ2V0VGltZSgpKSoxMDAwMDAwbjpudWxsfX1mdW5jdGlvbiBpcihlLHQpe3JldHVybiB0P254KGUpOnJ4KGUpfWZ1bmN0aW9uIE5yKGUsdCxyKXtsZXQgbj10eXBlb2YgdD09XCJmdW5jdGlvblwiP3Q6cixvPXR5cGVvZiB0PT1cIm9iamVjdFwiP3Q6e2JpZ2ludDohMX07aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgZnVuY3Rpb24gc3VwcGxpZWRcIik7RGVuby5zdGF0KGUpLnRoZW4oaT0+bihudWxsLGlyKGksby5iaWdpbnQpKSxpPT5uKE1lKGkse3N5c2NhbGw6XCJzdGF0XCJ9KSkpfWZ1bmN0aW9uIEhpKGUsdD17YmlnaW50OiExLHRocm93SWZOb0VudHJ5OiEwfSl7dHJ5e2xldCByPURlbm8uc3RhdFN5bmMoZSk7cmV0dXJuIGlyKHIsdC5iaWdpbnQpfWNhdGNoKHIpe2lmKHQ/LnRocm93SWZOb0VudHJ5PT09ITEmJnIgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZClyZXR1cm47dGhyb3cgciBpbnN0YW5jZW9mIEVycm9yP01lKHIse3N5c2NhbGw6XCJzdGF0XCJ9KTpyfX12YXIgRUUsZW49QSgoKT0+e2VlKCk7eigpO0VFPXcoTnIpfSk7ZnVuY3Rpb24gJGkoZSx0LHIpe2xldCBuPXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/dDpyLG89dHlwZW9mIHQ9PVwib2JqZWN0XCI/dDp7YmlnaW50OiExfTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJObyBjYWxsYmFjayBmdW5jdGlvbiBzdXBwbGllZFwiKTtEZW5vLmxzdGF0KGUpLnRoZW4oaT0+bihudWxsLGlyKGksby5iaWdpbnQpKSxpPT5uKGkpKX1mdW5jdGlvbiBNYyhlLHQpe2xldCByPURlbm8ubHN0YXRTeW5jKGUpO3JldHVybiBpcihyLHQ/LmJpZ2ludHx8ITEpfXZhciBfRSxrYz1BKCgpPT57ZW4oKTt6KCk7X0U9dygkaSl9KTtmdW5jdGlvbiBNKGUpe00uaW5pdC5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWWkoZSl7ZHQoZSxcImxpc3RlbmVyXCIpfWZ1bmN0aW9uIG1FKGU9WG4sLi4udCl7aWYodHlwZW9mIGUhPVwibnVtYmVyXCJ8fGU8MHx8TnVtYmVyLmlzTmFOKGUpKXRocm93IG5ldyBVZShcIm5cIixcImEgbm9uLW5lZ2F0aXZlIG51bWJlclwiLGUpO2lmKHQubGVuZ3RoPT09MClYbj1lO2Vsc2UgZm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07aWYobiBpbnN0YW5jZW9mIEV2ZW50VGFyZ2V0KW5baEVdPWUsbltPRV09ITE7ZWxzZSBpZih0eXBlb2Ygbi5zZXRNYXhMaXN0ZW5lcnM9PVwiZnVuY3Rpb25cIiluLnNldE1heExpc3RlbmVycyhlKTtlbHNlIHRocm93IG5ldyBCKFwiZXZlbnRUYXJnZXRzXCIsW1wiRXZlbnRFbWl0dGVyXCIsXCJFdmVudFRhcmdldFwiXSxuKX19ZnVuY3Rpb24gZEUoZSx0LHIsbil7aWYoISFlW2J0XSl0cnl7bGV0IG89dC50aGVuO3R5cGVvZiBvPT1cImZ1bmN0aW9uXCImJm8uY2FsbCh0LHZvaWQgMCxmdW5jdGlvbihpKXtwcm9jZXNzLm5leHRUaWNrKHN4LGUsaSxyLG4pfSl9Y2F0Y2gobyl7ZS5lbWl0KFwiZXJyb3JcIixvKX19ZnVuY3Rpb24gc3goZSx0LHIsbil7aWYodHlwZW9mIGVbQmNdPT1cImZ1bmN0aW9uXCIpZVtCY10odCxyLC4uLm4pO2Vsc2V7bGV0IG89ZVtidF07dHJ5e2VbYnRdPSExLGUuZW1pdChcImVycm9yXCIsdCl9ZmluYWxseXtlW2J0XT1vfX19ZnVuY3Rpb24gU0UoZSl7cmV0dXJuIGUuX21heExpc3RlbmVycz09PXZvaWQgMD9NLmRlZmF1bHRNYXhMaXN0ZW5lcnM6ZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGdFKGUsdCxyLG4pe2xldCBvLGkscztpZihZaShyKSxpPWUuX2V2ZW50cyxpPT09dm9pZCAwPyhpPWUuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLGUuX2V2ZW50c0NvdW50PTApOihpLm5ld0xpc3RlbmVyIT09dm9pZCAwJiYoZS5lbWl0KFwibmV3TGlzdGVuZXJcIix0LHIubGlzdGVuZXI/P3IpLGk9ZS5fZXZlbnRzKSxzPWlbdF0pLHM9PT12b2lkIDApaVt0XT1yLCsrZS5fZXZlbnRzQ291bnQ7ZWxzZSBpZih0eXBlb2Ygcz09XCJmdW5jdGlvblwiP3M9aVt0XT1uP1tyLHNdOltzLHJdOm4/cy51bnNoaWZ0KHIpOnMucHVzaChyKSxvPVNFKGUpLG8+MCYmcy5sZW5ndGg+byYmIXMud2FybmVkKXtzLndhcm5lZD0hMDtsZXQgYT1uZXcgRXJyb3IoYFBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJHtzLmxlbmd0aH0gJHtTdHJpbmcodCl9IGxpc3RlbmVycyBhZGRlZCB0byAke29lKGUse2RlcHRoOi0xfSl9LiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdGApO2EubmFtZT1cIk1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZ1wiLGEuZW1pdHRlcj1lLGEudHlwZT10LGEuY291bnQ9cy5sZW5ndGgscHJvY2Vzcy5lbWl0V2FybmluZyhhKX1yZXR1cm4gZX1mdW5jdGlvbiBheCgpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gQUUoZSx0LHIpe2xldCBuPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDplLHR5cGU6dCxsaXN0ZW5lcjpyfSxvPWF4LmJpbmQobik7cmV0dXJuIG8ubGlzdGVuZXI9cixuLndyYXBGbj1vLG99ZnVuY3Rpb24geEUoZSx0LHIpe2xldCBuPWUuX2V2ZW50cztpZihuPT09dm9pZCAwKXJldHVybltdO2xldCBvPW5bdF07cmV0dXJuIG89PT12b2lkIDA/W106dHlwZW9mIG89PVwiZnVuY3Rpb25cIj9yP1tvLmxpc3RlbmVyfHxvXTpbb106cj9jeChvKTp2YyhvKX1mdW5jdGlvbiBJRShlLHQpe3JldHVybiB0eXBlb2YgZS5saXN0ZW5lckNvdW50PT1cImZ1bmN0aW9uXCI/ZS5saXN0ZW5lckNvdW50KHQpOk5FLmNhbGwoZSx0KX1mdW5jdGlvbiB2YyhlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMjpyZXR1cm5bZVswXSxlWzFdXTtjYXNlIDM6cmV0dXJuW2VbMF0sZVsxXSxlWzJdXTtjYXNlIDQ6cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM11dO2Nhc2UgNTpyZXR1cm5bZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdXTtjYXNlIDY6cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSxlWzVdXX1yZXR1cm4gZS5zbGljZSgpfWZ1bmN0aW9uIGN4KGUpe2xldCB0PXZjKGUpO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7KytyKXtsZXQgbj10W3JdLmxpc3RlbmVyO3R5cGVvZiBuPT1cImZ1bmN0aW9uXCImJih0W3JdPW4pfXJldHVybiB0fWZ1bmN0aW9uIHlFKGUsdCl7aWYodHlwZW9mIGUubGlzdGVuZXJzPT1cImZ1bmN0aW9uXCIpcmV0dXJuIGUubGlzdGVuZXJzKHQpO2lmKGUgaW5zdGFuY2VvZiBFdmVudFRhcmdldCl7bGV0IHI9ZVtrRXZlbnRzXS5nZXQodCksbj1bXSxvPXI/Lm5leHQ7Zm9yKDtvPy5saXN0ZW5lciE9PXZvaWQgMDspe2xldCBpPW8ubGlzdGVuZXI/LmRlcmVmP28ubGlzdGVuZXIuZGVyZWYoKTpvLmxpc3RlbmVyO24ucHVzaChpKSxvPW8ubmV4dH1yZXR1cm4gbn10aHJvdyBuZXcgQihcImVtaXR0ZXJcIixbXCJFdmVudEVtaXR0ZXJcIixcIkV2ZW50VGFyZ2V0XCJdLGUpfWFzeW5jIGZ1bmN0aW9uIFRFKGUsdCxyPXt9KXtsZXQgbj1yPy5zaWduYWw7aWYoa3QobixcIm9wdGlvbnMuc2lnbmFsXCIpLG4/LmFib3J0ZWQpdGhyb3cgbmV3IGhlO3JldHVybiBuZXcgUHJvbWlzZSgobyxpKT0+e2xldCBzPXU9PntlLnJlbW92ZUxpc3RlbmVyKHQsYSksbiE9bnVsbCYmWXQobixcImFib3J0XCIsYyksaSh1KX0sYT0oLi4udSk9Pnt0eXBlb2YgZS5yZW1vdmVMaXN0ZW5lcj09XCJmdW5jdGlvblwiJiZlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixzKSxuIT1udWxsJiZZdChuLFwiYWJvcnRcIixjKSxvKHUpfTtHaShlLHQsYSx7b25jZTohMH0pLHQhPT1cImVycm9yXCImJnR5cGVvZiBlLm9uY2U9PVwiZnVuY3Rpb25cIiYmZS5vbmNlKFwiZXJyb3JcIixzKTtmdW5jdGlvbiBjKCl7WXQoZSx0LGEpLFl0KGUsXCJlcnJvclwiLHMpLGkobmV3IGhlKX1uIT1udWxsJiZHaShuLFwiYWJvcnRcIixjLHtvbmNlOiEwfSl9KX1mdW5jdGlvbiBLbihlLHQpe3JldHVybnt2YWx1ZTplLGRvbmU6dH19ZnVuY3Rpb24gWXQoZSx0LHIsbil7aWYodHlwZW9mIGUucmVtb3ZlTGlzdGVuZXI9PVwiZnVuY3Rpb25cIillLnJlbW92ZUxpc3RlbmVyKHQscik7ZWxzZSBpZih0eXBlb2YgZS5yZW1vdmVFdmVudExpc3RlbmVyPT1cImZ1bmN0aW9uXCIpZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscixuKTtlbHNlIHRocm93IG5ldyBCKFwiZW1pdHRlclwiLFwiRXZlbnRFbWl0dGVyXCIsZSl9ZnVuY3Rpb24gR2koZSx0LHIsbil7aWYodHlwZW9mIGUub249PVwiZnVuY3Rpb25cIiluPy5vbmNlP2Uub25jZSh0LHIpOmUub24odCxyKTtlbHNlIGlmKHR5cGVvZiBlLmFkZEV2ZW50TGlzdGVuZXI9PVwiZnVuY3Rpb25cIillLmFkZEV2ZW50TGlzdGVuZXIodCxvPT57cihvKX0sbik7ZWxzZSB0aHJvdyBuZXcgQihcImVtaXR0ZXJcIixcIkV2ZW50RW1pdHRlclwiLGUpfWZ1bmN0aW9uIERFKGUsdCxyKXtsZXQgbj1yPy5zaWduYWw7aWYoa3QobixcIm9wdGlvbnMuc2lnbmFsXCIpLG4/LmFib3J0ZWQpdGhyb3cgbmV3IGhlO2xldCBvPVtdLGk9W10scz1udWxsLGE9ITEsYz1PYmplY3Quc2V0UHJvdG90eXBlT2Yoe25leHQoKXtsZXQgcD1vLnNoaWZ0KCk7aWYocClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEtuKHAsITEpKTtpZihzKXtsZXQgbD1Qcm9taXNlLnJlamVjdChzKTtyZXR1cm4gcz1udWxsLGx9cmV0dXJuIGE/UHJvbWlzZS5yZXNvbHZlKEtuKHZvaWQgMCwhMCkpOm5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsXyl7aS5wdXNoKHtyZXNvbHZlOmwscmVqZWN0Ol99KX0pfSxyZXR1cm4oKXtZdChlLHQsUiksWXQoZSxcImVycm9yXCIsZiksbiYmWXQobixcImFib3J0XCIsdSx7b25jZTohMH0pLGE9ITA7Zm9yKGxldCBwIG9mIGkpcC5yZXNvbHZlKEtuKHZvaWQgMCwhMCkpO3JldHVybiBQcm9taXNlLnJlc29sdmUoS24odm9pZCAwLCEwKSl9LHRocm93KHApe2lmKCFwfHwhKHAgaW5zdGFuY2VvZiBFcnJvcikpdGhyb3cgbmV3IEIoXCJFdmVudEVtaXR0ZXIuQXN5bmNJdGVyYXRvclwiLFwiRXJyb3JcIixwKTtzPXAsWXQoZSx0LFIpLFl0KGUsXCJlcnJvclwiLGYpfSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fSxseCk7cmV0dXJuIEdpKGUsdCxSKSx0IT09XCJlcnJvclwiJiZ0eXBlb2YgZS5vbj09XCJmdW5jdGlvblwiJiZlLm9uKFwiZXJyb3JcIixmKSxuJiZHaShuLFwiYWJvcnRcIix1LHtvbmNlOiEwfSksYztmdW5jdGlvbiB1KCl7ZihuZXcgaGUpfWZ1bmN0aW9uIFIoLi4ucCl7bGV0IGw9aS5zaGlmdCgpO2w/bC5yZXNvbHZlKEtuKHAsITEpKTpvLnB1c2gocCl9ZnVuY3Rpb24gZihwKXthPSEwO2xldCBsPWkuc2hpZnQoKTtsP2wucmVqZWN0KHApOnM9cCxjLnJldHVybigpfX12YXIgQmMsYnQsRmMsaEUsT0UscHQsb3gsaXgsWG4sTkUsbHgsYkU9QSgoKT0+e1widXNlIHN0cmljdFwiO0dyKCk7ZWUoKTtkZSgpO3llKCk7QmM9U3ltYm9sLmZvcihcIm5vZGVqcy5yZWplY3Rpb25cIiksYnQ9U3ltYm9sKFwia0NhcHR1cmVcIiksRmM9U3ltYm9sKFwiZXZlbnRzLmVycm9yTW9uaXRvclwiKSxoRT1TeW1ib2woXCJldmVudHMubWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnNcIiksT0U9U3ltYm9sKFwiZXZlbnRzLm1heEV2ZW50VGFyZ2V0TGlzdGVuZXJzV2FybmVkXCIpO3B0PU07TS5vbj1ERTtNLm9uY2U9VEU7TS5nZXRFdmVudExpc3RlbmVycz15RTtNLnNldE1heExpc3RlbmVycz1tRTtNLmxpc3RlbmVyQ291bnQ9SUU7TS5FdmVudEVtaXR0ZXI9TTtNLnVzaW5nRG9tYWlucz0hMTtNLmNhcHR1cmVSZWplY3Rpb25TeW1ib2w9QmM7b3g9TS5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sLGl4PU0uZXJyb3JNb25pdG9yO09iamVjdC5kZWZpbmVQcm9wZXJ0eShNLFwiY2FwdHVyZVJlamVjdGlvbnNcIix7Z2V0KCl7cmV0dXJuIE0ucHJvdG90eXBlW2J0XX0sc2V0KGUpe2dlKGUsXCJFdmVudEVtaXR0ZXIuY2FwdHVyZVJlamVjdGlvbnNcIiksTS5wcm90b3R5cGVbYnRdPWV9LGVudW1lcmFibGU6ITB9KTtNLmVycm9yTW9uaXRvcj1GYztPYmplY3QuZGVmaW5lUHJvcGVydHkoTS5wcm90b3R5cGUsYnQse3ZhbHVlOiExLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITF9KTtNLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMDtNLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MDtNLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDtYbj0xMDtPYmplY3QuZGVmaW5lUHJvcGVydHkoTSxcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWG59LHNldDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9XCJudW1iZXJcInx8ZTwwfHxOdW1iZXIuaXNOYU4oZSkpdGhyb3cgbmV3IFVlKFwiZGVmYXVsdE1heExpc3RlbmVyc1wiLFwiYSBub24tbmVnYXRpdmUgbnVtYmVyXCIsZSk7WG49ZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhNLHtrTWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnM6e3ZhbHVlOmhFLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLHdyaXRhYmxlOiExfSxrTWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnNXYXJuZWQ6e3ZhbHVlOk9FLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLHdyaXRhYmxlOiExfX0pO00uaW5pdD1mdW5jdGlvbihlKXsodGhpcy5fZXZlbnRzPT09dm9pZCAwfHx0aGlzLl9ldmVudHM9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykmJih0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDAsZT8uY2FwdHVyZVJlamVjdGlvbnM/KGdlKGUuY2FwdHVyZVJlamVjdGlvbnMsXCJvcHRpb25zLmNhcHR1cmVSZWplY3Rpb25zXCIpLHRoaXNbYnRdPUJvb2xlYW4oZS5jYXB0dXJlUmVqZWN0aW9ucykpOnRoaXNbYnRdPU0ucHJvdG90eXBlW2J0XX07TS5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT1cIm51bWJlclwifHx0PDB8fE51bWJlci5pc05hTih0KSl0aHJvdyBuZXcgVWUoXCJuXCIsXCJhIG5vbi1uZWdhdGl2ZSBudW1iZXJcIix0KTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc307TS5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIFNFKHRoaXMpfTtNLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKHQsLi4ucil7bGV0IG49dD09PVwiZXJyb3JcIixvPXRoaXMuX2V2ZW50cztpZihvIT09dm9pZCAwKW4mJm9bRmNdIT09dm9pZCAwJiZ0aGlzLmVtaXQoRmMsLi4uciksbj1uJiZvLmVycm9yPT09dm9pZCAwO2Vsc2UgaWYoIW4pcmV0dXJuITE7aWYobil7bGV0IHM7aWYoci5sZW5ndGg+MCYmKHM9clswXSkscyBpbnN0YW5jZW9mIEVycm9yKXt0cnl7bGV0IHU9e307RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodSxNLnByb3RvdHlwZS5lbWl0KX1jYXRjaHt9dGhyb3cgc31sZXQgYTt0cnl7YT1vZShzKX1jYXRjaHthPXN9bGV0IGM9bmV3IERpKGEpO3Rocm93IGMuY29udGV4dD1zLGN9bGV0IGk9b1t0XTtpZihpPT09dm9pZCAwKXJldHVybiExO2lmKHR5cGVvZiBpPT1cImZ1bmN0aW9uXCIpe2xldCBzPWkuYXBwbHkodGhpcyxyKTtzIT1udWxsJiZkRSh0aGlzLHMsdCxyKX1lbHNle2xldCBzPWkubGVuZ3RoLGE9dmMoaSk7Zm9yKGxldCBjPTA7YzxzOysrYyl7bGV0IHU9YVtjXS5hcHBseSh0aGlzLHIpO3UhPW51bGwmJmRFKHRoaXMsdSx0LHIpfX1yZXR1cm4hMH07TS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZ0UodGhpcyx0LHIsITEpfTtNLnByb3RvdHlwZS5vbj1NLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtNLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZ0UodGhpcyx0LHIsITApfTtNLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQscil7cmV0dXJuIFlpKHIpLHRoaXMub24odCxBRSh0aGlzLHQscikpLHRoaXN9O00ucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24odCxyKXtyZXR1cm4gWWkociksdGhpcy5wcmVwZW5kTGlzdGVuZXIodCxBRSh0aGlzLHQscikpLHRoaXN9O00ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQscil7WWkocik7bGV0IG49dGhpcy5fZXZlbnRzO2lmKG49PT12b2lkIDApcmV0dXJuIHRoaXM7bGV0IG89blt0XTtpZihvPT09dm9pZCAwKXJldHVybiB0aGlzO2lmKG89PT1yfHxvLmxpc3RlbmVyPT09ciktLXRoaXMuX2V2ZW50c0NvdW50PT09MD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIG5bdF0sbi5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LG8ubGlzdGVuZXJ8fHIpKTtlbHNlIGlmKHR5cGVvZiBvIT1cImZ1bmN0aW9uXCIpe2xldCBpPS0xO2ZvcihsZXQgcz1vLmxlbmd0aC0xO3M+PTA7cy0tKWlmKG9bc109PT1yfHxvW3NdLmxpc3RlbmVyPT09cil7aT1zO2JyZWFrfWlmKGk8MClyZXR1cm4gdGhpcztpPT09MD9vLnNoaWZ0KCk6c3AobyxpKSxvLmxlbmd0aD09PTEmJihuW3RdPW9bMF0pLG4ucmVtb3ZlTGlzdGVuZXIhPT12b2lkIDAmJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsdCxyKX1yZXR1cm4gdGhpc307TS5wcm90b3R5cGUub2ZmPU0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO00ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbih0KXtsZXQgcj10aGlzLl9ldmVudHM7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcztpZihyLnJlbW92ZUxpc3RlbmVyPT09dm9pZCAwKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6clt0XSE9PXZvaWQgMCYmKC0tdGhpcy5fZXZlbnRzQ291bnQ9PT0wP3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSByW3RdKSx0aGlzO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXtmb3IobGV0IG8gb2YgUmVmbGVjdC5vd25LZXlzKHIpKW8hPT1cInJlbW92ZUxpc3RlbmVyXCImJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKG8pO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhcInJlbW92ZUxpc3RlbmVyXCIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31sZXQgbj1yW3RdO2lmKHR5cGVvZiBuPT1cImZ1bmN0aW9uXCIpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LG4pO2Vsc2UgaWYobiE9PXZvaWQgMClmb3IobGV0IG89bi5sZW5ndGgtMTtvPj0wO28tLSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQsbltvXSk7cmV0dXJuIHRoaXN9O00ucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4geEUodGhpcyx0LCEwKX07TS5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiB4RSh0aGlzLHQsITEpfTtORT1mdW5jdGlvbih0KXtsZXQgcj10aGlzLl9ldmVudHM7aWYociE9PXZvaWQgMCl7bGV0IG49clt0XTtpZih0eXBlb2Ygbj09XCJmdW5jdGlvblwiKXJldHVybiAxO2lmKG4hPT12b2lkIDApcmV0dXJuIG4ubGVuZ3RofXJldHVybiAwfTtNLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PU5FO00ucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX07bHg9T2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihhc3luYyBmdW5jdGlvbiooKXt9KS5wcm90b3R5cGUpfSk7dmFyIHRuPUEoKCk9PntiRSgpfSk7ZnVuY3Rpb24gcmUoZSx0KXtpZihMRShlLHQpKXJldHVybiBlW3RdfWZ1bmN0aW9uIFdjKGUsdCl7bGV0IHI9cmUoZSx0KTtyZXR1cm4gSWUociE9bnVsbCkscn1mdW5jdGlvbiBDRShlKXtyZXR1cm4gdHlwZW9mIGU9PVwibnVtYmVyXCJ8fC9eMHhbMC05YS1mXSskL2kudGVzdChTdHJpbmcoZSkpPyEwOi9eWy0rXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKGVbLStdP1xcZCspPyQvLnRlc3QoU3RyaW5nKGUpKX1mdW5jdGlvbiBWYyhlLHQpe2xldCByPWU7dC5zbGljZSgwLC0xKS5mb3JFYWNoKG89PntyPXJlKHIsbyk/P3t9fSk7bGV0IG49dFt0Lmxlbmd0aC0xXTtyZXR1cm4gTEUocixuKX1mdW5jdGlvbiB3RShlLHtcIi0tXCI6dD0hMSxhbGlhczpyPXt9LGJvb2xlYW46bj0hMSxkZWZhdWx0Om89e30sc3RvcEVhcmx5Omk9ITEsc3RyaW5nOnM9W10sY29sbGVjdDphPVtdLG5lZ2F0YWJsZTpjPVtdLHVua25vd246dT1SPT5SfT17fSl7bGV0IFI9e2Jvb2xzOnt9LHN0cmluZ3M6e30sdW5rbm93bkZuOnUsYWxsQm9vbHM6ITEsY29sbGVjdDp7fSxuZWdhdGFibGU6e319O2lmKG4hPT12b2lkIDApaWYodHlwZW9mIG49PVwiYm9vbGVhblwiKVIuYWxsQm9vbHM9ISFuO2Vsc2V7bGV0IGQ9dHlwZW9mIG49PVwic3RyaW5nXCI/W25dOm47Zm9yKGxldCBnIG9mIGQuZmlsdGVyKEJvb2xlYW4pKVIuYm9vbHNbZ109ITB9bGV0IGY9e307aWYociE9PXZvaWQgMClmb3IobGV0IGQgaW4gcil7bGV0IGc9V2MocixkKTt0eXBlb2YgZz09XCJzdHJpbmdcIj9mW2RdPVtnXTpmW2RdPWc7Zm9yKGxldCBPIG9mIFdjKGYsZCkpZltPXT1bZF0uY29uY2F0KGZbZF0uZmlsdGVyKG09Pk8hPT1tKSl9aWYocyE9PXZvaWQgMCl7bGV0IGQ9dHlwZW9mIHM9PVwic3RyaW5nXCI/W3NdOnM7Zm9yKGxldCBnIG9mIGQuZmlsdGVyKEJvb2xlYW4pKXtSLnN0cmluZ3NbZ109ITA7bGV0IE89cmUoZixnKTtpZihPKWZvcihsZXQgbSBvZiBPKVIuc3RyaW5nc1ttXT0hMH19aWYoYSE9PXZvaWQgMCl7bGV0IGQ9dHlwZW9mIGE9PVwic3RyaW5nXCI/W2FdOmE7Zm9yKGxldCBnIG9mIGQuZmlsdGVyKEJvb2xlYW4pKXtSLmNvbGxlY3RbZ109ITA7bGV0IE89cmUoZixnKTtpZihPKWZvcihsZXQgbSBvZiBPKVIuY29sbGVjdFttXT0hMH19aWYoYyE9PXZvaWQgMCl7bGV0IGQ9dHlwZW9mIGM9PVwic3RyaW5nXCI/W2NdOmM7Zm9yKGxldCBnIG9mIGQuZmlsdGVyKEJvb2xlYW4pKXtSLm5lZ2F0YWJsZVtnXT0hMDtsZXQgTz1yZShmLGcpO2lmKE8pZm9yKGxldCBtIG9mIE8pUi5uZWdhdGFibGVbbV09ITB9fWxldCBwPXtfOltdfTtmdW5jdGlvbiBsKGQsZyl7cmV0dXJuIFIuYWxsQm9vbHMmJi9eLS1bXj1dKyQvLnRlc3QoZyl8fHJlKFIuYm9vbHMsZCl8fCEhcmUoUi5zdHJpbmdzLGQpfHwhIXJlKGYsZCl9ZnVuY3Rpb24gXyhkLGcsTyxtPSEwKXtsZXQgTj1kLEk9Zy5zcGxpdChcIi5cIik7SS5zbGljZSgwLC0xKS5mb3JFYWNoKGZ1bmN0aW9uKHYpe3JlKE4sdik9PT12b2lkIDAmJihOW3ZdPXt9KSxOPXJlKE4sdil9KTtsZXQgYj1JW0kubGVuZ3RoLTFdO20mJiEhcmUoUi5jb2xsZWN0LGcpP3JlKE4sYik9PT12b2lkIDA/TltiXT1bT106QXJyYXkuaXNBcnJheShyZShOLGIpKT9OW2JdLnB1c2goTyk6TltiXT1bcmUoTixiKSxPXTpOW2JdPU99ZnVuY3Rpb24gRShkLGcsTz12b2lkIDAsbSl7aWYoTyYmUi51bmtub3duRm4mJiFsKGQsTykmJlIudW5rbm93bkZuKE8sZCxnKT09PSExKXJldHVybjtsZXQgTj0hcmUoUi5zdHJpbmdzLGQpJiZDRShnKT9OdW1iZXIoZyk6ZztfKHAsZCxOLG0pO2xldCBJPXJlKGYsZCk7aWYoSSlmb3IobGV0IGIgb2YgSSlfKHAsYixOLG0pfWZ1bmN0aW9uIGgoZCl7cmV0dXJuIFdjKGYsZCkuc29tZShnPT50eXBlb2YgcmUoUi5ib29scyxnKT09XCJib29sZWFuXCIpfWxldCBTPVtdO2UuaW5jbHVkZXMoXCItLVwiKSYmKFM9ZS5zbGljZShlLmluZGV4T2YoXCItLVwiKSsxKSxlPWUuc2xpY2UoMCxlLmluZGV4T2YoXCItLVwiKSkpO2ZvcihsZXQgZD0wO2Q8ZS5sZW5ndGg7ZCsrKXtsZXQgZz1lW2RdO2lmKC9eLS0uKz0vLnRlc3QoZykpe2xldCBPPWcubWF0Y2goL14tLShbXj1dKyk9KC4qKSQvcyk7SWUoTyE9bnVsbCk7bGV0WyxtLE5dPU87Ui5ib29sc1ttXT9FKG0sTiE9PVwiZmFsc2VcIixnKTpFKG0sTixnKX1lbHNlIGlmKC9eLS1uby0uKy8udGVzdChnKSYmcmUoUi5uZWdhdGFibGUsZy5yZXBsYWNlKC9eLS1uby0vLFwiXCIpKSl7bGV0IE89Zy5tYXRjaCgvXi0tbm8tKC4rKS8pO0llKE8hPW51bGwpLEUoT1sxXSwhMSxnLCExKX1lbHNlIGlmKC9eLS0uKy8udGVzdChnKSl7bGV0IE89Zy5tYXRjaCgvXi0tKC4rKS8pO0llKE8hPW51bGwpO2xldFssbV09TyxOPWVbZCsxXTtOIT09dm9pZCAwJiYhL14tLy50ZXN0KE4pJiYhcmUoUi5ib29scyxtKSYmIVIuYWxsQm9vbHMmJihyZShmLG0pPyFoKG0pOiEwKT8oRShtLE4sZyksZCsrKTovXih0cnVlfGZhbHNlKSQvLnRlc3QoTik/KEUobSxOPT09XCJ0cnVlXCIsZyksZCsrKTpFKG0scmUoUi5zdHJpbmdzLG0pP1wiXCI6ITAsZyl9ZWxzZSBpZigvXi1bXi1dKy8udGVzdChnKSl7bGV0IE89Zy5zbGljZSgxLC0xKS5zcGxpdChcIlwiKSxtPSExO2ZvcihsZXQgST0wO0k8Ty5sZW5ndGg7SSsrKXtsZXQgYj1nLnNsaWNlKEkrMik7aWYoYj09PVwiLVwiKXtFKE9bSV0sYixnKTtjb250aW51ZX1pZigvW0EtWmEtel0vLnRlc3QoT1tJXSkmJi89Ly50ZXN0KGIpKXtFKE9bSV0sYi5zcGxpdCgvPSguKykvKVsxXSxnKSxtPSEwO2JyZWFrfWlmKC9bQS1aYS16XS8udGVzdChPW0ldKSYmLy0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChiKSl7RShPW0ldLGIsZyksbT0hMDticmVha31pZihPW0krMV0mJk9bSSsxXS5tYXRjaCgvXFxXLykpe0UoT1tJXSxnLnNsaWNlKEkrMiksZyksbT0hMDticmVha31lbHNlIEUoT1tJXSxyZShSLnN0cmluZ3MsT1tJXSk/XCJcIjohMCxnKX1sZXRbTl09Zy5zbGljZSgtMSk7IW0mJk4hPT1cIi1cIiYmKGVbZCsxXSYmIS9eKC18LS0pW14tXS8udGVzdChlW2QrMV0pJiYhcmUoUi5ib29scyxOKSYmKHJlKGYsTik/IWgoTik6ITApPyhFKE4sZVtkKzFdLGcpLGQrKyk6ZVtkKzFdJiYvXih0cnVlfGZhbHNlKSQvLnRlc3QoZVtkKzFdKT8oRShOLGVbZCsxXT09PVwidHJ1ZVwiLGcpLGQrKyk6RShOLHJlKFIuc3RyaW5ncyxOKT9cIlwiOiEwLGcpKX1lbHNlIGlmKCghUi51bmtub3duRm58fFIudW5rbm93bkZuKGcpIT09ITEpJiZwLl8ucHVzaChSLnN0cmluZ3MuXz8/IUNFKGcpP2c6TnVtYmVyKGcpKSxpKXtwLl8ucHVzaCguLi5lLnNsaWNlKGQrMSkpO2JyZWFrfX1mb3IobGV0W2QsZ11vZiBPYmplY3QuZW50cmllcyhvKSlpZighVmMocCxkLnNwbGl0KFwiLlwiKSkmJihfKHAsZCxnKSxmW2RdKSlmb3IobGV0IE8gb2YgZltkXSlfKHAsTyxnKTtmb3IobGV0IGQgb2YgT2JqZWN0LmtleXMoUi5ib29scykpaWYoIVZjKHAsZC5zcGxpdChcIi5cIikpKXtsZXQgZz1yZShSLmNvbGxlY3QsZCk/W106ITE7XyhwLGQsZywhMSl9Zm9yKGxldCBkIG9mIE9iamVjdC5rZXlzKFIuc3RyaW5ncykpIVZjKHAsZC5zcGxpdChcIi5cIikpJiZyZShSLmNvbGxlY3QsZCkmJl8ocCxkLFtdLCExKTtpZih0KXtwW1wiLS1cIl09W107Zm9yKGxldCBkIG9mIFMpcFtcIi0tXCJdLnB1c2goZCl9ZWxzZSBmb3IobGV0IGQgb2YgUylwLl8ucHVzaChkKTtyZXR1cm4gcH12YXIgTEUsUEU9QSgoKT0+e2VyKCk7KHtoYXNPd246TEV9PU9iamVjdCl9KTtmdW5jdGlvbiBVRSgpe2xldCBlPXdFKERlbm8uYXJncyk7cmV0dXJue29wdGlvbnM6bmV3IE1hcChPYmplY3QuZW50cmllcyhlKS5tYXAoKFtyLG5dKT0+W3Ise3ZhbHVlOm59XSkpfX12YXIgTUU9QSgoKT0+e1BFKCl9KTtmdW5jdGlvbiB1eCgpe3JldHVybiBIY3x8KHtvcHRpb25zOkhjfT1VRSgpKSxIY31mdW5jdGlvbiBrRShlKXtsZXQgdD11eCgpO2lmKGUuc3RhcnRzV2l0aChcIi0tbm8tXCIpKXtsZXQgcj10LmdldChcIi0tXCIrZS5zbGljZSg1KSk7cmV0dXJuIHImJiFyLnZhbHVlfXJldHVybiB0LmdldChlKT8udmFsdWV9dmFyIEhjLEJFPUEoKCk9PntNRSgpfSk7ZnVuY3Rpb24gUmUoZSl7aWYodHlwZW9mIGUhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihgUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KGUpfWApfWZ1bmN0aW9uIGppKGUpe3JldHVybiBlPT09NDd9ZnVuY3Rpb24gVihlKXtyZXR1cm4gamkoZSl8fGU9PT05Mn1mdW5jdGlvbiBqdChlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfWZ1bmN0aW9uIHJuKGUsdCxyLG4pe2xldCBvPVwiXCIsaT0wLHM9LTEsYT0wLGM7Zm9yKGxldCB1PTAsUj1lLmxlbmd0aDt1PD1SOysrdSl7aWYodTxSKWM9ZS5jaGFyQ29kZUF0KHUpO2Vsc2V7aWYobihjKSlicmVhaztjPTQ3fWlmKG4oYykpe2lmKCEocz09PXUtMXx8YT09PTEpKWlmKHMhPT11LTEmJmE9PT0yKXtpZihvLmxlbmd0aDwyfHxpIT09Mnx8by5jaGFyQ29kZUF0KG8ubGVuZ3RoLTEpIT09NDZ8fG8uY2hhckNvZGVBdChvLmxlbmd0aC0yKSE9PTQ2KXtpZihvLmxlbmd0aD4yKXtsZXQgZj1vLmxhc3RJbmRleE9mKHIpO2Y9PT0tMT8obz1cIlwiLGk9MCk6KG89by5zbGljZSgwLGYpLGk9by5sZW5ndGgtMS1vLmxhc3RJbmRleE9mKHIpKSxzPXUsYT0wO2NvbnRpbnVlfWVsc2UgaWYoby5sZW5ndGg9PT0yfHxvLmxlbmd0aD09PTEpe289XCJcIixpPTAscz11LGE9MDtjb250aW51ZX19dCYmKG8ubGVuZ3RoPjA/bys9YCR7cn0uLmA6bz1cIi4uXCIsaT0yKX1lbHNlIG8ubGVuZ3RoPjA/bys9citlLnNsaWNlKHMrMSx1KTpvPWUuc2xpY2UocysxLHUpLGk9dS1zLTE7cz11LGE9MH1lbHNlIGM9PT00NiYmYSE9PS0xPysrYTphPS0xfXJldHVybiBvfWZ1bmN0aW9uIEtpKGUsdCl7bGV0IHI9dC5kaXJ8fHQucm9vdCxuPXQuYmFzZXx8KHQubmFtZXx8XCJcIikrKHQuZXh0fHxcIlwiKTtyZXR1cm4gcj9yPT09dC5yb290P3IrbjpyK2UrbjpufWZ1bmN0aW9uIFhpKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoL1tcXHNdL2csdD0+ZnhbdF0/P3QpfXZhciBmeCwkYz1BKCgpPT57WW4oKTtmeD17XCJcdFwiOlwiJTA5XCIsXCJcXG5cIjpcIiUwQVwiLFwiXFx2XCI6XCIlMEJcIixcIlxcZlwiOlwiJTBDXCIsXCJcXHJcIjpcIiUwRFwiLFwiIFwiOlwiJTIwXCJ9fSk7dmFyIHFuPXt9O2NlKHFuLHtiYXNlbmFtZTooKT0+T3gsZGVsaW1pdGVyOigpPT5SeCxkaXJuYW1lOigpPT5oeCxleHRuYW1lOigpPT5teCxmb3JtYXQ6KCk9PlN4LGZyb21GaWxlVXJsOigpPT5BeCxpc0Fic29sdXRlOigpPT52RSxqb2luOigpPT5FeCxub3JtYWxpemU6KCk9PkZFLHBhcnNlOigpPT5neCxyZWxhdGl2ZTooKT0+X3gscmVzb2x2ZTooKT0+cWksc2VwOigpPT5weCx0b0ZpbGVVcmw6KCk9Pnh4LHRvTmFtZXNwYWNlZFBhdGg6KCk9PmR4fSk7ZnVuY3Rpb24gcWkoLi4uZSl7bGV0IHQ9XCJcIixyPVwiXCIsbj0hMTtmb3IobGV0IG89ZS5sZW5ndGgtMTtvPj0tMTtvLS0pe2xldCBpLHtEZW5vOnN9PWdsb2JhbFRoaXM7aWYobz49MClpPWVbb107ZWxzZSBpZih0KXtpZih0eXBlb2Ygcz8uZW52Py5nZXQhPVwiZnVuY3Rpb25cInx8dHlwZW9mIHM/LmN3ZCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJSZXNvbHZlZCBhIHJlbGF0aXZlIHBhdGggd2l0aG91dCBhIENXRC5cIik7aT1zLmN3ZCgpLChpPT09dm9pZCAwfHxpLnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKSE9PWAke3QudG9Mb3dlckNhc2UoKX1cXFxcYCkmJihpPWAke3R9XFxcXGApfWVsc2V7aWYodHlwZW9mIHM/LmN3ZCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJSZXNvbHZlZCBhIGRyaXZlLWxldHRlci1sZXNzIHBhdGggd2l0aG91dCBhIENXRC5cIik7aT1zLmN3ZCgpfVJlKGkpO2xldCBhPWkubGVuZ3RoO2lmKGE9PT0wKWNvbnRpbnVlO2xldCBjPTAsdT1cIlwiLFI9ITEsZj1pLmNoYXJDb2RlQXQoMCk7aWYoYT4xKWlmKFYoZikpaWYoUj0hMCxWKGkuY2hhckNvZGVBdCgxKSkpe2xldCBwPTIsbD1wO2Zvcig7cDxhJiYhVihpLmNoYXJDb2RlQXQocCkpOysrcCk7aWYocDxhJiZwIT09bCl7bGV0IF89aS5zbGljZShsLHApO2ZvcihsPXA7cDxhJiZWKGkuY2hhckNvZGVBdChwKSk7KytwKTtpZihwPGEmJnAhPT1sKXtmb3IobD1wO3A8YSYmIVYoaS5jaGFyQ29kZUF0KHApKTsrK3ApO3A9PT1hPyh1PWBcXFxcXFxcXCR7X31cXFxcJHtpLnNsaWNlKGwpfWAsYz1wKTpwIT09bCYmKHU9YFxcXFxcXFxcJHtffVxcXFwke2kuc2xpY2UobCxwKX1gLGM9cCl9fX1lbHNlIGM9MTtlbHNlIGp0KGYpJiZpLmNoYXJDb2RlQXQoMSk9PT01OCYmKHU9aS5zbGljZSgwLDIpLGM9MixhPjImJlYoaS5jaGFyQ29kZUF0KDIpKSYmKFI9ITAsYz0zKSk7ZWxzZSBWKGYpJiYoYz0xLFI9ITApO2lmKCEodS5sZW5ndGg+MCYmdC5sZW5ndGg+MCYmdS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpKSYmKHQubGVuZ3RoPT09MCYmdS5sZW5ndGg+MCYmKHQ9dSksbnx8KHI9YCR7aS5zbGljZShjKX1cXFxcJHtyfWAsbj1SKSxuJiZ0Lmxlbmd0aD4wKSlicmVha31yZXR1cm4gcj1ybihyLCFuLFwiXFxcXFwiLFYpLHQrKG4/XCJcXFxcXCI6XCJcIikrcnx8XCIuXCJ9ZnVuY3Rpb24gRkUoZSl7UmUoZSk7bGV0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuXCIuXCI7bGV0IHI9MCxuLG89ITEsaT1lLmNoYXJDb2RlQXQoMCk7aWYodD4xKWlmKFYoaSkpaWYobz0hMCxWKGUuY2hhckNvZGVBdCgxKSkpe2xldCBhPTIsYz1hO2Zvcig7YTx0JiYhVihlLmNoYXJDb2RlQXQoYSkpOysrYSk7aWYoYTx0JiZhIT09Yyl7bGV0IHU9ZS5zbGljZShjLGEpO2ZvcihjPWE7YTx0JiZWKGUuY2hhckNvZGVBdChhKSk7KythKTtpZihhPHQmJmEhPT1jKXtmb3IoYz1hO2E8dCYmIVYoZS5jaGFyQ29kZUF0KGEpKTsrK2EpO2lmKGE9PT10KXJldHVybmBcXFxcXFxcXCR7dX1cXFxcJHtlLnNsaWNlKGMpfVxcXFxgO2EhPT1jJiYobj1gXFxcXFxcXFwke3V9XFxcXCR7ZS5zbGljZShjLGEpfWAscj1hKX19fWVsc2Ugcj0xO2Vsc2UganQoaSkmJmUuY2hhckNvZGVBdCgxKT09PTU4JiYobj1lLnNsaWNlKDAsMikscj0yLHQ+MiYmVihlLmNoYXJDb2RlQXQoMikpJiYobz0hMCxyPTMpKTtlbHNlIGlmKFYoaSkpcmV0dXJuXCJcXFxcXCI7bGV0IHM7cmV0dXJuIHI8dD9zPXJuKGUuc2xpY2UociksIW8sXCJcXFxcXCIsVik6cz1cIlwiLHMubGVuZ3RoPT09MCYmIW8mJihzPVwiLlwiKSxzLmxlbmd0aD4wJiZWKGUuY2hhckNvZGVBdCh0LTEpKSYmKHMrPVwiXFxcXFwiKSxuPT09dm9pZCAwP28/cy5sZW5ndGg+MD9gXFxcXCR7c31gOlwiXFxcXFwiOnMubGVuZ3RoPjA/czpcIlwiOm8/cy5sZW5ndGg+MD9gJHtufVxcXFwke3N9YDpgJHtufVxcXFxgOnMubGVuZ3RoPjA/bitzOm59ZnVuY3Rpb24gdkUoZSl7UmUoZSk7bGV0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuITE7bGV0IHI9ZS5jaGFyQ29kZUF0KDApO3JldHVybiBWKHIpPyEwOiEhKGp0KHIpJiZ0PjImJmUuY2hhckNvZGVBdCgxKT09PTU4JiZWKGUuY2hhckNvZGVBdCgyKSkpfWZ1bmN0aW9uIEV4KC4uLmUpe2xldCB0PWUubGVuZ3RoO2lmKHQ9PT0wKXJldHVyblwiLlwiO2xldCByLG49bnVsbDtmb3IobGV0IHM9MDtzPHQ7KytzKXtsZXQgYT1lW3NdO1JlKGEpLGEubGVuZ3RoPjAmJihyPT09dm9pZCAwP3I9bj1hOnIrPWBcXFxcJHthfWApfWlmKHI9PT12b2lkIDApcmV0dXJuXCIuXCI7bGV0IG89ITAsaT0wO2lmKEllKG4hPW51bGwpLFYobi5jaGFyQ29kZUF0KDApKSl7KytpO2xldCBzPW4ubGVuZ3RoO3M+MSYmVihuLmNoYXJDb2RlQXQoMSkpJiYoKytpLHM+MiYmKFYobi5jaGFyQ29kZUF0KDIpKT8rK2k6bz0hMSkpfWlmKG8pe2Zvcig7aTxyLmxlbmd0aCYmVihyLmNoYXJDb2RlQXQoaSkpOysraSk7aT49MiYmKHI9YFxcXFwke3Iuc2xpY2UoaSl9YCl9cmV0dXJuIEZFKHIpfWZ1bmN0aW9uIF94KGUsdCl7aWYoUmUoZSksUmUodCksZT09PXQpcmV0dXJuXCJcIjtsZXQgcj1xaShlKSxuPXFpKHQpO2lmKHI9PT1ufHwoZT1yLnRvTG93ZXJDYXNlKCksdD1uLnRvTG93ZXJDYXNlKCksZT09PXQpKXJldHVyblwiXCI7bGV0IG89MCxpPWUubGVuZ3RoO2Zvcig7bzxpJiZlLmNoYXJDb2RlQXQobyk9PT05MjsrK28pO2Zvcig7aS0xPm8mJmUuY2hhckNvZGVBdChpLTEpPT09OTI7LS1pKTtsZXQgcz1pLW8sYT0wLGM9dC5sZW5ndGg7Zm9yKDthPGMmJnQuY2hhckNvZGVBdChhKT09PTkyOysrYSk7Zm9yKDtjLTE+YSYmdC5jaGFyQ29kZUF0KGMtMSk9PT05MjstLWMpO2xldCB1PWMtYSxSPXM8dT9zOnUsZj0tMSxwPTA7Zm9yKDtwPD1SOysrcCl7aWYocD09PVIpe2lmKHU+Uil7aWYodC5jaGFyQ29kZUF0KGErcCk9PT05MilyZXR1cm4gbi5zbGljZShhK3ArMSk7aWYocD09PTIpcmV0dXJuIG4uc2xpY2UoYStwKX1zPlImJihlLmNoYXJDb2RlQXQobytwKT09PTkyP2Y9cDpwPT09MiYmKGY9MykpO2JyZWFrfWxldCBfPWUuY2hhckNvZGVBdChvK3ApLEU9dC5jaGFyQ29kZUF0KGErcCk7aWYoXyE9PUUpYnJlYWs7Xz09PTkyJiYoZj1wKX1pZihwIT09UiYmZj09PS0xKXJldHVybiBuO2xldCBsPVwiXCI7Zm9yKGY9PT0tMSYmKGY9MCkscD1vK2YrMTtwPD1pOysrcCkocD09PWl8fGUuY2hhckNvZGVBdChwKT09PTkyKSYmKGwubGVuZ3RoPT09MD9sKz1cIi4uXCI6bCs9XCJcXFxcLi5cIik7cmV0dXJuIGwubGVuZ3RoPjA/bCtuLnNsaWNlKGErZixjKTooYSs9ZixuLmNoYXJDb2RlQXQoYSk9PT05MiYmKythLG4uc2xpY2UoYSxjKSl9ZnVuY3Rpb24gZHgoZSl7aWYodHlwZW9mIGUhPVwic3RyaW5nXCIpcmV0dXJuIGU7aWYoZS5sZW5ndGg9PT0wKXJldHVyblwiXCI7bGV0IHQ9cWkoZSk7aWYodC5sZW5ndGg+PTMpe2lmKHQuY2hhckNvZGVBdCgwKT09PTkyKXtpZih0LmNoYXJDb2RlQXQoMSk9PT05Mil7bGV0IHI9dC5jaGFyQ29kZUF0KDIpO2lmKHIhPT02MyYmciE9PTQ2KXJldHVybmBcXFxcXFxcXD9cXFxcVU5DXFxcXCR7dC5zbGljZSgyKX1gfX1lbHNlIGlmKGp0KHQuY2hhckNvZGVBdCgwKSkmJnQuY2hhckNvZGVBdCgxKT09PTU4JiZ0LmNoYXJDb2RlQXQoMik9PT05MilyZXR1cm5gXFxcXFxcXFw/XFxcXCR7dH1gfXJldHVybiBlfWZ1bmN0aW9uIGh4KGUpe1JlKGUpO2xldCB0PWUubGVuZ3RoO2lmKHQ9PT0wKXJldHVyblwiLlwiO2xldCByPS0xLG49LTEsbz0hMCxpPTAscz1lLmNoYXJDb2RlQXQoMCk7aWYodD4xKWlmKFYocykpe2lmKHI9aT0xLFYoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGE9MixjPWE7Zm9yKDthPHQmJiFWKGUuY2hhckNvZGVBdChhKSk7KythKTtpZihhPHQmJmEhPT1jKXtmb3IoYz1hO2E8dCYmVihlLmNoYXJDb2RlQXQoYSkpOysrYSk7aWYoYTx0JiZhIT09Yyl7Zm9yKGM9YTthPHQmJiFWKGUuY2hhckNvZGVBdChhKSk7KythKTtpZihhPT09dClyZXR1cm4gZTthIT09YyYmKHI9aT1hKzEpfX19fWVsc2UganQocykmJmUuY2hhckNvZGVBdCgxKT09PTU4JiYocj1pPTIsdD4yJiZWKGUuY2hhckNvZGVBdCgyKSkmJihyPWk9MykpO2Vsc2UgaWYoVihzKSlyZXR1cm4gZTtmb3IobGV0IGE9dC0xO2E+PWk7LS1hKWlmKFYoZS5jaGFyQ29kZUF0KGEpKSl7aWYoIW8pe249YTticmVha319ZWxzZSBvPSExO2lmKG49PT0tMSl7aWYocj09PS0xKXJldHVyblwiLlwiO249cn1yZXR1cm4gZS5zbGljZSgwLG4pfWZ1bmN0aW9uIE94KGUsdD1cIlwiKXtpZih0IT09dm9pZCAwJiZ0eXBlb2YgdCE9XCJzdHJpbmdcIil0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtSZShlKTtsZXQgcj0wLG49LTEsbz0hMCxpO2lmKGUubGVuZ3RoPj0yKXtsZXQgcz1lLmNoYXJDb2RlQXQoMCk7anQocykmJmUuY2hhckNvZGVBdCgxKT09PTU4JiYocj0yKX1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQ9PT1lKXJldHVyblwiXCI7bGV0IHM9dC5sZW5ndGgtMSxhPS0xO2ZvcihpPWUubGVuZ3RoLTE7aT49cjstLWkpe2xldCBjPWUuY2hhckNvZGVBdChpKTtpZihWKGMpKXtpZighbyl7cj1pKzE7YnJlYWt9fWVsc2UgYT09PS0xJiYobz0hMSxhPWkrMSkscz49MCYmKGM9PT10LmNoYXJDb2RlQXQocyk/LS1zPT09LTEmJihuPWkpOihzPS0xLG49YSkpfXJldHVybiByPT09bj9uPWE6bj09PS0xJiYobj1lLmxlbmd0aCksZS5zbGljZShyLG4pfWVsc2V7Zm9yKGk9ZS5sZW5ndGgtMTtpPj1yOy0taSlpZihWKGUuY2hhckNvZGVBdChpKSkpe2lmKCFvKXtyPWkrMTticmVha319ZWxzZSBuPT09LTEmJihvPSExLG49aSsxKTtyZXR1cm4gbj09PS0xP1wiXCI6ZS5zbGljZShyLG4pfX1mdW5jdGlvbiBteChlKXtSZShlKTtsZXQgdD0wLHI9LTEsbj0wLG89LTEsaT0hMCxzPTA7ZS5sZW5ndGg+PTImJmUuY2hhckNvZGVBdCgxKT09PTU4JiZqdChlLmNoYXJDb2RlQXQoMCkpJiYodD1uPTIpO2ZvcihsZXQgYT1lLmxlbmd0aC0xO2E+PXQ7LS1hKXtsZXQgYz1lLmNoYXJDb2RlQXQoYSk7aWYoVihjKSl7aWYoIWkpe249YSsxO2JyZWFrfWNvbnRpbnVlfW89PT0tMSYmKGk9ITEsbz1hKzEpLGM9PT00Nj9yPT09LTE/cj1hOnMhPT0xJiYocz0xKTpyIT09LTEmJihzPS0xKX1yZXR1cm4gcj09PS0xfHxvPT09LTF8fHM9PT0wfHxzPT09MSYmcj09PW8tMSYmcj09PW4rMT9cIlwiOmUuc2xpY2UocixvKX1mdW5jdGlvbiBTeChlKXtpZihlPT09bnVsbHx8dHlwZW9mIGUhPVwib2JqZWN0XCIpdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgZX1gKTtyZXR1cm4gS2koXCJcXFxcXCIsZSl9ZnVuY3Rpb24gZ3goZSl7UmUoZSk7bGV0IHQ9e3Jvb3Q6XCJcIixkaXI6XCJcIixiYXNlOlwiXCIsZXh0OlwiXCIsbmFtZTpcIlwifSxyPWUubGVuZ3RoO2lmKHI9PT0wKXJldHVybiB0O2xldCBuPTAsbz1lLmNoYXJDb2RlQXQoMCk7aWYocj4xKXtpZihWKG8pKXtpZihuPTEsVihlLmNoYXJDb2RlQXQoMSkpKXtsZXQgZj0yLHA9Zjtmb3IoO2Y8ciYmIVYoZS5jaGFyQ29kZUF0KGYpKTsrK2YpO2lmKGY8ciYmZiE9PXApe2ZvcihwPWY7ZjxyJiZWKGUuY2hhckNvZGVBdChmKSk7KytmKTtpZihmPHImJmYhPT1wKXtmb3IocD1mO2Y8ciYmIVYoZS5jaGFyQ29kZUF0KGYpKTsrK2YpO2Y9PT1yP249ZjpmIT09cCYmKG49ZisxKX19fX1lbHNlIGlmKGp0KG8pJiZlLmNoYXJDb2RlQXQoMSk9PT01OClpZihuPTIscj4yKXtpZihWKGUuY2hhckNvZGVBdCgyKSkpe2lmKHI9PT0zKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O249M319ZWxzZSByZXR1cm4gdC5yb290PXQuZGlyPWUsdH1lbHNlIGlmKFYobykpcmV0dXJuIHQucm9vdD10LmRpcj1lLHQ7bj4wJiYodC5yb290PWUuc2xpY2UoMCxuKSk7bGV0IGk9LTEscz1uLGE9LTEsYz0hMCx1PWUubGVuZ3RoLTEsUj0wO2Zvcig7dT49bjstLXUpe2lmKG89ZS5jaGFyQ29kZUF0KHUpLFYobykpe2lmKCFjKXtzPXUrMTticmVha31jb250aW51ZX1hPT09LTEmJihjPSExLGE9dSsxKSxvPT09NDY/aT09PS0xP2k9dTpSIT09MSYmKFI9MSk6aSE9PS0xJiYoUj0tMSl9cmV0dXJuIGk9PT0tMXx8YT09PS0xfHxSPT09MHx8Uj09PTEmJmk9PT1hLTEmJmk9PT1zKzE/YSE9PS0xJiYodC5iYXNlPXQubmFtZT1lLnNsaWNlKHMsYSkpOih0Lm5hbWU9ZS5zbGljZShzLGkpLHQuYmFzZT1lLnNsaWNlKHMsYSksdC5leHQ9ZS5zbGljZShpLGEpKSxzPjAmJnMhPT1uP3QuZGlyPWUuc2xpY2UoMCxzLTEpOnQuZGlyPXQucm9vdCx0fWZ1bmN0aW9uIEF4KGUpe2lmKGU9ZSBpbnN0YW5jZW9mIFVSTD9lOm5ldyBVUkwoZSksZS5wcm90b2NvbCE9XCJmaWxlOlwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGEgZmlsZSBVUkwuXCIpO2xldCB0PWRlY29kZVVSSUNvbXBvbmVudChlLnBhdGhuYW1lLnJlcGxhY2UoL1xcLy9nLFwiXFxcXFwiKS5yZXBsYWNlKC8lKD8hWzAtOUEtRmEtZl17Mn0pL2csXCIlMjVcIikpLnJlcGxhY2UoL15cXFxcKihbQS1aYS16XTopKFxcXFx8JCkvLFwiJDFcXFxcXCIpO3JldHVybiBlLmhvc3RuYW1lIT1cIlwiJiYodD1gXFxcXFxcXFwke2UuaG9zdG5hbWV9JHt0fWApLHR9ZnVuY3Rpb24geHgoZSl7aWYoIXZFKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXCIpO2xldFssdCxyXT1lLm1hdGNoKC9eKD86Wy9cXFxcXXsyfShbXi9cXFxcXSspKD89Wy9cXFxcXSg/OlteL1xcXFxdfCQpKSk/KC4qKS8pLG49bmV3IFVSTChcImZpbGU6Ly8vXCIpO2lmKG4ucGF0aG5hbWU9WGkoci5yZXBsYWNlKC8lL2csXCIlMjVcIikpLHQhPW51bGwmJnQhPVwibG9jYWxob3N0XCImJihuLmhvc3RuYW1lPXQsIW4uaG9zdG5hbWUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGhvc3RuYW1lLlwiKTtyZXR1cm4gbn12YXIgcHgsUngsR2M9QSgoKT0+e1luKCk7JGMoKTtlcigpO3B4PVwiXFxcXFwiLFJ4PVwiO1wifSk7dmFyIFFuPXt9O2NlKFFuLHtiYXNlbmFtZTooKT0+Q3gsZGVsaW1pdGVyOigpPT5JeCxkaXJuYW1lOigpPT5ieCxleHRuYW1lOigpPT5MeCxmb3JtYXQ6KCk9Pnd4LGZyb21GaWxlVXJsOigpPT5VeCxpc0Fic29sdXRlOigpPT5WRSxqb2luOigpPT55eCxub3JtYWxpemU6KCk9PldFLHBhcnNlOigpPT5QeCxyZWxhdGl2ZTooKT0+VHgscmVzb2x2ZTooKT0+WWMsc2VwOigpPT5OeCx0b0ZpbGVVcmw6KCk9Pk14LHRvTmFtZXNwYWNlZFBhdGg6KCk9PkR4fSk7ZnVuY3Rpb24gWWMoLi4uZSl7bGV0IHQ9XCJcIixyPSExO2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PS0xJiYhcjtuLS0pe2xldCBvO2lmKG4+PTApbz1lW25dO2Vsc2V7bGV0e0Rlbm86aX09Z2xvYmFsVGhpcztpZih0eXBlb2YgaT8uY3dkIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlc29sdmVkIGEgcmVsYXRpdmUgcGF0aCB3aXRob3V0IGEgQ1dELlwiKTtvPWkuY3dkKCl9UmUobyksby5sZW5ndGghPT0wJiYodD1gJHtvfS8ke3R9YCxyPW8uY2hhckNvZGVBdCgwKT09PTQ3KX1yZXR1cm4gdD1ybih0LCFyLFwiL1wiLGppKSxyP3QubGVuZ3RoPjA/YC8ke3R9YDpcIi9cIjp0Lmxlbmd0aD4wP3Q6XCIuXCJ9ZnVuY3Rpb24gV0UoZSl7aWYoUmUoZSksZS5sZW5ndGg9PT0wKXJldHVyblwiLlwiO2xldCB0PWUuY2hhckNvZGVBdCgwKT09PTQ3LHI9ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpPT09NDc7cmV0dXJuIGU9cm4oZSwhdCxcIi9cIixqaSksZS5sZW5ndGg9PT0wJiYhdCYmKGU9XCIuXCIpLGUubGVuZ3RoPjAmJnImJihlKz1cIi9cIiksdD9gLyR7ZX1gOmV9ZnVuY3Rpb24gVkUoZSl7cmV0dXJuIFJlKGUpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PTQ3fWZ1bmN0aW9uIHl4KC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm5cIi5cIjtsZXQgdDtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjsrK3Ipe2xldCBvPWVbcl07UmUobyksby5sZW5ndGg+MCYmKHQ/dCs9YC8ke299YDp0PW8pfXJldHVybiB0P1dFKHQpOlwiLlwifWZ1bmN0aW9uIFR4KGUsdCl7aWYoUmUoZSksUmUodCksZT09PXR8fChlPVljKGUpLHQ9WWModCksZT09PXQpKXJldHVyblwiXCI7bGV0IHI9MSxuPWUubGVuZ3RoO2Zvcig7cjxuJiZlLmNoYXJDb2RlQXQocik9PT00NzsrK3IpO2xldCBvPW4tcixpPTEscz10Lmxlbmd0aDtmb3IoO2k8cyYmdC5jaGFyQ29kZUF0KGkpPT09NDc7KytpKTtsZXQgYT1zLWksYz1vPGE/bzphLHU9LTEsUj0wO2Zvcig7Ujw9YzsrK1Ipe2lmKFI9PT1jKXtpZihhPmMpe2lmKHQuY2hhckNvZGVBdChpK1IpPT09NDcpcmV0dXJuIHQuc2xpY2UoaStSKzEpO2lmKFI9PT0wKXJldHVybiB0LnNsaWNlKGkrUil9ZWxzZSBvPmMmJihlLmNoYXJDb2RlQXQocitSKT09PTQ3P3U9UjpSPT09MCYmKHU9MCkpO2JyZWFrfWxldCBwPWUuY2hhckNvZGVBdChyK1IpLGw9dC5jaGFyQ29kZUF0KGkrUik7aWYocCE9PWwpYnJlYWs7cD09PTQ3JiYodT1SKX1sZXQgZj1cIlwiO2ZvcihSPXIrdSsxO1I8PW47KytSKShSPT09bnx8ZS5jaGFyQ29kZUF0KFIpPT09NDcpJiYoZi5sZW5ndGg9PT0wP2YrPVwiLi5cIjpmKz1cIi8uLlwiKTtyZXR1cm4gZi5sZW5ndGg+MD9mK3Quc2xpY2UoaSt1KTooaSs9dSx0LmNoYXJDb2RlQXQoaSk9PT00NyYmKytpLHQuc2xpY2UoaSkpfWZ1bmN0aW9uIER4KGUpe3JldHVybiBlfWZ1bmN0aW9uIGJ4KGUpe2lmKFJlKGUpLGUubGVuZ3RoPT09MClyZXR1cm5cIi5cIjtsZXQgdD1lLmNoYXJDb2RlQXQoMCk9PT00NyxyPS0xLG49ITA7Zm9yKGxldCBvPWUubGVuZ3RoLTE7bz49MTstLW8paWYoZS5jaGFyQ29kZUF0KG8pPT09NDcpe2lmKCFuKXtyPW87YnJlYWt9fWVsc2Ugbj0hMTtyZXR1cm4gcj09PS0xP3Q/XCIvXCI6XCIuXCI6dCYmcj09PTE/XCIvL1wiOmUuc2xpY2UoMCxyKX1mdW5jdGlvbiBDeChlLHQ9XCJcIil7aWYodCE9PXZvaWQgMCYmdHlwZW9mIHQhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJleHRcIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7UmUoZSk7bGV0IHI9MCxuPS0xLG89ITAsaTtpZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQ9PT1lKXJldHVyblwiXCI7bGV0IHM9dC5sZW5ndGgtMSxhPS0xO2ZvcihpPWUubGVuZ3RoLTE7aT49MDstLWkpe2xldCBjPWUuY2hhckNvZGVBdChpKTtpZihjPT09NDcpe2lmKCFvKXtyPWkrMTticmVha319ZWxzZSBhPT09LTEmJihvPSExLGE9aSsxKSxzPj0wJiYoYz09PXQuY2hhckNvZGVBdChzKT8tLXM9PT0tMSYmKG49aSk6KHM9LTEsbj1hKSl9cmV0dXJuIHI9PT1uP249YTpuPT09LTEmJihuPWUubGVuZ3RoKSxlLnNsaWNlKHIsbil9ZWxzZXtmb3IoaT1lLmxlbmd0aC0xO2k+PTA7LS1pKWlmKGUuY2hhckNvZGVBdChpKT09PTQ3KXtpZighbyl7cj1pKzE7YnJlYWt9fWVsc2Ugbj09PS0xJiYobz0hMSxuPWkrMSk7cmV0dXJuIG49PT0tMT9cIlwiOmUuc2xpY2UocixuKX19ZnVuY3Rpb24gTHgoZSl7UmUoZSk7bGV0IHQ9LTEscj0wLG49LTEsbz0hMCxpPTA7Zm9yKGxldCBzPWUubGVuZ3RoLTE7cz49MDstLXMpe2xldCBhPWUuY2hhckNvZGVBdChzKTtpZihhPT09NDcpe2lmKCFvKXtyPXMrMTticmVha31jb250aW51ZX1uPT09LTEmJihvPSExLG49cysxKSxhPT09NDY/dD09PS0xP3Q9czppIT09MSYmKGk9MSk6dCE9PS0xJiYoaT0tMSl9cmV0dXJuIHQ9PT0tMXx8bj09PS0xfHxpPT09MHx8aT09PTEmJnQ9PT1uLTEmJnQ9PT1yKzE/XCJcIjplLnNsaWNlKHQsbil9ZnVuY3Rpb24gd3goZSl7aWYoZT09PW51bGx8fHR5cGVvZiBlIT1cIm9iamVjdFwiKXRocm93IG5ldyBUeXBlRXJyb3IoYFRoZSBcInBhdGhPYmplY3RcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGV9YCk7cmV0dXJuIEtpKFwiL1wiLGUpfWZ1bmN0aW9uIFB4KGUpe1JlKGUpO2xldCB0PXtyb290OlwiXCIsZGlyOlwiXCIsYmFzZTpcIlwiLGV4dDpcIlwiLG5hbWU6XCJcIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2xldCByPWUuY2hhckNvZGVBdCgwKT09PTQ3LG47cj8odC5yb290PVwiL1wiLG49MSk6bj0wO2xldCBvPS0xLGk9MCxzPS0xLGE9ITAsYz1lLmxlbmd0aC0xLHU9MDtmb3IoO2M+PW47LS1jKXtsZXQgUj1lLmNoYXJDb2RlQXQoYyk7aWYoUj09PTQ3KXtpZighYSl7aT1jKzE7YnJlYWt9Y29udGludWV9cz09PS0xJiYoYT0hMSxzPWMrMSksUj09PTQ2P289PT0tMT9vPWM6dSE9PTEmJih1PTEpOm8hPT0tMSYmKHU9LTEpfXJldHVybiBvPT09LTF8fHM9PT0tMXx8dT09PTB8fHU9PT0xJiZvPT09cy0xJiZvPT09aSsxP3MhPT0tMSYmKGk9PT0wJiZyP3QuYmFzZT10Lm5hbWU9ZS5zbGljZSgxLHMpOnQuYmFzZT10Lm5hbWU9ZS5zbGljZShpLHMpKTooaT09PTAmJnI/KHQubmFtZT1lLnNsaWNlKDEsbyksdC5iYXNlPWUuc2xpY2UoMSxzKSk6KHQubmFtZT1lLnNsaWNlKGksbyksdC5iYXNlPWUuc2xpY2UoaSxzKSksdC5leHQ9ZS5zbGljZShvLHMpKSxpPjA/dC5kaXI9ZS5zbGljZSgwLGktMSk6ciYmKHQuZGlyPVwiL1wiKSx0fWZ1bmN0aW9uIFV4KGUpe2lmKGU9ZSBpbnN0YW5jZW9mIFVSTD9lOm5ldyBVUkwoZSksZS5wcm90b2NvbCE9XCJmaWxlOlwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGEgZmlsZSBVUkwuXCIpO3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZS5wYXRobmFtZS5yZXBsYWNlKC8lKD8hWzAtOUEtRmEtZl17Mn0pL2csXCIlMjVcIikpfWZ1bmN0aW9uIE14KGUpe2lmKCFWRShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLlwiKTtsZXQgdD1uZXcgVVJMKFwiZmlsZTovLy9cIik7cmV0dXJuIHQucGF0aG5hbWU9WGkoZS5yZXBsYWNlKC8lL2csXCIlMjVcIikucmVwbGFjZSgvXFxcXC9nLFwiJTVDXCIpKSx0fXZhciBOeCxJeCxqYz1BKCgpPT57WW4oKTskYygpO054PVwiL1wiLEl4PVwiOlwifSk7dmFyIFFpPUEoKCk9PntQZSgpfSk7dmFyICRFPUEoKCk9PntRaSgpfSk7dmFyIEdFPUEoKCk9Pnt9KTt2YXIgQngsQjIsRjIsWUU9QSgoKT0+e1BlKCk7UWkoKTtHYygpO2pjKCk7Qng9cT9xbjpRbix7am9pbjpCMixub3JtYWxpemU6RjJ9PUJ4fSk7dmFyIEZ4LFYyLEgyLCQyLEcyLFkyLGpFLGoyLEtFLEsyLFgyLHEyLFEyLHoyLFoyLG5uLHppPUEoKCk9PntQZSgpO0djKCk7amMoKTskRSgpO1FpKCk7R0UoKTtZRSgpO0Z4PXE/cW46UW4se2Jhc2VuYW1lOlYyLGRlbGltaXRlcjpIMixkaXJuYW1lOiQyLGV4dG5hbWU6RzIsZm9ybWF0OlkyLGZyb21GaWxlVXJsOmpFLGlzQWJzb2x1dGU6ajIsam9pbjpLRSxub3JtYWxpemU6SzIscGFyc2U6WDIscmVsYXRpdmU6cTIscmVzb2x2ZTpRMixzZXA6ejIsdG9GaWxlVXJsOloyLHRvTmFtZXNwYWNlZFBhdGg6bm59PUZ4fSk7ZnVuY3Rpb24gdngoKXtpZihEZW5vLmJ1aWxkLmFyY2g9PVwieDg2XzY0XCIpcmV0dXJuXCJ4NjRcIjtpZihEZW5vLmJ1aWxkLmFyY2g9PVwiYWFyY2g2NFwiKXJldHVyblwiYXJtNjRcIjt0aHJvdyBFcnJvcihcInVucmVhY2hhYmxlXCIpfXZhciBxRSxRRSx6RSxGLFd4LFpFLEpFLGVfLHRfLHJfLEt0PUEoKCk9PntQZSgpO2tuKCk7cUU9dngoKSxRRT1EZW5vLmNoZGlyLHpFPURlbm8uY3dkLEY9aXQsV3g9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LnByb3RvdHlwZSksWkU9bmV3IFByb3h5KE9iamVjdCgpLHtnZXQ6KGUsdCk9PntpZih0eXBlb2YgdD09XCJzeW1ib2xcIilyZXR1cm4gZVt0XTtsZXQgcj1EZW5vLmVudi5nZXQodCk7cmV0dXJuIHJ8fChXeC5pbmNsdWRlcyh0KT9lW3RdOnIpfSxvd25LZXlzOigpPT5SZWZsZWN0Lm93bktleXMoRGVuby5lbnYudG9PYmplY3QoKSksZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOihlLHQpPT57bGV0IHI9RGVuby5lbnYudG9PYmplY3QoKTtpZih0IGluIERlbm8uZW52LnRvT2JqZWN0KCkpe2xldCBuPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07cmV0dXJuIHR5cGVvZiB0PT1cInN0cmluZ1wiJiYobi52YWx1ZT1yW3RdKSxufX0sc2V0KGUsdCxyKXtyZXR1cm4gRGVuby5lbnYuc2V0KFN0cmluZyh0KSxTdHJpbmcocikpLHJ9LGhhczooZSx0KT0+UmVmbGVjdC5vd25LZXlzKERlbm8uZW52LnRvT2JqZWN0KCkpLmluY2x1ZGVzKHQpfSksSkU9RGVuby5waWQsZV89cT9cIndpbjMyXCI6RGVuby5idWlsZC5vcyx0Xz1cInYxNi4xMS4xXCIscl89e25vZGU6XCIxNi4xMS4xXCIsdXY6XCIxLjQyLjBcIix6bGliOlwiMS4yLjExXCIsYnJvdGxpOlwiMS4wLjlcIixhcmVzOlwiMS4xNy4yXCIsbW9kdWxlczpcIjkzXCIsbmdodHRwMjpcIjEuNDUuMVwiLG5hcGk6XCI4XCIsbGxodHRwOlwiNi4wLjRcIixvcGVuc3NsOlwiMS4xLjFsXCIsY2xkcjpcIjM5LjBcIixpY3U6XCI2OS4xXCIsdHo6XCIyMDIxYVwiLHVuaWNvZGU6XCIxMy4wXCIsLi4uRGVuby52ZXJzaW9ufX0pO2Z1bmN0aW9uIGJlKGUsLi4udCl7bGV0IHI9YCR7bl99W2A7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspcis9ZVtuXSxuPHQubGVuZ3RoJiYocis9dFtuXSk7cmV0dXJuIHJ9dmFyIG5fLGl3LG9fPUEoKCk9PntcInVzZSBzdHJpY3RcIjtuXz1cIlxceDFCXCIsaXc9U3ltYm9sKFwia1N1YnN0cmluZ1NlYXJjaFwiKTtiZS5rRXNjYXBlPW5fO2JlLmtDbGVhclRvTGluZUJlZ2lubmluZz1iZWAxS2A7YmUua0NsZWFyVG9MaW5lRW5kPWJlYDBLYDtiZS5rQ2xlYXJMaW5lPWJlYDJLYDtiZS5rQ2xlYXJTY3JlZW5Eb3duPWJlYDBKYH0pO2Z1bmN0aW9uIGlfKGUsdCxyLG4pe2lmKG4hPT12b2lkIDAmJmx0KG4pLHR5cGVvZiByPT1cImZ1bmN0aW9uXCImJihuPXIscj12b2lkIDApLE51bWJlci5pc05hTih0KSl0aHJvdyBuZXcgYWUoXCJ4XCIsdCk7aWYoTnVtYmVyLmlzTmFOKHIpKXRocm93IG5ldyBhZShcInlcIixyKTtpZihlPT1udWxsfHx0eXBlb2YgdCE9XCJudW1iZXJcIiYmdHlwZW9mIHIhPVwibnVtYmVyXCIpcmV0dXJuIHR5cGVvZiBuPT1cImZ1bmN0aW9uXCImJnByb2Nlc3MubmV4dFRpY2sobixudWxsKSwhMDtpZih0eXBlb2YgdCE9XCJudW1iZXJcIil0aHJvdyBuZXcgU2k7bGV0IG89dHlwZW9mIHIhPVwibnVtYmVyXCI/YmVgJHt0KzF9R2A6YmVgJHtyKzF9OyR7dCsxfUhgO3JldHVybiBlLndyaXRlKG8sbil9ZnVuY3Rpb24gc18oZSx0LHIsbil7aWYobiE9PXZvaWQgMCYmbHQobiksZT09bnVsbHx8ISh0fHxyKSlyZXR1cm4gdHlwZW9mIG49PVwiZnVuY3Rpb25cIiYmcHJvY2Vzcy5uZXh0VGljayhuLG51bGwpLCEwO2xldCBvPVwiXCI7cmV0dXJuIHQ8MD9vKz1iZWAkey10fURgOnQ+MCYmKG8rPWJlYCR7dH1DYCkscjwwP28rPWJlYCR7LXJ9QWA6cj4wJiYobys9YmVgJHtyfUJgKSxlLndyaXRlKG8sbil9ZnVuY3Rpb24gYV8oZSx0LHIpe2lmKHIhPT12b2lkIDAmJmx0KHIpLGU9PW51bGwpcmV0dXJuIHR5cGVvZiByPT1cImZ1bmN0aW9uXCImJnByb2Nlc3MubmV4dFRpY2socixudWxsKSwhMDtsZXQgbj10PDA/JHg6dD4wP0d4OlZ4O3JldHVybiBlLndyaXRlKG4scil9ZnVuY3Rpb24gY18oZSx0KXtyZXR1cm4gdCE9PXZvaWQgMCYmbHQodCksZT09bnVsbD8odHlwZW9mIHQ9PVwiZnVuY3Rpb25cIiYmcHJvY2Vzcy5uZXh0VGljayh0LG51bGwpLCEwKTplLndyaXRlKEh4LHQpfXZhciBWeCxIeCwkeCxHeCxsXz1BKCgpPT57XCJ1c2Ugc3RyaWN0XCI7ZWUoKTtkZSgpO29fKCk7KHtrQ2xlYXJMaW5lOlZ4LGtDbGVhclNjcmVlbkRvd246SHgsa0NsZWFyVG9MaW5lQmVnaW5uaW5nOiR4LGtDbGVhclRvTGluZUVuZDpHeH09YmUpfSk7ZnVuY3Rpb24gem4oZSl7cmV0dXJuIHguZnJvbShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX12YXIgS2M9QSgoKT0+e3VlKCl9KTtmdW5jdGlvbiBZeChlKXtyZXR1cm4gZS5zZXRIZWFkZXImJnR5cGVvZiBlLmFib3J0PT1cImZ1bmN0aW9uXCJ9ZnVuY3Rpb24gangoZSl7cmV0dXJuIHR5cGVvZiBlLl9zZW50MTAwPT1cImJvb2xlYW5cIiYmdHlwZW9mIGUuX3JlbW92ZWRDb25uZWN0aW9uPT1cImJvb2xlYW5cIiYmdHlwZW9mIGUuX3JlbW92ZWRDb250TGVuPT1cImJvb2xlYW5cIiYmdHlwZW9mIGUuX3JlbW92ZWRURT09XCJib29sZWFuXCImJnR5cGVvZiBlLl9jbG9zZWQ9PVwiYm9vbGVhblwifWZ1bmN0aW9uIHVfKGUpe3JldHVybiB0eXBlb2YgZS5yZWFkYWJsZT09XCJib29sZWFuXCJ8fHR5cGVvZiBlLnJlYWRhYmxlRW5kZWQ9PVwiYm9vbGVhblwifHwhIWUuX3JlYWRhYmxlU3RhdGV9ZnVuY3Rpb24gZl8oZSl7cmV0dXJuIHR5cGVvZiBlLndyaXRhYmxlPT1cImJvb2xlYW5cInx8dHlwZW9mIGUud3JpdGFibGVFbmRlZD09XCJib29sZWFuXCJ8fCEhZS5fd3JpdGFibGVTdGF0ZX1mdW5jdGlvbiBLeChlKXtpZihlLndyaXRhYmxlRmluaXNoZWQpcmV0dXJuITA7bGV0IHQ9ZS5fd3JpdGFibGVTdGF0ZTtyZXR1cm4hdHx8dC5lcnJvcmVkPyExOnQuZmluaXNoZWR8fHQuZW5kZWQmJnQubGVuZ3RoPT09MH1mdW5jdGlvbiBxeChlKXtpZihlLnJlYWRhYmxlRW5kZWQpcmV0dXJuITA7bGV0IHQ9ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4hdHx8dC5lcnJvcmVkPyExOnQuZW5kRW1pdHRlZHx8dC5lbmRlZCYmdC5sZW5ndGg9PT0wfWZ1bmN0aW9uIFF4KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPT09Mj8ocj10LHQ9e30pOnQ9PW51bGw/dD17fTp2ZSh0LFwib3B0aW9uc1wiKSxkdChyLFwiY2FsbGJhY2tcIiksa3QodC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxyPWhyKHIpO2xldCBuPXQucmVhZGFibGV8fHQucmVhZGFibGUhPT0hMSYmdV8oZSksbz10LndyaXRhYmxlfHx0LndyaXRhYmxlIT09ITEmJmZfKGUpLGk9ZS5fd3JpdGFibGVTdGF0ZSxzPWUuX3JlYWRhYmxlU3RhdGUsYT1pfHxzLGM9KCk9PntlLndyaXRhYmxlfHxmKCl9LHU9angoZSl8fGEmJmEuYXV0b0Rlc3Ryb3kmJmEuZW1pdENsb3NlJiZhLmNsb3NlZD09PSExJiZ1XyhlKT09PW4mJmZfKGUpPT09byxSPWUud3JpdGFibGVGaW5pc2hlZHx8aSYmaS5maW5pc2hlZCxmPSgpPT57Uj0hMCxlLmRlc3Ryb3llZCYmKHU9ITEpLCEodSYmKCFlLnJlYWRhYmxlfHxuKSkmJighbnx8cCkmJnIuY2FsbChlKX0scD1lLnJlYWRhYmxlRW5kZWR8fHMmJnMuZW5kRW1pdHRlZCxsPSgpPT57cD0hMCxlLmRlc3Ryb3llZCYmKHU9ITEpLCEodSYmKCFlLndyaXRhYmxlfHxvKSkmJighb3x8UikmJnIuY2FsbChlKX0sXz1nPT57ci5jYWxsKGUsZyl9LEU9KCk9PntpZihuJiYhcCYmIXF4KGUpKXJldHVybiByLmNhbGwoZSxuZXcgSHQpO2lmKG8mJiFSJiYhS3goZSkpcmV0dXJuIHIuY2FsbChlLG5ldyBIdCk7ci5jYWxsKGUpfSxoPSgpPT57ZS5yZXEub24oXCJmaW5pc2hcIixmKX07WXgoZSk/KGUub24oXCJjb21wbGV0ZVwiLGYpLHV8fGUub24oXCJhYm9ydFwiLEUpLGUucmVxP2goKTplLm9uKFwicmVxdWVzdFwiLGgpKTpvJiYhaSYmKGUub24oXCJlbmRcIixjKSxlLm9uKFwiY2xvc2VcIixjKSksIXUmJnR5cGVvZiBlLmFib3J0ZWQ9PVwiYm9vbGVhblwiJiZlLm9uKFwiYWJvcnRlZFwiLEUpLGUub24oXCJlbmRcIixsKSxlLm9uKFwiZmluaXNoXCIsZiksdC5lcnJvciE9PSExJiZlLm9uKFwiZXJyb3JcIixfKSxlLm9uKFwiY2xvc2VcIixFKTtsZXQgUz0haSYmIXMmJmUuX2Nsb3NlZD09PSEwfHxpJiZpLmNsb3NlZHx8cyYmcy5jbG9zZWR8fGkmJmkuZXJyb3JFbWl0dGVkfHxzJiZzLmVycm9yRW1pdHRlZHx8cyYmZS5yZXEmJmUuYWJvcnRlZHx8KCFpfHwhdXx8dHlwZW9mIGkuY2xvc2VkIT1cImJvb2xlYW5cIikmJighc3x8IXV8fHR5cGVvZiBzLmNsb3NlZCE9XCJib29sZWFuXCIpJiYoIW98fGkmJmkuZmluaXNoZWQpJiYoIW58fHMmJnMuZW5kRW1pdHRlZCk7UyYmRigoKT0+e3IoKX0pO2xldCBkPSgpPT57cj1YeCxlLnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRlZFwiLEUpLGUucmVtb3ZlTGlzdGVuZXIoXCJjb21wbGV0ZVwiLGYpLGUucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydFwiLEUpLGUucmVtb3ZlTGlzdGVuZXIoXCJyZXF1ZXN0XCIsaCksZS5yZXEmJmUucmVxLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsZiksZS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGMpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGMpLGUucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixmKSxlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsbCksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsXyksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsRSl9O2lmKHQuc2lnbmFsJiYhUyl7bGV0IGc9KCk9PntsZXQgTz1yO2QoKSxPLmNhbGwoZSxuZXcgaGUpfTtpZih0LnNpZ25hbC5hYm9ydGVkKUYoZyk7ZWxzZXtsZXQgTz1yO3I9aHIoKC4uLm0pPT57dC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZyksTy5hcHBseShlLG0pfSksdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsZyl9fXJldHVybiBkfXZhciBYeCxKZSxvbj1BKCgpPT57ZWUoKTt6KCk7ZGUoKTtLdCgpO1h4PSgpPT57fTtKZT1ReH0pO2Z1bmN0aW9uIFp4KGUpe3JldHVybiEhKGUmJnR5cGVvZiBlLnBpcGU9PVwiZnVuY3Rpb25cIil9ZnVuY3Rpb24gWGMoZSx0KXtpZih6eChlLFwic2lnbmFsXCIpLCFaeCh0KSl0aHJvdyBuZXcgQihcInN0cmVhbVwiLFwic3RyZWFtLlN0cmVhbVwiLHQpO3JldHVybiBabihlLHQpfWZ1bmN0aW9uIFpuKGUsdCl7aWYodHlwZW9mIGUhPVwib2JqZWN0XCJ8fCEoXCJhYm9ydGVkXCJpbiBlKSlyZXR1cm4gdDtsZXQgcj0oKT0+e3QuZGVzdHJveShuZXcgaGUpfTtyZXR1cm4gZS5hYm9ydGVkP3IoKTooZS5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixyKSxKZSh0LCgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLHIpKSksdH12YXIgengsWmk9QSgoKT0+e2VlKCk7b24oKTt6eD0oZSx0KT0+e2lmKHR5cGVvZiBlIT1cIm9iamVjdFwifHwhKFwiYWJvcnRlZFwiaW4gZSkpdGhyb3cgbmV3IEIodCxcIkFib3J0U2lnbmFsXCIsZSl9fSk7ZnVuY3Rpb24gX18oZSx0LHIpe2UmJihlLnN0YWNrLHQmJiF0LmVycm9yZWQmJih0LmVycm9yZWQ9ZSksciYmIXIuZXJyb3JlZCYmKHIuZXJyb3JlZD1lKSl9ZnVuY3Rpb24gSngoZSx0KXtsZXQgcj10aGlzLl9yZWFkYWJsZVN0YXRlLG49dGhpcy5fd3JpdGFibGVTdGF0ZSxvPW58fHI7cmV0dXJuIG4mJm4uZGVzdHJveWVkfHxyJiZyLmRlc3Ryb3llZD8odHlwZW9mIHQ9PVwiZnVuY3Rpb25cIiYmdCgpLHRoaXMpOihfXyhlLG4sciksbiYmKG4uZGVzdHJveWVkPSEwKSxyJiYoci5kZXN0cm95ZWQ9ITApLG8uY29uc3RydWN0ZWQ/cF8odGhpcyxlLHQpOnRoaXMub25jZShFXyxmdW5jdGlvbihpKXtwXyh0aGlzLENpKGksZSksdCl9KSx0aGlzKX1mdW5jdGlvbiBwXyhlLHQscil7bGV0IG49ITE7ZnVuY3Rpb24gbyhpKXtpZihuKXJldHVybjtuPSEwO2xldCBzPWUuX3JlYWRhYmxlU3RhdGUsYT1lLl93cml0YWJsZVN0YXRlO19fKGksYSxzKSxhJiYoYS5jbG9zZWQ9ITApLHMmJihzLmNsb3NlZD0hMCksdHlwZW9mIHI9PVwiZnVuY3Rpb25cIiYmcihpKSxpP0YoZU4sZSxpKTpGKGRfLGUpfXRyeXtsZXQgaT1lLl9kZXN0cm95KHR8fG51bGwsbyk7aWYoaSE9bnVsbCl7bGV0IHM9aS50aGVuO3R5cGVvZiBzPT1cImZ1bmN0aW9uXCImJnMuY2FsbChpLGZ1bmN0aW9uKCl7RihvLG51bGwpfSxmdW5jdGlvbihhKXtGKG8sYSl9KX19Y2F0Y2goaSl7byhpKX19ZnVuY3Rpb24gZU4oZSx0KXtRYyhlLHQpLGRfKGUpfWZ1bmN0aW9uIGRfKGUpe2xldCB0PWUuX3JlYWRhYmxlU3RhdGUscj1lLl93cml0YWJsZVN0YXRlO3ImJihyLmNsb3NlRW1pdHRlZD0hMCksdCYmKHQuY2xvc2VFbWl0dGVkPSEwKSwociYmci5lbWl0Q2xvc2V8fHQmJnQuZW1pdENsb3NlKSYmZS5lbWl0KFwiY2xvc2VcIil9ZnVuY3Rpb24gUWMoZSx0KXtsZXQgcj1lLl9yZWFkYWJsZVN0YXRlLG49ZS5fd3JpdGFibGVTdGF0ZTtuJiZuLmVycm9yRW1pdHRlZHx8ciYmci5lcnJvckVtaXR0ZWR8fChuJiYobi5lcnJvckVtaXR0ZWQ9ITApLHImJihyLmVycm9yRW1pdHRlZD0hMCksZS5lbWl0KFwiZXJyb3JcIix0KSl9ZnVuY3Rpb24gdE4oKXtsZXQgZT10aGlzLl9yZWFkYWJsZVN0YXRlLHQ9dGhpcy5fd3JpdGFibGVTdGF0ZTtlJiYoZS5jb25zdHJ1Y3RlZD0hMCxlLmNsb3NlZD0hMSxlLmNsb3NlRW1pdHRlZD0hMSxlLmRlc3Ryb3llZD0hMSxlLmVycm9yZWQ9bnVsbCxlLmVycm9yRW1pdHRlZD0hMSxlLnJlYWRpbmc9ITEsZS5lbmRlZD0hMSxlLmVuZEVtaXR0ZWQ9ITEpLHQmJih0LmNvbnN0cnVjdGVkPSEwLHQuZGVzdHJveWVkPSExLHQuY2xvc2VkPSExLHQuY2xvc2VFbWl0dGVkPSExLHQuZXJyb3JlZD1udWxsLHQuZXJyb3JFbWl0dGVkPSExLHQuZW5kZWQ9ITEsdC5lbmRpbmc9ITEsdC5maW5hbENhbGxlZD0hMSx0LnByZWZpbmlzaGVkPSExLHQuZmluaXNoZWQ9ITEpfWZ1bmN0aW9uIHpjKGUsdCxyKXtsZXQgbj1lLl9yZWFkYWJsZVN0YXRlLG89ZS5fd3JpdGFibGVTdGF0ZTtpZihvJiZvLmRlc3Ryb3llZHx8biYmbi5kZXN0cm95ZWQpcmV0dXJuIHRoaXM7biYmbi5hdXRvRGVzdHJveXx8byYmby5hdXRvRGVzdHJveT9lLmRlc3Ryb3kodCk6dCYmKHQuc3RhY2ssbyYmIW8uZXJyb3JlZCYmKG8uZXJyb3JlZD10KSxuJiYhbi5lcnJvcmVkJiYobi5lcnJvcmVkPXQpLHI/RihRYyxlLHQpOlFjKGUsdCkpfWZ1bmN0aW9uIHJOKGUsdCl7aWYodHlwZW9mIGUuX2NvbnN0cnVjdCE9XCJmdW5jdGlvblwiKXJldHVybjtsZXQgcj1lLl9yZWFkYWJsZVN0YXRlLG49ZS5fd3JpdGFibGVTdGF0ZTtyJiYoci5jb25zdHJ1Y3RlZD0hMSksbiYmKG4uY29uc3RydWN0ZWQ9ITEpLGUub25jZShxYyx0KSwhKGUubGlzdGVuZXJDb3VudChxYyk+MSkmJkYobk4sZSl9ZnVuY3Rpb24gbk4oZSl7bGV0IHQ9ITE7ZnVuY3Rpb24gcihuKXtpZih0KXt6YyhlLG4/P25ldyB4cik7cmV0dXJufXQ9ITA7bGV0IG89ZS5fcmVhZGFibGVTdGF0ZSxpPWUuX3dyaXRhYmxlU3RhdGUscz1pfHxvO28mJihvLmNvbnN0cnVjdGVkPSEwKSxpJiYoaS5jb25zdHJ1Y3RlZD0hMCkscy5kZXN0cm95ZWQ/ZS5lbWl0KEVfLG4pOm4/emMoZSxuLCEwKTpGKG9OLGUpfXRyeXtsZXQgbj1lLl9jb25zdHJ1Y3Qocik7aWYobiE9bnVsbCl7bGV0IG89bi50aGVuO3R5cGVvZiBvPT1cImZ1bmN0aW9uXCImJm8uY2FsbChuLGZ1bmN0aW9uKCl7RihyLG51bGwpfSxmdW5jdGlvbihpKXtGKHIsaSl9KX19Y2F0Y2gobil7cihuKX19ZnVuY3Rpb24gb04oZSl7ZS5lbWl0KHFjKX1mdW5jdGlvbiBSXyhlKXtyZXR1cm4gZSYmZS5zZXRIZWFkZXImJnR5cGVvZiBlLmFib3J0PT1cImZ1bmN0aW9uXCJ9ZnVuY3Rpb24gUnQoZSx0KXtpZighIWUpe2lmKFJfKGUpKXJldHVybiBlLmFib3J0KCk7aWYoUl8oZS5yZXEpKXJldHVybiBlLnJlcS5hYm9ydCgpO2lmKHR5cGVvZiBlLmRlc3Ryb3k9PVwiZnVuY3Rpb25cIilyZXR1cm4gZS5kZXN0cm95KHQpO2lmKHR5cGVvZiBlLmNsb3NlPT1cImZ1bmN0aW9uXCIpcmV0dXJuIGUuY2xvc2UoKX19dmFyIEVfLHFjLGplLHlyPUEoKCk9PntlZSgpO0t0KCk7RV89U3ltYm9sKFwia0Rlc3Ryb3lcIikscWM9U3ltYm9sKFwia0NvbnN0cnVjdFwiKTtqZT17Y29uc3RydWN0OnJOLGRlc3Ryb3llcjpSdCxkZXN0cm95Okp4LHVuZGVzdHJveTp0TixlcnJvck9yRGVzdHJveTp6Y319KTtmdW5jdGlvbiBDdChlKXtyZXR1cm4hIShlJiZ0eXBlb2YgZS5waXBlPT1cImZ1bmN0aW9uXCImJnR5cGVvZiBlLm9uPT1cImZ1bmN0aW9uXCImJighZS5fd3JpdGFibGVTdGF0ZXx8ZS5fcmVhZGFibGVTdGF0ZT8ucmVhZGFibGUhPT0hMSkmJighZS5fd3JpdGFibGVTdGF0ZXx8ZS5fcmVhZGFibGVTdGF0ZSkpfWZ1bmN0aW9uIEpuKGUpe3JldHVybiEhKGUmJnR5cGVvZiBlLndyaXRlPT1cImZ1bmN0aW9uXCImJnR5cGVvZiBlLm9uPT1cImZ1bmN0aW9uXCImJighZS5fcmVhZGFibGVTdGF0ZXx8ZS5fd3JpdGFibGVTdGF0ZT8ud3JpdGFibGUhPT0hMSkpfWZ1bmN0aW9uIGhfKGUpe3JldHVybiEhKGUmJnR5cGVvZiBlLnBpcGU9PVwiZnVuY3Rpb25cIiYmZS5fcmVhZGFibGVTdGF0ZSYmdHlwZW9mIGUub249PVwiZnVuY3Rpb25cIiYmdHlwZW9mIGUud3JpdGU9PVwiZnVuY3Rpb25cIil9ZnVuY3Rpb24gTHQoZSl7cmV0dXJuIGUmJihlLl9yZWFkYWJsZVN0YXRlfHxlLl93cml0YWJsZVN0YXRlfHx0eXBlb2YgZS53cml0ZT09XCJmdW5jdGlvblwiJiZ0eXBlb2YgZS5vbj09XCJmdW5jdGlvblwifHx0eXBlb2YgZS5waXBlPT1cImZ1bmN0aW9uXCImJnR5cGVvZiBlLm9uPT1cImZ1bmN0aW9uXCIpfWZ1bmN0aW9uIE90KGUsdCl7cmV0dXJuIGU9PW51bGw/ITE6dD09PSEwP3R5cGVvZiBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT09XCJmdW5jdGlvblwiOnQ9PT0hMT90eXBlb2YgZVtTeW1ib2wuaXRlcmF0b3JdPT1cImZ1bmN0aW9uXCI6dHlwZW9mIGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPT1cImZ1bmN0aW9uXCJ8fHR5cGVvZiBlW1N5bWJvbC5pdGVyYXRvcl09PVwiZnVuY3Rpb25cIn1mdW5jdGlvbiBPXyhlKXtpZighTHQoZSkpcmV0dXJuIG51bGw7bGV0IHQ9ZS5fd3JpdGFibGVTdGF0ZSxyPWUuX3JlYWRhYmxlU3RhdGUsbj10fHxyO3JldHVybiEhKGUuZGVzdHJveWVkfHxuPy5kZXN0cm95ZWQpfWZ1bmN0aW9uIGVvKGUpe2lmKCFKbihlKSlyZXR1cm4gbnVsbDtpZihlLndyaXRhYmxlRW5kZWQ9PT0hMClyZXR1cm4hMDtsZXQgdD1lLl93cml0YWJsZVN0YXRlO3JldHVybiB0Py5lcnJvcmVkPyExOnR5cGVvZiB0Py5lbmRlZCE9XCJib29sZWFuXCI/bnVsbDp0LmVuZGVkfWZ1bmN0aW9uIEppKGUpe2lmKCFDdChlKSlyZXR1cm4gbnVsbDtpZihlLnJlYWRhYmxlRW5kZWQ9PT0hMClyZXR1cm4hMDtsZXQgdD1lLl9yZWFkYWJsZVN0YXRlO3JldHVybiF0fHx0LmVycm9yZWQ/ITE6dHlwZW9mIHQ/LmVuZGVkIT1cImJvb2xlYW5cIj9udWxsOnQuZW5kZWR9ZnVuY3Rpb24gc04oZSx0KXtpZighQ3QoZSkpcmV0dXJuIG51bGw7bGV0IHI9ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gcj8uZXJyb3JlZD8hMTp0eXBlb2Ygcj8uZW5kRW1pdHRlZCE9XCJib29sZWFuXCI/bnVsbDohIShyLmVuZEVtaXR0ZWR8fHQ9PT0hMSYmci5lbmRlZD09PSEwJiZyLmxlbmd0aD09PTApfWZ1bmN0aW9uIG1fKGUpe3JldHVybiEhKGUmJihlLnJlYWRhYmxlRGlkUmVhZHx8ZS5yZWFkYWJsZUFib3J0ZWR8fGVbaU5dKSl9ZnVuY3Rpb24gdG8oZSl7bGV0IHQ9Q3QoZSk7cmV0dXJuIHQ9PT1udWxsfHx0eXBlb2YgZT8ucmVhZGFibGUhPVwiYm9vbGVhblwiP251bGw6T18oZSk/ITE6dCYmZS5yZWFkYWJsZSYmIXNOKGUpfWZ1bmN0aW9uIHJvKGUpe2xldCB0PUpuKGUpO3JldHVybiB0PT09bnVsbHx8dHlwZW9mIGU/LndyaXRhYmxlIT1cImJvb2xlYW5cIj9udWxsOk9fKGUpPyExOnQmJmUud3JpdGFibGUmJiFlbyhlKX12YXIgaU4sYXI9QSgoKT0+e2lOPVN5bWJvbChcImtJc0Rpc3R1cmJlZFwiKX0pO3ZhciB3dCxlcz1BKCgpPT57d3Q9e319KTtmdW5jdGlvbiBTXyhlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEJsb2J9dmFyIGdfPUEoKCk9Pnt9KTtmdW5jdGlvbiBhTihlLHQscil7bGV0IG47aWYodHlwZW9mIHQ9PVwic3RyaW5nXCJ8fHQgaW5zdGFuY2VvZiB4KXJldHVybiBuZXcgZSh7b2JqZWN0TW9kZTohMCwuLi5yLHJlYWQoKXt0aGlzLnB1c2godCksdGhpcy5wdXNoKG51bGwpfX0pO2xldCBvO2lmKHQmJnRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKW89ITAsbj10W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO2Vsc2UgaWYodCYmdFtTeW1ib2wuaXRlcmF0b3JdKW89ITEsbj10W1N5bWJvbC5pdGVyYXRvcl0oKTtlbHNlIHRocm93IG5ldyBCKFwiaXRlcmFibGVcIixbXCJJdGVyYWJsZVwiXSx0KTtsZXQgaT1uZXcgZSh7b2JqZWN0TW9kZTohMCxoaWdoV2F0ZXJNYXJrOjEsLi4ucn0pLHM9ITE7aS5fcmVhZD1mdW5jdGlvbigpe3N8fChzPSEwLGMoKSl9LGkuX2Rlc3Ryb3k9ZnVuY3Rpb24odSxSKXthKHUpLnRoZW4oKCk9PkYoUix1KSxmPT5GKFIsZnx8dSkpfTthc3luYyBmdW5jdGlvbiBhKHUpe2xldCBSPXUhPW51bGwsZj10eXBlb2Ygbi50aHJvdz09XCJmdW5jdGlvblwiO2lmKFImJmYpe2xldHt2YWx1ZTpwLGRvbmU6bH09YXdhaXQgbi50aHJvdyh1KTtpZihhd2FpdCBwLGwpcmV0dXJufWlmKHR5cGVvZiBuLnJldHVybj09XCJmdW5jdGlvblwiKXtsZXR7dmFsdWU6cH09YXdhaXQgbi5yZXR1cm4oKTthd2FpdCBwfX1hc3luYyBmdW5jdGlvbiBjKCl7Zm9yKDs7KXt0cnl7bGV0e3ZhbHVlOnUsZG9uZTpSfT1vP2F3YWl0IG4ubmV4dCgpOm4ubmV4dCgpO2lmKFIpaS5wdXNoKG51bGwpO2Vsc2V7bGV0IGY9dSYmdHlwZW9mIHUudGhlbj09XCJmdW5jdGlvblwiP2F3YWl0IHU6dTtpZihmPT09bnVsbCl0aHJvdyBzPSExLG5ldyBxcjtpZihpLnB1c2goZikpY29udGludWU7cz0hMX19Y2F0Y2godSl7aS5kZXN0cm95KHUpfWJyZWFrfX1yZXR1cm4gaX12YXIgbm8sWmM9QSgoKT0+e3VlKCk7ZWUoKTtLdCgpO25vPWFOfSk7ZnVuY3Rpb24gY04oZSx0LHIpe3JldHVybiBlLmhpZ2hXYXRlck1hcmshPW51bGw/ZS5oaWdoV2F0ZXJNYXJrOnQ/ZVtyXTpudWxsfWZ1bmN0aW9uIG9vKGUpe3JldHVybiBlPzE2OjE2KjEwMjR9ZnVuY3Rpb24gdHMoZSx0LHIsbil7bGV0IG89Y04odCxuLHIpO2lmKG8hPW51bGwpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHxvPDApe2xldCBpPW4/YG9wdGlvbnMuJHtyfWA6XCJvcHRpb25zLmhpZ2hXYXRlck1hcmtcIjt0aHJvdyBuZXcgYWUoaSxvKX1yZXR1cm4gTWF0aC5mbG9vcihvKX1yZXR1cm4gb28oZS5vYmplY3RNb2RlKX12YXIgSmM9QSgoKT0+e2VlKCl9KTtmdW5jdGlvbiBqKGUpe3B0LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBycyhlLHQscil7aWYodHlwZW9mIGUucHJlcGVuZExpc3RlbmVyPT1cImZ1bmN0aW9uXCIpcmV0dXJuIGUucHJlcGVuZExpc3RlbmVyKHQscik7IWUuX2V2ZW50c3x8IWUuX2V2ZW50c1t0XT9lLm9uKHQscik6QXJyYXkuaXNBcnJheShlLl9ldmVudHNbdF0pP2UuX2V2ZW50c1t0XS51bnNoaWZ0KHIpOmUuX2V2ZW50c1t0XT1bcixlLl9ldmVudHNbdF1dfXZhciBucz1BKCgpPT57dG4oKTtPYmplY3Quc2V0UHJvdG90eXBlT2Yoai5wcm90b3R5cGUscHQucHJvdG90eXBlKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoaixwdCk7ai5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihlLHQpe2xldCByPXRoaXM7ZnVuY3Rpb24gbihSKXtlLndyaXRhYmxlJiZlLndyaXRlKFIpPT09ITEmJnIucGF1c2UmJnIucGF1c2UoKX1yLm9uKFwiZGF0YVwiLG4pO2Z1bmN0aW9uIG8oKXtyLnJlYWRhYmxlJiZyLnJlc3VtZSYmci5yZXN1bWUoKX1lLm9uKFwiZHJhaW5cIixvKSwhZS5faXNTdGRpbyYmKCF0fHx0LmVuZCE9PSExKSYmKHIub24oXCJlbmRcIixzKSxyLm9uKFwiY2xvc2VcIixhKSk7bGV0IGk9ITE7ZnVuY3Rpb24gcygpe2l8fChpPSEwLGUuZW5kKCkpfWZ1bmN0aW9uIGEoKXtpfHwoaT0hMCx0eXBlb2YgZS5kZXN0cm95PT1cImZ1bmN0aW9uXCImJmUuZGVzdHJveSgpKX1mdW5jdGlvbiBjKFIpe3UoKSxwdC5saXN0ZW5lckNvdW50KHRoaXMsXCJlcnJvclwiKT09PTAmJnRoaXMuZW1pdChcImVycm9yXCIsUil9cnMocixcImVycm9yXCIsYykscnMoZSxcImVycm9yXCIsYyk7ZnVuY3Rpb24gdSgpe3IucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsbiksZS5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIsbyksci5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLHMpLHIucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGEpLHIucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGMpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGMpLHIucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIix1KSxyLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIix1KSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIix1KX1yZXR1cm4gci5vbihcImVuZFwiLHUpLHIub24oXCJjbG9zZVwiLHUpLGUub24oXCJjbG9zZVwiLHUpLGUuZW1pdChcInBpcGVcIixyKSxlfX0pO2Z1bmN0aW9uIG9sKGUpe2xldCB0PWFwKGU/P251bGwpO2lmKHQmJnQgaW4gQV8mJlUodCksIXQmJnR5cGVvZiBlPT1cInN0cmluZ1wiJiZlLnRvTG93ZXJDYXNlKCkhPT1cInJhd1wiKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBlbmNvZGluZzogJHtlfWApO3JldHVybiBTdHJpbmcodCl9ZnVuY3Rpb24gZWwoZSl7cmV0dXJuIGU8PTEyNz8wOmU+PjU9PT02PzI6ZT4+ND09PTE0PzM6ZT4+Mz09PTMwPzQ6ZT4+Nj09PTI/LTE6LTJ9ZnVuY3Rpb24gbE4oZSx0LHIpe2xldCBuPXQubGVuZ3RoLTE7aWYobjxyKXJldHVybiAwO2xldCBvPWVsKHRbbl0pO3JldHVybiBvPj0wPyhvPjAmJihlLmxhc3ROZWVkPW8tMSksbyk6LS1uPHJ8fG89PT0tMj8wOihvPWVsKHRbbl0pLG8+PTA/KG8+MCYmKGUubGFzdE5lZWQ9by0yKSxvKTotLW48cnx8bz09PS0yPzA6KG89ZWwodFtuXSksbz49MD8obz4wJiYobz09PTI/bz0wOmUubGFzdE5lZWQ9by0zKSxvKTowKSl9ZnVuY3Rpb24gdU4oZSx0KXtpZigodFswXSYxOTIpIT09MTI4KXJldHVybiBlLmxhc3ROZWVkPTAsXCJcXHVGRkZEXCI7aWYoZS5sYXN0TmVlZD4xJiZ0Lmxlbmd0aD4xKXtpZigodFsxXSYxOTIpIT09MTI4KXJldHVybiBlLmxhc3ROZWVkPTEsXCJcXHVGRkZEXCI7aWYoZS5sYXN0TmVlZD4yJiZ0Lmxlbmd0aD4yJiYodFsyXSYxOTIpIT09MTI4KXJldHVybiBlLmxhc3ROZWVkPTIsXCJcXHVGRkZEXCJ9fWZ1bmN0aW9uIGZOKGUpe2xldCB0PXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQscj11Tih0aGlzLGUpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7aWYodGhpcy5sYXN0TmVlZDw9ZS5sZW5ndGgpcmV0dXJuIGUuY29weSh0aGlzLmxhc3RDaGFyLHQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7ZS5jb3B5KHRoaXMubGFzdENoYXIsdCwwLGUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1lLmxlbmd0aH1mdW5jdGlvbiBwTihlKXtpZih0aGlzLmxhc3ROZWVkPD1lLmxlbmd0aClyZXR1cm4gZS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtlLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsZS5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPWUubGVuZ3RofWZ1bmN0aW9uIHhfKGUsdCl7bGV0IHI9bE4odGhpcyxlLHQpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBlLnRvU3RyaW5nKFwidXRmOFwiLHQpO3RoaXMubGFzdFRvdGFsPXI7bGV0IG49ZS5sZW5ndGgtKHItdGhpcy5sYXN0TmVlZCk7cmV0dXJuIGUuY29weSh0aGlzLmxhc3RDaGFyLDAsbiksZS50b1N0cmluZyhcInV0ZjhcIix0LG4pfWZ1bmN0aW9uIFJOKGUpe2xldCB0PWUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6XCJcIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90K1wiXFx1RkZGRFwiOnR9ZnVuY3Rpb24gTl8oZSl7aWYodHlwZW9mIGU9PVwic3RyaW5nXCIpcmV0dXJuIGU7aWYoZS5sZW5ndGg9PT0wKXJldHVyblwiXCI7bGV0IHQscjtpZih0aGlzLmxhc3ROZWVkKXtpZih0PXRoaXMuZmlsbExhc3QoZSksdD09PXZvaWQgMClyZXR1cm5cIlwiO3I9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSByPTA7cmV0dXJuIHI8ZS5sZW5ndGg/dD90K3RoaXMudGV4dChlLHIpOnRoaXMudGV4dChlLHIpOnR8fFwiXCJ9ZnVuY3Rpb24gRU4oZSx0KXtsZXQgcj0oZS5sZW5ndGgtdCklMztyZXR1cm4gcj09PTA/ZS50b1N0cmluZyhcImJhc2U2NFwiLHQpOih0aGlzLmxhc3ROZWVkPTMtcix0aGlzLmxhc3RUb3RhbD0zLHI9PT0xP3RoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09ZVtlLmxlbmd0aC0xXSksZS50b1N0cmluZyhcImJhc2U2NFwiLHQsZS5sZW5ndGgtcikpfWZ1bmN0aW9uIF9OKGUpe2xldCB0PWUmJmUubGVuZ3RoP3RoaXMud3JpdGUoZSk6XCJcIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD90K3RoaXMubGFzdENoYXIudG9TdHJpbmcoXCJiYXNlNjRcIiwwLDMtdGhpcy5sYXN0TmVlZCk6dH1mdW5jdGlvbiBkTihlKXtyZXR1cm4gdHlwZW9mIGU9PVwic3RyaW5nXCI/ZTplLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIGhOKGUpe3JldHVybiBlJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCJ9dmFyIEFfLGlvLHRsLHJsLG5sLFRyLFV3LElfPUEoKCk9Pnt1ZSgpO3llKCk7QV89KG49PihuW24uYXNjaWk9MF09XCJhc2NpaVwiLG5bbi5sYXRpbjE9MV09XCJsYXRpbjFcIixuW24udXRmMTZsZT0yXT1cInV0ZjE2bGVcIixuKSkoQV98fHt9KTtpbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuZW5jb2Rpbmc9dDt0aGlzLmxhc3ROZWVkPTA7dGhpcy5sYXN0VG90YWw9MDt0aGlzLmxhc3RDaGFyPXguYWxsb2NVbnNhZmUocil9fSx0bD1jbGFzcyBleHRlbmRzIGlve2NvbnN0cnVjdG9yKHIpe3N1cGVyKG9sKHIpLDMpO3RoaXMuZW5kPV9OO3RoaXMuZmlsbExhc3Q9cE47dGhpcy50ZXh0PUVOO3RoaXMud3JpdGU9Tl99fSxybD1jbGFzcyBleHRlbmRzIGlve2NvbnN0cnVjdG9yKHIpe3N1cGVyKG9sKHIpLDQpO3RoaXMuZW5kPWhOO3RoaXMuZmlsbExhc3Q9dm9pZCAwO3RoaXMudGV4dD14Xzt0aGlzLndyaXRlPWROfX0sbmw9Y2xhc3MgZXh0ZW5kcyBpb3tjb25zdHJ1Y3RvcihyKXtzdXBlcihvbChyKSw0KTt0aGlzLmVuZD1STjt0aGlzLmZpbGxMYXN0PWZOO3RoaXMudGV4dD14Xzt0aGlzLndyaXRlPU5ffX0sVHI9Y2xhc3N7Y29uc3RydWN0b3IodCl7bGV0IHI7c3dpdGNoKHQpe2Nhc2VcInV0ZjhcIjpyPW5ldyBubCh0KTticmVhaztjYXNlXCJiYXNlNjRcIjpyPW5ldyB0bCh0KTticmVhaztkZWZhdWx0OnI9bmV3IHJsKHQpfXRoaXMuZW5jb2Rpbmc9ci5lbmNvZGluZyx0aGlzLmVuZD1yLmVuZCx0aGlzLmZpbGxMYXN0PXIuZmlsbExhc3QsdGhpcy5sYXN0Q2hhcj1yLmxhc3RDaGFyLHRoaXMubGFzdE5lZWQ9ci5sYXN0TmVlZCx0aGlzLmxhc3RUb3RhbD1yLmxhc3RUb3RhbCx0aGlzLnRleHQ9ci50ZXh0LHRoaXMud3JpdGU9ci53cml0ZX19LFV3PW5ldyBQcm94eShUcix7YXBwbHkoZSx0LHIpe3JldHVybiBPYmplY3QuYXNzaWduKHQsbmV3IFRyKC4uLnIpKX19KX0pO3ZhciBpbCx5XyxUXz1BKCgpPT57dWUoKTtHcigpO2lsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1wdXNoKHQpe2xldCByPXtkYXRhOnQsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PXI6dGhpcy5oZWFkPXIsdGhpcy50YWlsPXIsKyt0aGlzLmxlbmd0aH11bnNoaWZ0KHQpe2xldCByPXtkYXRhOnQsbmV4dDp0aGlzLmhlYWR9O3RoaXMubGVuZ3RoPT09MCYmKHRoaXMudGFpbD1yKSx0aGlzLmhlYWQ9ciwrK3RoaXMubGVuZ3RofXNoaWZ0KCl7aWYodGhpcy5sZW5ndGg9PT0wKXJldHVybjtsZXQgdD10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5sZW5ndGg9PT0xP3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCx0fWNsZWFyKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9am9pbih0KXtpZih0aGlzLmxlbmd0aD09PTApcmV0dXJuXCJcIjtsZXQgcj10aGlzLmhlYWQsbj1cIlwiK3IuZGF0YTtmb3IoO3I9ci5uZXh0OyluKz10K3IuZGF0YTtyZXR1cm4gbn1jb25jYXQodCl7aWYodGhpcy5sZW5ndGg9PT0wKXJldHVybiB4LmFsbG9jKDApO2xldCByPXguYWxsb2NVbnNhZmUodD4+PjApLG49dGhpcy5oZWFkLG89MDtmb3IoO247KXIuc2V0KG4uZGF0YSxvKSxvKz1uLmRhdGEubGVuZ3RoLG49bi5uZXh0O3JldHVybiByfWNvbnN1bWUodCxyKXtsZXQgbj10aGlzLmhlYWQuZGF0YTtpZih0PG4ubGVuZ3RoKXtsZXQgbz1uLnNsaWNlKDAsdCk7cmV0dXJuIHRoaXMuaGVhZC5kYXRhPW4uc2xpY2UodCksb31yZXR1cm4gdD09PW4ubGVuZ3RoP3RoaXMuc2hpZnQoKTpyP3RoaXMuX2dldFN0cmluZyh0KTp0aGlzLl9nZXRCdWZmZXIodCl9Zmlyc3QoKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKGxldCB0PXRoaXMuaGVhZDt0O3Q9dC5uZXh0KXlpZWxkIHQuZGF0YX1fZ2V0U3RyaW5nKHQpe2xldCByPVwiXCIsbj10aGlzLmhlYWQsbz0wO2Rve2xldCBpPW4uZGF0YTtpZih0PmkubGVuZ3RoKXIrPWksdC09aS5sZW5ndGg7ZWxzZXt0PT09aS5sZW5ndGg/KHIrPWksKytvLG4ubmV4dD90aGlzLmhlYWQ9bi5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KHIrPWkuc2xpY2UoMCx0KSx0aGlzLmhlYWQ9bixuLmRhdGE9aS5zbGljZSh0KSk7YnJlYWt9KytvfXdoaWxlKG49bi5uZXh0KTtyZXR1cm4gdGhpcy5sZW5ndGgtPW8scn1fZ2V0QnVmZmVyKHQpe2xldCByPXguYWxsb2NVbnNhZmUodCksbj10LG89dGhpcy5oZWFkLGk9MDtkb3tsZXQgcz1vLmRhdGE7aWYodD5zLmxlbmd0aClyLnNldChzLG4tdCksdC09cy5sZW5ndGg7ZWxzZXt0PT09cy5sZW5ndGg/KHIuc2V0KHMsbi10KSwrK2ksby5uZXh0P3RoaXMuaGVhZD1vLm5leHQ6dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsKTooci5zZXQobmV3IFVpbnQ4QXJyYXkocy5idWZmZXIscy5ieXRlT2Zmc2V0LHQpLG4tdCksdGhpcy5oZWFkPW8sby5kYXRhPXMuc2xpY2UodCkpO2JyZWFrfSsraX13aGlsZShvPW8ubmV4dCk7cmV0dXJuIHRoaXMubGVuZ3RoLT1pLHJ9W29lLmN1c3RvbV0odCxyKXtyZXR1cm4gb2UodGhpcyx7Li4ucixkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KX19LHlfPWlsfSk7ZnVuY3Rpb24gY2woZSx0LHIpe3R5cGVvZiByIT1cImJvb2xlYW5cIiYmKHI9dCBpbnN0YW5jZW9mIGouRHVwbGV4KSx0aGlzLm9iamVjdE1vZGU9ISEoZSYmZS5vYmplY3RNb2RlKSxyJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISEoZSYmZS5yZWFkYWJsZU9iamVjdE1vZGUpKSx0aGlzLmhpZ2hXYXRlck1hcms9ZT90cyh0aGlzLGUsXCJyZWFkYWJsZUhpZ2hXYXRlck1hcmtcIixyKTpvbyghMSksdGhpcy5idWZmZXI9bmV3IHlfLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1bXSx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5jb25zdHJ1Y3RlZD0hMCx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzW0RyXT1udWxsLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSFlfHxlLmVtaXRDbG9zZSE9PSExLHRoaXMuYXV0b0Rlc3Ryb3k9IWV8fGUuYXV0b0Rlc3Ryb3khPT0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmVycm9yZWQ9bnVsbCx0aGlzLmNsb3NlZD0hMSx0aGlzLmNsb3NlRW1pdHRlZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1lJiZlLmRlZmF1bHRFbmNvZGluZ3x8XCJ1dGY4XCIsdGhpcy5hd2FpdERyYWluV3JpdGVycz1udWxsLHRoaXMubXVsdGlBd2FpdERyYWluPSExLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kYXRhRW1pdHRlZD0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsZSYmZS5lbmNvZGluZyYmKHRoaXMuZGVjb2Rlcj1uZXcgVHIoZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1lLmVuY29kaW5nKX1mdW5jdGlvbiBHKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEcpKXJldHVybiBuZXcgRyhlKTtsZXQgdD10aGlzIGluc3RhbmNlb2Ygai5EdXBsZXg7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgY2woZSx0aGlzLHQpLGUmJih0eXBlb2YgZS5yZWFkPT1cImZ1bmN0aW9uXCImJih0aGlzLl9yZWFkPWUucmVhZCksdHlwZW9mIGUuZGVzdHJveT09XCJmdW5jdGlvblwiJiYodGhpcy5fZGVzdHJveT1lLmRlc3Ryb3kpLHR5cGVvZiBlLmNvbnN0cnVjdD09XCJmdW5jdGlvblwiJiYodGhpcy5fY29uc3RydWN0PWUuY29uc3RydWN0KSxlLnNpZ25hbCYmIXQmJlpuKGUuc2lnbmFsLHRoaXMpKSxqLmNhbGwodGhpcyxlKSxqZS5jb25zdHJ1Y3QodGhpcywoKT0+e3RoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlJiZvcyh0aGlzLHRoaXMuX3JlYWRhYmxlU3RhdGUpfSl9ZnVuY3Rpb24gTF8oZSx0LHIsbil7SyhcInJlYWRhYmxlQWRkQ2h1bmtcIix0KTtsZXQgbz1lLl9yZWFkYWJsZVN0YXRlLGk7aWYoby5vYmplY3RNb2RlfHwodHlwZW9mIHQ9PVwic3RyaW5nXCI/KHI9cnx8by5kZWZhdWx0RW5jb2Rpbmcsby5lbmNvZGluZyE9PXImJihuJiZvLmVuY29kaW5nP3Q9eC5mcm9tKHQscikudG9TdHJpbmcoby5lbmNvZGluZyk6KHQ9eC5mcm9tKHQscikscj1cIlwiKSkpOnQgaW5zdGFuY2VvZiB4P3I9XCJcIjpqLl9pc1VpbnQ4QXJyYXkodCk/KHQ9ai5fdWludDhBcnJheVRvQnVmZmVyKHQpLHI9XCJcIik6dCE9bnVsbCYmKGk9bmV3IEIoXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHQpKSksaSlzbyhlLGkpO2Vsc2UgaWYodD09PW51bGwpby5yZWFkaW5nPSExLG1OKGUsbyk7ZWxzZSBpZihvLm9iamVjdE1vZGV8fHQmJnQubGVuZ3RoPjApaWYobilvLmVuZEVtaXR0ZWQ/c28oZSxuZXcgeWkpOnNsKGUsbyx0LCEwKTtlbHNlIGlmKG8uZW5kZWQpc28oZSxuZXcgSWkpO2Vsc2V7aWYoby5kZXN0cm95ZWR8fG8uZXJyb3JlZClyZXR1cm4hMTtvLnJlYWRpbmc9ITEsby5kZWNvZGVyJiYhcj8odD1vLmRlY29kZXIud3JpdGUodCksby5vYmplY3RNb2RlfHx0Lmxlbmd0aCE9PTA/c2woZSxvLHQsITEpOm9zKGUsbykpOnNsKGUsbyx0LCExKX1lbHNlIG58fChvLnJlYWRpbmc9ITEsb3MoZSxvKSk7cmV0dXJuIW8uZW5kZWQmJihvLmxlbmd0aDxvLmhpZ2hXYXRlck1hcmt8fG8ubGVuZ3RoPT09MCl9ZnVuY3Rpb24gc2woZSx0LHIsbil7dC5mbG93aW5nJiZ0Lmxlbmd0aD09PTAmJiF0LnN5bmMmJmUubGlzdGVuZXJDb3VudChcImRhdGFcIik+MD8odC5tdWx0aUF3YWl0RHJhaW4/dC5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOnQuYXdhaXREcmFpbldyaXRlcnM9bnVsbCx0LmRhdGFFbWl0dGVkPSEwLGUuZW1pdChcImRhdGFcIixyKSk6KHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpyLmxlbmd0aCxuP3QuYnVmZmVyLnVuc2hpZnQocik6dC5idWZmZXIucHVzaChyKSx0Lm5lZWRSZWFkYWJsZSYmaXMoZSkpLG9zKGUsdCl9ZnVuY3Rpb24gT04oZSl7cmV0dXJuIGU+PWJfP2U9Yl86KGUtLSxlfD1lPj4+MSxlfD1lPj4+MixlfD1lPj4+NCxlfD1lPj4+OCxlfD1lPj4+MTYsZSsrKSxlfWZ1bmN0aW9uIENfKGUsdCl7cmV0dXJuIGU8PTB8fHQubGVuZ3RoPT09MCYmdC5lbmRlZD8wOnQub2JqZWN0TW9kZT8xOk51bWJlci5pc05hTihlKT90LmZsb3dpbmcmJnQubGVuZ3RoP3QuYnVmZmVyLmZpcnN0KCkubGVuZ3RoOnQubGVuZ3RoOmU8PXQubGVuZ3RoP2U6dC5lbmRlZD90Lmxlbmd0aDowfWZ1bmN0aW9uIG1OKGUsdCl7aWYoSyhcIm9uRW9mQ2h1bmtcIiksIXQuZW5kZWQpe2lmKHQuZGVjb2Rlcil7bGV0IHI9dC5kZWNvZGVyLmVuZCgpO3ImJnIubGVuZ3RoJiYodC5idWZmZXIucHVzaChyKSx0Lmxlbmd0aCs9dC5vYmplY3RNb2RlPzE6ci5sZW5ndGgpfXQuZW5kZWQ9ITAsdC5zeW5jP2lzKGUpOih0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCx3XyhlKSl9fWZ1bmN0aW9uIGlzKGUpe2xldCB0PWUuX3JlYWRhYmxlU3RhdGU7SyhcImVtaXRSZWFkYWJsZVwiLHQubmVlZFJlYWRhYmxlLHQuZW1pdHRlZFJlYWRhYmxlKSx0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZXx8KEsoXCJlbWl0UmVhZGFibGVcIix0LmZsb3dpbmcpLHQuZW1pdHRlZFJlYWRhYmxlPSEwLGl0KHdfLGUpKX1mdW5jdGlvbiB3XyhlKXtsZXQgdD1lLl9yZWFkYWJsZVN0YXRlO0soXCJlbWl0UmVhZGFibGVfXCIsdC5kZXN0cm95ZWQsdC5sZW5ndGgsdC5lbmRlZCksIXQuZGVzdHJveWVkJiYhdC5lcnJvcmVkJiYodC5sZW5ndGh8fHQuZW5kZWQpJiYoZS5lbWl0KFwicmVhZGFibGVcIiksdC5lbWl0dGVkUmVhZGFibGU9ITEpLHQubmVlZFJlYWRhYmxlPSF0LmZsb3dpbmcmJiF0LmVuZGVkJiZ0Lmxlbmd0aDw9dC5oaWdoV2F0ZXJNYXJrLGxsKGUpfWZ1bmN0aW9uIG9zKGUsdCl7IXQucmVhZGluZ01vcmUmJnQuY29uc3RydWN0ZWQmJih0LnJlYWRpbmdNb3JlPSEwLGl0KFNOLGUsdCkpfWZ1bmN0aW9uIFNOKGUsdCl7Zm9yKDshdC5yZWFkaW5nJiYhdC5lbmRlZCYmKHQubGVuZ3RoPHQuaGlnaFdhdGVyTWFya3x8dC5mbG93aW5nJiZ0Lmxlbmd0aD09PTApOyl7bGV0IHI9dC5sZW5ndGg7aWYoSyhcIm1heWJlUmVhZE1vcmUgcmVhZCAwXCIpLGUucmVhZCgwKSxyPT09dC5sZW5ndGgpYnJlYWt9dC5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBnTihlLHQpe3JldHVybiBmdW5jdGlvbigpe2xldCBuPWUuX3JlYWRhYmxlU3RhdGU7bi5hd2FpdERyYWluV3JpdGVycz09PXQ/KEsoXCJwaXBlT25EcmFpblwiLDEpLG4uYXdhaXREcmFpbldyaXRlcnM9bnVsbCk6bi5tdWx0aUF3YWl0RHJhaW4mJihLKFwicGlwZU9uRHJhaW5cIixuLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpLG4uYXdhaXREcmFpbldyaXRlcnMuZGVsZXRlKHQpKSwoIW4uYXdhaXREcmFpbldyaXRlcnN8fG4uYXdhaXREcmFpbldyaXRlcnMuc2l6ZT09PTApJiZwdC5saXN0ZW5lckNvdW50KGUsXCJkYXRhXCIpJiYobi5mbG93aW5nPSEwLGxsKGUpKX19ZnVuY3Rpb24gUF8oZSl7bGV0IHQ9ZS5fcmVhZGFibGVTdGF0ZTt0LnJlYWRhYmxlTGlzdGVuaW5nPWUubGlzdGVuZXJDb3VudChcInJlYWRhYmxlXCIpPjAsdC5yZXN1bWVTY2hlZHVsZWQmJnRbRHJdPT09ITE/dC5mbG93aW5nPSEwOmUubGlzdGVuZXJDb3VudChcImRhdGFcIik+MD9lLnJlc3VtZSgpOnQucmVhZGFibGVMaXN0ZW5pbmd8fCh0LmZsb3dpbmc9bnVsbCl9ZnVuY3Rpb24gQU4oZSl7SyhcInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMFwiKSxlLnJlYWQoMCl9ZnVuY3Rpb24geE4oZSx0KXt0LnJlc3VtZVNjaGVkdWxlZHx8KHQucmVzdW1lU2NoZWR1bGVkPSEwLGl0KE5OLGUsdCkpfWZ1bmN0aW9uIE5OKGUsdCl7SyhcInJlc3VtZVwiLHQucmVhZGluZyksdC5yZWFkaW5nfHxlLnJlYWQoMCksdC5yZXN1bWVTY2hlZHVsZWQ9ITEsZS5lbWl0KFwicmVzdW1lXCIpLGxsKGUpLHQuZmxvd2luZyYmIXQucmVhZGluZyYmZS5yZWFkKDApfWZ1bmN0aW9uIGxsKGUpe2xldCB0PWUuX3JlYWRhYmxlU3RhdGU7Zm9yKEsoXCJmbG93XCIsdC5mbG93aW5nKTt0LmZsb3dpbmcmJmUucmVhZCgpIT09bnVsbDspO31mdW5jdGlvbiBVXyhlLHQpe3R5cGVvZiBlLnJlYWQhPVwiZnVuY3Rpb25cIiYmKGU9Ry53cmFwKGUse29iamVjdE1vZGU6ITB9KSk7bGV0IHI9SU4oZSx0KTtyZXR1cm4gci5zdHJlYW09ZSxyfWFzeW5jIGZ1bmN0aW9uKklOKGUsdCl7bGV0IHI9RF8sbj17ZGVzdHJveU9uUmV0dXJuOiEwLGRlc3Ryb3lPbkVycm9yOiEwLC4uLnR9O2Z1bmN0aW9uIG8oZil7dGhpcz09PWU/KHIoKSxyPURfKTpyPWZ9bGV0IGk9ZS5fcmVhZGFibGVTdGF0ZSxzPWkuZXJyb3JlZCxhPWkuZXJyb3JFbWl0dGVkLGM9aS5lbmRFbWl0dGVkLHU9aS5jbG9zZUVtaXR0ZWQ7ZS5vbihcInJlYWRhYmxlXCIsbykub24oXCJlcnJvclwiLGZ1bmN0aW9uKGYpe3M9ZixhPSEwLG8uY2FsbCh0aGlzKX0pLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtjPSEwLG8uY2FsbCh0aGlzKX0pLm9uKFwiY2xvc2VcIixmdW5jdGlvbigpe3U9ITAsby5jYWxsKHRoaXMpfSk7bGV0IFI9ITE7dHJ5e2Zvcig7Oyl7bGV0IGY9ZS5kZXN0cm95ZWQ/bnVsbDplLnJlYWQoKTtpZihmIT09bnVsbCl5aWVsZCBmO2Vsc2V7aWYoYSl0aHJvdyBzO2lmKGMpYnJlYWs7aWYodSlicmVhazthd2FpdCBuZXcgUHJvbWlzZShvKX19fWNhdGNoKGYpe3Rocm93IG4uZGVzdHJveU9uRXJyb3ImJmplLmRlc3Ryb3llcihlLGYpLFI9ITAsZn1maW5hbGx5eyFSJiZuLmRlc3Ryb3lPblJldHVybiYmKGkuYXV0b0Rlc3Ryb3l8fCFjKSYmamUuZGVzdHJveWVyKGUsbnVsbCl9fWZ1bmN0aW9uIE1fKGUsdCl7aWYodC5sZW5ndGg9PT0wKXJldHVybiBudWxsO2xldCByO3JldHVybiB0Lm9iamVjdE1vZGU/cj10LmJ1ZmZlci5zaGlmdCgpOiFlfHxlPj10Lmxlbmd0aD8odC5kZWNvZGVyP3I9dC5idWZmZXIuam9pbihcIlwiKTp0LmJ1ZmZlci5sZW5ndGg9PT0xP3I9dC5idWZmZXIuZmlyc3QoKTpyPXQuYnVmZmVyLmNvbmNhdCh0Lmxlbmd0aCksdC5idWZmZXIuY2xlYXIoKSk6cj10LmJ1ZmZlci5jb25zdW1lKGUsdC5kZWNvZGVyKSxyfWZ1bmN0aW9uIGFsKGUpe2xldCB0PWUuX3JlYWRhYmxlU3RhdGU7SyhcImVuZFJlYWRhYmxlXCIsdC5lbmRFbWl0dGVkKSx0LmVuZEVtaXR0ZWR8fCh0LmVuZGVkPSEwLGl0KHlOLHQsZSkpfWZ1bmN0aW9uIHlOKGUsdCl7aWYoSyhcImVuZFJlYWRhYmxlTlRcIixlLmVuZEVtaXR0ZWQsZS5sZW5ndGgpLCFlLmVycm9yRW1pdHRlZCYmIWUuY2xvc2VFbWl0dGVkJiYhZS5lbmRFbWl0dGVkJiZlLmxlbmd0aD09PTApe2lmKGUuZW5kRW1pdHRlZD0hMCx0LmVtaXQoXCJlbmRcIiksdC53cml0YWJsZSYmdC5hbGxvd0hhbGZPcGVuPT09ITEpaXQoVE4sdCk7ZWxzZSBpZihlLmF1dG9EZXN0cm95KXtsZXQgcj10Ll93cml0YWJsZVN0YXRlOyghcnx8ci5hdXRvRGVzdHJveSYmKHIuZmluaXNoZWR8fHIud3JpdGFibGU9PT0hMSkpJiZ0LmRlc3Ryb3koKX19fWZ1bmN0aW9uIFROKGUpe2Uud3JpdGFibGUmJiFlLndyaXRhYmxlRW5kZWQmJiFlLmRlc3Ryb3llZCYmZS5lbmQoKX1mdW5jdGlvbiBETihlLHQpe3JldHVybiBubyhHLGUsdCl9ZnVuY3Rpb24gYk4oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbX1mdW5jdGlvbiBDTihlLHQpe3JldHVybiBuZXcgRyh7b2JqZWN0TW9kZTplLnJlYWRhYmxlT2JqZWN0TW9kZT8/ZS5vYmplY3RNb2RlPz8hMCwuLi50LGRlc3Ryb3kocixuKXtqZS5kZXN0cm95ZXIoZSxyKSxuKHIpfX0pLndyYXAoZSl9dmFyIEssRHIsRF8sc28sYl8sZVAsa2UsYW89QSgoKT0+e1ppKCk7dWUoKTtzYygpO0pjKCk7bnMoKTtJXygpO2RlKCk7ZWUoKTtrbigpO2VzKCk7WmMoKTtUXygpO3lyKCk7dG4oKTthcigpO0s9aWMoXCJzdHJlYW1cIixlPT57Sz1lfSksRHI9U3ltYm9sKFwia1BhdXNlZFwiKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoRy5wcm90b3R5cGUsai5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZihHLGopO0RfPSgpPT57fSx7ZXJyb3JPckRlc3Ryb3k6c299PWplO0cucHJvdG90eXBlLmRlc3Ryb3k9amUuZGVzdHJveTtHLnByb3RvdHlwZS5fdW5kZXN0cm95PWplLnVuZGVzdHJveTtHLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3QoZSl9O0cucHJvdG90eXBlW3B0LmNhcHR1cmVSZWplY3Rpb25TeW1ib2xdPWZ1bmN0aW9uKGUpe3RoaXMuZGVzdHJveShlKX07Ry5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3JldHVybiBMXyh0aGlzLGUsdCwhMSl9O0cucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTF8odGhpcyxlLHQsITApfTtHLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe2xldCBlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIGVbRHJdPT09ITB8fGUuZmxvd2luZz09PSExfTtHLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihlKXtsZXQgdD1uZXcgVHIoZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPXQsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7bGV0IHI9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIsbj1cIlwiO2ZvcihsZXQgbyBvZiByKW4rPXQud3JpdGUobyk7cmV0dXJuIHIuY2xlYXIoKSxuIT09XCJcIiYmci5wdXNoKG4pLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPW4ubGVuZ3RoLHRoaXN9O2JfPTEwNzM3NDE4MjQ7Ry5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihlKXtLKFwicmVhZFwiLGUpLGU9PT12b2lkIDA/ZT1OYU46TnVtYmVyLmlzSW50ZWdlcihlKXx8KGU9TnVtYmVyLnBhcnNlSW50KGUsMTApKTtsZXQgdD10aGlzLl9yZWFkYWJsZVN0YXRlLHI9ZTtpZihlPnQuaGlnaFdhdGVyTWFyayYmKHQuaGlnaFdhdGVyTWFyaz1PTihlKSksZSE9PTAmJih0LmVtaXR0ZWRSZWFkYWJsZT0hMSksZT09PTAmJnQubmVlZFJlYWRhYmxlJiYoKHQuaGlnaFdhdGVyTWFyayE9PTA/dC5sZW5ndGg+PXQuaGlnaFdhdGVyTWFyazp0Lmxlbmd0aD4wKXx8dC5lbmRlZCkpcmV0dXJuIEsoXCJyZWFkOiBlbWl0UmVhZGFibGVcIix0Lmxlbmd0aCx0LmVuZGVkKSx0Lmxlbmd0aD09PTAmJnQuZW5kZWQ/YWwodGhpcyk6aXModGhpcyksbnVsbDtpZihlPUNfKGUsdCksZT09PTAmJnQuZW5kZWQpcmV0dXJuIHQubGVuZ3RoPT09MCYmYWwodGhpcyksbnVsbDtsZXQgbj10Lm5lZWRSZWFkYWJsZTtLKFwibmVlZCByZWFkYWJsZVwiLG4pLCh0Lmxlbmd0aD09PTB8fHQubGVuZ3RoLWU8dC5oaWdoV2F0ZXJNYXJrKSYmKG49ITAsSyhcImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrXCIsbikpLHQuZW5kZWR8fHQucmVhZGluZ3x8dC5kZXN0cm95ZWR8fHQuZXJyb3JlZHx8IXQuY29uc3RydWN0ZWQ/KG49ITEsSyhcInJlYWRpbmcsIGVuZGVkIG9yIGNvbnN0cnVjdGluZ1wiLG4pKTpuJiYoSyhcImRvIHJlYWRcIiksdC5yZWFkaW5nPSEwLHQuc3luYz0hMCx0Lmxlbmd0aD09PTAmJih0Lm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZCh0LmhpZ2hXYXRlck1hcmspLHQuc3luYz0hMSx0LnJlYWRpbmd8fChlPUNfKHIsdCkpKTtsZXQgbztyZXR1cm4gZT4wP289TV8oZSx0KTpvPW51bGwsbz09PW51bGw/KHQubmVlZFJlYWRhYmxlPXQubGVuZ3RoPD10LmhpZ2hXYXRlck1hcmssZT0wKToodC5sZW5ndGgtPWUsdC5tdWx0aUF3YWl0RHJhaW4/dC5hd2FpdERyYWluV3JpdGVycy5jbGVhcigpOnQuYXdhaXREcmFpbldyaXRlcnM9bnVsbCksdC5sZW5ndGg9PT0wJiYodC5lbmRlZHx8KHQubmVlZFJlYWRhYmxlPSEwKSxyIT09ZSYmdC5lbmRlZCYmYWwodGhpcykpLG8hPT1udWxsJiYodC5kYXRhRW1pdHRlZD0hMCx0aGlzLmVtaXQoXCJkYXRhXCIsbykpLG99O0cucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBucihcIl9yZWFkKClcIil9O0cucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZSx0KXtsZXQgcj10aGlzLG49dGhpcy5fcmVhZGFibGVTdGF0ZTtuLnBpcGVzLmxlbmd0aD09PTEmJihuLm11bHRpQXdhaXREcmFpbnx8KG4ubXVsdGlBd2FpdERyYWluPSEwLG4uYXdhaXREcmFpbldyaXRlcnM9bmV3IFNldChuLmF3YWl0RHJhaW5Xcml0ZXJzP1tuLmF3YWl0RHJhaW5Xcml0ZXJzXTpbXSkpKSxuLnBpcGVzLnB1c2goZSksSyhcInBpcGUgY291bnQ9JWQgb3B0cz0lalwiLG4ucGlwZXMubGVuZ3RoLHQpO2xldCBpPSghdHx8dC5lbmQhPT0hMSkmJmUhPT13dC5zdGRvdXQmJmUhPT13dC5zdGRlcnI/YTpoO24uZW5kRW1pdHRlZD9pdChpKTpyLm9uY2UoXCJlbmRcIixpKSxlLm9uKFwidW5waXBlXCIscyk7ZnVuY3Rpb24gcyhTLGQpe0soXCJvbnVucGlwZVwiKSxTPT09ciYmZCYmZC5oYXNVbnBpcGVkPT09ITEmJihkLmhhc1VucGlwZWQ9ITAsUigpKX1mdW5jdGlvbiBhKCl7SyhcIm9uZW5kXCIpLGUuZW5kKCl9bGV0IGMsdT0hMTtmdW5jdGlvbiBSKCl7SyhcImNsZWFudXBcIiksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsXyksZS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLEUpLGMmJmUucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLGMpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGwpLGUucmVtb3ZlTGlzdGVuZXIoXCJ1bnBpcGVcIixzKSxyLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsYSksci5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGgpLHIucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIscCksdT0hMCxjJiZuLmF3YWl0RHJhaW5Xcml0ZXJzJiYoIWUuX3dyaXRhYmxlU3RhdGV8fGUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmYygpfWZ1bmN0aW9uIGYoKXt1fHwobi5waXBlcy5sZW5ndGg9PT0xJiZuLnBpcGVzWzBdPT09ZT8oSyhcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLDApLG4uYXdhaXREcmFpbldyaXRlcnM9ZSxuLm11bHRpQXdhaXREcmFpbj0hMSk6bi5waXBlcy5sZW5ndGg+MSYmbi5waXBlcy5pbmNsdWRlcyhlKSYmKEsoXCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2VcIixuLmF3YWl0RHJhaW5Xcml0ZXJzLnNpemUpLG4uYXdhaXREcmFpbldyaXRlcnMuYWRkKGUpKSxyLnBhdXNlKCkpLGN8fChjPWdOKHIsZSksZS5vbihcImRyYWluXCIsYykpfXIub24oXCJkYXRhXCIscCk7ZnVuY3Rpb24gcChTKXtLKFwib25kYXRhXCIpO2xldCBkPWUud3JpdGUoUyk7SyhcImRlc3Qud3JpdGVcIixkKSxkPT09ITEmJmYoKX1mdW5jdGlvbiBsKFMpe2lmKEsoXCJvbmVycm9yXCIsUyksaCgpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGwpLHB0Lmxpc3RlbmVyQ291bnQoZSxcImVycm9yXCIpPT09MCl7bGV0IGQ9ZS5fd3JpdGFibGVTdGF0ZXx8ZS5fcmVhZGFibGVTdGF0ZTtkJiYhZC5lcnJvckVtaXR0ZWQ/c28oZSxTKTplLmVtaXQoXCJlcnJvclwiLFMpfX1ycyhlLFwiZXJyb3JcIixsKTtmdW5jdGlvbiBfKCl7ZS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLEUpLGgoKX1lLm9uY2UoXCJjbG9zZVwiLF8pO2Z1bmN0aW9uIEUoKXtLKFwib25maW5pc2hcIiksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsXyksaCgpfWUub25jZShcImZpbmlzaFwiLEUpO2Z1bmN0aW9uIGgoKXtLKFwidW5waXBlXCIpLHIudW5waXBlKGUpfXJldHVybiBlLmVtaXQoXCJwaXBlXCIsciksZS53cml0YWJsZU5lZWREcmFpbj09PSEwP24uZmxvd2luZyYmZigpOm4uZmxvd2luZ3x8KEsoXCJwaXBlIHJlc3VtZVwiKSxyLnJlc3VtZSgpKSxlfTtHLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXtoYXNVbnBpcGVkOiExfTtpZih0LnBpcGVzLmxlbmd0aD09PTApcmV0dXJuIHRoaXM7aWYoIWUpe2xldCBvPXQucGlwZXM7dC5waXBlcz1bXSx0aGlzLnBhdXNlKCk7Zm9yKGxldCBpPTA7aTxvLmxlbmd0aDtpKyspb1tpXS5lbWl0KFwidW5waXBlXCIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfWxldCBuPXQucGlwZXMuaW5kZXhPZihlKTtyZXR1cm4gbj09PS0xP3RoaXM6KHQucGlwZXMuc3BsaWNlKG4sMSksdC5waXBlcy5sZW5ndGg9PT0wJiZ0aGlzLnBhdXNlKCksZS5lbWl0KFwidW5waXBlXCIsdGhpcyxyKSx0aGlzKX07Ry5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXtsZXQgcj1qLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsZSx0KSxuPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIGU9PT1cImRhdGFcIj8obi5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoXCJyZWFkYWJsZVwiKT4wLG4uZmxvd2luZyE9PSExJiZ0aGlzLnJlc3VtZSgpKTplPT09XCJyZWFkYWJsZVwiJiYhbi5lbmRFbWl0dGVkJiYhbi5yZWFkYWJsZUxpc3RlbmluZyYmKG4ucmVhZGFibGVMaXN0ZW5pbmc9bi5uZWVkUmVhZGFibGU9ITAsbi5mbG93aW5nPSExLG4uZW1pdHRlZFJlYWRhYmxlPSExLEsoXCJvbiByZWFkYWJsZVwiLG4ubGVuZ3RoLG4ucmVhZGluZyksbi5sZW5ndGg/aXModGhpcyk6bi5yZWFkaW5nfHxpdChBTix0aGlzKSkscn07Ry5wcm90b3R5cGUuYWRkTGlzdGVuZXI9Ry5wcm90b3R5cGUub247Ry5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtsZXQgcj1qLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsZSx0KTtyZXR1cm4gZT09PVwicmVhZGFibGVcIiYmaXQoUF8sdGhpcykscn07Ry5wcm90b3R5cGUub2ZmPUcucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO0cucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihlKXtsZXQgdD1qLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybihlPT09XCJyZWFkYWJsZVwifHxlPT09dm9pZCAwKSYmaXQoUF8sdGhpcyksdH07Ry5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gZS5mbG93aW5nfHwoSyhcInJlc3VtZVwiKSxlLmZsb3dpbmc9IWUucmVhZGFibGVMaXN0ZW5pbmcseE4odGhpcyxlKSksZVtEcl09ITEsdGhpc307Ry5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gSyhcImNhbGwgcGF1c2UgZmxvd2luZz0lalwiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nIT09ITEmJihLKFwicGF1c2VcIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdChcInBhdXNlXCIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlW0RyXT0hMCx0aGlzfTtHLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUpe2xldCB0PSExO2Uub24oXCJkYXRhXCIsbj0+eyF0aGlzLnB1c2gobikmJmUucGF1c2UmJih0PSEwLGUucGF1c2UoKSl9KSxlLm9uKFwiZW5kXCIsKCk9Pnt0aGlzLnB1c2gobnVsbCl9KSxlLm9uKFwiZXJyb3JcIixuPT57c28odGhpcyxuKX0pLGUub24oXCJjbG9zZVwiLCgpPT57dGhpcy5kZXN0cm95KCl9KSxlLm9uKFwiZGVzdHJveVwiLCgpPT57dGhpcy5kZXN0cm95KCl9KSx0aGlzLl9yZWFkPSgpPT57dCYmZS5yZXN1bWUmJih0PSExLGUucmVzdW1lKCkpfTtsZXQgcj1PYmplY3Qua2V5cyhlKTtmb3IobGV0IG49MTtuPHIubGVuZ3RoO24rKyl7bGV0IG89cltuXTt0aGlzW29dPT09dm9pZCAwJiZ0eXBlb2YgZVtvXT09XCJmdW5jdGlvblwiJiYodGhpc1tvXT1lW29dLmJpbmQoZSkpfXJldHVybiB0aGlzfTtHLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gVV8odGhpcyl9O0cucHJvdG90eXBlLml0ZXJhdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlIT09dm9pZCAwJiZ2ZShlLFwib3B0aW9uc1wiKSxVXyh0aGlzLGUpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHLnByb3RvdHlwZSx7cmVhZGFibGU6e2dldCgpe2xldCBlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuISFlJiZlLnJlYWRhYmxlIT09ITEmJiFlLmRlc3Ryb3llZCYmIWUuZXJyb3JFbWl0dGVkJiYhZS5lbmRFbWl0dGVkfSxzZXQoZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGFibGU9ISFlKX19LHJlYWRhYmxlRGlkUmVhZDp7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZH19LHJlYWRhYmxlQWJvcnRlZDp7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hISh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkKSYmIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZH19LHJlYWRhYmxlSGlnaFdhdGVyTWFyazp7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0scmVhZGFibGVCdWZmZXI6e2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0scmVhZGFibGVGbG93aW5nOntlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPWUpfX0scmVhZGFibGVMZW5ndGg6e2VudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0scmVhZGFibGVPYmplY3RNb2RlOntlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlP3RoaXMuX3JlYWRhYmxlU3RhdGUub2JqZWN0TW9kZTohMX19LHJlYWRhYmxlRW5jb2Rpbmc6e2VudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZzpudWxsfX0sZGVzdHJveWVkOntlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlPT09dm9pZCAwPyExOnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQoZSl7IXRoaXMuX3JlYWRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19LHJlYWRhYmxlRW5kZWQ6e2VudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkOiExfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjbC5wcm90b3R5cGUse3BpcGVzQ291bnQ6e2dldCgpe3JldHVybiB0aGlzLnBpcGVzLmxlbmd0aH19LHBhdXNlZDp7Z2V0KCl7cmV0dXJuIHRoaXNbRHJdIT09ITF9LHNldChlKXt0aGlzW0RyXT0hIWV9fX0pO2VQPUcuZnJvbVdlYj1mdW5jdGlvbihlLHQ9e30pe2lmKCFiTihlKSl0aHJvdyBuZXcgQihcInJlYWRhYmxlU3RyZWFtXCIsXCJSZWFkYWJsZVN0cmVhbVwiLGUpO3ZlKHQsXCJvcHRpb25zXCIpO2xldHtoaWdoV2F0ZXJNYXJrOnIsZW5jb2Rpbmc6bixvYmplY3RNb2RlOm89ITEsc2lnbmFsOml9PXQ7aWYobiE9PXZvaWQgMCYmIXguaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgYWUobixcIm9wdGlvbnMuZW5jb2RpbmdcIik7Z2UobyxcIm9wdGlvbnMub2JqZWN0TW9kZVwiKTtsZXQgcz1lLmdldFJlYWRlcigpLGE9ITEsYz1uZXcgRyh7b2JqZWN0TW9kZTpvLGhpZ2hXYXRlck1hcms6cixlbmNvZGluZzpuLHNpZ25hbDppLHJlYWQoKXtzLnJlYWQoKS50aGVuKHU9Pnt1LmRvbmU/Yy5wdXNoKG51bGwpOmMucHVzaCh1LnZhbHVlKX0sdT0+ZGVzdHJveS5jYWxsKGMsdSkpfSxkZXN0cm95KHUsUil7ZnVuY3Rpb24gZigpe3RyeXtSKHUpfWNhdGNoKHApe3Byb2Nlc3MubmV4dFRpY2soKCk9Pnt0aHJvdyBwfSl9fWlmKCFhKXtzLmNhbmNlbCh1KS50aGVuKGYsZik7cmV0dXJufWYoKX19KTtyZXR1cm4gcy5jbG9zZWQudGhlbigoKT0+e2E9ITAsSmkoYyl8fGMucHVzaChudWxsKX0sdT0+e2E9ITAsZGVzdHJveS5jYWxsKGMsdSl9KSxjfTtHLl9mcm9tTGlzdD1NXztHLlJlYWRhYmxlU3RhdGU9Y2w7Ry5mcm9tPUROO0cud3JhcD1DTjtrZT1HfSk7ZnVuY3Rpb24gRl8oZSl7bGV0IHQ9a2UucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoZSkscj1lLG49ITE7Zm9yKDtyPy5jb25zdHJ1Y3RvciYmci5jb25zdHJ1Y3Rvci5uYW1lIT09XCJPYmplY3RcIjspe2lmKHIuY29uc3RydWN0b3IubmFtZT09PVwiRHVwbGV4XCIpe249ITA7YnJlYWt9cj1PYmplY3QuZ2V0UHJvdG90eXBlT2Yocil9cmV0dXJuIHQmJm59ZnVuY3Rpb24gcGwoKXt9ZnVuY3Rpb24gY28oZSx0LHIpe3R5cGVvZiByIT1cImJvb2xlYW5cIiYmKHI9Rl8odCkpLHRoaXMub2JqZWN0TW9kZT0hIShlJiZlLm9iamVjdE1vZGUpLHImJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIShlJiZlLndyaXRhYmxlT2JqZWN0TW9kZSkpLHRoaXMuaGlnaFdhdGVyTWFyaz1lP3RzKHRoaXMsZSxcIndyaXRhYmxlSGlnaFdhdGVyTWFya1wiLHIpOm9vKCExKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMTtsZXQgbj0hIShlJiZlLmRlY29kZVN0cmluZ3M9PT0hMSk7dGhpcy5kZWNvZGVTdHJpbmdzPSFuLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUmJmUuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPXdOLmJpbmQodm9pZCAwLHQpLHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmFmdGVyV3JpdGVUaWNrSW5mbz1udWxsLHNzKHRoaXMpLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5jb25zdHJ1Y3RlZD0hMCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSFlfHxlLmVtaXRDbG9zZSE9PSExLHRoaXMuYXV0b0Rlc3Ryb3k9IWV8fGUuYXV0b0Rlc3Ryb3khPT0hMSx0aGlzLmVycm9yZWQ9bnVsbCx0aGlzLmNsb3NlZD0hMSx0aGlzLmNsb3NlRW1pdHRlZD0hMSx0aGlzW2NuXT1bXX1mdW5jdGlvbiBzcyhlKXtlLmJ1ZmZlcmVkPVtdLGUuYnVmZmVyZWRJbmRleD0wLGUuYWxsQnVmZmVycz0hMCxlLmFsbE5vb3A9ITB9ZnVuY3Rpb24gaWUoZSl7bGV0IHQ9Rl8odGhpcyk7aWYoIXQmJiFGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKGllLHRoaXMpKXJldHVybiBuZXcgaWUoZSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgY28oZSx0aGlzLHQpLGUmJih0eXBlb2YgZS53cml0ZT09XCJmdW5jdGlvblwiJiYodGhpcy5fd3JpdGU9ZS53cml0ZSksdHlwZW9mIGUud3JpdGV2PT1cImZ1bmN0aW9uXCImJih0aGlzLl93cml0ZXY9ZS53cml0ZXYpLHR5cGVvZiBlLmRlc3Ryb3k9PVwiZnVuY3Rpb25cIiYmKHRoaXMuX2Rlc3Ryb3k9ZS5kZXN0cm95KSx0eXBlb2YgZS5maW5hbD09XCJmdW5jdGlvblwiJiYodGhpcy5fZmluYWw9ZS5maW5hbCksdHlwZW9mIGUuY29uc3RydWN0PT1cImZ1bmN0aW9uXCImJih0aGlzLl9jb25zdHJ1Y3Q9ZS5jb25zdHJ1Y3QpLGUuc2lnbmFsJiZabihlLnNpZ25hbCx0aGlzKSksai5jYWxsKHRoaXMsZSksamUuY29uc3RydWN0KHRoaXMsKCk9PntsZXQgcj10aGlzLl93cml0YWJsZVN0YXRlO3Iud3JpdGluZ3x8RWwodGhpcyxyKSxfbCh0aGlzLHIpfSl9ZnVuY3Rpb24gdl8oZSx0LHIsbil7bGV0IG89ZS5fd3JpdGFibGVTdGF0ZTtpZih0eXBlb2Ygcj09XCJmdW5jdGlvblwiKW49cixyPW8uZGVmYXVsdEVuY29kaW5nO2Vsc2V7aWYoIXIpcj1vLmRlZmF1bHRFbmNvZGluZztlbHNlIGlmKHIhPT1cImJ1ZmZlclwiJiYheC5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBRcihyKTt0eXBlb2YgbiE9XCJmdW5jdGlvblwiJiYobj1wbCl9aWYodD09PW51bGwpdGhyb3cgbmV3IHFyO2lmKCFvLm9iamVjdE1vZGUpaWYodHlwZW9mIHQ9PVwic3RyaW5nXCIpby5kZWNvZGVTdHJpbmdzIT09ITEmJih0PXguZnJvbSh0LHIpLHI9XCJidWZmZXJcIik7ZWxzZSBpZih0IGluc3RhbmNlb2YgeClyPVwiYnVmZmVyXCI7ZWxzZSBpZihGZSh0KSl0PXpuKHQpLHI9XCJidWZmZXJcIjtlbHNlIHRocm93IG5ldyBCKFwiY2h1bmtcIixbXCJzdHJpbmdcIixcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0KTtsZXQgaTtyZXR1cm4gby5lbmRpbmc/aT1uZXcgVGk6by5kZXN0cm95ZWQmJihpPW5ldyB5dChcIndyaXRlXCIpKSxpPyhGKG4saSksYW4oZSxpLCEwKSxpKTooby5wZW5kaW5nY2IrKyxMTihlLG8sdCxyLG4pKX1mdW5jdGlvbiBMTihlLHQscixuLG8pe2xldCBpPXQub2JqZWN0TW9kZT8xOnIubGVuZ3RoO3QubGVuZ3RoKz1pO2xldCBzPXQubGVuZ3RoPHQuaGlnaFdhdGVyTWFyaztyZXR1cm4gc3x8KHQubmVlZERyYWluPSEwKSx0LndyaXRpbmd8fHQuY29ya2VkfHx0LmVycm9yZWR8fCF0LmNvbnN0cnVjdGVkPyh0LmJ1ZmZlcmVkLnB1c2goe2NodW5rOnIsZW5jb2Rpbmc6bixjYWxsYmFjazpvfSksdC5hbGxCdWZmZXJzJiZuIT09XCJidWZmZXJcIiYmKHQuYWxsQnVmZmVycz0hMSksdC5hbGxOb29wJiZvIT09cGwmJih0LmFsbE5vb3A9ITEpKToodC53cml0ZWxlbj1pLHQud3JpdGVjYj1vLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsZS5fd3JpdGUocixuLHQub253cml0ZSksdC5zeW5jPSExKSxzJiYhdC5lcnJvcmVkJiYhdC5kZXN0cm95ZWR9ZnVuY3Rpb24ga18oZSx0LHIsbixvLGkscyl7dC53cml0ZWxlbj1uLHQud3JpdGVjYj1zLHQud3JpdGluZz0hMCx0LnN5bmM9ITAsdC5kZXN0cm95ZWQ/dC5vbndyaXRlKG5ldyB5dChcIndyaXRlXCIpKTpyP2UuX3dyaXRldihvLHQub253cml0ZSk6ZS5fd3JpdGUobyxpLHQub253cml0ZSksdC5zeW5jPSExfWZ1bmN0aW9uIEJfKGUsdCxyLG4pey0tdC5wZW5kaW5nY2IsbihyKSxSbCh0KSxhbihlLHIpfWZ1bmN0aW9uIHdOKGUsdCl7bGV0IHI9ZS5fd3JpdGFibGVTdGF0ZSxuPXIuc3luYyxvPXIud3JpdGVjYjtpZih0eXBlb2YgbyE9XCJmdW5jdGlvblwiKXthbihlLG5ldyB4cik7cmV0dXJufXIud3JpdGluZz0hMSxyLndyaXRlY2I9bnVsbCxyLmxlbmd0aC09ci53cml0ZWxlbixyLndyaXRlbGVuPTAsdD8odC5zdGFjayxyLmVycm9yZWR8fChyLmVycm9yZWQ9dCksZS5fcmVhZGFibGVTdGF0ZSYmIWUuX3JlYWRhYmxlU3RhdGUuZXJyb3JlZCYmKGUuX3JlYWRhYmxlU3RhdGUuZXJyb3JlZD10KSxuP0YoQl8sZSxyLHQsbyk6Ql8oZSxyLHQsbykpOihyLmJ1ZmZlcmVkLmxlbmd0aD5yLmJ1ZmZlcmVkSW5kZXgmJkVsKGUsciksbj9yLmFmdGVyV3JpdGVUaWNrSW5mbyE9PW51bGwmJnIuYWZ0ZXJXcml0ZVRpY2tJbmZvLmNiPT09bz9yLmFmdGVyV3JpdGVUaWNrSW5mby5jb3VudCsrOihyLmFmdGVyV3JpdGVUaWNrSW5mbz17Y291bnQ6MSxjYjpvLHN0cmVhbTplLHN0YXRlOnJ9LEYoUE4sci5hZnRlcldyaXRlVGlja0luZm8pKTpXXyhlLHIsMSxvKSl9ZnVuY3Rpb24gUE4oe3N0cmVhbTplLHN0YXRlOnQsY291bnQ6cixjYjpufSl7cmV0dXJuIHQuYWZ0ZXJXcml0ZVRpY2tJbmZvPW51bGwsV18oZSx0LHIsbil9ZnVuY3Rpb24gV18oZSx0LHIsbil7Zm9yKCF0LmVuZGluZyYmIWUuZGVzdHJveWVkJiZ0Lmxlbmd0aD09PTAmJnQubmVlZERyYWluJiYodC5uZWVkRHJhaW49ITEsZS5lbWl0KFwiZHJhaW5cIikpO3ItLSA+MDspdC5wZW5kaW5nY2ItLSxuKCk7dC5kZXN0cm95ZWQmJlJsKHQpLF9sKGUsdCl9ZnVuY3Rpb24gUmwoZSl7aWYoZS53cml0aW5nKXJldHVybjtmb3IobGV0IHI9ZS5idWZmZXJlZEluZGV4O3I8ZS5idWZmZXJlZC5sZW5ndGg7KytyKXtsZXR7Y2h1bms6bixjYWxsYmFjazpvfT1lLmJ1ZmZlcmVkW3JdLGk9ZS5vYmplY3RNb2RlPzE6bi5sZW5ndGg7ZS5sZW5ndGgtPWksbyhuZXcgeXQoXCJ3cml0ZVwiKSl9bGV0IHQ9ZVtjbl0uc3BsaWNlKDApO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0obmV3IHl0KFwiZW5kXCIpKTtzcyhlKX1mdW5jdGlvbiBFbChlLHQpe2lmKHQuY29ya2VkfHx0LmJ1ZmZlclByb2Nlc3Npbmd8fHQuZGVzdHJveWVkfHwhdC5jb25zdHJ1Y3RlZClyZXR1cm47bGV0e2J1ZmZlcmVkOnIsYnVmZmVyZWRJbmRleDpuLG9iamVjdE1vZGU6b309dCxpPXIubGVuZ3RoLW47aWYoIWkpcmV0dXJuO2xldCBzPW47aWYodC5idWZmZXJQcm9jZXNzaW5nPSEwLGk+MSYmZS5fd3JpdGV2KXt0LnBlbmRpbmdjYi09aS0xO2xldCBhPXQuYWxsTm9vcD9wbDp1PT57Zm9yKGxldCBSPXM7UjxyLmxlbmd0aDsrK1IpcltSXS5jYWxsYmFjayh1KX0sYz10LmFsbE5vb3AmJnM9PT0wP3I6ci5zbGljZShzKTtjLmFsbEJ1ZmZlcnM9dC5hbGxCdWZmZXJzLGtfKGUsdCwhMCx0Lmxlbmd0aCxjLFwiXCIsYSksc3ModCl9ZWxzZXtkb3tsZXR7Y2h1bms6YSxlbmNvZGluZzpjLGNhbGxiYWNrOnV9PXJbc107cltzKytdPW51bGw7bGV0IFI9bz8xOmEubGVuZ3RoO2tfKGUsdCwhMSxSLGEsYyx1KX13aGlsZShzPHIubGVuZ3RoJiYhdC53cml0aW5nKTtzPT09ci5sZW5ndGg/c3ModCk6cz4yNTY/KHIuc3BsaWNlKDAscyksdC5idWZmZXJlZEluZGV4PTApOnQuYnVmZmVyZWRJbmRleD1zfXQuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiB1bChlKXtyZXR1cm4gZS5lbmRpbmcmJmUuY29uc3RydWN0ZWQmJmUubGVuZ3RoPT09MCYmIWUuZXJyb3JlZCYmZS5idWZmZXJlZC5sZW5ndGg9PT0wJiYhZS5maW5pc2hlZCYmIWUud3JpdGluZyYmIWUuZXJyb3JFbWl0dGVkJiYhZS5jbG9zZUVtaXR0ZWR9ZnVuY3Rpb24gVU4oZSx0KXtsZXQgcj0hMTtmdW5jdGlvbiBuKG8pe2lmKHIpe2FuKGUsbz8/eHIoKSk7cmV0dXJufWlmKHI9ITAsdC5wZW5kaW5nY2ItLSxvKXtsZXQgaT10W2NuXS5zcGxpY2UoMCk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspaVtzXShvKTthbihlLG8sdC5zeW5jKX1lbHNlIHVsKHQpJiYodC5wcmVmaW5pc2hlZD0hMCxlLmVtaXQoXCJwcmVmaW5pc2hcIiksdC5wZW5kaW5nY2IrKyxGKGZsLGUsdCkpfXQuc3luYz0hMCx0LnBlbmRpbmdjYisrO3RyeXtsZXQgbz1lLl9maW5hbChuKTtpZihvIT1udWxsKXtsZXQgaT1vLnRoZW47dHlwZW9mIGk9PVwiZnVuY3Rpb25cIiYmaS5jYWxsKG8sZnVuY3Rpb24oKXtGKG4sbnVsbCl9LGZ1bmN0aW9uKHMpe0YobixzKX0pfX1jYXRjaChvKXtuKGUsdCxvKX10LnN5bmM9ITF9ZnVuY3Rpb24gTU4oZSx0KXshdC5wcmVmaW5pc2hlZCYmIXQuZmluYWxDYWxsZWQmJih0eXBlb2YgZS5fZmluYWw9PVwiZnVuY3Rpb25cIiYmIXQuZGVzdHJveWVkPyh0LmZpbmFsQ2FsbGVkPSEwLFVOKGUsdCkpOih0LnByZWZpbmlzaGVkPSEwLGUuZW1pdChcInByZWZpbmlzaFwiKSkpfWZ1bmN0aW9uIF9sKGUsdCxyKXt1bCh0KSYmKE1OKGUsdCksdC5wZW5kaW5nY2I9PT0wJiZ1bCh0KSYmKHQucGVuZGluZ2NiKysscj9GKGZsLGUsdCk6ZmwoZSx0KSkpfWZ1bmN0aW9uIGZsKGUsdCl7dC5wZW5kaW5nY2ItLSx0LmZpbmlzaGVkPSEwO2xldCByPXRbY25dLnNwbGljZSgwKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKylyW25dKCk7aWYoZS5lbWl0KFwiZmluaXNoXCIpLHQuYXV0b0Rlc3Ryb3kpe2xldCBuPWUuX3JlYWRhYmxlU3RhdGU7KCFufHxuLmF1dG9EZXN0cm95JiYobi5lbmRFbWl0dGVkfHxuLnJlYWRhYmxlPT09ITEpKSYmZS5kZXN0cm95KCl9fWZ1bmN0aW9uIGtOKGUpe3JldHVybiBlIGluc3RhbmNlb2YgV3JpdGFibGVTdHJlYW19dmFyIGFuLGNuLHNuLEVQLE9lLGRsPUEoKCk9PntkZSgpO0tjKCk7WmkoKTt1ZSgpO0pjKCk7Y3QoKTtucygpO2VlKCk7S3QoKTt5cigpO3RuKCk7YW8oKTthcigpOyh7ZXJyb3JPckRlc3Ryb3k6YW59PWplKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoaWUucHJvdG90eXBlLGoucHJvdG90eXBlKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoaWUsaik7Y249U3ltYm9sKFwia09uRmluaXNoZWRcIik7Y28ucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlcmVkLnNsaWNlKHRoaXMuYnVmZmVyZWRJbmRleCl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShjby5wcm90b3R5cGUsXCJidWZmZXJlZFJlcXVlc3RDb3VudFwiLHtnZXQoKXtyZXR1cm4gdGhpcy5idWZmZXJlZC5sZW5ndGgtdGhpcy5idWZmZXJlZEluZGV4fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpZSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXS5jYWxsKHRoaXMsZSk/ITA6dGhpcyE9PWllPyExOmUmJmUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBjb319KTtpZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe2FuKHRoaXMsbmV3IE5pKX07aWUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdl8odGhpcyxlLHQscik9PT0hMH07aWUucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfTtpZS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtlLmNvcmtlZCYmKGUuY29ya2VkLS0sZS53cml0aW5nfHxFbCh0aGlzLGUpKX07aWUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbih0KXtpZih0eXBlb2YgdD09XCJzdHJpbmdcIiYmKHQ9dC50b0xvd2VyQ2FzZSgpKSwheC5pc0VuY29kaW5nKHQpKXRocm93IG5ldyBRcih0KTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9dCx0aGlzfTtpZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLl93cml0ZXYpdGhpcy5fd3JpdGV2KFt7Y2h1bms6ZSxlbmNvZGluZzp0fV0scik7ZWxzZSB0aHJvdyBuZXcgbnIoXCJfd3JpdGUoKVwiKX07aWUucHJvdG90eXBlLl93cml0ZXY9bnVsbDtpZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10aGlzLl93cml0YWJsZVN0YXRlO3R5cGVvZiBlPT1cImZ1bmN0aW9uXCI/KHI9ZSxlPW51bGwsdD1udWxsKTp0eXBlb2YgdD09XCJmdW5jdGlvblwiJiYocj10LHQ9bnVsbCk7bGV0IG87aWYoZSE9bnVsbCl7bGV0IGk9dl8odGhpcyxlLHQpO2kgaW5zdGFuY2VvZiBFcnJvciYmKG89aSl9cmV0dXJuIG4uY29ya2VkJiYobi5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxvfHwoIW4uZXJyb3JlZCYmIW4uZW5kaW5nPyhuLmVuZGluZz0hMCxfbCh0aGlzLG4sITApLG4uZW5kZWQ9ITApOm4uZmluaXNoZWQ/bz1uZXcgeGkoXCJlbmRcIik6bi5kZXN0cm95ZWQmJihvPW5ldyB5dChcImVuZFwiKSkpLHR5cGVvZiByPT1cImZ1bmN0aW9uXCImJihvfHxuLmZpbmlzaGVkP0YocixvKTpuW2NuXS5wdXNoKHIpKSx0aGlzfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpZS5wcm90b3R5cGUse2Rlc3Ryb3llZDp7Z2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ6ITF9LHNldChlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fSx3cml0YWJsZTp7Z2V0KCl7bGV0IGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4hIWUmJmUud3JpdGFibGUhPT0hMSYmIWUuZGVzdHJveWVkJiYhZS5lcnJvcmVkJiYhZS5lbmRpbmcmJiFlLmVuZGVkfSxzZXQoZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGU9ISFlKX19LHdyaXRhYmxlRmluaXNoZWQ6e2dldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ6ITF9fSx3cml0YWJsZU9iamVjdE1vZGU6e2dldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUub2JqZWN0TW9kZTohMX19LHdyaXRhYmxlQnVmZmVyOntnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19LHdyaXRhYmxlRW5kZWQ6e2dldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nOiExfX0sd3JpdGFibGVOZWVkRHJhaW46e2dldCgpe2xldCBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuIGU/IWUuZGVzdHJveWVkJiYhZS5lbmRpbmcmJmUubmVlZERyYWluOiExfX0sd3JpdGFibGVIaWdoV2F0ZXJNYXJrOntnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0sd3JpdGFibGVDb3JrZWQ6e2dldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkOjB9fSx3cml0YWJsZUxlbmd0aDp7Z2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX19KTtzbj1qZS5kZXN0cm95O2llLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKGUsdCl7bGV0IHI9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4hci5kZXN0cm95ZWQmJihyLmJ1ZmZlcmVkSW5kZXg8ci5idWZmZXJlZC5sZW5ndGh8fHJbY25dLmxlbmd0aCkmJkYoUmwsciksc24uY2FsbCh0aGlzLGUsdCksdGhpc307aWUucHJvdG90eXBlLl91bmRlc3Ryb3k9amUudW5kZXN0cm95O2llLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3QoZSl9O2llLnByb3RvdHlwZVtwdC5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXT1mdW5jdGlvbihlKXt0aGlzLmRlc3Ryb3koZSl9O2llLldyaXRhYmxlU3RhdGU9Y287RVA9aWUuZnJvbVdlYj1mdW5jdGlvbihlLHQ9e30pe2lmKCFrTihlKSl0aHJvdyBuZXcgQihcIndyaXRhYmxlU3RyZWFtXCIsXCJXcml0YWJsZVN0cmVhbVwiLGUpO3ZlKHQsXCJvcHRpb25zXCIpO2xldHtoaWdoV2F0ZXJNYXJrOnIsZGVjb2RlU3RyaW5nczpuPSEwLG9iamVjdE1vZGU6bz0hMSxzaWduYWw6aX09dDtnZShvLFwib3B0aW9ucy5vYmplY3RNb2RlXCIpLGdlKG4sXCJvcHRpb25zLmRlY29kZVN0cmluZ3NcIik7bGV0IHM9ZS5nZXRXcml0ZXIoKSxhPSExLGM9bmV3IGllKHtoaWdoV2F0ZXJNYXJrOnIsb2JqZWN0TW9kZTpvLGRlY29kZVN0cmluZ3M6bixzaWduYWw6aSx3cml0ZXYodSxSKXtmdW5jdGlvbiBmKHApe3A9cC5maWx0ZXIobD0+bCk7dHJ5e1IocC5sZW5ndGg9PT0wP3ZvaWQgMDpwKX1jYXRjaChsKXtGKCgpPT5zbi5jYWxsKGMsbCkpfX1zLnJlYWR5LnRoZW4oKCk9PlByb21pc2UuQWxsKHUubWFwKHA9PnMud3JpdGUocC5jaHVuaykpKS50aGVuKGYsZiksZil9LHdyaXRlKHUsUixmKXt0eXBlb2YgdT09XCJzdHJpbmdcIiYmbiYmIW8mJih1PXguZnJvbSh1LFIpLHU9bmV3IFVpbnQ4QXJyYXkodS5idWZmZXIsdS5ieXRlT2Zmc2V0LHUuYnl0ZUxlbmd0aCkpO2Z1bmN0aW9uIHAobCl7dHJ5e2YobCl9Y2F0Y2goXyl7c24odGhpcyxkdXBsZXgsXyl9fXMucmVhZHkudGhlbigoKT0+cy53cml0ZSh1KS50aGVuKHAscCkscCl9LGRlc3Ryb3kodSxSKXtmdW5jdGlvbiBmKCl7dHJ5e1IodSl9Y2F0Y2gocCl7RigoKT0+e3Rocm93IHB9KX19aWYoIWEpe3UhPW51bGw/cy5hYm9ydCh1KS50aGVuKGYsZik6cy5jbG9zZSgpLnRoZW4oZixmKTtyZXR1cm59ZigpfSxmaW5hbCh1KXtmdW5jdGlvbiBSKGYpe3RyeXt1KGYpfWNhdGNoKHApe0YoKCk9PnNuLmNhbGwoYyxwKSl9fWF8fHMuY2xvc2UoKS50aGVuKFIsUil9fSk7cmV0dXJuIHMuY2xvc2VkLnRoZW4oKCk9PnthPSEwLGVvKGMpfHxzbi5jYWxsKGMsbmV3IEh0KX0sdT0+e2E9ITAsc24uY2FsbChjLHUpfSksY307aWUuV3JpdGFibGU9aWU7T2U9aWV9KTtmdW5jdGlvbiBzdChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBzdCkpcmV0dXJuIG5ldyBzdChlKTtrZS5jYWxsKHRoaXMsZSksT2UuY2FsbCh0aGlzLGUpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxlJiYoZS5yZWFkYWJsZT09PSExJiYodGhpcy5yZWFkYWJsZT0hMSksZS53cml0YWJsZT09PSExJiYodGhpcy53cml0YWJsZT0hMSksZS5hbGxvd0hhbGZPcGVuPT09ITEmJih0aGlzLmFsbG93SGFsZk9wZW49ITEpKX1mdW5jdGlvbiBCTihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtfWZ1bmN0aW9uIEZOKGUpe3JldHVybiBlIGluc3RhbmNlb2YgV3JpdGFibGVTdHJlYW19ZnVuY3Rpb24gbG8oZSx0KXtpZihoXyhlKSlyZXR1cm4gZTtpZihDdChlKSlyZXR1cm4gYXMoe3JlYWRhYmxlOmV9KTtpZihKbihlKSlyZXR1cm4gYXMoe3dyaXRhYmxlOmV9KTtpZihMdChlKSlyZXR1cm4gYXMoe3dyaXRhYmxlOiExLHJlYWRhYmxlOiExfSk7aWYodHlwZW9mIGU9PVwiZnVuY3Rpb25cIil7bGV0e3ZhbHVlOm4sd3JpdGU6byxmaW5hbDppLGRlc3Ryb3k6c309dk4oZSk7aWYoT3QobikpcmV0dXJuIG5vKGJyLG4se29iamVjdE1vZGU6ITAsd3JpdGU6byxmaW5hbDppLGRlc3Ryb3k6c30pO2xldCBhPW4/LnRoZW47aWYodHlwZW9mIGE9PVwiZnVuY3Rpb25cIil7bGV0IGMsdT1hLmNhbGwobixSPT57aWYoUiE9bnVsbCl0aHJvdyBuZXcgJHQoXCJudWxseVwiLFwiYm9keVwiLFIpfSxSPT57UnQoYyxSKX0pO3JldHVybiBjPW5ldyBicih7b2JqZWN0TW9kZTohMCxyZWFkYWJsZTohMSx3cml0ZTpvLGZpbmFsKFIpe2koYXN5bmMoKT0+e3RyeXthd2FpdCB1LEYoUixudWxsKX1jYXRjaChmKXtGKFIsZil9fSl9LGRlc3Ryb3k6c30pfXRocm93IG5ldyAkdChcIkl0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb25cIix0LG4pfWlmKFNfKGUpKXJldHVybiBsbyhlLmFycmF5QnVmZmVyKCkpO2lmKE90KGUpKXJldHVybiBubyhicixlLHtvYmplY3RNb2RlOiEwLHdyaXRhYmxlOiExfSk7aWYodHlwZW9mIGU/LndyaXRhYmxlPT1cIm9iamVjdFwifHx0eXBlb2YgZT8ucmVhZGFibGU9PVwib2JqZWN0XCIpe2xldCBuPWU/LnJlYWRhYmxlP0N0KGU/LnJlYWRhYmxlKT9lPy5yZWFkYWJsZTpsbyhlLnJlYWRhYmxlKTp2b2lkIDAsbz1lPy53cml0YWJsZT9KbihlPy53cml0YWJsZSk/ZT8ud3JpdGFibGU6bG8oZS53cml0YWJsZSk6dm9pZCAwO3JldHVybiBhcyh7cmVhZGFibGU6bix3cml0YWJsZTpvfSl9bGV0IHI9ZT8udGhlbjtpZih0eXBlb2Ygcj09XCJmdW5jdGlvblwiKXtsZXQgbjtyZXR1cm4gci5jYWxsKGUsbz0+e28hPW51bGwmJm4ucHVzaChvKSxuLnB1c2gobnVsbCl9LG89PntSdChuLG8pfSksbj1uZXcgYnIoe29iamVjdE1vZGU6ITAsd3JpdGFibGU6ITEscmVhZCgpe319KX10aHJvdyBuZXcgQih0LFtcIkJsb2JcIixcIlJlYWRhYmxlU3RyZWFtXCIsXCJXcml0YWJsZVN0cmVhbVwiLFwiU3RyZWFtXCIsXCJJdGVyYWJsZVwiLFwiQXN5bmNJdGVyYWJsZVwiLFwiRnVuY3Rpb25cIixcInsgcmVhZGFibGUsIHdyaXRhYmxlIH0gcGFpclwiLFwiUHJvbWlzZVwiXSxlKX1mdW5jdGlvbiB2TihlKXtsZXR7cHJvbWlzZTp0LHJlc29sdmU6cn09bGEoKSxuPW5ldyBBYm9ydENvbnRyb2xsZXIsbz1uLnNpZ25hbDtyZXR1cm57dmFsdWU6ZShhc3luYyBmdW5jdGlvbiooKXtmb3IoOzspe2xldCBzPXQ7dD1udWxsO2xldHtjaHVuazphLGRvbmU6YyxjYjp1fT1hd2FpdCBzO2lmKEYodSksYylyZXR1cm47aWYoby5hYm9ydGVkKXRocm93IG5ldyBoZTsoe3Byb21pc2U6dCxyZXNvbHZlOnJ9PWxhKCkpLHlpZWxkIGF9fSgpLHtzaWduYWw6b30pLHdyaXRlKHMsYSxjKXtsZXQgdT1yO3I9bnVsbCx1KHtjaHVuazpzLGRvbmU6ITEsY2I6Y30pfSxmaW5hbChzKXtsZXQgYT1yO3I9bnVsbCxhKHtkb25lOiEwLGNiOnN9KX0sZGVzdHJveShzLGEpe24uYWJvcnQoKSxhKHMpfX19ZnVuY3Rpb24gYXMoZSl7bGV0IHQ9ZS5yZWFkYWJsZSYmdHlwZW9mIGUucmVhZGFibGUucmVhZCE9XCJmdW5jdGlvblwiP2tlLndyYXAoZS5yZWFkYWJsZSk6ZS5yZWFkYWJsZSxyPWUud3JpdGFibGUsbj0hIXRvKHQpLG89ISFybyhyKSxpLHMsYSxjLHU7ZnVuY3Rpb24gUihmKXtsZXQgcD1jO2M9bnVsbCxwP3AoZik6Zj91LmRlc3Ryb3koZik6IW4mJiFvJiZ1LmRlc3Ryb3koKX1yZXR1cm4gdT1uZXcgYnIoe3JlYWRhYmxlT2JqZWN0TW9kZTohIXQ/LnJlYWRhYmxlT2JqZWN0TW9kZSx3cml0YWJsZU9iamVjdE1vZGU6ISFyPy53cml0YWJsZU9iamVjdE1vZGUscmVhZGFibGU6bix3cml0YWJsZTpvfSksbyYmKEplKHIsZj0+e289ITEsZiYmUnQodCxmKSxSKGYpfSksdS5fd3JpdGU9ZnVuY3Rpb24oZixwLGwpe3Iud3JpdGUoZixwKT9sKCk6aT1sfSx1Ll9maW5hbD1mdW5jdGlvbihmKXtyLmVuZCgpLHM9Zn0sci5vbihcImRyYWluXCIsZnVuY3Rpb24oKXtpZihpKXtsZXQgZj1pO2k9bnVsbCxmKCl9fSksci5vbihcImZpbmlzaFwiLGZ1bmN0aW9uKCl7aWYocyl7bGV0IGY9cztzPW51bGwsZigpfX0pKSxuJiYoSmUodCxmPT57bj0hMSxmJiZSdCh0LGYpLFIoZil9KSx0Lm9uKFwicmVhZGFibGVcIixmdW5jdGlvbigpe2lmKGEpe2xldCBmPWE7YT1udWxsLGYoKX19KSx0Lm9uKFwiZW5kXCIsZnVuY3Rpb24oKXt1LnB1c2gobnVsbCl9KSx1Ll9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtsZXQgZj10LnJlYWQoKTtpZihmPT09bnVsbCl7YT11Ll9yZWFkO3JldHVybn1pZighdS5wdXNoKGYpKXJldHVybn19KSx1Ll9kZXN0cm95PWZ1bmN0aW9uKGYscCl7IWYmJmMhPT1udWxsJiYoZj1uZXcgaGUpLGE9bnVsbCxpPW51bGwscz1udWxsLGM9PT1udWxsP3AoZik6KGM9cCxSdChyLGYpLFJ0KHQsZikpfSx1fWZ1bmN0aW9uIFdOKGUpe3JldHVybiBsbyhlLFwiYm9keVwiKX12YXIgVFAsYnIsS2UsdW89QSgoKT0+e3ooKTt5cigpO2dfKCk7ZWUoKTthcigpO0t0KCk7WmMoKTtvbigpO2FvKCk7ZGwoKTtkZSgpO3VlKCk7T2JqZWN0LnNldFByb3RvdHlwZU9mKHN0LnByb3RvdHlwZSxrZS5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZihzdCxrZSk7Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKE9lLnByb3RvdHlwZSkpc3QucHJvdG90eXBlW2VdfHwoc3QucHJvdG90eXBlW2VdPU9lLnByb3RvdHlwZVtlXSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3QucHJvdG90eXBlLHt3cml0YWJsZTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9lLnByb3RvdHlwZSxcIndyaXRhYmxlXCIpLHdyaXRhYmxlSGlnaFdhdGVyTWFyazpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9lLnByb3RvdHlwZSxcIndyaXRhYmxlSGlnaFdhdGVyTWFya1wiKSx3cml0YWJsZU9iamVjdE1vZGU6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPZS5wcm90b3R5cGUsXCJ3cml0YWJsZU9iamVjdE1vZGVcIiksd3JpdGFibGVCdWZmZXI6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPZS5wcm90b3R5cGUsXCJ3cml0YWJsZUJ1ZmZlclwiKSx3cml0YWJsZUxlbmd0aDpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9lLnByb3RvdHlwZSxcIndyaXRhYmxlTGVuZ3RoXCIpLHdyaXRhYmxlRmluaXNoZWQ6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPZS5wcm90b3R5cGUsXCJ3cml0YWJsZUZpbmlzaGVkXCIpLHdyaXRhYmxlQ29ya2VkOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2UucHJvdG90eXBlLFwid3JpdGFibGVDb3JrZWRcIiksd3JpdGFibGVFbmRlZDpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9lLnByb3RvdHlwZSxcIndyaXRhYmxlRW5kZWRcIiksd3JpdGFibGVOZWVkRHJhaW46T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPZS5wcm90b3R5cGUsXCJ3cml0YWJsZU5lZWREcmFpblwiKSxkZXN0cm95ZWQ6e2dldCgpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlPT09dm9pZCAwfHx0aGlzLl93cml0YWJsZVN0YXRlPT09dm9pZCAwPyExOnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0KGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1lLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX19KTtUUD1zdC5mcm9tV2ViPWZ1bmN0aW9uKGUsdCl7dmUoZSxcInBhaXJcIik7bGV0e3JlYWRhYmxlOnIsd3JpdGFibGU6bn09ZTtpZighQk4ocikpdGhyb3cgbmV3IEIoXCJwYWlyLnJlYWRhYmxlXCIsXCJSZWFkYWJsZVN0cmVhbVwiLHIpO2lmKCFGTihuKSl0aHJvdyBuZXcgQihcInBhaXIud3JpdGFibGVcIixcIldyaXRhYmxlU3RyZWFtXCIsbik7dmUodCxcIm9wdGlvbnNcIik7bGV0e2FsbG93SGFsZk9wZW46bz0hMSxvYmplY3RNb2RlOmk9ITEsZW5jb2Rpbmc6cyxkZWNvZGVTdHJpbmdzOmE9ITAsaGlnaFdhdGVyTWFyazpjLHNpZ25hbDp1fT10O2lmKGdlKGksXCJvcHRpb25zLm9iamVjdE1vZGVcIikscyE9PXZvaWQgMCYmIXguaXNFbmNvZGluZyhzKSl0aHJvdyBuZXcgYWUocyxcIm9wdGlvbnMuZW5jb2RpbmdcIik7bGV0IFI9bi5nZXRXcml0ZXIoKSxmPXIuZ2V0UmVhZGVyKCkscD0hMSxsPSExLF89bmV3IHN0KHthbGxvd0hhbGZPcGVuOm8saGlnaFdhdGVyTWFyazpjLG9iamVjdE1vZGU6aSxlbmNvZGluZzpzLGRlY29kZVN0cmluZ3M6YSxzaWduYWw6dSx3cml0ZXYoRSxoKXtmdW5jdGlvbiBTKGQpe2Q9ZC5maWx0ZXIoZz0+Zyk7dHJ5e2goZC5sZW5ndGg9PT0wP3ZvaWQgMDpkKX1jYXRjaChnKXtGKCgpPT5kZXN0cm95KF8sZykpfX1SLnJlYWR5LnRoZW4oKCk9PlByb21pc2UuQWxsKEUubWFwKGQ9PlIud3JpdGUoZC5jaHVuaykpKS50aGVuKFMsUyksUyl9LHdyaXRlKEUsaCxTKXt0eXBlb2YgRT09XCJzdHJpbmdcIiYmYSYmIWkmJihFPXguZnJvbShFLGgpLEU9bmV3IFVpbnQ4QXJyYXkoRS5idWZmZXIsRS5ieXRlT2Zmc2V0LEUuYnl0ZUxlbmd0aCkpO2Z1bmN0aW9uIGQoZyl7dHJ5e1MoZyl9Y2F0Y2goTyl7ZGVzdHJveShfLE8pfX1SLnJlYWR5LnRoZW4oKCk9PlIud3JpdGUoRSkudGhlbihkLGQpLGQpfSxmaW5hbChFKXtmdW5jdGlvbiBoKFMpe3RyeXtFKFMpfWNhdGNoKGQpe0YoKCk9PmRlc3Ryb3koXyxkKSl9fXB8fFIuY2xvc2UoKS50aGVuKGgsaCl9LHJlYWQoKXtmLnJlYWQoKS50aGVuKEU9PntFLmRvbmU/Xy5wdXNoKG51bGwpOl8ucHVzaChFLnZhbHVlKX0sRT0+ZGVzdHJveShfLEUpKX0sZGVzdHJveShFLGgpe2Z1bmN0aW9uIFMoKXt0cnl7aChFKX1jYXRjaChPKXtGKCgpPT57dGhyb3cgT30pfX1hc3luYyBmdW5jdGlvbiBkKCl7cHx8YXdhaXQgUi5hYm9ydChFKX1hc3luYyBmdW5jdGlvbiBnKCl7bHx8YXdhaXQgZi5jYW5jZWwoRSl9aWYoIXB8fCFsKXtQcm9taXNlLkFsbChbZCgpLGcoKV0pLnRoZW4oUyxTKTtyZXR1cm59UygpfX0pO3JldHVybiBSLmNsb3NlZC50aGVuKCgpPT57cD0hMCxlbyhfKXx8ZGVzdHJveShfLG5ldyBIdCl9LEU9PntwPSEwLGw9ITAsZGVzdHJveShfLEUpfSksZi5jbG9zZWQudGhlbigoKT0+e2w9ITAsSmkoXyl8fF8ucHVzaChudWxsKX0sRT0+e3A9ITAsbD0hMCxkZXN0cm95KF8sRSl9KSxffSxicj1jbGFzcyBleHRlbmRzIHN0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHQ/LnJlYWRhYmxlPT09ITEmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSEwKSx0Py53cml0YWJsZT09PSExJiYodGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZT0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMCx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSEwLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITApfX07c3QuZnJvbT1XTjtzdC5kdXBsZXhpZnk9bG87S2U9c3R9KTtmdW5jdGlvbiBYdChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBYdCkpcmV0dXJuIG5ldyBYdChlKTtLZS5jYWxsKHRoaXMsZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHRoaXNbbG5dPW51bGwsZSYmKHR5cGVvZiBlLnRyYW5zZm9ybT09XCJmdW5jdGlvblwiJiYodGhpcy5fdHJhbnNmb3JtPWUudHJhbnNmb3JtKSx0eXBlb2YgZS5mbHVzaD09XCJmdW5jdGlvblwiJiYodGhpcy5fZmx1c2g9ZS5mbHVzaCkpLHRoaXMub24oXCJwcmVmaW5pc2hcIixWTil9ZnVuY3Rpb24gaGwoZSl7bGV0IHQ9ITE7aWYodHlwZW9mIHRoaXMuX2ZsdXNoPT1cImZ1bmN0aW9uXCImJiF0aGlzLmRlc3Ryb3llZCl7bGV0IHI9dGhpcy5fZmx1c2goKG4sbyk9PntpZih0PSEwLG4pe2U/ZShuKTp0aGlzLmRlc3Ryb3kobik7cmV0dXJufW8hPW51bGwmJnRoaXMucHVzaChvKSx0aGlzLnB1c2gobnVsbCksZSYmZSgpfSk7aWYociE9bnVsbCl0cnl7bGV0IG49ci50aGVuO3R5cGVvZiBuPT1cImZ1bmN0aW9uXCImJm4uY2FsbChyLG89Pnt0fHwobyE9bnVsbCYmdGhpcy5wdXNoKG8pLHRoaXMucHVzaChudWxsKSxlJiZGKGUpKX0sbz0+e2U/RihlLG8pOkYoKCk9PnRoaXMuZGVzdHJveShvKSl9KX1jYXRjaChuKXtGKCgpPT50aGlzLmRlc3Ryb3kobikpfX1lbHNlIHRoaXMucHVzaChudWxsKSxlJiZlKCl9ZnVuY3Rpb24gVk4oKXt0aGlzLl9maW5hbCE9PWhsJiZobC5jYWxsKHRoaXMpfXZhciBsbixDcixPbD1BKCgpPT57ZWUoKTtLdCgpO3VvKCk7T2JqZWN0LnNldFByb3RvdHlwZU9mKFh0LnByb3RvdHlwZSxLZS5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZihYdCxLZSk7bG49U3ltYm9sKFwia0NhbGxiYWNrXCIpO1h0LnByb3RvdHlwZS5fZmluYWw9aGw7WHQucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LHIpe3Rocm93IG5ldyBucihcIl90cmFuc2Zvcm0oKVwiKX07WHQucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQscil7bGV0IG49dGhpcy5fcmVhZGFibGVTdGF0ZSxvPXRoaXMuX3dyaXRhYmxlU3RhdGUsaT1uLmxlbmd0aCxzPSExLGE9dGhpcy5fdHJhbnNmb3JtKGUsdCwoYyx1KT0+e2lmKHM9ITAsYyl7cihjKTtyZXR1cm59dSE9bnVsbCYmdGhpcy5wdXNoKHUpLG8uZW5kZWR8fGk9PT1uLmxlbmd0aHx8bi5sZW5ndGg8bi5oaWdoV2F0ZXJNYXJrfHxuLmxlbmd0aD09PTA/cigpOnRoaXNbbG5dPXJ9KTtpZihhIT09dm9pZCAwJiZhIT1udWxsKXRyeXtsZXQgYz1hLnRoZW47dHlwZW9mIGM9PVwiZnVuY3Rpb25cIiYmYy5jYWxsKGEsdT0+e3N8fCh1IT1udWxsJiZ0aGlzLnB1c2godSksby5lbmRlZHx8aT09PW4ubGVuZ3RofHxuLmxlbmd0aDxuLmhpZ2hXYXRlck1hcmt8fG4ubGVuZ3RoPT09MD9GKHIpOnRoaXNbbG5dPXIpfSx1PT57RihyLHUpfSl9Y2F0Y2goYyl7RihyLGMpfX07WHQucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7aWYodGhpc1tsbl0pe2xldCBlPXRoaXNbbG5dO3RoaXNbbG5dPW51bGwsZSgpfX07Q3I9WHR9KTtmdW5jdGlvbiB1bihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB1bikpcmV0dXJuIG5ldyB1bihlKTtDci5jYWxsKHRoaXMsZSl9dmFyIGZvLG1sPUEoKCk9PntPbCgpO09iamVjdC5zZXRQcm90b3R5cGVPZih1bi5wcm90b3R5cGUsQ3IucHJvdG90eXBlKTtPYmplY3Quc2V0UHJvdG90eXBlT2YodW4sQ3IpO3VuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyKXtyKG51bGwsZSl9O2ZvPXVufSk7ZnVuY3Rpb24gVl8oZSx0LHIsbil7bj1ocihuKTtsZXQgbz0hMTtyZXR1cm4gZS5vbihcImNsb3NlXCIsKCk9PntvPSEwfSksSmUoZSx7cmVhZGFibGU6dCx3cml0YWJsZTpyfSxpPT57bz0haTtsZXQgcz1lLl9yZWFkYWJsZVN0YXRlO2kmJmkuY29kZT09PVwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIiYmdCYmcyYmcy5lbmRlZCYmIXMuZXJyb3JlZCYmIXMuZXJyb3JFbWl0dGVkP2Uub25jZShcImVuZFwiLG4pLm9uY2UoXCJlcnJvclwiLG4pOm4oaSl9KSxpPT57b3x8KG89ITAsamUuZGVzdHJveWVyKGUsaSksbihpfHxuZXcgeXQoXCJwaXBlXCIpKSl9fWZ1bmN0aW9uIEhOKGUpe3JldHVybiBsdChlW2UubGVuZ3RoLTFdKSxlLnBvcCgpfWZ1bmN0aW9uIEhfKGUpe2lmKE90KGUpKXJldHVybiBlO2lmKEN0KGUpKXJldHVybiAkTihlKTt0aHJvdyBuZXcgQihcInZhbFwiLFtcIlJlYWRhYmxlXCIsXCJJdGVyYWJsZVwiLFwiQXN5bmNJdGVyYWJsZVwiXSxlKX1hc3luYyBmdW5jdGlvbiokTihlKXt5aWVsZCprZS5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLmNhbGwoZSl9YXN5bmMgZnVuY3Rpb24gJF8oZSx0LHIpe2xldCBuLG89bnVsbCxpPWM9PntpZihjJiYobj1jKSxvKXtsZXQgdT1vO289bnVsbCx1KCl9fSxzPSgpPT5uZXcgUHJvbWlzZSgoYyx1KT0+e24/dShuKTpvPSgpPT57bj91KG4pOmMoKX19KTt0Lm9uKFwiZHJhaW5cIixpKTtsZXQgYT1KZSh0LHtyZWFkYWJsZTohMX0saSk7dHJ5e3Qud3JpdGFibGVOZWVkRHJhaW4mJmF3YWl0IHMoKTtmb3IgYXdhaXQobGV0IGMgb2YgZSl0LndyaXRlKGMpfHxhd2FpdCBzKCk7dC5lbmQoKSxhd2FpdCBzKCkscigpfWNhdGNoKGMpe3IobiE9PWM/Q2kobixjKTpjKX1maW5hbGx5e2EoKSx0Lm9mZihcImRyYWluXCIsaSl9fWZ1bmN0aW9uIGZuKC4uLmUpe2xldCB0PWhyKEhOKGUpKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlWzBdKSYmZS5sZW5ndGg9PT0xJiYoZT1lWzBdKSxTbChlLHQpfWZ1bmN0aW9uIFNsKGUsdCxyKXtpZihlLmxlbmd0aDwyKXRocm93IG5ldyBYcihcInN0cmVhbXNcIik7bGV0IG49bmV3IEFib3J0Q29udHJvbGxlcixvPW4uc2lnbmFsLGk9cj8uc2lnbmFsO2t0KGksXCJvcHRpb25zLnNpZ25hbFwiKTtmdW5jdGlvbiBzKCl7cChuZXcgaGUpfWk/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLHMpO2xldCBhLGMsdT1bXSxSPTA7ZnVuY3Rpb24gZihfKXtwKF8sLS1SPT09MCl9ZnVuY3Rpb24gcChfLEUpe2lmKF8mJighYXx8YS5jb2RlPT09XCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiKSYmKGE9XyksISghYSYmIUUpKXtmb3IoO3UubGVuZ3RoOyl1LnNoaWZ0KCkoYSk7aT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIscyksbi5hYm9ydCgpLEUmJnQoYSxjKX19bGV0IGw7Zm9yKGxldCBfPTA7XzxlLmxlbmd0aDtfKyspe2xldCBFPWVbX10saD1fPGUubGVuZ3RoLTEsUz1fPjA7aWYoTHQoRSkmJihSKyssdS5wdXNoKFZfKEUsaCxTLGYpKSksXz09PTApaWYodHlwZW9mIEU9PVwiZnVuY3Rpb25cIil7aWYobD1FKHtzaWduYWw6b30pLCFPdChsKSl0aHJvdyBuZXcgJHQoXCJJdGVyYWJsZSwgQXN5bmNJdGVyYWJsZSBvciBTdHJlYW1cIixcInNvdXJjZVwiLGwpfWVsc2UgT3QoRSl8fEN0KEUpP2w9RTpsPUtlLmZyb20oRSk7ZWxzZSBpZih0eXBlb2YgRT09XCJmdW5jdGlvblwiKWlmKGw9SF8obCksbD1FKGwse3NpZ25hbDpvfSksaCl7aWYoIU90KGwsITApKXRocm93IG5ldyAkdChcIkFzeW5jSXRlcmFibGVcIixgdHJhbnNmb3JtWyR7Xy0xfV1gLGwpfWVsc2V7bGV0IGQ9bmV3IGZvKHtvYmplY3RNb2RlOiEwfSksZz1sPy50aGVuO2lmKHR5cGVvZiBnPT1cImZ1bmN0aW9uXCIpZy5jYWxsKGwsTz0+e2M9TyxkLmVuZChPKX0sTz0+e2QuZGVzdHJveShPKX0pO2Vsc2UgaWYoT3QobCwhMCkpUisrLCRfKGwsZCxmKTtlbHNlIHRocm93IG5ldyAkdChcIkFzeW5jSXRlcmFibGUgb3IgUHJvbWlzZVwiLFwiZGVzdGluYXRpb25cIixsKTtsPWQsUisrLHUucHVzaChWXyhsLCExLCEwLGYpKX1lbHNlIEx0KEUpPyhDdChsKT8obC5waXBlKEUpLChFPT09d3Quc3Rkb3V0fHxFPT09d3Quc3RkZXJyKSYmbC5vbihcImVuZFwiLCgpPT5FLmVuZCgpKSk6KGw9SF8obCksUisrLCRfKGwsRSxmKSksbD1FKTpsPUtlLmZyb20oRSl9cmV0dXJuKG8/LmFib3J0ZWR8fGk/LmFib3J0ZWQpJiZGKHMpLGx9dmFyIGNzPUEoKCk9PnthcigpO3ooKTtlcygpO2RlKCk7ZWUoKTtLdCgpO3lyKCk7dW8oKTtvbigpO2FvKCk7bWwoKX0pO2Z1bmN0aW9uIEdOKC4uLmUpe2lmKGUubGVuZ3RoPT09MCl0aHJvdyBuZXcgWHIoXCJzdHJlYW1zXCIpO2lmKGUubGVuZ3RoPT09MSlyZXR1cm4gS2UuZnJvbShlWzBdKTtsZXQgdD1bLi4uZV07aWYodHlwZW9mIGVbMF09PVwiZnVuY3Rpb25cIiYmKGVbMF09S2UuZnJvbShlWzBdKSksdHlwZW9mIGVbZS5sZW5ndGgtMV09PVwiZnVuY3Rpb25cIil7bGV0IHA9ZS5sZW5ndGgtMTtlW3BdPUtlLmZyb20oZVtwXSl9Zm9yKGxldCBwPTA7cDxlLmxlbmd0aDsrK3ApaWYoISFMdChlW3BdKSl7aWYocDxlLmxlbmd0aC0xJiYhdG8oZVtwXSkpdGhyb3cgbmV3IGFlKGBzdHJlYW1zWyR7cH1dYCx0W3BdLFwibXVzdCBiZSByZWFkYWJsZVwiKTtpZihwPjAmJiFybyhlW3BdKSl0aHJvdyBuZXcgYWUoYHN0cmVhbXNbJHtwfV1gLHRbcF0sXCJtdXN0IGJlIHdyaXRhYmxlXCIpfWxldCByLG4sbyxpLHM7ZnVuY3Rpb24gYShwKXtsZXQgbD1pO2k9bnVsbCxsP2wocCk6cD9zLmRlc3Ryb3kocCk6IWYmJiFSJiZzLmRlc3Ryb3koKX1sZXQgYz1lWzBdLHU9Zm4oZSxhKSxSPSEhcm8oYyksZj0hIXRvKHUpO3JldHVybiBzPW5ldyBnbCh7d3JpdGFibGVPYmplY3RNb2RlOiEhYz8ud3JpdGFibGVPYmplY3RNb2RlLHJlYWRhYmxlT2JqZWN0TW9kZTohIXU/LndyaXRhYmxlT2JqZWN0TW9kZSx3cml0YWJsZTpSLHJlYWRhYmxlOmZ9KSxSJiYocy5fd3JpdGU9ZnVuY3Rpb24ocCxsLF8pe2Mud3JpdGUocCxsKT9fKCk6cj1ffSxzLl9maW5hbD1mdW5jdGlvbihwKXtjLmVuZCgpLG49cH0sYy5vbihcImRyYWluXCIsZnVuY3Rpb24oKXtpZihyKXtsZXQgcD1yO3I9bnVsbCxwKCl9fSksdS5vbihcImZpbmlzaFwiLGZ1bmN0aW9uKCl7aWYobil7bGV0IHA9bjtuPW51bGwscCgpfX0pKSxmJiYodS5vbihcInJlYWRhYmxlXCIsZnVuY3Rpb24oKXtpZihvKXtsZXQgcD1vO289bnVsbCxwKCl9fSksdS5vbihcImVuZFwiLGZ1bmN0aW9uKCl7cy5wdXNoKG51bGwpfSkscy5fcmVhZD1mdW5jdGlvbigpe2Zvcig7Oyl7bGV0IHA9dS5yZWFkKCk7aWYocD09PW51bGwpe289cy5fcmVhZDtyZXR1cm59aWYoIXMucHVzaChwKSlyZXR1cm59fSkscy5fZGVzdHJveT1mdW5jdGlvbihwLGwpeyFwJiZpIT09bnVsbCYmKHA9bmV3IGhlKSxvPW51bGwscj1udWxsLG49bnVsbCxpPT09bnVsbD9sKHApOihpPWwsUnQodSxwKSl9LHN9dmFyIGdsLEdfLFlfPUEoKCk9Pnt5cigpO2FyKCk7Y3MoKTtlZSgpO3VvKCk7Z2w9Y2xhc3MgZXh0ZW5kcyBLZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0Py5yZWFkYWJsZT09PSExJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZT0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMCksdD8ud3JpdGFibGU9PT0hMSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGU9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMCx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSEwKX19O0dfPUdOfSk7ZnVuY3Rpb24gWU4oLi4uZSl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LHIpPT57bGV0IG4sbyxpPWVbZS5sZW5ndGgtMV07aWYoaSYmdHlwZW9mIGk9PVwib2JqZWN0XCImJiFMdChpKSYmIU90KGkpKXtsZXQgcz1lLnBvcCgpO249cy5zaWduYWwsbz1zLmVuZH1TbChlLChzLGEpPT57cz9yKHMpOnQoYSl9LHtzaWduYWw6bixlbmQ6b30pfSl9ZnVuY3Rpb24gak4oZSx0KXtyZXR1cm4gbmV3IFByb21pc2UoKHIsbik9PntKZShlLHQsbz0+e28/bihvKTpyKCl9KX0pfXZhciBscyxqXz1BKCgpPT57YXIoKTtjcygpO29uKCk7bHM9e2ZpbmlzaGVkOmpOLHBpcGVsaW5lOllOfX0pO3ZhciBLXyxYXz1BKCgpPT57S2MoKTtaaSgpO3lyKCk7YXIoKTtjdCgpO2NzKCk7eigpO25zKCk7WV8oKTt1bygpO29uKCk7bWwoKTtqXygpO2FvKCk7T2woKTtkbCgpOyh7Y3VzdG9tOktffT13KTtqLmlzRGlzdHVyYmVkPW1fO2ouUmVhZGFibGU9a2U7ai5Xcml0YWJsZT1PZTtqLkR1cGxleD1LZTtqLlRyYW5zZm9ybT1DcjtqLlBhc3NUaHJvdWdoPWZvO2oucGlwZWxpbmU9Zm47ai5hZGRBYm9ydFNpZ25hbD1YYztqLmZpbmlzaGVkPUplO2ouZGVzdHJveT1SdDtqLmNvbXBvc2U9R187T2JqZWN0LmRlZmluZVByb3BlcnR5KGosXCJwcm9taXNlc1wiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gbHN9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLEtfLHtlbnVtZXJhYmxlOiEwLGdldCgpe3JldHVybiBscy5waXBlbGluZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSmUsS18se2VudW1lcmFibGU6ITAsZ2V0KCl7cmV0dXJuIGxzLmZpbmlzaGVkfX0pO2ouU3RyZWFtPWo7ai5faXNVaW50OEFycmF5PUZlO2ouX3VpbnQ4QXJyYXlUb0J1ZmZlcj16bn0pO3ZhciB1cz1BKCgpPT57WF8oKX0pO2Z1bmN0aW9uIHFfKGUsdCl7bGV0IHI9bmV3IE9lKHt3cml0ZShuLG8saSl7aWYoIWUpe3RoaXMuZGVzdHJveShuZXcgRXJyb3IoYERlbm8uJHt0fSBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnRgKSk7cmV0dXJufWUud3JpdGVTeW5jKG4gaW5zdGFuY2VvZiBVaW50OEFycmF5P246eC5mcm9tKG4sbykpLGkoKX0sZGVzdHJveShuLG8pe28obiksdGhpcy5fdW5kZXN0cm95KCksdGhpcy5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fG5leHRUaWNrKCgpPT50aGlzLmVtaXQoXCJjbG9zZVwiKSl9fSk7cmV0dXJuIHIuZmQ9ZT8ucmlkPz8tMSxyLmRlc3Ryb3lTb29uPXIuZGVzdHJveSxyLl9pc1N0ZGlvPSEwLHIub25jZShcImNsb3NlXCIsKCk9PmU/LmNsb3NlKCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIse2NvbHVtbnM6e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+RGVuby5pc2F0dHk/LihlPy5yaWQpP0Rlbm8uY29uc29sZVNpemU/LihlPy5yaWQpLmNvbHVtbnM6dm9pZCAwfSxyb3dzOntlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PkRlbm8uaXNhdHR5Py4oZT8ucmlkKT9EZW5vLmNvbnNvbGVTaXplPy4oZT8ucmlkKS5yb3dzOnZvaWQgMH0saXNUVFk6e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+RGVuby5pc2F0dHk/LihlPy5yaWQpfSxnZXRXaW5kb3dTaXplOntlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTooKT0+RGVuby5pc2F0dHk/LihlPy5yaWQpP09iamVjdC52YWx1ZXMoRGVuby5jb25zb2xlU2l6ZT8uKGU/LnJpZCkpOnZvaWQgMH19KSxEZW5vLmlzYXR0eT8uKGU/LnJpZCkmJihyLmN1cnNvclRvPWZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gaV8odGhpcyxuLG8saSl9LHIubW92ZUN1cnNvcj1mdW5jdGlvbihuLG8saSl7cmV0dXJuIHNfKHRoaXMsbixvLGkpfSxyLmNsZWFyTGluZT1mdW5jdGlvbihuLG8pe3JldHVybiBhXyh0aGlzLG4sbyl9LHIuY2xlYXJTY3JlZW5Eb3duPWZ1bmN0aW9uKG4pe3JldHVybiBjXyh0aGlzLG4pfSkscn12YXIgUV8sel8sbXQsWl89QSgoKT0+e2d0KCk7dWUoKTtsXygpO3VzKCk7ZXMoKTtRXz13dC5zdGRlcnI9cV8oRGVuby5zdGRlcnIsXCJzdGRlcnJcIiksel89d3Quc3Rkb3V0PXFfKERlbm8uc3Rkb3V0LFwic3Rkb3V0XCIpLG10PXd0LnN0ZGluPW5ldyBrZSh7aGlnaFdhdGVyTWFyazowLGVtaXRDbG9zZTohMSxyZWFkKGUpe2xldCB0PXguYWxsb2MoZXx8MTYzODQpO2lmKCFEZW5vLnN0ZGluKXt0aGlzLmRlc3Ryb3kobmV3IEVycm9yKFwiRGVuby5zdGRpbiBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnRcIikpO3JldHVybn1EZW5vLnN0ZGluLnJlYWQodCkudGhlbihyPT57dGhpcy5wdXNoKHI9PT1udWxsP251bGw6dC5zbGljZSgwLHIpKX0scj0+e3RoaXMuZGVzdHJveShyKX0pfX0pO210Lm9uKFwiY2xvc2VcIiwoKT0+RGVuby5zdGRpbj8uY2xvc2UoKSk7bXQuZmQ9RGVuby5zdGRpbj8ucmlkPz8tMTtPYmplY3QuZGVmaW5lUHJvcGVydHkobXQsXCJpc1RUWVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQoKXtyZXR1cm4gRGVuby5pc2F0dHk/LihEZW5vLnN0ZGluLnJpZCl9fSk7bXQuX2lzUmF3TW9kZT0hMTttdC5zZXRSYXdNb2RlPWU9PihyZj8uKERlbm8uc3RkaW4/LnJpZCxlKSxtdC5faXNSYXdNb2RlPWUsbXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtdCxcImlzUmF3XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldCgpe3JldHVybiBtdC5faXNSYXdNb2RlfX0pfSk7dmFyIE5sPXt9O2NlKE5sLHtBc3luY1dyYXA6KCk9Pk5lLFVpZEZpZWxkczooKT0+eGwsYXN5bmNJZEZpZWxkczooKT0+ZnMsYXN5bmNfaG9va19maWVsZHM6KCk9PlhOLGNvbnN0YW50czooKT0+QWwsbmV3QXN5bmNJZDooKT0+ZWQscHJvdmlkZXJUeXBlOigpPT5McixyZWdpc3RlckRlc3Ryb3lIb29rOigpPT5LTn0pO2Z1bmN0aW9uIEtOKGUsdCxyKXt9ZnVuY3Rpb24gZWQoKXtyZXR1cm4rK2ZzWzldfXZhciBBbCxYTix4bCxmcyxMcixKXyxOZSxjcj1BKCgpPT57QWw9KGw9PihsW2wua0luaXQ9MF09XCJrSW5pdFwiLGxbbC5rQmVmb3JlPTFdPVwia0JlZm9yZVwiLGxbbC5rQWZ0ZXI9Ml09XCJrQWZ0ZXJcIixsW2wua0Rlc3Ryb3k9M109XCJrRGVzdHJveVwiLGxbbC5rUHJvbWlzZVJlc29sdmU9NF09XCJrUHJvbWlzZVJlc29sdmVcIixsW2wua1RvdGFscz01XT1cImtUb3RhbHNcIixsW2wua0NoZWNrPTZdPVwia0NoZWNrXCIsbFtsLmtFeGVjdXRpb25Bc3luY0lkPTddPVwia0V4ZWN1dGlvbkFzeW5jSWRcIixsW2wua1RyaWdnZXJBc3luY0lkPThdPVwia1RyaWdnZXJBc3luY0lkXCIsbFtsLmtBc3luY0lkQ291bnRlcj05XT1cImtBc3luY0lkQ291bnRlclwiLGxbbC5rRGVmYXVsdFRyaWdnZXJBc3luY0lkPTEwXT1cImtEZWZhdWx0VHJpZ2dlckFzeW5jSWRcIixsW2wua1VzZXNFeGVjdXRpb25Bc3luY1Jlc291cmNlPTExXT1cImtVc2VzRXhlY3V0aW9uQXN5bmNSZXNvdXJjZVwiLGxbbC5rU3RhY2tMZW5ndGg9MTJdPVwia1N0YWNrTGVuZ3RoXCIsbCkpKEFsfHx7fSksWE49bmV3IFVpbnQzMkFycmF5KE9iamVjdC5rZXlzKEFsKS5sZW5ndGgpO3hsPShpPT4oaVtpLmtFeGVjdXRpb25Bc3luY0lkPTBdPVwia0V4ZWN1dGlvbkFzeW5jSWRcIixpW2kua1RyaWdnZXJBc3luY0lkPTFdPVwia1RyaWdnZXJBc3luY0lkXCIsaVtpLmtBc3luY0lkQ291bnRlcj0yXT1cImtBc3luY0lkQ291bnRlclwiLGlbaS5rRGVmYXVsdFRyaWdnZXJBc3luY0lkPTNdPVwia0RlZmF1bHRUcmlnZ2VyQXN5bmNJZFwiLGlbaS5rVWlkRmllbGRzQ291bnQ9NF09XCJrVWlkRmllbGRzQ291bnRcIixpKSkoeGx8fHt9KSxmcz1uZXcgRmxvYXQ2NEFycmF5KE9iamVjdC5rZXlzKHhsKS5sZW5ndGgpO2ZzWzJdPTE7ZnNbM109LTE7THI9KFQ9PihUW1QuTk9ORT0wXT1cIk5PTkVcIixUW1QuRElSSEFORExFPTFdPVwiRElSSEFORExFXCIsVFtULkROU0NIQU5ORUw9Ml09XCJETlNDSEFOTkVMXCIsVFtULkVMREhJU1RPR1JBTT0zXT1cIkVMREhJU1RPR1JBTVwiLFRbVC5GSUxFSEFORExFPTRdPVwiRklMRUhBTkRMRVwiLFRbVC5GSUxFSEFORExFQ0xPU0VSRVE9NV09XCJGSUxFSEFORExFQ0xPU0VSRVFcIixUW1QuRklYRURTSVpFQkxPQkNPUFk9Nl09XCJGSVhFRFNJWkVCTE9CQ09QWVwiLFRbVC5GU0VWRU5UV1JBUD03XT1cIkZTRVZFTlRXUkFQXCIsVFtULkZTUkVRQ0FMTEJBQ0s9OF09XCJGU1JFUUNBTExCQUNLXCIsVFtULkZTUkVRUFJPTUlTRT05XT1cIkZTUkVRUFJPTUlTRVwiLFRbVC5HRVRBRERSSU5GT1JFUVdSQVA9MTBdPVwiR0VUQUREUklORk9SRVFXUkFQXCIsVFtULkdFVE5BTUVJTkZPUkVRV1JBUD0xMV09XCJHRVROQU1FSU5GT1JFUVdSQVBcIixUW1QuSEVBUFNOQVBTSE9UPTEyXT1cIkhFQVBTTkFQU0hPVFwiLFRbVC5IVFRQMlNFU1NJT049MTNdPVwiSFRUUDJTRVNTSU9OXCIsVFtULkhUVFAyU1RSRUFNPTE0XT1cIkhUVFAyU1RSRUFNXCIsVFtULkhUVFAyUElORz0xNV09XCJIVFRQMlBJTkdcIixUW1QuSFRUUDJTRVRUSU5HUz0xNl09XCJIVFRQMlNFVFRJTkdTXCIsVFtULkhUVFBJTkNPTUlOR01FU1NBR0U9MTddPVwiSFRUUElOQ09NSU5HTUVTU0FHRVwiLFRbVC5IVFRQQ0xJRU5UUkVRVUVTVD0xOF09XCJIVFRQQ0xJRU5UUkVRVUVTVFwiLFRbVC5KU1NUUkVBTT0xOV09XCJKU1NUUkVBTVwiLFRbVC5KU1VEUFdSQVA9MjBdPVwiSlNVRFBXUkFQXCIsVFtULk1FU1NBR0VQT1JUPTIxXT1cIk1FU1NBR0VQT1JUXCIsVFtULlBJUEVDT05ORUNUV1JBUD0yMl09XCJQSVBFQ09OTkVDVFdSQVBcIixUW1QuUElQRVNFUlZFUldSQVA9MjNdPVwiUElQRVNFUlZFUldSQVBcIixUW1QuUElQRVdSQVA9MjRdPVwiUElQRVdSQVBcIixUW1QuUFJPQ0VTU1dSQVA9MjVdPVwiUFJPQ0VTU1dSQVBcIixUW1QuUFJPTUlTRT0yNl09XCJQUk9NSVNFXCIsVFtULlFVRVJZV1JBUD0yN109XCJRVUVSWVdSQVBcIixUW1QuU0hVVERPV05XUkFQPTI4XT1cIlNIVVRET1dOV1JBUFwiLFRbVC5TSUdOQUxXUkFQPTI5XT1cIlNJR05BTFdSQVBcIixUW1QuU1RBVFdBVENIRVI9MzBdPVwiU1RBVFdBVENIRVJcIixUW1QuU1RSRUFNUElQRT0zMV09XCJTVFJFQU1QSVBFXCIsVFtULlRDUENPTk5FQ1RXUkFQPTMyXT1cIlRDUENPTk5FQ1RXUkFQXCIsVFtULlRDUFNFUlZFUldSQVA9MzNdPVwiVENQU0VSVkVSV1JBUFwiLFRbVC5UQ1BXUkFQPTM0XT1cIlRDUFdSQVBcIixUW1QuVFRZV1JBUD0zNV09XCJUVFlXUkFQXCIsVFtULlVEUFNFTkRXUkFQPTM2XT1cIlVEUFNFTkRXUkFQXCIsVFtULlVEUFdSQVA9MzddPVwiVURQV1JBUFwiLFRbVC5TSUdJTlRXQVRDSERPRz0zOF09XCJTSUdJTlRXQVRDSERPR1wiLFRbVC5XT1JLRVI9MzldPVwiV09SS0VSXCIsVFtULldPUktFUkhFQVBTTkFQU0hPVD00MF09XCJXT1JLRVJIRUFQU05BUFNIT1RcIixUW1QuV1JJVEVXUkFQPTQxXT1cIldSSVRFV1JBUFwiLFRbVC5aTElCPTQyXT1cIlpMSUJcIixUKSkoTHJ8fHt9KSxKXz0tMSxOZT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnByb3ZpZGVyPTA7dGhpcy5hc3luY0lkPUpfO3RoaXMucHJvdmlkZXI9dCx0aGlzLmdldEFzeW5jSWQoKX1nZXRBc3luY0lkKCl7cmV0dXJuIHRoaXMuYXN5bmNJZD10aGlzLmFzeW5jSWQ9PT1KXz9lZCgpOnRoaXMuYXN5bmNJZCx0aGlzLmFzeW5jSWR9Z2V0UHJvdmlkZXJUeXBlKCl7cmV0dXJuIHRoaXMucHJvdmlkZXJ9fX0pO3ZhciB0ZD17fTt2YXIgcmQ9QSgoKT0+e30pO3ZhciBuZD1BKCgpPT57QnQoKX0pO2Z1bmN0aW9uIHBvKGUpe3JldHVybiBSZWdFeHAucHJvdG90eXBlLnRlc3QuY2FsbChxTixlKX1mdW5jdGlvbiB6TihlKXtyZXR1cm4gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmNhbGwoUU4sZSl9ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIHBvKGUpPzQ6ek4oZSk/NjowfXZhciBvZCxscixxTixtZSxRTix3VSxwcz1BKCgpPT57dWUoKTtlZSgpO25kKCk7b2Q9XCIoPzpbMC05XXxbMS05XVswLTldfDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNV0pXCIsbHI9YCgke29kfVsuXSl7M30ke29kfWAscU49bmV3IFJlZ0V4cChgXiR7bHJ9JGApLG1lPVwiKD86WzAtOWEtZkEtRl17MSw0fSlcIixRTj1uZXcgUmVnRXhwKGBeKCg/OiR7bWV9Oil7N30oPzoke21lfXw6KXwoPzoke21lfTopezZ9KD86JHtscn18OiR7bWV9fDopfCg/OiR7bWV9Oil7NX0oPzo6JHtscn18KDoke21lfSl7MSwyfXw6KXwoPzoke21lfTopezR9KD86KDoke21lfSl7MCwxfToke2xyfXwoOiR7bWV9KXsxLDN9fDopfCg/OiR7bWV9Oil7M30oPzooOiR7bWV9KXswLDJ9OiR7bHJ9fCg6JHttZX0pezEsNH18Oil8KD86JHttZX06KXsyfSg/Oig6JHttZX0pezAsM306JHtscn18KDoke21lfSl7MSw1fXw6KXwoPzoke21lfTopezF9KD86KDoke21lfSl7MCw0fToke2xyfXwoOiR7bWV9KXsxLDZ9fDopfCg/OjooKD86OiR7bWV9KXswLDV9OiR7bHJ9fCg/Ojoke21lfSl7MSw3fXw6KSkpKCVbMC05YS16QS1aLS46XXsxLH0pPyRgKTt3VT1TeW1ib2woXCJub3JtYWxpemVkQXJnc1wiKX0pO2Z1bmN0aW9uIGlkKGUpe2xldCB0PVtcIlN1Y2Nlc3NmdWwgY29tcGxldGlvblwiLFwiRE5TIHNlcnZlciByZXR1cm5lZCBhbnN3ZXIgd2l0aCBubyBkYXRhXCIsXCJETlMgc2VydmVyIGNsYWltcyBxdWVyeSB3YXMgbWlzZm9ybWF0dGVkXCIsXCJETlMgc2VydmVyIHJldHVybmVkIGdlbmVyYWwgZmFpbHVyZVwiLFwiRG9tYWluIG5hbWUgbm90IGZvdW5kXCIsXCJETlMgc2VydmVyIGRvZXMgbm90IGltcGxlbWVudCByZXF1ZXN0ZWQgb3BlcmF0aW9uXCIsXCJETlMgc2VydmVyIHJlZnVzZWQgcXVlcnlcIixcIk1pc2Zvcm1hdHRlZCBETlMgcXVlcnlcIixcIk1pc2Zvcm1hdHRlZCBkb21haW4gbmFtZVwiLFwiVW5zdXBwb3J0ZWQgYWRkcmVzcyBmYW1pbHlcIixcIk1pc2Zvcm1hdHRlZCBETlMgcmVwbHlcIixcIkNvdWxkIG5vdCBjb250YWN0IEROUyBzZXJ2ZXJzXCIsXCJUaW1lb3V0IHdoaWxlIGNvbnRhY3RpbmcgRE5TIHNlcnZlcnNcIixcIkVuZCBvZiBmaWxlXCIsXCJFcnJvciByZWFkaW5nIGZpbGVcIixcIk91dCBvZiBtZW1vcnlcIixcIkNoYW5uZWwgaXMgYmVpbmcgZGVzdHJveWVkXCIsXCJNaXNmb3JtYXR0ZWQgc3RyaW5nXCIsXCJJbGxlZ2FsIGZsYWdzIHNwZWNpZmllZFwiLFwiR2l2ZW4gaG9zdG5hbWUgaXMgbm90IG51bWVyaWNcIixcIklsbGVnYWwgaGludHMgZmxhZ3Mgc3BlY2lmaWVkXCIsXCJjLWFyZXMgbGlicmFyeSBpbml0aWFsaXphdGlvbiBub3QgeWV0IHBlcmZvcm1lZFwiLFwiRXJyb3IgbG9hZGluZyBpcGhscGFwaS5kbGxcIixcIkNvdWxkIG5vdCBmaW5kIEdldE5ldHdvcmtQYXJhbXMgZnVuY3Rpb25cIixcIkROUyBxdWVyeSBjYW5jZWxsZWRcIl07cmV0dXJuIGU+PTAmJmU8dC5sZW5ndGg/dFtlXTpcInVua25vd25cIn12YXIgc2Q9QSgoKT0+e30pO3ZhciBEbD17fTtjZShEbCx7Q2hhbm5lbFdyYXA6KCk9PlRsLEdldEFkZHJJbmZvUmVxV3JhcDooKT0+SWwsUXVlcnlSZXFXcmFwOigpPT55bCxnZXRhZGRyaW5mbzooKT0+Wk4sc3RyZXJyb3I6KCk9PnRJfSk7ZnVuY3Rpb24gWk4oZSx0LHIsbixvKXtsZXQgaT1bXSxzPVtdO3JldHVybihyPT09MHx8cj09PTQpJiZzLnB1c2goXCJBXCIpLChyPT09MHx8cj09PTYpJiZzLnB1c2goXCJBQUFBXCIpLChhc3luYygpPT57YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHMubWFwKGM9PkRlbm8ucmVzb2x2ZURucyh0LGMpLnRoZW4odT0+e3UuZm9yRWFjaChSPT5pLnB1c2goUikpfSkpKTtsZXQgYT1pLmxlbmd0aD8wOlAuZ2V0KFwiRUFJX05PREFUQVwiKTtvfHxpLnNvcnQoKGMsdSk9PnBvKGMpPy0xOnBvKHUpPzE6MCkscSYmdD09PVwibG9jYWxob3N0XCImJihpPWkuZmlsdGVyKGM9PnBvKGMpKSksZS5vbmNvbXBsZXRlKGEsaSl9KSgpLDB9ZnVuY3Rpb24gUHQoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwuJC8sXCJcIil9ZnVuY3Rpb24gYWQoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFxiKD86MCs6KXsyLH0vLFwiOlwiKS5zcGxpdChcIjpcIikubWFwKG49Pm4ubWF0Y2goL15cXGQrXFwuXFxkK1xcLlxcZCtcXC5cXGQrJC8pP051bWJlcihuLnJlcGxhY2VBbGwoXCIuXCIsXCJcIikpLnRvU3RyaW5nKDE2KTpuLnJlcGxhY2UoL1xcYjArL2csXCJcIikpLmpvaW4oXCI6XCIpfWZ1bmN0aW9uIHRJKGUpe3JldHVybiBlPT09Sk4/ZUk6aWQoZSl9dmFyIElsLHlsLFRsLEpOLGVJLGNkPUEoKCk9PntwcygpO1Z0KCk7Y3IoKTtzZCgpO3llKCk7UGUoKTtJbD1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKCl7c3VwZXIoMTApfX07eWw9Y2xhc3MgZXh0ZW5kcyBOZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKDI3KX19O1RsPWNsYXNzIGV4dGVuZHMgTmV7I3Q9W107I3I7I247Y29uc3RydWN0b3IodCxyKXtzdXBlcigyKSx0aGlzLiNyPXQsdGhpcy4jbj1yfWFzeW5jI2UodCxyKXtsZXQgbixvO2lmKHRoaXMuI3QubGVuZ3RoKWZvcihsZXRbaSxzXW9mIHRoaXMuI3Qpe2xldCBhPXtuYW1lU2VydmVyOntpcEFkZHI6aSxwb3J0OnN9fTtpZih7Y29kZTpuLHJldDpvfT1hd2FpdCB0aGlzLiNpKHQscixhKSxuPT09MHx8bj09PVAuZ2V0KFwiRUFJX05PREFUQVwiKSlicmVha31lbHNlKHtjb2RlOm4scmV0Om99PWF3YWl0IHRoaXMuI2kodCxyKSk7cmV0dXJue2NvZGU6bixyZXQ6b319YXN5bmMjaSh0LHIsbil7bGV0IG89W10saT0wO3RyeXtvPWF3YWl0IERlbm8ucmVzb2x2ZURucyh0LHIsbil9Y2F0Y2gocyl7cyBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kP2k9UC5nZXQoXCJFQUlfTk9EQVRBXCIpOmk9UC5nZXQoXCJVTktOT1dOXCIpfXJldHVybntjb2RlOmkscmV0Om99fXF1ZXJ5QW55KHQscil7cmV0dXJuKGFzeW5jKCk9PntsZXQgbj1bXTthd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW3RoaXMuI2UocixcIkFcIikudGhlbigoe3JldDppfSk9PntpLmZvckVhY2gocz0+bi5wdXNoKHt0eXBlOlwiQVwiLGFkZHJlc3M6c30pKX0pLHRoaXMuI2UocixcIkFBQUFcIikudGhlbigoe3JldDppfSk9PntpLmZvckVhY2gocz0+bi5wdXNoKHt0eXBlOlwiQUFBQVwiLGFkZHJlc3M6YWQocyl9KSl9KSx0aGlzLiNlKHIsXCJDQUFcIikudGhlbigoe3JldDppfSk9PntpLmZvckVhY2goKHtjcml0aWNhbDpzLHRhZzphLHZhbHVlOmN9KT0+bi5wdXNoKHt0eXBlOlwiQ0FBXCIsW2FdOmMsY3JpdGljYWw6K3MmJjEyOH0pKX0pLHRoaXMuI2UocixcIkNOQU1FXCIpLnRoZW4oKHtyZXQ6aX0pPT57aS5mb3JFYWNoKHM9Pm4ucHVzaCh7dHlwZTpcIkNOQU1FXCIsdmFsdWU6c30pKX0pLHRoaXMuI2UocixcIk1YXCIpLnRoZW4oKHtyZXQ6aX0pPT57aS5mb3JFYWNoKCh7cHJlZmVyZW5jZTpzLGV4Y2hhbmdlOmF9KT0+bi5wdXNoKHt0eXBlOlwiTVhcIixwcmlvcml0eTpzLGV4Y2hhbmdlOlB0KGEpfSkpfSksdGhpcy4jZShyLFwiTkFQVFJcIikudGhlbigoe3JldDppfSk9PntpLmZvckVhY2goKHtvcmRlcjpzLHByZWZlcmVuY2U6YSxmbGFnczpjLHNlcnZpY2VzOnUscmVnZXhwOlIscmVwbGFjZW1lbnQ6Zn0pPT5uLnB1c2goe3R5cGU6XCJOQVBUUlwiLG9yZGVyOnMscHJlZmVyZW5jZTphLGZsYWdzOmMsc2VydmljZTp1LHJlZ2V4cDpSLHJlcGxhY2VtZW50OmZ9KSl9KSx0aGlzLiNlKHIsXCJOU1wiKS50aGVuKCh7cmV0Oml9KT0+e2kuZm9yRWFjaChzPT5uLnB1c2goe3R5cGU6XCJOU1wiLHZhbHVlOlB0KHMpfSkpfSksdGhpcy4jZShyLFwiUFRSXCIpLnRoZW4oKHtyZXQ6aX0pPT57aS5mb3JFYWNoKHM9Pm4ucHVzaCh7dHlwZTpcIlBUUlwiLHZhbHVlOlB0KHMpfSkpfSksdGhpcy4jZShyLFwiU09BXCIpLnRoZW4oKHtyZXQ6aX0pPT57aS5mb3JFYWNoKCh7bW5hbWU6cyxybmFtZTphLHNlcmlhbDpjLHJlZnJlc2g6dSxyZXRyeTpSLGV4cGlyZTpmLG1pbmltdW06cH0pPT5uLnB1c2goe3R5cGU6XCJTT0FcIixuc25hbWU6UHQocyksaG9zdG1hc3RlcjpQdChhKSxzZXJpYWw6YyxyZWZyZXNoOnUscmV0cnk6UixleHBpcmU6ZixtaW50dGw6cH0pKX0pLHRoaXMuI2UocixcIlNSVlwiKS50aGVuKCh7cmV0Oml9KT0+e2kuZm9yRWFjaCgoe3ByaW9yaXR5OnMsd2VpZ2h0OmEscG9ydDpjLHRhcmdldDp1fSk9Pm4ucHVzaCh7dHlwZTpcIlNSVlwiLHByaW9yaXR5OnMsd2VpZ2h0OmEscG9ydDpjLG5hbWU6dX0pKX0pLHRoaXMuI2UocixcIlRYVFwiKS50aGVuKCh7cmV0Oml9KT0+e2kuZm9yRWFjaChzPT5uLnB1c2goe3R5cGU6XCJUWFRcIixlbnRyaWVzOnN9KSl9KV0pO2xldCBvPW4ubGVuZ3RoPzA6UC5nZXQoXCJFQUlfTk9EQVRBXCIpO3Qub25jb21wbGV0ZShvLG4pfSkoKSwwfXF1ZXJ5QSh0LHIpe3JldHVybiB0aGlzLiNlKHIsXCJBXCIpLnRoZW4oKHtjb2RlOm4scmV0Om99KT0+e3Qub25jb21wbGV0ZShuLG8pfSksMH1xdWVyeUFhYWEodCxyKXtyZXR1cm4gdGhpcy4jZShyLFwiQUFBQVwiKS50aGVuKCh7Y29kZTpuLHJldDpvfSk9PntsZXQgaT1vLm1hcChzPT5hZChzKSk7dC5vbmNvbXBsZXRlKG4saSl9KSwwfXF1ZXJ5Q2FhKHQscil7cmV0dXJuIHRoaXMuI2UocixcIkNBQVwiKS50aGVuKCh7Y29kZTpuLHJldDpvfSk9PntsZXQgaT1vLm1hcCgoe2NyaXRpY2FsOnMsdGFnOmEsdmFsdWU6Y30pPT4oe1thXTpjLGNyaXRpY2FsOitzJiYxMjh9KSk7dC5vbmNvbXBsZXRlKG4saSl9KSwwfXF1ZXJ5Q25hbWUodCxyKXtyZXR1cm4gdGhpcy4jZShyLFwiQ05BTUVcIikudGhlbigoe2NvZGU6bixyZXQ6b30pPT57dC5vbmNvbXBsZXRlKG4sbyl9KSwwfXF1ZXJ5TXgodCxyKXtyZXR1cm4gdGhpcy4jZShyLFwiTVhcIikudGhlbigoe2NvZGU6bixyZXQ6b30pPT57bGV0IGk9by5tYXAoKHtwcmVmZXJlbmNlOnMsZXhjaGFuZ2U6YX0pPT4oe3ByaW9yaXR5OnMsZXhjaGFuZ2U6UHQoYSl9KSk7dC5vbmNvbXBsZXRlKG4saSl9KSwwfXF1ZXJ5TmFwdHIodCxyKXtyZXR1cm4gdGhpcy4jZShyLFwiTkFQVFJcIikudGhlbigoe2NvZGU6bixyZXQ6b30pPT57bGV0IGk9by5tYXAoKHtvcmRlcjpzLHByZWZlcmVuY2U6YSxmbGFnczpjLHNlcnZpY2VzOnUscmVnZXhwOlIscmVwbGFjZW1lbnQ6Zn0pPT4oe2ZsYWdzOmMsc2VydmljZTp1LHJlZ2V4cDpSLHJlcGxhY2VtZW50OmYsb3JkZXI6cyxwcmVmZXJlbmNlOmF9KSk7dC5vbmNvbXBsZXRlKG4saSl9KSwwfXF1ZXJ5TnModCxyKXtyZXR1cm4gdGhpcy4jZShyLFwiTlNcIikudGhlbigoe2NvZGU6bixyZXQ6b30pPT57bGV0IGk9by5tYXAocz0+UHQocykpO3Qub25jb21wbGV0ZShuLGkpfSksMH1xdWVyeVB0cih0LHIpe3JldHVybiB0aGlzLiNlKHIsXCJQVFJcIikudGhlbigoe2NvZGU6bixyZXQ6b30pPT57bGV0IGk9by5tYXAocz0+UHQocykpO3Qub25jb21wbGV0ZShuLGkpfSksMH1xdWVyeVNvYSh0LHIpe3JldHVybiB0aGlzLiNlKHIsXCJTT0FcIikudGhlbigoe2NvZGU6bixyZXQ6b30pPT57bGV0IGk9e307aWYoby5sZW5ndGgpe2xldHttbmFtZTpzLHJuYW1lOmEsc2VyaWFsOmMscmVmcmVzaDp1LHJldHJ5OlIsZXhwaXJlOmYsbWluaW11bTpwfT1vWzBdO2k9e25zbmFtZTpQdChzKSxob3N0bWFzdGVyOlB0KGEpLHNlcmlhbDpjLHJlZnJlc2g6dSxyZXRyeTpSLGV4cGlyZTpmLG1pbnR0bDpwfX10Lm9uY29tcGxldGUobixpKX0pLDB9cXVlcnlTcnYodCxyKXtyZXR1cm4gdGhpcy4jZShyLFwiU1JWXCIpLnRoZW4oKHtjb2RlOm4scmV0Om99KT0+e2xldCBpPW8ubWFwKCh7cHJpb3JpdHk6cyx3ZWlnaHQ6YSxwb3J0OmMsdGFyZ2V0OnV9KT0+KHtwcmlvcml0eTpzLHdlaWdodDphLHBvcnQ6YyxuYW1lOnV9KSk7dC5vbmNvbXBsZXRlKG4saSl9KSwwfXF1ZXJ5VHh0KHQscil7cmV0dXJuIHRoaXMuI2UocixcIlRYVFwiKS50aGVuKCh7Y29kZTpuLHJldDpvfSk9Pnt0Lm9uY29tcGxldGUobixvKX0pLDB9Z2V0SG9zdEJ5QWRkcih0LHIpe1UoXCJjYXJlcy5DaGFubmVsV3JhcC5wcm90b3R5cGUuZ2V0SG9zdEJ5QWRkclwiKX1nZXRTZXJ2ZXJzKCl7cmV0dXJuIHRoaXMuI3R9c2V0U2VydmVycyh0KXtpZih0eXBlb2YgdD09XCJzdHJpbmdcIil7bGV0IHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKz0yKXIucHVzaChbdFtuXSxwYXJzZUludCh0W24rMV0pXSk7dGhpcy4jdD1yfWVsc2UgdGhpcy4jdD10Lm1hcCgoW3IsbixvXSk9PltuLG9dKTtyZXR1cm4gMH1zZXRMb2NhbEFkZHJlc3ModCxyKXtVKFwiY2FyZXMuQ2hhbm5lbFdyYXAucHJvdG90eXBlLnNldExvY2FsQWRkcmVzc1wiKX1jYW5jZWwoKXtVKFwiY2FyZXMuQ2hhbm5lbFdyYXAucHJvdG90eXBlLmNhbmNlbFwiKX19LEpOPS0xZTMsZUk9XCJUaGVyZSBhcmUgcGVuZGluZyBxdWVyaWVzLlwifSk7dmFyIGxkPXt9O3ZhciB1ZD1BKCgpPT57fSk7ZnVuY3Rpb24gZmQoZSx0KXtpZihlLmJ5dGVMZW5ndGghPT10LmJ5dGVMZW5ndGgpcmV0dXJuITE7ZSBpbnN0YW5jZW9mIERhdGFWaWV3fHwoZT1uZXcgRGF0YVZpZXcoQXJyYXlCdWZmZXIuaXNWaWV3KGUpP2UuYnVmZmVyOmUpKSx0IGluc3RhbmNlb2YgRGF0YVZpZXd8fCh0PW5ldyBEYXRhVmlldyhBcnJheUJ1ZmZlci5pc1ZpZXcodCk/dC5idWZmZXI6dCkpLHh0KGUgaW5zdGFuY2VvZiBEYXRhVmlldykseHQodCBpbnN0YW5jZW9mIERhdGFWaWV3KTtsZXQgcj1lLmJ5dGVMZW5ndGgsbj0wLG89LTE7Zm9yKDsrK288cjspbnw9ZS5nZXRVaW50OChvKV50LmdldFVpbnQ4KG8pO3JldHVybiBuPT09MH12YXIgcGQ9QSgoKT0+e0J0KCl9KTt2YXIgUmQsRWQ9QSgoKT0+e3VlKCk7cGQoKTtSZD0oZSx0KT0+KGUgaW5zdGFuY2VvZiB4JiYoZT1uZXcgRGF0YVZpZXcoZS5idWZmZXIpKSxlIGluc3RhbmNlb2YgeCYmKHQ9bmV3IERhdGFWaWV3KGUuYnVmZmVyKSksZmQoZSx0KSl9KTt2YXIgYmw9e307Y2UoYmwse2dldEZpcHNDcnlwdG86KCk9PnJJLHNldEZpcHNDcnlwdG86KCk9Pm5JLHRpbWluZ1NhZmVFcXVhbDooKT0+UmR9KTtmdW5jdGlvbiBySSgpe1UoXCJjcnlwdG8uZ2V0Rmlwc0NyeXB0b1wiKX1mdW5jdGlvbiBuSShlKXtVKFwiY3J5cHRvLnNldEZpcHNDcnlwdG9cIil9dmFyIF9kPUEoKCk9Pnt5ZSgpO0VkKCl9KTt2YXIgZGQ9e307dmFyIGhkPUEoKCk9Pnt9KTt2YXIgT2Q9e307dmFyIG1kPUEoKCk9Pnt9KTt2YXIgU2Q9e307dmFyIGdkPUEoKCk9Pnt9KTt2YXIgQWQ9e307dmFyIHhkPUEoKCk9Pnt9KTt2YXIgTmQ9e307dmFyIElkPUEoKCk9Pnt9KTt2YXIgeWQ9e307dmFyIFRkPUEoKCk9Pnt9KTt2YXIgRGQ9e307dmFyIGJkPUEoKCk9Pnt9KTt2YXIgQ2Q9e307dmFyIExkPUEoKCk9Pnt9KTt2YXIgd2Q9e307dmFyIFBkPUEoKCk9Pnt9KTt2YXIgVWQ9e307dmFyIE1kPUEoKCk9Pnt9KTt2YXIga2Q9e307dmFyIEJkPUEoKCk9Pnt9KTt2YXIgRmQ9e307dmFyIHZkPUEoKCk9Pnt9KTt2YXIgV2Q9e307dmFyIFZkPUEoKCk9Pnt9KTt2YXIgSGQ9e307dmFyICRkPUEoKCk9Pnt9KTt2YXIgR2Q9e307dmFyIFlkPUEoKCk9Pnt9KTt2YXIgamQ9e307dmFyIEtkPUEoKCk9Pnt9KTt2YXIgUm4sQ2w9QSgoKT0+e0J0KCk7Y3IoKTtSbj1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWNsb3NlKHQ9KCk9Pnt9KXt0aGlzLl9vbkNsb3NlKCksdCgpfXJlZigpe050KCl9dW5yZWYoKXtOdCgpfV9vbkNsb3NlKCl7fX19KTt2YXIgUGw9e307Y2UoUGwse0xpYnV2U3RyZWFtV3JhcDooKT0+cXQsU2h1dGRvd25XcmFwOigpPT53bCxXcml0ZVdyYXA6KCk9PkxsLGtBcnJheUJ1ZmZlck9mZnNldDooKT0+cWQsa0J5dGVzV3JpdHRlbjooKT0+UWQsa0xhc3RXcml0ZVdhc0FzeW5jOigpPT56ZCxrTnVtU3RyZWFtQmFzZVN0YXRlRmllbGRzOigpPT5vSSxrUmVhZEJ5dGVzT3JFcnJvcjooKT0+WGQsa1N0cmVhbUJhc2VGaWVsZDooKT0+VXQsc3RyZWFtQmFzZVN0YXRlOigpPT5Sb30pO3ZhciBYZCxxZCxRZCx6ZCxvSSxSbyxMbCx3bCxVdCxpSSxxdCx3cj1BKCgpPT57dWUoKTt5ZSgpO0NsKCk7Y3IoKTtWdCgpO0dvKCk7WGQ9MCxxZD0xLFFkPTIsemQ9MyxvST00LFJvPW5ldyBVaW50OEFycmF5KDUpO1JvW3pkXT0xO0xsPWNsYXNzIGV4dGVuZHMgTmV7Y29uc3RydWN0b3IoKXtzdXBlcig0MSl9fSx3bD1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKCl7c3VwZXIoMjgpfX0sVXQ9U3ltYm9sKFwia1N0cmVhbUJhc2VGaWVsZFwiKSxpST02NCoxMDI0LHF0PWNsYXNzIGV4dGVuZHMgUm57Y29uc3RydWN0b3IocixuKXtzdXBlcihyKTt0aGlzLiN0PSExO3RoaXMuZGVzdHJveWVkPSExO3RoaXMud3JpdGVRdWV1ZVNpemU9MDt0aGlzLmJ5dGVzUmVhZD0wO3RoaXMuYnl0ZXNXcml0dGVuPTA7dGhpcy4jcihuKX0jdDtyZWFkU3RhcnQoKXtyZXR1cm4gdGhpcy4jdHx8KHRoaXMuI3Q9ITAsdGhpcy4jbigpKSwwfXJlYWRTdG9wKCl7cmV0dXJuIHRoaXMuI3Q9ITEsMH1zaHV0ZG93bihyKXtsZXQgbj10aGlzLl9vbkNsb3NlKCk7dHJ5e3Iub25jb21wbGV0ZShuKX1jYXRjaHt9cmV0dXJuIDB9dXNlVXNlckJ1ZmZlcihyKXtVKFwiTGlidXZTdHJlYW1XcmFwLnByb3RvdHlwZS51c2VVc2VyQnVmZmVyXCIpfXdyaXRlQnVmZmVyKHIsbil7cmV0dXJuIHRoaXMuI2UocixuKSwwfXdyaXRldihyLG4sbyl7bGV0IGk9bz9uLmxlbmd0aDpuLmxlbmd0aD4+MSxzPW5ldyBBcnJheShpKTtpZihvKWZvcihsZXQgYT0wO2E8aTthKyspc1thXT1uW2FdO2Vsc2UgZm9yKGxldCBhPTA7YTxpO2ErKyl7bGV0IGM9blthKjJdO3guaXNCdWZmZXIoYykmJihzW2FdPWMpO2xldCB1PW5bYSoyKzFdO3NbYV09eC5mcm9tKGMsdSl9cmV0dXJuIHRoaXMud3JpdGVCdWZmZXIocix4LmNvbmNhdChzKSl9d3JpdGVBc2NpaVN0cmluZyhyLG4pe2xldCBvPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShuKTtyZXR1cm4gdGhpcy53cml0ZUJ1ZmZlcihyLG8pfXdyaXRlVXRmOFN0cmluZyhyLG4pe2xldCBvPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShuKTtyZXR1cm4gdGhpcy53cml0ZUJ1ZmZlcihyLG8pfXdyaXRlVWNzMlN0cmluZyhyLG4pe1UoXCJMaWJ1dlN0cmVhbVdyYXAucHJvdG90eXBlLndyaXRlVWNzMlN0cmluZ1wiKX13cml0ZUxhdGluMVN0cmluZyhyLG4pe2xldCBvPXguZnJvbShuLFwibGF0aW4xXCIpO3JldHVybiB0aGlzLndyaXRlQnVmZmVyKHIsbyl9X29uQ2xvc2UoKXtsZXQgcj0wO3RoaXMuI3Q9ITE7dHJ5e3RoaXNbVXRdPy5jbG9zZSgpfWNhdGNoe3I9UC5nZXQoXCJFTk9UQ09OTlwiKX1yZXR1cm4gcn0jcihyKXt0aGlzW1V0XT1yfWFzeW5jI24oKXtsZXQgcj1uZXcgVWludDhBcnJheShpSSksbjt0cnl7bj1hd2FpdCB0aGlzW1V0XS5yZWFkKHIpfWNhdGNoKG8pe28gaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5JbnRlcnJ1cHRlZHx8byBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlP249UC5nZXQoXCJFT0ZcIik6byBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkNvbm5lY3Rpb25SZXNldHx8byBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkNvbm5lY3Rpb25BYm9ydGVkP249UC5nZXQoXCJFQ09OTlJFU0VUXCIpOm49UC5nZXQoXCJVTktOT1dOXCIpLHI9bmV3IFVpbnQ4QXJyYXkoMCl9bj8/PVAuZ2V0KFwiRU9GXCIpLFJvW1hkXT1uLG4+MCYmKHRoaXMuYnl0ZXNSZWFkKz1uKSxyPXIuc2xpY2UoMCxuKSxSb1txZF09MDt0cnl7dGhpcy5vbnJlYWQocixuKX1jYXRjaHt9bj49MCYmdGhpcy4jdCYmdGhpcy4jbigpfWFzeW5jI2UocixuKXtsZXR7Ynl0ZUxlbmd0aDpvfT1uO3RyeXthd2FpdCBucCh0aGlzW1V0XSxuKX1jYXRjaChpKXtsZXQgcztpIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQmFkUmVzb3VyY2V8fGkgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ccm9rZW5QaXBlP3M9UC5nZXQoXCJFQkFERlwiKTpzPVAuZ2V0KFwiVU5LTk9XTlwiKTt0cnl7ci5vbmNvbXBsZXRlKHMpfWNhdGNoe31yZXR1cm59Um9bUWRdPW8sdGhpcy5ieXRlc1dyaXR0ZW4rPW87dHJ5e3Iub25jb21wbGV0ZSgwKX1jYXRjaHt9fX07VXR9KTt2YXIgRW4sVWw9QSgoKT0+e3dyKCk7RW49Y2xhc3MgZXh0ZW5kcyBxdHtjb25zdHJ1Y3RvcihyLG4pe3N1cGVyKHIsbik7dGhpcy5vbmNvbm5lY3Rpb249bnVsbH1hZnRlckNvbm5lY3QocixuKXtsZXQgbz0hbixpPW8scz1vO3RyeXtyLm9uY29tcGxldGUobix0aGlzLHIsaSxzKX1jYXRjaHt9fX19KTtmdW5jdGlvbiBScyhlKXtsZXQgdD0xPDwzMS1NYXRoLmNsejMyKGUpO3JldHVybiB0PGU/dCoyOnR9dmFyIEVzLF9uLE1sPUEoKCk9PntFcz01LF9uPTFlM30pO3ZhciBCbD17fTtjZShCbCx7UGlwZTooKT0+RW8sUGlwZUNvbm5lY3RXcmFwOigpPT5rbCxjb25zdGFudHM6KCk9PnVyLHNvY2tldFR5cGU6KCk9PlpkfSk7dmFyIFpkLEVvLGtsLHVyLEpkPUEoKCk9Pnt5ZSgpO0J0KCk7VWwoKTtjcigpO3dyKCk7VnQoKTtIbygpO3dyKCk7TWwoKTtQZSgpO0Z0KCk7Z3QoKTtaZD0obj0+KG5bbi5TT0NLRVQ9MF09XCJTT0NLRVRcIixuW24uU0VSVkVSPTFdPVwiU0VSVkVSXCIsbltuLklQQz0yXT1cIklQQ1wiLG4pKShaZHx8e30pLEVvPWNsYXNzIGV4dGVuZHMgRW57Y29uc3RydWN0b3IocixuKXtsZXQgbyxpO3N3aXRjaChyKXtjYXNlIDA6e289MjQsaT0hMTticmVha31jYXNlIDE6e289MjMsaT0hMTticmVha31jYXNlIDI6e289MjQsaT0hMDticmVha31kZWZhdWx0Ok50KCl9c3VwZXIobyxuKTt0aGlzLnJlYWRpbmc9ITE7dGhpcy4jdD00O3RoaXMuI2k9MDt0aGlzLiNzPSExO2lmKHRoaXMuaXBjPWksbiYmbz09PTI0KXtsZXQgcz1uLmxvY2FsQWRkcjt0aGlzLiNyPXMucGF0aH19I3Q7I3I7I247I2U7I2k7I3M7I287b3BlbihyKXtVKFwiUGlwZS5wcm90b3R5cGUub3BlblwiKX1iaW5kKHIpe3JldHVybiB0aGlzLiNyPXIsMH1jb25uZWN0KHIsbil7cmV0dXJuIHEmJlUoXCJQaXBlLnByb3RvdHlwZS5jb25uZWN0IC0gV2luZG93c1wiKSxzZih7cGF0aDpuLHRyYW5zcG9ydDpcInVuaXhcIn0pLnRoZW4oaT0+e2xldCBzPWkubG9jYWxBZGRyO3RoaXMuI3I9ci5hZGRyZXNzPXMucGF0aCx0aGlzW1V0XT1pO3RyeXt0aGlzLmFmdGVyQ29ubmVjdChyLDApfWNhdGNoe319LGk9PntsZXQgcztpIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQ/cz1QLmdldChcIkVOT0VOVFwiKTppIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuUGVybWlzc2lvbkRlbmllZD9zPVAuZ2V0KFwiRUFDQ0VTXCIpOnM9UC5nZXQoXCJFQ09OTlJFRlVTRURcIik7dHJ5e3RoaXMuYWZ0ZXJDb25uZWN0KHIscyl9Y2F0Y2h7fX0pLDB9bGlzdGVuKHIpe3EmJlUoXCJQaXBlLnByb3RvdHlwZS5saXN0ZW4gLSBXaW5kb3dzXCIpLHRoaXMuI249cT90aGlzLiN0OlJzKHIrMSk7bGV0IG49e3BhdGg6dGhpcy4jcix0cmFuc3BvcnQ6XCJ1bml4XCJ9LG87dHJ5e289YWYobil9Y2F0Y2gocyl7cmV0dXJuIHMgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRySW5Vc2U/UC5nZXQoXCJFQUREUklOVVNFXCIpOnMgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRyTm90QXZhaWxhYmxlP1AuZ2V0KFwiRUFERFJOT1RBVkFJTFwiKTpQLmdldChcIlVOS05PV05cIil9bGV0IGk9by5hZGRyO3JldHVybiB0aGlzLiNyPWkucGF0aCx0aGlzLiNlPW8sdGhpcy4jYygpLDB9cmVmKCl7dGhpcy4jZSYmQ28odGhpcy4jZSl9dW5yZWYoKXt0aGlzLiNlJiZMbyh0aGlzLiNlKX1zZXRQZW5kaW5nSW5zdGFuY2VzKHIpe3RoaXMuI3Q9cn1mY2htb2Qocil7aWYociE9dXIuVVZfUkVBREFCTEUmJnIhPXVyLlVWX1dSSVRBQkxFJiZyIT0odXIuVVZfV1JJVEFCTEV8dXIuVVZfUkVBREFCTEUpKXJldHVybiBQLmdldChcIkVJTlZBTFwiKTtsZXQgbj0wO3ImdXIuVVZfUkVBREFCTEUmJihufD1BZS5TX0lSVVNSfEFlLlNfSVJHUlB8QWUuU19JUk9USCksciZ1ci5VVl9XUklUQUJMRSYmKG58PUFlLlNfSVdVU1J8QWUuU19JV0dSUHxBZS5TX0lXT1RIKTt0cnl7RGVuby5jaG1vZFN5bmModGhpcy4jcixuKX1jYXRjaHtyZXR1cm4gUC5nZXQoXCJVTktOT1dOXCIpfXJldHVybiAwfWFzeW5jI2EoKXt0aGlzLiNvP3RoaXMuI28qPTI6dGhpcy4jbz1Fcyx0aGlzLiNvPj1fbiYmKHRoaXMuI289X24pLGF3YWl0IE1yKHRoaXMuI28pLHRoaXMuI2MoKX1hc3luYyNjKCl7aWYodGhpcy4jcylyZXR1cm47aWYodGhpcy4jaT50aGlzLiNuKXt0aGlzLiNhKCk7cmV0dXJufWxldCByO3RyeXtyPWF3YWl0IHRoaXMuI2UuYWNjZXB0KCl9Y2F0Y2gobyl7aWYobyBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlJiZ0aGlzLiNzKXJldHVybjt0cnl7dGhpcy5vbmNvbm5lY3Rpb24oUC5nZXQoXCJVTktOT1dOXCIpLHZvaWQgMCl9Y2F0Y2h7fXRoaXMuI2EoKTtyZXR1cm59dGhpcy4jbz12b2lkIDA7bGV0IG49bmV3IEVvKDAscik7dGhpcy4jaSsrO3RyeXt0aGlzLm9uY29ubmVjdGlvbigwLG4pfWNhdGNoe31yZXR1cm4gdGhpcy4jYygpfV9vbkNsb3NlKCl7aWYodGhpcy4jcz0hMCx0aGlzLnJlYWRpbmc9ITEsdGhpcy4jcj12b2lkIDAsdGhpcy4jbj12b2lkIDAsdGhpcy4jaT0wLHRoaXMuI289dm9pZCAwLHRoaXMucHJvdmlkZXI9PT0yMyl0cnl7dGhpcy4jZS5jbG9zZSgpfWNhdGNoe31yZXR1cm4gcXQucHJvdG90eXBlLl9vbkNsb3NlLmNhbGwodGhpcyl9fSxrbD1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKCl7c3VwZXIoMjIpfX0sdXI9KGk9PihpW2kuU09DS0VUPTBdPVwiU09DS0VUXCIsaVtpLlNFUlZFUj0xXT1cIlNFUlZFUlwiLGlbaS5JUEM9Ml09XCJJUENcIixpW2kuVVZfUkVBREFCTEU9MV09XCJVVl9SRUFEQUJMRVwiLGlbaS5VVl9XUklUQUJMRT0yXT1cIlVWX1dSSVRBQkxFXCIsaSkpKHVyfHx7fSl9KTt2YXIgZWg9e307dmFyIHRoPUEoKCk9Pnt9KTt2YXIgcmg9e307dmFyIG5oPUEoKCk9Pnt9KTt2YXIgb2g9e307dmFyIGloPUEoKCk9Pnt9KTt2YXIgc2g9e307dmFyIGFoPUEoKCk9Pnt9KTt2YXIgY2g9e307dmFyIGxoPUEoKCk9Pnt9KTt2YXIgdWg9e307dmFyIGZoPUEoKCk9Pnt9KTt2YXIgRmw9e307Y2UoRmwse2FzeW5jSWRTeW1ib2w6KCk9PnNJLG93bmVyU3ltYm9sOigpPT5fb30pO3ZhciBzSSxfbyxfcz1BKCgpPT57c0k9U3ltYm9sKFwiYXN5bmNJZFN5bWJvbFwiKSxfbz1TeW1ib2woXCJvd25lclN5bWJvbFwiKX0pO3ZhciBwaD17fTt2YXIgUmg9QSgoKT0+e30pO3ZhciBWbD17fTtjZShWbCx7VENQOigpPT5XbCxUQ1BDb25uZWN0V3JhcDooKT0+dmwsY29uc3RhbnRzOigpPT5FaH0pO3ZhciB2bCxFaCxhSSxIbCxXbCxfaD1BKCgpPT57eWUoKTtCdCgpO1VsKCk7Y3IoKTt3cigpO19zKCk7VnQoKTtIbygpO3dyKCk7cHMoKTtNbCgpO2d0KCk7dmw9Y2xhc3MgZXh0ZW5kcyBOZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKDMyKX19LEVoPShuPT4obltuLlNPQ0tFVD0wXT1cIlNPQ0tFVFwiLG5bbi5TRVJWRVI9MV09XCJTRVJWRVJcIixuW24uVVZfVENQX0lQVjZPTkxZPTJdPVwiVVZfVENQX0lQVjZPTkxZXCIsbikpKEVofHx7fSksSGw9Y2xhc3MgZXh0ZW5kcyBFbntjb25zdHJ1Y3RvcihyLG4pe2xldCBvO3N3aXRjaChyKXtjYXNlIDA6e289MzQ7YnJlYWt9Y2FzZSAxOntvPTMzO2JyZWFrfWRlZmF1bHQ6TnQoKX1zdXBlcihvLG4pO3RoaXNbYUldPW51bGw7dGhpcy5yZWFkaW5nPSExO3RoaXMuI2E9MDt0aGlzLiNjPSExO2lmKG4mJm89PT0zNCl7bGV0IGk9bi5sb2NhbEFkZHI7dGhpcy4jdD1pLmhvc3RuYW1lLHRoaXMuI3I9aS5wb3J0O2xldCBzPW4ucmVtb3RlQWRkcjt0aGlzLiNuPXMuaG9zdG5hbWUsdGhpcy4jaT1zLnBvcnQsdGhpcy4jZT1wbihzLmhvc3RuYW1lKX19I3Q7I3I7I247I2U7I2k7I3M7I287I2E7I2M7I2w7b3BlbihyKXtVKFwiVENQLnByb3RvdHlwZS5vcGVuXCIpfWJpbmQocixuKXtyZXR1cm4gdGhpcy4jZihyLG4sMCl9YmluZDYocixuLG8pe3JldHVybiB0aGlzLiNmKHIsbixvKX1jb25uZWN0KHIsbixvKXtyZXR1cm4gdGhpcy4jcChyLG4sbyl9Y29ubmVjdDYocixuLG8pe3JldHVybiB0aGlzLiNwKHIsbixvKX1saXN0ZW4ocil7dGhpcy4jcz1ScyhyKzEpO2xldCBuPXtob3N0bmFtZTp0aGlzLiN0LHBvcnQ6dGhpcy4jcix0cmFuc3BvcnQ6XCJ0Y3BcIn0sbzt0cnl7bz1EZW5vLmxpc3RlbihuKX1jYXRjaChzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkFkZHJJblVzZT9QLmdldChcIkVBRERSSU5VU0VcIik6cyBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkFkZHJOb3RBdmFpbGFibGU/UC5nZXQoXCJFQUREUk5PVEFWQUlMXCIpOlAuZ2V0KFwiVU5LTk9XTlwiKX1sZXQgaT1vLmFkZHI7cmV0dXJuIHRoaXMuI3Q9aS5ob3N0bmFtZSx0aGlzLiNyPWkucG9ydCx0aGlzLiNvPW8sdGhpcy4jdSgpLDB9cmVmKCl7dGhpcy4jbyYmQ28odGhpcy4jbyl9dW5yZWYoKXt0aGlzLiNvJiZMbyh0aGlzLiNvKX1nZXRzb2NrbmFtZShyKXtyZXR1cm4gdHlwZW9mIHRoaXMuI3Q+XCJ1XCJ8fHR5cGVvZiB0aGlzLiNyPlwidVwiP1AuZ2V0KFwiRUFERFJOT1RBVkFJTFwiKTooci5hZGRyZXNzPXRoaXMuI3Qsci5wb3J0PXRoaXMuI3Isci5mYW1pbHk9cG4odGhpcy4jdCksMCl9Z2V0cGVlcm5hbWUocil7cmV0dXJuIHR5cGVvZiB0aGlzLiNuPlwidVwifHx0eXBlb2YgdGhpcy4jaT5cInVcIj9QLmdldChcIkVBRERSTk9UQVZBSUxcIik6KHIuYWRkcmVzcz10aGlzLiNuLHIucG9ydD10aGlzLiNpLHIuZmFtaWx5PXRoaXMuI2UsMCl9c2V0Tm9EZWxheShyKXtyZXR1cm4gMH1zZXRLZWVwQWxpdmUocixuKXtyZXR1cm4gMH1zZXRTaW11bHRhbmVvdXNBY2NlcHRzKHIpe1UoXCJUQ1AucHJvdG90eXBlLnNldFNpbXVsdGFuZW91c0FjY2VwdHNcIil9I2YocixuLG8pe3JldHVybiB0aGlzLiN0PXIsdGhpcy4jcj1uLDB9I3AocixuLG8pe3RoaXMuI249bix0aGlzLiNpPW8sdGhpcy4jZT1wbihuKTtsZXQgaT17aG9zdG5hbWU6bixwb3J0Om8sdHJhbnNwb3J0OlwidGNwXCJ9O3JldHVybiBEZW5vLmNvbm5lY3QoaSkudGhlbihzPT57bGV0IGE9cy5sb2NhbEFkZHI7dGhpcy4jdD1yLmxvY2FsQWRkcmVzcz1hLmhvc3RuYW1lLHRoaXMuI3I9ci5sb2NhbFBvcnQ9YS5wb3J0LHRoaXNbVXRdPXM7dHJ5e3RoaXMuYWZ0ZXJDb25uZWN0KHIsMCl9Y2F0Y2h7fX0sKCk9Pnt0cnl7dGhpcy5hZnRlckNvbm5lY3QocixQLmdldChcIkVDT05OUkVGVVNFRFwiKSl9Y2F0Y2h7fX0pLDB9YXN5bmMjUigpe3RoaXMuI2w/dGhpcy4jbCo9Mjp0aGlzLiNsPUVzLHRoaXMuI2w+PV9uJiYodGhpcy4jbD1fbiksYXdhaXQgTXIodGhpcy4jbCksdGhpcy4jdSgpfWFzeW5jI3UoKXtpZih0aGlzLiNjKXJldHVybjtpZih0aGlzLiNhPnRoaXMuI3Mpe3RoaXMuI1IoKTtyZXR1cm59bGV0IHI7dHJ5e3I9YXdhaXQgdGhpcy4jby5hY2NlcHQoKX1jYXRjaChvKXtpZihvIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQmFkUmVzb3VyY2UmJnRoaXMuI2MpcmV0dXJuO3RyeXt0aGlzLm9uY29ubmVjdGlvbihQLmdldChcIlVOS05PV05cIiksdm9pZCAwKX1jYXRjaHt9dGhpcy4jUigpO3JldHVybn10aGlzLiNsPXZvaWQgMDtsZXQgbj1uZXcgSGwoMCxyKTt0aGlzLiNhKys7dHJ5e3RoaXMub25jb25uZWN0aW9uKDAsbil9Y2F0Y2h7fXJldHVybiB0aGlzLiN1KCl9X29uQ2xvc2UoKXtpZih0aGlzLiNjPSEwLHRoaXMucmVhZGluZz0hMSx0aGlzLiN0PXZvaWQgMCx0aGlzLiNyPXZvaWQgMCx0aGlzLiNuPXZvaWQgMCx0aGlzLiNlPXZvaWQgMCx0aGlzLiNpPXZvaWQgMCx0aGlzLiNzPXZvaWQgMCx0aGlzLiNhPTAsdGhpcy4jbD12b2lkIDAsdGhpcy5wcm92aWRlcj09PTMzKXRyeXt0aGlzLiNvLmNsb3NlKCl9Y2F0Y2h7fXJldHVybiBxdC5wcm90b3R5cGUuX29uQ2xvc2UuY2FsbCh0aGlzKX19LFdsPUhsO2FJPV9vfSk7dmFyIGRoPXt9O3ZhciBoaD1BKCgpPT57fSk7dmFyIE9oPXt9O3ZhciBtaD1BKCgpPT57fSk7dmFyIFNoPXt9O3ZhciBnaD1BKCgpPT57fSk7dmFyIEFoPXt9O3ZhciB4aD1BKCgpPT57fSk7dmFyIEtsPXt9O2NlKEtsLHtTZW5kV3JhcDooKT0+WWwsVURQOigpPT5qbH0pO3ZhciAkbCxobyxHbCxZbCxjSSxqbCxOaD1BKCgpPT57Y3IoKTtDbCgpO19zKCk7VnQoKTt5ZSgpO3VlKCk7cHMoKTtndCgpO1BlKCk7JGw9Mixobz0xMCxHbD02NCoxMDI0LFlsPWNsYXNzIGV4dGVuZHMgTmV7Y29uc3RydWN0b3IoKXtzdXBlcigzNil9fSxqbD1jbGFzcyBleHRlbmRzIFJue2NvbnN0cnVjdG9yKCl7c3VwZXIoMzcpO3RoaXNbY0ldPW51bGw7dGhpcy4jYT0hMTt0aGlzLiNjPUdsO3RoaXMuI2w9R2x9I3Q7I3I7I247I2U7I2k7I3M7I287I2E7I2M7I2w7YWRkTWVtYmVyc2hpcChyLG4pe1UoXCJ1ZHAuVURQLnByb3RvdHlwZS5hZGRNZW1iZXJzaGlwXCIpfWFkZFNvdXJjZVNwZWNpZmljTWVtYmVyc2hpcChyLG4sbyl7VShcInVkcC5VRFAucHJvdG90eXBlLmFkZFNvdXJjZVNwZWNpZmljTWVtYmVyc2hpcFwiKX1iaW5kKHIsbixvKXtyZXR1cm4gdGhpcy4jZihyLG4sbywkbCl9YmluZDYocixuLG8pe3JldHVybiB0aGlzLiNmKHIsbixvLGhvKX1idWZmZXJTaXplKHIsbixvKXtsZXQgaTtpZihyPkdsP2k9XCJFSU5WQUxcIjp0aGlzLiN0fHwoaT1xP1wiRU5PVFNPQ0tcIjpcIkVCQURGXCIpLGkpe28uZXJybm89UC5nZXQoaSksby5jb2RlPWksby5tZXNzYWdlPUFyLmdldChvLmVycm5vKVsxXSxvLnN5c2NhbGw9bj9cInV2X3JlY3ZfYnVmZmVyX3NpemVcIjpcInV2X3NlbmRfYnVmZmVyX3NpemVcIjtyZXR1cm59cmV0dXJuIHIhPT0wPyhyPXBSP3IqMjpyLG4/dGhpcy4jYz1yOnRoaXMuI2w9cik6bj90aGlzLiNjOnRoaXMuI2x9Y29ubmVjdChyLG4pe3JldHVybiB0aGlzLiNwKHIsbiwkbCl9Y29ubmVjdDYocixuKXtyZXR1cm4gdGhpcy4jcChyLG4saG8pfWRpc2Nvbm5lY3QoKXtyZXR1cm4gdGhpcy4jZT12b2lkIDAsdGhpcy4jcz12b2lkIDAsdGhpcy4jaT12b2lkIDAsMH1kcm9wTWVtYmVyc2hpcChyLG4pe1UoXCJ1ZHAuVURQLnByb3RvdHlwZS5kcm9wTWVtYmVyc2hpcFwiKX1kcm9wU291cmNlU3BlY2lmaWNNZW1iZXJzaGlwKHIsbixvKXtVKFwidWRwLlVEUC5wcm90b3R5cGUuZHJvcFNvdXJjZVNwZWNpZmljTWVtYmVyc2hpcFwiKX1nZXRwZWVybmFtZShyKXtyZXR1cm4gdGhpcy4jZT09PXZvaWQgMD9QLmdldChcIkVCQURGXCIpOihyLmFkZHJlc3M9dGhpcy4jZSxyLnBvcnQ9dGhpcy4jcyxyLmZhbWlseT10aGlzLiNpLDApfWdldHNvY2tuYW1lKHIpe3JldHVybiB0aGlzLiN0PT09dm9pZCAwP1AuZ2V0KFwiRUJBREZcIik6KHIuYWRkcmVzcz10aGlzLiN0LHIucG9ydD10aGlzLiNuLHIuZmFtaWx5PXRoaXMuI3IsMCl9b3BlbihyKXtVKFwidWRwLlVEUC5wcm90b3R5cGUub3BlblwiKX1yZWN2U3RhcnQoKXtyZXR1cm4gdGhpcy4jYXx8KHRoaXMuI2E9ITAsdGhpcy4jdSgpKSwwfXJlY3ZTdG9wKCl7cmV0dXJuIHRoaXMuI2E9ITEsMH1yZWYoKXtVKFwidWRwLlVEUC5wcm90b3R5cGUucmVmXCIpfXNlbmQocixuLG8sLi4uaSl7cmV0dXJuIHRoaXMuI1IocixuLG8saSwkbCl9c2VuZDYocixuLG8sLi4uaSl7cmV0dXJuIHRoaXMuI1IocixuLG8saSxobyl9c2V0QnJvYWRjYXN0KHIpe1UoXCJ1ZHAuVURQLnByb3RvdHlwZS5zZXRCcm9hZGNhc3RcIil9c2V0TXVsdGljYXN0SW50ZXJmYWNlKHIpe1UoXCJ1ZHAuVURQLnByb3RvdHlwZS5zZXRNdWx0aWNhc3RJbnRlcmZhY2VcIil9c2V0TXVsdGljYXN0TG9vcGJhY2socil7VShcInVkcC5VRFAucHJvdG90eXBlLnNldE11bHRpY2FzdExvb3BiYWNrXCIpfXNldE11bHRpY2FzdFRUTChyKXtVKFwidWRwLlVEUC5wcm90b3R5cGUuc2V0TXVsdGljYXN0VFRMXCIpfXNldFRUTChyKXtVKFwidWRwLlVEUC5wcm90b3R5cGUuc2V0VFRMXCIpfXVucmVmKCl7VShcInVkcC5VRFAucHJvdG90eXBlLnVucmVmXCIpfSNmKHIsbixvLGkpe2xldCBzPXtwb3J0Om4saG9zdG5hbWU6cix0cmFuc3BvcnQ6XCJ1ZHBcIn0sYTt0cnl7YT1jZihzKX1jYXRjaCh1KXtyZXR1cm4gdSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkFkZHJJblVzZT9QLmdldChcIkVBRERSSU5VU0VcIik6dSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkFkZHJOb3RBdmFpbGFibGU/UC5nZXQoXCJFQUREUk5PVEFWQUlMXCIpOlAuZ2V0KFwiVU5LTk9XTlwiKX1sZXQgYz1hLmFkZHI7cmV0dXJuIHRoaXMuI3Q9Yy5ob3N0bmFtZSx0aGlzLiNuPWMucG9ydCx0aGlzLiNyPWk9PT1obz9cIklQdjZcIjpcIklQdjRcIix0aGlzLiNvPWEsMH0jcChyLG4sbyl7cmV0dXJuIHRoaXMuI2U9cix0aGlzLiNzPW4sdGhpcy4jaT1vPT09aG8/XCJJUHY2XCI6XCJJUHY0XCIsMH0jUihyLG4sbyxpLHMpe2xldCBhO2kubGVuZ3RoPT09Mz8odGhpcy4jcz1pWzBdLHRoaXMuI2U9aVsxXSxhPWlbMl0pOmE9aVswXTtsZXQgYz17aG9zdG5hbWU6dGhpcy4jZSxwb3J0OnRoaXMuI3MsdHJhbnNwb3J0OlwidWRwXCJ9LHU9bmV3IFVpbnQ4QXJyYXkoeC5jb25jYXQobi5tYXAoUj0+dHlwZW9mIFI9PVwic3RyaW5nXCI/eC5mcm9tKFIpOnguZnJvbShSLmJ1ZmZlcixSLmJ5dGVPZmZzZXQsUi5ieXRlTGVuZ3RoKSkpKTtyZXR1cm4oYXN5bmMoKT0+e2xldCBSLGY9bnVsbDt0cnl7Uj1hd2FpdCB0aGlzLiNvLnNlbmQodSxjKX1jYXRjaChwKXtwIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQmFkUmVzb3VyY2U/Zj1QLmdldChcIkVCQURGXCIpOnAgaW5zdGFuY2VvZiBFcnJvciYmcC5tZXNzYWdlLm1hdGNoKC9vcyBlcnJvciAoNDB8OTB8MTAwNDApLyk/Zj1QLmdldChcIkVNU0dTSVpFXCIpOmY9UC5nZXQoXCJVTktOT1dOXCIpLFI9MH1pZihhKXRyeXtyLm9uY29tcGxldGUoZixSKX1jYXRjaHt9fSkoKSwwfWFzeW5jI3UoKXtpZighdGhpcy4jYSlyZXR1cm47bGV0IHI9bmV3IFVpbnQ4QXJyYXkodGhpcy4jYyksbixvLGk7dHJ5e1tuLG9dPWF3YWl0IHRoaXMuI28ucmVjZWl2ZShyKSxpPW4ubGVuZ3RofWNhdGNoKGEpe2EgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5JbnRlcnJ1cHRlZHx8YSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlP2k9MDppPVAuZ2V0KFwiVU5LTk9XTlwiKSxuPW5ldyBVaW50OEFycmF5KDApLG89bnVsbH1pPz89MDtsZXQgcz1vP3thZGRyZXNzOm8uaG9zdG5hbWUscG9ydDpvLnBvcnQsZmFtaWx5OnBuKG8uaG9zdG5hbWUpPT09Nj9cIklQdjZcIjpcIklQdjRcIn06dm9pZCAwO3RyeXt0aGlzLm9ubWVzc2FnZShpLHRoaXMseC5mcm9tKG4pLHMpfWNhdGNoe310aGlzLiN1KCl9X29uQ2xvc2UoKXt0aGlzLiNhPSExLHRoaXMuI3Q9dm9pZCAwLHRoaXMuI249dm9pZCAwLHRoaXMuI3I9dm9pZCAwO3RyeXt0aGlzLiNvLmNsb3NlKCl9Y2F0Y2h7fXJldHVybiB0aGlzLiNvPXZvaWQgMCwwfX07Y0k9X299KTt2YXIgSWg9e307dmFyIHloPUEoKCk9Pnt9KTt2YXIgVGg9e307dmFyIERoPUEoKCk9Pnt9KTt2YXIgYmg9e307dmFyIENoPUEoKCk9Pnt9KTt2YXIgTGg9e307dmFyIHdoPUEoKCk9Pnt9KTtmdW5jdGlvbiBQaChlKXtsZXQgdD1sSVtlXTtpZighdCl0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggbW9kdWxlOiAke2V9YCk7cmV0dXJuIHR9dmFyIGxJLFVoPUEoKCk9PntjcigpO0tvKCk7cmQoKTtjZCgpO0Z0KCk7dWQoKTtfZCgpO2hkKCk7bWQoKTtnZCgpO3hkKCk7SWQoKTtUZCgpO2JkKCk7TGQoKTtQZCgpO01kKCk7QmQoKTt2ZCgpO1ZkKCk7JGQoKTtZZCgpO0tkKCk7SmQoKTt0aCgpO25oKCk7aWgoKTthaCgpO2xoKCk7ZmgoKTt3cigpO3BhKCk7X3MoKTtSaCgpO19oKCk7aGgoKTttaCgpO2doKCk7eGgoKTtIcygpO05oKCk7eWgoKTtwaSgpO1Z0KCk7RGgoKTtDaCgpO3doKCk7bEk9e2FzeW5jX3dyYXA6TmwsYnVmZmVyOkVhLGNhcmVzX3dyYXA6RGwsY29uZmlnOnRkLGNvbnN0YW50czpjYSxjb250ZXh0aWZ5OmxkLGNyZWRlbnRpYWxzOmRkLGNyeXB0bzpibCxlcnJvcnM6T2QsZnM6U2QsZnNfZGlyOkFkLGZzX2V2ZW50X3dyYXA6TmQsaGVhcF91dGlsczp5ZCxodHRwX3BhcnNlcjpEZCxpY3U6Q2QsaW5zcGVjdG9yOndkLGpzX3N0cmVhbTpVZCxtZXNzYWdpbmc6a2QsbW9kdWxlX3dyYXA6RmQsbmF0aXZlX21vZHVsZTpXZCxuYXRpdmVzOkhkLG9wdGlvbnM6R2Qsb3M6amQscGVyZm9ybWFuY2U6ZWgscGlwZV93cmFwOkJsLHByb2Nlc3NfbWV0aG9kczpyaCxyZXBvcnQ6b2gsc2VyZGVzOnNoLHNpZ25hbF93cmFwOmNoLHNwYXduX3N5bmM6dWgsc3RyZWFtX3dyYXA6UGwsc3RyaW5nX2RlY29kZXI6ZmEsc3ltYm9sczpGbCx0YXNrX3F1ZXVlOnBoLHRjcF93cmFwOlZsLHRpbWVyczpkaCx0bHNfd3JhcDpPaCx0cmFjZV9ldmVudHM6U2gsdHR5X3dyYXA6QWgsdHlwZXM6U24sdWRwX3dyYXA6S2wsdXJsOkloLHV0aWw6S2EsdXY6Y2Msdjg6VGgsd29ya2VyOmJoLHpsaWI6TGh9fSk7ZnVuY3Rpb24ga2goKXtsZXQgZT1bXCItLXRyYWNrLWhlYXAtb2JqZWN0c1wiLFwiLS1uby10cmFjay1oZWFwLW9iamVjdHNcIixcIi0tbm9kZS1zbmFwc2hvdFwiLFwiLS1uby1ub2RlLXNuYXBzaG90XCIsXCItLXJlcXVpcmVcIixcIi0tbWF4LW9sZC1zcGFjZS1zaXplXCIsXCItLXRyYWNlLWV4aXRcIixcIi0tbm8tdHJhY2UtZXhpdFwiLFwiLS1kaXNhbGxvdy1jb2RlLWdlbmVyYXRpb24tZnJvbS1zdHJpbmdzXCIsXCItLWV4cGVyaW1lbnRhbC1qc29uLW1vZHVsZXNcIixcIi0tbm8tZXhwZXJpbWVudGFsLWpzb24tbW9kdWxlc1wiLFwiLS1pbnRlcnByZXRlZC1mcmFtZXMtbmF0aXZlLXN0YWNrXCIsXCItLWluc3BlY3QtYnJrXCIsXCItLW5vLWluc3BlY3QtYnJrXCIsXCItLXRyYWNlLXRsc1wiLFwiLS1uby10cmFjZS10bHNcIixcIi0tc3RhY2stdHJhY2UtbGltaXRcIixcIi0tZXhwZXJpbWVudGFsLXJlcGwtYXdhaXRcIixcIi0tbm8tZXhwZXJpbWVudGFsLXJlcGwtYXdhaXRcIixcIi0tcHJlc2VydmUtc3ltbGlua3NcIixcIi0tbm8tcHJlc2VydmUtc3ltbGlua3NcIixcIi0tcmVwb3J0LXVuY2F1Z2h0LWV4Y2VwdGlvblwiLFwiLS1uby1yZXBvcnQtdW5jYXVnaHQtZXhjZXB0aW9uXCIsXCItLWV4cGVyaW1lbnRhbC1tb2R1bGVzXCIsXCItLW5vLWV4cGVyaW1lbnRhbC1tb2R1bGVzXCIsXCItLXJlcG9ydC1zaWduYWxcIixcIi0taml0bGVzc1wiLFwiLS1pbnNwZWN0LXBvcnRcIixcIi0taGVhcHNuYXBzaG90LW5lYXItaGVhcC1saW1pdFwiLFwiLS10bHMta2V5bG9nXCIsXCItLWZvcmNlLWNvbnRleHQtYXdhcmVcIixcIi0tbm8tZm9yY2UtY29udGV4dC1hd2FyZVwiLFwiLS1uYXBpLW1vZHVsZXNcIixcIi0tYWJvcnQtb24tdW5jYXVnaHQtZXhjZXB0aW9uXCIsXCItLWRpYWdub3N0aWMtZGlyXCIsXCItLXZlcmlmeS1iYXNlLW9iamVjdHNcIixcIi0tbm8tdmVyaWZ5LWJhc2Utb2JqZWN0c1wiLFwiLS11bmhhbmRsZWQtcmVqZWN0aW9uc1wiLFwiLS1wZXJmLWJhc2ljLXByb2ZcIixcIi0tdHJhY2UtYXRvbWljcy13YWl0XCIsXCItLW5vLXRyYWNlLWF0b21pY3Mtd2FpdFwiLFwiLS1kZXByZWNhdGlvblwiLFwiLS1uby1kZXByZWNhdGlvblwiLFwiLS1wZXJmLWJhc2ljLXByb2Ytb25seS1mdW5jdGlvbnNcIixcIi0tcGVyZi1wcm9mXCIsXCItLW1heC1odHRwLWhlYWRlci1zaXplXCIsXCItLXJlcG9ydC1vbi1zaWduYWxcIixcIi0tbm8tcmVwb3J0LW9uLXNpZ25hbFwiLFwiLS10aHJvdy1kZXByZWNhdGlvblwiLFwiLS1uby10aHJvdy1kZXByZWNhdGlvblwiLFwiLS13YXJuaW5nc1wiLFwiLS1uby13YXJuaW5nc1wiLFwiLS1mb3JjZS1maXBzXCIsXCItLW5vLWZvcmNlLWZpcHNcIixcIi0tcGVuZGluZy1kZXByZWNhdGlvblwiLFwiLS1uby1wZW5kaW5nLWRlcHJlY2F0aW9uXCIsXCItLWlucHV0LXR5cGVcIixcIi0tdGxzLW1heC12MS4zXCIsXCItLW5vLXRscy1tYXgtdjEuM1wiLFwiLS10bHMtbWluLXYxLjJcIixcIi0tbm8tdGxzLW1pbi12MS4yXCIsXCItLWluc3BlY3RcIixcIi0tbm8taW5zcGVjdFwiLFwiLS1oZWFwc25hcHNob3Qtc2lnbmFsXCIsXCItLXRyYWNlLXdhcm5pbmdzXCIsXCItLW5vLXRyYWNlLXdhcm5pbmdzXCIsXCItLXRyYWNlLWV2ZW50LWNhdGVnb3JpZXNcIixcIi0tZXhwZXJpbWVudGFsLXdvcmtlclwiLFwiLS10bHMtbWF4LXYxLjJcIixcIi0tbm8tdGxzLW1heC12MS4yXCIsXCItLXBlcmYtcHJvZi11bndpbmRpbmctaW5mb1wiLFwiLS1wcmVzZXJ2ZS1zeW1saW5rcy1tYWluXCIsXCItLW5vLXByZXNlcnZlLXN5bWxpbmtzLW1haW5cIixcIi0tcG9saWN5LWludGVncml0eVwiLFwiLS1leHBlcmltZW50YWwtd2FzbS1tb2R1bGVzXCIsXCItLW5vLWV4cGVyaW1lbnRhbC13YXNtLW1vZHVsZXNcIixcIi0tbm9kZS1tZW1vcnktZGVidWdcIixcIi0taW5zcGVjdC1wdWJsaXNoLXVpZFwiLFwiLS10bHMtbWluLXYxLjNcIixcIi0tbm8tdGxzLW1pbi12MS4zXCIsXCItLWV4cGVyaW1lbnRhbC1zcGVjaWZpZXItcmVzb2x1dGlvblwiLFwiLS1zZWN1cmUtaGVhcFwiLFwiLS10bHMtbWluLXYxLjBcIixcIi0tbm8tdGxzLW1pbi12MS4wXCIsXCItLXJlZGlyZWN0LXdhcm5pbmdzXCIsXCItLWV4cGVyaW1lbnRhbC1yZXBvcnRcIixcIi0tdHJhY2UtZXZlbnQtZmlsZS1wYXR0ZXJuXCIsXCItLXRyYWNlLXVuY2F1Z2h0XCIsXCItLW5vLXRyYWNlLXVuY2F1Z2h0XCIsXCItLWV4cGVyaW1lbnRhbC1sb2FkZXJcIixcIi0taHR0cC1wYXJzZXJcIixcIi0tZG5zLXJlc3VsdC1vcmRlclwiLFwiLS10cmFjZS1zaWdpbnRcIixcIi0tbm8tdHJhY2Utc2lnaW50XCIsXCItLXNlY3VyZS1oZWFwLW1pblwiLFwiLS1lbmFibGUtZmlwc1wiLFwiLS1uby1lbmFibGUtZmlwc1wiLFwiLS1lbmFibGUtc291cmNlLW1hcHNcIixcIi0tbm8tZW5hYmxlLXNvdXJjZS1tYXBzXCIsXCItLWluc2VjdXJlLWh0dHAtcGFyc2VyXCIsXCItLW5vLWluc2VjdXJlLWh0dHAtcGFyc2VyXCIsXCItLXVzZS1vcGVuc3NsLWNhXCIsXCItLW5vLXVzZS1vcGVuc3NsLWNhXCIsXCItLXRscy1jaXBoZXItbGlzdFwiLFwiLS1leHBlcmltZW50YWwtdG9wLWxldmVsLWF3YWl0XCIsXCItLW5vLWV4cGVyaW1lbnRhbC10b3AtbGV2ZWwtYXdhaXRcIixcIi0tb3BlbnNzbC1jb25maWdcIixcIi0taWN1LWRhdGEtZGlyXCIsXCItLXY4LXBvb2wtc2l6ZVwiLFwiLS1yZXBvcnQtb24tZmF0YWxlcnJvclwiLFwiLS1uby1yZXBvcnQtb24tZmF0YWxlcnJvclwiLFwiLS10aXRsZVwiLFwiLS10bHMtbWluLXYxLjFcIixcIi0tbm8tdGxzLW1pbi12MS4xXCIsXCItLXJlcG9ydC1maWxlbmFtZVwiLFwiLS10cmFjZS1kZXByZWNhdGlvblwiLFwiLS1uby10cmFjZS1kZXByZWNhdGlvblwiLFwiLS1yZXBvcnQtY29tcGFjdFwiLFwiLS1uby1yZXBvcnQtY29tcGFjdFwiLFwiLS1leHBlcmltZW50YWwtcG9saWN5XCIsXCItLWV4cGVyaW1lbnRhbC1pbXBvcnQtbWV0YS1yZXNvbHZlXCIsXCItLW5vLWV4cGVyaW1lbnRhbC1pbXBvcnQtbWV0YS1yZXNvbHZlXCIsXCItLXplcm8tZmlsbC1idWZmZXJzXCIsXCItLW5vLXplcm8tZmlsbC1idWZmZXJzXCIsXCItLXJlcG9ydC1kaXJcIixcIi0tdXNlLWJ1bmRsZWQtY2FcIixcIi0tbm8tdXNlLWJ1bmRsZWQtY2FcIixcIi0tZXhwZXJpbWVudGFsLXZtLW1vZHVsZXNcIixcIi0tbm8tZXhwZXJpbWVudGFsLXZtLW1vZHVsZXNcIixcIi0tZm9yY2UtYXN5bmMtaG9va3MtY2hlY2tzXCIsXCItLW5vLWZvcmNlLWFzeW5jLWhvb2tzLWNoZWNrc1wiLFwiLS1mcm96ZW4taW50cmluc2ljc1wiLFwiLS1uby1mcm96ZW4taW50cmluc2ljc1wiLFwiLS1odWdlLW1heC1vbGQtZ2VuZXJhdGlvbi1zaXplXCIsXCItLWRpc2FibGUtcHJvdG9cIixcIi0tZGVidWctYXJyYXlidWZmZXItYWxsb2NhdGlvbnNcIixcIi0tbm8tZGVidWctYXJyYXlidWZmZXItYWxsb2NhdGlvbnNcIixcIi0tY29uZGl0aW9uc1wiLFwiLS1leHBlcmltZW50YWwtd2FzaS11bnN0YWJsZS1wcmV2aWV3MVwiLFwiLS1uby1leHBlcmltZW50YWwtd2FzaS11bnN0YWJsZS1wcmV2aWV3MVwiLFwiLS10cmFjZS1zeW5jLWlvXCIsXCItLW5vLXRyYWNlLXN5bmMtaW9cIixcIi0tdXNlLWxhcmdlcGFnZXNcIixcIi0tZXhwZXJpbWVudGFsLWFib3J0Y29udHJvbGxlclwiLFwiLS1kZWJ1Zy1wb3J0XCIsXCItLWVzLW1vZHVsZS1zcGVjaWZpZXItcmVzb2x1dGlvblwiLFwiLS1wcm9mLXByb2Nlc3NcIixcIi1DXCIsXCItLWxvYWRlclwiLFwiLS1yZXBvcnQtZGlyZWN0b3J5XCIsXCItclwiLFwiLS10cmFjZS1ldmVudHMtZW5hYmxlZFwiXSx0PW89Pm8ucmVwbGFjZShNaCxcIlwiKSxyPWUubWFwKHQpO2NsYXNzIG4gZXh0ZW5kcyBTZXR7Y29uc3RydWN0b3IoaSl7c3VwZXIoKSx0aGlzW010XT17YXJyYXk6aX19YWRkKCl7cmV0dXJuIHRoaXN9ZGVsZXRlKCl7cmV0dXJuITF9Y2xlYXIoKXt9aGFzKGkpe3JldHVybiB0eXBlb2YgaT09XCJzdHJpbmdcIj8oaT1pLnJlcGxhY2UodUksXCItXCIpLE1oLnRlc3QoaSk/KGk9aS5yZXBsYWNlKGZJLFwiXCIpLHRoaXNbTXRdLmFycmF5LmluY2x1ZGVzKGkpKTpyLmluY2x1ZGVzKGkpKTohMX1lbnRyaWVzKCl7cmV0dXJuIHRoaXNbTXRdLnNldD8/PW5ldyBTZXQodGhpc1tNdF0uYXJyYXkpLHRoaXNbTXRdLnNldC5lbnRyaWVzKCl9Zm9yRWFjaChpLHM9dm9pZCAwKXt0aGlzW010XS5hcnJheS5mb3JFYWNoKGE9PlJlZmxlY3QuYXBwbHkoaSxzLFthLGEsdGhpc10pKX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzW010XS5hcnJheS5sZW5ndGh9dmFsdWVzKCl7cmV0dXJuIHRoaXNbTXRdLnNldD8/PW5ldyBTZXQodGhpc1tNdF0uYXJyYXkpLHRoaXNbTXRdLnNldC52YWx1ZXMoKX19cmV0dXJuIG4ucHJvdG90eXBlLmtleXM9bi5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXT1uLnByb3RvdHlwZS52YWx1ZXMsT2JqZWN0LmZyZWV6ZShuLnByb3RvdHlwZS5jb25zdHJ1Y3RvciksT2JqZWN0LmZyZWV6ZShuLnByb3RvdHlwZSksT2JqZWN0LmZyZWV6ZShuZXcgbihlKSl9dmFyIE10LHVJLE1oLGZJLEJoPUEoKCk9PntNdD1TeW1ib2woXCJpbnRlcm5hbCBwcm9wZXJ0aWVzXCIpLHVJPS9fL2csTWg9L14tLT8vLGZJPS89LiokL30pO2Z1bmN0aW9uIHZoKGUsdCxyPSEwKXtsZXQgbj1rRSh0KTtuJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGUsZSx7d3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6cix2YWx1ZTpufSl9ZnVuY3Rpb24gZEkoZSx0LHIsbixvKXtJZSh0eXBlb2YgZT09XCJzdHJpbmdcIik7bGV0IGk9bmV3IEVycm9yKGUpO3JldHVybiBpLm5hbWU9U3RyaW5nKHR8fFwiV2FybmluZ1wiKSxyIT09dm9pZCAwJiYoaS5jb2RlPXIpLG8hPT12b2lkIDAmJihpLmRldGFpbD1vKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShpLG58fHRlLmVtaXRXYXJuaW5nKSxpfWZ1bmN0aW9uIGhJKGUpe3RlLmVtaXQoXCJ3YXJuaW5nXCIsZSl9ZnVuY3Rpb24gT0koZSx0LHIsbil7bGV0IG87aWYodCE9PW51bGwmJnR5cGVvZiB0PT1cIm9iamVjdFwiJiYhQXJyYXkuaXNBcnJheSh0KT8obj10LmN0b3Iscj10LmNvZGUsdHlwZW9mIHQuZGV0YWlsPT1cInN0cmluZ1wiJiYobz10LmRldGFpbCksdD10LnR5cGV8fFwiV2FybmluZ1wiKTp0eXBlb2YgdD09XCJmdW5jdGlvblwiJiYobj10LHI9dm9pZCAwLHQ9XCJXYXJuaW5nXCIpLHQhPT12b2lkIDAmJlByKHQsXCJ0eXBlXCIpLHR5cGVvZiByPT1cImZ1bmN0aW9uXCI/KG49cixyPXZvaWQgMCk6ciE9PXZvaWQgMCYmUHIocixcImNvZGVcIiksdHlwZW9mIGU9PVwic3RyaW5nXCIpZT1kSShlLHQscixuLG8pO2Vsc2UgaWYoIShlIGluc3RhbmNlb2YgRXJyb3IpKXRocm93IG5ldyBCKFwid2FybmluZ1wiLFtcIkVycm9yXCIsXCJzdHJpbmdcIl0sZSk7aWYoZS5uYW1lPT09XCJEZXByZWNhdGlvbldhcm5pbmdcIil7aWYodGUubm9EZXByZWNhdGlvbilyZXR1cm47aWYodGUudGhyb3dEZXByZWNhdGlvbilyZXR1cm4gdGUubmV4dFRpY2soKCk9Pnt0aHJvdyBlfSl9dGUubmV4dFRpY2soaEksZSl9ZnVuY3Rpb24gWGwoZSl7bGV0IHQ9cGVyZm9ybWFuY2Uubm93KCkscj1NYXRoLmZsb29yKHQvMWUzKSxuPU1hdGguZmxvb3IodCoxZTYtcioxZTkpO2lmKCFlKXJldHVybltyLG5dO2xldFtvLGldPWU7cmV0dXJuW3ItbyxuLWldfWZ1bmN0aW9uIHFsKCl7cmV0dXJuey4uLkRlbm8ubWVtb3J5VXNhZ2UoKSxhcnJheUJ1ZmZlcnM6MH19ZnVuY3Rpb24gbUkoZSx0PVwiU0lHVEVSTVwiKXtpZihlIT0oZXwwKSl0aHJvdyBuZXcgQihcInBpZFwiLFwibnVtYmVyXCIsZSk7aWYodHlwZW9mIHQ9PVwic3RyaW5nXCIpdHJ5e0Rlbm8ua2lsbChlLHQpfWNhdGNoKHIpe3Rocm93IHIgaW5zdGFuY2VvZiBUeXBlRXJyb3I/bmV3IEhuKHQpOnJ9ZWxzZSB0aHJvdyBuZXcgSG4odC50b1N0cmluZygpKTtyZXR1cm4hMH1mdW5jdGlvbiBGaChlLHQpe3RlLmVtaXQoXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIixlLHQpLHRlLmVtaXQoXCJ1bmNhdWdodEV4Y2VwdGlvblwiLGUsdCl9dmFyIHBJLFJJLEVJLE9vLGRzLF9JLFFsLHRlLEo4LGUzLHpsLFdoPUEoKCk9PntndCgpO3llKCk7dG4oKTtkZSgpO2VlKCk7QkUoKTtlcigpO3ppKCk7S3QoKTtIYSgpO1pfKCk7VmEoKTtrbigpO1VoKCk7QmgoKTtwST1RXyxSST1tdCxFST16XyxPbz1bXCJkaXNjb25uZWN0XCIsXCJtZXNzYWdlXCIsXCJtdWx0aXBsZVJlc29sdmVzXCIsXCJyZWplY3Rpb25IYW5kbGVkXCIsXCJ3b3JrZXJcIl0sZHM9W1wiXCIsXCJcIiwuLi5EZW5vLmFyZ3NdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkcyxcIjBcIix7Z2V0OkRlbm8uZXhlY1BhdGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZHMsXCIxXCIse2dldDooKT0+RGVuby5tYWluTW9kdWxlLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKT9qRShEZW5vLm1haW5Nb2R1bGUpOktFKERlbm8uY3dkKCksXCIkZGVubyRub2RlLmpzXCIpfSk7X0k9ZT0+e2lmKGV8fGU9PT0wKWlmKHR5cGVvZiBlPT1cInN0cmluZ1wiKXtsZXQgdD1wYXJzZUludChlKTt0ZS5leGl0Q29kZT1pc05hTih0KT92b2lkIDA6dH1lbHNlIHRlLmV4aXRDb2RlPWU7dGUuX2V4aXRpbmd8fCh0ZS5fZXhpdGluZz0hMCx0ZS5lbWl0KFwiZXhpdFwiLHRlLmV4aXRDb2RlfHwwKSksRGVuby5leGl0KHRlLmV4aXRDb2RlfHwwKX07WGwuYmlnaW50PWZ1bmN0aW9uKCl7bGV0W2UsdF09WGwoKTtyZXR1cm4gQmlnSW50KGUpKjEwMDAwMDAwMDBuK0JpZ0ludCh0KX07cWwucnNzPWZ1bmN0aW9uKCl7cmV0dXJuIHFsKCkucnNzfTtRbD1jbGFzcyBleHRlbmRzIE17Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMuYXJjaD1xRTt0aGlzLmFyZ3Y9ZHM7dGhpcy5jaGRpcj1RRTt0aGlzLmNvbmZpZz17dGFyZ2V0X2RlZmF1bHRzOnt9LHZhcmlhYmxlczp7fX07dGhpcy5jd2Q9ekU7dGhpcy5lbnY9WkU7dGhpcy5leGVjQXJndj1bXTt0aGlzLmV4aXQ9X0k7dGhpcy5fZXhpdGluZz1vaTt0aGlzLmV4aXRDb2RlPXZvaWQgMDt0aGlzLm1haW5Nb2R1bGU9dm9pZCAwO3RoaXMubmV4dFRpY2s9Rjt0aGlzLnBpZD1KRTt0aGlzLnBsYXRmb3JtPWVfO3RoaXMuaHJ0aW1lPVhsO3RoaXMua2lsbD1tSTt0aGlzLm1lbW9yeVVzYWdlPXFsO3RoaXMuc3RkZXJyPXBJO3RoaXMuc3RkaW49Ukk7dGhpcy5zdGRvdXQ9RUk7dGhpcy52ZXJzaW9uPXRfO3RoaXMudmVyc2lvbnM9cl87dGhpcy5lbWl0V2FybmluZz1PSTt0aGlzLl9ldmFsPXZvaWQgMDt0aGlzLiN0PURhdGUubm93KCk7dGhpcy4jcj1raCgpO3RoaXMuZmVhdHVyZXM9e2luc3BlY3RvcjohMX07Z2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIscj0+e2lmKHRlLmxpc3RlbmVyQ291bnQoXCJ1bmhhbmRsZWRSZWplY3Rpb25cIik9PT0wKXtpZih0ZS5saXN0ZW5lckNvdW50KFwidW5jYXVnaHRFeGNlcHRpb25cIik9PT0wKXRocm93IHIucmVhc29uO3IucHJldmVudERlZmF1bHQoKSxGaChyLnJlYXNvbixcInVuaGFuZGxlZFJlamVjdGlvblwiKTtyZXR1cm59ci5wcmV2ZW50RGVmYXVsdCgpLHRlLmVtaXQoXCJ1bmhhbmRsZWRSZWplY3Rpb25cIixyLnJlYXNvbixyLnByb21pc2UpfSksZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixyPT57dGUubGlzdGVuZXJDb3VudChcInVuY2F1Z2h0RXhjZXB0aW9uXCIpPjAmJnIucHJldmVudERlZmF1bHQoKSxGaChyLmVycm9yLFwidW5jYXVnaHRFeGNlcHRpb25cIil9KSxnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIixyPT57c3VwZXIuZW1pdChcImJlZm9yZUV4aXRcIix0ZS5leGl0Q29kZXx8MCksY2koKSxxZS5ldmVudExvb3BIYXNNb3JlV29yaygpJiZyLnByZXZlbnREZWZhdWx0KCl9KSxnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmxvYWRcIiwoKT0+e3RlLl9leGl0aW5nfHwodGUuX2V4aXRpbmc9ITAsc3VwZXIuZW1pdChcImV4aXRcIix0ZS5leGl0Q29kZXx8MCkpfSl9b24ocixuKXtyZXR1cm4gT28uaW5jbHVkZXMocik/KGtyKGBwcm9jZXNzLm9uKFwiJHtyfVwiKWApLHN1cGVyLm9uKHIsbikpOnIuc3RhcnRzV2l0aChcIlNJR1wiKT9yPT09XCJTSUdCUkVBS1wiJiZEZW5vLmJ1aWxkLm9zIT09XCJ3aW5kb3dzXCJ8fGtzKHIsbik6c3VwZXIub24ocixuKSx0aGlzfW9mZihyLG4pe3JldHVybiBPby5pbmNsdWRlcyhyKT8oa3IoYHByb2Nlc3Mub2ZmKFwiJHtyfVwiKWApLHN1cGVyLm9mZihyLG4pKTpyLnN0YXJ0c1dpdGgoXCJTSUdcIik/cj09PVwiU0lHQlJFQUtcIiYmRGVuby5idWlsZC5vcyE9PVwid2luZG93c1wifHx0ZihyLG4pOnN1cGVyLm9mZihyLG4pLHRoaXN9ZW1pdChyLC4uLm4pe2lmKHIuc3RhcnRzV2l0aChcIlNJR1wiKSlyPT09XCJTSUdCUkVBS1wiJiZEZW5vLmJ1aWxkLm9zIT09XCJ3aW5kb3dzXCJ8fERlbm8ua2lsbChEZW5vLnBpZCxyKTtlbHNlIHJldHVybiBzdXBlci5lbWl0KHIsLi4ubik7cmV0dXJuITB9cHJlcGVuZExpc3RlbmVyKHIsbil7cmV0dXJuIE9vLmluY2x1ZGVzKHIpPyhrcihgcHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIoXCIke3J9XCIpYCksc3VwZXIucHJlcGVuZExpc3RlbmVyKHIsbikpOnIuc3RhcnRzV2l0aChcIlNJR1wiKT9yPT09XCJTSUdCUkVBS1wiJiZEZW5vLmJ1aWxkLm9zIT09XCJ3aW5kb3dzXCJ8fGtzKHIsbik6c3VwZXIucHJlcGVuZExpc3RlbmVyKHIsbiksdGhpc31hZGRMaXN0ZW5lcihyLG4pe3JldHVybiBPby5pbmNsdWRlcyhyKSYma3IoYHByb2Nlc3MuYWRkTGlzdGVuZXIoXCIke3J9XCIpYCksdGhpcy5vbihyLG4pfXJlbW92ZUxpc3RlbmVyKHIsbil7cmV0dXJuIE9vLmluY2x1ZGVzKHIpJiZrcihgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcihcIiR7cn1cIilgKSx0aGlzLm9mZihyLG4pfWJpbmRpbmcocil7cmV0dXJuIFBoKHIpfXVtYXNrKCl7cmV0dXJuIDE4fWdldHVpZCgpe3JldHVybiBOYU59Z2V0Z2lkKCl7cmV0dXJuIE5hTn1nZXQgZXhlY1BhdGgoKXtyZXR1cm4gZHNbMF19I3Q7dXB0aW1lKCl7cmV0dXJuKERhdGUubm93KCktdGhpcy4jdCkvMWUzfSNyO2dldCBhbGxvd2VkTm9kZUVudmlyb25tZW50RmxhZ3MoKXtyZXR1cm4gdGhpcy4jcn19LHRlPW5ldyBRbDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGUsU3ltYm9sLnRvU3RyaW5nVGFnLHtlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSx2YWx1ZTpcInByb2Nlc3NcIn0pO3ZoKFwibm9EZXByZWNhdGlvblwiLFwiLS1uby1kZXByZWNhdGlvblwiKTt2aChcInRocm93RGVwcmVjYXRpb25cIixcIi0tdGhyb3ctZGVwcmVjYXRpb25cIik7Sjg9dGUucmVtb3ZlTGlzdGVuZXIsZTM9dGUucmVtb3ZlQWxsTGlzdGVuZXJzLHpsPXRlfSk7ZnVuY3Rpb24gQkkoZSl7aWYoZSYmIXguaXNFbmNvZGluZyhlKSl7bGV0IHQ9XCJpcyBpbnZhbGlkIGVuY29kaW5nXCI7dGhyb3cgbmV3IGFlKGUsXCJlbmNvZGluZ1wiLHQpfX1mdW5jdGlvbiBudShlKXtsZXQgdD17fTtmb3IobGV0IHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9ZnVuY3Rpb24gb3UoZSx0KXtpZihlPT1udWxsfHx0eXBlb2YgZT09XCJmdW5jdGlvblwiKXJldHVybiB0O2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiKXQ9ey4uLnR9LHQuZW5jb2Rpbmc9ZSxlPXQ7ZWxzZSBpZih0eXBlb2YgZSE9XCJvYmplY3RcIil0aHJvdyBuZXcgQihcIm9wdGlvbnNcIixbXCJzdHJpbmdcIixcIk9iamVjdFwiXSxlKTtyZXR1cm4gZS5lbmNvZGluZyE9PVwiYnVmZmVyXCImJkJJKGUuZW5jb2RpbmcpLGUuc2lnbmFsIT09dm9pZCAwJiZrdChlLnNpZ25hbCxcIm9wdGlvbnMuc2lnbmFsXCIpLGV9ZnVuY3Rpb24gZXQoZSx0LHIsbixvLGkscyxhLGMsdSl7dGhpcy5kZXY9ZSx0aGlzLm1vZGU9dCx0aGlzLm5saW5rPXIsdGhpcy51aWQ9bix0aGlzLmdpZD1vLHRoaXMucmRldj1pLHRoaXMuYmxrc2l6ZT1zLHRoaXMuaW5vPWEsdGhpcy5zaXplPWMsdGhpcy5ibG9ja3M9dX1mdW5jdGlvbiBwcihlKXtyZXR1cm4gbmV3IERhdGUoTnVtYmVyKGUpKy41KX1mdW5jdGlvbiBpdShlLHQscixuLG8saSxzLGEsYyx1LFIsZixwLGwpe1JlZmxlY3QuYXBwbHkoZXQsdGhpcyxbZSx0LHIsbixvLGkscyxhLGMsdV0pLHRoaXMuYXRpbWVNcz1SL2hzLHRoaXMubXRpbWVNcz1mL2hzLHRoaXMuY3RpbWVNcz1wL2hzLHRoaXMuYmlydGh0aW1lTXM9bC9ocyx0aGlzLmF0aW1lTnM9Uix0aGlzLm10aW1lTnM9Zix0aGlzLmN0aW1lTnM9cCx0aGlzLmJpcnRodGltZU5zPWwsdGhpcy5hdGltZT1wcih0aGlzLmF0aW1lTXMpLHRoaXMubXRpbWU9cHIodGhpcy5tdGltZU1zKSx0aGlzLmN0aW1lPXByKHRoaXMuY3RpbWVNcyksdGhpcy5iaXJ0aHRpbWU9cHIodGhpcy5iaXJ0aHRpbWVNcyl9ZnVuY3Rpb24gUnIoZSx0LHIsbixvLGkscyxhLGMsdSxSLGYscCxsKXtldC5jYWxsKHRoaXMsZSx0LHIsbixvLGkscyxhLGMsdSksdGhpcy5hdGltZU1zPVIsdGhpcy5tdGltZU1zPWYsdGhpcy5jdGltZU1zPXAsdGhpcy5iaXJ0aHRpbWVNcz1sLHRoaXMuYXRpbWU9cHIoUiksdGhpcy5tdGltZT1wcihmKSx0aGlzLmN0aW1lPXByKHApLHRoaXMuYmlydGh0aW1lPXByKGwpfWZ1bmN0aW9uIGN1KCl7SGh8fCh6bC5lbWl0V2FybmluZyhcIkluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBOb2RlLmpzLCBmcy5ybWRpcihwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KSB3aWxsIGJlIHJlbW92ZWQuIFVzZSBmcy5ybShwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KSBpbnN0ZWFkXCIsXCJEZXByZWNhdGlvbldhcm5pbmdcIixcIkRFUDAxNDdcIiksSGg9ITApfXZhciBmciwkaCxKbCxHaCxZaCxqaCxLaCxYaCxxaCxfMyxkMyxoMyxPMyxtMyxTMyxnMyxBMyxldSxTSSxnSSx0dSxBSSxRaCx4SSxydSxOSSxJSSx4Myx5SSxUSSxESSxiSSxDSSxMSSx3SSx6aCxQSSxVSSxaaCxNSSxrSSxOMyxJMyx5MyxUMyxtbyxPcyxabCxEMyxGSSxocyxiMyxDMyxMMyx3MyxQMyxzdSx2SSxzZSxRdCxhdSxWaCxKaCxXSSxVMyxtcyxTcyxIaCxTbyxkbixobixNMyxrMyxDZT1BKCgpPT57XCJ1c2Ugc3RyaWN0XCI7dWUoKTtlZSgpO2N0KCk7eigpO1VjKCk7ZGUoKTtEZSgpO1JFKCk7a2MoKTtlbigpO1BlKCk7V2goKTtGdCgpO2ZyPVN5bWJvbChcInR5cGVcIiksJGg9U3ltYm9sKFwic3RhdHNcIikse0ZfT0s6Smw9MCxXX09LOkdoPTAsUl9PSzpZaD0wLFhfT0s6amg9MCxDT1BZRklMRV9FWENMOktoLENPUFlGSUxFX0ZJQ0xPTkU6WGgsQ09QWUZJTEVfRklDTE9ORV9GT1JDRTpxaCxPX0FQUEVORDpfMyxPX0NSRUFUOmQzLE9fRVhDTDpoMyxPX1JET05MWTpPMyxPX1JEV1I6bTMsT19TWU5DOlMzLE9fVFJVTkM6ZzMsT19XUk9OTFk6QTMsU19JRkJMSzpldSxTX0lGQ0hSOlNJLFNfSUZESVI6Z0ksU19JRklGTzp0dSxTX0lGTE5LOkFJLFNfSUZNVDpRaCxTX0lGUkVHOnhJLFNfSUZTT0NLOnJ1LFVWX0ZTX1NZTUxJTktfRElSOk5JLFVWX0ZTX1NZTUxJTktfSlVOQ1RJT046SUksVVZfRElSRU5UX1VOS05PV046eDMsVVZfRElSRU5UX0ZJTEU6eUksVVZfRElSRU5UX0RJUjpUSSxVVl9ESVJFTlRfTElOSzpESSxVVl9ESVJFTlRfRklGTzpiSSxVVl9ESVJFTlRfU09DS0VUOkNJLFVWX0RJUkVOVF9DSEFSOkxJLFVWX0RJUkVOVF9CTE9DSzp3SX09QWUse2Vycm5vOntFSVNESVI6emh9fT1XZSxQST1NYXRoLm1pbihKbCxHaCxZaCxqaCksVUk9Smx8R2h8WWh8amgsWmg9MCxNST1NYXRoLm1pbihaaCxLaCxYaCxxaCksa0k9S2h8WGh8cWgsTjM9MioqMzEtMSxJMz02NCoxMDI0LHkzPTUxMioxMDI0LFQzPTUxMioxMDI0LG1vPTIqKjMyLTE7T3M9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLm5hbWU9dCx0aGlzW2ZyXT1yfWlzRGlyZWN0b3J5KCl7cmV0dXJuIHRoaXNbZnJdPT09VEl9aXNGaWxlKCl7cmV0dXJuIHRoaXNbZnJdPT09eUl9aXNCbG9ja0RldmljZSgpe3JldHVybiB0aGlzW2ZyXT09PXdJfWlzQ2hhcmFjdGVyRGV2aWNlKCl7cmV0dXJuIHRoaXNbZnJdPT09TEl9aXNTeW1ib2xpY0xpbmsoKXtyZXR1cm4gdGhpc1tmcl09PT1ESX1pc0ZJRk8oKXtyZXR1cm4gdGhpc1tmcl09PT1iSX1pc1NvY2tldCgpe3JldHVybiB0aGlzW2ZyXT09PUNJfX0sWmw9Y2xhc3MgZXh0ZW5kcyBPc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsbnVsbCksdGhpc1skaF09cn19O2ZvcihsZXQgZSBvZiBSZWZsZWN0Lm93bktleXMoT3MucHJvdG90eXBlKSllIT09XCJjb25zdHJ1Y3RvclwiJiYoWmwucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbJGhdW2VdKCl9KTtEMz14LmZyb20obkUuc2VwKTtGST1YKChlLHQscj0hMCk9PntsZXQgbj10eXBlb2YgZT09XCJzdHJpbmdcIixvPUZlKGUpO2lmKCFuJiYhb3x8biYmIWUuaW5jbHVkZXMoXCJcXDBcIil8fG8mJiFlLmluY2x1ZGVzKDApKXJldHVybjtsZXQgaT1uZXcgYWUodCxlLFwibXVzdCBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5IHdpdGhvdXQgbnVsbCBieXRlc1wiKTtpZihyKXRocm93IGk7cmV0dXJuIGl9KTtldC5wcm90b3R5cGUuaXNEaXJlY3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoZ0kpfTtldC5wcm90b3R5cGUuaXNGaWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KHhJKX07ZXQucHJvdG90eXBlLmlzQmxvY2tEZXZpY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoZXUpfTtldC5wcm90b3R5cGUuaXNDaGFyYWN0ZXJEZXZpY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoU0kpfTtldC5wcm90b3R5cGUuaXNTeW1ib2xpY0xpbms9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tNb2RlUHJvcGVydHkoQUkpfTtldC5wcm90b3R5cGUuaXNGSUZPPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KHR1KX07ZXQucHJvdG90eXBlLmlzU29ja2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrTW9kZVByb3BlcnR5KHJ1KX07aHM9MTBuKio2bixiMz0xMG4qKjluLEMzPTEwKiozLEwzPTEwKio2O09iamVjdC5zZXRQcm90b3R5cGVPZihpdS5wcm90b3R5cGUsZXQucHJvdG90eXBlKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoaXUsZXQpO2l1LnByb3RvdHlwZS5fY2hlY2tNb2RlUHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHEmJihlPT09dHV8fGU9PT1ldXx8ZT09PXJ1KT8hMToodGhpcy5tb2RlJkJpZ0ludChRaCkpPT09QmlnSW50KGUpfTtPYmplY3Quc2V0UHJvdG90eXBlT2YoUnIucHJvdG90eXBlLGV0LnByb3RvdHlwZSk7T2JqZWN0LnNldFByb3RvdHlwZU9mKFJyLGV0KTtSci5wcm90b3R5cGUuaXNGaWxlPWV0LnByb3RvdHlwZS5pc0ZpbGU7UnIucHJvdG90eXBlLl9jaGVja01vZGVQcm9wZXJ0eT1mdW5jdGlvbihlKXtyZXR1cm4gcSYmKGU9PT10dXx8ZT09PWV1fHxlPT09cnUpPyExOih0aGlzLm1vZGUmUWgpPT09ZX07dzM9WChlPT57bGV0IHQ9MDtpZih0eXBlb2YgZT09XCJzdHJpbmdcIilzd2l0Y2goZSl7Y2FzZVwiZGlyXCI6dHw9Tkk7YnJlYWs7Y2FzZVwianVuY3Rpb25cIjp0fD1JSTticmVhaztjYXNlXCJmaWxlXCI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbWkoZSl9cmV0dXJuIHR9KSxQMz1YKChlLHQscik9PntpZihlPDApdGhyb3cgbmV3IFVlKFwib2Zmc2V0XCIsXCI+PSAwXCIsZSk7aWYodDwwKXRocm93IG5ldyBVZShcImxlbmd0aFwiLFwiPj0gMFwiLHQpO2lmKGUrdD5yKXRocm93IG5ldyBVZShcImxlbmd0aFwiLGA8PSAke3ItZX1gLHQpfSksc3U9WCgoZSx0LHIpPT57aWYoZT5yKXRocm93IG5ldyBVZShcIm9mZnNldFwiLGA8PSAke3J9YCxlKTtpZih0PnItZSl0aHJvdyBuZXcgVWUoXCJsZW5ndGhcIixgPD0gJHtyLWV9YCx0KTtpZih0PDApdGhyb3cgbmV3IFVlKFwibGVuZ3RoXCIsXCI+PSAwXCIsdCk7Tm4odCxcImxlbmd0aFwiLDApfSksdkk9WCgoZSx0PVwicGF0aFwiKT0+e2lmKHR5cGVvZiBlIT1cInN0cmluZ1wiJiYhRmUoZSkpdGhyb3cgbmV3IEIodCxbXCJzdHJpbmdcIixcIkJ1ZmZlclwiLFwiVVJMXCJdLGUpO2xldCByPUZJKGUsdCwhMSk7aWYociE9PXZvaWQgMCl0aHJvdyByfSksc2U9WCgoZSx0PVwicGF0aFwiKT0+e2xldCByPVZpKGUpO3JldHVybiB2SShyLHQpLHJ9KSxRdD1YKChlLHQ9XCJmZFwiKT0+T2JqZWN0LmlzKGUsLTApPzA6KE5uKGUsdCwwKSxlKSksYXU9WCgoZSx0PVwiYnVmZmVyc1wiKT0+e2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBCKHQsXCJBcnJheUJ1ZmZlclZpZXdbXVwiLGUpO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFfdChlW3JdKSl0aHJvdyBuZXcgQih0LFwiQXJyYXlCdWZmZXJWaWV3W11cIixlKTtyZXR1cm4gZX0pLFZoPXtkZXJlZmVyZW5jZTohMSxlcnJvck9uRXhpc3Q6ITEsZmlsdGVyOnZvaWQgMCxmb3JjZTohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITEscmVjdXJzaXZlOiExfSxKaD17cmVjdXJzaXZlOiExLGZvcmNlOiExLHJldHJ5RGVsYXk6MTAwLG1heFJldHJpZXM6MH0sV0k9e3JldHJ5RGVsYXk6MTAwLG1heFJldHJpZXM6MCxyZWN1cnNpdmU6ITF9LFUzPVgoZT0+ZT09PXZvaWQgMD97Li4uVmh9Oih2ZShlLFwib3B0aW9uc1wiKSxlPXsuLi5WaCwuLi5lfSxnZShlLmRlcmVmZXJlbmNlLFwib3B0aW9ucy5kZXJlZmVyZW5jZVwiKSxnZShlLmVycm9yT25FeGlzdCxcIm9wdGlvbnMuZXJyb3JPbkV4aXN0XCIpLGdlKGUuZm9yY2UsXCJvcHRpb25zLmZvcmNlXCIpLGdlKGUucHJlc2VydmVUaW1lc3RhbXBzLFwib3B0aW9ucy5wcmVzZXJ2ZVRpbWVzdGFtcHNcIiksZ2UoZS5yZWN1cnNpdmUsXCJvcHRpb25zLnJlY3Vyc2l2ZVwiKSxlLmZpbHRlciE9PXZvaWQgMCYmZHQoZS5maWx0ZXIsXCJvcHRpb25zLmZpbHRlclwiKSxlKSksbXM9WCgoZSx0LHIsbik9Pnt0PVNvKHQsSmgpLGdlKHQuZm9yY2UsXCJvcHRpb25zLmZvcmNlXCIpLE5yKGUsKG8saSk9Pm8/dC5mb3JjZSYmby5jb2RlPT09XCJFTk9FTlRcIj9uKG51bGwsdCk6bihvLHQpOnImJiFpLmlzRGlyZWN0b3J5KCk/bighMSk6aS5pc0RpcmVjdG9yeSgpJiYhdC5yZWN1cnNpdmU/bihuZXcgZGMoe2NvZGU6XCJFSVNESVJcIixtZXNzYWdlOlwiaXMgYSBkaXJlY3RvcnlcIixwYXRoOmUsc3lzY2FsbDpcInJtXCIsZXJybm86emh9KSk6bihudWxsLHQpKX0pLFNzPVgoKGUsdCxyKT0+e2lmKHQ9U28odCxKaCksZ2UodC5mb3JjZSxcIm9wdGlvbnMuZm9yY2VcIiksIXQuZm9yY2V8fHJ8fCF0LnJlY3Vyc2l2ZSl7bGV0IG49SGkoZSx7dGhyb3dJZk5vRW50cnk6IXQuZm9yY2V9KT8uaXNEaXJlY3RvcnkoKTtpZihyJiYhbilyZXR1cm4hMTtpZihuJiYhdC5yZWN1cnNpdmUpdGhyb3cgbmV3IGRjKHtjb2RlOlwiRUlTRElSXCIsbWVzc2FnZTpcImlzIGEgZGlyZWN0b3J5XCIscGF0aDplLHN5c2NhbGw6XCJybVwiLGVycm5vOnpofSl9cmV0dXJuIHR9KSxIaD16bC5ub0RlcHJlY2F0aW9uO1NvPVgoKGUsdD1XSSk9PmU9PT12b2lkIDA/dDoodmUoZSxcIm9wdGlvbnNcIiksZT17Li4udCwuLi5lfSxnZShlLnJlY3Vyc2l2ZSxcIm9wdGlvbnMucmVjdXJzaXZlXCIpLE5uKGUucmV0cnlEZWxheSxcIm9wdGlvbnMucmV0cnlEZWxheVwiLDApLEhmKGUubWF4UmV0cmllcyxcIm9wdGlvbnMubWF4UmV0cmllc1wiKSxlKSksZG49WCgoZSx0KT0+e2xldCByPVBJLG49VUksbz1KbDtpZih0PT09XCJjb3B5RmlsZVwiPyhyPU1JLG49a0ksbz1lfHxaaCk6cEUodD09PVwiYWNjZXNzXCIpLGU9PW51bGwpcmV0dXJuIG87aWYoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT49ciYmZTw9bilyZXR1cm4gZTt0aHJvdyB0eXBlb2YgZSE9XCJudW1iZXJcIj9uZXcgQihcIm1vZGVcIixcImludGVnZXJcIixlKTpuZXcgVWUoXCJtb2RlXCIsYGFuIGludGVnZXIgPj0gJHtyfSAmJiA8PSAke259YCxlKX0pLGhuPVgoKGUsdCk9PntpZih0eXBlb2YgZSE9XCJzdHJpbmdcIiYmISh0eXBlb2YgZT09XCJvYmplY3RcIiYmZSE9PW51bGwmJnR5cGVvZiBlLnRvU3RyaW5nPT1cImZ1bmN0aW9uXCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLFwidG9TdHJpbmdcIikpKXRocm93IG5ldyBCKHQsW1wic3RyaW5nXCIsXCJCdWZmZXJcIixcIlR5cGVkQXJyYXlcIixcIkRhdGFWaWV3XCJdLGUpfSksTTM9WChlPT57aWYodHlwZW9mIGU9PVwibnVtYmVyXCIpQXQoZSxcInBvc2l0aW9uXCIpO2Vsc2UgaWYodHlwZW9mIGU9PVwiYmlnaW50XCIpe2lmKCEoZT49LSgybioqNjNuKSYmZTw9Mm4qKjYzbi0xbikpdGhyb3cgbmV3IFVlKFwicG9zaXRpb25cIixgPj0gJHstKDJuKio2M24pfSAmJiA8PSAkezJuKio2M24tMW59YCxlKX1lbHNlIHRocm93IG5ldyBCKFwicG9zaXRpb25cIixbXCJpbnRlZ2VyXCIsXCJiaWdpbnRcIl0sZSl9KSxrMz1TeW1ib2woXCJyZWFscGF0aENhY2hlS2V5XCIpfSk7ZnVuY3Rpb24gbHUoZSx0LHIpe3R5cGVvZiB0PT1cImZ1bmN0aW9uXCImJihyPXQsdD1BZS5GX09LKSxlPXNlKGUpLnRvU3RyaW5nKCksdD1kbih0LFwiYWNjZXNzXCIpO2xldCBuPXZyKHIpO0Rlbm8ubHN0YXQoZSkudGhlbihvPT57bGV0IGk9K3R8fDAscz0rby5tb2RlfHwwO2lmKERlbm8uYnVpbGQub3MhPT1cIndpbmRvd3NcIiYmby51aWQ9PT1lZigpJiYocz4+PTYpLChpJnMpPT09aSluKG51bGwpO2Vsc2V7bGV0IGE9bmV3IEVycm9yKGBFQUNDRVM6IHBlcm1pc3Npb24gZGVuaWVkLCBhY2Nlc3MgJyR7ZX0nYCk7YS5wYXRoPWUsYS5zeXNjYWxsPVwiYWNjZXNzXCIsYS5lcnJubz1XZS5lcnJuby5FQUNDRVMsYS5jb2RlPVwiRUFDQ0VTXCIsbihhKX19LG89PntpZihvIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQpe2xldCBpPW5ldyBFcnJvcihgRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCBhY2Nlc3MgJyR7ZX0nYCk7aS5wYXRoPWUsaS5zeXNjYWxsPVwiYWNjZXNzXCIsaS5lcnJubz1XZS5lcnJuby5FTk9FTlQsaS5jb2RlPVwiRU5PRU5UXCIsbihpKX1lbHNlIG4obyl9KX1mdW5jdGlvbiB0TyhlLHQpe2U9c2UoZSkudG9TdHJpbmcoKSx0PWRuKHQsXCJhY2Nlc3NcIik7dHJ5e2xldCByPURlbm8ubHN0YXRTeW5jKGUudG9TdHJpbmcoKSksbj0rdHx8MCxvPStyLm1vZGV8fDA7aWYoKG4mbykhPT1uKXtsZXQgaT1uZXcgRXJyb3IoYEVBQ0NFUzogcGVybWlzc2lvbiBkZW5pZWQsIGFjY2VzcyAnJHtlfSdgKTt0aHJvdyBpLnBhdGg9ZSxpLnN5c2NhbGw9XCJhY2Nlc3NcIixpLmVycm5vPVdlLmVycm5vLkVBQ0NFUyxpLmNvZGU9XCJFQUNDRVNcIixpfX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQpe2xldCBuPW5ldyBFcnJvcihgRU5PRU5UOiBubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LCBhY2Nlc3MgJyR7ZX0nYCk7dGhyb3cgbi5wYXRoPWUsbi5zeXNjYWxsPVwiYWNjZXNzXCIsbi5lcnJubz1XZS5lcnJuby5FTk9FTlQsbi5jb2RlPVwiRU5PRU5UXCIsbn1lbHNlIHRocm93IHJ9fXZhciBlTyxyTz1BKCgpPT57Z3QoKTtJdCgpO0Z0KCk7Q2UoKTt6KCk7ZU89dyhsdSl9KTtmdW5jdGlvbiBnbyhlLHQscixuKXtsZXQgbz1yIGluc3RhbmNlb2YgRnVuY3Rpb24/cjpuLGk9ciBpbnN0YW5jZW9mIEZ1bmN0aW9uP3ZvaWQgMDpyO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24uXCIpO2U9ZSBpbnN0YW5jZW9mIFVSTD8kKGUpOmU7bGV0IHM9QnIoaSk/aS5mbGFnOnZvaWQgMCxhPUJyKGkpP2kubW9kZTp2b2lkIDAsYz1hYShGcihpKSl8fFwidXRmOFwiLHU9eW4oc3x8XCJ3XCIpO0FycmF5QnVmZmVyLmlzVmlldyh0KXx8KGhuKHQsXCJkYXRhXCIpLHQ9eC5mcm9tKFN0cmluZyh0KSxjKSk7bGV0IFI9dHlwZW9mIGU9PVwibnVtYmVyXCIsZixwPW51bGw7KGFzeW5jKCk9Pnt0cnl7Zj1SP25ldyBEZW5vLkZzRmlsZShlKTphd2FpdCBEZW5vLm9wZW4oZSx1KSwhUiYmYSYmIXEmJmF3YWl0IERlbm8uY2htb2QoZSxhKTtsZXQgbD1CcihpKT9pLnNpZ25hbDp2b2lkIDA7YXdhaXQgb08oZix0LHtzaWduYWw6bH0pfWNhdGNoKGwpe3A9bCBpbnN0YW5jZW9mIEVycm9yP01lKGwse3N5c2NhbGw6XCJ3cml0ZVwifSk6bmV3IEVycm9yKFwiW25vbi1lcnJvciB0aHJvd25dXCIpfWZpbmFsbHl7IVImJmYmJmYuY2xvc2UoKSxvKHApfX0pKCl9ZnVuY3Rpb24gZ3MoZSx0LHIpe2U9ZSBpbnN0YW5jZW9mIFVSTD8kKGUpOmU7bGV0IG49QnIocik/ci5mbGFnOnZvaWQgMCxvPUJyKHIpP3IubW9kZTp2b2lkIDAsaT1hYShGcihyKSl8fFwidXRmOFwiLHM9eW4obnx8XCJ3XCIpO0FycmF5QnVmZmVyLmlzVmlldyh0KXx8KGhuKHQsXCJkYXRhXCIpLHQ9eC5mcm9tKFN0cmluZyh0KSxpKSk7bGV0IGE9dHlwZW9mIGU9PVwibnVtYmVyXCIsYyx1PW51bGw7dHJ5e2M9YT9uZXcgRGVuby5Gc0ZpbGUoZSk6RGVuby5vcGVuU3luYyhlLHMpLCFhJiZvJiYhcSYmRGVuby5jaG1vZFN5bmMoZSxvKSxvcChjLHQpfWNhdGNoKFIpe3U9UiBpbnN0YW5jZW9mIEVycm9yP01lKFIse3N5c2NhbGw6XCJ3cml0ZVwifSk6bmV3IEVycm9yKFwiW25vbi1lcnJvciB0aHJvd25dXCIpfWZpbmFsbHl7IWEmJmMmJmMuY2xvc2UoKX1pZih1KXRocm93IHV9YXN5bmMgZnVuY3Rpb24gb08oZSx0LHI9e30pe2xldHtvZmZzZXQ6bj0wLGxlbmd0aDpvPXQuYnl0ZUxlbmd0aCxzaWduYWw6aX09cjtWSShpKTtsZXQgcz1hd2FpdCBlLndyaXRlKHQuc3ViYXJyYXkobixuK28pKTtzIT09byYmYXdhaXQgb08oZSx0LHtvZmZzZXQ6bitzLGxlbmd0aDpvLXMsc2lnbmFsOml9KX1mdW5jdGlvbiBWSShlKXtpZihlPy5hYm9ydGVkKXRocm93IG5ldyBoZX12YXIgbk8sdXU9QSgoKT0+e0RlKCk7dWUoKTtHbygpO0l0KCk7UGUoKTtlZSgpO0NlKCk7eigpO25PPXcoZ28pfSk7ZnVuY3Rpb24gZnUoZSx0LHIsbil7bj1kcihufHxyKSxyPW91KHIse2VuY29kaW5nOlwidXRmOFwiLG1vZGU6NDM4LGZsYWc6XCJhXCJ9KSxyPW51KHIpLCghci5mbGFnfHx4bihlKSkmJihyLmZsYWc9XCJhXCIpLGdvKGUsdCxyLG4pfWZ1bmN0aW9uIHNPKGUsdCxyKXtyPW91KHIse2VuY29kaW5nOlwidXRmOFwiLG1vZGU6NDM4LGZsYWc6XCJhXCJ9KSxyPW51KHIpLCghci5mbGFnfHx4bihlKSkmJihyLmZsYWc9XCJhXCIpLGdzKGUsdCxyKX12YXIgaU8sYU89QSgoKT0+e0l0KCk7Q2UoKTt1dSgpO3ooKTtpTz13KGZ1KX0pO2Z1bmN0aW9uIHB1KGUsdCxyKXtlPXNlKGUpLnRvU3RyaW5nKCksdD10YSh0LFwibW9kZVwiKSxEZW5vLmNobW9kKG5uKGUpLHQpLnRoZW4oKCk9PnIobnVsbCkscil9ZnVuY3Rpb24gbE8oZSx0KXtlPXNlKGUpLnRvU3RyaW5nKCksdD10YSh0LFwibW9kZVwiKSxEZW5vLmNobW9kU3luYyhubihlKSx0KX12YXIgY08sdU89QSgoKT0+e0NlKCk7emkoKTtkZSgpO3ooKTtjTz13KHB1KX0pO2Z1bmN0aW9uIFJ1KGUsdCxyLG4pe249dnIobiksZT1zZShlKS50b1N0cmluZygpLEF0KHQsXCJ1aWRcIiwtMSxtbyksQXQocixcImdpZFwiLC0xLG1vKSxEZW5vLmNob3duKG5uKGUpLHQscikudGhlbigoKT0+bihudWxsKSxuKX1mdW5jdGlvbiBwTyhlLHQscil7ZT1zZShlKS50b1N0cmluZygpLEF0KHQsXCJ1aWRcIiwtMSxtbyksQXQocixcImdpZFwiLC0xLG1vKSxEZW5vLmNob3duU3luYyhubihlKSx0LHIpfXZhciBmTyxSTz1BKCgpPT57SXQoKTtDZSgpO3ppKCk7ZGUoKTt6KCk7Zk89dyhSdSl9KTtmdW5jdGlvbiBBcyhlLHQpe2U9UXQoZSksc2V0VGltZW91dCgoKT0+e2xldCByPW51bGw7dHJ5e0Rlbm8uY2xvc2UoZSl9Y2F0Y2gobil7cj1uIGluc3RhbmNlb2YgRXJyb3I/bjpuZXcgRXJyb3IoXCJbbm9uLWVycm9yIHRocm93bl1cIil9dChyKX0sMCl9ZnVuY3Rpb24gRU8oZSl7ZT1RdChlKSxEZW5vLmNsb3NlKGUpfXZhciBFdT1BKCgpPT57Q2UoKX0pO2Z1bmN0aW9uIF9PKGUsdCl7cmV0dXJuIG5ldyBBbyhlLHQpfXZhciBBbyxkTz1BKCgpPT57eWUoKTtEZSgpO3VlKCk7dXMoKTtBbz1jbGFzcyBleHRlbmRzIGtle2NvbnN0cnVjdG9yKHIsbil7cj1yIGluc3RhbmNlb2YgVVJMPyQocik6cixuJiYobi5mZHx8bi5zdGFydHx8bi5lbmR8fG4uZnMpJiZVKGBmcy5SZWFkU3RyZWFtLnByb3RvdHlwZS5jb25zdHJ1Y3RvciB3aXRoIHVuc3VwcG9ydGVkIG9wdGlvbnMgKCR7SlNPTi5zdHJpbmdpZnkobil9KWApO2xldCBpPURlbm8ub3BlblN5bmMocix7cmVhZDohMH0pLHM9bmV3IFVpbnQ4QXJyYXkoMTYqMTAyNCk7c3VwZXIoe2F1dG9EZXN0cm95OiEwLGVtaXRDbG9zZTohMCxvYmplY3RNb2RlOiExLHJlYWQ6YXN5bmMgZnVuY3Rpb24oYSl7dHJ5e2xldCBjPWF3YWl0IGkucmVhZChzKTt0aGlzLnB1c2goYz94LmZyb20ocy5zbGljZSgwLGMpKTpudWxsKX1jYXRjaChjKXt0aGlzLmRlc3Ryb3koYyl9fSxkZXN0cm95OihhLGMpPT57dHJ5e2kuY2xvc2UoKX1jYXRjaHt9YyhhKX19KTt0aGlzLnBhdGg9cn19fSk7dmFyIHhzPXt9O2NlKHhzLHtDT1BZRklMRV9FWENMOigpPT50eSxDT1BZRklMRV9GSUNMT05FOigpPT5yeSxDT1BZRklMRV9GSUNMT05FX0ZPUkNFOigpPT5ueSxGX09LOigpPT5ISSxSX09LOigpPT4kSSxTX0lSR1JQOigpPT5xSSxTX0lST1RIOigpPT5aSSxTX0lSVVNSOigpPT5qSSxTX0lXR1JQOigpPT5RSSxTX0lXT1RIOigpPT5KSSxTX0lXVVNSOigpPT5LSSxTX0lYR1JQOigpPT56SSxTX0lYT1RIOigpPT5leSxTX0lYVVNSOigpPT5YSSxVVl9GU19DT1BZRklMRV9FWENMOigpPT5veSxVVl9GU19DT1BZRklMRV9GSUNMT05FOigpPT5peSxVVl9GU19DT1BZRklMRV9GSUNMT05FX0ZPUkNFOigpPT5zeSxXX09LOigpPT5HSSxYX09LOigpPT5ZSX0pO3ZhciBISSwkSSxHSSxZSSxqSSxLSSxYSSxxSSxRSSx6SSxaSSxKSSxleSx0eSxyeSxueSxveSxpeSxzeSxoTz1BKCgpPT57RnQoKTsoe0ZfT0s6SEksUl9PSzokSSxXX09LOkdJLFhfT0s6WUksU19JUlVTUjpqSSxTX0lXVVNSOktJLFNfSVhVU1I6WEksU19JUkdSUDpxSSxTX0lXR1JQOlFJLFNfSVhHUlA6ekksU19JUk9USDpaSSxTX0lXT1RIOkpJLFNfSVhPVEg6ZXksQ09QWUZJTEVfRVhDTDp0eSxDT1BZRklMRV9GSUNMT05FOnJ5LENPUFlGSUxFX0ZJQ0xPTkVfRk9SQ0U6bnksVVZfRlNfQ09QWUZJTEVfRVhDTDpveSxVVl9GU19DT1BZRklMRV9GSUNMT05FOml5LFVWX0ZTX0NPUFlGSUxFX0ZJQ0xPTkVfRk9SQ0U6c3l9PUFlKX0pO2Z1bmN0aW9uIF91KGUsdCxyLG4pe3R5cGVvZiByPT1cImZ1bmN0aW9uXCImJihuPXIscj0wKTtsZXQgbz1zZShlLFwic3JjXCIpLnRvU3RyaW5nKCksaT1zZSh0LFwiZGVzdFwiKS50b1N0cmluZygpLHM9ZG4ocixcImNvcHlGaWxlXCIpLGE9dnIobik7KHMmQWUuQ09QWUZJTEVfRVhDTCk9PT1BZS5DT1BZRklMRV9FWENMP0Rlbm8ubHN0YXQoaSkudGhlbigoKT0+e2xldCBjPW5ldyBFcnJvcihgRUVYSVNUOiBmaWxlIGFscmVhZHkgZXhpc3RzLCBjb3B5ZmlsZSAnJHtvfScgLT4gJyR7aX0nYCk7Yy5zeXNjYWxsPVwiY29weWZpbGVcIixjLmVycm5vPVdlLmVycm5vLkVFWElTVCxjLmNvZGU9XCJFRVhJU1RcIixhKGMpfSxjPT57YyBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kJiZEZW5vLmNvcHlGaWxlKG8saSkudGhlbigoKT0+YShudWxsKSxhKSxhKGMpfSk6RGVuby5jb3B5RmlsZShvLGkpLnRoZW4oKCk9PmEobnVsbCksYSl9ZnVuY3Rpb24gbU8oZSx0LHIpe2xldCBuPXNlKGUsXCJzcmNcIikudG9TdHJpbmcoKSxvPXNlKHQsXCJkZXN0XCIpLnRvU3RyaW5nKCk7aWYoKGRuKHIsXCJjb3B5RmlsZVwiKSZBZS5DT1BZRklMRV9FWENMKT09PUFlLkNPUFlGSUxFX0VYQ0wpdHJ5e3Rocm93IERlbm8ubHN0YXRTeW5jKG8pLG5ldyBFcnJvcihgQSBmaWxlIGV4aXN0cyBhdCB0aGUgZGVzdGluYXRpb246ICR7b31gKX1jYXRjaChzKXt0aHJvdyBzIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQmJkRlbm8uY29weUZpbGVTeW5jKG4sbyksc31lbHNlIERlbm8uY29weUZpbGVTeW5jKG4sbyl9dmFyIE9PLFNPPUEoKCk9PntJdCgpO0NlKCk7RnQoKTt6KCk7T089dyhfdSl9KTt2YXIgenQsTnM9QSgoKT0+e3llKCk7enQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5lbnRyeT10fWlzQmxvY2tEZXZpY2UoKXtyZXR1cm4gVShcIkRlbm8gZG9lcyBub3QgeWV0IHN1cHBvcnQgaWRlbnRpZmljYXRpb24gb2YgYmxvY2sgZGV2aWNlc1wiKSwhMX1pc0NoYXJhY3RlckRldmljZSgpe3JldHVybiBVKFwiRGVubyBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBpZGVudGlmaWNhdGlvbiBvZiBjaGFyYWN0ZXIgZGV2aWNlc1wiKSwhMX1pc0RpcmVjdG9yeSgpe3JldHVybiB0aGlzLmVudHJ5LmlzRGlyZWN0b3J5fWlzRklGTygpe3JldHVybiBVKFwiRGVubyBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBpZGVudGlmaWNhdGlvbiBvZiBGSUZPIG5hbWVkIHBpcGVzXCIpLCExfWlzRmlsZSgpe3JldHVybiB0aGlzLmVudHJ5LmlzRmlsZX1pc1NvY2tldCgpe3JldHVybiBVKFwiRGVubyBkb2VzIG5vdCB5ZXQgc3VwcG9ydCBpZGVudGlmaWNhdGlvbiBvZiBzb2NrZXRzXCIpLCExfWlzU3ltYm9saWNMaW5rKCl7cmV0dXJuIHRoaXMuZW50cnkuaXNTeW1saW5rfWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuZW50cnkubmFtZX19fSk7dmFyIHhvLGdPPUEoKCk9PntOcygpO2VyKCk7eG89Y2xhc3N7I3Q7I3I7I247Y29uc3RydWN0b3IodCl7dGhpcy4jdD10fWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuI3QgaW5zdGFuY2VvZiBVaW50OEFycmF5P25ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0aGlzLiN0KTp0aGlzLiN0fXJlYWQodCl7cmV0dXJuIG5ldyBQcm9taXNlKChyLG4pPT57dGhpcy4jbnx8KHRoaXMuI249RGVuby5yZWFkRGlyKHRoaXMucGF0aClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkpLEllKHRoaXMuI24pLHRoaXMuI24ubmV4dCgpLnRoZW4oKHt2YWx1ZTpvfSk9PntyKG98fG51bGwpLHQmJnQobnVsbCxvfHxudWxsKX0sbz0+e3QmJnQobyksbihvKX0pfSl9cmVhZFN5bmMoKXt0aGlzLiNyfHwodGhpcy4jcj1EZW5vLnJlYWREaXJTeW5jKHRoaXMucGF0aClbU3ltYm9sLml0ZXJhdG9yXSgpKTtsZXQgdD10aGlzLiNyLm5leHQoKS52YWx1ZTtyZXR1cm4gdD9uZXcgenQodCk6bnVsbH1jbG9zZSh0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e3QmJnQobnVsbCkscigpfSl9Y2xvc2VTeW5jKCl7fWFzeW5jKltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXt0cnl7Zm9yKDs7KXtsZXQgdD1hd2FpdCB0aGlzLnJlYWQoKTtpZih0PT09bnVsbClicmVhazt5aWVsZCB0fX1maW5hbGx5e2F3YWl0IHRoaXMuY2xvc2UoKX19fX0pO2Z1bmN0aW9uIElzKGUsdCl7ZT1lIGluc3RhbmNlb2YgVVJMPyQoZSk6ZSxEZW5vLmxzdGF0KGUpLnRoZW4oKCk9PnQoITApLCgpPT50KCExKSl9ZnVuY3Rpb24geXMoZSl7ZT1lIGluc3RhbmNlb2YgVVJMPyQoZSk6ZTt0cnl7cmV0dXJuIERlbm8ubHN0YXRTeW5jKGUpLCEwfWNhdGNoe3JldHVybiExfX12YXIgYXksZHU9QSgoKT0+e0RlKCk7YXk9U3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLnByb21pc2lmeS5jdXN0b21cIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KElzLGF5LHt2YWx1ZTplPT5uZXcgUHJvbWlzZSh0PT57SXMoZSxyPT50KHIpKX0pfSl9KTtmdW5jdGlvbiBBTyhlLHQpe0Rlbm8uZmRhdGFzeW5jKGUpLnRoZW4oKCk9PnQobnVsbCksdCl9ZnVuY3Rpb24geE8oZSl7RGVuby5mZGF0YXN5bmNTeW5jKGUpfXZhciBOTz1BKCgpPT57fSk7ZnVuY3Rpb24gSU8oZSx0LHIpe2xldCBuPXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/dDpyLG89dHlwZW9mIHQ9PVwib2JqZWN0XCI/dDp7YmlnaW50OiExfTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJObyBjYWxsYmFjayBmdW5jdGlvbiBzdXBwbGllZFwiKTtEZW5vLmZzdGF0KGUpLnRoZW4oaT0+bihudWxsLGlyKGksby5iaWdpbnQpKSxpPT5uKGkpKX1mdW5jdGlvbiB5TyhlLHQpe2xldCByPURlbm8uZnN0YXRTeW5jKGUpO3JldHVybiBpcihyLHQ/LmJpZ2ludHx8ITEpfXZhciBUTz1BKCgpPT57ZW4oKX0pO2Z1bmN0aW9uIERPKGUsdCl7RGVuby5mc3luYyhlKS50aGVuKCgpPT50KG51bGwpLHQpfWZ1bmN0aW9uIGJPKGUpe0Rlbm8uZnN5bmNTeW5jKGUpfXZhciBDTz1BKCgpPT57fSk7ZnVuY3Rpb24gTE8oZSx0LHIpe2xldCBuPXR5cGVvZiB0PT1cIm51bWJlclwiP3Q6dm9pZCAwLG89dHlwZW9mIHQ9PVwiZnVuY3Rpb25cIj90OnI7aWYoIW8pdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgZnVuY3Rpb24gc3VwcGxpZWRcIik7RGVuby5mdHJ1bmNhdGUoZSxuKS50aGVuKCgpPT5vKG51bGwpLG8pfWZ1bmN0aW9uIHdPKGUsdCl7RGVuby5mdHJ1bmNhdGVTeW5jKGUsdCl9dmFyIFBPPUEoKCk9Pnt9KTtmdW5jdGlvbiBUcyhlLHQpe2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiJiYoZT1OdW1iZXIoZSkpLHR5cGVvZiBlPT1cIm51bWJlclwiJiYoTnVtYmVyLmlzTmFOKGUpfHwhTnVtYmVyLmlzRmluaXRlKGUpKSl0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoYGludmFsaWQgJHt0fSwgbXVzdCBub3QgYmUgaW5maW5pdHkgb3IgTmFOYCk7cmV0dXJuIGV9ZnVuY3Rpb24gVU8oZSx0LHIsbil7aWYoIW4pdGhyb3cgbmV3IERlbm8uZXJyb3JzLkludmFsaWREYXRhKFwiTm8gY2FsbGJhY2sgZnVuY3Rpb24gc3VwcGxpZWRcIik7dD1Ucyh0LFwiYXRpbWVcIikscj1UcyhyLFwibXRpbWVcIiksWnUoZSx0LHIpLnRoZW4oKCk9Pm4obnVsbCksbil9ZnVuY3Rpb24gTU8oZSx0LHIpe3Q9VHModCxcImF0aW1lXCIpLHI9VHMocixcIm10aW1lXCIpLEp1KGUsdCxyKX12YXIga089QSgoKT0+e2d0KCl9KTtmdW5jdGlvbiBodShlLHQscil7ZT1lIGluc3RhbmNlb2YgVVJMPyQoZSk6ZSx0PXQgaW5zdGFuY2VvZiBVUkw/JCh0KTp0LERlbm8ubGluayhlLHQpLnRoZW4oKCk9PnIobnVsbCkscil9ZnVuY3Rpb24gRk8oZSx0KXtlPWUgaW5zdGFuY2VvZiBVUkw/JChlKTplLHQ9dCBpbnN0YW5jZW9mIFVSTD8kKHQpOnQsRGVuby5saW5rU3luYyhlLHQpfXZhciBCTyx2Tz1BKCgpPT57RGUoKTt6KCk7Qk89dyhodSl9KTtmdW5jdGlvbiBObyhlLHQscil7ZT1lIGluc3RhbmNlb2YgVVJMPyQoZSk6ZTtsZXQgbj01MTEsbz0hMTtpZih0eXBlb2YgdD09XCJmdW5jdGlvblwiP3I9dDp0eXBlb2YgdD09XCJudW1iZXJcIj9uPXQ6dHlwZW9mIHQ9PVwiYm9vbGVhblwiP289dDp0JiYodC5yZWN1cnNpdmUhPT12b2lkIDAmJihvPXQucmVjdXJzaXZlKSx0Lm1vZGUhPT12b2lkIDAmJihuPXQubW9kZSkpLHR5cGVvZiBvIT1cImJvb2xlYW5cIil0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJpbnZhbGlkIHJlY3Vyc2l2ZSBvcHRpb24gLCBtdXN0IGJlIGEgYm9vbGVhblwiKTtEZW5vLm1rZGlyKGUse3JlY3Vyc2l2ZTpvLG1vZGU6bn0pLnRoZW4oKCk9Pnt0eXBlb2Ygcj09XCJmdW5jdGlvblwiJiZyKG51bGwpfSxpPT57dHlwZW9mIHI9PVwiZnVuY3Rpb25cIiYmcihpKX0pfWZ1bmN0aW9uIERzKGUsdCl7ZT1lIGluc3RhbmNlb2YgVVJMPyQoZSk6ZTtsZXQgcj01MTEsbj0hMTtpZih0eXBlb2YgdD09XCJudW1iZXJcIj9yPXQ6dHlwZW9mIHQ9PVwiYm9vbGVhblwiP249dDp0JiYodC5yZWN1cnNpdmUhPT12b2lkIDAmJihuPXQucmVjdXJzaXZlKSx0Lm1vZGUhPT12b2lkIDAmJihyPXQubW9kZSkpLHR5cGVvZiBuIT1cImJvb2xlYW5cIil0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJpbnZhbGlkIHJlY3Vyc2l2ZSBvcHRpb24gLCBtdXN0IGJlIGEgYm9vbGVhblwiKTtEZW5vLm1rZGlyU3luYyhlLHtyZWN1cnNpdmU6bixtb2RlOnJ9KX12YXIgV08sT3U9QSgoKT0+e0RlKCk7eigpO1dPPXcoTm8pfSk7ZnVuY3Rpb24gbXUoZSx0LHIpe2xldCBuPXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/dDpyO2lmKCFuKXRocm93IG5ldyBWbihuKTtsZXQgbz1HTyh0KSxpPWpPKGUpO05vKGkse3JlY3Vyc2l2ZTohMSxtb2RlOjQ0OH0scz0+e3M/bihzKTpuKG51bGwsWU8oaSxvKSl9KX1mdW5jdGlvbiAkTyhlLHQpe2xldCByPUdPKHQpLG49ak8oZSk7cmV0dXJuIERzKG4se3JlY3Vyc2l2ZTohMSxtb2RlOjQ0OH0pLFlPKG4scil9ZnVuY3Rpb24gR08oZSl7bGV0IHQ7aWYodHlwZW9mIGU9PVwiZnVuY3Rpb25cIj90PXZvaWQgMDplIGluc3RhbmNlb2YgT2JqZWN0P3Q9ZT8uZW5jb2Rpbmc6dD1lLHQpdHJ5e25ldyBUZXh0RGVjb2Rlcih0KX1jYXRjaHt0aHJvdyBuZXcgQWkodCl9cmV0dXJuIHR9ZnVuY3Rpb24gWU8oZSx0KXtpZih0KXtsZXQgcj1uZXcgVGV4dERlY29kZXIodCksbj1uZXcgVGV4dEVuY29kZXI7cmV0dXJuIHIuZGVjb2RlKG4uZW5jb2RlKGUpKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIGN5KCl7cmV0dXJuWy4uLkFycmF5KDYpXS5tYXAoKCk9PlZPW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpWTy5sZW5ndGgpXSkuam9pbihcIlwiKX1mdW5jdGlvbiBqTyhlKXtsZXQgdDtkbyB0PWUrY3koKTt3aGlsZSh5cyh0KSk7cmV0dXJuIHR9dmFyIEhPLFZPLEtPPUEoKCk9PntkdSgpO091KCk7ZWUoKTt6KCk7SE89dyhtdSk7Vk89XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlwifSk7ZnVuY3Rpb24gU3UoZSl7dHJ5e3JldHVybiBEZW5vLmxzdGF0U3luYyhlKSwhMH1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgRGVuby5lcnJvcnMuTm90Rm91bmQpcmV0dXJuITE7dGhyb3cgdH19dmFyIFhPPUEoKCk9Pnt9KTtmdW5jdGlvbiBxTyhlLHQpe2lmKCEoIWUmJiF0KSlyZXR1cm4hZSYmdD97bW9kZTp0fTp7Li4ueW4oZSksbW9kZTp0fX1mdW5jdGlvbiBPbihlLHQscixuKXtsZXQgbz10eXBlb2YgdD09XCJzdHJpbmdcIj90OnZvaWQgMCxpPXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/dDp0eXBlb2Ygcj09XCJmdW5jdGlvblwiP3I6bixzPXR5cGVvZiByPT1cIm51bWJlclwiP3I6dm9pZCAwO2lmKGU9ZSBpbnN0YW5jZW9mIFVSTD8kKGUpOmUsIWkpdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgZnVuY3Rpb24gc3VwcGxpZWRcIik7aWYoW1wiYXhcIixcImF4K1wiLFwid3hcIixcInd4K1wiXS5pbmNsdWRlcyhvfHxcIlwiKSYmU3UoZSkpe2xldCBhPW5ldyBFcnJvcihgRUVYSVNUOiBmaWxlIGFscmVhZHkgZXhpc3RzLCBvcGVuICcke2V9J2ApO2koYSl9ZWxzZXtpZihvPT09XCJhc1wifHxvPT09XCJhcytcIil7bGV0IGE9bnVsbCxjO3RyeXtjPWd1KGUsbyxzKX1jYXRjaCh1KXthPXUgaW5zdGFuY2VvZiBFcnJvcj91Om5ldyBFcnJvcihcIltub24tZXJyb3IgdGhyb3duXVwiKX1hP2koYSk6aShudWxsLGMpO3JldHVybn1EZW5vLm9wZW4oZSxxTyhvLHMpKS50aGVuKGE9PmkobnVsbCxhLnJpZCksYT0+aShhKSl9fWZ1bmN0aW9uIGd1KGUsdCxyKXtsZXQgbj10eXBlb2YgdD09XCJzdHJpbmdcIj90OnZvaWQgMCxvPXR5cGVvZiB0PT1cIm51bWJlclwiP3Q6cjtpZihlPWUgaW5zdGFuY2VvZiBVUkw/JChlKTplLFtcImF4XCIsXCJheCtcIixcInd4XCIsXCJ3eCtcIl0uaW5jbHVkZXMobnx8XCJcIikmJlN1KGUpKXRocm93IG5ldyBFcnJvcihgRUVYSVNUOiBmaWxlIGFscmVhZHkgZXhpc3RzLCBvcGVuICcke2V9J2ApO3JldHVybiBEZW5vLm9wZW5TeW5jKGUscU8obixvKSkucmlkfXZhciBRTyxBdT1BKCgpPT57WE8oKTtEZSgpO0l0KCk7eigpO1FPPXcoT24pfSk7ZnVuY3Rpb24gek8oZSx0LHIsbixvLGkpe2xldCBzLGE9MCxjO2lmKG49PW51bGwmJihuPTApLHR5cGVvZiByPT1cImZ1bmN0aW9uXCI/cz1yOnR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/cz10OihhPXIscz1pKSwhcyl0aHJvdyBuZXcgRXJyb3IoXCJObyBjYWxsYmFjayBmdW5jdGlvbiBzdXBwbGllZFwiKTtpZih0IGluc3RhbmNlb2YgeHx8dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpYz10O2Vsc2UgaWYodHlwZW9mIHQ9PVwiZnVuY3Rpb25cIilhPTAsYz14LmFsbG9jKDE2Mzg0KSxuPWMuYnl0ZUxlbmd0aCxvPW51bGw7ZWxzZXtsZXQgZj10O2E9Zi5vZmZzZXQ/PzAsYz1mLmJ1ZmZlcj8/eC5hbGxvYygxNjM4NCksbj1mLmxlbmd0aD8/Yy5ieXRlTGVuZ3RoLG89Zi5wb3NpdGlvbj8/bnVsbH1pZih4dChhPj0wLFwib2Zmc2V0IHNob3VsZCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIDBcIikseHQoYStuPD1jLmJ5dGVMZW5ndGgsYGJ1ZmZlciBkb2Vzbid0IGhhdmUgZW5vdWdoIGRhdGE6IGJ5dGVMZW5ndGggPSAke2MuYnl0ZUxlbmd0aH0sIG9mZnNldCArIGxlbmd0aCA9ICR7YStufWApLGMuYnl0ZUxlbmd0aD09MCl0aHJvdyBuZXcgYWUoXCJidWZmZXJcIixjLFwiaXMgZW1wdHkgYW5kIGNhbm5vdCBiZSB3cml0dGVuXCIpO2xldCB1PW51bGwsUj1udWxsO28mJkRlbm8uc2Vla1N5bmMoZSxvLERlbm8uU2Vla01vZGUuQ3VycmVudCk7dHJ5e1I9RGVuby5yZWFkU3luYyhlLGMpfWNhdGNoKGYpe3U9ZiBpbnN0YW5jZW9mIEVycm9yP2Y6bmV3IEVycm9yKFwiW25vbi1lcnJvciB0aHJvd25dXCIpfWlmKHUpaSh1KTtlbHNle2xldCBmPXguZnJvbShjLmJ1ZmZlcixhLG4pO3MobnVsbCxSLGYpfX1mdW5jdGlvbiBaTyhlLHQscixuLG8pe2xldCBpPTA7aWYobj09bnVsbCYmKG49MCksdC5ieXRlTGVuZ3RoPT0wKXRocm93IG5ldyBhZShcImJ1ZmZlclwiLHQsXCJpcyBlbXB0eSBhbmQgY2Fubm90IGJlIHdyaXR0ZW5cIik7aWYodHlwZW9mIHI9PVwibnVtYmVyXCIpaT1yO2Vsc2V7bGV0IGE9cjtpPWEub2Zmc2V0Pz8wLG49YS5sZW5ndGg/P3QuYnl0ZUxlbmd0aCxvPWEucG9zaXRpb24/P251bGx9cmV0dXJuIHh0KGk+PTAsXCJvZmZzZXQgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMFwiKSx4dChpK248PXQuYnl0ZUxlbmd0aCxgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggZGF0YTogYnl0ZUxlbmd0aCA9ICR7dC5ieXRlTGVuZ3RofSwgb2Zmc2V0ICsgbGVuZ3RoID0gJHtpK259YCksbyYmRGVuby5zZWVrU3luYyhlLG8sRGVuby5TZWVrTW9kZS5DdXJyZW50KSxEZW5vLnJlYWRTeW5jKGUsdCk/PzB9dmFyIEpPPUEoKCk9Pnt1ZSgpO0J0KCk7ZWUoKX0pO2Z1bmN0aW9uIHl1KGUsdCxyKXtsZXQgbj1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO2Z1bmN0aW9uIG8oKXtuLm5leHQoKS50aGVuKGk9PntpZihpLmRvbmUpe3QoaS52YWx1ZSwhMCk7cmV0dXJufXQoaS52YWx1ZSksbygpfSxyKX1vKCl9ZnVuY3Rpb24gVHUoZSx0LHIpe2xldCBuPXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/dDp0eXBlb2Ygcj09XCJmdW5jdGlvblwiP3I6dm9pZCAwLG89dHlwZW9mIHQ9PVwib2JqZWN0XCI/dDp0eXBlb2Ygcj09XCJvYmplY3RcIj9yOnZvaWQgMCxpPXNlKGUpLnRvU3RyaW5nKCkscyxhPXNldFRpbWVvdXQoKCk9PntzPURlbm8ud2F0Y2hGcyhpLHtyZWN1cnNpdmU6bz8ucmVjdXJzaXZlfHwhMX0pLHl1KHMsKHUsUik9PntSfHxjLmVtaXQoXCJjaGFuZ2VcIix1eSh1LmtpbmQpLFRjKHUucGF0aHNbMF0pKX0sdT0+e2MuZW1pdChcImVycm9yXCIsdSl9KX0sNSksYz1uZXcgSXUoKCk9PntjbGVhclRpbWVvdXQoYSk7dHJ5e3M/LmNsb3NlKCl9Y2F0Y2godSl7aWYodSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlKXJldHVybjt0aHJvdyB1fX0pO3JldHVybiBuJiZjLm9uKFwiY2hhbmdlXCIsbi5iaW5kKHtfaGFuZGxlOmN9KSksY31mdW5jdGlvbiBubShlLHQscil7bGV0IG49c2UoZSkudG9TdHJpbmcoKTtkdCh0eXBlb2YgdD09XCJmdW5jdGlvblwiP3Q6cixcImxpc3RlbmVyXCIpO2xldHtiaWdpbnQ6aT0hMSxwZXJzaXN0ZW50OnM9ITAsaW50ZXJ2YWw6YT01MDA3fT10eXBlb2YgdD09XCJvYmplY3RcIj90Ont9LGM9YnMuZ2V0KG4pO3JldHVybiBjPT09dm9pZCAwJiYoYz1uZXcgTnUoaSksY1tpbV0obixzLGEpLGJzLnNldChuLGMpKSxjLmFkZExpc3RlbmVyKFwiY2hhbmdlXCIsciksY31mdW5jdGlvbiBvbShlLHQpe2xldCByPXNlKGUpLnRvU3RyaW5nKCksbj1icy5nZXQocik7aWYoISFuKXtpZih0eXBlb2YgdD09XCJmdW5jdGlvblwiKXtsZXQgbz1uLmxpc3RlbmVyQ291bnQoXCJjaGFuZ2VcIik7bi5yZW1vdmVMaXN0ZW5lcihcImNoYW5nZVwiLHQpLG4ubGlzdGVuZXJDb3VudChcImNoYW5nZVwiKTxvJiZuW3h1XShcImNsZWFuXCIpfWVsc2Ugbi5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJjaGFuZ2VcIiksblt4dV0oXCJjbGVhbkFsbFwiKTtuLmxpc3RlbmVyQ291bnQoXCJjaGFuZ2VcIik9PT0wJiYobi5zdG9wKCksYnMuZGVsZXRlKHIpKX19ZnVuY3Rpb24gdXkoZSl7cmV0dXJuIGU9PT1cImNyZWF0ZVwifHxlPT09XCJyZW1vdmVcIj9cInJlbmFtZVwiOlwiY2hhbmdlXCJ9dmFyIGx5LGVtLHRtLHJtLGJzLGltLHh1LE51LEl1LER1PUEoKCk9PntEZSgpO3RuKCk7eWUoKTtsYygpO0NlKCk7ZGUoKTtlbigpO0NlKCk7bmEoKTtseT13KE5yKSxlbT1hc3luYyBlPT57dHJ5e3JldHVybiBhd2FpdCBseShlKX1jYXRjaHtyZXR1cm4gdG19fSx0bT1uZXcgUnIoMCwwLDAsMCwwLDAsMCwwLDAsMCxEYXRlLlVUQygxOTcwLDAsMSwwLDAsMCksRGF0ZS5VVEMoMTk3MCwwLDEsMCwwLDApLERhdGUuVVRDKDE5NzAsMCwxLDAsMCwwKSxEYXRlLlVUQygxOTcwLDAsMSwwLDAsMCkpO3JtPXcoVHUpO2JzPW5ldyBNYXAsaW09U3ltYm9sKFwia0ZTU3RhdFdhdGNoZXJTdGFydFwiKSx4dT1TeW1ib2woXCJrRlNTdGF0V2F0Y2hlckFkZE9yQ2xlYW5SZWZcIiksTnU9Y2xhc3MgZXh0ZW5kcyBNeyN0OyNyPTA7I249bmV3IEFib3J0Q29udHJvbGxlcjtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuI3Q9dH1baW1dKHQscixuKXtyJiZ0aGlzLiNyKyssKGFzeW5jKCk9PntsZXQgbz1hd2FpdCBlbSh0KTtvPT09dG0mJnRoaXMuZW1pdChcImNoYW5nZVwiLG8sbyk7dHJ5e2Zvcig7Oyl7YXdhaXQgTXIobix7c2lnbmFsOnRoaXMuI24uc2lnbmFsfSk7bGV0IGk9YXdhaXQgZW0odCk7aT8ubXRpbWUhPT1vPy5tdGltZSYmKHRoaXMuZW1pdChcImNoYW5nZVwiLGksbyksbz1pKX19Y2F0Y2goaSl7aWYoaSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmaS5uYW1lPT09XCJBYm9ydEVycm9yXCIpcmV0dXJuO3RoaXMuZW1pdChcImVycm9yXCIsaSl9fSkoKX1beHVdKHQpe3Q9PT1cImFkZFwiP3RoaXMuI3IrKzp0PT09XCJjbGVhblwiP3RoaXMuI3ItLTp0aGlzLiNyPTB9c3RvcCgpe3RoaXMuI24uc2lnbmFsLmFib3J0ZWR8fCh0aGlzLiNuLmFib3J0KCksdGhpcy5lbWl0KFwic3RvcFwiKSl9cmVmKCl7VShcIkZTV2F0Y2hlci5yZWYoKSBpcyBub3QgaW1wbGVtZW50ZWRcIil9dW5yZWYoKXtVKFwiRlNXYXRjaGVyLnVucmVmKCkgaXMgbm90IGltcGxlbWVudGVkXCIpfX0sSXU9Y2xhc3MgZXh0ZW5kcyBNeyN0OyNyPSExO2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy4jdD10fWNsb3NlKCl7dGhpcy4jcnx8KHRoaXMuI3I9ITAsdGhpcy5lbWl0KFwiY2xvc2VcIiksdGhpcy4jdCgpKX1yZWYoKXtVKFwiRlNXYXRjaGVyLnJlZigpIGlzIG5vdCBpbXBsZW1lbnRlZFwiKX11bnJlZigpe1UoXCJGU1dhdGNoZXIudW5yZWYoKSBpcyBub3QgaW1wbGVtZW50ZWRcIil9fX0pO2Z1bmN0aW9uIHNtKGUpe3JldHVybiBuZXcgenQoZSl9ZnVuY3Rpb24gYnUoZSx0LHIpe2xldCBuPXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/dDpyLG89dHlwZW9mIHQ9PVwib2JqZWN0XCI/dDpudWxsLGk9W107aWYoZT1zZShlKSwhbil0aHJvdyBuZXcgRXJyb3IoXCJObyBjYWxsYmFjayBmdW5jdGlvbiBzdXBwbGllZFwiKTtpZihvPy5lbmNvZGluZyl0cnl7bmV3IFRleHREZWNvZGVyKG8uZW5jb2RpbmcpfWNhdGNoe3Rocm93IG5ldyBFcnJvcihgVHlwZUVycm9yIFtFUlJfSU5WQUxJRF9PUFRfVkFMVUVfRU5DT0RJTkddOiBUaGUgdmFsdWUgXCIke28uZW5jb2Rpbmd9XCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwiZW5jb2RpbmdcImApfXRyeXt5dShEZW5vLnJlYWREaXIoZS50b1N0cmluZygpKSwocyxhKT0+e2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiKXtpZihhKXtuKG51bGwsaSk7cmV0dXJufW8/LndpdGhGaWxlVHlwZXM/aS5wdXNoKHNtKHMpKTppLnB1c2goYW0ocy5uYW1lKSl9fSxzPT57bihNZShzLHtzeXNjYWxsOlwicmVhZGRpclwifSkpfSl9Y2F0Y2gocyl7bihNZShzLHtzeXNjYWxsOlwicmVhZGRpclwifSkpfX1mdW5jdGlvbiBhbShlLHQpe2lmKHQpe2xldCByPW5ldyBUZXh0RGVjb2Rlcih0KSxuPW5ldyBUZXh0RW5jb2RlcjtyZXR1cm4gci5kZWNvZGUobi5lbmNvZGUoZSkpfWVsc2UgcmV0dXJuIGV9ZnVuY3Rpb24gbG0oZSx0KXtsZXQgcj1bXTtpZihlPXNlKGUpLHQ/LmVuY29kaW5nKXRyeXtuZXcgVGV4dERlY29kZXIodC5lbmNvZGluZyl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKGBUeXBlRXJyb3IgW0VSUl9JTlZBTElEX09QVF9WQUxVRV9FTkNPRElOR106IFRoZSB2YWx1ZSBcIiR7dC5lbmNvZGluZ31cIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJlbmNvZGluZ1wiYCl9dHJ5e2ZvcihsZXQgbiBvZiBEZW5vLnJlYWREaXJTeW5jKGUudG9TdHJpbmcoKSkpdD8ud2l0aEZpbGVUeXBlcz9yLnB1c2goc20obikpOnIucHVzaChhbShuLm5hbWUpKX1jYXRjaChuKXt0aHJvdyBNZShuLHtzeXNjYWxsOlwicmVhZGRpclwifSl9cmV0dXJuIHJ9dmFyIGNtLHVtPUEoKCk9PntEdSgpO05zKCk7ZWUoKTtDZSgpO3ooKTtjbT13KGJ1KX0pO2Z1bmN0aW9uIENzKGUsdCl7bGV0IHI9eC5mcm9tKGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpO3JldHVybiB0JiZ0IT09XCJiaW5hcnlcIj9yLnRvU3RyaW5nKHQpOnJ9ZnVuY3Rpb24gQ3UoZSx0LHIpe2U9ZSBpbnN0YW5jZW9mIFVSTD8kKGUpOmU7bGV0IG47dHlwZW9mIHQ9PVwiZnVuY3Rpb25cIj9uPXQ6bj1yO2xldCBvPUZyKHQpLGk9RGVuby5yZWFkRmlsZShlKTtuJiZpLnRoZW4ocz0+e2lmKG8mJm8hPT1cImJpbmFyeVwiKXtsZXQgYz1DcyhzLG8pO3JldHVybiBuKG51bGwsYyl9bGV0IGE9Q3MocyxvKTtuKG51bGwsYSl9LHM9Pm4mJm4ocykpfWZ1bmN0aW9uIHBtKGUsdCl7ZT1lIGluc3RhbmNlb2YgVVJMPyQoZSk6ZTtsZXQgcj1EZW5vLnJlYWRGaWxlU3luYyhlKSxuPUZyKHQpO3JldHVybiBDcyhyLG4pfXZhciBmbSxSbT1BKCgpPT57SXQoKTt1ZSgpO0RlKCk7eigpO2ZtPXcoQ3UpfSk7ZnVuY3Rpb24gRW0oZSx0KXtyZXR1cm4gdD09PVwiYnVmZmVyXCI/bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGUpOmV9ZnVuY3Rpb24gX20oZSl7aWYoIWV8fHR5cGVvZiBlPT1cImZ1bmN0aW9uXCIpcmV0dXJuIG51bGw7aWYoZS5lbmNvZGluZyl7aWYoZS5lbmNvZGluZz09PVwidXRmOFwifHxlLmVuY29kaW5nPT09XCJ1dGYtOFwiKXJldHVyblwidXRmOFwiO2lmKGUuZW5jb2Rpbmc9PT1cImJ1ZmZlclwiKXJldHVyblwiYnVmZmVyXCI7VShgZnMucmVhZGxpbmsgZW5jb2Rpbmc9JHtlLmVuY29kaW5nfWApfXJldHVybiBudWxsfWZ1bmN0aW9uIEx1KGUsdCxyKXtlPWUgaW5zdGFuY2VvZiBVUkw/JChlKTplO2xldCBuO3R5cGVvZiB0PT1cImZ1bmN0aW9uXCI/bj10Om49cjtsZXQgbz1fbSh0KTtpcChEZW5vLnJlYWRMaW5rLGk9PkVtKGksbyksbixlKX1mdW5jdGlvbiBobShlLHQpe3JldHVybiBlPWUgaW5zdGFuY2VvZiBVUkw/JChlKTplLEVtKERlbm8ucmVhZExpbmtTeW5jKGUpLF9tKHQpKX12YXIgZG0sT209QSgoKT0+e3llKCk7RGUoKTt6KCk7ZG09dyhMdSl9KTtmdW5jdGlvbiBJbyhlLHQscil7aWYodHlwZW9mIHQ9PVwiZnVuY3Rpb25cIiYmKHI9dCksIXIpdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgZnVuY3Rpb24gc3VwcGxpZWRcIik7RGVuby5yZWFsUGF0aChlKS50aGVuKG49PnIobnVsbCxuKSxuPT5yKG4pKX1mdW5jdGlvbiBMcyhlKXtyZXR1cm4gRGVuby5yZWFsUGF0aFN5bmMoZSl9dmFyIG1tLFNtPUEoKCk9Pnt6KCk7SW8ubmF0aXZlPUlvO21tPXcoSW8pO0xzLm5hdGl2ZT1Mc30pO2Z1bmN0aW9uIHd1KGUsdCxyKXtpZihlPWUgaW5zdGFuY2VvZiBVUkw/JChlKTplLHQ9dCBpbnN0YW5jZW9mIFVSTD8kKHQpOnQsIXIpdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgZnVuY3Rpb24gc3VwcGxpZWRcIik7RGVuby5yZW5hbWUoZSx0KS50aGVuKG49PnIoKSxyKX1mdW5jdGlvbiBBbShlLHQpe2U9ZSBpbnN0YW5jZW9mIFVSTD8kKGUpOmUsdD10IGluc3RhbmNlb2YgVVJMPyQodCk6dCxEZW5vLnJlbmFtZVN5bmMoZSx0KX12YXIgZ20seG09QSgoKT0+e0RlKCk7eigpO2dtPXcod3UpfSk7ZnVuY3Rpb24gUHUoZSx0LHIpe2U9V2koc2UoZSkpO2xldCBuPXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/dDpyLG89dHlwZW9mIHQ9PVwib2JqZWN0XCI/dDp2b2lkIDA7aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgZnVuY3Rpb24gc3VwcGxpZWRcIik7bz8ucmVjdXJzaXZlPyhjdSgpLG1zKGUsey4uLm8sZm9yY2U6ITF9LCEwLChpLHMpPT57aWYoaT09PSExKXJldHVybiBuKG5ldyBHbihlLnRvU3RyaW5nKCkpKTtpZihpKXJldHVybiBuKGkpO0Rlbm8ucmVtb3ZlKGUse3JlY3Vyc2l2ZTpzPy5yZWN1cnNpdmV9KS50aGVuKGE9Pm4oKSxuKX0pKTooU28obyksRGVuby5yZW1vdmUoZSx7cmVjdXJzaXZlOm8/LnJlY3Vyc2l2ZX0pLnRoZW4oaT0+bigpLGk9PntuKGkgaW5zdGFuY2VvZiBFcnJvcj9NZShpLHtzeXNjYWxsOlwicm1kaXJcIn0pOmkpfSkpfWZ1bmN0aW9uIEltKGUsdCl7aWYoZT1zZShlKSx0Py5yZWN1cnNpdmUpe2lmKGN1KCksdD1TcyhlLHsuLi50LGZvcmNlOiExfSwhMCksdD09PSExKXRocm93IG5ldyBHbihlLnRvU3RyaW5nKCkpfWVsc2UgU28odCk7dHJ5e0Rlbm8ucmVtb3ZlU3luYyhXaShlKSx7cmVjdXJzaXZlOnQ/LnJlY3Vyc2l2ZX0pfWNhdGNoKHIpe3Rocm93IHIgaW5zdGFuY2VvZiBFcnJvcj9NZShyLHtzeXNjYWxsOlwicm1kaXJcIn0pOnJ9fXZhciBObSx5bT1BKCgpPT57Q2UoKTtEZSgpO2VlKCk7eigpO05tPXcoUHUpfSk7ZnVuY3Rpb24gVXUoZSx0LHIpe2xldCBuPXR5cGVvZiB0PT1cImZ1bmN0aW9uXCI/dDpyLG89dHlwZW9mIHQ9PVwib2JqZWN0XCI/dDp2b2lkIDA7aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgZnVuY3Rpb24gc3VwcGxpZWRcIik7bXMoZSxvLCExLChpLHMpPT57aWYoaSlyZXR1cm4gbihpKTtEZW5vLnJlbW92ZShlLHtyZWN1cnNpdmU6cz8ucmVjdXJzaXZlfSkudGhlbihhPT5uKG51bGwpLGE9PntzPy5mb3JjZSYmYSBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLk5vdEZvdW5kP24obnVsbCk6bihhIGluc3RhbmNlb2YgRXJyb3I/TWUoYSx7c3lzY2FsbDpcInJtXCJ9KTphKX0pfSl9ZnVuY3Rpb24gRG0oZSx0KXt0PVNzKGUsdCwhMSk7dHJ5e0Rlbm8ucmVtb3ZlU3luYyhlLHtyZWN1cnNpdmU6dD8ucmVjdXJzaXZlfSl9Y2F0Y2gocil7aWYodD8uZm9yY2UmJnIgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZClyZXR1cm47dGhyb3cgciBpbnN0YW5jZW9mIEVycm9yP01lKHIse3N5c2NhbGw6XCJzdGF0XCJ9KTpyfX12YXIgVG0sYm09QSgoKT0+e0NlKCk7ZWUoKTt6KCk7VG09dyhVdSl9KTtmdW5jdGlvbiBNdShlLHQscixuKXtlPWUgaW5zdGFuY2VvZiBVUkw/JChlKTplLHQ9dCBpbnN0YW5jZW9mIFVSTD8kKHQpOnQ7bGV0IG89dHlwZW9mIHI9PVwic3RyaW5nXCI/cjpcImZpbGVcIixpPXR5cGVvZiByPT1cImZ1bmN0aW9uXCI/cjpuO2lmKCFpKXRocm93IG5ldyBFcnJvcihcIk5vIGNhbGxiYWNrIGZ1bmN0aW9uIHN1cHBsaWVkXCIpO0Rlbm8uc3ltbGluayhlLHQse3R5cGU6b30pLnRoZW4oKCk9PmkobnVsbCksaSl9ZnVuY3Rpb24gTG0oZSx0LHIpe2U9ZSBpbnN0YW5jZW9mIFVSTD8kKGUpOmUsdD10IGluc3RhbmNlb2YgVVJMPyQodCk6dCxyPXJ8fFwiZmlsZVwiLERlbm8uc3ltbGlua1N5bmMoZSx0LHt0eXBlOnJ9KX12YXIgQ20sd209QSgoKT0+e0RlKCk7eigpO0NtPXcoTXUpfSk7ZnVuY3Rpb24ga3UoZSx0LHIpe2U9ZSBpbnN0YW5jZW9mIFVSTD8kKGUpOmU7bGV0IG49dHlwZW9mIHQ9PVwibnVtYmVyXCI/dDp2b2lkIDAsbz10eXBlb2YgdD09XCJmdW5jdGlvblwiP3Q6cjtpZighbyl0aHJvdyBuZXcgRXJyb3IoXCJObyBjYWxsYmFjayBmdW5jdGlvbiBzdXBwbGllZFwiKTtEZW5vLnRydW5jYXRlKGUsbikudGhlbigoKT0+byhudWxsKSxvKX1mdW5jdGlvbiBVbShlLHQpe2U9ZSBpbnN0YW5jZW9mIFVSTD8kKGUpOmUsRGVuby50cnVuY2F0ZVN5bmMoZSx0KX12YXIgUG0sTW09QSgoKT0+e0RlKCk7eigpO1BtPXcoa3UpfSk7ZnVuY3Rpb24gQnUoZSx0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoXCJObyBjYWxsYmFjayBmdW5jdGlvbiBzdXBwbGllZFwiKTtEZW5vLnJlbW92ZShlKS50aGVuKHI9PnQoKSx0KX1mdW5jdGlvbiBCbShlKXtEZW5vLnJlbW92ZVN5bmMoZSl9dmFyIGttLEZtPUEoKCk9Pnt6KCk7a209dyhCdSl9KTtmdW5jdGlvbiB3cyhlLHQpe2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiJiYoZT1OdW1iZXIoZSkpLHR5cGVvZiBlPT1cIm51bWJlclwiJiYoTnVtYmVyLmlzTmFOKGUpfHwhTnVtYmVyLmlzRmluaXRlKGUpKSl0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoYGludmFsaWQgJHt0fSwgbXVzdCBub3QgYmUgaW5maW5pdHkgb3IgTmFOYCk7cmV0dXJuIGV9ZnVuY3Rpb24gRnUoZSx0LHIsbil7aWYoZT1lIGluc3RhbmNlb2YgVVJMPyQoZSk6ZSwhbil0aHJvdyBuZXcgRGVuby5lcnJvcnMuSW52YWxpZERhdGEoXCJObyBjYWxsYmFjayBmdW5jdGlvbiBzdXBwbGllZFwiKTt0PXdzKHQsXCJhdGltZVwiKSxyPXdzKHIsXCJtdGltZVwiKSxuZihlLHQscikudGhlbigoKT0+bihudWxsKSxuKX1mdW5jdGlvbiBXbShlLHQscil7ZT1lIGluc3RhbmNlb2YgVVJMPyQoZSk6ZSx0PXdzKHQsXCJhdGltZVwiKSxyPXdzKHIsXCJtdGltZVwiKSxvZihlLHQscil9dmFyIHZtLFZtPUEoKCk9PntndCgpO0RlKCk7eigpO3ZtPXcoRnUpfSk7ZnVuY3Rpb24gSG0oZSx0LHIsbixvKXtlPVF0KGUpO2xldCBpPShzLGEsYyx1LFIpPT57YSBpbnN0YW5jZW9mIERhdGFWaWV3JiYoYT1uZXcgVWludDhBcnJheShhLmJ1ZmZlcikpLHR5cGVvZiBSPT1cIm51bWJlclwiJiZEZW5vLnNlZWtTeW5jKHMsUixEZW5vLlNlZWtNb2RlLlN0YXJ0KTtsZXQgZj1jLHA9Yyt1O2Zvcig7Zi1jPHU7KWYrPURlbm8ud3JpdGVTeW5jKHMsYS5zdWJhcnJheShmLHApKTtyZXR1cm4gZi1jfTtyZXR1cm4gX3QodCk/KG89PT12b2lkIDAmJihvPW51bGwpLHI9PW51bGw/cj0wOkF0KHIsXCJvZmZzZXRcIiwwKSx0eXBlb2YgbiE9XCJudW1iZXJcIiYmKG49dC5ieXRlTGVuZ3RoLXIpLHN1KHIsbix0LmJ5dGVMZW5ndGgpLGkoZSx0LHIsbixvKSk6KGhuKHQsXCJidWZmZXJcIikscmEodCxuKSxyPT09dm9pZCAwJiYocj1udWxsKSx0PXguZnJvbSh0LG4pLGkoZSx0LDAsdC5sZW5ndGgsbykpfWZ1bmN0aW9uIHlvKGUsdCxyLG4sbyxpKXtlPVF0KGUpO2xldCBzPWFzeW5jKGMsdSxSLGYscCk9Pnt1IGluc3RhbmNlb2YgRGF0YVZpZXcmJih1PW5ldyBVaW50OEFycmF5KHUuYnVmZmVyKSksdHlwZW9mIHA9PVwibnVtYmVyXCImJmF3YWl0IERlbm8uc2VlayhjLHAsRGVuby5TZWVrTW9kZS5TdGFydCk7bGV0IGw9UixfPVIrZjtmb3IoO2wtUjxmOylsKz1hd2FpdCBEZW5vLndyaXRlKGMsdS5zdWJhcnJheShsLF8pKTtyZXR1cm4gbC1SfTtpZihfdCh0KSl7aT1kcihpfHxvfHxufHxyKSxyPT1udWxsfHx0eXBlb2Ygcj09XCJmdW5jdGlvblwiP3I9MDpBdChyLFwib2Zmc2V0XCIsMCksdHlwZW9mIG4hPVwibnVtYmVyXCImJihuPXQuYnl0ZUxlbmd0aC1yKSx0eXBlb2YgbyE9XCJudW1iZXJcIiYmKG89bnVsbCksc3UocixuLHQuYnl0ZUxlbmd0aCkscyhlLHQscixuLG8pLnRoZW4oYz0+e2kobnVsbCxjLHQpfSxjPT5pKGMpKTtyZXR1cm59aG4odCxcImJ1ZmZlclwiKSx0eXBlb2YgbyE9XCJmdW5jdGlvblwiJiYodHlwZW9mIHI9PVwiZnVuY3Rpb25cIj8obz1yLHI9bnVsbCk6bz1uLG49XCJ1dGYtOFwiKTtsZXQgYT1TdHJpbmcodCk7cmEoYSxuKSxpPWRyKG8pLHQ9eC5mcm9tKGEsbikscyhlLHQsMCx0Lmxlbmd0aCxyLGkpLnRoZW4oYz0+e2kobnVsbCxjLHQpfSxjPT5pKGMpKX12YXIgdnU9QSgoKT0+e3VlKCk7ZGUoKTtDZSgpO2N0KCk7SXQoKX0pO2Z1bmN0aW9uICRtKGUsdCxyLG4pe2xldCBvPWFzeW5jKGkscyxhKT0+e2xldCBjPVtdO2ZvcihsZXQgcD0wO3A8cy5sZW5ndGg7cCsrKXguaXNCdWZmZXIoc1twXSk/Yy5wdXNoKHNbcF0pOmMucHVzaChuZXcgeChzW3BdKSk7dHlwZW9mIGE9PVwibnVtYmVyXCImJmF3YWl0IERlbm8uc2Vla1N5bmMoaSxhLERlbm8uU2Vla01vZGUuU3RhcnQpO2xldCBSPXguY29uY2F0KGMpLGY9MDtmb3IoO2Y8Ui5ieXRlTGVuZ3RoOylmKz1hd2FpdCBEZW5vLndyaXRlU3luYyhpLFIuc3ViYXJyYXkoZikpO3JldHVybiBmLTB9O2lmKGU9UXQoZSksYXUodCksbj1kcihufHxyKSx0Lmxlbmd0aD09PTApe3Byb2Nlc3MubmV4dFRpY2sobixudWxsLDAsdCk7cmV0dXJufXR5cGVvZiByIT1cIm51bWJlclwiJiYocj1udWxsKSxvKGUsdCxyKS50aGVuKGk9PntuKG51bGwsaSx0KX0saT0+bihpKSl9ZnVuY3Rpb24gR20oZSx0LHIpe2xldCBuPShvLGkscyk9PntsZXQgYT1bXTtmb3IobGV0IGY9MDtmPGkubGVuZ3RoO2YrKyl4LmlzQnVmZmVyKGlbZl0pP2EucHVzaChpW2ZdKTphLnB1c2gobmV3IHgoaVtmXSkpO3R5cGVvZiBzPT1cIm51bWJlclwiJiZEZW5vLnNlZWtTeW5jKG8scyxEZW5vLlNlZWtNb2RlLlN0YXJ0KTtsZXQgdT14LmNvbmNhdChhKSxSPTA7Zm9yKDtSPHUuYnl0ZUxlbmd0aDspUis9RGVuby53cml0ZVN5bmMobyx1LnN1YmFycmF5KFIpKTtyZXR1cm4gUi0wfTtyZXR1cm4gZT1RdChlKSxhdSh0KSx0Lmxlbmd0aD09PTA/MDoodHlwZW9mIHIhPVwibnVtYmVyXCImJihyPW51bGwpLG4oZSx0LHIpKX12YXIgWW09QSgoKT0+e3VlKCk7Q2UoKTtDZSgpO0l0KCl9KTtmdW5jdGlvbiBLbShlLHQscil7ZS5mZD8oZVtUb10uY2xvc2UoZS5mZCxuPT57cihufHx0KX0pLGUuZmQ9bnVsbCk6cih0KX1mdW5jdGlvbiBXdShlLHQpe3JldHVybiBuZXcgRG8oZSx0KX1mdW5jdGlvbiBYbShlLHQpe3JldHVybiBuZXcgRG8oZSx0KX12YXIgVG8sUHMsam0sZnkscHksRG8scW09QSgoKT0+e3VzKCk7VWMoKTtBdSgpO3Z1KCk7RXUoKTtUbz1TeW1ib2woXCJrRnNcIiksUHM9U3ltYm9sKFwia0lzUGVyZm9ybWluZ0lPXCIpLGptPVN5bWJvbChcImtJb0RvbmVcIiksRG89Y2xhc3MgZXh0ZW5kcyBPZXtjb25zdHJ1Y3RvcihyLG49e30pe3N1cGVyKG4pO3RoaXMuZmQ9bnVsbDt0aGlzLmJ5dGVzV3JpdHRlbj0wO3RoaXMucG9zPTA7dGhpc1tmeV09e29wZW46T24sd3JpdGU6eW99O3RoaXNbcHldPSExO3RoaXMucGF0aD1WaShyKSx0aGlzLmZsYWdzPW4uZmxhZ3N8fFwid1wiLHRoaXMubW9kZT1uLm1vZGV8fDQzOCx0aGlzW1RvXT1uLmZzPz97b3BlbjpPbix3cml0ZTp5byxjbG9zZTpBc30sbi5lbmNvZGluZyYmdGhpcy5zZXREZWZhdWx0RW5jb2Rpbmcobi5lbmNvZGluZyl9X2NvbnN0cnVjdChyKXt0aGlzW1RvXS5vcGVuKHRoaXMucGF0aC50b1N0cmluZygpLHRoaXMuZmxhZ3MsdGhpcy5tb2RlLChuLG8pPT57aWYobil7cihuKTtyZXR1cm59dGhpcy5mZD1vLHIoKSx0aGlzLmVtaXQoXCJvcGVuXCIsdGhpcy5mZCksdGhpcy5lbWl0KFwicmVhZHlcIil9KX1fd3JpdGUocixuLG8pe3RoaXNbUHNdPSEwLHRoaXNbVG9dLndyaXRlKHRoaXMuZmQsciwwLHIubGVuZ3RoLHRoaXMucG9zLChpLHMpPT57aWYodGhpc1tQc109ITEsdGhpcy5kZXN0cm95ZWQpcmV0dXJuIG8oaSksdGhpcy5lbWl0KGptLGkpO2lmKGkpcmV0dXJuIG8oaSk7dGhpcy5ieXRlc1dyaXR0ZW4rPXMsbygpfSksdGhpcy5wb3MhPT12b2lkIDAmJih0aGlzLnBvcys9ci5sZW5ndGgpfV9kZXN0cm95KHIsbil7dGhpc1tQc10/dGhpcy5vbmNlKGptLG89PkttKHRoaXMscnx8byxuKSk6S20odGhpcyxyLG4pfX07Znk9VG8scHk9UHM7V3UucHJvdG90eXBlPURvLnByb3RvdHlwZX0pO3ZhciBSeSxFeSxfeSxkeSxoeSxRbSx6bT1BKCgpPT57ck8oKTthTygpO3VPKCk7Uk8oKTtFdSgpO2RPKCk7aE8oKTtTTygpO2dPKCk7TnMoKTtkdSgpO05PKCk7VE8oKTtDTygpO1BPKCk7a08oKTt2TygpO2tjKCk7T3UoKTtLTygpO0F1KCk7Sk8oKTt1bSgpO1JtKCk7T20oKTtTbSgpO3htKCk7eW0oKTtibSgpO2VuKCk7d20oKTtNbSgpO0ZtKCk7Vm0oKTtEdSgpO3Z1KCk7WW0oKTt1dSgpO0NlKCk7cW0oKTsoe0ZfT0s6UnksUl9PSzpFeSxXX09LOl95LFhfT0s6ZHl9PXhzKSxoeT17YWNjZXNzOmVPLGNvcHlGaWxlOk9PLG9wZW46UU8scmVuYW1lOmdtLHRydW5jYXRlOlBtLHJtOlRtLHJtZGlyOk5tLG1rZGlyOldPLHJlYWRkaXI6Y20scmVhZGxpbms6ZG0sc3ltbGluazpDbSxsc3RhdDpfRSxzdGF0OkVFLGxpbms6Qk8sdW5saW5rOmttLGNobW9kOmNPLGNob3duOmZPLHV0aW1lczp2bSxyZWFscGF0aDptbSxta2R0ZW1wOkhPLHdyaXRlRmlsZTpuTyxhcHBlbmRGaWxlOmlPLHJlYWRGaWxlOmZtLHdhdGNoOnJtfSxRbT17YWNjZXNzOmx1LGFjY2Vzc1N5bmM6dE8sYXBwZW5kRmlsZTpmdSxhcHBlbmRGaWxlU3luYzpzTyxjaG1vZDpwdSxjaG1vZFN5bmM6bE8sY2hvd246UnUsY2hvd25TeW5jOnBPLGNsb3NlOkFzLGNsb3NlU3luYzpFTyxjb25zdGFudHM6eHMsY29weUZpbGU6X3UsY29weUZpbGVTeW5jOm1PLGNyZWF0ZVJlYWRTdHJlYW06X08sY3JlYXRlV3JpdGVTdHJlYW06WG0sRGlyOnhvLERpcmVudDp6dCxleGlzdHM6SXMsZXhpc3RzU3luYzp5cyxGX09LOlJ5LGZkYXRhc3luYzpBTyxmZGF0YXN5bmNTeW5jOnhPLGZzdGF0OklPLGZzdGF0U3luYzp5Tyxmc3luYzpETyxmc3luY1N5bmM6Yk8sZnRydW5jYXRlOkxPLGZ0cnVuY2F0ZVN5bmM6d08sZnV0aW1lczpVTyxmdXRpbWVzU3luYzpNTyxsaW5rOmh1LGxpbmtTeW5jOkZPLGxzdGF0OiRpLGxzdGF0U3luYzpNYyxta2RpcjpObyxta2RpclN5bmM6RHMsbWtkdGVtcDptdSxta2R0ZW1wU3luYzokTyxvcGVuOk9uLG9wZW5TeW5jOmd1LHJlYWQ6ek8scmVhZFN5bmM6Wk8scHJvbWlzZXM6aHksUl9PSzpFeSxyZWFkZGlyOmJ1LHJlYWRkaXJTeW5jOmxtLHJlYWRGaWxlOkN1LHJlYWRGaWxlU3luYzpwbSxyZWFkbGluazpMdSxyZWFkbGlua1N5bmM6aG0sUmVhZFN0cmVhbTpBbyxyZWFscGF0aDpJbyxyZWFscGF0aFN5bmM6THMscmVuYW1lOnd1LHJlbmFtZVN5bmM6QW0scm1kaXI6UHUscm1kaXJTeW5jOkltLHJtOlV1LHJtU3luYzpEbSxzdGF0Ok5yLFN0YXRzOlJyLHN0YXRTeW5jOkhpLHN5bWxpbms6TXUsc3ltbGlua1N5bmM6TG0sdHJ1bmNhdGU6a3UsdHJ1bmNhdGVTeW5jOlVtLHVubGluazpCdSx1bmxpbmtTeW5jOkJtLHVud2F0Y2hGaWxlOm9tLHV0aW1lczpGdSx1dGltZXNTeW5jOldtLFdfT0s6X3ksd2F0Y2g6VHUsd2F0Y2hGaWxlOm5tLHdyaXRlOnlvLHdyaXRlRmlsZTpnbyx3cml0ZXY6JG0sd3JpdGV2U3luYzpHbSx3cml0ZUZpbGVTeW5jOmdzLFdyaXRlU3RyZWFtOld1LHdyaXRlU3luYzpIbSxYX09LOmR5fX0pO3ZhciBibyxPeSxKbSxteSxTeSxneSxBeSxVcyxRLHh5LE55LHR0LFN0LEl5LHl5LFR5LER5LGJ5LEN5LEx5LGVTLHd5LFB5LHRTLFV5LHJTLFZ1LE15LGt5LEJ5LG5TLEZ5LG9TLHZ5LEh1LFd5LFZ5LEh5LCR5LEd5LFl5LGp5LEt5LFh5LHF5LFptLFF5LGlTLCR1PUEoKCk9Pnt6dSgpO3ptKCk7Ym89Z2xvYmFsVGhpc3x8KHR5cGVvZiB3aW5kb3c8XCJ1XCI/d2luZG93OnNlbGYpLE95PU9iamVjdC5jcmVhdGUsSm09T2JqZWN0LmRlZmluZVByb3BlcnR5LG15PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsU3k9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsZ3k9T2JqZWN0LmdldFByb3RvdHlwZU9mLEF5PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksVXM9KGU9PnR5cGVvZiBFcjxcInVcIj9Fcjp0eXBlb2YgUHJveHk8XCJ1XCI/bmV3IFByb3h5KGUse2dldDoodCxyKT0+KHR5cGVvZiBFcjxcInVcIj9Fcjp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBFcjxcInVcIilyZXR1cm4gRXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IG5ldyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mIFwiJytlKydcIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxRPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cykseHk9KGUsdCxyLG4pPT57aWYodCYmdHlwZW9mIHQ9PVwib2JqZWN0XCJ8fHR5cGVvZiB0PT1cImZ1bmN0aW9uXCIpZm9yKGxldCBvIG9mIFN5KHQpKSFBeS5jYWxsKGUsbykmJm8hPT1yJiZKbShlLG8se2dldDooKT0+dFtvXSxlbnVtZXJhYmxlOiEobj1teSh0LG8pKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9LE55PShlLHQscik9PihyPWUhPW51bGw/T3koZ3koZSkpOnt9LHh5KHR8fCFlfHwhZS5fX2VzTW9kdWxlP0ptKHIsXCJkZWZhdWx0XCIse3ZhbHVlOmUsZW51bWVyYWJsZTohMH0pOnIsZSkpLHR0PVEoZT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMCxlLmV4dGVuZD1pLGUuaW5kZXhPZj11LGUuZXNjYXBlRXhwcmVzc2lvbj1SLGUuaXNFbXB0eT1mLGUuY3JlYXRlRnJhbWU9cCxlLmJsb2NrUGFyYW1zPWwsZS5hcHBlbmRDb250ZXh0UGF0aD1fO3ZhciB0PXtcIiZcIjpcIiZhbXA7XCIsXCI8XCI6XCImbHQ7XCIsXCI+XCI6XCImZ3Q7XCIsJ1wiJzpcIiZxdW90O1wiLFwiJ1wiOlwiJiN4Mjc7XCIsXCJgXCI6XCImI3g2MDtcIixcIj1cIjpcIiYjeDNEO1wifSxyPS9bJjw+XCInYD1dL2csbj0vWyY8PlwiJ2A9XS87ZnVuY3Rpb24gbyhFKXtyZXR1cm4gdFtFXX1mdW5jdGlvbiBpKEUpe2Zvcih2YXIgaD0xO2g8YXJndW1lbnRzLmxlbmd0aDtoKyspZm9yKHZhciBTIGluIGFyZ3VtZW50c1toXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2hdLFMpJiYoRVtTXT1hcmd1bWVudHNbaF1bU10pO3JldHVybiBFfXZhciBzPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZS50b1N0cmluZz1zO3ZhciBhPWZ1bmN0aW9uKEUpe3JldHVybiB0eXBlb2YgRT09XCJmdW5jdGlvblwifTthKC94LykmJihlLmlzRnVuY3Rpb249YT1mdW5jdGlvbihFKXtyZXR1cm4gdHlwZW9mIEU9PVwiZnVuY3Rpb25cIiYmcy5jYWxsKEUpPT09XCJbb2JqZWN0IEZ1bmN0aW9uXVwifSksZS5pc0Z1bmN0aW9uPWE7dmFyIGM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJnR5cGVvZiBFPT1cIm9iamVjdFwiP3MuY2FsbChFKT09PVwiW29iamVjdCBBcnJheV1cIjohMX07ZS5pc0FycmF5PWM7ZnVuY3Rpb24gdShFLGgpe2Zvcih2YXIgUz0wLGQ9RS5sZW5ndGg7UzxkO1MrKylpZihFW1NdPT09aClyZXR1cm4gUztyZXR1cm4tMX1mdW5jdGlvbiBSKEUpe2lmKHR5cGVvZiBFIT1cInN0cmluZ1wiKXtpZihFJiZFLnRvSFRNTClyZXR1cm4gRS50b0hUTUwoKTtpZihFPT1udWxsKXJldHVyblwiXCI7aWYoIUUpcmV0dXJuIEUrXCJcIjtFPVwiXCIrRX1yZXR1cm4gbi50ZXN0KEUpP0UucmVwbGFjZShyLG8pOkV9ZnVuY3Rpb24gZihFKXtyZXR1cm4hRSYmRSE9PTA/ITA6ISEoYyhFKSYmRS5sZW5ndGg9PT0wKX1mdW5jdGlvbiBwKEUpe3ZhciBoPWkoe30sRSk7cmV0dXJuIGguX3BhcmVudD1FLGh9ZnVuY3Rpb24gbChFLGgpe3JldHVybiBFLnBhdGg9aCxFfWZ1bmN0aW9uIF8oRSxoKXtyZXR1cm4oRT9FK1wiLlwiOlwiXCIpK2h9fSksU3Q9USgoZSx0KT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMDt2YXIgcj1bXCJkZXNjcmlwdGlvblwiLFwiZmlsZU5hbWVcIixcImxpbmVOdW1iZXJcIixcImVuZExpbmVOdW1iZXJcIixcIm1lc3NhZ2VcIixcIm5hbWVcIixcIm51bWJlclwiLFwic3RhY2tcIl07ZnVuY3Rpb24gbihvLGkpe3ZhciBzPWkmJmkubG9jLGE9dm9pZCAwLGM9dm9pZCAwLHU9dm9pZCAwLFI9dm9pZCAwO3MmJihhPXMuc3RhcnQubGluZSxjPXMuZW5kLmxpbmUsdT1zLnN0YXJ0LmNvbHVtbixSPXMuZW5kLmNvbHVtbixvKz1cIiAtIFwiK2ErXCI6XCIrdSk7Zm9yKHZhciBmPUVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsbykscD0wO3A8ci5sZW5ndGg7cCsrKXRoaXNbcltwXV09ZltyW3BdXTtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxuKTt0cnl7cyYmKHRoaXMubGluZU51bWJlcj1hLHRoaXMuZW5kTGluZU51bWJlcj1jLE9iamVjdC5kZWZpbmVQcm9wZXJ0eT8oT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjb2x1bW5cIix7dmFsdWU6dSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJlbmRDb2x1bW5cIix7dmFsdWU6UixlbnVtZXJhYmxlOiEwfSkpOih0aGlzLmNvbHVtbj11LHRoaXMuZW5kQ29sdW1uPVIpKX1jYXRjaHt9fW4ucHJvdG90eXBlPW5ldyBFcnJvcixlLmRlZmF1bHQ9bix0LmV4cG9ydHM9ZS5kZWZhdWx0fSksSXk9USgoZSx0KT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMDt2YXIgcj10dCgpO2UuZGVmYXVsdD1mdW5jdGlvbihuKXtuLnJlZ2lzdGVySGVscGVyKFwiYmxvY2tIZWxwZXJNaXNzaW5nXCIsZnVuY3Rpb24obyxpKXt2YXIgcz1pLmludmVyc2UsYT1pLmZuO2lmKG89PT0hMClyZXR1cm4gYSh0aGlzKTtpZihvPT09ITF8fG89PW51bGwpcmV0dXJuIHModGhpcyk7aWYoci5pc0FycmF5KG8pKXJldHVybiBvLmxlbmd0aD4wPyhpLmlkcyYmKGkuaWRzPVtpLm5hbWVdKSxuLmhlbHBlcnMuZWFjaChvLGkpKTpzKHRoaXMpO2lmKGkuZGF0YSYmaS5pZHMpe3ZhciBjPXIuY3JlYXRlRnJhbWUoaS5kYXRhKTtjLmNvbnRleHRQYXRoPXIuYXBwZW5kQ29udGV4dFBhdGgoaS5kYXRhLmNvbnRleHRQYXRoLGkubmFtZSksaT17ZGF0YTpjfX1yZXR1cm4gYShvLGkpfSl9LHQuZXhwb3J0cz1lLmRlZmF1bHR9KSx5eT1RKChlLHQpPT57XCJ1c2Ugc3RyaWN0XCI7ZS5fX2VzTW9kdWxlPSEwO2Z1bmN0aW9uIHIocyl7cmV0dXJuIHMmJnMuX19lc01vZHVsZT9zOntkZWZhdWx0OnN9fXZhciBuPXR0KCksbz1TdCgpLGk9cihvKTtlLmRlZmF1bHQ9ZnVuY3Rpb24ocyl7cy5yZWdpc3RlckhlbHBlcihcImVhY2hcIixmdW5jdGlvbihhLGMpe2lmKCFjKXRocm93IG5ldyBpLmRlZmF1bHQoXCJNdXN0IHBhc3MgaXRlcmF0b3IgdG8gI2VhY2hcIik7dmFyIHU9Yy5mbixSPWMuaW52ZXJzZSxmPTAscD1cIlwiLGw9dm9pZCAwLF89dm9pZCAwO2MuZGF0YSYmYy5pZHMmJihfPW4uYXBwZW5kQ29udGV4dFBhdGgoYy5kYXRhLmNvbnRleHRQYXRoLGMuaWRzWzBdKStcIi5cIiksbi5pc0Z1bmN0aW9uKGEpJiYoYT1hLmNhbGwodGhpcykpLGMuZGF0YSYmKGw9bi5jcmVhdGVGcmFtZShjLmRhdGEpKTtmdW5jdGlvbiBFKE8sbSxOKXtsJiYobC5rZXk9TyxsLmluZGV4PW0sbC5maXJzdD1tPT09MCxsLmxhc3Q9ISFOLF8mJihsLmNvbnRleHRQYXRoPV8rTykpLHA9cCt1KGFbT10se2RhdGE6bCxibG9ja1BhcmFtczpuLmJsb2NrUGFyYW1zKFthW09dLE9dLFtfK08sbnVsbF0pfSl9aWYoYSYmdHlwZW9mIGE9PVwib2JqZWN0XCIpaWYobi5pc0FycmF5KGEpKWZvcih2YXIgaD1hLmxlbmd0aDtmPGg7ZisrKWYgaW4gYSYmRShmLGYsZj09PWEubGVuZ3RoLTEpO2Vsc2UgaWYoYm8uU3ltYm9sJiZhW2JvLlN5bWJvbC5pdGVyYXRvcl0pe2Zvcih2YXIgUz1bXSxkPWFbYm8uU3ltYm9sLml0ZXJhdG9yXSgpLGc9ZC5uZXh0KCk7IWcuZG9uZTtnPWQubmV4dCgpKVMucHVzaChnLnZhbHVlKTthPVM7Zm9yKHZhciBoPWEubGVuZ3RoO2Y8aDtmKyspRShmLGYsZj09PWEubGVuZ3RoLTEpfWVsc2UoZnVuY3Rpb24oKXt2YXIgTz12b2lkIDA7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihtKXtPIT09dm9pZCAwJiZFKE8sZi0xKSxPPW0sZisrfSksTyE9PXZvaWQgMCYmRShPLGYtMSwhMCl9KSgpO3JldHVybiBmPT09MCYmKHA9Uih0aGlzKSkscH0pfSx0LmV4cG9ydHM9ZS5kZWZhdWx0fSksVHk9USgoZSx0KT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMDtmdW5jdGlvbiByKGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGU/aTp7ZGVmYXVsdDppfX12YXIgbj1TdCgpLG89cihuKTtlLmRlZmF1bHQ9ZnVuY3Rpb24oaSl7aS5yZWdpc3RlckhlbHBlcihcImhlbHBlck1pc3NpbmdcIixmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGghPT0xKXRocm93IG5ldyBvLmRlZmF1bHQoJ01pc3NpbmcgaGVscGVyOiBcIicrYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0ubmFtZSsnXCInKX0pfSx0LmV4cG9ydHM9ZS5kZWZhdWx0fSksRHk9USgoZSx0KT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMDtmdW5jdGlvbiByKHMpe3JldHVybiBzJiZzLl9fZXNNb2R1bGU/czp7ZGVmYXVsdDpzfX12YXIgbj10dCgpLG89U3QoKSxpPXIobyk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHMpe3MucmVnaXN0ZXJIZWxwZXIoXCJpZlwiLGZ1bmN0aW9uKGEsYyl7aWYoYXJndW1lbnRzLmxlbmd0aCE9Mil0aHJvdyBuZXcgaS5kZWZhdWx0KFwiI2lmIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50XCIpO3JldHVybiBuLmlzRnVuY3Rpb24oYSkmJihhPWEuY2FsbCh0aGlzKSksIWMuaGFzaC5pbmNsdWRlWmVybyYmIWF8fG4uaXNFbXB0eShhKT9jLmludmVyc2UodGhpcyk6Yy5mbih0aGlzKX0pLHMucmVnaXN0ZXJIZWxwZXIoXCJ1bmxlc3NcIixmdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGghPTIpdGhyb3cgbmV3IGkuZGVmYXVsdChcIiN1bmxlc3MgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnRcIik7cmV0dXJuIHMuaGVscGVycy5pZi5jYWxsKHRoaXMsYSx7Zm46Yy5pbnZlcnNlLGludmVyc2U6Yy5mbixoYXNoOmMuaGFzaH0pfSl9LHQuZXhwb3J0cz1lLmRlZmF1bHR9KSxieT1RKChlLHQpPT57XCJ1c2Ugc3RyaWN0XCI7ZS5fX2VzTW9kdWxlPSEwLGUuZGVmYXVsdD1mdW5jdGlvbihyKXtyLnJlZ2lzdGVySGVscGVyKFwibG9nXCIsZnVuY3Rpb24oKXtmb3IodmFyIG49W3ZvaWQgMF0sbz1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxpPTA7aTxhcmd1bWVudHMubGVuZ3RoLTE7aSsrKW4ucHVzaChhcmd1bWVudHNbaV0pO3ZhciBzPTE7by5oYXNoLmxldmVsIT1udWxsP3M9by5oYXNoLmxldmVsOm8uZGF0YSYmby5kYXRhLmxldmVsIT1udWxsJiYocz1vLmRhdGEubGV2ZWwpLG5bMF09cyxyLmxvZy5hcHBseShyLG4pfSl9LHQuZXhwb3J0cz1lLmRlZmF1bHR9KSxDeT1RKChlLHQpPT57XCJ1c2Ugc3RyaWN0XCI7ZS5fX2VzTW9kdWxlPSEwLGUuZGVmYXVsdD1mdW5jdGlvbihyKXtyLnJlZ2lzdGVySGVscGVyKFwibG9va3VwXCIsZnVuY3Rpb24obixvLGkpe3JldHVybiBuJiZpLmxvb2t1cFByb3BlcnR5KG4sbyl9KX0sdC5leHBvcnRzPWUuZGVmYXVsdH0pLEx5PVEoKGUsdCk9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITA7ZnVuY3Rpb24gcihzKXtyZXR1cm4gcyYmcy5fX2VzTW9kdWxlP3M6e2RlZmF1bHQ6c319dmFyIG49dHQoKSxvPVN0KCksaT1yKG8pO2UuZGVmYXVsdD1mdW5jdGlvbihzKXtzLnJlZ2lzdGVySGVscGVyKFwid2l0aFwiLGZ1bmN0aW9uKGEsYyl7aWYoYXJndW1lbnRzLmxlbmd0aCE9Mil0aHJvdyBuZXcgaS5kZWZhdWx0KFwiI3dpdGggcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnRcIik7bi5pc0Z1bmN0aW9uKGEpJiYoYT1hLmNhbGwodGhpcykpO3ZhciB1PWMuZm47aWYobi5pc0VtcHR5KGEpKXJldHVybiBjLmludmVyc2UodGhpcyk7dmFyIFI9Yy5kYXRhO3JldHVybiBjLmRhdGEmJmMuaWRzJiYoUj1uLmNyZWF0ZUZyYW1lKGMuZGF0YSksUi5jb250ZXh0UGF0aD1uLmFwcGVuZENvbnRleHRQYXRoKGMuZGF0YS5jb250ZXh0UGF0aCxjLmlkc1swXSkpLHUoYSx7ZGF0YTpSLGJsb2NrUGFyYW1zOm4uYmxvY2tQYXJhbXMoW2FdLFtSJiZSLmNvbnRleHRQYXRoXSl9KX0pfSx0LmV4cG9ydHM9ZS5kZWZhdWx0fSksZVM9UShlPT57XCJ1c2Ugc3RyaWN0XCI7ZS5fX2VzTW9kdWxlPSEwLGUucmVnaXN0ZXJEZWZhdWx0SGVscGVycz1oLGUubW92ZUhlbHBlclRvSG9va3M9UztmdW5jdGlvbiB0KGQpe3JldHVybiBkJiZkLl9fZXNNb2R1bGU/ZDp7ZGVmYXVsdDpkfX12YXIgcj1JeSgpLG49dChyKSxvPXl5KCksaT10KG8pLHM9VHkoKSxhPXQocyksYz1EeSgpLHU9dChjKSxSPWJ5KCksZj10KFIpLHA9Q3koKSxsPXQocCksXz1MeSgpLEU9dChfKTtmdW5jdGlvbiBoKGQpe24uZGVmYXVsdChkKSxpLmRlZmF1bHQoZCksYS5kZWZhdWx0KGQpLHUuZGVmYXVsdChkKSxmLmRlZmF1bHQoZCksbC5kZWZhdWx0KGQpLEUuZGVmYXVsdChkKX1mdW5jdGlvbiBTKGQsZyxPKXtkLmhlbHBlcnNbZ10mJihkLmhvb2tzW2ddPWQuaGVscGVyc1tnXSxPfHxkZWxldGUgZC5oZWxwZXJzW2ddKX19KSx3eT1RKChlLHQpPT57XCJ1c2Ugc3RyaWN0XCI7ZS5fX2VzTW9kdWxlPSEwO3ZhciByPXR0KCk7ZS5kZWZhdWx0PWZ1bmN0aW9uKG4pe24ucmVnaXN0ZXJEZWNvcmF0b3IoXCJpbmxpbmVcIixmdW5jdGlvbihvLGkscyxhKXt2YXIgYz1vO3JldHVybiBpLnBhcnRpYWxzfHwoaS5wYXJ0aWFscz17fSxjPWZ1bmN0aW9uKHUsUil7dmFyIGY9cy5wYXJ0aWFscztzLnBhcnRpYWxzPXIuZXh0ZW5kKHt9LGYsaS5wYXJ0aWFscyk7dmFyIHA9byh1LFIpO3JldHVybiBzLnBhcnRpYWxzPWYscH0pLGkucGFydGlhbHNbYS5hcmdzWzBdXT1hLmZuLGN9KX0sdC5leHBvcnRzPWUuZGVmYXVsdH0pLFB5PVEoZT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMCxlLnJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnM9bztmdW5jdGlvbiB0KGkpe3JldHVybiBpJiZpLl9fZXNNb2R1bGU/aTp7ZGVmYXVsdDppfX12YXIgcj13eSgpLG49dChyKTtmdW5jdGlvbiBvKGkpe24uZGVmYXVsdChpKX19KSx0Uz1RKChlLHQpPT57XCJ1c2Ugc3RyaWN0XCI7ZS5fX2VzTW9kdWxlPSEwO3ZhciByPXR0KCksbj17bWV0aG9kTWFwOltcImRlYnVnXCIsXCJpbmZvXCIsXCJ3YXJuXCIsXCJlcnJvclwiXSxsZXZlbDpcImluZm9cIixsb29rdXBMZXZlbDpmdW5jdGlvbihvKXtpZih0eXBlb2Ygbz09XCJzdHJpbmdcIil7dmFyIGk9ci5pbmRleE9mKG4ubWV0aG9kTWFwLG8udG9Mb3dlckNhc2UoKSk7aT49MD9vPWk6bz1wYXJzZUludChvLDEwKX1yZXR1cm4gb30sbG9nOmZ1bmN0aW9uKG8pe2lmKG89bi5sb29rdXBMZXZlbChvKSx0eXBlb2YgY29uc29sZTxcInVcIiYmbi5sb29rdXBMZXZlbChuLmxldmVsKTw9byl7dmFyIGk9bi5tZXRob2RNYXBbb107Y29uc29sZVtpXXx8KGk9XCJsb2dcIik7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsYT1BcnJheShzPjE/cy0xOjApLGM9MTtjPHM7YysrKWFbYy0xXT1hcmd1bWVudHNbY107Y29uc29sZVtpXS5hcHBseShjb25zb2xlLGEpfX19O2UuZGVmYXVsdD1uLHQuZXhwb3J0cz1lLmRlZmF1bHR9KSxVeT1RKGU9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITAsZS5jcmVhdGVOZXdMb29rdXBPYmplY3Q9cjt2YXIgdD10dCgpO2Z1bmN0aW9uIHIoKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KG4pLGk9MDtpPG47aSsrKW9baV09YXJndW1lbnRzW2ldO3JldHVybiB0LmV4dGVuZC5hcHBseSh2b2lkIDAsW09iamVjdC5jcmVhdGUobnVsbCldLmNvbmNhdChvKSl9fSksclM9UShlPT57XCJ1c2Ugc3RyaWN0XCI7ZS5fX2VzTW9kdWxlPSEwLGUuY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sPXMsZS5yZXN1bHRJc0FsbG93ZWQ9YSxlLnJlc2V0TG9nZ2VkUHJvcGVydGllcz1SO2Z1bmN0aW9uIHQoZil7aWYoZiYmZi5fX2VzTW9kdWxlKXJldHVybiBmO3ZhciBwPXt9O2lmKGYhPW51bGwpZm9yKHZhciBsIGluIGYpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYsbCkmJihwW2xdPWZbbF0pO3JldHVybiBwLmRlZmF1bHQ9ZixwfXZhciByPVV5KCksbj10UygpLG89dChuKSxpPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gcyhmKXt2YXIgcD1PYmplY3QuY3JlYXRlKG51bGwpO3AuY29uc3RydWN0b3I9ITEscC5fX2RlZmluZUdldHRlcl9fPSExLHAuX19kZWZpbmVTZXR0ZXJfXz0hMSxwLl9fbG9va3VwR2V0dGVyX189ITE7dmFyIGw9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gbC5fX3Byb3RvX189ITEse3Byb3BlcnRpZXM6e3doaXRlbGlzdDpyLmNyZWF0ZU5ld0xvb2t1cE9iamVjdChsLGYuYWxsb3dlZFByb3RvUHJvcGVydGllcyksZGVmYXVsdFZhbHVlOmYuYWxsb3dQcm90b1Byb3BlcnRpZXNCeURlZmF1bHR9LG1ldGhvZHM6e3doaXRlbGlzdDpyLmNyZWF0ZU5ld0xvb2t1cE9iamVjdChwLGYuYWxsb3dlZFByb3RvTWV0aG9kcyksZGVmYXVsdFZhbHVlOmYuYWxsb3dQcm90b01ldGhvZHNCeURlZmF1bHR9fX1mdW5jdGlvbiBhKGYscCxsKXtyZXR1cm4gYyh0eXBlb2YgZj09XCJmdW5jdGlvblwiP3AubWV0aG9kczpwLnByb3BlcnRpZXMsbCl9ZnVuY3Rpb24gYyhmLHApe3JldHVybiBmLndoaXRlbGlzdFtwXSE9PXZvaWQgMD9mLndoaXRlbGlzdFtwXT09PSEwOmYuZGVmYXVsdFZhbHVlIT09dm9pZCAwP2YuZGVmYXVsdFZhbHVlOih1KHApLCExKX1mdW5jdGlvbiB1KGYpe2lbZl0hPT0hMCYmKGlbZl09ITAsby5sb2coXCJlcnJvclwiLCdIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJytmK2BcIiBiZWNhdXNlIGl0IGlzIG5vdCBhbiBcIm93biBwcm9wZXJ0eVwiIG9mIGl0cyBwYXJlbnQuXG5Zb3UgY2FuIGFkZCBhIHJ1bnRpbWUgb3B0aW9uIHRvIGRpc2FibGUgdGhlIGNoZWNrIG9yIHRoaXMgd2FybmluZzpcblNlZSBodHRwczovL2hhbmRsZWJhcnNqcy5jb20vYXBpLXJlZmVyZW5jZS9ydW50aW1lLW9wdGlvbnMuaHRtbCNvcHRpb25zLXRvLWNvbnRyb2wtcHJvdG90eXBlLWFjY2VzcyBmb3IgZGV0YWlsc2ApKX1mdW5jdGlvbiBSKCl7T2JqZWN0LmtleXMoaSkuZm9yRWFjaChmdW5jdGlvbihmKXtkZWxldGUgaVtmXX0pfX0pLFZ1PVEoZT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMCxlLkhhbmRsZWJhcnNFbnZpcm9ubWVudD1FO2Z1bmN0aW9uIHQoUyl7cmV0dXJuIFMmJlMuX19lc01vZHVsZT9TOntkZWZhdWx0OlN9fXZhciByPXR0KCksbj1TdCgpLG89dChuKSxpPWVTKCkscz1QeSgpLGE9dFMoKSxjPXQoYSksdT1yUygpLFI9XCI0LjcuN1wiO2UuVkVSU0lPTj1SO3ZhciBmPTg7ZS5DT01QSUxFUl9SRVZJU0lPTj1mO3ZhciBwPTc7ZS5MQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT049cDt2YXIgbD17MTpcIjw9IDEuMC5yYy4yXCIsMjpcIj09IDEuMC4wLXJjLjNcIiwzOlwiPT0gMS4wLjAtcmMuNFwiLDQ6XCI9PSAxLngueFwiLDU6XCI9PSAyLjAuMC1hbHBoYS54XCIsNjpcIj49IDIuMC4wLWJldGEuMVwiLDc6XCI+PSA0LjAuMCA8NC4zLjBcIiw4OlwiPj0gNC4zLjBcIn07ZS5SRVZJU0lPTl9DSEFOR0VTPWw7dmFyIF89XCJbb2JqZWN0IE9iamVjdF1cIjtmdW5jdGlvbiBFKFMsZCxnKXt0aGlzLmhlbHBlcnM9U3x8e30sdGhpcy5wYXJ0aWFscz1kfHx7fSx0aGlzLmRlY29yYXRvcnM9Z3x8e30saS5yZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpLHMucmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyh0aGlzKX1FLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RSxsb2dnZXI6Yy5kZWZhdWx0LGxvZzpjLmRlZmF1bHQubG9nLHJlZ2lzdGVySGVscGVyOmZ1bmN0aW9uKFMsZCl7aWYoci50b1N0cmluZy5jYWxsKFMpPT09Xyl7aWYoZCl0aHJvdyBuZXcgby5kZWZhdWx0KFwiQXJnIG5vdCBzdXBwb3J0ZWQgd2l0aCBtdWx0aXBsZSBoZWxwZXJzXCIpO3IuZXh0ZW5kKHRoaXMuaGVscGVycyxTKX1lbHNlIHRoaXMuaGVscGVyc1tTXT1kfSx1bnJlZ2lzdGVySGVscGVyOmZ1bmN0aW9uKFMpe2RlbGV0ZSB0aGlzLmhlbHBlcnNbU119LHJlZ2lzdGVyUGFydGlhbDpmdW5jdGlvbihTLGQpe2lmKHIudG9TdHJpbmcuY2FsbChTKT09PV8pci5leHRlbmQodGhpcy5wYXJ0aWFscyxTKTtlbHNle2lmKHR5cGVvZiBkPlwidVwiKXRocm93IG5ldyBvLmRlZmF1bHQoJ0F0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgYSBwYXJ0aWFsIGNhbGxlZCBcIicrUysnXCIgYXMgdW5kZWZpbmVkJyk7dGhpcy5wYXJ0aWFsc1tTXT1kfX0sdW5yZWdpc3RlclBhcnRpYWw6ZnVuY3Rpb24oUyl7ZGVsZXRlIHRoaXMucGFydGlhbHNbU119LHJlZ2lzdGVyRGVjb3JhdG9yOmZ1bmN0aW9uKFMsZCl7aWYoci50b1N0cmluZy5jYWxsKFMpPT09Xyl7aWYoZCl0aHJvdyBuZXcgby5kZWZhdWx0KFwiQXJnIG5vdCBzdXBwb3J0ZWQgd2l0aCBtdWx0aXBsZSBkZWNvcmF0b3JzXCIpO3IuZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycyxTKX1lbHNlIHRoaXMuZGVjb3JhdG9yc1tTXT1kfSx1bnJlZ2lzdGVyRGVjb3JhdG9yOmZ1bmN0aW9uKFMpe2RlbGV0ZSB0aGlzLmRlY29yYXRvcnNbU119LHJlc2V0TG9nZ2VkUHJvcGVydHlBY2Nlc3NlczpmdW5jdGlvbigpe3UucmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCl9fTt2YXIgaD1jLmRlZmF1bHQubG9nO2UubG9nPWgsZS5jcmVhdGVGcmFtZT1yLmNyZWF0ZUZyYW1lLGUubG9nZ2VyPWMuZGVmYXVsdH0pLE15PVEoKGUsdCk9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITA7ZnVuY3Rpb24gcihuKXt0aGlzLnN0cmluZz1ufXIucHJvdG90eXBlLnRvU3RyaW5nPXIucHJvdG90eXBlLnRvSFRNTD1mdW5jdGlvbigpe3JldHVyblwiXCIrdGhpcy5zdHJpbmd9LGUuZGVmYXVsdD1yLHQuZXhwb3J0cz1lLmRlZmF1bHR9KSxreT1RKGU9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITAsZS53cmFwSGVscGVyPXQ7ZnVuY3Rpb24gdChyLG4pe2lmKHR5cGVvZiByIT1cImZ1bmN0aW9uXCIpcmV0dXJuIHI7dmFyIG89ZnVuY3Rpb24oKXt2YXIgaT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtyZXR1cm4gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV09bihpKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIG99fSksQnk9UShlPT57XCJ1c2Ugc3RyaWN0XCI7ZS5fX2VzTW9kdWxlPSEwLGUuY2hlY2tSZXZpc2lvbj1mLGUudGVtcGxhdGU9cCxlLndyYXBQcm9ncmFtPWwsZS5yZXNvbHZlUGFydGlhbD1fLGUuaW52b2tlUGFydGlhbD1FLGUubm9vcD1oO2Z1bmN0aW9uIHQobSl7cmV0dXJuIG0mJm0uX19lc01vZHVsZT9tOntkZWZhdWx0Om19fWZ1bmN0aW9uIHIobSl7aWYobSYmbS5fX2VzTW9kdWxlKXJldHVybiBtO3ZhciBOPXt9O2lmKG0hPW51bGwpZm9yKHZhciBJIGluIG0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sSSkmJihOW0ldPW1bSV0pO3JldHVybiBOLmRlZmF1bHQ9bSxOfXZhciBuPXR0KCksbz1yKG4pLGk9U3QoKSxzPXQoaSksYT1WdSgpLGM9ZVMoKSx1PWt5KCksUj1yUygpO2Z1bmN0aW9uIGYobSl7dmFyIE49bSYmbVswXXx8MSxJPWEuQ09NUElMRVJfUkVWSVNJT047aWYoIShOPj1hLkxBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiYmTjw9YS5DT01QSUxFUl9SRVZJU0lPTikpaWYoTjxhLkxBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTil7dmFyIGI9YS5SRVZJU0lPTl9DSEFOR0VTW0ldLEw9YS5SRVZJU0lPTl9DSEFOR0VTW05dO3Rocm93IG5ldyBzLmRlZmF1bHQoXCJUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiBQbGVhc2UgdXBkYXRlIHlvdXIgcHJlY29tcGlsZXIgdG8gYSBuZXdlciB2ZXJzaW9uIChcIitiK1wiKSBvciBkb3duZ3JhZGUgeW91ciBydW50aW1lIHRvIGFuIG9sZGVyIHZlcnNpb24gKFwiK0wrXCIpLlwiKX1lbHNlIHRocm93IG5ldyBzLmRlZmF1bHQoXCJUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuIFBsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVyc2lvbiAoXCIrbVsxXStcIikuXCIpfWZ1bmN0aW9uIHAobSxOKXtpZighTil0aHJvdyBuZXcgcy5kZWZhdWx0KFwiTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlXCIpO2lmKCFtfHwhbS5tYWluKXRocm93IG5ldyBzLmRlZmF1bHQoXCJVbmtub3duIHRlbXBsYXRlIG9iamVjdDogXCIrdHlwZW9mIG0pO20ubWFpbi5kZWNvcmF0b3I9bS5tYWluX2QsTi5WTS5jaGVja1JldmlzaW9uKG0uY29tcGlsZXIpO3ZhciBJPW0uY29tcGlsZXImJm0uY29tcGlsZXJbMF09PT03O2Z1bmN0aW9uIGIoeSxDLGspe2suaGFzaCYmKEM9by5leHRlbmQoe30sQyxrLmhhc2gpLGsuaWRzJiYoay5pZHNbMF09ITApKSx5PU4uVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLHksQyxrKTt2YXIgSj1vLmV4dGVuZCh7fSxrLHtob29rczp0aGlzLmhvb2tzLHByb3RvQWNjZXNzQ29udHJvbDp0aGlzLnByb3RvQWNjZXNzQ29udHJvbH0pLF9lPU4uVk0uaW52b2tlUGFydGlhbC5jYWxsKHRoaXMseSxDLEopO2lmKF9lPT1udWxsJiZOLmNvbXBpbGUmJihrLnBhcnRpYWxzW2submFtZV09Ti5jb21waWxlKHksbS5jb21waWxlck9wdGlvbnMsTiksX2U9ay5wYXJ0aWFsc1trLm5hbWVdKEMsSikpLF9lIT1udWxsKXtpZihrLmluZGVudCl7Zm9yKHZhciBTZT1fZS5zcGxpdChgXG5gKSxCZT0wLHJ0PVNlLmxlbmd0aDtCZTxydCYmISghU2VbQmVdJiZCZSsxPT09cnQpO0JlKyspU2VbQmVdPWsuaW5kZW50K1NlW0JlXTtfZT1TZS5qb2luKGBcbmApfXJldHVybiBfZX1lbHNlIHRocm93IG5ldyBzLmRlZmF1bHQoXCJUaGUgcGFydGlhbCBcIitrLm5hbWUrXCIgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZVwiKX12YXIgTD17c3RyaWN0OmZ1bmN0aW9uKHksQyxrKXtpZigheXx8IShDIGluIHkpKXRocm93IG5ldyBzLmRlZmF1bHQoJ1wiJytDKydcIiBub3QgZGVmaW5lZCBpbiAnK3kse2xvYzprfSk7cmV0dXJuIEwubG9va3VwUHJvcGVydHkoeSxDKX0sbG9va3VwUHJvcGVydHk6ZnVuY3Rpb24oeSxDKXt2YXIgaz15W0NdO2lmKGs9PW51bGx8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LEMpfHxSLnJlc3VsdElzQWxsb3dlZChrLEwucHJvdG9BY2Nlc3NDb250cm9sLEMpKXJldHVybiBrfSxsb29rdXA6ZnVuY3Rpb24oeSxDKXtmb3IodmFyIGs9eS5sZW5ndGgsSj0wO0o8aztKKyspe3ZhciBfZT15W0pdJiZMLmxvb2t1cFByb3BlcnR5KHlbSl0sQyk7aWYoX2UhPW51bGwpcmV0dXJuIHlbSl1bQ119fSxsYW1iZGE6ZnVuY3Rpb24oeSxDKXtyZXR1cm4gdHlwZW9mIHk9PVwiZnVuY3Rpb25cIj95LmNhbGwoQyk6eX0sZXNjYXBlRXhwcmVzc2lvbjpvLmVzY2FwZUV4cHJlc3Npb24saW52b2tlUGFydGlhbDpiLGZuOmZ1bmN0aW9uKHkpe3ZhciBDPW1beV07cmV0dXJuIEMuZGVjb3JhdG9yPW1beStcIl9kXCJdLEN9LHByb2dyYW1zOltdLHByb2dyYW06ZnVuY3Rpb24oeSxDLGssSixfZSl7dmFyIFNlPXRoaXMucHJvZ3JhbXNbeV0sQmU9dGhpcy5mbih5KTtyZXR1cm4gQ3x8X2V8fEp8fGs/U2U9bCh0aGlzLHksQmUsQyxrLEosX2UpOlNlfHwoU2U9dGhpcy5wcm9ncmFtc1t5XT1sKHRoaXMseSxCZSkpLFNlfSxkYXRhOmZ1bmN0aW9uKHksQyl7Zm9yKDt5JiZDLS07KXk9eS5fcGFyZW50O3JldHVybiB5fSxtZXJnZUlmTmVlZGVkOmZ1bmN0aW9uKHksQyl7dmFyIGs9eXx8QztyZXR1cm4geSYmQyYmeSE9PUMmJihrPW8uZXh0ZW5kKHt9LEMseSkpLGt9LG51bGxDb250ZXh0Ok9iamVjdC5zZWFsKHt9KSxub29wOk4uVk0ubm9vcCxjb21waWxlckluZm86bS5jb21waWxlcn07ZnVuY3Rpb24gdih5KXt2YXIgQz1hcmd1bWVudHMubGVuZ3RoPD0xfHxhcmd1bWVudHNbMV09PT12b2lkIDA/e306YXJndW1lbnRzWzFdLGs9Qy5kYXRhO3YuX3NldHVwKEMpLCFDLnBhcnRpYWwmJm0udXNlRGF0YSYmKGs9Uyh5LGspKTt2YXIgSj12b2lkIDAsX2U9bS51c2VCbG9ja1BhcmFtcz9bXTp2b2lkIDA7bS51c2VEZXB0aHMmJihDLmRlcHRocz9KPXkhPUMuZGVwdGhzWzBdP1t5XS5jb25jYXQoQy5kZXB0aHMpOkMuZGVwdGhzOko9W3ldKTtmdW5jdGlvbiBTZShCZSl7cmV0dXJuXCJcIittLm1haW4oTCxCZSxMLmhlbHBlcnMsTC5wYXJ0aWFscyxrLF9lLEopfXJldHVybiBTZT1kKG0ubWFpbixTZSxMLEMuZGVwdGhzfHxbXSxrLF9lKSxTZSh5LEMpfXJldHVybiB2LmlzVG9wPSEwLHYuX3NldHVwPWZ1bmN0aW9uKHkpe2lmKHkucGFydGlhbClMLnByb3RvQWNjZXNzQ29udHJvbD15LnByb3RvQWNjZXNzQ29udHJvbCxMLmhlbHBlcnM9eS5oZWxwZXJzLEwucGFydGlhbHM9eS5wYXJ0aWFscyxMLmRlY29yYXRvcnM9eS5kZWNvcmF0b3JzLEwuaG9va3M9eS5ob29rcztlbHNle3ZhciBDPW8uZXh0ZW5kKHt9LE4uaGVscGVycyx5LmhlbHBlcnMpO2coQyxMKSxMLmhlbHBlcnM9QyxtLnVzZVBhcnRpYWwmJihMLnBhcnRpYWxzPUwubWVyZ2VJZk5lZWRlZCh5LnBhcnRpYWxzLE4ucGFydGlhbHMpKSwobS51c2VQYXJ0aWFsfHxtLnVzZURlY29yYXRvcnMpJiYoTC5kZWNvcmF0b3JzPW8uZXh0ZW5kKHt9LE4uZGVjb3JhdG9ycyx5LmRlY29yYXRvcnMpKSxMLmhvb2tzPXt9LEwucHJvdG9BY2Nlc3NDb250cm9sPVIuY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sKHkpO3ZhciBrPXkuYWxsb3dDYWxsc1RvSGVscGVyTWlzc2luZ3x8STtjLm1vdmVIZWxwZXJUb0hvb2tzKEwsXCJoZWxwZXJNaXNzaW5nXCIsayksYy5tb3ZlSGVscGVyVG9Ib29rcyhMLFwiYmxvY2tIZWxwZXJNaXNzaW5nXCIsayl9fSx2Ll9jaGlsZD1mdW5jdGlvbih5LEMsayxKKXtpZihtLnVzZUJsb2NrUGFyYW1zJiYhayl0aHJvdyBuZXcgcy5kZWZhdWx0KFwibXVzdCBwYXNzIGJsb2NrIHBhcmFtc1wiKTtpZihtLnVzZURlcHRocyYmIUopdGhyb3cgbmV3IHMuZGVmYXVsdChcIm11c3QgcGFzcyBwYXJlbnQgZGVwdGhzXCIpO3JldHVybiBsKEwseSxtW3ldLEMsMCxrLEopfSx2fWZ1bmN0aW9uIGwobSxOLEksYixMLHYseSl7ZnVuY3Rpb24gQyhrKXt2YXIgSj1hcmd1bWVudHMubGVuZ3RoPD0xfHxhcmd1bWVudHNbMV09PT12b2lkIDA/e306YXJndW1lbnRzWzFdLF9lPXk7cmV0dXJuIHkmJmshPXlbMF0mJiEoaz09PW0ubnVsbENvbnRleHQmJnlbMF09PT1udWxsKSYmKF9lPVtrXS5jb25jYXQoeSkpLEkobSxrLG0uaGVscGVycyxtLnBhcnRpYWxzLEouZGF0YXx8Yix2JiZbSi5ibG9ja1BhcmFtc10uY29uY2F0KHYpLF9lKX1yZXR1cm4gQz1kKEksQyxtLHksYix2KSxDLnByb2dyYW09TixDLmRlcHRoPXk/eS5sZW5ndGg6MCxDLmJsb2NrUGFyYW1zPUx8fDAsQ31mdW5jdGlvbiBfKG0sTixJKXtyZXR1cm4gbT8hbS5jYWxsJiYhSS5uYW1lJiYoSS5uYW1lPW0sbT1JLnBhcnRpYWxzW21dKTpJLm5hbWU9PT1cIkBwYXJ0aWFsLWJsb2NrXCI/bT1JLmRhdGFbXCJwYXJ0aWFsLWJsb2NrXCJdOm09SS5wYXJ0aWFsc1tJLm5hbWVdLG19ZnVuY3Rpb24gRShtLE4sSSl7dmFyIGI9SS5kYXRhJiZJLmRhdGFbXCJwYXJ0aWFsLWJsb2NrXCJdO0kucGFydGlhbD0hMCxJLmlkcyYmKEkuZGF0YS5jb250ZXh0UGF0aD1JLmlkc1swXXx8SS5kYXRhLmNvbnRleHRQYXRoKTt2YXIgTD12b2lkIDA7aWYoSS5mbiYmSS5mbiE9PWgmJmZ1bmN0aW9uKCl7SS5kYXRhPWEuY3JlYXRlRnJhbWUoSS5kYXRhKTt2YXIgdj1JLmZuO0w9SS5kYXRhW1wicGFydGlhbC1ibG9ja1wiXT1mdW5jdGlvbih5KXt2YXIgQz1hcmd1bWVudHMubGVuZ3RoPD0xfHxhcmd1bWVudHNbMV09PT12b2lkIDA/e306YXJndW1lbnRzWzFdO3JldHVybiBDLmRhdGE9YS5jcmVhdGVGcmFtZShDLmRhdGEpLEMuZGF0YVtcInBhcnRpYWwtYmxvY2tcIl09Yix2KHksQyl9LHYucGFydGlhbHMmJihJLnBhcnRpYWxzPW8uZXh0ZW5kKHt9LEkucGFydGlhbHMsdi5wYXJ0aWFscykpfSgpLG09PT12b2lkIDAmJkwmJihtPUwpLG09PT12b2lkIDApdGhyb3cgbmV3IHMuZGVmYXVsdChcIlRoZSBwYXJ0aWFsIFwiK0kubmFtZStcIiBjb3VsZCBub3QgYmUgZm91bmRcIik7aWYobSBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBtKE4sSSl9ZnVuY3Rpb24gaCgpe3JldHVyblwiXCJ9ZnVuY3Rpb24gUyhtLE4pe3JldHVybighTnx8IShcInJvb3RcImluIE4pKSYmKE49Tj9hLmNyZWF0ZUZyYW1lKE4pOnt9LE4ucm9vdD1tKSxOfWZ1bmN0aW9uIGQobSxOLEksYixMLHYpe2lmKG0uZGVjb3JhdG9yKXt2YXIgeT17fTtOPW0uZGVjb3JhdG9yKE4seSxJLGImJmJbMF0sTCx2LGIpLG8uZXh0ZW5kKE4seSl9cmV0dXJuIE59ZnVuY3Rpb24gZyhtLE4pe09iamVjdC5rZXlzKG0pLmZvckVhY2goZnVuY3Rpb24oSSl7dmFyIGI9bVtJXTttW0ldPU8oYixOKX0pfWZ1bmN0aW9uIE8obSxOKXt2YXIgST1OLmxvb2t1cFByb3BlcnR5O3JldHVybiB1LndyYXBIZWxwZXIobSxmdW5jdGlvbihiKXtyZXR1cm4gby5leHRlbmQoe2xvb2t1cFByb3BlcnR5Okl9LGIpfSl9fSksblM9USgoZSx0KT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMCxlLmRlZmF1bHQ9ZnVuY3Rpb24ocil7dmFyIG49dHlwZW9mIGJvPFwidVwiP2JvOndpbmRvdyxvPW4uSGFuZGxlYmFycztyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbi5IYW5kbGViYXJzPT09ciYmKG4uSGFuZGxlYmFycz1vKSxyfX0sdC5leHBvcnRzPWUuZGVmYXVsdH0pLEZ5PVEoKGUsdCk9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITA7ZnVuY3Rpb24gcihkKXtyZXR1cm4gZCYmZC5fX2VzTW9kdWxlP2Q6e2RlZmF1bHQ6ZH19ZnVuY3Rpb24gbihkKXtpZihkJiZkLl9fZXNNb2R1bGUpcmV0dXJuIGQ7dmFyIGc9e307aWYoZCE9bnVsbClmb3IodmFyIE8gaW4gZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCxPKSYmKGdbT109ZFtPXSk7cmV0dXJuIGcuZGVmYXVsdD1kLGd9dmFyIG89VnUoKSxpPW4obykscz1NeSgpLGE9cihzKSxjPVN0KCksdT1yKGMpLFI9dHQoKSxmPW4oUikscD1CeSgpLGw9bihwKSxfPW5TKCksRT1yKF8pO2Z1bmN0aW9uIGgoKXt2YXIgZD1uZXcgaS5IYW5kbGViYXJzRW52aXJvbm1lbnQ7cmV0dXJuIGYuZXh0ZW5kKGQsaSksZC5TYWZlU3RyaW5nPWEuZGVmYXVsdCxkLkV4Y2VwdGlvbj11LmRlZmF1bHQsZC5VdGlscz1mLGQuZXNjYXBlRXhwcmVzc2lvbj1mLmVzY2FwZUV4cHJlc3Npb24sZC5WTT1sLGQudGVtcGxhdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIGwudGVtcGxhdGUoZyxkKX0sZH12YXIgUz1oKCk7Uy5jcmVhdGU9aCxFLmRlZmF1bHQoUyksUy5kZWZhdWx0PVMsZS5kZWZhdWx0PVMsdC5leHBvcnRzPWUuZGVmYXVsdH0pLG9TPVEoKGUsdCk9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITA7dmFyIHI9e2hlbHBlcnM6e2hlbHBlckV4cHJlc3Npb246ZnVuY3Rpb24obil7cmV0dXJuIG4udHlwZT09PVwiU3ViRXhwcmVzc2lvblwifHwobi50eXBlPT09XCJNdXN0YWNoZVN0YXRlbWVudFwifHxuLnR5cGU9PT1cIkJsb2NrU3RhdGVtZW50XCIpJiYhIShuLnBhcmFtcyYmbi5wYXJhbXMubGVuZ3RofHxuLmhhc2gpfSxzY29wZWRJZDpmdW5jdGlvbihuKXtyZXR1cm4vXlxcLnx0aGlzXFxiLy50ZXN0KG4ub3JpZ2luYWwpfSxzaW1wbGVJZDpmdW5jdGlvbihuKXtyZXR1cm4gbi5wYXJ0cy5sZW5ndGg9PT0xJiYhci5oZWxwZXJzLnNjb3BlZElkKG4pJiYhbi5kZXB0aH19fTtlLmRlZmF1bHQ9cix0LmV4cG9ydHM9ZS5kZWZhdWx0fSksdnk9USgoZSx0KT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMDt2YXIgcj1mdW5jdGlvbigpe3ZhciBuPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIscm9vdDozLHByb2dyYW06NCxFT0Y6NSxwcm9ncmFtX3JlcGV0aXRpb24wOjYsc3RhdGVtZW50OjcsbXVzdGFjaGU6OCxibG9jazo5LHJhd0Jsb2NrOjEwLHBhcnRpYWw6MTEscGFydGlhbEJsb2NrOjEyLGNvbnRlbnQ6MTMsQ09NTUVOVDoxNCxDT05URU5UOjE1LG9wZW5SYXdCbG9jazoxNixyYXdCbG9ja19yZXBldGl0aW9uMDoxNyxFTkRfUkFXX0JMT0NLOjE4LE9QRU5fUkFXX0JMT0NLOjE5LGhlbHBlck5hbWU6MjAsb3BlblJhd0Jsb2NrX3JlcGV0aXRpb24wOjIxLG9wZW5SYXdCbG9ja19vcHRpb24wOjIyLENMT1NFX1JBV19CTE9DSzoyMyxvcGVuQmxvY2s6MjQsYmxvY2tfb3B0aW9uMDoyNSxjbG9zZUJsb2NrOjI2LG9wZW5JbnZlcnNlOjI3LGJsb2NrX29wdGlvbjE6MjgsT1BFTl9CTE9DSzoyOSxvcGVuQmxvY2tfcmVwZXRpdGlvbjA6MzAsb3BlbkJsb2NrX29wdGlvbjA6MzEsb3BlbkJsb2NrX29wdGlvbjE6MzIsQ0xPU0U6MzMsT1BFTl9JTlZFUlNFOjM0LG9wZW5JbnZlcnNlX3JlcGV0aXRpb24wOjM1LG9wZW5JbnZlcnNlX29wdGlvbjA6MzYsb3BlbkludmVyc2Vfb3B0aW9uMTozNyxvcGVuSW52ZXJzZUNoYWluOjM4LE9QRU5fSU5WRVJTRV9DSEFJTjozOSxvcGVuSW52ZXJzZUNoYWluX3JlcGV0aXRpb24wOjQwLG9wZW5JbnZlcnNlQ2hhaW5fb3B0aW9uMDo0MSxvcGVuSW52ZXJzZUNoYWluX29wdGlvbjE6NDIsaW52ZXJzZUFuZFByb2dyYW06NDMsSU5WRVJTRTo0NCxpbnZlcnNlQ2hhaW46NDUsaW52ZXJzZUNoYWluX29wdGlvbjA6NDYsT1BFTl9FTkRCTE9DSzo0NyxPUEVOOjQ4LG11c3RhY2hlX3JlcGV0aXRpb24wOjQ5LG11c3RhY2hlX29wdGlvbjA6NTAsT1BFTl9VTkVTQ0FQRUQ6NTEsbXVzdGFjaGVfcmVwZXRpdGlvbjE6NTIsbXVzdGFjaGVfb3B0aW9uMTo1MyxDTE9TRV9VTkVTQ0FQRUQ6NTQsT1BFTl9QQVJUSUFMOjU1LHBhcnRpYWxOYW1lOjU2LHBhcnRpYWxfcmVwZXRpdGlvbjA6NTcscGFydGlhbF9vcHRpb24wOjU4LG9wZW5QYXJ0aWFsQmxvY2s6NTksT1BFTl9QQVJUSUFMX0JMT0NLOjYwLG9wZW5QYXJ0aWFsQmxvY2tfcmVwZXRpdGlvbjA6NjEsb3BlblBhcnRpYWxCbG9ja19vcHRpb24wOjYyLHBhcmFtOjYzLHNleHByOjY0LE9QRU5fU0VYUFI6NjUsc2V4cHJfcmVwZXRpdGlvbjA6NjYsc2V4cHJfb3B0aW9uMDo2NyxDTE9TRV9TRVhQUjo2OCxoYXNoOjY5LGhhc2hfcmVwZXRpdGlvbl9wbHVzMDo3MCxoYXNoU2VnbWVudDo3MSxJRDo3MixFUVVBTFM6NzMsYmxvY2tQYXJhbXM6NzQsT1BFTl9CTE9DS19QQVJBTVM6NzUsYmxvY2tQYXJhbXNfcmVwZXRpdGlvbl9wbHVzMDo3NixDTE9TRV9CTE9DS19QQVJBTVM6NzcscGF0aDo3OCxkYXRhTmFtZTo3OSxTVFJJTkc6ODAsTlVNQkVSOjgxLEJPT0xFQU46ODIsVU5ERUZJTkVEOjgzLE5VTEw6ODQsREFUQTo4NSxwYXRoU2VnbWVudHM6ODYsU0VQOjg3LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6XCJlcnJvclwiLDU6XCJFT0ZcIiwxNDpcIkNPTU1FTlRcIiwxNTpcIkNPTlRFTlRcIiwxODpcIkVORF9SQVdfQkxPQ0tcIiwxOTpcIk9QRU5fUkFXX0JMT0NLXCIsMjM6XCJDTE9TRV9SQVdfQkxPQ0tcIiwyOTpcIk9QRU5fQkxPQ0tcIiwzMzpcIkNMT1NFXCIsMzQ6XCJPUEVOX0lOVkVSU0VcIiwzOTpcIk9QRU5fSU5WRVJTRV9DSEFJTlwiLDQ0OlwiSU5WRVJTRVwiLDQ3OlwiT1BFTl9FTkRCTE9DS1wiLDQ4OlwiT1BFTlwiLDUxOlwiT1BFTl9VTkVTQ0FQRURcIiw1NDpcIkNMT1NFX1VORVNDQVBFRFwiLDU1OlwiT1BFTl9QQVJUSUFMXCIsNjA6XCJPUEVOX1BBUlRJQUxfQkxPQ0tcIiw2NTpcIk9QRU5fU0VYUFJcIiw2ODpcIkNMT1NFX1NFWFBSXCIsNzI6XCJJRFwiLDczOlwiRVFVQUxTXCIsNzU6XCJPUEVOX0JMT0NLX1BBUkFNU1wiLDc3OlwiQ0xPU0VfQkxPQ0tfUEFSQU1TXCIsODA6XCJTVFJJTkdcIiw4MTpcIk5VTUJFUlwiLDgyOlwiQk9PTEVBTlwiLDgzOlwiVU5ERUZJTkVEXCIsODQ6XCJOVUxMXCIsODU6XCJEQVRBXCIsODc6XCJTRVBcIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFs0LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFsxMywxXSxbMTAsM10sWzE2LDVdLFs5LDRdLFs5LDRdLFsyNCw2XSxbMjcsNl0sWzM4LDZdLFs0MywyXSxbNDUsM10sWzQ1LDFdLFsyNiwzXSxbOCw1XSxbOCw1XSxbMTEsNV0sWzEyLDNdLFs1OSw1XSxbNjMsMV0sWzYzLDFdLFs2NCw1XSxbNjksMV0sWzcxLDNdLFs3NCwzXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzU2LDFdLFs1NiwxXSxbNzksMl0sWzc4LDFdLFs4NiwzXSxbODYsMV0sWzYsMF0sWzYsMl0sWzE3LDBdLFsxNywyXSxbMjEsMF0sWzIxLDJdLFsyMiwwXSxbMjIsMV0sWzI1LDBdLFsyNSwxXSxbMjgsMF0sWzI4LDFdLFszMCwwXSxbMzAsMl0sWzMxLDBdLFszMSwxXSxbMzIsMF0sWzMyLDFdLFszNSwwXSxbMzUsMl0sWzM2LDBdLFszNiwxXSxbMzcsMF0sWzM3LDFdLFs0MCwwXSxbNDAsMl0sWzQxLDBdLFs0MSwxXSxbNDIsMF0sWzQyLDFdLFs0NiwwXSxbNDYsMV0sWzQ5LDBdLFs0OSwyXSxbNTAsMF0sWzUwLDFdLFs1MiwwXSxbNTIsMl0sWzUzLDBdLFs1MywxXSxbNTcsMF0sWzU3LDJdLFs1OCwwXSxbNTgsMV0sWzYxLDBdLFs2MSwyXSxbNjIsMF0sWzYyLDFdLFs2NiwwXSxbNjYsMl0sWzY3LDBdLFs2NywxXSxbNzAsMV0sWzcwLDJdLFs3NiwxXSxbNzYsMl1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24ocyxhLGMsdSxSLGYscCl7dmFyIGw9Zi5sZW5ndGgtMTtzd2l0Y2goUil7Y2FzZSAxOnJldHVybiBmW2wtMV07Y2FzZSAyOnRoaXMuJD11LnByZXBhcmVQcm9ncmFtKGZbbF0pO2JyZWFrO2Nhc2UgMzp0aGlzLiQ9ZltsXTticmVhaztjYXNlIDQ6dGhpcy4kPWZbbF07YnJlYWs7Y2FzZSA1OnRoaXMuJD1mW2xdO2JyZWFrO2Nhc2UgNjp0aGlzLiQ9ZltsXTticmVhaztjYXNlIDc6dGhpcy4kPWZbbF07YnJlYWs7Y2FzZSA4OnRoaXMuJD1mW2xdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9e3R5cGU6XCJDb21tZW50U3RhdGVtZW50XCIsdmFsdWU6dS5zdHJpcENvbW1lbnQoZltsXSksc3RyaXA6dS5zdHJpcEZsYWdzKGZbbF0sZltsXSksbG9jOnUubG9jSW5mbyh0aGlzLl8kKX07YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9e3R5cGU6XCJDb250ZW50U3RhdGVtZW50XCIsb3JpZ2luYWw6ZltsXSx2YWx1ZTpmW2xdLGxvYzp1LmxvY0luZm8odGhpcy5fJCl9O2JyZWFrO2Nhc2UgMTE6dGhpcy4kPXUucHJlcGFyZVJhd0Jsb2NrKGZbbC0yXSxmW2wtMV0sZltsXSx0aGlzLl8kKTticmVhaztjYXNlIDEyOnRoaXMuJD17cGF0aDpmW2wtM10scGFyYW1zOmZbbC0yXSxoYXNoOmZbbC0xXX07YnJlYWs7Y2FzZSAxMzp0aGlzLiQ9dS5wcmVwYXJlQmxvY2soZltsLTNdLGZbbC0yXSxmW2wtMV0sZltsXSwhMSx0aGlzLl8kKTticmVhaztjYXNlIDE0OnRoaXMuJD11LnByZXBhcmVCbG9jayhmW2wtM10sZltsLTJdLGZbbC0xXSxmW2xdLCEwLHRoaXMuXyQpO2JyZWFrO2Nhc2UgMTU6dGhpcy4kPXtvcGVuOmZbbC01XSxwYXRoOmZbbC00XSxwYXJhbXM6ZltsLTNdLGhhc2g6ZltsLTJdLGJsb2NrUGFyYW1zOmZbbC0xXSxzdHJpcDp1LnN0cmlwRmxhZ3MoZltsLTVdLGZbbF0pfTticmVhaztjYXNlIDE2OnRoaXMuJD17cGF0aDpmW2wtNF0scGFyYW1zOmZbbC0zXSxoYXNoOmZbbC0yXSxibG9ja1BhcmFtczpmW2wtMV0sc3RyaXA6dS5zdHJpcEZsYWdzKGZbbC01XSxmW2xdKX07YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9e3BhdGg6ZltsLTRdLHBhcmFtczpmW2wtM10saGFzaDpmW2wtMl0sYmxvY2tQYXJhbXM6ZltsLTFdLHN0cmlwOnUuc3RyaXBGbGFncyhmW2wtNV0sZltsXSl9O2JyZWFrO2Nhc2UgMTg6dGhpcy4kPXtzdHJpcDp1LnN0cmlwRmxhZ3MoZltsLTFdLGZbbC0xXSkscHJvZ3JhbTpmW2xdfTticmVhaztjYXNlIDE5OnZhciBfPXUucHJlcGFyZUJsb2NrKGZbbC0yXSxmW2wtMV0sZltsXSxmW2xdLCExLHRoaXMuXyQpLEU9dS5wcmVwYXJlUHJvZ3JhbShbX10sZltsLTFdLmxvYyk7RS5jaGFpbmVkPSEwLHRoaXMuJD17c3RyaXA6ZltsLTJdLnN0cmlwLHByb2dyYW06RSxjaGFpbjohMH07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9ZltsXTticmVhaztjYXNlIDIxOnRoaXMuJD17cGF0aDpmW2wtMV0sc3RyaXA6dS5zdHJpcEZsYWdzKGZbbC0yXSxmW2xdKX07YnJlYWs7Y2FzZSAyMjp0aGlzLiQ9dS5wcmVwYXJlTXVzdGFjaGUoZltsLTNdLGZbbC0yXSxmW2wtMV0sZltsLTRdLHUuc3RyaXBGbGFncyhmW2wtNF0sZltsXSksdGhpcy5fJCk7YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9dS5wcmVwYXJlTXVzdGFjaGUoZltsLTNdLGZbbC0yXSxmW2wtMV0sZltsLTRdLHUuc3RyaXBGbGFncyhmW2wtNF0sZltsXSksdGhpcy5fJCk7YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9e3R5cGU6XCJQYXJ0aWFsU3RhdGVtZW50XCIsbmFtZTpmW2wtM10scGFyYW1zOmZbbC0yXSxoYXNoOmZbbC0xXSxpbmRlbnQ6XCJcIixzdHJpcDp1LnN0cmlwRmxhZ3MoZltsLTRdLGZbbF0pLGxvYzp1LmxvY0luZm8odGhpcy5fJCl9O2JyZWFrO2Nhc2UgMjU6dGhpcy4kPXUucHJlcGFyZVBhcnRpYWxCbG9jayhmW2wtMl0sZltsLTFdLGZbbF0sdGhpcy5fJCk7YnJlYWs7Y2FzZSAyNjp0aGlzLiQ9e3BhdGg6ZltsLTNdLHBhcmFtczpmW2wtMl0saGFzaDpmW2wtMV0sc3RyaXA6dS5zdHJpcEZsYWdzKGZbbC00XSxmW2xdKX07YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9ZltsXTticmVhaztjYXNlIDI4OnRoaXMuJD1mW2xdO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPXt0eXBlOlwiU3ViRXhwcmVzc2lvblwiLHBhdGg6ZltsLTNdLHBhcmFtczpmW2wtMl0saGFzaDpmW2wtMV0sbG9jOnUubG9jSW5mbyh0aGlzLl8kKX07YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9e3R5cGU6XCJIYXNoXCIscGFpcnM6ZltsXSxsb2M6dS5sb2NJbmZvKHRoaXMuXyQpfTticmVhaztjYXNlIDMxOnRoaXMuJD17dHlwZTpcIkhhc2hQYWlyXCIsa2V5OnUuaWQoZltsLTJdKSx2YWx1ZTpmW2xdLGxvYzp1LmxvY0luZm8odGhpcy5fJCl9O2JyZWFrO2Nhc2UgMzI6dGhpcy4kPXUuaWQoZltsLTFdKTticmVhaztjYXNlIDMzOnRoaXMuJD1mW2xdO2JyZWFrO2Nhc2UgMzQ6dGhpcy4kPWZbbF07YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9e3R5cGU6XCJTdHJpbmdMaXRlcmFsXCIsdmFsdWU6ZltsXSxvcmlnaW5hbDpmW2xdLGxvYzp1LmxvY0luZm8odGhpcy5fJCl9O2JyZWFrO2Nhc2UgMzY6dGhpcy4kPXt0eXBlOlwiTnVtYmVyTGl0ZXJhbFwiLHZhbHVlOk51bWJlcihmW2xdKSxvcmlnaW5hbDpOdW1iZXIoZltsXSksbG9jOnUubG9jSW5mbyh0aGlzLl8kKX07YnJlYWs7Y2FzZSAzNzp0aGlzLiQ9e3R5cGU6XCJCb29sZWFuTGl0ZXJhbFwiLHZhbHVlOmZbbF09PT1cInRydWVcIixvcmlnaW5hbDpmW2xdPT09XCJ0cnVlXCIsbG9jOnUubG9jSW5mbyh0aGlzLl8kKX07YnJlYWs7Y2FzZSAzODp0aGlzLiQ9e3R5cGU6XCJVbmRlZmluZWRMaXRlcmFsXCIsb3JpZ2luYWw6dm9pZCAwLHZhbHVlOnZvaWQgMCxsb2M6dS5sb2NJbmZvKHRoaXMuXyQpfTticmVhaztjYXNlIDM5OnRoaXMuJD17dHlwZTpcIk51bGxMaXRlcmFsXCIsb3JpZ2luYWw6bnVsbCx2YWx1ZTpudWxsLGxvYzp1LmxvY0luZm8odGhpcy5fJCl9O2JyZWFrO2Nhc2UgNDA6dGhpcy4kPWZbbF07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9ZltsXTticmVhaztjYXNlIDQyOnRoaXMuJD11LnByZXBhcmVQYXRoKCEwLGZbbF0sdGhpcy5fJCk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9dS5wcmVwYXJlUGF0aCghMSxmW2xdLHRoaXMuXyQpO2JyZWFrO2Nhc2UgNDQ6ZltsLTJdLnB1c2goe3BhcnQ6dS5pZChmW2xdKSxvcmlnaW5hbDpmW2xdLHNlcGFyYXRvcjpmW2wtMV19KSx0aGlzLiQ9ZltsLTJdO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPVt7cGFydDp1LmlkKGZbbF0pLG9yaWdpbmFsOmZbbF19XTticmVhaztjYXNlIDQ2OnRoaXMuJD1bXTticmVhaztjYXNlIDQ3OmZbbC0xXS5wdXNoKGZbbF0pO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDk6ZltsLTFdLnB1c2goZltsXSk7YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9W107YnJlYWs7Y2FzZSA1MTpmW2wtMV0ucHVzaChmW2xdKTticmVhaztjYXNlIDU4OnRoaXMuJD1bXTticmVhaztjYXNlIDU5OmZbbC0xXS5wdXNoKGZbbF0pO2JyZWFrO2Nhc2UgNjQ6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNjU6ZltsLTFdLnB1c2goZltsXSk7YnJlYWs7Y2FzZSA3MDp0aGlzLiQ9W107YnJlYWs7Y2FzZSA3MTpmW2wtMV0ucHVzaChmW2xdKTticmVhaztjYXNlIDc4OnRoaXMuJD1bXTticmVhaztjYXNlIDc5OmZbbC0xXS5wdXNoKGZbbF0pO2JyZWFrO2Nhc2UgODI6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODM6ZltsLTFdLnB1c2goZltsXSk7YnJlYWs7Y2FzZSA4Njp0aGlzLiQ9W107YnJlYWs7Y2FzZSA4NzpmW2wtMV0ucHVzaChmW2xdKTticmVhaztjYXNlIDkwOnRoaXMuJD1bXTticmVhaztjYXNlIDkxOmZbbC0xXS5wdXNoKGZbbF0pO2JyZWFrO2Nhc2UgOTQ6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgOTU6ZltsLTFdLnB1c2goZltsXSk7YnJlYWs7Y2FzZSA5ODp0aGlzLiQ9W2ZbbF1dO2JyZWFrO2Nhc2UgOTk6ZltsLTFdLnB1c2goZltsXSk7YnJlYWs7Y2FzZSAxMDA6dGhpcy4kPVtmW2xdXTticmVhaztjYXNlIDEwMTpmW2wtMV0ucHVzaChmW2xdKTticmVha319LHRhYmxlOlt7MzoxLDQ6Miw1OlsyLDQ2XSw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0ODpbMiw0Nl0sNTE6WzIsNDZdLDU1OlsyLDQ2XSw2MDpbMiw0Nl19LHsxOlszXX0sezU6WzEsNF19LHs1OlsyLDJdLDc6NSw4OjYsOTo3LDEwOjgsMTE6OSwxMjoxMCwxMzoxMSwxNDpbMSwxMl0sMTU6WzEsMjBdLDE2OjE3LDE5OlsxLDIzXSwyNDoxNSwyNzoxNiwyOTpbMSwyMV0sMzQ6WzEsMjJdLDM5OlsyLDJdLDQ0OlsyLDJdLDQ3OlsyLDJdLDQ4OlsxLDEzXSw1MTpbMSwxNF0sNTU6WzEsMThdLDU5OjE5LDYwOlsxLDI0XX0sezE6WzIsMV19LHs1OlsyLDQ3XSwxNDpbMiw0N10sMTU6WzIsNDddLDE5OlsyLDQ3XSwyOTpbMiw0N10sMzQ6WzIsNDddLDM5OlsyLDQ3XSw0NDpbMiw0N10sNDc6WzIsNDddLDQ4OlsyLDQ3XSw1MTpbMiw0N10sNTU6WzIsNDddLDYwOlsyLDQ3XX0sezU6WzIsM10sMTQ6WzIsM10sMTU6WzIsM10sMTk6WzIsM10sMjk6WzIsM10sMzQ6WzIsM10sMzk6WzIsM10sNDQ6WzIsM10sNDc6WzIsM10sNDg6WzIsM10sNTE6WzIsM10sNTU6WzIsM10sNjA6WzIsM119LHs1OlsyLDRdLDE0OlsyLDRdLDE1OlsyLDRdLDE5OlsyLDRdLDI5OlsyLDRdLDM0OlsyLDRdLDM5OlsyLDRdLDQ0OlsyLDRdLDQ3OlsyLDRdLDQ4OlsyLDRdLDUxOlsyLDRdLDU1OlsyLDRdLDYwOlsyLDRdfSx7NTpbMiw1XSwxNDpbMiw1XSwxNTpbMiw1XSwxOTpbMiw1XSwyOTpbMiw1XSwzNDpbMiw1XSwzOTpbMiw1XSw0NDpbMiw1XSw0NzpbMiw1XSw0ODpbMiw1XSw1MTpbMiw1XSw1NTpbMiw1XSw2MDpbMiw1XX0sezU6WzIsNl0sMTQ6WzIsNl0sMTU6WzIsNl0sMTk6WzIsNl0sMjk6WzIsNl0sMzQ6WzIsNl0sMzk6WzIsNl0sNDQ6WzIsNl0sNDc6WzIsNl0sNDg6WzIsNl0sNTE6WzIsNl0sNTU6WzIsNl0sNjA6WzIsNl19LHs1OlsyLDddLDE0OlsyLDddLDE1OlsyLDddLDE5OlsyLDddLDI5OlsyLDddLDM0OlsyLDddLDM5OlsyLDddLDQ0OlsyLDddLDQ3OlsyLDddLDQ4OlsyLDddLDUxOlsyLDddLDU1OlsyLDddLDYwOlsyLDddfSx7NTpbMiw4XSwxNDpbMiw4XSwxNTpbMiw4XSwxOTpbMiw4XSwyOTpbMiw4XSwzNDpbMiw4XSwzOTpbMiw4XSw0NDpbMiw4XSw0NzpbMiw4XSw0ODpbMiw4XSw1MTpbMiw4XSw1NTpbMiw4XSw2MDpbMiw4XX0sezU6WzIsOV0sMTQ6WzIsOV0sMTU6WzIsOV0sMTk6WzIsOV0sMjk6WzIsOV0sMzQ6WzIsOV0sMzk6WzIsOV0sNDQ6WzIsOV0sNDc6WzIsOV0sNDg6WzIsOV0sNTE6WzIsOV0sNTU6WzIsOV0sNjA6WzIsOV19LHsyMDoyNSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDozNiw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs0OjM3LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ6MzgsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDQ6WzIsNDZdLDQ3OlsyLDQ2XSw0ODpbMiw0Nl0sNTE6WzIsNDZdLDU1OlsyLDQ2XSw2MDpbMiw0Nl19LHsxNTpbMiw0OF0sMTc6MzksMTg6WzIsNDhdfSx7MjA6NDEsNTY6NDAsNjQ6NDIsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6NDQsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezU6WzIsMTBdLDE0OlsyLDEwXSwxNTpbMiwxMF0sMTg6WzIsMTBdLDE5OlsyLDEwXSwyOTpbMiwxMF0sMzQ6WzIsMTBdLDM5OlsyLDEwXSw0NDpbMiwxMF0sNDc6WzIsMTBdLDQ4OlsyLDEwXSw1MTpbMiwxMF0sNTU6WzIsMTBdLDYwOlsyLDEwXX0sezIwOjQ1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjQ2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjQ3LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjQxLDU2OjQ4LDY0OjQyLDY1OlsxLDQzXSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHszMzpbMiw3OF0sNDk6NDksNjU6WzIsNzhdLDcyOlsyLDc4XSw4MDpbMiw3OF0sODE6WzIsNzhdLDgyOlsyLDc4XSw4MzpbMiw3OF0sODQ6WzIsNzhdLDg1OlsyLDc4XX0sezIzOlsyLDMzXSwzMzpbMiwzM10sNTQ6WzIsMzNdLDY1OlsyLDMzXSw2ODpbMiwzM10sNzI6WzIsMzNdLDc1OlsyLDMzXSw4MDpbMiwzM10sODE6WzIsMzNdLDgyOlsyLDMzXSw4MzpbMiwzM10sODQ6WzIsMzNdLDg1OlsyLDMzXX0sezIzOlsyLDM0XSwzMzpbMiwzNF0sNTQ6WzIsMzRdLDY1OlsyLDM0XSw2ODpbMiwzNF0sNzI6WzIsMzRdLDc1OlsyLDM0XSw4MDpbMiwzNF0sODE6WzIsMzRdLDgyOlsyLDM0XSw4MzpbMiwzNF0sODQ6WzIsMzRdLDg1OlsyLDM0XX0sezIzOlsyLDM1XSwzMzpbMiwzNV0sNTQ6WzIsMzVdLDY1OlsyLDM1XSw2ODpbMiwzNV0sNzI6WzIsMzVdLDc1OlsyLDM1XSw4MDpbMiwzNV0sODE6WzIsMzVdLDgyOlsyLDM1XSw4MzpbMiwzNV0sODQ6WzIsMzVdLDg1OlsyLDM1XX0sezIzOlsyLDM2XSwzMzpbMiwzNl0sNTQ6WzIsMzZdLDY1OlsyLDM2XSw2ODpbMiwzNl0sNzI6WzIsMzZdLDc1OlsyLDM2XSw4MDpbMiwzNl0sODE6WzIsMzZdLDgyOlsyLDM2XSw4MzpbMiwzNl0sODQ6WzIsMzZdLDg1OlsyLDM2XX0sezIzOlsyLDM3XSwzMzpbMiwzN10sNTQ6WzIsMzddLDY1OlsyLDM3XSw2ODpbMiwzN10sNzI6WzIsMzddLDc1OlsyLDM3XSw4MDpbMiwzN10sODE6WzIsMzddLDgyOlsyLDM3XSw4MzpbMiwzN10sODQ6WzIsMzddLDg1OlsyLDM3XX0sezIzOlsyLDM4XSwzMzpbMiwzOF0sNTQ6WzIsMzhdLDY1OlsyLDM4XSw2ODpbMiwzOF0sNzI6WzIsMzhdLDc1OlsyLDM4XSw4MDpbMiwzOF0sODE6WzIsMzhdLDgyOlsyLDM4XSw4MzpbMiwzOF0sODQ6WzIsMzhdLDg1OlsyLDM4XX0sezIzOlsyLDM5XSwzMzpbMiwzOV0sNTQ6WzIsMzldLDY1OlsyLDM5XSw2ODpbMiwzOV0sNzI6WzIsMzldLDc1OlsyLDM5XSw4MDpbMiwzOV0sODE6WzIsMzldLDgyOlsyLDM5XSw4MzpbMiwzOV0sODQ6WzIsMzldLDg1OlsyLDM5XX0sezIzOlsyLDQzXSwzMzpbMiw0M10sNTQ6WzIsNDNdLDY1OlsyLDQzXSw2ODpbMiw0M10sNzI6WzIsNDNdLDc1OlsyLDQzXSw4MDpbMiw0M10sODE6WzIsNDNdLDgyOlsyLDQzXSw4MzpbMiw0M10sODQ6WzIsNDNdLDg1OlsyLDQzXSw4NzpbMSw1MF19LHs3MjpbMSwzNV0sODY6NTF9LHsyMzpbMiw0NV0sMzM6WzIsNDVdLDU0OlsyLDQ1XSw2NTpbMiw0NV0sNjg6WzIsNDVdLDcyOlsyLDQ1XSw3NTpbMiw0NV0sODA6WzIsNDVdLDgxOlsyLDQ1XSw4MjpbMiw0NV0sODM6WzIsNDVdLDg0OlsyLDQ1XSw4NTpbMiw0NV0sODc6WzIsNDVdfSx7NTI6NTIsNTQ6WzIsODJdLDY1OlsyLDgyXSw3MjpbMiw4Ml0sODA6WzIsODJdLDgxOlsyLDgyXSw4MjpbMiw4Ml0sODM6WzIsODJdLDg0OlsyLDgyXSw4NTpbMiw4Ml19LHsyNTo1MywzODo1NSwzOTpbMSw1N10sNDM6NTYsNDQ6WzEsNThdLDQ1OjU0LDQ3OlsyLDU0XX0sezI4OjU5LDQzOjYwLDQ0OlsxLDU4XSw0NzpbMiw1Nl19LHsxMzo2MiwxNTpbMSwyMF0sMTg6WzEsNjFdfSx7MzM6WzIsODZdLDU3OjYzLDY1OlsyLDg2XSw3MjpbMiw4Nl0sODA6WzIsODZdLDgxOlsyLDg2XSw4MjpbMiw4Nl0sODM6WzIsODZdLDg0OlsyLDg2XSw4NTpbMiw4Nl19LHszMzpbMiw0MF0sNjU6WzIsNDBdLDcyOlsyLDQwXSw4MDpbMiw0MF0sODE6WzIsNDBdLDgyOlsyLDQwXSw4MzpbMiw0MF0sODQ6WzIsNDBdLDg1OlsyLDQwXX0sezMzOlsyLDQxXSw2NTpbMiw0MV0sNzI6WzIsNDFdLDgwOlsyLDQxXSw4MTpbMiw0MV0sODI6WzIsNDFdLDgzOlsyLDQxXSw4NDpbMiw0MV0sODU6WzIsNDFdfSx7MjA6NjQsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjY6NjUsNDc6WzEsNjZdfSx7MzA6NjcsMzM6WzIsNThdLDY1OlsyLDU4XSw3MjpbMiw1OF0sNzU6WzIsNThdLDgwOlsyLDU4XSw4MTpbMiw1OF0sODI6WzIsNThdLDgzOlsyLDU4XSw4NDpbMiw1OF0sODU6WzIsNThdfSx7MzM6WzIsNjRdLDM1OjY4LDY1OlsyLDY0XSw3MjpbMiw2NF0sNzU6WzIsNjRdLDgwOlsyLDY0XSw4MTpbMiw2NF0sODI6WzIsNjRdLDgzOlsyLDY0XSw4NDpbMiw2NF0sODU6WzIsNjRdfSx7MjE6NjksMjM6WzIsNTBdLDY1OlsyLDUwXSw3MjpbMiw1MF0sODA6WzIsNTBdLDgxOlsyLDUwXSw4MjpbMiw1MF0sODM6WzIsNTBdLDg0OlsyLDUwXSw4NTpbMiw1MF19LHszMzpbMiw5MF0sNjE6NzAsNjU6WzIsOTBdLDcyOlsyLDkwXSw4MDpbMiw5MF0sODE6WzIsOTBdLDgyOlsyLDkwXSw4MzpbMiw5MF0sODQ6WzIsOTBdLDg1OlsyLDkwXX0sezIwOjc0LDMzOlsyLDgwXSw1MDo3MSw2Mzo3Miw2NDo3NSw2NTpbMSw0M10sNjk6NzMsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NzI6WzEsNzldfSx7MjM6WzIsNDJdLDMzOlsyLDQyXSw1NDpbMiw0Ml0sNjU6WzIsNDJdLDY4OlsyLDQyXSw3MjpbMiw0Ml0sNzU6WzIsNDJdLDgwOlsyLDQyXSw4MTpbMiw0Ml0sODI6WzIsNDJdLDgzOlsyLDQyXSw4NDpbMiw0Ml0sODU6WzIsNDJdLDg3OlsxLDUwXX0sezIwOjc0LDUzOjgwLDU0OlsyLDg0XSw2Mzo4MSw2NDo3NSw2NTpbMSw0M10sNjk6ODIsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjY6ODMsNDc6WzEsNjZdfSx7NDc6WzIsNTVdfSx7NDo4NCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSwzOTpbMiw0Nl0sNDQ6WzIsNDZdLDQ3OlsyLDQ2XSw0ODpbMiw0Nl0sNTE6WzIsNDZdLDU1OlsyLDQ2XSw2MDpbMiw0Nl19LHs0NzpbMiwyMF19LHsyMDo4NSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs0Ojg2LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ3OlsyLDQ2XSw0ODpbMiw0Nl0sNTE6WzIsNDZdLDU1OlsyLDQ2XSw2MDpbMiw0Nl19LHsyNjo4Nyw0NzpbMSw2Nl19LHs0NzpbMiw1N119LHs1OlsyLDExXSwxNDpbMiwxMV0sMTU6WzIsMTFdLDE5OlsyLDExXSwyOTpbMiwxMV0sMzQ6WzIsMTFdLDM5OlsyLDExXSw0NDpbMiwxMV0sNDc6WzIsMTFdLDQ4OlsyLDExXSw1MTpbMiwxMV0sNTU6WzIsMTFdLDYwOlsyLDExXX0sezE1OlsyLDQ5XSwxODpbMiw0OV19LHsyMDo3NCwzMzpbMiw4OF0sNTg6ODgsNjM6ODksNjQ6NzUsNjU6WzEsNDNdLDY5OjkwLDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezY1OlsyLDk0XSw2Njo5MSw2ODpbMiw5NF0sNzI6WzIsOTRdLDgwOlsyLDk0XSw4MTpbMiw5NF0sODI6WzIsOTRdLDgzOlsyLDk0XSw4NDpbMiw5NF0sODU6WzIsOTRdfSx7NTpbMiwyNV0sMTQ6WzIsMjVdLDE1OlsyLDI1XSwxOTpbMiwyNV0sMjk6WzIsMjVdLDM0OlsyLDI1XSwzOTpbMiwyNV0sNDQ6WzIsMjVdLDQ3OlsyLDI1XSw0ODpbMiwyNV0sNTE6WzIsMjVdLDU1OlsyLDI1XSw2MDpbMiwyNV19LHsyMDo5Miw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwzMTo5MywzMzpbMiw2MF0sNjM6OTQsNjQ6NzUsNjU6WzEsNDNdLDY5Ojk1LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3NTpbMiw2MF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwzMzpbMiw2Nl0sMzY6OTYsNjM6OTcsNjQ6NzUsNjU6WzEsNDNdLDY5Ojk4LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3NTpbMiw2Nl0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwyMjo5OSwyMzpbMiw1Ml0sNjM6MTAwLDY0Ojc1LDY1OlsxLDQzXSw2OToxMDEsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NzQsMzM6WzIsOTJdLDYyOjEwMiw2MzoxMDMsNjQ6NzUsNjU6WzEsNDNdLDY5OjEwNCw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHszMzpbMSwxMDVdfSx7MzM6WzIsNzldLDY1OlsyLDc5XSw3MjpbMiw3OV0sODA6WzIsNzldLDgxOlsyLDc5XSw4MjpbMiw3OV0sODM6WzIsNzldLDg0OlsyLDc5XSw4NTpbMiw3OV19LHszMzpbMiw4MV19LHsyMzpbMiwyN10sMzM6WzIsMjddLDU0OlsyLDI3XSw2NTpbMiwyN10sNjg6WzIsMjddLDcyOlsyLDI3XSw3NTpbMiwyN10sODA6WzIsMjddLDgxOlsyLDI3XSw4MjpbMiwyN10sODM6WzIsMjddLDg0OlsyLDI3XSw4NTpbMiwyN119LHsyMzpbMiwyOF0sMzM6WzIsMjhdLDU0OlsyLDI4XSw2NTpbMiwyOF0sNjg6WzIsMjhdLDcyOlsyLDI4XSw3NTpbMiwyOF0sODA6WzIsMjhdLDgxOlsyLDI4XSw4MjpbMiwyOF0sODM6WzIsMjhdLDg0OlsyLDI4XSw4NTpbMiwyOF19LHsyMzpbMiwzMF0sMzM6WzIsMzBdLDU0OlsyLDMwXSw2ODpbMiwzMF0sNzE6MTA2LDcyOlsxLDEwN10sNzU6WzIsMzBdfSx7MjM6WzIsOThdLDMzOlsyLDk4XSw1NDpbMiw5OF0sNjg6WzIsOThdLDcyOlsyLDk4XSw3NTpbMiw5OF19LHsyMzpbMiw0NV0sMzM6WzIsNDVdLDU0OlsyLDQ1XSw2NTpbMiw0NV0sNjg6WzIsNDVdLDcyOlsyLDQ1XSw3MzpbMSwxMDhdLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHsyMzpbMiw0NF0sMzM6WzIsNDRdLDU0OlsyLDQ0XSw2NTpbMiw0NF0sNjg6WzIsNDRdLDcyOlsyLDQ0XSw3NTpbMiw0NF0sODA6WzIsNDRdLDgxOlsyLDQ0XSw4MjpbMiw0NF0sODM6WzIsNDRdLDg0OlsyLDQ0XSw4NTpbMiw0NF0sODc6WzIsNDRdfSx7NTQ6WzEsMTA5XX0sezU0OlsyLDgzXSw2NTpbMiw4M10sNzI6WzIsODNdLDgwOlsyLDgzXSw4MTpbMiw4M10sODI6WzIsODNdLDgzOlsyLDgzXSw4NDpbMiw4M10sODU6WzIsODNdfSx7NTQ6WzIsODVdfSx7NTpbMiwxM10sMTQ6WzIsMTNdLDE1OlsyLDEzXSwxOTpbMiwxM10sMjk6WzIsMTNdLDM0OlsyLDEzXSwzOTpbMiwxM10sNDQ6WzIsMTNdLDQ3OlsyLDEzXSw0ODpbMiwxM10sNTE6WzIsMTNdLDU1OlsyLDEzXSw2MDpbMiwxM119LHszODo1NSwzOTpbMSw1N10sNDM6NTYsNDQ6WzEsNThdLDQ1OjExMSw0NjoxMTAsNDc6WzIsNzZdfSx7MzM6WzIsNzBdLDQwOjExMiw2NTpbMiw3MF0sNzI6WzIsNzBdLDc1OlsyLDcwXSw4MDpbMiw3MF0sODE6WzIsNzBdLDgyOlsyLDcwXSw4MzpbMiw3MF0sODQ6WzIsNzBdLDg1OlsyLDcwXX0sezQ3OlsyLDE4XX0sezU6WzIsMTRdLDE0OlsyLDE0XSwxNTpbMiwxNF0sMTk6WzIsMTRdLDI5OlsyLDE0XSwzNDpbMiwxNF0sMzk6WzIsMTRdLDQ0OlsyLDE0XSw0NzpbMiwxNF0sNDg6WzIsMTRdLDUxOlsyLDE0XSw1NTpbMiwxNF0sNjA6WzIsMTRdfSx7MzM6WzEsMTEzXX0sezMzOlsyLDg3XSw2NTpbMiw4N10sNzI6WzIsODddLDgwOlsyLDg3XSw4MTpbMiw4N10sODI6WzIsODddLDgzOlsyLDg3XSw4NDpbMiw4N10sODU6WzIsODddfSx7MzM6WzIsODldfSx7MjA6NzQsNjM6MTE1LDY0Ojc1LDY1OlsxLDQzXSw2NzoxMTQsNjg6WzIsOTZdLDY5OjExNiw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHszMzpbMSwxMTddfSx7MzI6MTE4LDMzOlsyLDYyXSw3NDoxMTksNzU6WzEsMTIwXX0sezMzOlsyLDU5XSw2NTpbMiw1OV0sNzI6WzIsNTldLDc1OlsyLDU5XSw4MDpbMiw1OV0sODE6WzIsNTldLDgyOlsyLDU5XSw4MzpbMiw1OV0sODQ6WzIsNTldLDg1OlsyLDU5XX0sezMzOlsyLDYxXSw3NTpbMiw2MV19LHszMzpbMiw2OF0sMzc6MTIxLDc0OjEyMiw3NTpbMSwxMjBdfSx7MzM6WzIsNjVdLDY1OlsyLDY1XSw3MjpbMiw2NV0sNzU6WzIsNjVdLDgwOlsyLDY1XSw4MTpbMiw2NV0sODI6WzIsNjVdLDgzOlsyLDY1XSw4NDpbMiw2NV0sODU6WzIsNjVdfSx7MzM6WzIsNjddLDc1OlsyLDY3XX0sezIzOlsxLDEyM119LHsyMzpbMiw1MV0sNjU6WzIsNTFdLDcyOlsyLDUxXSw4MDpbMiw1MV0sODE6WzIsNTFdLDgyOlsyLDUxXSw4MzpbMiw1MV0sODQ6WzIsNTFdLDg1OlsyLDUxXX0sezIzOlsyLDUzXX0sezMzOlsxLDEyNF19LHszMzpbMiw5MV0sNjU6WzIsOTFdLDcyOlsyLDkxXSw4MDpbMiw5MV0sODE6WzIsOTFdLDgyOlsyLDkxXSw4MzpbMiw5MV0sODQ6WzIsOTFdLDg1OlsyLDkxXX0sezMzOlsyLDkzXX0sezU6WzIsMjJdLDE0OlsyLDIyXSwxNTpbMiwyMl0sMTk6WzIsMjJdLDI5OlsyLDIyXSwzNDpbMiwyMl0sMzk6WzIsMjJdLDQ0OlsyLDIyXSw0NzpbMiwyMl0sNDg6WzIsMjJdLDUxOlsyLDIyXSw1NTpbMiwyMl0sNjA6WzIsMjJdfSx7MjM6WzIsOTldLDMzOlsyLDk5XSw1NDpbMiw5OV0sNjg6WzIsOTldLDcyOlsyLDk5XSw3NTpbMiw5OV19LHs3MzpbMSwxMDhdfSx7MjA6NzQsNjM6MTI1LDY0Ojc1LDY1OlsxLDQzXSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs1OlsyLDIzXSwxNDpbMiwyM10sMTU6WzIsMjNdLDE5OlsyLDIzXSwyOTpbMiwyM10sMzQ6WzIsMjNdLDM5OlsyLDIzXSw0NDpbMiwyM10sNDc6WzIsMjNdLDQ4OlsyLDIzXSw1MTpbMiwyM10sNTU6WzIsMjNdLDYwOlsyLDIzXX0sezQ3OlsyLDE5XX0sezQ3OlsyLDc3XX0sezIwOjc0LDMzOlsyLDcyXSw0MToxMjYsNjM6MTI3LDY0Ojc1LDY1OlsxLDQzXSw2OToxMjgsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDcyXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjRdLDE0OlsyLDI0XSwxNTpbMiwyNF0sMTk6WzIsMjRdLDI5OlsyLDI0XSwzNDpbMiwyNF0sMzk6WzIsMjRdLDQ0OlsyLDI0XSw0NzpbMiwyNF0sNDg6WzIsMjRdLDUxOlsyLDI0XSw1NTpbMiwyNF0sNjA6WzIsMjRdfSx7Njg6WzEsMTI5XX0sezY1OlsyLDk1XSw2ODpbMiw5NV0sNzI6WzIsOTVdLDgwOlsyLDk1XSw4MTpbMiw5NV0sODI6WzIsOTVdLDgzOlsyLDk1XSw4NDpbMiw5NV0sODU6WzIsOTVdfSx7Njg6WzIsOTddfSx7NTpbMiwyMV0sMTQ6WzIsMjFdLDE1OlsyLDIxXSwxOTpbMiwyMV0sMjk6WzIsMjFdLDM0OlsyLDIxXSwzOTpbMiwyMV0sNDQ6WzIsMjFdLDQ3OlsyLDIxXSw0ODpbMiwyMV0sNTE6WzIsMjFdLDU1OlsyLDIxXSw2MDpbMiwyMV19LHszMzpbMSwxMzBdfSx7MzM6WzIsNjNdfSx7NzI6WzEsMTMyXSw3NjoxMzF9LHszMzpbMSwxMzNdfSx7MzM6WzIsNjldfSx7MTU6WzIsMTJdLDE4OlsyLDEyXX0sezE0OlsyLDI2XSwxNTpbMiwyNl0sMTk6WzIsMjZdLDI5OlsyLDI2XSwzNDpbMiwyNl0sNDc6WzIsMjZdLDQ4OlsyLDI2XSw1MTpbMiwyNl0sNTU6WzIsMjZdLDYwOlsyLDI2XX0sezIzOlsyLDMxXSwzMzpbMiwzMV0sNTQ6WzIsMzFdLDY4OlsyLDMxXSw3MjpbMiwzMV0sNzU6WzIsMzFdfSx7MzM6WzIsNzRdLDQyOjEzNCw3NDoxMzUsNzU6WzEsMTIwXX0sezMzOlsyLDcxXSw2NTpbMiw3MV0sNzI6WzIsNzFdLDc1OlsyLDcxXSw4MDpbMiw3MV0sODE6WzIsNzFdLDgyOlsyLDcxXSw4MzpbMiw3MV0sODQ6WzIsNzFdLDg1OlsyLDcxXX0sezMzOlsyLDczXSw3NTpbMiw3M119LHsyMzpbMiwyOV0sMzM6WzIsMjldLDU0OlsyLDI5XSw2NTpbMiwyOV0sNjg6WzIsMjldLDcyOlsyLDI5XSw3NTpbMiwyOV0sODA6WzIsMjldLDgxOlsyLDI5XSw4MjpbMiwyOV0sODM6WzIsMjldLDg0OlsyLDI5XSw4NTpbMiwyOV19LHsxNDpbMiwxNV0sMTU6WzIsMTVdLDE5OlsyLDE1XSwyOTpbMiwxNV0sMzQ6WzIsMTVdLDM5OlsyLDE1XSw0NDpbMiwxNV0sNDc6WzIsMTVdLDQ4OlsyLDE1XSw1MTpbMiwxNV0sNTU6WzIsMTVdLDYwOlsyLDE1XX0sezcyOlsxLDEzN10sNzc6WzEsMTM2XX0sezcyOlsyLDEwMF0sNzc6WzIsMTAwXX0sezE0OlsyLDE2XSwxNTpbMiwxNl0sMTk6WzIsMTZdLDI5OlsyLDE2XSwzNDpbMiwxNl0sNDQ6WzIsMTZdLDQ3OlsyLDE2XSw0ODpbMiwxNl0sNTE6WzIsMTZdLDU1OlsyLDE2XSw2MDpbMiwxNl19LHszMzpbMSwxMzhdfSx7MzM6WzIsNzVdfSx7MzM6WzIsMzJdfSx7NzI6WzIsMTAxXSw3NzpbMiwxMDFdfSx7MTQ6WzIsMTddLDE1OlsyLDE3XSwxOTpbMiwxN10sMjk6WzIsMTddLDM0OlsyLDE3XSwzOTpbMiwxN10sNDQ6WzIsMTddLDQ3OlsyLDE3XSw0ODpbMiwxN10sNTE6WzIsMTddLDU1OlsyLDE3XSw2MDpbMiwxN119XSxkZWZhdWx0QWN0aW9uczp7NDpbMiwxXSw1NDpbMiw1NV0sNTY6WzIsMjBdLDYwOlsyLDU3XSw3MzpbMiw4MV0sODI6WzIsODVdLDg2OlsyLDE4XSw5MDpbMiw4OV0sMTAxOlsyLDUzXSwxMDQ6WzIsOTNdLDExMDpbMiwxOV0sMTExOlsyLDc3XSwxMTY6WzIsOTddLDExOTpbMiw2M10sMTIyOlsyLDY5XSwxMzU6WzIsNzVdLDEzNjpbMiwzMl19LHBhcnNlRXJyb3I6ZnVuY3Rpb24ocyxhKXt0aHJvdyBuZXcgRXJyb3Iocyl9LHBhcnNlOmZ1bmN0aW9uKHMpe3ZhciBhPXRoaXMsYz1bMF0sdT1bbnVsbF0sUj1bXSxmPXRoaXMudGFibGUscD1cIlwiLGw9MCxfPTAsRT0wLGg9MixTPTE7dGhpcy5sZXhlci5zZXRJbnB1dChzKSx0aGlzLmxleGVyLnl5PXRoaXMueXksdGhpcy55eS5sZXhlcj10aGlzLmxleGVyLHRoaXMueXkucGFyc2VyPXRoaXMsdHlwZW9mIHRoaXMubGV4ZXIueXlsbG9jPlwidVwiJiYodGhpcy5sZXhlci55eWxsb2M9e30pO3ZhciBkPXRoaXMubGV4ZXIueXlsbG9jO1IucHVzaChkKTt2YXIgZz10aGlzLmxleGVyLm9wdGlvbnMmJnRoaXMubGV4ZXIub3B0aW9ucy5yYW5nZXM7dHlwZW9mIHRoaXMueXkucGFyc2VFcnJvcj09XCJmdW5jdGlvblwiJiYodGhpcy5wYXJzZUVycm9yPXRoaXMueXkucGFyc2VFcnJvcik7ZnVuY3Rpb24gTyhydCl7Yy5sZW5ndGg9Yy5sZW5ndGgtMipydCx1Lmxlbmd0aD11Lmxlbmd0aC1ydCxSLmxlbmd0aD1SLmxlbmd0aC1ydH1mdW5jdGlvbiBtKCl7dmFyIHJ0O3JldHVybiBydD1hLmxleGVyLmxleCgpfHwxLHR5cGVvZiBydCE9XCJudW1iZXJcIiYmKHJ0PWEuc3ltYm9sc19bcnRdfHxydCkscnR9Zm9yKHZhciBOLEksYixMLHYseSxDPXt9LGssSixfZSxTZTs7KXtpZihiPWNbYy5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1tiXT9MPXRoaXMuZGVmYXVsdEFjdGlvbnNbYl06KChOPT09bnVsbHx8dHlwZW9mIE4+XCJ1XCIpJiYoTj1tKCkpLEw9ZltiXSYmZltiXVtOXSksdHlwZW9mIEw+XCJ1XCJ8fCFMLmxlbmd0aHx8IUxbMF0pe3ZhciBCZT1cIlwiO2lmKCFFKXtTZT1bXTtmb3IoayBpbiBmW2JdKXRoaXMudGVybWluYWxzX1trXSYmaz4yJiZTZS5wdXNoKFwiJ1wiK3RoaXMudGVybWluYWxzX1trXStcIidcIik7dGhpcy5sZXhlci5zaG93UG9zaXRpb24/QmU9XCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiKyhsKzEpK2A6XG5gK3RoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKCkrYFxuRXhwZWN0aW5nIGArU2Uuam9pbihcIiwgXCIpK1wiLCBnb3QgJ1wiKyh0aGlzLnRlcm1pbmFsc19bTl18fE4pK1wiJ1wiOkJlPVwiUGFyc2UgZXJyb3Igb24gbGluZSBcIisobCsxKStcIjogVW5leHBlY3RlZCBcIisoTj09MT9cImVuZCBvZiBpbnB1dFwiOlwiJ1wiKyh0aGlzLnRlcm1pbmFsc19bTl18fE4pK1wiJ1wiKSx0aGlzLnBhcnNlRXJyb3IoQmUse3RleHQ6dGhpcy5sZXhlci5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19bTl18fE4sbGluZTp0aGlzLmxleGVyLnl5bGluZW5vLGxvYzpkLGV4cGVjdGVkOlNlfSl9fWlmKExbMF1pbnN0YW5jZW9mIEFycmF5JiZMLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIitiK1wiLCB0b2tlbjogXCIrTik7c3dpdGNoKExbMF0pe2Nhc2UgMTpjLnB1c2goTiksdS5wdXNoKHRoaXMubGV4ZXIueXl0ZXh0KSxSLnB1c2godGhpcy5sZXhlci55eWxsb2MpLGMucHVzaChMWzFdKSxOPW51bGwsST8oTj1JLEk9bnVsbCk6KF89dGhpcy5sZXhlci55eWxlbmcscD10aGlzLmxleGVyLnl5dGV4dCxsPXRoaXMubGV4ZXIueXlsaW5lbm8sZD10aGlzLmxleGVyLnl5bGxvYyxFPjAmJkUtLSk7YnJlYWs7Y2FzZSAyOmlmKEo9dGhpcy5wcm9kdWN0aW9uc19bTFsxXV1bMV0sQy4kPXVbdS5sZW5ndGgtSl0sQy5fJD17Zmlyc3RfbGluZTpSW1IubGVuZ3RoLShKfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6UltSLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOlJbUi5sZW5ndGgtKEp8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46UltSLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sZyYmKEMuXyQucmFuZ2U9W1JbUi5sZW5ndGgtKEp8fDEpXS5yYW5nZVswXSxSW1IubGVuZ3RoLTFdLnJhbmdlWzFdXSkseT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbChDLHAsXyxsLHRoaXMueXksTFsxXSx1LFIpLHR5cGVvZiB5PFwidVwiKXJldHVybiB5O0omJihjPWMuc2xpY2UoMCwtMSpKKjIpLHU9dS5zbGljZSgwLC0xKkopLFI9Ui5zbGljZSgwLC0xKkopKSxjLnB1c2godGhpcy5wcm9kdWN0aW9uc19bTFsxXV1bMF0pLHUucHVzaChDLiQpLFIucHVzaChDLl8kKSxfZT1mW2NbYy5sZW5ndGgtMl1dW2NbYy5sZW5ndGgtMV1dLGMucHVzaChfZSk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LG89ZnVuY3Rpb24oKXt2YXIgcz17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbihhLGMpe2lmKHRoaXMueXkucGFyc2VyKXRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IoYSxjKTtlbHNlIHRocm93IG5ldyBFcnJvcihhKX0sc2V0SW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2lucHV0PWEsdGhpcy5fbW9yZT10aGlzLl9sZXNzPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9XCJcIix0aGlzLmNvbmRpdGlvblN0YWNrPVtcIklOSVRJQUxcIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9pbnB1dFswXTt0aGlzLnl5dGV4dCs9YSx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9YSx0aGlzLm1hdGNoZWQrPWE7dmFyIGM9YS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7cmV0dXJuIGM/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLGF9LHVucHV0OmZ1bmN0aW9uKGEpe3ZhciBjPWEubGVuZ3RoLHU9YS5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO3RoaXMuX2lucHV0PWErdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWMtMSksdGhpcy5vZmZzZXQtPWM7dmFyIFI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XFxyXFxuP3xcXG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksdS5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPXUubGVuZ3RoLTEpO3ZhciBmPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp1Pyh1Lmxlbmd0aD09PVIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStSW1IubGVuZ3RoLXUubGVuZ3RoXS5sZW5ndGgtdVswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWN9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bZlswXSxmWzBdK3RoaXMueXlsZW5nLWNdKSx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30sbGVzczpmdW5jdGlvbihhKXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UoYSkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKGEubGVuZ3RoPjIwP1wiLi4uXCI6XCJcIikrYS5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZyxcIlwiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciBhPXRoaXMubWF0Y2g7cmV0dXJuIGEubGVuZ3RoPDIwJiYoYSs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtYS5sZW5ndGgpKSwoYS5zdWJzdHIoMCwyMCkrKGEubGVuZ3RoPjIwP1wiLi4uXCI6XCJcIikpLnJlcGxhY2UoL1xcbi9nLFwiXCIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhc3RJbnB1dCgpLGM9bmV3IEFycmF5KGEubGVuZ3RoKzEpLmpvaW4oXCItXCIpO3JldHVybiBhK3RoaXMudXBjb21pbmdJbnB1dCgpK2BcbmArYytcIl5cIn0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApO3ZhciBhLGMsdSxSLGYscDt0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9XCJcIix0aGlzLm1hdGNoPVwiXCIpO2Zvcih2YXIgbD10aGlzLl9jdXJyZW50UnVsZXMoKSxfPTA7XzxsLmxlbmd0aCYmKHU9dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tsW19dXSksISh1JiYoIWN8fHVbMF0ubGVuZ3RoPmNbMF0ubGVuZ3RoKSYmKGM9dSxSPV8sIXRoaXMub3B0aW9ucy5mbGV4KSkpO18rKyk7cmV0dXJuIGM/KHA9Y1swXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZykscCYmKHRoaXMueXlsaW5lbm8rPXAubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cD9wW3AubGVuZ3RoLTFdLmxlbmd0aC1wW3AubGVuZ3RoLTFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbitjWzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPWNbMF0sdGhpcy5tYXRjaCs9Y1swXSx0aGlzLm1hdGNoZXM9Yyx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKGNbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPWNbMF0sYT10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxsW1JdLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLGF8fHZvaWQgMCk6dGhpcy5faW5wdXQ9PT1cIlwiP3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcihcIkxleGljYWwgZXJyb3Igb24gbGluZSBcIisodGhpcy55eWxpbmVubysxKStgLiBVbnJlY29nbml6ZWQgdGV4dC5cbmArdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDpcIlwiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciBhPXRoaXMubmV4dCgpO3JldHVybiB0eXBlb2YgYTxcInVcIj9hOnRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKGEpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaChhKX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl19LHB1c2hTdGF0ZTpmdW5jdGlvbihhKXt0aGlzLmJlZ2luKGEpfX07cmV0dXJuIHMub3B0aW9ucz17fSxzLnBlcmZvcm1BY3Rpb249ZnVuY3Rpb24oYSxjLHUsUil7ZnVuY3Rpb24gZihsLF8pe3JldHVybiBjLnl5dGV4dD1jLnl5dGV4dC5zdWJzdHJpbmcobCxjLnl5bGVuZy1fK2wpfXZhciBwPVI7c3dpdGNoKHUpe2Nhc2UgMDppZihjLnl5dGV4dC5zbGljZSgtMik9PT1cIlxcXFxcXFxcXCI/KGYoMCwxKSx0aGlzLmJlZ2luKFwibXVcIikpOmMueXl0ZXh0LnNsaWNlKC0xKT09PVwiXFxcXFwiPyhmKDAsMSksdGhpcy5iZWdpbihcImVtdVwiKSk6dGhpcy5iZWdpbihcIm11XCIpLGMueXl0ZXh0KXJldHVybiAxNTticmVhaztjYXNlIDE6cmV0dXJuIDE1O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE1O2Nhc2UgMzpyZXR1cm4gdGhpcy5iZWdpbihcInJhd1wiKSwxNTtjYXNlIDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdPT09XCJyYXdcIj8xNTooZig1LDkpLFwiRU5EX1JBV19CTE9DS1wiKTtjYXNlIDU6cmV0dXJuIDE1O2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE0O2Nhc2UgNzpyZXR1cm4gNjU7Y2FzZSA4OnJldHVybiA2ODtjYXNlIDk6cmV0dXJuIDE5O2Nhc2UgMTA6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKFwicmF3XCIpLDIzO2Nhc2UgMTE6cmV0dXJuIDU1O2Nhc2UgMTI6cmV0dXJuIDYwO2Nhc2UgMTM6cmV0dXJuIDI5O2Nhc2UgMTQ6cmV0dXJuIDQ3O2Nhc2UgMTU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSw0NDtjYXNlIDE2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDQ7Y2FzZSAxNzpyZXR1cm4gMzQ7Y2FzZSAxODpyZXR1cm4gMzk7Y2FzZSAxOTpyZXR1cm4gNTE7Y2FzZSAyMDpyZXR1cm4gNDg7Y2FzZSAyMTp0aGlzLnVucHV0KGMueXl0ZXh0KSx0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbihcImNvbVwiKTticmVhaztjYXNlIDIyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksMTQ7Y2FzZSAyMzpyZXR1cm4gNDg7Y2FzZSAyNDpyZXR1cm4gNzM7Y2FzZSAyNTpyZXR1cm4gNzI7Y2FzZSAyNjpyZXR1cm4gNzI7Y2FzZSAyNzpyZXR1cm4gODc7Y2FzZSAyODpicmVhaztjYXNlIDI5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNTQ7Y2FzZSAzMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDMzO2Nhc2UgMzE6cmV0dXJuIGMueXl0ZXh0PWYoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKSw4MDtjYXNlIDMyOnJldHVybiBjLnl5dGV4dD1mKDEsMikucmVwbGFjZSgvXFxcXCcvZyxcIidcIiksODA7Y2FzZSAzMzpyZXR1cm4gODU7Y2FzZSAzNDpyZXR1cm4gODI7Y2FzZSAzNTpyZXR1cm4gODI7Y2FzZSAzNjpyZXR1cm4gODM7Y2FzZSAzNzpyZXR1cm4gODQ7Y2FzZSAzODpyZXR1cm4gODE7Y2FzZSAzOTpyZXR1cm4gNzU7Y2FzZSA0MDpyZXR1cm4gNzc7Y2FzZSA0MTpyZXR1cm4gNzI7Y2FzZSA0MjpyZXR1cm4gYy55eXRleHQ9Yy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csXCIkMVwiKSw3MjtjYXNlIDQzOnJldHVyblwiSU5WQUxJRFwiO2Nhc2UgNDQ6cmV0dXJuIDV9fSxzLnJ1bGVzPVsvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7KSkpLywvXig/OlteXFx4MDBdKykvLC9eKD86W15cXHgwMF17Mix9Pyg/PShcXHtcXHt8XFxcXFxce1xce3xcXFxcXFxcXFxce1xce3wkKSkpLywvXig/Olxce1xce1xce1xceyg/PVteXFwvXSkpLywvXig/Olxce1xce1xce1xce1xcL1teXFxzIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XSsoPz1bPX1cXHNcXC8uXSlcXH1cXH1cXH1cXH0pLywvXig/OlteXFx4MDBdKz8oPz0oXFx7XFx7XFx7XFx7KSkpLywvXig/OltcXHNcXFNdKj8tLSh+KT9cXH1cXH0pLywvXig/OlxcKCkvLC9eKD86XFwpKS8sL14oPzpcXHtcXHtcXHtcXHspLywvXig/OlxcfVxcfVxcfVxcfSkvLC9eKD86XFx7XFx7KH4pPz4pLywvXig/Olxce1xceyh+KT8jPikvLC9eKD86XFx7XFx7KH4pPyNcXCo/KS8sL14oPzpcXHtcXHsofik/XFwvKS8sL14oPzpcXHtcXHsofik/XFxeXFxzKih+KT9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXHMqZWxzZVxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxeKS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXGIpLywvXig/Olxce1xceyh+KT9cXHspLywvXig/Olxce1xceyh+KT8mKS8sL14oPzpcXHtcXHsofik/IS0tKS8sL14oPzpcXHtcXHsofik/IVtcXHNcXFNdKj9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXCo/KS8sL14oPzo9KS8sL14oPzpcXC5cXC4pLywvXig/OlxcLig/PShbPX59XFxzXFwvLil8XSkpKS8sL14oPzpbXFwvLl0pLywvXig/OlxccyspLywvXig/OlxcfSh+KT9cXH1cXH0pLywvXig/Oih+KT9cXH1cXH0pLywvXig/OlwiKFxcXFxbXCJdfFteXCJdKSpcIikvLC9eKD86JyhcXFxcWyddfFteJ10pKicpLywvXig/OkApLywvXig/OnRydWUoPz0oW359XFxzKV0pKSkvLC9eKD86ZmFsc2UoPz0oW359XFxzKV0pKSkvLC9eKD86dW5kZWZpbmVkKD89KFt+fVxccyldKSkpLywvXig/Om51bGwoPz0oW359XFxzKV0pKSkvLC9eKD86LT9bMC05XSsoPzpcXC5bMC05XSspPyg/PShbfn1cXHMpXSkpKS8sL14oPzphc1xccytcXHwpLywvXig/OlxcfCkvLC9eKD86KFteXFxzIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XSsoPz0oWz1+fVxcc1xcLy4pfF0pKSkpLywvXig/OlxcWyhcXFxcXFxdfFteXFxdXSkqXFxdKS8sL14oPzouKS8sL14oPzokKS9dLHMuY29uZGl0aW9ucz17bXU6e3J1bGVzOls3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NF0saW5jbHVzaXZlOiExfSxlbXU6e3J1bGVzOlsyXSxpbmNsdXNpdmU6ITF9LGNvbTp7cnVsZXM6WzZdLGluY2x1c2l2ZTohMX0scmF3OntydWxlczpbMyw0LDVdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSw0NF0saW5jbHVzaXZlOiEwfX0sc30oKTtuLmxleGVyPW87ZnVuY3Rpb24gaSgpe3RoaXMueXk9e319cmV0dXJuIGkucHJvdG90eXBlPW4sbi5QYXJzZXI9aSxuZXcgaX0oKTtlLmRlZmF1bHQ9cix0LmV4cG9ydHM9ZS5kZWZhdWx0fSksSHU9USgoZSx0KT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMDtmdW5jdGlvbiByKHUpe3JldHVybiB1JiZ1Ll9fZXNNb2R1bGU/dTp7ZGVmYXVsdDp1fX12YXIgbj1TdCgpLG89cihuKTtmdW5jdGlvbiBpKCl7dGhpcy5wYXJlbnRzPVtdfWkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjppLG11dGF0aW5nOiExLGFjY2VwdEtleTpmdW5jdGlvbih1LFIpe3ZhciBmPXRoaXMuYWNjZXB0KHVbUl0pO2lmKHRoaXMubXV0YXRpbmcpe2lmKGYmJiFpLnByb3RvdHlwZVtmLnR5cGVdKXRocm93IG5ldyBvLmRlZmF1bHQoJ1VuZXhwZWN0ZWQgbm9kZSB0eXBlIFwiJytmLnR5cGUrJ1wiIGZvdW5kIHdoZW4gYWNjZXB0aW5nICcrUitcIiBvbiBcIit1LnR5cGUpO3VbUl09Zn19LGFjY2VwdFJlcXVpcmVkOmZ1bmN0aW9uKHUsUil7aWYodGhpcy5hY2NlcHRLZXkodSxSKSwhdVtSXSl0aHJvdyBuZXcgby5kZWZhdWx0KHUudHlwZStcIiByZXF1aXJlcyBcIitSKX0sYWNjZXB0QXJyYXk6ZnVuY3Rpb24odSl7Zm9yKHZhciBSPTAsZj11Lmxlbmd0aDtSPGY7UisrKXRoaXMuYWNjZXB0S2V5KHUsUiksdVtSXXx8KHUuc3BsaWNlKFIsMSksUi0tLGYtLSl9LGFjY2VwdDpmdW5jdGlvbih1KXtpZih1KXtpZighdGhpc1t1LnR5cGVdKXRocm93IG5ldyBvLmRlZmF1bHQoXCJVbmtub3duIHR5cGU6IFwiK3UudHlwZSx1KTt0aGlzLmN1cnJlbnQmJnRoaXMucGFyZW50cy51bnNoaWZ0KHRoaXMuY3VycmVudCksdGhpcy5jdXJyZW50PXU7dmFyIFI9dGhpc1t1LnR5cGVdKHUpO2lmKHRoaXMuY3VycmVudD10aGlzLnBhcmVudHMuc2hpZnQoKSwhdGhpcy5tdXRhdGluZ3x8UilyZXR1cm4gUjtpZihSIT09ITEpcmV0dXJuIHV9fSxQcm9ncmFtOmZ1bmN0aW9uKHUpe3RoaXMuYWNjZXB0QXJyYXkodS5ib2R5KX0sTXVzdGFjaGVTdGF0ZW1lbnQ6cyxEZWNvcmF0b3I6cyxCbG9ja1N0YXRlbWVudDphLERlY29yYXRvckJsb2NrOmEsUGFydGlhbFN0YXRlbWVudDpjLFBhcnRpYWxCbG9ja1N0YXRlbWVudDpmdW5jdGlvbih1KXtjLmNhbGwodGhpcyx1KSx0aGlzLmFjY2VwdEtleSh1LFwicHJvZ3JhbVwiKX0sQ29udGVudFN0YXRlbWVudDpmdW5jdGlvbigpe30sQ29tbWVudFN0YXRlbWVudDpmdW5jdGlvbigpe30sU3ViRXhwcmVzc2lvbjpzLFBhdGhFeHByZXNzaW9uOmZ1bmN0aW9uKCl7fSxTdHJpbmdMaXRlcmFsOmZ1bmN0aW9uKCl7fSxOdW1iZXJMaXRlcmFsOmZ1bmN0aW9uKCl7fSxCb29sZWFuTGl0ZXJhbDpmdW5jdGlvbigpe30sVW5kZWZpbmVkTGl0ZXJhbDpmdW5jdGlvbigpe30sTnVsbExpdGVyYWw6ZnVuY3Rpb24oKXt9LEhhc2g6ZnVuY3Rpb24odSl7dGhpcy5hY2NlcHRBcnJheSh1LnBhaXJzKX0sSGFzaFBhaXI6ZnVuY3Rpb24odSl7dGhpcy5hY2NlcHRSZXF1aXJlZCh1LFwidmFsdWVcIil9fTtmdW5jdGlvbiBzKHUpe3RoaXMuYWNjZXB0UmVxdWlyZWQodSxcInBhdGhcIiksdGhpcy5hY2NlcHRBcnJheSh1LnBhcmFtcyksdGhpcy5hY2NlcHRLZXkodSxcImhhc2hcIil9ZnVuY3Rpb24gYSh1KXtzLmNhbGwodGhpcyx1KSx0aGlzLmFjY2VwdEtleSh1LFwicHJvZ3JhbVwiKSx0aGlzLmFjY2VwdEtleSh1LFwiaW52ZXJzZVwiKX1mdW5jdGlvbiBjKHUpe3RoaXMuYWNjZXB0UmVxdWlyZWQodSxcIm5hbWVcIiksdGhpcy5hY2NlcHRBcnJheSh1LnBhcmFtcyksdGhpcy5hY2NlcHRLZXkodSxcImhhc2hcIil9ZS5kZWZhdWx0PWksdC5leHBvcnRzPWUuZGVmYXVsdH0pLFd5PVEoKGUsdCk9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITA7ZnVuY3Rpb24gcihSKXtyZXR1cm4gUiYmUi5fX2VzTW9kdWxlP1I6e2RlZmF1bHQ6Un19dmFyIG49SHUoKSxvPXIobik7ZnVuY3Rpb24gaSgpe3ZhciBSPWFyZ3VtZW50cy5sZW5ndGg8PTB8fGFyZ3VtZW50c1swXT09PXZvaWQgMD97fTphcmd1bWVudHNbMF07dGhpcy5vcHRpb25zPVJ9aS5wcm90b3R5cGU9bmV3IG8uZGVmYXVsdCxpLnByb3RvdHlwZS5Qcm9ncmFtPWZ1bmN0aW9uKFIpe3ZhciBmPSF0aGlzLm9wdGlvbnMuaWdub3JlU3RhbmRhbG9uZSxwPSF0aGlzLmlzUm9vdFNlZW47dGhpcy5pc1Jvb3RTZWVuPSEwO2Zvcih2YXIgbD1SLmJvZHksXz0wLEU9bC5sZW5ndGg7XzxFO18rKyl7dmFyIGg9bFtfXSxTPXRoaXMuYWNjZXB0KGgpO2lmKFMpe3ZhciBkPXMobCxfLHApLGc9YShsLF8scCksTz1TLm9wZW5TdGFuZGFsb25lJiZkLG09Uy5jbG9zZVN0YW5kYWxvbmUmJmcsTj1TLmlubGluZVN0YW5kYWxvbmUmJmQmJmc7Uy5jbG9zZSYmYyhsLF8sITApLFMub3BlbiYmdShsLF8sITApLGYmJk4mJihjKGwsXyksdShsLF8pJiZoLnR5cGU9PT1cIlBhcnRpYWxTdGF0ZW1lbnRcIiYmKGguaW5kZW50PS8oWyBcXHRdKyQpLy5leGVjKGxbXy0xXS5vcmlnaW5hbClbMV0pKSxmJiZPJiYoYygoaC5wcm9ncmFtfHxoLmludmVyc2UpLmJvZHkpLHUobCxfKSksZiYmbSYmKGMobCxfKSx1KChoLmludmVyc2V8fGgucHJvZ3JhbSkuYm9keSkpfX1yZXR1cm4gUn0saS5wcm90b3R5cGUuQmxvY2tTdGF0ZW1lbnQ9aS5wcm90b3R5cGUuRGVjb3JhdG9yQmxvY2s9aS5wcm90b3R5cGUuUGFydGlhbEJsb2NrU3RhdGVtZW50PWZ1bmN0aW9uKFIpe3RoaXMuYWNjZXB0KFIucHJvZ3JhbSksdGhpcy5hY2NlcHQoUi5pbnZlcnNlKTt2YXIgZj1SLnByb2dyYW18fFIuaW52ZXJzZSxwPVIucHJvZ3JhbSYmUi5pbnZlcnNlLGw9cCxfPXA7aWYocCYmcC5jaGFpbmVkKWZvcihsPXAuYm9keVswXS5wcm9ncmFtO18uY2hhaW5lZDspXz1fLmJvZHlbXy5ib2R5Lmxlbmd0aC0xXS5wcm9ncmFtO3ZhciBFPXtvcGVuOlIub3BlblN0cmlwLm9wZW4sY2xvc2U6Ui5jbG9zZVN0cmlwLmNsb3NlLG9wZW5TdGFuZGFsb25lOmEoZi5ib2R5KSxjbG9zZVN0YW5kYWxvbmU6cygobHx8ZikuYm9keSl9O2lmKFIub3BlblN0cmlwLmNsb3NlJiZjKGYuYm9keSxudWxsLCEwKSxwKXt2YXIgaD1SLmludmVyc2VTdHJpcDtoLm9wZW4mJnUoZi5ib2R5LG51bGwsITApLGguY2xvc2UmJmMobC5ib2R5LG51bGwsITApLFIuY2xvc2VTdHJpcC5vcGVuJiZ1KF8uYm9keSxudWxsLCEwKSwhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmUmJnMoZi5ib2R5KSYmYShsLmJvZHkpJiYodShmLmJvZHkpLGMobC5ib2R5KSl9ZWxzZSBSLmNsb3NlU3RyaXAub3BlbiYmdShmLmJvZHksbnVsbCwhMCk7cmV0dXJuIEV9LGkucHJvdG90eXBlLkRlY29yYXRvcj1pLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudD1mdW5jdGlvbihSKXtyZXR1cm4gUi5zdHJpcH0saS5wcm90b3R5cGUuUGFydGlhbFN0YXRlbWVudD1pLnByb3RvdHlwZS5Db21tZW50U3RhdGVtZW50PWZ1bmN0aW9uKFIpe3ZhciBmPVIuc3RyaXB8fHt9O3JldHVybntpbmxpbmVTdGFuZGFsb25lOiEwLG9wZW46Zi5vcGVuLGNsb3NlOmYuY2xvc2V9fTtmdW5jdGlvbiBzKFIsZixwKXtmPT09dm9pZCAwJiYoZj1SLmxlbmd0aCk7dmFyIGw9UltmLTFdLF89UltmLTJdO2lmKCFsKXJldHVybiBwO2lmKGwudHlwZT09PVwiQ29udGVudFN0YXRlbWVudFwiKXJldHVybihffHwhcD8vXFxyP1xcblxccyo/JC86LyhefFxccj9cXG4pXFxzKj8kLykudGVzdChsLm9yaWdpbmFsKX1mdW5jdGlvbiBhKFIsZixwKXtmPT09dm9pZCAwJiYoZj0tMSk7dmFyIGw9UltmKzFdLF89UltmKzJdO2lmKCFsKXJldHVybiBwO2lmKGwudHlwZT09PVwiQ29udGVudFN0YXRlbWVudFwiKXJldHVybihffHwhcD8vXlxccyo/XFxyP1xcbi86L15cXHMqPyhcXHI/XFxufCQpLykudGVzdChsLm9yaWdpbmFsKX1mdW5jdGlvbiBjKFIsZixwKXt2YXIgbD1SW2Y9PW51bGw/MDpmKzFdO2lmKCEoIWx8fGwudHlwZSE9PVwiQ29udGVudFN0YXRlbWVudFwifHwhcCYmbC5yaWdodFN0cmlwcGVkKSl7dmFyIF89bC52YWx1ZTtsLnZhbHVlPWwudmFsdWUucmVwbGFjZShwPy9eXFxzKy86L15bIFxcdF0qXFxyP1xcbj8vLFwiXCIpLGwucmlnaHRTdHJpcHBlZD1sLnZhbHVlIT09X319ZnVuY3Rpb24gdShSLGYscCl7dmFyIGw9UltmPT1udWxsP1IubGVuZ3RoLTE6Zi0xXTtpZighKCFsfHxsLnR5cGUhPT1cIkNvbnRlbnRTdGF0ZW1lbnRcInx8IXAmJmwubGVmdFN0cmlwcGVkKSl7dmFyIF89bC52YWx1ZTtyZXR1cm4gbC52YWx1ZT1sLnZhbHVlLnJlcGxhY2UocD8vXFxzKyQvOi9bIFxcdF0rJC8sXCJcIiksbC5sZWZ0U3RyaXBwZWQ9bC52YWx1ZSE9PV8sbC5sZWZ0U3RyaXBwZWR9fWUuZGVmYXVsdD1pLHQuZXhwb3J0cz1lLmRlZmF1bHR9KSxWeT1RKGU9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITAsZS5Tb3VyY2VMb2NhdGlvbj1pLGUuaWQ9cyxlLnN0cmlwRmxhZ3M9YSxlLnN0cmlwQ29tbWVudD1jLGUucHJlcGFyZVBhdGg9dSxlLnByZXBhcmVNdXN0YWNoZT1SLGUucHJlcGFyZVJhd0Jsb2NrPWYsZS5wcmVwYXJlQmxvY2s9cCxlLnByZXBhcmVQcm9ncmFtPWwsZS5wcmVwYXJlUGFydGlhbEJsb2NrPV87ZnVuY3Rpb24gdChFKXtyZXR1cm4gRSYmRS5fX2VzTW9kdWxlP0U6e2RlZmF1bHQ6RX19dmFyIHI9U3QoKSxuPXQocik7ZnVuY3Rpb24gbyhFLGgpe2lmKGg9aC5wYXRoP2gucGF0aC5vcmlnaW5hbDpoLEUucGF0aC5vcmlnaW5hbCE9PWgpe3ZhciBTPXtsb2M6RS5wYXRoLmxvY307dGhyb3cgbmV3IG4uZGVmYXVsdChFLnBhdGgub3JpZ2luYWwrXCIgZG9lc24ndCBtYXRjaCBcIitoLFMpfX1mdW5jdGlvbiBpKEUsaCl7dGhpcy5zb3VyY2U9RSx0aGlzLnN0YXJ0PXtsaW5lOmguZmlyc3RfbGluZSxjb2x1bW46aC5maXJzdF9jb2x1bW59LHRoaXMuZW5kPXtsaW5lOmgubGFzdF9saW5lLGNvbHVtbjpoLmxhc3RfY29sdW1ufX1mdW5jdGlvbiBzKEUpe3JldHVybi9eXFxbLipcXF0kLy50ZXN0KEUpP0Uuc3Vic3RyaW5nKDEsRS5sZW5ndGgtMSk6RX1mdW5jdGlvbiBhKEUsaCl7cmV0dXJue29wZW46RS5jaGFyQXQoMik9PT1cIn5cIixjbG9zZTpoLmNoYXJBdChoLmxlbmd0aC0zKT09PVwiflwifX1mdW5jdGlvbiBjKEUpe3JldHVybiBFLnJlcGxhY2UoL15cXHtcXHt+PyEtPy0/LyxcIlwiKS5yZXBsYWNlKC8tPy0/fj9cXH1cXH0kLyxcIlwiKX1mdW5jdGlvbiB1KEUsaCxTKXtTPXRoaXMubG9jSW5mbyhTKTtmb3IodmFyIGQ9RT9cIkBcIjpcIlwiLGc9W10sTz0wLG09MCxOPWgubGVuZ3RoO208TjttKyspe3ZhciBJPWhbbV0ucGFydCxiPWhbbV0ub3JpZ2luYWwhPT1JO2lmKGQrPShoW21dLnNlcGFyYXRvcnx8XCJcIikrSSwhYiYmKEk9PT1cIi4uXCJ8fEk9PT1cIi5cInx8ST09PVwidGhpc1wiKSl7aWYoZy5sZW5ndGg+MCl0aHJvdyBuZXcgbi5kZWZhdWx0KFwiSW52YWxpZCBwYXRoOiBcIitkLHtsb2M6U30pO0k9PT1cIi4uXCImJk8rK31lbHNlIGcucHVzaChJKX1yZXR1cm57dHlwZTpcIlBhdGhFeHByZXNzaW9uXCIsZGF0YTpFLGRlcHRoOk8scGFydHM6ZyxvcmlnaW5hbDpkLGxvYzpTfX1mdW5jdGlvbiBSKEUsaCxTLGQsZyxPKXt2YXIgbT1kLmNoYXJBdCgzKXx8ZC5jaGFyQXQoMiksTj1tIT09XCJ7XCImJm0hPT1cIiZcIixJPS9cXCovLnRlc3QoZCk7cmV0dXJue3R5cGU6ST9cIkRlY29yYXRvclwiOlwiTXVzdGFjaGVTdGF0ZW1lbnRcIixwYXRoOkUscGFyYW1zOmgsaGFzaDpTLGVzY2FwZWQ6TixzdHJpcDpnLGxvYzp0aGlzLmxvY0luZm8oTyl9fWZ1bmN0aW9uIGYoRSxoLFMsZCl7byhFLFMpLGQ9dGhpcy5sb2NJbmZvKGQpO3ZhciBnPXt0eXBlOlwiUHJvZ3JhbVwiLGJvZHk6aCxzdHJpcDp7fSxsb2M6ZH07cmV0dXJue3R5cGU6XCJCbG9ja1N0YXRlbWVudFwiLHBhdGg6RS5wYXRoLHBhcmFtczpFLnBhcmFtcyxoYXNoOkUuaGFzaCxwcm9ncmFtOmcsb3BlblN0cmlwOnt9LGludmVyc2VTdHJpcDp7fSxjbG9zZVN0cmlwOnt9LGxvYzpkfX1mdW5jdGlvbiBwKEUsaCxTLGQsZyxPKXtkJiZkLnBhdGgmJm8oRSxkKTt2YXIgbT0vXFwqLy50ZXN0KEUub3Blbik7aC5ibG9ja1BhcmFtcz1FLmJsb2NrUGFyYW1zO3ZhciBOPXZvaWQgMCxJPXZvaWQgMDtpZihTKXtpZihtKXRocm93IG5ldyBuLmRlZmF1bHQoXCJVbmV4cGVjdGVkIGludmVyc2UgYmxvY2sgb24gZGVjb3JhdG9yXCIsUyk7Uy5jaGFpbiYmKFMucHJvZ3JhbS5ib2R5WzBdLmNsb3NlU3RyaXA9ZC5zdHJpcCksST1TLnN0cmlwLE49Uy5wcm9ncmFtfXJldHVybiBnJiYoZz1OLE49aCxoPWcpLHt0eXBlOm0/XCJEZWNvcmF0b3JCbG9ja1wiOlwiQmxvY2tTdGF0ZW1lbnRcIixwYXRoOkUucGF0aCxwYXJhbXM6RS5wYXJhbXMsaGFzaDpFLmhhc2gscHJvZ3JhbTpoLGludmVyc2U6TixvcGVuU3RyaXA6RS5zdHJpcCxpbnZlcnNlU3RyaXA6SSxjbG9zZVN0cmlwOmQmJmQuc3RyaXAsbG9jOnRoaXMubG9jSW5mbyhPKX19ZnVuY3Rpb24gbChFLGgpe2lmKCFoJiZFLmxlbmd0aCl7dmFyIFM9RVswXS5sb2MsZD1FW0UubGVuZ3RoLTFdLmxvYztTJiZkJiYoaD17c291cmNlOlMuc291cmNlLHN0YXJ0OntsaW5lOlMuc3RhcnQubGluZSxjb2x1bW46Uy5zdGFydC5jb2x1bW59LGVuZDp7bGluZTpkLmVuZC5saW5lLGNvbHVtbjpkLmVuZC5jb2x1bW59fSl9cmV0dXJue3R5cGU6XCJQcm9ncmFtXCIsYm9keTpFLHN0cmlwOnt9LGxvYzpofX1mdW5jdGlvbiBfKEUsaCxTLGQpe3JldHVybiBvKEUsUykse3R5cGU6XCJQYXJ0aWFsQmxvY2tTdGF0ZW1lbnRcIixuYW1lOkUucGF0aCxwYXJhbXM6RS5wYXJhbXMsaGFzaDpFLmhhc2gscHJvZ3JhbTpoLG9wZW5TdHJpcDpFLnN0cmlwLGNsb3NlU3RyaXA6UyYmUy5zdHJpcCxsb2M6dGhpcy5sb2NJbmZvKGQpfX19KSxIeT1RKGU9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITAsZS5wYXJzZVdpdGhvdXRQcm9jZXNzaW5nPWYsZS5wYXJzZT1wO2Z1bmN0aW9uIHQobCl7aWYobCYmbC5fX2VzTW9kdWxlKXJldHVybiBsO3ZhciBfPXt9O2lmKGwhPW51bGwpZm9yKHZhciBFIGluIGwpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsRSkmJihfW0VdPWxbRV0pO3JldHVybiBfLmRlZmF1bHQ9bCxffWZ1bmN0aW9uIHIobCl7cmV0dXJuIGwmJmwuX19lc01vZHVsZT9sOntkZWZhdWx0Omx9fXZhciBuPXZ5KCksbz1yKG4pLGk9V3koKSxzPXIoaSksYT1WeSgpLGM9dChhKSx1PXR0KCk7ZS5wYXJzZXI9by5kZWZhdWx0O3ZhciBSPXt9O3UuZXh0ZW5kKFIsYyk7ZnVuY3Rpb24gZihsLF8pe2lmKGwudHlwZT09PVwiUHJvZ3JhbVwiKXJldHVybiBsO28uZGVmYXVsdC55eT1SLFIubG9jSW5mbz1mdW5jdGlvbihoKXtyZXR1cm4gbmV3IFIuU291cmNlTG9jYXRpb24oXyYmXy5zcmNOYW1lLGgpfTt2YXIgRT1vLmRlZmF1bHQucGFyc2UobCk7cmV0dXJuIEV9ZnVuY3Rpb24gcChsLF8pe3ZhciBFPWYobCxfKSxoPW5ldyBzLmRlZmF1bHQoXyk7cmV0dXJuIGguYWNjZXB0KEUpfX0pLCR5PVEoZT0+e1widXNlIHN0cmljdFwiO2UuX19lc01vZHVsZT0hMCxlLkNvbXBpbGVyPWMsZS5wcmVjb21waWxlPXUsZS5jb21waWxlPVI7ZnVuY3Rpb24gdChsKXtyZXR1cm4gbCYmbC5fX2VzTW9kdWxlP2w6e2RlZmF1bHQ6bH19dmFyIHI9U3QoKSxuPXQociksbz10dCgpLGk9b1MoKSxzPXQoaSksYT1bXS5zbGljZTtmdW5jdGlvbiBjKCl7fWMucHJvdG90eXBlPXtjb21waWxlcjpjLGVxdWFsczpmdW5jdGlvbihsKXt2YXIgXz10aGlzLm9wY29kZXMubGVuZ3RoO2lmKGwub3Bjb2Rlcy5sZW5ndGghPT1fKXJldHVybiExO2Zvcih2YXIgRT0wO0U8XztFKyspe3ZhciBoPXRoaXMub3Bjb2Rlc1tFXSxTPWwub3Bjb2Rlc1tFXTtpZihoLm9wY29kZSE9PVMub3Bjb2RlfHwhZihoLmFyZ3MsUy5hcmdzKSlyZXR1cm4hMX1fPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2Zvcih2YXIgRT0wO0U8XztFKyspaWYoIXRoaXMuY2hpbGRyZW5bRV0uZXF1YWxzKGwuY2hpbGRyZW5bRV0pKXJldHVybiExO3JldHVybiEwfSxndWlkOjAsY29tcGlsZTpmdW5jdGlvbihsLF8pe3JldHVybiB0aGlzLnNvdXJjZU5vZGU9W10sdGhpcy5vcGNvZGVzPVtdLHRoaXMuY2hpbGRyZW49W10sdGhpcy5vcHRpb25zPV8sdGhpcy5zdHJpbmdQYXJhbXM9Xy5zdHJpbmdQYXJhbXMsdGhpcy50cmFja0lkcz1fLnRyYWNrSWRzLF8uYmxvY2tQYXJhbXM9Xy5ibG9ja1BhcmFtc3x8W10sXy5rbm93bkhlbHBlcnM9by5leHRlbmQoT2JqZWN0LmNyZWF0ZShudWxsKSx7aGVscGVyTWlzc2luZzohMCxibG9ja0hlbHBlck1pc3Npbmc6ITAsZWFjaDohMCxpZjohMCx1bmxlc3M6ITAsd2l0aDohMCxsb2c6ITAsbG9va3VwOiEwfSxfLmtub3duSGVscGVycyksdGhpcy5hY2NlcHQobCl9LGNvbXBpbGVQcm9ncmFtOmZ1bmN0aW9uKGwpe3ZhciBfPW5ldyB0aGlzLmNvbXBpbGVyLEU9Xy5jb21waWxlKGwsdGhpcy5vcHRpb25zKSxoPXRoaXMuZ3VpZCsrO3JldHVybiB0aGlzLnVzZVBhcnRpYWw9dGhpcy51c2VQYXJ0aWFsfHxFLnVzZVBhcnRpYWwsdGhpcy5jaGlsZHJlbltoXT1FLHRoaXMudXNlRGVwdGhzPXRoaXMudXNlRGVwdGhzfHxFLnVzZURlcHRocyxofSxhY2NlcHQ6ZnVuY3Rpb24obCl7aWYoIXRoaXNbbC50eXBlXSl0aHJvdyBuZXcgbi5kZWZhdWx0KFwiVW5rbm93biB0eXBlOiBcIitsLnR5cGUsbCk7dGhpcy5zb3VyY2VOb2RlLnVuc2hpZnQobCk7dmFyIF89dGhpc1tsLnR5cGVdKGwpO3JldHVybiB0aGlzLnNvdXJjZU5vZGUuc2hpZnQoKSxffSxQcm9ncmFtOmZ1bmN0aW9uKGwpe3RoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy51bnNoaWZ0KGwuYmxvY2tQYXJhbXMpO2Zvcih2YXIgXz1sLmJvZHksRT1fLmxlbmd0aCxoPTA7aDxFO2grKyl0aGlzLmFjY2VwdChfW2hdKTtyZXR1cm4gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnNoaWZ0KCksdGhpcy5pc1NpbXBsZT1FPT09MSx0aGlzLmJsb2NrUGFyYW1zPWwuYmxvY2tQYXJhbXM/bC5ibG9ja1BhcmFtcy5sZW5ndGg6MCx0aGlzfSxCbG9ja1N0YXRlbWVudDpmdW5jdGlvbihsKXtwKGwpO3ZhciBfPWwucHJvZ3JhbSxFPWwuaW52ZXJzZTtfPV8mJnRoaXMuY29tcGlsZVByb2dyYW0oXyksRT1FJiZ0aGlzLmNvbXBpbGVQcm9ncmFtKEUpO3ZhciBoPXRoaXMuY2xhc3NpZnlTZXhwcihsKTtoPT09XCJoZWxwZXJcIj90aGlzLmhlbHBlclNleHByKGwsXyxFKTpoPT09XCJzaW1wbGVcIj8odGhpcy5zaW1wbGVTZXhwcihsKSx0aGlzLm9wY29kZShcInB1c2hQcm9ncmFtXCIsXyksdGhpcy5vcGNvZGUoXCJwdXNoUHJvZ3JhbVwiLEUpLHRoaXMub3Bjb2RlKFwiZW1wdHlIYXNoXCIpLHRoaXMub3Bjb2RlKFwiYmxvY2tWYWx1ZVwiLGwucGF0aC5vcmlnaW5hbCkpOih0aGlzLmFtYmlndW91c1NleHByKGwsXyxFKSx0aGlzLm9wY29kZShcInB1c2hQcm9ncmFtXCIsXyksdGhpcy5vcGNvZGUoXCJwdXNoUHJvZ3JhbVwiLEUpLHRoaXMub3Bjb2RlKFwiZW1wdHlIYXNoXCIpLHRoaXMub3Bjb2RlKFwiYW1iaWd1b3VzQmxvY2tWYWx1ZVwiKSksdGhpcy5vcGNvZGUoXCJhcHBlbmRcIil9LERlY29yYXRvckJsb2NrOmZ1bmN0aW9uKGwpe3ZhciBfPWwucHJvZ3JhbSYmdGhpcy5jb21waWxlUHJvZ3JhbShsLnByb2dyYW0pLEU9dGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhsLF8sdm9pZCAwKSxoPWwucGF0aDt0aGlzLnVzZURlY29yYXRvcnM9ITAsdGhpcy5vcGNvZGUoXCJyZWdpc3RlckRlY29yYXRvclwiLEUubGVuZ3RoLGgub3JpZ2luYWwpfSxQYXJ0aWFsU3RhdGVtZW50OmZ1bmN0aW9uKGwpe3RoaXMudXNlUGFydGlhbD0hMDt2YXIgXz1sLnByb2dyYW07XyYmKF89dGhpcy5jb21waWxlUHJvZ3JhbShsLnByb2dyYW0pKTt2YXIgRT1sLnBhcmFtcztpZihFLmxlbmd0aD4xKXRocm93IG5ldyBuLmRlZmF1bHQoXCJVbnN1cHBvcnRlZCBudW1iZXIgb2YgcGFydGlhbCBhcmd1bWVudHM6IFwiK0UubGVuZ3RoLGwpO0UubGVuZ3RofHwodGhpcy5vcHRpb25zLmV4cGxpY2l0UGFydGlhbENvbnRleHQ/dGhpcy5vcGNvZGUoXCJwdXNoTGl0ZXJhbFwiLFwidW5kZWZpbmVkXCIpOkUucHVzaCh7dHlwZTpcIlBhdGhFeHByZXNzaW9uXCIscGFydHM6W10sZGVwdGg6MH0pKTt2YXIgaD1sLm5hbWUub3JpZ2luYWwsUz1sLm5hbWUudHlwZT09PVwiU3ViRXhwcmVzc2lvblwiO1MmJnRoaXMuYWNjZXB0KGwubmFtZSksdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhsLF8sdm9pZCAwLCEwKTt2YXIgZD1sLmluZGVudHx8XCJcIjt0aGlzLm9wdGlvbnMucHJldmVudEluZGVudCYmZCYmKHRoaXMub3Bjb2RlKFwiYXBwZW5kQ29udGVudFwiLGQpLGQ9XCJcIiksdGhpcy5vcGNvZGUoXCJpbnZva2VQYXJ0aWFsXCIsUyxoLGQpLHRoaXMub3Bjb2RlKFwiYXBwZW5kXCIpfSxQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQ6ZnVuY3Rpb24obCl7dGhpcy5QYXJ0aWFsU3RhdGVtZW50KGwpfSxNdXN0YWNoZVN0YXRlbWVudDpmdW5jdGlvbihsKXt0aGlzLlN1YkV4cHJlc3Npb24obCksbC5lc2NhcGVkJiYhdGhpcy5vcHRpb25zLm5vRXNjYXBlP3RoaXMub3Bjb2RlKFwiYXBwZW5kRXNjYXBlZFwiKTp0aGlzLm9wY29kZShcImFwcGVuZFwiKX0sRGVjb3JhdG9yOmZ1bmN0aW9uKGwpe3RoaXMuRGVjb3JhdG9yQmxvY2sobCl9LENvbnRlbnRTdGF0ZW1lbnQ6ZnVuY3Rpb24obCl7bC52YWx1ZSYmdGhpcy5vcGNvZGUoXCJhcHBlbmRDb250ZW50XCIsbC52YWx1ZSl9LENvbW1lbnRTdGF0ZW1lbnQ6ZnVuY3Rpb24oKXt9LFN1YkV4cHJlc3Npb246ZnVuY3Rpb24obCl7cChsKTt2YXIgXz10aGlzLmNsYXNzaWZ5U2V4cHIobCk7Xz09PVwic2ltcGxlXCI/dGhpcy5zaW1wbGVTZXhwcihsKTpfPT09XCJoZWxwZXJcIj90aGlzLmhlbHBlclNleHByKGwpOnRoaXMuYW1iaWd1b3VzU2V4cHIobCl9LGFtYmlndW91c1NleHByOmZ1bmN0aW9uKGwsXyxFKXt2YXIgaD1sLnBhdGgsUz1oLnBhcnRzWzBdLGQ9XyE9bnVsbHx8RSE9bnVsbDt0aGlzLm9wY29kZShcImdldENvbnRleHRcIixoLmRlcHRoKSx0aGlzLm9wY29kZShcInB1c2hQcm9ncmFtXCIsXyksdGhpcy5vcGNvZGUoXCJwdXNoUHJvZ3JhbVwiLEUpLGguc3RyaWN0PSEwLHRoaXMuYWNjZXB0KGgpLHRoaXMub3Bjb2RlKFwiaW52b2tlQW1iaWd1b3VzXCIsUyxkKX0sc2ltcGxlU2V4cHI6ZnVuY3Rpb24obCl7dmFyIF89bC5wYXRoO18uc3RyaWN0PSEwLHRoaXMuYWNjZXB0KF8pLHRoaXMub3Bjb2RlKFwicmVzb2x2ZVBvc3NpYmxlTGFtYmRhXCIpfSxoZWxwZXJTZXhwcjpmdW5jdGlvbihsLF8sRSl7dmFyIGg9dGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhsLF8sRSksUz1sLnBhdGgsZD1TLnBhcnRzWzBdO2lmKHRoaXMub3B0aW9ucy5rbm93bkhlbHBlcnNbZF0pdGhpcy5vcGNvZGUoXCJpbnZva2VLbm93bkhlbHBlclwiLGgubGVuZ3RoLGQpO2Vsc2V7aWYodGhpcy5vcHRpb25zLmtub3duSGVscGVyc09ubHkpdGhyb3cgbmV3IG4uZGVmYXVsdChcIllvdSBzcGVjaWZpZWQga25vd25IZWxwZXJzT25seSwgYnV0IHVzZWQgdGhlIHVua25vd24gaGVscGVyIFwiK2QsbCk7Uy5zdHJpY3Q9ITAsUy5mYWxzeT0hMCx0aGlzLmFjY2VwdChTKSx0aGlzLm9wY29kZShcImludm9rZUhlbHBlclwiLGgubGVuZ3RoLFMub3JpZ2luYWwscy5kZWZhdWx0LmhlbHBlcnMuc2ltcGxlSWQoUykpfX0sUGF0aEV4cHJlc3Npb246ZnVuY3Rpb24obCl7dGhpcy5hZGREZXB0aChsLmRlcHRoKSx0aGlzLm9wY29kZShcImdldENvbnRleHRcIixsLmRlcHRoKTt2YXIgXz1sLnBhcnRzWzBdLEU9cy5kZWZhdWx0LmhlbHBlcnMuc2NvcGVkSWQobCksaD0hbC5kZXB0aCYmIUUmJnRoaXMuYmxvY2tQYXJhbUluZGV4KF8pO2g/dGhpcy5vcGNvZGUoXCJsb29rdXBCbG9ja1BhcmFtXCIsaCxsLnBhcnRzKTpfP2wuZGF0YT8odGhpcy5vcHRpb25zLmRhdGE9ITAsdGhpcy5vcGNvZGUoXCJsb29rdXBEYXRhXCIsbC5kZXB0aCxsLnBhcnRzLGwuc3RyaWN0KSk6dGhpcy5vcGNvZGUoXCJsb29rdXBPbkNvbnRleHRcIixsLnBhcnRzLGwuZmFsc3ksbC5zdHJpY3QsRSk6dGhpcy5vcGNvZGUoXCJwdXNoQ29udGV4dFwiKX0sU3RyaW5nTGl0ZXJhbDpmdW5jdGlvbihsKXt0aGlzLm9wY29kZShcInB1c2hTdHJpbmdcIixsLnZhbHVlKX0sTnVtYmVyTGl0ZXJhbDpmdW5jdGlvbihsKXt0aGlzLm9wY29kZShcInB1c2hMaXRlcmFsXCIsbC52YWx1ZSl9LEJvb2xlYW5MaXRlcmFsOmZ1bmN0aW9uKGwpe3RoaXMub3Bjb2RlKFwicHVzaExpdGVyYWxcIixsLnZhbHVlKX0sVW5kZWZpbmVkTGl0ZXJhbDpmdW5jdGlvbigpe3RoaXMub3Bjb2RlKFwicHVzaExpdGVyYWxcIixcInVuZGVmaW5lZFwiKX0sTnVsbExpdGVyYWw6ZnVuY3Rpb24oKXt0aGlzLm9wY29kZShcInB1c2hMaXRlcmFsXCIsXCJudWxsXCIpfSxIYXNoOmZ1bmN0aW9uKGwpe3ZhciBfPWwucGFpcnMsRT0wLGg9Xy5sZW5ndGg7Zm9yKHRoaXMub3Bjb2RlKFwicHVzaEhhc2hcIik7RTxoO0UrKyl0aGlzLnB1c2hQYXJhbShfW0VdLnZhbHVlKTtmb3IoO0UtLTspdGhpcy5vcGNvZGUoXCJhc3NpZ25Ub0hhc2hcIixfW0VdLmtleSk7dGhpcy5vcGNvZGUoXCJwb3BIYXNoXCIpfSxvcGNvZGU6ZnVuY3Rpb24obCl7dGhpcy5vcGNvZGVzLnB1c2goe29wY29kZTpsLGFyZ3M6YS5jYWxsKGFyZ3VtZW50cywxKSxsb2M6dGhpcy5zb3VyY2VOb2RlWzBdLmxvY30pfSxhZGREZXB0aDpmdW5jdGlvbihsKXshbHx8KHRoaXMudXNlRGVwdGhzPSEwKX0sY2xhc3NpZnlTZXhwcjpmdW5jdGlvbihsKXt2YXIgXz1zLmRlZmF1bHQuaGVscGVycy5zaW1wbGVJZChsLnBhdGgpLEU9XyYmISF0aGlzLmJsb2NrUGFyYW1JbmRleChsLnBhdGgucGFydHNbMF0pLGg9IUUmJnMuZGVmYXVsdC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24obCksUz0hRSYmKGh8fF8pO2lmKFMmJiFoKXt2YXIgZD1sLnBhdGgucGFydHNbMF0sZz10aGlzLm9wdGlvbnM7Zy5rbm93bkhlbHBlcnNbZF0/aD0hMDpnLmtub3duSGVscGVyc09ubHkmJihTPSExKX1yZXR1cm4gaD9cImhlbHBlclwiOlM/XCJhbWJpZ3VvdXNcIjpcInNpbXBsZVwifSxwdXNoUGFyYW1zOmZ1bmN0aW9uKGwpe2Zvcih2YXIgXz0wLEU9bC5sZW5ndGg7XzxFO18rKyl0aGlzLnB1c2hQYXJhbShsW19dKX0scHVzaFBhcmFtOmZ1bmN0aW9uKGwpe3ZhciBfPWwudmFsdWUhPW51bGw/bC52YWx1ZTpsLm9yaWdpbmFsfHxcIlwiO2lmKHRoaXMuc3RyaW5nUGFyYW1zKV8ucmVwbGFjZSYmKF89Xy5yZXBsYWNlKC9eKFxcLj9cXC5cXC8pKi9nLFwiXCIpLnJlcGxhY2UoL1xcLy9nLFwiLlwiKSksbC5kZXB0aCYmdGhpcy5hZGREZXB0aChsLmRlcHRoKSx0aGlzLm9wY29kZShcImdldENvbnRleHRcIixsLmRlcHRofHwwKSx0aGlzLm9wY29kZShcInB1c2hTdHJpbmdQYXJhbVwiLF8sbC50eXBlKSxsLnR5cGU9PT1cIlN1YkV4cHJlc3Npb25cIiYmdGhpcy5hY2NlcHQobCk7ZWxzZXtpZih0aGlzLnRyYWNrSWRzKXt2YXIgRT12b2lkIDA7aWYobC5wYXJ0cyYmIXMuZGVmYXVsdC5oZWxwZXJzLnNjb3BlZElkKGwpJiYhbC5kZXB0aCYmKEU9dGhpcy5ibG9ja1BhcmFtSW5kZXgobC5wYXJ0c1swXSkpLEUpe3ZhciBoPWwucGFydHMuc2xpY2UoMSkuam9pbihcIi5cIik7dGhpcy5vcGNvZGUoXCJwdXNoSWRcIixcIkJsb2NrUGFyYW1cIixFLGgpfWVsc2UgXz1sLm9yaWdpbmFsfHxfLF8ucmVwbGFjZSYmKF89Xy5yZXBsYWNlKC9edGhpcyg/OlxcLnwkKS8sXCJcIikucmVwbGFjZSgvXlxcLlxcLy8sXCJcIikucmVwbGFjZSgvXlxcLiQvLFwiXCIpKSx0aGlzLm9wY29kZShcInB1c2hJZFwiLGwudHlwZSxfKX10aGlzLmFjY2VwdChsKX19LHNldHVwRnVsbE11c3RhY2hlUGFyYW1zOmZ1bmN0aW9uKGwsXyxFLGgpe3ZhciBTPWwucGFyYW1zO3JldHVybiB0aGlzLnB1c2hQYXJhbXMoUyksdGhpcy5vcGNvZGUoXCJwdXNoUHJvZ3JhbVwiLF8pLHRoaXMub3Bjb2RlKFwicHVzaFByb2dyYW1cIixFKSxsLmhhc2g/dGhpcy5hY2NlcHQobC5oYXNoKTp0aGlzLm9wY29kZShcImVtcHR5SGFzaFwiLGgpLFN9LGJsb2NrUGFyYW1JbmRleDpmdW5jdGlvbihsKXtmb3IodmFyIF89MCxFPXRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5sZW5ndGg7XzxFO18rKyl7dmFyIGg9dGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zW19dLFM9aCYmby5pbmRleE9mKGgsbCk7aWYoaCYmUz49MClyZXR1cm5bXyxTXX19fTtmdW5jdGlvbiB1KGwsXyxFKXtpZihsPT1udWxsfHx0eXBlb2YgbCE9XCJzdHJpbmdcIiYmbC50eXBlIT09XCJQcm9ncmFtXCIpdGhyb3cgbmV3IG4uZGVmYXVsdChcIllvdSBtdXN0IHBhc3MgYSBzdHJpbmcgb3IgSGFuZGxlYmFycyBBU1QgdG8gSGFuZGxlYmFycy5wcmVjb21waWxlLiBZb3UgcGFzc2VkIFwiK2wpO189X3x8e30sXCJkYXRhXCJpbiBffHwoXy5kYXRhPSEwKSxfLmNvbXBhdCYmKF8udXNlRGVwdGhzPSEwKTt2YXIgaD1FLnBhcnNlKGwsXyksUz1uZXcgRS5Db21waWxlcigpLmNvbXBpbGUoaCxfKTtyZXR1cm4gbmV3IEUuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShTLF8pfWZ1bmN0aW9uIFIobCxfLEUpe2lmKF89PT12b2lkIDAmJihfPXt9KSxsPT1udWxsfHx0eXBlb2YgbCE9XCJzdHJpbmdcIiYmbC50eXBlIT09XCJQcm9ncmFtXCIpdGhyb3cgbmV3IG4uZGVmYXVsdChcIllvdSBtdXN0IHBhc3MgYSBzdHJpbmcgb3IgSGFuZGxlYmFycyBBU1QgdG8gSGFuZGxlYmFycy5jb21waWxlLiBZb3UgcGFzc2VkIFwiK2wpO189by5leHRlbmQoe30sXyksXCJkYXRhXCJpbiBffHwoXy5kYXRhPSEwKSxfLmNvbXBhdCYmKF8udXNlRGVwdGhzPSEwKTt2YXIgaD12b2lkIDA7ZnVuY3Rpb24gUygpe3ZhciBnPUUucGFyc2UobCxfKSxPPW5ldyBFLkNvbXBpbGVyKCkuY29tcGlsZShnLF8pLG09bmV3IEUuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShPLF8sdm9pZCAwLCEwKTtyZXR1cm4gRS50ZW1wbGF0ZShtKX1mdW5jdGlvbiBkKGcsTyl7cmV0dXJuIGh8fChoPVMoKSksaC5jYWxsKHRoaXMsZyxPKX1yZXR1cm4gZC5fc2V0dXA9ZnVuY3Rpb24oZyl7cmV0dXJuIGh8fChoPVMoKSksaC5fc2V0dXAoZyl9LGQuX2NoaWxkPWZ1bmN0aW9uKGcsTyxtLE4pe3JldHVybiBofHwoaD1TKCkpLGguX2NoaWxkKGcsTyxtLE4pfSxkfWZ1bmN0aW9uIGYobCxfKXtpZihsPT09XylyZXR1cm4hMDtpZihvLmlzQXJyYXkobCkmJm8uaXNBcnJheShfKSYmbC5sZW5ndGg9PT1fLmxlbmd0aCl7Zm9yKHZhciBFPTA7RTxsLmxlbmd0aDtFKyspaWYoIWYobFtFXSxfW0VdKSlyZXR1cm4hMTtyZXR1cm4hMH19ZnVuY3Rpb24gcChsKXtpZighbC5wYXRoLnBhcnRzKXt2YXIgXz1sLnBhdGg7bC5wYXRoPXt0eXBlOlwiUGF0aEV4cHJlc3Npb25cIixkYXRhOiExLGRlcHRoOjAscGFydHM6W18ub3JpZ2luYWwrXCJcIl0sb3JpZ2luYWw6Xy5vcmlnaW5hbCtcIlwiLGxvYzpfLmxvY319fX0pLEd5PVEoKGUsdCk9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITA7dmFyIHI9dHQoKSxuPXZvaWQgMDt0cnl7KHR5cGVvZiBkZWZpbmUhPVwiZnVuY3Rpb25cInx8IWRlZmluZS5hbWQpJiYobz1RdSxuPW8uU291cmNlTm9kZSl9Y2F0Y2h7fXZhciBvO258fChuPWZ1bmN0aW9uKGEsYyx1LFIpe3RoaXMuc3JjPVwiXCIsUiYmdGhpcy5hZGQoUil9LG4ucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oYSl7ci5pc0FycmF5KGEpJiYoYT1hLmpvaW4oXCJcIikpLHRoaXMuc3JjKz1hfSxwcmVwZW5kOmZ1bmN0aW9uKGEpe3IuaXNBcnJheShhKSYmKGE9YS5qb2luKFwiXCIpKSx0aGlzLnNyYz1hK3RoaXMuc3JjfSx0b1N0cmluZ1dpdGhTb3VyY2VNYXA6ZnVuY3Rpb24oKXtyZXR1cm57Y29kZTp0aGlzLnRvU3RyaW5nKCl9fSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNyY319KTtmdW5jdGlvbiBpKGEsYyx1KXtpZihyLmlzQXJyYXkoYSkpe2Zvcih2YXIgUj1bXSxmPTAscD1hLmxlbmd0aDtmPHA7ZisrKVIucHVzaChjLndyYXAoYVtmXSx1KSk7cmV0dXJuIFJ9ZWxzZSBpZih0eXBlb2YgYT09XCJib29sZWFuXCJ8fHR5cGVvZiBhPT1cIm51bWJlclwiKXJldHVybiBhK1wiXCI7cmV0dXJuIGF9ZnVuY3Rpb24gcyhhKXt0aGlzLnNyY0ZpbGU9YSx0aGlzLnNvdXJjZT1bXX1zLnByb3RvdHlwZT17aXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLnNvdXJjZS5sZW5ndGh9LHByZXBlbmQ6ZnVuY3Rpb24oYSxjKXt0aGlzLnNvdXJjZS51bnNoaWZ0KHRoaXMud3JhcChhLGMpKX0scHVzaDpmdW5jdGlvbihhLGMpe3RoaXMuc291cmNlLnB1c2godGhpcy53cmFwKGEsYykpfSxtZXJnZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZW1wdHkoKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2EuYWRkKFtcIiAgXCIsYyxgXG5gXSl9KSxhfSxlYWNoOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYz0wLHU9dGhpcy5zb3VyY2UubGVuZ3RoO2M8dTtjKyspYSh0aGlzLnNvdXJjZVtjXSl9LGVtcHR5OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jdXJyZW50TG9jYXRpb258fHtzdGFydDp7fX07cmV0dXJuIG5ldyBuKGEuc3RhcnQubGluZSxhLnN0YXJ0LmNvbHVtbix0aGlzLnNyY0ZpbGUpfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBjPWFyZ3VtZW50cy5sZW5ndGg8PTF8fGFyZ3VtZW50c1sxXT09PXZvaWQgMD90aGlzLmN1cnJlbnRMb2NhdGlvbnx8e3N0YXJ0Ont9fTphcmd1bWVudHNbMV07cmV0dXJuIGEgaW5zdGFuY2VvZiBuP2E6KGE9aShhLHRoaXMsYyksbmV3IG4oYy5zdGFydC5saW5lLGMuc3RhcnQuY29sdW1uLHRoaXMuc3JjRmlsZSxhKSl9LGZ1bmN0aW9uQ2FsbDpmdW5jdGlvbihhLGMsdSl7cmV0dXJuIHU9dGhpcy5nZW5lcmF0ZUxpc3QodSksdGhpcy53cmFwKFthLGM/XCIuXCIrYytcIihcIjpcIihcIix1LFwiKVwiXSl9LHF1b3RlZFN0cmluZzpmdW5jdGlvbihhKXtyZXR1cm4nXCInKyhhK1wiXCIpLnJlcGxhY2UoL1xcXFwvZyxcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLFwiXFxcXG5cIikucmVwbGFjZSgvXFxyL2csXCJcXFxcclwiKS5yZXBsYWNlKC9cXHUyMDI4L2csXCJcXFxcdTIwMjhcIikucmVwbGFjZSgvXFx1MjAyOS9nLFwiXFxcXHUyMDI5XCIpKydcIid9LG9iamVjdExpdGVyYWw6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcyx1PVtdO09iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIHA9aShhW2ZdLGMpO3AhPT1cInVuZGVmaW5lZFwiJiZ1LnB1c2goW2MucXVvdGVkU3RyaW5nKGYpLFwiOlwiLHBdKX0pO3ZhciBSPXRoaXMuZ2VuZXJhdGVMaXN0KHUpO3JldHVybiBSLnByZXBlbmQoXCJ7XCIpLFIuYWRkKFwifVwiKSxSfSxnZW5lcmF0ZUxpc3Q6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPXRoaXMuZW1wdHkoKSx1PTAsUj1hLmxlbmd0aDt1PFI7dSsrKXUmJmMuYWRkKFwiLFwiKSxjLmFkZChpKGFbdV0sdGhpcykpO3JldHVybiBjfSxnZW5lcmF0ZUFycmF5OmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuZ2VuZXJhdGVMaXN0KGEpO3JldHVybiBjLnByZXBlbmQoXCJbXCIpLGMuYWRkKFwiXVwiKSxjfX0sZS5kZWZhdWx0PXMsdC5leHBvcnRzPWUuZGVmYXVsdH0pLFl5PVEoKGUsdCk9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITA7ZnVuY3Rpb24gcihwKXtyZXR1cm4gcCYmcC5fX2VzTW9kdWxlP3A6e2RlZmF1bHQ6cH19dmFyIG49VnUoKSxvPVN0KCksaT1yKG8pLHM9dHQoKSxhPUd5KCksYz1yKGEpO2Z1bmN0aW9uIHUocCl7dGhpcy52YWx1ZT1wfWZ1bmN0aW9uIFIoKXt9Ui5wcm90b3R5cGU9e25hbWVMb29rdXA6ZnVuY3Rpb24ocCxsKXtyZXR1cm4gdGhpcy5pbnRlcm5hbE5hbWVMb29rdXAocCxsKX0sZGVwdGhlZExvb2t1cDpmdW5jdGlvbihwKXtyZXR1cm5bdGhpcy5hbGlhc2FibGUoXCJjb250YWluZXIubG9va3VwXCIpLFwiKGRlcHRocywgXCIsSlNPTi5zdHJpbmdpZnkocCksXCIpXCJdfSxjb21waWxlckluZm86ZnVuY3Rpb24oKXt2YXIgcD1uLkNPTVBJTEVSX1JFVklTSU9OLGw9bi5SRVZJU0lPTl9DSEFOR0VTW3BdO3JldHVybltwLGxdfSxhcHBlbmRUb0J1ZmZlcjpmdW5jdGlvbihwLGwsXyl7cmV0dXJuIHMuaXNBcnJheShwKXx8KHA9W3BdKSxwPXRoaXMuc291cmNlLndyYXAocCxsKSx0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlP1tcInJldHVybiBcIixwLFwiO1wiXTpfP1tcImJ1ZmZlciArPSBcIixwLFwiO1wiXToocC5hcHBlbmRUb0J1ZmZlcj0hMCxwKX0saW5pdGlhbGl6ZUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1b3RlZFN0cmluZyhcIlwiKX0saW50ZXJuYWxOYW1lTG9va3VwOmZ1bmN0aW9uKHAsbCl7cmV0dXJuIHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZD0hMCxbXCJsb29rdXBQcm9wZXJ0eShcIixwLFwiLFwiLEpTT04uc3RyaW5naWZ5KGwpLFwiKVwiXX0sbG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZDohMSxjb21waWxlOmZ1bmN0aW9uKHAsbCxfLEUpe3RoaXMuZW52aXJvbm1lbnQ9cCx0aGlzLm9wdGlvbnM9bCx0aGlzLnN0cmluZ1BhcmFtcz10aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zLHRoaXMudHJhY2tJZHM9dGhpcy5vcHRpb25zLnRyYWNrSWRzLHRoaXMucHJlY29tcGlsZT0hRSx0aGlzLm5hbWU9dGhpcy5lbnZpcm9ubWVudC5uYW1lLHRoaXMuaXNDaGlsZD0hIV8sdGhpcy5jb250ZXh0PV98fHtkZWNvcmF0b3JzOltdLHByb2dyYW1zOltdLGVudmlyb25tZW50czpbXX0sdGhpcy5wcmVhbWJsZSgpLHRoaXMuc3RhY2tTbG90PTAsdGhpcy5zdGFja1ZhcnM9W10sdGhpcy5hbGlhc2VzPXt9LHRoaXMucmVnaXN0ZXJzPXtsaXN0OltdfSx0aGlzLmhhc2hlcz1bXSx0aGlzLmNvbXBpbGVTdGFjaz1bXSx0aGlzLmlubGluZVN0YWNrPVtdLHRoaXMuYmxvY2tQYXJhbXM9W10sdGhpcy5jb21waWxlQ2hpbGRyZW4ocCxsKSx0aGlzLnVzZURlcHRocz10aGlzLnVzZURlcHRoc3x8cC51c2VEZXB0aHN8fHAudXNlRGVjb3JhdG9yc3x8dGhpcy5vcHRpb25zLmNvbXBhdCx0aGlzLnVzZUJsb2NrUGFyYW1zPXRoaXMudXNlQmxvY2tQYXJhbXN8fHAudXNlQmxvY2tQYXJhbXM7dmFyIGg9cC5vcGNvZGVzLFM9dm9pZCAwLGQ9dm9pZCAwLGc9dm9pZCAwLE89dm9pZCAwO2ZvcihnPTAsTz1oLmxlbmd0aDtnPE87ZysrKVM9aFtnXSx0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb249Uy5sb2MsZD1kfHxTLmxvYyx0aGlzW1Mub3Bjb2RlXS5hcHBseSh0aGlzLFMuYXJncyk7aWYodGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uPWQsdGhpcy5wdXNoU291cmNlKFwiXCIpLHRoaXMuc3RhY2tTbG90fHx0aGlzLmlubGluZVN0YWNrLmxlbmd0aHx8dGhpcy5jb21waWxlU3RhY2subGVuZ3RoKXRocm93IG5ldyBpLmRlZmF1bHQoXCJDb21waWxlIGNvbXBsZXRlZCB3aXRoIGNvbnRlbnQgbGVmdCBvbiBzdGFja1wiKTt0aGlzLmRlY29yYXRvcnMuaXNFbXB0eSgpP3RoaXMuZGVjb3JhdG9ycz12b2lkIDA6KHRoaXMudXNlRGVjb3JhdG9ycz0hMCx0aGlzLmRlY29yYXRvcnMucHJlcGVuZChbXCJ2YXIgZGVjb3JhdG9ycyA9IGNvbnRhaW5lci5kZWNvcmF0b3JzLCBcIix0aGlzLmxvb2t1cFByb3BlcnR5RnVuY3Rpb25WYXJEZWNsYXJhdGlvbigpLGA7XG5gXSksdGhpcy5kZWNvcmF0b3JzLnB1c2goXCJyZXR1cm4gZm47XCIpLEU/dGhpcy5kZWNvcmF0b3JzPUZ1bmN0aW9uLmFwcGx5KHRoaXMsW1wiZm5cIixcInByb3BzXCIsXCJjb250YWluZXJcIixcImRlcHRoMFwiLFwiZGF0YVwiLFwiYmxvY2tQYXJhbXNcIixcImRlcHRoc1wiLHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpXSk6KHRoaXMuZGVjb3JhdG9ycy5wcmVwZW5kKGBmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgZGVwdGgwLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG5gKSx0aGlzLmRlY29yYXRvcnMucHVzaChgfVxuYCksdGhpcy5kZWNvcmF0b3JzPXRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpKSk7dmFyIG09dGhpcy5jcmVhdGVGdW5jdGlvbkNvbnRleHQoRSk7aWYodGhpcy5pc0NoaWxkKXJldHVybiBtO3ZhciBOPXtjb21waWxlcjp0aGlzLmNvbXBpbGVySW5mbygpLG1haW46bX07dGhpcy5kZWNvcmF0b3JzJiYoTi5tYWluX2Q9dGhpcy5kZWNvcmF0b3JzLE4udXNlRGVjb3JhdG9ycz0hMCk7dmFyIEk9dGhpcy5jb250ZXh0LGI9SS5wcm9ncmFtcyxMPUkuZGVjb3JhdG9ycztmb3IoZz0wLE89Yi5sZW5ndGg7ZzxPO2crKyliW2ddJiYoTltnXT1iW2ddLExbZ10mJihOW2crXCJfZFwiXT1MW2ddLE4udXNlRGVjb3JhdG9ycz0hMCkpO3JldHVybiB0aGlzLmVudmlyb25tZW50LnVzZVBhcnRpYWwmJihOLnVzZVBhcnRpYWw9ITApLHRoaXMub3B0aW9ucy5kYXRhJiYoTi51c2VEYXRhPSEwKSx0aGlzLnVzZURlcHRocyYmKE4udXNlRGVwdGhzPSEwKSx0aGlzLnVzZUJsb2NrUGFyYW1zJiYoTi51c2VCbG9ja1BhcmFtcz0hMCksdGhpcy5vcHRpb25zLmNvbXBhdCYmKE4uY29tcGF0PSEwKSxFP04uY29tcGlsZXJPcHRpb25zPXRoaXMub3B0aW9uczooTi5jb21waWxlcj1KU09OLnN0cmluZ2lmeShOLmNvbXBpbGVyKSx0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb249e3N0YXJ0OntsaW5lOjEsY29sdW1uOjB9fSxOPXRoaXMub2JqZWN0TGl0ZXJhbChOKSxsLnNyY05hbWU/KE49Ti50b1N0cmluZ1dpdGhTb3VyY2VNYXAoe2ZpbGU6bC5kZXN0TmFtZX0pLE4ubWFwPU4ubWFwJiZOLm1hcC50b1N0cmluZygpKTpOPU4udG9TdHJpbmcoKSksTn0scHJlYW1ibGU6ZnVuY3Rpb24oKXt0aGlzLmxhc3RDb250ZXh0PTAsdGhpcy5zb3VyY2U9bmV3IGMuZGVmYXVsdCh0aGlzLm9wdGlvbnMuc3JjTmFtZSksdGhpcy5kZWNvcmF0b3JzPW5ldyBjLmRlZmF1bHQodGhpcy5vcHRpb25zLnNyY05hbWUpfSxjcmVhdGVGdW5jdGlvbkNvbnRleHQ6ZnVuY3Rpb24ocCl7dmFyIGw9dGhpcyxfPVwiXCIsRT10aGlzLnN0YWNrVmFycy5jb25jYXQodGhpcy5yZWdpc3RlcnMubGlzdCk7RS5sZW5ndGg+MCYmKF8rPVwiLCBcIitFLmpvaW4oXCIsIFwiKSk7dmFyIGg9MDtPYmplY3Qua2V5cyh0aGlzLmFsaWFzZXMpLmZvckVhY2goZnVuY3Rpb24oZyl7dmFyIE89bC5hbGlhc2VzW2ddO08uY2hpbGRyZW4mJk8ucmVmZXJlbmNlQ291bnQ+MSYmKF8rPVwiLCBhbGlhc1wiKyArK2grXCI9XCIrZyxPLmNoaWxkcmVuWzBdPVwiYWxpYXNcIitoKX0pLHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCYmKF8rPVwiLCBcIit0aGlzLmxvb2t1cFByb3BlcnR5RnVuY3Rpb25WYXJEZWNsYXJhdGlvbigpKTt2YXIgUz1bXCJjb250YWluZXJcIixcImRlcHRoMFwiLFwiaGVscGVyc1wiLFwicGFydGlhbHNcIixcImRhdGFcIl07KHRoaXMudXNlQmxvY2tQYXJhbXN8fHRoaXMudXNlRGVwdGhzKSYmUy5wdXNoKFwiYmxvY2tQYXJhbXNcIiksdGhpcy51c2VEZXB0aHMmJlMucHVzaChcImRlcHRoc1wiKTt2YXIgZD10aGlzLm1lcmdlU291cmNlKF8pO3JldHVybiBwPyhTLnB1c2goZCksRnVuY3Rpb24uYXBwbHkodGhpcyxTKSk6dGhpcy5zb3VyY2Uud3JhcChbXCJmdW5jdGlvbihcIixTLmpvaW4oXCIsXCIpLGApIHtcbiAgYCxkLFwifVwiXSl9LG1lcmdlU291cmNlOmZ1bmN0aW9uKHApe3ZhciBsPXRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUsXz0hdGhpcy5mb3JjZUJ1ZmZlcixFPXZvaWQgMCxoPXZvaWQgMCxTPXZvaWQgMCxkPXZvaWQgMDtyZXR1cm4gdGhpcy5zb3VyY2UuZWFjaChmdW5jdGlvbihnKXtnLmFwcGVuZFRvQnVmZmVyPyhTP2cucHJlcGVuZChcIiAgKyBcIik6Uz1nLGQ9Zyk6KFMmJihoP1MucHJlcGVuZChcImJ1ZmZlciArPSBcIik6RT0hMCxkLmFkZChcIjtcIiksUz1kPXZvaWQgMCksaD0hMCxsfHwoXz0hMSkpfSksXz9TPyhTLnByZXBlbmQoXCJyZXR1cm4gXCIpLGQuYWRkKFwiO1wiKSk6aHx8dGhpcy5zb3VyY2UucHVzaCgncmV0dXJuIFwiXCI7Jyk6KHArPVwiLCBidWZmZXIgPSBcIisoRT9cIlwiOnRoaXMuaW5pdGlhbGl6ZUJ1ZmZlcigpKSxTPyhTLnByZXBlbmQoXCJyZXR1cm4gYnVmZmVyICsgXCIpLGQuYWRkKFwiO1wiKSk6dGhpcy5zb3VyY2UucHVzaChcInJldHVybiBidWZmZXI7XCIpKSxwJiZ0aGlzLnNvdXJjZS5wcmVwZW5kKFwidmFyIFwiK3Auc3Vic3RyaW5nKDIpKyhFP1wiXCI6YDtcbmApKSx0aGlzLnNvdXJjZS5tZXJnZSgpfSxsb29rdXBQcm9wZXJ0eUZ1bmN0aW9uVmFyRGVjbGFyYXRpb246ZnVuY3Rpb24oKXtyZXR1cm5gXG4gICAgICBsb29rdXBQcm9wZXJ0eSA9IGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eSB8fCBmdW5jdGlvbihwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgIHJldHVybiBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIGAudHJpbSgpfSxibG9ja1ZhbHVlOmZ1bmN0aW9uKHApe3ZhciBsPXRoaXMuYWxpYXNhYmxlKFwiY29udGFpbmVyLmhvb2tzLmJsb2NrSGVscGVyTWlzc2luZ1wiKSxfPVt0aGlzLmNvbnRleHROYW1lKDApXTt0aGlzLnNldHVwSGVscGVyQXJncyhwLDAsXyk7dmFyIEU9dGhpcy5wb3BTdGFjaygpO18uc3BsaWNlKDEsMCxFKSx0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGwsXCJjYWxsXCIsXykpfSxhbWJpZ3VvdXNCbG9ja1ZhbHVlOmZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5hbGlhc2FibGUoXCJjb250YWluZXIuaG9va3MuYmxvY2tIZWxwZXJNaXNzaW5nXCIpLGw9W3RoaXMuY29udGV4dE5hbWUoMCldO3RoaXMuc2V0dXBIZWxwZXJBcmdzKFwiXCIsMCxsLCEwKSx0aGlzLmZsdXNoSW5saW5lKCk7dmFyIF89dGhpcy50b3BTdGFjaygpO2wuc3BsaWNlKDEsMCxfKSx0aGlzLnB1c2hTb3VyY2UoW1wiaWYgKCFcIix0aGlzLmxhc3RIZWxwZXIsXCIpIHsgXCIsXyxcIiA9IFwiLHRoaXMuc291cmNlLmZ1bmN0aW9uQ2FsbChwLFwiY2FsbFwiLGwpLFwifVwiXSl9LGFwcGVuZENvbnRlbnQ6ZnVuY3Rpb24ocCl7dGhpcy5wZW5kaW5nQ29udGVudD9wPXRoaXMucGVuZGluZ0NvbnRlbnQrcDp0aGlzLnBlbmRpbmdMb2NhdGlvbj10aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb24sdGhpcy5wZW5kaW5nQ29udGVudD1wfSxhcHBlbmQ6ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5saW5lKCkpdGhpcy5yZXBsYWNlU3RhY2soZnVuY3Rpb24obCl7cmV0dXJuW1wiICE9IG51bGwgPyBcIixsLCcgOiBcIlwiJ119KSx0aGlzLnB1c2hTb3VyY2UodGhpcy5hcHBlbmRUb0J1ZmZlcih0aGlzLnBvcFN0YWNrKCkpKTtlbHNle3ZhciBwPXRoaXMucG9wU3RhY2soKTt0aGlzLnB1c2hTb3VyY2UoW1wiaWYgKFwiLHAsXCIgIT0gbnVsbCkgeyBcIix0aGlzLmFwcGVuZFRvQnVmZmVyKHAsdm9pZCAwLCEwKSxcIiB9XCJdKSx0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlJiZ0aGlzLnB1c2hTb3VyY2UoW1wiZWxzZSB7IFwiLHRoaXMuYXBwZW5kVG9CdWZmZXIoXCInJ1wiLHZvaWQgMCwhMCksXCIgfVwiXSl9fSxhcHBlbmRFc2NhcGVkOmZ1bmN0aW9uKCl7dGhpcy5wdXNoU291cmNlKHRoaXMuYXBwZW5kVG9CdWZmZXIoW3RoaXMuYWxpYXNhYmxlKFwiY29udGFpbmVyLmVzY2FwZUV4cHJlc3Npb25cIiksXCIoXCIsdGhpcy5wb3BTdGFjaygpLFwiKVwiXSkpfSxnZXRDb250ZXh0OmZ1bmN0aW9uKHApe3RoaXMubGFzdENvbnRleHQ9cH0scHVzaENvbnRleHQ6ZnVuY3Rpb24oKXt0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5jb250ZXh0TmFtZSh0aGlzLmxhc3RDb250ZXh0KSl9LGxvb2t1cE9uQ29udGV4dDpmdW5jdGlvbihwLGwsXyxFKXt2YXIgaD0wOyFFJiZ0aGlzLm9wdGlvbnMuY29tcGF0JiYhdGhpcy5sYXN0Q29udGV4dD90aGlzLnB1c2godGhpcy5kZXB0aGVkTG9va3VwKHBbaCsrXSkpOnRoaXMucHVzaENvbnRleHQoKSx0aGlzLnJlc29sdmVQYXRoKFwiY29udGV4dFwiLHAsaCxsLF8pfSxsb29rdXBCbG9ja1BhcmFtOmZ1bmN0aW9uKHAsbCl7dGhpcy51c2VCbG9ja1BhcmFtcz0hMCx0aGlzLnB1c2goW1wiYmxvY2tQYXJhbXNbXCIscFswXSxcIl1bXCIscFsxXSxcIl1cIl0pLHRoaXMucmVzb2x2ZVBhdGgoXCJjb250ZXh0XCIsbCwxKX0sbG9va3VwRGF0YTpmdW5jdGlvbihwLGwsXyl7cD90aGlzLnB1c2hTdGFja0xpdGVyYWwoXCJjb250YWluZXIuZGF0YShkYXRhLCBcIitwK1wiKVwiKTp0aGlzLnB1c2hTdGFja0xpdGVyYWwoXCJkYXRhXCIpLHRoaXMucmVzb2x2ZVBhdGgoXCJkYXRhXCIsbCwwLCEwLF8pfSxyZXNvbHZlUGF0aDpmdW5jdGlvbihwLGwsXyxFLGgpe3ZhciBTPXRoaXM7aWYodGhpcy5vcHRpb25zLnN0cmljdHx8dGhpcy5vcHRpb25zLmFzc3VtZU9iamVjdHMpe3RoaXMucHVzaChmKHRoaXMub3B0aW9ucy5zdHJpY3QmJmgsdGhpcyxsLHApKTtyZXR1cm59Zm9yKHZhciBkPWwubGVuZ3RoO188ZDtfKyspdGhpcy5yZXBsYWNlU3RhY2soZnVuY3Rpb24oZyl7dmFyIE89Uy5uYW1lTG9va3VwKGcsbFtfXSxwKTtyZXR1cm4gRT9bXCIgJiYgXCIsT106W1wiICE9IG51bGwgPyBcIixPLFwiIDogXCIsZ119KX0scmVzb2x2ZVBvc3NpYmxlTGFtYmRhOmZ1bmN0aW9uKCl7dGhpcy5wdXNoKFt0aGlzLmFsaWFzYWJsZShcImNvbnRhaW5lci5sYW1iZGFcIiksXCIoXCIsdGhpcy5wb3BTdGFjaygpLFwiLCBcIix0aGlzLmNvbnRleHROYW1lKDApLFwiKVwiXSl9LHB1c2hTdHJpbmdQYXJhbTpmdW5jdGlvbihwLGwpe3RoaXMucHVzaENvbnRleHQoKSx0aGlzLnB1c2hTdHJpbmcobCksbCE9PVwiU3ViRXhwcmVzc2lvblwiJiYodHlwZW9mIHA9PVwic3RyaW5nXCI/dGhpcy5wdXNoU3RyaW5nKHApOnRoaXMucHVzaFN0YWNrTGl0ZXJhbChwKSl9LGVtcHR5SGFzaDpmdW5jdGlvbihwKXt0aGlzLnRyYWNrSWRzJiZ0aGlzLnB1c2goXCJ7fVwiKSx0aGlzLnN0cmluZ1BhcmFtcyYmKHRoaXMucHVzaChcInt9XCIpLHRoaXMucHVzaChcInt9XCIpKSx0aGlzLnB1c2hTdGFja0xpdGVyYWwocD9cInVuZGVmaW5lZFwiOlwie31cIil9LHB1c2hIYXNoOmZ1bmN0aW9uKCl7dGhpcy5oYXNoJiZ0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCksdGhpcy5oYXNoPXt2YWx1ZXM6e30sdHlwZXM6W10sY29udGV4dHM6W10saWRzOltdfX0scG9wSGFzaDpmdW5jdGlvbigpe3ZhciBwPXRoaXMuaGFzaDt0aGlzLmhhc2g9dGhpcy5oYXNoZXMucG9wKCksdGhpcy50cmFja0lkcyYmdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChwLmlkcykpLHRoaXMuc3RyaW5nUGFyYW1zJiYodGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChwLmNvbnRleHRzKSksdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChwLnR5cGVzKSkpLHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwocC52YWx1ZXMpKX0scHVzaFN0cmluZzpmdW5jdGlvbihwKXt0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5xdW90ZWRTdHJpbmcocCkpfSxwdXNoTGl0ZXJhbDpmdW5jdGlvbihwKXt0aGlzLnB1c2hTdGFja0xpdGVyYWwocCl9LHB1c2hQcm9ncmFtOmZ1bmN0aW9uKHApe3AhPW51bGw/dGhpcy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMucHJvZ3JhbUV4cHJlc3Npb24ocCkpOnRoaXMucHVzaFN0YWNrTGl0ZXJhbChudWxsKX0scmVnaXN0ZXJEZWNvcmF0b3I6ZnVuY3Rpb24ocCxsKXt2YXIgXz10aGlzLm5hbWVMb29rdXAoXCJkZWNvcmF0b3JzXCIsbCxcImRlY29yYXRvclwiKSxFPXRoaXMuc2V0dXBIZWxwZXJBcmdzKGwscCk7dGhpcy5kZWNvcmF0b3JzLnB1c2goW1wiZm4gPSBcIix0aGlzLmRlY29yYXRvcnMuZnVuY3Rpb25DYWxsKF8sXCJcIixbXCJmblwiLFwicHJvcHNcIixcImNvbnRhaW5lclwiLEVdKSxcIiB8fCBmbjtcIl0pfSxpbnZva2VIZWxwZXI6ZnVuY3Rpb24ocCxsLF8pe3ZhciBFPXRoaXMucG9wU3RhY2soKSxoPXRoaXMuc2V0dXBIZWxwZXIocCxsKSxTPVtdO18mJlMucHVzaChoLm5hbWUpLFMucHVzaChFKSx0aGlzLm9wdGlvbnMuc3RyaWN0fHxTLnB1c2godGhpcy5hbGlhc2FibGUoXCJjb250YWluZXIuaG9va3MuaGVscGVyTWlzc2luZ1wiKSk7dmFyIGQ9W1wiKFwiLHRoaXMuaXRlbXNTZXBhcmF0ZWRCeShTLFwifHxcIiksXCIpXCJdLGc9dGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGQsXCJjYWxsXCIsaC5jYWxsUGFyYW1zKTt0aGlzLnB1c2goZyl9LGl0ZW1zU2VwYXJhdGVkQnk6ZnVuY3Rpb24ocCxsKXt2YXIgXz1bXTtfLnB1c2gocFswXSk7Zm9yKHZhciBFPTE7RTxwLmxlbmd0aDtFKyspXy5wdXNoKGwscFtFXSk7cmV0dXJuIF99LGludm9rZUtub3duSGVscGVyOmZ1bmN0aW9uKHAsbCl7dmFyIF89dGhpcy5zZXR1cEhlbHBlcihwLGwpO3RoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoXy5uYW1lLFwiY2FsbFwiLF8uY2FsbFBhcmFtcykpfSxpbnZva2VBbWJpZ3VvdXM6ZnVuY3Rpb24ocCxsKXt0aGlzLnVzZVJlZ2lzdGVyKFwiaGVscGVyXCIpO3ZhciBfPXRoaXMucG9wU3RhY2soKTt0aGlzLmVtcHR5SGFzaCgpO3ZhciBFPXRoaXMuc2V0dXBIZWxwZXIoMCxwLGwpLGg9dGhpcy5sYXN0SGVscGVyPXRoaXMubmFtZUxvb2t1cChcImhlbHBlcnNcIixwLFwiaGVscGVyXCIpLFM9W1wiKFwiLFwiKGhlbHBlciA9IFwiLGgsXCIgfHwgXCIsXyxcIilcIl07dGhpcy5vcHRpb25zLnN0cmljdHx8KFNbMF09XCIoaGVscGVyID0gXCIsUy5wdXNoKFwiICE9IG51bGwgPyBoZWxwZXIgOiBcIix0aGlzLmFsaWFzYWJsZShcImNvbnRhaW5lci5ob29rcy5oZWxwZXJNaXNzaW5nXCIpKSksdGhpcy5wdXNoKFtcIihcIixTLEUucGFyYW1zSW5pdD9bXCIpLChcIixFLnBhcmFtc0luaXRdOltdLFwiKSxcIixcIih0eXBlb2YgaGVscGVyID09PSBcIix0aGlzLmFsaWFzYWJsZSgnXCJmdW5jdGlvblwiJyksXCIgPyBcIix0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoXCJoZWxwZXJcIixcImNhbGxcIixFLmNhbGxQYXJhbXMpLFwiIDogaGVscGVyKSlcIl0pfSxpbnZva2VQYXJ0aWFsOmZ1bmN0aW9uKHAsbCxfKXt2YXIgRT1bXSxoPXRoaXMuc2V0dXBQYXJhbXMobCwxLEUpO3AmJihsPXRoaXMucG9wU3RhY2soKSxkZWxldGUgaC5uYW1lKSxfJiYoaC5pbmRlbnQ9SlNPTi5zdHJpbmdpZnkoXykpLGguaGVscGVycz1cImhlbHBlcnNcIixoLnBhcnRpYWxzPVwicGFydGlhbHNcIixoLmRlY29yYXRvcnM9XCJjb250YWluZXIuZGVjb3JhdG9yc1wiLHA/RS51bnNoaWZ0KGwpOkUudW5zaGlmdCh0aGlzLm5hbWVMb29rdXAoXCJwYXJ0aWFsc1wiLGwsXCJwYXJ0aWFsXCIpKSx0aGlzLm9wdGlvbnMuY29tcGF0JiYoaC5kZXB0aHM9XCJkZXB0aHNcIiksaD10aGlzLm9iamVjdExpdGVyYWwoaCksRS5wdXNoKGgpLHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoXCJjb250YWluZXIuaW52b2tlUGFydGlhbFwiLFwiXCIsRSkpfSxhc3NpZ25Ub0hhc2g6ZnVuY3Rpb24ocCl7dmFyIGw9dGhpcy5wb3BTdGFjaygpLF89dm9pZCAwLEU9dm9pZCAwLGg9dm9pZCAwO3RoaXMudHJhY2tJZHMmJihoPXRoaXMucG9wU3RhY2soKSksdGhpcy5zdHJpbmdQYXJhbXMmJihFPXRoaXMucG9wU3RhY2soKSxfPXRoaXMucG9wU3RhY2soKSk7dmFyIFM9dGhpcy5oYXNoO18mJihTLmNvbnRleHRzW3BdPV8pLEUmJihTLnR5cGVzW3BdPUUpLGgmJihTLmlkc1twXT1oKSxTLnZhbHVlc1twXT1sfSxwdXNoSWQ6ZnVuY3Rpb24ocCxsLF8pe3A9PT1cIkJsb2NrUGFyYW1cIj90aGlzLnB1c2hTdGFja0xpdGVyYWwoXCJibG9ja1BhcmFtc1tcIitsWzBdK1wiXS5wYXRoW1wiK2xbMV0rXCJdXCIrKF8/XCIgKyBcIitKU09OLnN0cmluZ2lmeShcIi5cIitfKTpcIlwiKSk6cD09PVwiUGF0aEV4cHJlc3Npb25cIj90aGlzLnB1c2hTdHJpbmcobCk6cD09PVwiU3ViRXhwcmVzc2lvblwiP3RoaXMucHVzaFN0YWNrTGl0ZXJhbChcInRydWVcIik6dGhpcy5wdXNoU3RhY2tMaXRlcmFsKFwibnVsbFwiKX0sY29tcGlsZXI6Uixjb21waWxlQ2hpbGRyZW46ZnVuY3Rpb24ocCxsKXtmb3IodmFyIF89cC5jaGlsZHJlbixFPXZvaWQgMCxoPXZvaWQgMCxTPTAsZD1fLmxlbmd0aDtTPGQ7UysrKXtFPV9bU10saD1uZXcgdGhpcy5jb21waWxlcjt2YXIgZz10aGlzLm1hdGNoRXhpc3RpbmdQcm9ncmFtKEUpO2lmKGc9PW51bGwpe3RoaXMuY29udGV4dC5wcm9ncmFtcy5wdXNoKFwiXCIpO3ZhciBPPXRoaXMuY29udGV4dC5wcm9ncmFtcy5sZW5ndGg7RS5pbmRleD1PLEUubmFtZT1cInByb2dyYW1cIitPLHRoaXMuY29udGV4dC5wcm9ncmFtc1tPXT1oLmNvbXBpbGUoRSxsLHRoaXMuY29udGV4dCwhdGhpcy5wcmVjb21waWxlKSx0aGlzLmNvbnRleHQuZGVjb3JhdG9yc1tPXT1oLmRlY29yYXRvcnMsdGhpcy5jb250ZXh0LmVudmlyb25tZW50c1tPXT1FLHRoaXMudXNlRGVwdGhzPXRoaXMudXNlRGVwdGhzfHxoLnVzZURlcHRocyx0aGlzLnVzZUJsb2NrUGFyYW1zPXRoaXMudXNlQmxvY2tQYXJhbXN8fGgudXNlQmxvY2tQYXJhbXMsRS51c2VEZXB0aHM9dGhpcy51c2VEZXB0aHMsRS51c2VCbG9ja1BhcmFtcz10aGlzLnVzZUJsb2NrUGFyYW1zfWVsc2UgRS5pbmRleD1nLmluZGV4LEUubmFtZT1cInByb2dyYW1cIitnLmluZGV4LHRoaXMudXNlRGVwdGhzPXRoaXMudXNlRGVwdGhzfHxnLnVzZURlcHRocyx0aGlzLnVzZUJsb2NrUGFyYW1zPXRoaXMudXNlQmxvY2tQYXJhbXN8fGcudXNlQmxvY2tQYXJhbXN9fSxtYXRjaEV4aXN0aW5nUHJvZ3JhbTpmdW5jdGlvbihwKXtmb3IodmFyIGw9MCxfPXRoaXMuY29udGV4dC5lbnZpcm9ubWVudHMubGVuZ3RoO2w8XztsKyspe3ZhciBFPXRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbbF07aWYoRSYmRS5lcXVhbHMocCkpcmV0dXJuIEV9fSxwcm9ncmFtRXhwcmVzc2lvbjpmdW5jdGlvbihwKXt2YXIgbD10aGlzLmVudmlyb25tZW50LmNoaWxkcmVuW3BdLF89W2wuaW5kZXgsXCJkYXRhXCIsbC5ibG9ja1BhcmFtc107cmV0dXJuKHRoaXMudXNlQmxvY2tQYXJhbXN8fHRoaXMudXNlRGVwdGhzKSYmXy5wdXNoKFwiYmxvY2tQYXJhbXNcIiksdGhpcy51c2VEZXB0aHMmJl8ucHVzaChcImRlcHRoc1wiKSxcImNvbnRhaW5lci5wcm9ncmFtKFwiK18uam9pbihcIiwgXCIpK1wiKVwifSx1c2VSZWdpc3RlcjpmdW5jdGlvbihwKXt0aGlzLnJlZ2lzdGVyc1twXXx8KHRoaXMucmVnaXN0ZXJzW3BdPSEwLHRoaXMucmVnaXN0ZXJzLmxpc3QucHVzaChwKSl9LHB1c2g6ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB1fHwocD10aGlzLnNvdXJjZS53cmFwKHApKSx0aGlzLmlubGluZVN0YWNrLnB1c2gocCkscH0scHVzaFN0YWNrTGl0ZXJhbDpmdW5jdGlvbihwKXt0aGlzLnB1c2gobmV3IHUocCkpfSxwdXNoU291cmNlOmZ1bmN0aW9uKHApe3RoaXMucGVuZGluZ0NvbnRlbnQmJih0aGlzLnNvdXJjZS5wdXNoKHRoaXMuYXBwZW5kVG9CdWZmZXIodGhpcy5zb3VyY2UucXVvdGVkU3RyaW5nKHRoaXMucGVuZGluZ0NvbnRlbnQpLHRoaXMucGVuZGluZ0xvY2F0aW9uKSksdGhpcy5wZW5kaW5nQ29udGVudD12b2lkIDApLHAmJnRoaXMuc291cmNlLnB1c2gocCl9LHJlcGxhY2VTdGFjazpmdW5jdGlvbihwKXt2YXIgbD1bXCIoXCJdLF89dm9pZCAwLEU9dm9pZCAwLGg9dm9pZCAwO2lmKCF0aGlzLmlzSW5saW5lKCkpdGhyb3cgbmV3IGkuZGVmYXVsdChcInJlcGxhY2VTdGFjayBvbiBub24taW5saW5lXCIpO3ZhciBTPXRoaXMucG9wU3RhY2soITApO2lmKFMgaW5zdGFuY2VvZiB1KV89W1MudmFsdWVdLGw9W1wiKFwiLF9dLGg9ITA7ZWxzZXtFPSEwO3ZhciBkPXRoaXMuaW5jclN0YWNrKCk7bD1bXCIoKFwiLHRoaXMucHVzaChkKSxcIiA9IFwiLFMsXCIpXCJdLF89dGhpcy50b3BTdGFjaygpfXZhciBnPXAuY2FsbCh0aGlzLF8pO2h8fHRoaXMucG9wU3RhY2soKSxFJiZ0aGlzLnN0YWNrU2xvdC0tLHRoaXMucHVzaChsLmNvbmNhdChnLFwiKVwiKSl9LGluY3JTdGFjazpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YWNrU2xvdCsrLHRoaXMuc3RhY2tTbG90PnRoaXMuc3RhY2tWYXJzLmxlbmd0aCYmdGhpcy5zdGFja1ZhcnMucHVzaChcInN0YWNrXCIrdGhpcy5zdGFja1Nsb3QpLHRoaXMudG9wU3RhY2tOYW1lKCl9LHRvcFN0YWNrTmFtZTpmdW5jdGlvbigpe3JldHVyblwic3RhY2tcIit0aGlzLnN0YWNrU2xvdH0sZmx1c2hJbmxpbmU6ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmlubGluZVN0YWNrO3RoaXMuaW5saW5lU3RhY2s9W107Zm9yKHZhciBsPTAsXz1wLmxlbmd0aDtsPF87bCsrKXt2YXIgRT1wW2xdO2lmKEUgaW5zdGFuY2VvZiB1KXRoaXMuY29tcGlsZVN0YWNrLnB1c2goRSk7ZWxzZXt2YXIgaD10aGlzLmluY3JTdGFjaygpO3RoaXMucHVzaFNvdXJjZShbaCxcIiA9IFwiLEUsXCI7XCJdKSx0aGlzLmNvbXBpbGVTdGFjay5wdXNoKGgpfX19LGlzSW5saW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5saW5lU3RhY2subGVuZ3RofSxwb3BTdGFjazpmdW5jdGlvbihwKXt2YXIgbD10aGlzLmlzSW5saW5lKCksXz0obD90aGlzLmlubGluZVN0YWNrOnRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTtpZighcCYmXyBpbnN0YW5jZW9mIHUpcmV0dXJuIF8udmFsdWU7aWYoIWwpe2lmKCF0aGlzLnN0YWNrU2xvdCl0aHJvdyBuZXcgaS5kZWZhdWx0KFwiSW52YWxpZCBzdGFjayBwb3BcIik7dGhpcy5zdGFja1Nsb3QtLX1yZXR1cm4gX30sdG9wU3RhY2s6ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmlzSW5saW5lKCk/dGhpcy5pbmxpbmVTdGFjazp0aGlzLmNvbXBpbGVTdGFjayxsPXBbcC5sZW5ndGgtMV07cmV0dXJuIGwgaW5zdGFuY2VvZiB1P2wudmFsdWU6bH0sY29udGV4dE5hbWU6ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudXNlRGVwdGhzJiZwP1wiZGVwdGhzW1wiK3ArXCJdXCI6XCJkZXB0aFwiK3B9LHF1b3RlZFN0cmluZzpmdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5zb3VyY2UucXVvdGVkU3RyaW5nKHApfSxvYmplY3RMaXRlcmFsOmZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnNvdXJjZS5vYmplY3RMaXRlcmFsKHApfSxhbGlhc2FibGU6ZnVuY3Rpb24ocCl7dmFyIGw9dGhpcy5hbGlhc2VzW3BdO3JldHVybiBsPyhsLnJlZmVyZW5jZUNvdW50KyssbCk6KGw9dGhpcy5hbGlhc2VzW3BdPXRoaXMuc291cmNlLndyYXAocCksbC5hbGlhc2FibGU9ITAsbC5yZWZlcmVuY2VDb3VudD0xLGwpfSxzZXR1cEhlbHBlcjpmdW5jdGlvbihwLGwsXyl7dmFyIEU9W10saD10aGlzLnNldHVwSGVscGVyQXJncyhsLHAsRSxfKSxTPXRoaXMubmFtZUxvb2t1cChcImhlbHBlcnNcIixsLFwiaGVscGVyXCIpLGQ9dGhpcy5hbGlhc2FibGUodGhpcy5jb250ZXh0TmFtZSgwKStcIiAhPSBudWxsID8gXCIrdGhpcy5jb250ZXh0TmFtZSgwKStcIiA6IChjb250YWluZXIubnVsbENvbnRleHQgfHwge30pXCIpO3JldHVybntwYXJhbXM6RSxwYXJhbXNJbml0OmgsbmFtZTpTLGNhbGxQYXJhbXM6W2RdLmNvbmNhdChFKX19LHNldHVwUGFyYW1zOmZ1bmN0aW9uKHAsbCxfKXt2YXIgRT17fSxoPVtdLFM9W10sZD1bXSxnPSFfLE89dm9pZCAwO2cmJihfPVtdKSxFLm5hbWU9dGhpcy5xdW90ZWRTdHJpbmcocCksRS5oYXNoPXRoaXMucG9wU3RhY2soKSx0aGlzLnRyYWNrSWRzJiYoRS5oYXNoSWRzPXRoaXMucG9wU3RhY2soKSksdGhpcy5zdHJpbmdQYXJhbXMmJihFLmhhc2hUeXBlcz10aGlzLnBvcFN0YWNrKCksRS5oYXNoQ29udGV4dHM9dGhpcy5wb3BTdGFjaygpKTt2YXIgbT10aGlzLnBvcFN0YWNrKCksTj10aGlzLnBvcFN0YWNrKCk7KE58fG0pJiYoRS5mbj1OfHxcImNvbnRhaW5lci5ub29wXCIsRS5pbnZlcnNlPW18fFwiY29udGFpbmVyLm5vb3BcIik7Zm9yKHZhciBJPWw7SS0tOylPPXRoaXMucG9wU3RhY2soKSxfW0ldPU8sdGhpcy50cmFja0lkcyYmKGRbSV09dGhpcy5wb3BTdGFjaygpKSx0aGlzLnN0cmluZ1BhcmFtcyYmKFNbSV09dGhpcy5wb3BTdGFjaygpLGhbSV09dGhpcy5wb3BTdGFjaygpKTtyZXR1cm4gZyYmKEUuYXJncz10aGlzLnNvdXJjZS5nZW5lcmF0ZUFycmF5KF8pKSx0aGlzLnRyYWNrSWRzJiYoRS5pZHM9dGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShkKSksdGhpcy5zdHJpbmdQYXJhbXMmJihFLnR5cGVzPXRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoUyksRS5jb250ZXh0cz10aGlzLnNvdXJjZS5nZW5lcmF0ZUFycmF5KGgpKSx0aGlzLm9wdGlvbnMuZGF0YSYmKEUuZGF0YT1cImRhdGFcIiksdGhpcy51c2VCbG9ja1BhcmFtcyYmKEUuYmxvY2tQYXJhbXM9XCJibG9ja1BhcmFtc1wiKSxFfSxzZXR1cEhlbHBlckFyZ3M6ZnVuY3Rpb24ocCxsLF8sRSl7dmFyIGg9dGhpcy5zZXR1cFBhcmFtcyhwLGwsXyk7cmV0dXJuIGgubG9jPUpTT04uc3RyaW5naWZ5KHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiksaD10aGlzLm9iamVjdExpdGVyYWwoaCksRT8odGhpcy51c2VSZWdpc3RlcihcIm9wdGlvbnNcIiksXy5wdXNoKFwib3B0aW9uc1wiKSxbXCJvcHRpb25zPVwiLGhdKTpfPyhfLnB1c2goaCksXCJcIik6aH19LGZ1bmN0aW9uKCl7Zm9yKHZhciBwPVwiYnJlYWsgZWxzZSBuZXcgdmFyIGNhc2UgZmluYWxseSByZXR1cm4gdm9pZCBjYXRjaCBmb3Igc3dpdGNoIHdoaWxlIGNvbnRpbnVlIGZ1bmN0aW9uIHRoaXMgd2l0aCBkZWZhdWx0IGlmIHRocm93IGRlbGV0ZSBpbiB0cnkgZG8gaW5zdGFuY2VvZiB0eXBlb2YgYWJzdHJhY3QgZW51bSBpbnQgc2hvcnQgYm9vbGVhbiBleHBvcnQgaW50ZXJmYWNlIHN0YXRpYyBieXRlIGV4dGVuZHMgbG9uZyBzdXBlciBjaGFyIGZpbmFsIG5hdGl2ZSBzeW5jaHJvbml6ZWQgY2xhc3MgZmxvYXQgcGFja2FnZSB0aHJvd3MgY29uc3QgZ290byBwcml2YXRlIHRyYW5zaWVudCBkZWJ1Z2dlciBpbXBsZW1lbnRzIHByb3RlY3RlZCB2b2xhdGlsZSBkb3VibGUgaW1wb3J0IHB1YmxpYyBsZXQgeWllbGQgYXdhaXQgbnVsbCB0cnVlIGZhbHNlXCIuc3BsaXQoXCIgXCIpLGw9Ui5SRVNFUlZFRF9XT1JEUz17fSxfPTAsRT1wLmxlbmd0aDtfPEU7XysrKWxbcFtfXV09ITB9KCksUi5pc1ZhbGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZT1mdW5jdGlvbihwKXtyZXR1cm4hUi5SRVNFUlZFRF9XT1JEU1twXSYmL15bYS16QS1aXyRdWzAtOWEtekEtWl8kXSokLy50ZXN0KHApfTtmdW5jdGlvbiBmKHAsbCxfLEUpe3ZhciBoPWwucG9wU3RhY2soKSxTPTAsZD1fLmxlbmd0aDtmb3IocCYmZC0tO1M8ZDtTKyspaD1sLm5hbWVMb29rdXAoaCxfW1NdLEUpO3JldHVybiBwP1tsLmFsaWFzYWJsZShcImNvbnRhaW5lci5zdHJpY3RcIiksXCIoXCIsaCxcIiwgXCIsbC5xdW90ZWRTdHJpbmcoX1tTXSksXCIsIFwiLEpTT04uc3RyaW5naWZ5KGwuc291cmNlLmN1cnJlbnRMb2NhdGlvbiksXCIgKVwiXTpofWUuZGVmYXVsdD1SLHQuZXhwb3J0cz1lLmRlZmF1bHR9KSxqeT1RKChlLHQpPT57XCJ1c2Ugc3RyaWN0XCI7ZS5fX2VzTW9kdWxlPSEwO2Z1bmN0aW9uIHIoZCl7cmV0dXJuIGQmJmQuX19lc01vZHVsZT9kOntkZWZhdWx0OmR9fXZhciBuPUZ5KCksbz1yKG4pLGk9b1MoKSxzPXIoaSksYT1IeSgpLGM9JHkoKSx1PVl5KCksUj1yKHUpLGY9SHUoKSxwPXIoZiksbD1uUygpLF89cihsKSxFPW8uZGVmYXVsdC5jcmVhdGU7ZnVuY3Rpb24gaCgpe3ZhciBkPUUoKTtyZXR1cm4gZC5jb21waWxlPWZ1bmN0aW9uKGcsTyl7cmV0dXJuIGMuY29tcGlsZShnLE8sZCl9LGQucHJlY29tcGlsZT1mdW5jdGlvbihnLE8pe3JldHVybiBjLnByZWNvbXBpbGUoZyxPLGQpfSxkLkFTVD1zLmRlZmF1bHQsZC5Db21waWxlcj1jLkNvbXBpbGVyLGQuSmF2YVNjcmlwdENvbXBpbGVyPVIuZGVmYXVsdCxkLlBhcnNlcj1hLnBhcnNlcixkLnBhcnNlPWEucGFyc2UsZC5wYXJzZVdpdGhvdXRQcm9jZXNzaW5nPWEucGFyc2VXaXRob3V0UHJvY2Vzc2luZyxkfXZhciBTPWgoKTtTLmNyZWF0ZT1oLF8uZGVmYXVsdChTKSxTLlZpc2l0b3I9cC5kZWZhdWx0LFMuZGVmYXVsdD1TLGUuZGVmYXVsdD1TLHQuZXhwb3J0cz1lLmRlZmF1bHR9KSxLeT1RKGU9PntcInVzZSBzdHJpY3RcIjtlLl9fZXNNb2R1bGU9ITAsZS5wcmludD1vLGUuUHJpbnRWaXNpdG9yPWk7ZnVuY3Rpb24gdChzKXtyZXR1cm4gcyYmcy5fX2VzTW9kdWxlP3M6e2RlZmF1bHQ6c319dmFyIHI9SHUoKSxuPXQocik7ZnVuY3Rpb24gbyhzKXtyZXR1cm4gbmV3IGkoKS5hY2NlcHQocyl9ZnVuY3Rpb24gaSgpe3RoaXMucGFkZGluZz0wfWkucHJvdG90eXBlPW5ldyBuLmRlZmF1bHQsaS5wcm90b3R5cGUucGFkPWZ1bmN0aW9uKHMpe2Zvcih2YXIgYT1cIlwiLGM9MCx1PXRoaXMucGFkZGluZztjPHU7YysrKWErPVwiICBcIjtyZXR1cm4gYSs9cytgXG5gLGF9LGkucHJvdG90eXBlLlByb2dyYW09ZnVuY3Rpb24ocyl7dmFyIGE9XCJcIixjPXMuYm9keSx1PXZvaWQgMCxSPXZvaWQgMDtpZihzLmJsb2NrUGFyYW1zKXt2YXIgZj1cIkJMT0NLIFBBUkFNUzogW1wiO2Zvcih1PTAsUj1zLmJsb2NrUGFyYW1zLmxlbmd0aDt1PFI7dSsrKWYrPVwiIFwiK3MuYmxvY2tQYXJhbXNbdV07Zis9XCIgXVwiLGErPXRoaXMucGFkKGYpfWZvcih1PTAsUj1jLmxlbmd0aDt1PFI7dSsrKWErPXRoaXMuYWNjZXB0KGNbdV0pO3JldHVybiB0aGlzLnBhZGRpbmctLSxhfSxpLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5wYWQoXCJ7eyBcIit0aGlzLlN1YkV4cHJlc3Npb24ocykrXCIgfX1cIil9LGkucHJvdG90eXBlLkRlY29yYXRvcj1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy5wYWQoXCJ7eyBESVJFQ1RJVkUgXCIrdGhpcy5TdWJFeHByZXNzaW9uKHMpK1wiIH19XCIpfSxpLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudD1pLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jaz1mdW5jdGlvbihzKXt2YXIgYT1cIlwiO3JldHVybiBhKz10aGlzLnBhZCgocy50eXBlPT09XCJEZWNvcmF0b3JCbG9ja1wiP1wiRElSRUNUSVZFIFwiOlwiXCIpK1wiQkxPQ0s6XCIpLHRoaXMucGFkZGluZysrLGErPXRoaXMucGFkKHRoaXMuU3ViRXhwcmVzc2lvbihzKSkscy5wcm9ncmFtJiYoYSs9dGhpcy5wYWQoXCJQUk9HUkFNOlwiKSx0aGlzLnBhZGRpbmcrKyxhKz10aGlzLmFjY2VwdChzLnByb2dyYW0pLHRoaXMucGFkZGluZy0tKSxzLmludmVyc2UmJihzLnByb2dyYW0mJnRoaXMucGFkZGluZysrLGErPXRoaXMucGFkKFwie3tefX1cIiksdGhpcy5wYWRkaW5nKyssYSs9dGhpcy5hY2NlcHQocy5pbnZlcnNlKSx0aGlzLnBhZGRpbmctLSxzLnByb2dyYW0mJnRoaXMucGFkZGluZy0tKSx0aGlzLnBhZGRpbmctLSxhfSxpLnByb3RvdHlwZS5QYXJ0aWFsU3RhdGVtZW50PWZ1bmN0aW9uKHMpe3ZhciBhPVwiUEFSVElBTDpcIitzLm5hbWUub3JpZ2luYWw7cmV0dXJuIHMucGFyYW1zWzBdJiYoYSs9XCIgXCIrdGhpcy5hY2NlcHQocy5wYXJhbXNbMF0pKSxzLmhhc2gmJihhKz1cIiBcIit0aGlzLmFjY2VwdChzLmhhc2gpKSx0aGlzLnBhZChcInt7PiBcIithK1wiIH19XCIpfSxpLnByb3RvdHlwZS5QYXJ0aWFsQmxvY2tTdGF0ZW1lbnQ9ZnVuY3Rpb24ocyl7dmFyIGE9XCJQQVJUSUFMIEJMT0NLOlwiK3MubmFtZS5vcmlnaW5hbDtyZXR1cm4gcy5wYXJhbXNbMF0mJihhKz1cIiBcIit0aGlzLmFjY2VwdChzLnBhcmFtc1swXSkpLHMuaGFzaCYmKGErPVwiIFwiK3RoaXMuYWNjZXB0KHMuaGFzaCkpLGErPVwiIFwiK3RoaXMucGFkKFwiUFJPR1JBTTpcIiksdGhpcy5wYWRkaW5nKyssYSs9dGhpcy5hY2NlcHQocy5wcm9ncmFtKSx0aGlzLnBhZGRpbmctLSx0aGlzLnBhZChcInt7PiBcIithK1wiIH19XCIpfSxpLnByb3RvdHlwZS5Db250ZW50U3RhdGVtZW50PWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnBhZChcIkNPTlRFTlRbICdcIitzLnZhbHVlK1wiJyBdXCIpfSxpLnByb3RvdHlwZS5Db21tZW50U3RhdGVtZW50PWZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnBhZChcInt7ISAnXCIrcy52YWx1ZStcIicgfX1cIil9LGkucHJvdG90eXBlLlN1YkV4cHJlc3Npb249ZnVuY3Rpb24ocyl7Zm9yKHZhciBhPXMucGFyYW1zLGM9W10sdT12b2lkIDAsUj0wLGY9YS5sZW5ndGg7UjxmO1IrKyljLnB1c2godGhpcy5hY2NlcHQoYVtSXSkpO3JldHVybiBhPVwiW1wiK2Muam9pbihcIiwgXCIpK1wiXVwiLHU9cy5oYXNoP1wiIFwiK3RoaXMuYWNjZXB0KHMuaGFzaCk6XCJcIix0aGlzLmFjY2VwdChzLnBhdGgpK1wiIFwiK2ErdX0saS5wcm90b3R5cGUuUGF0aEV4cHJlc3Npb249ZnVuY3Rpb24ocyl7dmFyIGE9cy5wYXJ0cy5qb2luKFwiL1wiKTtyZXR1cm4ocy5kYXRhP1wiQFwiOlwiXCIpK1wiUEFUSDpcIithfSxpLnByb3RvdHlwZS5TdHJpbmdMaXRlcmFsPWZ1bmN0aW9uKHMpe3JldHVybidcIicrcy52YWx1ZSsnXCInfSxpLnByb3RvdHlwZS5OdW1iZXJMaXRlcmFsPWZ1bmN0aW9uKHMpe3JldHVyblwiTlVNQkVSe1wiK3MudmFsdWUrXCJ9XCJ9LGkucHJvdG90eXBlLkJvb2xlYW5MaXRlcmFsPWZ1bmN0aW9uKHMpe3JldHVyblwiQk9PTEVBTntcIitzLnZhbHVlK1wifVwifSxpLnByb3RvdHlwZS5VbmRlZmluZWRMaXRlcmFsPWZ1bmN0aW9uKCl7cmV0dXJuXCJVTkRFRklORURcIn0saS5wcm90b3R5cGUuTnVsbExpdGVyYWw9ZnVuY3Rpb24oKXtyZXR1cm5cIk5VTExcIn0saS5wcm90b3R5cGUuSGFzaD1mdW5jdGlvbihzKXtmb3IodmFyIGE9cy5wYWlycyxjPVtdLHU9MCxSPWEubGVuZ3RoO3U8Ujt1KyspYy5wdXNoKHRoaXMuYWNjZXB0KGFbdV0pKTtyZXR1cm5cIkhBU0h7XCIrYy5qb2luKFwiLCBcIikrXCJ9XCJ9LGkucHJvdG90eXBlLkhhc2hQYWlyPWZ1bmN0aW9uKHMpe3JldHVybiBzLmtleStcIj1cIit0aGlzLmFjY2VwdChzLnZhbHVlKX19KSxYeT1RKChlLHQpPT57dmFyIHI9ankoKS5kZWZhdWx0LG49S3koKTtyLlByaW50VmlzaXRvcj1uLlByaW50VmlzaXRvcixyLnByaW50PW4ucHJpbnQsdC5leHBvcnRzPXI7ZnVuY3Rpb24gbyhpLHMpe3ZhciBhPVFtLGM9YS5yZWFkRmlsZVN5bmMocyxcInV0ZjhcIik7aS5leHBvcnRzPXIuY29tcGlsZShjKX10eXBlb2YgVXM8XCJ1XCImJlVzLmV4dGVuc2lvbnMmJihVcy5leHRlbnNpb25zW1wiLmhhbmRsZWJhcnNcIl09byxVcy5leHRlbnNpb25zW1wiLmhic1wiXT1vKX0pLHF5PU55KFh5KCkpLHtkZWZhdWx0OlptLC4uLlF5fT1xeSxpUz1abSE9PXZvaWQgMD9abTpReX0pO3ZhciBzUz17fTtjZShzUyx7ZGVmYXVsdDooKT0+aVN9KTt2YXIgYVM9QSgoKT0+eyR1KCk7JHUoKX0pO3ZhciB6eT1wUygoeEIsY1MpPT57Y1MuZXhwb3J0cz0oYVMoKSxFUyhzUykpfSk7cmV0dXJuIHp5KCk7fSkoKTtcbiByZXR1cm4gbW9kO30pKCkiLAogICAgImh0dHBzOi8vZGVuby5sYW5kL3N0ZC9lbmNvZGluZy95YW1sLnRzIjogIigoKSA9PiB7IHZhciBtb2Q9KCgpPT57dmFyIHRlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZnI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgYXI9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIHByPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGg9KGUsbik9PigpPT4oZSYmKG49ZShlPTApKSxuKTt2YXIgaHI9KGUsbik9PigpPT4obnx8ZSgobj17ZXhwb3J0czp7fX0pLmV4cG9ydHMsbiksbi5leHBvcnRzKSxtcj0oZSxuKT0+e2Zvcih2YXIgciBpbiBuKXRlKGUscix7Z2V0Om5bcl0sZW51bWVyYWJsZTohMH0pfSxkcj0oZSxuLHIsdCk9PntpZihuJiZ0eXBlb2Ygbj09XCJvYmplY3RcInx8dHlwZW9mIG49PVwiZnVuY3Rpb25cIilmb3IobGV0IGkgb2YgYXIobikpIXByLmNhbGwoZSxpKSYmaSE9PXImJnRlKGUsaSx7Z2V0OigpPT5uW2ldLGVudW1lcmFibGU6ISh0PWZyKG4saSkpfHx0LmVudW1lcmFibGV9KTtyZXR1cm4gZX07dmFyIHlyPWU9PmRyKHRlKHt9LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLGUpO3ZhciBDLHE9aCgoKT0+e0M9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihyPVwiKHVua25vd24gcmVhc29uKVwiLHQ9XCJcIil7c3VwZXIoYCR7cn0gJHt0fWApO3RoaXMubWFyaz10O3RoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWV9dG9TdHJpbmcocil7cmV0dXJuYCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9ICR7dGhpcy5tYXJrfWB9fX0pO2Z1bmN0aW9uIERlKGUpe3JldHVybiB0eXBlb2YgZT09XCJib29sZWFuXCJ8fGUgaW5zdGFuY2VvZiBCb29sZWFufWZ1bmN0aW9uICRlKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PVwib2JqZWN0XCJ9ZnVuY3Rpb24gdyhlLG4pe2xldCByPVwiXCI7Zm9yKGxldCB0PTA7dDxuO3QrKylyKz1lO3JldHVybiByfWZ1bmN0aW9uICQoZSl7cmV0dXJuIGU9PT0wJiZOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk9PT0xL2V9dmFyIEk9aCgoKT0+e30pO3ZhciBHLFBlPWgoKCk9PntJKCk7Rz1jbGFzc3tjb25zdHJ1Y3RvcihuLHIsdCxpLG8pe3RoaXMubmFtZT1uO3RoaXMuYnVmZmVyPXI7dGhpcy5wb3NpdGlvbj10O3RoaXMubGluZT1pO3RoaXMuY29sdW1uPW99Z2V0U25pcHBldChuPTQscj03NSl7aWYoIXRoaXMuYnVmZmVyKXJldHVybiBudWxsO2xldCB0PVwiXCIsaT10aGlzLnBvc2l0aW9uO2Zvcig7aT4wJiZgXFwwXFxyXG5cXHg4NVxcdTIwMjhcXHUyMDI5YC5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChpLTEpKT09PS0xOylpZihpLT0xLHRoaXMucG9zaXRpb24taT5yLzItMSl7dD1cIiAuLi4gXCIsaSs9NTticmVha31sZXQgbz1cIlwiLGw9dGhpcy5wb3NpdGlvbjtmb3IoO2w8dGhpcy5idWZmZXIubGVuZ3RoJiZgXFwwXFxyXG5cXHg4NVxcdTIwMjhcXHUyMDI5YC5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChsKSk9PT0tMTspaWYobCs9MSxsLXRoaXMucG9zaXRpb24+ci8yLTEpe289XCIgLi4uIFwiLGwtPTU7YnJlYWt9bGV0IHU9dGhpcy5idWZmZXIuc2xpY2UoaSxsKTtyZXR1cm5gJHt3KFwiIFwiLG4pfSR7dH0ke3V9JHtvfVxuJHt3KFwiIFwiLG4rdGhpcy5wb3NpdGlvbi1pK3QubGVuZ3RoKX1eYH10b1N0cmluZyhuKXtsZXQgcix0PVwiXCI7cmV0dXJuIHRoaXMubmFtZSYmKHQrPWBpbiBcIiR7dGhpcy5uYW1lfVwiIGApLHQrPWBhdCBsaW5lICR7dGhpcy5saW5lKzF9LCBjb2x1bW4gJHt0aGlzLmNvbHVtbisxfWAsbnx8KHI9dGhpcy5nZXRTbmlwcGV0KCksciYmKHQrPWA6XG4ke3J9YCkpLHR9fX0pO2Z1bmN0aW9uIG9lKGUsbixyKXtsZXQgdD1bXTtmb3IobGV0IGkgb2YgZS5pbmNsdWRlKXI9b2UoaSxuLHIpO2ZvcihsZXQgaSBvZiBlW25dKXtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IGw9cltvXTtsLnRhZz09PWkudGFnJiZsLmtpbmQ9PT1pLmtpbmQmJnQucHVzaChvKX1yLnB1c2goaSl9cmV0dXJuIHIuZmlsdGVyKChpLG8pPT4hdC5pbmNsdWRlcyhvKSl9ZnVuY3Rpb24gYnIoLi4uZSl7bGV0IG49e2ZhbGxiYWNrOnt9LG1hcHBpbmc6e30sc2NhbGFyOnt9LHNlcXVlbmNlOnt9fTtmb3IobGV0IHIgb2YgZSlmb3IobGV0IHQgb2Ygcil0LmtpbmQhPT1udWxsJiYoblt0LmtpbmRdW3QudGFnXT1uLmZhbGxiYWNrW3QudGFnXT10KTtyZXR1cm4gbn12YXIgUyxGPWgoKCk9PntxKCk7Uz1jbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLmV4cGxpY2l0PW4uZXhwbGljaXR8fFtdLHRoaXMuaW1wbGljaXQ9bi5pbXBsaWNpdHx8W10sdGhpcy5pbmNsdWRlPW4uaW5jbHVkZXx8W107Zm9yKGxldCByIG9mIHRoaXMuaW1wbGljaXQpaWYoci5sb2FkS2luZCYmci5sb2FkS2luZCE9PVwic2NhbGFyXCIpdGhyb3cgbmV3IEMoXCJUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC5cIik7dGhpcy5jb21waWxlZEltcGxpY2l0PW9lKHRoaXMsXCJpbXBsaWNpdFwiLFtdKSx0aGlzLmNvbXBpbGVkRXhwbGljaXQ9b2UodGhpcyxcImV4cGxpY2l0XCIsW10pLHRoaXMuY29tcGlsZWRUeXBlTWFwPWJyKHRoaXMuY29tcGlsZWRJbXBsaWNpdCx0aGlzLmNvbXBpbGVkRXhwbGljaXQpfWV4dGVuZChuKXtyZXR1cm4gbmV3IFMoe2ltcGxpY2l0OlsuLi5uZXcgU2V0KFsuLi50aGlzLmltcGxpY2l0LC4uLm4/LmltcGxpY2l0Pz9bXV0pXSxleHBsaWNpdDpbLi4ubmV3IFNldChbLi4udGhpcy5leHBsaWNpdCwuLi5uPy5leHBsaWNpdD8/W11dKV0saW5jbHVkZTpbLi4ubmV3IFNldChbLi4udGhpcy5pbmNsdWRlLC4uLm4/LmluY2x1ZGU/P1tdXSldfSl9c3RhdGljIGNyZWF0ZSgpe319fSk7dmFyIGdyLHhyLG0sYj1oKCgpPT57Z3I9KCk9PiEwLHhyPWU9PmUsbT1jbGFzc3tjb25zdHJ1Y3RvcihuLHIpe3RoaXMua2luZD1udWxsO3RoaXMucmVzb2x2ZT0oKT0+ITA7dGhpcy5jb25zdHJ1Y3Q9bj0+bjt0aGlzLnRhZz1uLHImJih0aGlzLmtpbmQ9ci5raW5kLHRoaXMucmVzb2x2ZT1yLnJlc29sdmV8fGdyLHRoaXMuY29uc3RydWN0PXIuY29uc3RydWN0fHx4cix0aGlzLmluc3RhbmNlT2Y9ci5pbnN0YW5jZU9mLHRoaXMucHJlZGljYXRlPXIucHJlZGljYXRlLHRoaXMucmVwcmVzZW50PXIucmVwcmVzZW50LHRoaXMuZGVmYXVsdFN0eWxlPXIuZGVmYXVsdFN0eWxlLHRoaXMuc3R5bGVBbGlhc2VzPXIuc3R5bGVBbGlhc2VzKX19fSk7ZnVuY3Rpb24gSGUoZSxuPVwiXCIpe2lmKCFlKXRocm93IG5ldyBsZShuKX12YXIgbGUsWWU9aCgoKT0+e2xlPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3Iobil7c3VwZXIobiksdGhpcy5uYW1lPVwiRGVub1N0ZEludGVybmFsRXJyb3JcIn19fSk7dmFyIEtlPWgoKCk9Pnt9KTt2YXIgV2U9aCgoKT0+e30pO2Z1bmN0aW9uIGooZSxuLHI9MCl7cj1NYXRoLm1heCgwLE1hdGgubWluKHIsbi5ieXRlTGVuZ3RoKSk7bGV0IHQ9bi5ieXRlTGVuZ3RoLXI7cmV0dXJuIGUuYnl0ZUxlbmd0aD50JiYoZT1lLnN1YmFycmF5KDAsdCkpLG4uc2V0KGUsciksZS5ieXRlTGVuZ3RofXZhciBWZT1oKCgpPT57V2UoKX0pO3ZhciBYLHVlLFAsZHQseXQscWU9aCgoKT0+e1llKCk7S2UoKTtWZSgpO1g9MzIqMTAyNCx1ZT0yKiozMi0yLFA9Y2xhc3N7I2U7I249MDtjb25zdHJ1Y3RvcihuKXt0aGlzLiNlPW49PT12b2lkIDA/bmV3IFVpbnQ4QXJyYXkoMCk6bmV3IFVpbnQ4QXJyYXkobil9Ynl0ZXMobj17Y29weTohMH0pe3JldHVybiBuLmNvcHk9PT0hMT90aGlzLiNlLnN1YmFycmF5KHRoaXMuI24pOnRoaXMuI2Uuc2xpY2UodGhpcy4jbil9ZW1wdHkoKXtyZXR1cm4gdGhpcy4jZS5ieXRlTGVuZ3RoPD10aGlzLiNufWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy4jZS5ieXRlTGVuZ3RoLXRoaXMuI259Z2V0IGNhcGFjaXR5KCl7cmV0dXJuIHRoaXMuI2UuYnVmZmVyLmJ5dGVMZW5ndGh9dHJ1bmNhdGUobil7aWYobj09PTApe3RoaXMucmVzZXQoKTtyZXR1cm59aWYobjwwfHxuPnRoaXMubGVuZ3RoKXRocm93IEVycm9yKFwiYnl0ZXMuQnVmZmVyOiB0cnVuY2F0aW9uIG91dCBvZiByYW5nZVwiKTt0aGlzLiNyKHRoaXMuI24rbil9cmVzZXQoKXt0aGlzLiNyKDApLHRoaXMuI249MH0jdChuKXtsZXQgcj10aGlzLiNlLmJ5dGVMZW5ndGg7cmV0dXJuIG48PXRoaXMuY2FwYWNpdHktcj8odGhpcy4jcihyK24pLHIpOi0xfSNyKG4pe0hlKG48PXRoaXMuI2UuYnVmZmVyLmJ5dGVMZW5ndGgpLHRoaXMuI2U9bmV3IFVpbnQ4QXJyYXkodGhpcy4jZS5idWZmZXIsMCxuKX1yZWFkU3luYyhuKXtpZih0aGlzLmVtcHR5KCkpcmV0dXJuIHRoaXMucmVzZXQoKSxuLmJ5dGVMZW5ndGg9PT0wPzA6bnVsbDtsZXQgcj1qKHRoaXMuI2Uuc3ViYXJyYXkodGhpcy4jbiksbik7cmV0dXJuIHRoaXMuI24rPXIscn1yZWFkKG4pe2xldCByPXRoaXMucmVhZFN5bmMobik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyKX13cml0ZVN5bmMobil7bGV0IHI9dGhpcy4jaShuLmJ5dGVMZW5ndGgpO3JldHVybiBqKG4sdGhpcy4jZSxyKX13cml0ZShuKXtsZXQgcj10aGlzLndyaXRlU3luYyhuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfSNpKG4pe2xldCByPXRoaXMubGVuZ3RoO3I9PT0wJiZ0aGlzLiNuIT09MCYmdGhpcy5yZXNldCgpO2xldCB0PXRoaXMuI3Qobik7aWYodD49MClyZXR1cm4gdDtsZXQgaT10aGlzLmNhcGFjaXR5O2lmKG48PU1hdGguZmxvb3IoaS8yKS1yKWoodGhpcy4jZS5zdWJhcnJheSh0aGlzLiNuKSx0aGlzLiNlKTtlbHNle2lmKGkrbj51ZSl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYnVmZmVyIGNhbm5vdCBiZSBncm93biBiZXlvbmQgdGhlIG1heGltdW0gc2l6ZS5cIik7e2xldCBvPW5ldyBVaW50OEFycmF5KE1hdGgubWluKDIqaStuLHVlKSk7aih0aGlzLiNlLnN1YmFycmF5KHRoaXMuI24pLG8pLHRoaXMuI2U9b319cmV0dXJuIHRoaXMuI249MCx0aGlzLiNyKE1hdGgubWluKHIrbix1ZSkpLHJ9Z3JvdyhuKXtpZihuPDApdGhyb3cgRXJyb3IoXCJCdWZmZXIuZ3JvdzogbmVnYXRpdmUgY291bnRcIik7bGV0IHI9dGhpcy4jaShuKTt0aGlzLiNyKHIpfWFzeW5jIHJlYWRGcm9tKG4pe2xldCByPTAsdD1uZXcgVWludDhBcnJheShYKTtmb3IoOzspe2xldCBpPXRoaXMuY2FwYWNpdHktdGhpcy5sZW5ndGg8WCxvPWk/dDpuZXcgVWludDhBcnJheSh0aGlzLiNlLmJ1ZmZlcix0aGlzLmxlbmd0aCksbD1hd2FpdCBuLnJlYWQobyk7aWYobD09PW51bGwpcmV0dXJuIHI7aT90aGlzLndyaXRlU3luYyhvLnN1YmFycmF5KDAsbCkpOnRoaXMuI3IodGhpcy5sZW5ndGgrbCkscis9bH19cmVhZEZyb21TeW5jKG4pe2xldCByPTAsdD1uZXcgVWludDhBcnJheShYKTtmb3IoOzspe2xldCBpPXRoaXMuY2FwYWNpdHktdGhpcy5sZW5ndGg8WCxvPWk/dDpuZXcgVWludDhBcnJheSh0aGlzLiNlLmJ1ZmZlcix0aGlzLmxlbmd0aCksbD1uLnJlYWRTeW5jKG8pO2lmKGw9PT1udWxsKXJldHVybiByO2k/dGhpcy53cml0ZVN5bmMoby5zdWJhcnJheSgwLGwpKTp0aGlzLiNyKHRoaXMubGVuZ3RoK2wpLHIrPWx9fX0sZHQ9XCJcXHJcIi5jaGFyQ29kZUF0KDApLHl0PWBcbmAuY2hhckNvZGVBdCgwKX0pO2Z1bmN0aW9uIEFyKGUpe2lmKGU9PT1udWxsKXJldHVybiExO2xldCBuLHI9MCx0PWUubGVuZ3RoLGk9c2U7Zm9yKGxldCBvPTA7bzx0O28rKylpZihuPWkuaW5kZXhPZihlLmNoYXJBdChvKSksIShuPjY0KSl7aWYobjwwKXJldHVybiExO3IrPTZ9cmV0dXJuIHIlOD09PTB9ZnVuY3Rpb24gd3IoZSl7bGV0IG49ZS5yZXBsYWNlKC9bXFxyXFxuPV0vZyxcIlwiKSxyPW4ubGVuZ3RoLHQ9c2UsaT1bXSxvPTA7Zm9yKGxldCB1PTA7dTxyO3UrKyl1JTQ9PT0wJiZ1JiYoaS5wdXNoKG8+PjE2JjI1NSksaS5wdXNoKG8+PjgmMjU1KSxpLnB1c2gobyYyNTUpKSxvPW88PDZ8dC5pbmRleE9mKG4uY2hhckF0KHUpKTtsZXQgbD1yJTQqNjtyZXR1cm4gbD09PTA/KGkucHVzaChvPj4xNiYyNTUpLGkucHVzaChvPj44JjI1NSksaS5wdXNoKG8mMjU1KSk6bD09PTE4PyhpLnB1c2gobz4+MTAmMjU1KSxpLnB1c2gobz4+MiYyNTUpKTpsPT09MTImJmkucHVzaChvPj40JjI1NSksbmV3IFAobmV3IFVpbnQ4QXJyYXkoaSkpfWZ1bmN0aW9uIFNyKGUpe2xldCBuPWUubGVuZ3RoLHI9c2UsdD1cIlwiLGk9MDtmb3IobGV0IGw9MDtsPG47bCsrKWwlMz09PTAmJmwmJih0Kz1yW2k+PjE4JjYzXSx0Kz1yW2k+PjEyJjYzXSx0Kz1yW2k+PjYmNjNdLHQrPXJbaSY2M10pLGk9KGk8PDgpK2VbbF07bGV0IG89biUzO3JldHVybiBvPT09MD8odCs9cltpPj4xOCY2M10sdCs9cltpPj4xMiY2M10sdCs9cltpPj42JjYzXSx0Kz1yW2kmNjNdKTpvPT09Mj8odCs9cltpPj4xMCY2M10sdCs9cltpPj40JjYzXSx0Kz1yW2k8PDImNjNdLHQrPXJbNjRdKTpvPT09MSYmKHQrPXJbaT4+MiY2M10sdCs9cltpPDw0JjYzXSx0Kz1yWzY0XSx0Kz1yWzY0XSksdH1mdW5jdGlvbiBUcihlKXtsZXQgbj1uZXcgUDt0cnl7cmV0dXJuIDA+bi5yZWFkRnJvbVN5bmMoZSl9Y2F0Y2h7cmV0dXJuITF9ZmluYWxseXtuLnJlc2V0KCl9fXZhciBzZSxjZSxHZT1oKCgpPT57YigpO3FlKCk7c2U9YEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XG5cXHJgO2NlPW5ldyBtKFwidGFnOnlhbWwub3JnLDIwMDI6YmluYXJ5XCIse2NvbnN0cnVjdDp3cixraW5kOlwic2NhbGFyXCIscHJlZGljYXRlOlRyLHJlcHJlc2VudDpTcixyZXNvbHZlOkFyfSl9KTtmdW5jdGlvbiBDcihlKXtsZXQgbj1lLmxlbmd0aDtyZXR1cm4gbj09PTQmJihlPT09XCJ0cnVlXCJ8fGU9PT1cIlRydWVcInx8ZT09PVwiVFJVRVwiKXx8bj09PTUmJihlPT09XCJmYWxzZVwifHxlPT09XCJGYWxzZVwifHxlPT09XCJGQUxTRVwiKX1mdW5jdGlvbiBFcihlKXtyZXR1cm4gZT09PVwidHJ1ZVwifHxlPT09XCJUcnVlXCJ8fGU9PT1cIlRSVUVcIn12YXIgZmUsWGU9aCgoKT0+e2IoKTtJKCk7ZmU9bmV3IG0oXCJ0YWc6eWFtbC5vcmcsMjAwMjpib29sXCIse2NvbnN0cnVjdDpFcixkZWZhdWx0U3R5bGU6XCJsb3dlcmNhc2VcIixraW5kOlwic2NhbGFyXCIscHJlZGljYXRlOkRlLHJlcHJlc2VudDp7bG93ZXJjYXNlKGUpe3JldHVybiBlP1widHJ1ZVwiOlwiZmFsc2VcIn0sdXBwZXJjYXNlKGUpe3JldHVybiBlP1wiVFJVRVwiOlwiRkFMU0VcIn0sY2FtZWxjYXNlKGUpe3JldHVybiBlP1wiVHJ1ZVwiOlwiRmFsc2VcIn19LHJlc29sdmU6Q3J9KX0pO2Z1bmN0aW9uIExyKGUpe3JldHVybiEoIWtyLnRlc3QoZSl8fGVbZS5sZW5ndGgtMV09PT1cIl9cIil9ZnVuY3Rpb24gT3IoZSl7bGV0IG49ZS5yZXBsYWNlKC9fL2csXCJcIikudG9Mb3dlckNhc2UoKSxyPW5bMF09PT1cIi1cIj8tMToxLHQ9W107aWYoXCIrLVwiLmluZGV4T2YoblswXSk+PTAmJihuPW4uc2xpY2UoMSkpLG49PT1cIi5pbmZcIilyZXR1cm4gcj09PTE/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOk51bWJlci5ORUdBVElWRV9JTkZJTklUWTtpZihuPT09XCIubmFuXCIpcmV0dXJuIE5hTjtpZihuLmluZGV4T2YoXCI6XCIpPj0wKXtuLnNwbGl0KFwiOlwiKS5mb3JFYWNoKGw9Pnt0LnVuc2hpZnQocGFyc2VGbG9hdChsKSl9KTtsZXQgaT0wLG89MTtyZXR1cm4gdC5mb3JFYWNoKGw9PntpKz1sKm8sbyo9NjB9KSxyKml9cmV0dXJuIHIqcGFyc2VGbG9hdChuKX1mdW5jdGlvbiBJcihlLG4pe2lmKGlzTmFOKGUpKXN3aXRjaChuKXtjYXNlXCJsb3dlcmNhc2VcIjpyZXR1cm5cIi5uYW5cIjtjYXNlXCJ1cHBlcmNhc2VcIjpyZXR1cm5cIi5OQU5cIjtjYXNlXCJjYW1lbGNhc2VcIjpyZXR1cm5cIi5OYU5cIn1lbHNlIGlmKE51bWJlci5QT1NJVElWRV9JTkZJTklUWT09PWUpc3dpdGNoKG4pe2Nhc2VcImxvd2VyY2FzZVwiOnJldHVyblwiLmluZlwiO2Nhc2VcInVwcGVyY2FzZVwiOnJldHVyblwiLklORlwiO2Nhc2VcImNhbWVsY2FzZVwiOnJldHVyblwiLkluZlwifWVsc2UgaWYoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZPT09ZSlzd2l0Y2gobil7Y2FzZVwibG93ZXJjYXNlXCI6cmV0dXJuXCItLmluZlwiO2Nhc2VcInVwcGVyY2FzZVwiOnJldHVyblwiLS5JTkZcIjtjYXNlXCJjYW1lbGNhc2VcIjpyZXR1cm5cIi0uSW5mXCJ9ZWxzZSBpZigkKGUpKXJldHVyblwiLTAuMFwiO2xldCByPWUudG9TdHJpbmcoMTApO3JldHVybiBfci50ZXN0KHIpP3IucmVwbGFjZShcImVcIixcIi5lXCIpOnJ9ZnVuY3Rpb24gUnIoZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PVwiW29iamVjdCBOdW1iZXJdXCImJihlJTEhPT0wfHwkKGUpKX12YXIga3IsX3IsYWUsUWU9aCgoKT0+e2IoKTtJKCk7a3I9bmV3IFJlZ0V4cChcIl4oPzpbLStdPyg/OjB8WzEtOV1bMC05X10qKSg/OlxcXFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFxcXC5bMC05X10rKD86W2VFXVstK10/WzAtOV0rKT98Wy0rXT9bMC05XVswLTlfXSooPzo6WzAtNV0/WzAtOV0pK1xcXFwuWzAtOV9dKnxbLStdP1xcXFwuKD86aW5mfEluZnxJTkYpfFxcXFwuKD86bmFufE5hTnxOQU4pKSRcIik7X3I9L15bLStdP1swLTldK2UvO2FlPW5ldyBtKFwidGFnOnlhbWwub3JnLDIwMDI6ZmxvYXRcIix7Y29uc3RydWN0Ok9yLGRlZmF1bHRTdHlsZTpcImxvd2VyY2FzZVwiLGtpbmQ6XCJzY2FsYXJcIixwcmVkaWNhdGU6UnIscmVwcmVzZW50OklyLHJlc29sdmU6THJ9KX0pO2Z1bmN0aW9uIHplKGUpe2xldCBuPW5ldyBGdW5jdGlvbihgcmV0dXJuICR7ZX1gKSgpO2lmKCEobiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSl0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBmdW5jdGlvbiBidXQgZ290ICR7dHlwZW9mIG59OiAke2V9YCk7cmV0dXJuIG59dmFyIE1yLFplPWgoKCk9PntiKCk7TXI9bmV3IG0oXCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9mdW5jdGlvblwiLHtraW5kOlwic2NhbGFyXCIscmVzb2x2ZShlKXtpZihlPT09bnVsbClyZXR1cm4hMTt0cnl7cmV0dXJuIHplKGAke2V9YCksITB9Y2F0Y2h7cmV0dXJuITF9fSxjb25zdHJ1Y3QoZSl7cmV0dXJuIHplKGUpfSxwcmVkaWNhdGUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBGdW5jdGlvbn0scmVwcmVzZW50KGUpe3JldHVybiBlLnRvU3RyaW5nKCl9fSl9KTtmdW5jdGlvbiBVcihlKXtyZXR1cm4gNDg8PWUmJmU8PTU3fHw2NTw9ZSYmZTw9NzB8fDk3PD1lJiZlPD0xMDJ9ZnVuY3Rpb24gRnIoZSl7cmV0dXJuIDQ4PD1lJiZlPD01NX1mdW5jdGlvbiB2cihlKXtyZXR1cm4gNDg8PWUmJmU8PTU3fWZ1bmN0aW9uIE5yKGUpe2xldCBuPWUubGVuZ3RoLHI9MCx0PSExO2lmKCFuKXJldHVybiExO2xldCBpPWVbcl07aWYoKGk9PT1cIi1cInx8aT09PVwiK1wiKSYmKGk9ZVsrK3JdKSxpPT09XCIwXCIpe2lmKHIrMT09PW4pcmV0dXJuITA7aWYoaT1lWysrcl0saT09PVwiYlwiKXtmb3IocisrO3I8bjtyKyspaWYoaT1lW3JdLGkhPT1cIl9cIil7aWYoaSE9PVwiMFwiJiZpIT09XCIxXCIpcmV0dXJuITE7dD0hMH1yZXR1cm4gdCYmaSE9PVwiX1wifWlmKGk9PT1cInhcIil7Zm9yKHIrKztyPG47cisrKWlmKGk9ZVtyXSxpIT09XCJfXCIpe2lmKCFVcihlLmNoYXJDb2RlQXQocikpKXJldHVybiExO3Q9ITB9cmV0dXJuIHQmJmkhPT1cIl9cIn1mb3IoO3I8bjtyKyspaWYoaT1lW3JdLGkhPT1cIl9cIil7aWYoIUZyKGUuY2hhckNvZGVBdChyKSkpcmV0dXJuITE7dD0hMH1yZXR1cm4gdCYmaSE9PVwiX1wifWlmKGk9PT1cIl9cIilyZXR1cm4hMTtmb3IoO3I8bjtyKyspaWYoaT1lW3JdLGkhPT1cIl9cIil7aWYoaT09PVwiOlwiKWJyZWFrO2lmKCF2cihlLmNoYXJDb2RlQXQocikpKXJldHVybiExO3Q9ITB9cmV0dXJuIXR8fGk9PT1cIl9cIj8hMTppIT09XCI6XCI/ITA6L14oOlswLTVdP1swLTldKSskLy50ZXN0KGUuc2xpY2UocikpfWZ1bmN0aW9uIEJyKGUpe2xldCBuPWUscj1bXTtuLmluZGV4T2YoXCJfXCIpIT09LTEmJihuPW4ucmVwbGFjZSgvXy9nLFwiXCIpKTtsZXQgdD0xLGk9blswXTtpZigoaT09PVwiLVwifHxpPT09XCIrXCIpJiYoaT09PVwiLVwiJiYodD0tMSksbj1uLnNsaWNlKDEpLGk9blswXSksbj09PVwiMFwiKXJldHVybiAwO2lmKGk9PT1cIjBcIilyZXR1cm4gblsxXT09PVwiYlwiP3QqcGFyc2VJbnQobi5zbGljZSgyKSwyKTpuWzFdPT09XCJ4XCI/dCpwYXJzZUludChuLDE2KTp0KnBhcnNlSW50KG4sOCk7aWYobi5pbmRleE9mKFwiOlwiKSE9PS0xKXtuLnNwbGl0KFwiOlwiKS5mb3JFYWNoKHU9PntyLnVuc2hpZnQocGFyc2VJbnQodSwxMCkpfSk7bGV0IG89MCxsPTE7cmV0dXJuIHIuZm9yRWFjaCh1PT57bys9dSpsLGwqPTYwfSksdCpvfXJldHVybiB0KnBhcnNlSW50KG4sMTApfWZ1bmN0aW9uIERyKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT1cIltvYmplY3QgTnVtYmVyXVwiJiZlJTE9PT0wJiYhJChlKX12YXIgcGUsSmU9aCgoKT0+e2IoKTtJKCk7cGU9bmV3IG0oXCJ0YWc6eWFtbC5vcmcsMjAwMjppbnRcIix7Y29uc3RydWN0OkJyLGRlZmF1bHRTdHlsZTpcImRlY2ltYWxcIixraW5kOlwic2NhbGFyXCIscHJlZGljYXRlOkRyLHJlcHJlc2VudDp7YmluYXJ5KGUpe3JldHVybiBlPj0wP2AwYiR7ZS50b1N0cmluZygyKX1gOmAtMGIke2UudG9TdHJpbmcoMikuc2xpY2UoMSl9YH0sb2N0YWwoZSl7cmV0dXJuIGU+PTA/YDAke2UudG9TdHJpbmcoOCl9YDpgLTAke2UudG9TdHJpbmcoOCkuc2xpY2UoMSl9YH0sZGVjaW1hbChlKXtyZXR1cm4gZS50b1N0cmluZygxMCl9LGhleGFkZWNpbWFsKGUpe3JldHVybiBlPj0wP2AweCR7ZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1gOmAtMHgke2UudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9YH19LHJlc29sdmU6TnIsc3R5bGVBbGlhc2VzOntiaW5hcnk6WzIsXCJiaW5cIl0sZGVjaW1hbDpbMTAsXCJkZWNcIl0saGV4YWRlY2ltYWw6WzE2LFwiaGV4XCJdLG9jdGFsOls4LFwib2N0XCJdfX0pfSk7dmFyIGhlLGVuPWgoKCk9PntiKCk7aGU9bmV3IG0oXCJ0YWc6eWFtbC5vcmcsMjAwMjptYXBcIix7Y29uc3RydWN0KGUpe3JldHVybiBlIT09bnVsbD9lOnt9fSxraW5kOlwibWFwcGluZ1wifSl9KTtmdW5jdGlvbiAkcihlKXtyZXR1cm4gZT09PVwiPDxcInx8ZT09PW51bGx9dmFyIG1lLG5uPWgoKCk9PntiKCk7bWU9bmV3IG0oXCJ0YWc6eWFtbC5vcmcsMjAwMjptZXJnZVwiLHtraW5kOlwic2NhbGFyXCIscmVzb2x2ZTokcn0pfSk7ZnVuY3Rpb24ganIoZSl7bGV0IG49ZS5sZW5ndGg7cmV0dXJuIG49PT0xJiZlPT09XCJ+XCJ8fG49PT00JiYoZT09PVwibnVsbFwifHxlPT09XCJOdWxsXCJ8fGU9PT1cIk5VTExcIil9ZnVuY3Rpb24gUHIoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBIcihlKXtyZXR1cm4gZT09PW51bGx9dmFyIGRlLHJuPWgoKCk9PntiKCk7ZGU9bmV3IG0oXCJ0YWc6eWFtbC5vcmcsMjAwMjpudWxsXCIse2NvbnN0cnVjdDpQcixkZWZhdWx0U3R5bGU6XCJsb3dlcmNhc2VcIixraW5kOlwic2NhbGFyXCIscHJlZGljYXRlOkhyLHJlcHJlc2VudDp7Y2Fub25pY2FsKCl7cmV0dXJuXCJ+XCJ9LGxvd2VyY2FzZSgpe3JldHVyblwibnVsbFwifSx1cHBlcmNhc2UoKXtyZXR1cm5cIk5VTExcIn0sY2FtZWxjYXNlKCl7cmV0dXJuXCJOdWxsXCJ9fSxyZXNvbHZlOmpyfSl9KTtmdW5jdGlvbiBXcihlKXtsZXQgbj1bXSxyPVwiXCIsdD0hMTtmb3IobGV0IGkgb2YgZSl7aWYodD0hMSxLci5jYWxsKGkpIT09XCJbb2JqZWN0IE9iamVjdF1cIilyZXR1cm4hMTtmb3IociBpbiBpKWlmKFlyKGkscikpaWYoIXQpdD0hMDtlbHNlIHJldHVybiExO2lmKCF0KXJldHVybiExO2lmKG4uaW5kZXhPZihyKT09PS0xKW4ucHVzaChyKTtlbHNlIHJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFZyKGUpe3JldHVybiBlIT09bnVsbD9lOltdfXZhciBZcixLcix5ZSx0bj1oKCgpPT57YigpOyh7aGFzT3duOllyfT1PYmplY3QpLEtyPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7eWU9bmV3IG0oXCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwXCIse2NvbnN0cnVjdDpWcixraW5kOlwic2VxdWVuY2VcIixyZXNvbHZlOldyfSl9KTtmdW5jdGlvbiBHcihlKXtsZXQgbj1BcnJheS5mcm9tKHtsZW5ndGg6ZS5sZW5ndGh9KTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IHQ9ZVtyXTtpZihxci5jYWxsKHQpIT09XCJbb2JqZWN0IE9iamVjdF1cIilyZXR1cm4hMTtsZXQgaT1PYmplY3Qua2V5cyh0KTtpZihpLmxlbmd0aCE9PTEpcmV0dXJuITE7bltyXT1baVswXSx0W2lbMF1dXX1yZXR1cm4hMH1mdW5jdGlvbiBYcihlKXtpZihlPT09bnVsbClyZXR1cm5bXTtsZXQgbj1BcnJheS5mcm9tKHtsZW5ndGg6ZS5sZW5ndGh9KTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrPTEpe2xldCB0PWVbcl0saT1PYmplY3Qua2V5cyh0KTtuW3JdPVtpWzBdLHRbaVswXV1dfXJldHVybiBufXZhciBxcixiZSxvbj1oKCgpPT57YigpO3FyPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7YmU9bmV3IG0oXCJ0YWc6eWFtbC5vcmcsMjAwMjpwYWlyc1wiLHtjb25zdHJ1Y3Q6WHIsa2luZDpcInNlcXVlbmNlXCIscmVzb2x2ZTpHcn0pfSk7dmFyIGdlLHhlLGxuPWgoKCk9PntiKCk7Z2U9L15cXC8oPzxyZWdleHA+W1xcc1xcU10rKVxcLyg/PG1vZGlmaWVycz5bZ2lzbXV5XSopJC8seGU9bmV3IG0oXCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9yZWdleHBcIix7a2luZDpcInNjYWxhclwiLHJlc29sdmUoZSl7aWYoZT09PW51bGx8fCFlLmxlbmd0aClyZXR1cm4hMTtsZXQgbj1gJHtlfWA7aWYobi5jaGFyQXQoMCk9PT1cIi9cIil7aWYoIWdlLnRlc3QoZSkpcmV0dXJuITE7bGV0IHI9Wy4uLm4ubWF0Y2goZ2UpPy5ncm91cHM/Lm1vZGlmaWVycz8/XCJcIl07aWYobmV3IFNldChyKS5zaXplPHIubGVuZ3RoKXJldHVybiExfXJldHVybiEwfSxjb25zdHJ1Y3QoZSl7bGV0e3JlZ2V4cDpuPWAke2V9YCxtb2RpZmllcnM6cj1cIlwifT1gJHtlfWAubWF0Y2goZ2UpPy5ncm91cHM/P3t9O3JldHVybiBuZXcgUmVnRXhwKG4scil9LHByZWRpY2F0ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlZ0V4cH0scmVwcmVzZW50KGUpe3JldHVybiBlLnRvU3RyaW5nKCl9fSl9KTt2YXIgQWUsdW49aCgoKT0+e2IoKTtBZT1uZXcgbShcInRhZzp5YW1sLm9yZywyMDAyOnNlcVwiLHtjb25zdHJ1Y3QoZSl7cmV0dXJuIGUhPT1udWxsP2U6W119LGtpbmQ6XCJzZXF1ZW5jZVwifSl9KTtmdW5jdGlvbiB6cihlKXtpZihlPT09bnVsbClyZXR1cm4hMDtmb3IobGV0IG4gaW4gZSlpZihRcihlLG4pJiZlW25dIT09bnVsbClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBacihlKXtyZXR1cm4gZSE9PW51bGw/ZTp7fX12YXIgUXIsd2Usc249aCgoKT0+e2IoKTsoe2hhc093bjpRcn09T2JqZWN0KTt3ZT1uZXcgbShcInRhZzp5YW1sLm9yZywyMDAyOnNldFwiLHtjb25zdHJ1Y3Q6WnIsa2luZDpcIm1hcHBpbmdcIixyZXNvbHZlOnpyfSl9KTt2YXIgU2UsY249aCgoKT0+e2IoKTtTZT1uZXcgbShcInRhZzp5YW1sLm9yZywyMDAyOnN0clwiLHtjb25zdHJ1Y3QoZSl7cmV0dXJuIGUhPT1udWxsP2U6XCJcIn0sa2luZDpcInNjYWxhclwifSl9KTtmdW5jdGlvbiBKcihlKXtyZXR1cm4gZT09PW51bGw/ITE6Zm4uZXhlYyhlKSE9PW51bGx8fGFuLmV4ZWMoZSkhPT1udWxsfWZ1bmN0aW9uIGVpKGUpe2xldCBuPWZuLmV4ZWMoZSk7aWYobj09PW51bGwmJihuPWFuLmV4ZWMoZSkpLG49PT1udWxsKXRocm93IG5ldyBFcnJvcihcIkRhdGUgcmVzb2x2ZSBlcnJvclwiKTtsZXQgcj0rblsxXSx0PStuWzJdLTEsaT0rblszXTtpZighbls0XSlyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMocix0LGkpKTtsZXQgbz0rbls0XSxsPStuWzVdLHU9K25bNl0scz0wO2lmKG5bN10pe2xldCBmPW5bN10uc2xpY2UoMCwzKTtmb3IoO2YubGVuZ3RoPDM7KWYrPVwiMFwiO3M9K2Z9bGV0IGM9bnVsbDtpZihuWzldKXtsZXQgZj0rblsxMF0sZD0rKG5bMTFdfHwwKTtjPShmKjYwK2QpKjZlNCxuWzldPT09XCItXCImJihjPS1jKX1sZXQgYT1uZXcgRGF0ZShEYXRlLlVUQyhyLHQsaSxvLGwsdSxzKSk7cmV0dXJuIGMmJmEuc2V0VGltZShhLmdldFRpbWUoKS1jKSxhfWZ1bmN0aW9uIG5pKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9dmFyIGZuLGFuLFRlLHBuPWgoKCk9PntiKCk7Zm49bmV3IFJlZ0V4cChcIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkXCIpLGFuPW5ldyBSZWdFeHAoXCJeKFswLTldWzAtOV1bMC05XVswLTldKS0oWzAtOV1bMC05XT8pLShbMC05XVswLTldPykoPzpbVHRdfFsgXFxcXHRdKykoWzAtOV1bMC05XT8pOihbMC05XVswLTldKTooWzAtOV1bMC05XSkoPzpcXFxcLihbMC05XSopKT8oPzpbIFxcXFx0XSooWnwoWy0rXSkoWzAtOV1bMC05XT8pKD86OihbMC05XVswLTldKSk/KSk/JFwiKTtUZT1uZXcgbShcInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcFwiLHtjb25zdHJ1Y3Q6ZWksaW5zdGFuY2VPZjpEYXRlLGtpbmQ6XCJzY2FsYXJcIixyZXByZXNlbnQ6bmkscmVzb2x2ZTpKcn0pfSk7dmFyIENlLGhuPWgoKCk9PntiKCk7Q2U9bmV3IG0oXCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy91bmRlZmluZWRcIix7a2luZDpcInNjYWxhclwiLHJlc29sdmUoKXtyZXR1cm4hMH0sY29uc3RydWN0KCl7fSxwcmVkaWNhdGUoZSl7cmV0dXJuIHR5cGVvZiBlPlwidVwifSxyZXByZXNlbnQoKXtyZXR1cm5cIlwifX0pfSk7dmFyIEg9aCgoKT0+e0dlKCk7WGUoKTtRZSgpO1plKCk7SmUoKTtlbigpO25uKCk7cm4oKTt0bigpO29uKCk7bG4oKTt1bigpO3NuKCk7Y24oKTtwbigpO2huKCl9KTt2YXIgWSxFZT1oKCgpPT57RigpO0goKTtZPW5ldyBTKHtleHBsaWNpdDpbU2UsQWUsaGVdfSl9KTt2YXIgSyxrZT1oKCgpPT57RigpO0goKTtFZSgpO0s9bmV3IFMoe2ltcGxpY2l0OltkZSxmZSxwZSxhZV0saW5jbHVkZTpbWV19KX0pO3ZhciBXLExlPWgoKCk9PntGKCk7a2UoKTtXPW5ldyBTKHtpbmNsdWRlOltLXX0pfSk7dmFyIFIsT2U9aCgoKT0+e0YoKTtIKCk7TGUoKTtSPW5ldyBTKHtleHBsaWNpdDpbY2UseWUsYmUsd2VdLGltcGxpY2l0OltUZSxtZV0saW5jbHVkZTpbV119KX0pO3ZhciBfZSxtbj1oKCgpPT57RigpO0goKTtPZSgpO19lPW5ldyBTKHtleHBsaWNpdDpbeGUsQ2VdLGluY2x1ZGU6W1JdfSl9KTt2YXIgSWU9aCgoKT0+e0xlKCk7T2UoKTttbigpO0VlKCk7a2UoKX0pO3ZhciB2LFJlPWgoKCk9PntJZSgpO3Y9Y2xhc3N7Y29uc3RydWN0b3Iobj1SKXt0aGlzLnNjaGVtYT1ufX19KTt2YXIgUSxkbj1oKCgpPT57UmUoKTtRPWNsYXNzIGV4dGVuZHMgdntjb25zdHJ1Y3RvcihyLHtmaWxlbmFtZTp0LHNjaGVtYTppLG9uV2FybmluZzpvLGxlZ2FjeTpsPSExLGpzb246dT0hMSxsaXN0ZW5lcjpzPW51bGx9KXtzdXBlcihpKTt0aGlzLmlucHV0PXI7dGhpcy5kb2N1bWVudHM9W107dGhpcy5saW5lSW5kZW50PTA7dGhpcy5saW5lU3RhcnQ9MDt0aGlzLnBvc2l0aW9uPTA7dGhpcy5saW5lPTA7dGhpcy5yZXN1bHQ9XCJcIjt0aGlzLmZpbGVuYW1lPXQsdGhpcy5vbldhcm5pbmc9byx0aGlzLmxlZ2FjeT1sLHRoaXMuanNvbj11LHRoaXMubGlzdGVuZXI9cyx0aGlzLmltcGxpY2l0VHlwZXM9dGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdCx0aGlzLnR5cGVNYXA9dGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwLHRoaXMubGVuZ3RoPXIubGVuZ3RofX19KTtmdW5jdGlvbiBibihlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIGU9PT0xMHx8ZT09PTEzfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIGU9PT05fHxlPT09MzJ9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZT09PTl8fGU9PT0zMnx8ZT09PTEwfHxlPT09MTN9ZnVuY3Rpb24gTihlKXtyZXR1cm4gZT09PTQ0fHxlPT09OTF8fGU9PT05M3x8ZT09PTEyM3x8ZT09PTEyNX1mdW5jdGlvbiBsaShlKXtpZig0ODw9ZSYmZTw9NTcpcmV0dXJuIGUtNDg7bGV0IG49ZXwzMjtyZXR1cm4gOTc8PW4mJm48PTEwMj9uLTk3KzEwOi0xfWZ1bmN0aW9uIHVpKGUpe3JldHVybiBlPT09MTIwPzI6ZT09PTExNz80OmU9PT04NT84OjB9ZnVuY3Rpb24gc2koZSl7cmV0dXJuIDQ4PD1lJiZlPD01Nz9lLTQ4Oi0xfWZ1bmN0aW9uIGduKGUpe3JldHVybiBlPT09NDg/XCJcXDBcIjplPT09OTc/XCJcXHgwN1wiOmU9PT05OD9cIlxcYlwiOmU9PT0xMTZ8fGU9PT05P1wiXHRcIjplPT09MTEwP2BcbmA6ZT09PTExOD9cIlxcdlwiOmU9PT0xMDI/XCJcXGZcIjplPT09MTE0P1wiXFxyXCI6ZT09PTEwMT9cIlxceDFCXCI6ZT09PTMyP1wiIFwiOmU9PT0zND8nXCInOmU9PT00Nz9cIi9cIjplPT09OTI/XCJcXFxcXCI6ZT09PTc4P1wiXFx4ODVcIjplPT09OTU/XCJcXHhBMFwiOmU9PT03Nj9cIlxcdTIwMjhcIjplPT09ODA/XCJcXHUyMDI5XCI6XCJcIn1mdW5jdGlvbiBjaShlKXtyZXR1cm4gZTw9NjU1MzU/U3RyaW5nLmZyb21DaGFyQ29kZShlKTpTdHJpbmcuZnJvbUNoYXJDb2RlKChlLTY1NTM2Pj4xMCkrNTUyOTYsKGUtNjU1MzYmMTAyMykrNTYzMjApfWZ1bmN0aW9uIE9uKGUsbil7cmV0dXJuIG5ldyBDKG4sbmV3IEcoZS5maWxlbmFtZSxlLmlucHV0LGUucG9zaXRpb24sZS5saW5lLGUucG9zaXRpb24tZS5saW5lU3RhcnQpKX1mdW5jdGlvbiBwKGUsbil7dGhyb3cgT24oZSxuKX1mdW5jdGlvbiBKKGUsbil7ZS5vbldhcm5pbmcmJmUub25XYXJuaW5nLmNhbGwobnVsbCxPbihlLG4pKX1mdW5jdGlvbiBPKGUsbixyLHQpe2xldCBpO2lmKG48cil7aWYoaT1lLmlucHV0LnNsaWNlKG4sciksdClmb3IobGV0IG89MCxsPWkubGVuZ3RoO288bDtvKyspe2xldCB1PWkuY2hhckNvZGVBdChvKTtpZighKHU9PT05fHwzMjw9dSYmdTw9MTExNDExMSkpcmV0dXJuIHAoZSxcImV4cGVjdGVkIHZhbGlkIEpTT04gY2hhcmFjdGVyXCIpfWVsc2UgaWYoaWkudGVzdChpKSlyZXR1cm4gcChlLFwidGhlIHN0cmVhbSBjb250YWlucyBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnNcIik7ZS5yZXN1bHQrPWl9fWZ1bmN0aW9uIEFuKGUsbixyLHQpe2lmKCEkZShyKSlyZXR1cm4gcChlLFwiY2Fubm90IG1lcmdlIG1hcHBpbmdzOyB0aGUgcHJvdmlkZWQgc291cmNlIG9iamVjdCBpcyB1bmFjY2VwdGFibGVcIik7bGV0IGk9T2JqZWN0LmtleXMocik7Zm9yKGxldCBvPTAsbD1pLmxlbmd0aDtvPGw7bysrKXtsZXQgdT1pW29dO18obix1KXx8KG5bdV09clt1XSx0W3VdPSEwKX19ZnVuY3Rpb24gQihlLG4scix0LGksbyxsLHUpe2lmKEFycmF5LmlzQXJyYXkoaSkpe2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSk7Zm9yKGxldCBzPTAsYz1pLmxlbmd0aDtzPGM7cysrKXtpZihBcnJheS5pc0FycmF5KGlbc10pKXJldHVybiBwKGUsXCJuZXN0ZWQgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBrZXlzXCIpO3R5cGVvZiBpPT1cIm9iamVjdFwiJiZibihpW3NdKT09PVwiW29iamVjdCBPYmplY3RdXCImJihpW3NdPVwiW29iamVjdCBPYmplY3RdXCIpfX1pZih0eXBlb2YgaT09XCJvYmplY3RcIiYmYm4oaSk9PT1cIltvYmplY3QgT2JqZWN0XVwiJiYoaT1cIltvYmplY3QgT2JqZWN0XVwiKSxpPVN0cmluZyhpKSxuPT09bnVsbCYmKG49e30pLHQ9PT1cInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlXCIpaWYoQXJyYXkuaXNBcnJheShvKSlmb3IobGV0IHM9MCxjPW8ubGVuZ3RoO3M8YztzKyspQW4oZSxuLG9bc10scik7ZWxzZSBBbihlLG4sbyxyKTtlbHNle2lmKCFlLmpzb24mJiFfKHIsaSkmJl8obixpKSlyZXR1cm4gZS5saW5lPWx8fGUubGluZSxlLnBvc2l0aW9uPXV8fGUucG9zaXRpb24scChlLFwiZHVwbGljYXRlZCBtYXBwaW5nIGtleVwiKTtuW2ldPW8sZGVsZXRlIHJbaV19cmV0dXJuIG59ZnVuY3Rpb24gRmUoZSl7bGV0IG49ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pO2lmKG49PT0xMCllLnBvc2l0aW9uKys7ZWxzZSBpZihuPT09MTMpZS5wb3NpdGlvbisrLGUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKT09PTEwJiZlLnBvc2l0aW9uKys7ZWxzZSByZXR1cm4gcChlLFwiYSBsaW5lIGJyZWFrIGlzIGV4cGVjdGVkXCIpO2UubGluZSs9MSxlLmxpbmVTdGFydD1lLnBvc2l0aW9ufWZ1bmN0aW9uIHkoZSxuLHIpe2xldCB0PTAsaT1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7Zm9yKDtpIT09MDspe2Zvcig7TShpKTspaT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtpZihuJiZpPT09MzUpZG8gaT1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTt3aGlsZShpIT09MTAmJmkhPT0xMyYmaSE9PTApO2lmKEwoaSkpZm9yKEZlKGUpLGk9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLHQrKyxlLmxpbmVJbmRlbnQ9MDtpPT09MzI7KWUubGluZUluZGVudCsrLGk9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7ZWxzZSBicmVha31yZXR1cm4gciE9PS0xJiZ0IT09MCYmZS5saW5lSW5kZW50PHImJkooZSxcImRlZmljaWVudCBpbmRlbnRhdGlvblwiKSx0fWZ1bmN0aW9uIGVlKGUpe2xldCBuPWUucG9zaXRpb24scj1lLmlucHV0LmNoYXJDb2RlQXQobik7cmV0dXJuISEoKHI9PT00NXx8cj09PTQ2KSYmcj09PWUuaW5wdXQuY2hhckNvZGVBdChuKzEpJiZyPT09ZS5pbnB1dC5jaGFyQ29kZUF0KG4rMikmJihuKz0zLHI9ZS5pbnB1dC5jaGFyQ29kZUF0KG4pLHI9PT0wfHxUKHIpKSl9ZnVuY3Rpb24gdmUoZSxuKXtuPT09MT9lLnJlc3VsdCs9XCIgXCI6bj4xJiYoZS5yZXN1bHQrPXcoYFxuYCxuLTEpKX1mdW5jdGlvbiBmaShlLG4scil7bGV0IHQ9ZS5raW5kLGk9ZS5yZXN1bHQsbz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7aWYoVChvKXx8TihvKXx8bz09PTM1fHxvPT09Mzh8fG89PT00Mnx8bz09PTMzfHxvPT09MTI0fHxvPT09NjJ8fG89PT0zOXx8bz09PTM0fHxvPT09Mzd8fG89PT02NHx8bz09PTk2KXJldHVybiExO2xldCBsO2lmKChvPT09NjN8fG89PT00NSkmJihsPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzEpLFQobCl8fHImJk4obCkpKXJldHVybiExO2Uua2luZD1cInNjYWxhclwiLGUucmVzdWx0PVwiXCI7bGV0IHUscz11PWUucG9zaXRpb24sYz0hMSxhPTA7Zm9yKDtvIT09MDspe2lmKG89PT01OCl7aWYobD1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxUKGwpfHxyJiZOKGwpKWJyZWFrfWVsc2UgaWYobz09PTM1KXtsZXQgZj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbi0xKTtpZihUKGYpKWJyZWFrfWVsc2V7aWYoZS5wb3NpdGlvbj09PWUubGluZVN0YXJ0JiZlZShlKXx8ciYmTihvKSlicmVhaztpZihMKG8pKXthPWUubGluZTtsZXQgZj1lLmxpbmVTdGFydCxkPWUubGluZUluZGVudDtpZih5KGUsITEsLTEpLGUubGluZUluZGVudD49bil7Yz0hMCxvPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTtjb250aW51ZX1lbHNle2UucG9zaXRpb249dSxlLmxpbmU9YSxlLmxpbmVTdGFydD1mLGUubGluZUluZGVudD1kO2JyZWFrfX19YyYmKE8oZSxzLHUsITEpLHZlKGUsZS5saW5lLWEpLHM9dT1lLnBvc2l0aW9uLGM9ITEpLE0obyl8fCh1PWUucG9zaXRpb24rMSksbz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKX1yZXR1cm4gTyhlLHMsdSwhMSksZS5yZXN1bHQ/ITA6KGUua2luZD10LGUucmVzdWx0PWksITEpfWZ1bmN0aW9uIGFpKGUsbil7bGV0IHIsdCxpO2lmKHI9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLHIhPT0zOSlyZXR1cm4hMTtmb3IoZS5raW5kPVwic2NhbGFyXCIsZS5yZXN1bHQ9XCJcIixlLnBvc2l0aW9uKyssdD1pPWUucG9zaXRpb247KHI9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSE9PTA7KWlmKHI9PT0zOSlpZihPKGUsdCxlLnBvc2l0aW9uLCEwKSxyPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLHI9PT0zOSl0PWUucG9zaXRpb24sZS5wb3NpdGlvbisrLGk9ZS5wb3NpdGlvbjtlbHNlIHJldHVybiEwO2Vsc2UgaWYoTChyKSlPKGUsdCxpLCEwKSx2ZShlLHkoZSwhMSxuKSksdD1pPWUucG9zaXRpb247ZWxzZXtpZihlLnBvc2l0aW9uPT09ZS5saW5lU3RhcnQmJmVlKGUpKXJldHVybiBwKGUsXCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgZG9jdW1lbnQgd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXJcIik7ZS5wb3NpdGlvbisrLGk9ZS5wb3NpdGlvbn1yZXR1cm4gcChlLFwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhclwiKX1mdW5jdGlvbiBwaShlLG4pe2xldCByPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTtpZihyIT09MzQpcmV0dXJuITE7ZS5raW5kPVwic2NhbGFyXCIsZS5yZXN1bHQ9XCJcIixlLnBvc2l0aW9uKys7bGV0IHQsaT10PWUucG9zaXRpb24sbztmb3IoOyhyPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSkhPT0wOyl7aWYocj09PTM0KXJldHVybiBPKGUsaSxlLnBvc2l0aW9uLCEwKSxlLnBvc2l0aW9uKyssITA7aWYocj09PTkyKXtpZihPKGUsaSxlLnBvc2l0aW9uLCEwKSxyPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLEwocikpeShlLCExLG4pO2Vsc2UgaWYocjwyNTYmJmtuW3JdKWUucmVzdWx0Kz1MbltyXSxlLnBvc2l0aW9uKys7ZWxzZSBpZigobz11aShyKSk+MCl7bGV0IGw9byx1PTA7Zm9yKDtsPjA7bC0tKWlmKHI9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksKG89bGkocikpPj0wKXU9KHU8PDQpK287ZWxzZSByZXR1cm4gcChlLFwiZXhwZWN0ZWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyXCIpO2UucmVzdWx0Kz1jaSh1KSxlLnBvc2l0aW9uKyt9ZWxzZSByZXR1cm4gcChlLFwidW5rbm93biBlc2NhcGUgc2VxdWVuY2VcIik7aT10PWUucG9zaXRpb259ZWxzZSBpZihMKHIpKU8oZSxpLHQsITApLHZlKGUseShlLCExLG4pKSxpPXQ9ZS5wb3NpdGlvbjtlbHNle2lmKGUucG9zaXRpb249PT1lLmxpbmVTdGFydCYmZWUoZSkpcmV0dXJuIHAoZSxcInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhclwiKTtlLnBvc2l0aW9uKyssdD1lLnBvc2l0aW9ufX1yZXR1cm4gcChlLFwidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhclwiKX1mdW5jdGlvbiBoaShlLG4pe2xldCByPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSx0LGk9ITAsbz17fTtpZihyPT09OTEpdD05MyxpPSExLG89W107ZWxzZSBpZihyPT09MTIzKXQ9MTI1O2Vsc2UgcmV0dXJuITE7ZS5hbmNob3IhPT1udWxsJiZ0eXBlb2YgZS5hbmNob3I8XCJ1XCImJnR5cGVvZiBlLmFuY2hvck1hcDxcInVcIiYmKGUuYW5jaG9yTWFwW2UuYW5jaG9yXT1vKSxyPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2xldCBsPWUudGFnLHU9ZS5hbmNob3Iscz0hMCxjLGEsZj1hPWM9bnVsbCxkLEU9ZD0hMSxnPTAsaz0wLHg9e307Zm9yKDtyIT09MDspe2lmKHkoZSwhMCxuKSxyPWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSxyPT09dClyZXR1cm4gZS5wb3NpdGlvbisrLGUudGFnPWwsZS5hbmNob3I9dSxlLmtpbmQ9aT9cIm1hcHBpbmdcIjpcInNlcXVlbmNlXCIsZS5yZXN1bHQ9bywhMDtpZighcylyZXR1cm4gcChlLFwibWlzc2VkIGNvbW1hIGJldHdlZW4gZmxvdyBjb2xsZWN0aW9uIGVudHJpZXNcIik7Zj1hPWM9bnVsbCxFPWQ9ITEscj09PTYzJiYoZz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbisxKSxUKGcpJiYoRT1kPSEwLGUucG9zaXRpb24rKyx5KGUsITAsbikpKSxrPWUubGluZSxEKGUsbix6LCExLCEwKSxmPWUudGFnfHxudWxsLGE9ZS5yZXN1bHQseShlLCEwLG4pLHI9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLChkfHxlLmxpbmU9PT1rKSYmcj09PTU4JiYoRT0hMCxyPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLHkoZSwhMCxuKSxEKGUsbix6LCExLCEwKSxjPWUucmVzdWx0KSxpP0IoZSxvLHgsZixhLGMpOkU/by5wdXNoKEIoZSxudWxsLHgsZixhLGMpKTpvLnB1c2goYSkseShlLCEwLG4pLHI9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLHI9PT00ND8ocz0hMCxyPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pKTpzPSExfXJldHVybiBwKGUsXCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIGZsb3cgY29sbGVjdGlvblwiKX1mdW5jdGlvbiBtaShlLG4pe2xldCByPU1lLHQ9ITEsaT0hMSxvPW4sbD0wLHU9ITEscz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbiksYz0hMTtpZihzPT09MTI0KWM9ITE7ZWxzZSBpZihzPT09NjIpYz0hMDtlbHNlIHJldHVybiExO2Uua2luZD1cInNjYWxhclwiLGUucmVzdWx0PVwiXCI7bGV0IGE9MDtmb3IoO3MhPT0wOylpZihzPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pLHM9PT00M3x8cz09PTQ1KWlmKE1lPT09cilyPXM9PT00Mz95bjpyaTtlbHNlIHJldHVybiBwKGUsXCJyZXBlYXQgb2YgYSBjaG9tcGluZyBtb2RlIGlkZW50aWZpZXJcIik7ZWxzZSBpZigoYT1zaShzKSk+PTApe2lmKGE9PT0wKXJldHVybiBwKGUsXCJiYWQgZXhwbGljaXQgaW5kZW50YXRpb24gd2lkdGggb2YgYSBibG9jayBzY2FsYXI7IGl0IGNhbm5vdCBiZSBsZXNzIHRoYW4gb25lXCIpO2lmKCFpKW89bithLTEsaT0hMDtlbHNlIHJldHVybiBwKGUsXCJyZXBlYXQgb2YgYW4gaW5kZW50YXRpb24gd2lkdGggaWRlbnRpZmllclwiKX1lbHNlIGJyZWFrO2lmKE0ocykpe2RvIHM9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7d2hpbGUoTShzKSk7aWYocz09PTM1KWRvIHM9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7d2hpbGUoIUwocykmJnMhPT0wKX1mb3IoO3MhPT0wOyl7Zm9yKEZlKGUpLGUubGluZUluZGVudD0wLHM9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pOyghaXx8ZS5saW5lSW5kZW50PG8pJiZzPT09MzI7KWUubGluZUluZGVudCsrLHM9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7aWYoIWkmJmUubGluZUluZGVudD5vJiYobz1lLmxpbmVJbmRlbnQpLEwocykpe2wrKztjb250aW51ZX1pZihlLmxpbmVJbmRlbnQ8byl7cj09PXluP2UucmVzdWx0Kz13KGBcbmAsdD8xK2w6bCk6cj09PU1lJiZ0JiYoZS5yZXN1bHQrPWBcbmApO2JyZWFrfWM/TShzKT8odT0hMCxlLnJlc3VsdCs9dyhgXG5gLHQ/MStsOmwpKTp1Pyh1PSExLGUucmVzdWx0Kz13KGBcbmAsbCsxKSk6bD09PTA/dCYmKGUucmVzdWx0Kz1cIiBcIik6ZS5yZXN1bHQrPXcoYFxuYCxsKTplLnJlc3VsdCs9dyhgXG5gLHQ/MStsOmwpLHQ9ITAsaT0hMCxsPTA7bGV0IGY9ZS5wb3NpdGlvbjtmb3IoOyFMKHMpJiZzIT09MDspcz1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtPKGUsZixlLnBvc2l0aW9uLCExKX1yZXR1cm4hMH1mdW5jdGlvbiB3bihlLG4pe2xldCByLHQsaT0hMSxvLGw9ZS50YWcsdT1lLmFuY2hvcixzPVtdO2ZvcihlLmFuY2hvciE9PW51bGwmJnR5cGVvZiBlLmFuY2hvcjxcInVcIiYmdHlwZW9mIGUuYW5jaG9yTWFwPFwidVwiJiYoZS5hbmNob3JNYXBbZS5hbmNob3JdPXMpLG89ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pO28hPT0wJiYhKG8hPT00NXx8KHQ9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24rMSksIVQodCkpKTspe2lmKGk9ITAsZS5wb3NpdGlvbisrLHkoZSwhMCwtMSkmJmUubGluZUluZGVudDw9bil7cy5wdXNoKG51bGwpLG89ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pO2NvbnRpbnVlfWlmKHI9ZS5saW5lLEQoZSxuLFRuLCExLCEwKSxzLnB1c2goZS5yZXN1bHQpLHkoZSwhMCwtMSksbz1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbiksKGUubGluZT09PXJ8fGUubGluZUluZGVudD5uKSYmbyE9PTApcmV0dXJuIHAoZSxcImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5XCIpO2lmKGUubGluZUluZGVudDxuKWJyZWFrfXJldHVybiBpPyhlLnRhZz1sLGUuYW5jaG9yPXUsZS5raW5kPVwic2VxdWVuY2VcIixlLnJlc3VsdD1zLCEwKTohMX1mdW5jdGlvbiBkaShlLG4scil7bGV0IHQ9ZS50YWcsaT1lLmFuY2hvcixvPXt9LGw9e30sdSxzPSExLGMsYSxmPW51bGwsZD1udWxsLEU9bnVsbCxnPSExLGs9ITEseDtmb3IoZS5hbmNob3IhPT1udWxsJiZ0eXBlb2YgZS5hbmNob3I8XCJ1XCImJnR5cGVvZiBlLmFuY2hvck1hcDxcInVcIiYmKGUuYW5jaG9yTWFwW2UuYW5jaG9yXT1vKSx4PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTt4IT09MDspe2lmKHU9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24rMSksYz1lLmxpbmUsYT1lLnBvc2l0aW9uLCh4PT09NjN8fHg9PT01OCkmJlQodSkpe2lmKHg9PT02MylnJiYoQihlLG8sbCxmLGQsbnVsbCksZj1kPUU9bnVsbCksaz0hMCxnPSEwLHM9ITA7ZWxzZSBpZihnKWc9ITEscz0hMDtlbHNlIHJldHVybiBwKGUsXCJpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lXCIpO2UucG9zaXRpb24rPTEseD11fWVsc2UgaWYoRChlLHIsU24sITEsITApKWlmKGUubGluZT09PWMpe2Zvcih4PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKTtNKHgpOyl4PWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2lmKHg9PT01OCl7aWYoeD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSwhVCh4KSlyZXR1cm4gcChlLFwiYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBleHBlY3RlZCBhZnRlciB0aGUga2V5LXZhbHVlIHNlcGFyYXRvciB3aXRoaW4gYSBibG9jayBtYXBwaW5nXCIpO2cmJihCKGUsbyxsLGYsZCxudWxsKSxmPWQ9RT1udWxsKSxrPSEwLGc9ITEscz0hMSxmPWUudGFnLGQ9ZS5yZXN1bHR9ZWxzZSByZXR1cm4gaz9wKGUsXCJjYW4gbm90IHJlYWQgYW4gaW1wbGljaXQgbWFwcGluZyBwYWlyOyBhIGNvbG9uIGlzIG1pc3NlZFwiKTooZS50YWc9dCxlLmFuY2hvcj1pLCEwKX1lbHNlIHJldHVybiBrP3AoZSxcImNhbiBub3QgcmVhZCBhIGJsb2NrIG1hcHBpbmcgZW50cnk7IGEgbXVsdGlsaW5lIGtleSBtYXkgbm90IGJlIGFuIGltcGxpY2l0IGtleVwiKTooZS50YWc9dCxlLmFuY2hvcj1pLCEwKTtlbHNlIGJyZWFrO2lmKChlLmxpbmU9PT1jfHxlLmxpbmVJbmRlbnQ+bikmJihEKGUsbixaLCEwLHMpJiYoZz9kPWUucmVzdWx0OkU9ZS5yZXN1bHQpLGd8fChCKGUsbyxsLGYsZCxFLGMsYSksZj1kPUU9bnVsbCkseShlLCEwLC0xKSx4PWUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKSksZS5saW5lSW5kZW50Pm4mJnghPT0wKXJldHVybiBwKGUsXCJiYWQgaW5kZW50YXRpb24gb2YgYSBtYXBwaW5nIGVudHJ5XCIpO2lmKGUubGluZUluZGVudDxuKWJyZWFrfXJldHVybiBnJiZCKGUsbyxsLGYsZCxudWxsKSxrJiYoZS50YWc9dCxlLmFuY2hvcj1pLGUua2luZD1cIm1hcHBpbmdcIixlLnJlc3VsdD1vKSxrfWZ1bmN0aW9uIHlpKGUpe2xldCBuLHI9ITEsdD0hMSxpPVwiXCIsbyxsO2lmKGw9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLGwhPT0zMylyZXR1cm4hMTtpZihlLnRhZyE9PW51bGwpcmV0dXJuIHAoZSxcImR1cGxpY2F0aW9uIG9mIGEgdGFnIHByb3BlcnR5XCIpO2lmKGw9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbiksbD09PTYwPyhyPSEwLGw9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbikpOmw9PT0zMz8odD0hMCxpPVwiISFcIixsPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pKTppPVwiIVwiLG49ZS5wb3NpdGlvbixyKXtkbyBsPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO3doaWxlKGwhPT0wJiZsIT09NjIpO2lmKGUucG9zaXRpb248ZS5sZW5ndGgpbz1lLmlucHV0LnNsaWNlKG4sZS5wb3NpdGlvbiksbD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtlbHNlIHJldHVybiBwKGUsXCJ1bmV4cGVjdGVkIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhpbiBhIHZlcmJhdGltIHRhZ1wiKX1lbHNle2Zvcig7bCE9PTAmJiFUKGwpOyl7aWYobD09PTMzKXtpZih0KXJldHVybiBwKGUsXCJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzXCIpO2lmKGk9ZS5pbnB1dC5zbGljZShuLTEsZS5wb3NpdGlvbisxKSwhQ24udGVzdChpKSlyZXR1cm4gcChlLFwibmFtZWQgdGFnIGhhbmRsZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnNcIik7dD0hMCxuPWUucG9zaXRpb24rMX1sPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pfWlmKG89ZS5pbnB1dC5zbGljZShuLGUucG9zaXRpb24pLG9pLnRlc3QobykpcmV0dXJuIHAoZSxcInRhZyBzdWZmaXggY2Fubm90IGNvbnRhaW4gZmxvdyBpbmRpY2F0b3IgY2hhcmFjdGVyc1wiKX1pZihvJiYhRW4udGVzdChvKSlyZXR1cm4gcChlLGB0YWcgbmFtZSBjYW5ub3QgY29udGFpbiBzdWNoIGNoYXJhY3RlcnM6ICR7b31gKTtpZihyKWUudGFnPW87ZWxzZSBpZih0eXBlb2YgZS50YWdNYXA8XCJ1XCImJl8oZS50YWdNYXAsaSkpZS50YWc9ZS50YWdNYXBbaV0rbztlbHNlIGlmKGk9PT1cIiFcIillLnRhZz1gISR7b31gO2Vsc2UgaWYoaT09PVwiISFcIillLnRhZz1gdGFnOnlhbWwub3JnLDIwMDI6JHtvfWA7ZWxzZSByZXR1cm4gcChlLGB1bmRlY2xhcmVkIHRhZyBoYW5kbGUgXCIke2l9XCJgKTtyZXR1cm4hMH1mdW5jdGlvbiBiaShlKXtsZXQgbj1lLmlucHV0LmNoYXJDb2RlQXQoZS5wb3NpdGlvbik7aWYobiE9PTM4KXJldHVybiExO2lmKGUuYW5jaG9yIT09bnVsbClyZXR1cm4gcChlLFwiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5XCIpO249ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7bGV0IHI9ZS5wb3NpdGlvbjtmb3IoO24hPT0wJiYhVChuKSYmIU4obik7KW49ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7cmV0dXJuIGUucG9zaXRpb249PT1yP3AoZSxcIm5hbWUgb2YgYW4gYW5jaG9yIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXJcIik6KGUuYW5jaG9yPWUuaW5wdXQuc2xpY2UocixlLnBvc2l0aW9uKSwhMCl9ZnVuY3Rpb24gZ2koZSl7bGV0IG49ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pO2lmKG4hPT00MilyZXR1cm4hMTtuPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2xldCByPWUucG9zaXRpb247Zm9yKDtuIT09MCYmIVQobikmJiFOKG4pOyluPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2lmKGUucG9zaXRpb249PT1yKXJldHVybiBwKGUsXCJuYW1lIG9mIGFuIGFsaWFzIG5vZGUgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXJcIik7bGV0IHQ9ZS5pbnB1dC5zbGljZShyLGUucG9zaXRpb24pO3JldHVybiB0eXBlb2YgZS5hbmNob3JNYXA8XCJ1XCImJiFfKGUuYW5jaG9yTWFwLHQpP3AoZSxgdW5pZGVudGlmaWVkIGFsaWFzIFwiJHt0fVwiYCk6KHR5cGVvZiBlLmFuY2hvck1hcDxcInVcIiYmKGUucmVzdWx0PWUuYW5jaG9yTWFwW3RdKSx5KGUsITAsLTEpLCEwKX1mdW5jdGlvbiBEKGUsbixyLHQsaSl7bGV0IG8sbCx1PTEscz0hMSxjPSExLGEsZixkO2UubGlzdGVuZXImJmUubGlzdGVuZXIhPT1udWxsJiZlLmxpc3RlbmVyKFwib3BlblwiLGUpLGUudGFnPW51bGwsZS5hbmNob3I9bnVsbCxlLmtpbmQ9bnVsbCxlLnJlc3VsdD1udWxsO2xldCBFPW89bD1aPT09cnx8VG49PT1yO2lmKHQmJnkoZSwhMCwtMSkmJihzPSEwLGUubGluZUluZGVudD5uP3U9MTplLmxpbmVJbmRlbnQ9PT1uP3U9MDplLmxpbmVJbmRlbnQ8biYmKHU9LTEpKSx1PT09MSlmb3IoO3lpKGUpfHxiaShlKTspeShlLCEwLC0xKT8ocz0hMCxsPUUsZS5saW5lSW5kZW50Pm4/dT0xOmUubGluZUluZGVudD09PW4/dT0wOmUubGluZUluZGVudDxuJiYodT0tMSkpOmw9ITE7aWYobCYmKGw9c3x8aSksdT09PTF8fFo9PT1yKWlmKGY9ej09PXJ8fFNuPT09cj9uOm4rMSxkPWUucG9zaXRpb24tZS5saW5lU3RhcnQsdT09PTEpaWYobCYmKHduKGUsZCl8fGRpKGUsZCxmKSl8fGhpKGUsZikpYz0hMDtlbHNle2lmKG8mJm1pKGUsZil8fGFpKGUsZil8fHBpKGUsZikpYz0hMDtlbHNlIGlmKGdpKGUpKXtpZihjPSEwLGUudGFnIT09bnVsbHx8ZS5hbmNob3IhPT1udWxsKXJldHVybiBwKGUsXCJhbGlhcyBub2RlIHNob3VsZCBub3QgaGF2ZSBBbnkgcHJvcGVydGllc1wiKX1lbHNlIGZpKGUsZix6PT09cikmJihjPSEwLGUudGFnPT09bnVsbCYmKGUudGFnPVwiP1wiKSk7ZS5hbmNob3IhPT1udWxsJiZ0eXBlb2YgZS5hbmNob3JNYXA8XCJ1XCImJihlLmFuY2hvck1hcFtlLmFuY2hvcl09ZS5yZXN1bHQpfWVsc2UgdT09PTAmJihjPWwmJnduKGUsZCkpO2lmKGUudGFnIT09bnVsbCYmZS50YWchPT1cIiFcIilpZihlLnRhZz09PVwiP1wiKXtmb3IobGV0IGc9MCxrPWUuaW1wbGljaXRUeXBlcy5sZW5ndGg7ZzxrO2crKylpZihhPWUuaW1wbGljaXRUeXBlc1tnXSxhLnJlc29sdmUoZS5yZXN1bHQpKXtlLnJlc3VsdD1hLmNvbnN0cnVjdChlLnJlc3VsdCksZS50YWc9YS50YWcsZS5hbmNob3IhPT1udWxsJiZ0eXBlb2YgZS5hbmNob3JNYXA8XCJ1XCImJihlLmFuY2hvck1hcFtlLmFuY2hvcl09ZS5yZXN1bHQpO2JyZWFrfX1lbHNlIGlmKF8oZS50eXBlTWFwW2Uua2luZHx8XCJmYWxsYmFja1wiXSxlLnRhZykpe2lmKGE9ZS50eXBlTWFwW2Uua2luZHx8XCJmYWxsYmFja1wiXVtlLnRhZ10sZS5yZXN1bHQhPT1udWxsJiZhLmtpbmQhPT1lLmtpbmQpcmV0dXJuIHAoZSxgdW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwke2UudGFnfT4gdGFnOyBpdCBzaG91bGQgYmUgXCIke2Eua2luZH1cIiwgbm90IFwiJHtlLmtpbmR9XCJgKTtpZihhLnJlc29sdmUoZS5yZXN1bHQpKWUucmVzdWx0PWEuY29uc3RydWN0KGUucmVzdWx0KSxlLmFuY2hvciE9PW51bGwmJnR5cGVvZiBlLmFuY2hvck1hcDxcInVcIiYmKGUuYW5jaG9yTWFwW2UuYW5jaG9yXT1lLnJlc3VsdCk7ZWxzZSByZXR1cm4gcChlLGBjYW5ub3QgcmVzb2x2ZSBhIG5vZGUgd2l0aCAhPCR7ZS50YWd9PiBleHBsaWNpdCB0YWdgKX1lbHNlIHJldHVybiBwKGUsYHVua25vd24gdGFnICE8JHtlLnRhZ30+YCk7cmV0dXJuIGUubGlzdGVuZXImJmUubGlzdGVuZXIhPT1udWxsJiZlLmxpc3RlbmVyKFwiY2xvc2VcIixlKSxlLnRhZyE9PW51bGx8fGUuYW5jaG9yIT09bnVsbHx8Y31mdW5jdGlvbiB4aShlKXtsZXQgbj1lLnBvc2l0aW9uLHIsdCxpLG89ITEsbDtmb3IoZS52ZXJzaW9uPW51bGwsZS5jaGVja0xpbmVCcmVha3M9ZS5sZWdhY3ksZS50YWdNYXA9e30sZS5hbmNob3JNYXA9e307KGw9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pKSE9PTAmJih5KGUsITAsLTEpLGw9ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pLCEoZS5saW5lSW5kZW50PjB8fGwhPT0zNykpOyl7Zm9yKG89ITAsbD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKSxyPWUucG9zaXRpb247bCE9PTAmJiFUKGwpOylsPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO2lmKHQ9ZS5pbnB1dC5zbGljZShyLGUucG9zaXRpb24pLGk9W10sdC5sZW5ndGg8MSlyZXR1cm4gcChlLFwiZGlyZWN0aXZlIG5hbWUgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoXCIpO2Zvcig7bCE9PTA7KXtmb3IoO00obCk7KWw9ZS5pbnB1dC5jaGFyQ29kZUF0KCsrZS5wb3NpdGlvbik7aWYobD09PTM1KXtkbyBsPWUuaW5wdXQuY2hhckNvZGVBdCgrK2UucG9zaXRpb24pO3doaWxlKGwhPT0wJiYhTChsKSk7YnJlYWt9aWYoTChsKSlicmVhaztmb3Iocj1lLnBvc2l0aW9uO2whPT0wJiYhVChsKTspbD1lLmlucHV0LmNoYXJDb2RlQXQoKytlLnBvc2l0aW9uKTtpLnB1c2goZS5pbnB1dC5zbGljZShyLGUucG9zaXRpb24pKX1sIT09MCYmRmUoZSksXyh4bix0KT94blt0XShlLHQsLi4uaSk6SihlLGB1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSBcIiR7dH1cImApfWlmKHkoZSwhMCwtMSksZS5saW5lSW5kZW50PT09MCYmZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pPT09NDUmJmUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzEpPT09NDUmJmUuaW5wdXQuY2hhckNvZGVBdChlLnBvc2l0aW9uKzIpPT09NDUpZS5wb3NpdGlvbis9Myx5KGUsITAsLTEpO2Vsc2UgaWYobylyZXR1cm4gcChlLFwiZGlyZWN0aXZlcyBlbmQgbWFyayBpcyBleHBlY3RlZFwiKTtpZihEKGUsZS5saW5lSW5kZW50LTEsWiwhMSwhMCkseShlLCEwLC0xKSxlLmNoZWNrTGluZUJyZWFrcyYmdGkudGVzdChlLmlucHV0LnNsaWNlKG4sZS5wb3NpdGlvbikpJiZKKGUsXCJub24tQVNDSUkgbGluZSBicmVha3MgYXJlIGludGVycHJldGVkIGFzIGNvbnRlbnRcIiksZS5kb2N1bWVudHMucHVzaChlLnJlc3VsdCksZS5wb3NpdGlvbj09PWUubGluZVN0YXJ0JiZlZShlKSl7ZS5pbnB1dC5jaGFyQ29kZUF0KGUucG9zaXRpb24pPT09NDYmJihlLnBvc2l0aW9uKz0zLHkoZSwhMCwtMSkpO3JldHVybn1pZihlLnBvc2l0aW9uPGUubGVuZ3RoLTEpcmV0dXJuIHAoZSxcImVuZCBvZiB0aGUgc3RyZWFtIG9yIGEgZG9jdW1lbnQgc2VwYXJhdG9yIGlzIGV4cGVjdGVkXCIpfWZ1bmN0aW9uIFVlKGUsbil7ZT1TdHJpbmcoZSksbj1ufHx7fSxlLmxlbmd0aCE9PTAmJihlLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSkhPT0xMCYmZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpIT09MTMmJihlKz1gXG5gKSxlLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGU9ZS5zbGljZSgxKSkpO2xldCByPW5ldyBRKGUsbik7Zm9yKHIuaW5wdXQrPVwiXFwwXCI7ci5pbnB1dC5jaGFyQ29kZUF0KHIucG9zaXRpb24pPT09MzI7KXIubGluZUluZGVudCs9MSxyLnBvc2l0aW9uKz0xO2Zvcig7ci5wb3NpdGlvbjxyLmxlbmd0aC0xOyl4aShyKTtyZXR1cm4gci5kb2N1bWVudHN9ZnVuY3Rpb24gQWkoZSl7cmV0dXJuIHR5cGVvZiBlPT1cImZ1bmN0aW9uXCJ9ZnVuY3Rpb24gX24oZSxuLHIpe2lmKCFBaShuKSlyZXR1cm4gVWUoZSxuKTtsZXQgdD1VZShlLHIpLGk9bjtmb3IobGV0IG89MCxsPXQubGVuZ3RoO288bDtvKyspaSh0W29dKX1mdW5jdGlvbiBJbihlLG4pe2xldCByPVVlKGUsbik7aWYoci5sZW5ndGghPT0wKXtpZihyLmxlbmd0aD09PTEpcmV0dXJuIHJbMF07dGhyb3cgbmV3IEMoXCJleHBlY3RlZCBhIHNpbmdsZSBkb2N1bWVudCBpbiB0aGUgc3RyZWFtLCBidXQgZm91bmQgbW9yZVwiKX19dmFyIF8seixTbixUbixaLE1lLHJpLHluLGlpLHRpLG9pLENuLEVuLGtuLExuLHhuLFJuPWgoKCk9PntxKCk7UGUoKTtJKCk7ZG4oKTsoe2hhc093bjpffT1PYmplY3QpLHo9MSxTbj0yLFRuPTMsWj00LE1lPTEscmk9Mix5bj0zLGlpPS9bXFx4MDAtXFx4MDhcXHgwQlxceDBDXFx4MEUtXFx4MUZcXHg3Ri1cXHg4NFxceDg2LVxceDlGXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLyx0aT0vW1xceDg1XFx1MjAyOFxcdTIwMjldLyxvaT0vWyxcXFtcXF1cXHtcXH1dLyxDbj0vXig/OiF8ISF8IVthLXpcXC1dKyEpJC9pLEVuPS9eKD86IXxbXixcXFtcXF1cXHtcXH1dKSg/OiVbMC05YS1mXXsyfXxbMC05YS16XFwtIztcXC9cXD86QCY9XFwrXFwkLF9cXC4hflxcKidcXChcXClcXFtcXF1dKSokL2k7a249QXJyYXkuZnJvbSh7bGVuZ3RoOjI1Nn0pLExuPUFycmF5LmZyb20oe2xlbmd0aDoyNTZ9KTtmb3IobGV0IGU9MDtlPDI1NjtlKyspa25bZV09Z24oZSk/MTowLExuW2VdPWduKGUpO3huPXtZQU1MKGUsbiwuLi5yKXtpZihlLnZlcnNpb24hPT1udWxsKXJldHVybiBwKGUsXCJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmVcIik7aWYoci5sZW5ndGghPT0xKXJldHVybiBwKGUsXCJZQU1MIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgb25lIGFyZ3VtZW50XCIpO2xldCB0PS9eKFswLTldKylcXC4oWzAtOV0rKSQvLmV4ZWMoclswXSk7aWYodD09PW51bGwpcmV0dXJuIHAoZSxcImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlXCIpO2xldCBpPXBhcnNlSW50KHRbMV0sMTApLG89cGFyc2VJbnQodFsyXSwxMCk7aWYoaSE9PTEpcmV0dXJuIHAoZSxcInVuYWNjZXB0YWJsZSBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50XCIpO2lmKGUudmVyc2lvbj1yWzBdLGUuY2hlY2tMaW5lQnJlYWtzPW88MixvIT09MSYmbyE9PTIpcmV0dXJuIEooZSxcInVuc3VwcG9ydGVkIFlBTUwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcIil9LFRBRyhlLG4sLi4ucil7aWYoci5sZW5ndGghPT0yKXJldHVybiBwKGUsXCJUQUcgZGlyZWN0aXZlIGFjY2VwdHMgZXhhY3RseSB0d28gYXJndW1lbnRzXCIpO2xldCB0PXJbMF0saT1yWzFdO2lmKCFDbi50ZXN0KHQpKXJldHVybiBwKGUsXCJpbGwtZm9ybWVkIHRhZyBoYW5kbGUgKGZpcnN0IGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZVwiKTtpZihlLnRhZ01hcCYmXyhlLnRhZ01hcCx0KSlyZXR1cm4gcChlLGB0aGVyZSBpcyBhIHByZXZpb3VzbHkgZGVjbGFyZWQgc3VmZml4IGZvciBcIiR7dH1cIiB0YWcgaGFuZGxlYCk7aWYoIUVuLnRlc3QoaSkpcmV0dXJuIHAoZSxcImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZVwiKTt0eXBlb2YgZS50YWdNYXA+XCJ1XCImJihlLnRhZ01hcD17fSksZS50YWdNYXBbdF09aX19fSk7ZnVuY3Rpb24gTW4oZSxuKXtyZXR1cm4gSW4oZSxuKX1mdW5jdGlvbiBVbihlLG4scil7cmV0dXJuIF9uKGUsbixyKX12YXIgRm49aCgoKT0+e1JuKCl9KTtmdW5jdGlvbiBTaShlLG4pe2lmKHR5cGVvZiBuPlwidVwifHxuPT09bnVsbClyZXR1cm57fTtsZXQgcix0PXt9LGk9T2JqZWN0LmtleXMobiksbyxsO2ZvcihsZXQgdT0wLHM9aS5sZW5ndGg7dTxzO3UrPTEpbz1pW3VdLGw9U3RyaW5nKG5bb10pLG8uc2xpY2UoMCwyKT09PVwiISFcIiYmKG89YHRhZzp5YW1sLm9yZywyMDAyOiR7by5zbGljZSgyKX1gKSxyPWUuY29tcGlsZWRUeXBlTWFwLmZhbGxiYWNrW29dLHImJnR5cGVvZiByLnN0eWxlQWxpYXNlczxcInVcIiYmd2koci5zdHlsZUFsaWFzZXMsbCkmJihsPXIuc3R5bGVBbGlhc2VzW2xdKSx0W29dPWw7cmV0dXJuIHR9dmFyIHdpLG5lLHZuPWgoKCk9PntSZSgpOyh7aGFzT3duOndpfT1PYmplY3QpO25lPWNsYXNzIGV4dGVuZHMgdntjb25zdHJ1Y3Rvcih7c2NoZW1hOnIsaW5kZW50OnQ9Mixub0FycmF5SW5kZW50Omk9ITEsc2tpcEludmFsaWQ6bz0hMSxmbG93TGV2ZWw6bD0tMSxzdHlsZXM6dT1udWxsLHNvcnRLZXlzOnM9ITEsbGluZVdpZHRoOmM9ODAsbm9SZWZzOmE9ITEsbm9Db21wYXRNb2RlOmY9ITEsY29uZGVuc2VGbG93OmQ9ITF9KXtzdXBlcihyKTt0aGlzLnRhZz1udWxsO3RoaXMucmVzdWx0PVwiXCI7dGhpcy5kdXBsaWNhdGVzPVtdO3RoaXMudXNlZER1cGxpY2F0ZXM9W107dGhpcy5pbmRlbnQ9TWF0aC5tYXgoMSx0KSx0aGlzLm5vQXJyYXlJbmRlbnQ9aSx0aGlzLnNraXBJbnZhbGlkPW8sdGhpcy5mbG93TGV2ZWw9bCx0aGlzLnN0eWxlTWFwPVNpKHRoaXMuc2NoZW1hLHUpLHRoaXMuc29ydEtleXM9cyx0aGlzLmxpbmVXaWR0aD1jLHRoaXMubm9SZWZzPWEsdGhpcy5ub0NvbXBhdE1vZGU9Zix0aGlzLmNvbmRlbnNlRmxvdz1kLHRoaXMuaW1wbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEltcGxpY2l0LHRoaXMuZXhwbGljaXRUeXBlcz10aGlzLnNjaGVtYS5jb21waWxlZEV4cGxpY2l0fX19KTtmdW5jdGlvbiBObihlKXtsZXQgbj1lLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHIsdDtpZihlPD0yNTUpcj1cInhcIix0PTI7ZWxzZSBpZihlPD02NTUzNSlyPVwidVwiLHQ9NDtlbHNlIGlmKGU8PTQyOTQ5NjcyOTUpcj1cIlVcIix0PTg7ZWxzZSB0aHJvdyBuZXcgQyhcImNvZGUgcG9pbnQgd2l0aGluIGEgc3RyaW5nIG1heSBub3QgYmUgZ3JlYXRlciB0aGFuIDB4RkZGRkZGRkZcIik7cmV0dXJuYFxcXFwke3J9JHt3KFwiMFwiLHQtbi5sZW5ndGgpfSR7bn1gfWZ1bmN0aW9uIEJuKGUsbil7bGV0IHI9dyhcIiBcIixuKSx0PWUubGVuZ3RoLGk9MCxvPS0xLGw9XCJcIix1O2Zvcig7aTx0OylvPWUuaW5kZXhPZihgXG5gLGkpLG89PT0tMT8odT1lLnNsaWNlKGkpLGk9dCk6KHU9ZS5zbGljZShpLG8rMSksaT1vKzEpLHUubGVuZ3RoJiZ1IT09YFxuYCYmKGwrPXIpLGwrPXU7cmV0dXJuIGx9ZnVuY3Rpb24gTmUoZSxuKXtyZXR1cm5gXG4ke3coXCIgXCIsZS5pbmRlbnQqbil9YH1mdW5jdGlvbiAkaShlLG4pe2xldCByO2ZvcihsZXQgdD0wLGk9ZS5pbXBsaWNpdFR5cGVzLmxlbmd0aDt0PGk7dCs9MSlpZihyPWUuaW1wbGljaXRUeXBlc1t0XSxyLnJlc29sdmUobikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gem4oZSl7cmV0dXJuIGU9PT1FaXx8ZT09PUNpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuIDMyPD1lJiZlPD0xMjZ8fDE2MTw9ZSYmZTw9NTUyOTUmJmUhPT04MjMyJiZlIT09ODIzM3x8NTczNDQ8PWUmJmU8PTY1NTMzJiZlIT09NjUyNzl8fDY1NTM2PD1lJiZlPD0xMTE0MTExfWZ1bmN0aW9uIERuKGUpe3JldHVybiBWKGUpJiZlIT09NjUyNzkmJmUhPT1XbiYmZSE9PXFuJiZlIT09R24mJmUhPT1YbiYmZSE9PVFuJiZlIT09Vm4mJmUhPT1Lbn1mdW5jdGlvbiBqaShlKXtyZXR1cm4gVihlKSYmZSE9PTY1Mjc5JiYhem4oZSkmJmUhPT1NaSYmZSE9PUZpJiZlIT09Vm4mJmUhPT1XbiYmZSE9PXFuJiZlIT09R24mJmUhPT1YbiYmZSE9PVFuJiZlIT09S24mJmUhPT1faSYmZSE9PVJpJiZlIT09a2kmJmUhPT1CaSYmZSE9PVVpJiZlIT09SWkmJmUhPT1MaSYmZSE9PU9pJiZlIT09dmkmJmUhPT1OaX1mdW5jdGlvbiBabihlKXtyZXR1cm4vXlxcbiogLy50ZXN0KGUpfWZ1bmN0aW9uIFBpKGUsbixyLHQsaSl7bGV0IG89dCE9PS0xLGw9ITEsdT0hMSxzPS0xLGM9amkoZS5jaGFyQ29kZUF0KDApKSYmIXpuKGUuY2hhckNvZGVBdChlLmxlbmd0aC0xKSksYSxmO2lmKG4pZm9yKGY9MDtmPGUubGVuZ3RoO2YrKyl7aWYoYT1lLmNoYXJDb2RlQXQoZiksIVYoYSkpcmV0dXJuIHJlO2M9YyYmRG4oYSl9ZWxzZXtmb3IoZj0wO2Y8ZS5sZW5ndGg7ZisrKXtpZihhPWUuY2hhckNvZGVBdChmKSxhPT09aWUpbD0hMCxvJiYodT11fHxmLXMtMT50JiZlW3MrMV0hPT1cIiBcIixzPWYpO2Vsc2UgaWYoIVYoYSkpcmV0dXJuIHJlO2M9YyYmRG4oYSl9dT11fHxvJiZmLXMtMT50JiZlW3MrMV0hPT1cIiBcIn1yZXR1cm4hbCYmIXU/YyYmIWkoZSk/Sm46ZXI6cj45JiZabihlKT9yZTp1P3JyOm5yfWZ1bmN0aW9uICRuKGUsbil7aWYoZT09PVwiXCJ8fGVbMF09PT1cIiBcIilyZXR1cm4gZTtsZXQgcj0vIFteIF0vZyx0LGk9MCxvLGw9MCx1PTAscz1cIlwiO2Zvcig7dD1yLmV4ZWMoZSk7KXU9dC5pbmRleCx1LWk+biYmKG89bD5pP2w6dSxzKz1gXG4ke2Uuc2xpY2UoaSxvKX1gLGk9bysxKSxsPXU7cmV0dXJuIHMrPWBcbmAsZS5sZW5ndGgtaT5uJiZsPmk/cys9YCR7ZS5zbGljZShpLGwpfVxuJHtlLnNsaWNlKGwrMSl9YDpzKz1lLnNsaWNlKGkpLHMuc2xpY2UoMSl9ZnVuY3Rpb24gam4oZSl7cmV0dXJuIGVbZS5sZW5ndGgtMV09PT1gXG5gP2Uuc2xpY2UoMCwtMSk6ZX1mdW5jdGlvbiBIaShlLG4pe2xldCByPS8oXFxuKykoW15cXG5dKikvZyx0PSgoKT0+e2xldCB1PWUuaW5kZXhPZihgXG5gKTtyZXR1cm4gdT11IT09LTE/dTplLmxlbmd0aCxyLmxhc3RJbmRleD11LCRuKGUuc2xpY2UoMCx1KSxuKX0pKCksaT1lWzBdPT09YFxuYHx8ZVswXT09PVwiIFwiLG8sbDtmb3IoO2w9ci5leGVjKGUpOyl7bGV0IHU9bFsxXSxzPWxbMl07bz1zWzBdPT09XCIgXCIsdCs9dSsoIWkmJiFvJiZzIT09XCJcIj9gXG5gOlwiXCIpKyRuKHMsbiksaT1vfXJldHVybiB0fWZ1bmN0aW9uIFlpKGUpe2xldCBuPVwiXCIscix0LGk7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2lmKHI9ZS5jaGFyQ29kZUF0KG8pLHI+PTU1Mjk2JiZyPD01NjMxOSYmKHQ9ZS5jaGFyQ29kZUF0KG8rMSksdD49NTYzMjAmJnQ8PTU3MzQzKSl7bis9Tm4oKHItNTUyOTYpKjEwMjQrdC01NjMyMCs2NTUzNiksbysrO2NvbnRpbnVlfWk9QVtyXSxuKz0haSYmVihyKT9lW29dOml8fE5uKHIpfXJldHVybiBufWZ1bmN0aW9uIFBuKGUsbil7bGV0IHI9Wm4oZSk/U3RyaW5nKG4pOlwiXCIsdD1lW2UubGVuZ3RoLTFdPT09YFxuYCxvPXQmJihlW2UubGVuZ3RoLTJdPT09YFxuYHx8ZT09PWBcbmApP1wiK1wiOnQ/XCJcIjpcIi1cIjtyZXR1cm5gJHtyfSR7b31cbmB9ZnVuY3Rpb24gS2koZSxuLHIsdCl7ZS5kdW1wPSgoKT0+e2lmKG4ubGVuZ3RoPT09MClyZXR1cm5cIicnXCI7aWYoIWUubm9Db21wYXRNb2RlJiZEaS5pbmRleE9mKG4pIT09LTEpcmV0dXJuYCcke259J2A7bGV0IGk9ZS5pbmRlbnQqTWF0aC5tYXgoMSxyKSxvPWUubGluZVdpZHRoPT09LTE/LTE6TWF0aC5tYXgoTWF0aC5taW4oZS5saW5lV2lkdGgsNDApLGUubGluZVdpZHRoLWkpLGw9dHx8ZS5mbG93TGV2ZWw+LTEmJnI+PWUuZmxvd0xldmVsO2Z1bmN0aW9uIHUocyl7cmV0dXJuICRpKGUscyl9c3dpdGNoKFBpKG4sbCxlLmluZGVudCxvLHUpKXtjYXNlIEpuOnJldHVybiBuO2Nhc2UgZXI6cmV0dXJuYCcke24ucmVwbGFjZSgvJy9nLFwiJydcIil9J2A7Y2FzZSBucjpyZXR1cm5gfCR7UG4obixlLmluZGVudCl9JHtqbihCbihuLGkpKX1gO2Nhc2UgcnI6cmV0dXJuYD4ke1BuKG4sZS5pbmRlbnQpfSR7am4oQm4oSGkobixvKSxpKSl9YDtjYXNlIHJlOnJldHVybmBcIiR7WWkobil9XCJgO2RlZmF1bHQ6dGhyb3cgbmV3IEMoXCJpbXBvc3NpYmxlIGVycm9yOiBpbnZhbGlkIHNjYWxhciBzdHlsZVwiKX19KSgpfWZ1bmN0aW9uIFdpKGUsbixyKXtsZXQgdD1cIlwiLGk9ZS50YWc7Zm9yKGxldCBvPTAsbD1yLmxlbmd0aDtvPGw7bys9MSlVKGUsbixyW29dLCExLCExKSYmKG8hPT0wJiYodCs9YCwke2UuY29uZGVuc2VGbG93P1wiXCI6XCIgXCJ9YCksdCs9ZS5kdW1wKTtlLnRhZz1pLGUuZHVtcD1gWyR7dH1dYH1mdW5jdGlvbiBWaShlLG4scix0PSExKXtsZXQgaT1cIlwiLG89ZS50YWc7Zm9yKGxldCBsPTAsdT1yLmxlbmd0aDtsPHU7bCs9MSlVKGUsbisxLHJbbF0sITAsITApJiYoKCF0fHxsIT09MCkmJihpKz1OZShlLG4pKSxlLmR1bXAmJmllPT09ZS5kdW1wLmNoYXJDb2RlQXQoMCk/aSs9XCItXCI6aSs9XCItIFwiLGkrPWUuZHVtcCk7ZS50YWc9byxlLmR1bXA9aXx8XCJbXVwifWZ1bmN0aW9uIHFpKGUsbixyKXtsZXQgdD1cIlwiLGk9ZS50YWcsbz1PYmplY3Qua2V5cyhyKSxsLHUscztmb3IobGV0IGM9MCxhPW8ubGVuZ3RoO2M8YTtjKz0xKWw9ZS5jb25kZW5zZUZsb3c/J1wiJzpcIlwiLGMhPT0wJiYobCs9XCIsIFwiKSx1PW9bY10scz1yW3VdLFUoZSxuLHUsITEsITEpJiYoZS5kdW1wLmxlbmd0aD4xMDI0JiYobCs9XCI/IFwiKSxsKz1gJHtlLmR1bXB9JHtlLmNvbmRlbnNlRmxvdz8nXCInOlwiXCJ9OiR7ZS5jb25kZW5zZUZsb3c/XCJcIjpcIiBcIn1gLFUoZSxuLHMsITEsITEpJiYobCs9ZS5kdW1wLHQrPWwpKTtlLnRhZz1pLGUuZHVtcD1geyR7dH19YH1mdW5jdGlvbiBHaShlLG4scix0PSExKXtsZXQgaT1lLnRhZyxvPU9iamVjdC5rZXlzKHIpLGw9XCJcIjtpZihlLnNvcnRLZXlzPT09ITApby5zb3J0KCk7ZWxzZSBpZih0eXBlb2YgZS5zb3J0S2V5cz09XCJmdW5jdGlvblwiKW8uc29ydChlLnNvcnRLZXlzKTtlbHNlIGlmKGUuc29ydEtleXMpdGhyb3cgbmV3IEMoXCJzb3J0S2V5cyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIGZ1bmN0aW9uXCIpO2xldCB1PVwiXCIscyxjLGE7Zm9yKGxldCBmPTAsZD1vLmxlbmd0aDtmPGQ7Zis9MSl1PVwiXCIsKCF0fHxmIT09MCkmJih1Kz1OZShlLG4pKSxzPW9bZl0sYz1yW3NdLFUoZSxuKzEscywhMCwhMCwhMCkmJihhPWUudGFnIT09bnVsbCYmZS50YWchPT1cIj9cInx8ZS5kdW1wJiZlLmR1bXAubGVuZ3RoPjEwMjQsYSYmKGUuZHVtcCYmaWU9PT1lLmR1bXAuY2hhckNvZGVBdCgwKT91Kz1cIj9cIjp1Kz1cIj8gXCIpLHUrPWUuZHVtcCxhJiYodSs9TmUoZSxuKSksVShlLG4rMSxjLCEwLGEpJiYoZS5kdW1wJiZpZT09PWUuZHVtcC5jaGFyQ29kZUF0KDApP3UrPVwiOlwiOnUrPVwiOiBcIix1Kz1lLmR1bXAsbCs9dSkpO2UudGFnPWksZS5kdW1wPWx8fFwie31cIn1mdW5jdGlvbiBIbihlLG4scj0hMSl7bGV0IHQ9cj9lLmV4cGxpY2l0VHlwZXM6ZS5pbXBsaWNpdFR5cGVzLGksbyxsO2ZvcihsZXQgdT0wLHM9dC5sZW5ndGg7dTxzO3UrPTEpaWYoaT10W3VdLChpLmluc3RhbmNlT2Z8fGkucHJlZGljYXRlKSYmKCFpLmluc3RhbmNlT2Z8fHR5cGVvZiBuPT1cIm9iamVjdFwiJiZuIGluc3RhbmNlb2YgaS5pbnN0YW5jZU9mKSYmKCFpLnByZWRpY2F0ZXx8aS5wcmVkaWNhdGUobikpKXtpZihlLnRhZz1yP2kudGFnOlwiP1wiLGkucmVwcmVzZW50KXtpZihvPWUuc3R5bGVNYXBbaS50YWddfHxpLmRlZmF1bHRTdHlsZSxZbi5jYWxsKGkucmVwcmVzZW50KT09PVwiW29iamVjdCBGdW5jdGlvbl1cIilsPWkucmVwcmVzZW50KG4sbyk7ZWxzZSBpZihUaShpLnJlcHJlc2VudCxvKSlsPWkucmVwcmVzZW50W29dKG4sbyk7ZWxzZSB0aHJvdyBuZXcgQyhgITwke2kudGFnfT4gdGFnIHJlc29sdmVyIGFjY2VwdHMgbm90IFwiJHtvfVwiIHN0eWxlYCk7ZS5kdW1wPWx9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gVShlLG4scix0LGksbz0hMSl7ZS50YWc9bnVsbCxlLmR1bXA9cixIbihlLHIsITEpfHxIbihlLHIsITApO2xldCBsPVluLmNhbGwoZS5kdW1wKTt0JiYodD1lLmZsb3dMZXZlbDwwfHxlLmZsb3dMZXZlbD5uKTtsZXQgdT1sPT09XCJbb2JqZWN0IE9iamVjdF1cInx8bD09PVwiW29iamVjdCBBcnJheV1cIixzPS0xLGM9ITE7aWYodSYmKHM9ZS5kdXBsaWNhdGVzLmluZGV4T2YociksYz1zIT09LTEpLChlLnRhZyE9PW51bGwmJmUudGFnIT09XCI/XCJ8fGN8fGUuaW5kZW50IT09MiYmbj4wKSYmKGk9ITEpLGMmJmUudXNlZER1cGxpY2F0ZXNbc10pZS5kdW1wPWAqcmVmXyR7c31gO2Vsc2V7aWYodSYmYyYmIWUudXNlZER1cGxpY2F0ZXNbc10mJihlLnVzZWREdXBsaWNhdGVzW3NdPSEwKSxsPT09XCJbb2JqZWN0IE9iamVjdF1cIil0JiZPYmplY3Qua2V5cyhlLmR1bXApLmxlbmd0aCE9PTA/KEdpKGUsbixlLmR1bXAsaSksYyYmKGUuZHVtcD1gJnJlZl8ke3N9JHtlLmR1bXB9YCkpOihxaShlLG4sZS5kdW1wKSxjJiYoZS5kdW1wPWAmcmVmXyR7c30gJHtlLmR1bXB9YCkpO2Vsc2UgaWYobD09PVwiW29iamVjdCBBcnJheV1cIil7bGV0IGE9ZS5ub0FycmF5SW5kZW50JiZuPjA/bi0xOm47dCYmZS5kdW1wLmxlbmd0aCE9PTA/KFZpKGUsYSxlLmR1bXAsaSksYyYmKGUuZHVtcD1gJnJlZl8ke3N9JHtlLmR1bXB9YCkpOihXaShlLGEsZS5kdW1wKSxjJiYoZS5kdW1wPWAmcmVmXyR7c30gJHtlLmR1bXB9YCkpfWVsc2UgaWYobD09PVwiW29iamVjdCBTdHJpbmddXCIpZS50YWchPT1cIj9cIiYmS2koZSxlLmR1bXAsbixvKTtlbHNle2lmKGUuc2tpcEludmFsaWQpcmV0dXJuITE7dGhyb3cgbmV3IEMoYHVuYWNjZXB0YWJsZSBraW5kIG9mIGFuIG9iamVjdCB0byBkdW1wICR7bH1gKX1lLnRhZyE9PW51bGwmJmUudGFnIT09XCI/XCImJihlLmR1bXA9YCE8JHtlLnRhZ30+ICR7ZS5kdW1wfWApfXJldHVybiEwfWZ1bmN0aW9uIEJlKGUsbixyKXtpZihlIT09bnVsbCYmdHlwZW9mIGU9PVwib2JqZWN0XCIpe2xldCB0PW4uaW5kZXhPZihlKTtpZih0IT09LTEpci5pbmRleE9mKHQpPT09LTEmJnIucHVzaCh0KTtlbHNlIGlmKG4ucHVzaChlKSxBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgaT0wLG89ZS5sZW5ndGg7aTxvO2krPTEpQmUoZVtpXSxuLHIpO2Vsc2V7bGV0IGk9T2JqZWN0LmtleXMoZSk7Zm9yKGxldCBvPTAsbD1pLmxlbmd0aDtvPGw7bys9MSlCZShlW2lbb11dLG4scil9fX1mdW5jdGlvbiBYaShlLG4pe2xldCByPVtdLHQ9W107QmUoZSxyLHQpO2xldCBpPXQubGVuZ3RoO2ZvcihsZXQgbz0wO288aTtvKz0xKW4uZHVwbGljYXRlcy5wdXNoKHJbdFtvXV0pO24udXNlZER1cGxpY2F0ZXM9QXJyYXkuZnJvbSh7bGVuZ3RoOml9KX1mdW5jdGlvbiBpcihlLG4pe249bnx8e307bGV0IHI9bmV3IG5lKG4pO3JldHVybiByLm5vUmVmc3x8WGkoZSxyKSxVKHIsMCxlLCEwLCEwKT9gJHtyLmR1bXB9XG5gOlwiXCJ9dmFyIFluLFRpLENpLGllLEVpLGtpLExpLEtuLE9pLF9pLElpLFJpLFduLE1pLFZuLFVpLEZpLHZpLHFuLEduLE5pLFhuLEJpLFFuLEEsRGksSm4sZXIsbnIscnIscmUsdHI9aCgoKT0+e3EoKTtJKCk7dm4oKTtZbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHtoYXNPd246VGl9PU9iamVjdCxDaT05LGllPTEwLEVpPTMyLGtpPTMzLExpPTM0LEtuPTM1LE9pPTM3LF9pPTM4LElpPTM5LFJpPTQyLFduPTQ0LE1pPTQ1LFZuPTU4LFVpPTYyLEZpPTYzLHZpPTY0LHFuPTkxLEduPTkzLE5pPTk2LFhuPTEyMyxCaT0xMjQsUW49MTI1LEE9e307QVswXT1cIlxcXFwwXCI7QVs3XT1cIlxcXFxhXCI7QVs4XT1cIlxcXFxiXCI7QVs5XT1cIlxcXFx0XCI7QVsxMF09XCJcXFxcblwiO0FbMTFdPVwiXFxcXHZcIjtBWzEyXT1cIlxcXFxmXCI7QVsxM109XCJcXFxcclwiO0FbMjddPVwiXFxcXGVcIjtBWzM0XT0nXFxcXFwiJztBWzkyXT1cIlxcXFxcXFxcXCI7QVsxMzNdPVwiXFxcXE5cIjtBWzE2MF09XCJcXFxcX1wiO0FbODIzMl09XCJcXFxcTFwiO0FbODIzM109XCJcXFxcUFwiO0RpPVtcInlcIixcIllcIixcInllc1wiLFwiWWVzXCIsXCJZRVNcIixcIm9uXCIsXCJPblwiLFwiT05cIixcIm5cIixcIk5cIixcIm5vXCIsXCJOb1wiLFwiTk9cIixcIm9mZlwiLFwiT2ZmXCIsXCJPRkZcIl07Sm49MSxlcj0yLG5yPTMscnI9NCxyZT01fSk7ZnVuY3Rpb24gb3IoZSxuKXtyZXR1cm4gaXIoZSxuKX12YXIgbHI9aCgoKT0+e3RyKCl9KTt2YXIgdXI9e307bXIodXIse0NPUkVfU0NIRU1BOigpPT5XLERFRkFVTFRfU0NIRU1BOigpPT5SLEVYVEVOREVEX1NDSEVNQTooKT0+X2UsRkFJTFNBRkVfU0NIRU1BOigpPT5ZLEpTT05fU0NIRU1BOigpPT5LLFR5cGU6KCk9Pm0scGFyc2U6KCk9Pk1uLHBhcnNlQWxsOigpPT5VbixzdHJpbmdpZnk6KCk9Pm9yfSk7dmFyIHNyPWgoKCk9PntGbigpO2xyKCk7YigpO0llKCl9KTt2YXIgUWk9aHIoKHlsLGNyKT0+e2NyLmV4cG9ydHM9KHNyKCkseXIodXIpKX0pO3JldHVybiBRaSgpO30pKCk7XG4gcmV0dXJuIG1vZDt9KSgpIiwKICAgICJodHRwczovL2VzbS5zaC9AbGV6ZXIvbHIiOiAiKCgpID0+IHsgdmFyIG1vZD0oKCk9Pnt2YXIgcHM9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciB3Zj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3ZhciBQZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczt2YXIgVWY9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgcD0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBNZj0oZSx0KT0+KCk9Pih0fHxlKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLHJlPShlLHQpPT57Zm9yKHZhciByIGluIHQpcHMoZSxyLHtnZXQ6dFtyXSxlbnVtZXJhYmxlOiEwfSl9LGtmPShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT1cIm9iamVjdFwifHx0eXBlb2YgdD09XCJmdW5jdGlvblwiKWZvcihsZXQgbyBvZiBQZih0KSkhVWYuY2FsbChlLG8pJiZvIT09ciYmcHMoZSxvLHtnZXQ6KCk9PnRbb10sZW51bWVyYWJsZTohKG49d2YodCxvKSl8fG4uZW51bWVyYWJsZX0pO3JldHVybiBlfTt2YXIgQmY9ZT0+a2YocHMoe30sXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksZSk7ZnVuY3Rpb24gZHMoLi4uZSl7aWYodHlwZW9mIERlbm8uYWRkU2lnbmFsTGlzdGVuZXI9PVwiZnVuY3Rpb25cIilyZXR1cm4gRGVuby5hZGRTaWduYWxMaXN0ZW5lciguLi5lKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKX1mdW5jdGlvbiBkYSguLi5lKXtpZih0eXBlb2YgRGVuby5yZW1vdmVTaWduYWxMaXN0ZW5lcj09XCJmdW5jdGlvblwiKXJldHVybiBEZW5vLnJlbW92ZVNpZ25hbExpc3RlbmVyKC4uLmUpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJSZXF1aXJlcyAtLXVuc3RhYmxlXCIpfWZ1bmN0aW9uIGhhKC4uLmUpe2lmKHR5cGVvZiBEZW5vLnNldFJhdz09XCJmdW5jdGlvblwiKXJldHVybiBEZW5vLnNldFJhdyguLi5lKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKX1hc3luYyBmdW5jdGlvbiBPYShlKXtyZXR1cm4gYXdhaXQgRGVuby5jb25uZWN0KGUpfWZ1bmN0aW9uIFNhKGUpe3JldHVybiBEZW5vLmxpc3RlbihlKX1mdW5jdGlvbiBBYShlKXtyZXR1cm4gRGVuby5saXN0ZW5EYXRhZ3JhbShlKX1mdW5jdGlvbiBQbihlLC4uLnQpe2lmKHR5cGVvZiBlLnJlZj09XCJmdW5jdGlvblwiKXJldHVybiBlLnJlZiguLi50KTt0aHJvdyBuZXcgVHlwZUVycm9yKFwiUmVxdWlyZXMgLS11bnN0YWJsZVwiKX1mdW5jdGlvbiBVbihlLC4uLnQpe2lmKHR5cGVvZiBlLnVucmVmPT1cImZ1bmN0aW9uXCIpcmV0dXJuIGUudW5yZWYoLi4udCk7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIil9ZnVuY3Rpb24gTmEoLi4uZSl7aWYodHlwZW9mIERlbm8udW5yZWZUaW1lcj09XCJmdW5jdGlvblwiKXJldHVybiBEZW5vLnVucmVmVGltZXIoLi4uZSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlcXVpcmVzIC0tdW5zdGFibGVcIil9dmFyIFd0PXAoKCk9Pnt9KTtmdW5jdGlvbiBjcigpe2xldCBlLHQ9XCJwZW5kaW5nXCIscj1uZXcgUHJvbWlzZSgobixvKT0+e2U9e2FzeW5jIHJlc29sdmUocyl7YXdhaXQgcyx0PVwiZnVsZmlsbGVkXCIsbihzKX0scmVqZWN0KHMpe3Q9XCJyZWplY3RlZFwiLG8ocyl9fX0pO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocixcInN0YXRlXCIse2dldDooKT0+dH0pLE9iamVjdC5hc3NpZ24ocixlKX12YXIgVnI9cCgoKT0+e30pO3ZhciB4YT1wKCgpPT57VnIoKX0pO3ZhciBUYT1wKCgpPT57VnIoKX0pO3ZhciBJYT1wKCgpPT57fSk7ZnVuY3Rpb24gTW4oZSx0PXt9KXtsZXR7c2lnbmFsOnIscGVyc2lzdGVudDpufT10O3JldHVybiByPy5hYm9ydGVkP1Byb21pc2UucmVqZWN0KG5ldyBET01FeGNlcHRpb24oXCJEZWxheSB3YXMgYWJvcnRlZC5cIixcIkFib3J0RXJyb3JcIikpOm5ldyBQcm9taXNlKChvLHMpPT57bGV0IGk9KCk9PntjbGVhclRpbWVvdXQoYSkscyhuZXcgRE9NRXhjZXB0aW9uKFwiRGVsYXkgd2FzIGFib3J0ZWQuXCIsXCJBYm9ydEVycm9yXCIpKX0sYT1zZXRUaW1lb3V0KCgpPT57cj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsaSksbygpfSxlKTtyPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixpLHtvbmNlOiEwfSksbj09PSExJiZOYShhKX0pfXZhciBnYT1wKCgpPT57V3QoKX0pO3ZhciBtYSxEYT1wKCgpPT57VnIoKTttYT1jbGFzc3sjdD0wOyNyPVtdOyNuPVtdOyNlPWNyKCk7YWRkKHQpeysrdGhpcy4jdCx0aGlzLiNzKHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkpfWFzeW5jI3ModCl7dHJ5e2xldHt2YWx1ZTpyLGRvbmU6bn09YXdhaXQgdC5uZXh0KCk7bj8tLXRoaXMuI3Q6dGhpcy4jci5wdXNoKHtpdGVyYXRvcjp0LHZhbHVlOnJ9KX1jYXRjaChyKXt0aGlzLiNuLnB1c2gocil9dGhpcy4jZS5yZXNvbHZlKCl9YXN5bmMqaXRlcmF0ZSgpe2Zvcig7dGhpcy4jdD4wOyl7YXdhaXQgdGhpcy4jZTtmb3IobGV0IHQ9MDt0PHRoaXMuI3IubGVuZ3RoO3QrKyl7bGV0e2l0ZXJhdG9yOnIsdmFsdWU6bn09dGhpcy4jclt0XTt5aWVsZCBuLHRoaXMuI3Mocil9aWYodGhpcy4jbi5sZW5ndGgpe2ZvcihsZXQgdCBvZiB0aGlzLiNuKXRocm93IHQ7dGhpcy4jbi5sZW5ndGg9MH10aGlzLiNyLmxlbmd0aD0wLHRoaXMuI2U9Y3IoKX19W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe3JldHVybiB0aGlzLml0ZXJhdGUoKX19fSk7dmFyIHlhPXAoKCk9Pnt9KTt2YXIgYmE9cCgoKT0+e30pO3ZhciBrbj1wKCgpPT57eGEoKTtUYSgpO0lhKCk7VnIoKTtnYSgpO0RhKCk7eWEoKTtiYSgpfSk7dmFyIENhLE1OLGtOLGhzPXAoKCk9Pnsoe0Rlbm86Q2F9PWdsb2JhbFRoaXMpLE1OPXR5cGVvZiBDYT8ubm9Db2xvcj09XCJib29sZWFuXCI/Q2Eubm9Db2xvcjohMCxrTj1uZXcgUmVnRXhwKFtcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNylcIixcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnEtdXk9Pjx+XSkpXCJdLmpvaW4oXCJ8XCIpLFwiZ1wiKX0pO3ZhciBMYT1wKCgpPT57aHMoKX0pO3ZhciB3YT1wKCgpPT57fSk7ZnVuY3Rpb24gR3IoZSx0PVwiXCIpe2lmKCFlKXRocm93IG5ldyBCbih0KX1mdW5jdGlvbiBRZSgpe3Rocm93IG5ldyBCbihcInVucmVhY2hhYmxlXCIpfXZhciBCbixndD1wKCgpPT57aHMoKTtMYSgpO3dhKCk7Qm49Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihyKXtzdXBlcihyKTt0aGlzLm5hbWU9XCJBc3NlcnRpb25FcnJvclwifX19KTtmdW5jdGlvbiBEZShlLHQ9XCJcIil7aWYoIWUpdGhyb3cgbmV3IE9zKHQpfXZhciBPcyxhcj1wKCgpPT57T3M9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9XCJEZW5vU3RkSW50ZXJuYWxFcnJvclwifX19KTt2YXIgUGE9cCgoKT0+e30pO3ZhciBVYT1wKCgpPT57fSk7ZnVuY3Rpb24gTWEoZSx0LHI9MCl7aWYocj49ZS5sZW5ndGgpcmV0dXJuLTE7cjwwJiYocj1NYXRoLm1heCgwLGUubGVuZ3RoK3IpKTtsZXQgbj10WzBdO2ZvcihsZXQgbz1yO288ZS5sZW5ndGg7bysrKXtpZihlW29dIT09biljb250aW51ZTtsZXQgcz1vLGk9MSxjPW87Zm9yKDtpPHQubGVuZ3RoJiYoYysrLGVbY109PT10W2Mtc10pOylpKys7aWYoaT09PXQubGVuZ3RoKXJldHVybiBzfXJldHVybi0xfXZhciBTcz1wKCgpPT57VWEoKX0pO3ZhciBmeCxweCxkeCxoeCxrYT1wKCgpPT57YXIoKTtQYSgpO1NzKCk7Zng9MzIqMTAyNCxweD0yKiozMi0yLGR4PVwiXFxyXCIuY2hhckNvZGVBdCgwKSxoeD1gXG5gLmNoYXJDb2RlQXQoMCl9KTthc3luYyBmdW5jdGlvbiBCYShlLHQpe2xldCByPTA7Zm9yKDtyPHQubGVuZ3RoOylyKz1hd2FpdCBlLndyaXRlKHQuc3ViYXJyYXkocikpfXZhciBOeCxBcz1wKCgpPT57a2EoKTtOeD0zMioxMDI0fSk7ZnVuY3Rpb24gVyhlKXtsZXQgdD1lP2BOb3QgaW1wbGVtZW50ZWQ6ICR7ZX1gOlwiTm90IGltcGxlbWVudGVkXCI7dGhyb3cgbmV3IEVycm9yKHQpfWZ1bmN0aW9uIFJyKGUpe2xldCB0PWU/YE5vdCBpbXBsZW1lbnRlZDogJHtlfWA6XCJOb3QgaW1wbGVtZW50ZWRcIjtjb25zb2xlLndhcm4odCl9ZnVuY3Rpb24gRmEoZSx0KXtmb3IoO3QrMTxlLmxlbmd0aDt0KyspZVt0XT1lW3QrMV07ZS5wb3AoKX1mdW5jdGlvbiBXYShlKXtyZXR1cm4gZT09bnVsbHx8ZT09PVwidXRmOFwifHxlPT09XCJ1dGYtOFwiP1widXRmOFwiOldmKGUpfWZ1bmN0aW9uIFdmKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSA0OmlmKGU9PT1cIlVURjhcIilyZXR1cm5cInV0ZjhcIjtpZihlPT09XCJ1Y3MyXCJ8fGU9PT1cIlVDUzJcIilyZXR1cm5cInV0ZjE2bGVcIjtpZihlPWAke2V9YC50b0xvd2VyQ2FzZSgpLGU9PT1cInV0ZjhcIilyZXR1cm5cInV0ZjhcIjtpZihlPT09XCJ1Y3MyXCIpcmV0dXJuXCJ1dGYxNmxlXCI7YnJlYWs7Y2FzZSAzOmlmKGU9PT1cImhleFwifHxlPT09XCJIRVhcInx8YCR7ZX1gLnRvTG93ZXJDYXNlKCk9PT1cImhleFwiKXJldHVyblwiaGV4XCI7YnJlYWs7Y2FzZSA1OmlmKGU9PT1cImFzY2lpXCIpcmV0dXJuXCJhc2NpaVwiO2lmKGU9PT1cInVjcy0yXCIpcmV0dXJuXCJ1dGYxNmxlXCI7aWYoZT09PVwiVVRGLThcIilyZXR1cm5cInV0ZjhcIjtpZihlPT09XCJBU0NJSVwiKXJldHVyblwiYXNjaWlcIjtpZihlPT09XCJVQ1MtMlwiKXJldHVyblwidXRmMTZsZVwiO2lmKGU9YCR7ZX1gLnRvTG93ZXJDYXNlKCksZT09PVwidXRmLThcIilyZXR1cm5cInV0ZjhcIjtpZihlPT09XCJhc2NpaVwiKXJldHVyblwiYXNjaWlcIjtpZihlPT09XCJ1Y3MtMlwiKXJldHVyblwidXRmMTZsZVwiO2JyZWFrO2Nhc2UgNjppZihlPT09XCJiYXNlNjRcIilyZXR1cm5cImJhc2U2NFwiO2lmKGU9PT1cImxhdGluMVwifHxlPT09XCJiaW5hcnlcIilyZXR1cm5cImxhdGluMVwiO2lmKGU9PT1cIkJBU0U2NFwiKXJldHVyblwiYmFzZTY0XCI7aWYoZT09PVwiTEFUSU4xXCJ8fGU9PT1cIkJJTkFSWVwiKXJldHVyblwibGF0aW4xXCI7aWYoZT1gJHtlfWAudG9Mb3dlckNhc2UoKSxlPT09XCJiYXNlNjRcIilyZXR1cm5cImJhc2U2NFwiO2lmKGU9PT1cImxhdGluMVwifHxlPT09XCJiaW5hcnlcIilyZXR1cm5cImxhdGluMVwiO2JyZWFrO2Nhc2UgNzppZihlPT09XCJ1dGYxNmxlXCJ8fGU9PT1cIlVURjE2TEVcInx8YCR7ZX1gLnRvTG93ZXJDYXNlKCk9PT1cInV0ZjE2bGVcIilyZXR1cm5cInV0ZjE2bGVcIjticmVhaztjYXNlIDg6aWYoZT09PVwidXRmLTE2bGVcInx8ZT09PVwiVVRGLTE2TEVcInx8YCR7ZX1gLnRvTG93ZXJDYXNlKCk9PT1cInV0Zi0xNmxlXCIpcmV0dXJuXCJ1dGYxNmxlXCI7YnJlYWs7ZGVmYXVsdDppZihlPT09XCJcIilyZXR1cm5cInV0ZjhcIn19dmFyIFVlPXAoKCk9PntrbigpO2d0KCk7QXMoKX0pO3ZhciBIcj17fTtyZShIcix7ZGVmYXVsdDooKT0+SGYsaXNBbnlBcnJheUJ1ZmZlcjooKT0+R2EsaXNBcmd1bWVudHNPYmplY3Q6KCk9PkhhLGlzQXJyYXlCdWZmZXI6KCk9PiRhLGlzQXN5bmNGdW5jdGlvbjooKT0+dmEsaXNCaWdJbnRPYmplY3Q6KCk9PlRzLGlzQm9vbGVhbk9iamVjdDooKT0+TnMsaXNCb3hlZFByaW1pdGl2ZTooKT0+WWEsaXNEYXRhVmlldzooKT0+S2EsaXNEYXRlOigpPT5qYSxpc0dlbmVyYXRvckZ1bmN0aW9uOigpPT5YYSxpc0dlbmVyYXRvck9iamVjdDooKT0+VmYsaXNNYXA6KCk9PnphLGlzTWFwSXRlcmF0b3I6KCk9PlFhLGlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0OigpPT5xYSxpc05hdGl2ZUVycm9yOigpPT5aYSxpc051bWJlck9iamVjdDooKT0+eHMsaXNQcm9taXNlOigpPT5KYSxpc1JlZ0V4cDooKT0+ZVIsaXNTZXQ6KCk9PnRSLGlzU2V0SXRlcmF0b3I6KCk9PnJSLGlzU2hhcmVkQXJyYXlCdWZmZXI6KCk9PkdmLGlzU3RyaW5nT2JqZWN0OigpPT5Jcyxpc1N5bWJvbE9iamVjdDooKT0+blIsaXNXZWFrTWFwOigpPT5vUixpc1dlYWtTZXQ6KCk9PnNSfSk7ZnVuY3Rpb24gR2EoZSl7cmV0dXJuIFEoZSkmJihZLmNhbGwoZSk9PT1cIltvYmplY3QgQXJyYXlCdWZmZXJdXCJ8fFkuY2FsbChlKT09PVwiW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl1cIil9ZnVuY3Rpb24gSGEoZSl7cmV0dXJuIFEoZSkmJlkuY2FsbChlKT09PVwiW29iamVjdCBBcmd1bWVudHNdXCJ9ZnVuY3Rpb24gJGEoZSl7cmV0dXJuIFEoZSkmJlkuY2FsbChlKT09PVwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIn1mdW5jdGlvbiB2YShlKXtyZXR1cm4gVmEoZSkmJlkuY2FsbChlKT09PVwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwifWZ1bmN0aW9uIE5zKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgQm9vbGVhbl1cIn1mdW5jdGlvbiBZYShlKXtyZXR1cm4gTnMoZSl8fElzKGUpfHx4cyhlKXx8blIoZSl8fFRzKGUpfWZ1bmN0aW9uIEthKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgRGF0YVZpZXddXCJ9ZnVuY3Rpb24gamEoZSl7cmV0dXJuIFEoZSkmJlkuY2FsbChlKT09PVwiW29iamVjdCBEYXRlXVwifWZ1bmN0aW9uIFhhKGUpe3JldHVybiBWYShlKSYmWS5jYWxsKGUpPT09XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwifWZ1bmN0aW9uIFZmKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgR2VuZXJhdG9yXVwifWZ1bmN0aW9uIHphKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgTWFwXVwifWZ1bmN0aW9uIFFhKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgTWFwIEl0ZXJhdG9yXVwifWZ1bmN0aW9uIHFhKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgTW9kdWxlXVwifWZ1bmN0aW9uIFphKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgRXJyb3JdXCJ9ZnVuY3Rpb24geHMoZSl7cmV0dXJuIFEoZSkmJlkuY2FsbChlKT09PVwiW29iamVjdCBOdW1iZXJdXCJ9ZnVuY3Rpb24gVHMoZSl7cmV0dXJuIFEoZSkmJlkuY2FsbChlKT09PVwiW29iamVjdCBCaWdJbnRdXCJ9ZnVuY3Rpb24gSmEoZSl7cmV0dXJuIFEoZSkmJlkuY2FsbChlKT09PVwiW29iamVjdCBQcm9taXNlXVwifWZ1bmN0aW9uIGVSKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgUmVnRXhwXVwifWZ1bmN0aW9uIHRSKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgU2V0XVwifWZ1bmN0aW9uIHJSKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgU2V0IEl0ZXJhdG9yXVwifWZ1bmN0aW9uIEdmKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgU2hhcmVkQXJyYXlCdWZmZXJdXCJ9ZnVuY3Rpb24gSXMoZSl7cmV0dXJuIFEoZSkmJlkuY2FsbChlKT09PVwiW29iamVjdCBTdHJpbmddXCJ9ZnVuY3Rpb24gblIoZSl7cmV0dXJuIFEoZSkmJlkuY2FsbChlKT09PVwiW29iamVjdCBTeW1ib2xdXCJ9ZnVuY3Rpb24gb1IoZSl7cmV0dXJuIFEoZSkmJlkuY2FsbChlKT09PVwiW29iamVjdCBXZWFrTWFwXVwifWZ1bmN0aW9uIHNSKGUpe3JldHVybiBRKGUpJiZZLmNhbGwoZSk9PT1cIltvYmplY3QgV2Vha1NldF1cIn12YXIgWSxRLFZhLEhmLGdzPXAoKCk9PntZPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsUT1lPT5lIT09bnVsbCYmdHlwZW9mIGU9PVwib2JqZWN0XCIsVmE9ZT0+ZSE9PW51bGwmJnR5cGVvZiBlPT1cImZ1bmN0aW9uXCI7SGY9e2lzQXN5bmNGdW5jdGlvbjp2YSxpc0dlbmVyYXRvckZ1bmN0aW9uOlhhLGlzQW55QXJyYXlCdWZmZXI6R2EsaXNBcnJheUJ1ZmZlcjokYSxpc0FyZ3VtZW50c09iamVjdDpIYSxpc0JveGVkUHJpbWl0aXZlOllhLGlzRGF0YVZpZXc6S2EsaXNNYXA6emEsaXNNYXBJdGVyYXRvcjpRYSxpc01vZHVsZU5hbWVzcGFjZU9iamVjdDpxYSxpc05hdGl2ZUVycm9yOlphLGlzUHJvbWlzZTpKYSxpc1NldDp0Uixpc1NldEl0ZXJhdG9yOnJSLGlzV2Vha01hcDpvUixpc1dlYWtTZXQ6c1IsaXNSZWdFeHA6ZVIsaXNEYXRlOmphLGlzU3RyaW5nT2JqZWN0OklzLGlzTnVtYmVyT2JqZWN0OnhzLGlzQm9vbGVhbk9iamVjdDpOcyxpc0JpZ0ludE9iamVjdDpUc319KTt2YXIgQ3gsaVIsY1I9cCgoKT0+e0N4PVN5bWJvbChcImtIYW5kbGVcIiksaVI9U3ltYm9sKFwia0tleU9iamVjdFwiKX0pO2Z1bmN0aW9uIGFSKGUpe3JldHVybiBlIT1udWxsJiZlWyRmXSE9PXZvaWQgMH1mdW5jdGlvbiBSUihlKXtyZXR1cm4gZSE9bnVsbCYmZVtpUl0hPT12b2lkIDB9dmFyICRmLGxSPXAoKCk9PntjUigpOyRmPVN5bWJvbChcImtLZXlUeXBlXCIpfSk7dmFyIFhuPXt9O3JlKFhuLHtpc0FueUFycmF5QnVmZmVyOigpPT5tdCxpc0FyZ3VtZW50c09iamVjdDooKT0+bXMsaXNBcnJheUJ1ZmZlcjooKT0+VXMsaXNBcnJheUJ1ZmZlclZpZXc6KCk9PmxyLGlzQXN5bmNGdW5jdGlvbjooKT0+RHMsaXNCaWdJbnQ2NEFycmF5OigpPT52Zixpc0JpZ0ludE9iamVjdDooKT0+Vm4saXNCaWdVaW50NjRBcnJheTooKT0+WWYsaXNCb29sZWFuT2JqZWN0OigpPT5Hbixpc0JveGVkUHJpbWl0aXZlOigpPT5qbixpc0NyeXB0b0tleTooKT0+UlIsaXNEYXRhVmlldzooKT0+TXMsaXNEYXRlOigpPT5Xbixpc0Zsb2F0MzJBcnJheTooKT0+RVIsaXNGbG9hdDY0QXJyYXk6KCk9PnVSLGlzR2VuZXJhdG9yRnVuY3Rpb246KCk9PnlzLGlzR2VuZXJhdG9yT2JqZWN0OigpPT5aZixpc0ludDE2QXJyYXk6KCk9PmpmLGlzSW50MzJBcnJheTooKT0+WGYsaXNJbnQ4QXJyYXk6KCk9PktmLGlzS2V5T2JqZWN0OigpPT5hUixpc01hcDooKT0+WW4saXNNYXBJdGVyYXRvcjooKT0+Q3MsaXNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6KCk9PmtzLGlzTmF0aXZlRXJyb3I6KCk9PmZSLGlzTnVtYmVyT2JqZWN0OigpPT5Ibixpc1Byb21pc2U6KCk9PmJzLGlzUmVnRXhwOigpPT52bixpc1NldDooKT0+S24saXNTZXRJdGVyYXRvcjooKT0+THMsaXNTaGFyZWRBcnJheUJ1ZmZlcjooKT0+SmYsaXNTdHJpbmdPYmplY3Q6KCk9PiRuLGlzU3ltYm9sT2JqZWN0OigpPT5fUixpc1R5cGVkQXJyYXk6KCk9PkZuLGlzVWludDE2QXJyYXk6KCk9PlFmLGlzVWludDMyQXJyYXk6KCk9PnFmLGlzVWludDhBcnJheTooKT0+a2UsaXNVaW50OENsYW1wZWRBcnJheTooKT0+emYsaXNXZWFrTWFwOigpPT53cyxpc1dlYWtTZXQ6KCk9PlBzfSk7ZnVuY3Rpb24gbHIoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKX1mdW5jdGlvbiB2ZihlKXtyZXR1cm4gTWUuY2FsbChlKT09PVwiQmlnSW50NjRBcnJheVwifWZ1bmN0aW9uIFlmKGUpe3JldHVybiBNZS5jYWxsKGUpPT09XCJCaWdVaW50NjRBcnJheVwifWZ1bmN0aW9uIEVSKGUpe3JldHVybiBNZS5jYWxsKGUpPT09XCJGbG9hdDMyQXJyYXlcIn1mdW5jdGlvbiB1UihlKXtyZXR1cm4gTWUuY2FsbChlKT09PVwiRmxvYXQ2NEFycmF5XCJ9ZnVuY3Rpb24gS2YoZSl7cmV0dXJuIE1lLmNhbGwoZSk9PT1cIkludDhBcnJheVwifWZ1bmN0aW9uIGpmKGUpe3JldHVybiBNZS5jYWxsKGUpPT09XCJJbnQxNkFycmF5XCJ9ZnVuY3Rpb24gWGYoZSl7cmV0dXJuIE1lLmNhbGwoZSk9PT1cIkludDMyQXJyYXlcIn1mdW5jdGlvbiBGbihlKXtyZXR1cm4gTWUuY2FsbChlKSE9PXZvaWQgMH1mdW5jdGlvbiBrZShlKXtyZXR1cm4gTWUuY2FsbChlKT09PVwiVWludDhBcnJheVwifWZ1bmN0aW9uIHpmKGUpe3JldHVybiBNZS5jYWxsKGUpPT09XCJVaW50OENsYW1wZWRBcnJheVwifWZ1bmN0aW9uIFFmKGUpe3JldHVybiBNZS5jYWxsKGUpPT09XCJVaW50MTZBcnJheVwifWZ1bmN0aW9uIHFmKGUpe3JldHVybiBNZS5jYWxsKGUpPT09XCJVaW50MzJBcnJheVwifXZhciBNZSxXbixtcyxWbixHbixIbiwkbixfUixmUix2bixEcyx5cyxaZixicyxZbixLbixDcyxMcyx3cyxQcyxVcyxNcyxKZixrcyxtdCxqbixxZT1wKCgpPT57Z3MoKTtsUigpO01lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpLnByb3RvdHlwZSxTeW1ib2wudG9TdHJpbmdUYWcpLmdldDsoe2lzRGF0ZTpXbixpc0FyZ3VtZW50c09iamVjdDptcyxpc0JpZ0ludE9iamVjdDpWbixpc0Jvb2xlYW5PYmplY3Q6R24saXNOdW1iZXJPYmplY3Q6SG4saXNTdHJpbmdPYmplY3Q6JG4saXNTeW1ib2xPYmplY3Q6X1IsaXNOYXRpdmVFcnJvcjpmUixpc1JlZ0V4cDp2bixpc0FzeW5jRnVuY3Rpb246RHMsaXNHZW5lcmF0b3JGdW5jdGlvbjp5cyxpc0dlbmVyYXRvck9iamVjdDpaZixpc1Byb21pc2U6YnMsaXNNYXA6WW4saXNTZXQ6S24saXNNYXBJdGVyYXRvcjpDcyxpc1NldEl0ZXJhdG9yOkxzLGlzV2Vha01hcDp3cyxpc1dlYWtTZXQ6UHMsaXNBcnJheUJ1ZmZlcjpVcyxpc0RhdGFWaWV3Ok1zLGlzU2hhcmVkQXJyYXlCdWZmZXI6SmYsaXNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6a3MsaXNBbnlBcnJheUJ1ZmZlcjptdCxpc0JveGVkUHJpbWl0aXZlOmpufT1Icil9KTt2YXIgSSxWdD1wKCgpPT57ST17fX0pO2Z1bmN0aW9uIGVlKGUpe2xldCB0PVwiX19ub2RlX2ludGVybmFsX1wiK2UubmFtZTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJuYW1lXCIse3ZhbHVlOnR9KSxlfXZhciBCcz1wKCgpPT57fSk7ZnVuY3Rpb24gem4oZSl7cmV0dXJuIGU9PW51bGx8fGU9PT1cInV0ZjhcInx8ZT09PVwidXRmLThcIj9cInV0ZjhcIjpwUihlKX1mdW5jdGlvbiBwUihlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgNDppZihlPT09XCJVVEY4XCIpcmV0dXJuXCJ1dGY4XCI7aWYoZT09PVwidWNzMlwifHxlPT09XCJVQ1MyXCIpcmV0dXJuXCJ1dGYxNmxlXCI7aWYoZT1gJHtlfWAudG9Mb3dlckNhc2UoKSxlPT09XCJ1dGY4XCIpcmV0dXJuXCJ1dGY4XCI7aWYoZT09PVwidWNzMlwiKXJldHVyblwidXRmMTZsZVwiO2JyZWFrO2Nhc2UgMzppZihlPT09XCJoZXhcInx8ZT09PVwiSEVYXCJ8fGAke2V9YC50b0xvd2VyQ2FzZSgpPT09XCJoZXhcIilyZXR1cm5cImhleFwiO2JyZWFrO2Nhc2UgNTppZihlPT09XCJhc2NpaVwiKXJldHVyblwiYXNjaWlcIjtpZihlPT09XCJ1Y3MtMlwiKXJldHVyblwidXRmMTZsZVwiO2lmKGU9PT1cIlVURi04XCIpcmV0dXJuXCJ1dGY4XCI7aWYoZT09PVwiQVNDSUlcIilyZXR1cm5cImFzY2lpXCI7aWYoZT09PVwiVUNTLTJcIilyZXR1cm5cInV0ZjE2bGVcIjtpZihlPWAke2V9YC50b0xvd2VyQ2FzZSgpLGU9PT1cInV0Zi04XCIpcmV0dXJuXCJ1dGY4XCI7aWYoZT09PVwiYXNjaWlcIilyZXR1cm5cImFzY2lpXCI7aWYoZT09PVwidWNzLTJcIilyZXR1cm5cInV0ZjE2bGVcIjticmVhaztjYXNlIDY6aWYoZT09PVwiYmFzZTY0XCIpcmV0dXJuXCJiYXNlNjRcIjtpZihlPT09XCJsYXRpbjFcInx8ZT09PVwiYmluYXJ5XCIpcmV0dXJuXCJsYXRpbjFcIjtpZihlPT09XCJCQVNFNjRcIilyZXR1cm5cImJhc2U2NFwiO2lmKGU9PT1cIkxBVElOMVwifHxlPT09XCJCSU5BUllcIilyZXR1cm5cImxhdGluMVwiO2lmKGU9YCR7ZX1gLnRvTG93ZXJDYXNlKCksZT09PVwiYmFzZTY0XCIpcmV0dXJuXCJiYXNlNjRcIjtpZihlPT09XCJsYXRpbjFcInx8ZT09PVwiYmluYXJ5XCIpcmV0dXJuXCJsYXRpbjFcIjticmVhaztjYXNlIDc6aWYoZT09PVwidXRmMTZsZVwifHxlPT09XCJVVEYxNkxFXCJ8fGAke2V9YC50b0xvd2VyQ2FzZSgpPT09XCJ1dGYxNmxlXCIpcmV0dXJuXCJ1dGYxNmxlXCI7YnJlYWs7Y2FzZSA4OmlmKGU9PT1cInV0Zi0xNmxlXCJ8fGU9PT1cIlVURi0xNkxFXCJ8fGAke2V9YC50b0xvd2VyQ2FzZSgpPT09XCJ1dGYtMTZsZVwiKXJldHVyblwidXRmMTZsZVwiO2JyZWFrO2Nhc2UgOTppZihlPT09XCJiYXNlNjR1cmxcInx8ZT09PVwiQkFTRTY0VVJMXCJ8fGAke2V9YC50b0xvd2VyQ2FzZSgpPT09XCJiYXNlNjR1cmxcIilyZXR1cm5cImJhc2U2NHVybFwiO2JyZWFrO2RlZmF1bHQ6aWYoZT09PVwiXCIpcmV0dXJuXCJ1dGY4XCJ9fXZhciBGcz1wKCgpPT57fSk7ZnVuY3Rpb24gZXAoZSl7cmV0dXJuIGU9PT0oZXwwKX1mdW5jdGlvbiB0cChlKXtyZXR1cm4gZT09PWU+Pj4wfWZ1bmN0aW9uIEVyKGUsdCl7aWYodHlwZW9mIGUhPVwic3RyaW5nXCIpdGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcInN0cmluZ1wiLGUpfWZ1bmN0aW9uIFplKGUsdCl7aWYodHlwZW9mIGUhPVwiYm9vbGVhblwiKXRocm93IG5ldyBJLkVSUl9JTlZBTElEX0FSR19UWVBFKHQsXCJib29sZWFuXCIsZSl9dmFyIGRSLEh4LEJlLCR4LHZ4LFl4LEV0LEd0LEh0LEt4LHllPXAoKCk9PntWdCgpO0JzKCk7cWUoKTtGcygpO2RSPWVlKChlLHQ9XCJidWZmZXJcIik9PntpZighbHIoZSkpdGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxbXCJCdWZmZXJcIixcIlR5cGVkQXJyYXlcIixcIkRhdGFWaWV3XCJdLGUpfSksSHg9ZWUoKGUsdCxyPU51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG49TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpPT57aWYodHlwZW9mIGUhPVwibnVtYmVyXCIpdGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcIm51bWJlclwiLGUpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBJLkVSUl9PVVRfT0ZfUkFOR0UodCxcImFuIGludGVnZXJcIixlKTtpZihlPHJ8fGU+bil0aHJvdyBuZXcgSS5FUlJfT1VUX09GX1JBTkdFKHQsYD49ICR7cn0gJiYgPD0gJHtufWAsZSl9KSxCZT1lZSgoZSx0LHIpPT57bGV0IG49cj09bnVsbCxvPW4/ITE6ci5hbGxvd0FycmF5LHM9bj8hMTpyLmFsbG93RnVuY3Rpb247aWYoIShuPyExOnIubnVsbGFibGUpJiZlPT09bnVsbHx8IW8mJkFycmF5LmlzQXJyYXkoZSl8fHR5cGVvZiBlIT1cIm9iamVjdFwiJiYoIXN8fHR5cGVvZiBlIT1cImZ1bmN0aW9uXCIpKXRocm93IG5ldyBJLkVSUl9JTlZBTElEX0FSR19UWVBFKHQsXCJPYmplY3RcIixlKX0pLCR4PWVlKChlLHQscj0tMjE0NzQ4MzY0OCxuPTIxNDc0ODM2NDcpPT57aWYoIWVwKGUpKXRocm93IHR5cGVvZiBlIT1cIm51bWJlclwiP25ldyBJLkVSUl9JTlZBTElEX0FSR19UWVBFKHQsXCJudW1iZXJcIixlKTpOdW1iZXIuaXNJbnRlZ2VyKGUpP25ldyBJLkVSUl9PVVRfT0ZfUkFOR0UodCxgPj0gJHtyfSAmJiA8PSAke259YCxlKTpuZXcgSS5FUlJfT1VUX09GX1JBTkdFKHQsXCJhbiBpbnRlZ2VyXCIsZSk7aWYoZTxyfHxlPm4pdGhyb3cgbmV3IEkuRVJSX09VVF9PRl9SQU5HRSh0LGA+PSAke3J9ICYmIDw9ICR7bn1gLGUpfSksdng9ZWUoKGUsdCxyKT0+e2lmKCF0cChlKSl7aWYodHlwZW9mIGUhPVwibnVtYmVyXCIpdGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcIm51bWJlclwiLGUpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBJLkVSUl9PVVRfT0ZfUkFOR0UodCxcImFuIGludGVnZXJcIixlKTtsZXQgbj1yPzE6MDt0aHJvdyBuZXcgSS5FUlJfT1VUX09GX1JBTkdFKHQsYD49ICR7bn0gJiYgPCA0Mjk0OTY3Mjk2YCxlKX1pZihyJiZlPT09MCl0aHJvdyBuZXcgSS5FUlJfT1VUX09GX1JBTkdFKHQsXCI+PSAxICYmIDwgNDI5NDk2NzI5NlwiLGUpfSk7WXg9ZWUoKGUsdCxyKT0+e2lmKCFBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMuY2FsbChyLGUpKXtsZXQgbj1BcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChyLHM9PnR5cGVvZiBzPT1cInN0cmluZ1wiP2AnJHtzfSdgOlN0cmluZyhzKSksXCIsIFwiKSxvPVwibXVzdCBiZSBvbmUgb2Y6IFwiK247dGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1ZBTFVFKHQsZSxvKX19KSxFdD1lZShlPT57aWYodHlwZW9mIGUhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9DQUxMQkFDSyhlKX0pLEd0PWVlKChlLHQpPT57aWYoZSE9PXZvaWQgMCYmKGU9PT1udWxsfHx0eXBlb2YgZSE9XCJvYmplY3RcInx8IShcImFib3J0ZWRcImluIGUpKSl0aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0LFwiQWJvcnRTaWduYWxcIixlKX0pLEh0PWVlKChlLHQpPT57aWYodHlwZW9mIGUhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0LFwiRnVuY3Rpb25cIixlKX0pLEt4PWVlKChlLHQscj0wKT0+e2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBJLkVSUl9JTlZBTElEX0FSR19UWVBFKHQsXCJBcnJheVwiLGUpO2lmKGUubGVuZ3RoPHIpe2xldCBuPWBtdXN0IGJlIGxvbmdlciB0aGFuICR7cn1gO3Rocm93IG5ldyBJLkVSUl9JTlZBTElEX0FSR19WQUxVRSh0LGUsbil9fSl9KTt2YXIgVnM9e307cmUoVnMse0FMTF9QUk9QRVJUSUVTOigpPT5xbixPTkxZX0NPTkZJR1VSQUJMRTooKT0+T1IsT05MWV9FTlVNRVJBQkxFOigpPT4kcixPTkxZX0VOVU1fV1JJVEFCTEU6KCk9Pm5wLE9OTFlfV1JJVEFCTEU6KCk9PmhSLFNLSVBfU1RSSU5HUzooKT0+U1IsU0tJUF9TWU1CT0xTOigpPT5XcyxnZXRPd25Ob25JbmRleFByb3BlcnRpZXM6KCk9PnZyLGd1ZXNzSGFuZGxlVHlwZTooKT0+cnAsaXNBcnJheUluZGV4OigpPT5BUn0pO2Z1bmN0aW9uIHJwKGUpe1coXCJ1dGlsLmd1ZXNzSGFuZGxlVHlwZVwiKX1mdW5jdGlvbiBBUihlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2VcIm51bWJlclwiOnJldHVybiBlPj0wJiYoZXwwKT09PWU7Y2FzZVwic3RyaW5nXCI6e2xldCB0PVFuW2VdO2lmKHQhPT12b2lkIDApcmV0dXJuIHQ7bGV0IHI9ZS5sZW5ndGg7aWYocj09PTApcmV0dXJuIFFuW2VdPSExO2xldCBuPTAsbz0wO2Zvcig7bzxyOysrbylpZihuPWUuY2hhckNvZGVBdChvKSxvPT09MCYmbj09PTQ4JiZyPjF8fG48NDh8fG4+NTcpcmV0dXJuIFFuW2VdPSExO3JldHVybiBRbltlXT0hMH1kZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiB2cihlLHQpe2xldCByPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSwuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpXTtpZihBcnJheS5pc0FycmF5KGUpJiYocj1yLmZpbHRlcihvPT4hQVIobykpKSx0PT09cW4pcmV0dXJuIHI7bGV0IG49W107Zm9yKGxldCBvIG9mIHIpe2xldCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxvKTtzIT09dm9pZCAwJiYodCZoUiYmIXMud3JpdGFibGV8fHQmJHImJiFzLmVudW1lcmFibGV8fHQmT1ImJiFzLmNvbmZpZ3VyYWJsZXx8dCZTUiYmdHlwZW9mIG89PVwic3RyaW5nXCJ8fHQmV3MmJnR5cGVvZiBvPT1cInN5bWJvbFwifHxuLnB1c2gobykpfXJldHVybiBufXZhciBxbixoUiwkcixPUixucCxTUixXcyxRbixabj1wKCgpPT57VWUoKTtxbj0wLGhSPTEsJHI9MixPUj00LG5wPTYsU1I9OCxXcz0xNixRbj17fX0pO2Z1bmN0aW9uIGhwKGUsdCl7bGV0IHI9e3N0eWxpemU6ZS5zdHlsaXplLHNob3dIaWRkZW46ZS5zaG93SGlkZGVuLGRlcHRoOmUuZGVwdGgsY29sb3JzOmUuY29sb3JzLGN1c3RvbUluc3BlY3Q6ZS5jdXN0b21JbnNwZWN0LHNob3dQcm94eTplLnNob3dQcm94eSxtYXhBcnJheUxlbmd0aDplLm1heEFycmF5TGVuZ3RoLG1heFN0cmluZ0xlbmd0aDplLm1heFN0cmluZ0xlbmd0aCxicmVha0xlbmd0aDplLmJyZWFrTGVuZ3RoLGNvbXBhY3Q6ZS5jb21wYWN0LHNvcnRlZDplLnNvcnRlZCxnZXR0ZXJzOmUuZ2V0dGVycywuLi5lLnVzZXJPcHRpb25zfTtpZih0KXtPYmplY3Quc2V0UHJvdG90eXBlT2YocixudWxsKTtmb3IobGV0IG4gb2YgT2JqZWN0LmtleXMocikpKHR5cGVvZiByW25dPT1cIm9iamVjdFwifHx0eXBlb2YgcltuXT09XCJmdW5jdGlvblwiKSYmcltuXSE9PW51bGwmJmRlbGV0ZSByW25dO3Iuc3R5bGl6ZT1PYmplY3Quc2V0UHJvdG90eXBlT2YoKG4sbyk9PntsZXQgczt0cnl7cz1gJHtlLnN0eWxpemUobixvKX1gfWNhdGNoe31yZXR1cm4gdHlwZW9mIHMhPVwic3RyaW5nXCI/bjpzfSxudWxsKX1yZXR1cm4gcn1mdW5jdGlvbiBLKGUsdCl7bGV0IHI9e2J1ZGdldDp7fSxpbmRlbnRhdGlvbkx2bDowLHNlZW46W10sY3VycmVudERlcHRoOjAsc3R5bGl6ZTpLcyxzaG93SGlkZGVuOk9lLnNob3dIaWRkZW4sZGVwdGg6T2UuZGVwdGgsY29sb3JzOk9lLmNvbG9ycyxjdXN0b21JbnNwZWN0Ok9lLmN1c3RvbUluc3BlY3Qsc2hvd1Byb3h5Ok9lLnNob3dQcm94eSxtYXhBcnJheUxlbmd0aDpPZS5tYXhBcnJheUxlbmd0aCxtYXhTdHJpbmdMZW5ndGg6T2UubWF4U3RyaW5nTGVuZ3RoLGJyZWFrTGVuZ3RoOk9lLmJyZWFrTGVuZ3RoLGNvbXBhY3Q6T2UuY29tcGFjdCxzb3J0ZWQ6T2Uuc29ydGVkLGdldHRlcnM6T2UuZ2V0dGVyc307aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtpZihhcmd1bWVudHMubGVuZ3RoPjImJihhcmd1bWVudHNbMl0hPT12b2lkIDAmJihyLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDAmJihyLmNvbG9ycz1hcmd1bWVudHNbM10pKSx0eXBlb2YgdD09XCJib29sZWFuXCIpci5zaG93SGlkZGVuPXQ7ZWxzZSBpZih0KXtsZXQgbj1PYmplY3Qua2V5cyh0KTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoOysrbyl7bGV0IHM9bltvXTtPZS5oYXNPd25Qcm9wZXJ0eShzKXx8cz09PVwic3R5bGl6ZVwiP3Jbc109dFtzXTpyLnVzZXJPcHRpb25zPT09dm9pZCAwJiYoci51c2VyT3B0aW9ucz10KX19fXJldHVybiByLmNvbG9ycyYmKHIuc3R5bGl6ZT1PcCksci5tYXhBcnJheUxlbmd0aD09PW51bGwmJihyLm1heEFycmF5TGVuZ3RoPTEvMCksci5tYXhTdHJpbmdMZW5ndGg9PT1udWxsJiYoci5tYXhTdHJpbmdMZW5ndGg9MS8wKSxTZShyLGUsMCl9ZnVuY3Rpb24gRmUoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSy5jb2xvcnMsdCx7Z2V0KCl7cmV0dXJuIHRoaXNbZV19LHNldChyKXt0aGlzW2VdPXJ9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExfSl9ZnVuY3Rpb24gR3MoZSx0KXtyZXR1cm4gdD09PS0xP2BcIiR7ZX1cImA6dD09PS0yP2BcXGAke2V9XFxgYDpgJyR7ZX0nYH1mdW5jdGlvbiBZcyhlKXtsZXQgdD1ScCxyPSRzLG49Mzk7aWYoZS5pbmNsdWRlcyhcIidcIikmJihlLmluY2x1ZGVzKCdcIicpPyFlLmluY2x1ZGVzKFwiYFwiKSYmIWUuaW5jbHVkZXMoXCIke1wiKSYmKG49LTIpOm49LTEsbiE9PTM5JiYodD1scCxyPUVwKSksZS5sZW5ndGg8NWUzJiYhdC50ZXN0KGUpKXJldHVybiBHcyhlLG4pO2lmKGUubGVuZ3RoPjEwMClyZXR1cm4gZT1lLnJlcGxhY2Uocix2cyksR3MoZSxuKTtsZXQgbz1cIlwiLHM9MCxpPWUubGVuZ3RoO2ZvcihsZXQgYz0wO2M8aTtjKyspe2xldCBhPWUuY2hhckNvZGVBdChjKTsoYT09PW58fGE9PT05Mnx8YTwzMnx8YT4xMjYmJmE8MTYwKSYmKHM9PT1jP28rPUhzW2FdOm8rPWAke2Uuc2xpY2UocyxjKX0ke0hzW2FdfWAscz1jKzEpfXJldHVybiBzIT09aSYmKG8rPWUuc2xpY2UocykpLEdzKG8sbil9ZnVuY3Rpb24gT3AoZSx0KXtsZXQgcj1LLnN0eWxlc1t0XTtpZihyIT09dm9pZCAwKXtsZXQgbj1LLmNvbG9yc1tyXTtpZihuIT09dm9pZCAwKXJldHVybmBcXHgxQlske25bMF19bSR7ZX1cXHgxQlske25bMV19bWB9cmV0dXJuIGV9ZnVuY3Rpb24gS3MoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gU2UoZSx0LHIsbil7aWYodHlwZW9mIHQhPVwib2JqZWN0XCImJnR5cGVvZiB0IT1cImZ1bmN0aW9uXCImJiFEUih0KSlyZXR1cm4gWHMoZS5zdHlsaXplLHQsZSk7aWYodD09PW51bGwpcmV0dXJuIGUuc3R5bGl6ZShcIm51bGxcIixcIm51bGxcIik7bGV0IG89dCxzPXZvaWQgMDtpZihlLmN1c3RvbUluc3BlY3Qpe2xldCBpPXRbeVJdO2lmKHR5cGVvZiBpPT1cImZ1bmN0aW9uXCImJmkhPT1LJiYhKHQuY29uc3RydWN0b3ImJnQuY29uc3RydWN0b3IucHJvdG90eXBlPT09dCkpe2xldCBjPWUuZGVwdGg9PT1udWxsP251bGw6ZS5kZXB0aC1yLGE9cyE9PXZvaWQgMHx8IShvIGluc3RhbmNlb2YgT2JqZWN0KSxSPWkuY2FsbChvLGMsaHAoZSxhKSk7aWYoUiE9PW8pcmV0dXJuIHR5cGVvZiBSIT1cInN0cmluZ1wiP1NlKGUsUixyKTpSLnJlcGxhY2UoL1xcbi9nLGBcbiR7XCIgXCIucmVwZWF0KGUuaW5kZW50YXRpb25MdmwpfWApfX1pZihlLnNlZW4uaW5jbHVkZXModCkpe2xldCBpPTE7cmV0dXJuIGUuY2lyY3VsYXI9PT12b2lkIDA/KGUuY2lyY3VsYXI9bmV3IE1hcCxlLmNpcmN1bGFyLnNldCh0LGkpKTooaT1lLmNpcmN1bGFyLmdldCh0KSxpPT09dm9pZCAwJiYoaT1lLmNpcmN1bGFyLnNpemUrMSxlLmNpcmN1bGFyLnNldCh0LGkpKSksZS5zdHlsaXplKGBbQ2lyY3VsYXIgKiR7aX1dYCxcInNwZWNpYWxcIil9cmV0dXJuIFNwKGUsdCxyLG4pfWZ1bmN0aW9uIFNwKGUsdCxyLG4pe2xldCBvLHM7ZS5zaG93SGlkZGVuJiYocjw9ZS5kZXB0aHx8ZS5kZXB0aD09PW51bGwpJiYocz1bXSk7bGV0IGk9Q1IodCxlLHIscyk7cyE9PXZvaWQgMCYmcy5sZW5ndGg9PT0wJiYocz12b2lkIDApO2xldCBjPXRbU3ltYm9sLnRvU3RyaW5nVGFnXTt0eXBlb2YgYyE9XCJzdHJpbmdcIiYmKGM9XCJcIik7bGV0IGE9XCJcIixSPU5wLGwsRT0hMCx1PTAsZj1lLnNob3dIaWRkZW4/cW46JHIsQT11cjtpZih0W1N5bWJvbC5pdGVyYXRvcl18fGk9PT1udWxsKWlmKEU9ITEsQXJyYXkuaXNBcnJheSh0KSl7bGV0IGQ9aSE9PVwiQXJyYXlcInx8YyE9PVwiXCI/ZmUoaSxjLFwiQXJyYXlcIixgKCR7dC5sZW5ndGh9KWApOlwiXCI7aWYobz12cih0LGYpLGw9W2Ake2R9W2AsXCJdXCJdLHQubGVuZ3RoPT09MCYmby5sZW5ndGg9PT0wJiZzPT09dm9pZCAwKXJldHVybmAke2xbMF19XWA7QT10byxSPVRwfWVsc2UgaWYoS24odCkpe2xldCBkPXQuc2l6ZSx4PWZlKGksYyxcIlNldFwiLGAoJHtkfSlgKTtpZihvPVlyKHQsZS5zaG93SGlkZGVuKSxSPWkhPT1udWxsP05SLmJpbmQobnVsbCx0KTpOUi5iaW5kKG51bGwsdC52YWx1ZXMoKSksZD09PTAmJm8ubGVuZ3RoPT09MCYmcz09PXZvaWQgMClyZXR1cm5gJHt4fXt9YDtsPVtgJHt4fXtgLFwifVwiXX1lbHNlIGlmKFluKHQpKXtsZXQgZD10LnNpemUseD1mZShpLGMsXCJNYXBcIixgKCR7ZH0pYCk7aWYobz1Zcih0LGUuc2hvd0hpZGRlbiksUj1pIT09bnVsbD94Ui5iaW5kKG51bGwsdCk6eFIuYmluZChudWxsLHQuZW50cmllcygpKSxkPT09MCYmby5sZW5ndGg9PT0wJiZzPT09dm9pZCAwKXJldHVybmAke3h9e31gO2w9W2Ake3h9e2AsXCJ9XCJdfWVsc2UgaWYoRm4odCkpe289dnIodCxmKTtsZXQgZD10LHg9XCJcIixUPXQubGVuZ3RoO2lmKGw9W2Ake2ZlKGksYyx4LGAoJHtUfSlgKX1bYCxcIl1cIl0sdC5sZW5ndGg9PT0wJiZvLmxlbmd0aD09PTAmJiFlLnNob3dIaWRkZW4pcmV0dXJuYCR7bFswXX1dYDtSPUlwLmJpbmQobnVsbCxkLFQpLEE9dG99ZWxzZSBDcyh0KT8obz1Zcih0LGUuc2hvd0hpZGRlbiksbD1UUihcIk1hcFwiLGMpLFI9SVIuYmluZChudWxsLGwpKTpMcyh0KT8obz1Zcih0LGUuc2hvd0hpZGRlbiksbD1UUihcIlNldFwiLGMpLFI9SVIuYmluZChudWxsLGwpKTpFPSEwO2lmKEUpaWYobz1Zcih0LGUuc2hvd0hpZGRlbiksbD1bXCJ7XCIsXCJ9XCJdLGk9PT1cIk9iamVjdFwiKXtpZihtcyh0KT9sWzBdPVwiW0FyZ3VtZW50c10ge1wiOmMhPT1cIlwiJiYobFswXT1gJHtmZShpLGMsXCJPYmplY3RcIil9e2ApLG8ubGVuZ3RoPT09MCYmcz09PXZvaWQgMClyZXR1cm5gJHtsWzBdfX1gfWVsc2UgaWYodHlwZW9mIHQ9PVwiZnVuY3Rpb25cIil7aWYoYT1ncCh0LGksYyksby5sZW5ndGg9PT0wJiZzPT09dm9pZCAwKXJldHVybiBlLnN0eWxpemUoYSxcInNwZWNpYWxcIil9ZWxzZSBpZih2bih0KSl7YT1SZWdFeHAoaSE9PW51bGw/dDpuZXcgUmVnRXhwKHQpKS50b1N0cmluZygpO2xldCBkPWZlKGksYyxcIlJlZ0V4cFwiKTtpZihkIT09XCJSZWdFeHAgXCImJihhPWAke2R9JHthfWApLG8ubGVuZ3RoPT09MCYmcz09PXZvaWQgMHx8cj5lLmRlcHRoJiZlLmRlcHRoIT09bnVsbClyZXR1cm4gZS5zdHlsaXplKGEsXCJyZWdleHBcIil9ZWxzZSBpZihXbih0KSl7YT1OdW1iZXIuaXNOYU4odC5nZXRUaW1lKCkpP3QudG9TdHJpbmcoKTp0LnRvSVNPU3RyaW5nKCk7bGV0IGQ9ZmUoaSxjLFwiRGF0ZVwiKTtpZihkIT09XCJEYXRlIFwiJiYoYT1gJHtkfSR7YX1gKSxvLmxlbmd0aD09PTAmJnM9PT12b2lkIDApcmV0dXJuIGUuc3R5bGl6ZShhLFwiZGF0ZVwiKX1lbHNlIGlmKHQgaW5zdGFuY2VvZiBFcnJvcil7aWYoYT1tcCh0LGksYyxlLG8pLG8ubGVuZ3RoPT09MCYmcz09PXZvaWQgMClyZXR1cm4gYX1lbHNlIGlmKG10KHQpKXtsZXQgZD1Vcyh0KT9cIkFycmF5QnVmZmVyXCI6XCJTaGFyZWRBcnJheUJ1ZmZlclwiLHg9ZmUoaSxjLGQpO2lmKG49PT12b2lkIDApUj15cDtlbHNlIGlmKG8ubGVuZ3RoPT09MCYmcz09PXZvaWQgMClyZXR1cm4geCtgeyBieXRlTGVuZ3RoOiAke3pzKGUuc3R5bGl6ZSx0LmJ5dGVMZW5ndGgpfSB9YDtsWzBdPWAke3h9e2AsQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbChvLFwiYnl0ZUxlbmd0aFwiKX1lbHNlIGlmKE1zKHQpKWxbMF09YCR7ZmUoaSxjLFwiRGF0YVZpZXdcIil9e2AsQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbChvLFwiYnl0ZUxlbmd0aFwiLFwiYnl0ZU9mZnNldFwiLFwiYnVmZmVyXCIpO2Vsc2UgaWYoYnModCkpbFswXT1gJHtmZShpLGMsXCJQcm9taXNlXCIpfXtgLFI9YnA7ZWxzZSBpZihQcyh0KSlsWzBdPWAke2ZlKGksYyxcIldlYWtTZXRcIil9e2AsUj1lLnNob3dIaWRkZW4/Q3A6Z1I7ZWxzZSBpZih3cyh0KSlsWzBdPWAke2ZlKGksYyxcIldlYWtNYXBcIil9e2AsUj1lLnNob3dIaWRkZW4/THA6Z1I7ZWxzZSBpZihrcyh0KSlsWzBdPWAke2ZlKGksYyxcIk1vZHVsZVwiKX17YCxSPVVwLmJpbmQobnVsbCxvKTtlbHNlIGlmKGpuKHQpKXtpZihhPWtwKHQsZSxvLGksYyksby5sZW5ndGg9PT0wJiZzPT09dm9pZCAwKXJldHVybiBhfWVsc2V7aWYoby5sZW5ndGg9PT0wJiZzPT09dm9pZCAwKXJldHVybmAke0puKHQsaSxjKX17fWA7bFswXT1gJHtKbih0LGksYyl9e2B9aWYocj5lLmRlcHRoJiZlLmRlcHRoIT09bnVsbCl7bGV0IGQ9Sm4odCxpLGMpLnNsaWNlKDAsLTEpO3JldHVybiBpIT09bnVsbCYmKGQ9YFske2R9XWApLGUuc3R5bGl6ZShkLFwic3BlY2lhbFwiKX1yKz0xLGUuc2Vlbi5wdXNoKHQpLGUuY3VycmVudERlcHRoPXI7bGV0IFMsQj1lLmluZGVudGF0aW9uTHZsO3RyeXtmb3IoUz1SKGUsdCxyKSx1PTA7dTxvLmxlbmd0aDt1KyspUy5wdXNoKF9yKGUsdCxyLG9bdV0sQSkpO3MhPT12b2lkIDAmJlMucHVzaCguLi5zKX1jYXRjaChkKXtsZXQgeD1Kbih0LGksYykuc2xpY2UoMCwtMSk7cmV0dXJuIHZvaWQgMH1pZihlLmNpcmN1bGFyIT09dm9pZCAwKXtsZXQgZD1lLmNpcmN1bGFyLmdldCh0KTtpZihkIT09dm9pZCAwKXtsZXQgeD1lLnN0eWxpemUoYDxyZWYgKiR7ZH0+YCxcInNwZWNpYWxcIik7ZS5jb21wYWN0IT09ITA/YT1hPT09XCJcIj94OmAke3h9ICR7YX1gOmxbMF09YCR7eH0gJHtsWzBdfWB9fWlmKGUuc2Vlbi5wb3AoKSxlLnNvcnRlZCl7bGV0IGQ9ZS5zb3J0ZWQ9PT0hMD92b2lkIDA6ZS5zb3J0ZWQ7aWYoQT09PXVyKVM9Uy5zb3J0KGQpO2Vsc2UgaWYoby5sZW5ndGg+MSl7bGV0IHg9Uy5zbGljZShTLmxlbmd0aC1vLmxlbmd0aCkuc29ydChkKTtTLnNwbGljZShTLmxlbmd0aC1vLmxlbmd0aCxvLmxlbmd0aCwuLi54KX19bGV0IGc9d1IoZSxTLGEsbCxBLHIsdCksTz0oZS5idWRnZXRbZS5pbmRlbnRhdGlvbkx2bF18fDApK2cubGVuZ3RoO3JldHVybiBlLmJ1ZGdldFtlLmluZGVudGF0aW9uTHZsXT1PLE8+MioqMjcmJihlLmRlcHRoPS0xKSxnfWZ1bmN0aW9uIEFwKGUsdCxyLG4sbyl7bGV0IHM9MCxpLGM7ZG97aWYocyE9PTB8fHQ9PT1yKXtpZihyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKSxyPT09bnVsbClyZXR1cm47bGV0IGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLFwiY29uc3RydWN0b3JcIik7aWYoYSE9PXZvaWQgMCYmdHlwZW9mIGEudmFsdWU9PVwiZnVuY3Rpb25cIiYmYlIuaGFzKGEudmFsdWUubmFtZSkpcmV0dXJufXM9PT0wP2M9bmV3IFNldDpBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGksYT0+Yy5hZGQoYSkpLGk9UmVmbGVjdC5vd25LZXlzKHIpLEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoZS5zZWVuLHQpO2ZvcihsZXQgYSBvZiBpKXtpZihhPT09XCJjb25zdHJ1Y3RvclwifHx0Lmhhc093blByb3BlcnR5KGEpfHxzIT09MCYmYy5oYXMoYSkpY29udGludWU7bGV0IFI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGEpO2lmKHR5cGVvZiBSLnZhbHVlPT1cImZ1bmN0aW9uXCIpY29udGludWU7bGV0IGw9X3IoZSxyLG4sYSx1cixSLHQpO2UuY29sb3JzP0FycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwobyxgXFx4MUJbMm0ke2x9XFx4MUJbMjJtYCk6QXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChvLGwpfUFycmF5LnByb3RvdHlwZS5wb3AuY2FsbChlLnNlZW4pfXdoaWxlKCsrcyE9PTMpfWZ1bmN0aW9uIENSKGUsdCxyLG4pe2xldCBvLHM9ZTtmb3IoO2V8fERSKGUpOyl7bGV0IGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLFwiY29uc3RydWN0b3JcIik7aWYoYSE9PXZvaWQgMCYmdHlwZW9mIGEudmFsdWU9PVwiZnVuY3Rpb25cIiYmYS52YWx1ZS5uYW1lIT09XCJcIiYmeHAocyxhLnZhbHVlKSlyZXR1cm4gbiE9PXZvaWQgMCYmKG8hPT1lfHwhYlIuaGFzKGEudmFsdWUubmFtZSkpJiZBcCh0LHMsb3x8cyxyLG4pLGEudmFsdWUubmFtZTtlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxvPT09dm9pZCAwJiYobz1lKX1pZihvPT09bnVsbClyZXR1cm4gbnVsbDtsZXQgaT12b2lkIDA7aWYocj50LmRlcHRoJiZ0LmRlcHRoIT09bnVsbClyZXR1cm5gJHtpfSA8Q29tcGxleCBwcm90b3R5cGU+YDtsZXQgYz1DUihvLHQscisxLG4pO3JldHVybiBjPT09bnVsbD9gJHtpfSA8JHtLKG8sey4uLnQsY3VzdG9tSW5zcGVjdDohMSxkZXB0aDotMX0pfT5gOmAke2l9IDwke2N9PmB9ZnVuY3Rpb24gWHMoZSx0LHIpe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXtsZXQgbj1cIlwiO2lmKHQubGVuZ3RoPnIubWF4U3RyaW5nTGVuZ3RoKXtsZXQgbz10Lmxlbmd0aC1yLm1heFN0cmluZ0xlbmd0aDt0PXQuc2xpY2UoMCxyLm1heFN0cmluZ0xlbmd0aCksbj1gLi4uICR7b30gbW9yZSBjaGFyYWN0ZXIke28+MT9cInNcIjpcIlwifWB9cmV0dXJuIHIuY29tcGFjdCE9PSEwJiZ0Lmxlbmd0aD5vcCYmdC5sZW5ndGg+ci5icmVha0xlbmd0aC1yLmluZGVudGF0aW9uTHZsLTQ/dC5zcGxpdCgvKCkvKS5tYXAobz0+ZShZcyhvKSxcInN0cmluZ1wiKSkuam9pbihgICtcbiR7XCIgXCIucmVwZWF0KHIuaW5kZW50YXRpb25MdmwrMil9YCkrbjplKFlzKHQpLFwic3RyaW5nXCIpK259cmV0dXJuIHR5cGVvZiB0PT1cIm51bWJlclwiP3pzKGUsdCk6dHlwZW9mIHQ9PVwiYmlnaW50XCI/TFIoZSx0KTp0eXBlb2YgdD09XCJib29sZWFuXCI/ZShgJHt0fWAsXCJib29sZWFuXCIpOnR5cGVvZiB0PlwidVwiP2UoXCJ1bmRlZmluZWRcIixcInVuZGVmaW5lZFwiKTplKHQudG9TdHJpbmcoKSxcInN5bWJvbFwiKX1mdW5jdGlvbiBOcCgpe3JldHVybltdfWZ1bmN0aW9uIHhwKGUsdCl7dHJ5e3JldHVybiBlIGluc3RhbmNlb2YgdH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gZmUoZSx0LHIsbj1cIlwiKXtyZXR1cm4gZT09PW51bGw/dCE9PVwiXCImJnIhPT10P2BbJHtyfSR7bn06IG51bGwgcHJvdG90eXBlXSBbJHt0fV0gYDpgWyR7cn0ke259OiBudWxsIHByb3RvdHlwZV0gYDp0IT09XCJcIiYmZSE9PXQ/YCR7ZX0ke259IFske3R9XSBgOmAke2V9JHtufSBgfWZ1bmN0aW9uIFRwKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxvPU1hdGgubWluKE1hdGgubWF4KDAsZS5tYXhBcnJheUxlbmd0aCksbikscz1uLW8saT1bXTtmb3IobGV0IGM9MDtjPG87YysrKXtpZighdC5oYXNPd25Qcm9wZXJ0eShjKSlyZXR1cm4gTXAoZSx0LHIsbyxpLGMpO2kucHVzaChfcihlLHQscixjLGpzKSl9cmV0dXJuIHM+MCYmaS5wdXNoKGAuLi4gJHtzfSBtb3JlIGl0ZW0ke3M+MT9cInNcIjpcIlwifWApLGl9ZnVuY3Rpb24gSm4oZSx0LHIpe2xldCBuPVwiXCI7cmV0dXJuIHQ9PT1udWxsJiZuPT09ciYmKG49XCJPYmplY3RcIiksZmUodCxyLG4pfWZ1bmN0aW9uIFlyKGUsdCl7bGV0IHIsbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2lmKHQpcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxuLmxlbmd0aCE9PTAmJkFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHIsbik7ZWxzZXt0cnl7cj1PYmplY3Qua2V5cyhlKX1jYXRjaHtyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpfW4ubGVuZ3RofXJldHVybiByfWZ1bmN0aW9uIE5SKGUsdCxyLG4pe2xldCBvPVtdO3QuaW5kZW50YXRpb25MdmwrPTI7Zm9yKGxldCBzIG9mIGUpQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChvLFNlKHQscyxuKSk7cmV0dXJuIHQuaW5kZW50YXRpb25MdmwtPTIsb31mdW5jdGlvbiB4UihlLHQscixuKXtsZXQgbz1bXTt0LmluZGVudGF0aW9uTHZsKz0yO2ZvcihsZXR7MDpzLDE6aX1vZiBlKW8ucHVzaChgJHtTZSh0LHMsbil9ID0+ICR7U2UodCxpLG4pfWApO3JldHVybiB0LmluZGVudGF0aW9uTHZsLT0yLG99ZnVuY3Rpb24gSXAoZSx0LHIsbixvKXtsZXQgcz1NYXRoLm1pbihNYXRoLm1heCgwLHIubWF4QXJyYXlMZW5ndGgpLHQpLGk9ZS5sZW5ndGgtcyxjPW5ldyBBcnJheShzKSxhPWUubGVuZ3RoPjAmJnR5cGVvZiBlWzBdPT1cIm51bWJlclwiP3pzOkxSO2ZvcihsZXQgUj0wO1I8czsrK1IpY1tSXT1hKHIuc3R5bGl6ZSxlW1JdKTtpZihpPjAmJihjW3NdPWAuLi4gJHtpfSBtb3JlIGl0ZW0ke2k+MT9cInNcIjpcIlwifWApLHIuc2hvd0hpZGRlbil7ci5pbmRlbnRhdGlvbkx2bCs9Mjtmb3IobGV0IFIgb2ZbXCJCWVRFU19QRVJfRUxFTUVOVFwiLFwibGVuZ3RoXCIsXCJieXRlTGVuZ3RoXCIsXCJieXRlT2Zmc2V0XCIsXCJidWZmZXJcIl0pe2xldCBsPVNlKHIsZVtSXSxvLCEwKTtBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKGMsYFske1J9XTogJHtsfWApfXIuaW5kZW50YXRpb25MdmwtPTJ9cmV0dXJuIGN9ZnVuY3Rpb24gVFIoZSx0KXtyZXR1cm4gdCE9PWAke2V9IEl0ZXJhdG9yYCYmKHQhPT1cIlwiJiYodCs9XCJdIFtcIiksdCs9YCR7ZX0gSXRlcmF0b3JgKSxbYFske3R9XSB7YCxcIn1cIl19ZnVuY3Rpb24gSVIoZSx0LHIsbil7bGV0ezA6bywxOnN9PXI7cmV0dXJuIHM/KGVbMF09ZVswXS5yZXBsYWNlKC8gSXRlcmF0b3JdIHskLyxcIiBFbnRyaWVzXSB7XCIpLFBSKHQsbixvLGlwKSk6VVIodCxuLG8sc3ApfWZ1bmN0aW9uIGdwKGUsdCxyKXtsZXQgbj1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKTtpZihuLnNsaWNlKDAsNSk9PT1cImNsYXNzXCImJm4uZW5kc1dpdGgoXCJ9XCIpKXtsZXQgaT1uLnNsaWNlKDUsLTEpLGM9aS5pbmRleE9mKFwie1wiKTtpZihjIT09LTEmJighaS5zbGljZSgwLGMpLmluY2x1ZGVzKFwiKFwiKXx8cHAudGVzdChpLnJlcGxhY2UoZHApKSkpcmV0dXJuIEJwKGUsdCxyKX1sZXQgbz1cIkZ1bmN0aW9uXCI7eXMoZSkmJihvPWBHZW5lcmF0b3Ike299YCksRHMoZSkmJihvPWBBc3luYyR7b31gKTtsZXQgcz1gWyR7b31gO3JldHVybiB0PT09bnVsbCYmKHMrPVwiIChudWxsIHByb3RvdHlwZSlcIiksZS5uYW1lPT09XCJcIj9zKz1cIiAoYW5vbnltb3VzKVwiOnMrPWA6ICR7ZS5uYW1lfWAscys9XCJdXCIsdCE9PW8mJnQhPT1udWxsJiYocys9YCAke3R9YCksciE9PVwiXCImJnQhPT1yJiYocys9YCBbJHtyfV1gKSxzfWZ1bmN0aW9uIG1wKGUsdCxyLG4sbyl7bGV0IHM9ZS5uYW1lIT1udWxsP1N0cmluZyhlLm5hbWUpOlwiRXJyb3JcIixpPXMubGVuZ3RoLGM9ZS5zdGFjaz9TdHJpbmcoZS5zdGFjayk6ZS50b1N0cmluZygpO2lmKCFuLnNob3dIaWRkZW4mJm8ubGVuZ3RoIT09MClmb3IobGV0IGwgb2ZbXCJuYW1lXCIsXCJtZXNzYWdlXCIsXCJzdGFja1wiXSl7bGV0IEU9by5pbmRleE9mKGwpO0UhPT0tMSYmYy5pbmNsdWRlcyhlW2xdKSYmby5zcGxpY2UoRSwxKX1pZih0PT09bnVsbHx8cy5lbmRzV2l0aChcIkVycm9yXCIpJiZjLnN0YXJ0c1dpdGgocykmJihjLmxlbmd0aD09PWl8fGNbaV09PT1cIjpcInx8Y1tpXT09PWBcbmApKXtsZXQgbD1cIkVycm9yXCI7aWYodD09PW51bGwpe2xldCB1PWMubWF0Y2goL14oW0EtWl1bYS16XyBBLVowLTlbXFxdKCktXSspKD86OnxcXG4gezR9YXQpLyl8fGMubWF0Y2goL14oW2Etel9BLVowLTktXSpFcnJvcikkLyk7bD11JiZ1WzFdfHxcIlwiLGk9bC5sZW5ndGgsbD1sfHxcIkVycm9yXCJ9bGV0IEU9ZmUodCxyLGwpLnNsaWNlKDAsLTEpO3MhPT1FJiYoRS5pbmNsdWRlcyhzKT9pPT09MD9jPWAke0V9OiAke2N9YDpjPWAke0V9JHtjLnNsaWNlKGkpfWA6Yz1gJHtFfSBbJHtzfV0ke2Muc2xpY2UoaSl9YCl9bGV0IGE9ZS5tZXNzYWdlJiZjLmluZGV4T2YoZS5tZXNzYWdlKXx8LTE7YSE9PS0xJiYoYSs9ZS5tZXNzYWdlLmxlbmd0aCk7bGV0IFI9Yy5pbmRleE9mKGBcbiAgICBhdGAsYSk7aWYoUj09PS0xKWM9YFske2N9XWA7ZWxzZSBpZihuLmNvbG9ycyl7bGV0IGw9Yy5zbGljZSgwLFIpLEU9Yy5zbGljZShSKzEpLnNwbGl0KGBcbmApO2ZvcihsZXQgdSBvZiBFKXtsZXQgZjtsKz1gXG5gO2xldCBBPTA7Zm9yKDtmPWZwLmV4ZWModSk7KWwrPXUuc2xpY2UoQSxmLmluZGV4KzE0KSxsKz1uLnN0eWxpemUoZlsxXSxcIm1vZHVsZVwiKSxBPWYuaW5kZXgrZlswXS5sZW5ndGg7bCs9QT09PTA/dTp1LnNsaWNlKEEpfWM9bH1pZihuLmluZGVudGF0aW9uTHZsIT09MCl7bGV0IGw9XCIgXCIucmVwZWF0KG4uaW5kZW50YXRpb25MdmwpO2M9Yy5yZXBsYWNlKC9cXG4vZyxgXG4ke2x9YCl9cmV0dXJuIGN9ZnVuY3Rpb24geXAoZSx0KXtsZXQgcjt0cnl7cj1uZXcgVWludDhBcnJheSh0KX1jYXRjaHtyZXR1cm5bZS5zdHlsaXplKFwiKGRldGFjaGVkKVwiLFwic3BlY2lhbFwiKV19bGV0IG49RHAociwwLE1hdGgubWluKGUubWF4QXJyYXlMZW5ndGgsci5sZW5ndGgpKS5yZXBsYWNlKC8oLnsyfSkvZyxcIiQxIFwiKS50cmltKCksbz1yLmxlbmd0aC1lLm1heEFycmF5TGVuZ3RoO3JldHVybiBvPjAmJihuKz1gIC4uLiAke299IG1vcmUgYnl0ZSR7bz4xP1wic1wiOlwiXCJ9YCksW2Ake2Uuc3R5bGl6ZShcIltVaW50OENvbnRlbnRzXVwiLFwic3BlY2lhbFwiKX06IDwke259PmBdfWZ1bmN0aW9uIHpzKGUsdCl7cmV0dXJuIGUoT2JqZWN0LmlzKHQsLTApP1wiLTBcIjpgJHt0fWAsXCJudW1iZXJcIil9ZnVuY3Rpb24gYnAoZSx0LHIpe2xldCBuLHswOm8sMTpzfT10O2lmKG89PT1jcCluPVtlLnN0eWxpemUoXCI8cGVuZGluZz5cIixcInNwZWNpYWxcIildO2Vsc2V7ZS5pbmRlbnRhdGlvbkx2bCs9MjtsZXQgaT1TZShlLHMscik7ZS5pbmRlbnRhdGlvbkx2bC09MixuPVtvPT09YXA/YCR7ZS5zdHlsaXplKFwiPHJlamVjdGVkPlwiLFwic3BlY2lhbFwiKX0gJHtpfWA6aV19cmV0dXJuIG59ZnVuY3Rpb24gZ1IoZSl7cmV0dXJuW2Uuc3R5bGl6ZShcIjxpdGVtcyB1bmtub3duPlwiLFwic3BlY2lhbFwiKV19ZnVuY3Rpb24gQ3AoZSx0LHIpe3JldHVybiBVUihlLHIsdCxybyl9ZnVuY3Rpb24gTHAoZSx0LHIpe3JldHVybiBQUihlLHIsdCxybyl9ZnVuY3Rpb24gX3IoZSx0LHIsbixvLHMsaT10KXtsZXQgYyxhLFI9XCIgXCI7aWYocz1zfHxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbil8fHt2YWx1ZTp0W25dLGVudW1lcmFibGU6ITB9LHMudmFsdWUhPT12b2lkIDApe2xldCBsPWUuY29tcGFjdCE9PSEwfHxvIT09dXI/MjozO2UuaW5kZW50YXRpb25MdmwrPWwsYT1TZShlLHMudmFsdWUsciksbD09PTMmJmUuYnJlYWtMZW5ndGg8TVIoYSxlLmNvbG9ycykmJihSPWBcbiR7XCIgXCIucmVwZWF0KGUuaW5kZW50YXRpb25MdmwpfWApLGUuaW5kZW50YXRpb25MdmwtPWx9ZWxzZSBpZihzLmdldCE9PXZvaWQgMCl7bGV0IGw9cy5zZXQhPT12b2lkIDA/XCJHZXR0ZXIvU2V0dGVyXCI6XCJHZXR0ZXJcIixFPWUuc3R5bGl6ZSx1PVwic3BlY2lhbFwiO2lmKGUuZ2V0dGVycyYmKGUuZ2V0dGVycz09PSEwfHxlLmdldHRlcnM9PT1cImdldFwiJiZzLnNldD09PXZvaWQgMHx8ZS5nZXR0ZXJzPT09XCJzZXRcIiYmcy5zZXQhPT12b2lkIDApKXRyeXtsZXQgZj1zLmdldC5jYWxsKGkpO2lmKGUuaW5kZW50YXRpb25MdmwrPTIsZj09PW51bGwpYT1gJHtFKGBbJHtsfTpgLHUpfSAke0UoXCJudWxsXCIsXCJudWxsXCIpfSR7RShcIl1cIix1KX1gO2Vsc2UgaWYodHlwZW9mIGY9PVwib2JqZWN0XCIpYT1gJHtFKGBbJHtsfV1gLHUpfSAke1NlKGUsZixyKX1gO2Vsc2V7bGV0IEE9WHMoRSxmLGUpO2E9YCR7RShgWyR7bH06YCx1KX0gJHtBfSR7RShcIl1cIix1KX1gfWUuaW5kZW50YXRpb25MdmwtPTJ9Y2F0Y2goZil7bGV0IEE9YDxJbnNwZWN0aW9uIHRocmV3ICgke2YubWVzc2FnZX0pPmA7YT1gJHtFKGBbJHtsfTpgLHUpfSAke0F9JHtFKFwiXVwiLHUpfWB9ZWxzZSBhPWUuc3R5bGl6ZShgWyR7bH1dYCx1KX1lbHNlIHMuc2V0IT09dm9pZCAwP2E9ZS5zdHlsaXplKFwiW1NldHRlcl1cIixcInNwZWNpYWxcIik6YT1lLnN0eWxpemUoXCJ1bmRlZmluZWRcIixcInVuZGVmaW5lZFwiKTtpZihvPT09anMpcmV0dXJuIGE7aWYodHlwZW9mIG49PVwic3ltYm9sXCIpe2xldCBsPW4udG9TdHJpbmcoKS5yZXBsYWNlKCRzLHZzKTtjPWBbJHtlLnN0eWxpemUobCxcInN5bWJvbFwiKX1dYH1lbHNlIG49PT1cIl9fcHJvdG9fX1wiP2M9XCJbJ19fcHJvdG9fXyddXCI6cy5lbnVtZXJhYmxlPT09ITE/Yz1gWyR7bi5yZXBsYWNlKCRzLHZzKX1dYDp1cC50ZXN0KG4pP2M9ZS5zdHlsaXplKG4sXCJuYW1lXCIpOmM9ZS5zdHlsaXplKFlzKG4pLFwic3RyaW5nXCIpO3JldHVybmAke2N9OiR7Un0ke2F9YH1mdW5jdGlvbiBQcChlKXtyZXR1cm4gZS5yZXBsYWNlKHdwLFwiXCIpfWZ1bmN0aW9uIG1SKGUsdCxyLG4pe2xldCBvPXQubGVuZ3RoK3I7aWYobyt0Lmxlbmd0aD5lLmJyZWFrTGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKWlmKGUuY29sb3JzP28rPVBwKHRbc10pLmxlbmd0aDpvKz10W3NdLmxlbmd0aCxvPmUuYnJlYWtMZW5ndGgpcmV0dXJuITE7cmV0dXJuIG49PT1cIlwifHwhbi5pbmNsdWRlcyhgXG5gKX1mdW5jdGlvbiBMUihlLHQpe3JldHVybiBlKGAke3R9bmAsXCJiaWdpbnRcIil9ZnVuY3Rpb24gVXAoZSx0LHIsbil7bGV0IG89bmV3IEFycmF5KGUubGVuZ3RoKTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyl0cnl7b1tzXT1fcih0LHIsbixlW3NdLHVyKX1jYXRjaHtsZXQgYz17W2Vbc11dOlwiXCJ9O29bc109X3IodCxjLG4sZVtzXSx1cik7bGV0IGE9b1tzXS5sYXN0SW5kZXhPZihcIiBcIik7b1tzXT1vW3NdLnNsaWNlKDAsYSsxKSt0LnN0eWxpemUoXCI8dW5pbml0aWFsaXplZD5cIixcInNwZWNpYWxcIil9cmV0dXJuIGUubGVuZ3RoPTAsb31mdW5jdGlvbiBNcChlLHQscixuLG8scyl7bGV0IGk9T2JqZWN0LmtleXModCksYz1zO2Zvcig7czxpLmxlbmd0aCYmby5sZW5ndGg8bjtzKyspe2xldCBSPWlbc10sbD0rUjtpZihsPjIqKjMyLTIpYnJlYWs7aWYoYCR7Y31gIT09Uil7aWYoIV9wLnRlc3QoUikpYnJlYWs7bGV0IEU9bC1jLHU9RT4xP1wic1wiOlwiXCIsZj1gPCR7RX0gZW1wdHkgaXRlbSR7dX0+YDtpZihvLnB1c2goZS5zdHlsaXplKGYsXCJ1bmRlZmluZWRcIikpLGM9bCxvLmxlbmd0aD09PW4pYnJlYWt9by5wdXNoKF9yKGUsdCxyLFIsanMpKSxjKyt9bGV0IGE9dC5sZW5ndGgtYztpZihvLmxlbmd0aCE9PW4pe2lmKGE+MCl7bGV0IFI9YT4xP1wic1wiOlwiXCIsbD1gPCR7YX0gZW1wdHkgaXRlbSR7Un0+YDtvLnB1c2goZS5zdHlsaXplKGwsXCJ1bmRlZmluZWRcIikpfX1lbHNlIGE+MCYmby5wdXNoKGAuLi4gJHthfSBtb3JlIGl0ZW0ke2E+MT9cInNcIjpcIlwifWApO3JldHVybiBvfWZ1bmN0aW9uIGtwKGUsdCxyLG4sbyl7bGV0IHM7SG4oZSk/cz1cIk51bWJlclwiOiRuKGUpPyhzPVwiU3RyaW5nXCIsci5zcGxpY2UoMCxlLmxlbmd0aCkpOkduKGUpP3M9XCJCb29sZWFuXCI6Vm4oZSk/cz1cIkJpZ0ludFwiOnM9XCJTeW1ib2xcIjtsZXQgaT1gWyR7c31gO3JldHVybiBzIT09biYmKG49PT1udWxsP2krPVwiIChudWxsIHByb3RvdHlwZSlcIjppKz1gICgke259KWApLGkrPWA6ICR7WHMoS3MsZS52YWx1ZU9mKCksdCl9XWAsbyE9PVwiXCImJm8hPT1uJiYoaSs9YCBbJHtvfV1gKSxyLmxlbmd0aCE9PTB8fHQuc3R5bGl6ZT09PUtzP2k6dC5zdHlsaXplKGkscy50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBCcChlLHQscil7bGV0IHM9YGNsYXNzICR7ZS5oYXNPd25Qcm9wZXJ0eShcIm5hbWVcIikmJmUubmFtZXx8XCIoYW5vbnltb3VzKVwifWA7aWYodCE9PVwiRnVuY3Rpb25cIiYmdCE9PW51bGwmJihzKz1gIFske3R9XWApLHIhPT1cIlwiJiZ0IT09ciYmKHMrPWAgWyR7cn1dYCksdCE9PW51bGwpe2xldCBpPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKS5uYW1lO2kmJihzKz1gIGV4dGVuZHMgJHtpfWApfWVsc2Ugcys9XCIgZXh0ZW5kcyBbbnVsbCBwcm90b3R5cGVdXCI7cmV0dXJuYFske3N9XWB9ZnVuY3Rpb24gd1IoZSx0LHIsbixvLHMsaSl7aWYoZS5jb21wYWN0IT09ITApe2lmKHR5cGVvZiBlLmNvbXBhY3Q9PVwibnVtYmVyXCImJmUuY29tcGFjdD49MSl7bGV0IGw9dC5sZW5ndGg7aWYobz09PXRvJiZsPjYmJih0PUZwKGUsdCxpKSksZS5jdXJyZW50RGVwdGgtczxlLmNvbXBhY3QmJmw9PT10Lmxlbmd0aCl7bGV0IEU9dC5sZW5ndGgrZS5pbmRlbnRhdGlvbkx2bCtuWzBdLmxlbmd0aCtyLmxlbmd0aCsxMDtpZihtUihlLHQsRSxyKSlyZXR1cm5gJHtyP2Ake3J9IGA6XCJcIn0ke25bMF19ICR7ZW8odCxcIiwgXCIpfSAke25bMV19YH19bGV0IFI9YFxuJHtcIiBcIi5yZXBlYXQoZS5pbmRlbnRhdGlvbkx2bCl9YDtyZXR1cm5gJHtyP2Ake3J9IGA6XCJcIn0ke25bMF19JHtSfSAgJHtlbyh0LGAsJHtSfSAgYCl9JHtSfSR7blsxXX1gfWlmKG1SKGUsdCwwLHIpKXJldHVybmAke25bMF19JHtyP2AgJHtyfWA6XCJcIn0gJHtlbyh0LFwiLCBcIil9IGArblsxXTtsZXQgYz1cIiBcIi5yZXBlYXQoZS5pbmRlbnRhdGlvbkx2bCksYT1yPT09XCJcIiYmblswXS5sZW5ndGg9PT0xP1wiIFwiOmAke3I/YCAke3J9YDpcIlwifVxuJHtjfSAgYDtyZXR1cm5gJHtuWzBdfSR7YX0ke2VvKHQsYCxcbiR7Y30gIGApfSAke25bMV19YH1mdW5jdGlvbiBlbyhlLHQpe2xldCByPVwiXCI7aWYoZS5sZW5ndGghPT0wKXtsZXQgbj1lLmxlbmd0aC0xO2ZvcihsZXQgbz0wO288bjtvKyspcis9ZVtvXSxyKz10O3IrPWVbbl19cmV0dXJuIHJ9ZnVuY3Rpb24gRnAoZSx0LHIpe2xldCBuPTAsbz0wLHM9MCxpPXQubGVuZ3RoO2UubWF4QXJyYXlMZW5ndGg8dC5sZW5ndGgmJmktLTtsZXQgYz0yLGE9bmV3IEFycmF5KGkpO2Zvcig7czxpO3MrKyl7bGV0IGw9TVIodFtzXSxlLmNvbG9ycyk7YVtzXT1sLG4rPWwrYyxvPGwmJihvPWwpfWxldCBSPW8rYztpZihSKjMrZS5pbmRlbnRhdGlvbkx2bDxlLmJyZWFrTGVuZ3RoJiYobi9SPjV8fG88PTYpKXtsZXQgRT1NYXRoLnNxcnQoUi1uL3QubGVuZ3RoKSx1PU1hdGgubWF4KFItMy1FLDEpLGY9TWF0aC5taW4oTWF0aC5yb3VuZChNYXRoLnNxcnQoMi41KnUqaSkvdSksTWF0aC5mbG9vcigoZS5icmVha0xlbmd0aC1lLmluZGVudGF0aW9uTHZsKS9SKSxlLmNvbXBhY3QqNCwxNSk7aWYoZjw9MSlyZXR1cm4gdDtsZXQgQT1bXSxTPVtdO2ZvcihsZXQgZz0wO2c8ZjtnKyspe2xldCBoPTA7Zm9yKGxldCBPPWc7Tzx0Lmxlbmd0aDtPKz1mKWFbT10+aCYmKGg9YVtPXSk7aCs9YyxTW2ddPWh9bGV0IEI9U3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydDtpZihyIT09dm9pZCAwKXtmb3IobGV0IGc9MDtnPHQubGVuZ3RoO2crKylpZih0eXBlb2YgcltnXSE9XCJudW1iZXJcIiYmdHlwZW9mIHJbZ10hPVwiYmlnaW50XCIpe0I9U3RyaW5nLnByb3RvdHlwZS5wYWRFbmQ7YnJlYWt9fWZvcihsZXQgZz0wO2c8aTtnKz1mKXtsZXQgaD1NYXRoLm1pbihnK2YsaSksTz1cIlwiLGQ9Zztmb3IoO2Q8aC0xO2QrKyl7bGV0IHg9U1tkLWddK3RbZF0ubGVuZ3RoLWFbZF07Tys9YCR7dFtkXX0sIGAucGFkU3RhcnQoeCxcIiBcIil9aWYoQj09PVN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpe2xldCB4PVNbZC1nXSt0W2RdLmxlbmd0aC1hW2RdLWM7Tys9dFtkXS5wYWRTdGFydCh4LFwiIFwiKX1lbHNlIE8rPXRbZF07QXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChBLE8pfWUubWF4QXJyYXlMZW5ndGg8dC5sZW5ndGgmJkFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoQSx0W2ldKSx0PUF9cmV0dXJuIHR9ZnVuY3Rpb24gUFIoZSx0LHIsbil7bGV0IG89TWF0aC5tYXgoZS5tYXhBcnJheUxlbmd0aCwwKSxzPXIubGVuZ3RoLzIsaT1zLW8sYz1NYXRoLm1pbihvLHMpLGE9bmV3IEFycmF5KGMpLFI9MDtpZihlLmluZGVudGF0aW9uTHZsKz0yLG49PT1ybyl7Zm9yKDtSPGM7UisrKXtsZXQgbD1SKjI7YVtSXT1gJHtTZShlLHJbbF0sdCl9ID0+ICR7U2UoZSxyW2wrMV0sdCl9YH1lLnNvcnRlZHx8KGE9YS5zb3J0KCkpfWVsc2UgZm9yKDtSPGM7UisrKXtsZXQgbD1SKjIsRT1bU2UoZSxyW2xdLHQpLFNlKGUscltsKzFdLHQpXTthW1JdPXdSKGUsRSxcIlwiLFtcIltcIixcIl1cIl0sdG8sdCl9cmV0dXJuIGUuaW5kZW50YXRpb25MdmwtPTIsaT4wJiZhLnB1c2goYC4uLiAke2l9IG1vcmUgaXRlbSR7aT4xP1wic1wiOlwiXCJ9YCksYX1mdW5jdGlvbiBVUihlLHQscixuKXtsZXQgbz1NYXRoLm1heChlLm1heEFycmF5TGVuZ3RoLDApLHM9TWF0aC5taW4obyxyLmxlbmd0aCksaT1uZXcgQXJyYXkocyk7ZS5pbmRlbnRhdGlvbkx2bCs9Mjtmb3IobGV0IGE9MDthPHM7YSsrKWlbYV09U2UoZSxyW2FdLHQpO2UuaW5kZW50YXRpb25MdmwtPTIsbj09PXJvJiYhZS5zb3J0ZWQmJmkuc29ydCgpO2xldCBjPXIubGVuZ3RoLXM7cmV0dXJuIGM+MCYmQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChpLGAuLi4gJHtjfSBtb3JlIGl0ZW0ke2M+MT9cInNcIjpcIlwifWApLGl9ZnVuY3Rpb24gTVIoZSx0PSEwKXtsZXQgcj0wO3QmJihlPWtSKGUpKSxlPWUubm9ybWFsaXplKFwiTkZDXCIpO2ZvcihsZXQgbiBvZiBlW1N5bWJvbC5pdGVyYXRvcl0oKSl7bGV0IG89bi5jb2RlUG9pbnRBdCgwKTtHcChvKT9yKz0yOkhwKG8pfHxyKyt9cmV0dXJuIHJ9ZnVuY3Rpb24ga1IoZSl7cmV0dXJuIEVyKGUsXCJzdHJcIiksZS5yZXBsYWNlKFZwLFwiXCIpfXZhciB1cixqcyx0byxvcCxybyxzcCxpcCxjcCxhcCxIcyxEUixScCwkcyxscCxFcCx1cCxfcCxmcCxwcCxkcCxPZSx5UixSZSxsZSx2cyxiUixEcCx3cCxXcCxWcCxHcCxIcCxmcj1wKCgpPT57cWUoKTt5ZSgpO1Z0KCk7Wm4oKTt1cj0wLGpzPTEsdG89MixvcD0xNixybz0wLHNwPTEsaXA9MixjcD0wLGFwPTIsSHM9W1wiXFxcXHgwMFwiLFwiXFxcXHgwMVwiLFwiXFxcXHgwMlwiLFwiXFxcXHgwM1wiLFwiXFxcXHgwNFwiLFwiXFxcXHgwNVwiLFwiXFxcXHgwNlwiLFwiXFxcXHgwN1wiLFwiXFxcXGJcIixcIlxcXFx0XCIsXCJcXFxcblwiLFwiXFxcXHgwQlwiLFwiXFxcXGZcIixcIlxcXFxyXCIsXCJcXFxceDBFXCIsXCJcXFxceDBGXCIsXCJcXFxceDEwXCIsXCJcXFxceDExXCIsXCJcXFxceDEyXCIsXCJcXFxceDEzXCIsXCJcXFxceDE0XCIsXCJcXFxceDE1XCIsXCJcXFxceDE2XCIsXCJcXFxceDE3XCIsXCJcXFxceDE4XCIsXCJcXFxceDE5XCIsXCJcXFxceDFBXCIsXCJcXFxceDFCXCIsXCJcXFxceDFDXCIsXCJcXFxceDFEXCIsXCJcXFxceDFFXCIsXCJcXFxceDFGXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlxcXFwnXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlxcXFxcXFxcXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlwiLFwiXCIsXCJcIixcIlxcXFx4N0ZcIixcIlxcXFx4ODBcIixcIlxcXFx4ODFcIixcIlxcXFx4ODJcIixcIlxcXFx4ODNcIixcIlxcXFx4ODRcIixcIlxcXFx4ODVcIixcIlxcXFx4ODZcIixcIlxcXFx4ODdcIixcIlxcXFx4ODhcIixcIlxcXFx4ODlcIixcIlxcXFx4OEFcIixcIlxcXFx4OEJcIixcIlxcXFx4OENcIixcIlxcXFx4OERcIixcIlxcXFx4OEVcIixcIlxcXFx4OEZcIixcIlxcXFx4OTBcIixcIlxcXFx4OTFcIixcIlxcXFx4OTJcIixcIlxcXFx4OTNcIixcIlxcXFx4OTRcIixcIlxcXFx4OTVcIixcIlxcXFx4OTZcIixcIlxcXFx4OTdcIixcIlxcXFx4OThcIixcIlxcXFx4OTlcIixcIlxcXFx4OUFcIixcIlxcXFx4OUJcIixcIlxcXFx4OUNcIixcIlxcXFx4OURcIixcIlxcXFx4OUVcIixcIlxcXFx4OUZcIl0sRFI9ZT0+dHlwZW9mIGU+XCJ1XCImJmUhPT12b2lkIDAsUnA9L1tcXHgwMC1cXHgxZlxceDI3XFx4NWNcXHg3Zi1cXHg5Zl0vLCRzPS9bXFx4MDAtXFx4MWZcXHgyN1xceDVjXFx4N2YtXFx4OWZdL2csbHA9L1tcXHgwMC1cXHgxZlxceDVjXFx4N2YtXFx4OWZdLyxFcD0vW1xceDAwLVxceDFmXFx4NWNcXHg3Zi1cXHg5Zl0vZyx1cD0vXlthLXpBLVpfXVthLXpBLVpfMC05XSokLyxfcD0vXigwfFsxLTldWzAtOV0qKSQvLGZwPS9bL1xcXFxdbm9kZV9tb2R1bGVzWy9cXFxcXSguKz8pKD89Wy9cXFxcXSkvZyxwcD0vXihcXHMrW14oXSo/KVxccyp7LyxkcD0vKFxcL1xcLy4qP1xcbil8KFxcL1xcKigufFxcbikqP1xcKlxcLykvZyxPZT17c2hvd0hpZGRlbjohMSxkZXB0aDoyLGNvbG9yczohMSxjdXN0b21JbnNwZWN0OiEwLHNob3dQcm94eTohMSxtYXhBcnJheUxlbmd0aDoxMDAsbWF4U3RyaW5nTGVuZ3RoOjFlNCxicmVha0xlbmd0aDo4MCxjb21wYWN0OjMsc29ydGVkOiExLGdldHRlcnM6ITF9O3lSPVN5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKTtLLmN1c3RvbT15UjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSyxcImRlZmF1bHRPcHRpb25zXCIse2dldCgpe3JldHVybiBPZX0sc2V0KGUpe3JldHVybiBCZShlLFwib3B0aW9uc1wiKSxPYmplY3QuYXNzaWduKE9lLGUpfX0pO1JlPTM5LGxlPTQ5O0suY29sb3JzPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx7cmVzZXQ6WzAsMF0sYm9sZDpbMSwyMl0sZGltOlsyLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0sYmxpbms6WzUsMjVdLGludmVyc2U6WzcsMjddLGhpZGRlbjpbOCwyOF0sc3RyaWtldGhyb3VnaDpbOSwyOV0sZG91YmxldW5kZXJsaW5lOlsyMSwyNF0sYmxhY2s6WzMwLFJlXSxyZWQ6WzMxLFJlXSxncmVlbjpbMzIsUmVdLHllbGxvdzpbMzMsUmVdLGJsdWU6WzM0LFJlXSxtYWdlbnRhOlszNSxSZV0sY3lhbjpbMzYsUmVdLHdoaXRlOlszNyxSZV0sYmdCbGFjazpbNDAsbGVdLGJnUmVkOls0MSxsZV0sYmdHcmVlbjpbNDIsbGVdLGJnWWVsbG93Ols0MyxsZV0sYmdCbHVlOls0NCxsZV0sYmdNYWdlbnRhOls0NSxsZV0sYmdDeWFuOls0NixsZV0sYmdXaGl0ZTpbNDcsbGVdLGZyYW1lZDpbNTEsNTRdLG92ZXJsaW5lZDpbNTMsNTVdLGdyYXk6WzkwLFJlXSxyZWRCcmlnaHQ6WzkxLFJlXSxncmVlbkJyaWdodDpbOTIsUmVdLHllbGxvd0JyaWdodDpbOTMsUmVdLGJsdWVCcmlnaHQ6Wzk0LFJlXSxtYWdlbnRhQnJpZ2h0Ols5NSxSZV0sY3lhbkJyaWdodDpbOTYsUmVdLHdoaXRlQnJpZ2h0Ols5NyxSZV0sYmdHcmF5OlsxMDAsbGVdLGJnUmVkQnJpZ2h0OlsxMDEsbGVdLGJnR3JlZW5CcmlnaHQ6WzEwMixsZV0sYmdZZWxsb3dCcmlnaHQ6WzEwMyxsZV0sYmdCbHVlQnJpZ2h0OlsxMDQsbGVdLGJnTWFnZW50YUJyaWdodDpbMTA1LGxlXSxiZ0N5YW5CcmlnaHQ6WzEwNixsZV0sYmdXaGl0ZUJyaWdodDpbMTA3LGxlXX0pO0ZlKFwiZ3JheVwiLFwiZ3JleVwiKTtGZShcImdyYXlcIixcImJsYWNrQnJpZ2h0XCIpO0ZlKFwiYmdHcmF5XCIsXCJiZ0dyZXlcIik7RmUoXCJiZ0dyYXlcIixcImJnQmxhY2tCcmlnaHRcIik7RmUoXCJkaW1cIixcImZhaW50XCIpO0ZlKFwic3RyaWtldGhyb3VnaFwiLFwiY3Jvc3NlZG91dFwiKTtGZShcInN0cmlrZXRocm91Z2hcIixcInN0cmlrZVRocm91Z2hcIik7RmUoXCJzdHJpa2V0aHJvdWdoXCIsXCJjcm9zc2VkT3V0XCIpO0ZlKFwiaGlkZGVuXCIsXCJjb25jZWFsXCIpO0ZlKFwiaW52ZXJzZVwiLFwic3dhcENvbG9yc1wiKTtGZShcImludmVyc2VcIixcInN3YXBjb2xvcnNcIik7RmUoXCJkb3VibGV1bmRlcmxpbmVcIixcImRvdWJsZVVuZGVybGluZVwiKTtLLnN0eWxlcz1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCkse3NwZWNpYWw6XCJjeWFuXCIsbnVtYmVyOlwieWVsbG93XCIsYmlnaW50OlwieWVsbG93XCIsYm9vbGVhbjpcInllbGxvd1wiLHVuZGVmaW5lZDpcImdyZXlcIixudWxsOlwiYm9sZFwiLHN0cmluZzpcImdyZWVuXCIsc3ltYm9sOlwiZ3JlZW5cIixkYXRlOlwibWFnZW50YVwiLHJlZ2V4cDpcInJlZFwiLG1vZHVsZTpcInVuZGVybGluZVwifSk7dnM9ZT0+SHNbZS5jaGFyQ29kZUF0KDApXTtiUj1uZXcgU2V0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGdsb2JhbFRoaXMpLmZpbHRlcihlPT4vXltBLVpdW2EtekEtWjAtOV0rJC8udGVzdChlKSkpO3dwPS9cXHUwMDFiXFxbXFxkXFxkP20vZztXcD1cIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyl8KD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSlcIixWcD1uZXcgUmVnRXhwKFdwLFwiZ1wiKTtHcD1lPT5lPj00MzUyJiYoZTw9NDQ0N3x8ZT09PTkwMDF8fGU9PT05MDAyfHxlPj0xMTkwNCYmZTw9MTI4NzEmJmUhPT0xMjM1MXx8ZT49MTI4ODAmJmU8PTE5OTAzfHxlPj0xOTk2OCYmZTw9NDIxODJ8fGU+PTQzMzYwJiZlPD00MzM4OHx8ZT49NDQwMzImJmU8PTU1MjAzfHxlPj02Mzc0NCYmZTw9NjQyNTV8fGU+PTY1MDQwJiZlPD02NTA0OXx8ZT49NjUwNzImJmU8PTY1MTMxfHxlPj02NTI4MSYmZTw9NjUzNzZ8fGU+PTY1NTA0JiZlPD02NTUxMHx8ZT49MTEwNTkyJiZlPD0xMTA1OTN8fGU+PTEyNzQ4OCYmZTw9MTI3NTY5fHxlPj0xMjc3NDQmJmU8PTEyODU5MXx8ZT49MTMxMDcyJiZlPD0yNjIxNDEpLEhwPWU9PmU8PTMxfHxlPj0xMjcmJmU8PTE1OXx8ZT49NzY4JiZlPD04Nzl8fGU+PTgyMDMmJmU8PTgyMDd8fGU+PTg0MDAmJmU8PTg0NDd8fGU+PTY1MDI0JiZlPD02NTAzOXx8ZT49NjUwNTYmJmU8PTY1MDcxfHxlPj05MTc3NjAmJmU8PTkxNzk5OX0pO2Z1bmN0aW9uIHByKGUpe2xldCB0PSExO3JldHVybiBmdW5jdGlvbiguLi5yKXt0fHwodD0hMCxSZWZsZWN0LmFwcGx5KGUsdGhpcyxyKSl9fWZ1bmN0aW9uIFFzKCl7bGV0IGUsdDtyZXR1cm57cHJvbWlzZTpuZXcgUHJvbWlzZSgobixvKT0+e2U9bix0PW99KSxyZXNvbHZlOmUscmVqZWN0OnR9fWZ1bmN0aW9uIG5vKGUpe2lmKEh0KGUsXCJvcmlnaW5hbFwiKSxlW0tyXSl7bGV0IG49ZVtLcl07cmV0dXJuIEh0KG4sXCJ1dGlsLnByb21pc2lmeS5jdXN0b21cIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sS3Ise3ZhbHVlOm4sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KX1sZXQgdD1lW3ZwXTtmdW5jdGlvbiByKC4uLm4pe3JldHVybiBuZXcgUHJvbWlzZSgobyxzKT0+e24ucHVzaCgoaSwuLi5jKT0+e2lmKGkpcmV0dXJuIHMoaSk7aWYodCE9PXZvaWQgMCYmYy5sZW5ndGg+MSl7bGV0IGE9e307Zm9yKGxldCBSPTA7Ujx0Lmxlbmd0aDtSKyspYVt0W1JdXT1jW1JdO28oYSl9ZWxzZSBvKGNbMF0pfSksUmVmbGVjdC5hcHBseShlLHRoaXMsbil9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixLcix7dmFsdWU6cixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZSkpfXZhciB0VCwkcCxLcix2cCxEdD1wKCgpPT57eWUoKTtGcygpO3RUPVN5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKSwkcD1PYmplY3QuY3JlYXRlKG51bGwpOyRwLmVudW1lcmFibGU9ITA7S3I9U3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLnByb21pc2lmeS5jdXN0b21cIiksdnA9U3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLnByb21pc2lmeS5jdXN0b21BcmdzXCIpO25vLmN1c3RvbT1Lcn0pO3ZhciBBZSxxcz1wKCgpPT57RGVubz8uY29yZT9BZT1EZW5vLmNvcmU6QWU9e3NldE5leHRUaWNrQ2FsbGJhY2s6dm9pZCAwLGV2YWxDb250ZXh0KGUsdCl7dGhyb3cgbmV3IEVycm9yKFwiRGVuby5jb3JlLmV2YWxDb250ZXh0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudFwiKX0sZW5jb2RlKGUpe3JldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZSl9LGV2ZW50TG9vcEhhc01vcmVXb3JrKCl7cmV0dXJuITF9fX0pO3ZhciBvbyxacz1wKCgpPT57b289ITF9KTt2YXIgc28saW8sQlI9cCgoKT0+e3NvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ib3R0b209MCx0aGlzLnRvcD0wLHRoaXMubGlzdD1uZXcgQXJyYXkoMjA0OCksdGhpcy5uZXh0PW51bGx9aXNFbXB0eSgpe3JldHVybiB0aGlzLnRvcD09PXRoaXMuYm90dG9tfWlzRnVsbCgpe3JldHVybih0aGlzLnRvcCsxJjIwNDcpPT09dGhpcy5ib3R0b219cHVzaCh0KXt0aGlzLmxpc3RbdGhpcy50b3BdPXQsdGhpcy50b3A9dGhpcy50b3ArMSYyMDQ3fXNoaWZ0KCl7bGV0IHQ9dGhpcy5saXN0W3RoaXMuYm90dG9tXTtyZXR1cm4gdD09PXZvaWQgMD9udWxsOih0aGlzLmxpc3RbdGhpcy5ib3R0b21dPXZvaWQgMCx0aGlzLmJvdHRvbT10aGlzLmJvdHRvbSsxJjIwNDcsdCl9fSxpbz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bmV3IHNvfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5oZWFkLmlzRW1wdHkoKX1wdXNoKHQpe3RoaXMuaGVhZC5pc0Z1bGwoKSYmKHRoaXMuaGVhZD10aGlzLmhlYWQubmV4dD1uZXcgc28pLHRoaXMuaGVhZC5wdXNoKHQpfXNoaWZ0KCl7bGV0IHQ9dGhpcy50YWlsLHI9dC5zaGlmdCgpO3JldHVybiB0LmlzRW1wdHkoKSYmdC5uZXh0IT09bnVsbCYmKHRoaXMudGFpbD10Lm5leHQpLHJ9fX0pO2Z1bmN0aW9uIGFvKCl7bGV0IGU7ZG97Zm9yKDtlPWNvLnNoaWZ0KCk7KXRyeXtsZXQgdD1lLmNhbGxiYWNrO2lmKGUuYXJncz09PXZvaWQgMCl0KCk7ZWxzZXtsZXQgcj1lLmFyZ3M7c3dpdGNoKHIubGVuZ3RoKXtjYXNlIDE6dChyWzBdKTticmVhaztjYXNlIDI6dChyWzBdLHJbMV0pO2JyZWFrO2Nhc2UgMzp0KHJbMF0sclsxXSxyWzJdKTticmVhaztjYXNlIDQ6dChyWzBdLHJbMV0sclsyXSxyWzNdKTticmVhaztkZWZhdWx0OnQoLi4ucil9fX1maW5hbGx5e31BZS5ydW5NaWNyb3Rhc2tzKCl9d2hpbGUoIWNvLmlzRW1wdHkoKSk7QWUuc2V0SGFzVGlja1NjaGVkdWxlZCghMSl9ZnVuY3Rpb24gYmUoZSwuLi50KXtKcyhlLC4uLnQpfXZhciBjbyxKcyxqcj1wKCgpPT57cXMoKTt5ZSgpO1pzKCk7QlIoKTtjbz1uZXcgaW87aWYodHlwZW9mIEFlLnNldE5leHRUaWNrQ2FsbGJhY2s8XCJ1XCIpe2xldCBlPWZ1bmN0aW9uKCl7cmV0dXJuIEFlLmhhc1RpY2tTY2hlZHVsZWQoKXx8QWUucnVuTWljcm90YXNrcygpLEFlLmhhc1RpY2tTY2hlZHVsZWQoKSYmYW8oKSwhMH0sdD1mdW5jdGlvbihyLC4uLm4pe2lmKEV0KHIpLG9vKXJldHVybjtsZXQgbztzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6bz1bblswXV07YnJlYWs7Y2FzZSAyOm89W25bMF0sblsxXV07YnJlYWs7Y2FzZSAzOm89W25bMF0sblsxXSxuWzJdXTticmVhaztkZWZhdWx0Om89bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylvW2ldPW5baV19Y28uaXNFbXB0eSgpJiZBZS5zZXRIYXNUaWNrU2NoZWR1bGVkKCEwKTtsZXQgcz17Y2FsbGJhY2s6cixhcmdzOm99O2NvLnB1c2gocyl9O0FlLnNldE5leHRUaWNrQ2FsbGJhY2soYW8pLEFlLnNldE1hY3JvdGFza0NhbGxiYWNrKGUpLEpzPXR9ZWxzZSBKcz1mdW5jdGlvbih0LC4uLnIpe3F1ZXVlTWljcm90YXNrKHI/KCk9PnQuY2FsbCh0aGlzLC4uLnIpOnQpfX0pO3ZhciBGUj1wKCgpPT57anIoKX0pO2Z1bmN0aW9uIFZSKGUsLi4udCl7cmV0dXJuIG5ldyB0aShlLC4uLnQpLmRvUHJpbnRmKCl9dmFyIFJvLFlwLEtwLGVpLFdSLHRpLEdSPXAoKCk9PntSbz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMud2lkdGg9LTE7dGhpcy5wcmVjaXNpb249LTF9fSxZcD1NYXRoLm1pbixLcD1cIlxcdUZGRkRcIixlaT02LFdSPS8oLT8pKFxcZClcXC4/KFxcZCopZShbKy1dKShcXGQrKS8sdGk9Y2xhc3N7Y29uc3RydWN0b3IodCwuLi5yKXt0aGlzLnN0YXRlPTA7dGhpcy52ZXJiPVwiXCI7dGhpcy5idWY9XCJcIjt0aGlzLmFyZ051bT0wO3RoaXMuZmxhZ3M9bmV3IFJvO3RoaXMuZm9ybWF0PXQsdGhpcy5hcmdzPXIsdGhpcy5oYXZlU2Vlbj1BcnJheS5mcm9tKHtsZW5ndGg6ci5sZW5ndGh9KSx0aGlzLmk9MH1kb1ByaW50Zigpe2Zvcig7dGhpcy5pPHRoaXMuZm9ybWF0Lmxlbmd0aDsrK3RoaXMuaSl7bGV0IG49dGhpcy5mb3JtYXRbdGhpcy5pXTtzd2l0Y2godGhpcy5zdGF0ZSl7Y2FzZSAwOm49PT1cIiVcIj90aGlzLnN0YXRlPTE6dGhpcy5idWYrPW47YnJlYWs7Y2FzZSAxOm49PT1cIiVcIj8odGhpcy5idWYrPW4sdGhpcy5zdGF0ZT0wKTp0aGlzLmhhbmRsZUZvcm1hdCgpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoXCJTaG91bGQgYmUgdW5yZWFjaGFibGUsIGNlcnRhaW5seSBhIGJ1ZyBpbiB0aGUgbGliLlwiKX19bGV0IHQ9ITEscj1cIiUhKEVYVFJBXCI7Zm9yKGxldCBuPTA7biE9PXRoaXMuaGF2ZVNlZW4ubGVuZ3RoOysrbil0aGlzLmhhdmVTZWVuW25dfHwodD0hMCxyKz1gICcke0Rlbm8uaW5zcGVjdCh0aGlzLmFyZ3Nbbl0pfSdgKTtyZXR1cm4gcis9XCIpXCIsdCYmKHRoaXMuYnVmKz1yKSx0aGlzLmJ1Zn1oYW5kbGVGb3JtYXQoKXt0aGlzLmZsYWdzPW5ldyBSbztsZXQgdD10aGlzLmZsYWdzO2Zvcig7dGhpcy5pPHRoaXMuZm9ybWF0Lmxlbmd0aDsrK3RoaXMuaSl7bGV0IHI9dGhpcy5mb3JtYXRbdGhpcy5pXTtzd2l0Y2godGhpcy5zdGF0ZSl7Y2FzZSAxOnN3aXRjaChyKXtjYXNlXCJbXCI6dGhpcy5oYW5kbGVQb3NpdGlvbmFsKCksdGhpcy5zdGF0ZT0yO2JyZWFrO2Nhc2VcIitcIjp0LnBsdXM9ITA7YnJlYWs7Y2FzZVwiPFwiOnQubGVzc3RoYW49ITA7YnJlYWs7Y2FzZVwiLVwiOnQuZGFzaD0hMCx0Lnplcm89ITE7YnJlYWs7Y2FzZVwiI1wiOnQuc2hhcnA9ITA7YnJlYWs7Y2FzZVwiIFwiOnQuc3BhY2U9ITA7YnJlYWs7Y2FzZVwiMFwiOnQuemVybz0hdC5kYXNoO2JyZWFrO2RlZmF1bHQ6aWYoXCIxXCI8PXImJnI8PVwiOVwifHxyPT09XCIuXCJ8fHI9PT1cIipcIilyPT09XCIuXCI/KHRoaXMuZmxhZ3MucHJlY2lzaW9uPTAsdGhpcy5zdGF0ZT0zLHRoaXMuaSsrKTp0aGlzLnN0YXRlPTQsdGhpcy5oYW5kbGVXaWR0aEFuZFByZWNpc2lvbih0KTtlbHNle3RoaXMuaGFuZGxlVmVyYigpO3JldHVybn19YnJlYWs7Y2FzZSAyOmlmKHI9PT1cIipcIil7bGV0IG49dGhpcy5mbGFncy5wcmVjaXNpb249PT0tMT8wOjE7dGhpcy5oYW5kbGVXaWR0aE9yUHJlY2lzaW9uUmVmKG4pLHRoaXMuc3RhdGU9MTticmVha31lbHNle3RoaXMuaGFuZGxlVmVyYigpO3JldHVybn1kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgU2hvdWxkIG5vdCBiZSBoZXJlICR7dGhpcy5zdGF0ZX0sIGxpYnJhcnkgYnVnIWApfX19aGFuZGxlV2lkdGhPclByZWNpc2lvblJlZih0KXtpZih0aGlzLmFyZ051bT49dGhpcy5hcmdzLmxlbmd0aClyZXR1cm47bGV0IHI9dGhpcy5hcmdzW3RoaXMuYXJnTnVtXTtpZih0aGlzLmhhdmVTZWVuW3RoaXMuYXJnTnVtXT0hMCx0eXBlb2Ygcj09XCJudW1iZXJcIilzd2l0Y2godCl7Y2FzZSAwOnRoaXMuZmxhZ3Mud2lkdGg9cjticmVhaztkZWZhdWx0OnRoaXMuZmxhZ3MucHJlY2lzaW9uPXJ9ZWxzZXtsZXQgbj10PT09MD9cIldJRFRIXCI6XCJQUkVDXCI7dGhpcy50bXBFcnJvcj1gJSEoQkFEICR7bn0gJyR7dGhpcy5hcmdzW3RoaXMuYXJnTnVtXX0nKWB9dGhpcy5hcmdOdW0rK31oYW5kbGVXaWR0aEFuZFByZWNpc2lvbih0KXtsZXQgcj10aGlzLmZvcm1hdDtmb3IoO3RoaXMuaSE9PXRoaXMuZm9ybWF0Lmxlbmd0aDsrK3RoaXMuaSl7bGV0IG49clt0aGlzLmldO3N3aXRjaCh0aGlzLnN0YXRlKXtjYXNlIDQ6c3dpdGNoKG4pe2Nhc2VcIi5cIjp0aGlzLmZsYWdzLnByZWNpc2lvbj0wLHRoaXMuc3RhdGU9MzticmVhaztjYXNlXCIqXCI6dGhpcy5oYW5kbGVXaWR0aE9yUHJlY2lzaW9uUmVmKDApO2JyZWFrO2RlZmF1bHQ6e2xldCBvPXBhcnNlSW50KG4pO2lmKGlzTmFOKG8pKXt0aGlzLmktLSx0aGlzLnN0YXRlPTE7cmV0dXJufXQud2lkdGg9dC53aWR0aD09LTE/MDp0LndpZHRoLHQud2lkdGgqPTEwLHQud2lkdGgrPW99fWJyZWFrO2Nhc2UgMzp7aWYobj09PVwiKlwiKXt0aGlzLmhhbmRsZVdpZHRoT3JQcmVjaXNpb25SZWYoMSk7YnJlYWt9bGV0IG89cGFyc2VJbnQobik7aWYoaXNOYU4obykpe3RoaXMuaS0tLHRoaXMuc3RhdGU9MTtyZXR1cm59dC5wcmVjaXNpb24qPTEwLHQucHJlY2lzaW9uKz1vO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiY2FuJ3QgYmUgaGVyZS4gYnVnLlwiKX19fWhhbmRsZVBvc2l0aW9uYWwoKXtpZih0aGlzLmZvcm1hdFt0aGlzLmldIT09XCJbXCIpdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgaGFwcGVuPyBCdWcuXCIpO2xldCB0PTAscj10aGlzLmZvcm1hdDt0aGlzLmkrKztsZXQgbj0hMTtmb3IoO3RoaXMuaSE9PXRoaXMuZm9ybWF0Lmxlbmd0aCYmclt0aGlzLmldIT09XCJdXCI7Kyt0aGlzLmkpe3QqPTEwO2xldCBvPXBhcnNlSW50KHJbdGhpcy5pXSk7aXNOYU4obykmJih0aGlzLnRtcEVycm9yPVwiJSEoQkFEIElOREVYKVwiLG49ITApLHQrPW99dC0xPj10aGlzLmFyZ3MubGVuZ3RoJiYodGhpcy50bXBFcnJvcj1cIiUhKEJBRCBJTkRFWClcIixuPSEwKSx0aGlzLmFyZ051bT1uP3RoaXMuYXJnTnVtOnQtMX1oYW5kbGVMZXNzVGhhbigpe2xldCB0PXRoaXMuYXJnc1t0aGlzLmFyZ051bV07aWYoKHR8fHt9KS5jb25zdHJ1Y3Rvci5uYW1lIT09XCJBcnJheVwiKXRocm93IG5ldyBFcnJvcihgYXJnICR7dH0gaXMgbm90IGFuIGFycmF5LiBUb2RvIGJldHRlciBlcnJvciBoYW5kbGluZ2ApO2xldCByPVwiWyBcIjtmb3IobGV0IG49MDtuIT09dC5sZW5ndGg7KytuKW4hPT0wJiYocis9XCIsIFwiKSxyKz10aGlzLl9oYW5kbGVWZXJiKHRbbl0pO3JldHVybiByK1wiIF1cIn1oYW5kbGVWZXJiKCl7bGV0IHQ9dGhpcy5mb3JtYXRbdGhpcy5pXTtpZih0aGlzLnZlcmI9dCx0aGlzLnRtcEVycm9yKXRoaXMuYnVmKz10aGlzLnRtcEVycm9yLHRoaXMudG1wRXJyb3I9dm9pZCAwLHRoaXMuYXJnTnVtPHRoaXMuaGF2ZVNlZW4ubGVuZ3RoJiYodGhpcy5oYXZlU2Vlblt0aGlzLmFyZ051bV09ITApO2Vsc2UgaWYodGhpcy5hcmdzLmxlbmd0aDw9dGhpcy5hcmdOdW0pdGhpcy5idWYrPWAlIShNSVNTSU5HICcke3R9JylgO2Vsc2V7bGV0IHI9dGhpcy5hcmdzW3RoaXMuYXJnTnVtXTt0aGlzLmhhdmVTZWVuW3RoaXMuYXJnTnVtXT0hMCx0aGlzLmZsYWdzLmxlc3N0aGFuP3RoaXMuYnVmKz10aGlzLmhhbmRsZUxlc3NUaGFuKCk6dGhpcy5idWYrPXRoaXMuX2hhbmRsZVZlcmIocil9dGhpcy5hcmdOdW0rKyx0aGlzLnN0YXRlPTB9X2hhbmRsZVZlcmIodCl7c3dpdGNoKHRoaXMudmVyYil7Y2FzZVwidFwiOnJldHVybiB0aGlzLnBhZCh0LnRvU3RyaW5nKCkpO2Nhc2VcImJcIjpyZXR1cm4gdGhpcy5mbXROdW1iZXIodCwyKTtjYXNlXCJjXCI6cmV0dXJuIHRoaXMuZm10TnVtYmVyQ29kZVBvaW50KHQpO2Nhc2VcImRcIjpyZXR1cm4gdGhpcy5mbXROdW1iZXIodCwxMCk7Y2FzZVwib1wiOnJldHVybiB0aGlzLmZtdE51bWJlcih0LDgpO2Nhc2VcInhcIjpyZXR1cm4gdGhpcy5mbXRIZXgodCk7Y2FzZVwiWFwiOnJldHVybiB0aGlzLmZtdEhleCh0LCEwKTtjYXNlXCJlXCI6cmV0dXJuIHRoaXMuZm10RmxvYXRFKHQpO2Nhc2VcIkVcIjpyZXR1cm4gdGhpcy5mbXRGbG9hdEUodCwhMCk7Y2FzZVwiZlwiOmNhc2VcIkZcIjpyZXR1cm4gdGhpcy5mbXRGbG9hdEYodCk7Y2FzZVwiZ1wiOnJldHVybiB0aGlzLmZtdEZsb2F0Ryh0KTtjYXNlXCJHXCI6cmV0dXJuIHRoaXMuZm10RmxvYXRHKHQsITApO2Nhc2VcInNcIjpyZXR1cm4gdGhpcy5mbXRTdHJpbmcodCk7Y2FzZVwiVFwiOnJldHVybiB0aGlzLmZtdFN0cmluZyh0eXBlb2YgdCk7Y2FzZVwidlwiOnJldHVybiB0aGlzLmZtdFYodCk7Y2FzZVwialwiOnJldHVybiB0aGlzLmZtdEoodCk7ZGVmYXVsdDpyZXR1cm5gJSEoQkFEIFZFUkIgJyR7dGhpcy52ZXJifScpYH19cGFkKHQpe2xldCByPXRoaXMuZmxhZ3MuemVybz9cIjBcIjpcIiBcIjtyZXR1cm4gdGhpcy5mbGFncy5kYXNoP3QucGFkRW5kKHRoaXMuZmxhZ3Mud2lkdGgscik6dC5wYWRTdGFydCh0aGlzLmZsYWdzLndpZHRoLHIpfXBhZE51bSh0LHIpe2xldCBuO3I/bj1cIi1cIjp0aGlzLmZsYWdzLnBsdXN8fHRoaXMuZmxhZ3Muc3BhY2U/bj10aGlzLmZsYWdzLnBsdXM/XCIrXCI6XCIgXCI6bj1cIlwiO2xldCBvPXRoaXMuZmxhZ3MuemVybztvfHwodD1uK3QpO2xldCBzPW8/XCIwXCI6XCIgXCIsaT1vP3RoaXMuZmxhZ3Mud2lkdGgtbi5sZW5ndGg6dGhpcy5mbGFncy53aWR0aDtyZXR1cm4gdGhpcy5mbGFncy5kYXNoP3Q9dC5wYWRFbmQoaSxzKTp0PXQucGFkU3RhcnQoaSxzKSxvJiYodD1uK3QpLHR9Zm10TnVtYmVyKHQscixuPSExKXtsZXQgbz1NYXRoLmFicyh0KS50b1N0cmluZyhyKSxzPXRoaXMuZmxhZ3MucHJlY2lzaW9uO2lmKHMhPT0tMSlmb3IodGhpcy5mbGFncy56ZXJvPSExLG89dD09PTAmJnM9PT0wP1wiXCI6bztvLmxlbmd0aDxzOylvPVwiMFwiK287bGV0IGk9XCJcIjtpZih0aGlzLmZsYWdzLnNoYXJwKXN3aXRjaChyKXtjYXNlIDI6aSs9XCIwYlwiO2JyZWFrO2Nhc2UgODppKz1vLnN0YXJ0c1dpdGgoXCIwXCIpP1wiXCI6XCIwXCI7YnJlYWs7Y2FzZSAxNjppKz1cIjB4XCI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgaGFuZGxlIGJhc2U6IFwiK3IpfXJldHVybiBvPW8ubGVuZ3RoPT09MD9vOmkrbyxuJiYobz1vLnRvVXBwZXJDYXNlKCkpLHRoaXMucGFkTnVtKG8sdDwwKX1mbXROdW1iZXJDb2RlUG9pbnQodCl7bGV0IHI9XCJcIjt0cnl7cj1TdHJpbmcuZnJvbUNvZGVQb2ludCh0KX1jYXRjaHtyPUtwfXJldHVybiB0aGlzLnBhZChyKX1mbXRGbG9hdFNwZWNpYWwodCl7cmV0dXJuIGlzTmFOKHQpPyh0aGlzLmZsYWdzLnplcm89ITEsdGhpcy5wYWROdW0oXCJOYU5cIiwhMSkpOnQ9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk/KHRoaXMuZmxhZ3MuemVybz0hMSx0aGlzLmZsYWdzLnBsdXM9ITAsdGhpcy5wYWROdW0oXCJJbmZcIiwhMSkpOnQ9PT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk/KHRoaXMuZmxhZ3MuemVybz0hMSx0aGlzLnBhZE51bShcIkluZlwiLCEwKSk6XCJcIn1yb3VuZEZyYWN0aW9uVG9QcmVjaXNpb24odCxyKXtsZXQgbj0hMTtpZih0Lmxlbmd0aD5yKXt0PVwiMVwiK3Q7bGV0IG89cGFyc2VJbnQodC5zdWJzdHIoMCxyKzIpKS8xMDtvPU1hdGgucm91bmQobyksdD1NYXRoLmZsb29yKG8pLnRvU3RyaW5nKCksbj10WzBdPT09XCIyXCIsdD10LnN1YnN0cigxKX1lbHNlIGZvcig7dC5sZW5ndGg8cjspdCs9XCIwXCI7cmV0dXJuW3Qsbl19Zm10RmxvYXRFKHQscj0hMSl7bGV0IG49dGhpcy5mbXRGbG9hdFNwZWNpYWwodCk7aWYobiE9PVwiXCIpcmV0dXJuIG47bGV0IG89dC50b0V4cG9uZW50aWFsKCkubWF0Y2goV1IpO2lmKCFvKXRocm93IEVycm9yKFwiY2FuJ3QgaGFwcGVuLCBidWdcIik7bGV0IHM9b1szXSxpPXRoaXMuZmxhZ3MucHJlY2lzaW9uIT09LTE/dGhpcy5mbGFncy5wcmVjaXNpb246ZWksYz0hMTtbcyxjXT10aGlzLnJvdW5kRnJhY3Rpb25Ub1ByZWNpc2lvbihzLGkpO2xldCBhPW9bNV0sUj1vWzRdLGw9cGFyc2VJbnQob1syXSk7aWYoYyYmKGwrPTEsMTA8PWwpKXtsPTE7bGV0IHU9cGFyc2VJbnQoUithKSsxO2E9dS50b1N0cmluZygpLFI9dTwwP1wiLVwiOlwiK1wifWE9YS5sZW5ndGg9PTE/XCIwXCIrYTphO2xldCBFPWAke2x9LiR7c30ke3I/XCJFXCI6XCJlXCJ9JHtSfSR7YX1gO3JldHVybiB0aGlzLnBhZE51bShFLHQ8MCl9Zm10RmxvYXRGKHQpe2xldCByPXRoaXMuZm10RmxvYXRTcGVjaWFsKHQpO2lmKHIhPT1cIlwiKXJldHVybiByO2Z1bmN0aW9uIG4obCl7aWYoTnVtYmVyLmlzU2FmZUludGVnZXIobCkpcmV0dXJuIGwudG9TdHJpbmcoKStcIi5cIjtsZXQgRT1sLnRvRXhwb25lbnRpYWwoKS5zcGxpdChcImVcIiksdT1FWzBdLnJlcGxhY2UoXCIuXCIsXCJcIiksZj1wYXJzZUludChFWzFdKTtpZihmPDApe2xldCBBPVwiMC5cIjtmb3IobGV0IFM9MDtTIT09TWF0aC5hYnMoZiktMTsrK1MpQSs9XCIwXCI7cmV0dXJuIEErPXV9ZWxzZXtsZXQgQT1mKzE7Zm9yKDt1Lmxlbmd0aDxBOyl1Kz1cIjBcIjtyZXR1cm4gdS5zdWJzdHIoMCxBKStcIi5cIit1LnN1YnN0cihBKX19bGV0IHM9bihNYXRoLmFicyh0KSkuc3BsaXQoXCIuXCIpLGk9c1swXSxjPXNbMV0sYT10aGlzLmZsYWdzLnByZWNpc2lvbiE9PS0xP3RoaXMuZmxhZ3MucHJlY2lzaW9uOmVpLFI9ITE7cmV0dXJuW2MsUl09dGhpcy5yb3VuZEZyYWN0aW9uVG9QcmVjaXNpb24oYyxhKSxSJiYoaT0ocGFyc2VJbnQoaSkrMSkudG9TdHJpbmcoKSksdGhpcy5wYWROdW0oYCR7aX0uJHtjfWAsdDwwKX1mbXRGbG9hdEcodCxyPSExKXtsZXQgbj10aGlzLmZtdEZsb2F0U3BlY2lhbCh0KTtpZihuIT09XCJcIilyZXR1cm4gbjtsZXQgbz10aGlzLmZsYWdzLnByZWNpc2lvbiE9PS0xP3RoaXMuZmxhZ3MucHJlY2lzaW9uOmVpO289bz09PTA/MTpvO2xldCBzPXQudG9FeHBvbmVudGlhbCgpLm1hdGNoKFdSKTtpZighcyl0aHJvdyBFcnJvcihcImNhbid0IGhhcHBlblwiKTtsZXQgaT1wYXJzZUludChzWzVdKSooc1s0XT09PVwiLVwiPy0xOjEpLGM9XCJcIjtyZXR1cm4gbz5pJiZpPj0tND8odGhpcy5mbGFncy5wcmVjaXNpb249by0oaSsxKSxjPXRoaXMuZm10RmxvYXRGKHQpLHRoaXMuZmxhZ3Muc2hhcnB8fChjPWMucmVwbGFjZSgvXFwuPzAqJC8sXCJcIikpKToodGhpcy5mbGFncy5wcmVjaXNpb249by0xLGM9dGhpcy5mbXRGbG9hdEUodCksdGhpcy5mbGFncy5zaGFycHx8KGM9Yy5yZXBsYWNlKC9cXC4/MCplLyxyP1wiRVwiOlwiZVwiKSkpLGN9Zm10U3RyaW5nKHQpe3JldHVybiB0aGlzLmZsYWdzLnByZWNpc2lvbiE9PS0xJiYodD10LnN1YnN0cigwLHRoaXMuZmxhZ3MucHJlY2lzaW9uKSksdGhpcy5wYWQodCl9Zm10SGV4KHQscj0hMSl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlXCJudW1iZXJcIjpyZXR1cm4gdGhpcy5mbXROdW1iZXIodCwxNixyKTtjYXNlXCJzdHJpbmdcIjp7bGV0IG49dGhpcy5mbGFncy5zaGFycCYmdC5sZW5ndGghPT0wLG89bj9cIjB4XCI6XCJcIixzPXRoaXMuZmxhZ3MucHJlY2lzaW9uLGk9cyE9PS0xP1lwKHMsdC5sZW5ndGgpOnQubGVuZ3RoO2ZvcihsZXQgYz0wO2MhPT1pOysrYyl7YyE9PTAmJnRoaXMuZmxhZ3Muc3BhY2UmJihvKz1uP1wiIDB4XCI6XCIgXCIpO2xldCBhPSh0LmNoYXJDb2RlQXQoYykmMjU1KS50b1N0cmluZygxNik7bys9YS5sZW5ndGg9PT0xP2AwJHthfWA6YX1yZXR1cm4gciYmKG89by50b1VwcGVyQ2FzZSgpKSx0aGlzLnBhZChvKX1kZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImN1cnJlbnRseSBvbmx5IG51bWJlciBhbmQgc3RyaW5nIGFyZSBpbXBsZW1lbnRlZCBmb3IgaGV4XCIpfX1mbXRWKHQpe2lmKHRoaXMuZmxhZ3Muc2hhcnApe2xldCByPXRoaXMuZmxhZ3MucHJlY2lzaW9uIT09LTE/e2RlcHRoOnRoaXMuZmxhZ3MucHJlY2lzaW9ufTp7fTtyZXR1cm4gdGhpcy5wYWQoRGVuby5pbnNwZWN0KHQscikpfWVsc2V7bGV0IHI9dGhpcy5mbGFncy5wcmVjaXNpb247cmV0dXJuIHI9PT0tMT90LnRvU3RyaW5nKCk6dC50b1N0cmluZygpLnN1YnN0cigwLHIpfX1mbXRKKHQpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KX19fSk7ZnVuY3Rpb24ganAoZSl7aWYoWHI9T2JqZWN0LmNyZWF0ZShudWxsKSxlKXtlPWUucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCs/Ll0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlQWxsKFwiKlwiLFwiLipcIikucmVwbGFjZUFsbChcIixcIixcIiR8XlwiKTtsZXQgdD1uZXcgUmVnRXhwKGBeJHtlfSRgLFwiaVwiKTtyaT1yPT50LmV4ZWMocikhPT1udWxsfWVsc2Ugcmk9KCk9PiExfWZ1bmN0aW9uIFhwKGUpeyhlPT09XCJIVFRQXCJ8fGU9PT1cIkhUVFAyXCIpJiZjb25zb2xlLndhcm4oXCJTZXR0aW5nIHRoZSBOT0RFX0RFQlVHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvICdcIitlLnRvTG93ZXJDYXNlKCkrXCInIGNhbiBleHBvc2Ugc2Vuc2l0aXZlIGRhdGEgKHN1Y2ggYXMgcGFzc3dvcmRzLCB0b2tlbnMgYW5kIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMpIGluIHRoZSByZXN1bHRpbmcgbG9nLlwiKX1mdW5jdGlvbiBRcChlLHQpe3JldHVybiBYclt0XT09PXZvaWQgMCYmKGU/KFhwKHQpLFhyW3RdPWZ1bmN0aW9uKC4uLm4pe2xldCBvPW4ubWFwKHM9PksocykpLmpvaW4oXCIgXCIpO2NvbnNvbGUuZXJyb3IoVlIoXCIlcyAlczogJXNcIix0LFN0cmluZyhEZW5vLnBpZCksbykpfSk6WHJbdF09enApLFhyW3RdfWZ1bmN0aW9uIG9pKGUsdCl7ZnVuY3Rpb24gcigpe2U9ZS50b1VwcGVyQ2FzZSgpLG89cmkoZSl9bGV0IG49KC4uLmMpPT4ocigpLG49UXAobyxlKSx0eXBlb2YgdD09XCJmdW5jdGlvblwiJiZ0KG4pLG4oLi4uYykpLG8scz0oKT0+KHIoKSxzPSgpPT5vLG8pLGk9KC4uLmMpPT5uKC4uLmMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxcImVuYWJsZWRcIix7Z2V0KCl7cmV0dXJuIHMoKX0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KSxpfXZhciBYcixyaSx6cCxuaSxzaT1wKCgpPT57R1IoKTtmcigpO3pwPSgpPT57fTt0cnl7bmk9RGVuby5lbnYuZ2V0KFwiTk9ERV9ERUJVR1wiKT8/XCJcIn1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuUGVybWlzc2lvbkRlbmllZCluaT1cIlwiO2Vsc2UgdGhyb3cgZX1qcChuaSl9KTt2YXIgdmUsRWUsSFIsSmU9cCgoKT0+e3ZlPSgoKT0+e2xldHtEZW5vOmV9PWdsb2JhbFRoaXM7aWYodHlwZW9mIGU/LmJ1aWxkPy5vcz09XCJzdHJpbmdcIilyZXR1cm4gZS5idWlsZC5vcztsZXR7bmF2aWdhdG9yOnR9PWdsb2JhbFRoaXM7cmV0dXJuIHQ/LmFwcFZlcnNpb24/LmluY2x1ZGVzPy4oXCJXaW5cIik/XCJ3aW5kb3dzXCI6XCJsaW51eFwifSkoKSxFZT12ZT09PVwid2luZG93c1wiLEhSPXZlPT09XCJsaW51eFwifSk7dmFyICRSPXAoKCk9Pnt9KTtmdW5jdGlvbiB2UihlKXtzd2l0Y2goZSl7Y2FzZSA1OnJldHVyblwiRUFDQ0VTXCI7Y2FzZSA5OTg6cmV0dXJuXCJFQUNDRVNcIjtjYXNlIDEwMDEzOnJldHVyblwiRUFDQ0VTXCI7Y2FzZSAxOTIwOnJldHVyblwiRUFDQ0VTXCI7Y2FzZSAxMjI3OnJldHVyblwiRUFERFJJTlVTRVwiO2Nhc2UgMTAwNDg6cmV0dXJuXCJFQUREUklOVVNFXCI7Y2FzZSAxMDA0OTpyZXR1cm5cIkVBRERSTk9UQVZBSUxcIjtjYXNlIDEwMDQ3OnJldHVyblwiRUFGTk9TVVBQT1JUXCI7Y2FzZSAxMDAzNTpyZXR1cm5cIkVBR0FJTlwiO2Nhc2UgMTAwMzc6cmV0dXJuXCJFQUxSRUFEWVwiO2Nhc2UgMTAwNDpyZXR1cm5cIkVCQURGXCI7Y2FzZSA2OnJldHVyblwiRUJBREZcIjtjYXNlIDMzOnJldHVyblwiRUJVU1lcIjtjYXNlIDIzMTpyZXR1cm5cIkVCVVNZXCI7Y2FzZSAzMjpyZXR1cm5cIkVCVVNZXCI7Y2FzZSA5OTU6cmV0dXJuXCJFQ0FOQ0VMRURcIjtjYXNlIDEwMDA0OnJldHVyblwiRUNBTkNFTEVEXCI7Y2FzZSAxMTEzOnJldHVyblwiRUNIQVJTRVRcIjtjYXNlIDEyMzY6cmV0dXJuXCJFQ09OTkFCT1JURURcIjtjYXNlIDEwMDUzOnJldHVyblwiRUNPTk5BQk9SVEVEXCI7Y2FzZSAxMjI1OnJldHVyblwiRUNPTk5SRUZVU0VEXCI7Y2FzZSAxMDA2MTpyZXR1cm5cIkVDT05OUkVGVVNFRFwiO2Nhc2UgNjQ6cmV0dXJuXCJFQ09OTlJFU0VUXCI7Y2FzZSAxMDA1NDpyZXR1cm5cIkVDT05OUkVTRVRcIjtjYXNlIDE4MzpyZXR1cm5cIkVFWElTVFwiO2Nhc2UgODA6cmV0dXJuXCJFRVhJU1RcIjtjYXNlIDExMTpyZXR1cm5cIkVGQVVMVFwiO2Nhc2UgMTAwMTQ6cmV0dXJuXCJFRkFVTFRcIjtjYXNlIDEyMzI6cmV0dXJuXCJFSE9TVFVOUkVBQ0hcIjtjYXNlIDEwMDY1OnJldHVyblwiRUhPU1RVTlJFQUNIXCI7Y2FzZSAxMjI6cmV0dXJuXCJFSU5WQUxcIjtjYXNlIDEzOnJldHVyblwiRUlOVkFMXCI7Y2FzZSAxMjM6cmV0dXJuXCJFSU5WQUxcIjtjYXNlIDg3OnJldHVyblwiRUlOVkFMXCI7Y2FzZSAxMDAyMjpyZXR1cm5cIkVJTlZBTFwiO2Nhc2UgMTAwNDY6cmV0dXJuXCJFSU5WQUxcIjtjYXNlIDExMDI6cmV0dXJuXCJFSU9cIjtjYXNlIDExMTE6cmV0dXJuXCJFSU9cIjtjYXNlIDIzOnJldHVyblwiRUlPXCI7Y2FzZSAxMTY2OnJldHVyblwiRUlPXCI7Y2FzZSAxMTY1OnJldHVyblwiRUlPXCI7Y2FzZSAxMzkzOnJldHVyblwiRUlPXCI7Y2FzZSAxMTI5OnJldHVyblwiRUlPXCI7Y2FzZSAxMTAxOnJldHVyblwiRUlPXCI7Y2FzZSAzMTpyZXR1cm5cIkVJT1wiO2Nhc2UgMTEwNjpyZXR1cm5cIkVJT1wiO2Nhc2UgMTExNzpyZXR1cm5cIkVJT1wiO2Nhc2UgMTEwNDpyZXR1cm5cIkVJT1wiO2Nhc2UgMjA1OnJldHVyblwiRUlPXCI7Y2FzZSAxMTA6cmV0dXJuXCJFSU9cIjtjYXNlIDExMDM6cmV0dXJuXCJFSU9cIjtjYXNlIDE1NjpyZXR1cm5cIkVJT1wiO2Nhc2UgMTAwNTY6cmV0dXJuXCJFSVNDT05OXCI7Y2FzZSAxOTIxOnJldHVyblwiRUxPT1BcIjtjYXNlIDQ6cmV0dXJuXCJFTUZJTEVcIjtjYXNlIDEwMDI0OnJldHVyblwiRU1GSUxFXCI7Y2FzZSAxMDA0MDpyZXR1cm5cIkVNU0dTSVpFXCI7Y2FzZSAyMDY6cmV0dXJuXCJFTkFNRVRPT0xPTkdcIjtjYXNlIDEyMzE6cmV0dXJuXCJFTkVUVU5SRUFDSFwiO2Nhc2UgMTAwNTE6cmV0dXJuXCJFTkVUVU5SRUFDSFwiO2Nhc2UgMTAwNTU6cmV0dXJuXCJFTk9CVUZTXCI7Y2FzZSAxNjE6cmV0dXJuXCJFTk9FTlRcIjtjYXNlIDI2NzpyZXR1cm5cIkVOT1RESVJcIjtjYXNlIDIwMzpyZXR1cm5cIkVOT0VOVFwiO2Nhc2UgMjpyZXR1cm5cIkVOT0VOVFwiO2Nhc2UgMTU6cmV0dXJuXCJFTk9FTlRcIjtjYXNlIDQzOTI6cmV0dXJuXCJFTk9FTlRcIjtjYXNlIDEyNjpyZXR1cm5cIkVOT0VOVFwiO2Nhc2UgMzpyZXR1cm5cIkVOT0VOVFwiO2Nhc2UgMTEwMDE6cmV0dXJuXCJFTk9FTlRcIjtjYXNlIDExMDA0OnJldHVyblwiRU5PRU5UXCI7Y2FzZSA4OnJldHVyblwiRU5PTUVNXCI7Y2FzZSAxNDpyZXR1cm5cIkVOT01FTVwiO2Nhc2UgODI6cmV0dXJuXCJFTk9TUENcIjtjYXNlIDExMjpyZXR1cm5cIkVOT1NQQ1wiO2Nhc2UgMjc3OnJldHVyblwiRU5PU1BDXCI7Y2FzZSAxMTAwOnJldHVyblwiRU5PU1BDXCI7Y2FzZSAzOTpyZXR1cm5cIkVOT1NQQ1wiO2Nhc2UgMjI1MDpyZXR1cm5cIkVOT1RDT05OXCI7Y2FzZSAxMDA1NzpyZXR1cm5cIkVOT1RDT05OXCI7Y2FzZSAxNDU6cmV0dXJuXCJFTk9URU1QVFlcIjtjYXNlIDEwMDM4OnJldHVyblwiRU5PVFNPQ0tcIjtjYXNlIDUwOnJldHVyblwiRU5PVFNVUFwiO2Nhc2UgMTA5OnJldHVyblwiRU9GXCI7Y2FzZSAxMzE0OnJldHVyblwiRVBFUk1cIjtjYXNlIDIzMDpyZXR1cm5cIkVQSVBFXCI7Y2FzZSAyMzI6cmV0dXJuXCJFUElQRVwiO2Nhc2UgMjMzOnJldHVyblwiRVBJUEVcIjtjYXNlIDEwMDU4OnJldHVyblwiRVBJUEVcIjtjYXNlIDEwMDQzOnJldHVyblwiRVBST1RPTk9TVVBQT1JUXCI7Y2FzZSAxOTpyZXR1cm5cIkVST0ZTXCI7Y2FzZSAxMjE6cmV0dXJuXCJFVElNRURPVVRcIjtjYXNlIDEwMDYwOnJldHVyblwiRVRJTUVET1VUXCI7Y2FzZSAxNzpyZXR1cm5cIkVYREVWXCI7Y2FzZSAxOnJldHVyblwiRUlTRElSXCI7Y2FzZSAyMDg6cmV0dXJuXCJFMkJJR1wiO2Nhc2UgMTAwNDQ6cmV0dXJuXCJFU09DS1ROT1NVUFBPUlRcIjtkZWZhdWx0OnJldHVyblwiVU5LTk9XTlwifX12YXIgWVI9cCgoKT0+eyRSKCl9KTt2YXIgaWk9e307cmUoaWkse2NyeXB0bzooKT0+R2gsZnM6KCk9Pnl0LG9zOigpPT5kcix0cmFjZTooKT0+JGgsemxpYjooKT0+SGh9KTt2YXIgZHIseXQsR2gsSGgsJGgsenI9cCgoKT0+e2RyPXtVVl9VRFBfSVBWNk9OTFk6MSxVVl9VRFBfUEFSVElBTDoyLFVWX1VEUF9SRVVTRUFERFI6NCxVVl9VRFBfTU1TR19DSFVOSzo4LFVWX1VEUF9NTVNHX0ZSRUU6MTYsVVZfVURQX0xJTlVYX1JFQ1ZFUlI6MzIsVVZfVURQX1JFQ1ZNTVNHOjI1NixkbG9wZW46e1JUTERfTEFaWToxLFJUTERfTk9XOjIsUlRMRF9HTE9CQUw6OCxSVExEX0xPQ0FMOjR9LGVycm5vOntFMkJJRzo3LEVBQ0NFUzoxMyxFQUREUklOVVNFOjQ4LEVBRERSTk9UQVZBSUw6NDksRUFGTk9TVVBQT1JUOjQ3LEVBR0FJTjozNSxFQUxSRUFEWTozNyxFQkFERjo5LEVCQURNU0c6OTQsRUJVU1k6MTYsRUNBTkNFTEVEOjg5LEVDSElMRDoxMCxFQ09OTkFCT1JURUQ6NTMsRUNPTk5SRUZVU0VEOjYxLEVDT05OUkVTRVQ6NTQsRURFQURMSzoxMSxFREVTVEFERFJSRVE6MzksRURPTTozMyxFRFFVT1Q6NjksRUVYSVNUOjE3LEVGQVVMVDoxNCxFRkJJRzoyNyxFSE9TVFVOUkVBQ0g6NjUsRUlEUk06OTAsRUlMU0VROjkyLEVJTlBST0dSRVNTOjM2LEVJTlRSOjQsRUlOVkFMOjIyLEVJTzo1LEVJU0NPTk46NTYsRUlTRElSOjIxLEVMT09QOjYyLEVNRklMRToyNCxFTUxJTks6MzEsRU1TR1NJWkU6NDAsRU1VTFRJSE9QOjk1LEVOQU1FVE9PTE9ORzo2MyxFTkVURE9XTjo1MCxFTkVUUkVTRVQ6NTIsRU5FVFVOUkVBQ0g6NTEsRU5GSUxFOjIzLEVOT0JVRlM6NTUsRU5PREFUQTo5NixFTk9ERVY6MTksRU5PRU5UOjIsRU5PRVhFQzo4LEVOT0xDSzo3NyxFTk9MSU5LOjk3LEVOT01FTToxMixFTk9NU0c6OTEsRU5PUFJPVE9PUFQ6NDIsRU5PU1BDOjI4LEVOT1NSOjk4LEVOT1NUUjo5OSxFTk9TWVM6NzgsRU5PVENPTk46NTcsRU5PVERJUjoyMCxFTk9URU1QVFk6NjYsRU5PVFNPQ0s6MzgsRU5PVFNVUDo0NSxFTk9UVFk6MjUsRU5YSU86NixFT1BOT1RTVVBQOjEwMixFT1ZFUkZMT1c6ODQsRVBFUk06MSxFUElQRTozMixFUFJPVE86MTAwLEVQUk9UT05PU1VQUE9SVDo0MyxFUFJPVE9UWVBFOjQxLEVSQU5HRTozNCxFUk9GUzozMCxFU1BJUEU6MjksRVNSQ0g6MyxFU1RBTEU6NzAsRVRJTUU6MTAxLEVUSU1FRE9VVDo2MCxFVFhUQlNZOjI2LEVXT1VMREJMT0NLOjM1LEVYREVWOjE4fSxzaWduYWxzOntTSUdIVVA6MSxTSUdJTlQ6MixTSUdRVUlUOjMsU0lHSUxMOjQsU0lHVFJBUDo1LFNJR0FCUlQ6NixTSUdJT1Q6NixTSUdCVVM6MTAsU0lHRlBFOjgsU0lHS0lMTDo5LFNJR1VTUjE6MzAsU0lHU0VHVjoxMSxTSUdVU1IyOjMxLFNJR1BJUEU6MTMsU0lHQUxSTToxNCxTSUdURVJNOjE1LFNJR0NITEQ6MjAsU0lHQ09OVDoxOSxTSUdTVE9QOjE3LFNJR1RTVFA6MTgsU0lHVFRJTjoyMSxTSUdCUkVBSzoyMSxTSUdUVE9VOjIyLFNJR1VSRzoxNixTSUdYQ1BVOjI0LFNJR1hGU1o6MjUsU0lHVlRBTFJNOjI2LFNJR1BST0Y6MjcsU0lHV0lOQ0g6MjgsU0lHSU86MjMsU0lHSU5GTzoyOSxTSUdTWVM6MTIsU0lHRU1UOjcsU0lHUFdSOjMwLFNJR1NUS0ZMVDoxNn0scHJpb3JpdHk6e1BSSU9SSVRZX0xPVzoxOSxQUklPUklUWV9CRUxPV19OT1JNQUw6MTAsUFJJT1JJVFlfTk9STUFMOjAsUFJJT1JJVFlfQUJPVkVfTk9STUFMOi03LFBSSU9SSVRZX0hJR0g6LTE0LFBSSU9SSVRZX0hJR0hFU1Q6LTIwfX0seXQ9e1VWX0ZTX1NZTUxJTktfRElSOjEsVVZfRlNfU1lNTElOS19KVU5DVElPTjoyLE9fUkRPTkxZOjAsT19XUk9OTFk6MSxPX1JEV1I6MixVVl9ESVJFTlRfVU5LTk9XTjowLFVWX0RJUkVOVF9GSUxFOjEsVVZfRElSRU5UX0RJUjoyLFVWX0RJUkVOVF9MSU5LOjMsVVZfRElSRU5UX0ZJRk86NCxVVl9ESVJFTlRfU09DS0VUOjUsVVZfRElSRU5UX0NIQVI6NixVVl9ESVJFTlRfQkxPQ0s6NyxTX0lGTVQ6NjE0NDAsU19JRlJFRzozMjc2OCxTX0lGRElSOjE2Mzg0LFNfSUZDSFI6ODE5MixTX0lGQkxLOjI0NTc2LFNfSUZJRk86NDA5NixTX0lGTE5LOjQwOTYwLFNfSUZTT0NLOjQ5MTUyLE9fQ1JFQVQ6NTEyLE9fRVhDTDoyMDQ4LFVWX0ZTX09fRklMRU1BUDowLE9fTk9DVFRZOjEzMTA3MixPX1RSVU5DOjEwMjQsT19BUFBFTkQ6OCxPX0RJUkVDVE9SWToxMDQ4NTc2LE9fTk9GT0xMT1c6MjU2LE9fU1lOQzoxMjgsT19EU1lOQzo0MTk0MzA0LE9fU1lNTElOSzoyMDk3MTUyLE9fTk9OQkxPQ0s6NCxTX0lSV1hVOjQ0OCxTX0lSVVNSOjI1NixTX0lXVVNSOjEyOCxTX0lYVVNSOjY0LFNfSVJXWEc6NTYsU19JUkdSUDozMixTX0lXR1JQOjE2LFNfSVhHUlA6OCxTX0lSV1hPOjcsU19JUk9USDo0LFNfSVdPVEg6MixTX0lYT1RIOjEsRl9PSzowLFJfT0s6NCxXX09LOjIsWF9PSzoxLFVWX0ZTX0NPUFlGSUxFX0VYQ0w6MSxDT1BZRklMRV9FWENMOjEsVVZfRlNfQ09QWUZJTEVfRklDTE9ORToyLENPUFlGSUxFX0ZJQ0xPTkU6MixVVl9GU19DT1BZRklMRV9GSUNMT05FX0ZPUkNFOjQsQ09QWUZJTEVfRklDTE9ORV9GT1JDRTo0fSxHaD17T1BFTlNTTF9WRVJTSU9OX05VTUJFUjoyNjk0ODgzMTksU1NMX09QX0FMTDoyMTQ3NDg1NzgwLFNTTF9PUF9BTExPV19OT19ESEVfS0VYOjEwMjQsU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTjoyNjIxNDQsU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRTo0MTk0MzA0LFNTTF9PUF9DSVNDT19BTllDT05ORUNUOjMyNzY4LFNTTF9PUF9DT09LSUVfRVhDSEFOR0U6ODE5MixTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUc6MjE0NzQ4MzY0OCxTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTOjIwNDgsU1NMX09QX0VQSEVNRVJBTF9SU0E6MCxTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUOjQsU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSOjAsU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRzowLFNTTF9PUF9NU0lFX1NTTFYyX1JTQV9QQURESU5HOjAsU1NMX09QX05FVFNDQVBFX0NBX0ROX0JVRzowLFNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHOjAsU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUc6MCxTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUc6MCxTU0xfT1BfTk9fQ09NUFJFU1NJT046MTMxMDcyLFNTTF9PUF9OT19FTkNSWVBUX1RIRU5fTUFDOjUyNDI4OCxTU0xfT1BfTk9fUVVFUllfTVRVOjQwOTYsU1NMX09QX05PX1JFTkVHT1RJQVRJT046MTA3Mzc0MTgyNCxTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT046NjU1MzYsU1NMX09QX05PX1NTTHYyOjAsU1NMX09QX05PX1NTTHYzOjMzNTU0NDMyLFNTTF9PUF9OT19USUNLRVQ6MTYzODQsU1NMX09QX05PX1RMU3YxOjY3MTA4ODY0LFNTTF9PUF9OT19UTFN2MV8xOjI2ODQzNTQ1NixTU0xfT1BfTk9fVExTdjFfMjoxMzQyMTc3MjgsU1NMX09QX05PX1RMU3YxXzM6NTM2ODcwOTEyLFNTTF9PUF9QS0NTMV9DSEVDS18xOjAsU1NMX09QX1BLQ1MxX0NIRUNLXzI6MCxTU0xfT1BfUFJJT1JJVElaRV9DSEFDSEE6MjA5NzE1MixTU0xfT1BfU0lOR0xFX0RIX1VTRTowLFNTTF9PUF9TSU5HTEVfRUNESF9VU0U6MCxTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHOjAsU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRzowLFNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUc6MCxTU0xfT1BfVExTX0Q1X0JVRzowLFNTTF9PUF9UTFNfUk9MTEJBQ0tfQlVHOjgzODg2MDgsRU5HSU5FX01FVEhPRF9SU0E6MSxFTkdJTkVfTUVUSE9EX0RTQToyLEVOR0lORV9NRVRIT0RfREg6NCxFTkdJTkVfTUVUSE9EX1JBTkQ6OCxFTkdJTkVfTUVUSE9EX0VDOjIwNDgsRU5HSU5FX01FVEhPRF9DSVBIRVJTOjY0LEVOR0lORV9NRVRIT0RfRElHRVNUUzoxMjgsRU5HSU5FX01FVEhPRF9QS0VZX01FVEhTOjUxMixFTkdJTkVfTUVUSE9EX1BLRVlfQVNOMV9NRVRIUzoxMDI0LEVOR0lORV9NRVRIT0RfQUxMOjY1NTM1LEVOR0lORV9NRVRIT0RfTk9ORTowLERIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUlNBX1BTU19TQUxUTEVOX0RJR0VTVDotMSxSU0FfUFNTX1NBTFRMRU5fTUFYX1NJR046LTIsUlNBX1BTU19TQUxUTEVOX0FVVE86LTIsZGVmYXVsdENvcmVDaXBoZXJMaXN0OlwiVExTX0FFU18yNTZfR0NNX1NIQTM4NDpUTFNfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2OlRMU19BRVNfMTI4X0dDTV9TSEEyNTY6RUNESEUtUlNBLUFFUzEyOC1HQ00tU0hBMjU2OkVDREhFLUVDRFNBLUFFUzEyOC1HQ00tU0hBMjU2OkVDREhFLVJTQS1BRVMyNTYtR0NNLVNIQTM4NDpFQ0RIRS1FQ0RTQS1BRVMyNTYtR0NNLVNIQTM4NDpESEUtUlNBLUFFUzEyOC1HQ00tU0hBMjU2OkVDREhFLVJTQS1BRVMxMjgtU0hBMjU2OkRIRS1SU0EtQUVTMTI4LVNIQTI1NjpFQ0RIRS1SU0EtQUVTMjU2LVNIQTM4NDpESEUtUlNBLUFFUzI1Ni1TSEEzODQ6RUNESEUtUlNBLUFFUzI1Ni1TSEEyNTY6REhFLVJTQS1BRVMyNTYtU0hBMjU2OkhJR0g6IWFOVUxMOiFlTlVMTDohRVhQT1JUOiFERVM6IVJDNDohTUQ1OiFQU0s6IVNSUDohQ0FNRUxMSUFcIixUTFMxX1ZFUlNJT046NzY5LFRMUzFfMV9WRVJTSU9OOjc3MCxUTFMxXzJfVkVSU0lPTjo3NzEsVExTMV8zX1ZFUlNJT046NzcyLFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn0sSGg9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX01FTV9FUlJPUjotNCxaX0JVRl9FUlJPUjotNSxaX1ZFUlNJT05fRVJST1I6LTYsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaTElCX1ZFUk5VTTo0Nzg0LERFRkxBVEU6MSxJTkZMQVRFOjIsR1pJUDozLEdVTlpJUDo0LERFRkxBVEVSQVc6NSxJTkZMQVRFUkFXOjYsVU5aSVA6NyxCUk9UTElfREVDT0RFOjgsQlJPVExJX0VOQ09ERTo5LFpfTUlOX1dJTkRPV0JJVFM6OCxaX01BWF9XSU5ET1dCSVRTOjE1LFpfREVGQVVMVF9XSU5ET1dCSVRTOjE1LFpfTUlOX0NIVU5LOjY0LFpfTUFYX0NIVU5LOjEvMCxaX0RFRkFVTFRfQ0hVTks6MTYzODQsWl9NSU5fTUVNTEVWRUw6MSxaX01BWF9NRU1MRVZFTDo5LFpfREVGQVVMVF9NRU1MRVZFTDo4LFpfTUlOX0xFVkVMOi0xLFpfTUFYX0xFVkVMOjksWl9ERUZBVUxUX0xFVkVMOi0xLEJST1RMSV9PUEVSQVRJT05fUFJPQ0VTUzowLEJST1RMSV9PUEVSQVRJT05fRkxVU0g6MSxCUk9UTElfT1BFUkFUSU9OX0ZJTklTSDoyLEJST1RMSV9PUEVSQVRJT05fRU1JVF9NRVRBREFUQTozLEJST1RMSV9QQVJBTV9NT0RFOjAsQlJPVExJX01PREVfR0VORVJJQzowLEJST1RMSV9NT0RFX1RFWFQ6MSxCUk9UTElfTU9ERV9GT05UOjIsQlJPVExJX0RFRkFVTFRfTU9ERTowLEJST1RMSV9QQVJBTV9RVUFMSVRZOjEsQlJPVExJX01JTl9RVUFMSVRZOjAsQlJPVExJX01BWF9RVUFMSVRZOjExLEJST1RMSV9ERUZBVUxUX1FVQUxJVFk6MTEsQlJPVExJX1BBUkFNX0xHV0lOOjIsQlJPVExJX01JTl9XSU5ET1dfQklUUzoxMCxCUk9UTElfTUFYX1dJTkRPV19CSVRTOjI0LEJST1RMSV9MQVJHRV9NQVhfV0lORE9XX0JJVFM6MzAsQlJPVExJX0RFRkFVTFRfV0lORE9XOjIyLEJST1RMSV9QQVJBTV9MR0JMT0NLOjMsQlJPVExJX01JTl9JTlBVVF9CTE9DS19CSVRTOjE2LEJST1RMSV9NQVhfSU5QVVRfQkxPQ0tfQklUUzoyNCxCUk9UTElfUEFSQU1fRElTQUJMRV9MSVRFUkFMX0NPTlRFWFRfTU9ERUxJTkc6NCxCUk9UTElfUEFSQU1fU0laRV9ISU5UOjUsQlJPVExJX1BBUkFNX0xBUkdFX1dJTkRPVzo2LEJST1RMSV9QQVJBTV9OUE9TVEZJWDo3LEJST1RMSV9QQVJBTV9ORElSRUNUOjgsQlJPVExJX0RFQ09ERVJfUkVTVUxUX0VSUk9SOjAsQlJPVExJX0RFQ09ERVJfUkVTVUxUX1NVQ0NFU1M6MSxCUk9UTElfREVDT0RFUl9SRVNVTFRfTkVFRFNfTU9SRV9JTlBVVDoyLEJST1RMSV9ERUNPREVSX1JFU1VMVF9ORUVEU19NT1JFX09VVFBVVDozLEJST1RMSV9ERUNPREVSX1BBUkFNX0RJU0FCTEVfUklOR19CVUZGRVJfUkVBTExPQ0FUSU9OOjAsQlJPVExJX0RFQ09ERVJfUEFSQU1fTEFSR0VfV0lORE9XOjEsQlJPVExJX0RFQ09ERVJfTk9fRVJST1I6MCxCUk9UTElfREVDT0RFUl9TVUNDRVNTOjEsQlJPVExJX0RFQ09ERVJfTkVFRFNfTU9SRV9JTlBVVDoyLEJST1RMSV9ERUNPREVSX05FRURTX01PUkVfT1VUUFVUOjMsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX0VYVUJFUkFOVF9OSUJCTEU6LTEsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1JFU0VSVkVEOi0yLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9FWFVCRVJBTlRfTUVUQV9OSUJCTEU6LTMsQlJPVExJX0RFQ09ERVJfRVJST1JfRk9STUFUX1NJTVBMRV9IVUZGTUFOX0FMUEhBQkVUOi00LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9TSU1QTEVfSFVGRk1BTl9TQU1FOi01LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9DTF9TUEFDRTotNixCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfSFVGRk1BTl9TUEFDRTotNyxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQ09OVEVYVF9NQVBfUkVQRUFUOi04LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9CTE9DS19MRU5HVEhfMTotOSxCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfQkxPQ0tfTEVOR1RIXzI6LTEwLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9UUkFOU0ZPUk06LTExLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9ESUNUSU9OQVJZOi0xMixCUk9UTElfREVDT0RFUl9FUlJPUl9GT1JNQVRfV0lORE9XX0JJVFM6LTEzLEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9QQURESU5HXzE6LTE0LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9QQURESU5HXzI6LTE1LEJST1RMSV9ERUNPREVSX0VSUk9SX0ZPUk1BVF9ESVNUQU5DRTotMTYsQlJPVExJX0RFQ09ERVJfRVJST1JfRElDVElPTkFSWV9OT1RfU0VUOi0xOSxCUk9UTElfREVDT0RFUl9FUlJPUl9JTlZBTElEX0FSR1VNRU5UUzotMjAsQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfQ09OVEVYVF9NT0RFUzotMjEsQlJPVExJX0RFQ09ERVJfRVJST1JfQUxMT0NfVFJFRV9HUk9VUFM6LTIyLEJST1RMSV9ERUNPREVSX0VSUk9SX0FMTE9DX0NPTlRFWFRfTUFQOi0yNSxCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19SSU5HX0JVRkZFUl8xOi0yNixCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19SSU5HX0JVRkZFUl8yOi0yNyxCUk9UTElfREVDT0RFUl9FUlJPUl9BTExPQ19CTE9DS19UWVBFX1RSRUVTOi0zMCxCUk9UTElfREVDT0RFUl9FUlJPUl9VTlJFQUNIQUJMRTotMzF9LCRoPXtUUkFDRV9FVkVOVF9QSEFTRV9CRUdJTjo2NixUUkFDRV9FVkVOVF9QSEFTRV9FTkQ6NjksVFJBQ0VfRVZFTlRfUEhBU0VfQ09NUExFVEU6ODgsVFJBQ0VfRVZFTlRfUEhBU0VfSU5TVEFOVDo3MyxUUkFDRV9FVkVOVF9QSEFTRV9BU1lOQ19CRUdJTjo4MyxUUkFDRV9FVkVOVF9QSEFTRV9BU1lOQ19TVEVQX0lOVE86ODQsVFJBQ0VfRVZFTlRfUEhBU0VfQVNZTkNfU1RFUF9QQVNUOjExMixUUkFDRV9FVkVOVF9QSEFTRV9BU1lOQ19FTkQ6NzAsVFJBQ0VfRVZFTlRfUEhBU0VfTkVTVEFCTEVfQVNZTkNfQkVHSU46OTgsVFJBQ0VfRVZFTlRfUEhBU0VfTkVTVEFCTEVfQVNZTkNfRU5EOjEwMSxUUkFDRV9FVkVOVF9QSEFTRV9ORVNUQUJMRV9BU1lOQ19JTlNUQU5UOjExMCxUUkFDRV9FVkVOVF9QSEFTRV9GTE9XX0JFR0lOOjExNSxUUkFDRV9FVkVOVF9QSEFTRV9GTE9XX1NURVA6MTE2LFRSQUNFX0VWRU5UX1BIQVNFX0ZMT1dfRU5EOjEwMixUUkFDRV9FVkVOVF9QSEFTRV9NRVRBREFUQTo3NyxUUkFDRV9FVkVOVF9QSEFTRV9DT1VOVEVSOjY3LFRSQUNFX0VWRU5UX1BIQVNFX1NBTVBMRTo4MCxUUkFDRV9FVkVOVF9QSEFTRV9DUkVBVEVfT0JKRUNUOjc4LFRSQUNFX0VWRU5UX1BIQVNFX1NOQVBTSE9UX09CSkVDVDo3OSxUUkFDRV9FVkVOVF9QSEFTRV9ERUxFVEVfT0JKRUNUOjY4LFRSQUNFX0VWRU5UX1BIQVNFX01FTU9SWV9EVU1QOjExOCxUUkFDRV9FVkVOVF9QSEFTRV9NQVJLOjgyLFRSQUNFX0VWRU5UX1BIQVNFX0NMT0NLX1NZTkM6OTksVFJBQ0VfRVZFTlRfUEhBU0VfRU5URVJfQ09OVEVYVDo0MCxUUkFDRV9FVkVOVF9QSEFTRV9MRUFWRV9DT05URVhUOjQxLFRSQUNFX0VWRU5UX1BIQVNFX0xJTktfSURTOjYxfX0pO3ZhciBjaT17fTtyZShjaSx7VVZfRUFJX01FTU9SWTooKT0+emgsVVZfRUJBREY6KCk9PnFoLFVWX0VFWElTVDooKT0+dmgsVVZfRUlOVkFMOigpPT5aaCxVVl9FTk9FTlQ6KCk9PlloLFVWX0VOT1RTT0NLOigpPT5KaCxVVl9VTktOT1dOOigpPT5RaCxjb2RlTWFwOigpPT5ELGVycm9yTWFwOigpPT4kdCxtYXBTeXNFcnJub1RvVXZFcnJubzooKT0+elJ9KTtmdW5jdGlvbiB6UihlKXtpZih2ZT09PVwid2luZG93c1wiKXtsZXQgdD12UihlKTtyZXR1cm4gRC5nZXQodCk/Py1lfWVsc2UgcmV0dXJuLWV9dmFyIHZoLFloLEtSLEtoLGpSLGpoLFhSLFhoLCR0LEQsemgsUWgscWgsWmgsSmgsdXQ9cCgoKT0+e2d0KCk7SmUoKTtZUigpO3pyKCk7dmg9ZHIuZXJybm8uRUVYSVNULFloPWRyLmVycm5vLkVOT0VOVCxLUj1bWy00MDkzLFtcIkUyQklHXCIsXCJhcmd1bWVudCBsaXN0IHRvbyBsb25nXCJdXSxbLTQwOTIsW1wiRUFDQ0VTXCIsXCJwZXJtaXNzaW9uIGRlbmllZFwiXV0sWy00MDkxLFtcIkVBRERSSU5VU0VcIixcImFkZHJlc3MgYWxyZWFkeSBpbiB1c2VcIl1dLFstNDA5MCxbXCJFQUREUk5PVEFWQUlMXCIsXCJhZGRyZXNzIG5vdCBhdmFpbGFibGVcIl1dLFstNDA4OSxbXCJFQUZOT1NVUFBPUlRcIixcImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFstNDA4OCxbXCJFQUdBSU5cIixcInJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlXCJdXSxbLTNlMyxbXCJFQUlfQUREUkZBTUlMWVwiLFwiYWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZFwiXV0sWy0zMDAxLFtcIkVBSV9BR0FJTlwiLFwidGVtcG9yYXJ5IGZhaWx1cmVcIl1dLFstMzAwMixbXCJFQUlfQkFERkxBR1NcIixcImJhZCBhaV9mbGFncyB2YWx1ZVwiXV0sWy0zMDEzLFtcIkVBSV9CQURISU5UU1wiLFwiaW52YWxpZCB2YWx1ZSBmb3IgaGludHNcIl1dLFstMzAwMyxbXCJFQUlfQ0FOQ0VMRURcIixcInJlcXVlc3QgY2FuY2VsZWRcIl1dLFstMzAwNCxbXCJFQUlfRkFJTFwiLFwicGVybWFuZW50IGZhaWx1cmVcIl1dLFstMzAwNSxbXCJFQUlfRkFNSUxZXCIsXCJhaV9mYW1pbHkgbm90IHN1cHBvcnRlZFwiXV0sWy0zMDA2LFtcIkVBSV9NRU1PUllcIixcIm91dCBvZiBtZW1vcnlcIl1dLFstMzAwNyxbXCJFQUlfTk9EQVRBXCIsXCJubyBhZGRyZXNzXCJdXSxbLTMwMDgsW1wiRUFJX05PTkFNRVwiLFwidW5rbm93biBub2RlIG9yIHNlcnZpY2VcIl1dLFstMzAwOSxbXCJFQUlfT1ZFUkZMT1dcIixcImFyZ3VtZW50IGJ1ZmZlciBvdmVyZmxvd1wiXV0sWy0zMDE0LFtcIkVBSV9QUk9UT0NPTFwiLFwicmVzb2x2ZWQgcHJvdG9jb2wgaXMgdW5rbm93blwiXV0sWy0zMDEwLFtcIkVBSV9TRVJWSUNFXCIsXCJzZXJ2aWNlIG5vdCBhdmFpbGFibGUgZm9yIHNvY2tldCB0eXBlXCJdXSxbLTMwMTEsW1wiRUFJX1NPQ0tUWVBFXCIsXCJzb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkXCJdXSxbLTQwODQsW1wiRUFMUkVBRFlcIixcImNvbm5lY3Rpb24gYWxyZWFkeSBpbiBwcm9ncmVzc1wiXV0sWy00MDgzLFtcIkVCQURGXCIsXCJiYWQgZmlsZSBkZXNjcmlwdG9yXCJdXSxbLTQwODIsW1wiRUJVU1lcIixcInJlc291cmNlIGJ1c3kgb3IgbG9ja2VkXCJdXSxbLTQwODEsW1wiRUNBTkNFTEVEXCIsXCJvcGVyYXRpb24gY2FuY2VsZWRcIl1dLFstNDA4MCxbXCJFQ0hBUlNFVFwiLFwiaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlclwiXV0sWy00MDc5LFtcIkVDT05OQUJPUlRFRFwiLFwic29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnRcIl1dLFstNDA3OCxbXCJFQ09OTlJFRlVTRURcIixcImNvbm5lY3Rpb24gcmVmdXNlZFwiXV0sWy00MDc3LFtcIkVDT05OUkVTRVRcIixcImNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlclwiXV0sWy00MDc2LFtcIkVERVNUQUREUlJFUVwiLFwiZGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZFwiXV0sWy00MDc1LFtcIkVFWElTVFwiLFwiZmlsZSBhbHJlYWR5IGV4aXN0c1wiXV0sWy00MDc0LFtcIkVGQVVMVFwiLFwiYmFkIGFkZHJlc3MgaW4gc3lzdGVtIGNhbGwgYXJndW1lbnRcIl1dLFstNDAzNixbXCJFRkJJR1wiLFwiZmlsZSB0b28gbGFyZ2VcIl1dLFstNDA3MyxbXCJFSE9TVFVOUkVBQ0hcIixcImhvc3QgaXMgdW5yZWFjaGFibGVcIl1dLFstNDA3MixbXCJFSU5UUlwiLFwiaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGxcIl1dLFstNDA3MSxbXCJFSU5WQUxcIixcImludmFsaWQgYXJndW1lbnRcIl1dLFstNDA3MCxbXCJFSU9cIixcImkvbyBlcnJvclwiXV0sWy00MDY5LFtcIkVJU0NPTk5cIixcInNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZFwiXV0sWy00MDY4LFtcIkVJU0RJUlwiLFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIl1dLFstNDA2NyxbXCJFTE9PUFwiLFwidG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWRcIl1dLFstNDA2NixbXCJFTUZJTEVcIixcInRvbyBtYW55IG9wZW4gZmlsZXNcIl1dLFstNDA2NSxbXCJFTVNHU0laRVwiLFwibWVzc2FnZSB0b28gbG9uZ1wiXV0sWy00MDY0LFtcIkVOQU1FVE9PTE9OR1wiLFwibmFtZSB0b28gbG9uZ1wiXV0sWy00MDYzLFtcIkVORVRET1dOXCIsXCJuZXR3b3JrIGlzIGRvd25cIl1dLFstNDA2MixbXCJFTkVUVU5SRUFDSFwiLFwibmV0d29yayBpcyB1bnJlYWNoYWJsZVwiXV0sWy00MDYxLFtcIkVORklMRVwiLFwiZmlsZSB0YWJsZSBvdmVyZmxvd1wiXV0sWy00MDYwLFtcIkVOT0JVRlNcIixcIm5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGVcIl1dLFstNDA1OSxbXCJFTk9ERVZcIixcIm5vIHN1Y2ggZGV2aWNlXCJdXSxbLTQwNTgsW1wiRU5PRU5UXCIsXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCJdXSxbLTQwNTcsW1wiRU5PTUVNXCIsXCJub3QgZW5vdWdoIG1lbW9yeVwiXV0sWy00MDU2LFtcIkVOT05FVFwiLFwibWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmtcIl1dLFstNDAzNSxbXCJFTk9QUk9UT09QVFwiLFwicHJvdG9jb2wgbm90IGF2YWlsYWJsZVwiXV0sWy00MDU1LFtcIkVOT1NQQ1wiLFwibm8gc3BhY2UgbGVmdCBvbiBkZXZpY2VcIl1dLFstNDA1NCxbXCJFTk9TWVNcIixcImZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZFwiXV0sWy00MDUzLFtcIkVOT1RDT05OXCIsXCJzb2NrZXQgaXMgbm90IGNvbm5lY3RlZFwiXV0sWy00MDUyLFtcIkVOT1RESVJcIixcIm5vdCBhIGRpcmVjdG9yeVwiXV0sWy00MDUxLFtcIkVOT1RFTVBUWVwiLFwiZGlyZWN0b3J5IG5vdCBlbXB0eVwiXV0sWy00MDUwLFtcIkVOT1RTT0NLXCIsXCJzb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXRcIl1dLFstNDA0OSxbXCJFTk9UU1VQXCIsXCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiBzb2NrZXRcIl1dLFstNDA0OCxbXCJFUEVSTVwiLFwib3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWRcIl1dLFstNDA0NyxbXCJFUElQRVwiLFwiYnJva2VuIHBpcGVcIl1dLFstNDA0NixbXCJFUFJPVE9cIixcInByb3RvY29sIGVycm9yXCJdXSxbLTQwNDUsW1wiRVBST1RPTk9TVVBQT1JUXCIsXCJwcm90b2NvbCBub3Qgc3VwcG9ydGVkXCJdXSxbLTQwNDQsW1wiRVBST1RPVFlQRVwiLFwicHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0XCJdXSxbLTQwMzQsW1wiRVJBTkdFXCIsXCJyZXN1bHQgdG9vIGxhcmdlXCJdXSxbLTQwNDMsW1wiRVJPRlNcIixcInJlYWQtb25seSBmaWxlIHN5c3RlbVwiXV0sWy00MDQyLFtcIkVTSFVURE9XTlwiLFwiY2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duXCJdXSxbLTQwNDEsW1wiRVNQSVBFXCIsXCJpbnZhbGlkIHNlZWtcIl1dLFstNDA0MCxbXCJFU1JDSFwiLFwibm8gc3VjaCBwcm9jZXNzXCJdXSxbLTQwMzksW1wiRVRJTUVET1VUXCIsXCJjb25uZWN0aW9uIHRpbWVkIG91dFwiXV0sWy00MDM4LFtcIkVUWFRCU1lcIixcInRleHQgZmlsZSBpcyBidXN5XCJdXSxbLTQwMzcsW1wiRVhERVZcIixcImNyb3NzLWRldmljZSBsaW5rIG5vdCBwZXJtaXR0ZWRcIl1dLFstNDA5NCxbXCJVTktOT1dOXCIsXCJ1bmtub3duIGVycm9yXCJdXSxbLTQwOTUsW1wiRU9GXCIsXCJlbmQgb2YgZmlsZVwiXV0sWy00MDMzLFtcIkVOWElPXCIsXCJubyBzdWNoIGRldmljZSBvciBhZGRyZXNzXCJdXSxbLTQwMzIsW1wiRU1MSU5LXCIsXCJ0b28gbWFueSBsaW5rc1wiXV0sWy00MDMxLFtcIkVIT1NURE9XTlwiLFwiaG9zdCBpcyBkb3duXCJdXSxbLTQwMzAsW1wiRVJFTU9URUlPXCIsXCJyZW1vdGUgSS9PIGVycm9yXCJdXSxbLTQwMjksW1wiRU5PVFRZXCIsXCJpbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2VcIl1dLFstNDAyOCxbXCJFRlRZUEVcIixcImluYXBwcm9wcmlhdGUgZmlsZSB0eXBlIG9yIGZvcm1hdFwiXV0sWy00MDI3LFtcIkVJTFNFUVwiLFwiaWxsZWdhbCBieXRlIHNlcXVlbmNlXCJdXV0sS2g9S1IubWFwKChbZSxbdF1dKT0+W3QsZV0pLGpSPVtbLTcsW1wiRTJCSUdcIixcImFyZ3VtZW50IGxpc3QgdG9vIGxvbmdcIl1dLFstMTMsW1wiRUFDQ0VTXCIsXCJwZXJtaXNzaW9uIGRlbmllZFwiXV0sWy00OCxbXCJFQUREUklOVVNFXCIsXCJhZGRyZXNzIGFscmVhZHkgaW4gdXNlXCJdXSxbLTQ5LFtcIkVBRERSTk9UQVZBSUxcIixcImFkZHJlc3Mgbm90IGF2YWlsYWJsZVwiXV0sWy00NyxbXCJFQUZOT1NVUFBPUlRcIixcImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFstMzUsW1wiRUFHQUlOXCIsXCJyZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZVwiXV0sWy0zZTMsW1wiRUFJX0FERFJGQU1JTFlcIixcImFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFstMzAwMSxbXCJFQUlfQUdBSU5cIixcInRlbXBvcmFyeSBmYWlsdXJlXCJdXSxbLTMwMDIsW1wiRUFJX0JBREZMQUdTXCIsXCJiYWQgYWlfZmxhZ3MgdmFsdWVcIl1dLFstMzAxMyxbXCJFQUlfQkFESElOVFNcIixcImludmFsaWQgdmFsdWUgZm9yIGhpbnRzXCJdXSxbLTMwMDMsW1wiRUFJX0NBTkNFTEVEXCIsXCJyZXF1ZXN0IGNhbmNlbGVkXCJdXSxbLTMwMDQsW1wiRUFJX0ZBSUxcIixcInBlcm1hbmVudCBmYWlsdXJlXCJdXSxbLTMwMDUsW1wiRUFJX0ZBTUlMWVwiLFwiYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWRcIl1dLFstMzAwNixbXCJFQUlfTUVNT1JZXCIsXCJvdXQgb2YgbWVtb3J5XCJdXSxbLTMwMDcsW1wiRUFJX05PREFUQVwiLFwibm8gYWRkcmVzc1wiXV0sWy0zMDA4LFtcIkVBSV9OT05BTUVcIixcInVua25vd24gbm9kZSBvciBzZXJ2aWNlXCJdXSxbLTMwMDksW1wiRUFJX09WRVJGTE9XXCIsXCJhcmd1bWVudCBidWZmZXIgb3ZlcmZsb3dcIl1dLFstMzAxNCxbXCJFQUlfUFJPVE9DT0xcIixcInJlc29sdmVkIHByb3RvY29sIGlzIHVua25vd25cIl1dLFstMzAxMCxbXCJFQUlfU0VSVklDRVwiLFwic2VydmljZSBub3QgYXZhaWxhYmxlIGZvciBzb2NrZXQgdHlwZVwiXV0sWy0zMDExLFtcIkVBSV9TT0NLVFlQRVwiLFwic29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZFwiXV0sWy0zNyxbXCJFQUxSRUFEWVwiLFwiY29ubmVjdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzXCJdXSxbLTksW1wiRUJBREZcIixcImJhZCBmaWxlIGRlc2NyaXB0b3JcIl1dLFstMTYsW1wiRUJVU1lcIixcInJlc291cmNlIGJ1c3kgb3IgbG9ja2VkXCJdXSxbLTg5LFtcIkVDQU5DRUxFRFwiLFwib3BlcmF0aW9uIGNhbmNlbGVkXCJdXSxbLTQwODAsW1wiRUNIQVJTRVRcIixcImludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXJcIl1dLFstNTMsW1wiRUNPTk5BQk9SVEVEXCIsXCJzb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydFwiXV0sWy02MSxbXCJFQ09OTlJFRlVTRURcIixcImNvbm5lY3Rpb24gcmVmdXNlZFwiXV0sWy01NCxbXCJFQ09OTlJFU0VUXCIsXCJjb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXJcIl1dLFstMzksW1wiRURFU1RBRERSUkVRXCIsXCJkZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkXCJdXSxbLTE3LFtcIkVFWElTVFwiLFwiZmlsZSBhbHJlYWR5IGV4aXN0c1wiXV0sWy0xNCxbXCJFRkFVTFRcIixcImJhZCBhZGRyZXNzIGluIHN5c3RlbSBjYWxsIGFyZ3VtZW50XCJdXSxbLTI3LFtcIkVGQklHXCIsXCJmaWxlIHRvbyBsYXJnZVwiXV0sWy02NSxbXCJFSE9TVFVOUkVBQ0hcIixcImhvc3QgaXMgdW5yZWFjaGFibGVcIl1dLFstNCxbXCJFSU5UUlwiLFwiaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGxcIl1dLFstMjIsW1wiRUlOVkFMXCIsXCJpbnZhbGlkIGFyZ3VtZW50XCJdXSxbLTUsW1wiRUlPXCIsXCJpL28gZXJyb3JcIl1dLFstNTYsW1wiRUlTQ09OTlwiLFwic29ja2V0IGlzIGFscmVhZHkgY29ubmVjdGVkXCJdXSxbLTIxLFtcIkVJU0RJUlwiLFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIl1dLFstNjIsW1wiRUxPT1BcIixcInRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkXCJdXSxbLTI0LFtcIkVNRklMRVwiLFwidG9vIG1hbnkgb3BlbiBmaWxlc1wiXV0sWy00MCxbXCJFTVNHU0laRVwiLFwibWVzc2FnZSB0b28gbG9uZ1wiXV0sWy02MyxbXCJFTkFNRVRPT0xPTkdcIixcIm5hbWUgdG9vIGxvbmdcIl1dLFstNTAsW1wiRU5FVERPV05cIixcIm5ldHdvcmsgaXMgZG93blwiXV0sWy01MSxbXCJFTkVUVU5SRUFDSFwiLFwibmV0d29yayBpcyB1bnJlYWNoYWJsZVwiXV0sWy0yMyxbXCJFTkZJTEVcIixcImZpbGUgdGFibGUgb3ZlcmZsb3dcIl1dLFstNTUsW1wiRU5PQlVGU1wiLFwibm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZVwiXV0sWy0xOSxbXCJFTk9ERVZcIixcIm5vIHN1Y2ggZGV2aWNlXCJdXSxbLTIsW1wiRU5PRU5UXCIsXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCJdXSxbLTEyLFtcIkVOT01FTVwiLFwibm90IGVub3VnaCBtZW1vcnlcIl1dLFstNDA1NixbXCJFTk9ORVRcIixcIm1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrXCJdXSxbLTQyLFtcIkVOT1BST1RPT1BUXCIsXCJwcm90b2NvbCBub3QgYXZhaWxhYmxlXCJdXSxbLTI4LFtcIkVOT1NQQ1wiLFwibm8gc3BhY2UgbGVmdCBvbiBkZXZpY2VcIl1dLFstNzgsW1wiRU5PU1lTXCIsXCJmdW5jdGlvbiBub3QgaW1wbGVtZW50ZWRcIl1dLFstNTcsW1wiRU5PVENPTk5cIixcInNvY2tldCBpcyBub3QgY29ubmVjdGVkXCJdXSxbLTIwLFtcIkVOT1RESVJcIixcIm5vdCBhIGRpcmVjdG9yeVwiXV0sWy02NixbXCJFTk9URU1QVFlcIixcImRpcmVjdG9yeSBub3QgZW1wdHlcIl1dLFstMzgsW1wiRU5PVFNPQ0tcIixcInNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldFwiXV0sWy00NSxbXCJFTk9UU1VQXCIsXCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiBzb2NrZXRcIl1dLFstMSxbXCJFUEVSTVwiLFwib3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWRcIl1dLFstMzIsW1wiRVBJUEVcIixcImJyb2tlbiBwaXBlXCJdXSxbLTEwMCxbXCJFUFJPVE9cIixcInByb3RvY29sIGVycm9yXCJdXSxbLTQzLFtcIkVQUk9UT05PU1VQUE9SVFwiLFwicHJvdG9jb2wgbm90IHN1cHBvcnRlZFwiXV0sWy00MSxbXCJFUFJPVE9UWVBFXCIsXCJwcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXRcIl1dLFstMzQsW1wiRVJBTkdFXCIsXCJyZXN1bHQgdG9vIGxhcmdlXCJdXSxbLTMwLFtcIkVST0ZTXCIsXCJyZWFkLW9ubHkgZmlsZSBzeXN0ZW1cIl1dLFstNTgsW1wiRVNIVVRET1dOXCIsXCJjYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd25cIl1dLFstMjksW1wiRVNQSVBFXCIsXCJpbnZhbGlkIHNlZWtcIl1dLFstMyxbXCJFU1JDSFwiLFwibm8gc3VjaCBwcm9jZXNzXCJdXSxbLTYwLFtcIkVUSU1FRE9VVFwiLFwiY29ubmVjdGlvbiB0aW1lZCBvdXRcIl1dLFstMjYsW1wiRVRYVEJTWVwiLFwidGV4dCBmaWxlIGlzIGJ1c3lcIl1dLFstMTgsW1wiRVhERVZcIixcImNyb3NzLWRldmljZSBsaW5rIG5vdCBwZXJtaXR0ZWRcIl1dLFstNDA5NCxbXCJVTktOT1dOXCIsXCJ1bmtub3duIGVycm9yXCJdXSxbLTQwOTUsW1wiRU9GXCIsXCJlbmQgb2YgZmlsZVwiXV0sWy02LFtcIkVOWElPXCIsXCJubyBzdWNoIGRldmljZSBvciBhZGRyZXNzXCJdXSxbLTMxLFtcIkVNTElOS1wiLFwidG9vIG1hbnkgbGlua3NcIl1dLFstNjQsW1wiRUhPU1RET1dOXCIsXCJob3N0IGlzIGRvd25cIl1dLFstNDAzMCxbXCJFUkVNT1RFSU9cIixcInJlbW90ZSBJL08gZXJyb3JcIl1dLFstMjUsW1wiRU5PVFRZXCIsXCJpbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2VcIl1dLFstNzksW1wiRUZUWVBFXCIsXCJpbmFwcHJvcHJpYXRlIGZpbGUgdHlwZSBvciBmb3JtYXRcIl1dLFstOTIsW1wiRUlMU0VRXCIsXCJpbGxlZ2FsIGJ5dGUgc2VxdWVuY2VcIl1dXSxqaD1qUi5tYXAoKFtlLFt0XV0pPT5bdCxlXSksWFI9W1stNyxbXCJFMkJJR1wiLFwiYXJndW1lbnQgbGlzdCB0b28gbG9uZ1wiXV0sWy0xMyxbXCJFQUNDRVNcIixcInBlcm1pc3Npb24gZGVuaWVkXCJdXSxbLTk4LFtcIkVBRERSSU5VU0VcIixcImFkZHJlc3MgYWxyZWFkeSBpbiB1c2VcIl1dLFstOTksW1wiRUFERFJOT1RBVkFJTFwiLFwiYWRkcmVzcyBub3QgYXZhaWxhYmxlXCJdXSxbLTk3LFtcIkVBRk5PU1VQUE9SVFwiLFwiYWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZFwiXV0sWy0xMSxbXCJFQUdBSU5cIixcInJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlXCJdXSxbLTNlMyxbXCJFQUlfQUREUkZBTUlMWVwiLFwiYWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZFwiXV0sWy0zMDAxLFtcIkVBSV9BR0FJTlwiLFwidGVtcG9yYXJ5IGZhaWx1cmVcIl1dLFstMzAwMixbXCJFQUlfQkFERkxBR1NcIixcImJhZCBhaV9mbGFncyB2YWx1ZVwiXV0sWy0zMDEzLFtcIkVBSV9CQURISU5UU1wiLFwiaW52YWxpZCB2YWx1ZSBmb3IgaGludHNcIl1dLFstMzAwMyxbXCJFQUlfQ0FOQ0VMRURcIixcInJlcXVlc3QgY2FuY2VsZWRcIl1dLFstMzAwNCxbXCJFQUlfRkFJTFwiLFwicGVybWFuZW50IGZhaWx1cmVcIl1dLFstMzAwNSxbXCJFQUlfRkFNSUxZXCIsXCJhaV9mYW1pbHkgbm90IHN1cHBvcnRlZFwiXV0sWy0zMDA2LFtcIkVBSV9NRU1PUllcIixcIm91dCBvZiBtZW1vcnlcIl1dLFstMzAwNyxbXCJFQUlfTk9EQVRBXCIsXCJubyBhZGRyZXNzXCJdXSxbLTMwMDgsW1wiRUFJX05PTkFNRVwiLFwidW5rbm93biBub2RlIG9yIHNlcnZpY2VcIl1dLFstMzAwOSxbXCJFQUlfT1ZFUkZMT1dcIixcImFyZ3VtZW50IGJ1ZmZlciBvdmVyZmxvd1wiXV0sWy0zMDE0LFtcIkVBSV9QUk9UT0NPTFwiLFwicmVzb2x2ZWQgcHJvdG9jb2wgaXMgdW5rbm93blwiXV0sWy0zMDEwLFtcIkVBSV9TRVJWSUNFXCIsXCJzZXJ2aWNlIG5vdCBhdmFpbGFibGUgZm9yIHNvY2tldCB0eXBlXCJdXSxbLTMwMTEsW1wiRUFJX1NPQ0tUWVBFXCIsXCJzb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkXCJdXSxbLTExNCxbXCJFQUxSRUFEWVwiLFwiY29ubmVjdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzXCJdXSxbLTksW1wiRUJBREZcIixcImJhZCBmaWxlIGRlc2NyaXB0b3JcIl1dLFstMTYsW1wiRUJVU1lcIixcInJlc291cmNlIGJ1c3kgb3IgbG9ja2VkXCJdXSxbLTEyNSxbXCJFQ0FOQ0VMRURcIixcIm9wZXJhdGlvbiBjYW5jZWxlZFwiXV0sWy00MDgwLFtcIkVDSEFSU0VUXCIsXCJpbnZhbGlkIFVuaWNvZGUgY2hhcmFjdGVyXCJdXSxbLTEwMyxbXCJFQ09OTkFCT1JURURcIixcInNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0XCJdXSxbLTExMSxbXCJFQ09OTlJFRlVTRURcIixcImNvbm5lY3Rpb24gcmVmdXNlZFwiXV0sWy0xMDQsW1wiRUNPTk5SRVNFVFwiLFwiY29ubmVjdGlvbiByZXNldCBieSBwZWVyXCJdXSxbLTg5LFtcIkVERVNUQUREUlJFUVwiLFwiZGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZFwiXV0sWy0xNyxbXCJFRVhJU1RcIixcImZpbGUgYWxyZWFkeSBleGlzdHNcIl1dLFstMTQsW1wiRUZBVUxUXCIsXCJiYWQgYWRkcmVzcyBpbiBzeXN0ZW0gY2FsbCBhcmd1bWVudFwiXV0sWy0yNyxbXCJFRkJJR1wiLFwiZmlsZSB0b28gbGFyZ2VcIl1dLFstMTEzLFtcIkVIT1NUVU5SRUFDSFwiLFwiaG9zdCBpcyB1bnJlYWNoYWJsZVwiXV0sWy00LFtcIkVJTlRSXCIsXCJpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbFwiXV0sWy0yMixbXCJFSU5WQUxcIixcImludmFsaWQgYXJndW1lbnRcIl1dLFstNSxbXCJFSU9cIixcImkvbyBlcnJvclwiXV0sWy0xMDYsW1wiRUlTQ09OTlwiLFwic29ja2V0IGlzIGFscmVhZHkgY29ubmVjdGVkXCJdXSxbLTIxLFtcIkVJU0RJUlwiLFwiaWxsZWdhbCBvcGVyYXRpb24gb24gYSBkaXJlY3RvcnlcIl1dLFstNDAsW1wiRUxPT1BcIixcInRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkXCJdXSxbLTI0LFtcIkVNRklMRVwiLFwidG9vIG1hbnkgb3BlbiBmaWxlc1wiXV0sWy05MCxbXCJFTVNHU0laRVwiLFwibWVzc2FnZSB0b28gbG9uZ1wiXV0sWy0zNixbXCJFTkFNRVRPT0xPTkdcIixcIm5hbWUgdG9vIGxvbmdcIl1dLFstMTAwLFtcIkVORVRET1dOXCIsXCJuZXR3b3JrIGlzIGRvd25cIl1dLFstMTAxLFtcIkVORVRVTlJFQUNIXCIsXCJuZXR3b3JrIGlzIHVucmVhY2hhYmxlXCJdXSxbLTIzLFtcIkVORklMRVwiLFwiZmlsZSB0YWJsZSBvdmVyZmxvd1wiXV0sWy0xMDUsW1wiRU5PQlVGU1wiLFwibm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZVwiXV0sWy0xOSxbXCJFTk9ERVZcIixcIm5vIHN1Y2ggZGV2aWNlXCJdXSxbLTIsW1wiRU5PRU5UXCIsXCJubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCJdXSxbLTEyLFtcIkVOT01FTVwiLFwibm90IGVub3VnaCBtZW1vcnlcIl1dLFstNjQsW1wiRU5PTkVUXCIsXCJtYWNoaW5lIGlzIG5vdCBvbiB0aGUgbmV0d29ya1wiXV0sWy05MixbXCJFTk9QUk9UT09QVFwiLFwicHJvdG9jb2wgbm90IGF2YWlsYWJsZVwiXV0sWy0yOCxbXCJFTk9TUENcIixcIm5vIHNwYWNlIGxlZnQgb24gZGV2aWNlXCJdXSxbLTM4LFtcIkVOT1NZU1wiLFwiZnVuY3Rpb24gbm90IGltcGxlbWVudGVkXCJdXSxbLTEwNyxbXCJFTk9UQ09OTlwiLFwic29ja2V0IGlzIG5vdCBjb25uZWN0ZWRcIl1dLFstMjAsW1wiRU5PVERJUlwiLFwibm90IGEgZGlyZWN0b3J5XCJdXSxbLTM5LFtcIkVOT1RFTVBUWVwiLFwiZGlyZWN0b3J5IG5vdCBlbXB0eVwiXV0sWy04OCxbXCJFTk9UU09DS1wiLFwic29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0XCJdXSxbLTk1LFtcIkVOT1RTVVBcIixcIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHNvY2tldFwiXV0sWy0xLFtcIkVQRVJNXCIsXCJvcGVyYXRpb24gbm90IHBlcm1pdHRlZFwiXV0sWy0zMixbXCJFUElQRVwiLFwiYnJva2VuIHBpcGVcIl1dLFstNzEsW1wiRVBST1RPXCIsXCJwcm90b2NvbCBlcnJvclwiXV0sWy05MyxbXCJFUFJPVE9OT1NVUFBPUlRcIixcInByb3RvY29sIG5vdCBzdXBwb3J0ZWRcIl1dLFstOTEsW1wiRVBST1RPVFlQRVwiLFwicHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0XCJdXSxbLTM0LFtcIkVSQU5HRVwiLFwicmVzdWx0IHRvbyBsYXJnZVwiXV0sWy0zMCxbXCJFUk9GU1wiLFwicmVhZC1vbmx5IGZpbGUgc3lzdGVtXCJdXSxbLTEwOCxbXCJFU0hVVERPV05cIixcImNhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93blwiXV0sWy0yOSxbXCJFU1BJUEVcIixcImludmFsaWQgc2Vla1wiXV0sWy0zLFtcIkVTUkNIXCIsXCJubyBzdWNoIHByb2Nlc3NcIl1dLFstMTEwLFtcIkVUSU1FRE9VVFwiLFwiY29ubmVjdGlvbiB0aW1lZCBvdXRcIl1dLFstMjYsW1wiRVRYVEJTWVwiLFwidGV4dCBmaWxlIGlzIGJ1c3lcIl1dLFstMTgsW1wiRVhERVZcIixcImNyb3NzLWRldmljZSBsaW5rIG5vdCBwZXJtaXR0ZWRcIl1dLFstNDA5NCxbXCJVTktOT1dOXCIsXCJ1bmtub3duIGVycm9yXCJdXSxbLTQwOTUsW1wiRU9GXCIsXCJlbmQgb2YgZmlsZVwiXV0sWy02LFtcIkVOWElPXCIsXCJubyBzdWNoIGRldmljZSBvciBhZGRyZXNzXCJdXSxbLTMxLFtcIkVNTElOS1wiLFwidG9vIG1hbnkgbGlua3NcIl1dLFstMTEyLFtcIkVIT1NURE9XTlwiLFwiaG9zdCBpcyBkb3duXCJdXSxbLTEyMSxbXCJFUkVNT1RFSU9cIixcInJlbW90ZSBJL08gZXJyb3JcIl1dLFstMjUsW1wiRU5PVFRZXCIsXCJpbmFwcHJvcHJpYXRlIGlvY3RsIGZvciBkZXZpY2VcIl1dLFstNDAyOCxbXCJFRlRZUEVcIixcImluYXBwcm9wcmlhdGUgZmlsZSB0eXBlIG9yIGZvcm1hdFwiXV0sWy04NCxbXCJFSUxTRVFcIixcImlsbGVnYWwgYnl0ZSBzZXF1ZW5jZVwiXV1dLFhoPVhSLm1hcCgoW2UsW3RdXSk9Plt0LGVdKSwkdD1uZXcgTWFwKHZlPT09XCJ3aW5kb3dzXCI/S1I6dmU9PT1cImRhcndpblwiP2pSOnZlPT09XCJsaW51eFwiP1hSOlFlKCkpLEQ9bmV3IE1hcCh2ZT09PVwid2luZG93c1wiP0toOnZlPT09XCJkYXJ3aW5cIj9qaDp2ZT09PVwibGludXhcIj9YaDpRZSgpKTt6aD1ELmdldChcIkVBSV9NRU1PUllcIiksUWg9RC5nZXQoXCJVTktOT1dOXCIpLHFoPUQuZ2V0KFwiRUJBREZcIiksWmg9RC5nZXQoXCJFSU5WQUxcIiksSmg9RC5nZXQoXCJFTk9UU09DS1wiKX0pO3ZhciBlTyxRUj1wKCgpPT57cWUoKTtxZSgpO2VPPXsuLi5Ybn19KTt2YXIgbG8sYWk9cCgoKT0+e2xvPShSPT4oUltSLkFTQ0lJPTBdPVwiQVNDSUlcIixSW1IuVVRGOD0xXT1cIlVURjhcIixSW1IuQkFTRTY0PTJdPVwiQkFTRTY0XCIsUltSLlVDUzI9M109XCJVQ1MyXCIsUltSLkJJTkFSWT00XT1cIkJJTkFSWVwiLFJbUi5IRVg9NV09XCJIRVhcIixSW1IuQlVGRkVSPTZdPVwiQlVGRkVSXCIsUltSLkJBU0U2NFVSTD03XT1cIkJBU0U2NFVSTFwiLFJbUi5MQVRJTjE9NF09XCJMQVRJTjFcIixSKSkobG98fHt9KX0pO3ZhciBSaT17fTtyZShSaSx7ZGVmYXVsdDooKT0+dE8sZW5jb2RpbmdzOigpPT5DZX0pO3ZhciBDZSx0TyxsaT1wKCgpPT57YWkoKTtDZT1bXTtDZVswXT1cImFzY2lpXCI7Q2VbMl09XCJiYXNlNjRcIjtDZVs3XT1cImJhc2U2NHVybFwiO0NlWzZdPVwiYnVmZmVyXCI7Q2VbNV09XCJoZXhcIjtDZVs0XT1cImxhdGluMVwiO0NlWzNdPVwidXRmMTZsZVwiO0NlWzFdPVwidXRmOFwiO3RPPXtlbmNvZGluZ3M6Q2V9fSk7dmFyIHVpPXt9O3JlKHVpLHtkZWZhdWx0OigpPT5uTyxpbmRleE9mQnVmZmVyOigpPT5OZSxpbmRleE9mTnVtYmVyOigpPT5FbyxudW1iZXJUb0J5dGVzOigpPT5FaX0pO2Z1bmN0aW9uIEVpKGUpe2lmKGU9PT0wKXJldHVybiBuZXcgVWludDhBcnJheShbMF0pO2xldCB0PVtdO2Zvcih0LnVuc2hpZnQoZSYyNTUpO2U+PTI1NjspZT1lPj4+OCx0LnVuc2hpZnQoZSYyNTUpO3JldHVybiBuZXcgVWludDhBcnJheSh0KX1mdW5jdGlvbiByTyhlLHQscil7cj1yPmUubGVuZ3RoP2UubGVuZ3RoOnI7bGV0IG49ZS5zbGljZSgwLHIrdC5sZW5ndGgpLG89bi5sZW5ndGgtMSxzPXQubGVuZ3RoLTEsaT0tMSxjPTAsYT0tMTtmb3IobGV0IFI9MDtSPD1vO1IrKyl7aWYobltvLVJdPT09dFtzLWNdKWk9PT0tMSYmKGk9UiksYysrO2Vsc2V7Yz0wLGkhPT0tMSYmKFI9aSsxLGk9LTEpO2NvbnRpbnVlfWlmKGM9PT10Lmxlbmd0aCl7YT1SO2JyZWFrfX1yZXR1cm4gYT09PS0xP2E6by1hfWZ1bmN0aW9uIE5lKGUsdCxyLG4sbyl7aWYoIWxvW25dPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBlbmNvZGluZyBjb2RlICR7bn1gKTtyZXR1cm4gbz90Lmxlbmd0aD09PTA/cjw9ZS5sZW5ndGg/cjplLmxlbmd0aDpNYShlLHQscik6KHI8MCYmKHI9ZS5sZW5ndGgrciksdC5sZW5ndGg9PT0wP3I8PWUubGVuZ3RoP3I6ZS5sZW5ndGg6ck8oZSx0LHIpKX1mdW5jdGlvbiBFbyhlLHQscixuKXtpZihFaSh0KS5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoXCJNdWx0aSBieXRlIG51bWJlciBzZWFyY2ggaXMgbm90IHN1cHBvcnRlZFwiKTtyZXR1cm4gTmUoZSxFaSh0KSxyLDEsbil9dmFyIG5PLHVvPXAoKCk9PnthaSgpO1NzKCk7bk89e2luZGV4T2ZCdWZmZXI6TmUsaW5kZXhPZk51bWJlcjpFb319KTtmdW5jdGlvbiBRcihlKXtsZXQgdD10eXBlb2YgZT09XCJzdHJpbmdcIj9uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZSk6ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/ZTpuZXcgVWludDhBcnJheShlKSxyPVwiXCIsbixvPXQubGVuZ3RoO2ZvcihuPTI7bjxvO24rPTMpcis9X3RbdFtuLTJdPj4yXSxyKz1fdFsodFtuLTJdJjMpPDw0fHRbbi0xXT4+NF0scis9X3RbKHRbbi0xXSYxNSk8PDJ8dFtuXT4+Nl0scis9X3RbdFtuXSY2M107cmV0dXJuIG49PT1vKzEmJihyKz1fdFt0W24tMl0+PjJdLHIrPV90Wyh0W24tMl0mMyk8PDRdLHIrPVwiPT1cIiksbj09PW8mJihyKz1fdFt0W24tMl0+PjJdLHIrPV90Wyh0W24tMl0mMyk8PDR8dFtuLTFdPj40XSxyKz1fdFsodFtuLTFdJjE1KTw8Ml0scis9XCI9XCIpLHJ9ZnVuY3Rpb24gX28oZSl7bGV0IHQ9YXRvYihlKSxyPXQubGVuZ3RoLG49bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCBvPTA7bzxyO28rKyluW29dPXQuY2hhckNvZGVBdChvKTtyZXR1cm4gbn12YXIgX3QsZm89cCgoKT0+e190PVtcIkFcIixcIkJcIixcIkNcIixcIkRcIixcIkVcIixcIkZcIixcIkdcIixcIkhcIixcIklcIixcIkpcIixcIktcIixcIkxcIixcIk1cIixcIk5cIixcIk9cIixcIlBcIixcIlFcIixcIlJcIixcIlNcIixcIlRcIixcIlVcIixcIlZcIixcIldcIixcIlhcIixcIllcIixcIlpcIixcImFcIixcImJcIixcImNcIixcImRcIixcImVcIixcImZcIixcImdcIixcImhcIixcImlcIixcImpcIixcImtcIixcImxcIixcIm1cIixcIm5cIixcIm9cIixcInBcIixcInFcIixcInJcIixcInNcIixcInRcIixcInVcIixcInZcIixcIndcIixcInhcIixcInlcIixcInpcIixcIjBcIixcIjFcIixcIjJcIixcIjNcIixcIjRcIixcIjVcIixcIjZcIixcIjdcIixcIjhcIixcIjlcIixcIitcIixcIi9cIl19KTtmdW5jdGlvbiBvTyhlKXtpZihlLmxlbmd0aCU0PT09MilyZXR1cm4gZStcIj09XCI7aWYoZS5sZW5ndGglND09PTMpcmV0dXJuIGUrXCI9XCI7aWYoZS5sZW5ndGglND09PTEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyFcIik7cmV0dXJuIGV9ZnVuY3Rpb24gc08oZSl7aWYoIS9eWy1fQS1aMC05XSo/PXswLDJ9JC9pLnRlc3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBkZWNvZGUgYmFzZTY0dXJsOiBpbnZhbGlkIGNoYXJhY3RlclwiKTtyZXR1cm4gb08oZSkucmVwbGFjZSgvXFwtL2csXCIrXCIpLnJlcGxhY2UoL18vZyxcIi9cIil9ZnVuY3Rpb24gaU8oZSl7cmV0dXJuIGUucmVwbGFjZSgvPS9nLFwiXCIpLnJlcGxhY2UoL1xcKy9nLFwiLVwiKS5yZXBsYWNlKC9cXC8vZyxcIl9cIil9ZnVuY3Rpb24gZmkoZSl7cmV0dXJuIGlPKFFyKGUpKX1mdW5jdGlvbiBxUihlKXtyZXR1cm4gX28oc08oZSkpfXZhciBwaT1wKCgpPT57Zm8oKX0pO2Z1bmN0aW9uIGhyKGUpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaChlLmNoYXJDb2RlQXQocikmMjU1KTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodCl9ZnVuY3Rpb24gcG8oZSl7cmV0dXJuIGU9SlIoZSksZT1lLnJlcGxhY2VBbGwoXCItXCIsXCIrXCIpLnJlcGxhY2VBbGwoXCJfXCIsXCIvXCIpLF9vKGUpfWZ1bmN0aW9uIEpSKGUpe2lmKGU9ZS5zcGxpdChcIj1cIilbMF0sZT1lLnRyaW0oKS5yZXBsYWNlKGNPLFwiXCIpLGUubGVuZ3RoPDIpcmV0dXJuXCJcIjtmb3IoO2UubGVuZ3RoJTQhPT0wOyllPWUrXCI9XCI7cmV0dXJuIGV9ZnVuY3Rpb24gaG8oZSl7cmV0dXJuIGU9SlIoZSksZT1lLnJlcGxhY2VBbGwoXCIrXCIsXCItXCIpLnJlcGxhY2VBbGwoXCIvXCIsXCJfXCIpLHFSKGUpfWZ1bmN0aW9uIE9vKGUpe2xldCB0PW5ldyBVaW50OEFycmF5KE1hdGguZmxvb3IoKGV8fFwiXCIpLmxlbmd0aC8yKSkscjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj1OdW1iZXIucGFyc2VJbnQoZVtyKjJdLDE2KSxvPU51bWJlci5wYXJzZUludChlW3IqMisxXSwxNik7aWYoTnVtYmVyLmlzTmFOKG4pJiZOdW1iZXIuaXNOYU4obykpYnJlYWs7dFtyXT1uPDw0fG99cmV0dXJuIG5ldyBVaW50OEFycmF5KHI9PT10Lmxlbmd0aD90OnQuc2xpY2UoMCxyKSl9ZnVuY3Rpb24gcXIoZSx0KXtsZXQgcixuLG8scz1bXTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK2kpcj1lLmNoYXJDb2RlQXQoaSksbj1yPj44LG89ciUyNTYscy5wdXNoKG8pLHMucHVzaChuKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocyl9ZnVuY3Rpb24gZGkoZSl7bGV0IHQ9XCJcIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbcl0mMTI3KTtyZXR1cm4gdH1mdW5jdGlvbiBoaShlKXtsZXQgdD1cIlwiO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGgtMTtyKz0yKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXStlW3IrMV0qMjU2KTtyZXR1cm4gdH12YXIgY08sT2k9cCgoKT0+e2ZvKCk7cGkoKTtjTz0vW14rLzAtOUEtWmEtei1fXS9nfSk7ZnVuY3Rpb24gcmwoZSx0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzVdO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LGUubGVuZ3RoLTYpLHIrZVsrK3RdKjIqKjgrZVsrK3RdKjIqKjE2K2VbKyt0XSoyKioyNCsoZVsrK3RdK24qMioqOCkqMioqMzJ9ZnVuY3Rpb24gbmwoZSx0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzRdO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LGUubGVuZ3RoLTUpLHIrZVsrK3RdKjIqKjgrZVsrK3RdKjIqKjE2K2VbKyt0XSoyKioyNCtuKjIqKjMyfWZ1bmN0aW9uIG9sKGUsdD0wKXtVKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCsyXTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkwodCxlLmxlbmd0aC0zKSxyK2VbKyt0XSoyKio4K24qMioqMTZ9ZnVuY3Rpb24gc2woZSx0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzVdO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LGUubGVuZ3RoLTYpLChyKjIqKjgrZVsrK3RdKSoyKiozMitlWysrdF0qMioqMjQrZVsrK3RdKjIqKjE2K2VbKyt0XSoyKio4K259ZnVuY3Rpb24gaWwoZSx0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzRdO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LGUubGVuZ3RoLTUpLHIqMioqMzIrZVsrK3RdKjIqKjI0K2VbKyt0XSoyKioxNitlWysrdF0qMioqOCtufWZ1bmN0aW9uIGNsKGUsdD0wKXtVKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCsyXTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkwodCxlLmxlbmd0aC0zKSxyKjIqKjE2K2VbKyt0XSoyKio4K259ZnVuY3Rpb24gYWwoZT0wKXtVKGUsXCJvZmZzZXRcIik7bGV0IHQ9dGhpc1tlXSxyPXRoaXNbZSsxXTtyZXR1cm4odD09PXZvaWQgMHx8cj09PXZvaWQgMCkmJkwoZSx0aGlzLmxlbmd0aC0yKSx0KjIqKjgrcn1mdW5jdGlvbiBSbChlPTApe1UoZSxcIm9mZnNldFwiKTtsZXQgdD10aGlzW2VdLHI9dGhpc1tlKzNdO3JldHVybih0PT09dm9pZCAwfHxyPT09dm9pZCAwKSYmTChlLHRoaXMubGVuZ3RoLTQpLHQqMioqMjQrdGhpc1srK2VdKjIqKjE2K3RoaXNbKytlXSoyKio4K3J9ZnVuY3Rpb24gU2koZSx0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzddO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LGUubGVuZ3RoLTgpLFZbN109cixWWzZdPWVbKyt0XSxWWzVdPWVbKyt0XSxWWzRdPWVbKyt0XSxWWzNdPWVbKyt0XSxWWzJdPWVbKyt0XSxWWzFdPWVbKyt0XSxWWzBdPW4sWnJbMF19ZnVuY3Rpb24gQWkoZSx0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzddO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LGUubGVuZ3RoLTgpLFZbMF09cixWWzFdPWVbKyt0XSxWWzJdPWVbKyt0XSxWWzNdPWVbKyt0XSxWWzRdPWVbKyt0XSxWWzVdPWVbKyt0XSxWWzZdPWVbKyt0XSxWWzddPW4sWnJbMF19ZnVuY3Rpb24gTmkoZSx0LHI9MCl7cmV0dXJuIHQ9K3QsZW4oZSxyLDcpLFpyWzBdPXQsZVtyKytdPVZbMF0sZVtyKytdPVZbMV0sZVtyKytdPVZbMl0sZVtyKytdPVZbM10sZVtyKytdPVZbNF0sZVtyKytdPVZbNV0sZVtyKytdPVZbNl0sZVtyKytdPVZbN10scn1mdW5jdGlvbiB4aShlLHQscj0wKXtyZXR1cm4gdD0rdCxlbihlLHIsNyksWnJbMF09dCxlW3IrK109Vls3XSxlW3IrK109Vls2XSxlW3IrK109Vls1XSxlW3IrK109Vls0XSxlW3IrK109VlszXSxlW3IrK109VlsyXSxlW3IrK109VlsxXSxlW3IrK109VlswXSxyfWZ1bmN0aW9uIFRpKGUsdD0wKXtVKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCszXTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkwodCxlLmxlbmd0aC00KSxpZVszXT1yLGllWzJdPWVbKyt0XSxpZVsxXT1lWysrdF0saWVbMF09bixPclswXX1mdW5jdGlvbiBJaShlLHQ9MCl7VSh0LFwib2Zmc2V0XCIpO2xldCByPWVbdF0sbj1lW3QrM107cmV0dXJuKHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZMKHQsZS5sZW5ndGgtNCksaWVbMF09cixpZVsxXT1lWysrdF0saWVbMl09ZVsrK3RdLGllWzNdPW4sT3JbMF19ZnVuY3Rpb24gZ2koZSx0LHI9MCl7cmV0dXJuIHQ9K3QsZW4oZSxyLDMpLE9yWzBdPXQsZVtyKytdPWllWzBdLGVbcisrXT1pZVsxXSxlW3IrK109aWVbMl0sZVtyKytdPWllWzNdLHJ9ZnVuY3Rpb24gbWkoZSx0LHI9MCl7cmV0dXJuIHQ9K3QsZW4oZSxyLDMpLE9yWzBdPXQsZVtyKytdPWllWzNdLGVbcisrXT1pZVsyXSxlW3IrK109aWVbMV0sZVtyKytdPWllWzBdLHJ9ZnVuY3Rpb24gbGwoZSx0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzJdOyhyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LGUubGVuZ3RoLTMpO2xldCBvPXIrZVsrK3RdKjIqKjgrbioyKioxNjtyZXR1cm4gb3wobyYyKioyMykqNTEwfWZ1bmN0aW9uIEVsKGUsdD0wKXtVKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCs0XTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkwodCxlLmxlbmd0aC01KSwobnwobiYyKio3KSozMzU1NDQzMCkqMioqMzIrcitlWysrdF0qMioqOCtlWysrdF0qMioqMTYrZVsrK3RdKjIqKjI0fWZ1bmN0aW9uIHVsKGUsdD0wKXtVKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCs1XTsocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkwodCxlLmxlbmd0aC02KTtsZXQgbz1lW3QrNF0rbioyKio4O3JldHVybihvfChvJjIqKjE1KSoxMzEwNzApKjIqKjMyK3IrZVsrK3RdKjIqKjgrZVsrK3RdKjIqKjE2K2VbKyt0XSoyKioyNH1mdW5jdGlvbiBfbChlLHQ9MCl7VSh0LFwib2Zmc2V0XCIpO2xldCByPWVbdF0sbj1lW3QrMl07KHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZMKHQsZS5sZW5ndGgtMyk7bGV0IG89cioyKioxNitlWysrdF0qMioqOCtuO3JldHVybiBvfChvJjIqKjIzKSo1MTB9ZnVuY3Rpb24gZmwoZSx0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj1lW3RdLG49ZVt0KzVdOyhyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LGUubGVuZ3RoLTYpO2xldCBvPWVbKyt0XStyKjIqKjg7cmV0dXJuKG98KG8mMioqMTUpKjEzMTA3MCkqMioqMzIrZVsrK3RdKjIqKjI0K2VbKyt0XSoyKioxNitlWysrdF0qMioqOCtufWZ1bmN0aW9uIHBsKGUsdD0wKXtVKHQsXCJvZmZzZXRcIik7bGV0IHI9ZVt0XSxuPWVbdCs0XTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkwodCxlLmxlbmd0aC01KSwocnwociYyKio3KSozMzU1NDQzMCkqMioqMzIrZVsrK3RdKjIqKjI0K2VbKyt0XSoyKioxNitlWysrdF0qMioqOCtufWZ1bmN0aW9uIFNvKGUpe3JldHVybiB0bC5lbmNvZGUoZSkubGVuZ3RofWZ1bmN0aW9uIGVsKGUsdCl7cmV0dXJuIGUuY2hhckNvZGVBdCh0LTEpPT09NjEmJnQtLSx0PjEmJmUuY2hhckNvZGVBdCh0LTEpPT09NjEmJnQtLSx0KjM+Pj4yfWZ1bmN0aW9uIEpyKGUpe3N3aXRjaChlPVN0cmluZyhlKS50b0xvd2VyQ2FzZSgpLGUubGVuZ3RoKXtjYXNlIDQ6aWYoZT09PVwidXRmOFwiKXJldHVybiBMZS51dGY4O2lmKGU9PT1cInVjczJcIilyZXR1cm4gTGUudWNzMjticmVhaztjYXNlIDU6aWYoZT09PVwidXRmLThcIilyZXR1cm4gTGUudXRmODtpZihlPT09XCJhc2NpaVwiKXJldHVybiBMZS5hc2NpaTtpZihlPT09XCJ1Y3MtMlwiKXJldHVybiBMZS51Y3MyO2JyZWFrO2Nhc2UgNzppZihlPT09XCJ1dGYxNmxlXCIpcmV0dXJuIExlLnV0ZjE2bGU7YnJlYWs7Y2FzZSA4OmlmKGU9PT1cInV0Zi0xNmxlXCIpcmV0dXJuIExlLnV0ZjE2bGU7YnJlYWs7Y2FzZSA2OmlmKGU9PT1cImxhdGluMVwifHxlPT09XCJiaW5hcnlcIilyZXR1cm4gTGUubGF0aW4xO2lmKGU9PT1cImJhc2U2NFwiKXJldHVybiBMZS5iYXNlNjQ7Y2FzZSAzOmlmKGU9PT1cImhleFwiKXJldHVybiBMZS5oZXg7YnJlYWs7Y2FzZSA5OmlmKGU9PT1cImJhc2U2NHVybFwiKXJldHVybiBMZS5iYXNlNjR1cmw7YnJlYWt9fWZ1bmN0aW9uIGRsKGUsdCxyLG4sbyl7by1uPnQubGVuZ3RoLXImJihvPW4rdC5sZW5ndGgtcik7bGV0IHM9by1uLGk9ZS5sZW5ndGgtbjtyZXR1cm4gcz5pJiYocz1pKSwobiE9PTB8fG88ZS5sZW5ndGgpJiYoZT1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQrbixzKSksdC5zZXQoZSxyKSxzfWZ1bmN0aW9uIEwoZSx0LHIpe3Rocm93IE1hdGguZmxvb3IoZSkhPT1lPyhVKGUsciksbmV3IEkuRVJSX09VVF9PRl9SQU5HRShyfHxcIm9mZnNldFwiLFwiYW4gaW50ZWdlclwiLGUpKTp0PDA/bmV3IEkuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyBJLkVSUl9PVVRfT0ZfUkFOR0Uocnx8XCJvZmZzZXRcIixgPj0gJHtyPzE6MH0gYW5kIDw9ICR7dH1gLGUpfWZ1bmN0aW9uIFUoZSx0KXtpZih0eXBlb2YgZSE9XCJudW1iZXJcIil0aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0LFwibnVtYmVyXCIsZSl9ZnVuY3Rpb24gZW4oZSx0LHIpe1UodCxcIm9mZnNldFwiKSwoZVt0XT09PXZvaWQgMHx8ZVt0K3JdPT09dm9pZCAwKSYmTCh0LGUubGVuZ3RoLShyKzEpKX1mdW5jdGlvbiBXZShlLHQscixuLG8scyl7aWYoZT5yfHxlPHQpe2xldCBpPXR5cGVvZiB0PT1cImJpZ2ludFwiP1wiblwiOlwiXCIsYzt0aHJvdyBzPjM/dD09PTB8fHQ9PT0wbj9jPWA+PSAwJHtpfSBhbmQgPCAyJHtpfSAqKiAkeyhzKzEpKjh9JHtpfWA6Yz1gPj0gLSgyJHtpfSAqKiAkeyhzKzEpKjgtMX0ke2l9KSBhbmQgPCAyJHtpfSAqKiAkeyhzKzEpKjgtMX0ke2l9YDpjPWA+PSAke3R9JHtpfSBhbmQgPD0gJHtyfSR7aX1gLG5ldyBJLkVSUl9PVVRfT0ZfUkFOR0UoXCJ2YWx1ZVwiLGMsZSl9ZW4obixvLHMpfWZ1bmN0aW9uIEFvKGUsdCl7cmV0dXJuIGU9K2UsIU51bWJlci5pc05hTihlKSYmZT49TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVImJmU8PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSP2UlMT09PTA/ZTpNYXRoLmZsb29yKGUpOnR9ZnVuY3Rpb24gdnQoZSx0LHIsbixvKXtpZih0PSt0LFUocixcIm9mZnNldFwiKSx0Pm98fHQ8bil0aHJvdyBuZXcgSS5FUlJfT1VUX09GX1JBTkdFKFwidmFsdWVcIixgPj0gJHtufSBhbmQgPD0gJHtvfWAsdCk7cmV0dXJuIGVbcl09PT12b2lkIDAmJkwocixlLmxlbmd0aC0xKSxlW3JdPXQscisxfWZ1bmN0aW9uIHRuKGUsdCxyLG4sbyl7cmV0dXJuIHQ9K3QsV2UodCxuLG8sZSxyLDEpLGVbcisrXT10Pj4+OCxlW3IrK109dCxyfWZ1bmN0aW9uIGhsKGUsdCxyLG4sbyl7cmV0dXJuIHQ9K3QsV2UodCxuLG8sZSxyLDMpLGVbcisrXT10LHQ9dD4+PjgsZVtyKytdPXQsdD10Pj4+OCxlW3IrK109dCx0PXQ+Pj44LGVbcisrXT10LHJ9ZnVuY3Rpb24gcm4oZSx0LHIsbixvKXtyZXR1cm4gdD0rdCxXZSh0LG4sbyxlLHIsMSksZVtyKytdPXQsZVtyKytdPXQ+Pj44LHJ9ZnVuY3Rpb24gT2woZSx0LHIsbixvKXtyZXR1cm4gdD0rdCxXZSh0LG4sbyxlLHIsMyksZVtyKzNdPXQsdD10Pj4+OCxlW3IrMl09dCx0PXQ+Pj44LGVbcisxXT10LHQ9dD4+PjgsZVtyXT10LHIrNH1mdW5jdGlvbiBEaShlLHQscixuLG8pe3Q9K3QsV2UodCxuLG8sZSxyLDUpO2xldCBzPU1hdGguZmxvb3IodCoyKiotMzIpO3JldHVybiBlW3IrK109cz4+PjgsZVtyKytdPXMsZVtyKzNdPXQsdD10Pj4+OCxlW3IrMl09dCx0PXQ+Pj44LGVbcisxXT10LHQ9dD4+PjgsZVtyXT10LHIrNH1mdW5jdGlvbiB5aShlLHQscixuLG8pe3JldHVybiB0PSt0LFdlKHQsbixvLGUsciw0KSxlW3IrK109TWF0aC5mbG9vcih0KjIqKi0zMiksZVtyKzNdPXQsdD10Pj4+OCxlW3IrMl09dCx0PXQ+Pj44LGVbcisxXT10LHQ9dD4+PjgsZVtyXT10LHIrNH1mdW5jdGlvbiBObyhlLHQscixuLG8pe3JldHVybiB0PSt0LFdlKHQsbixvLGUsciwzKSxlW3IrM109dCx0PXQ+Pj44LGVbcisyXT10LHQ9dD4+PjgsZVtyKzFdPXQsdD10Pj4+OCxlW3JdPXQscis0fWZ1bmN0aW9uIGJpKGUsdCxyLG4sbyl7cmV0dXJuIHQ9K3QsV2UodCxuLG8sZSxyLDIpLGVbcisyXT10LHQ9dD4+PjgsZVtyKzFdPXQsdD10Pj4+OCxlW3JdPXQsciszfWZ1bmN0aW9uIGJ0KGUsdCxyPTAsbj1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUil7aWYodHlwZW9mIGUhPVwibnVtYmVyXCIpdGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1RZUEUodCxcIm51bWJlclwiLGUpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBJLkVSUl9PVVRfT0ZfUkFOR0UodCxcImFuIGludGVnZXJcIixlKTtpZihlPHJ8fGU+bil0aHJvdyBuZXcgSS5FUlJfT1VUX09GX1JBTkdFKHQsYD49ICR7cn0gJiYgPD0gJHtufWAsZSl9ZnVuY3Rpb24gQ2koZSx0LHIsbixvKXt0PSt0LFdlKHQsbixvLGUsciw1KTtsZXQgcz1NYXRoLmZsb29yKHQqMioqLTMyKTtyZXR1cm4gZVtyKytdPXQsdD10Pj4+OCxlW3IrK109dCx0PXQ+Pj44LGVbcisrXT10LHQ9dD4+PjgsZVtyKytdPXQsZVtyKytdPXMsZVtyKytdPXM+Pj44LHJ9ZnVuY3Rpb24gTGkoZSx0LHIsbixvKXt0PSt0LFdlKHQsbixvLGUsciw0KTtsZXQgcz10O3JldHVybiBlW3IrK109dCx0PXQ+Pj44LGVbcisrXT10LHQ9dD4+PjgsZVtyKytdPXQsdD10Pj4+OCxlW3IrK109dCxlW3IrK109TWF0aC5mbG9vcihzKjIqKi0zMikscn1mdW5jdGlvbiB4byhlLHQscixuLG8pe3JldHVybiB0PSt0LFdlKHQsbixvLGUsciwzKSxlW3IrK109dCx0PXQ+Pj44LGVbcisrXT10LHQ9dD4+PjgsZVtyKytdPXQsdD10Pj4+OCxlW3IrK109dCxyfWZ1bmN0aW9uIHdpKGUsdCxyLG4sbyl7cmV0dXJuIHQ9K3QsV2UodCxuLG8sZSxyLDIpLGVbcisrXT10LHQ9dD4+PjgsZVtyKytdPXQsdD10Pj4+OCxlW3IrK109dCxyfXZhciB0bCxPcixpZSxacixWLGZ0LHRlLExlLFNsPXAoKCk9PntWdCgpO2xpKCk7dW8oKTtPaSgpO3RsPW5ldyBUZXh0RW5jb2RlcixPcj1uZXcgRmxvYXQzMkFycmF5KDEpLGllPW5ldyBVaW50OEFycmF5KE9yLmJ1ZmZlciksWnI9bmV3IEZsb2F0NjRBcnJheSgxKSxWPW5ldyBVaW50OEFycmF5KFpyLmJ1ZmZlcik7T3JbMF09LTE7ZnQ9aWVbM109PT0wO3RlPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPTA7ZTxDZS5sZW5ndGg7KytlKXRlW0NlW2VdXT1lO0xlPXthc2NpaTp7Ynl0ZUxlbmd0aDplPT5lLmxlbmd0aCxlbmNvZGluZzpcImFzY2lpXCIsZW5jb2RpbmdWYWw6dGUuYXNjaWksaW5kZXhPZjooZSx0LHIsbik9Pk5lKGUsaHIodCkscix0ZS5hc2NpaSxuKSxzbGljZTooZSx0LHIpPT5lLmFzY2lpU2xpY2UodCxyKSx3cml0ZTooZSx0LHIsbik9PmUuYXNjaWlXcml0ZSh0LHIsbil9LGJhc2U2NDp7Ynl0ZUxlbmd0aDplPT5lbChlLGUubGVuZ3RoKSxlbmNvZGluZzpcImJhc2U2NFwiLGVuY29kaW5nVmFsOnRlLmJhc2U2NCxpbmRleE9mOihlLHQscixuKT0+TmUoZSxwbyh0KSxyLHRlLmJhc2U2NCxuKSxzbGljZTooZSx0LHIpPT5lLmJhc2U2NFNsaWNlKHQsciksd3JpdGU6KGUsdCxyLG4pPT5lLmJhc2U2NFdyaXRlKHQscixuKX0sYmFzZTY0dXJsOntieXRlTGVuZ3RoOmU9PmVsKGUsZS5sZW5ndGgpLGVuY29kaW5nOlwiYmFzZTY0dXJsXCIsZW5jb2RpbmdWYWw6dGUuYmFzZTY0dXJsLGluZGV4T2Y6KGUsdCxyLG4pPT5OZShlLGhvKHQpLHIsdGUuYmFzZTY0dXJsLG4pLHNsaWNlOihlLHQscik9PmUuYmFzZTY0dXJsU2xpY2UodCxyKSx3cml0ZTooZSx0LHIsbik9PmUuYmFzZTY0dXJsV3JpdGUodCxyLG4pfSxoZXg6e2J5dGVMZW5ndGg6ZT0+ZS5sZW5ndGg+Pj4xLGVuY29kaW5nOlwiaGV4XCIsZW5jb2RpbmdWYWw6dGUuaGV4LGluZGV4T2Y6KGUsdCxyLG4pPT5OZShlLE9vKHQpLHIsdGUuaGV4LG4pLHNsaWNlOihlLHQscik9PmUuaGV4U2xpY2UodCxyKSx3cml0ZTooZSx0LHIsbik9PmUuaGV4V3JpdGUodCxyLG4pfSxsYXRpbjE6e2J5dGVMZW5ndGg6ZT0+ZS5sZW5ndGgsZW5jb2Rpbmc6XCJsYXRpbjFcIixlbmNvZGluZ1ZhbDp0ZS5sYXRpbjEsaW5kZXhPZjooZSx0LHIsbik9Pk5lKGUsaHIodCkscix0ZS5sYXRpbjEsbiksc2xpY2U6KGUsdCxyKT0+ZS5sYXRpbjFTbGljZSh0LHIpLHdyaXRlOihlLHQscixuKT0+ZS5sYXRpbjFXcml0ZSh0LHIsbil9LHVjczI6e2J5dGVMZW5ndGg6ZT0+ZS5sZW5ndGgqMixlbmNvZGluZzpcInVjczJcIixlbmNvZGluZ1ZhbDp0ZS51dGYxNmxlLGluZGV4T2Y6KGUsdCxyLG4pPT5OZShlLHFyKHQpLHIsdGUudXRmMTZsZSxuKSxzbGljZTooZSx0LHIpPT5lLnVjczJTbGljZSh0LHIpLHdyaXRlOihlLHQscixuKT0+ZS51Y3MyV3JpdGUodCxyLG4pfSx1dGY4OntieXRlTGVuZ3RoOlNvLGVuY29kaW5nOlwidXRmOFwiLGVuY29kaW5nVmFsOnRlLnV0ZjgsaW5kZXhPZjooZSx0LHIsbik9Pk5lKGUsdGwuZW5jb2RlKHQpLHIsdGUudXRmOCxuKSxzbGljZTooZSx0LHIpPT5lLnV0ZjhTbGljZSh0LHIpLHdyaXRlOihlLHQscixuKT0+ZS51dGY4V3JpdGUodCxyLG4pfSx1dGYxNmxlOntieXRlTGVuZ3RoOmU9PmUubGVuZ3RoKjIsZW5jb2Rpbmc6XCJ1dGYxNmxlXCIsZW5jb2RpbmdWYWw6dGUudXRmMTZsZSxpbmRleE9mOihlLHQscixuKT0+TmUoZSxxcih0KSxyLHRlLnV0ZjE2bGUsbiksc2xpY2U6KGUsdCxyKT0+ZS51Y3MyU2xpY2UodCxyKSx3cml0ZTooZSx0LHIsbik9PmUudWNzMldyaXRlKHQscixuKX19fSk7ZnVuY3Rpb24gbm4oZSl7aWYoZT5LdCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTtsZXQgdD1uZXcgVWludDhBcnJheShlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHQsXy5wcm90b3R5cGUpLHR9ZnVuY3Rpb24gXyhlLHQscil7aWYodHlwZW9mIGU9PVwibnVtYmVyXCIpe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXRocm93IG5ldyBJLkVSUl9JTlZBTElEX0FSR19UWVBFKFwic3RyaW5nXCIsXCJzdHJpbmdcIixlKTtyZXR1cm4ga2koZSl9cmV0dXJuIFVpKGUsdCxyKX1mdW5jdGlvbiBVaShlLHQscil7aWYodHlwZW9mIGU9PVwic3RyaW5nXCIpcmV0dXJuIE5sKGUsdCk7aWYodHlwZW9mIGU9PVwib2JqZWN0XCImJmUhPT1udWxsKXtpZihtdChlKSlyZXR1cm4gRU8oZSx0LHIpO2xldCBuPWUudmFsdWVPZiYmZS52YWx1ZU9mKCk7aWYobiE9bnVsbCYmbiE9PWUmJih0eXBlb2Ygbj09XCJzdHJpbmdcInx8dHlwZW9mIG49PVwib2JqZWN0XCIpKXJldHVybiBVaShuLHQscik7bGV0IG89bE8oZSk7aWYobylyZXR1cm4gbztpZih0eXBlb2YgZVtTeW1ib2wudG9QcmltaXRpdmVdPT1cImZ1bmN0aW9uXCIpe2xldCBzPWVbU3ltYm9sLnRvUHJpbWl0aXZlXShcInN0cmluZ1wiKTtpZih0eXBlb2Ygcz09XCJzdHJpbmdcIilyZXR1cm4gTmwocyx0KX19dGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJmaXJzdCBhcmd1bWVudFwiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJBcnJheUJ1ZmZlclwiLFwiQXJyYXlcIixcIkFycmF5LWxpa2UgT2JqZWN0XCJdLGUpfWZ1bmN0aW9uIE1pKGUpe2lmKFUoZSxcInNpemVcIiksIShlPj0wJiZlPD1LdCkpdGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1ZBTFVFLlJhbmdlRXJyb3IoXCJzaXplXCIsZSl9ZnVuY3Rpb24gUk8oZSx0LHIpe01pKGUpO2xldCBuPW5uKGUpO2lmKHQhPT12b2lkIDApe2lmKHIhPT12b2lkIDAmJnR5cGVvZiByIT1cInN0cmluZ1wiKXRocm93IG5ldyBJLkVSUl9JTlZBTElEX0FSR19UWVBFKFwiZW5jb2RpbmdcIixcInN0cmluZ1wiLHIpO3JldHVybiBuLmZpbGwodCxyKX1yZXR1cm4gbn1mdW5jdGlvbiBraShlKXtyZXR1cm4gTWkoZSksbm4oZTwwPzA6SWwoZSl8MCl9ZnVuY3Rpb24gTmwoZSx0KXtpZigodHlwZW9mIHQhPVwic3RyaW5nXCJ8fHQ9PT1cIlwiKSYmKHQ9XCJ1dGY4XCIpLCFfLmlzRW5jb2RpbmcodCkpdGhyb3cgbmV3IEkuRVJSX1VOS05PV05fRU5DT0RJTkcodCk7bGV0IHI9Z2woZSx0KXwwLG49bm4ociksbz1uLndyaXRlKGUsdCk7cmV0dXJuIG8hPT1yJiYobj1uLnNsaWNlKDAsbykpLG59ZnVuY3Rpb24geGwoZSl7bGV0IHQ9ZS5sZW5ndGg8MD8wOklsKGUubGVuZ3RoKXwwLHI9bm4odCk7Zm9yKGxldCBuPTA7bjx0O24rPTEpcltuXT1lW25dJjI1NTtyZXR1cm4gcn1mdW5jdGlvbiBsTyhlKXtpZihlLmxlbmd0aCE9PXZvaWQgMHx8bXQoZS5idWZmZXIpKXJldHVybiB0eXBlb2YgZS5sZW5ndGghPVwibnVtYmVyXCI/bm4oMCk6eGwoZSk7aWYoZS50eXBlPT09XCJCdWZmZXJcIiYmQXJyYXkuaXNBcnJheShlLmRhdGEpKXJldHVybiB4bChlLmRhdGEpfWZ1bmN0aW9uIElsKGUpe2lmKGU+PUt0KXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK0t0LnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKTtyZXR1cm4gZXwwfWZ1bmN0aW9uIEJpKGUpe3JldHVybiBNaShlKSxfLmFsbG9jKCtlKX1mdW5jdGlvbiBnbChlLHQpe2lmKHR5cGVvZiBlIT1cInN0cmluZ1wiKXtpZihscihlKXx8bXQoZSkpcmV0dXJuIGUuYnl0ZUxlbmd0aDt0aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9BUkdfVFlQRShcInN0cmluZ1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJBcnJheUJ1ZmZlclwiXSxlKX1sZXQgcj1lLmxlbmd0aCxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdPT09ITA7aWYoIW4mJnI9PT0wKXJldHVybiAwO2lmKCF0KXJldHVybiBuPy0xOlNvKGUpO2xldCBvPUpyKHQpO3JldHVybiBvPT09dm9pZCAwP24/LTE6U28oZSk6by5ieXRlTGVuZ3RoKGUpfWZ1bmN0aW9uIFl0KGUsdCxyKXtsZXQgbj1lW3RdO2VbdF09ZVtyXSxlW3JdPW59ZnVuY3Rpb24gbWwoZSx0LHIsbixvKXtpZihkUihlKSx0eXBlb2Ygcj09XCJzdHJpbmdcIj8obj1yLHI9dm9pZCAwKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLE51bWJlci5pc05hTihyKSYmKHI9bz8wOmUubGVuZ3RofHxlLmJ5dGVMZW5ndGgpLG89ISFvLHR5cGVvZiB0PT1cIm51bWJlclwiKXJldHVybiBFbyhlLHQ+Pj4wLHIsbyk7bGV0IHM7aWYobj09PXZvaWQgMD9zPUxlLnV0Zjg6cz1KcihuKSx0eXBlb2YgdD09XCJzdHJpbmdcIil7aWYocz09PXZvaWQgMCl0aHJvdyBuZXcgSS5FUlJfVU5LTk9XTl9FTkNPRElORyhuKTtyZXR1cm4gcy5pbmRleE9mKGUsdCxyLG8pfWlmKGtlKHQpKXtsZXQgaT1zPT09dm9pZCAwP3RlLnV0Zjg6cy5lbmNvZGluZ1ZhbDtyZXR1cm4gTmUoZSx0LHIsaSxvKX10aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9BUkdfVFlQRShcInZhbHVlXCIsW1wibnVtYmVyXCIsXCJzdHJpbmdcIixcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0KX1mdW5jdGlvbiBFTyhlLHQscil7dD09PXZvaWQgMD90PTA6KHQ9K3QsTnVtYmVyLmlzTmFOKHQpJiYodD0wKSk7bGV0IG49ZS5ieXRlTGVuZ3RoLXQ7aWYobjwwKXRocm93IG5ldyBJLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyhcIm9mZnNldFwiKTtpZihyPT09dm9pZCAwKXI9bjtlbHNlIGlmKHI9K3Iscj4wKXtpZihyPm4pdGhyb3cgbmV3IEkuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTKFwibGVuZ3RoXCIpfWVsc2Ugcj0wO2xldCBvPW5ldyBVaW50OEFycmF5KGUsdCxyKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG8sXy5wcm90b3R5cGUpLG99ZnVuY3Rpb24gdU8oZSx0LHIpe3I9TWF0aC5taW4oZS5sZW5ndGgscik7bGV0IG49W10sbz10O2Zvcig7bzxyOyl7bGV0IHM9ZVtvXSxpPW51bGwsYz1zPjIzOT80OnM+MjIzPzM6cz4xOTE/MjoxO2lmKG8rYzw9cil7bGV0IGEsUixsLEU7c3dpdGNoKGMpe2Nhc2UgMTpzPDEyOCYmKGk9cyk7YnJlYWs7Y2FzZSAyOmE9ZVtvKzFdLChhJjE5Mik9PT0xMjgmJihFPShzJjMxKTw8NnxhJjYzLEU+MTI3JiYoaT1FKSk7YnJlYWs7Y2FzZSAzOmE9ZVtvKzFdLFI9ZVtvKzJdLChhJjE5Mik9PT0xMjgmJihSJjE5Mik9PT0xMjgmJihFPShzJjE1KTw8MTJ8KGEmNjMpPDw2fFImNjMsRT4yMDQ3JiYoRTw1NTI5Nnx8RT41NzM0MykmJihpPUUpKTticmVhaztjYXNlIDQ6YT1lW28rMV0sUj1lW28rMl0sbD1lW28rM10sKGEmMTkyKT09PTEyOCYmKFImMTkyKT09PTEyOCYmKGwmMTkyKT09PTEyOCYmKEU9KHMmMTUpPDwxOHwoYSY2Myk8PDEyfChSJjYzKTw8NnxsJjYzLEU+NjU1MzUmJkU8MTExNDExMiYmKGk9RSkpfX1pPT09bnVsbD8oaT02NTUzMyxjPTEpOmk+NjU1MzUmJihpLT02NTUzNixuLnB1c2goaT4+PjEwJjEwMjN8NTUyOTYpLGk9NTYzMjB8aSYxMDIzKSxuLnB1c2goaSksbys9Y31yZXR1cm4gX08obil9ZnVuY3Rpb24gX08oZSl7bGV0IHQ9ZS5sZW5ndGg7aWYodDw9VGwpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO2xldCByPVwiXCIsbj0wO2Zvcig7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9VGwpKTtyZXR1cm4gcn1mdW5jdGlvbiBmTyhlLHQscil7bGV0IG49XCJcIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2ZvcihsZXQgbz10O288cjsrK28pbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW29dKTtyZXR1cm4gbn1mdW5jdGlvbiBwTyhlLHQscil7bGV0IG49ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7bGV0IG89XCJcIjtmb3IobGV0IHM9dDtzPHI7KytzKW8rPU9PW2Vbc11dO3JldHVybiBvfWZ1bmN0aW9uIERsKGUsdCxyLG4sbyl7YmwodCxuLG8sZSxyLDcpO2xldCBzPU51bWJlcih0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7ZVtyKytdPXMscz1zPj44LGVbcisrXT1zLHM9cz4+OCxlW3IrK109cyxzPXM+PjgsZVtyKytdPXM7bGV0IGk9TnVtYmVyKHQ+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gZVtyKytdPWksaT1pPj44LGVbcisrXT1pLGk9aT4+OCxlW3IrK109aSxpPWk+PjgsZVtyKytdPWkscn1mdW5jdGlvbiB5bChlLHQscixuLG8pe2JsKHQsbixvLGUsciw3KTtsZXQgcz1OdW1iZXIodCZCaWdJbnQoNDI5NDk2NzI5NSkpO2Vbcis3XT1zLHM9cz4+OCxlW3IrNl09cyxzPXM+PjgsZVtyKzVdPXMscz1zPj44LGVbcis0XT1zO2xldCBpPU51bWJlcih0Pj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIGVbciszXT1pLGk9aT4+OCxlW3IrMl09aSxpPWk+PjgsZVtyKzFdPWksaT1pPj44LGVbcl09aSxyKzh9ZnVuY3Rpb24gZE8oZSx0LHIpe1UodCxcIm9mZnNldFwiKSwoZVt0XT09PXZvaWQgMHx8ZVt0K3JdPT09dm9pZCAwKSYmTCh0LGUubGVuZ3RoLShyKzEpKX1mdW5jdGlvbiBibChlLHQscixuLG8scyl7aWYoZT5yfHxlPHQpe2xldCBpPXR5cGVvZiB0PT1cImJpZ2ludFwiP1wiblwiOlwiXCIsYzt0aHJvdyBzPjM/dD09PTB8fHQ9PT1CaWdJbnQoMCk/Yz1gPj0gMCR7aX0gYW5kIDwgMiR7aX0gKiogJHsocysxKSo4fSR7aX1gOmM9YD49IC0oMiR7aX0gKiogJHsocysxKSo4LTF9JHtpfSkgYW5kIDwgMiAqKiAkeyhzKzEpKjgtMX0ke2l9YDpjPWA+PSAke3R9JHtpfSBhbmQgPD0gJHtyfSR7aX1gLG5ldyBJLkVSUl9PVVRfT0ZfUkFOR0UoXCJ2YWx1ZVwiLGMsZSl9ZE8obixvLHMpfWZ1bmN0aW9uIGhPKGUsdCl7dD10fHwxLzA7bGV0IHIsbj1lLmxlbmd0aCxvPW51bGwscz1bXTtmb3IobGV0IGk9MDtpPG47KytpKXtpZihyPWUuY2hhckNvZGVBdChpKSxyPjU1Mjk1JiZyPDU3MzQ0KXtpZighbyl7aWYocj41NjMxOSl7KHQtPTMpPi0xJiZzLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWVsc2UgaWYoaSsxPT09bil7KHQtPTMpPi0xJiZzLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW89cjtjb250aW51ZX1pZihyPDU2MzIwKXsodC09Myk+LTEmJnMucHVzaCgyMzksMTkxLDE4OSksbz1yO2NvbnRpbnVlfXI9KG8tNTUyOTY8PDEwfHItNTYzMjApKzY1NTM2fWVsc2UgbyYmKHQtPTMpPi0xJiZzLnB1c2goMjM5LDE5MSwxODkpO2lmKG89bnVsbCxyPDEyOCl7aWYoKHQtPTEpPDApYnJlYWs7cy5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigodC09Mik8MClicmVhaztzLnB1c2gocj4+NnwxOTIsciY2M3wxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKHQtPTMpPDApYnJlYWs7cy5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCxyJjYzfDEyOCl9ZWxzZSBpZihyPDExMTQxMTIpe2lmKCh0LT00KTwwKWJyZWFrO3MucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LHImNjN8MTI4KX1lbHNlIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKX1yZXR1cm4gc31mdW5jdGlvbiBqdChlLHQscixuKXtsZXQgbyxzPW49PT12b2lkIDA/ZS5sZW5ndGg6bjtmb3Iobz0wO288cyYmIShvK3I+PXQubGVuZ3RofHxvPj1lLmxlbmd0aCk7KytvKXRbbytyXT1lW29dO3JldHVybiBvfWZ1bmN0aW9uIFBpKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0fHxlIT1udWxsJiZlLmNvbnN0cnVjdG9yIT1udWxsJiZlLmNvbnN0cnVjdG9yLm5hbWUhPW51bGwmJmUuY29uc3RydWN0b3IubmFtZT09PXQubmFtZX1mdW5jdGlvbiBDdChlKXtyZXR1cm4gdHlwZW9mIEJpZ0ludD5cInVcIj9TTzplfWZ1bmN0aW9uIFNPKCl7dGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IG5vdCBzdXBwb3J0ZWRcIil9dmFyIEt0LFRvLEFsLGFPLFRsLE9PLEFPLE5PLHhPLEZpPXAoKCk9PntWdCgpO3FlKCk7RHQoKTtTbCgpO09pKCk7dW8oKTt5ZSgpO3FlKCk7Zm8oKTtwaSgpO0t0PTIxNDc0ODM2NDcsVG89MioqMzIsQWw9dHlwZW9mIFN5bWJvbD09XCJmdW5jdGlvblwiJiZ0eXBlb2YgU3ltYm9sLmZvcj09XCJmdW5jdGlvblwiP1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKTpudWxsLGFPPTUwO09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLnByb3RvdHlwZSxcInBhcmVudFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKCEhXy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8ucHJvdG90eXBlLFwib2Zmc2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoISFfLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSk7Xy5wb29sU2l6ZT04MTkyO18uZnJvbT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIFVpKHQscixuKX07T2JqZWN0LnNldFByb3RvdHlwZU9mKF8ucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoXyxVaW50OEFycmF5KTtfLmFsbG9jPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gUk8odCxyLG4pfTtfLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiBraSh0KX07Xy5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGtpKHQpfTtPYmplY3Quc2V0UHJvdG90eXBlT2YoQmkucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoQmksVWludDhBcnJheSk7Xy5pc0J1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmdC5faXNCdWZmZXI9PT0hMCYmdCE9PV8ucHJvdG90eXBlfTtfLmNvbXBhcmU9ZnVuY3Rpb24odCxyKXtpZihQaSh0LFVpbnQ4QXJyYXkpJiYodD1fLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSxQaShyLFVpbnQ4QXJyYXkpJiYocj1fLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSwhXy5pc0J1ZmZlcih0KXx8IV8uaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHQ9PT1yKXJldHVybiAwO2xldCBuPXQubGVuZ3RoLG89ci5sZW5ndGg7Zm9yKGxldCBzPTAsaT1NYXRoLm1pbihuLG8pO3M8aTsrK3MpaWYodFtzXSE9PXJbc10pe249dFtzXSxvPXJbc107YnJlYWt9cmV0dXJuIG48bz8tMTpvPG4/MTowfTtfLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT1cInN0cmluZ1wiJiZ0Lmxlbmd0aCE9PTAmJnpuKHQpIT09dm9pZCAwfTtfLmNvbmNhdD1mdW5jdGlvbih0LHIpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBJLkVSUl9JTlZBTElEX0FSR19UWVBFKFwibGlzdFwiLFwiQXJyYXlcIix0KTtpZih0Lmxlbmd0aD09PTApcmV0dXJuIF8uYWxsb2MoMCk7aWYocj09PXZvaWQgMCl7cj0wO2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXRbc10ubGVuZ3RoJiYocis9dFtzXS5sZW5ndGgpfWVsc2UgYnQocixcImxlbmd0aFwiKTtsZXQgbj1fLmFsbG9jVW5zYWZlKHIpLG89MDtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKyl7bGV0IGk9dFtzXTtpZigha2UoaSkpdGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1RZUEUoYGxpc3RbJHtzfV1gLFtcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0W3NdKTtvKz1kbChpLG4sbywwLGkubGVuZ3RoKX1yZXR1cm4gbzxyJiZuLmZpbGwoMCxvLHIpLG59O18uYnl0ZUxlbmd0aD1nbDtfLnByb3RvdHlwZS5faXNCdWZmZXI9ITA7Xy5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5sZW5ndGg7aWYodCUyIT09MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzXCIpO2ZvcihsZXQgcj0wO3I8dDtyKz0yKVl0KHRoaXMscixyKzEpO3JldHVybiB0aGlzfTtfLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtsZXQgdD10aGlzLmxlbmd0aDtpZih0JTQhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHNcIik7Zm9yKGxldCByPTA7cjx0O3IrPTQpWXQodGhpcyxyLHIrMyksWXQodGhpcyxyKzEscisyKTtyZXR1cm4gdGhpc307Xy5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5sZW5ndGg7aWYodCU4IT09MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO2ZvcihsZXQgcj0wO3I8dDtyKz04KVl0KHRoaXMscixyKzcpLFl0KHRoaXMscisxLHIrNiksWXQodGhpcyxyKzIscis1KSxZdCh0aGlzLHIrMyxyKzQpO3JldHVybiB0aGlzfTtfLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LHIsbil7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIHRoaXMudXRmOFNsaWNlKDAsdGhpcy5sZW5ndGgpO2xldCBvPXRoaXMubGVuZ3RoO2lmKHI8PTApcj0wO2Vsc2V7aWYocj49bylyZXR1cm5cIlwiO3J8PTB9aWYobj09PXZvaWQgMHx8bj5vP249bzpufD0wLG48PXIpcmV0dXJuXCJcIjtpZih0PT09dm9pZCAwKXJldHVybiB0aGlzLnV0ZjhTbGljZShyLG4pO2xldCBzPUpyKHQpO2lmKHM9PT12b2lkIDApdGhyb3cgbmV3IEkuRVJSX1VOS05PV05fRU5DT0RJTkcodCk7cmV0dXJuIHMuc2xpY2UodGhpcyxyLG4pfTtfLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1fLnByb3RvdHlwZS50b1N0cmluZztfLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7aWYoIWtlKHQpKXRocm93IG5ldyBJLkVSUl9JTlZBTElEX0FSR19UWVBFKFwib3RoZXJCdWZmZXJcIixbXCJCdWZmZXJcIixcIlVpbnQ4QXJyYXlcIl0sdCk7cmV0dXJuIHRoaXM9PT10PyEwOl8uY29tcGFyZSh0aGlzLHQpPT09MH07Xy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe2xldCB0PVwiXCIscj1hTztyZXR1cm4gdD10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxyKS5yZXBsYWNlKC8oLnsyfSkvZyxcIiQxIFwiKS50cmltKCksdGhpcy5sZW5ndGg+ciYmKHQrPVwiIC4uLiBcIiksXCI8QnVmZmVyIFwiK3QrXCI+XCJ9O0FsJiYoXy5wcm90b3R5cGVbQWxdPV8ucHJvdG90eXBlLmluc3BlY3QpO18ucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxyLG4sbyxzKXtpZihQaSh0LFVpbnQ4QXJyYXkpJiYodD1fLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhXy5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9BUkdfVFlQRShcInRhcmdldFwiLFtcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0KTtpZihyPT09dm9pZCAwP3I9MDpidChyLFwidGFyZ2V0U3RhcnRcIiwwLEt0KSxuPT09dm9pZCAwP249dC5sZW5ndGg6YnQobixcInRhcmdldEVuZFwiLDAsdC5sZW5ndGgpLG89PT12b2lkIDA/bz0wOmJ0KHIsXCJzb3VyY2VTdGFydFwiLDAsS3QpLHM9PT12b2lkIDA/cz10aGlzLmxlbmd0aDpidChuLFwic291cmNlRW5kXCIsMCx0aGlzLmxlbmd0aCkscjwwfHxuPnQubGVuZ3RofHxvPDB8fHM+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IEkuRVJSX09VVF9PRl9SQU5HRShcIm91dCBvZiByYW5nZSBpbmRleFwiLFwicmFuZ2VcIik7aWYobz49cyYmcj49bilyZXR1cm4gMDtpZihvPj1zKXJldHVybi0xO2lmKHI+PW4pcmV0dXJuIDE7aWYocj4+Pj0wLG4+Pj49MCxvPj4+PTAscz4+Pj0wLHRoaXM9PT10KXJldHVybiAwO2xldCBpPXMtbyxjPW4tcixhPU1hdGgubWluKGksYyksUj10aGlzLnNsaWNlKG8scyksbD10LnNsaWNlKHIsbik7Zm9yKGxldCBFPTA7RTxhOysrRSlpZihSW0VdIT09bFtFXSl7aT1SW0VdLGM9bFtFXTticmVha31yZXR1cm4gaTxjPy0xOmM8aT8xOjB9O18ucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdGhpcy5pbmRleE9mKHQscixuKSE9PS0xfTtfLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbWwodGhpcyx0LHIsbiwhMCl9O18ucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbWwodGhpcyx0LHIsbiwhMSl9O18ucHJvdG90eXBlLmFzY2lpU2xpY2U9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD09PTAmJnI9PT10aGlzLmxlbmd0aD9kaSh0aGlzKTpkaSh0aGlzLnNsaWNlKHQscikpfTtfLnByb3RvdHlwZS5hc2NpaVdyaXRlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4ganQoaHIodCksdGhpcyxyLG4pfTtfLnByb3RvdHlwZS5iYXNlNjRTbGljZT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09MCYmcj09PXRoaXMubGVuZ3RoP1FyKHRoaXMpOlFyKHRoaXMuc2xpY2UodCxyKSl9O18ucHJvdG90eXBlLmJhc2U2NFdyaXRlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4ganQocG8odCksdGhpcyxyLG4pfTtfLnByb3RvdHlwZS5iYXNlNjR1cmxTbGljZT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09MCYmcj09PXRoaXMubGVuZ3RoP2ZpKHRoaXMpOmZpKHRoaXMuc2xpY2UodCxyKSl9O18ucHJvdG90eXBlLmJhc2U2NHVybFdyaXRlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4ganQoaG8odCksdGhpcyxyLG4pfTtfLnByb3RvdHlwZS5oZXhXcml0ZT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIGp0KE9vKHQsdGhpcy5sZW5ndGgtciksdGhpcyxyLG4pfTtfLnByb3RvdHlwZS5oZXhTbGljZT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHBPKHRoaXMsdCxyLG4pfTtfLnByb3RvdHlwZS5sYXRpbjFTbGljZT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIGZPKHRoaXMsdCxyLG4pfTtfLnByb3RvdHlwZS5sYXRpbjFXcml0ZT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIGp0KGhyKHQpLHRoaXMscixuKX07Xy5wcm90b3R5cGUudWNzMlNsaWNlPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9PT0wJiZyPT09dGhpcy5sZW5ndGg/aGkodGhpcyk6aGkodGhpcy5zbGljZSh0LHIpKX07Xy5wcm90b3R5cGUudWNzMldyaXRlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4ganQocXIodCx0aGlzLmxlbmd0aC1yKSx0aGlzLHIsbil9O18ucHJvdG90eXBlLnV0ZjhTbGljZT1mdW5jdGlvbih0LHIsbil7cmV0dXJuIHVPKHRoaXMsdCxyLG4pfTtfLnByb3RvdHlwZS51dGY4V3JpdGU9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBqdChoTyh0LHRoaXMubGVuZ3RoLXIpLHRoaXMscixuKX07Xy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4sbyl7aWYocj09PXZvaWQgMClyZXR1cm4gdGhpcy51dGY4V3JpdGUodCwwLHRoaXMubGVuZ3RoKTtpZihuPT09dm9pZCAwJiZ0eXBlb2Ygcj09XCJzdHJpbmdcIilvPXIsbj10aGlzLmxlbmd0aCxyPTA7ZWxzZXtidChyLFwib2Zmc2V0XCIsMCx0aGlzLmxlbmd0aCk7bGV0IGk9dGhpcy5sZW5ndGgtcjtuPT09dm9pZCAwP249aTp0eXBlb2Ygbj09XCJzdHJpbmdcIj8obz1uLG49aSk6KGJ0KG4sXCJsZW5ndGhcIiwwLHRoaXMubGVuZ3RoKSxuPmkmJihuPWkpKX1pZighbylyZXR1cm4gdGhpcy51dGY4V3JpdGUodCxyLG4pO2xldCBzPUpyKG8pO2lmKHM9PT12b2lkIDApdGhyb3cgbmV3IEkuRVJSX1VOS05PV05fRU5DT0RJTkcobyk7cmV0dXJuIHMud3JpdGUodGhpcyx0LHIsbil9O18ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiQnVmZmVyXCIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtUbD00MDk2O18ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQscil7bGV0IG49dGhpcy5sZW5ndGg7dD1+fnQscj1yPT09dm9pZCAwP246fn5yLHQ8MD8odCs9bix0PDAmJih0PTApKTp0Pm4mJih0PW4pLHI8MD8ocis9bixyPDAmJihyPTApKTpyPm4mJihyPW4pLHI8dCYmKHI9dCk7bGV0IG89dGhpcy5zdWJhcnJheSh0LHIpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YobyxfLnByb3RvdHlwZSksb307Xy5wcm90b3R5cGUucmVhZFVpbnRMRT1fLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQscil7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9BUkdfVFlQRShcIm9mZnNldFwiLFwibnVtYmVyXCIsdCk7aWYocj09PTYpcmV0dXJuIHJsKHRoaXMsdCk7aWYocj09PTUpcmV0dXJuIG5sKHRoaXMsdCk7aWYocj09PTMpcmV0dXJuIG9sKHRoaXMsdCk7aWYocj09PTQpcmV0dXJuIHRoaXMucmVhZFVJbnQzMkxFKHQpO2lmKHI9PT0yKXJldHVybiB0aGlzLnJlYWRVSW50MTZMRSh0KTtpZihyPT09MSlyZXR1cm4gdGhpcy5yZWFkVUludDgodCk7TChyLDYsXCJieXRlTGVuZ3RoXCIpfTtfLnByb3RvdHlwZS5yZWFkVWludEJFPV8ucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxyKXtpZih0PT09dm9pZCAwKXRocm93IG5ldyBJLkVSUl9JTlZBTElEX0FSR19UWVBFKFwib2Zmc2V0XCIsXCJudW1iZXJcIix0KTtpZihyPT09NilyZXR1cm4gc2wodGhpcyx0KTtpZihyPT09NSlyZXR1cm4gaWwodGhpcyx0KTtpZihyPT09MylyZXR1cm4gY2wodGhpcyx0KTtpZihyPT09NClyZXR1cm4gdGhpcy5yZWFkVUludDMyQkUodCk7aWYocj09PTIpcmV0dXJuIHRoaXMucmVhZFVJbnQxNkJFKHQpO2lmKHI9PT0xKXJldHVybiB0aGlzLnJlYWRVSW50OCh0KTtMKHIsNixcImJ5dGVMZW5ndGhcIil9O18ucHJvdG90eXBlLnJlYWRVaW50OD1fLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odD0wKXtVKHQsXCJvZmZzZXRcIik7bGV0IHI9dGhpc1t0XTtyZXR1cm4gcj09PXZvaWQgMCYmTCh0LHRoaXMubGVuZ3RoLTEpLHJ9O18ucHJvdG90eXBlLnJlYWRVaW50MTZCRT1fLnByb3RvdHlwZS5yZWFkVUludDE2QkU9YWw7Xy5wcm90b3R5cGUucmVhZFVpbnQxNkxFPV8ucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj10aGlzW3RdLG49dGhpc1t0KzFdO3JldHVybihyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LHRoaXMubGVuZ3RoLTIpLHIrbioyKio4fTtfLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Xy5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHQ9MCl7VSh0LFwib2Zmc2V0XCIpO2xldCByPXRoaXNbdF0sbj10aGlzW3QrM107cmV0dXJuKHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZMKHQsdGhpcy5sZW5ndGgtNCkscit0aGlzWysrdF0qMioqOCt0aGlzWysrdF0qMioqMTYrbioyKioyNH07Xy5wcm90b3R5cGUucmVhZFVpbnQzMkJFPV8ucHJvdG90eXBlLnJlYWRVSW50MzJCRT1SbDtfLnByb3RvdHlwZS5yZWFkQmlnVWludDY0TEU9Xy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPUN0KGZ1bmN0aW9uKHQpe3Q9dD4+PjAsVSh0LFwib2Zmc2V0XCIpO2xldCByPXRoaXNbdF0sbj10aGlzW3QrN107KHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZMKHQsdGhpcy5sZW5ndGgtOCk7bGV0IG89cit0aGlzWysrdF0qMioqOCt0aGlzWysrdF0qMioqMTYrdGhpc1srK3RdKjIqKjI0LHM9dGhpc1srK3RdK3RoaXNbKyt0XSoyKio4K3RoaXNbKyt0XSoyKioxNituKjIqKjI0O3JldHVybiBCaWdJbnQobykrKEJpZ0ludChzKTw8QmlnSW50KDMyKSl9KTtfLnByb3RvdHlwZS5yZWFkQmlnVWludDY0QkU9Xy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFPUN0KGZ1bmN0aW9uKHQpe3Q9dD4+PjAsVSh0LFwib2Zmc2V0XCIpO2xldCByPXRoaXNbdF0sbj10aGlzW3QrN107KHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZMKHQsdGhpcy5sZW5ndGgtOCk7bGV0IG89cioyKioyNCt0aGlzWysrdF0qMioqMTYrdGhpc1srK3RdKjIqKjgrdGhpc1srK3RdLHM9dGhpc1srK3RdKjIqKjI0K3RoaXNbKyt0XSoyKioxNit0aGlzWysrdF0qMioqOCtuO3JldHVybihCaWdJbnQobyk8PEJpZ0ludCgzMikpK0JpZ0ludChzKX0pO18ucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LHIpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJvZmZzZXRcIixcIm51bWJlclwiLHQpO2lmKHI9PT02KXJldHVybiB1bCh0aGlzLHQpO2lmKHI9PT01KXJldHVybiBFbCh0aGlzLHQpO2lmKHI9PT0zKXJldHVybiBsbCh0aGlzLHQpO2lmKHI9PT00KXJldHVybiB0aGlzLnJlYWRJbnQzMkxFKHQpO2lmKHI9PT0yKXJldHVybiB0aGlzLnJlYWRJbnQxNkxFKHQpO2lmKHI9PT0xKXJldHVybiB0aGlzLnJlYWRJbnQ4KHQpO0wociw2LFwiYnl0ZUxlbmd0aFwiKX07Xy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQscil7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9BUkdfVFlQRShcIm9mZnNldFwiLFwibnVtYmVyXCIsdCk7aWYocj09PTYpcmV0dXJuIGZsKHRoaXMsdCk7aWYocj09PTUpcmV0dXJuIHBsKHRoaXMsdCk7aWYocj09PTMpcmV0dXJuIF9sKHRoaXMsdCk7aWYocj09PTQpcmV0dXJuIHRoaXMucmVhZEludDMyQkUodCk7aWYocj09PTIpcmV0dXJuIHRoaXMucmVhZEludDE2QkUodCk7aWYocj09PTEpcmV0dXJuIHRoaXMucmVhZEludDgodCk7TChyLDYsXCJieXRlTGVuZ3RoXCIpfTtfLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj10aGlzW3RdO3JldHVybiByPT09dm9pZCAwJiZMKHQsdGhpcy5sZW5ndGgtMSkscnwociYyKio3KSozMzU1NDQzMH07Xy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odD0wKXtVKHQsXCJvZmZzZXRcIik7bGV0IHI9dGhpc1t0XSxuPXRoaXNbdCsxXTsocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkwodCx0aGlzLmxlbmd0aC0yKTtsZXQgbz1yK24qMioqODtyZXR1cm4gb3wobyYyKioxNSkqMTMxMDcwfTtfLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0PTApe1UodCxcIm9mZnNldFwiKTtsZXQgcj10aGlzW3RdLG49dGhpc1t0KzFdOyhyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LHRoaXMubGVuZ3RoLTIpO2xldCBvPXIqMioqOCtuO3JldHVybiBvfChvJjIqKjE1KSoxMzEwNzB9O18ucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQ9MCl7VSh0LFwib2Zmc2V0XCIpO2xldCByPXRoaXNbdF0sbj10aGlzW3QrM107cmV0dXJuKHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZMKHQsdGhpcy5sZW5ndGgtNCkscit0aGlzWysrdF0qMioqOCt0aGlzWysrdF0qMioqMTYrKG48PDI0KX07Xy5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odD0wKXtVKHQsXCJvZmZzZXRcIik7bGV0IHI9dGhpc1t0XSxuPXRoaXNbdCszXTtyZXR1cm4ocj09PXZvaWQgMHx8bj09PXZvaWQgMCkmJkwodCx0aGlzLmxlbmd0aC00KSwocjw8MjQpK3RoaXNbKyt0XSoyKioxNit0aGlzWysrdF0qMioqOCtufTtfLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT1DdChmdW5jdGlvbih0KXt0PXQ+Pj4wLFUodCxcIm9mZnNldFwiKTtsZXQgcj10aGlzW3RdLG49dGhpc1t0KzddOyhyPT09dm9pZCAwfHxuPT09dm9pZCAwKSYmTCh0LHRoaXMubGVuZ3RoLTgpO2xldCBvPXRoaXNbdCs0XSt0aGlzW3QrNV0qMioqOCt0aGlzW3QrNl0qMioqMTYrKG48PDI0KTtyZXR1cm4oQmlnSW50KG8pPDxCaWdJbnQoMzIpKStCaWdJbnQocit0aGlzWysrdF0qMioqOCt0aGlzWysrdF0qMioqMTYrdGhpc1srK3RdKjIqKjI0KX0pO18ucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPUN0KGZ1bmN0aW9uKHQpe3Q9dD4+PjAsVSh0LFwib2Zmc2V0XCIpO2xldCByPXRoaXNbdF0sbj10aGlzW3QrN107KHI9PT12b2lkIDB8fG49PT12b2lkIDApJiZMKHQsdGhpcy5sZW5ndGgtOCk7bGV0IG89KHI8PDI0KSt0aGlzWysrdF0qMioqMTYrdGhpc1srK3RdKjIqKjgrdGhpc1srK3RdO3JldHVybihCaWdJbnQobyk8PEJpZ0ludCgzMikpK0JpZ0ludCh0aGlzWysrdF0qMioqMjQrdGhpc1srK3RdKjIqKjE2K3RoaXNbKyt0XSoyKio4K24pfSk7Xy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ0P1RpKHRoaXMsdCk6SWkodGhpcyx0KX07Xy5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ0P0lpKHRoaXMsdCk6VGkodGhpcyx0KX07Xy5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHQpe3JldHVybiBmdD9TaSh0aGlzLHQpOkFpKHRoaXMsdCl9O18ucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0KXtyZXR1cm4gZnQ/QWkodGhpcyx0KTpTaSh0aGlzLHQpfTtfLnByb3RvdHlwZS53cml0ZVVpbnRMRT1fLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LHIsbil7aWYobj09PTYpcmV0dXJuIENpKHRoaXMsdCxyLDAsMHhmZmZmZmZmZmZmZmYpO2lmKG49PT01KXJldHVybiBMaSh0aGlzLHQsciwwLDB4ZmZmZmZmZmZmZik7aWYobj09PTMpcmV0dXJuIHdpKHRoaXMsdCxyLDAsMTY3NzcyMTUpO2lmKG49PT00KXJldHVybiB4byh0aGlzLHQsciwwLDQyOTQ5NjcyOTUpO2lmKG49PT0yKXJldHVybiBybih0aGlzLHQsciwwLDY1NTM1KTtpZihuPT09MSlyZXR1cm4gdnQodGhpcyx0LHIsMCwyNTUpO0wobiw2LFwiYnl0ZUxlbmd0aFwiKX07Xy5wcm90b3R5cGUud3JpdGVVaW50QkU9Xy5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24odCxyLG4pe2lmKG49PT02KXJldHVybiBEaSh0aGlzLHQsciwwLDB4ZmZmZmZmZmZmZmZmKTtpZihuPT09NSlyZXR1cm4geWkodGhpcyx0LHIsMCwweGZmZmZmZmZmZmYpO2lmKG49PT0zKXJldHVybiBiaSh0aGlzLHQsciwwLDE2Nzc3MjE1KTtpZihuPT09NClyZXR1cm4gTm8odGhpcyx0LHIsMCw0Mjk0OTY3Mjk1KTtpZihuPT09MilyZXR1cm4gdG4odGhpcyx0LHIsMCw2NTUzNSk7aWYobj09PTEpcmV0dXJuIHZ0KHRoaXMsdCxyLDAsMjU1KTtMKG4sNixcImJ5dGVMZW5ndGhcIil9O18ucHJvdG90eXBlLndyaXRlVWludDg9Xy5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LHI9MCl7cmV0dXJuIHZ0KHRoaXMsdCxyLDAsMjU1KX07Xy5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1fLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHQscj0wKXtyZXR1cm4gcm4odGhpcyx0LHIsMCw2NTUzNSl9O18ucHJvdG90eXBlLndyaXRlVWludDE2QkU9Xy5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0LHI9MCl7cmV0dXJuIHRuKHRoaXMsdCxyLDAsNjU1MzUpfTtfLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPV8ucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odCxyPTApe3JldHVybiBobCh0aGlzLHQsciwwLDQyOTQ5NjcyOTUpfTtfLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPV8ucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxyPTApe3JldHVybiBPbCh0aGlzLHQsciwwLDQyOTQ5NjcyOTUpfTtfLnByb3RvdHlwZS53cml0ZUJpZ1VpbnQ2NExFPV8ucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEU9Q3QoZnVuY3Rpb24odCxyPTApe3JldHVybiBEbCh0aGlzLHQscixCaWdJbnQoMCksQmlnSW50KFwiMHhmZmZmZmZmZmZmZmZmZmZmXCIpKX0pO18ucHJvdG90eXBlLndyaXRlQmlnVWludDY0QkU9Xy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRT1DdChmdW5jdGlvbih0LHI9MCl7cmV0dXJuIHlsKHRoaXMsdCxyLEJpZ0ludCgwKSxCaWdJbnQoXCIweGZmZmZmZmZmZmZmZmZmZmZcIikpfSk7Xy5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbih0LHIsbil7aWYobj09PTYpcmV0dXJuIENpKHRoaXMsdCxyLC0weDgwMDAwMDAwMDAwMCwweDdmZmZmZmZmZmZmZik7aWYobj09PTUpcmV0dXJuIExpKHRoaXMsdCxyLC01NDk3NTU4MTM4ODgsNTQ5NzU1ODEzODg3KTtpZihuPT09MylyZXR1cm4gd2kodGhpcyx0LHIsLTgzODg2MDgsODM4ODYwNyk7aWYobj09PTQpcmV0dXJuIHhvKHRoaXMsdCxyLC0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDcpO2lmKG49PT0yKXJldHVybiBybih0aGlzLHQsciwtMzI3NjgsMzI3NjcpO2lmKG49PT0xKXJldHVybiB2dCh0aGlzLHQsciwtMTI4LDEyNyk7TChuLDYsXCJieXRlTGVuZ3RoXCIpfTtfLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQscixuKXtpZihuPT09NilyZXR1cm4gRGkodGhpcyx0LHIsLTB4ODAwMDAwMDAwMDAwLDB4N2ZmZmZmZmZmZmZmKTtpZihuPT09NSlyZXR1cm4geWkodGhpcyx0LHIsLTU0OTc1NTgxMzg4OCw1NDk3NTU4MTM4ODcpO2lmKG49PT0zKXJldHVybiBiaSh0aGlzLHQsciwtODM4ODYwOCw4Mzg4NjA3KTtpZihuPT09NClyZXR1cm4gTm8odGhpcyx0LHIsLTIxNDc0ODM2NDgsMjE0NzQ4MzY0Nyk7aWYobj09PTIpcmV0dXJuIHRuKHRoaXMsdCxyLC0zMjc2OCwzMjc2Nyk7aWYobj09PTEpcmV0dXJuIHZ0KHRoaXMsdCxyLC0xMjgsMTI3KTtMKG4sNixcImJ5dGVMZW5ndGhcIil9O18ucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LHI9MCl7cmV0dXJuIHZ0KHRoaXMsdCxyLC0xMjgsMTI3KX07Xy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQscj0wKXtyZXR1cm4gcm4odGhpcyx0LHIsLTMyNzY4LDMyNzY3KX07Xy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQscj0wKXtyZXR1cm4gdG4odGhpcyx0LHIsLTMyNzY4LDMyNzY3KX07Xy5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHQscj0wKXtyZXR1cm4geG8odGhpcyx0LHIsLTIxNDc0ODM2NDgsMjE0NzQ4MzY0Nyl9O18ucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbih0LHI9MCl7cmV0dXJuIE5vKHRoaXMsdCxyLC0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDcpfTtfLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9Q3QoZnVuY3Rpb24odCxyPTApe3JldHVybiBEbCh0aGlzLHQsciwtQmlnSW50KFwiMHg4MDAwMDAwMDAwMDAwMDAwXCIpLEJpZ0ludChcIjB4N2ZmZmZmZmZmZmZmZmZmZlwiKSl9KTtfLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9Q3QoZnVuY3Rpb24odCxyPTApe3JldHVybiB5bCh0aGlzLHQsciwtQmlnSW50KFwiMHg4MDAwMDAwMDAwMDAwMDAwXCIpLEJpZ0ludChcIjB4N2ZmZmZmZmZmZmZmZmZmZlwiKSl9KTtfLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZnQ/bWkodGhpcyx0LHIpOmdpKHRoaXMsdCxyKX07Xy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQscil7cmV0dXJuIGZ0P2dpKHRoaXMsdCxyKTptaSh0aGlzLHQscil9O18ucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZnQ/eGkodGhpcyx0LHIpOk5pKHRoaXMsdCxyKX07Xy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0LHIpe3JldHVybiBmdD9OaSh0aGlzLHQscik6eGkodGhpcyx0LHIpfTtfLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQscixuLG8pe2lmKCFrZSh0aGlzKSl0aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9BUkdfVFlQRShcInNvdXJjZVwiLFtcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0aGlzKTtpZigha2UodCkpdGhyb3cgbmV3IEkuRVJSX0lOVkFMSURfQVJHX1RZUEUoXCJ0YXJnZXRcIixbXCJCdWZmZXJcIixcIlVpbnQ4QXJyYXlcIl0sdCk7aWYocj09PXZvaWQgMClyPTA7ZWxzZSBpZihyPUFvKHIsMCkscjwwKXRocm93IG5ldyBJLkVSUl9PVVRfT0ZfUkFOR0UoXCJ0YXJnZXRTdGFydFwiLFwiPj0gMFwiLHIpO2lmKG49PT12b2lkIDApbj0wO2Vsc2V7aWYobj1BbyhuLDApLG48MCl0aHJvdyBuZXcgSS5FUlJfT1VUX09GX1JBTkdFKFwic291cmNlU3RhcnRcIixcIj49IDBcIixuKTtpZihuPj1Ubyl0aHJvdyBuZXcgSS5FUlJfT1VUX09GX1JBTkdFKFwic291cmNlU3RhcnRcIixgPCAke1RvfWAsbil9aWYobz09PXZvaWQgMClvPXRoaXMubGVuZ3RoO2Vsc2V7aWYobz1BbyhvLDApLG88MCl0aHJvdyBuZXcgSS5FUlJfT1VUX09GX1JBTkdFKFwic291cmNlRW5kXCIsXCI+PSAwXCIsbyk7aWYobz49VG8pdGhyb3cgbmV3IEkuRVJSX09VVF9PRl9SQU5HRShcInNvdXJjZUVuZFwiLGA8ICR7VG99YCxvKX1pZihyPj10Lmxlbmd0aHx8KG8+MCYmbzxuJiYobz1uKSxvPT09bil8fHQubGVuZ3RoPT09MHx8dGhpcy5sZW5ndGg9PT0wKXJldHVybiAwO28+dGhpcy5sZW5ndGgmJihvPXRoaXMubGVuZ3RoKSx0Lmxlbmd0aC1yPG8tbiYmKG89dC5sZW5ndGgtcituKTtsZXQgcz1vLW47cmV0dXJuIHRoaXM9PT10JiZ0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj09XCJmdW5jdGlvblwiP3RoaXMuY29weVdpdGhpbihyLG4sbyk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodCx0aGlzLnN1YmFycmF5KG4sbyksciksc307Xy5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbih0LHIsbixvKXtpZih0eXBlb2YgdD09XCJzdHJpbmdcIil7aWYodHlwZW9mIHI9PVwic3RyaW5nXCI/KG89cixyPTAsbj10aGlzLmxlbmd0aCk6dHlwZW9mIG49PVwic3RyaW5nXCImJihvPW4sbj10aGlzLmxlbmd0aCksbyE9PXZvaWQgMCYmdHlwZW9mIG8hPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYodHlwZW9mIG89PVwic3RyaW5nXCImJiFfLmlzRW5jb2RpbmcobykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK28pO2lmKHQubGVuZ3RoPT09MSl7bGV0IGk9dC5jaGFyQ29kZUF0KDApOyhvPT09XCJ1dGY4XCImJmk8MTI4fHxvPT09XCJsYXRpbjFcIikmJih0PWkpfX1lbHNlIHR5cGVvZiB0PT1cIm51bWJlclwiP3Q9dCYyNTU6dHlwZW9mIHQ9PVwiYm9vbGVhblwiJiYodD1OdW1iZXIodCkpO2lmKHI8MHx8dGhpcy5sZW5ndGg8cnx8dGhpcy5sZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKTtpZihuPD1yKXJldHVybiB0aGlzO3I9cj4+PjAsbj1uPT09dm9pZCAwP3RoaXMubGVuZ3RoOm4+Pj4wLHR8fCh0PTApO2xldCBzO2lmKHR5cGVvZiB0PT1cIm51bWJlclwiKWZvcihzPXI7czxuOysrcyl0aGlzW3NdPXQ7ZWxzZXtsZXQgaT1fLmlzQnVmZmVyKHQpP3Q6Xy5mcm9tKHQsbyksYz1pLmxlbmd0aDtpZihjPT09MCl0aHJvdyBuZXcgSS5FUlJfSU5WQUxJRF9BUkdfVkFMVUUoXCJ2YWx1ZVwiLHQpO2ZvcihzPTA7czxuLXI7KytzKXRoaXNbcytyXT1pW3MlY119cmV0dXJuIHRoaXN9O09PPWZ1bmN0aW9uKCl7bGV0IGU9XCIwMTIzNDU2Nzg5YWJjZGVmXCIsdD1uZXcgQXJyYXkoMjU2KTtmb3IobGV0IHI9MDtyPDE2Oysrcil7bGV0IG49cioxNjtmb3IobGV0IG89MDtvPDE2Oysrbyl0W24rb109ZVtyXStlW29dfXJldHVybiB0fSgpO0FPPWdsb2JhbFRoaXMuYXRvYixOTz1nbG9iYWxUaGlzLkJsb2IseE89Z2xvYmFsVGhpcy5idG9hfSk7dmFyIHhlPXAoKCk9PntGaSgpfSk7dmFyIENsPXAoKCk9PntxZSgpO0ZpKCk7Wm4oKX0pO2Z1bmN0aW9uIElvKGUpe2lmKHR5cGVvZiBlIT1cIm51bWJlclwiKXRocm93IG5ldyBJLkVSUl9JTlZBTElEX0FSR19UWVBFKFwiZXJyXCIsXCJudW1iZXJcIixlKTtpZihlPj0wfHwhVE8oZSkpdGhyb3cgbmV3IEkuRVJSX09VVF9PRl9SQU5HRShcImVyclwiLFwiYSBuZWdhdGl2ZSBpbnRlZ2VyXCIsZSk7cmV0dXJuICR0LmdldChlKT8uWzBdfXZhciBUTyxMbD1wKCgpPT57RHQoKTtGUigpO3NpKCk7RHQoKTtmcigpO1Z0KCk7dXQoKTtRUigpO3hlKCk7Q2woKTtVZSgpO1RPPU51bWJlci5pc1NhZmVJbnRlZ2VyfSk7ZnVuY3Rpb24gd2woZSl7bGV0IHQ9XCJcIixyPWUubGVuZ3RoLG49ZVswXT09PVwiLVwiPzE6MDtmb3IoO3I+PW4rNDtyLT0zKXQ9YF8ke2Uuc2xpY2Uoci0zLHIpfSR7dH1gO3JldHVybmAke2Uuc2xpY2UoMCxyKX0ke3R9YH1mdW5jdGlvbiBQbChlKXtyZXR1cm4gJHQuZ2V0KGUpfWZ1bmN0aW9uIHlPKGUsdCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgV2l7Y29uc3RydWN0b3Iobil7c3VwZXIoZSxuLHQpfX19ZnVuY3Rpb24gTWwoZSx0KXt0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07bGV0IHI9XCJUaGUgXCI7aWYoZS5lbmRzV2l0aChcIiBhcmd1bWVudFwiKSlyKz1gJHtlfSBgO2Vsc2V7bGV0IGk9ZS5pbmNsdWRlcyhcIi5cIik/XCJwcm9wZXJ0eVwiOlwiYXJndW1lbnRcIjtyKz1gXCIke2V9XCIgJHtpfSBgfXIrPVwibXVzdCBiZSBcIjtsZXQgbj1bXSxvPVtdLHM9W107Zm9yKGxldCBpIG9mIHQpbU8uaW5jbHVkZXMoaSk/bi5wdXNoKGkudG9Mb2NhbGVMb3dlckNhc2UoKSk6Z08udGVzdChpKT9vLnB1c2goaSk6cy5wdXNoKGkpO2lmKG8ubGVuZ3RoPjApe2xldCBpPW4uaW5kZXhPZihcIm9iamVjdFwiKTtpIT09LTEmJihuLnNwbGljZShpLDEpLG8ucHVzaChcIk9iamVjdFwiKSl9aWYobi5sZW5ndGg+MCl7aWYobi5sZW5ndGg+Mil7bGV0IGk9bi5wb3AoKTtyKz1gb25lIG9mIHR5cGUgJHtuLmpvaW4oXCIsIFwiKX0sIG9yICR7aX1gfWVsc2Ugbi5sZW5ndGg9PT0yP3IrPWBvbmUgb2YgdHlwZSAke25bMF19IG9yICR7blsxXX1gOnIrPWBvZiB0eXBlICR7blswXX1gOyhvLmxlbmd0aD4wfHxzLmxlbmd0aD4wKSYmKHIrPVwiIG9yIFwiKX1pZihvLmxlbmd0aD4wKXtpZihvLmxlbmd0aD4yKXtsZXQgaT1vLnBvcCgpO3IrPWBhbiBpbnN0YW5jZSBvZiAke28uam9pbihcIiwgXCIpfSwgb3IgJHtpfWB9ZWxzZSByKz1gYW4gaW5zdGFuY2Ugb2YgJHtvWzBdfWAsby5sZW5ndGg9PT0yJiYocis9YCBvciAke29bMV19YCk7cy5sZW5ndGg+MCYmKHIrPVwiIG9yIFwiKX1pZihzLmxlbmd0aD4wKWlmKHMubGVuZ3RoPjIpe2xldCBpPXMucG9wKCk7cis9YG9uZSBvZiAke3Muam9pbihcIiwgXCIpfSwgb3IgJHtpfWB9ZWxzZSBzLmxlbmd0aD09PTI/cis9YG9uZSBvZiAke3NbMF19IG9yICR7c1sxXX1gOihzWzBdLnRvTG93ZXJDYXNlKCkhPT1zWzBdJiYocis9XCJhbiBcIikscis9YCR7c1swXX1gKTtyZXR1cm4gcn1mdW5jdGlvbiBrbChlKXtpZihlPT1udWxsKXJldHVybmAgUmVjZWl2ZWQgJHtlfWA7aWYodHlwZW9mIGU9PVwiZnVuY3Rpb25cIiYmZS5uYW1lKXJldHVybmAgUmVjZWl2ZWQgZnVuY3Rpb24gJHtlLm5hbWV9YDtpZih0eXBlb2YgZT09XCJvYmplY3RcIilyZXR1cm4gZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lP2AgUmVjZWl2ZWQgYW4gaW5zdGFuY2Ugb2YgJHtlLmNvbnN0cnVjdG9yLm5hbWV9YDpgIFJlY2VpdmVkICR7SyhlLHtkZXB0aDotMX0pfWA7bGV0IHQ9SyhlLHtjb2xvcnM6ITF9KTtyZXR1cm4gdC5sZW5ndGg+MjUmJih0PWAke3Quc2xpY2UoMCwyNSl9Li4uYCksYCBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGV9ICgke3R9KWB9ZnVuY3Rpb24gYk8oZSl7cmV0dXJuIGUmJmUuY29uc3RydWN0b3ImJmUuY29uc3RydWN0b3IubmFtZT9gaW5zdGFuY2Ugb2YgJHtlLmNvbnN0cnVjdG9yLm5hbWV9YDpgdHlwZSAke3R5cGVvZiBlfWB9ZnVuY3Rpb24gd28oZSx0KXtpZihlJiZ0JiZlIT09dCl7aWYoQXJyYXkuaXNBcnJheSh0LmVycm9ycykpcmV0dXJuIHQuZXJyb3JzLnB1c2goZSksdDtsZXQgcj1uZXcgQWdncmVnYXRlRXJyb3IoW3QsZV0sdC5tZXNzYWdlKTtyZXR1cm4gci5jb2RlPXQuY29kZSxyfXJldHVybiBlfHx0fXZhciBnSSxtSSxJTyxnTyxtTyxuZSxJcix5SSxiSSxVbCxETyxDSSxMSSxTcix3ZSxBcixZZSxXaSxQSSxWaSxILEdpLHVlLFh0LEhpLCRpLGdvLHZpLEx0LE5yLHp0LFlpLG1vLERvLGV0LHhyLHB0LHlvLGJvLENvLExvLFRyLG9uLGR0LFVJLF9lPXAoKCk9PntMbCgpO2ZyKCk7VnQoKTt1dCgpO2FyKCk7SmUoKTt6cigpO0JzKCk7KHtlcnJubzp7RU5PVERJUjpnSSxFTk9FTlQ6bUl9fT1kciksSU89U3ltYm9sKFwia0lzTm9kZUVycm9yXCIpLGdPPS9eKFtBLVpdW2EtejAtOV0qKSskLyxtTz1bXCJzdHJpbmdcIixcImZ1bmN0aW9uXCIsXCJudW1iZXJcIixcIm9iamVjdFwiLFwiRnVuY3Rpb25cIixcIk9iamVjdFwiLFwiYm9vbGVhblwiLFwiYmlnaW50XCIsXCJzeW1ib2xcIl0sbmU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKFwiVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZFwiKTt0aGlzLmNvZGU9XCJBQk9SVF9FUlJcIix0aGlzLm5hbWU9XCJBYm9ydEVycm9yXCJ9fTtJcj1lZShmdW5jdGlvbih0KXtyZXR1cm4gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodCksdH0pLHlJPWVlKGZ1bmN0aW9uKHQscixuLG8pe2xldHswOnMsMTppfT1QbCh0KXx8VWwsYz1gJHtyfSAke3N9OiAke2l9YCxhPVwiXCI7byYmbz4wP2E9YCAke259OiR7b31gOm4mJihhPWAgJHtufWApO2xldCBSPW5ldyBFcnJvcihgJHtjfSR7YX1gKTtyZXR1cm4gUi5jb2RlPXMsUi5lcnJubz10LFIuc3lzY2FsbD1yLFIuYWRkcmVzcz1uLG8mJihSLnBvcnQ9byksSXIoUil9KSxiST1lZShmdW5jdGlvbih0LHIsbil7bGV0IG89SW8odCkscz1uP2Ake3J9ICR7b30gJHtufWA6YCR7cn0gJHtvfWAsaT1uZXcgRXJyb3Iocyk7cmV0dXJuIGkuZXJybm89dCxpLmNvZGU9byxpLnN5c2NhbGw9cixJcihpKX0pO1VsPVtcIlVOS05PV05cIixcInVua25vd24gZXJyb3JcIl0sRE89ZWUoZnVuY3Rpb24odCl7bGV0ezA6ciwxOm59PVBsKHQuZXJybm8pfHxVbCxvPWAke3J9OiAke3QubWVzc2FnZXx8bn0sICR7dC5zeXNjYWxsfWAscyxpO3QucGF0aCYmKHM9dC5wYXRoLnRvU3RyaW5nKCksbys9YCAnJHtzfSdgKSx0LmRlc3QmJihpPXQuZGVzdC50b1N0cmluZygpLG8rPWAgLT4gJyR7aX0nYCk7bGV0IGM9bmV3IEVycm9yKG8pO2ZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyh0KSlhPT09XCJtZXNzYWdlXCJ8fGE9PT1cInBhdGhcInx8YT09PVwiZGVzdFwifHwoY1thXT10W2FdKTtyZXR1cm4gYy5jb2RlPXIscyYmKGMucGF0aD1zKSxpJiYoYy5kZXN0PWkpLElyKGMpfSksQ0k9ZWUoZnVuY3Rpb24odCxyLG4sbyxzKXtsZXQgaT1Jbyh0KSxjPVwiXCI7byYmbz4wP2M9YCAke259OiR7b31gOm4mJihjPWAgJHtufWApLHMmJihjKz1gIC0gTG9jYWwgKCR7c30pYCk7bGV0IGE9bmV3IEVycm9yKGAke3J9ICR7aX0ke2N9YCk7cmV0dXJuIGEuZXJybm89dCxhLmNvZGU9aSxhLnN5c2NhbGw9cixhLmFkZHJlc3M9bixvJiYoYS5wb3J0PW8pLElyKGEpfSksTEk9ZWUoZnVuY3Rpb24oZSx0LHIpe2xldCBuO3R5cGVvZiBlPT1cIm51bWJlclwiJiYobj1lLGU9PT1ELmdldChcIkVBSV9OT0RBVEFcIil8fGU9PT1ELmdldChcIkVBSV9OT05BTUVcIik/ZT1cIkVOT1RGT1VORFwiOmU9SW8oZSkpO2xldCBvPWAke3R9ICR7ZX0ke3I/YCAke3J9YDpcIlwifWAscz1uZXcgRXJyb3Iobyk7cmV0dXJuIHMuZXJybm89bixzLmNvZGU9ZSxzLnN5c2NhbGw9dCxyJiYocy5ob3N0bmFtZT1yKSxJcihzKX0pLFNyPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IocixuLG8pe3N1cGVyKG8pO3RoaXMuY29kZT1uLHRoaXMubmFtZT1yLHRoaXMuc3RhY2s9dGhpcy5zdGFjayYmYCR7cn0gWyR7dGhpcy5jb2RlfV0ke3RoaXMuc3RhY2suc2xpY2UoMjApfWB9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFske3RoaXMuY29kZX1dOiAke3RoaXMubWVzc2FnZX1gfX0sd2U9Y2xhc3MgZXh0ZW5kcyBTcntjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKEVycm9yLnByb3RvdHlwZS5uYW1lLHQscil9fSxBcj1jbGFzcyBleHRlbmRzIFNye2NvbnN0cnVjdG9yKHQscil7c3VwZXIoUmFuZ2VFcnJvci5wcm90b3R5cGUubmFtZSx0LHIpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLFJhbmdlRXJyb3IucHJvdG90eXBlKSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCR7dGhpcy5uYW1lfSBbJHt0aGlzLmNvZGV9XTogJHt0aGlzLm1lc3NhZ2V9YH19fSxZZT1jbGFzcyBleHRlbmRzIFNye2NvbnN0cnVjdG9yKHQscil7c3VwZXIoVHlwZUVycm9yLnByb3RvdHlwZS5uYW1lLHQsciksT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsVHlwZUVycm9yLnByb3RvdHlwZSksdGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAke3RoaXMubmFtZX0gWyR7dGhpcy5jb2RlfV06ICR7dGhpcy5tZXNzYWdlfWB9fX0sV2k9Y2xhc3MgZXh0ZW5kcyBTcntjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IG89YCR7bn06ICR7ci5zeXNjYWxsfSByZXR1cm5lZCAke3IuY29kZX0gKCR7ci5tZXNzYWdlfSlgO3IucGF0aCE9PXZvaWQgMCYmKG8rPWAgJHtyLnBhdGh9YCksci5kZXN0IT09dm9pZCAwJiYobys9YCA9PiAke3IuZGVzdH1gKSxzdXBlcihcIlN5c3RlbUVycm9yXCIsdCxvKSxJcih0aGlzKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtbSU9dOnt2YWx1ZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0saW5mbzp7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0sZXJybm86e2dldCgpe3JldHVybiByLmVycm5vfSxzZXQ6cz0+e3IuZXJybm89c30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHN5c2NhbGw6e2dldCgpe3JldHVybiByLnN5c2NhbGx9LHNldDpzPT57ci5zeXNjYWxsPXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHIucGF0aCE9PXZvaWQgMCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYXRoXCIse2dldCgpe3JldHVybiByLnBhdGh9LHNldDpzPT57ci5wYXRoPXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksci5kZXN0IT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImRlc3RcIix7Z2V0KCl7cmV0dXJuIHIuZGVzdH0sc2V0OnM9PntyLmRlc3Q9c30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7dGhpcy5jb2RlfV06ICR7dGhpcy5tZXNzYWdlfWB9fTtQST15TyhcIkVSUl9GU19FSVNESVJcIixcIlBhdGggaXMgYSBkaXJlY3RvcnlcIik7Vmk9Y2xhc3MgZXh0ZW5kcyBBcntjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IG89TWwodCxyKTtzdXBlcihcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsYCR7b30uJHtrbChuKX1gKX19LEg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IG89TWwodCxyKTtzdXBlcihcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsYCR7b30uJHtrbChuKX1gKX19O0guUmFuZ2VFcnJvcj1WaTtHaT1jbGFzcyBleHRlbmRzIEFye2NvbnN0cnVjdG9yKHQscixuPVwiaXMgaW52YWxpZFwiKXtsZXQgbz10LmluY2x1ZGVzKFwiLlwiKT9cInByb3BlcnR5XCI6XCJhcmd1bWVudFwiLHM9SyhyKTtzdXBlcihcIkVSUl9JTlZBTElEX0FSR19WQUxVRVwiLGBUaGUgJHtvfSAnJHt0fScgJHtufS4gUmVjZWl2ZWQgJHtzfWApfX0sdWU9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LHIsbj1cImlzIGludmFsaWRcIil7bGV0IG89dC5pbmNsdWRlcyhcIi5cIik/XCJwcm9wZXJ0eVwiOlwiYXJndW1lbnRcIixzPUsocik7c3VwZXIoXCJFUlJfSU5WQUxJRF9BUkdfVkFMVUVcIixgVGhlICR7b30gJyR7dH0nICR7bn0uIFJlY2VpdmVkICR7c31gKX19O3VlLlJhbmdlRXJyb3I9R2k7WHQ9Y2xhc3MgZXh0ZW5kcyBSYW5nZUVycm9ye2NvbnN0cnVjdG9yKHIsbixvLHM9ITEpe0RlKG4sJ01pc3NpbmcgXCJyYW5nZVwiIGFyZ3VtZW50Jyk7bGV0IGk9cz9yOmBUaGUgdmFsdWUgb2YgXCIke3J9XCIgaXMgb3V0IG9mIHJhbmdlLmAsYztOdW1iZXIuaXNJbnRlZ2VyKG8pJiZNYXRoLmFicyhvKT4yKiozMj9jPXdsKFN0cmluZyhvKSk6dHlwZW9mIG89PVwiYmlnaW50XCI/KGM9U3RyaW5nKG8pLChvPjJuKiozMm58fG88LSgybioqMzJuKSkmJihjPXdsKGMpKSxjKz1cIm5cIik6Yz1LKG8pLGkrPWAgSXQgbXVzdCBiZSAke259LiBSZWNlaXZlZCAke2N9YDtzdXBlcihpKTt0aGlzLmNvZGU9XCJFUlJfT1VUX09GX1JBTkdFXCI7bGV0e25hbWU6YX09dGhpczt0aGlzLm5hbWU9YCR7YX0gWyR7dGhpcy5jb2RlfV1gLHRoaXMuc3RhY2ssdGhpcy5uYW1lPWF9fSxIaT1jbGFzcyBleHRlbmRzIEFye2NvbnN0cnVjdG9yKHQpe3N1cGVyKFwiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTXCIsdD9gXCIke3R9XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzYDpcIkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIil9fSwkaT1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQpe3N1cGVyKFwiRVJSX0lOVkFMSURfQ0FMTEJBQ0tcIixgQ2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uLiBSZWNlaXZlZCAke0sodCl9YCl9fSxnbz1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKCl7c3VwZXIoXCJFUlJfSU5WQUxJRF9DVVJTT1JfUE9TXCIsXCJDYW5ub3Qgc2V0IGN1cnNvciByb3cgd2l0aG91dCBzZXR0aW5nIGl0cyBjb2x1bW5cIil9fSx2aT1jbGFzcyBleHRlbmRzIHdle2NvbnN0cnVjdG9yKCl7c3VwZXIoXCJFUlJfSVBDX0NIQU5ORUxfQ0xPU0VEXCIsXCJDaGFubmVsIGNsb3NlZFwiKX19LEx0PWNsYXNzIGV4dGVuZHMgd2V7Y29uc3RydWN0b3IodCl7c3VwZXIoXCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRFwiLGBUaGUgJHt0fSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkYCl9fSxOcj1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKC4uLnQpe2xldCByPVwiVGhlIFwiLG49dC5sZW5ndGgsbz1zPT5gXCIke3N9XCJgO3N3aXRjaCh0PXQubWFwKHM9PkFycmF5LmlzQXJyYXkocyk/cy5tYXAobykuam9pbihcIiBvciBcIik6byhzKSksbil7Y2FzZSAxOnIrPWAke3RbMF19IGFyZ3VtZW50YDticmVhaztjYXNlIDI6cis9YCR7dFswXX0gYW5kICR7dFsxXX0gYXJndW1lbnRzYDticmVhaztkZWZhdWx0OnIrPXQuc2xpY2UoMCxuLTEpLmpvaW4oXCIsIFwiKSxyKz1gLCBhbmQgJHt0W24tMV19IGFyZ3VtZW50c2A7YnJlYWt9c3VwZXIoXCJFUlJfTUlTU0lOR19BUkdTXCIsYCR7cn0gbXVzdCBiZSBzcGVjaWZpZWRgKX19LHp0PWNsYXNzIGV4dGVuZHMgd2V7Y29uc3RydWN0b3IoKXtzdXBlcihcIkVSUl9NVUxUSVBMRV9DQUxMQkFDS1wiLFwiQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzXCIpfX0sWWk9Y2xhc3MgZXh0ZW5kcyBBcntjb25zdHJ1Y3Rvcih0LHIsbj0hMCl7RGUodHlwZW9mIG49PVwiYm9vbGVhblwiLFwiVGhlICdhbGxvd1plcm8nIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLlwiKTtsZXQgbz1uP1wiPj1cIjpcIj5cIjtzdXBlcihcIkVSUl9TT0NLRVRfQkFEX1BPUlRcIixgJHt0fSBzaG91bGQgYmUgJHtvfSAwIGFuZCA8IDY1NTM2LiBSZWNlaXZlZCAke3J9LmApfX0sbW89Y2xhc3MgZXh0ZW5kcyB3ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcihcIkVSUl9TVFJFQU1fQUxSRUFEWV9GSU5JU0hFRFwiLGBDYW5ub3QgY2FsbCAke3R9IGFmdGVyIGEgc3RyZWFtIHdhcyBmaW5pc2hlZGApfX0sRG89Y2xhc3MgZXh0ZW5kcyB3ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKFwiRVJSX1NUUkVBTV9DQU5OT1RfUElQRVwiLFwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZVwiKX19LGV0PWNsYXNzIGV4dGVuZHMgd2V7Y29uc3RydWN0b3IodCl7c3VwZXIoXCJFUlJfU1RSRUFNX0RFU1RST1lFRFwiLGBDYW5ub3QgY2FsbCAke3R9IGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWRgKX19LHhyPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IoKXtzdXBlcihcIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVNcIixcIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtXCIpfX0scHQ9Y2xhc3MgZXh0ZW5kcyB3ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKFwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIixcIlByZW1hdHVyZSBjbG9zZVwiKX19LHlvPWNsYXNzIGV4dGVuZHMgd2V7Y29uc3RydWN0b3IoKXtzdXBlcihcIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0ZcIixcInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GXCIpfX0sYm89Y2xhc3MgZXh0ZW5kcyB3ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKFwiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVFwiLFwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnRcIil9fSxDbz1jbGFzcyBleHRlbmRzIHdle2NvbnN0cnVjdG9yKCl7c3VwZXIoXCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORFwiLFwid3JpdGUgYWZ0ZXIgZW5kXCIpfX0sTG89Y2xhc3MgZXh0ZW5kcyB3ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcihcIkVSUl9VTkhBTkRMRURfRVJST1JcIixgVW5oYW5kbGVkIGVycm9yLiAoJHt0fSlgKX19LFRyPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCl7c3VwZXIoXCJFUlJfVU5LTk9XTl9FTkNPRElOR1wiLGBVbmtub3duIGVuY29kaW5nOiAke3R9YCl9fSxvbj1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQpe3N1cGVyKFwiRVJSX1VOS05PV05fU0lHTkFMXCIsYFVua25vd24gc2lnbmFsOiAke3R9YCl9fTtkdD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihcIkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRVwiLGBFeHBlY3RlZCAke3R9IHRvIGJlIHJldHVybmVkIGZyb20gdGhlIFwiJHtyfVwiIGZ1bmN0aW9uIGJ1dCBnb3QgJHtiTyhuKX0uYCl9fTtJLkVSUl9JUENfQ0hBTk5FTF9DTE9TRUQ9dmk7SS5FUlJfSU5WQUxJRF9BUkdfVFlQRT1IO0kuRVJSX0lOVkFMSURfQVJHX1ZBTFVFPXVlO0kuRVJSX0lOVkFMSURfQ0FMTEJBQ0s9JGk7SS5FUlJfT1VUX09GX1JBTkdFPVh0O0kuRVJSX1NPQ0tFVF9CQURfUE9SVD1ZaTtJLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUz1IaTtJLkVSUl9VTktOT1dOX0VOQ09ESU5HPVRyO1VJPWVlKGZ1bmN0aW9uKHQscil7bGV0IG49bmV3IEVycm9yKHQpO3JldHVybiBPYmplY3QuYXNzaWduKG4sciksbn0pfSk7ZnVuY3Rpb24gYihlKXtiLmluaXQuY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIFVvKGUpe0h0KGUsXCJsaXN0ZW5lclwiKX1mdW5jdGlvbiBWbChlPWNuLC4uLnQpe2lmKHR5cGVvZiBlIT1cIm51bWJlclwifHxlPDB8fE51bWJlci5pc05hTihlKSl0aHJvdyBuZXcgWHQoXCJuXCIsXCJhIG5vbi1uZWdhdGl2ZSBudW1iZXJcIixlKTtpZih0Lmxlbmd0aD09PTApY249ZTtlbHNlIGZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKG4gaW5zdGFuY2VvZiBFdmVudFRhcmdldCluW0ZsXT1lLG5bV2xdPSExO2Vsc2UgaWYodHlwZW9mIG4uc2V0TWF4TGlzdGVuZXJzPT1cImZ1bmN0aW9uXCIpbi5zZXRNYXhMaXN0ZW5lcnMoZSk7ZWxzZSB0aHJvdyBuZXcgSChcImV2ZW50VGFyZ2V0c1wiLFtcIkV2ZW50RW1pdHRlclwiLFwiRXZlbnRUYXJnZXRcIl0sbil9fWZ1bmN0aW9uIEJsKGUsdCxyLG4pe2lmKCEhZVt0dF0pdHJ5e2xldCBvPXQudGhlbjt0eXBlb2Ygbz09XCJmdW5jdGlvblwiJiZvLmNhbGwodCx2b2lkIDAsZnVuY3Rpb24ocyl7cHJvY2Vzcy5uZXh0VGljayh3TyxlLHMscixuKX0pfWNhdGNoKG8pe2UuZW1pdChcImVycm9yXCIsbyl9fWZ1bmN0aW9uIHdPKGUsdCxyLG4pe2lmKHR5cGVvZiBlW0tpXT09XCJmdW5jdGlvblwiKWVbS2ldKHQsciwuLi5uKTtlbHNle2xldCBvPWVbdHRdO3RyeXtlW3R0XT0hMSxlLmVtaXQoXCJlcnJvclwiLHQpfWZpbmFsbHl7ZVt0dF09b319fWZ1bmN0aW9uIEdsKGUpe3JldHVybiBlLl9tYXhMaXN0ZW5lcnM9PT12b2lkIDA/Yi5kZWZhdWx0TWF4TGlzdGVuZXJzOmUuX21heExpc3RlbmVyc31mdW5jdGlvbiBIbChlLHQscixuKXtsZXQgbyxzLGk7aWYoVW8ocikscz1lLl9ldmVudHMscz09PXZvaWQgMD8ocz1lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9ldmVudHNDb3VudD0wKToocy5uZXdMaXN0ZW5lciE9PXZvaWQgMCYmKGUuZW1pdChcIm5ld0xpc3RlbmVyXCIsdCxyLmxpc3RlbmVyPz9yKSxzPWUuX2V2ZW50cyksaT1zW3RdKSxpPT09dm9pZCAwKXNbdF09ciwrK2UuX2V2ZW50c0NvdW50O2Vsc2UgaWYodHlwZW9mIGk9PVwiZnVuY3Rpb25cIj9pPXNbdF09bj9bcixpXTpbaSxyXTpuP2kudW5zaGlmdChyKTppLnB1c2gociksbz1HbChlKSxvPjAmJmkubGVuZ3RoPm8mJiFpLndhcm5lZCl7aS53YXJuZWQ9ITA7bGV0IGM9bmV3IEVycm9yKGBQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICR7aS5sZW5ndGh9ICR7U3RyaW5nKHQpfSBsaXN0ZW5lcnMgYWRkZWQgdG8gJHtLKGUse2RlcHRoOi0xfSl9LiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdGApO2MubmFtZT1cIk1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZ1wiLGMuZW1pdHRlcj1lLGMudHlwZT10LGMuY291bnQ9aS5sZW5ndGgscHJvY2Vzcy5lbWl0V2FybmluZyhjKX1yZXR1cm4gZX1mdW5jdGlvbiBQTygpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gJGwoZSx0LHIpe2xldCBuPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDplLHR5cGU6dCxsaXN0ZW5lcjpyfSxvPVBPLmJpbmQobik7cmV0dXJuIG8ubGlzdGVuZXI9cixuLndyYXBGbj1vLG99ZnVuY3Rpb24gdmwoZSx0LHIpe2xldCBuPWUuX2V2ZW50cztpZihuPT09dm9pZCAwKXJldHVybltdO2xldCBvPW5bdF07cmV0dXJuIG89PT12b2lkIDA/W106dHlwZW9mIG89PVwiZnVuY3Rpb25cIj9yP1tvLmxpc3RlbmVyfHxvXTpbb106cj9VTyhvKTpYaShvKX1mdW5jdGlvbiBLbChlLHQpe3JldHVybiB0eXBlb2YgZS5saXN0ZW5lckNvdW50PT1cImZ1bmN0aW9uXCI/ZS5saXN0ZW5lckNvdW50KHQpOllsLmNhbGwoZSx0KX1mdW5jdGlvbiBYaShlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMjpyZXR1cm5bZVswXSxlWzFdXTtjYXNlIDM6cmV0dXJuW2VbMF0sZVsxXSxlWzJdXTtjYXNlIDQ6cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM11dO2Nhc2UgNTpyZXR1cm5bZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdXTtjYXNlIDY6cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSxlWzVdXX1yZXR1cm4gZS5zbGljZSgpfWZ1bmN0aW9uIFVPKGUpe2xldCB0PVhpKGUpO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7KytyKXtsZXQgbj10W3JdLmxpc3RlbmVyO3R5cGVvZiBuPT1cImZ1bmN0aW9uXCImJih0W3JdPW4pfXJldHVybiB0fWZ1bmN0aW9uIGpsKGUsdCl7aWYodHlwZW9mIGUubGlzdGVuZXJzPT1cImZ1bmN0aW9uXCIpcmV0dXJuIGUubGlzdGVuZXJzKHQpO2lmKGUgaW5zdGFuY2VvZiBFdmVudFRhcmdldCl7bGV0IHI9ZVtrRXZlbnRzXS5nZXQodCksbj1bXSxvPXI/Lm5leHQ7Zm9yKDtvPy5saXN0ZW5lciE9PXZvaWQgMDspe2xldCBzPW8ubGlzdGVuZXI/LmRlcmVmP28ubGlzdGVuZXIuZGVyZWYoKTpvLmxpc3RlbmVyO24ucHVzaChzKSxvPW8ubmV4dH1yZXR1cm4gbn10aHJvdyBuZXcgSChcImVtaXR0ZXJcIixbXCJFdmVudEVtaXR0ZXJcIixcIkV2ZW50VGFyZ2V0XCJdLGUpfWFzeW5jIGZ1bmN0aW9uIFhsKGUsdCxyPXt9KXtsZXQgbj1yPy5zaWduYWw7aWYoR3QobixcIm9wdGlvbnMuc2lnbmFsXCIpLG4/LmFib3J0ZWQpdGhyb3cgbmV3IG5lO3JldHVybiBuZXcgUHJvbWlzZSgobyxzKT0+e2xldCBpPVI9PntlLnJlbW92ZUxpc3RlbmVyKHQsYyksbiE9bnVsbCYmaHQobixcImFib3J0XCIsYSkscyhSKX0sYz0oLi4uUik9Pnt0eXBlb2YgZS5yZW1vdmVMaXN0ZW5lcj09XCJmdW5jdGlvblwiJiZlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixpKSxuIT1udWxsJiZodChuLFwiYWJvcnRcIixhKSxvKFIpfTtQbyhlLHQsYyx7b25jZTohMH0pLHQhPT1cImVycm9yXCImJnR5cGVvZiBlLm9uY2U9PVwiZnVuY3Rpb25cIiYmZS5vbmNlKFwiZXJyb3JcIixpKTtmdW5jdGlvbiBhKCl7aHQoZSx0LGMpLGh0KGUsXCJlcnJvclwiLGkpLHMobmV3IG5lKX1uIT1udWxsJiZQbyhuLFwiYWJvcnRcIixhLHtvbmNlOiEwfSl9KX1mdW5jdGlvbiBzbihlLHQpe3JldHVybnt2YWx1ZTplLGRvbmU6dH19ZnVuY3Rpb24gaHQoZSx0LHIsbil7aWYodHlwZW9mIGUucmVtb3ZlTGlzdGVuZXI9PVwiZnVuY3Rpb25cIillLnJlbW92ZUxpc3RlbmVyKHQscik7ZWxzZSBpZih0eXBlb2YgZS5yZW1vdmVFdmVudExpc3RlbmVyPT1cImZ1bmN0aW9uXCIpZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscixuKTtlbHNlIHRocm93IG5ldyBIKFwiZW1pdHRlclwiLFwiRXZlbnRFbWl0dGVyXCIsZSl9ZnVuY3Rpb24gUG8oZSx0LHIsbil7aWYodHlwZW9mIGUub249PVwiZnVuY3Rpb25cIiluPy5vbmNlP2Uub25jZSh0LHIpOmUub24odCxyKTtlbHNlIGlmKHR5cGVvZiBlLmFkZEV2ZW50TGlzdGVuZXI9PVwiZnVuY3Rpb25cIillLmFkZEV2ZW50TGlzdGVuZXIodCxvPT57cihvKX0sbik7ZWxzZSB0aHJvdyBuZXcgSChcImVtaXR0ZXJcIixcIkV2ZW50RW1pdHRlclwiLGUpfWZ1bmN0aW9uIHpsKGUsdCxyKXtsZXQgbj1yPy5zaWduYWw7aWYoR3QobixcIm9wdGlvbnMuc2lnbmFsXCIpLG4/LmFib3J0ZWQpdGhyb3cgbmV3IG5lO2xldCBvPVtdLHM9W10saT1udWxsLGM9ITEsYT1PYmplY3Quc2V0UHJvdG90eXBlT2Yoe25leHQoKXtsZXQgdT1vLnNoaWZ0KCk7aWYodSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNuKHUsITEpKTtpZihpKXtsZXQgZj1Qcm9taXNlLnJlamVjdChpKTtyZXR1cm4gaT1udWxsLGZ9cmV0dXJuIGM/UHJvbWlzZS5yZXNvbHZlKHNuKHZvaWQgMCwhMCkpOm5ldyBQcm9taXNlKGZ1bmN0aW9uKGYsQSl7cy5wdXNoKHtyZXNvbHZlOmYscmVqZWN0OkF9KX0pfSxyZXR1cm4oKXtodChlLHQsbCksaHQoZSxcImVycm9yXCIsRSksbiYmaHQobixcImFib3J0XCIsUix7b25jZTohMH0pLGM9ITA7Zm9yKGxldCB1IG9mIHMpdS5yZXNvbHZlKHNuKHZvaWQgMCwhMCkpO3JldHVybiBQcm9taXNlLnJlc29sdmUoc24odm9pZCAwLCEwKSl9LHRocm93KHUpe2lmKCF1fHwhKHUgaW5zdGFuY2VvZiBFcnJvcikpdGhyb3cgbmV3IEgoXCJFdmVudEVtaXR0ZXIuQXN5bmNJdGVyYXRvclwiLFwiRXJyb3JcIix1KTtpPXUsaHQoZSx0LGwpLGh0KGUsXCJlcnJvclwiLEUpfSxbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7cmV0dXJuIHRoaXN9fSxNTyk7cmV0dXJuIFBvKGUsdCxsKSx0IT09XCJlcnJvclwiJiZ0eXBlb2YgZS5vbj09XCJmdW5jdGlvblwiJiZlLm9uKFwiZXJyb3JcIixFKSxuJiZQbyhuLFwiYWJvcnRcIixSLHtvbmNlOiEwfSksYTtmdW5jdGlvbiBSKCl7RShuZXcgbmUpfWZ1bmN0aW9uIGwoLi4udSl7bGV0IGY9cy5zaGlmdCgpO2Y/Zi5yZXNvbHZlKHNuKHUsITEpKTpvLnB1c2godSl9ZnVuY3Rpb24gRSh1KXtjPSEwO2xldCBmPXMuc2hpZnQoKTtmP2YucmVqZWN0KHUpOmk9dSxhLnJldHVybigpfX12YXIgS2ksdHQsamksRmwsV2wsVmUsQ08sTE8sY24sWWwsTU8sUWw9cCgoKT0+e1widXNlIHN0cmljdFwiO2ZyKCk7X2UoKTt5ZSgpO1VlKCk7S2k9U3ltYm9sLmZvcihcIm5vZGVqcy5yZWplY3Rpb25cIiksdHQ9U3ltYm9sKFwia0NhcHR1cmVcIiksamk9U3ltYm9sKFwiZXZlbnRzLmVycm9yTW9uaXRvclwiKSxGbD1TeW1ib2woXCJldmVudHMubWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnNcIiksV2w9U3ltYm9sKFwiZXZlbnRzLm1heEV2ZW50VGFyZ2V0TGlzdGVuZXJzV2FybmVkXCIpO1ZlPWI7Yi5vbj16bDtiLm9uY2U9WGw7Yi5nZXRFdmVudExpc3RlbmVycz1qbDtiLnNldE1heExpc3RlbmVycz1WbDtiLmxpc3RlbmVyQ291bnQ9S2w7Yi5FdmVudEVtaXR0ZXI9YjtiLnVzaW5nRG9tYWlucz0hMTtiLmNhcHR1cmVSZWplY3Rpb25TeW1ib2w9S2k7Q089Yi5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sLExPPWIuZXJyb3JNb25pdG9yO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLFwiY2FwdHVyZVJlamVjdGlvbnNcIix7Z2V0KCl7cmV0dXJuIGIucHJvdG90eXBlW3R0XX0sc2V0KGUpe1plKGUsXCJFdmVudEVtaXR0ZXIuY2FwdHVyZVJlamVjdGlvbnNcIiksYi5wcm90b3R5cGVbdHRdPWV9LGVudW1lcmFibGU6ITB9KTtiLmVycm9yTW9uaXRvcj1qaTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5wcm90b3R5cGUsdHQse3ZhbHVlOiExLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITF9KTtiLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMDtiLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MDtiLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDtjbj0xMDtPYmplY3QuZGVmaW5lUHJvcGVydHkoYixcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY259LHNldDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9XCJudW1iZXJcInx8ZTwwfHxOdW1iZXIuaXNOYU4oZSkpdGhyb3cgbmV3IFh0KFwiZGVmYXVsdE1heExpc3RlbmVyc1wiLFwiYSBub24tbmVnYXRpdmUgbnVtYmVyXCIsZSk7Y249ZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiLHtrTWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnM6e3ZhbHVlOkZsLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLHdyaXRhYmxlOiExfSxrTWF4RXZlbnRUYXJnZXRMaXN0ZW5lcnNXYXJuZWQ6e3ZhbHVlOldsLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExLHdyaXRhYmxlOiExfX0pO2IuaW5pdD1mdW5jdGlvbihlKXsodGhpcy5fZXZlbnRzPT09dm9pZCAwfHx0aGlzLl9ldmVudHM9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykmJih0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDAsZT8uY2FwdHVyZVJlamVjdGlvbnM/KFplKGUuY2FwdHVyZVJlamVjdGlvbnMsXCJvcHRpb25zLmNhcHR1cmVSZWplY3Rpb25zXCIpLHRoaXNbdHRdPUJvb2xlYW4oZS5jYXB0dXJlUmVqZWN0aW9ucykpOnRoaXNbdHRdPWIucHJvdG90eXBlW3R0XX07Yi5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT1cIm51bWJlclwifHx0PDB8fE51bWJlci5pc05hTih0KSl0aHJvdyBuZXcgWHQoXCJuXCIsXCJhIG5vbi1uZWdhdGl2ZSBudW1iZXJcIix0KTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc307Yi5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIEdsKHRoaXMpfTtiLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKHQsLi4ucil7bGV0IG49dD09PVwiZXJyb3JcIixvPXRoaXMuX2V2ZW50cztpZihvIT09dm9pZCAwKW4mJm9bamldIT09dm9pZCAwJiZ0aGlzLmVtaXQoamksLi4uciksbj1uJiZvLmVycm9yPT09dm9pZCAwO2Vsc2UgaWYoIW4pcmV0dXJuITE7aWYobil7bGV0IGk7aWYoci5sZW5ndGg+MCYmKGk9clswXSksaSBpbnN0YW5jZW9mIEVycm9yKXt0cnl7bGV0IFI9e307RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoUixiLnByb3RvdHlwZS5lbWl0KX1jYXRjaHt9dGhyb3cgaX1sZXQgYzt0cnl7Yz1LKGkpfWNhdGNoe2M9aX1sZXQgYT1uZXcgTG8oYyk7dGhyb3cgYS5jb250ZXh0PWksYX1sZXQgcz1vW3RdO2lmKHM9PT12b2lkIDApcmV0dXJuITE7aWYodHlwZW9mIHM9PVwiZnVuY3Rpb25cIil7bGV0IGk9cy5hcHBseSh0aGlzLHIpO2khPW51bGwmJkJsKHRoaXMsaSx0LHIpfWVsc2V7bGV0IGk9cy5sZW5ndGgsYz1YaShzKTtmb3IobGV0IGE9MDthPGk7KythKXtsZXQgUj1jW2FdLmFwcGx5KHRoaXMscik7UiE9bnVsbCYmQmwodGhpcyxSLHQscil9fXJldHVybiEwfTtiLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LHIpe3JldHVybiBIbCh0aGlzLHQsciwhMSl9O2IucHJvdG90eXBlLm9uPWIucHJvdG90eXBlLmFkZExpc3RlbmVyO2IucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbih0LHIpe3JldHVybiBIbCh0aGlzLHQsciwhMCl9O2IucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxyKXtyZXR1cm4gVW8ociksdGhpcy5vbih0LCRsKHRoaXMsdCxyKSksdGhpc307Yi5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbih0LHIpe3JldHVybiBVbyhyKSx0aGlzLnByZXBlbmRMaXN0ZW5lcih0LCRsKHRoaXMsdCxyKSksdGhpc307Yi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odCxyKXtVbyhyKTtsZXQgbj10aGlzLl9ldmVudHM7aWYobj09PXZvaWQgMClyZXR1cm4gdGhpcztsZXQgbz1uW3RdO2lmKG89PT12b2lkIDApcmV0dXJuIHRoaXM7aWYobz09PXJ8fG8ubGlzdGVuZXI9PT1yKS0tdGhpcy5fZXZlbnRzQ291bnQ9PT0wP3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgblt0XSxuLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lclwiLHQsby5saXN0ZW5lcnx8cikpO2Vsc2UgaWYodHlwZW9mIG8hPVwiZnVuY3Rpb25cIil7bGV0IHM9LTE7Zm9yKGxldCBpPW8ubGVuZ3RoLTE7aT49MDtpLS0paWYob1tpXT09PXJ8fG9baV0ubGlzdGVuZXI9PT1yKXtzPWk7YnJlYWt9aWYoczwwKXJldHVybiB0aGlzO3M9PT0wP28uc2hpZnQoKTpGYShvLHMpLG8ubGVuZ3RoPT09MSYmKG5bdF09b1swXSksbi5yZW1vdmVMaXN0ZW5lciE9PXZvaWQgMCYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LHIpfXJldHVybiB0aGlzfTtiLnByb3RvdHlwZS5vZmY9Yi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7Yi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2xldCByPXRoaXMuX2V2ZW50cztpZihyPT09dm9pZCAwKXJldHVybiB0aGlzO2lmKHIucmVtb3ZlTGlzdGVuZXI9PT12b2lkIDApcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTpyW3RdIT09dm9pZCAwJiYoLS10aGlzLl9ldmVudHNDb3VudD09PTA/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIHJbdF0pLHRoaXM7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApe2ZvcihsZXQgbyBvZiBSZWZsZWN0Lm93bktleXMocikpbyE9PVwicmVtb3ZlTGlzdGVuZXJcIiYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMobyk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKFwicmVtb3ZlTGlzdGVuZXJcIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWxldCBuPXJbdF07aWYodHlwZW9mIG49PVwiZnVuY3Rpb25cIil0aGlzLnJlbW92ZUxpc3RlbmVyKHQsbik7ZWxzZSBpZihuIT09dm9pZCAwKWZvcihsZXQgbz1uLmxlbmd0aC0xO28+PTA7by0tKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxuW29dKTtyZXR1cm4gdGhpc307Yi5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiB2bCh0aGlzLHQsITApfTtiLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIHZsKHRoaXMsdCwhMSl9O1lsPWZ1bmN0aW9uKHQpe2xldCByPXRoaXMuX2V2ZW50cztpZihyIT09dm9pZCAwKXtsZXQgbj1yW3RdO2lmKHR5cGVvZiBuPT1cImZ1bmN0aW9uXCIpcmV0dXJuIDE7aWYobiE9PXZvaWQgMClyZXR1cm4gbi5sZW5ndGh9cmV0dXJuIDB9O2IucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9WWw7Yi5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP1JlZmxlY3Qub3duS2V5cyh0aGlzLl9ldmVudHMpOltdfTtNTz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKGFzeW5jIGZ1bmN0aW9uKigpe30pLnByb3RvdHlwZSl9KTt2YXIgYW49cCgoKT0+e1FsKCl9KTtmdW5jdGlvbiB2KGUsdCl7aWYoWmwoZSx0KSlyZXR1cm4gZVt0XX1mdW5jdGlvbiB6aShlLHQpe2xldCByPXYoZSx0KTtyZXR1cm4gRGUociE9bnVsbCkscn1mdW5jdGlvbiBxbChlKXtyZXR1cm4gdHlwZW9mIGU9PVwibnVtYmVyXCJ8fC9eMHhbMC05YS1mXSskL2kudGVzdChTdHJpbmcoZSkpPyEwOi9eWy0rXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKGVbLStdP1xcZCspPyQvLnRlc3QoU3RyaW5nKGUpKX1mdW5jdGlvbiBRaShlLHQpe2xldCByPWU7dC5zbGljZSgwLC0xKS5mb3JFYWNoKG89PntyPXYocixvKT8/e319KTtsZXQgbj10W3QubGVuZ3RoLTFdO3JldHVybiBabChyLG4pfWZ1bmN0aW9uIEpsKGUse1wiLS1cIjp0PSExLGFsaWFzOnI9e30sYm9vbGVhbjpuPSExLGRlZmF1bHQ6bz17fSxzdG9wRWFybHk6cz0hMSxzdHJpbmc6aT1bXSxjb2xsZWN0OmM9W10sbmVnYXRhYmxlOmE9W10sdW5rbm93bjpSPWw9Pmx9PXt9KXtsZXQgbD17Ym9vbHM6e30sc3RyaW5nczp7fSx1bmtub3duRm46UixhbGxCb29sczohMSxjb2xsZWN0Ont9LG5lZ2F0YWJsZTp7fX07aWYobiE9PXZvaWQgMClpZih0eXBlb2Ygbj09XCJib29sZWFuXCIpbC5hbGxCb29scz0hIW47ZWxzZXtsZXQgaD10eXBlb2Ygbj09XCJzdHJpbmdcIj9bbl06bjtmb3IobGV0IE8gb2YgaC5maWx0ZXIoQm9vbGVhbikpbC5ib29sc1tPXT0hMH1sZXQgRT17fTtpZihyIT09dm9pZCAwKWZvcihsZXQgaCBpbiByKXtsZXQgTz16aShyLGgpO3R5cGVvZiBPPT1cInN0cmluZ1wiP0VbaF09W09dOkVbaF09Tztmb3IobGV0IGQgb2YgemkoRSxoKSlFW2RdPVtoXS5jb25jYXQoRVtoXS5maWx0ZXIoeD0+ZCE9PXgpKX1pZihpIT09dm9pZCAwKXtsZXQgaD10eXBlb2YgaT09XCJzdHJpbmdcIj9baV06aTtmb3IobGV0IE8gb2YgaC5maWx0ZXIoQm9vbGVhbikpe2wuc3RyaW5nc1tPXT0hMDtsZXQgZD12KEUsTyk7aWYoZClmb3IobGV0IHggb2YgZClsLnN0cmluZ3NbeF09ITB9fWlmKGMhPT12b2lkIDApe2xldCBoPXR5cGVvZiBjPT1cInN0cmluZ1wiP1tjXTpjO2ZvcihsZXQgTyBvZiBoLmZpbHRlcihCb29sZWFuKSl7bC5jb2xsZWN0W09dPSEwO2xldCBkPXYoRSxPKTtpZihkKWZvcihsZXQgeCBvZiBkKWwuY29sbGVjdFt4XT0hMH19aWYoYSE9PXZvaWQgMCl7bGV0IGg9dHlwZW9mIGE9PVwic3RyaW5nXCI/W2FdOmE7Zm9yKGxldCBPIG9mIGguZmlsdGVyKEJvb2xlYW4pKXtsLm5lZ2F0YWJsZVtPXT0hMDtsZXQgZD12KEUsTyk7aWYoZClmb3IobGV0IHggb2YgZClsLm5lZ2F0YWJsZVt4XT0hMH19bGV0IHU9e186W119O2Z1bmN0aW9uIGYoaCxPKXtyZXR1cm4gbC5hbGxCb29scyYmL14tLVtePV0rJC8udGVzdChPKXx8dihsLmJvb2xzLGgpfHwhIXYobC5zdHJpbmdzLGgpfHwhIXYoRSxoKX1mdW5jdGlvbiBBKGgsTyxkLHg9ITApe2xldCBUPWgsbT1PLnNwbGl0KFwiLlwiKTttLnNsaWNlKDAsLTEpLmZvckVhY2goZnVuY3Rpb24oUCl7dihULFApPT09dm9pZCAwJiYoVFtQXT17fSksVD12KFQsUCl9KTtsZXQgRj1tW20ubGVuZ3RoLTFdO3gmJiEhdihsLmNvbGxlY3QsTyk/dihULEYpPT09dm9pZCAwP1RbRl09W2RdOkFycmF5LmlzQXJyYXkodihULEYpKT9UW0ZdLnB1c2goZCk6VFtGXT1bdihULEYpLGRdOlRbRl09ZH1mdW5jdGlvbiBTKGgsTyxkPXZvaWQgMCx4KXtpZihkJiZsLnVua25vd25GbiYmIWYoaCxkKSYmbC51bmtub3duRm4oZCxoLE8pPT09ITEpcmV0dXJuO2xldCBUPSF2KGwuc3RyaW5ncyxoKSYmcWwoTyk/TnVtYmVyKE8pOk87QSh1LGgsVCx4KTtsZXQgbT12KEUsaCk7aWYobSlmb3IobGV0IEYgb2YgbSlBKHUsRixULHgpfWZ1bmN0aW9uIEIoaCl7cmV0dXJuIHppKEUsaCkuc29tZShPPT50eXBlb2YgdihsLmJvb2xzLE8pPT1cImJvb2xlYW5cIil9bGV0IGc9W107ZS5pbmNsdWRlcyhcIi0tXCIpJiYoZz1lLnNsaWNlKGUuaW5kZXhPZihcIi0tXCIpKzEpLGU9ZS5zbGljZSgwLGUuaW5kZXhPZihcIi0tXCIpKSk7Zm9yKGxldCBoPTA7aDxlLmxlbmd0aDtoKyspe2xldCBPPWVbaF07aWYoL14tLS4rPS8udGVzdChPKSl7bGV0IGQ9Ty5tYXRjaCgvXi0tKFtePV0rKT0oLiopJC9zKTtEZShkIT1udWxsKTtsZXRbLHgsVF09ZDtsLmJvb2xzW3hdP1MoeCxUIT09XCJmYWxzZVwiLE8pOlMoeCxULE8pfWVsc2UgaWYoL14tLW5vLS4rLy50ZXN0KE8pJiZ2KGwubmVnYXRhYmxlLE8ucmVwbGFjZSgvXi0tbm8tLyxcIlwiKSkpe2xldCBkPU8ubWF0Y2goL14tLW5vLSguKykvKTtEZShkIT1udWxsKSxTKGRbMV0sITEsTywhMSl9ZWxzZSBpZigvXi0tLisvLnRlc3QoTykpe2xldCBkPU8ubWF0Y2goL14tLSguKykvKTtEZShkIT1udWxsKTtsZXRbLHhdPWQsVD1lW2grMV07VCE9PXZvaWQgMCYmIS9eLS8udGVzdChUKSYmIXYobC5ib29scyx4KSYmIWwuYWxsQm9vbHMmJih2KEUseCk/IUIoeCk6ITApPyhTKHgsVCxPKSxoKyspOi9eKHRydWV8ZmFsc2UpJC8udGVzdChUKT8oUyh4LFQ9PT1cInRydWVcIixPKSxoKyspOlMoeCx2KGwuc3RyaW5ncyx4KT9cIlwiOiEwLE8pfWVsc2UgaWYoL14tW14tXSsvLnRlc3QoTykpe2xldCBkPU8uc2xpY2UoMSwtMSkuc3BsaXQoXCJcIikseD0hMTtmb3IobGV0IG09MDttPGQubGVuZ3RoO20rKyl7bGV0IEY9Ty5zbGljZShtKzIpO2lmKEY9PT1cIi1cIil7UyhkW21dLEYsTyk7Y29udGludWV9aWYoL1tBLVphLXpdLy50ZXN0KGRbbV0pJiYvPS8udGVzdChGKSl7UyhkW21dLEYuc3BsaXQoLz0oLispLylbMV0sTykseD0hMDticmVha31pZigvW0EtWmEtel0vLnRlc3QoZFttXSkmJi8tP1xcZCsoXFwuXFxkKik/KGUtP1xcZCspPyQvLnRlc3QoRikpe1MoZFttXSxGLE8pLHg9ITA7YnJlYWt9aWYoZFttKzFdJiZkW20rMV0ubWF0Y2goL1xcVy8pKXtTKGRbbV0sTy5zbGljZShtKzIpLE8pLHg9ITA7YnJlYWt9ZWxzZSBTKGRbbV0sdihsLnN0cmluZ3MsZFttXSk/XCJcIjohMCxPKX1sZXRbVF09Ty5zbGljZSgtMSk7IXgmJlQhPT1cIi1cIiYmKGVbaCsxXSYmIS9eKC18LS0pW14tXS8udGVzdChlW2grMV0pJiYhdihsLmJvb2xzLFQpJiYodihFLFQpPyFCKFQpOiEwKT8oUyhULGVbaCsxXSxPKSxoKyspOmVbaCsxXSYmL14odHJ1ZXxmYWxzZSkkLy50ZXN0KGVbaCsxXSk/KFMoVCxlW2grMV09PT1cInRydWVcIixPKSxoKyspOlMoVCx2KGwuc3RyaW5ncyxUKT9cIlwiOiEwLE8pKX1lbHNlIGlmKCghbC51bmtub3duRm58fGwudW5rbm93bkZuKE8pIT09ITEpJiZ1Ll8ucHVzaChsLnN0cmluZ3MuXz8/IXFsKE8pP086TnVtYmVyKE8pKSxzKXt1Ll8ucHVzaCguLi5lLnNsaWNlKGgrMSkpO2JyZWFrfX1mb3IobGV0W2gsT11vZiBPYmplY3QuZW50cmllcyhvKSlpZighUWkodSxoLnNwbGl0KFwiLlwiKSkmJihBKHUsaCxPKSxFW2hdKSlmb3IobGV0IGQgb2YgRVtoXSlBKHUsZCxPKTtmb3IobGV0IGggb2YgT2JqZWN0LmtleXMobC5ib29scykpaWYoIVFpKHUsaC5zcGxpdChcIi5cIikpKXtsZXQgTz12KGwuY29sbGVjdCxoKT9bXTohMTtBKHUsaCxPLCExKX1mb3IobGV0IGggb2YgT2JqZWN0LmtleXMobC5zdHJpbmdzKSkhUWkodSxoLnNwbGl0KFwiLlwiKSkmJnYobC5jb2xsZWN0LGgpJiZBKHUsaCxbXSwhMSk7aWYodCl7dVtcIi0tXCJdPVtdO2ZvcihsZXQgaCBvZiBnKXVbXCItLVwiXS5wdXNoKGgpfWVsc2UgZm9yKGxldCBoIG9mIGcpdS5fLnB1c2goaCk7cmV0dXJuIHV9dmFyIFpsLGVFPXAoKCk9PnthcigpOyh7aGFzT3duOlpsfT1PYmplY3QpfSk7ZnVuY3Rpb24gdEUoKXtsZXQgZT1KbChEZW5vLmFyZ3MpO3JldHVybntvcHRpb25zOm5ldyBNYXAoT2JqZWN0LmVudHJpZXMoZSkubWFwKChbcixuXSk9PltyLHt2YWx1ZTpufV0pKX19dmFyIHJFPXAoKCk9PntlRSgpfSk7ZnVuY3Rpb24ga08oKXtyZXR1cm4gcWl8fCh7b3B0aW9uczpxaX09dEUoKSkscWl9ZnVuY3Rpb24gbkUoZSl7bGV0IHQ9a08oKTtpZihlLnN0YXJ0c1dpdGgoXCItLW5vLVwiKSl7bGV0IHI9dC5nZXQoXCItLVwiK2Uuc2xpY2UoNSkpO3JldHVybiByJiYhci52YWx1ZX1yZXR1cm4gdC5nZXQoZSk/LnZhbHVlfXZhciBxaSxvRT1wKCgpPT57ckUoKX0pO3ZhciBNbz1wKCgpPT57fSk7ZnVuY3Rpb24gcShlKXtpZih0eXBlb2YgZSE9XCJzdHJpbmdcIil0aHJvdyBuZXcgVHlwZUVycm9yKGBQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoZSl9YCl9ZnVuY3Rpb24ga28oZSl7cmV0dXJuIGU9PT00N31mdW5jdGlvbiBDKGUpe3JldHVybiBrbyhlKXx8ZT09PTkyfWZ1bmN0aW9uIE90KGUpe3JldHVybiBlPj05NyYmZTw9MTIyfHxlPj02NSYmZTw9OTB9ZnVuY3Rpb24gZ3IoZSx0LHIsbil7bGV0IG89XCJcIixzPTAsaT0tMSxjPTAsYTtmb3IobGV0IFI9MCxsPWUubGVuZ3RoO1I8PWw7KytSKXtpZihSPGwpYT1lLmNoYXJDb2RlQXQoUik7ZWxzZXtpZihuKGEpKWJyZWFrO2E9NDd9aWYobihhKSl7aWYoIShpPT09Ui0xfHxjPT09MSkpaWYoaSE9PVItMSYmYz09PTIpe2lmKG8ubGVuZ3RoPDJ8fHMhPT0yfHxvLmNoYXJDb2RlQXQoby5sZW5ndGgtMSkhPT00Nnx8by5jaGFyQ29kZUF0KG8ubGVuZ3RoLTIpIT09NDYpe2lmKG8ubGVuZ3RoPjIpe2xldCBFPW8ubGFzdEluZGV4T2Yocik7RT09PS0xPyhvPVwiXCIscz0wKToobz1vLnNsaWNlKDAsRSkscz1vLmxlbmd0aC0xLW8ubGFzdEluZGV4T2YocikpLGk9UixjPTA7Y29udGludWV9ZWxzZSBpZihvLmxlbmd0aD09PTJ8fG8ubGVuZ3RoPT09MSl7bz1cIlwiLHM9MCxpPVIsYz0wO2NvbnRpbnVlfX10JiYoby5sZW5ndGg+MD9vKz1gJHtyfS4uYDpvPVwiLi5cIixzPTIpfWVsc2Ugby5sZW5ndGg+MD9vKz1yK2Uuc2xpY2UoaSsxLFIpOm89ZS5zbGljZShpKzEsUikscz1SLWktMTtpPVIsYz0wfWVsc2UgYT09PTQ2JiZjIT09LTE/KytjOmM9LTF9cmV0dXJuIG99ZnVuY3Rpb24gQm8oZSx0KXtsZXQgcj10LmRpcnx8dC5yb290LG49dC5iYXNlfHwodC5uYW1lfHxcIlwiKSsodC5leHR8fFwiXCIpO3JldHVybiByP3I9PT10LnJvb3Q/cituOnIrZStuOm59ZnVuY3Rpb24gRm8oZSl7cmV0dXJuIGUucmVwbGFjZUFsbCgvW1xcc10vZyx0PT5HT1t0XT8/dCl9dmFyIEdPLFppPXAoKCk9PntNbygpO0dPPXtcIlx0XCI6XCIlMDlcIixcIlxcblwiOlwiJTBBXCIsXCJcXHZcIjpcIiUwQlwiLFwiXFxmXCI6XCIlMENcIixcIlxcclwiOlwiJTBEXCIsXCIgXCI6XCIlMjBcIn19KTt2YXIgUm49e307cmUoUm4se2Jhc2VuYW1lOigpPT56TyxkZWxpbWl0ZXI6KCk9PnZPLGRpcm5hbWU6KCk9PlhPLGV4dG5hbWU6KCk9PlFPLGZvcm1hdDooKT0+cU8sZnJvbUZpbGVVcmw6KCk9PkpPLGlzQWJzb2x1dGU6KCk9PmlFLGpvaW46KCk9PllPLG5vcm1hbGl6ZTooKT0+c0UscGFyc2U6KCk9PlpPLHJlbGF0aXZlOigpPT5LTyxyZXNvbHZlOigpPT5XbyxzZXA6KCk9PiRPLHRvRmlsZVVybDooKT0+ZVMsdG9OYW1lc3BhY2VkUGF0aDooKT0+ak99KTtmdW5jdGlvbiBXbyguLi5lKXtsZXQgdD1cIlwiLHI9XCJcIixuPSExO2ZvcihsZXQgbz1lLmxlbmd0aC0xO28+PS0xO28tLSl7bGV0IHMse0Rlbm86aX09Z2xvYmFsVGhpcztpZihvPj0wKXM9ZVtvXTtlbHNlIGlmKHQpe2lmKHR5cGVvZiBpPy5lbnY/LmdldCE9XCJmdW5jdGlvblwifHx0eXBlb2YgaT8uY3dkIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlc29sdmVkIGEgcmVsYXRpdmUgcGF0aCB3aXRob3V0IGEgQ1dELlwiKTtzPWkuY3dkKCksKHM9PT12b2lkIDB8fHMuc2xpY2UoMCwzKS50b0xvd2VyQ2FzZSgpIT09YCR7dC50b0xvd2VyQ2FzZSgpfVxcXFxgKSYmKHM9YCR7dH1cXFxcYCl9ZWxzZXtpZih0eXBlb2YgaT8uY3dkIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlJlc29sdmVkIGEgZHJpdmUtbGV0dGVyLWxlc3MgcGF0aCB3aXRob3V0IGEgQ1dELlwiKTtzPWkuY3dkKCl9cShzKTtsZXQgYz1zLmxlbmd0aDtpZihjPT09MCljb250aW51ZTtsZXQgYT0wLFI9XCJcIixsPSExLEU9cy5jaGFyQ29kZUF0KDApO2lmKGM+MSlpZihDKEUpKWlmKGw9ITAsQyhzLmNoYXJDb2RlQXQoMSkpKXtsZXQgdT0yLGY9dTtmb3IoO3U8YyYmIUMocy5jaGFyQ29kZUF0KHUpKTsrK3UpO2lmKHU8YyYmdSE9PWYpe2xldCBBPXMuc2xpY2UoZix1KTtmb3IoZj11O3U8YyYmQyhzLmNoYXJDb2RlQXQodSkpOysrdSk7aWYodTxjJiZ1IT09Zil7Zm9yKGY9dTt1PGMmJiFDKHMuY2hhckNvZGVBdCh1KSk7Kyt1KTt1PT09Yz8oUj1gXFxcXFxcXFwke0F9XFxcXCR7cy5zbGljZShmKX1gLGE9dSk6dSE9PWYmJihSPWBcXFxcXFxcXCR7QX1cXFxcJHtzLnNsaWNlKGYsdSl9YCxhPXUpfX19ZWxzZSBhPTE7ZWxzZSBPdChFKSYmcy5jaGFyQ29kZUF0KDEpPT09NTgmJihSPXMuc2xpY2UoMCwyKSxhPTIsYz4yJiZDKHMuY2hhckNvZGVBdCgyKSkmJihsPSEwLGE9MykpO2Vsc2UgQyhFKSYmKGE9MSxsPSEwKTtpZighKFIubGVuZ3RoPjAmJnQubGVuZ3RoPjAmJlIudG9Mb3dlckNhc2UoKSE9PXQudG9Mb3dlckNhc2UoKSkmJih0Lmxlbmd0aD09PTAmJlIubGVuZ3RoPjAmJih0PVIpLG58fChyPWAke3Muc2xpY2UoYSl9XFxcXCR7cn1gLG49bCksbiYmdC5sZW5ndGg+MCkpYnJlYWt9cmV0dXJuIHI9Z3IociwhbixcIlxcXFxcIixDKSx0KyhuP1wiXFxcXFwiOlwiXCIpK3J8fFwiLlwifWZ1bmN0aW9uIHNFKGUpe3EoZSk7bGV0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuXCIuXCI7bGV0IHI9MCxuLG89ITEscz1lLmNoYXJDb2RlQXQoMCk7aWYodD4xKWlmKEMocykpaWYobz0hMCxDKGUuY2hhckNvZGVBdCgxKSkpe2xldCBjPTIsYT1jO2Zvcig7Yzx0JiYhQyhlLmNoYXJDb2RlQXQoYykpOysrYyk7aWYoYzx0JiZjIT09YSl7bGV0IFI9ZS5zbGljZShhLGMpO2ZvcihhPWM7Yzx0JiZDKGUuY2hhckNvZGVBdChjKSk7KytjKTtpZihjPHQmJmMhPT1hKXtmb3IoYT1jO2M8dCYmIUMoZS5jaGFyQ29kZUF0KGMpKTsrK2MpO2lmKGM9PT10KXJldHVybmBcXFxcXFxcXCR7Un1cXFxcJHtlLnNsaWNlKGEpfVxcXFxgO2MhPT1hJiYobj1gXFxcXFxcXFwke1J9XFxcXCR7ZS5zbGljZShhLGMpfWAscj1jKX19fWVsc2Ugcj0xO2Vsc2UgT3QocykmJmUuY2hhckNvZGVBdCgxKT09PTU4JiYobj1lLnNsaWNlKDAsMikscj0yLHQ+MiYmQyhlLmNoYXJDb2RlQXQoMikpJiYobz0hMCxyPTMpKTtlbHNlIGlmKEMocykpcmV0dXJuXCJcXFxcXCI7bGV0IGk7cmV0dXJuIHI8dD9pPWdyKGUuc2xpY2UociksIW8sXCJcXFxcXCIsQyk6aT1cIlwiLGkubGVuZ3RoPT09MCYmIW8mJihpPVwiLlwiKSxpLmxlbmd0aD4wJiZDKGUuY2hhckNvZGVBdCh0LTEpKSYmKGkrPVwiXFxcXFwiKSxuPT09dm9pZCAwP28/aS5sZW5ndGg+MD9gXFxcXCR7aX1gOlwiXFxcXFwiOmkubGVuZ3RoPjA/aTpcIlwiOm8/aS5sZW5ndGg+MD9gJHtufVxcXFwke2l9YDpgJHtufVxcXFxgOmkubGVuZ3RoPjA/bitpOm59ZnVuY3Rpb24gaUUoZSl7cShlKTtsZXQgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm4hMTtsZXQgcj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIEMocik/ITA6ISEoT3QocikmJnQ+MiYmZS5jaGFyQ29kZUF0KDEpPT09NTgmJkMoZS5jaGFyQ29kZUF0KDIpKSl9ZnVuY3Rpb24gWU8oLi4uZSl7bGV0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuXCIuXCI7bGV0IHIsbj1udWxsO2ZvcihsZXQgaT0wO2k8dDsrK2kpe2xldCBjPWVbaV07cShjKSxjLmxlbmd0aD4wJiYocj09PXZvaWQgMD9yPW49YzpyKz1gXFxcXCR7Y31gKX1pZihyPT09dm9pZCAwKXJldHVyblwiLlwiO2xldCBvPSEwLHM9MDtpZihEZShuIT1udWxsKSxDKG4uY2hhckNvZGVBdCgwKSkpeysrcztsZXQgaT1uLmxlbmd0aDtpPjEmJkMobi5jaGFyQ29kZUF0KDEpKSYmKCsrcyxpPjImJihDKG4uY2hhckNvZGVBdCgyKSk/KytzOm89ITEpKX1pZihvKXtmb3IoO3M8ci5sZW5ndGgmJkMoci5jaGFyQ29kZUF0KHMpKTsrK3MpO3M+PTImJihyPWBcXFxcJHtyLnNsaWNlKHMpfWApfXJldHVybiBzRShyKX1mdW5jdGlvbiBLTyhlLHQpe2lmKHEoZSkscSh0KSxlPT09dClyZXR1cm5cIlwiO2xldCByPVdvKGUpLG49V28odCk7aWYocj09PW58fChlPXIudG9Mb3dlckNhc2UoKSx0PW4udG9Mb3dlckNhc2UoKSxlPT09dCkpcmV0dXJuXCJcIjtsZXQgbz0wLHM9ZS5sZW5ndGg7Zm9yKDtvPHMmJmUuY2hhckNvZGVBdChvKT09PTkyOysrbyk7Zm9yKDtzLTE+byYmZS5jaGFyQ29kZUF0KHMtMSk9PT05MjstLXMpO2xldCBpPXMtbyxjPTAsYT10Lmxlbmd0aDtmb3IoO2M8YSYmdC5jaGFyQ29kZUF0KGMpPT09OTI7KytjKTtmb3IoO2EtMT5jJiZ0LmNoYXJDb2RlQXQoYS0xKT09PTkyOy0tYSk7bGV0IFI9YS1jLGw9aTxSP2k6UixFPS0xLHU9MDtmb3IoO3U8PWw7Kyt1KXtpZih1PT09bCl7aWYoUj5sKXtpZih0LmNoYXJDb2RlQXQoYyt1KT09PTkyKXJldHVybiBuLnNsaWNlKGMrdSsxKTtpZih1PT09MilyZXR1cm4gbi5zbGljZShjK3UpfWk+bCYmKGUuY2hhckNvZGVBdChvK3UpPT09OTI/RT11OnU9PT0yJiYoRT0zKSk7YnJlYWt9bGV0IEE9ZS5jaGFyQ29kZUF0KG8rdSksUz10LmNoYXJDb2RlQXQoYyt1KTtpZihBIT09UylicmVhaztBPT09OTImJihFPXUpfWlmKHUhPT1sJiZFPT09LTEpcmV0dXJuIG47bGV0IGY9XCJcIjtmb3IoRT09PS0xJiYoRT0wKSx1PW8rRSsxO3U8PXM7Kyt1KSh1PT09c3x8ZS5jaGFyQ29kZUF0KHUpPT09OTIpJiYoZi5sZW5ndGg9PT0wP2YrPVwiLi5cIjpmKz1cIlxcXFwuLlwiKTtyZXR1cm4gZi5sZW5ndGg+MD9mK24uc2xpY2UoYytFLGEpOihjKz1FLG4uY2hhckNvZGVBdChjKT09PTkyJiYrK2Msbi5zbGljZShjLGEpKX1mdW5jdGlvbiBqTyhlKXtpZih0eXBlb2YgZSE9XCJzdHJpbmdcIilyZXR1cm4gZTtpZihlLmxlbmd0aD09PTApcmV0dXJuXCJcIjtsZXQgdD1XbyhlKTtpZih0Lmxlbmd0aD49Myl7aWYodC5jaGFyQ29kZUF0KDApPT09OTIpe2lmKHQuY2hhckNvZGVBdCgxKT09PTkyKXtsZXQgcj10LmNoYXJDb2RlQXQoMik7aWYociE9PTYzJiZyIT09NDYpcmV0dXJuYFxcXFxcXFxcP1xcXFxVTkNcXFxcJHt0LnNsaWNlKDIpfWB9fWVsc2UgaWYoT3QodC5jaGFyQ29kZUF0KDApKSYmdC5jaGFyQ29kZUF0KDEpPT09NTgmJnQuY2hhckNvZGVBdCgyKT09PTkyKXJldHVybmBcXFxcXFxcXD9cXFxcJHt0fWB9cmV0dXJuIGV9ZnVuY3Rpb24gWE8oZSl7cShlKTtsZXQgdD1lLmxlbmd0aDtpZih0PT09MClyZXR1cm5cIi5cIjtsZXQgcj0tMSxuPS0xLG89ITAscz0wLGk9ZS5jaGFyQ29kZUF0KDApO2lmKHQ+MSlpZihDKGkpKXtpZihyPXM9MSxDKGUuY2hhckNvZGVBdCgxKSkpe2xldCBjPTIsYT1jO2Zvcig7Yzx0JiYhQyhlLmNoYXJDb2RlQXQoYykpOysrYyk7aWYoYzx0JiZjIT09YSl7Zm9yKGE9YztjPHQmJkMoZS5jaGFyQ29kZUF0KGMpKTsrK2MpO2lmKGM8dCYmYyE9PWEpe2ZvcihhPWM7Yzx0JiYhQyhlLmNoYXJDb2RlQXQoYykpOysrYyk7aWYoYz09PXQpcmV0dXJuIGU7YyE9PWEmJihyPXM9YysxKX19fX1lbHNlIE90KGkpJiZlLmNoYXJDb2RlQXQoMSk9PT01OCYmKHI9cz0yLHQ+MiYmQyhlLmNoYXJDb2RlQXQoMikpJiYocj1zPTMpKTtlbHNlIGlmKEMoaSkpcmV0dXJuIGU7Zm9yKGxldCBjPXQtMTtjPj1zOy0tYylpZihDKGUuY2hhckNvZGVBdChjKSkpe2lmKCFvKXtuPWM7YnJlYWt9fWVsc2Ugbz0hMTtpZihuPT09LTEpe2lmKHI9PT0tMSlyZXR1cm5cIi5cIjtuPXJ9cmV0dXJuIGUuc2xpY2UoMCxuKX1mdW5jdGlvbiB6TyhlLHQ9XCJcIil7aWYodCE9PXZvaWQgMCYmdHlwZW9mIHQhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJleHRcIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7cShlKTtsZXQgcj0wLG49LTEsbz0hMCxzO2lmKGUubGVuZ3RoPj0yKXtsZXQgaT1lLmNoYXJDb2RlQXQoMCk7T3QoaSkmJmUuY2hhckNvZGVBdCgxKT09PTU4JiYocj0yKX1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQ9PT1lKXJldHVyblwiXCI7bGV0IGk9dC5sZW5ndGgtMSxjPS0xO2ZvcihzPWUubGVuZ3RoLTE7cz49cjstLXMpe2xldCBhPWUuY2hhckNvZGVBdChzKTtpZihDKGEpKXtpZighbyl7cj1zKzE7YnJlYWt9fWVsc2UgYz09PS0xJiYobz0hMSxjPXMrMSksaT49MCYmKGE9PT10LmNoYXJDb2RlQXQoaSk/LS1pPT09LTEmJihuPXMpOihpPS0xLG49YykpfXJldHVybiByPT09bj9uPWM6bj09PS0xJiYobj1lLmxlbmd0aCksZS5zbGljZShyLG4pfWVsc2V7Zm9yKHM9ZS5sZW5ndGgtMTtzPj1yOy0tcylpZihDKGUuY2hhckNvZGVBdChzKSkpe2lmKCFvKXtyPXMrMTticmVha319ZWxzZSBuPT09LTEmJihvPSExLG49cysxKTtyZXR1cm4gbj09PS0xP1wiXCI6ZS5zbGljZShyLG4pfX1mdW5jdGlvbiBRTyhlKXtxKGUpO2xldCB0PTAscj0tMSxuPTAsbz0tMSxzPSEwLGk9MDtlLmxlbmd0aD49MiYmZS5jaGFyQ29kZUF0KDEpPT09NTgmJk90KGUuY2hhckNvZGVBdCgwKSkmJih0PW49Mik7Zm9yKGxldCBjPWUubGVuZ3RoLTE7Yz49dDstLWMpe2xldCBhPWUuY2hhckNvZGVBdChjKTtpZihDKGEpKXtpZighcyl7bj1jKzE7YnJlYWt9Y29udGludWV9bz09PS0xJiYocz0hMSxvPWMrMSksYT09PTQ2P3I9PT0tMT9yPWM6aSE9PTEmJihpPTEpOnIhPT0tMSYmKGk9LTEpfXJldHVybiByPT09LTF8fG89PT0tMXx8aT09PTB8fGk9PT0xJiZyPT09by0xJiZyPT09bisxP1wiXCI6ZS5zbGljZShyLG8pfWZ1bmN0aW9uIHFPKGUpe2lmKGU9PT1udWxsfHx0eXBlb2YgZSE9XCJvYmplY3RcIil0aHJvdyBuZXcgVHlwZUVycm9yKGBUaGUgXCJwYXRoT2JqZWN0XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBlfWApO3JldHVybiBCbyhcIlxcXFxcIixlKX1mdW5jdGlvbiBaTyhlKXtxKGUpO2xldCB0PXtyb290OlwiXCIsZGlyOlwiXCIsYmFzZTpcIlwiLGV4dDpcIlwiLG5hbWU6XCJcIn0scj1lLmxlbmd0aDtpZihyPT09MClyZXR1cm4gdDtsZXQgbj0wLG89ZS5jaGFyQ29kZUF0KDApO2lmKHI+MSl7aWYoQyhvKSl7aWYobj0xLEMoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IEU9Mix1PUU7Zm9yKDtFPHImJiFDKGUuY2hhckNvZGVBdChFKSk7KytFKTtpZihFPHImJkUhPT11KXtmb3IodT1FO0U8ciYmQyhlLmNoYXJDb2RlQXQoRSkpOysrRSk7aWYoRTxyJiZFIT09dSl7Zm9yKHU9RTtFPHImJiFDKGUuY2hhckNvZGVBdChFKSk7KytFKTtFPT09cj9uPUU6RSE9PXUmJihuPUUrMSl9fX19ZWxzZSBpZihPdChvKSYmZS5jaGFyQ29kZUF0KDEpPT09NTgpaWYobj0yLHI+Mil7aWYoQyhlLmNoYXJDb2RlQXQoMikpKXtpZihyPT09MylyZXR1cm4gdC5yb290PXQuZGlyPWUsdDtuPTN9fWVsc2UgcmV0dXJuIHQucm9vdD10LmRpcj1lLHR9ZWxzZSBpZihDKG8pKXJldHVybiB0LnJvb3Q9dC5kaXI9ZSx0O24+MCYmKHQucm9vdD1lLnNsaWNlKDAsbikpO2xldCBzPS0xLGk9bixjPS0xLGE9ITAsUj1lLmxlbmd0aC0xLGw9MDtmb3IoO1I+PW47LS1SKXtpZihvPWUuY2hhckNvZGVBdChSKSxDKG8pKXtpZighYSl7aT1SKzE7YnJlYWt9Y29udGludWV9Yz09PS0xJiYoYT0hMSxjPVIrMSksbz09PTQ2P3M9PT0tMT9zPVI6bCE9PTEmJihsPTEpOnMhPT0tMSYmKGw9LTEpfXJldHVybiBzPT09LTF8fGM9PT0tMXx8bD09PTB8fGw9PT0xJiZzPT09Yy0xJiZzPT09aSsxP2MhPT0tMSYmKHQuYmFzZT10Lm5hbWU9ZS5zbGljZShpLGMpKToodC5uYW1lPWUuc2xpY2UoaSxzKSx0LmJhc2U9ZS5zbGljZShpLGMpLHQuZXh0PWUuc2xpY2UocyxjKSksaT4wJiZpIT09bj90LmRpcj1lLnNsaWNlKDAsaS0xKTp0LmRpcj10LnJvb3QsdH1mdW5jdGlvbiBKTyhlKXtpZihlPWUgaW5zdGFuY2VvZiBVUkw/ZTpuZXcgVVJMKGUpLGUucHJvdG9jb2whPVwiZmlsZTpcIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBhIGZpbGUgVVJMLlwiKTtsZXQgdD1kZWNvZGVVUklDb21wb25lbnQoZS5wYXRobmFtZS5yZXBsYWNlKC9cXC8vZyxcIlxcXFxcIikucmVwbGFjZSgvJSg/IVswLTlBLUZhLWZdezJ9KS9nLFwiJTI1XCIpKS5yZXBsYWNlKC9eXFxcXCooW0EtWmEtel06KShcXFxcfCQpLyxcIiQxXFxcXFwiKTtyZXR1cm4gZS5ob3N0bmFtZSE9XCJcIiYmKHQ9YFxcXFxcXFxcJHtlLmhvc3RuYW1lfSR7dH1gKSx0fWZ1bmN0aW9uIGVTKGUpe2lmKCFpRShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLlwiKTtsZXRbLHQscl09ZS5tYXRjaCgvXig/OlsvXFxcXF17Mn0oW14vXFxcXF0rKSg/PVsvXFxcXF0oPzpbXi9cXFxcXXwkKSkpPyguKikvKSxuPW5ldyBVUkwoXCJmaWxlOi8vL1wiKTtpZihuLnBhdGhuYW1lPUZvKHIucmVwbGFjZSgvJS9nLFwiJTI1XCIpKSx0IT1udWxsJiZ0IT1cImxvY2FsaG9zdFwiJiYobi5ob3N0bmFtZT10LCFuLmhvc3RuYW1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBob3N0bmFtZS5cIik7cmV0dXJuIG59dmFyICRPLHZPLEppPXAoKCk9PntNbygpO1ppKCk7YXIoKTskTz1cIlxcXFxcIix2Tz1cIjtcIn0pO3ZhciBsbj17fTtyZShsbix7YmFzZW5hbWU6KCk9PmNTLGRlbGltaXRlcjooKT0+clMsZGlybmFtZTooKT0+aVMsZXh0bmFtZTooKT0+YVMsZm9ybWF0OigpPT5SUyxmcm9tRmlsZVVybDooKT0+RVMsaXNBYnNvbHV0ZTooKT0+YUUsam9pbjooKT0+blMsbm9ybWFsaXplOigpPT5jRSxwYXJzZTooKT0+bFMscmVsYXRpdmU6KCk9Pm9TLHJlc29sdmU6KCk9PmVjLHNlcDooKT0+dFMsdG9GaWxlVXJsOigpPT51Uyx0b05hbWVzcGFjZWRQYXRoOigpPT5zU30pO2Z1bmN0aW9uIGVjKC4uLmUpe2xldCB0PVwiXCIscj0hMTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0tMSYmIXI7bi0tKXtsZXQgbztpZihuPj0wKW89ZVtuXTtlbHNle2xldHtEZW5vOnN9PWdsb2JhbFRoaXM7aWYodHlwZW9mIHM/LmN3ZCE9XCJmdW5jdGlvblwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJSZXNvbHZlZCBhIHJlbGF0aXZlIHBhdGggd2l0aG91dCBhIENXRC5cIik7bz1zLmN3ZCgpfXEobyksby5sZW5ndGghPT0wJiYodD1gJHtvfS8ke3R9YCxyPW8uY2hhckNvZGVBdCgwKT09PTQ3KX1yZXR1cm4gdD1ncih0LCFyLFwiL1wiLGtvKSxyP3QubGVuZ3RoPjA/YC8ke3R9YDpcIi9cIjp0Lmxlbmd0aD4wP3Q6XCIuXCJ9ZnVuY3Rpb24gY0UoZSl7aWYocShlKSxlLmxlbmd0aD09PTApcmV0dXJuXCIuXCI7bGV0IHQ9ZS5jaGFyQ29kZUF0KDApPT09NDcscj1lLmNoYXJDb2RlQXQoZS5sZW5ndGgtMSk9PT00NztyZXR1cm4gZT1ncihlLCF0LFwiL1wiLGtvKSxlLmxlbmd0aD09PTAmJiF0JiYoZT1cIi5cIiksZS5sZW5ndGg+MCYmciYmKGUrPVwiL1wiKSx0P2AvJHtlfWA6ZX1mdW5jdGlvbiBhRShlKXtyZXR1cm4gcShlKSxlLmxlbmd0aD4wJiZlLmNoYXJDb2RlQXQoMCk9PT00N31mdW5jdGlvbiBuUyguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuXCIuXCI7bGV0IHQ7Zm9yKGxldCByPTAsbj1lLmxlbmd0aDtyPG47KytyKXtsZXQgbz1lW3JdO3Eobyksby5sZW5ndGg+MCYmKHQ/dCs9YC8ke299YDp0PW8pfXJldHVybiB0P2NFKHQpOlwiLlwifWZ1bmN0aW9uIG9TKGUsdCl7aWYocShlKSxxKHQpLGU9PT10fHwoZT1lYyhlKSx0PWVjKHQpLGU9PT10KSlyZXR1cm5cIlwiO2xldCByPTEsbj1lLmxlbmd0aDtmb3IoO3I8biYmZS5jaGFyQ29kZUF0KHIpPT09NDc7KytyKTtsZXQgbz1uLXIscz0xLGk9dC5sZW5ndGg7Zm9yKDtzPGkmJnQuY2hhckNvZGVBdChzKT09PTQ3Oysrcyk7bGV0IGM9aS1zLGE9bzxjP286YyxSPS0xLGw9MDtmb3IoO2w8PWE7KytsKXtpZihsPT09YSl7aWYoYz5hKXtpZih0LmNoYXJDb2RlQXQocytsKT09PTQ3KXJldHVybiB0LnNsaWNlKHMrbCsxKTtpZihsPT09MClyZXR1cm4gdC5zbGljZShzK2wpfWVsc2Ugbz5hJiYoZS5jaGFyQ29kZUF0KHIrbCk9PT00Nz9SPWw6bD09PTAmJihSPTApKTticmVha31sZXQgdT1lLmNoYXJDb2RlQXQocitsKSxmPXQuY2hhckNvZGVBdChzK2wpO2lmKHUhPT1mKWJyZWFrO3U9PT00NyYmKFI9bCl9bGV0IEU9XCJcIjtmb3IobD1yK1IrMTtsPD1uOysrbCkobD09PW58fGUuY2hhckNvZGVBdChsKT09PTQ3KSYmKEUubGVuZ3RoPT09MD9FKz1cIi4uXCI6RSs9XCIvLi5cIik7cmV0dXJuIEUubGVuZ3RoPjA/RSt0LnNsaWNlKHMrUik6KHMrPVIsdC5jaGFyQ29kZUF0KHMpPT09NDcmJisrcyx0LnNsaWNlKHMpKX1mdW5jdGlvbiBzUyhlKXtyZXR1cm4gZX1mdW5jdGlvbiBpUyhlKXtpZihxKGUpLGUubGVuZ3RoPT09MClyZXR1cm5cIi5cIjtsZXQgdD1lLmNoYXJDb2RlQXQoMCk9PT00NyxyPS0xLG49ITA7Zm9yKGxldCBvPWUubGVuZ3RoLTE7bz49MTstLW8paWYoZS5jaGFyQ29kZUF0KG8pPT09NDcpe2lmKCFuKXtyPW87YnJlYWt9fWVsc2Ugbj0hMTtyZXR1cm4gcj09PS0xP3Q/XCIvXCI6XCIuXCI6dCYmcj09PTE/XCIvL1wiOmUuc2xpY2UoMCxyKX1mdW5jdGlvbiBjUyhlLHQ9XCJcIil7aWYodCE9PXZvaWQgMCYmdHlwZW9mIHQhPVwic3RyaW5nXCIpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJleHRcIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7cShlKTtsZXQgcj0wLG49LTEsbz0hMCxzO2lmKHQhPT12b2lkIDAmJnQubGVuZ3RoPjAmJnQubGVuZ3RoPD1lLmxlbmd0aCl7aWYodC5sZW5ndGg9PT1lLmxlbmd0aCYmdD09PWUpcmV0dXJuXCJcIjtsZXQgaT10Lmxlbmd0aC0xLGM9LTE7Zm9yKHM9ZS5sZW5ndGgtMTtzPj0wOy0tcyl7bGV0IGE9ZS5jaGFyQ29kZUF0KHMpO2lmKGE9PT00Nyl7aWYoIW8pe3I9cysxO2JyZWFrfX1lbHNlIGM9PT0tMSYmKG89ITEsYz1zKzEpLGk+PTAmJihhPT09dC5jaGFyQ29kZUF0KGkpPy0taT09PS0xJiYobj1zKTooaT0tMSxuPWMpKX1yZXR1cm4gcj09PW4/bj1jOm49PT0tMSYmKG49ZS5sZW5ndGgpLGUuc2xpY2UocixuKX1lbHNle2ZvcihzPWUubGVuZ3RoLTE7cz49MDstLXMpaWYoZS5jaGFyQ29kZUF0KHMpPT09NDcpe2lmKCFvKXtyPXMrMTticmVha319ZWxzZSBuPT09LTEmJihvPSExLG49cysxKTtyZXR1cm4gbj09PS0xP1wiXCI6ZS5zbGljZShyLG4pfX1mdW5jdGlvbiBhUyhlKXtxKGUpO2xldCB0PS0xLHI9MCxuPS0xLG89ITAscz0wO2ZvcihsZXQgaT1lLmxlbmd0aC0xO2k+PTA7LS1pKXtsZXQgYz1lLmNoYXJDb2RlQXQoaSk7aWYoYz09PTQ3KXtpZighbyl7cj1pKzE7YnJlYWt9Y29udGludWV9bj09PS0xJiYobz0hMSxuPWkrMSksYz09PTQ2P3Q9PT0tMT90PWk6cyE9PTEmJihzPTEpOnQhPT0tMSYmKHM9LTEpfXJldHVybiB0PT09LTF8fG49PT0tMXx8cz09PTB8fHM9PT0xJiZ0PT09bi0xJiZ0PT09cisxP1wiXCI6ZS5zbGljZSh0LG4pfWZ1bmN0aW9uIFJTKGUpe2lmKGU9PT1udWxsfHx0eXBlb2YgZSE9XCJvYmplY3RcIil0aHJvdyBuZXcgVHlwZUVycm9yKGBUaGUgXCJwYXRoT2JqZWN0XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBlfWApO3JldHVybiBCbyhcIi9cIixlKX1mdW5jdGlvbiBsUyhlKXtxKGUpO2xldCB0PXtyb290OlwiXCIsZGlyOlwiXCIsYmFzZTpcIlwiLGV4dDpcIlwiLG5hbWU6XCJcIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2xldCByPWUuY2hhckNvZGVBdCgwKT09PTQ3LG47cj8odC5yb290PVwiL1wiLG49MSk6bj0wO2xldCBvPS0xLHM9MCxpPS0xLGM9ITAsYT1lLmxlbmd0aC0xLFI9MDtmb3IoO2E+PW47LS1hKXtsZXQgbD1lLmNoYXJDb2RlQXQoYSk7aWYobD09PTQ3KXtpZighYyl7cz1hKzE7YnJlYWt9Y29udGludWV9aT09PS0xJiYoYz0hMSxpPWErMSksbD09PTQ2P289PT0tMT9vPWE6UiE9PTEmJihSPTEpOm8hPT0tMSYmKFI9LTEpfXJldHVybiBvPT09LTF8fGk9PT0tMXx8Uj09PTB8fFI9PT0xJiZvPT09aS0xJiZvPT09cysxP2khPT0tMSYmKHM9PT0wJiZyP3QuYmFzZT10Lm5hbWU9ZS5zbGljZSgxLGkpOnQuYmFzZT10Lm5hbWU9ZS5zbGljZShzLGkpKToocz09PTAmJnI/KHQubmFtZT1lLnNsaWNlKDEsbyksdC5iYXNlPWUuc2xpY2UoMSxpKSk6KHQubmFtZT1lLnNsaWNlKHMsbyksdC5iYXNlPWUuc2xpY2UocyxpKSksdC5leHQ9ZS5zbGljZShvLGkpKSxzPjA/dC5kaXI9ZS5zbGljZSgwLHMtMSk6ciYmKHQuZGlyPVwiL1wiKSx0fWZ1bmN0aW9uIEVTKGUpe2lmKGU9ZSBpbnN0YW5jZW9mIFVSTD9lOm5ldyBVUkwoZSksZS5wcm90b2NvbCE9XCJmaWxlOlwiKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGEgZmlsZSBVUkwuXCIpO3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZS5wYXRobmFtZS5yZXBsYWNlKC8lKD8hWzAtOUEtRmEtZl17Mn0pL2csXCIlMjVcIikpfWZ1bmN0aW9uIHVTKGUpe2lmKCFhRShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLlwiKTtsZXQgdD1uZXcgVVJMKFwiZmlsZTovLy9cIik7cmV0dXJuIHQucGF0aG5hbWU9Rm8oZS5yZXBsYWNlKC8lL2csXCIlMjVcIikucmVwbGFjZSgvXFxcXC9nLFwiJTVDXCIpKSx0fXZhciB0UyxyUyx0Yz1wKCgpPT57TW8oKTtaaSgpO3RTPVwiL1wiLHJTPVwiOlwifSk7dmFyIFZvPXAoKCk9PntKZSgpfSk7dmFyIGxFPXAoKCk9PntWbygpfSk7dmFyIEVFPXAoKCk9Pnt9KTt2YXIgZlMsUmcsbGcsdUU9cCgoKT0+e0plKCk7Vm8oKTtKaSgpO3RjKCk7ZlM9RWU/Um46bG4se2pvaW46Umcsbm9ybWFsaXplOmxnfT1mU30pO3ZhciBwUyxfZyxmZyxwZyxkZyxoZyxfRSxPZyxmRSxTZyxBZyxOZyx4ZyxUZyxJZyxnZyxwRT1wKCgpPT57SmUoKTtKaSgpO3RjKCk7bEUoKTtWbygpO0VFKCk7dUUoKTtwUz1FZT9Sbjpsbix7YmFzZW5hbWU6X2csZGVsaW1pdGVyOmZnLGRpcm5hbWU6cGcsZXh0bmFtZTpkZyxmb3JtYXQ6aGcsZnJvbUZpbGVVcmw6X0UsaXNBYnNvbHV0ZTpPZyxqb2luOmZFLG5vcm1hbGl6ZTpTZyxwYXJzZTpBZyxyZWxhdGl2ZTpOZyxyZXNvbHZlOnhnLHNlcDpUZyx0b0ZpbGVVcmw6SWcsdG9OYW1lc3BhY2VkUGF0aDpnZ309cFN9KTtmdW5jdGlvbiBkUygpe2lmKERlbm8uYnVpbGQuYXJjaD09XCJ4ODZfNjRcIilyZXR1cm5cIng2NFwiO2lmKERlbm8uYnVpbGQuYXJjaD09XCJhYXJjaDY0XCIpcmV0dXJuXCJhcm02NFwiO3Rocm93IEVycm9yKFwidW5yZWFjaGFibGVcIil9dmFyIGRFLGhFLE9FLHksaFMsU0UsQUUsTkUseEUsVEUsU3Q9cCgoKT0+e0plKCk7anIoKTtkRT1kUygpLGhFPURlbm8uY2hkaXIsT0U9RGVuby5jd2QseT1iZSxoUz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QucHJvdG90eXBlKSxTRT1uZXcgUHJveHkoT2JqZWN0KCkse2dldDooZSx0KT0+e2lmKHR5cGVvZiB0PT1cInN5bWJvbFwiKXJldHVybiBlW3RdO2xldCByPURlbm8uZW52LmdldCh0KTtyZXR1cm4gcnx8KGhTLmluY2x1ZGVzKHQpP2VbdF06cil9LG93bktleXM6KCk9PlJlZmxlY3Qub3duS2V5cyhEZW5vLmVudi50b09iamVjdCgpKSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6KGUsdCk9PntsZXQgcj1EZW5vLmVudi50b09iamVjdCgpO2lmKHQgaW4gRGVuby5lbnYudG9PYmplY3QoKSl7bGV0IG49e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm4gdHlwZW9mIHQ9PVwic3RyaW5nXCImJihuLnZhbHVlPXJbdF0pLG59fSxzZXQoZSx0LHIpe3JldHVybiBEZW5vLmVudi5zZXQoU3RyaW5nKHQpLFN0cmluZyhyKSkscn0saGFzOihlLHQpPT5SZWZsZWN0Lm93bktleXMoRGVuby5lbnYudG9PYmplY3QoKSkuaW5jbHVkZXModCl9KSxBRT1EZW5vLnBpZCxORT1FZT9cIndpbjMyXCI6RGVuby5idWlsZC5vcyx4RT1cInYxNi4xMS4xXCIsVEU9e25vZGU6XCIxNi4xMS4xXCIsdXY6XCIxLjQyLjBcIix6bGliOlwiMS4yLjExXCIsYnJvdGxpOlwiMS4wLjlcIixhcmVzOlwiMS4xNy4yXCIsbW9kdWxlczpcIjkzXCIsbmdodHRwMjpcIjEuNDUuMVwiLG5hcGk6XCI4XCIsbGxodHRwOlwiNi4wLjRcIixvcGVuc3NsOlwiMS4xLjFsXCIsY2xkcjpcIjM5LjBcIixpY3U6XCI2OS4xXCIsdHo6XCIyMDIxYVwiLHVuaWNvZGU6XCIxMy4wXCIsLi4uRGVuby52ZXJzaW9ufX0pO2Z1bmN0aW9uIGNlKGUsLi4udCl7bGV0IHI9YCR7SUV9W2A7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspcis9ZVtuXSxuPHQubGVuZ3RoJiYocis9dFtuXSk7cmV0dXJuIHJ9dmFyIElFLFBnLGdFPXAoKCk9PntcInVzZSBzdHJpY3RcIjtJRT1cIlxceDFCXCIsUGc9U3ltYm9sKFwia1N1YnN0cmluZ1NlYXJjaFwiKTtjZS5rRXNjYXBlPUlFO2NlLmtDbGVhclRvTGluZUJlZ2lubmluZz1jZWAxS2A7Y2Uua0NsZWFyVG9MaW5lRW5kPWNlYDBLYDtjZS5rQ2xlYXJMaW5lPWNlYDJLYDtjZS5rQ2xlYXJTY3JlZW5Eb3duPWNlYDBKYH0pO2Z1bmN0aW9uIG1FKGUsdCxyLG4pe2lmKG4hPT12b2lkIDAmJkV0KG4pLHR5cGVvZiByPT1cImZ1bmN0aW9uXCImJihuPXIscj12b2lkIDApLE51bWJlci5pc05hTih0KSl0aHJvdyBuZXcgdWUoXCJ4XCIsdCk7aWYoTnVtYmVyLmlzTmFOKHIpKXRocm93IG5ldyB1ZShcInlcIixyKTtpZihlPT1udWxsfHx0eXBlb2YgdCE9XCJudW1iZXJcIiYmdHlwZW9mIHIhPVwibnVtYmVyXCIpcmV0dXJuIHR5cGVvZiBuPT1cImZ1bmN0aW9uXCImJnByb2Nlc3MubmV4dFRpY2sobixudWxsKSwhMDtpZih0eXBlb2YgdCE9XCJudW1iZXJcIil0aHJvdyBuZXcgZ287bGV0IG89dHlwZW9mIHIhPVwibnVtYmVyXCI/Y2VgJHt0KzF9R2A6Y2VgJHtyKzF9OyR7dCsxfUhgO3JldHVybiBlLndyaXRlKG8sbil9ZnVuY3Rpb24gREUoZSx0LHIsbil7aWYobiE9PXZvaWQgMCYmRXQobiksZT09bnVsbHx8ISh0fHxyKSlyZXR1cm4gdHlwZW9mIG49PVwiZnVuY3Rpb25cIiYmcHJvY2Vzcy5uZXh0VGljayhuLG51bGwpLCEwO2xldCBvPVwiXCI7cmV0dXJuIHQ8MD9vKz1jZWAkey10fURgOnQ+MCYmKG8rPWNlYCR7dH1DYCkscjwwP28rPWNlYCR7LXJ9QWA6cj4wJiYobys9Y2VgJHtyfUJgKSxlLndyaXRlKG8sbil9ZnVuY3Rpb24geUUoZSx0LHIpe2lmKHIhPT12b2lkIDAmJkV0KHIpLGU9PW51bGwpcmV0dXJuIHR5cGVvZiByPT1cImZ1bmN0aW9uXCImJnByb2Nlc3MubmV4dFRpY2socixudWxsKSwhMDtsZXQgbj10PDA/QVM6dD4wP05TOk9TO3JldHVybiBlLndyaXRlKG4scil9ZnVuY3Rpb24gYkUoZSx0KXtyZXR1cm4gdCE9PXZvaWQgMCYmRXQodCksZT09bnVsbD8odHlwZW9mIHQ9PVwiZnVuY3Rpb25cIiYmcHJvY2Vzcy5uZXh0VGljayh0LG51bGwpLCEwKTplLndyaXRlKFNTLHQpfXZhciBPUyxTUyxBUyxOUyxDRT1wKCgpPT57XCJ1c2Ugc3RyaWN0XCI7X2UoKTt5ZSgpO2dFKCk7KHtrQ2xlYXJMaW5lOk9TLGtDbGVhclNjcmVlbkRvd246U1Msa0NsZWFyVG9MaW5lQmVnaW5uaW5nOkFTLGtDbGVhclRvTGluZUVuZDpOU309Y2UpfSk7ZnVuY3Rpb24gRW4oZSl7cmV0dXJuIF8uZnJvbShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX12YXIgcmM9cCgoKT0+e3hlKCl9KTtmdW5jdGlvbiB4UyhlKXtyZXR1cm4gZS5zZXRIZWFkZXImJnR5cGVvZiBlLmFib3J0PT1cImZ1bmN0aW9uXCJ9ZnVuY3Rpb24gVFMoZSl7cmV0dXJuIHR5cGVvZiBlLl9zZW50MTAwPT1cImJvb2xlYW5cIiYmdHlwZW9mIGUuX3JlbW92ZWRDb25uZWN0aW9uPT1cImJvb2xlYW5cIiYmdHlwZW9mIGUuX3JlbW92ZWRDb250TGVuPT1cImJvb2xlYW5cIiYmdHlwZW9mIGUuX3JlbW92ZWRURT09XCJib29sZWFuXCImJnR5cGVvZiBlLl9jbG9zZWQ9PVwiYm9vbGVhblwifWZ1bmN0aW9uIExFKGUpe3JldHVybiB0eXBlb2YgZS5yZWFkYWJsZT09XCJib29sZWFuXCJ8fHR5cGVvZiBlLnJlYWRhYmxlRW5kZWQ9PVwiYm9vbGVhblwifHwhIWUuX3JlYWRhYmxlU3RhdGV9ZnVuY3Rpb24gd0UoZSl7cmV0dXJuIHR5cGVvZiBlLndyaXRhYmxlPT1cImJvb2xlYW5cInx8dHlwZW9mIGUud3JpdGFibGVFbmRlZD09XCJib29sZWFuXCJ8fCEhZS5fd3JpdGFibGVTdGF0ZX1mdW5jdGlvbiBJUyhlKXtpZihlLndyaXRhYmxlRmluaXNoZWQpcmV0dXJuITA7bGV0IHQ9ZS5fd3JpdGFibGVTdGF0ZTtyZXR1cm4hdHx8dC5lcnJvcmVkPyExOnQuZmluaXNoZWR8fHQuZW5kZWQmJnQubGVuZ3RoPT09MH1mdW5jdGlvbiBtUyhlKXtpZihlLnJlYWRhYmxlRW5kZWQpcmV0dXJuITA7bGV0IHQ9ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4hdHx8dC5lcnJvcmVkPyExOnQuZW5kRW1pdHRlZHx8dC5lbmRlZCYmdC5sZW5ndGg9PT0wfWZ1bmN0aW9uIERTKGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPT09Mj8ocj10LHQ9e30pOnQ9PW51bGw/dD17fTpCZSh0LFwib3B0aW9uc1wiKSxIdChyLFwiY2FsbGJhY2tcIiksR3QodC5zaWduYWwsXCJvcHRpb25zLnNpZ25hbFwiKSxyPXByKHIpO2xldCBuPXQucmVhZGFibGV8fHQucmVhZGFibGUhPT0hMSYmTEUoZSksbz10LndyaXRhYmxlfHx0LndyaXRhYmxlIT09ITEmJndFKGUpLHM9ZS5fd3JpdGFibGVTdGF0ZSxpPWUuX3JlYWRhYmxlU3RhdGUsYz1zfHxpLGE9KCk9PntlLndyaXRhYmxlfHxFKCl9LFI9VFMoZSl8fGMmJmMuYXV0b0Rlc3Ryb3kmJmMuZW1pdENsb3NlJiZjLmNsb3NlZD09PSExJiZMRShlKT09PW4mJndFKGUpPT09byxsPWUud3JpdGFibGVGaW5pc2hlZHx8cyYmcy5maW5pc2hlZCxFPSgpPT57bD0hMCxlLmRlc3Ryb3llZCYmKFI9ITEpLCEoUiYmKCFlLnJlYWRhYmxlfHxuKSkmJighbnx8dSkmJnIuY2FsbChlKX0sdT1lLnJlYWRhYmxlRW5kZWR8fGkmJmkuZW5kRW1pdHRlZCxmPSgpPT57dT0hMCxlLmRlc3Ryb3llZCYmKFI9ITEpLCEoUiYmKCFlLndyaXRhYmxlfHxvKSkmJighb3x8bCkmJnIuY2FsbChlKX0sQT1PPT57ci5jYWxsKGUsTyl9LFM9KCk9PntpZihuJiYhdSYmIW1TKGUpKXJldHVybiByLmNhbGwoZSxuZXcgcHQpO2lmKG8mJiFsJiYhSVMoZSkpcmV0dXJuIHIuY2FsbChlLG5ldyBwdCk7ci5jYWxsKGUpfSxCPSgpPT57ZS5yZXEub24oXCJmaW5pc2hcIixFKX07eFMoZSk/KGUub24oXCJjb21wbGV0ZVwiLEUpLFJ8fGUub24oXCJhYm9ydFwiLFMpLGUucmVxP0IoKTplLm9uKFwicmVxdWVzdFwiLEIpKTpvJiYhcyYmKGUub24oXCJlbmRcIixhKSxlLm9uKFwiY2xvc2VcIixhKSksIVImJnR5cGVvZiBlLmFib3J0ZWQ9PVwiYm9vbGVhblwiJiZlLm9uKFwiYWJvcnRlZFwiLFMpLGUub24oXCJlbmRcIixmKSxlLm9uKFwiZmluaXNoXCIsRSksdC5lcnJvciE9PSExJiZlLm9uKFwiZXJyb3JcIixBKSxlLm9uKFwiY2xvc2VcIixTKTtsZXQgZz0hcyYmIWkmJmUuX2Nsb3NlZD09PSEwfHxzJiZzLmNsb3NlZHx8aSYmaS5jbG9zZWR8fHMmJnMuZXJyb3JFbWl0dGVkfHxpJiZpLmVycm9yRW1pdHRlZHx8aSYmZS5yZXEmJmUuYWJvcnRlZHx8KCFzfHwhUnx8dHlwZW9mIHMuY2xvc2VkIT1cImJvb2xlYW5cIikmJighaXx8IVJ8fHR5cGVvZiBpLmNsb3NlZCE9XCJib29sZWFuXCIpJiYoIW98fHMmJnMuZmluaXNoZWQpJiYoIW58fGkmJmkuZW5kRW1pdHRlZCk7ZyYmeSgoKT0+e3IoKX0pO2xldCBoPSgpPT57cj1nUyxlLnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRlZFwiLFMpLGUucmVtb3ZlTGlzdGVuZXIoXCJjb21wbGV0ZVwiLEUpLGUucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydFwiLFMpLGUucmVtb3ZlTGlzdGVuZXIoXCJyZXF1ZXN0XCIsQiksZS5yZXEmJmUucmVxLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsRSksZS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGEpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGEpLGUucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixFKSxlLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsZiksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsQSksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsUyl9O2lmKHQuc2lnbmFsJiYhZyl7bGV0IE89KCk9PntsZXQgZD1yO2goKSxkLmNhbGwoZSxuZXcgbmUpfTtpZih0LnNpZ25hbC5hYm9ydGVkKXkoTyk7ZWxzZXtsZXQgZD1yO3I9cHIoKC4uLngpPT57dC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsTyksZC5hcHBseShlLHgpfSksdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsTyl9fXJldHVybiBofXZhciBnUyxJZSxtcj1wKCgpPT57X2UoKTtEdCgpO3llKCk7U3QoKTtnUz0oKT0+e307SWU9RFN9KTtmdW5jdGlvbiBiUyhlKXtyZXR1cm4hIShlJiZ0eXBlb2YgZS5waXBlPT1cImZ1bmN0aW9uXCIpfWZ1bmN0aW9uIG5jKGUsdCl7aWYoeVMoZSxcInNpZ25hbFwiKSwhYlModCkpdGhyb3cgbmV3IEgoXCJzdHJlYW1cIixcInN0cmVhbS5TdHJlYW1cIix0KTtyZXR1cm4gdW4oZSx0KX1mdW5jdGlvbiB1bihlLHQpe2lmKHR5cGVvZiBlIT1cIm9iamVjdFwifHwhKFwiYWJvcnRlZFwiaW4gZSkpcmV0dXJuIHQ7bGV0IHI9KCk9Pnt0LmRlc3Ryb3kobmV3IG5lKX07cmV0dXJuIGUuYWJvcnRlZD9yKCk6KGUuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsciksSWUodCwoKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIixyKSkpLHR9dmFyIHlTLEdvPXAoKCk9PntfZSgpO21yKCk7eVM9KGUsdCk9PntpZih0eXBlb2YgZSE9XCJvYmplY3RcInx8IShcImFib3J0ZWRcImluIGUpKXRocm93IG5ldyBIKHQsXCJBYm9ydFNpZ25hbFwiLGUpfX0pO2Z1bmN0aW9uIGtFKGUsdCxyKXtlJiYoZS5zdGFjayx0JiYhdC5lcnJvcmVkJiYodC5lcnJvcmVkPWUpLHImJiFyLmVycm9yZWQmJihyLmVycm9yZWQ9ZSkpfWZ1bmN0aW9uIENTKGUsdCl7bGV0IHI9dGhpcy5fcmVhZGFibGVTdGF0ZSxuPXRoaXMuX3dyaXRhYmxlU3RhdGUsbz1ufHxyO3JldHVybiBuJiZuLmRlc3Ryb3llZHx8ciYmci5kZXN0cm95ZWQ/KHR5cGVvZiB0PT1cImZ1bmN0aW9uXCImJnQoKSx0aGlzKTooa0UoZSxuLHIpLG4mJihuLmRlc3Ryb3llZD0hMCksciYmKHIuZGVzdHJveWVkPSEwKSxvLmNvbnN0cnVjdGVkP1BFKHRoaXMsZSx0KTp0aGlzLm9uY2UoTUUsZnVuY3Rpb24ocyl7UEUodGhpcyx3byhzLGUpLHQpfSksdGhpcyl9ZnVuY3Rpb24gUEUoZSx0LHIpe2xldCBuPSExO2Z1bmN0aW9uIG8ocyl7aWYobilyZXR1cm47bj0hMDtsZXQgaT1lLl9yZWFkYWJsZVN0YXRlLGM9ZS5fd3JpdGFibGVTdGF0ZTtrRShzLGMsaSksYyYmKGMuY2xvc2VkPSEwKSxpJiYoaS5jbG9zZWQ9ITApLHR5cGVvZiByPT1cImZ1bmN0aW9uXCImJnIocykscz95KExTLGUscyk6eShCRSxlKX10cnl7bGV0IHM9ZS5fZGVzdHJveSh0fHxudWxsLG8pO2lmKHMhPW51bGwpe2xldCBpPXMudGhlbjt0eXBlb2YgaT09XCJmdW5jdGlvblwiJiZpLmNhbGwocyxmdW5jdGlvbigpe3kobyxudWxsKX0sZnVuY3Rpb24oYyl7eShvLGMpfSl9fWNhdGNoKHMpe28ocyl9fWZ1bmN0aW9uIExTKGUsdCl7c2MoZSx0KSxCRShlKX1mdW5jdGlvbiBCRShlKXtsZXQgdD1lLl9yZWFkYWJsZVN0YXRlLHI9ZS5fd3JpdGFibGVTdGF0ZTtyJiYoci5jbG9zZUVtaXR0ZWQ9ITApLHQmJih0LmNsb3NlRW1pdHRlZD0hMCksKHImJnIuZW1pdENsb3NlfHx0JiZ0LmVtaXRDbG9zZSkmJmUuZW1pdChcImNsb3NlXCIpfWZ1bmN0aW9uIHNjKGUsdCl7bGV0IHI9ZS5fcmVhZGFibGVTdGF0ZSxuPWUuX3dyaXRhYmxlU3RhdGU7biYmbi5lcnJvckVtaXR0ZWR8fHImJnIuZXJyb3JFbWl0dGVkfHwobiYmKG4uZXJyb3JFbWl0dGVkPSEwKSxyJiYoci5lcnJvckVtaXR0ZWQ9ITApLGUuZW1pdChcImVycm9yXCIsdCkpfWZ1bmN0aW9uIHdTKCl7bGV0IGU9dGhpcy5fcmVhZGFibGVTdGF0ZSx0PXRoaXMuX3dyaXRhYmxlU3RhdGU7ZSYmKGUuY29uc3RydWN0ZWQ9ITAsZS5jbG9zZWQ9ITEsZS5jbG9zZUVtaXR0ZWQ9ITEsZS5kZXN0cm95ZWQ9ITEsZS5lcnJvcmVkPW51bGwsZS5lcnJvckVtaXR0ZWQ9ITEsZS5yZWFkaW5nPSExLGUuZW5kZWQ9ITEsZS5lbmRFbWl0dGVkPSExKSx0JiYodC5jb25zdHJ1Y3RlZD0hMCx0LmRlc3Ryb3llZD0hMSx0LmNsb3NlZD0hMSx0LmNsb3NlRW1pdHRlZD0hMSx0LmVycm9yZWQ9bnVsbCx0LmVycm9yRW1pdHRlZD0hMSx0LmVuZGVkPSExLHQuZW5kaW5nPSExLHQuZmluYWxDYWxsZWQ9ITEsdC5wcmVmaW5pc2hlZD0hMSx0LmZpbmlzaGVkPSExKX1mdW5jdGlvbiBpYyhlLHQscil7bGV0IG49ZS5fcmVhZGFibGVTdGF0ZSxvPWUuX3dyaXRhYmxlU3RhdGU7aWYobyYmby5kZXN0cm95ZWR8fG4mJm4uZGVzdHJveWVkKXJldHVybiB0aGlzO24mJm4uYXV0b0Rlc3Ryb3l8fG8mJm8uYXV0b0Rlc3Ryb3k/ZS5kZXN0cm95KHQpOnQmJih0LnN0YWNrLG8mJiFvLmVycm9yZWQmJihvLmVycm9yZWQ9dCksbiYmIW4uZXJyb3JlZCYmKG4uZXJyb3JlZD10KSxyP3koc2MsZSx0KTpzYyhlLHQpKX1mdW5jdGlvbiBQUyhlLHQpe2lmKHR5cGVvZiBlLl9jb25zdHJ1Y3QhPVwiZnVuY3Rpb25cIilyZXR1cm47bGV0IHI9ZS5fcmVhZGFibGVTdGF0ZSxuPWUuX3dyaXRhYmxlU3RhdGU7ciYmKHIuY29uc3RydWN0ZWQ9ITEpLG4mJihuLmNvbnN0cnVjdGVkPSExKSxlLm9uY2Uob2MsdCksIShlLmxpc3RlbmVyQ291bnQob2MpPjEpJiZ5KFVTLGUpfWZ1bmN0aW9uIFVTKGUpe2xldCB0PSExO2Z1bmN0aW9uIHIobil7aWYodCl7aWMoZSxuPz9uZXcgenQpO3JldHVybn10PSEwO2xldCBvPWUuX3JlYWRhYmxlU3RhdGUscz1lLl93cml0YWJsZVN0YXRlLGk9c3x8bztvJiYoby5jb25zdHJ1Y3RlZD0hMCkscyYmKHMuY29uc3RydWN0ZWQ9ITApLGkuZGVzdHJveWVkP2UuZW1pdChNRSxuKTpuP2ljKGUsbiwhMCk6eShNUyxlKX10cnl7bGV0IG49ZS5fY29uc3RydWN0KHIpO2lmKG4hPW51bGwpe2xldCBvPW4udGhlbjt0eXBlb2Ygbz09XCJmdW5jdGlvblwiJiZvLmNhbGwobixmdW5jdGlvbigpe3kocixudWxsKX0sZnVuY3Rpb24ocyl7eShyLHMpfSl9fWNhdGNoKG4pe3Iobil9fWZ1bmN0aW9uIE1TKGUpe2UuZW1pdChvYyl9ZnVuY3Rpb24gVUUoZSl7cmV0dXJuIGUmJmUuc2V0SGVhZGVyJiZ0eXBlb2YgZS5hYm9ydD09XCJmdW5jdGlvblwifWZ1bmN0aW9uIEdlKGUsdCl7aWYoISFlKXtpZihVRShlKSlyZXR1cm4gZS5hYm9ydCgpO2lmKFVFKGUucmVxKSlyZXR1cm4gZS5yZXEuYWJvcnQoKTtpZih0eXBlb2YgZS5kZXN0cm95PT1cImZ1bmN0aW9uXCIpcmV0dXJuIGUuZGVzdHJveSh0KTtpZih0eXBlb2YgZS5jbG9zZT09XCJmdW5jdGlvblwiKXJldHVybiBlLmNsb3NlKCl9fXZhciBNRSxvYyxwZSxxdD1wKCgpPT57X2UoKTtTdCgpO01FPVN5bWJvbChcImtEZXN0cm95XCIpLG9jPVN5bWJvbChcImtDb25zdHJ1Y3RcIik7cGU9e2NvbnN0cnVjdDpQUyxkZXN0cm95ZXI6R2UsZGVzdHJveTpDUyx1bmRlc3Ryb3k6d1MsZXJyb3JPckRlc3Ryb3k6aWN9fSk7ZnVuY3Rpb24gbnQoZSl7cmV0dXJuISEoZSYmdHlwZW9mIGUucGlwZT09XCJmdW5jdGlvblwiJiZ0eXBlb2YgZS5vbj09XCJmdW5jdGlvblwiJiYoIWUuX3dyaXRhYmxlU3RhdGV8fGUuX3JlYWRhYmxlU3RhdGU/LnJlYWRhYmxlIT09ITEpJiYoIWUuX3dyaXRhYmxlU3RhdGV8fGUuX3JlYWRhYmxlU3RhdGUpKX1mdW5jdGlvbiBfbihlKXtyZXR1cm4hIShlJiZ0eXBlb2YgZS53cml0ZT09XCJmdW5jdGlvblwiJiZ0eXBlb2YgZS5vbj09XCJmdW5jdGlvblwiJiYoIWUuX3JlYWRhYmxlU3RhdGV8fGUuX3dyaXRhYmxlU3RhdGU/LndyaXRhYmxlIT09ITEpKX1mdW5jdGlvbiBGRShlKXtyZXR1cm4hIShlJiZ0eXBlb2YgZS5waXBlPT1cImZ1bmN0aW9uXCImJmUuX3JlYWRhYmxlU3RhdGUmJnR5cGVvZiBlLm9uPT1cImZ1bmN0aW9uXCImJnR5cGVvZiBlLndyaXRlPT1cImZ1bmN0aW9uXCIpfWZ1bmN0aW9uIG90KGUpe3JldHVybiBlJiYoZS5fcmVhZGFibGVTdGF0ZXx8ZS5fd3JpdGFibGVTdGF0ZXx8dHlwZW9mIGUud3JpdGU9PVwiZnVuY3Rpb25cIiYmdHlwZW9mIGUub249PVwiZnVuY3Rpb25cInx8dHlwZW9mIGUucGlwZT09XCJmdW5jdGlvblwiJiZ0eXBlb2YgZS5vbj09XCJmdW5jdGlvblwiKX1mdW5jdGlvbiBLZShlLHQpe3JldHVybiBlPT1udWxsPyExOnQ9PT0hMD90eXBlb2YgZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09PVwiZnVuY3Rpb25cIjp0PT09ITE/dHlwZW9mIGVbU3ltYm9sLml0ZXJhdG9yXT09XCJmdW5jdGlvblwiOnR5cGVvZiBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT09XCJmdW5jdGlvblwifHx0eXBlb2YgZVtTeW1ib2wuaXRlcmF0b3JdPT1cImZ1bmN0aW9uXCJ9ZnVuY3Rpb24gV0UoZSl7aWYoIW90KGUpKXJldHVybiBudWxsO2xldCB0PWUuX3dyaXRhYmxlU3RhdGUscj1lLl9yZWFkYWJsZVN0YXRlLG49dHx8cjtyZXR1cm4hIShlLmRlc3Ryb3llZHx8bj8uZGVzdHJveWVkKX1mdW5jdGlvbiBmbihlKXtpZighX24oZSkpcmV0dXJuIG51bGw7aWYoZS53cml0YWJsZUVuZGVkPT09ITApcmV0dXJuITA7bGV0IHQ9ZS5fd3JpdGFibGVTdGF0ZTtyZXR1cm4gdD8uZXJyb3JlZD8hMTp0eXBlb2YgdD8uZW5kZWQhPVwiYm9vbGVhblwiP251bGw6dC5lbmRlZH1mdW5jdGlvbiBIbyhlKXtpZighbnQoZSkpcmV0dXJuIG51bGw7aWYoZS5yZWFkYWJsZUVuZGVkPT09ITApcmV0dXJuITA7bGV0IHQ9ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4hdHx8dC5lcnJvcmVkPyExOnR5cGVvZiB0Py5lbmRlZCE9XCJib29sZWFuXCI/bnVsbDp0LmVuZGVkfWZ1bmN0aW9uIEJTKGUsdCl7aWYoIW50KGUpKXJldHVybiBudWxsO2xldCByPWUuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHI/LmVycm9yZWQ/ITE6dHlwZW9mIHI/LmVuZEVtaXR0ZWQhPVwiYm9vbGVhblwiP251bGw6ISEoci5lbmRFbWl0dGVkfHx0PT09ITEmJnIuZW5kZWQ9PT0hMCYmci5sZW5ndGg9PT0wKX1mdW5jdGlvbiBWRShlKXtyZXR1cm4hIShlJiYoZS5yZWFkYWJsZURpZFJlYWR8fGUucmVhZGFibGVBYm9ydGVkfHxlW2tTXSkpfWZ1bmN0aW9uIHBuKGUpe2xldCB0PW50KGUpO3JldHVybiB0PT09bnVsbHx8dHlwZW9mIGU/LnJlYWRhYmxlIT1cImJvb2xlYW5cIj9udWxsOldFKGUpPyExOnQmJmUucmVhZGFibGUmJiFCUyhlKX1mdW5jdGlvbiBkbihlKXtsZXQgdD1fbihlKTtyZXR1cm4gdD09PW51bGx8fHR5cGVvZiBlPy53cml0YWJsZSE9XCJib29sZWFuXCI/bnVsbDpXRShlKT8hMTp0JiZlLndyaXRhYmxlJiYhZm4oZSl9dmFyIGtTLFB0PXAoKCk9PntrUz1TeW1ib2woXCJrSXNEaXN0dXJiZWRcIil9KTt2YXIgc3QsJG89cCgoKT0+e3N0PXt9fSk7ZnVuY3Rpb24gR0UoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBCbG9ifXZhciBIRT1wKCgpPT57fSk7ZnVuY3Rpb24gRlMoZSx0LHIpe2xldCBuO2lmKHR5cGVvZiB0PT1cInN0cmluZ1wifHx0IGluc3RhbmNlb2YgXylyZXR1cm4gbmV3IGUoe29iamVjdE1vZGU6ITAsLi4ucixyZWFkKCl7dGhpcy5wdXNoKHQpLHRoaXMucHVzaChudWxsKX19KTtsZXQgbztpZih0JiZ0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSlvPSEwLG49dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtlbHNlIGlmKHQmJnRbU3ltYm9sLml0ZXJhdG9yXSlvPSExLG49dFtTeW1ib2wuaXRlcmF0b3JdKCk7ZWxzZSB0aHJvdyBuZXcgSChcIml0ZXJhYmxlXCIsW1wiSXRlcmFibGVcIl0sdCk7bGV0IHM9bmV3IGUoe29iamVjdE1vZGU6ITAsaGlnaFdhdGVyTWFyazoxLC4uLnJ9KSxpPSExO3MuX3JlYWQ9ZnVuY3Rpb24oKXtpfHwoaT0hMCxhKCkpfSxzLl9kZXN0cm95PWZ1bmN0aW9uKFIsbCl7YyhSKS50aGVuKCgpPT55KGwsUiksRT0+eShsLEV8fFIpKX07YXN5bmMgZnVuY3Rpb24gYyhSKXtsZXQgbD1SIT1udWxsLEU9dHlwZW9mIG4udGhyb3c9PVwiZnVuY3Rpb25cIjtpZihsJiZFKXtsZXR7dmFsdWU6dSxkb25lOmZ9PWF3YWl0IG4udGhyb3coUik7aWYoYXdhaXQgdSxmKXJldHVybn1pZih0eXBlb2Ygbi5yZXR1cm49PVwiZnVuY3Rpb25cIil7bGV0e3ZhbHVlOnV9PWF3YWl0IG4ucmV0dXJuKCk7YXdhaXQgdX19YXN5bmMgZnVuY3Rpb24gYSgpe2Zvcig7Oyl7dHJ5e2xldHt2YWx1ZTpSLGRvbmU6bH09bz9hd2FpdCBuLm5leHQoKTpuLm5leHQoKTtpZihsKXMucHVzaChudWxsKTtlbHNle2xldCBFPVImJnR5cGVvZiBSLnRoZW49PVwiZnVuY3Rpb25cIj9hd2FpdCBSOlI7aWYoRT09PW51bGwpdGhyb3cgaT0hMSxuZXcgeHI7aWYocy5wdXNoKEUpKWNvbnRpbnVlO2k9ITF9fWNhdGNoKFIpe3MuZGVzdHJveShSKX1icmVha319cmV0dXJuIHN9dmFyIGhuLGNjPXAoKCk9Pnt4ZSgpO19lKCk7U3QoKTtobj1GU30pO2Z1bmN0aW9uIFdTKGUsdCxyKXtyZXR1cm4gZS5oaWdoV2F0ZXJNYXJrIT1udWxsP2UuaGlnaFdhdGVyTWFyazp0P2Vbcl06bnVsbH1mdW5jdGlvbiBPbihlKXtyZXR1cm4gZT8xNjoxNioxMDI0fWZ1bmN0aW9uIHZvKGUsdCxyLG4pe2xldCBvPVdTKHQsbixyKTtpZihvIT1udWxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihvKXx8bzwwKXtsZXQgcz1uP2BvcHRpb25zLiR7cn1gOlwib3B0aW9ucy5oaWdoV2F0ZXJNYXJrXCI7dGhyb3cgbmV3IHVlKHMsbyl9cmV0dXJuIE1hdGguZmxvb3Iobyl9cmV0dXJuIE9uKGUub2JqZWN0TW9kZSl9dmFyIGFjPXAoKCk9PntfZSgpfSk7ZnVuY3Rpb24gTShlKXtWZS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gWW8oZSx0LHIpe2lmKHR5cGVvZiBlLnByZXBlbmRMaXN0ZW5lcj09XCJmdW5jdGlvblwiKXJldHVybiBlLnByZXBlbmRMaXN0ZW5lcih0LHIpOyFlLl9ldmVudHN8fCFlLl9ldmVudHNbdF0/ZS5vbih0LHIpOkFycmF5LmlzQXJyYXkoZS5fZXZlbnRzW3RdKT9lLl9ldmVudHNbdF0udW5zaGlmdChyKTplLl9ldmVudHNbdF09W3IsZS5fZXZlbnRzW3RdXX12YXIgS289cCgoKT0+e2FuKCk7T2JqZWN0LnNldFByb3RvdHlwZU9mKE0ucHJvdG90eXBlLFZlLnByb3RvdHlwZSk7T2JqZWN0LnNldFByb3RvdHlwZU9mKE0sVmUpO00ucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZSx0KXtsZXQgcj10aGlzO2Z1bmN0aW9uIG4obCl7ZS53cml0YWJsZSYmZS53cml0ZShsKT09PSExJiZyLnBhdXNlJiZyLnBhdXNlKCl9ci5vbihcImRhdGFcIixuKTtmdW5jdGlvbiBvKCl7ci5yZWFkYWJsZSYmci5yZXN1bWUmJnIucmVzdW1lKCl9ZS5vbihcImRyYWluXCIsbyksIWUuX2lzU3RkaW8mJighdHx8dC5lbmQhPT0hMSkmJihyLm9uKFwiZW5kXCIsaSksci5vbihcImNsb3NlXCIsYykpO2xldCBzPSExO2Z1bmN0aW9uIGkoKXtzfHwocz0hMCxlLmVuZCgpKX1mdW5jdGlvbiBjKCl7c3x8KHM9ITAsdHlwZW9mIGUuZGVzdHJveT09XCJmdW5jdGlvblwiJiZlLmRlc3Ryb3koKSl9ZnVuY3Rpb24gYShsKXtSKCksVmUubGlzdGVuZXJDb3VudCh0aGlzLFwiZXJyb3JcIik9PT0wJiZ0aGlzLmVtaXQoXCJlcnJvclwiLGwpfVlvKHIsXCJlcnJvclwiLGEpLFlvKGUsXCJlcnJvclwiLGEpO2Z1bmN0aW9uIFIoKXtyLnJlbW92ZUxpc3RlbmVyKFwiZGF0YVwiLG4pLGUucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLG8pLHIucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixpKSxyLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixjKSxyLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixhKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixhKSxyLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsUiksci5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsUiksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsUil9cmV0dXJuIHIub24oXCJlbmRcIixSKSxyLm9uKFwiY2xvc2VcIixSKSxlLm9uKFwiY2xvc2VcIixSKSxlLmVtaXQoXCJwaXBlXCIsciksZX19KTtmdW5jdGlvbiBfYyhlKXtsZXQgdD1XYShlPz9udWxsKTtpZih0JiZ0IGluICRFJiZXKHQpLCF0JiZ0eXBlb2YgZT09XCJzdHJpbmdcIiYmZS50b0xvd2VyQ2FzZSgpIT09XCJyYXdcIil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZW5jb2Rpbmc6ICR7ZX1gKTtyZXR1cm4gU3RyaW5nKHQpfWZ1bmN0aW9uIFJjKGUpe3JldHVybiBlPD0xMjc/MDplPj41PT09Nj8yOmU+PjQ9PT0xND8zOmU+PjM9PT0zMD80OmU+PjY9PT0yPy0xOi0yfWZ1bmN0aW9uIFZTKGUsdCxyKXtsZXQgbj10Lmxlbmd0aC0xO2lmKG48cilyZXR1cm4gMDtsZXQgbz1SYyh0W25dKTtyZXR1cm4gbz49MD8obz4wJiYoZS5sYXN0TmVlZD1vLTEpLG8pOi0tbjxyfHxvPT09LTI/MDoobz1SYyh0W25dKSxvPj0wPyhvPjAmJihlLmxhc3ROZWVkPW8tMiksbyk6LS1uPHJ8fG89PT0tMj8wOihvPVJjKHRbbl0pLG8+PTA/KG8+MCYmKG89PT0yP289MDplLmxhc3ROZWVkPW8tMyksbyk6MCkpfWZ1bmN0aW9uIEdTKGUsdCl7aWYoKHRbMF0mMTkyKSE9PTEyOClyZXR1cm4gZS5sYXN0TmVlZD0wLFwiXFx1RkZGRFwiO2lmKGUubGFzdE5lZWQ+MSYmdC5sZW5ndGg+MSl7aWYoKHRbMV0mMTkyKSE9PTEyOClyZXR1cm4gZS5sYXN0TmVlZD0xLFwiXFx1RkZGRFwiO2lmKGUubGFzdE5lZWQ+MiYmdC5sZW5ndGg+MiYmKHRbMl0mMTkyKSE9PTEyOClyZXR1cm4gZS5sYXN0TmVlZD0yLFwiXFx1RkZGRFwifX1mdW5jdGlvbiBIUyhlKXtsZXQgdD10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLHI9R1ModGhpcyxlKTtpZihyIT09dm9pZCAwKXJldHVybiByO2lmKHRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoKXJldHVybiBlLmNvcHkodGhpcy5sYXN0Q2hhcix0LDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO2UuY29weSh0aGlzLmxhc3RDaGFyLHQsMCxlLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09ZS5sZW5ndGh9ZnVuY3Rpb24gJFMoZSl7aWYodGhpcy5sYXN0TmVlZDw9ZS5sZW5ndGgpcmV0dXJuIGUuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7ZS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLGUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1lLmxlbmd0aH1mdW5jdGlvbiB2RShlLHQpe2xldCByPVZTKHRoaXMsZSx0KTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gZS50b1N0cmluZyhcInV0ZjhcIix0KTt0aGlzLmxhc3RUb3RhbD1yO2xldCBuPWUubGVuZ3RoLShyLXRoaXMubGFzdE5lZWQpO3JldHVybiBlLmNvcHkodGhpcy5sYXN0Q2hhciwwLG4pLGUudG9TdHJpbmcoXCJ1dGY4XCIsdCxuKX1mdW5jdGlvbiB2UyhlKXtsZXQgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCtcIlxcdUZGRkRcIjp0fWZ1bmN0aW9uIFlFKGUpe2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiKXJldHVybiBlO2lmKGUubGVuZ3RoPT09MClyZXR1cm5cIlwiO2xldCB0LHI7aWYodGhpcy5sYXN0TmVlZCl7aWYodD10aGlzLmZpbGxMYXN0KGUpLHQ9PT12b2lkIDApcmV0dXJuXCJcIjtyPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2Ugcj0wO3JldHVybiByPGUubGVuZ3RoP3Q/dCt0aGlzLnRleHQoZSxyKTp0aGlzLnRleHQoZSxyKTp0fHxcIlwifWZ1bmN0aW9uIFlTKGUsdCl7bGV0IHI9KGUubGVuZ3RoLXQpJTM7cmV0dXJuIHI9PT0wP2UudG9TdHJpbmcoXCJiYXNlNjRcIix0KToodGhpcy5sYXN0TmVlZD0zLXIsdGhpcy5sYXN0VG90YWw9MyxyPT09MT90aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPWVbZS5sZW5ndGgtMV0pLGUudG9TdHJpbmcoXCJiYXNlNjRcIix0LGUubGVuZ3RoLXIpKX1mdW5jdGlvbiBLUyhlKXtsZXQgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKFwiYmFzZTY0XCIsMCwzLXRoaXMubGFzdE5lZWQpOnR9ZnVuY3Rpb24galMoZSl7cmV0dXJuIHR5cGVvZiBlPT1cInN0cmluZ1wiP2U6ZS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBYUyhlKXtyZXR1cm4gZSYmZS5sZW5ndGg/dGhpcy53cml0ZShlKTpcIlwifXZhciAkRSxTbixsYyxFYyx1YyxadCxhbSxLRT1wKCgpPT57eGUoKTtVZSgpOyRFPShuPT4obltuLmFzY2lpPTBdPVwiYXNjaWlcIixuW24ubGF0aW4xPTFdPVwibGF0aW4xXCIsbltuLnV0ZjE2bGU9Ml09XCJ1dGYxNmxlXCIsbikpKCRFfHx7fSk7U249Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLmVuY29kaW5nPXQ7dGhpcy5sYXN0TmVlZD0wO3RoaXMubGFzdFRvdGFsPTA7dGhpcy5sYXN0Q2hhcj1fLmFsbG9jVW5zYWZlKHIpfX0sbGM9Y2xhc3MgZXh0ZW5kcyBTbntjb25zdHJ1Y3RvcihyKXtzdXBlcihfYyhyKSwzKTt0aGlzLmVuZD1LUzt0aGlzLmZpbGxMYXN0PSRTO3RoaXMudGV4dD1ZUzt0aGlzLndyaXRlPVlFfX0sRWM9Y2xhc3MgZXh0ZW5kcyBTbntjb25zdHJ1Y3RvcihyKXtzdXBlcihfYyhyKSw0KTt0aGlzLmVuZD1YUzt0aGlzLmZpbGxMYXN0PXZvaWQgMDt0aGlzLnRleHQ9dkU7dGhpcy53cml0ZT1qU319LHVjPWNsYXNzIGV4dGVuZHMgU257Y29uc3RydWN0b3Iocil7c3VwZXIoX2MociksNCk7dGhpcy5lbmQ9dlM7dGhpcy5maWxsTGFzdD1IUzt0aGlzLnRleHQ9dkU7dGhpcy53cml0ZT1ZRX19LFp0PWNsYXNze2NvbnN0cnVjdG9yKHQpe2xldCByO3N3aXRjaCh0KXtjYXNlXCJ1dGY4XCI6cj1uZXcgdWModCk7YnJlYWs7Y2FzZVwiYmFzZTY0XCI6cj1uZXcgbGModCk7YnJlYWs7ZGVmYXVsdDpyPW5ldyBFYyh0KX10aGlzLmVuY29kaW5nPXIuZW5jb2RpbmcsdGhpcy5lbmQ9ci5lbmQsdGhpcy5maWxsTGFzdD1yLmZpbGxMYXN0LHRoaXMubGFzdENoYXI9ci5sYXN0Q2hhcix0aGlzLmxhc3ROZWVkPXIubGFzdE5lZWQsdGhpcy5sYXN0VG90YWw9ci5sYXN0VG90YWwsdGhpcy50ZXh0PXIudGV4dCx0aGlzLndyaXRlPXIud3JpdGV9fSxhbT1uZXcgUHJveHkoWnQse2FwcGx5KGUsdCxyKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LG5ldyBadCguLi5yKSl9fSl9KTt2YXIgZmMsakUsWEU9cCgoKT0+e3hlKCk7ZnIoKTtmYz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cHVzaCh0KXtsZXQgcj17ZGF0YTp0LG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1yOnRoaXMuaGVhZD1yLHRoaXMudGFpbD1yLCsrdGhpcy5sZW5ndGh9dW5zaGlmdCh0KXtsZXQgcj17ZGF0YTp0LG5leHQ6dGhpcy5oZWFkfTt0aGlzLmxlbmd0aD09PTAmJih0aGlzLnRhaWw9ciksdGhpcy5oZWFkPXIsKyt0aGlzLmxlbmd0aH1zaGlmdCgpe2lmKHRoaXMubGVuZ3RoPT09MClyZXR1cm47bGV0IHQ9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMubGVuZ3RoPT09MT90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsdH1jbGVhcigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfWpvaW4odCl7aWYodGhpcy5sZW5ndGg9PT0wKXJldHVyblwiXCI7bGV0IHI9dGhpcy5oZWFkLG49XCJcIityLmRhdGE7Zm9yKDtyPXIubmV4dDspbis9dCtyLmRhdGE7cmV0dXJuIG59Y29uY2F0KHQpe2lmKHRoaXMubGVuZ3RoPT09MClyZXR1cm4gXy5hbGxvYygwKTtsZXQgcj1fLmFsbG9jVW5zYWZlKHQ+Pj4wKSxuPXRoaXMuaGVhZCxvPTA7Zm9yKDtuOylyLnNldChuLmRhdGEsbyksbys9bi5kYXRhLmxlbmd0aCxuPW4ubmV4dDtyZXR1cm4gcn1jb25zdW1lKHQscil7bGV0IG49dGhpcy5oZWFkLmRhdGE7aWYodDxuLmxlbmd0aCl7bGV0IG89bi5zbGljZSgwLHQpO3JldHVybiB0aGlzLmhlYWQuZGF0YT1uLnNsaWNlKHQpLG99cmV0dXJuIHQ9PT1uLmxlbmd0aD90aGlzLnNoaWZ0KCk6cj90aGlzLl9nZXRTdHJpbmcodCk6dGhpcy5fZ2V0QnVmZmVyKHQpfWZpcnN0KCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2ZvcihsZXQgdD10aGlzLmhlYWQ7dDt0PXQubmV4dCl5aWVsZCB0LmRhdGF9X2dldFN0cmluZyh0KXtsZXQgcj1cIlwiLG49dGhpcy5oZWFkLG89MDtkb3tsZXQgcz1uLmRhdGE7aWYodD5zLmxlbmd0aClyKz1zLHQtPXMubGVuZ3RoO2Vsc2V7dD09PXMubGVuZ3RoPyhyKz1zLCsrbyxuLm5leHQ/dGhpcy5oZWFkPW4ubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOihyKz1zLnNsaWNlKDAsdCksdGhpcy5oZWFkPW4sbi5kYXRhPXMuc2xpY2UodCkpO2JyZWFrfSsrb313aGlsZShuPW4ubmV4dCk7cmV0dXJuIHRoaXMubGVuZ3RoLT1vLHJ9X2dldEJ1ZmZlcih0KXtsZXQgcj1fLmFsbG9jVW5zYWZlKHQpLG49dCxvPXRoaXMuaGVhZCxzPTA7ZG97bGV0IGk9by5kYXRhO2lmKHQ+aS5sZW5ndGgpci5zZXQoaSxuLXQpLHQtPWkubGVuZ3RoO2Vsc2V7dD09PWkubGVuZ3RoPyhyLnNldChpLG4tdCksKytzLG8ubmV4dD90aGlzLmhlYWQ9by5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KHIuc2V0KG5ldyBVaW50OEFycmF5KGkuYnVmZmVyLGkuYnl0ZU9mZnNldCx0KSxuLXQpLHRoaXMuaGVhZD1vLG8uZGF0YT1pLnNsaWNlKHQpKTticmVha30rK3N9d2hpbGUobz1vLm5leHQpO3JldHVybiB0aGlzLmxlbmd0aC09cyxyfVtLLmN1c3RvbV0odCxyKXtyZXR1cm4gSyh0aGlzLHsuLi5yLGRlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pfX0sakU9ZmN9KTtmdW5jdGlvbiBoYyhlLHQscil7dHlwZW9mIHIhPVwiYm9vbGVhblwiJiYocj10IGluc3RhbmNlb2YgTS5EdXBsZXgpLHRoaXMub2JqZWN0TW9kZT0hIShlJiZlLm9iamVjdE1vZGUpLHImJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIShlJiZlLnJlYWRhYmxlT2JqZWN0TW9kZSkpLHRoaXMuaGlnaFdhdGVyTWFyaz1lP3ZvKHRoaXMsZSxcInJlYWRhYmxlSGlnaFdhdGVyTWFya1wiLHIpOk9uKCExKSx0aGlzLmJ1ZmZlcj1uZXcgakUsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPVtdLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLmNvbnN0cnVjdGVkPSEwLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXNbSnRdPW51bGwsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9IWV8fGUuZW1pdENsb3NlIT09ITEsdGhpcy5hdXRvRGVzdHJveT0hZXx8ZS5hdXRvRGVzdHJveSE9PSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZXJyb3JlZD1udWxsLHRoaXMuY2xvc2VkPSExLHRoaXMuY2xvc2VFbWl0dGVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPWUmJmUuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLmF3YWl0RHJhaW5Xcml0ZXJzPW51bGwsdGhpcy5tdWx0aUF3YWl0RHJhaW49ITEsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRhdGFFbWl0dGVkPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxlJiZlLmVuY29kaW5nJiYodGhpcy5kZWNvZGVyPW5ldyBadChlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPWUuZW5jb2RpbmcpfWZ1bmN0aW9uIHcoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdykpcmV0dXJuIG5ldyB3KGUpO2xldCB0PXRoaXMgaW5zdGFuY2VvZiBNLkR1cGxleDt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBoYyhlLHRoaXMsdCksZSYmKHR5cGVvZiBlLnJlYWQ9PVwiZnVuY3Rpb25cIiYmKHRoaXMuX3JlYWQ9ZS5yZWFkKSx0eXBlb2YgZS5kZXN0cm95PT1cImZ1bmN0aW9uXCImJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSksdHlwZW9mIGUuY29uc3RydWN0PT1cImZ1bmN0aW9uXCImJih0aGlzLl9jb25zdHJ1Y3Q9ZS5jb25zdHJ1Y3QpLGUuc2lnbmFsJiYhdCYmdW4oZS5zaWduYWwsdGhpcykpLE0uY2FsbCh0aGlzLGUpLHBlLmNvbnN0cnVjdCh0aGlzLCgpPT57dGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGUmJmpvKHRoaXMsdGhpcy5fcmVhZGFibGVTdGF0ZSl9KX1mdW5jdGlvbiBaRShlLHQscixuKXtrKFwicmVhZGFibGVBZGRDaHVua1wiLHQpO2xldCBvPWUuX3JlYWRhYmxlU3RhdGUscztpZihvLm9iamVjdE1vZGV8fCh0eXBlb2YgdD09XCJzdHJpbmdcIj8ocj1yfHxvLmRlZmF1bHRFbmNvZGluZyxvLmVuY29kaW5nIT09ciYmKG4mJm8uZW5jb2Rpbmc/dD1fLmZyb20odCxyKS50b1N0cmluZyhvLmVuY29kaW5nKToodD1fLmZyb20odCxyKSxyPVwiXCIpKSk6dCBpbnN0YW5jZW9mIF8/cj1cIlwiOk0uX2lzVWludDhBcnJheSh0KT8odD1NLl91aW50OEFycmF5VG9CdWZmZXIodCkscj1cIlwiKTp0IT1udWxsJiYocz1uZXcgSChcImNodW5rXCIsW1wic3RyaW5nXCIsXCJCdWZmZXJcIixcIlVpbnQ4QXJyYXlcIl0sdCkpKSxzKUFuKGUscyk7ZWxzZSBpZih0PT09bnVsbClvLnJlYWRpbmc9ITEsUVMoZSxvKTtlbHNlIGlmKG8ub2JqZWN0TW9kZXx8dCYmdC5sZW5ndGg+MClpZihuKW8uZW5kRW1pdHRlZD9BbihlLG5ldyBibyk6cGMoZSxvLHQsITApO2Vsc2UgaWYoby5lbmRlZClBbihlLG5ldyB5byk7ZWxzZXtpZihvLmRlc3Ryb3llZHx8by5lcnJvcmVkKXJldHVybiExO28ucmVhZGluZz0hMSxvLmRlY29kZXImJiFyPyh0PW8uZGVjb2Rlci53cml0ZSh0KSxvLm9iamVjdE1vZGV8fHQubGVuZ3RoIT09MD9wYyhlLG8sdCwhMSk6am8oZSxvKSk6cGMoZSxvLHQsITEpfWVsc2Ugbnx8KG8ucmVhZGluZz0hMSxqbyhlLG8pKTtyZXR1cm4hby5lbmRlZCYmKG8ubGVuZ3RoPG8uaGlnaFdhdGVyTWFya3x8by5sZW5ndGg9PT0wKX1mdW5jdGlvbiBwYyhlLHQscixuKXt0LmZsb3dpbmcmJnQubGVuZ3RoPT09MCYmIXQuc3luYyYmZS5saXN0ZW5lckNvdW50KFwiZGF0YVwiKT4wPyh0Lm11bHRpQXdhaXREcmFpbj90LmF3YWl0RHJhaW5Xcml0ZXJzLmNsZWFyKCk6dC5hd2FpdERyYWluV3JpdGVycz1udWxsLHQuZGF0YUVtaXR0ZWQ9ITAsZS5lbWl0KFwiZGF0YVwiLHIpKToodC5sZW5ndGgrPXQub2JqZWN0TW9kZT8xOnIubGVuZ3RoLG4/dC5idWZmZXIudW5zaGlmdChyKTp0LmJ1ZmZlci5wdXNoKHIpLHQubmVlZFJlYWRhYmxlJiZYbyhlKSksam8oZSx0KX1mdW5jdGlvbiB6UyhlKXtyZXR1cm4gZT49UUU/ZT1RRTooZS0tLGV8PWU+Pj4xLGV8PWU+Pj4yLGV8PWU+Pj40LGV8PWU+Pj44LGV8PWU+Pj4xNixlKyspLGV9ZnVuY3Rpb24gcUUoZSx0KXtyZXR1cm4gZTw9MHx8dC5sZW5ndGg9PT0wJiZ0LmVuZGVkPzA6dC5vYmplY3RNb2RlPzE6TnVtYmVyLmlzTmFOKGUpP3QuZmxvd2luZyYmdC5sZW5ndGg/dC5idWZmZXIuZmlyc3QoKS5sZW5ndGg6dC5sZW5ndGg6ZTw9dC5sZW5ndGg/ZTp0LmVuZGVkP3QubGVuZ3RoOjB9ZnVuY3Rpb24gUVMoZSx0KXtpZihrKFwib25Fb2ZDaHVua1wiKSwhdC5lbmRlZCl7aWYodC5kZWNvZGVyKXtsZXQgcj10LmRlY29kZXIuZW5kKCk7ciYmci5sZW5ndGgmJih0LmJ1ZmZlci5wdXNoKHIpLHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpyLmxlbmd0aCl9dC5lbmRlZD0hMCx0LnN5bmM/WG8oZSk6KHQubmVlZFJlYWRhYmxlPSExLHQuZW1pdHRlZFJlYWRhYmxlPSEwLEpFKGUpKX19ZnVuY3Rpb24gWG8oZSl7bGV0IHQ9ZS5fcmVhZGFibGVTdGF0ZTtrKFwiZW1pdFJlYWRhYmxlXCIsdC5uZWVkUmVhZGFibGUsdC5lbWl0dGVkUmVhZGFibGUpLHQubmVlZFJlYWRhYmxlPSExLHQuZW1pdHRlZFJlYWRhYmxlfHwoayhcImVtaXRSZWFkYWJsZVwiLHQuZmxvd2luZyksdC5lbWl0dGVkUmVhZGFibGU9ITAsYmUoSkUsZSkpfWZ1bmN0aW9uIEpFKGUpe2xldCB0PWUuX3JlYWRhYmxlU3RhdGU7ayhcImVtaXRSZWFkYWJsZV9cIix0LmRlc3Ryb3llZCx0Lmxlbmd0aCx0LmVuZGVkKSwhdC5kZXN0cm95ZWQmJiF0LmVycm9yZWQmJih0Lmxlbmd0aHx8dC5lbmRlZCkmJihlLmVtaXQoXCJyZWFkYWJsZVwiKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMSksdC5uZWVkUmVhZGFibGU9IXQuZmxvd2luZyYmIXQuZW5kZWQmJnQubGVuZ3RoPD10LmhpZ2hXYXRlck1hcmssT2MoZSl9ZnVuY3Rpb24gam8oZSx0KXshdC5yZWFkaW5nTW9yZSYmdC5jb25zdHJ1Y3RlZCYmKHQucmVhZGluZ01vcmU9ITAsYmUocVMsZSx0KSl9ZnVuY3Rpb24gcVMoZSx0KXtmb3IoOyF0LnJlYWRpbmcmJiF0LmVuZGVkJiYodC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrfHx0LmZsb3dpbmcmJnQubGVuZ3RoPT09MCk7KXtsZXQgcj10Lmxlbmd0aDtpZihrKFwibWF5YmVSZWFkTW9yZSByZWFkIDBcIiksZS5yZWFkKDApLHI9PT10Lmxlbmd0aClicmVha310LnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIFpTKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IG49ZS5fcmVhZGFibGVTdGF0ZTtuLmF3YWl0RHJhaW5Xcml0ZXJzPT09dD8oayhcInBpcGVPbkRyYWluXCIsMSksbi5hd2FpdERyYWluV3JpdGVycz1udWxsKTpuLm11bHRpQXdhaXREcmFpbiYmKGsoXCJwaXBlT25EcmFpblwiLG4uYXdhaXREcmFpbldyaXRlcnMuc2l6ZSksbi5hd2FpdERyYWluV3JpdGVycy5kZWxldGUodCkpLCghbi5hd2FpdERyYWluV3JpdGVyc3x8bi5hd2FpdERyYWluV3JpdGVycy5zaXplPT09MCkmJlZlLmxpc3RlbmVyQ291bnQoZSxcImRhdGFcIikmJihuLmZsb3dpbmc9ITAsT2MoZSkpfX1mdW5jdGlvbiBldShlKXtsZXQgdD1lLl9yZWFkYWJsZVN0YXRlO3QucmVhZGFibGVMaXN0ZW5pbmc9ZS5saXN0ZW5lckNvdW50KFwicmVhZGFibGVcIik+MCx0LnJlc3VtZVNjaGVkdWxlZCYmdFtKdF09PT0hMT90LmZsb3dpbmc9ITA6ZS5saXN0ZW5lckNvdW50KFwiZGF0YVwiKT4wP2UucmVzdW1lKCk6dC5yZWFkYWJsZUxpc3RlbmluZ3x8KHQuZmxvd2luZz1udWxsKX1mdW5jdGlvbiBKUyhlKXtrKFwicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwXCIpLGUucmVhZCgwKX1mdW5jdGlvbiBlQShlLHQpe3QucmVzdW1lU2NoZWR1bGVkfHwodC5yZXN1bWVTY2hlZHVsZWQ9ITAsYmUodEEsZSx0KSl9ZnVuY3Rpb24gdEEoZSx0KXtrKFwicmVzdW1lXCIsdC5yZWFkaW5nKSx0LnJlYWRpbmd8fGUucmVhZCgwKSx0LnJlc3VtZVNjaGVkdWxlZD0hMSxlLmVtaXQoXCJyZXN1bWVcIiksT2MoZSksdC5mbG93aW5nJiYhdC5yZWFkaW5nJiZlLnJlYWQoMCl9ZnVuY3Rpb24gT2MoZSl7bGV0IHQ9ZS5fcmVhZGFibGVTdGF0ZTtmb3IoayhcImZsb3dcIix0LmZsb3dpbmcpO3QuZmxvd2luZyYmZS5yZWFkKCkhPT1udWxsOyk7fWZ1bmN0aW9uIHR1KGUsdCl7dHlwZW9mIGUucmVhZCE9XCJmdW5jdGlvblwiJiYoZT13LndyYXAoZSx7b2JqZWN0TW9kZTohMH0pKTtsZXQgcj1yQShlLHQpO3JldHVybiByLnN0cmVhbT1lLHJ9YXN5bmMgZnVuY3Rpb24qckEoZSx0KXtsZXQgcj16RSxuPXtkZXN0cm95T25SZXR1cm46ITAsZGVzdHJveU9uRXJyb3I6ITAsLi4udH07ZnVuY3Rpb24gbyhFKXt0aGlzPT09ZT8ocigpLHI9ekUpOnI9RX1sZXQgcz1lLl9yZWFkYWJsZVN0YXRlLGk9cy5lcnJvcmVkLGM9cy5lcnJvckVtaXR0ZWQsYT1zLmVuZEVtaXR0ZWQsUj1zLmNsb3NlRW1pdHRlZDtlLm9uKFwicmVhZGFibGVcIixvKS5vbihcImVycm9yXCIsZnVuY3Rpb24oRSl7aT1FLGM9ITAsby5jYWxsKHRoaXMpfSkub24oXCJlbmRcIixmdW5jdGlvbigpe2E9ITAsby5jYWxsKHRoaXMpfSkub24oXCJjbG9zZVwiLGZ1bmN0aW9uKCl7Uj0hMCxvLmNhbGwodGhpcyl9KTtsZXQgbD0hMTt0cnl7Zm9yKDs7KXtsZXQgRT1lLmRlc3Ryb3llZD9udWxsOmUucmVhZCgpO2lmKEUhPT1udWxsKXlpZWxkIEU7ZWxzZXtpZihjKXRocm93IGk7aWYoYSlicmVhaztpZihSKWJyZWFrO2F3YWl0IG5ldyBQcm9taXNlKG8pfX19Y2F0Y2goRSl7dGhyb3cgbi5kZXN0cm95T25FcnJvciYmcGUuZGVzdHJveWVyKGUsRSksbD0hMCxFfWZpbmFsbHl7IWwmJm4uZGVzdHJveU9uUmV0dXJuJiYocy5hdXRvRGVzdHJveXx8IWEpJiZwZS5kZXN0cm95ZXIoZSxudWxsKX19ZnVuY3Rpb24gcnUoZSx0KXtpZih0Lmxlbmd0aD09PTApcmV0dXJuIG51bGw7bGV0IHI7cmV0dXJuIHQub2JqZWN0TW9kZT9yPXQuYnVmZmVyLnNoaWZ0KCk6IWV8fGU+PXQubGVuZ3RoPyh0LmRlY29kZXI/cj10LmJ1ZmZlci5qb2luKFwiXCIpOnQuYnVmZmVyLmxlbmd0aD09PTE/cj10LmJ1ZmZlci5maXJzdCgpOnI9dC5idWZmZXIuY29uY2F0KHQubGVuZ3RoKSx0LmJ1ZmZlci5jbGVhcigpKTpyPXQuYnVmZmVyLmNvbnN1bWUoZSx0LmRlY29kZXIpLHJ9ZnVuY3Rpb24gZGMoZSl7bGV0IHQ9ZS5fcmVhZGFibGVTdGF0ZTtrKFwiZW5kUmVhZGFibGVcIix0LmVuZEVtaXR0ZWQpLHQuZW5kRW1pdHRlZHx8KHQuZW5kZWQ9ITAsYmUobkEsdCxlKSl9ZnVuY3Rpb24gbkEoZSx0KXtpZihrKFwiZW5kUmVhZGFibGVOVFwiLGUuZW5kRW1pdHRlZCxlLmxlbmd0aCksIWUuZXJyb3JFbWl0dGVkJiYhZS5jbG9zZUVtaXR0ZWQmJiFlLmVuZEVtaXR0ZWQmJmUubGVuZ3RoPT09MCl7aWYoZS5lbmRFbWl0dGVkPSEwLHQuZW1pdChcImVuZFwiKSx0LndyaXRhYmxlJiZ0LmFsbG93SGFsZk9wZW49PT0hMSliZShvQSx0KTtlbHNlIGlmKGUuYXV0b0Rlc3Ryb3kpe2xldCByPXQuX3dyaXRhYmxlU3RhdGU7KCFyfHxyLmF1dG9EZXN0cm95JiYoci5maW5pc2hlZHx8ci53cml0YWJsZT09PSExKSkmJnQuZGVzdHJveSgpfX19ZnVuY3Rpb24gb0EoZSl7ZS53cml0YWJsZSYmIWUud3JpdGFibGVFbmRlZCYmIWUuZGVzdHJveWVkJiZlLmVuZCgpfWZ1bmN0aW9uIHNBKGUsdCl7cmV0dXJuIGhuKHcsZSx0KX1mdW5jdGlvbiBpQShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtfWZ1bmN0aW9uIGNBKGUsdCl7cmV0dXJuIG5ldyB3KHtvYmplY3RNb2RlOmUucmVhZGFibGVPYmplY3RNb2RlPz9lLm9iamVjdE1vZGU/PyEwLC4uLnQsZGVzdHJveShyLG4pe3BlLmRlc3Ryb3llcihlLHIpLG4ocil9fSkud3JhcChlKX12YXIgayxKdCx6RSxBbixRRSx5bSxnZSxObj1wKCgpPT57R28oKTt4ZSgpO3NpKCk7YWMoKTtLbygpO0tFKCk7eWUoKTtfZSgpO2pyKCk7JG8oKTtjYygpO1hFKCk7cXQoKTthbigpO1B0KCk7az1vaShcInN0cmVhbVwiLGU9PntrPWV9KSxKdD1TeW1ib2woXCJrUGF1c2VkXCIpO09iamVjdC5zZXRQcm90b3R5cGVPZih3LnByb3RvdHlwZSxNLnByb3RvdHlwZSk7T2JqZWN0LnNldFByb3RvdHlwZU9mKHcsTSk7ekU9KCk9Pnt9LHtlcnJvck9yRGVzdHJveTpBbn09cGU7dy5wcm90b3R5cGUuZGVzdHJveT1wZS5kZXN0cm95O3cucHJvdG90eXBlLl91bmRlc3Ryb3k9cGUudW5kZXN0cm95O3cucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dChlKX07dy5wcm90b3R5cGVbVmUuY2FwdHVyZVJlamVjdGlvblN5bWJvbF09ZnVuY3Rpb24oZSl7dGhpcy5kZXN0cm95KGUpfTt3LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFpFKHRoaXMsZSx0LCExKX07dy5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihlLHQpe3JldHVybiBaRSh0aGlzLGUsdCwhMCl9O3cucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gZVtKdF09PT0hMHx8ZS5mbG93aW5nPT09ITF9O3cucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGUpe2xldCB0PW5ldyBadChlKTt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9dCx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztsZXQgcj10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcixuPVwiXCI7Zm9yKGxldCBvIG9mIHIpbis9dC53cml0ZShvKTtyZXR1cm4gci5jbGVhcigpLG4hPT1cIlwiJiZyLnB1c2gobiksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9bi5sZW5ndGgsdGhpc307UUU9MTA3Mzc0MTgyNDt3LnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKGUpe2soXCJyZWFkXCIsZSksZT09PXZvaWQgMD9lPU5hTjpOdW1iZXIuaXNJbnRlZ2VyKGUpfHwoZT1OdW1iZXIucGFyc2VJbnQoZSwxMCkpO2xldCB0PXRoaXMuX3JlYWRhYmxlU3RhdGUscj1lO2lmKGU+dC5oaWdoV2F0ZXJNYXJrJiYodC5oaWdoV2F0ZXJNYXJrPXpTKGUpKSxlIT09MCYmKHQuZW1pdHRlZFJlYWRhYmxlPSExKSxlPT09MCYmdC5uZWVkUmVhZGFibGUmJigodC5oaWdoV2F0ZXJNYXJrIT09MD90Lmxlbmd0aD49dC5oaWdoV2F0ZXJNYXJrOnQubGVuZ3RoPjApfHx0LmVuZGVkKSlyZXR1cm4gayhcInJlYWQ6IGVtaXRSZWFkYWJsZVwiLHQubGVuZ3RoLHQuZW5kZWQpLHQubGVuZ3RoPT09MCYmdC5lbmRlZD9kYyh0aGlzKTpYbyh0aGlzKSxudWxsO2lmKGU9cUUoZSx0KSxlPT09MCYmdC5lbmRlZClyZXR1cm4gdC5sZW5ndGg9PT0wJiZkYyh0aGlzKSxudWxsO2xldCBuPXQubmVlZFJlYWRhYmxlO2soXCJuZWVkIHJlYWRhYmxlXCIsbiksKHQubGVuZ3RoPT09MHx8dC5sZW5ndGgtZTx0LmhpZ2hXYXRlck1hcmspJiYobj0hMCxrKFwibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmtcIixuKSksdC5lbmRlZHx8dC5yZWFkaW5nfHx0LmRlc3Ryb3llZHx8dC5lcnJvcmVkfHwhdC5jb25zdHJ1Y3RlZD8obj0hMSxrKFwicmVhZGluZywgZW5kZWQgb3IgY29uc3RydWN0aW5nXCIsbikpOm4mJihrKFwiZG8gcmVhZFwiKSx0LnJlYWRpbmc9ITAsdC5zeW5jPSEwLHQubGVuZ3RoPT09MCYmKHQubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKHQuaGlnaFdhdGVyTWFyayksdC5zeW5jPSExLHQucmVhZGluZ3x8KGU9cUUocix0KSkpO2xldCBvO3JldHVybiBlPjA/bz1ydShlLHQpOm89bnVsbCxvPT09bnVsbD8odC5uZWVkUmVhZGFibGU9dC5sZW5ndGg8PXQuaGlnaFdhdGVyTWFyayxlPTApOih0Lmxlbmd0aC09ZSx0Lm11bHRpQXdhaXREcmFpbj90LmF3YWl0RHJhaW5Xcml0ZXJzLmNsZWFyKCk6dC5hd2FpdERyYWluV3JpdGVycz1udWxsKSx0Lmxlbmd0aD09PTAmJih0LmVuZGVkfHwodC5uZWVkUmVhZGFibGU9ITApLHIhPT1lJiZ0LmVuZGVkJiZkYyh0aGlzKSksbyE9PW51bGwmJih0LmRhdGFFbWl0dGVkPSEwLHRoaXMuZW1pdChcImRhdGFcIixvKSksb307dy5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEx0KFwiX3JlYWQoKVwiKX07dy5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihlLHQpe2xldCByPXRoaXMsbj10aGlzLl9yZWFkYWJsZVN0YXRlO24ucGlwZXMubGVuZ3RoPT09MSYmKG4ubXVsdGlBd2FpdERyYWlufHwobi5tdWx0aUF3YWl0RHJhaW49ITAsbi5hd2FpdERyYWluV3JpdGVycz1uZXcgU2V0KG4uYXdhaXREcmFpbldyaXRlcnM/W24uYXdhaXREcmFpbldyaXRlcnNdOltdKSkpLG4ucGlwZXMucHVzaChlKSxrKFwicGlwZSBjb3VudD0lZCBvcHRzPSVqXCIsbi5waXBlcy5sZW5ndGgsdCk7bGV0IHM9KCF0fHx0LmVuZCE9PSExKSYmZSE9PXN0LnN0ZG91dCYmZSE9PXN0LnN0ZGVycj9jOkI7bi5lbmRFbWl0dGVkP2JlKHMpOnIub25jZShcImVuZFwiLHMpLGUub24oXCJ1bnBpcGVcIixpKTtmdW5jdGlvbiBpKGcsaCl7ayhcIm9udW5waXBlXCIpLGc9PT1yJiZoJiZoLmhhc1VucGlwZWQ9PT0hMSYmKGguaGFzVW5waXBlZD0hMCxsKCkpfWZ1bmN0aW9uIGMoKXtrKFwib25lbmRcIiksZS5lbmQoKX1sZXQgYSxSPSExO2Z1bmN0aW9uIGwoKXtrKFwiY2xlYW51cFwiKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixBKSxlLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsUyksYSYmZS5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIsYSksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsZiksZS5yZW1vdmVMaXN0ZW5lcihcInVucGlwZVwiLGkpLHIucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixjKSxyLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsQiksci5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIix1KSxSPSEwLGEmJm4uYXdhaXREcmFpbldyaXRlcnMmJighZS5fd3JpdGFibGVTdGF0ZXx8ZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZhKCl9ZnVuY3Rpb24gRSgpe1J8fChuLnBpcGVzLmxlbmd0aD09PTEmJm4ucGlwZXNbMF09PT1lPyhrKFwiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlXCIsMCksbi5hd2FpdERyYWluV3JpdGVycz1lLG4ubXVsdGlBd2FpdERyYWluPSExKTpuLnBpcGVzLmxlbmd0aD4xJiZuLnBpcGVzLmluY2x1ZGVzKGUpJiYoayhcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLG4uYXdhaXREcmFpbldyaXRlcnMuc2l6ZSksbi5hd2FpdERyYWluV3JpdGVycy5hZGQoZSkpLHIucGF1c2UoKSksYXx8KGE9WlMocixlKSxlLm9uKFwiZHJhaW5cIixhKSl9ci5vbihcImRhdGFcIix1KTtmdW5jdGlvbiB1KGcpe2soXCJvbmRhdGFcIik7bGV0IGg9ZS53cml0ZShnKTtrKFwiZGVzdC53cml0ZVwiLGgpLGg9PT0hMSYmRSgpfWZ1bmN0aW9uIGYoZyl7aWYoayhcIm9uZXJyb3JcIixnKSxCKCksZS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsZiksVmUubGlzdGVuZXJDb3VudChlLFwiZXJyb3JcIik9PT0wKXtsZXQgaD1lLl93cml0YWJsZVN0YXRlfHxlLl9yZWFkYWJsZVN0YXRlO2gmJiFoLmVycm9yRW1pdHRlZD9BbihlLGcpOmUuZW1pdChcImVycm9yXCIsZyl9fVlvKGUsXCJlcnJvclwiLGYpO2Z1bmN0aW9uIEEoKXtlLnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsUyksQigpfWUub25jZShcImNsb3NlXCIsQSk7ZnVuY3Rpb24gUygpe2soXCJvbmZpbmlzaFwiKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixBKSxCKCl9ZS5vbmNlKFwiZmluaXNoXCIsUyk7ZnVuY3Rpb24gQigpe2soXCJ1bnBpcGVcIiksci51bnBpcGUoZSl9cmV0dXJuIGUuZW1pdChcInBpcGVcIixyKSxlLndyaXRhYmxlTmVlZERyYWluPT09ITA/bi5mbG93aW5nJiZFKCk6bi5mbG93aW5nfHwoayhcInBpcGUgcmVzdW1lXCIpLHIucmVzdW1lKCkpLGV9O3cucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihlKXtsZXQgdD10aGlzLl9yZWFkYWJsZVN0YXRlLHI9e2hhc1VucGlwZWQ6ITF9O2lmKHQucGlwZXMubGVuZ3RoPT09MClyZXR1cm4gdGhpcztpZighZSl7bGV0IG89dC5waXBlczt0LnBpcGVzPVtdLHRoaXMucGF1c2UoKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKylvW3NdLmVtaXQoXCJ1bnBpcGVcIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9bGV0IG49dC5waXBlcy5pbmRleE9mKGUpO3JldHVybiBuPT09LTE/dGhpczoodC5waXBlcy5zcGxpY2UobiwxKSx0LnBpcGVzLmxlbmd0aD09PTAmJnRoaXMucGF1c2UoKSxlLmVtaXQoXCJ1bnBpcGVcIix0aGlzLHIpLHRoaXMpfTt3LnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe2xldCByPU0ucHJvdG90eXBlLm9uLmNhbGwodGhpcyxlLHQpLG49dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gZT09PVwiZGF0YVwiPyhuLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudChcInJlYWRhYmxlXCIpPjAsbi5mbG93aW5nIT09ITEmJnRoaXMucmVzdW1lKCkpOmU9PT1cInJlYWRhYmxlXCImJiFuLmVuZEVtaXR0ZWQmJiFuLnJlYWRhYmxlTGlzdGVuaW5nJiYobi5yZWFkYWJsZUxpc3RlbmluZz1uLm5lZWRSZWFkYWJsZT0hMCxuLmZsb3dpbmc9ITEsbi5lbWl0dGVkUmVhZGFibGU9ITEsayhcIm9uIHJlYWRhYmxlXCIsbi5sZW5ndGgsbi5yZWFkaW5nKSxuLmxlbmd0aD9Ybyh0aGlzKTpuLnJlYWRpbmd8fGJlKEpTLHRoaXMpKSxyfTt3LnByb3RvdHlwZS5hZGRMaXN0ZW5lcj13LnByb3RvdHlwZS5vbjt3LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe2xldCByPU0ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxlLHQpO3JldHVybiBlPT09XCJyZWFkYWJsZVwiJiZiZShldSx0aGlzKSxyfTt3LnByb3RvdHlwZS5vZmY9dy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7dy5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2xldCB0PU0ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuKGU9PT1cInJlYWRhYmxlXCJ8fGU9PT12b2lkIDApJiZiZShldSx0aGlzKSx0fTt3LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtsZXQgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBlLmZsb3dpbmd8fChrKFwicmVzdW1lXCIpLGUuZmxvd2luZz0hZS5yZWFkYWJsZUxpc3RlbmluZyxlQSh0aGlzLGUpKSxlW0p0XT0hMSx0aGlzfTt3LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBrKFwiY2FsbCBwYXVzZSBmbG93aW5nPSVqXCIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmchPT0hMSYmKGsoXCJwYXVzZVwiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KFwicGF1c2VcIikpLHRoaXMuX3JlYWRhYmxlU3RhdGVbSnRdPSEwLHRoaXN9O3cucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oZSl7bGV0IHQ9ITE7ZS5vbihcImRhdGFcIixuPT57IXRoaXMucHVzaChuKSYmZS5wYXVzZSYmKHQ9ITAsZS5wYXVzZSgpKX0pLGUub24oXCJlbmRcIiwoKT0+e3RoaXMucHVzaChudWxsKX0pLGUub24oXCJlcnJvclwiLG49PntBbih0aGlzLG4pfSksZS5vbihcImNsb3NlXCIsKCk9Pnt0aGlzLmRlc3Ryb3koKX0pLGUub24oXCJkZXN0cm95XCIsKCk9Pnt0aGlzLmRlc3Ryb3koKX0pLHRoaXMuX3JlYWQ9KCk9Pnt0JiZlLnJlc3VtZSYmKHQ9ITEsZS5yZXN1bWUoKSl9O2xldCByPU9iamVjdC5rZXlzKGUpO2ZvcihsZXQgbj0xO248ci5sZW5ndGg7bisrKXtsZXQgbz1yW25dO3RoaXNbb109PT12b2lkIDAmJnR5cGVvZiBlW29dPT1cImZ1bmN0aW9uXCImJih0aGlzW29dPWVbb10uYmluZChlKSl9cmV0dXJuIHRoaXN9O3cucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0dSh0aGlzKX07dy5wcm90b3R5cGUuaXRlcmF0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT12b2lkIDAmJkJlKGUsXCJvcHRpb25zXCIpLHR1KHRoaXMsZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHcucHJvdG90eXBlLHtyZWFkYWJsZTp7Z2V0KCl7bGV0IGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4hIWUmJmUucmVhZGFibGUhPT0hMSYmIWUuZGVzdHJveWVkJiYhZS5lcnJvckVtaXR0ZWQmJiFlLmVuZEVtaXR0ZWR9LHNldChlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZT0hIWUpfX0scmVhZGFibGVEaWRSZWFkOntlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkfX0scmVhZGFibGVBYm9ydGVkOntlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiEhKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yZWQpJiYhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkfX0scmVhZGFibGVIaWdoV2F0ZXJNYXJrOntlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSxyZWFkYWJsZUJ1ZmZlcjp7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSxyZWFkYWJsZUZsb3dpbmc6e2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ZSl9fSxyZWFkYWJsZUxlbmd0aDp7ZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSxyZWFkYWJsZU9iamVjdE1vZGU6e2VudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU/dGhpcy5fcmVhZGFibGVTdGF0ZS5vYmplY3RNb2RlOiExfX0scmVhZGFibGVFbmNvZGluZzp7ZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT90aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nOm51bGx9fSxkZXN0cm95ZWQ6e2VudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGU9PT12b2lkIDA/ITE6dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldChlKXshdGhpcy5fcmVhZGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0scmVhZGFibGVFbmRlZDp7ZW51bWVyYWJsZTohMSxnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT90aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ6ITF9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGhjLnByb3RvdHlwZSx7cGlwZXNDb3VudDp7Z2V0KCl7cmV0dXJuIHRoaXMucGlwZXMubGVuZ3RofX0scGF1c2VkOntnZXQoKXtyZXR1cm4gdGhpc1tKdF0hPT0hMX0sc2V0KGUpe3RoaXNbSnRdPSEhZX19fSk7eW09dy5mcm9tV2ViPWZ1bmN0aW9uKGUsdD17fSl7aWYoIWlBKGUpKXRocm93IG5ldyBIKFwicmVhZGFibGVTdHJlYW1cIixcIlJlYWRhYmxlU3RyZWFtXCIsZSk7QmUodCxcIm9wdGlvbnNcIik7bGV0e2hpZ2hXYXRlck1hcms6cixlbmNvZGluZzpuLG9iamVjdE1vZGU6bz0hMSxzaWduYWw6c309dDtpZihuIT09dm9pZCAwJiYhXy5pc0VuY29kaW5nKG4pKXRocm93IG5ldyB1ZShuLFwib3B0aW9ucy5lbmNvZGluZ1wiKTtaZShvLFwib3B0aW9ucy5vYmplY3RNb2RlXCIpO2xldCBpPWUuZ2V0UmVhZGVyKCksYz0hMSxhPW5ldyB3KHtvYmplY3RNb2RlOm8saGlnaFdhdGVyTWFyazpyLGVuY29kaW5nOm4sc2lnbmFsOnMscmVhZCgpe2kucmVhZCgpLnRoZW4oUj0+e1IuZG9uZT9hLnB1c2gobnVsbCk6YS5wdXNoKFIudmFsdWUpfSxSPT5kZXN0cm95LmNhbGwoYSxSKSl9LGRlc3Ryb3koUixsKXtmdW5jdGlvbiBFKCl7dHJ5e2woUil9Y2F0Y2godSl7cHJvY2Vzcy5uZXh0VGljaygoKT0+e3Rocm93IHV9KX19aWYoIWMpe2kuY2FuY2VsKFIpLnRoZW4oRSxFKTtyZXR1cm59RSgpfX0pO3JldHVybiBpLmNsb3NlZC50aGVuKCgpPT57Yz0hMCxIbyhhKXx8YS5wdXNoKG51bGwpfSxSPT57Yz0hMCxkZXN0cm95LmNhbGwoYSxSKX0pLGF9O3cuX2Zyb21MaXN0PXJ1O3cuUmVhZGFibGVTdGF0ZT1oYzt3LmZyb209c0E7dy53cmFwPWNBO2dlPXd9KTtmdW5jdGlvbiBzdShlKXtsZXQgdD1nZS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihlKSxyPWUsbj0hMTtmb3IoO3I/LmNvbnN0cnVjdG9yJiZyLmNvbnN0cnVjdG9yLm5hbWUhPT1cIk9iamVjdFwiOyl7aWYoci5jb25zdHJ1Y3Rvci5uYW1lPT09XCJEdXBsZXhcIil7bj0hMDticmVha31yPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKX1yZXR1cm4gdCYmbn1mdW5jdGlvbiBOYygpe31mdW5jdGlvbiB4bihlLHQscil7dHlwZW9mIHIhPVwiYm9vbGVhblwiJiYocj1zdSh0KSksdGhpcy5vYmplY3RNb2RlPSEhKGUmJmUub2JqZWN0TW9kZSksciYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhKGUmJmUud3JpdGFibGVPYmplY3RNb2RlKSksdGhpcy5oaWdoV2F0ZXJNYXJrPWU/dm8odGhpcyxlLFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIscik6T24oITEpLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExO2xldCBuPSEhKGUmJmUuZGVjb2RlU3RyaW5ncz09PSExKTt0aGlzLmRlY29kZVN0cmluZ3M9IW4sdGhpcy5kZWZhdWx0RW5jb2Rpbmc9ZSYmZS5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9UkEuYmluZCh2b2lkIDAsdCksdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYWZ0ZXJXcml0ZVRpY2tJbmZvPW51bGwsem8odGhpcyksdGhpcy5wZW5kaW5nY2I9MCx0aGlzLmNvbnN0cnVjdGVkPSEwLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9IWV8fGUuZW1pdENsb3NlIT09ITEsdGhpcy5hdXRvRGVzdHJveT0hZXx8ZS5hdXRvRGVzdHJveSE9PSExLHRoaXMuZXJyb3JlZD1udWxsLHRoaXMuY2xvc2VkPSExLHRoaXMuY2xvc2VFbWl0dGVkPSExLHRoaXNbYnJdPVtdfWZ1bmN0aW9uIHpvKGUpe2UuYnVmZmVyZWQ9W10sZS5idWZmZXJlZEluZGV4PTAsZS5hbGxCdWZmZXJzPSEwLGUuYWxsTm9vcD0hMH1mdW5jdGlvbiBqKGUpe2xldCB0PXN1KHRoaXMpO2lmKCF0JiYhRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0uY2FsbChqLHRoaXMpKXJldHVybiBuZXcgaihlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyB4bihlLHRoaXMsdCksZSYmKHR5cGVvZiBlLndyaXRlPT1cImZ1bmN0aW9uXCImJih0aGlzLl93cml0ZT1lLndyaXRlKSx0eXBlb2YgZS53cml0ZXY9PVwiZnVuY3Rpb25cIiYmKHRoaXMuX3dyaXRldj1lLndyaXRldiksdHlwZW9mIGUuZGVzdHJveT09XCJmdW5jdGlvblwiJiYodGhpcy5fZGVzdHJveT1lLmRlc3Ryb3kpLHR5cGVvZiBlLmZpbmFsPT1cImZ1bmN0aW9uXCImJih0aGlzLl9maW5hbD1lLmZpbmFsKSx0eXBlb2YgZS5jb25zdHJ1Y3Q9PVwiZnVuY3Rpb25cIiYmKHRoaXMuX2NvbnN0cnVjdD1lLmNvbnN0cnVjdCksZS5zaWduYWwmJnVuKGUuc2lnbmFsLHRoaXMpKSxNLmNhbGwodGhpcyxlKSxwZS5jb25zdHJ1Y3QodGhpcywoKT0+e2xldCByPXRoaXMuX3dyaXRhYmxlU3RhdGU7ci53cml0aW5nfHxUYyh0aGlzLHIpLEljKHRoaXMscil9KX1mdW5jdGlvbiBpdShlLHQscixuKXtsZXQgbz1lLl93cml0YWJsZVN0YXRlO2lmKHR5cGVvZiByPT1cImZ1bmN0aW9uXCIpbj1yLHI9by5kZWZhdWx0RW5jb2Rpbmc7ZWxzZXtpZighcilyPW8uZGVmYXVsdEVuY29kaW5nO2Vsc2UgaWYociE9PVwiYnVmZmVyXCImJiFfLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFRyKHIpO3R5cGVvZiBuIT1cImZ1bmN0aW9uXCImJihuPU5jKX1pZih0PT09bnVsbCl0aHJvdyBuZXcgeHI7aWYoIW8ub2JqZWN0TW9kZSlpZih0eXBlb2YgdD09XCJzdHJpbmdcIilvLmRlY29kZVN0cmluZ3MhPT0hMSYmKHQ9Xy5mcm9tKHQscikscj1cImJ1ZmZlclwiKTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBfKXI9XCJidWZmZXJcIjtlbHNlIGlmKGtlKHQpKXQ9RW4odCkscj1cImJ1ZmZlclwiO2Vsc2UgdGhyb3cgbmV3IEgoXCJjaHVua1wiLFtcInN0cmluZ1wiLFwiQnVmZmVyXCIsXCJVaW50OEFycmF5XCJdLHQpO2xldCBzO3JldHVybiBvLmVuZGluZz9zPW5ldyBDbzpvLmRlc3Ryb3llZCYmKHM9bmV3IGV0KFwid3JpdGVcIikpLHM/KHkobixzKSx5cihlLHMsITApLHMpOihvLnBlbmRpbmdjYisrLGFBKGUsbyx0LHIsbikpfWZ1bmN0aW9uIGFBKGUsdCxyLG4sbyl7bGV0IHM9dC5vYmplY3RNb2RlPzE6ci5sZW5ndGg7dC5sZW5ndGgrPXM7bGV0IGk9dC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrO3JldHVybiBpfHwodC5uZWVkRHJhaW49ITApLHQud3JpdGluZ3x8dC5jb3JrZWR8fHQuZXJyb3JlZHx8IXQuY29uc3RydWN0ZWQ/KHQuYnVmZmVyZWQucHVzaCh7Y2h1bms6cixlbmNvZGluZzpuLGNhbGxiYWNrOm99KSx0LmFsbEJ1ZmZlcnMmJm4hPT1cImJ1ZmZlclwiJiYodC5hbGxCdWZmZXJzPSExKSx0LmFsbE5vb3AmJm8hPT1OYyYmKHQuYWxsTm9vcD0hMSkpOih0LndyaXRlbGVuPXMsdC53cml0ZWNiPW8sdC53cml0aW5nPSEwLHQuc3luYz0hMCxlLl93cml0ZShyLG4sdC5vbndyaXRlKSx0LnN5bmM9ITEpLGkmJiF0LmVycm9yZWQmJiF0LmRlc3Ryb3llZH1mdW5jdGlvbiBudShlLHQscixuLG8scyxpKXt0LndyaXRlbGVuPW4sdC53cml0ZWNiPWksdC53cml0aW5nPSEwLHQuc3luYz0hMCx0LmRlc3Ryb3llZD90Lm9ud3JpdGUobmV3IGV0KFwid3JpdGVcIikpOnI/ZS5fd3JpdGV2KG8sdC5vbndyaXRlKTplLl93cml0ZShvLHMsdC5vbndyaXRlKSx0LnN5bmM9ITF9ZnVuY3Rpb24gb3UoZSx0LHIsbil7LS10LnBlbmRpbmdjYixuKHIpLHhjKHQpLHlyKGUscil9ZnVuY3Rpb24gUkEoZSx0KXtsZXQgcj1lLl93cml0YWJsZVN0YXRlLG49ci5zeW5jLG89ci53cml0ZWNiO2lmKHR5cGVvZiBvIT1cImZ1bmN0aW9uXCIpe3lyKGUsbmV3IHp0KTtyZXR1cm59ci53cml0aW5nPSExLHIud3JpdGVjYj1udWxsLHIubGVuZ3RoLT1yLndyaXRlbGVuLHIud3JpdGVsZW49MCx0Pyh0LnN0YWNrLHIuZXJyb3JlZHx8KHIuZXJyb3JlZD10KSxlLl9yZWFkYWJsZVN0YXRlJiYhZS5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkJiYoZS5fcmVhZGFibGVTdGF0ZS5lcnJvcmVkPXQpLG4/eShvdSxlLHIsdCxvKTpvdShlLHIsdCxvKSk6KHIuYnVmZmVyZWQubGVuZ3RoPnIuYnVmZmVyZWRJbmRleCYmVGMoZSxyKSxuP3IuYWZ0ZXJXcml0ZVRpY2tJbmZvIT09bnVsbCYmci5hZnRlcldyaXRlVGlja0luZm8uY2I9PT1vP3IuYWZ0ZXJXcml0ZVRpY2tJbmZvLmNvdW50Kys6KHIuYWZ0ZXJXcml0ZVRpY2tJbmZvPXtjb3VudDoxLGNiOm8sc3RyZWFtOmUsc3RhdGU6cn0seShsQSxyLmFmdGVyV3JpdGVUaWNrSW5mbykpOmN1KGUsciwxLG8pKX1mdW5jdGlvbiBsQSh7c3RyZWFtOmUsc3RhdGU6dCxjb3VudDpyLGNiOm59KXtyZXR1cm4gdC5hZnRlcldyaXRlVGlja0luZm89bnVsbCxjdShlLHQscixuKX1mdW5jdGlvbiBjdShlLHQscixuKXtmb3IoIXQuZW5kaW5nJiYhZS5kZXN0cm95ZWQmJnQubGVuZ3RoPT09MCYmdC5uZWVkRHJhaW4mJih0Lm5lZWREcmFpbj0hMSxlLmVtaXQoXCJkcmFpblwiKSk7ci0tID4wOyl0LnBlbmRpbmdjYi0tLG4oKTt0LmRlc3Ryb3llZCYmeGModCksSWMoZSx0KX1mdW5jdGlvbiB4YyhlKXtpZihlLndyaXRpbmcpcmV0dXJuO2ZvcihsZXQgcj1lLmJ1ZmZlcmVkSW5kZXg7cjxlLmJ1ZmZlcmVkLmxlbmd0aDsrK3Ipe2xldHtjaHVuazpuLGNhbGxiYWNrOm99PWUuYnVmZmVyZWRbcl0scz1lLm9iamVjdE1vZGU/MTpuLmxlbmd0aDtlLmxlbmd0aC09cyxvKG5ldyBldChcIndyaXRlXCIpKX1sZXQgdD1lW2JyXS5zcGxpY2UoMCk7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXShuZXcgZXQoXCJlbmRcIikpO3pvKGUpfWZ1bmN0aW9uIFRjKGUsdCl7aWYodC5jb3JrZWR8fHQuYnVmZmVyUHJvY2Vzc2luZ3x8dC5kZXN0cm95ZWR8fCF0LmNvbnN0cnVjdGVkKXJldHVybjtsZXR7YnVmZmVyZWQ6cixidWZmZXJlZEluZGV4Om4sb2JqZWN0TW9kZTpvfT10LHM9ci5sZW5ndGgtbjtpZighcylyZXR1cm47bGV0IGk9bjtpZih0LmJ1ZmZlclByb2Nlc3Npbmc9ITAscz4xJiZlLl93cml0ZXYpe3QucGVuZGluZ2NiLT1zLTE7bGV0IGM9dC5hbGxOb29wP05jOlI9Pntmb3IobGV0IGw9aTtsPHIubGVuZ3RoOysrbClyW2xdLmNhbGxiYWNrKFIpfSxhPXQuYWxsTm9vcCYmaT09PTA/cjpyLnNsaWNlKGkpO2EuYWxsQnVmZmVycz10LmFsbEJ1ZmZlcnMsbnUoZSx0LCEwLHQubGVuZ3RoLGEsXCJcIixjKSx6byh0KX1lbHNle2Rve2xldHtjaHVuazpjLGVuY29kaW5nOmEsY2FsbGJhY2s6Un09cltpXTtyW2krK109bnVsbDtsZXQgbD1vPzE6Yy5sZW5ndGg7bnUoZSx0LCExLGwsYyxhLFIpfXdoaWxlKGk8ci5sZW5ndGgmJiF0LndyaXRpbmcpO2k9PT1yLmxlbmd0aD96byh0KTppPjI1Nj8oci5zcGxpY2UoMCxpKSx0LmJ1ZmZlcmVkSW5kZXg9MCk6dC5idWZmZXJlZEluZGV4PWl9dC5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIFNjKGUpe3JldHVybiBlLmVuZGluZyYmZS5jb25zdHJ1Y3RlZCYmZS5sZW5ndGg9PT0wJiYhZS5lcnJvcmVkJiZlLmJ1ZmZlcmVkLmxlbmd0aD09PTAmJiFlLmZpbmlzaGVkJiYhZS53cml0aW5nJiYhZS5lcnJvckVtaXR0ZWQmJiFlLmNsb3NlRW1pdHRlZH1mdW5jdGlvbiBFQShlLHQpe2xldCByPSExO2Z1bmN0aW9uIG4obyl7aWYocil7eXIoZSxvPz96dCgpKTtyZXR1cm59aWYocj0hMCx0LnBlbmRpbmdjYi0tLG8pe2xldCBzPXRbYnJdLnNwbGljZSgwKTtmb3IobGV0IGk9MDtpPHMubGVuZ3RoO2krKylzW2ldKG8pO3lyKGUsbyx0LnN5bmMpfWVsc2UgU2ModCkmJih0LnByZWZpbmlzaGVkPSEwLGUuZW1pdChcInByZWZpbmlzaFwiKSx0LnBlbmRpbmdjYisrLHkoQWMsZSx0KSl9dC5zeW5jPSEwLHQucGVuZGluZ2NiKys7dHJ5e2xldCBvPWUuX2ZpbmFsKG4pO2lmKG8hPW51bGwpe2xldCBzPW8udGhlbjt0eXBlb2Ygcz09XCJmdW5jdGlvblwiJiZzLmNhbGwobyxmdW5jdGlvbigpe3kobixudWxsKX0sZnVuY3Rpb24oaSl7eShuLGkpfSl9fWNhdGNoKG8pe24oZSx0LG8pfXQuc3luYz0hMX1mdW5jdGlvbiB1QShlLHQpeyF0LnByZWZpbmlzaGVkJiYhdC5maW5hbENhbGxlZCYmKHR5cGVvZiBlLl9maW5hbD09XCJmdW5jdGlvblwiJiYhdC5kZXN0cm95ZWQ/KHQuZmluYWxDYWxsZWQ9ITAsRUEoZSx0KSk6KHQucHJlZmluaXNoZWQ9ITAsZS5lbWl0KFwicHJlZmluaXNoXCIpKSl9ZnVuY3Rpb24gSWMoZSx0LHIpe1NjKHQpJiYodUEoZSx0KSx0LnBlbmRpbmdjYj09PTAmJlNjKHQpJiYodC5wZW5kaW5nY2IrKyxyP3koQWMsZSx0KTpBYyhlLHQpKSl9ZnVuY3Rpb24gQWMoZSx0KXt0LnBlbmRpbmdjYi0tLHQuZmluaXNoZWQ9ITA7bGV0IHI9dFticl0uc3BsaWNlKDApO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXJbbl0oKTtpZihlLmVtaXQoXCJmaW5pc2hcIiksdC5hdXRvRGVzdHJveSl7bGV0IG49ZS5fcmVhZGFibGVTdGF0ZTsoIW58fG4uYXV0b0Rlc3Ryb3kmJihuLmVuZEVtaXR0ZWR8fG4ucmVhZGFibGU9PT0hMSkpJiZlLmRlc3Ryb3koKX19ZnVuY3Rpb24gX0EoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBXcml0YWJsZVN0cmVhbX12YXIgeXIsYnIsRHIsSG0sb2UsZ2M9cCgoKT0+e3llKCk7cmMoKTtHbygpO3hlKCk7YWMoKTtxZSgpO0tvKCk7X2UoKTtTdCgpO3F0KCk7YW4oKTtObigpO1B0KCk7KHtlcnJvck9yRGVzdHJveTp5cn09cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZihqLnByb3RvdHlwZSxNLnByb3RvdHlwZSk7T2JqZWN0LnNldFByb3RvdHlwZU9mKGosTSk7YnI9U3ltYm9sKFwia09uRmluaXNoZWRcIik7eG4ucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1ZmZlcmVkLnNsaWNlKHRoaXMuYnVmZmVyZWRJbmRleCl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh4bi5wcm90b3R5cGUsXCJidWZmZXJlZFJlcXVlc3RDb3VudFwiLHtnZXQoKXtyZXR1cm4gdGhpcy5idWZmZXJlZC5sZW5ndGgtdGhpcy5idWZmZXJlZEluZGV4fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLmNhbGwodGhpcyxlKT8hMDp0aGlzIT09aj8hMTplJiZlLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgeG59fSk7ai5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3lyKHRoaXMsbmV3IERvKX07ai5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBpdSh0aGlzLGUsdCxyKT09PSEwfTtqLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK307ai5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtlLmNvcmtlZCYmKGUuY29ya2VkLS0sZS53cml0aW5nfHxUYyh0aGlzLGUpKX07ai5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiJiYodD10LnRvTG93ZXJDYXNlKCkpLCFfLmlzRW5jb2RpbmcodCkpdGhyb3cgbmV3IFRyKHQpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz10LHRoaXN9O2oucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQscil7aWYodGhpcy5fd3JpdGV2KXRoaXMuX3dyaXRldihbe2NodW5rOmUsZW5jb2Rpbmc6dH1dLHIpO2Vsc2UgdGhyb3cgbmV3IEx0KFwiX3dyaXRlKClcIil9O2oucHJvdG90eXBlLl93cml0ZXY9bnVsbDtqLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXRoaXMuX3dyaXRhYmxlU3RhdGU7dHlwZW9mIGU9PVwiZnVuY3Rpb25cIj8ocj1lLGU9bnVsbCx0PW51bGwpOnR5cGVvZiB0PT1cImZ1bmN0aW9uXCImJihyPXQsdD1udWxsKTtsZXQgbztpZihlIT1udWxsKXtsZXQgcz1pdSh0aGlzLGUsdCk7cyBpbnN0YW5jZW9mIEVycm9yJiYobz1zKX1yZXR1cm4gbi5jb3JrZWQmJihuLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLG98fCghbi5lcnJvcmVkJiYhbi5lbmRpbmc/KG4uZW5kaW5nPSEwLEljKHRoaXMsbiwhMCksbi5lbmRlZD0hMCk6bi5maW5pc2hlZD9vPW5ldyBtbyhcImVuZFwiKTpuLmRlc3Ryb3llZCYmKG89bmV3IGV0KFwiZW5kXCIpKSksdHlwZW9mIHI9PVwiZnVuY3Rpb25cIiYmKG98fG4uZmluaXNoZWQ/eShyLG8pOm5bYnJdLnB1c2gocikpLHRoaXN9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGoucHJvdG90eXBlLHtkZXN0cm95ZWQ6e2dldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkOiExfSxzZXQoZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0sd3JpdGFibGU6e2dldCgpe2xldCBlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuISFlJiZlLndyaXRhYmxlIT09ITEmJiFlLmRlc3Ryb3llZCYmIWUuZXJyb3JlZCYmIWUuZW5kaW5nJiYhZS5lbmRlZH0sc2V0KGUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLndyaXRhYmxlPSEhZSl9fSx3cml0YWJsZUZpbmlzaGVkOntnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkOiExfX0sd3JpdGFibGVPYmplY3RNb2RlOntnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLm9iamVjdE1vZGU6ITF9fSx3cml0YWJsZUJ1ZmZlcjp7Z2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSx3cml0YWJsZUVuZGVkOntnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZzohMX19LHdyaXRhYmxlTmVlZERyYWluOntnZXQoKXtsZXQgZT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiBlPyFlLmRlc3Ryb3llZCYmIWUuZW5kaW5nJiZlLm5lZWREcmFpbjohMX19LHdyaXRhYmxlSGlnaFdhdGVyTWFyazp7Z2V0KCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319LHdyaXRhYmxlQ29ya2VkOntnZXQoKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZDowfX0sd3JpdGFibGVMZW5ndGg6e2dldCgpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19fSk7RHI9cGUuZGVzdHJveTtqLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKGUsdCl7bGV0IHI9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4hci5kZXN0cm95ZWQmJihyLmJ1ZmZlcmVkSW5kZXg8ci5idWZmZXJlZC5sZW5ndGh8fHJbYnJdLmxlbmd0aCkmJnkoeGMsciksRHIuY2FsbCh0aGlzLGUsdCksdGhpc307ai5wcm90b3R5cGUuX3VuZGVzdHJveT1wZS51bmRlc3Ryb3k7ai5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0KGUpfTtqLnByb3RvdHlwZVtWZS5jYXB0dXJlUmVqZWN0aW9uU3ltYm9sXT1mdW5jdGlvbihlKXt0aGlzLmRlc3Ryb3koZSl9O2ouV3JpdGFibGVTdGF0ZT14bjtIbT1qLmZyb21XZWI9ZnVuY3Rpb24oZSx0PXt9KXtpZighX0EoZSkpdGhyb3cgbmV3IEgoXCJ3cml0YWJsZVN0cmVhbVwiLFwiV3JpdGFibGVTdHJlYW1cIixlKTtCZSh0LFwib3B0aW9uc1wiKTtsZXR7aGlnaFdhdGVyTWFyazpyLGRlY29kZVN0cmluZ3M6bj0hMCxvYmplY3RNb2RlOm89ITEsc2lnbmFsOnN9PXQ7WmUobyxcIm9wdGlvbnMub2JqZWN0TW9kZVwiKSxaZShuLFwib3B0aW9ucy5kZWNvZGVTdHJpbmdzXCIpO2xldCBpPWUuZ2V0V3JpdGVyKCksYz0hMSxhPW5ldyBqKHtoaWdoV2F0ZXJNYXJrOnIsb2JqZWN0TW9kZTpvLGRlY29kZVN0cmluZ3M6bixzaWduYWw6cyx3cml0ZXYoUixsKXtmdW5jdGlvbiBFKHUpe3U9dS5maWx0ZXIoZj0+Zik7dHJ5e2wodS5sZW5ndGg9PT0wP3ZvaWQgMDp1KX1jYXRjaChmKXt5KCgpPT5Eci5jYWxsKGEsZikpfX1pLnJlYWR5LnRoZW4oKCk9PlByb21pc2UuQWxsKFIubWFwKHU9Pmkud3JpdGUodS5jaHVuaykpKS50aGVuKEUsRSksRSl9LHdyaXRlKFIsbCxFKXt0eXBlb2YgUj09XCJzdHJpbmdcIiYmbiYmIW8mJihSPV8uZnJvbShSLGwpLFI9bmV3IFVpbnQ4QXJyYXkoUi5idWZmZXIsUi5ieXRlT2Zmc2V0LFIuYnl0ZUxlbmd0aCkpO2Z1bmN0aW9uIHUoZil7dHJ5e0UoZil9Y2F0Y2goQSl7RHIodGhpcyxkdXBsZXgsQSl9fWkucmVhZHkudGhlbigoKT0+aS53cml0ZShSKS50aGVuKHUsdSksdSl9LGRlc3Ryb3koUixsKXtmdW5jdGlvbiBFKCl7dHJ5e2woUil9Y2F0Y2godSl7eSgoKT0+e3Rocm93IHV9KX19aWYoIWMpe1IhPW51bGw/aS5hYm9ydChSKS50aGVuKEUsRSk6aS5jbG9zZSgpLnRoZW4oRSxFKTtyZXR1cm59RSgpfSxmaW5hbChSKXtmdW5jdGlvbiBsKEUpe3RyeXtSKEUpfWNhdGNoKHUpe3koKCk9PkRyLmNhbGwoYSx1KSl9fWN8fGkuY2xvc2UoKS50aGVuKGwsbCl9fSk7cmV0dXJuIGkuY2xvc2VkLnRoZW4oKCk9PntjPSEwLGZuKGEpfHxEci5jYWxsKGEsbmV3IHB0KX0sUj0+e2M9ITAsRHIuY2FsbChhLFIpfSksYX07ai5Xcml0YWJsZT1qO29lPWp9KTtmdW5jdGlvbiBQZShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBQZSkpcmV0dXJuIG5ldyBQZShlKTtnZS5jYWxsKHRoaXMsZSksb2UuY2FsbCh0aGlzLGUpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxlJiYoZS5yZWFkYWJsZT09PSExJiYodGhpcy5yZWFkYWJsZT0hMSksZS53cml0YWJsZT09PSExJiYodGhpcy53cml0YWJsZT0hMSksZS5hbGxvd0hhbGZPcGVuPT09ITEmJih0aGlzLmFsbG93SGFsZk9wZW49ITEpKX1mdW5jdGlvbiBmQShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtfWZ1bmN0aW9uIHBBKGUpe3JldHVybiBlIGluc3RhbmNlb2YgV3JpdGFibGVTdHJlYW19ZnVuY3Rpb24gVG4oZSx0KXtpZihGRShlKSlyZXR1cm4gZTtpZihudChlKSlyZXR1cm4gUW8oe3JlYWRhYmxlOmV9KTtpZihfbihlKSlyZXR1cm4gUW8oe3dyaXRhYmxlOmV9KTtpZihvdChlKSlyZXR1cm4gUW8oe3dyaXRhYmxlOiExLHJlYWRhYmxlOiExfSk7aWYodHlwZW9mIGU9PVwiZnVuY3Rpb25cIil7bGV0e3ZhbHVlOm4sd3JpdGU6byxmaW5hbDpzLGRlc3Ryb3k6aX09ZEEoZSk7aWYoS2UobikpcmV0dXJuIGhuKGVyLG4se29iamVjdE1vZGU6ITAsd3JpdGU6byxmaW5hbDpzLGRlc3Ryb3k6aX0pO2xldCBjPW4/LnRoZW47aWYodHlwZW9mIGM9PVwiZnVuY3Rpb25cIil7bGV0IGEsUj1jLmNhbGwobixsPT57aWYobCE9bnVsbCl0aHJvdyBuZXcgZHQoXCJudWxseVwiLFwiYm9keVwiLGwpfSxsPT57R2UoYSxsKX0pO3JldHVybiBhPW5ldyBlcih7b2JqZWN0TW9kZTohMCxyZWFkYWJsZTohMSx3cml0ZTpvLGZpbmFsKGwpe3MoYXN5bmMoKT0+e3RyeXthd2FpdCBSLHkobCxudWxsKX1jYXRjaChFKXt5KGwsRSl9fSl9LGRlc3Ryb3k6aX0pfXRocm93IG5ldyBkdChcIkl0ZXJhYmxlLCBBc3luY0l0ZXJhYmxlIG9yIEFzeW5jRnVuY3Rpb25cIix0LG4pfWlmKEdFKGUpKXJldHVybiBUbihlLmFycmF5QnVmZmVyKCkpO2lmKEtlKGUpKXJldHVybiBobihlcixlLHtvYmplY3RNb2RlOiEwLHdyaXRhYmxlOiExfSk7aWYodHlwZW9mIGU/LndyaXRhYmxlPT1cIm9iamVjdFwifHx0eXBlb2YgZT8ucmVhZGFibGU9PVwib2JqZWN0XCIpe2xldCBuPWU/LnJlYWRhYmxlP250KGU/LnJlYWRhYmxlKT9lPy5yZWFkYWJsZTpUbihlLnJlYWRhYmxlKTp2b2lkIDAsbz1lPy53cml0YWJsZT9fbihlPy53cml0YWJsZSk/ZT8ud3JpdGFibGU6VG4oZS53cml0YWJsZSk6dm9pZCAwO3JldHVybiBRbyh7cmVhZGFibGU6bix3cml0YWJsZTpvfSl9bGV0IHI9ZT8udGhlbjtpZih0eXBlb2Ygcj09XCJmdW5jdGlvblwiKXtsZXQgbjtyZXR1cm4gci5jYWxsKGUsbz0+e28hPW51bGwmJm4ucHVzaChvKSxuLnB1c2gobnVsbCl9LG89PntHZShuLG8pfSksbj1uZXcgZXIoe29iamVjdE1vZGU6ITAsd3JpdGFibGU6ITEscmVhZCgpe319KX10aHJvdyBuZXcgSCh0LFtcIkJsb2JcIixcIlJlYWRhYmxlU3RyZWFtXCIsXCJXcml0YWJsZVN0cmVhbVwiLFwiU3RyZWFtXCIsXCJJdGVyYWJsZVwiLFwiQXN5bmNJdGVyYWJsZVwiLFwiRnVuY3Rpb25cIixcInsgcmVhZGFibGUsIHdyaXRhYmxlIH0gcGFpclwiLFwiUHJvbWlzZVwiXSxlKX1mdW5jdGlvbiBkQShlKXtsZXR7cHJvbWlzZTp0LHJlc29sdmU6cn09UXMoKSxuPW5ldyBBYm9ydENvbnRyb2xsZXIsbz1uLnNpZ25hbDtyZXR1cm57dmFsdWU6ZShhc3luYyBmdW5jdGlvbiooKXtmb3IoOzspe2xldCBpPXQ7dD1udWxsO2xldHtjaHVuazpjLGRvbmU6YSxjYjpSfT1hd2FpdCBpO2lmKHkoUiksYSlyZXR1cm47aWYoby5hYm9ydGVkKXRocm93IG5ldyBuZTsoe3Byb21pc2U6dCxyZXNvbHZlOnJ9PVFzKCkpLHlpZWxkIGN9fSgpLHtzaWduYWw6b30pLHdyaXRlKGksYyxhKXtsZXQgUj1yO3I9bnVsbCxSKHtjaHVuazppLGRvbmU6ITEsY2I6YX0pfSxmaW5hbChpKXtsZXQgYz1yO3I9bnVsbCxjKHtkb25lOiEwLGNiOml9KX0sZGVzdHJveShpLGMpe24uYWJvcnQoKSxjKGkpfX19ZnVuY3Rpb24gUW8oZSl7bGV0IHQ9ZS5yZWFkYWJsZSYmdHlwZW9mIGUucmVhZGFibGUucmVhZCE9XCJmdW5jdGlvblwiP2dlLndyYXAoZS5yZWFkYWJsZSk6ZS5yZWFkYWJsZSxyPWUud3JpdGFibGUsbj0hIXBuKHQpLG89ISFkbihyKSxzLGksYyxhLFI7ZnVuY3Rpb24gbChFKXtsZXQgdT1hO2E9bnVsbCx1P3UoRSk6RT9SLmRlc3Ryb3koRSk6IW4mJiFvJiZSLmRlc3Ryb3koKX1yZXR1cm4gUj1uZXcgZXIoe3JlYWRhYmxlT2JqZWN0TW9kZTohIXQ/LnJlYWRhYmxlT2JqZWN0TW9kZSx3cml0YWJsZU9iamVjdE1vZGU6ISFyPy53cml0YWJsZU9iamVjdE1vZGUscmVhZGFibGU6bix3cml0YWJsZTpvfSksbyYmKEllKHIsRT0+e289ITEsRSYmR2UodCxFKSxsKEUpfSksUi5fd3JpdGU9ZnVuY3Rpb24oRSx1LGYpe3Iud3JpdGUoRSx1KT9mKCk6cz1mfSxSLl9maW5hbD1mdW5jdGlvbihFKXtyLmVuZCgpLGk9RX0sci5vbihcImRyYWluXCIsZnVuY3Rpb24oKXtpZihzKXtsZXQgRT1zO3M9bnVsbCxFKCl9fSksci5vbihcImZpbmlzaFwiLGZ1bmN0aW9uKCl7aWYoaSl7bGV0IEU9aTtpPW51bGwsRSgpfX0pKSxuJiYoSWUodCxFPT57bj0hMSxFJiZHZSh0LEUpLGwoRSl9KSx0Lm9uKFwicmVhZGFibGVcIixmdW5jdGlvbigpe2lmKGMpe2xldCBFPWM7Yz1udWxsLEUoKX19KSx0Lm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtSLnB1c2gobnVsbCl9KSxSLl9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtsZXQgRT10LnJlYWQoKTtpZihFPT09bnVsbCl7Yz1SLl9yZWFkO3JldHVybn1pZighUi5wdXNoKEUpKXJldHVybn19KSxSLl9kZXN0cm95PWZ1bmN0aW9uKEUsdSl7IUUmJmEhPT1udWxsJiYoRT1uZXcgbmUpLGM9bnVsbCxzPW51bGwsaT1udWxsLGE9PT1udWxsP3UoRSk6KGE9dSxHZShyLEUpLEdlKHQsRSkpfSxSfWZ1bmN0aW9uIGhBKGUpe3JldHVybiBUbihlLFwiYm9keVwiKX12YXIgdEQsZXIsZGUsSW49cCgoKT0+e0R0KCk7cXQoKTtIRSgpO19lKCk7UHQoKTtTdCgpO2NjKCk7bXIoKTtObigpO2djKCk7eWUoKTt4ZSgpO09iamVjdC5zZXRQcm90b3R5cGVPZihQZS5wcm90b3R5cGUsZ2UucHJvdG90eXBlKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoUGUsZ2UpO2ZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyhvZS5wcm90b3R5cGUpKVBlLnByb3RvdHlwZVtlXXx8KFBlLnByb3RvdHlwZVtlXT1vZS5wcm90b3R5cGVbZV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBlLnByb3RvdHlwZSx7d3JpdGFibGU6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvZS5wcm90b3R5cGUsXCJ3cml0YWJsZVwiKSx3cml0YWJsZUhpZ2hXYXRlck1hcms6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvZS5wcm90b3R5cGUsXCJ3cml0YWJsZUhpZ2hXYXRlck1hcmtcIiksd3JpdGFibGVPYmplY3RNb2RlOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2UucHJvdG90eXBlLFwid3JpdGFibGVPYmplY3RNb2RlXCIpLHdyaXRhYmxlQnVmZmVyOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2UucHJvdG90eXBlLFwid3JpdGFibGVCdWZmZXJcIiksd3JpdGFibGVMZW5ndGg6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvZS5wcm90b3R5cGUsXCJ3cml0YWJsZUxlbmd0aFwiKSx3cml0YWJsZUZpbmlzaGVkOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2UucHJvdG90eXBlLFwid3JpdGFibGVGaW5pc2hlZFwiKSx3cml0YWJsZUNvcmtlZDpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9lLnByb3RvdHlwZSxcIndyaXRhYmxlQ29ya2VkXCIpLHdyaXRhYmxlRW5kZWQ6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvZS5wcm90b3R5cGUsXCJ3cml0YWJsZUVuZGVkXCIpLHdyaXRhYmxlTmVlZERyYWluOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2UucHJvdG90eXBlLFwid3JpdGFibGVOZWVkRHJhaW5cIiksZGVzdHJveWVkOntnZXQoKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZT09PXZvaWQgMHx8dGhpcy5fd3JpdGFibGVTdGF0ZT09PXZvaWQgMD8hMTp0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldChlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19fSk7dEQ9UGUuZnJvbVdlYj1mdW5jdGlvbihlLHQpe0JlKGUsXCJwYWlyXCIpO2xldHtyZWFkYWJsZTpyLHdyaXRhYmxlOm59PWU7aWYoIWZBKHIpKXRocm93IG5ldyBIKFwicGFpci5yZWFkYWJsZVwiLFwiUmVhZGFibGVTdHJlYW1cIixyKTtpZighcEEobikpdGhyb3cgbmV3IEgoXCJwYWlyLndyaXRhYmxlXCIsXCJXcml0YWJsZVN0cmVhbVwiLG4pO0JlKHQsXCJvcHRpb25zXCIpO2xldHthbGxvd0hhbGZPcGVuOm89ITEsb2JqZWN0TW9kZTpzPSExLGVuY29kaW5nOmksZGVjb2RlU3RyaW5nczpjPSEwLGhpZ2hXYXRlck1hcms6YSxzaWduYWw6Un09dDtpZihaZShzLFwib3B0aW9ucy5vYmplY3RNb2RlXCIpLGkhPT12b2lkIDAmJiFfLmlzRW5jb2RpbmcoaSkpdGhyb3cgbmV3IHVlKGksXCJvcHRpb25zLmVuY29kaW5nXCIpO2xldCBsPW4uZ2V0V3JpdGVyKCksRT1yLmdldFJlYWRlcigpLHU9ITEsZj0hMSxBPW5ldyBQZSh7YWxsb3dIYWxmT3BlbjpvLGhpZ2hXYXRlck1hcms6YSxvYmplY3RNb2RlOnMsZW5jb2Rpbmc6aSxkZWNvZGVTdHJpbmdzOmMsc2lnbmFsOlIsd3JpdGV2KFMsQil7ZnVuY3Rpb24gZyhoKXtoPWguZmlsdGVyKE89Pk8pO3RyeXtCKGgubGVuZ3RoPT09MD92b2lkIDA6aCl9Y2F0Y2goTyl7eSgoKT0+ZGVzdHJveShBLE8pKX19bC5yZWFkeS50aGVuKCgpPT5Qcm9taXNlLkFsbChTLm1hcChoPT5sLndyaXRlKGguY2h1bmspKSkudGhlbihnLGcpLGcpfSx3cml0ZShTLEIsZyl7dHlwZW9mIFM9PVwic3RyaW5nXCImJmMmJiFzJiYoUz1fLmZyb20oUyxCKSxTPW5ldyBVaW50OEFycmF5KFMuYnVmZmVyLFMuYnl0ZU9mZnNldCxTLmJ5dGVMZW5ndGgpKTtmdW5jdGlvbiBoKE8pe3RyeXtnKE8pfWNhdGNoKGQpe2Rlc3Ryb3koQSxkKX19bC5yZWFkeS50aGVuKCgpPT5sLndyaXRlKFMpLnRoZW4oaCxoKSxoKX0sZmluYWwoUyl7ZnVuY3Rpb24gQihnKXt0cnl7UyhnKX1jYXRjaChoKXt5KCgpPT5kZXN0cm95KEEsaCkpfX11fHxsLmNsb3NlKCkudGhlbihCLEIpfSxyZWFkKCl7RS5yZWFkKCkudGhlbihTPT57Uy5kb25lP0EucHVzaChudWxsKTpBLnB1c2goUy52YWx1ZSl9LFM9PmRlc3Ryb3koQSxTKSl9LGRlc3Ryb3koUyxCKXtmdW5jdGlvbiBnKCl7dHJ5e0IoUyl9Y2F0Y2goZCl7eSgoKT0+e3Rocm93IGR9KX19YXN5bmMgZnVuY3Rpb24gaCgpe3V8fGF3YWl0IGwuYWJvcnQoUyl9YXN5bmMgZnVuY3Rpb24gTygpe2Z8fGF3YWl0IEUuY2FuY2VsKFMpfWlmKCF1fHwhZil7UHJvbWlzZS5BbGwoW2goKSxPKCldKS50aGVuKGcsZyk7cmV0dXJufWcoKX19KTtyZXR1cm4gbC5jbG9zZWQudGhlbigoKT0+e3U9ITAsZm4oQSl8fGRlc3Ryb3koQSxuZXcgcHQpfSxTPT57dT0hMCxmPSEwLGRlc3Ryb3koQSxTKX0pLEUuY2xvc2VkLnRoZW4oKCk9PntmPSEwLEhvKEEpfHxBLnB1c2gobnVsbCl9LFM9Pnt1PSEwLGY9ITAsZGVzdHJveShBLFMpfSksQX0sZXI9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0Py5yZWFkYWJsZT09PSExJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkYWJsZT0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMCksdD8ud3JpdGFibGU9PT0hMSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUud3JpdGFibGU9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITAsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMCx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSEwKX19O1BlLmZyb209aEE7UGUuZHVwbGV4aWZ5PVRuO2RlPVBlfSk7ZnVuY3Rpb24gQXQoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgQXQpKXJldHVybiBuZXcgQXQoZSk7ZGUuY2FsbCh0aGlzLGUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSx0aGlzW0NyXT1udWxsLGUmJih0eXBlb2YgZS50cmFuc2Zvcm09PVwiZnVuY3Rpb25cIiYmKHRoaXMuX3RyYW5zZm9ybT1lLnRyYW5zZm9ybSksdHlwZW9mIGUuZmx1c2g9PVwiZnVuY3Rpb25cIiYmKHRoaXMuX2ZsdXNoPWUuZmx1c2gpKSx0aGlzLm9uKFwicHJlZmluaXNoXCIsT0EpfWZ1bmN0aW9uIG1jKGUpe2xldCB0PSExO2lmKHR5cGVvZiB0aGlzLl9mbHVzaD09XCJmdW5jdGlvblwiJiYhdGhpcy5kZXN0cm95ZWQpe2xldCByPXRoaXMuX2ZsdXNoKChuLG8pPT57aWYodD0hMCxuKXtlP2Uobik6dGhpcy5kZXN0cm95KG4pO3JldHVybn1vIT1udWxsJiZ0aGlzLnB1c2gobyksdGhpcy5wdXNoKG51bGwpLGUmJmUoKX0pO2lmKHIhPW51bGwpdHJ5e2xldCBuPXIudGhlbjt0eXBlb2Ygbj09XCJmdW5jdGlvblwiJiZuLmNhbGwocixvPT57dHx8KG8hPW51bGwmJnRoaXMucHVzaChvKSx0aGlzLnB1c2gobnVsbCksZSYmeShlKSl9LG89PntlP3koZSxvKTp5KCgpPT50aGlzLmRlc3Ryb3kobykpfSl9Y2F0Y2gobil7eSgoKT0+dGhpcy5kZXN0cm95KG4pKX19ZWxzZSB0aGlzLnB1c2gobnVsbCksZSYmZSgpfWZ1bmN0aW9uIE9BKCl7dGhpcy5fZmluYWwhPT1tYyYmbWMuY2FsbCh0aGlzKX12YXIgQ3IsdHIsRGM9cCgoKT0+e19lKCk7U3QoKTtJbigpO09iamVjdC5zZXRQcm90b3R5cGVPZihBdC5wcm90b3R5cGUsZGUucHJvdG90eXBlKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoQXQsZGUpO0NyPVN5bWJvbChcImtDYWxsYmFja1wiKTtBdC5wcm90b3R5cGUuX2ZpbmFsPW1jO0F0LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyKXt0aHJvdyBuZXcgTHQoXCJfdHJhbnNmb3JtKClcIil9O0F0LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXRoaXMuX3JlYWRhYmxlU3RhdGUsbz10aGlzLl93cml0YWJsZVN0YXRlLHM9bi5sZW5ndGgsaT0hMSxjPXRoaXMuX3RyYW5zZm9ybShlLHQsKGEsUik9PntpZihpPSEwLGEpe3IoYSk7cmV0dXJufVIhPW51bGwmJnRoaXMucHVzaChSKSxvLmVuZGVkfHxzPT09bi5sZW5ndGh8fG4ubGVuZ3RoPG4uaGlnaFdhdGVyTWFya3x8bi5sZW5ndGg9PT0wP3IoKTp0aGlzW0NyXT1yfSk7aWYoYyE9PXZvaWQgMCYmYyE9bnVsbCl0cnl7bGV0IGE9Yy50aGVuO3R5cGVvZiBhPT1cImZ1bmN0aW9uXCImJmEuY2FsbChjLFI9PntpfHwoUiE9bnVsbCYmdGhpcy5wdXNoKFIpLG8uZW5kZWR8fHM9PT1uLmxlbmd0aHx8bi5sZW5ndGg8bi5oaWdoV2F0ZXJNYXJrfHxuLmxlbmd0aD09PTA/eShyKTp0aGlzW0NyXT1yKX0sUj0+e3kocixSKX0pfWNhdGNoKGEpe3kocixhKX19O0F0LnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbigpe2lmKHRoaXNbQ3JdKXtsZXQgZT10aGlzW0NyXTt0aGlzW0NyXT1udWxsLGUoKX19O3RyPUF0fSk7ZnVuY3Rpb24gTHIoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgTHIpKXJldHVybiBuZXcgTHIoZSk7dHIuY2FsbCh0aGlzLGUpfXZhciBnbix5Yz1wKCgpPT57RGMoKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoTHIucHJvdG90eXBlLHRyLnByb3RvdHlwZSk7T2JqZWN0LnNldFByb3RvdHlwZU9mKExyLHRyKTtMci5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7cihudWxsLGUpfTtnbj1Mcn0pO2Z1bmN0aW9uIGF1KGUsdCxyLG4pe249cHIobik7bGV0IG89ITE7cmV0dXJuIGUub24oXCJjbG9zZVwiLCgpPT57bz0hMH0pLEllKGUse3JlYWRhYmxlOnQsd3JpdGFibGU6cn0scz0+e289IXM7bGV0IGk9ZS5fcmVhZGFibGVTdGF0ZTtzJiZzLmNvZGU9PT1cIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFXCImJnQmJmkmJmkuZW5kZWQmJiFpLmVycm9yZWQmJiFpLmVycm9yRW1pdHRlZD9lLm9uY2UoXCJlbmRcIixuKS5vbmNlKFwiZXJyb3JcIixuKTpuKHMpfSkscz0+e298fChvPSEwLHBlLmRlc3Ryb3llcihlLHMpLG4oc3x8bmV3IGV0KFwicGlwZVwiKSkpfX1mdW5jdGlvbiBTQShlKXtyZXR1cm4gRXQoZVtlLmxlbmd0aC0xXSksZS5wb3AoKX1mdW5jdGlvbiBSdShlKXtpZihLZShlKSlyZXR1cm4gZTtpZihudChlKSlyZXR1cm4gQUEoZSk7dGhyb3cgbmV3IEgoXCJ2YWxcIixbXCJSZWFkYWJsZVwiLFwiSXRlcmFibGVcIixcIkFzeW5jSXRlcmFibGVcIl0sZSl9YXN5bmMgZnVuY3Rpb24qQUEoZSl7eWllbGQqZ2UucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXS5jYWxsKGUpfWFzeW5jIGZ1bmN0aW9uIGx1KGUsdCxyKXtsZXQgbixvPW51bGwscz1hPT57aWYoYSYmKG49YSksbyl7bGV0IFI9bztvPW51bGwsUigpfX0saT0oKT0+bmV3IFByb21pc2UoKGEsUik9PntuP1Iobik6bz0oKT0+e24/UihuKTphKCl9fSk7dC5vbihcImRyYWluXCIscyk7bGV0IGM9SWUodCx7cmVhZGFibGU6ITF9LHMpO3RyeXt0LndyaXRhYmxlTmVlZERyYWluJiZhd2FpdCBpKCk7Zm9yIGF3YWl0KGxldCBhIG9mIGUpdC53cml0ZShhKXx8YXdhaXQgaSgpO3QuZW5kKCksYXdhaXQgaSgpLHIoKX1jYXRjaChhKXtyKG4hPT1hP3dvKG4sYSk6YSl9ZmluYWxseXtjKCksdC5vZmYoXCJkcmFpblwiLHMpfX1mdW5jdGlvbiB3ciguLi5lKXtsZXQgdD1wcihTQShlKSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZVswXSkmJmUubGVuZ3RoPT09MSYmKGU9ZVswXSksYmMoZSx0KX1mdW5jdGlvbiBiYyhlLHQscil7aWYoZS5sZW5ndGg8Mil0aHJvdyBuZXcgTnIoXCJzdHJlYW1zXCIpO2xldCBuPW5ldyBBYm9ydENvbnRyb2xsZXIsbz1uLnNpZ25hbCxzPXI/LnNpZ25hbDtHdChzLFwib3B0aW9ucy5zaWduYWxcIik7ZnVuY3Rpb24gaSgpe3UobmV3IG5lKX1zPy5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIixpKTtsZXQgYyxhLFI9W10sbD0wO2Z1bmN0aW9uIEUoQSl7dShBLC0tbD09PTApfWZ1bmN0aW9uIHUoQSxTKXtpZihBJiYoIWN8fGMuY29kZT09PVwiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0VcIikmJihjPUEpLCEoIWMmJiFTKSl7Zm9yKDtSLmxlbmd0aDspUi5zaGlmdCgpKGMpO3M/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLGkpLG4uYWJvcnQoKSxTJiZ0KGMsYSl9fWxldCBmO2ZvcihsZXQgQT0wO0E8ZS5sZW5ndGg7QSsrKXtsZXQgUz1lW0FdLEI9QTxlLmxlbmd0aC0xLGc9QT4wO2lmKG90KFMpJiYobCsrLFIucHVzaChhdShTLEIsZyxFKSkpLEE9PT0wKWlmKHR5cGVvZiBTPT1cImZ1bmN0aW9uXCIpe2lmKGY9Uyh7c2lnbmFsOm99KSwhS2UoZikpdGhyb3cgbmV3IGR0KFwiSXRlcmFibGUsIEFzeW5jSXRlcmFibGUgb3IgU3RyZWFtXCIsXCJzb3VyY2VcIixmKX1lbHNlIEtlKFMpfHxudChTKT9mPVM6Zj1kZS5mcm9tKFMpO2Vsc2UgaWYodHlwZW9mIFM9PVwiZnVuY3Rpb25cIilpZihmPVJ1KGYpLGY9UyhmLHtzaWduYWw6b30pLEIpe2lmKCFLZShmLCEwKSl0aHJvdyBuZXcgZHQoXCJBc3luY0l0ZXJhYmxlXCIsYHRyYW5zZm9ybVske0EtMX1dYCxmKX1lbHNle2xldCBoPW5ldyBnbih7b2JqZWN0TW9kZTohMH0pLE89Zj8udGhlbjtpZih0eXBlb2YgTz09XCJmdW5jdGlvblwiKU8uY2FsbChmLGQ9PnthPWQsaC5lbmQoZCl9LGQ9PntoLmRlc3Ryb3koZCl9KTtlbHNlIGlmKEtlKGYsITApKWwrKyxsdShmLGgsRSk7ZWxzZSB0aHJvdyBuZXcgZHQoXCJBc3luY0l0ZXJhYmxlIG9yIFByb21pc2VcIixcImRlc3RpbmF0aW9uXCIsZik7Zj1oLGwrKyxSLnB1c2goYXUoZiwhMSwhMCxFKSl9ZWxzZSBvdChTKT8obnQoZik/KGYucGlwZShTKSwoUz09PXN0LnN0ZG91dHx8Uz09PXN0LnN0ZGVycikmJmYub24oXCJlbmRcIiwoKT0+Uy5lbmQoKSkpOihmPVJ1KGYpLGwrKyxsdShmLFMsRSkpLGY9Uyk6Zj1kZS5mcm9tKFMpfXJldHVybihvPy5hYm9ydGVkfHxzPy5hYm9ydGVkKSYmeShpKSxmfXZhciBxbz1wKCgpPT57UHQoKTtEdCgpOyRvKCk7eWUoKTtfZSgpO1N0KCk7cXQoKTtJbigpO21yKCk7Tm4oKTt5YygpfSk7ZnVuY3Rpb24gTkEoLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXRocm93IG5ldyBOcihcInN0cmVhbXNcIik7aWYoZS5sZW5ndGg9PT0xKXJldHVybiBkZS5mcm9tKGVbMF0pO2xldCB0PVsuLi5lXTtpZih0eXBlb2YgZVswXT09XCJmdW5jdGlvblwiJiYoZVswXT1kZS5mcm9tKGVbMF0pKSx0eXBlb2YgZVtlLmxlbmd0aC0xXT09XCJmdW5jdGlvblwiKXtsZXQgdT1lLmxlbmd0aC0xO2VbdV09ZGUuZnJvbShlW3VdKX1mb3IobGV0IHU9MDt1PGUubGVuZ3RoOysrdSlpZighIW90KGVbdV0pKXtpZih1PGUubGVuZ3RoLTEmJiFwbihlW3VdKSl0aHJvdyBuZXcgdWUoYHN0cmVhbXNbJHt1fV1gLHRbdV0sXCJtdXN0IGJlIHJlYWRhYmxlXCIpO2lmKHU+MCYmIWRuKGVbdV0pKXRocm93IG5ldyB1ZShgc3RyZWFtc1ske3V9XWAsdFt1XSxcIm11c3QgYmUgd3JpdGFibGVcIil9bGV0IHIsbixvLHMsaTtmdW5jdGlvbiBjKHUpe2xldCBmPXM7cz1udWxsLGY/Zih1KTp1P2kuZGVzdHJveSh1KTohRSYmIWwmJmkuZGVzdHJveSgpfWxldCBhPWVbMF0sUj13cihlLGMpLGw9ISFkbihhKSxFPSEhcG4oUik7cmV0dXJuIGk9bmV3IENjKHt3cml0YWJsZU9iamVjdE1vZGU6ISFhPy53cml0YWJsZU9iamVjdE1vZGUscmVhZGFibGVPYmplY3RNb2RlOiEhUj8ud3JpdGFibGVPYmplY3RNb2RlLHdyaXRhYmxlOmwscmVhZGFibGU6RX0pLGwmJihpLl93cml0ZT1mdW5jdGlvbih1LGYsQSl7YS53cml0ZSh1LGYpP0EoKTpyPUF9LGkuX2ZpbmFsPWZ1bmN0aW9uKHUpe2EuZW5kKCksbj11fSxhLm9uKFwiZHJhaW5cIixmdW5jdGlvbigpe2lmKHIpe2xldCB1PXI7cj1udWxsLHUoKX19KSxSLm9uKFwiZmluaXNoXCIsZnVuY3Rpb24oKXtpZihuKXtsZXQgdT1uO249bnVsbCx1KCl9fSkpLEUmJihSLm9uKFwicmVhZGFibGVcIixmdW5jdGlvbigpe2lmKG8pe2xldCB1PW87bz1udWxsLHUoKX19KSxSLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtpLnB1c2gobnVsbCl9KSxpLl9yZWFkPWZ1bmN0aW9uKCl7Zm9yKDs7KXtsZXQgdT1SLnJlYWQoKTtpZih1PT09bnVsbCl7bz1pLl9yZWFkO3JldHVybn1pZighaS5wdXNoKHUpKXJldHVybn19KSxpLl9kZXN0cm95PWZ1bmN0aW9uKHUsZil7IXUmJnMhPT1udWxsJiYodT1uZXcgbmUpLG89bnVsbCxyPW51bGwsbj1udWxsLHM9PT1udWxsP2YodSk6KHM9ZixHZShSLHUpKX0saX12YXIgQ2MsRXUsdXU9cCgoKT0+e3F0KCk7UHQoKTtxbygpO19lKCk7SW4oKTtDYz1jbGFzcyBleHRlbmRzIGRle2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHQ/LnJlYWRhYmxlPT09ITEmJih0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRhYmxlPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSEwKSx0Py53cml0YWJsZT09PSExJiYodGhpcy5fd3JpdGFibGVTdGF0ZS53cml0YWJsZT0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMCx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSEwLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITApfX07RXU9TkF9KTtmdW5jdGlvbiB4QSguLi5lKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntsZXQgbixvLHM9ZVtlLmxlbmd0aC0xXTtpZihzJiZ0eXBlb2Ygcz09XCJvYmplY3RcIiYmIW90KHMpJiYhS2Uocykpe2xldCBpPWUucG9wKCk7bj1pLnNpZ25hbCxvPWkuZW5kfWJjKGUsKGksYyk9PntpP3IoaSk6dChjKX0se3NpZ25hbDpuLGVuZDpvfSl9KX1mdW5jdGlvbiBUQShlLHQpe3JldHVybiBuZXcgUHJvbWlzZSgocixuKT0+e0llKGUsdCxvPT57bz9uKG8pOnIoKX0pfSl9dmFyIFpvLF91PXAoKCk9PntQdCgpO3FvKCk7bXIoKTtabz17ZmluaXNoZWQ6VEEscGlwZWxpbmU6eEF9fSk7dmFyIGZ1LHB1PXAoKCk9PntyYygpO0dvKCk7cXQoKTtQdCgpO3FlKCk7cW8oKTtEdCgpO0tvKCk7dXUoKTtJbigpO21yKCk7eWMoKTtfdSgpO05uKCk7RGMoKTtnYygpOyh7Y3VzdG9tOmZ1fT1ubyk7TS5pc0Rpc3R1cmJlZD1WRTtNLlJlYWRhYmxlPWdlO00uV3JpdGFibGU9b2U7TS5EdXBsZXg9ZGU7TS5UcmFuc2Zvcm09dHI7TS5QYXNzVGhyb3VnaD1nbjtNLnBpcGVsaW5lPXdyO00uYWRkQWJvcnRTaWduYWw9bmM7TS5maW5pc2hlZD1JZTtNLmRlc3Ryb3k9R2U7TS5jb21wb3NlPUV1O09iamVjdC5kZWZpbmVQcm9wZXJ0eShNLFwicHJvbWlzZXNcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0KCl7cmV0dXJuIFpvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cixmdSx7ZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gWm8ucGlwZWxpbmV9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEllLGZ1LHtlbnVtZXJhYmxlOiEwLGdldCgpe3JldHVybiBaby5maW5pc2hlZH19KTtNLlN0cmVhbT1NO00uX2lzVWludDhBcnJheT1rZTtNLl91aW50OEFycmF5VG9CdWZmZXI9RW59KTt2YXIgZHU9cCgoKT0+e3B1KCl9KTtmdW5jdGlvbiBodShlLHQpe2xldCByPW5ldyBvZSh7d3JpdGUobixvLHMpe2lmKCFlKXt0aGlzLmRlc3Ryb3kobmV3IEVycm9yKGBEZW5vLiR7dH0gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50YCkpO3JldHVybn1lLndyaXRlU3luYyhuIGluc3RhbmNlb2YgVWludDhBcnJheT9uOl8uZnJvbShuLG8pKSxzKCl9LGRlc3Ryb3kobixvKXtvKG4pLHRoaXMuX3VuZGVzdHJveSgpLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxuZXh0VGljaygoKT0+dGhpcy5lbWl0KFwiY2xvc2VcIikpfX0pO3JldHVybiByLmZkPWU/LnJpZD8/LTEsci5kZXN0cm95U29vbj1yLmRlc3Ryb3ksci5faXNTdGRpbz0hMCxyLm9uY2UoXCJjbG9zZVwiLCgpPT5lPy5jbG9zZSgpKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhyLHtjb2x1bW5zOntlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PkRlbm8uaXNhdHR5Py4oZT8ucmlkKT9EZW5vLmNvbnNvbGVTaXplPy4oZT8ucmlkKS5jb2x1bW5zOnZvaWQgMH0scm93czp7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OigpPT5EZW5vLmlzYXR0eT8uKGU/LnJpZCk/RGVuby5jb25zb2xlU2l6ZT8uKGU/LnJpZCkucm93czp2b2lkIDB9LGlzVFRZOntlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PkRlbm8uaXNhdHR5Py4oZT8ucmlkKX0sZ2V0V2luZG93U2l6ZTp7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsdmFsdWU6KCk9PkRlbm8uaXNhdHR5Py4oZT8ucmlkKT9PYmplY3QudmFsdWVzKERlbm8uY29uc29sZVNpemU/LihlPy5yaWQpKTp2b2lkIDB9fSksRGVuby5pc2F0dHk/LihlPy5yaWQpJiYoci5jdXJzb3JUbz1mdW5jdGlvbihuLG8scyl7cmV0dXJuIG1FKHRoaXMsbixvLHMpfSxyLm1vdmVDdXJzb3I9ZnVuY3Rpb24obixvLHMpe3JldHVybiBERSh0aGlzLG4sbyxzKX0sci5jbGVhckxpbmU9ZnVuY3Rpb24obixvKXtyZXR1cm4geUUodGhpcyxuLG8pfSxyLmNsZWFyU2NyZWVuRG93bj1mdW5jdGlvbihuKXtyZXR1cm4gYkUodGhpcyxuKX0pLHJ9dmFyIE91LFN1LGplLEF1PXAoKCk9PntXdCgpO3hlKCk7Q0UoKTtkdSgpOyRvKCk7T3U9c3Quc3RkZXJyPWh1KERlbm8uc3RkZXJyLFwic3RkZXJyXCIpLFN1PXN0LnN0ZG91dD1odShEZW5vLnN0ZG91dCxcInN0ZG91dFwiKSxqZT1zdC5zdGRpbj1uZXcgZ2Uoe2hpZ2hXYXRlck1hcms6MCxlbWl0Q2xvc2U6ITEscmVhZChlKXtsZXQgdD1fLmFsbG9jKGV8fDE2Mzg0KTtpZighRGVuby5zdGRpbil7dGhpcy5kZXN0cm95KG5ldyBFcnJvcihcIkRlbm8uc3RkaW4gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50XCIpKTtyZXR1cm59RGVuby5zdGRpbi5yZWFkKHQpLnRoZW4ocj0+e3RoaXMucHVzaChyPT09bnVsbD9udWxsOnQuc2xpY2UoMCxyKSl9LHI9Pnt0aGlzLmRlc3Ryb3kocil9KX19KTtqZS5vbihcImNsb3NlXCIsKCk9PkRlbm8uc3RkaW4/LmNsb3NlKCkpO2plLmZkPURlbm8uc3RkaW4/LnJpZD8/LTE7T2JqZWN0LmRlZmluZVByb3BlcnR5KGplLFwiaXNUVFlcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIERlbm8uaXNhdHR5Py4oRGVuby5zdGRpbi5yaWQpfX0pO2plLl9pc1Jhd01vZGU9ITE7amUuc2V0UmF3TW9kZT1lPT4oaGE/LihEZW5vLnN0ZGluPy5yaWQsZSksamUuX2lzUmF3TW9kZT1lLGplKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamUsXCJpc1Jhd1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQoKXtyZXR1cm4gamUuX2lzUmF3TW9kZX19KX0pO3ZhciBQYz17fTtyZShQYyx7QXN5bmNXcmFwOigpPT5zZSxVaWRGaWVsZHM6KCk9PndjLGFzeW5jSWRGaWVsZHM6KCk9PkpvLGFzeW5jX2hvb2tfZmllbGRzOigpPT5nQSxjb25zdGFudHM6KCk9PkxjLG5ld0FzeW5jSWQ6KCk9Pnh1LHByb3ZpZGVyVHlwZTooKT0+cnIscmVnaXN0ZXJEZXN0cm95SG9vazooKT0+SUF9KTtmdW5jdGlvbiBJQShlLHQscil7fWZ1bmN0aW9uIHh1KCl7cmV0dXJuKytKb1s5XX12YXIgTGMsZ0Esd2MsSm8scnIsTnUsc2UsVXQ9cCgoKT0+e0xjPShmPT4oZltmLmtJbml0PTBdPVwia0luaXRcIixmW2Yua0JlZm9yZT0xXT1cImtCZWZvcmVcIixmW2Yua0FmdGVyPTJdPVwia0FmdGVyXCIsZltmLmtEZXN0cm95PTNdPVwia0Rlc3Ryb3lcIixmW2Yua1Byb21pc2VSZXNvbHZlPTRdPVwia1Byb21pc2VSZXNvbHZlXCIsZltmLmtUb3RhbHM9NV09XCJrVG90YWxzXCIsZltmLmtDaGVjaz02XT1cImtDaGVja1wiLGZbZi5rRXhlY3V0aW9uQXN5bmNJZD03XT1cImtFeGVjdXRpb25Bc3luY0lkXCIsZltmLmtUcmlnZ2VyQXN5bmNJZD04XT1cImtUcmlnZ2VyQXN5bmNJZFwiLGZbZi5rQXN5bmNJZENvdW50ZXI9OV09XCJrQXN5bmNJZENvdW50ZXJcIixmW2Yua0RlZmF1bHRUcmlnZ2VyQXN5bmNJZD0xMF09XCJrRGVmYXVsdFRyaWdnZXJBc3luY0lkXCIsZltmLmtVc2VzRXhlY3V0aW9uQXN5bmNSZXNvdXJjZT0xMV09XCJrVXNlc0V4ZWN1dGlvbkFzeW5jUmVzb3VyY2VcIixmW2Yua1N0YWNrTGVuZ3RoPTEyXT1cImtTdGFja0xlbmd0aFwiLGYpKShMY3x8e30pLGdBPW5ldyBVaW50MzJBcnJheShPYmplY3Qua2V5cyhMYykubGVuZ3RoKTt3Yz0ocz0+KHNbcy5rRXhlY3V0aW9uQXN5bmNJZD0wXT1cImtFeGVjdXRpb25Bc3luY0lkXCIsc1tzLmtUcmlnZ2VyQXN5bmNJZD0xXT1cImtUcmlnZ2VyQXN5bmNJZFwiLHNbcy5rQXN5bmNJZENvdW50ZXI9Ml09XCJrQXN5bmNJZENvdW50ZXJcIixzW3Mua0RlZmF1bHRUcmlnZ2VyQXN5bmNJZD0zXT1cImtEZWZhdWx0VHJpZ2dlckFzeW5jSWRcIixzW3Mua1VpZEZpZWxkc0NvdW50PTRdPVwia1VpZEZpZWxkc0NvdW50XCIscykpKHdjfHx7fSksSm89bmV3IEZsb2F0NjRBcnJheShPYmplY3Qua2V5cyh3YykubGVuZ3RoKTtKb1syXT0xO0pvWzNdPS0xO3JyPShOPT4oTltOLk5PTkU9MF09XCJOT05FXCIsTltOLkRJUkhBTkRMRT0xXT1cIkRJUkhBTkRMRVwiLE5bTi5ETlNDSEFOTkVMPTJdPVwiRE5TQ0hBTk5FTFwiLE5bTi5FTERISVNUT0dSQU09M109XCJFTERISVNUT0dSQU1cIixOW04uRklMRUhBTkRMRT00XT1cIkZJTEVIQU5ETEVcIixOW04uRklMRUhBTkRMRUNMT1NFUkVRPTVdPVwiRklMRUhBTkRMRUNMT1NFUkVRXCIsTltOLkZJWEVEU0laRUJMT0JDT1BZPTZdPVwiRklYRURTSVpFQkxPQkNPUFlcIixOW04uRlNFVkVOVFdSQVA9N109XCJGU0VWRU5UV1JBUFwiLE5bTi5GU1JFUUNBTExCQUNLPThdPVwiRlNSRVFDQUxMQkFDS1wiLE5bTi5GU1JFUVBST01JU0U9OV09XCJGU1JFUVBST01JU0VcIixOW04uR0VUQUREUklORk9SRVFXUkFQPTEwXT1cIkdFVEFERFJJTkZPUkVRV1JBUFwiLE5bTi5HRVROQU1FSU5GT1JFUVdSQVA9MTFdPVwiR0VUTkFNRUlORk9SRVFXUkFQXCIsTltOLkhFQVBTTkFQU0hPVD0xMl09XCJIRUFQU05BUFNIT1RcIixOW04uSFRUUDJTRVNTSU9OPTEzXT1cIkhUVFAyU0VTU0lPTlwiLE5bTi5IVFRQMlNUUkVBTT0xNF09XCJIVFRQMlNUUkVBTVwiLE5bTi5IVFRQMlBJTkc9MTVdPVwiSFRUUDJQSU5HXCIsTltOLkhUVFAyU0VUVElOR1M9MTZdPVwiSFRUUDJTRVRUSU5HU1wiLE5bTi5IVFRQSU5DT01JTkdNRVNTQUdFPTE3XT1cIkhUVFBJTkNPTUlOR01FU1NBR0VcIixOW04uSFRUUENMSUVOVFJFUVVFU1Q9MThdPVwiSFRUUENMSUVOVFJFUVVFU1RcIixOW04uSlNTVFJFQU09MTldPVwiSlNTVFJFQU1cIixOW04uSlNVRFBXUkFQPTIwXT1cIkpTVURQV1JBUFwiLE5bTi5NRVNTQUdFUE9SVD0yMV09XCJNRVNTQUdFUE9SVFwiLE5bTi5QSVBFQ09OTkVDVFdSQVA9MjJdPVwiUElQRUNPTk5FQ1RXUkFQXCIsTltOLlBJUEVTRVJWRVJXUkFQPTIzXT1cIlBJUEVTRVJWRVJXUkFQXCIsTltOLlBJUEVXUkFQPTI0XT1cIlBJUEVXUkFQXCIsTltOLlBST0NFU1NXUkFQPTI1XT1cIlBST0NFU1NXUkFQXCIsTltOLlBST01JU0U9MjZdPVwiUFJPTUlTRVwiLE5bTi5RVUVSWVdSQVA9MjddPVwiUVVFUllXUkFQXCIsTltOLlNIVVRET1dOV1JBUD0yOF09XCJTSFVURE9XTldSQVBcIixOW04uU0lHTkFMV1JBUD0yOV09XCJTSUdOQUxXUkFQXCIsTltOLlNUQVRXQVRDSEVSPTMwXT1cIlNUQVRXQVRDSEVSXCIsTltOLlNUUkVBTVBJUEU9MzFdPVwiU1RSRUFNUElQRVwiLE5bTi5UQ1BDT05ORUNUV1JBUD0zMl09XCJUQ1BDT05ORUNUV1JBUFwiLE5bTi5UQ1BTRVJWRVJXUkFQPTMzXT1cIlRDUFNFUlZFUldSQVBcIixOW04uVENQV1JBUD0zNF09XCJUQ1BXUkFQXCIsTltOLlRUWVdSQVA9MzVdPVwiVFRZV1JBUFwiLE5bTi5VRFBTRU5EV1JBUD0zNl09XCJVRFBTRU5EV1JBUFwiLE5bTi5VRFBXUkFQPTM3XT1cIlVEUFdSQVBcIixOW04uU0lHSU5UV0FUQ0hET0c9MzhdPVwiU0lHSU5UV0FUQ0hET0dcIixOW04uV09SS0VSPTM5XT1cIldPUktFUlwiLE5bTi5XT1JLRVJIRUFQU05BUFNIT1Q9NDBdPVwiV09SS0VSSEVBUFNOQVBTSE9UXCIsTltOLldSSVRFV1JBUD00MV09XCJXUklURVdSQVBcIixOW04uWkxJQj00Ml09XCJaTElCXCIsTikpKHJyfHx7fSksTnU9LTEsc2U9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wcm92aWRlcj0wO3RoaXMuYXN5bmNJZD1OdTt0aGlzLnByb3ZpZGVyPXQsdGhpcy5nZXRBc3luY0lkKCl9Z2V0QXN5bmNJZCgpe3JldHVybiB0aGlzLmFzeW5jSWQ9dGhpcy5hc3luY0lkPT09TnU/eHUoKTp0aGlzLmFzeW5jSWQsdGhpcy5hc3luY0lkfWdldFByb3ZpZGVyVHlwZSgpe3JldHVybiB0aGlzLnByb3ZpZGVyfX19KTt2YXIgVHU9e307dmFyIEl1PXAoKCk9Pnt9KTt2YXIgZ3U9cCgoKT0+e2d0KCl9KTtmdW5jdGlvbiBtbihlKXtyZXR1cm4gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmNhbGwobUEsZSl9ZnVuY3Rpb24geUEoZSl7cmV0dXJuIFJlZ0V4cC5wcm90b3R5cGUudGVzdC5jYWxsKERBLGUpfWZ1bmN0aW9uIFByKGUpe3JldHVybiBtbihlKT80OnlBKGUpPzY6MH12YXIgbXUsTXQsbUEsSixEQSxpMCxlcz1wKCgpPT57eGUoKTtfZSgpO2d1KCk7bXU9XCIoPzpbMC05XXxbMS05XVswLTldfDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNV0pXCIsTXQ9YCgke211fVsuXSl7M30ke211fWAsbUE9bmV3IFJlZ0V4cChgXiR7TXR9JGApLEo9XCIoPzpbMC05YS1mQS1GXXsxLDR9KVwiLERBPW5ldyBSZWdFeHAoYF4oKD86JHtKfTopezd9KD86JHtKfXw6KXwoPzoke0p9Oil7Nn0oPzoke010fXw6JHtKfXw6KXwoPzoke0p9Oil7NX0oPzo6JHtNdH18KDoke0p9KXsxLDJ9fDopfCg/OiR7Sn06KXs0fSg/Oig6JHtKfSl7MCwxfToke010fXwoOiR7Sn0pezEsM318Oil8KD86JHtKfTopezN9KD86KDoke0p9KXswLDJ9OiR7TXR9fCg6JHtKfSl7MSw0fXw6KXwoPzoke0p9Oil7Mn0oPzooOiR7Sn0pezAsM306JHtNdH18KDoke0p9KXsxLDV9fDopfCg/OiR7Sn06KXsxfSg/Oig6JHtKfSl7MCw0fToke010fXwoOiR7Sn0pezEsNn18Oil8KD86OigoPzo6JHtKfSl7MCw1fToke010fXwoPzo6JHtKfSl7MSw3fXw6KSkpKCVbMC05YS16QS1aLS46XXsxLH0pPyRgKTtpMD1TeW1ib2woXCJub3JtYWxpemVkQXJnc1wiKX0pO2Z1bmN0aW9uIER1KGUpe2xldCB0PVtcIlN1Y2Nlc3NmdWwgY29tcGxldGlvblwiLFwiRE5TIHNlcnZlciByZXR1cm5lZCBhbnN3ZXIgd2l0aCBubyBkYXRhXCIsXCJETlMgc2VydmVyIGNsYWltcyBxdWVyeSB3YXMgbWlzZm9ybWF0dGVkXCIsXCJETlMgc2VydmVyIHJldHVybmVkIGdlbmVyYWwgZmFpbHVyZVwiLFwiRG9tYWluIG5hbWUgbm90IGZvdW5kXCIsXCJETlMgc2VydmVyIGRvZXMgbm90IGltcGxlbWVudCByZXF1ZXN0ZWQgb3BlcmF0aW9uXCIsXCJETlMgc2VydmVyIHJlZnVzZWQgcXVlcnlcIixcIk1pc2Zvcm1hdHRlZCBETlMgcXVlcnlcIixcIk1pc2Zvcm1hdHRlZCBkb21haW4gbmFtZVwiLFwiVW5zdXBwb3J0ZWQgYWRkcmVzcyBmYW1pbHlcIixcIk1pc2Zvcm1hdHRlZCBETlMgcmVwbHlcIixcIkNvdWxkIG5vdCBjb250YWN0IEROUyBzZXJ2ZXJzXCIsXCJUaW1lb3V0IHdoaWxlIGNvbnRhY3RpbmcgRE5TIHNlcnZlcnNcIixcIkVuZCBvZiBmaWxlXCIsXCJFcnJvciByZWFkaW5nIGZpbGVcIixcIk91dCBvZiBtZW1vcnlcIixcIkNoYW5uZWwgaXMgYmVpbmcgZGVzdHJveWVkXCIsXCJNaXNmb3JtYXR0ZWQgc3RyaW5nXCIsXCJJbGxlZ2FsIGZsYWdzIHNwZWNpZmllZFwiLFwiR2l2ZW4gaG9zdG5hbWUgaXMgbm90IG51bWVyaWNcIixcIklsbGVnYWwgaGludHMgZmxhZ3Mgc3BlY2lmaWVkXCIsXCJjLWFyZXMgbGlicmFyeSBpbml0aWFsaXphdGlvbiBub3QgeWV0IHBlcmZvcm1lZFwiLFwiRXJyb3IgbG9hZGluZyBpcGhscGFwaS5kbGxcIixcIkNvdWxkIG5vdCBmaW5kIEdldE5ldHdvcmtQYXJhbXMgZnVuY3Rpb25cIixcIkROUyBxdWVyeSBjYW5jZWxsZWRcIl07cmV0dXJuIGU+PTAmJmU8dC5sZW5ndGg/dFtlXTpcInVua25vd25cIn12YXIgeXU9cCgoKT0+e30pO3ZhciBCYz17fTtyZShCYyx7Q2hhbm5lbFdyYXA6KCk9PmtjLEdldEFkZHJJbmZvUmVxV3JhcDooKT0+VWMsUXVlcnlSZXFXcmFwOigpPT5NYyxnZXRhZGRyaW5mbzooKT0+YkEsc3RyZXJyb3I6KCk9PndBfSk7ZnVuY3Rpb24gYkEoZSx0LHIsbixvKXtsZXQgcz1bXSxpPVtdO3JldHVybihyPT09MHx8cj09PTQpJiZpLnB1c2goXCJBXCIpLChyPT09MHx8cj09PTYpJiZpLnB1c2goXCJBQUFBXCIpLChhc3luYygpPT57YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGkubWFwKGE9PkRlbm8ucmVzb2x2ZURucyh0LGEpLnRoZW4oUj0+e1IuZm9yRWFjaChsPT5zLnB1c2gobCkpfSkpKTtsZXQgYz1zLmxlbmd0aD8wOkQuZ2V0KFwiRUFJX05PREFUQVwiKTtvfHxzLnNvcnQoKGEsUik9Pm1uKGEpPy0xOm1uKFIpPzE6MCksRWUmJnQ9PT1cImxvY2FsaG9zdFwiJiYocz1zLmZpbHRlcihhPT5tbihhKSkpLGUub25jb21wbGV0ZShjLHMpfSkoKSwwfWZ1bmN0aW9uIGl0KGUpe3JldHVybiBlLnJlcGxhY2UoL1xcLiQvLFwiXCIpfWZ1bmN0aW9uIGJ1KGUpe3JldHVybiBlLnJlcGxhY2UoL1xcYig/OjArOil7Mix9LyxcIjpcIikuc3BsaXQoXCI6XCIpLm1hcChuPT5uLm1hdGNoKC9eXFxkK1xcLlxcZCtcXC5cXGQrXFwuXFxkKyQvKT9OdW1iZXIobi5yZXBsYWNlQWxsKFwiLlwiLFwiXCIpKS50b1N0cmluZygxNik6bi5yZXBsYWNlKC9cXGIwKy9nLFwiXCIpKS5qb2luKFwiOlwiKX1mdW5jdGlvbiB3QShlKXtyZXR1cm4gZT09PUNBP0xBOkR1KGUpfXZhciBVYyxNYyxrYyxDQSxMQSxDdT1wKCgpPT57ZXMoKTt1dCgpO1V0KCk7eXUoKTtVZSgpO0plKCk7VWM9Y2xhc3MgZXh0ZW5kcyBzZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKDEwKX19O01jPWNsYXNzIGV4dGVuZHMgc2V7Y29uc3RydWN0b3IoKXtzdXBlcigyNyl9fTtrYz1jbGFzcyBleHRlbmRzIHNleyN0PVtdOyNyOyNuO2NvbnN0cnVjdG9yKHQscil7c3VwZXIoMiksdGhpcy4jcj10LHRoaXMuI249cn1hc3luYyNlKHQscil7bGV0IG4sbztpZih0aGlzLiN0Lmxlbmd0aClmb3IobGV0W3MsaV1vZiB0aGlzLiN0KXtsZXQgYz17bmFtZVNlcnZlcjp7aXBBZGRyOnMscG9ydDppfX07aWYoe2NvZGU6bixyZXQ6b309YXdhaXQgdGhpcy4jcyh0LHIsYyksbj09PTB8fG49PT1ELmdldChcIkVBSV9OT0RBVEFcIikpYnJlYWt9ZWxzZSh7Y29kZTpuLHJldDpvfT1hd2FpdCB0aGlzLiNzKHQscikpO3JldHVybntjb2RlOm4scmV0Om99fWFzeW5jI3ModCxyLG4pe2xldCBvPVtdLHM9MDt0cnl7bz1hd2FpdCBEZW5vLnJlc29sdmVEbnModCxyLG4pfWNhdGNoKGkpe2kgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZD9zPUQuZ2V0KFwiRUFJX05PREFUQVwiKTpzPUQuZ2V0KFwiVU5LTk9XTlwiKX1yZXR1cm57Y29kZTpzLHJldDpvfX1xdWVyeUFueSh0LHIpe3JldHVybihhc3luYygpPT57bGV0IG49W107YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFt0aGlzLiNlKHIsXCJBXCIpLnRoZW4oKHtyZXQ6c30pPT57cy5mb3JFYWNoKGk9Pm4ucHVzaCh7dHlwZTpcIkFcIixhZGRyZXNzOml9KSl9KSx0aGlzLiNlKHIsXCJBQUFBXCIpLnRoZW4oKHtyZXQ6c30pPT57cy5mb3JFYWNoKGk9Pm4ucHVzaCh7dHlwZTpcIkFBQUFcIixhZGRyZXNzOmJ1KGkpfSkpfSksdGhpcy4jZShyLFwiQ0FBXCIpLnRoZW4oKHtyZXQ6c30pPT57cy5mb3JFYWNoKCh7Y3JpdGljYWw6aSx0YWc6Yyx2YWx1ZTphfSk9Pm4ucHVzaCh7dHlwZTpcIkNBQVwiLFtjXTphLGNyaXRpY2FsOitpJiYxMjh9KSl9KSx0aGlzLiNlKHIsXCJDTkFNRVwiKS50aGVuKCh7cmV0OnN9KT0+e3MuZm9yRWFjaChpPT5uLnB1c2goe3R5cGU6XCJDTkFNRVwiLHZhbHVlOml9KSl9KSx0aGlzLiNlKHIsXCJNWFwiKS50aGVuKCh7cmV0OnN9KT0+e3MuZm9yRWFjaCgoe3ByZWZlcmVuY2U6aSxleGNoYW5nZTpjfSk9Pm4ucHVzaCh7dHlwZTpcIk1YXCIscHJpb3JpdHk6aSxleGNoYW5nZTppdChjKX0pKX0pLHRoaXMuI2UocixcIk5BUFRSXCIpLnRoZW4oKHtyZXQ6c30pPT57cy5mb3JFYWNoKCh7b3JkZXI6aSxwcmVmZXJlbmNlOmMsZmxhZ3M6YSxzZXJ2aWNlczpSLHJlZ2V4cDpsLHJlcGxhY2VtZW50OkV9KT0+bi5wdXNoKHt0eXBlOlwiTkFQVFJcIixvcmRlcjppLHByZWZlcmVuY2U6YyxmbGFnczphLHNlcnZpY2U6UixyZWdleHA6bCxyZXBsYWNlbWVudDpFfSkpfSksdGhpcy4jZShyLFwiTlNcIikudGhlbigoe3JldDpzfSk9PntzLmZvckVhY2goaT0+bi5wdXNoKHt0eXBlOlwiTlNcIix2YWx1ZTppdChpKX0pKX0pLHRoaXMuI2UocixcIlBUUlwiKS50aGVuKCh7cmV0OnN9KT0+e3MuZm9yRWFjaChpPT5uLnB1c2goe3R5cGU6XCJQVFJcIix2YWx1ZTppdChpKX0pKX0pLHRoaXMuI2UocixcIlNPQVwiKS50aGVuKCh7cmV0OnN9KT0+e3MuZm9yRWFjaCgoe21uYW1lOmkscm5hbWU6YyxzZXJpYWw6YSxyZWZyZXNoOlIscmV0cnk6bCxleHBpcmU6RSxtaW5pbXVtOnV9KT0+bi5wdXNoKHt0eXBlOlwiU09BXCIsbnNuYW1lOml0KGkpLGhvc3RtYXN0ZXI6aXQoYyksc2VyaWFsOmEscmVmcmVzaDpSLHJldHJ5OmwsZXhwaXJlOkUsbWludHRsOnV9KSl9KSx0aGlzLiNlKHIsXCJTUlZcIikudGhlbigoe3JldDpzfSk9PntzLmZvckVhY2goKHtwcmlvcml0eTppLHdlaWdodDpjLHBvcnQ6YSx0YXJnZXQ6Un0pPT5uLnB1c2goe3R5cGU6XCJTUlZcIixwcmlvcml0eTppLHdlaWdodDpjLHBvcnQ6YSxuYW1lOlJ9KSl9KSx0aGlzLiNlKHIsXCJUWFRcIikudGhlbigoe3JldDpzfSk9PntzLmZvckVhY2goaT0+bi5wdXNoKHt0eXBlOlwiVFhUXCIsZW50cmllczppfSkpfSldKTtsZXQgbz1uLmxlbmd0aD8wOkQuZ2V0KFwiRUFJX05PREFUQVwiKTt0Lm9uY29tcGxldGUobyxuKX0pKCksMH1xdWVyeUEodCxyKXtyZXR1cm4gdGhpcy4jZShyLFwiQVwiKS50aGVuKCh7Y29kZTpuLHJldDpvfSk9Pnt0Lm9uY29tcGxldGUobixvKX0pLDB9cXVlcnlBYWFhKHQscil7cmV0dXJuIHRoaXMuI2UocixcIkFBQUFcIikudGhlbigoe2NvZGU6bixyZXQ6b30pPT57bGV0IHM9by5tYXAoaT0+YnUoaSkpO3Qub25jb21wbGV0ZShuLHMpfSksMH1xdWVyeUNhYSh0LHIpe3JldHVybiB0aGlzLiNlKHIsXCJDQUFcIikudGhlbigoe2NvZGU6bixyZXQ6b30pPT57bGV0IHM9by5tYXAoKHtjcml0aWNhbDppLHRhZzpjLHZhbHVlOmF9KT0+KHtbY106YSxjcml0aWNhbDoraSYmMTI4fSkpO3Qub25jb21wbGV0ZShuLHMpfSksMH1xdWVyeUNuYW1lKHQscil7cmV0dXJuIHRoaXMuI2UocixcIkNOQU1FXCIpLnRoZW4oKHtjb2RlOm4scmV0Om99KT0+e3Qub25jb21wbGV0ZShuLG8pfSksMH1xdWVyeU14KHQscil7cmV0dXJuIHRoaXMuI2UocixcIk1YXCIpLnRoZW4oKHtjb2RlOm4scmV0Om99KT0+e2xldCBzPW8ubWFwKCh7cHJlZmVyZW5jZTppLGV4Y2hhbmdlOmN9KT0+KHtwcmlvcml0eTppLGV4Y2hhbmdlOml0KGMpfSkpO3Qub25jb21wbGV0ZShuLHMpfSksMH1xdWVyeU5hcHRyKHQscil7cmV0dXJuIHRoaXMuI2UocixcIk5BUFRSXCIpLnRoZW4oKHtjb2RlOm4scmV0Om99KT0+e2xldCBzPW8ubWFwKCh7b3JkZXI6aSxwcmVmZXJlbmNlOmMsZmxhZ3M6YSxzZXJ2aWNlczpSLHJlZ2V4cDpsLHJlcGxhY2VtZW50OkV9KT0+KHtmbGFnczphLHNlcnZpY2U6UixyZWdleHA6bCxyZXBsYWNlbWVudDpFLG9yZGVyOmkscHJlZmVyZW5jZTpjfSkpO3Qub25jb21wbGV0ZShuLHMpfSksMH1xdWVyeU5zKHQscil7cmV0dXJuIHRoaXMuI2UocixcIk5TXCIpLnRoZW4oKHtjb2RlOm4scmV0Om99KT0+e2xldCBzPW8ubWFwKGk9Pml0KGkpKTt0Lm9uY29tcGxldGUobixzKX0pLDB9cXVlcnlQdHIodCxyKXtyZXR1cm4gdGhpcy4jZShyLFwiUFRSXCIpLnRoZW4oKHtjb2RlOm4scmV0Om99KT0+e2xldCBzPW8ubWFwKGk9Pml0KGkpKTt0Lm9uY29tcGxldGUobixzKX0pLDB9cXVlcnlTb2EodCxyKXtyZXR1cm4gdGhpcy4jZShyLFwiU09BXCIpLnRoZW4oKHtjb2RlOm4scmV0Om99KT0+e2xldCBzPXt9O2lmKG8ubGVuZ3RoKXtsZXR7bW5hbWU6aSxybmFtZTpjLHNlcmlhbDphLHJlZnJlc2g6UixyZXRyeTpsLGV4cGlyZTpFLG1pbmltdW06dX09b1swXTtzPXtuc25hbWU6aXQoaSksaG9zdG1hc3RlcjppdChjKSxzZXJpYWw6YSxyZWZyZXNoOlIscmV0cnk6bCxleHBpcmU6RSxtaW50dGw6dX19dC5vbmNvbXBsZXRlKG4scyl9KSwwfXF1ZXJ5U3J2KHQscil7cmV0dXJuIHRoaXMuI2UocixcIlNSVlwiKS50aGVuKCh7Y29kZTpuLHJldDpvfSk9PntsZXQgcz1vLm1hcCgoe3ByaW9yaXR5Omksd2VpZ2h0OmMscG9ydDphLHRhcmdldDpSfSk9Pih7cHJpb3JpdHk6aSx3ZWlnaHQ6Yyxwb3J0OmEsbmFtZTpSfSkpO3Qub25jb21wbGV0ZShuLHMpfSksMH1xdWVyeVR4dCh0LHIpe3JldHVybiB0aGlzLiNlKHIsXCJUWFRcIikudGhlbigoe2NvZGU6bixyZXQ6b30pPT57dC5vbmNvbXBsZXRlKG4sbyl9KSwwfWdldEhvc3RCeUFkZHIodCxyKXtXKFwiY2FyZXMuQ2hhbm5lbFdyYXAucHJvdG90eXBlLmdldEhvc3RCeUFkZHJcIil9Z2V0U2VydmVycygpe3JldHVybiB0aGlzLiN0fXNldFNlcnZlcnModCl7aWYodHlwZW9mIHQ9PVwic3RyaW5nXCIpe2xldCByPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bis9MilyLnB1c2goW3Rbbl0scGFyc2VJbnQodFtuKzFdKV0pO3RoaXMuI3Q9cn1lbHNlIHRoaXMuI3Q9dC5tYXAoKFtyLG4sb10pPT5bbixvXSk7cmV0dXJuIDB9c2V0TG9jYWxBZGRyZXNzKHQscil7VyhcImNhcmVzLkNoYW5uZWxXcmFwLnByb3RvdHlwZS5zZXRMb2NhbEFkZHJlc3NcIil9Y2FuY2VsKCl7VyhcImNhcmVzLkNoYW5uZWxXcmFwLnByb3RvdHlwZS5jYW5jZWxcIil9fSxDQT0tMWUzLExBPVwiVGhlcmUgYXJlIHBlbmRpbmcgcXVlcmllcy5cIn0pO3ZhciBMdT17fTt2YXIgd3U9cCgoKT0+e30pO2Z1bmN0aW9uIFB1KGUsdCl7aWYoZS5ieXRlTGVuZ3RoIT09dC5ieXRlTGVuZ3RoKXJldHVybiExO2UgaW5zdGFuY2VvZiBEYXRhVmlld3x8KGU9bmV3IERhdGFWaWV3KEFycmF5QnVmZmVyLmlzVmlldyhlKT9lLmJ1ZmZlcjplKSksdCBpbnN0YW5jZW9mIERhdGFWaWV3fHwodD1uZXcgRGF0YVZpZXcoQXJyYXlCdWZmZXIuaXNWaWV3KHQpP3QuYnVmZmVyOnQpKSxHcihlIGluc3RhbmNlb2YgRGF0YVZpZXcpLEdyKHQgaW5zdGFuY2VvZiBEYXRhVmlldyk7bGV0IHI9ZS5ieXRlTGVuZ3RoLG49MCxvPS0xO2Zvcig7KytvPHI7KW58PWUuZ2V0VWludDgobyledC5nZXRVaW50OChvKTtyZXR1cm4gbj09PTB9dmFyIFV1PXAoKCk9PntndCgpfSk7dmFyIE11LGt1PXAoKCk9Pnt4ZSgpO1V1KCk7TXU9KGUsdCk9PihlIGluc3RhbmNlb2YgXyYmKGU9bmV3IERhdGFWaWV3KGUuYnVmZmVyKSksZSBpbnN0YW5jZW9mIF8mJih0PW5ldyBEYXRhVmlldyhlLmJ1ZmZlcikpLFB1KGUsdCkpfSk7dmFyIEZjPXt9O3JlKEZjLHtnZXRGaXBzQ3J5cHRvOigpPT5QQSxzZXRGaXBzQ3J5cHRvOigpPT5VQSx0aW1pbmdTYWZlRXF1YWw6KCk9Pk11fSk7ZnVuY3Rpb24gUEEoKXtXKFwiY3J5cHRvLmdldEZpcHNDcnlwdG9cIil9ZnVuY3Rpb24gVUEoZSl7VyhcImNyeXB0by5zZXRGaXBzQ3J5cHRvXCIpfXZhciBCdT1wKCgpPT57VWUoKTtrdSgpfSk7dmFyIEZ1PXt9O3ZhciBXdT1wKCgpPT57fSk7dmFyIFZ1PXt9O3ZhciBHdT1wKCgpPT57fSk7dmFyIEh1PXt9O3ZhciAkdT1wKCgpPT57fSk7dmFyIHZ1PXt9O3ZhciBZdT1wKCgpPT57fSk7dmFyIEt1PXt9O3ZhciBqdT1wKCgpPT57fSk7dmFyIFh1PXt9O3ZhciB6dT1wKCgpPT57fSk7dmFyIFF1PXt9O3ZhciBxdT1wKCgpPT57fSk7dmFyIFp1PXt9O3ZhciBKdT1wKCgpPT57fSk7dmFyIGVfPXt9O3ZhciB0Xz1wKCgpPT57fSk7dmFyIHJfPXt9O3ZhciBuXz1wKCgpPT57fSk7dmFyIG9fPXt9O3ZhciBzXz1wKCgpPT57fSk7dmFyIGlfPXt9O3ZhciBjXz1wKCgpPT57fSk7dmFyIGFfPXt9O3ZhciBSXz1wKCgpPT57fSk7dmFyIGxfPXt9O3ZhciBFXz1wKCgpPT57fSk7dmFyIHVfPXt9O3ZhciBfXz1wKCgpPT57fSk7dmFyIGZfPXt9O3ZhciBwXz1wKCgpPT57fSk7dmFyIFVyLFdjPXAoKCk9PntndCgpO1V0KCk7VXI9Y2xhc3MgZXh0ZW5kcyBzZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1jbG9zZSh0PSgpPT57fSl7dGhpcy5fb25DbG9zZSgpLHQoKX1yZWYoKXtRZSgpfXVucmVmKCl7UWUoKX1fb25DbG9zZSgpe319fSk7dmFyIEhjPXt9O3JlKEhjLHtMaWJ1dlN0cmVhbVdyYXA6KCk9Pk50LFNodXRkb3duV3JhcDooKT0+R2MsV3JpdGVXcmFwOigpPT5WYyxrQXJyYXlCdWZmZXJPZmZzZXQ6KCk9PmhfLGtCeXRlc1dyaXR0ZW46KCk9Pk9fLGtMYXN0V3JpdGVXYXNBc3luYzooKT0+U18sa051bVN0cmVhbUJhc2VTdGF0ZUZpZWxkczooKT0+TUEsa1JlYWRCeXRlc09yRXJyb3I6KCk9PmRfLGtTdHJlYW1CYXNlRmllbGQ6KCk9PmN0LHN0cmVhbUJhc2VTdGF0ZTooKT0+RG59KTt2YXIgZF8saF8sT18sU18sTUEsRG4sVmMsR2MsY3Qsa0EsTnQsbnI9cCgoKT0+e3hlKCk7VWUoKTtXYygpO1V0KCk7dXQoKTtBcygpO2RfPTAsaF89MSxPXz0yLFNfPTMsTUE9NCxEbj1uZXcgVWludDhBcnJheSg1KTtEbltTX109MTtWYz1jbGFzcyBleHRlbmRzIHNle2NvbnN0cnVjdG9yKCl7c3VwZXIoNDEpfX0sR2M9Y2xhc3MgZXh0ZW5kcyBzZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKDI4KX19LGN0PVN5bWJvbChcImtTdHJlYW1CYXNlRmllbGRcIiksa0E9NjQqMTAyNCxOdD1jbGFzcyBleHRlbmRzIFVye2NvbnN0cnVjdG9yKHIsbil7c3VwZXIocik7dGhpcy4jdD0hMTt0aGlzLmRlc3Ryb3llZD0hMTt0aGlzLndyaXRlUXVldWVTaXplPTA7dGhpcy5ieXRlc1JlYWQ9MDt0aGlzLmJ5dGVzV3JpdHRlbj0wO3RoaXMuI3Iobil9I3Q7cmVhZFN0YXJ0KCl7cmV0dXJuIHRoaXMuI3R8fCh0aGlzLiN0PSEwLHRoaXMuI24oKSksMH1yZWFkU3RvcCgpe3JldHVybiB0aGlzLiN0PSExLDB9c2h1dGRvd24ocil7bGV0IG49dGhpcy5fb25DbG9zZSgpO3RyeXtyLm9uY29tcGxldGUobil9Y2F0Y2h7fXJldHVybiAwfXVzZVVzZXJCdWZmZXIocil7VyhcIkxpYnV2U3RyZWFtV3JhcC5wcm90b3R5cGUudXNlVXNlckJ1ZmZlclwiKX13cml0ZUJ1ZmZlcihyLG4pe3JldHVybiB0aGlzLiNlKHIsbiksMH13cml0ZXYocixuLG8pe2xldCBzPW8/bi5sZW5ndGg6bi5sZW5ndGg+PjEsaT1uZXcgQXJyYXkocyk7aWYobylmb3IobGV0IGM9MDtjPHM7YysrKWlbY109bltjXTtlbHNlIGZvcihsZXQgYz0wO2M8cztjKyspe2xldCBhPW5bYyoyXTtfLmlzQnVmZmVyKGEpJiYoaVtjXT1hKTtsZXQgUj1uW2MqMisxXTtpW2NdPV8uZnJvbShhLFIpfXJldHVybiB0aGlzLndyaXRlQnVmZmVyKHIsXy5jb25jYXQoaSkpfXdyaXRlQXNjaWlTdHJpbmcocixuKXtsZXQgbz1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUobik7cmV0dXJuIHRoaXMud3JpdGVCdWZmZXIocixvKX13cml0ZVV0ZjhTdHJpbmcocixuKXtsZXQgbz1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUobik7cmV0dXJuIHRoaXMud3JpdGVCdWZmZXIocixvKX13cml0ZVVjczJTdHJpbmcocixuKXtXKFwiTGlidXZTdHJlYW1XcmFwLnByb3RvdHlwZS53cml0ZVVjczJTdHJpbmdcIil9d3JpdGVMYXRpbjFTdHJpbmcocixuKXtsZXQgbz1fLmZyb20obixcImxhdGluMVwiKTtyZXR1cm4gdGhpcy53cml0ZUJ1ZmZlcihyLG8pfV9vbkNsb3NlKCl7bGV0IHI9MDt0aGlzLiN0PSExO3RyeXt0aGlzW2N0XT8uY2xvc2UoKX1jYXRjaHtyPUQuZ2V0KFwiRU5PVENPTk5cIil9cmV0dXJuIHJ9I3Iocil7dGhpc1tjdF09cn1hc3luYyNuKCl7bGV0IHI9bmV3IFVpbnQ4QXJyYXkoa0EpLG47dHJ5e249YXdhaXQgdGhpc1tjdF0ucmVhZChyKX1jYXRjaChvKXtvIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuSW50ZXJydXB0ZWR8fG8gaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5CYWRSZXNvdXJjZT9uPUQuZ2V0KFwiRU9GXCIpOm8gaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Db25uZWN0aW9uUmVzZXR8fG8gaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Db25uZWN0aW9uQWJvcnRlZD9uPUQuZ2V0KFwiRUNPTk5SRVNFVFwiKTpuPUQuZ2V0KFwiVU5LTk9XTlwiKSxyPW5ldyBVaW50OEFycmF5KDApfW4/Pz1ELmdldChcIkVPRlwiKSxEbltkX109bixuPjAmJih0aGlzLmJ5dGVzUmVhZCs9bikscj1yLnNsaWNlKDAsbiksRG5baF9dPTA7dHJ5e3RoaXMub25yZWFkKHIsbil9Y2F0Y2h7fW4+PTAmJnRoaXMuI3QmJnRoaXMuI24oKX1hc3luYyNlKHIsbil7bGV0e2J5dGVMZW5ndGg6b309bjt0cnl7YXdhaXQgQmEodGhpc1tjdF0sbil9Y2F0Y2gocyl7bGV0IGk7cyBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlfHxzIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQnJva2VuUGlwZT9pPUQuZ2V0KFwiRUJBREZcIik6aT1ELmdldChcIlVOS05PV05cIik7dHJ5e3Iub25jb21wbGV0ZShpKX1jYXRjaHt9cmV0dXJufURuW09fXT1vLHRoaXMuYnl0ZXNXcml0dGVuKz1vO3RyeXtyLm9uY29tcGxldGUoMCl9Y2F0Y2h7fX19O2N0fSk7dmFyIE1yLCRjPXAoKCk9PntucigpO01yPWNsYXNzIGV4dGVuZHMgTnR7Y29uc3RydWN0b3IocixuKXtzdXBlcihyLG4pO3RoaXMub25jb25uZWN0aW9uPW51bGx9YWZ0ZXJDb25uZWN0KHIsbil7bGV0IG89IW4scz1vLGk9bzt0cnl7ci5vbmNvbXBsZXRlKG4sdGhpcyxyLHMsaSl9Y2F0Y2h7fX19fSk7ZnVuY3Rpb24gdHMoZSl7bGV0IHQ9MTw8MzEtTWF0aC5jbHozMihlKTtyZXR1cm4gdDxlP3QqMjp0fXZhciBycyxrcix2Yz1wKCgpPT57cnM9NSxrcj0xZTN9KTt2YXIgS2M9e307cmUoS2Mse1BpcGU6KCk9PnluLFBpcGVDb25uZWN0V3JhcDooKT0+WWMsY29uc3RhbnRzOigpPT5rdCxzb2NrZXRUeXBlOigpPT5BX30pO3ZhciBBXyx5bixZYyxrdCxOXz1wKCgpPT57VWUoKTtndCgpOyRjKCk7VXQoKTtucigpO3V0KCk7a24oKTtucigpO3ZjKCk7SmUoKTt6cigpO1d0KCk7QV89KG49PihuW24uU09DS0VUPTBdPVwiU09DS0VUXCIsbltuLlNFUlZFUj0xXT1cIlNFUlZFUlwiLG5bbi5JUEM9Ml09XCJJUENcIixuKSkoQV98fHt9KSx5bj1jbGFzcyBleHRlbmRzIE1ye2NvbnN0cnVjdG9yKHIsbil7bGV0IG8scztzd2l0Y2gocil7Y2FzZSAwOntvPTI0LHM9ITE7YnJlYWt9Y2FzZSAxOntvPTIzLHM9ITE7YnJlYWt9Y2FzZSAyOntvPTI0LHM9ITA7YnJlYWt9ZGVmYXVsdDpRZSgpfXN1cGVyKG8sbik7dGhpcy5yZWFkaW5nPSExO3RoaXMuI3Q9NDt0aGlzLiNzPTA7dGhpcy4jaT0hMTtpZih0aGlzLmlwYz1zLG4mJm89PT0yNCl7bGV0IGk9bi5sb2NhbEFkZHI7dGhpcy4jcj1pLnBhdGh9fSN0OyNyOyNuOyNlOyNzOyNpOyNvO29wZW4ocil7VyhcIlBpcGUucHJvdG90eXBlLm9wZW5cIil9YmluZChyKXtyZXR1cm4gdGhpcy4jcj1yLDB9Y29ubmVjdChyLG4pe3JldHVybiBFZSYmVyhcIlBpcGUucHJvdG90eXBlLmNvbm5lY3QgLSBXaW5kb3dzXCIpLE9hKHtwYXRoOm4sdHJhbnNwb3J0OlwidW5peFwifSkudGhlbihzPT57bGV0IGk9cy5sb2NhbEFkZHI7dGhpcy4jcj1yLmFkZHJlc3M9aS5wYXRoLHRoaXNbY3RdPXM7dHJ5e3RoaXMuYWZ0ZXJDb25uZWN0KHIsMCl9Y2F0Y2h7fX0scz0+e2xldCBpO3MgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5Ob3RGb3VuZD9pPUQuZ2V0KFwiRU5PRU5UXCIpOnMgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5QZXJtaXNzaW9uRGVuaWVkP2k9RC5nZXQoXCJFQUNDRVNcIik6aT1ELmdldChcIkVDT05OUkVGVVNFRFwiKTt0cnl7dGhpcy5hZnRlckNvbm5lY3QocixpKX1jYXRjaHt9fSksMH1saXN0ZW4ocil7RWUmJlcoXCJQaXBlLnByb3RvdHlwZS5saXN0ZW4gLSBXaW5kb3dzXCIpLHRoaXMuI249RWU/dGhpcy4jdDp0cyhyKzEpO2xldCBuPXtwYXRoOnRoaXMuI3IsdHJhbnNwb3J0OlwidW5peFwifSxvO3RyeXtvPVNhKG4pfWNhdGNoKGkpe3JldHVybiBpIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQWRkckluVXNlP0QuZ2V0KFwiRUFERFJJTlVTRVwiKTppIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQWRkck5vdEF2YWlsYWJsZT9ELmdldChcIkVBRERSTk9UQVZBSUxcIik6RC5nZXQoXCJVTktOT1dOXCIpfWxldCBzPW8uYWRkcjtyZXR1cm4gdGhpcy4jcj1zLnBhdGgsdGhpcy4jZT1vLHRoaXMuI2EoKSwwfXJlZigpe3RoaXMuI2UmJlBuKHRoaXMuI2UpfXVucmVmKCl7dGhpcy4jZSYmVW4odGhpcy4jZSl9c2V0UGVuZGluZ0luc3RhbmNlcyhyKXt0aGlzLiN0PXJ9ZmNobW9kKHIpe2lmKHIhPWt0LlVWX1JFQURBQkxFJiZyIT1rdC5VVl9XUklUQUJMRSYmciE9KGt0LlVWX1dSSVRBQkxFfGt0LlVWX1JFQURBQkxFKSlyZXR1cm4gRC5nZXQoXCJFSU5WQUxcIik7bGV0IG49MDtyJmt0LlVWX1JFQURBQkxFJiYobnw9eXQuU19JUlVTUnx5dC5TX0lSR1JQfHl0LlNfSVJPVEgpLHIma3QuVVZfV1JJVEFCTEUmJihufD15dC5TX0lXVVNSfHl0LlNfSVdHUlB8eXQuU19JV09USCk7dHJ5e0Rlbm8uY2htb2RTeW5jKHRoaXMuI3Isbil9Y2F0Y2h7cmV0dXJuIEQuZ2V0KFwiVU5LTk9XTlwiKX1yZXR1cm4gMH1hc3luYyNjKCl7dGhpcy4jbz90aGlzLiNvKj0yOnRoaXMuI289cnMsdGhpcy4jbz49a3ImJih0aGlzLiNvPWtyKSxhd2FpdCBNbih0aGlzLiNvKSx0aGlzLiNhKCl9YXN5bmMjYSgpe2lmKHRoaXMuI2kpcmV0dXJuO2lmKHRoaXMuI3M+dGhpcy4jbil7dGhpcy4jYygpO3JldHVybn1sZXQgcjt0cnl7cj1hd2FpdCB0aGlzLiNlLmFjY2VwdCgpfWNhdGNoKG8pe2lmKG8gaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5CYWRSZXNvdXJjZSYmdGhpcy4jaSlyZXR1cm47dHJ5e3RoaXMub25jb25uZWN0aW9uKEQuZ2V0KFwiVU5LTk9XTlwiKSx2b2lkIDApfWNhdGNoe310aGlzLiNjKCk7cmV0dXJufXRoaXMuI289dm9pZCAwO2xldCBuPW5ldyB5bigwLHIpO3RoaXMuI3MrKzt0cnl7dGhpcy5vbmNvbm5lY3Rpb24oMCxuKX1jYXRjaHt9cmV0dXJuIHRoaXMuI2EoKX1fb25DbG9zZSgpe2lmKHRoaXMuI2k9ITAsdGhpcy5yZWFkaW5nPSExLHRoaXMuI3I9dm9pZCAwLHRoaXMuI249dm9pZCAwLHRoaXMuI3M9MCx0aGlzLiNvPXZvaWQgMCx0aGlzLnByb3ZpZGVyPT09MjMpdHJ5e3RoaXMuI2UuY2xvc2UoKX1jYXRjaHt9cmV0dXJuIE50LnByb3RvdHlwZS5fb25DbG9zZS5jYWxsKHRoaXMpfX0sWWM9Y2xhc3MgZXh0ZW5kcyBzZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKDIyKX19LGt0PShzPT4oc1tzLlNPQ0tFVD0wXT1cIlNPQ0tFVFwiLHNbcy5TRVJWRVI9MV09XCJTRVJWRVJcIixzW3MuSVBDPTJdPVwiSVBDXCIsc1tzLlVWX1JFQURBQkxFPTFdPVwiVVZfUkVBREFCTEVcIixzW3MuVVZfV1JJVEFCTEU9Ml09XCJVVl9XUklUQUJMRVwiLHMpKShrdHx8e30pfSk7dmFyIHhfPXt9O3ZhciBUXz1wKCgpPT57fSk7dmFyIElfPXt9O3ZhciBnXz1wKCgpPT57fSk7dmFyIG1fPXt9O3ZhciBEXz1wKCgpPT57fSk7dmFyIHlfPXt9O3ZhciBiXz1wKCgpPT57fSk7dmFyIENfPXt9O3ZhciBMXz1wKCgpPT57fSk7dmFyIHdfPXt9O3ZhciBQXz1wKCgpPT57fSk7dmFyIGpjPXt9O3JlKGpjLHthc3luY0lkU3ltYm9sOigpPT5CQSxvd25lclN5bWJvbDooKT0+Ym59KTt2YXIgQkEsYm4sbnM9cCgoKT0+e0JBPVN5bWJvbChcImFzeW5jSWRTeW1ib2xcIiksYm49U3ltYm9sKFwib3duZXJTeW1ib2xcIil9KTt2YXIgVV89e307dmFyIE1fPXAoKCk9Pnt9KTt2YXIgUWM9e307cmUoUWMse1RDUDooKT0+emMsVENQQ29ubmVjdFdyYXA6KCk9PlhjLGNvbnN0YW50czooKT0+a199KTt2YXIgWGMsa18sRkEscWMsemMsQl89cCgoKT0+e1VlKCk7Z3QoKTskYygpO1V0KCk7bnIoKTtucygpO3V0KCk7a24oKTtucigpO2VzKCk7dmMoKTtXdCgpO1hjPWNsYXNzIGV4dGVuZHMgc2V7Y29uc3RydWN0b3IoKXtzdXBlcigzMil9fSxrXz0obj0+KG5bbi5TT0NLRVQ9MF09XCJTT0NLRVRcIixuW24uU0VSVkVSPTFdPVwiU0VSVkVSXCIsbltuLlVWX1RDUF9JUFY2T05MWT0yXT1cIlVWX1RDUF9JUFY2T05MWVwiLG4pKShrX3x8e30pLHFjPWNsYXNzIGV4dGVuZHMgTXJ7Y29uc3RydWN0b3IocixuKXtsZXQgbztzd2l0Y2gocil7Y2FzZSAwOntvPTM0O2JyZWFrfWNhc2UgMTp7bz0zMzticmVha31kZWZhdWx0OlFlKCl9c3VwZXIobyxuKTt0aGlzW0ZBXT1udWxsO3RoaXMucmVhZGluZz0hMTt0aGlzLiNjPTA7dGhpcy4jYT0hMTtpZihuJiZvPT09MzQpe2xldCBzPW4ubG9jYWxBZGRyO3RoaXMuI3Q9cy5ob3N0bmFtZSx0aGlzLiNyPXMucG9ydDtsZXQgaT1uLnJlbW90ZUFkZHI7dGhpcy4jbj1pLmhvc3RuYW1lLHRoaXMuI3M9aS5wb3J0LHRoaXMuI2U9UHIoaS5ob3N0bmFtZSl9fSN0OyNyOyNuOyNlOyNzOyNpOyNvOyNjOyNhOyNSO29wZW4ocil7VyhcIlRDUC5wcm90b3R5cGUub3BlblwiKX1iaW5kKHIsbil7cmV0dXJuIHRoaXMuI0UocixuLDApfWJpbmQ2KHIsbixvKXtyZXR1cm4gdGhpcy4jRShyLG4sbyl9Y29ubmVjdChyLG4sbyl7cmV0dXJuIHRoaXMuI3UocixuLG8pfWNvbm5lY3Q2KHIsbixvKXtyZXR1cm4gdGhpcy4jdShyLG4sbyl9bGlzdGVuKHIpe3RoaXMuI2k9dHMocisxKTtsZXQgbj17aG9zdG5hbWU6dGhpcy4jdCxwb3J0OnRoaXMuI3IsdHJhbnNwb3J0OlwidGNwXCJ9LG87dHJ5e289RGVuby5saXN0ZW4obil9Y2F0Y2goaSl7cmV0dXJuIGkgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRySW5Vc2U/RC5nZXQoXCJFQUREUklOVVNFXCIpOmkgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5BZGRyTm90QXZhaWxhYmxlP0QuZ2V0KFwiRUFERFJOT1RBVkFJTFwiKTpELmdldChcIlVOS05PV05cIil9bGV0IHM9by5hZGRyO3JldHVybiB0aGlzLiN0PXMuaG9zdG5hbWUsdGhpcy4jcj1zLnBvcnQsdGhpcy4jbz1vLHRoaXMuI2woKSwwfXJlZigpe3RoaXMuI28mJlBuKHRoaXMuI28pfXVucmVmKCl7dGhpcy4jbyYmVW4odGhpcy4jbyl9Z2V0c29ja25hbWUocil7cmV0dXJuIHR5cGVvZiB0aGlzLiN0PlwidVwifHx0eXBlb2YgdGhpcy4jcj5cInVcIj9ELmdldChcIkVBRERSTk9UQVZBSUxcIik6KHIuYWRkcmVzcz10aGlzLiN0LHIucG9ydD10aGlzLiNyLHIuZmFtaWx5PVByKHRoaXMuI3QpLDApfWdldHBlZXJuYW1lKHIpe3JldHVybiB0eXBlb2YgdGhpcy4jbj5cInVcInx8dHlwZW9mIHRoaXMuI3M+XCJ1XCI/RC5nZXQoXCJFQUREUk5PVEFWQUlMXCIpOihyLmFkZHJlc3M9dGhpcy4jbixyLnBvcnQ9dGhpcy4jcyxyLmZhbWlseT10aGlzLiNlLDApfXNldE5vRGVsYXkocil7cmV0dXJuIDB9c2V0S2VlcEFsaXZlKHIsbil7cmV0dXJuIDB9c2V0U2ltdWx0YW5lb3VzQWNjZXB0cyhyKXtXKFwiVENQLnByb3RvdHlwZS5zZXRTaW11bHRhbmVvdXNBY2NlcHRzXCIpfSNFKHIsbixvKXtyZXR1cm4gdGhpcy4jdD1yLHRoaXMuI3I9biwwfSN1KHIsbixvKXt0aGlzLiNuPW4sdGhpcy4jcz1vLHRoaXMuI2U9UHIobik7bGV0IHM9e2hvc3RuYW1lOm4scG9ydDpvLHRyYW5zcG9ydDpcInRjcFwifTtyZXR1cm4gRGVuby5jb25uZWN0KHMpLnRoZW4oaT0+e2xldCBjPWkubG9jYWxBZGRyO3RoaXMuI3Q9ci5sb2NhbEFkZHJlc3M9Yy5ob3N0bmFtZSx0aGlzLiNyPXIubG9jYWxQb3J0PWMucG9ydCx0aGlzW2N0XT1pO3RyeXt0aGlzLmFmdGVyQ29ubmVjdChyLDApfWNhdGNoe319LCgpPT57dHJ5e3RoaXMuYWZ0ZXJDb25uZWN0KHIsRC5nZXQoXCJFQ09OTlJFRlVTRURcIikpfWNhdGNoe319KSwwfWFzeW5jI18oKXt0aGlzLiNSP3RoaXMuI1IqPTI6dGhpcy4jUj1ycyx0aGlzLiNSPj1rciYmKHRoaXMuI1I9a3IpLGF3YWl0IE1uKHRoaXMuI1IpLHRoaXMuI2woKX1hc3luYyNsKCl7aWYodGhpcy4jYSlyZXR1cm47aWYodGhpcy4jYz50aGlzLiNpKXt0aGlzLiNfKCk7cmV0dXJufWxldCByO3RyeXtyPWF3YWl0IHRoaXMuI28uYWNjZXB0KCl9Y2F0Y2gobyl7aWYobyBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkJhZFJlc291cmNlJiZ0aGlzLiNhKXJldHVybjt0cnl7dGhpcy5vbmNvbm5lY3Rpb24oRC5nZXQoXCJVTktOT1dOXCIpLHZvaWQgMCl9Y2F0Y2h7fXRoaXMuI18oKTtyZXR1cm59dGhpcy4jUj12b2lkIDA7bGV0IG49bmV3IHFjKDAscik7dGhpcy4jYysrO3RyeXt0aGlzLm9uY29ubmVjdGlvbigwLG4pfWNhdGNoe31yZXR1cm4gdGhpcy4jbCgpfV9vbkNsb3NlKCl7aWYodGhpcy4jYT0hMCx0aGlzLnJlYWRpbmc9ITEsdGhpcy4jdD12b2lkIDAsdGhpcy4jcj12b2lkIDAsdGhpcy4jbj12b2lkIDAsdGhpcy4jZT12b2lkIDAsdGhpcy4jcz12b2lkIDAsdGhpcy4jaT12b2lkIDAsdGhpcy4jYz0wLHRoaXMuI1I9dm9pZCAwLHRoaXMucHJvdmlkZXI9PT0zMyl0cnl7dGhpcy4jby5jbG9zZSgpfWNhdGNoe31yZXR1cm4gTnQucHJvdG90eXBlLl9vbkNsb3NlLmNhbGwodGhpcyl9fSx6Yz1xYztGQT1ibn0pO3ZhciBGXz17fTt2YXIgV189cCgoKT0+e30pO3ZhciBWXz17fTt2YXIgR189cCgoKT0+e30pO3ZhciBIXz17fTt2YXIgJF89cCgoKT0+e30pO3ZhciB2Xz17fTt2YXIgWV89cCgoKT0+e30pO3ZhciByYT17fTtyZShyYSx7U2VuZFdyYXA6KCk9PmVhLFVEUDooKT0+dGF9KTt2YXIgWmMsQ24sSmMsZWEsV0EsdGEsS189cCgoKT0+e1V0KCk7V2MoKTtucygpO3V0KCk7VWUoKTt4ZSgpO2VzKCk7V3QoKTtKZSgpO1pjPTIsQ249MTAsSmM9NjQqMTAyNCxlYT1jbGFzcyBleHRlbmRzIHNle2NvbnN0cnVjdG9yKCl7c3VwZXIoMzYpfX0sdGE9Y2xhc3MgZXh0ZW5kcyBVcntjb25zdHJ1Y3Rvcigpe3N1cGVyKDM3KTt0aGlzW1dBXT1udWxsO3RoaXMuI2M9ITE7dGhpcy4jYT1KYzt0aGlzLiNSPUpjfSN0OyNyOyNuOyNlOyNzOyNpOyNvOyNjOyNhOyNSO2FkZE1lbWJlcnNoaXAocixuKXtXKFwidWRwLlVEUC5wcm90b3R5cGUuYWRkTWVtYmVyc2hpcFwiKX1hZGRTb3VyY2VTcGVjaWZpY01lbWJlcnNoaXAocixuLG8pe1coXCJ1ZHAuVURQLnByb3RvdHlwZS5hZGRTb3VyY2VTcGVjaWZpY01lbWJlcnNoaXBcIil9YmluZChyLG4sbyl7cmV0dXJuIHRoaXMuI0UocixuLG8sWmMpfWJpbmQ2KHIsbixvKXtyZXR1cm4gdGhpcy4jRShyLG4sbyxDbil9YnVmZmVyU2l6ZShyLG4sbyl7bGV0IHM7aWYocj5KYz9zPVwiRUlOVkFMXCI6dGhpcy4jdHx8KHM9RWU/XCJFTk9UU09DS1wiOlwiRUJBREZcIikscyl7by5lcnJubz1ELmdldChzKSxvLmNvZGU9cyxvLm1lc3NhZ2U9JHQuZ2V0KG8uZXJybm8pWzFdLG8uc3lzY2FsbD1uP1widXZfcmVjdl9idWZmZXJfc2l6ZVwiOlwidXZfc2VuZF9idWZmZXJfc2l6ZVwiO3JldHVybn1yZXR1cm4gciE9PTA/KHI9SFI/cioyOnIsbj90aGlzLiNhPXI6dGhpcy4jUj1yKTpuP3RoaXMuI2E6dGhpcy4jUn1jb25uZWN0KHIsbil7cmV0dXJuIHRoaXMuI3UocixuLFpjKX1jb25uZWN0NihyLG4pe3JldHVybiB0aGlzLiN1KHIsbixDbil9ZGlzY29ubmVjdCgpe3JldHVybiB0aGlzLiNlPXZvaWQgMCx0aGlzLiNpPXZvaWQgMCx0aGlzLiNzPXZvaWQgMCwwfWRyb3BNZW1iZXJzaGlwKHIsbil7VyhcInVkcC5VRFAucHJvdG90eXBlLmRyb3BNZW1iZXJzaGlwXCIpfWRyb3BTb3VyY2VTcGVjaWZpY01lbWJlcnNoaXAocixuLG8pe1coXCJ1ZHAuVURQLnByb3RvdHlwZS5kcm9wU291cmNlU3BlY2lmaWNNZW1iZXJzaGlwXCIpfWdldHBlZXJuYW1lKHIpe3JldHVybiB0aGlzLiNlPT09dm9pZCAwP0QuZ2V0KFwiRUJBREZcIik6KHIuYWRkcmVzcz10aGlzLiNlLHIucG9ydD10aGlzLiNpLHIuZmFtaWx5PXRoaXMuI3MsMCl9Z2V0c29ja25hbWUocil7cmV0dXJuIHRoaXMuI3Q9PT12b2lkIDA/RC5nZXQoXCJFQkFERlwiKTooci5hZGRyZXNzPXRoaXMuI3Qsci5wb3J0PXRoaXMuI24sci5mYW1pbHk9dGhpcy4jciwwKX1vcGVuKHIpe1coXCJ1ZHAuVURQLnByb3RvdHlwZS5vcGVuXCIpfXJlY3ZTdGFydCgpe3JldHVybiB0aGlzLiNjfHwodGhpcy4jYz0hMCx0aGlzLiNsKCkpLDB9cmVjdlN0b3AoKXtyZXR1cm4gdGhpcy4jYz0hMSwwfXJlZigpe1coXCJ1ZHAuVURQLnByb3RvdHlwZS5yZWZcIil9c2VuZChyLG4sbywuLi5zKXtyZXR1cm4gdGhpcy4jXyhyLG4sbyxzLFpjKX1zZW5kNihyLG4sbywuLi5zKXtyZXR1cm4gdGhpcy4jXyhyLG4sbyxzLENuKX1zZXRCcm9hZGNhc3Qocil7VyhcInVkcC5VRFAucHJvdG90eXBlLnNldEJyb2FkY2FzdFwiKX1zZXRNdWx0aWNhc3RJbnRlcmZhY2Uocil7VyhcInVkcC5VRFAucHJvdG90eXBlLnNldE11bHRpY2FzdEludGVyZmFjZVwiKX1zZXRNdWx0aWNhc3RMb29wYmFjayhyKXtXKFwidWRwLlVEUC5wcm90b3R5cGUuc2V0TXVsdGljYXN0TG9vcGJhY2tcIil9c2V0TXVsdGljYXN0VFRMKHIpe1coXCJ1ZHAuVURQLnByb3RvdHlwZS5zZXRNdWx0aWNhc3RUVExcIil9c2V0VFRMKHIpe1coXCJ1ZHAuVURQLnByb3RvdHlwZS5zZXRUVExcIil9dW5yZWYoKXtXKFwidWRwLlVEUC5wcm90b3R5cGUudW5yZWZcIil9I0UocixuLG8scyl7bGV0IGk9e3BvcnQ6bixob3N0bmFtZTpyLHRyYW5zcG9ydDpcInVkcFwifSxjO3RyeXtjPUFhKGkpfWNhdGNoKFIpe3JldHVybiBSIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQWRkckluVXNlP0QuZ2V0KFwiRUFERFJJTlVTRVwiKTpSIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQWRkck5vdEF2YWlsYWJsZT9ELmdldChcIkVBRERSTk9UQVZBSUxcIik6RC5nZXQoXCJVTktOT1dOXCIpfWxldCBhPWMuYWRkcjtyZXR1cm4gdGhpcy4jdD1hLmhvc3RuYW1lLHRoaXMuI249YS5wb3J0LHRoaXMuI3I9cz09PUNuP1wiSVB2NlwiOlwiSVB2NFwiLHRoaXMuI289YywwfSN1KHIsbixvKXtyZXR1cm4gdGhpcy4jZT1yLHRoaXMuI2k9bix0aGlzLiNzPW89PT1Dbj9cIklQdjZcIjpcIklQdjRcIiwwfSNfKHIsbixvLHMsaSl7bGV0IGM7cy5sZW5ndGg9PT0zPyh0aGlzLiNpPXNbMF0sdGhpcy4jZT1zWzFdLGM9c1syXSk6Yz1zWzBdO2xldCBhPXtob3N0bmFtZTp0aGlzLiNlLHBvcnQ6dGhpcy4jaSx0cmFuc3BvcnQ6XCJ1ZHBcIn0sUj1uZXcgVWludDhBcnJheShfLmNvbmNhdChuLm1hcChsPT50eXBlb2YgbD09XCJzdHJpbmdcIj9fLmZyb20obCk6Xy5mcm9tKGwuYnVmZmVyLGwuYnl0ZU9mZnNldCxsLmJ5dGVMZW5ndGgpKSkpO3JldHVybihhc3luYygpPT57bGV0IGwsRT1udWxsO3RyeXtsPWF3YWl0IHRoaXMuI28uc2VuZChSLGEpfWNhdGNoKHUpe3UgaW5zdGFuY2VvZiBEZW5vLmVycm9ycy5CYWRSZXNvdXJjZT9FPUQuZ2V0KFwiRUJBREZcIik6dSBpbnN0YW5jZW9mIEVycm9yJiZ1Lm1lc3NhZ2UubWF0Y2goL29zIGVycm9yICg0MHw5MHwxMDA0MCkvKT9FPUQuZ2V0KFwiRU1TR1NJWkVcIik6RT1ELmdldChcIlVOS05PV05cIiksbD0wfWlmKGMpdHJ5e3Iub25jb21wbGV0ZShFLGwpfWNhdGNoe319KSgpLDB9YXN5bmMjbCgpe2lmKCF0aGlzLiNjKXJldHVybjtsZXQgcj1uZXcgVWludDhBcnJheSh0aGlzLiNhKSxuLG8sczt0cnl7W24sb109YXdhaXQgdGhpcy4jby5yZWNlaXZlKHIpLHM9bi5sZW5ndGh9Y2F0Y2goYyl7YyBpbnN0YW5jZW9mIERlbm8uZXJyb3JzLkludGVycnVwdGVkfHxjIGluc3RhbmNlb2YgRGVuby5lcnJvcnMuQmFkUmVzb3VyY2U/cz0wOnM9RC5nZXQoXCJVTktOT1dOXCIpLG49bmV3IFVpbnQ4QXJyYXkoMCksbz1udWxsfXM/Pz0wO2xldCBpPW8/e2FkZHJlc3M6by5ob3N0bmFtZSxwb3J0Om8ucG9ydCxmYW1pbHk6UHIoby5ob3N0bmFtZSk9PT02P1wiSVB2NlwiOlwiSVB2NFwifTp2b2lkIDA7dHJ5e3RoaXMub25tZXNzYWdlKHMsdGhpcyxfLmZyb20obiksaSl9Y2F0Y2h7fXRoaXMuI2woKX1fb25DbG9zZSgpe3RoaXMuI2M9ITEsdGhpcy4jdD12b2lkIDAsdGhpcy4jbj12b2lkIDAsdGhpcy4jcj12b2lkIDA7dHJ5e3RoaXMuI28uY2xvc2UoKX1jYXRjaHt9cmV0dXJuIHRoaXMuI289dm9pZCAwLDB9fTtXQT1ibn0pO3ZhciBqXz17fTt2YXIgWF89cCgoKT0+e30pO3ZhciB6Xz17fTt2YXIgUV89cCgoKT0+e30pO3ZhciBxXz17fTt2YXIgWl89cCgoKT0+e30pO3ZhciBKXz17fTt2YXIgZWY9cCgoKT0+e30pO2Z1bmN0aW9uIHRmKGUpe2xldCB0PVZBW2VdO2lmKCF0KXRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBtb2R1bGU6ICR7ZX1gKTtyZXR1cm4gdH12YXIgVkEscmY9cCgoKT0+e1V0KCk7dW8oKTtJdSgpO0N1KCk7enIoKTt3dSgpO0J1KCk7V3UoKTtHdSgpOyR1KCk7WXUoKTtqdSgpO3p1KCk7cXUoKTtKdSgpO3RfKCk7bl8oKTtzXygpO2NfKCk7Ul8oKTtFXygpO19fKCk7cF8oKTtOXygpO1RfKCk7Z18oKTtEXygpO2JfKCk7TF8oKTtQXygpO25yKCk7bGkoKTtucygpO01fKCk7Ql8oKTtXXygpO0dfKCk7JF8oKTtZXygpO2dzKCk7S18oKTtYXygpO1puKCk7dXQoKTtRXygpO1pfKCk7ZWYoKTtWQT17YXN5bmNfd3JhcDpQYyxidWZmZXI6dWksY2FyZXNfd3JhcDpCYyxjb25maWc6VHUsY29uc3RhbnRzOmlpLGNvbnRleHRpZnk6THUsY3JlZGVudGlhbHM6RnUsY3J5cHRvOkZjLGVycm9yczpWdSxmczpIdSxmc19kaXI6dnUsZnNfZXZlbnRfd3JhcDpLdSxoZWFwX3V0aWxzOlh1LGh0dHBfcGFyc2VyOlF1LGljdTpadSxpbnNwZWN0b3I6ZV8sanNfc3RyZWFtOnJfLG1lc3NhZ2luZzpvXyxtb2R1bGVfd3JhcDppXyxuYXRpdmVfbW9kdWxlOmFfLG5hdGl2ZXM6bF8sb3B0aW9uczp1XyxvczpmXyxwZXJmb3JtYW5jZTp4XyxwaXBlX3dyYXA6S2MscHJvY2Vzc19tZXRob2RzOklfLHJlcG9ydDptXyxzZXJkZXM6eV8sc2lnbmFsX3dyYXA6Q18sc3Bhd25fc3luYzp3XyxzdHJlYW1fd3JhcDpIYyxzdHJpbmdfZGVjb2RlcjpSaSxzeW1ib2xzOmpjLHRhc2tfcXVldWU6VV8sdGNwX3dyYXA6UWMsdGltZXJzOkZfLHRsc193cmFwOlZfLHRyYWNlX2V2ZW50czpIXyx0dHlfd3JhcDp2Xyx0eXBlczpIcix1ZHBfd3JhcDpyYSx1cmw6al8sdXRpbDpWcyx1djpjaSx2ODp6Xyx3b3JrZXI6cV8semxpYjpKX319KTtmdW5jdGlvbiBvZigpe2xldCBlPVtcIi0tdHJhY2staGVhcC1vYmplY3RzXCIsXCItLW5vLXRyYWNrLWhlYXAtb2JqZWN0c1wiLFwiLS1ub2RlLXNuYXBzaG90XCIsXCItLW5vLW5vZGUtc25hcHNob3RcIixcIi0tcmVxdWlyZVwiLFwiLS1tYXgtb2xkLXNwYWNlLXNpemVcIixcIi0tdHJhY2UtZXhpdFwiLFwiLS1uby10cmFjZS1leGl0XCIsXCItLWRpc2FsbG93LWNvZGUtZ2VuZXJhdGlvbi1mcm9tLXN0cmluZ3NcIixcIi0tZXhwZXJpbWVudGFsLWpzb24tbW9kdWxlc1wiLFwiLS1uby1leHBlcmltZW50YWwtanNvbi1tb2R1bGVzXCIsXCItLWludGVycHJldGVkLWZyYW1lcy1uYXRpdmUtc3RhY2tcIixcIi0taW5zcGVjdC1icmtcIixcIi0tbm8taW5zcGVjdC1icmtcIixcIi0tdHJhY2UtdGxzXCIsXCItLW5vLXRyYWNlLXRsc1wiLFwiLS1zdGFjay10cmFjZS1saW1pdFwiLFwiLS1leHBlcmltZW50YWwtcmVwbC1hd2FpdFwiLFwiLS1uby1leHBlcmltZW50YWwtcmVwbC1hd2FpdFwiLFwiLS1wcmVzZXJ2ZS1zeW1saW5rc1wiLFwiLS1uby1wcmVzZXJ2ZS1zeW1saW5rc1wiLFwiLS1yZXBvcnQtdW5jYXVnaHQtZXhjZXB0aW9uXCIsXCItLW5vLXJlcG9ydC11bmNhdWdodC1leGNlcHRpb25cIixcIi0tZXhwZXJpbWVudGFsLW1vZHVsZXNcIixcIi0tbm8tZXhwZXJpbWVudGFsLW1vZHVsZXNcIixcIi0tcmVwb3J0LXNpZ25hbFwiLFwiLS1qaXRsZXNzXCIsXCItLWluc3BlY3QtcG9ydFwiLFwiLS1oZWFwc25hcHNob3QtbmVhci1oZWFwLWxpbWl0XCIsXCItLXRscy1rZXlsb2dcIixcIi0tZm9yY2UtY29udGV4dC1hd2FyZVwiLFwiLS1uby1mb3JjZS1jb250ZXh0LWF3YXJlXCIsXCItLW5hcGktbW9kdWxlc1wiLFwiLS1hYm9ydC1vbi11bmNhdWdodC1leGNlcHRpb25cIixcIi0tZGlhZ25vc3RpYy1kaXJcIixcIi0tdmVyaWZ5LWJhc2Utb2JqZWN0c1wiLFwiLS1uby12ZXJpZnktYmFzZS1vYmplY3RzXCIsXCItLXVuaGFuZGxlZC1yZWplY3Rpb25zXCIsXCItLXBlcmYtYmFzaWMtcHJvZlwiLFwiLS10cmFjZS1hdG9taWNzLXdhaXRcIixcIi0tbm8tdHJhY2UtYXRvbWljcy13YWl0XCIsXCItLWRlcHJlY2F0aW9uXCIsXCItLW5vLWRlcHJlY2F0aW9uXCIsXCItLXBlcmYtYmFzaWMtcHJvZi1vbmx5LWZ1bmN0aW9uc1wiLFwiLS1wZXJmLXByb2ZcIixcIi0tbWF4LWh0dHAtaGVhZGVyLXNpemVcIixcIi0tcmVwb3J0LW9uLXNpZ25hbFwiLFwiLS1uby1yZXBvcnQtb24tc2lnbmFsXCIsXCItLXRocm93LWRlcHJlY2F0aW9uXCIsXCItLW5vLXRocm93LWRlcHJlY2F0aW9uXCIsXCItLXdhcm5pbmdzXCIsXCItLW5vLXdhcm5pbmdzXCIsXCItLWZvcmNlLWZpcHNcIixcIi0tbm8tZm9yY2UtZmlwc1wiLFwiLS1wZW5kaW5nLWRlcHJlY2F0aW9uXCIsXCItLW5vLXBlbmRpbmctZGVwcmVjYXRpb25cIixcIi0taW5wdXQtdHlwZVwiLFwiLS10bHMtbWF4LXYxLjNcIixcIi0tbm8tdGxzLW1heC12MS4zXCIsXCItLXRscy1taW4tdjEuMlwiLFwiLS1uby10bHMtbWluLXYxLjJcIixcIi0taW5zcGVjdFwiLFwiLS1uby1pbnNwZWN0XCIsXCItLWhlYXBzbmFwc2hvdC1zaWduYWxcIixcIi0tdHJhY2Utd2FybmluZ3NcIixcIi0tbm8tdHJhY2Utd2FybmluZ3NcIixcIi0tdHJhY2UtZXZlbnQtY2F0ZWdvcmllc1wiLFwiLS1leHBlcmltZW50YWwtd29ya2VyXCIsXCItLXRscy1tYXgtdjEuMlwiLFwiLS1uby10bHMtbWF4LXYxLjJcIixcIi0tcGVyZi1wcm9mLXVud2luZGluZy1pbmZvXCIsXCItLXByZXNlcnZlLXN5bWxpbmtzLW1haW5cIixcIi0tbm8tcHJlc2VydmUtc3ltbGlua3MtbWFpblwiLFwiLS1wb2xpY3ktaW50ZWdyaXR5XCIsXCItLWV4cGVyaW1lbnRhbC13YXNtLW1vZHVsZXNcIixcIi0tbm8tZXhwZXJpbWVudGFsLXdhc20tbW9kdWxlc1wiLFwiLS1ub2RlLW1lbW9yeS1kZWJ1Z1wiLFwiLS1pbnNwZWN0LXB1Ymxpc2gtdWlkXCIsXCItLXRscy1taW4tdjEuM1wiLFwiLS1uby10bHMtbWluLXYxLjNcIixcIi0tZXhwZXJpbWVudGFsLXNwZWNpZmllci1yZXNvbHV0aW9uXCIsXCItLXNlY3VyZS1oZWFwXCIsXCItLXRscy1taW4tdjEuMFwiLFwiLS1uby10bHMtbWluLXYxLjBcIixcIi0tcmVkaXJlY3Qtd2FybmluZ3NcIixcIi0tZXhwZXJpbWVudGFsLXJlcG9ydFwiLFwiLS10cmFjZS1ldmVudC1maWxlLXBhdHRlcm5cIixcIi0tdHJhY2UtdW5jYXVnaHRcIixcIi0tbm8tdHJhY2UtdW5jYXVnaHRcIixcIi0tZXhwZXJpbWVudGFsLWxvYWRlclwiLFwiLS1odHRwLXBhcnNlclwiLFwiLS1kbnMtcmVzdWx0LW9yZGVyXCIsXCItLXRyYWNlLXNpZ2ludFwiLFwiLS1uby10cmFjZS1zaWdpbnRcIixcIi0tc2VjdXJlLWhlYXAtbWluXCIsXCItLWVuYWJsZS1maXBzXCIsXCItLW5vLWVuYWJsZS1maXBzXCIsXCItLWVuYWJsZS1zb3VyY2UtbWFwc1wiLFwiLS1uby1lbmFibGUtc291cmNlLW1hcHNcIixcIi0taW5zZWN1cmUtaHR0cC1wYXJzZXJcIixcIi0tbm8taW5zZWN1cmUtaHR0cC1wYXJzZXJcIixcIi0tdXNlLW9wZW5zc2wtY2FcIixcIi0tbm8tdXNlLW9wZW5zc2wtY2FcIixcIi0tdGxzLWNpcGhlci1saXN0XCIsXCItLWV4cGVyaW1lbnRhbC10b3AtbGV2ZWwtYXdhaXRcIixcIi0tbm8tZXhwZXJpbWVudGFsLXRvcC1sZXZlbC1hd2FpdFwiLFwiLS1vcGVuc3NsLWNvbmZpZ1wiLFwiLS1pY3UtZGF0YS1kaXJcIixcIi0tdjgtcG9vbC1zaXplXCIsXCItLXJlcG9ydC1vbi1mYXRhbGVycm9yXCIsXCItLW5vLXJlcG9ydC1vbi1mYXRhbGVycm9yXCIsXCItLXRpdGxlXCIsXCItLXRscy1taW4tdjEuMVwiLFwiLS1uby10bHMtbWluLXYxLjFcIixcIi0tcmVwb3J0LWZpbGVuYW1lXCIsXCItLXRyYWNlLWRlcHJlY2F0aW9uXCIsXCItLW5vLXRyYWNlLWRlcHJlY2F0aW9uXCIsXCItLXJlcG9ydC1jb21wYWN0XCIsXCItLW5vLXJlcG9ydC1jb21wYWN0XCIsXCItLWV4cGVyaW1lbnRhbC1wb2xpY3lcIixcIi0tZXhwZXJpbWVudGFsLWltcG9ydC1tZXRhLXJlc29sdmVcIixcIi0tbm8tZXhwZXJpbWVudGFsLWltcG9ydC1tZXRhLXJlc29sdmVcIixcIi0temVyby1maWxsLWJ1ZmZlcnNcIixcIi0tbm8temVyby1maWxsLWJ1ZmZlcnNcIixcIi0tcmVwb3J0LWRpclwiLFwiLS11c2UtYnVuZGxlZC1jYVwiLFwiLS1uby11c2UtYnVuZGxlZC1jYVwiLFwiLS1leHBlcmltZW50YWwtdm0tbW9kdWxlc1wiLFwiLS1uby1leHBlcmltZW50YWwtdm0tbW9kdWxlc1wiLFwiLS1mb3JjZS1hc3luYy1ob29rcy1jaGVja3NcIixcIi0tbm8tZm9yY2UtYXN5bmMtaG9va3MtY2hlY2tzXCIsXCItLWZyb3plbi1pbnRyaW5zaWNzXCIsXCItLW5vLWZyb3plbi1pbnRyaW5zaWNzXCIsXCItLWh1Z2UtbWF4LW9sZC1nZW5lcmF0aW9uLXNpemVcIixcIi0tZGlzYWJsZS1wcm90b1wiLFwiLS1kZWJ1Zy1hcnJheWJ1ZmZlci1hbGxvY2F0aW9uc1wiLFwiLS1uby1kZWJ1Zy1hcnJheWJ1ZmZlci1hbGxvY2F0aW9uc1wiLFwiLS1jb25kaXRpb25zXCIsXCItLWV4cGVyaW1lbnRhbC13YXNpLXVuc3RhYmxlLXByZXZpZXcxXCIsXCItLW5vLWV4cGVyaW1lbnRhbC13YXNpLXVuc3RhYmxlLXByZXZpZXcxXCIsXCItLXRyYWNlLXN5bmMtaW9cIixcIi0tbm8tdHJhY2Utc3luYy1pb1wiLFwiLS11c2UtbGFyZ2VwYWdlc1wiLFwiLS1leHBlcmltZW50YWwtYWJvcnRjb250cm9sbGVyXCIsXCItLWRlYnVnLXBvcnRcIixcIi0tZXMtbW9kdWxlLXNwZWNpZmllci1yZXNvbHV0aW9uXCIsXCItLXByb2YtcHJvY2Vzc1wiLFwiLUNcIixcIi0tbG9hZGVyXCIsXCItLXJlcG9ydC1kaXJlY3RvcnlcIixcIi1yXCIsXCItLXRyYWNlLWV2ZW50cy1lbmFibGVkXCJdLHQ9bz0+by5yZXBsYWNlKG5mLFwiXCIpLHI9ZS5tYXAodCk7Y2xhc3MgbiBleHRlbmRzIFNldHtjb25zdHJ1Y3RvcihzKXtzdXBlcigpLHRoaXNbYXRdPXthcnJheTpzfX1hZGQoKXtyZXR1cm4gdGhpc31kZWxldGUoKXtyZXR1cm4hMX1jbGVhcigpe31oYXMocyl7cmV0dXJuIHR5cGVvZiBzPT1cInN0cmluZ1wiPyhzPXMucmVwbGFjZShHQSxcIi1cIiksbmYudGVzdChzKT8ocz1zLnJlcGxhY2UoSEEsXCJcIiksdGhpc1thdF0uYXJyYXkuaW5jbHVkZXMocykpOnIuaW5jbHVkZXMocykpOiExfWVudHJpZXMoKXtyZXR1cm4gdGhpc1thdF0uc2V0Pz89bmV3IFNldCh0aGlzW2F0XS5hcnJheSksdGhpc1thdF0uc2V0LmVudHJpZXMoKX1mb3JFYWNoKHMsaT12b2lkIDApe3RoaXNbYXRdLmFycmF5LmZvckVhY2goYz0+UmVmbGVjdC5hcHBseShzLGksW2MsYyx0aGlzXSkpfWdldCBzaXplKCl7cmV0dXJuIHRoaXNbYXRdLmFycmF5Lmxlbmd0aH12YWx1ZXMoKXtyZXR1cm4gdGhpc1thdF0uc2V0Pz89bmV3IFNldCh0aGlzW2F0XS5hcnJheSksdGhpc1thdF0uc2V0LnZhbHVlcygpfX1yZXR1cm4gbi5wcm90b3R5cGUua2V5cz1uLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPW4ucHJvdG90eXBlLnZhbHVlcyxPYmplY3QuZnJlZXplKG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yKSxPYmplY3QuZnJlZXplKG4ucHJvdG90eXBlKSxPYmplY3QuZnJlZXplKG5ldyBuKGUpKX12YXIgYXQsR0EsbmYsSEEsc2Y9cCgoKT0+e2F0PVN5bWJvbChcImludGVybmFsIHByb3BlcnRpZXNcIiksR0E9L18vZyxuZj0vXi0tPy8sSEE9Lz0uKiQvfSk7ZnVuY3Rpb24gYWYoZSx0LHI9ITApe2xldCBuPW5FKHQpO24mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkLGUse3dyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOnIsdmFsdWU6bn0pfWZ1bmN0aW9uIGpBKGUsdCxyLG4sbyl7RGUodHlwZW9mIGU9PVwic3RyaW5nXCIpO2xldCBzPW5ldyBFcnJvcihlKTtyZXR1cm4gcy5uYW1lPVN0cmluZyh0fHxcIldhcm5pbmdcIiksciE9PXZvaWQgMCYmKHMuY29kZT1yKSxvIT09dm9pZCAwJiYocy5kZXRhaWw9byksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UocyxufHwkLmVtaXRXYXJuaW5nKSxzfWZ1bmN0aW9uIFhBKGUpeyQuZW1pdChcIndhcm5pbmdcIixlKX1mdW5jdGlvbiB6QShlLHQscixuKXtsZXQgbztpZih0IT09bnVsbCYmdHlwZW9mIHQ9PVwib2JqZWN0XCImJiFBcnJheS5pc0FycmF5KHQpPyhuPXQuY3RvcixyPXQuY29kZSx0eXBlb2YgdC5kZXRhaWw9PVwic3RyaW5nXCImJihvPXQuZGV0YWlsKSx0PXQudHlwZXx8XCJXYXJuaW5nXCIpOnR5cGVvZiB0PT1cImZ1bmN0aW9uXCImJihuPXQscj12b2lkIDAsdD1cIldhcm5pbmdcIiksdCE9PXZvaWQgMCYmRXIodCxcInR5cGVcIiksdHlwZW9mIHI9PVwiZnVuY3Rpb25cIj8obj1yLHI9dm9pZCAwKTpyIT09dm9pZCAwJiZFcihyLFwiY29kZVwiKSx0eXBlb2YgZT09XCJzdHJpbmdcIillPWpBKGUsdCxyLG4sbyk7ZWxzZSBpZighKGUgaW5zdGFuY2VvZiBFcnJvcikpdGhyb3cgbmV3IEgoXCJ3YXJuaW5nXCIsW1wiRXJyb3JcIixcInN0cmluZ1wiXSxlKTtpZihlLm5hbWU9PT1cIkRlcHJlY2F0aW9uV2FybmluZ1wiKXtpZigkLm5vRGVwcmVjYXRpb24pcmV0dXJuO2lmKCQudGhyb3dEZXByZWNhdGlvbilyZXR1cm4gJC5uZXh0VGljaygoKT0+e3Rocm93IGV9KX0kLm5leHRUaWNrKFhBLGUpfWZ1bmN0aW9uIG5hKGUpe2xldCB0PXBlcmZvcm1hbmNlLm5vdygpLHI9TWF0aC5mbG9vcih0LzFlMyksbj1NYXRoLmZsb29yKHQqMWU2LXIqMWU5KTtpZighZSlyZXR1cm5bcixuXTtsZXRbbyxzXT1lO3JldHVybltyLW8sbi1zXX1mdW5jdGlvbiBvYSgpe3JldHVybnsuLi5EZW5vLm1lbW9yeVVzYWdlKCksYXJyYXlCdWZmZXJzOjB9fWZ1bmN0aW9uIFFBKGUsdD1cIlNJR1RFUk1cIil7aWYoZSE9KGV8MCkpdGhyb3cgbmV3IEgoXCJwaWRcIixcIm51bWJlclwiLGUpO2lmKHR5cGVvZiB0PT1cInN0cmluZ1wiKXRyeXtEZW5vLmtpbGwoZSx0KX1jYXRjaChyKXt0aHJvdyByIGluc3RhbmNlb2YgVHlwZUVycm9yP25ldyBvbih0KTpyfWVsc2UgdGhyb3cgbmV3IG9uKHQudG9TdHJpbmcoKSk7cmV0dXJuITB9ZnVuY3Rpb24gY2YoZSx0KXskLmVtaXQoXCJ1bmNhdWdodEV4Y2VwdGlvbk1vbml0b3JcIixlLHQpLCQuZW1pdChcInVuY2F1Z2h0RXhjZXB0aW9uXCIsZSx0KX12YXIgJEEsdkEsWUEsTG4sb3MsS0Esc2EsJCxEeSx5eSxzcyxSZj1wKCgpPT57V3QoKTtVZSgpO2FuKCk7eWUoKTtfZSgpO29FKCk7YXIoKTtwRSgpO1N0KCk7WnMoKTtBdSgpO3FzKCk7anIoKTtyZigpO3NmKCk7JEE9T3UsdkE9amUsWUE9U3UsTG49W1wiZGlzY29ubmVjdFwiLFwibWVzc2FnZVwiLFwibXVsdGlwbGVSZXNvbHZlc1wiLFwicmVqZWN0aW9uSGFuZGxlZFwiLFwid29ya2VyXCJdLG9zPVtcIlwiLFwiXCIsLi4uRGVuby5hcmdzXTtPYmplY3QuZGVmaW5lUHJvcGVydHkob3MsXCIwXCIse2dldDpEZW5vLmV4ZWNQYXRofSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9zLFwiMVwiLHtnZXQ6KCk9PkRlbm8ubWFpbk1vZHVsZS5zdGFydHNXaXRoKFwiZmlsZTpcIik/X0UoRGVuby5tYWluTW9kdWxlKTpmRShEZW5vLmN3ZCgpLFwiJGRlbm8kbm9kZS5qc1wiKX0pO0tBPWU9PntpZihlfHxlPT09MClpZih0eXBlb2YgZT09XCJzdHJpbmdcIil7bGV0IHQ9cGFyc2VJbnQoZSk7JC5leGl0Q29kZT1pc05hTih0KT92b2lkIDA6dH1lbHNlICQuZXhpdENvZGU9ZTskLl9leGl0aW5nfHwoJC5fZXhpdGluZz0hMCwkLmVtaXQoXCJleGl0XCIsJC5leGl0Q29kZXx8MCkpLERlbm8uZXhpdCgkLmV4aXRDb2RlfHwwKX07bmEuYmlnaW50PWZ1bmN0aW9uKCl7bGV0W2UsdF09bmEoKTtyZXR1cm4gQmlnSW50KGUpKjEwMDAwMDAwMDBuK0JpZ0ludCh0KX07b2EucnNzPWZ1bmN0aW9uKCl7cmV0dXJuIG9hKCkucnNzfTtzYT1jbGFzcyBleHRlbmRzIGJ7Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMuYXJjaD1kRTt0aGlzLmFyZ3Y9b3M7dGhpcy5jaGRpcj1oRTt0aGlzLmNvbmZpZz17dGFyZ2V0X2RlZmF1bHRzOnt9LHZhcmlhYmxlczp7fX07dGhpcy5jd2Q9T0U7dGhpcy5lbnY9U0U7dGhpcy5leGVjQXJndj1bXTt0aGlzLmV4aXQ9S0E7dGhpcy5fZXhpdGluZz1vbzt0aGlzLmV4aXRDb2RlPXZvaWQgMDt0aGlzLm1haW5Nb2R1bGU9dm9pZCAwO3RoaXMubmV4dFRpY2s9eTt0aGlzLnBpZD1BRTt0aGlzLnBsYXRmb3JtPU5FO3RoaXMuaHJ0aW1lPW5hO3RoaXMua2lsbD1RQTt0aGlzLm1lbW9yeVVzYWdlPW9hO3RoaXMuc3RkZXJyPSRBO3RoaXMuc3RkaW49dkE7dGhpcy5zdGRvdXQ9WUE7dGhpcy52ZXJzaW9uPXhFO3RoaXMudmVyc2lvbnM9VEU7dGhpcy5lbWl0V2FybmluZz16QTt0aGlzLl9ldmFsPXZvaWQgMDt0aGlzLiN0PURhdGUubm93KCk7dGhpcy4jcj1vZigpO3RoaXMuZmVhdHVyZXM9e2luc3BlY3RvcjohMX07Z2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIscj0+e2lmKCQubGlzdGVuZXJDb3VudChcInVuaGFuZGxlZFJlamVjdGlvblwiKT09PTApe2lmKCQubGlzdGVuZXJDb3VudChcInVuY2F1Z2h0RXhjZXB0aW9uXCIpPT09MCl0aHJvdyByLnJlYXNvbjtyLnByZXZlbnREZWZhdWx0KCksY2Yoci5yZWFzb24sXCJ1bmhhbmRsZWRSZWplY3Rpb25cIik7cmV0dXJufXIucHJldmVudERlZmF1bHQoKSwkLmVtaXQoXCJ1bmhhbmRsZWRSZWplY3Rpb25cIixyLnJlYXNvbixyLnByb21pc2UpfSksZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixyPT57JC5saXN0ZW5lckNvdW50KFwidW5jYXVnaHRFeGNlcHRpb25cIik+MCYmci5wcmV2ZW50RGVmYXVsdCgpLGNmKHIuZXJyb3IsXCJ1bmNhdWdodEV4Y2VwdGlvblwiKX0pLGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLHI9PntzdXBlci5lbWl0KFwiYmVmb3JlRXhpdFwiLCQuZXhpdENvZGV8fDApLGFvKCksQWUuZXZlbnRMb29wSGFzTW9yZVdvcmsoKSYmci5wcmV2ZW50RGVmYXVsdCgpfSksZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKFwidW5sb2FkXCIsKCk9PnskLl9leGl0aW5nfHwoJC5fZXhpdGluZz0hMCxzdXBlci5lbWl0KFwiZXhpdFwiLCQuZXhpdENvZGV8fDApKX0pfW9uKHIsbil7cmV0dXJuIExuLmluY2x1ZGVzKHIpPyhScihgcHJvY2Vzcy5vbihcIiR7cn1cIilgKSxzdXBlci5vbihyLG4pKTpyLnN0YXJ0c1dpdGgoXCJTSUdcIik/cj09PVwiU0lHQlJFQUtcIiYmRGVuby5idWlsZC5vcyE9PVwid2luZG93c1wifHxkcyhyLG4pOnN1cGVyLm9uKHIsbiksdGhpc31vZmYocixuKXtyZXR1cm4gTG4uaW5jbHVkZXMocik/KFJyKGBwcm9jZXNzLm9mZihcIiR7cn1cIilgKSxzdXBlci5vZmYocixuKSk6ci5zdGFydHNXaXRoKFwiU0lHXCIpP3I9PT1cIlNJR0JSRUFLXCImJkRlbm8uYnVpbGQub3MhPT1cIndpbmRvd3NcInx8ZGEocixuKTpzdXBlci5vZmYocixuKSx0aGlzfWVtaXQociwuLi5uKXtpZihyLnN0YXJ0c1dpdGgoXCJTSUdcIikpcj09PVwiU0lHQlJFQUtcIiYmRGVuby5idWlsZC5vcyE9PVwid2luZG93c1wifHxEZW5vLmtpbGwoRGVuby5waWQscik7ZWxzZSByZXR1cm4gc3VwZXIuZW1pdChyLC4uLm4pO3JldHVybiEwfXByZXBlbmRMaXN0ZW5lcihyLG4pe3JldHVybiBMbi5pbmNsdWRlcyhyKT8oUnIoYHByb2Nlc3MucHJlcGVuZExpc3RlbmVyKFwiJHtyfVwiKWApLHN1cGVyLnByZXBlbmRMaXN0ZW5lcihyLG4pKTpyLnN0YXJ0c1dpdGgoXCJTSUdcIik/cj09PVwiU0lHQlJFQUtcIiYmRGVuby5idWlsZC5vcyE9PVwid2luZG93c1wifHxkcyhyLG4pOnN1cGVyLnByZXBlbmRMaXN0ZW5lcihyLG4pLHRoaXN9YWRkTGlzdGVuZXIocixuKXtyZXR1cm4gTG4uaW5jbHVkZXMocikmJlJyKGBwcm9jZXNzLmFkZExpc3RlbmVyKFwiJHtyfVwiKWApLHRoaXMub24ocixuKX1yZW1vdmVMaXN0ZW5lcihyLG4pe3JldHVybiBMbi5pbmNsdWRlcyhyKSYmUnIoYHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoXCIke3J9XCIpYCksdGhpcy5vZmYocixuKX1iaW5kaW5nKHIpe3JldHVybiB0ZihyKX11bWFzaygpe3JldHVybiAxOH1nZXR1aWQoKXtyZXR1cm4gTmFOfWdldGdpZCgpe3JldHVybiBOYU59Z2V0IGV4ZWNQYXRoKCl7cmV0dXJuIG9zWzBdfSN0O3VwdGltZSgpe3JldHVybihEYXRlLm5vdygpLXRoaXMuI3QpLzFlM30jcjtnZXQgYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzKCl7cmV0dXJuIHRoaXMuI3J9fSwkPW5ldyBzYTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJCxTeW1ib2wudG9TdHJpbmdUYWcse2VudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLHZhbHVlOlwicHJvY2Vzc1wifSk7YWYoXCJub0RlcHJlY2F0aW9uXCIsXCItLW5vLWRlcHJlY2F0aW9uXCIpO2FmKFwidGhyb3dEZXByZWNhdGlvblwiLFwiLS10aHJvdy1kZXByZWNhdGlvblwiKTtEeT0kLnJlbW92ZUxpc3RlbmVyLHl5PSQucmVtb3ZlQWxsTGlzdGVuZXJzLHNzPSR9KTtmdW5jdGlvbiBmZihlLHQscixuKXtzd2l0Y2goZSl7Y2FzZS0yOnJldHVybiByPHQ7Y2FzZS0xOnJldHVybiBuPj10JiZyPHQ7Y2FzZSAwOnJldHVybiByPHQmJm4+dDtjYXNlIDE6cmV0dXJuIHI8PXQmJm4+dDtjYXNlIDI6cmV0dXJuIG4+dDtjYXNlIDQ6cmV0dXJuITB9fWZ1bmN0aW9uIHBmKGUsdCl7bGV0IHI9ZS5jaGlsZEJlZm9yZSh0KTtmb3IoO3I7KXtsZXQgbj1yLmxhc3RDaGlsZDtpZighbnx8bi50byE9ci50bylicmVhaztuLnR5cGUuaXNFcnJvciYmbi5mcm9tPT1uLnRvPyhlPXIscj1uLnByZXZTaWJsaW5nKTpyPW59cmV0dXJuIGV9ZnVuY3Rpb24gQnIoZSx0LHIsbil7Zm9yKHZhciBvO2UuZnJvbT09ZS50b3x8KHI8MT9lLmZyb20+PXQ6ZS5mcm9tPnQpfHwocj4tMT9lLnRvPD10OmUudG88dCk7KXtsZXQgaT0hbiYmZSBpbnN0YW5jZW9mIEJ0JiZlLmluZGV4PDA/bnVsbDplLnBhcmVudDtpZighaSlyZXR1cm4gZTtlPWl9bGV0IHM9bj8wOmFlLklnbm9yZU92ZXJsYXlzO2lmKG4pZm9yKGxldCBpPWUsYz1pLnBhcmVudDtjO2k9YyxjPWkucGFyZW50KWkgaW5zdGFuY2VvZiBCdCYmaS5pbmRleDwwJiYoKG89Yy5lbnRlcih0LHIscykpPT09bnVsbHx8bz09PXZvaWQgMD92b2lkIDA6by5mcm9tKSE9aS5mcm9tJiYoZT1jKTtmb3IoOzspe2xldCBpPWUuZW50ZXIodCxyLHMpO2lmKCFpKXJldHVybiBlO2U9aX19ZnVuY3Rpb24gYXMoZSx0LHIsbil7bGV0IG89ZS5jdXJzb3IoKSxzPVtdO2lmKCFvLmZpcnN0Q2hpbGQoKSlyZXR1cm4gcztpZihyIT1udWxsKXtmb3IoOyFvLnR5cGUuaXMocik7KWlmKCFvLm5leHRTaWJsaW5nKCkpcmV0dXJuIHN9Zm9yKDs7KXtpZihuIT1udWxsJiZvLnR5cGUuaXMobikpcmV0dXJuIHM7aWYoby50eXBlLmlzKHQpJiZzLnB1c2goby5ub2RlKSwhby5uZXh0U2libGluZygpKXJldHVybiBuPT1udWxsP3M6W119fWZ1bmN0aW9uIFJzKGUsdCxyPXQubGVuZ3RoLTEpe2ZvcihsZXQgbj1lLnBhcmVudDtyPj0wO249bi5wYXJlbnQpe2lmKCFuKXJldHVybiExO2lmKCFuLnR5cGUuaXNBbm9ueW1vdXMpe2lmKHRbcl0mJnRbcl0hPW4ubmFtZSlyZXR1cm4hMTtyLS19fXJldHVybiEwfWZ1bmN0aW9uIGFhKGUpe3JldHVybiBlLmNoaWxkcmVuLnNvbWUodD0+dCBpbnN0YW5jZW9mIEZyfHwhdC50eXBlLmlzQW5vbnltb3VzfHxhYSh0KSl9ZnVuY3Rpb24gZU4oZSl7dmFyIHQ7bGV0e2J1ZmZlcjpyLG5vZGVTZXQ6bixtYXhCdWZmZXJMZW5ndGg6bz0xMDI0LHJldXNlZDpzPVtdLG1pblJlcGVhdFR5cGU6aT1uLnR5cGVzLmxlbmd0aH09ZSxjPUFycmF5LmlzQXJyYXkocik/bmV3IF9mKHIsci5sZW5ndGgpOnIsYT1uLnR5cGVzLFI9MCxsPTA7ZnVuY3Rpb24gRShkLHgsVCxtLEYpe2xldHtpZDpHLHN0YXJ0OlAsZW5kOnosc2l6ZTpoZX09YyxIZT1sO2Zvcig7aGU8MDspaWYoYy5uZXh0KCksaGU9PS0xKXtsZXQgSXQ9c1tHXTtULnB1c2goSXQpLG0ucHVzaChQLWQpO3JldHVybn1lbHNlIGlmKGhlPT0tMyl7Uj1HO3JldHVybn1lbHNlIGlmKGhlPT0tNCl7bD1HO3JldHVybn1lbHNlIHRocm93IG5ldyBSYW5nZUVycm9yKGBVbnJlY29nbml6ZWQgcmVjb3JkIHNpemU6ICR7aGV9YCk7bGV0IHNyPWFbR10sVHQsUnQsZmE9UC1kO2lmKHotUDw9byYmKFJ0PVMoYy5wb3MteCxGKSkpe2xldCBJdD1uZXcgVWludDE2QXJyYXkoUnQuc2l6ZS1SdC5za2lwKSwkZT1jLnBvcy1SdC5zaXplLGx0PUl0Lmxlbmd0aDtmb3IoO2MucG9zPiRlOylsdD1CKFJ0LnN0YXJ0LEl0LGx0KTtUdD1uZXcgRnIoSXQsei1SdC5zdGFydCxuKSxmYT1SdC5zdGFydC1kfWVsc2V7bGV0IEl0PWMucG9zLWhlO2MubmV4dCgpO2xldCAkZT1bXSxsdD1bXSxGdD1HPj1pP0c6LTEsaXI9MCx3bj16O2Zvcig7Yy5wb3M+SXQ7KUZ0Pj0wJiZjLmlkPT1GdCYmYy5zaXplPj0wPyhjLmVuZDw9d24tbyYmKGYoJGUsbHQsUCxpcixjLmVuZCx3bixGdCxIZSksaXI9JGUubGVuZ3RoLHduPWMuZW5kKSxjLm5leHQoKSk6RShQLEl0LCRlLGx0LEZ0KTtpZihGdD49MCYmaXI+MCYmaXI8JGUubGVuZ3RoJiZmKCRlLGx0LFAsaXIsUCx3bixGdCxIZSksJGUucmV2ZXJzZSgpLGx0LnJldmVyc2UoKSxGdD4tMSYmaXI+MCl7bGV0IHBhPXUoc3IpO1R0PVJhKHNyLCRlLGx0LDAsJGUubGVuZ3RoLDAsei1QLHBhLHBhKX1lbHNlIFR0PUEoc3IsJGUsbHQsei1QLEhlLXopfVQucHVzaChUdCksbS5wdXNoKGZhKX1mdW5jdGlvbiB1KGQpe3JldHVybih4LFQsbSk9PntsZXQgRj0wLEc9eC5sZW5ndGgtMSxQLHo7aWYoRz49MCYmKFA9eFtHXSlpbnN0YW5jZW9mIG1lKXtpZighRyYmUC50eXBlPT1kJiZQLmxlbmd0aD09bSlyZXR1cm4gUDsoej1QLnByb3AoWC5sb29rQWhlYWQpKSYmKEY9VFtHXStQLmxlbmd0aCt6KX1yZXR1cm4gQShkLHgsVCxtLEYpfX1mdW5jdGlvbiBmKGQseCxULG0sRixHLFAseil7bGV0IGhlPVtdLEhlPVtdO2Zvcig7ZC5sZW5ndGg+bTspaGUucHVzaChkLnBvcCgpKSxIZS5wdXNoKHgucG9wKCkrVC1GKTtkLnB1c2goQShuLnR5cGVzW1BdLGhlLEhlLEctRix6LUcpKSx4LnB1c2goRi1UKX1mdW5jdGlvbiBBKGQseCxULG0sRj0wLEcpe2lmKFIpe2xldCBQPVtYLmNvbnRleHRIYXNoLFJdO0c9Rz9bUF0uY29uY2F0KEcpOltQXX1pZihGPjI1KXtsZXQgUD1bWC5sb29rQWhlYWQsRl07Rz1HP1tQXS5jb25jYXQoRyk6W1BdfXJldHVybiBuZXcgbWUoZCx4LFQsbSxHKX1mdW5jdGlvbiBTKGQseCl7bGV0IFQ9Yy5mb3JrKCksbT0wLEY9MCxHPTAsUD1ULmVuZC1vLHo9e3NpemU6MCxzdGFydDowLHNraXA6MH07ZTpmb3IobGV0IGhlPVQucG9zLWQ7VC5wb3M+aGU7KXtsZXQgSGU9VC5zaXplO2lmKFQuaWQ9PXgmJkhlPj0wKXt6LnNpemU9bSx6LnN0YXJ0PUYsei5za2lwPUcsRys9NCxtKz00LFQubmV4dCgpO2NvbnRpbnVlfWxldCBzcj1ULnBvcy1IZTtpZihIZTwwfHxzcjxoZXx8VC5zdGFydDxQKWJyZWFrO2xldCBUdD1ULmlkPj1pPzQ6MCxSdD1ULnN0YXJ0O2ZvcihULm5leHQoKTtULnBvcz5zcjspe2lmKFQuc2l6ZTwwKWlmKFQuc2l6ZT09LTMpVHQrPTQ7ZWxzZSBicmVhayBlO2Vsc2UgVC5pZD49aSYmKFR0Kz00KTtULm5leHQoKX1GPVJ0LG0rPUhlLEcrPVR0fXJldHVybih4PDB8fG09PWQpJiYoei5zaXplPW0sei5zdGFydD1GLHouc2tpcD1HKSx6LnNpemU+ND96OnZvaWQgMH1mdW5jdGlvbiBCKGQseCxUKXtsZXR7aWQ6bSxzdGFydDpGLGVuZDpHLHNpemU6UH09YztpZihjLm5leHQoKSxQPj0wJiZtPGkpe2xldCB6PVQ7aWYoUD40KXtsZXQgaGU9Yy5wb3MtKFAtNCk7Zm9yKDtjLnBvcz5oZTspVD1CKGQseCxUKX14Wy0tVF09eix4Wy0tVF09Ry1kLHhbLS1UXT1GLWQseFstLVRdPW19ZWxzZSBQPT0tMz9SPW06UD09LTQmJihsPW0pO3JldHVybiBUfWxldCBnPVtdLGg9W107Zm9yKDtjLnBvcz4wOylFKGUuc3RhcnR8fDAsZS5idWZmZXJTdGFydHx8MCxnLGgsLTEpO2xldCBPPSh0PWUubGVuZ3RoKSE9PW51bGwmJnQhPT12b2lkIDA/dDpnLmxlbmd0aD9oWzBdK2dbMF0ubGVuZ3RoOjA7cmV0dXJuIG5ldyBtZShhW2UudG9wSURdLGcucmV2ZXJzZSgpLGgucmV2ZXJzZSgpLE8pfWZ1bmN0aW9uIGNzKGUsdCl7aWYoIWUuaXNBbm9ueW1vdXN8fHQgaW5zdGFuY2VvZiBGcnx8dC50eXBlIT1lKXJldHVybiAxO2xldCByPUVmLmdldCh0KTtpZihyPT1udWxsKXtyPTE7Zm9yKGxldCBuIG9mIHQuY2hpbGRyZW4pe2lmKG4udHlwZSE9ZXx8IShuIGluc3RhbmNlb2YgbWUpKXtyPTE7YnJlYWt9cis9Y3MoZSxuKX1FZi5zZXQodCxyKX1yZXR1cm4gcn1mdW5jdGlvbiBSYShlLHQscixuLG8scyxpLGMsYSl7bGV0IFI9MDtmb3IobGV0IEE9bjtBPG87QSsrKVIrPWNzKGUsdFtBXSk7bGV0IGw9TWF0aC5jZWlsKFIqMS41LzgpLEU9W10sdT1bXTtmdW5jdGlvbiBmKEEsUyxCLGcsaCl7Zm9yKGxldCBPPUI7TzxnOyl7bGV0IGQ9Tyx4PVNbT10sVD1jcyhlLEFbT10pO2ZvcihPKys7TzxnO08rKyl7bGV0IG09Y3MoZSxBW09dKTtpZihUK20+PWwpYnJlYWs7VCs9bX1pZihPPT1kKzEpe2lmKFQ+bCl7bGV0IG09QVtkXTtmKG0uY2hpbGRyZW4sbS5wb3NpdGlvbnMsMCxtLmNoaWxkcmVuLmxlbmd0aCxTW2RdK2gpO2NvbnRpbnVlfUUucHVzaChBW2RdKX1lbHNle2xldCBtPVNbTy0xXStBW08tMV0ubGVuZ3RoLXg7RS5wdXNoKFJhKGUsQSxTLGQsTyx4LG0sbnVsbCxhKSl9dS5wdXNoKHgraC1zKX19cmV0dXJuIGYodCxyLG4sbywwKSwoY3x8YSkoRSx1LGkpfXZhciB1ZixxQSxpYSxYLFpBLFhlLGNhLGlzLGxmLGFlLG1lLF9mLEZyLEJ0LEpBLG9yLGxzLEVmLGRmLHROLEN5LGhmPXAoKCk9Pnt1Zj0xMDI0LHFBPTAsaWE9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZyb209ZSx0aGlzLnRvPXR9fSxYPWNsYXNze2NvbnN0cnVjdG9yKGU9e30pe3RoaXMuaWQ9cUErKyx0aGlzLnBlck5vZGU9ISFlLnBlck5vZGUsdGhpcy5kZXNlcmlhbGl6ZT1lLmRlc2VyaWFsaXplfHwoKCk9Pnt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG5vZGUgdHlwZSBkb2Vzbid0IGRlZmluZSBhIGRlc2VyaWFsaXplIGZ1bmN0aW9uXCIpfSl9YWRkKGUpe2lmKHRoaXMucGVyTm9kZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNhbid0IGFkZCBwZXItbm9kZSBwcm9wcyB0byBub2RlIHR5cGVzXCIpO3JldHVybiB0eXBlb2YgZSE9XCJmdW5jdGlvblwiJiYoZT1YZS5tYXRjaChlKSksdD0+e2xldCByPWUodCk7cmV0dXJuIHI9PT12b2lkIDA/bnVsbDpbdGhpcyxyXX19fTtYLmNsb3NlZEJ5PW5ldyBYKHtkZXNlcmlhbGl6ZTplPT5lLnNwbGl0KFwiIFwiKX0pO1gub3BlbmVkQnk9bmV3IFgoe2Rlc2VyaWFsaXplOmU9PmUuc3BsaXQoXCIgXCIpfSk7WC5ncm91cD1uZXcgWCh7ZGVzZXJpYWxpemU6ZT0+ZS5zcGxpdChcIiBcIil9KTtYLmNvbnRleHRIYXNoPW5ldyBYKHtwZXJOb2RlOiEwfSk7WC5sb29rQWhlYWQ9bmV3IFgoe3Blck5vZGU6ITB9KTtYLm1vdW50ZWQ9bmV3IFgoe3Blck5vZGU6ITB9KTtaQT1PYmplY3QuY3JlYXRlKG51bGwpLFhlPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLG49MCl7dGhpcy5uYW1lPWUsdGhpcy5wcm9wcz10LHRoaXMuaWQ9cix0aGlzLmZsYWdzPW59c3RhdGljIGRlZmluZShlKXtsZXQgdD1lLnByb3BzJiZlLnByb3BzLmxlbmd0aD9PYmplY3QuY3JlYXRlKG51bGwpOlpBLHI9KGUudG9wPzE6MCl8KGUuc2tpcHBlZD8yOjApfChlLmVycm9yPzQ6MCl8KGUubmFtZT09bnVsbD84OjApLG49bmV3IFhlKGUubmFtZXx8XCJcIix0LGUuaWQscik7aWYoZS5wcm9wcyl7Zm9yKGxldCBvIG9mIGUucHJvcHMpaWYoQXJyYXkuaXNBcnJheShvKXx8KG89byhuKSksbyl7aWYob1swXS5wZXJOb2RlKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQ2FuJ3Qgc3RvcmUgYSBwZXItbm9kZSBwcm9wIG9uIGEgbm9kZSB0eXBlXCIpO3Rbb1swXS5pZF09b1sxXX19cmV0dXJuIG59cHJvcChlKXtyZXR1cm4gdGhpcy5wcm9wc1tlLmlkXX1nZXQgaXNUb3AoKXtyZXR1cm4odGhpcy5mbGFncyYxKT4wfWdldCBpc1NraXBwZWQoKXtyZXR1cm4odGhpcy5mbGFncyYyKT4wfWdldCBpc0Vycm9yKCl7cmV0dXJuKHRoaXMuZmxhZ3MmNCk+MH1nZXQgaXNBbm9ueW1vdXMoKXtyZXR1cm4odGhpcy5mbGFncyY4KT4wfWlzKGUpe2lmKHR5cGVvZiBlPT1cInN0cmluZ1wiKXtpZih0aGlzLm5hbWU9PWUpcmV0dXJuITA7bGV0IHQ9dGhpcy5wcm9wKFguZ3JvdXApO3JldHVybiB0P3QuaW5kZXhPZihlKT4tMTohMX1yZXR1cm4gdGhpcy5pZD09ZX1zdGF0aWMgbWF0Y2goZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHIgaW4gZSlmb3IobGV0IG4gb2Ygci5zcGxpdChcIiBcIikpdFtuXT1lW3JdO3JldHVybiByPT57Zm9yKGxldCBuPXIucHJvcChYLmdyb3VwKSxvPS0xO288KG4/bi5sZW5ndGg6MCk7bysrKXtsZXQgcz10W288MD9yLm5hbWU6bltvXV07aWYocylyZXR1cm4gc319fX07WGUubm9uZT1uZXcgWGUoXCJcIixPYmplY3QuY3JlYXRlKG51bGwpLDAsOCk7Y2E9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy50eXBlcz1lO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKGVbdF0uaWQhPXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJOb2RlIHR5cGUgaWRzIHNob3VsZCBjb3JyZXNwb25kIHRvIGFycmF5IHBvc2l0aW9ucyB3aGVuIGNyZWF0aW5nIGEgbm9kZSBzZXRcIil9ZXh0ZW5kKC4uLmUpe2xldCB0PVtdO2ZvcihsZXQgciBvZiB0aGlzLnR5cGVzKXtsZXQgbj1udWxsO2ZvcihsZXQgbyBvZiBlKXtsZXQgcz1vKHIpO3MmJihufHwobj1PYmplY3QuYXNzaWduKHt9LHIucHJvcHMpKSxuW3NbMF0uaWRdPXNbMV0pfXQucHVzaChuP25ldyBYZShyLm5hbWUsbixyLmlkLHIuZmxhZ3MpOnIpfXJldHVybiBuZXcgY2EodCl9fSxpcz1uZXcgV2Vha01hcCxsZj1uZXcgV2Vha01hcDsoZnVuY3Rpb24oZSl7ZVtlLkV4Y2x1ZGVCdWZmZXJzPTFdPVwiRXhjbHVkZUJ1ZmZlcnNcIixlW2UuSW5jbHVkZUFub255bW91cz0yXT1cIkluY2x1ZGVBbm9ueW1vdXNcIixlW2UuSWdub3JlTW91bnRzPTRdPVwiSWdub3JlTW91bnRzXCIsZVtlLklnbm9yZU92ZXJsYXlzPThdPVwiSWdub3JlT3ZlcmxheXNcIn0pKGFlfHwoYWU9e30pKTttZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscixuLG8pe2lmKHRoaXMudHlwZT1lLHRoaXMuY2hpbGRyZW49dCx0aGlzLnBvc2l0aW9ucz1yLHRoaXMubGVuZ3RoPW4sdGhpcy5wcm9wcz1udWxsLG8mJm8ubGVuZ3RoKXt0aGlzLnByb3BzPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldFtzLGldb2Ygbyl0aGlzLnByb3BzW3R5cGVvZiBzPT1cIm51bWJlclwiP3M6cy5pZF09aX19dG9TdHJpbmcoKXtsZXQgZT10aGlzLnByb3AoWC5tb3VudGVkKTtpZihlJiYhZS5vdmVybGF5KXJldHVybiBlLnRyZWUudG9TdHJpbmcoKTtsZXQgdD1cIlwiO2ZvcihsZXQgciBvZiB0aGlzLmNoaWxkcmVuKXtsZXQgbj1yLnRvU3RyaW5nKCk7biYmKHQmJih0Kz1cIixcIiksdCs9bil9cmV0dXJuIHRoaXMudHlwZS5uYW1lPygvXFxXLy50ZXN0KHRoaXMudHlwZS5uYW1lKSYmIXRoaXMudHlwZS5pc0Vycm9yP0pTT04uc3RyaW5naWZ5KHRoaXMudHlwZS5uYW1lKTp0aGlzLnR5cGUubmFtZSkrKHQubGVuZ3RoP1wiKFwiK3QrXCIpXCI6XCJcIik6dH1jdXJzb3IoZT0wKXtyZXR1cm4gbmV3IGxzKHRoaXMudG9wTm9kZSxlKX1jdXJzb3JBdChlLHQ9MCxyPTApe2xldCBuPWlzLmdldCh0aGlzKXx8dGhpcy50b3BOb2RlLG89bmV3IGxzKG4pO3JldHVybiBvLm1vdmVUbyhlLHQpLGlzLnNldCh0aGlzLG8uX3RyZWUpLG99Z2V0IHRvcE5vZGUoKXtyZXR1cm4gbmV3IEJ0KHRoaXMsMCwwLG51bGwpfXJlc29sdmUoZSx0PTApe2xldCByPUJyKGlzLmdldCh0aGlzKXx8dGhpcy50b3BOb2RlLGUsdCwhMSk7cmV0dXJuIGlzLnNldCh0aGlzLHIpLHJ9cmVzb2x2ZUlubmVyKGUsdD0wKXtsZXQgcj1CcihsZi5nZXQodGhpcyl8fHRoaXMudG9wTm9kZSxlLHQsITApO3JldHVybiBsZi5zZXQodGhpcyxyKSxyfWl0ZXJhdGUoZSl7bGV0e2VudGVyOnQsbGVhdmU6cixmcm9tOm49MCx0bzpvPXRoaXMubGVuZ3RofT1lO2ZvcihsZXQgcz10aGlzLmN1cnNvcigoZS5tb2RlfHwwKXxhZS5JbmNsdWRlQW5vbnltb3VzKTs7KXtsZXQgaT0hMTtpZihzLmZyb208PW8mJnMudG8+PW4mJihzLnR5cGUuaXNBbm9ueW1vdXN8fHQocykhPT0hMSkpe2lmKHMuZmlyc3RDaGlsZCgpKWNvbnRpbnVlO2k9ITB9Zm9yKDtpJiZyJiYhcy50eXBlLmlzQW5vbnltb3VzJiZyKHMpLCFzLm5leHRTaWJsaW5nKCk7KXtpZighcy5wYXJlbnQoKSlyZXR1cm47aT0hMH19fXByb3AoZSl7cmV0dXJuIGUucGVyTm9kZT90aGlzLnByb3BzP3RoaXMucHJvcHNbZS5pZF06dm9pZCAwOnRoaXMudHlwZS5wcm9wKGUpfWdldCBwcm9wVmFsdWVzKCl7bGV0IGU9W107aWYodGhpcy5wcm9wcylmb3IobGV0IHQgaW4gdGhpcy5wcm9wcyllLnB1c2goWyt0LHRoaXMucHJvcHNbdF1dKTtyZXR1cm4gZX1iYWxhbmNlKGU9e30pe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aDw9OD90aGlzOlJhKFhlLm5vbmUsdGhpcy5jaGlsZHJlbix0aGlzLnBvc2l0aW9ucywwLHRoaXMuY2hpbGRyZW4ubGVuZ3RoLDAsdGhpcy5sZW5ndGgsKHQscixuKT0+bmV3IG1lKHRoaXMudHlwZSx0LHIsbix0aGlzLnByb3BWYWx1ZXMpLGUubWFrZVRyZWV8fCgodCxyLG4pPT5uZXcgbWUoWGUubm9uZSx0LHIsbikpKX1zdGF0aWMgYnVpbGQoZSl7cmV0dXJuIGVOKGUpfX07bWUuZW1wdHk9bmV3IG1lKFhlLm5vbmUsW10sW10sMCk7X2Y9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmJ1ZmZlcj1lLHRoaXMuaW5kZXg9dH1nZXQgaWQoKXtyZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleC00XX1nZXQgc3RhcnQoKXtyZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleC0zXX1nZXQgZW5kKCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtMl19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5pbmRleC0xXX1nZXQgcG9zKCl7cmV0dXJuIHRoaXMuaW5kZXh9bmV4dCgpe3RoaXMuaW5kZXgtPTR9Zm9yaygpe3JldHVybiBuZXcgX2YodGhpcy5idWZmZXIsdGhpcy5pbmRleCl9fSxGcj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5idWZmZXI9ZSx0aGlzLmxlbmd0aD10LHRoaXMuc2V0PXJ9Z2V0IHR5cGUoKXtyZXR1cm4gWGUubm9uZX10b1N0cmluZygpe2xldCBlPVtdO2ZvcihsZXQgdD0wO3Q8dGhpcy5idWZmZXIubGVuZ3RoOyllLnB1c2godGhpcy5jaGlsZFN0cmluZyh0KSksdD10aGlzLmJ1ZmZlclt0KzNdO3JldHVybiBlLmpvaW4oXCIsXCIpfWNoaWxkU3RyaW5nKGUpe2xldCB0PXRoaXMuYnVmZmVyW2VdLHI9dGhpcy5idWZmZXJbZSszXSxuPXRoaXMuc2V0LnR5cGVzW3RdLG89bi5uYW1lO2lmKC9cXFcvLnRlc3QobykmJiFuLmlzRXJyb3ImJihvPUpTT04uc3RyaW5naWZ5KG8pKSxlKz00LHI9PWUpcmV0dXJuIG87bGV0IHM9W107Zm9yKDtlPHI7KXMucHVzaCh0aGlzLmNoaWxkU3RyaW5nKGUpKSxlPXRoaXMuYnVmZmVyW2UrM107cmV0dXJuIG8rXCIoXCIrcy5qb2luKFwiLFwiKStcIilcIn1maW5kQ2hpbGQoZSx0LHIsbixvKXtsZXR7YnVmZmVyOnN9PXRoaXMsaT0tMTtmb3IobGV0IGM9ZTtjIT10JiYhKGZmKG8sbixzW2MrMV0sc1tjKzJdKSYmKGk9YyxyPjApKTtjPXNbYyszXSk7cmV0dXJuIGl9c2xpY2UoZSx0LHIsbil7bGV0IG89dGhpcy5idWZmZXIscz1uZXcgVWludDE2QXJyYXkodC1lKTtmb3IobGV0IGk9ZSxjPTA7aTx0OylzW2MrK109b1tpKytdLHNbYysrXT1vW2krK10tcixzW2MrK109b1tpKytdLXIsc1tjKytdPW9baSsrXS1lO3JldHVybiBuZXcgRnIocyxuLXIsdGhpcy5zZXQpfX07QnQ9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIsbil7dGhpcy5fdHJlZT1lLHRoaXMuZnJvbT10LHRoaXMuaW5kZXg9cix0aGlzLl9wYXJlbnQ9bn1nZXQgdHlwZSgpe3JldHVybiB0aGlzLl90cmVlLnR5cGV9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fdHJlZS50eXBlLm5hbWV9Z2V0IHRvKCl7cmV0dXJuIHRoaXMuZnJvbSt0aGlzLl90cmVlLmxlbmd0aH1uZXh0Q2hpbGQoZSx0LHIsbixvPTApe2ZvcihsZXQgcz10aGlzOzspe2ZvcihsZXR7Y2hpbGRyZW46aSxwb3NpdGlvbnM6Y309cy5fdHJlZSxhPXQ+MD9pLmxlbmd0aDotMTtlIT1hO2UrPXQpe2xldCBSPWlbZV0sbD1jW2VdK3MuZnJvbTtpZihmZihuLHIsbCxsK1IubGVuZ3RoKSl7aWYoUiBpbnN0YW5jZW9mIEZyKXtpZihvJmFlLkV4Y2x1ZGVCdWZmZXJzKWNvbnRpbnVlO2xldCBFPVIuZmluZENoaWxkKDAsUi5idWZmZXIubGVuZ3RoLHQsci1sLG4pO2lmKEU+LTEpcmV0dXJuIG5ldyBvcihuZXcgSkEocyxSLGUsbCksbnVsbCxFKX1lbHNlIGlmKG8mYWUuSW5jbHVkZUFub255bW91c3x8IVIudHlwZS5pc0Fub255bW91c3x8YWEoUikpe2xldCBFO2lmKCEobyZhZS5JZ25vcmVNb3VudHMpJiZSLnByb3BzJiYoRT1SLnByb3AoWC5tb3VudGVkKSkmJiFFLm92ZXJsYXkpcmV0dXJuIG5ldyBCdChFLnRyZWUsbCxlLHMpO2xldCB1PW5ldyBCdChSLGwsZSxzKTtyZXR1cm4gbyZhZS5JbmNsdWRlQW5vbnltb3VzfHwhdS50eXBlLmlzQW5vbnltb3VzP3U6dS5uZXh0Q2hpbGQodDwwP1IuY2hpbGRyZW4ubGVuZ3RoLTE6MCx0LHIsbil9fX1pZihvJmFlLkluY2x1ZGVBbm9ueW1vdXN8fCFzLnR5cGUuaXNBbm9ueW1vdXN8fChzLmluZGV4Pj0wP2U9cy5pbmRleCt0OmU9dDwwPy0xOnMuX3BhcmVudC5fdHJlZS5jaGlsZHJlbi5sZW5ndGgscz1zLl9wYXJlbnQsIXMpKXJldHVybiBudWxsfX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLm5leHRDaGlsZCgwLDEsMCw0KX1nZXQgbGFzdENoaWxkKCl7cmV0dXJuIHRoaXMubmV4dENoaWxkKHRoaXMuX3RyZWUuY2hpbGRyZW4ubGVuZ3RoLTEsLTEsMCw0KX1jaGlsZEFmdGVyKGUpe3JldHVybiB0aGlzLm5leHRDaGlsZCgwLDEsZSwyKX1jaGlsZEJlZm9yZShlKXtyZXR1cm4gdGhpcy5uZXh0Q2hpbGQodGhpcy5fdHJlZS5jaGlsZHJlbi5sZW5ndGgtMSwtMSxlLC0yKX1lbnRlcihlLHQscj0wKXtsZXQgbjtpZighKHImYWUuSWdub3JlT3ZlcmxheXMpJiYobj10aGlzLl90cmVlLnByb3AoWC5tb3VudGVkKSkmJm4ub3ZlcmxheSl7bGV0IG89ZS10aGlzLmZyb207Zm9yKGxldHtmcm9tOnMsdG86aX1vZiBuLm92ZXJsYXkpaWYoKHQ+MD9zPD1vOnM8bykmJih0PDA/aT49bzppPm8pKXJldHVybiBuZXcgQnQobi50cmVlLG4ub3ZlcmxheVswXS5mcm9tK3RoaXMuZnJvbSwtMSx0aGlzKX1yZXR1cm4gdGhpcy5uZXh0Q2hpbGQoMCwxLGUsdCxyKX1uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKXtsZXQgZT10aGlzO2Zvcig7ZS50eXBlLmlzQW5vbnltb3VzJiZlLl9wYXJlbnQ7KWU9ZS5fcGFyZW50O3JldHVybiBlfWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKTpudWxsfWdldCBuZXh0U2libGluZygpe3JldHVybiB0aGlzLl9wYXJlbnQmJnRoaXMuaW5kZXg+PTA/dGhpcy5fcGFyZW50Lm5leHRDaGlsZCh0aGlzLmluZGV4KzEsMSwwLDQpOm51bGx9Z2V0IHByZXZTaWJsaW5nKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5pbmRleD49MD90aGlzLl9wYXJlbnQubmV4dENoaWxkKHRoaXMuaW5kZXgtMSwtMSwwLDQpOm51bGx9Y3Vyc29yKGU9MCl7cmV0dXJuIG5ldyBscyh0aGlzLGUpfWdldCB0cmVlKCl7cmV0dXJuIHRoaXMuX3RyZWV9dG9UcmVlKCl7cmV0dXJuIHRoaXMuX3RyZWV9cmVzb2x2ZShlLHQ9MCl7cmV0dXJuIEJyKHRoaXMsZSx0LCExKX1yZXNvbHZlSW5uZXIoZSx0PTApe3JldHVybiBCcih0aGlzLGUsdCwhMCl9ZW50ZXJVbmZpbmlzaGVkTm9kZXNCZWZvcmUoZSl7cmV0dXJuIHBmKHRoaXMsZSl9Z2V0Q2hpbGQoZSx0PW51bGwscj1udWxsKXtsZXQgbj1hcyh0aGlzLGUsdCxyKTtyZXR1cm4gbi5sZW5ndGg/blswXTpudWxsfWdldENoaWxkcmVuKGUsdD1udWxsLHI9bnVsbCl7cmV0dXJuIGFzKHRoaXMsZSx0LHIpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3RyZWUudG9TdHJpbmcoKX1nZXQgbm9kZSgpe3JldHVybiB0aGlzfW1hdGNoQ29udGV4dChlKXtyZXR1cm4gUnModGhpcyxlKX19O0pBPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMucGFyZW50PWUsdGhpcy5idWZmZXI9dCx0aGlzLmluZGV4PXIsdGhpcy5zdGFydD1ufX0sb3I9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuY29udGV4dD1lLHRoaXMuX3BhcmVudD10LHRoaXMuaW5kZXg9cix0aGlzLnR5cGU9ZS5idWZmZXIuc2V0LnR5cGVzW2UuYnVmZmVyLmJ1ZmZlcltyXV19Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy50eXBlLm5hbWV9Z2V0IGZyb20oKXtyZXR1cm4gdGhpcy5jb250ZXh0LnN0YXJ0K3RoaXMuY29udGV4dC5idWZmZXIuYnVmZmVyW3RoaXMuaW5kZXgrMV19Z2V0IHRvKCl7cmV0dXJuIHRoaXMuY29udGV4dC5zdGFydCt0aGlzLmNvbnRleHQuYnVmZmVyLmJ1ZmZlclt0aGlzLmluZGV4KzJdfWNoaWxkKGUsdCxyKXtsZXR7YnVmZmVyOm59PXRoaXMuY29udGV4dCxvPW4uZmluZENoaWxkKHRoaXMuaW5kZXgrNCxuLmJ1ZmZlclt0aGlzLmluZGV4KzNdLGUsdC10aGlzLmNvbnRleHQuc3RhcnQscik7cmV0dXJuIG88MD9udWxsOm5ldyBvcih0aGlzLmNvbnRleHQsdGhpcyxvKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkKDEsMCw0KX1nZXQgbGFzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGQoLTEsMCw0KX1jaGlsZEFmdGVyKGUpe3JldHVybiB0aGlzLmNoaWxkKDEsZSwyKX1jaGlsZEJlZm9yZShlKXtyZXR1cm4gdGhpcy5jaGlsZCgtMSxlLC0yKX1lbnRlcihlLHQscj0wKXtpZihyJmFlLkV4Y2x1ZGVCdWZmZXJzKXJldHVybiBudWxsO2xldHtidWZmZXI6bn09dGhpcy5jb250ZXh0LG89bi5maW5kQ2hpbGQodGhpcy5pbmRleCs0LG4uYnVmZmVyW3RoaXMuaW5kZXgrM10sdD4wPzE6LTEsZS10aGlzLmNvbnRleHQuc3RhcnQsdCk7cmV0dXJuIG88MD9udWxsOm5ldyBvcih0aGlzLmNvbnRleHQsdGhpcyxvKX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudHx8dGhpcy5jb250ZXh0LnBhcmVudC5uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKX1leHRlcm5hbFNpYmxpbmcoZSl7cmV0dXJuIHRoaXMuX3BhcmVudD9udWxsOnRoaXMuY29udGV4dC5wYXJlbnQubmV4dENoaWxkKHRoaXMuY29udGV4dC5pbmRleCtlLGUsMCw0KX1nZXQgbmV4dFNpYmxpbmcoKXtsZXR7YnVmZmVyOmV9PXRoaXMuY29udGV4dCx0PWUuYnVmZmVyW3RoaXMuaW5kZXgrM107cmV0dXJuIHQ8KHRoaXMuX3BhcmVudD9lLmJ1ZmZlclt0aGlzLl9wYXJlbnQuaW5kZXgrM106ZS5idWZmZXIubGVuZ3RoKT9uZXcgb3IodGhpcy5jb250ZXh0LHRoaXMuX3BhcmVudCx0KTp0aGlzLmV4dGVybmFsU2libGluZygxKX1nZXQgcHJldlNpYmxpbmcoKXtsZXR7YnVmZmVyOmV9PXRoaXMuY29udGV4dCx0PXRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuaW5kZXgrNDowO3JldHVybiB0aGlzLmluZGV4PT10P3RoaXMuZXh0ZXJuYWxTaWJsaW5nKC0xKTpuZXcgb3IodGhpcy5jb250ZXh0LHRoaXMuX3BhcmVudCxlLmZpbmRDaGlsZCh0LHRoaXMuaW5kZXgsLTEsMCw0KSl9Y3Vyc29yKGU9MCl7cmV0dXJuIG5ldyBscyh0aGlzLGUpfWdldCB0cmVlKCl7cmV0dXJuIG51bGx9dG9UcmVlKCl7bGV0IGU9W10sdD1bXSx7YnVmZmVyOnJ9PXRoaXMuY29udGV4dCxuPXRoaXMuaW5kZXgrNCxvPXIuYnVmZmVyW3RoaXMuaW5kZXgrM107aWYobz5uKXtsZXQgcz1yLmJ1ZmZlclt0aGlzLmluZGV4KzFdLGk9ci5idWZmZXJbdGhpcy5pbmRleCsyXTtlLnB1c2goci5zbGljZShuLG8scyxpKSksdC5wdXNoKDApfXJldHVybiBuZXcgbWUodGhpcy50eXBlLGUsdCx0aGlzLnRvLXRoaXMuZnJvbSl9cmVzb2x2ZShlLHQ9MCl7cmV0dXJuIEJyKHRoaXMsZSx0LCExKX1yZXNvbHZlSW5uZXIoZSx0PTApe3JldHVybiBCcih0aGlzLGUsdCwhMCl9ZW50ZXJVbmZpbmlzaGVkTm9kZXNCZWZvcmUoZSl7cmV0dXJuIHBmKHRoaXMsZSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jb250ZXh0LmJ1ZmZlci5jaGlsZFN0cmluZyh0aGlzLmluZGV4KX1nZXRDaGlsZChlLHQ9bnVsbCxyPW51bGwpe2xldCBuPWFzKHRoaXMsZSx0LHIpO3JldHVybiBuLmxlbmd0aD9uWzBdOm51bGx9Z2V0Q2hpbGRyZW4oZSx0PW51bGwscj1udWxsKXtyZXR1cm4gYXModGhpcyxlLHQscil9Z2V0IG5vZGUoKXtyZXR1cm4gdGhpc31tYXRjaENvbnRleHQoZSl7cmV0dXJuIFJzKHRoaXMsZSl9fSxscz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQ9MCl7aWYodGhpcy5tb2RlPXQsdGhpcy5idWZmZXI9bnVsbCx0aGlzLnN0YWNrPVtdLHRoaXMuaW5kZXg9MCx0aGlzLmJ1ZmZlck5vZGU9bnVsbCxlIGluc3RhbmNlb2YgQnQpdGhpcy55aWVsZE5vZGUoZSk7ZWxzZXt0aGlzLl90cmVlPWUuY29udGV4dC5wYXJlbnQsdGhpcy5idWZmZXI9ZS5jb250ZXh0O2ZvcihsZXQgcj1lLl9wYXJlbnQ7cjtyPXIuX3BhcmVudCl0aGlzLnN0YWNrLnVuc2hpZnQoci5pbmRleCk7dGhpcy5idWZmZXJOb2RlPWUsdGhpcy55aWVsZEJ1ZihlLmluZGV4KX19Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy50eXBlLm5hbWV9eWllbGROb2RlKGUpe3JldHVybiBlPyh0aGlzLl90cmVlPWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmZyb209ZS5mcm9tLHRoaXMudG89ZS50bywhMCk6ITF9eWllbGRCdWYoZSx0KXt0aGlzLmluZGV4PWU7bGV0e3N0YXJ0OnIsYnVmZmVyOm59PXRoaXMuYnVmZmVyO3JldHVybiB0aGlzLnR5cGU9dHx8bi5zZXQudHlwZXNbbi5idWZmZXJbZV1dLHRoaXMuZnJvbT1yK24uYnVmZmVyW2UrMV0sdGhpcy50bz1yK24uYnVmZmVyW2UrMl0sITB9eWllbGQoZSl7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIEJ0Pyh0aGlzLmJ1ZmZlcj1udWxsLHRoaXMueWllbGROb2RlKGUpKToodGhpcy5idWZmZXI9ZS5jb250ZXh0LHRoaXMueWllbGRCdWYoZS5pbmRleCxlLnR5cGUpKTohMX10b1N0cmluZygpe3JldHVybiB0aGlzLmJ1ZmZlcj90aGlzLmJ1ZmZlci5idWZmZXIuY2hpbGRTdHJpbmcodGhpcy5pbmRleCk6dGhpcy5fdHJlZS50b1N0cmluZygpfWVudGVyQ2hpbGQoZSx0LHIpe2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gdGhpcy55aWVsZCh0aGlzLl90cmVlLm5leHRDaGlsZChlPDA/dGhpcy5fdHJlZS5fdHJlZS5jaGlsZHJlbi5sZW5ndGgtMTowLGUsdCxyLHRoaXMubW9kZSkpO2xldHtidWZmZXI6bn09dGhpcy5idWZmZXIsbz1uLmZpbmRDaGlsZCh0aGlzLmluZGV4KzQsbi5idWZmZXJbdGhpcy5pbmRleCszXSxlLHQtdGhpcy5idWZmZXIuc3RhcnQscik7cmV0dXJuIG88MD8hMToodGhpcy5zdGFjay5wdXNoKHRoaXMuaW5kZXgpLHRoaXMueWllbGRCdWYobykpfWZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5lbnRlckNoaWxkKDEsMCw0KX1sYXN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5lbnRlckNoaWxkKC0xLDAsNCl9Y2hpbGRBZnRlcihlKXtyZXR1cm4gdGhpcy5lbnRlckNoaWxkKDEsZSwyKX1jaGlsZEJlZm9yZShlKXtyZXR1cm4gdGhpcy5lbnRlckNoaWxkKC0xLGUsLTIpfWVudGVyKGUsdCxyPXRoaXMubW9kZSl7cmV0dXJuIHRoaXMuYnVmZmVyP3ImYWUuRXhjbHVkZUJ1ZmZlcnM/ITE6dGhpcy5lbnRlckNoaWxkKDEsZSx0KTp0aGlzLnlpZWxkKHRoaXMuX3RyZWUuZW50ZXIoZSx0LHIpKX1wYXJlbnQoKXtpZighdGhpcy5idWZmZXIpcmV0dXJuIHRoaXMueWllbGROb2RlKHRoaXMubW9kZSZhZS5JbmNsdWRlQW5vbnltb3VzP3RoaXMuX3RyZWUuX3BhcmVudDp0aGlzLl90cmVlLnBhcmVudCk7aWYodGhpcy5zdGFjay5sZW5ndGgpcmV0dXJuIHRoaXMueWllbGRCdWYodGhpcy5zdGFjay5wb3AoKSk7bGV0IGU9dGhpcy5tb2RlJmFlLkluY2x1ZGVBbm9ueW1vdXM/dGhpcy5idWZmZXIucGFyZW50OnRoaXMuYnVmZmVyLnBhcmVudC5uZXh0U2lnbmlmaWNhbnRQYXJlbnQoKTtyZXR1cm4gdGhpcy5idWZmZXI9bnVsbCx0aGlzLnlpZWxkTm9kZShlKX1zaWJsaW5nKGUpe2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gdGhpcy5fdHJlZS5fcGFyZW50P3RoaXMueWllbGQodGhpcy5fdHJlZS5pbmRleDwwP251bGw6dGhpcy5fdHJlZS5fcGFyZW50Lm5leHRDaGlsZCh0aGlzLl90cmVlLmluZGV4K2UsZSwwLDQsdGhpcy5tb2RlKSk6ITE7bGV0e2J1ZmZlcjp0fT10aGlzLmJ1ZmZlcixyPXRoaXMuc3RhY2subGVuZ3RoLTE7aWYoZTwwKXtsZXQgbj1yPDA/MDp0aGlzLnN0YWNrW3JdKzQ7aWYodGhpcy5pbmRleCE9bilyZXR1cm4gdGhpcy55aWVsZEJ1Zih0LmZpbmRDaGlsZChuLHRoaXMuaW5kZXgsLTEsMCw0KSl9ZWxzZXtsZXQgbj10LmJ1ZmZlclt0aGlzLmluZGV4KzNdO2lmKG48KHI8MD90LmJ1ZmZlci5sZW5ndGg6dC5idWZmZXJbdGhpcy5zdGFja1tyXSszXSkpcmV0dXJuIHRoaXMueWllbGRCdWYobil9cmV0dXJuIHI8MD90aGlzLnlpZWxkKHRoaXMuYnVmZmVyLnBhcmVudC5uZXh0Q2hpbGQodGhpcy5idWZmZXIuaW5kZXgrZSxlLDAsNCx0aGlzLm1vZGUpKTohMX1uZXh0U2libGluZygpe3JldHVybiB0aGlzLnNpYmxpbmcoMSl9cHJldlNpYmxpbmcoKXtyZXR1cm4gdGhpcy5zaWJsaW5nKC0xKX1hdExhc3ROb2RlKGUpe2xldCB0LHIse2J1ZmZlcjpufT10aGlzO2lmKG4pe2lmKGU+MCl7aWYodGhpcy5pbmRleDxuLmJ1ZmZlci5idWZmZXIubGVuZ3RoKXJldHVybiExfWVsc2UgZm9yKGxldCBvPTA7bzx0aGlzLmluZGV4O28rKylpZihuLmJ1ZmZlci5idWZmZXJbbyszXTx0aGlzLmluZGV4KXJldHVybiExOyh7aW5kZXg6dCxwYXJlbnQ6cn09bil9ZWxzZSh7aW5kZXg6dCxfcGFyZW50OnJ9PXRoaXMuX3RyZWUpO2Zvcig7cjt7aW5kZXg6dCxfcGFyZW50OnJ9PXIpaWYodD4tMSlmb3IobGV0IG89dCtlLHM9ZTwwPy0xOnIuX3RyZWUuY2hpbGRyZW4ubGVuZ3RoO28hPXM7bys9ZSl7bGV0IGk9ci5fdHJlZS5jaGlsZHJlbltvXTtpZih0aGlzLm1vZGUmYWUuSW5jbHVkZUFub255bW91c3x8aSBpbnN0YW5jZW9mIEZyfHwhaS50eXBlLmlzQW5vbnltb3VzfHxhYShpKSlyZXR1cm4hMX1yZXR1cm4hMH1tb3ZlKGUsdCl7aWYodCYmdGhpcy5lbnRlckNoaWxkKGUsMCw0KSlyZXR1cm4hMDtmb3IoOzspe2lmKHRoaXMuc2libGluZyhlKSlyZXR1cm4hMDtpZih0aGlzLmF0TGFzdE5vZGUoZSl8fCF0aGlzLnBhcmVudCgpKXJldHVybiExfX1uZXh0KGU9ITApe3JldHVybiB0aGlzLm1vdmUoMSxlKX1wcmV2KGU9ITApe3JldHVybiB0aGlzLm1vdmUoLTEsZSl9bW92ZVRvKGUsdD0wKXtmb3IoOyh0aGlzLmZyb209PXRoaXMudG98fCh0PDE/dGhpcy5mcm9tPj1lOnRoaXMuZnJvbT5lKXx8KHQ+LTE/dGhpcy50bzw9ZTp0aGlzLnRvPGUpKSYmdGhpcy5wYXJlbnQoKTspO2Zvcig7dGhpcy5lbnRlckNoaWxkKDEsZSx0KTspO3JldHVybiB0aGlzfWdldCBub2RlKCl7aWYoIXRoaXMuYnVmZmVyKXJldHVybiB0aGlzLl90cmVlO2xldCBlPXRoaXMuYnVmZmVyTm9kZSx0PW51bGwscj0wO2lmKGUmJmUuY29udGV4dD09dGhpcy5idWZmZXIpe2U6Zm9yKGxldCBuPXRoaXMuaW5kZXgsbz10aGlzLnN0YWNrLmxlbmd0aDtvPj0wOyl7Zm9yKGxldCBzPWU7cztzPXMuX3BhcmVudClpZihzLmluZGV4PT1uKXtpZihuPT10aGlzLmluZGV4KXJldHVybiBzO3Q9cyxyPW8rMTticmVhayBlfW49dGhpcy5zdGFja1stLW9dfX1mb3IobGV0IG49cjtuPHRoaXMuc3RhY2subGVuZ3RoO24rKyl0PW5ldyBvcih0aGlzLmJ1ZmZlcix0LHRoaXMuc3RhY2tbbl0pO3JldHVybiB0aGlzLmJ1ZmZlck5vZGU9bmV3IG9yKHRoaXMuYnVmZmVyLHQsdGhpcy5pbmRleCl9Z2V0IHRyZWUoKXtyZXR1cm4gdGhpcy5idWZmZXI/bnVsbDp0aGlzLl90cmVlLl90cmVlfWl0ZXJhdGUoZSx0KXtmb3IobGV0IHI9MDs7KXtsZXQgbj0hMTtpZih0aGlzLnR5cGUuaXNBbm9ueW1vdXN8fGUodGhpcykhPT0hMSl7aWYodGhpcy5maXJzdENoaWxkKCkpe3IrKztjb250aW51ZX10aGlzLnR5cGUuaXNBbm9ueW1vdXN8fChuPSEwKX1mb3IoO24mJnQmJnQodGhpcyksbj10aGlzLnR5cGUuaXNBbm9ueW1vdXMsIXRoaXMubmV4dFNpYmxpbmcoKTspe2lmKCFyKXJldHVybjt0aGlzLnBhcmVudCgpLHItLSxuPSEwfX19bWF0Y2hDb250ZXh0KGUpe2lmKCF0aGlzLmJ1ZmZlcilyZXR1cm4gUnModGhpcy5ub2RlLGUpO2xldHtidWZmZXI6dH09dGhpcy5idWZmZXIse3R5cGVzOnJ9PXQuc2V0O2ZvcihsZXQgbj1lLmxlbmd0aC0xLG89dGhpcy5zdGFjay5sZW5ndGgtMTtuPj0wO28tLSl7aWYobzwwKXJldHVybiBScyh0aGlzLm5vZGUsZSxuKTtsZXQgcz1yW3QuYnVmZmVyW3RoaXMuc3RhY2tbb11dXTtpZighcy5pc0Fub255bW91cyl7aWYoZVtuXSYmZVtuXSE9cy5uYW1lKXJldHVybiExO24tLX19cmV0dXJuITB9fTtFZj1uZXcgV2Vha01hcDtkZj1jbGFzc3tzdGFydFBhcnNlKGUsdCxyKXtyZXR1cm4gdHlwZW9mIGU9PVwic3RyaW5nXCImJihlPW5ldyB0TihlKSkscj1yP3IubGVuZ3RoP3IubWFwKG49Pm5ldyBpYShuLmZyb20sbi50bykpOltuZXcgaWEoMCwwKV06W25ldyBpYSgwLGUubGVuZ3RoKV0sdGhpcy5jcmVhdGVQYXJzZShlLHR8fFtdLHIpfXBhcnNlKGUsdCxyKXtsZXQgbj10aGlzLnN0YXJ0UGFyc2UoZSx0LHIpO2Zvcig7Oyl7bGV0IG89bi5hZHZhbmNlKCk7aWYobylyZXR1cm4gb319fSx0Tj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnN0cmluZz1lfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5zdHJpbmcubGVuZ3RofWNodW5rKGUpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZShlKX1nZXQgbGluZUNodW5rcygpe3JldHVybiExfXJlYWQoZSx0KXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UoZSx0KX19LEN5PW5ldyBYKHtwZXJOb2RlOiEwfSl9KTtmdW5jdGlvbiBvTihlLHQscixuKXtsZXQgbz0wLHM9MTw8bix7cGFyc2VyOml9PXIucCx7ZGlhbGVjdDpjfT1pO2U6Zm9yKDsocyZlW29dKSE9MDspe2xldCBhPWVbbysxXTtmb3IobGV0IHU9byszO3U8YTt1Kz0yKWlmKChlW3UrMV0mcyk+MCl7bGV0IGY9ZVt1XTtpZihjLmFsbG93cyhmKSYmKHQudG9rZW4udmFsdWU9PS0xfHx0LnRva2VuLnZhbHVlPT1mfHxpLm92ZXJyaWRlcyhmLHQudG9rZW4udmFsdWUpKSl7dC5hY2NlcHRUb2tlbihmKTticmVha319bGV0IFI9dC5uZXh0LGw9MCxFPWVbbysyXTtpZih0Lm5leHQ8MCYmRT5sJiZlW2ErRSozLTNdPT02NTUzNSl7bz1lW2ErRSozLTFdO2NvbnRpbnVlIGV9Zm9yKDtsPEU7KXtsZXQgdT1sK0U+PjEsZj1hK3UrKHU8PDEpLEE9ZVtmXSxTPWVbZisxXTtpZihSPEEpRT11O2Vsc2UgaWYoUj49UylsPXUrMTtlbHNle289ZVtmKzJdLHQuYWR2YW5jZSgpO2NvbnRpbnVlIGV9fWJyZWFrfX1mdW5jdGlvbiBFcyhlLHQ9VWludDE2QXJyYXkpe2lmKHR5cGVvZiBlIT1cInN0cmluZ1wiKXJldHVybiBlO2xldCByPW51bGw7Zm9yKGxldCBuPTAsbz0wO248ZS5sZW5ndGg7KXtsZXQgcz0wO2Zvcig7Oyl7bGV0IGk9ZS5jaGFyQ29kZUF0KG4rKyksYz0hMTtpZihpPT0xMjYpe3M9NjU1MzU7YnJlYWt9aT49OTImJmktLSxpPj0zNCYmaS0tO2xldCBhPWktMzI7aWYoYT49NDYmJihhLT00NixjPSEwKSxzKz1hLGMpYnJlYWs7cyo9NDZ9cj9yW28rK109czpyPW5ldyB0KHMpfXJldHVybiByfWZ1bmN0aW9uIHhmKGUsdCxyKXtsZXQgbj1lLmN1cnNvcihhZS5JbmNsdWRlQW5vbnltb3VzKTtmb3Iobi5tb3ZlVG8odCk7OylpZighKHI8MD9uLmNoaWxkQmVmb3JlKHQpOm4uY2hpbGRBZnRlcih0KSkpZm9yKDs7KXtpZigocjwwP24udG88dDpuLmZyb20+dCkmJiFuLnR5cGUuaXNFcnJvcilyZXR1cm4gcjwwP01hdGgubWF4KDAsTWF0aC5taW4obi50by0xLHQtMjUpKTpNYXRoLm1pbihlLmxlbmd0aCxNYXRoLm1heChuLmZyb20rMSx0KzI1KSk7aWYocjwwP24ucHJldlNpYmxpbmcoKTpuLm5leHRTaWJsaW5nKCkpYnJlYWs7aWYoIW4ucGFyZW50KCkpcmV0dXJuIHI8MD8wOmUubGVuZ3RofX1mdW5jdGlvbiBJZihlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKG4ucG9zPT1lLnBvcyYmbi5zYW1lU3RhdGUoZSkpe3Rbcl0uc2NvcmU8ZS5zY29yZSYmKHRbcl09ZSk7cmV0dXJufX10LnB1c2goZSl9ZnVuY3Rpb24geHQoZSx0KXtyZXR1cm4gZVt0XXxlW3QrMV08PDE2fWZ1bmN0aW9uIGdmKGUsdCxyKXtmb3IobGV0IG49dCxvOyhvPWVbbl0pIT02NTUzNTtuKyspaWYobz09cilyZXR1cm4gbi10O3JldHVybi0xfWZ1bmN0aW9uIGxOKGUpe2xldCB0PW51bGw7Zm9yKGxldCByIG9mIGUpe2xldCBuPXIucC5zdG9wcGVkQXQ7KHIucG9zPT1yLnAuc3RyZWFtLmVuZHx8biE9bnVsbCYmci5wb3M+bikmJnIucC5wYXJzZXIuc3RhdGVGbGFnKHIuc3RhdGUsMikmJighdHx8dC5zY29yZTxyLnNjb3JlKSYmKHQ9cil9cmV0dXJuIHR9ZnVuY3Rpb24gbWYoZSl7aWYoZS5leHRlcm5hbCl7bGV0IHQ9ZS5leHRlbmQ/MTowO3JldHVybihyLG4pPT5lLmV4dGVybmFsKHIsbik8PDF8dH1yZXR1cm4gZS5nZXR9dmFyIGZzLE9mLFNmLHJOLHVhLHVzLEFmLERmLF9zLG5OLHplLGxhLE5mLHNOLGlOLFRmLGNOLGFOLEVhLFJOLF9hLHlmPXAoKCk9PntSZigpO2hmKCk7ZnM9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIsbixvLHMsaSxjLGEsUj0wLGwpe3RoaXMucD1lLHRoaXMuc3RhY2s9dCx0aGlzLnN0YXRlPXIsdGhpcy5yZWR1Y2VQb3M9bix0aGlzLnBvcz1vLHRoaXMuc2NvcmU9cyx0aGlzLmJ1ZmZlcj1pLHRoaXMuYnVmZmVyQmFzZT1jLHRoaXMuY3VyQ29udGV4dD1hLHRoaXMubG9va0FoZWFkPVIsdGhpcy5wYXJlbnQ9bH10b1N0cmluZygpe3JldHVybmBbJHt0aGlzLnN0YWNrLmZpbHRlcigoZSx0KT0+dCUzPT0wKS5jb25jYXQodGhpcy5zdGF0ZSl9XUAke3RoaXMucG9zfSR7dGhpcy5zY29yZT9cIiFcIit0aGlzLnNjb3JlOlwiXCJ9YH1zdGF0aWMgc3RhcnQoZSx0LHI9MCl7bGV0IG49ZS5wYXJzZXIuY29udGV4dDtyZXR1cm4gbmV3IGZzKGUsW10sdCxyLHIsMCxbXSwwLG4/bmV3IE9mKG4sbi5zdGFydCk6bnVsbCwwLG51bGwpfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuY3VyQ29udGV4dD90aGlzLmN1ckNvbnRleHQuY29udGV4dDpudWxsfXB1c2hTdGF0ZShlLHQpe3RoaXMuc3RhY2sucHVzaCh0aGlzLnN0YXRlLHQsdGhpcy5idWZmZXJCYXNlK3RoaXMuYnVmZmVyLmxlbmd0aCksdGhpcy5zdGF0ZT1lfXJlZHVjZShlKXtsZXQgdD1lPj4xOSxyPWUmNjU1MzUse3BhcnNlcjpufT10aGlzLnAsbz1uLmR5bmFtaWNQcmVjZWRlbmNlKHIpO2lmKG8mJih0aGlzLnNjb3JlKz1vKSx0PT0wKXt0aGlzLnB1c2hTdGF0ZShuLmdldEdvdG8odGhpcy5zdGF0ZSxyLCEwKSx0aGlzLnJlZHVjZVBvcykscjxuLm1pblJlcGVhdFRlcm0mJnRoaXMuc3RvcmVOb2RlKHIsdGhpcy5yZWR1Y2VQb3MsdGhpcy5yZWR1Y2VQb3MsNCwhMCksdGhpcy5yZWR1Y2VDb250ZXh0KHIsdGhpcy5yZWR1Y2VQb3MpO3JldHVybn1sZXQgcz10aGlzLnN0YWNrLmxlbmd0aC0odC0xKSozLShlJjI2MjE0ND82OjApLGk9dGhpcy5zdGFja1tzLTJdLGM9dGhpcy5zdGFja1tzLTFdLGE9dGhpcy5idWZmZXJCYXNlK3RoaXMuYnVmZmVyLmxlbmd0aC1jO2lmKHI8bi5taW5SZXBlYXRUZXJtfHxlJjEzMTA3Mil7bGV0IFI9bi5zdGF0ZUZsYWcodGhpcy5zdGF0ZSwxKT90aGlzLnBvczp0aGlzLnJlZHVjZVBvczt0aGlzLnN0b3JlTm9kZShyLGksUixhKzQsITApfWlmKGUmMjYyMTQ0KXRoaXMuc3RhdGU9dGhpcy5zdGFja1tzXTtlbHNle2xldCBSPXRoaXMuc3RhY2tbcy0zXTt0aGlzLnN0YXRlPW4uZ2V0R290byhSLHIsITApfWZvcig7dGhpcy5zdGFjay5sZW5ndGg+czspdGhpcy5zdGFjay5wb3AoKTt0aGlzLnJlZHVjZUNvbnRleHQocixpKX1zdG9yZU5vZGUoZSx0LHIsbj00LG89ITEpe2lmKGU9PTAmJighdGhpcy5zdGFjay5sZW5ndGh8fHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV08dGhpcy5idWZmZXIubGVuZ3RoK3RoaXMuYnVmZmVyQmFzZSkpe2xldCBzPXRoaXMsaT10aGlzLmJ1ZmZlci5sZW5ndGg7aWYoaT09MCYmcy5wYXJlbnQmJihpPXMuYnVmZmVyQmFzZS1zLnBhcmVudC5idWZmZXJCYXNlLHM9cy5wYXJlbnQpLGk+MCYmcy5idWZmZXJbaS00XT09MCYmcy5idWZmZXJbaS0xXT4tMSl7aWYodD09cilyZXR1cm47aWYocy5idWZmZXJbaS0yXT49dCl7cy5idWZmZXJbaS0yXT1yO3JldHVybn19fWlmKCFvfHx0aGlzLnBvcz09cil0aGlzLmJ1ZmZlci5wdXNoKGUsdCxyLG4pO2Vsc2V7bGV0IHM9dGhpcy5idWZmZXIubGVuZ3RoO2lmKHM+MCYmdGhpcy5idWZmZXJbcy00XSE9MClmb3IoO3M+MCYmdGhpcy5idWZmZXJbcy0yXT5yOyl0aGlzLmJ1ZmZlcltzXT10aGlzLmJ1ZmZlcltzLTRdLHRoaXMuYnVmZmVyW3MrMV09dGhpcy5idWZmZXJbcy0zXSx0aGlzLmJ1ZmZlcltzKzJdPXRoaXMuYnVmZmVyW3MtMl0sdGhpcy5idWZmZXJbcyszXT10aGlzLmJ1ZmZlcltzLTFdLHMtPTQsbj40JiYobi09NCk7dGhpcy5idWZmZXJbc109ZSx0aGlzLmJ1ZmZlcltzKzFdPXQsdGhpcy5idWZmZXJbcysyXT1yLHRoaXMuYnVmZmVyW3MrM109bn19c2hpZnQoZSx0LHIpe2xldCBuPXRoaXMucG9zO2lmKGUmMTMxMDcyKXRoaXMucHVzaFN0YXRlKGUmNjU1MzUsdGhpcy5wb3MpO2Vsc2UgaWYoKGUmMjYyMTQ0KT09MCl7bGV0IG89ZSx7cGFyc2VyOnN9PXRoaXMucDsocj50aGlzLnBvc3x8dDw9cy5tYXhOb2RlKSYmKHRoaXMucG9zPXIscy5zdGF0ZUZsYWcobywxKXx8KHRoaXMucmVkdWNlUG9zPXIpKSx0aGlzLnB1c2hTdGF0ZShvLG4pLHRoaXMuc2hpZnRDb250ZXh0KHQsbiksdDw9cy5tYXhOb2RlJiZ0aGlzLmJ1ZmZlci5wdXNoKHQsbixyLDQpfWVsc2UgdGhpcy5wb3M9cix0aGlzLnNoaWZ0Q29udGV4dCh0LG4pLHQ8PXRoaXMucC5wYXJzZXIubWF4Tm9kZSYmdGhpcy5idWZmZXIucHVzaCh0LG4sciw0KX1hcHBseShlLHQscil7ZSY2NTUzNj90aGlzLnJlZHVjZShlKTp0aGlzLnNoaWZ0KGUsdCxyKX11c2VOb2RlKGUsdCl7bGV0IHI9dGhpcy5wLnJldXNlZC5sZW5ndGgtMTsocjwwfHx0aGlzLnAucmV1c2VkW3JdIT1lKSYmKHRoaXMucC5yZXVzZWQucHVzaChlKSxyKyspO2xldCBuPXRoaXMucG9zO3RoaXMucmVkdWNlUG9zPXRoaXMucG9zPW4rZS5sZW5ndGgsdGhpcy5wdXNoU3RhdGUodCxuKSx0aGlzLmJ1ZmZlci5wdXNoKHIsbix0aGlzLnJlZHVjZVBvcywtMSksdGhpcy5jdXJDb250ZXh0JiZ0aGlzLnVwZGF0ZUNvbnRleHQodGhpcy5jdXJDb250ZXh0LnRyYWNrZXIucmV1c2UodGhpcy5jdXJDb250ZXh0LmNvbnRleHQsZSx0aGlzLHRoaXMucC5zdHJlYW0ucmVzZXQodGhpcy5wb3MtZS5sZW5ndGgpKSl9c3BsaXQoKXtsZXQgZT10aGlzLHQ9ZS5idWZmZXIubGVuZ3RoO2Zvcig7dD4wJiZlLmJ1ZmZlclt0LTJdPmUucmVkdWNlUG9zOyl0LT00O2xldCByPWUuYnVmZmVyLnNsaWNlKHQpLG49ZS5idWZmZXJCYXNlK3Q7Zm9yKDtlJiZuPT1lLmJ1ZmZlckJhc2U7KWU9ZS5wYXJlbnQ7cmV0dXJuIG5ldyBmcyh0aGlzLnAsdGhpcy5zdGFjay5zbGljZSgpLHRoaXMuc3RhdGUsdGhpcy5yZWR1Y2VQb3MsdGhpcy5wb3MsdGhpcy5zY29yZSxyLG4sdGhpcy5jdXJDb250ZXh0LHRoaXMubG9va0FoZWFkLGUpfXJlY292ZXJCeURlbGV0ZShlLHQpe2xldCByPWU8PXRoaXMucC5wYXJzZXIubWF4Tm9kZTtyJiZ0aGlzLnN0b3JlTm9kZShlLHRoaXMucG9zLHQsNCksdGhpcy5zdG9yZU5vZGUoMCx0aGlzLnBvcyx0LHI/ODo0KSx0aGlzLnBvcz10aGlzLnJlZHVjZVBvcz10LHRoaXMuc2NvcmUtPTE5MH1jYW5TaGlmdChlKXtmb3IobGV0IHQ9bmV3IHJOKHRoaXMpOzspe2xldCByPXRoaXMucC5wYXJzZXIuc3RhdGVTbG90KHQuc3RhdGUsNCl8fHRoaXMucC5wYXJzZXIuaGFzQWN0aW9uKHQuc3RhdGUsZSk7aWYoKHImNjU1MzYpPT0wKXJldHVybiEwO2lmKHI9PTApcmV0dXJuITE7dC5yZWR1Y2Uocil9fXJlY292ZXJCeUluc2VydChlKXtpZih0aGlzLnN0YWNrLmxlbmd0aD49MzAwKXJldHVybltdO2xldCB0PXRoaXMucC5wYXJzZXIubmV4dFN0YXRlcyh0aGlzLnN0YXRlKTtpZih0Lmxlbmd0aD40PDwxfHx0aGlzLnN0YWNrLmxlbmd0aD49MTIwKXtsZXQgbj1bXTtmb3IobGV0IG89MCxzO288dC5sZW5ndGg7bys9Mikocz10W28rMV0pIT10aGlzLnN0YXRlJiZ0aGlzLnAucGFyc2VyLmhhc0FjdGlvbihzLGUpJiZuLnB1c2godFtvXSxzKTtpZih0aGlzLnN0YWNrLmxlbmd0aDwxMjApZm9yKGxldCBvPTA7bi5sZW5ndGg8NDw8MSYmbzx0Lmxlbmd0aDtvKz0yKXtsZXQgcz10W28rMV07bi5zb21lKChpLGMpPT5jJjEmJmk9PXMpfHxuLnB1c2godFtvXSxzKX10PW59bGV0IHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aCYmci5sZW5ndGg8NDtuKz0yKXtsZXQgbz10W24rMV07aWYobz09dGhpcy5zdGF0ZSljb250aW51ZTtsZXQgcz10aGlzLnNwbGl0KCk7cy5wdXNoU3RhdGUobyx0aGlzLnBvcykscy5zdG9yZU5vZGUoMCxzLnBvcyxzLnBvcyw0LCEwKSxzLnNoaWZ0Q29udGV4dCh0W25dLHRoaXMucG9zKSxzLnNjb3JlLT0yMDAsci5wdXNoKHMpfXJldHVybiByfWZvcmNlUmVkdWNlKCl7bGV0IGU9dGhpcy5wLnBhcnNlci5zdGF0ZVNsb3QodGhpcy5zdGF0ZSw1KTtpZigoZSY2NTUzNik9PTApcmV0dXJuITE7bGV0e3BhcnNlcjp0fT10aGlzLnA7aWYoIXQudmFsaWRBY3Rpb24odGhpcy5zdGF0ZSxlKSl7bGV0IHI9ZT4+MTksbj1lJjY1NTM1LG89dGhpcy5zdGFjay5sZW5ndGgtciozO2lmKG88MHx8dC5nZXRHb3RvKHRoaXMuc3RhY2tbb10sbiwhMSk8MClyZXR1cm4hMTt0aGlzLnN0b3JlTm9kZSgwLHRoaXMucmVkdWNlUG9zLHRoaXMucmVkdWNlUG9zLDQsITApLHRoaXMuc2NvcmUtPTEwMH1yZXR1cm4gdGhpcy5yZWR1Y2VQb3M9dGhpcy5wb3MsdGhpcy5yZWR1Y2UoZSksITB9Zm9yY2VBbGwoKXtmb3IoOyF0aGlzLnAucGFyc2VyLnN0YXRlRmxhZyh0aGlzLnN0YXRlLDIpOylpZighdGhpcy5mb3JjZVJlZHVjZSgpKXt0aGlzLnN0b3JlTm9kZSgwLHRoaXMucG9zLHRoaXMucG9zLDQsITApO2JyZWFrfXJldHVybiB0aGlzfWdldCBkZWFkRW5kKCl7aWYodGhpcy5zdGFjay5sZW5ndGghPTMpcmV0dXJuITE7bGV0e3BhcnNlcjplfT10aGlzLnA7cmV0dXJuIGUuZGF0YVtlLnN0YXRlU2xvdCh0aGlzLnN0YXRlLDEpXT09NjU1MzUmJiFlLnN0YXRlU2xvdCh0aGlzLnN0YXRlLDQpfXJlc3RhcnQoKXt0aGlzLnN0YXRlPXRoaXMuc3RhY2tbMF0sdGhpcy5zdGFjay5sZW5ndGg9MH1zYW1lU3RhdGUoZSl7aWYodGhpcy5zdGF0ZSE9ZS5zdGF0ZXx8dGhpcy5zdGFjay5sZW5ndGghPWUuc3RhY2subGVuZ3RoKXJldHVybiExO2ZvcihsZXQgdD0wO3Q8dGhpcy5zdGFjay5sZW5ndGg7dCs9MylpZih0aGlzLnN0YWNrW3RdIT1lLnN0YWNrW3RdKXJldHVybiExO3JldHVybiEwfWdldCBwYXJzZXIoKXtyZXR1cm4gdGhpcy5wLnBhcnNlcn1kaWFsZWN0RW5hYmxlZChlKXtyZXR1cm4gdGhpcy5wLnBhcnNlci5kaWFsZWN0LmZsYWdzW2VdfXNoaWZ0Q29udGV4dChlLHQpe3RoaXMuY3VyQ29udGV4dCYmdGhpcy51cGRhdGVDb250ZXh0KHRoaXMuY3VyQ29udGV4dC50cmFja2VyLnNoaWZ0KHRoaXMuY3VyQ29udGV4dC5jb250ZXh0LGUsdGhpcyx0aGlzLnAuc3RyZWFtLnJlc2V0KHQpKSl9cmVkdWNlQ29udGV4dChlLHQpe3RoaXMuY3VyQ29udGV4dCYmdGhpcy51cGRhdGVDb250ZXh0KHRoaXMuY3VyQ29udGV4dC50cmFja2VyLnJlZHVjZSh0aGlzLmN1ckNvbnRleHQuY29udGV4dCxlLHRoaXMsdGhpcy5wLnN0cmVhbS5yZXNldCh0KSkpfWVtaXRDb250ZXh0KCl7bGV0IGU9dGhpcy5idWZmZXIubGVuZ3RoLTE7KGU8MHx8dGhpcy5idWZmZXJbZV0hPS0zKSYmdGhpcy5idWZmZXIucHVzaCh0aGlzLmN1ckNvbnRleHQuaGFzaCx0aGlzLnJlZHVjZVBvcyx0aGlzLnJlZHVjZVBvcywtMyl9ZW1pdExvb2tBaGVhZCgpe2xldCBlPXRoaXMuYnVmZmVyLmxlbmd0aC0xOyhlPDB8fHRoaXMuYnVmZmVyW2VdIT0tNCkmJnRoaXMuYnVmZmVyLnB1c2godGhpcy5sb29rQWhlYWQsdGhpcy5yZWR1Y2VQb3MsdGhpcy5yZWR1Y2VQb3MsLTQpfXVwZGF0ZUNvbnRleHQoZSl7aWYoZSE9dGhpcy5jdXJDb250ZXh0LmNvbnRleHQpe2xldCB0PW5ldyBPZih0aGlzLmN1ckNvbnRleHQudHJhY2tlcixlKTt0Lmhhc2ghPXRoaXMuY3VyQ29udGV4dC5oYXNoJiZ0aGlzLmVtaXRDb250ZXh0KCksdGhpcy5jdXJDb250ZXh0PXR9fXNldExvb2tBaGVhZChlKXtlPnRoaXMubG9va0FoZWFkJiYodGhpcy5lbWl0TG9va0FoZWFkKCksdGhpcy5sb29rQWhlYWQ9ZSl9Y2xvc2UoKXt0aGlzLmN1ckNvbnRleHQmJnRoaXMuY3VyQ29udGV4dC50cmFja2VyLnN0cmljdCYmdGhpcy5lbWl0Q29udGV4dCgpLHRoaXMubG9va0FoZWFkPjAmJnRoaXMuZW1pdExvb2tBaGVhZCgpfX0sT2Y9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnRyYWNrZXI9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLmhhc2g9ZS5zdHJpY3Q/ZS5oYXNoKHQpOjB9fTsoZnVuY3Rpb24oZSl7ZVtlLkluc2VydD0yMDBdPVwiSW5zZXJ0XCIsZVtlLkRlbGV0ZT0xOTBdPVwiRGVsZXRlXCIsZVtlLlJlZHVjZT0xMDBdPVwiUmVkdWNlXCIsZVtlLk1heE5leHQ9NF09XCJNYXhOZXh0XCIsZVtlLk1heEluc2VydFN0YWNrRGVwdGg9MzAwXT1cIk1heEluc2VydFN0YWNrRGVwdGhcIixlW2UuRGFtcGVuSW5zZXJ0U3RhY2tEZXB0aD0xMjBdPVwiRGFtcGVuSW5zZXJ0U3RhY2tEZXB0aFwifSkoU2Z8fChTZj17fSkpO3JOPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RhcnQ9ZSx0aGlzLnN0YXRlPWUuc3RhdGUsdGhpcy5zdGFjaz1lLnN0YWNrLHRoaXMuYmFzZT10aGlzLnN0YWNrLmxlbmd0aH1yZWR1Y2UoZSl7bGV0IHQ9ZSY2NTUzNSxyPWU+PjE5O3I9PTA/KHRoaXMuc3RhY2s9PXRoaXMuc3RhcnQuc3RhY2smJih0aGlzLnN0YWNrPXRoaXMuc3RhY2suc2xpY2UoKSksdGhpcy5zdGFjay5wdXNoKHRoaXMuc3RhdGUsMCwwKSx0aGlzLmJhc2UrPTMpOnRoaXMuYmFzZS09KHItMSkqMztsZXQgbj10aGlzLnN0YXJ0LnAucGFyc2VyLmdldEdvdG8odGhpcy5zdGFja1t0aGlzLmJhc2UtM10sdCwhMCk7dGhpcy5zdGF0ZT1ufX0sdWE9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuc3RhY2s9ZSx0aGlzLnBvcz10LHRoaXMuaW5kZXg9cix0aGlzLmJ1ZmZlcj1lLmJ1ZmZlcix0aGlzLmluZGV4PT0wJiZ0aGlzLm1heWJlTmV4dCgpfXN0YXRpYyBjcmVhdGUoZSx0PWUuYnVmZmVyQmFzZStlLmJ1ZmZlci5sZW5ndGgpe3JldHVybiBuZXcgdWEoZSx0LHQtZS5idWZmZXJCYXNlKX1tYXliZU5leHQoKXtsZXQgZT10aGlzLnN0YWNrLnBhcmVudDtlIT1udWxsJiYodGhpcy5pbmRleD10aGlzLnN0YWNrLmJ1ZmZlckJhc2UtZS5idWZmZXJCYXNlLHRoaXMuc3RhY2s9ZSx0aGlzLmJ1ZmZlcj1lLmJ1ZmZlcil9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtNF19Z2V0IHN0YXJ0KCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtM119Z2V0IGVuZCgpe3JldHVybiB0aGlzLmJ1ZmZlclt0aGlzLmluZGV4LTJdfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMuaW5kZXgtMV19bmV4dCgpe3RoaXMuaW5kZXgtPTQsdGhpcy5wb3MtPTQsdGhpcy5pbmRleD09MCYmdGhpcy5tYXliZU5leHQoKX1mb3JrKCl7cmV0dXJuIG5ldyB1YSh0aGlzLnN0YWNrLHRoaXMucG9zLHRoaXMuaW5kZXgpfX0sdXM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0YXJ0PS0xLHRoaXMudmFsdWU9LTEsdGhpcy5lbmQ9LTEsdGhpcy5leHRlbmRlZD0tMSx0aGlzLmxvb2tBaGVhZD0wLHRoaXMubWFzaz0wLHRoaXMuY29udGV4dD0wfX0sQWY9bmV3IHVzLERmPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5pbnB1dD1lLHRoaXMucmFuZ2VzPXQsdGhpcy5jaHVuaz1cIlwiLHRoaXMuY2h1bmtPZmY9MCx0aGlzLmNodW5rMj1cIlwiLHRoaXMuY2h1bmsyUG9zPTAsdGhpcy5uZXh0PS0xLHRoaXMudG9rZW49QWYsdGhpcy5yYW5nZUluZGV4PTAsdGhpcy5wb3M9dGhpcy5jaHVua1Bvcz10WzBdLmZyb20sdGhpcy5yYW5nZT10WzBdLHRoaXMuZW5kPXRbdC5sZW5ndGgtMV0udG8sdGhpcy5yZWFkTmV4dCgpfXJlc29sdmVPZmZzZXQoZSx0KXtsZXQgcj10aGlzLnJhbmdlLG49dGhpcy5yYW5nZUluZGV4LG89dGhpcy5wb3MrZTtmb3IoO288ci5mcm9tOyl7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHM9dGhpcy5yYW5nZXNbLS1uXTtvLT1yLmZyb20tcy50byxyPXN9Zm9yKDt0PDA/bz5yLnRvOm8+PXIudG87KXtpZihuPT10aGlzLnJhbmdlcy5sZW5ndGgtMSlyZXR1cm4gbnVsbDtsZXQgcz10aGlzLnJhbmdlc1srK25dO28rPXMuZnJvbS1yLnRvLHI9c31yZXR1cm4gb31jbGlwUG9zKGUpe2lmKGU+PXRoaXMucmFuZ2UuZnJvbSYmZTx0aGlzLnJhbmdlLnRvKXJldHVybiBlO2ZvcihsZXQgdCBvZiB0aGlzLnJhbmdlcylpZih0LnRvPmUpcmV0dXJuIE1hdGgubWF4KGUsdC5mcm9tKTtyZXR1cm4gdGhpcy5lbmR9cGVlayhlKXtsZXQgdD10aGlzLmNodW5rT2ZmK2UscixuO2lmKHQ+PTAmJnQ8dGhpcy5jaHVuay5sZW5ndGgpcj10aGlzLnBvcytlLG49dGhpcy5jaHVuay5jaGFyQ29kZUF0KHQpO2Vsc2V7bGV0IG89dGhpcy5yZXNvbHZlT2Zmc2V0KGUsMSk7aWYobz09bnVsbClyZXR1cm4tMTtpZihyPW8scj49dGhpcy5jaHVuazJQb3MmJnI8dGhpcy5jaHVuazJQb3MrdGhpcy5jaHVuazIubGVuZ3RoKW49dGhpcy5jaHVuazIuY2hhckNvZGVBdChyLXRoaXMuY2h1bmsyUG9zKTtlbHNle2xldCBzPXRoaXMucmFuZ2VJbmRleCxpPXRoaXMucmFuZ2U7Zm9yKDtpLnRvPD1yOylpPXRoaXMucmFuZ2VzWysrc107dGhpcy5jaHVuazI9dGhpcy5pbnB1dC5jaHVuayh0aGlzLmNodW5rMlBvcz1yKSxyK3RoaXMuY2h1bmsyLmxlbmd0aD5pLnRvJiYodGhpcy5jaHVuazI9dGhpcy5jaHVuazIuc2xpY2UoMCxpLnRvLXIpKSxuPXRoaXMuY2h1bmsyLmNoYXJDb2RlQXQoMCl9fXJldHVybiByPj10aGlzLnRva2VuLmxvb2tBaGVhZCYmKHRoaXMudG9rZW4ubG9va0FoZWFkPXIrMSksbn1hY2NlcHRUb2tlbihlLHQ9MCl7bGV0IHI9dD90aGlzLnJlc29sdmVPZmZzZXQodCwtMSk6dGhpcy5wb3M7aWYocj09bnVsbHx8cjx0aGlzLnRva2VuLnN0YXJ0KXRocm93IG5ldyBSYW5nZUVycm9yKFwiVG9rZW4gZW5kIG91dCBvZiBib3VuZHNcIik7dGhpcy50b2tlbi52YWx1ZT1lLHRoaXMudG9rZW4uZW5kPXJ9Z2V0Q2h1bmsoKXtpZih0aGlzLnBvcz49dGhpcy5jaHVuazJQb3MmJnRoaXMucG9zPHRoaXMuY2h1bmsyUG9zK3RoaXMuY2h1bmsyLmxlbmd0aCl7bGV0e2NodW5rOmUsY2h1bmtQb3M6dH09dGhpczt0aGlzLmNodW5rPXRoaXMuY2h1bmsyLHRoaXMuY2h1bmtQb3M9dGhpcy5jaHVuazJQb3MsdGhpcy5jaHVuazI9ZSx0aGlzLmNodW5rMlBvcz10LHRoaXMuY2h1bmtPZmY9dGhpcy5wb3MtdGhpcy5jaHVua1Bvc31lbHNle3RoaXMuY2h1bmsyPXRoaXMuY2h1bmssdGhpcy5jaHVuazJQb3M9dGhpcy5jaHVua1BvcztsZXQgZT10aGlzLmlucHV0LmNodW5rKHRoaXMucG9zKSx0PXRoaXMucG9zK2UubGVuZ3RoO3RoaXMuY2h1bms9dD50aGlzLnJhbmdlLnRvP2Uuc2xpY2UoMCx0aGlzLnJhbmdlLnRvLXRoaXMucG9zKTplLHRoaXMuY2h1bmtQb3M9dGhpcy5wb3MsdGhpcy5jaHVua09mZj0wfX1yZWFkTmV4dCgpe3JldHVybiB0aGlzLmNodW5rT2ZmPj10aGlzLmNodW5rLmxlbmd0aCYmKHRoaXMuZ2V0Q2h1bmsoKSx0aGlzLmNodW5rT2ZmPT10aGlzLmNodW5rLmxlbmd0aCk/dGhpcy5uZXh0PS0xOnRoaXMubmV4dD10aGlzLmNodW5rLmNoYXJDb2RlQXQodGhpcy5jaHVua09mZil9YWR2YW5jZShlPTEpe2Zvcih0aGlzLmNodW5rT2ZmKz1lO3RoaXMucG9zK2U+PXRoaXMucmFuZ2UudG87KXtpZih0aGlzLnJhbmdlSW5kZXg9PXRoaXMucmFuZ2VzLmxlbmd0aC0xKXJldHVybiB0aGlzLnNldERvbmUoKTtlLT10aGlzLnJhbmdlLnRvLXRoaXMucG9zLHRoaXMucmFuZ2U9dGhpcy5yYW5nZXNbKyt0aGlzLnJhbmdlSW5kZXhdLHRoaXMucG9zPXRoaXMucmFuZ2UuZnJvbX1yZXR1cm4gdGhpcy5wb3MrPWUsdGhpcy5wb3M+PXRoaXMudG9rZW4ubG9va0FoZWFkJiYodGhpcy50b2tlbi5sb29rQWhlYWQ9dGhpcy5wb3MrMSksdGhpcy5yZWFkTmV4dCgpfXNldERvbmUoKXtyZXR1cm4gdGhpcy5wb3M9dGhpcy5jaHVua1Bvcz10aGlzLmVuZCx0aGlzLnJhbmdlPXRoaXMucmFuZ2VzW3RoaXMucmFuZ2VJbmRleD10aGlzLnJhbmdlcy5sZW5ndGgtMV0sdGhpcy5jaHVuaz1cIlwiLHRoaXMubmV4dD0tMX1yZXNldChlLHQpe2lmKHQ/KHRoaXMudG9rZW49dCx0LnN0YXJ0PWUsdC5sb29rQWhlYWQ9ZSsxLHQudmFsdWU9dC5leHRlbmRlZD0tMSk6dGhpcy50b2tlbj1BZix0aGlzLnBvcyE9ZSl7aWYodGhpcy5wb3M9ZSxlPT10aGlzLmVuZClyZXR1cm4gdGhpcy5zZXREb25lKCksdGhpcztmb3IoO2U8dGhpcy5yYW5nZS5mcm9tOyl0aGlzLnJhbmdlPXRoaXMucmFuZ2VzWy0tdGhpcy5yYW5nZUluZGV4XTtmb3IoO2U+PXRoaXMucmFuZ2UudG87KXRoaXMucmFuZ2U9dGhpcy5yYW5nZXNbKyt0aGlzLnJhbmdlSW5kZXhdO2U+PXRoaXMuY2h1bmtQb3MmJmU8dGhpcy5jaHVua1Bvcyt0aGlzLmNodW5rLmxlbmd0aD90aGlzLmNodW5rT2ZmPWUtdGhpcy5jaHVua1BvczoodGhpcy5jaHVuaz1cIlwiLHRoaXMuY2h1bmtPZmY9MCksdGhpcy5yZWFkTmV4dCgpfXJldHVybiB0aGlzfXJlYWQoZSx0KXtpZihlPj10aGlzLmNodW5rUG9zJiZ0PD10aGlzLmNodW5rUG9zK3RoaXMuY2h1bmsubGVuZ3RoKXJldHVybiB0aGlzLmNodW5rLnNsaWNlKGUtdGhpcy5jaHVua1Bvcyx0LXRoaXMuY2h1bmtQb3MpO2lmKGU+PXRoaXMuY2h1bmsyUG9zJiZ0PD10aGlzLmNodW5rMlBvcyt0aGlzLmNodW5rMi5sZW5ndGgpcmV0dXJuIHRoaXMuY2h1bmsyLnNsaWNlKGUtdGhpcy5jaHVuazJQb3MsdC10aGlzLmNodW5rMlBvcyk7aWYoZT49dGhpcy5yYW5nZS5mcm9tJiZ0PD10aGlzLnJhbmdlLnRvKXJldHVybiB0aGlzLmlucHV0LnJlYWQoZSx0KTtsZXQgcj1cIlwiO2ZvcihsZXQgbiBvZiB0aGlzLnJhbmdlcyl7aWYobi5mcm9tPj10KWJyZWFrO24udG8+ZSYmKHIrPXRoaXMuaW5wdXQucmVhZChNYXRoLm1heChuLmZyb20sZSksTWF0aC5taW4obi50byx0KSkpfXJldHVybiByfX0sX3M9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRhdGE9ZSx0aGlzLmlkPXR9dG9rZW4oZSx0KXtvTih0aGlzLmRhdGEsZSx0LHRoaXMuaWQpfX07X3MucHJvdG90eXBlLmNvbnRleHR1YWw9X3MucHJvdG90eXBlLmZhbGxiYWNrPV9zLnByb3RvdHlwZS5leHRlbmQ9ITE7bk49Y2xhc3N7Y29uc3RydWN0b3IoZSx0PXt9KXt0aGlzLnRva2VuPWUsdGhpcy5jb250ZXh0dWFsPSEhdC5jb250ZXh0dWFsLHRoaXMuZmFsbGJhY2s9ISF0LmZhbGxiYWNrLHRoaXMuZXh0ZW5kPSEhdC5leHRlbmR9fTt6ZT10eXBlb2Ygc3M8XCJ1XCImJnNzLmVudiYmL1xcYnBhcnNlXFxiLy50ZXN0KHNzLmVudi5MT0cpLGxhPW51bGw7KGZ1bmN0aW9uKGUpe2VbZS5NYXJnaW49MjVdPVwiTWFyZ2luXCJ9KShOZnx8KE5mPXt9KSk7c049Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZyYWdtZW50cz1lLHRoaXMubm9kZVNldD10LHRoaXMuaT0wLHRoaXMuZnJhZ21lbnQ9bnVsbCx0aGlzLnNhZmVGcm9tPS0xLHRoaXMuc2FmZVRvPS0xLHRoaXMudHJlZXM9W10sdGhpcy5zdGFydD1bXSx0aGlzLmluZGV4PVtdLHRoaXMubmV4dEZyYWdtZW50KCl9bmV4dEZyYWdtZW50KCl7bGV0IGU9dGhpcy5mcmFnbWVudD10aGlzLmk9PXRoaXMuZnJhZ21lbnRzLmxlbmd0aD9udWxsOnRoaXMuZnJhZ21lbnRzW3RoaXMuaSsrXTtpZihlKXtmb3IodGhpcy5zYWZlRnJvbT1lLm9wZW5TdGFydD94ZihlLnRyZWUsZS5mcm9tK2Uub2Zmc2V0LDEpLWUub2Zmc2V0OmUuZnJvbSx0aGlzLnNhZmVUbz1lLm9wZW5FbmQ/eGYoZS50cmVlLGUudG8rZS5vZmZzZXQsLTEpLWUub2Zmc2V0OmUudG87dGhpcy50cmVlcy5sZW5ndGg7KXRoaXMudHJlZXMucG9wKCksdGhpcy5zdGFydC5wb3AoKSx0aGlzLmluZGV4LnBvcCgpO3RoaXMudHJlZXMucHVzaChlLnRyZWUpLHRoaXMuc3RhcnQucHVzaCgtZS5vZmZzZXQpLHRoaXMuaW5kZXgucHVzaCgwKSx0aGlzLm5leHRTdGFydD10aGlzLnNhZmVGcm9tfWVsc2UgdGhpcy5uZXh0U3RhcnQ9MWU5fW5vZGVBdChlKXtpZihlPHRoaXMubmV4dFN0YXJ0KXJldHVybiBudWxsO2Zvcig7dGhpcy5mcmFnbWVudCYmdGhpcy5zYWZlVG88PWU7KXRoaXMubmV4dEZyYWdtZW50KCk7aWYoIXRoaXMuZnJhZ21lbnQpcmV0dXJuIG51bGw7Zm9yKDs7KXtsZXQgdD10aGlzLnRyZWVzLmxlbmd0aC0xO2lmKHQ8MClyZXR1cm4gdGhpcy5uZXh0RnJhZ21lbnQoKSxudWxsO2xldCByPXRoaXMudHJlZXNbdF0sbj10aGlzLmluZGV4W3RdO2lmKG49PXIuY2hpbGRyZW4ubGVuZ3RoKXt0aGlzLnRyZWVzLnBvcCgpLHRoaXMuc3RhcnQucG9wKCksdGhpcy5pbmRleC5wb3AoKTtjb250aW51ZX1sZXQgbz1yLmNoaWxkcmVuW25dLHM9dGhpcy5zdGFydFt0XStyLnBvc2l0aW9uc1tuXTtpZihzPmUpcmV0dXJuIHRoaXMubmV4dFN0YXJ0PXMsbnVsbDtpZihvIGluc3RhbmNlb2YgbWUpe2lmKHM9PWUpe2lmKHM8dGhpcy5zYWZlRnJvbSlyZXR1cm4gbnVsbDtsZXQgaT1zK28ubGVuZ3RoO2lmKGk8PXRoaXMuc2FmZVRvKXtsZXQgYz1vLnByb3AoWC5sb29rQWhlYWQpO2lmKCFjfHxpK2M8dGhpcy5mcmFnbWVudC50bylyZXR1cm4gb319dGhpcy5pbmRleFt0XSsrLHMrby5sZW5ndGg+PU1hdGgubWF4KHRoaXMuc2FmZUZyb20sZSkmJih0aGlzLnRyZWVzLnB1c2gobyksdGhpcy5zdGFydC5wdXNoKHMpLHRoaXMuaW5kZXgucHVzaCgwKSl9ZWxzZSB0aGlzLmluZGV4W3RdKyssdGhpcy5uZXh0U3RhcnQ9cytvLmxlbmd0aH19fSxpTj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuc3RyZWFtPXQsdGhpcy50b2tlbnM9W10sdGhpcy5tYWluVG9rZW49bnVsbCx0aGlzLmFjdGlvbnM9W10sdGhpcy50b2tlbnM9ZS50b2tlbml6ZXJzLm1hcChyPT5uZXcgdXMpfWdldEFjdGlvbnMoZSl7bGV0IHQ9MCxyPW51bGwse3BhcnNlcjpufT1lLnAse3Rva2VuaXplcnM6b309bixzPW4uc3RhdGVTbG90KGUuc3RhdGUsMyksaT1lLmN1ckNvbnRleHQ/ZS5jdXJDb250ZXh0Lmhhc2g6MCxjPTA7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspe2lmKCgxPDxhJnMpPT0wKWNvbnRpbnVlO2xldCBSPW9bYV0sbD10aGlzLnRva2Vuc1thXTtpZighKHImJiFSLmZhbGxiYWNrKSYmKChSLmNvbnRleHR1YWx8fGwuc3RhcnQhPWUucG9zfHxsLm1hc2shPXN8fGwuY29udGV4dCE9aSkmJih0aGlzLnVwZGF0ZUNhY2hlZFRva2VuKGwsUixlKSxsLm1hc2s9cyxsLmNvbnRleHQ9aSksbC5sb29rQWhlYWQ+bC5lbmQrMjUmJihjPU1hdGgubWF4KGwubG9va0FoZWFkLGMpKSxsLnZhbHVlIT0wKSl7bGV0IEU9dDtpZihsLmV4dGVuZGVkPi0xJiYodD10aGlzLmFkZEFjdGlvbnMoZSxsLmV4dGVuZGVkLGwuZW5kLHQpKSx0PXRoaXMuYWRkQWN0aW9ucyhlLGwudmFsdWUsbC5lbmQsdCksIVIuZXh0ZW5kJiYocj1sLHQ+RSkpYnJlYWt9fWZvcig7dGhpcy5hY3Rpb25zLmxlbmd0aD50Oyl0aGlzLmFjdGlvbnMucG9wKCk7cmV0dXJuIGMmJmUuc2V0TG9va0FoZWFkKGMpLCFyJiZlLnBvcz09dGhpcy5zdHJlYW0uZW5kJiYocj1uZXcgdXMsci52YWx1ZT1lLnAucGFyc2VyLmVvZlRlcm0sci5zdGFydD1yLmVuZD1lLnBvcyx0PXRoaXMuYWRkQWN0aW9ucyhlLHIudmFsdWUsci5lbmQsdCkpLHRoaXMubWFpblRva2VuPXIsdGhpcy5hY3Rpb25zfWdldE1haW5Ub2tlbihlKXtpZih0aGlzLm1haW5Ub2tlbilyZXR1cm4gdGhpcy5tYWluVG9rZW47bGV0IHQ9bmV3IHVzLHtwb3M6cixwOm59PWU7cmV0dXJuIHQuc3RhcnQ9cix0LmVuZD1NYXRoLm1pbihyKzEsbi5zdHJlYW0uZW5kKSx0LnZhbHVlPXI9PW4uc3RyZWFtLmVuZD9uLnBhcnNlci5lb2ZUZXJtOjAsdH11cGRhdGVDYWNoZWRUb2tlbihlLHQscil7bGV0IG49dGhpcy5zdHJlYW0uY2xpcFBvcyhyLnBvcyk7aWYodC50b2tlbih0aGlzLnN0cmVhbS5yZXNldChuLGUpLHIpLGUudmFsdWU+LTEpe2xldHtwYXJzZXI6b309ci5wO2ZvcihsZXQgcz0wO3M8by5zcGVjaWFsaXplZC5sZW5ndGg7cysrKWlmKG8uc3BlY2lhbGl6ZWRbc109PWUudmFsdWUpe2xldCBpPW8uc3BlY2lhbGl6ZXJzW3NdKHRoaXMuc3RyZWFtLnJlYWQoZS5zdGFydCxlLmVuZCkscik7aWYoaT49MCYmci5wLnBhcnNlci5kaWFsZWN0LmFsbG93cyhpPj4xKSl7KGkmMSk9PTA/ZS52YWx1ZT1pPj4xOmUuZXh0ZW5kZWQ9aT4+MTticmVha319fWVsc2UgZS52YWx1ZT0wLGUuZW5kPXRoaXMuc3RyZWFtLmNsaXBQb3MobisxKX1wdXRBY3Rpb24oZSx0LHIsbil7Zm9yKGxldCBvPTA7bzxuO28rPTMpaWYodGhpcy5hY3Rpb25zW29dPT1lKXJldHVybiBuO3JldHVybiB0aGlzLmFjdGlvbnNbbisrXT1lLHRoaXMuYWN0aW9uc1tuKytdPXQsdGhpcy5hY3Rpb25zW24rK109cixufWFkZEFjdGlvbnMoZSx0LHIsbil7bGV0e3N0YXRlOm99PWUse3BhcnNlcjpzfT1lLnAse2RhdGE6aX09cztmb3IobGV0IGM9MDtjPDI7YysrKWZvcihsZXQgYT1zLnN0YXRlU2xvdChvLGM/MjoxKTs7YSs9Myl7aWYoaVthXT09NjU1MzUpaWYoaVthKzFdPT0xKWE9eHQoaSxhKzIpO2Vsc2V7bj09MCYmaVthKzFdPT0yJiYobj10aGlzLnB1dEFjdGlvbih4dChpLGErMiksdCxyLG4pKTticmVha31pW2FdPT10JiYobj10aGlzLnB1dEFjdGlvbih4dChpLGErMSksdCxyLG4pKX1yZXR1cm4gbn19OyhmdW5jdGlvbihlKXtlW2UuRGlzdGFuY2U9NV09XCJEaXN0YW5jZVwiLGVbZS5NYXhSZW1haW5pbmdQZXJTdGVwPTNdPVwiTWF4UmVtYWluaW5nUGVyU3RlcFwiLGVbZS5NaW5CdWZmZXJMZW5ndGhQcnVuZT01MDBdPVwiTWluQnVmZmVyTGVuZ3RoUHJ1bmVcIixlW2UuRm9yY2VSZWR1Y2VMaW1pdD0xMF09XCJGb3JjZVJlZHVjZUxpbWl0XCIsZVtlLkN1dERlcHRoPTE1ZTNdPVwiQ3V0RGVwdGhcIixlW2UuQ3V0VG89OWUzXT1cIkN1dFRvXCJ9KShUZnx8KFRmPXt9KSk7Y049Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIsbil7dGhpcy5wYXJzZXI9ZSx0aGlzLmlucHV0PXQsdGhpcy5yYW5nZXM9bix0aGlzLnJlY292ZXJpbmc9MCx0aGlzLm5leHRTdGFja0lEPTk4MTIsdGhpcy5taW5TdGFja1Bvcz0wLHRoaXMucmV1c2VkPVtdLHRoaXMuc3RvcHBlZEF0PW51bGwsdGhpcy5zdHJlYW09bmV3IERmKHQsbiksdGhpcy50b2tlbnM9bmV3IGlOKGUsdGhpcy5zdHJlYW0pLHRoaXMudG9wVGVybT1lLnRvcFsxXTtsZXR7ZnJvbTpvfT1uWzBdO3RoaXMuc3RhY2tzPVtmcy5zdGFydCh0aGlzLGUudG9wWzBdLG8pXSx0aGlzLmZyYWdtZW50cz1yLmxlbmd0aCYmdGhpcy5zdHJlYW0uZW5kLW8+ZS5idWZmZXJMZW5ndGgqND9uZXcgc04ocixlLm5vZGVTZXQpOm51bGx9Z2V0IHBhcnNlZFBvcygpe3JldHVybiB0aGlzLm1pblN0YWNrUG9zfWFkdmFuY2UoKXtsZXQgZT10aGlzLnN0YWNrcyx0PXRoaXMubWluU3RhY2tQb3Mscj10aGlzLnN0YWNrcz1bXSxuLG87Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2xldCBpPWVbc107Zm9yKDs7KXtpZih0aGlzLnRva2Vucy5tYWluVG9rZW49bnVsbCxpLnBvcz50KXIucHVzaChpKTtlbHNle2lmKHRoaXMuYWR2YW5jZVN0YWNrKGkscixlKSljb250aW51ZTt7bnx8KG49W10sbz1bXSksbi5wdXNoKGkpO2xldCBjPXRoaXMudG9rZW5zLmdldE1haW5Ub2tlbihpKTtvLnB1c2goYy52YWx1ZSxjLmVuZCl9fWJyZWFrfX1pZighci5sZW5ndGgpe2xldCBzPW4mJmxOKG4pO2lmKHMpcmV0dXJuIHRoaXMuc3RhY2tUb1RyZWUocyk7aWYodGhpcy5wYXJzZXIuc3RyaWN0KXRocm93IHplJiZuJiZjb25zb2xlLmxvZyhcIlN0dWNrIHdpdGggdG9rZW4gXCIrKHRoaXMudG9rZW5zLm1haW5Ub2tlbj90aGlzLnBhcnNlci5nZXROYW1lKHRoaXMudG9rZW5zLm1haW5Ub2tlbi52YWx1ZSk6XCJub25lXCIpKSxuZXcgU3ludGF4RXJyb3IoXCJObyBwYXJzZSBhdCBcIit0KTt0aGlzLnJlY292ZXJpbmd8fCh0aGlzLnJlY292ZXJpbmc9NSl9aWYodGhpcy5yZWNvdmVyaW5nJiZuKXtsZXQgcz10aGlzLnN0b3BwZWRBdCE9bnVsbCYmblswXS5wb3M+dGhpcy5zdG9wcGVkQXQ/blswXTp0aGlzLnJ1blJlY292ZXJ5KG4sbyxyKTtpZihzKXJldHVybiB0aGlzLnN0YWNrVG9UcmVlKHMuZm9yY2VBbGwoKSl9aWYodGhpcy5yZWNvdmVyaW5nKXtsZXQgcz10aGlzLnJlY292ZXJpbmc9PTE/MTp0aGlzLnJlY292ZXJpbmcqMztpZihyLmxlbmd0aD5zKWZvcihyLnNvcnQoKGksYyk9PmMuc2NvcmUtaS5zY29yZSk7ci5sZW5ndGg+czspci5wb3AoKTtyLnNvbWUoaT0+aS5yZWR1Y2VQb3M+dCkmJnRoaXMucmVjb3ZlcmluZy0tfWVsc2UgaWYoci5sZW5ndGg+MSl7ZTpmb3IobGV0IHM9MDtzPHIubGVuZ3RoLTE7cysrKXtsZXQgaT1yW3NdO2ZvcihsZXQgYz1zKzE7YzxyLmxlbmd0aDtjKyspe2xldCBhPXJbY107aWYoaS5zYW1lU3RhdGUoYSl8fGkuYnVmZmVyLmxlbmd0aD41MDAmJmEuYnVmZmVyLmxlbmd0aD41MDApaWYoKGkuc2NvcmUtYS5zY29yZXx8aS5idWZmZXIubGVuZ3RoLWEuYnVmZmVyLmxlbmd0aCk+MClyLnNwbGljZShjLS0sMSk7ZWxzZXtyLnNwbGljZShzLS0sMSk7Y29udGludWUgZX19fX10aGlzLm1pblN0YWNrUG9zPXJbMF0ucG9zO2ZvcihsZXQgcz0xO3M8ci5sZW5ndGg7cysrKXJbc10ucG9zPHRoaXMubWluU3RhY2tQb3MmJih0aGlzLm1pblN0YWNrUG9zPXJbc10ucG9zKTtyZXR1cm4gbnVsbH1zdG9wQXQoZSl7aWYodGhpcy5zdG9wcGVkQXQhPW51bGwmJnRoaXMuc3RvcHBlZEF0PGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDYW4ndCBtb3ZlIHN0b3BwZWRBdCBmb3J3YXJkXCIpO3RoaXMuc3RvcHBlZEF0PWV9YWR2YW5jZVN0YWNrKGUsdCxyKXtsZXQgbj1lLnBvcyx7cGFyc2VyOm99PXRoaXMscz16ZT90aGlzLnN0YWNrSUQoZSkrXCIgLT4gXCI6XCJcIjtpZih0aGlzLnN0b3BwZWRBdCE9bnVsbCYmbj50aGlzLnN0b3BwZWRBdClyZXR1cm4gZS5mb3JjZVJlZHVjZSgpP2U6bnVsbDtpZih0aGlzLmZyYWdtZW50cyl7bGV0IGE9ZS5jdXJDb250ZXh0JiZlLmN1ckNvbnRleHQudHJhY2tlci5zdHJpY3QsUj1hP2UuY3VyQ29udGV4dC5oYXNoOjA7Zm9yKGxldCBsPXRoaXMuZnJhZ21lbnRzLm5vZGVBdChuKTtsOyl7bGV0IEU9dGhpcy5wYXJzZXIubm9kZVNldC50eXBlc1tsLnR5cGUuaWRdPT1sLnR5cGU/by5nZXRHb3RvKGUuc3RhdGUsbC50eXBlLmlkKTotMTtpZihFPi0xJiZsLmxlbmd0aCYmKCFhfHwobC5wcm9wKFguY29udGV4dEhhc2gpfHwwKT09UikpcmV0dXJuIGUudXNlTm9kZShsLEUpLHplJiZjb25zb2xlLmxvZyhzK3RoaXMuc3RhY2tJRChlKStgICh2aWEgcmV1c2Ugb2YgJHtvLmdldE5hbWUobC50eXBlLmlkKX0pYCksITA7aWYoIShsIGluc3RhbmNlb2YgbWUpfHxsLmNoaWxkcmVuLmxlbmd0aD09MHx8bC5wb3NpdGlvbnNbMF0+MClicmVhaztsZXQgdT1sLmNoaWxkcmVuWzBdO2lmKHUgaW5zdGFuY2VvZiBtZSYmbC5wb3NpdGlvbnNbMF09PTApbD11O2Vsc2UgYnJlYWt9fWxldCBpPW8uc3RhdGVTbG90KGUuc3RhdGUsNCk7aWYoaT4wKXJldHVybiBlLnJlZHVjZShpKSx6ZSYmY29uc29sZS5sb2cocyt0aGlzLnN0YWNrSUQoZSkrYCAodmlhIGFsd2F5cy1yZWR1Y2UgJHtvLmdldE5hbWUoaSY2NTUzNSl9KWApLCEwO2lmKGUuc3RhY2subGVuZ3RoPj0xNWUzKWZvcig7ZS5zdGFjay5sZW5ndGg+OWUzJiZlLmZvcmNlUmVkdWNlKCk7KTtsZXQgYz10aGlzLnRva2Vucy5nZXRBY3Rpb25zKGUpO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KXtsZXQgUj1jW2ErK10sbD1jW2ErK10sRT1jW2ErK10sdT1hPT1jLmxlbmd0aHx8IXIsZj11P2U6ZS5zcGxpdCgpO2lmKGYuYXBwbHkoUixsLEUpLHplJiZjb25zb2xlLmxvZyhzK3RoaXMuc3RhY2tJRChmKStgICh2aWEgJHsoUiY2NTUzNik9PTA/XCJzaGlmdFwiOmByZWR1Y2Ugb2YgJHtvLmdldE5hbWUoUiY2NTUzNSl9YH0gZm9yICR7by5nZXROYW1lKGwpfSBAICR7bn0ke2Y9PWU/XCJcIjpcIiwgc3BsaXRcIn0pYCksdSlyZXR1cm4hMDtmLnBvcz5uP3QucHVzaChmKTpyLnB1c2goZil9cmV0dXJuITF9YWR2YW5jZUZ1bGx5KGUsdCl7bGV0IHI9ZS5wb3M7Zm9yKDs7KXtpZighdGhpcy5hZHZhbmNlU3RhY2soZSxudWxsLG51bGwpKXJldHVybiExO2lmKGUucG9zPnIpcmV0dXJuIElmKGUsdCksITB9fXJ1blJlY292ZXJ5KGUsdCxyKXtsZXQgbj1udWxsLG89ITE7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2xldCBpPWVbc10sYz10W3M8PDFdLGE9dFsoczw8MSkrMV0sUj16ZT90aGlzLnN0YWNrSUQoaSkrXCIgLT4gXCI6XCJcIjtpZihpLmRlYWRFbmQmJihvfHwobz0hMCxpLnJlc3RhcnQoKSx6ZSYmY29uc29sZS5sb2coUit0aGlzLnN0YWNrSUQoaSkrXCIgKHJlc3RhcnRlZClcIiksdGhpcy5hZHZhbmNlRnVsbHkoaSxyKSkpKWNvbnRpbnVlO2xldCBsPWkuc3BsaXQoKSxFPVI7Zm9yKGxldCB1PTA7bC5mb3JjZVJlZHVjZSgpJiZ1PDEwJiYoemUmJmNvbnNvbGUubG9nKEUrdGhpcy5zdGFja0lEKGwpK1wiICh2aWEgZm9yY2UtcmVkdWNlKVwiKSwhdGhpcy5hZHZhbmNlRnVsbHkobCxyKSk7dSsrKXplJiYoRT10aGlzLnN0YWNrSUQobCkrXCIgLT4gXCIpO2ZvcihsZXQgdSBvZiBpLnJlY292ZXJCeUluc2VydChjKSl6ZSYmY29uc29sZS5sb2coUit0aGlzLnN0YWNrSUQodSkrXCIgKHZpYSByZWNvdmVyLWluc2VydClcIiksdGhpcy5hZHZhbmNlRnVsbHkodSxyKTt0aGlzLnN0cmVhbS5lbmQ+aS5wb3M/KGE9PWkucG9zJiYoYSsrLGM9MCksaS5yZWNvdmVyQnlEZWxldGUoYyxhKSx6ZSYmY29uc29sZS5sb2coUit0aGlzLnN0YWNrSUQoaSkrYCAodmlhIHJlY292ZXItZGVsZXRlICR7dGhpcy5wYXJzZXIuZ2V0TmFtZShjKX0pYCksSWYoaSxyKSk6KCFufHxuLnNjb3JlPGkuc2NvcmUpJiYobj1pKX1yZXR1cm4gbn1zdGFja1RvVHJlZShlKXtyZXR1cm4gZS5jbG9zZSgpLG1lLmJ1aWxkKHtidWZmZXI6dWEuY3JlYXRlKGUpLG5vZGVTZXQ6dGhpcy5wYXJzZXIubm9kZVNldCx0b3BJRDp0aGlzLnRvcFRlcm0sbWF4QnVmZmVyTGVuZ3RoOnRoaXMucGFyc2VyLmJ1ZmZlckxlbmd0aCxyZXVzZWQ6dGhpcy5yZXVzZWQsc3RhcnQ6dGhpcy5yYW5nZXNbMF0uZnJvbSxsZW5ndGg6ZS5wb3MtdGhpcy5yYW5nZXNbMF0uZnJvbSxtaW5SZXBlYXRUeXBlOnRoaXMucGFyc2VyLm1pblJlcGVhdFRlcm19KX1zdGFja0lEKGUpe2xldCB0PShsYXx8KGxhPW5ldyBXZWFrTWFwKSkuZ2V0KGUpO3JldHVybiB0fHxsYS5zZXQoZSx0PVN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMubmV4dFN0YWNrSUQrKykpLHQrZX19O2FOPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLnNvdXJjZT1lLHRoaXMuZmxhZ3M9dCx0aGlzLmRpc2FibGVkPXJ9YWxsb3dzKGUpe3JldHVybiF0aGlzLmRpc2FibGVkfHx0aGlzLmRpc2FibGVkW2VdPT0wfX0sRWE9ZT0+ZSxSTj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnN0YXJ0PWUuc3RhcnQsdGhpcy5zaGlmdD1lLnNoaWZ0fHxFYSx0aGlzLnJlZHVjZT1lLnJlZHVjZXx8RWEsdGhpcy5yZXVzZT1lLnJldXNlfHxFYSx0aGlzLmhhc2g9ZS5oYXNofHwoKCk9PjApLHRoaXMuc3RyaWN0PWUuc3RyaWN0IT09ITF9fSxfYT1jbGFzcyBleHRlbmRzIGRme2NvbnN0cnVjdG9yKGUpe2lmKHN1cGVyKCksdGhpcy53cmFwcGVycz1bXSxlLnZlcnNpb24hPTE0KXRocm93IG5ldyBSYW5nZUVycm9yKGBQYXJzZXIgdmVyc2lvbiAoJHtlLnZlcnNpb259KSBkb2Vzbid0IG1hdGNoIHJ1bnRpbWUgdmVyc2lvbiAoJHsxNH0pYCk7bGV0IHQ9ZS5ub2RlTmFtZXMuc3BsaXQoXCIgXCIpO3RoaXMubWluUmVwZWF0VGVybT10Lmxlbmd0aDtmb3IobGV0IGk9MDtpPGUucmVwZWF0Tm9kZUNvdW50O2krKyl0LnB1c2goXCJcIik7bGV0IHI9T2JqZWN0LmtleXMoZS50b3BSdWxlcykubWFwKGk9PmUudG9wUnVsZXNbaV1bMV0pLG49W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspbi5wdXNoKFtdKTtmdW5jdGlvbiBvKGksYyxhKXtuW2ldLnB1c2goW2MsYy5kZXNlcmlhbGl6ZShTdHJpbmcoYSkpXSl9aWYoZS5ub2RlUHJvcHMpZm9yKGxldCBpIG9mIGUubm9kZVByb3BzKXtsZXQgYz1pWzBdO3R5cGVvZiBjPT1cInN0cmluZ1wiJiYoYz1YW2NdKTtmb3IobGV0IGE9MTthPGkubGVuZ3RoOyl7bGV0IFI9aVthKytdO2lmKFI+PTApbyhSLGMsaVthKytdKTtlbHNle2xldCBsPWlbYSstUl07Zm9yKGxldCBFPS1SO0U+MDtFLS0pbyhpW2ErK10sYyxsKTthKyt9fX10aGlzLm5vZGVTZXQ9bmV3IGNhKHQubWFwKChpLGMpPT5YZS5kZWZpbmUoe25hbWU6Yz49dGhpcy5taW5SZXBlYXRUZXJtP3ZvaWQgMDppLGlkOmMscHJvcHM6bltjXSx0b3A6ci5pbmRleE9mKGMpPi0xLGVycm9yOmM9PTAsc2tpcHBlZDplLnNraXBwZWROb2RlcyYmZS5za2lwcGVkTm9kZXMuaW5kZXhPZihjKT4tMX0pKSksZS5wcm9wU291cmNlcyYmKHRoaXMubm9kZVNldD10aGlzLm5vZGVTZXQuZXh0ZW5kKC4uLmUucHJvcFNvdXJjZXMpKSx0aGlzLnN0cmljdD0hMSx0aGlzLmJ1ZmZlckxlbmd0aD11ZjtsZXQgcz1FcyhlLnRva2VuRGF0YSk7dGhpcy5jb250ZXh0PWUuY29udGV4dCx0aGlzLnNwZWNpYWxpemVyU3BlY3M9ZS5zcGVjaWFsaXplZHx8W10sdGhpcy5zcGVjaWFsaXplZD1uZXcgVWludDE2QXJyYXkodGhpcy5zcGVjaWFsaXplclNwZWNzLmxlbmd0aCk7Zm9yKGxldCBpPTA7aTx0aGlzLnNwZWNpYWxpemVyU3BlY3MubGVuZ3RoO2krKyl0aGlzLnNwZWNpYWxpemVkW2ldPXRoaXMuc3BlY2lhbGl6ZXJTcGVjc1tpXS50ZXJtO3RoaXMuc3BlY2lhbGl6ZXJzPXRoaXMuc3BlY2lhbGl6ZXJTcGVjcy5tYXAobWYpLHRoaXMuc3RhdGVzPUVzKGUuc3RhdGVzLFVpbnQzMkFycmF5KSx0aGlzLmRhdGE9RXMoZS5zdGF0ZURhdGEpLHRoaXMuZ290bz1FcyhlLmdvdG8pLHRoaXMubWF4VGVybT1lLm1heFRlcm0sdGhpcy50b2tlbml6ZXJzPWUudG9rZW5pemVycy5tYXAoaT0+dHlwZW9mIGk9PVwibnVtYmVyXCI/bmV3IF9zKHMsaSk6aSksdGhpcy50b3BSdWxlcz1lLnRvcFJ1bGVzLHRoaXMuZGlhbGVjdHM9ZS5kaWFsZWN0c3x8e30sdGhpcy5keW5hbWljUHJlY2VkZW5jZXM9ZS5keW5hbWljUHJlY2VkZW5jZXN8fG51bGwsdGhpcy50b2tlblByZWNUYWJsZT1lLnRva2VuUHJlYyx0aGlzLnRlcm1OYW1lcz1lLnRlcm1OYW1lc3x8bnVsbCx0aGlzLm1heE5vZGU9dGhpcy5ub2RlU2V0LnR5cGVzLmxlbmd0aC0xLHRoaXMuZGlhbGVjdD10aGlzLnBhcnNlRGlhbGVjdCgpLHRoaXMudG9wPXRoaXMudG9wUnVsZXNbT2JqZWN0LmtleXModGhpcy50b3BSdWxlcylbMF1dfWNyZWF0ZVBhcnNlKGUsdCxyKXtsZXQgbj1uZXcgY04odGhpcyxlLHQscik7Zm9yKGxldCBvIG9mIHRoaXMud3JhcHBlcnMpbj1vKG4sZSx0LHIpO3JldHVybiBufWdldEdvdG8oZSx0LHI9ITEpe2xldCBuPXRoaXMuZ290bztpZih0Pj1uWzBdKXJldHVybi0xO2ZvcihsZXQgbz1uW3QrMV07Oyl7bGV0IHM9bltvKytdLGk9cyYxLGM9bltvKytdO2lmKGkmJnIpcmV0dXJuIGM7Zm9yKGxldCBhPW8rKHM+PjEpO288YTtvKyspaWYobltvXT09ZSlyZXR1cm4gYztpZihpKXJldHVybi0xfX1oYXNBY3Rpb24oZSx0KXtsZXQgcj10aGlzLmRhdGE7Zm9yKGxldCBuPTA7bjwyO24rKylmb3IobGV0IG89dGhpcy5zdGF0ZVNsb3QoZSxuPzI6MSksczs7bys9Myl7aWYoKHM9cltvXSk9PTY1NTM1KWlmKHJbbysxXT09MSlzPXJbbz14dChyLG8rMildO2Vsc2V7aWYocltvKzFdPT0yKXJldHVybiB4dChyLG8rMik7YnJlYWt9aWYocz09dHx8cz09MClyZXR1cm4geHQocixvKzEpfXJldHVybiAwfXN0YXRlU2xvdChlLHQpe3JldHVybiB0aGlzLnN0YXRlc1tlKjYrdF19c3RhdGVGbGFnKGUsdCl7cmV0dXJuKHRoaXMuc3RhdGVTbG90KGUsMCkmdCk+MH12YWxpZEFjdGlvbihlLHQpe2lmKHQ9PXRoaXMuc3RhdGVTbG90KGUsNCkpcmV0dXJuITA7Zm9yKGxldCByPXRoaXMuc3RhdGVTbG90KGUsMSk7O3IrPTMpe2lmKHRoaXMuZGF0YVtyXT09NjU1MzUpaWYodGhpcy5kYXRhW3IrMV09PTEpcj14dCh0aGlzLmRhdGEscisyKTtlbHNlIHJldHVybiExO2lmKHQ9PXh0KHRoaXMuZGF0YSxyKzEpKXJldHVybiEwfX1uZXh0U3RhdGVzKGUpe2xldCB0PVtdO2ZvcihsZXQgcj10aGlzLnN0YXRlU2xvdChlLDEpOztyKz0zKXtpZih0aGlzLmRhdGFbcl09PTY1NTM1KWlmKHRoaXMuZGF0YVtyKzFdPT0xKXI9eHQodGhpcy5kYXRhLHIrMik7ZWxzZSBicmVhaztpZigodGhpcy5kYXRhW3IrMl0mMSk9PTApe2xldCBuPXRoaXMuZGF0YVtyKzFdO3Quc29tZSgobyxzKT0+cyYxJiZvPT1uKXx8dC5wdXNoKHRoaXMuZGF0YVtyXSxuKX19cmV0dXJuIHR9b3ZlcnJpZGVzKGUsdCl7bGV0IHI9Z2YodGhpcy5kYXRhLHRoaXMudG9rZW5QcmVjVGFibGUsdCk7cmV0dXJuIHI8MHx8Z2YodGhpcy5kYXRhLHRoaXMudG9rZW5QcmVjVGFibGUsZSk8cn1jb25maWd1cmUoZSl7bGV0IHQ9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKF9hLnByb3RvdHlwZSksdGhpcyk7aWYoZS5wcm9wcyYmKHQubm9kZVNldD10aGlzLm5vZGVTZXQuZXh0ZW5kKC4uLmUucHJvcHMpKSxlLnRvcCl7bGV0IHI9dGhpcy50b3BSdWxlc1tlLnRvcF07aWYoIXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgdG9wIHJ1bGUgbmFtZSAke2UudG9wfWApO3QudG9wPXJ9cmV0dXJuIGUudG9rZW5pemVycyYmKHQudG9rZW5pemVycz10aGlzLnRva2VuaXplcnMubWFwKHI9PntsZXQgbj1lLnRva2VuaXplcnMuZmluZChvPT5vLmZyb209PXIpO3JldHVybiBuP24udG86cn0pKSxlLnNwZWNpYWxpemVycyYmKHQuc3BlY2lhbGl6ZXJzPXRoaXMuc3BlY2lhbGl6ZXJzLnNsaWNlKCksdC5zcGVjaWFsaXplclNwZWNzPXRoaXMuc3BlY2lhbGl6ZXJTcGVjcy5tYXAoKHIsbik9PntsZXQgbz1lLnNwZWNpYWxpemVycy5maW5kKGk9PmkuZnJvbT09ci5leHRlcm5hbCk7aWYoIW8pcmV0dXJuIHI7bGV0IHM9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHIpLHtleHRlcm5hbDpvLnRvfSk7cmV0dXJuIHQuc3BlY2lhbGl6ZXJzW25dPW1mKHMpLHN9KSksZS5jb250ZXh0VHJhY2tlciYmKHQuY29udGV4dD1lLmNvbnRleHRUcmFja2VyKSxlLmRpYWxlY3QmJih0LmRpYWxlY3Q9dGhpcy5wYXJzZURpYWxlY3QoZS5kaWFsZWN0KSksZS5zdHJpY3QhPW51bGwmJih0LnN0cmljdD1lLnN0cmljdCksZS53cmFwJiYodC53cmFwcGVycz10LndyYXBwZXJzLmNvbmNhdChlLndyYXApKSxlLmJ1ZmZlckxlbmd0aCE9bnVsbCYmKHQuYnVmZmVyTGVuZ3RoPWUuYnVmZmVyTGVuZ3RoKSx0fWhhc1dyYXBwZXJzKCl7cmV0dXJuIHRoaXMud3JhcHBlcnMubGVuZ3RoPjB9Z2V0TmFtZShlKXtyZXR1cm4gdGhpcy50ZXJtTmFtZXM/dGhpcy50ZXJtTmFtZXNbZV06U3RyaW5nKGU8PXRoaXMubWF4Tm9kZSYmdGhpcy5ub2RlU2V0LnR5cGVzW2VdLm5hbWV8fGUpfWdldCBlb2ZUZXJtKCl7cmV0dXJuIHRoaXMubWF4Tm9kZSsxfWdldCB0b3BOb2RlKCl7cmV0dXJuIHRoaXMubm9kZVNldC50eXBlc1t0aGlzLnRvcFsxXV19ZHluYW1pY1ByZWNlZGVuY2UoZSl7bGV0IHQ9dGhpcy5keW5hbWljUHJlY2VkZW5jZXM7cmV0dXJuIHQ9PW51bGw/MDp0W2VdfHwwfXBhcnNlRGlhbGVjdChlKXtsZXQgdD1PYmplY3Qua2V5cyh0aGlzLmRpYWxlY3RzKSxyPXQubWFwKCgpPT4hMSk7aWYoZSlmb3IobGV0IG8gb2YgZS5zcGxpdChcIiBcIikpe2xldCBzPXQuaW5kZXhPZihvKTtzPj0wJiYocltzXT0hMCl9bGV0IG49bnVsbDtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKylpZighcltvXSlmb3IobGV0IHM9dGhpcy5kaWFsZWN0c1t0W29dXSxpOyhpPXRoaXMuZGF0YVtzKytdKSE9NjU1MzU7KShufHwobj1uZXcgVWludDhBcnJheSh0aGlzLm1heFRlcm0rMSkpKVtpXT0xO3JldHVybiBuZXcgYU4oZSxyLG4pfXN0YXRpYyBkZXNlcmlhbGl6ZShlKXtyZXR1cm4gbmV3IF9hKGUpfX19KTt2YXIgYmY9e307cmUoYmYse0NvbnRleHRUcmFja2VyOigpPT5STixFeHRlcm5hbFRva2VuaXplcjooKT0+bk4sSW5wdXRTdHJlYW06KCk9PkRmLExSUGFyc2VyOigpPT5fYSxTdGFjazooKT0+ZnN9KTt2YXIgQ2Y9cCgoKT0+e3lmKCl9KTt2YXIgRU49TWYoKFIxLExmKT0+e0xmLmV4cG9ydHM9KENmKCksQmYoYmYpKX0pO3JldHVybiBFTigpO30pKCk7XG4gcmV0dXJuIG1vZDt9KSgpIgogIH0KfQ==", "dist/iAWriterMonoS-Italic.woff2": "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" }